AREX Feed Article
Anthropic 为 Claude Code 推出 Mods:TypeScript 可改写行为与界面,经 /plugin 安装
10 月 1 日(北京时间 10 月 2 日凌晨),Anthropic 的官方开发者账号 ,Claude Code 现在支持 mods:一种用几行 TypeScript 写成的小函数,可以改变它的行为、自定义界面、换上开发者自己的功能,也可以直接让 Claude 代写。mods 打包在插件里分发,在 CLI(命令行界面)或桌面应用中用 /plugin 安装。
官方帖文给出了三个示例 mod:Token Weather 显示上下文窗口的「天气预报」,Blast Radius 在 rm -rf、git reset --hard、强制推送这类危险 shell 命令运行前拦截,Replay Theater 记录 Claude 每一轮的文件编辑、用 /replay 逐个回放 diff。帖文同时提醒,,不会被沙箱隔离,应该像对待任何要装进电脑的代码一样,只安装来自可信来源的 mod。
事件钩子:一个 mod 如何介入 Claude Code 的每一步
官方把 mod 定义为一种 Claude Code 插件,行为写在一个 JavaScript 或 TypeScript 模块里:模块在会话内运行,实时看到发生的每一个事件。每当 Claude Code 调用工具、提交提示词、开始或结束一轮对话、绘制界面的某个部分,都会发出事件;mod 在事件上注册函数,可以选择观察后放行、改写事件再交给下游,或者直接接管,比如拒绝一次工具调用。
官方补充说,一个 mod 还可以把事件「包」起来,在事件前后各运行一段代码;多个 mod 挂在同一个事件上时按加载顺序执行,先加载的最先看到事件、最后拿到结果,因此来自不同作者的 mod 可以叠加。设置文件里的 hooks(settings hooks)做不到这些:它们是由设置文件配置、在事件上执行的 shell 命令、HTTP 请求或提示词,从 Claude Code 外部工作,无法改写事件、绘制新界面或替换功能;mod 是运行在 Claude Code 内部的函数,不但能重绘它自己画出的界面元素,比如工具调用那一行、转圈提示(spinner)和提问对话框,还能在提示框上方或旁侧新增带按钮、输入框的面板。入门指南给出的另一处差别是:settings hook 为每个事件执行一次命令,mod 只加载一次、留在会话里,可以保存状态,也可以打开面板、启动进程、注册斜杠命令,或注册一个供模型调用的工具。
还标出了绘制的边界:mod 的钩子会随插件在所有加载它的会话里运行,但只有终端和桌面应用会显示 mod 画出的面板、带状栏和被替换的行。用户只需在会话里描述想要的 mod,Claude 就会写出 TypeScript、把它装好,并在同一个会话里热重载。mods 需要 Claude Code v2.1.287 或更高版本,且默认开启。
三个样例:拦下危险命令、预报上下文、回放 diff
帖文为三个示例各配了一段演示视频。
在 rm -rf、git reset --hard 或强制推送这类危险 shell 命令运行前把它们拦下,并在侧栏展示这条命令会触及什么。入门指南的一张截图记录了一次被拦下的 git reset --hard:提示列出这条命令将「丢弃 2 个文件的未提交修改」,点名 NOTES.md 与 src/math.js,注明这些改动无法找回,并给出两个选项:继续(Proceed)和取消(Cancel)。
在提示框上方画出一条上下文预报:窗口用了多少、已用 token(文本计量单位)与窗口总量,以及最近 12 轮的迷你柱状图。指南给出的分档是:低于 25% 为晴朗(Clear)、25%~49% 为多云(Cloudy)、50%~74% 为阵雨(Showers)、75%~89% 为风暴(Storm)、90% 及以上提示即将压缩上下文(Compact soon)。截图里的一次会话就落在风暴档:81% of context、161.1k / 200k、+26.7k last turn。指南从空文件夹开始逐步搭出这个示例,完整代码约 80 行;另一条路径更省事:把想要的效果描述给 Claude,让它直接写出来。
记录 Claude 在每一轮对话里做过的全部文件编辑;运行 /replay,一个停靠窗格会一次一个地展示这些 diff。截图中的窗格标着第 2 步(共 5 步)、greet.js 的一行改动,以及上一步(Prev)、下一步(Next)、关闭(Close)三个按钮。
Anthropic 自己先用上了:/diff 与 AGENTS.md 已是 mod
写道,团队已经用 mods 构建了 /diff 和 AGENTS.md 支持这类功能。官方博客进一步说明,内置的 /diff 现在就是一个 mod,用户可以在 /plugin 里把它关掉,或换成自己的版本。
官方在发布前就把 mods 的设计放上 GitHub 征集开发者反馈,对应的 issue 创建于 9 月 3 日。四个内置 mod 的源码则公开在 anthropics/claude-code 仓库的 。仓库说明称,这四个 mod 随 Claude Code 一起发布:diff 提供会话未提交改动面板,agents-md 决定 AGENTS.md 作为项目指令的加载方式,telemetry 负责记录遥测事件,sec-default 则供组织管控使用。
权限清单:一个 mod 加载后能碰到什么
官方文档把 mod 能碰到的东西列得很具体:一个 mod 加载后,可以以你的身份读写账号权限内的任何文件、启动程序、发起网络请求;读取环境变量和设置文件里的机密,包括 API key;看到你发出的每一条提示和 Claude 的每一次工具调用;改写提示词或工具调用,甚至以你的名义提交提示词;在你被询问之前先替你批准一次工具调用;并消耗你套餐或 API key 的用量。
文档注明,mod 可以重绘 Claude Code 的大部分界面,但无法改变权限提示框展示给你的内容;文档还提醒,能批准工具调用的 mod,可以批准被 ask 规则或 PreToolUse 钩子拦下的调用。安装前想先看清楚,可以先把插件文件取到本地,在终端运行 claude plugin validate:输出里的 hooks 与 calls 会列出这个 mod 处理哪些事件、会向 Claude Code 请求哪些动作,整个过程不需要运行它。
要停用则有三档:在 /plugin 的已安装列表里禁用或卸载单个 mod;用 --safe-mode 启动,让一次会话不加载已装的 mod 与其他自定义;或者在 ~/.claude/settings.json 里设置 "disableAllHooks": true,停掉自己安装的所有 mod(settings hooks 和自定义状态栏也会一起停,组织托管的部分照常运行)。
分发与管控:Claude 目录、插件市场与 sec-default
mods 随插件分发,现有的插件管控因此直接适用。官方博客写明:管理员可以允许或屏蔽插件市场,Team 与企业版由管理员在管理后台设置,Claude API 与第三方 API 方案则由管理员向用户机器推送托管设置。在 Team、企业版和任何配置了托管设置的机器上,内置 mod sec-default 会最先加载,阻止用户安装的 mod 做危险的事,例如覆盖组织的权限拒绝规则;管理员也可以改为先加载自己的 mod,但那样需要把 sec-default 加回列表,才能保留它的限制。
分发路径上,官方给出的做法是:mod 可以自己留着用,也可以打包成插件;安装时从目录或 /plugin 获取。还称,官方正在把预置的示例 mods 加入 ,供开发者借鉴改造。
发布后的反应:赞赏、权限疑问与下一步
发布当天, 写道,mods「简直不可思议」,用户现在只用提示词,就能把 Claude 定制成自己想要的工作和显示方式;他说每个人的工作方式不同,没有理由让所有人拥有完全一样的 Claude 体验,并鼓励把 mod 作为插件分享给别人。 则把 mods 称作「Claude Code 的中间件」,并说一个 TypeScript 函数可以拦截工具调用、提示词、模型请求和渲染这些内部事件,改变实际发生的事情,还能加入自己的界面和命令。
回复里也有人把重点放在权限上。用户 写道:「很喜欢这个,但 mod 本质上就是别人的代码,住进了本来就握着你的文件和终端的程序里。安装前先读一读,尤其是别人私信发给你的那种。」另一位用户 说,为了改个界面就把 coding agent(编码智能体)的机器权限交给一个 mod,他不太愿意:「安装之前,我想要一份清楚的清单,说明它能碰什么。」
官方博客还写明了下一步:把更多内置功能迁移成 mod,让 Claude Code 收缩成一个小内核,用户再按需把想要的部分加回来。