展开目录 ▾
#Claude Code#Anthropic#AI编程#插件系统#开发者工具

Claude Code Mods 全解:几行 TypeScript 挂钩内部事件,代价是「没有沙箱」

Anthropic 发布 Claude Code Mods:用 TypeScript 函数挂到 Claude Code 的事件系统上,就能重写提示词、拦截或重试工具调用、自行批准权限、在 Claude 读到之前抹掉密钥,甚至替换界面。多个 Mod 按加载顺序形成中间件链,内置功能(如 /diff)开始迁移成 Mod;代价是 Mod 没有沙箱,与 Claude Code 本身同权限。

预计阅读 14 分钟

一句话总结

Anthropic 把 Claude Code 从一个「你只能等官方更新」的闭源 Agent,改成了一个可以在运行时被改写的运行时:一个 Mod 就是几行 TypeScript,挂到 Claude Code 的内部事件上,就能在提示词送进模型之前改掉它、拦下或重试一次工具调用、自行批准或拒绝一次权限请求、在 Claude 读到工具输出之前把密钥抹掉,甚至替换它画在终端里的一块界面。多个 Mod 抢同一个事件时按加载顺序排成一条中间件链,内置功能也开始一个一个搬出去变成 Mod —— 但官方把丑话说在前面:Mod 没有沙箱,它和 Claude Code 本身拥有同样的机器权限。

数据来源:Anthropic 官方产品博客《Customize Claude Code with mods》(2026-10-01)与 Claude Code 官方文档的 Mods 事件参考(/docs/en/plugins/mods/events、/docs/en/plugins/mods/reference);社区目录 claudecodemods.com;Gate News 关于发布与「预览阶段代号 Function Hooks」的报道(2026-10-02)。


先说清楚:Mod 到底是什么

如果把 Claude Code 看成一台还在持续进化的机器,那这次发布做的事情是在机器上开了一排检修口。

Anthropic 官方发布博客:Customize Claude Code with mods,日期为 2026 年 10 月 1 日

官方对它的定义很短:Mod 是小的 TypeScript 函数,用来改变 Claude Code 的工作方式 —— 可以重写一个提示词、加一段新界面、替换掉一个内置功能,或者加一整套原本不存在的能力。它住在**插件(plugin)**里,所以安装和分享的方式跟你现在装插件没有区别,CLI 和桌面端都支持。

真正关键的一句话是它为什么会出现。官方说,开发者早就想要更多控制权,但不想等官方把功能排期做出来。旧版的 hooks 给了一部分控制权,但 hooks 改不了事件、画不了新界面、也替换不了功能;Mod 可以。

这就是「Mods 和 hooks 到底差在哪」的标准答案:hooks 是在固定位置跑一条 shell 命令;Mod 是接管事件本身的函数,能读、能改、能代答。


它怎么工作:事件、中间件链,一个函数做四件事

Mod 的模型其实只有一个概念,叫事件。Claude Code 每准备做一件事就发出一个事件 —— 官方举的三个例子是:调用一个工具、请求一次权限、绘制一部分屏幕。Mod 就是一个挂在这些事件上的函数,它可以选择在事件前跑、在事件后跑、取代事件本身,或者把事件包起来(前后各跑一次)。

Mod 生命周期示意:Claude Code 事件被四种拦截姿势包裹,多个 Mod 按加载顺序叠成一条链

官方文档给出了具体的 API 形状:用 on(eventName, handler) 注册,handler 收到三个参数 —— mods API(写作 $)、事件本身(e)、以及下一个处理器 next。所有挂在同一事件上的 handler 构成一条中间件链,next(e) 表示「交给下一个 Mod,或者走到链尾交给 Claude Code 自己」,并把结果 resolve 回来。你怎么用 next,决定了你是「观察」「改写」还是「代答」:

// 观察:跑完之后记一行,结果原样交回去
on('tool.call', async ($, e, next) => {
  const result = await next(e)
  $.ui.log(e.tool + ' finished')
  return result
})
// 改写:把改过的一份事件副本往下传,后面的 Mod 和 Claude Code 再也看不到原文
on('prompt.submit', async ($, e, next) => {
  return next({ ...e, text: e.text.trim() })
})

