> ## Documentation Index
> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Mods 概览

> 使用 mod 向 Claude Code 添加窗格、命令和工具调用规则。了解 mod 可以做什么、如何创建或安装 mod，以及 mod 在哪里运行。

Mod 是一个[插件](/docs/zh-CN/plugins/overview)，它改变 Claude Code 的外观和行为。它由 JavaScript 或 TypeScript 事件处理程序组成：Claude Code 在事件发生时调用一个处理程序，例如工具调用、提交的提示或界面的一部分被绘制，处理程序可以观察事件、更改事件或接管事件。使用 mod 向 Claude Code 添加自己的功能，例如一个窗格，在每个请求后显示上下文有多满。有关 mod 中的文件和完整示例，请参阅[Mod 如何工作](#how-a-mod-works)。

<Note>
  Claude Code 现有的 [hooks](/docs/zh-CN/hooks) 也在事件上运行，作为 shell 命令、HTTP 请求或在设置文件中配置的提示。Mod 的处理程序是在 Claude Code 内部运行的函数。Claude Code 调用两种类型的 hooks：在这些页面上，"hook" 指的是 mod 的处理程序，而设置文件类型是"设置 hook"。
</Note>

<h2 id="what-a-mod-can-do">
  Mod 可以做什么
</h2>

设置 hooks、skills、状态行和 MCP 服务器从 Claude Code 外部工作：每一个都运行一个脚本，或给 Claude 文本或工具。Mod 在 Claude Code 内部运行，所以它可以做他们做不了的事情：

* **绘制可以使用的界面**：在文本记录旁边的窗格或提示上方的带状区域，带有选项卡、按钮和文本字段。请参阅[在界面中绘制](/docs/zh-CN/plugins/mods/interface)。
* **重新绘制 Claude Code 自己的界面**：替换或重新设置 Claude Code 自己绘制的部分，例如工具调用的行、微调器或 Claude 提出问题的对话框。请参阅[更改 Claude Code 已经绘制的内容](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws)。
* **进入工具调用或请求**：例如，在向用户提出问题时保持工具调用，在不运行工具的情况下回答问题，或将一个请求发送到不同的模型。请参阅[保护或更改工具调用](/docs/zh-CN/plugins/mods/events#guard-or-change-a-tool-call)和[跟随一个转折](/docs/zh-CN/plugins/mods/events#follow-a-turn)。
* **在命令上运行自己的代码**：一个 `/command`，立即运行你的函数，没有 Claude 转折，即使 Claude 正在工作。请参阅[添加命令或工具](/docs/zh-CN/plugins/mods/api#add-a-command-or-a-tool)。
* **在 hooks 之间共享数据**：mod 的 hooks 共享其文件中的变量，所以一个 hook 记录的内容，另一个可以显示。例如，一个 hook 可以计算工具调用，而另一个在微调器旁边显示计数，或者一个可以读取每个请求的令牌使用情况，而另一个在窗格中绘制它。请参阅[对事件做出反应](/docs/zh-CN/plugins/mods/events)。

Mods 在 Claude Code CLI 和 Claude Desktop 应用的代码选项卡中工作。请参阅[Mods 在哪里运行](#where-mods-run)以了解它们在其他地方的行为，例如在 VS Code 扩展、`claude -p` 和云会话中。如果设置 hook、skill 或 MCP 服务器已经做了你需要的事情，在编写 mod 之前[比较它们](#compare-mods-settings-hooks-skills-and-mcp-servers)。要为组织管理 mods，请参阅[为你的组织管理 mods](/docs/zh-CN/plugins/mods/admin)。

<h2 id="get-a-mod">
  获取 mod
</h2>

你可以通过以下三种方式之一开始使用 mod：

* **使用你已经拥有的**：Claude Code 的一些自己的功能是 mods，例如 `/diff`。请参阅[内置于 Claude Code 的 Mods](#mods-built-into-claude-code)。
* **创建一个**：在 Claude Code 会话中描述你想要的内容，Claude 会编写 mod。请参阅[向 Claude 请求 mod](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod)。要了解 mod 代码如何工作，[自己编写一个](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself)。
* **安装一个**：请参阅[安装或更新 mod](#install-or-update-a-mod)

<h3 id="install-or-update-a-mod">
  安装或更新 mod
</h3>

<Warning>
  Mod 是使用你的权限运行的代码。它可以读写你的文件、启动进程和发出网络请求。仅从你信任的作者和市场安装 mods。请参阅[决定是否信任 mod](#decide-whether-to-trust-a-mod)。
</Warning>

Mod 作为插件从市场安装。给出插件的名称、一个 `@` 和市场的名称。这些示例从名为 `your-org` 的市场安装名为 `token-chart` 的插件：

* 在 Claude Code 会话中，运行 `/plugin install token-chart@your-org`。
* 在你的 shell 中，运行 `claude plugin install token-chart@your-org`。

[安装插件](/docs/zh-CN/plugins/install)涵盖市场、作用域、VS Code 扩展和桌面应用，以及[保持插件更新](/docs/zh-CN/plugins/install#keep-plugins-updated)，所有这些都适用于包含 mod 的插件，无需更改。

如果在会话打开时从 shell 安装或更新 mod，在该会话中运行 `/reload-plugins` 以加载它。否则，它将在下次启动 Claude Code 时加载。

<h2 id="decide-whether-to-trust-a-mod">
  决定是否信任 mod
</h2>

Mod 是使用你的权限在 Claude Code 内部运行的代码。仅从你信任的作者和[市场](/docs/zh-CN/plugins/security)安装 mods。

<h3 id="what-a-mod-can-reach">
  Mod 可以访问什么
</h3>

Mod 使用你的权限运行，所以在安装之前，了解它可以访问什么。一旦加载，mod 可以：

* **在你的机器上以你的身份行动**：读写你的用户账户可以访问的任何地方的文件、启动程序和发出网络请求
* **读取你的秘密**：环境变量和设置文件，包括你保存在其中任何一个的 API 密钥
* **查看你的会话**：你发送的每个提示和 Claude 进行的每个工具调用
* **更改你的会话**：重写提示或工具调用、提交提示就像你输入的一样，或向你的另一个会话发送消息
* **在不询问你的情况下行动**：在被询问之前批准工具调用
* **花费你的使用量**：在你的计划或 API 密钥上调用模型

批准工具调用的 mod 可以批准 `ask` 规则会提示的工具调用，或你自己的 `PreToolUse` hooks 阻止的工具调用。[使用 hooks 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了这样的 mod 可以批准的内容，包括它何时可以批准 `deny` 规则拒绝的调用。

Mod 可以重新设置 Claude Code 界面的大部分样式，但不能重新设置权限提示。它不能改变提示显示给你的内容。

<h3 id="list-what-a-mod-does-before-you-install-one">
  在安装 mod 之前列出它做什么
</h3>

在安装 mod 之前，你可以列出它 hooks 的事件以及它要求 Claude Code 做什么，例如读取文件或发出网络请求，而无需运行它。首先获取插件的文件，例如通过克隆其存储库。然后，在你的 shell 中，在插件的目录上运行 `claude plugin validate`：

```bash theme={null}
claude plugin validate ./some-mod
```

输出中的 `hooks:` 和 `calls:` 行列出了 mod 处理的事件以及它要求 Claude Code 做什么。[查看 mod 可以做什么](/docs/zh-CN/plugins/mods/admin#review-what-a-mod-can-do)显示输出以及要查找的调用。

<h2 id="turn-mods-on-or-off">
  打开或关闭 mods
</h2>

Mods 需要 Claude Code v2.1.287 或更高版本，默认情况下它们是打开的。在你的 shell 中，运行 `claude --version` 以检查，如果你的版本较旧，请更新 Claude Code。

要关闭 mods，选择要停止多少个，以及停止多长时间。要重新打开它们，撤销相同的更改：

* **一个 mod**：从[`/plugin` 中的**已安装**选项卡](/docs/zh-CN/plugins/install#manage-installed-plugins)禁用或卸载其插件
* **每个已安装的 mod，对于一个会话**：使用 [`--safe-mode`](/docs/zh-CN/cli-reference#cli-flags) 启动 Claude Code，这也会排除你的其他自定义
* **你安装的每个 mod，在每个会话中**：在 `~/.claude/settings.json` 中设置 [`"disableAllHooks": true`](/docs/zh-CN/settings-reference#disableallhooks)。你的设置 hooks 和自定义状态行也会停止。你的组织管理的内容继续运行。

如果你通过组织使用 Claude Code，管理员也可以限制哪些 mods 加载。管理员从[停止用户安装的 mods 加载](/docs/zh-CN/plugins/mods/admin#stop-user-installed-mods-from-loading)开始。

要了解 mods 是否可以为你加载，请参阅[检查 mods 是否可以加载](/docs/zh-CN/plugins/mods/troubleshoot#check-whether-mods-can-load)。

<Note>
  如果你在早期访问期间设置了 `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS`，请删除它。Claude Code v2.1.287 及更高版本忽略它，所以将其设置为 `0` 不会保持 mods 关闭。
</Note>

<h3 id="see-which-mods-a-session-loaded">
  查看会话加载了哪些 mods
</h3>

要查看终端会话加载了哪些 mods，在 Claude Code 提示符处运行 `/plugin`。选项卡下的暗线给出计数和名称，例如 `1 mod active · first-mod`。如果你安装的 mod 没有在那里命名，请参阅[找出为什么 mod 什么都不做](/docs/zh-CN/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing)。

<h2 id="how-a-mod-works">
  Mod 如何工作
</h2>

Mod 是一个[插件](/docs/zh-CN/plugins/overview)，其代码注册事件处理程序，称为 hooks。Claude Code 在其事件发生时运行 hook，例如当 Claude 调用工具或绘制微调器时。一个小 mod 有三个文件：

```text theme={null}
first-mod/
├── .claude-plugin/
│   └── plugin.json
└── hooks/
    ├── hooks.json
    └── register.js
```

* **`plugin.json`**：插件的[清单](/docs/zh-CN/plugins/manifest-reference)
* **`hooks.json`**：[指向你的代码文件](/docs/zh-CN/plugins/mods/reference#files)
* **`register.js`**：[你的代码](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself)，称为 hooks 模块。它告诉 Claude Code 在哪些事件上运行你的函数。

这是一个完整的 `register.js`。它计算 Claude 进行的工具调用，并在 Claude 工作时在微调器旁边显示计数，如 `Thinking · tool calls: 3…`。

```javascript hooks/register.js theme={null}
// The count, shared by the two hooks below
let calls = 0

// Claude Code calls this once when the mod loads
export function register(on) {
  // Runs each time Claude is about to use a tool
  on('tool.call', async ($, e, next) => {
    calls += 1
    // Ask Claude Code to draw the interface again, so the new count shows
    $.ui.invalidate('ui.render')
    // Let the tool run as usual
    return next(e)
  })

  // Runs each time Claude Code draws the spinner
  on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
    // Keep Claude Code's spinner, with the count added after its word
    return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
  })
}
```

该文件注册了两个 hooks，两者都使用顶部的 `calls` 变量：

* **[`tool.call`](/docs/zh-CN/plugins/mods/reference#tools) hook** 在 Claude 即将使用工具时运行。它将一个添加到 `calls`，要求 Claude Code 再次绘制界面，并让工具照常运行。
* **[`ui.render`](/docs/zh-CN/plugins/mods/reference#interface) hook** 在 Claude Code 绘制微调器时运行。它保持 Claude Code 自己的微调器，并在单词后添加计数。

这个录制显示了 mod 的工作。观看提示框上方的微调器行：当 Claude 列出目录并读取两个文件时，它读取 `Thinking · tool calls: 1…`，然后 `2…`，然后 `3…`。

<Frame>
  <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=00a18aa0743b59a700f0275ce226e6d1" aria-label="在 Claude Code 会话中，输入并发送提示'列出此处的文件并读取 README'。当 Claude 工作时，微调器读取'Thinking · tool calls: 1'，然后 2，然后 3，因为 Claude 列出文件并读取其中两个。" data-path="images/mods-overview-light.mp4" />

  <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=d5223da2fef16ceaaa214a36d72c0536" aria-label="在 Claude Code 会话中，输入并发送提示'列出此处的文件并读取 README'。当 Claude 工作时，微调器读取'Thinking · tool calls: 1'，然后 2，然后 3，因为 Claude 列出文件并读取其中两个。" data-path="images/mods-overview-dark.mp4" />
</Frame>

<h3 id="what-a-hook-can-do-with-an-event">
  Hook 可以对事件做什么
</h3>

Claude Code 在对事件采取行动之前运行你的 hook，所以 hook 决定接下来会发生什么。它有三个选择：

* **观察**：注意正在发生的事情并让它继续不变，就像示例中的 `tool.call` hook 一样
* **重写**：在事件继续之前更改事件，就像 `ui.render` hook 在向微调器添加计数时所做的那样
* **回答**：自己处理事件，所以通常的行为不会运行，例如拒绝命令

要做任何超出其自己代码的事情，例如绘制、添加命令、调用模型、读取文件、启动进程或发出网络请求，hook 调用 mods API。Hook 没有其他方式来做这些事情，这就是为什么 Claude Code 可以在安装之前[列出 mod 做什么](#list-what-a-mod-does-before-you-install-one)。

有关每个选择背后的代码，请参阅[对事件做出反应](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event)。有关 hook 可以调用什么，请参阅[使用 mods API](/docs/zh-CN/plugins/mods/api)。

<h3 id="where-mods-run">
  Mods 在哪里运行
</h3>

Mod 的 hooks 在加载插件的每种会话中运行。绘制更窄：只有终端和桌面应用显示 mod 的窗格、带状区域和替换的行。此表列出了你可能运行 Claude Code 的每个地方：

| 你运行 Claude Code 的地方 | Hooks 运行 | Mod 绘制的内容出现 |
| :- | :- | :- |
| 终端中的 `claude`，包括编辑器的集成终端和 JetBrains 插件 | 是 | 是 |
| 桌面应用的代码选项卡，除了 WSL 会话中 | 是 | 是，除了[元素表](/docs/zh-CN/plugins/mods/reference#elements)标记为仅终端的元素 |
| 桌面应用中的 [WSL 会话](/docs/zh-CN/desktop-wsl) | 否，因为插件在 WSL 会话中不可用 | 否 |
| VS Code 扩展的聊天面板 | 是 | 否 |
| `claude -p` 和[代理 SDK](/docs/zh-CN/agent-sdk/overview) | 是 | 否 |
| 从 claude.ai 或移动应用[远程控制](/docs/zh-CN/remote-control) | 是，在你机器上的会话中 | 在你机器上的终端中 |
| [云会话](/docs/zh-CN/claude-code-on-the-web) | 是，对于[到达云会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)的插件 | 否 |

绘制的 mod 可以检查它运行在哪个应用中，并在文本记录中的行或命令的文本回复中回退，其中没有任何内容绘制。

<h2 id="control-mods-for-your-organization">
  为你的组织控制 mods
</h2>

管理员通过[托管设置](/docs/zh-CN/managed-settings)决定 mods 是否运行以及哪些运行。[为你的组织管理 mods](/docs/zh-CN/plugins/mods/admin)涵盖默认情况下发生的事情、如何查看 mod 以及如何使用你自己的 mod 强制执行策略。

<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">
  比较 mods、设置 hooks、skills 和 MCP 服务器
</h2>

Mods、设置 hooks、skills 和 MCP 服务器重叠。此表显示每一个是什么以及何时选择它。

| | Mod | 设置 hook | Skill | MCP 服务器 |
| :- | :- | :- | :- | :- |
| 它是什么 | Claude Code 在其自己的进程中调用的插件中的函数 | Claude Code 在生命周期事件上运行的 shell 命令、HTTP 请求或提示 | Claude 读取的 `SKILL.md` 文件指令 | 给 Claude 工具的外部进程或服务 |
| 它可以改变什么 | 工具调用、提示、命令、转折和界面绘制的内容 | 工具调用或提示是否继续、工具调用的参数和结果，以及为 Claude 添加的上下文 | Claude 知道和做什么 | Claude 拥有哪些工具 |
| 它可以在界面中绘制吗 | 是 | 否 | 否 | 否 |
| 你写什么 | JavaScript 或 TypeScript | 脚本和 `settings.json` 条目 | Markdown | 任何语言的服务器 |
| 当你想要时选择它 | 你想要一个窗格、提示上方的带状区域、自定义命令或重写事件 | 你想用你已经拥有的脚本阻止、允许或记录事件 | 你不断将相同的指令粘贴到聊天中 | Claude 需要到达外部系统 |

其他每一个都有自己的页面：[Hooks](/docs/zh-CN/hooks)、[Skills](/docs/zh-CN/skills) 和 [MCP](/docs/zh-CN/mcp)。一个插件可以容纳所有四个，所以 mod 可以与 skill 和 MCP 服务器一起在同一个插件中发货。

<h2 id="mods-built-into-claude-code">
  内置于 Claude Code 的 Mods
</h2>

Claude Code 的一些自己的功能是 mods。要查看你的会话拥有的，在 Claude Code 提示符处运行 `/plugin` 并转到**已安装**选项卡，它在**内置**下列出它们。你不能更新或卸载内置 mod，表的最后一列说明如何关闭每一个。[`mods active` 行](#see-which-mods-a-session-loaded)排除了内置 mods。

此表按 `/plugin` 显示的名称列出每个条目：

| `/plugin` 中的名称 | 它做什么 | 它在哪里打开 | 如何关闭它 |
| :- | :- | :- | :- |
| `cc-plugin-agents-md` | 将 `AGENTS.md` 加载为项目指令 | 每个会话，除了[无法读取 `AGENTS.md` 的会话](/docs/zh-CN/memory#when-agents-md-support-is-unavailable) | 在 `/plugin` 中禁用它，或[选择哪些指令文件加载](/docs/zh-CN/memory#choose-which-instruction-files-load) |
| `cc-plugin-diff` | 接管 [`/diff`](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) 并绘制其窗格 | 交互式终端会话 | 在 `/plugin` 中禁用它。`/diff` 保持，Claude Code 的内置版本的命令回答它。 |
| `cc-plugin-plugin-authoring` | 给 Claude [`plugin-authoring` skill](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 用于编写 mods。它持有一个 skill，没有 mod 代码。 | 除非 Anthropic 已远程关闭已安装的 mods | 在 `/plugin` 中禁用它 |
| `cc-plugin-sec-default` | 保护你的组织管理的内容免受用户安装的 mods | [保护加载的地方](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default) | 你不能。管理员在托管设置中[设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) |
| `cc-plugin-telemetry` | 发送 Claude Code 及其内置 mods 记录的分析记录 | 无论 Claude Code 自己的分析在哪里打开 | 在 `/plugin` 中禁用它，或关闭分析，例如使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/env-vars) |
| `cc-plugin-you-should-know` | 运行一个侧面代理，在 Claude 处理较长任务时监视你的背后。当它发现值得了解的东西而你可能会错过时，它会在提示符上方显示一条注释。 | 默认禁用。如果可用于你的组织，在 `/plugin` -> **已安装** -> **显示禁用**中列出。使用 [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/zh-CN/plugins/cli-reference#plugin-in-a-session) 启用。 | 在 `/plugin` 中禁用它 |

停止已安装 mods 的设置和标志，例如 `disableAllHooks`、`--bare` 和 `--safe-mode`，不会停止内置 mods。

<h3 id="read-the-source-of-built-in-mods">
  阅读内置 mods 的源代码
</h3>

这些 mods 中的四个的源代码在 [Claude Code 存储库的 `mods` 目录](https://github.com/anthropics/claude-code/tree/main/mods)中是公开的。每一个都是一个完整的插件，带有其 hooks 模块和测试：

* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff)：`/diff` 窗格，带有绑定到键盘操作的按钮和 mod 自己处理的滚动
* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md)：将 `AGENTS.md` 加载为项目指令，带有 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 选项
* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)：[了解默认情况下发生的事情](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default)中描述的保护，一个强制执行策略的 mod 的模型
* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry)：添加其他 mods 可以调用的方法，并发货其类型

<h2 id="next-steps">
  后续步骤
</h2>

* [创建 mod](/docs/zh-CN/plugins/mods/create)：构建一个计算工具调用、在微调器旁边显示计数并添加命令的 mod，并学习编辑和重新加载循环
* [在界面中绘制](/docs/zh-CN/plugins/mods/interface)：窗格、提示上方的带状区域、按钮、文本字段和状态
* [对事件做出反应](/docs/zh-CN/plugins/mods/events)：工具调用、提示、转折和 mods 运行的顺序
* [使用 mods API](/docs/zh-CN/plugins/mods/api)：命令、工具、模型调用、计时器和文件
* [测试 mod](/docs/zh-CN/plugins/mods/test)：在没有会话的情况下运行的自动化测试
* [对 mod 进行故障排除](/docs/zh-CN/plugins/mods/troubleshoot)：mod 什么都不做的原因和调试日志
* [为你的组织管理 mods](/docs/zh-CN/plugins/mods/admin)：默认值、托管设置、查看 mod 和策略 mods
* [Mods 参考](/docs/zh-CN/plugins/mods/reference)：每个事件、方法、元素和限制
