ARTICLE · 1122804
Claude Code 可以装插件了:能改你的提示、能掐掉工具调用,也能读走你的密钥
10月1日到2日这两天,Anthropic 给 Claude Code 加了一个叫 mods 的东西。官方的描述很克制,说它是"用 TypeScript 写的小函数,用来改变编码助手的行为"。实际能做的事,比这句话大得多。
一个 mod 可以在提示送进模型之前把它改掉。可以在一条命令执行之前把它拦下来、改写或者重跑。可以在 Claude 读到工具输出之前把里面的密钥抹掉。甚至可以在你的权限确认弹出来之前,替你把这条调用批准了。
代价写在官方文档里,一行,但值得单独拎出来说:mods 不被沙箱包裹。哪怕你开了 Claude Code 自己的沙箱,一个 mod 也拥有和 Claude Code 完全相同的权限。装上别人写的 mod,等于把机器的钥匙给了那个人。
它到底是个什么东西
先说清楚它不是什么。Claude Code 之前就有 hooks,可以对事件挂一条 shell 命令。那种做法够用但笨重:每触发一次就起一条命令,跑完就结束,记不住上一次的事。
mods 不一样。它是一个常驻模块,写在插件的 hooks/hooks.json 里,导出一个 register(on, options) 函数。每个钩子收到 ($, e, next),然后有三条路可以走:
往下传,然后看结果——这叫 observe。改一下事件再往下传,比如把一条危险命令换成安全版本——这叫 rewrite。直接返回,不往下走了,比如 return {deny: "原因"} 拒绝这次工具调用——这叫 answer。
三条路对应三种完全不同的控制强度。第一条只是看,第二条能改内容,第三条能一票否决。
状态是另一个区别。mods 常驻在会话里,可以把东西存进 $.state,跨轮次保留。官方特意提醒一件事:开了热重载之后,模块级变量会被重置,只有塞进 $.state 的值能活下来。这个细节在实现计数类的功能时会直接踩到。
还有个隐形门槛:每次钩子派发有 10 秒超时。做重活的 mod 得自己想办法,别指望能长时间占着。
官方给的三个例子
Anthropic 自己写了三个示例,基本划出了能力边界。
Token Weather 大约 80 行,在提示框上方画一条实时的上下文窗口水位线,外加最近 12 轮的迷你曲线。它读的是每个主轮次结束后的用量,其中常规的用量读取不花钱,只有请求细分时才触发一次 token 计数。
Blast Radius 干的是拦截。遇到 rm -rf、git reset --hard、强制推送这类命令,它先跑一次 dry-run,把这条命令实际会碰到什么显示在侧边面板里,然后让你选继续还是取消。取消的话,它向 Claude 返回的是一条拒绝。
Replay Theater 是一次回溯。它把 Claude 这一轮里改过的每个文件都记下来,你敲 /replay,就能在一个停靠面板里一个一个 diff 地过。
三个例子分别对应读、拦、记。要留意的是 Anthropic 自己对 Blast Radius 的定性:"一道安全网,不是一套权限系统。"它读的是命令文本本身,一个子 shell 或者一条 alias 就能绕过去。这句话是官方写的,不是我在泼冷水。
内置功能正在变成插件
更值得注意的动向是:Anthropic 开始把自己写的功能也做成 mods。
/diff 命令现在就是一个 mod,你可以用 /plugin 把它关掉,或者换成自己写的版本。AGENTS.md 的加载逻辑、遥测,也已经改成了内置 mod,后面还会有更多。官方的说法是希望开发者能把 Claude Code 削成一个很小的内核,只把需要的部分装回来。
这条路 Bash 和 Emacs 走过几十年了。一个工具一旦把自己的功能拆成可插拔的部件,它的形态就不再由厂商单独决定。
还有个挺有意思的循环:你可以直接让 Claude 帮你写 mod。它生成 TypeScript、装上、在当前会话里热重载,你在会话里就能迭代。官方入门指南里,这一步是标准流程。
团队和企业那一边
mods 装在插件里,所以现成的插件管理机制直接适用。管理员可以允许或者封掉插件市场,团队版和企业版在管理后台里设,走 API 的用托管设置推到用户机器上。
在托管计划里,有个叫 sec-default 的内置 mod 会被第一个加载。它阻止用户自己装的 mod 覆盖权限拒绝规则、以及做其他几件危险操作。管理员也可以换成自己写的 mod 先加载,但 Anthropic 建议把这个保留在列表里。
这套设计给了企业一个此前没有的层次。以前想约束编码智能体的行为,要么 fork 工具,要么在外面套一层脚本。现在可以在端点上直接落地策略:生产环境的配置被碰到之前强制二次确认;CI/CD 状态在对话旁边常驻显示;审计日志用一个最先加载的 mod,把后面所有 mod 的调用全记下来。
代价那一部分
把话说回来。mods 不受沙箱约束,这一条意味着几件具体的事:
一个 mod 能读到你的环境变量里有什么。能改写任何一条提示,包括你以为原样发出去的那句。能在权限提示弹给你之前批准工具调用。能在 Claude 看到工具输出之前读完它。
信任边界变成了"你最后装的那个 mod 是谁写的"。
这不是假设的风险。插件生态一旦热闹起来,"好用的一键增强包"这类东西就会出现,而大多数人不会去读别人的 TypeScript。Anthropic 把 sec-default 设计成强制第一个加载,说明它自己清楚这一点。
另外两个工程上的现实:mod API 被明确标注为不稳定,版本之间可能直接变,每次加载会把版本对应的声明写进 .claude-plugin/types/;官方的工具链里有 claude plugin validate 和 claude plugin test 可以做校验,但这两个命令验的是格式和基本行为,验不了作者的意图。
该怎么上手
个人的话,从 Token Weather 这种只读的开始。它不改动任何东西,纯粹加个显示,出问题也只是显示错。熟悉了再往拦截类走。
团队要装第三方 mod,建议按这几条来:先看它的 hooks.json 里注册了哪些事件,尤其是有没有挂 permission request 和 tool call——这两个是权限和执行的入口。第二,搜代码里有没有 fetch、child_process、读环境变量的地方。第三,在企业版里一定保留 sec-default 先加载。第四,别在开发机上装来源不明的插件——它有你机器上 Claude Code 的全部权限,而你的开发机通常能连生产。
最后一句:这个功能把 Claude Code 从一个"带开关的工具"变成了"可编程的运行时"。前者你只需要决定用不用,后者你得负责它最终变成什么样。
时间点为什么是现在
把这件事放回同一周看会更清楚。9月29日 OpenAI 在 DevDay 上让 Codex 全面上云,可以从手机上起任务;更早一点 Claude Sonnet 5.5 把 Terminal-Bench 从 10.3% 推到 70.6%,各家在编码智能体上的动作明显密集了。当各家模型的coding能力差距在收窄,能拉开距离的就不是"答得多好",而是"在你的环境里能接到什么程度"。
Anthropic 选的解法是把控制权交出去——你来写规则,别等我排期。这条路的好处是适配快,代价是它没法替你判断你写的规则对不对。OpenAI 那边的解法偏向另一头:dots 的内里是只读优先、敏感操作强制回到用户手上,把闸门握在自己手里。两种思路没有优劣,只是把信任放在不同位置。
对个人开发者,这个差别体现在日常:Anthropic 这条路给你的是自由度,你愿意折腾就能把它改成你要的样子;代价是出事时没人替你兜。选之前想清楚自己是哪一类用户就够了。

【总结】
10月1日至2日,Anthropic 为 Claude Code 推出 mods:一段 TypeScript,装在插件里,用 /plugin 装上,需要 Claude Code 2.1.287 或更高版本。一个 mod 收到事件后可以 observe(观察后记录)、rewrite(改写后下传)或 answer(直接返回并接管),据此能改写提示、拦截或重试工具调用、批准或拒绝权限申请、在 Claude 读取前给工具输出脱敏、自定义 UI 和 slash 命令。官方给出 Token Weather(上下文水位线,约 80 行)、Blast Radius(危险命令 dry-run 预览,自称"安全网不是权限系统")、Replay Theater(逐步回看本轮 diff)三个例子;/diff、AGENTS.md 加载与遥测已改造成内置 mod。关键点有两个:一是 mods 常驻并能用 $.state 保状态(热重载会重置模块级变量),钩子派发有 10 秒超时,API 被标注为不稳定;二是 mods 不受沙箱约束,拥有与 Claude Code 相同的权限,可读取密钥、改写提示、在用户被询问前批准工具调用——企业版靠首个加载的 sec-default 兜底。建议从只读类开始试用,团队安装第三方 mod 前必须审查其注册事件与网络、子进程、环境变量相关代码。