这里有一个设计细节值得单独拎出来:事件对象是深度冻结(deeply frozen)的,直接给它赋值会抛错。 想改就必须显式造一份副本往回传。这是个很克制的选择 —— 它让「谁改了这段提示词」这件事在代码里是显式的,而不是某个 Mod 偷偷把别人的事件改了。

一个函数能做的事,官方列了四条:重写提示词(在送进模型前)、阻止、重写或重试一次工具调用、批准或拒绝一次权限请求、在 Claude 读到工具输出之前把密钥抹掉。最后一条是那种「本来得靠规范约束、现在能靠代码强制」的能力。

Anthropic 官方博客「How mods work」章节:Mod 能改写提示词、拦截工具调用、审批权限、清洗工具输出

而事件本身远不止三个。官方参考手册按主题把事件分了组,覆盖面比「工具调用」这一件事大得多:

事件组代表事件挂上去能干什么
工具tool.call、tool.check、tool.describe改工具描述、阻止/改写/重试调用,或直接返回结果
提示词与上下文prompt.submit、prompt.section、prompt.context改用户提示、增删系统提示的某个小节、改首条消息的上下文
命令与配置command.run、config.set、config.describe拦截命令、改 /config 里某一行的值与说明
回合turn.start、turn.step、turn.complete在单次请求发往模型前换模型或推理强度
会话session.start、session.compact、session.append、session.send/receive改写要存进对话的每一行、跳过压缩、甚至让两个会话互相发消息
子 Agentagent.offer、agent.spawn不给 Claude 提供某个子 Agent 类型,或换掉它的模型
界面ui.render、ui.press、ui.input往指定渲染点画东西、接管按钮与输入

session.send / session.receive 这组特别有意思 —— 它意味着 Mod 不只是改本地行为,还能让两个 Claude Code 会话之间互相传消息。加上 turn.step 能换模型、effort 能换推理强度,这套 API 实际上把「Agent 循环的每一个关节」都开放出来了。


一个 Mod 能改什么,边界又在哪

把上面的能力收拢成一张图,就是下面这样:

一个 Mod 能做的事情清单,以及「没有沙箱」和「内建 sec-default 先加载」两条边界

左边一半是能力:改写提示词、拦截工具调用、审批权限、清洗工具输出、改界面、加新功能。右边两条是边界,而且这两条边界比能力更值得记住。

第一条边界:没有沙箱。 官方原话是 Mod「与 Claude Code 本身拥有同样的机器访问权限」,它们不被沙箱隔离,所以只应从你信任的来源安装 —— 就像你安装任何一份代码到电脑上一样。翻译一下:装一个来路不明的 Mod,约等于让它以你 Claude Code 的身份在你机器上跑任意代码。这一点发布当天就有独立报道专门标了出来,社区目录 claudecodemods.com 也反复强调它的「Source verified」只是确认来源可访问,不是安全审计。

第二条边界:内建 Mod 先加载。 在 Team / Enterprise 方案以及任何被托管设置(managed settings)管理的机器上,一个叫 sec-default(security default) 的内建 Mod 会最先加载,专门挡住用户自己装的 Mod 去做危险动作,比如覆盖组织的权限拒绝规则。管理员也可以选择加载自己的 Mod 来代替它,官方提醒那样做时要补上 sec-default。这条设计等于把「组织策略」放在了「个人插件」的前面 —— 加载顺序这件事在这里第一次有了安全含义。

顺带一个容易被忽略的治理细节:Mod 是随插件走的,所以现有的插件管控直接适用。管理员可以允许或禁止某些插件市场;Team / Enterprise 的 owner 在管理控制台里设置;Claude API 与第三方 API 方案的机器则由管理员把托管设置推到用户机器上。


内置功能正在搬出去:把 Claude Code 削成一个「小核心」

这次发布里,最能说明长期方向的一句话是:一些原本内建的功能现在就以 Mod 的形式发布。 官方点的例子是内置的 /diff(会话里未提交改动的、按文件与 hunk 排列的对照面板)—— 可以保留它、也可以换成自己的版本。官方的计划是继续把更多内建功能迁移成 Mod,让你能把 Claude Code 削到「一个很小的核心」,然后只把自己要的部分加回来。

这背后是一种很明确的架构取向:与其让每一个用户都背着一台长满功能的整机,不如让核心保持小,其余全部可插拔。对团队来说还有一层现实好处 —— 想要的功能不用等官方排期。

