Claude Code Mods 是什么?怎么安装、怎么关闭、安不安全
Mods 让你用几行 JavaScript 改写 Claude Code 的行为和界面。本文说明它和 hooks、skills 的区别,怎么安装和关闭,以及安装前要注意的安全问题。
本文根据公开分享整理,本站尚未实测。操作前请对照文末的原始来源。
Anthropic 在 2026 年 10 月 1 日给 Claude Code 加了一个叫 Mods 的功能。一句话概括:Mod 是一种插件,里面是 JavaScript 或 TypeScript 写的事件处理函数,直接运行在 Claude Code 进程内部,可以观察、修改甚至接管 Claude Code 的行为和界面。
它默认开启,终端里需要 Claude Code v2.1.287 或更高版本,桌面应用从 v2.1.286 起支持。
Mods 能做什么
官方文档列了五类以前做不到的事:
- 画出可以操作的界面:在对话记录旁边加一个面板,或者在输入框上方加一条信息带,里面可以有标签页、按钮和输入框。
- 重画 Claude Code 自己的界面:替换或修改工具调用那一行、加载动画、Claude 提问用的对话框等。
- 介入一次工具调用或请求:比如先拦住一个工具调用,问你一句再决定是否执行;或者不执行工具直接给出结果;或者把某个请求转给另一个模型。
- 给命令绑定自己的代码:注册一个
/命令,执行的是你的函数,不经过模型,Claude 正在工作时也能用。 - 在多个处理函数之间共享数据:一个函数统计工具调用次数,另一个把次数显示在加载动画旁边。
Anthropic 自己也在用它:/diff 命令和对 AGENTS.md 的支持,现在都是以内置 mod 的形式实现的。
它和 hooks、skills、MCP 有什么区别
Claude Code 原来就有 hooks,写在设置文件里,事件发生时执行一条 shell 命令。Mods 的处理函数也叫 hook,容易混淆。官方文档的说法是:在 Mods 的语境里,“hook”指 mod 的处理函数,原来那种叫“settings hook”。
| Mod | Settings hook | Skill | MCP 服务器 | |
|---|---|---|---|---|
| 是什么 | 插件里的函数,在 Claude Code 进程内被调用 | 事件发生时执行的 shell 命令、HTTP 请求或提示词 | 一份给 Claude 读的 SKILL.md 说明 |
给 Claude 提供工具的外部进程或服务 |
| 能改什么 | 工具调用、提示词、命令、对话轮次、界面 | 是否放行工具调用或提示词,以及调用的参数和结果 | Claude 知道什么、怎么做 | Claude 有哪些工具 |
| 能不能画界面 | 能 | 不能 | 不能 | 不能 |
| 要写什么 | JavaScript 或 TypeScript | 脚本加一条设置 | Markdown | 任意语言的服务 |
怎么选:想要面板、信息带、自定义命令,或者想改写某个事件,用 mod;只是想用现成脚本拦截或记录事件,settings hook 就够了;总在重复粘贴同一段说明,写成 skill;需要让 Claude 连接外部系统,用 MCP。
在哪里能用
Mod 的处理函数在所有加载了该插件的会话里都会运行,但界面只在终端和桌面应用里显示:
| 使用方式 | 处理函数运行 | 界面显示 |
|---|---|---|
终端里的 claude(包括编辑器内置终端和 JetBrains 插件) |
是 | 是 |
| 桌面应用的 Code 标签页 | 是 | 是(少数元素只支持终端) |
| 桌面应用里的 WSL 会话 | 否 | 否 |
| VS Code 扩展的聊天面板 | 是 | 否 |
claude -p 和 Agent SDK |
是 | 否 |
| 云端会话 | 是(插件要能带到云端) | 否 |
怎么获得一个 mod
1. 用内置的
在 Claude Code 里运行 /plugin,切到 Installed 标签页,Built-in 下面列出的就是内置 mod,例如 cc-plugin-diff(/diff 面板)和 cc-plugin-agents-md(读取 AGENTS.md)。
其中有一个默认关闭、值得试试的:You should know。它会启动一个旁路代理,在 Claude 执行较长任务时盯着输出,发现你可能漏掉的重要信息时,在输入框上方提示你。启用命令:
/plugin enable cc-plugin-you-should-know@builtin
官方文档提到,它是否可用取决于你所在的组织。
2. 让 Claude 帮你写
在 Claude Code 会话里直接描述你想要的效果,Claude 会把 mod 写出来。第一次它会申请热加载的权限,允许之后,mod 在这一轮结束时生效。
3. 安装别人写的
Mod 以插件的形式从 marketplace 安装,格式是“插件名@marketplace 名”:
# 在 Claude Code 会话里
/plugin install token-chart@your-org
# 或者在 shell 里
claude plugin install token-chart@your-org
如果是在 shell 里安装的,而会话已经开着,要在会话里运行 /reload-plugins 才会加载。
Claude Code 团队的 Thariq 在推文里分享了一个他常用的 mod,叫 next-steps,作用是提示下一步可以做什么。他给出的安装命令是:
claude plugin marketplace add anthropics/claude-plugins-community
claude plugin install next-steps@claude-community
4. 试用官方示例
Anthropic 在 claude-code-playground 仓库的 claude-code/mods 目录里放了三个示例,每个都是完整的插件:
- token-weather:在输入框上方用“天气预报”的样子显示上下文窗口用了多少。
- blast-radius:遇到
rm -rf、强制推送这类高风险命令时先拦住,显示它会影响什么,由你点继续或取消。 - replay-theater:增加
/replay命令,逐步回放上一轮里 Claude 对文件做的修改。
克隆仓库后,用 --plugin-dir 只在一次会话里加载某个示例:
claude --plugin-dir ./token-weather
加载后运行 /plugin,标签页下方会有一行类似 1 mod active · token-weather 的提示,可以确认它是否生效。
一个最小的 mod 长什么样
一个小的 mod 只有三个文件:
first-mod/
├── .claude-plugin/
│ └── plugin.json 插件清单
└── hooks/
├── hooks.json 指向代码文件
└── register.js 你的代码
下面是官方文档里的完整示例:统计 Claude 调用了多少次工具,并把次数显示在加载动画旁边。
// 两个处理函数共用的计数
let calls = 0
// mod 加载时 Claude Code 调用一次
export function register(on) {
// 每次 Claude 准备调用工具时运行
on('tool.call', async ($, e, next) => {
calls += 1
// 请 Claude Code 重画界面,让新的计数显示出来
$.ui.invalidate('ui.render')
// 让工具照常执行
return next(e)
})
// 每次 Claude Code 画加载动画时运行
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
// 保留原来的动画,在文字后面加上计数
return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
})
}
处理函数拿到事件后有三种做法:
- 观察:记下发生了什么,原样放行。
- 改写:改掉事件里的内容再放行。
- 接管:自己处理,不再执行原来的行为,比如拒绝一条命令。
三个参数的含义:$ 是 Mods API,画界面、读文件、启动进程、发网络请求都要通过它;e 是这次事件的数据;next 把事件交给其他插件和 Claude Code 自己的处理逻辑。
安装前必须知道的安全问题
这是整篇文章最重要的部分。官方文档写得很直接:mod 是以你的权限运行的代码,没有沙箱。
一个 mod 加载之后可以:
- 读写你的用户账号能访问的任何文件,启动程序,发网络请求;
- 读取环境变量和设置文件,包括你放在里面的 API key;
- 看到你发的每一条提示词和 Claude 的每一次工具调用;
- 改写提示词或工具调用,甚至以你的名义提交提示词;
- 在你被询问之前就批准一次工具调用;
- 用你的套餐额度或 API key 调用模型。
即使你开启了 Claude Code 的沙箱,沙箱隔离的也只是 Claude 执行的 Bash 命令,mod 自己启动的进程在沙箱之外。
唯一改不了的是权限确认框:mod 不能修改确认框里显示给你的内容。
所以对待 mod 要像对待 npm 包一样:只安装你信任的作者和 marketplace 提供的,装之前先看代码。
安装前先看它会做什么
拿到插件的文件之后(比如克隆它的仓库),可以在不运行它的情况下列出它处理哪些事件、调用哪些能力:
claude plugin validate ./some-mod
输出里的 hooks: 和 calls: 两类行,分别是它监听的事件和它请求 Claude Code 做的事。
怎么关闭
按范围从小到大:
- 关掉某一个:运行
/plugin,在 Installed 标签页里停用或卸载对应的插件。 - 这一次会话里全部关掉:用
claude --safe-mode启动。注意它同时会停用你的其他自定义配置。 - 所有会话里全部关掉:在
~/.claude/settings.json里设置"disableAllHooks": true。注意你的 settings hooks 和自定义状态栏也会一起停掉。
上面这些方式都不会停掉内置 mod,内置的要在 /plugin 里逐个停用。
如果你通过公司或团队使用 Claude Code,管理员可以通过托管设置限制哪些 mod 能加载。
常见问题
需要手动开启 Mods 吗?
不需要,默认开启,版本够新就行。在终端里运行 claude --version 查看版本;桌面应用在 Code 标签页的本地会话里输入 /status 查看。
早期测试时设置过 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS 怎么办?
删掉它。v2.1.287 及之后的版本会忽略这个环境变量,把它设成 0 也关不掉 mods。
装了 mod 没反应怎么排查?
先运行 /plugin 看那一行 mods active 里有没有它的名字;再用 claude --debug 启动,日志里会有处理函数校验失败的信息。
Mods 刚发布,稳定吗? 发布后的几个版本(v2.1.288 到 v2.1.290)的更新日志里,有不少与 mods 相关的修复和新增接口,说明它还在快速迭代。写 mod 时建议跟着最新版本走。