10 月 1 日,Anthropic 在官方博客发布了一个让不少 Claude Code 重度用户眼前一亮的功能:Mods。用官方的话说——「没有理由让每个人都拥有一模一样的 Claude 体验」。
Mods 是一组小型 TypeScript 函数,挂钩在 Claude Code 的内部事件上。过去你想定制 Claude Code,只能等官方排期,或者用 hooks 在少数几个点位上做点「旁观者」式的拦截;而 mods 把这件事彻底打开了:你的代码可以在事件发生之前改写它、在之后加工它、取而代之自己回答、或者前后包裹做审计。官方发的一句话概括是:一个 mod 可以改写 prompt、增加 UI、替换内置功能,或者添加全新能力。
这篇文章在发布第三天带你从概念到上手走完整条路:mods 到底是什么、和 hooks/插件/CLAUDE.md 有什么区别、第一个 mod 怎么写怎么装、怎么让 Claude Code 自己帮你写 mod,以及那些装之前必须知道的安全红线。
一、先看懂事件模型:mods 挂在哪
理解 mods 只需要一个模型:Claude Code 每做一件事,都会发出一个事件。
| 事件类型 | 举例 | mod 能做什么 |
|---|---|---|
| 工具调用 | Claude 要执行 Bash、Edit、Read 等工具 | 拦截、改写参数、失败后重试、记录审计日志 |
| 权限请求 | 命令需要用户批准 | 按规则自动批准或拒绝(如生产环境一律拒绝) |
| Prompt 提交 | 你的输入即将发给模型 | 在到达模型前改写、注入上下文 |
| 工具输出返回 | 命令执行完,结果要给 Claude 读 | 脱敏——把密钥、内网地址涂掉再让模型看 |
| 界面绘制 | 终端或桌面应用渲染某个部件 | 改写字段显示、加按钮和输入框、整块替换 UI |
一个 mod 就是一个钩在某个事件上的函数,执行时机有四种:
- before:事件之前运行,可以改写事件的输入(比如给 prompt 追加项目规范)。
- after:事件之后运行,可以加工输出(比如把工具输出里的 AK 密钥换成三个星号)。
- instead:完全取代事件,由你的代码给出答案(比如用一个内部服务接管
/diff)。 - wrap:前后包裹,进入前和返回后都执行——这是做审计日志和计时的姿势。
当多个 mod 钩同一事件时,按加载顺序执行:先加载的先看事件、最后看结果。这意味着不同作者的 mods 可以安全叠放,一个做脱敏、一个做审计,互不打架。
二、Mods 不是 hooks:一张表厘清四兄弟
Claude Code 的定制手段已经不少,mods 和它们的关系是发布会后最容易混淆的点:
| 能力 | CLAUDE.md | Hooks | 插件 | Mods |
|---|---|---|---|---|
| 给模型注入指令/上下文 | ✅ | ✅ | ✅ | ✅ |
| 在事件发生时执行代码 | ❌ | ✅(有限点位) | ✅ | ✅(所有事件) |
| 改写事件本身(而不是只旁观) | ❌ | ❌ | 部分 | ✅ |
| 绘制/替换界面 | ❌ | ❌ | ❌ | ✅ |
| 替换内置功能(如 /diff) | ❌ | ❌ | ❌ | ✅ |
| 分发方式 | 仓库文件 | 配置文件 | 插件市场 | 随插件分发 |
官方的定位很直白:hooks 给了用户一部分控制权,但 hooks 不能改写事件、不能画 UI、不能替换功能,mods 全都能。换句话说,hooks 是「通知你一下」,mods 是「把方向盘给你」。
三、动手:第一个 mod 全流程
前置条件:Claude Code CLI 或桌面应用升级至 v2.1.287 或更高版本(mods 从此版本起默认开启)。在 CLI 里输入 /plugin 确认能打开插件管理界面即可。
Mods 随插件分发,一个插件可以带多个 mod。最小插件结构大致如下(以官方 Create a mod 文档为准):
my-plugin/
├── .claude-plugin/
│ └── plugin.json # 插件清单
├── mods/
│ └── redact-secrets.ts # 你的 mod
└── package.json
来一个有真实价值的例子:一个 secret 脱敏 mod,在工具输出返回后、Claude 读取之前,把看起来像密钥的内容涂掉:
// mods/redact-secrets.ts
// 在 PostToolUse 事件后执行:给工具输出脱敏
const SECRET_PATTERNS = [
/sk-[a-zA-Z0-9]{20,}/g, // API Key
/AKIA[A-Z0-9]{16}/g, // AWS Access Key
/-----BEGIN [A-Z ]*PRIVATE KEY-----/g, // PEM 私钥头
];
export default {
event: "tool-output",
timing: "after",
handler(output: string): string {
let result = output;
for (const re of SECRET_PATTERNS) {
result = result.replace(re, "[REDACTED]");
}
return result; // 脱敏后的输出才会进入 Claude 的上下文
},
};
把它装进 Claude Code 只需两步:
# 1. 本地加载插件(开发期)
/plugin
# 在插件管理界面里添加本地插件目录
# 2. 装完即生效——mods 支持热重载,不用重启会话
如果功能写对了,效果立竿见影:让 Claude Code cat .env,它读到的内容里所有密钥都已经是 [REDACTED]——模型根本没机会看到明文。这就是「在事件之后加工」的典型用法,也是企业里最值得先装的那类 mod。
再进阶一步:用 wrap 时机的 mod 给所有工具调用记审计日志,或者在权限请求事件上写一条规则——「任何包含 --prod 或 kubectl 的命令一律拒绝」。这几类场景正是官方在发布博客里给企业用户点名的方向。
四、让 Claude Code 自己写 mod
Anthropic 埋了一个很顺手的能力:你可以让 Claude Code 给自己写 mod。
直接在会话里说:
「帮我写一个 mod:每次我提交 prompt 时,如果里面包含『部署』两个字,就在发给模型前追加我们团队的部署规范;权限请求事件上,凡是生产环境的命令都自动拒绝。」
Claude Code 会自己完成写 TypeScript、装进插件、热重载这一整条链,写完当场就能用。对不想手写事件钩子的用户,这基本是零门槛入口——官方的原话是「你不必自己写,让 Claude 写给你」。
五、连内置功能都变成了 mods
这次发布里最容易被忽略、但长期影响最大的一点:部分 Claude Code 内置功能已经改造成 mods 本身。官方举的例子是内置的 /diff 命令——它现在就是一个 mod,你可以在 /plugin 里直接关掉它,或者写一个同名 mod 替换成你自己的 diff 实现(接内部代码评审平台、改成侧栏 UI,随你)。
官方明确表示,后续会把更多内置功能迁成 mods,让用户「把 Claude Code 削减到一个最小内核,再按需装回想要的功能」。这基本上宣告了 Claude Code 的产品形态转向:官方维护内核,生态拼装体验。
六、装之前必读:安全红线
Mods 的能力上限和 Claude Code 本体完全一致——它们运行在你的机器上、没有沙箱,能读写文件、能看到每一条 prompt 和每一次工具调用。官方的原话是:「就像你安装机器上的任何代码一样,只装你信任来源的 mods。」
具体三条红线:
- 来源审查:装第三方 mod 前读源码。能看到每一次工具调用意味着什么,不言而喻——一个恶意 mod 可以把你整个会话抄走。
- 企业管控:Mods 走插件体系,现有插件管控全部适用。Team/Enterprise 的管理员可以在管理后台允许或封禁插件市场;这些环境里会默认最先加载一个叫
sec-default(security default)的内置 mod,阻止用户自装的 mods 做危险操作(比如覆盖管理员的权限拒绝规则)。管理员也可以换成自己的首批加载 mods,但官方建议保留sec-default的限制。 - 别拿 mods 做权限绕过:
sec-default明确阻断「覆盖权限拒绝规则」这类操作。如果你是管理员,审计方向之一就是:加载顺序最靠前的那个 mod 可以记录其后所有 mod 的每次调用——审计日志 mod 应该第一个加载。
企业场景里官方点了三个最值得做的内部 mods:CI/CD 状态面板(在对话旁显示流水线状态,构建成败实时刷新)、生产保护(任何碰生产配置的命令强制二次确认)、审计日志(记录全部 mod 调用)。这三件套的实现思路在第三节的示例里都覆盖到了。
常见问题
Q:mods 和 MCP server 是什么关系? 正交。MCP 是给 Claude 接入外部工具和数据源的协议,mods 是改变 Claude Code 自身行为的扩展点。一个管「能用什么」,一个管「本身怎么运转」。
Q:我不会 TypeScript 能用 mods 吗? 可以走第四节的路:用自然语言描述需求,让 Claude Code 自己生成 mod。但从安全角度(第一节红线),即使是 AI 写的,装之前也建议读一遍源码。
Q:旧的 hooks 会废弃吗? 官方没有这么说。mods 是超集能力的扩展点,hooks 仍然存在;但对于需要改写事件、画 UI、替换功能的需求,mods 是明确的未来方向。
小结
10 月 1 日发布的 mods,把 Claude Code 从「一个产品」变成了「一个平台」:事件驱动的挂钩模型(before / after / instead / wrap)覆盖行为、输出、权限、UI 四个层面,插件化分发让个人作品和企业内控都能走同一条安装链路,连内置功能都开始向 mods 迁移。对个人开发者,最短路径是 /plugin 装一个社区 mod,或让 Claude 帮你写第一个;对团队,sec-default + 审计 mod + 生产保护 mod 是三个今天就能规划的最小落地组合。唯一要记住的是:mods 没有沙箱,信任是安装的唯一前提。