官方顺手给了三个「团队可以自己搭的信号量」的例子,正好对应三种典型诉求:

  • CI/CD 状态:一个 Mod 在对话旁边开一块面板,显示流水线状态,构建成功或失败时实时更新;
  • 生产保护:一个 Mod 要求任何碰到生产配置的命令都必须先确认;
  • 审计日志:一个最先加载的 Mod,可以把其他所有 Mod 发出的每一次调用都记下来 —— 这正好利用了「先加载者先看到事件、最后拿到结果」的顺序语义。

最后这条差不多是把「加载顺序」当成了权限模型在用:谁先加载,谁就能看得见所有人。


生态:官方只发了 4 个,社区目录已经挂出 35 条

发布当天,社区就自发组织起了目录。claudecodemods.com 把自己定位为「Claude Code 的 mod / 插件 / 技能 / agent / hooks / MCP 服务器」社区索引,每条都链到源码,并标注「Built in(内建)」或「Source verified(来源已验证)」。它页面上显示「35 条结果里的 5 条」,其中 4 条是 Anthropic 随 Claude Code 一起发布的内建 Mod:

社区目录 claudecodemods.com:35 条收录,其中 agents-md / diff / sec-default / telemetry 为官方内建 Mod

  • agents-md:让 Claude Code 把 AGENTS.md 当作项目指令来读,就像它读 CLAUDE.md 那样;
  • diff:就是那个搬到 Mod 里的 /diff;
  • sec-default:前面说的安全默认值;
  • telemetry:在引擎的 create 折叠点加 $.telemetry,让内建插件能记录第一方分析数据、批量上报,并拒绝已安装的第三方插件使用。

(telemetry 拒绝第三方插件这一条,配合前面的 sec-default,基本能看出 Anthropic 对「谁能拿数据、谁能改策略」的答案:先加载的几个内建 Mod 拿着钥匙。)

社区那边的进展速度也值得一提:据当日的行业汇总,发布 24 小时内就出现了 token 用量面板、循环(loop)检测、内联 Mermaid 渲染、悬停时遮盖密钥、停靠式 diff 面板等 Mod,甚至有人在 Claude Code 会话里跑起了俄罗斯方块。Anthropic 自己在官方公告发布前就把 Mods 的设计放到了 GitHub 上征集意见 —— 这也解释了为什么生态起量这么快。

还有一个几乎是「元」的用法:你可以用 Claude Code 给 Claude Code 写 Mod。 官方明确说,直接让 Claude 创建一个 Mod,它可以写完 TypeScript、装好,并在当前会话里热加载生效。写一个扩展去扩展你正在用来写扩展的工具,这条循环在一句话里合上了。


那根刺:能力越顺手,风险越不像风险

抛开架构不谈,这次发布最需要读者自己掂量的是能力与风险的对称性。

Mod 能做的四件事里,每一件都有一个「反面用法」:能重写提示词,就能偷偷改掉你给模型的约束;能拦截或重写工具调用,就能让一条命令看起来跑了、其实被换成了别的;能批准权限请求,就能让本该弹出确认的动作悄悄通过;能在 Claude 读到之前清洗工具输出,也就能往工具输出里塞内容。而所有这些都发生在你完全信任的那个终端里、没有沙箱、和 Claude Code 同权限。

官方不是没意识到:sec-default、插件市场管控、托管设置这几样都是冲着这个来的。但它们的保护范围也很清楚 —— 主要面向 Team / Enterprise 与有托管设置的机器,个人用户在本地随手装的一个 Mod,落到的就是那句「只从可信来源安装」上。

所以这一节的结论其实很朴素:Mod 把「Claude Code 有多好」和「你装的代码有多可信」绑在了一起。 在 hooks 时代,风险大致等于「某条 shell 命令会不会乱来」;在 Mod 时代,被开放的是一整个 Agent 循环的事件面。


对开发者意味着什么

把它放回趋势里看,这次发布和最近一个月 Agent 工具线的几个动作是同一个方向的两面:

  • 一边是把 Agent 内部状态开放出来(Claude Code 的 Mods、Claude Code 自己的 /agents 视图、会话间的消息通道);
  • 另一边是给 Agent 加上外部的安全壳(比如 NVIDIA 那套把 agent 关进 OpenShell、用 Sentry 在宿主机外面盯着它的方案)。

