2026 年 10 月 1 日,Anthropic 在官方开发者博客 claude.dev 发布教程,确认 Claude Code 新增 mods 功能:开发者可以用几行 JavaScript 或 TypeScript 编写插件模块,观察、改写甚至拒绝会话中的事件,还能绘制自定义界面。当天晚些时候,Claude 官方 X 账号也正式宣布了这一功能。简单说,Claude Code 从"可以配置"变成了一部分"可以编程"。
mods 到底能做什么
mods 的本质是运行在插件内部的 hooks 模块。每个 mod 导出一个 register 函数,通过 on(event, matcher, hook) 注册钩子。事件流经一条钩子链:先经过你的 mod,再到其他插件,最后才是 Claude Code 自己的行为。一个钩子可以做三件事:观察(先放行、再记录,比如记下每次文件修改)、改写(替换事件内容再放行,比如把一条危险命令换成更安全的写法)、拒绝(直接返回拒绝结果不再放行,比如拦下某个工具调用)。
事件的覆盖面很广:工具调用、提交的 prompt、回合开始与结束、会话开始与结束、斜杠命令,以及 ui.render——界面绘制的每一个环节都能介入。官方教程演示了一个约 80 行的示例 mod「Token Weather」:在提示符上方实时画一条上下文窗口"天气预报",按占用比例显示晴、阴、阵雨、风暴等级,每回合自动更新。
和 settings hooks 的区别
Claude Code 原来就有 settings hooks,容易混淆,但两者机制完全不同:settings hooks 是每个事件触发一次 shell 命令,用 stdin/stdout 传 JSON,是无状态的"一次性触发器";而 mod 只加载一次、常驻整个会话,可以保持状态、绘制随事件实时更新的 UI,还能回调 Claude Code 本体——打开面板、运行进程、注册斜杠命令,甚至注册一个模型可以直接调用的新工具。
一个有说服力的细节是:Anthropic 自己就在用 mods 构建 Claude Code 的功能,AGENTS.md 支持和对话旁边的 /diff 面板都是 mods 实现的,源码带测试用例公开在 anthropics/claude-code 仓库的 mods/ 目录下。等于官方先把这套机制在自己身上跑通,再开放出来。
两种上手方式
门槛不高:需要 Claude Code 2.1.287 或更高版本,mods 默认开启,无需手动启用。mod 随插件分发,在 CLI 或桌面应用里用 /plugin 安装。
官方教程给了两条路。手写:按插件目录结构放好 plugin.json 和 hooks 模块,Claude Code 加载时会把当前版本的 TypeScript 类型声明写进插件目录,以那份声明为准。偷懒:直接让 Claude 代写——描述想要的界面效果,Claude 会在支持热重载的会话里把 mod 写出来,改需求时边改边看效果,满意后再把文件夹拷出来当普通插件安装。教程里那句"不需要懂 API 也能写一个"基本属实,因为 Claude Code 内置了写 mods 的指引。
适合谁、边界在哪
经常给 Claude Code 加自定义工作流的人会最先受益:想在高风险命令前加一道确认、想在提示符上方常驻一个状态读数、想按自己的阅读习惯重做变更审阅视图——这些以前要靠外部脚本拼凑,现在可以直接写进会话里。对插件作者来说,mods 把原来只能"配置"的东西变成了可以"编程"的接口。
边界也要看清:mod 运行在独立沙盒里,没有 DOM 也没有 Node,所有外部能力都要走官方提供的 $ API;官方也提醒 API 可能随版本变化。接下来值得关注的是社区生态:/plugin 分发机制已经就绪,第一批第三方 mods 应该很快就会出现,到时候拼的不再是"会不会配 Claude Code",而是"有没有好用的 mods 组合"。