Claude Code Mods 入门:先分清插件与 Hook

有人搜索“Claude Code Mods”,大概是想给终端加一条上下文用量提示,或者在危险命令执行前多一道拦截。这个词目前指向不止一个社区仓库,不能把某份合集当作 Anthropic 官方发布的唯一“Mods 商店”。我选 hamzafer/claude-code-mods 作一个具体例子,因为它把安装方式、插件清单和版本要求都写在了 README 里;下文的命令只适用于这个仓库,安装之前还应查看仓库当前内容。

本站此前介绍过 Ponytail 的规则与代码审查。它与这里的界面 Mod 都能装进编码助手,但问题不同:前者约束 Agent 如何写代码,后者在 Claude Code 的交互与工具调用节点添加行为。

社区 Claude Code Mods 的 context-bar 插件截图

#Mod 做了什么

该仓库把 Mod 包装成 Claude Code 插件,底下使用 function hooks 扩展交互。context-bar 在输入框附近显示上下文占用;review-watch 显示正在运行的代码审查状态;md-preview 则把 Markdown 预览摆在修改旁边。另一个 blast-radius 会在删除、强推等高风险动作前拦住操作并展示影响范围。它们的权限需求显然不同:一条状态栏与一个能观察命令、阻止命令的 Hook,不该仅因都叫 Mod 就被当成同一种风险。

官方 README 写明所需 Claude Code 版本为 2.1.287 或更新,个别插件还要浏览器、gh 或其他连接器。先在自己的环境里确认版本,再从仓库说明里挑一个插件试用,不妨先用只负责显示信息的 context-bar:

1
2
claude plugin marketplace add hamzafer/claude-code-mods
claude plugin install context-bar@claude-code-mods

装完要重启 Claude Code。这里第一条是登记社区 marketplace,第二条才是安装指定插件;命令不意味着把仓库里的每个 Mod 都装上。若只想临时看看,仓库也给出 claude --plugin-dir mods/context-bar 的本地试用方式,详见 项目 README。我没有在本站环境里安装它,故不把仓库截图说成自己运行后的画面。

#安装 Hook 时该检查什么

社区还有 Mod 清单仓库,它特别标注各 Mod 可能读、写、运行或发送什么内容。这个检查方法比按下载量选插件可靠。一个修改提示词的 Hook 可能接触会话内容;一个运行外部程序的 Hook 可能拥有工作区权限;向网络发送数据的功能则要问清发送目标和数据范围。安装前看插件源码、Hook 声明和依赖,先在非敏感项目试用,观察实际行为,不把密钥所在的工作区当成试验场。

另有 Claude Code 官方插件文档 可用来区分“插件机制”与“第三方插件内容”。平台提供安装机制,不等于替社区每个 Mod 背书。日报把 Claude Code Mods 概括成“官方推出的插件系统”,说法太容易混淆:平台的扩展能力与某位开发者维护的 Mod 集合,是两件事。

#拿两个 Mod 看具体差别

context-bar 的 插件目录 中有 .claude-plugin、hooks、tests 等文件夹,仓库的 功能说明 写得比“实时显示 Token”准确:它把 system prompt、工具、MCP 工具、记忆文件、技能和消息等占用画成一条堆叠栏,并保留空闲量和压缩缓冲区。数字按本地可见的 /context 信息估算,说明中也注明按需加载的工具 schema 未计入;故这条栏不应被当成实际账单。若看到占用与后台计费数字不同,先检查两者衡量的是否同一件事。

再看 blast-radius,目录下的 Hook 注册代码 会针对 Bash 工具调用识别删除、强推、数据库迁移等操作,展示即将触及的范围,默认无人回应 60 秒后取消。这是代码审查所得,不是我对每个命令都完成的现场测试。它不能代替 Git 保护分支、备份或数据库回滚方案:匹配器可能漏掉某种等效写法,估计的文件范围也可能因命令、符号链接和执行环境而偏离实际。若将“有拦截器”理解为“所有危险操作都会被挡住”,恰恰容易放松原先应该有的检查。