两边的回答其实互为补集:框架层面开放更多接口,就意味着必须有另一层来兜住「开放」带来的风险。 Claude Code 这次先做了开放,兜底只给了企业侧。

对普通开发者,可立刻变现的点有三个:一是把团队规范变成代码(生产保护、审计日志这两类需求,过去靠 code review 和自觉,现在能写成 Mod);二是省掉等官方排期的成本(一个面板、一个渲染点,自己就能加);三是做一件以前做不到的事 —— 让两个 Agent 会话直接对话,这在多 Agent 协作里是个新的基础件。

但要提醒自己一句:装上别人写的 Mod,性质上等同于 git clone 一个仓库然后 npm install。 官方文档里那句「就像你安装任何一份代码到你的电脑上一样」,读起来轻描淡写,其实是这次发布里最需要认真对待的一句话。


总结

  • 一句话:Mod 是挂在 Claude Code 事件上的 TypeScript 函数,能观察、改写或代答事件,装法就是插件;CLI 与桌面端今天可用。
  • 机制:on(eventName, handler) + ( $, e, next ) 中间件链,事件深度冻结、修改必须显式造副本;覆盖工具、提示词、命令配置、回合、会话、子 Agent、界面七组事件。
  • 方向:内置功能持续迁出成 Mod,官方希望你把 Claude Code 削成一个小核心、按需加回。
  • 代价:没有沙箱,与 Claude Code 同权限;保护措施(sec-default、插件市场管控)主要落在 Team / Enterprise 侧。
  • 生态:官方先发 4 个内建 Mod(agents-md / diff / sec-default / telemetry),社区目录当天已滚到 35 条,24 小时内出现用量面板、循环检测、Mermaid 渲染等 Mod,甚至有人在会话里跑起了俄罗斯方块。
  • 怎么用最稳:把它当团队内部的策略层(生产保护、审计、CI 面板)最划算;装第三方 Mod 前先当它是「要在你机器上跑的代码」。

相关阅读:OpenAI 的 Decisions API 为什么被叫作「Jev 克隆」 | Google Gemini 4 Argon 全解

图片出处:封面与流程/能力示意图由 UU AI Hub 自制;产品界面与文档截图取自 Anthropic 官方博客《Customize Claude Code with mods》原文与 Claude Code 官方文档;社区目录截图取自 claudecodemods.com。

Related

相关文章

延伸阅读

查看全部 →
Cloudflare

决策模型井喷:Cloudflare 开源 Clef、AWS 发布 Strands Decider 2B,两周内四家入场

「决策模型」在两周内从一家创业公司的概念变成一层基础设施:9/15 TypeSafe 的 Jev、9/29 OpenAI 的 Decisions API、10/1 Cloudflare 开源 Clef 与 Clef-flash、同日 AWS 发布 Strands Decider 2B。它们不写文本,只对预设选项打分并给出校准概率,把路由与审批从大模型里拆出来;本文拆解两家新玩家的架构、官方基准与开源程度。

Google

Google 把 AI 数据中心的第一块砖送上太空:Project Suncatcher 原型卫星全解

Google 10 月 1 日把 Project Suncatcher 的第一颗原型卫星送上太空:冰箱大小、四颗自研 Trillium TPU、约 1 千瓦太阳能,目标是验证商用 AI 芯片能否扛住辐射、发射振动与真空散热。散热被公认为最大难题,限制它每次只能连续跑约 15 分钟。Google 称低轨太阳能发电量最多是地面的 8 倍,2027 年再发两颗测激光互联——但这仍是一次实验,不是已经成立的太空数据中心。

OpenAI

推理是怎么被偷走的:OpenAI 挫败一场「跨会话重放」反蒸馏行动,核心集群指向 Moonshot 关联人员

OpenAI 10 月 1 日披露挫败一场针对模型「受保护推理」的协同抽取行动:不破解加密,而是把一段会话里加密的推理搬到另一段会话,让同厂商的弱模型充当「解密预言机」逐字转写。7 月 24-25 日峰值 16000 次请求、4000+ 用户,7 月 28 日完全阻断,核心集群归因 Moonshot 关联人员;研究者同日复测发现自家 API 已挡住、微软 Azure 仍然有效。