教程Claude Code系列第 2 / 11 篇

Claude Code Mods 是什么?怎么安装、怎么关闭、安不安全

Mods 让你用几行 JavaScript 改写 Claude Code 的行为和界面。本文说明它和 hooks、skills 的区别,怎么安装和关闭,以及安装前要注意的安全问题。

发布 · 约 7 分钟读完 · 经人工审核()· 本站的内容怎么来的

本文根据公开分享整理,本站尚未实测。操作前请对照文末的原始来源。

本页目录(8 节)
  1. Mods 能做什么
  2. 它和 hooks、skills、MCP 有什么区别
  3. 在哪里能用
  4. 怎么获得一个 mod
  5. 一个最小的 mod 长什么样
  6. 安装前必须知道的安全问题
  7. 怎么关闭
  8. 常见问题

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 时建议跟着最新版本走。

来源

通过 API 中转站使用这些模型?到 Veridrop 免费检测中转站给你的是不是它声称的模型,或者看看中转站排行榜前 100 名。

相关文章