Anthropic 10 月 1 日给 Claude Code 加了一套叫 mods 的扩展机制。按官方博客的说法,mod 是一小段 TypeScript 函数,挂在 Claude Code 的事件上,可以改写提示词、加界面元素、替换内置功能,或者干脆加一个新功能。CLI 和桌面版都支持,要求 Claude Code 2.1.287 或更高版本。
分发走现有的插件体系:从 Claude 插件目录安装,或者在会话里运行 /plugin。想把自己写的 mod 给别人用,打包成插件提交到目录即可。
能碰到哪些环节
Claude Code 里调用工具、请求权限、绘制屏幕的某一块,每个动作都会发出事件,mod 可以在事件之前、之后运行,也可以整个顶替掉它。官方列出的能力包括:
- 改写到达模型的提示词;
- 拦截、改写或重试工具调用;
- 批准或拒绝权限请求;
- 在 Claude 读到工具输出之前,删改其中的部分内容;
- 往界面上加按钮和输入框。
开发者博客的入门教程由 Addy Osmani 执笔,把处理模型讲得更细。每个钩子是中间件链上的一环,有三种写法:先调用 next(e) 放行,拿到结果再看,叫观察;把改过字段的事件传下去,叫改写;不调用 next(),直接返回 {deny: "reason"},叫作答。覆盖的事件有工具调用、提交提示词、轮次的开始与结束、斜杠命令和界面渲染。
教程的示例是一个约 80 行的 mod,名叫 Token Weather。它在输入框上方画一条”上下文天气预报”:按上下文窗口占用比例换天气图标,显示当前 token 数和百分比,附一条最近 12 轮的迷你折线,再标出比上一轮涨了多少。界面部分用的是 AbovePrompt 组件。
从 hooks 到 mods
Claude Code 原本就有 settings hooks,做法是每个事件起一次 shell 命令,靠 stdin 和 stdout 传 JSON。这种写法简单,代价是每次都是一个新进程,记不住上一次发生了什么。
mods 在会话开始时加载一次,之后一直驻留。教程里列出的差别有三条:能保存状态,能渲染会变化的界面,能调用 Claude Code 自己的功能,比如打开面板、注册命令。Token Weather 要画 12 轮的折线,就依赖这份常驻状态,换成 shell hook 得自己往磁盘上写记录。
把这条线往前串,Claude Code 的可扩展性是一层层叠上去的:先有 CLAUDE.md 和 settings hooks,后来有了 /plugin 插件市场,前些天对 AGENTS.md 的支持也是用一个内置插件实现的。mods 把钩子从”外挂一个脚本”变成了”在进程里跑一段代码”,可改动的范围一下子大了很多。
安全边界
范围变大,风险也跟着变大。官方博客的原话很直接:
Mods run with the same access to your machine as Claude Code itself. They aren’t sandboxed, and you should only install mods from sources you trust. (mods 对你机器的访问权限和 Claude Code 本身一样。它们不在沙盒里运行,只应从你信任的来源安装。)
教程里另有一句描述运行环境:模块跑在自己的隔离环境里,没有 DOM,也没有 Node,所有对外操作都要经过 $ 这个接口。两处说法放在一起看,隔离的是运行时,不是权限。一个 mod 只要拿到权限事件,就能替用户点”同意”。
Team 和 Enterprise 套餐,以及装了托管设置的机器,会先加载一个内置 mod,叫 sec-default,用来拦住用户自装 mod 的高风险动作,比如覆盖权限拒绝规则;管理员还可以在企业控制台里限定能装哪些插件市场。个人账号默认没有这层兜底。对国内团队来说,Claude Code 的账号和网络门槛本来就高,mods 短期内更像是给已经在用的团队多一个定制工具,第三方 mod 生态能长多快,要看目录审核放得多宽。
参考来源:Anthropic Claude 官方博客、Claude 开发者博客入门教程、CocoLoop;官方教程核对版本要求、事件类型与示例代码行数。