这两个目录中的 hooks/hooks.json 都只把模块指向 ./register.tsx;仅看清单文件看不出 Hook 最终会调用什么。需要顺着注册模块继续看事件监听、可执行命令与网络请求。Anthropic 的 插件安全文档 也建议安装前查看 marketplace 来源,打开插件详情里的组件清单,并检查 hooks/hooks.json、.mcp.json、bin/。对于这类通过代码注册的 Mod,还要继续读导入的源码,而不能停在 JSON 文件。

#一次只安装一个,保留退路

在终端执行 claude plugin marketplace list,先检查已经登记的来源;在 Claude Code 的 /plugin 详情中核对即将安装的组件,再决定范围。前文的 marketplace 命令登记仓库,context-bar@claude-code-mods 中 @ 后面是 marketplace 名,并不是 npm 包的版本。若想不污染常用配置,项目 README 给出本地试用方法:克隆仓库后运行 claude --plugin-dir mods/context-bar;克隆本身也要审查来源。这些命令的完整语法可对照 官方插件安装说明。

插件出现异常时,先回到干净环境复现,再检查版本要求与插件自身依赖。要暂停可按官方文档在终端使用 claude plugin disable context-bar@claude-code-mods,恢复用 enable,不再需要则 uninstall;指定安装范围时须对照原范围,不能误以为删了用户级插件就连项目级配置一起清除了。具体命令及默认作用范围见 安装文档。安装失败、界面没显示时也别立刻重装十遍,先确认 Claude Code 版本、重启会话,并查看插件详情中 Hook 是否被识别。

#看清权限,才谈自己开发

要改一点信息显示,先别急着写自己的 Mod。Claude Code 自带 /context 可以查上下文占用,context-bar 的优点是免去反复手动查看,并把各类占用持续显示;它不应改变 Agent 对仓库文件的处理流程。如果只想在提交前运行检查,可能普通的项目脚本或 Git hook 已经够用。只有当需求确实发生在 Claude Code 的会话生命周期、工具调用前后,才值得使用 Claude Code 的 Hook 或开发 Mod。多一段常驻钩子,就多一处权限、运行时和兼容性的维护成本。

假设准备写一个“执行测试后在输入框上方显示结果”的扩展,至少应想清楚三个问题。什么时候运行? 每轮结束还是仅当测试命令完成;接收什么数据? 只读退出码、测试摘要,还是整段命令输出;写到哪里? 显示栏、文件、外部服务。测试输出可能包含访问令牌、内部路径和用户数据,不能因为界面上只显示“失败 2 项”就假定插件没有读过完整输出。先读 官方 Hook 文档 的事件与输入契约,再核对插件的注册模块以及依赖的运行程序,别让一个展示用插件顺便拿走了整个会话。

拿 blast-radius 来说,它拦截到的是某类 Bash 调用,保护行为是额外的一次确认;一条命令经过别的工具、通过脚本间接运行、在另一个终端执行,都不能由它兜底。测试这类保护,应该在测试仓库与测试分支准备文件,先用无害的模拟命令确认拦截条件、取消动作和超时行为,再看真实的高危动作。千万不要为了验证提示框去对重要仓库试一条强推,哪怕插件声称会挡住。

最后还有一个维护问题。市场列表、插件目录以及版本会变;仓库说明是发布者对当前功能的描述,不是与未来所有 Claude Code 版本兼容的保证。遇到升级后显示错位或启动变慢,可先 disable 对比有无插件时的差异,查看变更记录和问题列表,再决定等修复还是卸载。分开安装的好处,正在于可以明确知道哪一个模块造成问题。

我认为先装一个能看得见、关得掉的 Mod,读懂它的 Hook,再决定是否需要审查拦截或自动化动作,这比一次性安装一百个插件要省心得多。

资料:示例仓库与安装步骤 · 社区权限清单 · Claude Code 插件文档