SpyBara
Go Premium

Documentation 2026-09-24 22:57 UTC to 2026-09-25 23:58 UTC

108 files changed +13,544 −6,569. View all changes and history on the product overview
2026
Fri 25 23:58 Thu 24 22:57 Wed 23 23:57 Tue 22 23:59 Mon 21 22:59 Sun 20 23:59 Sat 19 23:57 Fri 18 23:58 Tue 15 23:58 Mon 14 22:58 Sun 13 21:00 Sat 12 03:02 Thu 10 23:00 Wed 9 22:58 Tue 8 20:00 Tue 1 21:02

admin-setup.md +3 −3

Details

94托管设置可以锁定工具、沙箱执行、限制 MCP 服务器和插件源,以及控制哪些 hooks 运行。每一行都是一个控制表面,具有驱动它的设置键。94托管设置可以锁定工具、沙箱执行、限制 MCP 服务器和插件源,以及控制哪些 hooks 运行。每一行都是一个控制表面,具有驱动它的设置键。

95 95 

96| 控制 | 它的作用 | 关键设置 |96| 控制 | 它的作用 | 关键设置 |

97| :---------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |97| :--------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |

98| [Permission rules](/docs/zh-CN/permissions) | 允许、询问或拒绝特定工具和命令 | `permissions.allow`、`permissions.deny` |98| [Permission rules](/docs/zh-CN/permissions) | 允许、询问或拒绝特定工具和命令 | `permissions.allow`、`permissions.deny` |

99| [Permission lockdown](/docs/zh-CN/permissions#managed-only-settings) | 使托管设置成为[权限规则的唯一设置源](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly)。禁用 `--dangerously-skip-permissions` | `allowManagedPermissionRulesOnly`、`permissions.disableBypassPermissionsMode` |99| [Permission lockdown](/docs/zh-CN/permissions#managed-only-settings) | 使托管设置成为[权限规则的唯一设置源](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly)。禁用 `--dangerously-skip-permissions` | `allowManagedPermissionRulesOnly`、`permissions.disableBypassPermissionsMode` |

100| [Starting permission mode](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in) | 选择开发人员终端会话启动时的权限模式,而不是内置的启动权限模式,或删除自动模式。VS Code 扩展仅在 Pro、Max 和 Team 计划上读取您设置的 `defaultMode`;[Switch permission modes](/docs/zh-CN/permission-modes#switch-permission-modes) 列出扩展读取的内容 | `permissions.defaultMode`、`permissions.disableAutoMode` |100| [Starting permission mode](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in) | 选择开发人员终端会话启动时的权限模式,而不是内置的启动权限模式,或删除自动模式。VS Code 扩展仅在 Pro、Max 和 Team 计划上读取您设置的 `defaultMode`;[Switch permission modes](/docs/zh-CN/permission-modes#switch-permission-modes) 列出扩展读取的内容 | `permissions.defaultMode`、`permissions.disableAutoMode` |

101| [Sandboxing](/docs/zh-CN/sandboxing) | 具有域允许列表的操作系统级文件系统和网络隔离 | `sandbox.enabled`、`sandbox.network.allowedDomains` |101| [Sandboxing](/docs/zh-CN/sandboxing) | 具有域允许列表的操作系统级文件系统和网络隔离 | `sandbox.enabled`、`sandbox.network.allowedDomains` |

102| [Managed policy CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) | 在每个会话中加载的组织范围指令,无法排除 | 托管策略路径处的文件 |102| [Managed policy CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) | 在每个会话中加载的组织范围指令,无法排除 | 托管策略路径处的文件 |

103| [MCP server control](/docs/zh-CN/managed-mcp) | 限制用户可以添加或连接的 MCP 服务器、部署固定集合,或为每个用户提供远程服务器以及他们自己的服务器 | `allowedMcpServers`、`deniedMcpServers`、`allowManagedMcpServersOnly`、`managedMcpServers` 或已部署的 `managed-mcp.json` 文件 |103| [MCP server control](/docs/zh-CN/managed-mcp) | 限制用户可以添加或连接的 MCP 服务器、部署固定集合,或为每个用户提供远程服务器以及他们自己的服务器 | `allowedMcpServers`、`deniedMcpServers`、`allowManagedMcpServersOnly`、`managedMcpServers` 或已部署的 `managed-mcp.json` 文件 |

104| [Plugin marketplace control](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) | 限制用户可以添加和安装的市场来源,拒绝为单次运行侧加载插件、agents 和 MCP 服务器的 CLI 标志,阻止[`command` 插件源](/docs/zh-CN/plugin-marketplaces#command-sources),并允许列出哪些市场的插件可以被建议 | `strictKnownMarketplaces`、`blockedMarketplaces`、`disableSideloadFlags`、`disableCommandPluginSources`、`pluginSuggestionMarketplaces` |104| [Plugin marketplace control](/docs/zh-CN/plugins/org#restrict-what-users-can-install) | 限制用户可以添加和安装的市场来源,拒绝为单次运行侧加载插件、agents 和 MCP 服务器的 CLI 标志,阻止[`command` 插件源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source),并允许列出哪些市场的插件可以被建议 | `strictKnownMarketplaces`、`blockedMarketplaces`、`disableSideloadFlags`、`disableCommandPluginSources`、`pluginSuggestionMarketplaces` |

105| [Customization lockdown](/docs/zh-CN/settings-reference#strictpluginonlycustomization) | 阻止 skills、agents、hooks 和 MCP 服务器来自用户和项目源,使它们只能来自插件或托管设置。锁定 skills 也会停止[您的开发人员在 claude.ai 上启用的 skills](/docs/zh-CN/skills#where-synced-skills-load) 的同步 | `strictPluginOnlyCustomization` |105| [Customization lockdown](/docs/zh-CN/settings-reference#strictpluginonlycustomization) | 阻止 skills、agents、hooks 和 MCP 服务器来自用户和项目源,使它们只能来自插件或托管设置。锁定 skills 也会停止[您的开发人员在 claude.ai 上启用的 skills](/docs/zh-CN/skills#where-synced-skills-load) 的同步 | `strictPluginOnlyCustomization` |

106| [Disable claude.ai sync](/docs/zh-CN/settings-reference#syncclaudeaiskills) | 停止 Claude Code 加载[您的开发人员在 claude.ai 上启用的 skills](/docs/zh-CN/skills#how-synced-skills-behave) 和[插件](/docs/zh-CN/plugins-reference#synced-plugins)。如果您为组织关闭 claude.ai 上的 Skills,Claude Code 会停止同步两者,在 v2.1.273 或更高版本上,它也会删除已同步的那些。要在不关闭 Skills 的情况下停止其中任一个,在托管设置中将其键设置为 `false` | `syncClaudeAiSkills`、`syncClaudeAiPlugins` |106| [Disable claude.ai sync](/docs/zh-CN/settings-reference#syncclaudeaiskills) | 停止 Claude Code 加载[您的开发人员在 claude.ai 上启用的 skills](/docs/zh-CN/skills#how-synced-skills-behave) 和[插件](/docs/zh-CN/plugins/loading#synced-plugins)。如果您为组织关闭 claude.ai 上的 Skills,Claude Code 会停止同步两者,在 v2.1.273 或更高版本上,它也会删除已同步的那些。要在不关闭 Skills 的情况下停止其中任一个,在托管设置中将其键设置为 `false` | `syncClaudeAiSkills`、`syncClaudeAiPlugins` |

107| [Hook restrictions](/docs/zh-CN/settings-reference#allowmanagedhooksonly) | 限制哪些 hooks 运行并限制 HTTP hook URL;请参阅[`allowManagedHooksOnly` 下运行的内容](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)了解完整的效果列表 | `allowManagedHooksOnly`、`allowedHttpHookUrls` |107| [Hook restrictions](/docs/zh-CN/settings-reference#allowmanagedhooksonly) | 限制哪些 hooks 运行并限制 HTTP hook URL;请参阅[`allowManagedHooksOnly` 下运行的内容](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)了解完整的效果列表 | `allowManagedHooksOnly`、`allowedHttpHookUrls` |

108| [Login enforcement](/docs/zh-CN/settings-reference#forceloginmethod) | 限制登录到特定方法或 Anthropic 组织。方法限制适用于 VS Code 扩展、Agent SDK、`claude setup-token` 和 `/install-github-app`,以及终端的交互式登录屏幕(通过 `/login` 或首次运行入门到达),预先选择方法但不强制执行;Claude Code 在终端、VS Code 扩展和 Agent SDK 中验证 claude.ai 账户登录的组织,不检查 Claude Console 登录或[网关](/docs/zh-CN/claude-apps-gateway)登录。在 v2.1.212 之前,仅终端登录应用任一密钥。设置后,由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止;云提供商会话不受影响 | `forceLoginMethod`、`forceLoginOrgUUID` |108| [Login enforcement](/docs/zh-CN/settings-reference#forceloginmethod) | 限制登录到特定方法或 Anthropic 组织。方法限制适用于 VS Code 扩展、Agent SDK、`claude setup-token` 和 `/install-github-app`,以及终端的交互式登录屏幕(通过 `/login` 或首次运行入门到达),预先选择方法但不强制执行;Claude Code 在终端、VS Code 扩展和 Agent SDK 中验证 claude.ai 账户登录的组织,不检查 Claude Console 登录或[网关](/docs/zh-CN/claude-apps-gateway)登录。在 v2.1.212 之前,仅终端登录应用任一密钥。设置后,由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止;云提供商会话不受影响 | `forceLoginMethod`、`forceLoginOrgUUID` |

109| [Disable agent view](/docs/zh-CN/agent-view#how-background-sessions-are-hosted) | 关闭 `claude agents`、`--bg`、`/background` 和按需监督程序 | `disableAgentView` |109| [Disable agent view](/docs/zh-CN/agent-view#how-background-sessions-are-hosted) | 关闭 `claude agents`、`--bg`、`/background` 和按需监督程序 | `disableAgentView` |

Details

281 绕过权限模式(`bypassPermissions`)281 绕过权限模式(`bypassPermissions`)

282</h4>282</h4>

283 283 

284自动批准工具使用而无需提示,除了下面警告中列出的情况。钩子仍会执行,如果需要可以阻止操作。284自动批准工具使用而无需提示,除了下面警告中列出的情况。钩子仍会执行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒绝在此模式下以 root 身份或在[已识别的沙箱](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下启动,查询在第一轮之前失败。

285 285 

286<Warning>286<Warning>

287 请极其谨慎使用。Claude 在此模式下具有完整的系统访问权限。仅在您信任所有可能操作的受控环境中使用。287 请极其谨慎使用。Claude 在此模式下具有完整的系统访问权限。仅在您信任所有可能操作的受控环境中使用。

Details

13* **Hooks**:响应工具使用和其他事件的事件处理程序13* **Hooks**:响应工具使用和其他事件的事件处理程序

14* **MCP servers**:通过 Model Context Protocol 的外部工具集成14* **MCP servers**:通过 Model Context Protocol 的外部工具集成

15 15 

16有关 plugin 结构和如何创建 plugins 的完整信息,请参阅 [Plugins](/docs/zh-CN/plugins)。16有关 plugin 结构和如何创建 plugins 的完整信息,请参阅 [Plugins](/docs/zh-CN/plugins/overview)。

17 17 

18<h2 id="loading-plugins">18<h2 id="loading-plugins">

19 加载 plugins19 加载 plugins


21 21 

22通过在选项配置中提供本地文件系统路径来加载 plugins。`type` 字段必须是 `"local"`,这是 SDK 接受的唯一值。SDK 支持从不同位置加载多个 plugins。22通过在选项配置中提供本地文件系统路径来加载 plugins。`type` 字段必须是 `"local"`,这是 SDK 接受的唯一值。SDK 支持从不同位置加载多个 plugins。

23 23 

24要使用通过 [marketplace](/docs/zh-CN/plugin-marketplaces) 或远程存储库分发的 plugin,请先下载它并提供本地目录路径。有关 plugin 需要的目录布局,请参阅下面的 [Plugin 结构参考](#plugin-structure-reference)。24要使用通过 [marketplace](/docs/zh-CN/plugins/overview) 或远程存储库分发的 plugin,请先下载它并提供本地目录路径。有关 plugin 需要的目录布局,请参阅下面的 [Plugin 结构参考](#plugin-structure-reference)。

25 25 

26<CodeGroup>26<CodeGroup>

27 ```typescript TypeScript theme={null}27 ```typescript TypeScript theme={null}


138 ```138 ```

139</CodeGroup>139</CodeGroup>

140 140 

141<h2 id="using-plugin-skills">141<h2 id="use-plugin-skills">

142 使用 plugin skills142 使用 plugin skills

143</h2>143</h2>

144 144 


352 另请参阅352 另请参阅

353</h2>353</h2>

354 354 

355* [Plugins](/docs/zh-CN/plugins) - 完整的 plugin 开发指南355* [Plugins](/docs/zh-CN/plugins/overview) - 完整的 plugin 开发指南

356* [Plugins reference](/docs/zh-CN/plugins-reference) - 技术规范356* [Plugins reference](/docs/zh-CN/plugins/manifest-reference) - 技术规范

357* [Commands](/docs/zh-CN/agent-sdk/skills#dispatch-commands-by-name) - 在 SDK 中调度命令357* [Commands](/docs/zh-CN/agent-sdk/skills#dispatch-commands-by-name) - 在 SDK 中调度命令

358* [Subagents](/docs/zh-CN/agent-sdk/subagents) - 使用专门的 agents358* [Subagents](/docs/zh-CN/agent-sdk/subagents) - 使用专门的 agents

359* [Skills](/docs/zh-CN/agent-sdk/skills) - 使用 Agent Skills359* [Skills](/docs/zh-CN/agent-sdk/skills) - 使用 Agent Skills

Details

917| `cli_path` | `str \| Path \| None` | `None` | Claude Code CLI 可执行文件的自定义路径 |917| `cli_path` | `str \| Path \| None` | `None` | Claude Code CLI 可执行文件的自定义路径 |

918| `settings` | `str \| None` | `None` | 设置文件的路径或内联 JSON 字符串 |918| `settings` | `str \| None` | `None` | 设置文件的路径或内联 JSON 字符串 |

919| `add_dirs` | `list[str \| Path]` | `[]` | Claude 可以访问的其他目录。SDK 将每个条目作为 `--add-dir` 传递给 Claude Code,因此使用 `project` 设置源时,Claude Code 也会[加载目录的技能、命令和子代理](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) |919| `add_dirs` | `list[str \| Path]` | `[]` | Claude 可以访问的其他目录。SDK 将每个条目作为 `--add-dir` 传递给 Claude Code,因此使用 `project` 设置源时,Claude Code 也会[加载目录的技能、命令和子代理](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) |

920| `env` | `dict[str, str]` | `{}` | 环境变量合并到继承的进程环境之上。见 [环境变量](/docs/zh-CN/env-vars) 了解底层 CLI 读取的变量,以及 [处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses) 了解超时相关变量 |920| `env` | `dict[str, str]` | `{}` | 环境变量合并到继承的进程环境之上。见 [环境变量](/docs/zh-CN/env-vars) 了解底层 CLI 读取的变量,以及 [处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses) 了解超时相关变量。设置 `CLAUDE_AGENT_SDK_CLIENT_APP` 以在 User-Agent 标头中标识你的应用 |

921| `extra_args` | `dict[str, str \| None]` | `{}` | 直接传递给 CLI 的其他 CLI 参数 |921| `extra_args` | `dict[str, str \| None]` | `{}` | 直接传递给 CLI 的其他 CLI 参数 |

922| `max_buffer_size` | `int \| None` | `None` | 缓冲 CLI stdout 时的最大字节数 |922| `max_buffer_size` | `int \| None` | `None` | 缓冲 CLI stdout 时的最大字节数 |

923| `debug_stderr` | `Any` | `sys.stderr` | *已弃用* - 用于调试输出的类文件对象。改用 `stderr` 回调 |923| `debug_stderr` | `Any` | `sys.stderr` | *已弃用* - SDK 忽略此值。使用 `stderr` 回调获取 CLI stderr 输出 |

924| `stderr` | `Callable[[str], None] \| None` | `None` | CLI 中 stderr 输出的回调函数 |924| `stderr` | `Callable[[str], None] \| None` | `None` | CLI 中 stderr 输出的回调函数 |

925| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | 工具权限回调,仅在[权限流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)落到提示时调用。不会为 `allowed_tools` 自动批准的调用、允许规则或 `permission_mode` 调用。允许规则不会预批准[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。见 [`CanUseTool`](#canusetool) 了解详情 |925| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | 工具权限回调,仅在[权限流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)落到提示时调用。不会为 `allowed_tools` 自动批准的调用、允许规则或 `permission_mode` 调用。允许规则不会预批准[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。见 [`CanUseTool`](#canusetool) 了解详情 |

926| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | 用于拦截事件的 hooks 配置 |926| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | 用于拦截事件的 hooks 配置 |

927| `user` | `str \| None` | `None` | 用户标识符 |927| `user` | `str \| None` | `None` | 在 POSIX 平台上,Claude Code 子进程运行的 OS 用户账户。Claude Code 保持父进程的环境,包括 `HOME`,并在 `cwd` 中运行 |

928| `include_partial_messages` | `bool` | `False` | 包括部分消息流式事件。启用时,会产生 [`StreamEvent`](#streamevent) 消息 |928| `include_partial_messages` | `bool` | `False` | 包括部分消息流式事件。启用时,会产生 [`StreamEvent`](#streamevent) 消息 |

929| `include_hook_events` | `bool` | `False` | 在消息流中包括 hooks 生命周期事件作为 `HookEventMessage` 对象 |929| `include_hook_events` | `bool` | `False` | 在消息流中包括 hooks 生命周期事件作为 `HookEventMessage` 对象 |

930| `forward_subagent_text` | `bool` | `False` | 在消息流中转发子代理文本和思考块。没有此选项,Claude Code 会发出子代理 `tool_use` 和 `tool_result` 块,但不会发出文本或思考。需要 Python Agent SDK 0.2.140 或更高版本 |930| `forward_subagent_text` | `bool` | `False` | 在消息流中转发子代理文本和思考块。没有此选项,Claude Code 会发出子代理 `tool_use` 和 `tool_result` 块,但不会发出文本或思考。需要 Python Agent SDK 0.2.140 或更高版本 |


1885```1885```

1886 1886 

1887| 字段 | 类型 | 描述 |1887| 字段 | 类型 | 描述 |

1888| :------------------------ | :------------------------ | :-------------------------------------------------- |1888| :------------------------ | :------------------------ | :---------------------------------------------------------------------------------------------------- |

1889| `status` | `RateLimitStatus` | 当前状态。`"allowed_warning"` 表示接近限制;`"rejected"` 表示达到限制 |1889| `status` | `RateLimitStatus` | 当前状态,`"allowed"`、`"allowed_warning"` 或 `"rejected"` 之一。`"allowed_warning"` 表示接近限制;`"rejected"` 表示达到限制 |

1890| `resets_at` | `int \| None` | 速率限制窗口重置的 Unix 时间戳 |1890| `resets_at` | `int \| None` | 速率限制窗口重置的 Unix 时间戳 |

1891| `rate_limit_type` | `RateLimitType \| None` | 哪个速率限制窗口适用 |1891| `rate_limit_type` | `RateLimitType \| None` | 哪个速率限制窗口适用 |

1892| `utilization` | `float \| None` | 消耗的速率限制的分数(0.0 到 1.0) |1892| `utilization` | `float \| None` | 消耗的速率限制的分数(0.0 到 1.0) |

Details

275这就是 Agent SDK 的与众不同之处:Claude 直接执行工具,而不是要求你实现它们。275这就是 Agent SDK 的与众不同之处:Claude 直接执行工具,而不是要求你实现它们。

276 276 

277<Note>277<Note>

278 如果你看到身份验证错误,例如 `Not logged in` 或 `Invalid API key`,请确保你已在运行代理的 shell 中设置了 `ANTHROPIC_API_KEY` 环境变量。SDK 不会自动加载 `.env` 文件。有关更多帮助,请参阅[完整故障排除指南](/docs/zh-CN/troubleshooting)。278 如果你看到身份验证错误,例如 `Not logged in` 或 `Invalid API key`,请确保你已在运行代理的 shell 中设置了 `ANTHROPIC_API_KEY` 环境变量。SDK 不会自动加载 `.env` 文件。

279 

280 有关这些和其他身份验证错误的原因和修复,请参阅错误参考中的[身份验证错误](/docs/zh-CN/errors#authentication-errors)。

279</Note>281</Note>

280 282 

281<h3 id="try-other-prompts">283<h3 id="try-other-prompts">


385* **[MCP 服务器](/docs/zh-CN/agent-sdk/mcp)**:连接到数据库、浏览器、API 和其他外部系统387* **[MCP 服务器](/docs/zh-CN/agent-sdk/mcp)**:连接到数据库、浏览器、API 和其他外部系统

386* **[托管](/docs/zh-CN/agent-sdk/hosting)**:将代理部署到 Docker、云和 CI/CD388* **[托管](/docs/zh-CN/agent-sdk/hosting)**:将代理部署到 Docker、云和 CI/CD

387* **[示例代理](https://github.com/anthropics/claude-agent-sdk-demos)**:查看完整示例:电子邮件助手、研究代理等389* **[示例代理](https://github.com/anthropics/claude-agent-sdk-demos)**:查看完整示例:电子邮件助手、研究代理等

388* **[故障排除](/docs/zh-CN/agent-sdk/troubleshooting)**:通过你看到的确切消息修复 Agent SDK 错误390* **[故障排除](/docs/zh-CN/agent-sdk/troubleshooting)**:修复 CLI 无法启动或退出时的错误,或结果到达时没有结构化输出

Details

4 4 

5# Agent SDK 故障排除5# Agent SDK 故障排除

6 6 

7> 通过您看到的确切错误消息修复 Agent SDK 错误,包括 TypeScript 和 Python SDK 中每个错误的原因和修复方法。7> 当 Claude Code CLI 无法启动、CLI 进程退出或成功结果到达但没有结构化输出时,修复 Agent SDK 错误。

8 8 

9本页面的条目按您看到的错误进行分类。每个条目都说明了原因和解决方法。9本页面涵盖 CLI 启动、CLI 进程退出和结构化输出中的 Agent SDK 错误。本页面上的条目按您看到的错误进行分类。每个条目说明了原因和解决方法。

10 

11与特定功能相关的症状,例如 hook 未触发或 skill 未被使用,在该功能的页面上有故障排除部分。该表列出了涵盖每个症状的部分或页面:

12 

13| 症状 | 转到 |

14| :------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------- |

15| 找不到 Skills、skill 未被使用、`Invalid skill name` 错误 | [Skills 故障排除](/docs/zh-CN/agent-sdk/skills#troubleshooting) |

16| MCP 服务器显示 `failed` 状态、工具未被调用、连接超时、工具输出超过最大允许令牌数 | [MCP 故障排除](/docs/zh-CN/agent-sdk/mcp#troubleshooting) |

17| Plugin 未加载、plugin skills 未出现 | [Plugins 故障排除](/docs/zh-CN/agent-sdk/plugins#troubleshooting) |

18| Claude 未委派给子代理、基于文件系统的代理未加载 | [Subagents 故障排除](/docs/zh-CN/agent-sdk/subagents#troubleshooting) |

19| Checkpointing 选项未被识别、没有 UUID 的用户消息、`No file checkpoint found`、`File rewinding is not enabled`、`ProcessTransport is not ready for writing` | [文件 checkpointing 故障排除](/docs/zh-CN/agent-sdk/file-checkpointing#troubleshooting) |

20| Hook 未触发、matcher 未按预期过滤、hook 超时、工具被意外阻止、修改的输入未应用、Python 中不可用的会话 hooks、子代理权限提示倍增、与子代理的递归 hook 循环、`systemMessage` 未出现在输出中 | [修复常见问题](/docs/zh-CN/agent-sdk/hooks#fix-common-issues)(在 hooks 页面上) |

21| 在您的机器上工作的代理在已部署的服务或容器中失败 | [故障排除部署失败](/docs/zh-CN/agent-sdk/hosting#troubleshoot-deployment-failures) |

22| `Not logged in`、`Invalid API key`、`API Error`、`429`、`There's an issue with the selected model` | [错误参考](/docs/zh-CN/errors#find-your-error) |

23| `CLINotFoundError`、`CLIConnectionError`、`ProcessError`、`Claude Code process exited with code N`、`Claude Code returned an error result`、`structured_output` 为 `None` | 本页面上的 [CLI 启动](#cli-startup)、[CLI 进程退出](#cli-process-exit) 和 [结构化输出](#structured-outputs) |

10 24 

11<h2 id="cli-startup">25<h2 id="cli-startup">

12 CLI 启动26 CLI 启动

agent-teams.md +1 −1

Details

118 118 

119默认值是 `"in-process"`。设置 `"auto"` 以在你已经在 tmux 会话中运行,或你的终端是安装了 `it2` CLI 的 iTerm2 时启用分割窗格,否则回退到 in-process。`"tmux"` 设置启用分割窗格模式,并根据你的终端自动检测是使用 tmux 还是 iTerm2。119默认值是 `"in-process"`。设置 `"auto"` 以在你已经在 tmux 会话中运行,或你的终端是安装了 `it2` CLI 的 iTerm2 时启用分割窗格,否则回退到 in-process。`"tmux"` 设置启用分割窗格模式,并根据你的终端自动检测是使用 tmux 还是 iTerm2。

120 120 

121从 v2.1.186 开始,设置 `"iterm2"` 以显式使用 iTerm2 原生分割窗格。此模式需要 [`it2` CLI](https://github.com/mkusaka/it2),如果 `it2` 缺失,会显示带有安装命令的错误。当你的终端是 iTerm2 且 tmux 可用作备选方案时,在 `"auto"` 或 `"tmux"` 下会出现提供安装 `it2` 或切换到 tmux 的设置提示。121设置 `"iterm2"` 以显式使用 iTerm2 原生分割窗格。此模式需要 [`it2` CLI](https://github.com/mkusaka/it2),如果 `it2` 缺失,会显示带有安装命令的错误。当你的终端是 iTerm2 且 tmux 可用作备选方案时,在 `"auto"` 或 `"tmux"` 下会出现提供安装 `it2` 或切换到 tmux 的设置提示。

122 122 

123要覆盖默认值,在 `~/.claude/settings.json` 中设置 [`teammateMode`](/docs/zh-CN/settings-reference#teammatemode):123要覆盖默认值,在 `~/.claude/settings.json` 中设置 [`teammateMode`](/docs/zh-CN/settings-reference#teammatemode):

124 124 

agent-view.md +2 −2

Details

724| :-------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |724| :-------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

725| [`--settings <file-or-json>`](/docs/zh-CN/settings) | 覆盖 agent view 和调度会话的 settings |725| [`--settings <file-or-json>`](/docs/zh-CN/settings) | 覆盖 agent view 和调度会话的 settings |

726| [`--add-dir <path>`](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) | 授予对额外目录的文件访问权限 |726| [`--add-dir <path>`](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) | 授予对额外目录的文件访问权限 |

727| [`--plugin-dir <path>`](/docs/zh-CN/plugins) | 从本地目录加载 plugin |727| [`--plugin-dir <path>`](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session) | 从本地目录加载 plugin |

728| [`--mcp-config <file-or-json>`](/docs/zh-CN/mcp) | 从配置文件或 JSON 字符串加载 MCP servers |728| [`--mcp-config <file-or-json>`](/docs/zh-CN/mcp) | 从配置文件或 JSON 字符串加载 MCP servers |

729| `--strict-mcp-config` | 仅使用来自 `--mcp-config` 的 MCP servers,忽略其他 MCP 配置。参见 [Exclusive control with managed-mcp.json](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json) 了解该标志在托管 MCP 文件下做什么 |729| `--strict-mcp-config` | 仅使用来自 `--mcp-config` 的 MCP servers,忽略其他 MCP 配置。参见 [Exclusive control with managed-mcp.json](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json) 了解该标志在托管 MCP 文件下做什么 |

730 730 


1062| v2.1.257 | 在打开的后台会话内使用 `Ctrl+S` 隐藏的提示[与会话一起保留](#what-persists-across-restarts),所以 `Ctrl+S` 在会话的进程停止并再次启动后恢复它。在此版本之前,隐藏仅存在于运行的进程中,当会话空闲足够长时间使其进程停止时丢失,或当它停止然后重新打开时丢失。 |1062| v2.1.257 | 在打开的后台会话内使用 `Ctrl+S` 隐藏的提示[与会话一起保留](#what-persists-across-restarts),所以 `Ctrl+S` 在会话的进程停止并再次启动后恢复它。在此版本之前,隐藏仅存在于运行的进程中,当会话空闲足够长时间使其进程停止时丢失,或当它停止然后重新打开时丢失。 |

1063| v2.1.251 | 在尚未[移入 worktree](#how-file-edits-are-isolated) 的后台会话中,Claude 和它生成的子代理可以编辑链接 git worktree 内的文件。 |1063| v2.1.251 | 在尚未[移入 worktree](#how-file-edits-are-isolated) 的后台会话中,Claude 和它生成的子代理可以编辑链接 git worktree 内的文件。 |

1064| v2.1.251 | Claude Code 转发在你调度的 shell 中导出的云提供商网关,例如 `ANTHROPIC_VERTEX_BASE_URL` 或 `ANTHROPIC_BEDROCK_BASE_URL` 及其身份验证绕过标志,到[会话的工作进程](#llm-gateway),条件与 `ANTHROPIC_BASE_URL` 相同。在此版本之前,如果你仅通过此类网关进行身份验证后台或从 shell 调度,会话进行的每个请求都失败,因为端点和标志从其环境中删除。 |1064| v2.1.251 | Claude Code 转发在你调度的 shell 中导出的云提供商网关,例如 `ANTHROPIC_VERTEX_BASE_URL` 或 `ANTHROPIC_BEDROCK_BASE_URL` 及其身份验证绕过标志,到[会话的工作进程](#llm-gateway),条件与 `ANTHROPIC_BASE_URL` 相同。在此版本之前,如果你仅通过此类网关进行身份验证后台或从 shell 调度,会话进行的每个请求都失败,因为端点和标志从其环境中删除。 |

1065| v2.1.251 | 当后台会话在另一个 Claude Code 进程刷新[插件市场](/docs/zh-CN/plugin-marketplaces)时启动,例如运行[市场自动更新](/docs/zh-CN/discover-plugins#configure-auto-updates)的同级会话,Claude Code 保持该市场的插件可用。在此版本之前,此类会话可能启动时没有该市场的任何 skills、agents、hooks 和 MCP 服务器,并在整个运行期间保持这样。 |1065| v2.1.251 | 当后台会话在另一个 Claude Code 进程刷新[插件市场](/docs/zh-CN/plugins/overview)时启动,例如运行[市场自动更新](/docs/zh-CN/plugins/install#keep-plugins-updated)的同级会话,Claude Code 保持该市场的插件可用。在此版本之前,此类会话可能启动时没有该市场的任何 skills、agents、hooks 和 MCP 服务器,并在整个运行期间保持这样。 |

1066| v2.1.248 | 在[调度输入](#keyboard-shortcuts)中 `Shift+Enter` 插入换行符,与主提示匹配,`Ctrl+Enter` 在 `?` 覆盖层列出 `ctrl+enter to start and open` 的终端中立即调度并附加。在此版本之前,`Shift+Enter` 调度并附加。 |1066| v2.1.248 | 在[调度输入](#keyboard-shortcuts)中 `Shift+Enter` 插入换行符,与主提示匹配,`Ctrl+Enter` 在 `?` 覆盖层列出 `ctrl+enter to start and open` 的终端中立即调度并附加。在此版本之前,`Shift+Enter` 调度并附加。 |

1067| v2.1.248 | [删除会话](#what-deleting-a-session-removes)在 worktree 的提交已经在你的 `origin` 远程的默认分支的本地副本上且你的主检出已检出该分支时成功;在此版本之前,删除被拒绝,出现 `has commits that are not pushed anywhere`。 |1067| v2.1.248 | [删除会话](#what-deleting-a-session-removes)在 worktree 的提交已经在你的 `origin` 远程的默认分支的本地副本上且你的主检出已检出该分支时成功;在此版本之前,删除被拒绝,出现 `has commits that are not pushed anywhere`。 |

1068| v2.1.248 | 使用 `←` 或 `/background` 后台的会话在运行时在其 worktree 上持有 [`git worktree lock`](/docs/zh-CN/worktrees#clean-up-subagent-and-background-session-worktrees);在此版本之前,后台释放锁,清理或 `git worktree remove` 可以在运行的会话下删除 worktree。 |1068| v2.1.248 | 使用 `←` 或 `/background` 后台的会话在运行时在其 worktree 上持有 [`git worktree lock`](/docs/zh-CN/worktrees#clean-up-subagent-and-background-session-worktrees);在此版本之前,后台释放锁,清理或 `git worktree remove` 可以在运行的会话下删除 worktree。 |

agents.md +1 −1

Details

22 22 

23* [Worktrees](/docs/zh-CN/worktrees) 为每个会话提供单独的 git 检出,因此并行会话永远不会编辑相同的文件。将它们用于您自己运行的会话。代理视图会 [在编辑文件之前将分派的会话移到自己的 worktree 中](/docs/zh-CN/agent-view#how-file-edits-are-isolated),您生成的子代理也可以各自获得一个。23* [Worktrees](/docs/zh-CN/worktrees) 为每个会话提供单独的 git 检出,因此并行会话永远不会编辑相同的文件。将它们用于您自己运行的会话。代理视图会 [在编辑文件之前将分派的会话移到自己的 worktree 中](/docs/zh-CN/agent-view#how-file-edits-are-isolated),您生成的子代理也可以各自获得一个。

24* [跨会话消息传递](/docs/zh-CN/cross-session-messaging) 让 Claude 列出并消息传递您在这台机器上、另一台机器上或 [云中](/docs/zh-CN/claude-code-on-the-web) 的其他 Claude Code 会话,因此您自己运行的会话可以在彼此之间传递发现和状态。24* [跨会话消息传递](/docs/zh-CN/cross-session-messaging) 让 Claude 列出并消息传递您在这台机器上、另一台机器上或 [云中](/docs/zh-CN/claude-code-on-the-web) 的其他 Claude Code 会话,因此您自己运行的会话可以在彼此之间传递发现和状态。

25* [`/batch`](/docs/zh-CN/commands) 是一个 [skill](/docs/zh-CN/skills),它让 Claude 将一个大型更改分成 5 到 30 个 worktree 隔离的子代理,每个都打开一个拉取请求。它是子代理和 worktrees 的打包使用,不是一个单独的协调风格。25* [`/batch`](/docs/zh-CN/commands) 是一个 [skill](/docs/zh-CN/skills),它让 Claude 将一个大型更改分成 5 到 30 个 worktree 隔离的子代理。它是子代理和 worktrees 的打包使用,不是一个单独的协调风格。

26 26 

27还有一些其他功能在没有您驱动每一步的情况下运行 Claude,但它们解决的问题与在代理之间分割工作不同:27还有一些其他功能在没有您驱动每一步的情况下运行 Claude,但它们解决的问题与在代理之间分割工作不同:

28 28 

Details

518 使用 Mantle 端点518 使用 Mantle 端点

519</h2>519</h2>

520 520 

521Mantle 是一个 Amazon Bedrock 端点,通过原生 Anthropic API 形状而不是 Amazon Bedrock Invoke API 提供 Claude 模型。它使用相同的 [AWS 凭证](#2-configure-aws-credentials)、[IAM 权限](#iam-configuration) 和 [`awsAuthRefresh` 配置](#advanced-credential-configuration)。521Mantle 是一个 Amazon Bedrock 端点,通过原生 Anthropic API 形状而不是 Amazon Bedrock Invoke API 提供 Claude 模型。它使用相同的 [AWS 凭证](#2-configure-aws-credentials) 和 [`awsAuthRefresh` 配置](#advanced-credential-configuration)。

522 

523Mantle 在 `bedrock-mantle:` 前缀下有自己的 IAM 操作,因此 [IAM 配置](#iam-configuration) 中的 `bedrock:` 操作不涵盖它。为推理授予您的 IAM 身份 `bedrock-mantle:CreateInference`,为令牌计数授予 `bedrock-mantle:CountTokens`。请参阅 AWS 文档中的[进行推理请求](https://docs.aws.amazon.com/bedrock/latest/userguide/inference.html)和[计数令牌](https://docs.aws.amazon.com/bedrock/latest/userguide/count-tokens.html),以及[服务授权参考](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockpoweredbyawsmantle.html)了解每个 Mantle 操作。

522 524 

523<h3 id="enable-mantle">525<h3 id="enable-mantle">

524 启用 Mantle526 启用 Mantle


670 672 

671如果在设置 `CLAUDE_CODE_USE_MANTLE` 后 `/status` 没有显示 `Amazon Bedrock (Mantle)`,则该变量没有到达进程。确认它在您启动 `claude` 的 shell 中被导出,或在您的[设置文件](/docs/zh-CN/settings)的 `env` 块中设置它。673如果在设置 `CLAUDE_CODE_USE_MANTLE` 后 `/status` 没有显示 `Amazon Bedrock (Mantle)`,则该变量没有到达进程。确认它在您启动 `claude` 的 shell 中被导出,或在您的[设置文件](/docs/zh-CN/settings)的 `env` 块中设置它。

672 674 

673来自 Mantle 端点的 `403`(具有有效凭证)意味着您的 AWS 账户没有被授予访问您请求的模型的权限。联系您的 AWS 账户团队以请求访问。675来自 Mantle 端点的 `403` 的含义取决于错误是否命名了 IAM 操作:

676 

677* 如果错误命名了 `bedrock-mantle:` 操作,请为您的 IAM 身份授予该操作。

678* 如果错误没有命名任何操作且您的凭证有效,您的 AWS 账户没有被授予访问您请求的模型的权限。联系您的 AWS 账户团队以请求访问。

674 679 

675命名模型 ID 的 `400` 意味着该模型不在 Mantle 上提供。Mantle 有其自己的模型阵容,与标准 Amazon Bedrock 目录分开,因此推理配置文件 ID(如 `us.anthropic.claude-sonnet-4-6`)将不起作用。使用 Mantle 格式的 ID,或启用[两个端点](#run-mantle-alongside-the-invoke-api),以便 Claude Code 将每个请求路由到模型可用的端点。680命名模型 ID 的 `400` 意味着该模型不在 Mantle 上提供。Mantle 有其自己的模型阵容,与标准 Amazon Bedrock 目录分开,因此推理配置文件 ID(如 `us.anthropic.claude-sonnet-4-6`)将不起作用。使用 Mantle 格式的 ID,或启用[两个端点](#run-mantle-alongside-the-invoke-api),以便 Claude Code 将每个请求路由到模型可用的端点。

676 681 

Details

334 运行 `/plugin` 来浏览市场。Plugins 添加 skills、工具和集成,无需配置。334 运行 `/plugin` 来浏览市场。Plugins 添加 skills、工具和集成,无需配置。

335</Tip>335</Tip>

336 336 

337[Plugins](/docs/zh-CN/plugins) 将 skills、hooks、subagents 和 MCP 服务器捆绑到来自社区和 Anthropic 的单个可安装单元中。如果你使用类型化语言,安装 [代码智能 plugin](/docs/zh-CN/discover-plugins#code-intelligence) 来为 Claude 提供精确的符号导航和编辑后的自动错误检测。337[Plugins](/docs/zh-CN/plugins/overview) 将 skills、hooks、subagents 和 MCP 服务器捆绑到来自社区和 Anthropic 的单个可安装单元中。如果你使用类型化语言,安装 [代码智能 plugin](/docs/zh-CN/plugins/code-intelligence) 来为 Claude 提供精确的符号导航和编辑后的自动错误检测。

338 338 

339有关在 skills、subagents、hooks 和 MCP 之间选择的指导,请参阅 [扩展 Claude Code](/docs/zh-CN/features-overview#match-features-to-your-goal)。339有关在 skills、subagents、hooks 和 MCP 之间选择的指导,请参阅 [扩展 Claude Code](/docs/zh-CN/features-overview#match-features-to-your-goal)。

340 340 


541 循环遍历任务,为每个调用 `claude -p`。使用 `--allowedTools` 来限定批量操作的权限。541 循环遍历任务,为每个调用 `claude -p`。使用 `--allowedTools` 来限定批量操作的权限。

542</Tip>542</Tip>

543 543 

544对于大型迁移或分析,你可以跨许多并行 Claude 调用分配工作。在 git 仓库中,运行 [`/batch <instruction>`](/docs/zh-CN/commands#all-commands) 让 Claude 将更改分割到 5 到 30 个子代理中。每个子代理在自己的 worktree 中工作并打开一个拉取请求。要从你自己的脚本驱动扇出,请循环遍历 `claude -p`:544对于大型迁移或分析,你可以跨许多并行 Claude 调用分配工作。运行 [`/batch <instruction>`](/docs/zh-CN/commands#all-commands) 让 Claude 将更改分割到 5 到 30 个子代理中。每个子代理在自己的 worktree 中工作。要从你自己的脚本驱动扇出,请循环遍历 `claude -p`:

545 545 

546<Steps>546<Steps>

547 <Step title="生成任务列表">547 <Step title="生成任务列表">

channels.md +9 −7

Details

45 如果安装失败,请匹配 Claude Code 报告的消息:45 如果安装失败,请匹配 Claude Code 报告的消息:

46 46 

47 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。47 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

48 * 插件[在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。48 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

49 49 

50 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅[在不重启的情况下应用插件更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting)以使插件的配置命令可用。50 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅[在不重启的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins)以使插件的配置命令可用。

51 </Step>51 </Step>

52 52 

53 <Step title="配置您的令牌">53 <Step title="配置您的令牌">


123 如果安装失败,请匹配 Claude Code 报告的消息:123 如果安装失败,请匹配 Claude Code 报告的消息:

124 124 

125 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。125 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

126 * 插件[在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。126 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

127 127 

128 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅[在不重启的情况下应用插件更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting)以使插件的配置命令可用。128 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅[在不重启的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins)以使插件的配置命令可用。

129 </Step>129 </Step>

130 130 

131 <Step title="配置您的令牌">131 <Step title="配置您的令牌">


188 如果安装失败,请匹配 Claude Code 报告的消息:188 如果安装失败,请匹配 Claude Code 报告的消息:

189 189 

190 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。190 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

191 * 插件[在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。191 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

192 192 

193 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。如果安装摘要报告 `Run /reload-plugins to activate.`,您可以在此跳过,因为下一步中的重启会拾取插件。193 当安装要求选择安装范围时,选择用户范围选项,以便插件在所有项目中可用。如果安装摘要报告 `Run /reload-plugins to activate.`,您可以在此跳过,因为下一步中的重启会拾取插件。

194 </Step>194 </Step>


245 如果安装失败,请匹配 Claude Code 报告的消息:245 如果安装失败,请匹配 Claude Code 报告的消息:

246 246 

247 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。247 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

248 * 插件[在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。248 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

249 249 

250 当安装要求安装范围时,选择用户范围选项,以便插件在您的所有项目中可用。如果安装摘要报告 `Run /reload-plugins to activate.`,您可以在此处跳过,因为下一步中的重启会选择该插件。250 当安装要求安装范围时,选择用户范围选项,以便插件在您的所有项目中可用。

251 

252 如果安装摘要报告 `Run /reload-plugins to activate.`,您不需要在此处采取行动,因为下一步中的重启会选择该插件。

251 </Step>253 </Step>

252 254 

253 <Step title="重启并启用 channel">255 <Step title="重启并启用 channel">

Details

191claude --dangerously-load-development-channels server:webhook191claude --dangerously-load-development-channels server:webhook

192```192```

193 193 

194绕过是按条目的。将此标志与 `--channels` 结合不会将绕过扩展到 `--channels` 条目。在研究预览期间,批准的允许列表由 Anthropic 策划,因此您的频道在您构建和测试时保持在开发标志上。194绕过是按条目的。将此标志与 `--channels` 结合不会将绕过扩展到 `--channels` 条目。在研究预览期间,您的频道不在批准的允许列表上,因此在您构建和测试时它保持在开发标志上。

195 195 

196<Note>196<Note>

197 此标志仅跳过允许列表。`channelsEnabled` 组织政策仍然适用。不要使用它来运行来自不受信任来源的频道。197 此标志仅跳过允许列表。`channelsEnabled` 组织政策仍然适用。不要使用它来运行来自不受信任来源的频道。


801 打包为插件801 打包为插件

802</h2>802</h2>

803 803 

804要使您的频道可安装和可共享,请将其包装在[插件](/docs/zh-CN/plugins)中并将其发布到[市场](/docs/zh-CN/plugin-marketplaces)。用户使用 `/plugin install` 安装它,然后使用 `--channels plugin:<name>@<marketplace>` 按会话启用它。804要使您的频道可安装和可共享,请将其包装在[插件](/docs/zh-CN/plugins/overview)中并将其发布到[市场](/docs/zh-CN/plugins/overview)。用户使用 `/plugin install` 安装它,然后使用 `--channels plugin:<name>@<marketplace>` 按会话启用它。

805 805 

806发布到您自己的市场的频道仍然需要 `--dangerously-load-development-channels` 来运行,因为它不在[批准的允许列表](/docs/zh-CN/channels#supported-channels)上。默认允许列表是 `claude-plugins-official` 中的频道插件,由 Anthropic 自行策划。[应用内提交表单](/docs/zh-CN/plugins#submit-your-plugin-to-the-community-marketplace)将插件添加到社区市场,该市场不在频道允许列表上。806发布到您自己的市场的频道仍然需要 `--dangerously-load-development-channels` 来运行,因为它不在[批准的允许列表](/docs/zh-CN/channels#supported-channels)上。默认允许列表是 `claude-plugins-official` 中的频道插件。[应用内提交表单](/docs/zh-CN/plugins/publish#submit-to-the-community-marketplace)将插件添加到社区市场,该市场不在频道允许列表上。

807 807 

808如果您正在与 Anthropic 合作伙伴联系合作,请与他们联系以协调官方市场列表。在 Team 和 Enterprise 计划上,管理员可以改为将您的插件包含在组织自己的 [`allowedChannelPlugins`](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run) 列表中,该列表替换默认的 Anthropic 允许列表。808如果您正在与 Anthropic 合作伙伴联系合作,请与他们联系以协调官方市场列表。在 Team 和 Enterprise 计划上,管理员可以改为将您的插件包含在组织自己的 [`allowedChannelPlugins`](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run) 列表中,该列表替换默认的 Anthropic 允许列表。

809 809 


814* [Channels](/docs/zh-CN/channels) 安装和使用 Telegram、Discord、iMessage 或 fakechat 演示,以及为 Team 或 Enterprise 组织启用频道814* [Channels](/docs/zh-CN/channels) 安装和使用 Telegram、Discord、iMessage 或 fakechat 演示,以及为 Team 或 Enterprise 组织启用频道

815* [工作频道实现](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins)用于具有配对流、回复工具和文件附件的完整服务器代码815* [工作频道实现](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins)用于具有配对流、回复工具和文件附件的完整服务器代码

816* [MCP](/docs/zh-CN/mcp) 用于频道服务器实现的基础协议816* [MCP](/docs/zh-CN/mcp) 用于频道服务器实现的基础协议

817* [Plugins](/docs/zh-CN/plugins) 打包您的频道,以便用户可以使用 `/plugin install` 安装它817* [Plugins](/docs/zh-CN/plugins/overview) 打包您的频道,以便用户可以使用 `/plugin install` 安装它

Details

54 回溯过去已清除的对话54 回溯过去已清除的对话

55</h4>55</h4>

56 56 

57如果您在同一 Claude Code 进程中较早运行了 `/clear`,回溯菜单会在列表顶部显示一个额外的条目,标记为 `/resume <session-id> (previous session)`。选择它可以恢复在 `/clear` 运行前活跃的对话。该条目在您退出 Claude Code 或恢复不同会话之前可用,并且需要 Claude Code v2.1.191 或更高版本。在较早的版本上,运行 `/resume` 并从列表中选择上一个会话。57如果您在同一 Claude Code 进程中较早运行了 `/clear`,回溯菜单会在列表顶部显示一个额外的条目,标记为 `/resume <session-id> (previous session)`。选择它可以恢复在 `/clear` 运行前活跃的对话。该条目在您退出 Claude Code 或恢复不同会话之前可用。

58 58 

59<h4 id="guide-a-summary">59<h4 id="guide-a-summary">

60 指导总结60 指导总结

Details

446 锁不涵盖的设置446 锁不涵盖的设置

447</h4>447</h4>

448 448 

449即使设置了所有五个锁,四个父提供的设置也会通过过滤器。在默认的先赢设置下,阻止父设置的管理员值是最高优先级管理员源中的值,除了 `allowedMcpServers` 当[MCP 服务器锁](#lock-behavior-across-sources)打开时。在 `managedSourcesBehavior` 合并选择加入下,[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明哪个源的值改为适用。449即使设置了所有五个锁,六个父提供的设置也会通过过滤器。在默认的先赢设置下,阻止父设置的管理员值是最高优先级管理员源中的值,除了 `allowedMcpServers` 当[MCP 服务器锁](#lock-behavior-across-sources)打开时。在 `managedSourcesBehavior` 合并选择加入下,[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明哪个源的值改为适用。

450 450 

451* **`forceLoginOrgUUID`**:当最高优先级管理员源未设置组织 UUID 时,Claude Code 尊重父提供的值。网关登录不检查此密钥,因此它仅对也使用第一方 Anthropic 登录的舰队重要。最高优先级管理员源中的组织 UUID 阻止父的值,是 Claude Code 强制执行的值,因此在那里设置 `forceLoginOrgUUID`。451* **`forceLoginOrgUUID`**:当最高优先级管理员源未设置组织 UUID 时,Claude Code 尊重父提供的值。网关登录不检查此密钥,因此它仅对也使用第一方 Anthropic 登录的舰队重要。最高优先级管理员源中的组织 UUID 阻止父的值,是 Claude Code 强制执行的值,因此在那里设置 `forceLoginOrgUUID`。

452* **`allowedMcpServers`**:当最高优先级管理员源未设置允许列表时,Claude Code 尊重父提供的允许列表,`allowManagedMcpServersOnly` 不阻止它,因为锁强制执行任何赢家列表作为托管值,包括当最高优先级管理员源未设置时的父提供列表。最高优先级管理员源中的列表阻止父的并是 Claude Code 强制执行的列表,因此在那里设置 `allowedMcpServers`,在锁旁边。在 v2.1.223 之前,任何管理员源中任一密钥的值都阻止父的。452* **`allowedMcpServers`**:当最高优先级管理员源未设置允许列表时,Claude Code 尊重父提供的允许列表,`allowManagedMcpServersOnly` 不阻止它,因为锁强制执行任何赢家列表作为托管值,包括当最高优先级管理员源未设置时的父提供列表。最高优先级管理员源中的列表阻止父的并是 Claude Code 强制执行的列表,因此在那里设置 `allowedMcpServers`,在锁旁边。在 v2.1.223 之前,任何管理员源中任一密钥的值都阻止父的。

453* **`availableModels`**:当赢家托管源未设置模型列表时,Claude Code 尊重父提供的模型列表。如果您的舰队限制模型,在赢家源中设置 `availableModels`。453* **`availableModels`**:当赢家托管源未设置模型列表时,Claude Code 尊重父提供的模型列表。如果您的舰队限制模型,在赢家源中设置 `availableModels`。

454* **`strictKnownMarketplaces`**:当赢家托管源未设置一个时,Claude Code 尊重父提供的插件市场允许列表。如果您的舰队限制市场,在赢家源中设置 `strictKnownMarketplaces`。需要 Claude Code v2.1.282 或更高版本。

455* **`blockedMarketplaces`**:父提供的市场阻止列表通过并添加到任何托管源设置的阻止列表,因为阻止列表只能进一步限制。需要 Claude Code v2.1.282 或更高版本。

454* **`strictPluginOnlyCustomization`**:此密钥无论任何锁都通过过滤器,它使 Claude Code 忽略开发人员的自己定制,包括保护性 hooks。没有锁阻止它。456* **`strictPluginOnlyCustomization`**:此密钥无论任何锁都通过过滤器,它使 Claude Code 忽略开发人员的自己定制,包括保护性 hooks。没有锁阻止它。

455 457 

456<h3 id="connect-claude-desktop">458<h3 id="connect-claude-desktop">

Details

37* [`managed`](#managed):按 IdP 组的托管设置策略37* [`managed`](#managed):按 IdP 组的托管设置策略

38* [`telemetry`](#telemetry):OTLP 转发到您的可观测性堆栈38* [`telemetry`](#telemetry):OTLP 转发到您的可观测性堆栈

39* [`access_control`、`limits`、`timeouts`、`rate_limits`](#http-tuning):IP 允许/拒绝、请求大小上限、上游首字节时间和每 IP 登录限制39* [`access_control`、`limits`、`timeouts`、`rate_limits`](#http-tuning):IP 允许/拒绝、请求大小上限、上游首字节时间和每 IP 登录限制

40* [`load_test_mode`](#load_test_mode):在不调用模型提供商的情况下对网关进行负载测试

40 41 

41<h2 id="secret-expansion">42<h2 id="secret-expansion">

42 密钥扩展43 密钥扩展


94| `id_token_signed_response_alg` | 否 | 预期的 id\_token 签名算法。默认 `RS256`。为使用 ES256、PS256 或 EdDSA 签名的 IdP 设置。 |95| `id_token_signed_response_alg` | 否 | 预期的 id\_token 签名算法。默认 `RS256`。为使用 ES256、PS256 或 EdDSA 签名的 IdP 设置。 |

95| `additional_authorized_parties` | 否 | 除 `client_id` 外要接受的额外 `azp` 值,用于 Keycloak 代理和令牌交换流 |96| `additional_authorized_parties` | 否 | 除 `client_id` 外要接受的额外 `azp` 值,用于 Keycloak 代理和令牌交换流 |

96| `discovery_url` | 否 | 从此 URL 而不是从 `issuer` 派生发现文档,用于代理后面重写发行者主机的 IdP。路径必须包含 `/.well-known/`。 |97| `discovery_url` | 否 | 从此 URL 而不是从 `issuer` 派生发现文档,用于代理后面重写发行者主机的 IdP。路径必须包含 `/.well-known/`。 |

97| `use_proxy` | 否 | 通过 `HTTPS_PROXY` 或 `HTTP_PROXY` 中的转发代理发送网关自己的 IdP 请求,尊重 `NO_PROXY`。未设置或 `false`,这些请求直接进行。需要 v2.1.227 或更高版本;请参阅下面的[通过转发代理的 IdP 请求](#idp-requests-through-a-forward-proxy)。 |98| `use_proxy` | 否 | 通过 `HTTPS_PROXY` 或 `HTTP_PROXY` 中的转发代理发送网关自己的 IdP 请求,尊重 `NO_PROXY`。`false` 保持这些请求直接。需要 v2.1.227 或更高版本;请参阅下面的[通过转发代理的 IdP 请求](#idp-requests-through-a-forward-proxy)。 |

98| `form_action_origins` | 否 | `/device` 页面的 `Content-Security-Policy: form-action` 指令的其他源。网关已允许 `'self'` 和发现的 `authorization_endpoint` 源,但 Chrome 对整个重定向链强制执行 `form-action`。如果你的 IdP 通过第二个主机重定向,如 Azure AD 联合到 ADFS、中心辐射 Okta 或公司 SSO 拦截器,列出授权请求可能重定向通过的每个源。 |99| `form_action_origins` | 否 | `/device` 页面的 `Content-Security-Policy: form-action` 指令的其他源。网关已允许 `'self'` 和发现的 `authorization_endpoint` 源,但 Chrome 对整个重定向链强制执行 `form-action`。如果你的 IdP 通过第二个主机重定向,如 Azure AD 联合到 ADFS、中心辐射 Okta 或公司 SSO 拦截器,列出授权请求可能重定向通过的每个源。 |

99| `ca_cert_pem` | 否 | PEM 编码的 CA 证书本身,而不是文件的路径。它替换 IdP 请求的系统信任存储。要加载挂载的文件,写 `${file:/etc/gateway/idp-ca.pem}`。用于公司 PKI 后面的 Keycloak 或 Dex。 |100| `ca_cert_pem` | 否 | PEM 编码的 CA 证书本身,而不是文件的路径。它替换 IdP 请求的系统信任存储。要加载挂载的文件,写 `${file:/etc/gateway/idp-ca.pem}`。用于公司 PKI 后面的 Keycloak 或 Dex。 |

100 101 


106 107 

107使用 `use_proxy: true`,pod 自己解析每个 IdP 端点的主机名,并要求代理 `CONNECT` 到解析的 IP 地址,因此代理必须接受 `CONNECT` 到发现文档命名的每个主机的 IP 地址,而不仅仅是发行者。使用 `http://` 代理 URL。`ca_cert_pem` 和[SSRF 防护](/docs/zh-CN/claude-apps-gateway-deploy#threat-model-summary)也适用于代理路径。108使用 `use_proxy: true`,pod 自己解析每个 IdP 端点的主机名,并要求代理 `CONNECT` 到解析的 IP 地址,因此代理必须接受 `CONNECT` 到发现文档命名的每个主机的 IP 地址,而不仅仅是发行者。使用 `http://` 代理 URL。`ca_cert_pem` 和[SSRF 防护](/docs/zh-CN/claude-apps-gateway-deploy#threat-model-summary)也适用于代理路径。

108 109 

110[仅代理出口](#proxy-only-egress)改变这两者:当它活跃时,IdP 请求遵循代理,除非你设置 `use_proxy: false`,网关将每个 IdP 主机名交给代理,而不首先解析它。

111 

112<h4 id="proxy-only-egress">

113 仅代理出口

114</h4>

115 

116在网关的环境中设置 `CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1`,在 `HTTPS_PROXY` 旁边,当 pod 仅通过该转发代理到达其他主机且无法自己解析公共 DNS 名称时,或当代理拒绝 `CONNECT` 到 IP 地址时。需要 v2.1.277 或更高版本。它是一个环境变量而不是 `gateway.yaml` 键,因此配置文件中的任何内容都无法放松网关的地址检查。

117 

118```bash theme={null}

119export HTTPS_PROXY=http://proxy.corp.example.com:3128

120export NO_PROXY=

121export no_proxy=

122export CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1

123```

124 

125当仅代理出口活跃时,网关在启动时记录一条 `network:` 行。

126 

127下面的每一行是具有 `HTTPS_PROXY` 设置的网关上的一类出站请求,默认情况下和仅代理出口活跃时。

128 

129| 出站请求 | 默认 | 仅代理出口活跃 |

130| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------- |

131| `provider: anthropic` 上游、工作负载身份联合令牌交换、`telemetry.forward_to` 导出 | 在本地解析和检查,然后通过代理 `CONNECT` 到检查的 IP 地址。`NO_PROXY` 中列出的遥测收集器改为直接到达 | 主机名交给代理 |

132| IdP 发现、JWKS、令牌和 userinfo | 直接,除非 [`oidc.use_proxy: true`](#idp-requests-through-a-forward-proxy),然后 `CONNECT` 到检查的 IP 地址 | 主机名交给代理,除非 `oidc.use_proxy: false` 保持内部 IdP 直接 |

133| Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上游;Google 组查找 | 主机名交给代理 | 不变 |

134 

135仅代理出口保持关闭,除非网关的环境满足所有这三个条件:

136 

137* `HTTPS_PROXY` 或 `HTTP_PROXY` 被设置。

138* `NO_PROXY` 和 `no_proxy` 为空。如果你的平台将任一个注入到 pod 中,在网关容器上将两者设置为空值。在 `NO_PROXY` 中列出遥测收集器保持仅代理出口关闭。

139* `CLAUDE_GATEWAY_ALLOW_LOOPBACK` 未打开。pod 自己环回上的收集器或 IdP 无法与仅代理出口结合,因为交给代理的环回地址将是代理主机自己的,因此给这些服务一个代理可以到达的地址。出于同样的原因,当仅代理出口活跃时,网关完全拒绝 `localhost` 风格的名称。

140 

141当这些条件之一未满足时,网关在启动时记录警告,命名停止它的变量,并保持默认行为。

142 

143一旦仅代理出口活跃,允许代理中的每个目的地,包括内部收集器和任何由 IP 地址配置的主机。你仍然可以使用 [`oidc.use_proxy: false`](#idp-requests-through-a-forward-proxy) 保持内部 IdP 直接。

144 

145<Warning>

146 仅在代理的允许列表至少与网关自己的检查一样严格时打开这个。代理必须拒绝云元数据端点,如 `169.254.169.254` 和 `metadata.google.internal`、链路本地地址和代理主机自己的环回,并且它必须按名称解析到的地址拒绝它们,而不仅仅是按名称,因为网关不再捕获解析到其中之一的主机名。连接到任何被要求的地方的代理移除网关的[SSRF 防护](/docs/zh-CN/claude-apps-gateway-deploy#threat-model-summary)用于这些请求。

147</Warning>

148 

109<h3 id="session">149<h3 id="session">

110 `session`150 `session`

111</h3>151</h3>


124`store` 块指向网关的 PostgreSQL 数据库,该数据库保存设备授权和速率限制计数器。164`store` 块指向网关的 PostgreSQL 数据库,该数据库保存设备授权和速率限制计数器。

125 165 

126| 字段 | 必需 | 描述 |166| 字段 | 必需 | 描述 |

127| ----------------- | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |167| ------------------------- | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

128| `postgres_url` | 是 | `postgres://` 或 `postgresql://` URL。必需:设备授权会合点,浏览器回调写入,轮询 CLI 读取,需要跨副本状态。网关在启动时运行自己的模式迁移,因此角色需要在目标模式上具有创建和修改表的权限。请参阅[升级](/docs/zh-CN/claude-apps-gateway-deploy#upgrades)和 [Postgres](/docs/zh-CN/claude-apps-gateway-deploy#postgres)。 |168| `postgres_url` | 是 | `postgres://` 或 `postgresql://` URL。必需:设备授权会合点,浏览器回调写入,轮询 CLI 读取,需要跨副本状态。网关在启动时运行自己的模式迁移,因此角色需要在目标模式上具有创建和修改表的权限。请参阅[升级](/docs/zh-CN/claude-apps-gateway-deploy#upgrades)和 [Postgres](/docs/zh-CN/claude-apps-gateway-deploy#postgres)。 |

129| `username` | 否 | 覆盖 `postgres_url` 中的用户 |169| `username` | 否 | 覆盖 `postgres_url` 中的用户 |

130| `password` | 否 | 数据库凭证。在此处设置而不是在 `postgres_url` 中,以便凭证保持在 URL 之外。接受任何字符并优先于 URL 凭证。 |170| `password` | 否 | 数据库凭证。在此处设置而不是在 `postgres_url` 中,以便凭证保持在 URL 之外。接受任何字符并优先于 URL 凭证。 |

131| `max_connections` | 否 | 每个副本的 Postgres 连接池大小。默认 `5`,这是保守的,对共享数据库友好。启用[支出限制](#admin)后,热路径在每个推理请求中执行几个操作,因此在负载下为专用数据库提高它,并保持副本 × 这个值低于数据库的 `max_connections`。 |171| `max_connections` | 否 | 每个副本的 Postgres 连接池大小。默认 `5`,这是保守的,对共享数据库友好。启用[支出限制](#admin)后,热路径在每个推理请求中执行几个操作,因此在负载下为专用数据库提高它,并保持副本 × 这个值低于数据库的 `max_connections`。 |

172| `connect_timeout_seconds` | 否 | 网关打开 Postgres 连接时等待的秒数。从 `1` 到 `60` 的整数,默认 `5`。如果当新网关实例启动时连接尝试超时,请提高它。需要网关服务器上的 Claude Code v2.1.274 或更高版本。早期版本在设置该键时拒绝启动。 |

132 173 

133对于本地开发,将 `postgres_url` 指向一个一次性 Postgres 容器,例如 `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。174对于本地开发,将 `postgres_url` 指向一个一次性 Postgres 容器,例如 `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。

134 175 


365| ACI / App Service | 在资源上启用系统分配或用户分配的托管身份。`use_azure_ad: true` 拾取它。 |406| ACI / App Service | 在资源上启用系统分配或用户分配的托管身份。`use_azure_ad: true` 拾取它。 |

366| 其他任何地方 | `auth: { api_key: "${FOUNDRY_API_KEY}" }`。在 `{ }` 内引用 `${…}`。 |407| 其他任何地方 | `auth: { api_key: "${FOUNDRY_API_KEY}" }`。在 `{ }` 内引用 `${…}`。 |

367 408 

409<h4 id="static-headers-on-upstream-requests">

410 上游请求上的静态头

411</h4>

412 

413要将固定头添加到网关发送到一个上游的请求,在该上游上设置 `headers:`。当你运行的代理通过头路由或属性流量时使用它。

414 

415`headers:` 需要网关服务器上的 Claude Code v2.1.277 或更高版本。早期网关在找到该键时拒绝启动。在添加该键之前升级每个副本,并在回滚到早期版本之前删除该键。

416 

417头转到 `base_url` 命名的服务器,或当 `base_url` 未设置时转到提供者自己的端点。提供者也接收它们,除非你的代理删除它们。

418 

419此示例通过 `upstream-proxy.internal.example.com` 上的代理到达 `provider: vertex` 上游。它设置代理读取的 `x-source` 头,并从 `PROXY_TOKEN` 环境变量发送令牌作为 `x-proxy-token`:

420 

421```yaml theme={null}

422upstreams:

423 - provider: vertex

424 region: us-east5

425 project_id: example-prod

426 base_url: https://upstream-proxy.internal.example.com

427 auth: {}

428 headers:

429 x-source: claude-apps-gateway

430 x-proxy-token: ${PROXY_TOKEN}

431```

432 

433值是可打印的 ASCII 文本,两端没有空格。引用数字、`true` 或 `false`,以便 YAML 将其读取为文本。

434 

435要将密钥保持在配置文件之外,使用[密钥扩展](#secret-expansion)从环境变量使用 `${VAR}` 或从文件使用 `${file:/path}` 加载值。解析为空值的 `${VAR}` 停止网关启动。

436 

437`headers:` 适用于每个提供者,每个上游仅发送自己的。

438 

439并非网关发送到上游的每个请求都携带它们:

440 

441| 网关发送到此上游的请求 | 携带 `headers:` |

442| --------------------------------------------------- | ------------------ |

443| `/v1/messages`、流式或非流式,和 `/v1/messages/count_tokens` | 是 |

444| 从另一个上游故障转移的请求 | 是,仅此上游的 `headers:` |

445| 客户端放弃的请求的 Amazon Bedrock 的 `CountTokens` 调用 | 否 |

446| 工作负载身份联合令牌交换 | 否 |

447 

448在使用 AWS SigV4 签署请求的 Amazon Bedrock 或 Claude Platform on AWS 上游上,这些头是签名的一部分,因此你的代理必须原样传递它们。

449 

450如果你使用网关保留的名称,它拒绝启动,启动错误命名该头。保留名称包括:

451 

452* `authorization` 和 `x-api-key`

453* `host`、`content-type` 和 `user-agent`

454* 任何以 `anthropic-`、`x-goog-`、`x-amz-` 或 `x-amzn-` 开头的名称

455 

368<h4 id="multiple-upstreams">456<h4 id="multiple-upstreams">

369 多个上游457 多个上游

370</h4>458</h4>


375 463 

376`429` 是每上游容量,因此预配吞吐量 (PT) 耗尽故障转移到按需。如果你在上游上设置 [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run),对携带开发者电子邮件的请求的 `429` 是每用户拒绝而不是故障转移。464`429` 是每上游容量,因此预配吞吐量 (PT) 耗尽故障转移到按需。如果你在上游上设置 [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run),对携带开发者电子邮件的请求的 `429` 是每用户拒绝而不是故障转移。

377 465 

466每个请求从第一个上游开始。请求仅在每个前面的上游都失败或不服务请求的模型时才到达后续上游。

467 

468网关不保留失败上游的记录,因此当上游关闭时,到达它的每个请求仍然尝试它并等待它失败后再继续。

469 

470对于 Anthropic API 上游,[`timeouts.upstream_ttfb_ms`](#http-tuning)限制在关闭上游上的等待。该设置不适用于其他提供者,网关在那里等待最多一小时以便上游开始响应。

471 

378`404` 是每上游模型可用性,因此未启用模型的上游不会阻止服务它的后续上游。无法解析请求的模型的上游被跳过,无需网络往返。472`404` 是每上游模型可用性,因此未启用模型的上游不会阻止服务它的后续上游。无法解析请求的模型的上游被跳过,无需网络往返。

379 473 

380此示例首先路由预配吞吐量 Bedrock 分配,溢出到按需和第二个帐户,最后回退到 Anthropic API:474此示例首先路由预配吞吐量 Bedrock 分配,溢出到按需和第二个帐户,最后回退到 Anthropic API:


439 533 

440```yaml theme={null}534```yaml theme={null}

441admin:535admin:

442 # Named static API keys for the admin endpoints, sent as x-api-key.536 # 用于管理员端点的命名静态 API 密钥,作为 x-api-key 发送。

443 # The id appears in the audit log as admin-key:<id> so each key is537 # id 在审计日志中显示为 admin-key:<id>,因此每个密钥都是

444 # attributable. Array for rotation: add the new key, roll clients,538 # 可追踪的。数组用于轮换:添加新密钥,滚动客户端,

445 # remove the old.539 # 删除旧密钥。

446 write_keys:540 write_keys:

447 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }541 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }

448 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }542 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }

449 read_keys:543 read_keys:

450 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }544 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }

451 # IdP groups granted full admin via the normal gateway JWT (no API key).545 # 通过普通网关 JWT(无 API 密钥)授予完全管理员权限的 IdP 组。

452 admin_groups: [platform-finops]546 admin_groups: [platform-finops]

453 blocked_message: request an increase at https://go.example.com/claude-limits547 blocked_message: request an increase at https://go.example.com/claude-limits

454```548```

455 549 

456| 字段 | 必需 | 描述 |550| 字段 | 必需 | 描述 |

457| ------------------------- | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |551| ------------------------- | -- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

458| `write_keys` | 否 | `{id, key}` 的数组。与其中一个匹配的 `x-api-key` 可以列出、设置和删除支出限制。键值必须至少 32 个字符;`id` 在 `read_keys` 和 `write_keys` 中必须唯一。 |552| `write_keys` | 否 | `{id, key}` 数组。与其中一个匹配的 `x-api-key` 可以列出、设置和删除支出限制。密钥值必须至少 32 个字符;`id` 必须在 `read_keys` 和 `write_keys` 中唯一。 |

459| `read_keys` | 否 | `{id, key}` 的数组。只读:每个 `GET` 端点,包括列出上限、按 ID 获取一个,以及读取 [`/effective`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Feffective) 和 [`/audit`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Faudit)。 |553| `read_keys` | 否 | `{id, key}` 数组。只读:每个 `GET` 端点,包括列出上限、按 ID 获取一个,以及读取 [`/effective`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Feffective) 和 [`/audit`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Faudit)。 |

460| `admin_groups` | 否 | IdP 组名称。网关 JWT 的 `groups` 声明包含其中之一的具有完全管理员访问权限(读和写),并审计为 `oidc:<sub>`。将此用于人类管理员;将 API 密钥用于机器。此列表中的空条目在启动时停止网关。请参阅[在启动时停止网关的匹配器值](#matcher-values-that-stop-the-gateway-at-boot)。 |554| `admin_groups` | 否 | IdP 组名称。网关 JWT 的 `groups` 声明包含其中一个的具有完全管理员访问权限(读和写),并审计为 `oidc:<sub>`。将此用于人类管理员;为机器使用 API 密钥。此列表中的空条目会在启动时停止网关。请参阅[在启动时停止网关的匹配器值](#matcher-values-that-stop-the-gateway-at-boot)。 |

461| `blocked_message` | 否 | 逐字附加到被阻止的开发者看到的 `429 billing_error`。写出完整的说明,例如 URL 或 Slack 频道。未设置时,网关仅发送默认消息。请参阅[强制执行如何工作](/docs/zh-CN/claude-apps-gateway-spend-limits#how-enforcement-works)。 |555| `blocked_message` | 否 | 逐字附加到被阻止的开发者看到的 `429 billing_error`。编写完整的说明,例如 URL 或 Slack 频道。未设置时,网关仅发送默认消息。请参阅[强制执行如何工作](/docs/zh-CN/claude-apps-gateway-spend-limits#how-enforcement-works)。 |

462| `audit_retention_days` | 否 | 默认 `365`。较旧的 `admin_audit` 行被清除。 |556| `audit_retention_days` | 否 | 默认 `365`。较旧的 `admin_audit` 行被清除。 |

463| `spend_retention_months` | 否 | 默认 `13`。早于此的 `spend` 计数器行被清除。默认值保留整整一年加当前部分月份以进行年度对比报告。 |557| `spend_retention_months` | 否 | 默认 `13`。早于此的 `spend` 计数器行被清除。默认值保留整整一年加当前部分月份,用于年度对比报告。 |

464| `identity_retention_days` | 否 | 默认 `90`。`principal_emails` 行的最后一次看到 TTL,其中包含每个开发者的电子邮件、显示名称和组(PII)。故意比支出保留期短,以便已取消配置的身份在其匿名支出计数器保留时过期。 |558| `identity_retention_days` | 否 | 默认 `90`。`principal_emails` 行的最后一次看到 TTL,其中包含每个开发者的电子邮件、显示名称和组(PII)。故意比支出保留期短,以便已取消配置的身份在其匿名支出计数器保留时过期。 |

465| `group_limit_mode` | 否 | `min`(默认)或 `max`。当开发者在多个具有上限的组中时,`min` 强制执行最严格的,`max` 强制执行最宽松的。由强制执行和 `/effective` 使用。 |559| `group_limit_mode` | 否 | `min`(默认)或 `max`。当开发者在多个具有上限的组中时,`min` 强制执行最严格的,`max` 强制执行最宽松的。由强制执行和 `/effective` 使用。 |

466 560 


472 566 

473| 字段 | 必需 | 描述 |567| 字段 | 必需 | 描述 |

474| ---------------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |568| ---------------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

475| `fail_closed_on_error` | 否 | 默认 `false`。支出强制执行在 Postgres 中断时失败打开,因此推理保持运行。设置 `true` 以失败关闭:超出上限的开发者被阻止,但如果存储无法访问,所有人也被阻止。需要 [`admin:`](#admin) 块:支出强制执行仅在配置 `admin` 时运行,如果在没有 `admin` 块的情况下设置此 `true`,网关拒绝启动。 |569| `fail_closed_on_error` | 否 | 默认 `false`。支出强制执行在 Postgres 中断时失败开放,因此推理保持运行。设置 `true` 以失败关闭:超出上限的开发者被阻止,但如果存储无法访问,所有人都被阻止。需要 [`admin:`](#admin) 块:支出强制执行仅在配置 `admin` 时运行,如果在没有 `admin` 块的情况下设置此 `true`,网关拒绝启动。 |

476 570 

477<h3 id="pricing">571<h3 id="pricing">

478 `pricing`572 `pricing`

479</h3>573</h3>

480 574 

481`pricing` 块告诉支出计量器收费而不是美元列表价格,因此上限和 [`/effective`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Feffective) 反映您的合同费率。金额保持为美元并保持为估计值,而不是发票。两个先决条件:575`pricing` 块告诉支出计量器收费而不是美元列表价格,因此上限和 [`/effective`](/docs/zh-CN/claude-apps-gateway-spend-limits#%2Feffective) 反映您的合同费率。金额保持为美元,并保持为估计值,而不是发票。两个先决条件:

482 576 

483* 网关服务器上的 Claude Code v2.1.227 或更高版本。早期版本在启动时拒绝未知键。577* 网关服务器上的 Claude Code v2.1.227 或更高版本。早期版本在启动时拒绝未知密钥。

484* [`admin:`](#admin) 块或在 v2.1.268 或更高版本中,至少有一个策略的 [`managed:`](#managed) 块。网关拒绝在设置 `pricing` 且没有任何块的情况下启动,因为没有任何东西会读取它。578* [`admin:`](#admin) 块或在 v2.1.268 或更高版本中,至少有一个策略的 [`managed:`](#managed) 块。网关拒绝在设置 `pricing` 且没有任何块的情况下启动,因为没有任何东西会读取它。

485 579 

486```yaml theme={null}580```yaml theme={null}


496```590```

497 591 

498| 字段 | 必需 | 描述 |592| 字段 | 必需 | 描述 |

499| ------------ | -- | --------------------------------------------------------------------------------------------------------- |593| ------------ | -- | -------------------------------------------------------------------------------------------------------- |

500| `multiplier` | 否 | 默认 `1`。计量器将每个计量金额乘以此值,无论是列表价格还是覆盖,因此 `0.85` 按价格的 85% 计费。必须大于 0 且最多 10,值大于 1 是[标记价格上升](#mark-prices-up)。 |594| `multiplier` | 否 | 默认 `1`。计量器将每个计量金额乘以此值,无论是列表价格还是覆盖,因此 `0.85` 按价格的 85% 计费。必须大于 0 且最多 10,值大于 1 是[标记价格上升](#mark-prices-up)。 |

501| `overrides` | 否 | `{upstream, model, input, output, cache_read, cache_write}` 的行,单位为美元每百万令牌。所有四个费率都是必需的。每个必须大于 0 且最多 10000。 |595| `overrides` | 否 | `{upstream, model, input, output, cache_read, cache_write}` 行,单位为美元/百万令牌。所有四个费率都是必需的。每个必须大于 0 且最多 10000。 |

502 596 

503计量器如何匹配覆盖行:597计量器如何匹配覆盖行:

504 598 

505* 一行替换 `upstream`(一个 [`upstreams[].name`](#upstreams))为 `model` 提供的请求的列表价格。这包括更高的[快速模式](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)费率,因此快速和标准请求以相同的四个费率计量。599* 一行替换列表价格,用于 `upstream`(一个 [`upstreams[].name`](#upstreams))为 `model` 提供的请求。这包括更高的[快速模式](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)费率,因此快速和标准请求以相同的四个费率计量。

506* 内置 ID(如 `claude-sonnet-4-6`)(匹配方式如 [`models[].id`](#models))涵盖计量器定价为该模型的每个日期形式、区域 Amazon Bedrock 形式或 Google Cloud 的 Agent Platform 形式。任何其他字符串(如别名或推理配置文件 ARN)匹配客户端发送的 ID 或上游发送的字符串,不区分大小写。600* 内置 ID(如 `claude-sonnet-4-6`)匹配 [`models[].id`](#models),涵盖计量器定价为该模型的每个日期形式、区域 Amazon Bedrock 形式或 Google Cloud 的 Agent Platform 形式。任何其他字符串(如别名或推理配置文件 ARN)匹配客户端发送的 ID 或上游发送的字符串,不区分大小写。

507* 其中行重叠时,计量器选择最具体的行而不是第一行:一行其 `model` 是上游发送的确切模型字符串,然后是匹配客户端发送的确切 ID 的行,然后是命名内置模型的行。601* 当行重叠时,计量器选择最具体的行而不是第一行:一行其 `model` 是上游发送的确切模型字符串,然后是匹配客户端发送的确切 ID 的行,然后是命名内置模型的行。

508* 未知的上游名称导致启动失败,一个上游的两行命名相同模型也是如此,包括一个内置模型的两个拼写。网关在启动时警告没有可请求模型可以使用的行。602* 未知的上游名称会导致启动失败,两行用于一个上游命名相同的模型也会导致启动失败,包括一个内置模型的两个拼写。网关在启动时警告没有可请求模型可以使用的行。

509* Web 搜索请求保持在 \$0.01 列表价格;乘数仍然适用于它们。603* Web 搜索请求保持在 \$0.01 列表价格;乘数仍然适用于它们。

510 604 

511对于按地区费率,为每个地区提供自己的命名上游和每个上游一行。605对于按地区的费率,为每个地区提供自己的命名上游和每个上游一行。

512 606 

513<h4 id="mark-prices-up">607<h4 id="mark-prices-up">

514 标记价格上升608 标记价格上升

515</h4>609</h4>

516 610 

517使用网关服务器上的 v2.1.271 或更高版本,您可以将 `multiplier` 设置为 1 以上,最多 10,以计量超过提供商收费的金额,例如内部退款费率。此示例以价格的 120% 计量每个请求:611使用网关服务器上的 v2.1.271 或更高版本,您可以将 `multiplier` 设置为大于 1,最多 10,以计量超过提供商收费的金额,例如内部退款费率。此示例以价格的 120% 计量每个请求:

518 612 

519```yaml theme={null}613```yaml theme={null}

520pricing:614pricing:

521 multiplier: 1.2615 multiplier: 1.2

522```616```

523 617 

524使用 [`admin:`](#admin) 块,标记也适用于支出限制。计量器计算价格的 120%,因此开发者更快达到其上限。网关在启动时记录警告,说明这一点。618使用 [`admin:`](#admin) 块,标记也适用于支出限制。计量器计数价格的 120%,因此开发者更快达到其上限。网关在启动时记录警告,说明这一点。

525 619 

526乘数不改变上游提供商对请求的收费。620乘数不会改变上游提供商对请求的收费。

527 621 

528如果网关也[将费率发送给已登录的客户端](#send-the-rates-to-signed-in-clients),开发者需要 Claude Code v2.1.271 或更高版本才能看到标记。早期客户端忽略 `multiplier` 大于 1 并显示不带它的成本。622如果网关还[将费率发送给已登录的客户端](#send-the-rates-to-signed-in-clients),开发者需要 Claude Code v2.1.271 或更高版本才能看到标记。早期客户端忽略大于 1 的 `multiplier` 并显示不带它的成本。

529 623 

530早于 v2.1.271 的网关服务器拒绝在设置 `multiplier` 大于 1 时启动。624早于 v2.1.271 的网关服务器拒绝在设置 `multiplier` 大于 1 时启动。

531 625 


533 将费率发送给已登录的客户端627 将费率发送给已登录的客户端

534</h4>628</h4>

535 629 

536使用网关服务器上的 v2.1.268 或更高版本,网关也将 `pricing` 中的费率放入它提供的 [`managed`](#managed) 策略中,作为 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing) 托管设置。由策略匹配的开发者然后在 `/usage`、状态行和 OpenTelemetry 中看到每个模型 ID 的第一个上游的 `pricing` 费率。与任何策略不匹配的开发者不接收托管设置,因此他们的数字保持在列表价格。客户端在 Claude Code v2.1.242 或更高版本中应用设置。630使用网关服务器上的 v2.1.268 或更高版本,网关还将 `pricing` 中的费率放入它提供的 [`managed`](#managed) 策略中,作为 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing) 托管设置。与策略匹配的开发者随后在 `/usage`、状态行和 OpenTelemetry 中看到第一个为每个模型 ID 提供服务的上游的 `pricing` 费率。与任何策略不匹配的开发者不会收到托管设置,因此他们的数字保持在列表价格。客户端在 Claude Code v2.1.242 或更高版本中应用该设置。

537 631 

538* 网关添加的内容:除非策略的 `cli` 块已经设置 `modelPricing`,网关添加 `multiplier` 和,对于客户端可以请求的每个模型 ID,提供该 ID 的第一个上游的覆盖行。仅故障转移上游收费的费率保留在网关上。632* 网关添加的内容:除非策略的 `cli` 块已经设置 `modelPricing`,网关添加 `multiplier` 和,对于客户端可以请求的每个模型 ID,为该 ID 提供服务的第一个上游的覆盖行。仅故障转移上游收费的费率保留在网关上。

539* 选择一个策略退出:在该策略的 `cli` 块中将 `modelPricing` 设置为 `{}`,其开发者保持在列表价格。633* 选择一个策略退出:在该策略的 `cli` 块中将 `modelPricing` 设置为 `{}`,其开发者保持在列表价格。

540* 保留策略自己的费率:其 `cli` 块使用自己的 `multiplier` 或 `overrides` 设置 `modelPricing` 的策略保留该 `modelPricing` 完整,网关不向其添加自己的费率。634* 保留策略自己的费率:其 `cli` 块使用自己的 `multiplier` 或 `overrides` 设置 `modelPricing` 的策略保留该 `modelPricing` 完整,网关不向其添加自己的费率。

541 635 


543 `models`637 `models`

544</h3>638</h3>

545 639 

546`models` 块是可选的管理员策划的模型列表,在 `/v1/models` 提供并用于按上游翻译模型 ID。它对于非美国 Amazon Bedrock 地区、Amazon Bedrock 预配置吞吐量 ARN 和 Microsoft Foundry 部署名称是必需的。640`models` 块是可选的管理员策划的模型列表,在 `/v1/models` 提供,用于按上游翻译模型 ID。它对于非美国 Amazon Bedrock 地区、Amazon Bedrock 预配置吞吐量 ARN 和 Microsoft Foundry 部署名称是必需的。

547 641 

548```yaml theme={null}642```yaml theme={null}

549auto_include_builtin_models: true # false: expose only the list below643auto_include_builtin_models: true # false: 仅公开下面的列表

550models:644models:

551 - id: claude-opus-4-8645 - id: claude-opus-4-8

552 label: Claude Opus 4.8646 label: Claude Opus 4.8

553 # description: optional text shown in clients that surface it647 # description: 可选文本显示在表面它的客户端中

554 upstream_model:648 upstream_model:

555 anthropic: claude-opus-4-8649 anthropic: claude-opus-4-8

556 bedrock: us.anthropic.claude-opus-4-8 # or an inference-profile ARN650 bedrock: us.anthropic.claude-opus-4-8 # 或推理配置文件 ARN

557 foundry: your-opus-deployment-name651 foundry: your-opus-deployment-name

558```652```

559 653 

560`upstream_model` 下的每个键必须匹配配置的上游的 `name`,默认为提供商名称。与任何上游不匹配的键导致启动失败,因此省略您不使用的提供商的行。654`upstream_model` 下的每个键必须匹配配置的上游的 `name`,默认为提供商名称。与任何上游不匹配的键会导致启动失败,因此省略您不使用的提供商的行。

561 655 

562<h3 id="managed">656<h3 id="managed">

563 `managed`657 `managed`

564</h3>658</h3>

565 659 

566`managed` 块定义基于 IdP 组或电子邮件域的基于角色的访问策略。策略按顺序评估;选择第一个匹配,然后合并到 `match: {}` 捕获所有基础。它们按用户在 `GET /managed/settings` 提供,带有 ETag/304 缓存。660`managed` 块定义基于 IdP 组或电子邮件域的基于角色的访问策略。策略按顺序评估;选择第一个匹配,然后合并到 `match: {}` 全部捕获基础。它们按用户在 `GET /managed/settings` 提供,带有 ETag/304 缓存。

567 661 

568```yaml theme={null}662```yaml theme={null}

569managed:663managed:

570 policies:664 policies:

571 # Specific groups first.665 # 首先是特定组。

572 - match: { groups: [eng-contractors] }666 - match: { groups: [eng-contractors] }

573 cli:667 cli:

574 availableModels: [claude-sonnet-4-6]668 availableModels: [claude-sonnet-4-6]

575 permissions: { deny: ["WebFetch", "WebSearch"] }669 permissions: { deny: ["WebFetch", "WebSearch"] }

576 # Default catch-all last: matches everyone who authenticated.670 # 默认全部捕获最后:匹配每个已认证的用户。

577 - match: {}671 - match: {}

578 cli:672 cli:

579 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]673 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]

580```674```

581 675 

582`match: {}` 捕获所有,按惯例列在最后,被视为基础层。每个其他策略从捕获所有继承它不设置的任何键,因此每个角色条目只需列出与组织默认值不同的内容。合并规则取决于键类型:676`match: {}` 全部捕获,按惯例列在最后,被视为基础层。每个其他策略从全部捕获继承它不设置的任何键,因此每个角色条目只需列出与组织默认值不同的内容。合并规则取决于键类型:

583 677 

584* **允许列表**:`availableModels` 和 `permissions.allow`。特定策略的列表完全替换基础的。678* **允许列表**:`availableModels` 和 `permissions.allow`。特定策略的列表完全替换基础的。

585* **拒绝列表和钩子数组**:`permissions.deny`、`permissions.ask`、`disabledMcpjsonServers`、`deniedMcpServers`、`blockedMarketplaces` 和每个 `hooks` 事件类型数组。这些取基础和策略的并集,因此组织范围的拒绝或审计钩子不能被每个角色覆盖意外删除。679* **拒绝列表和钩子数组**:`permissions.deny`、`permissions.ask`、`disabledMcpjsonServers`、`deniedMcpServers`、`blockedMarketplaces` 和每个 `hooks` 事件类型数组。这些取基础和策略的并集,因此组织范围的拒绝或审计钩子不会被每个角色覆盖意外删除。

586* **记录类型键**:`env`、`modelOverrides` 和 `skillOverrides`。这些浅合并,因此每个角色 `env` 块覆盖它设置的键并从基础继承其余的。680* **记录类型的键**:`env`、`modelOverrides` 和 `skillOverrides`。这些浅合并,因此每个角色 `env` 块覆盖它设置的键并从基础继承其余的。

587 681 

588`availableModels` 也在 `/v1/messages` 服务器端强制执行,因此被拒绝的模型返回 `400`,无论客户端发送什么。682`availableModels` 也在 `/v1/messages` 服务器端强制执行,因此被拒绝的模型返回 `400`,无论客户端发送什么。

589 683 


599| `match: { email_domain: example.com }` | 匹配 JWT 的 `email` 声明中最后一个 `@` 之后的部分,不区分大小写。每个策略接受一个域。 |693| `match: { email_domain: example.com }` | 匹配 JWT 的 `email` 声明中最后一个 `@` 之后的部分,不区分大小写。每个策略接受一个域。 |

600| `match: { groups: [a], email_domain: example.com }` | 两个条件都必须匹配 |694| `match: { groups: [a], email_domain: example.com }` | 两个条件都必须匹配 |

601 695 

602与任何策略不匹配的已认证用户获得网关的默认值,这意味着目录中的每个模型和没有托管设置。如果您想要保证的默认策略,请在最后添加 `match: {}` 捕获所有。696与任何策略不匹配的已认证用户获得网关的默认值,这意味着目录中的每个模型和没有托管设置。如果您想要保证的默认策略,请在最后添加 `match: {}` 全部捕获。

603 697 

604<Note>698<Note>

605 网关不保留自己的用户目录。它从用户的 IdP 令牌授权每个请求,从令牌的 `groups` 声明读取组成员身份,并根据它评估策略。没有名册可以枚举,没有账户需要预先创建,因此没有 SCIM 端点,因为没有东西可以让 SCIM 同步到。699 网关不保留自己的用户目录。它从用户的 IdP 令牌授权每个请求,从令牌的 `groups` 声明读取组成员身份,并根据它评估策略。没有名册可以枚举,没有账户需要预先创建,因此没有 SCIM 端点,因为没有东西可以让 SCIM 同步到。

606 700 

607 在真实来源(您的 IdP 的本地 SCIM 配置或专用身份治理平台)运行用户和组生命周期管理。那里管理的成员身份和取消配置通过令牌自动流入网关。如果您想要 Claude 账户本身的 SCIM 配置,那是一个[Claude for Enterprise](/docs/zh-CN/admin-setup) 功能。701 在真实来源(您的 IdP 的本地 SCIM 配置或专用身份治理平台)运行用户和组生命周期管理。那里管理的成员身份和取消配置通过令牌自动流入网关。如果您想要 Claude 账户本身的 SCIM 配置,那是[Claude for Enterprise](/docs/zh-CN/admin-setup) 功能。

608 702 

609 两个传播时钟适用:703 两个传播时钟适用:

610 704 

611 * **策略内容**:编辑策略并重新部署在连接的客户端的下一个托管设置轮询时到达,在一小时内,除了[仅在下一次启动时应用的更改](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)705 * **策略内容**:编辑策略并重新部署在连接的客户端的下一个托管设置轮询中到达,在一小时内,除了[仅在下一次启动时应用的更改](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)

612 * **组成员身份**:更改用户的组成员身份改变哪个策略匹配他们。这在下一个会话重新铸造时生效,意味着下一个静默刷新,由 `session.ttl_hours` 限制。706 * **组成员身份**:更改用户的组成员身份更改哪个策略与他们匹配。这在下一个会话重新铸造时生效,意味着下一个静默刷新,受 `session.ttl_hours` 限制。

613</Note>707</Note>

614 708 

615<h4 id="matcher-values-that-stop-the-gateway-at-boot">709<h4 id="matcher-values-that-stop-the-gateway-at-boot">

616 在启动时停止网关的匹配器值710 在启动时停止网关的匹配器值

617</h4>711</h4>

618 712 

619在启动时,网关检查每个策略的 `match` 块和 [`admin_groups`](#admin) 列表。这些值中的任何一个都以命名该字段的错误停止网关:713在启动时,网关检查每个策略的 `match` 块和 [`admin_groups`](#admin) 列表。这些值中的任何一个都会停止网关,出现命名该字段的错误:

620 714 

621* 空 `groups` 列表715* 空 `groups` 列表

622* `groups` 或 `admin_groups` 中的空条目716* `groups` 或 `admin_groups` 中的空条目

623* 空 `email_domain`717* 空 `email_domain`

624* 包含 `@`、空格或逗号的 `email_domain`。网关修剪值并在此检查之前删除一个前导 `@`。写一个裸域,如 `example.com`。718* 包含 `@`、空格或逗号的 `email_domain`。网关修剪值并在此检查之前删除一个前导 `@`。编写一个裸域,例如 `example.com`。

625 719 

626在 v2.1.232 之前,网关以这些值启动。每个值有这个效果:720在 v2.1.232 之前,网关以这些值启动。每个值有这个效果:

627 721 

628* 空 `email_domain`:网关跳过域检查,因此具有空 `email_domain` 和没有 `groups` 列表的策略匹配每个已认证的用户722* 空 `email_domain`:网关跳过域检查,因此具有空 `email_domain` 和没有 `groups` 列表的策略匹配每个已认证的用户

629* 空 `groups` 列表:策略与任何人都不匹配723* 空 `groups` 列表:策略与任何人都不匹配

630* 包含 `@`、空格或逗号的 `email_domain`:策略与任何人都不匹配724* 包含 `@`、空格或逗号的 `email_domain`:策略与任何人都不匹配

631* `groups` 或 `admin_groups` 中的空条目:条目仅当该用户的 IdP `groups` 声明也包含空条目时才匹配用户。在 `admin_groups` 中,该匹配授予管理员访问权限。如果您的 `admin_groups` 列表从不包含空条目,没有人以这种方式获得管理员访问权限。725* `groups` 或 `admin_groups` 中的空条目:条目仅当该用户的 IdP `groups` 声明也包含空条目时才与用户匹配。在 `admin_groups` 中,该匹配授予管理员访问权限。如果您的 `admin_groups` 列表从不包含空条目,没有人以这种方式获得管理员访问权限。

632 726 

633<h4 id="what-goes-in-cli">727<h4 id="what-goes-in-cli">

634 `cli` 中的内容728 `cli` 中的内容

635</h4>729</h4>

636 730 

637每个 `cli` 值是一个完整的 Claude Code `managed-settings.json` 文档,与您通过 MDM 或 `/etc/claude-code/managed-settings.json` 部署的相同架构,在这里表示为 YAML。CLI 在托管层应用交付的文档,在用户和项目设置之上,代替服务器托管的设置。因此它忽略[限制为操作系统级策略源的设置](/docs/zh-CN/server-managed-settings#current-limitations),如 `policyHelper` 和 `wslInheritsWindowsSettings`。731每个 `cli` 值是完整的 Claude Code `managed-settings.json` 文档,与您通过 MDM 或 `/etc/claude-code/managed-settings.json` 部署的相同架构,在此表示为 YAML。CLI 在托管层应用交付的文档,在用户和项目设置之上,代替服务器托管的设置。因此它忽略[限制为操作系统级策略来源的设置](/docs/zh-CN/server-managed-settings#current-limitations),例如 `policyHelper` 和 `wslInheritsWindowsSettings`。

638 732 

639网关在启动时根据 CLI 的设置架构验证每个文档,因此无法识别的顶级键导致启动失败,错误命名每个违规键。架构的故意开放部分仍然接受任意值,因为较新的客户端可能识别网关的架构不识别的条目。这些开放键包括 `env`、`pluginConfigs` 和 `permissions` 下嵌套的键。733网关在启动时根据 CLI 的设置架构验证每个文档,因此无法识别的顶级键会导致启动失败,出现命名每个违规键的错误。架构的故意开放部分仍然接受任意值,因为较新的客户端可能识别网关架构不识别的条目。这些开放键包括 `env`、`pluginConfigs` 和 `permissions` 下嵌套的键。

640 734 

641因为验证使用与网关的已安装版本捆绑的架构,将由较新 Claude Code 版本引入的顶级设置键放入托管配置需要首先升级网关。在将新策略推出到一个客户端之前对其进行烟雾测试。735因为验证使用与网关安装版本捆绑的架构,将由较新 Claude Code 版本引入的顶级设置键放入托管配置需要首先升级网关。在将新策略推出到一个客户端之前进行烟雾测试。

642 736 

643完整的键参考在[Claude Code 设置](/docs/zh-CN/settings-reference#all-settings)中。操作员首先寻求的最常见键:737完整的键参考在[Claude Code 设置](/docs/zh-CN/settings-reference#all-settings)中。操作员首先寻求的键:

644 738 

645```yaml theme={null}739```yaml theme={null}

646managed:740managed:

647 policies:741 policies:

648 - match: {}742 - match: {}

649 cli:743 cli:

650 # Model access (also enforced server-side at /v1/messages)744 # 模型访问(也在 /v1/messages 服务器端强制执行)

651 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]745 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]

652 746 

653 # Permission policy747 # 权限策略

654 permissions:748 permissions:

655 deny:749 deny:

656 - "WebFetch"750 - "WebFetch"

657 - "Read(./.env)"751 - "Read(./.env)"

658 - "Read(./secrets/**)"752 - "Read(./secrets/**)"

659 disableBypassPermissionsMode: disable # blocks --dangerously-skip-permissions753 disableBypassPermissionsMode: disable # 阻止 --dangerously-skip-permissions

660 allowManagedPermissionRulesOnly: true # ignore user/project permission rules754 allowManagedPermissionRulesOnly: true # 忽略用户/项目权限规则

661 755 

662 # Environment pushed into the CLI process. DISABLE_UPDATES blocks756 # 推送到 CLI 进程的环境。DISABLE_UPDATES 阻止

663 # background and manual updates; DISABLE_AUTOUPDATER stops only757 # 后台和手动更新;DISABLE_AUTOUPDATER 仅停止

664 # background updates.758 # 后台更新。

665 env:759 env:

666 DISABLE_UPDATES: "1" # pin versions via your own distribution760 DISABLE_UPDATES: "1" # 通过您自己的分发固定版本

667 761 

668 # Org-wide hooks. Hook commands run on developer machines, not the762 # 组织范围的钩子。钩子命令在开发者机器上运行,不是

669 # gateway, so the path must exist on every client OS in the policy.763 # 网关,因此路径必须存在于策略中每个客户端操作系统上。

670 hooks:764 hooks:

671 PostToolUse:765 PostToolUse:

672 - matcher: "Edit|Write"766 - matcher: "Edit|Write"


679| `availableModels` | 网关 + CLI | 模型允许列表。也在 `/v1/messages` 检查,因此修补的客户端无法绕过它。 |773| `availableModels` | 网关 + CLI | 模型允许列表。也在 `/v1/messages` 检查,因此修补的客户端无法绕过它。 |

680| `permissions.allow` / `.deny` | CLI | 工具和命令规则。请参阅[权限](/docs/zh-CN/permissions)。 |774| `permissions.allow` / `.deny` | CLI | 工具和命令规则。请参阅[权限](/docs/zh-CN/permissions)。 |

681| `permissions.disableBypassPermissionsMode` | CLI | 设置为 `disable` 以阻止 [`bypassPermissions`](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode),跳过权限提示的模式,以及 `--dangerously-skip-permissions` 标志 |775| `permissions.disableBypassPermissionsMode` | CLI | 设置为 `disable` 以阻止 [`bypassPermissions`](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode),跳过权限提示的模式,以及 `--dangerously-skip-permissions` 标志 |

682| `allowManagedPermissionRulesOnly` | CLI | 当 `true` 时,托管设置成为权限规则的唯一设置源。[`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 条目列出 Claude Code 然后忽略的每个源。 |776| `allowManagedPermissionRulesOnly` | CLI | 当 `true` 时,托管设置成为权限规则的唯一设置来源。[`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 条目列出 Claude Code 随后忽略的每个来源。 |

683| `env` | CLI | 合并到 CLI 进程的环境变量。用于遥测、自动更新和模型名称覆盖。 |777| `env` | CLI | 合并到 CLI 进程的环境变量。用于遥测、自动更新和模型名称覆盖。 |

684| `hooks` | CLI | 组织范围的[钩子](/docs/zh-CN/hooks) |778| `hooks` | CLI | 组织范围的[钩子](/docs/zh-CN/hooks) |

685| `managedMcpServers` | CLI | 远程 MCP 服务器[提供给每个匹配的开发者](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)以及他们自己添加的服务器,仅 `http` 和 `sse`。请参阅[策略中的 MCP 服务器](#mcp-servers-in-a-policy)。需要网关服务器和客户端上的 Claude Code v2.1.259 或更高版本。早期客户端忽略该键。 |779| `managedMcpServers` | CLI | 远程 MCP 服务器[提供给每个匹配的开发者](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)以及他们自己添加的服务器,仅 `http` 和 `sse`。请参阅[策略中的 MCP 服务器](#mcp-servers-in-a-policy)。需要网关服务器和客户端上的 Claude Code v2.1.259 或更高版本。早期客户端忽略该键。 |


687因为这些设置通过网络到达,CLI 在应用下面列出的设置之前向每个开发者显示安全批准对话框:781因为这些设置通过网络到达,CLI 在应用下面列出的设置之前向每个开发者显示安全批准对话框:

688 782 

689* `hooks`783* `hooks`

690* 需要开发者批准的 `env` 变量,如代理和基础 URL 变量784* 需要开发者批准的 `env` 变量,例如代理和基础 URL 变量

691* shell 执行设置,如 `apiKeyHelper` 和 `statusLine`785* shell 执行设置,例如 `apiKeyHelper` 和 `statusLine`

692* 沙箱二进制设置 `sandbox.bwrapPath`、`sandbox.socatPath` 和 `sandbox.ripgrep`786* 沙箱二进制设置 `sandbox.bwrapPath`、`sandbox.socatPath` 和 `sandbox.ripgrep`

693* 拦截流量、注入凭证或削弱隔离的沙箱设置,如 `sandbox.network.tlsTerminate` 和代理端口设置。[安全批准对话框](/docs/zh-CN/server-managed-settings#security-approval-dialogs)列出所有这些。787* 拦截流量、注入凭证或削弱隔离的沙箱设置,例如 `sandbox.network.tlsTerminate` 和代理端口设置。[安全批准对话框](/docs/zh-CN/server-managed-settings#security-approval-dialogs)列出所有这些。

694 788 

695[批准记忆](/docs/zh-CN/server-managed-settings#approval-memory)涵盖批准持续多长时间以及对话框何时再次出现。789[批准记忆](/docs/zh-CN/server-managed-settings#approval-memory)涵盖批准持续多长时间以及对话框何时再次出现。

696 790 

697Claude Code 应用一些交付的 `env` 变量而不向开发者显示批准对话框,如模型选择设置和数值限制。其他交付的变量可能需要开发者的批准才能生效;非空代理、基础 URL 或 `OTEL_EXPORTER_OTLP_ENDPOINT` 值总是这样。当交付的变量需要批准时,对话框命名它。791Claude Code 应用一些交付的 `env` 变量而不向开发者显示批准对话框,例如模型选择设置和数值限制。其他交付的变量可能需要开发者的批准才能生效;非空代理、基础 URL 或 `OTEL_EXPORTER_OTLP_ENDPOINT` 值总是这样。当交付的变量需要批准时,对话框命名它。

698 792 

699[环境变量和批准对话框](/docs/zh-CN/server-managed-settings#environment-variables-and-the-approval-dialog)有详细信息,包括四个隐私切换,其交付值决定它们是否需要批准。在 v2.1.218 之前,Claude Code 应用更少的变量而不询问开发者,因此更多交付的变量触发对话框。793[环境变量和批准对话框](/docs/zh-CN/server-managed-settings#environment-variables-and-the-approval-dialog)有详细信息,包括四个隐私切换,其交付值决定是否需要批准。在 v2.1.218 之前,Claude Code 应用更少的变量而不询问开发者,因此更多交付的变量触发对话框。

700 794 

701网关的[遥测](#telemetry)配置推送 `OTEL_EXPORTER_OTLP_ENDPOINT`,因此设置 `telemetry.forward_to` 在每个交互式客户端上触发对话框。对话框保护开发者的机器免受受损或敌对网关的影响,而不是保护组织免受开发者的影响。795网关的[遥测](#telemetry)配置推送 `OTEL_EXPORTER_OTLP_ENDPOINT`,因此设置 `telemetry.forward_to` 在每个交互式客户端上触发对话框。对话框保护开发者的机器免受受损或敌对网关的影响,而不是保护组织免受开发者的影响。

702 796 

703带有 `-p` 标志的非交互式运行无法显示对话框。它仅为该运行应用推送的设置,不将其记录为已批准,因此开发者的下一个交互式会话仍然显示对话框。在 v2.1.207 之前,非交互式运行将设置保存为已批准,没有后来的交互式会话为它们显示对话框。797带有 `-p` 标志的非交互式运行无法显示对话框。它仅为该运行应用推送的设置,不将其记录为已批准,因此开发者的下一个交互式会话仍然显示对话框。在 v2.1.207 之前,非交互式运行将设置保存为已批准,没有后来的交互式会话为它们显示对话框。

704 798 

705如果开发者拒绝,Claude Code 退出该会话而不是应用策略。当您推送新钩子或任何触发对话框的 env 变量到广泛策略时,Claude Code 因此向每个匹配的开发者显示对话框。它在运行会话中的下一个小时轮询时显示对话框,否则在开发者的下一个启动时显示。799如果开发者拒绝,Claude Code 退出该会话而不是应用策略。当您推送新钩子或任何触发对话框的 env 变量到广泛策略时,Claude Code 因此向每个匹配的开发者显示对话框。它在运行会话中的下一个小时轮询显示对话框,否则在开发者的下一个启动时显示。

706 800 

707`cli` 键在早期版本中被命名为 `settings`。该拼写仍然被接受为别名,但新部署应该使用 `cli`。801`cli` 键在早期版本中被命名为 `settings`。该拼写仍然被接受为别名,但新部署应该使用 `cli`。

708 802 


714 808 

715网关在启动时使用[Claude Code 在客户端应用的相同规则](/docs/zh-CN/managed-mcp#what-an-entry-can-contain)检查每个条目,如果条目失败检查,网关拒绝启动并命名该条目。809网关在启动时使用[Claude Code 在客户端应用的相同规则](/docs/zh-CN/managed-mcp#what-an-entry-can-contain)检查每个条目,如果条目失败检查,网关拒绝启动并命名该条目。

716 810 

717如果您在 `gateway.yaml` 中写入 `${VAR}` 引用,网关在启动时通过[秘密扩展](#secret-expansion)从其环境解析它,然后运行条目检查,因此每个匹配的客户端接收文字值并可以读取它。[为提供的服务器的标头指导](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)适用于扩展值。811如果您在 `gateway.yaml` 中编写 `${VAR}` 引用,网关在启动时通过[秘密扩展](#secret-expansion)从其环境解析它,然后运行条目检查,因此每个匹配的客户端接收文字值并可以读取它。[为提供的服务器的标头指导](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)适用于扩展值。

718 812 

719网关拒绝 `cli` 块中的 `.mcp.json` 拼写 `mcpServers`,其启动错误命名 `managedMcpServers` 作为要使用的键。在 v2.1.259 之前,网关拒绝 `cli` 块中的任何 MCP 服务器定义。813网关拒绝 `cli` 块中的 `.mcp.json` 拼写 `mcpServers`,其启动错误命名 `managedMcpServers` 作为要使用的键。在 v2.1.259 之前,网关拒绝 `cli` 块中的任何 MCP 服务器定义。

720 814 


722 Claude Desktop 覆盖816 Claude Desktop 覆盖

723</h4>817</h4>

724 818 

725如果您的组织也部署[Claude Desktop](/docs/zh-CN/desktop),同一网关为两个客户端提供服务。在 Claude Desktop 的[托管配置](https://claude.com/docs/third-party/claude-desktop/configuration)中指向 `bootstrapUrl` 到 `<listen.public_url>/user/bootstrap`。Claude Desktop 从该 URL 派生 OAuth 发行者,针对此网关运行相同的设备代码登录,并从响应中获取其配置。819如果您的组织也部署[Claude Desktop](/docs/zh-CN/desktop),同一网关为两个客户端提供服务。在 Claude Desktop 的[托管配置](https://claude.com/docs/third-party/claude-desktop/configuration)中指向 `bootstrapUrl` 到 `<listen.public_url>/user/bootstrap`。Claude Desktop 从该 URL 派生 OAuth 发行者,针对此网关运行相同的设备代码登录,并从响应获取其配置。

726 820 

727<Note>821<Note>

728 需要网关服务器上的 Claude Code v2.1.203 或更高版本,以及显式选择加入:除非与用户匹配的策略携带 `desktop` 键,否则 `/user/bootstrap` 返回 404。空 `desktop: {}` 选择策略加入,`match: {}` 基础层上的 `desktop` 键选择继承它的每个策略加入。审计日志将每个请求记录为 `desktop_bootstrap.serve` 或 `desktop_bootstrap.denied`。822 需要网关服务器上的 Claude Code v2.1.203 或更高版本,以及显式选择加入:除非与用户匹配的策略携带 `desktop` 键,否则 `/user/bootstrap` 返回 404。空 `desktop: {}` 选择策略加入,`match: {}` 基础层上的 `desktop` 键选择继承它的每个策略加入。审计日志将每个请求记录为 `desktop_bootstrap.serve` 或 `desktop_bootstrap.denied`。


735* 出口允许列表,来自 `sandbox.network.allowedDomains`。如果您在策略的 `desktop` 块中设置 `coworkEgressAllowedHosts`,网关使用该值而不是派生列表829* 出口允许列表,来自 `sandbox.network.allowedDomains`。如果您在策略的 `desktop` 块中设置 `coworkEgressAllowedHosts`,网关使用该值而不是派生列表

736* 指向网关本身的 OTLP 端点,以及已登录用户的身份属性。网关将它在该端点接收的导出中继到您的 `forward_to` 目的地。当您同时设置 [`telemetry.forward_to`](#telemetry) 和 `listen.public_url` 时,它包括端点和属性。830* 指向网关本身的 OTLP 端点,以及已登录用户的身份属性。网关将它在该端点接收的导出中继到您的 `forward_to` 目的地。当您同时设置 [`telemetry.forward_to`](#telemetry) 和 `listen.public_url` 时,它包括端点和属性。

737 831 

738 Claude Desktop 以一种编码导出每个信号:`http/protobuf`,或当您在策略的 `env` 中设置 `OTEL_EXPORTER_OTLP_PROTOCOL` 或其每个信号变体为 `http/json` 时为 `http/json`。在网关服务器上的 Claude Code v2.1.261 之前,响应设置 `http/json` 无论如何,因此仅接受 protobuf 的收集器拒绝了 Claude Desktop 的导出832 Claude Desktop 以一种编码导出每个信号:`http/protobuf`,或当您在策略的 `env` 中将 `OTEL_EXPORTER_OTLP_PROTOCOL` 或其每个信号变体设置为 `http/json` 时为 `http/json`。在网关服务器上的 Claude Code v2.1.261 之前,响应设置 `http/json` 无论如何,因此仅接受 protobuf 的收集器拒绝了 Claude Desktop 的导出

739 833 

740要在策略的 `desktop` 块中设置 `disabledBuiltinTools`、`coworkEgressAllowedHosts` 或 Claude Desktop 自己的 `managedMcpServers` 设置,您需要网关服务器上的 Claude Code v2.1.232 或更高版本。Claude Desktop 的 `managedMcpServers` 采用数组值而不是对象。834要在策略的 `desktop` 块中设置 `disabledBuiltinTools`、`coworkEgressAllowedHosts` 或 Claude Desktop 自己的 `managedMcpServers` 设置,您需要网关服务器上的 Claude Code v2.1.232 或更高版本。Claude Desktop 的 `managedMcpServers` 采用数组值而不是对象。

741 835 

742网关省略没有 Claude Desktop 等效项的键,如 `hooks` 和范围权限规则如 `Bash(npm *)`,来自引导响应。836网关省略没有 Claude Desktop 等效项的键,例如 `hooks` 和范围权限规则如 `Bash(npm *)`,来自引导响应。

743 837 

744在 `cli` 旁边添加可选的 `desktop` 块以直接设置 Claude Desktop 设置。从 Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)写入设置为平面键名。省略 Claude Desktop 仅从 MDM 或本地文件读取的键,如 `bootstrapUrl`;网关在启动时拒绝它们。在 v2.1.232 之前,网关接受 11 个固定的功能门键的列表,如 `chatTabEnabled` 和 `disableAutoUpdates`,并在启动时拒绝每个其他键。在 v2.1.227 之前,网关也在启动时拒绝 `chatTabEnabled` 和 `chatAdvancedFileAnalysisEnabled`。838添加可选的 `desktop` 块与 `cli` 一起直接设置 Claude Desktop 设置。从 Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)编写设置为平面键名。省略 Claude Desktop 仅从 MDM 或本地文件读取的键,例如 `bootstrapUrl`;网关在启动时拒绝它们。在 v2.1.232 之前,网关接受固定的 11 个功能门键列表,例如 `chatTabEnabled` 和 `disableAutoUpdates`,并在启动时拒绝每个其他键。在 v2.1.227 之前,网关也在启动时拒绝 `chatTabEnabled` 和 `chatAdvancedFileAnalysisEnabled`。

745 839 

746```yaml theme={null}840```yaml theme={null}

747managed:841managed:


755 banner: { text: "Contractor build: internal use only" }849 banner: { text: "Contractor build: internal use only" }

756```850```

757 851 

758每个键都是可选的;Claude Desktop 为您省略的任何键应用自己的默认值。网关在启动时根据 Claude Desktop 本身使用的配置架构验证每个 `desktop` 块,因此错误在网关启动时显示为命名该键的错误,而不是到达每个连接的桌面。网关在块包含以下内容时在启动时失败:852每个键都是可选的;Claude Desktop 为您省略的任何键应用自己的默认值。网关在启动时根据 Claude Desktop 本身使用的配置架构验证每个 `desktop` 块,因此错误会在网关启动时显示为命名该键的错误,而不是到达每个连接的桌面。网关在块包含以下内容时在启动时失败:

759 853 

760* 未知键854* 未知键

761* 识别的键,其值 Claude Desktop 会拒绝或静默删除,如空值或嵌套条目内的拼写错误的子键。在 v2.1.260 之前,网关静默删除 `managedMcpServers` 或 `orgPluginSettings` 条目内嵌套对象中的拼写错误字段,而不是在启动时失败。855* 识别的键,其值 Claude Desktop 会拒绝或静默删除,例如空值或嵌套条目内的拼写错误的子键。在 v2.1.260 之前,网关静默删除 `managedMcpServers` 或 `orgPluginSettings` 条目的嵌套对象内的拼写错误字段,而不是在启动时失败。

762* 网关自己计算的键:推理连接、模型列表和 OTLP 中继。通过 [`upstreams`](#upstreams)、[`models`](#models) 和 [`telemetry`](#telemetry) 部分的 `forward_to` 配置这些。856* 网关自己计算的键:推理连接、模型列表和 OTLP 中继。通过 [`upstreams`](#upstreams)、[`models`](#models) 和 [`telemetry`](#telemetry) 部分的 `forward_to` 配置这些。

763* 当前键的遗留别名。在启动错误中,网关命名规范键来写。857* 当前键的遗留别名。在启动错误中,网关命名规范键来编写。

764 858 

765如果您使用已弃用的值或条目形状,如没有 `transport` 的 `managedMcpServers` 条目,网关启动并记录命名替换的警告。859如果您使用已弃用的值或条目形状,例如没有 `transport` 的 `managedMcpServers` 条目,网关启动并记录命名替换的警告。

766 860 

767网关根据与其已安装版本捆绑的架构验证 `desktop` 块,就像它对 `cli` 块所做的那样。要交付由较新 Claude Desktop 版本引入的设置,首先升级网关。例如,`userPluginMarketplacesEnabled` 和 `userPluginUploadsEnabled` 需要网关服务器上的 Claude Code v2.1.260 或更高版本以及成员机器上的 Claude Desktop 1.37937.0 或更高版本。861网关根据与其安装版本捆绑的架构验证 `desktop` 块,就像它对 `cli` 块所做的那样。要交付由较新 Claude Desktop 版本引入的设置,首先升级网关。例如,`userPluginMarketplacesEnabled` 和 `userPluginUploadsEnabled` 需要网关服务器上的 Claude Code v2.1.260 或更高版本以及成员机器上的 Claude Desktop 1.37937.0 或更高版本。

768 862 

769如果您在策略的 `desktop` 块中设置 `orgPluginSettings`,网关以 Claude Desktop 1.15200.0 及更高版本读取的数组形式提供它。较旧的桌面忽略数组并强制执行无插件工具策略,因此在依赖它之前将成员更新到 1.15200.0 或更高版本。863如果您在策略的 `desktop` 块中设置 `orgPluginSettings`,网关以 Claude Desktop 1.15200.0 及更高版本读取的数组形式提供它。较旧的桌面忽略数组并强制执行无插件工具策略,因此在依赖它之前将成员更新到 1.15200.0 或更高版本。

770 864 

771网关从 `match: {}` 捕获所有的 `desktop` 块填充策略的 `desktop` 块不设置的键,与它填充策略的 `cli` 块的方式相同。如果您在基础和角色策略中都设置 `disabledBuiltinTools` 或 `builtinToolPolicy`,网关保留基础的限制:865网关从策略的 `desktop` 块不设置的 `match: {}` 全部捕获的 `desktop` 块填充键,与它填充策略的 `cli` 块的方式相同。如果您在基础和角色策略中都设置 `disabledBuiltinTools` 或 `builtinToolPolicy`,网关保留基础的限制:

772 866 

773* `disabledBuiltinTools`:网关使用基础列表和策略列表的并集867* `disabledBuiltinTools`:网关使用基础列表和策略列表的并集

774* `builtinToolPolicy`:如果您在基础中为工具设置除 `allow` 之外的值,网关保留该值,即使您在角色策略中为同一工具设置 `allow`868* `builtinToolPolicy`:如果您在基础中为工具设置除 `allow` 之外的值,网关保留该值,即使您在角色策略中为同一工具设置 `allow`

775 869 

776对于每个其他键,如果您在角色策略中设置它,网关使用角色策略的值。网关完整替换数组或嵌套对象如 `banner`,因此如果您在角色策略中设置 `banner.text`,网关删除基础的 `banner.backgroundColor`。870对于每个其他键,如果您在角色策略中设置它,网关使用角色策略的值。网关整体替换数组或嵌套对象(如 `banner`),因此如果您在角色策略中设置 `banner.text`,网关删除基础的 `banner.backgroundColor`。

777 871 

778如果您不部署 Claude Desktop,完全从您的策略中省略 `desktop`;网关然后从 `/user/bootstrap` 为每个用户返回 404。872如果您不部署 Claude Desktop,完全从您的策略中省略 `desktop`;网关随后为每个用户从 `/user/bootstrap` 返回 404。

779 873 

780<h4 id="precedence-with-other-managed-sources">874<h4 id="precedence-with-other-managed-sources">

781 与其他托管源的优先级875 与其他托管来源的优先级

782</h4>876</h4>

783 877 

784如果设备也有 MDM 交付的策略或本地 `managed-settings.json`,网关交付的设置排名第一。[托管层内的优先级](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)在托管设置页面上说明本地源何时应用,并有[Claude Code 从每个管理源读取的键](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source),无论它选择哪个源,如沙箱锁键、`forceRemoteSettingsRefresh` 和每个变量 `env` 合并。在 MDM 配置文件或托管设置文件中配置的 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 仅在网关不交付设置时运行;条目说明其输出替换什么。878如果设备也有 MDM 交付的策略或本地 `managed-settings.json`,网关交付的设置排名第一。[托管层内的优先级](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)在托管设置页面上说明本地来源何时应用,并具有[Claude Code 从每个管理来源读取的键](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source),无论它选择哪个来源,例如沙箱锁键、`forceRemoteSettingsRefresh` 和每个变量 `env` 合并。在 MDM 配置文件或托管设置文件中配置的 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 仅在网关不交付设置时运行;条目说明其输出替换什么。

785 879 

786嵌入主机如[Claude Desktop](/docs/zh-CN/desktop)可以通过 SDK `managedSettings` 选项提供策略。[来自嵌入主机的父设置](/docs/zh-CN/managed-settings#parent-settings-from-embedding-hosts)说明 Claude Code 何时应用它,[限制父设置](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)列出哪些允许方向设置仍然适用而不需要 `allowManaged*Only` 锁。880嵌入主机(如[Claude Desktop](/docs/zh-CN/desktop))可以通过 SDK `managedSettings` 选项提供策略。[来自嵌入主机的父设置](/docs/zh-CN/managed-settings#parent-settings-from-embedding-hosts)说明 Claude Code 何时应用它,[限制父设置](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)列出哪些允许方向设置仍然适用而不需要 `allowManaged*Only` 锁。

787 881 

788网关策略适用于机器上的每个 Claude Code 调用,包括非交互式 `claude -p` 运行和由 Agent SDK 生成的会话。如果网关在启动时无法访问,已登录的会话以错误退出,而不是在没有其策略的情况下运行。882网关策略适用于机器上的每个 Claude Code 调用,包括非交互式 `claude -p` 运行和由 Agent SDK 生成的会话。如果网关在启动时无法访问,已登录的会话退出并出现错误,而不是在没有其策略的情况下运行。

789 883 

790<h3 id="telemetry">884<h3 id="telemetry">

791 `telemetry`885 `telemetry`


793 887 

794CLI 将指标、日志和(启用时)跟踪发送到网关,网关将它们逐字中继到每个配置的目的地。导出使用 OpenTelemetry Protocol (OTLP) over HTTP。要跳过中继并让会话直接导出到您的收集器,[在策略中命名收集器](#export-directly-to-your-collector)。请参阅[监控使用](/docs/zh-CN/monitoring-usage)了解 CLI 发出的指标和事件。888CLI 将指标、日志和(启用时)跟踪发送到网关,网关将它们逐字中继到每个配置的目的地。导出使用 OpenTelemetry Protocol (OTLP) over HTTP。要跳过中继并让会话直接导出到您的收集器,[在策略中命名收集器](#export-directly-to-your-collector)。请参阅[监控使用](/docs/zh-CN/monitoring-usage)了解 CLI 发出的指标和事件。

795 889 

796CLI 使用从网关颁发的 JWT 读取的已认证用户的身份为每个导出加盖时间戳:`user.id`、`user.email` 和 `user.groups` 属性。每个开发者的成本和使用归属因此无需开发者端配置即可工作。890CLI 使用从网关颁发的 JWT 读取的已认证用户的身份为每个导出加盖时间戳:`user.id`、`user.email` 和 `user.groups` 属性。因此,每个开发者的成本和使用归属无需开发者端配置即可工作。

797 891 

798[Claude Desktop](#claude-desktop-overlay) 和通过网关登录的 Cowork 会话使用 `user.email` 和 `user.groups` 以及 `enduser.id` 为其遥测加盖时间戳,因此您可以使用一个关于 `user.email` 或 `user.groups` 的查询覆盖终端、Desktop 和 Cowork 使用。`user.groups` 是逗号分隔的 IdP 组列表。892[Claude Desktop](#claude-desktop-overlay) 和通过网关登录的 Cowork 会话使用 `user.email` 和 `user.groups` 以及 `enduser.id` 为其遥测加盖时间戳,因此您可以使用一个关于 `user.email` 或 `user.groups` 的查询覆盖终端、Desktop 和 Cowork 使用。`user.groups` 是逗号分隔的 IdP 组列表。

799 893 

800与来自 Claude Code 的所有 OpenTelemetry 数据一样,这些属性仅转到您的组织配置的目的地,从不转到 Anthropic。894Desktop 和 Cowork 遥测也携带 `enduser.sub`,您的身份提供商为用户颁发的 `sub` 声明,当用户的电子邮件更改时保持不变。终端会话在 `user.id` 下加盖相同的值,因此与终端 `user.id` 匹配 `enduser.sub` 的查询涵盖一个用户的终端、Desktop 和 Cowork 使用。在 Desktop 和 Cowork 导出上,`user.id` 是匿名标识符,而不是主体。

895 

896像来自 Claude Code 的所有 OpenTelemetry 数据一样,这些属性仅转到您的组织配置的目的地,从不转到 Anthropic。

897 

898如果用户的组列表在百分比编码后长于 255 个字符,或组名包含逗号或等号,网关会从该用户的 Desktop 和 Cowork 遥测中省略 `user.groups`,而不是截断它。该用户的终端会话仍然携带完整列表。

801 899 

802如果用户的组列表在百分比编码后长于 255 个字符,或组名包含逗号或等号,网关从该用户的 Desktop 和 Cowork 遥测中省略 `user.groups`,而不是截断它。该用户的终端会话仍然携带完整列表。900当主体在百分比编码后长于 255 个字符,或包含空格、可打印 ASCII 外的字符或 `,` `;` `=` `\` `"` `%` 之一时,网关会省略 `enduser.sub`。该用户的 Desktop 和 Cowork 遥测保留其他属性。

803 901 

804您需要网关服务器上的 Claude Code v2.1.265 或更高版本才能在 Desktop 和 Cowork 遥测上获得 `user.email` 和 `user.groups`,以及每个开发者机器上的 Claude Desktop 1.24012 或更高版本才能获得 `user.groups`。902您需要网关服务器上的 Claude Code v2.1.265 或更高版本才能在 Desktop 和 Cowork 遥测上获得 `user.email` 和 `user.groups`,以及每个开发者机器上的 Claude Desktop 1.24012 或更高版本才能获得 `user.groups`。

805 903 

904您需要网关服务器上的 Claude Code v2.1.274 或更高版本才能获得 `enduser.sub`。

905 

806```yaml theme={null}906```yaml theme={null}

807telemetry:907telemetry:

808 forward_to:908 forward_to:

809 - url: https://otel-collector.internal.example.com909 - url: https://otel-collector.internal.example.com

810 headers:910 headers:

811 Authorization: ${OTLP_TOKEN}911 Authorization: ${OTLP_TOKEN}

812 # Per-signal opt-in. Default: metrics only.912 # 每个信号选择加入。默认:仅指标。

813 metrics: true913 metrics: true

814 logs: false914 logs: false

815 traces: false915 traces: false


821<Warning>921<Warning>

822 每个目的地独立选择加入 `metrics`、`logs` 和 `traces`,默认仅为指标。信号的敏感性不同:922 每个目的地独立选择加入 `metrics`、`logs` 和 `traces`,默认仅为指标。信号的敏感性不同:

823 923 

824 * **指标**:聚合计数器,如令牌计数、请求计数和延迟924 * **指标**:聚合计数器,例如令牌计数、请求计数和延迟

825 * **日志和跟踪**:可以携带完整的 Bash 命令、工具输入和文件路径,涵盖 Claude Code 在开发者机器上所做的任何事情925 * **日志和跟踪**:可以携带完整的 Bash 命令、工具输入和文件路径,涵盖 Claude Code 在开发者机器上所做的任何事情

826 926 

827 仅在具有该数据保证的访问控制和保留策略的目的地启用日志和跟踪。927 仅在具有该数据保证的访问控制和保留策略的目的地启用日志和跟踪。


829 929 

830每个 `forward_to` URL 必须使用 `https://`,有一个例外是网关自己的环回接口上的收集器:930每个 `forward_to` URL 必须使用 `https://`,有一个例外是网关自己的环回接口上的收集器:

831 931 

832* `http://localhost:<port>` 通过配置验证,但[SSRF 防护](/docs/zh-CN/claude-apps-gateway-deploy#threat-model-summary)阻止每个导出带有 `ECONNREFUSED_SSRF`,除非您在网关的环境中设置 `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`932* `http://localhost:<port>` 通过配置验证,但[SSRF 防护](/docs/zh-CN/claude-apps-gateway-deploy#threat-model-summary)除非您在网关的环境中设置 `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`,否则阻止每个导出为 `ECONNREFUSED_SSRF`

833* `http://127.0.0.1:<port>` 或 `http://[::1]:<port>` 在启动时失败,除非设置了该变量933* `http://127.0.0.1:<port>` 或 `http://[::1]:<port>` 除非设置该变量,否则启动失败

934 

935对于集群内收集器,在其自己的内部地址上通过 HTTPS 公开它,或将其作为设置了变量的 sidecar 运行。

936 

937当设置 `HTTPS_PROXY` 时,网关通过该代理发送导出。

938 

939要直接到达内部收集器,通过主机名或带有前导点的域(如 `.internal.example.com`)将其添加到 `NO_PROXY`,这需要网关服务器上的 Claude Code v2.1.277 或更高版本。确保网关可以在没有代理的情况下到达收集器。没有前导点的条目仅匹配该确切名称,不匹配其下的名称。CIDR 范围不匹配。

834 940 

835对于集群内收集器,在其自己的内部地址上通过 HTTPS 公开它,或将其作为侧车运行并设置变量。941启用[仅代理出口](#proxy-only-egress)后,改为在代理中允许收集器,因为任何 `NO_PROXY` 条目都会关闭仅代理出口。

836 942 

837遥测在 CLI 中默认关闭。当您同时设置 `telemetry.forward_to` 和 `listen.public_url` 时,网关通过 `/managed/settings` 推送六个环境变量为连接的客户端打开它:943遥测在 CLI 中默认关闭。当您同时设置 `telemetry.forward_to` 和 `listen.public_url` 时,网关通过 `/managed/settings` 推送六个环境变量为连接的客户端打开它:

838 944 


850* **本地设置的变量**:Claude Code 在托管层应用推送的变量,因此每个变量覆盖开发者为其本地设置的值。956* **本地设置的变量**:Claude Code 在托管层应用推送的变量,因此每个变量覆盖开发者为其本地设置的值。

851* **本地配置的端点**:启用 OTLP/HTTP 导出后,CLI 忽略任何本地配置的端点,无论网关是否推送了遥测变量。其导出转到网关,除非策略[将您的收集器命名为端点](#export-directly-to-your-collector)。957* **本地配置的端点**:启用 OTLP/HTTP 导出后,CLI 忽略任何本地配置的端点,无论网关是否推送了遥测变量。其导出转到网关,除非策略[将您的收集器命名为端点](#export-directly-to-your-collector)。

852 958 

853没有信号的 `forward_to` 目的地,网关接受并丢弃它。如果开发者已经将 Claude Code 遥测导出到您的一个收集器,将其添加为 `forward_to` 目的地,如果他们导出这些,启用日志或跟踪,以便在他们登录后继续接收他们的数据。要跳过中继,[在策略中命名收集器](#export-directly-to-your-collector)。959没有信号的 `forward_to` 目的地,网关接受并丢弃它。如果开发者已经将 Claude Code 遥测导出到您的一个收集器,将其添加为 `forward_to` 目的地,如果他们导出这些,则启用日志或跟踪,以便在他们登录后继续接收其数据。要跳过中继,改为[在策略中命名收集器](#export-directly-to-your-collector)。

854 960 

855[跟踪](/docs/zh-CN/monitoring-usage#traces-beta)也需要每个客户端上的 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`。在托管策略的 `env` 块中设置它,因为网关不推送它。开发者在推送端点已经触发的相同[安全批准对话框](#managed)中批准它。961[跟踪](/docs/zh-CN/monitoring-usage#traces-beta)也需要每个客户端上的 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`。在托管策略的 `env` 块中设置它,因为网关不推送它。开发者在推送端点已经触发的相同[安全批准对话框](#managed)中批准它。

856 962 

857仅在您想要跟踪的组的策略中将其设置为 `1`。不设置它的策略从您的 `match: {}` 捕获所有策略继承值(如果该策略设置一个),根据[合并规则](#managed)。要防止组的客户端发送跟踪,即使开发者在本地设置变量,在该组的策略中将其设置为 `0`。963仅在您想要跟踪的组的策略中将其设置为 `1`。不设置它的策略从您的 `match: {}` 全部捕获策略继承值(如果该策略设置一个),根据[合并规则](#managed)。要防止组的客户端发送跟踪,即使开发者在本地设置变量,在该组的策略中将其设置为 `0`。

858 964 

859Protobuf 和 JSON OTLP 编码都被中继,任何 OpenTelemetry 兼容的后端都可以作为目的地。965Protobuf 和 JSON OTLP 编码都被中继,任何 OpenTelemetry 兼容的后端都可以作为目的地。

860 966 


862 直接导出到您的收集器968 直接导出到您的收集器

863</h4>969</h4>

864 970 

865要让通过 `/login` 登录的会话直接将遥测发送到您的收集器而不是通过中继,在[托管策略](#managed)的 `env` 块中将 `OTEL_EXPORTER_OTLP_ENDPOINT` 设置为收集器的 `https://` 基础 URL。Claude Code 将 `/v1/metrics`、`/v1/logs` 或 `/v1/traces` 附加到您设置的 URL,如 `https://otel-collector.example.com:4318`,并通过 OTLP/HTTP 在那里导出每个信号。需要每个开发者机器上的 Claude Code v2.1.265 或更高版本。早期客户端通过中继导出。971要让通过 `/login` 登录的会话直接将遥测发送到您的收集器而不是通过中继,在[托管策略](#managed)的 `env` 块中将 `OTEL_EXPORTER_OTLP_ENDPOINT` 设置为收集器的 `https://` 基础 URL。Claude Code 将 `/v1/metrics`、`/v1/logs` 或 `/v1/traces` 附加到您设置的 URL,例如 `https://otel-collector.example.com:4318`,并通过 OTLP/HTTP 在那里导出每个信号。需要每个开发者机器上的 Claude Code v2.1.265 或更高版本。早期客户端通过中继导出。

866 972 

867要向收集器进行身份验证,在同一 `env` 块中设置 `OTEL_EXPORTER_OTLP_HEADERS`。会话从不将开发者的网关会话令牌发送到以这种方式命名的收集器。973要向收集器进行身份验证,在同一 `env` 块中设置 `OTEL_EXPORTER_OTLP_HEADERS`。会话从不将开发者的网关会话令牌发送到以这种方式命名的收集器。

868 974 

869当您在策略中添加或更改此端点时,Claude Code 在[安全批准对话框](#managed)中要求每个开发者批准它,然后在交互式会话中应用它。975当您在策略中添加或更改此端点时,Claude Code 在应用它于交互式会话之前要求每个开发者在[安全批准对话框](#managed)中批准它。

870 976 

871Claude Code 在导出信号之前检查端点,并在检查失败时将该信号保留在中继上。检查包括:977Claude Code 在直接导出信号之前检查端点,当检查失败时将该信号保留在中继上。检查包括:

872 978 

873* 端点来自网关本身。如果您在 MDM 配置文件或本地 `managed-settings.json` 中设置相同的变量,导出保留在中继上。979* 端点来自网关本身。如果您在 MDM 配置文件或本地 `managed-settings.json` 中设置相同的变量,导出保留在中继上。

874* URL 使用 `https://`,或 `http://` 到环回地址980* URL 使用 `https://`,或 `http://` 到环回地址

875* URL 解析为以 `/v1/<signal>` 结尾的路径,没有查询或片段。Claude Code 从通用变量本身构建该路径。它使用每个信号变量如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` 的写法,因此在那里包括完整路径。981* URL 解析为以 `/v1/<signal>` 结尾的路径,没有查询或片段。Claude Code 自己从通用变量构建该路径。它使用每个信号变量(如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`)按原样编写,因此在那里包括完整路径。

876* URL 不是网关自己的主机。寻址到网关的端点保留中继路径及其会话令牌。982* URL 不是网关自己的主机。寻址到网关的端点保留中继路径及其会话令牌。

877* 您和开发者都没有在任何设置源中配置 [`otelHeadersHelper`](/docs/zh-CN/settings-reference#otelheadershelper)。配置了助手,每个信号保留在中继上。983* 您和开发者都没有在任何设置来源中配置 [`otelHeadersHelper`](/docs/zh-CN/settings-reference#otelheadershelper)。配置了助手,每个信号保留在中继上。

878 984 

879您命名的端点仅改变导出的去向。您仍然使用 `OTEL_*_EXPORTER` 选择器选择哪些信号导出。985您命名的端点仅改变导出的去向。您仍然使用 `OTEL_*_EXPORTER` 选择器选择哪些信号导出。

880 986 

881端点本身不打开导出,因此也设置执行此操作的变量,除非网关已经推送它们:987端点单独不打开导出,因此也设置执行此操作的变量,除非网关已经推送它们:

882 988 

883* 如果网关已经[推送遥测变量](#telemetry),它们涵盖启用、选择器和协议,您的显式端点覆盖推送的 `<public_url>` 值。仅对于没有 `forward_to` 目的地启用的信号,自己设置 `OTEL_*_EXPORTER` 选择器为 `otlp`。989* 如果网关已经[推送遥测变量](#telemetry),它们涵盖启用、选择器和协议,您的显式端点覆盖推送的 `<public_url>` 值。仅为网关不推送的信号自己设置 `OTEL_*_EXPORTER` 选择器为 `otlp`。

884* 如果它没有,也设置 `CLAUDE_CODE_ENABLE_TELEMETRY=1`、`OTEL_*_EXPORTER` 选择器和 `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`。990* 如果它没有,也设置 `CLAUDE_CODE_ENABLE_TELEMETRY=1`、`OTEL_*_EXPORTER` 选择器和 `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`。

885 991 

886当开发者登出或登入不同的网关时,对收集器的导出停止,Claude Code 删除每个剩余批次而不是发送它。992当开发者登出或登入不同的网关时,对收集器的导出停止,Claude Code 删除每个剩余批次而不是发送它。


889 当目的地失败时995 当目的地失败时

890</h4>996</h4>

891 997 

892网关不缓冲、重试或存储遥测,因此它删除未到达目的地的导出而不是晚期交付它。每个目的地独立成功或失败,导出客户端无论如何都收到成功响应,因此失败的交付仅在网关的日志中出现。998网关不缓冲、重试或存储遥测,因此它删除未到达目的地的导出而不是晚期交付它。每个目的地独立成功或失败,导出客户端无论如何都收到成功响应,因此失败的交付仅出现在网关的日志中。

893 999 

894在对目的地的五次连续失败交付后,网关在 30 秒的拉伸中暂停转发到它,记录每个暂停,直到交付成功。任何错误响应、超时或连接错误都计为失败的交付,除了 `400`、`413`、`415`、`422` 和 `431`,这意味着收集器拒绝了该导出的有效负载为格式错误或太大。1000在五次连续失败交付到目的地后,网关在 30 秒拉伸中暂停转发到它,记录每个暂停,直到交付成功。任何错误响应、超时或连接错误都计为失败交付,除了 `400`、`413`、`415`、`422` 和 `431`,这意味着收集器拒绝该导出的有效负载为格式错误或太大。

895 1001 

896被拒绝的有效负载既不推进也不重置失败计数:网关继续转发到目的地并记录命名它和状态的警告,在目的地的第一次拒绝和之后每一百次。1002拒绝的有效负载既不推进也不重置失败计数:网关继续转发到目的地并记录警告,命名它和状态,在目的地的第一次拒绝和之后每一百次。

897 1003 

898<h3 id="http-tuning">1004<h3 id="http-tuning">

899 HTTP 调整1005 HTTP 调整

900</h3>1006</h3>

901 1007 

902四个可选的顶级块,`access_control`、`limits`、`timeouts` 和 `rate_limits`,调整 HTTP 表面。默认值适合大多数部署。1008四个可选的顶级块 `access_control`、`limits`、`timeouts` 和 `rate_limits` 调整 HTTP 表面。默认值适合大多数部署。

903 1009 

904| 块 | 键 | 默认 | 描述 |1010| 块 | 键 | 默认 | 描述 |

905| ---------------- | ---------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1011| ---------------- | ---------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

906| `access_control` | `allow_cidrs` / `deny_cidrs` | 空 | 入站 IP 允许/拒绝按客户端地址,在 `trusted_proxies` 解析后。`deny_cidrs` 首先检查;与它匹配的客户端被拒绝,即使 `allow_cidrs` 也匹配。如果 `allow_cidrs` 非空,网关是默认拒绝。`/healthz` 和 `/readyz` 免除 `allow_cidrs`。当受信任的代理发送不是 IP 地址的 `X-Forwarded-For` 条目时,真实客户端未知,网关记录一次警告,命名要检查的内容。其中任一列表适用于请求的地方,它以 `403` 和审计原因 `xff_unparseable` 拒绝它。其中都不适用的地方,它提供请求并使用代理自己的地址作为每 IP 速率限制和审计的客户端 IP。 |1012| `access_control` | `allow_cidrs` / `deny_cidrs` | 空 | 入站 IP 允许/拒绝按客户端地址,在 `trusted_proxies` 解析后。`deny_cidrs` 首先检查;与它匹配的客户端被拒绝,即使 `allow_cidrs` 也匹配。如果 `allow_cidrs` 非空,网关是默认拒绝。`/healthz` 和 `/readyz` 免除 `allow_cidrs`。当受信任的代理发送不是 IP 地址的 `X-Forwarded-For` 条目时,真实客户端未知,网关记录一次警告,命名要检查的内容。其中任一列表适用于请求,它以 `403` 和审计原因 `xff_unparseable` 拒绝它。其中都不适用,它提供请求并使代理自己的地址用作客户端 IP,用于每 IP 速率限制和审计。 |

907| `limits` | `max_request_bytes` | 32 MiB | 最大入站请求体;超大请求在缓冲体之前获得 `413`。为大文件或图像请求提高。 |1013| `limits` | `max_request_bytes` | 32 MiB | 最大入站请求体;超大请求在缓冲体之前获得 `413`。为大文件或图像请求提高。 |

908| `limits` | `max_request_header_bytes` | 未设置 | 设置时,超大标头返回 `431` |1014| `limits` | `max_request_header_bytes` | 未设置 | 设置时,超大标头返回 `431` |

909| `limits` | `max_url_length` | 未设置 | 设置时,过长 URL 返回 `414` |1015| `limits` | `max_url_length` | 未设置 | 设置时,过长 URL 返回 `414` |

910| `timeouts` | `upstream_ttfb_ms` | 120000 | 等待上游响应标头的最大时间(首字节时间)。响应体然后流式传输,没有墙钟上限。适用于直接 Anthropic 上游路径;每个其他提供商由其提供商 SDK 自己的超时限制。 |1016| `timeouts` | `upstream_ttfb_ms` | 120000 | 等待上游响应标头(首字节时间)的最大时间。响应体随后以无墙钟上限流式传输。适用于直接 Anthropic 上游路径;在每个其他提供商上,网关等待最多一小时以使响应开始。 |

911| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | 未认证设备授权端点上的每 IP 速率限制。为共享出口 IP 或 NAT 后面的大型组织提高。这些限制仅适用于设备授权登录流,不适用于 `/v1/messages` 推理。请参阅[用户代码暴力破解抵抗](/docs/zh-CN/claude-apps-gateway-deploy#user-code-brute-force-resistance)。 |1017| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | 未认证设备授权端点上的每 IP 速率限制。为共享出口 IP 或 NAT 后面的大型组织提高。[大型推出](/docs/zh-CN/claude-apps-gateway-deploy#large-rollouts)显示如何调整大小。这些限制仅适用于设备授予登录流,不适用于 `/v1/messages` 推理。请参阅[用户代码暴力破解抵抗](/docs/zh-CN/claude-apps-gateway-deploy#user-code-brute-force-resistance)。 |

912| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | `/device` 上 `user_code` 提交的每 IP 速率限制 |1018| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | `/device` 上 `user_code` 提交的每 IP 速率限制。这是阻止某人猜测另一个开发者代码的原因。[大型推出](/docs/zh-CN/claude-apps-gateway-deploy#large-rollouts)显示提高多远。 |

913 1019 

914如果您将两个 `access_control` 列表都留空,这是默认值,网关为任何客户端地址提供服务,因此只有您的网络限制谁可以到达它。这很重要,因为网关可以推送[托管设置](#managed),在开发者机器上运行命令。1020如果您将两个 `access_control` 列表都留空,这是默认值,网关为任何客户端地址提供服务,因此仅您的网络限制谁可以到达它。这很重要,因为网关可以推送[托管设置](#managed),在开发者机器上运行命令。

915 1021 

916虽然 `allow_cidrs` 为空,网关在两个地方警告,不改变它如何回答任何请求:1022虽然 `allow_cidrs` 为空,网关在两个地方警告,不改变它如何回答任何请求:

917 1023 

918* **在启动时**:操作日志中的警告建议仅允许私有范围 `10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16`、`100.64.0.0/10`、`127.0.0.0/8`、`::1/128` 和 `fc00::/7`,加上您的开发者连接的任何其他内部范围。如果您将网关绑定到环回地址并既不设置 `trusted_proxies` 也不设置 `public_url`,如在本地开发中,警告不出现。1024* **在启动时**:操作日志中的警告建议仅允许私有范围 `10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16`、`100.64.0.0/10`、`127.0.0.0/8`、`::1/128` 和 `fc00::/7`,加上您的开发者连接的任何其他内部范围。如果您将网关绑定到环回地址并既不设置 `trusted_proxies` 也不设置 `public_url`,如在本地开发中,警告不出现。

919* **在运行时**:第一次请求从这些私有范围之外的地址到达时,网关记录警告并发出携带客户端 IP 的 [`access.public_client` 审计事件](/docs/zh-CN/claude-apps-gateway-deploy#logs)。两者每个进程触发一次。链接本地地址,`169.254.0.0/16` 和 `fe80::/10`,不计为公共。网关在此检查运行之前回答 `/healthz` 和 `/readyz`,因此来自公共范围的健康探针不触发它。1025* **在运行时**:第一次请求从私有范围外的地址到达时,网关记录警告并发出 [`access.public_client` 审计事件](/docs/zh-CN/claude-apps-gateway-deploy#logs),携带客户端 IP。两者每个进程触发一次。链接本地地址 `169.254.0.0/16` 和 `fe80::/10` 不计为公共。网关在此检查运行之前回答 `/healthz` 和 `/readyz`,因此来自公共范围的健康探针不触发它。

920 1026 

921两个信号都使用网关解析的客户端地址。如果负载均衡器、端口转发或隧道中继流量且未列在 `listen.trusted_proxies` 中,网关看到中继的地址,通常是私有的,因此既不是运行时警告也不是私有允许列表捕获通过它中继的流量。1027两个信号都使用网关解析的客户端地址。如果负载均衡器、端口转发或隧道中继流量且未在 `listen.trusted_proxies` 中列出,网关看到中继的地址,通常是私有的,因此既不是运行时警告也不是私有允许列表捕获通过它中继的流量。

922 1028 

923在这样的前端后面,首先设置 [`listen.trusted_proxies`](#listen),以便网关看到真实的客户端地址,并保持网关和它前面的所有东西从公共互联网无法访问,无论如何。1029在这样的前端后面,首先设置 [`listen.trusted_proxies`](#listen),以便网关看到真实客户端地址,并保持网关和其前面的所有东西从公共互联网无法访问,无论如何。

1030 

1031<h3 id="load_test_mode">

1032 `load_test_mode`

1033</h3>

1034 

1035`load_test_mode` 块让您在不调用模型提供商的情况下对网关进行负载测试。启用它时,网关像往常一样构建和签署每个提供商请求,丢弃它而不是发送它,并通过其正常响应路径流式传输罐装回复。回复是填充文本,以说明它是罐装的句子开头。

1036 

1037需要 v2.1.283 或更高版本。早期版本在设置键时拒绝启动,因此在添加块之前升级每个副本,并在回滚之前删除它。

1038 

1039下面的示例以默认值打开模式,回复为 750 个输出令牌,在大约 10 秒内流式传输:

1040 

1041```yaml theme={null}

1042load_test_mode:

1043 enabled: true

1044 reply_tokens: 750 # 大约每个罐装回复携带多少令牌的文本

1045 reply_seconds: 9.5 # 流式回复需要多长时间

1046```

1047 

1048| 字段 | 必需 | 描述 |

1049| --------------- | -- | ----------------------------------------------------------- |

1050| `enabled` | 是 | `true` 打开模式。`false` 在模式关闭的情况下将您的数字保留在文件中。如果块存在而没有它,网关拒绝启动。 |

1051| `reply_tokens` | 否 | 默认 `750`。大约每个罐装回复携带多少令牌的文本,从 1 到 100000 的整数。 |

1052| `reply_seconds` | 否 | 默认 `9.5`。流式回复需要多长时间,从 0 到 600。`0` 一次发送整个回复。对非流式请求的回复总是一次返回。 |

1053 

1054此模式下的负载测试涵盖网关、您的 Postgres 和网关前面的所有内容。它不涵盖提供商的限制、速度或网络路径。

1055 

1056启用模式时,请求可以携带 `x-load-test-user` 标头,保存最多七位数的整数,网关将每个数字计为具有请求附带的令牌的开发者的电子邮件和组的单独开发者。为负载测试部署提供自己的空数据库,因为网关拒绝在任何开发者已经花费任何东西的数据库中启动模式。

1057 

1058<Warning>

1059 永远不要为开发者使用的网关打开此功能。每个请求都获得罐装回复,没有模型被调用。网关在启动时记录 `load_test_mode is on` 警告,并在模式启用时使用 `load_test: true` 标记每个 `inference` [审计事件](/docs/zh-CN/claude-apps-gateway-deploy#logs)。

1060</Warning>

924 1061 

925<h2 id="complete-example">1062<h2 id="complete-example">

926 完整示例1063 完整示例


973store:1110store:

974 postgres_url: ${GATEWAY_POSTGRES_URL}1111 postgres_url: ${GATEWAY_POSTGRES_URL}

975 # max_connections: 51112 # max_connections: 5

1113 # connect_timeout_seconds: 5

976 1114 

977# 启用 /v1/organizations/spend_limits(镜像 Anthropic Admin API)1115# 启用 /v1/organizations/spend_limits(镜像 Anthropic Admin API)

978# 和 /v1/messages 上的每开发者支出强制。省略以禁用。1116# 和 /v1/messages 上的每开发者支出强制。省略以禁用。

Details

219* **[支出限制执行](/docs/zh-CN/claude-apps-gateway-spend-limits#postgres-availability)**:在中断期间默认失败开放,因此推理仍然流动;如果您宁愿阻止而不是无计量运行,将其翻转为失败关闭219* **[支出限制执行](/docs/zh-CN/claude-apps-gateway-spend-limits#postgres-availability)**:在中断期间默认失败开放,因此推理仍然流动;如果您宁愿阻止而不是无计量运行,将其翻转为失败关闭

220* **就绪**:`/readyz` 在中断期间报告未就绪,因此在就绪上门控流量的编排器一次从轮换中移除每个副本。在该拓扑中,所有流量,包括网关仍然可以提供的推理,在负载均衡器处失败,直到 Postgres 恢复。`/healthz` 上的活跃探针继续通过,因此副本不会重新启动。如果您宁愿已登录的开发者在存储中断期间继续工作,将就绪探针指向 `/healthz`;成本是新登录失败,反对仍然报告就绪的副本。220* **就绪**:`/readyz` 在中断期间报告未就绪,因此在就绪上门控流量的编排器一次从轮换中移除每个副本。在该拓扑中,所有流量,包括网关仍然可以提供的推理,在负载均衡器处失败,直到 Postgres 恢复。`/healthz` 上的活跃探针继续通过,因此副本不会重新启动。如果您宁愿已登录的开发者在存储中断期间继续工作,将就绪探针指向 `/healthz`;成本是新登录失败,反对仍然报告就绪的副本。

221 221 

222如果您的 IdP 宕机,现有会话工作直到 `ttl_hours`,新登录和刷新失败。如果您的 IdP 有频繁的维护窗口,设置更长的 `ttl_hours`。222如果您的 IdP 宕机,现有会话工作直到 `ttl_hours`,新登录失败,会话刷新获得重试答案并在 IdP 恢复后进行一次。如果您的 IdP 有频繁的维护窗口,设置更长的 `ttl_hours`。

223 223 

224<h3 id="jwt-secret-rotation">224<h3 id="jwt-secret-rotation">

225 JWT 密钥轮换225 JWT 密钥轮换

Details

282 282 

283每个会话显示一个 diff 指示器,显示添加和删除的行数,如 `+42 -18`。选择它以打开 diff 视图,在特定行上留下内联评论,并使用你的下一条消息将它们发送给 Claude。283每个会话显示一个 diff 指示器,显示添加和删除的行数,如 `+42 -18`。选择它以打开 diff 视图,在特定行上留下内联评论,并使用你的下一条消息将它们发送给 Claude。

284 284 

285diff 视图默认将会话的更改与其基础分支进行比较。要与存储库中的任何其他分支进行比较,请选择 **Compare against** 并选择一个分支。

286 

285Claude Code 从原始 git blob 内容计算这些 diffs,包括 Claude 编辑时显示的每个文件 diffs,所以存储库中配置的 diff 驱动程序和 `textconv` 过滤器不适用。对于不是会话自己的检出之一的存储库中的文件,如在会话期间克隆到工作区内的文件,每个文件 diff 显示 Claude 的编辑本身,而不是 git 比较。287Claude Code 从原始 git blob 内容计算这些 diffs,包括 Claude 编辑时显示的每个文件 diffs,所以存储库中配置的 diff 驱动程序和 `textconv` 过滤器不适用。对于不是会话自己的检出之一的存储库中的文件,如在会话期间克隆到工作区内的文件,每个文件 diff 显示 Claude 的编辑本身,而不是 git 比较。

286 288 

287有关完整演练(包括 PR 创建),请参阅[审查和迭代](/docs/zh-CN/web-quickstart#review-and-iterate)。要让 Claude 自动监控 PR 以查找 CI 失败和审查评论,请参阅[自动修复拉取请求](#auto-fix-pull-requests)。289有关完整演练(包括 PR 创建),请参阅[审查和迭代](/docs/zh-CN/web-quickstart#review-and-iterate)。要让 Claude 自动监控 PR 以查找 CI 失败和审查评论,请参阅[自动修复拉取请求](#auto-fix-pull-requests)。

Details

1451浏览器涵盖您创作和编辑的文件。一些相关文件位于其他位置:1451浏览器涵盖您创作和编辑的文件。一些相关文件位于其他位置:

1452 1452 

1453| 文件 | 位置 | 用途 |1453| 文件 | 位置 | 用途 |

1454| ----------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1454| ----------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1455| `managed-settings.json` | 系统级别,因操作系统而异 | 企业强制执行的设置,您无法覆盖,除了[狭窄的例外](/docs/zh-CN/settings#security-keys-where-the-stricter-value-applies)。请参阅[保存文件的位置](/docs/zh-CN/managed-settings#deploy-a-managed-settings-file)和[Claude Code 使用的托管源](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)。 |1455| `managed-settings.json` | 系统级别,因操作系统而异 | 企业强制执行的设置,您无法覆盖,除了[狭窄的例外](/docs/zh-CN/settings#security-keys-where-the-stricter-value-applies)。请参阅[保存文件的位置](/docs/zh-CN/managed-settings#deploy-a-managed-settings-file)和[Claude Code 使用的托管源](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)。 |

1456| `CLAUDE.local.md` | 项目根目录 | 您对此项目的私人偏好,与 CLAUDE.md 一起加载。手动创建它并将其添加到 `.gitignore`。 |1456| `CLAUDE.local.md` | 项目根目录 | 您对此项目的私人偏好,与 CLAUDE.md 一起加载。手动创建它并将其添加到 `.gitignore`。 |

1457| `AGENTS.md` | 项目根目录、`.claude/` 或任何目录 | 您为 AI 编码代理编写的项目说明。Claude Code 可以[自行加载它](/docs/zh-CN/memory#agents-md)或与 `CLAUDE.md` 一起加载。 |1457| `AGENTS.md` | 项目根目录、`.claude/` 或任何目录 | 您为 AI 编码代理编写的项目说明。Claude Code 可以[自行加载它](/docs/zh-CN/memory#agents-md)或与 `CLAUDE.md` 一起加载。 |

1458| 已安装的 plugins | `~/.claude/plugins` | 克隆的市场、已安装的 plugin 版本、`installed_plugins.json` 安装记录和每个 plugin 的数据,由 `claude plugin` 命令管理。从您的 claude.ai 账户[同步的 plugins](/docs/zh-CN/plugins-reference#synced-plugins) 下载到 `~/.claude/plugins/synced/`。对于从市场[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)以链接模式安装的 plugin,Claude Code 在此处存储链接而不是副本,plugin 的文件保留在命令打印的目录中。`command` 源需要 Claude Code v2.1.229 或更高版本。本地目录市场中按相对路径列出的 plugin 也会[从其源目录就地加载](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution),而不是从缓存副本加载。请参阅 [plugin 缓存](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)了解孤立版本如何被清理。 |1458| 已安装的 plugins | `~/.claude/plugins` | 克隆的市场、已安装的 plugin 版本、`installed_plugins.json` 安装记录和每个 plugin 的数据,由 `claude plugin` 命令管理。从您的 claude.ai 账户[同步的 plugins](/docs/zh-CN/plugins/loading#synced-plugins) 下载到 `~/.claude/plugins/synced/`。对于从市场[`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)以链接模式安装的 plugin,Claude Code 在此处存储链接而不是副本,plugin 的文件保留在命令打印的目录中。`command` 源需要 Claude Code v2.1.229 或更高版本。本地目录市场中按相对路径列出的 plugin 也会[从其源目录就地加载](/docs/zh-CN/plugins/loading#find-plugins-on-disk),而不是从缓存副本加载。请参阅 [plugin 缓存](/docs/zh-CN/plugins/loading#find-plugins-on-disk)了解孤立版本如何被清理。 |

1459 1459 

1460`~/.claude` 还保存 Claude Code 在您工作时写入的数据:记录、提示历史、文件快照、缓存和日志。请参阅下面的[应用数据](#application-data)。1460`~/.claude` 还保存 Claude Code 在您工作时写入的数据:记录、提示历史、文件快照、缓存和日志。请参阅下面的[应用数据](#application-data)。

1461 1461 


1529| `output-styles/*.md` | `name`, `description`, `keep-coding-instructions`, `force-for-plugin` | [Output style frontmatter](/docs/zh-CN/output-styles#frontmatter) |1529| `output-styles/*.md` | `name`, `description`, `keep-coding-instructions`, `force-for-plugin` | [Output style frontmatter](/docs/zh-CN/output-styles#frontmatter) |

1530| `rules/*.md` | `paths` | [Rule frontmatter](/docs/zh-CN/memory#rules-frontmatter-reference) |1530| `rules/*.md` | `paths` | [Rule frontmatter](/docs/zh-CN/memory#rules-frontmatter-reference) |

1531 1531 

1532在 [plugin](/docs/zh-CN/plugins-reference#plugin-agent-frontmatter) 中提供的 Agents 遵守 subagent 字段的一个子集。1532在 [plugin](/docs/zh-CN/plugins/components#agents) 中提供的 Agents 遵守 subagent 字段的一个子集。

1533 1533 

1534<h2 id="troubleshoot-configuration">1534<h2 id="troubleshoot-configuration">

1535 排查配置问题1535 排查配置问题


1550Claude Code 删除下面路径中的文件,一旦它们的年龄超过 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays),只要它能安全地确定保留期。默认值为 30 天,最小值为 1;设置 `0` 会导致验证错误。相同的年龄截止值也适用于 [孤立 worktrees](/docs/zh-CN/worktrees#clean-up-subagent-and-background-session-worktrees) 的自动删除。1550Claude Code 删除下面路径中的文件,一旦它们的年龄超过 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays),只要它能安全地确定保留期。默认值为 30 天,最小值为 1;设置 `0` 会导致验证错误。相同的年龄截止值也适用于 [孤立 worktrees](/docs/zh-CN/worktrees#clean-up-subagent-and-background-session-worktrees) 的自动删除。

1551 1551 

1552| `~/.claude/` 下的路径 | 内容 |1552| `~/.claude/` 下的路径 | 内容 |

1553| ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1553| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1554| `projects/<project>/<session>.jsonl` | 完整的对话记录:每条消息、工具调用和工具结果 |1554| `projects/<project>/<session>.jsonl` | 完整的对话记录:每条消息、工具调用和工具结果 |

1555| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`、`projects/<project>/<session>.jsonl.superseded-<timestamp>` | 会话的先前记录,Claude Code 将其搁置而不是覆盖或删除它。它不会出现在会话选择器中 |1555| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`、`projects/<project>/<session>.jsonl.superseded-<timestamp>` | 会话的先前记录,Claude Code 将其搁置而不是覆盖或删除它。它不会出现在会话选择器中 |

1556| `projects/<project>/<session>/subagents/` | [Subagent](/docs/zh-CN/sub-agents) 对话记录,当父会话记录过期时被删除 |1556| `projects/<project>/<session>/subagents/` | [Subagent](/docs/zh-CN/sub-agents) 对话记录,当父会话记录过期时被删除 |


1568| `feedback-bundles/` | 由 `/feedback` 在第三方提供商上或当未配置 Anthropic 凭证时写入的编辑后的记录存档,用于发送到您的 Anthropic 账户团队 |1568| `feedback-bundles/` | 由 `/feedback` 在第三方提供商上或当未配置 Anthropic 凭证时写入的编辑后的记录存档,用于发送到您的 Anthropic 账户团队 |

1569| `feedback/drafts/` | 排队的 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),等待您在 `/feedback` 中审查。在 `cleanupPeriodDays` 或 30 天后扫除,以较短者为准。当队列达到其 10 个草稿的限制时,Claude Code 删除最旧的草稿以腾出空间。 |1569| `feedback/drafts/` | 排队的 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),等待您在 `/feedback` 中审查。在 `cleanupPeriodDays` 或 30 天后扫除,以较短者为准。当队列达到其 10 个草稿的限制时,Claude Code 删除最旧的草稿以腾出空间。 |

1570| `usage-data/` | `report.html` 和由 [`/insights`](/docs/zh-CN/costs#analyze-your-usage-patterns) 写入的时间戳报告副本,加上用于构建它们的缓存的每个会话分析数据 |1570| `usage-data/` | `report.html` 和由 [`/insights`](/docs/zh-CN/costs#analyze-your-usage-patterns) 写入的时间戳报告副本,加上用于构建它们的缓存的每个会话分析数据 |

1571| `skills/.trash/`、`plugins/.trash/` | [Skills](/docs/zh-CN/skills#how-synced-skills-behave) 和 [plugins](/docs/zh-CN/plugins-reference#synced-plugins),从 claude.ai 同步中删除,例如在您在 claude.ai 上关闭其中一个或停止同步后。文件保留在此处,以便您可以恢复它们,直到扫描删除它们 |1571| `skills/.trash/`、`plugins/.trash/` | [Skills](/docs/zh-CN/skills#how-synced-skills-behave) 和 [plugins](/docs/zh-CN/plugins/loading#synced-plugins),从 claude.ai 同步中删除,例如在您在 claude.ai 上关闭其中一个或停止同步后。文件保留在此处,以便您可以恢复它们,直到扫描删除它们 |

1572| `todos/`、`statsig/`、`logs/` | 来自旧版本的旧版目录。不再写入。扫描删除其内容,然后删除空目录。 |1572| `todos/`、`statsig/`、`logs/` | 来自旧版本的旧版目录。不再写入。扫描删除其内容,然后删除空目录。 |

1573 1573 

1574`sessions/` 中的会话文件、自动内存以及 Claude Desktop 和 Cowork 记录各自遵循自己的保留规则:1574`sessions/` 中的会话文件、自动内存以及 Claude Desktop 和 Cowork 记录各自遵循自己的保留规则:


1678您也可以手动删除上面的任何应用数据路径,除了 [state files to keep](#state-files-to-keep)。新会话不受影响。下表显示您对过去会话失去的内容。1678您也可以手动删除上面的任何应用数据路径,除了 [state files to keep](#state-files-to-keep)。新会话不受影响。下表显示您对过去会话失去的内容。

1679 1679 

1680| 删除 | 您失去 |1680| 删除 | 您失去 |

1681| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |1681| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |

1682| `~/.claude/projects/` | 恢复、继续和倒回过去的会话,以及每个项目的自动内存 |1682| `~/.claude/projects/` | 恢复、继续和倒回过去的会话,以及每个项目的自动内存 |

1683| `~/.claude/history.jsonl` | 向上箭头提示回忆、`Ctrl+R` 历史搜索和 `!` shell 命令补全 |1683| `~/.claude/history.jsonl` | 向上箭头提示回忆、`Ctrl+R` 历史搜索和 `!` shell 命令补全 |

1684| `~/.claude/paste-cache/` | 回忆的提示中的粘贴文本;请参阅 [paste large content](/docs/zh-CN/terminal-config#paste-large-content) |1684| `~/.claude/paste-cache/` | 回忆的提示中的粘贴文本;请参阅 [paste large content](/docs/zh-CN/terminal-config#paste-large-content) |


1692| `~/.claude/cache/changelog.md` | 无。在后台刷新。 |1692| `~/.claude/cache/changelog.md` | 无。在后台刷新。 |

1693| `~/.claude/policy-limits.json` | 无。自动刷新。 |1693| `~/.claude/policy-limits.json` | 无。自动刷新。 |

1694| `~/.claude/tasks/` | 恢复的会话会拾取的任务列表 |1694| `~/.claude/tasks/` | 恢复的会话会拾取的任务列表 |

1695| `~/.claude/skills/.trash/`、`~/.claude/plugins/.trash/` | 恢复 [synced skills](/docs/zh-CN/skills#how-synced-skills-behave) 和 [synced plugins](/docs/zh-CN/plugins-reference#synced-plugins) 的机会,Claude Code 已删除 |1695| `~/.claude/skills/.trash/`、`~/.claude/plugins/.trash/` | 恢复 [synced skills](/docs/zh-CN/skills#how-synced-skills-behave) 和 [synced plugins](/docs/zh-CN/plugins/loading#synced-plugins) 的机会,Claude Code 已删除 |

1696| `~/.claude/debug/`、`~/.claude/plans/`、`~/.claude/session-env/`、`~/.claude/shell-snapshots/`、`~/.claude/backups/` | 没有面向用户的内容 |1696| `~/.claude/debug/`、`~/.claude/plans/`、`~/.claude/session-env/`、`~/.claude/shell-snapshots/`、`~/.claude/backups/` | 没有面向用户的内容 |

1697| `~/.claude/todos/`、`~/.claude/statsig/`、`~/.claude/logs/`、`~/.claude/image-cache/` | 无。旧版目录不由当前版本写入。 |1697| `~/.claude/todos/`、`~/.claude/statsig/`、`~/.claude/logs/`、`~/.claude/image-cache/` | 无。旧版目录不由当前版本写入。 |

1698 1698 

Details

242 242 

243Claude Code 在启动时如果无法验证您现有的 AWS 凭证,也会运行此命令,并在 `Authentication` 面板中显示命令的输出,直到登录完成。243Claude Code 在启动时如果无法验证您现有的 AWS 凭证,也会运行此命令,并在 `Authentication` 面板中显示命令的输出,直到登录完成。

244 244 

245配置了 `awsAuthRefresh` 后,运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials**。Claude Code 运行配置的命令并重新读取您的 AWS 凭证,无需重启。此选项需要 Claude Code v2.1.186 或更高版本。245配置了 `awsAuthRefresh` 后,运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials**。Claude Code 运行配置的命令并重新读取您的 AWS 凭证,无需重启。

246 246 

247**选项 B:工作区 API 密钥**247**选项 B:工作区 API 密钥**

248 248 

claude-projects.md +96 −94

Details

10 Projects 在 Pro 和 Max 计划上处于公开测试阶段,正在逐步推出,首先面向已使用[云会话](/docs/zh-CN/claude-code-on-the-web)且在 claude.ai 聊天或 Cowork 中没有现有项目的账户。它们在 Team 或 Enterprise 计划上还不可用。如果 **Projects** 没有出现在 [claude.ai/code](https://claude.ai/code) 的侧边栏中或[桌面应用](/docs/zh-CN/desktop)的代码选项卡中,说明推出还没有到达您的账户,您可以[加入等待列表](https://claude.com/form/projects)。[并行运行代理](/docs/zh-CN/agents)列出了您在此期间可以使用的内容。10 Projects 在 Pro 和 Max 计划上处于公开测试阶段,正在逐步推出,首先面向已使用[云会话](/docs/zh-CN/claude-code-on-the-web)且在 claude.ai 聊天或 Cowork 中没有现有项目的账户。它们在 Team 或 Enterprise 计划上还不可用。如果 **Projects** 没有出现在 [claude.ai/code](https://claude.ai/code) 的侧边栏中或[桌面应用](/docs/zh-CN/desktop)的代码选项卡中,说明推出还没有到达您的账户,您可以[加入等待列表](https://claude.com/form/projects)。[并行运行代理](/docs/zh-CN/agents)列出了您在此期间可以使用的内容。

11</Note>11</Note>

12 12 

13项目是一个持续进行的对话,Claude 在其中为您协调一系列相关工作。您告诉它需要做什么,它为每个任务启动一个线程。每个线程都是一个[云会话](/docs/zh-CN/claude-code-on-the-web):Claude Code 在云中运行,而不是在您的机器上运行。线程并行运行,即使您关闭笔记本电脑后也会继续进行,您可以从手机上检查它们并引导它们。13项目是一个持续进行的对话,Claude 在其中为您协调一系列相关工作。您告诉它需要做什么,它为每个任务启动一个线程。

14 

15每个线程通常是一个[云会话](/docs/zh-CN/claude-code-on-the-web):Claude Code 在云中运行,而不是在您的机器上运行。当任务需要只有您的计算机才有的东西时,您可以要求 Claude 通过[远程控制](/docs/zh-CN/remote-control)在您的计算机上运行该线程。线程并行运行,您可以从手机上检查它们并引导它们。云线程在您关闭笔记本电脑后会继续进行。

14 16 

15没有项目的情况下,运行多个会话意味着您自己进行协调:您决定每个会话处理什么,在每个会话的开始重复相同的背景信息,并检查哪个已完成或需要您的回答。使用项目,您可以:17没有项目的情况下,运行多个会话意味着您自己进行协调:您决定每个会话处理什么,在每个会话的开始重复相同的背景信息,并检查哪个已完成或需要您的回答。使用项目,您可以:

16 18 

17* **将工作发送到一个地方**:每当出现问题时,将错误报告、堆栈跟踪或任务列表粘贴到对话中。Claude 为每项工作启动一个线程,或将其传递给已在该区域工作的线程,并就地回答快速问题。19* **将工作发送到一个地方**:每当出现问题时,将错误报告、堆栈跟踪或任务列表粘贴到对话中。Claude 为每项工作启动一个线程,或将其传递给已在该区域工作的线程,并就地回答快速问题。

18* **设置一次上下文**:每个新线程都以项目的存储库、说明和内存开始,因此您陈述一次的规则(例如要针对哪个分支)会到达所有线程。20* **设置一次上下文**:每个新线程都以项目的说明开始,因此您陈述一次的规则(例如要针对哪个分支)会到达所有线程。

19* **离开并返回查看完成的工作**:当您一小时后或第二天早上回来时,**Overview** 窗格显示哪些线程已完成、哪些拉取请求已准备好供审查,以及哪个线程正在等待您的回答。21* **离开并返回查看完成的工作**:当您一小时后或第二天早上回来时,**Overview** 窗格显示哪些线程已完成、哪些拉取请求已准备好供审查,以及哪个线程正在等待您的回答。

20 22 

21如果您已经知道希望项目运行的工作,请直接转到[创建项目](#create-a-project)。23如果您已经知道希望项目运行的工作,请直接转到[创建项目](#create-a-project)。


37 何时其他方式更合适39 何时其他方式更合适

38</h3>40</h3>

39 41 

40线程在 GitHub 代码库以及您上传到项目的文件、文件夹和 Google Drive 文件夹上工作,而不是仅存在于您机器上的文件或工具。在这些情况下,其他方式更合适:42Cloud 线程在 GitHub 代码库以及您上传到项目的文件、文件夹和 Google Drive 文件夹上工作,而不是仅存在于您机器上的文件或工具。如果任务需要您的机器,请通过 [Remote Control](/docs/zh-CN/remote-control) 要求 Claude 在那里运行其线程。[限制](#limitations)列出了这需要什么。在这些情况下,其他方式更合适:

41 43 

42* **一个适合在一个会话中完成的任务**:"修复不稳定的登录测试。"自己启动一个[云会话](/docs/zh-CN/claude-code-on-the-web)。44* **一个适合在一个会话中完成的任务**:"修复不稳定的登录测试。"自己启动一个[云会话](/docs/zh-CN/claude-code-on-the-web)。

43* **需要仅您的机器可以访问的工具或服务的工作**:本地数据库、设备模拟器、VPN 后面的 API。使用本地会话,或[代理视图](/docs/zh-CN/agent-view)同时运行多个。如果工作只需要本地文件,请将它们上传到项目。45* **每个任务都需要您的机器的工作**:本地数据库、设备模拟器或 VPN 后面的 API。使用本地会话,或[代理视图](/docs/zh-CN/agent-view)同时运行多个。如果工作只需要本地文件,请将它们上传到项目。

44* **一个按时间表重复的任务,周围没有对话**:"每周一发布依赖报告。"在其自身上创建一个[例程](/docs/zh-CN/routines)。46* **一个按时间表重复的任务,周围没有对话**:"每周一发布依赖报告。"在其自身上创建一个[例程](/docs/zh-CN/routines)。

45* **多个人在 Slack 频道中给 Claude 工作并一起引导它**:请参阅 [Claude Tag](https://claude.com/docs/claude-tag/overview)。47* **多个人在 Slack 频道中给 Claude 工作并一起引导它**:请参阅 [Claude Tag](https://claude.com/docs/claude-tag/overview)。

46 48 


53项目是一个与 Claude 的协调对话加上它启动的线程来完成工作。这些是它的部分:55项目是一个与 Claude 的协调对话加上它启动的线程来完成工作。这些是它的部分:

54 56 

55* **项目对话**:一个长期运行的会话,Claude 充当协调员。它接收您发送的内容,决定什么成为线程,并跟踪它启动的每个线程。它看到线程报告回来的内容,而不是它们采取的每一步。57* **项目对话**:一个长期运行的会话,Claude 充当协调员。它接收您发送的内容,决定什么成为线程,并跟踪它启动的每个线程。它看到线程报告回来的内容,而不是它们采取的每一步。

56* **线程**:工作者。每个都是一个单独的[云会话](/docs/zh-CN/claude-code-on-the-web),有自己的上下文窗口,在自己的分支上完成一项工作,在工作需要时打开拉取请求,并在完成时报告回对话。58* **线程**:工作者。每个都是一个单独的会话,有自己的上下文窗口,完成一项工作并在完成时报告回对话。云线程在自己的分支上工作,当工作需要时打开拉取请求。

57* **每个线程开始时的内容**:59* **每个云线程开始时的内容**:

58 * 项目的代码库和文件,加上其[说明和记忆](#give-a-project-standing-context)60 * 项目的代码库和文件,加上其[说明和记忆](#give-a-project-standing-context)

59 * `CLAUDE.md`、skills 和[项目每个代码库](#what-threads-pick-up-from-your-repositories)中的 plugins,以及在有一个代码库的项目中,该代码库的权限规则和 hooks61 * `CLAUDE.md` 和[项目每个代码库](#what-threads-pick-up-from-your-repositories)中的 skills,以及在有一个代码库的项目中,该代码库的权限规则和 hooks

60 * 您 claude.ai 账户上的[连接器](#get-skills-plugins-connectors-and-tools-into-threads)62 * 您 claude.ai 账户上的[连接器](#get-skills-plugins-connectors-and-tools-into-threads)

61 * 一个[云环境](#choose-an-environment-for-threads),设置其网络访问、环境变量、API 凭证和已安装的工具63 * 一个[云环境](#choose-an-environment-for-threads),设置其网络访问、环境变量、API 凭证和已安装的工具

62* **Overview 窗格**:您在其中[一次看到所有线程](#see-what-needs-you-in-overview)以及哪些需要您。其他标签页是 **Library**(用于您添加的文件和线程生成的文件)、**Pull requests**(用于线程打开的文件)和 **Routines**(用于项目中的计划工作)。64* **Overview 窗格**:您在其中[一次看到所有线程](#see-what-needs-you-in-overview)以及哪些需要您。其他标签页是 **Library**(用于您添加的文件和线程生成的文件)、**Pull requests**(用于线程打开的文件)和 **Routines**(用于项目中的计划工作)。

63 65 

64线程不会从您自己机器上的 Claude Code 设置中获取任何内容。[将 skills、plugins、连接器和工具放入线程](#get-skills-plugins-connectors-and-tools-into-threads)涵盖了如何为它们提供它们可能缺少的内容。66云线程不会从您自己机器上的 Claude Code 设置中获取任何内容。[将 skills、plugins、连接器和工具放入线程](#get-skills-plugins-connectors-and-tools-into-threads)涵盖了如何为它们提供它们可能缺少的内容。

65 67 

66以下是这些部分如何连接的方式,从您通过对话到执行工作的线程,**Overview** 跟踪它们的状态:68以下是这些部分如何连接的方式,从您通过对话到执行工作的线程,**Overview** 跟踪它们的状态:

67 69 

68<Frame>70<Frame>

69 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=dbf446f69f0bbdb9961d21af207cb93b" className="dark:hidden" alt="项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个线程是一个在自己的分支和拉取请求上工作的云会话。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。" width="600" height="250" data-path="images/claude-projects-overview.svg" />71 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=dbf446f69f0bbdb9961d21af207cb93b" className="dark:hidden" alt="项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个云线程在自己的分支和拉取请求上工作。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。" width="600" height="250" data-path="images/claude-projects-overview.svg" />

70 72 

71 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview-dark.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=549a5ba9fea8433729babc37a1f6e9c8" className="hidden dark:block" alt="项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个线程是一个在自己的分支和拉取请求上工作的云会话。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。" width="600" height="250" data-path="images/claude-projects-overview-dark.svg" />73 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview-dark.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=549a5ba9fea8433729babc37a1f6e9c8" className="hidden dark:block" alt="项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个云线程在自己的分支和拉取请求上工作。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。" width="600" height="250" data-path="images/claude-projects-overview-dark.svg" />

72</Frame>74</Frame>

73 75 

74<h2 id="create-a-project">76<h2 id="create-a-project">


160 在项目中工作162 在项目中工作

161</h2>163</h2>

162 164 

163通过项目对话给 Claude 工作:一次一个任务或一次多个,加上更新和零散的想法。Claude 路由每条消息,线程完成工作并报告回来。165通过项目对话向 Claude 分配工作:一次一个任务或同时多个任务,加上随时出现的更新和零散想法。Claude 会路由每条消息,线程执行工作并报告结果。

164 166 

165<h3 id="your-first-batch">167<h3 id="your-first-batch">

166 您的第一批168 你的第一批工作

167</h3>169</h3>

168 170 

169在您向新项目发送一批工作之前,设置它以便第一批线程以您想要的方式回来:171在向新项目发送一批工作之前,请设置它,使第一批线程以你想要的方式返回:

170 172 

1711. [编写项目说明](#write-project-instructions):每个线程开始的简报,例如要针对哪个分支、线程如何检查其工作以及什么需要您的批准。1731. [编写项目说明](#write-project-instructions):每个线程开始的简要说明,例如要针对哪个分支、线程如何检查其工作,以及什么需要你的批准。

1722. 发送一个真实工作的小部分,或启动 Claude 建议的线程之一(如果它提供了任何),并在它完成时打开线程以查看它如何报告回来以及它在分支上做了什么。如果它假设了错误的东西或无法到达它需要的东西,[线程猜测或停滞而不是询问](#threads-guessed-or-stalled-instead-of-asking)涵盖了在哪里修复。1742. 发送一小段真实工作,或启动 Claude 建议的某个线程(如果它提供了任何建议),并在线程完成时打开它,查看它如何报告以及它在其分支上做了什么。如果它假设了错误的内容或无法到达所需的内容,[线程猜测或停滞而不是询问](#threads-guessed-or-stalled-instead-of-asking)涵盖了在哪里修复这个问题。

1733. 检查 **Project settings > General** 中的 **Thread model** 和 **Thread effort**。新项目在高努力下在 Opus 上运行每个线程,这最快地使用您的计划;[选择模型并让 Claude 管理上下文](#choose-models-and-let-claude-manage-context)涵盖了替代方案。1753. 检查**项目设置 > 常规**中的**线程模型**和**线程工作量**。新项目在 Opus 上以高工作量运行每个线程,这会最快地消耗你的计划;[选择模型并让 Claude 管理上下文](#choose-models-and-let-claude-manage-context)涵盖了替代方案。

1744. 要求 Claude [在启动线程之前提议线程并一次运行几个](#tune-how-claude-runs-a-project),一旦几个线程以您想要的方式回来,就放弃这些限制。1764. 要求 Claude [在启动线程之前提议线程并一次运行几个](#tune-how-claude-runs-a-project),一旦几个线程以你想要的方式返回,就取消这些限制。

175 177 

176<h3 id="send-work-and-read-results">178<h3 id="send-work-and-read-results">

177 发送工作并读取结果179 发送工作并读取结果

178</h3>180</h3>

179 181 

180Claude 决定您在对话中发送的每条消息去哪里:182Claude 决定你在对话中发送的每条消息的去向:

181 183 

182* 快速问题通常在对话中得到答案。184* 快速问题通常会在对话中得到答案。

183* 新工作进入新线程或已在该领域工作的线程,Claude 告诉您哪个。每个新线程显示为您消息下的卡片:一个带有线程标题和状态的框,您点击打开线程。185* 新工作会进入新线程或已在该区域工作的线程,Claude 会告诉你是哪一个。每个新线程在你的消息下显示为一张卡片:一个包含线程标题和状态的框,你点击它来打开线程。

184* 一条消息中的多个不相关的任务成为单独的线程。186* 一条消息中的多个不相关的任务会变成单独的线程。

185 187 

186如果 Claude 路由的方式与您想要的不同,请说出来。[调整 Claude 如何运行项目](#tune-how-claude-runs-a-project)列出了您可以告诉它的事情,例如为后续工作重用现有线程或就地回答而不是启动线程。188如果 Claude 路由的方式与你想要的不同,请说出来。[调整 Claude 如何运行项目](#tune-how-claude-runs-a-project)列出了你可以告诉它的事情,例如为后续工作重用现有线程或就地回答而不是启动线程。

187 189 

188线程的完整结果保留在线程中,您从对话中打开其卡片来读取它们。线程生成的文件也在 **Overview** 中的 **Library** 标签页上。190线程的完整结果保留在线程中,你打开对话中的其卡片来读取它们。线程生成的文件也在**概览**中的**库**选项卡上。

189 191 

190有时 Claude 在 **Suggested threads** 列表中提议线程而不是启动它们。点击建议上的箭头启动该线程。当列出多个时,列表下的按钮启动所有这些。192有时 Claude 会在**建议的线程**列表中提议线程而不是启动它们。点击建议上的箭头来启动该线程。当列出多个时,列表下的按钮会启动所有这些线程。

191 193 

192<h3 id="review-a-thread’s-pull-request">194<h3 id="review-a-thread’s-pull-request">

193 审查线程的拉取请求195 审查线程的拉取请求

194</h3>196</h3>

195 197 

196当线程更改代码时,除非您另外告诉它,否则它会执行以下操作:198当云线程更改代码时,除非你另外告诉它,否则它会执行以下操作:

197 199 

198* **分支**:在新分支上工作,从代码库的默认分支开始。200* **分支**:在新分支上工作,从存储库的默认分支开始。

199* **拉取请求**:当您要求时打开一个,并可以为错误修复或其他具体更改自己打开一个。201* **拉取请求**:当你要求时打开一个,并且可以为错误修复或其他具体更改自动打开一个。

200* **打开后**:使用[自动修复](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests)打开监视拉取请求,无论自动修复是否对您的其他云会话打开。它在 CI 失败时推送修复,处理审查评论,并在检查通过且拉取请求准备好供您审查时在线程中回复。202* **打开后**:使用[自动修复](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests)打开的情况下监视拉取请求,无论你的其他云会话是否打开了自动修复。当 CI 失败时它会推送修复,处理审查评论,并在检查通过且拉取请求准备好供你使用时在线程中回复。

201 203 

202当线程在对话中的卡片显示拉取请求下一步的按钮时:204当线程推送了分支或打开了拉取请求时,其在对话中的卡片可以显示下一步的按钮:

203 205 

204* **Resolve conflicts**、**Fix CI**、**Address comments** 和 **Merge it** 将该指令作为来自您的消息发送到线程,因此您可以自己提示线程而不是等待它对拉取请求做出反应。206* **解决冲突**、**修复 CI**、**处理评论**和**合并它**将该指令作为来自你的消息发送给线程,因此你可以自己提示线程,而不是等待它对拉取请求做出反应。

205* **Review PR** 在 GitHub 上打开拉取请求。207* **审查 PR** 在 GitHub 上打开拉取请求。

206* **Create PR** 在空闲线程已推送分支但尚未打开拉取请求时出现。点击它直接从该分支创建拉取请求,而不是向线程发送打开拉取请求的指令。208* **创建 PR** 在空闲线程推送了分支但尚未打开拉取请求时出现。点击它会直接从该分支创建拉取请求,而不是向线程发送打开拉取请求的指令。

207 209 

208要更改线程何时打开拉取请求,例如仅在您要求时,或它们从哪个分支开始,请在任务中或在[项目说明](#write-project-instructions)中说出来。210要更改线程何时打开拉取请求(例如仅在你要求时)或它们从哪个分支开始,请在任务中或在[项目说明](#write-project-instructions)中说明。

209 211 

210<h3 id="see-what-needs-you-in-overview">212<h3 id="see-what-needs-you-in-overview">

211 在 Overview 中查看需要您的内容213 在概览中查看需要你的内容

212</h3>214</h3>

213 215 

214**Overview** 窗格在对话旁边跟踪项目的线程。它在您第一次打开新项目时已经打开。项目标题中的 **Overview** 按钮关闭并重新打开它,并在线程等待您时显示一个点。216对话旁边的**概览**窗格跟踪项目的线程。当你第一次打开新项目时,它已经打开。项目标题中的**概览**按钮关闭并重新打开它,并在线程等待你时显示一个点。

215 217 

216在桌面应用中,当 Claude 在对话中发布、线程遇到错误或线程需要您的输入时,您还会收到桌面通知,因此您不必保持项目打开来找出。要在每次线程完成一轮时也获得一个,或为项目关闭它们,请在项目的侧边栏菜单中选择 **Notifications**。这些通知仅限桌面:在浏览器中,检查 **Overview** 按钮上的点。218在桌面应用中,当 Claude 在对话中发布、线程遇到错误或线程需要你的输入时,你还会收到桌面通知,因此你不必保持项目打开来了解情况。要在每次线程完成一轮时也获得一个通知,或为项目关闭通知,请在项目的侧边栏菜单中选择**通知**。这些通知仅限桌面:在浏览器中,检查**概览**按钮上的点。

217 219 

218窗格的 **Threads** 标签页按状态对线程进行分组:220窗格的**线程**选项卡按状态对线程进行分组:

219 221 

220| 组 | 其中的内容 |222| 组 | 其中的内容 |

221| :------------------- | :------------------------------------------------------------------------------- |223| :------- | :------------------------------------------------------------------------------ |

222| **Ready for review** | 其拉取请求已打开并等待审查的线程 |224| **准备审查** | 拉取请求打开并等待审查的线程 |

223| **Waiting on you** | 需要您的回复或批准的线程,或失败的线程 |225| **等待你** | 需要你的回复或批准的线程,或已失败的线程 |

224| **Working** | 仍在运行的线程 |226| **工作中** | 仍在运行的线程 |

225| **Landing** | 其拉取请求已批准或排队合并的线程 |227| **登陆** | 拉取请求已批准或排队合并的线程 |

226| **Idle** | 完成且不等待任何东西的线程 |228| **空闲** | 已完成且不等待任何内容的线程 |

227| **Resolved** | 标记为完成的线程:由您从线程的菜单中标记,由 Claude 在您采取最后一步(例如合并其拉取请求)后标记,或在一周无活动后自动标记。您可以从同一菜单重新打开一个 |229| **已解决** | 标记为完成的线程:由你从线程的菜单标记,由 Claude 在你采取最后一步(例如合并其拉取请求)后标记,或在一周无活动后自动标记。你可以从同一菜单重新打开一个 |

228 230 

229窗格的其他标签页是 **Library**(用于您添加的文件和文件夹以及线程生成的文件)、**Pull requests**(一旦线程打开任何)和 **Routines**(用于此项目的[例程](/docs/zh-CN/routines))。231窗格的其他选项卡是**库**(用于你添加的文件和文件夹以及线程生成的文件)、**拉取请求**(一旦线程打开任何)和**例程**(用于 Claude 从此项目设置的[例程](/docs/zh-CN/routines))。

230 232 

231<h3 id="open-a-thread-when-you-need-control">233<h3 id="open-a-thread-when-you-need-control">

232 当您需要控制时打开线程234 当你需要控制时打开线程

233</h3>235</h3>

234 236 

235点击对话中线程的卡片或 **Overview** 中的其行以在 Overview 窗格中打开其记录。从那里您可以:237点击对话中线程的卡片或**概览**中的其行来在概览窗格中打开其记录。从那里你可以:

236 238 

237* 逐步阅读 Claude 做了什么。239* 逐步阅读 Claude 所做的事情。

238* 通过在线程自己的消息框中写入来引导任务。那里的消息直接进入该线程,而项目对话中的后续只有在 Claude 将后续匹配到该线程时才会到达它。240* 通过在线程自己的消息框中写入来引导任务。那里的消息直接进入该线程,而项目对话中的后续消息仅在 Claude 将后续消息与该线程匹配时才到达它。

239* 回答线程等待的权限提示。241* 回答线程正在等待的权限提示。

240* 使用 **Stop** 中断线程,它在线程工作时替换发送按钮,或按 Esc。242* 使用**停止**中断线程,它在线程工作时替换发送按钮,或按 Esc。

241 243 

242<h3 id="choose-models-and-let-claude-manage-context">244<h3 id="choose-models-and-let-claude-manage-context">

243 选择模型并让 Claude 管理上下文245 选择模型并让 Claude 管理上下文

244</h3>246</h3>

245 247 

246在 **Project settings > General** 中设置模型和努力。新项目在高[努力](/docs/zh-CN/model-config#adjust-effort-level)下在 Opus 上运行所有地方,对话的努力较低:248在**项目设置 > 常规**中设置模型和工作量。新项目在所有地方运行 Opus,线程的[工作量](/docs/zh-CN/model-config#adjust-effort-level)为高,对话的工作量为低:

247 249 

248* **Thread model** 和 **Thread effort** 适用于线程。要为一个任务使用不同的模型,请在任务中要求它;对于已经运行的线程,使用该线程的模型选择器。250* **线程模型**和**线程工作量**适用于线程。要为一个任务使用不同的模型,请在任务中要求它;对于已在运行的线程,使用该线程的模型选择器。

249* **Coordinator model** 和 **Coordinator effort** 适用于项目对话中的 Claude。251* **协调器模型**和**协调器工作量**适用于项目对话中的 Claude。

250 252 

251您不在项目中管理上下文窗口。线程自动压缩,对话从最近的消息、最近的线程和项目记忆而不是其完整历史工作,因此它可以运行项目运行的时间。将任何必须永远不被丢弃的东西放在[项目记忆](#give-a-project-standing-context)中。如果一个线程超出其上下文,它显示[Claude 在此轮用完了上下文](#context-limit)。253你不在项目中管理上下文窗口。线程自动压缩,对话从最近的消息、最近的线程和项目内存而不是其完整历史记录工作,因此只要项目运行,它就会继续进行。将任何必须永远不被丢弃的内容放在[项目内存](#give-a-project-standing-context)中。如果一个线程超出其上下文,它会显示[Claude 在此轮中用尽了上下文](#context-limit)。

252 254 

253<h3 id="tune-how-claude-runs-a-project">255<h3 id="tune-how-claude-runs-a-project">

254 调整 Claude 如何运行项目256 调整 Claude 如何运行项目

255</h3>257</h3>

256 258 

257在对话中告诉 Claude 一次运行多少个线程、何时发布更新以及何时打开拉取请求。如果 Claude 以您不想要的方式协调,请说出来。例如,您可以说:259在对话中告诉 Claude 一次运行多少个线程、何时发布更新以及何时打开拉取请求。如果 Claude 以你不想要的方式进行协调,请说出来。例如,你可以说:

258 260 

259* "提议线程并等待我的批准后再启动它们"或"现在启动这些而不要求我确认"261* "提议线程并在启动之前等待我的批准"或"现在启动这些而不要求我确认"

260* "一次最多运行两个线程"或"为同一领域的后续工作重用现有线程"262* "一次最多运行两个线程"或"为同一区域中的后续工作重用现有线程"

261* "发布更短的更新"或"仅在某些完成或被阻止时发布"263* "发布更短的更新"或"仅在某些内容完成或被阻止时发布"

262* "给我每个线程的状态更新"264* "给我每个线程的状态更新"

263* "用更小的模型做这个任务"265* "用较小的模型执行此任务"

264* "在我看到计划之前不要打开拉取请求"266* "在我看到计划之前不要打开拉取请求"

265* "告诉我这些代码库中有什么问题,不要修复任何东西",当您想在任何东西成为线程之前查看发现时267* "告诉我这些存储库中有什么问题,暂时不要修复任何内容",当你想在任何内容变成线程之前查看发现时

266* "在这里回答那个而不是启动线程",当 Claude 为您打算作为快速问题的东西启动线程时268* "在这里回答,而不是启动线程",当 Claude 为你打算作为快速问题的内容启动线程时

267 269 

268Claude 自己将这些偏好保存到[项目记忆](#give-a-project-standing-context)并在后续线程中遵循它们。它们是 Claude 遵守的说明,而不是强制设置,因此您以这种方式给出的线程限制不是硬上限。当您想要它精确措辞并从一开始应用到每个线程时,将一个添加到项目说明。270Claude 会自动将这些偏好保存到[项目内存](#give-a-project-standing-context),并在后续线程中遵循它们。它们是 Claude 遵守的指令,而不是强制执行的设置,因此你以这种方式给出的线程限制不是硬上限。当你想要它精确措辞并从一开始应用于每个线程时,将其添加到项目说明中。

269 271 

270<h3 id="unblock-a-thread-waiting-on-approval">272<h3 id="unblock-a-thread-waiting-on-approval">

271 解除等待批准的线程273 解除等待批准的线程

272</h3>274</h3>

273 275 

274当线程的模型支持时,线程在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中运行,因此大多数工具调用无需询问您即可运行。当线程需要您的批准时,提示在该线程内,线程等待直到您在那里回答。在项目对话中告诉 Claude 继续不会到达它。276当线程的模型支持时,线程在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中运行,因此大多数工具调用无需询问你即可运行。当线程需要你的批准时,提示在该线程内,线程等待你在那里回答。在项目对话中告诉 Claude 继续不会到达它。

275 277 

276每个批准涵盖该提示,或如果您选择更广泛的选项,则涵盖该线程的其余部分。要让每个线程运行某些命令而不询问,或阻止某些,请将[权限规则](/docs/zh-CN/permissions)添加到代码库的 `.claude/settings.json`。线程仅在有一个代码库的项目中应用它们;请参阅[线程从您的代码库中获取什么](#what-threads-pick-up-from-your-repositories)。278每个批准涵盖该提示,或如果你选择更广泛的选项,则涵盖该线程的其余部分。要让每个线程运行某些命令而不询问,或阻止某些命令,请将[权限规则](/docs/zh-CN/permissions)添加到存储库的`.claude/settings.json`。云线程仅在具有一个存储库的项目中应用它们;请参阅[线程从你的存储库中获取什么](#what-threads-pick-up-from-your-repositories)。

277 279 

278<h2 id="give-a-project-standing-context">280<h2 id="give-a-project-standing-context">

279 给项目提供常规上下文281 给项目提供常规上下文

280</h2>282</h2>

281 283 

282项目记忆、项目说明和项目的代码库、文件和环境跨线程携带上下文。您设置每个一次,它适用于每个新线程。284项目记忆、项目说明和项目的代码库、文件和环境跨线程携带上下文。您设置每个一次。

283 285 

284| 上下文 | 它携带什么 | 您如何设置它 |286| 上下文 | 它携带什么 | 您如何设置它 |

285| :-------- | :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------- |287| :-------- | :--------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------- |

286| 项目记忆 | Claude 关于项目的笔记,例如要求、决定和陷阱,存储为文件。每个线程在启动时读取索引文件 `MEMORY.md`,并在需要时打开其他文件 | 在项目对话或任何线程中要求 Claude 记住要求、决定或陷阱,或忘记一个。在 **Project settings > Memory** 中读取、编辑和删除文件 |288| 项目记忆 | Claude 关于项目的笔记,例如要求、决定和陷阱,存储为文件。每个云线程在启动时读取索引文件 `MEMORY.md`,并在需要时打开其他文件 | 在项目对话或任何云线程中要求 Claude 记住要求、决定或陷阱,或忘记一个。在 **Project settings > Memory** 中读取、编辑和删除文件 |

287| 项目说明 | 发送到每个新线程和项目对话中 Claude 的文本,最多 16,000 个字符。[编写项目说明](#write-project-instructions)涵盖了要放入其中的内容 | **Project settings > Memory > Project instructions**,或要求 Claude 更改说明 |289| 项目说明 | 发送到每个新线程和项目对话中 Claude 的文本,最多 16,000 个字符。[编写项目说明](#write-project-instructions)涵盖了要放入其中的内容 | **Project settings > Memory > Project instructions**,或要求 Claude 更改说明 |

288| 代码库、文件和环境 | 每个线程克隆的代码库、每个线程可以在 `/mnt/project-files` 下读取的文件夹和文件,以及线程运行的云环境 | 代码库和环境在 **Project settings > Environment** 中,或在对话中要求 Claude 将代码库添加到项目。文件和文件夹来自 **Overview** 中 **Library** 标签页上的 **Add** |290| 代码库、文件和环境 | 每个云线程克隆的代码库、每个线程可以在 `/mnt/project-files` 下读取的文件夹和文件,以及线程运行的云环境 | 代码库和环境在 **Project settings > Environment** 中,或在对话中要求 Claude 将代码库添加到项目。文件和文件夹来自 **Overview** 中 **Library** 标签页上的 **Add** |

289 291 

290**Project settings > Memory** 在 **Auto memory** 下列出这些文件,因为 Claude 在项目中工作时自己写入它们。它们与 Claude Code 在您机器上保留的[自动记忆](/docs/zh-CN/memory)分开,即使两者都使用 `MEMORY.md` 索引。项目记忆也与项目代码库中的 `CLAUDE.md` 文件分开。每个线程在启动时仍然从其克隆中读取那些 `CLAUDE.md` 文件,因此将关于代码库的说明放在其 `CLAUDE.md` 中,将关于项目的笔记放在项目记忆中。292**Project settings > Memory** 在 **Auto memory** 下列出这些文件,因为 Claude 在项目中工作时自己写入它们。它们与 Claude Code 在您机器上保留的[自动记忆](/docs/zh-CN/memory)分开,即使两者都使用 `MEMORY.md` 索引。项目记忆也与项目代码库中的 `CLAUDE.md` 文件分开。每个云线程在启动时仍然从其克隆中读取那些 `CLAUDE.md` 文件,因此将关于代码库的说明放在其 `CLAUDE.md` 中,将关于项目的笔记放在项目记忆中。

291 293 

292<h3 id="write-project-instructions">294<h3 id="write-project-instructions">

293 编写项目说明295 编写项目说明


312- 不要在没有在线程中询问我的情况下合并、强制推送或更改 CI 配置。314- 不要在没有在线程中询问我的情况下合并、强制推送或更改 CI 配置。

313```315```

314 316 

315关于一个代码库的规则,例如其构建命令,属于该代码库的 `CLAUDE.md`,每个线程在代码库是项目的一部分时启动时读取。一旦工作进行中,当您纠正线程时,也告诉 Claude 记住纠正:它进入[项目记忆](#give-a-project-standing-context),后续线程从它开始。317关于一个代码库的规则,例如其构建命令,属于该代码库的 `CLAUDE.md`,每个云线程在代码库是项目的一部分时启动时读取。一旦工作进行中,当您纠正线程时,也告诉 Claude 记住纠正:它进入[项目记忆](#give-a-project-standing-context),后续云线程从它开始。

316 318 

317<h3 id="decide-which-repositories-to-add">319<h3 id="decide-which-repositories-to-add">

318 决定要添加哪些代码库320 决定要添加哪些代码库

319</h3>321</h3>

320 322 

321您添加到项目的代码库在每个线程中都带有其中的所有内容、其代码、`CLAUDE.md` 和 skills。您不添加的代码库仍在范围内:当其任务需要时,线程可以将一个添加到自己。大多数项目同时使用两者:323您添加到项目的代码库在每个云线程中都带有其中的所有内容、其代码、`CLAUDE.md` 和 skills。您不添加的代码库仍在范围内:当其任务需要时,云线程可以将一个添加到自己。大多数项目同时使用两者:

322 324 

323* **将其添加到项目**,在 **New project** 对话框中、**Project settings > Environment** 中,或通过在对话中要求 Claude 将其添加到项目。从那时起,每个线程克隆它并从其 `CLAUDE.md` 和 skills 加载开始,无论任务是否涉及它。从一个代码库转到多个也改变了线程从每个代码库的 `.claude/settings.json` 中获取什么;请参阅[线程从您的代码库中获取什么](#what-threads-pick-up-from-your-repositories)。325* **将其添加到项目**,在 **New project** 对话框中、**Project settings > Environment** 中,或通过在对话中要求 Claude 将其添加到项目。从那时起,每个云线程克隆它并从其 `CLAUDE.md` 和 skills 加载开始,无论任务是否涉及它。从一个代码库转到多个也改变了线程从每个代码库的 `.claude/settings.json` 中获取什么;请参阅[线程从您的代码库中获取什么](#what-threads-pick-up-from-your-repositories)。

324* **将其留下,让线程在需要时添加它。** 其任务需要项目没有的代码库的线程可以将其添加到自己,线程中的注释说它仅被添加到此线程。克隆发生在任务的中途,因此该代码库的 `CLAUDE.md` 和 skills 在线程启动时不存在。下一个线程再次启动时没有它。线程添加的代码库需要与项目代码库相同的[先决条件](#check-the-prerequisites):Claude GitHub App 安装在其上并从您的 GitHub 账户推送访问。326* **将其留下,让线程在需要时添加它。** 其任务需要项目没有的代码库的云线程可以将其添加到自己,线程中的注释说它仅被添加到此线程。克隆发生在任务的中途,因此该代码库的 `CLAUDE.md` 和 skills 在线程启动时不存在。下一个线程再次启动时没有它。线程添加的代码库需要与项目代码库相同的[先决条件](#check-the-prerequisites):Claude GitHub App 安装在其上并从您的 GitHub 账户推送访问。

325 327 

326项目根本不需要代码库。其线程仍然可以研究、编写文档和在自己的沙箱中编写和运行代码,并将文件提交到 **Library** 标签页。那里的线程也可以在任务需要时将代码库添加到自己。328项目根本不需要代码库。其云线程仍然可以研究、编写文档和在自己的沙箱中编写和运行代码,并将文件提交到 **Library** 标签页。那里的任何云线程也可以在任务需要时将代码库添加到自己。

327 329 

328一旦项目有了代码库,Claude 只能从项目已经使用的 GitHub 所有者添加代码库,无论它是将一个添加到项目还是线程将一个添加到自己。要引入来自不同所有者的代码库,请自己在 **Project settings > Environment** 中将其添加到项目。330一旦项目有了代码库,Claude 只能从项目已经使用的 GitHub 所有者添加代码库,无论它是将一个添加到项目还是线程将一个添加到自己。要引入来自不同所有者的代码库,请自己在 **Project settings > Environment** 中将其添加到项目。

329 331 

330对于跨越许多代码库的项目,例如一个具有服务器、网络、移动和桌面代码的功能,添加几乎每个任务涉及的一个或两个代码库,并在[项目说明](#write-project-instructions)中命名其他代码库,以便 Claude 知道其余代码在哪里。线程然后启动小,仅为需要它们的任务拉入其他代码库。332对于跨越许多代码库的项目,例如一个具有服务器、网络、移动和桌面代码的功能,添加几乎每个任务涉及的一个或两个代码库,并在[项目说明](#write-project-instructions)中命名其他代码库,以便 Claude 知道其余代码在哪里。云线程然后启动小,仅为需要它们的任务拉入其他代码库。

331 333 

332<h3 id="what-threads-pick-up-from-your-repositories">334<h3 id="what-threads-pick-up-from-your-repositories">

333 线程从您的代码库中获取什么335 线程从您的代码库中获取什么

334</h3>336</h3>

335 337 

336每个线程克隆项目中的每个代码库并从所有代码库加载 `CLAUDE.md` 和 skills。权限规则、hooks 和 `env` 仅来自线程启动的目录中的 `.claude/settings.json`:在有一个代码库时在代码库内,在有多个时在克隆上方,其中没有代码库的文件被读取。338每个云线程克隆项目中的每个代码库并从所有代码库加载 `CLAUDE.md` 和 skills。权限规则、hooks 和 `env` 仅来自线程启动的目录中的 `.claude/settings.json`:在有一个代码库时在代码库内,在有多个时在克隆上方,其中没有代码库的文件被读取。

337 339 

338| 在每个代码库中 | 一个代码库 | 多个代码库 |340| 在每个代码库中 | 一个代码库 | 多个代码库 |

339| :----------------------------------------------- | :-------------------------------------------------------------------------------------- | :------------------------------------------------ |341| :----------------------------------------------- | :-------------------------------------------------------------------------------------- | :------------------------------------------------ |


348 为线程选择环境350 为线程选择环境

349</h3>351</h3>

350 352 

351每个新线程在项目的[云环境](/docs/zh-CN/cloud-environments)中启动。环境设置线程可以到达哪些域、它们有哪些环境变量、哪些 API 凭证被添加到它们的请求中,以及设置脚本在 Claude 启动之前安装什么。线程使用默认的 Anthropic 托管环境,直到您在 **Project settings > Environment** 中选择一个。353每个新云线程在项目的[云环境](/docs/zh-CN/cloud-environments)中启动。环境设置线程可以到达哪些域、它们有哪些环境变量、哪些 API 凭证被添加到它们的请求中,以及设置脚本在 Claude 启动之前安装什么。云线程使用默认的 Anthropic 托管环境,直到您在 **Project settings > Environment** 中选择一个。

352 354 

353如果线程需要到达内部 API 或私有包注册表,或需要您的机器通常持有的令牌,请更改环境而不是项目:请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)、[添加 API 凭证](/docs/zh-CN/cloud-environments#add-api-credentials)和[设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)。355如果云线程需要到达内部 API 或私有包注册表,或需要您的机器通常持有的令牌,请更改环境而不是项目:请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)、[添加 API 凭证](/docs/zh-CN/cloud-environments#add-api-credentials)和[设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)。

354 356 

355<h3 id="get-skills-plugins-connectors-and-tools-into-threads">357<h3 id="get-skills-plugins-connectors-and-tools-into-threads">

356 将 skills、plugins、connectors 和工具放入线程358 将 skills、plugins、connectors 和工具放入线程

357</h3>359</h3>

358 360 

359线程是云会话,因此它们没有仅在您机器上安装的 skills、MCP 服务器、plugins 和工具。要使这些中的每一个对线程可用:361云线程没有仅在您机器上安装的 skills、MCP 服务器、plugins 和工具。线程通过[远程控制](/docs/zh-CN/remote-control)在您的机器上运行 Claude 使用那里安装的内容。要使这些中的每一个对云线程可用:

360 362 

361* Skills、subagents 和 commands:将它们提交到您添加到项目的代码库,例如 `.claude/skills/<skill-name>/SKILL.md` 处的 skill。每个线程克隆项目中的每个代码库并从每个代码库加载 `.claude/skills/`、`.claude/agents/` 和 `.claude/commands/`,因此提交到一个代码库的 skill 在每个新线程中可用。线程也加载您为 claude.ai 账户启用的 skills。363* Skills、subagents 和 commands:将它们提交到您添加到项目的代码库,例如 `.claude/skills/<skill-name>/SKILL.md` 处的 skill。每个云线程克隆项目中的每个代码库并从每个代码库加载 `.claude/skills/`、`.claude/agents/` 和 `.claude/commands/`,因此提交到一个代码库的 skill 在每个云线程中可用。云线程也加载您为 claude.ai 账户启用的 skills。

362* Plugins:在 **Project settings > Plugins** 中添加它们;它们加载到每个新线程中。代码库在其 `.claude/settings.json` 中声明的 Plugins [不在线程中加载](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup),因为线程是云会话。364* Plugins:在 **Project settings > Plugins** 中添加它们;它们加载到每个新云线程中。代码库在其 `.claude/settings.json` 中声明的 Plugins [不在云线程中加载](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)。

363* MCP 服务器:线程从您 claude.ai 账户上的连接器获取其 MCP 工具,这些是您在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 一次连接的 MCP 服务器,或通过 **Project settings > Environment** 中的 **Manage connectors** 链接。每个线程可以使用所有这些而无需每个项目的设置。项目对话本身没有连接器,因此将需要一个的工作作为线程的任务发送。在有一个代码库的项目中,线程也从该代码库的[`.mcp.json`](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)加载 MCP 服务器。[连接器如何到达 Claude Code](/docs/zh-CN/mcp#how-connectors-reach-claude-code)列出了云会话的规则和关闭连接器的设置。365* MCP 服务器:云线程从您 claude.ai 账户上的连接器获取其 MCP 工具,这些是您在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 一次连接的 MCP 服务器,或通过 **Project settings > Environment** 中的 **Manage connectors** 链接。每个云线程可以使用所有这些而无需每个项目的设置。项目对话本身没有连接器,因此将需要一个的工作作为云线程的任务发送。在有一个代码库的项目中,云线程也从该代码库的[`.mcp.json`](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)加载 MCP 服务器。[连接器如何到达 Claude Code](/docs/zh-CN/mcp#how-connectors-reach-claude-code)列出了云会话的规则和关闭连接器的设置。

364* 命令行工具和包:在环境的[设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)中安装它们。366* 命令行工具和包:在环境的[设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)中安装它们。

365 367 

366要查看运行线程在 claude.ai/code 有哪些连接器,请打开线程并从其消息框旁的 **+** 菜单中选择 **Connectors**。在那里关闭连接器会将其从该线程中移除,并且将其保存为您的账户默认值,因此新线程和 claude.ai 聊天在您重新打开它之前启动时没有它。线程在您向其发送下一条消息后获取您添加或重新连接的连接器。368要查看运行云线程在 claude.ai/code 有哪些连接器,请打开线程并从其消息框旁的 **+** 菜单中选择 **Connectors**。在那里关闭连接器会将其从该线程中移除,并且将其保存为您的账户默认值,因此新线程和 claude.ai 聊天在您重新打开它之前启动时没有它。云线程在您向其发送下一条消息后获取您添加或重新连接的连接器。

367 369 

368<h2 id="project-settings-reference">370<h2 id="project-settings-reference">

369 项目设置参考371 项目设置参考


434 项目与其他 Claude Code 功能的关系436 项目与其他 Claude Code 功能的关系

435</h2>437</h2>

436 438 

437几个 Claude Code 功能让多个会话同时工作,因此并行运行工作本身不是项目的目的。在项目中,Claude 启动和跟踪会话而不是您,每个都从相同的代码库、说明和记忆开始,工作在云中生活,只要它持续。这是每个相邻功能如何连接到项目的方式:439几个 Claude Code 功能让多个会话同时工作,因此并行运行工作本身不是项目的目的。在项目中,Claude 启动和跟踪会话而不是您,每个都从相同的说明开始。这是每个相邻功能如何连接到项目的方式:

438 440 

439* **Claude Tag**:[Claude Tag](https://claude.com/docs/claude-tag/overview) 是您团队 Slack 频道中的 Claude,在 Team 和 Enterprise 计划上。频道中的任何人都可以给它工作,频道中的每个人都看到并引导它,它使用管理员为该频道设置的连接。项目是您的:您是唯一给它工作或看到其线程的人,它使用您自己的 GitHub 访问和连接器,它在 Pro 和 Max 上。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。441* **Claude Tag**:[Claude Tag](https://claude.com/docs/claude-tag/overview) 是您团队 Slack 频道中的 Claude,在 Team 和 Enterprise 计划上。频道中的任何人都可以给它工作,频道中的每个人都看到并引导它,它使用管理员为该频道设置的连接。项目是您的:您是唯一给它工作或看到其线程的人,它使用您自己的 GitHub 访问和连接器,它在 Pro 和 Max 上。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。

440* **云会话**:每个线程都是一个[云会话](/docs/zh-CN/claude-code-on-the-web),由 Claude 而不是您启动和跟踪。您自己启动的云会话可以通过[**Continue as a project** 或 **Move to project**](#start-from-an-existing-cloud-session)成为项目或提供一个。442* **云会话**:每个线程都是一个[云会话](/docs/zh-CN/claude-code-on-the-web),除非您要求 Claude 在您的机器上运行它。无论哪种方式,Claude 启动和跟踪它而不是您。您自己启动的云会话可以通过[**Continue as a project** 或 **Move to project**](#start-from-an-existing-cloud-session)成为项目或提供一个。

441* **例程**:当您在项目中要求计划工作时,Claude 创建一个[例程](/docs/zh-CN/routines),作为该项目中的线程运行,并出现在其 **Routines** 标签页上。您在项目外创建的例程继续自己工作。443* **例程**:当您在项目中要求计划工作时,Claude 创建一个[例程](/docs/zh-CN/routines),作为该项目中的线程运行,并出现在其 **Routines** 标签页上。您在项目外创建的例程继续自己工作。

442* **本地会话和代理视图**:您的终端、IDE 或桌面应用的本地环境中的会话在您的机器上运行,不能是项目的一部分。[代理视图](/docs/zh-CN/agent-view)是用于跟踪多个这些本地会话的屏幕;它没有协调员。444* **本地会话和代理视图**:您在终端、IDE 或桌面应用的本地环境中启动的会话不能添加到项目中。项目通过[Remote Control](/docs/zh-CN/remote-control)运行线程到达您的机器。[代理视图](/docs/zh-CN/agent-view)是用于跟踪您自己启动的多个本地会话的屏幕;它没有协调员。

443* **Worktrees**:一个[worktree](/docs/zh-CN/worktrees)为每个本地会话提供其自己的代码库工作副本,因此您机器上的并行会话不会相互覆盖。线程不需要它们:每个线程将其代码库克隆到其自己的云沙箱中,并在其自己的分支上工作。445* **Worktrees**:一个[worktree](/docs/zh-CN/worktrees)为每个本地会话提供其自己的代码库工作副本,因此您机器上的并行会话不会相互覆盖。云线程不需要它们:每个线程将其代码库克隆到其自己的云沙箱中,并在其自己的分支上工作。

444* **代理团队**:一个[代理团队](/docs/zh-CN/agent-teams)是一个会话,为单个任务启动队友会话,在您的机器上或在云会话内,并以该任务结束。446* **代理团队**:一个[代理团队](/docs/zh-CN/agent-teams)是一个会话,为单个任务启动队友会话,在您的机器上或在云会话内,并以该任务结束。

445* **claude.ai 聊天和 Cowork 中的 Projects**:[早期的 Projects 体验](https://support.claude.com/en/articles/9517075-what-are-projects),对对话和参考文件进行分组,没有线程或协调员。这些项目继续按照今天的方式工作,直到重新设计的体验到达它们。447* **claude.ai 聊天和 Cowork 中的 Projects**:[早期的 Projects 体验](https://support.claude.com/en/articles/9517075-what-are-projects),对对话和参考文件进行分组,没有线程或协调员。这些项目继续按照今天的方式工作,直到重新设计的体验到达它们。

446 448 


451</h2>453</h2>

452 454 

453* Projects 在 claude.ai/code、桌面应用和 Claude 移动应用中可用,不在终端 CLI 或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 中。CLI 的 [`claude project`](/docs/zh-CN/cli-reference) 命令(它管理目录的本地 Claude Code 状态)是无关的。455* Projects 在 claude.ai/code、桌面应用和 Claude 移动应用中可用,不在终端 CLI 或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 中。CLI 的 [`claude project`](/docs/zh-CN/cli-reference) 命令(它管理目录的本地 Claude Code 状态)是无关的。

454* 项目线程是[云会话](/docs/zh-CN/claude-code-on-the-web),Anthropic 作为模型提供者。[安全](/docs/zh-CN/security)和[数据使用](/docs/zh-CN/data-usage)涵盖了云会话如何隔离以及保留什么。456* 项目线程是[云会话](/docs/zh-CN/claude-code-on-the-web),或通过[远程控制](/docs/zh-CN/remote-control)在您自己的机器上的会话,两种情况下 Anthropic 都是模型提供者。[安全](/docs/zh-CN/security)和[数据使用](/docs/zh-CN/data-usage)涵盖了云会话如何隔离以及保留什么,[连接和安全](/docs/zh-CN/remote-control#connection-and-security)涵盖了您机器上的线程如何连接以及存储什么。

455* 本地会话不能是项目的一部分。457* 您不能将自己在机器上启动的会话添加到项目中。要让项目在您的机器上运行线程,请通过[远程控制](/docs/zh-CN/remote-control#requirements)连接它应该工作的文件夹:在 Claude 桌面应用中的 **Settings > Claude Code** 下打开远程控制,或在文件夹中运行 `claude remote-control` 并让其保持运行。该机器需要 Claude Code v2.1.280 或更高版本。当您的 claude.ai 设置中的 **Require trusted devices** 打开时,项目也不能在您的机器上运行线程。

456* 线程的沙箱在轮之间暂停,并在线程继续时恢复。如果沙箱无法恢复,线程从新克隆继续,因此未提交的更改可能会丢失。在长任务上,要求 Claude 提交和推送进行中的工作。458* 云线程的沙箱在轮之间暂停,并在线程继续时恢复。如果沙箱无法恢复,线程从新克隆继续,因此未提交的更改可能会丢失。在长任务上,要求 Claude 提交和推送进行中的工作。

457* 项目属于一个用户。您不能与另一个用户共享项目或其线程,线程记录没有其他云会话具有的共享选项。在测试版期间没有项目的组织级控制。459* 项目属于一个用户。您不能与另一个用户共享项目或其线程,线程记录没有其他云会话具有的共享选项。在测试版期间没有项目的组织级控制。

458* 线程属于启动它的一个项目。您不能将线程移动或复制到另一个项目,或将其移出以独立存在。[**Move to project**](#start-from-an-existing-cloud-session)仅以另一种方式进行:它将云会话的工作带入项目。460* 线程属于启动它的一个项目。您不能将线程移动或复制到另一个项目,或将其移出以独立存在。[**Move to project**](#start-from-an-existing-cloud-session)仅以另一种方式进行:它将云会话的工作带入项目。

459 461 


467 线程看起来卡住了469 线程看起来卡住了

468</h3>470</h3>

469 471 

470Claude 不发布线程采取的每一步,因此显示为运行且项目对话中没有新消息的线程通常仍在工作。新线程也在 Claude 开始之前配置其[云环境](/docs/zh-CN/cloud-environments),因此其第一次更新需要一会儿。打开线程读取其记录。如果线程等待权限提示,请在那里回答。472Claude 不发布线程采取的每一步,因此显示为运行且项目对话中没有新消息的线程通常仍在工作。新云线程也在 Claude 开始之前配置其[云环境](/docs/zh-CN/cloud-environments),因此其第一次更新需要一会儿。打开线程读取其记录。如果线程等待权限提示,请在那里回答。

471 473 

472<h3 id="threads-guessed-or-stalled-instead-of-asking">474<h3 id="threads-guessed-or-stalled-instead-of-asking">

473 线程猜测或停滞而不是询问475 线程猜测或停滞而不是询问


489 代码库访问错误491 代码库访问错误

490</h3>492</h3>

491 493 

492三条消息意味着线程或项目无法到达其代码库之一。项目线程需要[GitHub 先决条件](#check-the-prerequisites),即使您的其他云会话无故障地克隆相同的代码库。494三条消息意味着线程或项目无法到达其代码库之一。项目的云线程需要[GitHub 先决条件](#check-the-prerequisites),即使您的其他云会话无故障地克隆相同的代码库。

493 495 

494* **"Couldn't start the session — Claude doesn't have GitHub access to this project's repository"**,在线程启动之前报告,当 Claude GitHub App 未安装在该代码库上、已暂停或未链接到您连接的 GitHub 账户时。496* **"Couldn't start the session — Claude doesn't have GitHub access to this project's repository"**,在线程启动之前报告,当 Claude GitHub App 未安装在该代码库上、已暂停或未链接到您连接的 GitHub 账户时。

495* **"Unable to access your repository"**,由线程报告,当其克隆失败时:GitHub 拒绝了克隆、在项目拥有的名称下找不到代码库,或线程被要求启动的分支不存在。497* **"Unable to access your repository"**,由线程报告,当其克隆失败时:GitHub 拒绝了克隆、在项目拥有的名称下找不到代码库,或线程被要求启动的分支不存在。


531 相关资源533 相关资源

532</h2>534</h2>

533 535 

534* [在云中使用 Claude Code](/docs/zh-CN/claude-code-on-the-web):每个线程背后的云会话如何工作,包括 GitHub 访问选项和拉取请求上的自动修复536* [在云中使用 Claude Code](/docs/zh-CN/claude-code-on-the-web):每个云线程背后的云会话如何工作,包括 GitHub 访问选项和拉取请求上的自动修复

535* [配置云环境](/docs/zh-CN/cloud-environments):更改线程可以在网络上到达什么,为它们提供环境变量和 API 凭证,并使用设置脚本安装工具537* [配置云环境](/docs/zh-CN/cloud-environments):更改云线程可以在网络上到达什么,为它们提供环境变量和 API 凭证,并使用设置脚本安装工具

536* [使用例程自动化工作](/docs/zh-CN/routines):例程的时间表、触发器和管理,包括 Claude 从项目创建的那些538* [使用例程自动化工作](/docs/zh-CN/routines):例程的时间表、触发器和管理,包括 Claude 从项目创建的那些

537* [使用代理视图管理多个代理](/docs/zh-CN/agent-view):当工作需要仅您的机器可以到达的工具或服务时,在您自己的机器上运行和跟踪多个会话539* [使用代理视图管理多个代理](/docs/zh-CN/agent-view):当工作需要仅您的机器可以到达的工具或服务时,在您自己的机器上运行和跟踪多个会话

538* [Projects redesigned: from folder to conversation](https://claude.com/blog/projects-redesigned):发布公告,带有使项目成为与 Claude 对话的思考540* [Projects redesigned: from folder to conversation](https://claude.com/blog/projects-redesigned):发布公告,带有使项目成为与 Claude 对话的思考

Details

27 安装插件27 安装插件

28</h2>28</h2>

29 29 

30在 Claude Code 会话中,从[官方 Anthropic 市场](/docs/zh-CN/discover-plugins#official-anthropic-marketplace)安装:30在 Claude Code 会话中,从[官方 Anthropic 市场](/docs/zh-CN/plugins/anthropic-marketplaces)安装:

31 31 

32```text theme={null}32```text theme={null}

33/plugin install claude-security@claude-plugins-official33/plugin install claude-security@claude-plugins-official

34```34```

35 35 

36该命令打开插件的详细信息,您可以在其中选择[安装范围](/docs/zh-CN/discover-plugins#install-plugins)来开始安装。36该命令打开插件的详细信息,您可以在其中选择[安装范围](/docs/zh-CN/plugins/install#install-a-plugin)来开始安装。

37 37 

38如果安装失败,修复方法取决于 Claude Code 报告的消息:38如果安装失败,修复方法取决于 Claude Code 报告的消息:

39 39 

40* 如果它报告 `Marketplace "claude-plugins-official" not found`,使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。40* 如果它报告 `Marketplace "claude-plugins-official" not found`,使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

41* 如果它报告[在市场中找不到该插件](/docs/zh-CN/discover-plugins#install-plugins),检查插件名称是否有拼写错误。41* 如果它报告[在市场中找不到该插件](/docs/zh-CN/plugins/install#install-a-plugin),检查插件名称是否有拼写错误。

42 42 

43检查安装摘要。如果它报告 `Run /reload-plugins to activate.`,请参阅[应用插件更改而无需重启](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting)以在当前会话中激活插件。43检查安装摘要。如果它报告 `Run /reload-plugins to activate.`,请参阅[应用插件更改而无需重启](/docs/zh-CN/plugins/cli-reference#reload-plugins)以在当前会话中激活插件。

44 44 

45一旦插件处于活跃状态,您已准备好[扫描和修复您的代码库](#scan-and-fix-your-codebase)。45一旦插件处于活跃状态,您已准备好[扫描和修复您的代码库](#scan-and-fix-your-codebase)。

46 46 


168* [Code Review](/docs/zh-CN/code-review):设置 PR 时间多代理审查168* [Code Review](/docs/zh-CN/code-review):设置 PR 时间多代理审查

169* [Claude Security](https://claude.com/product/claude-security):监控连接存储库的托管服务169* [Claude Security](https://claude.com/product/claude-security):监控连接存储库的托管服务

170* [Claude Code 安全](/docs/zh-CN/security):Claude Code 如何处理信任、权限和保护措施170* [Claude Code 安全](/docs/zh-CN/security):Claude Code 如何处理信任、权限和保护措施

171* [发现和安装插件](/docs/zh-CN/discover-plugins#official-anthropic-marketplace):浏览其他官方插件171* [安装和管理插件](/docs/zh-CN/plugins/install):从官方市场查找和安装其他插件

claude-tag.md +0 −11 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Tag

6 

7> 通过 Claude Tag 将 Claude 引入您团队的 Slack 频道,并在 claude.com 上查找其设置和使用文档。

8 

9[Claude Tag](https://claude.com/product/tag) 是一个 Slack 集成,在您团队的频道中以您组织的共享身份运行 `@Claude`,具有管理员配置的访问权限。频道中的任何人都可以在线程中标记 `@Claude` 并为其分配任务。请阅读 claude.com 上的 [Claude Tag 文档](https://claude.com/docs/claude-tag/overview)来设置并开始使用它。

10 

11Claude Tag 在 Team 和 Enterprise 计划中可用,与早期的 [Claude Code in Slack](/docs/zh-CN/slack) 不同,后者在每个会话中以个人用户的账户运行。在 Pro 和 Max 计划中,Claude Tag 不可用,Claude Code in Slack 仍然是设置路径。

Details

37| `claude import [source]` | 启动交互式会话,运行 [`/import`](/docs/zh-CN/commands#all-commands) 以将来自其他编码代理的配置引入 Claude Code。接受与命令相同的 `--dry-run` 和 `--yes` 选项。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用。当您关闭 [feature-flag fetching](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) 时也不可用。需要 Claude Code v2.1.213 或更高版本 | `claude import codex --dry-run` |37| `claude import [source]` | 启动交互式会话,运行 [`/import`](/docs/zh-CN/commands#all-commands) 以将来自其他编码代理的配置引入 Claude Code。接受与命令相同的 `--dry-run` 和 `--yes` 选项。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用。当您关闭 [feature-flag fetching](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) 时也不可用。需要 Claude Code v2.1.213 或更高版本 | `claude import codex --dry-run` |

38| `claude logs <id>` | 从 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 打印最近的输出 | `claude logs 7c5dcf5d` |38| `claude logs <id>` | 从 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 打印最近的输出 | `claude logs 7c5dcf5d` |

39| `claude mcp` | 配置 Model Context Protocol (MCP) 服务器 | 请参阅 [Claude Code MCP 文档](/docs/zh-CN/mcp)。 |39| `claude mcp` | 配置 Model Context Protocol (MCP) 服务器 | 请参阅 [Claude Code MCP 文档](/docs/zh-CN/mcp)。 |

40| `claude mcp login <name>` | 运行配置的 MCP 服务器的 OAuth 流程而不打开交互式 `/mcp` 面板。适用于 HTTP、SSE 和 claude.ai 连接器服务器。在 SSH 上添加 `--no-browser` 以打印授权 URL 而不是打开浏览器,然后在提示处粘贴重定向 URL。需要 Claude Code v2.1.186 或更高版本。请参阅 [从命令行进行身份验证](/docs/zh-CN/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |40| `claude mcp login <name>` | 运行配置的 MCP 服务器的 OAuth 流程而不打开交互式 `/mcp` 面板。适用于 HTTP、SSE 和 claude.ai 连接器服务器。在 SSH 上添加 `--no-browser` 以打印授权 URL 而不是打开浏览器,然后在提示处粘贴重定向 URL。请参阅 [从命令行进行身份验证](/docs/zh-CN/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |

41| `claude mcp logout <name>` | 清除 MCP 服务器的存储 OAuth 凭据。需要 Claude Code v2.1.186 或更高版本 | `claude mcp logout sentry` |41| `claude mcp logout <name>` | 清除 MCP 服务器的存储 OAuth 凭据 | `claude mcp logout sentry` |

42| `claude plugin` | 管理 Claude Code [plugins](/docs/zh-CN/plugins)。别名:`claude plugins`。请参阅 [plugin 参考](/docs/zh-CN/plugins-reference#cli-commands-reference) 了解子命令 | `claude plugin install code-review@claude-plugins-official` |42| `claude plugin` | 管理 Claude Code [plugins](/docs/zh-CN/plugins/overview)。别名:`claude plugins`。请参阅 [plugin 参考](/docs/zh-CN/plugins/cli-reference#claude-plugin-commands) 了解子命令 | `claude plugin install code-review@claude-plugins-official` |

43| `claude project purge [path]` | 删除项目的所有本地 Claude Code 状态:记录、任务列表、调试日志、文件编辑历史、提示历史行和项目在 `~/.claude.json` 中的条目。省略 `[path]` 以从交互式列表中选择。标志:`--dry-run` 预览,`-y`/`--yes` 跳过确认,`-i`/`--interactive` 确认每一项,`--all` 用于每个项目。请参阅 [清除本地数据](/docs/zh-CN/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |43| `claude project purge [path]` | 删除项目的所有本地 Claude Code 状态:记录、任务列表、调试日志、文件编辑历史、提示历史行和项目在 `~/.claude.json` 中的条目。省略 `[path]` 以从交互式列表中选择。标志:`--dry-run` 预览,`-y`/`--yes` 跳过确认,`-i`/`--interactive` 确认每一项,`--all` 用于每个项目。请参阅 [清除本地数据](/docs/zh-CN/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |

44| `claude remote-control` | 启动 [Remote Control](/docs/zh-CN/remote-control) 服务器以从 Claude.ai 或 Claude 应用控制 Claude Code。在服务器模式下运行(无本地交互式会话)。请参阅 [服务器模式标志](/docs/zh-CN/remote-control#start-a-remote-control-session)。停止服务器后,您可以恢复它正在服务的会话。请参阅 [停止服务器后恢复会话](/docs/zh-CN/remote-control#resume-sessions-after-stopping-the-server) | `claude remote-control --name "My Project"` |44| `claude remote-control` | 启动 [Remote Control](/docs/zh-CN/remote-control) 服务器以从 Claude.ai 或 Claude 应用控制 Claude Code。在服务器模式下运行(无本地交互式会话)。请参阅 [服务器模式标志](/docs/zh-CN/remote-control#start-a-remote-control-session)。停止服务器后,您可以恢复它正在服务的会话。请参阅 [停止服务器后恢复会话](/docs/zh-CN/remote-control#resume-sessions-after-stopping-the-server) | `claude remote-control --name "My Project"` |

45| `claude respawn <id>` | 重启 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell),运行或已停止,保持其对话完整。使用 `--all` 重启每个运行中的会话,例如以获取更新的 Claude Code 二进制文件 | `claude respawn 7c5dcf5d` |45| `claude respawn <id>` | 重启 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell),运行或已停止,保持其对话完整。使用 `--all` 重启每个运行中的会话,例如以获取更新的 Claude Code 二进制文件 | `claude respawn 7c5dcf5d` |


114| `--permission-mode` | 在指定的[权限模式](/docs/zh-CN/permission-modes)中开始。接受 `default`、`acceptEdits`、`plan`、`auto`、`dontAsk`、`bypassPermissions` 或 `manual` 作为 `default` 的别名。`manual` 别名选择 UI 标记为 Manual 的权限模式,需要 Claude Code v2.1.200 或更高版本;`claude --help` 列出它代替 `default`,两个值都有效。覆盖设置文件中的 `defaultMode`。没有此标志或 `--dangerously-skip-permissions`,新会话在[会话启动的权限模式](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)中描述的权限模式中启动。对于 `-p`,当没有配置任何内容时为 `default` | `claude --permission-mode plan` |114| `--permission-mode` | 在指定的[权限模式](/docs/zh-CN/permission-modes)中开始。接受 `default`、`acceptEdits`、`plan`、`auto`、`dontAsk`、`bypassPermissions` 或 `manual` 作为 `default` 的别名。`manual` 别名选择 UI 标记为 Manual 的权限模式,需要 Claude Code v2.1.200 或更高版本;`claude --help` 列出它代替 `default`,两个值都有效。覆盖设置文件中的 `defaultMode`。没有此标志或 `--dangerously-skip-permissions`,新会话在[会话启动的权限模式](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)中描述的权限模式中启动。对于 `-p`,当没有配置任何内容时为 `default` | `claude --permission-mode plan` |

115| `--permission-prompt-tool` | 指定 MCP 工具以在非交互模式下处理权限提示。Claude Code 在运行第一个转之前等待该工具的 MCP 服务器连接,最多 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars) 启动超时,默认 30 秒。<br /><br />提示工具无法批准标记为[需要用户交互](/docs/zh-CN/mcp#require-approval-for-a-specific-tool)的 MCP 工具:Claude Code 将其 `allow` 结果转换为拒绝。此限制需要 Claude Code v2.1.199 或更高版本 | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |115| `--permission-prompt-tool` | 指定 MCP 工具以在非交互模式下处理权限提示。Claude Code 在运行第一个转之前等待该工具的 MCP 服务器连接,最多 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars) 启动超时,默认 30 秒。<br /><br />提示工具无法批准标记为[需要用户交互](/docs/zh-CN/mcp#require-approval-for-a-specific-tool)的 MCP 工具:Claude Code 将其 `allow` 结果转换为拒绝。此限制需要 Claude Code v2.1.199 或更高版本 | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

116| `--permission-prompts` | 在打印模式下设置谁回答权限提示。使用默认 `host`,Claude Code 将它们发送到 Agent SDK 主机或 `--permission-prompt-tool` 工具。当没有人可以回答时传递 `none`,Claude Code 改为拒绝它们。请参阅[在无人值守运行中关闭权限提示](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)。需要 Claude Code v2.1.259 或更高版本 | `claude -p --permission-prompts none "query"` |116| `--permission-prompts` | 在打印模式下设置谁回答权限提示。使用默认 `host`,Claude Code 将它们发送到 Agent SDK 主机或 `--permission-prompt-tool` 工具。当没有人可以回答时传递 `none`,Claude Code 改为拒绝它们。请参阅[在无人值守运行中关闭权限提示](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)。需要 Claude Code v2.1.259 或更高版本 | `claude -p --permission-prompts none "query"` |

117| `--plugin-dir` | 从目录或 `.zip` 存档加载 plugin,或从[plugins 文件夹](/docs/zh-CN/plugins#test-your-plugins-locally)加载多个,仅用于此会话。每个标志采用一个路径。重复标志以获取更多路径:`--plugin-dir A --plugin-dir B.zip`。传递 plugins 文件夹需要 Claude Code v2.1.265 或更高版本 | `claude --plugin-dir ./my-plugin` |117| `--plugin-dir` | 从目录或 `.zip` 存档加载 plugin,或从[plugins 文件夹](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session)加载多个,仅用于此会话。每个标志采用一个路径。重复标志以获取更多路径:`--plugin-dir A --plugin-dir B.zip`。传递 plugins 文件夹需要 Claude Code v2.1.265 或更高版本 | `claude --plugin-dir ./my-plugin` |

118| `--plugin-url` | 从 URL 获取 plugin `.zip` 存档,仅用于此会话。重复标志以获取多个 plugins,或在单个引用值中传递空格分隔的 URL | `claude --plugin-url https://example.com/plugin.zip` |118| `--plugin-url` | 从 URL 获取 plugin `.zip` 存档,仅用于此会话。重复标志以获取多个 plugins,或在单个引用值中传递空格分隔的 URL | `claude --plugin-url https://example.com/plugin.zip` |

119| `--print`, `-p` | 打印响应而不进行交互模式(有关编程使用详情,请参阅 [Agent SDK 文档](/docs/zh-CN/agent-sdk/overview)) | `claude -p "query"` |119| `--print`, `-p` | 打印响应而不进行交互模式(有关编程使用详情,请参阅 [Agent SDK 文档](/docs/zh-CN/agent-sdk/overview)) | `claude -p "query"` |

120| `--prompt-suggestions` | 在生成提示建议的每个转之后发出 `prompt_suggestion` 消息,其中包含预测的下一个用户提示;非常短的对话可能不会产生任何。需要 `--print`、`--output-format stream-json` 和 `--verbose`。请参阅[提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |120| `--prompt-suggestions` | 在生成提示建议的每个转之后发出 `prompt_suggestion` 消息,其中包含预测的下一个用户提示;非常短的对话可能不会产生任何。需要 `--print`、`--output-format stream-json` 和 `--verbose`。请参阅[提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |


134| `--system-prompt-file` | 从文件加载系统提示,替换默认提示 | `claude --system-prompt-file ./custom-prompt.txt` |134| `--system-prompt-file` | 从文件加载系统提示,替换默认提示 | `claude --system-prompt-file ./custom-prompt.txt` |

135| `--system-prompt-snapshot` | 传递 `off` 以在每个请求上重建系统提示,而不是重用在对话的第一个请求上[记录的提示](#system-prompt-flags-in-resumed-conversations),例如在跨 `--continue` 运行迭代其措辞时。需要 Claude Code v2.1.257 或更高版本 | `claude --system-prompt-snapshot off` |135| `--system-prompt-snapshot` | 传递 `off` 以在每个请求上重建系统提示,而不是重用在对话的第一个请求上[记录的提示](#system-prompt-flags-in-resumed-conversations),例如在跨 `--continue` 运行迭代其措辞时。需要 Claude Code v2.1.257 或更高版本 | `claude --system-prompt-snapshot off` |

136| `--teleport` | 在本地终端中恢复[云会话](/docs/zh-CN/claude-code-on-the-web) | `claude --teleport` |136| `--teleport` | 在本地终端中恢复[云会话](/docs/zh-CN/claude-code-on-the-web) | `claude --teleport` |

137| `--teammate-mode` | 设置[代理团队](/docs/zh-CN/agent-teams)队友的显示方式:`in-process`(默认)、`auto`、`tmux` 或 `iterm2`(在 v2.1.186 中添加)。覆盖此会话的 [`teammateMode`](/docs/zh-CN/settings-reference#teammatemode) 设置。请参阅[选择显示模式](/docs/zh-CN/agent-teams#choose-a-display-mode) | `claude --teammate-mode auto` |137| `--teammate-mode` | 设置[代理团队](/docs/zh-CN/agent-teams)队友的显示方式:`in-process`(默认)、`auto`、`tmux` 或 `iterm2`。覆盖此会话的 [`teammateMode`](/docs/zh-CN/settings-reference#teammatemode) 设置。请参阅[选择显示模式](/docs/zh-CN/agent-teams#choose-a-display-mode) | `claude --teammate-mode auto` |

138| `--tmux` | 为 worktree 创建 tmux 会话。需要 `--worktree`。在可用时使用 iTerm2 本机窗格;传递 `--tmux=classic` 以获得传统 tmux | `claude -w feature-auth --tmux` |138| `--tmux` | 为 worktree 创建 tmux 会话。需要 `--worktree`。在可用时使用 iTerm2 本机窗格;传递 `--tmux=classic` 以获得传统 tmux | `claude -w feature-auth --tmux` |

139| `--tools` | 限制 Claude 可以使用的内置工具。使用 `""` 禁用所有,`"default"` 用于默认集,或工具名称如 `"Bash,Edit,Read"`。在 macOS、Linux 和 WSL 上,默认集省略 `Glob` 和 `Grep`,如[Glob 工具行为](/docs/zh-CN/tools-reference#glob-tool-behavior)下所述。如果您在此处命名[任务跟踪工具](/docs/zh-CN/tools-reference#task-tool-availability)之一,Claude Code 也会选择加入。标志不影响 MCP 工具;要拒绝这些工具,请使用 `--disallowedTools "mcp__*"`。省略 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 的列表不会删除它;`""` 仅在没有 MCP 工具保持时删除它 | `claude --tools "Bash,Edit,Read"` |139| `--tools` | 限制 Claude 可以使用的内置工具。使用 `""` 禁用所有,`"default"` 用于默认集,或工具名称如 `"Bash,Edit,Read"`。在 macOS、Linux 和 WSL 上,默认集省略 `Glob` 和 `Grep`,如[Glob 工具行为](/docs/zh-CN/tools-reference#glob-tool-behavior)下所述。如果您在此处命名[任务跟踪工具](/docs/zh-CN/tools-reference#task-tool-availability)之一,Claude Code 也会选择加入。标志不影响 MCP 工具;要拒绝这些工具,请使用 `--disallowedTools "mcp__*"`。省略 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 的列表不会删除它;`""` 仅在没有 MCP 工具保持时删除它 | `claude --tools "Bash,Edit,Read"` |

140| `--verbose` | 启用详细日志记录,显示完整的逐个转输出。覆盖此会话的 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 设置 | `claude --verbose` |140| `--verbose` | 启用详细日志记录,显示完整的逐个转输出。覆盖此会话的 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 设置 | `claude --verbose` |

Details

300| 您的存储库的 `.mcp.json` MCP 服务器 | 是,在具有一个存储库的会话中 | 克隆的一部分,从会话的工作目录中找到 |300| 您的存储库的 `.mcp.json` MCP 服务器 | 是,在具有一个存储库的会话中 | 克隆的一部分,从会话的工作目录中找到 |

301| 您的存储库的 `.claude/rules/` | 是 | 克隆的一部分 |301| 您的存储库的 `.claude/rules/` | 是 | 克隆的一部分 |

302| 您的存储库的 `.claude/skills/`、`.claude/agents/`、`.claude/commands/` | 是 | 克隆的一部分 |302| 您的存储库的 `.claude/skills/`、`.claude/agents/`、`.claude/commands/` | 是 | 克隆的一部分 |

303| 在您的存储库的 `.claude/settings.json` 中声明的 Plugins 和 marketplaces | 否 | 云会话不会安装存储库在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 下启用的 plugins,包括来自它在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下列出的 marketplaces 的 plugins。请改为为您的 claude.ai 账户启用 plugin,以便 Claude Code 将其作为[同步 plugin](/docs/zh-CN/plugins-reference#synced-plugins)加载 |303| 在您的存储库的 `.claude/settings.json` 中声明的 plugins 和 marketplaces | 否 | 云会话不会安装存储库在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 下启用的 plugins,包括来自它在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下列出的 marketplaces 的 plugins |

304| 您组织的[服务器管理的设置](/docs/zh-CN/server-managed-settings) | 是 | 在会话启动时从 Anthropic 的服务器获取。请参阅 [Surface coverage](/docs/zh-CN/model-config#surface-coverage) 了解 `availableModels` 在云会话中如何强制执行。通过 MDM 或管理配置文件部署到您设备的设置不适用,因为会话在 Anthropic 管理的 VM 上运行;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,会话也会读取运行器镜像中的管理设置文件,根据 [Claude Code 如何组合管理来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources) |304| 您组织的[服务器管理的设置](/docs/zh-CN/server-managed-settings) | 是 | 在会话启动时从 Anthropic 的服务器获取。请参阅 [Surface coverage](/docs/zh-CN/model-config#surface-coverage) 了解 `availableModels` 在云会话中如何强制执行。通过 MDM 或管理配置文件部署到您设备的设置不适用,因为会话在 Anthropic 管理的 VM 上运行;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,会话也会读取运行器镜像中的管理设置文件,根据 [Claude Code 如何组合管理来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources) |

305| 您的用户 `~/.claude/CLAUDE.md` | 否 | 位于您的机器上,不在存储库中 |305| 您的用户 `~/.claude/CLAUDE.md` | 否 | 位于您的机器上,不在存储库中 |

306| 您的用户 `~/.claude/skills/`、`~/.claude/agents/`、`~/.claude/commands/` | 否 | 位于您的机器上,不在存储库中。请改为将它们提交到存储库的 `.claude/` 目录。云会话会自动加载您在 claude.ai 上启用的技能 |306| 您的用户 `~/.claude/skills/`、`~/.claude/agents/`、`~/.claude/commands/` | 否 | 位于您的机器上,不在存储库中。请改为将它们提交到存储库的 `.claude/` 目录。云会话会自动加载您在 claude.ai 上启用的技能 |

307| 仅在您的用户设置中启用的 Plugins | 否 | 用户范围的 `enabledPlugins` 位于您机器上的 `~/.claude/settings.json`。请改为为您的 claude.ai 账户启用它们,以便 Claude Code 将它们作为[同步 plugins](/docs/zh-CN/plugins-reference#synced-plugins)加载 |307| 仅在您的用户设置中启用的 plugins | 否 | 用户范围的 `enabledPlugins` 位于您机器上的 `~/.claude/settings.json` |

308| 您使用 `claude mcp add` 在默认本地范围或用户范围添加的 MCP 服务器 | 否 | 这些写入您机器上的 `~/.claude.json`,而不是存储库。请使用 `claude mcp add --scope project` 添加服务器,它会写入存储库的 [`.mcp.json`](/docs/zh-CN/mcp#project-scope),并提交该文件。具有一个存储库的会话会加载它 |308| 您使用 `claude mcp add` 在默认本地范围或用户范围添加的 MCP 服务器 | 否 | 这些写入您机器上的 `~/.claude.json`,而不是存储库。请使用 `claude mcp add --scope project` 添加服务器,它会写入存储库的 [`.mcp.json`](/docs/zh-CN/mcp#project-scope),并提交该文件。具有一个存储库的会话会加载它 |

309| 您的存储库的 `.claude/settings.json` `env` 块中的传输变量,例如 `NODE_EXTRA_CA_CERTS` 和 [mTLS 客户端证书变量](/docs/zh-CN/network-config#mtls-authentication) | 否 | 托管环境管理会话的 API 连接,因此 Claude Code 忽略这些键,并在会话的调试日志中记录每个被忽略的键 |309| 您的存储库的 `.claude/settings.json` `env` 块中的传输变量,例如 `NODE_EXTRA_CA_CERTS` 和 [mTLS 客户端证书变量](/docs/zh-CN/network-config#mtls-authentication) | 否 | 托管环境管理会话的 API 连接,因此 Claude Code 忽略这些键,并在会话的调试日志中记录每个被忽略的键 |

310| Claude 调用的服务的 API 密钥和令牌 | 在 Pro 和 Max 计划中,作为 [API 凭证](#add-api-credentials) | 您在环境中添加一次密钥,代理会将其附加到您列出的主机的请求。代理[无法附加](#requests-that-never-get-the-credential)的密钥,或 Team 或 Enterprise 计划中的任何密钥,保留在环境变量中 |310| Claude 调用的服务的 API 密钥和令牌 | 在 Pro 和 Max 计划中,作为 [API 凭证](#add-api-credentials) | 您在环境中添加一次密钥,代理会将其附加到您列出的主机的请求。代理[无法附加](#requests-that-never-get-the-credential)的密钥,或 Team 或 Enterprise 计划中的任何密钥,保留在环境变量中 |

commands.md +4 −4

Details

61| `/autocompact [auto\|<tokens>]` | 设置自动压缩窗口:在 Claude Code 自动压缩之前上下文窗口有多满。传递一个大小,例如 `500k`,或 `auto` 以返回为你的模型调整的窗口。Claude Code 将该值保存到用户设置并将其应用于当前会话。有关接受的值和覆盖它的内容,请参阅[设置自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)。没有参数时,打开一个显示当前窗口的对话框。需要 Claude Code v2.1.221 或更高版本 |61| `/autocompact [auto\|<tokens>]` | 设置自动压缩窗口:在 Claude Code 自动压缩之前上下文窗口有多满。传递一个大小,例如 `500k`,或 `auto` 以返回为你的模型调整的窗口。Claude Code 将该值保存到用户设置并将其应用于当前会话。有关接受的值和覆盖它的内容,请参阅[设置自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)。没有参数时,打开一个显示当前窗口的对话框。需要 Claude Code v2.1.221 或更高版本 |

62| `/autofix-pr [prompt]` | 生成一个 [cloud session](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests) 会话,监视当前分支的 PR 并在 CI 失败或审阅者留下评论时推送修复。使用 `gh pr view` 从你的检出分支检测打开的 PR;要监视不同的 PR,请先检出其分支。默认情况下,云会话被告知修复每个 CI 失败和审阅评论;传递一个提示词以给它不同的指令,例如 `/autofix-pr only fix lint and type errors`。需要 `gh` CLI 和访问 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) |62| `/autofix-pr [prompt]` | 生成一个 [cloud session](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests) 会话,监视当前分支的 PR 并在 CI 失败或审阅者留下评论时推送修复。使用 `gh pr view` 从你的检出分支检测打开的 PR;要监视不同的 PR,请先检出其分支。默认情况下,云会话被告知修复每个 CI 失败和审阅评论;传递一个提示词以给它不同的指令,例如 `/autofix-pr only fix lint and type errors`。需要 `gh` CLI 和访问 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) |

63| `/background [prompt]` | 分离当前会话以作为[后台代理](/docs/zh-CN/agent-view)运行并释放此终端。传递一个提示词以在分离前发送一个更多指令。使用 `claude agents` 监视会话。要将对话复制到新的后台会话中,同时此会话继续运行,请使用 `/fork`。别名:`/bg` |63| `/background [prompt]` | 分离当前会话以作为[后台代理](/docs/zh-CN/agent-view)运行并释放此终端。传递一个提示词以在分离前发送一个更多指令。使用 `claude agents` 监视会话。要将对话复制到新的后台会话中,同时此会话继续运行,请使用 `/fork`。别名:`/bg` |

64| `/batch <instruction>` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在整个代码库中并行编排大规模更改。研究代码库,将工作分解为 5 到 30 个独立单元,并呈现一个计划。获得批准后,在隔离的 [git worktree](/docs/zh-CN/worktrees) 中为每个单元生成一个[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)。每个子代理实现其单元,运行测试,并打开一个拉取请求。需要一个 git 存储库。示例:`/batch migrate src/ from JavaScript to TypeScript` |64| `/batch <instruction>` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在整个代码库中并行编排大规模更改。研究代码库,将工作分解为 5 到 30 个独立单元,并呈现一个计划。获得批准后,在隔离的 [worktree](/docs/zh-CN/worktrees) 中为每个单元生成一个[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)。每个子代理实现其单元,运行测试,并发布其更改。需要一个 git 存储库或一个[`WorktreeCreate` hook](/docs/zh-CN/worktrees#non-git-version-control)来创建 worktree。在 git 存储库之外,`/batch` 需要 Claude Code v2.1.281 或更高版本。示例:`/batch migrate src/ from JavaScript to TypeScript` |

65| `/branch [name]` | 在此点创建当前对话的一个分支,以便你可以尝试不同的方向而不会丢失对话。切换到分支并保留原始分支,你可以使用 `/resume` 返回到它。要运行一个副本作为单独的[后台会话](/docs/zh-CN/agent-view)而不是切换到它,请使用 `/fork`;要将一个侧面任务交给一个[子代理](/docs/zh-CN/sub-agents),它报告回这个对话,请使用 `/subtask` |65| `/branch [name]` | 在此点创建当前对话的一个分支,以便你可以尝试不同的方向而不会丢失对话。切换到分支并保留原始分支,你可以使用 `/resume` 返回到它。要运行一个副本作为单独的[后台会话](/docs/zh-CN/agent-view)而不是切换到它,请使用 `/fork`;要将一个侧面任务交给一个[子代理](/docs/zh-CN/sub-agents),它报告回这个对话,请使用 `/subtask` |

66| `/btw [question]` | 询问一个[侧面问题](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)关于当前会话而不添加到对话中。如果你运行 `/btw` 而没有问题,Claude Code 会显示你最近的侧面问题,以便你可以浏览早期的答案;如果你还没有问过,Claude Code 会打印一条使用行。在 v2.1.212 之前,`/btw` 需要一个问题 |66| `/btw [question]` | 询问一个[侧面问题](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)关于当前会话而不添加到对话中。如果你运行 `/btw` 而没有问题,Claude Code 会显示你最近的侧面问题,以便你可以浏览早期的答案;如果你还没有问过,Claude Code 会打印一条使用行。在 v2.1.212 之前,`/btw` 需要一个问题 |

67| `/bug [report]` | 报告一个错误或分享你的对话。你选择要包含多少会话历史记录,并在发送任何内容之前在同意屏幕上确认。当你在第一方连接上登录到 Anthropic 时,报告会发送到 Anthropic;在第三方提供商上,或没有 Anthropic 凭证,Claude Code 会将报告写入一个[本地存档在 `~/.claude/feedback-bundles/`](/docs/zh-CN/data-usage#telemetry-services),你自己转发。在 [VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)中,`/bug` 打开扩展自己的反馈对话框;需要 Claude Code v2.1.229 或更高版本。当你在 Claude 响应时运行它时,Claude Code 立即打开对话框。在 v2.1.232 之前,Claude Code 会将命令排队直到轮次完成。别名:`/share`。在 v2.1.212 之前,`/bug` 和 `/share` 是 `/feedback` 的别名 |67| `/bug [report]` | 报告一个错误或分享你的对话。你选择要包含多少会话历史记录,并在发送任何内容之前在同意屏幕上确认。当你在第一方连接上登录到 Anthropic 时,报告会发送到 Anthropic;在第三方提供商上,或没有 Anthropic 凭证,Claude Code 会将报告写入一个[本地存档在 `~/.claude/feedback-bundles/`](/docs/zh-CN/data-usage#telemetry-services),你自己转发。在 [VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)中,`/bug` 打开扩展自己的反馈对话框;需要 Claude Code v2.1.229 或更高版本。当你在 Claude 响应时运行它时,Claude Code 立即打开对话框。在 v2.1.232 之前,Claude Code 会将命令排队直到轮次完成。别名:`/share`。在 v2.1.212 之前,`/bug` 和 `/share` 是 `/feedback` 的别名 |

68| `/cd <path>` | 将此会话移动到新的工作目录,保持对话。输入部分路径以查看匹配的目录建议;按 `Tab` 接受一个。建议需要 Claude Code v2.1.206 或更高版本。有关 Claude Code 在移动时立即应用的内容,以及 `/cd` 与 `/add-dir` 的区别,请参阅[将会话移动到另一个目录](/docs/zh-CN/permissions#move-the-session-to-another-directory) |68| `/cd <path>` | 将此会话移动到新的工作目录,保持对话。输入部分路径以查看匹配的目录建议;按 `Tab` 接受一个。建议需要 Claude Code v2.1.206 或更高版本。有关 Claude Code 在移动时立即应用的内容,以及 `/cd` 与 `/add-dir` 的区别,请参阅[将会话移动到另一个目录](/docs/zh-CN/permissions#move-the-session-to-another-directory) |

69| `/chrome` | 配置 [Claude in Chrome](/docs/zh-CN/chrome) 设置 |69| `/chrome` | 配置 [Claude in Chrome](/docs/zh-CN/chrome) 设置 |

70| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为你的项目的语言加载 [Claude API](https://platform.claude.com/docs/en/api/overview) 和 [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) 参考资料。当你的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。运行 `migrate` 以将现有 Claude API 代码更新到更新的模型。运行 `upgrade` 以跨主要版本移动你的项目的 Anthropic SDK 依赖项,目前是 Python `anthropic` 包从 0.x 到 1.x。运行 `managed-agents-onboard` 以获得创建新 Managed Agent 的演练。运行 `prompt-audit` 以标记为旧模型编写的指令在你的提示词、skill 和工具描述中,并提议修复作为差异。运行 `cost-optimize` 以分析你的项目的 Claude API 支出去向,并提议从选项(如 prompt caching、修剪不需要的输入和输出令牌、批处理、工作量和模型选择)中节省,一次一个更改。运行 `build-eval` 以为你的 Claude 驱动的应用构建一个 eval 集,运行 `hillclimb` 以针对现有 eval 迭代改进应用。`prompt-audit` 子命令需要 Claude Code v2.1.221 或更高版本,`upgrade` 需要 v2.1.236 或更高版本,`cost-optimize` 需要 v2.1.247 或更高版本,`build-eval` 和 `hillclimb` 需要 v2.1.259 或更高版本 |70| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为你的项目的语言加载 [Claude API](https://platform.claude.com/docs/en/api/overview) 和 [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) 参考资料。当你的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。运行 `migrate` 以将现有 Claude API 代码更新到更新的模型。运行 `upgrade` 以跨主要版本移动你的项目的 Anthropic SDK 依赖项,目前是 Python `anthropic` 包从 0.x 到 1.x。运行 `managed-agents-onboard` 以获得创建新 Managed Agent 的演练。运行 `prompt-audit` 以标记为旧模型编写的指令在你的提示词、skill 和工具描述中,并提议修复作为差异。运行 `cost-optimize` 以分析你的项目的 Claude API 支出去向,并提议从选项(如 prompt caching、修剪不需要的输入和输出令牌、批处理、工作量和模型选择)中节省,一次一个更改。运行 `build-eval` 以为你的 Claude 驱动的应用构建一个 eval 集,运行 `hillclimb` 以针对现有 eval 迭代改进应用。`prompt-audit` 子命令需要 Claude Code v2.1.221 或更高版本,`upgrade` 需要 v2.1.236 或更高版本,`cost-optimize` 需要 v2.1.247 或更高版本,`build-eval` 和 `hillclimb` 需要 v2.1.259 或更高版本 |

71| `/clear [name]` | 使用空上下文启动新对话。传递一个名称以在 `/resume` 选择器中标记上一个对话。要在继续同一对话的同时释放上下文,请改用 `/compact`。使用 `/resume` 恢复上一个对话,或在同一 Claude Code 进程中,从[倒带菜单的上一个会话条目](/docs/zh-CN/checkpointing#rewind-past-a-cleared-conversation)恢复它。倒带条目需要 Claude Code v2.1.191 或更高版本。别名:`/reset`、`/new` |71| `/clear [name]` | 使用空上下文启动新对话。传递一个名称以在 `/resume` 选择器中标记上一个对话。要在继续同一对话的同时释放上下文,请改用 `/compact`。使用 `/resume` 恢复上一个对话,或在同一 Claude Code 进程中,从[倒带菜单的上一个会话条目](/docs/zh-CN/checkpointing#rewind-past-a-cleared-conversation)恢复它。别名:`/reset`、`/new` |

72| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查当前差异,或你传递的 PR 号、分支或路径,以查找正确性错误。根据你的模型和工作量级别,审查也涵盖清理机会。传递 `--fix` 以应用发现,`--comment` 以在 GitHub PR 或 GitLab 合并请求上发布它们,或 `ultra` 以运行深度[云审查](/docs/zh-CN/ultrareview)。发布到 GitLab 合并请求需要 Claude Code v2.1.257 或更高版本。在 `github.com` PR 目标上使用 `ultra` 时,传递 `--post` 以在启动对话框中预选[将完成的发现发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request);`--post` 需要 Claude Code v2.1.227 或更高版本。有关工作量级别、目标和它与 `/simplify` 的关系,请参阅[本地审查差异](/docs/zh-CN/code-review#review-a-diff-locally)。别名:`/review` |72| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查当前差异,或你传递的 PR 号、分支或路径,以查找正确性错误。根据你的模型和工作量级别,审查也涵盖清理机会。传递 `--fix` 以应用发现,`--comment` 以在 GitHub PR 或 GitLab 合并请求上发布它们,或 `ultra` 以运行深度[云审查](/docs/zh-CN/ultrareview)。发布到 GitLab 合并请求需要 Claude Code v2.1.257 或更高版本。在 `github.com` PR 目标上使用 `ultra` 时,传递 `--post` 以在启动对话框中预选[将完成的发现发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request);`--post` 需要 Claude Code v2.1.227 或更高版本。有关工作量级别、目标和它与 `/simplify` 的关系,请参阅[本地审查差异](/docs/zh-CN/code-review#review-a-diff-locally)。别名:`/review` |

73| `/color [color\|default]` | 为当前会话设置提示栏颜色。可用颜色:`red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink`、`cyan`。使用 `default` 重置,或运行不带参数以选择随机颜色。当 [Remote Control](/docs/zh-CN/remote-control) 连接时,颜色同步到 claude.ai/code。也可在非交互模式 (`-p`) 中使用;需要 Claude Code v2.1.205 或更高版本 |73| `/color [color\|default]` | 为当前会话设置提示栏颜色。可用颜色:`red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink`、`cyan`。使用 `default` 重置,或运行不带参数以选择随机颜色。当 [Remote Control](/docs/zh-CN/remote-control) 连接时,颜色同步到 claude.ai/code。也可在非交互模式 (`-p`) 中使用;需要 Claude Code v2.1.205 或更高版本 |

74| `/compact [instructions]` | 通过总结到目前为止的对话来释放上下文。可选地为摘要传递焦点指令。请参阅[压缩如何处理规则、skill 和内存文件](/docs/zh-CN/context-window#what-survives-compaction) |74| `/compact [instructions]` | 通过总结到目前为止的对话来释放上下文。可选地为摘要传递焦点指令。请参阅[压缩如何处理规则、skill 和内存文件](/docs/zh-CN/context-window#what-survives-compaction) |


116| `/passes` | 与朋友分享 Claude Code 的免费一周。仅在你的账户符合条件时可见 |116| `/passes` | 与朋友分享 Claude Code 的免费一周。仅在你的账户符合条件时可见 |

117| `/permissions` | 管理工具权限的允许、询问和拒绝规则。打开一个交互式对话框,你可以按范围查看规则、添加或移除规则、管理工作目录,以及审查[最近的自动模式拒绝](/docs/zh-CN/auto-mode-config#review-denials)。你也可以从对话框的**自动模式**选项卡查看和编辑[自动模式分类器规则](/docs/zh-CN/auto-mode-config#edit-rules-from-permissions)。当你在 Claude 响应时运行它时,Claude Code 立即打开对话框并从 Claude 在同一轮中的下一个工具调用开始应用你的更改。在 v2.1.234 之前,Claude Code 会将命令排队直到轮次完成。别名:`/allowed-tools` |117| `/permissions` | 管理工具权限的允许、询问和拒绝规则。打开一个交互式对话框,你可以按范围查看规则、添加或移除规则、管理工作目录,以及审查[最近的自动模式拒绝](/docs/zh-CN/auto-mode-config#review-denials)。你也可以从对话框的**自动模式**选项卡查看和编辑[自动模式分类器规则](/docs/zh-CN/auto-mode-config#edit-rules-from-permissions)。当你在 Claude 响应时运行它时,Claude Code 立即打开对话框并从 Claude 在同一轮中的下一个工具调用开始应用你的更改。在 v2.1.234 之前,Claude Code 会将命令排队直到轮次完成。别名:`/allowed-tools` |

118| `/plan [description]` | 直接从提示词进入计划模式。传递可选描述以进入计划模式并立即开始该任务,例如 `/plan fix the auth bug` |118| `/plan [description]` | 直接从提示词进入计划模式。传递可选描述以进入计划模式并立即开始该任务,例如 `/plan fix the auth bug` |

119| `/plugin [subcommand]` | 管理 Claude Code [plugins](/docs/zh-CN/plugins)。运行不带参数以打开插件菜单,或传递子命令如 `list`、`install`、`enable` 或 `disable` 以直接操作。Claude Code 可以在安装期间激活插件;[安装摘要](/docs/zh-CN/discover-plugins#install-plugins)告诉你它是否做了或是否运行 `/reload-plugins` |119| `/plugin [subcommand]` | 管理 Claude Code [plugins](/docs/zh-CN/plugins/overview)。运行不带参数以打开插件菜单,或传递子命令如 `list`、`install`、`enable` 或 `disable` 以直接操作。Claude Code 可以在安装期间激活插件;[安装摘要](/docs/zh-CN/plugins/install#install-a-plugin)告诉你它是否做了或是否运行 `/reload-plugins` |

120| `/powerup` | 通过带有动画演示的快速交互式课程发现 Claude Code 功能 |120| `/powerup` | 通过带有动画演示的快速交互式课程发现 Claude Code 功能 |

121| `/pr-comments [PR]` | 在 v2.1.91 中移除。直接要求 Claude 查看拉取请求评论。在早期版本上,从 GitHub 拉取请求获取和显示评论;自动检测当前分支的 PR,或传递 PR URL 或号码。需要 `gh` CLI |121| `/pr-comments [PR]` | 在 v2.1.91 中移除。直接要求 Claude 查看拉取请求评论。在早期版本上,从 GitHub 拉取请求获取和显示评论;自动检测当前分支的 PR,或传递 PR URL 或号码。需要 `gh` CLI |

122| `/privacy-settings` | 查看和更新你的隐私设置。仅对 Pro 和 Max 计划订阅者可用 |122| `/privacy-settings` | 查看和更新你的隐私设置。仅对 Pro 和 Max 计划订阅者可用 |


124| `/rate-limit-options` | 显示在 claude.ai 使用限制阻止请求时继续工作的方法:等待并[在限制重置时自动继续](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset)、添加[使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)或升级你的计划。Claude Code 也可以在你在自己的终端上达到限制时自己打开此菜单。请参阅[关闭自动继续](/docs/zh-CN/interactive-mode#turn-automatic-continue-off)。需要 claude.ai 订阅。不出现在命令菜单中;完整输入它。等待和继续行需要 Claude Code v2.1.234 或更高版本 |124| `/rate-limit-options` | 显示在 claude.ai 使用限制阻止请求时继续工作的方法:等待并[在限制重置时自动继续](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset)、添加[使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)或升级你的计划。Claude Code 也可以在你在自己的终端上达到限制时自己打开此菜单。请参阅[关闭自动继续](/docs/zh-CN/interactive-mode#turn-automatic-continue-off)。需要 claude.ai 订阅。不出现在命令菜单中;完整输入它。等待和继续行需要 Claude Code v2.1.234 或更高版本 |

125| `/recap` | 按需生成当前会话的一行摘要。请参阅[会话摘要](/docs/zh-CN/interactive-mode#session-recap)以获得你离开后出现的自动摘要 |125| `/recap` | 按需生成当前会话的一行摘要。请参阅[会话摘要](/docs/zh-CN/interactive-mode#session-recap)以获得你离开后出现的自动摘要 |

126| `/release-notes` | 在交互式版本选择器中查看更改日志。选择特定版本以查看其发布说明,或选择显示所有版本。说明出现在你的记录中而不进入 Claude 看到的对话 |126| `/release-notes` | 在交互式版本选择器中查看更改日志。选择特定版本以查看其发布说明,或选择显示所有版本。说明出现在你的记录中而不进入 Claude 看到的对话 |

127| `/reload-plugins [--force]` | 重新加载所有活跃[插件](/docs/zh-CN/plugins)以应用待处理更改而不重新启动。报告每个重新加载组件的计数并标记任何加载错误。当重新加载会改变加载哪些 MCP 工具并使提示词缓存失效时,命令警告并跳过,除非你传递 `--force`。也可在非交互模式 (`-p`)、Agent SDK 和桌面应用中使用,其中它仅在直接输入到会话的输入上运行,不应用插件 MCP 服务器更改;需要 Claude Code v2.1.260 或更高版本。请参阅[应用插件更改而不重新启动](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) |127| `/reload-plugins [--force]` | 重新加载所有活跃[插件](/docs/zh-CN/plugins/overview)以应用待处理更改而不重新启动。报告每个重新加载组件的计数并标记任何加载错误。当重新加载会改变加载哪些 MCP 工具并使提示词缓存失效时,命令警告并跳过,除非你传递 `--force`。也可在非交互模式 (`-p`)、Agent SDK 和桌面应用中使用,其中它仅在直接输入到会话的输入上运行,不应用插件 MCP 服务器更改;需要 Claude Code v2.1.260 或更高版本。请参阅[应用插件更改而不重新启动](/docs/zh-CN/plugins/cli-reference#reload-plugins) |

128| `/reload-skills` | 重新扫描 [skill](/docs/zh-CN/skills) 和命令目录,以便在会话期间添加或更改的 skill 在磁盘上变得可用而不重新启动。报告有多少 skill 可用以及添加或移除了多少 |128| `/reload-skills` | 重新扫描 [skill](/docs/zh-CN/skills) 和命令目录,以便在会话期间添加或更改的 skill 在磁盘上变得可用而不重新启动。报告有多少 skill 可用以及添加或移除了多少 |

129| `/remote-control` | 使此会话可从 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行它会打印 Remote Control 需要 claude.ai 订阅并告诉你如何登录;在 v2.1.206 之前它报告 `Unknown command: /remote-control`。别名:`/rc` |129| `/remote-control` | 使此会话可从 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行它会打印 Remote Control 需要 claude.ai 订阅并告诉你如何登录;在 v2.1.206 之前它报告 `Unknown command: /remote-control`。别名:`/rc` |

130| `/remote-env` | 为你从 CLI 启动的 cloud sessions 选择默认[云环境](/docs/zh-CN/cloud-environments#select-an-environment-from-the-cli) |130| `/remote-env` | 为你从 CLI 启动的 cloud sessions 选择默认[云环境](/docs/zh-CN/cloud-environments#select-an-environment-from-the-cli) |

Details

110 110 

111 * 明确说明您要查找的内容111 * 明确说明您要查找的内容

112 * 使用项目中的领域语言112 * 使用项目中的领域语言

113 * 为您的语言安装[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence),以便 Claude 能够精确地进行"转到定义"和"查找引用"导航113 * 为您的语言安装 [code intelligence plugin](/docs/zh-CN/plugins/code-intelligence),以便 Claude 能够精确地进行"转到定义"和"查找引用"导航

114</Tip>114</Tip>

115 115 

116***116***


157 157 

158假设您需要更新旧代码以使用现代模式和实践。158假设您需要更新旧代码以使用现代模式和实践。

159 159 

160有关将整个代码库迁移到新语言的信息,请参阅博客上的[Anthropic 如何使用 Claude Code 运行大规模代码迁移](https://claude.com/blog/ai-code-migration)。160有关将整个代码库迁移到新语言的信息,请参阅博客上的 [Anthropic 如何使用 Claude Code 运行大规模代码迁移](https://claude.com/blog/ai-code-migration)。

161 161 

162<Steps>162<Steps>

163 <Step title="识别用于重构的遗留代码">163 <Step title="识别用于重构的遗留代码">


259 </Step>259 </Step>

260</Steps>260</Steps>

261 261 

262要稍后找到会话,请运行 `claude --from-pr 1234`,将 1234 替换为您自己的 PR 编号,这会打开会话选择器,筛选链接到该 PR 的会话,或将 PR URL 粘贴到 [`/resume` 选择器](/docs/zh-CN/sessions#use-the-session-picker)搜索中。当 Claude 使用 `gh pr create` 或 `glab mr create` 创建拉取请求时,Claude Code 会将会话链接到 PR,以及当 Claude [处理现有 PR](/docs/zh-CN/agent-view#pull-request-status) 时。262要稍后找到会话,请运行 `claude --from-pr 1234`,将 1234 替换为您自己的 PR 编号,这会打开会话选择器,筛选链接到该 PR 的会话,或将 PR URL 粘贴到 [`/resume` 选择器](/docs/zh-CN/sessions#use-the-session-picker) 搜索中。当 Claude 使用 `gh pr create` 或 `glab mr create` 创建拉取请求时,Claude Code 会将会话链接到 PR,以及当 Claude [处理现有 PR](/docs/zh-CN/agent-view#pull-request-status) 时。

263 263 

264<Tip>264<Tip>

265 在提交前审查 Claude 生成的 PR,并要求 Claude 突出显示潜在的风险或注意事项。265 在提交前审查 Claude 生成的 PR,并要求 Claude 突出显示潜在的风险或注意事项。


329 329 

330 1. 将图像拖放到 Claude Code 窗口中330 1. 将图像拖放到 Claude Code 窗口中

331 2. 复制图像并使用 `Ctrl+V` 将其粘贴到 CLI 中,或在 [Windows 和 WSL 上使用 `Alt+V`](/docs/zh-CN/interactive-mode#general-controls)331 2. 复制图像并使用 `Ctrl+V` 将其粘贴到 CLI 中,或在 [Windows 和 WSL 上使用 `Alt+V`](/docs/zh-CN/interactive-mode#general-controls)

332 3. 向 Claude 提供图像路径。例如,"Analyze this image: /path/to/your/image.png"332 3. 向 Claude 提供图像路径,例如"Analyze this image: /path/to/your/image.png"

333 </Step>333 </Step>

334 334 

335 <Step title="要求 Claude 分析图像">335 <Step title="要求 Claude 分析图像">

costs.md +1 −1

Details

290 为类型化语言安装代码智能插件290 为类型化语言安装代码智能插件

291</h3>291</h3>

292 292 

293[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)为 Claude 提供精确的符号导航,而不是基于文本的搜索,减少在探索不熟悉的代码时不必要的文件读取。单个"转到定义"调用替代了可能需要的 grep 后跟读取多个候选文件。已安装的语言服务器还会在编辑后自动报告类型错误,因此 Claude 无需运行编译器即可捕获错误。293[代码智能插件](/docs/zh-CN/plugins/code-intelligence)为 Claude 提供精确的符号导航,而不是基于文本的搜索,减少在探索不熟悉的代码时不必要的文件读取。单个"转到定义"调用替代了可能需要的 grep 后跟读取多个候选文件。已安装的语言服务器还会在编辑后自动报告类型错误,因此 Claude 无需运行编译器即可捕获错误。

294 294 

295<h3 id="offload-processing-to-hooks-and-skills">295<h3 id="offload-processing-to-hooks-and-skills">

296 将处理卸载到 hooks 和 skills296 将处理卸载到 hooks 和 skills

Details

105大多数配置意外可以追溯到一小组位置和语法规则。在假设存在错误之前检查这些:105大多数配置意外可以追溯到一小组位置和语法规则。在假设存在错误之前检查这些:

106 106 

107| 症状 | 原因 | 修复 |107| 症状 | 原因 | 修复 |

108| :-------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |108| :-------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |

109| Hook 永远不触发 | `matcher` 是 JSON 数组而不是字符串 | 使用单个字符串,其中 `\|` 匹配多个工具,例如 `"Edit\|Write"`。请参阅[匹配器模式](/docs/zh-CN/hooks#matcher-patterns)。 |109| Hook 永远不触发 | `matcher` 是 JSON 数组而不是字符串 | 使用单个字符串,其中 `\|` 匹配多个工具,例如 `"Edit\|Write"`。请参阅[匹配器模式](/docs/zh-CN/hooks#matcher-patterns)。 |

110| Hook 永远不触发 | `matcher` 在 v2.1.191 之前的版本中使用 `,` 作为分隔符 | Claude Code v2.1.191 或更高版本将 `,` 视为列表分隔符,如 `\|`。早期版本将逗号评估为字面字符,因此 `"Edit,Write"` 不匹配任何内容。改用 `\|`,或升级 Claude Code。 |110| Hook 永远不触发 | `matcher` 在 v2.1.191 之前的版本中使用 `,` 作为分隔符 | Claude Code v2.1.191 或更高版本将 `,` 视为列表分隔符,如 `\|`。早期版本将逗号评估为字面字符,因此 `"Edit,Write"` 不匹配任何内容。改用 `\|`,或升级 Claude Code。 |

111| Hook 永远不触发 | `matcher` 值是小写的,例如 `"bash"` | 匹配是区分大小写的。工具名称是大写的:`Bash`、`Edit`、`Write`、`Read`。 |111| Hook 永远不触发 | `matcher` 值是小写的,例如 `"bash"` | 匹配是区分大小写的。工具名称是大写的:`Bash`、`Edit`、`Write`、`Read`。 |

112| Hook 永远不触发 | Hooks 在独立文件而不是 `settings.json` 中定义 | 项目或用户配置没有独立的 hooks 文件。在 `settings.json` 中的 `"hooks"` 键下定义 hooks。只有[plugins](/docs/zh-CN/plugins-reference#hooks)加载单独的 `hooks/hooks.json`。请参阅[hook 配置](/docs/zh-CN/hooks)。 |112| Hook 永远不触发 | Hooks 在独立文件而不是 `settings.json` 中定义 | 项目或用户配置没有独立的 hooks 文件。在 `settings.json` 中的 `"hooks"` 键下定义 hooks。只有[plugins](/docs/zh-CN/plugins/components#hooks)加载单独的 `hooks/hooks.json`。请参阅[hook 配置](/docs/zh-CN/hooks)。 |

113| 全局设置的权限、hooks 或 env 被忽略 | 配置被添加到 `~/.claude.json` | `~/.claude.json` 保存应用状态和 UI 切换。`permissions`、`hooks` 和 `env` 属于 `~/.claude/settings.json`。这是两个不同的文件。 |113| 全局设置的权限、hooks 或 env 被忽略 | 配置被添加到 `~/.claude.json` | `~/.claude.json` 保存应用状态和 UI 切换。`permissions`、`hooks` 和 `env` 属于 `~/.claude/settings.json`。这是两个不同的文件。 |

114| `settings.json` 值似乎被忽略 | 相同的键在 `settings.local.json` 中设置 | `settings.local.json` 覆盖 `settings.json`,两者都覆盖 `~/.claude/settings.json`。请参阅[设置优先级](/docs/zh-CN/settings#settings-precedence)。 |114| `settings.json` 值似乎被忽略 | 相同的键在 `settings.local.json` 中设置 | `settings.local.json` 覆盖 `settings.json`,两者都覆盖 `~/.claude/settings.json`。请参阅[设置优先级](/docs/zh-CN/settings#settings-precedence)。 |

115| Skill 没有出现在 `/skills` 中 | Skill 文件在 `.claude/skills/name.md` 而不是在文件夹中 | 使用包含 `SKILL.md` 的文件夹:`.claude/skills/name/SKILL.md`。 |115| Skill 没有出现在 `/skills` 中 | Skill 文件在 `.claude/skills/name.md` 而不是在文件夹中 | 使用包含 `SKILL.md` 的文件夹:`.claude/skills/name/SKILL.md`。 |

desktop.md +6 −6

Details

472 472 

473连接外部服务、添加可重用工作流、自定义 Claude 的行为并配置预览服务器。要在一个地方管理连接器、skills 和插件,请点击侧边栏中的**自定义**。[Cowork](https://claude.com/product/cowork) 标签页在桌面应用中从此自定义配置获取其 skills、插件和连接器,该配置通过你的 claude.ai 账户同步,而不是从 CLI 的 `~/.claude` 目录。473连接外部服务、添加可重用工作流、自定义 Claude 的行为并配置预览服务器。要在一个地方管理连接器、skills 和插件,请点击侧边栏中的**自定义**。[Cowork](https://claude.com/product/cowork) 标签页在桌面应用中从此自定义配置获取其 skills、插件和连接器,该配置通过你的 claude.ai 账户同步,而不是从 CLI 的 `~/.claude` 目录。

474 474 

475Claude Code 还会在你使用同一账户登录的终端会话中加载为你的 claude.ai 账户启用的 skills 和插件。请参阅[从 claude.ai 同步的 Skills](/docs/zh-CN/skills#how-synced-skills-behave) 和[从 claude.ai 同步的插件](/docs/zh-CN/plugins-reference#synced-plugins)。475Claude Code 还会在你使用同一账户登录的终端会话中加载为你的 claude.ai 账户启用的 skills 和插件。请参阅[从 claude.ai 同步的 Skills](/docs/zh-CN/skills#how-synced-skills-behave) 和[从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins)。

476 476 

477<h3 id="connect-external-tools">477<h3 id="connect-external-tools">

478 连接外部工具478 连接外部工具


490 使用 skills490 使用 skills

491</h3>491</h3>

492 492 

493[Skills](/docs/zh-CN/skills)扩展 Claude 可以做的事情。Claude 在相关时自动加载它们,或者你可以直接调用一个:在提示框中输入 `/` 或点击 **+** 按钮并选择 **Slash commands** 来浏览可用的内容。这包括[内置命令](/docs/zh-CN/commands)、你的[自定义 skills](/docs/zh-CN/skills#create-your-first-skill)、来自你的代码库的项目 skills 以及来自任何[已安装插件](/docs/zh-CN/plugins)的 skills。选择一个,它会在输入字段中突出显示。在它之后输入你的任务并照常发送。493[Skills](/docs/zh-CN/skills)扩展 Claude 可以做的事情。Claude 在相关时自动加载它们,或者你可以直接调用一个:在提示框中输入 `/` 或点击 **+** 按钮并选择 **Slash commands** 来浏览可用的内容。这包括[内置命令](/docs/zh-CN/commands)、你的[自定义 skills](/docs/zh-CN/skills#create-your-first-skill)、来自你的代码库的项目 skills 以及来自任何[已安装插件](/docs/zh-CN/plugins/install)的 skills。选择一个,它会在输入字段中突出显示。在它之后输入你的任务并照常发送。

494 494 

495你可以在 Claude 工作时发送命令,就像任何其他消息一样,会话在轮次完成后返回空闲状态。在 v2.1.206 之前,在轮次中间发送的命令可能会导致会话显示为运行状态,你之后发送的消息未被传递。495你可以在 Claude 工作时发送命令,就像任何其他消息一样,会话在轮次完成后返回空闲状态。在 v2.1.206 之前,在轮次中间发送的命令可能会导致会话显示为运行状态,你之后发送的消息未被传递。

496 496 


502 安装插件502 安装插件

503</h3>503</h3>

504 504 

505[Plugins](/docs/zh-CN/plugins)是可重用的包,为 Claude Code 添加 skills、agents、hooks、MCP servers 和 LSP 配置。你可以从桌面应用安装插件,而无需使用终端。505[Plugins](/docs/zh-CN/plugins/overview)是可重用的包,为 Claude Code 添加 skills、agents、hooks、MCP servers 和 LSP 配置。你可以从桌面应用安装插件,而无需使用终端。

506 506 

507对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Plugins** 来查看你已安装的插件及其 skills。要添加插件,从子菜单中选择 **Add plugin** 来打开插件浏览器,它显示来自你配置的[市场](/docs/zh-CN/plugin-marketplaces)的可用插件,包括官方 Anthropic 市场。选择 **Manage plugins** 来启用、禁用或卸载插件。507对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Plugins** 来查看你已安装的插件及其 skills。要添加插件,从子菜单中选择 **Add plugin** 来打开插件浏览器,它显示来自你配置的[市场](/docs/zh-CN/plugins/overview)的可用插件,包括官方 Anthropic 市场。选择 **Manage plugins** 来启用、禁用或卸载插件。

508 508 

509你可以将插件限定到你的用户账户、特定项目或仅本地。如果你的组织集中管理插件,这些插件在桌面会话中的可用方式与在 CLI 中相同。509你可以将插件限定到你的用户账户、特定项目或仅本地。如果你的组织集中管理插件,这些插件在桌面会话中的可用方式与在 CLI 中相同。

510 510 

511插件浏览器在云会话中不可用,从桌面应用安装的插件不可用于云会话。云会话也不会安装存储库的 `.claude/settings.json` 声明的插件,如[从你的设置中继承的内容](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)所述。要在云会话中使用插件,为你的 claude.ai 账户启用它,以便 Claude Code 将其作为[同步插件](/docs/zh-CN/plugins-reference#synced-plugins)加载。插件在 WSL 会话中不可用。有关完整的插件参考,包括创建你自己的插件,请参阅 [plugins](/docs/zh-CN/plugins)。511插件浏览器在云会话中不可用,从桌面应用安装的插件不可用于云会话。云会话也不会安装存储库的 `.claude/settings.json` 声明的插件,如[从你的设置中继承的内容](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)所述。插件在 WSL 会话中不可用。有关完整的插件参考,包括创建你自己的插件,请参阅 [plugins](/docs/zh-CN/plugins/overview)。

512 512 

513<h3 id="configure-preview-servers">513<h3 id="configure-preview-servers">

514 配置预览服务器514 配置预览服务器


1023| 权限模式 | 所有模式,包括 `dontAsk` | Manual、Accept edits、Plan 和 Auto。绕过权限在模式选择器中出现一次启用:通过 Pro 和 Max 计划上的设置切换,或通过 Team 和 Enterprise 计划上的组织策略 |1023| 权限模式 | 所有模式,包括 `dontAsk` | Manual、Accept edits、Plan 和 Auto。绕过权限在模式选择器中出现一次启用:通过 Pro 和 Max 计划上的设置切换,或通过 Team 和 Enterprise 计划上的组织策略 |

1024| [第三方提供商](/docs/zh-CN/third-party-integrations) | Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry | Anthropic 的 API 默认。对于网关路由,请参阅[将桌面应用连接到网关](/docs/zh-CN/llm-gateway-connect#desktop-app)。要在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或自托管 LLM 网关上运行 Code 选项卡,请参阅 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)。 |1024| [第三方提供商](/docs/zh-CN/third-party-integrations) | Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry | Anthropic 的 API 默认。对于网关路由,请参阅[将桌面应用连接到网关](/docs/zh-CN/llm-gateway-connect#desktop-app)。要在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或自托管 LLM 网关上运行 Code 选项卡,请参阅 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)。 |

1025| [MCP servers](/docs/zh-CN/mcp) | 在设置文件中配置 | 本地和 SSH 会话的连接器 UI,或设置文件 |1025| [MCP servers](/docs/zh-CN/mcp) | 在设置文件中配置 | 本地和 SSH 会话的连接器 UI,或设置文件 |

1026| [Plugins](/docs/zh-CN/plugins) | `/plugin` 命令 | 插件管理器 UI |1026| [Plugins](/docs/zh-CN/plugins/overview) | `/plugin` 命令 | 插件管理器 UI |

1027| @mention 文件 | 基于文本 | 带自动完成;仅本地和 SSH 会话 |1027| @mention 文件 | 基于文本 | 带自动完成;仅本地和 SSH 会话 |

1028| 文件附件 | 不可用 | 图像、PDF |1028| 文件附件 | 不可用 | 图像、PDF |

1029| 会话隔离 | [`--worktree`](/docs/zh-CN/cli-reference) 标志 | **worktree** 选项在启动会话时 |1029| 会话隔离 | [`--worktree`](/docs/zh-CN/cli-reference) 标志 | **worktree** 选项在启动会话时 |

discover-plugins.md +0 −651 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 通过市场发现和安装预构建插件

6 

7> 从市场发现和安装插件,以使用新 skills、agents 和功能扩展 Claude Code。

8 

9插件通过 skills、agents、hooks 和 MCP servers 扩展 Claude Code。插件市场是帮助您发现和安装这些扩展的目录,无需自己构建。

10 

11您也可以在 claude.ai 上启用插件,供自己或通过您的组织使用。Claude Code 会将这些插件同步到您的会话中,无需市场安装,如[从 claude.ai 同步的插件](/docs/zh-CN/plugins-reference#synced-plugins)所述。

12 

13想要创建和分发自己的市场?请参阅[创建和分发插件市场](/docs/zh-CN/plugin-marketplaces)。

14 

15<h2 id="how-marketplaces-work">

16 市场如何工作

17</h2>

18 

19市场是他人创建和共享的插件目录。使用市场是一个两步过程:

20 

21<Steps>

22 <Step title="添加市场">

23 这会向 Claude Code 注册目录,以便您可以浏览可用内容。尚未安装任何插件。

24 </Step>

25 

26 <Step title="安装单个插件">

27 浏览目录并安装您想要的插件。

28 </Step>

29</Steps>

30 

31<h2 id="official-anthropic-marketplace">

32 官方 Anthropic 市场

33</h2>

34 

35Claude Code 在您首次以交互方式启动它时会自动添加官方 Anthropic 市场(`claude-plugins-official`)。如果 Claude Code 无法添加它,例如因为您的网络阻止了下载或[市场政策](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)阻止了之前的尝试,请使用 `/plugin marketplace add anthropics/claude-plugins-official` 自己添加。

36 

37要浏览可用内容,请运行 `/plugin` 并转到**发现**选项卡,或在 [claude.com/plugins](https://claude.com/plugins) 查看目录。

38 

39要从官方市场安装插件,请使用 `/plugin install <name>@claude-plugins-official`。例如,要安装 GitHub 集成:

40 

41```shell theme={null}

42/plugin install github@claude-plugins-official

43```

44 

45`/plugin` 在终端 CLI 中打开一个交互式面板。如果 Claude 回复说 `/plugin` 在此环境中不可用,请使用另一种方式安装插件:

46 

47* **Claude 桌面应用**:使用[插件浏览器](/docs/zh-CN/desktop#install-plugins)。

48* **VS Code 扩展**:从[**管理插件**对话框](/docs/zh-CN/vs-code#manage-plugins)安装。

49* **云会话**:为您的 claude.ai 账户启用插件,以便 Claude Code 将其作为[同步插件](/docs/zh-CN/plugins-reference#synced-plugins)加载。

50 

51如果安装失败,请匹配 Claude Code 报告的消息:

52 

53* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

54* 插件[在市场中未找到](#install-plugins):检查插件名称。

55 

56<Note>

57 官方市场由 Anthropic 维护,包含由 Anthropic 自行决定的内容。应用内提交表单将插件添加到[社区市场](#community-marketplace),而不是官方市场。要独立分发插件,请[创建您自己的市场](/docs/zh-CN/plugin-marketplaces)并与用户共享。

58</Note>

59 

60官方市场包括多个插件类别:

61 

62<h3 id="code-intelligence">

63 代码智能

64</h3>

65 

66代码智能插件启用 Claude Code 的内置 LSP 工具,使 Claude 能够跳转到定义、查找引用并在编辑后立即查看类型错误。这些插件配置[语言服务器协议](https://microsoft.github.io/language-server-protocol/)连接,这是为 VS Code 代码智能提供支持的相同技术。在[云会话](/docs/zh-CN/claude-code-on-the-web)中,Claude Code 不启动插件语言服务器,因此 Claude 在那里不会获得 LSP 工具。

67 

68在使用这些插件之前,请从下表安装语言服务器二进制文件;插件不会为您安装它。如果您已经安装了语言服务器,当您打开项目时,Claude 可能会提示您安装相应的插件。

69 

70| 语言 | 插件 | 所需二进制文件 |

71| :--------- | :------------------ | :--------------------------- |

72| C/C++ | `clangd-lsp` | `clangd` |

73| C# | `csharp-lsp` | `csharp-ls` |

74| Go | `gopls-lsp` | `gopls` |

75| Java | `jdtls-lsp` | `jdtls` |

76| Kotlin | `kotlin-lsp` | `kotlin-language-server` |

77| Lua | `lua-lsp` | `lua-language-server` |

78| PHP | `php-lsp` | `intelephense` |

79| Python | `pyright-lsp` | `pyright-langserver` |

80| Rust | `rust-analyzer-lsp` | `rust-analyzer` |

81| Swift | `swift-lsp` | `sourcekit-lsp` |

82| TypeScript | `typescript-lsp` | `typescript-language-server` |

83 

84您也可以[为其他语言创建自己的 LSP 插件](/docs/zh-CN/plugins-reference#lsp-servers)。

85 

86<Note>

87 如果在安装插件后在 `/plugin` 错误选项卡中看到 `Executable not found in $PATH`,请从[代码智能](#code-intelligence)表中安装该插件所需的二进制文件。

88</Note>

89 

90<h4 id="what-claude-gains-from-code-intelligence-plugins">

91 Claude 从代码智能插件获得的功能

92</h4>

93 

94安装代码智能插件并且其语言服务器二进制文件可用后,Claude 获得两项功能:

95 

96* **自动诊断**:在 Claude 进行的每次文件编辑后,语言服务器报告错误和警告,因此 Claude 看到类型错误、缺失导入和语法问题,无需运行编译器或 linter。如果 Claude 引入错误,它会注意到并在同一轮中修复它。

97* **代码导航**:Claude 可以使用语言服务器跳转到定义、查找引用、获取悬停时的类型信息、列出符号、查找实现和追踪调用层次结构。这些操作为 Claude 提供比基于 grep 的搜索更精确的导航,尽管可用性可能因语言和环境而异。

98 

99您不需要配置诊断,只需安装插件即可。要自己读取诊断,当 Claude Code 显示指示器(如**在 2 个文件中发现 3 个新诊断问题**)时,请按 **Ctrl+O**。

100 

101如果遇到问题,请参阅[代码智能故障排除](#code-intelligence-issues)。

102 

103<h3 id="external-integrations">

104 外部集成

105</h3>

106 

107这些插件捆绑预配置的 [MCP servers](/docs/zh-CN/mcp),以便您可以连接 Claude 到外部服务,无需手动设置:

108 

109* **源代码控制**:`github`、`gitlab`

110* **项目管理**:`atlassian`(Jira/Confluence)、`asana`、`linear`、`notion`

111* **设计**:`figma`

112* **基础设施**:`vercel`、`firebase`、`supabase`

113* **通信**:`slack`

114* **监控**:`sentry`

115 

116<h3 id="automatic-security-review">

117 自动安全审查

118</h3>

119 

120`security-guidance` 插件审查 Claude 所做的每项更改是否存在常见漏洞,并指示 Claude 在同一会话中修复发现的问题。有关其检查内容以及如何添加特定于项目的规则,请参阅[在 Claude 编写代码时捕获安全问题](/docs/zh-CN/security-guidance)。

121 

122<h3 id="development-workflows">

123 开发工作流

124</h3>

125 

126为常见开发任务添加 skills 和 agents 的插件:

127 

128* **commit-commands**:Git 提交工作流,包括提交、推送和 PR 创建

129* **pr-review-toolkit**:用于审查拉取请求的专门 agents

130* **agent-sdk-dev**:使用 Claude Agent SDK 构建的工具

131* **plugin-dev**:用于创建您自己的插件的工具包

132 

133<h3 id="output-styles">

134 输出样式

135</h3>

136 

137自定义 Claude 的响应方式:

138 

139* **explanatory-output-style**:关于实现选择的教育见解

140* **learning-output-style**:用于技能构建的交互式学习模式

141 

142<h2 id="community-marketplace">

143 社区市场

144</h2>

145 

146[`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) 上的社区市场托管已通过 Anthropic 自动验证和安全筛选的第三方插件。每个插件都固定到目录中的特定提交 SHA。与官方市场不同,您需要手动添加它:

147 

148```shell theme={null}

149/plugin marketplace add anthropics/claude-plugins-community

150```

151 

152然后使用 `claude-community` 市场名称从中安装插件:

153 

154```shell theme={null}

155/plugin install <plugin-name>@claude-community

156```

157 

158要将您自己的插件提交到社区市场,请参阅创建插件指南中的[将您的插件提交到社区市场](/docs/zh-CN/plugins#submit-your-plugin-to-the-community-marketplace)。

159 

160<h2 id="try-it-add-the-demo-marketplace">

161 尝试:添加演示市场

162</h2>

163 

164Anthropic 还维护一个[演示插件市场](https://github.com/anthropics/claude-code/tree/main/plugins)(`claude-code-plugins`),其中包含展示插件系统可能性的示例插件。与官方市场不同,您需要手动添加此市场。

165 

166<Steps>

167 <Step title="添加市场">

168 在 Claude Code 中,为 `anthropics/claude-code` 市场运行 `plugin marketplace add` 命令:

169 

170 ```shell theme={null}

171 /plugin marketplace add anthropics/claude-code

172 ```

173 

174 这会下载市场目录并使其插件对您可用。

175 </Step>

176 

177 <Step title="浏览可用插件">

178 运行 `/plugin` 打开插件管理器。这会打开一个选项卡式界面,您可以使用 **Tab** 循环切换,或使用 **Shift+Tab** 向后切换:

179 

180 * **发现**:从所有市场浏览可用插件

181 * **已安装**:查看和管理已安装的插件

182 * **市场**:添加、删除或更新已添加的市场

183 * **错误**:查看任何插件加载错误

184 * **统计**:查看[每个 skill 在上下文中的成本以及它的使用频率](/docs/zh-CN/skills#find-unused-skills),在 `/skill-doctor` 可用的会话中

185 

186 转到**发现**选项卡以查看您刚添加的市场中的插件。当您的管理员通过 [`pluginSuggestionMarketplaces`](/docs/zh-CN/settings-reference#pluginsuggestionmarketplaces) 托管设置将市场列入允许列表时,标记为与您当前工作目录相关的插件会在顶部固定,并带有**建议用于此目录**标签。

187 </Step>

188 

189 <Step title="安装插件">

190 选择一个插件以查看其详细信息。详细信息窗格显示插件包含的内容及其成本:

191 

192 * **上下文成本**估计,因此您可以查看插件将在每个回合中向您的[上下文窗口](/docs/zh-CN/features-overview#understand-context-costs)添加多少个令牌

193 * 插件的**最后更新**日期

194 * 一个**将安装**部分,列出插件的命令、agents、skills、hooks 和 MCP 及 LSP 服务器,因此您可以在安装前查看它添加的确切内容

195 

196 并非每个插件都提供这些字段背后的数据。对于来自本地或自定义市场的插件,您可能看不到**上下文成本**和**最后更新**行,**将安装**部分可能显示**组件将在安装时被发现**。

197 

198 选择安装范围:

199 

200 * **用户范围**:在所有项目中为自己安装

201 * **项目范围**:为此存储库上的所有协作者安装

202 * **本地范围**:仅在此存储库中为自己安装

203 

204 例如,选择 **commit-commands**(添加 git 工作流 skills 的插件)并将其安装到您的用户范围。

205 

206 您也可以从命令行直接安装:

207 

208 ```shell theme={null}

209 /plugin install commit-commands@claude-code-plugins

210 ```

211 

212 请参阅[设置文件](/docs/zh-CN/settings#where-settings-live)以了解有关范围的更多信息。

213 </Step>

214 

215 <Step title="使用您的新插件">

216 如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 随后会为您运行该重新加载。如果重新加载警告您的下一条消息会重新读取对话,请运行 `/reload-plugins --force` 来激活插件。

217 

218 插件 skills 由插件名称命名空间,因此 **commit-commands** 提供诸如 `/commit-commands:commit` 之类的 skills。

219 

220 通过对文件进行更改并运行来尝试:

221 

222 ```shell theme={null}

223 /commit-commands:commit

224 ```

225 

226 这会暂存您的更改、生成提交消息并创建提交。

227 

228 每个插件的工作方式不同。检查**发现**选项卡中的插件详细信息以查看它提供的命令和 skills,或访问其主页以获取使用指导。

229 </Step>

230</Steps>

231 

232<h2 id="add-marketplaces">

233 添加市场

234</h2>

235 

236使用 `/plugin marketplace add` 命令从不同来源添加市场。

237 

238<Tip>

239 **快捷方式**:您可以使用 `/plugin market` 代替 `/plugin marketplace`,以及使用 `rm` 代替 `remove`。

240</Tip>

241 

242* **GitHub 存储库**:`owner/repo` 格式,例如 `anthropics/claude-code`

243* **Git URL**:任何 git 存储库 URL,包括 GitLab、Bitbucket 和自托管服务器

244* **本地路径**:目录或 `marketplace.json` 文件的直接路径

245* **远程 URL**:托管 `marketplace.json` 文件的直接 URL

246* **claude.ai**:托管在 claude.ai 上的市场,用于您的账户,例如您组织的插件库,您可以[从 **Marketplaces** 标签页或您的 shell 按名称添加](#add-from-claude-ai),而不是按来源添加

247 

248<h3 id="add-from-github">

249 从 GitHub 添加

250</h3>

251 

252使用 `owner/repo` 格式添加包含 `.claude-plugin/marketplace.json` 文件的 GitHub 存储库,其中 `owner` 是 GitHub 用户名或组织,`repo` 是存储库名称。

253 

254例如,`anthropics/claude-code` 指的是由 `anthropics` 拥有的 `claude-code` 存储库:

255 

256```shell theme={null}

257/plugin marketplace add anthropics/claude-code

258```

259 

260<h3 id="add-from-other-git-hosts">

261 从其他 Git 主机添加

262</h3>

263 

264通过提供完整 URL 添加 git 市场存储库。对于 `https://` URL,是否包含 `.git` 后缀取决于主机:

265 

266* **`github.com` 和 `gitlab.com`**:Claude Code 识别带有或不带 `.git` 后缀的存储库 URL 并克隆它。添加不带后缀的 `gitlab.com` URL 需要 Claude Code v2.1.232 或更高版本。在 v2.1.232 之前,Claude Code 将其视为托管 `marketplace.json` 文件的直接链接。

267* **Azure DevOps**:省略后缀。Claude Code 克隆任何路径包含 `/_git/` 的 URL。如果您在 `/_git/` 路径后附加 `.git`,克隆将失败。

268* **所有其他主机,包括自管理的 GitLab 服务器**:包含 `.git` 后缀,以便 Claude Code 克隆存储库,而不是将 URL 视为托管 `marketplace.json` 文件的直接链接。对于克隆 URL 不带后缀的主机(如 AWS CodeCommit),请改为在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 中添加市场作为 git 条目。Claude Code 克隆 git 条目,无论其 URL 是否以 `.git` 结尾。

269 

270Claude Code 也克隆具有嵌套子组的 `gitlab.com` URL,例如 `https://gitlab.com/group/subgroup/project`。

271 

272包含 `https://` 前缀。Claude Code v2.1.196 及更高版本会拒绝没有前缀的主机,例如 `gitlab.com/company/plugins.git`,将其视为无效的 GitHub `owner/repo` 简写,错误消息会告诉您添加前缀。早期版本会将其误读为 GitHub 存储库路径,并在克隆时失败。

273 

274使用 HTTPS:

275 

276```shell theme={null}

277/plugin marketplace add https://gitlab.com/company/plugins.git

278```

279 

280使用 SSH:

281 

282```shell theme={null}

283/plugin marketplace add git@gitlab.com:company/plugins.git

284```

285 

286Claude Code 克隆 SSH 地址,无论其是否以 `.git` 结尾。

287 

288要添加特定分支或标签,请在 `#` 后附加 ref:

289 

290```shell theme={null}

291/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

292```

293 

294<h3 id="add-from-local-paths">

295 从本地路径添加

296</h3>

297 

298添加包含 `.claude-plugin/marketplace.json` 文件的本地目录:

299 

300```shell theme={null}

301/plugin marketplace add ./my-marketplace

302```

303 

304您也可以添加 `marketplace.json` 文件的直接路径:

305 

306```shell theme={null}

307/plugin marketplace add ./path/to/marketplace.json

308```

309 

310<h3 id="add-from-remote-urls">

311 从远程 URL 添加

312</h3>

313 

314通过 URL 添加远程 `marketplace.json` 文件:

315 

316```shell theme={null}

317/plugin marketplace add https://example.com/marketplace.json

318```

319 

320<Note>

321 与基于 Git 的市场相比,基于 URL 的市场有一些限制。如果从基于 URL 的市场安装插件失败,请参阅[故障排除](/docs/zh-CN/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces)。

322</Note>

323 

324<h3 id="add-from-claude-ai">

325 从 claude.ai 添加

326</h3>

327 

328在[插件从您的 claude.ai 账户同步](/docs/zh-CN/plugins-reference#synced-plugins)的终端会话中,claude.ai 也可以为您列出市场,例如您组织的插件库和您自己的 claude.ai 上传。`claude plugin marketplace list` 在 `From claude.ai:` 部分中打印它们,`/plugin` **Marketplaces** 标签页也列出它们。在那里选择一个来添加它。从 claude.ai 添加市场需要 Claude Code v2.1.273 或更高版本。

329 

330要从您的 shell 添加一个,请运行 `claude plugin marketplace add` 命令,使用 `--claudeai` 标志和列表中显示的名称:

331 

332```bash theme={null}

333claude plugin marketplace add --claudeai claudeai-organization-library

334```

335 

336Claude Code 在以 `claudeai-` 开头的本地名称下注册市场,该名称源自 claude.ai 列出的名称:列为"Organization library"的市场注册为 `claudeai-organization-library`。通过该名称安装其插件,例如使用 `claude plugin install <plugin>@claudeai-organization-library`。

337 

338如果您注销或使用不同账户登录,市场保持配置但不显示任何插件,您已从中安装的插件继续加载。

339 

340`From claude.ai:` 部分也可以列出通过 claude.ai 共享的基于 git 的市场。您可以使用普通的 `marketplace add` 命令添加这些,使用列表打印的来源。

341 

342<h2 id="install-plugins">

343 安装插件

344</h2>

345 

346添加市场后,您可以按名称安装插件。对于您尚未添加的市场,您可以改为[在一个命令中添加并安装](#add-a-marketplace-and-install-in-one-command)。

347 

348要按名称安装:

349 

350```shell theme={null}

351/plugin install plugin-name@marketplace-name

352```

353 

354该命令打开该插件的详情,您可以在其中选择[安装范围](/docs/zh-CN/settings#where-settings-live)。当您运行 `/plugin`,转到**发现**选项卡,然后在插件上按 **Enter** 时,您会看到相同的选择:

355 

356* **用户范围**:在所有项目中为自己安装

357* **项目范围**:为此存储库上的所有协作者安装,这会将插件添加到 `.claude/settings.json`

358* **本地范围**:仅在此存储库中为自己安装,不与协作者共享

359 

360要在没有交互式步骤的情况下安装,请使用 [`claude plugin install`](/docs/zh-CN/plugins-reference#plugin-install) shell 命令,该命令默认安装到用户范围,除非您传递 `--scope`。对于具有[`command` 源](/docs/zh-CN/plugin-marketplaces#how-users-accept-the-command)的插件,传递 `--yes` 以接受它显示的命令。

361 

362您也可能看到具有**托管**范围的插件。这些由管理员通过[托管设置](/docs/zh-CN/managed-settings)安装,无法修改。

363 

364Claude Code 在其本地市场目录副本中查找插件。您命名插件的方式控制 Claude Code 是否首先刷新该副本:

365 

366* **带有市场名称**:当您安装 `plugin-name@marketplace-name` 时,在会话中或使用 `claude plugin install`,Claude Code 在查找前刷新该市场。即使您关闭了市场的[自动更新](#configure-auto-updates)或设置了 `DISABLE_AUTOUPDATER`,Claude Code 也会运行刷新。在 v2.1.232 之前,Claude Code 在查找前不刷新市场。Claude Code 在以下情况下跳过此刷新:

367 * 市场未[从 GitHub、其他 Git 主机、远程 URL](#add-marketplaces)或 [claude.ai](#add-from-claude-ai) 添加。

368 * [种子目录](/docs/zh-CN/plugin-marketplaces#pre-populate-plugins-for-containers)提供市场。

369 * Claude Code 在过去 30 秒内刷新了市场。

370 * 您设置了 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars)。

371 * [托管设置](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)阻止市场,在这种情况下 Claude Code 也拒绝安装。

372* **仅插件名称**:当您在会话中运行 `/plugin install plugin-name` 时,Claude Code 仅刷新它也在[后台更新](#configure-auto-updates)的市场,并且仅在查找失败后。当您运行 `claude plugin install plugin-name` 时,Claude Code 读取缓存的目录而不刷新。要安装在上次刷新后发布的插件,请在会话中运行 `/plugin marketplace update <marketplace-name>` 或在 shell 中运行 [`claude plugin marketplace update <marketplace-name>`](/docs/zh-CN/plugin-marketplaces#plugin-marketplace-update),然后重试安装。

373 

374如果命名安装前的刷新失败,例如因为您离线,Claude Code 仍会在缓存目录中查找插件。`claude plugin install` 在其成功消息中报告 `marketplace not refreshed`,`/plugin install` 在插件详情上方或其未找到消息中显示失败。

375 

376当您从 `/plugin` 界面安装时,安装摘要告诉您插件在当前会话中是否处于活跃状态:

377 

378* `Plugin is now active.`:Claude Code 在安装过程中激活了插件。

379* `Run /reload-plugins to activate.`:插件尚未处于活跃状态,因为激活它会[使提示缓存失效](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)或因为激活尝试失败。Claude Code 随后会为您运行 `/reload-plugins`。如果该重新加载警告提示缓存,请运行 `/reload-plugins --force` 以[在不重启的情况下应用插件更改](#apply-plugin-changes-without-restarting)。

380* 如果插件加载失败,摘要会报告失败,`/plugin` **错误**选项卡显示详情。

381 

382在 v2.1.221 之前,在您运行 `/reload-plugins` 或重启之前,当前会话中没有安装生效。

383 

384`claude plugin install` shell 命令不在会话中运行,因此 Claude Code 在您下次启动 Claude Code 时加载它安装的插件,或当您在已打开的会话中运行 `/reload-plugins` 时。

385 

386<Warning>

387 在安装插件之前,请确保您信任该插件。Anthropic 不控制插件中包含的 MCP servers、文件或其他软件,也无法验证它们是否按预期工作。检查每个插件的主页以获取更多信息。

388</Warning>

389 

390<h3 id="add-a-marketplace-and-install-in-one-command">

391 在一个命令中添加市场并安装

392</h3>

393 

394要从您尚未添加的市场安装插件,请使用 `--marketplace` 命名市场源。需要 Claude Code v2.1.275 或更高版本。

395 

396```shell theme={null}

397/plugin install quality-review-plugin --marketplace your-org/plugins

398```

399 

400该源采用与 [`/plugin marketplace add`](#add-marketplaces) 相同的形式,例如 GitHub `owner/repo`、git URL 或本地路径,除了它不能包含空格。给出插件名称时不带 `@marketplace` 后缀。

401 

402Claude Code 显示它解析的源并要求您在添加市场前确认。拒绝会取消安装并且不添加任何内容。一旦添加了市场,插件的详情会打开,您可以选择[安装范围](/docs/zh-CN/settings#where-settings-live)。如果源与您已添加的市场匹配,Claude Code 会跳过确认并在该市场中打开插件的详情。

403 

404<h2 id="manage-installed-plugins">

405 管理已安装的插件

406</h2>

407 

408运行 `/plugin` 并转到**已安装**选项卡以查看、启用、禁用或卸载您的插件。该列表按范围分组并排序,以便您首先看到问题:具有加载错误或未解决依赖项的插件出现在顶部,然后是您的收藏夹,禁用的插件折叠在底部的折叠标题后面。

409 

410从列表中您可以:

411 

412* 按 `f` 以收藏或取消收藏选定的插件

413* 输入以按插件名称或描述筛选

414* 按 Enter 打开插件的详细视图并启用、禁用或卸载它

415 

416Claude Code 还在**已安装**选项卡中列出[从您的 claude.ai 账户同步的插件](/docs/zh-CN/plugins-reference#synced-plugins),其源为 `synced`。您可以在那里启用或禁用一个,除非您的组织将其标记为必需。要删除一个,请在 claude.ai 上将其关闭。同步的插件出现在 Claude Code v2.1.273 或更高版本的终端会话中。

417 

418卸载项目的 `.claude/settings.json` 启用的插件时,Claude Code 会询问您指的是哪个范围:仅为您禁用它,这会将覆盖写入您的 `.claude/settings.local.json` 并为项目保留已安装的插件,或为所有人卸载它,这会将其从共享的 `.claude/settings.json` 中删除。

419 

420详细视图显示插件贡献的组件:commands、skills、agents、hooks、MCP servers 和 LSP servers。相同的清单也可以从命令行通过 `claude plugin details` 获得。

421 

422Claude Code 还在**已安装**选项卡中的**最近未使用**标题下列出您自己安装但至少两周内未使用过的市场插件,跨越至少 10 个会话。详细视图为每个插件显示一条**最后使用**行。使用这些来查找您不再使用但仍在增加启动和上下文成本的插件,然后禁用或卸载它们。

423 

424两种类型的插件永远不会被列为未使用:

425 

426* 您的组织管理的插件或您使用 `--plugin-dir` 加载的插件

427* 贡献主题、输出样式、监视器或工作流的插件,因为这些提供的价值无需跟踪调用

428 

429当您的组织使用 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 限制市场时,**最近未使用**标题和**最后使用**行都被隐藏。

430 

431插件的[语言服务器](/docs/zh-CN/plugins#add-lsp-servers-to-your-plugin)在提供诊断或回答代码导航请求时被计为已使用,因此其服务器在您的会话中处于活跃状态的 LSP 插件不会被列为未使用。在 v2.1.203 之前,无法计算语言服务器活动作为使用,因此贡献 LSP 服务器的插件完全免除,与主题和输出样式插件仍然相同的方式。

432 

433在计算语言服务器活动的版本的第一个会话中,还会重置每个尚未记录任何使用的 LSP 插件的使用记录,因此 Claude Code 不会根据在其服务器活动被跟踪之前记录的数据将您之前安装的插件判断为未使用。

434 

435当您安装声明依赖项的插件时,安装输出会列出哪些依赖项与其一起自动安装。

436 

437您也可以使用直接命令管理插件:

438 

439* 当您运行 `/plugin disable`、`/plugin enable` 或 `/plugin uninstall` 时,Claude Code 会打开插件面板以应用更改并保持其打开。按 **Esc** 以在输入另一个命令之前关闭面板。[应用插件更改而不重启](#apply-plugin-changes-without-restarting)描述了更改在您的会话中何时生效。

440* 对于脚本编写,请改用 `claude plugin` shell 命令,这些命令不会打开面板。

441 

442列出已安装的插件而不打开菜单:

443 

444```shell theme={null}

445/plugin list

446```

447 

448传递 `--enabled` 或 `--disabled` 以仅显示处于该状态的插件。

449 

450禁用插件而不卸载:

451 

452```shell theme={null}

453/plugin disable plugin-name@marketplace-name

454```

455 

456重新启用已禁用的插件:

457 

458```shell theme={null}

459/plugin enable plugin-name@marketplace-name

460```

461 

462在这些标识符中,`plugin-name` 是 [marketplace entry](/docs/zh-CN/plugin-marketplaces#plugin-entries) 中插件的 `name`,它可能与插件自己的 `plugin.json` 中的 `name` 不同。

463 

464从 Claude Code v2.1.195 开始,`/plugin` 界面中的**启用**和**禁用**适用于两个名称不同的插件,`/plugin enable` 和 `/plugin disable` 接受任一名称。当您在早期版本中禁用此类插件时,Claude Code 报告 `already disabled` 并将其保持启用状态。

465 

466完全删除插件:

467 

468```shell theme={null}

469/plugin uninstall plugin-name@marketplace-name

470```

471 

472`--scope` 选项允许您使用 CLI 命令针对特定范围:

473 

474```shell theme={null}

475claude plugin install formatter@your-org --scope project

476claude plugin uninstall formatter@your-org --scope project

477```

478 

479<h3 id="apply-plugin-changes-without-restarting">

480 应用插件更改而不重启

481</h3>

482 

483当您关闭 `/plugin` 菜单时,Claude Code 会为您运行 `/reload-plugins` 以应用您在其中所做的更改,例如安装、启用、禁用和卸载插件。如果重新加载会[使 prompt cache 失效](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),它会发出警告并改为保留更改待处理;运行 `/reload-plugins --force` 以无论如何应用它们。如果 Claude 在您关闭菜单时仍在响应,重新加载会在响应完成后运行。

484 

485对于在菜单外发生的插件更改,请自己运行 `/reload-plugins`。这些更改包括:

486 

487* 您在另一个终端中运行的 `claude plugin` 命令

488* 编辑您使用 [`--plugin-dir`](/docs/zh-CN/plugins#test-your-plugins-locally) 加载的插件,同时您开发它

489* 插件[自动更新](#configure-auto-updates),其通知要求您重新加载

490* [从您的 claude.ai 账户同步](/docs/zh-CN/plugins-reference#synced-plugins)添加、更新或删除插件并显示要求您重新加载的通知

491* [`--plugin-dir` 文件夹](/docs/zh-CN/plugins#test-your-plugins-locally)中的更改,Claude Code 保留了该更改,因为应用它会使 prompt cache 失效

492 

493在 v2.1.268 之前,您在菜单中启用、禁用或卸载的插件,以及在安装期间未激活的安装,保持待处理状态,直到您运行 `/reload-plugins`。

494 

495`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`。需要 Claude Code v2.1.260 或更高版本。这些会话中适用两个限制:

496 

497* 该命令仅在您直接将其输入到会话中时运行,例如在 `-p` 提示或桌面应用的提示框中。当您通过远程连接(例如[远程控制](/docs/zh-CN/remote-control)或中继聊天消息)发送它时,该命令会拒绝而不重新加载任何内容。

498* 重新加载不会连接或断开插件 MCP servers。这些更改在您的下一个会话中生效。

499 

500Claude Code 重新加载所有活跃插件并显示插件、skills、agents、hooks、插件 MCP servers 和插件 LSP servers 的计数,在没有交互式终端的会话中省略插件 MCP server 计数。在 skills 计数中,Claude Code 包括插件提供的每个 skill:其 `commands/` 条目和其 `SKILL.md` skills。在 v2.1.246 之前,Claude Code 仅计算 `commands/` 条目,因此它可以重新加载插件的 `SKILL.md` skills 并仍然在摘要中报告 `0 skills`。

501 

502重新加载在下一个请求时会产生令牌成本:新加载的组件在附加到对话的内容中宣布自己,而现有历史记录仍然从 prompt cache 读取。提供 MCP servers 的插件在其工具未被 [tool search](/docs/zh-CN/mcp#scale-with-mcp-tool-search) 延迟时成本更高:该更改使缓存失效,下一个请求重新读取整个对话。有关详细信息,请参阅[启用或禁用插件](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)。

503 

504<h2 id="manage-marketplaces">

505 管理市场

506</h2>

507 

508您可以通过交互式 `/plugin` 界面或 CLI 命令管理市场。

509 

510<h3 id="use-the-interactive-interface">

511 使用交互式界面

512</h3>

513 

514运行 `/plugin` 并转到**市场**选项卡以:

515 

516* 查看所有已添加的市场及其来源和状态

517* 添加新市场

518* 更新市场列表以获取最新插件

519* 删除您不再需要的市场

520 

521<h3 id="use-cli-commands">

522 使用 CLI 命令

523</h3>

524 

525您也可以使用直接命令管理市场。

526 

527列出所有配置的市场:

528 

529```shell theme={null}

530/plugin marketplace list

531```

532 

533刷新市场的插件列表:

534 

535```shell theme={null}

536/plugin marketplace update marketplace-name

537```

538 

539删除市场:

540 

541```shell theme={null}

542/plugin marketplace remove marketplace-name

543```

544 

545<Warning>

546 删除市场将卸载您从中安装的任何插件。

547</Warning>

548 

549<h3 id="configure-auto-updates">

550 配置自动更新

551</h3>

552 

553Claude Code 可以在启动后在后台自动更新市场及其已安装的插件。为市场启用自动更新后,Claude Code 会刷新市场数据并将已安装的插件更新到磁盘上的最新版本。

554 

555Claude Code 在您的会话启动后检查市场和插件更新,延迟时间最多为十分钟,因此运行中的会话继续使用它在启动时加载的版本。如果任何插件已更新,您将看到提示您运行 `/reload-plugins` 的通知,或新版本在您下次启动时加载。

556 

557自动更新还会排除其市场条目声明 `headersHelper` 的插件:Claude Code [既不运行命令也不下载该路径上的存档](/docs/zh-CN/plugin-marketplaces#installs-and-updates-that-refuse-the-command-instead-of-asking);该部分说明 Claude Code 何时在 `/plugin` 错误选项卡中列出插件,以便您可以从其自己的视图中更新它。

558 

559Claude Code 更新具有[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)的插件,其更新频率与市场自动更新设置和 `DISABLE_AUTOUPDATER` 不同。相反,它[每个会话重新运行一次命令](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command),当其[哈希](/docs/zh-CN/plugins-reference#version-management)已更改时,将输出安装为新的插件版本。

560 

561通过 UI 为单个市场切换自动更新:

562 

5631. 运行 `/plugin` 打开插件管理器

5642. 选择**市场**

5653. 从列表中选择市场

5664. 选择**启用自动更新**或**禁用自动更新**

567 

568`claude-plugins-official`、大多数其他官方 Anthropic 市场和[从 claude.ai 添加的市场](#add-from-claude-ai)默认启用自动更新。其他第三方市场和本地开发市场默认禁用自动更新。

569 

570管理员还可以在托管设置中的每个 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目上设置 `"autoUpdate": true` 以为组织市场启用自动更新,而无需每个用户都切换它。

571 

572要禁用 Claude Code 和从市场获取的插件的自动更新,请设置 `DISABLE_AUTOUPDATER` 环境变量。具有[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)的插件遵循其自己的每个会话一次的重新解析。有关详细信息,请参阅[自动更新](/docs/zh-CN/setup#auto-updates)。

573 

574要在禁用 Claude Code 自动更新的同时保持插件自动更新启用,请设置 `FORCE_AUTOUPDATE_PLUGINS=1` 以及 `DISABLE_AUTOUPDATER`:

575 

576```bash theme={null}

577export DISABLE_AUTOUPDATER=1

578export FORCE_AUTOUPDATE_PLUGINS=1

579```

580 

581<h2 id="configure-team-marketplaces">

582 配置团队市场

583</h2>

584 

585团队管理员可以通过将市场配置添加到 `.claude/settings.json` 来为项目设置自动市场安装。当团队成员[信任存储库文件夹](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)后,Claude Code 会自动添加这些市场,无需进一步提示。

586 

587从 Claude Code v2.1.195 开始,添加市场不会在任何加载插件的路径上安装来自外部源的插件。仅由项目的 `.claude/settings.json` 启用且来自外部源(如 GitHub 存储库或 npm 包)的插件在团队成员安装之前不会加载。在此之前,Claude Code 会将该插件报告为未安装,并显示要运行的 `claude plugin install` 命令。

588 

589将 `extraKnownMarketplaces` 添加到您项目的 `.claude/settings.json`:

590 

591```json theme={null}

592{

593 "extraKnownMarketplaces": {

594 "my-team-tools": {

595 "source": {

596 "source": "github",

597 "repo": "your-org/claude-plugins"

598 }

599 }

600 }

601}

602```

603 

604有关完整配置选项(包括 `extraKnownMarketplaces` 和 `enabledPlugins`),请参阅[插件设置](/docs/zh-CN/settings-reference#plugin-settings)。

605 

606<h2 id="security">

607 安全性

608</h2>

609 

610插件和市场是高度受信任的组件,可以使用您的用户权限在您的机器上执行任意代码。仅从您信任的来源安装插件和添加市场。组织可以使用[托管市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)限制用户允许添加的市场。

611 

612<h2 id="troubleshooting">

613 故障排除

614</h2>

615 

616<h3 id="/plugin-command-not-recognized">

617 /plugin 命令无法识别

618</h3>

619 

620如果您看到"未知命令"或 `/plugin` 命令未出现:

621 

6221. **检查您的版本**:运行 `claude --version` 以查看安装的内容。

6232. **更新 Claude Code**:

624 * **Homebrew**:`brew upgrade claude-code`,或如果您安装了该 cask,则为 `brew upgrade claude-code@latest`

625 * **npm**:`npm install -g @anthropic-ai/claude-code@latest`

626 * **本地安装程序**:从[设置](/docs/zh-CN/setup)重新运行安装命令

6273. **重启 Claude Code**:更新后,重启您的终端并再次运行 `claude`。

628 

629<h3 id="common-issues">

630 常见问题

631</h3>

632 

633如果插件 skills 未出现,使用 `rm -rf ~/.claude/plugins/cache` 清除缓存,重启 Claude Code,然后重新安装插件。

634 

635有关详细的故障排除和解决方案,请参阅市场指南中的[故障排除](/docs/zh-CN/plugin-marketplaces#troubleshooting)。有关调试工具,请参阅[调试和开发工具](/docs/zh-CN/plugins-reference#debugging-and-development-tools)。

636 

637<h3 id="code-intelligence-issues">

638 代码智能问题

639</h3>

640 

641* **语言服务器未启动**:验证二进制文件已安装且在您的 `$PATH` 中可用。检查 `/plugin` 错误选项卡以获取详细信息。

642* **高内存使用**:`rust-analyzer` 和 `pyright` 等语言服务器在大型项目上可能消耗大量内存。如果您遇到内存问题,请使用 `/plugin disable <plugin-name>` 禁用插件,并改为依赖 Claude 的内置搜索工具。

643* **monorepos 中的误报诊断**:如果工作区配置不正确,语言服务器可能会报告内部包的未解析导入错误。这些不会影响 Claude 编辑代码的能力。

644 

645<h2 id="next-steps">

646 后续步骤

647</h2>

648 

649* **构建您自己的插件**:请参阅[插件](/docs/zh-CN/plugins)以创建 skills、agents 和 hooks

650* **创建市场**:请参阅[创建插件市场](/docs/zh-CN/plugin-marketplaces)以将插件分发给您的团队或社区

651* **技术参考**:请参阅[插件参考](/docs/zh-CN/plugins-reference)以获取完整规范

env-vars.md +19 −17

Details

114 114 

115在设置文件中,您可以设置变量,但不能删除变量。要覆盖无法取消设置的变量,例如由您无法控制的 shell 配置文件导出的过时 `CLAUDE_CODE_USE_VERTEX`,请在 `env` 块中将其设置为空字符串:`"CLAUDE_CODE_USE_VERTEX": ""`。Claude Code 将空值视为未设置以进行提供程序选择。子进程仍然继承空值。115在设置文件中,您可以设置变量,但不能删除变量。要覆盖无法取消设置的变量,例如由您无法控制的 shell 配置文件导出的过时 `CLAUDE_CODE_USE_VERTEX`,请在 `env` 块中将其设置为空字符串:`"CLAUDE_CODE_USE_VERTEX": ""`。Claude Code 将空值视为未设置以进行提供程序选择。子进程仍然继承空值。

116 116 

117在设置文件之间,`env` 值遵循 [设置优先级](/docs/zh-CN/settings#settings-precedence),因此托管设置条目覆盖用户或项目设置中的相同变量。117在设置文件之间,`env` 值遵循 [设置优先级](/docs/zh-CN/settings#settings-precedence),因此托管设置条目覆盖用户或项目设置中的相同变量。项目和本地设置无法设置某些变量,例如 `CLAUDE_CONFIG_DIR` 和 OpenTelemetry 导出程序变量。[Claude Code 在 `env` 中忽略的变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 列出了它们,以及仍然适用的 OpenTelemetry 关闭值。

118 118 

119环境变量与 CLI 标志和会话内命令的交互方式因功能而异:`--model` 和 `/model` 覆盖 `ANTHROPIC_MODEL`,而 `CLAUDE_CODE_EFFORT_LEVEL` 覆盖 `--effort` 和 `/effort`。当变量与另一个配置源交互时,[变量](#variables) 列表中的其行说明优先级或链接到记录它的页面。119环境变量与 CLI 标志和会话内命令的交互方式因功能而异:`--model` 和 `/model` 覆盖 `ANTHROPIC_MODEL`,而 `CLAUDE_CODE_EFFORT_LEVEL` 覆盖 `--effort` 和 `/effort`。当变量与另一个配置源交互时,[变量](#variables) 列表中的其行说明优先级或链接到记录它的页面。

120 120 


142</Note>142</Note>

143 143 

144| 变量 | 目的 |144| 变量 | 目的 |

145| :------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |145| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

146| `ANTHROPIC_API_KEY` | 作为 `X-Api-Key` 标头发送的 API 密钥。设置此密钥后,即使您已登录,此密钥也会被用来代替您的 Claude Pro、Max、Team 或 Enterprise 订阅。在非交互模式(`-p`)中,存在密钥时始终使用该密钥。在交互模式中,在密钥覆盖您的订阅之前,系统会提示您批准一次。要改用您的订阅,请运行 `unset ANTHROPIC_API_KEY` |146| `ANTHROPIC_API_KEY` | 作为 `X-Api-Key` 标头发送的 API 密钥。设置此密钥后,即使您已登录,此密钥也会被用来代替您的 Claude Pro、Max、Team 或 Enterprise 订阅。在非交互模式(`-p`)中,存在密钥时始终使用该密钥。在交互模式中,在密钥覆盖您的订阅之前,系统会提示您批准一次。要改用您的订阅,请运行 `unset ANTHROPIC_API_KEY` |

147| `ANTHROPIC_AUTH_TOKEN` | `Authorization` 标头的自定义值(您设置的值将以 `Bearer ` 为前缀) |147| `ANTHROPIC_AUTH_TOKEN` | `Authorization` 标头的自定义值(您设置的值将以 `Bearer ` 为前缀) |

148| `ANTHROPIC_AWS_API_KEY` | [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 的工作区 API 密钥,在 AWS 控制台中生成。作为 `x-api-key` 发送,优先于 AWS SigV4 |148| `ANTHROPIC_AWS_API_KEY` | [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 的工作区 API 密钥,在 AWS 控制台中生成。作为 `x-api-key` 发送,优先于 AWS SigV4 |


223| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | 启用 `CLAUDE_AUTO_BACKGROUND_TASKS` 时,Claude 检查仍在运行的 [后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background) 的提醒之间的秒数。仅接受 `1` 到 `86400` 的纯整数;任何其他值或拼写读作未设置。未设置时,没有检查提醒。需要 Claude Code v2.1.248 或更高版本 |223| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | 启用 `CLAUDE_AUTO_BACKGROUND_TASKS` 时,Claude 检查仍在运行的 [后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background) 的提醒之间的秒数。仅接受 `1` 到 `86400` 的纯整数;任何其他值或拼写读作未设置。未设置时,没有检查提醒。需要 Claude Code v2.1.248 或更高版本 |

224| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置 [自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)(以令牌为单位),从 `100000` 到 `1000000`。仅接受纯整数(如 `500000`):像 `500k` 这样的值读作 `500` 并限制到 100K 最小值。有效窗口也上限为模型的上下文窗口。优先于 `/autocompact` 命令、`--autocompact` 标志和 `autoCompactWindow` 设置。状态行的 `used_percentage` 始终针对模型的完整上下文窗口进行测量,因此一旦设置此变量,该百分比不再指示何时压缩将运行 |224| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置 [自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)(以令牌为单位),从 `100000` 到 `1000000`。仅接受纯整数(如 `500000`):像 `500k` 这样的值读作 `500` 并限制到 100K 最小值。有效窗口也上限为模型的上下文窗口。优先于 `/autocompact` 命令、`--autocompact` 标志和 `autoCompactWindow` 设置。状态行的 `used_percentage` 始终针对模型的完整上下文窗口进行测量,因此一旦设置此变量,该百分比不再指示何时压缩将运行 |

225| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](/docs/zh-CN/vs-code)。默认情况下,在支持的 IDE 的集成终端内启动时,Claude Code 会自动连接。设置为 `false` 以防止这种情况。设置为 `true` 以在自动检测失败时强制连接尝试,例如当 tmux 隐藏父终端时。优先于 [`autoConnectIde`](/docs/zh-CN/settings-reference#autoconnectide) 全局配置设置 |225| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](/docs/zh-CN/vs-code)。默认情况下,在支持的 IDE 的集成终端内启动时,Claude Code 会自动连接。设置为 `false` 以防止这种情况。设置为 `true` 以在自动检测失败时强制连接尝试,例如当 tmux 隐藏父终端时。优先于 [`autoConnectIde`](/docs/zh-CN/settings-reference#autoconnectide) 全局配置设置 |

226| `CLAUDE_CODE_AUTO_MODE_SERVER` | 控制 Claude Code 是否要求服务器 [审查自动模式操作](/docs/zh-CN/permission-modes#server-side-classifier-review)。未设置时,Claude Code 在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上要求服务器,以及当您将 `ANTHROPIC_BASE_URL` 指向 LLM 网关或代理时。设置为 `0` 以改用 Claude Code 自己的分类器请求。在直接连接到 Anthropic API 时不读取。需要 Claude Code v2.1.271 或更高版本;默认要求服务器需要 v2.1.278 或更高版本 |226| `CLAUDE_CODE_AUTO_MODE_SERVER` | 控制 Claude Code 是否要求服务器 [审查自动模式操作](/docs/zh-CN/permission-modes#server-side-classifier-review)。设置为 `0` 以改用 Claude Code 自己的分类器请求。在直接连接到 Anthropic API 时,需要 v2.1.281 或更高版本。链接的部分列出当变量未设置时哪些会话要求服务器,以及从哪个版本开始。需要 Claude Code v2.1.271 或更高版本 |

227| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Claude Code 等待 AWS 默认凭证提供商链生成凭证的时间(以毫秒为单位),然后请求失败,显示 [`AWS default-chain credential resolve timed out`](/docs/zh-CN/errors#aws-default-chain-credential-resolve-timed-out)(默认值:`60000`)。当链中的步骤合理需要更长时间时提高它,例如通过 `aws-vault` 等包装器进行基于浏览器的 SSO 登录和 MFA。适用于 Claude Code 使用默认链签名的任何地方:[Amazon Bedrock](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 和 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。需要 Claude Code v2.1.207 或更高版本 |227| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Claude Code 等待 AWS 默认凭证提供商链生成凭证的时间(以毫秒为单位),然后请求失败,显示 [`AWS default-chain credential resolve timed out`](/docs/zh-CN/errors#aws-default-chain-credential-resolve-timed-out)(默认值:`60000`)。当链中的步骤合理需要更长时间时提高它,例如通过 `aws-vault` 等包装器进行基于浏览器的 SSO 登录和 MFA。适用于 Claude Code 使用默认链签名的任何地方:[Amazon Bedrock](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 和 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。需要 Claude Code v2.1.207 或更高版本 |

228| `CLAUDE_CODE_BASH_EDIT_DIFF` | 设置为 `0` 以关闭 [Bash 命令运行时更改的文件的差异](/docs/zh-CN/hooks#bash),或 `1` 以在每个权限模式中记录它。优先于 [`bashEditDiffEnabled`](/docs/zh-CN/settings-reference#basheditdiffenabled) 设置。需要 Claude Code v2.1.269 或更高版本 |228| `CLAUDE_CODE_BASH_EDIT_DIFF` | 设置为 `0` 以关闭 [Bash 命令运行时更改的文件的差异](/docs/zh-CN/hooks#bash),或 `1` 以在每个权限模式中记录它。优先于 [`bashEditDiffEnabled`](/docs/zh-CN/settings-reference#basheditdiffenabled) 设置。需要 Claude Code v2.1.269 或更高版本 |

229| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | 设置为 `0` 以使非交互式会话在每个转弯结束时向其主机报告空闲状态,即使后台工作仍在运行。默认情况下,会话在后台工作(如后台代理或 [工作流](/docs/zh-CN/workflows) 运行)仍在进行时,继续在转弯结束后报告运行状态。这使得监视状态的主机(如远程会话列表)不会在工作中途宣布 Claude 正在等待您的输入。后台 shell 命令(如开发服务器)不保持运行状态。运行状态默认值和 `0` 选择退出需要 Claude Code v2.1.269 或更高版本;在早期版本上,设置 `1` 以保持运行状态 |229| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | 设置为 `0` 以使非交互式会话在每个转弯结束时向其主机报告空闲状态,即使后台工作仍在运行。默认情况下,会话在后台工作(如后台代理或 [工作流](/docs/zh-CN/workflows) 运行)仍在进行时,继续在转弯结束后报告运行状态。这使得监视状态的主机(如远程会话列表)不会在工作中途宣布 Claude 正在等待您的输入。后台 shell 命令(如开发服务器)不保持运行状态。运行状态默认值和 `0` 选择退出需要 Claude Code v2.1.269 或更高版本;在早期版本上,设置 `1` 以保持运行状态 |


265| `CLAUDE_CODE_DISABLE_MOUSE` | 设置为 `1` 以在 [全屏呈现](/docs/zh-CN/fullscreen) 中禁用鼠标跟踪。使用 `PgUp` 和 `PgDn` 的键盘滚动仍然有效。使用此选项保持您的终端的本机选择复制行为 |265| `CLAUDE_CODE_DISABLE_MOUSE` | 设置为 `1` 以在 [全屏呈现](/docs/zh-CN/fullscreen) 中禁用鼠标跟踪。使用 `PgUp` 和 `PgDn` 的键盘滚动仍然有效。使用此选项保持您的终端的本机选择复制行为 |

266| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | 设置为 `1` 以在 [全屏呈现](/docs/zh-CN/fullscreen) 中禁用点击、拖动和悬停处理,同时保持鼠标滚轮滚动。当您希望滚轮滚动在 Claude Code 内工作但不希望点击定位光标、展开工具输出或打开链接时使用。当两者都设置时,`CLAUDE_CODE_DISABLE_MOUSE` 优先。需要 Claude Code v2.1.195 或更高版本 |266| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | 设置为 `1` 以在 [全屏呈现](/docs/zh-CN/fullscreen) 中禁用点击、拖动和悬停处理,同时保持鼠标滚轮滚动。当您希望滚轮滚动在 Claude Code 内工作但不希望点击定位光标、展开工具输出或打开链接时使用。当两者都设置时,`CLAUDE_CODE_DISABLE_MOUSE` 优先。需要 Claude Code v2.1.195 或更高版本 |

267| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | 设置为 `1` 以停止 Claude Code 在 API 请求因连接级错误(如连接重置或 TLS 握手错误)失败时重新读取 [mTLS 客户端证书和密钥](/docs/zh-CN/network-config#mtls-authentication)。禁用重新加载后,Claude Code 仅在下次应用设置或下次启动时加载轮换的文件。需要 Claude Code v2.1.232 或更高版本 |267| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | 设置为 `1` 以停止 Claude Code 在 API 请求因连接级错误(如连接重置或 TLS 握手错误)失败时重新读取 [mTLS 客户端证书和密钥](/docs/zh-CN/network-config#mtls-authentication)。禁用重新加载后,Claude Code 仅在下次应用设置或下次启动时加载轮换的文件。需要 Claude Code v2.1.232 或更高版本 |

268| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | 设置为任何非空值(如 `1`)以禁用非必要网络流量:自动更新、遥测、错误报告、`/feedback` 命令、[Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior)、发行说明、[PR 和 MR 状态徽章](/docs/zh-CN/interactive-mode#pr-review-status) 检查以及可用性检查(如 [快速模式](/docs/zh-CN/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) 检查)。它还停止 [插件 `command` 源的后台运行](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command),这是本地命令而不是网络流量,因为它们可以触发依赖项安装。**将其设置为 `0` 或 `false` 仍会禁用此流量**,与大多数打开/关闭变量不同;取消设置变量以再次允许它。也禁用功能标志获取,这使 [Remote Control](/docs/zh-CN/remote-control#requirements) 和其他 [需要功能标志获取的功能](#features-that-need-feature-flag-fetching) 不可用。官方插件市场自动安装不涵盖;使用 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` 禁用它。不影响 [网关模型发现](/docs/zh-CN/llm-gateway-connect#add-gateway-models-to-the-model-picker),它有自己的选择加入 |268| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | 设置为任何非空值(如 `1`)以禁用非必要网络流量:自动更新、遥测、错误报告、`/feedback` 命令、[Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior)、发行说明、[PR 和 MR 状态徽章](/docs/zh-CN/interactive-mode#pr-review-status) 检查以及可用性检查(如 [快速模式](/docs/zh-CN/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) 检查)。它还停止 [插件 `command` 源的后台运行](/docs/zh-CN/plugins/loading#when-a-command-source-re-runs),这是本地命令而不是网络流量,因为它们可以触发依赖项安装。**将其设置为 `0` 或 `false` 仍会禁用此流量**,与大多数打开/关闭变量不同;取消设置变量以再次允许它。也禁用功能标志获取,这使 [Remote Control](/docs/zh-CN/remote-control#requirements) 和其他 [需要功能标志获取的功能](#features-that-need-feature-flag-fetching) 不可用。官方插件市场自动安装不涵盖;使用 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` 禁用它。不影响 [网关模型发现](/docs/zh-CN/llm-gateway-connect#add-gateway-models-to-the-model-picker),它有自己的选择加入 |

269| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | 设置为 `1` 以禁用流式请求在中途失败时的非流式回退。流式错误传播到重试层。当代理或网关导致回退产生重复工具执行时很有用 |269| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | 设置为 `1` 以禁用流式请求在中途失败时的非流式回退。流式错误传播到重试层。当代理或网关导致回退产生重复工具执行时很有用 |

270| `CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK` | 设置为 `1` 以在您在终端中输入或专注时发送 `PushNotification` 工具的桌面通知。默认情况下,当工具检测到最近的键盘活动或终端焦点时,工具会跳过桌面通知和 [移动推送](/docs/zh-CN/remote-control#mobile-push-notifications)。此变量仅禁用该本地检查,因此服务器仍可在检测到您处于活跃状态时抑制移动推送。需要 Claude Code v2.1.193 或更高版本 |270| `CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK` | 设置为 `1` 以在您在终端中输入或专注时发送 `PushNotification` 工具的桌面通知。默认情况下,当工具检测到最近的键盘活动或终端焦点时,工具会跳过桌面通知和 [移动推送](/docs/zh-CN/remote-control#mobile-push-notifications)。此变量仅禁用该本地检查,因此服务器仍可在检测到您处于活跃状态时抑制移动推送。需要 Claude Code v2.1.193 或更高版本 |

271| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | 设置为 `1` 以禁用官方插件市场的自动注册。Claude Code 在即将注册市场时读取变量,通常在机器的第一次交互启动期间。如果变量在该点设置,Claude Code 永久跳过注册。稍后取消设置变量不会撤销跳过。随时运行 `claude plugin marketplace add anthropics/claude-plugins-official` 以注册市场 |271| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | 设置为 `1` 以禁用官方插件市场的自动注册。Claude Code 在即将注册市场时读取变量,通常在机器的第一次交互启动期间。如果变量在该点设置,Claude Code 永久跳过注册。稍后取消设置变量不会撤销跳过。随时运行 `claude plugin marketplace add anthropics/claude-plugins-official` 以注册市场 |


287| `CLAUDE_CODE_ENABLE_OPUS_4_7_FAST_MODE` | 在 v2.1.142 中删除,当 [快速模式](/docs/zh-CN/fast-mode) 默认从 Opus 4.6 移到 Opus 4.7 时 |287| `CLAUDE_CODE_ENABLE_OPUS_4_7_FAST_MODE` | 在 v2.1.142 中删除,当 [快速模式](/docs/zh-CN/fast-mode) 默认从 Opus 4.6 移到 Opus 4.7 时 |

288| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | 设置为 `false` 以关闭提示建议,即在您的提示输入中出现的灰显预测。优先于 [`promptSuggestionEnabled`](/docs/zh-CN/settings-reference#promptsuggestionenabled) 设置,这是 `/config` 中的**提示建议**切换写入的内容。Claude Code 也 [在您的帐户接近或达到使用限制时暂停建议](/docs/zh-CN/interactive-mode#when-claude-code-skips-suggestions)。设置为 `true` 以在达到限制之前保持它们打开。需要 Claude Code v2.1.238 或更高版本。请参阅 [提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) |288| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | 设置为 `false` 以关闭提示建议,即在您的提示输入中出现的灰显预测。优先于 [`promptSuggestionEnabled`](/docs/zh-CN/settings-reference#promptsuggestionenabled) 设置,这是 `/config` 中的**提示建议**切换写入的内容。Claude Code 也 [在您的帐户接近或达到使用限制时暂停建议](/docs/zh-CN/interactive-mode#when-claude-code-skips-suggestions)。设置为 `true` 以在达到限制之前保持它们打开。需要 Claude Code v2.1.238 或更高版本。请参阅 [提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) |

289| `CLAUDE_CODE_ENABLE_TASKS` | 选择 Claude Code 在 [具有它们的会话](/docs/zh-CN/tools-reference#task-tool-availability) 中提供的任务跟踪工具。默认情况下,Claude Code 提供 Task 工具 `TaskCreate`、`TaskUpdate`、`TaskGet` 和 `TaskList`。设置为 `0` 以改为获取旧版 `TodoWrite` 工具。请参阅 [任务列表](/docs/zh-CN/interactive-mode#task-list) |289| `CLAUDE_CODE_ENABLE_TASKS` | 选择 Claude Code 在 [具有它们的会话](/docs/zh-CN/tools-reference#task-tool-availability) 中提供的任务跟踪工具。默认情况下,Claude Code 提供 Task 工具 `TaskCreate`、`TaskUpdate`、`TaskGet` 和 `TaskList`。设置为 `0` 以改为获取旧版 `TodoWrite` 工具。请参阅 [任务列表](/docs/zh-CN/interactive-mode#task-list) |

290| `CLAUDE_CODE_ENABLE_TELEMETRY` | 设置为 `1` 以启用指标和日志记录的 OpenTelemetry 数据收集。在配置 OTel 导出器之前需要。请参阅 [监控](/docs/zh-CN/monitoring-usage) |290| `CLAUDE_CODE_ENABLE_TELEMETRY` | 设置为 `1` 以启用指标和日志记录的 OpenTelemetry 数据收集。在配置 OTel 导出器之前需要。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

291| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 设置为 `1` 以在每个模型上获取任务跟踪工具。没有它,Claude Code 仅在 [任务工具可用性](/docs/zh-CN/tools-reference#task-tool-availability) 下列出的模型上默认提供它们。`CLAUDE_CODE_ENABLE_TASKS` 仍选择 Task 工具或 `TodoWrite`。需要 Claude Code v2.1.233 或更高版本 |291| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 设置为 `1` 以在每个模型上获取任务跟踪工具。没有它,Claude Code 仅在 [任务工具可用性](/docs/zh-CN/tools-reference#task-tool-availability) 下列出的模型上默认提供它们。`CLAUDE_CODE_ENABLE_TASKS` 仍选择 Task 工具或 `TodoWrite`。需要 Claude Code v2.1.233 或更高版本 |

292| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 查询循环变为空闲后自动退出前等待的时间(以毫秒为单位)。对自动化工作流和使用 SDK 模式的脚本很有用 |292| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 查询循环变为空闲后自动退出前等待的时间(以毫秒为单位)。对自动化工作流和使用 SDK 模式的脚本很有用 |

293| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 以启用 [代理团队](/docs/zh-CN/agent-teams)。代理团队是实验性的,默认禁用 |293| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 以启用 [代理团队](/docs/zh-CN/agent-teams)。代理团队是实验性的,默认禁用 |


341| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | 设置为 `1` 以让 Claude Code 在新版本可用时在后台运行您的包管理器的升级命令。适用于 Homebrew 和 WinGet 安装。其他包管理器继续显示升级命令而不运行它。请参阅 [自动更新](/docs/zh-CN/setup#auto-updates) |341| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | 设置为 `1` 以让 Claude Code 在新版本可用时在后台运行您的包管理器的升级命令。适用于 Homebrew 和 WinGet 安装。其他包管理器继续显示升级命令而不运行它。请参阅 [自动更新](/docs/zh-CN/setup#auto-updates) |

342| `CLAUDE_CODE_PERFORCE_MODE` | 设置为 `1` 以启用 Perforce 感知写入保护。设置时,如果目标文件缺少所有者写入位(Perforce 在同步文件上清除,直到 `p4 edit` 打开它们),Edit、Write 和 NotebookEdit 会失败,显示 `p4 edit <file>` 提示。这防止 Claude Code 绕过 Perforce 更改跟踪 |342| `CLAUDE_CODE_PERFORCE_MODE` | 设置为 `1` 以启用 Perforce 感知写入保护。设置时,如果目标文件缺少所有者写入位(Perforce 在同步文件上清除,直到 `p4 edit` 打开它们),Edit、Write 和 NotebookEdit 会失败,显示 `p4 edit <file>` 提示。这防止 Claude Code 绕过 Perforce 更改跟踪 |

343| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | 覆盖插件根目录。尽管名称如此,这设置了父目录,而不是缓存本身:市场和插件缓存位于此路径下的子目录中。默认为 `~/.claude/plugins` |343| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | 覆盖插件根目录。尽管名称如此,这设置了父目录,而不是缓存本身:市场和插件缓存位于此路径下的子目录中。默认为 `~/.claude/plugins` |

344| `CLAUDE_CODE_PLUGIN_DIRS` | 要为会话加载的插件目录,每个加载方式与 [`--plugin-dir`](/docs/zh-CN/plugins#test-your-plugins-locally) 标志加载它的方式相同。在 Unix 上用 `:` 分隔多个路径,在 Windows 上用 `;` 分隔。将每个路径作为绝对路径给出或以 `~` 开头,因为 Claude Code 跳过相对路径。需要 Claude Code v2.1.280 或更高版本 |344| `CLAUDE_CODE_PLUGIN_DIRS` | 要为会话加载的插件目录,每个加载方式与 [`--plugin-dir`](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) 标志加载它的方式相同。在 Unix 上用 `:` 分隔多个路径,在 Windows 上用 `;` 分隔。将每个路径作为绝对路径给出或以 `~` 开头,因为 Claude Code 跳过相对路径。需要 Claude Code v2.1.280 或更高版本。请参阅 [为一个会话加载插件](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session) |

345| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | 安装或更新插件时 git 操作的超时时间(以毫秒为单位)(默认值:120000)。对于大型存储库或缓慢网络连接,增加此值。请参阅 [Git 操作超时](/docs/zh-CN/plugin-marketplaces#git-operations-time-out) |345| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | 克隆或刷新插件市场的超时时间(以毫秒为单位)(默认值:120000)。对于大型存储库或缓慢网络连接,增加此值。请参阅 [Git 克隆超时](/docs/zh-CN/plugins/troubleshooting#git-clone-timed-out-after-120s) |

346| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | 设置为 `1` 以在市场刷新无法到达或验证远程时跳过重新克隆尝试并继续使用现有市场检出。在离线或隔离环境中很有用,其中重新克隆会以相同方式失败。请参阅 [市场更新在离线环境中失败](/docs/zh-CN/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) |346| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | 设置为 `1` 以在市场刷新无法到达或验证远程时跳过重新克隆尝试并继续使用现有市场检出。在离线或隔离环境中很有用,其中重新克隆会以相同方式失败。请参阅 [市场更新在离线环境中失败](/docs/zh-CN/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |

347| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | 设置为 `1` 以通过 HTTPS 而不是 SSH 克隆 GitHub `owner/repo` 速记源。适用于插件安装和更新,以及 `/plugin marketplace add` 和 `update`。在 CI 运行器、容器或任何没有为 `github.com` 配置 SSH 密钥的环境中很有用 |347| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | 设置为 `1` 以通过 HTTPS 而不是 SSH 克隆 GitHub `owner/repo` 速记源。适用于插件安装和更新,以及 `/plugin marketplace add` 和 `update`。在 CI 运行器、容器或任何没有为 `github.com` 配置 SSH 密钥的环境中很有用 |

348| `CLAUDE_CODE_PLUGIN_SEED_DIR` | 一个或多个只读插件种子目录的路径,在 Unix 上用 `:` 分隔,在 Windows 上用 `;` 分隔。使用此选项将预填充的插件目录捆绑到容器镜像中。Claude Code 在启动时从这些目录注册市场,并使用预缓存的插件而不重新克隆。请参阅 [为容器预填充插件](/docs/zh-CN/plugin-marketplaces#pre-populate-plugins-for-containers) |348| `CLAUDE_CODE_PLUGIN_SEED_DIR` | 一个或多个只读插件种子目录的路径,在 Unix 上用 `:` 分隔,在 Windows 上用 `;` 分隔。使用此选项将预填充的插件目录捆绑到容器镜像中。Claude Code 在启动时从这些目录注册市场,并使用预缓存的插件而不重新克隆。请参阅 [为容器预填充插件](/docs/zh-CN/plugins/org#seed-containers-and-ci) |

349| `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY` | 设置为 `1` 以停止 Claude Code 在为工具调用、hooks 和状态行命令生成 PowerShell 时传递 `-ExecutionPolicy Bypass`,并改为尊重机器的有效执行策略。默认情况下 Claude Code 在进程范围内绕过执行策略,以便 `.ps1` 脚本和模块导入在默认受限的 Windows 安装上工作。进程范围绕过从不覆盖 Group Policy `MachinePolicy` 或 `UserPolicy`,无论此设置如何 |349| `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY` | 设置为 `1` 以停止 Claude Code 在为工具调用、hooks 和状态行命令生成 PowerShell 时传递 `-ExecutionPolicy Bypass`,并改为尊重机器的有效执行策略。默认情况下 Claude Code 在进程范围内绕过执行策略,以便 `.ps1` 脚本和模块导入在默认受限的 Windows 安装上工作。进程范围绕过从不覆盖 Group Policy `MachinePolicy` 或 `UserPolicy`,无论此设置如何 |

350| `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS` | 在 [非交互模式](/docs/zh-CN/headless#background-tasks-at-exit) 中使用 `-p` 标志的最后转弯后,等待后台子代理和工作流的空闲等待的上限(以毫秒为单位)。空闲等待在 Claude 采取转弯处理后台结果时重新开始。默认值:`600000`,或 10 分钟。当空闲等待达到上限时,Claude Code 停止等待剩余的后台任务并退出。设置为 `0` 以无限期等待。此上限与适用于纯后台 shell 的五秒宽限期分开。需要 Claude Code v2.1.182 或更高版本 |350| `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS` | 在 [非交互模式](/docs/zh-CN/headless#background-tasks-at-exit) 中使用 `-p` 标志的最后转弯后,等待后台子代理和工作流的空闲等待的上限(以毫秒为单位)。空闲等待在 Claude 采取转弯处理后台结果时重新开始。默认值:`600000`,或 10 分钟。当空闲等待达到上限时,Claude Code 停止等待剩余的后台任务并退出。设置为 `0` 以无限期等待。此上限与适用于纯后台 shell 的五秒宽限期分开。需要 Claude Code v2.1.182 或更高版本 |

351| `CLAUDE_CODE_PROCESS_WRAPPER` | 通过给定为 argv 前缀的公司启动器(如 `/opt/corp/launcher`)启动 Claude Code 从其自己的二进制文件启动的进程,例如托管 [代理视图](/docs/zh-CN/agent-view) 会话的后台服务。在用户或 [托管设置](/docs/zh-CN/managed-settings) 的 `env` 块中设置它,而不是作为 shell 导出,以便分离的后台服务继承它;项目和本地设置无法设置它。等同于 [`processWrapper` 设置](/docs/zh-CN/settings-reference#processwrapper),需要 Claude Code v2.1.210 或更高版本;当两者都设置时此变量优先。VS Code 扩展通过其 `claudeProcessWrapper` 设置单独配置自己的启动器。在 Windows 上被忽略。请参阅 [在公司启动器后面运行 Claude Code](/docs/zh-CN/corporate-launcher) 了解值格式、启动器涵盖的内容以及启动器必须满足的合同。需要 Claude Code v2.1.208 或更高版本 |351| `CLAUDE_CODE_PROCESS_WRAPPER` | 通过给定为 argv 前缀的公司启动器(如 `/opt/corp/launcher`)启动 Claude Code 从其自己的二进制文件启动的进程,例如托管 [代理视图](/docs/zh-CN/agent-view) 会话的后台服务。在用户或 [托管设置](/docs/zh-CN/managed-settings) 的 `env` 块中设置它,而不是作为 shell 导出,以便分离的后台服务继承它;项目和本地设置无法设置它。等同于 [`processWrapper` 设置](/docs/zh-CN/settings-reference#processwrapper),需要 Claude Code v2.1.210 或更高版本;当两者都设置时此变量优先。VS Code 扩展通过其 `claudeProcessWrapper` 设置单独配置自己的启动器。在 Windows 上被忽略。请参阅 [在公司启动器后面运行 Claude Code](/docs/zh-CN/corporate-launcher) 了解值格式、启动器涵盖的内容以及启动器必须满足的合同。需要 Claude Code v2.1.208 或更高版本 |


359| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 以在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 在设置文件的 `env` 块中忽略此变量。需要 Claude Code v2.1.248 或更高版本 |359| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 以在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 在设置文件的 `env` 块中忽略此变量。需要 Claude Code v2.1.248 或更高版本 |

360| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 以在前一个会话在转弯中期结束时自动恢复。在 SDK 模式中使用,以便模型继续而不需要 SDK 重新发送提示。要关闭此功能,取消设置变量或将其设置为 `0`。在 v2.1.221 之前,Claude Code 忽略 `0` 和其他虚假值,因此在非交互模式中设置 `0` 仍会触发恢复,取消设置变量是关闭它的唯一方法 |360| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 以在前一个会话在转弯中期结束时自动恢复。在 SDK 模式中使用,以便模型继续而不需要 SDK 重新发送提示。要关闭此功能,取消设置变量或将其设置为 `0`。在 v2.1.221 之前,Claude Code 忽略 `0` 和其他虚假值,因此在非交互模式中设置 `0` 仍会触发恢复,取消设置变量是关闭它的唯一方法 |

361| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 最后转录消息的最大年龄(以毫秒为单位),用于在恢复时在转弯中期结束的会话自动继续。当最后一条消息比此界限更旧时,Claude Code 跳过 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 自动恢复和注入的 `CLAUDE_CODE_RESUME_PROMPT` 继续消息,会话启动空闲,以便您明确继续。未设置或 `0` 意味着没有界限,除了最后一个请求因 API 错误失败的转弯仅在该错误少于六小时时恢复。正值界限每个转弯,包括那些;负值或非数值值应用一小时界限。长时间运行的代理的生成脚本可以设置此项,以便针对旧转录的重启不会重新运行陈旧的提示。Claude Code 在重启继承其对话的崩溃 [代理视图](/docs/zh-CN/agent-view) 会话时自己设置一小时界限。需要 Claude Code v2.1.211 或更高版本 |361| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 最后转录消息的最大年龄(以毫秒为单位),用于在恢复时在转弯中期结束的会话自动继续。当最后一条消息比此界限更旧时,Claude Code 跳过 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 自动恢复和注入的 `CLAUDE_CODE_RESUME_PROMPT` 继续消息,会话启动空闲,以便您明确继续。未设置或 `0` 意味着没有界限,除了最后一个请求因 API 错误失败的转弯仅在该错误少于六小时时恢复。正值界限每个转弯,包括那些;负值或非数值值应用一小时界限。长时间运行的代理的生成脚本可以设置此项,以便针对旧转录的重启不会重新运行陈旧的提示。Claude Code 在重启继承其对话的崩溃 [代理视图](/docs/zh-CN/agent-view) 会话时自己设置一小时界限。需要 Claude Code v2.1.211 或更高版本 |

362| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖在恢复在转弯中期结束的会话时注入的继续消息。默认为 `Continue from where you left off.`。长时间运行的代理的生成脚本可以设置此项为更指令性的启动消息。空字符串使用默认值 |362| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖在恢复在转弯中期结束的会话时注入的继续消息,或当您使用 `-p` [恢复延迟的工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later) 时。默认为 `Continue from where you left off.`。空字符串使用默认值 |

363| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于无人值守的会话(如评估工具、CI 作业或远程工作者),设置为 `1`。无限期重试 `429` 和 `529` 容量错误,而不是在 `CLAUDE_CODE_MAX_RETRIES` 尝试后失败。当标准速度请求获得报告支出限制或耗尽使用信用的 `429` 时,Claude Code 立即失败,即使来自 [网关支出上限](/docs/zh-CN/errors#spend-limit-reached) 按计划重置。在 v2.1.239 之前,监视程序无限期重试这些。对于快速模式请求,请参阅 [处理速率限制](/docs/zh-CN/fast-mode#handle-rate-limits)。监视程序在尝试之间退避最多 5 分钟,或直到限制重置(当响应携带速率限制重置时间时),因此命中使用限制的会话等待剩余窗口。在 v2.1.199 或更高版本上,它也为其他瞬时错误(如服务器错误、超时和丢弃的连接)提高默认重试计数到 300,大约三小时的退避,如果您明确设置该变量,则删除 `CLAUDE_CODE_MAX_RETRIES` 的 15 上限。需要 Claude Code v2.1.186 或更高版本 |363| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于无人值守的会话(如评估工具、CI 作业或远程工作者),设置为 `1`。无限期重试 `429` 和 `529` 容量错误,而不是在 `CLAUDE_CODE_MAX_RETRIES` 尝试后失败。当标准速度请求获得报告支出限制或耗尽使用信用的 `429` 时,Claude Code 立即失败,即使来自 [网关支出上限](/docs/zh-CN/errors#spend-limit-reached) 按计划重置。在 v2.1.239 之前,监视程序无限期重试这些。对于快速模式请求,请参阅 [处理速率限制](/docs/zh-CN/fast-mode#handle-rate-limits)。监视程序在尝试之间退避最多 5 分钟,或直到限制重置(当响应携带速率限制重置时间时),因此命中使用限制的会话等待剩余窗口。在 v2.1.199 或更高版本上,它也为其他瞬时错误(如服务器错误、超时和丢弃的连接)提高默认重试计数到 300,大约三小时的退避,如果您明确设置该变量,则删除 `CLAUDE_CODE_MAX_RETRIES` 的 15 上限。需要 Claude Code v2.1.186 或更高版本 |

364| `CLAUDE_CODE_SAFE_MODE` | 设置为 `1` 以在安全模式下启动:CLAUDE.md、skills、插件、hooks、MCP 服务器、自定义命令和代理、输出样式、工作流、自定义主题、自定义快捷键、状态行和文件建议命令、LSP 服务器和自动内存不加载,用于故障排除破损的配置。托管设置策略仍然适用,包括策略配置的 hooks、状态行和文件建议命令;托管插件、托管 skills、托管 CLAUDE.md 和策略配置的 MCP 服务器不加载。等同于传递 [`--safe-mode`](/docs/zh-CN/cli-reference#cli-flags)。直接生成的子进程继承变量 |364| `CLAUDE_CODE_SAFE_MODE` | 设置为 `1` 以在安全模式下启动:CLAUDE.md、skills、插件、hooks、MCP 服务器、自定义命令和代理、输出样式、工作流、自定义主题、自定义快捷键、状态行和文件建议命令、LSP 服务器和自动内存不加载,用于故障排除破损的配置。托管设置策略仍然适用,包括策略配置的 hooks、状态行和文件建议命令;托管插件、托管 skills、托管 CLAUDE.md 和策略配置的 MCP 服务器不加载。等同于传递 [`--safe-mode`](/docs/zh-CN/cli-reference#cli-flags)。直接生成的子进程继承变量 |

365| `CLAUDE_CODE_SCRIPT_CAPS` | JSON 对象限制当设置 `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` 时特定脚本在每个会话中可能被调用的次数。密钥是与命令文本匹配的子字符串;值是整数调用限制。例如,`{"deploy.sh": 2}` 允许 `deploy.sh` 最多被调用两次。匹配是基于子字符串的,因此 shell 扩展技巧(如 `./scripts/deploy.sh $(evil)`)仍然计入上限。运行时通过 `xargs` 或 `find -exec` 的扇出未被检测;这是深度防御控制 |365| `CLAUDE_CODE_SCRIPT_CAPS` | JSON 对象限制当设置 `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` 时特定脚本在每个会话中可能被调用的次数。密钥是与命令文本匹配的子字符串;值是整数调用限制。例如,`{"deploy.sh": 2}` 允许 `deploy.sh` 最多被调用两次。匹配是基于子字符串的,因此 shell 扩展技巧(如 `./scripts/deploy.sh $(evil)`)仍然计入上限。运行时通过 `xargs` 或 `find -exec` 的扇出未被检测;这是深度防御控制 |


369| `CLAUDE_CODE_SESSION_ID` | 在 Bash 和 PowerShell 工具子进程、[hook 命令](/docs/zh-CN/hooks) 子进程和 stdio [MCP 服务器](/docs/zh-CN/mcp) 子进程中自动设置为当前会话 ID。对于 Bash、PowerShell 和 hooks,这与 hook JSON 输入中的 `session_id` 字段匹配,并在 `/clear` 上更新。MCP 服务器子进程保留它生成时的 ID。在 `--resume <session-id>` 上它接收恢复的 ID,与 hooks 和 Bash 匹配。在 `--continue` 或 `--resume` 没有显式 ID 上它可能接收初始启动 ID。用于将脚本和外部工具与启动它们的 Claude Code 会话相关联 |369| `CLAUDE_CODE_SESSION_ID` | 在 Bash 和 PowerShell 工具子进程、[hook 命令](/docs/zh-CN/hooks) 子进程和 stdio [MCP 服务器](/docs/zh-CN/mcp) 子进程中自动设置为当前会话 ID。对于 Bash、PowerShell 和 hooks,这与 hook JSON 输入中的 `session_id` 字段匹配,并在 `/clear` 上更新。MCP 服务器子进程保留它生成时的 ID。在 `--resume <session-id>` 上它接收恢复的 ID,与 hooks 和 Bash 匹配。在 `--continue` 或 `--resume` 没有显式 ID 上它可能接收初始启动 ID。用于将脚本和外部工具与启动它们的 Claude Code 会话相关联 |

370| `CLAUDE_CODE_SHELL` | 设置 Claude Code 用于运行 Bash 工具命令的 shell。接受 `bash` 或 `zsh` 二进制文件的路径,例如 `/opt/homebrew/bin/bash`。不支持 `fish` 等其他 shell。如果值不是工作的 `bash` 或 `zsh` 路径,Claude Code 忽略它并回退到自动检测。自动检测在指向 `bash` 或 `zsh` 时使用您的 `$SHELL`,否则它选择在您的 `PATH` 和标准安装位置上找到的第一个工作 `zsh` 然后 `bash` |370| `CLAUDE_CODE_SHELL` | 设置 Claude Code 用于运行 Bash 工具命令的 shell。接受 `bash` 或 `zsh` 二进制文件的路径,例如 `/opt/homebrew/bin/bash`。不支持 `fish` 等其他 shell。如果值不是工作的 `bash` 或 `zsh` 路径,Claude Code 忽略它并回退到自动检测。自动检测在指向 `bash` 或 `zsh` 时使用您的 `$SHELL`,否则它选择在您的 `PATH` 和标准安装位置上找到的第一个工作 `zsh` 然后 `bash` |

371| `CLAUDE_CODE_SHELL_PREFIX` | 包装 Claude Code 生成的 shell 命令的命令前缀:Bash 工具调用、[hook](/docs/zh-CN/hooks) 命令、[状态行](/docs/zh-CN/statusline) 命令和 stdio [MCP 服务器](/docs/zh-CN/mcp) 启动命令。PowerShell hooks 和 exec 形式 hooks 运行而不带前缀。对于日志记录或审计很有用。设置裸可执行文件路径(如 `/path/to/logger.sh`)将每个命令作为 `/path/to/logger.sh '<command>'` 运行。包装器在 `$1` 中接收命令行作为单个 shell 引用的参数,因此包装器必须用 shell 重新评估 `$1`,例如 `exec bash -c "$1"`。将 `$1` 视为裸可执行文件路径会破坏传递参数的 stdio MCP 服务器,例如 `npx -y <package>`。对于 Bash 工具调用,`$1` 包含 Claude Code 组装的完整 shell 调用,包括环境设置,而不仅仅是 Claude 运行的命令 |371| `CLAUDE_CODE_SHELL_PREFIX` | 包装 Claude Code 生成的 shell 命令的命令前缀:Bash 工具调用、[hook](/docs/zh-CN/hooks) 命令、[状态行](/docs/zh-CN/statusline) 命令和 stdio [MCP 服务器](/docs/zh-CN/mcp) 启动命令。PowerShell hooks 和 exec 形式 hooks 运行而不带前缀。对于日志记录或审计很有用。设置裸可执行文件路径(如 `/path/to/logger.sh`)将每个命令作为 `/path/to/logger.sh '<command>'` 运行。包装器在 `$1` 中接收命令行作为单个 shell 引用的参数,因此包装器必须用 shell 重新评估 `$1`,例如 `exec bash -c "$1"`。将 `$1` 视为裸可执行文件路径会破坏传递参数的 stdio MCP 服务器,例如 `npx -y <package>`。对于 Bash 工具调用,`$1` 包含 Claude Code 组装的完整 shell 调用,包括环境设置,而不仅仅是 Claude 运行的命令 |

372| `CLAUDE_CODE_SIMPLE` | 设置为 `1` 以使用最小系统提示和仅 Bash、文件读取和文件编辑工具运行。来自 `--mcp-config` 的 MCP 工具仍然可用。禁用 hooks、skills、自定义命令、子代理、插件、MCP 服务器、自动内存和 CLAUDE.md 的自动发现。您使用 `--add-dir` 传递的目录中的 Skills 仍然加载。OAuth 令牌和钥匙串凭证不被读取,因此 Anthropic 身份验证必须来自 `ANTHROPIC_API_KEY` 或 `--settings` 中的 `apiKeyHelper`。等同于传递 [`--bare`](/docs/zh-CN/headless#start-faster-with-bare-mode) |372| `CLAUDE_CODE_SIMPLE` | 设置为 `1` 以使用最小系统提示和仅 Bash、文件读取和文件编辑工具运行。来自 `--mcp-config` 的 MCP 工具仍然可用。禁用 hooks、skills、自定义命令、子代理、插件、MCP 服务器、自动内存和 CLAUDE.md 的自动发现。Skills 在您使用 `--add-dir` 传递的目录中仍然加载。OAuth 令牌和钥匙串凭证不被读取,因此 Anthropic 身份验证必须来自 `ANTHROPIC_API_KEY` 或 `--settings` 中的 `apiKeyHelper`。等同于传递 [`--bare`](/docs/zh-CN/headless#start-faster-with-bare-mode) |

373| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | 设置为 `1` 以在任何模型上使用较短的系统提示和缩写的工具描述。设置为 `0`、`false`、`no` 或 `off` 以选择退出,即使在实验或服务器配置会启用它的模型上。完整的工具集、hooks、MCP 服务器和 CLAUDE.md 发现保持启用 |373| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | 设置为 `1` 以在任何模型上使用较短的系统提示和缩写的工具描述。设置为 `0`、`false`、`no` 或 `off` 以选择退出,即使在实验或服务器配置会启用它的模型上。完整的工具集、hooks、MCP 服务器和 CLAUDE.md 发现保持启用 |

374| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | 跳过 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 的客户端身份验证,用于自己签署请求的网关 |374| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | 跳过 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 的客户端身份验证,用于自己签署请求的网关 |

375| `CLAUDE_CODE_SKIP_AWS_CRED_CACHE` | 设置为 `1` 以关闭从 AWS 默认凭证提供商链解析的凭证的进程内缓存,因此 Claude Code 在每个 API 请求上解析链。禁用缓存后,由 SSO 支持的配置文件在每个请求上从 IAM Identity Center 请求凭证。请参阅 [凭证缓存和解析超时](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout)。需要 Claude Code v2.1.207 或更高版本 |375| `CLAUDE_CODE_SKIP_AWS_CRED_CACHE` | 设置为 `1` 以关闭从 AWS 默认凭证提供商链解析的凭证的进程内缓存,因此 Claude Code 在每个 API 请求上解析链。禁用缓存后,由 SSO 支持的配置文件在每个请求上从 IAM Identity Center 请求凭证。请参阅 [凭证缓存和解析超时](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout)。需要 Claude Code v2.1.207 或更高版本 |


389| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 在非交互模式(`-p` 标志)中设置为 `1` 以等待插件安装完成,然后第一个查询。没有这个,插件在后台安装,可能在第一个转弯上不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合以界限等待 |389| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 在非交互模式(`-p` 标志)中设置为 `1` 以等待插件安装完成,然后第一个查询。没有这个,插件在后台安装,可能在第一个转弯上不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合以界限等待 |

390| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(以毫秒为单位)。超过时,Claude Code 继续而不带插件并记录错误。无默认值:没有此变量,同步安装等待直到完成 |390| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(以毫秒为单位)。超过时,Claude Code 继续而不带插件并记录错误。无默认值:没有此变量,同步安装等待直到完成 |

391| `CLAUDE_CODE_SYNC_SKILLS` | 在非交互模式中设置为 `1`,使用 `-p` 标志,使 Claude Code 下载为您的 claude.ai 帐户启用的 skills 在该运行中,并等待它们的列表,最多 `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS`,然后它运行第一个查询。下载本身在后台完成,Claude 在调用 skill 时等待 skill 的下载。需要 claude.ai 身份验证。在您使用 claude.ai 帐户登录的终端会话中 [下载这些 skills](/docs/zh-CN/skills#where-synced-skills-load) 到 `~/.claude/skills/synced/` 并大约每 10 分钟重新同步,没有此变量,因此仅在 `-p` 运行需要您当前 skills 在其第一个查询上时设置它。在 v2.1.273 之前,终端会话仅在带此变量集的 `-p` 运行中下载它们。`synced` 文件夹名称是 [为此下载保留的](/docs/zh-CN/skills#where-skills-live)。在 v2.1.227 之前,skills 直接下载到 `~/.claude/skills/` 中。Claude Code 对下载的 skills 应用 [额外规则](/docs/zh-CN/skills#how-synced-skills-behave),例如不在您的机器上运行它们的 `!` 命令 |391| `CLAUDE_CODE_SYNC_SKILLS` | 在非交互模式中设置为 `1`,使用 `-p` 标志,使 Claude Code 下载为您的 claude.ai 帐户启用的 skills 在该运行中,并等待它们的列表,最多 `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS`,然后它运行第一个查询。下载本身在后台完成,Claude 在调用 skill 时等待 skill 的下载。需要 claude.ai 身份验证。在您使用 claude.ai 帐户登录的终端会话中 [下载这些 skills](/docs/zh-CN/skills#where-synced-skills-load) 到 `~/.claude/skills/synced/` 并大约每 10 分钟重新同步,没有此变量,因此仅在 `-p` 运行需要您当前 skills 在其第一个查询上时设置它。在 v2.1.273 之前,终端会话仅在带此变量集的 `-p` 运行中下载它们。`synced` 文件夹名称是 [为此下载保留的](/docs/zh-CN/skills#where-skills-live)。在 v2.1.227 之前,skills 直接下载到 `~/.claude/skills/` 中。Claude Code 对下载的 skills 应用 [额外规则](/docs/zh-CN/skills#how-synced-skills-behave),例如不在您的机器上运行它们的 `!` 命令 |

392| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | 当 [Agent SDK](/docs/zh-CN/agent-sdk/typescript) 上构建的应用重新加载 skills 时运行的 skills 重新同步的超时时间(以毫秒为单位)(默认值:30000)。超过时,重新加载继续使用已到达的任何 skills,剩余下载在后台完成 |392| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | 当 [Agent SDK](/docs/zh-CN/agent-sdk/typescript#query-object) 上构建的应用重新加载 skills 时运行的 skills 重新同步的超时时间(以毫秒为单位)(默认值:30000)。超过时,重新加载继续使用已到达的任何 skills,剩余下载在后台完成 |

393| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 当设置 `CLAUDE_CODE_SYNC_SKILLS` 时第一个查询等待初始 skill 列表的超时时间(以毫秒为单位)(默认值:5000)。超过时,第一个查询使用已到达的任何 skills 运行。下载无论如何都在后台完成,Claude 在调用 skill 时等待 skill 的下载 |393| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 当设置 `CLAUDE_CODE_SYNC_SKILLS` 时第一个查询等待初始 skill 列表的超时时间(以毫秒为单位)(默认值:5000)。超过时,第一个查询使用已到达的任何 skills 运行。下载无论如何都在后台完成,Claude 在调用 skill 时等待 skill 的下载 |

394| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 以在差异输出中禁用语法突出显示。当颜色干扰您的终端设置时很有用。要也在代码块和文件预览中禁用突出显示,请使用 [`syntaxHighlightingDisabled`](/docs/zh-CN/settings-reference#syntaxhighlightingdisabled) 设置 |394| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 以在差异输出中禁用语法突出显示。当颜色干扰您的终端设置时很有用。要也在代码块和文件预览中禁用突出显示,请使用 [`syntaxHighlightingDisabled`](/docs/zh-CN/settings-reference#syntaxhighlightingdisabled) 设置 |

395| `CLAUDE_CODE_TASK_LIST_ID` | 跨会话共享任务列表。在多个 Claude Code 实例中设置相同的 ID 以在 [具有 Task 工具的会话](/docs/zh-CN/tools-reference#task-tool-availability) 中协调共享任务列表。请参阅 [任务列表](/docs/zh-CN/interactive-mode#task-list) |395| `CLAUDE_CODE_TASK_LIST_ID` | 跨会话共享任务列表。在多个 Claude Code 实例中设置相同的 ID 以在 [具有 Task 工具的会话](/docs/zh-CN/tools-reference#task-tool-availability) 中协调共享任务列表。请参阅 [任务列表](/docs/zh-CN/interactive-mode#task-list) |


478| `MCP_TOOL_TIMEOUT` | MCP 工具执行的超时时间(以毫秒为单位)(默认值:100000000,约 28 小时)。对于 HTTP、SSE 或 claude.ai 连接器服务器,每个请求也默认在 60 秒后超时;将此变量或每个服务器 `timeout` 设置为 60000 以上以提高该每个请求限制。较低的值仍会缩短整体工具执行超时,但保持每个请求限制为 60 秒。Stdio 和 WebSocket 服务器没有每个请求计时器。`.mcp.json` 中的每个服务器 `timeout` 字段覆盖此用于该服务器。至少 1000 的每个服务器 `timeout` 也为该服务器的工具调用设置最小空闲窗口,因此 `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` 从不更早中止它们;此下限需要 Claude Code v2.1.203 或更高版本。对于 env 变量,低于 1000 的值下限为一秒;对于每个服务器字段,低于 1000 的值被忽略 |478| `MCP_TOOL_TIMEOUT` | MCP 工具执行的超时时间(以毫秒为单位)(默认值:100000000,约 28 小时)。对于 HTTP、SSE 或 claude.ai 连接器服务器,每个请求也默认在 60 秒后超时;将此变量或每个服务器 `timeout` 设置为 60000 以上以提高该每个请求限制。较低的值仍会缩短整体工具执行超时,但保持每个请求限制为 60 秒。Stdio 和 WebSocket 服务器没有每个请求计时器。`.mcp.json` 中的每个服务器 `timeout` 字段覆盖此用于该服务器。至少 1000 的每个服务器 `timeout` 也为该服务器的工具调用设置最小空闲窗口,因此 `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` 从不更早中止它们;此下限需要 Claude Code v2.1.203 或更高版本。对于 env 变量,低于 1000 的值下限为一秒;对于每个服务器字段,低于 1000 的值被忽略 |

479| `NO_PROXY` | 请求将直接发出的域和 IP 列表,绕过代理 |479| `NO_PROXY` | 请求将直接发出的域和 IP 列表,绕过代理 |

480| `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` | 标准 OpenTelemetry SDK 属性值长度限制。Claude Code 将内容承载遥测属性上限为此和 `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` 中的较小者,因此截断标记保持在 SDK 限制内。Claude Code 以相同方式读取 `OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT` 和 `OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT` 变体,最小设置值适用于所有信号。需要 Claude Code v2.1.214 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#common-configuration-variables) |480| `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` | 标准 OpenTelemetry SDK 属性值长度限制。Claude Code 将内容承载遥测属性上限为此和 `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` 中的较小者,因此截断标记保持在 SDK 限制内。Claude Code 以相同方式读取 `OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT` 和 `OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT` 变体,最小设置值适用于所有信号。需要 Claude Code v2.1.214 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#common-configuration-variables) |

481| `OTEL_LOG_ASSISTANT_RESPONSES` | 设置为 `1` 以在 `assistant_response` OpenTelemetry 日志事件上包含模型的响应文本。未设置时,使用 `OTEL_LOG_USER_PROMPTS` 的值。设置为 `0` 以保持响应被编辑,即使 `OTEL_LOG_USER_PROMPTS` 被设置。需要 Claude Code v2.1.193 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#assistant-response-event) |481| `OTEL_LOG_ASSISTANT_RESPONSES` | 设置为 `1` 以在 `assistant_response` OpenTelemetry 日志事件上包含模型的响应文本。未设置时,使用 `OTEL_LOG_USER_PROMPTS` 的值。设置为 `0` 以保持响应被编辑,即使 `OTEL_LOG_USER_PROMPTS` 被设置。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。需要 Claude Code v2.1.193 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#assistant-response-event) |

482| `OTEL_LOG_MANAGED_SETTINGS` | 设置为 `1` 以将编辑的托管设置和设置编辑前的 SHA-256 摘要添加到 `managed_settings_resolved` OpenTelemetry 日志事件。默认禁用。在您的 shell、用户设置或托管设置中设置它;项目或本地设置中的值不会打开它。需要 Claude Code v2.1.274 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#managed-settings-resolved-event) |482| `OTEL_LOG_MANAGED_SETTINGS` | 设置为 `1` 以将编辑的托管设置和设置编辑前的 SHA-256 摘要添加到 `managed_settings_resolved` OpenTelemetry 日志事件。默认禁用。在您的 shell、用户设置或托管设置中设置它;项目或本地设置中的值不会打开它。需要 Claude Code v2.1.274 或更高版本。请参阅 [监控](/docs/zh-CN/monitoring-usage#managed-settings-resolved-event) |

483| `OTEL_LOG_RAW_API_BODIES` | 发出 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件。设置为 `1` 用于在内容限制处截断的内联正文,或 `file:<dir>` 以将未截断的正文写入磁盘并改为发出 `body_ref` 路径。`CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` 配置内容限制,默认 60 KB。默认禁用;正文包括整个对话历史。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage#api-request-body-event) |483| `OTEL_LOG_RAW_API_BODIES` | 发出 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件。设置为 `1` 用于在内容限制处截断的内联正文,或 `file:<dir>` 以将未截断的正文写入磁盘并改为发出 `body_ref` 路径。`CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` 配置内容限制,默认 60 KB。默认禁用;正文包括整个对话历史。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage#api-request-body-event) |

484| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 以在 `tool.output` OpenTelemetry 跨度事件中包含工具内容。跨度属性在 [自己的门](/docs/zh-CN/monitoring-usage#new-context-gates) 下携带工具内容。需要 [跟踪](/docs/zh-CN/monitoring-usage#traces-beta)。默认禁用以保护敏感数据。请参阅 [监控](/docs/zh-CN/monitoring-usage#tool-output-span-event) |484| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 以在 `tool.output` OpenTelemetry 跨度事件中包含工具内容。跨度属性在 [自己的门](/docs/zh-CN/monitoring-usage#new-context-gates) 下携带工具内容。需要 [跟踪](/docs/zh-CN/monitoring-usage#traces-beta)。默认禁用以保护敏感数据。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage#tool-output-span-event) |

485| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含工具输入参数、MCP 服务器名称、用户创作的工作流名称、工具失败上的原始错误字符串、`api_refusal` 事件上的拒绝 `category` 和其他工具详情。默认禁用以保护 PII。请参阅 [监控](/docs/zh-CN/monitoring-usage) |485| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含工具输入参数、MCP 服务器名称、用户创作的工作流名称、工具失败上的原始错误字符串、`api_refusal` 事件上的拒绝 `category` 和其他工具详情。默认禁用以保护 PII。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

486| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |486| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。在您的 shell、用户设置或托管设置中设置它。在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

487| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 以从指标属性中排除帐户 UUID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |487| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 以从指标属性中排除帐户 UUID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

488| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 以在指标属性中包含会话入口点(默认值:排除)。在 v2.1.152 中添加。请参阅 [监控](/docs/zh-CN/monitoring-usage) |488| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 以在指标属性中包含会话入口点(默认值:排除)。在 v2.1.152 中添加。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

489| `OTEL_METRICS_INCLUDE_REPOSITORY` | 设置为 `true` 以使用标识会话存储库的 `vcs.*` 属性标记 OpenTelemetry 指标和事件(默认值:排除)。需要 Claude Code v2.1.269 或更高版本。请参阅 [存储库属性](/docs/zh-CN/monitoring-usage#repository-attributes) |489| `OTEL_METRICS_INCLUDE_REPOSITORY` | 设置为 `true` 以使用标识会话存储库的 `vcs.*` 属性标记 OpenTelemetry 指标和事件(默认值:排除)。需要 Claude Code v2.1.269 或更高版本。请参阅 [存储库属性](/docs/zh-CN/monitoring-usage#repository-attributes) |


514 514 

515标准 OpenTelemetry 导出器变量(`OTEL_METRICS_EXPORTER`、`OTEL_LOGS_EXPORTER`、`OTEL_EXPORTER_OTLP_ENDPOINT`、`OTEL_EXPORTER_OTLP_PROTOCOL`、`OTEL_EXPORTER_OTLP_HEADERS`、`OTEL_METRIC_EXPORT_INTERVAL`、`OTEL_RESOURCE_ATTRIBUTES` 和信号特定变体)也被支持。请参阅 [监控](/docs/zh-CN/monitoring-usage) 了解配置详情。515标准 OpenTelemetry 导出器变量(`OTEL_METRICS_EXPORTER`、`OTEL_LOGS_EXPORTER`、`OTEL_EXPORTER_OTLP_ENDPOINT`、`OTEL_EXPORTER_OTLP_PROTOCOL`、`OTEL_EXPORTER_OTLP_HEADERS`、`OTEL_METRIC_EXPORT_INTERVAL`、`OTEL_RESOURCE_ATTRIBUTES` 和信号特定变体)也被支持。请参阅 [监控](/docs/zh-CN/monitoring-usage) 了解配置详情。

516 516 

517设置 `CLAUDE_CODE_ENABLE_TELEMETRY` 和打开导出、选择其目标或在您的 shell、用户设置或托管设置中捕获内容的 OpenTelemetry 变量。Claude Code [在项目和本地设置中忽略它们](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env),除了关闭值该部分描述。`OTEL_RESOURCE_ATTRIBUTES` 和导出间隔、超时和压缩变量(如 `OTEL_METRIC_EXPORT_INTERVAL`)仍然从项目和本地设置应用。

518 

517<h2 id="features-that-need-feature-flag-fetching">519<h2 id="features-that-need-feature-flag-fetching">

518 需要特性标志获取的功能520 需要特性标志获取的功能

519</h2>521</h2>


533* [消息会话超出此机器](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines);此机器上会话之间的消息传递在关闭获取的情况下也能工作535* [消息会话超出此机器](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines);此机器上会话之间的消息传递在关闭获取的情况下也能工作

534* 运行 [`claude import` 或 `/import` 命令](/docs/zh-CN/cli-reference#cli-commands)536* 运行 [`claude import` 或 `/import` 命令](/docs/zh-CN/cli-reference#cli-commands)

535* 运行 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills) 或在 `/plugin` **Stats** 标签中打开其报告537* 运行 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills) 或在 `/plugin` **Stats** 标签中打开其报告

536* 同步为你的 claude.ai 账户启用的[技能](/docs/zh-CN/skills#where-synced-skills-load)和[插件](/docs/zh-CN/plugins-reference#synced-plugins)到你的终端会话中538* 同步为你的 claude.ai 账户启用的[技能](/docs/zh-CN/skills#where-synced-skills-load)和[插件](/docs/zh-CN/plugins/loading#synced-plugins)到你的终端会话中

537* 使用[顾问工具](/docs/zh-CN/advisor#requirements)539* 使用[顾问工具](/docs/zh-CN/advisor#requirements)

538* 读取或回复[工件上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)540* 读取或回复[工件上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)

539* 让 Claude Code 探测 claude.ai 连接器服务器以获取 [MCP 协议修订版本 2026-07-28](/docs/zh-CN/mcp#mcp-client-runtimes),除非你设置 `MCP_PROTOCOL_NEGOTIATION=auto`541* 让 Claude Code 探测 claude.ai 连接器服务器以获取 [MCP 协议修订版本 2026-07-28](/docs/zh-CN/mcp#mcp-client-runtimes),除非你设置 `MCP_PROTOCOL_NEGOTIATION=auto`

Details

32* [CLI](/docs/zh-CN/quickstart) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview)32* [CLI](/docs/zh-CN/quickstart) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview)

33* [VS Code](/docs/zh-CN/vs-code) 和 [JetBrains](/docs/zh-CN/jetbrains) 扩展33* [VS Code](/docs/zh-CN/vs-code) 和 [JetBrains](/docs/zh-CN/jetbrains) 扩展

34* [Subagents](/docs/zh-CN/sub-agents)、[hooks](/docs/zh-CN/hooks-guide)、[commands](/docs/zh-CN/commands) 和 [skills](/docs/zh-CN/skills)34* [Subagents](/docs/zh-CN/sub-agents)、[hooks](/docs/zh-CN/hooks-guide)、[commands](/docs/zh-CN/commands) 和 [skills](/docs/zh-CN/skills)

35* [CLAUDE.md memory](/docs/zh-CN/memory)、[plugins](/docs/zh-CN/plugins) 和 [MCP servers](/docs/zh-CN/mcp)35* [CLAUDE.md memory](/docs/zh-CN/memory)、[plugins](/docs/zh-CN/plugins/overview) 和 [MCP servers](/docs/zh-CN/mcp)

36* [Checkpoints](/docs/zh-CN/checkpointing)、[sandboxing](/docs/zh-CN/sandboxing) 和 [Workflows](/docs/zh-CN/workflows)36* [Checkpoints](/docs/zh-CN/checkpointing)、[sandboxing](/docs/zh-CN/sandboxing) 和 [Workflows](/docs/zh-CN/workflows)

37* [OpenTelemetry metrics](/docs/zh-CN/monitoring-usage) 和[托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms)37* [OpenTelemetry metrics](/docs/zh-CN/monitoring-usage) 和[托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms)

38 38 

Details

29* **[动态工作流](/docs/zh-CN/workflows)** 从 Claude 编写的脚本运行许多 subagents,返回一个结果29* **[动态工作流](/docs/zh-CN/workflows)** 从 Claude 编写的脚本运行许多 subagents,返回一个结果

30* **[跨会话消息传递](/docs/zh-CN/cross-session-messaging)** 让 Claude 将消息从您的一个会话传递到另一个会话30* **[跨会话消息传递](/docs/zh-CN/cross-session-messaging)** 让 Claude 将消息从您的一个会话传递到另一个会话

31* **[Hooks](/docs/zh-CN/hooks-guide)** 在 Claude Code 到达生命周期事件时运行您的脚本、HTTP 请求、MCP 工具调用、提示或 subagent31* **[Hooks](/docs/zh-CN/hooks-guide)** 在 Claude Code 到达生命周期事件时运行您的脚本、HTTP 请求、MCP 工具调用、提示或 subagent

32* **[Plugins](/docs/zh-CN/plugins)** 和 **[marketplaces](/docs/zh-CN/plugin-marketplaces)** 打包和分发这些功能32* **[Plugins](/docs/zh-CN/plugins/overview)** 和 **[marketplaces](/docs/zh-CN/plugins/overview)** 打包和分发这些功能

33 33 

34[Skills](/docs/zh-CN/skills) 是最灵活的扩展。Skill 是一个包含知识、工作流或说明的 markdown 文件。您可以使用 `/deploy` 之类的命令调用 skills,或者 Claude 可以在相关时自动加载它们。Skills 可以在您当前的对话中运行,也可以通过 subagents 在隔离的上下文中运行。34[Skills](/docs/zh-CN/skills) 是最灵活的扩展。Skill 是一个包含知识、工作流或说明的 markdown 文件。您可以使用 `/deploy` 之类的命令调用 skills,或者 Claude 可以在相关时自动加载它们。Skills 可以在您当前的对话中运行,也可以通过 subagents 在隔离的上下文中运行。

35 35 


52| **Hook** | 由事件触发的脚本、HTTP 请求、MCP 工具调用、提示或 subagent | 必须在每个匹配事件上运行的自动化 | 每次文件编辑后运行 ESLint |52| **Hook** | 由事件触发的脚本、HTTP 请求、MCP 工具调用、提示或 subagent | 必须在每个匹配事件上运行的自动化 | 每次文件编辑后运行 ESLint |

53| **[Artifact](/docs/zh-CN/artifacts)** | 将会话输出发布为私有、交互式网页 | 您想以视觉方式查看或共享的输出,而不是作为终端文本 | 一个在 Claude 调查时更新的事件时间线 |53| **[Artifact](/docs/zh-CN/artifacts)** | 将会话输出发布为私有、交互式网页 | 您想以视觉方式查看或共享的输出,而不是作为终端文本 | 一个在 Claude 调查时更新的事件时间线 |

54 54 

55**[Plugins](/docs/zh-CN/plugins)** 是打包层。Plugin 将 skills、hooks、subagents 和 MCP servers 捆绑到单个可安装单元中。Plugin skills 是命名空间的(如 `/my-plugin:review`),因此多个 plugins 可以共存。当您想在多个存储库中重用相同的设置或通过 **[marketplace](/docs/zh-CN/plugin-marketplaces)** 分发给他人时,使用 plugins。55**[Plugins](/docs/zh-CN/plugins/overview)** 是打包层。Plugin 将 skills、hooks、subagents 和 MCP servers 捆绑到单个可安装单元中。Plugin skills 是命名空间的(如 `/my-plugin:review`),因此多个 plugins 可以共存。当您想在多个存储库中重用相同的设置或通过 **[marketplace](/docs/zh-CN/plugins/overview)** 分发给他人时,使用 plugins。

56 56 

57<h3 id="build-your-setup-over-time">57<h3 id="build-your-setup-over-time">

58 随时间推移构建您的设置58 随时间推移构建您的设置


61您不需要提前配置所有内容。每个功能都有一个可识别的触发器,大多数团队大致按以下顺序添加它们:61您不需要提前配置所有内容。每个功能都有一个可识别的触发器,大多数团队大致按以下顺序添加它们:

62 62 

63| 触发器 | 添加 |63| 触发器 | 添加 |

64| :----------------------------- | :---------------------------------------------------------------------------- |64| :----------------------------- | :------------------------------------------------------------------- |

65| Claude 两次出错约定或命令 | 将其添加到 [CLAUDE.md](/docs/zh-CN/memory) |65| Claude 两次出错约定或命令 | 将其添加到 [CLAUDE.md](/docs/zh-CN/memory) |

66| 您一直在要求 Claude 更简洁、解释更多或以相同格式回答 | 设置 [output style](/docs/zh-CN/output-styles) |66| 您一直在要求 Claude 更简洁、解释更多或以相同格式回答 | 设置 [output style](/docs/zh-CN/output-styles) |

67| 您一直在输入相同的提示来启动任务 | 将其保存为用户可调用的 [skill](/docs/zh-CN/skills) |67| 您一直在输入相同的提示来启动任务 | 将其保存为用户可调用的 [skill](/docs/zh-CN/skills) |

68| 您第三次将相同的剧本或多步骤过程粘贴到聊天中 | 将其捕获为 [skill](/docs/zh-CN/skills) |68| 您第三次将相同的剧本或多步骤过程粘贴到聊天中 | 将其捕获为 [skill](/docs/zh-CN/skills) |

69| 您一直在从 Claude 看不到的浏览器标签页复制数据 | 将该系统连接为 [MCP server](/docs/zh-CN/mcp) |69| 您一直在从 Claude 看不到的浏览器标签页复制数据 | 将该系统连接为 [MCP server](/docs/zh-CN/mcp) |

70| Claude 读取许多文件以查找符号的定义或使用位置 | 为您的语言安装 [code intelligence plugin](/docs/zh-CN/discover-plugins#code-intelligence) |70| Claude 读取许多文件以查找符号的定义或使用位置 | 为您的语言安装 [code intelligence plugin](/docs/zh-CN/plugins/code-intelligence) |

71| 一个辅助任务用您不会再次引用的输出淹没您的对话 | 通过 [subagent](/docs/zh-CN/sub-agents) 路由它 |71| 一个辅助任务用您不会再次引用的输出淹没您的对话 | 通过 [subagent](/docs/zh-CN/sub-agents) 路由它 |

72| 您希望每次都发生某事而无需询问 | 编写 [hook](/docs/zh-CN/hooks-guide) |72| 您希望每次都发生某事而无需询问 | 编写 [hook](/docs/zh-CN/hooks-guide) |

73| 第二个存储库需要相同的设置 | 将其打包为 [plugin](/docs/zh-CN/plugins) |73| 第二个存储库需要相同的设置 | 将其打包为 [plugin](/docs/zh-CN/plugins/overview) |

74 74 

75相同的触发器告诉您何时更新您已有的内容。重复的错误或反复出现的审查评论是 CLAUDE.md 编辑,而不是聊天中的一次性更正。您一直手动调整的工作流是需要另一次修订的 skill。75相同的触发器告诉您何时更新您已有的内容。重复的错误或反复出现的审查评论是 CLAUDE.md 编辑,而不是聊天中的一次性更正。您一直手动调整的工作流是需要另一次修订的 skill。

76 76 


207功能可以在多个级别定义:用户范围、每个项目、通过 plugins 或通过托管策略。您还可以在子目录中嵌套 CLAUDE.md 文件或在 monorepo 的特定包中放置 skills。当相同的功能存在于多个级别时,以下是它们的分层方式:207功能可以在多个级别定义:用户范围、每个项目、通过 plugins 或通过托管策略。您还可以在子目录中嵌套 CLAUDE.md 文件或在 monorepo 的特定包中放置 skills。当相同的功能存在于多个级别时,以下是它们的分层方式:

208 208 

209* **CLAUDE.md 文件** 是累加的:所有级别同时向 Claude 的上下文贡献内容。来自您的工作目录及以上的文件在启动时加载;子目录在您在其中工作时加载。当说明冲突时,Claude 使用判断来协调它们。有关详细信息,请参阅 [CLAUDE.md 文件如何加载](/docs/zh-CN/memory#how-claude-md-files-load)。209* **CLAUDE.md 文件** 是累加的:所有级别同时向 Claude 的上下文贡献内容。来自您的工作目录及以上的文件在启动时加载;子目录在您在其中工作时加载。当说明冲突时,Claude 使用判断来协调它们。有关详细信息,请参阅 [CLAUDE.md 文件如何加载](/docs/zh-CN/memory#how-claude-md-files-load)。

210* **Skills 和 subagents** 按名称覆盖:当相同的名称存在于多个级别时,一个定义根据优先级获胜(对于 skills 为托管 > 用户 > 项目;对于 subagents 为托管 > CLI 标志 > 项目 > 用户 > plugin)。Plugin skills 是 [命名空间的](/docs/zh-CN/plugins#add-skills-to-your-plugin) 以避免冲突。有关详细信息,请参阅 [skill 发现](/docs/zh-CN/skills#resolve-skills-that-share-a-name) 和 [subagent 范围](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。210* **Skills 和 subagents** 按名称覆盖:当相同的名称存在于多个级别时,一个定义根据优先级获胜(对于 skills 为托管 > 用户 > 项目;对于 subagents 为托管 > CLI 标志 > 项目 > 用户 > plugin)。Plugin skills 是 [命名空间的](/docs/zh-CN/plugins/components#skills) 以避免冲突。有关详细信息,请参阅 [skill 发现](/docs/zh-CN/skills#resolve-skills-that-share-a-name) 和 [subagent 范围](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。

211* **MCP 服务器** 按名称覆盖:本地 > 项目 > 用户。有关详细信息,请参阅 [MCP 范围](/docs/zh-CN/mcp#scope-hierarchy-and-precedence)。211* **MCP 服务器** 按名称覆盖:本地 > 项目 > 用户。有关详细信息,请参阅 [MCP 范围](/docs/zh-CN/mcp#scope-hierarchy-and-precedence)。

212* **Hooks** 合并:所有注册的 hooks 为其匹配的事件触发,无论来源如何。有关详细信息,请参阅 [hooks](/docs/zh-CN/hooks)。212* **Hooks** 合并:所有注册的 hooks 为其匹配的事件触发,无论来源如何。有关详细信息,请参阅 [hooks](/docs/zh-CN/hooks)。

213 213 


304 304 

305 **上下文成本:** 低。符号查找通常替代广泛的文件读取,因此净上下文使用可能会下降。305 **上下文成本:** 低。符号查找通常替代广泛的文件读取,因此净上下文使用可能会下降。

306 306 

307 <Tip>LSP 工具在您为您的语言安装 [code intelligence 插件](/docs/zh-CN/discover-plugins#code-intelligence) 之前处于非活动状态。</Tip>307 <Tip>LSP 工具在您为您的语言安装 [code intelligence 插件](/docs/zh-CN/plugins/code-intelligence) 之前处于非活动状态。</Tip>

308 </Tab>308 </Tab>

309 309 

310 <Tab title="Subagents">310 <Tab title="Subagents">


370 使用 hooks 自动化操作370 使用 hooks 自动化操作

371 </Card>371 </Card>

372 372 

373 <Card title="Plugins" icon="puzzle-piece" href="/docs/zh-CN/plugins">373 <Card title="Plugins" icon="puzzle-piece" href="/docs/zh-CN/plugins/overview">

374 捆绑和共享功能集374 捆绑和共享功能集

375 </Card>375 </Card>

376 376 

377 <Card title="Marketplaces" icon="store" href="/docs/zh-CN/plugin-marketplaces">377 <Card title="Marketplaces" icon="store" href="/docs/zh-CN/plugins/create-marketplace">

378 托管和分发 plugin 集合378 托管和分发 plugin 集合

379 </Card>379 </Card>

380</CardGroup>380</CardGroup>

fullscreen.md +2 −1

Details

100 100 

101* **在提示输入中单击**以在您正在输入的文本中的任何位置放置光标。101* **在提示输入中单击**以在您正在输入的文本中的任何位置放置光标。

102* **在 `/` 命令或 `@` 文件列表中单击建议**以接受它。悬停会突出显示光标下的行。102* **在 `/` 命令或 `@` 文件列表中单击建议**以接受它。悬停会突出显示光标下的行。

103* **在选择菜单中单击选项**以选择它。这包括权限提示、`/model`、`/config` 和其他显示选项列表的对话框。悬停会在光标下的行上显示指针。需要 Claude Code v2.1.187 或更高版本。103* **在选择菜单中单击选项**以选择它。这包括权限提示、`/model`、`/config` 和其他显示选项列表的对话框。悬停会在光标下的行上显示指针。

104* **在多选菜单中单击选项**以切换它,然后单击提交按钮以确认您的选择。单击自由文本行(例如多选题中的 `Other` 行)会聚焦其输入字段,以便您可以输入答案。需要 Claude Code v2.1.208 或更高版本。104* **在多选菜单中单击选项**以切换它,然后单击提交按钮以确认您的选择。单击自由文本行(例如多选题中的 `Other` 行)会聚焦其输入字段,以便您可以输入答案。需要 Claude Code v2.1.208 或更高版本。

105* **单击 `/config` 面板中的设置值**以更改它,并使用鼠标滚轮滚动设置列表。需要 Claude Code v2.1.271 或更高版本。105* **单击 `/config` 面板中的设置值**以更改它,并使用鼠标滚轮滚动设置列表。需要 Claude Code v2.1.271 或更高版本。

106* **用鼠标滚轮滚动选择或多选菜单**当它显示的选项多于一次显示的选项时,例如短终端窗口中的 `/model` 列表。当指针悬停在其选项上时,滚轮会滚动列表。需要 Claude Code v2.1.280 或更高版本。

106* **单击折叠的工具结果**以展开它并查看完整输出。再次单击以折叠。工具调用及其结果一起展开。只有有更多内容要显示的消息才可点击。107* **单击折叠的工具结果**以展开它并查看完整输出。再次单击以折叠。工具调用及其结果一起展开。只有有更多内容要显示的消息才可点击。

107 * 单击也会展开 `!` shell 命令的输出,无论是较旧的截断结果还是命令运行时的实时进度行。需要 Claude Code v2.1.257 或更高版本。108 * 单击也会展开 `!` shell 命令的输出,无论是较旧的截断结果还是命令运行时的实时进度行。需要 Claude Code v2.1.257 或更高版本。

108* **在 macOS 上按住 `Cmd`,或在 Linux 和 Windows 上按住 `Ctrl`,然后单击 URL 或文件路径**以打开它。纯 `http://` 和 `https://` URL 在您的浏览器中打开,工具输出中的文件路径(如 Edit 或 Write 后打印的路径)在您的默认应用程序中打开。不带修饰符的纯单击不会打开链接,与本机终端行为相匹配。109* **在 macOS 上按住 `Cmd`,或在 Linux 和 Windows 上按住 `Ctrl`,然后单击 URL 或文件路径**以打开它。纯 `http://` 和 `https://` URL 在您的浏览器中打开,工具输出中的文件路径(如 Edit 或 Write 后打印的路径)在您的默认应用程序中打开。不带修饰符的纯单击不会打开链接,与本机终端行为相匹配。

Details

50* 再次运行 `/install-github-app`。当仓库已经有 `claude.yml` 时,选择**使用最新版本更新工作流文件**。Claude Code 将新的工作流文件副本推送到新分支并打开拉取请求,与首次安装相同。50* 再次运行 `/install-github-app`。当仓库已经有 `claude.yml` 时,选择**使用最新版本更新工作流文件**。Claude Code 将新的工作流文件副本推送到新分支并打开拉取请求,与首次安装相同。

51* 自己将 `--comment` 参数和 `claude_args` 行从[审查工作流示例](#run-a-skill)添加到已检入的文件,这会保留您对其所做的任何其他编辑。51* 自己将 `--comment` 参数和 `claude_args` 行从[审查工作流示例](#run-a-skill)添加到已检入的文件,这会保留您对其所做的任何其他编辑。

52 52 

53安装 GitHub App 后,Claude Code 会询问是否继续进行 GitHub Actions 设置。选择**暂时跳过**以仅安装 GitHub App。稍后再次运行 `/install-github-app` 以完成工作流和密钥步骤。在 v2.1.187 之前,Claude Code 直接进行工作流选择。53安装 GitHub App 后,Claude Code 会询问是否继续进行 GitHub Actions 设置。选择**暂时跳过**以仅安装 GitHub App。稍后再次运行 `/install-github-app` 以完成工作流和密钥步骤。

54 54 

55<Note>55<Note>

56 * 安装 GitHub App 时,您授予它多个权限。有关完整集合,请参阅 [GitHub App 权限](#github-app-permissions)56 * 安装 GitHub App 时,您授予它多个权限。有关完整集合,请参阅 [GitHub App 权限](#github-app-permissions)


237`prompt` 输入接受 [skill](/docs/zh-CN/skills) 调用以及纯文本:237`prompt` 输入接受 [skill](/docs/zh-CN/skills) 调用以及纯文本:

238 238 

239* 对于仓库的 `.claude/skills/` 目录中的 skill,在 `anthropics/claude-code-action` 步骤之前运行 `actions/checkout`,以便 skill 文件在运行器上可用,然后将 `/skill-name` 作为 `prompt` 传递。239* 对于仓库的 `.claude/skills/` 目录中的 skill,在 `anthropics/claude-code-action` 步骤之前运行 `actions/checkout`,以便 skill 文件在运行器上可用,然后将 `/skill-name` 作为 `prompt` 传递。

240* 对于打包在[插件](/docs/zh-CN/plugins)中的 skill,使用 `plugin_marketplaces` 和 `plugins` 输入安装插件,然后将命名空间的 `/plugin-name:skill-name` 作为 `prompt` 传递。`plugins` 输入采用 `plugin-name@marketplace-name`,其中市场名称来自市场自己的清单而不是其仓库 URL。240* 对于打包在[插件](/docs/zh-CN/plugins/overview)中的 skill,使用 `plugin_marketplaces` 和 `plugins` 输入安装插件,然后将命名空间的 `/plugin-name:skill-name` 作为 `prompt` 传递。`plugins` 输入采用 `plugin-name@marketplace-name`,其中市场名称来自市场自己的清单而不是其仓库 URL。

241 241 

242以下工作流安装 `code-review` 插件并在拉取请求打开、更新、重新打开或标记为准备审查时运行其 skill。它运行与快速设置中的审查工作流相同的插件。当您想自己控制提示、模型和触发器时,请使用这样的工作流。对于无需维护工作流文件的自动审查,请参阅 [Code Review](/docs/zh-CN/code-review)。在公共仓库上,GitHub 从 fork 拉取请求触发的运行中扣留密钥,因此审查仅在来自同一仓库中分支的拉取请求上运行。242以下工作流安装 `code-review` 插件并在拉取请求打开、更新、重新打开或标记为准备审查时运行其 skill。它运行与快速设置中的审查工作流相同的插件。当您想自己控制提示、模型和触发器时,请使用这样的工作流。对于无需维护工作流文件的自动审查,请参阅 [Code Review](/docs/zh-CN/code-review)。在公共仓库上,GitHub 从 fork 拉取请求触发的运行中扣留密钥,因此审查仅在来自同一仓库中分支的拉取请求上运行。

243 243 

Details

68清单使用以下权限和 webhook 事件配置 GitHub App,这些权限和事件共同涵盖网络会话、代码审查、Claude Security、插件市场和贡献指标:68清单使用以下权限和 webhook 事件配置 GitHub App,这些权限和事件共同涵盖网络会话、代码审查、Claude Security、插件市场和贡献指标:

69 69 

70| 权限 | 访问 | 用途 |70| 权限 | 访问 | 用途 |

71| :------------------- | :- | :-------------------------------------------------------------------------------------------- |71| :------------------- | :- | :------------------------------------------------------------------------------------------------------------------- |

72| Contents | 读写 | 克隆存储库和推送分支 |72| Contents | 读写 | 克隆存储库和推送分支 |

73| Pull requests | 读写 | 创建 PR 和发布审查评论 |73| Pull requests | 读写 | 创建 PR 和发布审查评论 |

74| Issues | 读写 | 响应问题提及 |74| Issues | 读写 | 响应问题提及 |

75| Checks | 读写 | 发布代码审查检查运行 |75| Checks | 读写 | 发布代码审查检查运行 |

76| Actions | 读 | 读取 CI 状态以进行自动修复 |76| Actions | 读 | 读取 CI 状态以进行自动修复 |

77| Commit statuses | 读 | 从报告提交状态而不是检查运行的提供商读取 CI 状态 |77| Commit statuses | 读 | 从报告提交状态而不是检查运行的提供商读取 CI 状态 |

78| Repository hooks | 读写 | 当 [组织设置 > 插件](https://claude.ai/admin-settings/plugins) 中的市场启用 **自动同步** 时,在插件市场存储库上创建 webhook |78| Repository hooks | 读写 | 当 [**组织设置 > 插件和技能**](https://claude.ai/admin-settings/skills?tab=marketplaces) 中的市场启用 **自动同步** 时,在插件市场存储库上创建 webhook |

79| Metadata | 读 | GitHub 对所有应用的要求 |79| Metadata | 读 | GitHub 对所有应用的要求 |

80| Organization members | 读 | 匹配 github.com 上的 Claude GitHub App,用于在链接安装时检查连接用户的组织角色 |80| Organization members | 读 | 匹配 github.com 上的 Claude GitHub App,用于在链接安装时检查连接用户的组织角色 |

81 81 


160 160 

161Claude Code 以非交互方式运行 git,并拒绝连接到不在机器 `known_hosts` 文件中的主机的 SSH 连接。带有 git 凭证助手的 HTTPS URL 避免了 `known_hosts` 要求。161Claude Code 以非交互方式运行 git,并拒绝连接到不在机器 `known_hosts` 文件中的主机的 SSH 连接。带有 git 凭证助手的 HTTPS URL 避免了 `known_hosts` 要求。

162 162 

163有关构建市场的完整指南,请参阅 [创建和分发插件市场](/docs/zh-CN/plugin-marketplaces)。163有关构建市场的完整指南,请参阅 [创建和分发插件市场](/docs/zh-CN/plugins/create-marketplace)。

164 164 

165<h3 id="pre-register-ghes-marketplaces-with-managed-settings">165<h3 id="pre-register-ghes-marketplaces-with-managed-settings">

166 使用托管设置预注册 GHES 市场166 使用托管设置预注册 GHES 市场


262 262 

263* [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web):在云基础设施上运行 Claude Code 会话263* [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web):在云基础设施上运行 Claude Code 会话

264* [代码审查](/docs/zh-CN/code-review):自动化 PR 审查264* [代码审查](/docs/zh-CN/code-review):自动化 PR 审查

265* [插件市场](/docs/zh-CN/plugin-marketplaces):构建和分发插件目录265* [插件市场](/docs/zh-CN/plugins/host-marketplace):构建和分发插件目录

266* [分析](/docs/zh-CN/analytics):跟踪使用情况和贡献指标266* [分析](/docs/zh-CN/analytics):跟踪使用情况和贡献指标

267* [托管设置](/docs/zh-CN/settings):组织范围的策略配置267* [托管设置](/docs/zh-CN/settings):组织范围的策略配置

268* [网络配置](/docs/zh-CN/network-config):防火墙和 IP 白名单要求268* [网络配置](/docs/zh-CN/network-config):防火墙和 IP 白名单要求

glossary.md +3 −3

Details

84 Bare mode84 Bare mode

85</h3>85</h3>

86 86 

87使用 `--bare`,Claude Code 启动时不加载 hooks、skills、custom commands、subagents、plugins、MCP servers、auto memory 或 CLAUDE.md,除了您通过 `--add-dir` 传递的目录中的 skills。建议用于 CI 和脚本调用,其中您需要在每台机器上获得相同的结果。87使用 `--bare`,Claude Code 启动时不加载 hooks、skills、custom commands、subagents、installed plugins、MCP servers、auto memory 或 CLAUDE.md,除了您通过 `--add-dir` 传递的目录中的 skills。建议用于 CI 和脚本调用,其中您需要在每台机器上获得相同的结果。

88 88 

89了解更多:[使用 bare mode 更快启动](/docs/zh-CN/headless#start-faster-with-bare-mode)89了解更多:[使用 bare mode 更快启动](/docs/zh-CN/headless#start-faster-with-bare-mode)

90 90 


332 Plugin332 Plugin

333</h3>333</h3>

334 334 

335一个 skills、hooks、subagents 和 MCP servers 的包,打包为单个可安装单元。Plugin skills 命名为 `plugin-name:skill-name`,以便多个 plugins 共存。通过[市场](/docs/zh-CN/plugin-marketplaces)跨团队分发 plugins。335一个 skills、hooks、subagents 和 MCP servers 的包,打包为单个可安装单元。Plugin skills 命名为 `plugin-name:skill-name`,以便多个 plugins 共存。通过[市场](/docs/zh-CN/plugins/overview)跨团队分发 plugins。

336 336 

337了解更多:[Plugins](/docs/zh-CN/plugins)337了解更多:[Plugins](/docs/zh-CN/plugins/overview)

338 338 

339<h3 id="project-trust">339<h3 id="project-trust">

340 Project trust340 Project trust

headless.md +1 −1

Details

38 使用裸模式更快启动38 使用裸模式更快启动

39</h3>39</h3>

40 40 

41添加 `--bare` 以通过跳过 hooks、skills、自定义命令、[subagents](/docs/zh-CN/sub-agents)、plugins、MCP 服务器、自动内存和 CLAUDE.md 的自动发现来减少启动时间。没有它,`claude -p` 会加载交互式会话相同的 [上下文](/docs/zh-CN/how-claude-code-works#the-context-window),包括在工作目录或 `~/.claude` 中配置的任何内容。41添加 `--bare` 以通过跳过 hooks、skills、自定义命令、[subagents](/docs/zh-CN/sub-agents)、installed plugins、MCP 服务器、auto memory 和 CLAUDE.md 的自动发现来减少启动时间。没有它,`claude -p` 会加载交互式会话相同的 [上下文](/docs/zh-CN/how-claude-code-works#the-context-window),包括在工作目录或 `~/.claude` 中配置的任何内容。

42 42 

43裸模式对于 CI 和脚本很有用,您需要在每台机器上获得相同的结果。队友的 `~/.claude` 中的 hook 或项目的 `.mcp.json` 中的 MCP 服务器不会运行,因为裸模式从不读取它们。您使用 `--add-dir` 命名的目录是部分例外:裸模式从其 `.claude/skills/` 文件夹加载 skills,但仍然跳过其 `.claude/commands/` 和 `.claude/agents/` 文件夹。[来自其他目录的 Skills](/docs/zh-CN/skills#skills-from-additional-directories) 涵盖了加载和不加载的内容。43裸模式对于 CI 和脚本很有用,您需要在每台机器上获得相同的结果。队友的 `~/.claude` 中的 hook 或项目的 `.mcp.json` 中的 MCP 服务器不会运行,因为裸模式从不读取它们。您使用 `--add-dir` 命名的目录是部分例外:裸模式从其 `.claude/skills/` 文件夹加载 skills,但仍然跳过其 `.claude/commands/` 和 `.claude/agents/` 文件夹。[来自其他目录的 Skills](/docs/zh-CN/skills#skills-from-additional-directories) 涵盖了加载和不加载的内容。

44 44 

hooks.md +129 −131

Details

242 242 

243Hooks 在 JSON 设置文件中定义。配置有三个嵌套级别:243Hooks 在 JSON 设置文件中定义。配置有三个嵌套级别:

244 244 

2451. 选择要响应的[hook 事件](#hook-events),如 `PreToolUse` 或 `Stop`2451. 选择一个 [hook 事件](#hook-events) 来响应,如 `PreToolUse` 或 `Stop`

2462. 添加[匹配器组](#matcher-patterns)以过滤何时触发,如"仅针对 Bash 工具"2462. 添加一个 [匹配器组](#matcher-patterns) 来过滤何时触发,如"仅针对 Bash 工具"

2473. 定义一个或多个[hook 处理程序](#hook-handler-fields)以在匹配时运行2473. 定义一个或多个 [hook 处理程序](#hook-handler-fields) 在匹配时运行

248 248 

249有关完整的演练和带注释的示例,请参阅上面的[Hook 如何解析](#how-a-hook-resolves)。249有关完整的演练和带注释的示例,请参阅上面的 [Hook 如何解析](#how-a-hook-resolves)。

250 250 

251<Note>251<Note>

252 此页面为每个级别使用特定术语:**hook 事件**表示生命周期点,**匹配器组**表示过滤器,**hook 处理程序**表示运行的 shell 命令、HTTP 端点、MCP 工具、提示或代理。"Hook"本身指的是一般功能。252 本页对每个级别使用特定术语:**hook 事件**表示生命周期点,**匹配器组**表示过滤器,**hook 处理程序**表示运行的 shell 命令、HTTP 端点、MCP 工具、提示或代理。"Hook"本身指的是一般功能。

253</Note>253</Note>

254 254 

255<h3 id="hook-locations">255<h3 id="hook-locations">

256 Hook 位置256 Hook 位置

257</h3>257</h3>

258 258 

259您定义 hook 的位置决定了其范围:259定义 hook 的位置决定了其范围:

260 260 

261| 位置 | 范围 | 可共享 |261| 位置 | 范围 | 可共享 |

262| :------------------------------------------ | :--------------------------------------------------------------------- | :---------------------------------- |262| :--------------------------------------------------- | :------------------------------------------------------------------------- | :-------------------------------- |

263| `~/.claude/settings.json` | 您的所有项目 | 否,本地于您的计算机 |263| `~/.claude/settings.json` | 所有项目 | 否,仅限本地计算机 |

264| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |264| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |

265| `.claude/settings.local.json` | 单个项目 | 否,gitignored 当 Claude Code 保存设置到其中时 |265| `.claude/settings.local.json` | 单个项目 | 否,当 Claude Code 保存设置时被 gitignored |

266| 托管策略设置 | 组织范围 | 是,管理员控制 |266| 托管策略设置 | 组织范围 | 是,由管理员控制 |

267| [Plugin](/docs/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |267| [Plugin](/docs/zh-CN/plugins/overview) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |

268| [Skill](/docs/zh-CN/skills) frontmatter | 调用 skill 后的会话其余部分。请参阅[Skills 和代理中的 Hooks](#hooks-in-skills-and-agents) | 是,在 skill 文件中定义 |268| [Skill](/docs/zh-CN/skills) frontmatter | 调用技能后的会话其余部分。请参阅 [Hooks in skills and agents](#hooks-in-skills-and-agents) | 是,在技能文件中定义 |

269| [Subagent](/docs/zh-CN/sub-agents) frontmatter | 该 subagent 运行时 | 是,在 subagent 文件中定义 |269| [Subagent](/docs/zh-CN/sub-agents) frontmatter | 该子代理运行时 | 是,在子代理文件中定义 |

270 270 

271[Cloud sessions](/docs/zh-CN/claude-code-on-the-web)不读取您的本地 `~/.claude/settings.json`;那里的 hooks 来自仓库的 `.claude/settings.json` 在具有一个仓库的会话中,来自[从您的 claude.ai 账户同步的插件](/docs/zh-CN/plugins-reference#synced-plugins),以及来自您组织的服务器管理的设置。在[自托管环境](/docs/zh-CN/self-hosted-environments-configuration#permissions-and-tool-approval)中,Claude Code 也运行操作员从运行程序主机的 `~/.claude/` 中播种的 hooks,并且当该文件在[Claude Code 应用的托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)中时,它运行运行程序镜像的托管设置文件中的 hooks,默认情况下仅当服务器管理的设置和 MDM 交付的 Claude Code 策略都不提供托管层时。有关哪些文件到达云会话,请参阅[您的设置中携带的内容](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)。271[云会话](/docs/zh-CN/claude-code-on-the-web) 不读取本地 `~/.claude/settings.json`。在 [自托管环境](/docs/zh-CN/self-hosted-environments-configuration#permissions-and-tool-approval) 中,Claude Code 还运行操作员从运行程序主机的 `~/.claude/` 中植入的 hooks,并在该文件属于 [Claude Code 应用的托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources) 时运行运行程序镜像的托管设置文件中的 hooks,这默认意味着仅当服务器托管设置和 MDM 交付的 Claude Code 策略都不提供托管层时。有关哪些设置文件和插件(以及因此哪些 hooks)到达云会话的信息,请参阅 [从设置中携带的内容](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)。

272 272 

273有关设置文件解析的详细信息,请参阅[设置](/docs/zh-CN/settings)。273有关设置文件解析的详细信息,请参阅 [settings](/docs/zh-CN/settings)。

274 274 

275来自设置文件、托管策略设置和插件的 Hooks 也在[subagents](/docs/zh-CN/sub-agents)内运行。当 subagent 调用工具时,工具事件(如 `PreToolUse` 和 `PostToolUse`)触发与主对话中配置的相同 hooks,输入携带 `agent_id` 和 `agent_type`[通用输入字段](#common-input-fields),用于标识 subagent。275来自设置文件、托管策略设置和插件的 Hooks 也在 [subagents](/docs/zh-CN/sub-agents) 内运行。当子代理调用工具时,工具事件(如 `PreToolUse` 和 `PostToolUse`)触发与主对话中相同的配置 hooks,输入包含标识子代理的 `agent_id` 和 `agent_type` [通用输入字段](#common-input-fields)。

276 276 

277企业管理员可以使用 `allowManagedHooksOnly` 来限制哪些 hooks 运行:277企业管理员可以使用 `allowManagedHooksOnly` 来限制哪些 hooks 运行:

278 278 

279* 您的用户、项目、本地和插件 hooks 被阻止。托管设置 `enabledPlugins` 中强制启用的插件中的 Hooks 是豁免的279* 用户、项目、本地和插件 hooks 被阻止。托管设置 `enabledPlugins` 中强制启用的插件中的 Hooks 除外

280* Claude Code 也将您的[`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](/docs/zh-CN/settings-reference#filesuggestion)和[`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines)设置缩小到托管设置280* Claude Code 还将 [`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](/docs/zh-CN/settings-reference#filesuggestion) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines) 设置限制为托管设置

281* Claude Code 也禁用具有[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)的插件,包括托管设置 `enabledPlugins` 中强制启用的插件,除非[`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources)明确设置为 `false`。`command` 源需要 Claude Code v2.1.229 或更高版本281* Claude Code 还禁用具有 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括托管设置 `enabledPlugins` 中强制启用的插件,除非 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`。`command` 源需要 Claude Code v2.1.229 或更高版本

282* Claude Code 也阻止市场[`headersHelper` 命令](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads),除非[`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources)明确设置为 `false`,除了托管设置本身声明的市场282* Claude Code 还阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`,托管设置本身声明的市场除外

283 283 

284请参阅[在 `allowManagedHooksOnly` 下运行的内容](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)。284请参阅 [在 `allowManagedHooksOnly` 下运行的内容](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)。

285 285 

286Hook 条目在设置级别之间合并而不是相互替换:用户、项目和本地设置添加它们自己的 hooks 而不移除托管的,[`disableAllHooks`](#disable-or-remove-hooks)设置无法从托管设置外部禁用托管 hooks。286Hook 条目在设置级别之间合并而不是相互替换:用户、项目和本地设置添加自己的 hooks 而不删除托管的 hooks,[`disableAllHooks`](#disable-or-remove-hooks) 设置无法禁用来自托管设置外部的托管 hooks。

287 287 

288[HTTP hook 允许列表](/docs/zh-CN/settings-reference#hook-and-skill-settings)适用于来自每个源的 hooks,包括托管策略设置:288[HTTP hook 允许列表](/docs/zh-CN/settings-reference#hook-and-skill-settings) 适用于来自每个源的 hooks,包括托管策略设置:

289 289 

290* `allowedHttpHookUrls`:在任何设置级别定义时,Claude Code 仅在其 URL 与合并的允许列表匹配时运行 HTTP hook 处理程序290* `allowedHttpHookUrls`:在任何设置级别定义时,Claude Code 仅在其 URL 与合并的允许列表匹配时运行 HTTP hook 处理程序

291* `httpHookAllowedEnvVars`:定义时,Claude Code 仅将该列表上的环境变量插值到 hook 标头中291* `httpHookAllowedEnvVars`:定义时,Claude Code 仅将该列表上的环境变量插值到 hook 标头中


294 匹配器模式294 匹配器模式

295</h3>295</h3>

296 296 

297`matcher` 字段过滤 hooks 何时触发。匹配器的评估方式取决于它包含的字符:297`matcher` 字段过滤何时触发 hooks。匹配器的评估方式取决于它包含的字符:

298 298 

299| 匹配器值 | 评估为 | 示例 |299| 匹配器值 | 评估为 | 示例 |

300| :--------------------------- | :----------------------------------- | :----------------------------------------------------------------------------------- |300| :--------------------------- | :----------------------------------- | :-------------------------------------------------------------------------------- |

301| `"*"`、`""` 或省略 | 匹配所有 | 在事件的每次出现时触发 |301| `"*"`、`""` 或省略 | 匹配所有 | 在事件的每次出现时触发 |

302| 仅字母、数字、`_`、`-`、空格、`,` 和 `\|` | 精确字符串或由 `\|` 或 `,` 分隔的精确字符串列表,可选周围空格 | `Bash` 仅匹配 Bash 工具;`Edit\|Write` 和 `Edit, Write` 各自精确匹配任一工具;`code-reviewer` 仅匹配该代理类型 |302| 仅字母、数字、`_`、`-`、空格、`,` 和 `\|` | 精确字符串或由 `\|` 或 `,` 分隔的精确字符串列表,可选周围空格 | `Bash` 仅匹配 Bash 工具;`Edit\|Write` 和 `Edit, Write` 各匹配任一工具;`code-reviewer` 仅匹配该代理类型 |

303| 包含任何其他字符 | JavaScript 正则表达式,未锚定 | `^Notebook` 匹配任何以 Notebook 开头的工具;`mcp__memory__.*` 匹配来自 `memory` 服务器的每个工具 |303| 包含任何其他字符 | JavaScript 正则表达式,未锚定 | `^Notebook` 匹配任何名称以 `Notebook` 开头的工具;`mcp__memory__.*` 匹配来自 `memory` 服务器的每个工具 |

304 304 

305在正则表达式路径上的匹配器使用 JavaScript 的 `RegExp.prototype.test` 进行测试,该测试在值中任何位置的匹配时成功。`Edit.*` 匹配 `Edit` 和 `NotebookEdit`;当您需要整个字符串匹配时,用 `^` 和 `$` 包装模式,如 `^Edit$`。305在正则表达式路径上的匹配器使用 JavaScript 的 `RegExp.prototype.test` 进行测试,该测试在值中任何位置的匹配时成功。`Edit.*` 匹配 `Edit` 和 `NotebookEdit`;当需要整个字符串匹配时,用 `^` 和 `$` 包装模式,如 `^Edit$`。

306 306 

307逗号分隔符和周围空格容差需要 Claude Code v2.1.191 或更高版本。307精确匹配集中的连字符需要 Claude Code v2.1.195 或更高版本。在早期版本中,带连字符的名称如 `code-reviewer` 被评估为未锚定的正则表达式,因此它也对 `senior-code-reviewer` 触发;在这些版本上将其锚定为 `^code-reviewer$` 以仅匹配该名称。

308 308 

309精确匹配集中的连字符需要 Claude Code v2.1.195 或更高版本。在早期版本中,像 `code-reviewer` 这样的连字符名称被评估为未锚定的正则表达式,因此它也会对 `senior-code-reviewer` 触发;在这些版本上将其锚定为 `^code-reviewer$` 以仅匹配该名称。309`FileChanged` 和 `StopFailure` 使用更窄的精确匹配集,仅包含字母、数字、`_` 和 `|`。这两个事件的匹配器中的连字符、空格或逗号将其保留在正则表达式路径上,仅 `|` 分隔替代项。下表中支持匹配器的其他每个事件接受 `|` 或 `,`。

310 

311`FileChanged` 和 `StopFailure` 使用更窄的精确匹配集,仅包含字母、数字、`_` 和 `|`。这两个事件的匹配器中的连字符、空格或逗号将其保留在正则表达式路径上,仅 `|` 分隔替代项。下表中列出的支持匹配器的所有其他事件接受 `|` 或 `,`。

312 310 

313`FileChanged` 事件在构建其监视列表时不遵循这些规则。请参阅 [FileChanged](#filechanged)。311`FileChanged` 事件在构建其监视列表时不遵循这些规则。请参阅 [FileChanged](#filechanged)。

314 312 

315每个事件类型在不同的字段上匹配:313每个事件类型在不同的字段上匹配:

316 314 

317| 事件 | 匹配器过滤的内容 | 示例匹配器值 |315| 事件 | 匹配器过滤的内容 | 示例匹配器值 |

318| :---------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |316| :---------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

319| `PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest`、`PermissionDenied` | 工具名称 | `Bash`、`Edit\|Write`、`mcp__.*` |317| `PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest`、`PermissionDenied` | 工具名称 | `Bash`、`Edit\|Write`、`mcp__.*` |

320| `SessionStart` | 会话如何启动 | `startup`、`resume`、`clear`、`compact`、`fork` |318| `SessionStart` | 会话如何启动 | `startup`、`resume`、`clear`、`compact`、`fork` |

321| `Setup` | 哪个 CLI 标志触发了设置 | `init`、`maintenance` |319| `Setup` | 哪个 CLI 标志触发了设置 | `init`、`maintenance` |

322| `SessionEnd` | 会话为何结束 | `clear`、`resume`、`logout`、`prompt_input_exit`、`other` |320| `SessionEnd` | 会话为什么结束 | `clear`、`resume`、`logout`、`prompt_input_exit`、`other` |

323| `Notification` | 通知类型 | `permission_prompt`、`idle_prompt`、`auth_success`、`elicitation_dialog`、`elicitation_url_dialog`、`elicitation_complete`、`elicitation_response`、`agent_needs_input`、`agent_completed`、`quota_auto_resume_fired`、`quota_auto_resume_stale`、`quota_auto_resume_disabled` |321| `Notification` | 通知类型 | `permission_prompt`、`idle_prompt`、`auth_success`、`elicitation_dialog`、`elicitation_url_dialog`、`elicitation_complete`、`elicitation_response`、`agent_needs_input`、`agent_completed`、`quota_auto_resume_fired`、`quota_auto_resume_stale`、`quota_auto_resume_disabled` |

324| `SubagentStart` | 代理类型 | `general-purpose`、`Explore`、`Plan`、自定义代理名称或插件范围的名称如 `^my-plugin:reviewer$` |322| `SubagentStart` | 代理类型 | `general-purpose`、`Explore`、`Plan`、自定义代理名称或插件范围的名称如 `^my-plugin:reviewer$` |

325| `PreCompact`、`PostCompact` | 触发压缩的原因 | `manual`、`auto` |323| `PreCompact`、`PostCompact` | 什么触发了压缩 | `manual`、`auto` |

326| `PreModelSwitch`、`PostModelSwitch` | 会话切换到的模型的规范名称,如[PreModelSwitch](#premodelswitch)下所述 | `claude-opus-5`、`claude-opus-4-6\|claude-opus-5`、`.*opus.*` |324| `PreModelSwitch`、`PostModelSwitch` | 会话切换到的模型的规范名称,如 [PreModelSwitch](#premodelswitch) 下所述 | `claude-opus-5`、`claude-opus-4-6\|claude-opus-5`、`.*opus.*` |

327| `SubagentStop` | 代理类型 | 与 `SubagentStart` 相同的值 |325| `SubagentStop` | 代理类型 | 与 `SubagentStart` 相同的值 |

328| `ConfigChange` | 配置源 | `user_settings`、`project_settings`、`local_settings`、`policy_settings`、`skills` |326| `ConfigChange` | 配置源 | `user_settings`、`project_settings`、`local_settings`、`policy_settings`、`skills` |

329| `CwdChanged` | 不支持匹配器 | 总是在每次出现时触发 |327| `CwdChanged` | 无匹配器支持 | 总是在每次出现时触发 |

330| `DirectoryAdded` | 目录如何被添加 | `slash_command`、`register_repo_root` |328| `DirectoryAdded` | 目录如何添加 | `slash_command`、`register_repo_root` |

331| `FileChanged` | 文字文件名以监视(请参阅 [FileChanged](#filechanged)) | `.envrc\|.env` |329| `FileChanged` | 要监视的文字文件名(请参阅 [FileChanged](#filechanged)) | `.envrc\|.env` |

332| `StopFailure` | 错误类型 | `rate_limit`、`overloaded`、`authentication_failed`、`oauth_org_not_allowed`、`account_on_hold`、`billing_error`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens`、`cloud_credential_error`、`unknown` |330| `StopFailure` | 错误类型 | `rate_limit`、`overloaded`、`authentication_failed`、`oauth_org_not_allowed`、`account_on_hold`、`billing_error`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens`、`cloud_credential_error`、`unknown` |

333| `InstructionsLoaded` | 加载原因 | `session_start`、`nested_traversal`、`path_glob_match`、`include`、`compact` |331| `InstructionsLoaded` | 加载原因 | `session_start`、`nested_traversal`、`path_glob_match`、`include`、`compact` |

334| `UserPromptExpansion` | 命令名称 | 您的 skill 或命令名称 |332| `UserPromptExpansion` | 命令名称 | 你的技能或命令名称 |

335| `Elicitation` | MCP 服务器名称 | 您配置的 MCP 服务器名称 |333| `Elicitation` | MCP 服务器名称 | 你配置的 MCP 服务器名称 |

336| `ElicitationResult` | MCP 服务器名称 | 与 `Elicitation` 相同的值 |334| `ElicitationResult` | MCP 服务器名称 | 与 `Elicitation` 相同的值 |

337| `UserPromptSubmit`、`PostToolBatch`、`Stop`、`TeammateIdle`、`TaskCreated`、`TaskCompleted`、`WorktreeCreate`、`WorktreeRemove`、`MessageDisplay` | 不支持匹配器 | 总是在每次出现时触发 |335| `UserPromptSubmit`、`PostToolBatch`、`Stop`、`TeammateIdle`、`TaskCreated`、`TaskCompleted`、`WorktreeCreate`、`WorktreeRemove`、`MessageDisplay` | 无匹配器支持 | 总是在每次出现时触发 |

338 336 

339在 `cloud_credential_error` 上匹配 `StopFailure` 需要 Claude Code v2.1.267 或更高版本,这是第一个在该值下报告凭证加载失败而不是 `server_error` 或 `unknown` 的版本。337在 `cloud_credential_error` 上匹配 `StopFailure` 需要 Claude Code v2.1.267 或更高版本,这是第一个在该值下报告凭证加载失败而不是 `server_error` 或 `unknown` 的版本。

340 338 

341对于大多数事件,Claude Code 针对它在 stdin 上发送给您的 hook 的[JSON 输入](#hook-input-and-output)中的字段评估匹配器。对于工具事件,该字段是 `tool_name`。对于 `PreModelSwitch` 和 `PostModelSwitch`,Claude Code 针对它从 `to_model` 派生的规范名称评估匹配器,如[PreModelSwitch](#premodelswitch)下所述。每个[hook 事件](#hook-events)部分列出了完整的匹配器值集和该事件的输入架构。339对于大多数事件,Claude Code 根据它在 stdin 上发送给 hook 的 [JSON 输入](#hook-input-and-output) 中的字段评估匹配器。对于工具事件,该字段是 `tool_name`。对于 `PreModelSwitch` 和 `PostModelSwitch`,Claude Code 根据它从 `to_model` 派生的规范名称评估匹配器,如 [PreModelSwitch](#premodelswitch) 下所述。每个 [hook 事件](#hook-events) 部分列出了完整的匹配器值集和该事件的输入架构。

342 340 

343此示例仅在 Claude 写入或编辑文件时运行 linting 脚本:341此示例仅在 Claude 写入或编辑文件时运行 linting 脚本:

344 342 


360}358}

361```359```

362 360 

363如果您向不支持匹配器的事件添加 `matcher` 字段,它会被静默忽略。361如果向不支持匹配器的事件添加 `matcher` 字段,它会被静默忽略。

364 362 

365对于工具事件,您可以通过在单个 hook 处理程序上设置[`if` 字段](#common-fields)来更狭隘地过滤。`if` 使用[权限规则语法](/docs/zh-CN/permissions)来匹配工具名称和参数,因此 `"Bash(git *)"` 仅在任何 Bash 输入的子命令与 `git *` 匹配时运行,`"Edit(*.ts)"` 仅对 TypeScript 文件运行。363对于工具事件,可以通过在单个 hook 处理程序上设置 [`if` 字段](#common-fields) 来更狭隘地过滤。`if` 使用 [权限规则语法](/docs/zh-CN/permissions) 来匹配工具名称和参数,因此 `"Bash(git *)"` 在任何 Bash 输入的子命令匹配 `git *` 时运行,`"Edit(*.ts)"` 仅对 TypeScript 文件运行。

366 364 

367<h4 id="match-mcp-tools">365<h4 id="match-mcp-tools">

368 匹配 MCP 工具366 匹配 MCP 工具

369</h4>367</h4>

370 368 

371[MCP](/docs/zh-CN/mcp) 服务器工具在工具事件中显示为常规工具(`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest`、`PermissionDenied`),因此您可以像匹配任何其他工具名称一样匹配它们。369[MCP](/docs/zh-CN/mcp) 服务器工具在工具事件中显示为常规工具(`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest`、`PermissionDenied`),因此可以像匹配任何其他工具名称一样匹配它们。

372 370 

373MCP 工具遵循命名模式 `mcp__<server>__<tool>`,例如:371MCP 工具遵循命名模式 `mcp__<server>__<tool>`,例如:

374 372 


376* `mcp__filesystem__read_file`:Filesystem 服务器的读取文件工具374* `mcp__filesystem__read_file`:Filesystem 服务器的读取文件工具

377* `mcp__github__search_repositories`:GitHub 服务器的搜索工具375* `mcp__github__search_repositories`:GitHub 服务器的搜索工具

378 376 

379要匹配来自服务器的每个工具,请在服务器前缀后追加 `.*`。`.*` 是必需的:像 `mcp__memory` 或 `mcp__brave-search` 这样的匹配器仅包含精确匹配字符,因此它作为精确字符串进行比较,不匹配任何工具。377要匹配来自服务器的每个工具,请将 `.*` 附加到服务器前缀。`.*` 是必需的:像 `mcp__memory` 或 `mcp__brave-search` 这样的匹配器仅包含精确匹配字符,因此它被比较为精确字符串,不匹配任何工具。

380 378 

381* `mcp__memory__.*` 匹配来自 `memory` 服务器的所有工具379* `mcp__memory__.*` 匹配来自 `memory` 服务器的所有工具

382* `mcp__brave-search__.*` 匹配来自名称包含连字符的服务器的所有工具380* `mcp__brave-search__.*` 匹配来自名称包含连字符的服务器的所有工具

383* `mcp__.*__write.*` 匹配来自任何服务器的任何名称以 `write` 开头的工具381* `mcp__.*__write.*` 匹配来自任何服务器的名称以 `write` 开头的任何工具

384 382 

385精确匹配集中的连字符需要 Claude Code v2.1.195 或更高版本。在早期版本中,像 `mcp__brave-search` 这样的裸连字符前缀被评估为未锚定的正则表达式,并匹配来自该服务器的每个工具。`mcp__brave-search__.*` 形式在每个版本上都有效。383精确匹配集中的连字符需要 Claude Code v2.1.195 或更高版本。在早期版本中,裸连字符前缀如 `mcp__brave-search` 被评估为未锚定的正则表达式,并匹配来自该服务器的每个工具。`mcp__brave-search__.*` 形式在每个版本上都有效。

386 384 

387来自[插件捆绑的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers)的工具使用包含插件名称的作用域服务器段:`mcp__plugin_<plugin-name>_<server-name>__<tool>`。针对裸服务器密钥编写的匹配器永远不会对这些工具触发。对于在密钥 `db` 下捆绑服务器的名为 `my-plugin` 的插件,`query` 工具显示为 `mcp__plugin_my-plugin_db__query`,因此来自该服务器的每个工具的匹配器是 `mcp__plugin_my-plugin_db__.*`。在处理程序的[`if` 字段](#common-fields)中使用相同的作用域工具名称。有关如何构建作用域名称的信息,请参阅[插件提供的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers)。385来自 [插件捆绑的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers) 的工具使用包含插件名称的范围服务器段:`mcp__plugin_<plugin-name>_<server-name>__<tool>`。针对裸服务器密钥编写的匹配器永远不会对这些工具触发。对于名为 `my-plugin` 的插件,在密钥 `db` 下捆绑服务器,`query` 工具显示为 `mcp__plugin_my-plugin_db__query`,因此来自该服务器的每个工具的匹配器是 `mcp__plugin_my-plugin_db__.*`。在处理程序的 [`if` 字段](#common-fields) 中使用相同的范围工具名称。有关如何构建范围名称的信息,请参阅 [插件提供的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers)。

388 386 

389此示例记录所有内存服务器操作并验证来自任何 MCP 服务器的写入操作:387此示例记录所有内存服务器操作并验证来自任何 MCP 服务器的写入操作:

390 388 


421 419 

422内部 `hooks` 数组中的每个对象都是一个 hook 处理程序:当匹配器匹配时运行的 shell 命令、HTTP 端点、MCP 工具、LLM 提示或代理。有五种类型:420内部 `hooks` 数组中的每个对象都是一个 hook 处理程序:当匹配器匹配时运行的 shell 命令、HTTP 端点、MCP 工具、LLM 提示或代理。有五种类型:

423 421 

424* **[命令 hooks](#command-hook-fields)**(`type: "command"`):运行 shell 命令。您的脚本在 stdin 上接收事件的[JSON 输入](#hook-input-and-output),并通过退出代码和 stdout 传回结果。422* **[命令 hooks](#command-hook-fields)**(`type: "command"`):运行 shell 命令。脚本在 stdin 上接收事件的 [JSON 输入](#hook-input-and-output),并通过退出代码和 stdout 传回结果。

425* **[HTTP hooks](#http-hook-fields)**(`type: "http"`):将事件的 JSON 输入作为 HTTP POST 请求发送到 URL。端点通过使用与命令 hooks 相同的[JSON 输出格式](#json-output)的响应体传回结果。423* **[HTTP hooks](#http-hook-fields)**(`type: "http"`):将事件的 JSON 输入作为 HTTP POST 请求发送到 URL。端点通过响应体使用与命令 hooks 相同的 [JSON 输出格式](#json-output) 传回结果。

426* **[MCP 工具 hooks](#mcp-tool-hook-fields)**(`type: "mcp_tool"`):在已连接的[MCP 服务器](/docs/zh-CN/mcp)上调用工具。工具的文本输出被视为命令 hook stdout。424* **[MCP 工具 hooks](#mcp-tool-hook-fields)**(`type: "mcp_tool"`):在已连接的 [MCP 服务器](/docs/zh-CN/mcp) 上调用工具。工具的文本输出被视为命令 hook stdout。

427* **[提示 hooks](#prompt-and-agent-hook-fields)**(`type: "prompt"`):向 Claude 模型发送提示以进行单轮评估。模型返回其决定作为 JSON。请参阅[基于提示的 hooks](#prompt-based-hooks)。425* **[提示 hooks](#prompt-and-agent-hook-fields)**(`type: "prompt"`):向 Claude 模型发送提示以进行单轮评估。模型以 JSON 形式返回其决定。请参阅 [基于提示的 hooks](#prompt-based-hooks)。

428* **[代理 hooks](#prompt-and-agent-hook-fields)**(`type: "agent"`):生成一个可以使用 Read、Grep 和 Glob 等工具来验证条件的 subagent,然后返回决定。代理 hooks 是实验性的,可能会改变。请参阅[基于代理的 hooks](#agent-based-hooks)。426* **[代理 hooks](#prompt-and-agent-hook-fields)**(`type: "agent"`):生成一个子代理,可以使用 Read、Grep 和 Glob 等工具来验证条件,然后返回决定。代理 hooks 是实验性的,可能会改变。请参阅 [基于代理的 hooks](#agent-based-hooks)。

429 427 

430所有匹配的 hooks 并行运行。如果您在多个设置文件中定义相同的处理程序,它运行一次。插件或 skill 的相同处理程序副本保持分离。428所有匹配的 hooks 并行运行。如果在多个设置文件中定义相同的处理程序,它运行一次。插件或技能的相同处理程序副本保持分离。

431 429 

432处理程序在当前目录中运行,使用 Claude Code 的环境。如果当前目录不再存在,例如另一个 shell 在会话中途删除的 worktree 或临时目录,Claude Code 从以下第一个仍然存在的目录运行命令 hooks:会话启动的目录、项目根目录、您的主目录或系统临时目录。Claude Code 在[调试日志](#debug-hooks)中记录一条警告,命名回退目录。430处理程序在当前目录中使用 Claude Code 的环境运行。如果当前目录不再存在,例如另一个 shell 在会话中途删除的 worktree 或临时目录,Claude Code 从以下第一个仍然存在的目录运行命令 hooks:会话启动的目录、项目根目录、主目录或系统临时目录。Claude Code 在 [调试日志](#debug-hooks) 中记录一条警告,命名回退目录。

433 431 

434`$CLAUDE_CODE_REMOTE` 环境变量在远程 web 环境中为 `"true"`,在本地 CLI 中未设置。Claude Code v2.1.199 及更高版本在本地会话具有活跃的远程控制连接时将[`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/zh-CN/env-vars)设置为[远程控制](/docs/zh-CN/remote-control)会话 ID。432`$CLAUDE_CODE_REMOTE` 环境变量在远程 web 环境中为 `"true"`,在本地 CLI 中未设置。Claude Code v2.1.199 及更高版本在本地会话具有活跃的 Remote Control 连接时将 [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/zh-CN/env-vars) 设置为 [Remote Control](/docs/zh-CN/remote-control) 会话 ID。

435 433 

436<h4 id="common-fields">434<h4 id="common-fields">

437 通用字段435 通用字段


440这些字段适用于所有 hook 类型:438这些字段适用于所有 hook 类型:

441 439 

442| 字段 | 必需 | 描述 |440| 字段 | 必需 | 描述 |

443| :-------------- | :- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |441| :-------------- | :- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

444| `type` | 是 | `"command"`、`"http"`、`"mcp_tool"`、`"prompt"` 或 `"agent"` |442| `type` | 是 | `"command"`、`"http"`、`"mcp_tool"`、`"prompt"` 或 `"agent"` |

445| `if` | 否 | 权限规则语法以过滤此 hook 何时运行,例如 `"Bash(git *)"` 或 `"Edit(*.ts)"`。hook 命令仅在工具调用与模式匹配时运行。请参阅下面的[Bash 匹配表](#bash-if-matching)了解 Bash 模式如何针对子命令、`$()` 和反引号进行评估。仅在工具事件上评估:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。在其他事件上,设置了 `if` 的 hook 永远不会运行。使用与[权限规则](/docs/zh-CN/permissions)相同的语法 |443| `if` | 否 | 权限规则语法来过滤此 hook 何时运行,如 `"Bash(git *)"` 或 `"Edit(*.ts)"`。hook 命令仅在工具调用与模式匹配时运行。有关 Bash 模式如何针对子命令、`$()` 和反引号评估的信息,请参阅下面的 [Bash 匹配表](#bash-if-matching)。仅在工具事件上评估:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。在其他事件上,设置了 `if` 的 hook 永远不会运行。使用与 [权限规则](/docs/zh-CN/permissions) 相同的语法 |

446| `timeout` | 否 | 取消前的秒数。Claude Code 不在您使用 [`async: true`](#run-hooks-in-the-background)运行的命令 hook 上强制执行它。默认值:`command`、`http` 和 `mcp_tool` 为 600;`prompt` 为 30;`agent` 为 60。Claude Code 在[`UserPromptSubmit`](#userpromptsubmit)、[`PreModelSwitch`](#premodelswitch)和[`PostModelSwitch`](#postmodelswitch)上将 `command`、`http` 和 `mcp_tool` 的默认值降低到 30,在[`MessageDisplay`](#messagedisplay)上降低到 10。[`SessionEnd`](#sessionend) hooks 共享 1.5 秒的预算;如果您的设置设置了更长的每个 hook `timeout`,Claude Code 会提高预算以匹配,最多 60 秒 |444| `timeout` | 否 | 取消前的秒数。Claude Code 不在使用 [`async: true`](#run-hooks-in-the-background) 运行的命令 hook 上强制执行。默认值:`command`、`http` 和 `mcp_tool` 为 600;`prompt` 为 30;`agent` 为 60。Claude Code 在 [`UserPromptSubmit`](#userpromptsubmit)、[`PreModelSwitch`](#premodelswitch) 和 [`PostModelSwitch`](#postmodelswitch) 上将 `command`、`http` 和 `mcp_tool` 默认值降低到 30,在 [`MessageDisplay`](#messagedisplay) 上降低到 10。[`SessionEnd`](#sessionend) hooks 共享 1.5 秒的预算;如果设置设置了更长的每个 hook `timeout`,Claude Code 将预算提高到匹配,最多 60 秒 |

447| `statusMessage` | 否 | hook 运行时显示的自定义加载程序消息 |445| `statusMessage` | 否 | hook 运行时显示的自定义微调器消息 |

448| `once` | 否 | 如果为 `true`,Claude Code 在其第一次成功运行后移除 hook。失败、以退出代码 2 阻止或超时的运行会将 hook 保留在原位,因此它在下一个匹配事件上再次运行。仅在[skill frontmatter](#hooks-in-skills-and-agents)中声明的 hooks 中受尊重;在设置文件和代理 frontmatter 中被忽略 |446| `once` | 否 | 如果为 `true`,Claude Code 在第一次成功运行后删除 hook。失败、以退出代码 2 阻止或超时的运行将 hook 保留在原位,因此它在下一个匹配事件上再次运行。仅对在 [技能 frontmatter](#hooks-in-skills-and-agents) 中声明的 hooks 有效;在设置文件和代理 frontmatter 中被忽略 |

449 447 

450`if` 字段恰好包含一个权限规则。没有 `&&`、`||` 或列表语法来组合规则;要应用多个条件,请为每个条件定义一个单独的 hook 处理程序。448`if` 字段恰好包含一个权限规则。没有 `&&`、`||` 或列表语法来组合规则;要应用多个条件,为每个定义一个单独的 hook 处理程序。

451 449 

452在文件工具的 `if` 条件中,单段目录模式如 `"Edit(src/**)"` 仅匹配工作目录中的 `src` 目录及其下的文件。要匹配任何深度的名为 `src` 的目录,请写 `"Edit(**/src/**)"`。在 v2.1.214 之前,`"Edit(src/**)"` 匹配工作目录下任何深度的名为 `src` 的目录。450在文件工具的 `if` 条件中,单段目录模式如 `"Edit(src/**)"` 仅匹配工作目录中的 `src` 目录及其下的文件。要匹配工作目录下任何深度的名为 `src` 的目录,请写 `"Edit(**/src/**)"`。在 v2.1.214 之前,`"Edit(src/**)"` 匹配工作目录下任何深度的名为 `src` 的目录。

453 451 

454<span id="bash-if-matching" />对于 Bash 模式,您的 hook 命令是否运行取决于模式的形状和 Claude 调用的 Bash 命令。前导 `VAR=value` 赋值在匹配前被剥离。452<span id="bash-if-matching" />对于 Bash 模式,hook 命令是否运行取决于模式的形状和 Claude 调用的 Bash 命令。在匹配前剥离前导 `VAR=value` 赋值。

455 453 

456| `if` 模式 | Bash 命令 | Hook 运行? | 原因 |454| `if` 模式 | Bash 命令 | Hook 运行? | 为什么 |

457| :----------------- | :-------------------------- | :------- | :----------------------------------------- |455| :----------------- | :-------------------------- | :------- | :------------------------------------------- |

458| `Bash(git *)` | `FOO=bar git push` | 是 | 前导赋值被剥离;`git push` 匹配 |456| `Bash(git *)` | `FOO=bar git push` | 是 | 前导赋值被剥离;`git push` 匹配 |

459| `Bash(git *)` | `npm test && git push` | 是 | 每个子命令都被检查;`git push` 匹配 |457| `Bash(git *)` | `npm test && git push` | 是 | 每个子命令被检查;`git push` 匹配 |

460| `Bash(rm *)` | `echo $(rm -rf /)` | 是 | `$()` 和反引号内的命令被检查;`rm -rf /` 匹配 |458| `Bash(rm *)` | `echo $(rm -rf /)` | 是 | `$()` 和反引号内的命令被检查;`rm -rf /` 匹配 |

461| `Bash(rm *)` | `echo $(date)` | 否 | 没有子命令匹配 `rm *` |459| `Bash(rm *)` | `echo $(date)` | 否 | 没有子命令匹配 `rm *` |

462| `Bash(cat *)` | `echo before $(date) after` | 否 | 替换可以位于任何参数位置,因此检查完整命令和 `date`;都不匹配 `cat *` |460| `Bash(cat *)` | `echo before $(date) after` | 否 | 替换可以位于任何参数位置,因此检查完整命令和 `date`;都不匹配 `cat *` |

463| `Bash(git *)` | `$TOOL git push` | 是 | Claude Code 无法判断命令名称展开为什么,因此它运行 hook |461| `Bash(git *)` | `$TOOL git push` | 是 | Claude Code 无法判断命令名称扩展到什么,因此它运行 hook |

464| `Bash(git push *)` | `echo $(date)` | 是 | 指定超过命令名称的模式在 `$()`、反引号或 `$VAR` 上运行 hook |462| `Bash(git push *)` | `echo $(date)` | 是 | 指定超过命令名称的模式在 `$()`、反引号或 `$VAR` 上无论如何都运行 hook |

465 463 

466当 Claude Code 无法确定 Bash 输入运行哪些命令时,它无论如何都会运行您的 hook。因为 `if` 过滤器是尽力而为的,使用[权限系统](/docs/zh-CN/permissions)而不是 hook 来强制执行硬允许或拒绝。464当 Claude Code 无法确定 Bash 输入运行哪些命令时,它无论模式如何都运行 hook。因为 `if` 过滤是尽力而为的,使用 [权限系统](/docs/zh-CN/permissions) 而不是 hook 来强制执行硬允许或拒绝。

467 465 

468<h4 id="command-hook-fields">466<h4 id="command-hook-fields">

469 命令 hook 字段467 命令 hook 字段

470</h4>468</h4>

471 469 

472除了[通用字段](#common-fields)外,命令 hooks 还接受这些字段:470除了 [通用字段](#common-fields),命令 hooks 接受这些字段:

473 471 

474| 字段 | 必需 | 描述 |472| 字段 | 必需 | 描述 |

475| :------------ | :- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |473| :------------ | :- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

476| `command` | 是 | 要执行的 shell 命令。与 `args` 一起,要直接生成的可执行文件。请参阅[Exec 形式和 shell 形式](#exec-form-and-shell-form) |474| `command` | 是 | 要执行的 shell 命令。使用 `args` 时,直接生成的可执行文件。请参阅 [Exec 形式和 shell 形式](#exec-form-and-shell-form) |

477| `args` | 否 | 参数列表。存在时,`command` 被解析为可执行文件并直接使用 `args` 作为参数向量生成,不涉及 shell。请参阅[Exec 形式和 shell 形式](#exec-form-and-shell-form) |475| `args` | 否 | 参数列表。存在时,`command` 被解析为可执行文件并直接使用 `args` 作为参数向量生成,不涉及 shell。请参阅 [Exec 形式和 shell 形式](#exec-form-and-shell-form) |

478| `async` | 否 | 如果为 `true`,在后台运行而不阻止。请参阅[在后台运行 hooks](#run-hooks-in-the-background) |476| `async` | 否 | 如果为 `true`,在后台运行而不阻止。请参阅 [在后台运行 hooks](#run-hooks-in-the-background) |

479| `asyncRewake` | 否 | 如果为 `true`,在后台运行并在退出代码 2 时唤醒 Claude。hook 的 stderr,或 stdout(如果 stderr 为空),作为系统提醒显示给 Claude,以便它可以对长时间运行的后台失败做出反应 |477| `asyncRewake` | 否 | 如果为 `true`,在后台运行并在退出代码 2 时唤醒 Claude。hook 的 stderr 或 stdout(如果 stderr 为空)显示给 Claude 作为系统提醒,以便它可以对长时间运行的后台失败做出反应 |

480| `shell` | 否 | 用于此 hook 的 shell。接受 `"bash"` 或 `"powershell"`。默认为 `"bash"`,或在未安装 Git Bash 时在 Windows 上默认为 `"powershell"`。设置 `"powershell"` 在 Windows 上通过 PowerShell 运行命令。不需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL`,因为 hooks 直接生成 PowerShell。设置 `args` 时被忽略 |478| `shell` | 否 | 用于此 hook 的 shell。接受 `"bash"` 或 `"powershell"`。默认为 `"bash"`,或在未安装 Git Bash 时在 Windows 上默认为 `"powershell"`。设置 `"powershell"` 在 Windows 上通过 PowerShell 运行命令。不需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL`,因为 hooks 直接生成 PowerShell。设置 `args` 时被忽略 |

481 479 

482<a id="exec-form-and-shell-form" />480<a id="exec-form-and-shell-form" />


485 Exec 形式和 shell 形式483 Exec 形式和 shell 形式

486</h5>484</h5>

487 485 

488当设置 `args` 时,命令 hook 以 exec 形式运行,当省略 `args` 时以 shell 形式运行。每当 hook 引用[路径占位符](#reference-scripts-by-path)时设置 `args`,因为每个元素作为一个参数传递,不带引号。当您需要 shell 功能(如管道或 `&&`)时,或当两个问题都不适用时,省略 `args`。486当设置 `args` 时,命令 hook 以 exec 形式运行,当省略 `args` 时以 shell 形式运行。每当 hook 引用 [路径占位符](#reference-scripts-by-path) 时设置 `args`,因为每个元素作为一个参数传递,不带引号。当需要 shell 功能如管道或 `&&` 时省略 `args`,或当两个问题都不适用时。

489 487 

490**Exec 形式**在存在 `args` 时运行。Claude Code 在 `PATH` 上解析 `command` 作为可执行文件,并直接使用 `args` 作为参数向量生成它。没有 shell,因此每个 `args` 元素恰好是一个参数,完全按照编写的方式,路径占位符如 `${CLAUDE_PLUGIN_ROOT}` 被替换为 `command` 和每个 `args` 元素中的纯字符串。特殊字符如撇号、`$` 和反引号逐字通过,因为没有 shell 来解释它们。在任何平台上都不会发生 shell 标记化。488**Exec 形式**在设置 `args` 时运行。Claude Code 在 `PATH` 上解析 `command` 作为可执行文件,并直接使用 `args` 作为参数向量生成它。没有 shell,因此每个 `args` 元素恰好是一个参数,完全按照编写的方式,路径占位符如 `${CLAUDE_PLUGIN_ROOT}` 被替换为 `command` 和每个 `args` 元素中的纯字符串。特殊字符如撇号、`$` 和反引号逐字传递,因为没有 shell 来解释它们。在任何平台上都不会发生 shell 标记化。

491 489 

492**Shell 形式**在省略 `args` 时运行。`command` 字符串被传递给 shell:在 macOS 和 Linux 上为 `sh -c`,在 Windows 上为 Git Bash,或在未安装 Git Bash 时为 PowerShell。设置 `shell` 字段以显式选择。shell 标记化字符串,展开变量,并解释管道、`&&`、重定向和 glob。490**Shell 形式**在省略 `args` 时运行。`command` 字符串被传递到 shell:在 macOS 和 Linux 上为 `sh -c`,在 Windows 上为 Git Bash,或在未安装 Git Bash 时为 PowerShell。设置 `shell` 字段来明确选择。shell 标记化字符串、扩展变量并解释管道、`&&`、重定向和 globs。

493 491 

494<Note>492<Note>

495 在 Windows 上,exec 形式需要 `command` 解析为真实可执行文件,如 `.exe`。npm、npx、eslint 和其他工具在 `node_modules/.bin` 中安装的 `.cmd` 和 `.bat` 垫片不是可执行文件,不能在没有 shell 的情况下生成。要在 exec 形式中运行它们,直接使用 `node` 调用底层脚本,例如 `"command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/node_modules/eslint/bin/eslint.js"]`。`node` 加脚本路径模式在每个平台上都有效,因为 `node.exe` 是真实二进制文件。要按名称运行 `.cmd` 或 `.bat` 垫片,请使用 shell 形式。493 在 Windows 上,exec 形式需要 `command` 解析为真实可执行文件如 `.exe`。npm、npx、eslint 和其他工具在 `node_modules/.bin` 中安装的 `.cmd` 和 `.bat` 垫片不是可执行文件,不能在没有 shell 的情况下生成。要在 exec 形式中运行它们,直接使用 `node` 调用底层脚本,例如 `"command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/node_modules/eslint/bin/eslint.js"]`。`node` 加脚本路径模式在每个平台上都有效,因为 `node.exe` 是真实二进制文件。要按名称运行 `.cmd` 或 `.bat` 垫片,使用 shell 形式。

496</Note>494</Note>

497 495 

498此示例运行与插件捆绑的 Node 脚本。Exec 形式将解析的脚本路径作为一个参数传递,不带引号:496此示例运行与插件捆绑的 Node 脚本。Exec 形式将解析的脚本路径作为一个参数传递,不带引号:


505}503}

506```504```

507 505 

508等效的 shell 形式需要引号来处理包含空格或特殊字符的路径:506等效的 shell 形式需要引号来处理带空格或特殊字符的路径:

509 507 

510```json theme={null}508```json theme={null}

511{509{


514}512}

515```513```

516 514 

517两种形式都支持相同的[路径占位符](#reference-scripts-by-path),并且都将它们作为环境变量 `CLAUDE_PROJECT_DIR`、`CLAUDE_PLUGIN_ROOT` 和 `CLAUDE_PLUGIN_DATA` 导出到生成的进程上,因此脚本可以读取 `process.env.CLAUDE_PLUGIN_ROOT`,无论它是如何启动的。515两种形式都支持相同的 [路径占位符](#reference-scripts-by-path),并且都将它们导出为生成过程上的环境变量 `CLAUDE_PROJECT_DIR`、`CLAUDE_PLUGIN_ROOT` 和 `CLAUDE_PLUGIN_DATA`,因此脚本可以读取 `process.env.CLAUDE_PLUGIN_ROOT` 无论如何启动。

518 516 

519插件 hooks 另外替换 [`${user_config.*}`](/docs/zh-CN/plugins-reference#user-configuration) 值,仅在 exec 形式中:该值被替换为 `command` 和每个 `args` 元素中的纯字符串,因此没有 shell 重新解析它。517插件 hooks 另外替换 [`${user_config.*}`](/docs/zh-CN/plugins/manifest-reference#user-configuration) 值,仅在 exec 形式中:值被替换为 `command` 和每个 `args` 元素中的纯字符串,因此没有 shell 重新解析它。

520 518 

521一个 shell 形式的插件 hook,其 `command` 引用 `${user_config.*}` 会失败并出现[错误](/docs/zh-CN/errors#plugin-command-references-user-config),而不是运行。要从 shell 形式的 hook 使用选项值,请读取 `$CLAUDE_PLUGIN_OPTION_<KEY>` 环境变量,例如 `webhook_url` 选项的 `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL`,或设置 `args` 以将 hook 切换到 exec 形式。在 v2.1.207 之前,shell 形式的插件 hook 命令也替换了 `${user_config.*}`。519shell 形式的插件 hook,其 `command` 引用 `${user_config.*}` 失败并出现 [错误](/docs/zh-CN/errors#plugin-command-references-user-config) 而不是运行。要从 shell 形式的 hook 使用选项值,读取 `$CLAUDE_PLUGIN_OPTION_<KEY>` 环境变量,如 `webhook_url` 选项的 `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL`,或设置 `args` 来将 hook 切换到 exec 形式。在 v2.1.207 之前,shell 形式的插件 hook 命令也替换 `${user_config.*}`。

522 520 

523<Note>521<Note>

524 在 exec 形式中,`command` 仅是可执行文件名或路径。如果 `command` 是没有路径分隔符的裸名称,并且与 `args` 一起包含空格,Claude Code 会记录警告,因为生成会失败:没有名为 `node script.js` 的可执行文件。将额外的令牌移到 `args` 中。包含空格的绝对路径,如 `C:\Program Files\nodejs\node.exe`,是单个有效的可执行文件,不会触发警告。522 在 exec 形式中,`command` 仅是可执行文件名或路径。如果 `command` 是没有路径分隔符的裸名称,并且与 `args` 一起包含空格,Claude Code 记录一条警告,因为生成将失败:没有名为 `node script.js` 的可执行文件。将额外的标记移到 `args` 中。带空格的绝对路径,如 `C:\Program Files\nodejs\node.exe`,是单个有效的可执行文件,不会触发警告。

525</Note>523</Note>

526 524 

527<h4 id="http-hook-fields">525<h4 id="http-hook-fields">

528 HTTP hook 字段526 HTTP hook 字段

529</h4>527</h4>

530 528 

531除了[通用字段](#common-fields)外,HTTP hooks 还接受这些字段:529除了 [通用字段](#common-fields),HTTP hooks 接受这些字段:

532 530 

533| 字段 | 必需 | 描述 |531| 字段 | 必需 | 描述 |

534| :--------------- | :- | :-------------------------------------------------------------------------------------- |532| :--------------- | :- | :-------------------------------------------------------------------------------------- |

535| `url` | 是 | 发送 POST 请求的 URL |533| `url` | 是 | 发送 POST 请求的 URL |

536| `headers` | 否 | 其他 HTTP 标头作为键值对。值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 中列出的变量 |534| `headers` | 否 | 其他 HTTP 标头作为键值对。值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 中列出的变量 |

537| `allowedEnvVars` | 否 | 可能被插值到标头值中的环境变量名称列表。对未列出变量的引用被替换为空字符串。任何环境变量插值都需要此项 |535| `allowedEnvVars` | 否 | 可能被插值到标头值中的环境变量名称列表。对未列出变量的引用被替换为空字符串。任何环境变量插值都需要 |

538 536 

539Claude Code 使用 `Content-Type: application/json` 将 hook 的[JSON 输入](#hook-input-and-output)作为 POST 请求体发送。响应体使用与命令 hooks 相同的[JSON 输出格式](#json-output)。537Claude Code 将 hook 的 [JSON 输入](#hook-input-and-output) 作为 POST 请求体发送,`Content-Type: application/json`。响应体使用与命令 hooks 相同的 [JSON 输出格式](#json-output)。

540 538 

541错误处理与命令 hooks 不同;请参阅[HTTP 响应处理](#http-response-handling)。539错误处理与命令 hooks 不同;请参阅 [HTTP 响应处理](#http-response-handling)。

542 540 

543此示例将 `PreToolUse` 事件发送到本地验证服务,使用来自 `MY_TOKEN` 环境变量的令牌进行身份验证:541此示例将 `PreToolUse` 事件发送到本地验证服务,使用来自 `MY_TOKEN` 环境变量的令牌进行身份验证:

544 542 


569 MCP 工具 hook 字段567 MCP 工具 hook 字段

570</h4>568</h4>

571 569 

572除了[通用字段](#common-fields)外,MCP 工具 hooks 还接受这些字段:570除了 [通用字段](#common-fields),MCP 工具 hooks 接受这些字段:

573 571 

574| 字段 | 必需 | 描述 |572| 字段 | 必需 | 描述 |

575| :------- | :- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |573| :------- | :- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

576| `server` | 是 | 已配置的 MCP 服务器的名称。对于[插件捆绑的服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers),这是作用域名称 `plugin:<plugin-name>:<server-name>`,例如 `plugin:my-plugin:db`,而不是裸服务器密钥。服务器必须已连接;hook 永远不会触发 OAuth 或连接流 |574| `server` | 是 | 配置的 MCP 服务器的名称。对于 [插件捆绑的服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers),这是范围名称 `plugin:<plugin-name>:<server-name>`,如 `plugin:my-plugin:db`,不是裸服务器密钥。服务器必须已连接;hook 永远不会触发 OAuth 或连接流 |

577| `tool` | 是 | 该服务器上要调用的工具的名称 |575| `tool` | 是 | 在该服务器上调用的工具的名称 |

578| `input` | 否 | 传递给工具的参数。字符串值支持从 hook 的[JSON 输入](#hook-input-and-output)进行 `${path}` 替换,例如 `"${tool_input.file_path}"` |576| `input` | 否 | 传递给工具的参数。字符串值支持来自 hook 的 [JSON 输入](#hook-input-and-output) 的 `${path}` 替换,如 `"${tool_input.file_path}"` |

579 577 

580Claude Code 读取工具的文本内容的方式与读取命令 hook stdout 相同,遵循[退出代码 0 下的解析规则](#exit-code-0)。如果命名的服务器未连接,或工具返回 `isError: true`,hook 会产生非阻止错误,执行继续。578Claude Code 读取工具的文本内容的方式与读取命令 hook stdout 相同,遵循 [退出代码 0 下的解析规则](#exit-code-0)。如果命名的服务器未连接,或工具返回 `isError: true`,hook 产生非阻止错误,执行继续。

581 579 

582此示例在每个 `Write` 或 `Edit` 后在 `my_server` MCP 服务器上调用 `security_scan` 工具,传递编辑文件的路径:580此示例在每个 `Write` 或 `Edit` 后在 `my_server` MCP 服务器上调用 `security_scan` 工具,传递编辑文件的路径:

583 581 


601}599}

602```600```

603 601 

604`mcp_tool` hook 仅在 Claude Code 使会话的 MCP 服务器对 hooks 可用后才能在每个 hook 事件上运行。`SessionStart` 和 `Setup` 可能在该点之前触发:602`mcp_tool` hook 仅在 Claude Code 使会话的 MCP 服务器对 hooks 可用后才能运行。`SessionStart` 和 `Setup` 可能在该点之前触发:

605 603 

606* **在启动时**:`SessionStart` 在服务器可用之前触发,包括当您使用 `--continue` 或 `--resume` 启动时。Claude Code 跳过事件的 `mcp_tool` hooks 而不调用它们的工具,[调试日志](#debug-hooks)记录 `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`。604* **在启动时**:`SessionStart` 在服务器可用之前触发,包括当使用 `--continue` 或 `--resume` 启动时。Claude Code 跳过事件的 `mcp_tool` hooks 而不调用其工具,[调试日志](#debug-hooks) 记录 `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`。

607* **稍后在运行的会话中**:在 `/clear` 或压缩后,`SessionStart` 再次触发,服务器已可用,其 `mcp_tool` hooks 运行。605* **稍后在运行会话中**:在 `/clear` 或压缩后,`SessionStart` 再次触发,服务器已可用,其 `mcp_tool` hooks 运行。

608* **在 `Setup` 上**:`Setup` 总是在服务器可用之前触发,因此 Claude Code 每次都跳过其 `mcp_tool` hooks 并记录相同的消息,命名 `Setup`。606* **在 `Setup` 上**:`Setup` 总是在服务器可用之前触发,因此 Claude Code 每次都跳过其 `mcp_tool` hooks 并记录相同的消息,命名 `Setup`。

609 607 

610例如,此配置从没有匹配器的 `SessionStart` hook 在 `my_server` MCP 服务器上调用 `load_context` 工具,因此它适用于每个 `SessionStart` 源:608例如,此配置从 `SessionStart` hook 在 `my_server` MCP 服务器上调用 `load_context` 工具,没有匹配器,因此它适用于每个 `SessionStart` 源:

611 609 

612```json theme={null}610```json theme={null}

613{611{


627}625}

628```626```

629 627 

630当您运行 `claude` 时,Claude Code 跳过此 hook,永远不调用 `load_context`,并将 `no MCP client context` 消息写入调试日志。在该同一会话中运行 `/clear`,hook 运行并调用 `load_context`。`type: "command"` hook 在 `SessionStart` 上运行,因此对会话从其第一个转向需要的任何东西使用一个。628当运行 `claude` 时,Claude Code 跳过此 hook,永远不调用 `load_context`,并将 `no MCP client context` 消息写入调试日志。在同一会话中运行 `/clear`,hook 运行并调用 `load_context`。`type: "command"` hook 在 `SessionStart` 上运行,因此对会话从第一轮需要的任何东西使用一个。

631 629 

632<h4 id="prompt-and-agent-hook-fields">630<h4 id="prompt-and-agent-hook-fields">

633 提示和代理 hook 字段631 提示和代理 hook 字段

634</h4>632</h4>

635 633 

636除了[通用字段](#common-fields)外,提示和代理 hooks 还接受这些字段:634除了 [通用字段](#common-fields),提示和代理 hooks 接受这些字段:

637 635 

638| 字段 | 必需 | 描述 |636| 字段 | 必需 | 描述 |

639| :------- | :- | :----------------------------------------------------------------------------------- |637| :------- | :- | :--------------------------------------------------------------------------------- |

640| `prompt` | 是 | 要发送给模型的提示文本。使用 `$ARGUMENTS` 作为 hook 输入 JSON 的占位符。使用反斜杠转义以包含文字文本:`\$1.00` 呈现为 `$1.00` |638| `prompt` | 是 | 发送给模型的提示文本。使用 `$ARGUMENTS` 作为 hook 输入 JSON 的占位符。用反斜杠转义以包含文字文本:`\$1.00` 呈现为 `$1.00` |

641| `model` | 否 | 用于评估的模型。默认为快速模型 |639| `model` | 否 | 用于评估的模型。默认为快速模型 |

642 640 

643<h3 id="reference-scripts-by-path">641<h3 id="reference-scripts-by-path">

644 按路径引用脚本642 按路径引用脚本

645</h3>643</h3>

646 644 

647使用这些占位符按项目或插件根目录引用 hook 脚本,无论 hook 运行时的工作目录如何:645使用这些占位符来相对于项目或插件根目录引用 hook 脚本,无论 hook 运行时的工作目录如何:

648 646 

649* `${CLAUDE_PROJECT_DIR}`:项目根目录,会话启动的位置。Claude Code 也在[stdio MCP 服务器](/docs/zh-CN/mcp#option-3-add-a-local-stdio-server)和插件 LSP 服务器的环境中设置此变量。647* `${CLAUDE_PROJECT_DIR}`:会话启动的项目根目录。Claude Code 还在 [stdio MCP 服务器](/docs/zh-CN/mcp#option-3-add-a-local-stdio-server) 和插件 LSP 服务器的环境中设置此变量。

650* `${CLAUDE_PLUGIN_ROOT}`:插件的安装目录,用于与[插件](/docs/zh-CN/plugins)捆绑的脚本。请参阅[插件环境变量](/docs/zh-CN/plugins-reference#environment-variables)了解路径在更新中的行为。648* `${CLAUDE_PLUGIN_ROOT}`:插件的安装目录,用于与 [插件](/docs/zh-CN/plugins/overview) 捆绑的脚本。有关路径在更新中的行为方式,请参阅 [插件环境变量](/docs/zh-CN/plugins/manifest-reference#environment-variables)。

651* `${CLAUDE_PLUGIN_DATA}`:插件的[持久数据目录](/docs/zh-CN/plugins-reference#persistent-data-directory),用于应该在插件更新后保留的依赖项和状态。649* `${CLAUDE_PLUGIN_DATA}`:插件的 [持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data),用于应该在插件更新中存活的依赖项和状态。

652 650 

653<Note>651<Note>

654 **Worktrees 是不同的。** 如果 Claude 在会话期间进入[worktree](/docs/zh-CN/worktrees),Claude Code 保持 `${CLAUDE_PROJECT_DIR}` 在其原位,并以不同的方式将 worktree 路径传递给您的 hooks:652 **Worktrees 是不同的。** 如果 Claude 在会话期间进入 [worktree](/docs/zh-CN/worktrees),Claude Code 将 `${CLAUDE_PROJECT_DIR}` 保持在原位,并以不同的方式将 worktree 路径传递给 hooks:

655 653 

656 * **`${CLAUDE_PROJECT_DIR}` 保持不变**:它仍然指向会话启动的项目根目录,因此像 `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` 这样的命令仍然在主检出中运行脚本。654 * **`${CLAUDE_PROJECT_DIR}` 保持不变**:它仍然指向会话启动的项目根目录,因此像 `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` 这样的命令仍然在主检出中运行脚本。

657 * **`cwd` 跟随 Claude**:hook 的[输入 JSON](#common-input-fields)中的 `cwd` 字段在 Claude 进入 worktree 后是 worktree 根目录,在 Claude 运行 `cd` 后是新目录。当 hook 需要知道 Claude 正在哪个目录中工作时读取它。655 * **`cwd` 跟随 Claude**:hook 的 [输入 JSON](#common-input-fields) 中的 `cwd` 字段在 Claude 进入 worktree 后是 worktree 根目录,在 Claude 运行 `cd` 后是新目录。当 hook 需要知道 Claude 正在处理哪个目录时读取它。

658</Note>656</Note>

659 657 

660对于任何引用路径占位符的 hook,优先使用[exec 形式](#exec-form-and-shell-form)。在 shell 形式中,用双引号包装每个占位符。658对于任何引用路径占位符的 hook,优先使用 [exec 形式](#exec-form-and-shell-form)。在 shell 形式中,用双引号包装每个占位符。

661 659 

662<Tabs>660<Tabs>

663 <Tab title="项目脚本">661 <Tab title="项目脚本">


684 </Tab>682 </Tab>

685 683 

686 <Tab title="插件脚本">684 <Tab title="插件脚本">

687 在 `hooks/hooks.json` 中定义插件 hooks,带有可选的顶级 `description` 字段。启用插件时,其 hooks 与您的用户和项目 hooks 合并。685 在 `hooks/hooks.json` 中定义插件 hooks,带有可选的顶级 `description` 字段。启用插件时,其 hooks 与用户和项目 hooks 合并。

688 686 

689 此示例运行与插件捆绑的格式化脚本:687 此示例运行与插件捆绑的格式化脚本:

690 688 

691 ```json theme={null}689 ```json theme={null}

692 {690 {

693 "description": "Automatic code formatting",691 "description": "自动代码格式化",

694 "hooks": {692 "hooks": {

695 "PostToolUse": [693 "PostToolUse": [

696 {694 {


709 }707 }

710 ```708 ```

711 709 

712 有关创建插件 hooks 的详细信息,请参阅[插件组件参考](/docs/zh-CN/plugins-reference#hooks)。710 有关创建插件 hooks 的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins/components#hooks)。

713 </Tab>711 </Tab>

714</Tabs>712</Tabs>

715 713 

716<h3 id="hooks-in-skills-and-agents">714<h3 id="hooks-in-skills-and-agents">

717 Skills 和代理中的 Hooks715 Hooks in skills and agents

718</h3>716</h3>

719 717 

720除了设置文件和插件外,hooks 还可以使用 frontmatter 直接在[skills](/docs/zh-CN/skills)和[subagents](/docs/zh-CN/sub-agents)中定义,使用与基于设置的 hooks 相同的配置格式。Claude Code 保持它们注册多长时间取决于组件:718除了设置文件和插件,hooks 可以直接在 [skills](/docs/zh-CN/skills) 和 [subagents](/docs/zh-CN/sub-agents) 中使用 frontmatter 定义,采用与基于设置的 hooks 相同的配置格式。Claude Code 保持它们注册多长时间取决于组件:

721 719 

722* **Subagent hooks**:Claude Code 仅在该 subagent 运行时运行它们,并在其完成时移除它们。Claude Code 在此处将 `Stop` hook 转换为 `SubagentStop`,这是 subagent 完成时触发的事件。720* **Subagent hooks**:Claude Code 仅在该子代理运行时运行它们,并在完成时删除它们。Claude Code 在此处将 `Stop` hook 转换为 `SubagentStop`,这是它在子代理完成时触发的事件。

723* **Skill hooks**:Claude Code 在您或 Claude 调用 skill 时注册它们,并在会话的其余部分保持运行它们,在 skill 自己的转向之后的转向上也是如此。要让 Claude Code 在第一次成功运行后移除 hook,请在其上设置[`once: true`](#common-fields)。721* **Skill hooks**:Claude Code 在调用技能时注册它们,并在会话的其余部分保持运行它们,在技能自己的轮次之后的轮次上也是如此。要让 Claude Code 在第一次成功运行后删除 hook,请在其上设置 [`once: true`](#common-fields)。

724 722 

725此 skill 定义了一个 `PreToolUse` hook,在每个 `Bash` 命令之前运行安全验证脚本:723此技能定义了一个 `PreToolUse` hook,在每个 `Bash` 命令之前运行安全验证脚本:

726 724 

727```yaml theme={null}725```yaml theme={null}

728---726---

729name: secure-operations727name: secure-operations

730description: Perform operations with security checks728description: 执行具有安全检查的操作

731hooks:729hooks:

732 PreToolUse:730 PreToolUse:

733 - matcher: "Bash"731 - matcher: "Bash"


739 737 

740Subagents 在其 YAML frontmatter 中使用相同的格式。738Subagents 在其 YAML frontmatter 中使用相同的格式。

741 739 

742项目 skill 中的 Frontmatter hooks 遵循与设置文件中的 hooks 相同的[工作区信任规则](#workspace-trust)。Claude Code 在您或 Claude 调用 skill 时注册它们,包括在您未信任的文件夹中的 `-p` 运行。740项目技能中的 Frontmatter hooks 遵循与设置文件中的 hooks 相同的 [工作区信任规则](#workspace-trust)。Claude Code 在调用技能时注册它们,包括在未信任的文件夹中的 `-p` 运行。

743 741 

744项目 subagent 中的 Frontmatter hooks 仅在您接受 agent 文件来自的文件夹的[工作区信任对话](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)后运行。`-p` 会话不计为接受它。[在您信任文件夹之前运行的内容](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)将此与设置文件规则进行比较,subagents 页面列出[哪些范围是豁免的](/docs/zh-CN/sub-agents#hooks-in-subagent-frontmatter)。在 v2.1.218 之前,这些 hooks 可以从您未信任的文件夹运行。742项目子代理中的 Frontmatter hooks 仅在接受代理文件来自的文件夹的 [工作区信任对话](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后运行。`-p` 会话不计为接受它。[在信任文件夹之前运行的内容](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 将此与设置文件规则进行比较,subagents 页面列出 [哪些范围被豁免](/docs/zh-CN/sub-agents#hooks-in-subagent-frontmatter)。在 v2.1.218 之前,这些 hooks 可以从未信任的文件夹运行。

745 743 

746<h3 id="the-/hooks-menu">744<h3 id="the-/hooks-menu">

747 `/hooks` 菜单745 `/hooks` 菜单

748</h3>746</h3>

749 747 

750在 Claude Code 中键入 `/hooks` 以打开您配置的 hooks 的只读浏览器。菜单显示每个 hook 事件及其配置的 hooks 计数,让您深入了解匹配器,并显示每个 hook 处理程序的完整详细信息。使用它来验证配置、检查 hook 来自哪个设置文件,或检查 hook 的命令、提示或 URL。748在 Claude Code 中键入 `/hooks` 以打开配置的 hooks 的只读浏览器。菜单显示每个 hook 事件及其配置的 hooks 计数,让你深入了解匹配器,并显示每个 hook 处理程序的完整详细信息。使用它来验证配置、检查 hook 来自哪个设置文件或检查 hook 的命令、提示或 URL。

751 749 

752菜单显示所有五种 hook 类型:`command`、`prompt`、`agent`、`http` 和 `mcp_tool`。每个 hook 都标有 `[type]` 前缀和指示其定义位置的源:750菜单显示所有五种 hook 类型:`command`、`prompt`、`agent`、`http` 和 `mcp_tool`。每个 hook 都标有 `[type]` 前缀和指示其定义位置的源:

753 751 


755* `Project Settings`:来自 `.claude/settings.json`753* `Project Settings`:来自 `.claude/settings.json`

756* `Local Settings`:来自 `.claude/settings.local.json`754* `Local Settings`:来自 `.claude/settings.local.json`

757* `Plugin Hooks`:来自插件的 `hooks/hooks.json`755* `Plugin Hooks`:来自插件的 `hooks/hooks.json`

758* `Session Hooks`:在当前会话中在内存中注册756* `Session Hooks`:为当前会话在内存中注册

759 757 

760选择 hook 会打开详细视图,显示其事件、匹配器、类型、源文件以及完整的命令、提示或 URL。菜单是只读的:要添加、修改或移除 hooks,请直接编辑设置 JSON 或要求 Claude 进行更改。758选择 hook 打开详细视图,显示其事件、匹配器、类型、源文件和完整命令、提示或 URL。菜单是只读的:要添加、修改或删除 hooks,直接编辑设置 JSON 或要求 Claude 进行更改。

761 759 

762<h3 id="disable-or-remove-hooks">760<h3 id="disable-or-remove-hooks">

763 禁用或移除 hooks761 禁用或删除 hooks

764</h3>762</h3>

765 763 

766要移除 hook,请从设置 JSON 文件中删除其条目。764要删除 hook,从设置 JSON 文件中删除其条目。

767 765 

768要临时禁用所有 hooks 而不移除它们,请在设置文件中设置 `"disableAllHooks": true`。Claude Code 读取[设置优先级](/docs/zh-CN/settings#settings-precedence)应用后留下的值,因此项目的 `.claude/settings.json` 中的 `"disableAllHooks": false` 覆盖您的用户设置中的 `true`。要关闭一次运行,无论项目的设置说什么,请传递 `--settings '{"disableAllHooks": true}'`,这优先于项目和本地设置。没有办法在保持 hook 在配置中的同时禁用单个 hook。766要临时禁用所有 hooks 而不删除它们,在设置文件中设置 `"disableAllHooks": true`。Claude Code 读取 [设置优先级](/docs/zh-CN/settings#settings-precedence) 应用后留下的值,因此项目的 `.claude/settings.json` 中的 `"disableAllHooks": false` 覆盖用户设置中的 `true`。要关闭一次运行,无论项目的设置如何,传递 `--settings '{"disableAllHooks": true}'`,这优先于项目和本地设置。没有办法禁用单个 hook 同时将其保留在配置中。

769 767 

770`disableAllHooks` 设置遵守托管设置层次结构。如果管理员通过托管策略设置配置了 hooks,则在用户、项目或本地设置中设置的 `disableAllHooks` 无法禁用这些托管 hooks。仅在托管设置级别设置的 `disableAllHooks` 可以禁用托管 hooks。对于每个级别的完整范围,请参阅[`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks)。768`disableAllHooks` 设置尊重托管设置层次结构。如果管理员通过托管策略设置配置了 hooks,在用户、项目或本地设置中设置的 `disableAllHooks` 无法禁用这些托管 hooks。仅在托管设置级别设置的 `disableAllHooks` 可以禁用托管 hooks。有关每个级别的完整范围,请参阅 [`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks)。

771 769 

772对设置文件中 hooks 的直接编辑通常由文件监视程序自动拾取。770设置文件中对 hooks 的直接编辑通常由文件监视程序自动拾取。

773 771 

774<h2 id="hook-input-and-output">772<h2 id="hook-input-and-output">

775 Hook 输入和输出773 Hook 输入和输出


1351 1349 

1352成功时,`--init-only` 不向终端打印任何内容。要确认 hooks 运行,请使用 `claude --debug-file <path> --init-only` 启动,将 `<path>` 替换为日志文件位置,并检查日志中的 Setup 和 SessionStart hook 条目。1350成功时,`--init-only` 不向终端打印任何内容。要确认 hooks 运行,请使用 `claude --debug-file <path> --init-only` 启动,将 `<path>` 替换为日志文件位置,并检查日志中的 Setup 和 SessionStart hook 条目。

1353 1351 

1354由于 Setup 不会在每次启动时触发,需要安装依赖的插件不能仅依赖 Setup。实际的模式是在首次使用时检查依赖,如果缺失则安装,例如测试 `${CLAUDE_PLUGIN_DATA}/node_modules` 的 hook 或 skill,如果不存在则运行 `npm install`。有关在何处存储已安装的依赖,请参阅 [持久数据目录](/docs/zh-CN/plugins-reference#persistent-data-directory)。如果您通过市场分发插件,您可能不需要此模式:Claude Code [在缓存插件时自动安装符合条件的 Node.js 包依赖](/docs/zh-CN/plugins-reference#node-js-package-dependencies)。1352由于 Setup 不会在每次启动时触发,需要安装依赖的插件不能仅依赖 Setup。实际的模式是在首次使用时检查依赖,如果缺失则安装,例如测试 `${CLAUDE_PLUGIN_DATA}/node_modules` 的 hook 或 skill,如果不存在则运行 `npm install`。有关在何处存储已安装的依赖,请参阅 [持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。如果您通过市场分发插件,您可能不需要此模式:Claude Code [在缓存插件时自动安装符合条件的 Node.js 包依赖](/docs/zh-CN/plugins/loading#node-js-package-dependencies)。

1355 1353 

1356<h4 id="setup-input">1354<h4 id="setup-input">

1357 Setup 输入1355 Setup 输入

hooks-guide.md +4 −4

Details

10 10 

11对于需要判断而不是确定性规则的决策,你也可以使用 [基于提示的 hooks](#prompt-based-hooks) 或 [基于代理的 hooks](#agent-based-hooks),它们使用 Claude 模型来评估条件。11对于需要判断而不是确定性规则的决策,你也可以使用 [基于提示的 hooks](#prompt-based-hooks) 或 [基于代理的 hooks](#agent-based-hooks),它们使用 Claude 模型来评估条件。

12 12 

13有关扩展 Claude Code 的其他方式,请参阅 [skills](/docs/zh-CN/skills) 用于为 Claude 提供额外的指令和可执行命令,[subagents](/docs/zh-CN/sub-agents) 用于在隔离的上下文中运行任务,以及 [plugins](/docs/zh-CN/plugins) 用于打包要在项目间共享的扩展。13有关扩展 Claude Code 的其他方式,请参阅 [skills](/docs/zh-CN/skills) 用于为 Claude 提供额外的指令和可执行命令,[subagents](/docs/zh-CN/sub-agents) 用于在隔离的上下文中运行任务,以及 [plugins](/docs/zh-CN/plugins/overview) 用于打包要在项目间共享的扩展。

14 14 

15<Tip>15<Tip>

16 本指南涵盖常见用例和入门方法。有关完整的事件架构、JSON 输入/输出格式和异步 hooks 和 MCP 工具 hooks 等高级功能,请参阅 [Hooks 参考](/docs/zh-CN/hooks)。16 本指南涵盖常见用例和入门方法。有关完整的事件架构、JSON 输入/输出格式和异步 hooks 和 MCP 工具 hooks 等高级功能,请参阅 [Hooks 参考](/docs/zh-CN/hooks)。


710}710}

711```711```

712 712 

713`"Edit|Write"` 匹配器仅在 Claude 使用 `Edit` 或 `Write` 工具时触发,而不是在它使用 `Bash`、`Read` 或任何其他工具时触发。在 Claude Code v2.1.191 或更高版本上,逗号以相同的方式分隔替代项,所以 `"Edit, Write"` 是等效的。请参阅 [匹配器模式](/docs/zh-CN/hooks#matcher-patterns) 了解纯名称和正则表达式如何被评估。713`"Edit|Write"` 匹配器仅在 Claude 使用 `Edit` 或 `Write` 工具时触发,而不是在它使用 `Bash`、`Read` 或任何其他工具时触发。逗号以相同的方式分隔替代项,所以 `"Edit, Write"` 是等效的。请参阅 [匹配器模式](/docs/zh-CN/hooks#matcher-patterns) 了解纯名称和正则表达式如何被评估。

714 714 

715<Note>715<Note>

716 Claude 也可以通过运行 shell 命令来创建或修改文件。如果你的 hook 必须看到每个文件更改(例如用于合规性扫描或审计日志),添加一个 [`Stop`](/docs/zh-CN/hooks#stop) hook,它每轮扫描一次工作树。为了获得每次调用的覆盖,也匹配 `Bash|PowerShell` 并让你的脚本使用 `git status --porcelain` 列出修改和未跟踪的文件。[PowerShell hook 输入部分](/docs/zh-CN/hooks#powershell) 解释了为什么仅匹配 `Bash` 是不够的。要在特定文件在磁盘上更改时运行 hook(无论是什么写入它),使用 [FileChanged](/docs/zh-CN/hooks#filechanged) hook。716 Claude 也可以通过运行 shell 命令来创建或修改文件。如果你的 hook 必须看到每个文件更改(例如用于合规性扫描或审计日志),添加一个 [`Stop`](/docs/zh-CN/hooks#stop) hook,它每轮扫描一次工作树。为了获得每次调用的覆盖,也匹配 `Bash|PowerShell` 并让你的脚本使用 `git status --porcelain` 列出修改和未跟踪的文件。[PowerShell hook 输入部分](/docs/zh-CN/hooks#powershell) 解释了为什么仅匹配 `Bash` 是不够的。要在特定文件在磁盘上更改时运行 hook(无论是什么写入它),使用 [FileChanged](/docs/zh-CN/hooks#filechanged) hook。


861你添加 hook 的位置决定了其范围:861你添加 hook 的位置决定了其范围:

862 862 

863| 位置 | 范围 | 可共享 |863| 位置 | 范围 | 可共享 |

864| :------------------------------------------ | :----------------------------------------------------------------------------------------- | :--------------------------------- |864| :--------------------------------------------------- | :----------------------------------------------------------------------------------------- | :--------------------------------- |

865| `~/.claude/settings.json` | 所有你的项目 | 否,本地到你的机器 |865| `~/.claude/settings.json` | 所有你的项目 | 否,本地到你的机器 |

866| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |866| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |

867| `.claude/settings.local.json` | 单个项目 | 否,gitignored 当 Claude Code 保存设置到它时 |867| `.claude/settings.local.json` | 单个项目 | 否,gitignored 当 Claude Code 保存设置到它时 |

868| 托管策略设置 | 组织范围 | 是,管理员控制 |868| 托管策略设置 | 组织范围 | 是,管理员控制 |

869| [Plugin](/docs/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |869| [Plugin](/docs/zh-CN/plugins/overview) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |

870| [Skill](/docs/zh-CN/skills) frontmatter | 调用 skill 后的会话的其余部分。请参阅 [Skills 和 agents 中的 Hooks](/docs/zh-CN/hooks#hooks-in-skills-and-agents) | 是,在 skill 文件中定义 |870| [Skill](/docs/zh-CN/skills) frontmatter | 调用 skill 后的会话的其余部分。请参阅 [Skills 和 agents 中的 Hooks](/docs/zh-CN/hooks#hooks-in-skills-and-agents) | 是,在 skill 文件中定义 |

871| [Subagent](/docs/zh-CN/sub-agents) frontmatter | 该 subagent 运行时 | 是,在 subagent 文件中定义 |871| [Subagent](/docs/zh-CN/sub-agents) frontmatter | 该 subagent 运行时 | 是,在 subagent 文件中定义 |

872 872 

Details

45内置工具通常分为五个类别,每个类别代表不同类型的代理能力。45内置工具通常分为五个类别,每个类别代表不同类型的代理能力。

46 46 

47| 类别 | Claude 可以做什么 |47| 类别 | Claude 可以做什么 |

48| -------- | ------------------------------------------------------------------------------ |48| -------- | --------------------------------------------------------------------- |

49| **文件操作** | 读取文件、编辑代码、创建新文件、重命名和重新组织 |49| **文件操作** | 读取文件、编辑代码、创建新文件、重命名和重新组织 |

50| **搜索** | 按模式查找文件、使用正则表达式搜索内容、探索代码库 |50| **搜索** | 按模式查找文件、使用正则表达式搜索内容、探索代码库 |

51| **执行** | 运行 shell 命令、启动服务器、运行测试、使用 git |51| **执行** | 运行 shell 命令、启动服务器、运行测试、使用 git |

52| **网络** | 搜索网络、获取文档、查找错误消息 |52| **网络** | 搜索网络、获取文档、查找错误消息 |

53| **代码智能** | 编辑后查看类型错误和警告、跳转到定义、查找引用(需要[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)) |53| **代码智能** | 编辑后查看类型错误和警告、跳转到定义、查找引用(需要[代码智能插件](/docs/zh-CN/plugins/code-intelligence)) |

54 54 

55这些是主要功能。Claude 还有用于生成 subagents、询问您问题和其他编排任务的工具。有关完整列表,请参阅[Claude 可用的工具](/docs/zh-CN/tools-reference)。55这些是主要功能。Claude 还有用于生成 subagents、询问您问题和其他编排任务的工具。有关完整列表,请参阅[Claude 可用的工具](/docs/zh-CN/tools-reference)。

56 56 

Details

21</h3>21</h3>

22 22 

23| 快捷键 | 描述 | 上下文 |23| 快捷键 | 描述 | 上下文 |

24| :------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |24| :------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

25| `Ctrl+C` | 中断或清除输入 | 中断正在运行的操作。如果没有任何操作在运行,第一次按下会清除提示输入,第二次按下会退出 Claude Code |25| `Ctrl+C` | 中断或清除输入 | 中断正在运行的操作。如果没有任何操作在运行,第一次按下会清除提示输入,第二次按下会退出 Claude Code |

26| `Ctrl+X Ctrl+K` | 停止此会话中所有正在运行的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),并关闭[工件自动回复](/docs/zh-CN/artifacts#let-claude-reply-to-comments-on-its-own)。在 3 秒内按两次以确认 | 子代理控制 |26| `Ctrl+X Ctrl+K` | 停止此会话中所有正在运行的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),并关闭[工件自动回复](/docs/zh-CN/artifacts#let-claude-reply-to-comments-on-its-own)。在 3 秒内按两次以确认 | 子代理控制 |

27| `Ctrl+D` | 退出 Claude Code 会话 | 第一次按下显示确认提示,第二次在 800ms 内按下会退出。当提示有文本时,`Ctrl+D` 会删除光标后的字符 |27| `Ctrl+D` | 退出 Claude Code 会话 | 第一次按下显示确认提示,第二次在 800ms 内按下会退出。当提示有文本时,`Ctrl+D` 会删除光标后的字符 |


32| `Ctrl+V` 或 `Cmd+V`(iTerm2)或 `Alt+V`(Windows 和 WSL) | 从剪贴板粘贴图像 | 在光标处插入 `[Image #N]` 芯片,以便您可以在提示中按位置引用它。在 WSL 上,`Ctrl+V` 和 `Alt+V` 都被绑定;如果您的终端拦截 `Ctrl+V`,请使用 `Alt+V` |32| `Ctrl+V` 或 `Cmd+V`(iTerm2)或 `Alt+V`(Windows 和 WSL) | 从剪贴板粘贴图像 | 在光标处插入 `[Image #N]` 芯片,以便您可以在提示中按位置引用它。在 WSL 上,`Ctrl+V` 和 `Alt+V` 都被绑定;如果您的终端拦截 `Ctrl+V`,请使用 `Alt+V` |

33| `Ctrl+B` | 后台运行任务 | 后台运行 Bash 命令和代理。Tmux 用户按两次 |33| `Ctrl+B` | 后台运行任务 | 后台运行 Bash 命令和代理。Tmux 用户按两次 |

34| `Ctrl+T` | 切换 Claude 的任务清单 | 在状态区域中显示或隐藏 [Claude 的待办事项清单](#task-list)。这不是后台任务视图;使用 [`/tasks`](/docs/zh-CN/commands) 查看运行的 shell 和子代理 |34| `Ctrl+T` | 切换 Claude 的任务清单 | 在状态区域中显示或隐藏 [Claude 的待办事项清单](#task-list)。这不是后台任务视图;使用 [`/tasks`](/docs/zh-CN/commands) 查看运行的 shell 和子代理 |

35| `Ctrl+S` | 隐藏或恢复提示 | 输入中有文本时,隐藏它并清除提示。在空提示上再次按下时,恢复隐藏的文本、光标位置和粘贴的内容 |35| `Ctrl+S` | 隐藏或恢复提示 | 输入中有文本时,隐藏它并清除提示。在空提示上再次按下时,恢复隐藏的文本、光标位置、粘贴的内容和输入模式,因此隐藏的 `!` [shell 命令](#shell-mode-with-prefix)会以 shell 模式返回 |

36| `Ctrl+Z` | 暂停 Claude Code | 仅限 Unix。将进程暂停到您的 shell;运行 `fg` 以恢复 |36| `Ctrl+Z` | 暂停 Claude Code | 仅限 Unix。将进程暂停到您的 shell;运行 `fg` 以恢复 |

37| `Left/Right arrows` | 在对话框选项卡之间循环 | 在权限对话框和菜单中的选项卡之间导航 |37| `Left/Right arrows` | 在对话框选项卡之间循环 | 在权限对话框和菜单中的选项卡之间导航 |

38| `Tab` | 接受自动完成建议,或向权限答案添加注释 | 当自动完成建议在提示输入中显示时,接受选定的建议。在大多数权限提示上,当**是**或**否**获得焦点时,在该选项上打开注释字段,再次按下会关闭该字段。请参阅[在回答权限提示时添加注释](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt) |38| `Tab` | 接受自动完成建议,或向权限答案添加注释 | 当自动完成建议在提示输入中显示时,接受选定的建议。在大多数权限提示上,当**是**或**否**获得焦点时,在该选项上打开注释字段,再次按下会关闭该字段。请参阅[在回答权限提示时添加注释](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt) |

39| `Up/Down arrows` 或 `Ctrl+P`/`Ctrl+N` | 移动光标或导航命令历史 | 当输入跨越多个可视行时,无论是换行还是多行,首先在提示中移动光标。一旦光标在第一行或最后一行,再次按下会导航命令历史。当您有排队的消息时,从第一行按 `Up` 会[取回它们](#take-back-what-you-queued) |39| `Up/Down arrows` 或 `Ctrl+P`/`Ctrl+N` | 移动光标或导航命令历史 | 当输入跨越多个可视行时,无论是换行还是多行,首先在提示中移动光标。一旦光标在第一行或最后一行,再次按下会导航命令历史。当您有排队的消息时,从第一行按 `Up` 会[取回它们](#take-back-what-you-queued) |

40| `Esc` | 中断 Claude 或关闭对话框 | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止所做的工作。如果您有[排队的消息](#queue-messages-while-claude-works),Claude Code 会在下一步发送它们。当对话框打开时,`Esc` 会关闭对话框。在权限提示上,`Esc` 会拒绝该操作,与[**否**不带注释](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt)相同 |40| `Esc` | 中断 Claude 或关闭对话框 | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止所做的工作。如果您有[排队的消息](#queue-messages-while-claude-works),Claude Code 会在下一步发送它们。当对话框打开时,`Esc` 会关闭对话框。在权限提示上,`Esc` 会拒绝该操作,与[**否**不带注释](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt)相同 |

41| `Esc` + `Esc` | 清除输入草稿或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](/docs/zh-CN/checkpointing)以从之前的某个点恢复或总结代码和对话 |41| `Esc` + `Esc` | 清除输入草稿或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](/docs/zh-CN/checkpointing)以从之前的某个点恢复或总结代码和对话 |

42| `Ctrl+Enter` 或 `Ctrl+X Ctrl+S` | 立即发送排队的消息 | 中断当前轮次,以便您的[排队的消息](#queue-messages-while-claude-works)和您的草稿与它们一起立即发出,而不是在轮次结束时发出。在[shell 模式](#shell-mode-with-prefix)中,该键会排队您的命令而不中断。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达;`Ctrl+X Ctrl+S` 在任何终端中都有效。需要 Claude Code v2.1.275 或更高版本 |42| `Ctrl+Enter` 或 `Ctrl+X Ctrl+S` | 立即发送排队的消息 | 发送您的[排队的消息](#queue-messages-while-claude-works)和您的草稿与它们一起立即发出。[Claude Code 何时发送您排队的内容](#when-claude-code-sends-what-you-queued)涵盖了 Claude 正在处理的轮次会发生什么。在[shell 模式](#shell-mode-with-prefix)中,该键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达;`Ctrl+X Ctrl+S` 在任何终端中都有效。需要 Claude Code v2.1.275 或更高版本 |

43| `Shift+Tab` 或在 Node 或 Bun 运行时不启用 VT 输入模式时在 Windows 上使用 `Alt+M` | 循环权限模式 | 循环通过 `default`(在模式指示器中标记为 Manual)、`acceptEdits`、`plan` 和(如果可用)`bypassPermissions` 然后 `auto`。从 `auto`,第一次按下切换到 `default`。请参阅[权限模式](/docs/zh-CN/permission-modes)。在文件权限提示上,相同的键会关闭打开的[注释字段](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt)。如果没有字段打开,它会选择允许该操作在会话其余部分的选项,当提示提供该选项时 |43| `Shift+Tab` 或在 Node 或 Bun 运行时不启用 VT 输入模式时在 Windows 上使用 `Alt+M` | 循环权限模式 | 循环通过 `default`(在模式指示器中标记为 Manual)、`acceptEdits`、`plan` 和(如果可用)`bypassPermissions` 然后 `auto`。从 `auto`,第一次按下切换到 `default`。请参阅[权限模式](/docs/zh-CN/permission-modes)。在文件权限提示上,相同的键会关闭打开的[注释字段](/docs/zh-CN/permissions#add-a-comment-when-you-answer-a-permission-prompt)。如果没有字段打开,它会选择允许该操作在会话其余部分的选项,当提示提供该选项时 |

44| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |44| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |

45| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。对 Opus 5.5 或 Fable 模型无效,它们始终使用扩展思考。在 macOS 上无需配置 Option 为 Meta 即可工作 |45| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。对 Opus 5.5 或 Fable 模型无效,它们始终使用扩展思考。在 macOS 上无需配置 Option 为 Meta 即可工作 |


136 命令136 命令

137</h2>137</h2>

138 138 

139在 Claude Code 中输入 `/` 可以查看可用的命令,或输入 `/` 后跟任何字母来筛选。`/` 菜单列出了内置命令、捆绑的和用户编写的 [skills](/docs/zh-CN/skills),以及由 [plugins](/docs/zh-CN/plugins) 和 [MCP servers](/docs/zh-CN/mcp#use-mcp-prompts-as-commands) 贡献的命令。并非所有内置命令对每个用户都可见,因为某些命令取决于您的平台或计划,而且 [少数可用命令在设计上从菜单中隐藏](/docs/zh-CN/commands#how-the-command-menu-matches-what-you-type),当您输入其全名时运行。139在 Claude Code 中输入 `/` 可以查看可用的命令,或输入 `/` 后跟任何字母来筛选。`/` 菜单列出了内置命令、捆绑的和用户编写的 [skills](/docs/zh-CN/skills),以及由 [plugins](/docs/zh-CN/plugins/overview) 和 [MCP servers](/docs/zh-CN/mcp#use-mcp-prompts-as-commands) 贡献的命令。并非所有内置命令对每个用户都可见,因为某些命令取决于您的平台或计划,而且 [少数可用命令在设计上从菜单中隐藏](/docs/zh-CN/commands#how-the-command-menu-matches-what-you-type),当您输入其全名时运行。

140 140 

141在 [fullscreen rendering](/docs/zh-CN/fullscreen#use-the-mouse) 中,`/` 命令和 `@` 文件建议列表也响应鼠标:悬停突出显示一行,点击接受它。141在 [fullscreen rendering](/docs/zh-CN/fullscreen#use-the-mouse) 中,`/` 命令和 `@` 文件建议列表也响应鼠标:悬停突出显示一行,点击接受它。

142 142 


408* 消息:如果您在 Claude 运行工具调用时排队消息,Claude Code 会在这些工具调用完成后立即将其传递给 Claude,在同一轮次内。当轮次以仍有排队消息结束时,它们会在没有另一次按键的情况下按您输入的顺序发出408* 消息:如果您在 Claude 运行工具调用时排队消息,Claude Code 会在这些工具调用完成后立即将其传递给 Claude,在同一轮次内。当轮次以仍有排队消息结束时,它们会在没有另一次按键的情况下按您输入的顺序发出

409* 命令和 shell 命令:Claude Code 将其保留到轮次结束,然后逐个运行它们,保持您排队的顺序409* 命令和 shell 命令:Claude Code 将其保留到轮次结束,然后逐个运行它们,保持您排队的顺序

410 410 

411要在不等待轮次完成的情况下发送您排队的内容,请按 `Ctrl+Enter`。Claude Code 会中断轮次,您排队的消息会立即发出,如果您输入了草稿,您的草稿会排在它们后面。在 [shell 模式](#shell-mode-with-prefix)中,该快捷键会排队您的命令而不中断轮次。需要 Claude Code v2.1.275 或更高版本。411要在不等待的情况下发送您排队的内容,请按 `Ctrl+Enter`。您排队的消息会立即发出,如果您输入了草稿,您的草稿会排在它们后面。需要 Claude Code v2.1.275 或更高版本。

412 412 

413在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达并排队草稿;`Ctrl+X Ctrl+S` 在任何终端中都有效。两个快捷键都是 [`chat:sendNow` 操作](/docs/zh-CN/keybindings#chat-actions)的绑定。413如果您在消息前排队了 `!` shell 命令,该快捷键会中断轮次。否则,轮次发生的情况取决于按下快捷键时 Claude 正在做什么:

414 

415* 运行 shell 命令、子代理或其他可以移到[后台](#background-bash-commands)的工作:该工作移到后台并继续运行,Claude 在同一轮次中读取您的消息

416* 仅写入响应,或运行无法移到后台的内容:Claude Code 中断轮次并接下来发送您的消息。在 v2.1.281 之前,该快捷键在两种情况下都中断轮次

417 

418在 [shell 模式](#shell-mode-with-prefix)中,该快捷键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达并排队草稿;`Ctrl+X Ctrl+S` 在任何终端中都有效。两个快捷键都是 [`chat:sendNow` 操作](/docs/zh-CN/keybindings#chat-actions)的绑定。

414 419 

415按 `Esc` 中断轮次而不提交您的草稿。Claude Code 保留您排队的内容并立即发送。420按 `Esc` 中断轮次而不提交您的草稿。Claude Code 保留您排队的内容并立即发送。

416 421 

keybindings.md +18 −2

Details

112在 `Chat` 上下文中可用的操作:112在 `Chat` 上下文中可用的操作:

113 113 

114| 操作 | 默认 | 描述 |114| 操作 | 默认 | 描述 |

115| :-------------------- | :------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |115| :-------------------- | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

116| `chat:cancel` | Escape | 取消当前输入 |116| `chat:cancel` | Escape | 取消当前输入 |

117| `chat:clearInput` | Ctrl+L | 强制全屏重绘,保留输入和对话 |117| `chat:clearInput` | Ctrl+L | 强制全屏重绘,保留输入和对话 |

118| `chat:clearScreen` | Cmd+K | 与 `chat:clearInput` 相同。请参阅 [清除对话](/docs/zh-CN/fullscreen#clear-the-conversation) 了解 Cmd+K 在 iTerm2 和 Terminal.app 上的行为 |118| `chat:clearScreen` | Cmd+K | 与 `chat:clearInput` 相同。请参阅 [清除对话](/docs/zh-CN/fullscreen#clear-the-conversation) 了解 Cmd+K 在 iTerm2 和 Terminal.app 上的行为 |


123| `chat:thinkingToggle` | Meta+T | 切换扩展思考 |123| `chat:thinkingToggle` | Meta+T | 切换扩展思考 |

124| `chat:submit` | Enter | 提交消息 |124| `chat:submit` | Enter | 提交消息 |

125| `chat:queueSubmit` | Ctrl+X Enter | 提交消息,标记为等待其轮次:当 Claude 工作时,Claude Code [将其排队](/docs/zh-CN/interactive-mode#queue-messages-while-claude-works),永远不会中断轮次。与 `chat:submit` 不同,即使自动完成建议被突出显示,它也会提交草稿。需要 v2.1.247 或更高版本 |125| `chat:queueSubmit` | Ctrl+X Enter | 提交消息,标记为等待其轮次:当 Claude 工作时,Claude Code [将其排队](/docs/zh-CN/interactive-mode#queue-messages-while-claude-works),永远不会中断轮次。与 `chat:submit` 不同,即使自动完成建议被突出显示,它也会提交草稿。需要 v2.1.247 或更高版本 |

126| `chat:sendNow` | Ctrl+Enter, Ctrl+X Ctrl+S | 中断运行的轮次,以便您的 [排队消息](/docs/zh-CN/interactive-mode#queue-messages-while-claude-works) 和您的草稿与它们一起立即发出。当没有任何内容运行时,它提交草稿,在 [shell 模式](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 中,它在不中断的情况下排队命令。不报告扩展键的终端将 `Ctrl+Enter` 传递为纯 `Enter`,因此 `Ctrl+X Ctrl+S` 是在任何终端中都有效的绑定。需要 v2.1.275 或更高版本 |126| `chat:sendNow` | Ctrl+Enter, Ctrl+X Ctrl+S | 发送您的 [排队消息](/docs/zh-CN/interactive-mode#queue-messages-while-claude-works) 和您的草稿,立即一起发出。[Claude Code 发送您排队的内容](/docs/zh-CN/interactive-mode#when-claude-code-sends-what-you-queued) 涵盖了 Claude 正在处理的轮次会发生什么。当没有任何内容运行时,该键提交草稿,在 [shell 模式](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 中,它仅排队命令。不报告扩展键的终端将 `Ctrl+Enter` 传递为纯 `Enter`,因此 `Ctrl+X Ctrl+S` 是在任何终端中都有效的绑定。需要 v2.1.275 或更高版本 |

127| `chat:newline` | Ctrl+J | 插入换行符而不提交 |127| `chat:newline` | Ctrl+J | 插入换行符而不提交 |

128| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | 撤销上一个操作 |128| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | 撤销上一个操作 |

129| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | 在外部编辑器中打开。[agent 视图调度输入](/docs/zh-CN/agent-view#keyboard-shortcuts) 也遵循此操作的单键击绑定 |129| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | 在外部编辑器中打开。[agent 视图调度输入](/docs/zh-CN/agent-view#keyboard-shortcuts) 也遵循此操作的单键击绑定 |


184}184}

185```185```

186 186 

187使用这些绑定,当 [文本字段](#text-fields) 有焦点时,`y` 和 `n` 仍然作为字母输入。

188 

187在 v2.1.280 之前,`y` 也默认绑定到 `confirm:yes`,`n` 绑定到 `confirm:no`。如果您在 v2.1.280 之前使用 `/keybindings` 创建了 `keybindings.json`,该文件会列出两个绑定,它们会保持有效,直到您删除这两行。189在 v2.1.280 之前,`y` 也默认绑定到 `confirm:yes`,`n` 绑定到 `confirm:no`。如果您在 v2.1.280 之前使用 `/keybindings` 创建了 `keybindings.json`,该文件会列出两个绑定,它们会保持有效,直到您删除这两行。

188 190 

189<h3 id="permission-actions">191<h3 id="permission-actions">


634| Ctrl+A | GNU screen 前缀 |636| Ctrl+A | GNU screen 前缀 |

635| Ctrl+Z | Unix 进程暂停(SIGTSTP) |637| Ctrl+Z | Unix 进程暂停(SIGTSTP) |

636 638 

639<h2 id="text-fields">

640 文本字段

641</h2>

642 

643如果你绑定一个裸字母、数字或空格,你仍然可以在对话框或面板内的文本字段中输入该字符。其中一个字段是 Claude 提出问题的 `Other` 答案。当该字段获得焦点时,你按下的不带 Ctrl、Alt 或 Cmd 的可打印键会进入该字段,Claude Code 不会根据你的绑定来匹配它。

644 

645这些键在字段获得焦点时仍然会运行其绑定:

646 

647* 不输入字符的键,例如 Enter、Escape、Tab 和箭头键

648* 任何与 Ctrl、Alt 或 Cmd 一起按下的键

649* 已在进行中的[和弦](#chords)的第二个按键

650 

651在主提示符处,Claude Code 根据活跃的上下文(例如 `Chat`)匹配每个键,仅当没有绑定接受该键时才输入该键。

652 

637<h2 id="vim-mode-interaction">653<h2 id="vim-mode-interaction">

638 Vim 模式交互654 Vim 模式交互

639</h2>655</h2>

Details

202 使用代码智能减少文件读取202 使用代码智能减少文件读取

203</h3>203</h3>

204 204 

205在大型代码库中,查找符号的定义或使用位置可能需要许多文件读取和 grep 调用。[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)将 Claude 连接到语言服务器,以便它可以跳转到定义、查找引用和直接显示类型错误,而不是扫描树。205在大型代码库中,查找符号的定义或使用位置可能需要许多文件读取和 grep 调用。[代码智能插件](/docs/zh-CN/plugins/code-intelligence)将 Claude 连接到语言服务器,以便它可以跳转到定义、查找引用和直接显示类型错误,而不是扫描树。

206 206 

207官方市场有 TypeScript、Python、Go、Rust 和其他常见语言的插件。在 Claude Code 会话内运行下面的命令来安装 TypeScript 插件:207官方市场有 TypeScript、Python、Go、Rust 和其他常见语言的插件。在 Claude Code 会话内运行下面的命令来安装 TypeScript 插件:

208 208 


213如果安装失败,请匹配 Claude Code 报告的消息:213如果安装失败,请匹配 Claude Code 报告的消息:

214 214 

215* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。215* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

216* 插件[在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。216* 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

217 217 

218要为存储库中的每个人启用插件而不是自己安装,请将其添加到 [`enabledPlugins` 项目设置](/docs/zh-CN/settings-reference#plugin-settings)。218要为存储库中的每个人启用插件而不是自己安装,请将其添加到 [`enabledPlugins` 项目设置](/docs/zh-CN/settings-reference#plugin-settings)。

219 219 

220代码智能插件需要每个开发者机器上的语言的语言服务器二进制文件。查看[每种语言需要哪个二进制文件](/docs/zh-CN/discover-plugins#code-intelligence)。从官方市场安装需要网络访问 GitHub,市场在那里托管。在受限网络上,[从内部 Git 主机或本地路径添加市场](/docs/zh-CN/discover-plugins#add-from-other-git-hosts)。220代码智能插件需要每个开发者机器上的语言的语言服务器二进制文件。查看[每种语言需要哪个二进制文件](/docs/zh-CN/plugins/code-intelligence)。从官方市场安装需要网络访问 GitHub,市场在那里托管。在受限网络上,[从内部 Git 主机或本地路径添加市场](/docs/zh-CN/plugins/install#add-a-marketplace)。

221 221 

222这与上面的 `claudeMdExcludes` 和 `Read` 拒绝规则配对良好。那些保持不相关的内容不进入上下文,代码智能保持 Claude 不读取剩余的内容来定位定义。222这与上面的 `claudeMdExcludes` 和 `Read` 拒绝规则配对良好。那些保持不相关的内容不进入上下文,代码智能保持 Claude 不读取剩余的内容来定位定义。

223 223 


395 395 

396名称始终加载,但[当有许多时,某些 skills 会完全失去其描述](/docs/zh-CN/skills#skill-descriptions-are-cut-short),这可能会剥离 Claude 用来决定 skill 是否适用的关键字。保持描述简短并以请求会包含的词开头,例如"在 `packages/api/` 中编写或修改测试"。396名称始终加载,但[当有许多时,某些 skills 会完全失去其描述](/docs/zh-CN/skills#skill-descriptions-are-cut-short),这可能会剥离 Claude 用来决定 skill 是否适用的关键字。保持描述简短并以请求会包含的词开头,例如"在 `packages/api/` 中编写或修改测试"。

397 397 

398对于许多目录共享的 skills,例如 PR 约定或部署检查清单,将它们放在存储库根目录的 `.claude/skills/` 中,以便从任何启动目录加载。当共享 skills 需要自己的版本历史或必须跨存储库工作时,改为将它们打包为[插件](/docs/zh-CN/plugins)。插件 skills 使用 `plugin-name:skill-name` 命名空间,所以它们永远不会与按目录的 skills 冲突。平台团队可以在一个地方对它们进行版本化和更新。398对于许多目录共享的 skills,例如 PR 约定或部署检查清单,将它们放在存储库根目录的 `.claude/skills/` 中,以便从任何启动目录加载。当共享 skills 需要自己的版本历史或必须跨存储库工作时,改为将它们打包为[插件](/docs/zh-CN/plugins/overview)。插件 skills 使用 `plugin-name:skill-name` 命名空间,所以它们永远不会与按目录的 skills 冲突。平台团队可以在一个地方对它们进行版本化和更新。

399 399 

400要查找哪些 skills 未被使用,启用 OpenTelemetry [日志导出器](/docs/zh-CN/monitoring-usage)并设置 `OTEL_LOG_TOOL_DETAILS=1` 以便 skill 名称被逐字记录而不是被编辑。[`skill_activated` 事件](/docs/zh-CN/monitoring-usage#skill-activated-event)在其 `skill.name` 属性中记录每个调用,`invocation_trigger` 记录命令、Claude 或嵌套 skill 是否调用它,这告诉你要合并或停用什么。400要查找哪些 skills 未被使用,启用 OpenTelemetry [日志导出器](/docs/zh-CN/monitoring-usage)并设置 `OTEL_LOG_TOOL_DETAILS=1` 以便 skill 名称被逐字记录而不是被编辑。[`skill_activated` 事件](/docs/zh-CN/monitoring-usage#skill-activated-event)在其 `skill.name` 属性中记录每个调用,`invocation_trigger` 记录命令、Claude 或嵌套 skill 是否调用它,这告诉你要合并或停用什么。

401 401 


408将约定和参考内容从始终加载的 CLAUDE.md 移出到按需加载的机制中:408将约定和参考内容从始终加载的 CLAUDE.md 移出到按需加载的机制中:

409 409 

410* [Skills](/docs/zh-CN/skills):Claude 仅在与任务相关时加载的参考材料410* [Skills](/docs/zh-CN/skills):Claude 仅在与任务相关时加载的参考材料

411* [Plugins](/docs/zh-CN/plugins):平台团队集中拥有的 skills、hooks 和命令的版本化包411* [Plugins](/docs/zh-CN/plugins/overview):平台团队集中拥有的 skills、hooks 和命令的版本化包

412* [MCP servers](/docs/zh-CN/mcp):如果你的组织已经在存储库上运行代码搜索或 RAG 索引,将其公开为 MCP 工具,以便 Claude 查询它而不是直接读取文件412* [MCP servers](/docs/zh-CN/mcp):如果你的组织已经在存储库上运行代码搜索或 RAG 索引,将其公开为 MCP 工具,以便 Claude 查询它而不是直接读取文件

413 413 

414有关平台团队如何集中强制这些的信息,请参阅[服务器管理或端点管理的设置](/docs/zh-CN/server-managed-settings#choose-between-server-managed-and-endpoint-managed-settings)。414有关平台团队如何集中强制这些的信息,请参阅[服务器管理或端点管理的设置](/docs/zh-CN/server-managed-settings#choose-between-server-managed-and-endpoint-managed-settings)。

managed-mcp.md +1 −1

Details

41| **无限制** | 用户添加任何内容 | 不部署任何托管 MCP 配置 |41| **无限制** | 用户添加任何内容 | 不部署任何托管 MCP 配置 |

42 42 

43<Note>43<Note>

44 Claude Code 没有内置的 MCP 服务器注册表供用户浏览和安装。对于批准的目录模式,在用户会找到的地方(例如内部 wiki)共享批准的列表及其 `claude mcp add` 命令,或通过[托管插件市场](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)将服务器作为插件分发,以便用户可以从 `/plugin` 浏览和安装它们。44 Claude Code 没有内置的 MCP 服务器注册表供用户浏览和安装。对于批准的目录模式,在用户会找到的地方(例如内部 wiki)共享批准的列表及其 `claude mcp add` 命令,或通过[托管插件市场](/docs/zh-CN/plugins/org#restrict-what-users-can-install)将服务器作为插件分发,以便用户可以从 `/plugin` 浏览和安装它们。

45</Note>45</Note>

46 46 

47<h2 id="exclusive-control-with-managed-mcp-json">47<h2 id="exclusive-control-with-managed-mcp-json">

Details

95 * **在完整 VM 沙箱中**:当您的 Claude Desktop 托管配置设置 [`requireCoworkFullVmSandbox`](https://claude.com/docs/third-party/claude-desktop/configuration#requirecoworkfullvmsandbox) 时,Claude Code 在虚拟机内运行,其中设备的 MDM 策略和托管设置文件不存在。95 * **在完整 VM 沙箱中**:当您的 Claude Desktop 托管配置设置 [`requireCoworkFullVmSandbox`](https://claude.com/docs/third-party/claude-desktop/configuration#requirecoworkfullvmsandbox) 时,Claude Code 在虚拟机内运行,其中设备的 MDM 策略和托管设置文件不存在。

96 * **远程协作会话**:这些在 Anthropic 托管的虚拟机上运行,其中 Claude Code 没有设备策略可读。96 * **远程协作会话**:这些在 Anthropic 托管的虚拟机上运行,其中 Claude Code 没有设备策略可读。

97 97 

98 无论会话在何处运行,claude.ai 在任何人从 claude.ai 上的 git 存储库或从协作选项卡中的**自定义**添加市场时,都会自行应用管理控制台的 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) 列表。[限制如何工作](/docs/zh-CN/plugin-marketplaces#how-restrictions-work)描述了该检查。[表面覆盖](/docs/zh-CN/model-config#surface-coverage)表比较了协作与其他表面。98 无论会话在何处运行,claude.ai 在任何人从 claude.ai 上的 git 存储库或从协作选项卡中的**自定义**添加市场时,都会自行应用管理控制台的 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) 列表。[限制如何工作](/docs/zh-CN/plugins/org#restrict-what-users-can-install)描述了该检查。[表面覆盖](/docs/zh-CN/model-config#surface-coverage)表比较了协作与其他表面。

99* **运行会话**:大多数更改在[交付机制表](#choose-a-delivery-mechanism)中的计划上到达运行会话,无需重启。99* **运行会话**:大多数更改在[交付机制表](#choose-a-delivery-mechanism)中的计划上到达运行会话,无需重启。

100 * 对 [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)、[`requiredMinimumVersion`](/docs/zh-CN/settings-reference#requiredminimumversion) 和[某些用户可编辑密钥](/docs/zh-CN/settings#when-edits-take-effect)的更改在下一个会话启动时生效。100 * 对 [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)、[`requiredMinimumVersion`](/docs/zh-CN/settings-reference#requiredminimumversion) 和[某些用户可编辑密钥](/docs/zh-CN/settings#when-edits-take-effect)的更改在下一个会话启动时生效。

101 * 新的或更改的 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 条目在下一次启动时生效。如果服务器托管设置在该启动时遮蔽了助手,助手会在获取报告这些设置被删除时立即运行。101 * 新的或更改的 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 条目在下一次启动时生效。如果服务器托管设置在该启动时遮蔽了助手,助手会在获取报告这些设置被删除时立即运行。


256 256 

257 在 Claude Code v2.1.273 或更高版本上,当 `allowManagedMcpServersOnly` 打开时,来自设置一个的最高排名管理员源的 `allowedMcpServers` 列表应用并阻止父的,作为 [跨源键](#keys-read-from-every-admin-source)。父的列表仅在没有管理员源设置一个时应用。[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 条目说明在 `"merge"` 下哪个源提供每个键。在 v2.1.223 之前,任何管理员源中的值都会阻止父的值257 在 Claude Code v2.1.273 或更高版本上,当 `allowManagedMcpServersOnly` 打开时,来自设置一个的最高排名管理员源的 `allowedMcpServers` 列表应用并阻止父的,作为 [跨源键](#keys-read-from-every-admin-source)。父的列表仅在没有管理员源设置一个时应用。[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 条目说明在 `"merge"` 下哪个源提供每个键。在 v2.1.223 之前,任何管理员源中的值都会阻止父的值

258* 对于 `availableModels`,Claude Code 强制执行它应用的托管设置中的值并阻止父提供的列表258* 对于 `availableModels`,Claude Code 强制执行它应用的托管设置中的值并阻止父提供的列表

259* 对于 `strictKnownMarketplaces`,Claude Code 同样强制执行它应用的托管设置中的列表并阻止父提供的列表。父的列表仅在没有应用的托管源设置一个时应用。需要 Claude Code v2.1.282 或更高版本

260* 父提供的 `blockedMarketplaces` 除了托管源设置的任何阻止列表外还适用。需要 Claude Code v2.1.282 或更高版本

259 261 

260<h4 id="keep-cowork-folder-access-when-only-managed-rules-apply">262<h4 id="keep-cowork-folder-access-when-only-managed-rules-apply">

261 当仅应用托管规则时保持 Cowork 文件夹访问263 当仅应用托管规则时保持 Cowork 文件夹访问


366| `allowedHttpHookUrls` | Claude Code 强制执行空的[允许列表](/docs/zh-CN/settings-reference#allowedhttphookurls),直到您修复该值,因此 HTTP hook 仅在另一个设置文件列出其 URL 时运行。如果只有单个条目无效,Claude Code 会剥离该条目并强制执行其余的。 |368| `allowedHttpHookUrls` | Claude Code 强制执行空的[允许列表](/docs/zh-CN/settings-reference#allowedhttphookurls),直到您修复该值,因此 HTTP hook 仅在另一个设置文件列出其 URL 时运行。如果只有单个条目无效,Claude Code 会剥离该条目并强制执行其余的。 |

367| `httpHookAllowedEnvVars` | Claude Code 强制执行空的[允许列表](/docs/zh-CN/settings-reference#httphookallowedenvvars),直到您修复该值,因此仅当另一个设置文件命名标头变量时才会插值。如果只有单个条目无效,Claude Code 会剥离该条目并强制执行其余的。 |369| `httpHookAllowedEnvVars` | Claude Code 强制执行空的[允许列表](/docs/zh-CN/settings-reference#httphookallowedenvvars),直到您修复该值,因此仅当另一个设置文件命名标头变量时才会插值。如果只有单个条目无效,Claude Code 会剥离该条目并强制执行其余的。 |

368| `allowedChannelPlugins` | Claude Code 强制执行空的允许列表,直到您修复该值,因此传递给 `--channels` 的任何通道插件都不被允许。如果只有单个条目无效,它会剥离该条目并强制执行其余的。 |370| `allowedChannelPlugins` | Claude Code 强制执行空的允许列表,直到您修复该值,因此传递给 `--channels` 的任何通道插件都不被允许。如果只有单个条目无效,它会剥离该条目并强制执行其余的。 |

369| `strictKnownMarketplaces` | 强制执行为空的允许列表,直到修复该值,因此不允许任何[市场源](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)。无效或无法强制执行的单个条目(例如无法编译的 `hostPattern` 正则表达式)被剥离,有效子集被强制执行。 |371| `strictKnownMarketplaces` | 强制执行为空的允许列表,直到修复该值,因此不允许任何[市场源](/docs/zh-CN/plugins/org#restrict-what-users-can-install)。无效或无法强制执行的单个条目(例如无法编译的 `hostPattern` 正则表达式)被剥离,有效子集被强制执行。 |

370| `allowManagedHooksOnly` | 视为 `true`,直到修复:[hook 限制](/docs/zh-CN/settings-reference#allowmanagedhooksonly)适用,除非 `disableCommandPluginSources` 明确为 `false`,否则命令源插件被禁用。 |372| `allowManagedHooksOnly` | 视为 `true`,直到修复:[hook 限制](/docs/zh-CN/settings-reference#allowmanagedhooksonly)适用,除非 `disableCommandPluginSources` 明确为 `false`,否则命令源插件被禁用。 |

371| `allowManagedMcpServersOnly` | 视为 `true`。 |373| `allowManagedMcpServersOnly` | 视为 `true`。 |

372| `disableCommandPluginSources` | 视为 `true`,因此命令源插件保持禁用,直到修复该值。 |374| `disableCommandPluginSources` | 视为 `true`,因此命令源插件保持禁用,直到修复该值。 |


378| `gatewayInternalNetworks` | 当无效值来自机器上最高的托管源时,`/login` 拒绝该机器上的每个新[云网关](/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own)登录,直到修复该值。 |380| `gatewayInternalNetworks` | 当无效值来自机器上最高的托管源时,`/login` 拒绝该机器上的每个新[云网关](/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own)登录,直到修复该值。 |

379| `crossSessionInbound` | 视为 `refuse`,最严格的值,因此入站[跨会话消息](/docs/zh-CN/cross-session-messaging#control-inbound-messages)被拒绝,直到修复该值。开发人员看到[警告](/docs/zh-CN/errors#crosssessioninbound-must-be-one-of-accept-hold-refuse)。 |381| `crossSessionInbound` | 视为 `refuse`,最严格的值,因此入站[跨会话消息](/docs/zh-CN/cross-session-messaging#control-inbound-messages)被拒绝,直到修复该值。开发人员看到[警告](/docs/zh-CN/errors#crosssessioninbound-must-be-one-of-accept-hold-refuse)。 |

380| `deniedMcpServers` | 单个无效条目被剥离,有效子集被强制执行。完全无效的值被丢弃并带有警告,因为拒绝每个服务器会阻止策略从未命名的服务器。 |382| `deniedMcpServers` | 单个无效条目被剥离,有效子集被强制执行。完全无效的值被丢弃并带有警告,因为拒绝每个服务器会阻止策略从未命名的服务器。 |

381| `blockedMarketplaces` | 单个无效条目被剥离,有效子集被强制执行。解析但永远无法匹配的条目(例如无法编译的 `hostPattern` 正则表达式)被保留并带有警告。在修复之前它不会阻止任何内容,但[市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)保持活跃。完全无效的值被丢弃并带有警告,因为阻止每个市场会阻止策略从未命名的源。 |383| `blockedMarketplaces` | 单个无效条目被剥离,有效子集被强制执行。解析但永远无法匹配的条目(例如无法编译的 `hostPattern` 正则表达式)被保留并带有警告。在修复之前它不会阻止任何内容,但[市场限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install)保持活跃。完全无效的值被丢弃并带有警告,因为阻止每个市场会阻止策略从未命名的源。 |

382| `sandbox.credentials` | 可恢复的无效条目降级为 `mode: "deny"` 并带有警告;不可恢复的条目被剥离;有效条目保持强制执行。请参阅[托管设置中的无效凭据条目](/docs/zh-CN/settings-reference#invalid-credential-entries-in-managed-settings) |384| `sandbox.credentials` | 可恢复的无效条目降级为 `mode: "deny"` 并带有警告;不可恢复的条目被剥离;有效条目保持强制执行。请参阅[托管设置中的无效凭据条目](/docs/zh-CN/settings-reference#invalid-credential-entries-in-managed-settings) |

383 385 

384`allowedHttpHookUrls` 和 `httpHookAllowedEnvVars` 跨设置文件合并,因此您的用户、项目或本地设置中的条目在托管列表为空时仍然适用。386`allowedHttpHookUrls` 和 `httpHookAllowedEnvVars` 跨设置文件合并,因此您的用户、项目或本地设置中的条目在托管列表为空时仍然适用。


402表涵盖权限、插件和交付控制。对于此处未列出的任何密钥,[设置参考](/docs/zh-CN/settings-reference#all-settings)索引的 Scope 列说明它是否仅托管;那里的剩余仅托管密钥包括网关登录 URL、版本、浏览器、移动模拟器、SSH 主机、Desktop 本地会话、沙箱二进制路径、模型定价和 CLAUDE.md 控制。404表涵盖权限、插件和交付控制。对于此处未列出的任何密钥,[设置参考](/docs/zh-CN/settings-reference#all-settings)索引的 Scope 列说明它是否仅托管;那里的剩余仅托管密钥包括网关登录 URL、版本、浏览器、移动模拟器、SSH 主机、Desktop 本地会话、沙箱二进制路径、模型定价和 CLAUDE.md 控制。

403 405 

404| 设置 | 描述 |406| 设置 | 描述 |

405| :----------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |407| :----------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

406| [`allowAllClaudeAiMcps`](/docs/zh-CN/settings-reference#allowallclaudeaimcps) | 加载 Claude Code 自己获取的 claude.ai 连接器,与部署的 `managed-mcp.json` 一起,而不是抑制它们 |408| [`allowAllClaudeAiMcps`](/docs/zh-CN/settings-reference#allowallclaudeaimcps) | 加载 Claude Code 自己获取的 claude.ai 连接器,与部署的 `managed-mcp.json` 一起,而不是抑制它们 |

407| [`allowedChannelPlugins`](/docs/zh-CN/settings-reference#allowedchannelplugins) | 可能推送消息的通道插件的允许列表。设置时替换默认 Anthropic 允许列表。需要 `channelsEnabled: true`。请参阅[限制哪些通道插件可以运行](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run) |409| [`allowedChannelPlugins`](/docs/zh-CN/settings-reference#allowedchannelplugins) | 可能推送消息的通道插件的允许列表。设置时替换默认 Anthropic 允许列表。需要 `channelsEnabled: true`。请参阅[限制哪些通道插件可以运行](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run) |

408| [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) | 当 `true` 时,限制哪些 hooks 运行;请参阅[在 `allowManagedHooksOnly` 下运行什么](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)以获取完整效果列表 |410| [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) | 当 `true` 时,限制哪些 hooks 运行;请参阅[在 `allowManagedHooksOnly` 下运行什么](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)以获取完整效果列表 |

409| [`allowManagedMcpServersOnly`](/docs/zh-CN/settings-reference#allowmanagedmcpserversonly) | 当 `true` 时,仅尊重来自托管设置的 `allowedMcpServers`。`deniedMcpServers` 仍然从所有源合并。请参阅[从每个管理源读取的密钥](#keys-read-from-every-admin-source)以了解哪些托管源可以设置它,以及[托管 MCP 配置](/docs/zh-CN/managed-mcp) |411| [`allowManagedMcpServersOnly`](/docs/zh-CN/settings-reference#allowmanagedmcpserversonly) | 当 `true` 时,仅尊重来自托管设置的 `allowedMcpServers`。`deniedMcpServers` 仍然从所有源合并。请参阅[从每个管理源读取的密钥](#keys-read-from-every-admin-source)以了解哪些托管源可以设置它,以及[托管 MCP 配置](/docs/zh-CN/managed-mcp) |

410| [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) | 使托管设置成为权限规则的唯一设置源。条目列出它忽略的每个源 |412| [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) | 使托管设置成为权限规则的唯一设置源。条目列出它忽略的每个源 |

411| [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) | 市场源的阻止列表。被阻止的源在下载前被检查,因此它们永远不会接触文件系统。请参阅[托管市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) |413| [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) | 市场源的阻止列表。被阻止的源在下载前被检查,因此它们永远不会接触文件系统。请参阅[托管市场限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install) |

412| [`channelsEnabled`](/docs/zh-CN/settings-reference#channelsenabled) | 允许组织的[通道](/docs/zh-CN/channels)。请参阅[企业控制](/docs/zh-CN/channels#enterprise-controls)以获取每个计划上的默认值 |414| [`channelsEnabled`](/docs/zh-CN/settings-reference#channelsenabled) | 允许组织的[通道](/docs/zh-CN/channels)。请参阅[企业控制](/docs/zh-CN/channels#enterprise-controls)以获取每个计划上的默认值 |

413| [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) | 当 `true` 时,完全阻止[`command` 插件源](/docs/zh-CN/plugin-marketplaces#command-sources),因此市场声明的命令永远不会运行。也阻止市场[`headersHelper` 命令](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads),除了托管设置本身声明的市场。未设置时,遵循 `allowManagedHooksOnly`。需要 Claude Code v2.1.229 或更高版本,`headersHelper` 块需要 v2.1.238 或更高版本 |415| [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) | 当 `true` 时,完全阻止[`command` 插件源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source),因此市场声明的命令永远不会运行。也阻止市场[`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除了托管设置本身声明的市场。未设置时,遵循 `allowManagedHooksOnly`。需要 Claude Code v2.1.229 或更高版本,`headersHelper` 块需要 v2.1.238 或更高版本 |

414| [`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags) | 在启动时拒绝 `--plugin-dir`、`--plugin-url`、`--agents` 和 `--mcp-config` 标志。在云会话中,Claude Code 删除服务器通过 `--mcp-config` 交付的 MCP 服务器,除了进程内 `type: "sdk"` 条目,并启动会话。需要 Claude Code v2.1.193 或更高版本 |416| [`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags) | 在启动时拒绝 `--plugin-dir`、`--plugin-url`、`--agents` 和 `--mcp-config` 标志。在云会话中,Claude Code 删除服务器通过 `--mcp-config` 交付的 MCP 服务器,除了进程内 `type: "sdk"` 条目,并启动会话。需要 Claude Code v2.1.193 或更高版本 |

415| [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh) | 当 `true` 时,阻止 CLI 启动,直到远程托管设置被新鲜获取,如果获取失败则退出。请参阅[失败关闭强制执行](/docs/zh-CN/server-managed-settings#enforce-fail-closed-startup) |417| [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh) | 当 `true` 时,阻止 CLI 启动,直到远程托管设置被新鲜获取,如果获取失败则退出。请参阅[失败关闭强制执行](/docs/zh-CN/server-managed-settings#enforce-fail-closed-startup) |

416| [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) | 提供给每个用户的远程 MCP 服务器,与他们自己的一起。它提供服务器而不是锁定任何东西。请参阅[通过托管设置提供服务器](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)。需要 Claude Code v2.1.259 或更高版本 |418| [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) | 提供给每个用户的远程 MCP 服务器,与他们自己的一起。它提供服务器而不是锁定任何东西。请参阅[通过托管设置提供服务器](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings)。需要 Claude Code v2.1.259 或更高版本 |


421| [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) | 在启动时计算托管设置的可执行文件;请参阅[使用策略助手计算托管设置](/docs/zh-CN/settings-reference#policyhelper) |423| [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) | 在启动时计算托管设置的可执行文件;请参阅[使用策略助手计算托管设置](/docs/zh-CN/settings-reference#policyhelper) |

422| [`sandbox.filesystem.allowManagedReadPathsOnly`](/docs/zh-CN/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | 当 `true` 时,仅尊重来自托管设置的 `filesystem.allowRead` 路径。`denyRead` 仍然从所有源合并 |424| [`sandbox.filesystem.allowManagedReadPathsOnly`](/docs/zh-CN/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | 当 `true` 时,仅尊重来自托管设置的 `filesystem.allowRead` 路径。`denyRead` 仍然从所有源合并 |

423| [`sandbox.network.allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) | 仅尊重托管 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则;阻止其他域而不提示 |425| [`sandbox.network.allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) | 仅尊重托管 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则;阻止其他域而不提示 |

424| [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) | 控制用户可以添加和安装插件的插件市场源。请参阅[托管市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) |426| [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) | 控制用户可以添加和安装插件的插件市场源。请参阅[托管市场限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install) |

425| [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization) | 阻止来自用户和项目源的 skills、agents、hooks 和 MCP 服务器;`true` 锁定所有四个,数组命名哪些 |427| [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization) | 阻止来自用户和项目源的 skills、agents、hooks 和 MCP 服务器;`true` 锁定所有四个,数组命名哪些 |

426| [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) | 当在 HKLM 注册表或 `C:\Program Files\ClaudeCode` 下的文件中设置时,让 WSL 读取 Windows 策略链,仅当该目录下的托管设置文件或 drop-in 都不交付[策略密钥](#how-claude-code-combines-managed-sources)时读取 `/etc/claude-code`;条目给出顺序 |428| [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) | 当在 HKLM 注册表或 `C:\Program Files\ClaudeCode` 下的文件中设置时,让 WSL 读取 Windows 策略链,仅当该目录下的托管设置文件或 drop-in 都不交付[策略密钥](#how-claude-code-combines-managed-sources)时读取 `/etc/claude-code`;条目给出顺序 |

427 429 

mcp.md +13 −13

Details

50 如果安装失败,请匹配 Claude Code 报告的消息:50 如果安装失败,请匹配 Claude Code 报告的消息:

51 51 

52 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加 marketplace,然后重试安装。52 * `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加 marketplace,然后重试安装。

53 * plugin [在 marketplace 中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查 plugin 名称。53 * plugin [在 marketplace 中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查 plugin 名称。

54 54 

55 如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 会为您运行该重新加载。如果重新加载警告您的下一条消息会重新读取对话,请运行 `/reload-plugins --force`。55 如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 会为您运行该重新加载。如果重新加载警告您的下一条消息会重新读取对话,请运行 `/reload-plugins --force`。

56 </Step>56 </Step>


293 服务器状态详情293 服务器状态详情

294</h4>294</h4>

295 295 

296在 `/mcp` 中(包括服务器的菜单)和 [`/plugin`](/docs/zh-CN/plugins) 管理器中,您之前使用过的远程 HTTP 或 SSE 服务器可以显示 `cached` 状态,例如 `cached 2h ago · connects on first use · 5 tools`。Claude Code 从发现缓存(保存在上一个会话中)加载了服务器的工具列表,而不是在启动时连接,Claude Code 在 Claude 首次调用服务器的工具之一时连接服务器。工具从您的第一条消息开始可用,因此您无需执行任何操作。发现缓存及其 `cached` 状态需要 Claude Code v2.1.221 或更高版本。296在 `/mcp` 中(包括服务器的菜单)和 [`/plugin`](/docs/zh-CN/plugins/install) 管理器中,您之前使用过的远程 HTTP 或 SSE 服务器可以显示 `cached` 状态,例如 `cached 2h ago · connects on first use · 5 tools`。Claude Code 从发现缓存(保存在上一个会话中)加载了服务器的工具列表,而不是在启动时连接,Claude Code 在 Claude 首次调用服务器的工具之一时连接服务器。工具从您的第一条消息开始可用,因此您无需执行任何操作。发现缓存及其 `cached` 状态需要 Claude Code v2.1.221 或更高版本。

297 297 

298发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](/docs/zh-CN/env-vars) 以打开它,或设置为 `0` 以在推出启用它时保持关闭。在 v2.1.238 之前,缓存默认打开。298发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](/docs/zh-CN/env-vars) 以打开它,或设置为 `0` 以在推出启用它时保持关闭。在 v2.1.238 之前,缓存默认打开。

299 299 


312* 对于本地、项目、用户 [范围](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。312* 对于本地、项目、用户 [范围](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。

313* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。313* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。

314 314 

315配置为空 `url` 的远程服务器在 `/mcp`、`claude mcp list` 和 [`/plugin`](/docs/zh-CN/plugins) 管理器中显示为 `not configured`,Claude Code 不尝试连接到它。插件可以包含这样的占位符条目,用于您稍后配置的连接器,因此 Claude Code 不将其报告为错误或设置问题。`/mcp` 中服务器的详情视图读取 `No URL configured for this server`;设置条目的 `url` 以连接它。在 v2.1.208 之前,Claude Code 将空 `url` 报告为配置问题,并提示重新连接。315配置为空 `url` 的远程服务器在 `/mcp`、`claude mcp list` 和 [`/plugin`](/docs/zh-CN/plugins/install) 管理器中显示为 `not configured`,Claude Code 不尝试连接到它。插件可以包含这样的占位符条目,用于您稍后配置的连接器,因此 Claude Code 不将其报告为错误或设置问题。`/mcp` 中服务器的详情视图读取 `No URL configured for this server`;设置条目的 `url` 以连接它。在 v2.1.208 之前,Claude Code 将空 `url` 报告为配置问题,并提示重新连接。

316 316 

317<h4 id="configuration-warnings">317<h4 id="configuration-warnings">

318 配置警告318 配置警告


494 插件提供的 MCP 服务器494 插件提供的 MCP 服务器

495</h3>495</h3>

496 496 

497[插件](/docs/zh-CN/plugins) 可以捆绑 MCP 服务器,在您启用插件时提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。497[插件](/docs/zh-CN/plugins/overview) 可以捆绑 MCP 服务器,在您启用插件时提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。

498 498 

499**插件 MCP 服务器如何工作**:499**插件 MCP 服务器如何工作**:

500 500 


539 539 

540* **自动生命周期**:服务器在这些点连接和断开连接:540* **自动生命周期**:服务器在这些点连接和断开连接:

541 * 在会话启动时,Claude Code 自动连接启用的插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可以显示 [`cached` 状态](#server-status-detail) 而不是;Claude Code 在 Claude 首次调用其工具之一时连接它541 * 在会话启动时,Claude Code 自动连接启用的插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可以显示 [`cached` 状态](#server-status-detail) 而不是;Claude Code 在 Claude 首次调用其工具之一时连接它

542 * 如果您在会话期间启用或禁用插件,Claude Code 在更改应用时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 描述何时应用。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效542 * 如果您在会话期间启用或禁用插件,Claude Code 在更改应用时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins) 描述何时应用。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效

543 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,并在您从 Agent SDK 中 [替换会话的 MCP 服务器列表](/docs/zh-CN/agent-sdk/typescript#mcpsetserversresult) 而不命名它们时执行相同操作543 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,并在您从 Agent SDK 中 [替换会话的 MCP 服务器列表](/docs/zh-CN/agent-sdk/typescript#mcpsetserversresult) 而不命名它们时执行相同操作

544 * 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置启用的插件的服务器,并断开不再启用的插件的服务器,因此您不需要在移动后运行 `/reload-plugins`544 * 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置启用的插件的服务器,并断开不再启用的插件的服务器,因此您不需要在移动后运行 `/reload-plugins`

545 * 在 [网络会话](/docs/zh-CN/claude-code-on-the-web) 中,对尚未连接的插件服务器的 MCP 调用(例如在空闲会话唤醒后)按需启动服务器并等待其连接545 * 在 [网络会话](/docs/zh-CN/claude-code-on-the-web) 中,对尚未连接的插件服务器的 MCP 调用(例如在空闲会话唤醒后)按需启动服务器并等待其连接

546* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](/docs/zh-CN/plugins-reference#persistent-data-directory) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:546* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](/docs/zh-CN/plugins/components#path-variables-and-persistent-data) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:

547 * `stdio` 服务器:`command`、`args`、`env`547 * `stdio` 服务器:`command`、`args`、`env`

548 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`。在 v2.1.195 之前,`headersHelper` 将占位符作为文字字符串传递548 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`。在 v2.1.195 之前,`headersHelper` 将占位符作为文字字符串传递

549* **用户环境访问**:访问与手动配置的服务器相同的环境变量549* **用户环境访问**:访问与手动配置的服务器相同的环境变量


563 563 

564服务器本身在作用域名称 `plugin:<plugin-name>:<server-name>` 下注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。564服务器本身在作用域名称 `plugin:<plugin-name>:<server-name>` 下注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。

565 565 

566有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins-reference#mcp-servers)。566有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins/components#mcp-servers)。

567 567 

568<h2 id="mcp-installation-scopes">568<h2 id="mcp-installation-scopes">

569 MCP 安装范围569 MCP 安装范围


6661. 本地范围6661. 本地范围

6672. 项目范围6672. 项目范围

6683. 用户范围6683. 用户范围

6694. [插件提供的服务器](/docs/zh-CN/plugins)6694. [插件提供的服务器](/docs/zh-CN/plugins/components#mcp-servers)

6705. [claude.ai 连接器](#use-mcp-servers-from-claude-ai)6705. [claude.ai 连接器](#use-mcp-servers-from-claude-ai)

671 671 

672三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。672三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。


1085Claude Code 在执行助手时设置这些环境变量:1085Claude Code 在执行助手时设置这些环境变量:

1086 1086 

1087| 变量 | 值 |1087| 变量 | 值 |

1088| :---------------------------- | :------------------------------------------------------------ |1088| :---------------------------- | :------------------------------------------------------------- |

1089| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 服务器的名称 |1089| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 服务器的名称 |

1090| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 服务器的 URL |1090| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 服务器的 URL |

1091| `CLAUDE_PLUGIN_ROOT` | 插件的根目录。仅当 [插件](/docs/zh-CN/plugins-reference#mcp-servers) 提供服务器时设置 |1091| `CLAUDE_PLUGIN_ROOT` | 插件的根目录。仅当 [插件](/docs/zh-CN/plugins/components#mcp-servers) 提供服务器时设置 |

1092 1092 

1093使用这些来编写一个为多个 MCP 服务器服务的单个助手脚本。1093使用这些来编写一个为多个 MCP 服务器服务的单个助手脚本。

1094 1094 

1095插件提供的 `headersHelper` 无法引用插件的 [`${user_config.*}`](/docs/zh-CN/plugins-reference#user-configuration) 值,因为命令通过 shell 运行。Claude Code 报告服务器配置错误,并显示 [错误](/docs/zh-CN/errors#plugin-command-references-user-config),不替换该值。将 `${user_config.KEY}` 放在服务器的 `headers` 字段中,该字段不会被 shell 解析,或让助手脚本从配置文件中读取该值。在 v2.1.207 之前,`headersHelper` 替换了 `${user_config.*}` 值。1095插件提供的 `headersHelper` 无法引用插件的 [`${user_config.*}`](/docs/zh-CN/plugins/manifest-reference#user-configuration) 值,因为命令通过 shell 运行。Claude Code 报告服务器配置错误,并显示 [错误](/docs/zh-CN/errors#plugin-command-references-user-config),不替换该值。将 `${user_config.KEY}` 放在服务器的 `headers` 字段中,该字段不会被 shell 解析,或让助手脚本从配置文件中读取该值。在 v2.1.207 之前,`headersHelper` 替换了 `${user_config.*}` 值。

1096 1096 

1097<h4 id="where-the-helper-runs">1097<h4 id="where-the-helper-runs">

1098 助手运行的位置1098 助手运行的位置


1102 1102 

1103| 您配置服务器的位置 | 工作目录 |1103| 您配置服务器的位置 | 工作目录 |

1104| :----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |1104| :----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |

1105| [插件](/docs/zh-CN/plugins-reference#mcp-servers) | 插件的根目录。需要 Claude Code v2.1.195 或更高版本 |1105| [插件](/docs/zh-CN/plugins/components#mcp-servers) | 插件的根目录。需要 Claude Code v2.1.195 或更高版本 |

1106| 项目 `.mcp.json` 或 [本地范围](#local-scope) 服务器 | 声明服务器的项目目录 |1106| 项目 `.mcp.json` 或 [本地范围](#local-scope) 服务器 | 声明服务器的项目目录 |

1107| 项目中的代理文件、来自 SDK 的 `mcpServers` 选项或 `setMcpServers()` 方法的服务器,或 [`--mcp-config`](/docs/zh-CN/cli-reference) | 会话的 [主工作目录](/docs/zh-CN/permissions#working-directories) |1107| 项目中的代理文件、来自 SDK 的 `mcpServers` 选项或 `setMcpServers()` 方法的服务器,或 [`--mcp-config`](/docs/zh-CN/cli-reference) | 会话的 [主工作目录](/docs/zh-CN/permissions#working-directories) |

1108| [用户范围](#user-scope)、[托管 MCP](/docs/zh-CN/managed-mcp)、[claude.ai 连接器](#use-mcp-servers-from-claude-ai),或项目外的代理文件,包括来自 `--add-dir` 目录的代理文件 | 您的配置目录,`~/.claude` 除非您设置了 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) |1108| [用户范围](#user-scope)、[托管 MCP](/docs/zh-CN/managed-mcp)、[claude.ai 连接器](#use-mcp-servers-from-claude-ai),或项目外的代理文件,包括来自 `--add-dir` 目录的代理文件 | 您的配置目录,`~/.claude` 除非您设置了 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) |


1235 </Step>1235 </Step>

1236</Steps>1236</Steps>

1237 1237 

1238当您的组织在 claude.ai 中管理其身份验证时,Claude Code 在 `/mcp` 和 [`/plugin`](/docs/zh-CN/plugins) 管理器中将连接器标记为 `managed`。托管状态不会改变 Claude Code 连接到连接器的方式或应用您的组织的 [工具控制](#organization-controls-on-connector-tools)。1238当您的组织在 claude.ai 中管理其身份验证时,Claude Code 在 `/mcp` 和 [`/plugin`](/docs/zh-CN/plugins/install) 管理器中将连接器标记为 `managed`。托管状态不会改变 Claude Code 连接到连接器的方式或应用您的组织的 [工具控制](#organization-controls-on-connector-tools)。

1239 1239 

1240您从未登录过的连接器会在 claude.ai 部分末尾的 `Show unused connectors` 行后面折叠,因此组织预配的列表不会填满面板。选择该行以展开它们。您之前登录过的连接器即使当前需要重新身份验证,也会保持可见。1240您从未登录过的连接器会在 claude.ai 部分末尾的 `Show unused connectors` 行后面折叠,因此组织预配的列表不会填满面板。选择该行以展开它们。您之前登录过的连接器即使当前需要重新身份验证,也会保持可见。

1241 1241 

Details

64}64}

65```65```

66 66 

67Claude Code 忽略存储库的 `.claude/settings.json` 和 `.claude/settings.local.json` 中的 [OpenTelemetry 导出器变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env),因此存储库无法使用它们来打开遥测、选择其去向或捕获内容。在托管设置中设置它们,或让每个开发者在其 shell 或 `~/.claude/settings.json` 中设置它们。存储库仍然可以通过将其导出器选择器(如 `OTEL_LOGS_EXPORTER`)设置为 `none` 来关闭信号,除非托管设置、`--settings` 文件或启动 Claude Code 的环境设置了该变量。

68 

67Claude Code 不会将 `OTEL_*` 环境变量传递给它生成的子进程,包括 Bash 工具、hooks、MCP 服务器和语言服务器。通过 Bash 工具运行的已进行 OpenTelemetry 检测的应用程序不会继承 Claude Code 的导出器端点或标头,因此如果该应用程序需要导出自己的遥测,请直接在命令中设置这些变量。69Claude Code 不会将 `OTEL_*` 环境变量传递给它生成的子进程,包括 Bash 工具、hooks、MCP 服务器和语言服务器。通过 Bash 工具运行的已进行 OpenTelemetry 检测的应用程序不会继承 Claude Code 的导出器端点或标头,因此如果该应用程序需要导出自己的遥测,请直接在命令中设置这些变量。

68 70 

69<h3 id="how-managed-settings-lock-the-otlp-destination">71<h3 id="how-managed-settings-lock-the-otlp-destination">


651* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一653* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一

652* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在654* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在

653* `effort`:应用于请求的 [努力级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当模型不支持努力时不存在。655* `effort`:应用于请求的 [努力级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当模型不支持努力时不存在。

654* `agent.name`:发出请求的子代理类型。内置代理名称和来自官方市场插件的代理按原样出现。其他用户定义的代理名称被替换为 `"custom"`。当请求不是由命名子代理类型发出时不存在。656* `agent.name`:发出请求的子代理类型。内置代理名称和来自官方市场插件的代理按原样出现。其他用户定义的代理名称被替换为 `"custom"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。当请求不是由命名子代理类型发出时不存在。

655* `skill.name`:对请求活跃的技能,由 Skill 工具、`/` 命令设置或由生成的子代理继承。内置、捆绑、用户定义和官方市场插件技能名称按原样出现。第三方插件技能名称被替换为 `"third-party"`。当没有技能活跃时不存在。657* `skill.name`:对请求活跃的技能,由 Skill 工具、`/` 命令设置或由生成的子代理继承。内置、捆绑、用户定义和官方市场插件技能名称按原样出现。第三方插件技能名称被替换为 `"third-party"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。当没有技能活跃时不存在。

656* `plugin.name`:当活跃技能或子代理由插件提供时的拥有插件。官方市场插件名称按原样出现。第三方插件名称被替换为 `"third-party"`。当技能和子代理都没有拥有插件时不存在。658* `plugin.name`:当活跃技能或子代理由插件提供时的拥有插件。官方市场插件名称按原样出现。第三方插件名称被替换为 `"third-party"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。当技能和子代理都没有拥有插件时不存在。

657* `marketplace.name`:拥有插件安装来源的市场。仅为官方市场插件发出。否则不存在。659* `marketplace.name`:拥有插件安装来源的市场。仅为官方市场插件发出。否则不存在。

658* `mcp_server.name`:MCP 服务器,其工具结果此请求消耗。内置、claude.ai 代理和官方注册表服务器名称按原样出现。用户配置的服务器名称被替换为 `"custom"`。当请求没有消耗 MCP 工具结果时不存在。在 v2.1.222 之前,Claude Code 在每个 MCP 工具调用后的请求上设置此属性,而不仅仅是消耗工具结果的请求,因此聚合它的仪表板在升级后显示下降。660* `mcp_server.name`:MCP 服务器,其工具结果此请求消耗。内置、claude.ai 代理和官方注册表服务器名称按原样出现。用户配置的服务器名称被替换为 `"custom"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。当请求没有消耗 MCP 工具结果时不存在。在 v2.1.222 之前,Claude Code 在每个 MCP 工具调用后的请求上设置此属性,而不仅仅是消耗工具结果的请求,因此聚合它的仪表板在升级后显示下降。

659* `mcp_tool.name`:MCP 工具,其结果此请求消耗,与 `mcp_server.name` 具有相同的编辑和版本行为。当请求没有消耗 MCP 工具结果时不存在。661* `mcp_tool.name`:MCP 工具,其结果此请求消耗,与 `mcp_server.name` 具有相同的编辑和版本行为。当请求没有消耗 MCP 工具结果时不存在。

660 662 

661<h4 id="token-counter">663<h4 id="token-counter">


1085* `marketplace.name`:插件安装来源的市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`1087* `marketplace.name`:插件安装来源的市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`

1086* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明版本时才包含1088* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明版本时才包含

1087* `plugin.scope`:插件的来源类别:`"official"`、`"community"`、`"org"`、`"user-local"` 或 `"default-bundle"`1089* `plugin.scope`:插件的来源类别:`"official"`、`"community"`、`"org"`、`"user-local"` 或 `"default-bundle"`

1088* `enabled_via`:插件如何被启用的方式:`"default-enable"`、`"org-policy"`、`"admin-install"`、`"seed-mount"` 或 `"user-install"`。值 `"admin-install"` 表示插件在 [**组织设置 > 插件**](https://claude.ai/admin-settings/plugins) 中为您的组织设置为必需或自动安装。在 v2.1.246 之前,Claude Code 将这些插件报告为 `"user-install"` 或 `"seed-mount"`1090* `enabled_via`:插件如何被启用的方式:`"default-enable"`、`"org-policy"`、`"admin-install"`、`"seed-mount"` 或 `"user-install"`。值 `"admin-install"` 表示插件在 [**组织设置 > 插件和技能**](https://claude.ai/admin-settings/skills?tab=inventory) 中为您的组织设置为必需或自动安装。在 v2.1.246 之前,Claude Code 将这些插件报告为 `"user-install"` 或 `"seed-mount"`

1089* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算整个队伍中加载了多少个不同的第三方插件,而无需记录其名称。对于 [从 claude.ai 同步的插件](/docs/zh-CN/plugins-reference#synced-plugins),Claude Code 使用插件名称与 claude.ai 为插件报告的市场名称进行哈希,或在其他情况下使用 `synced`。在 v2.1.246 之前,Claude Code 在哈希中没有使用 claude.ai 报告的市场名称1091* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算整个队伍中加载了多少个不同的第三方插件,而无需记录其名称。对于 [从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),Claude Code 使用插件名称与 claude.ai 为插件报告的市场名称进行哈希,或在其他情况下使用 `synced`。在 v2.1.246 之前,Claude Code 在哈希中没有使用 claude.ai 报告的市场名称

1090* `has_hooks`:插件是否贡献 hooks1092* `has_hooks`:插件是否贡献 hooks

1091* `has_mcp`:插件是否贡献 MCP 服务器1093* `has_mcp`:插件是否贡献 MCP 服务器

1092* `host_owned_mcp`:当 SDK 主机管理此插件的 MCP 连接且 Claude Code 跳过读取插件的 MCP 服务器配置时为 `true`,否则为 `false`。需要 Claude Code v2.1.172 或更高版本1094* `host_owned_mcp`:当 SDK 主机管理此插件的 MCP 连接且 Claude Code 跳过读取插件的 MCP 服务器配置时为 `true`,否则为 `false`。需要 Claude Code v2.1.172 或更高版本


1362* 在托管设置、用户设置或 `--settings` 的 `env` 块中设置它,或在启动 Claude Code 的环境中。项目或本地设置中的值不会打开它,因为克隆的存储库可以写入它们。1364* 在托管设置、用户设置或 `--settings` 的 `env` 块中设置它,或在启动 Claude Code 的环境中。项目或本地设置中的值不会打开它,因为克隆的存储库可以写入它们。

1363* 服务器托管设置可以在不显示 [安全批准对话](/docs/zh-CN/server-managed-settings#security-approval-dialogs) 的情况下设置它,因为变量仅将您组织自己的编辑策略添加到您的组织已接收的事件。1365* 服务器托管设置可以在不显示 [安全批准对话](/docs/zh-CN/server-managed-settings#security-approval-dialogs) 的情况下设置它,因为变量仅将您组织自己的编辑策略添加到您的组织已接收的事件。

1364 1366 

1365在您尚未 [信任](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 的文件夹中的交互式会话中,Claude Code 不会导出拒绝事件,因为项目和本地设置可能会在信任前将导出指向不同的收集器。1367在您尚未 [信任](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 的文件夹中的交互式会话中,Claude Code 不会导出拒绝事件。

1366 1368 

1367**事件名称**:`claude_code.managed_settings_resolved`1369**事件名称**:`claude_code.managed_settings_resolved`

1368 1370 

Details

245| `registry.npmjs.org` | 插件安装(获取 npm 源插件包和安装插件的 Node.js 包依赖项)、`npx` 启动的 MCP 服务器以及 npm 和 bun 安装 Claude Code 本身的包注册表 |245| `registry.npmjs.org` | 插件安装(获取 npm 源插件包和安装插件的 Node.js 包依赖项)、`npx` 启动的 MCP 服务器以及 npm 和 bun 安装 Claude Code 本身的包注册表 |

246| `bridge.claudeusercontent.com` | [Chrome 中的 Claude](/docs/zh-CN/chrome) 扩展 WebSocket 桥接 |246| `bridge.claudeusercontent.com` | [Chrome 中的 Claude](/docs/zh-CN/chrome) 扩展 WebSocket 桥接 |

247| `*.frame.claudeusercontent.com` | [Artifact](/docs/zh-CN/artifacts) 内容读取。当 Claude 打开 Artifact 时,CLI 从此主机获取 Artifact 的文件,仅当 Artifact 工具对您的账户[可用](/docs/zh-CN/artifacts#availability)时。要关闭该工具并删除此要求,请设置 [`"enableArtifact": false`](/docs/zh-CN/settings-reference#enableartifact) 或 [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/zh-CN/env-vars);Claude Code 也遵守已弃用的 [`disableArtifact`](/docs/zh-CN/settings-reference#disableartifact) 设置。有关这些设置如何相互作用,请参阅[禁用 Artifact](/docs/zh-CN/artifacts#disable-artifacts) |247| `*.frame.claudeusercontent.com` | [Artifact](/docs/zh-CN/artifacts) 内容读取。当 Claude 打开 Artifact 时,CLI 从此主机获取 Artifact 的文件,仅当 Artifact 工具对您的账户[可用](/docs/zh-CN/artifacts#availability)时。要关闭该工具并删除此要求,请设置 [`"enableArtifact": false`](/docs/zh-CN/settings-reference#enableartifact) 或 [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/zh-CN/env-vars);Claude Code 也遵守已弃用的 [`disableArtifact`](/docs/zh-CN/settings-reference#disableartifact) 设置。有关这些设置如何相互作用,请参阅[禁用 Artifact](/docs/zh-CN/artifacts#disable-artifacts) |

248| `github.com` | 克隆 GitHub 托管的[插件市场](/docs/zh-CN/plugin-marketplaces)和插件,包括官方 Anthropic 市场,通过 HTTPS 或 SSH。要仅通过 HTTPS 克隆 GitHub `owner/repo` 源,请设置 [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/zh-CN/env-vars) |248| `github.com` | 克隆 GitHub 托管的[插件市场](/docs/zh-CN/plugins/overview)和插件,包括官方 Anthropic 市场,通过 HTTPS 或 SSH。要仅通过 HTTPS 克隆 GitHub `owner/repo` 源,请设置 [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/zh-CN/env-vars) |

249| `raw.githubusercontent.com` | [`/release-notes`](/docs/zh-CN/commands) 的更新日志源。在交互式会话中,当 Claude Code 的缓存更新日志尚未涵盖运行版本时(例如更新后的首次启动),Claude Code 也会在启动时在后台获取它;非交互式和云会话永远不会获取它 |249| `raw.githubusercontent.com` | [`/release-notes`](/docs/zh-CN/commands) 的更新日志源。在交互式会话中,当 Claude Code 的缓存更新日志尚未涵盖运行版本时(例如更新后的首次启动),Claude Code 也会在启动时在后台获取它;非交互式和云会话永远不会获取它 |

250| `*-review.googlesource.com` | `googlesource.com` 检出上的 Gerrit 更改查询。当 Claude Desktop Code 标签会话在[受信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)的检出上启动或恢复,且其 `origin` 是 `googlesource.com` 主机时,Claude Code 会匿名向该主机的 `-review` 服务器查询与 HEAD 的 `Change-Id` 匹配的开放更改,每次启动或恢复一次。其他会话类型跳过查询,不会联系其他 Gerrit 主机。可选:使用 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars) 禁用 |250| `*-review.googlesource.com` | `googlesource.com` 检出上的 Gerrit 更改查询。当 Claude Desktop Code 标签会话在[受信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)的检出上启动或恢复,且其 `origin` 是 `googlesource.com` 主机时,Claude Code 会匿名向该主机的 `-review` 服务器查询与 HEAD 的 `Change-Id` 匹配的开放更改,每次启动或恢复一次。其他会话类型跳过查询,不会联系其他 Gerrit 主机。可选:使用 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars) 禁用 |

251| `http-intake.logs.us5.datadoghq.com` | 操作遥测事件,仅在 CLI 直接使用 Anthropic API 时发送,不适用于 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry。可选:使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/data-usage#telemetry-services) 或 `DO_NOT_TRACK` 禁用 |251| `http-intake.logs.us5.datadoghq.com` | 操作遥测事件,仅在 CLI 直接使用 Anthropic API 时发送,不适用于 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry。可选:使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/data-usage#telemetry-services) 或 `DO_NOT_TRACK` 禁用 |

Details

171 </Step>171 </Step>

172</Steps>172</Steps>

173 173 

174[Plugins](/docs/zh-CN/plugins-reference) 也可以在 `output-styles/` 目录中提供输出样式。174[Plugins](/docs/zh-CN/plugins/manifest-reference) 也可以在 `output-styles/` 目录中提供输出样式。

175 175 

176<h3 id="frontmatter">176<h3 id="frontmatter">

177 Frontmatter 参考177 Frontmatter 参考


228 228 

229* [Settings](/docs/zh-CN/settings):`outputStyle` 字段所在的位置以及设置优先级的工作原理229* [Settings](/docs/zh-CN/settings):`outputStyle` 字段所在的位置以及设置优先级的工作原理

230* [Permission modes](/docs/zh-CN/permission-modes):Proactive 样式与自动模式的比较方式230* [Permission modes](/docs/zh-CN/permission-modes):Proactive 样式与自动模式的比较方式

231* [Plugins](/docs/zh-CN/plugins):打包和分发输出样式以及 skills、hooks 和 agents231* [Plugins](/docs/zh-CN/plugins/overview):打包和分发输出样式以及 skills、hooks 和 agents

232* [Debug your configuration](/docs/zh-CN/debug-your-config):诊断为什么输出样式没有生效232* [Debug your configuration](/docs/zh-CN/debug-your-config):诊断为什么输出样式没有生效

Details

332 服务器端分类器审查332 服务器端分类器审查

333</h3>333</h3>

334 334 

335在 Enterprise 计划和使用 Claude API 的账户上,在 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)、Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,以及每当您将 `ANTHROPIC_BASE_URL` 指向[LLM 网关或代理](/docs/zh-CN/llm-gateway)时,自动模式下的 Claude Code 会要求服务器审查[转到分类器的操作](#how-the-classifier-evaluates-actions)作为会话模型请求的一部分。服务器审查它们的地方,其判决决定这些操作。它不审查的地方,通常是因为网关或代理干扰了流量,或因为平台、区域或凭证还没有服务器端检查,Claude Code 会回退到自己的分类器请求,一旦该回退在会话的其余部分保持,它会在这些请求被计费的账户上显示[关于分类器请求费用的通知](/docs/zh-CN/auto-mode-classifier-billing)。要跳过询问服务器并始终使用 Claude Code 自己的分类器请求,请设置 [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/zh-CN/env-vars)。该变量在直接连接到 Anthropic API 时不被读取。如果您设置 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` 并保持 `CLAUDE_CODE_AUTO_MODE_SERVER` 未设置,Claude Code 也会停止询问服务器。335在自动模式中,Claude Code 可以要求服务器检查[决策顺序](#how-the-classifier-evaluates-actions)发送的操作以供审查,作为会话模型请求的一部分,而不是发送自己的分类器请求。这些会话要求:

336 336 

337默认询问服务器需要 Claude Code v2.1.278 或更高版本。337* **直接连接到 Anthropic API**:在交互式终端会话中,在每个 claude.ai 计划和使用 Claude API 的账户上,随着 Anthropic 推出。在 Pro、Max 和 Team 计划上需要 Claude Code v2.1.271 或更高版本,在 Enterprise 计划和 Claude API 账户上需要 v2.1.278 或更高版本。从 v2.1.282 开始,[不获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话,例如因为您关闭了遥测,在任何类型的会话中默认询问服务器。

338* **云提供商、LLM 网关或代理**:在 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)、Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,以及每当您将 `ANTHROPIC_BASE_URL` 指向[LLM 网关或代理](/docs/zh-CN/llm-gateway)时,无论您的计划如何。默认询问需要 Claude Code v2.1.278 或更高版本。

339* **已登录的[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)会话**:需要 Claude Code v2.1.280 或更高版本

340 

341服务器审查操作的地方,其判决决定这些操作。另外两种结果是可能的:

342 

343* **服务器不审查会话**:响应完成时没有审查结果,或服务器回答它不审查此会话。最常见的原因是 LLM 网关或代理丢弃了审查请求或结果,以及平台、区域或凭证还没有服务器端检查。Claude Code 回退到自己的分类器请求。一旦该回退在会话的其余部分保持,它会在这些请求被计费的账户上显示[关于分类器请求费用的通知](/docs/zh-CN/auto-mode-classifier-billing)。

344* **服务器对操作没有判决**:Claude Code 拒绝该操作而不是运行它未审查。在任何连接上,当响应在审查结果到达之前结束或结果以 Claude Code 无法读取的形式到达时,会发生这种情况。LLM 网关或代理可能会导致响应被截断或结果被重写。在直接连接到 Anthropic API 时,当服务器对操作的检查失败时也会发生,例如超时。[服务器返回了没有安全判决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)涵盖拒绝消息、拒绝重复时会发生什么以及处理方法。

345 

346要跳过询问服务器并始终使用 Claude Code 自己的分类器请求,请设置 [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/zh-CN/env-vars)。在直接连接到 Anthropic API 时,该变量需要 Claude Code v2.1.281 或更高版本。将其设置为 `1` 会在没有服务器审查的会话中打开服务器审查,例如 `-p` 或 Agent SDK 会话,除非您也设置了 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`。如果您设置了 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` 并保持 `CLAUDE_CODE_AUTO_MODE_SERVER` 未设置,Claude Code 也会停止询问服务器。

338 347 

339<h3 id="what-the-classifier-blocks-by-default">348<h3 id="what-the-classifier-blocks-by-default">

340 分类器默认阻止的内容349 分类器默认阻止的内容


476* **被阻止的操作**:Claude Code 显示通知并在 `/permissions` 下的**最近拒绝**选项卡中列出操作,您可以按 `r` 使用手动批准重试它。当分类器对操作[没有判决](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时,因为分类器自己的请求的单独安全检查拒绝了它或其响应未解析,Claude Code 拒绝该操作而不显示通知或**最近拒绝**条目。485* **被阻止的操作**:Claude Code 显示通知并在 `/permissions` 下的**最近拒绝**选项卡中列出操作,您可以按 `r` 使用手动批准重试它。当分类器对操作[没有判决](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时,因为分类器自己的请求的单独安全检查拒绝了它或其响应未解析,Claude Code 拒绝该操作而不显示通知或**最近拒绝**条目。

477* **重复阻止**:如果分类器连续阻止操作 3 次或总共 20 次,自动模式暂停,Claude Code 恢复提示。批准提示的操作会恢复自动模式。这些阈值不可配置。任何允许的操作重置连续计数器,而总计数器在会话中持续,仅在其自己的限制触发回退时重置。当[分类器自己的请求的单独安全检查拒绝](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时,Claude Code 不计算拒绝到任一阈值;链接的条目涵盖 Claude Code 如何处理这些拒绝。486* **重复阻止**:如果分类器连续阻止操作 3 次或总共 20 次,自动模式暂停,Claude Code 恢复提示。批准提示的操作会恢复自动模式。这些阈值不可配置。任何允许的操作重置连续计数器,而总计数器在会话中持续,仅在其自己的限制触发回退时重置。当[分类器自己的请求的单独安全检查拒绝](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时,Claude Code 不计算拒绝到任一阈值;链接的条目涵盖 Claude Code 如何处理这些拒绝。

478* **无法提示的会话**:[非交互式](/docs/zh-CN/headless) `-p` 运行没有 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 没有回退提示。当重复阻止达到阈值时,操作不运行,Claude 继续工作。当[分类器自己的请求的单独安全检查拒绝](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时也适用相同情况。Claude Code 在任一情况下都不停止运行。487* **无法提示的会话**:[非交互式](/docs/zh-CN/headless) `-p` 运行没有 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 没有回退提示。当重复阻止达到阈值时,操作不运行,Claude 继续工作。当[分类器自己的请求的单独安全检查拒绝](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时也适用相同情况。Claude Code 在任一情况下都不停止运行。

488* **服务器没有判决**:在[服务器端分类器审查](#server-side-classifier-review)下,Claude Code 拒绝服务器没有判决的操作,并在连续十个响应没有判决后停止该轮。请参阅[服务器返回了没有安全判决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)。

479* **检查期间的模式切换**:如果您在分类器检查待处理时切换权限模式,Claude Code 会丢弃新模式不会请求的判决,而不是应用它:您改为被提示批准,或在 [`dontAsk` 模式](#allow-only-pre-approved-tools-with-dontask-mode)中操作被自动拒绝。489* **检查期间的模式切换**:如果您在分类器检查待处理时切换权限模式,Claude Code 会丢弃新模式不会请求的判决,而不是应用它:您改为被提示批准,或在 [`dontAsk` 模式](#allow-only-pre-approved-tools-with-dontask-mode)中操作被自动拒绝。

480 490 

481重复阻止通常意味着分类器缺少关于您的基础设施的上下文。使用 `/feedback` 报告误报,或让管理员[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。491重复阻止通常意味着分类器缺少关于您的基础设施的上下文。使用 `/feedback` 报告误报,或让管理员[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。


492 * 携带[每个命令允许的域](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)的 shell 命令也会路由到分类器,即使允许规则匹配,因为规则批准命令,而不是其主机502 * 携带[每个命令允许的域](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)的 shell 命令也会路由到分类器,即使允许规则匹配,因为规则批准命令,而不是其主机

493 * 与命令内容匹配的询问规则,例如 `Bash(git push *)`,回退到权限提示503 * 与命令内容匹配的询问规则,例如 `Bash(git push *)`,回退到权限提示

494 2. 只读操作和工作目录中的文件编辑被自动批准,除了写入[受保护路径](#protected-paths)和[工作目录外的第一次读取](#first-read-outside-the-working-directories),这会提示您504 2. 只读操作和工作目录中的文件编辑被自动批准,除了写入[受保护路径](#protected-paths)和[工作目录外的第一次读取](#first-read-outside-the-working-directories),这会提示您

505 * 在具有[服务器端分类器审查](#server-side-classifier-review)的会话中,只读和[沙箱](/docs/zh-CN/sandboxing#sandbox-modes) shell 命令等待该审查,如果它标记它们则被阻止

495 3. 其他所有内容都转到分类器。在步骤 1 中直接提示您的连接器工具和` requiresUserInteraction` MCP 工具永远不会到达分类器,因此组织要求的批准或同意步骤都不会被自动批准506 3. 其他所有内容都转到分类器。在步骤 1 中直接提示您的连接器工具和` requiresUserInteraction` MCP 工具永远不会到达分类器,因此组织要求的批准或同意步骤都不会被自动批准

496 4. 如果分类器阻止,Claude 接收原因并尝试替代方案。在大多数会话中,原因名称分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[审查拒绝](/docs/zh-CN/auto-mode-config#review-denials)507 4. 如果分类器阻止,Claude 接收原因并尝试替代方案。在大多数会话中,原因名称分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[审查拒绝](/docs/zh-CN/auto-mode-config#review-denials)

497 508 

permissions.md +5 −5

Details

278 只读命令278 只读命令

279</h4>279</h4>

280 280 

281Claude Code 将一组内置 Bash 命令识别为只读,并在每种模式下无需权限提示即可运行它们,除了由 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 限制的路径。该集合包括 `ls`、`cat`、`echo`、`pwd`、`head`、`tail`、`grep`、`find`、`wc`、`which`、`diff`、`stat`、`du`、`cd` 和 `git` 的只读形式。该集合不可配置;要对其中一个命令要求提示,请为其添加 `ask` 或 `deny` 规则。281Claude Code 将一组内置 Bash 命令识别为只读,并在每种模式下无需权限提示即可运行它们,除了由 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 限制的路径。该集合包括 `ls`、`cat`、`echo`、`pwd`、`head`、`tail`、`grep`、`find`、`wc`、`which`、`diff`、`stat`、`du`、`cd` 和 `git` 的只读形式。该集合不可配置;要对其中一个命令要求提示,请为其添加 `ask` 或 `deny` 规则。在自动模式下,这些命令也可以等待分类器的审查;请参阅[分类器如何评估操作](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions)。

282 282 

283像 `ls > out.txt` 这样的重定向会在目标上添加检查。请参阅[重定向](#redirections)。283像 `ls > out.txt` 这样的重定向会在目标上添加检查。请参阅[重定向](#redirections)。

284 284 


605 605 

606* 其项目设置,包括其权限规则和 [hooks](/docs/zh-CN/hooks)606* 其项目设置,包括其权限规则和 [hooks](/docs/zh-CN/hooks)

607* 其 [`.mcp.json` 服务器](/docs/zh-CN/mcp#project-scope),受与启动时相同的[服务器批准](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust)约束,以及您在其中注册的[本地范围](/docs/zh-CN/mcp#local-scope) MCP 服务器607* 其 [`.mcp.json` 服务器](/docs/zh-CN/mcp#project-scope),受与启动时相同的[服务器批准](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust)约束,以及您在其中注册的[本地范围](/docs/zh-CN/mcp#local-scope) MCP 服务器

608* 其设置启用的 [plugins](/docs/zh-CN/plugins)、其 [skills](/docs/zh-CN/skills#discovery-from-parent-and-nested-directories) 和其 [subagents](/docs/zh-CN/sub-agents)608* 其设置启用的 [plugins](/docs/zh-CN/plugins/overview)、其 [skills](/docs/zh-CN/skills#discovery-from-parent-and-nested-directories) 和其 [subagents](/docs/zh-CN/sub-agents)

609* 其 [`env`](/docs/zh-CN/settings-reference#env) 值,应用在前一个目录的设置中的环境变量之上,这些变量保持有效609* 其 [`env`](/docs/zh-CN/settings-reference#env) 值,应用在前一个目录的设置中的环境变量之上,这些变量保持有效

610 610 

611Claude Code 还断开前一个目录的项目和[本地范围](/docs/zh-CN/mcp#local-scope) MCP 服务器,以及移动后不再启用的 [plugins](/docs/zh-CN/mcp#plugin-provided-mcp-servers) 的服务器。它从新目录的设置而不是前一个目录的设置中获取[其他目录](#working-directories),并保留您使用 `--add-dir` 或 `/add-dir` 添加的目录。移动激活的 Hooks 仍然接收 [`${CLAUDE_PROJECT_DIR}`](/docs/zh-CN/hooks#reference-scripts-by-path) 设置为会话启动的项目根目录。611Claude Code 还断开前一个目录的项目和[本地范围](/docs/zh-CN/mcp#local-scope) MCP 服务器,以及移动后不再启用的 [plugins](/docs/zh-CN/mcp#plugin-provided-mcp-servers) 的服务器。它从新目录的设置而不是前一个目录的设置中获取[其他目录](#working-directories),并保留您使用 `--add-dir` 或 `/add-dir` 添加的目录。移动激活的 Hooks 仍然接收 [`${CLAUDE_PROJECT_DIR}`](/docs/zh-CN/hooks#reference-scripts-by-path) 设置为会话启动的项目根目录。


641要在项目间共享该配置,请使用以下方法之一:641要在项目间共享该配置,请使用以下方法之一:

642 642 

643* **用户级配置**:将文件放在 `~/.claude/agents/`、`~/.claude/output-styles/` 或 `~/.claude/settings.json` 中,使其在每个项目中可用643* **用户级配置**:将文件放在 `~/.claude/agents/`、`~/.claude/output-styles/` 或 `~/.claude/settings.json` 中,使其在每个项目中可用

644* **Plugins**:将配置打包并分发为[插件](/docs/zh-CN/plugins),团队可以安装644* **Plugins**:将配置打包并分发为[插件](/docs/zh-CN/plugins/overview),团队可以安装

645* **从配置目录启动**:从包含您想要的 `.claude/` 配置的目录运行 Claude Code645* **从配置目录启动**:从包含您想要的 `.claude/` 配置的目录运行 Claude Code

646 646 

647<h2 id="how-permissions-interact-with-sandboxing">647<h2 id="how-permissions-interact-with-sandboxing">


729每一行是存储库可以提供的一种内容。列是两种您尚未信任该文件夹本身的情况:您仅信任了父文件夹,或您在那里运行了 `claude -p` 或 SDK,这永远不会显示信任对话框。父文件夹列不适用于[嵌套存储库](#project-allow-rules-and-workspace-trust)内:在交互式会话中 Claude Code 为其显示信任对话框,`claude -p` 或 SDK 运行遵循 `claude -p` 列。729每一行是存储库可以提供的一种内容。列是两种您尚未信任该文件夹本身的情况:您仅信任了父文件夹,或您在那里运行了 `claude -p` 或 SDK,这永远不会显示信任对话框。父文件夹列不适用于[嵌套存储库](#project-allow-rules-and-workspace-trust)内:在交互式会话中 Claude Code 为其显示信任对话框,`claude -p` 或 SDK 运行遵循 `claude -p` 列。

730 730 

731| 存储库提供的内容 | 您仅信任了父文件夹 | `claude -p` 或 SDK,文件夹从未被信任 |731| 存储库提供的内容 | 您仅信任了父文件夹 | `claude -p` 或 SDK,文件夹从未被信任 |

732| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- |732| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- |

733| 设置文件中的 [Hooks](/docs/zh-CN/hooks)、[`env`](/docs/zh-CN/settings-reference#env) 块和辅助命令(如 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper)),以及项目技能的 [hooks](/docs/zh-CN/hooks#hooks-in-skills-and-agents) 和 [`allowed-tools`](/docs/zh-CN/skills#pre-approve-tools-for-a-skill) | 已使用 | 已使用。工作区信任在任何会话中都不会限制技能的 `allowed-tools` |733| 设置文件中的 [Hooks](/docs/zh-CN/hooks)、[`env`](/docs/zh-CN/settings-reference#env) 块和辅助命令(如 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper)),以及项目技能的 [hooks](/docs/zh-CN/hooks#hooks-in-skills-and-agents) 和 [`allowed-tools`](/docs/zh-CN/skills#pre-approve-tools-for-a-skill) | 已使用 | 已使用。工作区信任在任何会话中都不会限制技能的 `allowed-tools` |

734| `.claude/settings.json` 中的 `permissions.allow` 规则和 `additionalDirectories` | 在您接受信任对话框之前不使用,对话框再次出现列出它们 | 不使用。Claude Code 向 stderr 打印 [`this workspace has not been trusted`](/docs/zh-CN/errors#workspace-has-not-been-trusted) 警告 |734| `.claude/settings.json` 中的 `permissions.allow` 规则和 `additionalDirectories` | 在您接受信任对话框之前不使用,对话框再次出现列出它们 | 不使用。Claude Code 向 stderr 打印 [`this workspace has not been trusted`](/docs/zh-CN/errors#workspace-has-not-been-trusted) 警告 |

735| 项目[子代理](/docs/zh-CN/sub-agents#hooks-in-subagent-frontmatter)中的 Frontmatter hooks、项目 [`@skills-dir` 插件](/docs/zh-CN/plugins-reference#skills-directory-plugins) 和来自存储库或 `--add-dir` 目录的 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目 | 不使用,不提供对话框 | 不使用 |735| 项目[子代理](/docs/zh-CN/sub-agents#hooks-in-subagent-frontmatter)中的 Frontmatter hooks、项目 [`@skills-dir` 插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 和来自存储库或 `--add-dir` 目录的 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目 | 不使用,不提供对话框 | 不使用 |

736| 来自存储库或 `--add-dir` 目录的子代理 frontmatter 中的内联 [`mcpServers`](/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent)。在 v2.1.238 之前,Claude Code 在两种情况下都加载这些服务器 | 不使用,不提供对话框 | 不使用 |736| 来自存储库或 `--add-dir` 目录的子代理 frontmatter 中的内联 [`mcpServers`](/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent)。在 v2.1.238 之前,Claude Code 在两种情况下都加载这些服务器 | 不使用,不提供对话框 | 不使用 |

737| `.mcp.json` 中的服务器,包括存储库[在其自己的设置中批准的](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust)服务器 | Claude Code 在连接它们之前询问您。存储库自己的批准不计数 | 连接而不询问,无论是否批准。SDK 仅在 `settingSources` 包括项目设置时加载它们。同一文件夹中的 `claude mcp list` 仍然将此类服务器报告为待处理 |737| `.mcp.json` 中的服务器,包括存储库[在其自己的设置中批准的](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust)服务器 | Claude Code 在连接它们之前询问您。存储库自己的批准不计数 | 连接而不询问,无论是否批准。SDK 仅在 `settingSources` 包括项目设置时加载它们。同一文件夹中的 `claude mcp list` 仍然将此类服务器报告为待处理 |

738| `.mcp.json` 中服务器上的 [`headersHelper`](/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs)。在 v2.1.238 之前,Claude Code 在两种情况下都运行辅助程序 | 在您接受信任对话框之前不运行,对话框再次出现命名声明辅助程序的位置。Claude Code 仅使用其静态 `headers` 连接服务器直到那时 | 不运行。Claude Code 仅使用其静态 `headers` 连接服务器,并为每个服务器向 stderr 打印 [`headersHelper not run`](/docs/zh-CN/errors#headershelper-not-run) 行 |738| `.mcp.json` 中服务器上的 [`headersHelper`](/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs)。在 v2.1.238 之前,Claude Code 在两种情况下都运行辅助程序 | 在您接受信任对话框之前不运行,对话框再次出现命名声明辅助程序的位置。Claude Code 仅使用其静态 `headers` 连接服务器直到那时 | 不运行。Claude Code 仅使用其静态 `headers` 连接服务器,并为每个服务器向 stderr 打印 [`headersHelper not run`](/docs/zh-CN/errors#headershelper-not-run) 行 |

platforms.md +3 −3

Details

34集成让 Claude 与代码库外的服务协作。34集成让 Claude 与代码库外的服务协作。

35 35 

36| 集成 | 功能 | 用途 |36| 集成 | 功能 | 用途 |

37| :-------------------------------------- | :--------------------------------- | :-------------------------------------------- |37| :----------------------------------------------- | :--------------------------------- | :-------------------------------------------- |

38| [Chrome](/docs/zh-CN/chrome) | 使用您登录的会话控制浏览器 | 测试 Web 应用、填充表单、自动化没有 API 的网站 |38| [Chrome](/docs/zh-CN/chrome) | 使用您登录的会话控制浏览器 | 测试 Web 应用、填充表单、自动化没有 API 的网站 |

39| [GitHub Actions](/docs/zh-CN/github-actions) | 在 CI 管道中运行 Claude | 自动化 PR 审查、问题分类、计划维护 |39| [GitHub Actions](/docs/zh-CN/github-actions) | 在 CI 管道中运行 Claude | 自动化 PR 审查、问题分类、计划维护 |

40| [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd) | 与 GitHub Actions 相同,但用于 GitLab | GitLab 上的 CI 驱动自动化 |40| [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd) | 与 GitHub Actions 相同,但用于 GitLab | GitLab 上的 CI 驱动自动化 |

41| [Code Review](/docs/zh-CN/code-review) | 自动审查每个 PR | 在人工审查前捕获错误 |41| [Code Review](/docs/zh-CN/code-review) | 自动审查每个 PR | 在人工审查前捕获错误 |

42| [Slack](/docs/zh-CN/slack) | 响应频道中的 `@Claude` 提及 | 将错误报告转换为团队聊天中的拉取请求 |42| [Slack](/docs/zh-CN/slack) | 响应频道中的 `@Claude` 提及 | 将错误报告转换为团队聊天中的拉取请求 |

43| [Claude Tag](/docs/zh-CN/claude-tag) | 以您组织的共享身份运行 `@Claude`,具有管理员配置的访问权限 | Team 和 Enterprise 计划上的共享团队访问,而不是按用户的 Slack 会话 |43| [Claude Tag](https://claude.com/docs/claude-tag) | 以您组织的共享身份运行 `@Claude`,具有管理员配置的访问权限 | Team 和 Enterprise 计划上的共享团队访问,而不是按用户的 Slack 会话 |

44 44 

45对于此处未列出的集成,[MCP 服务器](/docs/zh-CN/mcp)和[连接器](/docs/zh-CN/desktop#connect-external-tools)让您连接几乎任何东西:Linear、Notion、Google Drive 或您自己的内部 API。45对于此处未列出的集成,[MCP 服务器](/docs/zh-CN/mcp)和[连接器](/docs/zh-CN/desktop#connect-external-tools)让您连接几乎任何东西:Linear、Notion、Google Drive 或您自己的内部 API。

46 46 


87* [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd):GitLab 的相同功能87* [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd):GitLab 的相同功能

88* [Code Review](/docs/zh-CN/code-review):每个拉取请求上的自动审查88* [Code Review](/docs/zh-CN/code-review):每个拉取请求上的自动审查

89* [Slack](/docs/zh-CN/slack):从团队聊天发送任务,获取 PR 返回89* [Slack](/docs/zh-CN/slack):从团队聊天发送任务,获取 PR 返回

90* [Claude Tag](/docs/zh-CN/claude-tag):在 Team 和 Enterprise 计划上以您组织的共享身份运行 `@Claude`90* [Claude Tag](https://claude.com/docs/claude-tag):在 Team 和 Enterprise 计划上以您组织的共享身份运行 `@Claude`

91 91 

92<h3 id="remote-access">92<h3 id="remote-access">

93 远程访问93 远程访问

plugin-dependencies.md +0 −267 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 约束插件依赖版本

6 

7> 在插件依赖上声明版本约束,并将精选插件集合捆绑在一个安装后面。

8 

9插件可以通过在 `plugin.json` 或其 marketplace 条目中列出其他插件来依赖它们。默认情况下,依赖会跟踪最新可用版本,因此上游发布可能会在没有警告的情况下更改你的插件下的依赖。版本约束让你可以将依赖保持在经过测试的版本范围内,直到你选择升级。

10 

11当你安装声明了依赖的插件时,Claude Code 会自动解析并安装它们,除了其 marketplace 条目具有 [`command` 源](/docs/zh-CN/plugin-marketplaces#how-users-accept-the-command) 或 [`headersHelper`](/docs/zh-CN/plugin-marketplaces#how-users-accept-a-headershelper-command) 的依赖,你需要先自己安装。之后,`/reload-plugins`、依赖插件 marketplace 的自动更新、在依赖插件上重新运行 `claude plugin install`,以及 `claude plugin marketplace add` 都会在相同规则下安装任何尚未安装的声明依赖;如果某个依赖保持未解决状态,请参阅[解决依赖错误](#resolve-dependency-errors)。

12 

13本指南适用于在 `plugin.json` 中声明依赖的插件作者和标记发布的 marketplace 维护者。这里的依赖是其他插件;对于插件本身使用的 npm 和 Bun 包,请参阅 [Node.js 包依赖](/docs/zh-CN/plugins-reference#node-js-package-dependencies)。要安装具有依赖的插件,请参阅[发现和安装插件](/docs/zh-CN/discover-plugins)。有关完整的 manifest 架构,请参阅[插件参考](/docs/zh-CN/plugins-reference)。

14 

15<h2 id="why-constrain-dependency-versions">

16 为什么要约束依赖版本

17</h2>

18 

19考虑一个内部 marketplace,其中两个团队发布插件。平台团队维护 `secrets-vault`,这是一个包装 secrets 后端的 MCP 服务器。部署团队维护 `deploy-kit`,它在部署期间调用 `secrets-vault` 来获取凭证。

20 

21`deploy-kit` 针对 `secrets-vault` v2.1.0 进行了测试。没有版本约束的情况下,下次平台团队标记一个重命名 MCP 工具的发布时,自动更新会将每个工程师的 `secrets-vault` 移动到新版本,`deploy-kit` 就会中断。

22 

23有了版本约束,`deploy-kit` 声明它需要 `secrets-vault` 在 `~2.1.0` 范围内。安装了 `deploy-kit` 的工程师会停留在最高匹配的 `2.1.x` 补丁版本上。部署团队通过发布具有更宽松约束的新 `deploy-kit` 版本,按照自己的时间表进行升级。

24 

25<h2 id="declare-a-dependency-with-a-version-constraint">

26 声明具有版本约束的依赖

27</h2>

28 

29在插件的 `.claude-plugin/plugin.json` 的 `dependencies` 数组中列出依赖。

30 

31以下 manifest 声明了一个无版本依赖和一个受约束的依赖:

32 

33```json .claude-plugin/plugin.json theme={null}

34{

35 "name": "deploy-kit",

36 "version": "3.1.0",

37 "dependencies": [

38 "audit-logger",

39 { "name": "secrets-vault", "version": "~2.1.0" }

40 ]

41}

42```

43 

44条目可以是仅包含插件名称的裸字符串,如 `"audit-logger"` 在 `deploy-kit` manifest 中,它依赖于该插件的 marketplace 提供的任何版本。为了获得更多控制,请使用具有以下字段的对象:

45 

46| 字段 | 类型 | 描述 |

47| :------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

48| `name` | string | 插件名称。在与声明插件相同的 marketplace 中解析。必需。 |

49| `version` | string | 一个 [semver 范围](https://github.com/npm/node-semver#ranges),例如 `~2.1.0`、`^2.0`、`>=1.4` 或 `=2.1.0`。依赖会在满足此范围的最高标记版本处获取。 |

50| `marketplace` | string | 一个不同的 marketplace 来在其中解析 `name`。跨 marketplace 依赖被阻止,除非目标 marketplace 在根 marketplace 的 `marketplace.json` 中的 [`allowCrossMarketplaceDependenciesOn`](#depend-on-a-plugin-from-another-marketplace) 中列出。 |

51 

52预发布版本(如 `2.0.0-beta.1`)被排除,除非你的范围使用预发布后缀(如 `^2.0.0-0`)选择加入。

53 

54<h2 id="bundle-plugins-for-a-team">

55 为团队捆绑 plugins

56</h2>

57 

58除了必需的 `name` 之外,plugin manifest 可以仅包含一个 `dependencies` 数组。安装它会拉取每个依赖项,这使其成为在一个安装后面打包精选 plugin 集的一种方式。

59 

60例如,平台团队可以在内部 marketplace 中发布特定角色的捆绑包,这样工程师只需运行一次 `claude plugin install`,而不是分别安装每个工具:

61 

62```json .claude-plugin/plugin.json theme={null}

63{

64 "name": "backend-standard",

65 "version": "1.0.0",

66 "description": "Standard plugin set for backend engineers",

67 "dependencies": [

68 "secrets-vault",

69 "deploy-kit",

70 { "name": "db-migrate", "version": "^3.0" },

71 "oncall-runbook"

72 ]

73}

74```

75 

76安装 `backend-standard` 会解析并安装所有四个依赖项。

77 

78要稍后向标准集添加工具,请发布新的 `backend-standard` 版本并添加额外的依赖项。除非 marketplace [自动更新](/docs/zh-CN/discover-plugins#configure-auto-updates),工程师可以通过以下两种方式之一获取新版本:

79 

80* 在 `/plugin` 中为 marketplace 启用自动更新。下一次自动更新会将捆绑包移至新版本并安装它添加的任何依赖项。

81* 运行 `claude plugin update backend-standard`,然后运行 `/reload-plugins` 以安装新添加的依赖项。

82 

83要在整个组织中推出捆绑包,请将捆绑 plugin 添加到[托管设置](/docs/zh-CN/settings-reference#enabledplugins)中的 `enabledPlugins`。

84 

85<h2 id="depend-on-a-plugin-from-another-marketplace">

86 依赖来自另一个 marketplace 的插件

87</h2>

88 

89默认情况下,Claude Code 拒绝自动安装位于与声明它的插件不同的 marketplace 中的依赖。这可以防止一个 marketplace 无声地从你未审查的来源拉入插件。

90 

91要允许这样做,根 marketplace 的维护者将目标 marketplace 名称添加到 `marketplace.json` 中的 `allowCrossMarketplaceDependenciesOn`。根 marketplace 是托管用户正在安装的插件的那个;只有其允许列表被查询,因此信任不会通过中间 marketplace 链接。

92 

93以下 `marketplace.json` 允许 `deploy-kit` 依赖来自 `acme-shared` 的插件:

94 

95```json .claude-plugin/marketplace.json theme={null}

96{

97 "name": "acme-tools",

98 "owner": { "name": "Acme" },

99 "allowCrossMarketplaceDependenciesOn": ["acme-shared"],

100 "plugins": [

101 {

102 "name": "deploy-kit",

103 "source": "./deploy-kit",

104 "dependencies": [

105 { "name": "audit-logger", "marketplace": "acme-shared" }

106 ]

107 }

108 ]

109}

110```

111 

112如果字段缺失或不包含目标 marketplace,安装会失败并显示 `cross-marketplace` 错误,命名要设置的字段。用户仍然可以手动先安装依赖,这会满足约束而无需更改允许列表。

113 

114<h2 id="test-a-plugin-and-its-dependency-locally">

115 在本地测试插件及其依赖项

116</h2>

117 

118如果你同时开发一个插件和它所依赖的插件,请使用 `--plugin-dir` 加载两者:

119 

120```bash theme={null}

121claude --plugin-dir ./my-dependency --plugin-dir ./my-plugin

122```

123 

124依赖项的本地副本满足你的插件的依赖项条目,即使该条目命名了一个marketplace,所以你不需要从其marketplace安装依赖项。Claude Code不会对本地副本检查[版本约束](#declare-a-dependency-with-a-version-constraint),所以本地 `plugin.json` 不需要 `version`。在v2.1.242之前,命名marketplace的依赖项条目从不匹配本地副本,Claude Code会在加载时禁用你的插件。

125 

126当两个插件位于同一个父文件夹中时,你可以将该文件夹传递给 `--plugin-dir` 一次。如果该文件夹本身不是插件,Claude Code会加载每个具有 `.claude-plugin/plugin.json` 的子文件夹。需要Claude Code v2.1.265或更高版本。

127 

128如果你还没有从其marketplace安装依赖项,当本地副本消失时,你的插件会停止加载:

129 

130* **你禁用了本地副本**:Claude Code会在下一次插件加载时禁用你的插件。对于命名marketplace的依赖项条目,Claude Code会报告 `Dependency "<name>@inline" is disabled — enable it or remove the dependency`;对于裸名条目,它会按其裸名报告依赖项。`<name>@inline` 是Claude Code识别每个 `--plugin-dir` 和 `--plugin-url` 插件的方式。

131* **你启动了一个没有依赖项的 `--plugin-dir` 标志的会话**:Claude Code会报告依赖项未安装。再次传递该标志,或从其marketplace安装依赖项。

132 

133<h2 id="tag-plugin-releases-for-version-resolution">

134 用于版本解析的标签插件发布

135</h2>

136 

137Claude Code 针对托管依赖项的存储库上的 git 标签解析版本约束:对于 `github`、`url` 和 `git-subdir` [插件源](/docs/zh-CN/plugin-marketplaces#plugin-sources),使用插件自己的存储库;对于市场通过相对路径引用的插件,使用市场存储库。为了让 Claude Code 找到依赖项的可用版本,上游插件的发布必须使用特定的命名约定进行标记。

138 

139将每个发布标记为 `{plugin-name}--v{version}`,其中 `{version}` 与该提交的 `plugin.json` 中的 `version` 字段匹配。从插件目录运行:

140 

141```bash theme={null}

142claude plugin tag --push

143```

144 

145`claude plugin tag` 命令从插件的清单和封闭的市场条目派生标签名称。在创建标签之前,它验证插件内容,检查 `plugin.json` 和市场条目是否在版本上一致,要求插件目录下的工作树干净,如果标签已存在则拒绝。

146 

147* `--push` 将标签推送到 `origin` 远程,因此存储库需要配置 `origin` 远程。传递 `--remote` 以推送到不同的远程。

148* 如果推送失败,标签仍会在本地创建,命令以错误退出。

149* 使用 `--push`,成功运行以 `Created tag secrets-vault--v2.1.0` 和 `Pushed to origin` 结束,其中最后一行命名推送到的远程。不使用 `--push`,命令改为打印要运行的 `git push` 命令。

150* `--dry-run` 打印将被标记的内容而不创建它。

151 

152直接运行 `git tag secrets-vault--v2.1.0` 是等效的,如果你自己保持 `plugin.json` 和市场条目同步。

153 

154插件名称前缀允许一个市场存储库托管多个具有独立版本线的插件。`--v` 分隔符被解析为完整插件名称的前缀匹配,因此包含连字符的插件名称被正确处理。

155 

156当你安装声明 `{ "name": "secrets-vault", "version": "~2.1.0" }` 的插件时,Claude Code 列出托管 `secrets-vault` 的存储库上的标签,筛选以 `secrets-vault--v` 开头的标签,并获取满足 `~2.1.0` 的最高版本。如果插件自己的存储库上没有标签满足该范围,安装失败并显示 `Dependency "secrets-vault@acme-tools" has no git tag satisfying ~2.1.0`,这命名了依赖项及其市场。对于没有匹配标签的相对路径插件,Claude Code 改为安装市场的当前副本,并在插件加载时检查约束。

157 

158对于市场通过相对路径引用的插件,添加为本地文件夹路径的市场在文件夹是 git 存储库时以相同方式解析标签。这需要 Claude Code v2.1.196 或更高版本。在两种情况下,Claude Code 改为从文件夹的当前内容安装依赖项:

159 

160* 早期版本不从本地文件夹市场读取标签,因此受约束的依赖项仅在该副本满足范围时加载。

161* 不是 git 存储库的本地文件夹没有标签,无论版本如何。

162 

163已解析标签的 semver 与 `plugin.json` 的 `version` 分开记录,因此约束检查使用实际获取的标签,即使该提交处的 `plugin.json` 有陈旧值。标签解析安装的缓存目录名称包括 12 字符的提交 SHA 后缀,因此如果维护者强制将标签移动到不同的提交,下次安装会获得新的缓存目录,而不是重用陈旧内容。

164 

165<Note>

166 对于具有 `npm`、`archive` 或 `command` [插件源](/docs/zh-CN/plugin-marketplaces#plugin-sources) 的依赖项,约束不控制获取哪个版本,因为基于标签的解析仅适用于 git 支持的源。约束仍在加载时检查,如果安装的版本不满足它,依赖插件将被禁用并显示 `dependency-version-unsatisfied`。对于 `command` 源,Claude Code 检查依赖项的 `plugin.json` 中的版本并忽略内容哈希后缀;其 `plugin.json` 未设置版本的依赖项不满足任何约束,因此在约束它之前设置一个。

167 

168 Claude Code 从不自己安装具有 `command` 源的依赖项,因此用户 [首先安装它](/docs/zh-CN/plugin-marketplaces#how-users-accept-the-command)。Claude Code 也从不在依赖项的市场条目上运行 `headersHelper`,因此用户 [首先安装该插件](/docs/zh-CN/plugin-marketplaces#how-users-accept-a-headershelper-command)。

169</Note>

170 

171<h2 id="how-constraints-interact">

172 约束如何相互作用

173</h2>

174 

175当多个已安装的插件约束同一依赖时,Claude Code 会交集它们的范围,并将依赖解析为满足所有范围的最高版本。下表显示了常见组合如何解析。

176 

177| 插件 A 需要 | 插件 B 需要 | 结果 |

178| :------- | :------ | :---------------------------------------------- |

179| `^2.0` | `>=2.1` | 在最高 `2.x` 标签处进行一次安装,该标签在 `2.1.0` 或更高版本。两个插件都加载。 |

180| `~2.1` | `~3.0` | 插件 B 的安装失败,显示 `range-conflict`。插件 A 和依赖保持原样。 |

181| `=2.1.0` | 无 | 依赖保持在 `2.1.0`。在安装了插件 A 时,自动更新会跳过较新版本。 |

182 

183自动更新在满足每个已安装插件范围的最高 git 标签处获取受约束的依赖,而不是在 marketplace 的最新版本处,因此依赖继续在其允许的范围内接收更新。如果没有标签满足所有范围,自动更新会跳过该依赖,并在 `/plugin` 错误选项卡中列出跳过情况,命名约束插件。

184 

185当你卸载最后一个约束依赖的插件时,该依赖不再被保持,并在下次更新时恢复跟踪其 marketplace 条目。

186 

187<h2 id="enable-or-disable-a-plugin-with-dependencies">

188 启用或禁用具有依赖的插件

189</h2>

190 

191本部分涵盖从市场安装的插件。对于使用 `--plugin-dir` 加载的副本,请参阅[在本地测试插件及其依赖](#test-a-plugin-and-its-dependency-locally)。

192 

193启用插件也会启用它依赖的插件,禁用插件会被阻止,如果另一个已启用的插件仍然需要它。

194 

195当你启用插件时,Claude Code 也会在同一范围内启用其依赖。如果依赖有自己的依赖,Claude Code 也会启用那些。成功消息会列出与你命名的插件一起启用的其他内容。如果依赖无法启用,命令会拒绝并告诉你什么在阻止以及如何修复:

196 

197| 条件 | 结果 |

198| :-------------------------- | :------------------------------------------ |

199| 依赖未安装 | 启用失败并为每个缺失的依赖打印 `claude plugin install` 命令。 |

200| 依赖被你的组织的插件策略阻止 | 启用失败并命名被阻止的依赖。 |

201| 依赖在优先级高于目标范围的范围内设置为 `false` | 启用失败。在该范围内启用依赖,或传递 `--scope` 来在那里写入。 |

202| 所有依赖都已安装且被允许 | 启用成功并为插件和每个在目标范围内尚未启用的依赖写入 `true`。 |

203 

204即使依赖在其清单中设置了 [`defaultEnabled: false`](/docs/zh-CN/plugins-reference#default-enablement),这也成立,因为 Claude Code 为其写入显式 `true`。同样适用于安装:为满足活跃插件而引入的依赖会以 `true` 安装,无论其自身默认值如何。

205 

206当你禁用插件时,Claude Code 会拒绝,如果另一个已启用的插件仍然依赖它。错误会命名依赖它的插件,并给你一个链式命令,以正确的顺序禁用它们,以你要求的那个结尾。

207 

208例如,如果 `deploy-kit` 依赖 `secrets-vault`,单独禁用 `secrets-vault` 会失败,输出类似于以下内容:

209 

210```text theme={null}

211secrets-vault is still required by deploy-kit. Disable that plugin first, or

212disable everything together: claude plugin disable deploy-kit@acme-tools && claude plugin disable secrets-vault@acme-tools

213```

214 

215从错误中复制链式命令以一步禁用完整集合。

216 

217<h2 id="remove-orphaned-auto-installed-dependencies">

218 删除孤立的自动安装依赖

219</h2>

220 

221自动安装的依赖在安装它们的插件被卸载后仍会保留在磁盘上,以防你重新安装依赖插件或想继续直接使用该依赖。要清理它们,运行 `claude plugin prune` 来列出不再有任何已安装插件需要的自动安装依赖,并在确认提示后删除它们。

222 

223```bash theme={null}

224claude plugin prune

225```

226 

227如果没有任何内容符合删除条件,该命令会打印 `Nothing to prune` 并显示原因后退出。这是全新安装时的预期输出,不是错误。

228 

229默认情况下,prune 在用户范围内运行,并在删除任何内容前要求确认:

230 

231* `--scope project` 或 `--scope local` 针对不同的范围。

232* `--dry-run` 列出将被删除的内容而不进行任何更改。

233* `-y` 跳过确认提示。当 stdin 或 stdout 不是终端时,prune 会列出孤立项并退出,除非你传递 `-y`。

234 

235要在卸载过程中进行 prune,请将 `--prune` 传递给 `claude plugin uninstall`。删除命名的插件后,Claude Code 会扫描并删除现在孤立的任何自动安装依赖。你自己安装的插件永远不会被 prune,只有通过另一个插件的 `dependencies` 数组自动安装的插件才会被 prune。

236 

237相同的确认行为适用。当 stdin 或 stdout 不是终端时,卸载仍会完成,但 prune 步骤会列出孤立项,除非你传递 `-y`,否则不会删除任何内容。

238 

239例如,要卸载 `deploy-kit` 并清理它留下的依赖:

240 

241```bash theme={null}

242claude plugin uninstall deploy-kit --prune

243```

244 

245<h2 id="resolve-dependency-errors">

246 解决依赖错误

247</h2>

248 

249依赖问题会在 `claude plugin list` 和 `/plugin` 界面中显示为描述性错误消息,而不是此表中的字面代码。Claude Code 会禁用受影响的插件,直到你解决错误。下表列出了最常见的错误及其解决方法。

250 

251| 错误 | 含义 | 如何解决 |

252| :------------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ |

253| `dependency-unsatisfied` | 声明的依赖未安装,或已安装但被禁用。 | 运行错误消息中显示的 `claude plugin install` 命令。如果依赖的 marketplace 尚未配置,使用 `claude plugin marketplace add` 添加它,Claude Code 会自动解析依赖。如果依赖被禁用,请启用它。 |

254| `range-conflict` | 依赖的版本要求无法组合。错误消息命名原因:没有版本满足所有范围,范围不是有效的 semver 语法,或组合范围太复杂而无法交集。 | 卸载或更新其中一个冲突的插件,修复任何无效的 `version` 字符串,简化长 `\|\|` 链,或要求上游作者扩大其约束。 |

255| `dependency-version-unsatisfied` | 已安装的依赖版本在此插件的声明范围之外。 | 运行 `claude plugin install <dependency>@<marketplace>` 以根据所有当前约束重新解析依赖。 |

256| `no-matching-tag` | 依赖的存储库没有满足范围的 `{name}--v*` 标签。 | 检查上游是否使用上述约定标记了发布,或放宽你的范围。 |

257 

258要以编程方式检查这些错误,请运行 `claude plugin list --json`。有问题的插件包含一个 `errors` 字段列出这些错误。加载正常的插件会省略该字段。

259 

260<h2 id="see-also">

261 另请参阅

262</h2>

263 

264* [创建插件](/docs/zh-CN/plugins):使用 skills、agents 和 hooks 构建插件

265* [创建和分发插件 marketplace](/docs/zh-CN/plugin-marketplaces):为你的团队托管插件

266* [插件参考](/docs/zh-CN/plugins-reference#plugin-manifest-schema):完整的 `plugin.json` 架构

267* [版本管理](/docs/zh-CN/plugins-reference#version-management):插件自身版本如何被解析并用作缓存键

plugin-evals.md +89 −50

Details

6 6 

7> 为您的 Claude Code 插件编写 eval 用例,使用 claude plugin eval 运行它们,对结果进行评分,与无插件基线进行比较,并在 CI 中基于分数进行门控。7> 为您的 Claude Code 插件编写 eval 用例,使用 claude plugin eval 运行它们,对结果进行评分,与无插件基线进行比较,并在 CI 中基于分数进行门控。

8 8 

9`claude plugin eval` 针对一套测试用例运行您的[插件](/docs/zh-CN/plugins)并对结果进行评分。每个用例都是一个现实的提示加上一个或多个评分器。评分器是对 Claude 生成的内容的通过/失败检查,例如对回复的正则表达式、是否调用了特定工具,或者由第二个模型判断回复的评分标准。9`claude plugin eval` 针对一套测试用例运行您的[插件](/docs/zh-CN/plugins/overview)并对结果进行评分。每个用例都是一个现实的提示加上一个或多个评分器。评分器是对 Claude 生成的内容的通过/失败检查,例如对回复的正则表达式、是否调用了特定工具,或者由第二个模型判断回复的评分标准。

10 10 

11您不必手动编写该套件;`claude plugin eval init` 会询问您关于您的插件的问题,提议用例和评分器,尝试它们,并编写文件。您也可以要求 Claude 从您已经打开的会话中执行相同操作。11您不必手动编写该套件;`claude plugin eval init` 会询问您关于您的插件的问题,提议用例和评分器,尝试它们,并编写文件。您也可以要求 Claude 从您已经打开的会话中执行相同操作。

12 12 

13使用 evals 来衡量您的插件可靠地引导 Claude 达到正确结果的程度,在您更改插件或发布新模型时捕捉回归,以及查看与无插件相比插件的贡献。13使用 evals 来:

14 14 

15本页面适用于拥有可工作插件并想要测试其行为的插件和技能作者,以及在 CI 中对插件更改进行门控的团队。其用例格式与[技能创建者插件](/docs/zh-CN/skills#run-evals-with-skill-creator)使用的 `evals/evals.json` 文件分开。要创建插件,请参阅[创建插件](/docs/zh-CN/plugins);要检查插件文件的语法和架构错误而不是其行为,请使用 [`claude plugin validate`](/docs/zh-CN/plugins-reference#plugin-validate)。15* 衡量您的插件可靠地引导 Claude 达到正确结果的程度

16* 在您更改插件或发布新模型时捕捉回归

17* 查看与无插件相比插件的贡献

18 

19本页面适用于拥有可工作插件并想要测试其行为的插件和技能作者,以及在 CI 中对插件更改进行门控的团队。其用例格式与[技能创建者插件](/docs/zh-CN/skills#run-evals-with-skill-creator)使用的 `evals/evals.json` 文件分开。要创建插件,请参阅[创建插件](/docs/zh-CN/plugins/create);要检查插件文件的语法和架构错误而不是其行为,请使用 [`claude plugin validate`](/docs/zh-CN/plugins/cli-reference#plugin-validate)。

16 20 

17<Note>21<Note>

18 每次 eval 运行和每个评分器都是对您账户的真实模型调用,计入您计划的使用量或您的 API 账单,因此请先检查[要求](#requirements)。然后[创建您的第一个 eval 套件](#create-your-first-eval-suite),或者如果您已经有一个,请转到[在 CI 中运行 evals](#run-evals-in-ci)。22 每次 eval 运行和每个评分器都是对您账户的真实模型调用,计入您计划的使用量或您的 API 账单,因此请先检查[要求](#requirements)。然后[创建您的第一个 eval 套件](#create-your-first-eval-suite),或者如果您已经有一个,请转到[在 CI 中运行 evals](#run-evals-in-ci)。


25要运行插件 evals,你需要:29要运行插件 evals,你需要:

26 30 

27* Claude Code v2.1.269 或更高版本。运行 `claude --version` 检查,运行 `claude update` 升级。31* Claude Code v2.1.269 或更高版本。运行 `claude --version` 检查,运行 `claude update` 升级。

28* 一个包含 `plugin.json` 或 `.claude-plugin/plugin.json` 清单的插件目录,或一个[技能目录插件](/docs/zh-CN/plugins-reference#skills-directory-plugins)。32* 一个包含 `plugin.json` 或 `.claude-plugin/plugin.json` 清单的插件目录,或一个[技能目录插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)。

29* 与你的常规 Claude Code 会话相同的身份验证和模型提供商。Eval 运行、评判评分器和 `claude plugin eval init` 使用你的凭证调用模型,因此它们计入你的计划使用限制或 API 账单。当命令报告成本时,该数字是这些调用的[列表价格估计](/docs/zh-CN/costs)。33* 与你的常规 Claude Code 会话相同的身份验证和模型提供商。Eval 运行、评判评分器和 `claude plugin eval init` 使用你的凭证调用模型,因此它们计入你的计划使用限制或 API 账单。当命令报告成本时,该数字是这些调用的[列表价格估计](/docs/zh-CN/costs)。

30 34 

31<h2 id="how-an-eval-run-works">35<h2 id="how-an-eval-run-works">


50 无插件基线54 无插件基线

51</h3>55</h3>

52 56 

53仅凭高分不能告诉你插件是否有帮助,因为 Claude 可能在没有插件的情况下也能做得很好。为了区分两者,默认情况下每个用例的运行会重复进行,不加载任何插件,你会得到两个分数,`WITH` 和 `W/OUT`。它们的差异 `Δ` 是插件贡献的内容。如果一个用例在有插件和没有插件的情况下都得分 1.0,那么插件不是使其通过的原因。这两组运行称为 with-arm 和 without-arm;[与无插件基线比较](#compare-against-a-no-plugin-baseline)涵盖了评分器如何在它们之间评分以及如何关闭基线。57仅凭高分不能告诉你插件是否有帮助,因为 Claude 可能在没有插件的情况下也能做得很好。为了区分两者,默认情况下每个用例的运行会重复进行,不加载任何插件,你会得到两个分数,`WITH` 和 `W/OUT`。它们的差异 `Δ` 是插件贡献的内容。如果一个用例在有插件和没有插件的情况下都得分 1.0,那么插件不是使其通过的原因。

58 

59这两组运行称为 with-arm 和 without-arm;[与无插件基线比较](#compare-against-a-no-plugin-baseline)涵盖了评分器如何在它们之间评分以及如何关闭基线。

54 60 

55<h2 id="create-your-first-eval-suite">61<h2 id="create-your-first-eval-suite">

56 创建你的第一个 eval 套件62 创建你的第一个 eval 套件


184FAIL if <what a wrong or missing response looks like>.190FAIL if <what a wrong or missing response looks like>.

185```191```

186 192 

187然后添加第二个评分器来检查你的技能是否是产生答案的原因。创建 `evals/first-case/graders/skill-fired.md`,将 `your-skill-name` 替换为你的技能 `SKILL.md` 中的 `name`:193然后添加第二个评分器来检查你的技能是否是产生答案的原因。创建 `evals/first-case/graders/skill-fired.md`,将 `your-skill-name` 替换为技能在 `skills/` 下的目录名称,这是 Claude 调用它的名称:

188 194 

189```markdown theme={null}195```markdown theme={null}

190---196---


234在两个 arm 运行中,某些评分器报告为 `scored: false`。像"技能被调用"这样的检查在没有插件的情况下永远无法通过,所以计数会将 without-arm 推向零并夸大 `Δ`。为了保持两个 arm 可比较,Claude Code 在两个 arm 中排除此类评分器的分数,并在 with-arm 中仅将其报告为通过/失败指示器。这包括:240在两个 arm 运行中,某些评分器报告为 `scored: false`。像"技能被调用"这样的检查在没有插件的情况下永远无法通过,所以计数会将 without-arm 推向零并夸大 `Δ`。为了保持两个 arm 可比较,Claude Code 在两个 arm 中排除此类评分器的分数,并在 with-arm 中仅将其报告为通过/失败指示器。这包括:

235 241 

236* 每个 `tool_used` 评分器,其 `tool` 是 `Skill`242* 每个 `tool_used` 评分器,其 `tool` 是 `Skill`

243* 每个 `regex` 评分器,其 `target: mock_calls` 和每个 `llm` 评分器,其 `focus: mock_calls`,当每个[模拟服务器](#mock-mcp-servers)在用例中是你的插件声明的

237* 任何你标记为 `arm: with-only` 的评分器244* 任何你标记为 `arm: with-only` 的评分器

238 245 

239如果用例中的每个评分器都是其中之一,它们会被正常评分,因为没有什么可评分的。在评分器上设置 `arm: both` 以在两个 arm 中评分它,无论如何,这是你想要的"不得调用技能"检查,带有 `min: 0` 和 `max: 0`。在 `--ablation none` 下,没有任何内容被排除,所以相同的套件在两种模式中可能产生不同的绝对分数。246三个设置改变了该排除:

247 

248* **每个评分器都被排除**:如果用例中的每个评分器都在排除集中,它们会被正常评分,因为没有什么可评分的。

249* **`arm: both`**:在评分器上设置 `arm: both` 以在两个 arm 中评分它,无论如何,这是你想要的"不得调用技能"检查,带有 `min: 0` 和 `max: 0`。

250* **`--ablation none`**:在 `--ablation none` 下,没有任何内容被排除,所以相同的套件在两种模式中可能产生不同的绝对分数。

240 251 

241<h3 id="use-a-different-eval-directory">252<h3 id="use-a-different-eval-directory">

242 使用不同的 eval 目录253 使用不同的 eval 目录


259 播种工作区或对话270 播种工作区或对话

260</h3>271</h3>

261 272 

262每次运行都在空工作目录中开始。当用例需要的不仅仅是提示时,在 `prompt.md` 旁边添加一个 `case.yaml`,带有 `context` 块。273每次运行都在空工作区中开始。当用例需要的不仅仅是提示时,在 `prompt.md` 旁边添加一个 `case.yaml`,带有 `context` 块:

263 274 

264要首先创建 fixture 文件或 git 存储库,在用例目录中编写 Bash 脚本并在 `context.scaffold_script` 中命名它。脚本作为你在代理沙箱外运行,仅当你传递 `--scaffold` 时,所以仅对你或你的组织编写的套件传递该标志。要继续早期对话,将记录保存为 `.jsonl` 文件并在 `context.history_file` 中命名它,用例的提示成为下一个用户轮次。要让 Claude 在运行期间读取用例中的 fixture 目录,在 `context.add_dirs` 中列出它们。275* **Fixture 文件或 git 存储库**:在用例目录中编写 Bash 脚本并在 `context.scaffold_script` 中命名它。脚本作为你在代理沙箱外运行,仅当你传递 `--scaffold` 时,所以仅对你或你的组织编写的套件传递该标志。

276* **要继续的早期对话**:将记录保存为 `.jsonl` 文件并在 `context.history_file` 中命名它,用例的提示成为下一个用户轮次。

277* **Claude 在运行期间可以读取的 Fixture 目录**:在 `context.add_dirs` 中列出它们。

265 278 

266`case.yaml` 也需要 `schema_version: "1.1"` 和 `name`;[case.yaml 字段](#case-yaml-fields)参考有完整列表。279`case.yaml` 也需要 `schema_version: "1.1"` 和 `name`;[case.yaml 字段](#case-yaml-fields)参考有完整列表。

267 280 


280 Mock MCP 服务器293 Mock MCP 服务器

281</h3>294</h3>

282 295 

283你可以评估一个插件,其技能调用 MCP 工具,而不需要它们后面的真实服务。在 `evals/mocks/<server>/<tool>.md` 下为整个套件放置一个 Markdown 文件,或在用例自己的 `mocks/` 目录下为一个用例,其中 `<server>` 是你的插件[MCP 配置](/docs/zh-CN/plugins-reference#mcp-servers)中服务器的名称。296你可以评估一个插件,其 skills 调用 MCP 工具,而不需要它们后面的真实服务。在 `evals/mocks/<server>/<tool>.md` 下为整个套件放置一个 Markdown 文件,或在用例自己的 `mocks/` 目录下为一个用例,其中 `<server>` 是你的插件的 [MCP 配置](/docs/zh-CN/plugins/components#mcp-servers)中服务器的名称。

284 297 

285运行永远不会启动你的插件的真实 MCP 服务器,除非你要求。Claude Code 在每个服务器自己的名称下注册一个替代品。带有 mock 文件的工具从它回答,并且无需 `--allow-tools` 授予即可允许,没有 mock 文件的工具对 Claude 不可用。完全没有 mocks 的服务器在用例的 `mocked:` 进度线中显示为 `plugin_<plugin>_<server>[not started: no mock]`。298运行永远不会启动你的插件的真实 MCP 服务器,除非你要求。Claude Code 在每个服务器自己的名称下注册一个替代服务器。带有 mock 文件的工具从它回答,并且无需 `--allow-tools` 授予即可允许,没有 mock 文件的工具对 Claude 不可用。完全没有 mocks 的服务器在用例的 `mocked:` 进度行中显示为 `plugin_<plugin>_<server>[not started: no mock]`。

286 299 

287文件的正文是工具返回给 Claude 的内容。这个 mock 代替了名为 `tracker` 的服务器上的 `create_issue` 工具,检查 Claude 发送的输入,并回显标题。将其保存为 `evals/mocks/tracker/create_issue.md`:300文件的正文是工具返回给 Claude 的内容。这个 mock 代替了名为 `tracker` 的服务器上的 `create_issue` 工具,检查 Claude 发送的输入,并回显标题。将其保存为 `evals/mocks/tracker/create_issue.md`:

288 301 


296Created issue #4821: {{input.title}}309Created issue #4821: {{input.title}}

297```310```

298 311 

299使用 `{{input.<field>}}` 从调用的输入插入字段,使用 `{{file:fixtures/{input.<field>}.json}}` 插入 mock 旁边的 fixture 文件的内容。`expect:` 块保护输入。如果调用违反它,运行以分数 0 中止并记录原因,以便用例可以断言你的插件要求服务器执行的操作。设置 `error: true` 以将正文作为工具错误返回,或 `type: agent` 以让小型模型从正文中的指令作为服务器回答。[mock 文件参考](#mock-files)列出了每个键和 `_server.md` 和 `_tools.json` 文件。312mock 文件的正文和 frontmatter 接受这些选项:

313 

314* **替换**:使用 `{{input.<field>}}` 从调用的输入插入字段,使用 `{{file:fixtures/{input.<field>}.json}}` 插入 mock 旁边的 fixture 文件的内容。

315* **`expect:`**:`expect:` 块保护输入。如果调用违反它,运行以分数 0 中止并记录原因,以便用例可以断言你的插件要求服务器执行的操作。

316* **`error: true`**:设置 `error: true` 以将正文作为工具错误返回。

317* **`type: agent`**:设置 `type: agent` 以让小型模型从正文中的指令作为服务器回答。

318 

319[mock 文件参考](#mock-files)列出了每个键和 `_server.md` 和 `_tools.json` 文件。

300 320 

301要评分调用本身,将评分器指向 `target: mock_calls`。321要评分调用本身,将评分器指向 `target: mock_calls`。

302 322 


330| 插件的根目录,例如 `.` | 其 eval 目录下的每个用例,加载该插件 |350| 插件的根目录,例如 `.` | 其 eval 目录下的每个用例,加载该插件 |

331| 单个 `prompt.md` 或 `case.yaml` 文件 | 该用例,加载其所在的插件 |351| 单个 `prompt.md` 或 `case.yaml` 文件 | 该用例,加载其所在的插件 |

332| 已安装的插件(按名称),`name` 或 `name@marketplace` | 已安装副本的 eval 目录中的用例,加载已安装的副本。结果写入当前目录下的 `./evals/results/`,或使用 `--eval-dir` 时写入 `./<dir>/results/` |352| 已安装的插件(按名称),`name` 或 `name@marketplace` | 已安装副本的 eval 目录中的用例,加载已安装的副本。结果写入当前目录下的 `./evals/results/`,或使用 `--eval-dir` 时写入 `./<dir>/results/` |

333| `name@skills-dir` | 相同,用于 [skills-directory 插件](/docs/zh-CN/plugins-reference#skills-directory-plugins) |353| `name@skills-dir` | 相同,用于 [skills-directory 插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) |

334| 省略 | 当前目录作为路径 |354| 省略 | 当前目录作为路径 |

335 355 

336添加 `--case <glob>` 按用例名称过滤,添加 `--tag <tag>` 保留具有任何给定标签的用例。将 target 放在 `--tag`、`--allow-tools` 和 `--json` 之前。前两个接受列表,`--json` 接受可选路径,所以它们每个都读取后面的 target 作为自己的值。356添加 `--case <glob>` 按用例名称过滤,添加 `--tag <tag>` 保留具有任何给定标签的用例。将 target 放在 `--tag`、`--allow-tools` 和 `--json` 之前。前两个接受列表,`--json` 接受可选路径,所以它们每个都读取后面的 target 作为自己的值。


339 授予工具359 授予工具

340</h3>360</h3>

341 361 

342运行永远不会停下来请求权限。需要授予但你没有授予的内置工具,例如 `Bash`、`Write`、`Edit`、`WebFetch` 和 `WebSearch`,会从会话中移除,所以 Claude 根本无法调用它们。允许列表是用例在 `allowed_tools` 中列出的只读工具,来自 `Read`、`Glob`、`Grep`、`NotebookRead`、`Skill`、`Agent`、`TodoWrite` 和任务工具 `TaskCreate`、`TaskGet`、`TaskList`、`TaskUpdate` 和 `TaskStop`,加上你使用 `--allow-tools` 授予的任何工具。该授予适用于运行中的每个用例。要让用例使用 `Bash`、`Write`、`Edit`、`WebFetch` 或 `WebSearch`,请自己授予它们:362运行永远不会停下来请求权限。需要授予但你没有授予的内置工具,例如 `Bash`、`Write`、`Edit`、`WebFetch` 和 `WebSearch`,会从会话中移除,所以 Claude 根本无法调用它们。

363 

364运行仅允许用例在 `allowed_tools` 中列出的只读工具,来自 `Read`、`Glob`、`Grep`、`NotebookRead`、`Skill`、`AskUserQuestion`、`Agent`、`TodoWrite` 和任务工具 `TaskCreate`、`TaskGet`、`TaskList`、`TaskUpdate` 和 `TaskStop`,加上你使用 `--allow-tools` 授予的任何工具。该授予适用于运行中的每个用例。要让用例使用 `Bash`、`Write`、`Edit`、`WebFetch` 或 `WebSearch`,请自己授予它们:

343 365 

344```bash theme={null}366```bash theme={null}

345claude plugin eval . --allow-tools Write Edit "Bash(npm test *)"367claude plugin eval . --allow-tools Write Edit "Bash(npm test *)"

346```368```

347 369 

348当用例请求你没有授予的工具时,运行会在 stderr 上将其列为 `not granted`。[模拟](#mock-mcp-servers) MCP 服务器上的工具不需要授予。真实插件 MCP 服务器上的工具需要服务器启动(使用 `--allow-real-servers` 或 `--mocks off`)和按名称授予,例如 `--allow-tools "mcp__plugin_my-plugin_github__*"`;插件的 MCP 工具命名为 `mcp__plugin_<plugin>_<server>__<tool>`。370当用例请求你没有授予的工具时,进度输出会将其列为 `not granted`。[模拟](#mock-mcp-servers) MCP 服务器上的工具不需要授予。真实插件 MCP 服务器上的工具需要服务器启动(使用 `--allow-real-servers` 或 `--mocks off`)和按名称授予,例如 `--allow-tools "mcp__plugin_my-plugin_github__*"`;插件的 MCP 工具命名为 `mcp__plugin_<plugin>_<server>__<tool>`。

349 371 

350当你以任何形式授予 `Bash` 时,每个命令都在 Claude Code 的 [OS 级沙箱](/docs/zh-CN/sandboxing) 下运行。写入被限制在运行的工作区,你的主目录和 Claude Code 配置不可读,网络访问限制为你使用 `--allow-tools "WebFetch(domain:example.com)"` 授予的域。如果你在没有沙箱后端的机器上授予 Bash 或 PowerShell,Claude Code 会拒绝每次运行而不是无限制地运行它,用例会显示运行错误,通常得分为 0。原生 Windows 没有后端,所以在 WSL2 下运行授予 shell 的套件;在 Linux 上,首先安装 `bubblewrap` 和 `socat`。请参阅 [沙箱先决条件](/docs/zh-CN/sandboxing)。372当你以任何形式授予 `Bash` 时,每个命令都在 Claude Code 的 [OS 级沙箱](/docs/zh-CN/sandboxing) 下运行。写入被限制在运行的工作区,你的主目录和 Claude Code 配置不可读,网络访问限制为你使用 `--allow-tools "WebFetch(domain:example.com)"` 授予的域。如果你在没有沙箱后端的机器上授予 Bash 或 PowerShell,Claude Code 会拒绝每次运行而不是无限制地运行它,用例会显示运行错误,通常得分为 0。原生 Windows 没有后端,所以在 WSL2 下运行授予 shell 的套件;在 Linux 上,首先安装 `bubblewrap` 和 `socat`。请参阅 [沙箱先决条件](/docs/zh-CN/sandboxing)。

351 373 


402| 130 | 中断。部分结果已写入 |424| 130 | 中断。部分结果已写入 |

403| 143 | 已终止,例如由 CI 超时 |425| 143 | 已终止,例如由 CI 超时 |

404 426 

405写入或发布 HTML 报告的问题永远不会改变退出代码。要查看用例得分低的原因,请在本地运行它而不使用 `--json` 以便打印每次运行的进度和评分器行。427写入或发布 HTML 报告的问题永远不会改变退出代码。

406 428 

407CI 运行程序需要 Claude Code 安装和 [环境中的凭证](/docs/zh-CN/authentication),例如 `ANTHROPIC_API_KEY`。没有 `--trust-plugin`,其检出目录 Claude Code 还不信任的作业在没有终端时被拒绝,退出 1,或在运行程序分配一个时在提示处等待。`claude plugin eval init` 需要终端来提出问题;在 CI 中,运行 `claude plugin eval init --bare <name>` 以获取空白模板。429要查看用例得分低的原因,请在本地运行它而不使用 `--json` 以便打印每次运行的进度和评分器行。

430 

431CI 运行程序还需要以下内容:

432 

433* **安装和凭证**:CI 运行程序需要 Claude Code 安装和 [环境中的凭证](/docs/zh-CN/authentication),例如 `ANTHROPIC_API_KEY`。

434* **信任**:没有 `--trust-plugin`,其检出目录 Claude Code 还不信任的作业需要 [首次运行信任提示](#trust-the-plugin-directory),无法询问的运行会被拒绝,退出 1。

435* **CI 中的 `init`**:`claude plugin eval init` 需要终端来提出问题;在 CI 中,运行 `claude plugin eval init --bare <name>` 以获取空白模板。

408 436 

409要保持成本可预测,给快速的每次更改套件仅使用不调用评判者的评分器,在你不需要 `Δ` 的地方使用 `--ablation none`,并将 `partial: true` 文档和具有 `skippedPaidGraders` 的运行排除在你绘制的任何趋势之外。437要保持成本可预测,给快速的每次更改套件仅使用不调用评判者的评分器,在你不需要 `Δ` 的地方使用 `--ablation none`,并将 `partial: true` 文档和具有 `skippedPaidGraders` 的运行排除在你绘制的任何趋势之外。

410 438 


465 信任插件目录493 信任插件目录

466</h3>494</h3>

467 495 

468第一次针对一个目录运行 `claude plugin eval` 时,Claude Code 会在加载任何内容之前询问 `Trust this plugin directory?`,除非你已经在交互式 `claude` 会话中接受了那里的信任提示。在 git 仓库内,回答是会信任整个仓库,对交互式会话也是如此。当 stdin 或 stdout 不是终端时,或在 `--json` 下,运行无法询问并被拒绝,退出代码为 1;传递 `--trust-plugin` 来自己声明信任,仅限于你会在自己机器上运行的插件。你命名而不是作为路径给出的目标,即已安装的插件或 skills 目录插件,会跳过提示。496第一次针对一个目录运行 `claude plugin eval` 时,Claude Code 会在加载任何内容之前询问 `Trust this plugin directory?`,除非你已经在交互式 `claude` 会话中接受了那里的信任提示。在 git 仓库内,回答是会信任整个仓库,对交互式会话也是如此。当 stdin 或 stdout 不是终端时,在 `--json` 下,或当 `CI` 环境变量设置为真值(如 `true`)时,运行无法询问并被拒绝,退出代码为 1;传递 `--trust-plugin` 来自己声明信任,仅限于你会在自己机器上运行的插件。你命名而不是作为路径给出的目标,即已安装的插件或 skills 目录插件,会跳过提示。

497 

498插件和套件的某些部分仅在你为该运行传递其标志时才运行:

469 499 

470插件和套件的某些部分仅在你为该运行传递其标志时才运行:一个案例的 [`scaffold_script`](#add-setup-or-history-with-case-yaml) 带有 `--scaffold`、[超出只读集合的工具](#grant-tools) 带有 `--allow-tools`,以及插件的[真实 MCP 服务器](#mock-mcp-servers) 带有 `--allow-real-servers` 或 `--mocks off`。一个案例的 `allowed_tools` 和一个 skill 自己的 `allowed-tools` frontmatter 无法扩展其中任何一个。当插件附带你没有编写的 hooks,或你启动其真实 MCP 服务器时,除非你在隔离环境(如容器或 CI 运行器)中运行它,否则将其分数视为建议性的,因为 hooks 和服务器在代理的沙箱外运行,可能会接触评分器读取的文件。500* 一个案例的 [`scaffold_script`](#add-setup-or-history-with-case-yaml) 带有 `--scaffold`

501* [超出只读集合的工具](#grant-tools) 带有 `--allow-tools`

502* 插件的[真实 MCP 服务器](#mock-mcp-servers) 带有 `--allow-real-servers` 或 `--mocks off`

503 

504一个案例的 `allowed_tools` 和一个 skill 自己的 `allowed-tools` frontmatter 无法扩展其中任何一个。当插件附带你没有编写的 hooks,或你启动其真实 MCP 服务器时,除非你在隔离环境(如容器或 CI 运行器)中运行它,否则将其分数视为建议性的,因为 hooks 和服务器在代理的沙箱外运行,可能会修改评分器读取的文件。

471 505 

472<h3 id="how-runs-are-isolated">506<h3 id="how-runs-are-isolated">

473 运行如何被隔离507 运行如何被隔离


535 case.yaml 字段569 case.yaml 字段

536</h3>570</h3>

537 571 

538`case.yaml` 在 YAML 中描述相同的用例并添加指向其他文件的字段。它需要 `schema_version: "1.1"` 和 `name`。`prompt.md` 字段 `description`、`tags`、`plugins`、`runs` 和 `expected_outcome` 在顶级;`model`、`max_turns`、`timeout_seconds`、`allowed_tools`、`append_system_prompt` 和 `env` 在 `execution:` 下。当两个文件都存在时,`prompt.md` frontmatter 覆盖匹配的 `case.yaml` 字段,`prompt.md` 正文是提示,`graders/*.md` 在 `case.yaml` 中列出的任何评分器之后添加。572`case.yaml` 是 `prompt.md` 的替代或伴侣:它在 YAML 中描述用例并添加指向其他文件的字段。它需要 `schema_version: "1.1"` 和 `name`。`prompt.md` 字段 `description`、`tags`、`plugins`、`runs` 和 `expected_outcome` 在顶级;`model`、`max_turns`、`timeout_seconds`、`allowed_tools`、`append_system_prompt` 和 `env` 在 `execution:` 下。当两个文件都存在时,`prompt.md` frontmatter 覆盖匹配的 `case.yaml` 字段,`prompt.md` 正文是提示,`graders/*.md` 在 `case.yaml` 中列出的任何评分器之后添加。

539 573 

540这些字段仅存在于 `case.yaml` 中:574这些字段仅存在于 `case.yaml` 中:

541 575 


554`graders/` 下的每个评分器文件在 frontmatter 中采用这些键,加上其类型的选项。评分器的名称是不带 `.md` 的文件名:588`graders/` 下的每个评分器文件在 frontmatter 中采用这些键,加上其类型的选项。评分器的名称是不带 `.md` 的文件名:

555 589 

556| 键 | 默认 | 目的 |590| 键 | 默认 | 目的 |

557| :------- | :-- | :------------------------------------------------------------------------------------------------------------------- |591| :------- | :-- | :------------------------------------------------------------------------------------------------------------------ |

558| `type` | 必需 | [评分器类型](#grader-types)之一 |592| `type` | 必需 | [评分器类型](#grader-types)之一 |

559| `weight` | `1` | 运行分数中的相对权重。任何正数 |593| `weight` | `1` | 运行分数中的相对权重。任何正数 |

560| `arm` | 未设置 | `with-only` 在[两个 arm 运行](#compare-against-a-no-plugin-baseline)中排除评分器的评分;`both` 强制 `tool_used: Skill` 评分器在两个 arm 中评分 |594| `arm` | 未设置 | `with-only` 在[两个 arm 运行](#compare-against-a-no-plugin-baseline)中排除评分器的评分;`both` 强制 Claude Code 否则会排除的评分器在两个 arm 中评分 |

561 595 

562<h4 id="what-a-grader-can-look-at">596<h4 id="what-a-grader-can-look-at">

563 评分器可以查看什么597 评分器可以查看什么


612 故障排除646 故障排除

613</h2>647</h2>

614 648 

615这些是作者最常遇到的问题,按你看到的内容键入。649这些是作者最常遇到的问题,按照你看到的内容进行分类。

616 650 

617<h3 id="plugin-eval-is-currently-in-early-access">651<h3 id="plugin-eval-is-currently-in-early-access">

618 "plugin eval is currently in early access"652 "plugin eval is currently in early access"

619</h3>653</h3>

620 654 

621你的构建早于命令的普遍可用性。运行 `claude update`,然后在新会话中再次运行命令。655你的构建版本早于该命令的正式发布。运行 `claude update`,然后在新的会话中再次运行该命令。

622 656 

623<h3 id="plugin-eval-is-currently-unavailable">657<h3 id="plugin-eval-is-currently-unavailable">

624 "plugin eval is currently unavailable"658 "plugin eval is currently unavailable"

625</h3>659</h3>

626 660 

627Anthropic 已在服务器端关闭命令。你的机器上没有任何内容将其打开;运行 `claude update` 并稍后在新会话中重试。661Anthropic 已在服务器端关闭了该命令。你的机器上没有任何东西可以将其重新打开;运行 `claude update`,稍后在新的会话中重试。

628 662 

629<h3 id="is-not-a-trusted-plugin-directory-and-this-run-cannot-stop-to-ask-you-about-it">663<h3 id="is-not-a-trusted-plugin-directory-and-this-run-cannot-stop-to-ask-you-about-it">

630 "is not a trusted plugin directory, and this run cannot stop to ask you about it"664 "is not a trusted plugin directory, and this run cannot stop to ask you about it"

631</h3>665</h3>

632 666 

633这是针对 Claude Code 还不信任的目录的第一次运行,它无法询问因为 stdin 或 stdout 不是终端或你传递了 `--json`。在终端中运行 `claude plugin eval <dir>` 一次并回答提示,或如果你信任插件的代码和套件,传递 `--trust-plugin`。参见[运行可以访问什么](#security)。667这是针对 Claude Code 尚未信任的目录的首次运行,由于 stdin 或 stdout 不是终端、你传递了 `--json`,或 `CI` 环境变量设置为 `true` 等真值,它无法询问你。在终端中运行一次 `claude plugin eval <dir>` 并回答提示,或者如果你信任插件的代码和套件,传递 `--trust-plugin`。请参阅[运行可以访问的内容](#security)。

634 668 

635<h3 id="no-eval-cases-found">669<h3 id="no-eval-cases-found">

636 "No eval cases found"670 "No eval cases found"

637</h3>671</h3>

638 672 

639eval 目录下没有 `<case>/prompt.md` 或 `<case>/case.yaml` 存在,或你的 `--case` 和 `--tag` 过滤器没有匹配任何用例。从插件根目录运行,或运行 `claude plugin eval init` 以创建套件。673eval 目录下不存在 `<case>/prompt.md` 或 `<case>/case.yaml`,或你的 `--case` 和 `--tag` 过滤器没有匹配到任何案例。从插件根目录运行,或运行 `claude plugin eval init` 来创建一个套件。

640 674 

641<h3 id="the-baseline-arm-shows-no-plugin-or-delta-is-zero">675<h3 id="the-baseline-arm-shows-no-plugin-or-delta-is-zero">

642 基线 arm 显示无插件,或 delta 为零676 基线臂显示没有插件,或 delta 为零

643</h3>677</h3>

644 678 

645如果摘要没有 `W/OUT` 列,或用例失败,显示"ablation requested but no plugin resolved",没有为用例找到插件。将 `plugins: ["../.."]` 添加到用例,给出从用例目录到插件目录的路径。679如果摘要没有 `W/OUT` 列,或案例失败并显示"ablation requested but no plugin resolved",则没有为该案例找到插件。将 `plugins: ["../.."]` 添加到案例中,给出从案例目录到插件目录的路径。

646 680 

647如果插件确实加载,`Δ` 仍然接近零,你的 `tool_used: Skill` 评分器失败,这通常是真实发现,意味着技能的 `description` 不会在提示的措辞上触发。调整描述并重新运行相同的套件。681如果插件确实加载了,而 `Δ` 仍然接近零,且你的 `tool_used: Skill` grader 失败,这通常是一个真实的发现,意味着该 skill 的 `description` 不会在提示的措辞上触发。调整描述并重新运行相同的套件。

648 682 

649<h3 id="agent-type-’-’-not-found-for-one-of-your-plugin’s-agents">683<h3 id="agent-type-’-’-not-found-for-one-of-your-plugin’s-agents">

650 "Agent type '...' not found" for one of your plugin's agents684 "Agent type '...' not found" 对于你的插件的某个代理

651</h3>685</h3>

652 686 

653默认情况下,每个用例都同时运行你的插件和不运行它,不运行它的运行是[无插件基线](#the-no-plugin-baseline)。当 Claude 在基线运行中调度你的插件的一个代理时,Agent 工具调用失败,显示 `Agent type '<plugin>:<agent-name>' not found. Available agents: ...`。列表仅命名不存在插件的代理,例如[内置子代理](/docs/zh-CN/sub-agents#built-in-subagents)。687默认情况下,每个案例都会同时运行你的插件和不运行它,不运行它的运行是[无插件基线](#the-no-plugin-baseline)。当 Claude 在基线运行中调度你的插件的某个代理时,Agent 工具调用失败,显示 `Agent type '<plugin>:<agent-name>' not found. Available agents: ...`。该列表仅列出不存在插件时存在的代理,例如[内置子代理](/docs/zh-CN/sub-agents#built-in-subagents)。

654 688 

655该错误是预期的,因为 `Δ` 将你的插件的运行与基线进行比较。在 JSON 结果中,基线运行在 `cases[].arms.without` 下。689该错误是预期的,因为 `Δ` 将你的插件运行与基线进行比较。在 JSON 结果中,基线运行位于 `cases[].arms.without` 下。

656 690 

657在加载你的插件的运行中,在 `allowed_tools` 中列出 `Agent` 的用例可以通过其命名空间名称调度你的插件的一个代理,例如 `my-plugin:code-reviewer` 用于名为 `my-plugin` 的插件中的 `code-reviewer` 代理。要跳过基线运行,传递 `--ablation none`。691在加载了你的插件的运行中,在 `allowed_tools` 中列出 `Agent` 的案例可以通过其命名空间名称调度你的插件的某个代理,例如 `my-plugin:code-reviewer` 表示名为 `my-plugin` 的插件中的 `code-reviewer` 代理。要跳过基线运行,传递 `--ablation none`。

658 692 

659<h3 id="everything-scores-zero-although-the-right-files-were-produced">693<h3 id="everything-scores-zero-although-the-right-files-were-produced">

660 尽管生成了正确的文件,但一切都得分为零694 尽管生成了正确的文件,但所有内容的评分都为零

661</h3>695</h3>

662 696 

663你的评分器目标 `files`(创建的路径列表),当你意思是文件的内容时。使用 `{ source: file, path: <path> }` 作为 `target` 或 `focus`。另外,`file_exists` 仅计数在运行期间创建的文件,所以 scaffold 创建或 Claude 仅编辑的文件对它不可见;评分其内容,或在 `Edit` 上使用 `tool_used`。697你的 graders 针对 `files`(创建的路径列表),而你的意思是文件的内容。使用 `{ source: file, path: <path> }` 作为 `target` 或 `focus`。

698 

699另外,`file_exists` 仅计算在运行期间创建的文件,所以脚手架创建的文件或 Claude 仅编辑的文件对它是不可见的;对其内容进行评分,或在 `Edit` 上使用 `tool_used`。

664 700 

665<h3 id="a-regex-over-the-trace-doesn’t-match-text-i-can-see">701<h3 id="a-regex-over-the-trace-doesn’t-match-text-i-can-see">

666 对记录的正则表达式不匹配我能看到的文本702 对跟踪的正则表达式与我能看到的文本不匹配

667</h3>703</h3>

668 704 

669默认 `target` 是 `last_message`,不是记录。当你确实目标 `trace` 时,它是每行 JSON,所以引号显示为 `\"`。正则表达式使用 JavaScript 语法,所以在 `flags` 中放置 `i` 而不是写 `(?i)`。705* **错误的目标**:默认 `target` 是 `last_message`,而不是跟踪。

706* **JSON 转义**:当你针对 `trace` 时,它是每行 JSON,所以引号显示为 `\"`。

707* **正则表达式语法**:正则表达式使用 JavaScript 语法,所以在 `flags` 中放置 `i` 而不是写 `(?i)`。

670 708 

671<h3 id="tools-are-denied-mcp-tools-are-missing-or-bash-won’t-run">709<h3 id="tools-are-denied-mcp-tools-are-missing-or-bash-won’t-run">

672 工具被拒绝,MCP 工具丢失,或 Bash 不会运行710 工具被拒绝、MCP 工具缺失或 Bash 无法运行

673</h3>711</h3>

674 712 

675超过只读集的任何内容都需要你的授予,例如 `--allow-tools Bash Write`。你的个人 MCP 服务器永远不会在运行中加载。插件自己的服务器不启动,除非你[选择加入](#mock-mcp-servers),它们的工具然后也需要 `--allow-tools "mcp__plugin_<plugin>_<server>__*"` 授予;mocked 工具两者都不需要。713超出只读集合的任何内容都需要你的授权,例如 `--allow-tools Bash Write`。你的个人 MCP 服务器永远不会在运行中加载。插件自己的服务器不会启动,除非你[选择加入](#mock-mcp-servers),它们的工具也需要 `--allow-tools "mcp__plugin_<plugin>_<server>__*"` 授权;模拟工具两者都不需要。

676 714 

677<h3 id="the-run-exits-1-but-the-results-look-fine">715<h3 id="the-run-exits-1-but-the-results-look-fine">

678 运行退出 1 但结果看起来很好716 运行退出代码为 1,但结果看起来很好

679</h3>717</h3>

680 718 

681默认 `--threshold` 是 1.0,所以当任何用例分数低于完美时命令退出 1。设置与你的标准匹配的阈值。退出 1 也涵盖加载失败的用例文件,在表上方的 stderr 上报告。719默认 `--threshold` 是 1.0,所以当任何案例的评分低于完美时,命令退出代码为 1。设置与你需要的评分相匹配的阈值。退出代码 1 也涵盖了无法加载的案例文件,该文件在表格上方的 stderr 上报告。

682 720 

683<h3 id="json-output-path-must-end-in-json">721<h3 id="json-output-path-must-end-in-json">

684 "--json output path must end in .json"722 "--json output path must end in .json"

685</h3>723</h3>

686 724 

687你在 `--json` 后放置了目标,所以它被读作输出路径。首先放置目标,如 `claude plugin eval . --json`,或给 `--json` 一个显式的 `.json` 路径。725你把目标放在 `--json` 之后,所以它被读作输出路径。把目标放在前面,如 `claude plugin eval . --json`,或给 `--json` 一个显式的 `.json` 路径。

688 726 

689<h3 id="a-grader-shows-passed-false-under-a-run-that-scored-1-0">727<h3 id="a-grader-shows-passed-false-under-a-run-that-scored-1-0">

690 评分器在得分 1.0 的运行下显示 passed: false728 一个 grader 在评分为 1.0 的运行下显示 passed: false

691</h3>729</h3>

692 730 

693该评分器在两个 arm 运行中按设计从分数中排除,其 `scored` 字段是 `false`。参见[与无插件基线比较](#compare-against-a-no-plugin-baseline)。731该 grader 在设计上被排除在两臂运行的评分之外,其 `scored` 字段为 `false`。请参阅[针对无插件基线进行评分](#compare-against-a-no-plugin-baseline)。

694 732 

695<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">733<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">

696 运行在中途失败,出现使用限制或速率限制错误734 运行在中途失败,出现使用限制或速率限制错误

697</h3>735</h3>

698 736 

699如果你的账户在套件运行时达到其计划的使用限制或 API 速率限制,每个后续运行以该错误结束,在它生成的内容上评分,通常分数为 0。套件仍然完成,不标记为 `partial`,所以结果可能看起来像回归。在信任分数之前检查 `NOTES` 列或 JSON 中的 `cases[].arms.with[].error` 以获取限制消息,然后在限制重置后重新运行,如果你需要保持在它下面,使用 `--runs 1` 或 `--case` 过滤器。737如果你的账户在套件运行时达到了计划的使用限制或 API 速率限制,每个后续运行都会以该错误结束,根据它生成的内容进行评分,通常评分为 0。套件仍然完成,不会标记为 `partial`,所以结果看起来像是一个回归。在信任评分之前,检查 `NOTES` 列或 JSON 中的 `cases[].arms.with[].error` 中的限制消息,然后在限制重置后重新运行,如果你需要保持在限制内,使用 `--runs 1` 或 `--case` 过滤器。

700 738 

701<h3 id="runs-time-out-or-hit-the-turn-cap">739<h3 id="runs-time-out-or-hit-the-turn-cap">

702 运行超时或达到轮次上限740 运行超时或达到轮次上限

703</h3>741</h3>

704 742 

705默认值是 10 轮和 300 秒。为需要更多的任务在用例中提高 `max_turns` 和 `timeout_seconds`,并使用 `--max-cost-usd` 作为成本上限而不是紧的每次运行限制。743默认值是 10 轮和 300 秒。对于需要更多的任务,在案例中提高 `max_turns` 和 `timeout_seconds`,并使用 `--max-cost-usd` 作为成本上限,而不是紧密的每次运行限制。

706 744 

707<h2 id="see-also">745<h2 id="see-also">

708 另见746 另见

709</h2>747</h2>

710 748 

711* [创建插件](/docs/zh-CN/plugins):构建你正在测试的插件,并在开发期间使用 `--plugin-dir` 加载它749* [创建插件](/docs/zh-CN/plugins/create):构建你正在测试的插件,并在开发期间使用 `--plugin-dir` 加载它

712* [插件参考](/docs/zh-CN/plugins-reference#plugin-eval):`plugin eval` 和 `plugin eval init` 命令条目以及清单的 `experimental.evals` 键750* [插件命令参考](/docs/zh-CN/plugins/cli-reference#plugin-eval):`plugin eval` 和 `plugin eval init` 命令条目。清单的 [`experimental.evals`](/docs/zh-CN/plugins/manifest-reference#fields) 键在清单参考中

713* [技能](/docs/zh-CN/skills):技能的描述如何决定 Claude 何时调用它,这是检查技能是否触发的用例测量的内容751* [技能](/docs/zh-CN/skills):技能的描述如何决定 Claude 何时调用它,这是检查技能是否触发的用例测量的内容

714* [沙箱](/docs/zh-CN/sandboxing):当你授予 Bash 给运行时应用的操作系统级沙箱752* [沙箱](/docs/zh-CN/sandboxing):当你授予 Bash 给运行时应用的操作系统级沙箱

715* [创建和分发插件市场](/docs/zh-CN/plugin-marketplaces):一旦其套件通过,发布插件753* [发布插件](/docs/zh-CN/plugins/publish):一旦其套件通过,发布插件

754* [测量插件成本和使用情况](/docs/zh-CN/plugins/measure):插件添加到每个会话上下文的内容以及人们是否仍在使用它

plugin-hints.md +0 −172 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 从您的 CLI 推荐您的插件

6 

7> 从您的 CLI 发出一行标记,以便 Claude Code 提示用户安装您的官方插件。

8 

9如果您维护 CLI 或 SDK,并在官方 Anthropic 市场中拥有插件,您的工具可以提示 Claude Code 用户安装该插件。当您的 CLI 检测到它在 Claude Code 内运行时,会向 stderr 写入一行标记。Claude Code 读取该标记,将其从输出中删除,并向用户显示一次性安装提示。

10 

11该协议不需要额外命令,也不会改变您的 CLI 为 Claude Code 外部用户打印的内容。

12 

13本页面适用于 CLI 和 SDK 维护者。如果您正在寻找安装插件,请参阅[发现和安装插件](/docs/zh-CN/discover-plugins)。

14 

15<h2 id="how-it-works">

16 工作原理

17</h2>

18 

19Claude Code 为通过 Bash 和 PowerShell 工具运行的每个命令以及 [hook](/docs/zh-CN/hooks) 命令设置 [`CLAUDECODE`](/docs/zh-CN/env-vars) 环境变量为 `1`。从 v2.1.172 开始,它还在这些相同的子进程中将 [`CLAUDE_CODE_CHILD_SESSION`](/docs/zh-CN/env-vars) 设置为 `1`。当您的 CLI 看到这些变量之一时,它会向 stderr 写入一个自闭合的 `<claude-code-hint />` 标签。在 hook 命令中,提示标签会被剥离并忽略。只有 Bash 和 PowerShell 工具输出会触发安装提示。

20 

21当 Claude Code 接收到命令输出时,它会:

22 

231. 扫描提示行并在输出到达模型之前将其删除

242. 检查提示是否针对官方 Anthropic 市场中的插件

253. 检查插件是否尚未安装且之前未提示过

264. 向用户显示安装提示,其中包含发出提示的命令的名称

27 

28Claude Code 永远不会自动安装插件。用户始终需要确认。

29 

30<h2 id="emit-the-hint">

31 发出提示

32</h2>

33 

34提示提示仅对官方 Anthropic 市场中列出的插件触发。在发布集成之前,请参阅[将您的插件纳入官方市场](#get-your-plugin-into-the-official-marketplace)。

35 

36在环境变量上进行门控以发出提示,使标记不太可能在人类直接运行您的 CLI 时出现,然后将标签写入 stderr,单独占一行。选择要检查的变量:

37 

38* `CLAUDECODE`:在每个 Claude Code 版本上设置,因此可以到达最多的会话。它也在 tmux 会话和 Claude Code 启动的 stdio MCP 服务器子进程中设置,IDE 扩展在其集成终端中设置它,人类可能在那里直接运行您的 CLI。

39* `CLAUDE_CODE_CHILD_SESSION`:仅在 Claude Code 本身生成的子进程中设置,例如工具调用、hook 命令和[状态行](/docs/zh-CN/statusline)命令,因此标签通常不会到达人类终端。在会话内启动的长期进程(例如 tmux 服务器)会捕获该变量,因此从该进程启动的后续 shell 仍然显示原始标签。

40 

41以下示例在 `CLAUDECODE` 上进行门控以获得最大覆盖范围,并为官方市场中名为 `example-cli` 的插件发出提示:

42 

43<CodeGroup>

44 ```javascript Node.js theme={null}

45 if (process.env.CLAUDECODE) {

46 process.stderr.write(

47 '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />\n',

48 )

49 }

50 ```

51 

52 ```python Python theme={null}

53 import os, sys

54 

55 if os.environ.get("CLAUDECODE"):

56 print(

57 '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />',

58 file=sys.stderr,

59 )

60 ```

61 

62 ```go Go theme={null}

63 if os.Getenv("CLAUDECODE") != "" {

64 fmt.Fprintln(os.Stderr,

65 `<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />`)

66 }

67 ```

68 

69 ```shell Shell theme={null}

70 if [ -n "$CLAUDECODE" ]; then

71 printf '%s\n' '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />' >&2

72 fi

73 ```

74</CodeGroup>

75 

76将 `example-cli` 替换为您在官方市场中的插件名称。

77 

78<h2 id="choose-where-to-emit">

79 选择发出位置

80</h2>

81 

82您可以控制哪些代码路径发出提示。Claude Code 按插件进行去重,因此在每次调用时发出提示没有缺点。效果良好的接触点包括:

83 

84| 位置 | 为什么有效 |

85| :---------- | :------------------------- |

86| `--help` 输出 | Claude 在探索不熟悉的 CLI 时经常运行帮助 |

87| 未知子命令错误 | 到达 Claude 对您的界面感到困惑的时刻 |

88| 登录或身份验证成功 | 用户已经处于设置心态 |

89| 首次运行欢迎消息 | 自然的入门时刻 |

90 

91<h2 id="what-the-user-sees">

92 用户看到的内容

93</h2>

94 

95当提示通过所有检查时,Claude Code 会显示如下提示:

96 

97```text theme={null}

98─────────────────────────────────────────────────────────────

99 Plugin recommendation

100 

101 The example-cli command suggests installing a plugin.

102 

103 Plugin: example-cli

104 Marketplace: claude-plugins-official

105 Official integration for example-cli deployments

106 

107 Would you like to install it?

108 ❯ 1. Yes, install example-cli

109 2. No

110 3. No, and don't show plugin installation hints again

111 

112─────────────────────────────────────────────────────────────

113```

114 

115提示会显示生成提示的命令的名称,以便用户可以发现工具与其推荐的插件之间的不匹配。如果用户在 30 秒内没有响应,Claude Code 会将提示作为**否**关闭。

116 

117提示频率受限,某些会话永远不会显示提示:

118 

119* **每个插件一次**:显示提示后,Claude Code 会记录该插件,无论用户的答案如何,都不会再次提示该插件。

120* **每个会话一次**:在机器上的所有 CLI 中,每个 Claude Code 会话最多出现一个提示。

121* **仅主交互会话**:Claude Code 仅在用户正在输入的终端会话中显示提示。Claude Code 永远不会提示 [subagent](/docs/zh-CN/sub-agents) 运行的命令,也不会在用户使用 `-p` 标志以 [non-interactive mode](/docs/zh-CN/headless) 运行 Claude Code 或通过 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 时显示提示。Claude Code 在所有这些情况下仍然会从命令输出中删除提示行。

122* **遥测选择退出**:禁用分析的会话永远不会显示提示。这包括设置了 `DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 的会话,以及 Amazon Bedrock 或 Google Cloud 的 Agent Platform 等第三方提供商上的会话,其中 [automatic telemetry opt-out](/docs/zh-CN/data-usage#default-behaviors-by-api-provider) 适用。

123 

124选择**是**会将插件安装到用户范围。选择**否,不再显示插件安装提示**会禁用用户的所有未来提示。

125 

126<h2 id="hint-format">

127 提示格式

128</h2>

129 

130提示是一个具有三个必需属性的自闭合标签。

131 

132```text theme={null}

133<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />

134```

135 

136| 属性 | 必需 | 描述 |

137| :------ | :- | :-------------------------- |

138| `v` | 是 | 协议版本。`1` 是唯一支持的值 |

139| `type` | 是 | 提示类型。`plugin` 是唯一支持的值 |

140| `value` | 是 | `name@marketplace` 形式的插件标识符 |

141 

142属性值可以用双引号引用或不引用。未引用的值不能包含空格。不支持转义序列。

143 

144<h2 id="requirements">

145 要求

146</h2>

147 

148Claude Code 在对提示进行操作之前强制执行两个条件。未通过任一检查的提示将被丢弃:

149 

150* **单独一行**:标签必须占据自己的一行。嵌入在行中间的标签,例如在日志语句内,会被忽略。允许行前后有空格。

151* **官方市场**:`value` 必须引用 Anthropic 控制的市场中的插件,例如 `claude-plugins-official`。指向其他市场的提示会被静默丢弃。

152 

153提示行始终在到达模型之前从输出中删除,即使版本或类型无法识别,因此标记永远不会计入令牌使用量。

154 

155其余指导是推荐的但不强制的。Claude Code 无法观察您的 CLI 是否遵循它:

156 

157* **写入 stderr**:stderr 将标签保留在 shell 管道之外,例如 `example-cli deploy | jq`。Claude Code 扫描两个流,因此 stdout 也可以工作。

158* **在环境变量上进行门控**:仅在设置 `CLAUDECODE` 或 `CLAUDE_CODE_CHILD_SESSION` 时发出。请参阅[发出提示](#emit-the-hint)了解这两个变量的区别。

159 

160<h2 id="get-your-plugin-into-the-official-marketplace">

161 将您的插件放入官方市场

162</h2>

163 

164提示协议仅对在官方 Anthropic 市场 `claude-plugins-official` 中列出的插件生效。Anthropic 自行决定策划该市场,应用内提交表单会将插件添加到[社区市场](/docs/zh-CN/plugins#submit-your-plugin-to-the-community-marketplace),提示协议不检查该市场。如果您正在与 Anthropic 合作伙伴联系合作,请与他们联系以协调官方市场列表。

165 

166<h2 id="see-also">

167 另请参阅

168</h2>

169 

170* [创建插件](/docs/zh-CN/plugins):构建您的 CLI 推荐的插件

171* [创建和分发插件市场](/docs/zh-CN/plugin-marketplaces):在官方市场外托管插件

172* [环境变量](/docs/zh-CN/env-vars):`CLAUDECODE` 和相关变量的完整参考

plugin-marketplaces.md +0 −1687 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 创建和分发 plugin marketplace

6 

7> 构建和托管 plugin marketplace,以在团队和社区中分发 Claude Code 扩展。

8 

9**plugin marketplace** 是一个目录,让你能够将 plugins 分发给他人。Marketplace 提供集中式发现、版本跟踪、自动更新以及对多种源类型(包括 git 存储库和本地路径)的支持。本指南展示了如何创建自己的 marketplace,与你的团队或社区共享 plugins。

10 

11想要从现有 marketplace 安装 plugins?请参阅[发现和安装预构建的 plugins](/docs/zh-CN/discover-plugins)。

12 

13<h2 id="overview">

14 概述

15</h2>

16 

17创建和分发 marketplace 涉及:

18 

191. **创建 plugins**:使用 skills、agents、hooks、MCP servers 或 LSP servers 构建一个或多个 plugins。本指南假设你已经有要分发的 plugins;有关如何创建 plugins 的详细信息,请参阅[创建 plugins](/docs/zh-CN/plugins)。

202. **创建 marketplace 文件**:定义一个 `marketplace.json`,列出你的 plugins 及其位置。请参阅[创建 marketplace 文件](#create-the-marketplace-file)。

213. **托管 marketplace**:推送到 GitHub、GitLab 或其他 git 主机。请参阅[托管和分发 marketplaces](#host-and-distribute-marketplaces)。

224. **与用户共享**:用户使用 `/plugin marketplace add` 添加你的 marketplace 并安装单个 plugins。请参阅[发现和安装 plugins](/docs/zh-CN/discover-plugins)。

23 

24一旦你的 marketplace 上线,你可以通过推送更改到你的存储库来更新它。用户使用 `/plugin marketplace update` 刷新他们的本地副本。

25 

26<h2 id="walkthrough-create-a-local-marketplace">

27 演练:创建本地 marketplace

28</h2>

29 

30此示例创建一个包含一个 plugin 的 marketplace:一个用于代码审查的 `quality-review` skill。你将创建目录结构、添加 skill、创建 plugin manifest 和 marketplace 目录,然后安装并测试它。

31 

32<Steps>

33 <Step title="创建目录结构">

34 ```bash theme={null}

35 mkdir -p my-marketplace/.claude-plugin

36 mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin

37 mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review

38 ```

39 </Step>

40 

41 <Step title="创建 skill">

42 创建一个 `SKILL.md` 文件,定义 `quality-review` skill 的功能。

43 

44 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

45 ---

46 description: Review code for bugs, security, and performance

47 ---

48 

49 Review the code I've selected or the recent changes for:

50 - Potential bugs or edge cases

51 - Security concerns

52 - Performance issues

53 - Readability improvements

54 

55 Be concise and actionable.

56 ```

57 </Step>

58 

59 <Step title="创建 plugin manifest">

60 创建一个 `plugin.json` 文件,描述该 plugin。manifest 位于 `.claude-plugin/` 目录中。

61 

62 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

63 {

64 "name": "quality-review-plugin",

65 "description": "Adds a quality-review skill for quick code reviews",

66 "version": "1.0.0",

67 "author": {

68 "name": "Your Name"

69 }

70 }

71 ```

72 

73 <Note>

74 设置 `version` 意味着用户仅在你更改此字段时才会收到更新,因此在每次发布时都要提升版本号。具有 [`command` source](#command-sources) 的 plugin 不会被此字段固定。从本地目录添加的 marketplace 中 [就地加载](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution) 的 plugin 也不会被固定。如果你省略 `version`,版本来自 [版本管理](/docs/zh-CN/plugins-reference#version-management) 中的下一个来源。

75 </Note>

76 </Step>

77 

78 <Step title="创建 marketplace 文件">

79 创建列出你的 plugin 的 marketplace 目录。

80 

81 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}

82 {

83 "name": "my-plugins",

84 "owner": {

85 "name": "Your Name"

86 },

87 "plugins": [

88 {

89 "name": "quality-review-plugin",

90 "source": "./plugins/quality-review-plugin",

91 "description": "Adds a quality-review skill for quick code reviews"

92 }

93 ]

94 }

95 ```

96 </Step>

97 

98 <Step title="添加和安装">

99 从包含 `my-marketplace` 的目录启动 Claude Code 并运行以下命令。install 命令打开一个 plugin 详情视图,你可以在其中选择安装范围来确认安装。检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅 [不重启应用而应用 plugin 更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting)。

100 

101 ```shell theme={null}

102 /plugin marketplace add ./my-marketplace

103 /plugin install quality-review-plugin@my-plugins

104 ```

105 </Step>

106 

107 <Step title="尝试一下">

108 在编辑器中选择一些代码并运行你的新 skill。Plugin skills 使用 plugin 名称进行命名空间划分。

109 

110 ```shell theme={null}

111 /quality-review-plugin:quality-review

112 ```

113 </Step>

114</Steps>

115 

116要了解更多关于 plugins 可以做什么的信息,包括 hooks、agents、MCP servers 和 LSP servers,请参阅 [Plugins](/docs/zh-CN/plugins)。

117 

118<Note>

119 **plugins 如何安装**:当用户安装 plugin 时,Claude Code 将 plugin 目录复制到缓存位置,除非 plugin 就地加载。link mode 中的 [`command` source](#copy-mode-and-link-mode) 就地加载,从本地目录添加的 marketplace 中的 [相对路径 source](#relative-paths) 也是如此。复制的 plugins 无法使用 `../shared-utils` 之类的路径引用其目录外的文件,因为这些文件不会被复制。

120 

121 如果你需要在 plugins 之间共享文件,请使用符号链接。有关详细信息,请参阅 [Plugin 缓存和文件解析](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)。

122</Note>

123 

124<h2 id="create-the-marketplace-file">

125 创建 marketplace 文件

126</h2>

127 

128在你的存储库根目录中创建 `.claude-plugin/marketplace.json`。此文件定义你的 marketplace 的名称、所有者信息以及包含其源的 plugins 列表。

129 

130每个 plugin 条目至少需要一个 `name` 和 `source`(告诉 Claude Code 从哪里获取它)。有关所有可用字段,请参阅下面的[完整架构](#marketplace-schema)。

131 

132```json theme={null}

133{

134 "name": "company-tools",

135 "owner": {

136 "name": "DevTools Team",

137 "email": "devtools@example.com"

138 },

139 "plugins": [

140 {

141 "name": "code-formatter",

142 "source": "./plugins/formatter",

143 "description": "Automatic code formatting on save",

144 "version": "2.1.0",

145 "author": {

146 "name": "DevTools Team"

147 }

148 },

149 {

150 "name": "deployment-tools",

151 "source": {

152 "source": "github",

153 "repo": "company/deploy-plugin"

154 },

155 "description": "Deployment automation tools"

156 }

157 ]

158}

159```

160 

161<h2 id="marketplace-schema">

162 Marketplace 架构

163</h2>

164 

165<h3 id="required-fields">

166 必需字段

167</h3>

168 

169| 字段 | 类型 | 描述 | 示例 |

170| :-------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------- |

171| `name` | string | Marketplace 标识符,采用 kebab-case 格式,不包含空格、控制字符或双向格式化字符。这是面向公众的:用户在安装 plugins 时会看到它(例如,`/plugin install my-tool@your-marketplace`)。每个用户只能为每个名称注册一个 marketplace:添加第二个同名 marketplace 时,Claude Code 会替换第一个。要在一个 marketplace 名称下发布多个 plugins,请在[单个 `marketplace.json`](#create-the-marketplace-file) 中列出它们。 | `"acme-tools"` |

172| `owner` | object | Marketplace 维护者信息。见[所有者字段](#owner-fields) | |

173| `plugins` | array | 可用 plugins 列表 | 见[Plugin 条目](#plugin-entries) |

174 

175<Note>

176 **保留名称**:以下 marketplace 名称为 Anthropic 官方使用保留,第三方 marketplaces 无法使用:`claude-code-marketplace`、`claude-code-plugins`、`claude-plugins-official`、`claude-plugins-community`、`claude-community`、`anthropic-marketplace`、`anthropic-plugins`、`agent-skills`、`anthropic-agent-skills`、`knowledge-work-plugins`、`life-sciences`、`claude-for-legal`、`claude-for-financial-services`、`financial-services-plugins`、`first-party-plugins`、`claude-tag-plugins`、`healthcare`。冒充官方 marketplaces 的名称(如 `official-claude-plugins` 或 `anthropic-plugins-v2`)也被阻止。保留这些名称可防止第三方 marketplace 将自己呈现为 Anthropic 发布的来源。

177 

178 Claude Code 每次加载 marketplace 时都会重新检查保留名称,而不仅仅是在添加时。在该名称成为保留名称之前以其中一个名称注册的 marketplace 停止加载,并报告它是[从不受信任的来源注册的](/docs/zh-CN/errors#marketplace-is-registered-from-an-untrusted-source)。移除该 marketplace 并从官方 Anthropic 来源重新添加它。受新保留名称影响的第三方 marketplace 在你以不同名称重新添加它后立即再次加载。在 v2.1.205 之前,`first-party-plugins` 和 `healthcare` 不是保留的,已在保留名称下注册的 marketplace 继续加载。在 v2.1.265 之前,`claude-tag-plugins` 不是保留的。

179 

180 你也不能将 marketplace 命名为 `npm`、`pip`、`uv`、`cargo`、`github` 或 `gh`,无论大小写如何。此检查需要 Claude Code v2.1.275 或更高版本。

181</Note>

182 

183<h3 id="owner-fields">

184 所有者字段

185</h3>

186 

187| 字段 | 类型 | 必需 | 描述 |

188| :------ | :----- | :- | :-------------------- |

189| `name` | string | 是 | 维护者或团队的名称 |

190| `email` | string | 否 | 维护者的联系电子邮件 |

191| `url` | string | 否 | 网站、GitHub 个人资料或组织 URL |

192 

193<h3 id="optional-fields">

194 可选字段

195</h3>

196 

197| 字段 | 类型 | 描述 |

198| :------------------------------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

199| `$schema` | string | 用于编辑器自动完成和验证的 JSON Schema URL。Claude Code 在加载时忽略此字段。 |

200| `description` | string | 简短的 marketplace 描述 |

201| `version` | string | Marketplace 清单版本 |

202| `metadata.pluginRoot` | string | Claude Code 解析裸 plugin 源名称的目录。见[相对路径](#relative-paths)。需要 Claude Code v2.1.239 或更高版本。 |

203| `allowCrossMarketplaceDependenciesOn` | array | 此 marketplace 中的 plugins 可能依赖的其他 marketplaces。来自此处未列出的 marketplace 的依赖项在安装时被阻止。见[依赖来自另一个 marketplace 的 plugin](/docs/zh-CN/plugin-dependencies#depend-on-a-plugin-from-another-marketplace)。 |

204| `renames` | object | 从前一个 plugin `name` 到其当前名称的映射,或如果 plugin 被移除则映射到 `null`。当你重命名或移除 `plugins` 中的条目时,让现有用户自动迁移。见[重命名或移除 plugin](#rename-or-remove-a-plugin)。需要 Claude Code v2.1.193 或更高版本。 |

205 

206`description` 和 `version` 也可以在 `metadata` 下接受,以实现向后兼容性。

207 

208<h2 id="plugin-entries">

209 Plugin 条目

210</h2>

211 

212`plugins` 数组中的每个 plugin 条目描述一个 plugin 及其位置。你可以包含 [plugin manifest 架构](/docs/zh-CN/plugins-reference#plugin-manifest-schema)中的任何字段,如 `description`、`version`、`author`、`commands` 和 `hooks`,加上这些 marketplace 特定的字段:`source`、`category`、`tags`、`strict`、`relevance`、`headers` 和 `headersHelper`。

213 

214<h3 id="required-fields-2">

215 必需字段

216</h3>

217 

218| 字段 | 类型 | 描述 |

219| :------- | :------------- | :------------------------------------------------------------------------------------------------------ |

220| `name` | string | Plugin 标识符(kebab-case,无空格、控制字符或双向格式化字符)。这是面向公众的:用户在安装时会看到它(例如,`/plugin install my-plugin@marketplace`)。 |

221| `source` | string\|object | 从哪里获取 plugin(见下面的 [Plugin 源](#plugin-sources)) |

222 

223<h3 id="optional-plugin-fields">

224 可选 plugin 字段

225</h3>

226 

227**标准元数据字段:**

228 

229| 字段 | 类型 | 描述 |

230| :--------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

231| `displayName` | string | 在 UI 界面中显示的人类可读名称。当条目和 plugin 的 `plugin.json` 都未设置时,用户会看到 plugin 的 `name`。可以包含空格和任何大小写。不用于命名空间或查找。 |

232| `description` | string | 简短的 plugin 描述 |

233| `version` | string | Plugin 版本。如果设置(在此处或在 `plugin.json` 中),plugin 将固定到此字符串,用户仅在其更改时才会收到更新。具有 [`command` 源](#command-sources)的 plugin 不会被任一字段固定。也不会从 marketplace 添加为本地目录的 [就地加载](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)的 plugin。如果在两个地方都未设置,版本来自 [版本管理](/docs/zh-CN/plugins-reference#version-management)中的下一个源。 |

234| `author` | object | Plugin 作者信息(`name` 必需;`email` 和 `url` 可选) |

235| `homepage` | string | Plugin 主页或文档 URL |

236| `repository` | string | 源代码存储库 URL |

237| `license` | string | SPDX 许可证标识符(例如,MIT、Apache-2.0) |

238| `keywords` | array | 用于 plugin 发现和分类的标签 |

239| `metadata` | object | 自由格式对象,用于你自己的字段,如权利或目录数据。Claude Code 不读取它。在 v2.1.222 之前,`claude plugin validate` 将该键报告为无法识别的字段。 |

240| `category` | string | Plugin 类别以供组织 |

241| `tags` | array | 用于可搜索性的标签 |

242| `strict` | boolean | 控制 `plugin.json` 是否是组件定义的权威(默认:true)。见下面的 [Strict 模式](#strict-mode)。 |

243| `relevance` | object | 告诉 Claude Code 何时向用户建议此 plugin 的信号。仅对管理员在托管设置中允许列表的 marketplace 生效。见 [为你的组织推荐 plugin](/docs/zh-CN/plugin-relevance)。 |

244| `defaultEnabled` | boolean | Plugin 安装后是否启用(默认:true)。设置为 `false` 以安装禁用的 plugin,直到用户选择启用。优先于 plugin 的 `plugin.json` 中的同一字段。见 [默认启用](/docs/zh-CN/plugins-reference#default-enablement)。 |

245 

246条目和 plugin 自己的 `plugin.json` 都可以设置显示字段 `displayName`、`description`、`author`、`homepage`、`repository`、`license` 和 `keywords`。在 plugin 列表和详情中,安装前后:

247 

248* 对于你在条目上设置的字段,用户会看到条目的值,即使 `plugin.json` 设置了不同的值。

249* 对于条目未设置的字段,用户会看到 `plugin.json` 的值。

250 

251安装前,Claude Code 只能为具有 [相对路径源](#relative-paths)的条目读取 `plugin.json`,其 plugin 文件位于 marketplace 内部。对于具有任何其他源类型的条目,用户在安装 plugin 之前只会看到条目自己的字段。

252 

253**组件配置字段:**

254 

255| 字段 | 类型 | 描述 |

256| :----------- | :------------- | :------------------------------------ |

257| `skills` | string\|array | 包含 `<name>/SKILL.md` 的 skill 目录的自定义路径 |

258| `commands` | string\|array | 平面 `.md` skill 文件或目录的自定义路径 |

259| `agents` | string\|array | agent 文件的自定义路径 |

260| `hooks` | string\|object | 自定义 hooks 配置或 hooks 文件的路径 |

261| `mcpServers` | string\|object | MCP server 配置或 MCP 配置的路径 |

262| `lspServers` | string\|object | LSP server 配置或 LSP 配置的路径 |

263 

264**存档身份验证字段:**

265 

266当条目在需要凭证的服务器上具有 [`archive` 源](#zip-archives)时设置这些字段。

267 

268| 字段 | 类型 | 描述 |

269| :-------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |

270| `headers` | object | Claude Code 在下载此条目的存档时发送的 HTTP 标头。覆盖 marketplace 中相同名称的标头。需要 Claude Code v2.1.238 或更高版本。 |

271| `headersHelper` | string | 命令,将此条目的存档下载的 HTTP 标头打印为一个 JSON 对象,用于过期的凭证。见 [验证存档下载](#authenticate-archive-downloads)。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。 |

272 

273<h2 id="plugin-sources">

274 Plugin 源

275</h2>

276 

277Plugin 源告诉 Claude Code 在你的 marketplace 中列出的每个单独 plugin 从哪里获取。这些在 `marketplace.json` 中每个 plugin 条目的 `source` 字段中设置。

278 

279Claude Code 将每个已安装的 plugin 复制到本地版本化 plugin 缓存中,位置为 `~/.claude/plugins/cache`,除非 plugin 就地加载。链接模式中的 [`command` 源](#copy-mode-and-link-mode)就地加载,[相对路径源](#relative-paths)从本地目录添加的 marketplace 也是如此。Claude Code 还会[将 plugin 的符合条件的 Node.js 包依赖项安装](/docs/zh-CN/plugins-reference#node-js-package-dependencies)到缓存副本中。见[Plugin 缓存和文件解析](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)了解从本地目录 marketplace 就地加载的 plugin 如何获取你的编辑。

280 

281| 源 | 类型 | 字段 | 注释 |

282| ------------ | ---------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |

283| 相对路径 | `string`(例如 `"./my-plugin"`) | 无 | marketplace repo 中的本地目录。必须以 `./` 开头,除非你在 [`metadata.pluginRoot`](#relative-paths) 下写一个裸名。Claude Code 相对于 marketplace 根目录解析路径,而不是 `.claude-plugin/` 目录 |

284| `github` | object | `repo`、`ref?`、`sha?` | |

285| `url` | object | `url`、`ref?`、`sha?` | Git URL 源 |

286| `git-subdir` | object | `url`、`path`、`ref?`、`sha?` | git repo 中的子目录。稀疏克隆以最小化大型 monorepos 的带宽 |

287| `npm` | object | `package`、`version?`、`registry?` | npm 包,通过你的 npm 客户端获取并解包,不运行安装脚本 |

288| `archive` | object | `url`、`sha256?` | 通过 HTTPS 下载的 Zip 存档。在用户机器上无需 git 或 npm 即可工作。需要 Claude Code v2.1.224 或更高版本 |

289| `command` | object | `command`、`timeout?`、`mode?` | 通过运行本地命令生成的 plugin 目录,每个会话重新运行一次以获取更改。需要 Claude Code v2.1.229 或更高版本 |

290 

291<Note>

292 **Marketplace 源与 plugin 源**:这些是控制不同事物的不同概念。

293 

294 * **Marketplace 源**:从哪里获取 `marketplace.json` 目录本身。在用户运行 `/plugin marketplace add` 或在 `extraKnownMarketplaces` 设置中设置。基于 Git 的 marketplace 源支持 `ref`(分支/标签)但不支持 `sha`。

295 * **Plugin 源**:从哪里获取 marketplace 中列出的单个 plugin。在 `marketplace.json` 内每个 plugin 条目的 `source` 字段中设置。基于 Git 的 plugin 源支持 `ref`(分支/标签)和 `sha`(精确提交)。

296 

297 例如,托管在 `acme-corp/plugin-catalog` 的 marketplace(marketplace 源)可以列出从 `acme-corp/code-formatter` 获取的 plugin(plugin 源)。marketplace 源和 plugin 源指向不同的存储库,并独立固定。

298</Note>

299 

300下面的基于 git 的源类型是 `github`、`url` 和 `git-subdir`。当在其中任何一个上同时设置 `ref` 和 `sha` 时,`sha` 是有效的固定。Claude Code 直接获取并检出固定的提交。

301 

302在大多数 git 主机上,包括 GitHub、GitLab 和 Bitbucket,这意味着即使上游的 `ref` 命名的分支或标签已被删除,只要提交仍然可从存储库到达,安装也会成功。某些服务器(如 AWS CodeCommit)不支持通过 SHA 获取提交。在这些服务器上,`ref` 必须仍然存在,固定的提交必须可从其到达。

303 

304如果你通过**组织设置 > Plugins** 分发 plugins,只允许某些源类型。见[通过组织设置分发](#distribute-through-organization-settings)。

305 

306<h3 id="relative-paths">

307 相对路径

308</h3>

309 

310对于同一存储库中的 plugins,使用以 `./` 开头的路径:

311 

312```json theme={null}

313{

314 "name": "my-plugin",

315 "source": "./plugins/my-plugin"

316}

317```

318 

319路径相对于 marketplace 根目录解析,即包含 `.claude-plugin/` 的目录。源 `./plugins/my-plugin` 因此指向 `<repo>/plugins/my-plugin`,即使 `marketplace.json` 位于 `<repo>/.claude-plugin/marketplace.json`。不要使用 `../` 来引用 marketplace 根目录外的路径。在 macOS 和 Linux 上,Claude Code 拒绝在前导 `./` 之后任何地方包含反斜杠的条目路径,所以在每个平台上将分隔符写为 `/`。

320 

321裸名是没有 `/` 的单个目录名,例如 `"formatter"`。要写裸名而不是 `./` 路径,请设置 [`metadata.pluginRoot`](#optional-fields) 为它们解析的目录。使用 `"pluginRoot": "./plugins"`,Claude Code 将 `"source": "formatter"` 解析为 `./plugins/formatter`。需要 Claude Code v2.1.239 或更高版本。

322 

323`metadata.pluginRoot` 本身必须是 marketplace 内的相对路径。Claude Code 对已经以 `./` 开头的源忽略它。包含 `/` 的源,例如 `team-a/formatter`,不是裸名,即使设置了 `metadata.pluginRoot`,仍然需要 `./` 前缀。

324 

325<Note>

326 Claude Code 相对于 marketplace 的本地副本解析相对路径,所以当用户从 git 源或本地目录添加你的 marketplace 时它们有效。如果用户通过直接 URL 添加你的 marketplace 到 `marketplace.json` 文件,相对路径将无法解析,因为 Claude Code 仅下载该文件。对于基于 URL 的分发,请改用任何其他[plugin 源](#plugin-sources)。见[故障排除](#plugins-with-relative-paths-fail-in-url-based-marketplaces)了解详情。

327</Note>

328 

329<h3 id="github-repositories">

330 GitHub 存储库

331</h3>

332 

333```json theme={null}

334{

335 "name": "github-plugin",

336 "source": {

337 "source": "github",

338 "repo": "owner/plugin-repo"

339 }

340}

341```

342 

343你可以固定到特定的分支、标签或提交:

344 

345```json theme={null}

346{

347 "name": "github-plugin",

348 "source": {

349 "source": "github",

350 "repo": "owner/plugin-repo",

351 "ref": "v2.0.0",

352 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

353 }

354}

355```

356 

357| 字段 | 类型 | 描述 |

358| :----- | :----- | :------------------------------- |

359| `repo` | string | 必需。`owner/repo` 格式的 GitHub 存储库 |

360| `ref` | string | 可选。Git 分支或标签(默认为存储库默认分支) |

361| `sha` | string | 可选。完整的 40 字符 git 提交 SHA 以固定到精确版本 |

362 

363<h3 id="git-repositories">

364 Git 存储库

365</h3>

366 

367```json theme={null}

368{

369 "name": "git-plugin",

370 "source": {

371 "source": "url",

372 "url": "https://gitlab.com/team/plugin.git"

373 }

374}

375```

376 

377你可以固定到特定的分支、标签或提交:

378 

379```json theme={null}

380{

381 "name": "git-plugin",

382 "source": {

383 "source": "url",

384 "url": "https://gitlab.com/team/plugin.git",

385 "ref": "main",

386 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

387 }

388}

389```

390 

391| 字段 | 类型 | 描述 |

392| :---- | :----- | :--------------------------------------------------------------------------------------------------- |

393| `url` | string | 必需。完整的 git 存储库 URL(`https://` 或 `git@`)。`.git` 后缀是可选的,所以 Azure DevOps 和 AWS CodeCommit URL 不带后缀也可以工作 |

394| `ref` | string | 可选。Git 分支或标签(默认为存储库默认分支) |

395| `sha` | string | 可选。完整的 40 字符 git 提交 SHA 以固定到精确版本 |

396 

397<h3 id="git-subdirectories">

398 Git 子目录

399</h3>

400 

401使用 `git-subdir` 指向位于 git 存储库子目录中的 plugin。Claude Code 使用稀疏的部分克隆来仅获取子目录,最小化大型 monorepos 的带宽。

402 

403```json theme={null}

404{

405 "name": "my-plugin",

406 "source": {

407 "source": "git-subdir",

408 "url": "https://github.com/acme-corp/monorepo.git",

409 "path": "tools/claude-plugin"

410 }

411}

412```

413 

414你可以固定到特定的分支、标签或提交:

415 

416```json theme={null}

417{

418 "name": "my-plugin",

419 "source": {

420 "source": "git-subdir",

421 "url": "https://github.com/acme-corp/monorepo.git",

422 "path": "tools/claude-plugin",

423 "ref": "v2.0.0",

424 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

425 }

426}

427```

428 

429`url` 字段也接受 GitHub 简写(`owner/repo`)或 SSH URL(`git@github.com:owner/repo.git`)。

430 

431| 字段 | 类型 | 描述 |

432| :----- | :----- | :---------------------------------------------------- |

433| `url` | string | 必需。Git 存储库 URL、GitHub `owner/repo` 简写或 SSH URL |

434| `path` | string | 必需。repo 中包含 plugin 的子目录路径(例如,`"tools/claude-plugin"`) |

435| `ref` | string | 可选。Git 分支或标签(默认为存储库默认分支) |

436| `sha` | string | 可选。完整的 40 字符 git 提交 SHA 以固定到精确版本 |

437 

438<h3 id="npm-packages">

439 npm 包

440</h3>

441 

442npm 源可以命名公共 npm registry 上的任何包或你的团队托管的私有 registry 上的任何包。Claude Code 使用你的 npm 客户端解析包,下载 tarball,并将其解包到 plugin 缓存中。

443 

444包的安装脚本(例如 `preinstall` 或 `postinstall`)永远不会运行,其依赖项在获取期间不会被安装。

445 

446如果包在其 `package.json` 旁边附带支持的 lockfile,Claude Code 会在单独的步骤中安装那些[Node.js 包依赖项](/docs/zh-CN/plugins-reference#node-js-package-dependencies),也禁用脚本。否则,发布已构建所需一切的 plugin。需要其他包的 MCP 服务器可以通过 `npx` 启动,它在首次运行时安装它们。

447 

448```json theme={null}

449{

450 "name": "my-npm-plugin",

451 "source": {

452 "source": "npm",

453 "package": "@acme/claude-plugin"

454 }

455}

456```

457 

458要固定到特定版本,请添加 `version` 字段:

459 

460```json theme={null}

461{

462 "name": "my-npm-plugin",

463 "source": {

464 "source": "npm",

465 "package": "@acme/claude-plugin",

466 "version": "2.1.0"

467 }

468}

469```

470 

471要从私有或内部 registry 安装,请添加 `registry` 字段:

472 

473```json theme={null}

474{

475 "name": "my-npm-plugin",

476 "source": {

477 "source": "npm",

478 "package": "@acme/claude-plugin",

479 "version": "^2.0.0",

480 "registry": "https://npm.example.com"

481 }

482}

483```

484 

485| 字段 | 类型 | 描述 |

486| :--------- | :----- | :-------------------------------------------------------- |

487| `package` | string | 必需。包名称或作用域包(例如,`@org/plugin`) |

488| `version` | string | 可选。版本或版本范围(例如,`2.1.0`、`^2.0.0`、`~1.5.0`) |

489| `registry` | string | 可选。自定义 npm registry URL。默认为系统 npm registry(通常为 npmjs.org) |

490 

491<h3 id="zip-archives">

492 Zip 存档

493</h3>

494 

495使用 `archive` 将 plugin 分发为 Claude Code 通过 HTTPS 下载的 zip 文件,这样安装在用户机器上无需 git 或 npm 即可工作。在任何静态文件服务器或工件存储库上托管文件,例如 S3 bucket、Artifactory 通用存储库或 nginx。需要 Claude Code v2.1.224 或更高版本。在 v2.1.120 到 v2.1.223 版本上,安装 plugin 失败并显示 `This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.`;在更早的版本上,包含 `archive` 条目的 marketplace 完全无法加载。

496 

497此条目从工件服务器上的 zip 文件安装 plugin:

498 

499```json theme={null}

500{

501 "name": "my-plugin",

502 "source": {

503 "source": "archive",

504 "url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip"

505 }

506}

507```

508 

509构建 zip 时,你可以直接 zip plugin 的内容或 zip plugin 文件夹本身。Claude Code 在存档的顶部查找 `.claude-plugin/`,然后在单个顶级文件夹内查找,所以两种布局都可以安装:

510 

511```text theme={null}

512my-plugin.zip my-plugin.zip

513├── .claude-plugin/ └── my-plugin/

514│ └── plugin.json ├── .claude-plugin/

515└── commands/ │ └── plugin.json

516 └── commands/

517```

518 

519Claude Code 不会查找超过一个文件夹的深度,所以嵌套更深的 plugin 无法安装。Claude Code 拒绝大于 256 MiB 的存档。

520 

521要固定精确文件,请添加 `sha256` 字段,其中包含存档的摘要:

522 

523```json theme={null}

524{

525 "name": "my-plugin",

526 "source": {

527 "source": "archive",

528 "url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",

529 "sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"

530 }

531}

532```

533 

534如果下载的文件与固定不匹配,Claude Code 拒绝安装并报告 [`Plugin archive integrity check failed`](/docs/zh-CN/errors#plugin-archive-integrity-check-failed)。

535 

536存档源接受这些字段:

537 

538| 字段 | 类型 | 描述 |

539| :------- | :----- | :------------------------------------------------------------------------------------------------------ |

540| `url` | string | 必需。zip 存档的 HTTPS URL。Claude Code 拒绝 `http://` URL,以及环回、链接本地和云元数据主机。每个重定向跳转必须满足相同的规则,否则 Claude Code 拒绝下载 |

541| `sha256` | string | 可选。存档的 SHA-256 摘要,为 64 个十六进制字符,大写或小写。Claude Code 验证每次下载并在不匹配时拒绝安装 |

542 

543`sha256` 摘要也用作 plugin 的版本,当 `plugin.json` 和 marketplace 条目都未声明版本时。见[版本管理](/docs/zh-CN/plugins-reference#version-management)。如果你声明 `version`,该版本字符串是更新信号,所以在更改 zip 及其摘要后,也要提升版本,否则用户保留缓存副本。

544 

545<h4 id="authenticate-archive-downloads">

546 验证存档下载

547</h4>

548 

549要验证存档下载,例如从私有 registry 下载,请设置 Claude Code 随之发送的 HTTP 标头。在你注册 marketplace 的 `url` 源上设置 `headers`,例如 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目。在 Claude Code v2.1.238 或更高版本上,你可以在 plugin 的条目上设置它,在 `source` 旁边。

550 

551如果你要放在 `headers` 中的值是短期的,例如你的 registry 按需生成的令牌,请在同一位置设置 `headersHelper` 命令。Claude Code 运行命令并将其打印的 JSON 对象作为该位置的标头发送。需要 Claude Code v2.1.238 或更高版本。

552 

553你选择的位置决定了哪些下载获得标头以及 Claude Code 何时运行命令:

554 

555| 位置 | 获得标头的下载 | Claude Code 何时运行设置在那里的 `headersHelper` |

556| :------------------ | :---------------------------------------- | :------------------------------------------------------------------------------------ |

557| Marketplace `url` 源 | 在 marketplace URL 的源上的存档下载,意味着相同的方案、主机和端口 | 在每次获取 marketplace 的 `marketplace.json` 之前和在该源上的每次存档下载之前。Claude Code 将一次运行的输出重用最多 60 秒 |

558| Plugin 条目 | 仅该条目的下载 | 仅当用户自己安装或更新该单个 plugin 时,并[接受命令](#how-users-accept-a-headershelper-command) |

559 

560当两个位置都设置相同名称的标头时,Claude Code 发送条目的值。在一个位置内,命令打印的标头覆盖相同名称的列出的标头。

561 

562<h5 id="add-a-headershelper-to-a-plugin-entry">

563 向 plugin 条目添加 headersHelper

564</h5>

565 

566此条目在 `source` 旁边设置 `headersHelper`。它还设置 `"strict": false`,这是 Claude Code 对设置 `headersHelper` 的 `marketplace.json` 条目所需的。使用 [`"strict": false`](#strict-mode),marketplace 条目是 plugin 的完整定义,所以用户可以在接受命令之前查看 plugin 包含的内容:

567 

568```json theme={null}

569{

570 "name": "my-plugin",

571 "description": "Formatting commands for internal services",

572 "strict": false,

573 "commands": "./commands",

574 "source": {

575 "source": "archive",

576 "url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"

577 },

578 "headersHelper": "/opt/bin/mint-registry-token.sh"

579}

580```

581 

582要检查条目,运行 `claude plugin install my-plugin@your-marketplace`。Claude Code 显示你命令和存档 URL,并在你接受后下载 zip。

583 

584在 v2.1.238 之前,Claude Code 下载条目的存档时不带其 `headers` 或 `headersHelper`,所以依赖它们的安装失败并显示 `HTTP 401 while downloading plugin archive from`,后跟 URL,registry 的状态代码代替 401。

585 

586<h4 id="write-the-headershelper-command">

587 编写 headersHelper 命令

588</h4>

589 

590无论你在 marketplace 的 `url` 源还是在 plugin 条目上设置 `headersHelper`,编写命令以满足这些要求:

591 

592* **命令文本**:最多 500 个可打印 ASCII 字符,没有四个或更多空格的运行。

593* **输出**:在 stdout 上打印一个标头名称和字符串值的 JSON 对象,然后在 10 秒内以 0 退出。

594* **Shell 和工作目录**:Claude Code 通过 `sh` 运行命令,或在 Windows 上通过 `cmd.exe`,从配置目录 `~/.claude` 或 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars#variables)。给出绝对路径或 `PATH` 上的命令,因为相对路径相对于该目录解析,而不是用户的项目。

595* **Claude Code 移除的变量**:从 `marketplace.json` 条目或项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置的命令的环境中,Claude Code 移除每个名称包含 `TOKEN`、`SECRET`、`KEY` 或 `AUTH` 等词的变量,包括 `ANTHROPIC_API_KEY`。Claude Code 不对用户设置、`--settings` 文件或托管设置中设置的命令应用此移除。

596* **Claude Code 设置的变量**:`CLAUDE_CODE_MARKETPLACE_URL` 和 `CLAUDE_CODE_MARKETPLACE_NAME` 用于 `url` 源的命令,以及 `CLAUDE_CODE_PLUGIN_NAME` 和 `CLAUDE_CODE_PLUGIN_ARCHIVE_URL` 用于条目的命令。`CLAUDE_CODE_MARKETPLACE_NAME` 在用户通过 URL 添加 marketplace 后的第一次获取时未设置,因为该获取是提供名称的。

597 

598生成持有者令牌的命令打印如下对象:

599 

600```json theme={null}

601{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}

602```

603 

604<h4 id="when-claude-code-skips-a-headershelper-command-or-drops-its-output">

605 Claude Code 何时跳过 headersHelper 命令或丢弃其输出

606</h4>

607 

608Claude Code 不运行 `headersHelper` 命令,或在这些情况下丢弃来自 `headers` 或命令输出的标头:

609 

610* **命令失败**:如果命令以非零退出、运行超过 10 秒或打印除 JSON 字符串值对象之外的任何内容,Claude Code 不进行它运行命令的获取或下载。

611* **Marketplace URL 不以 `https://` 开头**:Claude Code 不运行该 `url` 源的命令,仅发送其 `headers` 字段中列出的标头。

612* **重定向离开源**:当下载被重定向离开存档 URL 的源时,Claude Code 丢弃 marketplace `url` 源和 plugin 条目的 `headers` 值和命令输出。

613* **条目设置路由或身份标头**:Claude Code 从条目的 `headers` 和命令输出中丢弃请求路由和客户端身份名称,例如 `Host`、`Cookie` 和 `X-Forwarded-*`,并保留身份验证名称,例如 `Authorization`。Claude Code 以这种方式过滤每个 `marketplace.json` 条目,以及[内联设置条目](/docs/zh-CN/settings-reference#extraknownmarketplaces)取决于哪个文件声明它。

614* **命令在 `--add-dir` 目录的设置中设置**:Claude Code 忽略它,在 `url` 源和[内联 plugin 条目](/docs/zh-CN/settings-reference#extraknownmarketplaces)上都一样,仅发送该文件的 `headers`。

615* **托管设置阻止命令**:将 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 设置为 `true` 阻止 `headersHelper` 命令,[`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 也阻止它们,除非 `disableCommandPluginSources` 明确为 `false`。在任一阻止下,Claude Code 仍然为托管设置本身声明的 marketplace 运行命令。

616 

617<h4 id="how-users-accept-a-headershelper-command">

618 用户如何接受 headersHelper 命令

619</h4>

620 

621用户每次从 plugin 的自己的视图在 `/plugin` 或使用 `claude plugin install` 或 `claude plugin update` 自己安装或更新该单个 plugin 时接受 plugin 条目的命令。Claude Code 显示命令和存档 URL,并仅在用户接受后运行命令。

622 

623在非交互式 shell 中,传递 [`--yes`](/docs/zh-CN/plugins-reference#plugin-install) 以接受命令。要接受仅前一个 `--json` 运行显示的命令,传递 [`--accept-command`](/docs/zh-CN/plugins-reference#plugin-install) 和运行报告的 `sha256`。

624 

625Claude Code 仅运行它显示的命令,用于它显示的存档 URL。如果条目的命令或存档 URL 在此期间更改,Claude Code 拒绝安装或更新。仅查询字符串中的更改不计算。

626 

627<h5 id="installs-and-updates-that-refuse-the-command-instead-of-asking">

628 拒绝命令而不是询问的安装和更新

629</h5>

630 

631在任何其他操作上,而不是单个 plugin 安装或更新,Claude Code 既不运行条目的命令也不下载其存档,所以 plugin 保持其已安装版本或保持未安装。用户看到的取决于操作:

632 

633* **一次安装多个 plugins、从 plugin 建议或作为另一个 plugin 的依赖项**:Claude Code 拒绝具有命令的 plugin 并将用户指向该 plugin 在 `/plugin` 中的自己的视图。批量安装中的其他 plugins 仍然安装。依赖被拒绝 plugin 的 plugin 无法安装,直到用户自己安装被拒绝的 plugin。

634* **后台自动更新,或会话启动用于从未下载其存档的 plugin**:Claude Code 在 `/plugin` 错误选项卡中列出 plugin,以便用户知道手动安装或更新它。找到条目的自动更新仍然宣传已安装版本列表无。

635 

636<h5 id="when-a-marketplace-url-source’s-command-runs">

637 Marketplace `url` 源的命令何时运行

638</h5>

639 

640Marketplace `url` 源的 `headersHelper` 在设置文件中声明,例如 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目,而不是在 marketplace 发布的目录中,所以 Claude Code 不会在每次安装或更新时要求用户接受它。声明它的设置文件决定了 Claude Code 何时运行它:

641 

642| 设置文件 | Claude Code 何时运行命令 |

643| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------- |

644| 用户设置、`--settings` 文件或机器上的托管设置文件 | 无需询问,包括在后台 marketplace 刷新期间 |

645| 项目的 `.claude/settings.json` 或 `.claude/settings.local.json` | 仅在用户接受该文件夹本身的[工作区信任对话框](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)后。`-p` 或 SDK 会话不计为接受它,父文件夹的信任也不计 |

646| 服务器托管设置 | 仅在用户在[安全批准对话框](/docs/zh-CN/server-managed-settings#security-approval-dialogs)中批准交付的设置后 |

647 

648在 `-p` 或 SDK 会话中,Claude Code 无法显示安全批准对话框。它应用其他交付的设置,但 marketplace 获取和任何需要命令的存档下载失败,直到用户在交互式会话中批准。

649 

650对于这些文件之一中的[内联 plugin 条目](/docs/zh-CN/settings-reference#extraknownmarketplaces),Claude Code 要求与该文件中 marketplace 级别命令相同的文件夹信任或设置批准,用户也在每次安装或更新时接受条目的命令。

651 

652<h3 id="command-sources">

653 Command 源

654</h3>

655 

656当本地安装的工具生成 plugin 目录时使用 `command`,例如为当前选定的工具链呈现其 plugin 的 IDE。Claude Code 在用户安装 plugin 时运行命令,并在后台每个会话重新运行一次,所以你的用户无需重新安装即可获取工具的更改输出。需要 Claude Code v2.1.229 或更高版本。在 v2.1.120 到 v2.1.228 上,安装 plugin 失败并显示 `This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.`,在更早的版本上整个 marketplace 无法加载。

657 

658此条目从工具打印的任何目录安装 plugin:

659 

660```json theme={null}

661{

662 "name": "my-plugin",

663 "source": {

664 "source": "command",

665 "command": "my-tool claude-plugin-path"

666 }

667}

668```

669 

670Claude Code 通过平台 shell 运行命令,macOS 和 Linux 上的 `sh` 或 Windows 上的 `cmd.exe`,从用户的主目录。命令必须在 stdout 上打印恰好一行并以代码 0 退出。该行是包含完整 plugin 的目录的绝对路径,在命令退出时,路径可能在运行之间更改。

671 

672Claude Code 停止运行超过 `timeout` 秒的命令,安装或更新失败。Claude Code 也在这些情况下拒绝打印的路径,安装或更新以相同方式失败:

673 

674* 目录在其顶级没有 plugin 内容,例如 `.claude-plugin/` 目录或 `skills/`、`commands/`、`agents/` 或 `hooks/` 目录

675* 目录是 Claude Code 启动的目录,或其父目录之一

676* 在 Windows 上,路径是 UNC 路径

677 

678Command 源接受这些字段:

679 

680| 字段 | 类型 | 描述 |

681| :-------- | :----- | :---------------------------------------------------------------------------------------------------------- |

682| `command` | string | 必需。Shell 命令,在 stdout 上打印 plugin 目录的绝对路径作为单行并以 0 退出。必须是可打印 ASCII,最多 500 字符,没有四个或更多空格的运行,所以用户可以查看他们被要求接受的整个命令 |

683| `timeout` | number | 可选。等待命令的整数秒数,然后放弃(默认:60,最大:600) |

684| `mode` | string | 可选。`"copy"`(默认)将打印的目录复制到 plugin 缓存中。`"link"` 就地使用打印的目录。见[复制模式和链接模式](#copy-mode-and-link-mode) |

685 

686<h4 id="copy-mode-and-link-mode">

687 复制模式和链接模式

688</h4>

689 

690使用默认的 `"mode": "copy"`,Claude Code 将打印的目录复制到版本化 plugin 缓存中,并从目录内容的哈希派生[plugin 版本](/docs/zh-CN/plugins-reference#version-management)。你的工具可以在命令退出后删除或重写目录,产生相同内容的重新运行计为最新。Claude Code 拒绝安装大于 256 MiB 或包含超过 20,000 个条目的目录。

691 

692为大型 plugin 目录设置 `"mode": "link"`,不应复制,例如呈现的 SDK 导出。Claude Code 用打印目录的每个顶级条目的链接填充 plugin 的缓存条目,并就地使用文件,所以没有复制、文件内容未哈希,大小限制不适用。如果顶级条目是指向打印目录外的符号链接,安装失败。Claude Code 也跳过链接模式 plugin 的[Node.js 包依赖项安装](/docs/zh-CN/plugins-reference#node-js-package-dependencies),所以打印已包含 plugin 需要的任何 `node_modules` 的目录。

693 

694保持打印的目录就位,只要 plugin 保持安装,因为 Claude Code 在每次启动时通过这些链接加载 plugin。Claude Code 从打印目录的真实路径及其顶级条目派生[plugin 版本](/docs/zh-CN/plugins-reference#version-management),而不是文件内部,所以打印不同的路径以表示新内容。在打印目录中或其下方启动的会话中,Claude Code 根本不加载 plugin。

695 

696Claude Code 不支持 Windows 上的链接模式,拒绝在那里安装链接模式 plugin。改为声明 `"mode": "copy"`。

697 

698<h4 id="how-users-accept-the-command">

699 用户如何接受命令

700</h4>

701 

702Claude Code 在用户的机器上运行你的命令,所以它将每次运行绑定到用户的明确接受:

703 

704* 当用户从 `/plugin` 中的 plugin 详情屏幕安装 plugin,或在交互式终端中使用 `claude plugin install` 或 `claude plugin update` 安装或更新它时,Claude Code 首先向他们显示确切的命令字符串,并为该安装记录接受的命令。可以在接受相同命令的记录接受上进行的 `claude plugin update` 显示无。在非交互式 shell 中,例如配置脚本,传递 `--yes` 到 `claude plugin install` 或 `claude plugin update` 以接受它打印的命令。要接受仅前一个 `--json` 运行显示的命令,传递 [`--accept-command`](/docs/zh-CN/plugins-reference#plugin-install) 和运行报告的 `sha256`。

705* 每条其他路径仅运行用户已接受的命令。这包括从 `/plugin` 启动的更新和[何时 Claude Code 重新运行命令](#when-claude-code-re-runs-the-command)中描述的后台运行。当未接受任何内容时,Claude Code 拒绝运行命令并告诉用户如何查看它。Claude Code 从不将 command 源 plugin 安装为另一个 plugin 的依赖项,所以用户自己先安装它。

706* 如果你更改条目的 `command` 或切换其 `mode`,用户保留他们已有的版本,Claude Code 停止重新运行命令。在交互式会话中,`/plugin` 错误选项卡显示新命令,直到用户通过运行 `claude plugin update <plugin>@<marketplace>` 查看并接受它。

707 

708管理员可以使用托管设置 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 在整个组织中阻止 command 源。如果组织设置 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly),Claude Code 默认阻止 command 源。

709 

710<h4 id="when-claude-code-re-runs-the-command">

711 Claude Code 何时重新运行命令

712</h4>

713 

714打印的目录反映工具在命令运行时的状态,所以 Claude Code 在这些时间重新运行命令:

715 

716* 每次用户安装或更新 plugin 时

717* 每个会话一次用于每个启用的 command 源 plugin,在后台,会话启动后不久。此运行不通过 marketplace 自动更新,所以它不依赖 marketplace 的[自动更新设置](/docs/zh-CN/discover-plugins#configure-auto-updates)

718* 在启动或 `/reload-plugins` 时,当启用的 plugin 的已安装版本从 plugin 缓存中丢失时

719 

720当用户设置 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars) 时,Claude Code 跳过两个后台运行。显式安装和更新仍然使用该变量集运行命令。

721 

722当命令的哈希输出已更改时,Claude Code 将结果安装为新版本并在运行的交互式会话中重新加载它,切换[`/reload-plugins` 切换的相同组件](/docs/zh-CN/plugins-reference#environment-variables)。用户看到 plugin 已重新加载的通知。如果就地重新加载会使会话的提示缓存失效,Claude Code 改为提示用户运行 `/reload-plugins`,它[警告缓存成本并在使用 `--force` 重新运行时应用](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)。

723 

724<h3 id="advanced-plugin-entries">

725 高级 plugin 条目

726</h3>

727 

728此示例显示了使用许多可选字段的 plugin 条目,包括命令、agents、hooks 和 MCP servers 的自定义路径:

729 

730```json theme={null}

731{

732 "name": "enterprise-tools",

733 "source": {

734 "source": "github",

735 "repo": "company/enterprise-plugin"

736 },

737 "description": "Enterprise workflow automation tools",

738 "version": "2.1.0",

739 "author": {

740 "name": "Enterprise Team",

741 "email": "enterprise@example.com"

742 },

743 "homepage": "https://docs.example.com/plugins/enterprise-tools",

744 "repository": "https://github.com/company/enterprise-plugin",

745 "license": "MIT",

746 "keywords": ["enterprise", "workflow", "automation"],

747 "category": "productivity",

748 "commands": [

749 "./commands/core/",

750 "./commands/enterprise/",

751 "./commands/experimental/preview.md"

752 ],

753 "agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],

754 "hooks": {

755 "PostToolUse": [

756 {

757 "matcher": "Write|Edit",

758 "hooks": [

759 {

760 "type": "command",

761 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"

762 }

763 ]

764 }

765 ]

766 },

767 "mcpServers": {

768 "enterprise-db": {

769 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

770 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]

771 }

772 },

773 "strict": false

774}

775```

776 

777需要注意的关键事项:

778 

779* **`commands` 和 `agents`**:你可以指定多个目录或单个文件。路径相对于 plugin 根目录,必须保持在其内部。

780 * Claude Code 拒绝解析到 plugin 目录外的路径,例如 `./../shared.md`,带有 [`path escapes plugin directory`](/docs/zh-CN/errors#path-escapes-plugin-directory) 错误,仍然加载 plugin 而不带该组件

781* **`${CLAUDE_PLUGIN_ROOT}`**:在 hook 命令和 MCP server 配置中使用此变量来引用 plugin 安装目录中的文件。

782 * 查看[替换表](/docs/zh-CN/plugins-reference#environment-variables)了解每个服务器类型在哪些配置字段中替换它

783 * 对于应该在 plugin 更新后保留的依赖项或状态,请改用 [`${CLAUDE_PLUGIN_DATA}`](/docs/zh-CN/plugins-reference#persistent-data-directory)

784* **`strict: false`**:由于这设置为 false,plugin 不需要自己的 `plugin.json`。marketplace 条目定义了一切。见下面的 [Strict 模式](#strict-mode)。

785 

786默认情况下,plugin 的 skills 从其 `source` 下的 `skills/` 目录加载。`skills` 字段中列出的路径添加到该扫描中:

787 

788```json theme={null}

789"skills": ["./skills/", "./extra-skills/"]

790```

791 

792当多个 plugin 条目在 marketplace 根目录(`source: "./"`)共享一个 `skills/` 文件夹时,改为列出特定子目录,以便每个条目仅加载自己的 skills:

793 

794```json theme={null}

795"source": "./",

796"skills": ["./skills/code-review", "./skills/docs"]

797```

798 

799使用 marketplace 根源,列出的路径是该条目的完整集合,共享 `skills/` 文件夹中的其他目录不会加载。列出 `./skills/` 本身或 plugin 根目录会保持完整扫描。如果列出的路径都不存在,则改为运行默认扫描。

800 

801<h3 id="strict-mode">

802 Strict 模式

803</h3>

804 

805`strict` 字段控制 `plugin.json` 是否是组件定义(skills、agents、hooks、MCP servers、输出样式)的权威。

806 

807| 值 | 行为 |

808| :--------- | :---------------------------------------------------------------------- |

809| `true`(默认) | `plugin.json` 是权威。marketplace 条目可以用额外的组件补充它,两个源都被合并。 |

810| `false` | marketplace 条目是完整的定义。如果 plugin 也有声明组件的 `plugin.json`,那就是冲突,plugin 无法加载。 |

811 

812**何时使用每种模式:**

813 

814* **`strict: true`**:plugin 有自己的 `plugin.json` 并管理自己的组件。marketplace 条目可以在顶部添加额外的 skills 或 hooks。这是默认值,适用于大多数 plugins。

815* **`strict: false`**:marketplace 操作员想要完全控制。plugin repo 提供原始文件,marketplace 条目定义这些文件中的哪些被公开为 skills、agents、hooks 等。当 marketplace 以不同于 plugin 作者意图的方式重组或策划 plugin 的组件时很有用。

816 

817<h2 id="host-and-distribute-marketplaces">

818 托管和分发 marketplaces

819</h2>

820 

821当用户添加托管在 git 存储库中的 marketplace,或安装其列出的基于 git 的 plugin 时,Claude Code 会将该 marketplace 或 plugin 存储库克隆到他们的机器上。克隆永远不会下载 [Git LFS](https://git-lfs.com) 内容,所以 LFS 跟踪的文件作为指针文件到达。将你的 plugins 需要的文件保留在 LFS 之外。

822 

823<h3 id="host-on-github-recommended">

824 在 GitHub 上托管(推荐)

825</h3>

826 

827GitHub 是托管和分发 marketplace 的推荐方式:

828 

8291. **创建存储库**:为你的 marketplace 设置一个新存储库

8302. **添加 marketplace 文件**:使用你的 plugin 定义创建 `.claude-plugin/marketplace.json`

8313. **与团队共享**:用户使用 `/plugin marketplace add owner/repo` 添加你的 marketplace

832 

833**优点**:内置版本控制、问题跟踪和团队协作功能。

834 

835<h3 id="host-on-other-git-services">

836 在其他 git 服务上托管

837</h3>

838 

839任何 git 托管服务都可以工作,例如 GitLab、Bitbucket 和自托管服务器。用户使用完整的存储库 URL 添加:

840 

841```shell theme={null}

842/plugin marketplace add https://gitlab.com/company/plugins.git

843```

844 

845<h3 id="private-repositories">

846 私有存储库

847</h3>

848 

849Claude Code 支持从私有存储库安装 plugins。如果你通过[**组织设置 > Plugins**](https://claude.ai/admin-settings/plugins)分发你的 marketplace,你的 git 凭证不涉及:组织同步通过你的组织的 GitHub 或 GitLab 连接在 claude.ai 上读取 marketplace 存储库。有关哪些 plugin 源可以是私有的,请参阅[通过组织设置分发](#distribute-through-organization-settings)。

850 

851<h4 id="commands-you-run">

852 你运行的命令

853</h4>

854 

855当你运行 `/plugin marketplace add`、`/plugin install`、`/plugin update` 或 `/plugin marketplace update` 时,Claude Code 使用你现有的 git 凭证助手,所以通过 `gh auth login`、macOS Keychain 或 `git-credential-store` 的 HTTPS 访问工作方式与你的终端中相同。SSH 访问工作,只要主机已经在你的 `known_hosts` 文件中,并且密钥已加载到 `ssh-agent` 中,因为 Claude Code 会抑制主机指纹和密钥密码的交互式 SSH 提示。GitHub `owner/repo` 简写源默认通过 SSH 克隆;设置 [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/zh-CN/env-vars#variables) 以改为通过 HTTPS 克隆它们。

856 

857<h4 id="background-auto-updates">

858 后台自动更新

859</h4>

860 

861后台刷新会使用你配置的 git 凭证助手检查 marketplace 的远程以查找新提交,与你运行的命令相同。对于 SSH 远程,加载到 `ssh-agent` 中的密钥对检查进行身份验证。Claude Code 以非交互方式运行检查:它关闭 git 的终端提示和 askpass 程序,并告诉凭证助手不要提示。检查是否可以通过 HTTPS 对私有存储库进行身份验证取决于你的助手:

862 

863* 可以在不提示的情况下提供存储凭证的助手对检查进行身份验证。Git Credential Manager、macOS Keychain 助手和 `git-credential-store` 一旦为主机保存凭证就以这种方式工作。

864* 需要提示你的助手无法在后台回答。更新会静默失败,现有检出保持就位,所以你的 plugins 继续从最后同步的状态工作。运行 `/plugin marketplace update <name>` 以使用你的凭证刷新 marketplace。

865 

866当检查发现检出是最新的时,Claude Code 会保持原样。当检查发现新提交,或因为无法到达或对远程进行身份验证而失败时,Claude Code 会再次克隆 marketplace 并交换新克隆。如果该克隆失败,现有检出保持就位。重新克隆可能在大型存储库上[超时](#git-operations-time-out)。

867 

868两个设置使私有 marketplaces 的行为可预测:

869 

870* 设置 `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` 以在后台检查无法到达或对远程进行身份验证时保留现有检出,而不尝试重新克隆。你的 plugins 继续从最后同步的状态工作,使用 `/plugin marketplace update` 的手动更新仍然使用你的凭证进行身份验证。

871* 配置 git 凭证助手,例如使用 `gh auth setup-git` 用于 GitHub,以便后台检查和重新克隆可以在不提示的情况下进行身份验证。

872 

873在你的环境中设置提供商令牌(如 `GITHUB_TOKEN`)本身不会启用后台身份验证。令牌仅通过配置的凭证助手(例如 `gh` CLI 的助手,它读取 `GH_TOKEN` 和 `GITHUB_TOKEN`)生效。

874 

875<Note>

876 在 CI/CD 环境中,在从私有存储库安装 plugins 之前配置 git 凭证助手。在 GitHub Actions 上,导出对 marketplace 存储库具有读取访问权限的令牌作为 `GH_TOKEN`,然后运行 `gh auth setup-git`。默认工作流令牌只能访问工作流自己的存储库,所以另一个存储库中的私有 marketplace 需要个人访问令牌或应用令牌。

877</Note>

878 

879<h3 id="distribute-through-organization-settings">

880 通过组织设置分发

881</h3>

882 

883如果你在 Team 或 Enterprise 计划上通过[**组织设置 > Plugins**](https://claude.ai/admin-settings/plugins)分发 plugins,这些源规则适用:

884 

885* 在 github.com 和 gitlab.com 上,marketplace 存储库必须是私有或内部的。组织同步通过与其主机匹配的连接读取存储库:

886 * **github.com**:Claude GitHub App

887 * **你的 GitHub Enterprise Server 主机**:你的组织的 [GitHub Enterprise App](/docs/zh-CN/github-enterprise-server#admin-setup)

888 * **gitlab.com 或你的自托管 GitLab 实例**:你的组织的 [GitLab 配置](#sync-a-gitlab-hosted-marketplace)中该主机的访问令牌

889* 每个 plugin 源必须是 `github`、`url` 或 `git-subdir` 类型,或[相对路径](#relative-paths),以 `./` 开头。如果你在 `metadata.pluginRoot` 下按裸名称列出 plugin,组织同步会将其拒绝为不支持的源,所以写出路径,例如 `./plugins/deploy-tools`。

890* plugin 源可以在三种情况下是私有的:

891 * 与 marketplace 存储库的所有者共享的 github.com 源

892 * 在你的组织的 GitHub Enterprise 主机上安装了 GHE App 的源

893 * 与 marketplace 存储库在同一 GitLab 主机上的 `url` 或 `git-subdir` 源。在 gitlab.com 上,源也必须在与 marketplace 存储库相同的顶级组或用户命名空间下。

894* 任何其他 plugin 源必须是 github.com、gitlab.com 或 bitbucket.org 上的公开存储库,组织同步在没有凭证的情况下获取。组织同步拒绝这些规则不涵盖的主机上的 plugin 源。

895 

896有关管理员工作流,请参阅[为你的组织管理 plugins](https://support.claude.com/en/articles/13837433)。

897 

898要包含私有 plugins,请将 plugin 文件夹放在 marketplace 存储库内,并使用[相对路径](#relative-paths)引用它们。组织同步在分发期间打包每个 plugin,所以用户永远不需要访问单独的源存储库。

899 

900例如,这个 `marketplace.json` plugin 条目引用你在 marketplace 存储库中的 `plugins/deploy-tools` 处提交的 plugin:

901 

902```json theme={null}

903{

904 "name": "deploy-tools",

905 "source": "./plugins/deploy-tools"

906}

907```

908 

909<h4 id="sync-a-gitlab-hosted-marketplace">

910 同步 GitLab 托管的 marketplace

911</h4>

912 

913要从 gitlab.com 或自托管 GitLab 实例同步 marketplace,[所有者](/docs/zh-CN/server-managed-settings#access-control)首先在[**组织设置 > Claude Code**](https://claude.ai/admin-settings/claude-code)为该主机添加 GitLab 配置。GitLab 配置处于公开测试版,仅适用于 plugin marketplace 同步。添加一个不会使 GitLab 存储库在[网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web#limitations) 中可用。有关设置步骤,请参阅[为你的组织管理 plugins](https://support.claude.com/en/articles/13837433)。

914 

915当你添加 marketplace 时,输入项目的 HTTPS URL,例如 `https://gitlab.example.com/platform/claude-plugins`。嵌套子组中的项目有效。组织同步读取项目的默认分支。如果你打开**自动同步**,只有对默认分支的 pushes 才会启动同步。

916 

917<h4 id="keep-executables-out-of-the-top-level-bin-directory">

918 将可执行文件保留在顶级 bin 目录之外

919</h4>

920 

921不要在你通过组织设置分发的任何 plugin 中包含顶级 `bin/` 目录。claude.ai 拒绝具有该目录的 plugin,无论 plugin 是通过 marketplace 同步还是直接上传到达:

922 

923* **Marketplace 同步**:组织同步拒绝该 plugin 并同步 marketplace 的其余部分。错误消息以 `Plugin contains a top-level bin/ directory` 开头。

924* **直接上传**:如果你改为在[**组织设置 > Plugins**](https://claude.ai/admin-settings/plugins)中上传 plugin,claude.ai 会以相同的消息拒绝上传。

925 

926将可执行文件保留在另一个目录中,例如 `scripts/`,并从你的[skills、hooks 或 MCP server 配置](/docs/zh-CN/plugins-reference#environment-variables)中将它们引用为 `${CLAUDE_PLUGIN_ROOT}/scripts/<name>`。

927 

928<h3 id="require-marketplaces-for-your-team">

929 为你的团队要求 marketplaces

930</h3>

931 

932你可以配置你的存储库,以便当团队成员[信任项目文件夹](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)时,Claude Code 会为他们添加你的 marketplace,无需单独的提示。将你的 marketplace 添加到 `.claude/settings.json`:

933 

934```json theme={null}

935{

936 "extraKnownMarketplaces": {

937 "company-tools": {

938 "source": {

939 "source": "github",

940 "repo": "your-org/claude-plugins"

941 }

942 }

943 }

944}

945```

946 

947你也可以指定默认应启用哪些 plugins:

948 

949```json theme={null}

950{

951 "enabledPlugins": {

952 "code-formatter@company-tools": true,

953 "deployment-tools@company-tools": true

954 }

955}

956```

957 

958有关完整的配置选项,请参阅 [Plugin 设置](/docs/zh-CN/settings-reference#plugin-settings)。

959 

960<Note>

961 如果你使用带有相对路径的本地 `directory` 或 `file` 源,路径将相对于你的存储库的主检出解析。当你从 git worktree 运行 Claude Code 时,路径仍然指向主检出,所以所有 worktrees 共享相同的 marketplace 位置。Marketplace 状态存储一次每个用户在 `~/.claude/plugins/known_marketplaces.json` 中,而不是每个项目。

962</Note>

963 

964<h3 id="pre-populate-plugins-for-containers">

965 为容器预填充 plugins

966</h3>

967 

968对于容器镜像和 CI 环境,你可以在构建时预填充 plugins 目录,以便 Claude Code 启动时已经有 marketplaces 和 plugins 可用,无需在运行时克隆任何内容。设置 `CLAUDE_CODE_PLUGIN_SEED_DIR` 环境变量以指向此目录。

969 

970要分层多个种子目录,请在 Unix 上用 `:` 分隔路径,或在 Windows 上用 `;` 分隔。Claude Code 按顺序搜索每个目录,第一个包含给定 marketplace 或 plugin 缓存的种子获胜。

971 

972种子目录镜像 `~/.claude/plugins` 的结构:

973 

974```

975$CLAUDE_CODE_PLUGIN_SEED_DIR/

976 known_marketplaces.json

977 marketplaces/<name>/...

978 cache/<marketplace>/<plugin>/<version>/...

979```

980 

981要构建种子目录,请在镜像构建期间运行 Claude Code 一次,安装你需要的 plugins,然后将生成的 `~/.claude/plugins` 目录复制到你的镜像中,并将 `CLAUDE_CODE_PLUGIN_SEED_DIR` 指向它。

982 

983要跳过复制步骤,请在构建期间将 `CLAUDE_CODE_PLUGIN_CACHE_DIR` 设置为你的目标种子路径,以便 plugins 直接安装到那里:

984 

985```bash theme={null}

986CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins

987CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins

988```

989 

990然后在你的容器的运行时环境中设置 `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed`,以便 Claude Code 在启动时从种子读取。

991 

992在启动时,Claude Code 将种子的 `known_marketplaces.json` 中找到的 marketplaces 注册到主配置中,并使用在 `cache/` 下找到的 plugin 缓存,而无需重新克隆。这在交互模式和使用 `-p` 标志的非交互模式中都有效。

993 

994行为详情:

995 

996* **只读**:Claude Code 永远不会写入种子目录。

997* **自动更新禁用**:种子 marketplaces 不会自动更新。

998* **种子条目优先**:在每次启动时,种子中声明的 marketplaces 会覆盖用户配置中的任何匹配条目。要选择退出种子 plugin,请使用 `/plugin disable` 而不是删除 marketplace。

999* **路径解析**:Claude Code 通过在运行时探测 `$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/` 来定位 marketplace 内容,而不是信任存储在种子 JSON 内的路径。这意味着即使在与构建时不同的路径上挂载,种子也能正确工作。

1000* **变更被阻止**:针对种子管理的 marketplace 运行 `/plugin marketplace remove` 或 `/plugin marketplace update` 会失败,并提示你要求管理员更新种子镜像。

1001* **与设置组合**:如果 `extraKnownMarketplaces` 或 `enabledPlugins` 声明的 marketplace 已经存在于种子中,Claude Code 使用种子副本而不是克隆。

1002 

1003<h3 id="managed-marketplace-restrictions">

1004 托管 marketplace 限制

1005</h3>

1006 

1007对于需要严格控制 plugin 源的组织,管理员可以使用托管设置中的 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 设置限制用户允许添加哪些 plugin marketplaces。要同时拒绝为单次运行 sideload plugins、agents 和 MCP servers 的 CLI 标志,请将其与 [`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags) 配对。要允许列表哪些 marketplaces 的 plugins 可以作为上下文安装建议出现,请设置 [`pluginSuggestionMarketplaces`](/docs/zh-CN/settings-reference#pluginsuggestionmarketplaces)。

1008 

1009`strictKnownMarketplaces` 匹配 plugin 来自的 marketplace,而不是其中的条目,所以用户仍然可以从允许的 marketplace 安装具有[`command` 源](#command-sources)的 plugin。要同时阻止 command 源,请设置 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources)。

1010 

1011当在托管设置中配置 `strictKnownMarketplaces` 时,限制行为取决于值:

1012 

1013| 值 | 行为 |

1014| -------- | -------------------------------------------------- |

1015| 未定义(默认) | 无限制。用户可以添加任何 marketplace |

1016| 空数组 `[]` | 完全锁定。阻止每个 marketplace 源,包括官方 Anthropic marketplace |

1017| 源列表 | 允许列表强制执行。用户只能添加与条目匹配的 marketplaces |

1018 

1019<h4 id="common-configurations">

1020 常见配置

1021</h4>

1022 

1023禁用所有 marketplace 添加,包括官方 Anthropic marketplace:

1024 

1025```json theme={null}

1026{

1027 "strictKnownMarketplaces": []

1028}

1029```

1030 

1031Claude Code 下载[从 claude.ai 同步的](/docs/zh-CN/plugins-reference#synced-plugins) plugins 来自你的账户而不是来自 marketplace,所以这个锁定不涵盖它们。要同时停止这些,请在托管设置中将 [`syncClaudeAiPlugins`](/docs/zh-CN/settings-reference#syncclaudeaiplugins) 设置为 `false`,或在 claude.ai 上为你的组织关闭 Skills。

1032 

1033仅允许官方 Anthropic marketplace。单个存储库条目的匹配是精确的,所以此条目不涵盖同一存储库的 `ref` 或 `path` 变体:

1034 

1035```json theme={null}

1036{

1037 "strictKnownMarketplaces": [

1038 {

1039 "source": "github",

1040 "repo": "anthropics/claude-plugins-official"

1041 }

1042 ]

1043}

1044```

1045 

1046使用此条目,Claude Code 保持已注册的官方 marketplace 可用,在新机器上,在你首次以交互方式启动 Claude Code 时自动注册 marketplace。

1047 

1048自动注册不涵盖每台机器。它最常遗漏:

1049 

1050* 在机器首次交互启动之前运行的非交互环境。

1051* Claude Code 已在阻止 marketplace 的策略下以交互方式运行的机器,例如空数组锁定。Claude Code 记录被阻止的尝试,在策略更改后不重试。

1052 

1053在这些机器上,将 marketplace 添加到同一 `managed-settings.json` 中的 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces),以便 Claude Code 自动注册它,或运行 `claude plugin marketplace add anthropics/claude-plugins-official`。

1054 

1055仅允许特定 marketplaces:

1056 

1057```json theme={null}

1058{

1059 "strictKnownMarketplaces": [

1060 {

1061 "source": "github",

1062 "repo": "acme-corp/approved-plugins"

1063 },

1064 {

1065 "source": "github",

1066 "repo": "acme-corp/security-tools",

1067 "ref": "v2.0"

1068 },

1069 {

1070 "source": "url",

1071 "url": "https://plugins.example.com/marketplace.json"

1072 }

1073 ]

1074}

1075```

1076 

1077使用[所有者通配符](/docs/zh-CN/settings-reference#owner-wildcards)条目允许 GitHub 组织下的每个 marketplace 存储库。所有者通配符需要 Claude Code v2.1.223 或更高版本。

1078 

1079```json theme={null}

1080{

1081 "strictKnownMarketplaces": [

1082 {

1083 "source": "github",

1084 "repo": "acme-corp/*"

1085 }

1086 ]

1087}

1088```

1089 

1090使用主机上的正则表达式模式匹配允许来自内部 git 服务器的所有 marketplaces。这是 [GitHub Enterprise Server](/docs/zh-CN/github-enterprise-server#plugin-marketplaces-on-ghes) 或自托管 GitLab 实例的推荐方法:

1091 

1092```json theme={null}

1093{

1094 "strictKnownMarketplaces": [

1095 {

1096 "source": "hostPattern",

1097 "hostPattern": "^github\\.example\\.com$"

1098 }

1099 ]

1100}

1101```

1102 

1103使用路径上的正则表达式模式匹配允许来自特定目录的基于文件系统的 marketplaces:

1104 

1105```json theme={null}

1106{

1107 "strictKnownMarketplaces": [

1108 {

1109 "source": "pathPattern",

1110 "pathPattern": "^/opt/approved/"

1111 }

1112 ]

1113}

1114```

1115 

1116使用 `".*"` 作为 `pathPattern` 来允许任何文件系统路径,同时仍然使用 `hostPattern` 控制网络源。

1117 

1118<Note>

1119 `strictKnownMarketplaces` 限制用户可以添加的内容,但不会自行注册 marketplaces。要为用户自动注册允许的 marketplace,请在同一 `managed-settings.json` 中将其添加到 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces)。

1120 

1121 官方 Anthropic marketplace 是唯一 Claude Code 自行注册的,仅当允许列表允许时。自动注册也遗漏一些机器,例如非交互环境和早期策略阻止它的机器。要覆盖这些机器,也将官方 marketplace 添加到 `extraKnownMarketplaces`。有关两个设置并排,请参阅 [`strictKnownMarketplaces` 参考](/docs/zh-CN/settings-reference#strictknownmarketplaces)。

1122</Note>

1123 

1124<h4 id="how-restrictions-work">

1125 限制如何工作

1126</h4>

1127 

1128限制在任何网络或文件系统操作之前进行检查。检查在 marketplace 添加以及 plugin 安装、更新、刷新和自动更新时运行。如果 marketplace 在配置策略之前被添加,其源不再与允许列表匹配,Claude Code 会拒绝从中安装或更新 plugins。相同的强制执行也适用于 `blockedMarketplaces`。

1129 

1130两个列表的强制执行位置取决于你在哪里设置它们:

1131 

1132* **claude.ai 管理控制台**:Claude Code 在[读取服务器管理设置](/docs/zh-CN/managed-settings#where-and-when-a-policy-applies)的会话中强制执行两个列表。claude.ai 还在你的组织中的任何人从 git 存储库在 claude.ai 上添加新 marketplace,或从 Claude Desktop 应用外部其 Code 选项卡的**自定义**添加新 marketplace 时检查它们。这涵盖成员为自己的账户添加的 marketplace 和在[**组织设置 > Plugins**](https://claude.ai/admin-settings/plugins)下为整个组织添加的 marketplace。claude.ai 拒绝允许列表不允许的存储库或阻止列表命名的存储库。它不重新检查在你设置列表之前在任一位置添加的 marketplace,也不检查上传的 plugins。

1133* **托管设置文件、OS 级别策略或其他托管源**:Claude Code 在读取该源的地方强制执行两个列表。claude.ai 不读取它。

1134 

1135要阻止 GitHub 所有者下的每个 marketplace 存储库,请在 `blockedMarketplaces` 条目中使用所有者通配符形式:`{ "source": "github", "repo": "untrusted-org/*" }`。需要 Claude Code v2.1.223 或更高版本。有关匹配规则(在阻止列表和允许列表之间不同),请参阅[所有者通配符](/docs/zh-CN/settings-reference#owner-wildcards)。

1136 

1137当用户添加 Claude Code [克隆而不是获取](/docs/zh-CN/discover-plugins#add-from-other-git-hosts)的 `https://` 存储库 URL(例如裸 `github.com` 或 `gitlab.com` 存储库 URL)时,Claude Code 也会根据 `blockedMarketplaces` 中的 `url` 条目检查它。如果条目命名相同的 URL,Claude Code 会阻止添加。在该比较中,Claude Code 忽略 `.git` 后缀和用户在 `#` 后附加的任何 ref。需要 Claude Code v2.1.232 或更高版本。在 v2.1.232 之前,Claude Code 仅针对它作为托管 `marketplace.json` 文件获取的 URL 匹配 `url` 条目。

1138 

1139允许列表对大多数源类型使用精确匹配,除了所有者通配符 `github` 条目。要允许 marketplace,所有指定的字段必须匹配:

1140 

1141* 对于 GitHub 源:`repo` 是必需的,要么命名一个存储库,要么使用所有者通配符形式 `owner/*` 来覆盖该所有者下的每个存储库。有关通配符条目如何匹配(包括大小写规则),请参阅[所有者通配符](/docs/zh-CN/settings-reference#owner-wildcards)。对于单个存储库条目,`ref` 必须完全匹配或在 marketplace 源和允许列表条目中都不存在,相同的规则适用于 `path`

1142* 对于 URL 源:完整 URL 必须完全匹配

1143* 对于 `hostPattern` 源:marketplace 主机与正则表达式模式匹配

1144* 对于 `pathPattern` 源:marketplace 的文件系统路径与正则表达式模式匹配

1145 

1146允许列表的精确匹配将仅因尾部斜杠、`.git` 后缀或 `ssh://` 和 `https://` 方案不同的 URL 视为不同的值。如果你的组织的 marketplace 可以通过多个 URL 形式克隆,优先使用 `hostPattern` 条目而不是字面 URL,以便 `https://`、`ssh://` 和 `user@host:path` 形式都匹配。

1147 

1148一个[托管在 claude.ai 上的 marketplace](/docs/zh-CN/discover-plugins#add-from-claude-ai) 通过主机匹配:一个与 `claude.ai` 匹配的 `hostPattern` 条目在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中管理它。在允许列表上,这样的条目不允许成员的个人 claude.ai 上传。需要 Claude Code v2.1.273 或更高版本。

1149 

1150因为 `strictKnownMarketplaces` 在[托管设置](/docs/zh-CN/managed-settings)中设置,个别用户和项目配置无法覆盖这些限制。

1151 

1152有关完整的配置详细信息,包括所有支持的源类型和与 `extraKnownMarketplaces` 的比较,请参阅 [strictKnownMarketplaces 参考](/docs/zh-CN/settings-reference#strictknownmarketplaces)。

1153 

1154<h3 id="version-resolution-and-release-channels">

1155 版本解析和发布渠道

1156</h3>

1157 

1158Plugin 版本确定缓存路径和更新检测:如果解析的版本与用户已有的版本匹配,`/plugin update` 和自动更新会跳过该 plugin。对于 git 源,如果你省略 `version`,Claude Code 使用源的解析提交 SHA,所以用户在该提交更改时获得更新;这是内部或积极开发的 plugins 的最简单设置。有关完整的解析顺序(包括 `archive` 源),请参阅[版本管理](/docs/zh-CN/plugins-reference#version-management)。

1159 

1160<Warning>

1161 设置 `version` 为除了 [`command`](#command-sources) 之外的每个源类型固定 plugin,其版本始终包括命令生成内容的哈希。一个[从 marketplace 加载的 plugin](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)添加为本地目录也不会被固定。如果你在 `plugin.json` 中声明 `"version": "1.0.0"` 并推送新提交而不改变该字符串,这些源的现有用户保留缓存副本,因为 Claude Code 看到相同的版本。在每个发布时提升该字段,或省略它以回退到解析的版本。

1162 

1163 避免在 `plugin.json` 和 marketplace 条目中都设置 `version`。Claude Code 总是无声地使用 `plugin.json` 值,所以陈旧的 manifest 版本可能会掩盖你在 `marketplace.json` 中设置的版本。

1164</Warning>

1165 

1166<h4 id="set-up-release-channels">

1167 设置发布渠道

1168</h4>

1169 

1170要为你的 plugins 支持"稳定"和"最新"发布渠道,你可以设置两个指向同一 repo 的不同 refs 或 SHAs 的 marketplaces。然后你可以通过托管设置以两种方式之一将每个用户组分配给其自己的 marketplace:

1171 

1172* 部署单独的[端点管理设置](/docs/zh-CN/managed-settings#delivery-mechanisms)(例如托管设置文件或 MDM 配置文件)到每个组的设备。[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)说明每个组的文件或配置文件是否适用于也有组织范围源的设备。

1173* 为每个组定义一个 [Claude apps gateway 策略](/docs/zh-CN/claude-apps-gateway-config#managed)。网关应用第一个匹配规则适合用户的策略,所以对策略进行排序,以便每个用户到达其组的策略。组策略的 `extraKnownMarketplaces` 替换全局策略的映射而不是与其合并,所以在组的策略中列出组需要的每个 marketplace,而不仅仅是其渠道 marketplace。

1174 

1175来自管理控制台的服务器管理设置[适用于你的组织中的每个用户](/docs/zh-CN/server-managed-settings#current-limitations),所以它们无法进行每个组的分配。

1176 

1177<Warning>

1178 每个渠道必须解析为不同的版本。如果你使用显式版本,`plugin.json` 必须在每个固定的 ref 处声明不同的 `version`。如果你省略 `version`,不同的提交 SHA 已经区分了渠道。如果两个 refs 解析为相同的版本字符串,Claude Code 会将它们视为相同并跳过更新。

1179</Warning>

1180 

1181<h5 id="example">

1182 示例

1183</h5>

1184 

1185```json theme={null}

1186{

1187 "name": "stable-tools",

1188 "plugins": [

1189 {

1190 "name": "code-formatter",

1191 "source": {

1192 "source": "github",

1193 "repo": "acme-corp/code-formatter",

1194 "ref": "stable"

1195 }

1196 }

1197 ]

1198}

1199```

1200 

1201```json theme={null}

1202{

1203 "name": "latest-tools",

1204 "plugins": [

1205 {

1206 "name": "code-formatter",

1207 "source": {

1208 "source": "github",

1209 "repo": "acme-corp/code-formatter",

1210 "ref": "latest"

1211 }

1212 }

1213 ]

1214}

1215```

1216 

1217<h5 id="assign-channels-to-user-groups">

1218 将渠道分配给用户组

1219</h5>

1220 

1221通过上述[设置发布渠道](#set-up-release-channels)中描述的每个组端点管理设置或网关策略将每个 marketplace 分配给其用户组。例如,稳定组接收:

1222 

1223```json theme={null}

1224{

1225 "extraKnownMarketplaces": {

1226 "stable-tools": {

1227 "source": {

1228 "source": "github",

1229 "repo": "acme-corp/stable-tools"

1230 }

1231 }

1232 }

1233}

1234```

1235 

1236早期访问组改为接收 `latest-tools`:

1237 

1238```json theme={null}

1239{

1240 "extraKnownMarketplaces": {

1241 "latest-tools": {

1242 "source": {

1243 "source": "github",

1244 "repo": "acme-corp/latest-tools"

1245 }

1246 }

1247 }

1248}

1249```

1250 

1251<h4 id="pin-dependency-versions">

1252 固定依赖版本

1253</h4>

1254 

1255Plugin 可以将其依赖约束到 semver 范围,以便对依赖的更新不会破坏依赖的 plugin。有关 `{plugin-name}--v{version}` git 标签约定、范围语法以及如何组合对同一依赖的多个约束,请参阅[约束 plugin 依赖版本](/docs/zh-CN/plugin-dependencies)。

1256 

1257<h3 id="rename-or-remove-a-plugin">

1258 重命名或删除 plugin

1259</h3>

1260 

1261Plugin 的 `name` 是其稳定标识符。用户在 `enabledPlugins`、`pluginConfigs` 和 `/plugin install` 命令中引用它,所以改变它会破坏每个现有的安装。要改变 UI 中显示的标签而不破坏安装,请设置 [`displayName`](#optional-plugin-fields) 并保持 `name` 不变。

1262 

1263如果你必须改变 plugin 的 `name`,或者你从 `plugins` 数组中删除 plugin,请添加顶级 `renames` 条目,以便现有用户迁移而不是看到 `plugin-not-found` 错误。自动迁移需要 Claude Code v2.1.193 或更高版本。将每个前名称映射到其当前名称,或映射到 `null` 如果 plugin 不再存在。以下示例将 `formatter` 重命名为 `code-formatter` 并记录 `legacy-linter` 已被删除:

1264 

1265```json theme={null}

1266{

1267 "name": "acme-tools",

1268 "owner": { "name": "Acme" },

1269 "plugins": [

1270 { "name": "code-formatter", "source": "./plugins/code-formatter" }

1271 ],

1272 "renames": {

1273 "formatter": "code-formatter",

1274 "legacy-linter": null

1275 }

1276}

1277```

1278 

1279当用户启动 Claude Code 时旧名称仍在其设置中,Claude Code 遵循 `renames` 映射:

1280 

1281* 如果条目指向新名称,Claude Code 在其新名称下加载 plugin 并显示一行通知,例如 `在"acme-tools" marketplace 中重命名为"code-formatter"`。然后它在用户、项目和本地设置范围中为 `enabledPlugins` 和 `pluginConfigs` 都将旧键重写为新键,所以通知只出现一次。

1282* 对于 `null` 条目,Claude Code 删除旧键,通知报告 plugin 已从 marketplace 中删除。

1283* 如果重命名的 plugin 使用远程源,例如 `github` 或 `npm`,Claude Code 在重命名后报告 `plugin-cache-miss`,用户必须运行 `/plugin install` 一次以在新名称下获取它。

1284 

1285将 `renames` 视为仅追加历史:即使在你期望每个用户都已迁移后,也要保持旧条目就位。Claude Code 遵循链,所以如果你稍后将 `code-formatter` 重命名为 `formatter-pro`,请添加第二个条目而不是编辑第一个。仍然启用原始 `formatter` 的用户然后通过两个条目解析到 `formatter-pro`。

1286 

1287在编辑映射后运行 `claude plugin validate .`;它拒绝任何链形成循环或不终止于 `null` 或 `plugins` 中列出的名称的条目。

1288 

1289<Note>

1290 托管和策略设置对 Claude Code 是只读的,所以在那里启用的 plugins 无法自动重写。重命名的 plugin 仍然在每个会话中加载,但重命名通知会重复出现,直到管理员更新托管设置文件中的 `enabledPlugins` 以使用新名称。相同的情况适用于通过其他只读源(例如 `--add-dir`)启用的 plugins。

1291</Note>

1292 

1293早期版本的 Claude Code 忽略 `renames` 字段并为旧名称报告 `plugin-not-found`。

1294 

1295<h2 id="validation-and-testing">

1296 验证和测试

1297</h2>

1298 

1299在共享前测试你的 marketplace。验证检查文件结构;要测试 plugin 是否改变了 Claude 在实际提示上的行为,请在发布新版本前使用 [`claude plugin eval`](/docs/zh-CN/plugin-evals) 运行其 eval 套件。

1300 

1301从你的 marketplace 目录验证 JSON 语法:

1302 

1303```bash theme={null}

1304claude plugin validate .

1305```

1306 

1307或从 Claude Code 内:

1308 

1309```shell theme={null}

1310/plugin validate .

1311```

1312 

1313添加 marketplace 进行测试:

1314 

1315```shell theme={null}

1316/plugin marketplace add ./path/to/marketplace

1317```

1318 

1319安装测试 plugin 以验证一切正常:

1320 

1321```shell theme={null}

1322/plugin install test-plugin@marketplace-name

1323```

1324 

1325有关完整的 plugin 测试工作流,请参阅[本地测试你的 plugins](/docs/zh-CN/plugins#test-your-plugins-locally)。有关技术故障排除,请参阅[Plugins 参考](/docs/zh-CN/plugins-reference)。

1326 

1327<h2 id="manage-marketplaces-from-the-cli">

1328 从 CLI 管理 marketplaces

1329</h2>

1330 

1331Claude Code 提供非交互式 `claude plugin marketplace` 子命令用于脚本编写和自动化。这些等同于交互式会话中可用的 `/plugin marketplace` 命令。

1332 

1333<h3 id="plugin-marketplace-add">

1334 Plugin marketplace add

1335</h3>

1336 

1337从 GitHub 存储库、git URL、远程 URL 或本地路径添加 marketplace。

1338 

1339```bash theme={null}

1340claude plugin marketplace add <source> [options]

1341```

1342 

1343**参数:**

1344 

1345* `<source>`:GitHub `owner/repo` 简写、git URL、指向 `marketplace.json` 文件的远程 URL 或本地目录路径。要固定到分支或标签,请将 `@ref` 附加到 GitHub 简写或 `#ref` 附加到 git URL

1346 

1347URL 必须包含其方案。从 Claude Code v2.1.196 开始,没有方案的主机(如 `gitlab.example.com/team/plugins`)被拒绝为无效的 `owner/repo` 简写,错误会告诉你添加 `https://` 或为本地路径使用 `./`。早期版本会将其误读为 GitHub 存储库路径,并在克隆时失败,出现 GitHub 未找到错误。

1348 

1349**选项:**

1350 

1351| 选项 | 描述 | 默认值 |

1352| :-------------------- | :--------------------------------------------------------------------------------------------------------------------- | :----- |

1353| `--scope <scope>` | 声明 marketplace 的位置:`user`、`project` 或 `local`。见 [Plugin 安装范围](/docs/zh-CN/plugins-reference#plugin-installation-scopes) | `user` |

1354| `--sparse <paths...>` | 通过 git sparse-checkout 限制检出到特定目录。对 monorepos 有用 | |

1355| `--claudeai` | 将参数读取为 [claude.ai 上托管的 marketplace](/docs/zh-CN/discover-plugins#add-from-claude-ai) 的名称,而不是源。需要 Claude Code v2.1.273 或更高版本 | |

1356 

1357从 GitHub 使用 `owner/repo` 简写添加 marketplace:

1358 

1359```bash theme={null}

1360claude plugin marketplace add acme-corp/claude-plugins

1361```

1362 

1363使用 `@ref` 固定到特定分支或标签:

1364 

1365```bash theme={null}

1366claude plugin marketplace add acme-corp/claude-plugins@v2.0

1367```

1368 

1369从非 GitHub 主机上的 git URL 添加:

1370 

1371```bash theme={null}

1372claude plugin marketplace add https://gitlab.example.com/team/plugins.git

1373```

1374 

1375从直接提供 `marketplace.json` 文件的远程 URL 添加:

1376 

1377```bash theme={null}

1378claude plugin marketplace add https://example.com/marketplace.json

1379```

1380 

1381从本地目录添加以进行测试:

1382 

1383```bash theme={null}

1384claude plugin marketplace add ./my-marketplace

1385```

1386 

1387在项目范围声明 marketplace,以便通过 `.claude/settings.json` 与你的团队共享:

1388 

1389```bash theme={null}

1390claude plugin marketplace add acme-corp/claude-plugins --scope project

1391```

1392 

1393对于 monorepo,限制检出到包含 plugin 内容的目录:

1394 

1395```bash theme={null}

1396claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins

1397```

1398 

1399添加 [claude.ai 上托管的 marketplace](/docs/zh-CN/discover-plugins#add-from-claude-ai),使用 `claude plugin marketplace list` 的 `From claude.ai:` 部分中打印的名称:

1400 

1401```bash theme={null}

1402claude plugin marketplace add --claudeai claudeai-organization-library

1403```

1404 

1405使用 `--claudeai`,命令拒绝 `--scope` 和 `--sparse`。marketplace 为你的账户托管,不在设置文件中声明,所以你无法通过项目的 `.claude/settings.json` 共享它。

1406 

1407<h3 id="plugin-marketplace-list">

1408 Plugin marketplace list

1409</h3>

1410 

1411列出所有配置的 marketplaces。

1412 

1413```bash theme={null}

1414claude plugin marketplace list [options]

1415```

1416 

1417**选项:**

1418 

1419| 选项 | 描述 |

1420| :------- | :------- |

1421| `--json` | 输出为 JSON |

1422 

1423使用 `--json`,每个条目包括 `name`、`source`、一个包含 marketplace 存储的本地缓存路径的 `installLocation` 字段,以及源特定字段:GitHub 源的 `repo`、git 和 URL 源的 `url`,以及本地源的 `path`。当 marketplace 使用固定分支或标签添加时,GitHub 和 git 源也包括 `ref` 字段。

1424 

1425添加的 [claude.ai marketplace](/docs/zh-CN/discover-plugins#add-from-claude-ai) 没有本地克隆,所以其条目使用其 claude.ai 标识符 `marketplaceId` 和 `organizationUuid` 代替 `installLocation`。

1426 

1427在 [plugins 从你的 claude.ai 账户同步](/docs/zh-CN/plugins-reference#synced-plugins) 的终端会话中,文本列表以 `From claude.ai:` 部分结尾,命名 claude.ai 为你的账户列出的内容,超出你添加的 marketplaces。要添加其中之一,见 [从 claude.ai 添加](/docs/zh-CN/discover-plugins#add-from-claude-ai)。`--json` 输出仅涵盖配置的 marketplaces,并省略该部分。需要 Claude Code v2.1.273 或更高版本。

1428 

1429<h3 id="plugin-marketplace-remove">

1430 Plugin marketplace remove

1431</h3>

1432 

1433删除配置的 marketplace。别名 `rm` 也被接受。

1434 

1435```bash theme={null}

1436claude plugin marketplace remove <name> [options]

1437```

1438 

1439**参数:**

1440 

1441* `<name>`:marketplace 名称要删除,如 `claude plugin marketplace list` 所示。这是来自 `marketplace.json` 的 `name`,而不是你传递给 `add` 的源

1442 

1443**选项:**

1444 

1445| 选项 | 描述 | 默认值 |

1446| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----- |

1447| `--scope <scope>` | 限制删除到单个设置范围:`user`、`project` 或 `local`。见 [Plugin 安装范围](/docs/zh-CN/plugins-reference#plugin-installation-scopes)。省略时,声明从每个可编辑的范围中删除。给定时,仅删除该范围的声明;当 marketplace 仍在另一个范围中声明时,共享状态、缓存和已安装的 plugin 数据将被保留 | (所有范围) |

1448 

1449<Warning>

1450 从其最后剩余的范围中删除 marketplace 也会卸载你从它安装的任何 plugins。要刷新 marketplace 而不丢失已安装的 plugins,请改用 `claude plugin marketplace update`。

1451</Warning>

1452 

1453<h3 id="plugin-marketplace-update">

1454 Plugin marketplace update

1455</h3>

1456 

1457从其源刷新 marketplaces 以检索新 plugins 和版本更改。使用分支或标签 `ref` 添加的 marketplace 会更新到该 ref 的最新提交,而不是存储库的默认分支。

1458 

1459```bash theme={null}

1460claude plugin marketplace update [name]

1461```

1462 

1463**参数:**

1464 

1465* `[name]`:marketplace 名称要更新,如 `claude plugin marketplace list` 所示。如果省略,更新所有 marketplaces

1466 

1467`remove` 和 `update` 在针对种子管理的 marketplace 运行时都会失败,这是只读的。更新所有 marketplaces 时,种子管理的条目被跳过,其他 marketplaces 仍然更新。要更改种子提供的 plugins,请要求你的管理员更新种子镜像。见 [为容器预填充 plugins](#pre-populate-plugins-for-containers)。

1468 

1469<h2 id="troubleshooting">

1470 故障排除

1471</h2>

1472 

1473<h3 id="marketplace-not-loading">

1474 Marketplace 未加载

1475</h3>

1476 

1477**症状**:无法添加 marketplace 或从中看到 plugins

1478 

1479**解决方案**:

1480 

1481* 验证 marketplace URL 是否可访问

1482* 检查 `.claude-plugin/marketplace.json` 是否存在于指定路径

1483* 使用 `claude plugin validate .` 或 `/plugin validate .` 确保 JSON 语法有效。要检查 skill、agent 和 command frontmatter,请参阅[验证没有 manifest 的 plugin 或目录](#validate-a-plugin-or-a-directory-without-a-manifest)

1484* 对于私有存储库,确认你有访问权限

1485 

1486<h3 id="marketplace-validation-errors">

1487 Marketplace 验证错误

1488</h3>

1489 

1490从你的 marketplace 目录运行 `claude plugin validate .` 或 `/plugin validate .` 来检查问题。当指向 marketplace 目录时,验证器检查 `marketplace.json` 是否存在 schema 错误、重复的 plugin 名称和源路径遍历。对于 `source` 是本地路径的每个条目,它还验证该 plugin 自己的 `plugin.json`,并在条目的 `version` 与 `plugin.json` 中的版本不匹配时发出警告。在 plugin 的 `plugin.json` 中发现的问题以条目索引为前缀,形式为 `plugins[2] plugin.json →`。

1491 

1492从 Claude Code v2.1.196 开始,每个条目的检查还会:

1493 

1494* 包括 `source` 为 `.` 的 plugins

1495* 在 `marketplace.json` 位于 `.claude-plugin` 目录外时运行,针对文件自己的目录解析源

1496* 即使文件的另一部分有 schema 错误,也报告每个条目的问题

1497 

1498早期版本跳过 marketplace 根目录中的 plugins,仅从 `.claude-plugin/marketplace.json` 开始下降。

1499 

1500从 marketplace 目录,Claude Code 不会打开 plugins 的 skill、agent、command 或 hook 文件。要查找这些文件中的错误,请参阅[验证没有 manifest 的 plugin 或目录](#validate-a-plugin-or-a-directory-without-a-manifest)。下表列出了从 marketplace 目录中最常见的错误,以及每个错误的原因和修复方法:

1501 

1502| 错误 | 原因 | 解决方案 |

1503| :------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- |

1504| `No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json` | 你命名的目录没有 `.claude-plugin/marketplace.json` 或 `plugin.json`,也没有 skill、agent 或 command 文件可检查 | 从 marketplace 根目录运行,或使用必需字段创建 `.claude-plugin/marketplace.json` |

1505| `Invalid JSON syntax: Unexpected token...` | marketplace.json 中的 JSON 语法错误 | 检查缺少的逗号、多余的逗号或未引用的字符串 |

1506| `Duplicate plugin name "x" found in marketplace` | 两个 plugins 共享相同的名称 | 给每个 plugin 一个唯一的 `name` 值 |

1507| `plugins[0].source: Path contains ".."` | 源路径包含 `..` | 使用相对于 marketplace 根目录的路径,不包含 `..`。见[相对路径](#relative-paths) |

1508| `Marketplace name cannot contain control or bidirectional-formatting characters` | marketplace `name` 包含 Unicode 双向格式化字符或控制字符,如转义或换行符 | 从名称中删除该字符。在 v2.1.247 之前,这些字符产生 `Marketplace name impersonates an official Anthropic/Claude marketplace` 错误 |

1509| `Plugin name cannot contain control or bidirectional-formatting characters` | plugin `name` 包含 Unicode 双向格式化字符或控制字符,如转义或换行符 | 从名称中删除该字符。在 v2.1.247 之前,Claude Code 没有运行此检查 |

1510 

1511**警告**(非阻止):

1512 

1513* `Marketplace has no plugins defined`:将至少一个 plugin 添加到 `plugins` 数组

1514* `No marketplace description provided`:添加顶级 `description` 以帮助用户理解你的 marketplace

1515* `Plugin name "x" is not kebab-case`:重命名为仅包含小写字母、数字和连字符(例如,`my-plugin`)。Claude Code 接受其他形式,但 claude.ai marketplace 同步会拒绝它们。

1516* `Marketplace name "x" is reserved in Claude Desktop`:marketplace 名称为 `org`、`org-provisioned` 或 `unknown`,任何大小写。Claude Code 接受这些名称,但 Claude Desktop 的托管 marketplace 同步会拒绝整个 marketplace。重命名 marketplace。在 v2.1.221 之前,`claude plugin validate` 没有运行此检查。

1517* `Marketplace name "x" is not accepted by Claude Desktop` 或 `Plugin name "x" is not accepted by Claude Desktop`:Claude Desktop 接受最多 128 个字符的名称,由字母、数字、`.`、`_` 和 `-` 组成,以字母或数字开头。Claude Code 接受其他形式,但 Claude Desktop 的托管 marketplace 同步会拒绝名称检查失败的 marketplace,并静默删除名称检查失败的 plugin 条目。重命名 marketplace 或 plugin。在 v2.1.221 之前,`claude plugin validate` 没有运行这些检查。

1518 

1519<h4 id="validate-a-plugin-or-a-directory-without-a-manifest">

1520 验证没有 manifest 的 plugin 或目录

1521</h4>

1522 

1523要查找 skill、agent 和 command 文件,其 frontmatter 无法解析,请运行 `claude plugin validate` 并命名包含它们的目录。Claude Code 不会查看你命名的目录之外。除了一次针对具有 `plugin.json` 的 plugin 的运行外,每次运行都需要 Claude Code v2.1.233 或更高版本。

1524 

1525<h5 id="pick-the-directory-to-name">

1526 选择要命名的目录

1527</h5>

1528 

1529Claude Code 根据你命名的目录检查不同的文件。在第一列中找到你想检查的内容,并运行该行的命令:

1530 

1531| 要检查 | 运行 | Claude Code 检查 |

1532| :------------------------------------------------------ | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------ |

1533| 具有 `plugin.json` 的 plugin | `claude plugin validate ./plugins/my-plugin` | `plugin.json`、`hooks/hooks.json` 和 plugin 根目录下的 `skills`、`agents` 和 `commands` 目录 |

1534| 一个 skill、agent 或 command 目录,例如没有 `plugin.json` 的 plugin | `claude plugin validate .claude/skills`、`~/.claude/agents` 或 `./my-plugin/agents` | 该目录中的每个 skill、agent 或 command 文件 |

1535| 其 skill 是其根 `SKILL.md` 的文件夹 | `claude plugin validate ./skills`,命名包含该文件夹的 `skills` 目录 | 每个文件夹的根 `SKILL.md`。包含目录必须命名为 `skills`;位于另一个名称下的文件夹,如 `plugins/`,没有检查其根 `SKILL.md` 的运行 |

1536| 一个项目的三个目录一次 | `claude plugin validate .claude`,或当项目没有 `.claude-plugin/` manifest 时的项目根目录 | `.claude/skills`、`.claude/agents` 和 `.claude/commands` |

1537| 你的用户级目录 | `claude plugin validate ~/.claude` | `~/.claude/skills`、`~/.claude/agents` 和 `~/.claude/commands` |

1538 

1539<h5 id="check-a-plugin-whose-skill-is-its-root-skill-md">

1540 检查其 skill 是其根 `SKILL.md` 的 plugin

1541</h5>

1542 

1543当你针对 plugin 目录运行 `claude plugin validate` 时,Claude Code 不会检查 plugin 根目录下的 `SKILL.md`。当 plugin 位于名为 `skills` 的目录中时,运行该命令两次:

1544 

1545* 命名该 `skills` 目录以检查 plugin 的根 `SKILL.md`。

1546* 命名 plugin 目录以检查其余部分。

1547 

1548当 plugin 位于另一个名称下(如 `plugins/`)时,`skills` 目录运行不可用,没有运行检查其根 `SKILL.md`。

1549 

1550<h5 id="check-files-behind-symlinks">

1551 检查符号链接后面的文件

1552</h5>

1553 

1554当你运行 `claude plugin validate` 时,Claude Code 不会跟随你命名的目录内的符号链接。它所做的取决于链接的位置:

1555 

1556* **plugin 或 `.claude` 根目录下的链接 `skills`、`agents` 或 `commands` 目录**:Claude Code 警告其中没有任何内容被读取。

1557* **`skills`、`agents` 或 `commands` 目录内的链接条目**:Claude Code 跳过它并警告,每个目录,它跳过了多少条目,会话会加载。

1558* **你命名的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父 `.claude` 目录是**:Claude Code 报告错误,并且不检查其中的任何内容。改为命名真实目录。

1559 

1560在两个 skills 情况下,运行通过警告。要检查链接的文件,再次运行并命名直接包含它们的目录:

1561 

1562* **其 `skills` 目录[链接到同级 plugin 的 skills](/docs/zh-CN/plugins-reference#share-files-within-a-marketplace-with-symlinks) 的 plugin**:命名同级 plugin 的目录。

1563* **`~/.claude/skills` 或 `.claude/skills` 中的[符号链接 skill 条目](/docs/zh-CN/skills#where-skills-live)**:Claude Code 在会话中跟随该条目。要检查它,命名一个名为 `skills` 的目录,该目录包含真实文件夹。

1564 

1565<h5 id="read-the-validation-results">

1566 读取验证结果

1567</h5>

1568 

1569干净的运行以 `Validation passed` 结束。

1570 

1571`No manifest found in directory` 意味着 Claude Code 在那里找不到 `plugin.json` 或 `marketplace.json`,也找不到它在其下探测的目录中的 skill、agent 或 command 文件。改为命名包含你的文件的 `skills`、`agents` 或 `commands` 目录。

1572 

1573Claude Code 从这些运行中报告的两个错误,以及每个错误的修复:

1574 

1575* `YAML frontmatter failed to parse: ...`:修复 skill、agent 或 command 文件的 frontmatter 块中的 YAML。在你这样做之前,会话从文件中读取不到 frontmatter 字段

1576* `Invalid JSON syntax: ...` 在 `hooks/hooks.json` 上:修复 JSON 语法。在你这样做之前,会话加载 plugin 时不带该文件中的 hooks。Claude Code 仅在 plugin 运行中报告此错误

1577 

1578在 plugin 运行中,Claude Code 还会警告 plugin 根目录下的 `CLAUDE.md`。对于你通过 [component path fields](/docs/zh-CN/plugins-reference#component-path-fields) 在 `plugin.json` 中设置的路径,Claude Code 检查每个路径是否存在,但不读取那里的文件。

1579 

1580<h3 id="plugin-installation-failures">

1581 Plugin 安装失败

1582</h3>

1583 

1584**症状**:Marketplace 出现但 plugin 安装失败

1585 

1586**解决方案**:

1587 

1588* 验证 plugin 源 URL 是否可访问

1589* 检查 plugin 目录是否包含必需的文件

1590* 对于 GitHub 源,确保存储库是公开的或你有访问权限

1591* 通过手动克隆/下载来测试 plugin 源

1592* 如果源同时固定了 `ref` 和 `sha`,删除的上游分支或标签不会阻止大多数 git 主机(包括 GitHub、GitLab 和 Bitbucket)上的安装。在不支持通过 SHA 获取提交的服务器上(如 AWS CodeCommit),`ref` 必须仍然存在,固定的提交必须可从其到达。如果安装仍然失败,请确认固定的提交仍然存在于存储库中

1593 

1594<h3 id="private-repository-authentication-fails">

1595 私有存储库身份验证失败

1596</h3>

1597 

1598**症状**:从私有存储库安装 plugins 时出现身份验证错误

1599 

1600**解决方案**:

1601 

1602对于手动安装和更新:

1603 

1604* 验证你已使用你的 git 提供商进行身份验证(例如,对于 GitHub 运行 `gh auth status`)

1605* 检查你的凭证助手是否配置正确:`git config --global credential.helper`

1606* 运行 `git ls-remote <marketplace-url>` 来测试 git 是否可以自行进行身份验证。如果 git 要求输入用户名或密码,请先存储凭证:对于 GitHub over HTTPS,运行 `gh auth setup-git`,对于 SSH 远程,将你的密钥加载到 `ssh-agent`

1607 

1608对于后台自动更新:

1609 

1610* 后台检查使用你配置的 git 凭证助手,但从不提示,因此你的助手必须能够使用存储的凭证进行应答。在 `ssh-agent` 中加载了密钥的 SSH 远程也可以进行身份验证

1611* 如果你的助手需要提示你,后台更新会静默失败,现有检出保持不变。首先登录你的助手,以便它为主机保存凭证。对于 GitHub,运行 `gh auth login`,然后 `gh auth setup-git`

1612* 当检查找到新提交,或无法到达或无法进行身份验证到远程时,Claude Code 使用相同的凭证重新克隆 marketplace。重新克隆可能在大型存储库上超时

1613* 设置 `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` 以在后台检查无法到达或无法进行身份验证到远程时保留现有检出,而不尝试重新克隆

1614* 如果重新克隆在大型存储库上超时,请使用 [`CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS`](#git-operations-time-out) 增加限制

1615* 或使用 `/plugin marketplace update <name>` 手动更新私有 marketplaces,这使用你的凭证

1616 

1617在 v2.1.280 之前,后台检查在没有你的凭证助手的情况下运行,无法进行身份验证到 HTTPS 上的私有存储库。

1618 

1619<h3 id="marketplace-updates-fail-in-offline-environments">

1620 Marketplace 更新在离线环境中失败

1621</h3>

1622 

1623**症状**:在离线或隔离的环境中,后台 marketplace 刷新无法到达远程,Claude Code 反复尝试无法成功的重新克隆。

1624 

1625**原因**:后台刷新检查 marketplace 的远程以查找新提交,当检查无法到达远程时,Claude Code 尝试再次克隆 marketplace。离线时,克隆以相同的方式失败,现有检出保持不变。在 v2.1.274 之前,刷新在现有检出中运行 `git pull`,当拉取失败时将检出移到一边以重新克隆,并在事后尽力恢复它。

1626 

1627刷新在启动后在后台运行,因此不会延迟启动。每个会话仍然重复失败的尝试,每个 git 操作可以等待 [120 秒超时](#git-operations-time-out)。

1628 

1629**解决方案**:设置 `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` 以在检查无法到达远程时跳过重新克隆尝试并继续使用现有检出:

1630 

1631```bash theme={null}

1632export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1

1633```

1634 

1635对于存储库永远无法访问的完全离线部署,请改用 [`CLAUDE_CODE_PLUGIN_SEED_DIR`](#pre-populate-plugins-for-containers) 在构建时预填充 plugins 目录。

1636 

1637<h3 id="git-operations-time-out">

1638 Git 操作超时

1639</h3>

1640 

1641**症状**:Plugin 安装或 marketplace 更新失败,出现超时错误,如 `Git clone timed out after 120s`。

1642 

1643**原因**:Claude Code 对所有 git 操作使用 120 秒超时,包括克隆 plugin 存储库和重新克隆 marketplace 以更新它。大型存储库或缓慢的网络连接可能超过此限制。

1644 

1645**解决方案**:使用 `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` 环境变量增加超时。该值以毫秒为单位:

1646 

1647```bash theme={null}

1648export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 minutes

1649```

1650 

1651<h3 id="plugins-with-relative-paths-fail-in-url-based-marketplaces">

1652 相对路径 Plugins 在基于 URL 的 Marketplaces 中失败

1653</h3>

1654 

1655**症状**:通过 URL(如 `https://example.com/marketplace.json`)添加了 marketplace,但具有相对路径源(如 `"./plugins/my-plugin"`)的 plugins 无法安装,出现 `its marketplace entry path does not stay inside the marketplace directory` 错误。已安装的 plugins 无法加载,出现 `Plugin source path refused` 错误。两条消息都有一个[错误参考条目](/docs/zh-CN/errors#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory)。

1656 

1657**原因**:添加基于 URL 的 marketplace 仅下载 `marketplace.json` 文件本身,Claude Code 不会从该服务器按相对路径获取 plugin 文件。marketplace 条目中的相对路径引用远程服务器上未下载的文件。

1658 

1659**解决方案**:

1660 

1661* **使用外部源**:将 plugin 条目更改为除相对路径外的任何 [plugin 源](#plugin-sources):

1662 ```json theme={null}

1663 { "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }

1664 ```

1665* **使用基于 Git 的 Marketplace**:在 Git 存储库中托管你的 marketplace 并使用 git URL 添加它。基于 Git 的 marketplaces 克隆整个存储库,使相对路径有效。

1666 

1667<h3 id="files-not-found-after-installation">

1668 安装后文件未找到

1669</h3>

1670 

1671**症状**:Plugin 安装但对文件的引用失败,特别是 plugin 目录外的文件

1672 

1673**原因**:Claude Code 将已安装的 plugins 复制到缓存目录,除非 plugin 就地加载。[链接模式中的 `command` 源](#copy-mode-and-link-mode)就地加载,[相对路径源](#relative-paths)在从本地目录添加的 marketplace 中也是如此。引用复制的 plugin 目录外文件的路径(如 `../shared-utils`)不会工作,因为这些文件不会被复制。

1674 

1675**解决方案**:见 [Plugin 缓存和文件解析](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution) 了解解决方法,包括符号链接和目录重组。

1676 

1677有关其他调试工具和常见问题,请参阅[调试和开发工具](/docs/zh-CN/plugins-reference#debugging-and-development-tools)。

1678 

1679<h2 id="see-also">

1680 另见

1681</h2>

1682 

1683* [发现和安装预构建的 plugins](/docs/zh-CN/discover-plugins) - 从现有 marketplaces 安装 plugins

1684* [Plugins](/docs/zh-CN/plugins) - 创建你自己的 plugins

1685* [Plugins 参考](/docs/zh-CN/plugins-reference) - 完整的技术规范和架构

1686* [Plugin 设置](/docs/zh-CN/settings-reference#plugin-settings) - Plugin 配置选项

1687* [strictKnownMarketplaces 参考](/docs/zh-CN/settings-reference#strictknownmarketplaces) - 托管 marketplace 限制

plugin-relevance.md +0 −188 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 为您的组织推荐插件

6 

7> 向marketplace插件条目添加relevance块,以便当用户的工作与之匹配时,Claude Code会建议他们安装。

8 

9如果您为组织运营插件marketplace,您可以根据用户正在处理的内容让Claude Code向用户建议特定的插件。向`marketplace.json`中的插件条目添加`relevance`块,然后在托管设置中将marketplace加入允许列表。当用户的会话与声明的信号之一匹配时,Claude Code会显示该插件的安装建议。

10 

11Marketplace声明的建议通过[托管设置](/docs/zh-CN/managed-settings)按marketplace选择加入。在管理员将任何marketplace添加到允许列表之前,没有marketplace的`relevance`声明会产生建议,包括官方Anthropic marketplace。Claude Code还包括一个独立于此允许列表的内置建议;当[`spinnerTipsEnabled`](/docs/zh-CN/settings-reference#spinnertipsenabled)设置为`false`时,该提示和所有marketplace声明的提示都会被禁用。

12 

13此页面适用于marketplace运营商和企业管理员。如果您想要安装插件,请参阅[发现和安装插件](/docs/zh-CN/discover-plugins)。

14 

15<h2 id="how-it-works">

16 工作原理

17</h2>

18 

19`marketplace.json`中的每个插件条目都可以包含一个`relevance`对象。该对象命名一个主题和一个或多个信号。信号是Claude Code针对当前会话测试的模式,例如工作目录或Claude已读取的文件。

20 

21信号匹配在用户的机器上本地进行。匹配不会增加网络流量,也不会向Anthropic或marketplace运营商报告哪些信号匹配或其值。

22 

23当信号匹配且插件尚未安装时,Claude Code会在三个位置显示该插件:

24 

25* **Spinner提示**:当Claude正在响应时,spinner下方会显示"使用\_topic\_?安装\_plugin\_插件"消息,附带`/plugin install`命令。

26* **会话启动建议**:如果`cwd`信号与工作目录匹配,在第一轮之前会显示一行`plugin suggestion: <name>@<marketplace> · /plugin`通知。

27* **`/plugin` Discover标签页**:插件被固定在Discover列表的顶部,带有"为此目录建议"或"为stripe命令建议"之类的注释。

28 

29Spinner提示和会话启动通知是spinner提示系统的一部分。当`spinnerTipsEnabled`在您的设置文件中解析为`false`时,Claude Code会禁用两者,或当`excludeDefault`在用户、`--settings`和托管设置中的[`spinnerTipsOverride`](/docs/zh-CN/settings-reference#spinnertipsoverride)键中解析为`true`时,这些键配置至少一个提示或`tipsFile`。

30 

31Discover标签页的固定独立于提示设置。

32 

33Claude Code永远不会自动安装插件。用户始终需要确认。

34 

35<h2 id="add-relevance-to-a-plugin-entry">

36 向插件条目添加relevance

37</h2>

38 

39向您的`marketplace.json`中的插件条目添加`relevance`对象。以下示例声明当Claude读取`.tf`文件或运行`terraform`时,`terraform-helpers`插件是相关的:

40 

41```json theme={null}

42{

43 "name": "acme-corp-plugins",

44 "owner": { "name": "Acme Platform Team" },

45 "plugins": [

46 {

47 "name": "terraform-helpers",

48 "source": "./plugins/terraform-helpers",

49 "description": "Acme conventions and helpers for Terraform",

50 "relevance": {

51 "topic": "Terraform",

52 "signals": {

53 "cli": ["terraform"],

54 "filesRead": ["**/*.tf"]

55 }

56 }

57 }

58 ]

59}

60```

61 

62具有`relevance`块但没有匹配信号的插件的行为与任何其他marketplace条目相同。它在Discover列表中以其正常位置出现,永远不会显示为spinner提示。

63 

64<h2 id="field-reference">

65 字段参考

66</h2>

67 

68<h3 id="relevance">

69 `relevance`

70</h3>

71 

72| 字段 | 类型 | 描述 |

73| :-------- | :----- | :---------------------------------------------------------------------------------------------------------------------------- |

74| `topic` | string | 可选。在spinner提示中填充"使用\_topic\_?"的短语。通常是产品名称,例如`Stripe`。当插件名称不能自然地作为主题读取时,使用域名如`design`。默认为插件名称,每个连字符段首字母大写。会话启动通知不使用此值。最多64个字符。 |

75| `signals` | object | 确定插件何时相关的匹配器。至少需要一个信号才能使插件可被建议。请参阅下表。 |

76 

77<h3 id="relevance-signals">

78 `relevance.signals`

79</h3>

80 

81| 字段 | 类型 | 描述 |

82| :------------- | :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

83| `cwd` | array of strings | 与会话工作目录匹配的Glob模式。作为绝对路径匹配,当在git存储库内时,作为相对于存储库根目录的路径匹配。正斜杠规范化且不区分大小写。每个模式都匹配目录本身及其下的所有内容,因此`infra`、`infra/`和`infra/**`的行为相同。这是唯一可以在会话启动时(第一轮之前)匹配的信号。最多10个模式,每个256个字符。 |

84| `cli` | array of strings | Claude在此会话中运行的shell命令中的命令名称,例如`["stripe"]`。适用于每个平台:在Windows上通过PowerShell或Git Bash运行的命令以相同方式记录。Claude Code每个shell工具调用记录一个命令名称:任何前导环境变量赋值和`sudo`之后的第一个令牌。复合命令仅贡献其前导命令,因此`cd infra && terraform plan`记录`cd`,而不是`terraform`。精确匹配。最多10个条目,每个64个字符。 |

85| `hosts` | array of strings | 此会话中Bash命令中`http://`或`https://` URL中看到的主机名,例如`["api.stripe.com"]`。仅限裸小写主机名:无方案、端口或路径。精确不区分大小写匹配。最多20个条目,每个128个字符。 |

86| `filesRead` | array of strings | 与Claude在此会话中读取的文件路径匹配的Glob模式,例如`["**/*.tf"]`。正斜杠规范化且不区分大小写。最多10个模式,每个256个字符。 |

87| `manifestDeps` | array of objects | Claude在此会话中读取的包清单中声明的依赖项。每个条目是`{ "file": "...", "pattern": "..." }`,其中`file`是与清单文件路径匹配的正则表达式(如会话状态中记录的,通常是绝对路径),`pattern`是与该文件内容匹配的正则表达式。在末尾锚定`file`,例如JSON转义形式中的`[/\\\\]package\\.json$`,因为起始锚定的模式永远不会匹配绝对路径。路径对于此信号不进行分隔符规范化,因此Windows路径使用反斜杠。大于512 KB的清单文件会被跳过。两个值都是最多256个字符的JavaScript `RegExp`源字符串。`file`不区分大小写匹配。`pattern`区分大小写。最多10个条目。 |

88 

89`cli`、`hosts`、`filesRead`和`manifestDeps`信号需要会话历史记录,因此它们只能在spinner提示和Discover标签页上匹配。

90 

91`filesRead`和`manifestDeps`信号测试会话的记录文件状态,其中还包括Claude已写入或编辑的文件以及自动加载的`CLAUDE.md`内存文件。对于这两个信号,Claude Code会跳过其自身[配置目录](/docs/zh-CN/claude-directory)及其临时目录下的路径。

92 

93以下示例使用`manifestDeps`在Claude读取了依赖于`stripe`的`package.json`后建议Stripe插件。`file`模式使用`[/\\\\]`以匹配正斜杠和反斜杠路径分隔符,使用`\\.`以使点为字面。在JSON中,正则表达式中的每个反斜杠都写两次。

94 

95```json theme={null}

96{

97 "name": "stripe-helpers",

98 "source": "./plugins/stripe-helpers",

99 "relevance": {

100 "topic": "Stripe",

101 "signals": {

102 "manifestDeps": [

103 {

104 "file": "[/\\\\]package\\.json$",

105 "pattern": "\"stripe\"\\s*:"

106 }

107 ]

108 }

109 }

110}

111```

112 

113<Note>

114 Claude Code在加载时忽略`relevance`和`relevance.signals`下的未知字段,因此较旧的客户端继续加载您的marketplace。

115</Note>

116 

117<h2 id="enable-suggestions-in-managed-settings">

118 在托管设置中启用建议

119</h2>

120 

121在`marketplace.json`中声明`relevance`本身是不够的。管理员必须在[托管设置](/docs/zh-CN/managed-settings)中将marketplace加入允许列表,其建议才会显示给用户。

122 

123将marketplace名称添加到`pluginSuggestionMarketplaces`。对于官方Anthropic marketplace以外的任何marketplace,还要在同一托管设置中声明marketplace源,要么作为该名称在`extraKnownMarketplaces`中的条目,要么作为`strictKnownMarketplaces`中的条目。如果在机器上注册的marketplace来自不同的源,则忽略允许列表中的名称。这可以防止无关的源以允许列表中的名称注册,以便在您的组织中建议其插件。

124 

125以下`managed-settings.json`从GitHub存储库注册一个组织marketplace并启用其建议:

126 

127```json theme={null}

128{

129 "extraKnownMarketplaces": {

130 "acme-corp-plugins": {

131 "source": {

132 "source": "github",

133 "repo": "acme-corp/claude-plugins"

134 }

135 }

136 },

137 "pluginSuggestionMarketplaces": ["acme-corp-plugins"]

138}

139```

140 

141官方marketplace免除源声明要求,因为其名称只能从官方Anthropic源注册。仅允许列表中的名称就足够了:

142 

143```json theme={null}

144{

145 "pluginSuggestionMarketplaces": ["claude-plugins-official"]

146}

147```

148 

149<h2 id="what-the-user-sees">

150 用户看到的内容

151</h2>

152 

153当会话期间信号匹配时,spinner提示读取:

154 

155```text theme={null}

156Working with Terraform? Install the terraform-helpers plugin:

157/plugin install terraform-helpers@acme-corp-plugins

158```

159 

160在会话启动时,匹配的`cwd`信号会显示一行通知:

161 

162```text theme={null}

163plugin suggestion: terraform-helpers@acme-corp-plugins · /plugin

164```

165 

166给定插件的建议在spinner提示和会话启动通知的组合中最多每三个会话出现一次,一旦插件被安装,两者都不会重复。会话启动通知在建议显示两次后还会停止出现。

167 

168在`/plugin` Discover标签页中,插件被固定在其他结果上方,带有命名匹配信号的注释,例如`suggested for this directory`或`suggested for terraform commands`。Discover标签页固定给定插件一次;后续访问以正常顺序列出它。

169 

170<h2 id="validate-your-marketplace">

171 验证您的marketplace

172</h2>

173 

174针对您的marketplace目录运行`claude plugin validate`以在发布前检查`relevance`块:

175 

176```

177claude plugin validate ./my-marketplace

178```

179 

180验证器将`relevance`和`relevance.signals`下的未知键报告为警告,标记不是对象的`relevance`值,并拒绝包含方案、端口或路径的`signals.hosts`条目。

181 

182<h2 id="see-also">

183 另请参阅

184</h2>

185 

186* [创建和分发插件marketplace](/docs/zh-CN/plugin-marketplaces):构建托管您的插件的marketplace

187* [从您的CLI推荐您的插件](/docs/zh-CN/plugin-hints):从您自己的CLI而不是Claude Code的会话信号提示用户

188* [所有设置](/docs/zh-CN/settings-reference#pluginsuggestionmarketplaces):`pluginSuggestionMarketplaces`和`extraKnownMarketplaces`

plugins.md +0 −527 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 创建插件

6 

7> 创建自定义插件以使用 skills、agents、hooks 和 MCP servers 扩展 Claude Code。

8 

9Plugins 让你能够使用自定义功能扩展 Claude Code,这些功能可以在项目和团队中共享。本指南涵盖如何使用 skills、agents、hooks 和 MCP servers 创建自己的插件。

10 

11想要安装现有插件?请参阅[发现和安装插件](/docs/zh-CN/discover-plugins)。有关完整的技术规范,请参阅[插件参考](/docs/zh-CN/plugins-reference)。

12 

13<h2 id="when-to-use-plugins-vs-standalone-configuration">

14 何时使用插件与独立配置

15</h2>

16 

17Claude Code 支持两种方式来添加自定义 skills、agents 和 hooks:

18 

19| 方法 | Skill 名称 | 最适合 |

20| :--------------------------------------------------------------------- | :------------------- | :------------------------ |

21| **独立**(`.claude/` 目录) | `/hello` | 个人工作流、项目特定的自定义、快速实验 |

22| **插件**(包含 skills、agents、hooks 或 `.claude-plugin/plugin.json` 清单的自包含目录) | `/plugin-name:hello` | 与团队成员共享、分发到社区、版本化发布、跨项目重用 |

23 

24<Tip>

25 从 `.claude/` 中的独立配置开始进行快速迭代,然后在准备好共享时[转换为插件](#convert-existing-configurations-to-plugins)。

26</Tip>

27 

28<h2 id="quickstart">

29 快速开始

30</h2>

31 

32本快速开始将引导你创建一个带有自定义 skill 的插件。你将创建一个清单(定义插件的配置文件)、添加一个 skill,并使用 `--plugin-dir` 标志在本地测试它。

33 

34<h3 id="prerequisites">

35 前置条件

36</h3>

37 

38* Claude Code [已安装并已认证](/docs/zh-CN/quickstart#step-1-install-claude-code)

39 

40<h3 id="create-your-first-plugin">

41 创建你的第一个插件

42</h3>

43 

44<Steps>

45 <Step title="创建插件目录">

46 每个插件都位于其自己的目录中,包含你的 skills、agents 或 hooks,可选地与 `.claude-plugin/plugin.json` 清单一起。该位置对于本快速开始并不重要,因为你将在测试步骤中使用 `--plugin-dir` 指向 Claude Code 该目录。在任何方便的地方创建它,例如临时文件夹或项目目录:

47 

48 ```bash theme={null}

49 mkdir my-first-plugin

50 ```

51 

52 其余步骤从父目录运行,并引用相对于它的路径,如 `my-first-plugin/...`。

53 </Step>

54 

55 <Step title="创建插件清单">

56 位于 `.claude-plugin/plugin.json` 的清单文件定义了你的插件的身份:其名称、描述和版本。Claude Code 使用此元数据在插件管理器中显示你的插件。

57 

58 在你的插件文件夹内创建 `.claude-plugin` 目录:

59 

60 ```bash theme={null}

61 mkdir my-first-plugin/.claude-plugin

62 ```

63 

64 然后使用以下内容创建 `my-first-plugin/.claude-plugin/plugin.json`:

65 

66 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}

67 {

68 "name": "my-first-plugin",

69 "description": "A greeting plugin to learn the basics",

70 "version": "1.0.0",

71 "author": {

72 "name": "Your Name"

73 }

74 }

75 ```

76 

77 | 字段 | 目的 |

78 | :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

79 | `name` | 唯一标识符和 skill 命名空间。Skills 以此为前缀(例如 `/my-first-plugin:hello`)。 |

80 | `description` | 在浏览或安装插件时在插件管理器中显示。 |

81 | `version` | 可选。如果设置,用户仅在你更新此字段时接收更新,除了 [`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)或[就地加载](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)的插件;请参阅[版本管理](/docs/zh-CN/plugins-reference#version-management)。如果省略,版本来自[版本管理](/docs/zh-CN/plugins-reference#version-management)中的下一个源。 |

82 | `author` | 可选。有助于归属。 |

83 

84 有关 `homepage`、`repository` 和 `license` 等其他字段,请参阅[完整清单架构](/docs/zh-CN/plugins-reference#plugin-manifest-schema)。

85 </Step>

86 

87 <Step title="添加 skill">

88 Skills 位于 `skills/` 目录中。每个 skill 是一个包含 `SKILL.md` 文件的文件夹。文件夹名称成为 skill 名称,以插件的命名空间为前缀(在名为 `my-first-plugin` 的插件中的 `hello/` 创建 `/my-first-plugin:hello`)。

89 

90 在你的插件文件夹中创建一个 skill 目录:

91 

92 ```bash theme={null}

93 mkdir -p my-first-plugin/skills/hello

94 ```

95 

96 然后使用以下内容创建 `my-first-plugin/skills/hello/SKILL.md`:

97 

98 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

99 ---

100 description: Greet the user with a friendly message

101 disable-model-invocation: true

102 ---

103 

104 Greet the user warmly and ask how you can help them today.

105 ```

106 </Step>

107 

108 <Step title="测试你的插件">

109 使用 `--plugin-dir` 标志运行 Claude Code 以加载你的插件:

110 

111 ```bash theme={null}

112 claude --plugin-dir ./my-first-plugin

113 ```

114 

115 Claude Code 启动后,尝试你的新 skill:

116 

117 ```shell theme={null}

118 /my-first-plugin:hello

119 ```

120 

121 你将看到 Claude 用问候语回应。运行 `/help` 并打开**自定义命令**选项卡以查看你的 skill 在插件命名空间下列出。

122 

123 <Note>

124 **为什么要命名空间?** 插件 skills 总是命名空间化的(如 `/my-first-plugin:hello`),以防止多个插件具有相同名称的 skills 时发生冲突。

125 

126 要更改命名空间前缀,请更新 `plugin.json` 中的 `name` 字段。

127 </Note>

128 </Step>

129 

130 <Step title="添加 skill 参数">

131 通过接受用户输入使你的 skill 动态化。`$ARGUMENTS` 占位符捕获用户在 skill 名称后提供的任何文本。

132 

133 更新你的 `SKILL.md` 文件:

134 

135 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

136 ---

137 description: Greet the user with a personalized message

138 ---

139 

140 # Hello Skill

141 

142 Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.

143 ```

144 

145 运行 `/reload-plugins` 以获取更改。然后尝试使用你的名字的 skill:

146 

147 ```shell theme={null}

148 /my-first-plugin:hello Alex

149 ```

150 

151 Claude 将按名字问候你。有关向 skills 传递参数的更多信息,请参阅 [Skills](/docs/zh-CN/skills#pass-arguments-to-skills)。

152 </Step>

153</Steps>

154 

155<Tip>

156 `--plugin-dir` 标志对开发和测试很有用。当你准备好与他人共享你的插件时,请参阅[创建和分发插件市场](/docs/zh-CN/plugin-marketplaces)。

157</Tip>

158 

159<h2 id="develop-a-plugin-in-your-skills-directory">

160 在你的 skills 目录中开发插件

161</h2>

162 

163与其在每次启动时传递 `--plugin-dir`,你可以在你的 skills 目录中保留一个插件,并让 Claude Code 自动加载它。`claude plugin init` 会为你搭建一个:

164 

165```bash theme={null}

166claude plugin init my-tool

167```

168 

169这会创建 `~/.claude/skills/my-tool/`,其中包含 `.claude-plugin/plugin.json` 清单和一个启动器 `SKILL.md`。在下一个会话中,它会作为 `my-tool@skills-dir` 加载,无需市场或安装步骤。

170 

171有关自动加载规则、个人与项目范围、工作区信任要求以及如何更新或删除一个,请参阅 [Skills-directory plugins](/docs/zh-CN/plugins-reference#skills-directory-plugins)。

172 

173<h2 id="plugin-structure-overview">

174 插件结构概览

175</h2>

176 

177你已创建了一个带有 skill 的插件,但插件可以包含更多内容:自定义 agents、hooks、MCP servers、LSP servers 和后台监视器。

178 

179<Warning>

180 **常见错误**:不要将 `commands/`、`agents/`、`skills/` 或 `hooks/` 放在 `.claude-plugin/` 目录内。只有 `plugin.json` 应该在 `.claude-plugin/` 内。所有其他目录必须在插件根级别。

181 

182 插件根是单个插件自己的目录,例如来自[快速开始](#quickstart)的 `my-first-plugin/`。它永远不是 `~/.claude/`。例如,Claude Code 不会读取放在 `~/.claude/.mcp.json` 的 `.mcp.json`。

183</Warning>

184 

185| 目录 | 位置 | 目的 |

186| :---------------- | :-- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

187| `.claude-plugin/` | 插件根 | 包含 `plugin.json` 清单(如果组件使用默认位置,则可选) |

188| `skills/` | 插件根 | Skills 作为 `<name>/SKILL.md` 目录 |

189| `commands/` | 插件根 | Skills 作为平面 Markdown 文件。为新插件使用 `skills/` |

190| `agents/` | 插件根 | 自定义 agent 定义 |

191| `hooks/` | 插件根 | `hooks.json` 中的事件处理程序 |

192| `.mcp.json` | 插件根 | MCP server 配置 |

193| `.lsp.json` | 插件根 | 用于代码智能的 LSP server 配置 |

194| `monitors/` | 插件根 | `monitors.json` 中的后台监视器配置 |

195| `bin/` | 插件根 | 在启用插件时添加到 Bash tool 的 `PATH` 的可执行文件。你不能在[通过 claude.ai 组织设置分发的插件中包含此目录](/docs/zh-CN/plugin-marketplaces#keep-executables-out-of-the-top-level-bin-directory) |

196| `settings.json` | 插件根 | 启用插件时应用的默认[设置](/docs/zh-CN/settings) |

197 

198恰好包含一个 skill 的插件可以直接在插件根目录放置 `SKILL.md`,而不是创建 `skills/` 目录。Claude Code 会将其作为单个 skill 加载,并使用 frontmatter 中的 `name` 字段作为调用名称。对于可能增长到多个 skill 的插件,请使用 `skills/` 布局。

199 

200<h2 id="develop-more-complex-plugins">

201 开发更复杂的插件

202</h2>

203 

204一旦你对基本插件感到满意,你可以创建更复杂的扩展。

205 

206<h3 id="add-skills-to-your-plugin">

207 向你的插件添加 Skills

208</h3>

209 

210插件可以包含 [Agent Skills](/docs/zh-CN/skills) 以扩展 Claude 的功能。Skills 是模型调用的:Claude 根据任务上下文自动使用它们。

211 

212在你的插件根目录添加一个 `skills/` 目录,其中包含包含 `SKILL.md` 文件的 Skill 文件夹:

213 

214```text theme={null}

215my-plugin/

216├── .claude-plugin/

217│ └── plugin.json

218└── skills/

219 └── code-review/

220 └── SKILL.md

221```

222 

223每个 `SKILL.md` 包含 YAML frontmatter 和说明。包含一个 `description`,以便 Claude 知道何时使用该 skill:

224 

225```yaml theme={null}

226description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.

227 

228When reviewing code, check for:

2291. Code organization and structure

2302. Error handling

2313. Security concerns

2324. Test coverage

233```

234 

235安装插件后,检查安装摘要:如果它报告 `Run /reload-plugins to activate.`,请参阅 [Apply plugin changes without restarting](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 以在当前会话中加载 Skills。有关完整的 Skill 编写指南,包括渐进式披露和工具限制,请参阅 [Agent Skills](/docs/zh-CN/skills)。

236 

237<h3 id="add-lsp-servers-to-your-plugin">

238 向你的插件添加 LSP servers

239</h3>

240 

241<Tip>

242 对于 TypeScript、Python 和 Rust 等常见语言,请从官方市场安装预构建的 LSP 插件。仅当你需要支持尚未涵盖的语言时,才创建自定义 LSP 插件。

243</Tip>

244 

245LSP(Language Server Protocol)插件为 Claude 提供实时代码智能。如果你需要支持没有官方 LSP 插件的语言,你可以通过向你的插件添加 `.lsp.json` 文件来创建自己的:

246 

247```json .lsp.json theme={null}

248{

249 "go": {

250 "command": "gopls",

251 "args": ["serve"],

252 "extensionToLanguage": {

253 ".go": "go"

254 }

255 }

256}

257```

258 

259安装你的插件的用户必须在其机器上安装语言服务器二进制文件。

260 

261要确认服务器启动,使用启用的插件启动 Claude Code 并检查 `/plugin` Errors 标签:启动失败的语言服务器会出现在那里,例如当二进制文件未安装时显示 `Executable not found in $PATH`。具有无效配置的条目会被跳过;运行 `claude --debug` 以查看原因。

262 

263有关完整的 LSP 配置选项,请参阅 [LSP servers](/docs/zh-CN/plugins-reference#lsp-servers)。

264 

265<h3 id="add-background-monitors-to-your-plugin">

266 向你的插件添加后台监视器

267</h3>

268 

269后台监视器让你的插件在后台监视日志、文件或外部状态,并在事件到达时通知 Claude。Claude Code 在插件处于活动状态时自动启动每个监视器,因此你无需指示 Claude 启动监视。

270 

271在插件根目录添加一个 `monitors/monitors.json` 文件,其中包含监视器条目数组:

272 

273```json monitors/monitors.json theme={null}

274[

275 {

276 "name": "error-log",

277 "command": "tail -F ./logs/error.log",

278 "description": "Application error log"

279 }

280]

281```

282 

283来自 `command` 的每个 stdout 行在会话期间作为通知传递给 Claude。有关完整的架构,包括 `when` 触发器和变量替换,请参阅 [Monitors](/docs/zh-CN/plugins-reference#monitors)。

284 

285<h3 id="ship-default-settings-with-your-plugin">

286 使用你的插件提供默认设置

287</h3>

288 

289插件可以在插件根目录包含一个 `settings.json` 文件,以在启用插件时应用默认配置。目前仅支持 `agent` 和 `subagentStatusLine` 键。

290 

291设置 `agent` 激活插件的[自定义 agents](/docs/zh-CN/sub-agents) 之一作为主线程,应用其系统提示、工具限制和模型。这让插件在启用时通过改变 Claude Code 的默认行为方式。

292 

293```json settings.json theme={null}

294{

295 "agent": "security-reviewer"

296}

297```

298 

299此示例激活在插件的 `agents/` 目录中定义的 `security-reviewer` agent。来自 `settings.json` 的设置优先于在 `plugin.json` 中声明的 `settings`。未知键被静默忽略。

300 

301<h3 id="organize-complex-plugins">

302 组织复杂的插件

303</h3>

304 

305对于具有许多组件的插件,按功能组织你的目录结构。有关完整的目录布局和组织模式,请参阅 [Plugin directory structure](/docs/zh-CN/plugins-reference#plugin-directory-structure)。

306 

307<h3 id="test-your-plugins-locally">

308 在本地测试你的插件

309</h3>

310 

311使用 `--plugin-dir` 标志在开发期间测试插件。这会直接加载你的插件,无需安装。

312 

313```bash theme={null}

314claude --plugin-dir ./my-plugin

315```

316 

317该标志也接受插件目录的 `.zip` 存档。

318 

319```bash theme={null}

320claude --plugin-dir ./my-plugin.zip

321```

322 

323当 `--plugin-dir` 插件与已安装的市场插件同名时,本地副本在该会话中优先。这让你可以测试已安装的插件的更改,而无需先卸载它。由托管设置强制启用或强制禁用的插件是唯一的例外:`--plugin-dir` 无法覆盖这些。

324 

325当你对插件进行更改时,运行 `/reload-plugins` 以获取更新,无需重新启动。这会重新加载 plugins、skills、agents、hooks、插件 MCP servers 和插件 LSP servers;在没有交互式终端的会话中,插件 MCP server 更改[等待你的下一个会话](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting)。测试你的插件组件:

326 

327* 使用 `/plugin-name:skill-name` 尝试你的 skills

328* 检查 agents 是否出现在 `/context` 中的 Custom Agents 下,或通过其作用域名称 @-mention 其中一个

329* 触发每个 hook 匹配的事件,例如要求 Claude 编辑文件以进行 `PostToolUse` hook,并确认其效果。Claude Code 在[调试日志](/docs/zh-CN/hooks#debug-hooks)中记录哪些 hooks 匹配、它们的退出代码和它们的输出

330 

331<Tip>

332 你可以通过多次指定标志来一次加载多个插件:

333 

334 ```bash theme={null}

335 claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

336 ```

337 

338 要测试一个插件及其依赖的插件,请参阅 [Test a plugin and its dependency locally](/docs/zh-CN/plugin-dependencies#test-a-plugin-and-its-dependency-locally)。

339</Tip>

340 

341要在无法添加标志的会话中加载插件,请改为在 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables) 环境变量中列出它们的绝对路径。Claude Code 加载每个路径的方式与加载 `--plugin-dir` 路径的方式相同。这些插件除了你使用 `--plugin-dir` 传递的任何插件外,还会加载。[项目和本地设置无法设置此变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)。`CLAUDE_CODE_PLUGIN_DIRS` 需要 Claude Code v2.1.280 或更高版本。

342 

343使用 `--plugin-dir` 尝试插件会告诉你它可以工作。要找出 Claude 实际上多久会使用它一次并获得正确的结果,请使用 [`claude plugin eval`](/docs/zh-CN/plugin-evals) 针对一组测试提示运行它。每个提示会在加载和不加载插件的情况下运行多次,因此你可以看到插件的贡献并在你更改它或新模型发布时捕获回归。

344 

345要从一个地方加载多个插件,请传递一个包含它们的文件夹,例如 `--plugin-dir ./plugins`。加载一个插件文件夹需要 Claude Code v2.1.265 或更高版本。Claude Code 读取文件夹的顶级以决定哪些插件加载,在交互式会话中,它也会监视文件夹以查找后续更改:

346 

347* **加载的内容**:如果文件夹的顶级没有清单或插件组件,Claude Code 会将其视为插件文件夹。每个具有 `.claude-plugin/plugin.json` 清单的直接子文件夹作为单独的插件加载。Claude Code 跳过文件夹中的所有其他内容而不报告错误,包括没有清单的插件。

348* **交互式会话期间的更改**:你添加的子文件夹在其清单就位后作为新插件加载,当你删除子文件夹时,其插件卸载。Claude Code 为每个更改在会话中打印一行。如果在对话中间应用更改会[使提示缓存失效](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),Claude Code 会保留它,该行说要运行 `/reload-plugins` 以应用它。

349 

350要测试已打包为 `.zip` 存档并托管在 URL 上的插件(例如 CI 构建工件),请改用 `--plugin-url`。Claude Code 在启动时获取存档并仅为该会话加载它。如果 Claude Code 无法获取存档或存档无效,它会在没有插件的情况下启动并记录一个插件加载错误,你可以在 `/plugin` 管理器的 **Errors** 标签中查看。与任何插件源相同的[信任考虑](/docs/zh-CN/discover-plugins#security)适用:仅将此标志指向你控制或信任的存档。

351 

352要加载多个插件,请为每个 URL 重复该标志:

353 

354```bash theme={null}

355claude --plugin-url https://example.com/my-plugin.zip --plugin-url https://example.com/other.zip

356```

357 

358或将空格分隔的 URL 作为一个带引号的参数传递:

359 

360```bash theme={null}

361claude --plugin-url "https://example.com/my-plugin.zip https://example.com/other.zip"

362```

363 

364<h3 id="debug-plugin-issues">

365 调试插件问题

366</h3>

367 

368如果你的插件不按预期工作:

369 

3701. **检查结构**:确保你的目录在插件根目录,而不是在 `.claude-plugin/` 内

3712. **单独测试组件**:分别检查每个 skill、agent 和 hook

3723. **使用验证和调试工具**:有关 CLI 命令和故障排除技术,请参阅 [Debugging and development tools](/docs/zh-CN/plugins-reference#debugging-and-development-tools)

373 

374<h3 id="share-your-plugins">

375 共享你的插件

376</h3>

377 

378当你的插件准备好共享时:

379 

3801. **添加文档**:包含一个 `README.md`,其中包含安装和使用说明

3812. **选择版本控制策略**:决定是设置显式 `version` 还是依赖 [version management](/docs/zh-CN/plugins-reference#version-management) 中描述的回退。

3823. **创建或使用市场**:通过 [plugin marketplaces](/docs/zh-CN/plugin-marketplaces) 分发以供安装

3834. **与他人测试**:在更广泛分发之前让团队成员测试插件

384 

385一旦你的插件在市场中,其他人可以使用 [Discover and install plugins](/docs/zh-CN/discover-plugins) 中的说明安装它。要将插件保持在你的团队内部,请在 [private repository](/docs/zh-CN/plugin-marketplaces#private-repositories) 中托管市场。

386 

387<h3 id="submit-your-plugin-to-the-community-marketplace">

388 向社区市场提交你的插件

389</h3>

390 

391Anthropic 为 Claude Code 插件维护两个公共市场:

392 

393* **`claude-plugins-official`**:由 Anthropic 维护的精选插件集。在你首次以交互方式启动 Claude Code 时自动注册。如果你在该首次交互启动之前运行 Claude Code 非交互式,或[市场政策](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)阻止了早期尝试,请使用 `claude plugin marketplace add anthropics/claude-plugins-official` 自己注册。

394* **`claude-community`**:公共社区市场,第三方提交在审查后进入。用户使用 `/plugin marketplace add anthropics/claude-plugins-community` 添加它,并从中安装为 `@claude-community`。

395 

396要提交你的插件以供社区市场审查,请使用以下应用内表单之一:

397 

398* **claude.ai**:[claude.ai/admin-settings/directory/submissions/plugins/new](https://claude.ai/admin-settings/directory/submissions/plugins/new)

399* **Console**:[platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

400 

401claude.ai 表单需要 Team 或 Enterprise 组织和目录管理访问权限;组织所有者默认具有此访问权限。不属于 Team 或 Enterprise 组织的个人作者可以改用 Console 表单。

402 

403在提交之前,在本地运行 `claude plugin validate ./your-plugin`,将 `./your-plugin` 替换为你的插件目录的路径。审查管道对每个提交运行相同的检查,以及自动安全筛选。当验证通过时,Claude Code 打印 `✔ Validation passed`,或如果有警告则打印 `✔ Validation passed with warnings`。警告不会导致验证失败;添加 `--strict` 以将它们视为错误。

404 

405批准的插件被固定到 [`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) 目录中的特定提交 SHA,当你向你的存储库推送新提交时,CI 会自动提升该固定。公共目录每晚从审查管道同步,因此批准和你的插件出现在 `marketplace.json` 中之间可能会有延迟。要检查你的插件是否已可安装,请在[社区目录](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json)中搜索其名称。

406 

407官方市场 `claude-plugins-official` 是单独策划的。Anthropic 自行决定包含哪些插件。没有申请流程,提交表单不会将插件添加到官方市场。

408 

409如果 Anthropic 在官方市场中列出你的插件,你的 CLI 可以提示 Claude Code 用户安装它。请参阅 [Recommend your plugin from your CLI](/docs/zh-CN/plugin-hints)。

410 

411<h2 id="convert-existing-configurations-to-plugins">

412 将现有配置转换为插件

413</h2>

414 

415如果你已经在 `.claude/` 目录中有 skills 或 hooks,你可以将它们转换为插件,以便更轻松地共享和分发。

416 

417<h3 id="migration-steps">

418 迁移步骤

419</h3>

420 

421<Steps>

422 <Step title="创建插件结构">

423 在你的项目根目录中创建一个新的插件目录,与现有的 `.claude/` 文件夹并排放置,以便下一步中的相对 `cp` 路径能够解析:

424 

425 ```bash theme={null}

426 mkdir -p my-plugin/.claude-plugin

427 ```

428 

429 在 `my-plugin/.claude-plugin/plugin.json` 处创建清单文件:

430 

431 ```json my-plugin/.claude-plugin/plugin.json theme={null}

432 {

433 "name": "my-plugin",

434 "description": "Migrated from standalone configuration",

435 "version": "1.0.0"

436 }

437 ```

438 </Step>

439 

440 <Step title="复制你现有的文件">

441 将你拥有的每个配置目录复制到插件根目录。你可能没有全部三个:如果一个目录不存在,`cp` 会打印 `No such file or directory` 并且不复制任何内容,所以跳过该命令或忽略错误。

442 

443 ```bash theme={null}

444 cp -r .claude/commands my-plugin/

445 

446 cp -r .claude/agents my-plugin/

447 

448 cp -r .claude/skills my-plugin/

449 ```

450 

451 你的插件现在包含了你在 `.claude/` 下拥有的目录的副本。运行 `ls my-plugin` 来确认:你应该看到你复制的每个目录。

452 </Step>

453 

454 <Step title="迁移 hooks">

455 如果你在设置中有 hooks,请创建一个 hooks 目录:

456 

457 ```bash theme={null}

458 mkdir my-plugin/hooks

459 ```

460 

461 使用你的 hooks 配置创建 `my-plugin/hooks/hooks.json`。从你的 `.claude/settings.json` 或 `settings.local.json` 复制 `hooks` 对象,因为格式相同。命令在 stdin 上接收 hook 输入作为 JSON,所以使用 `jq` 提取文件路径:

462 

463 ```json my-plugin/hooks/hooks.json theme={null}

464 {

465 "hooks": {

466 "PostToolUse": [

467 {

468 "matcher": "Write|Edit",

469 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]

470 }

471 ]

472 }

473 }

474 ```

475 </Step>

476 

477 <Step title="测试你迁移的插件">

478 加载你的插件以验证一切正常:

479 

480 ```bash theme={null}

481 claude --plugin-dir ./my-plugin

482 ```

483 

484 测试每个组件:运行你的命令、检查 agents 是否出现在 `/context` 中,并触发每个 hook 匹配的事件以确认其效果。Claude Code 在[调试日志](/docs/zh-CN/hooks#debug-hooks)中记录了哪些 hooks 匹配以及它们如何退出。

485 </Step>

486</Steps>

487 

488<h3 id="what-changes-when-migrating">

489 迁移时的变化

490</h3>

491 

492| 独立(`.claude/`) | 插件 |

493| :----------------------- | :--------------------------- |

494| 仅在一个项目中可用 | 可以通过市场共享 |

495| `.claude/commands/` 中的文件 | `plugin-name/commands/` 中的文件 |

496| `settings.json` 中的 Hooks | `hooks/hooks.json` 中的 Hooks |

497| 必须手动复制以共享 | 使用 `/plugin install` 安装 |

498 

499<Note>

500 迁移后,从 `.claude/` 中删除原始文件以避免重复。项目和用户 `.claude/agents/` 定义会覆盖同名的插件 agents,因此插件版本仅在删除原始文件后才会生效。Plugin skills 被命名为 `/plugin-name:skill-name`,所以原始的 `/skill-name` 和插件副本都保持可用,而不是其中一个覆盖另一个。

501</Note>

502 

503<h2 id="next-steps">

504 后续步骤

505</h2>

506 

507现在你了解了 Claude Code 的插件系统,以下是针对不同目标的建议路径:

508 

509<h3 id="for-plugin-users">

510 对于插件用户

511</h3>

512 

513* [发现和安装插件](/docs/zh-CN/discover-plugins):浏览市场并安装插件

514* [配置团队市场](/docs/zh-CN/discover-plugins#configure-team-marketplaces):为你的团队设置存储库级别的插件

515 

516<h3 id="for-plugin-developers">

517 对于插件开发者

518</h3>

519 

520* [使用 evals 测试插件](/docs/zh-CN/plugin-evals):测量你的插件改变了什么并在 CI 中进行门控

521* [创建和分发市场](/docs/zh-CN/plugin-marketplaces):打包和共享你的插件

522* [插件参考](/docs/zh-CN/plugins-reference):完整的技术规范

523* 深入了解特定的插件组件:

524 * [Skills](/docs/zh-CN/skills):skill 开发详情

525 * [Subagents](/docs/zh-CN/sub-agents):agent 配置和功能

526 * [Hooks](/docs/zh-CN/hooks):事件处理和自动化

527 * [MCP](/docs/zh-CN/mcp):外部工具集成

plugins-reference.md +0 −1645 deleted

File Deleted View Diff

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Plugins 参考

6 

7> Claude Code 插件系统的完整技术参考,包括模式、CLI 命令和组件规范。

8 

9<Tip>

10 想要安装插件?请参阅 [发现和安装插件](/docs/zh-CN/discover-plugins)。有关创建插件,请参阅 [Plugins](/docs/zh-CN/plugins)。有关分发插件,请参阅 [Plugin marketplaces](/docs/zh-CN/plugin-marketplaces)。

11</Tip>

12 

13**插件**是一个自包含的组件目录,使用自定义功能扩展 Claude Code。插件组件包括 skills、agents、hooks、MCP servers、LSP servers 和 monitors。

14 

15<h2 id="plugin-components-reference">

16 插件组件参考

17</h2>

18 

19<h3 id="skills">

20 Skills

21</h3>

22 

23插件向 Claude Code 添加 skills,创建可由您或 Claude 调用的 `/name` 快捷方式。

24 

25**位置**:插件根目录中的 `skills/` 或 `commands/` 目录,或插件根目录中的单个 `SKILL.md` 文件

26 

27**文件格式**:Skills 是包含 `SKILL.md` 的目录;commands 是简单的 markdown 文件

28 

29**Skill 结构**:

30 

31```text theme={null}

32skills/

33├── pdf-processor/

34│ ├── SKILL.md

35│ ├── reference.md (optional)

36│ └── scripts/ (optional)

37└── code-reviewer/

38 └── SKILL.md

39```

40 

41安装插件时会自动发现 Skills 和 commands。

42 

43如果插件没有 `skills/` 目录且没有 `skills` manifest 字段,则插件根目录中的 `SKILL.md` 会作为单个 skill 加载。设置 frontmatter `name` 字段来控制 skill 的调用名称。如果没有设置,Claude Code 会回退到安装目录名称。对于 [复制到缓存中](#plugin-caching-and-file-resolution) 的插件,该名称是一个在每次更新时都会改变的版本字符串。对于包含多个 skill 的插件,请使用上面所示的 `skills/` 目录布局。

44 

45在插件 skills 和 commands 中,Boolean frontmatter 字段(如 `disable-model-invocation`)接受 `yes`、`no`、`on`、`off`、`1` 和 `0`(任何字母大小写),以及 `true` 和 `false`。在 v2.1.218 之前,Claude Code 仅识别 `true` 和 `false`。

46 

47有关完整详情,请参阅 [Skills](/docs/zh-CN/skills)。

48 

49<h3 id="agents">

50 Agents

51</h3>

52 

53插件可以为特定任务提供专门的子代理,Claude 可以在适当时自动调用这些代理。

54 

55**位置**:插件根目录中的 `agents/` 目录

56 

57**文件格式**:描述代理功能的 markdown 文件

58 

59**Agent 结构**:

60 

61```markdown theme={null}

62name: agent-name

63description: What this agent specializes in and when Claude should invoke it

64model: sonnet

65effort: medium

66maxTurns: 20

67disallowedTools: Write, Edit

68 

69Detailed system prompt for the agent describing its role, expertise, and behavior.

70```

71 

72<h4 id="plugin-agent-frontmatter">

73 插件代理 frontmatter

74</h4>

75 

76插件代理文件使用与 [子代理文件相同的 frontmatter 字段](/docs/zh-CN/sub-agents#supported-frontmatter-fields),但当代理来自插件时,Claude Code 仅支持其中的某些字段:

77 

78* **支持**:`name`、`description`、`model`、`effort`、`maxTurns`、`tools`、`disallowedTools`、`skills`、`memory`、`background`、`omitClaudeMd`、`isolation`、`color` 和 `experimental`。唯一有效的 `isolation` 值是 `"worktree"`。

79* **出于安全原因不支持**:`hooks`、`mcpServers` 和 `permissionMode`。Claude Code 在从插件加载代理时会忽略这些。要使用它们,请将代理文件复制到 `.claude/agents/` 或 `~/.claude/agents/`。

80* **不支持**:`initialPrompt`。

81 

82您可以将插件代理文件放在 `agents/` 的子文件夹中。Claude Code [递归加载它们](/docs/zh-CN/sub-agents#choose-the-subagent-scope),并使用冒号连接插件名称、每个子文件夹名称和文件名来形成代理的作用域名称。例如,名为 `my-plugin` 的插件中的 `agents/review/security.md` 加载为 `my-plugin:review:security`。两个设置会改变该名称:

83 

84* Frontmatter `name`:它仅替换文件名,因此 `agents/review/security.md` 中的 `name: audit` 加载为 `my-plugin:review:audit`

85* Manifest [`agents`](#component-path-fields) 字段:您在其中列出的文件加载时不带子文件夹名称,因此 `"agents": "./custom/review/security.md"` 加载为 `my-plugin:security`

86 

87Claude Code 加载插件代理,即使其 frontmatter 没有 `name` 或无法解析:

88 

89* 没有 `name`:Claude Code 根据文件名命名代理,因此名为 `my-plugin` 的插件中的 `agents/reviewer.md` 加载为 `my-plugin:reviewer`

90* Frontmatter 无法解析:Claude Code 根据文件名命名代理,使用 `Agent from my-plugin plugin` 作为其描述,并忽略文件中的每个字段

91 

92相比之下,Claude Code 会跳过其 frontmatter 没有 `name` 或无法解析的项目、用户或托管代理文件。

93 

94要查找插件默认 `agents/` 目录中 frontmatter 无法解析的文件,请运行 `claude plugin validate`。您传递的路径取决于插件是否有 manifest,两个示例都使用 `./my-plugin` 作为插件目录:

95 

96* 具有 manifest 的插件:`claude plugin validate ./my-plugin`

97* 没有 manifest 的插件:`claude plugin validate ./my-plugin/agents`。需要 Claude Code v2.1.233 或更高版本。

98 

99启用插件后,代理会在 [@-mention 类型提示](/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 中显示其作用域名称,例如 `my-plugin:code-reviewer`。

100 

101有关完整详情,请参阅 [Subagents](/docs/zh-CN/sub-agents)。

102 

103<h3 id="hooks">

104 Hooks

105</h3>

106 

107插件可以提供事件处理程序,自动响应 Claude Code 事件。

108 

109**位置**:插件根目录中的 `hooks/hooks.json`,或在 plugin.json 中内联

110 

111**格式**:具有事件匹配器和操作的 JSON 配置

112 

113`hooks/hooks.json` 可以包含一个顶级 `$schema` 键,该键命名一个 JSON Schema URL 以用于编辑器自动完成和验证。Claude Code 在加载时忽略该键。

114 

115**Hook 配置**:

116 

117```json theme={null}

118{

119 "hooks": {

120 "PostToolUse": [

121 {

122 "matcher": "Write|Edit",

123 "hooks": [

124 {

125 "type": "command",

126 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"

127 }

128 ]

129 }

130 ]

131 }

132}

133```

134 

135插件 hooks 响应与 [用户定义的 hooks](/docs/zh-CN/hooks) 相同的生命周期事件:

136 

137| 事件 | 触发时机 |

138| :-------------------- | :--------------------------------------------------------------------------------------------------------------------- |

139| `SessionStart` | 当会话开始或恢复时 |

140| `Setup` | 当你使用 `--init-only` 启动 Claude Code,或在 `-p` 模式下使用 `--init` 或 `--maintenance` 时。用于 CI 或脚本中的一次性准备 |

141| `UserPromptSubmit` | 当你提交提示词时,在 Claude 处理之前 |

142| `UserPromptExpansion` | 当用户输入的命令扩展为提示词时,在到达 Claude 之前。可以阻止扩展 |

143| `PreToolUse` | 在工具调用执行之前。可以阻止它 |

144| `PermissionRequest` | 当工具调用需要权限决策时 |

145| `PermissionDenied` | 当自动模式拒绝工具调用时,包括没有分类器判决的拒绝。使用 JSON `hookSpecificOutput.retry: true` 来告诉模型它可以重试被拒绝的工具调用。Claude Code 在分类器未产生判决时忽略 `retry` |

146| `PostToolUse` | 在工具调用成功后 |

147| `PostToolUseFailure` | 在工具调用失败后 |

148| `PostToolBatch` | 在一整批并行工具调用解决后,在下一次模型调用之前 |

149| `Notification` | 当 Claude Code 发送通知时 |

150| `MessageDisplay` | 当助手消息文本正在显示时 |

151| `SubagentStart` | 当子代理被生成时 |

152| `SubagentStop` | 当子代理完成时 |

153| `TaskCreated` | 当通过 `TaskCreate` 创建任务时 |

154| `TaskCompleted` | 当任务被标记为已完成时 |

155| `Stop` | 当 Claude 完成响应时 |

156| `StopFailure` | 当轮次因 API 错误而结束时 |

157| `TeammateIdle` | 当[代理团队](/docs/zh-CN/agent-teams)队友即将空闲时 |

158| `InstructionsLoaded` | 当 CLAUDE.md 或 `.claude/rules/*.md` 文件被加载到上下文中时。在会话开始时和文件在会话期间被延迟加载时触发 |

159| `ConfigChange` | 当配置文件在会话期间更改时 |

160| `CwdChanged` | 当工作目录更改时,例如当 Claude 执行 `cd` 命令时。对于使用 direnv 等工具的反应式环境管理很有用 |

161| `DirectoryAdded` | 当工作目录在会话中期通过 `/add-dir` 或 SDK `register_repo_root` 控制请求添加时 |

162| `FileChanged` | 当监视的文件在磁盘上更改时。`matcher` 字段指定要监视的文件名 |

163| `WorktreeCreate` | 当通过 `--worktree`、`isolation: "worktree"` 创建工作树时,或用于后台会话。替换默认的 git 行为 |

164| `WorktreeRemove` | 当在会话退出时、子代理完成时或删除后台会话时移除工作树 |

165| `PreCompact` | 在上下文压缩之前 |

166| `PostCompact` | 在上下文压缩完成后 |

167| `PreModelSwitch` | 在 Claude Code 应用你或客户端请求的模型切换之前。可以阻止切换 |

168| `PostModelSwitch` | 在会话的模型更改后,包括 Claude Code 自己进行的更改,例如在你恢复会话时恢复模型 |

169| `Elicitation` | 当 MCP 服务器在工具调用期间请求用户输入时 |

170| `ElicitationResult` | 在用户响应 MCP 引出后,在响应发送回服务器之前 |

171| `SessionEnd` | 当会话终止时 |

172 

173**Hook 类型**:

174 

175* `command`:执行 shell 命令或脚本

176* `http`:将事件 JSON 作为 POST 请求发送到 URL

177* `mcp_tool`:在配置的 [MCP server](/docs/zh-CN/mcp) 上调用工具

178* `prompt`:使用 LLM 评估提示(使用 `$ARGUMENTS` 占位符作为上下文)

179* `agent`:运行具有工具的代理验证器以完成复杂验证任务

180 

181针对插件自己的 [捆绑 MCP server](#mcp-servers) 的 hooks 必须使用其作用域名称。工具匹配器和 `if` 字段采用作用域工具名称 `mcp__plugin_<plugin-name>_<server-name>__<tool>`,`mcp_tool` hook 的 `server` 字段采用 `plugin:<plugin-name>:<server-name>`。针对裸服务器密钥编写的匹配器永远不会触发。请参阅 [Match MCP tools](/docs/zh-CN/hooks#match-mcp-tools) 和 [Plugin-provided MCP servers](/docs/zh-CN/mcp#plugin-provided-mcp-servers)。

182 

183<h3 id="mcp-servers">

184 MCP servers

185</h3>

186 

187插件可以捆绑 Model Context Protocol (MCP) 服务器,以将 Claude Code 与外部工具和服务连接。

188 

189**位置**:插件根目录中的 `.mcp.json`,或在 plugin.json 中内联

190 

191**格式**:标准 MCP 服务器配置

192 

193**MCP 服务器配置**:

194 

195```json theme={null}

196{

197 "mcpServers": {

198 "plugin-database": {

199 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

200 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

201 "env": {

202 "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"

203 }

204 },

205 "plugin-api-client": {

206 "command": "npx",

207 "args": ["@company/mcp-server", "--plugin-mode"]

208 }

209 }

210}

211```

212 

213**集成行为**:

214 

215* 启用插件时,插件 MCP 服务器会自动启动

216* 服务器在 Claude 的工具包中显示为标准 MCP 工具

217* 插件服务器可以独立于用户 MCP 服务器进行配置

218* 如果您在会话中途运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting),Claude Code 会保持配置未更改的服务器的实时连接

219 

220<h3 id="lsp-servers">

221 LSP servers

222</h3>

223 

224<Tip>

225 想要使用 LSP 插件?从官方市场安装它们:在 `/plugin` Discover 选项卡中搜索"lsp"。本部分记录如何为官方市场未涵盖的语言创建 LSP 插件。

226</Tip>

227 

228插件可以提供 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) 服务器,以在处理您的代码库时为 Claude 提供 [实时代码智能](/docs/zh-CN/discover-plugins#code-intelligence)。

229 

230**位置**:插件根目录中的 `.lsp.json`,或在 `plugin.json` 中内联

231 

232**格式**:将语言服务器名称映射到其配置的 JSON 配置

233 

234**`.lsp.json` 文件格式**:

235 

236```json theme={null}

237{

238 "go": {

239 "command": "gopls",

240 "args": ["serve"],

241 "extensionToLanguage": {

242 ".go": "go"

243 }

244 }

245}

246```

247 

248**在 `plugin.json` 中内联**:

249 

250```json theme={null}

251{

252 "name": "my-plugin",

253 "lspServers": {

254 "go": {

255 "command": "gopls",

256 "args": ["serve"],

257 "extensionToLanguage": {

258 ".go": "go"

259 }

260 }

261 }

262}

263```

264 

265**必需字段:**

266 

267| 字段 | 描述 |

268| :-------------------- | :------------------------- |

269| `command` | 要执行的 LSP 二进制文件(必须在 PATH 中) |

270| `extensionToLanguage` | 将文件扩展名映射到语言标识符 |

271 

272**可选字段:**

273 

274| 字段 | 描述 |

275| :---------------------- | :------------------------------------------------------------------------------------------ |

276| `args` | LSP 服务器的命令行参数 |

277| `transport` | 通信传输:`stdio`(默认)或 `socket`。Claude Code 接受 `socket` 但在 stdio 上运行每个服务器,因此 stdout 协议规则适用于所有服务器 |

278| `env` | 启动服务器时要设置的环境变量 |

279| `initializationOptions` | 在初始化期间传递给服务器的选项 |

280| `settings` | 通过 `workspace/didChangeConfiguration` 传递的设置 |

281| `workspaceFolder` | 服务器的工作区文件夹路径 |

282| `startupTimeout` | 等待服务器启动的最长时间(毫秒) |

283| `shutdownTimeout` | 等待正常关闭的最长时间(毫秒)。当超时时间过去时,Claude Code 会终止服务器进程。未设置时,不适用超时 |

284| `restartOnCrash` | 服务器崩溃后是否重新启动。默认为 `true`。设置为 `false` 以保持崩溃的服务器停止而不是重新启动它 |

285| `maxRestarts` | 放弃前的最大重启尝试次数 |

286| `diagnostics` | 编辑后是否将诊断推送到 Claude 的上下文中(默认 `true`)。设置为 `false` 以保持代码导航但禁止自动诊断注入。 |

287 

288`restartOnCrash` 和 `shutdownTimeout` 需要 Claude Code v2.1.205 或更高版本。在 v2.1.205 之前,配置架构接受两个选项,但设置其中任何一个都会导致 Claude Code 在启动时完全跳过该 LSP 服务器,原因仅在 `claude --debug` 输出中可见。

289 

290**同一扩展名的多个服务器**:当多个启用的 LSP 服务器在 `extensionToLanguage` 中声明相同的文件扩展名时,无论服务器来自一个插件还是来自不同的插件,第一个注册的服务器处理具有该扩展名的文件,其他服务器永远不会启动。`/plugin` 界面显示一个警告,命名其服务器处于活动状态的插件。

291 

292**无法初始化的服务器**:Claude Code 会跳过配置无效的服务器,例如缺少 `command` 或 `extensionToLanguage` 的服务器,其他配置的服务器仍会启动。运行 `claude --debug` 以查看服务器被跳过的原因。

293 

294被跳过的服务器不会声明其文件扩展名,因此声明相同扩展名的另一个有效服务器(来自同一插件或不同插件)仍会处理这些文件。

295 

296**将日志输出发送到 stderr,而不是 stdout**:Claude Code 仅将服务器的 stdout 读取为协议消息,并接受最大 64 KiB 的消息头和最大 32 MiB 的消息体。Claude Code 会断开超过任一限制或向 stdout 写入非协议输出的服务器,并将断开连接计为 `restartOnCrash` 和 `maxRestarts` 的崩溃。当您使用 `--debug` 运行时,Claude Code 会将命名原因的错误写入调试日志。

297 

298<Warning>

299 **您必须单独安装语言服务器二进制文件。** LSP 插件配置 Claude Code 如何连接到语言服务器,但它们不包括服务器本身。如果您在 `/plugin` Errors 选项卡中看到 `Executable not found in $PATH`,请为您的语言安装所需的二进制文件。

300</Warning>

301 

302**可用的 LSP 插件:**

303 

304| 插件 | 语言服务器 | 安装命令 |

305| :------------------ | :------------------------- | :------------------------------------------------------------------------------ |

306| `pyright-lsp` | Pyright (Python) | `pip install pyright` 或 `npm install -g pyright` |

307| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

308| `rust-analyzer-lsp` | rust-analyzer | [参见 rust-analyzer 安装](https://rust-analyzer.github.io/manual.html#installation) |

309 

310首先安装语言服务器,然后从市场安装插件。

311 

312<h3 id="monitors">

313 Monitors

314</h3>

315 

316插件可以声明后台监视器,Claude Code 在插件处于活动状态时自动启动。每个监视器在会话的生命周期内运行 shell 命令,并将每个 stdout 行作为通知传递给 Claude,以便 Claude 可以对日志条目、状态更改或轮询事件做出反应,而无需被要求自己启动监视。

317 

318插件监视器使用与 [Monitor tool](/docs/zh-CN/tools-reference#monitor-tool) 相同的机制,并共享其可用性约束。它们仅在交互式 CLI 会话中运行,以与 [hooks](#hooks) 相同的信任级别在非沙箱环境中运行,并在 Monitor tool 不可用的主机上被跳过。

319 

320**位置**:插件根目录中的 `monitors/monitors.json`,或在 `plugin.json` 中内联

321 

322**格式**:监视器条目的 JSON 数组

323 

324以下 `monitors/monitors.json` 监视部署状态端点和本地错误日志:

325 

326```json theme={null}

327[

328 {

329 "name": "deploy-status",

330 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",

331 "description": "Deployment status changes"

332 },

333 {

334 "name": "error-log",

335 "command": "tail -F ./logs/error.log",

336 "description": "Application error log",

337 "when": "on-skill-invoke:debug"

338 }

339]

340```

341 

342要内联声明监视器,请在 `plugin.json` 中将 `experimental.monitors` 设置为相同的数组。要从非默认路径加载,请将 `experimental.monitors` 设置为相对路径字符串,例如 `"./config/monitors.json"`。监视器是 [实验性组件](#experimental-components)。

343 

344**必需字段:**

345 

346| 字段 | 描述 |

347| :------------ | :------------------------------------- |

348| `name` | 在插件中唯一的标识符。防止插件重新加载或再次调用 skill 时出现重复进程 |

349| `command` | 在会话工作目录中作为持久后台进程运行的 shell 命令 |

350| `description` | 正在监视的内容的简短摘要。显示在任务面板和通知摘要中 |

351 

352**可选字段:**

353 

354| 字段 | 描述 |

355| :----- | :---------------------------------------------------------------------------------------------------- |

356| `when` | 控制监视器何时启动。`"always"` 在会话启动和插件重新加载时启动它,这是默认值。`"on-skill-invoke:<skill-name>"` 在第一次调度此插件中的命名 skill 时启动它 |

357 

358`command` 值支持 [路径替换](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`、`${CLAUDE_PLUGIN_DATA}` 和 `${CLAUDE_PROJECT_DIR}`,以及环境中的任何 `${ENV_VAR}`。如果脚本需要从插件自己的目录运行,请在命令前加上 `cd "${CLAUDE_PLUGIN_ROOT}" && `。

359 

360监视器 `command` 不能引用 [`${user_config.*}`](#user-configuration) 值。命令通过 shell 运行,因此 Claude Code 会拒绝监视器并显示 [错误](/docs/zh-CN/errors#plugin-command-references-user-config),而不是替换该值。监视器进程不会接收 `CLAUDE_PLUGIN_OPTION_<KEY>` 环境变量,因此让监视器脚本从它拥有的配置文件中读取该值。

361 

362如果您在会话中途禁用插件,Claude Code 不会停止已在运行的监视器;它们在会话结束时停止。

363 

364<h3 id="themes">

365 Themes

366</h3>

367 

368插件可以提供颜色主题,这些主题与内置预设和用户的本地主题一起显示在 `/theme` 中。主题是 `themes/` 中的 JSON 文件,具有 `base` 预设和稀疏的 `overrides` 颜色令牌映射。主题是 [实验性组件](#experimental-components)。

369 

370```json theme={null}

371{

372 "name": "Dracula",

373 "base": "dark",

374 "overrides": {

375 "claude": "#bd93f9",

376 "error": "#ff5555",

377 "success": "#50fa7b"

378 }

379}

380```

381 

382当用户选择插件主题时,Claude Code 会在其配置中保存 `custom:<plugin-name>:<slug>`。插件主题是只读的:当用户在 `/theme` 中按 `Ctrl+E` 时,Claude Code 会将其复制到 `~/.claude/themes/` 中,以便他们可以编辑副本。

383 

384***

385 

386<h2 id="plugin-installation-scopes">

387 Plugin 安装作用域

388</h2>

389 

390当你安装一个 plugin 时,你选择一个**作用域**来确定 plugin 在哪里可用以及谁可以使用它:

391 

392| 作用域 | 设置文件 | 用例 |

393| :-------- | :------------------------------------------ | :----------------------------------------------- |

394| `user` | `~/.claude/settings.json` | 在所有项目中可用的个人 plugins(默认) |

395| `project` | `.claude/settings.json` | 通过版本控制共享的团队 plugins |

396| `local` | `.claude/settings.local.json` | 项目特定的 plugins,当 Claude Code 保存设置到其中时被 gitignored |

397| `managed` | [Managed settings](/docs/zh-CN/managed-settings) | 托管 plugins(只读,仅更新) |

398 

399Plugins 使用与其他 Claude Code 配置相同的作用域系统。有关安装说明和作用域标志,请参阅 [Install plugins](/docs/zh-CN/discover-plugins#install-plugins)。有关作用域的完整说明,请参阅 [Configuration scopes](/docs/zh-CN/settings#where-settings-live)。

400 

401***

402 

403<h2 id="skills-directory-plugins">

404 Skills-directory plugins

405</h2>

406 

407任何 skills 目录下包含 `.claude-plugin/plugin.json` 清单的文件夹都会在下一个会话中作为名为 `<name>@skills-dir` 的 plugin 加载,无需 marketplace,也无需安装步骤。使用 [`plugin init`](#plugin-init) 来搭建一个。与复制的 marketplace 安装不同,该 plugin 是在原地发现的,而不是复制到 plugin 缓存中。

408 

409A skills directory tree supports three distinct things:

410 

411| What you have | What it is |

412| :-------------------------------------------- | :------------------------------------------------------- |

413| `<skills-dir>/foo/SKILL.md` with no manifest | 一个名为 `foo` 的普通 [skill](/docs/zh-CN/skills) |

414| `<skills-dir>/foo/.claude-plugin/plugin.json` | 一个 plugin `foo@skills-dir`,可以捆绑自己的 skills、agents、hooks 等 |

415| `<plugin>/skills/bar/SKILL.md` | 一个 skill `bar`,打包在 plugin 内部 |

416 

417<h3 id="choose-where-the-plugin-loads-from">

418 选择 plugin 从哪里加载

419</h3>

420 

421| Skills directory | Scope | Loads |

422| :---------------------- | :------- | :--------------------------------------------------------------------------------------- |

423| `~/.claude/skills/` | personal | 在每个项目中加载,因为该位置仅属于你 |

424| `<cwd>/.claude/skills/` | project | 仅在你接受该文件夹的工作区 [trust dialog](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 后加载 |

425 

426项目范围的 plugin 被检入到仓库中,并到达克隆它的每个协作者。因为该内容来自仓库而不是来自你,它仅在与 `.claude/settings.json` 中的项目允许规则相同的信任门控后加载,所以信任父文件夹或使用 `-p` 运行是不够的,运行代码的组件受到进一步限制:

427 

428* 它声明的 MCP servers 会经过与项目 `.mcp.json` 相同的 [per-server approval](/docs/zh-CN/mcp)

429* LSP servers 仅在你信任工作区后启动

430* [Background monitors](#monitors) 不加载

431 

432Personal-scope plugins 没有这些限制。

433 

434<Warning>

435 Project-scope `@skills-dir` plugins 仅从会话的 [primary working directory](/docs/zh-CN/permissions#working-directories) 的 `.claude/skills/` 加载。它们不会像普通 skills 和 commands 那样 [walk up to the repository root](/docs/zh-CN/skills#discovery-from-parent-and-nested-directories),所以从子目录启动会错过位于仓库根目录的 plugin。从仓库根目录启动,或在 v2.1.246 或更高版本上 [使用 `/cd` 将会话移动到那里](/docs/zh-CN/permissions#move-the-session-to-another-directory)。

436</Warning>

437 

438<h3 id="edit-reload-and-disable-a-skills-directory-plugin">

439 编辑、重新加载和禁用 skills-directory plugin

440</h3>

441 

442你对 skill 的 `SKILL.md` 所做的更改会立即在当前会话中生效。对 plugin 的其他组件(如 `hooks/`、`.mcp.json`、`agents/` 和 `output-styles/`)的更改则不会。运行 `/reload-plugins` 或重启 Claude Code 来获取这些更改。参见 [Live change detection](/docs/zh-CN/skills#live-change-detection)。

443 

444要停止加载 skills-directory plugin,删除其文件夹或按名称禁用它。没有 `uninstall` 步骤,因为没有从 marketplace 安装任何东西。

445 

446```bash theme={null}

447claude plugin disable my-tool@skills-dir

448```

449 

450***

451 

452<h2 id="synced-plugins">

453 从 claude.ai 同步的插件

454</h2>

455 

456Claude Code 加载为你的 claude.ai 账户启用的插件,包括你的组织为其成员启用的插件,以及你从 marketplace 安装的插件。它将每个插件下载到 `~/.claude/plugins/synced/` 中,并将其加载为 `<name>@synced`,没有 marketplace 和没有安装记录。同步的插件运行时具有与你安装的 marketplace 插件相同的信任级别:其 skills、agents、hooks、MCP servers 和 LSP servers 都会加载。

457 

458Claude Code 同步这些插件的位置取决于会话类型:

459 

460* 在 [Cowork](https://claude.com/product/cowork) 和[云会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)中,Claude Code 在会话启动时将它们下载到会话自身的环境中。在 v2.1.239 之前,Claude Code 将这些插件加载为 `<name>@inline`,这是 `--plugin-dir` 插件使用的身份。

461* 在你使用 claude.ai 账户登录的终端会话中,Claude Code 每次启动时检查你的账户一次,然后在后台下载新的和更新的插件,并删除你或你的组织关闭的插件。在终端会话中同步需要 Claude Code v2.1.273 或更高版本。

462 

463启动检查在后台运行,因此可以在你的会话启动后完成。当它在交互式会话中添加、更新或删除同步插件时,Claude Code 会显示 `Plugins changed. Run /reload-plugins to activate.` 运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 以在该会话中加载更改,或者等待下次启动 Claude Code 时加载。如果你在会话运行时在 claude.ai 上启用插件,Claude Code 会在下次启动时下载它。

464 

465终端会话中的插件同步在与[从 claude.ai 同步的 skills](/docs/zh-CN/skills#where-synced-skills-load)相同的登录条件下运行。它还需要一个授予 Claude Code 访问你账户插件权限的登录。

466 

467来自早期版本 Claude Code 的登录会在 Claude Code 在后台更新该登录时(通常在几小时内)或如果你再次运行 `/login` 时立即获取插件访问权限。在此之后,下次启动 Claude Code 时插件同步就会开始。

468 

469`claude plugin list` 在 `Synced from claude.ai` 标题下显示同步的插件,`/plugin` **Installed** 标签页将它们列出,其来源为 `synced`。通过 `claude plugin list` 打印的 `<name>@synced` ID 来管理同步的插件:

470 

471* **关闭一个插件**:运行 `claude plugin disable <name>@synced`,或从 `/plugin` **Installed** 标签页禁用它。Claude Code 会将该选择保存为你用户级 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 中的 `"<name>@synced": false`。要重新打开该插件,运行 `claude plugin enable <name>@synced`。

472* **在任何地方都排除一个插件**:[为你的 claude.ai 账户关闭该插件](/docs/zh-CN/desktop#extend-claude-code)。要在每个环境中将其排除在一个项目之外,在该项目的已提交 `.claude/settings.json` 中的 `enabledPlugins` 下设置 `"<name>@synced": false`。

473* **在 claude.ai 上管理插件本身**:`claude plugin install`、`update` 和 `uninstall` 不适用于同步的插件。Claude Code 在下次同步时下载插件的更新。要删除一个,为你的 claude.ai 账户关闭该插件,Claude Code 会在下次同步时删除它。

474* **停止在一台机器上同步**:在你的用户设置中将 [`syncClaudeAiPlugins`](/docs/zh-CN/settings-reference#syncclaudeaiplugins) 设置为 `false`。Claude Code 停止下载,下次启动时会将它已同步的插件移动到 `~/.claude/plugins/.trash/` 并不再加载它们。你的组织可以在[托管设置](/docs/zh-CN/managed-settings)中设置相同的键,或关闭 claude.ai 上的 Skills,这也会停止插件同步。

475 

476你无法关闭你的组织在 claude.ai 上标记为必需的插件。Claude Code 会加载它,即使你之前禁用了它,`claude plugin disable` 会拒绝并显示 `Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it.` 在 `claude plugin list` 中,这些插件被标记为 `required by your org`。

477 

478当来自任何其他来源的启用插件与同步插件的名称匹配时,Claude Code 会加载该插件并报告同步副本未加载。其他来源包括 marketplace 安装、[skills-directory 插件](#skills-directory-plugins)、`--plugin-dir` 插件和 Claude Code 内置的插件。要改用 claude.ai 副本,请禁用你自己的副本。在 v2.1.239 之前,Claude Code 会加载同步副本而不是同名的 marketplace 安装。

479 

480***

481 

482<h2 id="plugin-manifest-schema">

483 Plugin manifest schema

484</h2>

485 

486`.claude-plugin/plugin.json` 文件定义了你的插件的元数据和配置。

487 

488manifest 是可选的。如果省略,Claude Code 会在[默认位置](#file-locations-reference)自动发现组件,并从目录名称派生插件名称。当你需要提供元数据或自定义组件路径时,使用 manifest。

489 

490<h3 id="complete-schema">

491 Complete schema

492</h3>

493 

494```json theme={null}

495{

496 "name": "plugin-name",

497 "displayName": "Plugin Name",

498 "version": "1.2.0",

499 "description": "Brief plugin description",

500 "author": {

501 "name": "Author Name",

502 "email": "author@example.com",

503 "url": "https://github.com/author"

504 },

505 "homepage": "https://docs.example.com/plugin",

506 "repository": "https://github.com/author/plugin",

507 "license": "MIT",

508 "keywords": ["keyword1", "keyword2"],

509 "metadata": { "catalogId": "cat-123", "tier": "pro" },

510 "skills": "./custom/skills/",

511 "commands": ["./custom/commands/special.md"],

512 "agents": ["./custom/agents/reviewer.md"],

513 "hooks": "./config/hooks.json",

514 "mcpServers": "./mcp-config.json",

515 "outputStyles": "./styles/",

516 "lspServers": "./.lsp.json",

517 "experimental": {

518 "themes": "./themes/",

519 "monitors": "./monitors.json",

520 "evals": "quality/evals"

521 },

522 "dependencies": [

523 "helper-lib",

524 { "name": "secrets-vault", "version": "~2.1.0" }

525 ]

526}

527```

528 

529<h3 id="required-fields">

530 必需字段

531</h3>

532 

533如果你包含 manifest,`name` 是唯一必需的字段。

534 

535| 字段 | 类型 | 描述 | 示例 |

536| :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |

537| `name` | string | 唯一标识符,采用 kebab-case,不包含空格、控制字符或双向格式化字符。当[marketplace 条目](/docs/zh-CN/plugin-marketplaces#plugin-entries)以不同的名称列出插件时,marketplace 条目名称是 `enabledPlugins` 键和 `/plugin` 使用的名称 | `"deployment-tools"` |

538 

539此名称用于命名空间组件。例如,在 UI 中,名称为 `plugin-dev` 的插件的代理 `agent-creator` 将显示为 `plugin-dev:agent-creator`。

540 

541<h3 id="unrecognized-fields">

542 无法识别的字段

543</h3>

544 

545Claude Code 忽略它不识别的顶级字段。你可以在 `plugin.json` 中保留来自另一个生态系统的元数据,插件仍然会加载。这使得维护一个 manifest 作为 VS Code 或 Cursor 扩展 manifest、npm `package.json` 或 MCPB/DXT bundle manifest 变得实用。

546 

547`claude plugin validate` 将无法识别的字段报告为警告,而不是错误。如果一个字段与识别的字段相差一两个字符,警告会建议可能的预期名称。仅具有无法识别字段警告的插件仍然通过验证并在运行时加载。

548 

549Claude Code 如何处理值类型错误的识别字段取决于该字段:

550 

551* **大多数字段**:插件无法加载。例如,`keywords` 值是字符串而不是数组是加载错误,`claude plugin validate` 会将其报告为错误。

552* **`experimental` 和 `metadata`**:Claude Code 忽略非对象值,`claude plugin validate` 报告警告。

553 

554传递 `--strict` 以将警告视为错误。在 CI 中使用它来捕获拼写错误的字段名称或在发布前留下的来自另一个工具的 manifest 的字段,即使插件在运行时会加载。

555 

556```bash theme={null}

557claude plugin validate ./my-plugin --strict

558```

559 

560<h3 id="metadata-fields">

561 元数据字段

562</h3>

563 

564| 字段 | 类型 | 描述 | 示例 |

565| :--------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |

566| `$schema` | string | JSON Schema URL,用于编辑器自动完成和验证。Claude Code 在加载时忽略此字段。 | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |

567| `displayName` | string | 在 `/plugin` 选择器和其他 UI 表面中显示的人类可读名称。对于 marketplace 安装的插件,[marketplace 条目](/docs/zh-CN/plugin-marketplaces#optional-plugin-fields)上的 `displayName` 优先于此值。当两个地方都未设置显示名称时,用户会看到 `name`。与 `name` 不同,可以包含空格和任何大小写。不用于命名空间或查找。 | `"Deployment Tools"` |

568| `version` | string | 可选。语义版本。设置此项会将插件固定到该版本字符串,因此用户仅在你提升版本时才会收到更新,除了[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)或[加载到位](#plugin-caching-and-file-resolution)的插件;请参阅[版本管理](#version-management)。如果也在 marketplace 条目中设置,`plugin.json` 优先。如果省略,版本来自[版本管理](#version-management)中的下一个源。 | `"2.1.0"` |

569| `description` | string | 插件用途的简要说明 | `"Deployment automation tools"` |

570| `author` | object | 作者信息 | `{"name": "Dev Team", "email": "dev@company.com"}` |

571| `homepage` | string | 文档 URL | `"https://docs.example.com"` |

572| `repository` | string | 源代码 URL | `"https://github.com/user/plugin"` |

573| `license` | string | 许可证标识符 | `"MIT"`、`"Apache-2.0"` |

574| `keywords` | array | 发现标签 | `["deployment", "ci-cd"]` |

575| `metadata` | object | 自由格式对象,用于你自己的数据,例如权利或目录字段。Claude Code 不读取它,因此值永远不会影响插件行为。Claude Code 忽略非对象值,`claude plugin validate` 报告警告。在 v2.1.222 之前,Claude Code 将该键视为[无法识别的字段](#unrecognized-fields)。 | `{"catalogId": "cat-123"}` |

576| `defaultEnabled` | boolean | 当用户未设置插件状态时,插件是否以启用状态启动。默认为 `true`。请参阅[默认启用](#default-enablement)。 | `false` |

577 

578<h3 id="default-enablement">

579 默认启用

580</h3>

581 

582在 `plugin.json` 中设置 `defaultEnabled: false` 以发布禁用状态下安装的插件。用户使用 `claude plugin enable <plugin>` 或 `/plugin` 界面将其打开。对于添加成本或用户应该选择加入的范围的插件(例如连接到外部服务的插件),使用此选项。

583 

584`defaultEnabled` 是当没有其他因素决定插件状态时的后备。用户的设置和依赖项要求优先于它:

585 

586* **用户的设置**:任何设置范围内 `enabledPlugins` 中的插件条目。一旦写入,它会在插件更新和重新安装中持续存在,因此在后续版本中更改 `defaultEnabled` 不会翻转现有用户。

587* **依赖项要求**:当插件被活跃的另一个插件所需时,Claude Code 在安装或启用时为其写入 `true`。这给了它一个显式设置,所以它自己的默认值不再适用。请参阅[启用或禁用具有依赖项的插件](/docs/zh-CN/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies)。

588 

589同一字段也可以出现在插件的 marketplace 条目中,其中它优先于 `plugin.json` 中的值。请参阅[可选插件字段](/docs/zh-CN/plugin-marketplaces#optional-plugin-fields)。

590 

591<h3 id="component-path-fields">

592 组件路径字段

593</h3>

594 

595| 字段 | 类型 | 描述 | 示例 |

596| :---------------------- | :-------------------- | :------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------- |

597| `skills` | string\|array | 包含 `<name>/SKILL.md` 的自定义 skill 目录。添加到默认 `skills/` 扫描。请参阅[路径行为规则](#path-behavior-rules)了解 marketplace-root 异常 | `"./custom/skills/"` |

598| `commands` | string\|array | 自定义平面 `.md` skill 文件或目录(替换默认 `commands/`) | `"./custom/cmd.md"` 或 `["./cmd1.md"]` |

599| `agents` | string\|array | 自定义代理文件(替换默认 `agents/`) | `"./custom/agents/reviewer.md"` |

600| `workflows` | string\|array | 自定义[工作流](/docs/zh-CN/workflows)脚本文件或目录(替换默认 `workflows/`) | `"./custom/workflows/"` |

601| `hooks` | string\|array\|object | Hook 配置路径或内联配置 | `"./my-extra-hooks.json"` |

602| `mcpServers` | string\|array\|object | MCP 配置路径或内联配置 | `"./my-extra-mcp-config.json"` |

603| `outputStyles` | string\|array | 自定义输出样式文件/目录(替换默认 `output-styles/`) | `"./styles/"` |

604| `lspServers` | string\|array\|object | [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) 配置,用于代码智能(转到定义、查找引用等) | `"./.lsp.json"` |

605| `experimental.themes` | string\|array | 颜色主题文件/目录(替换默认 `themes/`)。请参阅[主题](#themes) | `"./themes/"` |

606| `experimental.monitors` | string\|array | 后台[Monitor](/docs/zh-CN/tools-reference#monitor-tool)配置,在插件活跃时自动启动。请参阅[监视器](#monitors) | `"./monitors.json"` |

607| `experimental.evals` | string\|array | 插件根目录下的目录,保存插件的[评估案例](/docs/zh-CN/plugin-evals#use-a-different-eval-directory),当它不是默认 `evals/` 时。`claude plugin eval --eval-dir` 覆盖它 | `"quality/evals"` |

608| `userConfig` | object | 在启用时提示的用户可配置值。请参阅[用户配置](#user-configuration) | |

609| `channels` | array | 消息注入的频道声明(Telegram、Slack、Discord 风格)。请参阅[频道](#channels) | |

610| `dependencies` | array | 此插件需要的其他插件,可选择带有 semver 版本约束。请参阅[约束插件依赖项版本](/docs/zh-CN/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

611 

612<h3 id="experimental-components">

613 实验性组件

614</h3>

615 

616`experimental` 键下的组件、`themes` 和 `monitors` 具有在稳定期间可能在版本之间更改的 manifest schema。你声明它们的位置是一个单独的迁移:顶级仍然有效,`claude plugin validate` 警告,未来版本将需要 `experimental.*`。

617 

618<h3 id="user-configuration">

619 用户配置

620</h3>

621 

622`userConfig` 字段声明当插件启用时 Claude Code 提示用户的值。使用此选项而不是要求用户手动编辑 `settings.json`。

623 

624```json theme={null}

625{

626 "userConfig": {

627 "api_endpoint": {

628 "type": "string",

629 "title": "API endpoint",

630 "description": "Your team's API endpoint"

631 },

632 "api_token": {

633 "type": "string",

634 "title": "API token",

635 "description": "API authentication token",

636 "sensitive": true

637 }

638 }

639}

640```

641 

642键必须是有效的标识符。每个选项支持这些字段:

643 

644| 字段 | 必需 | 描述 |

645| :------------ | :- | :-------------------------------------------------------------------------------------------------------------------------- |

646| `type` | 是 | `string`、`number`、`boolean`、`directory` 或 `file` 之一 |

647| `title` | 是 | 在配置对话框中显示的标签 |

648| `description` | 是 | 显示在字段下方的帮助文本 |

649| `sensitive` | 否 | 如果为 `true`,掩盖输入并将值存储在安全存储中而不是 `settings.json` |

650| `required` | 否 | 如果为 `true`,当字段为空时验证失败 |

651| `default` | 否 | 当用户未提供任何内容时使用的值 |

652| `options` | 否 | 对于 `string` 类型,字段接受的值,在 `/config` 中显示为它们的选择器。请参阅[将字段限制为固定选项](#limit-a-field-to-fixed-options)。需要 Claude Code v2.1.271 或更高版本 |

653| `multiple` | 否 | 对于 `string` 类型,允许字符串数组 |

654| `min` / `max` | 否 | `number` 类型的边界 |

655 

656除了 `sensitive` 字段和 `multiple` 列表,每个启用插件的每个字段也显示为 `/config` 面板中的一行。这些行需要 Claude Code v2.1.269 或更高版本。

657 

658每个值都可用于在 MCP 和 LSP 服务器配置以及 hook 命令中作为 `${user_config.KEY}` 进行替换。非敏感值也可以在 skill 和代理内容中替换。所有值都导出到 hook 进程作为 `CLAUDE_PLUGIN_OPTION_<KEY>` 环境变量,其中 `<KEY>` 是选项键的大写形式。

659 

660在 shell 中运行的字段拒绝 `${user_config.*}`:将配置的值替换到 shell 命令中会让 shell 运行该值包含的任何内容,因此组件失败并出现[错误](/docs/zh-CN/errors#plugin-command-references-user-config)。每个被拒绝的字段都有一种替代方式来传递值:

661 

662| 被拒绝的字段 | 如何传递值 |

663| :------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------- |

664| Shell 形式的 hook 命令 | 使用带有 `args` 的 [exec 形式](/docs/zh-CN/hooks#exec-form-and-shell-form),或从 hook 的环境中读取 `CLAUDE_PLUGIN_OPTION_<KEY>` |

665| [Monitor](#monitors) 命令 | 从脚本中的配置文件读取值 |

666| MCP [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) | 从脚本中的配置文件读取值 |

667 

668在 v2.1.207 之前,这些字段替换了 `${user_config.KEY}` 值;更新依赖此的插件。

669 

670非敏感值存储在用户 `settings.json` 中的 [`pluginConfigs`](/docs/zh-CN/settings-reference#pluginconfigs) 键下,作为 `pluginConfigs[<plugin-id>].options`。

671 

672在 macOS 上,Claude Code 将敏感值存储在 macOS Keychain 中,当 Keychain 拒绝写入时回退到 `~/.claude/.credentials.json`。在没有支持的 keychain 的平台上,它将它们存储在 `~/.claude/.credentials.json` 中。Keychain 存储与 OAuth 令牌共享,总限制约为 2 KB,因此保持敏感值较小。

673 

674Claude Code 仅从三个设置源读取所有 `pluginConfigs` 值:

675 

676* **用户设置**:`~/.claude/settings.json`,启用时提示写入的文件

677* **`--settings`**:CLI 标志或 SDK 内联设置

678* **托管设置**:[组织控制的策略](/docs/zh-CN/permissions#managed-settings)

679 

680当多个源设置相同的键时,托管设置优先,然后是 `--settings`,然后是用户设置。你可以从此列表中删除的唯一源是用户设置:传递不带 `user` 的 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags),Claude Code 会跳过它们。托管设置和 `--settings` 保持你传递的任何内容。SDK 的 [`settingSources`](/docs/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control) 选项设置相同的列表。

681 

682项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目被忽略。两个文件都位于工作区中,因此克隆的存储库可以在那里提供值,这些值会流入插件 hook 命令、MCP 服务器配置、LSP 命令和监视器命令。在 v2.1.207 之前,这些条目被读取。限制特定于 `pluginConfigs`:[`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 仍然遵守项目和本地设置。

683 

684<h4 id="limit-a-field-to-fixed-options">

685 将字段限制为固定选项

686</h4>

687 

688在 `userConfig` 字段上设置 `options` 以使用户从固定列表中选择其值。

689 

690要将 `tone` 字段限制为三个选项,在 `options` 中列出它们并将 `default` 设置为其中之一:

691 

692```json theme={null}

693{

694 "userConfig": {

695 "tone": {

696 "type": "string",

697 "title": "Tone",

698 "description": "Voice for generated replies",

699 "options": ["neutral", "warm", "formal"],

700 "default": "neutral"

701 }

702 }

703}

704```

705 

706如果你在任何字段上声明 `options`,Claude Code v2.1.271 之前版本的用户无法加载插件。

707 

708当你在字段上设置 `options` 时,遵循这些规则:

709 

710* 将 `type` 设置为 `string`

711* 不要将 `multiple` 或 `sensitive` 设置为 `true`

712* 将 `default` 设置为其中一个选项

713* 如果你不设置 `default`,将 `required` 设置为 `true`

714* 列出至少一个选项,每个 1 到 64 个字符长

715* 不要以空格开始或结束选项

716* 不要在选项中使用控制字符、不可见字符、改变文本方向的字符或除常规空格外的空格

717* 不要列出相同的选项两次,即使是不同的字母大小写

718 

719如果你违反任何这些规则,插件无法加载。运行 `claude plugin validate` 以查看哪个字段违反了哪个规则。

720 

721<h3 id="channels">

722 频道

723</h3>

724 

725`channels` 字段让插件声明一个或多个消息频道,将内容注入到对话中。每个频道绑定到插件提供的 MCP 服务器。

726 

727```json theme={null}

728{

729 "channels": [

730 {

731 "server": "telegram",

732 "userConfig": {

733 "bot_token": {

734 "type": "string",

735 "title": "Bot token",

736 "description": "Telegram bot token",

737 "sensitive": true

738 },

739 "owner_id": {

740 "type": "string",

741 "title": "Owner ID",

742 "description": "Your Telegram user ID"

743 }

744 }

745 }

746 ]

747}

748```

749 

750`server` 字段是必需的,必须与插件的 `mcpServers` 中的键匹配。可选的每个频道 `userConfig` 使用与顶级字段相同的 schema,让插件在启用插件时提示输入机器人令牌或所有者 ID。

751 

752<h3 id="path-behavior-rules">

753 路径行为规则

754</h3>

755 

756自定义路径是替换还是扩展插件的默认目录取决于该字段:

757 

758* **替换默认值**:`commands`、`agents`、`workflows`、`outputStyles`、`experimental.themes`、`experimental.monitors`。例如,当 manifest 指定 `commands` 时,默认 `commands/` 目录不被扫描。要保留默认值并添加更多,明确列出它:`"commands": ["./commands/", "./extras/"]`

759* **添加到默认值**:`skills`。默认 `skills/` 目录始终被扫描,`skills` 中列出的目录与它一起加载。异常:对于[其 `source` 解析为 marketplace 根的 marketplace 条目](/docs/zh-CN/plugin-marketplaces#advanced-plugin-entries),声明特定子目录替换默认 `skills/` 扫描

760* **自己的合并规则**:[hooks](#hooks)、[MCP 服务器](#mcp-servers) 和 [LSP 服务器](#lsp-servers)。请参阅每个部分了解多个源如何组合

761 

762当插件同时具有默认文件夹和匹配的 manifest 键时,Claude Code 在 `claude plugin list` 和 `/plugin` 详细视图中警告被忽略的文件夹。插件仍然使用 manifest 路径加载。当 manifest 键指向默认文件夹时,Claude Code 不会警告,例如 `"commands": ["./commands/deploy.md"]`,因为该路径明确命名了文件夹。

763 

764对于所有路径字段:

765 

766* 所有路径必须相对于插件根目录并以 `./` 开头,除了 `skills` 字段也接受 `"."`

767 * `"."` 和 `"./"` 都表示插件根目录本身

768 * 在 v2.1.221 之前,`"."` 无法通过 manifest 验证,插件无法加载,因此使用 `"./"` 以支持早期版本

769* 来自自定义路径的组件使用相同的命名和命名空间规则,除了代理文件。请参阅[代理](#agents)了解代理名称如何工作

770* 多个路径可以指定为数组

771* skill 路径可以指向直接包含 `SKILL.md` 的目录,例如 `"skills": ["."]` 用于插件根目录

772 * Claude Code 从 `SKILL.md` 中的 frontmatter `name` 字段获取 skill 的调用名称,因此无论安装目录的名称如何,名称都保持稳定

773 * 如果 frontmatter 中未设置 `name`,Claude Code 回退到目录基名

774 

775具有根目录中的 `SKILL.md`、没有 `skills/` 子目录且没有 `skills` manifest 字段的插件会自动作为单一 skill 插件加载。你不需要为此布局在 `plugin.json` 中设置 `"skills": ["./"]`。

776 

777**路径示例**:

778 

779```json theme={null}

780{

781 "commands": [

782 "./specialized/deploy.md",

783 "./utilities/batch-process.md"

784 ],

785 "agents": [

786 "./custom-agents/reviewer.md",

787 "./custom-agents/tester.md"

788 ]

789}

790```

791 

792<h3 id="environment-variables">

793 环境变量

794</h3>

795 

796Claude Code 提供三个变量用于引用路径:

797 

798| 变量 | 解析为 | 用途 |

799| :---------------------- | :--------------------------------------------------- | :----------------------------------------------- |

800| `${CLAUDE_PLUGIN_ROOT}` | 插件安装目录的绝对路径 | 与插件捆绑的脚本、二进制文件和配置文件 |

801| `${CLAUDE_PLUGIN_DATA}` | [持久目录](#persistent-data-directory),在首次引用时创建,在插件更新中存活 | 已安装的依赖项,例如 `node_modules` 或 Python 虚拟环境、生成的代码和缓存 |

802| `${CLAUDE_PROJECT_DIR}` | 项目根目录 | 项目本地脚本和配置文件 |

803 

804所有三个都导出为环境变量到 hook 进程以及 MCP 和 LSP 服务器子进程。它们不存在于 Claude 通过 Bash 工具运行的命令的环境中,无论是在主会话还是在子代理中。在插件内容中,写入占位符,Claude Code 在加载内容时内联替换路径。哪些字段内联替换它们取决于插件组件:

805 

806| 插件组件 | 占位符解析的字段 |

807| :------------------------ | :--------------------------------------- |

808| Skill 和代理内容 | 占位符出现的任何地方 |

809| Hook 和监视器命令 | 占位符出现的任何地方 |

810| MCP `stdio` 服务器 | `command`、`args`、`env` |

811| MCP `http`、`sse`、`ws` 服务器 | `url`、`headers`、`headersHelper` |

812| LSP 服务器 | `command`、`args`、`env`、`workspaceFolder` |

813 

814在 hook 命令中,使用带有 `args` 的 [exec 形式](/docs/zh-CN/hooks#exec-form-and-shell-form),以便每个路径作为一个参数传递,无需引用。在 shell 形式的 hooks 和监视器命令中,用双引号包装变量,如 `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`。此 shell 形式的 hook 运行与插件捆绑的脚本:

815 

816```json theme={null}

817{

818 "hooks": {

819 "PostToolUse": [

820 {

821 "hooks": [

822 {

823 "type": "command",

824 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"

825 }

826 ]

827 }

828 ]

829 }

830}

831```

832 

833对于复制的插件,`${CLAUDE_PLUGIN_ROOT}` 在插件更新时更改。前一个版本的目录在更新后的宽限期内保留在磁盘上,但将其视为临时的,不要在那里写入状态。对于从本地目录 marketplace 加载到位的插件,变量指向稳定的源目录。请参阅[插件缓存](#plugin-caching-and-file-resolution)了解哪些插件被复制以及清理语义。

834 

835当复制的插件在会话中期更新时,hook 命令、监视器、MCP 服务器和 LSP 服务器继续使用前一个版本的路径。运行 `/reload-plugins` 以将 hooks、MCP 服务器和 LSP 服务器切换到新路径;监视器需要会话重启。在没有交互式终端的会话中,重新加载会将插件 MCP 服务器保留在旧路径上,直到下一个会话。

836 

837对于具有 `command` 源的插件,Claude Code [可以重新加载插件本身](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command)。

838 

839MCP 服务器也可以调用 `roots/list` 请求以在运行时读取会话的工作目录。请参阅[`roots/list` 返回的内容以及 Claude Code 何时通知服务器更改](/docs/zh-CN/mcp#option-3-add-a-local-stdio-server)。

840 

841<h4 id="persistent-data-directory">

842 持久数据目录

843</h4>

844 

845`${CLAUDE_PLUGIN_DATA}` 目录解析为 `~/.claude/plugins/data/{id}/`,其中 `{id}` 是插件标识符,其中 `a-z`、`A-Z`、`0-9`、`_` 和 `-` 之外的字符被替换为 `-`。对于作为 `formatter@my-marketplace` 安装的插件,目录是 `~/.claude/plugins/data/formatter-my-marketplace/`。

846 

847常见用途是一次安装语言依赖项并在会话和插件更新中重用它们。将其用于 Python 依赖项、使用 Yarn 或 pnpm 锁定的依赖项以及其生命周期脚本必须运行的包。对于 marketplace 安装的插件,你可能根本不需要它:Claude Code 在缓存插件时自动安装符合条件的 [Node.js 包依赖项](#node-js-package-dependencies)。

848 

849因为数据目录比任何单个插件版本更长寿,仅检查目录存在无法检测更新何时更改插件的依赖项 manifest。推荐的模式是将捆绑的 manifest 与数据目录中的副本进行比较,并在它们不同时重新安装。

850 

851此 `SessionStart` hook 在第一次运行时安装 `node_modules`,并在插件更新包含更改的 `package.json` 时再次安装:

852 

853```json theme={null}

854{

855 "hooks": {

856 "SessionStart": [

857 {

858 "hooks": [

859 {

860 "type": "command",

861 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""

862 }

863 ]

864 }

865 ]

866 }

867}

868```

869 

870当存储的副本丢失或与捆绑的副本不同时,`diff` 退出非零,涵盖首次运行和依赖项更改更新。如果 `npm install` 失败,尾部 `rm` 删除复制的 manifest,以便下一个会话重试。

871 

872捆绑在 `${CLAUDE_PLUGIN_ROOT}` 中的脚本可以针对持久化的 `node_modules` 运行:

873 

874```json theme={null}

875{

876 "mcpServers": {

877 "routines": {

878 "command": "node",

879 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

880 "env": {

881 "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"

882 }

883 }

884 }

885}

886```

887 

888当你从最后一个安装它的范围卸载插件时,数据目录会自动删除。`/plugin` 界面显示目录大小并在删除前提示。CLI 默认删除;传递 [`--keep-data`](#plugin-uninstall) 以保留它。

889 

890***

891 

892<h2 id="plugin-caching-and-file-resolution">

893 Plugin 缓存和文件解析

894</h2>

895 

896Plugin 可以通过以下三种方式指定:

897 

898* 通过 `claude --plugin-dir` 或 `claude --plugin-url`,在会话期间使用。

899* 通过 marketplace,为未来的会话安装。

900* 通过你的 claude.ai 账户,[同步](#synced-plugins)到 `~/.claude/plugins/synced/`。

901 

902出于安全和验证目的,Claude Code 将 *marketplace* plugin 复制到用户的本地 **plugin 缓存**(`~/.claude/plugins/cache`),除非 plugin 就地加载。[link 模式下的 `command` 源](/docs/zh-CN/plugin-marketplaces#copy-mode-and-link-mode)通过缓存条目中的链接就地加载。来自本地目录添加的 marketplace 的[相对路径源](/docs/zh-CN/plugin-marketplaces#relative-paths)从 marketplace 文件夹就地加载。

903 

904对于从本地目录 marketplace 就地加载的 plugin,你对源目录的编辑在下一个会话启动或 `/reload-plugins` 时生效。你不需要版本号提升。plugin 的 hook 进程和 MCP 和 LSP 服务器接收指向源目录的 `CLAUDE_PLUGIN_ROOT`。Claude Code 不会将 plugin 的 [Node.js 包依赖](#node-js-package-dependencies)安装到源目录中。自己在那里安装它们,或从 hook 安装到[持久数据目录](#persistent-data-directory)。

905 

906对于复制的 plugin,每个已安装的版本都是缓存中的一个单独目录,按 marketplace 和 plugin 分组,并以解析的版本命名,包含 plugin 文件和 [Node.js 包依赖](#node-js-package-dependencies)的自己的副本。从[release tag](/docs/zh-CN/plugin-dependencies#tag-plugin-releases-for-version-resolution)解析的依赖会获得一个带有 commit-SHA 后缀的目录名。

907 

908当你更新或卸载 plugin 时,Claude Code 会将之前的版本目录标记为孤立,并在大约 14 天后的后台扫描中将其删除。宽限期允许已加载旧版本的并发 Claude Code 会话继续运行而不出错。Claude Code 仅在至少安装了一个 plugin 时才运行扫描;在卸载最后一个 plugin 后,孤立目录会保留在磁盘上,直到你再次安装 plugin。

909 

910Claude Code 仅在 plugin 或 marketplace 文件夹不再包含任何目录或符号链接时才将其从缓存中删除。如果你将开发检出符号链接到缓存中作为 plugin 的版本条目,Claude Code 永远不会将该链接标记为孤立,也永远不会删除它或保存它的文件夹。Claude Code 也永远不会在链接的检出中写入其版本跟踪文件。

911 

912Claude 的 Glob 和 Grep 工具在搜索期间跳过孤立的版本目录,因此文件结果不包括过时的 plugin 代码。

913 

914<h3 id="node-js-package-dependencies">

915 Node.js 包依赖

916</h3>

917 

918当 Claude Code 将 plugin 复制到缓存中时,它也会在那里安装 plugin 的 Node.js 包依赖,以便 plugin 的 hooks 和 MCP 服务器可以加载它们。本节涵盖 plugin 在其自己的 `package.json` 中声明的 npm 和 Bun 包。对于依赖其他 plugin 的 plugin,请参阅[plugin 依赖版本](/docs/zh-CN/plugin-dependencies)。

919 

920Claude Code 在每次创建复制的版本目录时在其中运行安装:当你安装 plugin 时、当 Claude Code 将 plugin 更新到新版本时,以及在会话启动时当启用的 plugin 尚未缓存时(例如在新机器上)。仅当 plugin 的根目录同时包含 `package.json` 和受支持的 lockfile 时,安装才会运行:

921 

922| Lockfile | 命令 |

923| :------------------------------------------ | :----------------------------------------------- |

924| `bun.lock` 或 `bun.lockb` | `bun install --frozen-lockfile --ignore-scripts` |

925| `npm-shrinkwrap.json` 或 `package-lock.json` | `npm ci --ignore-scripts` |

926 

927如果 plugin 包含多个这些 lockfile,Claude Code 使用第一个匹配项,按顺序检查:`bun.lock`、`bun.lockb`、`npm-shrinkwrap.json`、`package-lock.json`。

928 

929Claude Code 在两种情况下跳过安装,每种情况都有自己的修复方法:

930 

931* 如果你的 plugin 仅提供 `yarn.lock` 或 `pnpm-lock.yaml`,请将其替换为 npm lockfile。

932* 如果 `bunfig.toml` 位于 bun lockfile 旁边,请删除 `bunfig.toml`,或将 bun lockfile 替换为 npm lockfile。

933 

934为了获得最广泛的覆盖范围,请提供 npm lockfile。Claude Code 从用户的 PATH 运行匹配的 lockfile 的包管理器,如果缺少其他 lockfile,不会回退到它。对于通过 npm 源分发的 plugin,使用 `npm-shrinkwrap.json`;npm 从已发布的包中排除 `package-lock.json`。

935 

936Claude Code 对此依赖安装进行了约束,以便 plugin 或其包中的任何代码在安装期间都不会执行,并限制其运行时间:

937 

938* **冻结分辨率:** Bun 和 npm 安装 lockfile 精确指定的内容,当 `package.json` 和 lockfile 不一致时失败而不是重新分辨版本。

939* **无生命周期脚本:** `--ignore-scripts` 防止 `preinstall`、`install` 和 `postinstall` 脚本运行,因此在这些脚本中构建本机模块的依赖会下载但在此安装期间不会编译。

940* **60 秒超时:** Claude Code 停止运行时间较长的安装并将其视为失败。

941 

942Claude Code 在此依赖安装之前获取 npm 源 plugin,并且包自己的任何安装脚本在获取期间都不会运行。请参阅 [npm 包](/docs/zh-CN/plugin-marketplaces#npm-packages)。

943 

944失败或跳过的安装永远不会阻止 plugin。当安装失败或 Claude Code 跳过它因为 yarn 或 pnpm lockfile 或 `bunfig.toml` 时,它会在[调试输出](#debugging-commands)中将原因记录为警告。具有 `package.json` 但没有 lockfile 的 plugin 会被跳过而不记录日志条目。超时的安装可能会在缓存副本中留下部分 `node_modules` 树。

945 

946你无法关闭自动安装;没有设置或环境变量可以禁用它。在受限网络中,请参阅[网络访问要求](/docs/zh-CN/network-config#network-access-requirements)以了解要允许的主机。

947 

948对于自动安装无法提供的依赖,例如需要其生命周期脚本来构建的包、Python 依赖或使用 Yarn 或 pnpm 锁定的 plugin,请从 hook 将它们安装到[持久数据目录](#persistent-data-directory)。

949 

950<h3 id="path-traversal-limitations">

951 路径遍历限制

952</h3>

953 

954Claude Code 不允许 plugin 引用其自己目录之外的文件。它拒绝解析到 plugin 根目录之外的组件路径,无论该路径是在 `plugin.json` 中声明还是在[marketplace 条目](/docs/zh-CN/plugin-marketplaces#plugin-entries)中声明。这涵盖指向 plugin 外部的路径(如 `../shared-utils`)和导向 plugin 外部的符号链接,除了[一个 marketplace 内的链接](#share-files-within-a-marketplace-with-symlinks)。

955 

956在 macOS 和 Linux 上,Claude Code 也拒绝包含反斜杠的组件路径,即使该路径保留在 plugin 内。因此,使用反斜杠路径声明的组件仅在 Windows 上加载。使用正斜杠编写组件路径,例如 `./commands/deploy.md`。

957 

958当 Claude Code 拒绝路径时,它会报告 [`path escapes plugin directory`](/docs/zh-CN/errors#path-escapes-plugin-directory) 错误,并在没有该组件的情况下加载 plugin。

959 

960Claude Code 在安装 plugin 时也不会将 plugin 目录之外的文件复制到缓存中,因此当复制的 plugin 内的脚本读取 plugin 根目录上方的路径时,它也找不到这些文件。

961 

962<h3 id="share-files-within-a-marketplace-with-symlinks">

963 使用符号链接在 marketplace 内共享文件

964</h3>

965 

966如果你的 plugin 需要与同一 marketplace 的其他部分共享文件,你可以在 plugin 目录内创建符号链接。当 plugin 被复制到缓存中时,符号链接的处理方式取决于其目标的解析位置:

967 

968* **在 plugin 自己的目录内:** 符号链接在缓存中被保留为相对符号链接,因此它在运行时继续解析到复制的目标。

969* **在同一 marketplace 内的其他位置:** 符号链接被解引用。目标的内容被复制到缓存中以代替它。这允许元 plugin 的 `skills/` 目录链接到 marketplace 中其他 plugin 定义的技能。

970* **在 marketplace 外:** 符号链接出于安全原因被跳过。这防止 plugin 将任意主机文件(如系统路径)拉入缓存。

971 

972对于使用 `--plugin-dir` 安装的 plugin、来自本地路径的 plugin 或 来自 [copy 模式下的 `command` 源](/docs/zh-CN/plugin-marketplaces#copy-mode-and-link-mode)的 plugin,仅保留解析到 plugin 自己目录内的符号链接。所有其他的都被跳过。

973 

974以下命令创建从 marketplace plugin 内部到由兄弟 plugin 定义的共享技能的链接。在 Windows 上,从提升的命令提示符使用 `mklink /D` 或启用开发者模式:

975 

976```bash theme={null}

977ln -s ../../shared-plugin/skills/foo ./skills/foo

978```

979 

980***

981 

982<h2 id="plugin-directory-structure">

983 Plugin 目录结构

984</h2>

985 

986<h3 id="standard-plugin-layout">

987 标准 plugin 布局

988</h3>

989 

990一个完整的 plugin 遵循以下结构:

991 

992```text theme={null}

993enterprise-plugin/

994├── .claude-plugin/ # 元数据目录(可选)

995│ └── plugin.json # plugin 清单

996├── skills/ # Skills

997│ ├── code-reviewer/

998│ │ └── SKILL.md

999│ └── pdf-processor/

1000│ ├── SKILL.md

1001│ └── scripts/

1002├── commands/ # Skills 作为平面 .md 文件

1003│ ├── status.md

1004│ └── logs.md

1005├── agents/ # Subagent 定义

1006│ ├── security-reviewer.md

1007│ ├── performance-tester.md

1008│ ├── compliance-checker.md

1009│ └── review/ # 此处的 Agents 加载为 enterprise-plugin:review:<name>

1010│ └── accessibility.md

1011├── workflows/ # Workflow 脚本

1012│ └── release-audit.js

1013├── output-styles/ # 输出样式定义

1014│ └── terse.md

1015├── themes/ # 颜色主题定义

1016│ └── dracula.json

1017├── monitors/ # 后台监视器配置

1018│ └── monitors.json

1019├── hooks/ # Hook 配置

1020│ ├── hooks.json # 主 hook 配置

1021│ └── security-hooks.json # 其他 hooks

1022├── bin/ # 添加到 PATH 的 plugin 可执行文件

1023│ └── my-tool # 在 Bash tool 中可作为裸命令调用

1024├── settings.json # plugin 的默认设置

1025├── .mcp.json # MCP 服务器定义

1026├── .lsp.json # LSP 服务器配置

1027├── scripts/ # Hook 和实用脚本

1028│ ├── security-scan.sh

1029│ ├── format-code.py

1030│ └── deploy.js

1031├── LICENSE # 许可证文件

1032└── CHANGELOG.md # 版本历史

1033```

1034 

1035<Warning>

1036 `.claude-plugin/` 目录包含 `plugin.json` 文件。所有其他目录(commands/、agents/、skills/、workflows/、output-styles/、themes/、monitors/、hooks/)必须位于 plugin 根目录,而不是在 `.claude-plugin/` 内部。

1037</Warning>

1038 

1039plugin 根目录中的 `CLAUDE.md` 文件不会作为项目上下文加载。Plugins 通过 skills、agents 和 hooks 而不是 CLAUDE.md 来贡献上下文。要提供加载到 Claude 上下文中的说明,请将其放在 [skill](#skills) 中。

1040 

1041<h3 id="file-locations-reference">

1042 文件位置参考

1043</h3>

1044 

1045| 组件 | 默认位置 | 用途 |

1046| :------------ | :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1047| **清单** | `.claude-plugin/plugin.json` | Plugin 元数据和配置(可选) |

1048| **Skills** | `skills/` | 具有 `<name>/SKILL.md` 结构的 Skills |

1049| **Commands** | `commands/` | 作为平面 Markdown 文件的 Skills。新 plugins 请使用 `skills/` |

1050| **Agents** | `agents/` | Subagent Markdown 文件。子文件夹是 [agent 名称](#agents) 的一部分 |

1051| **Workflows** | `workflows/` | [Workflow](/docs/zh-CN/workflows) 脚本文件 |

1052| **输出样式** | `output-styles/` | 输出样式定义 |

1053| **主题** | `themes/` | 颜色主题定义 |

1054| **Hooks** | `hooks/hooks.json` | Hook 配置 |

1055| **MCP 服务器** | `.mcp.json` | MCP 服务器定义 |

1056| **LSP 服务器** | `.lsp.json` | 语言服务器配置 |

1057| **监视器** | `monitors/monitors.json` | 后台监视器配置 |

1058| **可执行文件** | `bin/` | 添加到 Bash tool 的 `PATH` 中的可执行文件,在 plugin 启用时可作为裸命令调用。如果您 [通过 claude.ai 组织设置分发 plugin](/docs/zh-CN/plugin-marketplaces#keep-executables-out-of-the-top-level-bin-directory),则不能在其中包含此目录 |

1059| **设置** | `settings.json` | 启用 plugin 时应用的默认配置。仅支持 [`agent`](/docs/zh-CN/sub-agents) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines) 键 |

1060 

1061***

1062 

1063<h2 id="cli-commands-reference">

1064 CLI 命令参考

1065</h2>

1066 

1067Claude Code 提供 CLI 命令用于非交互式插件管理,适用于脚本和自动化。

1068 

1069<h3 id="plugin-init">

1070 plugin init

1071</h3>

1072 

1073在 `~/.claude/skills/<name>/` 处搭建一个新插件。在下一个 Claude Code 会话中,它会自动加载为 `<name>@skills-dir`,并在 `/plugin` 和 `claude plugin list` 中显示,无需安装步骤。

1074 

1075请参阅 [Skills-directory plugins](#skills-directory-plugins) 了解范围和信任要求。

1076 

1077```bash theme={null}

1078claude plugin init <name> [options]

1079```

1080 

1081该命令接受这些参数:

1082 

1083* `<name>`:插件名称。成为技能命名空间和 `~/.claude/skills/` 下的目录名称,因此不能包含空格或路径分隔符。

1084 

1085该命令接受这些选项:

1086 

1087| 选项 | 描述 | 默认值 |

1088| :----------------------- | :--------------------------------------------------------------------------- | :---------------------- |

1089| `--description <text>` | 清单描述 | |

1090| `--author <name>` | 作者名称 | `git config user.name` |

1091| `--author-email <email>` | 作者电子邮件 | `git config user.email` |

1092| `--with <components...>` | 同时搭建组件文件夹。有效值:`skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style`、`channel` | |

1093| `-f, --force` | 覆盖目标处现有的 `.claude-plugin/` | |

1094| `-h, --help` | 显示命令帮助 | |

1095 

1096`claude plugin new` 是此命令的别名。

1097 

1098每个 `--with` 值都会为该组件添加一个启动文件,准备好编辑:

1099 

1100| 组件 | 搭建内容 |

1101| :------------- | :----------------------------------------------------------------------------------------------- |

1102| `skills` | 一个额外的命名空间 `<name>:example` 技能,与默认技能并列 |

1103| `agents` | 一个 `agents/` 子代理定义 |

1104| `hooks` | 一个 `hooks/hooks.json`,包含示例事件处理程序 |

1105| `mcp` | 一个 `.mcp.json`,包含 HTTP 和 stdio 服务器示例 |

1106| `lsp` | 一个 `.lsp.json` 语言服务器示例 |

1107| `output-style` | 一个 `output-styles/<name>.md`,在插件启用时自动应用 |

1108| `channel` | 一个基于 MCP 的 [channel](/docs/zh-CN/channels):一个 stdio 服务器(`server.ts`)、其 `.mcp.json` 和一个 `package.json` |

1109 

1110搭建的插件使用 `@skills-dir` 源而不是市场。管理员可以通过 `strictKnownMarketplaces` 或在 [managed settings](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) 中添加 `{"source": "skills-dir"}` 到 `blockedMarketplaces` 来阻止此源。当被阻止时,`plugin init` 在写入前失败。

1111 

1112这些示例显示常见的调用:

1113 

1114```bash theme={null}

1115# 搭建最小插件

1116claude plugin init my-helper

1117 

1118# 搭建带有技能和钩子文件夹的插件

1119claude plugin init my-helper --with skills hooks

1120 

1121# 覆盖现有搭建

1122claude plugin init my-helper --force

1123```

1124 

1125<h3 id="plugin-install">

1126 plugin install

1127</h3>

1128 

1129从可用市场安装插件。

1130 

1131```bash theme={null}

1132claude plugin install <plugin> [options]

1133```

1134 

1135该命令接受这些参数:

1136 

1137* `<plugin>`:插件名称或 `plugin-name@marketplace-name` 用于特定市场

1138 

1139该命令接受这些选项:

1140 

1141| 选项 | 描述 | 默认值 |

1142| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- |

1143| `-s, --scope <scope>` | 安装范围:`user`、`project` 或 `local` | `user` |

1144| `--config <key=value>` | 设置插件清单中声明的 [`userConfig`](#user-configuration) 选项。重复该标志以设置多个选项 | |

1145| `-y, --yes` | 接受插件市场声明的命令,无需确认提示:生成具有 [`command` source](/docs/zh-CN/plugin-marketplaces#command-sources) 的插件的命令,或验证存档下载的 [`headersHelper`](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads)。接受 `headersHelper` 需要 Claude Code v2.1.238 或更高版本。Claude Code 仍会首先打印命令。当 stdin 或 stdout 不是 TTY 时需要,除非您传递 `--accept-command`。在 Claude Code 会话内无效,因此从您自己的终端运行命令 | |

1146| `--accept-command <sha256>` | 接受市场声明的命令,其 `sha256` 之前的 [`--json` 运行](#plugin-json-result) 在 `shownCommand` 中报告,代替 `-y`。接受计数仅适用于该特定命令、插件和市场目录。如果自命令显示以来其中任何一个已更改,包括通过运行自己的市场刷新,Claude Code 不接受摘要并再次显示命令。不能与 `-y` 组合。在 Claude Code 会话内无效,因此从您自己的终端运行命令。需要 Claude Code v2.1.271 或更高版本 | |

1147| `--json` | 将结果作为 stdout 最后一行的一个 JSON 对象打印,用于脚本。请参阅 [JSON result format](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 | |

1148| `-h, --help` | 显示命令帮助 | |

1149 

1150范围决定了已安装插件添加到哪个设置文件。例如,`--scope project` 写入 .claude/settings.json 中的 `enabledPlugins`,使插件对克隆项目存储库的每个人都可用。

1151 

1152<span id="plugin-json-result" />使用 `--json`,stdout 的最后一行是一个 JSON 对象。仅解析该行,因为 Claude Code 会在其前面打印市场声明的任何命令。三个字段始终存在:

1153 

1154* `command`:运行的子命令,例如 `install`

1155* `outcome`:`ok` 或 `failed`

1156* `message`:结果的人类可读描述

1157 

1158其他字段,例如 `pluginId`、`scope` 和 `failureCode`,仅在适用时出现。`plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上的 `--json` 选项打印具有该子命令自己字段的相同对象。使用错误,例如无效的 `--scope`,不打印结果行并以 stderr 上的原因退出 1。

1159 

1160当运行显示市场声明的命令且不运行它时,`failed` 结果也会携带一个 `shownCommand` 对象,其字段包括显示的命令、它所属的插件和命令的 `sha256`。要接受完全相同的命令,使用该 `sha256` 作为 `--accept-command` 重新运行。需要 Claude Code v2.1.271 或更高版本。

1161 

1162如果 `shownCommand.acceptCommandMatched` 是 `false`,您传递的摘要与现在显示的命令不匹配。在传递其 `sha256` 之前向某人显示该命令。

1163 

1164这些示例显示常见的调用:

1165 

1166```bash theme={null}

1167# 安装到用户范围(默认)

1168claude plugin install formatter@my-marketplace

1169 

1170# 安装到项目范围(与团队共享)

1171claude plugin install formatter@my-marketplace --scope project

1172 

1173# 安装到本地范围(不与团队共享)

1174claude plugin install formatter@my-marketplace --scope local

1175```

1176 

1177<h3 id="plugin-uninstall">

1178 plugin uninstall

1179</h3>

1180 

1181删除已安装的插件。

1182 

1183```bash theme={null}

1184claude plugin uninstall <plugin> [options]

1185```

1186 

1187该命令接受这些参数:

1188 

1189* `<plugin>`:插件名称或 `plugin-name@marketplace-name`

1190 

1191该命令接受这些选项:

1192 

1193| 选项 | 描述 | 默认值 |

1194| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------- | :----- |

1195| `-s, --scope <scope>` | 从范围卸载:`user`、`project` 或 `local` | `user` |

1196| `--keep-data` | 保留插件的 [persistent data directory](#persistent-data-directory) | |

1197| `--prune` | 同时删除没有其他插件需要的自动安装依赖项。请参阅 [plugin prune](#plugin-prune) | |

1198| `-y, --yes` | 跳过 `--prune` 确认提示。当 stdin 或 stdout 不是 TTY 时需要 | |

1199| `--json` | 将结果作为 stdout 最后一行的一个 JSON 对象打印,格式与 [`plugin install --json`](#plugin-json-result) 相同。不能与 `--prune` 组合。需要 Claude Code v2.1.268 或更高版本 | |

1200| `-h, --help` | 显示命令帮助 | |

1201 

1202`claude plugin remove` 和 `claude plugin rm` 是此命令的别名。

1203 

1204默认情况下,从最后剩余的范围卸载也会删除插件的 `${CLAUDE_PLUGIN_DATA}` 目录。使用 `--keep-data` 保留它,例如在测试新版本后重新安装时。

1205 

1206<Note>

1207 当来自不同市场的已安装插件共享一个名称时,`plugin-name@marketplace-name` 形式仅卸载来自命名市场的插件。在 v2.1.212 之前,限定形式可能会匹配并卸载来自不同市场的同名插件。

1208</Note>

1209 

1210<h3 id="plugin-prune">

1211 plugin prune

1212</h3>

1213 

1214删除不再被任何已安装插件需要的自动安装插件依赖项。Claude Code 为满足另一个插件的 [`dependencies`](/docs/zh-CN/plugin-dependencies) 字段而拉入的依赖项会被删除;您直接安装的插件永远不会被触及。

1215 

1216```bash theme={null}

1217claude plugin prune [options]

1218```

1219 

1220该命令接受这些选项:

1221 

1222| 选项 | 描述 | 默认值 |

1223| :-------------------- | :--------------------------------- | :----- |

1224| `-s, --scope <scope>` | 在范围处修剪:`user`、`project` 或 `local` | `user` |

1225| `--dry-run` | 列出将被删除的内容而不实际删除 | |

1226| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时需要 | |

1227| `-h, --help` | 显示命令帮助 | |

1228 

1229`claude plugin autoremove` 是此命令的别名。

1230 

1231该命令列出孤立的依赖项并在删除前请求确认。要在一个步骤中删除插件并清理其依赖项,请运行 `claude plugin uninstall <plugin> --prune`。

1232 

1233<h3 id="plugin-enable">

1234 plugin enable

1235</h3>

1236 

1237启用已禁用的插件。当目标从市场安装并声明 [dependencies](/docs/zh-CN/plugin-dependencies) 时,Claude Code 在同一范围内以传递方式启用它们。该命令在 [Enable or disable a plugin with dependencies](/docs/zh-CN/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) 列出的条件下失败。

1238 

1239```bash theme={null}

1240claude plugin enable <plugin> [options]

1241```

1242 

1243该命令接受这些参数:

1244 

1245* `<plugin>`:插件名称、`plugin-name@marketplace-name` 或 `plugin-name@synced` 用于 [plugin synced from claude.ai](#synced-plugins)

1246 

1247该命令接受这些选项:

1248 

1249| 选项 | 描述 | 默认值 |

1250| :-------------------- | :----------------------------------------------------------------------------------------------------------------- | :--- |

1251| `-s, --scope <scope>` | 启用范围:`user`、`project` 或 `local`。省略时,Claude Code 检测安装插件的范围 | 自动检测 |

1252| `--json` | 将结果作为 stdout 最后一行的一个 JSON 对象打印,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 | |

1253| `-h, --help` | 显示命令帮助 | |

1254 

1255<h3 id="plugin-disable">

1256 plugin disable

1257</h3>

1258 

1259禁用插件而不卸载它。

1260 

1261当目标从市场安装时,如果另一个启用的插件[依赖](/docs/zh-CN/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies)它,该命令会失败。错误消息包含一个链式命令,首先禁用每个依赖它的插件。

1262 

1263对于您的组织需要的[同步插件](#synced-plugins),该命令会失败并且不保存任何内容。

1264 

1265```bash theme={null}

1266claude plugin disable [plugin] [options]

1267```

1268 

1269该命令接受这些参数:

1270 

1271* `[plugin]`:插件名称、`plugin-name@marketplace-name` 或 `plugin-name@synced` 用于 [plugin synced from claude.ai](#synced-plugins)。使用 `--all` 时可选

1272 

1273该命令接受这些选项:

1274 

1275| 选项 | 描述 | 默认值 |

1276| :-------------------- | :----------------------------------------------------------------------------------------------------------------- | :--- |

1277| `-a, --all` | 禁用所有启用的插件。不能与 `--scope` 组合 | |

1278| `-s, --scope <scope>` | 禁用范围:`user`、`project` 或 `local`。省略时,Claude Code 检测安装插件的范围 | 自动检测 |

1279| `--json` | 将结果作为 stdout 最后一行的一个 JSON 对象打印,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 | |

1280| `-h, --help` | 显示命令帮助 | |

1281 

1282<h3 id="plugin-update">

1283 plugin update

1284</h3>

1285 

1286将插件更新到最新版本。

1287 

1288```bash theme={null}

1289claude plugin update <plugin> [options]

1290```

1291 

1292该命令接受这些参数:

1293 

1294* `<plugin>`:插件名称或 `plugin-name@marketplace-name`

1295 

1296该命令接受这些选项:

1297 

1298| 选项 | 描述 | 默认值 |

1299| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- |

1300| `-s, --scope <scope>` | 更新范围:`user`、`project`、`local` 或 `managed` | `user` |

1301| `-y, --yes` | 接受插件市场声明的命令,无需确认提示:生成具有 [`command` source](/docs/zh-CN/plugin-marketplaces#command-sources) 的插件的命令,或验证存档下载的 [`headersHelper`](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads)。接受 `headersHelper` 需要 Claude Code v2.1.238 或更高版本。Claude Code 仍会首先打印命令。当 stdin 或 stdout 不是 TTY 时需要,除非您传递 `--accept-command`。在 Claude Code 会话内无效,因此从您自己的终端运行命令 | |

1302| `--accept-command <sha256>` | 接受市场声明的命令,其 `sha256` 之前的 [`--json` 运行](#plugin-json-result) 在 `shownCommand` 中报告,代替 `-y`。接受计数仅适用于该特定命令、插件和市场目录。如果自命令显示以来其中任何一个已更改,包括通过运行自己的市场刷新,Claude Code 不接受摘要并再次显示命令。不能与 `-y` 组合。在 Claude Code 会话内无效,因此从您自己的终端运行命令。需要 Claude Code v2.1.271 或更高版本 | |

1303| `--json` | 将结果作为 stdout 最后一行的一个 JSON 对象打印,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 | |

1304| `-h, --help` | 显示命令帮助 | |

1305 

1306<Note>

1307 Claude Code 根据您已安装的插件解析裸插件名称。当来自不同市场的已安装插件共享该名称时,Claude Code 拒绝更新并列出要运行的限定 `plugin-name@marketplace-name` 命令。在 v2.1.246 之前,Claude Code 仅接受限定形式并拒绝裸名称为未找到。

1308</Note>

1309 

1310***

1311 

1312<h3 id="plugin-list">

1313 plugin list

1314</h3>

1315 

1316列出已安装的插件及其版本、源市场和启用状态。

1317 

1318```bash theme={null}

1319claude plugin list [options]

1320```

1321 

1322该命令接受这些选项:

1323 

1324| 选项 | 描述 | 默认值 |

1325| :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-- |

1326| `--json` | 输出为 JSON。具有加载问题或创作警告的插件行携带 `errors` 或 `notes` 字符串数组。在 Claude Code v2.1.268 或更高版本上,并行 `errorDetails` 和 `noteDetails` 数组为每个条目提供诊断 `type` 和它引用的名称,例如插件、市场、服务器或文件 | |

1327| `--available` | 包括市场中的可用插件。需要 `--json` | |

1328| `-h, --help` | 显示命令帮助 | |

1329 

1330在交互式会话中,`/plugin list` 打印类似的列表内联,但仅涵盖市场安装的插件:

1331 

1332* 从技能目录加载的插件出现在 `/plugin` 界面和 `claude plugin list` 中,但不出现在内联 `/plugin list` 输出中。

1333* [从 claude.ai 同步的插件](#synced-plugins) 在 Claude Code v2.1.239 或更高版本上出现在 `claude plugin list` 中,并在 `/plugin` 界面中出现,但不出现在内联 `/plugin list` 输出中。

1334* 使用 `--plugin-dir` 或 `--plugin-url` 为会话加载的插件出现在 `/plugin` 界面中,仅当相同标志在子命令前时才出现在 `claude plugin list` 中,如 `claude --plugin-dir <dir> plugin list`。仅标志名称标识其位置,因此裸 `claude plugin list` 无法找到它们,不同于同步插件和技能目录插件,其固定目录 Claude Code 扫描。

1335 

1336交互式形式接受 `--enabled` 或 `--disabled` 以仅显示该状态中的插件,以及 `ls` 作为 `list` 的简写。

1337 

1338<h3 id="plugin-details">

1339 plugin details

1340</h3>

1341 

1342显示插件的组件清单和预计令牌成本。输出列出插件贡献的所有组件,分组为 Skills、Agents、Hooks、MCP 服务器和 LSP 服务器,以及它为每个会话添加多少令牌的估计。Skills 组包括 `skills/` 和 `commands/` 条目。

1343 

1344```bash theme={null}

1345claude plugin details <name>

1346```

1347 

1348该命令接受这些参数:

1349 

1350* `<name>`:插件名称或 `plugin-name@marketplace-name`

1351 

1352该命令接受这些选项:

1353 

1354| 选项 | 描述 | 默认值 |

1355| :----------- | :----- | :-- |

1356| `-h, --help` | 显示命令帮助 | |

1357 

1358输出为每个组件显示两个成本数字:

1359 

1360* **Always-on:** 插件的列表文本(如技能描述、代理描述和命令名称)添加到每个会话的令牌,无论任何组件是否触发。

1361* **On-invoke:** 组件触发时的成本。按组件显示,而不是作为插件总计,因为典型会话仅调用组件的子集。

1362 

1363此示例显示具有两个技能的插件的输出外观:

1364 

1365```

1366dependency-guard 1.2.0

1367 Dependency analysis for Claude Code sessions

1368 Source: dependency-guard@example-marketplace

1369 

1370Component inventory

1371 Skills (2) scan-dependencies, review-changes

1372 Agents (0)

1373 Hooks (1) SessionStart (harness-only — no model context cost)

1374 MCP servers (0)

1375 LSP servers (0)

1376 

1377Projected token cost

1378 Always-on: ~180 tok added to every session

1379 

1380Per-component (rounded)

1381 component always-on on-invoke

1382 scan-dependencies ~100 ~2400

1383 review-changes ~80 ~1800

1384 

1385 On-invoke cost is paid each time a skill or agent fires.

1386 Token counts are estimates and may differ from actual usage.

1387```

1388 

1389always-on 总计通过您的活跃模型的 `count_tokens` API 计算。按组件的数字按比例从该总计缩放。如果 API 无法访问,该命令回退到基于字符的估计。

1390 

1391<h3 id="plugin-validate">

1392 plugin validate

1393</h3>

1394 

1395在发布前检查插件或市场的语法和架构错误。

1396 

1397当验证通过时命令退出 0,失败时退出 1,验证运行本身失败时退出 2,例如当您传递的路径不可读时。

1398 

1399```bash theme={null}

1400claude plugin validate <path> [options]

1401```

1402 

1403该命令接受这些参数:

1404 

1405* `<path>`:插件目录或市场目录的路径。请参阅 [Validate a plugin or a directory without a manifest](/docs/zh-CN/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest) 了解插件运行涵盖的文件。

1406 

1407该命令接受这些选项:

1408 

1409| 选项 | 描述 | 默认值 |

1410| :----------- | :---------------------------------------------------------------------------------- | :-- |

1411| `--strict` | 将警告视为错误,在警告时退出 1。在 CI 中使用以捕获运行时容忍的问题,例如 [unrecognized fields](#unrecognized-fields) | |

1412| `--json` | 将验证报告输出为一个 JSON 对象,具有相同的退出代码。需要 Claude Code v2.1.259 或更高版本 | |

1413| `-h, --help` | 显示命令帮助 | |

1414 

1415使用 `--json`,Claude Code 将报告写入 stdout 作为一个 JSON 对象,具有这些顶级字段:

1416 

1417* `success`:退出代码给出的相同判决

1418* `strict`:运行是否将警告视为错误

1419* `target`:Claude Code 验证的已解析路径

1420* `manifest`:清单自己的结果,或 `null` 用于 [run without a manifest](/docs/zh-CN/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest)

1421* `contents`:按文件结果,每个命名其 `file` 并携带 `errors`、`warnings` 和 `notes` 数组

1422 

1423在退出 2 时,该命令不向 stdout 写入任何内容;错误消息转到 stderr。

1424 

1425在交互式会话中,`/plugin validate <path>` 内联运行相同的检查。

1426 

1427<h3 id="plugin-eval">

1428 plugin eval

1429</h3>

1430 

1431运行插件的 [eval cases](/docs/zh-CN/plugin-evals) 并报告评分结果。需要 Claude Code v2.1.269 或更高版本。每个案例都是一个提示加评分器;Claude Code 在隔离会话中运行它多次,仅加载目标插件,默认情况下也不加载插件,以便报告显示差异。请参阅 [Test plugins with evals](/docs/zh-CN/plugin-evals) 了解案例格式、评分器、结果和 CI 使用。

1432 

1433```bash theme={null}

1434claude plugin eval [target] [options]

1435```

1436 

1437可选的 `target` 是一个插件目录、单个 `prompt.md` 或 `case.yaml` 文件、已安装的插件作为 `name` 或 `name@marketplace`,或 `name@skills-dir`,默认为当前目录。将其放在 `--tag`、`--allow-tools` 和 `--json` 之前。

1438 

1439此表列出大多数运行使用的选项。运行 `claude plugin eval --help` 以获取完整集合,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。

1440 

1441| 选项 | 描述 | 默认值 |

1442| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------- |

1443| `--runs <n>` | 每个案例每个分支的运行次数 | 每个案例的 `runs`,否则 3 |

1444| `-j, --concurrency <n>` | 一次运行的代理会话数,1 到 8。它们共享您的速率限制 | `1` |

1445| `--model <model>` | 被测试代理的模型 | 每个案例的 `model`,否则 `ANTHROPIC_MODEL`(如果设置),否则 Claude Code 的默认值 |

1446| `--judge-model <model>` | `llm` 和 `baseline` 评分器的模型 | 一个小的快速模型 |

1447| `--ablation <mode>` | `none` 或 `with-without`。请参阅 [Compare against a no-plugin baseline](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) | 当插件解析时为 `with-without`,否则为 `none` |

1448| `--threshold <0..1>` | 如果任何案例评分低于此值则退出 1 | `1.0` |

1449| `--max-cost-usd <usd>` | 一旦支出达到此值就停止下一次运行,退出 2,并报告部分结果 | 无上限 |

1450| `--allow-tools <tools...>` | 授予超出只读集合的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅 [Grant tools](/docs/zh-CN/plugin-evals#grant-tools) | |

1451| `--scaffold` | 运行每个案例的 [`scaffold_script`](/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |

1452| `--trust-plugin` | 跳过首次运行信任提示,用于 CI。请参阅 [What a run can access](/docs/zh-CN/plugin-evals#security) | 关闭 |

1453| `--mocks <mode>` | `record` 或 `off`。请参阅 [Mock MCP servers](/docs/zh-CN/plugin-evals#mock-mcp-servers) | `record` |

1454| `--eval-dir <dir>` | 保存案例的插件下方的目录 | 清单的 `experimental.evals`,否则 `evals` |

1455| `--json [path]` | 将 [result document](/docs/zh-CN/plugin-evals#json-result) 打印到 stdout,或将其写入 `.json` 路径 | |

1456| `--no-publish` | 保持 HTML 报告本地 | |

1457| `-h, --help` | 显示命令帮助 | |

1458 

1459当每个案例都满足阈值时命令退出 0,在失败案例、加载错误或不受信任的插件目录时退出 1,在部分运行时退出 2,中断时退出 130,终止时退出 143。请参阅 [Run evals in CI](/docs/zh-CN/plugin-evals#run-evals-in-ci)。

1460 

1461<h3 id="plugin-eval-init">

1462 plugin eval init

1463</h3>

1464 

1465为当前目录中的插件创建一个 eval 套件。需要 Claude Code v2.1.269 或更高版本。在终端中,这会启动一个创作访谈,读取插件、提议案例和评分器、试验它们并写入文件。使用 `--bare`,或没有终端时,它会写入一个空白的单案例模板。从交互式 Claude Code 会话内运行,它会打印该会话要遵循的访谈说明,而不是写入模板。请参阅 [Create your first eval suite](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)。

1466 

1467```bash theme={null}

1468claude plugin eval init [name] [options]

1469```

1470 

1471可选的 `name` 是一个案例名称:访谈不需要一个,而 `--bare` 和无终端模板路径需要一个。它接受这些选项:

1472 

1473| 选项 | 描述 | 默认值 |

1474| :------------------ | :------------------------------------------------------------- | :---------------------------------- |

1475| `--bare` | 为 `<name>` 写入一个空白的 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |

1476| `-i, --interactive` | 需要访谈。没有终端时失败,而不是写入模板 | |

1477| `--eval-dir <dir>` | 当前目录下方写入案例的目录 | 清单的 `experimental.evals`,否则 `evals` |

1478| `-h, --help` | 显示命令帮助 | |

1479 

1480<h3 id="plugin-tag">

1481 plugin tag

1482</h3>

1483 

1484为插件创建发布 git 标签。默认情况下,该命令标记当前目录中的插件;传递路径以标记其他地方的插件。请参阅 [Tag plugin releases](/docs/zh-CN/plugin-dependencies#tag-plugin-releases-for-version-resolution)。

1485 

1486```bash theme={null}

1487claude plugin tag [path] [options]

1488```

1489 

1490该命令接受这些参数:

1491 

1492* `[path]`:插件目录的路径。默认为当前目录。

1493 

1494该命令接受这些选项:

1495 

1496| 选项 | 描述 | 默认值 |

1497| :-------------------- | :---------------------- | :------- |

1498| `--push` | 创建标签后将其推送到远程 | |

1499| `--dry-run` | 打印将被标记的内容而不创建标签 | |

1500| `-f, --force` | 即使工作树脏或标签已存在也创建标签 | |

1501| `-m, --message <msg>` | 标签注释消息。使用 `%s` 作为版本的占位符 | |

1502| `--remote <name>` | 使用 `--push` 推送到的远程 | `origin` |

1503| `-h, --help` | 显示命令帮助 | |

1504 

1505***

1506 

1507<h2 id="debugging-and-development-tools">

1508 调试和开发工具

1509</h2>

1510 

1511<h3 id="debugging-commands">

1512 调试命令

1513</h3>

1514 

1515使用 `claude --debug` 查看插件加载详情:

1516 

1517这会显示:

1518 

1519* 正在加载哪些插件

1520* 插件清单中的任何错误

1521* Skill、agent 和 hook 注册

1522* MCP 服务器初始化

1523 

1524<h3 id="common-issues">

1525 常见问题

1526</h3>

1527 

1528| 问题 | 原因 | 解决方案 |

1529| :---------------------------------- | :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1530| 插件未加载 | 无效的 `plugin.json` | 运行 `claude plugin validate ./my-plugin` 或 `/plugin validate ./my-plugin`,其中 `./my-plugin` 是你的插件目录,以检查 `plugin.json`、`hooks/hooks.json` 以及插件默认目录中的 skills、agents 和 commands 的前置元数据是否存在语法和模式错误。参见 [验证插件或没有清单的目录](/docs/zh-CN/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest) 了解运行涵盖的内容 |

1531| Skills 未显示 | 目录结构错误 | 确保 `skills/` 或 `commands/` 在插件根目录,而不是在 `.claude-plugin/` 内 |

1532| Hooks 未触发 | 脚本不可执行 | 运行 `chmod +x script.sh` |

1533| MCP 服务器失败 | 缺少 `${CLAUDE_PLUGIN_ROOT}` | 对所有插件路径使用变量 |

1534| 路径错误 | 使用了绝对路径 | 使路径相对,以 `./` 开头;参见 [路径行为规则](#path-behavior-rules),其中涵盖了 `skills` 字段的 `"."` 例外 |

1535| LSP `Executable not found in $PATH` | 语言服务器未安装 | 安装二进制文件(例如,`npm install -g typescript-language-server typescript`) |

1536 

1537<h3 id="example-error-messages">

1538 示例错误消息

1539</h3>

1540 

1541**清单验证错误**:

1542 

1543* `Invalid JSON syntax: Unexpected token } in JSON at position 142`:检查是否缺少逗号、多余逗号或未引用的字符串

1544* `Plugin <name> has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Invalid input: expected string, received undefined`:缺少必需字段

1545* `Plugin <name> has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`:JSON 语法错误。在 v2.1.246 之前,Claude Code 也会为保存为带有字节顺序标记 (BOM) 的 UTF-8 的 `plugin.json` 产生此错误,即使 JSON 在其他方面有效。

1546 

1547**插件加载错误**:

1548 

1549* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`:命令路径存在但不包含有效的命令文件

1550* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`:marketplace.json 中的 `source` 路径指向不存在的目录

1551* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`:删除重复的组件定义或在 marketplace 条目中删除 `strict: false`

1552 

1553<h3 id="hook-troubleshooting">

1554 Hook 故障排除

1555</h3>

1556 

1557**Hook 脚本未执行**:

1558 

15591. 检查脚本是否可执行:`chmod +x ./scripts/your-script.sh`

15602. 验证 shebang 行:第一行应为 `#!/bin/bash` 或 `#!/usr/bin/env bash`

15613. 检查路径是否使用 `${CLAUDE_PLUGIN_ROOT}`:`"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"`

15624. 手动测试脚本:`./scripts/your-script.sh`

1563 

1564**Hook 未在预期事件上触发**:

1565 

15661. 验证事件名称正确(区分大小写):`PostToolUse`,而不是 `postToolUse`

15672. 检查匹配器模式是否与你的工具匹配:`"matcher": "Write|Edit"` 用于文件操作

15683. 确认 hook 类型有效:`command`、`http`、`mcp_tool`、`prompt` 或 `agent`

1569 

1570<h3 id="mcp-server-troubleshooting">

1571 MCP 服务器故障排除

1572</h3>

1573 

1574**服务器未启动**:

1575 

15761. 检查命令是否存在且可执行

15772. 验证所有路径是否使用 `${CLAUDE_PLUGIN_ROOT}` 变量

15783. 检查 MCP 服务器日志:`claude --debug` 显示初始化错误

15794. 在 Claude Code 外手动测试服务器

1580 

1581**服务器工具未显示**:

1582 

15831. 确保服务器在 `.mcp.json` 或 `plugin.json` 中正确配置

15842. 验证服务器是否正确实现 MCP 协议

15853. 检查调试输出中的连接超时

1586 

1587<h3 id="directory-structure-mistakes">

1588 目录结构错误

1589</h3>

1590 

1591**症状**:插件加载但组件(skills、agents、hooks)缺失。

1592 

1593**正确结构**:组件必须在插件根目录,而不是在 `.claude-plugin/` 内。只有 `plugin.json` 属于 `.claude-plugin/`。

1594 

1595**调试检查清单**:

1596 

15971. 运行 `claude --debug` 并查找"loading plugin"消息

15982. 检查每个组件目录是否在调试输出中列出

15993. 验证文件权限允许读取插件文件

1600 

1601***

1602 

1603<h2 id="distribution-and-versioning-reference">

1604 分发和版本管理参考

1605</h2>

1606 

1607<h3 id="version-management">

1608 版本管理

1609</h3>

1610 

1611Claude Code 使用插件的版本作为缓存键,以确定是否有可用的更新。当你运行 `/plugin update` 或自动更新触发时,Claude Code 会计算当前版本,如果与已安装的版本匹配,则跳过更新。从[本地目录市场](#plugin-caching-and-file-resolution)加载的插件会在每个会话开始时加载其当前源文件,无论其版本字符串如何。

1612 

1613对于除 `command` 之外的每种源类型,Claude Code 从以下第一个设置的项中解析版本:

1614 

16151. 插件 `plugin.json` 中的 `version` 字段

16162. 插件在 `marketplace.json` 中的市场条目中的 `version` 字段

16173. 插件源的 git 提交 SHA,适用于 git 托管市场中的 `github`、`url`、`git-subdir` 和相对路径源

16184. SHA-256 摘要,适用于 [`archive` 源](/docs/zh-CN/plugin-marketplaces#zip-archives):市场条目中的 `sha256` 固定值,或当你未设置固定值时下载文件的摘要。Claude Code 将其缩短为前 12 个字符

16195. `unknown`,适用于 `npm` 源或不在 git 仓库内的本地目录。Claude Code 不会从包含安装路径的仓库(例如 git 管理的 `~/.claude`)中获取版本

1620 

1621对于 [`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources),Claude Code 始终从命令生成的内容中派生版本:单独的 12 字符内容哈希,或在设置了版本时附加到 `plugin.json` 版本作为 `<version>-<hash>`。Claude Code 忽略命令源的市场条目中的 `version` 字段。因此,命令的哈希输出发生变化会产生新版本,即使编写的版本字符串保持不变。在 [link mode](/docs/zh-CN/plugin-marketplaces#copy-mode-and-link-mode) 中,哈希覆盖打印目录的真实路径及其顶级条目,而不是文件内容。

1622 

1623对于这些源类型,这为你提供了三种版本控制插件的方式:

1624 

1625| 方法 | 如何操作 | 更新行为 | 最适合 |

1626| :------------ | :--------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------ |

1627| **显式版本** | 在 `plugin.json` 中设置 `"version": "2.1.0"` | 用户仅在你更新此字段时获得更新。推送新提交而不更新它没有效果,`/plugin update` 报告"已是最新版本"。对于[从本地加载](#plugin-caching-and-file-resolution)的插件,新内容仍会加载。 | 具有稳定发布周期的已发布插件 |

1628| **提交 SHA 版本** | 从 `plugin.json` 和市场条目中都省略 `version` | 每当源的已解析提交发生变化时,用户获得更新 | 正在积极开发的内部或团队插件 |

1629| **摘要版本** | 使用 [`archive` 源](/docs/zh-CN/plugin-marketplaces#zip-archives) 并从 `plugin.json` 和市场条目中都省略 `version` | 使用 `sha256` 固定值时,当你更改固定值时用户获得更新。没有固定值时,每当托管 zip 文件的字节发生变化时用户获得更新 | 作为 zip 文件发布到静态服务器或工件仓库的插件 |

1630 

1631如果你使用显式版本,请遵循 [semantic versioning](https://semver.org)(`MAJOR.MINOR.PATCH`):对于破坏性更改,增加 MAJOR;对于新功能,增加 MINOR;对于错误修复,增加 PATCH。在 `CHANGELOG.md` 中记录更改。

1632 

1633***

1634 

1635<h2 id="see-also">

1636 另请参阅

1637</h2>

1638 

1639* [Plugins](/docs/zh-CN/plugins) - 教程和实际用法

1640* [Plugin marketplaces](/docs/zh-CN/plugin-marketplaces) - 创建和管理市场

1641* [Skills](/docs/zh-CN/skills) - Skill 开发详情

1642* [Subagents](/docs/zh-CN/sub-agents) - Agent 配置和功能

1643* [Hooks](/docs/zh-CN/hooks) - 事件处理和自动化

1644* [MCP](/docs/zh-CN/mcp) - 外部工具集成

1645* [Settings](/docs/zh-CN/settings) - Plugins 的配置选项

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Anthropic 的插件市场

6 

7> Anthropic 官方、社区和演示插件市场的 Claude Code:它们的名称、存储库、如何添加每个市场,以及在哪里浏览它们的插件。

8 

9Anthropic 为 Claude Code 发布了三个通用插件市场:[官方](https://github.com/anthropics/claude-plugins-official)、[社区](https://github.com/anthropics/claude-plugins-community)和[演示](https://github.com/anthropics/claude-code)。每个都是其自己的 GitHub 存储库中的插件目录。当你在 Claude Code 会话中从其中一个安装插件时,你在 `@` 后面输入市场的名称,如 `/plugin install commit-commands@claude-plugins-official`。

10 

11使用此页面来区分这三个市场,并找到检查官方市场是否包含给定插件的位置。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **如何安装插件**:请参阅[安装插件](/docs/zh-CN/plugins/install)

17 * **安装失败**:请参阅[插件故障排除](/docs/zh-CN/plugins/troubleshooting)

18</Note>

19 

20转到你需要的页面部分:

21 

22* 要按存储库、市场名称和获取方式来区分这三个市场,请参阅 [Anthropic 的插件市场](#anthropic%E2%80%99s-marketplaces)。

23* 要在官方市场中查找插件,请参阅[在官方市场中查找插件](#find-plugins-in-the-official-marketplace)。

24 

25<h2 id="anthropic’s-marketplaces">

26 Anthropic 的插件市场

27</h2>

28 

29市场是一个插件目录,由存储库在其 `.claude-plugin/marketplace.json` 文件中定义。官方、社区和演示市场各自来自自己的 GitHub 存储库。Anthropic 还发布主题特定的市场,例如 `anthropics/skills` 和 `anthropics/knowledge-work-plugins`,你可以在 Claude Code 会话中使用 `/plugin marketplace add <owner>/<repo>` 添加。

30 

31此表给出了每个市场的存储库和市场名称,这是你从该市场安装插件时在 `@` 后面输入的内容。社区市场的名称是 `claude-community`,而不是其存储库名称。

32 

33| | 官方 | 社区 | 演示 |

34| :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------- |

35| 存储库 | [`anthropics/claude-plugins-official`](https://github.com/anthropics/claude-plugins-official) | [`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) | [`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/plugins) |

36| 市场名称 | `claude-plugins-official` | `claude-community` | `claude-code-plugins` |

37| 其中包含的内容 | Anthropic 维护的插件,加上来自合作伙伴和其他作者的插件 | 第三方插件,由其作者提交给 Anthropic | 一小组示例插件,展示插件可以包含的内容 |

38| 获取方式 | Claude Code 在你首次启动交互式终端会话时添加它,除非[托管策略](/docs/zh-CN/plugins/org#allow-the-official-marketplace-and-your-own)或 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` 阻止它。如果缺少,请参阅[市场 `claude-plugins-official` 未找到](/docs/zh-CN/plugins/troubleshooting#marketplace-claude-plugins-official-not-found) | 你在 Claude Code 会话中使用 `/plugin marketplace add anthropics/claude-plugins-community` 添加它 | 你在 Claude Code 会话中使用 `/plugin marketplace add anthropics/claude-code` 添加它 |

39 

40如果你编写了插件并希望其他人安装它,请参阅[发布插件](/docs/zh-CN/plugins/publish),其中涵盖了你自己的市场和提交到社区市场。

41 

42<h3 id="the-demo-marketplace-in-anthropics/claude-code">

43 `anthropics/claude-code` 中的演示市场

44</h3>

45 

46如果教程或较旧的说明告诉你运行 `/plugin marketplace add anthropics/claude-code`,这会添加演示市场,名为 `claude-code-plugins`。这不是官方市场,Claude Code 已经为你添加了。

47 

48演示市场的大多数插件也在官方市场中以相同的名称存在。例如,`code-review`、`feature-dev`、`commit-commands` 和 `security-guidance` 都在两者中。从 `claude-plugins-official` 安装这些,这样你就不会安装两个副本。

49 

50<h2 id="find-plugins-in-the-official-marketplace">

51 在官方市场中查找插件

52</h2>

53 

54官方市场 `claude-plugins-official` 是 Claude Code 为你添加的市场。它列出的大部分内容来自合作伙伴和其他作者,而不是来自 Anthropic:工具供应商发布连接 Claude Code 到其服务的插件,Anthropic 维护一个较小的自己的插件集,例如 `commit-commands`、`code-review`、`feature-dev` 和[语言服务器插件](/docs/zh-CN/plugins/code-intelligence)。目录经常变化,所以此页面不列出它。

55 

56要查看其中的内容,请在 Claude Code 会话中使用 `/plugin` 的 **Discover** 选项卡(你可以搜索),或在网络上浏览 [Claude Marketplace](https://claude.com/marketplace/plugins)。

57 

58<h2 id="browse-and-install-from-anthropic’s-marketplaces">

59 从 Anthropic 的市场浏览和安装

60</h2>

61 

62你可以在 Claude Code、网络或 GitHub 上搜索 Anthropic 的市场中的插件:

63 

64* **在 Claude Code 中,通过浏览**:在交互式会话中运行 `/plugin`。其 **Discover** 选项卡列出了你添加的市场中的插件。

65* **在 Claude Code 中,按名称**:在会话中运行 `/plugin install <name>`,它会在你添加的市场中查找该名称。如果插件在其中一个中,其详细信息会在 `/plugin` 面板中打开,在你选择[安装范围](/docs/zh-CN/plugins/install#install-a-plugin)并在那里确认之前,不会安装任何内容。如果不在,你会看到 `Plugin "<name>" not found in any marketplace`。

66* **在网络上**:在 [Claude Marketplace](https://claude.com/marketplace/plugins) 上搜索完整目录,它显示安装计数并标记一些插件为 **Anthropic verified**。

67* **在 GitHub 上**:打开市场存储库中的 `.claude-plugin/marketplace.json`,例如 [`anthropics/claude-plugins-official`](https://github.com/anthropics/claude-plugins-official)。该文件就是目录本身。

68 

69要从桌面应用或脚本安装,或查看云会话加载的内容,请参阅[安装插件](/docs/zh-CN/plugins/install)。

70 

71<h3 id="add-the-community-or-demo-marketplace">

72 添加社区或演示市场

73</h3>

74 

75社区和演示市场在你在 Claude Code 会话中添加它们之前不会注册:

76 

77* **社区**:运行 `/plugin marketplace add anthropics/claude-plugins-community`,然后使用 `@claude-community` 后缀安装。

78* **演示**:运行 `/plugin marketplace add anthropics/claude-code`,然后使用 `@claude-code-plugins` 后缀安装。

79 

80如果 `claude-plugins-official` 不在 `/plugin` 的 **Marketplaces** 选项卡上,用 `/plugin marketplace add anthropics/claude-plugins-official` 以相同的方式添加它。

81 

82对于 `not found` 错误和无法添加的市场,请参阅[插件故障排除](/docs/zh-CN/plugins/troubleshooting#install-a-plugin)。

83 

84<h2 id="third-party-marketplaces">

85 第三方市场

86</h2>

87 

88许多流行的插件不在任何 Anthropic 市场中。它们在其作者自己的市场中,通常是一个 GitHub 存储库,其根目录中有 `.claude-plugin/marketplace.json`。

89 

90Anthropic 不审查第三方市场,所以在添加一个之前,请阅读[插件安全和信任](/docs/zh-CN/plugins/security)。

91 

92要使用第三方市场,在 Claude Code 会话中使用 `/plugin marketplace add <owner>/<repo>` 添加其存储库,然后使用 `/plugin install <plugin>@<marketplace-name>` 安装。市场名称是该 `marketplace.json` 的 `name` 字段,Claude Code 在添加市场后会打印它。

93 

94有关添加市场的其他方式,请参阅[添加市场](/docs/zh-CN/plugins/install#add-a-marketplace)。

95 

96<h2 id="next-steps">

97 后续步骤

98</h2>

99 

100* [安装和管理插件](/docs/zh-CN/plugins/install):从这些市场之一安装插件并选择范围

101* [插件安全和信任](/docs/zh-CN/plugins/security):插件可以在你的机器上做什么,以及在安装前如何审查插件

102* [代码智能插件](/docs/zh-CN/plugins/code-intelligence):安装官方市场的语言服务器插件之一

103* [创建市场](/docs/zh-CN/plugins/create-marketplace):在 Anthropic 的市场旁边运行你自己的市场

plugins/cli-hints.md +136 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 从您的 CLI 推荐您的插件

6 

7> 通过从您的 CLI 或 SDK 发出 claude-code-hint 标签,提示 Claude Code 用户安装您的官方市场插件。

8 

9如果您维护 CLI 或 SDK,您的工具可以提示 Claude Code 用户安装您的插件。当您的 CLI 检测到它在 Claude Code 内运行时,让它向 stderr 写入一行 `<claude-code-hint />` 标签。Claude Code 在模型看到输出之前从 Bash 和 PowerShell 工具输出中删除该行,然后向用户显示一次性安装提示。

10 

11本页仅适用于您的插件是否列在 `claude-plugins-official` 或其他市场中,该市场具有 Anthropic 的[官方市场名称](/docs/zh-CN/plugins/security#official-marketplace-names)之一。社区市场 `claude-community` 不是其中之一。

12 

13<Note>

14 要发布插件,请参阅[发布和分发插件](/docs/zh-CN/plugins/publish)。

15</Note>

16 

17<h2 id="emit-the-hint">

18 发出提示

19</h2>

20 

21仅当设置了 `CLAUDECODE` 或 `CLAUDE_CODE_CHILD_SESSION` 时才发出标签,以便当人员直接运行您的 CLI 时它不会出现。

22 

23Claude Code 在通过 Bash 和 PowerShell 工具运行的命令以及 hook 命令中设置 `CLAUDECODE=1`。在 v2.1.172 及更高版本上,它也在那里设置 `CLAUDE_CODE_CHILD_SESSION=1`。这些变量在哪些进程中携带它们方面有所不同:

24 

25* **`CLAUDECODE`**:由每个 Claude Code 版本设置。IDE 扩展也在其集成终端中设置它,因此仅在 `CLAUDECODE` 上的门控也会在人员在其中一个终端中直接运行您的 CLI 时发出标签

26* **`CLAUDE_CODE_CHILD_SESSION`**:仅在 Claude Code 本身启动的子进程中设置。当您可以要求 v2.1.172 或更高版本时使用它

27 

28[环境变量参考](/docs/zh-CN/env-vars)有详细信息。

29 

30以下示例在 `CLAUDECODE` 上进行门控以获得最广泛的覆盖范围,并为官方市场中名为 `example-cli` 的插件发出提示:

31 

32<CodeGroup>

33 ```javascript Node.js theme={null}

34 if (process.env.CLAUDECODE) {

35 process.stderr.write(

36 '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />\n',

37 )

38 }

39 ```

40 

41 ```python Python theme={null}

42 import os, sys

43 

44 if os.environ.get("CLAUDECODE"):

45 print(

46 '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />',

47 file=sys.stderr,

48 )

49 ```

50 

51 ```go Go theme={null}

52 if os.Getenv("CLAUDECODE") != "" {

53 fmt.Fprintln(os.Stderr,

54 `<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />`)

55 }

56 ```

57 

58 ```shell Shell theme={null}

59 if [ -n "$CLAUDECODE" ]; then

60 printf '%s\n' '<claude-code-hint v="1" type="plugin" value="example-cli@claude-plugins-official" />' >&2

61 fi

62 ```

63</CodeGroup>

64 

65将 `example-cli` 替换为您的插件在官方市场中的名称。

66 

67您可以在每次调用时发出提示,因为 Claude Code 为每个插件提示一次。

68 

69要检查发出器,请在终端中运行 `CLAUDECODE=1 example-cli` 并确认标签行出现在 stderr 上,然后在没有变量的情况下运行 `example-cli` 并确认没有额外的内容打印。

70 

71<h2 id="hint-format">

72 提示格式

73</h2>

74 

75标签必须占据自己的行;Claude Code 忽略嵌入在行中间的标签。

76 

77标签采用三个属性,全部必需:

78 

79| 属性 | 描述 |

80| :------ | :-------------------------- |

81| `v` | 协议版本。`1` 是唯一支持的值 |

82| `type` | 提示类型。`plugin` 是唯一支持的值 |

83| `value` | `name@marketplace` 形式的插件标识符 |

84 

85值可以是双引号或不带引号;不带引号的值不能包含空格。

86 

87即使 `v` 或 `type` 无法识别,Claude Code 也会从输出中删除该行。

88 

89<h2 id="check-when-the-prompt-appears">

90 检查提示何时出现

91</h2>

92 

93提示仅在交互式终端会话中出现。在 `claude -p` 运行中、在子代理运行中以及在 hook 命令输出中,标签被剥离且不显示提示。所有这些检查也必须通过:

94 

95* **官方且可安装**:`value` 命名一个 Claude Code 在其官方市场本地副本中找到的插件,该插件尚未安装,且没有策略阻止

96* **分析打开**:Claude Code 的分析关闭的会话永远不会提示,例如设置了 `DISABLE_TELEMETRY`、`DO_NOT_TRACK` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 的会话,或在第三方提供商(如 Amazon Bedrock)上的会话,其中[自动遥测选择退出](/docs/zh-CN/data-usage#default-behaviors-by-api-provider)适用

97* **频率限制**:每个会话一个提示,每个插件一个提示(无论用户的答案如何),一旦在该机器上为 100 个插件提示过,就没有提示

98* **未关闭**:用户未选择**否,不再显示插件安装提示**

99* **本地、有人值守的会话**:会话的工作区是本地的而不是在云或远程机器上,会话不是无人值守运行的。例如,使用 `--cloud` 启动的会话、提供远程控制的会话或代理团队队友永远不会提示

100 

101<h2 id="preview-what-the-user-sees">

102 预览用户看到的内容

103</h2>

104 

105当[检查提示何时出现](#check-when-the-prompt-appears)中的检查通过时,Claude Code 显示一个**插件推荐**对话框,如下所示:

106 

107```text theme={null}

108─────────────────────────────────────────────────────────────

109 Plugin recommendation

110 

111 The example-cli command suggests installing a plugin.

112 

113 Plugin: example-cli

114 Marketplace: claude-plugins-official

115 Description: Official integration for example-cli deployments

116 

117 Would you like to install it?

118 ❯ 1. Yes, install

119 2. No

120 3. No, and don't show plugin installation hints again

121 

122─────────────────────────────────────────────────────────────

123```

124 

125对话框命名 Claude 运行的 shell 命令的第一个单词,以便用户可以发现不匹配。每个答案都有一个效果:

126 

127* **是的,安装**:在[用户范围](/docs/zh-CN/plugins/install)安装插件

128* **否,不再显示插件安装提示**:为该用户关闭未来的提示提示

129* **30 秒内无答案**:计为**否**

130 

131<h2 id="next-steps">

132 后续步骤

133</h2>

134 

135* [发布和分发插件](/docs/zh-CN/plugins/publish):进入每个市场的路由,包括提示所需的官方市场

136* [插件命令参考](/docs/zh-CN/plugins/cli-reference#plugin-install):在会话外安装相同插件的 shell 命令

plugins/cli-reference.md +843 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Plugin 命令参考

6 

7> claude plugin shell 命令、会话中的 /plugin 和 /reload-plugins 的完整参考,以及在一个会话中加载 plugin 的标志。

8 

9您可以从 shell 或脚本中以 `claude plugin` 的形式运行 plugin 命令,或在 Claude Code 会话中以 `/plugin` 和 `/reload-plugins` 的形式运行。本参考给出每个命令的标志、默认值、输出和退出代码,以及在一个会话中加载 plugin 的两个标志。

10 

11在您的构建上运行 `claude plugin --help` 以确认您的版本具有哪些子命令。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **安装和管理步骤,以及 `/plugin` 运行的位置**:请参阅 [安装和管理 plugins](/docs/zh-CN/plugins/install)

17 * **命令在磁盘上更改的内容以及哪个作用域优先**:请参阅 [Plugin 加载参考](/docs/zh-CN/plugins/loading)

18 * **错误消息的含义**:请参阅 [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting)

19</Note>

20 

21<h2 id="claude-plugin-commands">

22 claude plugin 命令

23</h2>

24 

25从 shell 或脚本中运行 `claude plugin <subcommand>`,在 Claude Code 会话外。这些子命令安装和管理 plugins,而不打开 [`/plugin`](#plugin-in-a-session) 面板。

26 

27`claude plugins` 是 `claude plugin` 的别名。

28 

29每个子命令共享这些退出代码、plugin 参数和作用域值:

30 

31* **退出代码**:成功时为 `0`,失败时为 `1`。`validate` 为意外错误添加退出 `2`,`eval` 添加 [其部分](#plugin-eval) 中列出的代码。

32* **Plugin 参数**:`<plugin>` 参数是 plugin `name` 或 `name@marketplace`。当两个市场提供相同的名称时,使用限定形式。

33* **作用域**:`--scope` 接受 `user`、`project` 或 `local`,并命名命令写入的设置文件。`update` 也接受 `managed`。

34 

35<h3 id="plugin-init">

36 plugin init

37</h3>

38 

39在 `~/.claude/skills/<name>/` 处搭建新 plugin。它在您的下一个会话中作为 `<name>@skills-dir` 加载,无需安装步骤。

40 

41`new` 是 `init` 的别名。

42 

43对于以此命令开始的创建、测试和编辑工作流,请参阅 [创建 plugin](/docs/zh-CN/plugins/create)。

44 

45```bash theme={null}

46claude plugin init <name> [options]

47```

48 

49`<name>` 成为 `~/.claude/skills/` 下的目录名称和 plugin 清单中的 `name`。

50 

51该命令没有用于另一个位置的标志。要改为在项目内搭建,请参阅 [创建 plugin](/docs/zh-CN/plugins/create)。

52 

53| 标志 | 描述 |

54| :----------------------- | :------------------------------------------------------------------------- |

55| `--description <text>` | 清单描述 |

56| `--author <name>` | 作者名称。默认为 `git config user.name` |

57| `--author-email <email>` | 作者电子邮件。默认为 `git config user.email` |

58| `--with <components...>` | 也为 `skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style` 或 `channel` 搭建启动文件 |

59| `-f, --force` | 覆盖目标处的现有 `.claude-plugin/` |

60 

61使用启动 skill 和 hook 文件搭建 plugin:

62 

63```bash theme={null}

64claude plugin init my-helper --with skills hooks

65```

66 

67Claude Code 验证其写入的内容并打印 `Created plugin "my-helper" at ~/.claude/skills/my-helper`,后跟它加载的 id 和关闭它的 `claude plugin disable` 命令。

68 

69当 Claude Code 无法安全搭建时,它退出 `1` 而不写入,消息命名原因。这些是常见原因:

70 

71* 未知的 `--with` 值

72* 目标处的现有搭建,没有 `--force`

73* 阻止 skills-directory plugins 的托管设置

74 

75<h3 id="plugin-install">

76 plugin install

77</h3>

78 

79从您添加的市场安装 plugin。`i` 是 `install` 的别名。

80 

81```bash theme={null}

82claude plugin install <plugin> [options]

83```

84 

85大多数 plugins 无需提示即可安装。对于其市场条目 [运行命令来安装它](/docs/zh-CN/plugins/host-marketplace) 或 [为其下载设置 `headersHelper`](/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 的 plugin,Claude Code 首先打印命令并询问 `Run this command now? [y/N]`。

86 

87| 标志 | 描述 |

88| :-------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

89| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local`。默认为 `user` |

90| `--config <key=value>` | 设置 plugin 清单声明的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference) 选项。为每个选项重复该标志。需要 Claude Code v2.1.147 或更高版本 |

91| `-y, --yes` | 接受显示的安装命令,无需 `Run this command now?` 提示。当命令在 Claude Code 会话内运行时(例如从 Bash 工具或 hook)被忽略。需要 Claude Code v2.1.229 或更高版本 |

92| `--accept-command <sha256>` | 接受显示的安装命令,其 `sha256` 之前的 [`--json` 运行](#plugin-json-result) 在 `shownCommand` 中报告,代替 `-y`。不能与 `-y` 组合。请参阅 [接受显示的安装命令](#accept-a-displayed-install-command)。需要 Claude Code v2.1.271 或更高版本 |

93| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,而不是人类可读的消息,供脚本使用。请参阅 [JSON 结果格式](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

94 

95从您自己的终端传递 `-y` 以接受显示的命令而无需提示。以下是没有 TTY 和 Claude 运行命令时发生的情况:

96 

97* **stdin 或 stdout 不是 TTY,您既不传递 `-y` 也不传递 `--accept-command`**:安装被拒绝。输出说命令仅被显示,退出代码为 `1`

98* **Claude 通过其 Bash 工具运行命令**:`-y` 被忽略。改为从您自己的终端运行命令

99 

100为克隆项目的每个人安装 plugin:

101 

102```bash theme={null}

103claude plugin install formatter@my-marketplace --scope project

104```

105 

106Claude Code 打印 `Successfully installed plugin: formatter@my-marketplace (scope: project)`。当没有新内容被安装时,输出说明原因:

107 

108* **已在该作用域安装**:输出为 `Plugin "formatter@my-marketplace" is already installed (scope: project)`,退出代码为 `0`

109* **您拒绝命令源提示**:输出为 `Aborted.`,退出代码为 `1`

110* **您拒绝 `headersHelper` 提示,或无法在没有 TTY 的情况下确认**:输出为 `Aborted — the command was not run.`,退出代码为 `1`

111 

112<h4 id="plugin-json-result">

113 JSON 结果格式

114</h4>

115 

116当您向 `plugin install` 传递 `--json` 时,stdout 的最后一行是一个 JSON 对象。仅解析该行,因为 Claude Code 在其前面打印市场声明的任何命令。

117 

118三个字段始终存在:

119 

120* `command`:运行的子命令,例如 `install`

121* `outcome`:`ok` 或 `failed`

122* `message`:结果的人类可读描述

123 

124其他字段,例如 `pluginId`、`scope` 和 `failureCode`,仅在适用时出现。

125 

126`plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上的 `--json` 选项打印相同的对象,带有该子命令自己的字段。

127 

128使用错误(例如无效的 `--scope`)不打印结果行,退出 `1`,原因在 stderr 上。

129 

130<h4 id="accept-a-displayed-install-command">

131 接受显示的安装命令

132</h4>

133 

134当 `--json` 运行显示市场声明的命令且不运行它时,`failed` 结果也带有 `shownCommand` 对象。其字段包括显示的命令、它所属的 plugin 和命令的 `sha256`。

135 

136要接受完全相同的命令,从您自己的终端使用该 `sha256` 作为 `--accept-command` 重新运行,因为该标志在 Claude Code 会话内无效。需要 Claude Code v2.1.271 或更高版本。

137 

138`sha256` 计为完全相同的命令、plugin 和市场目录的接受。如果自命令显示以来其中任何一个发生了变化,Claude Code 不接受 `sha256` 并再次显示命令。运行自己的市场刷新获取的更改也计为此类更改。

139 

140如果 `shownCommand.acceptCommandMatched` 为 `false`,您传递的 `sha256` 与现在显示的命令不匹配。在使用其 `sha256` 重新运行之前查看该命令。

141 

142<h3 id="plugin-uninstall">

143 plugin uninstall

144</h3>

145 

146从一个作用域删除已安装的 plugin。`remove` 和 `rm` 是 `uninstall` 的别名。

147 

148```bash theme={null}

149claude plugin uninstall <plugin> [options]

150```

151 

152| 标志 | 描述 |

153| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------- |

154| `-s, --scope <scope>` | 从作用域卸载:`user`、`project` 或 `local`。默认为 `user` |

155| `--keep-data` | 保留 plugin 的持久数据目录 `~/.claude/plugins/data/<id>/` |

156| `--prune` | 也删除自动安装的 [dependencies](/docs/zh-CN/plugins/dependencies),没有剩余 plugin 需要 |

157| `-y, --yes` | 跳过 `--prune` 确认提示。当 stdin 或 stdout 不是 TTY 时,`--prune` 需要 |

158| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。不能与 `--prune` 组合。需要 Claude Code v2.1.268 或更高版本 |

159 

160从项目作用域卸载 plugin:

161 

162```bash theme={null}

163claude plugin uninstall formatter@my-marketplace --scope project

164```

165 

166Claude Code 打印 `Successfully uninstalled plugin: formatter (scope: project)`。当 plugin 未在该作用域安装时,命令打印以 `Failed to uninstall plugin "formatter@my-marketplace":` 开头的行,退出 `1`。

167 

168<h3 id="plugin-enable">

169 plugin enable

170</h3>

171 

172启用禁用的 plugin。对于 [从 claude.ai 同步的 plugin](/docs/zh-CN/plugins/loading#synced-plugins),将 `<name>@synced` 作为 plugin 传递。

173 

174```bash theme={null}

175claude plugin enable <plugin> [options]

176```

177 

178| 标志 | 描述 |

179| :-------------------- | :------------------------------------------------------------------------------------------------------------------ |

180| `-s, --scope <scope>` | 启用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

181| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

182 

183不使用 `--scope`,命令按本地、项目、用户的顺序检查您的设置文件,并使用提及 plugin 的第一个作用域。

184 

185如果您传递 plugin 未声明的 `--scope`,命令要么写入覆盖,要么失败:

186 

187* **[优先于](/docs/zh-CN/plugins/loading) 声明作用域的作用域**:Claude Code 在您传递的作用域处写入覆盖。例如,`claude plugin disable formatter --scope local` 仅为您关闭项目启用的 plugin

188* **任何其他作用域**:命令失败,显示 `Plugin "formatter" is installed at project scope, not user. Use --scope project or omit --scope to auto-detect.`

189 

190如果 plugin 已在解析的作用域启用,命令打印 `Plugin "formatter" is already enabled` 并退出 `1`。使用 `--json`,结果具有 `"failureCode": "already_in_goal_state"` 和 `"alreadyInGoalState": true`,因此脚本可以将该情况视为成功。

191 

192当 plugin 声明 [dependencies](/docs/zh-CN/plugins/dependencies) 时,Claude Code 也启用它们。命令在这些情况下失败:

193 

194* **dependency 未安装**:启用失败并为每个缺失的 dependency 打印 `claude plugin install` 命令

195* **dependency 被您组织的 plugin 策略阻止**:启用失败并命名被阻止的 dependency

196* **dependency 在优先级高于目标作用域的作用域处设置为 `false`**:启用失败。在该作用域启用 dependency,或传递 `--scope` 以在那里写入

197 

198在声明它的任何地方重新启用 plugin:

199 

200```bash theme={null}

201claude plugin enable formatter

202```

203 

204Claude Code 打印 `Successfully enabled plugin: formatter (scope: project)`,命名它检测到的作用域。

205 

206<h3 id="plugin-disable">

207 plugin disable

208</h3>

209 

210禁用 plugin 而不卸载它。对于 [从 claude.ai 同步的 plugin](/docs/zh-CN/plugins/loading#synced-plugins),将 `<name>@synced` 作为 plugin 传递。

211 

212```bash theme={null}

213claude plugin disable [plugin] [options]

214```

215 

216| 标志 | 描述 |

217| :-------------------- | :------------------------------------------------------------------------------------------------------------------ |

218| `-a, --all` | 禁用每个启用的 plugin。不能与 plugin 名称或 `--scope` 组合 |

219| `-s, --scope <scope>` | 禁用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

220| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

221 

222不使用 `--scope`,作用域以与 [`plugin enable`](#plugin-enable) 相同的本地、项目、用户顺序自动检测。

223 

224如果您既不传递 plugin 名称也不传递 `--all`,Claude Code 打印 `Please specify a plugin name or use --all to disable all plugins` 并退出 `1`。禁用已禁用的 plugin 打印 `Plugin "formatter" is already disabled` 并退出 `1`,如 [`plugin enable`](#plugin-enable) 对已启用的 plugin 所做的那样。

225 

226命令对仍然需要的 plugin 失败:

227 

228* **另一个启用的 plugin [depends on](/docs/zh-CN/plugins/dependencies) 它**:命令失败并命名要首先禁用的依赖项

229* **您的组织要求它作为同步 plugin**:命令失败并保存任何内容

230 

231禁用一个 plugin:

232 

233```bash theme={null}

234claude plugin disable formatter

235```

236 

237Claude Code 打印 `Successfully disabled plugin: formatter (scope: project)`。

238 

239<h3 id="plugin-update">

240 plugin update

241</h3>

242 

243将 plugin 更新到其市场提供的最新版本。新版本在您的下一个会话中加载,或在您在运行的会话中运行 `/reload-plugins` 后加载。

244 

245```bash theme={null}

246claude plugin update <plugin> [options]

247```

248 

249| 标志 | 描述 |

250| :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |

251| `-s, --scope <scope>` | 更新的作用域:`user`、`project`、`local` 或 `managed`。默认为 plugin 安装的作用域 |

252| `-y, --yes` | 接受来自 [command-source](/docs/zh-CN/plugins/host-marketplace) plugin 的更改的安装命令,无需提示。当 stdin 或 stdout 不是 TTY 时需要,除非您传递 `--accept-command`。需要 Claude Code v2.1.229 或更高版本 |

253| `--accept-command <sha256>` | 接受市场声明的命令,其 `sha256` 之前的 [`--json` 运行](#plugin-json-result) 在 `shownCommand` 中报告,代替 `-y`。不能与 `-y` 组合。需要 Claude Code v2.1.271 或更高版本 |

254| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

255 

256`managed` 是您可以更新但不能安装的唯一作用域。对于管理员安装的 plugins,请参阅 [为您的组织管理 plugins](/docs/zh-CN/plugins/org)。

257 

258更新 plugin:

259 

260```bash theme={null}

261claude plugin update formatter@my-marketplace

262```

263 

264Claude Code 打印 `Checking for updates for plugin "formatter@my-marketplace"…`,然后是结果。当没有更新时,它打印 `formatter is already at the latest version (1.0.0).` 并退出 `0`。

265 

266您可以传递裸 plugin 名称,命令将其与您安装的 plugins 匹配。当来自不同市场的已安装 plugins 共享名称时,命令拒绝更新并列出要运行的限定 `plugin-name@marketplace-name` 命令。按裸名称更新需要 Claude Code v2.1.246 或更高版本。

267 

268<h3 id="plugin-list">

269 plugin list

270</h3>

271 

272列出已安装的 plugins,包括其版本、作用域和状态。

273 

274```bash theme={null}

275claude plugin list [options]

276```

277 

278| 标志 | 描述 |

279| :------------ | :-------------------------------------- |

280| `--json` | 将列表打印为 JSON |

281| `--available` | 也列出您的市场提供但您未安装的 plugins。没有 `--json` 时无效 |

282 

283Claude Code 按每个 plugin 的加载方式对人类可读的输出进行分组:

284 

285* **`Installed plugins:`**:您从市场安装的 plugins

286* **`Session-only plugins (--plugin-dir / --plugin-url):`**:由同一命令中的这些标志加载的 plugins,如 `claude --plugin-dir ./my-plugin plugin list`

287* **`Skills-directory plugins (.claude/skills/*):`**:Claude Code 在 skills 目录中找到的 plugins

288* **`Synced from claude.ai`**:[从您的 claude.ai 账户同步的 plugins](/docs/zh-CN/plugins/loading#synced-plugins)

289 

290当任何组中都没有内容时,Claude Code 打印 ``No plugins installed. Use `claude plugin install` to install a plugin.``

291 

292<h4 id="json-output">

293 JSON 输出

294</h4>

295 

296使用 `--json`,Claude Code 打印一个数组,每个安装一个对象。每个对象都带有下面的字段。`id`、`version`、`scope`、`enabled` 和 `installPath` 始终存在,其他字段仅在适用时出现。

297 

298| 字段 | 类型 | 描述 |

299| :------------- | :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |

300| `id` | string | 安装为 `name@marketplace`,会话内 plugins 为 `name@inline`,skills-directory plugins 为 `name@skills-dir`,从 claude.ai 同步的 plugins 为 `name@synced` |

301| `version` | string | 对于市场安装,[Claude Code 在安装时计算的](/docs/zh-CN/plugins/loading#versions-and-updates) 版本。对于会话内、skills-directory 或同步 plugin,清单的 `version`,或当它不声明任何内容时为 `unknown` |

302| `scope` | string | 安装为 `user`、`project`、`local` 或 `managed`;skills-directory plugins 为 `user` 或 `project`;会话内 plugins 为 `session`;从 claude.ai 同步的 plugins 为 `synced` |

303| `enabled` | boolean | plugin 在您的合并设置中是否启用 |

304| `installPath` | string | plugin 加载的目录 |

305| `installedAt` | string | 安装的 ISO 时间戳。仅市场安装 |

306| `lastUpdated` | string | 最后更新的 ISO 时间戳。仅市场安装 |

307| `projectPath` | string | 安装所属的项目。仅 `project` 和 `local` 作用域 |

308| `mcpServers` | object | plugin 的 MCP 服务器定义,当市场安装的 plugin 有任何时 |

309| `errors` | array of strings | 加载错误,当 plugin 加载失败时 |

310| `notes` | array of strings | plugin 加载并工作时的创作警告 |

311| `errorDetails` | array of objects | 每个 `errors` 条目一个对象,给出其诊断 `type` 和它引用的名称,例如 plugin、市场、服务器或文件。需要 Claude Code v2.1.268 或更高版本 |

312| `noteDetails` | array of objects | 每个 `notes` 条目的相同详细对象。需要 Claude Code v2.1.268 或更高版本 |

313 

314使用 `--json --available`,Claude Code 打印一个对象而不是数组。其 `installed` 字段保存已安装 plugin 对象的数组,其 `available` 字段保存每个未安装市场 plugin 的一个对象,带有下面的字段。

315 

316| 字段 | 类型 | 描述 |

317| :---------------- | :--------------- | :------------------------------------------------------------------ |

318| `pluginId` | string | `name@marketplace` |

319| `name` | string | plugin 在市场中的名称 |

320| `marketplaceName` | string | 提供它的市场 |

321| `source` | string or object | 市场条目的 [source](/docs/zh-CN/plugins/marketplace-reference):相对路径为字符串,否则为对象 |

322| `description` | string | 条目的描述,当它有时 |

323| `version` | string | 条目的版本,当它声明时 |

324| `installCount` | number | 安装计数,当 Claude Code 有 plugin 的计数时 |

325 

326<h3 id="plugin-details">

327 plugin details

328</h3>

329 

330显示 plugin 的组件清单及其预计令牌成本。

331 

332plugin 必须被加载:已安装、在 skills 目录中找到,或在同一命令中使用 `--plugin-dir` 或 `--plugin-url` 传递。`<name>` 是 plugin `name` 或 `name@marketplace`。

333 

334```bash theme={null}

335claude plugin details <name>

336```

337 

338命令除了 `--help` 外不接受任何标志。

339 

340显示已安装 plugin 的贡献:

341 

342```bash theme={null}

343claude plugin details formatter

344```

345 

346Claude Code 打印 plugin 的名称、版本、描述和源,然后是这些部分:

347 

348* **`Component inventory`**:plugin 的 skills、agents、hooks、MCP 服务器和 LSP 服务器

349* **`Projected token cost`**:plugin 添加到每个会话的始终开启令牌

350* **`Per-component (rounded)`**:每个 skill、agent 和命令的始终开启和按调用估计。当 plugin 没有时省略

351 

352对于两个成本数字的含义,请参阅 [测量 plugin 成本和使用](/docs/zh-CN/plugins/measure)。

353 

354对于未加载的 plugin,Claude Code 打印 ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` 并退出 `1`。

355 

356<h3 id="plugin-prune">

357 plugin prune

358</h3>

359 

360删除自动安装的 [dependencies](/docs/zh-CN/plugins/dependencies),没有已安装的 plugin 需要。命令永远不会删除您自己安装的 plugin。`autoremove` 是 `prune` 的别名。

361 

362```bash theme={null}

363claude plugin prune [options]

364```

365 

366| 标志 | 描述 |

367| :-------------------- | :-------------------------------------------- |

368| `-s, --scope <scope>` | 在作用域处修剪:`user`、`project` 或 `local`。默认为 `user` |

369| `--dry-run` | 列出将被删除的内容而不删除它 |

370| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时需要 |

371 

372预览修剪将删除的内容:

373 

374```bash theme={null}

375claude plugin prune --dry-run

376```

377 

378Claude Code 列出孤立的 dependencies 并以 `(dry run — nothing removed)` 结尾。当没有要删除的内容时,它打印以 `Nothing to prune` 开头的行。

379 

380不使用 `--dry-run`,命令仅在您在提示处确认或传递 `-y` 后删除孤立的 dependencies。

381 

382无论您在提示处的答案如何,退出代码都是 `0`。

383 

384`prune` 的作用取决于是否附加了终端以及您是否传递了 `-y`:

385 

386| 终端和标志 | 发生的情况 |

387| :-------------------------- | :-------------------------------------------------------------------- |

388| 交互式终端,无 `-y` | 列出孤立的 dependencies 并询问 `Remove? [y/N]` |

389| 任何终端,`-y` | 删除它们并打印 `Removed N auto-installed plugins: <names>` |

390| 非 TTY stdin 或 stdout,无 `-y` | 打印列表和 ``Not a TTY — run `claude plugin prune -y` to remove.``,不删除任何内容 |

391 

392<h3 id="plugin-eval">

393 plugin eval

394</h3>

395 

396运行 plugin 的 [eval cases](/docs/zh-CN/plugin-evals) 并报告评分结果。需要 Claude Code v2.1.269 或更高版本。

397 

398每个案例是一个提示加评分器。Claude Code 在仅加载目标 plugin 的隔离会话中多次运行它,默认情况下也不使用 plugin 运行,以便报告显示差异。

399 

400有关案例格式、评分器、结果和 CI 使用,请参阅 [使用 evals 测试 plugins](/docs/zh-CN/plugin-evals)。

401 

402```bash theme={null}

403claude plugin eval [target] [options]

404```

405 

406可选的 `target` 默认为当前目录,采用以下任何形式:

407 

408* plugin 目录

409* 单个 `prompt.md` 或 `case.yaml` 文件

410* 已安装的 plugin,如 `name` 或 `name@marketplace`

411* `name@skills-dir`

412 

413将目标放在 `--tag`、`--allow-tools` 和 `--json` 之前。这些选项中的每一个都将其后的单词作为其值,因此在其中一个之后写入的目标被读作标签、工具名称或 JSON 输出路径,而不是目标。

414 

415此表列出大多数运行使用的选项。运行 `claude plugin eval --help` 以获取完整集合,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。

416 

417| 选项 | 描述 | 默认 |

418| :------------------------- | :---------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------- |

419| `--runs <n>` | 每个 [arm](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) 中每个案例的运行 | 每个案例的 `runs`,否则 3 |

420| `-j, --concurrency <n>` | 一次运行的代理会话,1 到 8。它们共享您的速率限制 | `1` |

421| `--model <model>` | 被测试代理的模型 | 每个案例的 `model`,否则 `ANTHROPIC_MODEL`(如果设置),否则 Claude Code 的默认值 |

422| `--judge-model <model>` | `llm` 和 `baseline` 评分器的模型 | 一个小的快速模型 |

423| `--ablation <mode>` | `none` 或 `with-without`。请参阅 [与无 plugin 基线比较](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) | 当 plugin 解析时为 `with-without`,否则为 `none` |

424| `--threshold <0..1>` | 如果任何案例评分低于此,退出 1 | `1.0` |

425| `--max-cost-usd <usd>` | 一旦支出达到此值,在下一次运行前停止,退出 2,并报告部分结果 | 无限制 |

426| `--allow-tools <tools...>` | 授予超出只读集合的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅 [授予工具](/docs/zh-CN/plugin-evals#grant-tools) | |

427| `--scaffold` | 运行每个案例的 [`scaffold_script`](/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |

428| `--trust-plugin` | 跳过首次运行信任提示,用于 CI。请参阅 [运行可以访问的内容](/docs/zh-CN/plugin-evals#security) | 关闭 |

429| `--mocks <mode>` | `record` 或 `off`。请参阅 [Mock MCP 服务器](/docs/zh-CN/plugin-evals#mock-mcp-servers) | `record` |

430| `--eval-dir <dir>` | plugin 下方保存案例的目录 | 清单的 `experimental.evals`,否则 `evals` |

431| `--json [path]` | 将 [结果文档](/docs/zh-CN/plugin-evals#json-result) 打印到 stdout,或将其写入 `.json` 路径 | |

432| `--no-publish` | 保持 HTML 报告本地 | |

433 

434退出代码报告运行如何结束。要在管道中对其进行操作,请参阅 [在 CI 中运行 evals](/docs/zh-CN/plugin-evals#run-evals-in-ci)。

435 

436| 退出代码 | 含义 |

437| :---- | :------------------------- |

438| `0` | 每个案例都满足阈值 |

439| `1` | 失败的案例、加载错误或不受信任的 plugin 目录 |

440| `2` | 部分运行 |

441| `130` | 中断 |

442| `143` | 终止 |

443 

444<h3 id="plugin-eval-init">

445 plugin eval init

446</h3>

447 

448为当前目录中的 plugin 创建 eval 套件。需要 Claude Code v2.1.269 或更高版本。请参阅 [创建您的第一个 eval 套件](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)。

449 

450```bash theme={null}

451claude plugin eval init [name] [options]

452```

453 

454在终端中,命令打开交互式 Claude Code 会话以进行创作访谈。在访谈中,Claude 执行以下操作:

455 

4561. 读取 plugin

4572. 询问您它应该做什么

4583. 提议案例和评分器

4594. 写入案例文件

4605. 运行案例并与您一起查看评分,以检查评分器是否按您的方式评分

461 

462使用 `--bare` 或没有终端,命令改为写入空白单案例模板。当 Claude 从 Claude Code 会话内运行命令时,命令打印该会话要遵循的访谈说明,而不是写入模板。

463 

464可选的 `name` 是案例名称。它对于 `--bare` 或没有终端是必需的,因为命令为该案例写入空白模板。访谈不需要。

465 

466命令接受这些选项:

467 

468| 选项 | 描述 | 默认 |

469| :------------------ | :---------------------------------------------------------- | :---------------------------------- |

470| `--bare` | 为 `<name>` 写入空白 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |

471| `-i, --interactive` | 需要访谈。没有终端时失败,而不是写入模板 | |

472| `--eval-dir <dir>` | 当前目录下方写入案例的目录 | 清单的 `experimental.evals`,否则 `evals` |

473 

474<h3 id="plugin-tag">

475 plugin tag

476</h3>

477 

478为 plugin 发布创建名为 `<name>--v<version>` 的带注释 git 标签。在标记之前,命令检查 plugin 的 `plugin.json` 和任何列出它的市场条目是否同意版本。

479 

480有关何时标记发布,请参阅 [发布 plugin](/docs/zh-CN/plugins/publish)。

481 

482```bash theme={null}

483claude plugin tag [path] [options]

484```

485 

486`[path]` 是 plugin 目录,默认为当前目录。命令通过从该目录向上走到列出 plugin 的 `.claude-plugin/marketplace.json` 来查找市场条目。

487 

488| 标志 | 描述 |

489| :-------------------- | :-------------------------------------- |

490| `--push` | 创建后将标签推送到 `--remote` |

491| `--dry-run` | 打印将被标记的内容而不创建标签 |

492| `-f, --force` | 跳过脏工作树和标签已存在检查 |

493| `-m, --message <msg>` | 标签注释消息。`%s` 代表版本。默认为 `<name> <version>` |

494| `--remote <name>` | 使用 `--push` 推送到的远程。默认为 `origin` |

495 

496预览市场检出中 plugin 的标签:

497 

498```bash theme={null}

499claude plugin tag plugins/formatter --dry-run

500```

501 

502Claude Code 打印计划:

503 

504* plugin 名称

505* 版本和它来自哪个文件

506* 匹配的市场条目,当有时

507* 标签名称

508* 它将运行的 `git tag` 和 `git push` 命令

509 

510不使用 `--dry-run`,Claude Code 打印 `Created tag formatter--v1.0.0` 和 `Pushed to origin` 或您自己运行的推送命令。如果推送失败,标签仍在本地创建,命令以错误退出。

511 

512当它无法安全标记时,命令退出 `1` 并打印原因。常见原因是:

513 

514* `plugin.json` 或市场条目中没有 `version`

515* 标签已存在

516* 工作树是脏的

517 

518<h3 id="plugin-validate">

519 plugin validate

520</h3>

521 

522验证 plugin 清单、市场清单或目录中的 skills、agents 和命令,并以 CI 作业可以操作的代码退出。对于创建、测试和编辑工作流,请参阅 [创建 plugin](/docs/zh-CN/plugins/create)。对于验证器在每个清单中检查的内容,请参阅 [plugin 清单参考](/docs/zh-CN/plugins/manifest-reference) 和 [市场参考](/docs/zh-CN/plugins/marketplace-reference)。

523 

524```bash theme={null}

525claude plugin validate <path> [options]

526```

527 

528| 标志 | 描述 |

529| :--------- | :---------------------------------------------------------- |

530| `--strict` | 将警告视为错误,因此运行时容忍的未识别字段和缺失元数据失败。需要 Claude Code v2.1.145 或更高版本 |

531| `--json` | 将验证报告输出为一个 JSON 对象,具有相同的退出代码。需要 Claude Code v2.1.259 或更高版本 |

532 

533在提交前验证 plugin:

534 

535```bash theme={null}

536claude plugin validate ./my-plugin --strict

537```

538 

539<h4 id="validate-a-directory">

540 验证目录

541</h4>

542 

543`<path>` 是清单文件或目录。给定目录,Claude Code 通过它找到的内容选择要验证的内容:

544 

545* `.claude-plugin/marketplace.json`,当它存在时

546* 否则 `.claude-plugin/plugin.json`

547* 否则组件文件,由目录的名称选择。在没有清单的情况下验证组件文件需要 Claude Code v2.1.233 或更高版本:

548 * 名为 `skills`、`agents` 或 `commands` 的目录:其中的文件

549 * 名为 `.claude` 的目录:其中的 `skills`、`agents` 和 `commands` 目录

550 * 任何其他目录:其 `.claude` 下的这三个目录

551 

552Claude Code 不跟随您命名的目录内的符号链接。它的作用取决于链接的位置:

553 

554* **plugin 或 `.claude` 根下的链接 `skills`、`agents` 或 `commands` 目录**:Claude Code 警告其中的任何内容都未被读取。

555* **`skills`、`agents` 或 `commands` 目录内的链接条目**:Claude Code 跳过它并警告,每个目录,它跳过了多少条目,会话会加载。

556* **您命名的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父 `.claude` 目录是**:Claude Code 报告错误并检查其中的任何内容。改为命名真实目录。

557 

558验证运行不读取几个文件:

559 

560* **plugin 根处的 `SKILL.md`**:当您针对 plugin 目录运行 `claude plugin validate` 时,Claude Code 不检查 plugin 根处的 `SKILL.md`

561* **plugin 根处的 `CLAUDE.md`**:在 plugin 运行中,Claude Code 也警告 plugin 根处的 `CLAUDE.md`

562* **市场运行中的 Plugin 文件**:从市场目录,Claude Code 不打开 plugins 的 skill、agent、command 或 hook 文件。要在这些文件中查找错误,验证每个 plugin 目录

563 

564<h4 id="output-and-exit-codes">

565 输出和退出代码

566</h4>

567 

568Claude Code 打印它验证的文件、任何错误和警告及其路径,以及判决行。退出代码遵循判决:

569 

570| 退出代码 | 判决行 | 含义 |

571| :--- | :----------------------------------------------------------------------------- | :----------------------- |

572| `0` | `Validation passed` 或 `Validation passed with warnings` | 清单加载。使用 `--strict`,也没有警告 |

573| `1` | `Validation failed` 或 `Validation failed (--strict treats warnings as errors)` | 错误,或 `--strict` 下的警告 |

574| `2` | `Unexpected error during validation: <reason>` | 验证器本身失败,例如在不可读的路径上 |

575 

576使用 `--json`,Claude Code 将报告作为一个 JSON 对象写入 stdout,具有这些顶级字段:

577 

578* `success`:退出代码给出的相同判决

579* `strict`:运行是否将警告视为错误

580* `target`:Claude Code 验证的解析路径

581* `manifest`:清单自己的结果,或没有清单的运行为 `null`

582* `contents`:每个文件的结果,命名其 `file` 并携带 `errors`、`warnings` 和 `notes` 数组

583 

584在退出 `2` 时,命令不向 stdout 写入任何内容。错误消息转到 stderr。

585 

586<h2 id="claude-plugin-marketplace-commands">

587 claude plugin marketplace 命令

588</h2>

589 

590从你的 shell 运行 `claude plugin marketplace <subcommand>` 来添加、列出、刷新和移除你安装插件的市场。

591 

592* **退出代码**:这些子命令遵循插件命令的[退出代码约定](#claude-plugin-commands)

593* **作用域**:它们的 `--scope` 标志没有 `-s` 短形式

594 

595关于市场是什么以及 Claude Code 如何缓存它,请参阅[插件加载参考](/docs/zh-CN/plugins/loading)。

596 

597<h3 id="plugin-marketplace-add">

598 plugin marketplace add

599</h3>

600 

601从 GitHub 仓库、git URL、托管的 `marketplace.json` 或本地路径添加市场,并在设置文件中声明它。

602 

603添加后,Claude Code 会安装你已安装的插件缺失的任何[依赖项](/docs/zh-CN/plugins/dependencies)。

604 

605```bash theme={null}

606claude plugin marketplace add <source> [options]

607```

608 

609| 标志 | 描述 |

610| :-------------------- | :---------------------------------------------------------------------------------------------------------- |

611| `--scope <scope>` | 声明市场的设置文件:`user`、`project` 或 `local`。默认为 `user` |

612| `--sparse <paths...>` | 将 git 检出限制在这些目录,用于 monorepos。仅限 `github` 和 `git` 源 |

613| `--claudeai` | 将参数读取为[托管在 claude.ai 上的市场](/docs/zh-CN/plugins/install#add-from-claude-ai)的名称,而不是源。需要 Claude Code v2.1.273 或更高版本 |

614 

615`<source>` 采用下表中的任何形式,其形式决定了源类型以及 Claude Code 如何获取市场。关于生成的源对象,请参阅[市场参考](/docs/zh-CN/plugins/marketplace-reference)。

616 

617| 你输入的 | 源类型 | Claude Code 如何获取它 |

618| :----------------------------------------------------------------------- | :---------- | :--------------------------------------------------- |

619| `owner/repo`、`owner/repo#ref` 或 `owner/repo@ref` | `github` | 克隆 GitHub 仓库,给定时固定到 `ref`。所有者和仓库必须遵循 GitHub 命名规则 |

620| `user@host:path[.git][#ref]` | `git` | 通过 SSH 克隆 |

621| `https://example.com/repo.git[#ref]` 或包含 `/_git/` 的 URL | `git` | 通过 HTTPS 克隆,包括 Azure DevOps URL |

622| `https://github.com/owner/repo` 或 `https://gitlab.com/namespace/project` | `git` | 在追加 `.git` 后通过 HTTPS 克隆 |

623| 任何其他 `http://` 或 `https://` URL,包括没有 `.git` 的自托管 git 主机 | `url` | 将 URL 作为 `marketplace.json` 获取。要改为克隆那里的仓库,请追加 `.git` |

624| `./path`、`../path`、`/path` 或 `~/path` 到目录 | `directory` | 就地读取目录。在 Windows 上,`.\`、`..\` 和 `C:\` 形式也可以工作 |

625| 相同的路径形式,到 `.json` 文件 | `file` | 就地读取文件 |

626 

627对于克隆 URL 不带 `.git` 后缀的主机(如 AWS CodeCommit),请改为在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 中将市场添加为 git 条目。Claude Code 克隆 git 条目,无论其 URL 是否以 `.git` 结尾。

628 

629Claude Code 也克隆具有嵌套子组的 `gitlab.com` URL,例如 `https://gitlab.com/group/subgroup/project`。

630 

631添加市场并与项目共享:

632 

633```bash theme={null}

634claude plugin marketplace add your-org/your-marketplace --scope project

635```

636 

637Claude Code 打印 `Successfully added marketplace: your-marketplace (declared in project settings)`,使用市场自己清单中的 `name`。重复添加或无效源会改为打印以下结果之一:

638 

639* **市场已在磁盘上**:输出为 `Marketplace 'your-marketplace' already on disk — declared in project settings`,退出代码为 `0`

640* **无法识别的源**:输出为 `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`,退出代码为 `1`

641* **裸主机,如 `gitlab.example.com/team/plugins`**:添加失败,作为无效的 `owner/repo` 简写,消息告诉你添加 `https://` 或使用本地路径

642 

643通过 `claude plugin marketplace list` 的 `From claude.ai:` 部分中打印的名称添加[托管在 claude.ai 上的市场](/docs/zh-CN/plugins/install#add-from-claude-ai):

644 

645```bash theme={null}

646claude plugin marketplace add --claudeai claudeai-organization-library

647```

648 

649使用 `--claudeai` 时,命令拒绝 `--scope` 和 `--sparse`。市场为你的账户托管,未在设置文件中声明,因此你无法通过项目的 `.claude/settings.json` 共享它。

650 

651<h3 id="plugin-marketplace-list">

652 plugin marketplace list

653</h3>

654 

655列出你添加的每个市场及其源。

656 

657```bash theme={null}

658claude plugin marketplace list [options]

659```

660 

661| 标志 | 描述 |

662| :------- | :---------- |

663| `--json` | 将列表打印为 JSON |

664 

665Claude Code 打印 `Configured marketplaces:` 和每个市场一行 `Source:`,或 `No marketplaces configured`。

666 

667使用 `--json` 时,Claude Code 打印一个数组,每个市场一个对象,包含下面的字段。每个字段都是字符串。

668 

669| 字段 | 描述 |

670| :---------------- | :--------------------------------------------------- |

671| `name` | 市场的名称 |

672| `source` | `github`、`git`、`url`、`directory`、`file` 或 `claudeai` |

673| `repo` | `owner/repo`。仅限 `github` 源 |

674| `url` | 克隆或获取 URL。仅限 `git` 和 `url` 源 |

675| `path` | 本地路径。仅限 `directory` 和 `file` 源 |

676| `ref` | 固定的分支或标签。`github` 和 `git` 源,仅在固定时 |

677| `installLocation` | Claude Code 缓存市场的位置 |

678 

679添加的 [claude.ai 市场](/docs/zh-CN/plugins/install#add-from-claude-ai)没有本地克隆,因此其条目在 `installLocation` 的位置携带其 claude.ai 标识符 `marketplaceId` 和 `organizationUuid`。它也在记录时携带 `scope` 和 `status`。

680 

681如果你的终端会话[从你的 claude.ai 账户同步插件](/docs/zh-CN/plugins/loading#synced-plugins),文本列表以 `From claude.ai:` 部分结尾。该部分命名 claude.ai 为你的账户列出的市场,你还没有添加的,包括基于 git 的和托管的。它需要 Claude Code v2.1.273 或更高版本。

682 

683要从该部分添加市场,请参阅[从 claude.ai 添加市场](/docs/zh-CN/plugins/install#add-from-claude-ai)。

684 

685`--json` 输出仅覆盖已配置的市场,并排除该部分。

686 

687<h3 id="plugin-marketplace-remove">

688 plugin marketplace remove

689</h3>

690 

691从你的设置中移除市场的声明。`rm` 是 `remove` 的别名。

692 

693<Warning>

694 当你从最后一个声明市场的作用域中移除市场时,Claude Code 也会删除其缓存并卸载你从中安装的每个插件。不使用 `--scope` 时,命令从每个作用域中移除声明。要在不丢失其插件的情况下刷新市场,请改为运行 `plugin marketplace update`。

695</Warning>

696 

697```bash theme={null}

698claude plugin marketplace remove <name> [options]

699```

700 

701`<name>` 是 `plugin marketplace list` 显示的市场名称,而不是你传递给 `add` 的源。

702 

703| 标志 | 描述 |

704| :---------------- | :--------------------------------------------------------------------- |

705| `--scope <scope>` | 从一个设置作用域中移除声明:`user`、`project` 或 `local`。不使用它时,Claude Code 从每个作用域中移除声明 |

706 

707从每个作用域中移除市场:

708 

709```bash theme={null}

710claude plugin marketplace remove your-marketplace

711```

712 

713Claude Code 打印 `Successfully removed marketplace: your-marketplace`,当你限定作用域时添加 `(from project settings)`。如果你限定作用域到不声明市场的设置文件,命令失败,显示 `Marketplace 'your-marketplace' is not declared in project settings. Omit --scope to remove it from all scopes.`

714 

715<h3 id="plugin-marketplace-update">

716 plugin marketplace update

717</h3>

718 

719从其源刷新一个市场或每个市场,以获取新插件和版本。使用分支或标签 `ref` 添加的市场更新到该 ref 的最新提交,而不是仓库的默认分支。

720 

721```bash theme={null}

722claude plugin marketplace update [name]

723```

724 

725该命令除了 `--help` 外不接受任何标志。

726 

727刷新一个市场:

728 

729```bash theme={null}

730claude plugin marketplace update your-marketplace

731```

732 

733Claude Code 打印 `Successfully updated marketplace: your-marketplace`。当你省略名称时,它打印计数,如 `Successfully updated 2 marketplaces`。没有添加市场时,它打印 `No marketplaces configured` 并退出 `0`。

734 

735<h2 id="plugin-in-a-session">

736 会话中的 /plugin

737</h2>

738 

739在交互式会话中,`/plugin` 打开 plugin 面板。每个子命令在选项卡上打开面板、在那里运行操作或内联打印结果。`/plugins` 和 `/marketplace` 是 `/plugin` 的别名。

740 

741您只能在交互式终端会话中运行这些命令。在非交互式运行(例如 `claude -p`)中,Claude Code 回复 `/plugin` 在此环境中不可用。

742 

743有关哪些表面有 `/plugin`、如何在没有它的情况下安装以及每个面板选项卡显示的内容,请参阅 [安装和管理 plugins](/docs/zh-CN/plugins/install)。

744 

745`<plugin>` 是 plugin `name` 或 `name@marketplace`。

746 

747下表列出每个会话形式。shell 子命令 `init`、`update`、`details`、`prune`、`eval` 和 `eval init` 没有会话形式。

748 

749| 命令 | 别名 | 它做什么 |

750| :-------------------------------------------------- | :------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

751| `/plugin` | | 在 **Discover** 选项卡上打开面板。`/plugin` 后的任何无法识别的第一个单词也这样做 |

752| `/plugin help` | `/plugin --help`、`/plugin -h` | 显示 `/plugin` 子命令的使用列表 |

753| `/plugin list [--enabled\|--disabled]` | `ls` | 内联打印您的市场安装 plugins,带有版本、作用域和状态。过滤标志仅显示该状态。启用状态尚未应用的 plugin 标记为 `— run /reload-plugins to apply`。需要 Claude Code v2.1.163 或更高版本 |

754| `/plugin install` | `i` | 打开 **Discover** 选项卡 |

755| `/plugin install <plugin>` | `i` | 在 **Discover** 选项卡中打开 plugin 的详细信息。使用 `name@marketplace`,在该市场的列表中打开它们 |

756| `/plugin install <plugin> --marketplace <source>` | `i` | 当您尚未添加时添加 `<source>` 处的市场,要求您首先确认,然后打开 plugin 的详细信息。请参阅 [在一个命令中添加市场和安装](/docs/zh-CN/plugins/install#add-a-marketplace-and-install-in-one-command)。需要 Claude Code v2.1.275 或更高版本 |

757| `/plugin manage` | | 打开 **Installed** 选项卡 |

758| `/plugin stats` | | 打开 **Stats** 选项卡,在 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills) 可用的会话中。其他任何地方它在 **Discover** 选项卡上打开面板 |

759| `/plugin enable <plugin>` | | 在 plugin 处打开 **Installed** 选项卡并启用它 |

760| `/plugin disable <plugin>` | | 在 plugin 处打开 **Installed** 选项卡并禁用它 |

761| `/plugin uninstall <plugin>` | | 在 plugin 处打开 **Installed** 选项卡并卸载它 |

762| `/plugin configure <plugin>` | `config` | 打开 plugin 的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference) 对话框,或报告 plugin 不声明任何。需要 Claude Code v2.1.147 或更高版本 |

763| `/plugin validate <path>` | | 打印与 `claude plugin validate` 相同的报告,内联 |

764| `/plugin tag [path] [--push] [--dry-run] [--force]` | | 创建发布标签,如 `claude plugin tag` 所做的那样。接受 `--push`、`--dry-run` 和 `--force` 或 `-f`;使用任何其他标志或额外参数,Claude Code 改为打印使用 |

765| `/plugin marketplace` | `market` | 不做任何可见的事情。传递 `add`、`list`、`update` 或 `remove` |

766| `/plugin marketplace add [source]` | `market add` | 使用源,添加它并报告结果。不使用源,打开 **Add marketplace** 输入 |

767| `/plugin marketplace list` | `market list` | 内联打印您的市场名称 |

768| `/plugin marketplace update [name]` | `market update` | 打开 **Marketplaces** 选项卡。使用名称,在那里刷新该市场 |

769| `/plugin marketplace remove [name]` | `market remove`、`market rm`、`marketplace rm` | 打开 **Marketplaces** 选项卡。使用名称,在那里删除该市场 |

770 

771如果您在 `/plugin enable`、`disable`、`uninstall` 或 `configure` 中命名当前项目中未安装的 plugin,Claude Code 打印 `Plugin "<plugin>" is not installed in this project` 而不是操作。

772 

773<h2 id="reload-plugins">

774 /reload-plugins

775</h2>

776 

777应用待处理的插件更改到正在运行的会话中,无需重新启动。待处理的更改是指自会话启动以来在磁盘上安装、更新、启用、禁用或编辑的插件。

778 

779当你关闭 `/plugin` 面板时,如果你在其中进行了待处理的更改,Claude Code 会为你运行 `/reload-plugins`。在面板外发生的插件更改(例如你在另一个终端中运行的 `claude plugin` 命令)之后,请自己运行它。

780 

781```text theme={null}

782/reload-plugins [--force]

783```

784 

785| 标志 | 描述 |

786| :-------- | :------------------------------------------ |

787| `--force` | 应用重新加载,即使它会使 prompt 缓存失效。不带破折号的 `force` 也可以 |

788 

789<h3 id="reload-summary">

790 重新加载摘要

791</h3>

792 

793Claude Code 重新加载每个活跃的插件并打印一行摘要,`Reloaded: N plugins · N skills · N agents · N hooks · N plugin MCP servers · N plugin LSP servers`,在没有交互式终端的会话中省略插件 MCP 服务器计数。当任何插件失败时,摘要会添加 `N errors during load. Run /plugin for details.`

794 

795技能计数涵盖插件提供的每个技能,包括其 `commands/` 条目和其 SKILL.md 技能。代理计数是会话中加载的代理数量,包括不来自插件的代理。

796 

797当重新加载的插件的[依赖项](/docs/zh-CN/plugins/dependencies)缺失时,Claude Code 会安装它们,再次重新加载,并在摘要中附加 `(+ N dependencies: <names>) resolved`。

798 

799<h3 id="reloads-that-change-mcp-tools">

800 更改 MCP 工具的重新加载

801</h3>

802 

803当重新加载会添加或删除插件 MCP 服务器或 `LSP` 工具时,该更改会使[prompt 缓存](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)失效,Claude Code 不会应用重新加载。它会打印一行,例如 `This reload changes MCP tools (<server>) — your next message will re-read the whole conversation instead of using the cache. Run /reload-plugins --force to apply.` 传递 `--force` 以应用它。

804 

805<h3 id="sessions-without-an-interactive-terminal">

806 没有交互式终端的会话

807</h3>

808 

809`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和带有 `-p` 的[非交互模式](/docs/zh-CN/headless)。需要 Claude Code v2.1.260 或更高版本。

810 

811在这些会话中,该命令仅在你自己将其键入会话时运行,例如在 `-p` 提示或桌面应用的提示框中。当它以其他方式到达时,例如通过[远程控制](/docs/zh-CN/remote-control)或从 Slack 中继的消息,该命令回复 `/reload-plugins isn't available over a remote connection in this session.` 并且不重新加载任何内容。

812 

813这些会话中的重新加载不连接或断开插件 MCP 服务器。这些更改在你的下一个会话中生效。

814 

815<h2 id="flags-that-load-a-plugin-for-one-session">

816 为一个会话加载 plugin 的标志

817</h2>

818 

819两个 `claude` 标志仅为一个会话加载 plugin,而不安装它。两者都是可重复的。

820 

821Plugin 作者使用它们在发布前测试 plugin。对于加载-编辑-重新加载工作流,请参阅 [在没有市场的情况下开发](/docs/zh-CN/plugins/create#develop-without-a-marketplace)。

822 

823| 标志 | 描述 | 示例 |

824| :-------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- |

825| `--plugin-dir <path>` | 从目录或其 `.zip` 存档加载 plugin。plugins 的文件夹加载每个包含 `.claude-plugin/plugin.json` 的子文件夹。每个标志接受一个路径 | `claude --plugin-dir ./my-plugin --plugin-dir ./other.zip` |

826| `--plugin-url <url>` | 从 URL 获取 plugin `.zip` 存档。重复标志,或在一个引用值中传递多个 URL 空格分隔 | `claude --plugin-url "https://example.com/a.zip https://example.com/b.zip"` |

827 

828任一标志加载的 plugin 是会话内 plugin。`claude plugin list` 将其显示为 `<name>@inline`,作用域为 `session`,但仅当相同的标志在子命令前时。例如,运行 `claude --plugin-dir ./my-plugin plugin list`。

829 

830当会话内 plugin 与已安装的 plugin 共享名称时,Claude Code 为该会话加载会话内副本并跳过已安装的副本。如果您使用 `claude plugin disable <name>@inline` 禁用了会话内副本,或托管设置锁定该 plugin 名称,已安装的副本改为加载。有关优先级,请参阅 [Plugin 加载参考](/docs/zh-CN/plugins/loading)。

831 

832管理员可以拒绝两个标志和 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables) 变量中命名的文件夹,使用托管 [`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags) 设置。Claude Code 然后打印标志被您组织的托管设置禁用,并退出 `1` 而不启动。

833 

834从 Agent SDK,[`plugins`](/docs/zh-CN/agent-sdk/plugins) 选项等同于 `--plugin-dir`。

835 

836<h2 id="next-steps">

837 后续步骤

838</h2>

839 

840* [安装和管理 plugins](/docs/zh-CN/plugins/install):与步骤相同的操作,带有您在每个步骤看到的内容

841* [Plugin 加载参考](/docs/zh-CN/plugins/loading):每个命令在磁盘上更改的内容以及哪个作用域生效

842* [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting):安装、市场、加载和验证错误消息及其修复

843* [Plugin 清单参考](/docs/zh-CN/plugins/manifest-reference):`claude plugin validate` 检查的字段

plugins/code-intelligence.md +156 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 代码智能插件

6 

7> 安装语言服务器插件,使 Claude 在编辑后能看到类型错误并通过符号导航代码,并回答 LSP 插件推荐对话框。

8 

9代码智能插件为 Claude 提供编辑器具有的实时诊断和转到定义功能,因此 Claude 可以在运行构建之前捕获其自身编辑引入的类型错误和缺失的导入,并通过符号而不是文本搜索来查找定义和引用。

10 

11每个插件通过语言服务器协议 (LSP) 将 Claude Code 连接到一种语言的语言服务器。您从 Anthropic 的官方市场安装插件,并在您的机器上安装语言服务器二进制文件。

12 

13<Note>

14 代码智能插件在终端会话中工作。在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中,Claude Code 不启动插件语言服务器,因此 Claude 在那里无法获得诊断或代码导航。要编写自己的语言服务器插件,或连接没有插件的语言服务器,请参阅 [插件组件中的 LSP 服务器](/docs/zh-CN/plugins/components#lsp-servers)。

15</Note>

16 

17要开始使用,请在 [安装代码智能插件](#install-a-code-intelligence-plugin) 下的表格中找到您的语言。该表格中的插件来自 Anthropic 的 [官方插件市场](/docs/zh-CN/plugins/anthropic-marketplaces)。

18 

19如果您已经看到 **LSP 插件推荐** 对话框,请参阅 [接受或关闭推荐对话框](#accept-or-dismiss-the-recommendation-dialog) 了解每个选择的作用。

20 

21<h2 id="install-a-code-intelligence-plugin">

22 安装代码智能插件

23</h2>

24 

25代码智能插件告诉 Claude Code 哪个命令启动语言服务器以及它处理哪些文件扩展名。它不包括语言服务器。首先安装语言服务器二进制文件,然后安装插件,最后确认服务器启动。

26 

27<Steps>

28 <Step title="安装语言服务器二进制文件">

29 在下表中找到您的语言并安装其行中的二进制文件。如果您的语言未列出,请参阅[添加没有官方插件的语言](#add-a-language-without-an-official-plugin)。

30 

31 | 语言 | 插件 | 二进制文件 |

32 | :---------------------- | :--------------------------------------------------------------------------------------------------------------- | :--------------------------- |

33 | C/C++ | [`clangd-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/clangd-lsp) | `clangd` |

34 | C# | [`csharp-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/csharp-lsp) | `csharp-ls` |

35 | Go | [`gopls-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/gopls-lsp) | `gopls` |

36 | Java | [`jdtls-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/jdtls-lsp) | `jdtls` |

37 | Kotlin | [`kotlin-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/kotlin-lsp) | `kotlin-lsp` |

38 | Liquid | [`liquid-lsp`](https://github.com/Shopify/liquid-skills/tree/main/plugins/liquid-lsp) | `shopify`,来自 Shopify CLI |

39 | Lua | [`lua-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/lua-lsp) | `lua-language-server` |

40 | PHP | [`php-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/php-lsp) | `intelephense` |

41 | Python | [`pyright-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/pyright-lsp) | `pyright-langserver` |

42 | Ruby | [`ruby-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/ruby-lsp) | `ruby-lsp` |

43 | Rust | [`rust-analyzer-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/rust-analyzer-lsp) | `rust-analyzer` |

44 | Swift | [`swift-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/swift-lsp) | `sourcekit-lsp` |

45 | TypeScript 和 JavaScript | [`typescript-lsp`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/typescript-lsp) | `typescript-language-server` |

46 

47 Anthropic 维护表格中的每个插件,除了 `liquid-lsp`,由 Shopify 维护,官方市场列出。

48 

49 要找到安装二进制文件的命令,请按照表格中的插件链接进入其 README。对于 TypeScript,该命令是 `npm install -g typescript-language-server typescript`。

50 

51 安装二进制文件后,确认它在您启动 `claude` 的 shell 的 `PATH` 上,例如使用 `which typescript-language-server`,或在 PowerShell 中使用 `Get-Command typescript-language-server`。

52 </Step>

53 

54 <Step title="安装插件">

55 要安装在步骤 1 表格中为您的语言列出的插件,请在 Claude Code 会话中运行 `/plugin install`,将 `typescript-lsp` 替换为该插件的名称:

56 

57 ```

58 /plugin install typescript-lsp@claude-plugins-official

59 ```

60 

61 确认消息会说明插件现在是否处于活动状态或需要 `/reload-plugins`。如果安装失败并显示 `Marketplace "claude-plugins-official" not found`,请参阅[该错误的故障排除条目](/docs/zh-CN/plugins/troubleshooting#marketplace-claude-plugins-official-not-found)。要控制插件的安装位置,或从 shell 而不是在 Claude Code 内运行安装,请参阅[安装插件](/docs/zh-CN/plugins/install)。

62 </Step>

63 

64 <Step title="确认服务器启动">

65 语言服务器在 Claude 首次编辑具有插件扩展名之一的文件时启动。要查看其工作情况,请要求 Claude 在该语言的文件中引入类型错误,然后修复它。然后检查对话中的诊断行:

66 

67 * **诊断行出现**:编辑下方的 `Found N new diagnostic issues in M files (ctrl+o to expand)` 表示服务器已启动。

68 * **没有诊断行出现**:运行 `/plugin` 并打开**错误**选项卡。读取 `Executable not found in $PATH: "<binary>"` 的行命名要安装的二进制文件。如果选项卡中没有这样的行,请参阅[故障排除代码智能](#troubleshoot-code-intelligence)。

69 

70 安装缺失的二进制文件后,Claude Code 会在 Claude 下次编辑匹配文件时重试。如果您将二进制文件安装到不在您启动 `claude` 的 shell 的 `PATH` 上的目录中,请从 shell 启动新会话,其中它在 `PATH` 上。

71 </Step>

72</Steps>

73 

74<h2 id="see-what-claude-gains">

75 查看 Claude 获得的功能

76</h2>

77 

78运行语言服务器后,Claude 获得诊断和代码导航:

79 

80* **编辑后的诊断**:每次 Claude 编辑或写入服务器处理的文件时,Claude 都会获得服务器报告的错误和警告。它会看到它引入的类型错误、缺失导入或语法错误,而无需运行编译器。

81* **代码导航**:Claude 获得一个 `LSP` 工具,通过服务器查找符号,而不是搜索文本。该工具是只读的。有关 Claude 可以使用该工具查找的内容以及权限如何应用于它,请参阅 [LSP 工具行为](/docs/zh-CN/tools-reference#lsp-tool-behavior)。

82 

83<h3 id="read-the-diagnostics-yourself">

84 自己阅读诊断

85</h3>

86 

87Claude 编辑服务器处理的文件后,对话仅显示 `Found N new diagnostic issues` 摘要。要阅读问题本身,请按 **Ctrl+O**。

88 

89<h2 id="accept-or-dismiss-the-recommendation-dialog">

90 接受或关闭推荐对话框

91</h2>

92 

93如果语言服务器二进制文件已在您的 `PATH` 上,但使用它的插件未安装,Claude Code 会在标题为 **LSP 插件推荐**的对话框中提供为您安装插件。

94 

95<h3 id="when-the-recommendation-dialog-appears">

96 推荐对话框何时出现

97</h3>

98 

99**LSP 插件推荐**对话框可以在 Claude 编辑文件后出现。这些条件决定它是否出现以及它提供哪个插件:

100 

101* **插件匹配文件**:您添加的市场之一或 Claude Code 为您注册的官方市场列出了该文件扩展名的代码智能插件,并且插件的二进制文件已安装。

102* **官方优先**:当多个市场为该扩展名提供插件时,对话框提供官方市场的插件。

103* **每个会话一次**:对话框在一个会话中最多出现一次,针对 Claude 编辑的第一个匹配文件。

104* **不适用于云会话**:当您的终端连接到云会话(例如您使用 [`claude --cloud`](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud) 启动的会话)时,对话框永远不会出现。

105 

106<h3 id="respond-to-the-recommendation-dialog">

107 响应推荐对话框

108</h3>

109 

110**LSP 插件推荐**对话框命名插件并提供以下选择:

111 

112* **是,安装**:Claude Code 为您的用户帐户安装插件并打印 `<plugin> installed · restart to apply`。启动新会话以加载服务器。

113* **否,暂不**:对话框关闭,稍后的会话可以再次提供该插件。按 **Esc** 也会执行相同操作。

114* **永不为此插件**:对话框停止为该插件出现,但仍为其他插件出现。

115* **禁用所有 LSP 推荐**:对话框停止为每种语言出现。

116 

117如果您不选择选项,Claude Code 会在 30 秒后关闭它,并将其计为忽略。计数在会话中保持。忽略五个对话框后,Claude Code 停止推荐插件,与您选择**禁用所有 LSP 推荐**相同。

118 

119<h3 id="turn-recommendations-back-on">

120 重新打开推荐

121</h3>

122 

123**LSP 插件推荐**对话框在您选择**禁用所有 LSP 推荐**或忽略它五次后停止出现。

124 

125* **禁用或忽略五次**:要在任一情况下重新打开它,请从 `~/.claude.json`(Claude Code 自己的配置文件)中删除 `lspRecommendationDisabled` 和 `lspRecommendationIgnoredCount` 键。

126* **永不为此插件**:如果您选择了**永不为此插件**并希望再次提供该插件,请从同一文件中的 `lspRecommendationNeverPlugins` 列表中删除其 `name@marketplace` id。

127 

128<h2 id="troubleshoot-code-intelligence">

129 故障排除代码智能

130</h2>

131 

132插件故障排除页面在[语言服务器不启动、使用过多内存或报告错误诊断](/docs/zh-CN/plugins/troubleshooting#language-server-doesnt-start)下涵盖特定于代码智能插件的症状:

133 

134* **语言服务器不启动**:您在 `/plugin` 的**错误**选项卡中看到 `Executable not found in $PATH`,或 Claude 从不报告该语言的诊断。

135* **高内存使用**:当服务器索引项目时,内存使用增加。

136* **monorepo 中的误报诊断**:诊断报告导入为未解决,但实际上已解决。

137 

138<h2 id="add-a-language-without-an-official-plugin">

139 添加没有官方插件的语言

140</h2>

141 

142如果您的语言不在[官方插件表格](#install-a-code-intelligence-plugin)中,您仍然可以连接语言服务器。

143 

1441. 使用 `.lsp.json` 文件编写插件,该文件命名服务器命令和它处理的文件扩展名。

1452. 然后使用 [`--plugin-dir`](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) 加载插件或将其发布到市场。

146 

147有关文件的字段和实际示例,请参阅[插件组件中的 LSP 服务器](/docs/zh-CN/plugins/components#lsp-servers)。

148 

149<h2 id="next-steps">

150 后续步骤

151</h2>

152 

153* [插件组件中的 LSP 服务器](/docs/zh-CN/plugins/components#lsp-servers):为没有官方插件的语言服务器编写 `.lsp.json`

154* [安装和管理插件](/docs/zh-CN/plugins/install):范围、更新和卸载

155* [故障排除插件](/docs/zh-CN/plugins/troubleshooting):超出本页语言服务器的加载错误

156* [在官方市场中查找插件](/docs/zh-CN/plugins/anthropic-marketplaces#find-plugins-in-the-official-marketplace):浏览官方市场其余部分的位置

plugins/components.md +1130 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 向插件添加组件

6 

7> 向 Claude Code 插件添加 skills、hooks、MCP 服务器和其他所有组件类型,并提供针对每种类型的验证示例。

8 

9export const Piece = ({id, children}) => <div className="pe-piece" data-piece={id}>{children}</div>;

10 

11export const PluginExplorer = ({children}) => {

12 const PIECES = [{

13 id: 'manifest',

14 name: 'Manifest',

15 path: '.claude-plugin/plugin.json',

16 required: "Required by Anthropic's directory",

17 lines: [{

18 depth: 0,

19 kind: 'folder',

20 text: '.claude-plugin/'

21 }, {

22 depth: 1,

23 kind: 'file',

24 text: 'plugin.json'

25 }],

26 href: '/en/plugins/manifest-reference#manifest-file',

27 linkText: 'Go to the manifest reference'

28 }, {

29 id: 'skills',

30 name: 'Skills',

31 path: 'skills/review/SKILL.md',

32 lines: [{

33 depth: 0,

34 kind: 'folder',

35 text: 'skills/'

36 }, {

37 depth: 1,

38 kind: 'folder',

39 text: 'review/'

40 }, {

41 depth: 2,

42 kind: 'file',

43 text: 'SKILL.md'

44 }],

45 href: '/en/plugins/components#skills',

46 linkText: 'Go to the Skills section'

47 }, {

48 id: 'commands',

49 name: 'Commands',

50 path: 'commands/about.md',

51 lines: [{

52 depth: 0,

53 kind: 'folder',

54 text: 'commands/'

55 }, {

56 depth: 1,

57 kind: 'file',

58 text: 'about.md'

59 }],

60 href: '/en/plugins/components#commands',

61 linkText: 'Go to the Commands section'

62 }, {

63 id: 'agents',

64 name: 'Agents',

65 path: 'agents/security-reviewer.md',

66 lines: [{

67 depth: 0,

68 kind: 'folder',

69 text: 'agents/'

70 }, {

71 depth: 1,

72 kind: 'file',

73 text: 'security-reviewer.md'

74 }],

75 href: '/en/plugins/components#agents',

76 linkText: 'Go to the Agents section'

77 }, {

78 id: 'hooks',

79 name: 'Hooks',

80 path: 'hooks/hooks.json',

81 lines: [{

82 depth: 0,

83 kind: 'folder',

84 text: 'hooks/'

85 }, {

86 depth: 1,

87 kind: 'file',

88 text: 'hooks.json'

89 }],

90 href: '/en/plugins/components#hooks',

91 linkText: 'Go to the Hooks section'

92 }, {

93 id: 'monitors',

94 name: 'Monitors',

95 path: 'monitors/monitors.json',

96 lines: [{

97 depth: 0,

98 kind: 'folder',

99 text: 'monitors/'

100 }, {

101 depth: 1,

102 kind: 'file',

103 text: 'monitors.json'

104 }],

105 href: '/en/plugins/components#monitors',

106 linkText: 'Go to the Monitors section'

107 }, {

108 id: 'output-styles',

109 name: 'Output styles',

110 path: 'output-styles/terse.md',

111 lines: [{

112 depth: 0,

113 kind: 'folder',

114 text: 'output-styles/'

115 }, {

116 depth: 1,

117 kind: 'file',

118 text: 'terse.md'

119 }],

120 href: '/en/plugins/components#themes-and-output-styles',

121 linkText: 'Go to the Themes and output styles section'

122 }, {

123 id: 'themes',

124 name: 'Themes',

125 path: 'themes/dracula.json',

126 lines: [{

127 depth: 0,

128 kind: 'folder',

129 text: 'themes/'

130 }, {

131 depth: 1,

132 kind: 'file',

133 text: 'dracula.json'

134 }],

135 href: '/en/plugins/components#themes-and-output-styles',

136 linkText: 'Go to the Themes and output styles section'

137 }, {

138 id: 'workflows',

139 name: 'Workflows',

140 path: 'workflows/audit-routes.js',

141 lines: [{

142 depth: 0,

143 kind: 'folder',

144 text: 'workflows/'

145 }, {

146 depth: 1,

147 kind: 'file',

148 text: 'audit-routes.js'

149 }],

150 href: '/en/workflows#distribute-a-workflow-in-a-plugin',

151 linkText: 'Go to Distribute a workflow in a plugin'

152 }, {

153 id: 'bin',

154 name: 'Executables',

155 path: 'bin/hello-plugin',

156 lines: [{

157 depth: 0,

158 kind: 'folder',

159 text: 'bin/'

160 }, {

161 depth: 1,

162 kind: 'file',

163 text: 'hello-plugin'

164 }],

165 href: '/en/plugins/components#executables',

166 linkText: 'Go to the Executables section'

167 }, {

168 id: 'scripts',

169 name: 'Scripts',

170 path: 'scripts/format.sh',

171 lines: [{

172 depth: 0,

173 kind: 'folder',

174 text: 'scripts/'

175 }, {

176 depth: 1,

177 kind: 'file',

178 text: 'format.sh'

179 }],

180 href: '/en/plugins/components#hooks',

181 linkText: 'Go to the Hooks section'

182 }, {

183 id: 'settings',

184 name: 'Default settings',

185 path: 'settings.json',

186 lines: [{

187 depth: 0,

188 kind: 'file',

189 text: 'settings.json'

190 }],

191 href: '/en/plugins/components#default-settings',

192 linkText: 'Go to the Default settings section'

193 }, {

194 id: 'mcp',

195 name: 'MCP servers',

196 path: '.mcp.json',

197 lines: [{

198 depth: 0,

199 kind: 'file',

200 text: '.mcp.json'

201 }],

202 href: '/en/plugins/components#mcp-servers',

203 linkText: 'Go to the MCP servers section'

204 }, {

205 id: 'lsp',

206 name: 'LSP servers',

207 path: '.lsp.json',

208 lines: [{

209 depth: 0,

210 kind: 'file',

211 text: '.lsp.json'

212 }],

213 href: '/en/plugins/components#lsp-servers',

214 linkText: 'Go to the LSP servers section'

215 }];

216 const [selectedId, setSelectedId] = useState('manifest');

217 const [isFullscreen, setIsFullscreen] = useState(false);

218 const rootRef = useRef(null);

219 useEffect(() => {

220 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

221 document.addEventListener('fullscreenchange', onFsChange);

222 return () => document.removeEventListener('fullscreenchange', onFsChange);

223 }, []);

224 const toggleFullscreen = () => {

225 if (!rootRef.current) return;

226 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

227 };

228 const selected = PIECES.find(p => p.id === selectedId) || PIECES[0];

229 const onTreeKeyDown = e => {

230 const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];

231 if (keys.indexOf(e.key) === -1) return;

232 const i = PIECES.findIndex(p => p.id === selectedId);

233 let next = i;

234 if (e.key === 'ArrowDown') next = Math.min(PIECES.length - 1, i + 1);

235 if (e.key === 'ArrowUp') next = Math.max(0, i - 1);

236 if (e.key === 'Home') next = 0;

237 if (e.key === 'End') next = PIECES.length - 1;

238 e.preventDefault();

239 if (next === i) return;

240 const id = PIECES[next].id;

241 setSelectedId(id);

242 const el = document.getElementById('pe-node-' + id);

243 if (el) el.focus();

244 };

245 const FolderIcon = () => <svg className="pe-icon" width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.3" strokeLinejoin="round" aria-hidden="true">

246 <path d="M1.5 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5h6a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1h-10.5a1 1 0 0 1-1-1z" />

247 </svg>;

248 const FileIcon = () => <svg className="pe-icon" width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.3" strokeLinejoin="round" aria-hidden="true">

249 <path d="M4 1.5h5.5L13 5v9.5H4z" />

250 <path d="M9.5 1.5V5H13" />

251 </svg>;

252 return <div ref={rootRef} className={isFullscreen ? 'pe-root pe-fullscreen not-prose' : 'pe-root not-prose'} data-selected={selected.id}>

253 <style>{`

254 .pe-root {

255 --pe-mono: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);

256 --pe-accent: #D97757;

257 --pe-accent-text: #A8502F;

258 --pe-accent-bg: rgba(217,119,87,0.10);

259 --pe-bg: #FFFFFF;

260 --pe-surface: #FAFAF7;

261 --pe-hover: #F0EEE6;

262 --pe-border: #E8E6DC;

263 --pe-text: #141413;

264 --pe-text-2: #3D3D3A;

265 --pe-text-3: #5E5D59;

266 font-family: inherit;

267 background: var(--pe-bg);

268 color: var(--pe-text);

269 border: 1px solid var(--pe-border);

270 border-radius: 12px;

271 margin: 1.5rem 0;

272 overflow: hidden;

273 box-sizing: border-box;

274 }

275 .dark .pe-root {

276 --pe-accent-text: #EBA98F;

277 --pe-accent-bg: rgba(217,119,87,0.18);

278 --pe-bg: #1A1918;

279 --pe-surface: #232221;

280 --pe-hover: #2E2D2B;

281 --pe-border: #3A3936;

282 --pe-text: #F1EFE9;

283 --pe-text-2: #D6D4CA;

284 --pe-text-3: #B8B5AD;

285 }

286 .pe-root *, .pe-root *::before, .pe-root *::after { box-sizing: border-box; }

287 .pe-head { display: flex; align-items: flex-start; gap: 12px; padding: 18px 24px 16px; border-bottom: 1px solid var(--pe-border); }

288 .pe-head-text { flex: 1; min-width: 0; }

289 .pe-fs-btn { flex-shrink: 0; width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--pe-border); border-radius: 6px; background: var(--pe-surface); color: var(--pe-text-2); font-size: 15px; line-height: 1; cursor: pointer; }

290 .pe-fs-btn:hover { background: var(--pe-hover); }

291 .pe-fs-btn:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: 2px; }

292 .pe-fullscreen { border-radius: 0; height: 100vh; display: flex; flex-direction: column; overflow: auto; }

293 .pe-fullscreen .pe-body { flex: 1; }

294 .pe-title { font-size: 19px; font-weight: 600; line-height: 1.3; color: var(--pe-text); margin: 0; }

295 .pe-sub { font-size: 15px; line-height: 1.5; color: var(--pe-text-3); margin: 4px 0 0; }

296 .pe-sub code { font-family: var(--pe-mono); font-size: 0.88em; padding: 1px 5px; border-radius: 4px; background: var(--pe-surface); border: 1px solid var(--pe-border); }

297 .pe-body { display: flex; align-items: stretch; }

298 .pe-tree-pane { width: 270px; flex-shrink: 0; background: var(--pe-surface); border-right: 1px solid var(--pe-border); padding: 16px 0 12px; }

299 .pe-panel { flex: 1; min-width: 0; padding: 16px 24px 24px; }

300 .pe-caption { font-size: 13px; font-weight: 600; color: var(--pe-text-3); margin: 0 0 10px; }

301 .pe-tree-pane .pe-caption { padding: 0 16px; }

302 .pe-rootline { display: flex; align-items: center; gap: 7px; padding: 3px 16px; font-family: var(--pe-mono); font-size: 13.5px; color: var(--pe-text-3); }

303 .pe-node {

304 display: block; width: 100%; margin: 0; padding: 3px 16px 3px 30px; text-align: left; cursor: pointer;

305 background: transparent; color: var(--pe-text-2);

306 border: none; border-left: 3px solid transparent;

307 font-family: var(--pe-mono); font-size: 13.5px; line-height: 1.4;

308 }

309 .pe-node:hover { background: var(--pe-hover); }

310 .pe-node:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: -2px; }

311 .pe-node[aria-pressed="true"] { background: var(--pe-accent-bg); border-left-color: var(--pe-accent); color: var(--pe-accent-text); font-weight: 600; }

312 .pe-line { display: flex; align-items: center; gap: 7px; padding: 2px 0; }

313 .pe-line-tree { flex-wrap: wrap; }

314 .pe-line-tree .pe-req { flex-basis: 100%; margin: 2px 0 0 22px; white-space: normal; width: fit-content; max-width: calc(100% - 22px); }

315 .pe-line span { overflow-wrap: anywhere; }

316 .pe-piece { display: none; font-size: 16px; line-height: 1.6; color: var(--pe-text-2); }

317 .pe-root[data-selected="manifest"] .pe-piece[data-piece="manifest"],

318 .pe-root[data-selected="skills"] .pe-piece[data-piece="skills"],

319 .pe-root[data-selected="commands"] .pe-piece[data-piece="commands"],

320 .pe-root[data-selected="agents"] .pe-piece[data-piece="agents"],

321 .pe-root[data-selected="hooks"] .pe-piece[data-piece="hooks"],

322 .pe-root[data-selected="monitors"] .pe-piece[data-piece="monitors"],

323 .pe-root[data-selected="output-styles"] .pe-piece[data-piece="output-styles"],

324 .pe-root[data-selected="themes"] .pe-piece[data-piece="themes"],

325 .pe-root[data-selected="workflows"] .pe-piece[data-piece="workflows"],

326 .pe-root[data-selected="bin"] .pe-piece[data-piece="bin"],

327 .pe-root[data-selected="scripts"] .pe-piece[data-piece="scripts"],

328 .pe-root[data-selected="settings"] .pe-piece[data-piece="settings"],

329 .pe-root[data-selected="mcp"] .pe-piece[data-piece="mcp"],

330 .pe-root[data-selected="lsp"] .pe-piece[data-piece="lsp"] { display: block; }

331 .pe-piece p { margin: 0 0 10px; }

332 .pe-piece p:last-child { margin-bottom: 0; }

333 .pe-piece code { font-family: var(--pe-mono); font-size: 0.88em; padding: 1px 5px; border-radius: 4px; background: var(--pe-surface); border: 1px solid var(--pe-border); }

334 .pe-piece .code-block { margin: 12px 0 0; }

335 .pe-piece pre code { padding: 0; border: none; background: none; }

336 .pe-piece a { color: var(--pe-accent-text); }

337 .pe-line-compact { display: none; }

338 .pe-icon { flex-shrink: 0; }

339 .pe-req { margin-left: 8px; padding: 0 6px; border-radius: 999px; font-size: 11px; line-height: 18px; letter-spacing: .02em; color: var(--pe-accent-text); border: 1px solid var(--pe-border); background: var(--pe-surface); white-space: nowrap; font-weight: 500; vertical-align: middle; }

340 .pe-name { font-size: 22px; font-weight: 600; line-height: 1.25; letter-spacing: -0.2px; color: var(--pe-text); margin: 0; }

341 .pe-path { font-family: var(--pe-mono); font-size: 13.5px; color: var(--pe-accent-text); margin: 4px 0 0; overflow-wrap: anywhere; }

342 .pe-block { margin: 20px 0 0; }

343 .pe-link {

344 display: inline-block; margin: 24px 0 0; padding: 8px 14px; border-radius: 8px;

345 font-size: 14.5px; font-weight: 600; text-decoration: none;

346 color: var(--pe-accent-text); background: var(--pe-accent-bg); border: 1px solid var(--pe-accent);

347 }

348 .pe-link:hover { filter: brightness(0.97); }

349 .pe-link:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: 2px; }

350 @media (max-width: 700px) {

351 .pe-head { padding: 16px 16px 14px; }

352 .pe-body { flex-direction: column; }

353 .pe-tree-pane { width: 100%; border-right: none; border-bottom: 1px solid var(--pe-border); }

354 .pe-line-tree { display: none; }

355 .pe-line-compact { display: flex; }

356 .pe-panel { padding: 16px 16px 20px; }

357 }

358 `}</style>

359 

360 <div className="pe-head">

361 <div className="pe-head-text">

362 <div className="pe-title">What goes in a plugin</div>

363 <div className="pe-sub">This example plugin, <code>my-plugin</code>, has one of every kind of component, each in its default location. Select a file or folder to read what it’s for and see what goes in it.</div>

364 </div>

365 <button type="button" className="pe-fs-btn" onClick={toggleFullscreen} aria-label={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}>

366 {isFullscreen ? '⤡' : '⛶'}

367 </button>

368 </div>

369 

370 <div className="pe-body">

371 <div className="pe-tree-pane">

372 <div className="pe-caption" id="pe-tree-caption">Plugin directory</div>

373 <div role="group" aria-labelledby="pe-tree-caption" onKeyDown={onTreeKeyDown}>

374 <div className="pe-rootline"><FolderIcon /><span>my-plugin/</span></div>

375 {PIECES.map(p => <button key={p.id} id={'pe-node-' + p.id} type="button" className="pe-node" aria-pressed={p.id === selected.id} aria-label={p.name + ', ' + p.path} onClick={() => setSelectedId(p.id)}>

376 {p.lines.map((line, i) => <span key={i} className="pe-line pe-line-tree" style={{

377 paddingLeft: line.depth * 18 + 'px'

378 }}>

379 {line.kind === 'folder' ? <FolderIcon /> : <FileIcon />}

380 <span>{line.text}</span>

381 {p.required && i === p.lines.length - 1 ? <span className="pe-req">{p.required}</span> : null}

382 </span>)}

383 <span className="pe-line pe-line-compact">

384 <FileIcon />

385 <span>{p.path}</span>

386 {p.required ? <span className="pe-req">{p.required}</span> : null}

387 </span>

388 </button>)}

389 </div>

390 </div>

391 

392 <div className="pe-panel" role="region" aria-labelledby="pe-panel-caption" aria-live="polite" aria-atomic="true">

393 <div className="pe-caption" id="pe-panel-caption">Selected piece</div>

394 <div className="pe-name">{selected.name}{selected.required ? <span className="pe-req">{selected.required}</span> : null}</div>

395 <div className="pe-path">{selected.path}</div>

396 

397 <div className="pe-block">{children}</div>

398 

399 <a className="pe-link" href={selected.href}>{selected.linkText}</a>

400 </div>

401 </div>

402 </div>;

403};

404 

405Claude Code 插件由多个组件构建而成,例如 skills、agents、hooks 和 MCP 服务器。每个组件在插件中都有一个默认文件夹,在 `.claude-plugin/plugin.json` 中有一个可选的清单键来替换或添加到该文件夹,以及用户看到的名称。有关每个键的完整字段表,请参阅[清单参考](/docs/zh-CN/plugins/manifest-reference#fields)。

406 

407使用此页面向已加载的插件添加组件。

408 

409添加组件后,在运行中的会话中运行 `/reload-plugins` 或启动新会话,以便 Claude Code 加载它。要在加载前检查组件的文件,请从插件目录在 shell 中运行 [`claude plugin validate .`](/docs/zh-CN/plugins/cli-reference#plugin-validate)。

410 

411<Note>

412 这些情况在其他页面上有介绍:

413 

414 * **构建您的第一个插件**:从[创建插件](/docs/zh-CN/plugins/create)开始

415 * **安装他人的插件**:请参阅[安装插件](/docs/zh-CN/plugins/install)

416 * **您的插件用户在 claude.ai 或 Cowork 中**:那里加载的是不同的组件集。请参阅[claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)

417</Note>

418 

419<h2 id="explore-the-plugin-directory">

420 浏览插件目录

421</h2>

422 

423浏览器显示了一个示例插件 `my-plugin`,它在其默认位置拥有每种组件的一个副本:

424 

425* 一个审查 skill 和一个 `about` 命令

426* 一个 security-review 子代理

427* 一个在 Claude 编辑文件后格式化文件的 hook,以及它调用的 `scripts/` 文件夹

428* 一个日志监视器

429* 一个输出样式和一个颜色主题

430* 一个 route-audit 工作流

431* 一个 `hello-plugin` 可执行文件

432* 默认设置

433* 一个本地 MCP 服务器和一个 Go 语言服务器

434 

435每个文件都是其格式的最小有效示例,用于展示形状而不是实用性:真实的 skill 或 agent 包含完整的说明,通常还有支持文件,真实的 hook 或监视器执行真实的工作。浏览器后的部分使用与浏览器相同的文件作为示例,并链接到更完整的文件。选择一个文件或文件夹来阅读其用途、查看其内容,并找到涵盖它的部分。

436 

437<PluginExplorer>

438 <Piece id="manifest">

439 [清单](/docs/zh-CN/plugins/manifest-reference)是插件 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含插件的元数据和 Claude Code 提示用户的 `userConfig` 值。只有 `name` 是必需的。在这个文件中,`description` 是用户在 `/plugin` 中看到的插件文本,`version` 使用户保持在该版本,直到您更改它:

440 

441 ```json theme={null}

442 {

443 "name": "my-plugin",

444 "version": "1.0.0",

445 "description": "Review, formatting, and database tools for this team"

446 }

447 ```

448 </Piece>

449 

450 <Piece id="skills">

451 一个 [skill](/docs/zh-CN/skills) 是一个 `SKILL.md` 文件。将每个 skill 保存在 `skills/` 下的自己的目录中。Claude 读取每个 skill 的 `description`,当用户要求的内容与其匹配时,例如在这里要求 Claude 审查拉取请求,Claude 加载 skill 的说明并遵循它们。用户也可以直接将其作为 `/my-plugin:review` 运行:

452 

453 ```markdown theme={null}

454 ---

455 description: Reviews a pull request for style and test coverage. Use when asked to review code.

456 ---

457 

458 Review the changed files. Report style problems first, then missing tests.

459 ```

460 </Piece>

461 

462 <Piece id="commands">

463 命令是用户按名称运行的单个 Markdown 文件。命令是较旧的格式:skill 以相同的方式按名称运行,也可以在其自己的目录中携带支持文件,因此将新的写成 skills,并为您已有的文件保留 `commands/`。此文件变成 `/my-plugin:about` 并采用与 skill 相同的 frontmatter:

464 

465 ```markdown theme={null}

466 ---

467 description: Summarize the repository

468 ---

469 

470 Summarize what this repository does in three sentences.

471 ```

472 </Piece>

473 

474 <Piece id="agents">

475 一个[子代理](/docs/zh-CN/sub-agents)是一个单独的助手,拥有自己的说明和自己的上下文窗口,Claude 可以将任务委托给它并获得结果。`agents/` 下的每个 Markdown 文件定义一个:frontmatter 命名它并说明何时使用它,正文是其系统提示。这个被命名为 `my-plugin:security-reviewer`,用户可以使用 `@agent-my-plugin:security-reviewer` 调用它:

476 

477 ```markdown theme={null}

478 ---

479 name: security-reviewer

480 description: Reviews code changes for security issues. Use after edits to authentication or input handling.

481 model: sonnet

482 ---

483 

484 You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

485 ```

486 </Piece>

487 

488 <Piece id="hooks">

489 一个 [hook](/docs/zh-CN/hooks-guide) 在 Claude Code 生命周期中的某个点自动运行某些内容,例如在每次文件编辑后:shell 命令、HTTP 请求、MCP 工具调用、对模型的提示或子代理。将插件的 hooks 保存在插件根目录的 `hooks/hooks.json` 中。这个在 Claude 写入或编辑文件后运行插件的 `scripts/format.sh`:

490 

491 ```json theme={null}

492 {

493 "hooks": {

494 "PostToolUse": [

495 {

496 "matcher": "Write|Edit",

497 "hooks": [

498 {

499 "type": "command",

500 "command": "\"${CLAUDE_PLUGIN_ROOT}/scripts/format.sh\""

501 }

502 ]

503 }

504 ]

505 }

506 }

507 ```

508 </Piece>

509 

510 <Piece id="monitors">

511 监视器是一个 shell 命令,Claude Code 在会话启动时在后台启动并保持运行直到会话结束,使用 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool)。它打印的内容作为通知到达 Claude。`when` 字段可以改为在命名 skill 首次运行时启动它。这个跟踪错误日志:

512 

513 ```json theme={null}

514 [

515 {

516 "name": "error-log",

517 "command": "tail -F ./logs/error.log",

518 "description": "Application error log"

519 }

520 ]

521 ```

522 </Piece>

523 

524 <Piece id="output-styles">

525 插件可以包含[输出样式](/docs/zh-CN/output-styles),这改变了 Claude 如何格式化和表述其回复。将每个输出样式保存为 `output-styles/<name>.md`。这个在 `/output-style` 中显示为 `my-plugin:terse`:

526 

527 ```markdown theme={null}

528 ---

529 name: terse

530 description: Answer in as few words as possible

531 keep-coding-instructions: true

532 ---

533 

534 Keep every reply short. Skip preambles and summaries.

535 ```

536 </Piece>

537 

538 <Piece id="themes">

539 插件可以包含 [Claude Code 界面的颜色主题](/docs/zh-CN/terminal-config#create-a-custom-theme)。将每个主题保存为 `themes/<slug>.json`。这个在 `/theme` 中显示为 `Dracula`,标记为来自 `my-plugin`:

540 

541 ```json theme={null}

542 {

543 "name": "Dracula",

544 "base": "dark",

545 "overrides": {

546 "claude": "#bd93f9",

547 "error": "#ff5555"

548 }

549 }

550 ```

551 </Piece>

552 

553 <Piece id="workflows">

554 `workflows/` 文件夹包含 [workflow](/docs/zh-CN/workflows) `.js` 文件:一个 `meta` 块,然后是协调多个子代理的脚本正文。这个作为 `/my-plugin:audit-routes` 运行:

555 

556 ```javascript theme={null}

557 export const meta = {

558 name: 'audit-routes',

559 description: 'Audit every route handler for missing auth checks',

560 }

561 

562 const found = await agent('List every .ts file under src/routes/.', {

563 schema: { type: 'object', required: ['files'], properties: { files: { type: 'array', items: { type: 'string' } } } },

564 })

565 

566 const audits = await pipeline(found.files, file =>

567 agent(`Audit ${file} for missing authentication checks.`, { label: file }),

568 )

569 

570 return audits.filter(Boolean)

571 ```

572 </Piece>

573 

574 <Piece id="bin">

575 `bin/` 是插件如何提供命令行工具的方式。启用插件时,Claude Code 将此文件夹放在它运行命令的 shell 的 `PATH` 上,因此 Claude 或 skill 的说明可以按名称运行该工具,而无需用户安装任何东西。有了这个[可执行文件](#executables),`hello-plugin` 是 Claude 可以运行的命令:

576 

577 ```bash theme={null}

578 #!/bin/bash

579 echo "hello from my-plugin"

580 ```

581 </Piece>

582 

583 <Piece id="scripts">

584 `hooks/hooks.json` 中的 hook 运行一个脚本,这个文件夹是示例保留它的地方。名称 `scripts/` 是一个约定,不是 Claude Code 查找的东西:hook 通过其路径指向文件,`${CLAUDE_PLUGIN_ROOT}/scripts/format.sh`。格式化脚本可能看起来像这样:

585 

586 ```bash theme={null}

587 #!/bin/bash

588 npx prettier --write .

589 ```

590 </Piece>

591 

592 <Piece id="settings">

593 插件根目录中的 `settings.json` 包含在启用插件时应用的[设置](/docs/zh-CN/settings-reference),因此插件可以改变会话的行为方式,而不仅仅是添加组件。只有两个键从插件生效,[`agent`](/docs/zh-CN/settings-reference#agent) 和 [`subagentStatusLine`](/docs/zh-CN/settings-reference#subagentstatusline);所有其他键都被丢弃。请参阅[默认设置](#default-settings)。

594 

595 这个设置 `agent`,它将会话的主线程作为插件自己的 `security-reviewer` agent 运行,因此该 agent 的系统提示、工具限制和模型应用于整个会话:

596 

597 ```json theme={null}

598 {

599 "agent": "security-reviewer"

600 }

601 ```

602 </Piece>

603 

604 <Piece id="mcp">

605 一个 [MCP 服务器](/docs/zh-CN/mcp)从外部系统为 Claude 提供工具。在插件根目录的 `.mcp.json` 中声明它。这个从插件内的脚本启动本地服务器,并在 `/mcp` 中显示为 `plugin:my-plugin:db`:

606 

607 ```json theme={null}

608 {

609 "mcpServers": {

610 "db": {

611 "command": "node",

612 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"]

613 }

614 }

615 }

616 ```

617 </Piece>

618 

619 <Piece id="lsp">

620 LSP 服务器为 Claude 提供[诊断和代码导航](/docs/zh-CN/plugins/code-intelligence)。在插件根目录的 `.lsp.json` 中声明服务器。这个为 `.go` 文件连接 Go 语言服务器:

621 

622 ```json theme={null}

623 {

624 "gopls": {

625 "command": "gopls",

626 "args": ["serve"],

627 "extensionToLanguage": {

628 ".go": "go"

629 }

630 }

631 }

632 ```

633 </Piece>

634</PluginExplorer>

635 

636<h2 id="add-each-kind-of-component">

637 添加每种组件

638</h2>

639 

640下面的每个部分涵盖一种组件:其文件在插件中的位置、一个验证的示例、插件加载后用户看到的内容,以及改变默认位置的清单键。添加您的插件需要的那些;没有一个是必需的。

641 

642<h3 id="skills">

643 Skills

644</h3>

645 

646一个 [skill](/docs/zh-CN/skills) 是一个 `SKILL.md` 文件,当其描述与任务匹配时 Claude 可以加载它。用户也可以将其作为命令运行。将每个 skill 保存在 `skills/` 下的自己的目录中:

647 

648```text theme={null}

649my-plugin/

650├── .claude-plugin/

651│ └── plugin.json

652└── skills/

653 └── review/

654 └── SKILL.md

655```

656 

657给 `SKILL.md` 一个 `description`,以便 Claude 知道何时使用它:

658 

659```markdown skills/review/SKILL.md theme={null}

660---

661description: Reviews a pull request for style and test coverage. Use when asked to review code.

662---

663 

664Review the changed files. Report style problems first, then missing tests.

665```

666 

667加载插件后,`/my-plugin:review` 运行 skill。命令名称和谁可以调用它遵循这些规则:

668 

669* **命令名称**:`/<plugin>:<directory>`,所以 `my-plugin` 中的 `skills/review/SKILL.md` 是 `/my-plugin:review`。如果您在 frontmatter 中设置 `name`,它替换最后一段,插件前缀保持不变。请参阅[skill 如何获得其命令名称](/docs/zh-CN/skills#how-a-skill-gets-its-command-name)

670* **谁调用它**:Claude、用户或两者,由 frontmatter 控制。请参阅[控制谁调用 skill](/docs/zh-CN/skills#control-who-invokes-a-skill)

671 

672您也可以将 skills 放在默认 `skills/` 目录之外:

673 

674* **其他目录**:在 `skills` 清单键中列出它们。它们添加到默认 `skills/` 扫描,而不是替换它,不像 `commands` 和 `agents`

675* **插件根目录中的单个 skill**:没有 `skills/` 目录且没有 `skills` 清单键,插件根目录中的 `SKILL.md` 加载为一个 skill。在其 frontmatter 中设置 `name`,因为否则市场安装会根据其[缓存目录](/docs/zh-CN/plugins/loading#find-plugins-on-disk)而不是您的插件命名 skill

676 

677要在插件中包含说明,请将其写成 skill。Claude Code 不加载插件根目录中的 `CLAUDE.md`,`claude plugin validate` 警告 `CLAUDE.md at the plugin root is not loaded as project context`。

678 

679对于 frontmatter 字段和支持文件,请参阅 [Skills](/docs/zh-CN/skills)。

680 

681<h3 id="commands">

682 命令

683</h3>

684 

685命令是用户按名称运行的单个 Markdown 文件,例如 `/my-plugin:about`。

686 

687<Note>

688 命令是较旧的格式,[skills](#skills) 对新工作已经取代它们。skill 以相同的方式按名称运行,它也可以在其目录中携带支持文件。为您从 `.claude/commands/` 移动的文件保留 `commands/`。

689</Note>

690 

691将命令保存在 `commands/<file>.md`,它变成 `/<plugin>:<file>`。子目录添加一个段,所以 `commands/db/migrate.md` 是 `/my-plugin:db:migrate`。

692 

693命令文件采用与 skills 相同的 frontmatter。

694 

695<h4 id="define-commands-in-the-manifest">

696 在清单中定义命令

697</h4>

698 

699只有当您想将命令文件保留在 `commands/` 之外的某个地方,或在 `plugin.json` 中定义一个短命令而不需要单独的 Markdown 文件时,您才需要这样做。设置 `commands` 清单键,Claude Code 读取它而不是扫描 `commands/`。该键采用路径、路径数组或将每个命令名称映射到 `source` 文件或内联 `content` 的对象。

700 

701此清单内联定义 `/my-plugin:about`,没有 Markdown 文件:

702 

703```json .claude-plugin/plugin.json theme={null}

704{

705 "name": "my-plugin",

706 "commands": {

707 "about": {

708 "content": "Summarize what this repository does in three sentences.",

709 "description": "Summarize the repository"

710 }

711 }

712}

713```

714 

715加载插件并在会话中运行 `/my-plugin:about` 以确认它已加载。

716 

717对于完整的键语法,请参阅 [`commands`](/docs/zh-CN/plugins/manifest-reference#commands)。

718 

719<h3 id="agents">

720 Agents

721</h3>

722 

723一个[子代理](/docs/zh-CN/sub-agents)是一个单独的助手,拥有自己的说明和上下文窗口,Claude 可以将任务委托给它。`agents/` 下的每个 Markdown 文件定义一个:

724 

725```markdown agents/security-reviewer.md theme={null}

726---

727name: security-reviewer

728description: Reviews code changes for security issues. Use after edits to authentication or input handling.

729model: sonnet

730---

731 

732You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

733```

734 

735此 agent 被命名为 `my-plugin:security-reviewer`,用户可以[显式调用它](/docs/zh-CN/sub-agents#invoke-subagents-explicitly)使用 `@agent-my-plugin:security-reviewer`。名称形式是 `<plugin>:<name>`,其中 `<name>` 来自 frontmatter,或当没有时来自文件名。

736 

737`agents` 清单键替换 `agents/` 扫描。

738 

739<h4 id="organize-agents-in-subfolders">

740 在子文件夹中组织 agents

741</h4>

742 

743您可以将插件 agent 文件放在 `agents/` 的子文件夹中。Claude Code [递归加载它们](/docs/zh-CN/sub-agents#choose-the-subagent-scope)并用冒号连接插件名称、每个子文件夹名称和文件名以形成 agent 的作用域名称。例如,`my-plugin` 中的 `agents/review/security.md` 加载为 `my-plugin:review:security`。两个设置改变该名称:

744 

745* Frontmatter `name`:它仅替换文件名,所以 `agents/review/security.md` 中的 `name: audit` 加载为 `my-plugin:review:audit`

746* 清单 [`agents`](/docs/zh-CN/plugins/manifest-reference#fields) 字段:您在那里列出的文件加载时不带子文件夹名称,所以 `"agents": "./custom/review/security.md"` 加载为 `my-plugin:security`

747 

748<h4 id="frontmatter-fields-in-plugin-agents">

749 插件 agents 中的 Frontmatter 字段

750</h4>

751 

752插件 agent 的 frontmatter 遵循这些规则:

753 

754* **支持的字段**:`name`、`description`、`model`、`effort`、`maxTurns`、`tools`、`disallowedTools`、`skills`、`memory`、`background`、`omitClaudeMd`、`isolation`、`color` 和 `experimental` 的 `cacheTtl` 键。唯一有效的 `isolation` 值是 `"worktree"`。请参阅[支持的 frontmatter 字段](/docs/zh-CN/sub-agents#supported-frontmatter-fields)了解每个字段的作用

755* **忽略的字段**:`permissionMode`、`hooks`、`mcpServers` 和 `initialPrompt`。agent 文件不能自己添加 hooks 或 MCP 服务器,所以改为添加这些作为插件 [hooks](#hooks) 和 [MCP 服务器](#mcp-servers)

756* **不解析的 Frontmatter**:agent 仍然加载,每个字段都被忽略。它根据文件命名,其描述读作 `Agent from my-plugin plugin`。在 shell 中运行 [`claude plugin validate`](/docs/zh-CN/plugins/cli-reference#plugin-validate) 来找到这些文件

757 

758对于每个字段的作用和优先级规则,请参阅 [Subagents](/docs/zh-CN/sub-agents#supported-frontmatter-fields)。

759 

760<h3 id="hooks">

761 Hooks

762</h3>

763 

764一个 [hook](/docs/zh-CN/hooks-guide) 在 Claude Code 生命周期中的某个点自动运行某些内容,例如在每次文件编辑后:shell 命令、HTTP 请求、MCP 工具调用、对模型的提示或子代理。将插件的 hooks 保存在插件根目录的 `hooks/hooks.json` 中,在顶级 `"hooks"` 键下,形状与 `settings.json` 中的 `hooks` 对象相同。这让您可以复制现有的设置 hook 而不改变。

765 

766此 hook 在每次 `Write` 或 `Edit` 后运行一个捆绑脚本:

767 

768```json hooks/hooks.json theme={null}

769{

770 "hooks": {

771 "PostToolUse": [

772 {

773 "matcher": "Write|Edit",

774 "hooks": [

775 {

776 "type": "command",

777 "command": "\"${CLAUDE_PLUGIN_ROOT}/scripts/format.sh\""

778 }

779 ]

780 }

781 ]

782 }

783}

784```

785 

786将脚本保存在 `scripts/format.sh` 并使其可执行。

787 

788加载插件并要求 Claude 编辑文件。退出 0 的 `PostToolUse` hook 在记录中显示任何内容,所以用[调试日志](/docs/zh-CN/hooks#debug-hooks)或脚本本身改变的内容确认它运行。

789 

790`hooks/hooks.json` 和 `hooks` 清单键中的 Hooks 都加载。对于每个事件及其有效负载,请参阅 [Hook 事件](/docs/zh-CN/hooks#hook-events)。

791 

792<h4 id="when-plugin-hooks-fire">

793 插件 hooks 何时触发

794</h4>

795 

796插件的 hooks 不等待使用插件的一个 skills 或命令。Claude Code 在会话加载插件时注册它们,从那时起它们在其事件上触发。要限制 hook 何时运行,缩小其 `matcher`。

797 

798如果 hook 从不触发,请参阅[不触发的 hooks](/docs/zh-CN/plugins/troubleshooting#failed-to-load-hooks-from-and-hooks-that-dont-fire)。

799 

800<h4 id="environment-quoting-and-matching-mcp-tools">

801 环境、引用和匹配 MCP 工具

802</h4>

803 

804hook 的环境、`${CLAUDE_PLUGIN_ROOT}` 的引用和插件自己的 MCP 工具的匹配器工作如下:

805 

806* **环境**:每个 hook 进程在其环境中接收 `CLAUDE_PLUGIN_ROOT` 和 `CLAUDE_PLUGIN_DATA`,加上每个[用户配置](#user-configuration)值的 `CLAUDE_PLUGIN_OPTION_<KEY>`,所以您的脚本可以从那里读取它们

807* **引用**:当 `command` 没有 `args` 时,它通过 shell 运行,所以用双引号包装 `${CLAUDE_PLUGIN_ROOT}` 路径,如 [Hooks](#hooks) 下的 `hooks/hooks.json` 示例所做的那样,以保持扩展的路径为一个 shell 单词。当您改为传递 `args` 时,每个元素作为一个参数传递,没有 shell,不需要引用。请参阅 [exec 形式和 shell 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)

808* **匹配插件自己的 MCP 工具**:来自此插件声明的 [MCP 服务器](#mcp-servers)的工具被命名为 `mcp__plugin_<plugin>_<server>__<tool>`,所以在匹配器中写那个完整名称。仅在服务器名称上的匹配器从不触发。请参阅[匹配 MCP 工具](/docs/zh-CN/hooks#match-mcp-tools)

809 

810<h3 id="mcp-servers">

811 MCP 服务器

812</h3>

813 

814MCP 服务器从外部系统为 Claude 提供工具。在插件根目录的 `.mcp.json` 中声明它,形状与[项目 `.mcp.json`](/docs/zh-CN/mcp#project-scope) 相同。此 `.mcp.json` 声明一个名为 `db` 的服务器:

815 

816```json .mcp.json theme={null}

817{

818 "mcpServers": {

819 "db": {

820 "command": "node",

821 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"]

822 }

823 }

824}

825```

826 

827您也可以省略 `mcpServers` 包装器并将 `db` 放在文件的顶级。

828 

829加载插件并运行 `/mcp` 以确认服务器显示为 `plugin:my-plugin:db`。

830 

831`claude plugin validate` 检查 `.mcp.json` 并报告 Claude Code 在加载时会丢弃的服务器条目为错误。需要 Claude Code v2.1.281 或更高版本。

832 

833对于坏条目在加载时显示的位置,请参阅[不启动的 MCP 服务器](/docs/zh-CN/plugins/troubleshooting#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start)。

834 

835`mcpServers` 清单键采用内联服务器映射、JSON 文件的路径或这些的数组。当清单服务器与 `.mcp.json` 中的一个同名时,清单服务器替换它。

836 

837<h4 id="reach-users-on-claude-ai-and-cowork">

838 到达 claude.ai 和 Cowork 中的用户

839</h4>

840 

841本地 stdio 服务器,例如 [MCP 服务器](#mcp-servers) 下的 `db` 服务器,在 Claude Code 和在 Claude Desktop 应用中在您的机器上运行的 Cowork 会话中运行,但不在 claude.ai 上。要到达那里的用户,通过其 `https://` URL 引用远程服务器,claude.ai 和 Cowork 作为连接器提供给用户。

842 

843<h4 id="server-names-tool-names-and-reloads">

844 服务器名称、工具名称和重新加载

845</h4>

846 

847服务器的名称、变量替换和重新加载行为遵循这些规则:

848 

849* **服务器名称**:`plugin:<plugin>:<server>`,所以 `my-plugin` 中的 `db` 服务器在 `/mcp` 中是 `plugin:my-plugin:db`。使用相同的形式在 [`mcp_tool` hook](/docs/zh-CN/hooks#mcp-tool-hook-fields) 中命名服务器

850* **工具名称**:`mcp__plugin_<plugin>_<server>__<tool>`,所以该 `db` 服务器上的 `query` 工具是 `mcp__plugin_my-plugin_db__query`。这是在[权限规则](/docs/zh-CN/permissions)和 [hook 匹配器](#hooks)中使用的名称

851* **替换**:`${CLAUDE_PLUGIN_ROOT}` 和其他[路径变量](#path-variables-and-persistent-data)在 `command`、`args` 和 `env` 中被替换。`args` 中不需要引用,因为每个元素作为一个参数传递

852* **重新加载**:当用户运行 `/reload-plugins` 并且[重新加载应用](/docs/zh-CN/plugins/cli-reference#reloads-that-change-mcp-tools)时,配置未改变的服务器保持其连接。配置改变的服务器重新连接,您删除的服务器断开连接

853 

854<h4 id="include-a-packaged-mcpb-server">

855 包含打包的 MCPB 服务器

856</h4>

857 

858`mcpServers` 键也接受打包的服务器作为 [MCPB 文件](https://github.com/modelcontextprotocol/mcpb),其扩展名是 `.mcpb` 或较旧的 `.dxt`。将键指向文件,作为插件内的路径或 `https://` URL:

859 

860```json .claude-plugin/plugin.json theme={null}

861{

862 "name": "my-plugin",

863 "mcpServers": "./servers/db.mcpb"

864}

865```

866 

867服务器从包的清单中的 `name` 获取其名称。

868 

869对于传输和身份验证,请参阅 [MCP](/docs/zh-CN/mcp#plugin-provided-mcp-servers)。

870 

871<h3 id="lsp-servers">

872 LSP 服务器

873</h3>

874 

875LSP 服务器为 Claude 提供诊断和代码导航。如果[官方代码智能插件](/docs/zh-CN/plugins/code-intelligence)已经涵盖您的语言,安装那个而不是写一个。否则在插件根目录的 `.lsp.json` 中声明服务器:

876 

877```json .lsp.json theme={null}

878{

879 "gopls": {

880 "command": "gopls",

881 "args": ["serve"],

882 "extensionToLanguage": {

883 ".go": "go"

884 }

885 }

886}

887```

888 

889文件直接将每个服务器名称映射到其配置,没有围绕映射的包装对象。`command` 是二进制的名称,其参数在 `args` 中。`extensionToLanguage` 需要至少一个扩展名,每个以 `.` 开头。

890 

891`claude plugin validate` 不读取此文件。当任何条目无效时,整个文件在加载时被跳过,`Invalid LSP server config for ".lsp.json"` 出现在 `/plugin` **Errors** 标签中。

892 

893您的插件配置连接但不安装服务器二进制,每个文件扩展名获得一个服务器:

894 

895* **缺少二进制**:Claude Code 从用户的 `PATH` 按名称启动 `command`。当二进制不存在时,服务器启动失败,`claude --debug` 记录 `LSP server <name> failed to start`

896* **扩展冲突**:当两个启用的服务器声称相同的扩展名时,首先注册的处理这些文件,另一个不用于它们,无论服务器来自一个插件还是两个。`/plugin` **Errors** 标签显示警告 `LSP server "<name>" is not used for <ext> files`

897 

898`lspServers` 清单键采用相同的映射内联、JSON 文件的路径或这些的数组,其服务器添加到 `.lsp.json` 中的那些。当清单服务器与 `.lsp.json` 中的一个同名时,清单服务器替换它。

899 

900对于 `transport`、超时、重启和其他字段,请参阅 [`lspServers`](/docs/zh-CN/plugins/manifest-reference#lspservers)。

901 

902将日志输出发送到 stderr,而不是 stdout。Claude Code 仅将服务器的 stdout 读取为协议消息,并接受最多 64 KiB 的消息头和最多 32 MiB 的消息正文。

903 

904Claude Code 断开超过任一限制或向 stdout 写入非协议输出的服务器,并将断开连接计为 `restartOnCrash` 和 `maxRestarts` 的崩溃。当您使用 `--debug` 运行时,Claude Code 将命名原因的错误写入调试日志。

905 

906<h3 id="executables">

907 可执行文件

908</h3>

909 

910插件根目录中 `bin/` 中的文件在启用插件时位于 Bash 工具的 shell 的 `PATH` 上,所以 Claude 可以将它们作为裸命令运行。添加一个可执行脚本:

911 

912```bash bin/hello-plugin theme={null}

913#!/bin/bash

914echo "hello from my-plugin"

915```

916 

917使用 `chmod +x bin/hello-plugin` 使其可执行并加载插件。当您要求 Claude 运行 `hello-plugin` 时,Bash 工具结果显示脚本的输出。

918 

919插件 `bin/` 目录在用户自己的 `PATH` 条目之后,所以插件不能影响 `git`、`ls` 或另一个系统命令。

920 

921claude.ai 和 Cowork 不安装具有顶级 `bin/` 目录的插件,包括您[通过 claude.ai 组织设置分发](/docs/zh-CN/plugins/host-marketplace#distribute-through-organization-settings)的那个。

922 

923<h3 id="default-settings">

924 默认设置

925</h3>

926 

927要设置在启用插件时应用的默认值,在插件根目录添加 `settings.json`,或将相同的对象内联放在 `settings` 清单键中。两个键生效,`agent` 和 `subagentStatusLine`,所有其他键都被丢弃。

928 

929设置 `agent` 以将插件自己的一个 agents 作为主线程运行:

930 

931```json settings.json theme={null}

932{

933 "agent": "security-reviewer"

934}

935```

936 

937加载插件并启动会话。Claude 然后在主对话中使用 `security-reviewer` agent 的系统提示和模型回答。

938 

939对于键控制的所有内容,请参阅 [`agent` 设置](/docs/zh-CN/settings-reference#agent)。

940 

941当相同的键在多个地方设置时,这些规则决定哪个值应用:

942 

943* **文件优于清单**:当两者都存在且 `settings.json` 设置至少一个支持的键时,`settings.json` 应用,清单的 `settings` 被忽略

944* **用户设置优于插件默认值**:跨设置源,插件默认值是最低层,所以用户自己在 `~/.claude/settings.json` 中的 `agent` 覆盖您的

945* **两个插件设置相同的键**:最后加载的插件的值应用,`claude --debug` 记录 `overrides setting`

946 

947对于 `subagentStatusLine` 形状,请参阅[子代理状态行](/docs/zh-CN/statusline#subagent-status-lines)。

948 

949<h3 id="themes-and-output-styles">

950 主题和输出样式

951</h3>

952 

953插件可以包含颜色主题和输出样式。两者都显示在与用户自己相同的选择器中。对于任一个,设置清单键替换文件夹扫描。

954 

955| 组件 | 保存为 | 格式 | 显示在 | 清单键 |

956| :--- | :------------------------ | :--------------------------------------------------------------------------------------------------- | :----------------------------------- | :-------------------- |

957| 主题 | `themes/<slug>.json` | 用户在 `~/.claude/themes/` 中写入的[自定义主题文件](/docs/zh-CN/terminal-config#create-a-custom-theme)格式 | `/theme`,在文件的 `name` 下 | `experimental.themes` |

958| 输出样式 | `output-styles/<name>.md` | [自定义输出样式](/docs/zh-CN/output-styles#create-a-custom-output-style)格式,带有 `name` 和 `description` frontmatter | `/output-style`,作为 `<plugin>:<name>` | `outputStyles` |

959 

960插件主题是只读的,所以当用户在 `/theme` 中编辑一个时,编辑被保存为他们自己的主题目录中的副本。

961 

962此主题在深色预设上重新着色提示符强调和错误文本:

963 

964```json themes/dracula.json theme={null}

965{

966 "name": "Dracula",

967 "base": "dark",

968 "overrides": {

969 "claude": "#bd93f9",

970 "error": "#ff5555"

971 }

972}

973```

974 

975<h3 id="channels">

976 频道

977</h3>

978 

979一个[频道](/docs/zh-CN/channels)让外部系统(例如聊天应用)将消息发送到会话中。在插件中,频道是 MCP 服务器之一加上一个 `channels` 条目,将其绑定并可以提示其自己的配置。此清单将频道绑定到 `telegram` 服务器并要求机器人令牌:

980 

981```json .claude-plugin/plugin.json theme={null}

982{

983 "name": "my-plugin",

984 "mcpServers": {

985 "telegram": {

986 "command": "node",

987 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

988 "env": { "BOT_TOKEN": "${user_config.bot_token}" }

989 }

990 },

991 "channels": [

992 {

993 "server": "telegram",

994 "userConfig": {

995 "bot_token": {

996 "type": "string",

997 "title": "Bot token",

998 "description": "Telegram bot token",

999 "sensitive": true

1000 }

1001 }

1002 }

1003 ]

1004}

1005```

1006 

1007`server` 必须匹配 `mcpServers` 中的键。每个频道的 `userConfig` 采用与[顶级 `userConfig` 键](#user-configuration)相同的形状。

1008 

1009对于服务器必须实现的内容以及用户如何启用频道插件,请参阅频道参考中的[打包为插件](/docs/zh-CN/channels-reference#package-as-a-plugin)。对于字段表,请参阅 [`channels`](/docs/zh-CN/plugins/manifest-reference#channels)。

1010 

1011<h3 id="monitors">

1012 监视器

1013</h3>

1014 

1015监视器是在整个会话中在后台运行的 shell 命令。它打印的内容作为通知到达 Claude,所以 Claude 可以对日志或状态更改做出反应,而无需被要求观看它。将条目保存在 `monitors/monitors.json` 中:

1016 

1017```json monitors/monitors.json theme={null}

1018[

1019 {

1020 "name": "error-log",

1021 "command": "tail -F ./logs/error.log",

1022 "description": "Application error log"

1023 }

1024]

1025```

1026 

1027命令在 shell 中运行,在会话启动的工作目录中。

1028 

1029监视器的命令在它启动的位置和它可以引用的内容中受到限制:

1030 

1031* **仅交互式会话**:插件监视器在交互式会话中启动,从不在带 `-p` 标志的非交互式模式中。它们也仅在 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool)可用的地方启动

1032* **无用户配置**:`command` 获取[路径变量](#path-variables-and-persistent-data)和环境中的 `${ENV_VAR}`,但从不获取 `${user_config.*}`。引用一个的监视器不启动,监视器进程也不接收 `CLAUDE_PLUGIN_OPTION_<KEY>`

1033* **中途禁用**:如果您在会话中途禁用插件,Claude Code 不停止已经运行的监视器。它们在会话结束时停止

1034 

1035`experimental.monitors` 清单键采用相同的数组内联或 JSON 文件的路径,并代替 `monitors/monitors.json` 读取。

1036 

1037对于 `when` 触发器和其他字段,请参阅 [`monitors`](/docs/zh-CN/plugins/manifest-reference#monitors)。

1038 

1039<h2 id="user-configuration">

1040 要求用户提供配置值

1041</h2>

1042 

1043在 `userConfig` 清单键中声明您的插件需要的值,以便用户不自己编辑 `settings.json`。每个选项显示在一个对话框中,其 `title` 作为标签,其 `description` 在下方。

1044 

1045为令牌或密码设置 `"sensitive": true`。对话框然后掩盖输入,值存储在安全存储中而不是 `settings.json`。

1046 

1047此清单要求端点和令牌:

1048 

1049```json .claude-plugin/plugin.json theme={null}

1050{

1051 "name": "my-plugin",

1052 "userConfig": {

1053 "api_url": {

1054 "type": "string",

1055 "title": "API URL",

1056 "description": "Base URL of your team's API"

1057 },

1058 "api_token": {

1059 "type": "string",

1060 "title": "API token",

1061 "description": "Token for your team's API",

1062 "sensitive": true

1063 }

1064 }

1065}

1066```

1067 

1068<h3 id="when-the-configuration-dialog-appears">

1069 配置对话框何时出现

1070</h3>

1071 

1072对话框仅在交互式 `/plugin` 界面中出现。当用户执行以下任何操作时,它为任何尚未设置的选项打开:

1073 

1074* 在 `/plugin` 中安装插件

1075* 在会话内运行 `/plugin install <plugin>@<marketplace>`

1076* 从 `/plugin` 中的 **Installed** 标签启用插件

1077 

1078要在任何时间打开相同的对话框,用户运行 `/plugin configure <plugin>@<marketplace>`。

1079 

1080`claude plugin install` shell 命令从不提示 `userConfig` 值。要从 shell 设置值,将每个值作为 `--config KEY=VALUE` 传递。当选项保持未设置时,命令打印一个 `userConfig options not yet set` 行,命名两种设置它们的方式。[`userConfig` 对话框从不出现](/docs/zh-CN/plugins/troubleshooting#the-userconfig-dialog-never-appears)引用该行。

1081 

1082对于选项字段、每个值存储的位置、组件如何引用保存的值以及哪些字段拒绝 `${user_config.*}`,请参阅[用户配置](/docs/zh-CN/plugins/manifest-reference#user-configuration)。

1083 

1084<h2 id="path-variables-and-persistent-data">

1085 引用插件路径和存储数据

1086</h2>

1087 

1088您不知道您的插件将被安装在哪里,所以通过这些变量而不是固定路径引用其文件和数据。它们在 skill、命令和 agent 内容、hook 和监视器命令以及 MCP 和 LSP 服务器配置中被替换。它们也被导出到 hook、MCP 和 LSP 进程:

1089 

1090* **`${CLAUDE_PLUGIN_ROOT}`**:插件的安装目录。每个版本都有自己的[缓存目录](/docs/zh-CN/plugins/loading#find-plugins-on-disk),所以当插件更新时路径改变。不要在那里写状态

1091* **`${CLAUDE_PLUGIN_DATA}`**:一个在更新中存活的目录,用于 `node_modules`、虚拟环境和缓存。它解析为 `~/.claude/plugins/data/<id>/` 并在首次引用时创建

1092* **`${CLAUDE_PROJECT_DIR}`**:项目根目录,hooks 接收的相同值

1093 

1094在数据目录路径中,`<id>` 是插件标识符,每个字符除了字母、数字、`_` 和 `-` 被替换为 `-`,所以 `my-plugin@my-marketplace` 变成 `my-plugin-my-marketplace`。

1095 

1096在 Windows 上,替换的路径使用正斜杠,所以 shell 不将反斜杠读取为转义。

1097 

1098<h3 id="install-dependencies-into-the-data-directory">

1099 将依赖项安装到数据目录

1100</h3>

1101 

1102对于市场安装的插件,Claude Code 在缓存插件时自动安装符合条件的 [Node.js 包依赖项](/docs/zh-CN/plugins/loading#node-js-package-dependencies),所以您可能不需要自己安装它们。当您这样做时,此 `SessionStart` hook 在首次运行时将 `node_modules` 安装到 `${CLAUDE_PLUGIN_DATA}` 中,并在更新改变 `package.json` 后再次安装:

1103 

1104```json hooks/hooks.json theme={null}

1105{

1106 "hooks": {

1107 "SessionStart": [

1108 {

1109 "hooks": [

1110 {

1111 "type": "command",

1112 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""

1113 }

1114 ]

1115 }

1116 ]

1117 }

1118}

1119```

1120 

1121在第一个会话后,`~/.claude/plugins/data/<id>/node_modules` 存在。MCP 服务器然后可以在其 `env` 中设置 `NODE_PATH` 为 `${CLAUDE_PLUGIN_DATA}/node_modules`。对于哪些字段替换哪个变量,请参阅[环境变量](/docs/zh-CN/plugins/manifest-reference#environment-variables)。

1122 

1123<h2 id="next-steps">

1124 后续步骤

1125</h2>

1126 

1127* [插件清单参考](/docs/zh-CN/plugins/manifest-reference):`plugin.json` 字段、路径规则和标准布局

1128* [使用 evals 测试插件](/docs/zh-CN/plugin-evals):检查您添加的组件以您打算的方式改变 Claude 的行为

1129* [发布和分发插件](/docs/zh-CN/plugins/publish):版本化插件并将其放在市场中

1130* [排查插件问题](/docs/zh-CN/plugins/troubleshooting):当组件不加载或 hook 不触发时该怎么办

plugins/create.md +424 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 创建 Claude Code 插件

6 

7> 从空目录构建您的第一个 Claude Code 插件,在没有市场的情况下测试它,并转换现有的 .claude/ 设置。

8 

9插件是一个包含技能、代理、hooks 和 MCP 服务器的目录,加上一个名为 `plugin.json` 的文件(称为清单),用于命名插件。Claude Code 将该目录作为一个单元加载,因此您可以与团队成员共享它、在多个项目中安装它,或将其发布到市场。

10 

11本页面适用于编写自己插件的人员。

12 

13<Note>

14 其他页面涵盖了这些情况:

15 

16 * **安装他人的插件**:请参阅[安装插件](/docs/zh-CN/plugins/install)

17 * **不确定是否需要插件**:请参阅概述中的[决定是否需要插件](/docs/zh-CN/plugins/overview#decide-whether-you-need-a-plugin)

18 * **您的插件用户在 claude.ai 或 Cowork 中**:同一文件夹在那里安装,但组件子集不同。请参阅[claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)

19</Note>

20 

21从与您已有内容相匹配的部分开始:

22 

23* **还没有任何内容**:按照[创建您的第一个插件](#create-your-first-plugin),然后[在没有市场的情况下开发](#develop-without-a-marketplace)和[测试和调试](#test-and-debug)。

24* **`.claude/` 下已有文件**:完成一次第一个插件演练以了解布局,然后按照[转换现有的 `.claude/` 设置](#convert-an-existing-claude-setup)。

25 

26<h2 id="decide-when-to-use-a-plugin">

27 决定何时使用插件

28</h2>

29 

30技能、代理、hooks 和 MCP 服务器都可以在您的项目或主目录中独立工作。当它只为一个项目或仅为您服务时,保持该独立设置。当您想与团队成员共享设置、在多个项目中安装它或发布版本化发布时,创建一个插件。

31 

32当您将独立的技能、代理、hooks 和 MCP 配置移动到插件中时,它们的位置和名称会改变:

33 

34* **文件的位置**:在插件自己的目录(称为插件根目录)下,作为 `skills/`、`agents/`、`hooks/hooks.json` 和 `.mcp.json`。

35* **它们的命名方式**:插件技能和代理获得插件名称作为前缀,例如 `/my-plugin:hello`,因此两个插件可以各自提供一个 `hello` 技能而不会冲突。

36 

37要将现有设置移动到插件中,请参阅[转换现有的 `.claude/` 设置](#convert-an-existing-claude-setup)。

38 

39<h2 id="create-your-first-plugin">

40 创建您的第一个插件

41</h2>

42 

43在本演练中,您创建一个插件,其唯一组件是一个技能(问候),并使用 `--plugin-dir` 运行它,该选项为一个会话加载插件而不安装它。插件可以包含任何[组件](/docs/zh-CN/plugins/components)的混合,例如技能、代理、hooks 和 MCP 服务器,没有任何是必需的;一个技能是显示布局的最小示例。

44 

45您需要 Claude Code [已安装并登录](/docs/zh-CN/quickstart#step-1-install-claude-code)。

46 

47在您想保留插件的目录(例如 `~/projects`)中打开终端,并从中运行这些步骤中的命令。您可以将插件保留在任何地方,因为您在启动会话时将其路径传递给 Claude Code。

48 

49<Steps>

50 <Step title="创建插件目录">

51 创建插件目录,其中包含一个 `.claude-plugin/` 文件夹来保存清单:

52 

53 ```bash theme={null}

54 mkdir -p my-first-plugin/.claude-plugin

55 ```

56 </Step>

57 

58 <Step title="编写清单">

59 [清单](/docs/zh-CN/plugins/manifest-reference)是一个名为 `plugin.json` 的 JSON 文件,它告诉 Claude Code 插件的名称并描述它。将此清单保存为 `my-first-plugin/.claude-plugin/plugin.json`:

60 

61 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}

62 {

63 "name": "my-first-plugin",

64 "description": "A greeting plugin to learn the basics",

65 "version": "1.0.0",

66 "author": {

67 "name": "Your Name"

68 }

69 }

70 ```

71 

72 这四个字段的作用如下:

73 

74 * **`name`**:必需。它标识插件并成为插件提供的每个技能和代理的前缀。不要在其中放置空格。

75 * **`description`**:用户在 `/plugin` 中看到的插件文本。

76 * **`version`**:可选。设置它可以让用户保持该版本,直到您更改它;[发布新版本](/docs/zh-CN/plugins/host-marketplace#release-a-new-version)说明何时设置或省略它。

77 * **`author`**:要归功的人。其中 `name` 是必需的;`email` 和 `url` 是可选的。

78 

79 每个其他字段都在[清单参考](/docs/zh-CN/plugins/manifest-reference#fields)上。

80 

81 只有 `plugin.json` 放在 `.claude-plugin/` 内。您接下来添加的技能直接放在 `my-first-plugin/` 下,在该文件夹旁边。

82 </Step>

83 

84 <Step title="添加技能">

85 此插件的一个组件是一个技能。每个技能是 `skills/` 下的一个目录,包含一个 `SKILL.md` 文件。创建技能的目录:

86 

87 ```bash theme={null}

88 mkdir -p my-first-plugin/skills/hello

89 ```

90 

91 然后使用以下内容创建 `my-first-plugin/skills/hello/SKILL.md`:

92 

93 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

94 ---

95 name: hello

96 description: Greet the user with a friendly message

97 disable-model-invocation: true

98 ---

99 

100 Greet the user warmly and ask how you can help them today.

101 ```

102 

103 `disable-model-invocation: true` 行意味着 Claude 不会自己运行该技能,因此只有您触发它。从您希望 Claude 自己运行的技能中删除该行。技能的命令结合了插件名称和技能的名称,因此您将此技能作为 `/my-first-plugin:hello` 运行。对于其他 frontmatter 字段,请参阅[技能 frontmatter 参考](/docs/zh-CN/skills#frontmatter-reference)。

104 </Step>

105 

106 <Step title="验证插件">

107 在运行任何内容之前检查清单和技能的 frontmatter:

108 

109 ```bash theme={null}

110 claude plugin validate ./my-first-plugin

111 ```

112 

113 该命令打印它检查的清单路径和 `✔ Validation passed`。如果它打印 `✘ Validation failed`,则上面该结果行的每一行都命名要修复的字段。在[`claude plugin validate` 报告错误](/docs/zh-CN/plugins/troubleshooting#claude-plugin-validate-reports-errors)下查找每条消息。

114 </Step>

115 

116 <Step title="使用插件运行 Claude Code">

117 启动加载了插件的会话:

118 

119 ```bash theme={null}

120 claude --plugin-dir ./my-first-plugin

121 ```

122 

123 Claude Code 启动后,运行该技能:

124 

125 ```text theme={null}

126 /my-first-plugin:hello

127 ```

128 

129 Claude 用问候语回复。

130 </Step>

131</Steps>

132 

133插件仅在您使用 `--plugin-dir` 启动的会话中加载。要继续处理它而不使用该标志,或测试 `.zip` 构建,请参阅[在没有市场的情况下开发](#develop-without-a-marketplace)。

134 

135<h3 id="share-the-plugin">

136 共享您的插件

137</h3>

138 

139使用[创建您的第一个插件](#create-your-first-plugin)构建的插件仅存在于您的机器上。当它准备好供其他人使用时,有三种方式可以将其提供给他们:

140 

141* **直接发送给少数人**:给他们插件的目录或其 `.zip`,无需发布任何内容。请参阅[在没有市场的情况下共享插件](/docs/zh-CN/plugins/publish#share-a-plugin-without-a-marketplace)。

142* **在您自己的市场中列出它**:团队成员添加您的市场一次并按名称安装插件,他们会收到您的更新。请参阅[通过您自己的市场发布](/docs/zh-CN/plugins/publish#publish-through-your-own-marketplace)。

143* **提交到 Anthropic 的社区市场**:一旦列出,任何添加该市场的人都可以安装它。请参阅[提交到社区市场](/docs/zh-CN/plugins/publish#submit-to-the-community-marketplace)。

144 

145<h3 id="plugin-layout">

146 插件布局

147</h3>

148 

149每种[组件](/docs/zh-CN/plugins/components)(例如技能、代理、hooks 和 MCP 服务器)都在插件根目录下的固定目录中,插件根目录是您传递给 `--plugin-dir` 的目录。仅添加您使用的目录。要点击完整的插件目录并阅读每个文件的作用,请打开[插件浏览器](/docs/zh-CN/plugins/components#explore-the-plugin-directory)。

150 

151该表列出了大多数插件开始使用的目录,[完整布局](/docs/zh-CN/plugins/manifest-reference#standard-layout)列出了其余的。

152 

153| 位置 | 内容 |

154| :--------------------------- | :------------------------------------------------------- |

155| `.claude-plugin/plugin.json` | 清单。当您使用 `--plugin-dir` 加载插件且它没有清单时,Claude Code 会以其目录命名插件 |

156| `skills/` | 每个技能一个 `<name>/SKILL.md` 目录 |

157| `commands/` | 平面 Markdown 文件,技能的较旧形式。对于新插件,使用 `skills/` |

158| `agents/` | 每个子代理一个 Markdown 文件 |

159| `hooks/hooks.json` | Hook 配置:一个顶级 `"hooks"` 键,其值的形状与设置文件中的 `hooks` 相同 |

160| `.mcp.json` | MCP 服务器定义 |

161 

162<Warning>

163 只有 `plugin.json` 放在 `.claude-plugin/` 内。保存在那里的组件不会加载。

164 

165 插件根目录是插件自己的目录,不是 `~/.claude/` 本身。保存在 `~/.claude/.mcp.json` 的 `.mcp.json` 不会加载。

166</Warning>

167 

168<h2 id="develop-without-a-marketplace">

169 在没有市场的情况下开发

170</h2>

171 

172您不需要[市场](/docs/zh-CN/plugins/overview#get-plugins-from-a-marketplace)来运行您正在编写的插件。改为直接从磁盘或 URL 加载它:

173 

174* [`--plugin-dir`](#load-a-directory-or-archive-for-one-session):为一个会话加载目录或 `.zip` 存档。

175* [`--plugin-url`](#fetch-an-archive-from-a-url-for-one-session):为一个会话从 URL 获取 `.zip` 存档。

176* [`claude plugin init`](#scaffold-a-plugin-that-loads-every-session):在 `~/.claude/skills/` 下搭建一个插件,在每个会话中加载。

177 

178如果以不同方式加载的两个插件共享一个名称,请参阅[名称冲突](/docs/zh-CN/plugins/loading#name-conflicts)以了解 Claude Code 保留哪一个。

179 

180<h3 id="load-a-directory-or-archive-for-one-session">

181 为一个会话加载插件

182</h3>

183 

184您可以通过三种方式为单个会话加载插件:使用 `--plugin-dir` 从磁盘上的目录或 `.zip` 存档,使用 `--plugin-url` 从 URL,或从环境变量(当您无法添加标志时)。每个插件仅为该会话加载,不会为其写入任何内容到您的设置中。当您在会话期间编辑插件的文件时,运行 `/reload-plugins` 以加载更改。

185 

186<h4 id="from-a-directory-or-zip">

187 从目录或 `.zip`

188</h4>

189 

190当您从 shell 启动 `claude` 时,使用插件的根目录或其 `.zip` 存档传递 `--plugin-dir`。重复该标志以加载多个插件:

191 

192```bash theme={null}

193claude --plugin-dir ./my-first-plugin --plugin-dir ./other-plugin.zip

194```

195 

196<h4 id="load-a-folder-of-plugins">

197 从插件文件夹

198</h4>

199 

200要从一个地方加载多个插件,请传递一个包含它们的文件夹,例如 `--plugin-dir ./plugins`。加载插件文件夹需要 Claude Code v2.1.265 或更高版本。

201 

202如果文件夹没有 `.claude-plugin/` 目录且其顶级没有插件组件,Claude Code 会将其视为插件文件夹。然后,每个具有 `.claude-plugin/plugin.json` 清单的直接子文件夹都作为单独的插件加载。文件夹中的所有其他内容都被跳过而不出错,包括没有清单的子文件夹。如果文件夹中的插件不加载,请检查其子文件夹是否具有 `.claude-plugin/plugin.json`。

203 

204在交互式会话中,您还可以在启动后在文件夹中添加和删除插件:

205 

206* 您添加的子文件夹一旦其清单存在就作为新插件加载。

207* 当您删除子文件夹时,其插件卸载。

208 

209会话中会为这些更改中的每一个显示一条消息。如果在对话中间加载或卸载插件会[使提示缓存失效](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),则更改会被保留,消息会告诉您运行 `/reload-plugins` 以应用它。

210 

211<h4 id="fetch-an-archive-from-a-url-for-one-session">

212 从 URL

213</h4>

214 

215当您从 shell 启动 `claude` 时,使用 `.zip` 存档的地址传递 `--plugin-url`,例如您的 CI 发布的构建工件:

216 

217```bash theme={null}

218claude --plugin-url https://example.com/my-first-plugin.zip

219```

220 

221Claude Code 在启动时下载存档。要加载多个,重复该标志或在一个带引号的参数中传递以空格分隔的 URL。

222 

223仅将该标志指向您控制或信任的存档。

224 

225如果 Claude Code 无法获取存档或存档无效,它会在没有插件的情况下启动,并记录一个插件加载错误,您可以在 `/plugin` 管理器的**错误**选项卡中查看。

226 

227<h4 id="from-an-environment-variable">

228 从环境变量

229</h4>

230 

231要在无法添加 `--plugin-dir` 标志的会话中加载插件,请在 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables) 环境变量中列出它们的绝对路径。Claude Code 将每个路径作为 `--plugin-dir` 路径加载。这些插件除了您使用 `--plugin-dir` 传递的任何插件外还会加载。[项目和本地设置无法设置此变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)。`CLAUDE_CODE_PLUGIN_DIRS` 需要 Claude Code v2.1.280 或更高版本。

232 

233托管设置可以关闭 `--plugin-dir` 和 `CLAUDE_CODE_PLUGIN_DIRS`。请参阅[为一个会话加载插件的标志](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)。要测试插件及其依赖项,请参阅[在本地测试插件及其依赖项](/docs/zh-CN/plugins/dependencies#test-a-plugin-and-its-dependency-locally)。

234 

235<h3 id="scaffold-a-plugin-that-loads-every-session">

236 使插件在每个会话中加载

237</h3>

238 

239您的个人技能目录是 `~/.claude/skills/`。Claude Code 将那里包含 `.claude-plugin/plugin.json` 的任何文件夹作为插件在每个会话中加载,无需标志和无需安装步骤。`claude plugin init` 为您搭建其中一个插件。

240 

241<h4 id="scaffold-the-plugin-with-claude-plugin-init">

242 使用 `claude plugin init` 搭建插件

243</h4>

244 

245`claude plugin init` 在 `~/.claude/skills/` 下写入一个启动插件。需要 Claude Code v2.1.157 或更高版本。从您的 shell 搭建一个:

246 

247```bash theme={null}

248claude plugin init my-tool

249```

250 

251该命令创建 `~/.claude/skills/my-tool/`,其中包含 `.claude-plugin/plugin.json` 和根 `SKILL.md`。它打印 `✔ Created plugin "my-tool" at ~/.claude/skills/my-tool`,然后是 `It will auto-load next session as my-tool@skills-dir. Run /reload-plugins to load it now.`

252 

253传递 `--with skills` 以让 `claude plugin init` 为您在 `skills/` 下搭建一个技能。其他 `--with` 值在[插件命令参考](/docs/zh-CN/plugins/cli-reference#plugin-init)上。

254 

255<h4 id="skill-names-in-a-scaffolded-plugin">

256 命名插件的技能

257</h4>

258 

259`~/.claude/skills/my-tool/SKILL.md` 处的根技能也是个人技能,因此您将其作为 `/my-tool` 而不是 `/my-tool:my-tool` 调用。您在插件内 `skills/` 下添加的技能获得插件名称前缀,例如 `/my-tool:example`。

260 

261<h4 id="stop-loading-the-plugin">

262 停止加载插件

263</h4>

264 

265要停止加载搭建的插件,删除其目录,或在 shell 中使用 `claude plugin init` 打印的 `my-tool@skills-dir` 名称运行 `claude plugin disable my-tool@skills-dir`。在 ID `my-tool@skills-dir` 中,`skills-dir` 代替市场名称,因为插件从您的技能目录而不是从市场加载。

266 

267<h4 id="load-a-plugin-for-everyone-in-one-repository">

268 通过存储库共享插件

269</h4>

270 

271`claude plugin init` 将插件写入您的个人技能目录 `~/.claude/skills/`,因此它在每个项目中为您加载。要使插件为一个存储库中的每个人加载,请在 `<project>/.claude/skills/<name>/` 处自己创建相同的布局,包括其 `.claude-plugin/plugin.json`。请参阅[通过存储库共享的插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)以了解 Claude Code 加载它的条件。

272 

273<h2 id="test-and-debug">

274 测试和调试

275</h2>

276 

277当对插件的更改没有显示时,按顺序完成这些检查。每一个都告诉您 Claude Code 对插件做了什么:

278 

2791. 在您的 shell 中,运行 `claude plugin validate <path>`。它检查清单和每个技能、代理和命令文件的 frontmatter,并在 `Validation passed` 时退出 `0`。添加 `--strict` 也会在警告时失败。退出代码和目录处理在[插件命令参考](/docs/zh-CN/plugins/cli-reference#plugin-validate)上。

2802. 在运行的会话中,运行 `/reload-plugins` 以应用您在磁盘上所做的编辑。它打印一个 `Reloaded:` 行,其中包含计数。然后通过键入其 `/plugin-name:skill` 命令或在 `/plugin` **已安装**选项卡中找到插件来确认技能已加载。

2813. 在同一会话中,运行 `/plugin`。**已安装**选项卡列出您的插件,在插件的详细信息中,Claude Code 找到的组件。**错误**选项卡列出了什么未能加载以及原因,例如清单中不存在的路径。

2824. 回到您的 shell,运行 `claude plugin list`。它在各自的部分中打印仅会话和技能目录插件,带有 `Status: ✔ loaded` 或加载错误。要包括您正在开发的插件,请在 `plugin list` 之前使用其路径传递 `--plugin-dir`。

283 

284要检查 MCP 服务器,请在会话中运行 `/mcp` 以查看服务器的状态。当服务器健康时,`/mcp` 将其列为已连接。如果不是,请参阅[不启动的 MCP 服务器](/docs/zh-CN/plugins/troubleshooting#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start)。

285 

286要检查 hook,触发它匹配的事件。例如,要求 Claude 编辑文件以触发 `PostToolUse` hook。然后阅读[调试日志](/docs/zh-CN/hooks#debug-hooks),它显示哪些 hooks 匹配、它们的退出代码和它们的输出。

287 

288下一部分涵盖您在开发时最可能遇到的失败,[故障排除页面](/docs/zh-CN/plugins/troubleshooting#build-a-plugin)对每一个都有完整的条目。

289 

290<h3 id="a-component-path-isn’t-found">

291 找不到组件路径

292</h3>

293 

294`/plugin` 的**错误**选项卡显示 `<component> path not found: <path>`,例如 `commands path not found`。清单中的组件路径(例如 `commands`、`skills`、`agents` 或 `hooks`)指向不存在的内容。修复路径或创建目录,然后在会话中运行 `/reload-plugins`。请参阅[`commands path not found`](/docs/zh-CN/plugins/troubleshooting#commands-path-not-found)。

295 

296<h3 id="plugin-dir-at-a-marketplace-root-doesn’t-load-the-plugins-under-plugins/">

297 `--plugin-dir` 在市场根目录不加载 `plugins/` 下的插件

298</h3>

299 

300`--plugin-dir` 采用插件的根目录,即包含 `.claude-plugin/plugin.json` 和组件目录(如 `skills/`)的目录。如果您改为将其指向市场根目录,Claude Code 不会读取 `marketplace.json`,因此 `plugins/` 下的插件不会加载,您看不到错误。将标志指向一个插件的文件夹,或添加市场。请参阅[故障排除条目](/docs/zh-CN/plugins/troubleshooting#plugin-dir-loads-a-plugin-with-no-components)。

301 

302<h3 id="the-plugin-loads-but-its-skills-are-missing">

303 插件加载但其技能缺失

304</h3>

305 

306`skills/` 目录在 `.claude-plugin/` 内,或清单中的 `skills` 条目指向一个文件。将 `skills/` 移动到插件根目录,将每个 `skills` 条目指向包含 `SKILL.md` 的目录,并在会话中运行 `/reload-plugins`。请参阅[插件加载但其技能缺失](/docs/zh-CN/plugins/troubleshooting#plugin-loads-but-its-skills-are-missing)。

307 

308<h3 id="the-userconfig-dialog-never-appears">

309 `userConfig` 对话框从不出现

310</h3>

311 

312您的插件的 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 选项的对话框是通过会话中的 `/plugin` 安装的一部分。使用 `--plugin-dir` 加载不会显示它,`claude plugin install` 在 shell 中也不会。加载插件后,在会话中运行 `/plugin configure <plugin-name>` 以打开它。请参阅[`userConfig` 对话框从不出现](/docs/zh-CN/plugins/troubleshooting#the-userconfig-dialog-never-appears)。

313 

314<h3 id="check-that-the-plugin-changes-claude’s-behavior">

315 检查插件是否改变了 Claude 的行为

316</h3>

317 

318加载时没有错误的插件仍然可能无法按您的意图引导 Claude。`claude plugin eval`(您在 shell 中运行)使用和不使用插件运行您的测试用例,并对差异进行评分。请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals),从[创建您的第一个 eval 套件](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)开始。

319 

320<h2 id="convert-an-existing-claude-setup">

321 转换现有的 `.claude/` 设置

322</h2>

323 

324如果您已经在项目的 `.claude/` 目录下有技能、代理或 hooks,您可以将它们移动到插件中而无需重写它们。

325 

326从项目根目录(包含 `.claude/` 的目录)运行这些步骤中的命令,因为 `cp` 路径相对于它。

327 

328<Steps>

329 <Step title="创建插件结构">

330 在 `.claude/` 旁边创建插件目录及其 `.claude-plugin/` 文件夹。您之后可以将插件移动到任何地方。

331 

332 ```bash theme={null}

333 mkdir -p my-plugin/.claude-plugin

334 ```

335 

336 创建 `my-plugin/.claude-plugin/plugin.json`:

337 

338 ```json my-plugin/.claude-plugin/plugin.json theme={null}

339 {

340 "name": "my-plugin",

341 "description": "Migrated from standalone configuration",

342 "version": "1.0.0"

343 }

344 ```

345 </Step>

346 

347 <Step title="复制您现有的文件">

348 将您拥有的每个配置目录复制到插件根目录,并跳过您没有的任何目录的命令。

349 

350 ```bash theme={null}

351 cp -r .claude/commands my-plugin/

352 ```

353 

354 ```bash theme={null}

355 cp -r .claude/agents my-plugin/

356 ```

357 

358 ```bash theme={null}

359 cp -r .claude/skills my-plugin/

360 ```

361 

362 运行 `ls -a my-plugin` 以确认您复制的每个目录都出现在 `.claude-plugin` 旁边。

363 </Step>

364 

365 <Step title="移动您的 hooks">

366 如果您在 `.claude/settings.json` 或 `.claude/settings.local.json` 中有 hooks,请创建一个 hooks 目录:

367 

368 ```bash theme={null}

369 mkdir -p my-plugin/hooks

370 ```

371 

372 创建 `my-plugin/hooks/hooks.json` 并将您的设置文件中的 `hooks` 对象复制到其中。格式相同。

373 

374 此示例显示了形状,其中一个 hook 在 Claude 写入或编辑每个文件时运行 linter。用您自己的 `hooks` 对象替换示例。

375 

376 ```json my-plugin/hooks/hooks.json theme={null}

377 {

378 "hooks": {

379 "PostToolUse": [

380 {

381 "matcher": "Write|Edit",

382 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]

383 }

384 ]

385 }

386 }

387 ```

388 </Step>

389 

390 <Step title="测试迁移的插件">

391 为一个会话加载插件:

392 

393 ```bash theme={null}

394 claude --plugin-dir ./my-plugin

395 ```

396 

397 在其新名称下检查每个组件:

398 

399 * **技能**:对于曾经是 `/deploy` 的技能,运行 `/my-plugin:deploy`。

400 * **子代理**:要求 Claude 为曾经是 `reviewer` 的代理使用 `my-plugin:reviewer` 代理。

401 * **Hooks**:触发每个 hook 匹配的事件。

402 

403 如果缺少什么,请完成[测试和调试](#test-and-debug)。

404 </Step>

405</Steps>

406 

407虽然原始文件仍在 `.claude/` 下,但它们与插件的副本一起保持加载:

408 

409* **技能和代理**:这两个集合不会冲突,因为插件的技能和代理带有 `my-plugin:` 前缀。`/deploy` 和 `/my-plugin:deploy` 都有效,Claude 将 `reviewer` 和 `my-plugin:reviewer` 视为两个子代理。

410* **Hooks**:hooks 没有前缀,因此同时在您的设置文件和 `hooks/hooks.json` 中的 hook 在其事件每次触发时运行两次。

411 

412在您确认插件有效后,从 `.claude/` 中删除原始文件,并从您的设置文件中删除 `hooks` 对象。

413 

414<h2 id="next-steps">

415 后续步骤

416</h2>

417 

418* [插件组件](/docs/zh-CN/plugins/components):向您的插件添加代理、hooks、MCP 服务器、LSP 服务器和用户配置

419* [使用 evals 测试插件](/docs/zh-CN/plugin-evals):编写 eval 用例并使用 `claude plugin eval` 运行它们以检查插件引导 Claude 行为的可靠性

420* [发布插件](/docs/zh-CN/plugins/publish):对其进行版本控制,将其放在市场中,并提交到社区市场

421* [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview):同一插件文件夹在 claude.ai 和 Cowork 中安装。某些组件仅限 Claude Code

422* [插件清单参考](/docs/zh-CN/plugins/manifest-reference):每个 `plugin.json` 字段、路径规则和目录

423* [技能](/docs/zh-CN/skills):编写您的插件提供的技能

424* [Anthropic 在 claude-code 存储库中的插件](https://github.com/anthropics/claude-code/tree/main/plugins):本页面布局的完整工作示例,例如 `feature-dev` 和 `code-review`

plugins/create-marketplace.md +251 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 创建一个 marketplace

6 

7> 从 marketplace.json 文件构建一个 plugin marketplace,并在托管之前在本地测试它。

8 

9plugin marketplace 是一个目录或仓库,包含一个 `.claude-plugin/marketplace.json` 文件,该文件列出你的 plugins 以及从哪里获取每一个。你将目录推送到 git 主机,任何有权限的人都可以用一个命令在 Claude Code 中注册它,并从中安装你的 plugins。

10 

11当你想让一个你选择的群体(例如你的团队或组织)安装你的 plugins 并继续从你控制的目录接收更新时,创建你自己的 marketplace。该仓库可以是私有的,可以列出任意数量的 plugins,管理员可以[在每台机器上要求它](/docs/zh-CN/plugins/org)。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **与少数人共享一个 plugin**:将 plugin 的目录或其 `.zip` 文件发送给他们。请参阅[不使用 marketplace 共享 plugin](/docs/zh-CN/plugins/publish#share-a-plugin-without-a-marketplace)。

17 * **向所有人提供一个 plugin**:将其提交到 Anthropic 的社区 marketplace。请参阅[提交到社区 marketplace](/docs/zh-CN/plugins/publish#submit-to-the-community-marketplace)。

18 * **自己使用一个 plugin**:使用 `--plugin-dir` 加载它或将其保存在你的 skills 目录中。请参阅[不使用 marketplace 开发](/docs/zh-CN/plugins/create#develop-without-a-marketplace)。

19</Note>

20 

21从[创建一个 marketplace](#create-a-marketplace) 开始,在你自己的机器上构建一个并从中安装一个 plugin,然后[添加更多 plugin 条目](#add-plugin-entries)。

22 

23<h2 id="create-a-marketplace">

24 创建一个 marketplace

25</h2>

26 

27以下步骤在你的机器上创建一个 marketplace,向其中添加一个 plugin,在 Claude Code 中注册它,并从中安装该 plugin。这是整个循环,也是你的用户一旦你在他们可以访问的地方托管 marketplace 后所经历的相同循环。从你想要创建 `my-marketplace/` 的目录在你的 shell 中运行每个命令。

28 

29你需要一个 plugin 来列出。该示例使用来自[创建你的第一个 plugin](/docs/zh-CN/plugins/create#create-your-first-plugin) 的 `my-first-plugin`,这是一个具有一个 skill 的 plugin,你可以将其作为 `/my-first-plugin:hello` 运行;如果你还没有 plugin,请先构建它。要使用你自己的 plugin,请在步骤说 `my-first-plugin` 的地方替换其目录和其 `name`。有关 plugin 目录可以包含的内容,请参阅[plugin 目录浏览器](/docs/zh-CN/plugins/components#explore-the-plugin-directory)。

30 

31<Steps>

32 <Step title="设置 marketplace 目录">

33 marketplace 是一个包含 `.claude-plugin/marketplace.json` 文件的目录,加上它列出的 plugins。创建 marketplace 目录及其 `.claude-plugin/` 文件夹,然后在 `plugins/` 下复制你的 plugin:

34 

35 ```bash theme={null}

36 mkdir -p my-marketplace/.claude-plugin my-marketplace/plugins

37 cp -r my-first-plugin my-marketplace/plugins/

38 ```

39 

40 检查 plugin 现在所在的位置是否有效,以便任何后续错误都是关于 marketplace 而不是 plugin 的:

41 

42 ```bash theme={null}

43 claude plugin validate ./my-marketplace/plugins/my-first-plugin

44 ```

45 

46 输出的最后一行读作 `✔ Validation passed`。

47 </Step>

48 

49 <Step title="创建 marketplace 文件">

50 在 `my-marketplace/.claude-plugin/marketplace.json` 处保存 `marketplace.json`。该文件需要一个 `name`、一个 `owner` 和一个 `plugins` 数组。

51 

52 `plugins` 中的每个对象都是一个 plugin 条目,需要一个 `name` 和一个 `source`。将条目的 `source` 写成从 marketplace 根目录的路径。根目录是 `my-marketplace/`,即包含 `.claude-plugin/` 的目录。

53 

54 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}

55 {

56 "name": "my-marketplace",

57 "description": "Plugins for my team",

58 "owner": {

59 "name": "Your Name"

60 },

61 "plugins": [

62 {

63 "name": "my-first-plugin",

64 "source": "./plugins/my-first-plugin",

65 "description": "A greeting plugin to learn the basics"

66 }

67 ]

68 }

69 ```

70 </Step>

71 

72 <Step title="验证 marketplace">

73 在 marketplace 目录上运行 `claude plugin validate` 以检查 JSON 语法、必需字段以及其 `.claude-plugin/marketplace.json` 中的每个 plugin 条目。

74 

75 ```bash theme={null}

76 claude plugin validate ./my-marketplace

77 ```

78 

79 对于在步骤 2 中编写的文件,输出的最后一行读作 `✔ Validation passed`。

80 </Step>

81 

82 <Step title="添加 marketplace 并安装 plugin">

83 将目录注册为 marketplace。

84 

85 ```bash theme={null}

86 claude plugin marketplace add ./my-marketplace

87 ```

88 

89 该命令打印 `✔ Successfully added marketplace: my-marketplace (declared in user settings)`,这意味着 marketplace 已记录在你的用户设置文件中。

90 

91 安装 plugin。安装 id 是条目的 `name`、一个 `@` 和 marketplace 的 `name`。

92 

93 ```bash theme={null}

94 claude plugin install my-first-plugin@my-marketplace

95 ```

96 

97 该命令打印 `✔ Successfully installed plugin: my-first-plugin@my-marketplace (scope: user)`。

98 

99 在会话内,`/plugin marketplace add ./my-marketplace` 以相同的方式注册 marketplace。`/plugin install my-first-plugin@my-marketplace` 在 `/plugin` 面板中打开 plugin 的详细信息,你可以在其中安装它。有关该流程,请参阅[安装和管理 plugins](/docs/zh-CN/plugins/install)。

100 </Step>

101 

102 <Step title="确认 plugin 已加载">

103 列出已安装的 plugins。

104 

105 ```bash theme={null}

106 claude plugin list

107 ```

108 

109 输出列出 `my-first-plugin@my-marketplace`,其 `Status: ✔ enabled`。

110 

111 要查看 plugin 加载了什么,请显示其详细信息。

112 

113 ```bash theme={null}

114 claude plugin details my-first-plugin

115 ```

116 

117 `Component inventory` 部分读作 `Skills (1) hello`。

118 

119 要运行该 skill,启动一个会话并输入 `/my-first-plugin:hello`。Claude 会向你问好。该命令以 plugin 的名称作为前缀,就像每个 plugin skill 的名称一样。

120 </Step>

121</Steps>

122 

123<h2 id="add-plugin-entries">

124 添加 plugin 条目

125</h2>

126 

127你分发的每个 plugin 都是 `marketplace.json` 的 `plugins` 数组中的一个对象。要添加第二个 plugin,请添加第二个对象。这些字段涵盖了大多数条目:

128 

129* `name`:人们在安装时在 `@` 之前输入的标识符。它不能包含空格。

130* `source`:Claude Code 从哪里获取 plugin。对于 marketplace 目录内的 plugin,写一个相对路径字符串,如[演练](#create-a-marketplace)中所示,或对于目录外的 plugin,写一个源对象。请参阅[选择 plugin 源](#choose-a-plugin-source)。

131* `description`:人们在 `/plugin` 中浏览你的 marketplace 时在 plugin 旁边看到的行。

132 

133有关完整的字段列表,请参阅[Plugin 条目](/docs/zh-CN/plugins/marketplace-reference#plugin-entries)。

134 

135条目也可以设置任何 [`plugin.json`](/docs/zh-CN/plugins/manifest-reference) 字段。有关条目的 `plugin.json` 字段何时应用于具有自己的 `plugin.json` 的 plugin,请参阅[条目和 plugin.json](/docs/zh-CN/plugins/marketplace-reference#entry-and-plugin-json)。

136 

137<h2 id="rules-for-plugin-entries">

138 Plugin 条目的规则

139</h2>

140 

141来自新 marketplace 的大多数失败安装来自于从错误目录编写的相对路径,或来自与 plugin 的 `plugin.json` 中的 `name` 不同的条目名称。

142 

143<h3 id="write-relative-paths-from-the-marketplace-root">

144 从 marketplace 根目录编写相对路径

145</h3>

146 

147marketplace 根目录是包含 `.claude-plugin/` 的目录。在[演练](#create-a-marketplace)中,那是 `my-marketplace/`,所以条目的 `source` 是 `"./plugins/my-first-plugin"`。该路径不是从 `.claude-plugin/` 内部开始的,所以不要使用 `..` 来离开它。

148 

149包含 `..` 的路径和指向不存在目录的路径在不同的命令处失败:

150 

151* **包含 `..` 的路径**:`claude plugin validate` 将条目报告为无效。消息以 `Path contains "..": ./../plugins/my-first-plugin` 开头。

152* **指向不存在目录的路径**:`claude plugin validate` 通过。`claude plugin install` 失败,显示 `Source path does not exist: <path>`,其中 `<path>` 是 Claude Code 检查的绝对位置。

153 

154<h3 id="keep-the-entry-name-and-the-manifest-name-the-same">

155 保持条目名称和清单名称相同

156</h3>

157 

158marketplace plugin 在 `marketplace.json` 中有一个条目 `name` 和在其自己的 `plugin.json` 中有一个 `name`,称为清单名称。每个名称出现在不同的地方:

159 

160* **条目名称**:安装 id,`<entry-name>@<marketplace>`。这是人们输入来安装的内容,`claude plugin list` 显示的内容,以及 Claude Code 在他们的设置文件中的 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 下写入的键。

161* **清单名称**:plugin 的 skills 上的前缀,以及 `claude plugin details` 接受的名称。

162 

163当两个名称不同且有人按清单名称安装时,Claude Code 报告 `Plugin "<manifest-name>" not found in marketplace "<marketplace>"`。保持两个名称相同。有关 Claude Code 如何使用这两个名称的更多信息,请参阅[Plugin 加载参考](/docs/zh-CN/plugins/loading#find-where-a-plugin-came-from)。

164 

165<h2 id="choose-a-plugin-source">

166 选择 plugin 源

167</h2>

168 

169`marketplace.json` 中的每个 plugin 条目都有一个 `source`,告诉 Claude Code 从哪里获取那个 plugin。根据 plugin 文件的存储位置选择源。该表列出了大多数 marketplace 所有者使用的源。

170 

171| 源 | 何时使用 | 最小 `source` 值 |

172| :----------- | :----------------------------- | :---------------------------------------------------------------------------------------- |

173| 相对路径 | plugin 的文件在 marketplace 目录内 | `"./plugins/my-first-plugin"` |

174| `github` | plugin 是其自己的 GitHub 仓库 | `{ "source": "github", "repo": "your-org/my-first-plugin" }` |

175| `git-subdir` | plugin 是某个其他仓库的子目录,例如 monorepo | `{ "source": "git-subdir", "url": "your-org/monorepo", "path": "tools/my-first-plugin" }` |

176 

177在 `git-subdir` 源中,`url` 接受 git URL 或 `owner/repo` GitHub 简写。

178 

179plugin 也可以来自以下源类型之一:

180 

181* `url`:任何主机上的 git 仓库 URL

182* `archive`:通过 HTTPS 下载的 zip 文件

183* `npm`:npm 包

184* `command`:通过在安装 plugin 的机器上运行命令生成的目录

185 

186有关每种源类型的字段,以及将基于 git 的源固定到 `ref` 或 `sha`,请参阅[Plugin 源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources)。

187 

188<h2 id="validate-and-test">

189 验证和测试

190</h2>

191 

192当你添加 plugins 时,在每次编辑后在你的 shell 中运行 `claude plugin validate ./my-marketplace`,并在分享之前从你自己机器上的 marketplace 安装。验证和安装会捕获不同的问题。

193 

194<h3 id="problems-that-validation-reports">

195 验证报告的问题

196</h3>

197 

198`claude plugin validate` 仅读取 marketplace 目录内的文件。它报告:

199 

200* JSON 语法错误,如 `json: Invalid JSON syntax: <reason>`

201* 缺少必需字段,例如 `owner: Invalid input`

202* 包含空格、非 ASCII 字符或模仿官方 Anthropic marketplace 形式的 marketplace 名称,例如 `claude-official`

203* 包含 `..` 的相对 `source`

204* 顶级或 plugin 条目中的未知字段,作为警告

205* 每个相对路径 plugin 的 `plugin.json` 中的问题,如 `plugins[N] plugin.json → <field>: <message>`

206 

207有关 `validate` 可以打印的每条消息,请参阅[验证消息](/docs/zh-CN/plugins/marketplace-reference#validation-messages)。有关其标志和退出代码,请参阅 [`plugin validate`](/docs/zh-CN/plugins/cli-reference#plugin-validate)。

208 

209<h3 id="problems-that-surface-when-you-add-or-install">

210 添加或安装时出现的问题

211</h3>

212 

213`claude plugin validate` 不报告的问题在你添加 marketplace 或从中安装时出现:

214 

215* **当你添加 marketplace 时**:确切的[官方 marketplace 名称](/docs/zh-CN/plugins/marketplace-reference#reserved-names),例如 `claude-plugins-official`,通过验证。当你添加具有其中一个名称的 marketplace 时,Claude Code 拒绝它,消息以 `The name '<name>' is reserved for official Anthropic marketplaces` 开头。

216* **当你安装一个 plugin 时**:

217 * Claude Code 在你安装 plugin 时首先获取 `github`、`git-subdir` 或其他远程源,所以错误的 `repo` 或 `path` 会在那时出现。

218 * 一个相对 `source` 的目录不存在也会在安装时失败,显示 `Source path does not exist: <path>`。

219 

220<h3 id="test-an-edit-to-a-plugin">

221 测试对 plugin 的编辑

222</h3>

223 

224在[演练](#create-a-marketplace)中,你从具有相对路径 `source` 的本地目录添加了 `my-marketplace`。使用该设置,Claude Code 直接从 `my-marketplace/plugins/` 读取 plugin 的文件。你的编辑在下一个会话开始时或当你在会话中运行 `/reload-plugins` 时生效,无需更改 plugin 的 `version`。

225 

226从你托管的 marketplace 安装的人会在 plugin 缓存中获得一个副本。有关他们如何接收新版本,请参阅[保持用户最新](/docs/zh-CN/plugins/host-marketplace#keep-users-up-to-date)。

227 

228<h3 id="remove-the-marketplace-to-start-over">

229 删除 marketplace 以重新开始

230</h3>

231 

232要删除所有内容并重新开始,在你的 shell 中运行 `claude plugin marketplace remove my-marketplace`。该命令删除 marketplace 并卸载其 plugins。

233 

234<h2 id="host-your-marketplace">

235 托管你的 marketplace

236</h2>

237 

238一旦你可以从你自己机器上的 marketplace 安装 plugin,如[创建一个 marketplace](#create-a-marketplace) 中所示,将 marketplace 目录推送到 git 主机。

239 

240你的队友然后在他们的 shell 中为 GitHub 仓库运行 `claude plugin marketplace add <owner>/<repo>`,或使用仓库 URL 运行相同的命令。然后他们按名称安装 plugin,如[演练](#create-a-marketplace)中所示。

241 

242有关私有仓库访问、更新、版本控制以及重命名或删除条目,请参阅[托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace)。

243 

244<h2 id="next-steps">

245 后续步骤

246</h2>

247 

248* [托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace):选择一个主机、保持用户最新并安全地重命名或删除 plugins

249* [Marketplace 参考](/docs/zh-CN/plugins/marketplace-reference):`marketplace.json` 字段和源类型

250* [为你的组织管理 plugins](/docs/zh-CN/plugins/org):在每台机器上要求你的 marketplace 及其 plugins

251* [按相关性建议 plugins](/docs/zh-CN/plugins/relevance):当会话匹配时,让 Claude Code 建议来自你的 marketplace 的 plugin

plugins/dependencies.md +245 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 插件依赖

6 

7> 声明你的插件所依赖的其他插件,使用版本范围如 ^1.2,并了解 Claude Code 如何安装、解析和修剪它们。

8 

9插件依赖是你的插件所依赖的另一个插件,例如你调用其 MCP 服务器或技能的插件。每个依赖都会跟踪其市场提供的最新版本,除非你声明版本约束,即你已测试过的语义版本范围,如 `^2.0` 或 `~2.1.0`。

10 

11本页面适用于在 `plugin.json` 中声明依赖的插件作者和标记发布的市场维护者。

12 

13<Note>

14 以下情况在其他页面中介绍:

15 

16 * **安装具有依赖的插件**:请参阅 [管理已安装的插件](/docs/zh-CN/plugins/install#manage-installed-plugins)

17 * **阅读依赖错误**:请参阅 [依赖错误](/docs/zh-CN/plugins/troubleshooting#dependency-errors)

18 * **声明你的插件自身代码所需的 npm 和 Bun 包**:请参阅 [Node.js 包依赖](/docs/zh-CN/plugins/loading#node-js-package-dependencies)

19</Note>

20 

21要添加约束,请从 [使用版本约束声明依赖](#declare-a-dependency-with-a-version-constraint) 开始。如果你维护其他人依赖的插件,请 [标记你的发布](#tag-plugin-releases-for-version-resolution) 以便他们的约束可以解析。

22 

23<h2 id="declare-dependencies">

24 声明依赖

25</h2>

26 

27<span id="decide-whether-to-constrain-dependency-versions" />如果没有版本约束,依赖会在用户下次更新时移动到其市场发布的每个新版本。如果该版本重命名了你的 plugin 调用的 MCP 工具,你的 plugin 会对所有更新的用户中断。

28 

29使用约束(如来自 git 支持源的依赖上的 `~2.1.0`),安装了你的 plugin 的用户会继续接收依赖的 `2.1.x` 补丁,永远不会移动到 `2.2`。要按自己的计划升级,请针对较新的版本进行测试,然后发布你的 plugin 的新版本,使用更宽松的约束。

30 

31<h3 id="declare-a-dependency-with-a-version-constraint">

32 使用版本约束声明依赖

33</h3>

34 

35在你的 plugin 的 `.claude-plugin/plugin.json` 的 `dependencies` 数组中列出依赖。以下清单声明了一个无版本依赖和一个受约束的依赖:

36 

37```json .claude-plugin/plugin.json theme={null}

38{

39 "name": "deploy-kit",

40 "version": "3.1.0",

41 "dependencies": [

42 "audit-logger",

43 { "name": "secrets-vault", "version": "~2.1.0" }

44 ]

45}

46```

47 

48一个条目可以是一个字符串:仅 plugin 名称,如此清单中的 `"audit-logger"`,或 `"name@marketplace"` 以在另一个市场中解析它。使用裸字符串,你的 plugin 依赖于该 plugin 市场提供的任何版本。

49 

50要设置版本约束,请使用具有这些字段的对象,每个字段都是字符串:

51 

52| 字段 | 描述 |

53| :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

54| `name` | 依赖的 plugin 名称,如其市场条目中所示。Claude Code 在与声明 plugin 相同的市场中查找它,除非你设置 `marketplace`。必需。 |

55| `version` | 一个 [语义版本范围](https://github.com/npm/node-semver#ranges),如 `~2.1.0`、`^2.0`、`>=1.4` 或 `=2.1.0`。依赖安装在满足此范围的最高 git 标签处,因此依赖的维护者必须 [标记发布版本](#tag-plugin-releases-for-version-resolution)。 |

56| `marketplace` | 用于解析 `name` 的不同市场。允许列表控制跨市场依赖,详见 [依赖来自另一个市场的 plugin](#depend-on-a-plugin-from-another-marketplace)。 |

57 

58范围不匹配预发布版本,如 `2.0.0-beta.1`,除非你选择使用预发布后缀,如 `^2.0.0-0`。

59 

60<h3 id="bundle-plugins-for-a-team">

61 为团队捆绑 plugin

62</h3>

63 

64要让工程师用一个命令安装精选的 plugin 集合,请发布一个清单包含 `name` 和 `dependencies` 数组的 plugin。Plugin 清单只需要 `name`,所以这是一个有效的 plugin,安装它会安装每个依赖。

65 

66例如,平台团队可以在内部市场中发布特定角色的捆绑包,以便工程师运行一个 `claude plugin install` 而不是分别安装每个 plugin:

67 

68```json .claude-plugin/plugin.json theme={null}

69{

70 "name": "backend-standard",

71 "version": "1.0.0",

72 "description": "Standard plugin set for backend engineers",

73 "dependencies": [

74 "secrets-vault",

75 "deploy-kit",

76 { "name": "db-migrate", "version": "^3.0" },

77 "oncall-runbook"

78 ]

79}

80```

81 

82要稍后向标准集添加 plugin,请发布新的 `backend-standard` 版本,包含额外的依赖。当市场不 [默认自动更新](/docs/zh-CN/plugins/loading#which-marketplaces-and-plugins-auto-update) 时,工程师要么为市场打开自动更新,要么手动更新:

83 

84* **为市场打开自动更新**:下一次自动更新会将捆绑包移动到新版本并安装它添加的任何依赖。

85* **手动更新**:在 shell 中运行 `claude plugin update backend-standard`,然后在打开的会话中运行 `/reload-plugins` 以安装新添加的依赖。

86 

87有关工程师端的步骤,请参阅 [保持 plugin 更新](/docs/zh-CN/plugins/install#keep-plugins-updated)。

88 

89要将捆绑包部署给组织中的每个人,管理员将其添加到托管设置中的 `enabledPlugins`。请参阅 [预安装和要求 plugin](/docs/zh-CN/plugins/org#pre-install-and-require-plugins)。

90 

91<h3 id="depend-on-a-plugin-from-another-marketplace">

92 依赖来自另一个市场的 plugin

93</h3>

94 

95默认情况下,Claude Code 不会从与声明 plugin 自身不同的市场安装依赖,除非用户已经在同一范围内安装并启用了该依赖。此默认值防止一个市场从用户未审查的源中静默安装 plugin。

96 

97要允许安装,请将目标市场的名称添加到根市场的 `marketplace.json` 中的 `allowCrossMarketplaceDependenciesOn`。根市场是托管用户正在安装的 plugin 的市场。仅根市场的允许列表适用。

98 

99以下 `marketplace.json` 允许 `deploy-kit` 依赖来自 `your-shared-marketplace` 的 plugin:

100 

101```json .claude-plugin/marketplace.json theme={null}

102{

103 "name": "your-marketplace",

104 "owner": { "name": "Your Org" },

105 "allowCrossMarketplaceDependenciesOn": ["your-shared-marketplace"],

106 "plugins": [

107 {

108 "name": "deploy-kit",

109 "source": "./deploy-kit",

110 "dependencies": [

111 { "name": "audit-logger", "marketplace": "your-shared-marketplace" }

112 ]

113 }

114 ]

115}

116```

117 

118如果 `allowCrossMarketplaceDependenciesOn` 缺失或不包含目标市场,Claude Code 不会安装依赖。当依赖在市场条目中声明时,安装本身会被拒绝,消息以 `Dependency "audit-logger@your-shared-marketplace" (required by deploy-kit@your-marketplace) is in marketplace "your-shared-marketplace", which is not in the allowlist` 开头,并命名要设置的字段。当它在 `plugin.json` 中声明时,安装完成但没有依赖,你的 plugin 随后无法加载。

119 

120允许列表检查不适用于已启用的依赖。如果用户首先从 `your-shared-marketplace` 自己安装 `audit-logger`,在同一范围内,`deploy-kit` 随后安装时无需对允许列表进行任何更改。

121 

122<h3 id="test-a-plugin-and-its-dependency-locally">

123 在本地测试 plugin 及其依赖

124</h3>

125 

126如果你同时开发一个 plugin 和它所依赖的 plugin,请从你的 shell 启动 Claude Code 并使用 [`--plugin-dir`](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) 加载两者:

127 

128```bash theme={null}

129claude --plugin-dir ./my-dependency --plugin-dir ./my-plugin

130```

131 

132依赖的本地副本满足你的 plugin 的依赖条目,所以你不需要从其市场安装依赖。

133 

134* **不需要 `version`**:依赖的本地 `plugin.json` 也不需要 `version`,因为 [版本约束](#declare-a-dependency-with-a-version-constraint) 不会针对本地副本进行检查。

135* **命名市场的条目**:命名市场的条目在 Claude Code v2.1.242 或更高版本上也匹配本地副本。

136 

137在你从其市场安装依赖之前,每当本地副本被禁用或不存在时,你的 plugin 都会停止加载:

138 

139* **你禁用了本地副本**:你的 plugin 在下一次 plugin 加载时被禁用,错误以 `is disabled — enable it or remove the dependency` 结尾。当错误将依赖命名为 `<name>@inline` 时,该标识符指的是 `--plugin-dir` 副本。

140* **你启动了一个没有依赖的 `--plugin-dir` 标志的会话**:错误报告依赖未安装。再次传递标志,或从其市场安装依赖。

141 

142当两个 plugin 都在一个父文件夹中时,你可以将该文件夹传递给 `--plugin-dir` 一次。如果该文件夹本身不是 plugin,Claude Code 会加载每个具有 `.claude-plugin/plugin.json` 的子文件夹。需要 Claude Code v2.1.265 或更高版本。

143 

144<h2 id="tag-plugin-releases-for-version-resolution">

145 发布其他人依赖的 plugin

146</h2>

147 

148如果你维护其他 plugin 使用版本约束依赖的 plugin,请标记其发布版本,以便这些约束可以解析。约束针对托管 plugin 的存储库上的 git 标签进行解析。标记 plugin 的 [plugin 源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources) 在 `marketplace.json` 中指向的存储库:

149 

150* **`github`、`url` 或 `git-subdir` 源**:plugin 自身的存储库,所以 plugin 的作者创建标签

151* **相对路径,如 `./plugins/secrets-vault`**:市场存储库,所以市场维护者创建标签

152 

153<h3 id="create-a-release-tag">

154 创建发布标签

155</h3>

156 

157将每个发布标记为 `<plugin-name>--v<version>`,其中 `<version>` 与该提交的 `plugin.json` 中的 `version` 字段匹配。plugin-name 前缀让一个市场存储库可以托管多个具有独立版本历史的 plugin。

158 

159从 plugin 目录创建标签,配置 `origin` 远程以接收推送的标签,使用 [`claude plugin tag`](/docs/zh-CN/plugins/cli-reference#plugin-tag):

160 

161```bash theme={null}

162claude plugin tag --push

163```

164 

165该命令从 plugin 的清单构建标签名称。在创建标签之前,它运行这些检查:

166 

167* 验证 plugin

168* 检查 `plugin.json` 和市场条目在版本上是否一致,当 plugin 目录在市场检出内时

169* 要求 plugin 目录下的工作树干净

170* 如果标签已存在则拒绝

171 

172成功运行会打印 `Created tag secrets-vault--v2.1.0`。使用 `--push`,它还会打印 `Pushed to origin`。不使用 `--push`,它会打印你自己运行的 `git push` 命令。

173 

174传递 `--dry-run` 以查看计划而不创建任何内容。

175 

176[`claude plugin tag` 参考](/docs/zh-CN/plugins/cli-reference#plugin-tag) 列出了其余标志。

177 

178你也可以直接运行 `git tag secrets-vault--v2.1.0`,只要你自己保持 `plugin.json` 中的 `version` 和市场条目中的版本同步。

179 

180<h3 id="constrain-a-dependency-that-has-a-non-git-source">

181 约束具有非 git 源的依赖

182</h3>

183 

184基于标签的解析仅适用于 git 支持的源。对于具有 `npm`、`archive` 或 `command` [plugin 源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources) 的依赖,约束不控制获取哪个版本。它在 plugin 加载时仍会被检查,如果安装的版本不满足它,依赖的 plugin 会被禁用。

185 

186对于 `npm`、`archive` 和 `command` 源,检查的版本是依赖的 `plugin.json` 中的 `version`。在约束该依赖之前在那里设置一个,因为不设置版本的 `plugin.json` 不满足任何约束。

187 

188Claude Code 永远不会自己安装具有 `command` 源的依赖,所以用户 [首先安装它](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)。它也永远不会运行依赖的 [`headersHelper`](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),所以用户也在安装你的 plugin 之前安装其市场条目设置的依赖。

189 

190除了 `claude plugin install`,这些操作也会安装任何缺失的声明依赖,`command` 和 `headersHelper` 限制也适用于它们:

191 

192* `/reload-plugins`

193* 依赖 plugin 市场的自动更新

194* 在依赖 plugin 上重新运行 `claude plugin install`

195* `claude plugin marketplace add`

196 

197<h2 id="how-dependencies-behave-for-your-users">

198 依赖如何为你的用户表现

199</h2>

200 

201这些部分描述了一旦你的 plugin 与其他 plugin 一起安装,Claude Code 如何解析、检查和组合你声明的约束。

202 

203<h3 id="how-a-constraint-resolves-against-tags">

204 约束如何针对标签进行解析

205</h3>

206 

207当用户安装声明 `{ "name": "secrets-vault", "version": "~2.1.0" }` 的 plugin 时,依赖从满足 `~2.1.0` 的最高 `secrets-vault--v` 标签安装在托管 `secrets-vault` 的存储库上。当没有标签满足范围时,安装要么失败,要么使用市场的当前副本:

208 

209* **具有自身存储库的 plugin**:安装失败,消息包含 `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`。

210* **由相对路径引用的 plugin**:安装改为使用市场的当前副本,约束在 plugin 加载时被检查。如果该副本在范围之外,依赖的 plugin 保持禁用,`claude plugin list` 显示 `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`。

211 

212对于市场通过相对路径引用的 plugin,你添加为本地文件夹路径的市场也会针对该文件夹的 git 标签解析约束,当该文件夹是 git 存储库时。这需要 Claude Code v2.1.196 或更高版本。不是 git 存储库的本地文件夹没有标签,所以 Claude Code 改为从文件夹的当前内容安装依赖。

213 

214<h3 id="confirm-the-resolved-version">

215 确认解析的版本

216</h3>

217 

218要确认约束解析到哪个版本,请在你的 shell 中运行 `claude plugin list`。标签解析的依赖显示其版本,带有 12 字符的提交后缀,如 `2.1.0-8713c5b11005`。

219 

220约束检查使用标签的版本而不是 `plugin.json` 中的 `version`,即使该提交处的 `plugin.json` 滞后。

221 

222如果你强制移动标签到不同的提交,下一次安装会获取该提交的内容而不是重用陈旧的缓存副本。请参阅 [版本和更新](/docs/zh-CN/plugins/loading#versions-and-updates) 了解 plugin 的版本如何成为其缓存键。

223 

224<h3 id="combine-constraints-from-several-plugins">

225 组合来自多个 plugin 的约束

226</h3>

227 

228当多个已安装的 plugin 约束同一依赖时,依赖解析到满足所有范围的最高版本。常见组合解析如下:

229 

230| Plugin A 要求 | Plugin B 要求 | 结果 |

231| :---------- | :---------- | :-------------------------------------------------------------------------- |

232| `^2.0` | `>=2.1` | 一次安装在最高 `2.x` 标签处,位于或高于 `2.1.0`。两个 plugin 都加载。 |

233| `~2.1` | `~3.0` | 安装 plugin B 失败,消息为 `has conflicting version requirements`。Plugin A 和依赖保持原样。 |

234| `=2.1.0` | 无 | 依赖保持在 `2.1.0`。自动更新在 plugin A 安装时跳过较新版本。 |

235 

236自动更新在满足每个已安装 plugin 范围的最高 git 标签处获取受约束的依赖,而不是在市场的最新版本处。如果已安装 plugin 的范围不重叠,自动更新将该依赖保持在其当前版本,`/plugin` **Errors** 标签页显示命名约束 plugin 的条目。如果它们重叠但没有标签落在范围内,自动更新获取市场的当前副本,当该副本的 `version` 落在任何已安装 plugin 范围之外时跳过更新。

237 

238当用户卸载最后一个约束依赖的 plugin 时,依赖不再被约束到版本范围,并在下一次更新时恢复跟踪其市场条目。

239 

240<h2 id="see-also">

241 另请参阅

242</h2>

243 

244* [`claude plugin prune`](/docs/zh-CN/plugins/cli-reference#plugin-prune):删除任何 plugin 不再需要的自动安装依赖

245* [托管市场](/docs/zh-CN/plugins/host-marketplace):发布渠道和推荐其他 plugin

plugins/host-marketplace.md +458 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 托管和维护一个 marketplace

6 

7> 发布一个插件 marketplace,让用户可以通过它来访问,授予对私有 marketplace 的访问权限,并在推送更新和重命名后不会破坏安装。

8 

9托管一个 marketplace 意味着将你的 `marketplace.json` 目录放在其他人可以通过 `/plugin marketplace add` 添加它的地方,安装其插件,并在你推送更改后继续接收你的更新。

10 

11本页面适用于操作 marketplace 的人员。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **你还没有编写目录文件**:从 [创建 marketplace](/docs/zh-CN/plugins/create-marketplace) 开始

17 * **你是一个管理员,需要在你的组织机器上要求、限制或预安装 marketplace**:阅读 [为你的组织管理插件](/docs/zh-CN/plugins/org)

18</Note>

19 

20从 [托管你的 marketplace](#host-your-marketplace) 开始选择一个主机和你的用户运行的命令。在你的第一次发布之前阅读 [保持用户更新](#keep-users-up-to-date)。在你更改插件的 `name` 之前阅读 [重命名或删除插件](#rename-or-remove-a-plugin)。

21 

22<h2 id="host-your-marketplace">

23 托管你的 marketplace

24</h2>

25 

26你可以在 GitHub、另一个 git 主机、托管的 `marketplace.json` URL 或共享文件系统上的目录中托管 marketplace。向你的用户发送你的主机的添加命令,并告诉他们他们的机器上需要什么:

27 

28| 主机 | 用户在 Claude Code 会话中运行 | 用户需要什么 |

29| :---------------------------------------------------- | :--------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- |

30| GitHub | `/plugin marketplace add your-org/your-marketplace` | `git`,对于私有仓库,需要 [授予对私有 marketplace 的访问权限](#grant-access-to-a-private-marketplace) 中描述的访问权限 |

31| GitLab、Bitbucket、GitHub Enterprise Server 或另一个 git 主机 | `/plugin marketplace add https://gitlab.example.com/team/plugins.git` | `git` 和从他们的机器访问主机的权限。发送完整 URL,因为 `owner/repo` 简写总是指 github.com |

32| 托管的 `marketplace.json` URL | `/plugin marketplace add https://plugins.example.com/marketplace.json` | 对 URL 的 HTTPS 访问。用户不需要 `git` 来获取目录本身 |

33| 共享文件系统上的目录 | `/plugin marketplace add /Volumes/shared/claude-plugins` | 对路径的读取访问权限 |

34 

35要固定 GitHub 或 git-URL marketplace 的分支或标签,告诉用户追加 `#<ref>`,如 `your-org/your-marketplace#stable`。[插件命令参考](/docs/zh-CN/plugins/cli-reference#plugin-marketplace-add) 列出了命令接受的每种形式。

36 

37成功添加会打印 `Successfully added marketplace: your-marketplace`。Claude Code 从你的 `marketplace.json` 中的 `name` 字段获取该名称,而不是从仓库名称。

38 

39用户随后通过其条目的 `name` 和 marketplace 的 `name` 安装插件,如 `/plugin install code-formatter@your-marketplace`。

40 

41<h3 id="register-the-marketplace-for-everyone-in-a-repository">

42 为仓库中的每个人注册 marketplace

43</h3>

44 

45要与在一个仓库中工作的每个人共享 marketplace,请从你的 shell 在那里运行一次 `claude plugin marketplace add your-org/your-marketplace --scope project`,并提交它写入的 `.claude/settings.json`。Claude Code 随后为每个 [信任该文件夹](/docs/zh-CN/plugins/org#require-plugins-per-repository) 的队友注册 marketplace。

46 

47<h3 id="avoid-relative-path-entries-in-a-url-hosted-marketplace">

48 避免在 URL 托管的 marketplace 中使用相对路径条目

49</h3>

50 

51当用户将你的 marketplace 添加为裸 `marketplace.json` URL 时,Claude Code 仅下载该文件。你的 `plugins` 数组中的条目,其 `source` 是相对路径(如 `./plugins/formatter`),则在安装时会失败,出现 [`其 marketplace 条目路径不会停留在 marketplace 目录内`](/docs/zh-CN/plugins/troubleshooting#plugins-with-relative-paths-fail-in-url-based-marketplaces)。给每个条目一个可以独立获取的源,如 `github` 仓库或 `archive` URL,或在 git 仓库中托管 marketplace,以便 Claude Code 克隆整个树。

52 

53<h3 id="edit-plugins-in-place-on-a-shared-directory">

54 在共享目录上就地编辑插件

55</h3>

56 

57当用户从共享目录添加你的 marketplace 时,Claude Code 直接从该目录读取具有相对路径源的插件,而不是复制它们。用户在下次启动会话或运行 `/reload-plugins` 时会看到你的编辑,无需更新步骤或版本提升。

58 

59<h3 id="keep-plugin-files-out-of-git-lfs">

60 将插件文件保留在 Git LFS 之外

61</h3>

62 

63将你的插件需要的文件保留在 [Git LFS](https://git-lfs.com) 之外。当用户从 git 仓库中托管的 marketplace 添加或安装它列出的基于 git 的插件时,Claude Code 会将该 marketplace 或插件仓库克隆到他们的机器上。克隆永远不会下载 LFS 内容,因此 LFS 跟踪的文件会作为指针文件到达。

64 

65<h3 id="share-files-within-a-marketplace-with-symlinks">

66 使用符号链接在 marketplace 内共享文件

67</h3>

68 

69要在你的插件和同一 marketplace 的其他部分之间共享文件,请在你的插件目录内创建符号链接。当 Claude Code 将插件复制到其缓存中时,它通过目标解析的位置处理每个符号链接:

70 

71* **在插件自己的目录内**:符号链接在缓存中被保留为相对符号链接,因此它在运行时继续解析到复制的目标。

72* **在同一 marketplace 内的其他地方**:符号链接被解引用。目标的内容被复制到缓存中以代替它。这允许元插件的 `skills/` 目录链接到 marketplace 中其他插件定义的技能。

73* **在 marketplace 外**:符号链接因安全原因被跳过。

74 

75对于从本地路径安装的插件,或从 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)(其 `mode` 是默认 `copy`)安装的插件,Claude Code 仅保留在插件自己目录内解析的符号链接,并跳过所有其他的。

76 

77以下命令创建从 marketplace 插件内部到由兄弟插件定义的共享技能的链接。在 Windows 上,从提升的命令提示符使用 `mklink /D` 或启用开发者模式:

78 

79```bash theme={null}

80ln -s ../../shared-plugin/skills/foo ./skills/foo

81```

82 

83<h2 id="distribute-through-organization-settings">

84 通过组织设置分发

85</h2>

86 

87在 Team 或 Enterprise 计划上,你也可以通过 claude.ai 上的 [**组织设置 > 插件和技能**](https://claude.ai/admin-settings/skills?tab=inventory) 分发 marketplace,而不是在用户自己添加的地方托管它。组织同步通过你的组织在 claude.ai 上的 GitHub 或 GitLab 连接读取仓库,因此你的用户的 git 凭证不涉及。

88 

89组织同步对仓库的要求比 `/plugin marketplace add` 更严格:

90 

91* **Marketplace 仓库**:在 github.com 和 gitlab.com 上,它必须是私有或内部的

92* **插件源**:每个插件源必须是 `github`、`url` 或 `git-subdir` 类型,或以 `./` 开头的 [相对路径](/docs/zh-CN/plugins/marketplace-reference#relative-path-plugin-source)

93* **顶级 `bin/` 目录**:claude.ai 拒绝具有一个的插件并同步 marketplace 的其余部分。错误消息以 `Plugin contains a top-level bin/ directory` 开头。将可执行文件保留在另一个目录中,如 `scripts/`,并从你的 hooks 或 MCP 服务器配置中将它们引用为 `${CLAUDE_PLUGIN_ROOT}/scripts/<name>`

94 

95有关管理员工作流程,请参阅 [为你的组织管理插件](https://support.claude.com/en/articles/13837433)。

96 

97<h2 id="grant-access-to-a-private-marketplace">

98 授予对私有 marketplace 的访问权限

99</h2>

100 

101当用户添加、从或更新你的 marketplace 时,Claude Code 在他们的机器上运行 `git`,交互式提示关闭,并依赖该机器已经持有的任何凭证。Claude Code 没有自己的 git 令牌,`marketplace.json` 也没有字段来存储一个。

102 

103你通过发送给用户的添加命令的形式选择克隆是通过 SSH 还是 HTTPS 运行:

104 

105* **GitHub `owner/repo`**:Claude Code 探测 `ssh -T git@github.com`,当探测成功时通过 SSH 克隆。如果探测失败,或 SSH 克隆本身失败,它通过 HTTPS 克隆。没有 GitHub SSH 密钥的机器上的用户可以设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` 来跳过探测并通过 HTTPS 克隆。

106* **`git@host:path.git`**:SSH。

107* **`https://example.com/repo.git`**:HTTPS。

108 

109告诉用户每个协议在他们的机器上需要什么:

110 

111* **SSH**:密钥必须在没有密码提示的情况下工作,例如因为它被加载到 `ssh-agent` 中。主机必须已经在 `known_hosts` 中。

112* **HTTPS**:Claude Code 保持用户的 git 凭证助手启用,但禁止它提示。助手已经存储的凭证有效;它必须要求的凭证失败。在 GitHub 上,`gh auth login` 后跟 `gh auth setup-git` 存储一个。

113 

114对于 GitHub Enterprise Server 主机,用户需要从他们的机器访问该主机的 git 访问权限。有关每个 Claude Code 表面需要到达 GHES 托管的 marketplace 的内容,请参阅 [GHES 上的插件 marketplace](/docs/zh-CN/github-enterprise-server#plugin-marketplaces-on-ghes)。

115 

116如果你改为通过 claude.ai 上的 **组织设置 > 插件和技能** 分发,你的用户的 git 凭证不涉及。有关哪些插件源可以在那里是私有的,请参阅 [通过组织设置分发](#distribute-through-organization-settings)。

117 

118<h3 id="serve-users-who-have-no-git-host-account">

119 为没有 git 主机账户的用户提供服务

120</h3>

121 

122没有 git 主机账户的用户可以将你提供的 marketplace 添加为 `marketplace.json` URL 或从共享目录,但他们只能安装其条目源他们也可以到达的插件。指向私有 `github` 仓库的条目在安装时仍然对他们失败,因为 Claude Code 使用与 git 托管的 marketplace 相同的非交互式 `git` 获取它。

123 

124这些条目源不需要 git 账户:

125 

126* **`archive`**:通过 HTTPS 下载的 zip。用户既不需要 `git` 也不需要账户,只需要对 URL 的网络访问。需要 Claude Code v2.1.224 或更高版本。用 `sha256` 固定每个存档,以便 Claude Code 拒绝更改的下载。要随下载发送凭证,请参阅 [认证存档下载](#authenticate-archive-downloads)。

127* **公共 git 仓库**:当条目给出 `https://` URL 时,Claude Code 通过 HTTPS 克隆公共 `url` 或 `git-subdir` 源,无需凭证。对于 `github` 源或写成 `owner/repo` 的 `git-subdir` 源,没有 GitHub SSH 密钥的用户设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。

128 

129对于一个网络上的团队,共享文件系统上的 `directory` marketplace 也可以在没有 git 账户的情况下工作。用户只需要对路径的读取访问权限。

130 

131<h3 id="what-background-auto-update-does-with-credentials">

132 后台自动更新对凭证的处理

133</h3>

134 

135后台自动更新是 Claude Code 在会话启动后对 marketplace 和已安装插件的无人值守刷新。对于你的 marketplace,它默认关闭,直到用户或管理员打开它,如 [保持用户最新](#keep-users-up-to-date) 中所述。

136 

137当它对私有 marketplace 打开时,新提交的后台检查使用用户配置的 git 凭证助手,永远不会提示。每种远程和助手给出不同的结果:

138 

139* **SSH 远程**:加载到 `ssh-agent` 中的密钥认证检查。

140* **具有存储凭证的 HTTPS 远程**:可以在不提示的情况下提供存储凭证的助手认证检查。Git Credential Manager、macOS Keychain 助手和 `git-credential-store` 一旦为主机持有凭证就以这种方式工作。

141* **具有需要提示的助手的 HTTPS 远程**:助手无法在后台回答。更新失静地失败,现有检出保持原位,因此用户的插件继续从最后同步的状态工作。

142 

143检查后,Claude Code 执行以下操作之一:

144 

145* **检出是最新的**:Claude Code 保持原样。

146* **检查找到新提交,或因为无法到达或认证到远程而失败**:Claude Code 再次克隆 marketplace 并用新克隆替换现有检出。如果该克隆失败,现有检出保持原位。重新克隆可以 [在大型仓库上超时](/docs/zh-CN/plugins/troubleshooting#git-clone-timed-out-after-120s)。

147 

148要保持私有 marketplace 最新,用户可以执行以下任一操作:

149 

150* **存储凭证**:首先登录凭证助手,以便它为主机持有凭证。对于 GitHub,运行 `gh auth login`,然后 `gh auth setup-git`。

151* **在失败时保持检出**:如果用户设置 `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1`,当后台检查无法到达或认证到远程时,Claude Code 保持现有检出而不尝试重新克隆。插件继续从最后同步的状态工作。

152 

153如果用户在环境中设置 `GITHUB_TOKEN` 或另一个提供商令牌,仅这一点不会认证后台检查。令牌通过凭证助手(如 `gh` CLI 的助手)生效,该助手读取 `GH_TOKEN` 和 `GITHUB_TOKEN`。

154 

155<h2 id="roll-out-to-a-whole-company">

156 向整个公司推出

157</h2>

158 

159向公司推出插件涉及你作为 marketplace 所有者、控制托管设置的管理员和使用 Claude Code 的每个人。你可以在没有管理员的情况下运行推出,在这种情况下每个人自己添加 marketplace 并安装插件。

160 

161| 谁 | 他们做什么 | 它在哪里被覆盖 |

162| :---------------- | :------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |

163| 你,marketplace 所有者 | 将目录保留在只有公司可以读取的仓库中,发送你的主机的添加命令,并说明每个人的机器上需要什么 | [托管你的 marketplace](#host-your-marketplace) 和 [授予对私有 marketplace 的访问权限](#grant-access-to-a-private-marketplace) |

164| 管理员 | 使用托管设置中的 `extraKnownMarketplaces` 和 `enabledPlugins` 为每个人注册 marketplace 并打开其插件,并在那里设置 `autoUpdate` | [要求一个 marketplace 及其插件](/docs/zh-CN/plugins/org#require-a-marketplace-and-its-plugins) 和 [设置更新策略](/docs/zh-CN/plugins/org#set-update-policy) |

165| 每个人 | 需要对私有 git 仓库的读取访问权限,凭证已经存储在他们的机器上。没有管理员,他们也运行添加和安装命令 | [添加私有 marketplace](/docs/zh-CN/plugins/install#add-a-private-marketplace) |

166 

167对于没有 git 主机账户的人,这些部分各覆盖一种到达他们的方式:

168 

169* **不需要 git 账户的条目源**:[为没有 git 主机账户的用户提供服务](#serve-users-who-have-no-git-host-account)

170* **预填充的插件目录**:[为容器和 CI 播种](/docs/zh-CN/plugins/org#seed-containers-and-ci),也为没有 git 主机账户的用户提供服务

171* **claude.ai 组织设置**:[通过组织设置分发](#distribute-through-organization-settings),你的用户的 git 凭证不涉及

172 

173<h2 id="keep-users-up-to-date">

174 保持用户最新

175</h2>

176 

177你的更改通过后台自动更新到达用户,一旦它对你的 marketplace 打开,或当用户自己更新插件时。在两种情况下,用户只有在其计算版本改变时才获得插件的新副本,如 [发布新版本](#release-a-new-version) 中所述。

178 

179<h3 id="turn-on-auto-update">

180 打开自动更新

181</h3>

182 

183后台自动更新默认对你的 marketplace 关闭,`marketplace.json` 没有字段来打开它。用户或管理员打开它:

184 

185* **告诉用户打开它**:每个用户进入 `/plugin` 中的 **Marketplaces**,选择你的 marketplace,并选择 **启用自动更新**。

186* **要求管理员设置它**:如果管理员在托管设置中的你的 marketplace 的 `extraKnownMarketplaces` 条目上设置 `"autoUpdate": true`,它对接收这些设置的每个人都打开。请参阅 [设置更新策略](/docs/zh-CN/plugins/org#set-update-policy)。

187 

188没有自动更新,用户在会话中运行 `/plugin marketplace update <name>` 或在 shell 中运行 `claude plugin update <plugin>@<name>` 时接收你的更改。

189 

190对于用户在更新到达他们时看到的内容,请参阅 [自动更新何时运行](/docs/zh-CN/plugins/loading#when-auto-update-runs)。

191 

192<h3 id="release-a-new-version">

193 发布新版本

194</h3>

195 

196要向用户发布新版本,更改插件的 `version`。用户只有在插件的计算版本与他们拥有的版本不同时才获得新副本。该版本首先来自 `plugin.json`,然后来自 marketplace 条目,根据 [版本和更新](/docs/zh-CN/plugins/loading#versions-and-updates)。

197 

198用户从他们添加为本地目录的 marketplace [就地加载](/docs/zh-CN/plugins/loading#find-plugins-on-disk) 的插件不受 `version` 控制。它在每次会话启动时加载你的当前文件,无论其版本字符串说什么。

199 

200对于除了就地加载或来自 `command` 源的安装之外的每次安装,要么在每次发布时增加 `version`,要么省略它:

201 

202* **在每次发布时提升 `version`**:用户停留在他们的缓存副本上,直到字符串改变。如果你设置 `"version": "1.0.0"` 并推送新提交而不改变它,用户不会接收它们。

203* **省略 `version`**:用户改为跟踪你的提交。将 `version` 保留在 `plugin.json` 和 marketplace 条目之外。

204 

205不要在 `plugin.json` 和 marketplace 条目中都设置 `version`。如果你这样做,Claude Code 使用 `plugin.json` 值而不警告,`claude plugin validate` 报告不匹配为 `Entry declares version "<a>" but <path>/plugin.json says "<b>"`。

206 

207<h3 id="hold-users-on-one-version">

208 将用户保持在一个版本上

209</h3>

210 

211一个 marketplace 一次为每个插件提供一个版本,所以你通过选择每个条目指向什么来将用户保持在一个版本上:

212 

213* **插件条目上的 `ref` 和 `sha`**:`ref` 命名分支或标签,`sha` 为 `github`、`url` 或 `git-subdir` 源命名提交。请参阅 [插件源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources)。

214* **添加命令上的 `#<ref>`**:添加 `your-org/your-marketplace#stable` 的用户获得该目录的分支或标签。对于两条发布线同时进行,请参阅 [运行发布渠道](#run-release-channels)。

215* **`<plugin>--v<version>` 标签**:依赖的版本范围针对这些标签解析。请参阅 [发布其他人依赖的插件](/docs/zh-CN/plugins/dependencies#tag-plugin-releases-for-version-resolution)。

216 

217[发布新版本](#release-a-new-version) 说明更改的条目何时到达用户。

218 

219<h3 id="change-the-command-of-a-command-source">

220 更改命令源的命令

221</h3>

222 

223如果你更改 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的 `command`,或切换其 `mode`,每个用户必须在 Claude Code 运行它之前接受新命令。Claude Code 仅运行用户在安装或最后更新插件时接受的确切命令。

224 

225在用户的 marketplace 副本获取更改后,该用户看到以下内容:

226 

227* **不再有后台运行**:该用户的命令的 [每会话一次运行](/docs/zh-CN/plugins/loading#when-a-command-source-re-runs) 停止,因此工具的新输出不会到达他们。

228* **`/plugin` 错误选项卡中的条目**:条目显示新命令和要运行的 `claude plugin update` 命令。

229 

230告诉用户在终端中运行该条目显示的 `claude plugin update` 命令。Claude Code 向他们显示新命令并要求他们接受它。

231 

232<h2 id="run-release-channels">

233 运行发布渠道

234</h2>

235 

236要提供稳定和早期访问轨道,托管两个 marketplace,其条目指向同一插件的不同 ref,并让每个用户添加他们想要的。Claude Code 没有发布渠道概念,一个 marketplace 一次为每个插件提供一个版本。

237 

238给两个 `marketplace.json` 文件不同的 `name` 值。Claude Code 通过其 `name` 识别 marketplace,所以用户一次不能有两个具有相同名称的 marketplace 注册。

239 

240使用这两个目录,添加 `stable-tools` 的用户从 `stable` 分支安装 `code-formatter`,添加 `latest-tools` 的用户从 `latest` 安装它:

241 

242```json theme={null}

243{

244 "name": "stable-tools",

245 "owner": { "name": "Your Org" },

246 "plugins": [

247 { "name": "code-formatter", "source": { "source": "github", "repo": "your-org/code-formatter", "ref": "stable" } }

248 ]

249}

250```

251 

252```json theme={null}

253{

254 "name": "latest-tools",

255 "owner": { "name": "Your Org" },

256 "plugins": [

257 { "name": "code-formatter", "source": { "source": "github", "repo": "your-org/code-formatter", "ref": "latest" } }

258 ]

259}

260```

261 

262给两个 ref 不同的 `plugin.json` 版本,或省略 `version` 以便提交 SHA 区分它们。更新通过比较版本检测,所以在没有版本改变的情况下移动的 ref 将用户留在缓存副本上。

263 

264要将渠道分配给用户组而不是让用户选择,管理员给每个组匹配的 `extraKnownMarketplaces` 条目,如 [设置更新策略](/docs/zh-CN/plugins/org#set-update-policy) 中所述。

265 

266<h2 id="rename-or-remove-a-plugin">

267 重命名或删除插件

268</h2>

269 

270插件的 `name` 是其标识符。用户在 `enabledPlugins` 和 `pluginConfigs` 设置键以及 `/plugin install` 中引用它,所以改变它会破坏每次现有安装。

271 

272要更改用户在 `/plugin` 中看到的标签而不破坏任何东西,在 `plugin.json` 中设置 `displayName` 并保持 `name` 不变。

273 

274<h3 id="migrate-users-with-a-renames-map">

275 使用重命名映射迁移用户

276</h3>

277 

278当你必须更改 `name` 时,向 `marketplace.json` 添加顶级 `renames` 映射,以便 Claude Code 迁移现有用户而不是报告 [`Plugin "<name>" not found in marketplace`](/docs/zh-CN/plugins/troubleshooting#plugin-not-found-in-marketplace)。当你从 `plugins` 中删除条目时也这样做。自动迁移需要 Claude Code v2.1.193 或更高版本。

279 

280将每个前名称映射到其当前名称,或在插件消失时映射到 `null`。此 marketplace 将 `formatter` 重命名为 `code-formatter` 并记录 `legacy-linter` 被删除:

281 

282```json theme={null}

283{

284 "name": "your-marketplace",

285 "owner": { "name": "Your Org" },

286 "plugins": [

287 { "name": "code-formatter", "source": "./plugins/code-formatter" }

288 ],

289 "renames": {

290 "formatter": "code-formatter",

291 "legacy-linter": null

292 }

293}

294```

295 

296在你推送后,仍然启用旧名称的用户看到以下结果之一:

297 

298* **重命名的条目**:插件在其新名称下加载。`claude plugin list` 和 `/plugin` 下的插件详情显示 `Renamed to "code-formatter" in the "your-marketplace" marketplace` 一次,Claude Code 在用户、项目和本地设置范围中将旧键重写为 `enabledPlugins` 和 `pluginConfigs` 中的新键。

299* **`null` 条目**:旧键从这些范围中删除,用户看到 `Removed from the "your-marketplace" marketplace`。

300* **在托管设置中启用**:插件仍然在其新名称下加载,但 Claude Code 无法重写托管设置,所以通知重复出现,直到管理员在那里更新 `enabledPlugins`。

301 

302对于用户从 git 仓库或 URL 添加的 marketplace,重命名的插件报告 [`Plugin "<name>" not cached at <path>`](/docs/zh-CN/plugins/troubleshooting#plugin-not-cached-at),直到用户在会话中运行 `/plugin install code-formatter@your-marketplace` 一次。

303 

304将 `renames` 视为仅追加历史。在每个人迁移后保持旧条目。当你再次重命名时,添加第二个条目而不是编辑第一个,因为 Claude Code 遵循从最旧名称的链。

305 

306在你的 shell 中,编辑映射后运行 `claude plugin validate .`。它拒绝循环或在 `null` 或 `plugins` 中的名称以外的任何地方结束的链,出现 `renames.<name>: chain does not resolve`。

307 

308<h3 id="uninstall-removed-plugins-from-users’-machines">

309 从用户机器卸载已删除的插件

310</h3>

311 

312要从用户机器卸载已删除的插件而不是留下副本,在 `marketplace.json` 的顶级设置 `"forceRemoveDeletedPlugins": true`。没有该字段,已删除的插件保持安装并在会话加载它时报告 `Plugin "<name>" not found in marketplace`。有了它,Claude Code 在每次会话启动时执行以下操作:

313 

3141. 比较用户从你的 marketplace 安装的内容与条目和 `renames` 映射,并将既不列出也不重命名的任何插件视为已删除。

3152. 从用户、项目和本地范围卸载每个已删除的插件。仅托管设置安装的插件保持原位。

3163. 在 `/plugin` 中的 **Flagged** 标题下列出每个已删除的插件,状态为 `Removed from marketplace`。

317 

318<h2 id="authenticate-archive-downloads">

319 认证存档下载

320</h2>

321 

322要认证 [`archive`](/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source) 下载,如从私有注册表下载,设置 Claude Code 随其发送的 HTTP 标头。你可以在以下任一位置设置 `headers`:

323 

324* **Marketplace 的 `url` 源**:你注册 marketplace 的 `url` 源,如 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目。

325* **插件的条目**:在 Claude Code v2.1.238 或更高版本上,你可以改为在插件的 `marketplace.json` 条目上设置它,在 `source` 旁边。

326 

327在任一位置,当值是短期的(如你的注册表生成的令牌)时,设置 `headersHelper` 命令而不是 `headers`。Claude Code 运行命令并将其打印的 JSON 对象作为该位置的标头发送。需要 Claude Code v2.1.238 或更高版本。

328 

329[marketplace 参考](/docs/zh-CN/plugins/marketplace-reference#plugin-entries) 列出 `headers` 和 `headersHelper` 条目字段。

330 

331你选择的位置决定哪些下载获得标头以及 Claude Code 何时运行命令:

332 

333| 位置 | 获得标头的下载 | Claude Code 何时运行那里设置的 `headersHelper` |

334| :------------------ | :---------------------------------------- | :------------------------------------------------------------------------------------ |

335| Marketplace `url` 源 | 在 marketplace URL 的源上的存档下载,意味着相同的方案、主机和端口 | 在 marketplace 的 `marketplace.json` 的每次获取之前和在该源上的每次存档下载之前。Claude Code 重用一次运行的输出长达 60 秒 |

336| 插件条目 | 该条目的下载仅 | 仅当用户自己安装或更新该一个插件并 [接受命令](#how-users-accept-a-headershelper-command) 时 |

337 

338当两个位置都设置相同名称的标头时,Claude Code 发送条目的值。在一个位置内,命令打印的标头覆盖相同名称列出的标头。

339 

340<h3 id="add-a-headershelper-to-a-plugin-entry">

341 向插件条目添加 headersHelper

342</h3>

343 

344此条目在 `source` 旁边设置 `headersHelper`。它也设置 [`"strict": false`](/docs/zh-CN/plugins/marketplace-reference#strict-mode),Claude Code 要求设置 `headersHelper` 的 `marketplace.json` 条目:

345 

346```json theme={null}

347{

348 "name": "my-plugin",

349 "description": "Formatting commands for internal services",

350 "strict": false,

351 "source": {

352 "source": "archive",

353 "url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"

354 },

355 "headersHelper": "/opt/bin/mint-registry-token.sh"

356}

357```

358 

359要检查条目,在你的 shell 中运行 `claude plugin install my-plugin@your-marketplace`。Claude Code 向你显示命令和存档 URL,并在你接受后下载 zip。

360 

361<h3 id="write-the-headershelper-command">

362 编写 headersHelper 命令

363</h3>

364 

365无论你在 marketplace 的 `url` 源还是插件条目上设置 `headersHelper`,编写命令以满足这些要求:

366 

367* **命令文本**:最多 500 个可打印 ASCII 字符,没有四个或更多空格的运行。

368* **输出**:在 stdout 上打印一个标头名称和字符串值的 JSON 对象,然后在 10 秒内退出 0。

369* **Shell 和工作目录**:Claude Code 通过 `sh` 运行命令,或在 Windows 上通过 `cmd.exe`。工作目录是配置目录,即 `~/.claude` 或 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars#variables)。给出绝对路径或 `PATH` 上的命令,因为相对路径针对该目录解析,而不是用户的项目。

370* **Claude Code 删除的变量**:当命令在 `marketplace.json` 条目中设置,或在项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置时,Claude Code 从环境中删除每个名称看起来像凭证的变量,通过 [它应用于 MCP `headersHelper` 的相同规则](/docs/zh-CN/mcp#which-variables-a-helper-can-read)。`ANTHROPIC_API_KEY` 和 `MY_REGISTRY_TOKEN` 都被删除,所以让命令从文件或凭证存储读取其凭证。此删除不适用于在用户设置、`--settings` 文件或托管设置中设置的命令。

371* **Claude Code 设置的变量**:对于 `url` 源的命令为 `CLAUDE_CODE_MARKETPLACE_URL` 和 `CLAUDE_CODE_MARKETPLACE_NAME`,对于条目的命令为 `CLAUDE_CODE_PLUGIN_NAME` 和 `CLAUDE_CODE_PLUGIN_ARCHIVE_URL`。`CLAUDE_CODE_MARKETPLACE_NAME` 在用户通过 URL 添加 marketplace 后的第一次获取时未设置,因为该获取是提供名称的。

372 

373铸造承载令牌的命令打印像这样的对象:

374 

375```json theme={null}

376{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}

377```

378 

379<h3 id="when-claude-code-skips-a-headershelper-command-or-drops-its-output">

380 当 Claude Code 跳过 headersHelper 命令或删除其输出时

381</h3>

382 

383当以下任一情况适用时,`headersHelper` 命令不运行,或来自 `headers` 或命令输出的标头被删除:

384 

385* **命令失败**:如果命令退出非零、运行超过 10 秒或打印除 JSON 对象的字符串值以外的任何内容,命令运行的获取或下载不会发生。

386* **Marketplace URL 不以 `https://` 开头**:该 `url` 源的命令不运行,请求仅携带其 `headers` 字段中列出的标头。

387* **重定向离开源**:当下载被重定向离开存档 URL 的源时,重定向的请求不携带来自 marketplace `url` 源或插件条目的 `headers` 值或命令输出。

388* **条目设置路由或身份标头**:Claude Code 从条目的 `headers` 和命令输出中删除请求路由和客户端身份名称,如 `Host`、`Cookie` 和 `X-Forwarded-*`,并保持认证名称,如 `Authorization`。每个 `marketplace.json` 条目都以这种方式过滤。对于设置中的内联插件条目,请参阅 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces)。

389* **命令在 `--add-dir` 目录的设置中设置**:命令被忽略,在 `url` 源和 [内联插件条目](/docs/zh-CN/settings-reference#extraknownmarketplaces) 上,仅该文件的 `headers` 被发送。

390* **托管设置阻止命令**:将 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 设置为 `true` 阻止 `headersHelper` 命令,[`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 也阻止它们,除非 `disableCommandPluginSources` 明确为 `false`。在任一块下,Claude Code 仍然为托管设置本身声明的 marketplace 运行命令。

391 

392<h3 id="how-users-accept-a-headershelper-command">

393 用户如何接受 headersHelper 命令

394</h3>

395 

396用户每次自己安装或更新该一个插件时接受插件条目的命令。他们从 `/plugin` 中的插件自己的视图或使用 `claude plugin install` 或 `claude plugin update` 执行此操作。Claude Code 显示命令和存档 URL,并仅在用户接受后运行命令。

397 

398在非交互式 shell 中,传递 [`--yes`](/docs/zh-CN/plugins/cli-reference#plugin-install) 以接受命令。要仅接受之前 `--json` 运行显示的命令,传递 [`--accept-command`](/docs/zh-CN/plugins/cli-reference#plugin-install) 与运行报告的 `sha256`。

399 

400Claude Code 仅运行它显示的命令,对于它显示的存档 URL。如果条目的命令或存档 URL 在中间改变,Claude Code 拒绝安装或更新。查询字符串中的更改单独不计数。

401 

402<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">

403 拒绝命令而不是询问的安装和更新

404</h3>

405 

406在除单个插件安装或更新之外的任何操作上,Claude Code 既不运行条目的命令也不下载其存档。插件保持在其安装版本或保持未安装,用户看到以下结果之一:

407 

408* **一次安装多个插件、来自插件建议或作为另一个插件的依赖**:Claude Code 拒绝具有命令的插件并将用户指向 `/plugin` 中的该插件自己的视图。批量安装中的其他插件仍然安装。依赖于被拒绝插件的插件无法安装,直到用户自己安装被拒绝的插件。

409* **后台自动更新,或会话启动以获取其存档从未下载的插件**:Claude Code 在 `/plugin` 错误选项卡中列出插件,以便用户知道自己安装或更新它。

410 

411<h3 id="when-a-marketplace-url-sources-command-runs">

412 当 marketplace `url` 源的命令运行时

413</h3>

414 

415你在设置文件中声明 marketplace `url` 源的 `headersHelper`,如 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目,而不是在 marketplace 发布的目录中。Claude Code 因此不会在每次安装或更新时要求用户接受它。相反,声明它的设置文件决定 Claude Code 何时运行它:

416 

417| 设置文件 | Claude Code 何时运行命令 |

418| :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------ |

419| 用户设置、`--settings` 文件或机器上的托管设置文件 | 不询问,包括在后台 marketplace 刷新期间 |

420| 项目的 `.claude/settings.json` 或 `.claude/settings.local.json` | 仅在用户接受该文件夹本身的 [工作区信任对话](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 后。`-p` 或 SDK 会话不计为接受它,对父文件夹授予的信任也不计 |

421| 服务器托管设置 | 在交互式会话中,仅在用户在 [安全批准对话](/docs/zh-CN/server-managed-settings#security-approval-dialogs) 中批准交付的设置后 |

422 

423对于这些文件中的 [内联插件条目](/docs/zh-CN/settings-reference#extraknownmarketplaces),Claude Code 要求与该文件中 marketplace 级别命令相同的文件夹信任或设置批准,用户也在每次安装或更新时接受条目的命令。

424 

425<h2 id="depend-on-and-recommend-other-plugins">

426 依赖和推荐其他插件

427</h2>

428 

429条目可以声明对其他插件的依赖。

430 

431* **版本范围**:依赖可以携带 semver 范围。

432* **跨 marketplace 依赖**:来自另一个 marketplace 的依赖仅在你的 marketplace 在 `allowCrossMarketplaceDependenciesOn` 中列出该 marketplace 时安装。

433 

434对于版本范围、它们解析的 `<plugin>--v<version>` git 标签约定和跨 marketplace 信任,请参阅 [插件依赖](/docs/zh-CN/plugins/dependencies)。

435 

436要在项目匹配时让 Claude Code 建议插件,向条目添加 `relevance` 块,其中包含识别项目的信号。用户仅在管理员在 `pluginSuggestionMarketplaces` 中列出你的 marketplace 时才看到来自你的 marketplace 的建议。对于信号和启用步骤,请参阅 [插件相关性](/docs/zh-CN/plugins/relevance)。

437 

438<h2 id="work-around-what-a-marketplace-can’t-do">

439 解决 marketplace 无法做的事情

440</h2>

441 

442一些所有者要求的东西在 `marketplace.json` 中没有字段。以下是每个的最接近选项:

443 

444* **限制用户安装的其他内容**:marketplace 允许列表是托管设置 `strictKnownMarketplaces`。请参阅 [限制用户可以安装的内容](/docs/zh-CN/plugins/org#restrict-what-users-can-install)。

445* **在用户询问之前安装或启用插件**:没有条目字段安装插件。托管 `enabledPlugins` 为一个舰队执行此操作;请参阅 [预安装和要求插件](/docs/zh-CN/plugins/org#pre-install-and-require-plugins)。

446* **向不同用户显示不同的条目**:条目不携带受众字段,添加 marketplace 的每个用户看到整个目录。为不同的受众托管单独的 marketplace。

447* **标记插件已弃用**:没有弃用状态。选项是删除条目,在 `renames` 中将其名称映射到 `null`,并可选地设置 `forceRemoveDeletedPlugins`。

448* **为你的用户打开自动更新**:每个用户在 `/plugin` 中的 **Marketplaces** 下打开它,或管理员在托管设置中设置 `autoUpdate`。请参阅 [打开自动更新](#turn-on-auto-update)。

449* **携带 git 凭证**:没有 marketplace 字段持有 git 令牌。对 git 托管的 marketplace 或插件的访问遵循用户的 git 设置,根据 [授予对私有 marketplace 的访问权限](#grant-access-to-a-private-marketplace)。对于 `archive` 源,条目可以改为设置 [`headers` 或 `headersHelper`](#authenticate-archive-downloads)。

450 

451<h2 id="next-steps">

452 后续步骤

453</h2>

454 

455* [Marketplace 参考](/docs/zh-CN/plugins/marketplace-reference):`marketplace.json` 字段、源类型和验证消息

456* [为你的组织管理插件](/docs/zh-CN/plugins/org):在你的组织的机器上要求、限制或播种你的 marketplace

457* [插件依赖](/docs/zh-CN/plugins/dependencies):标记发布,以便依赖你的插件的插件可以解析版本

458* [排查插件问题](/docs/zh-CN/plugins/troubleshooting):你的用户在从你的 marketplace 添加或更新时看到的错误

plugins/install.md +418 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 安装和管理插件

6 

7> 从任何使用的界面上的市场安装 Claude Code 插件,选择安装范围,以及稍后更新或删除它们。

8 

9安装插件会将其 skills、agents、hooks 和 MCP servers 添加到您机器上的 Claude Code。

10 

11本页面适用于在自己的机器或账户上使用插件的任何人,无论是在终端、桌面应用、IDE 还是云会话中:它涵盖安装、选择范围、添加市场和保持插件更新。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **您使用 claude.ai 聊天或 Cowork,而不是 Claude Code**:请参阅 [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)

17 * **Claude Code 打印了错误**:在 [Troubleshoot plugins](/docs/zh-CN/plugins/troubleshooting) 中找到它

18</Note>

19 

20从 [Install a plugin](#install-a-plugin) 开始。如果有人发送给您的安装命令的 `@` 名称不是 `claude-plugins-official`,请先 [add that marketplace](#add-a-marketplace)。

21 

22<h2 id="install-a-plugin">

23 Install a plugin

24</h2>

25 

26作为示例,本节安装来自 [Anthropic 官方市场](/docs/zh-CN/plugins/anthropic-marketplaces) 的 [`commit-commands`](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/commit-commands),它添加了用于提交、推送和打开拉取请求的命令。

27 

28相同的步骤可以安装任何其他插件:在 `commit-commands` 和 `claude-plugins-official` 出现的地方替换其名称和其市场的名称。如果该插件来自不同的市场,请先 [add the marketplace](#add-a-marketplace)。

29 

30选择运行 Claude Code 的位置的选项卡。

31 

32<Tabs>

33 <Tab title="Terminal">

34 在您的项目中使用 `claude` 启动 Claude Code,然后:

35 

36 <Steps>

37 <Step title="使用安装命令打开插件的详细信息">

38 使用插件的名称和市场运行 `/plugin install`。在会话中,此命令不会立即安装:它在该插件的详细信息上打开 `/plugin` 面板,以便您可以查看它并首先选择范围。

39 

40 ```text theme={null}

41 /plugin install commit-commands@claude-plugins-official

42 ```

43 

44 要浏览,请运行不带插件名称的 `/plugin`:面板在 **Discover** 选项卡上打开,该选项卡列出您添加的每个市场中的插件,您可以输入搜索,然后在插件上按 **Enter** 打开其详细信息。

45 </Step>

46 

47 <Step title="查看插件添加的内容">

48 详细信息窗格显示插件的描述。它还可以显示:

49 

50 * **Will install**:插件添加的命令、agents、skills、hooks 和 MCP 及 LSP servers。

51 * **Last updated**:为 Anthropic 官方市场中的插件显示。

52 * **Context cost**:对于 Anthropic 官方市场中的插件,有两个令牌估计。**Every turn** 是插件添加到您发送的每条消息的内容,**When invoked** 是其 skills 和 agents 在 Claude 加载它们后添加的内容。当您通过命名其市场打开插件时(如第 1 步命令所做的那样)或从 **Marketplaces** 选项卡打开时,估计会出现。从 **Discover** 列表到达的详细信息窗格不显示它们。

53 

54 来自本地或自定义市场的插件可以改为显示 `Components will be discovered at installation`。

55 

56 插件可以运行 hooks 和 MCP servers,因此在安装前请阅读窗格。请参阅 [Plugin security and trust](/docs/zh-CN/plugins/security)。

57 </Step>

58 

59 <Step title="选择范围">

60 选择三个安装选项之一:

61 

62 * **Install for you (user scope)**:您在此机器上的每个项目中获得该插件

63 * **Install for all collaborators on this repository (project scope)**:为在此存储库中工作的每个人启用它

64 * **Install for you, in this repo only (local scope)**:您仅在此存储库中获得它

65 

66 [Choose an install scope](#choose-an-install-scope) 说明每个选项写入哪个设置文件,以及当同一插件在多个位置设置时哪个适用。

67 

68 选择范围后,Claude Code 安装插件及其声明的任何依赖项,然后打印安装摘要。

69 </Step>

70 

71 <Step title="读取安装摘要">

72 摘要的最后一句告诉您插件在此会话中是否可用:

73 

74 * **Active now**:`Plugin is now active.` 不需要重新加载。

75 * **Reload needed**:`Run /reload-plugins to activate.` 面板关闭,Claude Code 为您运行该重新加载。如果重新加载会 [invalidate the prompt cache](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),它会警告并改为保留插件待处理。运行 `/reload-plugins --force` 以激活它,这会花费一个未缓存的请求。

76 * **Load failed**:`The plugin couldn't be loaded`。在 `/plugin` 中打开 **Errors** 选项卡以了解原因,然后查看 [After install: plugin not working](/docs/zh-CN/plugins/troubleshooting#plugin-installed-but-not-working)。

77 </Step>

78 

79 <Step title="确认插件有效">

80 输入 `/` 并在其名称下查找插件的 skills,形式为 `/<plugin>:<skill>`。对于 `commit-commands`,`/commit-commands:commit` 出现。还有两个其他地方列出插件:

81 

82 * 在 `/plugin` 中打开 **Installed** 选项卡,该选项卡列出带有其范围的插件。

83 * 在您的 shell 中,运行 `claude plugin list`,它打印相同的列表,带有 `Version`、`Scope` 和 `Status` 行。

84 

85 如果 `/commit-commands:commit` 没有出现,请参阅 [After install: plugin not working](/docs/zh-CN/plugins/troubleshooting#plugin-installed-but-not-working)。

86 </Step>

87 </Steps>

88 

89 从任何其他市场安装需要先执行一个额外步骤:[add the marketplace](#add-a-marketplace)。Claude Code 在您第一次启动交互式终端会话时为您添加 Anthropic 的官方市场,这就是为什么示例跳过该步骤。如果您在 [claude.com/marketplace](https://claude.com/marketplace) 上找到了插件,其 **Claude Code** 按钮会复制其 [shell form](#install-from-your-shell) 中的安装命令,`claude plugin install <name>@claude-plugins-official`。

90 </Tab>

91 

92 <Tab title="Desktop app">

93 在桌面应用的 **Code** 选项卡中的本地或 SSH 会话中:

94 

95 <Steps>

96 <Step title="打开插件浏览器">

97 单击提示框旁边的 **+** 按钮,选择 **Plugins**,然后选择 **Add plugin**。插件浏览器打开,显示来自您的市场的插件。

98 </Step>

99 

100 <Step title="选择插件">

101 找到 `commit-commands` 并选择它。

102 </Step>

103 

104 <Step title="选择范围">

105 选择 [scope](#choose-an-install-scope):您的用户账户、此项目或仅本地。

106 </Step>

107 </Steps>

108 

109 要稍后启用、禁用或卸载,请使用 **+ > Plugins > Manage plugins**。插件浏览器在桌面应用的云会话中不可用。请参阅 [Install plugins in the desktop app](/docs/zh-CN/desktop#install-plugins)。

110 </Tab>

111 

112 <Tab title="VS Code">

113 在 VS Code 中的 Claude Code 面板中:

114 

115 <Steps>

116 <Step title="打开 Manage plugins">

117 在提示框中输入 `/plugins` 以打开 **Manage plugins**。

118 </Step>

119 

120 <Step title="安装插件">

121 在 **Plugins** 选项卡上,搜索 `commit-commands` 并单击 **Install**。如果选项卡未列出任何插件,请先在 **Marketplaces** 选项卡上添加 `anthropics/claude-plugins-official`。

122 </Step>

123 

124 <Step title="选择范围">

125 选择 [scope](#choose-an-install-scope):**Install for you**、**Install for this project** 或 **Install locally**。

126 </Step>

127 </Steps>

128 

129 您的更改应用于打开的会话,无需重新启动。请参阅 [Manage plugins in VS Code](/docs/zh-CN/vs-code#manage-plugins)。

130 </Tab>

131 

132 <Tab title="Cloud session">

133 [cloud session](/docs/zh-CN/cloud-environments)(包括 [the browser at claude.ai/code](/docs/zh-CN/claude-code-on-the-web))没有插件浏览器,不会加载您在自己的机器上安装的插件或您的存储库的 `.claude/settings.json` 打开的插件。对于您的组织通过托管设置分发的插件,请参阅 [Manage plugins for your organization](/docs/zh-CN/plugins/org)。

134 

135 请参阅 [which parts of your setup are also available in a cloud session](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup) 了解您设置的其余部分。

136 </Tab>

137</Tabs>

138 

139<h3 id="choose-an-install-scope">

140 Choose an install scope

141</h3>

142 

143插件的安装范围决定了谁获得该插件以及哪个设置文件将其记录为已启用:

144 

145* **User scope**:该插件在此机器上的每个项目中为您启用。条目进入 `~/.claude/settings.json` 中的 `enabledPlugins`。

146* **Project scope**:该插件为在此存储库中工作的每个人启用。条目进入 `.claude/settings.json`,您提交它。

147* **Local scope**:该插件仅在此存储库中为您启用。条目进入 `.claude/settings.local.json`。

148 

149某些插件由其作者通过 [`defaultEnabled`](/docs/zh-CN/plugins/manifest-reference#defaultenabled) 字段设置为默认关闭。这样的插件已安装但保持关闭,直到您在 shell 中使用 `claude plugin enable <name>` 或从会话中 `/plugin` 的 **Installed** 选项卡打开它。

150 

151当同一插件在多个范围设置时,本地设置覆盖项目设置,项目设置覆盖用户设置。请参阅 [Find where a plugin is enabled](/docs/zh-CN/plugins/loading#find-where-a-plugin-is-enabled) 了解完整规则。

152 

153终端、桌面应用的本地会话和一台计算机上的 VS Code 扩展读取相同的设置文件,因此您在其中任何一个中以用户范围安装的插件在其他两个中可用。

154 

155<h3 id="other-places-you-run-claude-code">

156 JetBrains、非交互式运行和 Agent SDK

157</h3>

158 

159您运行 Claude Code 的某些地方没有自己的插件浏览器:

160 

161* **JetBrains IDEs**:JetBrains 插件在 IDE 的终端中运行 Claude Code,因此在那里使用 **Terminal** 选项卡的步骤。

162* **`claude -p` 和其他非交互式运行**:`/plugin` 不运行,Claude 回复 `/plugin isn't available in this environment.` 您已安装的插件确实会加载。使用 [`claude plugin` commands](#install-from-your-shell) 从 shell 安装和管理它们。

163* **Agent SDK**:通过 SDK 的插件选项加载插件。请参阅 [Load plugins in the Agent SDK](/docs/zh-CN/agent-sdk/plugins)。

164 

165如果 Claude Code 报告在存储库的 `.claude/settings.json` 中启用的插件未安装,请参阅 [Enabled in project settings but not installed](/docs/zh-CN/plugins/loading#enabled-in-project-settings-but-not-installed)。

166 

167<Tip>

168 如果您是插件作者,正在测试磁盘上的插件副本,请从 shell 使用 `--plugin-dir` 启动 Claude Code,以便为一个会话加载它,而不是安装它。请参阅 [Flags that load a plugin for one session](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)。

169</Tip>

170 

171<h3 id="plugins-from-your-claude-ai-account">

172 Plugins from your claude.ai account

173</h3>

174 

175您的 claude.ai 账户是插件的单独来源,与您安装的市场并列:

176 

177* **What arrives**:您为 claude.ai 账户打开的每个插件,以及您的组织为其成员打开的每个插件。在终端会话中,每次您在使用该账户登录时启动 Claude Code 时,它们在后台同步;在 Cowork 会话中,它们在会话启动时下载。

178* **Where you see them**:在 `/plugin` 和 `claude plugin list` 中,ID 为 `<name>@synced`。您可以在自己的范围关闭一个,除非您的组织要求它。

179* **What doesn't go the other way**:您使用 `/plugin` 或 `claude plugin install` 安装的插件保留在此机器上,不会添加到您的 claude.ai 账户。

180 

181有关同步时间、登录要求和关闭同步,请参阅 [Plugins synced from claude.ai](/docs/zh-CN/plugins/loading#synced-plugins)。

182 

183<h3 id="install-from-your-shell">

184 Install from your shell

185</h3>

186 

187在 shell 中运行 `claude plugin install` 以安装插件,而无需启动 Claude Code 会话,例如从设置脚本。

188 

189* **Scope**:默认为用户范围。传递 `--scope project` 或 `--scope local` 以更改它。

190* **When the plugins load**:它安装的插件在您下次启动 Claude Code 时加载,或当您在已打开的会话中运行 `/reload-plugins` 时加载。

191* **The marketplace must be added first**:在没有人打开交互式 Claude Code 会话的机器上,官方市场未注册,因此从它安装的脚本在安装前运行 `claude plugin marketplace add anthropics/claude-plugins-official`。

192 

193```bash theme={null}

194claude plugin install formatter@your-org --scope project

195```

196 

197命令完成时打印 `Successfully installed plugin: formatter@your-org (scope: project)`。

198 

199某些插件通过运行其市场命名的命令来安装,称为 [`command` source](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)。Claude Code 向您显示该命令并要求您在运行前接受它。脚本没有人来回答该提示,因此在那里传递 `--yes` 以接受它。

200 

201对于每个 `claude plugin install` 标志,请参阅 [plugin install](/docs/zh-CN/plugins/cli-reference#plugin-install)。

202 

203<h2 id="add-a-marketplace">

204 Add a marketplace

205</h2>

206 

207当您想要的插件不在 Anthropic 官方市场中时,您只需要本节,例如同事发布的插件或来自 Anthropic 社区市场的插件。

208 

209市场是插件的目录,Claude Code 必须了解市场才能从中安装。您添加一次市场。之后,其插件出现在 **Discover** 选项卡上,并使用 `/plugin install <plugin>@<marketplace>` 在会话中或 `claude plugin install <plugin>@<marketplace>` 在 shell 中安装,其中 `<marketplace>` 是市场注册的名称。要在一个步骤中同时执行两者,请参阅 [Add a marketplace and install in one command](#add-a-marketplace-and-install-in-one-command)。

210 

211在 Claude Code 会话中,运行 `/plugin marketplace add` 后跟市场的来源:GitHub 存储库、任何主机上的 git 存储库、本地目录或文件,或托管的 `marketplace.json`。

212 

213| Source | What you type | Example |

214| :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- |

215| GitHub repository | `owner/repo`。添加 `#ref` 以固定分支或标签。 | `/plugin marketplace add anthropics/claude-code`,或 `/plugin marketplace add your-org/plugins#v1.2.0` 以固定 `v1.2.0` 标签 |

216| Git repository on any host | 完整的克隆 URL。添加 `#ref` 以固定分支或标签。 | `/plugin marketplace add https://gitlab.example.com/your-group/your-marketplace.git#v1.0.0` |

217| Local directory or file | 相对或绝对路径到包含 `.claude-plugin/marketplace.json` 的目录,或到 JSON 文件本身。以 `./` 或 `../` 开始相对路径,因为 Claude Code 将裸 `name/name` 读取为 GitHub 存储库。 | `/plugin marketplace add ./my-marketplace` |

218| Hosted `marketplace.json` | 其 `https://` URL | `/plugin marketplace add https://example.com/marketplace.json` |

219 

220从 shell,`claude plugin marketplace add` 采用相同的来源。

221 

222<Tip>

223 `/plugin market` 也可作为 `/plugin marketplace` 的较短形式。

224</Tip>

225 

226在每个 URL 上包含 `https://` 前缀,或对 SSH 使用 `git@host:path` 形式。如果您输入裸 `gitlab.example.com/your-group/your-marketplace.git`,Claude Code 将其读取为 GitHub `owner/repo` 简写并拒绝它。

227 

228命令成功时,它打印 `Successfully added marketplace: <name>`,市场的插件在下次打开 `/plugin` 时出现在 **Discover** 选项卡上,无需重新加载。如果失败,请在 [Troubleshoot plugins](/docs/zh-CN/plugins/troubleshooting#add-a-marketplace) 中匹配错误消息。

229 

230<h3 id="add-a-marketplace-and-install-in-one-command">

231 Add a marketplace and install in one command

232</h3>

233 

234要从您尚未添加的市场安装插件,请在 Claude Code 会话中运行 `/plugin install` 并使用 `--marketplace` 命名市场来源。需要 Claude Code v2.1.275 或更高版本。

235 

236```text theme={null}

237/plugin install deploy-helper --marketplace your-org/plugins

238```

239 

240来源采用 [the same forms as `/plugin marketplace add`](#add-a-marketplace),例如 GitHub `owner/repo`、git URL 或本地路径,除了它不能包含空格。单独给出插件名称,不带 `@marketplace` 后缀。

241 

242如果您尚未添加该市场,Claude Code 显示它解析的来源并要求您在添加前确认。一旦添加了市场,插件的详细信息打开,您选择 [installation scope](#install-a-plugin)。如果来源与您已添加的市场匹配,Claude Code 跳过确认并在该市场中打开插件的详细信息。

243 

244<h3 id="add-a-private-marketplace">

245 Add a private marketplace

246</h3>

247 

248私有市场是您需要凭证才能克隆的存储库中的市场,在 GitHub 或任何其他 git 主机上。您使用与公共市场相同的 `/plugin marketplace add` 或 `claude plugin marketplace add` 命令添加它。Claude Code 使用已在您的机器上的 git 凭证克隆它,从不提示,因此每种连接方式都有要求:

249 

250* **HTTPS**:您的 git 凭证助手适用,因此您使用 `gh auth login`、macOS Keychain 或 `git-credential-store` 设置的访问权限有效。交互式提示被抑制,因此您从未认证过的主机失败而不是要求密码。

251* **SSH**:主机必须已在您的 `known_hosts` 文件中,密钥必须在没有密码短语提示的情况下工作,因为主机指纹和密码短语提示也被抑制。

252* **GitHub `owner/repo` shorthand**:Claude Code 检查您的 SSH 密钥是否向 `github.com` 认证,如果认证则通过 SSH 克隆,如果不认证则通过 HTTPS 克隆。设置 [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/zh-CN/env-vars#variables) 以跳过该检查并始终通过 HTTPS 克隆。

253 

254当您运行 `/plugin install`、`/plugin marketplace update` 和 `claude plugin update` 时,相同的凭证适用。

255 

256在 GitHub Enterprise Server 主机上,请参阅 [Plugin marketplaces on GHES](/docs/zh-CN/github-enterprise-server#plugin-marketplaces-on-ghes) 了解每个操作需要的凭证。

257 

258如果您的组织通过托管设置为您注册市场,您不需要自己添加它。请参阅 [Pre-install and require plugins](/docs/zh-CN/plugins/org#pre-install-and-require-plugins)。

259 

260<h3 id="add-from-claude-ai">

261 Add a marketplace from claude.ai

262</h3>

263 

264在 [plugins sync from your claude.ai account](/docs/zh-CN/plugins/loading#synced-plugins) 的终端会话中,claude.ai 也可以为您列出插件市场,例如您的组织的插件库和您自己的 claude.ai 上传。您通过其名称而不是来源添加其中之一。从 claude.ai 添加市场需要 Claude Code v2.1.273 或更高版本。

265 

266从 `/plugin` 面板或从 shell 添加 claude.ai 市场:

267 

268* **Inside a session**:运行 `/plugin` 并转到 **Marketplaces** 选项卡,该选项卡列出来自 claude.ai 的市场。在那里选择一个以添加它。

269* **From your shell**:运行 `claude plugin marketplace list`,它在 `From claude.ai:` 部分中打印它们。然后使用 `--claudeai` 标志和列表中显示的名称运行 `claude plugin marketplace add`。

270 

271例如,此命令添加名为 `claudeai-organization-library` 的市场:

272 

273```bash theme={null}

274claude plugin marketplace add --claudeai claudeai-organization-library

275```

276 

277Claude Code 在以 `claudeai-` 开头的本地名称下注册市场,该名称源自 claude.ai 列出的名称。例如,列为"Organization library"的市场变为 `claudeai-organization-library`。通过该名称安装其插件,例如使用 `claude plugin install <plugin>@claudeai-organization-library`。

278 

279如果您登出或登录到不同的 claude.ai 组织,市场保持配置但不显示插件,您已从中安装的插件继续加载。

280 

281`From claude.ai:` 部分也可以列出通过 claude.ai 共享的基于 git 的市场,并为每个市场打印来源。通过该来源添加它们,如 [Add a marketplace](#add-a-marketplace) 中所示,而不是使用 `--claudeai`。

282 

283<h2 id="manage-installed-plugins">

284 Manage installed plugins

285</h2>

286 

287`/plugin` 中的 **Installed** 选项卡列出您的插件,以及启用、禁用、更新或卸载每个插件的操作。在 Claude Code 会话中,运行 `/plugin` 并按 **Tab** 到达它,或运行 `/plugin enable`、`/plugin disable` 或 `/plugin uninstall` 以打开面板并在那里进行更改。禁用的插件在列表底部的折叠标题下分组。在列表上使用这些键:

288 

289* 输入以按名称或描述过滤。

290* 按 **Space** 启用或禁用所选插件,按 **f** 将其收藏。

291* 按 **Enter** 打开插件的详细信息。那里的菜单提供 **Disable plugin** 或 **Enable plugin**、**Update now** 和 **Uninstall**。采用设置的插件也提供 **Configure options**。

292 

293该选项卡也可以显示 **Managed** 范围的插件。您的组织通过 [managed settings](/docs/zh-CN/settings#settings-files) 安装了这些,您无法在此处启用、禁用或卸载它们。

294 

295对于您的组织在 claude.ai 上要求的同步插件,请参阅 [Manage plugins synced from claude.ai](#manage-plugins-synced-from-claude-ai)。

296 

297当您关闭 `/plugin` 面板并在其中进行待处理更改时,Claude Code 为您运行 `/reload-plugins` 以应用它们。如果重新加载会 [invalidate the prompt cache](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),它会警告并改为保留更改待处理。运行 `/reload-plugins --force` 以应用它们。

298 

299<h3 id="manage-plugins-synced-from-claude-ai">

300 Manage plugins synced from claude.ai

301</h3>

302 

303`/plugin` 中的 **Installed** 选项卡也列出 [plugins synced from your claude.ai account](/docs/zh-CN/plugins/loading#synced-plugins),其来源为 `synced`。同步插件在 Claude Code v2.1.273 或更高版本的终端会话中出现。

304 

305* **Enable or disable**:使用 **Installed** 选项卡,除非您的组织将插件标记为必需。

306* **Remove**:在 claude.ai 上关闭插件。

307 

308当 Claude Code 将添加、更新或删除的插件同步到交互式会话中时,您会看到 `Plugins changed. Run /reload-plugins to activate.` 运行 `/reload-plugins` 以在该会话中加载更改,或将其留给下次启动 Claude Code 时。

309 

310<h3 id="uninstall-a-plugin-the-project-enables">

311 Uninstall a plugin the project enables

312</h3>

313 

314当您为此存储库的 `.claude/settings.json` 启用的插件选择 **Uninstall** 时,无论是从 **Installed** 选项卡还是使用 `/plugin uninstall`,Claude Code 都会询问是为您禁用它还是为所有人卸载它:

315 

316* **Disable for me**:按 **y**。Claude Code 在您的 `.claude/settings.local.json` 中为插件写入 `false` 并为项目保留它已安装。

317* **Uninstall for everyone**:按 **u**。Claude Code 从共享的 `.claude/settings.json` 中删除插件。

318 

319<h3 id="see-what-an-installed-plugin-adds-to-your-sessions">

320 See what an installed plugin adds to your sessions

321</h3>

322 

323在 shell 中,为已安装的插件运行 `claude plugin details <name>`。`Always-on` 行是插件添加到启用它的每个会话的令牌数,每个组件行显示哪个 skill 或 agent 贡献最多。有关完整输出和每个数字的含义,请参阅 [Measure what a plugin costs](/docs/zh-CN/plugins/measure#measure-what-a-plugin-costs)。

324 

325<h3 id="find-plugins-you-no-longer-use">

326 Find plugins you no longer use

327</h3>

328 

329在 `/plugin` 中的 **Installed** 选项卡上,您自己安装且最近未使用的插件出现在 **Not used recently** 标题下,每个插件的详细信息显示 **Last used** 行。使用该标题和该行查找仍添加启动和上下文成本的插件,然后禁用或卸载它们。

330 

331<h3 id="plugins-with-dependencies">

332 Plugins with dependencies

333</h3>

334 

335插件可以声明它依赖的其他插件。当您从市场安装、禁用或卸载这样的插件时,Claude Code 也对这些依赖项进行操作:

336 

337* **Install**:Claude Code 也在相同范围安装并启用插件的声明依赖项。成功消息列出它们。

338* **Enable**:Claude Code 也启用已安装但禁用的插件的依赖项。如果声明的依赖项未安装,启用失败,消息告诉您先安装它。

339* **Disable**:当另一个启用的插件仍需要您命名的插件时,Claude Code 拒绝并打印以正确顺序禁用两者的链式命令。

340* **Uninstall**:自动安装的依赖项保留到您在 shell 中运行 `claude plugin prune` 为止;请参阅 [plugin prune](/docs/zh-CN/plugins/cli-reference#plugin-prune)。

341 

342如果您改为使用 `--plugin-dir` 加载插件,请参阅 [Test a plugin and its dependency locally](/docs/zh-CN/plugins/dependencies#test-a-plugin-and-its-dependency-locally)。

343 

344<h3 id="manage-plugins-from-your-shell">

345 Manage plugins from your shell

346</h3>

347 

348您也可以在不启动 Claude Code 会话的情况下管理插件。在 shell 中,运行 `claude plugin install`、`enable`、`disable` 或 `uninstall` 作为普通终端命令;它们更改 `/plugin` 面板所做的相同设置。每个都采用 `--scope` 以针对一个范围,并在您省略它时使用默认范围:

349 

350* `enable` 和 `disable` 作用于其设置已列出插件的最具体范围。

351* `install` 和 `uninstall` 作用于用户范围。

352 

353例如,这些命令禁用并重新启用插件,然后在项目范围卸载它:

354 

355```bash theme={null}

356claude plugin disable formatter@your-org

357claude plugin enable formatter@your-org

358claude plugin uninstall formatter@your-org --scope project

359```

360 

361<h2 id="keep-plugins-updated">

362 Keep plugins updated

363</h2>

364 

365当插件来自的市场打开了自动更新时,插件会自动更新。会话启动后,Claude Code 刷新这些市场并更新您从中安装的插件的磁盘副本。

366 

367运行的会话保持它已加载的版本。更新后,您会看到 `Plugin updated: <name> · Run /reload-plugins to apply`,下一个会话自动加载新版本。

368 

369这些是每种市场类型的自动更新默认值:

370 

371* **On by default**:`claude-plugins-official` 和其他 [official marketplace names](/docs/zh-CN/plugins/security#official-marketplace-names)(除了 `knowledge-work-plugins` 和 `first-party-plugins`)以及 [marketplaces added from claude.ai](#add-from-claude-ai)。

372* **Off by default**:所有其他市场,包括社区市场、第三方市场和本地开发市场。

373 

374有关自动更新何时运行、它跳过哪些插件以及关闭它的环境变量,请参阅 [When auto-update runs](/docs/zh-CN/plugins/loading#when-auto-update-runs)。

375 

376<h3 id="turn-auto-update-on-or-off-for-a-marketplace">

377 Turn auto-update on or off for a marketplace

378</h3>

379 

380在 Claude Code 会话中,运行 `/plugin` 并转到 **Marketplaces** 选项卡。选择市场,然后选择 **Enable auto-update** 或 **Disable auto-update**。

381 

382<h3 id="update-one-plugin-now">

383 Update one plugin now

384</h3>

385 

386在会话中,在 `/plugin` 中的 **Installed** 选项卡上打开插件并选择 **Update now**,或在 shell 中运行 `claude plugin update <plugin>@<marketplace>`。

387 

388<h3 id="auto-update-from-a-private-marketplace">

389 Auto-update from a private marketplace

390</h3>

391 

392对于私有市场,请参阅 [What background auto-update does with credentials](/docs/zh-CN/plugins/host-marketplace#what-background-auto-update-does-with-credentials) 了解后台自动更新如何通过 SSH 和 HTTPS 认证,以及 [Troubleshoot plugins](/docs/zh-CN/plugins/troubleshooting#add-a-marketplace) 了解您在失败时看到的消息。

393 

394<h2 id="manage-marketplaces">

395 Manage marketplaces

396</h2>

397 

398`/plugin` 中的 **Marketplaces** 选项卡列出您注册的每个市场及其来源。选择一个以浏览其插件、更新其列表、打开或关闭自动更新,或删除它。

399 

400您也可以使用命令从 shell 或会话内列出、更新和删除市场:

401 

402| Action | In your shell | Inside a session |

403| :----------------------------- | :---------------------------------------- | :---------------------------------- |

404| List marketplaces | `claude plugin marketplace list` | `/plugin marketplace list` |

405| Update a marketplace's listing | `claude plugin marketplace update <name>` | `/plugin marketplace update <name>` |

406| Remove a marketplace | `claude plugin marketplace remove <name>` | `/plugin marketplace remove <name>` |

407 

408当您删除市场时,Claude Code 卸载您从中安装的每个插件,并从您的设置文件中删除其 `enabledPlugins` 条目。**Marketplaces** 选项卡在要求您确认前命名这些插件。

409 

410<h2 id="next-steps">

411 Next steps

412</h2>

413 

414* [Anthropic's marketplaces](/docs/zh-CN/plugins/anthropic-marketplaces):官方、社区和演示市场的区别以及在哪里浏览每个市场

415* [Plugin loading reference](/docs/zh-CN/plugins/loading):为什么插件加载、未加载或在更新后未更改

416* [Plugin security and trust](/docs/zh-CN/plugins/security):在从您不认识的市场安装插件前要查看的内容

417* [Troubleshoot plugins](/docs/zh-CN/plugins/troubleshooting):安装和市场错误消息及其修复

418* [Create a plugin](/docs/zh-CN/plugins/create):构建您自己的

plugins/loading.md +424 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 插件加载参考

6 

7> 追踪 Claude Code 从何处加载每个插件,哪个设置文件决定是否加载,以及为什么更新没有产生任何变化。

8 

9当插件未加载、加载了与预期不同的副本,或未获取更新时,使用此页面查看哪个源、设置范围或磁盘上的文件决定了这一点。它提供了 Claude Code 在会话启动时和每次运行 `/reload-plugins` 时应用的规则。您也可以要求 Claude 阅读此页面并诊断您的设置。

10 

11<Note>

12 这些情况在其他页面上有介绍:

13 

14 * **安装、启用、禁用和更新步骤**:请参阅[安装和管理插件](/docs/zh-CN/plugins/install)

15 * **您有特定的错误消息**:请参阅[插件故障排除](/docs/zh-CN/plugins/troubleshooting)

16</Note>

17 

18从[检查插件达到的阶段](#check-which-stage-a-plugin-reached)开始,了解已安装插件经过的三个阶段,或转到与您看到的情况相匹配的部分:

19 

20* 您关闭的插件仍然加载:[查找插件的启用位置](#find-where-a-plugin-is-enabled)

21* 更新没有产生任何变化:[版本和更新](#versions-and-updates)

22* 您正在查看 `~/.claude/plugins/` 下的文件:[查找磁盘上的插件](#find-plugins-on-disk)

23* `--plugin-dir` 插件未加载,或加载了同名插件:[名称冲突](#name-conflicts)

24 

25<h2 id="check-which-stage-a-plugin-reached">

26 检查插件达到的阶段

27</h2>

28 

29`enabledPlugins` 条目分阶段成为您可以使用的插件:您的设置声明它,Claude Code 将其获取到磁盘,运行中的会话加载它。当插件的行为与设置文件建议的不符时,检查它达到了哪个阶段:

30 

31* **已声明,在设置中**:`enabledPlugins` 说明哪些插件应该打开,`extraKnownMarketplaces` 说明哪些市场应该存在。当您运行 `claude plugin marketplace add` 时,Claude Code 将市场写入您的用户设置中的 `extraKnownMarketplaces` 以及磁盘

32* **已获取,在 `~/.claude/plugins/` 下的磁盘上**:Claude Code 已获取的记录和获取的文件本身:

33 * `known_marketplaces.json` 记录 Claude Code 已获取的每个市场,包括其 `source`、`installLocation`、`lastUpdated` 和 `autoUpdate`。每个用户有一个 `known_marketplaces.json`,因此您在一个项目中添加的市场在每个项目中都可用

34 * `installed_plugins.json` 记录每个安装及其 `scope`、`installPath` 和 `version`

35 * `cache/` 保存插件文件

36* **已加载,在运行中的会话中**:Claude Code 在启动时或最后一次 `/reload-plugins` 时加载的插件集。对设置或磁盘的更改不会到达此层,直到您运行 `/reload-plugins` 或启动新会话。这就是为什么 `claude plugin update` 以 `Restart to apply changes.` 结尾,背景更新会提示您 `Run /reload-plugins to apply`

37 

38<h3 id="plugins-and-marketplaces-that-aren’t-on-disk-at-session-start">

39 会话启动时磁盘上没有的插件和市场

40</h3>

41 

42插件在会话启动时从 `installed_plugins.json` 和缓存加载,不使用网络。会话启动后,Claude Code 在后台检查声明的市场:

43 

44* **设置声明但 `known_marketplaces.json` 缺少的市场**:Claude Code 克隆它,然后重新加载插件并下载未缓存的已启用插件

45* **声明的市场其源在设置中更改**:Claude Code 从新源重新获取它并显示 `Plugins changed. Run /reload-plugins to activate.`

46 

47既未被任何路径获取且没有可用缓存目录的已启用插件在 `/plugin` **Errors** 选项卡中显示 `Plugin "<name>" not cached at <path>`,`claude plugin list` 在同一行添加 `— run /plugin to refresh`。有关修复,请参阅[`Plugin "<name>" not cached at <path>`](/docs/zh-CN/plugins/troubleshooting#plugin-not-cached-at)。

48 

49<h2 id="find-where-a-plugin-came-from">

50 查找插件的来源

51</h2>

52 

53每个插件都有形式为 `<name>@<origin>` 的 id,这是您在设置文件和 `claude plugin list --json` 中看到的。`@` 之后的部分告诉您 Claude Code 在哪里找到了插件:

54 

55| ID 结尾 | 插件如何到达 | 如何打开或关闭 |

56| :--------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------- |

57| `@<marketplace>` | 您从添加的市场安装了它 | 在设置文件中的 `enabledPlugins` 下设置 `"<name>@<marketplace>": true` 或 `false` |

58| `@inline` | 您使用 `--plugin-dir` 或 `--plugin-url` 启动了 Claude Code,设置了 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables),或 Agent SDK 应用传递了 `plugins` 选项。它仅为该会话加载 | 除非清单设置 `defaultEnabled: false` 或设置文件设置 `"<name>@inline": false`,否则为会话打开 |

59| `@skills-dir` | 您在 `~/.claude/skills/` 或项目的 `.claude/skills/` 下保存了具有 `.claude-plugin/plugin.json` 的插件目录 | 清单的 `defaultEnabled`,除非设置文件将 `"<name>@skills-dir"` 设置为 `true` 或 `false` |

60| `@synced` | 您或您的组织为您的 claude.ai 账户打开了它,Claude Code [下载了它](#synced-plugins) | 除非清单设置 `defaultEnabled: false` 或设置文件设置 `"<name>@synced": false`,否则打开。您的组织标记为必需的插件无论如何都会加载 |

61 

62对于市场插件,`<name>` 是 `marketplace.json` 中的条目名称;对于 `@inline` 和 `@skills-dir`,它是插件清单中的 `name`。

63 

64此表中的源名称是保留的,因此没有市场可以命名为 `inline`、`skills-dir` 或 `synced`。

65 

66<h3 id="entry-name-and-manifest-name">

67 条目名称和清单名称

68</h3>

69 

70市场插件有两个名称,它们可能不同:

71 

72* **`marketplace.json` 中的条目名称**:安装和启用密钥。这是您在 `enabledPlugins` 中写入的内容,缓存目录的命名依据,以及 `claude plugin list` 显示的内容

73* **清单中的 `name`**:插件组件命名空间所在的位置,以及[名称冲突](#name-conflicts)比较的内容

74 

75<h3 id="plugins-shared-through-a-repository">

76 通过存储库共享的插件

77</h3>

78 

79要通过存储库共享插件,请在 `.claude/settings.json` 中的 `enabledPlugins` 下列出它,或将其放在 `.claude/skills/` 下。Claude Code 不扫描项目的 `.claude/plugins/` 目录。

80 

81云会话不会添加存储库在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下列出的市场,因为这需要工作区信任对话框,云会话永远不会显示。

82 

83项目范围的技能目录插件仅从会话[主工作目录](/docs/zh-CN/permissions#working-directories)的 `.claude/skills/` 加载,并且仅在您接受该文件夹的[工作区信任对话框](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)后加载。它不会[搜索从存储库根目录向上的父目录](/docs/zh-CN/skills#discovery-from-parent-and-nested-directories),就像普通技能和命令那样。如果您从子目录启动,存储库根目录中的插件不会加载。改为从存储库根目录启动,或 [使用 `/cd` 将会话移到那里](/docs/zh-CN/permissions#move-the-session-to-another-directory)(v2.1.246 或更高版本)。

84 

85项目范围的插件被检入存储库,并到达克隆它的每个协作者。因为该内容来自存储库而不是来自您,它仅在应用于 `.claude/settings.json` 中项目允许规则的相同信任检查后加载。信任父文件夹或使用 `-p` 运行是不够的。运行代码的组件受到进一步限制:

86 

87* 它声明的 MCP 服务器经过[与项目 `.mcp.json` 相同的每服务器批准](/docs/zh-CN/mcp)

88* 它声明为[MCP 包](/docs/zh-CN/plugins/manifest-reference#mcpservers)、`.mcpb` 或 `.dxt` 文件或来自插件目录外文件的 MCP 服务器被跳过。内联声明它们或在插件目录内的 `.mcp.json` 中声明

89* [后台监视器](/docs/zh-CN/plugins/components#monitors)不加载

90 

91个人范围的插件没有这些限制。

92 

93有关如何编写 `--plugin-dir` 和技能目录插件,请参阅[创建插件](/docs/zh-CN/plugins/create)。

94 

95<h3 id="synced-plugins">

96 从 claude.ai 同步的插件

97</h3>

98 

99您为 claude.ai 账户打开的插件也会在 Claude Code 中加载,与您从市场安装的插件一起。这包括您的组织为其成员打开的插件。这些插件中的每一个都作为 `<name>@synced` 加载,没有市场,也没有[安装记录](#check-which-stage-a-plugin-reached)。

100 

101在终端会话中,同步插件的技能、代理、hooks、MCP 服务器和 LSP 服务器都加载,具有与您安装的市场插件相同的信任。

102 

103有关 Cowork 加载的组件,请参阅 claude.com 上的[claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)。

104 

105同步插件在 Cowork 会话和您使用 claude.ai 账户登录的终端会话中加载:

106 

107* **[Cowork](https://claude.com/product/cowork)**:Claude Code 在会话启动时将它们下载到会话自己的环境中

108* **终端会话**:每次启动 Claude Code 时,它在后台同步一次,下载新的和更新的插件,并删除您或您的组织关闭的插件。终端会话中的同步需要 Claude Code v2.1.273 或更高版本

109 

110<h4 id="sync-timing-in-terminal-sessions">

111 终端会话中的同步时间

112</h4>

113 

114因为终端同步在后台运行,它可能在您的会话启动后完成。当它在交互式会话中添加、更新或删除同步插件时,您会看到 `Plugins changed. Run /reload-plugins to activate.` 运行 `/reload-plugins` 以在该会话中加载更改,或将其留到下次启动 Claude Code 时。

115 

116如果您在会话运行时在 claude.ai 上启用插件,该插件将在下次启动 Claude Code 时下载。

117 

118<h4 id="sign-in-requirements-for-terminal-sync">

119 终端同步的登录要求

120</h4>

121 

122在您的终端中,插件仅在您使用 claude.ai 账户登录的会话中同步。

123 

124如果您在早期版本的 Claude Code 上登录,该登录不会覆盖插件,直到 Claude Code 在后台续期。要更快获得访问权限,请再次运行 `/login`。插件同步然后在下次启动 Claude Code 时开始。

125 

126<h4 id="control-which-synced-plugins-load">

127 控制哪些同步插件加载

128</h4>

129 

130您可以逐个关闭同步插件,除了您的组织要求的插件,或关闭机器上的每个同步插件:

131 

132* **一个插件**:在您的 shell 中运行 `claude plugin disable <name>@synced`,会话中 `/plugin` **Installed** 选项卡都在您的用户级[`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins)中保存 `"<name>@synced": false`。要在每个环境中将插件排除在项目之外,请在项目的已提交 `.claude/settings.json` 中设置相同的密钥

133* **机器上的每个同步插件**:在您的用户设置中设置 [`syncClaudeAiPlugins`](/docs/zh-CN/settings-reference#syncclaudeaiplugins) 为 `false`,或您的组织在[托管设置](/docs/zh-CN/managed-settings)中设置它。Claude Code 停止下载,下次启动时,它将已同步的插件移到 `~/.claude/plugins/.trash/`,不再加载它们。如果您的组织在 claude.ai 上关闭技能,插件也会停止同步

134* **您的组织要求的插件**:您的组织在 claude.ai 上标记为必需的插件即使您之前禁用了它也会加载。`claude plugin disable` 拒绝它,显示 `Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it.`,`claude plugin list` 将其标记为 `required by your org`

135 

136有关在 claude.ai 上删除插件,请参阅[管理已安装的插件](/docs/zh-CN/plugins/install#manage-installed-plugins)。

137 

138<h2 id="find-where-a-plugin-is-enabled">

139 查找插件的启用位置

140</h2>

141 

142您可以在六个源中的任何一个中设置 `enabledPlugins` 条目。该表从最低优先级到最高优先级列出它们,以及每个适用于谁。有关设置文件本身,请参阅[设置文件及其影响的人](/docs/zh-CN/settings#where-settings-live)。

143 

144| 源 | 您在哪里设置它 | 到达 |

145| :---------- | :------------------------------------------------------------------------------ | :----------------------------------------- |

146| `--add-dir` | 您使用 `--add-dir` 传递的目录中的 `.claude/settings.json` 或 `.claude/settings.local.json` | 仅此会话。仅 `true` 值有效,每个其他源都会覆盖它 |

147| `user` | `~/.claude/settings.json` | 您,在每个项目中 |

148| `project` | `.claude/settings.json` | 克隆存储库的每个人 |

149| `local` | `.claude/settings.local.json` | 您,仅在此存储库中 |

150| `flag` | 您在启动时传递的 `--settings` 值 | 仅此会话 |

151| `managed` | [托管设置](/docs/zh-CN/managed-settings) | 策略覆盖的每个用户。`true` 强制启用,`false` 阻止,没有其他源覆盖它们 |

152 

153这些源逐个密钥合并。对于每个插件 id,应用的值来自提及该 id 的最高优先级源。不提及该 id 的源将较低优先级源的值保留在有效状态。

154 

155<h3 id="disabled-in-user-settings-but-still-loads">

156 在用户设置中禁用但仍然加载

157</h3>

158 

159如果您在 `~/.claude/settings.json` 中将插件设置为 `false` 并且它仍然加载,较高优先级源中的 `true` 正在覆盖它。插件在 `claude plugin list` 和 `/plugin` 中的行显示 `Disabled in ~/.claude/settings.json but still loads — project settings enable it, which overrides your user setting`。该消息命名覆盖您的源:`project`、`project, gitignored`(对于 `.claude/settings.local.json`)、`cli flag` 或 `managed`。

160 

161要在您的机器上选择退出项目启用的插件,请在 `.claude/settings.local.json` 中将 id 设置为 `false`,它的优先级高于项目文件。

162 

163<h3 id="enabled-in-project-settings-but-not-installed">

164 在项目设置中启用但未安装

165</h3>

166 

167当插件的唯一 `true` 在项目的 `.claude/settings.json` 中时,Claude Code 不会在未安装它的机器上获取它,除非其市场条目具有[相对路径源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources)或[种子目录](/docs/zh-CN/plugins/org#seed-containers-and-ci)已经保存它。相反,`/plugin` **Errors** 选项卡显示 `Plugin "<name>" is enabled in project settings but isn't installed here`。

168 

169相对路径插件不需要安装记录,因为它从市场本身加载。

170 

171Claude Code 仅当以下源之一将其设置为 `true` 时才获取具有外部源的插件:

172 

173* 您的用户设置

174* git 不跟踪的 `.claude/settings.local.json`

175* `--settings` 标志

176* 托管设置

177 

178<h2 id="find-plugins-on-disk">

179 查找磁盘上的插件

180</h2>

181 

182Claude Code 在一个插件根目录下保存插件文件和状态记录,该目录是 `~/.claude/plugins`,除非您设置了 [`CLAUDE_CODE_PLUGIN_CACHE_DIR`](/docs/zh-CN/env-vars)。表中的每个路径都相对于该根目录。

183 

184| 路径 | 它保存什么 |

185| :--------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

186| `cache/<marketplace>/<plugin>/<version>/` | 市场插件的每个已安装版本一个目录。`<plugin>` 是市场条目名称,`<version>` 是[已解析版本](#versions-and-updates)。`${CLAUDE_PLUGIN_ROOT}` 指向此目录 |

187| `data/<plugin-id>/` | 插件的持久目录,公开为 `${CLAUDE_PLUGIN_DATA}`。有关如何形成 `<plugin-id>`,请参阅[路径变量和持久数据](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。Claude Code 在插件组件首次使用它时创建它,并在更新中保留它。当您从其最后一个范围卸载插件时,Claude Code 删除它,除非您传递 `--keep-data` |

188| `marketplaces/<name>/` | 从 GitHub、另一个 Git 主机或 URL 添加的市场的克隆或下载。从本地 `file` 或 `directory` 源添加的市场在此处没有副本,其 `installLocation` 在 `known_marketplaces.json` 中是您给定的路径 |

189| `synced/` | Claude Code [从您的 claude.ai 账户同步的](#synced-plugins)插件 |

190| `.trash/` | claude.ai 同步删除的插件,例如在您在 claude.ai 上关闭一个或停止同步后 |

191| `installed_plugins.json` 和 `known_marketplaces.json` | Claude Code 已安装的内容和已获取的市场的记录,在[检查插件达到的阶段](#check-which-stage-a-plugin-reached)下描述。[托管在 claude.ai 上的市场](/docs/zh-CN/plugins/install#add-from-claude-ai)改为记录在 `known_marketplaces_claudeai.json` 中 |

192| `flagged-plugins.json` | Claude Code 卸载的插件,因为其市场将其除名。它们出现在 `/plugin` 的 **Flagged** 部分;请参阅[托管市场](/docs/zh-CN/plugins/host-marketplace) |

193 

194因为 `${CLAUDE_PLUGIN_ROOT}` 指向版本目录,插件的根路径随每个版本更改。改为在 `${CLAUDE_PLUGIN_DATA}` 中保留插件的持久文件。

195 

196<h3 id="in-place-and-copied-plugins">

197 就地和复制的插件

198</h3>

199 

200Claude Code 根据插件的来源,从您保存它们的位置就地加载某些插件,并将其余的复制到缓存中:

201 

202* **`--plugin-dir` 和技能目录插件**:目录就地加载,永远不会被复制。`--plugin-url` 存档或 `--plugin-dir` `.zip` 首先被提取到会话临时目录中

203* **您从本地目录添加的市场中的相对路径插件**:插件从市场文件夹内的其路径就地加载。您对源目录的编辑在下次会话启动或 `/reload-plugins` 时生效,您不需要增加版本。插件的 hook 进程以及 MCP 和 LSP 服务器接收指向源目录的 `CLAUDE_PLUGIN_ROOT`。有关其 Node.js 包依赖项,请参阅[依赖项安装何时运行](#when-the-dependency-install-runs)

204* **[链接模式](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)中的 `command` 源插件**:命令打印的目录通过缓存条目中的链接就地加载

205* **每个其他市场插件**:Claude Code 在安装时将插件复制到 `cache/<marketplace>/<plugin>/<version>/` 中,并从该副本加载。插件目录外的文件不会被复制,因此当复制的插件内的脚本读取插件根目录上方的路径(如 `../shared`)时,它找不到它们

206 

207<h3 id="paths-that-escape-the-plugin-directory">

208 逃逸插件目录的路径

209</h3>

210 

211无论插件就地加载还是从缓存副本加载,Claude Code 都不允许它声明其自己目录外的组件。它拒绝解析到插件根目录外的组件路径,无论路径是在 `plugin.json` 还是市场条目中声明的:

212 

213* **按书写指向插件外的路径**,例如 `../shared-utils`

214* **导致插件外的符号链接**,除了[市场内插件之间的链接](/docs/zh-CN/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks)

215* **在 macOS 和 Linux 上,路径中任何地方包含反斜杠的路径**,即使路径保留在插件内。因此使用反斜杠路径声明的组件仅在 Windows 上加载,所以使用正斜杠编写组件路径,例如 `./commands/deploy.md`

216 

217被拒绝的路径显示为[`path escapes plugin directory`](/docs/zh-CN/errors#path-escapes-plugin-directory)错误,插件加载时不包含该组件。

218 

219<h3 id="cleanup-of-previous-versions">

220 以前版本的清理

221</h3>

222 

223当您更新或卸载插件时,Claude Code 将 `.orphaned_at` 标记写入以前的版本目录。它在 14 天后的后台清理中删除该目录,因此已加载旧版本的会话继续运行。

224 

225扫描仅在 `installed_plugins.json` 记录至少一个安装时运行。卸载最后一个插件后,孤立目录保留到您安装另一个。

226 

227<h3 id="node-js-package-dependencies">

228 Node.js 包依赖项

229</h3>

230 

231当 Claude Code 将插件复制到缓存中时,它也会在那里安装插件的 Node.js 包依赖项,以便插件的 hooks 和 MCP 服务器可以加载它们。

232 

233本部分涵盖插件在其自己的 `package.json` 中声明的 npm 和 Bun 包。对于依赖其他插件的插件,请参阅[插件依赖项版本](/docs/zh-CN/plugins/dependencies)。

234 

235<h4 id="when-the-dependency-install-runs">

236 依赖项安装何时运行

237</h4>

238 

239Claude Code 在创建复制的版本目录时在其内部运行安装:

240 

241* 当您安装插件时

242* 当 Claude Code 将插件更新到新版本时

243* 在会话启动时,当已启用的插件未缓存时,例如在新机器上

244 

245对于从本地目录市场[就地加载](#in-place-and-copied-plugins)的相对路径插件,Claude Code 不会将依赖项安装到源目录中。自己在那里安装它们,或从 hook 安装到[`${CLAUDE_PLUGIN_DATA}`](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。

246 

247安装仅在插件的根目录同时包含 `package.json` 和支持的锁定文件时运行。锁定文件决定 Claude Code 运行的命令:

248 

249| 锁定文件 | 命令 |

250| :------------------------------------------ | :----------------------------------------------- |

251| `bun.lock` 或 `bun.lockb` | `bun install --frozen-lockfile --ignore-scripts` |

252| `npm-shrinkwrap.json` 或 `package-lock.json` | `npm ci --ignore-scripts` |

253 

254如果插件包含这些锁定文件中的多个,Claude Code 使用第一个匹配项,按顺序检查:`bun.lock`、`bun.lockb`、`npm-shrinkwrap.json`、`package-lock.json`。

255 

256Claude Code 跳过 Yarn 和 pnpm 锁定文件以及 Bun 锁定文件旁边的 `bunfig.toml` 的安装:

257 

258* 如果您的插件仅有 `yarn.lock` 或 `pnpm-lock.yaml`,请将其替换为 npm 锁定文件

259* 如果 `bunfig.toml` 与 Bun 锁定文件在同一目录中,请删除 `bunfig.toml`,或将 Bun 锁定文件替换为 npm 锁定文件

260 

261包含 npm 锁定文件以到达最多用户。Claude Code 从用户的 PATH 运行匹配的锁定文件的包管理器,如果缺少该包管理器,不会尝试其他锁定文件。

262 

263对于通过 npm 源分发的插件,使用 `npm-shrinkwrap.json`,因为 npm 从已发布的包中排除 `package-lock.json`。

264 

265<h4 id="limits-on-the-dependency-install">

266 依赖项安装的限制

267</h4>

268 

269Claude Code 限制此依赖项安装,以便插件或其包中的任何代码在安装期间不执行,并限制其运行时间:

270 

271* **冻结解析**:Bun 和 npm 安装锁定文件精确固定的内容,当 `package.json` 和锁定文件不一致时失败而不是重新解析版本

272* **无生命周期脚本**:`--ignore-scripts` 防止 `preinstall`、`install` 和 `postinstall` 脚本运行,因此在这些脚本中构建本机模块的依赖项在此安装期间下载但不编译

273* **60 秒超时**:Claude Code 停止运行超过 60 秒的安装并将其视为失败

274 

275Claude Code 在此依赖项安装之前获取 npm 源插件,包的任何自己的安装脚本在获取期间不运行。请参阅 [npm 插件源](/docs/zh-CN/plugins/marketplace-reference#npm-plugin-source)。

276 

277您无法关闭自动安装。没有设置或环境变量禁用它。

278 

279在受限网络中,请参阅[网络访问要求](/docs/zh-CN/network-config#network-access-requirements)以允许的主机。

280 

281<h4 id="when-the-dependency-install-fails-or-is-skipped">

282 依赖项安装失败或被跳过时

283</h4>

284 

285失败或跳过的安装永远不会阻止插件,每种情况都留下不同的迹象:

286 

287* 失败的安装或因 Yarn 或 pnpm 锁定文件或 `bunfig.toml` 而跳过的安装在 `claude --debug` 输出中显示为警告

288* 具有 `package.json` 且没有锁定文件的插件被跳过,没有日志条目

289* 超时的安装可能在缓存副本中留下部分 `node_modules` 树

290 

291当自动安装无法提供依赖项时,从 hook 安装到[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。这包括需要其生命周期脚本来构建的包、Python 依赖项以及使用 Yarn 或 pnpm 锁定的插件。

292 

293<h2 id="versions-and-updates">

294 版本和更新

295</h2>

296 

297如果插件的作者推送了新提交,`claude plugin update` 打印 `<name> is already at the latest version (<version>).`,Claude Code 为插件计算的版本未更改,因此磁盘上没有任何更改。

298 

299Claude Code 为它安装的每个插件计算一个版本,这就是它如何检测更新的方式。`claude plugin update` 和后台自动更新重新计算版本,当它与 `installed_plugins.json` 记录的内容匹配时跳过插件。

300 

301版本也命名插件的缓存目录。

302 

303固定 `"version"` 的清单是计算的版本在提交中保持相同的一种方式。有关解析顺序,请参阅[Claude Code 如何计算版本](#how-claude-code-computes-the-version)。

304 

305从本地目录市场[就地加载](#in-place-and-copied-plugins)的插件在每次会话启动时加载其当前源文件,无论其版本字符串说什么。对于来自[托管在 claude.ai 上的市场](/docs/zh-CN/plugins/install#add-from-claude-ai)的插件,claude.ai 为插件记录的版本是其版本,清单的 `version` 不被读取。

306 

307<h3 id="how-claude-code-computes-the-version">

308 Claude Code 如何计算版本

309</h3>

310 

311对于您添加的市场,Claude Code 按插件市场条目的 `source` 类型选择规则。[市场参考](/docs/zh-CN/plugins/marketplace-reference#plugin-sources)列出源类型。对于该列表中除 `command` 外的每个源类型:

312 

3131. 插件清单中的 `version` 字段首先出现

3142. 然后是插件市场条目中的 `version` 字段

3153. 当都未设置时,版本来自源类型:

316 

317| 源类型 | 未设置 `version` 字段时的版本 |

318| :---------------------------- | :----------------------------------------------------- |

319| `github`、`url` 或 `git-subdir` | 源的提交 SHA,缩短为 12 个字符。`git-subdir` 版本也包含子目录路径的哈希 |

320| `archive` | SHA-256 摘要,缩短为 12 个字符:市场条目中的 `sha256` 固定,或没有固定时下载文件的摘要 |

321| Git 托管市场内的相对路径 | 已安装目录的提交 SHA |

322| 本地目录,当插件目录和其市场都不是 git 存储库时 | `unknown` |

323| `npm` | `unknown` |

324 

325Claude Code 不从包含安装路径的存储库(如 git 管理的 `~/.claude`)获取版本。

326 

327对于 `command` 源,Claude Code 始终从命令生成的内容派生版本:单独的 12 字符哈希,或当清单设置一个时的 `<manifest version>-<hash>`。市场条目的 `version` 对命令源被忽略。有关哈希覆盖的内容,请参阅[复制模式和链接模式](/docs/zh-CN/plugins/marketplace-reference#copy-mode-and-link-mode)。

328 

329因为清单首先出现,固定 `"version": "1.0.0"` 的清单将每个用户保留在缓存副本上,直到其作者更改字符串,无论他们推送多少提交。要让用户跟踪提交,请从清单和条目中都省略 `version`。[托管市场](/docs/zh-CN/plugins/host-marketplace)涵盖哪个选择适合哪个发布设置。

330 

331<h3 id="when-claude-code-refreshes-a-marketplace-before-an-install">

332 Claude Code 在安装前何时刷新市场

333</h3>

334 

335当您安装插件时,Claude Code 在其市场目录的本地副本中查找它。您可以在会话中运行 `/plugin install` 或在 shell 中运行 `claude plugin install`,并使用或不使用其市场命名插件。该表显示这些组合中哪些刷新本地副本。

336 

337| 插件名称 | 命令 | Claude Code 刷新什么 |

338| :----------------- | :------------------------------------------ | :----------------- |

339| `name@marketplace` | `/plugin install` 或 `claude plugin install` | 命名的市场,在查找之前 |

340| 仅 `name` | `/plugin install` | 仅具有自动更新的市场,仅在查找失败后 |

341| 仅 `name` | `claude plugin install` | 无。它读取缓存的目录而不刷新 |

342 

343`name@marketplace` 安装之前的刷新不取决于市场的自动更新设置或 `DISABLE_AUTOUPDATER`。

344 

345当刷新失败时,安装从缓存的目录进行,`claude plugin install` 报告 `marketplace not refreshed`。

346 

347Claude Code 在以下情况下跳过 `name@marketplace` 安装之前的刷新:

348 

349* 市场是从本地 `file` 或 `directory` 源添加的,或在设置中使用[`settings` 源](/docs/zh-CN/settings-reference#extraknownmarketplaces)内联定义

350* [种子目录](/docs/zh-CN/env-vars)提供市场

351* Claude Code 在过去 30 秒内刷新了市场

352* 您设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`

353* [托管设置](/docs/zh-CN/plugins/org#restrict-what-users-can-install)阻止市场,在这种情况下 Claude Code 也拒绝安装

354 

355<h3 id="when-auto-update-runs">

356 自动更新何时运行

357</h3>

358 

359在交互式会话中,在您发送第一条消息后,Claude Code 等待最多十分钟的随机延迟。然后它刷新每个启用自动更新的市场,并更新从它们安装的磁盘上的插件。

360 

361运行中的会话保留它加载的版本,您会看到 `Plugin updated: <name> · Run /reload-plugins to apply`。无论您是否重新加载,新版本都会在下次启动时加载。

362 

363<h4 id="which-marketplaces-and-plugins-auto-update">

364 哪些市场和插件自动更新

365</h4>

366 

367市场是否自动更新遵循首先设置的以下内容:

368 

3691. **其 `extraKnownMarketplaces` 条目中的 `autoUpdate`** 在设置文件中

3702. **其 `known_marketplaces.json` 条目中的 `autoUpdate`**,`/plugin` **Marketplaces** 下的 **Enable auto-update** 切换写入。当设置文件也在 `extraKnownMarketplaces` 下声明市场时,切换也将 `autoUpdate` 写入该设置条目

3713. **默认值**:对于 Anthropic 的官方市场(如 `claude-plugins-official`)打开,对于 `knowledge-work-plugins` 和 `first-party-plugins` 关闭,对于[从 claude.ai 添加的市场](/docs/zh-CN/plugins/install#add-from-claude-ai)打开,对于每个其他市场关闭

372 

373如果您设置 `DISABLE_UPDATES=1`、`DISABLE_AUTOUPDATER=1` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`,整个传递关闭,**Enable auto-update** 切换被隐藏,除非您也设置 `FORCE_AUTOUPDATE_PLUGINS=1`。[环境变量参考](/docs/zh-CN/env-vars)涵盖每个变量的更广泛影响。

374 

375自动更新也跳过其市场条目声明 `headersHelper` 的插件。[拒绝命令而不是询问的安装和更新](/docs/zh-CN/plugins/host-marketplace#installs-and-updates-that-refuse-the-command-instead-of-asking)解释何时这样的插件出现在 `/plugin` **Errors** 选项卡中以及如何从那里更新它。

376 

377当复制的插件在会话中期更新时,hook 命令、监视器、MCP 服务器和 LSP 服务器继续使用以前版本的路径。运行 `/reload-plugins` 以将 hooks、MCP 服务器和 LSP 服务器切换到新路径。监视器需要会话重启。

378 

379<h3 id="when-a-command-source-re-runs">

380 何时命令源重新运行

381</h3>

382 

383具有 `command` 源的插件不等待[自动更新传递](#when-auto-update-runs)。打印的目录反映工具在命令运行时的状态,因此 Claude Code 在以下时间再次运行[您接受的命令](/docs/zh-CN/plugins/host-marketplace#change-the-command-of-a-command-source):

384 

385* 每次安装或更新插件时

386* 每个已启用的命令源插件每个会话一次,在会话启动后不久在后台。此运行不取决于市场的自动更新设置或 `DISABLE_AUTOUPDATER`

387* 在启动或 `/reload-plugins` 时,当已启用的插件的已安装版本在插件缓存中丢失时

388 

389当您设置 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars) 时,Claude Code 跳过两个后台运行。显式安装和更新仍然使用该变量集运行命令。

390 

391当命令的哈希输出已更改时,Claude Code 将结果安装为新版本并在运行中的交互式会话中重新加载它,切换[`/reload-plugins` 切换的相同组件](/docs/zh-CN/plugins/cli-reference#reload-plugins)。您会看到插件已重新加载的通知。

392 

393如果就地重新加载会使会话的提示缓存失效,Claude Code 改为提示您运行 `/reload-plugins`,它[警告缓存成本并在使用 `--force` 重新运行时应用](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)。

394 

395<h2 id="name-conflicts">

396 名称冲突

397</h2>

398 

399当来自不同来源的已启用插件共享清单名称时,此顺序决定哪个加载,从最高优先级到最低:

400 

4011. 其 id 出现在托管设置 `enabledPlugins` 中的插件,作为 `true` 或 `false`。其清单名称与 id 的名称部分匹配的 `--plugin-dir` 副本不被加载,您会看到 `--plugin-dir copy of "<name>" ignored: plugin is locked by managed settings`

4022. 已启用的 `--plugin-dir`、`--plugin-url` 或 `CLAUDE_CODE_PLUGIN_DIRS` 插件。它替换同名的已安装市场插件或技能目录插件:

403 * **已安装的市场插件**:无声替换。`claude plugin list` 仍然显示市场行为已启用,因为该行反映您的设置。仅当您使用 `--debug` 启动时 Claude Code 在 `~/.claude/debug/` 下写入的日志记录 `Plugin "<name>" from --plugin-dir overrides installed version`

404 * **技能目录插件**:替换为 `/plugin` **Errors** 选项卡行,读取 `Not loaded — the name "<name>" is already taken by a session-only plugin (--plugin-dir / --plugin-url), which takes precedence`

4053. 已安装的市场插件。同名的技能目录插件获得相同的 `Not loaded` 行,命名已安装的插件

4064. 技能目录插件。在这两者之间,`~/.claude/skills/` 下的副本加载,项目的 `.claude/skills/` 副本被删除,带有一行说明哪个路径遮蔽了它

4075. [从 claude.ai 同步的](#synced-plugins)插件。当来自任何其他来源的已启用插件与其名称匹配时,Claude Code 加载该插件并报告同步副本未加载。要改为使用 claude.ai 副本,请禁用您自己的副本

408 

409因为顺序比较清单名称,名为 `hello-plugin` 的 `--plugin-dir` 插件在该插件的清单也说 `"name": "hello-plugin"` 时替换 `hello@example-marketplace`。

410 

411<h3 id="keep-a-session-only-plugin-from-loading">

412 防止会话专用插件加载

413</h3>

414 

415要防止 `--plugin-dir` 插件遮蔽任何内容,或在父进程为您传递标志时关闭一个,请在任何设置文件中将其 id 设置为 `false`。对于清单名称为 `hello-plugin` 的插件,条目是 `"enabledPlugins": {"hello-plugin@inline": false}`。禁用的会话专用插件不遮蔽,因此市场或技能目录副本加载。

416 

417<h2 id="next-steps">

418 后续步骤

419</h2>

420 

421* [安装和管理插件](/docs/zh-CN/plugins/install):安装、启用、禁用和更新步骤本身

422* [插件故障排除](/docs/zh-CN/plugins/troubleshooting):按生成它们的阶段分类的错误消息

423* [插件命令参考](/docs/zh-CN/plugins/cli-reference):此页面上命名的标志和命令

424* [为您的组织管理插件](/docs/zh-CN/plugins/org):强制启用或阻止插件的托管设置

plugins/manifest-reference.md +710 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Plugin manifest 参考

6 

7> plugin.json 的完整参考:每个字段的类型和默认值、接受的路径形式,以及 userConfig 和环境变量模式。

8 

9Plugin manifest 是 plugin 的 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含 plugin 的元数据和 Claude Code 提示用户输入的 [`userConfig`](#user-configuration) 值。它还声明任何在其[默认位置](#standard-layout)之外定义内联或保留的组件。

10 

11本参考适用于 plugin 创建者,以及将组件字段放在 marketplace 条目中的 marketplace 所有者。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **学习构建 plugin**:从[创建 plugin](/docs/zh-CN/plugins/create)开始

17 * **每个组件在运行时的作用**:参见[Plugin 组件](/docs/zh-CN/plugins/components)

18</Note>

19 

20从与您要查找的内容相匹配的部分开始:

21 

22* 一个字段:[字段表](#fields)给出每个字段的类型、是否必需、其默认值以及它接受的内容。[路径规则](#path-rules)涵盖 `./` 前缀和每个组件路径的包含

23* 一个 `userConfig` 选项或一个 `channels` 条目:[用户配置](#user-configuration)和[频道](#channels)模式

24* `${CLAUDE_PLUGIN_ROOT}` 或 plugin 可以引用的另一个变量:[环境变量](#environment-variables)

25* 每个组件的文件位置:[标准布局](#standard-layout)

26* 来自 `claude plugin validate` 的消息:[故障排除页面](/docs/zh-CN/plugins/troubleshooting)列出每条消息及其修复,并链接到本页的相关部分

27 

28<h2 id="manifest-file">

29 Manifest 文件

30</h2>

31 

32manifest 是可选的。没有它,Claude Code 会加载它在[标准布局](#standard-layout)中找到的组件。然后 plugin 名称来自 marketplace 条目,或者当您使用 `--plugin-dir` 加载 plugin 时来自目录名称。

33 

34当您想要元数据、组件在其默认目录之外、`userConfig` 或内联组件定义时,编写 manifest。

35 

36在 plugin 根目录下的 `.claude-plugin/plugin.json` 处保存 manifest。将所有其他 plugin 文件放在 plugin 根目录,而不是在 `.claude-plugin/` 内。这包括 `skills/`、`commands/` 和 `hooks/`。

37 

38以下示例设置了[字段表](#fields)中的大多数键。它在包含每个引用路径的 plugin 目录中通过验证。

39 

40```json theme={null}

41{

42 "name": "deploy-tools",

43 "displayName": "Deploy Tools",

44 "version": "1.2.0",

45 "description": "Deployment commands, a review agent, and a status monitor",

46 "author": {

47 "name": "Example Team",

48 "email": "dev@example.com",

49 "url": "https://example.com"

50 },

51 "homepage": "https://example.com/docs/deploy-tools",

52 "repository": "https://github.com/example/deploy-tools",

53 "license": "MIT",

54 "keywords": ["deployment", "ci"],

55 "defaultEnabled": true,

56 "dependencies": ["secrets-vault"],

57 "metadata": { "catalogId": "cat-123" },

58 "skills": ["./extra-skills/"],

59 "commands": {

60 "status": {

61 "source": "./commands/status.md",

62 "description": "Show the current deployment status"

63 },

64 "about": {

65 "content": "Explain what the deploy-tools plugin provides.",

66 "description": "Describe this plugin"

67 }

68 },

69 "agents": ["./agents/reviewer.md"],

70 "hooks": "./config/extra-hooks.json",

71 "mcpServers": {

72 "deploy-api": {

73 "command": "node",

74 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"]

75 }

76 },

77 "lspServers": "./.lsp.json",

78 "outputStyles": "./styles/",

79 "experimental": {

80 "themes": "./themes/",

81 "monitors": "./config/monitors.json"

82 },

83 "userConfig": {

84 "api_token": {

85 "type": "string",

86 "title": "API token",

87 "description": "Token for the deployment API",

88 "sensitive": true

89 }

90 }

91}

92```

93 

94<h3 id="unrecognized-fields">

95 无法识别的字段

96</h3>

97 

98无法识别的顶级键被剥离,`userConfig` 选项、`channels` 条目、`lspServers` 配置或 `monitors` 条目内的无法识别的键被拒绝:

99 

100* **顶级字段**:字段被剥离,plugin 加载。`claude plugin validate` 将每个无法识别的顶级字段报告为警告

101* **严格对象**:`userConfig` 选项、`channels` 条目、`lspServers` 配置和 `monitors` 条目是严格的。其中的未知键是错误,plugin 不加载

102 

103<h3 id="validate-the-manifest">

104 验证 manifest

105</h3>

106 

107`claude plugin validate` 是 manifest 的权威检查。从您的 shell 针对 plugin 目录运行它:

108 

109```bash theme={null}

110claude plugin validate ./my-plugin

111```

112 

113该命令报告以下结果之一:

114 

115* **`Validation passed`**:manifest 加载

116* **`Validation passed with warnings`**:manifest 加载,但验证器发现需要修复的内容,例如 Claude Code 剥离的未知顶级字段、不是 kebab-case 的 `name`,或缺少 `version`、`description` 或 `author`。传递 `--strict` 以在 CI 中将警告转换为失败

117* **`Validation failed`**:manifest 有类型不匹配、缺失或逃逸 plugin 根目录的路径,或 `userConfig` 选项、`channels` 条目、`lspServers` 配置或 `monitors` 条目内的未知键。Claude Code 在加载 plugin 时报告相同的问题

118 

119<h2 id="fields">

120 字段

121</h2>

122 

123该表列出了 `plugin.json` 中的顶级键。`name` 是唯一必需的键。如果字段名称是链接,链接的部分有其完整规则。

124 

125对于组件键(如 `commands` 和 `hooks`),[组件路径形式](#component-path-forms)显示每个接受的形式及示例,每个路径遵循 `./` 前缀、扩展名和包含的[路径规则](#path-rules)。

126 

127| 字段 | 类型 | 描述 |

128| :----------------------------------- | :------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

129| `$schema` | String | 用于编辑器自动完成的 JSON Schema URL。Claude Code 在加载时忽略它 |

130| [`name`](#name) | String | Plugin 标识符,必需。使用 kebab-case。每个组件都在其下命名空间 |

131| [`displayName`](#displayname) | String | 在 UI 中显示的名称,代替 `name` |

132| [`version`](#version) | String | 版本字符串。设置它会将用户保持在该版本,直到您更改它 |

133| `description` | String | plugin 提供的内容的简短说明 |

134| `author` | Object | `name`(必需),加上可选的 `email` 和 `url` |

135| `homepage` | String | 文档 URL。必须解析为 URL,否则 plugin 加载失败 |

136| `repository` | String | 源代码库 URL。未验证 |

137| `license` | String | SPDX 标识符,如 `MIT` 或 `Apache-2.0` |

138| `keywords` | Array of strings | 发现标签 |

139| [`metadata`](#metadata) | Object | 用于您自己数据的自由形式对象。Claude Code 不读取它 |

140| [`defaultEnabled`](#defaultenabled) | Boolean | 当用户未设置时 plugin 是否在启用时启动。默认为 `true` |

141| [`dependencies`](#dependencies) | Array of strings or objects | 必须为此 plugin 启用的 plugin |

142| [`settings`](#settings) | Object | Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效 |

143| [`userConfig`](#user-configuration) | Object | Claude Code 在 plugin 启用时提示用户输入的值 |

144| [`channels`](#channels) | Array of objects | plugin 提供的消息频道,每个绑定到其 MCP 服务器之一 |

145| `skills` | Path, or array of paths | 要扫描的目录以查找 skills,每个目录是 `<name>/SKILL.md` 文件夹或直接包含 `SKILL.md` 的一个文件夹。`"."` 命名 plugin 根目录。添加到默认 `skills/` 扫描 |

146| [`commands`](#commands) | Path, array of paths, or object | 平面 `.md` 命令文件、它们的目录或命令名称到 `source` 或 `content` 的对象映射。替换默认 `commands/` 扫描 |

147| `agents` | Path, or array of paths | Agent `.md` 文件。不接受目录。替换默认 `agents/` 扫描 |

148| [`hooks`](#hooks) | Path, object, or array of either | `.json` hook 文件或内联 hook 配置。与 `hooks/hooks.json` 一起加载 |

149| [`mcpServers`](#mcpservers) | Path, object, or array of either | `.json` MCP 配置文件、`.mcpb` 或 `.dxt` 包,或按名称键入的内联服务器配置。与 `.mcp.json` 一起加载;稍后声明的服务器名称替换较早的名称 |

150| [`lspServers`](#lspservers) | Path, object, or array of either | `.json` LSP 配置文件或按名称键入的内联服务器配置。与 `.lsp.json` 一起加载 |

151| `outputStyles` | Path, or array of paths | 输出样式文件或目录。替换默认 `output-styles/` 扫描 |

152| `workflows` | Path, or array of paths | [Workflow](/docs/zh-CN/workflows#distribute-a-workflow-in-a-plugin) `.js` 文件或目录。替换默认 `workflows/` 扫描 |

153| `experimental` | Object | `themes`、`monitors` 和 `evals` 的容器,其 manifest 形式可能仍会改变 |

154| `experimental.themes` | Path, or array of paths | 主题文件或目录。替换默认 `themes/` 扫描。顶级 `themes` 键仍然加载,带有 `claude plugin validate` 警告 |

155| [`experimental.monitors`](#monitors) | Path, or inline array | 包含 monitors 数组的 `.json` 文件,或数组本身。默认为 `monitors/monitors.json`。顶级 `monitors` 键仍然加载,带有 `claude plugin validate` 警告。Monitors 仅在交互式会话中运行,不在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 |

156| `experimental.evals` | Path, or array of paths | 当不是默认 `evals/` 时,保存 plugin 的[评估案例](/docs/zh-CN/plugin-evals#use-a-different-eval-directory)的目录。`claude plugin eval --eval-dir` 覆盖它 |

157 

158在"类型"列中,路径是相对于 plugin 根目录的字符串,例如 `"./custom/commands"`。

159 

160<h3 id="name">

161 `name`

162</h3>

163 

164plugin 标识符。它必须非空,没有空格、`@`、`:`、路径分隔符、控制字符或双向格式字符;使用 kebab-case。

165 

166Claude Code 在其下命名空间每个组件,因此 plugin `deploy-tools` 中的 agent `reviewer` 显示为 `deploy-tools:reviewer`。

167 

168<h3 id="displayname">

169 `displayName`

170</h3>

171 

172在 UI 中显示的名称,代替 `name`。它可能包含空格和任何大小写,它不用于命名空间或查找。

173 

174对于 marketplace 安装的 plugin,[marketplace 条目](/docs/zh-CN/plugins/marketplace-reference#plugin-entries)上的 `displayName` 优先于此值。

175 

176<h3 id="version">

177 `version`

178</h3>

179 

180版本字符串,不针对 semver 检查。设置它会将 plugin 固定到该版本,直到您更改它;参见[版本和更新](/docs/zh-CN/plugins/loading#versions-and-updates)。具有[`command` 源](/docs/zh-CN/plugins/marketplace-reference)的 plugin、来自[托管在 claude.ai 上的 marketplace](/docs/zh-CN/plugins/install#add-from-claude-ai) 的 plugin 以及从作为本地目录添加的 marketplace [就地加载](/docs/zh-CN/plugins/loading#find-plugins-on-disk)的 plugin 不由此字段固定。

181 

182<h3 id="metadata">

183 `metadata`

184</h3>

185 

186用于您自己数据的自由形式对象,例如目录或权利字段。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本。

187 

188<h3 id="defaultenabled">

189 `defaultEnabled`

190</h3>

191 

192当用户未在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 中设置时,plugin 是否在启用时启动。默认为 `true`。启用的 plugin 依赖的 plugin 无论如何都会启用启动。marketplace 条目中的相同字段覆盖此字段。

193 

194一旦用户的 `enabledPlugins` 条目被写入,它在 plugin 更新中持续存在,因此在后续版本中更改 `defaultEnabled` 不会更改现有用户的设置。

195 

196<h3 id="dependencies">

197 `dependencies`

198</h3>

199 

200必须为此 plugin 启用的 plugin。每个条目是 `"name"`、`"name@marketplace"` 或 `{ "name": "...", "marketplace": "...", "version": "..." }`。裸名称针对此 plugin 自己的 marketplace 解析。参见[依赖约束](/docs/zh-CN/plugins/dependencies)。

201 

202<h3 id="settings">

203 `settings`

204</h3>

205 

206Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效;其他键在加载时被删除。plugin 根目录处的 `settings.json` 优先于此键。参见[默认设置](/docs/zh-CN/plugins/components#default-settings)。

207 

208<h2 id="component-path-forms">

209 组件路径形式

210</h2>

211 

212每个组件键接受相对于 plugin 根目录的路径。`hooks`、`mcpServers`、`lspServers` 和 `experimental.monitors` 也接受内联配置,`commands` 也接受对象映射,`mcpServers` 也接受 MCP 包路径和 URL。以下示例显示每个接受的形式一次。有关每个组件在运行时的作用,参见[Plugin 组件](/docs/zh-CN/plugins/components)。

213 

214<h3 id="path-only-fields">

215 仅路径字段

216</h3>

217 

218`agents`、`skills`、`outputStyles`、`workflows` 和 `experimental.themes` 采用一个路径或路径数组。`agents` 条目必须是 `.md` 文件,`skills` 条目必须是目录。其他三个接受目录或文件。

219 

220```json theme={null}

221{

222 "agents": ["./custom-agents/reviewer.md", "./custom-agents/tester.md"],

223 "skills": ["./extra-skills/", "."],

224 "outputStyles": "./styles/"

225}

226```

227 

228<h3 id="commands">

229 `commands`

230</h3>

231 

232`commands` 采用路径、路径数组或对象映射。路径命名平面 `.md` 命令文件或目录。在对象映射中,每个键在 plugin 前缀后成为命令名称。例如,plugin `deploy-tools` 中的 `"about"` 运行为 `/deploy-tools:about`。

233 

234每个值恰好设置 `source` 或 `content` 之一,设置两者或都不设置的条目验证失败。此表中的其他字段是可选的:

235 

236| 字段 | 类型 | 描述 |

237| :------------- | :--------------- | :-------------------------------- |

238| `source` | string | 命令的 Markdown 文件的路径,相对于 plugin 根目录 |

239| `content` | string | 命令体的内联 Markdown,而不是 `source` |

240| `description` | string | 为命令显示的描述 |

241| `argumentHint` | string | 在命令名称后显示的参数提示,例如 `[file]` |

242| `model` | string | 命令的默认模型 |

243| `allowedTools` | array of strings | 命令可以使用而无需提示的工具 |

244 

245此映射声明一个来自文件的命令和一个来自内联内容的命令:

246 

247```json theme={null}

248{

249 "commands": {

250 "status": { "source": "./commands/status.md", "argumentHint": "[env]" },

251 "about": { "content": "Explain what this plugin provides." }

252 }

253}

254```

255 

256<h3 id="hooks">

257 `hooks`

258</h3>

259 

260`hooks` 采用 `.json` 文件路径、与 [`settings.json` 中的 `hooks`](/docs/zh-CN/hooks#configuration)相同形状的内联 hooks 对象,或混合两者的数组。有关 hook 事件和处理程序字段,参见[hooks 参考](/docs/zh-CN/hooks#hook-events)。

261 

262Claude Code 在该文件存在时将您声明的内容与 `hooks/hooks.json` 合并。

263 

264```json theme={null}

265{

266 "hooks": [

267 "./config/extra-hooks.json",

268 {

269 "PostToolUse": [

270 {

271 "matcher": "Write|Edit",

272 "hooks": [

273 { "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format.sh" }

274 ]

275 }

276 ]

277 }

278 ]

279}

280```

281 

282<h3 id="mcpservers">

283 `mcpServers`

284</h3>

285 

286`mcpServers` 采用 `.json` 文件路径、MCP 包路径或 URL、内联映射或混合它们的数组。有关服务器配置字段,参见[plugin 提供的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers)。

287 

288Claude Code 首先加载 plugin 根目录处的 `.mcp.json`,然后按顺序加载每个声明的形式。稍后声明的服务器名称替换较早的名称。

289 

290`mcpServers` 值采用以下形式之一:

291 

292| 形式 | 示例值 | Claude Code 的作用 |

293| :----------- | :------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

294| `.json` 文件路径 | `"./mcp/servers.json"` | 将文件读取为 `mcpServers` 映射 |

295| MCP 包路径 | `"./bundle.mcpb"` | 将 `.mcpb` 或 `.dxt` 包提取到 plugin 根目录下的 `.mcpb-cache/` 并读取其服务器配置 |

296| MCP 包 URL | `"https://example.com/server.mcpb"` | 将包下载到 `.mcpb-cache/`,然后读取它 |

297| 内联映射 | `{ "deploy-api": { "command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"] } }` | 使用映射作为按名称键入的服务器配置 |

298 

299包路径或 URL 必须以 `.mcpb` 或 `.dxt` 结尾。任何其他扩展名验证失败。

300 

301<h3 id="lspservers">

302 `lspServers`

303</h3>

304 

305`lspServers` 采用 `.json` 文件路径、服务器名称到配置的内联映射,或两者的数组。

306 

307Claude Code 首先加载 plugin 根目录处的 `.lsp.json`,然后按顺序加载每个声明的配置。稍后声明的服务器名称替换较早的名称。

308 

309每个服务器配置是具有这些字段的严格对象。未知键验证失败。

310 

311| 字段 | 必需 | 描述 |

312| :---------------------- | :-- | :------------------------------------------------------------------------------------------ |

313| `command` | Yes | 语言服务器二进制文件。除非值以 `/` 开头,否则没有空格;将参数放在 `args` 中 |

314| `extensionToLanguage` | Yes | 文件扩展名到 LSP 语言 ID 的映射,至少一个条目。键以点开头,例如 `".go"` |

315| `args` | No | 传递给服务器的参数 |

316| `transport` | No | 通信传输:`stdio`(默认)或 `socket`。Claude Code 接受 `socket` 但在 stdio 上运行每个服务器,因此 stdout 协议规则适用于所有服务器 |

317| `env` | No | 服务器进程的环境变量 |

318| `initializationOptions` | No | 在初始化请求中发送的选项 |

319| `settings` | No | 由 `workspace/didChangeConfiguration` 发送的设置 |

320| `workspaceFolder` | No | 服务器的工作区文件夹路径 |

321| `startupTimeout` | No | 等待启动的毫秒数,正整数 |

322| `shutdownTimeout` | No | 等待正常关闭的毫秒数,正整数。当超时时间过去时,Claude Code 终止服务器进程。未设置时,不适用超时 |

323| `restartOnCrash` | No | 服务器崩溃后是否重新启动。默认为 `true`。设置为 `false` 以使崩溃的服务器停止而不是重新启动 |

324| `maxRestarts` | No | 放弃前的重新启动尝试,零或更多 |

325| `diagnostics` | No | 编辑后是否将诊断推送到上下文。默认为 `true` |

326 

327此内联配置为 `.go` 文件运行 `gopls`:

328 

329```json theme={null}

330{

331 "lspServers": {

332 "go": {

333 "command": "gopls",

334 "args": ["serve"],

335 "extensionToLanguage": { ".go": "go" }

336 }

337 }

338}

339```

340 

341有关 Anthropic 作为 plugin 发布的语言服务器以及服务器在运行时的行为,参见[代码智能](/docs/zh-CN/plugins/code-intelligence)。

342 

343<h3 id="monitors">

344 `monitors`

345</h3>

346 

347`experimental.monitors` 采用 `.json` 文件路径或内联数组。当您省略该键时,Claude Code 加载 `monitors/monitors.json`(如果存在)。

348 

349每个条目是具有这些字段的严格对象。

350 

351| 字段 | 必需 | 描述 |

352| :------------ | :-- | :----------------------------------------------------------------------------------------------- |

353| `name` | Yes | 在 plugin 内唯一的标识符 |

354| `command` | Yes | Claude Code 在会话工作目录中作为持久后台进程运行的 shell 命令 |

355| `description` | Yes | 在任务面板和通知摘要中显示的简短摘要 |

356| `when` | No | 使用 `"always"`(默认),monitor 在会话启动和 plugin 重新加载时启动。使用 `"on-skill-invoke:<skill>"`,它在该 skill 首次运行时启动 |

357 

358此内联数组声明一个在 `deploy` skill 首次运行时启动的 monitor:

359 

360```json theme={null}

361{

362 "experimental": {

363 "monitors": [

364 {

365 "name": "deploy-status",

366 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",

367 "description": "Deployment status changes",

368 "when": "on-skill-invoke:deploy"

369 }

370 ]

371 }

372}

373```

374 

375monitor `command` 不能引用 `${user_config.*}`。参见[通过 shell 运行的字段](#fields-that-run-through-a-shell)。

376 

377<h2 id="path-rules">

378 路径规则

379</h2>

380 

381manifest 中的每个组件路径相对于 plugin 根目录,必须以 `./` 开头。路径如 `commands/foo.md` 验证失败。`skills` 和 `mcpServers` 各接受该规则之外的一种形式:

382 

383* **`skills`**:也接受 `"."`。`"."` 和 `"./"` 都表示 plugin 根目录。在 v2.1.221 之前,`"."` 验证失败,因此当 plugin 必须在较早版本上加载时使用 `"./"`

384* **`mcpServers`**:也接受 `https://` 包 URL

385 

386<h3 id="containment-and-existence">

387 包含和存在

388</h3>

389 

390每个组件路径必须在 plugin 根目录内解析并且必须存在。`claude plugin validate` 不检查 `outputStyles`、`lspServers`、`monitors` 或 `themes` 路径,因此这些字段中的坏路径仅在 plugin 加载时失败:

391 

392* **包含**:在 plugin 根目录外解析的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path escapes plugin directory: <path>`。包含 `..` 的路径是常见情况,`claude plugin validate` 将其报告为 `Path contains ".." which could be a path traversal attempt`

393* **存在**:不存在的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path not found: <path>`。`claude plugin validate` 将其报告为 `Path not found`

394 

395<h3 id="how-each-key-combines-with-its-default-location">

396 每个键如何与其默认位置结合

397</h3>

398 

399每个组件键要么替换其默认位置,要么添加到它,要么与它合并:

400 

401* **替换默认值**:`commands`、`agents`、`outputStyles`、`workflows`、`experimental.themes`、`experimental.monitors`。当您设置 `commands` 时,默认 `commands/` 目录不被扫描。要保留默认值并添加更多,明确列出它:`"commands": ["./commands/", "./extras/"]`

402* **添加到默认值**:`skills`。`skills/` 目录仍被扫描,列出的目录与它一起加载

403* **合并**:`hooks`、`mcpServers`、`lspServers`。默认文件首先加载,manifest 声明的内容合并到它中,如[组件路径形式](#component-path-forms)下所述

404 

405如果 plugin 有默认文件夹(如 `commands/`)并且还设置了替换它的 manifest 键,Claude Code 加载 manifest 路径而不是文件夹。`claude plugin list` 和 `/plugin` 界面然后显示警告 `Default <folder>/ folder is ignored because the manifest sets "<key>"`。

406 

407要避免警告,将键设置为该文件夹内的路径:`"commands": ["./commands/deploy.md"]` 命名默认文件夹中的文件,不产生警告。

408 

409<h2 id="user-configuration">

410 用户配置

411</h2>

412 

413`userConfig` 声明 Claude Code 在 plugin 启用时提示用户输入的值,因此用户不自己编辑 `settings.json`。

414 

415键是由字母、数字和下划线组成的标识符,不能以数字开头。

416 

417每个值是具有这些字段的严格对象。未知键验证失败。

418 

419| 字段 | 必需 | 描述 |

420| :------------ | :-- | :------------------------------------------------------------------------------------------------------------------- |

421| `type` | Yes | `string`、`number`、`boolean`、`directory` 或 `file` 之一 |

422| `title` | Yes | 在配置对话框中显示的标签 |

423| `description` | Yes | 在字段下方显示的帮助文本 |

424| `required` | No | 如果 `true`,配置对话框不接受空值 |

425| `default` | No | 当用户不提供任何内容时使用的值:字符串、数字、布尔值或字符串数组 |

426| `options` | No | 对于 `string`,字段接受的值,在 `/config` 中显示为选择器。参见[将字段限制为固定选项](#limit-a-field-to-fixed-options)。需要 Claude Code v2.1.271 或更高版本 |

427| `multiple` | No | 对于 `string`,允许字符串数组 |

428| `sensitive` | No | 如果 `true`,掩盖输入并将值存储在安全存储中而不是 `settings.json` |

429| `min` / `max` | No | `number` 的边界 |

430 

431每个启用的 plugin 的每个选项也显示为 `/config` 面板中的一行,除了 `sensitive` 选项和 `multiple` 列表。`/config` 行需要 Claude Code v2.1.269 或更高版本。

432 

433此 `userConfig` 声明端点和掩盖的令牌:

434 

435```json theme={null}

436{

437 "userConfig": {

438 "api_endpoint": {

439 "type": "string",

440 "title": "API endpoint",

441 "description": "Your team's API endpoint"

442 },

443 "api_token": {

444 "type": "string",

445 "title": "API token",

446 "description": "API authentication token",

447 "sensitive": true

448 }

449 }

450}

451```

452 

453<h3 id="limit-a-field-to-fixed-options">

454 将字段限制为固定选项

455</h3>

456 

457在 `userConfig` 字段上设置 `options` 以使用户从固定列表中选择其值。

458 

459要将 `tone` 字段限制为三个选项,在 `options` 中列出它们并将 `default` 设置为其中之一:

460 

461```json theme={null}

462{

463 "userConfig": {

464 "tone": {

465 "type": "string",

466 "title": "Tone",

467 "description": "Voice for generated replies",

468 "options": ["neutral", "warm", "formal"],

469 "default": "neutral"

470 }

471 }

472}

473```

474 

475如果您在任何字段上声明 `options`,Claude Code v2.1.271 之前版本的用户无法加载 plugin。

476 

477`options` 适用于不是 `multiple` 或 `sensitive` 的 `string` 字段。将 `default` 设置为列出的值之一,或设置 `required: true` 以便用户必须选择一个。每个选项是 1 到 64 个字符的纯标签,您在 shell 中运行的 `claude plugin validate` 报告它拒绝的任何其他内容。其 `options` 违反这些规则的 plugin 无法加载。

478 

479<h3 id="where-values-are-stored">

480 值的存储位置

481</h3>

482 

483非敏感值保存在用户 `settings.json` 中的 [`pluginConfigs`](/docs/zh-CN/settings-reference#pluginconfigs) 下。敏感值转到平台的安全凭证存储。[设置页面](/docs/zh-CN/settings-reference#pluginconfigs)列出从哪些设置文件读取 `pluginConfigs`。

484 

485<h3 id="reference-a-saved-value">

486 引用保存的值

487</h3>

488 

489在 plugin 需要的地方引用保存的值,采用以下两种形式之一:

490 

491* **`${user_config.KEY}`**:在 MCP 服务器配置、LSP 服务器配置、[exec 形式](/docs/zh-CN/hooks#exec-form-and-shell-form) hook `args` 以及 skill 和 agent 内容中替换。在 skill 和 agent 内容中,仅替换非敏感值,敏感值变成占位符

492* **`CLAUDE_PLUGIN_OPTION_<KEY>`**:导出到每个选项的 hook 进程,`<KEY>` 大写。shell 形式 hook 为 `api_token` 读取 `$CLAUDE_PLUGIN_OPTION_API_TOKEN`

493 

494<h3 id="fields-that-run-through-a-shell">

495 通过 shell 运行的字段

496</h3>

497 

498Shell 形式 hook 命令、monitor 命令和 MCP [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) 拒绝 `${user_config.*}`。引用它的组件在这些字段之一中失败,出现[错误](/docs/zh-CN/errors#plugin-command-references-user-config)而不是运行,因为字段的值被传递到会重新解析替换值的 shell。

499 

500该表显示值如何可以到达这些字段。

501 

502| 字段 | 值如何到达它 |

503| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------- |

504| Shell 形式 hook 命令 | 使用[exec 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)与 `args`,或从 hook 的环境读取 `CLAUDE_PLUGIN_OPTION_<KEY>` |

505| Monitor 命令 | 不通过 Claude Code。Monitor 进程不接收 `CLAUDE_PLUGIN_OPTION_<KEY>`,因此 monitor 脚本必须自己获取值 |

506| MCP `headersHelper` | 不通过 Claude Code。helper 的环境携带 `CLAUDE_PLUGIN_ROOT`、`CLAUDE_CODE_MCP_SERVER_NAME` 和 `CLAUDE_CODE_MCP_SERVER_URL` 但没有选项值,因此 helper 脚本必须自己获取值 |

507 

508<h2 id="channels">

509 频道

510</h2>

511 

512`channels` 声明 plugin 提供的消息频道,例如到聊天应用的桥接。当您声明一个时,Claude Code 可以在 plugin 启用时提示频道的配置。有关服务器如何注入消息,参见[频道参考](/docs/zh-CN/channels-reference#package-as-a-plugin)。

513 

514每个条目是绑定到 plugin 的 MCP 服务器之一的严格对象,具有这些字段:

515 

516| 字段 | 必需 | 描述 |

517| :------------ | :-- | :--------------------------------------------------------------------------------------------- |

518| `server` | Yes | 此 plugin 的 `mcpServers` 中频道绑定到的 MCP 服务器的键 |

519| `displayName` | No | 在配置对话框标题中显示的名称。默认为服务器名称 |

520| `userConfig` | No | 要提示的选项,形状与[顶级 `userConfig`](#user-configuration)相同。保存的值替换到服务器 `env` 中的 `${user_config.KEY}` 引用 |

521 

522此 manifest 将频道绑定到 plugin 的 `telegram` MCP 服务器,并提示替换到服务器 `env` 中的机器人令牌:

523 

524```json theme={null}

525{

526 "mcpServers": {

527 "telegram": {

528 "command": "node",

529 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

530 "env": { "BOT_TOKEN": "${user_config.bot_token}" }

531 }

532 },

533 "channels": [

534 {

535 "server": "telegram",

536 "displayName": "Telegram",

537 "userConfig": {

538 "bot_token": {

539 "type": "string",

540 "title": "Bot token",

541 "description": "Telegram bot token",

542 "sensitive": true

543 }

544 }

545 }

546 ]

547}

548```

549 

550<h2 id="environment-variables">

551 环境变量

552</h2>

553 

554Claude Code 为 plugin 组件提供三个路径变量。在[每个变量解析的位置](#where-each-variable-resolves)下列出的字段中将它们引用为 `${NAME}`,并在接收它们的进程中将它们读取为环境变量。

555 

556| 变量 | 解析为 | 用途 |

557| :---------------------- | :------------------------------------------------------------------------------------------------------------ | :--------------------------------- |

558| `${CLAUDE_PLUGIN_ROOT}` | plugin 已安装版本的绝对路径 | 与 plugin 捆绑的脚本、二进制文件和配置文件 |

559| `${CLAUDE_PLUGIN_DATA}` | `~/.claude/plugins/data/<id>/`,在首次引用时创建并在 plugin 更新中保留。`<id>` 是 plugin 标识符,其中除字母、数字、`_` 或 `-` 外的每个字符都被替换为 `-` | 已安装的依赖项(如 `node_modules`)、生成的代码和缓存 |

560| `${CLAUDE_PROJECT_DIR}` | 项目根目录 | 项目本地脚本和配置文件 |

561 

562`${CLAUDE_PLUGIN_ROOT}` 在 plugin 更新时改变,因此不要在那里写入状态。有关根目录移动的位置和旧目录何时被清理,参见[加载页面](/docs/zh-CN/plugins/loading)。

563 

564当您从最后一个安装它的地方卸载 plugin 时,`${CLAUDE_PLUGIN_DATA}` 目录被删除,除非您传递 [`--keep-data`](/docs/zh-CN/plugins/cli-reference)。

565 

566<h3 id="where-each-variable-resolves">

567 每个变量解析的位置

568</h3>

569 

570在每个 plugin 组件中,`${...}` 引用在特定字段中内联解析,某些组件也在其进程环境中接收变量:

571 

572| Plugin 组件 | `${...}` 解析的字段 | 导出到进程 |

573| :------------------------ | :--------------------------------------- | :-------------------------------------------------------------------------------------------- |

574| Hook 命令 | 在 `command` 和 `args` 中的任何地方 | `CLAUDE_PLUGIN_ROOT`、`CLAUDE_PLUGIN_DATA`、`CLAUDE_PROJECT_DIR` 和 `CLAUDE_PLUGIN_OPTION_<KEY>` |

575| Monitor 命令 | 在 `command` 中的任何地方 | 未导出 |

576| MCP `stdio` 服务器 | `command`、`args`、`env` | `CLAUDE_PLUGIN_ROOT`、`CLAUDE_PLUGIN_DATA` |

577| MCP `http`、`sse`、`ws` 服务器 | `url`、`headers`、`headersHelper` | 不适用 |

578| LSP 服务器 | `command`、`args`、`env`、`workspaceFolder` | `CLAUDE_PLUGIN_ROOT`、`CLAUDE_PLUGIN_DATA`、`CLAUDE_PROJECT_DIR` |

579| Skill、command 和 agent 内容 | Markdown 体中的任何地方 | 不适用 |

580 

581变量不存在于 Claude 通过 Bash 工具在主会话或子代理中运行的命令的环境中。在 skill、command 和 agent 内容中,在 Markdown 体中写入 `${...}` 引用,Claude Code 在加载内容时内联替换路径。

582 

583<h3 id="quoting-and-path-separators">

584 引用和路径分隔符

585</h3>

586 

587保持每个替换的路径为单个参数:

588 

589* **Hook 命令**:使用[exec 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)与 `args` 以便每个路径是一个没有引用的参数

590* **Shell 形式 hooks 和 monitor 命令**:用双引号包装变量,以便带空格的路径保持为一个单词

591 

592此 shell 形式 hook 运行与 plugin 捆绑的脚本:

593 

594```json theme={null}

595{

596 "hooks": {

597 "PostToolUse": [

598 {

599 "hooks": [

600 {

601 "type": "command",

602 "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"

603 }

604 ]

605 }

606 ]

607 }

608}

609```

610 

611在 Windows 上,替换的路径使用正斜杠,因此 shell 不会将反斜杠读取为转义。

612 

613<h2 id="standard-layout">

614 标准布局

615</h2>

616 

617每个组件类型在 plugin 根目录下有默认位置,当 manifest 不指向其他位置时使用。

618 

619| 组件 | 默认位置 | 内容 |

620| :-------- | :--------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

621| Manifest | `.claude-plugin/plugin.json` | Plugin 元数据和配置。可选 |

622| Skills | `skills/` | 每个 skill 一个 `<name>/SKILL.md`。具有 `SKILL.md` 在其根目录、没有 `skills/` 和没有 `skills` 键的 plugin 加载为单个 skill |

623| Commands | `commands/` | 平面 Markdown 命令文件。对于新 plugin 更喜欢 `skills/` |

624| Agents | `agents/` | Agent Markdown 文件。子文件夹是[agent 名称](/docs/zh-CN/plugins/components#agents)的一部分 |

625| Hooks | `hooks/hooks.json` | Hook 配置 |

626| MCP 服务器 | `.mcp.json` | MCP 服务器定义 |

627| LSP 服务器 | `.lsp.json` | LSP 服务器配置 |

628| 输出样式 | `output-styles/` | 输出样式 Markdown 文件 |

629| Workflows | `workflows/` | Workflow `.js` 文件 |

630| 主题 | `themes/` | 主题 JSON 文件 |

631| Monitors | `monitors/monitors.json` | monitors 数组 |

632| 可执行文件 | `bin/` | 此处的文件在 plugin 启用时位于 Bash 工具的 `PATH` 上,因此 Claude 将它们作为裸命令运行。claude.ai 和 Cowork 不安装具有此目录的 plugin,包括您[通过 claude.ai 组织设置分发](/docs/zh-CN/plugins/host-marketplace#distribute-through-organization-settings)的 plugin |

633| 设置 | `settings.json` | 在 plugin 启用时应用的 `agent` 和 `subagentStatusLine` 默认值 |

634 

635使用每个默认位置的 plugin,加上其 hooks 调用的 `scripts/` 文件夹,布局如下:

636 

637```text theme={null}

638deploy-tools/

639├── .claude-plugin/

640│ └── plugin.json

641├── skills/

642│ └── deploy/

643│ └── SKILL.md

644├── commands/

645│ └── status.md

646├── agents/

647│ └── reviewer.md

648├── hooks/

649│ └── hooks.json

650├── monitors/

651│ └── monitors.json

652├── output-styles/

653│ └── terse.md

654├── themes/

655│ └── dracula.json

656├── workflows/

657│ └── release-audit.js

658├── bin/

659│ └── deploy-tool

660├── scripts/

661│ └── format.sh

662├── settings.json

663├── .mcp.json

664└── .lsp.json

665```

666 

667要点击此布局并阅读每个文件的作用,打开[plugin 浏览器](/docs/zh-CN/plugins/components#explore-the-plugin-directory)。

668 

669plugin 根目录处的 `CLAUDE.md` 不作为上下文加载,`claude plugin validate` 在找到一个时发出警告。要包含加载到 Claude 上下文中的说明,将它们放在 skill 中。

670 

671<h2 id="marketplace-entries-and-the-manifest">

672 Marketplace 条目和 manifest

673</h2>

674 

675[marketplace 条目](/docs/zh-CN/plugins/marketplace-reference)接受此页面上的每个字段以及[其自己的字段](/docs/zh-CN/plugins/marketplace-reference#plugin-entries),包括 `strict`。

676 

677`strict` 字段决定条目是否可以向具有自己 `plugin.json` 的 plugin 添加组件。它默认为 `true`。

678 

679<h3 id="how-entry-fields-combine-with-plugin-json">

680 条目字段如何与 `plugin.json` 结合

681</h3>

682 

683条目要么充当 manifest,要么向其添加组件,要么与其冲突:

684 

685* **没有 `plugin.json`**:条目是 manifest,无论 `strict` 如何。条目 `hooks` 仅以内联对象形式加载。对于文件路径或数组,`/plugin` **Errors** 选项卡显示 `not yet supported in a marketplace entry` 错误

686* **`plugin.json` 存在,`strict` 未设置或 `true`**:Claude Code 加载 manifest 并将条目的 `commands`、`agents`、`skills`、`outputStyles` 和 `themes` 附加到它。对于 `hooks`,条目对事件的匹配器替换 manifest 对该相同事件的匹配器,仅 manifest 声明的事件保留其

687* **`plugin.json` 存在,`strict: false`**:声明 `commands`、`agents`、`skills`、`hooks`、`outputStyles` 或 `themes` 的条目是冲突,plugin 加载失败,出现 `Plugin <name> has conflicting manifests`

688 

689当[其 `source` 是 marketplace 根目录的 marketplace 条目](/docs/zh-CN/plugins/marketplace-reference)列出特定 `skills` 子目录时,仅这些子目录加载,plugin 的默认 `skills/` 目录不被扫描。manifest 中的 `skills` 键改为[添加到默认值](#how-each-key-combines-with-its-default-location)。

690 

691<h3 id="metadata-precedence">

692 元数据优先级

693</h3>

694 

695某些元数据字段有固定的优先级,无论 `strict` 如何:

696 

697* **`defaultEnabled` 和显示字段**:条目的 `defaultEnabled` 和其[显示字段](/docs/zh-CN/plugins/marketplace-reference#entry-and-plugin-json)(如 `displayName`)覆盖 manifest 的

698* **`version`**:manifest 的 `version` 覆盖条目的

699* **`name`**:当条目在与 manifest 不同的 `name` 下列出 plugin 时,`enabledPlugins` 使用条目名称,组件在 manifest 名称下命名空间

700 

701有关完整的优先级表,参见[严格模式](/docs/zh-CN/plugins/marketplace-reference)。

702 

703<h2 id="next-steps">

704 后续步骤

705</h2>

706 

707* [向 plugin 添加组件](/docs/zh-CN/plugins/components):每个组件在运行时的作用,带有验证的示例

708* [Marketplace 参考](/docs/zh-CN/plugins/marketplace-reference):marketplace 可以为您的 plugin 设置的条目字段

709* [Plugin 命令参考](/docs/zh-CN/plugins/cli-reference#plugin-validate):`claude plugin validate` 标志和输出

710* [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#claude-plugin-validate-reports-errors):每条验证消息及其修复

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Marketplace 参考

6 

7> marketplace.json 字段、插件条目和插件及 marketplace 源对象的完整参考,包括每个字段的有效位置。

8 

9`marketplace.json` 是定义插件 marketplace 的文件。它包含 marketplace 的名称、所有者和每个插件的一个条目。每个条目的插件源说明 Claude Code 从哪里获取该插件。

10 

11marketplace 源是一个单独的对象,说明 Claude Code 从哪里获取 marketplace 文件本身。你在设置中编写一个,或者当你运行 `claude plugin marketplace add` 时 Claude Code 会构建一个。

12 

13本参考适用于需要确切字段名称或值的 marketplace 维护者,以及需要了解哪些 `source` 值在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces)、[`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/plugins/org#restrict-what-users-can-install) 中有效的管理员。

14 

15<Note>

16 这些情况在其他页面上有介绍:

17 

18 * **构建或托管 marketplace**:请参阅 [创建 marketplace](/docs/zh-CN/plugins/create-marketplace) 和 [托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace)

19 * **允许列表和阻止列表配方**:请参阅 [为你的组织管理插件](/docs/zh-CN/plugins/org)

20</Note>

21 

22查找你正在编写或读取的内容的部分:

23 

24* **marketplace 文件**:[顶级字段](#top-level-fields) 和 [插件条目](#plugin-entries)

25* **条目的 `source`**:[插件源](#plugin-sources)

26* **设置中的 `source` 对象**:[Marketplace 源](#marketplace-sources)

27* **来自 [`claude plugin validate <path>`](/docs/zh-CN/plugins/cli-reference) 的输出**:[验证消息](#validation-messages),它将每条消息映射到它命名的字段

28 

29<h2 id="marketplace-file">

30 Marketplace 文件

31</h2>

32 

33将 marketplace 文件保存在 marketplace 目录中的 `.claude-plugin/marketplace.json`。如果你将文件保存在存储库中的其他位置,用户必须在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 中声明 marketplace,并在其源上设置 `path`,因为 `claude plugin marketplace add` 没有该选项。

34 

35包含 `.claude-plugin/` 的目录称为 marketplace 根目录,每个相对插件源都从它解析,而不是从 `.claude-plugin/`。

36 

37每个用户为每个 `name` 注册一个 marketplace,因此用户不能同时注册两个同名的 marketplace。

38 

39Claude Code 忽略未知的顶级键或插件条目键,而不是拒绝它,因此拼写错误会静默加载。`claude plugin validate` 将每个未知键报告为警告。

40 

41<h3 id="reserved-names">

42 保留名称

43</h3>

44 

45你不能给你的 marketplace 以下任何名称:

46 

47* **官方 marketplace 名称**:`claude-code-marketplace`、`claude-code-plugins`、`claude-plugins-official`、`anthropic-marketplace`、`anthropic-plugins`、`agent-skills`、`anthropic-agent-skills`、`life-sciences`、`knowledge-work-plugins`、`claude-for-legal`、`claude-for-financial-services`、`financial-services-plugins`、`first-party-plugins` 和 `claude-tag-plugins`。除非 marketplace 来自 `github.com/anthropics/` 下的 `github` 或 `git` [marketplace 源](#marketplace-sources),否则保留。

48* **社区 marketplace 名称**:`claude-community`、`claude-plugins-community` 和 `healthcare`。保留规则与官方名称相同。

49* **插件目录名称**:`anthropic-plugin-directory` 和 `claude-plugin-directory`。保留规则与官方名称相同。

50* **冒充官方 marketplace 的名称**:名称如 `official-claude-plugins` 或 `claude-plugins-v2`,以及任何包含非 ASCII 字符的名称。错误是 `Marketplace name impersonates an official Anthropic/Claude marketplace`。名称中的控制或双向格式化字符也会报告 `Marketplace name cannot contain control or bidirectional-formatting characters`。

51* <span id="reserved-name-spellings" />**保留名称的另一种拼写**:与保留名称仅在尾部点或用除下划线以外的符号代替连字符的名称,因此 `claude.code.plugins` 计为 `claude-code-plugins`。`claude plugin validate` 接受这样的名称;添加 marketplace 失败,错误为 [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/zh-CN/errors#marketplace-name-is-another-spelling-of-a-reserved-name),已在一个下注册的 marketplace 停止加载。此检查需要 Claude Code v2.1.280 或更高版本。

52* **Claude Code 用于不来自 marketplace 的插件的名称**:`inline` 用于使用 [`--plugin-dir`](/docs/zh-CN/cli-reference) 加载的插件,`builtin` 用于内置插件,`skills-dir` 用于从 [`.claude/skills/`](/docs/zh-CN/skills) 自动加载的插件,`synced` 用于从你的 claude.ai 账户同步的插件。`claude-plugin-test` 也被保留。`skills-dir` 也显示为 `{"source": "skills-dir"}`,在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中,如 [仅在策略列表中有效的源值](#source-values-valid-only-in-policy-lists) 下所述。

53* **`npm`、`pip`、`uv`、`cargo`、`github` 和 `gh`**:以任何大小写保留。此检查需要 Claude Code v2.1.275 或更高版本。

54* **以 `claudeai-` 开头的名称**:为托管在 claude.ai 上的 marketplace 保留。`claude plugin marketplace add` 拒绝任何其他使用一个的 marketplace,错误为 `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`。

55 

56<h2 id="top-level-fields">

57 顶级字段

58</h2>

59 

60该表列出 Claude Code 从 `marketplace.json` 读取的每个键。`name`、`owner` 和 `plugins` 是必需的。

61 

62| 字段 | 类型 | 描述 |

63| :---------------------------------------- | :--------------- | :------------------------------------------------------------------------------------------------------------------------------ |

64| `name` | string | Marketplace 标识符。没有空格、控制字符或双向格式化字符,没有 `/` 或 `\`,没有 `..`,不是 `.`。请参阅 [保留名称](#reserved-names)。用户在安装插件时在 `@` 后键入它 |

65| `owner` | object | 维护者信息。`name` 是必需的;`email` 和 `url` 是可选的 |

66| `plugins` | array | [插件条目](#plugin-entries)。每个条目单独验证,因此一个无效条目不会导致 marketplace 失败 |

67| `$schema` | string | JSON Schema URL 用于编辑器自动完成。在加载时忽略 |

68| `description` | string | 向用户显示的 marketplace 描述。`claude plugin validate` 在缺少时警告 |

69| `version` | string | Marketplace 清单版本 |

70| `metadata.description`、`metadata.version` | string | `description` 和 `version` 的备用位置 |

71| `metadata.pluginRoot` | string | 裸插件源名称解析的目录。请参阅 [相对路径插件源](#relative-path-plugin-source)。需要 Claude Code v2.1.239 或更高版本 |

72| `forceRemoveDeletedPlugins` | boolean | 当为 `true` 时,从 `plugins` 中删除的插件会在用户的机器上卸载。请参阅 [托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace) |

73| `allowCrossMarketplaceDependenciesOn` | array of strings | 其插件可作为此 marketplace 插件的依赖项安装的 marketplace 名称。安装插件时,仅适用该插件自己的 marketplace 中的列表,用于其整个依赖链。请参阅 [插件依赖项](/docs/zh-CN/plugins/dependencies) |

74| `renames` | object | 从前一个插件 `name` 映射到其当前名称,或映射到 `null` 以删除插件。需要 Claude Code v2.1.193 或更高版本。请参阅 [托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace) |

75 

76<h2 id="plugin-entries">

77 插件条目

78</h2>

79 

80`marketplace.json` 的顶级 `plugins` 数组中的每个对象命名一个插件并说明从哪里获取它。`name` 和 `source` 是必需的。

81 

82条目也接受每个 [`plugin.json` 字段](/docs/zh-CN/plugins/manifest-reference),如 `description`、`version`、`author`、`commands` 和 `hooks`。有关这些字段何时适用,请参阅 [条目如何与 plugin.json 结合](#entry-and-plugin-json)。

83 

84该表列出条目自己的字段和清单字段,其含义在条目中改变。

85 

86| 字段 | 类型 | 描述 |

87| :--------------- | :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

88| `name` | string | 插件标识符,没有空格、控制字符或双向格式化字符。用户在安装时在 `@` 前键入它,即使插件自己的 `plugin.json` 设置了不同的 `name` |

89| `source` | string or object | 从哪里获取插件。请参阅 [插件源](#plugin-sources) |

90| `description` | string | 在 [`/plugin`](/docs/zh-CN/plugins/install) 列表和详情中显示 |

91| `version` | string | 插件的版本字符串。当 `plugin.json` 也设置 `version` 时,`plugin.json` 优先,`claude plugin validate` 警告。请参阅 [插件加载参考](/docs/zh-CN/plugins/loading) |

92| `category` | string | 用于组织目录的自由格式类别 |

93| `tags` | array of strings | 用于搜索的自由格式标签 |

94| `strict` | boolean | 默认 `true`。`plugin.json` 是否是插件组件的权威来源。请参阅 [严格模式](#strict-mode) |

95| `relevance` | object | 告诉 Claude Code 何时建议插件的信号。请参阅 [为你的组织推荐插件](/docs/zh-CN/plugins/relevance) |

96| `dependencies` | array | 必须为此插件启用的插件。每个项是 `"name"`、`"name@marketplace"` 或对象。请参阅 [插件依赖项](/docs/zh-CN/plugins/dependencies) |

97| `defaultEnabled` | boolean | 默认 `true`。当用户未在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 中设置时,插件是否启动时启用。条目值优先于 `plugin.json` |

98| `displayName` | string | 在 UI 中显示的人类可读名称。当条目和插件的 `plugin.json` 都未设置时,用户看到插件的 `name` |

99| `metadata` | object | 用于你自己字段的自由格式对象。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本 |

100| `headers` | object | Claude Code 在下载此条目的 [archive](#archive-plugin-source) 时发送的 HTTP 标头。此处设置的标头替换 marketplace 源的 [`headers`](#fields-by-type) 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |

101| `headersHelper` | string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于过期的凭证。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads) |

102 

103<h3 id="entry-and-plugin-json">

104 条目如何与 plugin.json 结合

105</h3>

106 

107条目的字段对获取的具有自己的 `.claude-plugin/plugin.json` 的插件和没有的插件的应用方式不同:

108 

109* **没有 `plugin.json`**:条目是清单,无论 `strict` 如何。条目中的每个清单字段都适用,包括 [`mcpServers`、`lspServers`、`userConfig` 和 `channels`](/docs/zh-CN/plugins/manifest-reference)。

110* **`plugin.json` 存在**:`plugin.json` 是清单。[严格模式](#strict-mode) 决定条目的六个组件字段 `commands`、`agents`、`skills`、`hooks`、`outputStyles` 和 `themes` 是与其结合还是作为冲突被拒绝。条目 `mcpServers`、`lspServers`、`userConfig` 和 `channels` 不适用。在 `plugin.json` 中声明它们。

111 

112<h4 id="hooks-in-an-entry">

113 条目中的 Hooks

114</h4>

115 

116将条目 `hooks` 写成内联对象,将 hook 事件名称映射到匹配器数组。如果你写文件路径或数组,`claude plugin validate` 会通过。这些 hooks 永远不会运行,Claude Code 为插件报告 `not yet supported in a marketplace entry` 错误。将基于文件的 hooks 放在插件自己的 [`hooks/hooks.json`](/docs/zh-CN/plugins/components) 或 `plugin.json` 中。

117 

118<h4 id="display-fields">

119 显示字段

120</h4>

121 

122条目和插件自己的 `plugin.json` 都可以设置显示字段 `displayName`、`description`、`author`、`homepage`、`repository`、`license` 和 `keywords`。用户在插件列表和详情中看到这些值,在安装前后:

123 

124* 对于你在条目上设置的字段,用户看到条目的值,即使 `plugin.json` 设置了不同的值。

125* 对于条目未设置的字段,用户看到 `plugin.json` 值。

126 

127在安装前,Claude Code 只能为具有 [相对路径源](#relative-path-plugin-source) 的条目读取 `plugin.json`,其插件文件在 marketplace 内。对于具有任何其他源类型的条目,用户在安装插件之前只看到条目自己的字段。

128 

129<h3 id="strict-mode">

130 严格模式

131</h3>

132 

133`strict` 决定当获取的插件具有自己的 `plugin.json` 且条目也声明任何 [组件字段](#entry-and-plugin-json) 时会发生什么:`commands`、`agents`、`skills`、`hooks`、`outputStyles` 或 `themes`。使用 `strict: true`(默认值),Claude Code 将条目的组件字段附加到 `plugin.json`,除了 `hooks`,其匹配器替换清单的每个事件。使用 `strict: false`,声明任何组件字段的条目是冲突,插件加载失败。该表显示 `strict`、`plugin.json` 和条目的组件字段的每个组合。

134 

135| `strict` | `plugin.json` | 条目组件字段 | 结果 |

136| :--------- | :------------ | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |

137| any | absent | any | 条目是清单 |

138| `true`,默认值 | present | any | `plugin.json` 是权威。Claude Code 将条目的组件字段附加到它,除了 `hooks`,其匹配器 [替换清单的每个事件](/docs/zh-CN/plugins/manifest-reference#how-entry-fields-combine-with-plugin-json) |

139| `false` | present | none | `plugin.json` 是清单,与 `true` 相同 |

140| `false` | present | one or more | 冲突。插件加载失败,错误为 `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components` |

141 

142<h2 id="plugin-sources">

143 Plugin sources

144</h2>

145 

146一个插件条目的 `source` 说明 Claude Code 从哪里获取该插件。它要么是一个相对路径字符串,要么是一个对象,其自身的 `source` 键命名类型,所以一个条目看起来像 `"source": { "source": "github", "repo": "your-org/formatter" }`。

147 

148该表列出了每种插件源类型及其字段。

149 

150| 类型 | 字段 | 说明 |

151| :----------- | :------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |

152| 相对路径 | 字符串本身 | marketplace 内的一个目录,从 marketplace 根目录解析。必须以 `./` 开头,除非你在 [`metadata.pluginRoot`](#bare-names-under-pluginroot) 下写一个[裸名](#bare-names-under-pluginroot)。`"."` 本身表示根目录 |

153| `github` | `repo`, `ref`, `sha` | GitHub 仓库,格式为 `owner/repo` |

154| `url` | `url`, `ref`, `sha` | 任何 git 仓库的 URL |

155| `git-subdir` | `url`, `path`, `ref`, `sha` | git 仓库的一个子目录,使用稀疏部分克隆获取 |

156| `npm` | `package`, `version`, `registry` | npm 包,使用你的 npm 客户端获取并解包,不运行安装脚本 |

157| `archive` | `url`, `sha256` | HTTPS 上的 Zip 存档。需要 Claude Code v2.1.224 或更高版本 |

158| `command` | `command`, `timeout`, `mode` | 由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |

159 

160名称 `url` 和 `github` 也是[marketplace 源](#marketplace-sources)类型,其中 `url` 表示直接链接到 `marketplace.json` 文件而不是 git 仓库。`git` 仅作为 marketplace 源存在,`npm` 既作为 marketplace 源也作为插件源存在。`git-subdir`、`archive` 和 `command` 仅作为插件源存在。

161 

162对于 marketplace 仓库本身的子目录中的插件,使用相对路径。对于其他仓库的子目录,使用 `git-subdir`。

163 

164`github`、`url` 和 `git-subdir` 源共享 `ref` 和 `sha` 字段:

165 

166* **`ref`**:一个分支或标签。默认为仓库的默认分支。

167* **`sha`**:一个完整的 40 字符小写提交 SHA。当你同时设置 `ref` 和 `sha` 时,Claude Code 检出 `sha`。在大多数 git 主机上,包括 GitHub、GitLab 和 Bitbucket,这意味着即使上游的分支或标签已被删除,只要提交仍然可从仓库到达,安装就会成功。某些服务器(如 AWS CodeCommit)不支持按 SHA 获取提交。在这些服务器上,`ref` 必须仍然存在,固定的提交必须可从它到达。

168 

169有关每种类型如何获取、缓存和版本化的信息,请参阅 [Plugin loading reference](/docs/zh-CN/plugins/loading)。

170 

171<h3 id="relative-path-plugin-source">

172 Relative path plugin source

173</h3>

174 

175路径从 marketplace 根目录解析。`./plugins/formatter` 是 `<root>/plugins/formatter`,即使 marketplace 文件在 `<root>/.claude-plugin/` 中。

176 

177包含 `..` 的路径会验证失败。在 macOS 和 Linux 上,Claude Code 拒绝条目路径在前导 `./` 之后的任何地方包含反斜杠,所以用正斜杠写路径。

178 

179```json theme={null}

180{ "name": "formatter", "source": "./plugins/formatter" }

181```

182 

183相对路径仅在 Claude Code 拥有 marketplace 文件时才能解析,所以检查 [marketplace 源](#marketplace-sources)类型:

184 

185* **`github`、`git`、`file` 和 `directory`**:Claude Code 拥有 marketplace 的文件。

186* **`url`**:Claude Code 仅获取 `marketplace.json`,所以相对路径无法解析。给每个插件一个对象源,如 `github` 或 `git-subdir`。

187* **`settings`**:相对路径被直接拒绝。

188 

189<h4 id="bare-names-under-pluginroot">

190 Bare names under pluginRoot

191</h4>

192 

193裸名是一个没有 `/` 的单个目录名,如 `"formatter"`。要写裸名而不是 `./` 路径,设置 [`metadata.pluginRoot`](#top-level-fields) 为它们解析的目录。使用 `"pluginRoot": "./plugins"`,`"source": "formatter"` 解析为 `./plugins/formatter`。需要 Claude Code v2.1.239 或更高版本。

194 

195`metadata.pluginRoot` 有这些限制:

196 

197* 它本身必须是 marketplace 内的相对路径。

198* 它对已经以 `./` 开头的源没有影响。

199* 包含 `/` 的源,如 `team-a/formatter`,不是裸名,即使设置了 `metadata.pluginRoot` 也仍然需要 `./` 前缀。

200 

201<h3 id="github-plugin-source">

202 github plugin source

203</h3>

204 

205`repo` 采用 `owner/repo` 格式。`ref` 和 `sha` 是可选的。

206 

207```json theme={null}

208{

209 "name": "formatter",

210 "source": {

211 "source": "github",

212 "repo": "your-org/formatter",

213 "ref": "v2.0.0",

214 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

215 }

216}

217```

218 

219<h3 id="url-plugin-source">

220 url plugin source

221</h3>

222 

223`url` 是一个完整的 git URL:`https://`、`http://`、`file://` 或 `git@`。不需要 `.git` 后缀,所以 Azure DevOps 和 AWS CodeCommit URL 可以按原样工作。此类型不采用 `owner/repo` 简写。

224 

225```json theme={null}

226{

227 "name": "formatter",

228 "source": {

229 "source": "url",

230 "url": "https://gitlab.example.com/your-group/formatter.git",

231 "ref": "main"

232 }

233}

234```

235 

236<h3 id="git-subdir-plugin-source">

237 git-subdir plugin source

238</h3>

239 

240`url` 接受完整的 git URL 或 GitHub `owner/repo` 简写。`path` 是保存插件的子目录,Claude Code 仅下载该子目录。

241 

242```json theme={null}

243{

244 "name": "formatter",

245 "source": {

246 "source": "git-subdir",

247 "url": "https://github.com/your-org/monorepo.git",

248 "path": "tools/formatter"

249 }

250}

251```

252 

253<h3 id="npm-plugin-source">

254 npm plugin source

255</h3>

256 

257一个 `npm` 源采用这些字段:

258 

259* `package`:一个包名,或一个作用域名,如 `@your-org/formatter`

260* `version`:一个版本或范围

261* `registry`:一个不在默认 registry 上的包的 registry URL

262 

263Claude Code 使用你的 npm 客户端获取包。包的安装脚本,如 `preinstall` 或 `postinstall`,永远不会运行,其依赖项在获取期间不会被安装。如果包在其 `package.json` 旁边有一个支持的 lockfile,Claude Code 在单独的步骤中安装这些 [Node.js 包依赖项](/docs/zh-CN/plugins/loading#node-js-package-dependencies),也禁用脚本。

264 

265```json theme={null}

266{

267 "name": "formatter",

268 "source": {

269 "source": "npm",

270 "package": "@your-org/formatter",

271 "version": "^2.0.0",

272 "registry": "https://npm.example.com"

273 }

274}

275```

276 

277<h3 id="archive-plugin-source">

278 archive plugin source

279</h3>

280 

281`url` 必须使用 `https://`,不能指向环回、链接本地或云元数据主机。

282 

283插件根可能在 zip 的顶部或下一个目录。

284 

285`sha256` 是存档的摘要,为 64 个十六进制字符,大写或小写。当你设置它时,Claude Code 拒绝不匹配的下载。

286 

287```json theme={null}

288{

289 "name": "formatter",

290 "source": {

291 "source": "archive",

292 "url": "https://artifacts.example.com/formatter-2.0.0.zip",

293 "sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"

294 }

295}

296```

297 

298<h3 id="command-plugin-source">

299 command plugin source

300</h3>

301 

302当安装在用户机器上的工具生成插件目录时,使用 `command` 源,如一个为用户选择的工具链呈现其插件的 IDE。Claude Code 在用户安装或更新插件时运行该命令,并[每个会话再运行一次](/docs/zh-CN/plugins/loading#when-a-command-source-re-runs),所以用户无需重新安装就能获得工具的更改输出。

303 

304一个 `command` 源采用这些字段:

305 

306* `command`:一个 shell 命令,打印插件目录的绝对路径作为一行并退出 0。Claude Code 在运行前向用户显示整个字符串以供审查。将其写为可打印的 ASCII,最多 500 个字符,没有四个或更多空格的连续。

307* `timeout`:从 1 到 600 的整数秒数。默认为 60。

308* `mode`:`copy`(默认)或 `link`。参见 [Copy mode and link mode](#copy-mode-and-link-mode)。

309 

310```json theme={null}

311{

312 "name": "formatter",

313 "source": {

314 "source": "command",

315 "command": "my-tool claude-plugin-path",

316 "timeout": 120

317 }

318}

319```

320 

321有关用户如何接受命令的信息,请参阅 [Install from your shell](/docs/zh-CN/plugins/install#install-from-your-shell)。有关你更改它后用户看到的内容,请参阅 [Change the command of a command source](/docs/zh-CN/plugins/host-marketplace#change-the-command-of-a-command-source)。管理员使用 [`disableCommandPluginSources`](/docs/zh-CN/settings-reference#disablecommandpluginsources) 关闭命令源。

322 

323<h4 id="what-the-command-must-do">

324 What the command must do

325</h4>

326 

327编写命令以满足这些要求:

328 

329* **Shell 和工作目录**:Claude Code 通过 `sh` 运行命令,或在 Windows 上通过 `cmd.exe`,从用户的主目录。给出绝对路径或 `PATH` 上的命令。

330* **输出**:在 stdout 上打印恰好一行,插件目录的绝对路径,并在 `timeout` 秒内退出 0。

331* **目录内容**:该目录在命令退出时保存完整的插件。路径可能因运行而异。

332 

333<h4 id="output-that-fails-the-install-or-update">

334 Output that fails the install or update

335</h4>

336 

337当命令退出非零、运行时间超过 `timeout` 或打印除一个绝对路径之外的任何内容时,安装或更新失败。当打印的目录是以下之一时,它也会失败:

338 

339* **没有插件内容**:打印的目录在其顶级没有插件内容,如 `.claude-plugin/` 目录或 `skills/`、`commands/`、`agents/` 或 `hooks/` 目录。

340* **会话自己的目录**:打印的目录是 Claude Code 启动的目录,或其父目录之一。

341* **网络路径**:在 Windows 上,打印的路径是 UNC 路径。

342* **太大而无法复制**:在复制模式下,目录大于 256 MiB 或有超过 20,000 个条目。

343 

344<h4 id="copy-mode-and-link-mode">

345 Copy mode and link mode

346</h4>

347 

348`mode` 决定 Claude Code 是复制打印的目录还是就地使用它:

349 

350* **`copy`**:Claude Code 将目录复制到插件缓存中,并从复制文件的哈希值派生[插件版本](/docs/zh-CN/plugins/loading#how-claude-code-computes-the-version)。你的工具可以在命令退出后删除或重写目录。产生相同文件的重新运行计为最新。

351* **`link`**:Claude Code 用指向打印目录的每个顶级条目的链接填充插件的缓存条目,并就地加载文件。不复制任何内容,文件内容不被哈希,大小限制不适用。对于太大而无法复制的目录(如呈现的 SDK 导出),使用它。

352 

353链接模式插件有这些要求:

354 

355* **保持目录就位**:Claude Code 在每次启动时通过链接加载插件,所以打印的目录必须保持在原位,只要插件保持安装。

356* **打印不同的路径以表示新内容**:版本来自打印目录的真实路径及其顶级条目,而不是其中的文件。

357* **保持顶级符号链接在目录内**:如果顶级条目是指向打印目录外的符号链接,安装失败。

358* **包含 `node_modules`**:Claude Code 跳过链接模式插件的 [Node.js 包依赖项安装](/docs/zh-CN/plugins/loading#node-js-package-dependencies),所以打印一个已经包含插件需要的包的目录。

359* **在目录内启动的会话**:在打印目录或其下方任何地方启动的会话不加载插件。

360* **不在 Windows 上**:Claude Code 拒绝在 Windows 上安装链接模式插件。在那里声明 `"mode": "copy"`。

361 

362<h2 id="marketplace-sources">

363 Marketplace 源

364</h2>

365 

366marketplace 源说明 Claude Code 从哪里获取 `marketplace.json`。CLI 在你添加 marketplace 时为你构建一个,你在设置中自己编写一个:

367 

368* **[`claude plugin marketplace add`](/docs/zh-CN/plugins/cli-reference)**:Claude Code 从你传递的字符串构建源。

369* **[`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces)**:你自己将源写成 `source` 对象。

370* **[`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/plugins/org#restrict-what-users-can-install)**:管理员在这两个策略列表中编写源。`strictKnownMarketplaces` 是允许列表,`blockedMarketplaces` 是阻止列表。

371 

372类型名称 `url`、`git` 和 `github` 在 marketplace 源中的含义与在 [插件源](#plugin-sources) 中不同:

373 

374| 类型名称 | 作为 marketplace 源 | 作为插件源 |

375| :------- | :---------------------------------------------------------------- | :-------------------------------------------- |

376| `url` | 直接链接到 `marketplace.json` 文件,字段为 `url`、`headers` 和 `headersHelper` | 要克隆的 git 存储库,字段为 `url`、`ref` 和 `sha` |

377| `git` | 要克隆的 git 存储库,字段为 `url`、`ref`、`path` 和 `sparsePaths` | 不存在 |

378| `github` | GitHub 存储库,字段为 `repo`、`ref`、`path` 和 `sparsePaths` | GitHub 存储库,字段为 `repo`、`ref` 和 `sha`,没有 `path` |

379 

380该表列出每个 marketplace 源类型及其字段、产生它的 `claude plugin marketplace add` 输入,以及它在三个设置键中的作用。

381 

382| 类型 | 字段 | `marketplace add` 输入 | `extraKnownMarketplaces` | `strictKnownMarketplaces` | `blockedMarketplaces` |

383| :------------ | :-------------------------------- | :---------------------------------------------------------------------------------------------------------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------- |

384| `url` | `url`、`headers`、`headersHelper` | 不匹配 git 形式的 `http://` 或 `https://` URL | 加载 | 允许相同的 URL | 阻止相同的 URL |

385| `github` | `repo`、`ref`、`path`、`sparsePaths` | `owner/repo`、`owner/repo@ref` 或 `owner/repo#ref` | 加载 | 允许相同的 `repo`、`ref` 和 `path`。`repo` 可能是 `owner/*` | 阻止相同的,以及到相同存储库的 `git` URL |

386| `git` | `url`、`ref`、`path`、`sparsePaths` | `user@host:path` URL,或以 `.git` 结尾、包含 `/_git/` 或命名 github.com 或 gitlab.com 存储库的 `https://` URL。`#ref` 固定 ref | 加载 | 允许相同的 URL、`ref` 和 `path` | 阻止相同的,以及相同 github.com 存储库的其他拼写 |

387| `npm` | `package` | 未产生 | 加载失败:`NPM marketplace sources not yet implemented` | 解析但不匹配任何内容,因为没有任何内容注册 `npm` marketplace | 解析但不匹配任何内容 |

388| `file` | `path` | `.json` 文件的路径 | 加载 | 允许相同的路径 | 阻止相同的路径 |

389| `directory` | `path` | 目录的路径 | 加载 | 允许相同的路径 | 阻止相同的路径 |

390| `settings` | `name`、`plugins`、`owner` | 未产生 | 加载 | 允许具有相同 `name` 和相同 `plugins` 的条目 | 阻止相同的 `name` |

391| `skills-dir` | none | 未产生 | 加载失败:`Unsupported marketplace source type` | 保持 [skills-directory 插件](/docs/zh-CN/plugins/org#keep-skills-directory-plugins-loading) 在设置允许列表时加载。请参阅 [仅在策略列表中有效的源值](#source-values-valid-only-in-policy-lists) | 停止 skills-directory 插件加载 |

392| `hostPattern` | `hostPattern` | 未产生 | 加载失败:`Unsupported marketplace source type` | 允许主机匹配的 `github`、`git` 和 `url` 源 | 阻止这些源 |

393| `pathPattern` | `pathPattern` | 未产生 | 加载失败:`Unsupported marketplace source type` | 允许 `path` 匹配的 `file` 和 `directory` 源 | 阻止这些源 |

394 

395<h3 id="fields-by-type">

396 按类型的字段

397</h3>

398 

399该表列出每个具有默认值、约束或特定于其类型的含义的 marketplace 源字段。

400 

401| 字段 | 类型 | 描述 |

402| :-------------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

403| `url` | `url` | 指向 `marketplace.json` 文件的链接。Claude Code 仅下载该文件,因此 marketplace 的插件不能使用 [相对路径源](#relative-path-plugin-source) |

404| `url` | `git` | 要克隆的 git 存储库 |

405| `headers` | `url` | Claude Code 随获取发送的 HTTP 标头映射,用于经过身份验证的主机 |

406| `headersHelper` | `url` | 打印标头的命令,其值太短暂而无法在 `headers` 中列出。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads) |

407| `repo` | `github` | 在 `marketplace add` 和 `extraKnownMarketplaces` 中,`repo` 必须命名一个存储库。`marketplace add` 拒绝 `owner/*` 作为无效的 `owner/repo` 简写;在 `extraKnownMarketplaces` 中 Claude Code 按字面意思取它,克隆失败 |

408| `ref` | `github`、`git` | 分支或标签。默认为存储库的默认分支 |

409| `path` | `github`、`git` | marketplace 文件在存储库内的路径。默认为 `.claude-plugin/marketplace.json` |

410| `path` | `file` | marketplace 文件本身。Claude Code 就地读取它,并将上两级的目录作为 marketplace 根目录,因此将文件保持在 `<root>/.claude-plugin/marketplace.json` |

411| `path` | `directory` | marketplace 根目录,包含 `.claude-plugin/marketplace.json` 的目录 |

412| `sparsePaths` | `github`、`git` | 用于稀疏检出的目录数组,如 `[".claude-plugin", "plugins"]`。`claude plugin marketplace add --sparse` 设置它 |

413| `skipLfs` | `github`、`git` | 接受且无效果。请参阅 [保持插件文件不在 Git LFS 中](/docs/zh-CN/plugins/host-marketplace#keep-plugin-files-out-of-git-lfs) |

414| `name` | `settings` | 必须等于 `extraKnownMarketplaces` 键,不能是 [保留名称](#reserved-names) |

415| `plugins` | `settings` | 内联目录,没有托管文件。每个项采用 `name`、`source`、`description`、`version`、`strict`、`headers` 和 `headersHelper`。将每个项的 `source` 写成对象类型,因为相对路径没有存储库来解析 |

416 

417<h3 id="source-values-valid-only-in-policy-lists">

418 仅在策略列表中有效的源值

419</h3>

420 

421`hostPattern`、`pathPattern`、`skills-dir` 和 `repo` 的 `owner/*` 形式仅在两个策略列表中有效,`strictKnownMarketplaces` 和 `blockedMarketplaces`:

422 

423* **`hostPattern` 和 `pathPattern`**:Claude Code 在获取前针对源测试的正则表达式。

424* **`skills-dir`**:不是源。如果你设置 `strictKnownMarketplaces`,[skills-directory 插件](/docs/zh-CN/plugins/org#keep-skills-directory-plugins-loading) 停止加载,直到你将 `{"source": "skills-dir"}` 添加到该列表。

425* **`owner/*`**:作为 `github` `repo` 值,匹配恰好该 GitHub 所有者下的每个存储库。需要 Claude Code v2.1.223 或更高版本。

426 

427有关匹配顺序、精确 `ref` 语义和配方,请参阅 [为你的组织管理插件](/docs/zh-CN/plugins/org)。

428 

429<h3 id="source-objects-in-settings">

430 设置中的源对象

431</h3>

432 

433`extraKnownMarketplaces` 值是从 marketplace 名称到具有 `source` 的对象的映射。此条目从其 `main` 分支的 git 存储库注册 marketplace:

434 

435```json theme={null}

436{

437 "extraKnownMarketplaces": {

438 "your-marketplace": {

439 "source": {

440 "source": "git",

441 "url": "https://git.example.com/your-org/your-marketplace.git",

442 "ref": "main"

443 }

444 }

445 }

446}

447```

448 

449`strictKnownMarketplaces` 和 `blockedMarketplaces` 是源对象的数组。此允许列表允许一个 GitHub 所有者和一个内部主机:

450 

451```json theme={null}

452{

453 "strictKnownMarketplaces": [

454 { "source": "github", "repo": "your-org/*" },

455 { "source": "hostPattern", "hostPattern": "^git\\.example\\.com$" }

456 ]

457}

458```

459 

460<h2 id="validation-messages">

461 验证消息

462</h2>

463 

464`claude plugin validate <path>` 接受 marketplace 根目录或 marketplace 文件本身。它打印错误和警告。有关退出代码和 `--strict`,请参阅 [plugin validate](/docs/zh-CN/plugins/cli-reference#plugin-validate)。

465 

466消息通过索引命名插件条目,写作 `plugins.1.source` 或 `plugins[1].source`。

467 

468以条目索引和 `plugin.json →` 为前缀的消息,例如 `plugins[2] plugin.json →`,涉及该插件自己的文件。[`claude plugin validate` 报告错误](/docs/zh-CN/plugins/troubleshooting#claude-plugin-validate-reports-errors) 列出这些消息及其修复。

469 

470提及 Claude Desktop 标志名称的警告,这些名称 Claude Code 接受但 Claude Desktop 拒绝,因为 Claude Desktop 的名称规则更严格。

471 

472该表将 marketplace 级别的消息映射到每个消息所涉及的字段。

473 

474| 消息 | 级别 | 字段 |

475| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :- | :---------------------------------------------------------------------------------- |

476| `Marketplace must have a name` | 错误 | `name` 为空 |

477| `Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace")` | 错误 | `name` |

478| `Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "."` | 错误 | `name` |

479| `Marketplace name impersonates an official Anthropic/Claude marketplace` | 错误 | `name`。请参阅 [Reserved names](#reserved-names) |

480| `Marketplace name cannot contain control or bidirectional-formatting characters` | 错误 | `name` 包含控制字符,例如转义或换行符,或 Unicode 双向格式化字符 |

481| `Marketplace name "inline" is reserved for --plugin-dir session plugins`, and the `builtin`, `skills-dir`, `synced`, `claude-plugin-test`, `npm`, `pip`, `uv`, `cargo`, `github`, and `gh` variants | 错误 | `name` |

482| `Author name cannot be empty` | 错误 | `owner.name` |

483| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | 错误 | `plugins[i].name` |

484| `Plugin name cannot contain control or bidirectional-formatting characters` | 错误 | `plugins[i].name` |

485| `Duplicate plugin name "x" found in marketplace` | 错误 | 两个条目共享一个 `name` |

486| `plugins.i.source: Invalid input` | 错误 | 该条目的 `source` 与任何类型都不匹配。请参阅 [Invalid input on a source](#invalid-input-on-a-source) |

487| `plugins[i].source: Path contains "..": <path>` | 错误 | 转义 marketplace 根目录的相对 `source` |

488| `source.source: 'unsupported' is a parse-time placeholder and cannot be authored` | 错误 | `plugins[i].source` |

489| `Plugin "x" sets headersHelper but is not "strict": false` | 错误 | `plugins[i].headersHelper`,在 `archive` 条目上 |

490| `chain does not resolve (<reason>) — target must be a name in plugins[], a key in renames, or null` | 错误 | `renames.<old>` |

491| `target "x" is not a valid plugin name (PluginIdSchema)` | 错误 | `renames.<old>` |

492| `Unknown field 'x'. Claude Code ignores it at load time.` | 警告 | 顶级、`metadata` 下、条目中或条目的 `relevance` 下的命名键 |

493| `Marketplace has no plugins defined` | 警告 | `plugins` 为空 |

494| `Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry.` | 警告 | `plugins[i].headers` 或 `plugins[i].headersHelper`,在 `source` 不是 `archive` 的条目上 |

495| `Plugin "x" fetches its archive with a headersHelper but sets no sha256 pin` | 警告 | `plugins[i].source.sha256` |

496| `Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time.` | 警告 | `plugins[i].headers.<name>` |

497| `Local source "x" is or traverses a symlink, so <path> was not read` | 警告 | `plugins[i].source` |

498| `No marketplace description provided. Adding a description helps users understand what this marketplace offers` | 警告 | `description` |

499| `Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json wins` | 警告 | `plugins[i].version`,在相对路径条目上 |

500| `'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time.` | 警告 | `plugins[i].relevance` |

501| `'metadata' must be a free-form object; got <type>. It will be ignored at load time.` | 警告 | `plugins[i].metadata` |

502| `'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time.` | 警告 | `plugins[i].experimental` |

503| `Marketplace name "x" is reserved in Claude Desktop` | 警告 | `name` 是 `org`、`org-provisioned` 或 `unknown`。Claude Desktop 拒绝该 marketplace |

504| `Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars)` | 警告 | `name`。Claude Desktop 拒绝该 marketplace |

505| `Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars)` | 警告 | `plugins[i].name`。Claude Desktop 删除该条目 |

506 

507<h3 id="invalid-input-on-a-source">

508 Invalid input on a source

509</h3>

510 

511`source` 上的 `Invalid input` 意味着该对象与任何源类型都不匹配。检查这些原因:

512 

513* 不以 `./` 开头的相对路径,除了 `"."` 或 `metadata.pluginRoot` 下的裸名称

514* 包含 `..` 的 `npm` `package`

515* 不是 [plugin sources](#plugin-sources) 之一的 `source` 类型

516* 已知类型缺少必需字段或字段类型错误,例如没有 `repo` 的 `github`

517 

518<h3 id="failures-that-validation-doesn’t-catch">

519 验证未捕获的失败

520</h3>

521 

522`claude plugin validate` 不会报告每个失败。写作文件路径或数组的条目 `hooks` 通过验证,错误仅在插件加载时出现,如 [Hooks in an entry](#hooks-in-an-entry) 所述。获取 `source` 的错误也仅在安装后出现,不在验证中出现。

523 

524[`claude plugin list`](/docs/zh-CN/plugins/cli-reference) 显示加载失败的插件及其错误,[Troubleshoot plugins](/docs/zh-CN/plugins/troubleshooting) 涵盖加载时字符串。

525 

526<h2 id="next-steps">

527 后续步骤

528</h2>

529 

530* [创建 marketplace](/docs/zh-CN/plugins/create-marketplace):从这些字段构建 marketplace 并在本地安装

531* [托管和维护 marketplace](/docs/zh-CN/plugins/host-marketplace):放置文件的位置以及用户如何接收更改

532* [插件清单参考](/docs/zh-CN/plugins/manifest-reference):条目可以覆盖的 `plugin.json` 字段

533* [为你的组织管理插件](/docs/zh-CN/plugins/org):使用这些源值的允许列表和阻止列表配方

plugins/measure.md +193 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 测量插件成本和使用情况

6 

7> 测量 Claude Code 插件的令牌成本,了解人们是否仍在使用它,并为组织范围的插件问题选择遥测事件。

8 

9启用插件的每个会话都会在 Claude 的上下文中包含其 skills、agents 和 commands 的名称和描述,这些令牌会计入用户的使用情况,无论插件是否被使用。本页面展示了如何查看插件的这个数字、如果你维护插件如何减少它,以及使用情况在哪里显示,以便你可以判断插件是否仍在被使用。

10 

11本页面适用于插件作者和维护者。如果你为组织管理 Claude Code,[跨机队测量](#measure-across-a-fleet)涵盖了每台机器上的相同问题。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **测试插件改变 Claude 行为的可靠性**:请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)

17 * **修剪你自己会话的上下文**:请参阅[管理已安装的插件](/docs/zh-CN/plugins/install#manage-installed-plugins)和[上下文窗口](/docs/zh-CN/context-window)页面

18</Note>

19 

20从[测量插件的成本](#measure-what-a-plugin-costs)开始。

21 

22<h2 id="measure-what-a-plugin-costs">

23 测量插件的成本

24</h2>

25 

26要查看插件添加到 Claude 上下文的内容,请使用插件的名称运行[`claude plugin details`](/docs/zh-CN/plugins/cli-reference#plugin-details)。你在 shell 中运行它,而不是在运行的 Claude Code 会话的提示符处。插件必须被加载:已安装、在 skills 目录中,或通过同一命令中的 `--plugin-dir` 传递,如 `claude --plugin-dir ./formatter plugin details formatter`。

27 

28此示例读取一个名为 `formatter` 的已安装插件,该插件有两个 skills、一个 command、一个 agent、一个 hook 和一个 MCP 服务器:

29 

30```bash theme={null}

31claude plugin details formatter

32```

33 

34```text theme={null}

35formatter 1.0.0

36 Description: Formats and lints code on save

37 Source: formatter@my-marketplace

38 

39Component inventory

40 Skills (3) format-all, format-code, lint-fix

41 Agents (1) style-reviewer

42 Hooks (1) PostToolUse (harness-only — no model context cost)

43 MCP servers (1) formatter-tools (tool schemas resolved at runtime; not counted)

44 LSP servers (0)

45 

46Projected token cost

47 Always-on: ~146 tok added to every session

48 

49Per-component (rounded)

50 component always-on on-invoke

51 format-code ~40 ~30

52 lint-fix ~50 ~30

53 style-reviewer ~40 ~40

54 format-all < 20 ~30

55 

56 On-invoke cost is paid each time a skill or agent fires.

57 Token counts are estimates and may differ from actual usage.

58```

59 

60输出的每个部分回答了一个不同的问题:

61 

62* **Component inventory**:Claude Code 在插件中找到的内容。Commands 与 skills 一起计数,所以 `format-all` 出现在 `Skills` 下。Hooks 和 MCP 服务器没有成本估计和每个组件行;要查看插件的 MCP 工具添加的内容,请在启用插件的会话中运行 `/context`,并阅读 `MCP tools` 类别。

63* **Always-on**:插件的 skills、agents 和 commands 的名称和描述添加到启用插件的每个会话中的令牌,无论是否有任何东西运行。这是每个用户携带的数字,也是要减少的数字。

64* **Per-component**:每一行将一个 skill、agent 或 command 分成其 always-on 份额和其 on-invoke 成本,后者是仅在该组件运行时加载的主体。使用 always-on 列来找出哪个组件贡献最多。

65 

66<h3 id="lower-the-always-on-figure">

67 降低 always-on 数字

68</h3>

69 

70如果你维护插件,这些更改会减少它添加到每个会话的内容。如果你只是使用它,你的选择是禁用或卸载它;请参阅[管理已安装的插件](/docs/zh-CN/plugins/install#manage-installed-plugins)。

71 

72always-on 数字计算每个组件的名称加上其 `description` 和 `when_to_use` frontmatter。要降低它:

73 

74* 缩短 skill 和 agent 描述。

75* 分割大型插件,以便用户只安装他们需要的组件。

76 

77skill 的描述也是 Claude 匹配请求的内容,所以较短的描述可以阻止 skill 触发。修剪描述后,使用 eval 套件中的[`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)检查触发。

78 

79有关每个组件类型的贡献,请参阅[插件组件](/docs/zh-CN/plugins/components)。

80 

81<h3 id="cost-shown-to-users-before-install">

82 安装前向用户显示的成本

83</h3>

84 

85官方市场中的插件在安装前向用户显示其成本。在 `/plugin` 中,当用户浏览市场的插件列表并选择一个插件时,详细信息窗格显示一个**Context cost**部分,其中有一个 `Every turn:` 行和一个 `When invoked:` 行。当 always-on 数字为 2,000 个令牌或更多时,`Every turn:` 行显示为突出显示。

86 

87你自己市场中的插件没有**Context cost**部分。

88 

89<h2 id="check-whether-a-plugin-is-used">

90 检查插件是否被使用

91</h2>

92 

93Claude Code 不会向其作者报告插件的使用情况。使用情况记录在安装插件的每个人的机器上,所以你能学到的内容取决于你与这些人的关系:

94 

95* **你为他们的组织管理 Claude Code**:OpenTelemetry 事件和 Analytics API 计算每台机器上的安装和 skill 激活。请参阅[跨机队测量](#measure-across-a-fleet)。

96* **他们是你可以询问的队友**:每个用户自己的 Claude Code 在四个地方向他们显示他们是否仍在使用插件:[`/plugin` 面板](#not-used-recently-in-/plugin)、[`/skill-doctor`](#find-skills-that-never-run)、[`/doctor`](#unused-plugins-in-/doctor)和[`/usage`](#usage-share-in-/usage)。所有四个都是用户在自己机器上的会话中在 Claude Code 提示符处运行的命令。

97* **都不是**:你没有来自 Claude Code 的该插件的使用信号。

98 

99<h3 id="not-used-recently-in-/plugin">

100 `/plugin` 中最近未使用

101</h3>

102 

103在 `/plugin` 的**Installed**选项卡上,用户从市场安装的插件在至少 14 天和 10 个会话未使用后,会移到**Not used recently**标题下。插件的详细信息也显示一个 `Last used:` 行。有关用户对该标题和行的处理,请参阅[查找你不再使用的插件](/docs/zh-CN/plugins/install#find-plugins-you-no-longer-use)。

104 

105**Not used recently**标题永远不会出现在:

106 

107* 使用 `--plugin-dir` 加载或从 skills 目录加载的插件

108* 通过托管设置启用或从[种子目录](/docs/zh-CN/plugins/org#seed-containers-and-ci)挂载的插件

109* 包含主题、输出样式、监视器或工作流的插件,因为这些在没有跟踪调用的情况下使用

110 

111插件的[语言服务器](/docs/zh-CN/plugins/components#lsp-servers)在传递诊断或回答代码导航请求时计为已使用,所以一个 LSP 插件,其服务器在你的会话中处于活动状态,不会被列为未使用。

112 

113当用户的组织设置[`strictKnownMarketplaces`](/docs/zh-CN/plugins/org#restrict-what-users-can-install)时,标题和 `Last used:` 行都不会出现。

114 

115<h3 id="find-skills-that-never-run">

116 查找永远不运行的 skills

117</h3>

118 

119运行 `/skill-doctor` 以查看你的每个 skill 的成本以及它被使用的频率。它标记在 Claude 的 skill 列表中但从未被调用的 skills,包括来自插件的 skills。

120 

121在交互式会话中,报告在 `/plugin` 管理器的**Stats**选项卡中打开。请参阅[查找未使用的 skills](/docs/zh-CN/skills#find-unused-skills)了解报告涵盖的内容以及它在哪里可用。

122 

123<h3 id="unused-plugins-in-/doctor">

124 `/doctor` 中未使用的插件

125</h3>

126 

127`/doctor` 检查列出每个用户安装的 skill、MCP 服务器和插件,并建议禁用未使用的插件。请参阅[命令参考中的 `/doctor`](/docs/zh-CN/commands#all-commands)。

128 

129<h3 id="usage-share-in-/usage">

130 `/usage` 中的使用情况份额

131</h3>

132 

133在 Pro、Max、Team 或 Enterprise 计划上,`/usage` 分解将最近的使用情况归因于 skills、subagents、插件和 MCP 服务器,作为总数的份额。请参阅[使用 `/usage` 命令](/docs/zh-CN/costs#using-the-/usage-command)。

134 

135<h2 id="measure-across-a-fleet">

136 跨机队测量

137</h2>

138 

139如果你为组织管理 Claude Code,你可以从以下任一来源跨每台机器测量插件成本和使用情况:

140 

141* **OpenTelemetry 事件**:Claude Code 在你[配置导出器](/docs/zh-CN/monitoring-usage)后将这些导出到你自己的后端。请参阅[插件安装和使用的 OpenTelemetry 事件](#pick-the-opentelemetry-event-for-each-question)。

142* **Analytics API**:来自 Anthropic 的记录,无需导出器。请参阅[查询 Analytics API](#query-the-analytics-api)。

143 

144<h3 id="pick-the-opentelemetry-event-for-each-question">

145 插件安装和使用的 OpenTelemetry 事件

146</h3>

147 

148这些 OpenTelemetry 事件和属性从你的后端回答每个插件问题:

149 

150| 问题 | OpenTelemetry 事件或属性 |

151| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------ |

152| 安装了哪些插件,来自哪里 | [`claude_code.plugin_installed`](/docs/zh-CN/monitoring-usage#plugin-installed-event),每次安装一个 |

153| 哪些插件在多少个会话中处于活动状态 | [`claude_code.plugin_loaded`](/docs/zh-CN/monitoring-usage#plugin-loaded-event),会话开始时每个启用的插件一个 |

154| 哪些 skills 激活,哪个插件拥有它们 | [`claude_code.skill_activated`](/docs/zh-CN/monitoring-usage#skill-activated-event),带有插件 skills 的 `plugin.name` 和 `marketplace.name` |

155| 插件的 hooks 报告什么 | [`claude_code.hook_plugin_metrics`](/docs/zh-CN/monitoring-usage#hook-plugin-metrics-event),仅为官方市场插件中的 hooks 发出 |

156| 插件在 API 支出中的成本 | [成本计数器](/docs/zh-CN/monitoring-usage#cost-counter)上的 `plugin.name` 和 `marketplace.name`,在活跃 skill 或 subagent 属于插件时设置 |

157 

158<h3 id="redacted-plugin-names-in-your-backend">

159 后端中的编辑插件名称

160</h3>

161 

162来自官方市场的插件将其插件名称和市场名称逐字报告到你的后端。所有其他插件的名称默认被编辑或省略,包括来自你组织自己市场的插件。插件的[信任等级](/docs/zh-CN/plugins/security#find-plugins-in-telemetry)决定了哪个。

163 

164要在某些事件上获取真实名称,请在导出遥测的机器上将[`OTEL_LOG_TOOL_DETAILS`](/docs/zh-CN/monitoring-usage#common-configuration-variables)环境变量设置为 `1`,例如在配置导出器的同一[托管设置](/docs/zh-CN/monitoring-usage#administrator-configuration)的 `env` 块中:

165 

166| 事件 | 默认 | 使用 `OTEL_LOG_TOOL_DETAILS=1` |

167| :----------------------------------- | :----------------------------------------------------------------------------------------- | :---------------------------------------- |

168| `plugin_loaded` | `plugin.name` 和 `marketplace.name` 是字符串 `third-party` | 真实名称 |

169| `plugin_installed`、`skill_activated` | `plugin.name` 和 `marketplace.name` 被省略;在 `skill_activated` 上,`skill.name` 是 `custom_skill` | 真实名称 |

170| 成本计数器 | `plugin.name` 是 `third-party`;`marketplace.name` 不存在 | 真实 `plugin.name`;`marketplace.name` 仍然不存在 |

171 

172在 `plugin_loaded` 上,`plugin_id_hash` 仍然默认识别每个插件,所以你可以计算不同的第三方插件。

173 

174<h3 id="query-the-analytics-api">

175 查询 Analytics API

176</h3>

177 

178在 Enterprise 计划上,Analytics API 从 Anthropic 的记录中回答"我的组织安装和调用哪些插件",无需导出器。[`GET /v1/organizations/analytics/plugins`](https://platform.claude.com/docs/en/api/admin/analytics/plugins/list)返回跨 Claude Code 和 Cowork 的每个插件、每天的安装和调用计数,你可以按用户、RBAC 组或产品分组。

179 

180到达 Anthropic 而没有插件名称的插件活动出现在一个聚合 `third-party` 行中。[在遥测中查找插件](/docs/zh-CN/plugins/security#find-plugins-in-telemetry)说明 Claude Code 按名称报告的插件。

181 

182使用具有 `read:analytics` 范围的 API 密钥对请求进行身份验证,Primary Owner 按照[以编程方式访问数据](/docs/zh-CN/analytics#access-data-programmatically)中的描述创建。

183 

184有关参数和响应字段,请参阅[端点参考](https://platform.claude.com/docs/en/api/admin/analytics/plugins/list)。

185 

186<h2 id="next-steps">

187 后续步骤

188</h2>

189 

190* [使用 evals 测试插件](/docs/zh-CN/plugin-evals):测量插件引导 Claude 的可靠性,而不仅仅是它的成本

191* [降低 always-on 数字](#lower-the-always-on-figure):在插件中更改什么以减少其每轮成本

192* [插件安全和信任](/docs/zh-CN/plugins/security#find-plugins-in-telemetry):哪些遥测字段携带插件名称以及何时被编辑

193* [监视使用情况](/docs/zh-CN/monitoring-usage):完整的 OpenTelemetry 事件参考

plugins/org.md +460 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 为您的组织管理 Claude Code plugins

6 

7> 通过托管设置控制 Claude Code 在组织中每台机器上安装和允许的 plugins。

8 

9托管设置让您决定 Claude Code 在组织中每台机器上安装和允许的 plugins。用户无法覆盖这些设置。您可以从 claude.ai 管理员控制台以[服务器托管设置](/docs/zh-CN/server-managed-settings)的形式或通过 MDM 或 `managed-settings.json` 文件以端点托管设置的形式提供这些设置。此页面上的大多数控制仅从托管设置生效。

10 

11此页面适用于管理员,此处的设置管理 Claude Code。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **为自己安装 plugins**:从[安装 plugins](/docs/zh-CN/plugins/install)开始

17 * **控制成员在 claude.ai 和 Cowork 中可以使用的 plugins**:请参阅帮助中心中的[为您的组织管理 plugins](https://support.claude.com/en/articles/13837433)

18 * **claude.ai 管理员设置中的 plugins 页面**:[**组织设置 > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory)为成员的 claude.ai 账户启用 plugins,这些会作为[同步的 plugins](/docs/zh-CN/plugins/loading#synced-plugins)到达 Claude Code。它不设置此页面上的任何键

19</Note>

20 

21这些部分遵循大多数推出采取的顺序:为所有人或按存储库[要求 plugins](#pre-install-and-require-plugins),[为容器和 CI 提供种子](#seed-containers-and-ci),[限制](#restrict-what-users-can-install)用户可以自己添加的内容,[设置更新策略](#set-update-policy),然后[审计](#audit-and-review)已安装的内容。要在一个地方查看每个策略键,请参阅[控制矩阵](#control-matrix)。

22 

23<h2 id="pre-install-and-require-plugins">

24 预安装和要求插件

25</h2>

26 

27市场是 Claude Code 从 git 存储库、URL 或本地路径获取的插件目录。在机器上注册市场后,Claude Code 可以从中安装插件。

28 

29要为整个车队安装插件,请在[托管设置](/docs/zh-CN/managed-settings)、策略文件或组织中每台机器读取的服务器交付策略中一起设置两个键:`extraKnownMarketplaces` 在每台机器上注册市场,`enabledPlugins` 命名要从中安装和启用的插件。[选择交付机制](#choose-a-delivery-mechanism)涵盖托管设置如何到达每台机器。

30 

31<h3 id="choose-a-delivery-mechanism">

32 选择交付机制

33</h3>

34 

35托管设置通过以下三种交付机制之一到达机器:

36 

37* **服务器托管设置**:在[**组织设置 > Claude Code > 托管设置**](https://claude.ai/admin-settings/claude-code)处将插件键设置为 JSON。需要在您的 Claude 组织中具有[所有者角色](/docs/zh-CN/server-managed-settings#access-control)。云会话在安装插件之前获取这些设置。

38* **MDM 策略**:在 macOS 上,交付一个 plist,其顶级键是设置键。在 Windows 上,将整个 JSON 文档作为字符串存储在注册表值中。plist 域和注册表键在[每个机制存储策略的位置](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)中。

39* **托管设置文件**:在平台的系统路径处放置 `managed-settings.json`。您也可以将文件添加到其旁边的 `managed-settings.d/` 放入目录。每个平台的文件路径在[每个机制存储策略的位置](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)中,放入合并规则在[跨团队拆分基于文件的策略](/docs/zh-CN/managed-settings#split-a-file-based-policy-across-teams)中。

40 

41如果您在 claude.ai 上有 Claude for Teams 或 Enterprise 组织,并且您的设备不都在 MDM 下,请使用服务器托管设置。否则使用 MDM 策略或托管设置文件。有关权衡,请参阅[在服务器托管和端点托管设置之间选择](/docs/zh-CN/server-managed-settings#choose-between-server-managed-and-endpoint-managed-settings)。

42 

43<h4 id="which-managed-source-applies-on-a-machine">

44 哪个托管源在机器上应用

45</h4>

46 

47默认情况下,这三个源中只有一个在机器上应用。Claude Code 使用首先交付策略键的源,首先检查服务器托管设置,然后是 MDM 策略,然后是托管设置文件。如果服务器托管设置交付甚至一个不相关的策略键,Claude Code 会忽略该机器上 MDM 策略或托管设置文件中的插件键,除了[它从每个源读取的键](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source)。

48 

49要改为应用每个源,请将[`managedSourcesBehavior`](/docs/zh-CN/managed-settings#compose-every-managed-source)设置为 `"merge"`。

50 

51[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)也在两种模式中列出 Claude Code 从每个源读取的键。

52 

53<h3 id="require-a-marketplace-and-its-plugins">

54 要求市场及其插件

55</h3>

56 

57在 `extraKnownMarketplaces` 下添加市场,使用市场自己的 `marketplace.json` 中的 `name` 作为键。然后在 `enabledPlugins` 下添加每个插件作为 `plugin-name@marketplace-name`。每个市场条目都带有一个 `source` 对象,其中 `source` 字段命名类型,例如 `github`。此托管设置示例注册一个组织市场并强制启用来自它的两个插件:

58 

59```json theme={null}

60{

61 "extraKnownMarketplaces": {

62 "your-marketplace": {

63 "source": { "source": "github", "repo": "your-org/your-marketplace" },

64 "autoUpdate": true

65 }

66 },

67 "enabledPlugins": {

68 "code-formatter@your-marketplace": true,

69 "deploy-helper@your-marketplace": true

70 }

71}

72```

73 

74设置到达机器后,Claude Code 注册市场并在用户下一个会话开始时安装两个插件。用户在 `/plugin` 中看到它们,在自己的范围内禁用一个不会阻止它加载,因为托管设置优先于每个其他范围。

75 

76要在每个范围内阻止插件并将其从市场列表中隐藏,请在托管 `enabledPlugins` 中将其设置为 `false`。

77 

78为您的市场调整 `autoUpdate` 和 `source` 字段:

79 

80* **`autoUpdate`**:`true` 使市场及其插件在后台刷新,`false` 关闭它。请参阅[设置更新策略](#set-update-policy)。

81* **`source`**:`github` 是几种源类型之一。`git` 源为 GitLab 或内部主机采用 `url`,`url` 源采用托管 `marketplace.json` 的地址。每个源形状在[市场参考](/docs/zh-CN/plugins/marketplace-reference)中。

82 

83如果市场是私有 git 存储库,每个用户都需要对其有读取权限。git 市场的克隆在用户的机器上使用 git 运行,使用存储的凭证且无提示。对于没有 git 主机账户的用户,请改用[播种](#seed-containers-and-ci)。

84 

85托管条目也会覆盖来自另一个源的同名市场条目或 `--plugin-dir` 副本:

86 

87* **市场**:托管市场条目替换具有相同名称的较低优先级条目,两个条目的字段不合并。

88* **`--plugin-dir` 副本**:`--plugin-dir` 为一个会话从本地目录加载插件。有关当该副本的名称与您的托管 `enabledPlugins` 命名的插件匹配时会发生什么,请参阅[名称冲突](/docs/zh-CN/plugins/loading#name-conflicts)。

89 

90Anthropic 的官方市场 `claude-plugins-official` 当 `enabledPlugins` 将其一个插件设置为 `true` 时不需要 `extraKnownMarketplaces` 条目。该 `name@claude-plugins-official` 条目在这些键应用的任何地方声明市场。如果您不启用其任何插件但仍想在每台机器上注册它,请给它一个显式条目,如[允许官方市场和您自己的](#allow-the-official-marketplace-and-your-own)所做的那样。

91 

92<h3 id="require-plugins-per-repository">

93 按存储库要求插件

94</h3>

95 

96要覆盖一个存储库的贡献者而不是整个车队,请在该存储库的 `.claude/settings.json` 中设置 `extraKnownMarketplaces` 和 `enabledPlugins`。`extraKnownMarketplaces` 条目仅在贡献者已信任的文件夹中应用,在不受信任的文件夹中 Claude Code 会无声地忽略它们:

97 

98* **交互式会话**:Claude Code 仅在贡献者接受该文件夹的[工作区信任对话](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)后注册市场。

99* **[非交互式 `-p` 运行](/docs/zh-CN/headless)** :条目仅在贡献者已交互式接受其信任的文件夹中应用,或您在 `~/.claude.json` 中设置其 `hasTrustDialogAccepted` 标志的文件夹中应用。

100 

101市场按相对路径列出的插件在存储库的 `extraKnownMarketplaces` 条目应用后从市场副本加载。市场条目指向外部源(例如插件自己的 GitHub 存储库)的插件不会仅从存储库的设置安装。每个贡献者看到 `Plugin "<name>" is enabled in project settings but isn't installed`,直到他们运行 `claude plugin install <name>@<marketplace> --scope project`,如[安装插件](/docs/zh-CN/plugins/install)所述。

102 

103如果您使用带有相对路径的本地 `directory` 或 `file` 源,路径相对于您的存储库的主检出解析。当您从 git worktree 运行 Claude Code 时,路径仍指向主检出,因此所有 worktree 共享相同的市场位置。

104 

105要推出具有依赖关系的插件包,请将包插件放在 `enabledPlugins` 中,如[插件依赖关系](/docs/zh-CN/plugins/dependencies)所述。

106 

107<h3 id="when-each-surface-applies-the-plugin-keys">

108 每个表面何时应用插件键

109</h3>

110 

111该表显示每种 Claude Code 会话何时从托管设置和存储库的 `.claude/settings.json` 应用 `extraKnownMarketplaces` 和 `enabledPlugins`。对于 Desktop 应用和 IDE 扩展,请参阅[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)。

112 

113| 表面 | 托管 `extraKnownMarketplaces` 和 `enabledPlugins` | 存储库 `.claude/settings.json` |

114| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------- |

115| 终端,交互式 | 在接收设置的每台机器上的会话开始时应用 | `extraKnownMarketplaces` 在信任后应用;`enabledPlugins` 在会话开始时应用 |

116| `-p` 和 CI | 在会话开始时应用,安装在后台运行 | 仅在受信任的文件夹中的 `extraKnownMarketplaces`;`enabledPlugins` 应用 |

117| 云会话 | 在 Anthropic 托管的环境中,仅服务器托管设置到达会话,它在安装插件之前等待它们。MDM 策略和托管设置文件保留在用户的机器上。对于自托管环境,请参阅[策略应用的位置和时间](/docs/zh-CN/managed-settings#where-and-when-a-policy-applies) | 请参阅[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)下的**云会话**选项卡 |

118 

119在 `-p` 或 CI 运行中,市场和插件在后台安装,因此插件可能在第一轮中丢失。设置 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL=1` 使运行在其第一个查询之前等待安装。

120 

121<h3 id="confirm-the-rollout">

122 确认推出

123</h3>

124 

125检查市场和插件是否到达机器或 CI 运行:

126 

127* **在一台机器上**:启动 Claude Code 并运行 `/plugin`。市场和插件被列出。

128* **在 CI 中**:使用 `--output-format stream-json --verbose` 运行 `claude -p`。`init` 事件在 `plugins` 下列出加载的插件。

129 

130<h2 id="seed-containers-and-ci">

131 为容器和 CI 播种

132</h2>

133 

134对于无法在运行时克隆的容器镜像和 CI 运行器,在构建时预填充插件目录并在 `CLAUDE_CODE_PLUGIN_SEED_DIR` 处指向它。Claude Code 在启动时注册播种的市场并从播种加载插件缓存,无需克隆。

135 

136播种也为没有 git 主机账户的用户服务。

137 

138<Note>

139 在 CI/CD 环境中,在从私有存储库安装插件之前配置 git 凭证助手。在 GitHub Actions 上,导出具有市场存储库读取权限的令牌作为 `GH_TOKEN`,然后运行 `gh auth setup-git`。默认工作流令牌只能访问工作流自己的存储库,因此另一个存储库中的私有市场需要个人访问令牌或应用令牌。

140</Note>

141 

142<Steps>

143 <Step title="在构建时安装到播种中">

144 设置 `CLAUDE_CODE_PLUGIN_CACHE_DIR` 为播种路径,以便市场和插件安装在那里而不是 `~/.claude/plugins`:

145 

146 ```bash theme={null}

147 CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/your-marketplace

148 CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install code-formatter@your-marketplace

149 ```

150 

151 播种的布局与 `~/.claude/plugins` 相同:`known_marketplaces.json`、`marketplaces/<name>/` 和 `cache/<marketplace>/<plugin>/<version>/`。您可以在与构建它不同的路径处挂载播种。

152 </Step>

153 

154 <Step title="在运行时指向播种">

155 在容器的环境中设置 `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed`。要使用多个播种,在 Unix 上用 `:` 分隔其路径,在 Windows 上用 `;` 分隔。Claude Code 使用包含给定市场或插件缓存的第一个播种。

156 </Step>

157 

158 <Step title="启用插件">

159 播种中的插件不会自动启用。为每个要加载的播种插件在托管设置或存储库的 `.claude/settings.json` 中设置 `enabledPlugins`。

160 </Step>

161</Steps>

162 

163要验证播种,在镜像中使用 `--output-format stream-json --verbose` 运行 `claude -p`。在 `init` 事件的 `plugins` 列表中,每个加载的插件的 `path` 在播种下,例如 `/opt/claude-seed/cache/your-marketplace/code-formatter/1.0.0`。

164 

165播种市场遵循这些规则:

166 

167* **只读**:Claude Code 从不写入播种并为播种市场强制 `autoUpdate` 关闭。

168* **播种条目优先**:在每次启动时,播种中声明的市场覆盖用户的同名条目。用户使用 `claude plugin disable` 选择退出播种插件,而不是通过删除市场。

169* **更新和删除失败**:`claude plugin marketplace update <name>` 和在播种市场上不带 `--scope` 的 `remove` 失败,并显示命名播种目录的消息。

170* **策略仍然适用**:[允许列表和阻止列表](#restrict-what-users-can-install)也检查播种市场的记录源。允许您构建播种的源。

171 

172对于没有出站 git 访问的车队,将播种与共享挂载上的 `directory` 或 `file` 市场源结合。也设置 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`,这也关闭[插件自动更新](/docs/zh-CN/plugins/loading#when-auto-update-runs)。如果代理可用,请参阅[代理配置](/docs/zh-CN/network-config#proxy-configuration)了解要设置的变量。

173 

174<h2 id="restrict-what-users-can-install">

175 限制用户可以安装的内容

176</h2>

177 

178托管 `strictKnownMarketplaces` 允许列表和 `blockedMarketplaces` 阻止列表决定插件可能来自哪些市场源。市场的源是 Claude Code 从中获取它的 git 存储库、URL 或本地路径。两个列表都匹配插件来自的市场的源,而不是该市场内的插件自己的条目。

179 

180对于常见的锁定,允许官方市场和您自己的,请参阅[允许官方市场和您自己的](#allow-the-official-marketplace-and-your-own)。将其与[`disableSideloadFlags`](#control-matrix)配对,以便用户无法从本地目录或 URL 加载插件。

181 

182两个列表在任何下载之前和会话开始时应用:

183 

184* **在下载之前**:当用户添加市场以及在每次安装、更新、刷新和自动更新时应用列表。

185* **在会话开始时**:列表再次应用于已安装的插件,因此已安装的插件其市场源不再匹配不加载。`/plugin` 将其列为 `Marketplace "<name>" is not in the allowed marketplace list` 或 `Marketplace "<name>" is blocked by enterprise policy`。

186 

187两个列表的执行位置取决于您在哪里设置它们:

188 

189* **claude.ai 管理控制台**:Claude Code 在[读取服务器托管设置](/docs/zh-CN/managed-settings#where-and-when-a-policy-applies)的会话中执行两个列表。claude.ai 也在您组织中的任何人从 git 存储库在 claude.ai 上添加新市场时检查它们,或从 Claude Desktop 应用外其 Code 选项卡的**自定义**中检查。这涵盖成员为自己的账户添加的市场和在[**组织设置 > 插件**](https://claude.ai/admin-settings/plugins)下为整个组织添加的市场。claude.ai 拒绝允许列表不允许或阻止列表命名的存储库。它不重新检查在您设置列表之前在任一位置添加的市场,也不检查上传的插件。

190* **托管设置文件、OS 级策略或其他托管源**:Claude Code 在读取该源的地方执行两个列表。claude.ai 不读取它。

191 

192虽然设置了任何允许列表,或阻止列表命名除[`skills-dir`](#blocklist-with-blockedmarketplaces)之外的任何源,Claude Code 找不到的市场的插件不加载。`/plugin` 为其显示策略错误而不是未找到错误。常见情况是市场的陈旧 `enabledPlugins` 条目,没有人注册。

193 

194<h3 id="control-matrix">

195 控制矩阵

196</h3>

197 

198该表列出每个插件策略键、它执行的内容以及它无法做的内容。

199 

200| 键 | 它执行的内容 | 它无法做的内容 |

201| :-------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------- |

202| `strictKnownMarketplaces` | 市场源的允许列表。`[]` 阻止每个源,包括官方市场。别名:`allowedMarketplaces` | 不注册市场、限制允许市场内的条目或阻止 `--plugin-dir` |

203| `blockedMarketplaces` | 市场源的阻止列表,在允许列表之前检查 | 不阻止已从不匹配的源注册的市场 |

204| `syncClaudeAiPlugins` | 设置 `false` 以停止 Claude Code 下载和加载为每个用户账户[从 claude.ai 同步](/docs/zh-CN/plugins/loading#synced-plugins)的插件。需要 Claude Code v2.1.273 或更高版本 | 不关闭一个同步插件。为此,在[`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins)中设置 `"<name>@synced": false` |

205| `enabledPlugins` | `true` 强制启用,`false` 在每个范围内阻止并隐藏插件 | 不安装其市场未注册或不允许的插件 |

206| `disableSideloadFlags` | 拒绝 `--plugin-dir`、`--plugin-url`、`--agents`、Agent SDK `plugins` 选项和非 SDK `--mcp-config` 在启动时,并以相同方式拒绝[`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables)变量中命名的文件夹 | 不限制 `.mcp.json`、`claude mcp add` 或 SDK 提供的服务器。将其与[`allowedMcpServers`](/docs/zh-CN/managed-mcp)配对 |

207| `disableCommandPluginSources` | 阻止具有 `command` 源的插件安装、更新或加载。`command` 源是其插件目录通过在机器上运行命令产生的源。未设置时,它采用 `allowManagedHooksOnly` 的值 | 不影响其他源类型 |

208| `allowManagedHooksOnly` | 限制哪些 hooks 运行。请参阅[`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) | 不信任用户自己启用的插件中的 hooks |

209| `strictPluginOnlyCustomization` | 阻止不来自插件、托管设置或 Claude Code 内置的技能、代理、hooks 和 MCP 服务器。设置 `true` 以覆盖所有四种类型,或 `skills`、`agents`、`hooks` 和 `mcp` 值的数组(例如 `["skills", "hooks"]`)以覆盖某些 | 不限制用户安装哪些插件。将其与 `strictKnownMarketplaces` 配对 |

210| `pluginSuggestionMarketplaces` | 其插件可能显示为安装建议的市场。请参阅[推荐插件](#recommend-plugins) | 不影响内置提示 |

211| `pluginTrustMessage` | 将您的文本附加到 `/plugin` 在插件安装之前显示的信任警告 | 不改变警告自己的文本 |

212| `allowedChannelPlugins` | 替换允许推送频道消息的默认插件列表。需要 `channelsEnabled: true` | 请参阅[限制哪些频道插件可以运行](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run) |

213| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](/docs/zh-CN/env-vars) | 停止交互式终端会话自动注册官方市场 | 不删除已注册的市场。允许列表和阻止列表在没有它的情况下门控相同的自动注册。在设置它的情况下启动一次的机器在您取消设置它后不会恢复自动注册 |

214 

215表中的每个键都是托管设置,除了 `enabledPlugins`、`syncClaudeAiPlugins` 和 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`:

216 

217* **`enabledPlugins`**:您可以在任何范围内设置它,托管设置锁定它。

218* **`syncClaudeAiPlugins`**:每个用户也可以在自己的用户或本地设置中设置它。请参阅其[设置参考中的范围](/docs/zh-CN/settings-reference#syncclaudeaiplugins)。

219* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`**:这是一个环境变量,您通过[关闭整个车队的更新](#turn-updates-off-for-the-whole-fleet)下显示的托管 `env` 块交付。

220 

221此处的每个设置键在[设置参考](/docs/zh-CN/settings-reference)中都有条目。

222 

223<h4 id="aliases-for-the-marketplace-keys">

224 市场键的别名

225</h4>

226 

227`strictKnownMarketplaces` 也可以拼写为 `allowedMarketplaces`,`extraKnownMarketplaces` 也可以拼写为 `additionalMarketplaces`。

228 

229* **版本**:别名需要 Claude Code v2.1.232 或更高版本,较旧的客户端忽略它们。在混合车队读取的文件中,保持规范名称。

230* **两个拼写都设置**:当文件设置两个拼写时,规范键的值应用。

231 

232<h3 id="allowlist-with-strictknownmarketplaces">

233 使用 `strictKnownMarketplaces` 的允许列表

234</h3>

235 

236将允许列表设置为这些源对象的列表。大多数条目完全匹配,`hostPattern` 和 `pathPattern` 条目作为正则表达式匹配,`github` 所有者通配符按所有者匹配:

237 

238* **`github`**:`{ "source": "github", "repo": "your-org/approved-plugins" }`,带可选的 `ref` 和 `path`。

239* **`github` 所有者通配符**:`{ "source": "github", "repo": "your-org/*" }` 匹配该所有者下的每个存储库。`*` 必须代表整个存储库名称。Claude Code 忽略诸如 `*/plugins` 和 `your-org/tools-*` 之类的条目作为无效,因此它们不匹配任何内容。需要 Claude Code v2.1.223 或更高版本。

240* **`git`**:`{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git" }`,带可选的 `ref` 和 `path`。

241* **`url`**:`{ "source": "url", "url": "https://plugins.example.com/marketplace.json" }`,带可选的 `headers`。

242* **`file` 和 `directory`**:`{ "source": "file", "path": "/opt/marketplace/marketplace.json" }` 或 `{ "source": "directory", "path": "/opt/marketplace/plugins" }`,带绝对路径。

243* **`hostPattern`**:`{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }`,与 `github`、`git` 和 `url` 源的主机匹配。该模式在主机名中的任何地方匹配,因此如所示用 `^` 和 `$` 锚定以匹配整个主机。`github` 源始终计为 `github.com`。对于开发人员创建自己的市场的 GitHub Enterprise Server 或 GitLab 主机,使用 `hostPattern` 条目。[GHES 页面](/docs/zh-CN/github-enterprise-server#allowlist-ghes-marketplaces-in-managed-settings)有工作示例。

244* **`pathPattern`**:`{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }`,与 `file` 和 `directory` 源的 `path` 匹配。该模式在路径中的任何地方匹配,因此以 `^` 开头以固定目录前缀。`".*"` 允许每个本地路径。

245* **`skills-dir`**:`{ "source": "skills-dir" }` 在设置允许列表时保持[技能目录插件](#keep-skills-directory-plugins-loading)加载,并不匹配任何市场。

246 

247<h4 id="how-entries-match">

248 条目如何匹配

249</h4>

250 

251`url` 条目在其 `url` 值上匹配;`headers` 不被比较。对于 `github` 和 `git` 条目,`repo` 或 `url`、`ref` 和 `path` 必须都匹配,或在两侧都不存在:

252 

253* 没有 `ref` 的条目不覆盖具有 `ref: "main"` 的源。

254* `your-org/your-marketplace` 的条目不覆盖克隆相同存储库的 `git` URL。

255* 尾部斜杠、`.git` 后缀或 `ssh://` 代替 `https://` 是不同的值。当市场可以通过多个 URL 克隆时,更喜欢 `hostPattern` 条目。

256 

257所有者通配符条目遵循 `ref` 的确切规则,并匹配存储库内的任何 `path`,除非条目固定一个。通配符匹配在允许列表上区分大小写。

258 

259<h4 id="keep-skills-directory-plugins-loading">

260 保持技能目录插件加载

261</h4>

262 

263技能目录插件是用户在 `~/.claude/skills/` 或项目的 `.claude/skills/` 下保持的插件,在带有 `.claude-plugin/plugin.json` 的文件夹中。如果您设置任何没有 `{ "source": "skills-dir" }` 条目的允许列表,它们停止加载。普通[技能](/docs/zh-CN/skills),意思是没有该清单的 `SKILL.md`,继续加载。

264 

265<h4 id="marketplaces-hosted-on-claude-ai">

266 在 claude.ai 上托管的市场

267</h4>

268 

269允许列表和阻止列表通过其主机匹配[在 claude.ai 上托管的市场](/docs/zh-CN/plugins/install#add-from-claude-ai)。要允许或阻止一个,将与 `claude.ai` 匹配的 `hostPattern` 条目添加到 `strictKnownMarketplaces` 或 `blockedMarketplaces`。在允许列表上,这样的条目允许您组织的 claude.ai 市场和 claude.ai 默认市场,但不允许由成员自己的 claude.ai 上传组成的市场或其范围 claude.ai 未声明的市场。需要 Claude Code v2.1.273 或更高版本。

270 

271<h4 id="lock-every-source-out">

272 锁定每个源

273</h4>

274 

275空允许列表 `[]` 锁定每个市场源,包括官方市场。

276 

277此锁定不覆盖[从 claude.ai 同步](/docs/zh-CN/plugins/loading#synced-plugins)的插件,Claude Code 从每个用户的账户而不是从市场下载。要也停止那些,请在托管设置中将[`syncClaudeAiPlugins`](/docs/zh-CN/settings-reference#syncclaudeaiplugins)设置为 `false`,或在 claude.ai 上为您的组织关闭技能。

278 

279<h3 id="blocklist-with-blockedmarketplaces">

280 使用 `blockedMarketplaces` 的阻止列表

281</h3>

282 

283`blockedMarketplaces` 采用与[`strictKnownMarketplaces`](#allowlist-with-strictknownmarketplaces)相同的源对象,并首先检查,因此两个列表上的源被阻止。阻止列表匹配比允许列表匹配更宽:

284 

285* Git URL 被规范化,因此一个 `github.com` 存储库的 `git@` 和 `https://` 形式、`.git` 后缀和尾部斜杠都匹配相同的条目。

286* `github` 条目也阻止等效的 `git` URL,反之亦然。

287* 对于 `owner/*` 条目,所有者比较不区分大小写。

288* 没有 `ref` 或 `path` 的条目阻止它匹配的存储库的每个 ref 和 path。

289 

290此条目阻止一个 GitHub 所有者下的每个存储库:

291 

292```json theme={null}

293{

294 "blockedMarketplaces": [

295 { "source": "github", "repo": "untrusted-org/*" }

296 ]

297}

298```

299 

300`blockedMarketplaces` 中的 `url` 条目也在用户添加 Claude Code [克隆而不是获取](/docs/zh-CN/plugins/cli-reference#plugin-marketplace-add)的 `https://` 存储库 URL 时应用,例如裸 `github.com` 或 `gitlab.com` 存储库 URL。如果条目命名该 URL,用户无法添加它。匹配忽略 `.git` 后缀和用户在 `#` 后附加的任何 ref。需要 Claude Code v2.1.232 或更高版本。

301 

302此处的 `{ "source": "skills-dir" }` 条目停止[技能目录插件](#keep-skills-directory-plugins-loading)从 `~/.claude/skills/` 和项目的 `.claude/skills/` 加载。

303 

304仅命名该条目的阻止列表不计为活跃限制,因此它不[停止 Claude Code 找不到其市场的插件](#restrict-what-users-can-install)加载。

305 

306<h3 id="allow-the-official-marketplace-and-your-own">

307 允许官方市场和您自己的

308</h3>

309 

310大多数组织允许官方市场和他们自己的,并注册两者,以便每台机器都有它们。此托管设置策略允许两个市场,注册两者,强制启用两个插件,并拒绝 `--plugin-dir`:

311 

312```json theme={null}

313{

314 "strictKnownMarketplaces": [

315 { "source": "github", "repo": "anthropics/claude-plugins-official" },

316 { "source": "github", "repo": "your-org/*" },

317 { "source": "skills-dir" }

318 ],

319 "extraKnownMarketplaces": {

320 "claude-plugins-official": {

321 "source": { "source": "github", "repo": "anthropics/claude-plugins-official" }

322 },

323 "your-marketplace": {

324 "source": { "source": "github", "repo": "your-org/your-marketplace" }

325 }

326 },

327 "enabledPlugins": {

328 "code-formatter@your-marketplace": true,

329 "deploy-helper@your-marketplace": true

330 },

331 "disableSideloadFlags": true

332}

333```

334 

335在具有此策略的机器上,添加列表外的任何源,例如 `/plugin marketplace add https://example.com/other-marketplace.git`,失败,消息包含 `is blocked by enterprise policy` 后跟允许的源。`claude --plugin-dir ./x` 以命名 `disableSideloadFlags` 的消息退出。

336 

337`{ "source": "skills-dir" }` 条目在此允许列表下保持[技能目录插件](#keep-skills-directory-plugins-loading)加载。删除该条目,它们停止加载。

338 

339使用显式 `extraKnownMarketplaces` 条目注册两个市场,如此策略所做的那样,而不是依赖允许列表或官方市场注册自己:

340 

341* **允许列表不注册任何内容**:`extraKnownMarketplaces` 条目注册,它本身必须通过允许列表。Claude Code 拒绝注册其源允许列表不匹配的托管市场。

342* **官方市场仅在交互式终端会话中注册自己**:即使在那里,它也仅在允许列表允许时注册。`-p` 运行或附加到云会话的终端从不注册它。

343* **阻止的尝试被记住**:如果机器曾在阻止官方市场的策略下运行,Claude Code 记录阻止的尝试,并在策略更改后不重试。`[]` 锁定是一个这样的策略。该机器仅通过 `extraKnownMarketplaces` 条目(例如此策略中的条目)、其一个插件的 `enabledPlugins` 条目或手动 `/plugin marketplace add` 再次注册它。

344 

345<h2 id="set-update-policy">

346 设置更新策略

347</h2>

348 

349您可以按市场、整个车队或通过发布频道按用户组设置更新策略。

350 

351<h3 id="turn-auto-update-on-or-off-per-marketplace">

352 按市场打开或关闭自动更新

353</h3>

354 

355插件自动更新在启动后在后台为打开它的市场运行。有关默认打开哪些市场,请参阅[自动更新何时运行](/docs/zh-CN/plugins/loading#when-auto-update-runs)。要为车队决定,在托管 `extraKnownMarketplaces` 条目上设置 `"autoUpdate": true` 或 `false`:

356 

357* 如果托管条目设置字段,Claude Code 拒绝用户的 `/plugin` 切换,错误以 `Auto-update for '<name>' is set by` 开头。

358* 如果托管条目保留字段未设置,用户的切换持续。

359 

360<h3 id="turn-updates-off-for-the-whole-fleet">

361 关闭整个车队的更新

362</h3>

363 

364要关闭每个市场的插件自动更新,在托管 `env` 块中设置 `DISABLE_AUTOUPDATER`,如此示例所做的那样。相同的变量也停止 Claude Code 自己的更新:

365 

366```json theme={null}

367{

368 "env": {

369 "DISABLE_AUTOUPDATER": "1"

370 }

371}

372```

373 

374要停止 Claude Code 自己的更新但保持插件自动更新,将 `"FORCE_AUTOUPDATE_PLUGINS": "1"` 添加到相同的块。其他[停止插件自动更新的环境变量](/docs/zh-CN/plugins/loading#when-auto-update-runs)以相同的方式工作。

375 

376`DISABLE_AUTOUPDATER` 不覆盖具有[`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)的插件。Claude Code 每个会话重新运行每个启用的命令,并在其更改时安装输出。有关停止那些运行的内容,请参阅[命令源何时重新运行](/docs/zh-CN/plugins/loading#when-a-command-source-re-runs)。

377 

378<h3 id="assign-release-channels-to-user-groups">

379 为用户组分配发布频道

380</h3>

381 

382要运行稳定和早期访问频道,托管两个指向相同插件的不同 ref 的市场。然后通过单独的端点托管设置或网关策略为每个用户组提供自己的市场。来自管理控制台的服务器托管设置[应用于组织中的每个用户](/docs/zh-CN/server-managed-settings#current-limitations),因此它们无法为不同的组分配不同的设置。

383 

384* 将单独的[端点托管设置](/docs/zh-CN/managed-settings#delivery-mechanisms)(例如托管设置文件或 MDM 配置文件)部署到每个组的设备。要检查按组文件或配置文件是否在也有组织范围源的设备上应用,请参阅[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)。

385* 为每个组定义一个[Claude 应用网关策略](/docs/zh-CN/claude-apps-gateway-config#managed)。网关应用第一个匹配规则适合用户的策略,因此订购策略以便每个用户到达其组的策略。该策略的 `extraKnownMarketplaces` 映射不与任何其他策略的合并,因此在其中列出组需要的每个市场,而不仅仅是其频道市场。

386 

387使用任一机制,稳定组接收此配置:

388 

389```json theme={null}

390{

391 "extraKnownMarketplaces": {

392 "stable-tools": {

393 "source": { "source": "github", "repo": "your-org/stable-tools" }

394 }

395 }

396}

397```

398 

399早期访问组接收 `latest-tools` 代替。要设置两个市场,请参阅[运行发布频道](/docs/zh-CN/plugins/host-marketplace#run-release-channels)。

400 

401<h2 id="recommend-plugins">

402 推荐插件

403</h2>

404 

405市场所有者可以将 `relevance` 信号附加到条目,以便 Claude Code 在项目匹配时建议插件。

406 

407来自市场的建议仅在其在用户的机器上注册、您在托管设置中的 `pluginSuggestionMarketplaces` 中列出其名称,并且您在相同策略中声明其源时出现。声明源作为市场的 `extraKnownMarketplaces` 条目或允许列表条目。官方市场仅需要名称。请参阅[在托管设置中启用建议](/docs/zh-CN/plugins/relevance#enable-suggestions-in-managed-settings)。

408 

409<h2 id="audit-and-review">

410 审计和审查

411</h2>

412 

413OpenTelemetry 事件和 Analytics API 告诉您您的车队安装和运行什么。

414 

415有关插件可以在机器上运行什么以及每个信任层允许什么,在批准市场之前阅读[插件安全](/docs/zh-CN/plugins/security)。

416 

417<h3 id="opentelemetry-events">

418 OpenTelemetry 事件

419</h3>

420 

421`claude_code.plugin_installed` 记录每次安装,`claude_code.plugin_loaded` 记录每个启用的插件在会话开始时。除非您设置 `OTEL_LOG_TOOL_DETAILS=1`,否则两个事件都删除或省略第三方插件和市场名称,如[您的后端中的删除插件名称](/docs/zh-CN/plugins/measure#redacted-plugin-names-in-your-backend)所示。字段列表在[插件已安装事件](/docs/zh-CN/monitoring-usage#plugin-installed-event)和[插件已加载事件](/docs/zh-CN/monitoring-usage#plugin-loaded-event)下。

422 

423<h3 id="analytics-api">

424 Analytics API

425</h3>

426 

427在 Enterprise 计划上,`GET /v1/organizations/analytics/plugins` 返回跨 Claude Code 和 Cowork 的每个插件、每天的安装和调用计数。您可以按用户或 RBAC 组对计数进行分组。到达 Anthropic 而没有插件名称的插件活动出现在一个聚合 `third-party` 行中。请参阅[端点参考](https://platform.claude.com/docs/en/api/admin/analytics/plugins/list)和[以编程方式访问数据](/docs/zh-CN/analytics#access-data-programmatically)了解它需要的键。

428 

429<h2 id="plan-for-what-managed-settings-can’t-enforce">

430 规划托管设置无法执行的内容

431</h2>

432 

433这些来自安全审查的请求在当前设置架构中没有专用键。最接近的现有控制是:

434 

435* **按用户或按组目标**:每个插件键应用于接收设置的每个用户。服务器托管设置为每个组织交付一个配置。对于按组策略,使用单独的端点托管设置或网关策略,如[为用户组分配发布频道](#assign-release-channels-to-user-groups)下所述。

436* **限制允许市场内的条目**:允许列表匹配市场源。要从允许的市场阻止一个插件,在托管 `enabledPlugins` 中将其设置为 `false`。

437* **隐藏 `/plugin`**:没有键禁用命令。最接近的等效项结合仅命名您的市场的允许列表、您提供的插件的托管 `enabledPlugins` 条目和 `disableSideloadFlags`。

438* **通过允许列表门控 `--plugin-dir`**:允许列表不覆盖 `--plugin-dir`。`disableSideloadFlags` 覆盖。

439* **通过这些键执行 claude.ai 插件切换**:[**组织设置 > 插件和技能**](https://claude.ai/admin-settings/skills?tab=inventory)不设置此页面上的键。成员和您的组织在那里打开的内容作为[同步插件](/docs/zh-CN/plugins/loading#synced-plugins)到达 CLI,它们有自己的控制。

440 

441<h2 id="troubleshoot-policy">

442 策略故障排除

443</h2>

444 

445如果插件策略在机器上的行为不符合预期,首先检查这些症状:

446 

447* **托管文件未解析**:当 `managed-settings.json` 不是有效的 JSON 时,Claude Code 拒绝启动并打印[命名文件的错误](/docs/zh-CN/errors#managed-settings-document-could-not-be-parsed)。解析但有一个无效条目的文件保持其策略的其余部分。请参阅[托管设置中的无效条目](/docs/zh-CN/managed-settings#invalid-entries-in-managed-settings)。

448* **托管源未加载**:运行 `/status` 并在 `Setting sources` 行中查找 `Enterprise managed settings`。如果缺少,源未加载。

449* **用户报告 `blocked by enterprise policy`**:消息命名市场或其源。对于允许列表,它也列出允许的源。面向用户的条目在[插件故障排除](/docs/zh-CN/plugins/troubleshooting)上。

450* **用户在 `~/.claude/settings.json` 中禁用的插件仍然加载**:另一个设置源重新启用它,例如强制启用它的托管 `enabledPlugins` 条目。`/plugin` 和 `claude plugin list` 显示 `Disabled in ~/.claude/settings.json but still loads` 与该设置源。

451 

452<h2 id="next-steps">

453 后续步骤

454</h2>

455 

456* [市场参考](/docs/zh-CN/plugins/marketplace-reference#marketplace-sources):`extraKnownMarketplaces`、`strictKnownMarketplaces` 和 `blockedMarketplaces` 接受的 `source` 值

457* [托管和维护市场](/docs/zh-CN/plugins/host-marketplace):运行您的策略指向的市场

458* [插件安全和信任](/docs/zh-CN/plugins/security):插件可以在机器上做什么以及在安装前如何审查一个

459* [服务器托管设置](/docs/zh-CN/server-managed-settings):从 claude.ai 管理控制台交付这些键

460* [插件故障排除](/docs/zh-CN/plugins/troubleshooting#blocked-by-your-organization):策略阻止用户时看到的消息

plugins/overview.md +142 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 插件概览

6 

7> 了解什么是 Claude Code 插件,何时需要使用插件而不是独立的 skill 或 MCP 服务器,以及应该阅读哪个页面来安装或创建插件。

8 

9Claude Code 插件是一个目录,包含 skills、agents、hooks、MCP 服务器或其他组件,Claude Code 将其作为一个单元安装和加载。大多数插件来自市场,市场是一个列出插件及其获取位置的目录。您也可以从某人提供给您的文件夹加载插件,或者[构建您自己的插件](/docs/zh-CN/plugins/create)。

10 

11<Note>

12 如果您使用 claude.ai 聊天或 Cowork 而不是 Claude Code,请参阅 [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)。

13</Note>

14 

15要立即尝试插件,请在 Claude Code 终端会话中运行 `/plugin`,并从**发现**选项卡安装一个插件,该选项卡列出了来自 Anthropic 官方市场和您添加的任何市场的插件。从那里:

16 

17* [安装和管理插件](/docs/zh-CN/plugins/install):完整的安装步骤、作用域和其他界面

18* [创建插件](/docs/zh-CN/plugins/create):构建您自己的插件

19* [决定您是否需要插件](#decide-whether-you-need-a-plugin):插件是否是您想要的正确工具

20 

21<h2 id="understand-what-a-plugin-is">

22 了解什么是插件

23</h2>

24 

25插件是一个组件目录,通常带有清单。清单是位于 `.claude-plugin/plugin.json` 的 JSON 文件,它给插件命名,并可以添加版本、描述和其他[元数据](/docs/zh-CN/plugins/manifest-reference)。这些组件是插件添加到 Claude Code 的内容,例如:

26 

27* [**Skills**](/docs/zh-CN/plugins/components#skills):`SKILL.md` 指令,Claude 在相关时加载,您也可以作为命令运行

28* [**Agents**](/docs/zh-CN/plugins/components#agents):Claude 可以委派给的子代理定义

29* [**Hooks**](/docs/zh-CN/plugins/components#hooks):Claude Code 在其生命周期中的特定点运行的命令,例如每次编辑后

30* [**MCP 服务器**](/docs/zh-CN/plugins/components#mcp-servers):工具服务器,Claude Code 在启用插件时连接到

31 

32此图显示了一个名为 `my-plugin` 的插件,其中包含这些组件中的每一个,以及插件加载后您从每个文件获得的内容。

33 

34<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="两列图表,由五个直箭头连接。左侧是名为 my-plugin 的插件目录,包含 .claude-plugin/plugin.json 处的清单、skills/review/SKILL.md、agents/reviewer.md、hooks/hooks.json、.mcp.json 和其他组件。右侧是每个文件在您的会话中提供的内容:清单设置插件名称 my-plugin;skill 作为 /my-plugin:review 运行;agent 文件是 Claude 可以委派给的子代理;hooks 文件包含在生命周期事件上运行的 hooks;.mcp.json 添加了一个 MCP 服务器,为 Claude 提供工具。" width="760" height="336" data-path="images/plugin-directory.svg" />

35 

36<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory-dark.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=17ee2bd45b63154fcc148ae1d1f736d8" className="hidden dark:block" alt="两列图表,由五个直箭头连接。左侧是名为 my-plugin 的插件目录,包含 .claude-plugin/plugin.json 处的清单、skills/review/SKILL.md、agents/reviewer.md、hooks/hooks.json、.mcp.json 和其他组件。右侧是每个文件在您的会话中提供的内容:清单设置插件名称 my-plugin;skill 作为 /my-plugin:review 运行;agent 文件是 Claude 可以委派给的子代理;hooks 文件包含在生命周期事件上运行的 hooks;.mcp.json 添加了一个 MCP 服务器,为 Claude 提供工具。" width="760" height="336" data-path="images/plugin-directory-dark.svg" />

37 

38对于插件可以包含的每种组件类型,以及每种的示例,请参阅[插件组件](/docs/zh-CN/plugins/components)。要查看每个部分在插件目录中的位置,请使用该页面上的[插件浏览器](/docs/zh-CN/plugins/components#explore-the-plugin-directory)。

39 

40<h3 id="decide-whether-you-need-a-plugin">

41 决定您是否需要插件

42</h3>

43 

44Skills、子代理、hooks 和 MCP 服务器都可以独立工作,无需插件。例如,您在 `~/.claude/skills/` 中保存的 skill 在您计算机上的每个项目中都可用。要单独设置其中一个,请参阅 [Skills](/docs/zh-CN/skills)、[Subagents](/docs/zh-CN/sub-agents)、[Hooks](/docs/zh-CN/hooks-guide) 或 [MCP](/docs/zh-CN/mcp)。

45 

46当您想将多个 skills、子代理、hooks 或 MCP 服务器打包为一个单元时,请使用插件。安装一个以获得某人构建的设置,只需一个命令和来自其市场的更新。创建一个以将您自己的设置提供给团队成员,在许多项目中安装它,或发布版本化的发布版本。

47 

48<h3 id="what-an-enabled-plugin-adds-to-your-sessions">

49 启用的插件为您的会话添加的内容

50</h3>

51 

52启用的插件是每个会话的一部分,而不仅仅是您使用它的会话。这有几个后果值得在安装之前了解:

53 

54* **上下文和使用情况**:对于每个 skill、agent 和 [Claude 可以自行调用](/docs/zh-CN/skills#control-who-invokes-a-skill)的命令,名称和描述在每个回合都在 Claude 的上下文中,以便 Claude 知道它存在。这些令牌计入您的使用情况,并在[上下文窗口](/docs/zh-CN/context-window)中留下更少的空间,即使在插件中没有任何内容运行的会话中也是如此。skill 或 agent 的完整文本仅在使用时加载。插件的 MCP 服务器每个回合添加的内容遵循 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)。

55* **进程**:插件定义的 MCP 服务器在启用它的每个会话旁边运行,其 hooks 在其事件处触发。

56* **权限**:插件运行的内容以您的身份运行。有关首先要审查的内容,请参阅[插件安全和信任](/docs/zh-CN/plugins/security)。

57 

58您可以在每个阶段检查插件的占用空间:

59 

60* **安装前**:从 `/plugin` 中的**市场**选项卡打开插件。Anthropic 官方市场中的插件在那里显示**上下文成本**估计。

61* **安装后**:[测量插件成本](/docs/zh-CN/plugins/measure#measure-what-a-plugin-costs)显示如何读取插件的占用空间,**已安装**选项卡的**最近未使用**组列出了您可以关闭的插件。

62* **在不卸载的情况下停止它**:使用 `/plugin` 禁用插件,或在您的 shell 中使用 `claude plugin disable`。请参阅[管理已安装的插件](/docs/zh-CN/plugins/install#manage-installed-plugins)。

63 

64<h2 id="get-plugins-from-a-marketplace">

65 从市场获取插件

66</h2>

67 

68市场是一个存储库或目录,具有 `.claude-plugin/marketplace.json` 文件,该文件列出插件及其获取位置。它是一个目录,而不是托管的商店。您添加一次市场,然后按名称从中安装插件,例如 `commit-commands@claude-plugins-official`。

69 

70<Note>

71 插件市场不是 [Claude Marketplace](https://claude.com/marketplace)。Claude Marketplace 是 claude.com/marketplace 上的网站,您可以在其中浏览插件、连接器、合作伙伴产品和服务合作伙伴。它不是您使用 `/plugin marketplace add` 添加的市场。

72</Note>

73 

74Claude Code 在您第一次启动交互式终端会话时添加 Anthropic 的官方市场,除非[托管策略](/docs/zh-CN/plugins/org#allow-the-official-marketplace-and-your-own)阻止它。Claude Code 不会自行添加任何其他市场,包括 Anthropic 的社区和演示市场。要区分三个 Anthropic 市场,请阅读 [Anthropic 的市场](/docs/zh-CN/plugins/anthropic-marketplaces)。要查看官方市场列出的内容,请在会话中打开 `/plugin` 的**发现**选项卡,或浏览 [Claude Marketplace](https://claude.com/marketplace/plugins)。

75 

76此图显示了从市场到您的会话的路径。市场列出一个插件,您安装该插件,Claude Code 加载其组件。

77 

78<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugins-model.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=4196344954b7c2e27fc0bd6a9a1113a1" className="dark:hidden" alt="市场路径的图表,分为三个框,从左到右。市场是插件的目录,列出一个插件。插件是一个作为单元安装的目录,包含 skills、agents、hooks、MCP 服务器和其他组件。您将插件安装到 Claude Code 中,它加载其组件。" width="760" height="252" data-path="images/plugins-model.svg" />

79 

80<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugins-model-dark.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f6cdefe1fc05daf3b253d26e9f3f70f6" className="hidden dark:block" alt="市场路径的图表,分为三个框,从左到右。市场是插件的目录,列出一个插件。插件是一个作为单元安装的目录,包含 skills、agents、hooks、MCP 服务器和其他组件。您将插件安装到 Claude Code 中,它加载其组件。" width="760" height="252" data-path="images/plugins-model-dark.svg" />

81 

82[安装和管理插件](/docs/zh-CN/plugins/install#install-a-plugin)有您运行 Claude Code 的每个位置的安装步骤。在您开发插件时,您不需要市场:使用 `--plugin-dir` 直接从其文件夹加载它,如[在没有市场的情况下开发](/docs/zh-CN/plugins/create#develop-without-a-marketplace)所示。

83 

84<h3 id="make-an-installed-plugin-available-in-your-session">

85 在您的会话中使您安装的插件可用

86</h3>

87 

88在您安装的插件为您提供可以运行的 skill 之前,它必须存在于以下每个层中:

89 

90* **设置**:您的设置列出您添加的市场和启用的插件。

91* **磁盘**:`~/.claude/plugins/` 保存 Claude Code 已获取和安装的内容。

92* **会话**:插件在启动时加载,或当您[重新加载插件](/docs/zh-CN/plugins/loading#check-which-stage-a-plugin-reached)时加载。

93 

94阅读[插件加载参考](/docs/zh-CN/plugins/loading)了解每个层的规则,包括哪个设置文件优先以及文件在磁盘上的位置。

95 

96<h2 id="tell-anthropic’s-marketplaces-from-third-party-ones">

97 区分 Anthropic 的市场和第三方市场

98</h2>

99 

100市场的名称将其放在三个层级之一中。Claude Code 仅接受来自 `github.com/anthropics/` 存储库的官方和社区名称:

101 

102* **官方**:具有 Anthropic [官方市场名称](/docs/zh-CN/plugins/security#official-marketplace-names)之一的市场,包括 `claude-plugins-official` 和演示市场 `claude-code-plugins`。

103* **社区**:具有 Anthropic 社区名称之一的市场,例如 `claude-community`。[按名称识别 Anthropic 的市场](/docs/zh-CN/plugins/security#marketplace-tiers)列出了它们。

104* **第三方**:所有其他市场。您的同事或您的组织发布的市场是第三方。

105 

106无论层级如何,您安装的插件都可以使用您的用户权限运行代码。阅读[插件安全和信任](/docs/zh-CN/plugins/security)了解如何在安装插件之前审查它。

107 

108通过[托管设置](/docs/zh-CN/settings#settings-files),组织可以允许列表或阻止市场、强制安装插件并关闭仅会话加载。阅读[为您的组织管理插件](/docs/zh-CN/plugins/org)了解这些控制。

109 

110<h2 id="understand-install-scopes">

111 了解安装作用域

112</h2>

113 

114当您安装插件时,您选择一个作用域,作用域决定谁启用了该插件:

115 

116* **用户作用域**:在此计算机上的每个项目中为您启用

117* **项目作用域**:通过提交的 `.claude/settings.json` 为在此存储库中工作的每个人启用。每个协作者仍然[在自己的计算机上安装它](/docs/zh-CN/plugins/loading#enabled-in-project-settings-but-not-installed)

118* **本地作用域**:仅在此存储库中为您启用

119 

120您在终端、桌面应用的本地会话或 VS Code 扩展中以用户作用域安装的插件在该计算机上的其他两个中可用,因为所有三个都读取相同的设置文件。有关如何选择一个的信息,请参阅[选择安装作用域](/docs/zh-CN/plugins/install#choose-an-install-scope)。

121 

122云会话(包括浏览器中 claude.ai/code 中的会话)不加载本地设置中的插件。有关终端、VS Code 和桌面应用中的安装步骤,以及云会话加载的内容,请参阅[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)。

123 

124<Note>

125 相同的插件格式也在 claude.ai 和 Cowork 上安装,其中加载了不同的组件集。对于这些界面,请参阅 claude.com 上的 [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)。

126</Note>

127 

128<h2 id="next-steps">

129 后续步骤

130</h2>

131 

132大多数人首先从 Anthropic 的官方市场安装插件,Claude Code 在您第一次启动交互式终端会话时添加该市场。在终端会话中运行 `/plugin` 来浏览它,或按照[安装和管理插件](/docs/zh-CN/plugins/install),其中也涵盖了桌面应用和 VS Code。要在打开 Claude Code 之前查看该市场中的内容,请在网络上浏览 [Claude Marketplace](https://claude.com/marketplace/plugins)。

133 

134要构建您自己的,[创建插件](/docs/zh-CN/plugins/create)从空目录开始,以工作插件结束。

135 

136安装或构建插件后,这些页面涵盖接下来的内容:

137 

138* **分享您构建的内容**:[发布和分发插件](/docs/zh-CN/plugins/publish)

139* **检查它是否有效和被使用**:[使用 evals 测试插件](/docs/zh-CN/plugin-evals)和[测量插件成本和使用情况](/docs/zh-CN/plugins/measure)

140* **为您的团队运行市场**:[创建市场](/docs/zh-CN/plugins/create-marketplace),然后[托管和维护市场](/docs/zh-CN/plugins/host-marketplace)

141* **为组织设置插件策略**:[为您的组织管理插件](/docs/zh-CN/plugins/org)

142* **修复问题**:[插件故障排除](/docs/zh-CN/plugins/troubleshooting)

plugins/publish.md +210 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 发布和分发插件

6 

7> 通过您自己的市场或 Anthropic 的社区市场发布 Claude Code 插件,包括发布前检查清单以及用户如何获取更新。

8 

9发布 Claude Code 插件意味着在市场中列出它,市场是一个 JSON 目录,列出插件及其获取位置,这样其他人可以按名称安装它并接收您的更新。您可以运行自己的市场或将您的插件提交到 Anthropic 的社区市场。要在不发布的情况下共享插件,请将插件的目录或其 `.zip` 发送给人们以供他们自己加载。

10 

11本页面适用于已准备好共享的工作插件的作者。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **您的插件还未完成**:从[创建插件](/docs/zh-CN/plugins/create)开始

17 * **您维护的 CLI 或 SDK 在官方市场中有插件**:请参阅[从您的 CLI 推荐您的插件](/docs/zh-CN/plugins/cli-hints)

18</Note>

19 

20从[选择如何分发](#choose-how-to-distribute)开始,比较分发选项。如果您已经知道您的路线,请转到[为发布准备您的插件](#prepare-your-plugin-for-release),然后按照您的路线部分了解要告诉用户什么以及他们如何接收您的更新。

21 

22<h2 id="choose-how-to-distribute">

23 选择如何分发

24</h2>

25 

26根据谁需要安装插件来选择分发选项:

27 

28| 路线 | 谁可以安装 | 您需要什么 | 用户是否自动获取您的更新? |

29| :------------------------------------------------------ | :-------------------------------------------- | :----------------------------------------------------------- | :------------ |

30| [无市场](#share-a-plugin-without-a-marketplace) | 您发送插件文件夹或其 `.zip` 的人 | 插件的文件夹 | 无。他们加载您发送的副本 |

31| [您自己的市场](#publish-through-your-own-marketplace) | 任何可以访问存储库的人,可以是您的团队可以克隆的私有存储库 | 一个 git 存储库或其他具有列出您的插件的 `.claude-plugin/marketplace.json` 的主机 | 关闭 |

32| [Anthropic 的社区市场](#submit-to-the-community-marketplace) | 任何添加 `anthropics/claude-plugins-community` 的人 | 通过插件目录提交表单的提交 | 关闭 |

33 

34自动更新是用户端的每个市场设置,在后台获取新版本。

35 

36<h2 id="prepare-your-plugin-for-release">

37 为发布准备您的插件

38</h2>

39 

40名称、版本、验证和从市场安装决定了发布是否对安装它的人有效。在第一次发布前检查它们,以及在之后的每次发布前再次检查。

41 

42<Steps>

43 <Step title="选择永久名称">

44 用户通过 `name@marketplace` 安装、启用和配置您的插件,因此重命名的插件对每个现有安装都是不同的插件。选择一个 kebab-case 名称,例如 `deploy-helper`,因为 `claude plugin validate` 会对其他形式发出警告,并将其视为永久的。在 `plugin.json` 中设置 `displayName` 以获取用户看到的标签。

45 </Step>

46 

47 <Step title="决定如何版本化">

48 如果您在 `plugin.json` 中设置 `version` 并稍后推送提交而不更改它,`claude plugin update` 会打印 `<name> is already at the latest version (1.0.0).`,用户保留旧副本。要么在每次发布时增加 `version`,要么在 git 托管的市场中省略它,以便 Claude Code 改用提交 SHA。请参阅[版本和更新](/docs/zh-CN/plugins/loading#versions-and-updates)。

49 </Step>

50 

51 <Step title="验证">

52 在您的 shell 中,运行 `claude plugin validate --strict ./your-plugin`。干净的运行会打印 `✔ Validation passed`。

53 

54 * **在 CI 中**:保持 `--strict`,它也会因为警告(例如未知的清单字段或缺少 `version`)而以退出代码 1 失败运行。如果您在上一步中选择省略 `version`,则删除 `--strict`。

55 * **路径**:验证报告不以 `./` 开头的组件路径。在 hook 命令和 MCP 服务器配置中,将文件引用为 `${CLAUDE_PLUGIN_ROOT}/...`。请参阅[路径规则](/docs/zh-CN/plugins/manifest-reference#path-rules)。

56 </Step>

57 

58 <Step title="从本地市场安装它">

59 在您的 shell 中,使用 `claude plugin marketplace add ./path-to-marketplace` 添加列出插件的本地市场,从中安装插件,并启动会话以确认它加载。

60 

61 * 对于最小的有效市场,请参阅[创建市场](/docs/zh-CN/plugins/create-marketplace)。

62 * 要了解安装是加载您的源目录还是缓存副本,请参阅[就地和复制的插件](/docs/zh-CN/plugins/loading#in-place-and-copied-plugins)。

63 </Step>

64 

65 <Step title="填写用户看到的元数据">

66 在 `plugin.json` 中设置 `description`、`author`、`homepage` 和 `repository`,并在插件根目录添加 `README.md`。`homepage` 必须解析为 URL。[清单参考](/docs/zh-CN/plugins/manifest-reference#fields)列出了每个字段。

67 </Step>

68 

69 <Step title="运行您的 eval 套件">

70 如果您有 eval 套件,在您的 shell 中运行 `claude plugin eval`。它运行插件的测试用例并对结果进行评分,这在您更改插件时捕获回归。请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)。

71 </Step>

72</Steps>

73 

74<h2 id="share-a-plugin-without-a-marketplace">

75 不使用市场共享插件

76</h2>

77 

78如果插件在 git 存储库中,人们可以克隆它并加载检出,或从他们的 shell 启动 Claude Code,使用 `--plugin-url` 指向您附加到发布的 `.zip`。要获取您的下一个版本,他们拉取或再次下载。如果它不在存储库中,请将目录或其 `.zip` 发送给他们。他们可以通过以下两种方式之一加载它:

79 

80* **对于一个会话**:他们从他们的 shell 启动 Claude Code,使用 `claude --plugin-dir ./deploy-helper`,其中路径是克隆、解压的文件夹或 `.zip` 本身。请参阅[为一个会话加载插件的标志](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)。

81* **对于每个会话**:他们将插件目录(带有其 `.claude-plugin/plugin.json`)移到 `~/.claude/skills/` 下,以便 Claude Code [在每个会话中加载它](/docs/zh-CN/plugins/loading#find-where-a-plugin-came-from)。

82 

83将 `.claude-plugin/marketplace.json` 添加到同一存储库是让人们按名称安装和使用命令更新的方式;请参阅[通过您自己的市场发布](#publish-through-your-own-marketplace)。

84 

85<h3 id="ship-a-plugin-with-your-own-tool">

86 使用您自己的工具发布插件

87</h3>

88 

89如果您维护 CLI 或 SDK,在市场中发布插件,并让您的安装程序或安装后消息运行或打印用户需要的两个命令:`claude plugin marketplace add <source>`,然后 `claude plugin install <name>@<marketplace>`。对于当某人使用您的工具时的会话内发现,请参阅[从您的 CLI 推荐您的插件](/docs/zh-CN/plugins/cli-hints)。

90 

91<h2 id="publish-through-your-own-marketplace">

92 通过您自己的市场发布

93</h2>

94 

95您自己的市场是一个 `.claude-plugin/marketplace.json` 文件,列出您的插件,添加到 git 存储库。一旦文件在存储库中,插件就会发布,无需提交表单。您可以将文件保留在插件自己的存储库中或单独的存储库中。

96 

97<h3 id="add-the-marketplace-file-to-your-repository">

98 将市场文件添加到您的存储库

99</h3>

100 

101要从插件自己的存储库发布,请在 `.claude-plugin/` 中的 `plugin.json` 旁边保存市场文件,其中一个条目的 `source` 是 `"./"` 即存储库根目录。给条目与 `plugin.json` 相同的 `name`,根据[保持条目名称和清单名称相同](/docs/zh-CN/plugins/create-marketplace#keep-the-entry-name-and-the-manifest-name-the-same):

102 

103```json .claude-plugin/marketplace.json theme={null}

104{

105 "name": "your-marketplace",

106 "owner": { "name": "Your Name" },

107 "plugins": [

108 { "name": "deploy-helper", "source": "./" }

109 ]

110}

111```

112 

113在您的 shell 中,在推送前在存储库中运行 `claude plugin validate .` 以检查文件。

114 

115[创建市场](/docs/zh-CN/plugins/create-marketplace)涵盖了一个存储库中有多个插件的布局。

116 

117<h3 id="control-who-can-install">

118 控制谁可以安装

119</h3>

120 

121任何可以克隆存储库的人都可以从中安装,因此如果存储库是私有的,市场也是私有的。对于 git 存储库以外的主机,请参阅[托管市场](/docs/zh-CN/plugins/host-marketplace)。要到达整个公司的每个人,包括不使用 git 的人,请参阅[向整个公司推出](/docs/zh-CN/plugins/host-marketplace#roll-out-to-a-whole-company)。

122 

123<h3 id="tell-users-how-to-install">

124 告诉用户如何安装

125</h3>

126 

127告诉您的用户添加市场,然后从他们的 shell 安装插件,用您的替换源和名称:

128 

129* 添加市场一次:`claude plugin marketplace add your-org/your-marketplace`,其中参数是 GitHub `owner/repo` 简写、URL 或路径

130* 安装插件:`claude plugin install deploy-helper@your-marketplace`

131* 或从会话内同时执行两者:`/plugin install deploy-helper --marketplace your-org/your-marketplace`。需要 Claude Code v2.1.275 或更高版本。请参阅[在一个命令中添加市场和安装](/docs/zh-CN/plugins/install#add-a-marketplace-and-install-in-one-command)

132 

133<h3 id="ship-updates-to-users">

134 向用户发布更新

135</h3>

136 

137用户在请求时或为您的市场启用自动更新时接收发布:

138 

139* **按请求**:用户的 shell 中的 `claude plugin update deploy-helper@your-marketplace` 刷新市场,当您的插件版本更改时安装新副本

140* **自动更新**:默认为您的市场关闭。请参阅[启用自动更新](/docs/zh-CN/plugins/host-marketplace#turn-on-auto-update)。启用后,它在会话启动后的延迟后执行与 `claude plugin update` 相同的操作

141 

142[安装插件](/docs/zh-CN/plugins/install)涵盖用户端命令,[自动更新何时运行](/docs/zh-CN/plugins/loading#when-auto-update-runs)涵盖时间。

143 

144<h2 id="submit-to-the-community-marketplace">

145 提交到社区市场

146</h2>

147 

148Anthropic 的社区市场 `claude-community` 是列出通过插件目录提交表单提交的插件的公共市场。

149 

150用户在 Claude Code 会话中使用 `/plugin marketplace add anthropics/claude-plugins-community` 添加社区市场,并从中安装为 `@claude-community`。

151 

152关于社区市场与官方市场的区别,请参阅 [Anthropic 的市场](/docs/zh-CN/plugins/anthropic-marketplaces)。

153 

154要将您的插件提交到社区市场,请使用以下应用内表单之一:

155 

156* **claude.ai**:[claude.ai/admin-settings/directory/submissions/plugins/new](https://claude.ai/admin-settings/directory/submissions/plugins/new)

157* **Console**:[platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

158 

159claude.ai 表单需要 Team 或 Enterprise 组织以及目录权限,Owners 默认持有该权限。不属于 Team 或 Enterprise 组织的个人作者可以改用 Console 表单。

160 

161在您的 shell 中,在提交前本地运行 `claude plugin validate ./your-plugin`,用您的插件目录的路径替换 `./your-plugin`。当验证通过时,Claude Code 打印 `✔ Validation passed`,或如果有警告则打印 `✔ Validation passed with warnings`。警告不会使验证失败;添加 `--strict` 以将它们视为错误。

162 

163列出的插件出现在 [`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) 目录中,在几乎所有情况下都固定到特定的提交 SHA。

164 

165提交和您的插件出现在 `marketplace.json` 中之间可能会有延迟。要检查您的插件是否可安装,请在[社区目录](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json)中搜索其名称。

166 

167官方市场 `claude-plugins-official` 不通过这些表单接受提交。如果您与 Anthropic 合作伙伴联系合作,请询问他们关于官方市场列表的信息。

168 

169<h2 id="ship-updates-renames-and-removals">

170 发布更新、重命名和删除

171</h2>

172 

173<h3 id="release-a-new-version">

174 发布新版本

175</h3>

176 

177如果您通过您自己的市场发布,并且您的 `plugin.json` 设置了 `version`,请增加它并推送。运行 `claude plugin update` 或启用自动更新的用户然后接收新版本,如[向用户发布更新](#ship-updates-to-users)下所述。

178 

179<h3 id="tag-a-release">

180 标记发布

181</h3>

182 

183当其他插件在您的上声明版本范围时,在 git 中标记发布,因为这些范围针对标记进行解析。否则您不需要标记。

184 

185要标记,请从插件目录在您的 shell 中运行 `claude plugin tag`。它创建一个 `{name}--v{version}` 标记。添加 `--push` 以将标记发送到 `origin`。[`plugin tag` 参考](/docs/zh-CN/plugins/cli-reference#plugin-tag)列出了其标志。

186 

187<h3 id="rename-or-remove-a-plugin">

188 重命名或删除插件

189</h3>

190 

191永远不要更改已发布插件的 `name`。重命名后,已安装它的用户会丢失插件,因为他们的安装记录在旧名称下。您的市场文件中的 `renames` 条目会改为迁移它们。当您想要不同的标签时,更改 `displayName`。

192 

193如果重命名是不可避免的,请使用市场文件的 `renames` 映射,以便现有安装迁移而不是因为 [`Plugin "<name>" not found in marketplace`](/docs/zh-CN/plugins/troubleshooting#plugin-not-found-in-marketplace) 而失败。要从市场中删除插件,或获取完整的 `renames` 详细信息,请参阅托管页面上的[重命名或删除插件](/docs/zh-CN/plugins/host-marketplace#rename-or-remove-a-plugin)。[市场参考](/docs/zh-CN/plugins/marketplace-reference#top-level-fields)有该字段。

194 

195<h2 id="declare-dependencies">

196 声明依赖项

197</h2>

198 

199如果您的插件需要来自同一市场的另一个插件被启用,请在 `plugin.json` 的 `dependencies` 数组中列出它。每个条目是一个裸名称或具有 semver `version` 范围的对象。当用户安装您的插件时,Claude Code 也会安装并启用依赖项。

200 

201[插件依赖项](/docs/zh-CN/plugins/dependencies)涵盖范围语法、跨市场依赖项以及用户如何修剪他们不再需要的依赖项。

202 

203<h2 id="next-steps">

204 后续步骤

205</h2>

206 

207* [托管和维护市场](/docs/zh-CN/plugins/host-marketplace):发布新版本并让用户保持最新

208* [插件依赖项](/docs/zh-CN/plugins/dependencies):声明和版本化您的插件所依赖的插件

209* [从您的 CLI 推荐您的插件](/docs/zh-CN/plugins/cli-hints):提示您的 CLI 的 Claude Code 用户安装插件

210* [测量插件成本和使用情况](/docs/zh-CN/plugins/measure):查看您的插件在上下文中的成本以及人们是否使用它

plugins/relevance.md +247 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 为您的组织推荐插件

6 

7> 向 marketplace 插件条目添加相关性块,以便当用户的工作匹配时 Claude Code 会建议安装这些插件,并在托管设置中将 marketplace 列入允许列表。

8 

9Claude Code 可以在用户的会话与您为该插件定义的信号匹配时,建议从您组织的 marketplace 安装插件。信号包括工作目录、Claude 已读取的文件以及 Claude 已运行的命令。您可以通过向 `marketplace.json` 中的插件条目添加 `relevance` 块来定义这些信号。

10 

11marketplace 运营商编写 `relevance` 条目。然后管理员在托管设置中将 marketplace 列入允许列表。在 marketplace 被列入允许列表之前,用户看不到来自该 marketplace 的任何建议。

12 

13<Note>

14 这些情况在其他页面上有介绍:

15 

16 * **您想安装插件**:请参阅[安装和管理插件](/docs/zh-CN/plugins/install)

17 * **您想关闭建议**:请参阅[了解插件相关性的工作原理](#understand-how-plugin-relevance-works)

18</Note>

19 

20从适合您角色的部分开始:

21 

22* **Marketplace 运营商**:阅读[建议如何工作](#understand-how-plugin-relevance-works),然后[向插件条目添加相关性](#add-relevance-to-a-plugin-entry)和[验证您的 marketplace](#validate-your-marketplace)

23* **管理员**:[在托管设置中启用建议](#enable-suggestions-in-managed-settings)

24 

25<h2 id="understand-how-plugin-relevance-works">

26 了解插件相关性的工作原理

27</h2>

28 

29`marketplace.json` 中的每个插件条目都可以包含一个 `relevance` 对象。该对象命名一个主题和一个或多个信号。信号是 Claude Code 针对当前会话测试的模式,例如工作目录或 Claude 已读取的文件。

30 

31信号匹配在用户的机器上本地进行,不会增加网络流量。Claude Code 不会向 Anthropic 或 marketplace 运营者报告哪些信号匹配或其值。

32 

33当信号匹配且插件尚未安装时,Claude Code 在以下位置建议该插件:

34 

35* **Spinner 提示**:当 Claude 正在响应时,包含 `/plugin install` 命令的消息出现在 spinner 下方。

36* **会话启动通知**:如果 `cwd` 信号与工作目录匹配,在用户发送第一条消息之前会出现一行通知。

37* **`/plugin` Discover 标签页**:该插件被固定到 Discover 列表的顶部。

38 

39[预览用户看到的内容](#preview-what-the-user-sees) 显示每个的确切文本以及它们重复的频率。

40 

41Claude Code 永远不会自动安装插件。用户始终需要确认。

42 

43当用户或项目将 [`spinnerTipsEnabled`](/docs/zh-CN/settings-reference#spinnertipsenabled) 设置为 `false`,或当 [`spinnerTipsOverride`](/docs/zh-CN/settings-reference#spinnertipsoverride) 带有 `excludeDefault` 替换内置提示时,spinner 提示和会话启动通知都会停止出现。Discover 标签页的固定不受这两个设置的影响。

44 

45<h2 id="add-relevance-to-a-plugin-entry">

46 向插件条目添加相关性

47</h2>

48 

49向您的 `marketplace.json` 中的插件条目添加 `relevance` 对象。以下示例声明当 Claude 读取 `.tf` 文件或运行 `terraform` 时,`terraform-helpers` 插件是相关的:

50 

51```json theme={null}

52{

53 "name": "your-marketplace",

54 "owner": { "name": "Your Org" },

55 "plugins": [

56 {

57 "name": "terraform-helpers",

58 "source": "./plugins/terraform-helpers",

59 "description": "Your organization's Terraform conventions and helpers",

60 "relevance": {

61 "topic": "Terraform",

62 "signals": {

63 "cli": ["terraform"],

64 "filesRead": ["**/*.tf"]

65 }

66 }

67 }

68 ]

69}

70```

71 

72当其信号都不匹配时,该插件在 Discover 列表中保持其正常位置,不会显示为 spinner 提示。

73 

74要在发布前检查该块,请 [验证您的 marketplace](#validate-your-marketplace)。

75 

76<h2 id="field-reference">

77 字段参考

78</h2>

79 

80`relevance` 对象及其嵌套的 `signals` 对象接受以下表格中的字段。

81 

82较旧的客户端仍然可以加载使用它们不识别的 `relevance` 字段的 marketplace,因为在加载时会忽略 `relevance` 和 `relevance.signals` 下的未知字段。一个已识别的字段,其值超过 [字段参考](#field-reference) 中的限制,会使整个插件条目失效,用户无法从 marketplace 安装该插件,直到您修复它;`claude plugin validate` 报告相同的限制。

83 

84<h3 id="relevance">

85 `relevance`

86</h3>

87 

88| 字段 | 类型 | 描述 |

89| :-------- | :-- | :--------------------------------------------------------------------------------------- |

90| `topic` | 字符串 | 可选。填充 spinner 提示中"使用 *topic*?"的短语。默认为插件名称,每个连字符段首字母大写。最多 64 个字符。 |

91| `signals` | 对象 | 确定插件何时相关的匹配器。Claude Code 仅在至少设置一个信号时建议该插件。请参阅 [`relevance.signals`](#relevance-signals)。 |

92 

93`topic` 通常是产品名称,例如 `Terraform`。当插件名称作为主题听起来不自然时,使用诸如 `design` 之类的域。

94 

95<h3 id="relevance-signals">

96 `relevance.signals`

97</h3>

98 

99`signals` 对象接受以下字段。

100 

101| 字段 | 类型 | 描述 | 限制 |

102| :------------- | :---- | :-------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- |

103| `cwd` | 字符串数组 | 与会话工作目录匹配的 Glob 模式。请参阅 [工作目录匹配](#working-directory-matching)。 | 10 个模式,每个 256 个字符 |

104| `cli` | 字符串数组 | Claude 在此会话中运行的 shell 命令中的命令名称,例如 `["terraform"]`。精确匹配。请参阅 [命令名称匹配](#command-name-matching)。 | 10 个条目,每个 64 个字符 |

105| `hosts` | 字符串数组 | 此会话中 Bash 命令中 `http://` 或 `https://` URL 中看到的主机名,例如 `["registry.terraform.io"]`。仅限裸小写主机名:无方案、端口或路径。精确不区分大小写匹配。 | 20 个条目,每个 128 个字符 |

106| `filesRead` | 字符串数组 | 与 Claude 在此会话中已读取的文件路径匹配的 Glob 模式,例如 `["**/*.tf"]`。正斜杠规范化且不区分大小写。 | 10 个模式,每个 256 个字符 |

107| `manifestDeps` | 对象数组 | Claude 在此会话中已读取的包清单中声明的依赖项。每个条目是 `{ "file": "...", "pattern": "..." }`,其中两个值都是正则表达式。请参阅 [清单依赖项匹配](#manifest-dependency-matching)。 | 10 个条目,每个值最多 256 个字符。大于 512 KB 的清单文件被跳过 |

108 

109`filesRead` 和 `manifestDeps` 信号也与 Claude 在此会话中已写入或编辑的文件以及项目的自动加载的 `CLAUDE.md` 内存文件匹配。

110 

111<h4 id="working-directory-matching">

112 工作目录匹配

113</h4>

114 

115`cwd` 是唯一可以在会话启动时匹配的信号,在用户发送第一条消息之前。

116 

117Claude Code 按如下方式匹配每个 `cwd` 模式:

118 

119* 该模式作为绝对路径与工作目录匹配。当会话在 git 存储库内时,它也与工作目录相对于存储库根目录的路径匹配。

120* 匹配是正斜杠规范化且不区分大小写的。

121* 每个模式都匹配目录本身及其下的所有内容,因此 `infra`、`infra/` 和 `infra/**` 的行为相同。

122 

123<h4 id="command-name-matching">

124 命令名称匹配

125</h4>

126 

127Claude Code 为 Claude 运行的每个 shell 命令记录一个命令名称:任何前导环境变量赋值和 `sudo` 之后的第一个令牌。复合命令仅贡献其前导命令,因此 `cd infra && terraform plan` 记录 `cd`,而不是 `terraform`。

128 

129<h4 id="manifest-dependency-matching">

130 清单依赖项匹配

131</h4>

132 

133每个 `manifestDeps` 条目配对两个 JavaScript `RegExp` 源字符串:

134 

135* `file`:不区分大小写地与清单文件的路径匹配。路径通常是绝对的,因此在末尾而不是开头锚定模式。路径对于此信号不是分隔符规范化的,因此 Windows 路径使用反斜杠。

136* `pattern`:区分大小写地与该文件的内容匹配。

137 

138以下示例使用 `manifestDeps` 在 Claude 读取了依赖于您的 SDK npm 包(此处名为 `your-sdk`)的 `package.json` 后建议您的插件。

139 

140```json theme={null}

141{

142 "name": "your-plugin",

143 "source": "./plugins/your-plugin",

144 "relevance": {

145 "signals": {

146 "manifestDeps": [

147 {

148 "file": "[/\\\\]package\\.json$",

149 "pattern": "\"your-sdk\"\\s*:"

150 }

151 ]

152 }

153 }

154}

155```

156 

157在此示例中,`file` 模式使用 `[/\\\\]` 以匹配正斜杠和反斜杠路径分隔符,使用 `\\.` 以使点为字面。在 JSON 中,正则表达式中的每个反斜杠都写两次。

158 

159<h2 id="validate-your-marketplace">

160 验证您的 marketplace

161</h2>

162 

163在您的 shell 中,针对您的 marketplace 目录运行 `claude plugin validate` 以在发布前检查 `relevance` 块:

164 

165```bash theme={null}

166claude plugin validate ./my-marketplace

167```

168 

169验证器报告 `relevance` 块上的错误和警告,包括这些:

170 

171* 将 `relevance` 和 `relevance.signals` 下的未知键报告为警告

172* 标记不是对象的 `relevance` 值

173* 拒绝包含方案、端口或路径的 `signals.hosts` 条目

174 

175每个发现都与其关注的字段的路径一起打印,输出以 `Validation passed`、`Validation passed with warnings` 或 `Validation failed` 结尾。

176 

177<h2 id="enable-suggestions-in-managed-settings">

178 在托管设置中启用建议

179</h2>

180 

181用户看不到来自 marketplace 的任何建议,直到管理员在 [托管设置](/docs/zh-CN/plugins/org) 中将其加入允许列表,即使其 `marketplace.json` 声明了 `relevance`。

182 

183要将 marketplace 加入允许列表,请按如下方式编辑您的托管设置:

184 

185* 将 marketplace 名称添加到 `pluginSuggestionMarketplaces`。

186* 对于除官方 Anthropic marketplace 之外的任何 marketplace,还要声明 marketplace 源,可以是 [`extraKnownMarketplaces`](/docs/zh-CN/plugins/org#require-a-marketplace-and-its-plugins) 中该名称的条目,或 [`strictKnownMarketplaces`](/docs/zh-CN/plugins/org#allowlist-with-strictknownmarketplaces) 中的条目。

187 

188在未注册 marketplace 的机器上,或在从不同源注册的允许列表名称下注册的机器上,来自它的任何建议都不会出现。源检查阻止不相关的源以允许列表名称注册以在您的组织中建议其插件。

189 

190以下 `managed-settings.json` 从 GitHub 存储库注册组织 marketplace 并启用其建议:

191 

192```json theme={null}

193{

194 "extraKnownMarketplaces": {

195 "your-marketplace": {

196 "source": {

197 "source": "github",

198 "repo": "your-org/your-marketplace"

199 }

200 }

201 },

202 "pluginSuggestionMarketplaces": ["your-marketplace"]

203}

204```

205 

206官方 marketplace 的名称只能从官方 Anthropic 源注册,因此不需要源声明。对于官方 marketplace,仅将名称加入允许列表:

207 

208```json theme={null}

209{

210 "pluginSuggestionMarketplaces": ["claude-plugins-official"]

211}

212```

213 

214<h2 id="preview-what-the-user-sees">

215 预览用户看到的内容

216</h2>

217 

218当插件的 `relevance` 信号在会话期间匹配时,spinner 下方的提示读取:

219 

220```text theme={null}

221Working with Terraform? Install the terraform-helpers plugin:

222/plugin install terraform-helpers@your-marketplace

223```

224 

225当 `cwd` 信号在会话启动时匹配时,一行通知读取:

226 

227```text theme={null}

228plugin suggestion: terraform-helpers@your-marketplace · /plugin

229```

230 

231在 `/plugin` Discover 标签页中,该插件被固定在其他结果上方,带有命名匹配信号的注释,例如 `suggested for this directory` 或 `suggested for terraform commands`。

232 

233Claude Code 限制建议给定插件的频率:

234 

235* 该建议在 spinner 提示和会话启动通知的组合中最多每三个会话出现一次。

236* 一旦 spinner 提示和通知总共显示了该插件两次,会话启动通知就停止出现。

237* 一旦安装了插件,spinner 提示和会话启动通知都不会重复。

238* Discover 标签页在用户首次打开标签页时固定该插件,同时插件的信号匹配。Claude Code 在 `~/.claude.json` 中记录这一点,因此每次用户稍后在该机器上打开 `/plugin` 时,该插件都以正常顺序出现。

239 

240<h2 id="see-also">

241 另请参阅

242</h2>

243 

244* [托管 marketplace](/docs/zh-CN/plugins/host-marketplace):运行托管您的插件的 marketplace

245* [Marketplace 参考](/docs/zh-CN/plugins/marketplace-reference#plugin-entries):插件条目接受的每个字段

246* [从您的 CLI 推荐您的插件](/docs/zh-CN/plugins/cli-hints):从您自己的 CLI 而不是从 Claude Code 的会话信号提示用户

247* [为您的组织管理插件](/docs/zh-CN/plugins/org):`extraKnownMarketplaces`、`strictKnownMarketplaces` 和其余的插件策略键

plugins/security.md +186 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 插件安全和信任

6 

7> 在安装插件之前决定是否信任它,从插件在您的机器上可以做什么,到如何审查和删除它。

8 

9您安装的 Claude Code 插件可以使用您的用户权限在您的机器上执行任意代码。

10 

11您从一个市场安装插件,市场是 Claude Code 从中获取插件的目录。某些市场名称是[为 Anthropic 自己的市场保留的](#marketplace-tiers),其他所有市场都是第三方的。市场的名称告诉您谁发布了目录,而不是其中每个插件的功能,所以无论插件来自哪个市场,都要[在安装前审查插件](#review-a-plugin-before-you-install)。

12 

13如果您正在决定是否安装插件,或者您在审查工具以供您的团队使用,请阅读本页。

14 

15<Note>

16 这些情况在其他页面上有介绍:

17 

18 * **Claude Code 自己的安全模型**:请参阅[安全](/docs/zh-CN/security)

19 * **为组织限制或要求插件**:请参阅[为您的组织管理插件](/docs/zh-CN/plugins/org)

20 * **`security-guidance` 或 `claude-security` 插件**:本页不是关于它们的。请参阅[`security-guidance`](/docs/zh-CN/security-guidance) 和 [`claude-security`](/docs/zh-CN/claude-security)

21</Note>

22 

23首先从[插件可以做什么](#understand-what-a-plugin-can-do)和[哪些市场是 Anthropic 的](#marketplace-tiers)开始,然后[在安装前审查插件](#review-a-plugin-before-you-install)。

24 

25<h2 id="understand-what-a-plugin-can-do">

26 了解插件可以做什么

27</h2>

28 

29插件可以包含在您的机器上使用您的用户权限运行代码的内容,以及作为指令进入 Claude 上下文的内容,所以[在安装前审查插件](#review-a-plugin-before-you-install)。以下是已安装的插件可以做的事情:

30 

31* **Hooks**:插件的 [hooks](/docs/zh-CN/hooks) 在 Claude Code 生命周期中的特定点(例如工具调用之前或之后)作为 shell 命令运行。

32* **MCP 和 LSP 服务器**:Claude Code 连接到启用的插件声明的 [MCP 服务器](/docs/zh-CN/mcp),并为 Claude 提供它们的工具。stdio MCP 服务器作为 Claude Code 在您的机器上启动的进程运行。Claude Code 也启动插件声明的语言服务器。

33* **`bin/` 目录**:Claude Code 将每个启用的插件的 `bin/` 目录添加到 Bash 工具 shell 的 `PATH` 中,所以 Claude 的 Bash 命令可以运行那里的任何可执行文件。

34* **Skills、commands 和 agents**:这些作为指令进入 Claude 的上下文,所以它们影响 Claude 对它已有的工具的使用。

35* **更新**:当您安装插件的市场启用自动更新时,Claude Code 在后台更新该插件,所以您审查的文件可能会在磁盘上更改。[自动更新何时运行](/docs/zh-CN/plugins/loading#when-auto-update-runs)有时间安排。要按市场打开或关闭自动更新,请参阅[保持插件更新](/docs/zh-CN/plugins/install#keep-plugins-updated)。

36 

37Claude Code 的[权限规则](/docs/zh-CN/permissions)和[沙箱](/docs/zh-CN/sandboxing)涵盖 Claude 进行的工具调用,而不是插件自己运行的代码:

38 

39* **Hooks 和服务器进程**:命令 hooks 使用您的完整用户权限执行 shell 命令。Claude Code 在沙箱外运行 hooks 和 MCP 服务器。

40* **Claude 的工具调用**:对插件的 MCP 工具之一的调用,以及运行插件 `bin/` 中的可执行文件的 Bash 命令,都是工具调用,所以您的权限规则适用于它们。

41 

42安装插件也会启用它,除非其清单或市场条目设置了 [`defaultEnabled: false`](/docs/zh-CN/plugins/install#choose-an-install-scope),并且您自己没有启用它。

43 

44要删除您不再信任的插件,请参阅[删除您不再信任的插件](#remove-a-plugin-you-no-longer-trust)。

45 

46<h2 id="marketplace-tiers">

47 按名称识别 Anthropic 的市场

48</h2>

49 

50市场的名称将其分为三个层级之一:官方、社区或第三方。Claude Code 仅接受来自 `github.com/anthropics/` 存储库的官方和社区名称用于市场,所以第三方市场不能将自己呈现为 Anthropic 的。同事或您的组织发布的市场是第三方的。

51 

52该表列出了每个层级中的市场名称:

53 

54| 层级 | 哪些市场 |

55| :-- | :----------------------------------------------------------------- |

56| 官方 | [官方市场名称](#official-marketplace-names),例如 `claude-plugins-official` |

57| 社区 | `claude-community`、`claude-plugins-community` 和 `healthcare` |

58| 第三方 | 所有其他市场 |

59 

60当 `claude-community` 目录将插件固定到提交 SHA 时(几乎每个条目都这样做),Claude Code 拒绝安装不同的提交。

61 

62<h3 id="official-marketplace-names">

63 官方市场名称

64</h3>

65 

66这些市场名称构成官方层级:

67 

68* `claude-plugins-official`

69* `claude-code-marketplace`

70* `claude-code-plugins`

71* `anthropic-marketplace`

72* `anthropic-plugins`

73* `agent-skills`

74* `anthropic-agent-skills`

75* `life-sciences`

76* `knowledge-work-plugins`

77* `claude-for-legal`

78* `claude-for-financial-services`

79* `financial-services-plugins`

80* `first-party-plugins`

81* `claude-tag-plugins`

82 

83有关官方、社区和演示市场的区别以及在哪里浏览每个市场列出的内容,请参阅 [Anthropic 的市场](/docs/zh-CN/plugins/anthropic-marketplaces)。

84 

85<h2 id="review-a-plugin-before-you-install">

86 在安装前审查插件

87</h2>

88 

89在安装插件之前,查看它添加的内容以及它来自哪里。

90 

91<Steps>

92 <Step title="检查市场的来源">

93 在您的 shell 中,运行 `claude plugin marketplace list` 以打印每个市场添加来源的信息,例如 GitHub 存储库或目录。

94 </Step>

95 

96 <Step title="阅读详情窗格">

97 在 Claude Code 会话中,运行 `/plugin` 并选择插件。详情窗格显示一个**将安装**部分,列出插件的 commands、agents、skills、hooks 和 MCP 及 LSP 服务器。对于 Anthropic 没有发布组件数据的插件,该部分显示市场条目声明的内容,或一个注释:`Components will be discovered at installation` 用于存储在市场内的插件,或 `Component summary not available for remote plugin` 用于从其他地方获取的插件。

98 </Step>

99 

100 <Step title="阅读插件的源代码">

101 在详情窗格中,选择安装选项下方的**打开主页**或**在 GitHub 上查看**。如果窗格都不提供,请打开您在第一步中找到的市场存储库。在那里找到插件的目录。**将安装**部分显示 hook 存在但不显示它运行的内容,所以请阅读插件目录中的这些文件:

102 

103 * **`hooks/hooks.json`**:每个 hook 运行的命令

104 * **`.mcp.json`**:每个服务器的命令或 URL

105 * **`bin/`**:目录中的每个文件

106 </Step>

107 

108 <Step title="列出插件包含的内容">

109 克隆保存插件目录的存储库,然后在您的 shell 中运行 `claude --plugin-dir <plugin directory> plugin details <plugin name>` 以查看 Claude Code 在其中找到的内容。该命令读取插件的文件而不启动会话,并打印一个 `Component inventory` 列出插件的 skills 和 commands、agents、带有每个 hook 事件的 hooks,以及 MCP 和 LSP 服务器。

110 </Step>

111</Steps>

112 

113安装插件后,在您的 shell 中运行 `claude plugin details <plugin name>` 以为 `~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/` 下的已安装副本打印相同的 `Component inventory`。

114 

115<h3 id="remove-a-plugin-you-no-longer-trust">

116 删除您不再信任的插件

117</h3>

118 

119在您的 shell 中,使用您安装它的 `--scope` 运行 [`claude plugin uninstall <plugin>`](/docs/zh-CN/plugins/cli-reference#plugin-uninstall)。然后检查卸载删除了什么以及留下了什么:

120 

121* **持久数据**:当这是插件安装的最后一个范围时,卸载也会删除插件的持久数据目录,除非您传递 `--keep-data`。

122* **缓存文件**:插件的文件在 `~/.claude/plugins/cache/` 下保留在磁盘上 14 天,然后[后台扫描将其删除](/docs/zh-CN/plugins/loading#cleanup-of-previous-versions)。卸载最后一个插件后,孤立目录保留到您安装另一个。要立即删除文件,请自己删除 `~/.claude/plugins/cache/<marketplace>/<plugin>/` 下的插件目录。

123* **市场**:如果您也不信任市场的所有者,[也删除市场](/docs/zh-CN/plugins/install#manage-marketplaces),这会卸载您从它安装的每个插件。

124 

125<h2 id="recognize-when-claude-code-refuses-or-warns">

126 识别 Claude Code 何时拒绝或警告

127</h2>

128 

129您从 `/plugin` 中的**发现**或**市场**选项卡打开的详情窗格为每个插件显示相同的信任警告。Claude Code 在[不受信任的市场来源和失败的完整性检查](#untrusted-marketplace-sources-and-failed-integrity-checks)下的情况下拒绝而不是警告。

130 

131<h3 id="trust-warning-before-you-install">

132 安装前的信任警告

133</h3>

134 

135警告读起来与插件来自的市场相同:

136 

137```text theme={null}

138Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.

139```

140 

141如果您的组织在[托管设置](/docs/zh-CN/plugins/org)中设置了 `pluginTrustMessage`,Claude Code 会将该文本附加到警告中。

142 

143<h3 id="untrusted-marketplace-sources-and-failed-integrity-checks">

144 不受信任的市场来源和失败的完整性检查

145</h3>

146 

147Claude Code 在这些情况下拒绝加载市场或安装插件,每种情况都有自己的错误消息:

148 

149* **不受信任的市场来源**:当市场使用官方或社区名称但其来源在 `github.com/anthropics/` 之外时,Claude Code 停止加载市场和您从它安装的插件。错误是[市场从不受信任的来源注册](/docs/zh-CN/errors#marketplace-is-registered-from-an-untrusted-source)。

150* **存档完整性**:当市场条目将 [`archive` 源](/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source)固定到 `sha256` 摘要,并且下载的文件的摘要与其不匹配时,Claude Code 拒绝安装。错误是[插件存档完整性检查失败](/docs/zh-CN/errors#plugin-archive-integrity-check-failed)。

151 

152`sha256` 固定与社区目录的提交 SHA 固定分开,后者选择要检出的 git 提交。

153 

154<h2 id="enforce-plugin-controls-for-your-organization">

155 为您的组织强制执行插件控制

156</h2>

157 

158使用[托管设置](/docs/zh-CN/plugins/org),管理员可以强制执行这些插件控制:

159 

160* 允许列表或阻止列表市场来源

161* 强制启用插件

162* 关闭 `--plugin-dir` 和 `--plugin-url` 标志以及 `CLAUDE_CODE_PLUGIN_DIRS` 变量

163* 将 hooks 限制为来自托管设置和强制启用插件的 hooks

164* 停止成员 claude.ai 账户中的插件在 Claude Code 中加载,使用 [`syncClaudeAiPlugins`](/docs/zh-CN/plugins/org#control-matrix)

165 

166[控制矩阵](/docs/zh-CN/plugins/org#control-matrix)说明每个键的作用和不涵盖的内容。

167 

168<h2 id="find-plugins-in-telemetry">

169 在遥测中查找插件

170</h2>

171 

172如果您的组织将 Claude Code 的 [OpenTelemetry 事件](/docs/zh-CN/monitoring-usage)导出到其自己的后端,[市场层级](#marketplace-tiers)决定哪些插件名称出现在那里:

173 

174* **[插件加载事件](/docs/zh-CN/monitoring-usage#plugin-loaded-event)**:事件按原样报告官方层级插件和市场名称。对于社区和第三方层级,`plugin.name` 和 `marketplace.name` 是字面字符串 `third-party`,除非您设置 `OTEL_LOG_TOOL_DETAILS=1`。

175* **插件范围**:加载事件的 `plugin.scope` 仍然报告插件来自的位置,例如 `org` 用于您的托管设置启用的插件或 `user-local` 用于任何其他第三方插件。[插件加载事件](/docs/zh-CN/monitoring-usage#plugin-loaded-event)列出每个值。

176* **[插件安装事件](/docs/zh-CN/monitoring-usage#plugin-installed-event)**:除非您设置 `OTEL_LOG_TOOL_DETAILS=1`,否则事件省略非官方插件的名称字段,而不是报告 `third-party`。

177* **[Claude Code Analytics API](https://platform.claude.com/docs/en/api/admin/analytics/plugins/list)**:Claude Code 按名称报告来自官方和社区层级的插件,并将所有其他插件报告为 `third-party`。

178 

179<h2 id="next-steps">

180 后续步骤

181</h2>

182 

183* [为您的组织管理插件](/docs/zh-CN/plugins/org):限制用户可以从哪些市场安装,并要求您信任的市场

184* [安装和管理插件](/docs/zh-CN/plugins/install):在选择范围之前审查插件的详情窗格

185* [Anthropic 的市场](/docs/zh-CN/plugins/anthropic-marketplaces):哪些市场名称是 Anthropic 的

186* [安全](/docs/zh-CN/security):Claude Code 自己的安全模型

plugins/troubleshooting.md +1064 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 排查插件问题

6 

7> 修复 Claude Code 中的插件错误。找到您看到的确切消息,按照 /plugin 运行、安装和组织策略的阶段分组。

8 

9此页面列出了 Claude Code 插件和市场的错误消息和症状,市场是 Claude Code 安装插件的目录。每个条目都给出了原因、一个修复方法,以及修复后您会看到的内容。

10 

11如果消息中提到了插件或市场的名称,该条目会显示一个占位符,例如 `<name>`。

12 

13无论您是安装插件、构建插件、托管市场还是为组织管理插件,都可以使用此页面。

14 

15<Note>

16 这些情况在其他页面上有介绍:

17 

18 * **为什么作用域、缓存和优先级的行为方式如此**:阅读 [Plugin loading reference](/docs/zh-CN/plugins/loading)

19 * **查找标志、字段或命令**:使用 [plugin commands reference](/docs/zh-CN/plugins/cli-reference)、[manifest reference](/docs/zh-CN/plugins/manifest-reference) 或 [marketplace reference](/docs/zh-CN/plugins/marketplace-reference)

20</Note>

21 

22搜索您看到的确切消息。每条消息都列在产生它的阶段下,这不一定是您运行的命令。例如,安装可能因为市场缺失而失败,所以该消息在 [Add a marketplace](#add-a-marketplace) 下。

23 

24<h2 id="find-where-/plugin-runs">

25 查找 `/plugin` 运行的位置

26</h2>

27 

28`/plugin` 是您在运行的 Claude Code 终端会话中键入的命令,它打开一个交互式面板。本节中的条目涵盖了您可以键入它但它无法运行的地方,以及不存在的命令拼写。

29 

30<h3 id="plugin-isnt-available-in-this-environment">

31 `/plugin isn't available in this environment`

32</h3>

33 

34您在 Claude Code 终端会话之外的某个地方键入了 `/plugin`,Claude 用这一行回复而不是打开任何东西。

35 

36您会在没有终端来绘制 `/plugin` 面板的会话中收到此回复:[非交互模式](/docs/zh-CN/headless),使用 `claude -p`、Agent SDK、Claude 桌面应用的 Code 选项卡、VS Code 扩展面板和浏览器上的 claude.ai/code。

37 

38在 VS Code 扩展面板中,只有 `/plugin` 行后面跟着内容(例如 `/plugin install <plugin>@<marketplace>`)才会收到此回复。单独键入 `/plugin` 或 `/plugins` 会打开 **Manage plugins** 对话框。

39 

40从您所在的表面安装插件:

41 

42* **Claude 桌面应用、本地或 SSH 会话**:点击提示旁边的 **+** 按钮,然后点击 **Plugins**,然后点击 **Add plugin** 打开 [插件浏览器](/docs/zh-CN/desktop#install-plugins)

43* **VS Code 扩展**:使用 [安装插件](/docs/zh-CN/plugins/install#install-a-plugin) 下的 **VS Code** 选项卡

44* **网络上的 Claude Code 或桌面云会话**:云会话没有插件浏览器。有关云会话加载的内容,请参阅 [安装插件](/docs/zh-CN/plugins/install#install-a-plugin) 下的 **Cloud session** 选项卡

45* **您有权访问的终端**:运行 `claude` 并在那里键入 `/plugin`,或在您的 shell 中运行 `claude plugin install <plugin>@<marketplace>` 而不启动会话

46 

47当终端安装成功时,`/plugin` 会打印一个以 `✓ Installed <plugin>.` 开头的安装摘要,`claude plugin install` 会打印 `Successfully installed plugin: <plugin>@<marketplace>`。

48 

49<h3 id="zsh-no-such-file-or-directory-plugin">

50 `zsh: no such file or directory: /plugin`

51</h3>

52 

53您在 shell 提示符处键入了 `/plugin ...`,shell 报告不存在名为 `/plugin` 的文件。Bash 报告 `bash: /plugin: No such file or directory`。

54 

55`/plugin` 是您在 Claude Code 会话中键入的命令,而不是在 shell 提示符处。启动一个会话并在那里键入相同的命令:

56 

57```shell theme={null}

58claude

59```

60 

61然后,在 Claude Code 提示符处:

62 

63```text theme={null}

64/plugin install <plugin>@<marketplace>

65```

66 

67成功的安装会打印一个以 `✓ Installed <plugin>.` 开头的摘要。如果安装本身随后失败,其消息在 [添加市场](#add-a-marketplace) 或 [安装插件](#install-a-plugin) 下。

68 

69要从 shell 安装而不启动会话,请改为运行 `claude plugin install <plugin>@<marketplace>`。

70 

71<h3 id="the-term-plugin-is-not-recognized-as-the-name-of-a-cmdlet">

72 `The term '/plugin' is not recognized as the name of a cmdlet`

73</h3>

74 

75您在 PowerShell 提示符处键入了 `/plugin ...`,`/plugin` 是 Claude Code 命令,而不是程序。Bash 和 Zsh 报告 [它们自己的这个错误形式](#zsh-no-such-file-or-directory-plugin)。

76 

77改为使用以下任一方式:

78 

79* 运行 `claude`,然后在 Claude Code 提示符处键入 `/plugin`

80* 在 PowerShell 中运行 `claude plugin install <plugin>@<marketplace>` 而不启动会话

81 

82<h3 id="claude-command-not-found-after-claude-plugin">

83 `claude: command not found` after `claude plugin ...`

84</h3>

85 

86您在 shell 中运行了 `claude plugin install ...`,shell 根本找不到 `claude`。在 Windows 上,消息是 `'claude' is not recognized as the name of a cmdlet` 或 `'claude' is not recognized as an internal or external command`。

87 

88原因不是插件命令。要么 Claude Code 未安装,要么其安装目录不在此 shell 中的 `PATH` 上。按照 [安装后 `command not found: claude`](/docs/zh-CN/troubleshoot-install#command-not-found-claude-after-installation) 进行操作,然后重试插件命令。

89 

90<h3 id="unknown-command-and-command-spellings-that-dont-exist">

91 `Unknown command` 和不存在的命令拼写

92</h3>

93 

94您键入了在某处看到的插件命令,并在会话中收到 `Unknown command: /<name>`,或从 shell 中的 `claude` 二进制文件收到 `error: unknown command '<name>'` 或 `error: unknown option '<flag>'`。

95 

96有几种命令拼写在使用中,但 Claude Code 没有。下表将每一个映射到真实命令。[插件命令参考](/docs/zh-CN/plugins/cli-reference) 列出了每个子命令和标志。

97 

98| 您键入的 | Claude Code 说什么 | 改为使用 |

99| :----------------------------------------- | :--------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- |

100| `claude plugin add <source>` | `error: unknown command 'add'` | `claude plugin marketplace add <source>` 添加市场,或 `claude plugin install <plugin>@<marketplace>` 安装插件 |

101| `claude plugin install <plugin> --project` | `error: unknown option '--project'` | `claude plugin install <plugin>@<marketplace> --scope project` |

102| `/install <plugin>` | `Unknown command: /install` | `/plugin install <plugin>@<marketplace>` |

103| `/plugin add <source>` | `/plugin` 面板在 **Discover** 选项卡上打开 | `/plugin marketplace add <source>` |

104| `marketplace.anthropic.com` 作为源 | `Invalid marketplace source format. Try: owner/repo, https://..., or ./path` | `anthropics/claude-plugins-official` 用于官方市场 |

105 

106这些拼写看起来不对但有效:

107 

108* `claude plugins` 是 `claude plugin` 的别名

109* `claude plugin remove` 是 `claude plugin uninstall` 的别名

110* `/plugins` 和 `/marketplace` 在会话中打开与 `/plugin` 相同的面板

111 

112<h2 id="add-a-marketplace">

113 添加市场

114</h2>

115 

116市场是您从 git 存储库、URL 或本地路径添加到 Claude Code 的目录。这些条目涵盖了添加失败或稍后刷新失败时您收到的消息。

117 

118<h3 id="marketplace-claude-plugins-official-not-found">

119 `Marketplace "claude-plugins-official" not found`

120</h3>

121 

122您在会话中运行了 `/plugin install <plugin>@claude-plugins-official`,Claude Code 报告它没有该名称的市场。

123 

124官方市场在此机器上尚未注册。Claude Code 通常在您第一次启动交互式终端会话时自动注册它。如果您仅通过 VS Code 扩展使用 Claude Code,它还没有运行,并且它会跳过或延迟该步骤:

125 

126* 当策略阻止源时

127* 当设置了 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` 时

128* 在等待重试的失败尝试之后

129 

130`claude plugin` shell 命令永远不会为您注册它。

131 

132添加它,然后重试安装:

133 

134```text theme={null}

135/plugin marketplace add anthropics/claude-plugins-official

136```

137 

138Claude Code 打印 `Successfully added marketplace: claude-plugins-official`,`/plugin marketplace list` 显示带有其源的市场。

139 

140对于此消息中的任何其他市场名称,请参阅 [`Marketplace "<name>" not found`](#marketplace-not-found)。

141 

142相同的字符串也出现在 `/plugin` **Errors** 选项卡中,即面板的加载失败列表,当您的设置中列出的插件命名您未添加的市场时。

143 

144<h3 id="marketplace-not-found">

145 `Marketplace "<name>" not found`

146</h3>

147 

148您在会话中运行了 `/plugin install <plugin>@<name>`,通常来自某人发送给您的安装行,Claude Code 报告它没有该名称的市场。

149 

150如果名称以 `claudeai-` 开头,市场托管在 claude.ai 上,您可以从 shell 中使用 `claude plugin marketplace add --claudeai <name>` 按名称添加它。请参阅 [从 claude.ai 添加市场](/docs/zh-CN/plugins/install#add-from-claude-ai)。

151 

152对于任何其他名称,安装行命名市场但不说明市场托管在哪里,Claude Code 没有索引来查找市场名称。询问发送该行的人市场的源,这是 GitHub `owner/repo`、git URL 或路径。然后 [添加市场](/docs/zh-CN/plugins/install#add-a-marketplace) 并再次运行安装行。

153 

154某人发送给您的市场是第三方的,所以 [在安装前审查插件](/docs/zh-CN/plugins/security#review-a-plugin-before-you-install)。

155 

156如果您已经添加了市场,请根据 `/plugin marketplace list` 检查拼写。

157 

158<h3 id="invalid-marketplace-source-format">

159 `Invalid marketplace source format`

160</h3>

161 

162您运行了 `/plugin marketplace add <source>` 或 `claude plugin marketplace add <source>`,Claude Code 回复 `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`。

163 

164Claude Code 接受以下形式之一的源:

165 

166* GitHub `owner/repo` 简写

167* `https://` 或 `http://` URL

168* `user@host:path` SSH URL

169* 以 `./`、`../`、`/` 或 `~` 开头的本地路径

170 

171裸名称(例如 `claude-plugins-official`)不匹配任何一个。裸主机名(例如 `marketplace.anthropic.com`)也不匹配。

172 

173以接受的形式之一重新键入源:

174 

175```text theme={null}

176/plugin marketplace add anthropics/claude-plugins-official

177```

178 

179当添加成功时,Claude Code 打印 `Successfully added marketplace: <name>`。

180 

181<h3 id="is-not-a-valid-github-owner-repo-shorthand">

182 `'<source>' is not a valid GitHub owner/repo shorthand`

183</h3>

184 

185您传递了一个包含斜杠但不是 `owner/repo` 的源,例如 `github.com/owner/repo` 或 `gitlab.example.com/group/project` 路径。Claude Code 拒绝了它,并显示了一个接受的形式列表。

186 

187`owner/repo` 简写仅限于 GitHub,必须遵循 GitHub 的命名规则,因此主机名或额外的路径段会失败。以与市场托管位置匹配的形式传递源:

188 

189* **任何主机上的存储库**:完整的克隆 URL

190* **托管的 `marketplace.json`**:其 `https://` URL

191* **本地检出**:`./path` 或绝对路径

192 

193例如,要通过其克隆 URL 添加官方市场,请在会话中:

194 

195```text theme={null}

196/plugin marketplace add https://github.com/anthropics/claude-plugins-official.git

197```

198 

199成功的添加打印 `Successfully added marketplace: <name>`。

200 

201<h3 id="path-does-not-exist">

202 `Path does not exist: <path>`

203</h3>

204 

205您将本地路径传递给 `marketplace add`,该路径处没有任何内容。相对路径相对于您的当前目录解析。

206 

207检查消息中的已解析路径。然后从相对路径开始的目录运行命令,或将绝对路径传递给市场目录。成功的添加打印 `Successfully added marketplace: <name>`。

208 

209Claude Code 接受包含 `.claude-plugin/marketplace.json` 的目录,或指向 `.json` 文件的路径。指向任何其他文件的路径失败,显示 `File path must point to a .json file (marketplace.json)`。

210 

211<h3 id="marketplace-file-not-found-at-claude-plugin-marketplace-json">

212 `Marketplace file not found at <path>/.claude-plugin/marketplace.json`

213</h3>

214 

215Claude Code 克隆或下载了市场,但在其内部的预期路径中找不到 `marketplace.json`。添加命令将其报告为 `Failed to add marketplace: Marketplace file not found at ...`。

216 

217默认位置是存储库根目录中的 `.claude-plugin/marketplace.json`,[市场参考](/docs/zh-CN/plugins/marketplace-reference) 列出了接受的位置。

218 

219修复因所有者和其他人而异:

220 

221* **您拥有市场**:将文件放在该位置并重新添加市场

222* **其他人托管它**:向所有者询问他们发布的确切源

223 

224<h3 id="ssh-authentication-failed-or-https-authentication-failed">

225 `SSH authentication failed` 或 `HTTPS authentication failed`

226</h3>

227 

228您从 git 存储库添加或更新了市场,克隆失败,显示 `Failed to clone marketplace repository:` 后跟以下行之一。

229 

230首先检查存储库本身:拼写错误的 `owner/repo`、不存在的存储库或您看不到的私有存储库也以此消息结尾。在浏览器中打开存储库 URL,或在终端中运行 `git ls-remote <url>`,以确认它存在且您有权访问。

231 

232如果存储库是正确的,原因是凭证。Claude Code 运行 git 时禁用了交互式提示,因此它无法像您的终端那样要求您输入密码、密钥密码或凭证。如果 git 需要提示,您会看到 `fatal: Cannot prompt because user interactivity has been disabled` 或 `terminal prompts disabled` 在原始错误中。只有已经非交互式工作的凭证才会成功:

233 

234* **SSH**:`ssh -T git@<host>` 必须成功而不提示密码,主机必须已在 `known_hosts` 中

235* **HTTPS**:您的凭证助手必须为主机保存令牌。对于 GitHub,运行 `gh auth login` 和 `gh auth setup-git`。对于另一个主机,在您的 git 凭证助手中存储个人访问令牌。使用 `git ls-remote <url>` 测试

236 

237一旦 `git ls-remote` 在您的终端中成功而不提示,再次运行添加或更新。成功的添加打印 `Successfully added marketplace: <name>`。成功的更新从您的 shell 打印 `Successfully updated marketplace: <name>`,或在会话中打印 `✔ Updated 1 marketplace`。

238 

239要使 Claude Code 为 GitHub `owner/repo` 源跳过 SSH,请设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。没有它,当 `github.com` 的 SSH 密钥看起来已配置时,Claude Code 通过 SSH 克隆这些源,当 SSH 克隆失败时回退到 HTTPS。

240 

241有关后台自动更新可以和不能对您的凭证做什么,请参阅 [后台自动更新对凭证的处理](/docs/zh-CN/plugins/host-marketplace#what-background-auto-update-does-with-credentials)。

242 

243<h3 id="ssh-host-key-is-not-in-your-known-hosts-file">

244 `SSH host key is not in your known_hosts file`

245</h3>

246 

247您从您从未连接过的主机通过 SSH 添加了市场,克隆失败,显示此行和 `ssh -T git@<host>` 提示。对于密钥已更改的主机,消息是 `SSH host key has changed`,带有 `ssh-keygen -R <host>` 提示。

248 

249Claude Code 使用 `StrictHostKeyChecking=yes` 克隆,因此它拒绝您尚未接受其密钥的主机,而不是自动接受密钥。从您的终端连接一次以接受指纹,然后重试:

250 

251```shell theme={null}

252ssh -T git@github.com

253```

254 

255对于公共存储库,改为通过其 `https://` URL 添加市场以完全避免 SSH。

256 

257<h3 id="command-git-not-found-or-is-in-an-unsafe-location">

258 `Command 'git' not found or is in an unsafe location`

259</h3>

260 

261在 Windows 上,您添加了市场,Claude Code 报告 `Failed to clone marketplace repository: Command 'git' not found or is in an unsafe location (current directory)`。

262 

263Claude Code 在您的 `PATH` 上查找 `git`,并拒绝运行仅在当前目录中找到的。要修复它,请安装 Git 并重试:

264 

265<Steps>

266 <Step title="安装 Git for Windows">

267 安装 Git for Windows,以便 `git` 在您的 `PATH` 上。

268 </Step>

269 

270 <Step title="打开新终端">

271 打开新终端,以便应用更新的 `PATH`。

272 </Step>

273 

274 <Step title="确认 git 运行">

275 确认 `git --version` 打印版本。

276 </Step>

277 

278 <Step title="重试添加">

279 再次运行 `marketplace add` 命令。

280 </Step>

281</Steps>

282 

283<h3 id="git-clone-timed-out-after-120s">

284 `Git clone timed out after 120s`

285</h3>

286 

287您添加或更新了市场,它失败,显示 `Git clone timed out after 120s`,后跟设置 `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` 的提示。

288 

289克隆市场和重新克隆一个以更新它,默认获得 120 秒。对于大型存储库或缓慢的连接,提高限制。该值以毫秒为单位:

290 

291<Tabs>

292 <Tab title="Bash 或 Zsh">

293 ```bash theme={null}

294 export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000

295 ```

296 </Tab>

297 

298 <Tab title="PowerShell">

299 ```powershell theme={null}

300 $env:CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS = "300000"

301 ```

302 </Tab>

303</Tabs>

304 

305然后在同一 shell 中重试。

306 

307如果存储库是 monorepo,使用 `claude plugin marketplace add <source> --sparse <paths>` 限制检出到您命名的目录。

308 

309<h3 id="marketplace-updates-keep-failing-offline">

310 市场更新在离线时持续失败

311</h3>

312 

313您在市场的 git 主机无法访问的环境中工作,每个会话都在后台重复失败的刷新。您现有的市场检出保持原位,启动不会延迟。

314 

315每个会话,对于 [启用自动更新](/docs/zh-CN/plugins/loading#which-marketplaces-and-plugins-auto-update) 的市场,Claude Code 在后台检查市场的 git 主机是否有新提交。当该检查无法到达主机时,它尝试再次克隆市场,离线时该克隆也失败。

316 

317设置此变量以跳过重新克隆尝试,并在检查无法到达主机时继续使用现有检出:

318 

319<Tabs>

320 <Tab title="Bash 或 Zsh">

321 ```bash theme={null}

322 export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1

323 ```

324 </Tab>

325 

326 <Tab title="PowerShell">

327 ```powershell theme={null}

328 $env:CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE = "1"

329 ```

330 </Tab>

331</Tabs>

332 

333设置变量后,Claude Code 仅对已包含 `.claude-plugin/marketplace.json` 的检出跳过重新克隆。从未克隆或其克隆停止中途的市场仍然获得克隆尝试,因此请在在线时添加一次。

334 

335对于完全离线部署,改为在镜像构建时使用 `CLAUDE_CODE_PLUGIN_SEED_DIR` 预填充插件目录,遵循 [种子容器和 CI](/docs/zh-CN/plugins/org#seed-containers-and-ci)。

336 

337<h3 id="marketplace-add-fails-on-a-github-enterprise-server-host">

338 市场添加在 GitHub Enterprise Server 主机上失败

339</h3>

340 

341您从 GitHub Enterprise Server (GHES) URL 添加了市场并收到策略错误,或您从 claude.ai 添加了它并收到 GitHub 访问错误。

342 

343两种情况都在 GHES 页面上:

344 

345* [策略错误](/docs/zh-CN/github-enterprise-server#marketplace-add-fails-with-a-policy-error) 意味着您的组织限制了市场源,管理员需要为主机添加 `hostPattern`

346* [claude.ai 上的 GitHub 访问错误](/docs/zh-CN/github-enterprise-server#marketplace-add-on-claude-ai-fails-with-a-github-access-error) 意味着您自己的 GitHub Enterprise 帐户尚未连接

347 

348<h2 id="install-a-plugin">

349 安装插件

350</h2>

351 

352您添加了市场并运行了安装,安装停止并显示消息而不是安装任何东西。这些条目涵盖了这些消息。它们还涵盖了稍后出现在 `/plugin` **Errors** 选项卡中的相关消息,或当插件或其市场无法找到、读取或信任时的空 **Discover** 选项卡。

353 

354<h3 id="plugin-not-found-in-marketplace">

355 `Plugin "<name>" not found in marketplace "<marketplace>"`

356</h3>

357 

358您运行了 `/plugin install <name>@<marketplace>` 或 `claude plugin install <name>@<marketplace>`,插件名称不在您机器上该市场目录的副本中。

359 

360当您根本没有添加市场时,`claude plugin install` 在您的 shell 中打印相同的消息。如果 `claude plugin marketplace update <marketplace>` 然后回答 `Marketplace '<marketplace>' not found`,[首先添加市场](#add-a-marketplace)。

361 

362<h4 id="the-message-ends-with-a-refresh-hint">

363 `not found in marketplace` 带有刷新提示

364</h4>

365 

366提示读取 `Your local copy may be out of date — try claude plugin marketplace update <marketplace>` 或 `The marketplace couldn't be refreshed (...)`。Claude Code 在查找前没有刷新市场,例如当您离线时,所以您的目录副本可能已过时。使用市场的名称刷新,然后再次安装:

367 

368```text theme={null}

369/plugin marketplace update <marketplace>

370```

371 

372`claude plugin marketplace update` 打印 `Successfully updated marketplace: <name>`,`/plugin marketplace update` 显示 `✔ Updated 1 marketplace`。如果重试的安装打印相同的消息,请按照 [`not found in marketplace` 无提示](#the-message-has-no-hint) 描述检查名称。[Claude Code 何时在安装前刷新市场](/docs/zh-CN/plugins/loading#when-claude-code-refreshes-a-marketplace-before-an-install) 列出了刷新不运行的其他情况。

373 

374<h4 id="the-message-has-no-hint">

375 `not found in marketplace` 无提示

376</h4>

377 

378名称是最可能的问题。打开 `/plugin`,转到 **Discover**,并从列表中复制名称。

379 

380在 v2.1.232 之前,Claude Code 仅在查找失败后刷新命名的市场,并且仅当为其启用了自动更新时。

381 

382<h3 id="plugin-not-found-in-any-marketplace">

383 `Plugin "<name>" not found in any marketplace`

384</h3>

385 

386您运行了 `/plugin install <name>` 而没有 `@marketplace`,没有注册的市场拥有该插件。`claude plugin install <name>` 报告 `Plugin "<name>" not found in any configured marketplace`。

387 

388没有市场名称,`claude plugin install` 搜索它已有的目录,不会首先刷新它们,`/plugin install` 仅刷新启用了自动更新的市场。命名市场,Claude Code 在查找插件前刷新它:

389 

390```text theme={null}

391/plugin install <name>@<marketplace>

392```

393 

394当安装成功时,您在会话中看到 `✓ Installed <plugin>.`,或从 `claude plugin install` 看到 `Successfully installed plugin: <plugin>@<marketplace>`。

395 

396如果您不知道哪个市场列出了插件,请运行 `/plugin marketplace list` 查看您拥有的市场,并在 `/plugin` 中浏览 **Discover** 查找插件名称。

397 

398<h3 id="plugin-is-already-installed-globally">

399 `Plugin '<name>@<marketplace>' is already installed globally`

400</h3>

401 

402您为已在用户作用域或通过托管设置安装的插件运行了 `/plugin install`,Claude Code 拒绝了 `Use '/plugin' to manage existing plugins.`。如果您键入了没有 `@<marketplace>` 的插件名称,消息会省略 `globally`。

403 

404插件已在每个项目中可用,因此没有什么可添加的。要更改其 [作用域](/docs/zh-CN/plugins/install)、启用或禁用它,或配置它,请打开 `/plugin` 并转到 **Installed**。

405 

406仅在项目或本地作用域安装的插件不会触发此消息。Claude Code 允许您也在用户作用域安装它,因此它在其他项目中可用。

407 

408您的 shell 中的 `claude plugin install` 打印不同的消息。对于已在目标作用域安装的插件,它打印 `Plugin "<name>@<marketplace>" is already installed (scope: user)` 并以 0 退出。如果其缓存目录缺失,相同的命令重新下载它。

409 

410<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">

411 `This plugin uses a source type your Claude Code version does not support`

412</h3>

413 

414您安装了一个插件,其市场条目使用此版本 Claude Code 无法获取的源类型,Claude Code 停止并显示此消息和 `Update Claude Code and try again.`

415 

416更新 Claude Code,然后重试安装。源类型在 [市场参考](/docs/zh-CN/plugins/marketplace-reference) 上。

417 

418<h3 id="plugin-archive-integrity-check-failed">

419 `Plugin archive integrity check failed`

420</h3>

421 

422您安装了作为 zip 存档分发的插件,Claude Code 拒绝了它,显示此行和 `The archive was not installed.`。插件的市场条目使用带有 `sha256` 引脚的 [`archive` 源](/docs/zh-CN/plugins/marketplace-reference),下载文件的摘要与引脚不匹配。

423 

424完整消息如下所示:

425 

426```text theme={null}

427Plugin archive integrity check failed for https://artifacts.example.com/claude-plugins/my-plugin.zip: expected sha256 6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1, got ac52220c0914ef8ca6a602e4a7362f88d30fb021110f72a6d15b68c3fe7df2b7. The archive was not installed. Verify the sha256 in the marketplace entry, or that the URL serves the intended file.

428```

429 

430修复因发布者和安装程序而异:

431 

432* **您发布插件**:重新计算 URL 提供的确切文件的摘要,并更新市场条目中的 `sha256`。使用 `shasum -a 256 my-plugin.zip`,或在 PowerShell 中使用 `Get-FileHash -Algorithm SHA256 my-plugin.zip`

433* **您安装插件**:在会话中运行 `/plugin marketplace update <name>` 以刷新目录以防条目已更正,然后重试安装。如果刷新后摘要仍然不同,请在安装前询问市场所有者他们引脚了哪个文件

434 

435<h3 id="marketplace-is-registered-from-an-untrusted-source">

436 `Marketplace "<name>" is registered from an untrusted source`

437</h3>

438 

439您之前添加的市场停止加载,其插件也停止加载。此行出现在 `/plugin` **Errors** 选项卡中或下一次刷新时。

440 

441市场以 [为官方 Anthropic 市场保留](/docs/zh-CN/plugins/marketplace-reference) 的名称注册,但其注册源不是 `anthropics` GitHub 存储库。每次市场加载或刷新时都会重新检查保留名称,因此市场和从它安装的插件停止加载。

442 

443完整消息命名保留名称和修复:

444 

445```text theme={null}

446Marketplace "claude-community" is registered from an untrusted source: The name 'claude-community' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name. To fix it, remove the marketplace and re-add it from the official source.

447```

448 

449修复因用户和发布者而异:

450 

451* **您使用市场**:在您的 shell 中,运行 `claude plugin marketplace remove <name>`,然后从官方 `github.com/anthropics` 存储库再次添加市场

452* **您发布在其名称成为保留之前使用该名称的第三方市场**:重命名它并要求用户从您的源重新添加它

453 

454在 v2.1.205 之前,Claude Code 仅在您添加市场时检查名称,因此在其名称成为保留之前注册的条目继续加载。

455 

456<h3 id="plugin-has-a-corrupt-manifest-file-or-has-an-invalid-manifest-file">

457 `Plugin <name> has a corrupt manifest file` 或 `has an invalid manifest file`

458</h3>

459 

460Claude Code 获取了插件,然后无法读取其 `.claude-plugin/plugin.json`。在 shell 中,此行中的 `<name>` 可以是临时目录名称;`Failed to install plugin "<name>@<marketplace>"` 前缀携带插件的真实名称。措辞说明哪个检查失败:

461 

462* **`corrupt manifest file`,后跟 `JSON parse error:`**:文件不是有效的 JSON

463* **`invalid manifest file`,后跟 `Validation errors:`**:文件解析但失败架构,例如 `name: Invalid input` 用于缺失的必需字段

464 

465`claude plugin install` 报告为 `Failed to install plugin "<name>@<marketplace>":` 并以代码 1 退出。

466 

467插件的作者必须修复文件,在那之前无法安装插件:

468 

469* **如果那是您**:在您的 shell 中运行 `claude plugin validate <plugin-directory>` 以查看相同的错误和违规路径,然后修复文件

470* **如果不是您**:向市场所有者报告消息

471 

472<h3 id="plugin-directory-not-found-at-path">

473 `Plugin directory not found at path: <path>`

474</h3>

475 

476`/plugin` 中的 **Errors** 选项卡显示这个用于启用的插件,其市场通过相对路径列出,例如 `./plugins/my-plugin`,当市场内该路径处不存在目录时。如果您维护市场,请更正条目的 `source` 路径或恢复文件夹。否则,向市场所有者报告消息。

477 

478`Marketplace directory not found at path: <path>` 意味着市场自己的目录缺失。对于您从本地路径添加的市场,该目录已移动或被删除。恢复它,或删除市场并从其新位置再次添加它。

479 

480<h3 id="no-plugins-available-or-no-marketplaces-configured">

481 `No plugins available` 或 `No marketplaces configured`

482</h3>

483 

484您打开了 `/plugin`,**Discover** 选项卡为空,或 `claude plugin marketplace list` 打印 `No marketplaces configured`。

485 

486没有注册市场,因此没有目录可显示。在会话中,添加官方市场 `anthropics/claude-plugins-official`:

487 

488```text theme={null}

489/plugin marketplace add anthropics/claude-plugins-official

490```

491 

492Claude Code 打印 `Successfully added marketplace: claude-plugins-official`,**Discover** 列出其插件。[Anthropic 市场](/docs/zh-CN/plugins/anthropic-marketplaces) 页面列出了您可以添加的其他市场。

493 

494<h3 id="marketplace-is-already-added-from-a-different-source">

495 `Marketplace "<name>" is already added from a different source`

496</h3>

497 

498您通过 [`/plugin install <plugin> --marketplace <source>`](/docs/zh-CN/plugins/install#add-a-marketplace-and-install-in-one-command) 确认添加市场,Claude Code 从该源获取的目录与您已从不同源添加的市场具有相同的名称。Claude Code 保留现有市场而不是替换它,插件未安装。

499 

500完整消息如下所示:

501 

502```text theme={null}

503Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.

504```

505 

506选择您想要的源:

507 

508* **您已添加的市场**:使用 `/plugin install <plugin>@<name>` 按名称从它安装

509* **新源**:运行 `/plugin marketplace remove <name>`,然后重试安装

510 

511<h3 id="cannot-add-marketplace-its-network-source-differs">

512 `Cannot add marketplace "<name>": its network source differs from the one declared for it in settings`

513</h3>

514 

515您运行了 `marketplace add`,该源处的目录与设置文件已在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下声明的市场具有相同的名称,但源不同。Claude Code 拒绝添加并注册任何内容。

516 

517消息以修复结尾:源必须与设置中为此名称声明的源匹配,或您更改声明。将您传递的源与该名称的 `extraKnownMarketplaces` 条目进行比较,包括其 `ref`、`path` 和 `headers`,然后执行以下操作之一:

518 

519* **使用声明的源**:从设置条目命名的源添加市场

520* **使用新源**:编辑或删除 `extraKnownMarketplaces` 条目,然后再次添加市场。如果托管设置声明它,请询问您的管理员

521 

522<h3 id="failed-to-install-from-the-plugin-menu">

523 `Failed to install: <plugin> (<reason>)`

524</h3>

525 

526您在 `/plugin` 菜单中选择了要安装的插件,它们都没有安装,菜单关闭并显示失败的摘要。

527 

528某些原因(例如失败克隆后 git 的输出)仅显示其第一行。当这样的原因被缩短时,摘要以 `Installing a plugin from its details (Enter) in /plugin shows its full error.` 结尾。

529 

530要做什么取决于摘要是否缩短了原因:

531 

532* 修复括号中原因命名的内容

533* 当原因被缩短时,运行 `/plugin`,在 **Discover** 选项卡上选择插件,然后按 **Enter** 从其详细信息安装它。如果安装在那里失败,详细信息视图显示整个错误

534 

535<h3 id="could-not-move-the-new-copy-of-this-plugin-version">

536 `Could not move the new copy of this plugin version into <path>`

537</h3>

538 

539当您安装插件时,Claude Code 下载其文件的新副本并将其移动到 [插件缓存](/docs/zh-CN/plugins/loading#find-plugins-on-disk) 中该版本的文件夹中。此消息意味着移动失败,通常是因为另一个程序在安装运行时使用了该文件夹。文件系统代码出现在括号中:

540 

541```text theme={null}

542Could not move the new copy of this plugin version into /home/user/.claude/plugins/cache/acme-tools/formatter/1.2.0: the new copy or the version folder stayed busy while the install ran (ENOTEMPTY) — usually a scanner still reading the freshly downloaded files, another program using that folder, or another process re-creating it. The previously installed copy was moved back. Run the install again once other Claude Code sessions or programs using that folder have finished.

543```

544 

545消息说明了之前安装的副本发生了什么,这告诉您插件是否仍然有效:

546 

547* `The previously installed copy was moved back`:您拥有的版本仍然安装

548* `had to be removed first`、`was not moved back` 或 `could not be moved back`:该插件版本在安装成功之前未安装

549* 没有这样的句子:没有早期副本,因此版本尚未安装

550 

551在 Windows 上,当另一个程序持有已安装的副本本身时,消息改为说该副本 `could not be replaced` 并且 `It was not replaced and the new copy was discarded`,因此您拥有的版本仍然安装。

552 

553`Left on disk` 列表命名缓存内的搁置文件夹。稍后安装该版本或插件缓存清理会删除它们,因此您不需要删除它们。

554 

555要修复安装:

556 

557* 关闭使用插件文件夹的其他 Claude Code 会话、编辑器和终端(在 `~/.claude/plugins/cache` 下),然后再次运行安装

558* 当消息说检查插件缓存文件夹的权限时,恢复您对其命名的文件夹的写入权限并释放磁盘空间,然后再次运行安装

559 

560<h3 id="dependency-errors">

561 依赖项错误

562</h3>

563 

564声明依赖项的插件在无法满足依赖项时可能无法安装或安装并保持禁用。消息在安装时或加载时到达您:

565 

566* **在安装期间**:拒绝作为安装的错误消息返回

567* **当插件加载时**:问题出现在 `claude plugin list` 和 `/plugin` **Errors** 选项卡中,Claude Code 保持受影响的插件禁用,直到您解决它

568 

569表格列出了每条消息及其修复。要作为作者声明依赖项,请参阅 [插件依赖项](/docs/zh-CN/plugins/dependencies)。

570 

571| 消息 | 含义 | 如何解决 |

572| :--------------------------------------------------------------------------------------------- | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |

573| `Dependency "<dep>" is not installed` | 声明的依赖项未安装。 | 使用 `claude plugin install <dep>@<marketplace>` 在您的 shell 中安装它,或卸载插件。如果依赖项的市场尚未注册,请添加它并在您的会话中运行 `/reload-plugins`,它安装它可以解决的缺失依赖项。 |

574| `Dependency "<dep>" is disabled` | 依赖项已安装但关闭。 | 启用依赖项,或卸载需要它的插件。 |

575| `Requires "<dep>" <range>, installed <version>` | 已安装的依赖项的版本在插件的声明范围之外。 | 将依赖项更新到范围内的版本,或卸载插件。 |

576| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 没有版本满足每个引脚它的范围。消息列出范围。 | 卸载或更新其中一个冲突的插件,或要求上游作者扩大其约束。 |

577| `... has version requirements too complex to intersect` 或 `has an invalid version requirement` | 范围不是有效的 semver,或组合范围无法相交。 | 修复无效范围或简化长 `\|\|` 链。 |

578| `... has no git tag satisfying <range>` | 依赖项的存储库在范围内没有 `<name>--v*` 标签。 | 检查上游是否使用该约定标记发布,或放宽范围。 |

579| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 依赖项在不同的市场中,默认情况下跨市场解析已关闭。 | 自己在相同的作用域安装依赖项,在您的 shell 中使用 `claude plugin install <dep>@<marketplace>` 加上您安装插件的 `--scope`,然后重试。 |

580 

581要以编程方式查看这些,请在您的 shell 中运行 `claude plugin list --json`。有问题的插件携带带有消息的 `errors` 字段和带有每个 `type` 的 `errorDetails` 字段:前两行是 `dependency-unsatisfied`,第三行是 `dependency-version-unsatisfied`。

582 

583<h2 id="plugin-installed-but-not-working">

584 插件已安装但不工作

585</h2>

586 

587安装成功,但插件的技能、hooks 或服务器没有做任何事情。从 [插件不出现或其技能不显示](#plugin-doesnt-appear-or-its-skills-dont-show-up) 开始,它告诉您 Claude Code 在哪里报告它加载的内容,然后匹配消息。

588 

589<h3 id="plugin-doesnt-appear-or-its-skills-dont-show-up">

590 插件不出现或其技能不显示

591</h3>

592 

593您安装了插件并键入 `/` 期望其技能,或要求 Claude 使用它,但什么都没有发生。

594 

595在更改任何内容之前检查插件的状态:

596 

597<Steps>

598 <Step title="确认插件已安装并启用">

599 运行 `/plugin` 并打开 **Installed**。确认插件已列出并启用。您的 shell 中的 `claude plugin list` 打印相同的列表,每个插件的版本、作用域和 `Status: ✔ enabled`。

600 </Step>

601 

602 <Step title="阅读 Errors 选项卡">

603 在同一面板中打开 **Errors** 选项卡。每个条目将消息与指导行配对。本节其余部分中的大多数消息来自该选项卡。

604 </Step>

605 

606 <Step title="如果您在此会话期间安装,请重新加载">

607 如果插件已安装且无错误,但您在此会话期间安装了它,请运行 `/reload-plugins`。它打印 `Reloaded:` 和插件、技能、代理、hooks 和服务器的计数。当某些失败时,它添加 `N errors during load. Run /plugin for details.`

608 </Step>

609</Steps>

610 

611如果插件加载无错误且其技能仍然不出现,下一步因您自己的插件和其他人的而异:

612 

613* **您正在构建的插件**:请参阅 [插件加载但其技能缺失](#plugin-loads-but-its-skills-are-missing)

614* **某人发布的插件**:在 `/plugin` 中打开 **Installed** 并打开插件的详细信息窗格,其中列出了插件包含的内容。在那里列出无技能的插件在您键入 `/` 时没有什么可提供的

615 

616<h3 id="run-reload-plugins-to-activate">

617 `Run /reload-plugins to activate.`

618</h3>

619 

620`/plugin` 中的安装摘要以 `Run /reload-plugins to activate.` 结尾,而不是 `Plugin is now active.`

621 

622Claude Code 在安装期间没有激活插件,要么是因为激活它会 [使提示缓存失效](/docs/zh-CN/prompt-caching#enabling-or-disabling-a-plugin),要么是因为激活尝试失败。

623 

624您不需要键入命令。面板关闭,Claude Code 为您运行 `/reload-plugins`,或将其排队直到流式传输的响应完成。

625 

626阅读该重新加载打印的内容:

627 

628* **`Reloaded:` 和插件、技能、代理、hooks 和服务器的计数**:插件现在处于活动状态。当某些加载失败时,该行添加 `N errors during load. Run /plugin for details.`

629* **`This reload changes MCP tools (...) — your next message will re-read the whole conversation instead of using the cache. Run /reload-plugins --force to apply.`**:重新加载会添加或删除插件 MCP 服务器,或 `LSP` 工具,并使您的提示缓存失效。对于 LSP 情况,该行以 `This reload adds the LSP tool` 或 `This reload removes the LSP tool` 开头。运行它带有 `--force` 以激活插件,或启动新会话

630 

631在 v2.1.268 之前,在安装期间未激活的安装保持待处理状态,直到您自己运行 `/reload-plugins`。

632 

633在 v2.1.246 之前,该摘要中的技能计数仅包括插件的 `commands/` 条目,因此重新加载可以加载插件的 `SKILL.md` 技能并仍然报告 `0 skills`。

634 

635<h3 id="plugin-not-cached-at">

636 `Plugin "<name>" not cached at <path>`

637</h3>

638 

639**Errors** 选项卡显示此行,指导为 `Run /plugin to refresh the plugin cache`。Claude Code 有插件的安装记录,但记录指向的目录缺失,例如在您清除缓存后。

640 

641从您的 shell 重新安装插件。`claude plugin install <name>@<marketplace>` 重新下载安装目录缺失的插件,即使其记录存在:

642 

643```shell theme={null}

644claude plugin install <name>@<marketplace>

645```

646 

647然后在您的会话中运行 `/reload-plugins`。**Errors** 选项卡条目消失,插件回到 **Installed** 下。

648 

649<h3 id="a-plugin-you-disabled-still-loads">

650 `Disabled in ~/.claude/settings.json but still loads`

651</h3>

652 

653您在 `~/.claude/settings.json` 中将插件设置为 `false`,其在 `claude plugin list` 或 `/plugin` 中的行显示此消息,后跟启用它的源,例如 `— project settings enable it, which overrides your user setting`。该更高优先级源中的 `true` 覆盖了您的用户设置。

654 

655要在您的机器上选择退出项目启用的插件,请在 `.claude/settings.local.json` 中将 id 设置为 `false`,它的优先级高于项目文件。对于消息可以命名的其他源,请参阅 [在用户设置中禁用但仍然加载](/docs/zh-CN/plugins/loading#disabled-in-user-settings-but-still-loads)。

656 

657如果 `claude plugin list` 改为将插件标记为 `required by your org`,则不涉及设置文件:您的组织在 claude.ai 上将该同步插件标记为必需,即使您之前禁用了它,它也会加载。请参阅 [从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins)。

658 

659<h3 id="plugin-is-enabled-in-project-settings-but-isnt-installed-here">

660 `Plugin "<name>" is enabled in project settings but isn't installed here`

661</h3>

662 

663**Errors** 选项卡显示此行用于您的项目的 `.claude/settings.json` 启用的插件,指导为 `Run claude plugin install <name>@<marketplace> --scope project to install it for this project`。

664 

665存储库的设置可以为打开它的每个人启用插件,但它们不安装它。当插件来自外部源(例如 GitHub 存储库或 npm 包)时,Claude Code 在您自己安装它之前不会下载它。从指导行在您的 shell 中运行命令,然后重新加载:

666 

667```shell theme={null}

668claude plugin install <name>@<marketplace> --scope project

669```

670 

671在您的会话中运行 `/reload-plugins` 后,**Errors** 选项卡条目消失,插件列在 **Installed** 下。

672 

673如果您的组织为您预安装插件,它通过托管设置而不是这样做。请参阅 [预安装和要求插件](/docs/zh-CN/plugins/org#pre-install-and-require-plugins)。

674 

675<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">

676 `Failed to load hooks from <path>` 和不触发的 hooks

677</h3>

678 

679插件的 hooks 不运行。要么 **Errors** 选项卡显示它们的加载失败,hooks 加载且您在成绩单中看到 `<Event> hook error` 通知,要么 hook 加载无错误且永远不触发。

680 

681<h4 id="hooks-fail-to-load">

682 Hooks 无法加载

683</h4>

684 

685**Errors** 选项卡显示以下消息之一:

686 

687* **`Failed to load hooks from <path>: <reason>`**:`hooks/hooks.json` 不是有效的 JSON 或失败 hooks 架构。原因命名解析或验证错误。修复文件。要在发布插件前在 `hooks/hooks.json` 中捕获 JSON 语法问题,请在您的 shell 中运行 `claude plugin validate <plugin-directory>`

688* **`hooks path not found: <path>`**:清单的 `hooks` 字段命名在该路径相对于插件根处不存在的文件。修复路径或添加文件

689 

690<h4 id="hook-error-notices-in-the-transcript">

691 成绩单中的 `hook error` 通知

692</h4>

693 

694形式为 `... hook error: Failed with non-blocking status code: <stderr>` 的通知意味着 hook 运行且其命令失败。例如,`Stop hook error: Failed with non-blocking status code: /bin/sh: node: command not found` 意味着 Claude Code 生成的 shell 找不到 `node`。安装它,或确保它在您启动 `claude` 的终端的 `PATH` 上。

695 

696对于任何其他错误,从插件目录自己运行 hook 的命令以查看完整输出,或使用 [调试日志](/docs/zh-CN/hooks#debug-hooks) 捕获完整 stderr。

697 

698<h4 id="hook-loads-but-never-fires">

699 Hook 加载但永远不触发

700</h4>

701 

702如果 hook 加载无错误但永远不触发,检查其定义然后观看它运行:

703 

704<Steps>

705 <Step title="检查事件名称">

706 事件名称区分大小写,因此确认您的完全匹配,例如 `PostToolUse`。

707 </Step>

708 

709 <Step title="检查匹配器">

710 确认 hook 的 `matcher` 匹配工具名称。

711 </Step>

712 

713 <Step title="故意触发事件">

714 对于 `PostToolUse` hook,要求 Claude 编辑文件。

715 </Step>

716 

717 <Step title="阅读调试日志">

718 打开 [调试日志](/docs/zh-CN/hooks#debug-hooks),它记录哪些 hooks 匹配。运行的 hook 显示在那里及其退出代码。

719 </Step>

720</Steps>

721 

722<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">

723 `Invalid MCP server config for "<server>"` 和不启动的 MCP 服务器

724</h3>

725 

726插件捆绑了 MCP 服务器,**Errors** 选项卡显示 `Invalid MCP server config for "<server>": <error>`,或服务器已列出但 `/mcp` 永远不显示它已连接。

727 

728<h4 id="invalid-mcp-server-config-for-server-error">

729 `Invalid MCP server config for "<server>": <error>`

730</h4>

731 

732服务器的配置通过架构检查,但 Claude Code 无法为此会话解决它。冒号后的文本命名原因并决定修复:

733 

734* **`Missing environment variables: <names>`**:在启动 Claude Code 的 shell 中设置这些变量,然后启动新会话

735* **`URL is unset or invalid`**:URL 使用的 `${user_config.*}` 选项未设置。运行 `/plugin configure <plugin>` 设置它

736* **`has an invalid MCP url`** 或 **`headersHelper for MCP server '<server>' references ${user_config.*}`**:插件自己的配置有问题。修复您的插件的 MCP 配置中的 `url` 或 `headersHelper`,或如果插件不是您的,向插件的作者报告。`headersHelper` 情况在 [插件命令参考 user\_config](/docs/zh-CN/errors#plugin-command-references-user-config) 下有其自己的条目

737 

738<h4 id="server-is-configured-but-never-connects">

739 服务器已配置但永远不连接

740</h4>

741 

742运行 `/mcp` 查看服务器的状态。当服务器健康时,`/mcp` 将其列为已连接。

743 

744要读取服务器在启动时打印的错误,请运行 `claude --debug` 并打开 `~/.claude/debug/<session-id>.txt` 处的日志。`--debug` 标志不打印到终端。

745 

746`.mcp.json` 中失败架构的服务器条目不出现在 **Errors** 选项卡中。Claude Code 删除该服务器并仅在该调试日志中记录 `Invalid MCP server config for <server> in <path>`。要在不加载插件的情况下找到条目,请在插件目录上在您的 shell 中运行 `claude plugin validate`,它将其报告为错误。

747 

748在 v2.1.281 之前,`claude plugin validate` 没有检查 `.mcp.json`。

749 

750<h4 id="server-works-with-plugin-dir-but-fails-after-install">

751 服务器使用 `--plugin-dir` 工作但安装后失败

752</h4>

753 

754您是插件的作者,当您使用 `--plugin-dir` 从其源目录加载插件时服务器启动,但一旦插件安装就失败。

755 

756Claude Code 将已安装的插件复制到其缓存中,因此仅从源目录工作的路径会中断。使用 `${CLAUDE_PLUGIN_ROOT}` 编写插件内的路径。

757 

758对于到达插件目录外的路径,请参阅 [插件引用的文件在其目录外找不到](#files-the-plugin-references-outside-its-directory-arent-found)。

759 

760<h3 id="language-server-doesnt-start">

761 语言服务器不启动、使用过多内存或报告错误的诊断

762</h3>

763 

764您安装了 [代码智能插件](/docs/zh-CN/plugins/code-intelligence),Claude 没有看到诊断,或语言服务器使用过多内存或报告不是真实的错误。

765 

766<h4 id="language-server-doesn’t-start">

767 语言服务器不启动

768</h4>

769 

770插件连接到您单独安装的语言服务器二进制文件,Claude Code 从您的 `PATH` 按命令名称生成它。

771 

772`/plugin` **Errors** 选项卡显示失败及其原因,例如 `Executable not found in $PATH: "<binary>"`,`claude --debug` 将其记录为 `LSP server <name> failed to start: <reason>`。

773 

774安装二进制文件并确认它在您启动 `claude` 的终端的 `PATH` 上,例如使用 `which typescript-language-server`。然后启动新会话。

775 

776<h4 id="language-server-uses-too-much-memory">

777 语言服务器使用过多内存

778</h4>

779 

780语言服务器(例如 `rust-analyzer` 和 `pyright`)索引整个项目。使用 `/plugin disable <plugin>` 在会话中禁用插件,改为依赖 Claude 的内置搜索工具。

781 

782<h4 id="false-positive-diagnostics-in-a-monorepo">

783 monorepo 中的假阳性诊断

784</h4>

785 

786未为工作区配置的语言服务器可以报告内部包的未解析导入。Claude Code 端没有什么可修复的,诊断不会阻止 Claude 编辑代码。

787 

788<h2 id="build-a-plugin">

789 构建插件

790</h2>

791 

792你正在开发插件并使用 `--plugin-dir` 加载它或从本地市场安装它。这些条目涵盖了你在开发插件时遇到的失败。要在每次更改后运行检查,请参阅[测试和调试](/docs/zh-CN/plugins/create#test-and-debug)。

793 

794两个也会影响插件用户的失败在[插件已安装但无法工作](#plugin-installed-but-not-working)下有相应条目:

795 

796* **未触发的 hook**:请参阅[未触发的 hook](#failed-to-load-hooks-from-and-hooks-that-dont-fire)

797* **无法启动的 MCP 服务器**:请参阅[无法启动的 MCP 服务器](#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start)

798 

799<h3 id="commands-path-not-found">

800 `commands path not found: <path>`

801</h3>

802 

803**Errors** 选项卡显示 `commands path not found: <absolute path>`,并提示 `Check that the path in your manifest or marketplace config is correct`。`skills`、`agents` 和 `hooks` 也会显示相同的消息。

804 

805Claude Code 根据插件根目录解析了你的 `plugin.json` 或市场条目中的路径,但在那里找不到任何内容。消息中的路径是它检查的绝对路径,因此请将其与磁盘上的内容进行比较。修复路径或创建目录,然后运行 `/reload-plugins`。

806 

807清单中的路径相对于插件根目录,以 `./` 开头。解析到插件根目录外的路径会被报告为 `<component> path escapes plugin directory`,并被丢弃。

808 

809<h3 id="plugin-dir-loads-a-plugin-with-no-components">

810 `--plugin-dir` 在市场根目录处不会加载 `plugins/` 下的插件

811</h3>

812 

813你启动了 `claude --plugin-dir <path>`,没有看到错误,但插件的 skills、agents 和 hooks 不存在。

814 

815`--plugin-dir` 接受插件的根目录,即包含 `.claude-plugin/plugin.json` 和 `skills/` 等组件目录的目录。如果你改为指向市场根目录,Claude Code 不会读取 `marketplace.json`,所以 `plugins/` 下的插件不会加载,你也看不到错误。在 v2.1.281 之前,Claude Code 将市场根目录作为一个以该目录命名的空插件加载。将标志指向插件目录本身:

816 

817```shell theme={null}

818claude --plugin-dir ./my-marketplace/plugins/my-plugin

819```

820 

821然后在 `/plugin` 中打开 **Installed**,插件的详情窗格会列出其组件。

822 

823<h3 id="files-the-plugin-references-outside-its-directory-arent-found">

824 插件引用的目录外文件找不到

825</h3>

826 

827插件使用 `--plugin-dir` 从其源目录工作,但安装后失败,出现关于 `../shared-utils` 等路径的错误。

828 

829Claude Code 将已安装的插件复制到其缓存中并从那里加载它,因此到达插件自身目录外的路径在缓存中指向任何东西都找不到。将共享文件移到插件目录内,或通过插件内的符号链接引用它们。有关缓存位置和路径解析方式,请参阅[在磁盘上查找插件](/docs/zh-CN/plugins/loading#find-plugins-on-disk)。

830 

831<h3 id="claude-plugin-root-shows-forward-slashes-on-windows">

832 `${CLAUDE_PLUGIN_ROOT}` 在 Windows 上显示正斜杠

833</h3>

834 

835在 Windows 上,插件 hook 接收 `${CLAUDE_PLUGIN_ROOT}` 为 `C:/Users/you/...` 而不是 `C:\Users\you\...`,期望反斜杠的脚本会中断。

836 

837Claude Code 在 Windows 上通过 Git Bash 运行 shell 形式的 hook,并故意以正斜杠 Win32 形式替换插件根目录。Bash 内置命令、MSYS 工具和本机 Windows 二进制文件都接受该形式。

838 

839如果你的脚本需要反斜杠,请将 hook 切换到保留本机路径的形式之一,如[执行形式和 shell 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)下所述:

840 

841* 执行形式的 hook,它使用 `args` 数组直接生成进程

842* 带有 `"shell": "powershell"` 的 hook

843 

844<h3 id="plugin-loads-but-its-skills-are-missing">

845 插件加载但其 skills 缺失

846</h3>

847 

848你的插件在 **Installed** 下列出,没有错误,但当你输入 `/` 时,不会提供其 skills。

849 

850Skills 从插件根目录的 `skills/` 加载,commands 从插件根目录的 `commands/` 加载。只有 `plugin.json` 属于 `.claude-plugin/`,`.claude-plugin/` 内的 `skills/` 目录不会被扫描。将目录移到插件根目录并运行 `/reload-plugins`。之后,插件的详情窗格在 `/plugin` 中列出 skills,输入 `/` 会提供它们。

851 

852每个 skill 是一个包含 `SKILL.md` 的目录。清单中指向 `SKILL.md` 文件而不是其目录的 `skills` 条目会被报告为 `path is a file; skills entries must be directories containing SKILL.md`。

853 

854<h3 id="skill-loads-but-claude-never-invokes-the-skill">

855 Skill 加载但 Claude 从不调用该 skill

856</h3>

857 

858你的插件的 skill 在你输入其 `/<plugin>:<skill>` 命令时运行,但 Claude 从不在响应普通请求时调用它。

859 

860按顺序检查这些原因:

861 

862* **skill 设置 `disable-model-invocation: true`**:设置该字段后,只有你可以调用该 skill。[创建你的第一个插件](/docs/zh-CN/plugins/create#create-your-first-plugin)中的模板 skill 设置了它。从你希望 Claude 自行调用的 skill 中删除该行。[控制谁调用 skill](/docs/zh-CN/skills#control-who-invokes-a-skill) 涵盖该字段

863* **描述与人们的提问方式不匹配**:完成[Skill 未触发](/docs/zh-CN/skills#skill-not-triggering)中的检查

864* **描述被截断**:当安装了许多 skills 时,Claude Code 会缩短描述以适应列表的字符预算,这可能会删除 Claude 需要匹配请求的关键字。请参阅[Skill 描述被截断](/docs/zh-CN/skills#skill-descriptions-are-cut-short)

865 

866要衡量 skill 在现实提示中触发的频率,而不是一次检查一个,请使用 [`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite) 编写一个 eval 案例,并在每次描述更改后使用 `claude plugin eval` 运行它。

867 

868<h3 id="is-not-a-plugin-or-skill-folder">

869 `<directory> is not a plugin or skill folder` 来自 `claude plugin eval init`

870</h3>

871 

872你从不是插件根目录的目录(如你的主目录或保存插件在子目录中的存储库根目录)运行了 `claude plugin eval init`。`init` 在工作目录下写入套件,所以它会停止而不是创建插件永远看不到的 `evals/` 目录。

873 

874更改到插件的根目录(保存 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录),然后再次运行命令。要有意在其他地方搭建套件,请传递 `--eval-dir`。请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)。

875 

876<h3 id="the-userconfig-dialog-never-appears">

877 `userConfig` 对话框从不出现

878</h3>

879 

880你的插件声明了 `userConfig` 选项,但安装时没有出现配置对话框。

881 

882交互式安装显示对话框,shell 命令改为将值作为标志:

883 

884* **在会话中 `/plugin install`,或 `/plugin` 中的 Discover 选项卡**:对话框是此交互式安装的一部分

885* **在你的 shell 中 `claude plugin install`**:从不提示 `userConfig` 值。它保存你传递的任何 `--config KEY=VALUE` 值,当选项保持未设置时,它打印 `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` 当任何未设置的选项是必需的时,`(M required)` 跟在 `not yet set` 后面。

886 

887如果你从 shell 安装,请使用 `--config` 传递值,每个选项一个标志:

888 

889```shell theme={null}

890claude plugin install my-plugin@my-marketplace --config api_url=https://example.com

891```

892 

893当每个选项都设置后,安装输出不会包含 `not yet set` 行。要在之后打开对话框,请在会话中运行 `/plugin configure my-plugin@my-marketplace`。

894 

895如果你传递清单未声明的 `--config` 键,插件仍会安装,命令会打印 `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` 后跟插件声明的键。

896 

897<h3 id="claude-plugin-validate-reports-errors">

898 `claude plugin validate` 报告错误

899</h3>

900 

901你运行了 `claude plugin validate <path>`,或在会话中运行了 `/plugin validate <path>`,它打印了 `Found N errors` 和 `Validation failed`,然后以代码 1 退出。

902 

903验证器读取你给定的路径处的清单:插件目录的 `.claude-plugin/plugin.json`,或市场目录的 `.claude-plugin/marketplace.json`。对于市场,它在条目自身清单中的问题前加上条目索引,如 `plugins[1] plugin.json → json: ...`。

904 

905该表涵盖停止验证的消息和两个警告 `No frontmatter block found` 和 `Unknown field '<key>'`,当你传递 `--strict` 时它们才会停止。其他警告,如缺少描述,未列出。

906 

907| 消息 | 原因 | 修复 |

908| :------------------------------------------------------------------------------------------------------- | :------------------------------------------------ | :-------------------------------------------------------- |

909| `File not found: <path>` | 路径没有清单,或不存在。 | 针对插件或市场根目录运行命令,即包含 `.claude-plugin/` 的目录。 |

910| `No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json` | 目录没有 `.claude-plugin/` 清单。 | 创建清单,或指向正确的目录。 |

911| `Invalid JSON syntax: <parse error>` | 清单或 `hooks/hooks.json` 不是有效的 JSON。 | 修复 JSON。在你修复 `hooks/hooks.json` 之前,会话会加载插件而不包含该文件中的 hook。 |

912| `Path not found: <path>. The runtime loader will report this as a load failure.` | 清单中的组件路径不存在。 | 修复路径或创建目录。 |

913| `Path contains ".." which could be a path traversal attempt: <path>` | 组件路径逃离插件目录。 | 使用插件根目录内的路径。 |

914| `Path is a file; skills entries must be directories containing SKILL.md` | `skills` 条目指向 `SKILL.md` 而不是其目录。 | 指向父目录,或 `.` 表示根级 `SKILL.md`。 |

915| `No frontmatter block found` 或 `YAML frontmatter failed to parse: <error>` | skill、agent 或 command 文件缺少或有无效的 YAML frontmatter。 | 在 `---` 分隔符之间添加或修复 frontmatter。在验证插件目录时报告。 |

916| `Unknown field '<key>'` | 清单有一个架构未定义的字段。 | 删除它,或使用消息建议的名称。Claude Code 在加载时忽略未知字段。 |

917 

918在每次修复后再次运行命令,直到它不打印任何错误。

919 

920`plugin.json` 字段在[清单参考](/docs/zh-CN/plugins/manifest-reference)上,市场级消息在[市场验证错误](#marketplace-validation-errors)下。

921 

922<h3 id="plugin-has-conflicting-manifests">

923 `Plugin <name> has conflicting manifests`

924</h3>

925 

926插件加载失败,显示 `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components.`

927 

928插件有自己的 `plugin.json`,其市场条目设置 `strict: false` 同时声明 `commands`、`agents`、`skills`、`hooks`、`outputStyles` 或 `themes` 中的任何一个。从条目中删除这些字段,或在条目中设置 `strict: true`,以便 Claude Code 将它们附加到 `plugin.json`。请参阅[严格模式](/docs/zh-CN/plugins/marketplace-reference#strict-mode)。

929 

930<h3 id="warning-no-commands-found-in-plugin-custom-directory">

931 `Warning: No commands found in plugin <name> custom directory`

932</h3>

933 

934当插件加载时,`~/.claude/debug/<session-id>.txt` 处的 `claude --debug` 日志记录 `Warning: No commands found in plugin <name> custom directory: <path>. Expected .md files or SKILL.md in subdirectories.` 会话或 **Errors** 选项卡中不会出现任何内容。

935 

936清单中的 `commands` 路径存在但不包含 `.md` 文件,也不包含子目录中的 `SKILL.md`。添加 command 文件,或从清单中删除路径。

937 

938<h2 id="host-a-marketplace">

939 托管市场

940</h2>

941 

942您发布市场,用户报告错误,或您自己的验证失败。这些条目适用于市场所有者。

943 

944<h3 id="plugins-with-relative-paths-fail-in-url-based-marketplaces">

945 相对路径的插件在基于 URL 的市场中失败

946</h3>

947 

948用户使用 `https://example.com/marketplace.json` URL 添加了您的市场。其 `source` 是相对路径(例如 `./plugins/my-plugin`)的插件安装失败,显示 `its marketplace entry path does not stay inside the marketplace directory`。已安装的插件无法加载,显示 `Plugin source path refused`。两条消息都有 [错误参考条目](/docs/zh-CN/errors#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory)。

949 

950当用户添加基于 URL 的市场时,Claude Code 仅下载 `marketplace.json` 文件本身。它不从该服务器通过相对路径获取插件文件,因此条目中的相对路径指向从未获取的目录。给每个条目一个 Claude Code 可以自己获取的源,例如 GitHub 存储库:

951 

952```json theme={null}

953{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }

954```

955 

956或者,在 git 存储库中托管市场并告诉用户使用存储库 URL 添加它。对于 git 源,Claude Code 克隆整个存储库,因此相对路径解析。源类型在 [市场参考](/docs/zh-CN/plugins/marketplace-reference) 上。

957 

958<h3 id="marketplace-validation-errors">

959 市场验证错误

960</h3>

961 

962您从市场目录运行了 `claude plugin validate .`,它在市场文件本身上报告了错误或警告。

963 

964`claude plugin validate` 也验证其 `source` 是本地路径的每个条目,并在条目的 `version` 与插件自己的清单不同时警告。

965 

966表格列出了市场级消息。条目级消息是 [`claude plugin validate` 报告错误](#claude-plugin-validate-reports-errors) 下的插件消息,前缀为 `plugins[N] plugin.json →`。

967 

968| 消息 | 类型 | 修复 |

969| :----------------------------------------------------------------------------------------------------------------------- | :- | :------------------------------------------------------------------------ |

970| `Duplicate plugin name "<name>" found in marketplace` | 错误 | 给每个插件一个唯一的 `name`。 |

971| `Path contains "..": <path>` 在 `plugins[N].source` 下 | 错误 | 使用相对于市场根的路径,不带 `..` 段。 |

972| `Marketplace name cannot contain control or bidirectional-formatting characters` | 错误 | 从名称中删除字符,例如转义或换行符。 |

973| `Plugin name cannot contain control or bidirectional-formatting characters` | 错误 | 从插件 `name` 中删除字符。 |

974| `Marketplace has no plugins defined` | 警告 | 至少添加一个条目到 `plugins`。 |

975| `No marketplace description provided` | 警告 | 添加顶级 `description`。 |

976| `Plugin name "<name>" is not kebab-case` 在 `plugins[N] plugin.json → name` 下 | 警告 | 重命名为小写字母、数字和连字符。Claude Code 接受其他形式,但 claude.ai 市场同步拒绝它们。 |

977| `Entry declares version "<a>" but <path>/plugin.json says "<b>"` | 警告 | 更新条目以匹配 `plugin.json`,这在安装时是权威的。 |

978| `Marketplace name "<name>" is reserved in Claude Desktop` | 警告 | 重命名市场。Claude Desktop 的托管市场同步拒绝任何大小写的 `org`、`org-provisioned` 和 `unknown`。 |

979| `Marketplace name "<name>" is not accepted by Claude Desktop` 或 `Plugin name "<name>" is not accepted by Claude Desktop` | 警告 | 重命名为最多 128 个字符的字母、数字、`.`、`_` 和 `-`,以字母或数字开头。 |

980 

981在 v2.1.247 之前,包含控制或双向格式化字符的市场名称仅报告为 `Marketplace name impersonates an official Anthropic/Claude marketplace`。

982 

983<h2 id="blocked-by-your-organization">

984 被您的组织阻止

985</h2>

986 

987您的组织部署了限制插件的托管设置,命令被拒绝,显示策略消息。这些条目命名每个拒绝背后的设置,以便您知道要求管理员什么。对于管理员端,请参阅 [为您的组织管理插件](/docs/zh-CN/plugins/org)。

988 

989<h3 id="marketplace-source-is-blocked-by-enterprise-policy">

990 `Marketplace source '<source>' is blocked by enterprise policy`

991</h3>

992 

993您运行了 `/plugin marketplace add`、`update` 或安装,Claude Code 拒绝了此行。对于 GitHub 或 git 源,主机跟随括号中的源,如 `'github:owner/repo' (github.com)`。

994 

995您的管理员在托管设置中设置了 `blockedMarketplaces` 或 `strictKnownMarketplaces`,此源不被允许。要求您的管理员允许源,或添加消息列出的允许源之一。

996 

997将消息的其余部分与看到的内容匹配:

998 

999* **`Allowed sources: <list>`**:阻止来自 `strictKnownMarketplaces` 允许列表而不是 `blockedMarketplaces` 阻止列表

1000* **`No external marketplaces are allowed.`**:`strictKnownMarketplaces` 允许列表为空

1001* **一个 `Tip:` 说简写假设 github.com**:允许列表允许 git 主机按主机名,您传递的 `owner/repo` 简写指向 github.com。如果存储库位于您的内部主机,使用其完整 URL 再次添加它,例如 `git@your-git-host.com:owner/repo.git`

1002 

1003您在策略变得更严格之前添加的市场停止刷新,因为策略在每次刷新时应用。

1004 

1005<h3 id="marketplace-is-not-in-the-allowed-marketplace-list">

1006 `Marketplace "<name>" is not in the allowed marketplace list`

1007</h3>

1008 

1009**Errors** 选项卡显示此行,或 `Marketplace "<name>" is blocked by enterprise policy`,用于您已注册的市场。

1010 

1011相同的托管设置,阻止 [市场源](#marketplace-source-is-blocked-by-enterprise-policy),在加载时应用。`strictKnownMarketplaces` 不包括此市场,或 `blockedMarketplaces` 命名它,因此 Claude Code 停止加载它及其插件。对于允许列表变体,指导行显示允许的源,或 `Contact your administrator to configure allowed marketplace sources`。对于阻止列表变体,它读取 `This marketplace source is explicitly blocked by your administrator`。

1012 

1013<h3 id="plugin-is-blocked-by-your-organizations-policy-and-cannot-be-installed">

1014 `Plugin "<name>" is blocked by your organization's policy and cannot be installed`

1015</h3>

1016 

1017安装被拒绝,显示此行,启用显示相同的行,以 `cannot be enabled` 结尾,或安装或更新显示命名原因的行:`Plugin "<name>" is from marketplace "<marketplace>", which is blocked by your organization's policy`,或 `Plugin "<name>" depends on "<dep>", which is blocked by your organization's policy`。

1018 

1019托管设置阻止此插件、其市场或它需要的依赖项。要求您的管理员哪个条目适用。阻止的依赖项意味着插件在依赖项的市场被允许之前无法安装。

1020 

1021<h3 id="plugin-dir-is-disabled-by-your-organizations-managed-settings-disables">

1022 `--plugin-dir is disabled by your organization's managed settings (disableSideloadFlags)`

1023</h3>

1024 

1025您使用 `--plugin-dir`、`--plugin-url`、`--agents` 或 `--mcp-config` 启动了 `claude`。Claude Code 以此消息退出并显示 `Plugins, custom agents, and MCP servers can only be loaded from sources your administrator has approved.`

1026 

1027您的管理员在托管设置中设置了 `disableSideloadFlags`,它关闭了从任意路径加载插件、代理和服务器的标志。改为从批准的市场加载插件,或要求您的管理员删除设置。

1028 

1029`/plugin` **Errors** 选项卡中的相关消息是 `--plugin-dir copy of "<name>" ignored: plugin is locked by managed settings`。托管设置按名称启用或禁用该插件,Claude Code 忽略您的 `--plugin-dir` 副本,以便标志无法覆盖策略。

1030 

1031<h3 id="plugins-from-claude-skills-are-blocked-by-your-organizations-managed-s">

1032 `Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`

1033</h3>

1034 

1035您运行了 `claude plugin init` 或 `claude plugin enable`,它停止了此行。消息命名 `strictKnownMarketplaces or blockedMarketplaces` 并要求您的管理员将 `{"source":"skills-dir"}` 添加到 `strictKnownMarketplaces` 或从 `blockedMarketplaces` 中删除它。

1036 

1037`skills-dir` 源代表 Claude Code 从您的 `~/.claude/skills/` 目录加载的插件。要求您的管理员进行消息命名的更改。

1038 

1039<h3 id="command-sourced-plugins-are-disabled-by-your-organizations-managed-set">

1040 `Command-sourced plugins are disabled by your organization's managed settings`

1041</h3>

1042 

1043您安装或更新了具有 `command` 源的插件,它停止了此行并显示 `The plugin was not installed or updated and its command was not run.`

1044 

1045您的管理员设置了 `disableCommandPluginSources`,因此 Claude Code 拒绝运行市场声明的生成插件的命令。仅设置 `allowManagedHooksOnly` 在 `disableCommandPluginSources` 未设置时具有相同的效果。要求您的管理员插件是否可以从策略允许的源类型发布。

1046 

1047<h3 id="marketplace-is-seed-managed">

1048 `Marketplace '<name>' is seed-managed`

1049</h3>

1050 

1051您运行了 `claude plugin marketplace update <name>`,它失败,显示 `Marketplace '<name>' is seed-managed (<dir>)` 和要求您的管理员的提示。

1052 

1053操作员通过 `CLAUDE_CODE_PLUGIN_SEED_DIR` 预填充了此市场,Claude Code 将种子管理的市场视为只读。批量 `marketplace update` 跳过它并更新其他。

1054 

1055要更改市场的内容,要求维护种子镜像的人更新它。有关该过程,请参阅 [种子容器和 CI](/docs/zh-CN/plugins/org#seed-containers-and-ci)。

1056 

1057<h2 id="next-steps">

1058 后续步骤

1059</h2>

1060 

1061* [插件加载参考](/docs/zh-CN/plugins/loading):为什么作用域、缓存和优先级的行为方式如此

1062* [插件命令参考](/docs/zh-CN/plugins/cli-reference):`claude plugin` 命令的标志、默认值、输出和退出代码

1063* [安装和管理插件](/docs/zh-CN/plugins/install):从开始的安装步骤

1064* [为您的组织管理插件](/docs/zh-CN/plugins/org#troubleshoot-policy):管理员的策略端故障排除

Details

135 启用或禁用插件135 启用或禁用插件

136</h3>136</h3>

137 137 

138当您启用或禁用[插件](/docs/zh-CN/plugins)时,更改的成本取决于插件提供的组件类型。下面的情况涵盖每个组件类型、Claude Code 何时应用更改以及在同一会话中再次禁用插件时会发生什么。138当您启用或禁用[插件](/docs/zh-CN/plugins/overview)时,更改的成本取决于插件提供的组件类型。下面的情况涵盖每个组件类型、Claude Code 何时应用更改以及在同一会话中再次禁用插件时会发生什么。

139 139 

140<h4 id="plugin-components-that-keep-the-cache">140<h4 id="plugin-components-that-keep-the-cache">

141 保持缓存的插件组件141 保持缓存的插件组件


147 提供 MCP 服务器的插件147 提供 MCP 服务器的插件

148</h4>148</h4>

149 149 

150当您启用或禁用提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers) 的插件时,Claude Code 遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:150当您启用或禁用提供 [MCP 服务器](/docs/zh-CN/plugins/components#mcp-servers) 的插件时,Claude Code 遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:

151 151 

152* 如果 Claude Code 延迟服务器的工具,它会保持缓存。152* 如果 Claude Code 延迟服务器的工具,它会保持缓存。

153* 如果 Claude Code 将它们加载到前缀中,下一个请求会重新读取整个对话。153* 如果 Claude Code 将它们加载到前缀中,下一个请求会重新读取整个对话。


156 代码智能插件156 代码智能插件

157</h4>157</h4>

158 158 

159当您启用[代码智能插件](/docs/zh-CN/discover-plugins#code-intelligence)时,Claude 会获得 [LSP 工具](/docs/zh-CN/tools-reference#lsp-tool-behavior)。159当您启用[代码智能插件](/docs/zh-CN/plugins/code-intelligence)时,Claude 会获得 [LSP 工具](/docs/zh-CN/tools-reference#lsp-tool-behavior)。

160 160 

161<h4 id="when-plugin-changes-apply">161<h4 id="when-plugin-changes-apply">

162 插件更改何时应用162 插件更改何时应用

163</h4>163</h4>

164 164 

165您在 `/plugin` 菜单中所做的更改会通过 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 进行,Claude Code 在您关闭菜单时为您运行。您需要支付成本,无论是追加公告还是完整重新读取,都在更改应用后的第一个回合。Claude Code 也可以自行应用更改:165您在 `/plugin` 菜单中所做的更改会通过 [`/reload-plugins`](/docs/zh-CN/plugins/cli-reference#reload-plugins) 进行,Claude Code 在您关闭菜单时为您运行。您需要支付成本,无论是追加公告还是完整重新读取,都在更改应用后的第一个回合。Claude Code 也可以自行应用更改:

166 166 

167* 对于具有 `command` 源的插件,Claude Code [可以自行重新加载插件](/docs/zh-CN/plugin-marketplaces#when-claude-code-re-runs-the-command)。167* 对于具有 `command` 源的插件,Claude Code [可以自行重新加载插件](/docs/zh-CN/plugins/loading#when-a-command-source-re-runs)。

168* 当您[从 `/plugin` 界面安装插件](/docs/zh-CN/discover-plugins#install-plugins)时,Claude Code 可以在安装期间激活它。安装摘要会告诉您它是否这样做了。168* 当您[从 `/plugin` 界面安装插件](/docs/zh-CN/plugins/install#install-a-plugin)时,Claude Code 可以在安装期间激活它。安装摘要会告诉您它是否这样做了。

169* 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)时,Claude Code 会在移动过程中应用新目录的设置启用的插件,而不会出现保持 `/reload-plugins` 的完整重新读取警告。169* 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)时,Claude Code 会在移动过程中应用新目录的设置启用的插件,而不会出现保持 `/reload-plugins` 的完整重新读取警告。

170* 在交互式会话中,当您在使用 `--plugin-dir` 传递的[插件文件夹](/docs/zh-CN/plugins#test-your-plugins-locally)中添加或删除插件时,更改会立即应用。如果应用它会触发完整重新读取,Claude Code 会保持更改并显示运行 `/reload-plugins` 的通知。需要 Claude Code v2.1.265 或更高版本。170* 在交互式会话中,当您在使用 `--plugin-dir` 传递的[插件文件夹](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session)中添加或删除插件时,更改会立即应用。如果应用它会触发完整重新读取,Claude Code 会保持更改并显示运行 `/reload-plugins` 的通知。需要 Claude Code v2.1.265 或更高版本。

171 171 

172当 `/reload-plugins` 运行且重新加载会触发完整重新读取时,Claude Code 会显示警告并不应用重新加载。运行 `/reload-plugins --force` 以无论如何应用它。172当 `/reload-plugins` 运行且重新加载会触发完整重新读取时,Claude Code 会显示警告并不应用重新加载。运行 `/reload-plugins --force` 以无论如何应用它。

173 173 

174`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`,当您直接将其输入到会话中时。需要 Claude Code v2.1.260 或更高版本。174`/reload-plugins` 也在没有交互式终端的会话中运行,例如桌面应用、Agent SDK 和[非交互式模式](/docs/zh-CN/headless)与 `-p`,当您直接将其输入到会话中时。需要 Claude Code v2.1.260 或更高版本。

175 175 

176在这些会话中,重新加载应用除了插件 MCP 服务器更改之外的所有内容,这些[在您的下一个会话中生效](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting),因此在会话中途永远不会成本完整重新读取。176在这些会话中,重新加载应用除了插件 MCP 服务器更改之外的所有内容,这些[在您的下一个会话中生效](/docs/zh-CN/plugins/cli-reference#reload-plugins),因此在会话中途永远不会成本完整重新读取。

177 177 

178<h4 id="plugins-you-enable-and-then-disable-in-one-session">178<h4 id="plugins-you-enable-and-then-disable-in-one-session">

179 您在一个会话中启用然后禁用的插件179 您在一个会话中启用然后禁用的插件

Details

626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);

627 };627 };

628 }, []);628 }, []);

629 const SAFE_HREF = /^(\/(?![\/\\\s])|#|https?:\/\/)/;

629 const linkify = s => {630 const linkify = s => {

630 const out = [];631 const out = [];

631 let last = 0;632 let last = 0;

632 const re = /\[([^\]]+)\]\(([^)]+)\)/g;633 const re = /\[([^\]]+)\]\(([^)]+)\)/g;

633 for (let m; m = re.exec(s); ) {634 for (let m; m = re.exec(s); ) {

634 if (m.index > last) out.push(s.slice(last, m.index));635 if (m.index > last) out.push(s.slice(last, m.index));

635 out.push(<a key={m.index} href={doc(m[2])}>{m[1]}</a>);636 out.push(SAFE_HREF.test(m[2]) ? <a key={m.index} href={doc(m[2])}>{m[1]}</a> : m[1]);

636 last = re.lastIndex;637 last = re.lastIndex;

637 }638 }

638 if (last < s.length) out.push(s.slice(last));639 if (last < s.length) out.push(s.slice(last));


776 </div>777 </div>

777 <div className="pl-label">{L.whyWorks}</div>778 <div className="pl-label">{L.whyWorks}</div>

778 <div className="pl-teaches">{linkify(p.teaches)}</div>779 <div className="pl-teaches">{linkify(p.teaches)}</div>

779 {p.nextHref && p.next && <div className="pl-next">780 {p.nextHref && p.next && SAFE_HREF.test(p.nextHref) && <div className="pl-next">

780 <span className="pl-next-label">{L.makeItStick}</span>781 <span className="pl-next-label">{L.makeItStick}</span>

781 <a href={doc(p.nextHref)}>{codeify(p.next)} →</a>782 <a href={doc(p.nextHref)}>{codeify(p.next)} →</a>

782 </div>}783 </div>}


1202 },1203 },

1203 "migrate-a-pattern-across": {1204 "migrate-a-pattern-across": {

1204 title: "在代码库中迁移模式",1205 title: "在代码库中迁移模式",

1205 teaches: "描述旧模式和新模式。要求 Claude 首先识别每个地方意味着调用站点在响应中列出,所以你可以检查没有遗漏。对于跨许多文件的迁移,运行 [/batch](/docs/zh-CN/commands)。Claude 将工作分成单位供你批准,然后后台子代理进行更改并为每个单位打开一个拉取请求。"1206 teaches: "描述旧模式和新模式。要求 Claude 首先识别每个地方意味着调用站点在响应中列出,所以你可以检查没有遗漏。对于跨许多文件的迁移,运行 [/batch](/docs/zh-CN/commands)。Claude 将工作分成单位供你批准,然后后台子代理进行更改。"

1206 },1207 },

1207 "optimize-against-a-measurable": {1208 "optimize-against-a-measurable": {

1208 title: "针对可测量目标进行优化",1209 title: "针对可测量目标进行优化",

Details

252<Note>252<Note>

253 受信任的设备目前处于测试阶段。功能和特性可能会随着体验的完善而演变。253 受信任的设备目前处于测试阶段。功能和特性可能会随着体验的完善而演变。

254 254 

255 受信任的设备在 Team 和 Enterprise 计划中可用。在所有者启用它之前,它默认处于关闭状态。255 受信任的设备在 Pro、Max、Team 和 Enterprise 计划中可用,默认处于关闭状态。在 Team 和 Enterprise 计划中,所有者为组织启用它。在 Pro 和 Max 计划中,您可以在设置中的 Cowork 或 Account 页面上自行启用**需要受信任的设备**。

256</Note>256</Note>

257 257 

258受信任的设备是一个组织范围的设置,要求成员在从 claude.ai、Claude 移动应用或 Claude Desktop 查看或控制 Remote Control 会话之前验证其设备。它将 Remote Control 访问权限与已知设备和最近的身份验证绑定,而不仅仅是已登录的账户。258受信任的设备要求您的组织的每个成员,或在 Pro 或 Max 计划上仅您自己,在从 claude.ai、Claude 移动应用或 Claude Desktop 查看或控制 Remote Control 会话之前验证其设备。它将 Remote Control 访问权限与已知设备和最近的身份验证绑定,而不仅仅是已登录的账户。

259 259 

260当设置打开时,与 Remote Control 会话交互需要以下两项:260当设置打开时,与 Remote Control 会话交互需要以下两项:

261 261 


267该设置仅适用于 Remote Control。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。267该设置仅适用于 Remote Control。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。

268 268 

269<h3 id="enable-trusted-devices-for-your-organization">269<h3 id="enable-trusted-devices-for-your-organization">

270 为您的组织启用受信任的设备270 为 Team 或 Enterprise 组织启用受信任的设备

271</h3>271</h3>

272 272 

273所有者从 Claude Code 管理员控制台启用该设置。273所有者从 claude.ai 组织设置启用该设置。

274 274 

275<Steps>275<Steps>

276 <Step title="打开 Claude Code 管理员设置">276 <Step title="转到 Capabilities 页面">

277 转到 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)。**需要受信任的设备**切换出现在 Remote Control 设置下方。277 转到 [**Organization settings > Capabilities > Remote sessions**](https://claude.ai/admin-settings/capabilities)。**需要受信任的设备**切换出现在该部分。

278 </Step>278 </Step>

279 279 

280 <Step title="打开需要受信任的设备">280 <Step title="打开需要受信任的设备">

sandboxing.md +5 −3

Details

42 </Step>42 </Step>

43 43 

44 <Step title="运行 Bash 命令">44 <Step title="运行 Bash 命令">

45 要求 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令可以写入工作目录、会话临时目录以及任何你用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` [添加的目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。命令第一次需要新的网络域时,Claude Code 会提示批准;在 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 中,Claude 改为在 [命令本身上命名](#per-command-allowed-domains-in-auto-mode) 命令需要的主机供分类器与其一起审查。45 要求 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令可以写入工作目录、会话临时目录以及任何你用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` [添加的目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。

46 

47 命令第一次需要新的网络域时,Claude Code 会提示批准;在 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 中,Claude 改为在 [命令本身上命名](#per-command-allowed-domains-in-auto-mode) 命令需要的主机供分类器与其一起审查。

46 48 

47 无法沙箱化运行的命令会回退到常规权限流程。Claude Code 将其权限提示标题为"Bash 命令(非沙箱化)"而不是"Bash 命令",这样你可以看出哪些命令在沙箱外运行。要扩大或缩小沙箱允许的范围,请参阅 [配置沙箱](#configure-sandboxing)。49 无法沙箱化运行的命令会回退到常规权限流程。Claude Code 将其权限提示标题为"Bash 命令(非沙箱化)"而不是"Bash 命令",这样你可以看出哪些命令在沙箱外运行。要扩大或缩小沙箱允许的范围,请参阅 [配置沙箱](#configure-sandboxing)。

48 50 


145* 裸 `Bash` 询问规则,或等效的 `Bash(*)` 形式,对于运行沙箱化的命令会被跳过;它仍然适用于回退到常规权限流程的命令。在 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,该规则不会被跳过:它也会对沙箱化命令提示,包括只读命令。在 v2.1.212 之前,跳过也适用于 Plan Mode147* 裸 `Bash` 询问规则,或等效的 `Bash(*)` 形式,对于运行沙箱化的命令会被跳过;它仍然适用于回退到常规权限流程的命令。在 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,该规则不会被跳过:它也会对沙箱化命令提示,包括只读命令。在 v2.1.212 之前,跳过也适用于 Plan Mode

146 148 

147<Info>149<Info>

148 自动允许模式独立于你的权限模式设置工作,除了在 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,以及在自动模式中,对于携带 [per-command allowed domains](#per-command-allowed-domains-in-auto-mode) 的命令。即使你不在"接受编辑"模式中,启用自动允许时沙箱化的 Bash 命令也会自动运行。这意味着在沙箱边界内修改文件的 Bash 命令将执行而不提示,即使在 Manual 模式下,文件编辑工具会提示。150 自动允许模式独立于你的权限模式设置工作,除了在 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,以及在自动模式中,对于携带 [per-command allowed domains](#per-command-allowed-domains-in-auto-mode) 的命令,以及 [服务器端分类器审查](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions) 自动模式中的沙箱化命令。即使你不在"接受编辑"模式中,启用自动允许时沙箱化的 Bash 命令也会自动运行。这意味着在沙箱边界内修改文件的 Bash 命令将执行而不提示,即使在 Manual 模式下,文件编辑工具会提示。

149 151 

150 在 Plan Mode 中,自动允许不会扩大批准;请参阅 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 了解 Claude Code 如何在你计划时限制命令。在 v2.1.212 之前,自动允许在 Plan Mode 中也无需提示地运行沙箱化命令。152 在 Plan Mode 中,自动允许不会扩大批准;请参阅 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 了解 Claude Code 如何在你计划时限制命令。在 v2.1.212 之前,自动允许在 Plan Mode 中也无需提示地运行沙箱化命令。

151</Info>153</Info>


314 保护凭证316 保护凭证

315</h3>317</h3>

316 318 

317`sandbox.credentials` 设置声明凭证文件和环境变量,以保护其免受沙箱化命令的访问。每个条目命名一个文件路径或环境变量以及一个 `mode`。专用的 `credentials` 块将凭证规则分组在一起,并与常规文件系统规则分开。需要 Claude Code v2.1.187 或更高版本。319`sandbox.credentials` 设置声明凭证文件和环境变量,以保护其免受沙箱化命令的访问。每个条目命名一个文件路径或环境变量以及一个 `mode`。专用的 `credentials` 块将凭证规则分组在一起,并与常规文件系统规则分开。

318 320 

319对于 `"mode": "deny"` 的条目,文件路径在沙箱内被拒绝读取,与 `filesystem.denyRead` 应用的限制相同,环境变量在每个沙箱化命令运行前被取消设置。文件保护是文件系统层的一部分,因此如果你[禁用文件系统隔离](#disable-filesystem-isolation),它不适用;环境变量保护仍然适用。321对于 `"mode": "deny"` 的条目,文件路径在沙箱内被拒绝读取,与 `filesystem.denyRead` 应用的限制相同,环境变量在每个沙箱化命令运行前被取消设置。文件保护是文件系统层的一部分,因此如果你[禁用文件系统隔离](#disable-filesystem-isolation),它不适用;环境变量保护仍然适用。

320 322 

Details

25 安装插件25 安装插件

26</h2>26</h2>

27 27 

28在终端 Claude Code 会话中,从 [官方 Anthropic 市场](/docs/zh-CN/discover-plugins#official-anthropic-marketplace) 安装:28在终端 Claude Code 会话中,从[官方 Anthropic 市场](/docs/zh-CN/plugins/anthropic-marketplaces)安装:

29 29 

30```text theme={null}30```text theme={null}

31/plugin install security-guidance@claude-plugins-official31/plugin install security-guidance@claude-plugins-official

32```32```

33 33 

34`/plugin` 打开一个交互式面板,仅在终端 CLI 中可用。如果 Claude 回复说 `/plugin` 在此环境中不可用,请以其他方式安装:34`/plugin` 在终端 CLI 中打开一个交互式面板。如果 Claude 回复说 `/plugin` 在此环境中不可用,请以其他方式安装:

35 35 

36* **Claude 桌面应用、本地或 SSH 会话**:通过点击提示旁边的 **+** 按钮,然后点击 **Plugins**,再点击 **Add plugin** 来打开 [插件浏览器](/docs/zh-CN/desktop#install-plugins)36* **Claude 桌面应用、本地或 SSH 会话**:点击提示旁边的 **+** 按钮,然后点击 **Plugins**,再点击 **Add plugin**,打开[插件浏览器](/docs/zh-CN/desktop#install-plugins)

37* **VS Code 扩展**:从 [**管理插件** 对话框](/docs/zh-CN/vs-code#manage-plugins) 安装37* **VS Code 扩展**:从[**Manage plugins** 对话框](/docs/zh-CN/vs-code#manage-plugins)安装

38* **云会话**:为您的 claude.ai 账户启用该插件,以便 Claude Code 将其作为 [同步插件](/docs/zh-CN/plugins-reference#synced-plugins) 加载。云会话不会从您的用户设置或存储库的 `.claude/settings.json` 加载插件,如 [从您的设置中继承的内容](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup) 所解释的那样38* **云会话**:云会话不会从您的用户设置或存储库的 `.claude/settings.json` 加载插件,如[您的设置中哪些内容会保留](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)所解释。对于您的组织通过托管设置分发的插件,请参阅[为您的组织管理插件](/docs/zh-CN/plugins/org)

39 39 

40终端安装会提示输入范围。选择用户范围以将插件写入您的用户设置,这样它会在您在此计算机上启动的每个新本地会话中加载。40终端安装会提示输入范围。选择用户范围将插件写入您的用户设置,这样它会在您在此机器上启动的每个新本地会话中加载。

41 41 

42如果安装失败,请匹配 Claude Code 报告的消息:42如果安装失败,请匹配 Claude Code 报告的消息:

43 43 

44* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。44* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

45* 插件 [在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。45* 插件[在市场中未找到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

46 46 

47检查安装摘要。如果它报告 `Run /reload-plugins to activate.`,请参阅 [无需重启即可应用插件更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 以在当前会话中激活插件。47检查安装摘要。如果它报告 `Run /reload-plugins to activate.`,请参阅[在不重启的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins)以在当前会话中激活插件。

48 48 

49<h3 id="enable-for-your-team-in-local-sessions">49<h3 id="enable-for-your-team-in-local-sessions">

50 在本地会话中为您的团队启用50 在本地会话中为您的团队启用

51</h3>51</h3>

52 52 

53要在您的团队在存储库中启动的本地会话中打开该插件,请在项目的已检入设置中声明它:53要在您的团队成员在存储库中启动的本地会话中打开插件,请在项目的已检入设置中声明它:

54 54 

55```json .claude/settings.json theme={null}55```json .claude/settings.json theme={null}

56{56{


60}60}

61```61```

62 62 

63管理员可以通过在 [托管设置](/docs/zh-CN/admin-setup) 中设置 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 来在组织范围内启用该插件。63管理员可以通过在[托管设置](/docs/zh-CN/admin-setup)中设置 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 来在整个组织范围内启用插件。

64 64 

65<h2 id="what-the-plugin-checks">65<h2 id="what-the-plugin-checks">

66 插件检查的内容66 插件检查的内容


279 279 

280* [Code Review](/docs/zh-CN/code-review):设置 PR 时间多代理审查280* [Code Review](/docs/zh-CN/code-review):设置 PR 时间多代理审查

281* [使用 hooks 自动化工作流](/docs/zh-CN/hooks-guide):在相同的生命周期点构建您自己的检查281* [使用 hooks 自动化工作流](/docs/zh-CN/hooks-guide):在相同的生命周期点构建您自己的检查

282* [发现和安装插件](/docs/zh-CN/discover-plugins#official-anthropic-marketplace):浏览其他官方插件282* [在官方市场中查找插件](/docs/zh-CN/plugins/anthropic-marketplaces#find-plugins-in-the-official-marketplace):浏览其他官方插件

Details

249}249}

250```250```

251 251 

252您也可以在[端点管理的](/docs/zh-CN/managed-settings#delivery-mechanisms) MDM 配置文件或系统 `managed-settings.json` 文件中设置此键,以在首次启动时强制执行故障关闭行为,在任何服务器有效负载被传递之前。在 Claude Code v2.1.191 或更高版本中,此标志是上述[优先级规则](#settings-precedence)的例外:当任何管理员控制的托管源设置它时,Claude Code 会遵守它,即使也存在缓存的服务器管理有效负载,因此当服务器管理的设置存在时,MDM 传递的值不会被忽略。252您也可以在[端点管理的](/docs/zh-CN/managed-settings#delivery-mechanisms) MDM 配置文件或系统 `managed-settings.json` 文件中设置此键,以在首次启动时强制执行故障关闭行为,在任何服务器有效负载被传递之前。此标志是上述[优先级规则](#settings-precedence)的例外:当任何管理员控制的托管源设置它时,Claude Code 会遵守它,即使也存在缓存的服务器管理有效负载,因此当服务器管理的设置存在时,MDM 传递的值不会被忽略。

253 253 

254当 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出替换 Claude Code 在启动后读取的键的所有其他托管源。有关 Claude Code 从哪些源读取此键的信息,请参阅[其设置条目](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)。`policyHelper` 条目说明 Claude Code 从哪些源读取助手以及何时运行它。254当 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出替换 Claude Code 在启动后读取的键的所有其他托管源。有关 Claude Code 从哪些源读取此键的信息,请参阅[其设置条目](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)。`policyHelper` 条目说明 Claude Code 从哪些源读取助手以及何时运行它。

255 255 


338 338 

339由 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本返回的密钥和 [Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 凭证都不会触发设置获取。339由 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本返回的密钥和 [Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 凭证都不会触发设置获取。

340 340 

341在 Claude Desktop 应用中的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,即使用户使用 Team 或 Enterprise 账户登录,Claude Code 也不会从 claude.ai 管理控制台获取服务器管理的设置。[策略应用的位置和时间](/docs/zh-CN/managed-settings#where-and-when-a-policy-applies) 涵盖了哪些策略到达用户机器上的 Cowork 会话和远程 Cowork 会话。claude.ai 在 Cowork 用户从 git 存储库或从 Cowork 标签中的**自定义**添加市场时,仍然会应用您的 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) 列表。[限制如何工作](/docs/zh-CN/plugin-marketplaces#how-restrictions-work) 描述了该检查。341在 Claude Desktop 应用中的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,即使用户使用 Team 或 Enterprise 账户登录,Claude Code 也不会从 claude.ai 管理控制台获取服务器管理的设置。[策略应用的位置和时间](/docs/zh-CN/managed-settings#where-and-when-a-policy-applies) 涵盖了哪些策略到达用户机器上的 Cowork 会话和远程 Cowork 会话。claude.ai 在 Cowork 用户从 git 存储库或从 Cowork 标签中的**自定义**添加市场时,仍然会应用您的 [`strictKnownMarketplaces`](/docs/zh-CN/settings-reference#strictknownmarketplaces) 和 [`blockedMarketplaces`](/docs/zh-CN/settings-reference#blockedmarketplaces) 列表。[限制如何工作](/docs/zh-CN/plugins/org#restrict-what-users-can-install) 描述了该检查。

342 342 

343如果您在 shell 中导出 `CLAUDE_CODE_USE_*` 提供商变量或非默认的 `ANTHROPIC_BASE_URL`,Claude Code 将跳过您的会话的设置获取。[`claude doctor` 和 `/status` 报告跳过的获取及其原因](#verify-settings-delivery)。343如果您在 shell 中导出 `CLAUDE_CODE_USE_*` 提供商变量或非默认的 `ANTHROPIC_BASE_URL`,Claude Code 将跳过您的会话的设置获取。[`claude doctor` 和 `/status` 报告跳过的获取及其原因](#verify-settings-delivery)。

344 344 

sessions.md +1 −1

Details

37 37 

38恢复的会话会恢复对话以及保存在其中的状态:38恢复的会话会恢复对话以及保存在其中的状态:

39 39 

40* 对话历史:完整历史,包括工具调用和结果。如果工具在上一个进程结束时仍在运行(例如在崩溃中),当您恢复时它不会完成或再次运行;Claude 会继续而不使用其输出。40* 对话历史:完整历史,包括工具调用和结果。如果工具在上一个进程结束时仍在运行(例如在崩溃中),当您恢复时它不会完成或再次运行。Claude 会看到该调用被标记为在记录其结果之前被切断,并被告知在再次运行之前检查它是否生效,除非设置了 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars#variables)。在 v2.1.281 之前,Claude Code 会从对话中删除切断的调用或将其显示为您中断的调用。

41* 模型:会话继续使用它正在使用的模型。当模型已被停用或不被 `availableModels` 允许时,模型不会被恢复;当在启动时通过 `--model` 标志或 `ANTHROPIC_MODEL` 系列环境变量选择模型时;或在使用特定于提供商的部署 ID 的提供商上,例如 [Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry](/docs/zh-CN/third-party-integrations);请参阅[模型配置](/docs/zh-CN/model-config#setting-your-model)了解解析顺序。41* 模型:会话继续使用它正在使用的模型。当模型已被停用或不被 `availableModels` 允许时,模型不会被恢复;当在启动时通过 `--model` 标志或 `ANTHROPIC_MODEL` 系列环境变量选择模型时;或在使用特定于提供商的部署 ID 的提供商上,例如 [Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry](/docs/zh-CN/third-party-integrations);请参阅[模型配置](/docs/zh-CN/model-config#setting-your-model)了解解析顺序。

42* Agent:使用 [`--agent`](/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 或 `agent` 设置启动的会话继续作为该 agent,保持其工具限制和模型。在恢复时传递 `--agent` 以选择不同的;对于任一情况下的系统提示,请参阅[恢复对话中的系统提示标志](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)。Claude Code 在两个地方查找 agent:会话的原始目录(前提是您已[信任该工作区](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust))和您恢复的目录,因此项目范围的 agent 在您从另一个目录恢复时仍会加载。如果 Claude Code 在任一位置都找不到 agent,会话会以默认工具恢复并显示[警告,命名该 agent](/docs/zh-CN/errors#session-agent-no-longer-available)。42* Agent:使用 [`--agent`](/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 或 `agent` 设置启动的会话继续作为该 agent,保持其工具限制和模型。在恢复时传递 `--agent` 以选择不同的;对于任一情况下的系统提示,请参阅[恢复对话中的系统提示标志](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)。Claude Code 在两个地方查找 agent:会话的原始目录(前提是您已[信任该工作区](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust))和您恢复的目录,因此项目范围的 agent 在您从另一个目录恢复时仍会加载。如果 Claude Code 在任一位置都找不到 agent,会话会以默认工具恢复并显示[警告,命名该 agent](/docs/zh-CN/errors#session-agent-no-longer-available)。

43* 权限模式:如果您从终端使用 `claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时)恢复,不带 `-p`,Claude Code 会恢复会话所在的权限模式,除了[恢复时的权限模式](#permission-mode-on-resume)中的情况,这也涵盖会话选择器、`/resume` 和使用 `claude -p` 恢复。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。43* 权限模式:如果您从终端使用 `claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时)恢复,不带 `-p`,Claude Code 会恢复会话所在的权限模式,除了[恢复时的权限模式](#permission-mode-on-resume)中的情况,这也涵盖会话选择器、`/resume` 和使用 `claude -p` 恢复。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。

settings.md +5 −1

Details

452 与你的团队共享设置452 与你的团队共享设置

453</h3>453</h3>

454 454 

455提交 `.claude/settings.json` 以便克隆仓库的每个人都获得相同的权限、hooks、遥测和 plugins。每个队友仍然可以在他们自己的 `.claude/settings.local.json` 中为自己覆盖它,因此个人例外不需要提交。有关完整的团队文件,请参阅[团队的共享设置](/docs/zh-CN/settings-example#a-teams-shared-settings)。455提交 `.claude/settings.json` 以便克隆仓库的每个人都获得相同的权限、hooks 和 plugins。每个队友仍然可以在他们自己的 `.claude/settings.local.json` 中为自己覆盖它,因此个人例外不需要提交。有关完整的团队文件,请参阅[团队的共享设置](/docs/zh-CN/settings-example#a-teams-shared-settings)。

456 456 

457你提交的一些内容等待每个队友[信任文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),少数键永远不会从仓库文件生效;[排查不适用的设置](#common-cases)涵盖两者。457你提交的一些内容等待每个队友[信任文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),少数键永远不会从仓库文件生效;[排查不适用的设置](#common-cases)涵盖两者。

458 458 


743* **更高级别设置它。** 另一个设置文件、`--settings` 标志或托管来源在您的上方设置键;[堆栈](#settings-precedence)说哪个。标志或环境变量也可以自己覆盖键,按键决定;[设置参考](/docs/zh-CN/settings-reference)上的键条目说 Claude Code 使用哪个,[`env` 条目](/docs/zh-CN/settings-reference#env)涵盖托管 `env` 值与 shell 导出。743* **更高级别设置它。** 另一个设置文件、`--settings` 标志或托管来源在您的上方设置键;[堆栈](#settings-precedence)说哪个。标志或环境变量也可以自己覆盖键,按键决定;[设置参考](/docs/zh-CN/settings-reference)上的键条目说 Claude Code 使用哪个,[`env` 条目](/docs/zh-CN/settings-reference#env)涵盖托管 `env` 值与 shell 导出。

744* **安全键保持其严格值。** 对于少数几个键 Claude Code 尊重任何文件的限制值,因此项目 `true` 用于 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) 保持开启;请参阅[托管设置优先级的例外](#exceptions-to-managed-settings-precedence)。744* **安全键保持其严格值。** 对于少数几个键 Claude Code 尊重任何文件的限制值,因此项目 `true` 用于 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) 保持开启;请参阅[托管设置优先级的例外](#exceptions-to-managed-settings-precedence)。

745* **文件无法设置该值。** [`permissions.defaultMode`](/docs/zh-CN/settings-reference#permissions-defaultmode) 值 `auto` 和 `bypassPermissions` 不从项目或本地设置生效;改为在用户或托管设置中设置它们,或为一个会话传递 `--permission-mode`。在 v2.1.257 之前,`bypassPermissions` 从任何文件生效。745* **文件无法设置该值。** [`permissions.defaultMode`](/docs/zh-CN/settings-reference#permissions-defaultmode) 值 `auto` 和 `bypassPermissions` 不从项目或本地设置生效;改为在用户或托管设置中设置它们,或为一个会话传递 `--permission-mode`。在 v2.1.257 之前,`bypassPermissions` 从任何文件生效。

746 

747 [`env`](/docs/zh-CN/settings-reference#env) 块中的遥测导出变量也不从项目或本地设置生效,除了少数关闭值。[Claude Code 在 `env` 中忽略的变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)列出变量和这些值。

746* **文件损坏。** 无效的 JSON 或拒绝的值使 Claude Code 跳过文件或条目;请参阅[修复损坏的设置文件](#fix-a-broken-settings-file)。748* **文件损坏。** 无效的 JSON 或拒绝的值使 Claude Code 跳过文件或条目;请参阅[修复损坏的设置文件](#fix-a-broken-settings-file)。

747 749 

748<h4 id="a-change-you-made-in-claude-code-is-lost-in-new-sessions">750<h4 id="a-change-you-made-in-claude-code-is-lost-in-new-sessions">


766两件事阻止 `.claude/settings.json` 中的键为克隆它的每个人应用:768两件事阻止 `.claude/settings.json` 中的键为克隆它的每个人应用:

767 769 

768* **Claude Code 忽略存储库文件中的键。** 在[设置索引](/docs/zh-CN/settings-reference#settings-index)的作用域列中查找 `User, local, or managed`、`User or managed`、`Managed` 或 `Global config`。这些键永远不会从共享文件应用,除了少数几个存储库文件仍然可以关闭的。每个这些条目在其作用域行上说明。`Global config` 键仅从 `~/.claude.json` 应用。770* **Claude Code 忽略存储库文件中的键。** 在[设置索引](/docs/zh-CN/settings-reference#settings-index)的作用域列中查找 `User, local, or managed`、`User or managed`、`Managed` 或 `Global config`。这些键永远不会从共享文件应用,除了少数几个存储库文件仍然可以关闭的。每个这些条目在其作用域行上说明。`Global config` 键仅从 `~/.claude.json` 应用。

771 

772 在 `env` 键内,遥测导出变量也永远不会从共享文件应用,除了少数关闭值;请参阅[Claude Code 在 `env` 中忽略的变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)。

769* **键等待信任。** `permissions.allow` 规则、`permissions.additionalDirectories`、`extraKnownMarketplaces` 和大多数 [`env`](/docs/zh-CN/settings-reference#env) 值仅在每个队友[信任文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)后应用。在那之前他们仍然看到提示并不从文件声明的市场获得插件。`deny` 和 `ask` 规则立即应用。773* **键等待信任。** `permissions.allow` 规则、`permissions.additionalDirectories`、`extraKnownMarketplaces` 和大多数 [`env`](/docs/zh-CN/settings-reference#env) 值仅在每个队友[信任文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)后应用。在那之前他们仍然看到提示并不从文件声明的市场获得插件。`deny` 和 `ask` 规则立即应用。

770 774 

771<h4 id="permission-rules-combine-differently-than-you-expected">775<h4 id="permission-rules-combine-differently-than-you-expected">

Details

98 团队的共享设置98 团队的共享设置

99</h2>99</h2>

100 100 

101一个团队的共享设置,提交到仓库,以便克隆它的每个人都获得相同的权限、hooks、遥测和插件市场。在仓库顶部的 `.claude/settings.json` 处保存这样的文件。在提交之前需要了解的内容:101一个团队的共享设置,提交到仓库,以便克隆它的每个人都获得相同的权限、hooks 和插件市场。在仓库顶部的 `.claude/settings.json` 处保存这样的文件。在提交之前需要了解的内容:

102 102 

103* **云会话也会读取它。** Claude Code 网页版上的 [cloud session](/docs/zh-CN/settings#settings-in-cloud-sessions) 从仓库的克隆开始,因此提交的文件也适用于那里。103* **云会话也会读取它。** Claude Code 网页版上的 [cloud session](/docs/zh-CN/settings#settings-in-cloud-sessions) 从仓库的克隆开始,因此提交的文件也适用于那里。

104* **遥测数据放在托管或个人设置中。** Claude Code 忽略仓库设置文件中的 [OpenTelemetry 导出器变量](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env),除了一些关闭遥测的值。在 [托管设置](/docs/zh-CN/monitoring-usage#administrator-configuration) 中为你的组织设置它们,或在每个人的 `~/.claude/settings.json` 中设置。

104* **Allow 规则等待信任。** Allow 规则和 `extraKnownMarketplaces` 条目在每个人 [信任此文件夹本身](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后生效,而不仅仅是父文件夹;deny 和 ask 规则在每个会话中应用,无论是否受信任。105* **Allow 规则等待信任。** Allow 规则和 `extraKnownMarketplaces` 条目在每个人 [信任此文件夹本身](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后生效,而不仅仅是父文件夹;deny 和 ask 规则在每个会话中应用,无论是否受信任。

105* **hook 是仓库中的脚本。** 此文件的 hook 运行 `.claude/hooks/block-rm.sh`;[How a hook resolves](/docs/zh-CN/hooks#how-a-hook-resolves) 介绍了如何编写它。106* **hook 是仓库中的脚本。** 此文件的 hook 运行 `.claude/hooks/block-rm.sh`;[How a hook resolves](/docs/zh-CN/hooks#how-a-hook-resolves) 介绍了如何编写它。

106* **规则匹配按写入的命令和路径。** `Bash(git push *)` 不匹配 [`git -C . push`](/docs/zh-CN/permissions#bash-rule-limits)。`Read(./.env)` 单独停止文件工具和命名文件的命令,例如 `cat .env`,但不停止 [`grep -r` 在目录上运行](/docs/zh-CN/permissions#read-and-edit);此文件中的 `sandbox` 块关闭了该间隙,因为 sandbox [添加你的 `Read` deny 路径](/docs/zh-CN/settings-reference#sandbox-filesystem-denyread) 到每个沙箱命令无法读取的内容。107* **规则匹配按写入的命令和路径。** `Bash(git push *)` 不匹配 [`git -C . push`](/docs/zh-CN/permissions#bash-rule-limits)。`Read(./.env)` 单独停止文件工具和命名文件的命令,例如 `cat .env`,但不停止 [`grep -r` 在目录上运行](/docs/zh-CN/permissions#read-and-edit);此文件中的 `sandbox` 块关闭了该间隙,因为 sandbox [添加你的 `Read` deny 路径](/docs/zh-CN/settings-reference#sandbox-filesystem-denyread) 到每个沙箱命令无法读取的内容。


124 "Read(./secrets/**)"125 "Read(./secrets/**)"

125 ]126 ]

126 },127 },

127 "env": {

128 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

129 "OTEL_METRICS_EXPORTER": "otlp",

130 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

131 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317"

132 },

133 "hooks": {128 "hooks": {

134 "PreToolUse": [129 "PreToolUse": [

135 {130 {


194 "Read(./secrets/**)"189 "Read(./secrets/**)"

195 ]190 ]

196 },191 },

197 // 通过 gRPC 将 OpenTelemetry 指标发送到团队的收集器;将端点替换为你的收集器的 URL

198 "env": {

199 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

200 "OTEL_METRICS_EXPORTER": "otlp",

201 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

202 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317"

203 },

204 // 在每个 Bash 命令之前,运行仓库中可以阻止它的脚本192 // 在每个 Bash 命令之前,运行仓库中可以阻止它的脚本

205 "hooks": {193 "hooks": {

206 "PreToolUse": [194 "PreToolUse": [

settings-reference.md +190 −172

Details

626| [`axScreenReader`](#axscreenreader) | 渲染[屏幕阅读器友好的输出](/docs/zh-CN/accessibility) | 界面和终端 | Any file |626| [`axScreenReader`](#axscreenreader) | 渲染[屏幕阅读器友好的输出](/docs/zh-CN/accessibility) | 界面和终端 | Any file |

627| [`bashEditDiffEnabled`](#basheditdiffenabled) | 在每个权限模式中记录 [Bash 命令更改的文件](/docs/zh-CN/hooks#bash) | 界面和终端 | User or managed |627| [`bashEditDiffEnabled`](#basheditdiffenabled) | 在每个权限模式中记录 [Bash 命令更改的文件](/docs/zh-CN/hooks#bash) | 界面和终端 | User or managed |

628| [`bashOutputMaxChars`](#bashoutputmaxchars) | 设置成功命令的[输出](/docs/zh-CN/tools-reference#output-limits)有多少 Claude 内联接收 | 内存和上下文 | Any file |628| [`bashOutputMaxChars`](#bashoutputmaxchars) | 设置成功命令的[输出](/docs/zh-CN/tools-reference#output-limits)有多少 Claude 内联接收 | 内存和上下文 | Any file |

629| [`blockedMarketplaces`](#blockedmarketplaces) | 为您的组织阻止[插件市场](/docs/zh-CN/plugin-marketplaces)来源 | 插件和技能 | Managed |629| [`blockedMarketplaces`](#blockedmarketplaces) | 为您的组织阻止[插件市场](/docs/zh-CN/plugins/overview)来源 | 插件和技能 | Managed |

630| [`browserExternalPageTools`](#browserexternalpagetools) | 在[桌面](/docs/zh-CN/desktop)浏览器窗格中的外部页面上关闭 Claude 的工具 | 工具 | Managed |630| [`browserExternalPageTools`](#browserexternalpagetools) | 在[桌面](/docs/zh-CN/desktop)浏览器窗格中的外部页面上关闭 Claude 的工具 | 工具 | Managed |

631| [`channelsEnabled`](#channelsenabled) | 为您的组织允许[频道](/docs/zh-CN/channels#enable-channels-for-your-organization) | 插件和技能 | Managed |631| [`channelsEnabled`](#channelsenabled) | 为您的组织允许[频道](/docs/zh-CN/channels#enable-channels-for-your-organization) | 插件和技能 | Managed |

632| [`claudeMd`](#claudemd) | 从托管设置注入组织范围的 [CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) 指令 | 内存和上下文 | Managed |632| [`claudeMd`](#claudemd) | 从托管设置注入组织范围的 [CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) 指令 | 内存和上下文 | Managed |


647| [`disableBrowserExternalNavigation`](#disablebrowserexternalnavigation) | 将[桌面](/docs/zh-CN/desktop)浏览器窗格限制为 localhost,供人员和 Claude 使用 | 工具 | Managed |647| [`disableBrowserExternalNavigation`](#disablebrowserexternalnavigation) | 将[桌面](/docs/zh-CN/desktop)浏览器窗格限制为 localhost,供人员和 Claude 使用 | 工具 | Managed |

648| [`disableBundledSkills`](#disablebundledskills) | 关闭 Claude Code 附带的[技能](/docs/zh-CN/skills#bundled-skills)和[工作流](/docs/zh-CN/workflows) | 插件和技能 | Any file |648| [`disableBundledSkills`](#disablebundledskills) | 关闭 Claude Code 附带的[技能](/docs/zh-CN/skills#bundled-skills)和[工作流](/docs/zh-CN/workflows) | 插件和技能 | Any file |

649| [`disableClaudeAiConnectors`](#disableclaudeaiconnectors) | 关闭 [claude.ai 连接器](/docs/zh-CN/mcp#disable-claude-ai-connectors),以便 Claude Code 不会获取它们 | MCP | Any file |649| [`disableClaudeAiConnectors`](#disableclaudeaiconnectors) | 关闭 [claude.ai 连接器](/docs/zh-CN/mcp#disable-claude-ai-connectors),以便 Claude Code 不会获取它们 | MCP | Any file |

650| [`disableCommandPluginSources`](#disablecommandpluginsources) | 阻止通过运行市场声明的命令安装的[插件](/docs/zh-CN/plugins) | 插件和技能 | Managed |650| [`disableCommandPluginSources`](#disablecommandpluginsources) | 阻止通过运行市场声明的命令安装的[插件](/docs/zh-CN/plugins/overview) | 插件和技能 | Managed |

651| [`disableDeepLinkRegistration`](#disabledeeplinkregistration) | 停止 Claude Code 注册 [`claude-cli://` 处理程序](/docs/zh-CN/deep-links) | 远程、桌面和通知 | Any file |651| [`disableDeepLinkRegistration`](#disabledeeplinkregistration) | 停止 Claude Code 注册 [`claude-cli://` 处理程序](/docs/zh-CN/deep-links) | 远程、桌面和通知 | Any file |

652| [`disableDesktopLocalSessions`](#disabledesktoplocalsessions) | 关闭在设备上运行的[桌面代码会话](/docs/zh-CN/desktop#local-sessions-on-managed-devices),仅保留 SSH 到其他主机和云 | 远程、桌面和通知 | Managed |652| [`disableDesktopLocalSessions`](#disabledesktoplocalsessions) | 关闭在设备上运行的[桌面代码会话](/docs/zh-CN/desktop#local-sessions-on-managed-devices),仅保留 SSH 到其他主机和云 | 远程、桌面和通知 | Managed |

653| [`disabledMcpjsonServers`](#disabledmcpjsonservers) | 拒绝项目的 [`.mcp.json`](/docs/zh-CN/mcp#project-scope) 中的特定服务器 | MCP | Any file |653| [`disabledMcpjsonServers`](#disabledmcpjsonservers) | 拒绝项目的 [`.mcp.json`](/docs/zh-CN/mcp#project-scope) 中的特定服务器 | MCP | Any file |

654| [`disableMobileSimulatorTools`](#disablemobilesimulatortools) | 在[桌面](/docs/zh-CN/desktop) iOS 模拟器窗格中阻止 Claude 的工具 | 工具 | Managed |654| [`disableMobileSimulatorTools`](#disablemobilesimulatortools) | 在[桌面](/docs/zh-CN/desktop) iOS 模拟器窗格中阻止 Claude 的工具 | 工具 | Managed |

655| [`disableRemoteControl`](#disableremotecontrol) | 在可以启动的任何地方关闭[远程控制](/docs/zh-CN/remote-control) | 远程、桌面和通知 | Any file |655| [`disableRemoteControl`](#disableremotecontrol) | 在可以启动的任何地方关闭[远程控制](/docs/zh-CN/remote-control) | 远程、桌面和通知 | Any file |

656| [`disableSideloadFlags`](#disablesideloadflags) | 拒绝侧加载[插件](/docs/zh-CN/plugins)、[子代理](/docs/zh-CN/sub-agents)和 [MCP 服务器](/docs/zh-CN/mcp)的 CLI 标志 | 企业和托管设置 | Managed |656| [`disableSideloadFlags`](#disablesideloadflags) | 拒绝侧加载[插件](/docs/zh-CN/plugins/overview)、[子代理](/docs/zh-CN/sub-agents)和 [MCP 服务器](/docs/zh-CN/mcp)的 CLI 标志 | 企业和托管设置 | Managed |

657| [`disableSkillShellExecution`](#disableskillshellexecution) | 停止[技能](/docs/zh-CN/skills)和自定义命令运行内联 shell | 插件和技能 | Any file |657| [`disableSkillShellExecution`](#disableskillshellexecution) | 停止[技能](/docs/zh-CN/skills)和自定义命令运行内联 shell | 插件和技能 | Any file |

658| [`disableWorkflows`](#disableworkflows) | 为所有人关闭[动态工作流](/docs/zh-CN/workflows);为自己使用 `enableWorkflows` | Hooks 和自动化 | Any file |658| [`disableWorkflows`](#disableworkflows) | 为所有人关闭[动态工作流](/docs/zh-CN/workflows);为自己使用 `enableWorkflows` | Hooks 和自动化 | Any file |

659| [`editorMode`](#editormode) | 在输入提示中使用 [vim 快捷键](/docs/zh-CN/interactive-mode#vim-editor-mode) | 界面和终端 | Any file |659| [`editorMode`](#editormode) | 在输入提示中使用 [vim 快捷键](/docs/zh-CN/interactive-mode#vim-editor-mode) | 界面和终端 | Any file |


662| [`enableAllProjectMcpServers`](#enableallprojectmcpservers) | 批准项目 [`.mcp.json`](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust) 文件中的每个服务器,无需提示 | MCP | Any file |662| [`enableAllProjectMcpServers`](#enableallprojectmcpservers) | 批准项目 [`.mcp.json`](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust) 文件中的每个服务器,无需提示 | MCP | Any file |

663| [`enableArtifact`](#enableartifact) | 使用任何文件中的 `false` 关闭[工件工具](/docs/zh-CN/artifacts);没有文件可以将其打开 | 远程、桌面和通知 | Any file |663| [`enableArtifact`](#enableartifact) | 使用任何文件中的 `false` 关闭[工件工具](/docs/zh-CN/artifacts);没有文件可以将其打开 | 远程、桌面和通知 | Any file |

664| [`enabledMcpjsonServers`](#enabledmcpjsonservers) | 批准项目的 [`.mcp.json`](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust) 中的特定服务器 | MCP | Any file |664| [`enabledMcpjsonServers`](#enabledmcpjsonservers) | 批准项目的 [`.mcp.json`](/docs/zh-CN/mcp#project-server-approvals-and-workspace-trust) 中的特定服务器 | MCP | Any file |

665| [`enabledPlugins`](#enabledplugins) | 按范围打开或关闭单个[插件](/docs/zh-CN/plugins) | 插件和技能 | Any file |665| [`enabledPlugins`](#enabledplugins) | 按范围打开或关闭单个[插件](/docs/zh-CN/plugins/overview) | 插件和技能 | Any file |

666| [`enableWorkflows`](#enableworkflows) | 根据您的计划默认值打开或关闭[动态工作流](/docs/zh-CN/workflows) | Hooks 和自动化 | Any file |666| [`enableWorkflows`](#enableworkflows) | 根据您的计划默认值打开或关闭[动态工作流](/docs/zh-CN/workflows) | Hooks 和自动化 | Any file |

667| [`enforceAvailableModels`](#enforceavailablemodels) | 保持 [`/model` 默认选择](/docs/zh-CN/model-config#enforce-the-allowlist-for-the-default-model)在您的 `availableModels` 允许列表内 | 模型和响应 | Any file |667| [`enforceAvailableModels`](#enforceavailablemodels) | 保持 [`/model` 默认选择](/docs/zh-CN/model-config#enforce-the-allowlist-for-the-default-model)在您的 `availableModels` 允许列表内 | 模型和响应 | Any file |

668| [`env`](#env) | 为每个会话及其子进程设置[环境变量](/docs/zh-CN/env-vars#in-settings-files) | 内存和上下文 | Any file |668| [`env`](#env) | 为每个会话及其子进程设置[环境变量](/docs/zh-CN/env-vars#in-settings-files) | 内存和上下文 | Any file |

669| [`externalEditorContext`](#externaleditorcontext) | 当您按 [Ctrl+G](/docs/zh-CN/interactive-mode#general-controls) 编辑时,将 Claude 的最后响应显示为注释 | 全局配置设置 | Global config |669| [`externalEditorContext`](#externaleditorcontext) | 当您按 [Ctrl+G](/docs/zh-CN/interactive-mode#general-controls) 编辑时,将 Claude 的最后响应显示为注释 | 全局配置设置 | Global config |

670| [`extraKnownMarketplaces`](#extraknownmarketplaces) | 为存储库或组织注册[市场](/docs/zh-CN/plugin-marketplaces) | 插件和技能 | Any file |670| [`extraKnownMarketplaces`](#extraknownmarketplaces) | 为存储库或组织注册[市场](/docs/zh-CN/plugins/overview) | 插件和技能 | Any file |

671| [`fallbackModel`](#fallbackmodel) | 为主模型过载时命名[备份模型](/docs/zh-CN/model-config#fallback-model-chains) | 模型和响应 | Any file |671| [`fallbackModel`](#fallbackmodel) | 为主模型过载时命名[备份模型](/docs/zh-CN/model-config#fallback-model-chains) | 模型和响应 | Any file |

672| [`fastMode`](#fastmode) | 为可用的会话打开[快速模式](/docs/zh-CN/fast-mode) | 模型和响应 | Any file |672| [`fastMode`](#fastmode) | 为可用的会话打开[快速模式](/docs/zh-CN/fast-mode) | 模型和响应 | Any file |

673| [`fastModePerSessionOptIn`](#fastmodepersessionoptin) | 要求人们在每个会话中打开[快速模式](/docs/zh-CN/fast-mode) | 模型和响应 | Any file |673| [`fastModePerSessionOptIn`](#fastmodepersessionoptin) | 要求人们在每个会话中打开[快速模式](/docs/zh-CN/fast-mode) | 模型和响应 | Any file |


712| [`permissions.deny`](#permissions-deny) | 阻止列出的[工具使用](/docs/zh-CN/permissions#permission-rule-syntax),包括保存秘密的文件的读取 | 权限设置 | Any file |712| [`permissions.deny`](#permissions-deny) | 阻止列出的[工具使用](/docs/zh-CN/permissions#permission-rule-syntax),包括保存秘密的文件的读取 | 权限设置 | Any file |

713| [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) | 防止任何人进入 [bypassPermissions 模式](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) | 权限设置 | Any file |713| [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) | 防止任何人进入 [bypassPermissions 模式](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) | 权限设置 | Any file |

714| [`plansDirectory`](#plansdirectory) | 选择[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)写入计划文件的位置 | 内存和上下文 | Any file |714| [`plansDirectory`](#plansdirectory) | 选择[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)写入计划文件的位置 | 内存和上下文 | Any file |

715| [`pluginConfigs`](#pluginconfigs) | 存储您给[插件](/docs/zh-CN/plugins)的配置对话框的答案 | 插件和技能 | User or managed |715| [`pluginConfigs`](#pluginconfigs) | 存储您给[插件](/docs/zh-CN/plugins/overview)的配置对话框的答案 | 插件和技能 | User or managed |

716| [`pluginSuggestionMarketplaces`](#pluginsuggestionmarketplaces) | 选择哪些[市场](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)可以在 `/plugin` 中显示插件安装建议 | 插件和技能 | Managed |716| [`pluginSuggestionMarketplaces`](#pluginsuggestionmarketplaces) | 选择哪些[市场](/docs/zh-CN/plugins/overview)可以在 `/plugin` 中显示插件安装建议 | 插件和技能 | Managed |

717| [`pluginTrustMessage`](#plugintrustmessage) | 向[插件](/docs/zh-CN/plugins)信任警告添加您自己的文本 | 插件和技能 | Managed |717| [`pluginTrustMessage`](#plugintrustmessage) | 向[插件](/docs/zh-CN/plugins/overview)信任警告添加您自己的文本 | 插件和技能 | Managed |

718| [`policyHelper`](#policyhelper) | 运行在启动时计算[托管设置](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的可执行文件 | 企业和托管设置 | Managed |718| [`policyHelper`](#policyhelper) | 运行在启动时计算[托管设置](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的可执行文件 | 企业和托管设置 | Managed |

719| [`policyHelper.path`](#policyhelper-path) | 命名 Claude Code 运行的[辅助可执行文件](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program) | 企业和托管设置 | Managed |719| [`policyHelper.path`](#policyhelper-path) | 命名 Claude Code 运行的[辅助可执行文件](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program) | 企业和托管设置 | Managed |

720| [`policyHelper.refreshIntervalMs`](#policyhelper-refreshintervalms) | 在后台按间隔重新运行[辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program) | 企业和托管设置 | Managed |720| [`policyHelper.refreshIntervalMs`](#policyhelper-refreshintervalms) | 在后台按间隔重新运行[辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program) | 企业和托管设置 | Managed |


785| [`sshConfigs`](#sshconfigs) | 将 [SSH 连接](/docs/zh-CN/desktop#pre-configure-ssh-connections-for-your-team)添加到桌面环境下拉列表 | 远程、桌面和通知 | User or managed |785| [`sshConfigs`](#sshconfigs) | 将 [SSH 连接](/docs/zh-CN/desktop#pre-configure-ssh-connections-for-your-team)添加到桌面环境下拉列表 | 远程、桌面和通知 | User or managed |

786| [`sshHostAllowlist`](#sshhostallowlist) | 限制[桌面 SSH 会话](/docs/zh-CN/desktop#restrict-which-ssh-hosts-users-can-connect-to)可以到达的主机 | 远程、桌面和通知 | Managed |786| [`sshHostAllowlist`](#sshhostallowlist) | 限制[桌面 SSH 会话](/docs/zh-CN/desktop#restrict-which-ssh-hosts-users-can-connect-to)可以到达的主机 | 远程、桌面和通知 | Managed |

787| [`statusLine`](#statusline) | 运行您自己的命令来呈现提示下方的[状态行](/docs/zh-CN/statusline) | 界面和终端 | Any file |787| [`statusLine`](#statusline) | 运行您自己的命令来呈现提示下方的[状态行](/docs/zh-CN/statusline) | 界面和终端 | Any file |

788| [`strictKnownMarketplaces`](#strictknownmarketplaces) | 允许列表用户可以添加和安装的[市场](/docs/zh-CN/plugin-marketplaces)来源 | 插件和技能 | Managed |788| [`strictKnownMarketplaces`](#strictknownmarketplaces) | 允许列表用户可以添加和安装的[市场](/docs/zh-CN/plugins/overview)来源 | 插件和技能 | Managed |

789| [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) | 阻止[技能](/docs/zh-CN/skills)、[代理](/docs/zh-CN/sub-agents)、[hooks](/docs/zh-CN/hooks) 和 [MCP 服务器](/docs/zh-CN/mcp)来自用户和项目来源 | 插件和技能 | Managed |789| [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) | 阻止[技能](/docs/zh-CN/skills)、[代理](/docs/zh-CN/sub-agents)、[hooks](/docs/zh-CN/hooks) 和 [MCP 服务器](/docs/zh-CN/mcp)来自用户和项目来源 | 插件和技能 | Managed |

790| [`strictPluginOnlyCustomization.agents`](#strictpluginonlycustomization-agents) | 将[代理](/docs/zh-CN/sub-agents)锁定到插件和托管来源 | 插件和技能 | Managed |790| [`strictPluginOnlyCustomization.agents`](#strictpluginonlycustomization-agents) | 将[代理](/docs/zh-CN/sub-agents)锁定到插件和托管来源 | 插件和技能 | Managed |

791| [`strictPluginOnlyCustomization.hooks`](#strictpluginonlycustomization-hooks) | 将[hooks](/docs/zh-CN/hooks)锁定到插件和托管来源 | 插件和技能 | Managed |791| [`strictPluginOnlyCustomization.hooks`](#strictpluginonlycustomization-hooks) | 将[hooks](/docs/zh-CN/hooks)锁定到插件和托管来源 | 插件和技能 | Managed |


794| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | 为子代理和主对话外的其他请求选择[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime) | 模型和响应 | Any file |794| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | 为子代理和主对话外的其他请求选择[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime) | 模型和响应 | Any file |

795| [`subagentStatusLine`](#subagentstatusline) | 使用您自己的命令重写[子代理](/docs/zh-CN/sub-agents)任务显示中的行 | 界面和终端 | Any file |795| [`subagentStatusLine`](#subagentstatusline) | 使用您自己的命令重写[子代理](/docs/zh-CN/sub-agents)任务显示中的行 | 界面和终端 | Any file |

796| [`switchModelsOnFlag`](#switchmodelsonflag) | 当[安全分类器](/docs/zh-CN/model-config#ask-before-switching)标记请求时自动切换模型或暂停 | 模型和响应 | Any file |796| [`switchModelsOnFlag`](#switchmodelsonflag) | 当[安全分类器](/docs/zh-CN/model-config#ask-before-switching)标记请求时自动切换模型或暂停 | 模型和响应 | Any file |

797| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | 停止加载[在您的 claude.ai 帐户上启用的插件](/docs/zh-CN/plugins-reference#synced-plugins)并停止下载新的 | 插件和技能 | User, local, or managed |797| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | 停止加载[在您的 claude.ai 帐户上启用的插件](/docs/zh-CN/plugins/loading#synced-plugins)并停止下载新的 | 插件和技能 | User, local, or managed |

798| [`syncClaudeAiSkills`](#syncclaudeaiskills) | 停止加载[在您的 claude.ai 帐户上启用的技能](/docs/zh-CN/skills#how-synced-skills-behave)并停止下载新的 | 插件和技能 | User, local, or managed |798| [`syncClaudeAiSkills`](#syncclaudeaiskills) | 停止加载[在您的 claude.ai 帐户上启用的技能](/docs/zh-CN/skills#how-synced-skills-behave)并停止下载新的 | 插件和技能 | User, local, or managed |

799| [`syntaxHighlightingDisabled`](#syntaxhighlightingdisabled) | 关闭 diffs 和代码块中的语法突出显示 | 界面和终端 | Any file |799| [`syntaxHighlightingDisabled`](#syntaxhighlightingdisabled) | 关闭 diffs 和代码块中的语法突出显示 | 界面和终端 | Any file |

800| [`taskOutputMaxChars`](#taskoutputmaxchars) | 在 v2.1.277 中删除,以及它调整大小的 `TaskOutput` 工具 | 内存和上下文 | Any file |800| [`taskOutputMaxChars`](#taskoutputmaxchars) | 在 v2.1.277 中删除,以及它调整大小的 `TaskOutput` 工具 | 内存和上下文 | Any file |


2952 `env`2952 `env`

2953</h3>2953</h3>

2954 2954 

2955为每个会话和 Claude Code 从中启动的子进程设置环境变量。[环境变量参考](/docs/zh-CN/env-vars)中的任何变量都可以放在这里,这是如何将其应用于每个会话或向您的团队推出的方式。2955为每个会话和 Claude Code 从中启动的子进程设置环境变量。[环境变量参考](/docs/zh-CN/env-vars)中的大多数变量都可以放在这里,这是如何将其应用于每个会话或向您的团队推出的方式。项目和本地设置无法设置[其中一些](#variables-claude-code-ignores-in-env)。

2956 2956 

2957* **Scope**: [`Any file`](#scopes)2957* **Scope**: [`Any file`](#scopes)

2958* **Type**: 将变量名映射到字符串值的对象2958* **Type**: 将变量名映射到字符串值的对象


2973 `env` 值如何与您的 shell 交互2973 `env` 值如何与您的 shell 交互

2974</h4>2974</h4>

2975 2975 

2976* 此处的值覆盖在您的 shell 中导出的相同变量,当多个设置文件设置一个变量时,[最高优先级](/docs/zh-CN/settings#settings-precedence)的值适用。2976* 此处的值覆盖在您的 shell 中导出的相同变量,当多个设置文件设置一个变量时,[最高优先级](/docs/zh-CN/settings#settings-precedence)的值适用。[Claude Code 在 `env` 中忽略的变量](#variables-claude-code-ignores-in-env)列出了项目和本地设置的例外。

2977* 要取消 shell 导出,将变量设置为 `""`。Claude Code 将空值视为提供程序选择的未设置,子进程继承空值。2977* 要取消 shell 导出,将变量设置为 `""`。Claude Code 将空值视为提供程序选择的未设置,子进程继承空值。

2978* `NO_COLOR` 和 `FORCE_COLOR` 在此处设置仅到达子进程。要更改 Claude Code 自己的界面颜色,请在启动 `claude` 之前在您的 shell 中设置它们。2978* `NO_COLOR` 和 `FORCE_COLOR` 在此处设置仅到达子进程。要更改 Claude Code 自己的界面颜色,请在启动 `claude` 之前在您的 shell 中设置它们。

2979* 此处的值是设置文件中的纯文本,到达 Claude Code 启动的每个子进程。对于轮换的 OTLP 承载令牌,使用 [`otelHeadersHelper`](#otelheadershelper);对于 API 凭证,使用 [`apiKeyHelper`](#apikeyhelper)。2979* 此处的值是设置文件中的纯文本,到达 Claude Code 启动的每个子进程。对于轮换的 OTLP 承载令牌,使用 [`otelHeadersHelper`](#otelheadershelper);对于 API 凭证,使用 [`apiKeyHelper`](#apikeyhelper)。


2984 2984 

2985* 从用户设置、`--settings` 和托管设置:在启动时,以及在运行会话中当保存的更改改变合并的 `env` 时。2985* 从用户设置、`--settings` 和托管设置:在启动时,以及在运行会话中当保存的更改改变合并的 `env` 时。

2986* 从项目和本地设置:在您信任工作区后,或在 `-p` 模式下启动时(从不显示信任对话),以及当保存的更改改变合并的 `env` 时。2986* 从项目和本地设置:在您信任工作区后,或在 `-p` 模式下启动时(从不显示信任对话),以及当保存的更改改变合并的 `env` 时。

2987* Claude Code 分类为安全的变量,例如模型选择、超时和限制、功能切换和遥测设置:在启动时从每个设置文件,除了[项目和本地设置无法设置的变量](#variables-claude-code-ignores-in-env)。2987* Claude Code 分类为安全的变量,例如模型选择、超时和限制、功能切换:在启动时从每个设置文件,除了[项目和本地设置无法设置的变量](#variables-claude-code-ignores-in-env)。

2988* 在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)后:新目录的项目和本地 `env` 值,在前一个目录的基础上。2988* 在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory)后:新目录的项目和本地 `env` 值,在前一个目录的基础上。

2989 2989 

2990<h4 id="variables-claude-code-ignores-in-env">2990<h4 id="variables-claude-code-ignores-in-env">


2995 2995 

2996 * 选择 Claude Code 存储或写入其自己文件的位置的变量:`CLAUDE_CONFIG_DIR`、`CLAUDE_CODE_TMPDIR` 和操作系统目录变量,例如 `HOME`、`TMPDIR`、`TMP`、`TEMP` 和 `XDG_*` 系列。2996 * 选择 Claude Code 存储或写入其自己文件的位置的变量:`CLAUDE_CONFIG_DIR`、`CLAUDE_CODE_TMPDIR` 和操作系统目录变量,例如 `HOME`、`TMPDIR`、`TMP`、`TEMP` 和 `XDG_*` 系列。

2997 * 导出会话内容的变量:[`OTEL_LOG_RAW_API_BODIES`](/docs/zh-CN/env-vars#variables) 和详细的 beta 跟踪对 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT`。2997 * 导出会话内容的变量:[`OTEL_LOG_RAW_API_BODIES`](/docs/zh-CN/env-vars#variables) 和详细的 beta 跟踪对 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT`。

2998 * [OpenTelemetry 导出器](/docs/zh-CN/monitoring-usage)变量,打开遥测、选择它的去向或选择它捕获的内容:

2999 

3000 * `CLAUDE_CODE_ENABLE_TELEMETRY`,加上增强的遥测 beta 对 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 和 `ENABLE_ENHANCED_TELEMETRY_BETA`

3001 * 导出器选择器 `OTEL_LOGS_EXPORTER`、`OTEL_METRICS_EXPORTER` 和 `OTEL_TRACES_EXPORTER`

3002 * 内容变量 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_ASSISTANT_RESPONSES`、`OTEL_LOG_TOOL_CONTENT` 和 `OTEL_LOG_TOOL_DETAILS`

3003 * `OTEL_EXPORTER_OTLP_*` 变量,其名称以 `_ENDPOINT`、`_HEADERS`、`_PROTOCOL`、`_CERTIFICATE`、`_CLIENT_KEY` 或 `_INSECURE` 结尾,采用通用和按信号形式,例如 `OTEL_EXPORTER_OTLP_ENDPOINT` 和 `OTEL_EXPORTER_OTLP_METRICS_HEADERS`

3004 * `OTEL_EXPORTER_PROMETHEUS_HOST` 和 `OTEL_EXPORTER_PROMETHEUS_PORT`

3005 

3006 只有这些值仍然适用于项目和本地设置,因为它们关闭某些内容:三个导出器选择器的 `none`,以及 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_CONTENT` 和 `OTEL_LOG_TOOL_DETAILS` 的关闭值,例如 `0`。这样的值覆盖您的用户设置中的相同变量,但不覆盖您启动 Claude Code 的环境、`--settings` 文件或托管设置设置的变量。

3007 

3008 当项目或本地设置文件设置此组中的变量时,本地交互式会话在启动时显示通知。运行 `/status` 或 `claude doctor` 以查看 Claude Code 忽略了哪些变量以及哪些关闭了遥测;两者都列出名称,从不列出值。非交互式运行(使用 `-p` 或 Agent SDK 会话)不显示通知,因此在升级后检查您的收集器是否仍然接收数据。如果没有,请在您的用户设置、托管设置、作业的环境或您使用 `--settings` 传递的文件中设置变量。

3009 

3010 在项目和本地设置中忽略此组需要 Claude Code v2.1.282 或更高版本。

2998 * 改变 Claude Code 如何启动或同步的变量,例如 `CLAUDE_CODE_PROCESS_WRAPPER`、`CLAUDE_CODE_SYNC_SKILLS`、`CLAUDE_CODE_SYNC_PLUGINS`、`CLAUDE_CODE_PLUGIN_CACHE_DIR` 和 `CLAUDE_CODE_PLUGIN_SEED_DIR`。3011 * 改变 Claude Code 如何启动或同步的变量,例如 `CLAUDE_CODE_PROCESS_WRAPPER`、`CLAUDE_CODE_SYNC_SKILLS`、`CLAUDE_CODE_SYNC_PLUGINS`、`CLAUDE_CODE_PLUGIN_CACHE_DIR` 和 `CLAUDE_CODE_PLUGIN_SEED_DIR`。

2999 3012 

3000 在 v2.1.251 之前,项目和本地设置可以设置此列表命名的每个变量,除了 `HOME`、`XDG_CONFIG_HOME` 和改变 Claude Code 如何启动或同步的变量。3013 在 v2.1.251 之前,项目和本地设置也可以设置此列表中选择 Claude Code 写入其文件位置或导出会话内容的变量,除了 `HOME` 和 `XDG_CONFIG_HOME`。

3001* Claude Code 的托管环境拥有的身份变量,例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`,从每个文件中被忽略。3014* Claude Code 的托管环境拥有的身份变量,例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`,从每个文件中被忽略。

3002* [`CLAUDE_CODE_MESSAGING_SOCKET` 和 `CLAUDE_CODE_MESSAGING_TOKEN`](/docs/zh-CN/env-vars#variables),Claude Code 自己导出的,从每个文件中被忽略。忽略套接字变量需要 Claude Code v2.1.224 或更高版本,忽略令牌需要 v2.1.228 或更高版本。3015* [`CLAUDE_CODE_MESSAGING_SOCKET` 和 `CLAUDE_CODE_MESSAGING_TOKEN`](/docs/zh-CN/env-vars#variables),Claude Code 自己导出的,从每个文件中被忽略。忽略套接字变量需要 Claude Code v2.1.224 或更高版本,忽略令牌需要 v2.1.228 或更高版本。

3003* [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/zh-CN/sessions#name-the-project-directory-yourself),Claude Code 仅从启动环境读取,从每个文件中被忽略;需要 v2.1.234 或更高版本。3016* [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/zh-CN/sessions#name-the-project-directory-yourself),Claude Code 仅从启动环境读取,从每个文件中被忽略;需要 v2.1.234 或更高版本。


3983自定义 Claude Code 添加到 git 提交和拉取请求的归属。提交默认获得 [git trailer](https://git-scm.com/docs/git-interpret-trailers),例如 `Co-Authored-By`;拉取请求描述获得纯文本。使用下面的子键分别设置每个部分。3996自定义 Claude Code 添加到 git 提交和拉取请求的归属。提交默认获得 [git trailer](https://git-scm.com/docs/git-interpret-trailers),例如 `Co-Authored-By`;拉取请求描述获得纯文本。使用下面的子键分别设置每个部分。

3984 3997 

3985* **Scope**: [`Any file`](#scopes)3998* **Scope**: [`Any file`](#scopes)

3986* **Type**: 包含 `commit` 和 `pr` 字符串以及 `sessionUrl` 布尔值的对象3999* **Type**: 包含 `commit` 和 `pr` 字符串以及 `sessionUrl` 布尔值的对象,或 `false` 以隐藏所有归属。`false` 值需要 Claude Code v2.1.281 或更高版本;更早的版本会拒绝它并[跳过整个用户、项目或本地设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)

3987* **Default**: 未设置,因此 Claude Code 使用每个子键下显示的标准归属4000* **Default**: 未设置,因此 Claude Code 使用每个子键下显示的标准归属

3988 4001 

4002要隐藏所有归属,请将 `attribution` 设置为 `false`。在早期版本也读取的设置文件中,将 [`commit`](#attribution-commit) 和 [`pr`](#attribution-pr) 设置为空字符串,并将 [`sessionUrl`](#attribution-sessionurl) 设置为 `false`。

4003 

3989此示例替换提交归属,删除拉取请求归属,并删除会话链接:4004此示例替换提交归属,删除拉取请求归属,并删除会话链接:

3990 4005 

3991```json settings.json theme={null}4006```json settings.json theme={null}


3998}4013}

3999```4014```

4000 4015 

4001要隐藏所有归属,请将 [`commit`](#attribution-commit) 和 [`pr`](#attribution-pr) 设置为空字符串,并将 [`sessionUrl`](#attribution-sessionurl) 设置为 `false`。一旦设置 `commit` 或 `pr`,Claude Code 将忽略已弃用的 `includeCoAuthoredBy` 设置,并对未设置的两个中的任何一个使用其默认文本。4016一旦设置 `commit` 或 `pr`,Claude Code 将忽略已弃用的 `includeCoAuthoredBy` 设置,并对未设置的两个中的任何一个使用其默认文本。

4002 4017 

4003Claude Code 告诉 Claude,您自己关于归属的说明(例如 CLAUDE.md 或 [memory](/docs/zh-CN/memory) 规则)优先于这些提交和 PR 行,除非该行在 [managed settings](/docs/zh-CN/managed-settings) 中设置。4018Claude Code 告诉 Claude,您自己关于归属的说明(例如 CLAUDE.md 或 [memory](/docs/zh-CN/memory) 规则)优先于这些提交和 PR 行,除非该行在 [managed settings](/docs/zh-CN/managed-settings) 中设置。

4004 4019 


4024}4039}

4025```4040```

4026 4041 

4027要立即隐藏所有归属,请将 [`attribution.commit`](#attribution-commit) 和 [`attribution.pr`](#attribution-pr) 设置为空字符串,并将 [`attribution.sessionUrl`](#attribution-sessionurl) 设置为 `false`。4042要隐藏所有归属,请参阅 [`attribution`](#attribution)。

4028 4043 

4029<h3 id="includegitinstructions">4044<h3 id="includegitinstructions">

4030 `includeGitInstructions`4045 `includeGitInstructions`


4182* **托管和 SDK hooks 运行**: 来自托管设置的 hooks 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks4197* **托管和 SDK hooks 运行**: 来自托管设置的 hooks 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks

4183* **强制启用的插件 hooks 运行**: 来自您的托管设置通过 [`enabledPlugins`](#enabledplugins) 强制启用的插件的 hooks。Claude Code 与完整的 `plugin@marketplace` ID 匹配,因此来自不同市场的同名插件保持被阻止。这使您可以通过组织市场分发经过审查的 hooks,同时阻止其他所有内容4198* **强制启用的插件 hooks 运行**: 来自您的托管设置通过 [`enabledPlugins`](#enabledplugins) 强制启用的插件的 hooks。Claude Code 与完整的 `plugin@marketplace` ID 匹配,因此来自不同市场的同名插件保持被阻止。这使您可以通过组织市场分发经过审查的 hooks,同时阻止其他所有内容

4184* **其他所有内容都被阻止**: 用户、项目和本地 hooks,来自其他插件的 hooks,以及在代理 frontmatter 中声明的 hooks4199* **其他所有内容都被阻止**: 用户、项目和本地 hooks,来自其他插件的 hooks,以及在代理 frontmatter 中声明的 hooks

4185* **禁用命令源插件**: Claude Code 还禁用具有 [`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources) 的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您明确将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`4200* **禁用命令源插件**: Claude Code 还禁用具有 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您明确将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`

4186* **市场 `headersHelper` 命令被阻止**: Claude Code 还会阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](#disablecommandpluginsources) 明确设置为 `false`,托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本4201* **市场 `headersHelper` 命令被阻止**: Claude Code 还会阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](#disablecommandpluginsources) 明确设置为 `false`,托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本

4187* **状态行和文件建议缩小到托管设置**: Claude Code 仅从托管设置读取 [`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](#filesuggestion) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines),遵循 [状态行和文件建议门](#status-line-and-file-suggestion-gates)4202* **状态行和文件建议缩小到托管设置**: Claude Code 仅从托管设置读取 [`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](#filesuggestion) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines),遵循 [状态行和文件建议门](#status-line-and-file-suggestion-gates)

4188 4203 

4189设置此键时,[`/goal`](/docs/zh-CN/goal) 命令无法运行,因为它依赖于 hooks。4204设置此键时,[`/goal`](/docs/zh-CN/goal) 命令无法运行,因为它依赖于 hooks。


4364<span id="plugin-settings" />4379<span id="plugin-settings" />

4365 4380 

4366<h2 id="plugins-and-skills">4381<h2 id="plugins-and-skills">

4367 插件和技能4382 Plugins 和 skills

4368</h2>4383</h2>

4369 4384 

4370启用插件、注册市场、限制组织允许的插件来源,以及控制加载哪些技能。有关安装和构建插件,请参阅 [Plugins](/docs/zh-CN/plugins)。4385启用 plugins,注册 marketplaces,限制组织允许的 plugin 源,并控制哪些 skills 加载。有关安装和构建 plugins,请参阅 [Plugins](/docs/zh-CN/plugins/overview)。

4371 4386 

4372<h3 id="disablebundledskills">4387<h3 id="disablebundledskills">

4373 `disableBundledSkills`4388 `disableBundledSkills`

4374</h3>4389</h3>

4375 4390 

4376关闭 Claude Code 附带的 [skills](/docs/zh-CN/skills) 和工作流。Claude Code 完全删除捆绑的技能和工作流,而内置命令(如 `/init`)仍可输入但对模型隐藏。4391关闭 Claude Code 附带的 [skills](/docs/zh-CN/skills) 和工作流。Claude Code 完全删除捆绑的 skills 和工作流,而内置命令(如 `/init`)仍可输入但对模型隐藏。

4377 4392 

4378* **Scope**: [`Any file`](#scopes)4393* **Scope**: [`Any file`](#scopes)

4379* **Type**: Boolean4394* **Type**: Boolean

4380 * `true`: Claude Code 删除捆绑的技能和工作流,并对模型隐藏内置命令(如 `/init`)4395 * `true`: Claude Code 删除捆绑的 skills 和工作流,并对模型隐藏内置命令(如 `/init`)

4381 * `false`: 捆绑的技能加载4396 * `false`: 捆绑的 skills 加载

4382* **Default**: 未设置,因此捆绑的技能加载4397* **Default**: 未设置,因此捆绑的 skills 加载

4383* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_BUNDLED_SKILLS`](/docs/zh-CN/env-vars) 设置为 `1` 会关闭一个会话的捆绑技能;两者中任何一个关闭它们,另一个就无法将其打开4398* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_BUNDLED_SKILLS`](/docs/zh-CN/env-vars) 设置为 `1` 会在一个会话中关闭捆绑的 skills;两者中任何一个关闭它们,另一个就无法将其打开

4384 4399 

4385```json settings.json theme={null}4400```json settings.json theme={null}

4386{4401{


4388}4403}

4389```4404```

4390 4405 

4391来自插件、`.claude/skills/` 和 `.claude/commands/` 的技能不受影响。`/doctor` 与内置命令一样可输入;要隐藏它,请改为设置 [`DISABLE_DOCTOR_COMMAND`](/docs/zh-CN/env-vars)。4406来自 plugins、`.claude/skills/` 和 `.claude/commands/` 的 skills 不受影响。`/doctor` 与内置命令一样仍可输入;要隐藏它,请改为设置 [`DISABLE_DOCTOR_COMMAND`](/docs/zh-CN/env-vars)。

4392 4407 

4393<h3 id="disableskillshellexecution">4408<h3 id="disableskillshellexecution">

4394 `disableSkillShellExecution`4409 `disableSkillShellExecution`

4395</h3>4410</h3>

4396 4411 

4397关闭 [skills](/docs/zh-CN/skills) 和来自用户、项目、插件或附加目录来源的自定义命令中 `` !`...` `` 和 ` ```! ` 块的内联 shell 执行。Claude Code 用 `[shell command execution disabled by policy]` 替换每个命令,而不是运行它。4412关闭 [skills](/docs/zh-CN/skills) 和来自用户、项目、plugin 或附加目录源的自定义命令中 `` !`...` `` 和 ` ```! ` 块的内联 shell 执行。Claude Code 用 `[shell command execution disabled by policy]` 替换每个命令,而不是运行它。

4398 4413 

4399* **Scope**: [`Any file`](#scopes)。托管设置中的 `true` 无法被其他地方的 `false` 覆盖。4414* **Scope**: [`Any file`](#scopes)。托管设置中的 `true` 无法被其他地方的 `false` 覆盖。

4400* **Type**: Boolean4415* **Type**: Boolean


4408}4423}

4409```4424```

4410 4425 

4411捆绑的技能和通过托管设置部署的技能不受影响。4426捆绑的 skills 和通过托管设置部署的 skills 不受影响。

4412 4427 

4413<h3 id="skilloverrides">4428<h3 id="skilloverrides">

4414 `skillOverrides`4429 `skillOverrides`

4415</h3>4430</h3>

4416 4431 

4417隐藏或折叠 [skill](/docs/zh-CN/skills#override-skill-visibility-from-settings),无需编辑其 `SKILL.md`。Claude Code 将每个技能名称下的值应用于 Claude 看到的技能列表和您的 `/` 自动完成。4432隐藏或折叠 [skill](/docs/zh-CN/skills#override-skill-visibility-from-settings),无需编辑其 `SKILL.md`。Claude Code 将每个 skill 名称下的值应用于 Claude 看到的 skill 列表和您的 `/` 自动完成。

4418 4433 

4419* **Scope**: [`Any file`](#scopes)。`/skills` 菜单写入 `.claude/settings.local.json`。4434* **Scope**: [`Any file`](#scopes)。`/skills` 菜单写入 `.claude/settings.local.json`。

4420* **Type**: 对象,将技能名称映射到以下之一:4435* **Type**: 对象,将 skill 名称映射到以下之一:

4421 * `"on"`: Claude 看到该技能,您可以输入 `/name`4436 * `"on"`: Claude 看到该 skill,您可以输入 `/name`

4422 * `"name-only"`: Claude 按名称看到该技能,但不显示其描述4437 * `"name-only"`: Claude 按名称看到该 skill,但不显示其描述

4423 * `"user-invocable-only"`: Claude 看不到该技能,但您仍可以输入 `/name`4438 * `"user-invocable-only"`: Claude 看不到该 skill,但您仍可输入 `/name`

4424 * `"off"`: Claude 看不到该技能,`/name` 从自动完成中隐藏4439 * `"off"`: Claude 看不到该 skill,`/name` 从自动完成中隐藏

4425* **Default**: 未设置,因此每个技能都是 `"on"`4440* **Default**: 未设置,因此每个 skill 都是 `"on"`

4426 4441 

4427此示例仅按名称向 Claude 列出 `legacy-context`,并从 Claude 和 `/` 自动完成中隐藏 `deploy`:4442此示例仅按名称向 Claude 列出 `legacy-context`,并从 Claude 和 `/` 自动完成中隐藏 `deploy`:

4428 4443 


4435}4450}

4436```4451```

4437 4452 

4438覆盖不适用于插件技能,您可以通过 `/plugin` 管理这些技能。4453覆盖不适用于 plugin skills,您可以通过 `/plugin` 管理这些。

4439 4454 

4440在托管设置和使用 `--settings` 传递的文件中,捆绑技能别名上的键(如 `/doctor` 的 `checkup`)也适用于该技能;请参阅 [别名键如何与技能自身名称上的键结合](/docs/zh-CN/skills#override-skill-visibility-from-settings)。4455在托管设置和使用 `--settings` 传递的文件中,捆绑 skill 的别名上的键(如 `/doctor` 的 `checkup`)也适用于该 skill;请参阅 [别名键如何与 skill 自身名称上的键结合](/docs/zh-CN/skills#override-skill-visibility-from-settings)。

4441 4456 

4442<h3 id="syncclaudeaiskills">4457<h3 id="syncclaudeaiskills">

4443 `syncClaudeAiSkills`4458 `syncClaudeAiSkills`

4444</h3>4459</h3>

4445 4460 

4446关闭 [您在 claude.ai 上启用的技能](/docs/zh-CN/skills#how-synced-skills-behave) 的下载。Claude Code 在 [您使用 claude.ai 帐户登录的终端会话](/docs/zh-CN/skills#where-synced-skills-load)(交互式或非交互式)以及 Cowork 和云会话中将它们下载到 `~/.claude/skills/synced/`。设置为 `false` 以停止该下载并停止加载已同步的技能。Claude Code 仅接受 `false`:`true` 与未设置相同,不会打开同步。4461关闭 [为您的 claude.ai 账户启用的 skills](/docs/zh-CN/skills#how-synced-skills-behave) 的下载。Claude Code 在 [您使用 claude.ai 账户登录的终端会话](/docs/zh-CN/skills#where-synced-skills-load)(交互式或非交互式)以及 Cowork 和云会话中将它们下载到 `~/.claude/skills/synced/`。设置 `false` 以停止该下载并停止加载已同步的 skills。Claude Code 仅接受 `false`:`true` 与未设置相同,不会在其他情况下关闭的地方打开同步。

4447 4462 

4448* **Scope**: [`User, local, or managed`](#scopes),以及使用 `--settings` 传递的文件。存储库无法为您关闭它。4463* **Scope**: [`User, local, or managed`](#scopes),以及使用 `--settings` 传递的文件。存储库无法为您关闭它。

4449* **Type**: Boolean4464* **Type**: Boolean

4450 * `false`: Claude Code 停止下载同步的技能并停止加载 `~/.claude/skills/synced/` 中已有的技能。在用户或托管设置中,它还将它们移动到 `~/.claude/skills/.trash/`4465 * `false`: Claude Code 停止下载同步的 skills,停止加载 `~/.claude/skills/synced/` 中已有的 skills。在用户或托管设置中,它还将它们移动到 `~/.claude/skills/.trash/`

4451 * `true`: 与未设置相同4466 * `true`: 与未设置相同

4452* **Default**: 未设置,因此使用 claude.ai 帐户登录的会话会同步您的技能4467* **Default**: 未设置,因此使用 claude.ai 账户登录的会话同步您的 skills

4453 4468 

4454此示例防止机器在任何会话中下载帐户的技能:4469此示例防止机器在任何会话中下载账户的 skills:

4455 4470 

4456```json settings.json theme={null}4471```json settings.json theme={null}

4457{4472{


4463 `syncClaudeAiPlugins`4478 `syncClaudeAiPlugins`

4464</h3>4479</h3>

4465 4480 

4466关闭 [您在 claude.ai 上启用的插件](/docs/zh-CN/plugins-reference#synced-plugins) 的下载。Claude Code 在您使用 claude.ai 帐户登录的终端会话开始时将它们下载到 `~/.claude/plugins/synced/`,以及在 Cowork 和云会话中,并将每个加载为 `<name>@synced`。设置为 `false` 以停止该下载并停止加载已同步的插件。Claude Code 仅接受 `false`:`true` 与未设置相同,不会打开同步。需要 Claude Code v2.1.273 或更高版本。4481关闭 [为您的 claude.ai 账户启用的 plugins](/docs/zh-CN/plugins/loading#synced-plugins) 的下载。Claude Code 在您使用 claude.ai 账户登录的终端会话开始时和 Cowork 会话中将它们下载到 `~/.claude/plugins/synced/`,并将每个加载为 `<name>@synced`。设置 `false` 以停止该下载并停止加载已同步的 plugins。Claude Code 仅接受 `false`:`true` 与未设置相同,不会在其他情况下关闭的地方打开同步。需要 Claude Code v2.1.273 或更高版本。

4467 4482 

4468* **Scope**: [`User, local, or managed`](#scopes),以及使用 `--settings` 传递的文件。存储库无法为您关闭它。4483* **Scope**: [`User, local, or managed`](#scopes),以及使用 `--settings` 传递的文件。存储库无法为您关闭它。

4469* **Type**: Boolean4484* **Type**: Boolean

4470 * `false`: Claude Code 停止下载同步的插件并停止加载 `~/.claude/plugins/synced/` 中已有的插件。在用户或托管设置中,它还将它们移动到 `~/.claude/plugins/.trash/`4485 * `false`: Claude Code 停止下载同步的 plugins,停止加载 `~/.claude/plugins/synced/` 中已有的 plugins。在用户或托管设置中,它还将它们移动到 `~/.claude/plugins/.trash/`

4471 * `true`: 与未设置相同4486 * `true`: 与未设置相同

4472* **Default**: 未设置,因此使用 claude.ai 帐户登录的会话会同步您的插件4487* **Default**: 未设置,因此使用 claude.ai 账户登录的会话同步您的 plugins

4473 4488 

4474要关闭一个同步的插件而不是全部,请在 [`enabledPlugins`](#enabledplugins) 中设置 `"<name>@synced": false`。4489要关闭一个同步的 plugin 而不是全部,请在 [`enabledPlugins`](#enabledplugins) 中设置 `"<name>@synced": false`。

4475 4490 

4476此示例防止机器在任何会话中下载帐户的插件:4491此示例防止机器在任何会话中下载账户的 plugins:

4477 4492 

4478```json settings.json theme={null}4493```json settings.json theme={null}

4479{4494{


4485 `allowedChannelPlugins`4500 `allowedChannelPlugins`

4486</h3>4501</h3>

4487 4502 

4488选择哪些 [channel](/docs/zh-CN/channels) 插件可以将消息推送到您组织中的会话。设置后,Claude Code 使用您的列表代替默认的 Anthropic 允许列表;每个条目命名一个插件及其来自的市场。4503选择哪些 [channel](/docs/zh-CN/channels) plugins 可以将消息推送到您组织中的会话。设置后,Claude Code 使用您的列表代替默认的 Anthropic 允许列表;每个条目命名一个 plugin 和它来自的 marketplace。

4489 4504 

4490* **Scope**: [`Managed`](#scopes)4505* **Scope**: [`Managed`](#scopes)

4491* **Type**: 对象数组,每个对象都有 `marketplace` 和 `plugin` 字符串。条目也可以是 `"plugin@marketplace"` 字符串,如 `"telegram@claude-plugins-official"`,Claude Code 将其视为等效对象。字符串形式需要 Claude Code v2.1.267 或更高版本;较早版本在包含一个时拒绝整个 `allowedChannelPlugins` 值4506* **Type**: 对象数组,每个都有 `marketplace` 和 `plugin` 字符串。条目也可以是 `"plugin@marketplace"` 字符串,如 `"telegram@claude-plugins-official"`,Claude Code 将其视为等效对象。字符串形式需要 Claude Code v2.1.267 或更高版本;更早的版本在 `allowedChannelPlugins` 包含一个时拒绝整个值

4492* **Default**: 未设置,因此 Claude Code 使用默认的 Anthropic 允许列表4507* **Default**: 未设置,因此 Claude Code 使用默认的 Anthropic 允许列表

4493 4508 

4494此示例打开频道并仅允许来自官方 Anthropic 市场的 Telegram 插件:4509此示例打开 channels 并仅允许来自官方 Anthropic marketplace 的 Telegram plugin:

4495 4510 

4496```json managed-settings.json theme={null}4511```json managed-settings.json theme={null}

4497{4512{


4502}4517}

4503```4518```

4504 4519 

4505空数组阻止每个频道插件。4520空数组阻止每个 channel plugin。

4506 4521 

4507此键在频道通过帐户的 [`channelsEnabled`](#channelsenabled) 门控后生效:在 Team 和 Enterprise 计划上,以及在具有托管设置的 Console 帐户上,这意味着 `channelsEnabled: true`。请参阅 [限制哪些频道插件可以运行](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run)。4522此键在 channels 通过账户的 [`channelsEnabled`](#channelsenabled) 门控后生效:在 Team 和 Enterprise 计划上,以及在具有托管设置的 Console 账户上,这意味着 `channelsEnabled: true`。请参阅 [限制哪些 channel plugins 可以运行](/docs/zh-CN/channels#restrict-which-channel-plugins-can-run)。

4508 4523 

4509<h3 id="blockedmarketplaces">4524<h3 id="blockedmarketplaces">

4510 `blockedMarketplaces`4525 `blockedMarketplaces`

4511</h3>4526</h3>

4512 4527 

4513为您的组织阻止插件市场来源。Claude Code 在市场添加以及插件安装、更新、刷新和自动更新时检查阻止列表,因此在您设置策略之前添加的市场无法用于获取插件。在下载前检查被阻止的来源,因此它们永远不会接触文件系统。4528阻止您组织的 plugin marketplace 源。Claude Code 在 marketplace 添加以及 plugin 安装、更新、刷新和自动更新时检查阻止列表,因此在您设置策略之前添加的 marketplace 也无法用于获取 plugins。阻止的源在下载前被检查,因此它们永远不会接触文件系统。

4514 4529 

4515如果您在 [claude.ai 管理控制台](/docs/zh-CN/server-managed-settings) 中设置此键,claude.ai 也会在您组织中的任何人从 claude.ai 上的 git 存储库添加市场时应用它,如 [限制如何工作](/docs/zh-CN/plugin-marketplaces#how-restrictions-work) 所述。4530如果您在 [claude.ai 管理控制台](/docs/zh-CN/server-managed-settings) 中设置此键,claude.ai 也会在您组织中的任何人从 claude.ai 上的 git 存储库添加 marketplace 时应用它,如 [限制如何工作](/docs/zh-CN/plugins/org#restrict-what-users-can-install) 所述。

4516 4531 

4517* **Scope**: [`Managed`](#scopes)4532* **Scope**: [`Managed`](#scopes)

4518* **Type**: 市场来源对象数组,形式与 [`strictKnownMarketplaces`](#allowed-source-types) 相同4533* **Type**: marketplace 源对象数组,形式与 [`strictKnownMarketplaces`](#allowed-source-types) 相同

4519* **Default**: 未设置,因此没有市场被阻止4534* **Default**: 未设置,因此没有 marketplace 被阻止

4520 4535 

4521此示例阻止一个 GitHub 存储库作为市场来源:4536此示例阻止一个 GitHub 存储库作为 marketplace 源:

4522 4537 

4523```json managed-settings.json theme={null}4538```json managed-settings.json theme={null}

4524{4539{


4528}4543}

4529```4544```

4530 4545 

4531一个 `github` 条目可能使用 [owner-wildcard 形式](#owner-wildcards) `"owner/*"` 来阻止该 GitHub 所有者下的每个存储库,这需要 Claude Code v2.1.223 或更高版本。添加 `{ "source": "skills-dir" }` 以停止 Claude Code 从 `~/.claude/skills/` 加载 [`@skills-dir` 插件](/docs/zh-CN/plugins-reference#skills-directory-plugins),而不限制任何市场。请参阅 [托管市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)。4546一个 `github` 条目可能使用 [owner-wildcard 形式](#owner-wildcards) `"owner/*"` 来阻止该 GitHub owner 下的每个存储库,这需要 Claude Code v2.1.223 或更高版本。添加 `{ "source": "skills-dir" }` 以停止 Claude Code 从 `~/.claude/skills/` 加载 [`@skills-dir` plugins](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository),而不限制任何 marketplace。请参阅 [托管 marketplace 限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install)。

4532 4547 

4533<h3 id="channelsenabled">4548<h3 id="channelsenabled">

4534 `channelsEnabled`4549 `channelsEnabled`

4535</h3>4550</h3>

4536 4551 

4537为您的组织允许 [channels](/docs/zh-CN/channels)。在 claude.ai Team 和 Enterprise 计划上,Claude Code 阻止频道,直到您将其设置为 `true`。对于使用 API 密钥进行身份验证的 [Anthropic Console](/docs/zh-CN/authentication#claude-console-authentication) 帐户,默认允许频道。如果您的组织部署托管设置,Claude Code 也会在这些帐户上阻止频道,直到您将此键设置为 `true`。4552为您的组织允许 [channels](/docs/zh-CN/channels)。在 claude.ai Team 和 Enterprise 计划上,Claude Code 阻止 channels 直到您将其设置为 `true`。对于使用 API 密钥进行身份验证的 [Anthropic Console](/docs/zh-CN/authentication#claude-console-authentication) 账户,channels 默认被允许。如果您的组织部署托管设置,Claude Code 也会在这些账户上阻止 channels,直到您将此键设置为 `true`。

4538 4553 

4539* **Scope**: [`Managed`](#scopes)4554* **Scope**: [`Managed`](#scopes)

4540* **Type**: Boolean4555* **Type**: Boolean

4541 * `true`: Claude Code 为您的组织允许频道4556 * `true`: Claude Code 为您的组织允许 channels

4542 * `false`: 与未设置相同;频道是否被阻止取决于您的计划,如默认值所述4557 * `false`: 与未设置相同;channels 是否被阻止取决于您的计划,如默认值所述

4543* **Default**: 未设置;频道在 Team 和 Enterprise 计划以及具有托管设置的 Console 帐户上被阻止,在 Pro 和 Max 计划以及没有托管设置的 Console 帐户上被允许4558* **Default**: 未设置;channels 在 Team 和 Enterprise 计划上以及在具有托管设置的 Console 账户上被阻止,在 Pro 和 Max 计划上以及在没有托管设置的 Console 账户上被允许

4544 4559 

4545```json managed-settings.json theme={null}4560```json managed-settings.json theme={null}

4546{4561{


4548}4563}

4549```4564```

4550 4565 

4551要限制启用后哪些插件可以注册为频道,请设置 [`allowedChannelPlugins`](#allowedchannelplugins)。请参阅 [Enterprise controls](/docs/zh-CN/channels#enterprise-controls)。4566要限制哪些 plugins 可以在启用后注册为 channels,请设置 [`allowedChannelPlugins`](#allowedchannelplugins)。请参阅 [企业控制](/docs/zh-CN/channels#enterprise-controls)。

4552 4567 

4553<h3 id="disablecommandpluginsources">4568<h3 id="disablecommandpluginsources">

4554 `disableCommandPluginSources`4569 `disableCommandPluginSources`

4555</h3>4570</h3>

4556 4571 

4557阻止 [`command` 插件来源](/docs/zh-CN/plugin-marketplaces#command-sources),它通过在用户机器上运行市场声明的命令来安装插件。当您将其设置为 `true` 时,Claude Code 永远不会运行该命令,不会安装或更新命令来源的插件,并停止加载已安装的插件。设置为 `false` 以明确允许它们。每当它阻止命令来源时,无论您将其设置为 `true` 还是在 [`allowManagedHooksOnly`](#allowmanagedhooksonly) 下保持未设置,它也会阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugin-marketplaces#authenticate-archive-downloads),除了托管设置本身声明的市场。需要 Claude Code v2.1.229 或更高版本,`headersHelper` 阻止需要 v2.1.238 或更高版本。4572阻止 [`command` plugin 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source),它通过在用户的机器上运行 marketplace 声明的命令来安装 plugin。当您将其设置为 `true` 时,Claude Code 永远不会运行该命令,不会安装或更新命令源的 plugins,并停止加载已安装的 plugins。设置为 `false` 以明确允许它们。每当它阻止命令源时,无论您将其设置为 `true` 还是在 [`allowManagedHooksOnly`](#allowmanagedhooksonly) 下保持未设置,它也会阻止 marketplace [`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除了托管设置本身声明的 marketplace。需要 Claude Code v2.1.229 或更高版本,`headersHelper` 阻止需要 v2.1.238 或更高版本。

4558 4573 

4559* **Scope**: [`Managed`](#scopes)4574* **Scope**: [`Managed`](#scopes)

4560* **Type**: Boolean4575* **Type**: Boolean

4561 * `true`: Claude Code 永远不会运行市场声明的命令,不会安装或更新命令来源的插件,并停止加载已安装的插件4576 * `true`: Claude Code 永远不会运行 marketplace 声明的命令,不会安装或更新命令源的 plugins,并停止加载已安装的 plugins

4562 * `false`: Claude Code 明确允许命令来源的插件4577 * `false`: Claude Code 明确允许命令源的 plugins

4563* **Default**: 未设置,因此 Claude Code 遵循 [`allowManagedHooksOnly`](#allowmanagedhooksonly):限制 hook 执行到托管设置的组织也会禁用命令来源4578* **Default**: 未设置,因此 Claude Code 遵循 [`allowManagedHooksOnly`](#allowmanagedhooksonly):限制 hook 执行到托管设置的组织也会禁用命令源

4564 4579 

4565```json managed-settings.json theme={null}4580```json managed-settings.json theme={null}

4566{4581{


4574 `pluginSuggestionMarketplaces`4589 `pluginSuggestionMarketplaces`

4575</h3>4590</h3>

4576 4591 

4577命名其插件可以显示为上下文安装建议的市场,在微调提示和固定在 `/plugin` **Discover** 选项卡顶部。内置的第一方前端设计提示不受影响。建议来自每个插件在其市场条目中的 `relevance` 声明。4592命名其 plugins 可以作为上下文安装建议出现的 marketplaces,在 spinner 提示和 `/plugin` **Discover** 标签顶部固定。内置的第一方前端设计提示不受影响。建议来自每个 plugin 在其 marketplace 条目中的 `relevance` 声明。

4578 4593 

4579* **Scope**: [`Managed`](#scopes)4594* **Scope**: [`Managed`](#scopes)

4580* **Type**: 市场名称数组4595* **Type**: marketplace 名称数组

4581* **Default**: 未设置,因此没有市场声明的建议出现4596* **Default**: 未设置,因此没有 marketplace 声明的建议出现

4582 4597 

4583```json managed-settings.json theme={null}4598```json managed-settings.json theme={null}

4584{4599{


4586}4601}

4587```4602```

4588 4603 

4589名称仅在市场在机器上注册且其注册来源也在同一托管设置中声明时生效,要么作为该名称的 [`extraKnownMarketplaces`](#extraknownmarketplaces) 条目,要么作为 [`strictKnownMarketplaces`](#strictknownmarketplaces) 的条目。Claude Code 忽略从不同来源注册的市场,即使在允许列表名称下也是如此。官方市场不受来源要求的限制:仅允许列表其名称就足够了,因为该名称只能从官方 Anthropic 来源注册。请参阅 [按上下文建议插件](/docs/zh-CN/plugin-relevance)。4604一个名称仅在 marketplace 在机器上注册且其注册源也在同一托管设置中声明时生效,要么作为该名称的 [`extraKnownMarketplaces`](#extraknownmarketplaces) 条目,要么作为 [`strictKnownMarketplaces`](#strictknownmarketplaces) 的条目。Claude Code 忽略从不同源注册的 marketplace,即使在允许列表名称下。官方 marketplace 豁免源要求:仅允许列表其名称就足够了,因为该名称只能从官方 Anthropic 源注册。请参阅 [按上下文建议 plugins](/docs/zh-CN/plugins/relevance)。

4590 4605 

4591<h3 id="plugintrustmessage">4606<h3 id="plugintrustmessage">

4592 `pluginTrustMessage`4607 `pluginTrustMessage`

4593</h3>4608</h3>

4594 4609 

4595将您组织自己的文本添加到 Claude Code 在安装前显示的插件信任警告中,例如确认来自您内部市场的插件已被审查。4610在安装前向 Claude Code 显示的 plugin 信任警告中添加您组织自己的文本,例如确认来自您内部 marketplace 的 plugins 已被审查。

4596 4611 

4597* **Scope**: [`Managed`](#scopes)4612* **Scope**: [`Managed`](#scopes)

4598* **Type**: 字符串4613* **Type**: 字符串


4608 `strictKnownMarketplaces`4623 `strictKnownMarketplaces`

4609</h3>4624</h3>

4610 4625 

4611限制您组织中的人员可以添加和安装插件的插件市场来源。Claude Code 在市场添加以及插件安装、更新、刷新和自动更新时强制执行允许列表,在任何网络或文件系统操作之前,因此在您设置策略之前添加的市场一旦其来源不再匹配就无法用于获取插件。被阻止的用户会看到一个错误,命名托管策略。4626限制您组织中的人员可以添加和安装 plugins 的 plugin marketplace 源。Claude Code 在 marketplace 添加以及 plugin 安装、更新、刷新和自动更新时强制执行允许列表,在任何网络或文件系统操作之前,因此在您设置策略之前添加的 marketplace 一旦其源不再匹配就无法用于获取 plugins。被阻止的用户会看到一个错误,命名托管策略。

4612 4627 

4613如果您在 [claude.ai 管理控制台](/docs/zh-CN/server-managed-settings) 中设置此键,claude.ai 也会在您组织中的任何人从 claude.ai 上的 git 存储库添加市场时应用它,如 [限制如何工作](/docs/zh-CN/plugin-marketplaces#how-restrictions-work) 所述。4628如果您在 [claude.ai 管理控制台](/docs/zh-CN/server-managed-settings) 中设置此键,claude.ai 也会在您组织中的任何人从 claude.ai 上的 git 存储库添加 marketplace 时应用它,如 [限制如何工作](/docs/zh-CN/plugins/org#restrict-what-users-can-install) 所述。

4614 4629 

4615* **Scope**: [`Managed`](#scopes)4630* **Scope**: [`Managed`](#scopes)

4616* **Type**: 市场来源对象数组;请参阅 [允许的来源类型](#allowed-source-types)4631* **Type**: marketplace 源对象数组;请参阅 [允许的源类型](#allowed-source-types)

4617* **Default**: 未设置,因此用户可以添加任何市场。空数组是完全锁定,阻止每个市场来源,包括官方 Anthropic 市场4632* **Default**: 未设置,因此用户可以添加任何 marketplace。空数组是完全锁定,阻止每个 marketplace 源,包括官方 Anthropic marketplace

4618 4633 

4619此示例允许两个 GitHub 存储库,一个固定到 `v2.0` ref,一个托管的 `marketplace.json` URL:4634此示例允许两个 GitHub 存储库,一个固定到 `v2.0` ref,一个托管的 `marketplace.json` URL:

4620 4635 


4628}4643}

4629```4644```

4630 4645 

4631您也可以将此键写为 `allowedMarketplaces`;[市场键别名](#marketplace-key-aliases) 描述 Claude Code 如何处理别名以及哪个版本接受它。此键是策略门控:它控制用户可能添加什么但不注册任何内容。要在一个文件中限制和预注册,请参阅 [与 `extraKnownMarketplaces` 结合](#combine-with-extraknownmarketplaces)。对于用户面向的视图,请参阅 [托管市场限制](/docs/zh-CN/plugin-marketplaces#managed-marketplace-restrictions)。4646您也可以将此键写为 `allowedMarketplaces`;[Marketplace 键别名](#marketplace-key-aliases) 描述 Claude Code 如何处理别名以及哪个版本接受它。此键是一个策略门控:它控制用户可能添加什么,但不注册任何内容。要在一个文件中限制和预注册,请参阅 [与 `extraKnownMarketplaces` 结合](#combine-with-extraknownmarketplaces)。对于用户面向的视图,请参阅 [托管 marketplace 限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install)。

4632 4647 

4633<h4 id="allowed-source-types">4648<h4 id="allowed-source-types">

4634 允许的来源类型4649 允许的源类型

4635</h4>4650</h4>

4636 4651 

4637下面每个条目显示每个来源类型的一个允许列表条目及其接受的字段。大多数类型完全匹配;`hostPattern` 和 `pathPattern` 按正则表达式匹配,`github` 条目可以使用 [owner 通配符](#owner-wildcards)。4652下面每个条目显示每个源类型的一个允许列表条目及其接受的字段。大多数类型精确匹配;`hostPattern` 和 `pathPattern` 按正则表达式匹配,`github` 条目可以使用 [owner 通配符](#owner-wildcards)。

4638 4653 

4639| Source | Example entry | Fields |4654| Source | Example entry | Fields |

4640| :------------ | :------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------- |4655| :------------ | :------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------- |

4641| `github` | `{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" }` | `repo` 必需;`ref` 是分支或标签;`path` 是子目录 |4656| `github` | `{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" }` | `repo` 必需;`ref` 是分支或标签;`path` 是子目录 |

4642| `git` | `{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git", "ref": "production" }` | `url` 必需;`ref` 和 `path` 与 `github` 相同 |4657| `git` | `{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git", "ref": "production" }` | `url` 必需;`ref` 和 `path` 与 `github` 相同 |

4643| `url` | `{ "source": "url", "url": "https://plugins.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }` | `url` 必需;`headers` 为经过身份验证的访问添加 HTTP 标头 |4658| `url` | `{ "source": "url", "url": "https://plugins.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }` | `url` 必需;`headers` 为经过身份验证的访问添加 HTTP 标头 |

4644| `file` | `{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }` | `path` 必需,`marketplace.json` 文件的绝对路径 |4659| `file` | `{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }` | `path` 必需,`marketplace.json` 文件的绝对路径 |

4645| `directory` | `{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }` | `path` 必需,包含 `.claude-plugin/marketplace.json` 的目录的绝对路径 |4660| `directory` | `{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }` | `path` 必需,包含 `.claude-plugin/marketplace.json` 的目录的绝对路径 |

4646| `hostPattern` | `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }` | `hostPattern` 必需,针对市场主机匹配的正则表达式 |4661| `hostPattern` | `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }` | `hostPattern` 必需,在 marketplace 主机中任何地方匹配的正则表达式;用 `^` 和 `$` 锚定它以匹配整个主机 |

4647| `pathPattern` | `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }` | `pathPattern` 必需,针对 `file` 和 `directory` 来源的 `path` 匹配的正则表达式 |4662| `pathPattern` | `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }` | `pathPattern` 必需,在 `file` 和 `directory` 源的 `path` 中任何地方匹配的正则表达式;用 `^` 开始它以固定前缀 |

4648| `skills-dir` | `{ "source": "skills-dir" }` | 无字段。选择加入 `~/.claude/skills/` 插件扫描 |4663| `skills-dir` | `{ "source": "skills-dir" }` | 无字段。选择 `~/.claude/skills/` plugin 扫描回入 |

4649 4664 

4650三个来源类型有超出表格的规则:4665三个源类型有超出表格的规则:

4651 4666 

4652* **`url`**: URL 市场仅下载 `marketplace.json` 文件,Claude Code 不会从该服务器按相对路径获取插件文件,因此其插件必须使用 [插件来源](/docs/zh-CN/plugin-marketplaces#plugin-sources),而不是相对路径,如存档 URL,可以在同一主机上。对于具有相对路径的插件,请改用基于 Git 的市场。请参阅 [URL 基市场中的相对路径插件失败](/docs/zh-CN/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces)。4667* **`url`**: URL marketplace 仅下载 `marketplace.json` 文件,Claude Code 不从该服务器按相对路径获取 plugin 文件,因此其 plugins 必须使用 [plugin 源](/docs/zh-CN/plugins/marketplace-reference#plugin-sources),而不是相对路径,如存档 URL,可以在同一主机上。对于具有相对路径的 plugins,请改用基于 Git 的 marketplace。请参阅 [URL 基础 marketplaces 中的相对路径 plugins 失败](/docs/zh-CN/plugins/troubleshooting#plugins-with-relative-paths-fail-in-url-based-marketplaces)。

4653* **`hostPattern`**: 使用它来允许内部 GitHub Enterprise 或 GitLab 服务器上的每个市场,而无需列出每个存储库。Claude Code 针对 `github.com` 匹配 `github` 来源,从 `url` 来源获取主机名,并根据 [git URL](https://git-scm.com/docs/git-clone#_git_urls) 的形式从 `git` 来源获取:4668* **`hostPattern`**: 使用它来允许内部 GitHub Enterprise 或 GitLab 服务器上的每个 marketplace,而无需列出每个存储库。Claude Code 针对 `github.com` 匹配 `github` 源,从 `url` 源获取主机名,从 `git` 源获取它,取决于 [git URL](https://git-scm.com/docs/git-clone#_git_urls) 的形式:

4654 4669 

4655 * 具有方案的 URL,如 `https://` 或 `ssh://`:URL 中的主机名。4670 * 具有方案的 URL,如 `https://` 或 `ssh://`:URL 中的主机名。

4656 * 没有方案的 SSH 地址,采用 git 的 `user@host:path` 形式,如 `git@git.example.com:tools/plugins.git`:`@` 和 `:` 之间的主机,这是 git 连接到的主机。4671 * 没有方案的 SSH 地址,采用 git 的 `user@host:path` 形式,如 `git@git.example.com:tools/plugins.git`:`@` 和 `:` 之间的主机,这是 git 连接到的主机。

4657 * 任何其他没有方案的形式:没有主机,因此没有 `strictKnownMarketplaces` `hostPattern` 条目匹配它。对于 `blockedMarketplaces` `hostPattern`,Claude Code 从更广泛的形式集中获取主机,因此阻止列表条目仍可以匹配这样的形式。在 v2.1.234 之前,`strictKnownMarketplaces` `hostPattern` 也匹配 git 不视为 SSH 地址的某些形式。4672 * 任何其他没有方案的形式:没有主机,因此没有 `strictKnownMarketplaces` `hostPattern` 条目匹配它。对于 `blockedMarketplaces` `hostPattern`,Claude Code 从更广泛的形式集合中获取主机,因此阻止列表条目仍可以匹配这样的形式。在 v2.1.234 之前,`strictKnownMarketplaces` `hostPattern` 也匹配 git 不视为 SSH 地址的某些形式。

4658 4673 

4659 `file` 和 `directory` 来源没有主机,永远不会匹配 `hostPattern` 条目。4674 `file` 和 `directory` 源没有主机,永远不会匹配 `hostPattern` 条目。

4660* **`pathPattern`**: 使用它来允许文件系统市场以及网络来源的 `hostPattern` 条目。`".*"` 允许每个本地路径;更窄的模式如 `"^/opt/approved/"` 限制到目录。4675* **`pathPattern`**: 使用它来允许文件系统 marketplaces 与网络源的 `hostPattern` 条目一起。`".*"` 允许每个本地路径;更窄的模式如 `"^/opt/approved/"` 限制到一个目录。

4661 4676 

4662任何允许列表,即使是空的,也会停止 Claude Code 从 `~/.claude/skills/` 加载 [`@skills-dir` 插件](/docs/zh-CN/plugins-reference#skills-directory-plugins)。添加 `{ "source": "skills-dir" }` 条目以继续加载它们;该条目在此键和 `blockedMarketplaces` 之外没有意义。4677任何允许列表,即使是空的,也会停止 Claude Code 从 `~/.claude/skills/` 加载 [`@skills-dir` plugins](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)。添加 `{ "source": "skills-dir" }` 条目以继续加载它们;该条目在此键和 `blockedMarketplaces` 之外没有意义。

4663 4678 

4664<h4 id="owner-wildcards">4679<h4 id="owner-wildcards">

4665 Owner 通配符4680 Owner 通配符

4666</h4>4681</h4>

4667 4682 

4668一个 `github` 条目,其 `repo` 值为 `"<owner>/*"`,匹配该 GitHub 所有者下的每个存储库。Owner 通配符需要 Claude Code v2.1.223 或更高版本,仅在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中工作。在 `github` 来源出现的其他地方,如 `extraKnownMarketplaces` 或 `/plugin marketplace add`,`repo` 值必须命名单个存储库。在 v2.1.223 之前,Claude Code 按字面比较条目,因此允许列表条目不匹配任何存储库,阻止列表条目不阻止任何内容;单存储库条目在每个版本上强制执行。4683一个 `github` 条目,其 `repo` 值为 `"<owner>/*"`,匹配该 GitHub owner 下的每个存储库。Owner 通配符需要 Claude Code v2.1.223 或更高版本,仅在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中工作。在 `github` 源出现的其他地方,如 `extraKnownMarketplaces` 或 `/plugin marketplace add`,`repo` 值必须命名单个存储库。在 v2.1.223 之前,Claude Code 按字面比较条目,因此允许列表条目不匹配任何存储库,阻止列表条目不阻止任何内容;单存储库条目在每个版本上强制执行。

4669 4684 

4670此条目允许 `acme-corp` 组织中的任何市场存储库:4685此条目允许 `acme-corp` 组织下的任何 marketplace 存储库:

4671 4686 

4672```json managed-settings.json theme={null}4687```json managed-settings.json theme={null}

4673{4688{


4677}4692}

4678```4693```

4679 4694 

4680只有整个存储库名称位置可以是通配符。Claude Code 按字面比较条目如 `*`、`*/plugins` 或 `acme-corp/tools-*`,因此它们不匹配任何存储库。4695只有整个存储库名称位置可以是通配符。Claude Code 忽略条目如 `*`、`*/plugins` 或 `acme-corp/tools-*` 作为无效,因此它们不匹配任何存储库。

4681 4696 

4682两个设置之间的匹配规则不同:4697两个设置之间的匹配规则不同:

4683 4698 

4684| Rule | `strictKnownMarketplaces` | `blockedMarketplaces` |4699| Rule | `strictKnownMarketplaces` | `blockedMarketplaces` |

4685| --------- | ----------------------------------------------------------- | ------------------------------------ |4700| --------- | ------------------------------------------------------ | ------------------------------------ |

4686| 匹配来源拼写 | 仅 `owner/repo` 形式。克隆同一存储库的 git URL 不匹配 | 任何拼写,包括解析为同一 github.com 存储库的 git URL |4701| 匹配源拼写 | 仅 `owner/repo` 形式。克隆同一存储库的 git URL 不匹配 | 任何拼写,包括解析为同一 github.com 存储库的 git URL |

4687| Owner 大小写 | 区分大小写,如精确条目匹配 | 不区分大小写 |4702| Owner 大小写 | 区分大小写,如精确条目匹配 | 不区分大小写 |

4688| `ref` | 遵循精确条目规则:带有 `ref` 的条目仅匹配具有该精确 ref 的来源,没有条目的条目仅匹配不指定 ref 的来源 | 没有 `ref` 的条目阻止它匹配的存储库的所有 ref |4703| `ref` | 遵循精确条目规则:带 `ref` 的条目仅匹配具有该精确 ref 的源,没有的条目仅匹配不指定 ref 的源 | 没有 `ref` 的条目阻止它匹配的存储库的所有 refs |

4689| `path` | 比精确条目规则更宽松:带有 `path` 的条目需要该精确值,而没有条目的条目匹配存储库内的任何路径 | 没有 `path` 的条目阻止它匹配的存储库的所有路径 |4704| `path` | 比精确条目规则更宽松:带 `path` 的条目需要该精确值,而没有的条目匹配存储库内的任何路径 | 没有 `path` 的条目阻止它匹配的存储库的所有路径 |

4690 4705 

4691<h4 id="exact-matching">4706<h4 id="exact-matching">

4692 精确匹配4707 精确匹配

4693</h4>4708</h4>

4694 4709 

4695对于除 owner-wildcard `github` 条目和正则表达式匹配的 `hostPattern` 和 `pathPattern` 条目之外的每个来源类型,Claude Code 仅在市场来源与条目完全匹配时允许用户添加。对于基于 git 的来源 `github` 和 `git`,精确匹配包括可选字段:4710对于除 owner-wildcard `github` 条目和正则表达式匹配的 `hostPattern` 和 `pathPattern` 条目之外的每个源类型,Claude Code 仅在 marketplace 源与条目精确匹配时允许用户的添加。对于基于 git 的源 `github` 和 `git`,精确匹配包括可选字段:

4696 4711 

4697* `repo` 或 `url` 必须完全匹配4712* `repo` 或 `url` 必须精确匹配

4698* `ref` 字段必须完全匹配,或两者都未定义4713* `ref` 字段必须精确匹配,或两者都未定义

4699* `path` 字段必须完全匹配,或两者都未定义4714* `path` 字段必须精确匹配,或两者都未定义

4700 4715 

4701例如,Claude Code 将下面的每一对视为两个不同的来源:4716例如,Claude Code 将下面的每对视为两个不同的源:

4702 4717 

4703* `{ "source": "github", "repo": "acme-corp/plugins" }` 和 `{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }`4718* `{ "source": "github", "repo": "acme-corp/plugins" }` 和 `{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }`

4704* `{ "source": "github", "repo": "acme-corp/plugins", "path": "marketplace" }` 和 `{ "source": "github", "repo": "acme-corp/plugins" }`4719* `{ "source": "github", "repo": "acme-corp/plugins", "path": "marketplace" }` 和 `{ "source": "github", "repo": "acme-corp/plugins" }`

4705 4720 

4706<h4 id="allow-only-the-official-marketplace">4721<h4 id="allow-only-the-official-marketplace">

4707 仅允许官方市场4722 仅允许官方 marketplace

4708</h4>4723</h4>

4709 4724 

4710要仅允许官方 Anthropic 市场,列出其存储库:4725要仅允许官方 Anthropic marketplace,列出其存储库:

4711 4726 

4712```json managed-settings.json theme={null}4727```json managed-settings.json theme={null}

4713{4728{


4717}4732}

4718```4733```

4719 4734 

4720使用此条目,Claude Code 保持已注册的官方市场可用,在新机器上,在您首次以交互方式启动 Claude Code 时自动注册市场。自动注册最常遗漏:4735使用此条目,Claude Code 保持已注册的官方 marketplace 可用,在新机器上,在您第一次启动交互式终端会话时自动注册 marketplace。自动注册最常遗漏:

4721 4736 

4722* 在机器首次交互启动之前运行的非交互环境。4737* 在机器的第一个交互式终端会话之前运行的非交互式环境。

4723* Claude Code 已在阻止市场的策略下以交互方式运行的机器,如空数组锁定。Claude Code 记录被阻止的尝试,不会在策略更改后重试。4738* Claude Code 仅通过 VS Code 扩展运行过的机器。

4739* Claude Code 已在阻止 marketplace 的策略下运行过交互式终端会话的机器,如空数组锁定。Claude Code 记录被阻止的尝试,在策略更改后不重试。

4724 4740 

4725在这些机器上,将市场添加到同一 `managed-settings.json` 中的 [`extraKnownMarketplaces`](#extraknownmarketplaces),以便 Claude Code 自动注册它,或运行 `claude plugin marketplace add anthropics/claude-plugins-official`。4741在这些机器上,将 marketplace 添加到同一 `managed-settings.json` 中的 [`extraKnownMarketplaces`](#extraknownmarketplaces),以便 Claude Code 自动注册它,或运行 `claude plugin marketplace add anthropics/claude-plugins-official`。

4726 4742 

4727<h4 id="combine-with-extraknownmarketplaces">4743<h4 id="combine-with-extraknownmarketplaces">

4728 与 `extraKnownMarketplaces` 结合4744 与 `extraKnownMarketplaces` 结合


4731两个键做不同的工作。此表比较它们:4747两个键做不同的工作。此表比较它们:

4732 4748 

4733| Aspect | `strictKnownMarketplaces` | `extraKnownMarketplaces` |4749| Aspect | `strictKnownMarketplaces` | `extraKnownMarketplaces` |

4734| ------ | ------------------------- | ---------------------------- |4750| ----------------- | ------------------------- | ------------------------------- |

4735| 目的 | 组织策略执行 | 团队便利 |4751| Purpose | 组织策略执行 | 团队便利 |

4736| 设置文件 | 仅托管设置 | 任何设置文件 |4752| Settings file | 仅托管设置 | 任何设置文件 |

4737| 行为 | 阻止非允许列表添加 | 注册缺失的市场 |4753| Behavior | 阻止非允许列表的添加 | 注册缺失的 marketplaces |

4738| 何时强制执行 | 在网络和文件系统操作之前 | 立即从用户或托管设置;在接受存储库文件的工作区信任对话后 |4754| When enforced | 在网络和文件系统操作之前 | 立即从用户或托管设置;在存储库文件的工作区信任对话框之后 |

4739| 可以被覆盖 | 否,最高优先级 | 是,由更高优先级设置 |4755| Can be overridden | 否,最高优先级 | 是,由更高优先级的设置 |

4740| 来源格式 | 直接来源对象 | 具有嵌套 `source` 对象的命名市场 |4756| Source format | 直接源对象 | 具有嵌套 `source` 对象的命名 marketplace |

4741 4757 

4742要为所有用户限制和预注册市场,请在 `managed-settings.json` 中设置两者:4758要为所有用户限制和预注册 marketplace,请在 `managed-settings.json` 中同时设置两者:

4743 4759 

4744```json managed-settings.json theme={null}4760```json managed-settings.json theme={null}

4745{4761{


4754}4770}

4755```4771```

4756 4772 

4757仅设置 `strictKnownMarketplaces` 时,用户仍可以使用 `/plugin marketplace add` 自己添加允许的市场。官方 Anthropic 市场是 Claude Code 自动注册的唯一市场,仅当允许列表允许时。[仅允许官方市场](#allow-only-the-official-marketplace) 列出它遗漏的机器。4773仅设置 `strictKnownMarketplaces` 时,用户仍可以使用 `/plugin marketplace add` 自己添加允许的 marketplace。官方 Anthropic marketplace 是唯一 Claude Code 自动注册的,仅当允许列表允许时。[仅允许官方 marketplace](#allow-only-the-official-marketplace) 列出它遗漏的机器。

4758 4774 

4759<h3 id="strictpluginonlycustomization">4775<h3 id="strictpluginonlycustomization">

4760 `strictPluginOnlyCustomization`4776 `strictPluginOnlyCustomization`

4761</h3>4777</h3>

4762 4778 

4763阻止来自用户和项目来源的技能、代理、hooks 和 MCP 服务器,因此它们只能来自插件或托管设置。将其与 [`strictKnownMarketplaces`](#strictknownmarketplaces) 结合以控制完整的自定义供应链:市场允许列表控制用户可以安装哪些插件。4779阻止 skills、agents、hooks 和 MCP 服务器来自用户和项目源,因此它们只能来自 plugins 或托管设置。将其与 [`strictKnownMarketplaces`](#strictknownmarketplaces) 结合以控制完整的自定义供应链:marketplace 允许列表控制用户可以安装哪些 plugins。

4764 4780 

4765* **Scope**: [`Managed`](#scopes)4781* **Scope**: [`Managed`](#scopes)

4766* **Type**: `true` 以锁定所有四种自定义,或命名要锁定的种类的数组,来自 `"skills"`、`"agents"`、`"hooks"` 和 `"mcp"`4782* **Type**: `true` 以锁定所有四种自定义,或一个数组命名要锁定的种类,来自 `"skills"`、`"agents"`、`"hooks"` 和 `"mcp"`

4767* **Default**: 未设置,因此没有锁定4783* **Default**: 未设置,因此没有被锁定

4768 4784 

4769此示例锁定技能和 hooks,并保持代理和 MCP 服务器解锁:4785此示例锁定 skills 和 hooks,保留 agents 和 MCP 服务器解锁:

4770 4786 

4771```json managed-settings.json theme={null}4787```json managed-settings.json theme={null}

4772{4788{


4780 `strictPluginOnlyCustomization.skills`4796 `strictPluginOnlyCustomization.skills`

4781</h3>4797</h3>

4782 4798 

4783锁定 `skills` 表面。Claude Code 停止从 `~/.claude/skills/` 和 `.claude/skills/`、`~/.claude/commands/` 和 `.claude/commands/` 中的自定义命令、`--add-dir` 目录下的技能以及从您的 claude.ai 帐户同步的技能加载技能,并继续加载插件技能、捆绑技能和托管策略目录中的技能。4799锁定 `skills` 表面。Claude Code 停止从 `~/.claude/skills/` 和 `.claude/skills/` 加载 skills,从 `~/.claude/commands/` 和 `.claude/commands/` 加载自定义命令,从 `--add-dir` 目录加载 skills,从您的 claude.ai 账户同步的 skills,并继续加载 plugin skills、捆绑的 skills 和托管策略目录中的 skills。

4784 4800 

4785* **Scope**: [`Managed`](#scopes)4801* **Scope**: [`Managed`](#scopes)

4786* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"skills"`4802* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"skills"`


4796 `strictPluginOnlyCustomization.agents`4812 `strictPluginOnlyCustomization.agents`

4797</h3>4813</h3>

4798 4814 

4799锁定 `agents` 表面。Claude Code 停止从 `~/.claude/agents/` 和 `.claude/agents/` 加载代理,并继续加载插件代理、内置代理和托管策略目录中的代理。4815锁定 `agents` 表面。Claude Code 停止从 `~/.claude/agents/` 和 `.claude/agents/` 加载 agents,并继续加载 plugin agents、内置 agents 和托管策略目录中的 agents。

4800 4816 

4801* **Scope**: [`Managed`](#scopes)4817* **Scope**: [`Managed`](#scopes)

4802* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"agents"`4818* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"agents"`


4812 `strictPluginOnlyCustomization.hooks`4828 `strictPluginOnlyCustomization.hooks`

4813</h3>4829</h3>

4814 4830 

4815锁定 `hooks` 表面。Claude Code 停止运行来自用户、项目和本地 `settings.json` 的 hooks,并继续运行插件 hooks 和托管设置中的 hooks。4831锁定 `hooks` 表面。Claude Code 停止运行来自用户、项目和本地 `settings.json` 的 hooks,并继续运行 plugin hooks 和托管设置中的 hooks。

4816 4832 

4817* **Scope**: [`Managed`](#scopes)4833* **Scope**: [`Managed`](#scopes)

4818* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"hooks"`4834* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"hooks"`


4828 `strictPluginOnlyCustomization.mcp`4844 `strictPluginOnlyCustomization.mcp`

4829</h3>4845</h3>

4830 4846 

4831锁定 `mcp` 表面。Claude Code 停止从 `~/.claude.json` 和 `.mcp.json` 加载 MCP 服务器,并继续加载插件 MCP 服务器、[`managed-mcp.json`](/docs/zh-CN/managed-mcp) 服务器和来自 [`managedMcpServers`](#managedmcpservers) 的服务器。4847锁定 `mcp` 表面。Claude Code 停止从 `~/.claude.json` 和 `.mcp.json` 加载 MCP 服务器,并继续加载 plugin MCP 服务器、[`managed-mcp.json`](/docs/zh-CN/managed-mcp) 服务器和来自 [`managedMcpServers`](#managedmcpservers) 的服务器。

4832 4848 

4833* **Scope**: [`Managed`](#scopes)4849* **Scope**: [`Managed`](#scopes)

4834* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"mcp"`4850* **Type**: [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) 数组中的字符串 `"mcp"`


4844 `enabledPlugins`4860 `enabledPlugins`

4845</h3>4861</h3>

4846 4862 

4847打开或关闭单个 [plugins](/docs/zh-CN/plugins),由 `plugin-name@marketplace-name` 键控。在任何范围内没有条目的插件回退到其 [`defaultEnabled`](/docs/zh-CN/plugins-reference#default-enablement) 值。当您使用 `/plugin` 或 `claude plugin enable` 启用或禁用插件时,Claude Code 为您写入此键。4863打开或关闭单个 [plugins](/docs/zh-CN/plugins/overview),由 `plugin-name@marketplace-name` 键控。在任何范围内没有条目的 plugin 回退到其 [`defaultEnabled`](/docs/zh-CN/plugins/manifest-reference#fields) 值。当您使用 `/plugin` 或 `claude plugin enable` 启用或禁用 plugin 时,Claude Code 为您写入此键。

4848 4864 

4849* **Scope**: [`Any file`](#scopes)4865* **Scope**: [`Any file`](#scopes)

4850* **Type**: 对象,将 `plugin-name@marketplace-name` 映射到 Boolean4866* **Type**: 对象,将 `plugin-name@marketplace-name` 映射到 Boolean

4851* **Default**: 未设置,因此每个插件遵循其 `defaultEnabled` 值4867* **Default**: 未设置,因此每个 plugin 遵循其 `defaultEnabled` 值

4852 4868 

4853此示例启用来自 `team-tools` 市场的两个插件并禁用来自 `personal` 的一个:4869此示例启用来自 `team-tools` marketplace 的两个 plugins,禁用来自 `personal` 的一个:

4854 4870 

4855```json settings.json theme={null}4871```json settings.json theme={null}

4856{4872{


4862}4878}

4863```4879```

4864 4880 

4865每个范围服务于不同的目的:4881每个范围服务不同的目的:

4866 4882 

4867* **用户设置**: 您的个人插件偏好4883* **User settings**: 您的个人 plugin 偏好

4868* **项目设置**: 与存储库中的每个人共享的插件4884* **Project settings**: 与存储库中的每个人共享的 plugins

4869* **本地设置**: 每台机器的覆盖,当 Claude Code 在那里保存设置时被 gitignored4885* **Local settings**: 每台机器的覆盖,当 Claude Code 在那里保存设置时被 gitignored

4870* **托管设置**: 组织范围的策略。设置为 `false` 的插件在每个范围内被阻止安装并从市场隐藏4886* **Managed settings**: 组织范围的策略。设置为 `false` 的 plugin 在每个范围都被阻止安装,并从 marketplace 隐藏

4871 4887 

4872项目设置优先于用户设置,因此在 `~/.claude/settings.json` 中将插件设置为 `false` 不会禁用项目的 `.claude/settings.json` 启用的插件。要在您的机器上选择退出项目启用的插件,请改为在 `.claude/settings.local.json` 中将其设置为 `false`。由托管设置强制启用的插件无法以这种方式禁用,因为托管设置覆盖本地设置。4888项目设置优先于用户设置,因此在 `~/.claude/settings.json` 中将 plugin 设置为 `false` 不会禁用项目的 `.claude/settings.json` 启用的 plugin。要在您的机器上选择退出项目启用的 plugin,请改为在 `.claude/settings.local.json` 中将其设置为 `false`。由托管设置强制启用的 Plugins 无法以这种方式禁用,因为托管设置覆盖本地设置。

4873 4889 

4874在项目的 `.claude/settings.json` 中启用来自外部来源(如 GitHub 存储库或 npm 包)的插件不会为其他人安装它。在加载插件的每条路径上,Claude Code 报告插件未安装,直到每个用户 [自己安装它](/docs/zh-CN/discover-plugins#configure-team-marketplaces)。4890在项目的 `.claude/settings.json` 中启用来自外部源(如 GitHub 存储库或 npm 包)的 plugin 不会为其他人安装它。在加载 plugins 的每条路径上,Claude Code 报告 plugin 未安装,直到每个用户 [自己安装它](/docs/zh-CN/plugins/org#require-plugins-per-repository)。

4875 4891 

4876<h3 id="extraknownmarketplaces">4892<h3 id="extraknownmarketplaces">

4877 `extraKnownMarketplaces`4893 `extraKnownMarketplaces`

4878</h3>4894</h3>

4879 4895 

4880按名称注册其他插件市场,以便打开存储库的人或托管设置到达的每个人都获得市场,而无需自己添加。Claude Code 注册它还不知道的每个市场。[`enabledPlugins`](#enabledplugins) 从中命名的插件是否安装取决于插件的来源和哪个文件启用它;该条目有规则。4896按名称注册其他 plugin marketplaces,以便打开存储库的人或您的托管设置到达的每个人都获得 marketplace,而无需自己添加它。Claude Code 注册它还不知道的每个 marketplace。[`enabledPlugins`](#enabledplugins) 从它命名的 plugin 是否安装取决于 plugin 的源和哪个文件启用它;该条目有规则。

4881 4897 

4882* **Scope**: [`Any file`](#scopes)。Claude Code 仅在您接受该文件夹的工作区信任对话后才接受存储库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目;在您未信任的文件夹中,包括 `-p` 运行,它会忽略它们而不显示消息。4898* **Scope**: [`Any file`](#scopes)。Claude Code 仅在您接受该文件夹的工作区信任对话框后才接受存储库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目;在您未信任的文件夹中,包括 `-p` 运行,它在没有消息的情况下忽略它们。

4883* **Type**: 对象,将市场名称映射到具有 `source` 对象和可选 `autoUpdate` Boolean 的对象4899* **Type**: 对象,将 marketplace 名称映射到具有 `source` 对象和可选 `autoUpdate` Boolean 的对象

4884* **Default**: 未设置4900* **Default**: 未设置

4885 4901 

4886此示例注册 GitHub 市场和来自自托管 git URL 的市场:4902此示例注册一个 GitHub marketplace 和来自自托管 git URL 的 marketplace:

4887 4903 

4888```json settings.json theme={null}4904```json settings.json theme={null}

4889{4905{


4904}4920}

4905```4921```

4906 4922 

4907[在您信任文件夹之前运行什么](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 将信任门与存储库可以提供的其他内容进行比较。您也可以将此键写为 `additionalMarketplaces`;请参阅 [市场键别名](#marketplace-key-aliases)。4923[在您信任文件夹之前运行什么](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 将信任门与存储库可以提供的其他内容进行比较。您也可以将此键写为 `additionalMarketplaces`;请参阅 [Marketplace 键别名](#marketplace-key-aliases)。

4908 4924 

4909在 `source` 旁边设置 `"autoUpdate": true` 以使 Claude Code 在启动后在后台刷新该市场并更新其已安装的插件。省略时,`claude-plugins-official` 和大多数其他官方 Anthropic 市场默认为 `true`,第三方市场默认为 `false`。请参阅 [配置自动更新](/docs/zh-CN/discover-plugins#configure-auto-updates)。4925设置 `"autoUpdate": true` 与 `source` 一起,使 Claude Code 在启动后在后台刷新该 marketplace 并更新其已安装的 plugins。省略时,`claude-plugins-official` 和大多数其他官方 Anthropic marketplaces 默认为 `true`,第三方 marketplaces 默认为 `false`。请参阅 [配置自动更新](/docs/zh-CN/plugins/install#keep-plugins-updated)。

4910 4926 

4911当多个设置文件在同一名称下定义市场条目时,Claude Code 使用来自 [最高优先级文件](/docs/zh-CN/settings#settings-precedence) 的条目。该条目替换较低优先级条目,不继承其任何字段,因此重新定义无法将一个文件的 `source.headers` 凭证与另一个文件控制的 URL 结合。在 v2.1.228 之前,Claude Code 逐字段合并同名条目,因此较高优先级文件中的条目可以继承它未设置的字段,包括另一个文件的 `headers`。4927当多个设置文件在同一名称下定义 marketplace 条目时,Claude Code 使用来自 [最高优先级文件](/docs/zh-CN/settings#settings-precedence) 的条目。该条目替换较低优先级的条目,不继承其任何字段,因此重新定义无法将一个文件的 `source.headers` 凭证与另一个文件控制的 URL 结合。在 v2.1.228 之前,Claude Code 逐字段合并同名条目,因此较高优先级文件中的条目可以继承它未设置的字段,包括另一个文件的 `headers`。

4912 4928 

4913<h4 id="marketplace-source-types">4929<h4 id="marketplace-source-types">

4914 市场来源类型4930 Marketplace 源类型

4915</h4>4931</h4>

4916 4932 

4917`source` 对象采用以下形式之一:4933`source` 对象采用以下形式之一:

4918 4934 

4919* **`github`**: GitHub 存储库,带有 `repo`4935* **`github`**: GitHub 存储库,带 `repo`

4920* **`git`**: 任何 git URL,带有 `url`4936* **`git`**: 任何 git URL,带 `url`

4921* **`url`**: 直接 URL 到 `marketplace.json` 文件,带有 `url` 和可选 `headers` 和 `headersHelper` 用于经过身份验证的访问。`headersHelper` 命名一个打印标头的命令,其值太短暂而无法在 `headers` 中列出,需要 Claude Code v2.1.238 或更高版本4937* **`url`**: 直接 URL 到 `marketplace.json` 文件,带 `url` 和可选 `headers` 和 `headersHelper` 用于经过身份验证的访问。`headersHelper` 命名一个打印标头的命令,其值太短暂而无法在 `headers` 中列出,需要 Claude Code v2.1.238 或更高版本

4922* **`file`**: 到 `marketplace.json` 文件的本地路径,带有 `path`4938* **`file`**: 到 `marketplace.json` 文件的本地路径,带 `path`

4923* **`directory`**: 本地文件系统路径,带有 `path`,仅用于开发4939* **`directory`**: 本地文件系统路径,带 `path`,仅用于开发

4924* **`settings`**: 直接在设置文件中声明的内联市场,无需托管存储库,带有 `name` 和 `plugins`4940* **`settings`**: 直接在设置文件中声明的内联 marketplace,不带托管存储库,带 `name` 和 `plugins`

4925 4941 

4926`git` 来源类型适用于任何 git 托管服务,包括自托管 GitLab 和 Bitbucket。Claude Code 使用该机器上 `git clone` 会使用的相同身份验证克隆存储库:配置的凭证助手或 SSH 密钥。提供者令牌如 `GITHUB_TOKEN` 仅通过读取它的凭证助手生效。请参阅 [私有存储库](/docs/zh-CN/plugin-marketplaces#private-repositories) 了解设置详情。4942`git` 源类型适用于任何 git 托管服务,包括自托管 GitLab 和 Bitbucket。Claude Code 使用 `git clone` 在该机器上使用的相同身份验证克隆存储库:配置的凭证助手或 SSH 密钥。提供者令牌如 `GITHUB_TOKEN` 通过读取它的凭证助手生效。请参阅 [私有存储库](/docs/zh-CN/plugins/host-marketplace#grant-access-to-a-private-marketplace) 了解设置详情。

4927 4943 

4928对于 `github` 和 `git` 来源,Claude Code 在克隆市场存储库以添加或更新时永远不会下载 [Git LFS](https://git-lfs.com) 内容。LFS 跟踪的文件被检出为指针文件,添加或更新输出报告有多少。4944对于 `github` 和 `git` 源,Claude Code 在克隆 marketplace 存储库以添加或更新它时永远不会下载 [Git LFS](https://git-lfs.com) 内容。LFS 跟踪的文件被检出为指针文件,添加或更新输出报告有多少。

4929 4945 

4930`skipLfs` 字段在 `source` 对象内部被接受且没有效果。在 v2.1.274 之前,Claude Code 下载 LFS 内容,除非您设置 `"skipLfs": true`。4946`source` 对象内的 `skipLfs` 字段被接受且没有效果。在 v2.1.274 之前,Claude Code 下载 LFS 内容,除非您设置 `"skipLfs": true`。

4931 4947 

4932对于 `url` 来源,当 `headers` 中的凭证过期且命令必须生成新凭证时,在 `source` 对象内部设置 `headersHelper`。需要 Claude Code v2.1.238 或更高版本。有关命令必须打印什么以及 Claude Code 在哪里运行它,请参阅 [编写 headersHelper 命令](/docs/zh-CN/plugin-marketplaces#write-the-headershelper-command),以及 Claude Code 不运行它的情况,请参阅 [何时 Claude Code 跳过 headersHelper 命令或丢弃其输出](/docs/zh-CN/plugin-marketplaces#when-claude-code-skips-a-headershelper-command-or-drops-its-output)。在 `https://` 市场 URL 上设置 `headersHelper` 后,Claude Code 在两个点运行命令,重用一次运行的输出长达 60 秒:4948对于 `url` 源,当 `headers` 中的凭证过期且命令必须生成新凭证时,在 `source` 对象内设置 `headersHelper`。需要 Claude Code v2.1.238 或更高版本。对于命令必须打印的内容以及 Claude Code 运行它的位置,请参阅 [编写 headersHelper 命令](/docs/zh-CN/plugins/host-marketplace#write-the-headershelper-command),对于 Claude Code 不运行它的情况,请参阅 [当 Claude Code 跳过 headersHelper 命令或丢弃其输出时](/docs/zh-CN/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output)。一旦您在 `https://` marketplace URL 上设置 `headersHelper`,Claude Code 在两个点运行命令,重用一次运行的输出长达 60 秒:

4933 4949 

4934* 在该市场 `marketplace.json` 的每次获取之前,包括稍后刷新。Claude Code 使用该获取发送打印的标头。4950* 在该 marketplace 的 `marketplace.json` 的每次获取之前,包括稍后的刷新。Claude Code 使用该获取发送打印的标头。

4935* 在市场 URL 来源上的每个插件存档下载之前,意味着相同的方案、主机和端口。Claude Code 使用该下载发送输出,没有其他下载获得标头。4951* 在 marketplace URL 的源上的每个 plugin 存档下载之前,意味着相同的方案、主机和端口。Claude Code 使用该下载发送输出,没有其他下载获得标头。

4936 4952 

4937Claude Code 忽略在您使用 [`--add-dir`](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 添加的目录的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置的任何 `headersHelper`,在 `url` 来源和内联插件条目上,仅发送在该文件中设置的固定 `headers`。[用户如何接受 headersHelper 命令](/docs/zh-CN/plugin-marketplaces#how-users-accept-a-headershelper-command) 涵盖其他设置文件。4953Claude Code 忽略在您使用 [`--add-dir`](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 添加的目录的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置的任何 `headersHelper`,在 `url` 源和内联 plugin 条目上,仅发送在该文件中设置的固定 `headers`。[用户如何接受 headersHelper 命令](/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 涵盖其他设置文件。

4938 4954 

4939`settings` 来源中列出的插件必须引用外部来源如 GitHub 或 npm,`name` 必须匹配市场键。您仍然在 `enabledPlugins` 中单独启用每个插件。此示例声明一个内联插件:4955在 `settings` 源中列出的 Plugins 必须引用外部源如 GitHub 或 npm,`name` 必须与 marketplace 键匹配。您仍然在 `enabledPlugins` 中单独启用每个 plugin。此示例声明一个 plugin 内联:

4940 4956 

4941```json settings.json theme={null}4957```json settings.json theme={null}

4942{4958{


4960}4976}

4961```4977```

4962 4978 

4963在 `source: 'settings'` 下的插件条目,其自身 `source` 是 [`archive`](/docs/zh-CN/plugin-marketplaces#zip-archives),可以为存档下载设置 `headers`。如果您要放在 `headers` 中的值是短暂的,如您的注册表按请求铸造的令牌,请改为设置 `headersHelper` 命令。条目可以设置两者。两个字段都需要 Claude Code v2.1.238 或更高版本。4979在 `source: 'settings'` 下的 plugin 条目,其自身 `source` 是 [`archive`](/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source) 的,可以为存档下载设置 `headers`。如果您想放在 `headers` 中的值是短暂的,如您的注册表按请求铸造的令牌,请改为设置 `headersHelper` 命令。条目可以同时设置两者。两个字段都需要 Claude Code v2.1.238 或更高版本。

4964 4980 

4965Claude Code 发送条目的 `headers` 和命令打印的任何内容,与该插件的存档下载一起,没有其他下载。Claude Code 仅在用户 [自己安装或更新该一个插件](/docs/zh-CN/plugin-marketplaces#how-users-accept-a-headershelper-command) 时运行命令。三个进一步的规则取决于哪个文件持有条目:4981Claude Code 发送条目的 `headers` 和命令打印的任何内容,与该 plugin 的存档下载一起,没有其他下载。Claude Code 仅在用户 [自己安装或更新该一个 plugin](/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 时运行命令。三个进一步的规则取决于哪个文件持有条目:

4966 4982 

4967* **`strict`**: 与市场 `marketplace.json` 中的条目不同,设置文件中的条目不需要 `"strict": false`,因为设置文件不携带要内联的清单字段。请参阅 [严格模式](/docs/zh-CN/plugin-marketplaces#strict-mode)。4983* **`strict`**: 与 marketplace 的 `marketplace.json` 中的条目不同,设置文件中的条目不需要 `"strict": false`,因为设置文件不携带要内联的清单字段。请参阅 [严格模式](/docs/zh-CN/plugins/marketplace-reference#strict-mode)。

4968* **文件夹信任**: 对于项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目,Claude Code 仅在用户也 [信任该文件夹](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 后运行命令。4984* **Folder trust**: 对于项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目,Claude Code 仅在用户也 [信任该文件夹](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 后运行命令。

4969* **标头过滤**: Claude Code 从项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目删除 [请求路由和客户端身份标头名称](/docs/zh-CN/plugin-marketplaces#when-claude-code-skips-a-headershelper-command-or-drops-its-output),因为存储库可以提供这些文件。Claude Code 对目录条目和 `--add-dir` 目录的设置中的条目应用相同的过滤,对您的用户设置、`--settings` 文件或托管设置中的条目不应用过滤。4985* **Header filter**: Claude Code 从项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的条目删除 [请求路由和客户端身份标头名称](/docs/zh-CN/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output),因为存储库可以提供这些文件。Claude Code 对目录条目和 `--add-dir` 目录的设置中的条目应用相同的过滤器,对您的用户设置、`--settings` 文件或托管设置中的条目不应用过滤器。

4970 4986 

4971<h4 id="marketplace-key-aliases">4987<h4 id="marketplace-key-aliases">

4972 市场键别名4988 Marketplace 键别名

4973</h4>4989</h4>

4974 4990 

4975在 Claude Code v2.1.232 或更高版本上,您可以将 `extraKnownMarketplaces` 写为 `additionalMarketplaces`,将 `strictKnownMarketplaces` 写为 `allowedMarketplaces`。Claude Code 按如下方式处理每个别名:4991在 Claude Code v2.1.232 或更高版本上,您可以将 `extraKnownMarketplaces` 写为 `additionalMarketplaces`,将 `strictKnownMarketplaces` 写为 `allowedMarketplaces`。Claude Code 按如下方式处理每个别名:

4976 4992 

4977* 较早的版本忽略别名,因此在较旧版本也读取的文件中保持规范拼写,如具有混合 Claude Code 版本的队伍的托管设置文件。4993* 更早的版本忽略别名,因此在较旧版本也读取的文件中保持规范拼写,如具有混合 Claude Code 版本的队伍的托管设置文件。

4978* 在接受规范键的任何设置文件中,Claude Code 完全按照读取规范键的方式读取别名。4994* 在接受规范键的任何设置文件中,Claude Code 完全按照读取规范键的方式读取别名。

4979* Claude Code 在更新文件时可能会将 `additionalMarketplaces` 重写为 `extraKnownMarketplaces`。4995* Claude Code 可能在更新文件时将 `additionalMarketplaces` 重写为 `extraKnownMarketplaces`。

4980* 如果您在一个文件中设置两个拼写,Claude Code 使用规范值并忽略别名。4996* 如果您在一个文件中同时设置两个拼写,Claude Code 使用规范值并忽略别名。

4981 4997 

4982<h3 id="pluginconfigs">4998<h3 id="pluginconfigs">

4983 `pluginConfigs`4999 `pluginConfigs`

4984</h3>5000</h3>

4985 5001 

4986存储您给插件的 [`userConfig`](/docs/zh-CN/plugins-reference#user-configuration) 配置对话的非敏感答案,由插件 ID 键控。当您填写对话时,Claude Code 将此键写入您的用户设置,因此您无需手动编辑它。Claude Code 将敏感选项存储在 macOS Keychain 中,当 Keychain 拒绝写入时回退到 `~/.claude/.credentials.json`;在没有支持的 keychain 的平台上,它将它们存储在 `~/.claude/.credentials.json`。5002存储您给 plugin 的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference#user-configuration) 配置对话框的非敏感答案,由 plugin ID 键控。当您填写对话框时,Claude Code 将此键写入您的用户设置,因此您无需手动编辑它。Claude Code 将敏感选项存储在 macOS Keychain 中,当 Keychain 拒绝写入时回退到 `~/.claude/.credentials.json`;在没有支持的 keychain 的平台上,它将它们存储在 `~/.claude/.credentials.json` 中。

4987 5003 

4988* **Scope**: [`User or managed`](#scopes)5004* **Scope**: [`User or managed`](#scopes)

4989* **Type**: 对象,将插件 ID 映射到具有 `options` 字段的对象,将每个选项名称映射到字符串、数字、Boolean 或字符串数组,以及可选的 `mcpServers` 字段,以相同形状保存每个服务器的用户配置值5005* **Type**: 对象,将 plugin ID 映射到具有 `options` 字段的对象,将每个选项名称映射到字符串、数字、Boolean 或字符串数组,以及可选的 `mcpServers` 字段,以相同形状保存每个服务器的用户配置值

4990* **Default**: 未设置5006* **Default**: 未设置

4991 5007 

4992此示例存储来自 `acme-tools` 的 `deployer` 插件的 `api_endpoint` 选项:5008此示例为来自 `acme-tools` 的 `deployer` plugin 存储 `api_endpoint` 选项:

4993 5009 

4994```json settings.json theme={null}5010```json settings.json theme={null}

4995{5011{


5003}5019}

5004```5020```

5005 5021 

5006内置插件使用带有 `@builtin` 后缀的相同键存储其选项。例如,控制 Claude Code 是否读取 `AGENTS.md` 文件的 [**Project instructions**](/docs/zh-CN/memory#choose-which-instruction-files-load) 设置是 `pluginConfigs["agents-md@builtin"].options.instructionFiles`。5022内置 plugins 在同一键下存储其选项,带 `@builtin` 后缀。例如,控制 Claude Code 是否读取 `AGENTS.md` 文件的 [**Project instructions**](/docs/zh-CN/memory#choose-which-instruction-files-load) 设置是 `pluginConfigs["agents-md@builtin"].options.instructionFiles`。

5007 5023 

5008Claude Code 忽略项目和本地条目,因为它将这些值替换到插件 hook、MCP 和 LSP 配置中,克隆的存储库不得能够提供它们。在 v2.1.207 之前,项目和本地设置也被读取。5024Claude Code 忽略项目和本地条目,因为它将这些值替换到 plugin hook、MCP 和 LSP 配置中,克隆的存储库不得能够提供它们。在 v2.1.207 之前,项目和本地设置也被读取。

5009 5025 

5010<h2 id="mcp">5026<h2 id="mcp">

5011 MCP5027 MCP


5231}5247}

5232```5248```

5233 5249 

5234插件自己的 `settings.json` 也可以提供此密钥;请参阅 [Ship default settings with your plugin](/docs/zh-CN/plugins#ship-default-settings-with-your-plugin)。5250插件自己的 `settings.json` 也可以提供此密钥;请参阅 [Ship default settings with your plugin](/docs/zh-CN/plugins/components#default-settings)。

5235 5251 

5236<h3 id="crosssessioninbound">5252<h3 id="crosssessioninbound">

5237 `crossSessionInbound`5253 `crossSessionInbound`


6198 6214 

6199Claude Code 仍然接受其服务器都是进程内 `type: "sdk"` 条目的 `--mcp-config`,因此 Agent SDK 和 VS Code 扩展继续工作。用户仍然可以使用 `claude mcp add` 或 `.mcp.json` 文件添加服务器;为了进行每个服务器的控制,也可以设置 [`allowedMcpServers`](/docs/zh-CN/managed-mcp)。需要 Claude Code v2.1.193 或更高版本。6215Claude Code 仍然接受其服务器都是进程内 `type: "sdk"` 条目的 `--mcp-config`,因此 Agent SDK 和 VS Code 扩展继续工作。用户仍然可以使用 `claude mcp add` 或 `.mcp.json` 文件添加服务器;为了进行每个服务器的控制,也可以设置 [`allowedMcpServers`](/docs/zh-CN/managed-mcp)。需要 Claude Code v2.1.193 或更高版本。

6200 6216 

6217相同的检查涵盖在 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/zh-CN/env-vars#variables) 环境变量中命名的插件文件夹,这需要 Claude Code v2.1.280 或更高版本。当变量命名一个文件夹时,Claude Code 以相同的错误退出,错误说要取消设置该变量。

6218 

6201在云会话中,Claude Code 也会忽略服务器传递的中途 MCP 更新,这是云会话配置和 SDK `setMcpServers()` 调用背后的路径,这些调用到达这些会话。进程内 `type: "sdk"` 条目在那里仍然豁免。在 v2.1.239 之前,服务器传递的 `--mcp-config` 会阻止云会话启动。6219在云会话中,Claude Code 也会忽略服务器传递的中途 MCP 更新,这是云会话配置和 SDK `setMcpServers()` 调用背后的路径,这些调用到达这些会话。进程内 `type: "sdk"` 条目在那里仍然豁免。在 v2.1.239 之前,服务器传递的 `--mcp-config` 会阻止云会话启动。

6202 6220 

6203<h3 id="forceremotesettingsrefresh">6221<h3 id="forceremotesettingsrefresh">

skills.md +15 −15

Details

129| Project | `.claude/skills/<skill-name>/SKILL.md` | 此存储库中的会话。提交它以便您的团队也能获得它 |129| Project | `.claude/skills/<skill-name>/SKILL.md` | 此存储库中的会话。提交它以便您的团队也能获得它 |

130| Nested | `<subdir>/.claude/skills/<skill-name>/SKILL.md` | 在 `<subdir>` 中或其下方启动的会话。在其上方启动的会话在 Claude 处理那里的文件时加载该 skill。请参阅 [monorepos 和子目录](#discovery-from-parent-and-nested-directories) |130| Nested | `<subdir>/.claude/skills/<skill-name>/SKILL.md` | 在 `<subdir>` 中或其下方启动的会话。在其上方启动的会话在 Claude 处理那里的文件时加载该 skill。请参阅 [monorepos 和子目录](#discovery-from-parent-and-nested-directories) |

131| Additional directory | `.claude/skills/<skill-name>/SKILL.md` 在您使用 `--add-dir` 传递的目录中 | 该会话。请参阅 [项目外的目录](#skills-from-additional-directories) |131| Additional directory | `.claude/skills/<skill-name>/SKILL.md` 在您使用 `--add-dir` 传递的目录中 | 该会话。请参阅 [项目外的目录](#skills-from-additional-directories) |

132| Plugin | `<plugin>/skills/<skill-name>/SKILL.md` | 启用 [plugin](/docs/zh-CN/plugins) 的任何地方,作为 `/plugin-name:skill-name` |132| Plugin | `<plugin>/skills/<skill-name>/SKILL.md` | 启用 [plugin](/docs/zh-CN/plugins/overview) 的任何地方,作为 `/plugin-name:skill-name` |

133| claude.ai account | 为您的 claude.ai 账户启用的 Skills | Cowork 会话、云会话和您使用该账户登录的终端会话。请参阅 [从 claude.ai 同步的 Skills](#how-synced-skills-behave) |133| claude.ai account | 为您的 claude.ai 账户启用的 Skills | Cowork 会话、云会话和您使用该账户登录的终端会话。请参阅 [从 claude.ai 同步的 Skills](#how-synced-skills-behave) |

134 134 

135Skill 文件夹还遵循以下规则:135Skill 文件夹还遵循以下规则:

136 136 

137* **符号链接文件夹**:enterprise、personal 或 project 位置中的 `<skill-name>` 条目可以是指向磁盘上其他位置的目录的符号链接。Claude Code 从目标读取 `SKILL.md` 并加载 skill,即使多个位置指向同一目标也只加载一次。Plugin skills [以不同方式处理符号链接](/docs/zh-CN/plugins-reference#share-files-within-a-marketplace-with-symlinks)。137* **符号链接文件夹**:enterprise、personal 或 project 位置中的 `<skill-name>` 条目可以是指向磁盘上其他位置的目录的符号链接。Claude Code 从目标读取 `SKILL.md` 并加载 skill,即使多个位置指向同一目标也只加载一次。Plugin skills [以不同方式处理符号链接](/docs/zh-CN/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks)。

138* **保留名称**:不要将 skill 文件夹命名为 `synced`,无论大小写如何。Claude Code 使用 `~/.claude/skills/synced/` 来存放 [从 claude.ai 下载的 skills](#where-synced-skills-load),并跳过您在 enterprise、personal 和 project 位置中以该名称创建的 skill。138* **保留名称**:不要将 skill 文件夹命名为 `synced`,无论大小写如何。Claude Code 使用 `~/.claude/skills/synced/` 来存放 [从 claude.ai 下载的 skills](#where-synced-skills-load),并跳过您在 enterprise、personal 和 project 位置中以该名称创建的 skill。

139* **命令文件**:`.claude/commands/` 中的 Markdown 文件是较旧的格式,仍然有效。它支持相同的 [frontmatter](#frontmatter-reference),除了 `name` 和 `paths`。要找到您输入以调用它的名称,请参阅 [Skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。对于新工作,更倾向于使用 skill,因为 skills 还支持 [支持文件](#add-supporting-files)。139* **命令文件**:`.claude/commands/` 中的 Markdown 文件是较旧的格式,仍然有效。它支持相同的 [frontmatter](#frontmatter-reference),除了 `name` 和 `paths`。要找到您输入以调用它的名称,请参阅 [Skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。对于新工作,更倾向于使用 skill,因为 skills 还支持 [支持文件](#add-supporting-files)。

140* **Skill 文件夹作为 plugin**:将 `.claude-plugin/plugin.json` 添加到 skill 文件夹,它将作为 [plugin](/docs/zh-CN/plugins-reference#skills-directory-plugins) 加载,名称为 `<name>@skills-dir`,因此它可以捆绑 agents、hooks 和 MCP 服务器。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。140* **Skill 文件夹作为 plugin**:将 `.claude-plugin/plugin.json` 添加到 skill 文件夹,它将作为 [plugin](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 加载,名称为 `<name>@skills-dir`,因此它可以捆绑 agents、hooks 和 MCP 服务器。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。

141 141 

142<h3 id="discovery-from-parent-and-nested-directories">142<h3 id="discovery-from-parent-and-nested-directories">

143 在 monorepos 和子目录中加载 skills143 在 monorepos 和子目录中加载 skills


275 275 

276Claude Code 监视 skill 目录的文件更改,除了在 [bare mode](/docs/zh-CN/headless#start-faster-with-bare-mode) 中。当您在 `~/.claude/skills/`、项目 `.claude/skills/` 或 `--add-dir` 目录内的 `.claude/skills/` 中添加、编辑或删除 skill 时,Claude Code 在当前会话中获取更改,无需重新启动。如果您创建会话启动时不存在的顶级 skills 目录,重新启动 Claude Code 以便它可以监视新目录。276Claude Code 监视 skill 目录的文件更改,除了在 [bare mode](/docs/zh-CN/headless#start-faster-with-bare-mode) 中。当您在 `~/.claude/skills/`、项目 `.claude/skills/` 或 `--add-dir` 目录内的 `.claude/skills/` 中添加、编辑或删除 skill 时,Claude Code 在当前会话中获取更改,无需重新启动。如果您创建会话启动时不存在的顶级 skills 目录,重新启动 Claude Code 以便它可以监视新目录。

277 277 

278实时更改检测仅涵盖 `SKILL.md` 文本。对于也是 [plugin](/docs/zh-CN/plugins-reference#skills-directory-plugins) 的 skill 文件夹,对 `hooks/`、`.mcp.json`、`agents/` 和 `output-styles/` 的更改需要 `/reload-plugins` 才能生效。278实时更改检测仅涵盖 `SKILL.md` 文本。对于也是 [plugin](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 的 skill 文件夹,对 `hooks/`、`.mcp.json`、`agents/` 和 `output-styles/` 的更改需要 `/reload-plugins` 才能生效。

279 279 

280<h3 id="remove-a-skill">280<h3 id="remove-a-skill">

281 删除 skill281 删除 skill


285 285 

286* **Personal 或 project skill**:删除 skill 的目录,`~/.claude/skills/<skill-name>/` 或 `.claude/skills/<skill-name>/`。Claude Code [在当前会话中从 `/skills` 中删除它](#live-change-detection);Claude Code 已从中加载的内容遵循 [skill 内容生命周期](#skill-content-lifecycle)。286* **Personal 或 project skill**:删除 skill 的目录,`~/.claude/skills/<skill-name>/` 或 `.claude/skills/<skill-name>/`。Claude Code [在当前会话中从 `/skills` 中删除它](#live-change-detection);Claude Code 已从中加载的内容遵循 [skill 内容生命周期](#skill-content-lifecycle)。

287* **Enterprise skill**:管理员从 [托管设置目录](/docs/zh-CN/managed-settings#delivery-mechanisms) 内的 `.claude/skills/` 中删除 skill 的目录,例如 Linux 上的 `/etc/claude-code/.claude/skills/<skill-name>/`。287* **Enterprise skill**:管理员从 [托管设置目录](/docs/zh-CN/managed-settings#delivery-mechanisms) 内的 `.claude/skills/` 中删除 skill 的目录,例如 Linux 上的 `/etc/claude-code/.claude/skills/<skill-name>/`。

288* **Plugin skill**:从 `/plugin` 菜单禁用或卸载提供它的 plugin,或使用 `/plugin uninstall <plugin-name>@<marketplace-name>`。Claude Code 在 [更改应用](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 时或重新启动时卸载 plugin 的 skills。288* **Plugin skill**:从 `/plugin` 菜单禁用或卸载提供它的 plugin,或使用 `/plugin uninstall <plugin-name>@<marketplace-name>`。Claude Code 在 [更改应用](/docs/zh-CN/plugins/cli-reference#reload-plugins) 时或重新启动时卸载 plugin 的 skills。

289* **从 claude.ai 同步的 Skill**:在您 [启用它](#skills-in-cowork-and-cloud-sessions) 的同一位置为您的 claude.ai 账户关闭该 skill。Claude Code 在下一次 [同步您的 skills](#where-synced-skills-load) 时从 `~/.claude/skills/synced/` 中删除它。如果您改为手动删除目录,下一次同步会在 skill 在 claude.ai 上保持启用的情况下再次下载它。289* **从 claude.ai 同步的 Skill**:在您 [启用它](#skills-in-cowork-and-cloud-sessions) 的同一位置为您的 claude.ai 账户关闭该 skill。Claude Code 在下一次 [同步您的 skills](#where-synced-skills-load) 时从 `~/.claude/skills/synced/` 中删除它。如果您改为手动删除目录,下一次同步会在 skill 在 claude.ai 上保持启用的情况下再次下载它。

290* **捆绑 skill**:将 [`disableBundledSkills`](#bundled-skills) 设置为 `true` 以关闭捆绑 skills,或在 [`skillOverrides`](#override-skill-visibility-from-settings) 中将一个 skill 设置为 `"off"` 以隐藏它。290* **捆绑 skill**:将 [`disableBundledSkills`](#bundled-skills) 设置为 `true` 以关闭捆绑 skills,或在 [`skillOverrides`](#override-skill-visibility-from-settings) 中将一个 skill 设置为 `"off"` 以隐藏它。

291 291 


389 389 

390| 分发路径 | 你可以使用的 Frontmatter 字段 |390| 分发路径 | 你可以使用的 Frontmatter 字段 |

391| :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------ |391| :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------ |

392| Claude Code skills 在[任何级别](#where-skills-live),包括[插件](/docs/zh-CN/plugins) skills | 上表中的每个字段 |392| Claude Code skills 在[任何级别](#where-skills-live),包括[插件](/docs/zh-CN/plugins/overview) skills | 上表中的每个字段 |

393| claude.ai skill 上传、Skills API 和使用来自 [anthropics/skills](https://github.com/anthropics/skills) 的 `package_skill.py` 打包 | `name`、`description`、`license`、`compatibility`、`metadata`、`allowed-tools` |393| claude.ai skill 上传、Skills API 和使用来自 [anthropics/skills](https://github.com/anthropics/skills) 的 `package_skill.py` 打包 | `name`、`description`、`license`、`compatibility`、`metadata`、`allowed-tools` |

394 394 

395当你为[Cowork 和云会话](#skills-in-cowork-and-cloud-sessions)启用个人 skill(包括例程)时,你将其上传到 claude.ai,因此适用相同的规则。395当你为[Cowork 和云会话](#skills-in-cowork-and-cloud-sessions)启用个人 skill(包括例程)时,你将其上传到 claude.ai,因此适用相同的规则。


411下表显示了每个布局的命令名称来自何处:411下表显示了每个布局的命令名称来自何处:

412 412 

413| Skill 位置 | 命令名称来源 | 示例 |413| Skill 位置 | 命令名称来源 | 示例 |

414| :------------------------------------------------------------- | :------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- |414| :------------------------------------------------------------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------- |

415| `~/.claude/skills/` 或 `.claude/skills/` 下的 Skill 目录 | 目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging` |415| `~/.claude/skills/` 或 `.claude/skills/` 下的 Skill 目录 | 目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging` |

416| [嵌套](#where-skills-live)`.claude/skills/` 目录,当名称与另一个 skill 冲突时 | 相对于工作目录的子目录路径,然后是 skill 目录名称 | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |416| [嵌套](#where-skills-live)`.claude/skills/` 目录,当名称与另一个 skill 冲突时 | 相对于工作目录的子目录路径,然后是 skill 目录名称 | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |

417| `.claude/commands/` 下的文件 | 文件名(不含扩展名) | `.claude/commands/deploy.md` → `/deploy` |417| `.claude/commands/` 下的文件 | 文件名(不含扩展名) | `.claude/commands/deploy.md` → `/deploy` |

418| `.claude/commands/` 的子目录中的文件 | 相对于 `commands/` 的子目录路径,每个 `/` 替换为 `:`,然后是不含扩展名的文件名 | `.claude/commands/frontend/component.md` → `/frontend:component` |418| `.claude/commands/` 的子目录中的文件 | 相对于 `commands/` 的子目录路径,每个 `/` 替换为 `:`,然后是不含扩展名的文件名 | `.claude/commands/frontend/component.md` → `/frontend:component` |

419| 插件 `skills/` 子目录 | Frontmatter `name` 或目录名称,由插件命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review`,或使用 `name: fancy` 时为 `/my-plugin:fancy` |419| 插件 `skills/` 子目录 | Frontmatter `name` 或目录名称,由插件命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review`,或使用 `name: fancy` 时为 `/my-plugin:fancy` |

420| 插件根 `SKILL.md` | Frontmatter `name`,以插件目录名称作为后备 | `my-plugin/SKILL.md` 带有 `name: review` → `/my-plugin:review`。请参阅[路径行为规则](/docs/zh-CN/plugins-reference#path-behavior-rules) |420| 插件根 `SKILL.md` | Frontmatter `name`,以插件目录名称作为后备 | `my-plugin/SKILL.md` 带有 `name: review` → `/my-plugin:review`。请参阅[单个 skill 在插件根](/docs/zh-CN/plugins/components#skills) |

421| 从 claude.ai [同步的 skill](#how-synced-skills-behave) | 你的 claude.ai 帐户上 skill 的名称,前缀为 `anthropic-skills:` | 帐户 skill `deploy` → `/anthropic-skills:deploy`,或在没有其他命令使用该名称时为 `/deploy` |421| 从 claude.ai [同步的 skill](#how-synced-skills-behave) | 你的 claude.ai 帐户上 skill 的名称,前缀为 `anthropic-skills:` | 帐户 skill `deploy` → `/anthropic-skills:deploy`,或在没有其他命令使用该名称时为 `/deploy` |

422 422 

423在插件 skill 中,frontmatter `name` 替换命令最后一段中的目录名称,因此 `my-plugin/skills/review/SKILL.md` 带有 `name: fancy` 变为 `/my-plugin:fancy`。裸 `/fancy` 也调用该 skill,除非另一个命令已使用该名称。如果你写的 `name` 已经以插件自己的前缀开头,Claude Code 在 v2.1.246 或更高版本上不会再次添加前缀。例如,`name: my-plugin:fancy` 仍然变为 `/my-plugin:fancy`。从 v2.1.216 到 v2.1.245,当 `name` 已经携带前缀时,Claude Code 会加倍前缀。423在插件 skill 中,frontmatter `name` 替换命令最后一段中的目录名称,因此 `my-plugin/skills/review/SKILL.md` 带有 `name: fancy` 变为 `/my-plugin:fancy`。裸 `/fancy` 也调用该 skill,除非另一个命令已使用该名称。如果你写的 `name` 已经以插件自己的前缀开头,Claude Code 在 v2.1.246 或更高版本上不会再次添加前缀。例如,`name: my-plugin:fancy` 仍然变为 `/my-plugin:fancy`。从 v2.1.216 到 v2.1.245,当 `name` 已经携带前缀时,Claude Code 会加倍前缀。


442| `${CLAUDE_EFFORT}` | 当前工作量级别:`low`、`medium`、`high`、`xhigh` 或 `max`。Ultracode 不是一个不同的级别,报告为 `xhigh`。使用此来根据活动工作量设置调整 skill 说明。 |442| `${CLAUDE_EFFORT}` | 当前工作量级别:`low`、`medium`、`high`、`xhigh` 或 `max`。Ultracode 不是一个不同的级别,报告为 `xhigh`。使用此来根据活动工作量设置调整 skill 说明。 |

443| `${CLAUDE_SKILL_DIR}` | 包含 skill 的 `SKILL.md` 文件的目录。对于插件 skills,这是插件内 skill 的子目录,而不是插件根。在 bash 注入命令中使用此来引用与 skill 捆绑的脚本或文件,无论当前工作目录如何。 |443| `${CLAUDE_SKILL_DIR}` | 包含 skill 的 `SKILL.md` 文件的目录。对于插件 skills,这是插件内 skill 的子目录,而不是插件根。在 bash 注入命令中使用此来引用与 skill 捆绑的脚本或文件,无论当前工作目录如何。 |

444| `${CLAUDE_PROJECT_DIR}` | 项目根目录。这是与[hooks](/docs/zh-CN/hooks#reference-scripts-by-path)和 MCP 服务器相同的路径,作为 `CLAUDE_PROJECT_DIR` 接收。使用此来引用项目本地脚本或文件,例如 `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`,独立于 skill 的安装位置。 |444| `${CLAUDE_PROJECT_DIR}` | 项目根目录。这是与[hooks](/docs/zh-CN/hooks#reference-scripts-by-path)和 MCP 服务器相同的路径,作为 `CLAUDE_PROJECT_DIR` 接收。使用此来引用项目本地脚本或文件,例如 `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`,独立于 skill 的安装位置。 |

445| `${CLAUDE_PLUGIN_ROOT}` | 插件的安装目录。仅在插件 skills 中替换。使用此来引用插件中任何位置的脚本或文件,包括插件 skills 之间共享的资源。请参阅[插件环境变量](/docs/zh-CN/plugins-reference#environment-variables)。 |445| `${CLAUDE_PLUGIN_ROOT}` | 插件的安装目录。仅在插件 skills 中替换。使用此来引用插件中任何位置的脚本或文件,包括插件 skills 之间共享的资源。请参阅[插件环境变量](/docs/zh-CN/plugins/manifest-reference#environment-variables)。 |

446| `${CLAUDE_PLUGIN_DATA}` | 插件的[持久数据目录](/docs/zh-CN/plugins-reference#persistent-data-directory),在插件更新后仍然存在。仅在插件 skills 中替换。使用此来引用已安装的依赖项、生成的文件或必须超过更新的缓存。 |446| `${CLAUDE_PLUGIN_DATA}` | 插件的[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data),在插件更新后仍然存在。仅在插件 skills 中替换。使用此来引用已安装的依赖项、生成的文件或必须超过更新的缓存。 |

447 447 

448Claude Code 在两个地方替换 `${CLAUDE_SKILL_DIR}` 和 `${CLAUDE_PROJECT_DIR}`:skill 的 markdown 内容和[`allowed-tools`](#frontmatter-reference) frontmatter 中的 Bash 规则。在插件 skill 中,Claude Code 在相同的两个地方替换 `${CLAUDE_PLUGIN_ROOT}` 和 `${CLAUDE_PLUGIN_DATA}`。在两个地方使用相同的变量让 skill 运行捆绑的脚本而无需许可提示。以下 skill 显示了该模式:448Claude Code 在两个地方替换 `${CLAUDE_SKILL_DIR}` 和 `${CLAUDE_PROJECT_DIR}`:skill 的 markdown 内容和[`allowed-tools`](#frontmatter-reference) frontmatter 中的 Bash 规则。在插件 skill 中,Claude Code 在相同的两个地方替换 `${CLAUDE_PLUGIN_ROOT}` 和 `${CLAUDE_PLUGIN_DATA}`。在两个地方使用相同的变量让 skill 运行捆绑的脚本而无需许可提示。以下 skill 显示了该模式:

449 449 


892 892 

893两者的检查都是基线比较。收集几个现实的提示,在启用技能的新会话中运行每个提示,然后在[禁用](#override-skill-visibility-from-settings)技能的情况下再运行一次,并比较结果。新会话很重要,因为编写技能时留下的上下文会掩盖书面说明中的差距。893两者的检查都是基线比较。收集几个现实的提示,在启用技能的新会话中运行每个提示,然后在[禁用](#override-skill-visibility-from-settings)技能的情况下再运行一次,并比较结果。新会话很重要,因为编写技能时留下的上下文会掩盖书面说明中的差距。

894 894 

895两个工具可以自动化该比较。对于在[插件](/docs/zh-CN/plugins)中发布的技能,[`claude plugin eval`](/docs/zh-CN/plugin-evals)在隔离会话中运行每个提示,既有插件也没有插件,使用你定义的或它为你编写的评分器对其进行评分,并在低于阈值时以非零状态退出,以便你可以在 CI 上对其进行门控。对于在 Claude Code 对话中迭代单个技能,下面的 skill-creator 插件使用其自己的 `evals/evals.json` 格式运行类似的循环。这两种格式不可互换。895两个工具可以自动化该比较。对于在[插件](/docs/zh-CN/plugins/overview)中发布的技能,[`claude plugin eval`](/docs/zh-CN/plugin-evals)在隔离会话中运行每个提示,既有插件也没有插件,使用你定义的或它为你编写的评分器对其进行评分,并在低于阈值时以非零状态退出,以便你可以在 CI 上对其进行门控。对于在 Claude Code 对话中迭代单个技能,下面的 skill-creator 插件使用其自己的 `evals/evals.json` 格式运行类似的循环。这两种格式不可互换。

896 896 

897<h3 id="run-evals-with-skill-creator">897<h3 id="run-evals-with-skill-creator">

898 使用 skill-creator 运行评估898 使用 skill-creator 运行评估


907如果安装失败,请匹配 Claude Code 报告的消息:907如果安装失败,请匹配 Claude Code 报告的消息:

908 908 

909* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。909* `Marketplace "claude-plugins-official" not found`:使用 `/plugin marketplace add anthropics/claude-plugins-official` 添加市场,然后重试安装。

910* [插件在市场中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查插件名称。910* [插件在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

911 911 

912如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 随后会为你运行该重新加载。如果重新加载警告你的下一条消息会重新读取对话,请运行 `/reload-plugins --force` 以在当前会话中使插件的技能可用。然后要求 Claude 评估现有技能,例如 `evaluate my summarize-changes skill with skill-creator`。该插件会引导你编写测试用例并运行循环:912如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 随后会为你运行该重新加载。如果重新加载警告你的下一条消息会重新读取对话,请运行 `/reload-plugins --force` 以在当前会话中使插件的技能可用。然后要求 Claude 评估现有技能,例如 `evaluate my summarize-changes skill with skill-creator`。该插件会引导你编写测试用例并运行循环:

913 913 


928Skills 可以根据你的受众在不同的范围内分发:928Skills 可以根据你的受众在不同的范围内分发:

929 929 

930* **项目 skills**:将 `.claude/skills/` 提交到版本控制930* **项目 skills**:将 `.claude/skills/` 提交到版本控制

931* **Plugins**:在你的 [plugin](/docs/zh-CN/plugins) 中创建 `skills/` 目录931* **Plugins**:在你的 [plugin](/docs/zh-CN/plugins/overview) 中创建 `skills/` 目录

932* **托管**:通过 [托管设置](/docs/zh-CN/managed-settings) 在整个组织范围内部署932* **托管**:通过 [托管设置](/docs/zh-CN/managed-settings) 在整个组织范围内部署

933 933 

934<h3 id="generate-visual-output">934<h3 id="generate-visual-output">


1143 1143 

1144如果 skill 在 plugin 中,你可以在现实提示中测量它触发的频率,而不是逐个检查:使用 [`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite) 编写一个 eval case,并在每次描述更改后使用 `claude plugin eval` 运行它。1144如果 skill 在 plugin 中,你可以在现实提示中测量它触发的频率,而不是逐个检查:使用 [`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite) 编写一个 eval case,并在每次描述更改后使用 `claude plugin eval` 运行它。

1145 1145 

1146要找到 frontmatter 无法解析的 `SKILL.md` 文件,在 skills 目录上运行 [`claude plugin validate`](/docs/zh-CN/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest),例如对于项目 skills 运行 `claude plugin validate .claude/skills`,或对于个人 skills 运行 `claude plugin validate ~/.claude/skills`。需要 Claude Code v2.1.233 或更高版本。1146要找到 frontmatter 无法解析的 `SKILL.md` 文件,在 skills 目录上运行 [`claude plugin validate`](/docs/zh-CN/plugins/cli-reference#validate-a-directory),例如对于项目 skills 运行 `claude plugin validate .claude/skills`,或对于个人 skills 运行 `claude plugin validate ~/.claude/skills`。需要 Claude Code v2.1.233 或更高版本。

1147 1147 

1148<h3 id="skill-triggers-too-often">1148<h3 id="skill-triggers-too-often">

1149 Skill 触发过于频繁1149 Skill 触发过于频繁


1184* **[在 agentskills.io 上评估 skill 输出质量](https://agentskills.io/skill-creation/evaluating-skills)**:eval 文件格式和迭代工作流1184* **[在 agentskills.io 上评估 skill 输出质量](https://agentskills.io/skill-creation/evaluating-skills)**:eval 文件格式和迭代工作流

1185* **[Skill 创作最佳实践](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)**:适用于 Claude 产品的写作指导1185* **[Skill 创作最佳实践](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)**:适用于 Claude 产品的写作指导

1186* **[Subagents](/docs/zh-CN/sub-agents)**:将任务委派给专门的代理1186* **[Subagents](/docs/zh-CN/sub-agents)**:将任务委派给专门的代理

1187* **[Plugins](/docs/zh-CN/plugins)**:打包和分发 skills 与其他扩展1187* **[Plugins](/docs/zh-CN/plugins/overview)**:打包和分发 skills 与其他扩展

1188* **[Hooks](/docs/zh-CN/hooks)**:围绕工具事件自动化工作流1188* **[Hooks](/docs/zh-CN/hooks)**:围绕工具事件自动化工作流

1189* **[Memory](/docs/zh-CN/memory)**:管理 CLAUDE.md 文件以获得持久上下文1189* **[Memory](/docs/zh-CN/memory)**:管理 CLAUDE.md 文件以获得持久上下文

1190* **[Commands](/docs/zh-CN/commands)**:内置命令和捆绑 skills 的参考1190* **[Commands](/docs/zh-CN/commands)**:内置命令和捆绑 skills 的参考

statusline.md +1 −1

Details

1142 1142 

1143将一个 JSON 行写入 stdout,用于你想覆盖的每一行,形式为 `{"id": "<task id>", "content": "<row body>"}` 。`content` 字符串按原样呈现,包括 ANSI 颜色和 OSC 8 超链接。省略任务的 `id` 以保持该行的默认呈现;发出空 `content` 字符串以隐藏它。1143将一个 JSON 行写入 stdout,用于你想覆盖的每一行,形式为 `{"id": "<task id>", "content": "<row body>"}` 。`content` 字符串按原样呈现,包括 ANSI 颜色和 OSC 8 超链接。省略任务的 `id` 以保持该行的默认呈现;发出空 `content` 字符串以隐藏它。

1144 1144 

1145适用于 `statusLine` 的相同信任、`disableAllHooks` 和 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 门控也适用于此处。插件可以在其[`settings.json`](/docs/zh-CN/plugins-reference#standard-plugin-layout)中提供默认的 `subagentStatusLine`,但与钩子不同,即使插件在托管设置 `enabledPlugins` 中被强制启用,插件值也不会在 `allowManagedHooksOnly` 下运行。1145适用于 `statusLine` 的相同信任、`disableAllHooks` 和 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 门控也适用于此处。插件可以在其[`settings.json`](/docs/zh-CN/plugins/manifest-reference#standard-layout)中提供默认的 `subagentStatusLine`,但与钩子不同,即使插件在托管设置 `enabledPlugins` 中被强制启用,插件值也不会在 `allowManagedHooksOnly` 下运行。

1146 1146 

1147<h2 id="tips">1147<h2 id="tips">

1148 提示1148 提示

sub-agents.md +16 −14

Details

174| `--agents` CLI 标志 | 当前会话 | 2 | 启动 Claude Code 时传递 JSON |174| `--agents` CLI 标志 | 当前会话 | 2 | 启动 Claude Code 时传递 JSON |

175| `.claude/agents/` | 当前项目 | 3 | 询问 Claude,或手动创建文件 |175| `.claude/agents/` | 当前项目 | 3 | 询问 Claude,或手动创建文件 |

176| `~/.claude/agents/` | 所有您的项目 | 4 | 询问 Claude,或手动创建文件 |176| `~/.claude/agents/` | 所有您的项目 | 4 | 询问 Claude,或手动创建文件 |

177| Plugin 的 `agents/` 目录 | 启用 plugin 的位置 | 5(最低) | 与 [plugins](/docs/zh-CN/plugins) 一起安装 |177| Plugin 的 `agents/` 目录 | 启用 plugin 的位置 | 5(最低) | 与 [plugins](/docs/zh-CN/plugins/overview) 一起安装 |

178 178 

179**项目 subagents**(`.claude/agents/`)非常适合特定于代码库的 subagents。将它们检入版本控制,以便您的团队可以协作使用和改进它们。179**项目 subagents**(`.claude/agents/`)非常适合特定于代码库的 subagents。将它们检入版本控制,以便您的团队可以协作使用和改进它们。

180 180 

181项目 subagents 通过从当前工作目录向上遍历来发现,因此会扫描那里和存储库根目录之间的每个 `.claude/agents/`。从 v2.1.178 开始,当这些嵌套目录中的多个目录定义相同的 `name` 时,Claude Code 使用最接近工作目录的定义。181项目 subagents 通过从当前工作目录向上遍历来发现,因此会扫描那里和存储库根目录之间的每个 `.claude/agents/`。当这些嵌套目录中的多个目录定义相同的 `name` 时,Claude Code 使用最接近工作目录的定义。

182 182 

183使用 `--add-dir` 或 `/add-dir` 添加目录时,Claude Code 也会加载其 `.claude/agents/` 文件夹,与您的项目 subagents 一起。有关哪些其他配置类型从 `--add-dir` 加载,请参阅 [Additional directories](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。要在没有 `--add-dir` 的情况下跨项目共享 subagents,请使用 `~/.claude/agents/` 或 [plugin](/docs/zh-CN/plugins)。183使用 `--add-dir` 或 `/add-dir` 添加目录时,Claude Code 也会加载其 `.claude/agents/` 文件夹,与您的项目 subagents 一起。有关哪些其他配置类型从 `--add-dir` 加载,请参阅 [Additional directories](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。要在没有 `--add-dir` 的情况下跨项目共享 subagents,请使用 `~/.claude/agents/` 或 [plugin](/docs/zh-CN/plugins/overview)。

184 184 

185**用户 subagents**(`~/.claude/agents/`)是在所有项目中可用的个人 subagents。185**用户 subagents**(`~/.claude/agents/`)是在所有项目中可用的个人 subagents。

186 186 


238 238 

239**托管 subagents** 由组织管理员部署。在 [managed settings directory](/docs/zh-CN/managed-settings#delivery-mechanisms) 内的 `.claude/agents/` 中放置 markdown 文件,使用与项目和用户 subagents 相同的 frontmatter 格式。托管定义优先于具有相同名称的项目和用户 subagents。239**托管 subagents** 由组织管理员部署。在 [managed settings directory](/docs/zh-CN/managed-settings#delivery-mechanisms) 内的 `.claude/agents/` 中放置 markdown 文件,使用与项目和用户 subagents 相同的 frontmatter 格式。托管定义优先于具有相同名称的项目和用户 subagents。

240 240 

241**Plugin subagents** 来自您已安装的 [plugins](/docs/zh-CN/plugins)。它们与您的自定义 subagents 一起自动加载,并在 @-mention 类型提前中以其范围名称出现。有关创建 plugin subagents 的详细信息,请参阅 [plugin 组件参考](/docs/zh-CN/plugins-reference#agents)。241**Plugin subagents** 来自您已安装的 [plugins](/docs/zh-CN/plugins/overview)。它们与您的自定义 subagents 一起自动加载,并在 @-mention 类型提前中以其范围名称出现。有关创建 plugin subagents 的详细信息,请参阅 [plugin 组件参考](/docs/zh-CN/plugins/components#agents)。

242 242 

243<Note>243<Note>

244 出于安全原因,plugin subagents 不支持 `hooks`、`mcpServers` 或 `permissionMode` frontmatter 字段。加载来自 plugin 的代理时,这些字段被忽略。如果您需要它们,请将代理文件复制到 `.claude/agents/` 或 `~/.claude/agents/`。您也可以在 `settings.json` 或 `settings.local.json` 中向 [`permissions.allow`](/docs/zh-CN/settings-reference#permissions-allow) 添加规则,但这些规则适用于整个会话,而不仅仅是 plugin subagent。244 出于安全原因,plugin subagents 不支持 `hooks`、`mcpServers` 或 `permissionMode` frontmatter 字段。加载来自 plugin 的代理时,这些字段被忽略。如果您需要它们,请将代理文件复制到 `.claude/agents/` 或 `~/.claude/agents/`。您也可以在 `settings.json` 或 `settings.local.json` 中向 [`permissions.allow`](/docs/zh-CN/settings-reference#permissions-allow) 添加规则,但这些规则适用于整个会话,而不仅仅是 plugin subagent。


299 Frontmatter 参考299 Frontmatter 参考

300</h3>300</h3>

301 301 

302使用 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 在其文件顶部的 `---` 标记之间配置 subagent,并在关闭 `---` 后将其系统提示写为 Markdown。只有 `name` 和 `description` 是必需的。302配置一个 subagent 时,使用 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 在其文件顶部的 `---` 标记之间,并在关闭 `---` 后将其系统提示写为 Markdown。只有 `name` 和 `description` 是必需的。

303 303 

304多字段名称使用 camelCase,例如 `maxTurns` 和 `disallowedTools`,必须与表格完全匹配:Claude Code 忽略它不识别的字段而不报告错误。要找出为什么 subagent 文件没有加载,请参阅 [Subagent files Claude Code skips](#subagent-files-claude-code-skips)。304多字段名称使用 camelCase,例如 `maxTurns` 和 `disallowedTools`,必须与表格完全匹配:Claude Code 忽略它不识别的字段而不报告错误。要找出为什么 subagent 文件没有加载,请参阅 [Subagent files Claude Code skips](#subagent-files-claude-code-skips)。

305 305 

306| Field | 必需 | Description |306| Field | 必需 | Description |

307| :---------------- | :- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |307| :---------------- | :- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

308| `name` | 是 | 唯一标识符,例如 `code-reviewer` 或 `reviewer-v2`。[Hooks](/docs/zh-CN/hooks#subagentstart) 将此值作为 `agent_type` 接收。文件名不必匹配。名称不能包含 `:`,这是为 [plugin-scoped identifiers](/docs/zh-CN/plugins) 保留的,例如 `my-plugin:reviewer`。Claude Code 不加载名称包含一个的文件,并向调试日志记录错误。在 v2.1.218 之前,这样的名称被接受 |308| `name` | 是 | 唯一标识符,例如 `code-reviewer` 或 `reviewer-v2`。[Hooks](/docs/zh-CN/hooks#subagentstart) 将此值作为 `agent_type` 接收。文件名不必匹配。名称不能包含 `:`,这是为 [plugin-scoped identifiers](/docs/zh-CN/plugins/overview) 保留的,例如 `my-plugin:reviewer`。Claude Code 不加载名称包含一个的文件,并向调试日志记录错误。在 v2.1.218 之前,这样的名称被接受 |

309| `description` | 是 | Claude 何时应该委托给此 subagent |309| `description` | 是 | Claude 何时应该委托给此 subagent |

310| `tools` | 否 | [Tools](#available-tools) subagent 可以使用,作为逗号分隔的字符串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,继承 subagents 可用的每个工具。如果列表中没有条目解析为工具,subagent 通常 [fails to launch](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools) 并出现错误,命名条目。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |310| `tools` | 否 | [Tools](#available-tools) subagent 可以使用,作为逗号分隔的字符串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,继承 subagents 可用的每个工具。如果列表中没有条目解析为工具,subagent 通常 [fails to launch](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools) 并出现错误,命名条目。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |

311| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除。格式与 `tools` 相同。带有说明符的条目,例如 `Bash(git push *)`,仍然 [removes the whole tool](#available-tools) |311| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除。格式与 `tools` 相同。带有说明符的条目,例如 `Bash(git push *)`,仍然 [removes the whole tool](#available-tools) |


349 349 

350要查看调试日志,使用 `--debug` 运行 Claude Code。350要查看调试日志,使用 `--debug` 运行 Claude Code。

351 351 

352一个 [plugin subagent](/docs/zh-CN/plugins-reference#agents),其 frontmatter 没有 `name` 或不解析,仍然加载,在其文件名下。352一个 [plugin subagent](/docs/zh-CN/plugins/components#agents),其 frontmatter 没有 `name` 或不解析,仍然加载,在其文件名下。

353 353 

354<h5 id="check-an-agents-directory-before-a-session">354<h5 id="check-an-agents-directory-before-a-session">

355 在会话前检查 `agents` 目录355 在会话前检查 `agents` 目录

356</h5>356</h5>

357 357 

358要查找 `agents` 目录中 frontmatter 不解析的文件,针对目录运行 `claude plugin validate`,例如 `.claude/agents` 或 `~/.claude/agents`。Claude Code 仅检查 [您命名的目录](/docs/zh-CN/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest),并不标记 frontmatter 解析但没有 `name` 的文件。需要 Claude Code v2.1.233 或更高版本。358要查找 `agents` 目录中 frontmatter 不解析的文件,针对目录运行 `claude plugin validate`,例如 `.claude/agents` 或 `~/.claude/agents`。Claude Code 仅检查 [您命名的目录](/docs/zh-CN/plugins/cli-reference#validate-a-directory),并不标记 frontmatter 解析但没有 `name` 的文件。需要 Claude Code v2.1.233 或更高版本。

359 359 

360<h3 id="choose-a-model">360<h3 id="choose-a-model">

361 选择模型361 选择模型


573* 一个引用您已配置的服务器的名称573* 一个引用您已配置的服务器的名称

574* 一个代理文件中的内联服务器,来自 `~/.claude/agents/`,在您使用 `--agents` 或 SDK `agents` 选项传递的一个中,或托管设置提供的一个中574* 一个代理文件中的内联服务器,来自 `~/.claude/agents/`,在您使用 `--agents` 或 SDK `agents` 选项传递的一个中,或托管设置提供的一个中

575 575 

576从 v2.1.153 开始,适用于主会话的 MCP 限制也涵盖在 subagent frontmatter 中声明的服务器:576适用于主会话的 MCP 限制也涵盖在 subagent frontmatter 中声明的服务器:

577 577 

578* [`--strict-mcp-config`](/docs/zh-CN/cli-reference) 和 [`--bare`](/docs/zh-CN/cli-reference)578* [`--strict-mcp-config`](/docs/zh-CN/cli-reference) 和 [`--bare`](/docs/zh-CN/cli-reference)

579* [Enterprise managed MCP configuration](/docs/zh-CN/managed-mcp)579* [Enterprise managed MCP configuration](/docs/zh-CN/managed-mcp)


820| `SubagentStart` | Agent type name | 当 subagent 开始执行时 |820| `SubagentStart` | Agent type name | 当 subagent 开始执行时 |

821| `SubagentStop` | Agent type name | 当 subagent 完成时 |821| `SubagentStop` | Agent type name | 当 subagent 完成时 |

822 822 

823两个事件都支持匹配器以按名称针对特定代理类型。匹配器值是项目级和用户级 subagents 的代理 frontmatter `name`,或 [plugin subagents](/docs/zh-CN/plugins) 的 plugin 范围标识符,例如 `my-plugin:db-agent`。范围名称包含冒号,因此它被评估为 [unanchored regular expression](/docs/zh-CN/hooks#matcher-patterns);使用 `^` 和 `$` 锚定它,如 `^my-plugin:db-agent$`,以仅匹配该代理。823两个事件都支持匹配器以按名称针对特定代理类型。匹配器值是项目级和用户级 subagents 的代理 frontmatter `name`,或 [plugin subagents](/docs/zh-CN/plugins/components#agents) 的 plugin 范围标识符,例如 `my-plugin:db-agent`。范围名称包含冒号,因此它被评估为 [unanchored regular expression](/docs/zh-CN/hooks#matcher-patterns);使用 `^` 和 `$` 锚定它,如 `^my-plugin:db-agent$`,以仅匹配该代理。

824 824 

825此示例仅在 `db-agent` subagent 启动时运行设置脚本,并在任何 subagent 停止时运行清理脚本:825此示例仅在 `db-agent` subagent 启动时运行设置脚本,并在任何 subagent 停止时运行清理脚本:

826 826 


862 862 

863保持描述简洁:当您的 subagents 的组合描述超过 [15,000 令牌限制](/docs/zh-CN/errors#agent-descriptions-are-over-the-15000-token-limit) 时,Claude Code 会显示启动警告,但仍然加载每个 subagent。863保持描述简洁:当您的 subagents 的组合描述超过 [15,000 令牌限制](/docs/zh-CN/errors#agent-descriptions-are-over-the-15000-token-limit) 时,Claude Code 会显示启动警告,但仍然加载每个 subagent。

864 864 

865如果 subagent 在 [plugin](/docs/zh-CN/plugins/overview) 中提供,您可以衡量 Claude 在现实提示中对其委托的可靠性,而不是一次检查一个:[`claude plugin eval`](/docs/zh-CN/plugin-evals) 使用和不使用 plugin 运行每个提示,并对结果进行评分。

866 

865<h3 id="invoke-subagents-explicitly">867<h3 id="invoke-subagents-explicitly">

866 显式调用 subagents868 显式调用 subagents

867</h3>869</h3>


887 889 

888您的完整消息仍然发送给 Claude,它根据您的要求为 subagent 编写任务提示。@-mention 控制调用哪个 subagent,而不是它接收什么提示。890您的完整消息仍然发送给 Claude,它根据您的要求为 subagent 编写任务提示。@-mention 控制调用哪个 subagent,而不是它接收什么提示。

889 891 

890由启用的 [plugin](/docs/zh-CN/plugins) 提供的 Subagents 在类型提前中显示为其作用域名称,例如 `my-plugin:code-reviewer` 或 `my-plugin:review:security`,当 plugin [将 agents 组织到子文件夹中](#choose-the-subagent-scope)。命名背景 subagents 当前在会话中运行也出现在类型提前中,在名称旁边显示其状态。892由启用的 [plugin](/docs/zh-CN/plugins/overview) 提供的 Subagents 在类型提前中显示为其作用域名称,例如 `my-plugin:code-reviewer` 或 `my-plugin:review:security`,当 plugin [将 agents 组织到子文件夹中](#choose-the-subagent-scope)。命名背景 subagents 当前在会话中运行也出现在类型提前中,在名称旁边显示其状态。

891 893 

892您也可以手动输入提及而不使用选择器:`@agent-<name>` 用于本地 subagents,或 `@agent-` 后跟 plugin subagents 的作用域名称,例如 `@agent-my-plugin:code-reviewer`。当您输入这种形式时,类型提前显示文件匹配而不是 agents。当您提交时,agent 提及仍然会解析。894您也可以手动输入提及而不使用选择器:`@agent-<name>` 用于本地 subagents,或 `@agent-` 后跟 plugin subagents 的作用域名称,例如 `@agent-my-plugin:code-reviewer`。当您输入这种形式时,类型提前显示文件匹配而不是 agents。当您提交时,agent 提及仍然会解析。

893 895 


932Subagents 可以在前台或后台运行:934Subagents 可以在前台或后台运行:

933 935 

934* **前台 subagents** 阻塞主对话直到完成。权限提示会在出现时传递给您。936* **前台 subagents** 阻塞主对话直到完成。权限提示会在出现时传递给您。

935* **后台 subagents** 在您继续工作时并发运行。当后台 subagent 到达需要权限的工具调用时,Claude Code 在您的主会话中显示提示,并命名正在请求的 subagent。批准以让 subagent 继续,或按 Esc 拒绝该单个工具调用而不停止 subagent。在 v2.1.186 之前,后台 subagents 自动拒绝任何会提示的工具调用。937* **后台 subagents** 在您继续工作时并发运行。当后台 subagent 到达需要权限的工具调用时,Claude Code 在您的主会话中显示提示,并命名正在请求的 subagent。批准以让 subagent 继续,或按 Esc 拒绝该单个工具调用而不停止 subagent。

936 938 

937对于每个 Claude 使用 Agent 工具生成的 subagent,Claude Code 从适用的第一种情况中选择前台或后台:939对于每个 Claude 使用 Agent 工具生成的 subagent,Claude Code 从适用的第一种情况中选择前台或后台:

938 940 


1175 1177 

1176您自己停止的 subagent,使用 `/tasks` 中的 `x` 或 SDK `stop_task` 请求,不会自动恢复。如果 Claude 向它发送消息,消息被拒绝,Claude 被告知代理已被取消。1178您自己停止的 subagent,使用 `/tasks` 中的 `x` 或 SDK `stop_task` 请求,不会自动恢复。如果 Claude 向它发送消息,消息被拒绝,Claude 被告知代理已被取消。

1177 1179 

1178当 [该 subagent 的行仍在 subagent 面板中](#run-subagents-in-foreground-or-background) 时,输入到其转录以自己恢复它。之后,来自 Claude 的消息可以再次自动恢复它。需要 Claude Code v2.1.191 或更高版本。1180当 [该 subagent 的行仍在 subagent 面板中](#run-subagents-in-foreground-or-background) 时,输入到其转录以自己恢复它。之后,来自 Claude 的消息可以再次自动恢复它。

1179 1181 

1180恢复在相同 ID 下启动代理的新运行,所以已经失败或完成的 subagent 在任务列表和 Agent SDK 的任务事件中再次显示为运行。在 v2.1.205 之前,它在恢复的运行工作时保持显示其早期的失败或完成状态。1182恢复在相同 ID 下启动代理的新运行,所以已经失败或完成的 subagent 在任务列表和 Agent SDK 的任务事件中再次显示为运行。在 v2.1.205 之前,它在恢复的运行工作时保持显示其早期的失败或完成状态。

1181 1183 


1493 1495 

1494现在您了解了 subagents,探索这些相关功能:1496现在您了解了 subagents,探索这些相关功能:

1495 1497 

1496* [使用 plugins 分发 subagents](/docs/zh-CN/plugins) 以在团队或项目中共享 subagents1498* [使用 plugins 分发 subagents](/docs/zh-CN/plugins/components#agents) 以在团队或项目中共享 subagents

1497* [以编程方式运行 Claude Code](/docs/zh-CN/headless),使用 Agent SDK 进行 CI/CD 和自动化1499* [以编程方式运行 Claude Code](/docs/zh-CN/headless),使用 Agent SDK 进行 CI/CD 和自动化

1498* [使用 MCP 服务器](/docs/zh-CN/mcp) 为 subagents 提供对外部工具和数据的访问1500* [使用 MCP 服务器](/docs/zh-CN/mcp) 为 subagents 提供对外部工具和数据的访问

Details

156 创建自定义主题156 创建自定义主题

157</h3>157</h3>

158 158 

159除了内置预设外,`/theme` 还列出您定义的任何自定义主题以及由已安装的[插件](/docs/zh-CN/plugins-reference#themes)贡献的任何主题。选择列表末尾的\*\*新建自定义主题…\*\*以交互方式创建一个:您命名主题,然后选择要覆盖的各个颜色令牌。当自定义主题突出显示时,按 `Ctrl+E` 可编辑它。159除了内置预设外,`/theme` 还列出您定义的任何自定义主题以及由已安装的[插件](/docs/zh-CN/plugins/components#themes-and-output-styles)贡献的任何主题。选择列表末尾的\*\*新建自定义主题…\*\*以交互方式创建一个:您命名主题,然后选择要覆盖的各个颜色令牌。当自定义主题突出显示时,按 `Ctrl+E` 可编辑它。

160 160 

161每个自定义主题都是 `~/.claude/themes/` 中的一个 JSON 文件。不带 `.json` 扩展名的文件名是主题的 slug,选择主题会将 `custom:<slug>` 存储为您的主题偏好设置。该文件有三个可选字段:161每个自定义主题都是 `~/.claude/themes/` 中的一个 JSON 文件。不带 `.json` 扩展名的文件名是主题的 slug,选择主题会将 `custom:<slug>` 存储为您的主题偏好设置。该文件有三个可选字段:

162 162 

Details

179Claude Code 在命令运行时将命令的输出流式传输到工作文件;输出超过 5 GB 的命令会被杀死。命令完成后,Claude Code 从该文件读取输出,最多读取下面描述的读回窗口。输出中有多少到达 Claude 取决于 Claude Code 是否将结果视为失败:179Claude Code 在命令运行时将命令的输出流式传输到工作文件;输出超过 5 GB 的命令会被杀死。命令完成后,Claude Code 从该文件读取输出,最多读取下面描述的读回窗口。输出中有多少到达 Claude 取决于 Claude Code 是否将结果视为失败:

180 180 

181| 结果 | Claude 获得的内容 |181| 结果 | Claude 获得的内容 |

182| :- | :------------------------------------------------------------------------------------- |182| :- | :------------------------------------------------------------------------------------------------------- |

183| 有效 | 内联最多约 30,000 个字符(默认);超过该值,保存到会话目录的文件路径并在 64 MiB 后截断,加上来自开始的简短预览,Claude 在需要其余部分时读取或搜索文件 |183| 有效 | 内联最多约 30,000 个字符(默认);超过该值,为保存到会话目录的文件的路径(文件超过 64 MiB 的部分会被截断),加上最多前 2,000 个字符的预览,Claude 在需要其余部分时读取或搜索该文件 |

184| 失败 | 内联最多约 10,000 个字符;超过该值,从读回窗口中切割的该大小的头尾摘录,没有文件路径 |184| 失败 | 内联最多约 10,000 个字符;超过该值,从读回窗口中切割的该大小的头尾摘录,没有文件路径 |

185 185 

186退出代码为 1 的命令仅当 Claude Code 识别退出代码 1 为该命令的良性结果时,才计为 Bash 工具的有效结果:`grep`、`rg`、`egrep`、`fgrep`、`find`、`diff`、`test` 和 `[`,加上 `git diff` 和 `git grep`。退出代码为 1 的所有其他命令都计为失败,即使退出 1 是良性信息结果:`pgrep` 和 `jq -e` 没有匹配项,`cmp` 的文件不同。186退出代码为 1 的命令仅当 Claude Code 识别退出代码 1 为该命令的良性结果时,才计为 Bash 工具的有效结果:`grep`、`rg`、`egrep`、`fgrep`、`find`、`diff`、`test` 和 `[`,加上 `git diff` 和 `git grep`。退出代码为 1 的所有其他命令都计为失败,即使退出 1 是良性信息结果:`pgrep` 和 `jq -e` 没有匹配项,`cmp` 的文件不同。


221* `mcp`: 本地 [MCP servers](/docs/zh-CN/mcp)221* `mcp`: 本地 [MCP servers](/docs/zh-CN/mcp)

222* `lsp`: [language servers](#lsp-tool-behavior)222* `lsp`: [language servers](#lsp-tool-behavior)

223* `hooks`: [hook](/docs/zh-CN/hooks) 命令223* `hooks`: [hook](/docs/zh-CN/hooks) 命令

224* `plugin`: [plugins](/docs/zh-CN/plugins) 运行的命令224* `plugin`: [plugins](/docs/zh-CN/plugins/overview) 运行的命令

225* `helper`: Claude Code 自己的辅助命令,例如 `git`225* `helper`: Claude Code 自己的辅助命令,例如 `git`

226* `agent`: 子 Claude Code 进程,例如 [agent teammates](/docs/zh-CN/agent-teams)226* `agent`: 子 Claude Code 进程,例如 [agent teammates](/docs/zh-CN/agent-teams)

227 227 


344* 查找接口的实现344* 查找接口的实现

345* 追踪调用层次结构345* 追踪调用层次结构

346 346 

347Claude Code 会保持该工具处于非活动状态,直到您为您的语言安装 [code intelligence plugin](/docs/zh-CN/discover-plugins#code-intelligence)。在 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) 中,Claude Code 不会启动 plugin 语言服务器,因此 LSP tool 在那里保持非活动状态。Claude Code 从 plugin 获取语言服务器的配置,您需要自己安装服务器二进制文件。347Claude Code 会保持该工具处于非活动状态,直到您为您的语言安装 [code intelligence plugin](/docs/zh-CN/plugins/code-intelligence)。在 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) 中,Claude Code 不会启动 plugin 语言服务器,因此 LSP tool 在那里保持非活动状态。Claude Code 从 plugin 获取语言服务器的配置,您需要自己安装服务器二进制文件。

348 348 

349Claude Code 对于无法启动其语言服务器的文件上的每个 LSP 调用都会返回错误结果。349Claude Code 对于无法启动其语言服务器的文件上的每个 LSP 调用都会返回错误结果。

350 350 


376 376 

377该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用。当设置了 `DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,它也不可用。377该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用。当设置了 `DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,它也不可用。

378 378 

379插件可以声明在插件处于活动状态时自动启动的监视,而不是要求 Claude 启动它们。请参阅 [plugin monitors](/docs/zh-CN/plugins-reference#monitors)。379插件可以声明在插件处于活动状态时自动启动的监视,而不是要求 Claude 启动它们。请参阅 [plugin monitors](/docs/zh-CN/plugins/components#monitors)。

380 380 

381<h3 id="websocket-source">381<h3 id="websocket-source">

382 WebSocket 源382 WebSocket 源

vs-code.md +2 −2

Details

331 管理插件331 管理插件

332</h2>332</h2>

333 333 

334VS Code 扩展包含一个图形界面,用于安装和管理 [plugins](/docs/zh-CN/plugins)。在提示框中输入 `/plugins` 以打开**管理插件**界面。334VS Code 扩展包含一个图形界面,用于安装和管理 [plugins](/docs/zh-CN/plugins/overview)。在提示框中输入 `/plugins` 以打开**管理插件**界面。

335 335 

336<h3 id="install-plugins">336<h3 id="install-plugins">

337 安装插件337 安装插件


394 VS Code 中的插件管理在底层使用相同的 CLI 命令。您在扩展中配置的插件和市场也可在 CLI 中使用,反之亦然。394 VS Code 中的插件管理在底层使用相同的 CLI 命令。您在扩展中配置的插件和市场也可在 CLI 中使用,反之亦然。

395</Note>395</Note>

396 396 

397有关插件系统的更多信息,请参阅 [Plugins](/docs/zh-CN/plugins) 和 [Plugin marketplaces](/docs/zh-CN/plugin-marketplaces)。397有关插件系统的更多信息,请参阅 [Plugins](/docs/zh-CN/plugins/overview) 和 [Plugin marketplaces](/docs/zh-CN/plugins/overview)。

398 398 

399<h2 id="automate-browser-tasks-with-chrome">399<h2 id="automate-browser-tasks-with-chrome">

400 使用 Chrome 自动化浏览器任务400 使用 Chrome 自动化浏览器任务

Details

116 └── my-tool116 └── my-tool

117 ```117 ```

118 118 

119 <a className="digest-feature-link" href="/docs/zh-CN/plugins-reference#file-locations-reference">插件参考</a>119 <a className="digest-feature-link" href="/docs/zh-CN/plugins/manifest-reference#standard-layout">插件参考</a>

120</div>120</div>

121 121 

122<div className="digest-wins">122<div className="digest-wins">

Details

104 <div>原生 macOS 和 Linux 构建用嵌入式 <code>bfs</code> 和 <code>ugrep</code>(通过 Bash 可用)替换了 <code>Glob</code> 和 <code>Grep</code> 工具,可实现更快的搜索,无需单独的工具往返</div>104 <div>原生 macOS 和 Linux 构建用嵌入式 <code>bfs</code> 和 <code>ugrep</code>(通过 Bash 可用)替换了 <code>Glob</code> 和 <code>Grep</code> 工具,可实现更快的搜索,无需单独的工具往返</div>

105 <div><code>--from-pr</code> 现在除了接受 github.com 外,还接受 GitLab 合并请求、Bitbucket 拉取请求和 GitHub Enterprise PR URL</div>105 <div><code>--from-pr</code> 现在除了接受 github.com 外,还接受 GitLab 合并请求、Bitbucket 拉取请求和 GitHub Enterprise PR URL</div>

106 <div>自动模式:在 <a href="/docs/zh-CN/auto-mode-config"><code>autoMode.allow</code>、<code>soft\_deny</code> 或 <code>environment</code></a> 中包含 <code>"\$defaults"</code>,以在内置列表旁边添加自定义规则,而不是替换它</div>106 <div>自动模式:在 <a href="/docs/zh-CN/auto-mode-config"><code>autoMode.allow</code>、<code>soft\_deny</code> 或 <code>environment</code></a> 中包含 <code>"\$defaults"</code>,以在内置列表旁边添加自定义规则,而不是替换它</div>

107 <div>新的 <a href="/docs/zh-CN/plugin-dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> 命令为具有版本验证的插件创建发布 git 标签</div>107 <div>新的 <a href="/docs/zh-CN/plugins/dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> 命令为具有版本验证的插件创建发布 git 标签</div>

108 <div>Opus 4.7 会话现在针对模型的原生 1M 上下文窗口进行计算,修复了膨胀的 <code>/context</code> 百分比和过早的自动压缩</div>108 <div>Opus 4.7 会话现在针对模型的原生 1M 上下文窗口进行计算,修复了膨胀的 <code>/context</code> 百分比和过早的自动压缩</div>

109 <div><code>/resume</code> 在大型会话上的速度提高了 67%,现在在重新读取之前提供总结陈旧的大型会话的选项</div>109 <div><code>/resume</code> 在大型会话上的速度提高了 67%,现在在重新读取之前提供总结陈旧的大型会话的选项</div>

110 </div>110 </div>

Details

24 claude --plugin-url https://example.com/my-plugin.zip24 claude --plugin-url https://example.com/my-plugin.zip

25 ```25 ```

26 26 

27 <a className="digest-feature-link" href="/docs/zh-CN/plugins">Plugins指南</a>27 <a className="digest-feature-link" href="/docs/zh-CN/plugins/overview">Plugins指南</a>

28</div>28</div>

29 29 

30<div className="digest-feature">30<div className="digest-feature">

Details

59 > /plugin list --enabled59 > /plugin list --enabled

60 ```60 ```

61 61 

62 <a className="digest-feature-link" href="/docs/zh-CN/plugins-reference#plugin-list">插件命令</a>62 <a className="digest-feature-link" href="/docs/zh-CN/plugins/cli-reference#plugin-list">插件命令</a>

63</div>63</div>

64 64 

65<div className="digest-feature">65<div className="digest-feature">

Details

86 <div className="digest-wins-grid">86 <div className="digest-wins-grid">

87 <div>VS Code 扩展获得 <a href="/docs/zh-CN/vs-code#extension-settings">焦点视图</a>,它在每个轮次后面隐藏一个可展开行中的工具活动;从命令菜单或使用 <code>Ctrl+Alt+F</code>(Mac 上为 <code>Ctrl+Option+F</code>)切换它</div>87 <div>VS Code 扩展获得 <a href="/docs/zh-CN/vs-code#extension-settings">焦点视图</a>,它在每个轮次后面隐藏一个可展开行中的工具活动;从命令菜单或使用 <code>Ctrl+Alt+F</code>(Mac 上为 <code>Ctrl+Option+F</code>)切换它</div>

88 <div>沙箱凭证文件在 Linux 和 WSL2 上接受 <a href="/docs/zh-CN/sandboxing#mask-credential-files"><code>mode: "mask"</code></a>,因此沙箱命令读取哨兵副本,而沙箱代理在出口时替换真实值;凭证掩蔽还获得 <code>extract</code>、JWT 感知的 <code>decode</code> 和 AWS SigV4 重新签名选项</div>88 <div>沙箱凭证文件在 Linux 和 WSL2 上接受 <a href="/docs/zh-CN/sandboxing#mask-credential-files"><code>mode: "mask"</code></a>,因此沙箱命令读取哨兵副本,而沙箱代理在出口时替换真实值;凭证掩蔽还获得 <code>extract</code>、JWT 感知的 <code>decode</code> 和 AWS SigV4 重新签名选项</div>

89 <div>市场可以使用新的 <code>archive</code> 源将插件分发为 <a href="/docs/zh-CN/plugin-marketplaces#zip-archives">zip 存档</a>,通过 HTTPS 下载,带有可选的 SHA-256 引脚,因此安装无需 git 或 npm</div>89 <div>市场可以使用新的 <code>archive</code> 源将插件分发为 <a href="/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source">zip 存档</a>,通过 HTTPS 下载,带有可选的 SHA-256 引脚,因此安装无需 git 或 npm</div>

90 <div><code>/review</code> 现在是 <a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 的别名,<code>/code-review</code> 不带努力级别会重用您上次输入的级别</div>90 <div><code>/review</code> 现在是 <a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 的别名,<code>/code-review</code> 不带努力级别会重用您上次输入的级别</div>

91 <div>您使用 <a href="/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork"><code>/fork</code></a> 复制的会话现在在其自己的 worktree 中进行代码更改,而不是原始会话的检出</div>91 <div>您使用 <a href="/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork"><code>/fork</code></a> 复制的会话现在在其自己的 worktree 中进行代码更改,而不是原始会话的检出</div>

92 <div>您从 <a href="/docs/zh-CN/discover-plugins#install-plugins"><code>/plugin</code></a> 安装的插件在当前会话中激活,当这样做是安全的时;安装摘要报告 <code>Plugin is now active.</code> 或告诉您运行 <code>/reload-plugins</code></div>92 <div>您从 <a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin</code></a> 安装的插件在当前会话中激活,当这样做是安全的时;安装摘要报告 <code>Plugin is now active.</code> 或告诉您运行 <code>/reload-plugins</code></div>

93 <div><a href="/docs/zh-CN/agent-view#how-file-edits-are-isolated">后台会话</a> 在 worktree 中更改代码现在在完成前提交和推送,仅当任务需要时才打开草稿拉取请求,并遵循您的 <code>CLAUDE.md</code> 中的 git 指令</div>93 <div><a href="/docs/zh-CN/agent-view#how-file-edits-are-isolated">后台会话</a> 在 worktree 中更改代码现在在完成前提交和推送,仅当任务需要时才打开草稿拉取请求,并遵循您的 <code>CLAUDE.md</code> 中的 git 指令</div>

94 <div>每个会话 200 个子代理的上限被移除,因此长时间运行的会话不再拒绝新的子代理;<a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">并发</a> 和深度限制仍然适用</div>94 <div>每个会话 200 个子代理的上限被移除,因此长时间运行的会话不再拒绝新的子代理;<a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">并发</a> 和深度限制仍然适用</div>

95 <div>存储库的签入设置不再能打开 <a href="/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions">远程控制自动连接</a>;改为在您的用户或托管设置中设置 <code>remoteControlAtStartup</code>,项目和本地设置只能将其关闭</div>95 <div>存储库的签入设置不再能打开 <a href="/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions">远程控制自动连接</a>;改为在您的用户或托管设置中设置 <code>remoteControlAtStartup</code>,项目和本地设置只能将其关闭</div>

Details

72 <div className="digest-wins-grid">72 <div className="digest-wins-grid">

73 <div>在提示中键入 <code>@</code> 以<a href="/docs/zh-CN/cross-session-messaging#message-another-session">提及另一个 Claude 会话</a>的名称,Claude 使用 <code>SendMessage</code> 直接向其发送消息;与恰好一个活跃会话完全匹配的裸名称现在无需确认步骤即可传递</div>73 <div>在提示中键入 <code>@</code> 以<a href="/docs/zh-CN/cross-session-messaging#message-another-session">提及另一个 Claude 会话</a>的名称,Claude 使用 <code>SendMessage</code> 直接向其发送消息;与恰好一个活跃会话完全匹配的裸名称现在无需确认步骤即可传递</div>

74 <div>一台机器上的交互式会话保持<a href="/docs/zh-CN/cross-session-messaging#see-which-sessions-claude-can-reach">唯一名称</a>:如果您启动或重命名会话时使用另一个活跃会话已在使用的名称,Claude Code 会为您的会话提供 <code>name-word-word</code> 变体并告知您</div>74 <div>一台机器上的交互式会话保持<a href="/docs/zh-CN/cross-session-messaging#see-which-sessions-claude-can-reach">唯一名称</a>:如果您启动或重命名会话时使用另一个活跃会话已在使用的名称,Claude Code 会为您的会话提供 <code>name-word-word</code> 变体并告知您</div>

75 <div>插件市场接受<a href="/docs/zh-CN/plugin-marketplaces#command-sources"><code>command</code> 源</a>:本地命令打印插件目录,Claude Code 在每个会话中重新解析并应用,无需重启</div>75 <div>插件市场接受<a href="/docs/zh-CN/plugins/marketplace-reference#command-plugin-source"><code>command</code> 源</a>:本地命令打印插件目录,Claude Code 在每个会话中重新解析并应用,无需重启</div>

76 <div>在 Linux 和 WSL 上,设置<a href="/docs/zh-CN/tools-reference#memory-limit-on-linux-and-wsl"><code>CLAUDE\_CODE\_TOOL\_MEMORY\_LIMIT</code></a> 为大小(如 <code>4G</code>)以限制 Bash 和 PowerShell 工具命令可以使用的内存</div>76 <div>在 Linux 和 WSL 上,设置<a href="/docs/zh-CN/tools-reference#memory-limit-on-linux-and-wsl"><code>CLAUDE\_CODE\_TOOL\_MEMORY\_LIMIT</code></a> 为大小(如 <code>4G</code>)以限制 Bash 和 PowerShell 工具命令可以使用的内存</div>

77 <div>任务跟踪工具,如 <code>TaskCreate</code>、<code>TaskUpdate</code> 和 <code>TodoWrite</code>,<a href="/docs/zh-CN/tools-reference#task-tool-availability">在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及这些系列中的更高版本上不再可用</a>;设置 <code>CLAUDE\_CODE\_ENABLE\_TODO\_TOOLS=1</code> 以重新启用它们</div>77 <div>任务跟踪工具,如 <code>TaskCreate</code>、<code>TaskUpdate</code> 和 <code>TodoWrite</code>,<a href="/docs/zh-CN/tools-reference#task-tool-availability">在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及这些系列中的更高版本上不再可用</a>;设置 <code>CLAUDE\_CODE\_ENABLE\_TODO\_TOOLS=1</code> 以重新启用它们</div>

78 <div><a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 在高、超高和最大努力级别现在像其他级别一样在后台代理中运行</div>78 <div><a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 在高、超高和最大努力级别现在像其他级别一样在后台代理中运行</div>

79 <div><a href="/docs/zh-CN/discover-plugins#install-plugins"><code>/plugin install plugin\@marketplace</code></a> 首先刷新市场,因此新发布的插件无需手动市场更新即可安装</div>79 <div><a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin install plugin\@marketplace</code></a> 首先刷新市场,因此新发布的插件无需手动市场更新即可安装</div>

80 <div>设置接受<a href="/docs/zh-CN/settings-reference#marketplace-key-aliases"><code>additionalMarketplaces</code> 和 <code>allowedMarketplaces</code></a> 作为 <code>extraKnownMarketplaces</code> 和 <code>strictKnownMarketplaces</code> 的别名</div>80 <div>设置接受<a href="/docs/zh-CN/settings-reference#marketplace-key-aliases"><code>additionalMarketplaces</code> 和 <code>allowedMarketplaces</code></a> 作为 <code>extraKnownMarketplaces</code> 和 <code>strictKnownMarketplaces</code> 的别名</div>

81 <div>在较新的模型上,Claude 可以<a href="/docs/zh-CN/tools-reference#write-tool-behavior">使用 Write 工具覆盖现有文件</a>而无需在此会话中首先读取它,与 Edit 工具的规则匹配;较旧的模型需要读取</div>81 <div>在较新的模型上,Claude 可以<a href="/docs/zh-CN/tools-reference#write-tool-behavior">使用 Write 工具覆盖现有文件</a>而无需在此会话中首先读取它,与 Edit 工具的规则匹配;较旧的模型需要读取</div>

82 <div>VS Code 扩展可以<a href="/docs/zh-CN/vs-code#organize-sessions-into-groups">将会话列表组织成组</a>:右键单击以创建、重命名或删除组,使用 Cmd/Ctrl- 或 Shift-单击一次移动多个会话</div>82 <div>VS Code 扩展可以<a href="/docs/zh-CN/vs-code#organize-sessions-into-groups">将会话列表组织成组</a>:右键单击以创建、重命名或删除组,使用 Cmd/Ctrl- 或 Shift-单击一次移动多个会话</div>

Details

54 54 

55 <div className="digest-wins-grid">55 <div className="digest-wins-grid">

56 <div>在顶级或 <code>modelSettings</code> 下按模型设置 <a href="/docs/zh-CN/settings-reference#maxeffortlevel"><code>maxEffortLevel</code></a> 以限制每个提供商(包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry)上的努力级别;任何更高的级别都以上限运行</div>56 <div>在顶级或 <code>modelSettings</code> 下按模型设置 <a href="/docs/zh-CN/settings-reference#maxeffortlevel"><code>maxEffortLevel</code></a> 以限制每个提供商(包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry)上的努力级别;任何更高的级别都以上限运行</div>

57 <div>将 `--plugin-dir` 指向一个插件文件夹,以 <a href="/docs/zh-CN/plugins#test-your-plugins-locally">加载每个具有清单的直接子文件夹</a></div>57 <div>将 `--plugin-dir` 指向一个插件文件夹,以 <a href="/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session">加载每个具有清单的直接子文件夹</a></div>

58 <div>如果 WebFetch 在五分钟内未完成下载页面,<a href="/docs/zh-CN/tools-reference#webfetch-tool-behavior">获取失败并显示截止时间错误</a>,而不是挂起;设置 <code>CLAUDE\_CODE\_WEBFETCH\_DEADLINE\_MS</code> 以更改截止时间,或设置为 <code>0</code> 以移除限制</div>58 <div>如果 WebFetch 在五分钟内未完成下载页面,<a href="/docs/zh-CN/tools-reference#webfetch-tool-behavior">获取失败并显示截止时间错误</a>,而不是挂起;设置 <code>CLAUDE\_CODE\_WEBFETCH\_DEADLINE\_MS</code> 以更改截止时间,或设置为 <code>0</code> 以移除限制</div>

59 <div>将 `--json` 传递给 <code>claude plugin install</code>、<code>uninstall</code>、<code>update</code>、<code>enable</code> 或 <code>disable</code> 以将结果打印为 <a href="/docs/zh-CN/plugins-reference#plugin-json-result">stdout 最后一行的一个 JSON 对象</a></div>59 <div>将 `--json` 传递给 <code>claude plugin install</code>、<code>uninstall</code>、<code>update</code>、<code>enable</code> 或 <code>disable</code> 以将结果打印为 <a href="/docs/zh-CN/plugins/cli-reference#plugin-json-result">stdout 最后一行的一个 JSON 对象</a></div>

60 <div>当自动模式分类器阻止一个操作时,Claude 收到的原因 <a href="/docs/zh-CN/auto-mode-config#fix-a-denial-with-an-allow-rule-an-environment-entry-or-a-retry">通常会命名匹配的规则</a>,例如 <code>\[Data Exfiltration]</code></div>60 <div>当自动模式分类器阻止一个操作时,Claude 收到的原因 <a href="/docs/zh-CN/auto-mode-config#fix-a-denial-with-an-allow-rule-an-environment-entry-or-a-retry">通常会命名匹配的规则</a>,例如 <code>\[Data Exfiltration]</code></div>

61 <div>当您在提示中途键入 <code>/</code> 时,您现在可以从 <a href="/docs/zh-CN/interactive-mode#complete-a-command-mid-prompt">匹配命令的列表</a>中选择,而不是单个建议。该列表在全屏渲染中键入时打开。插件技能也可以按其名称(不带插件前缀)进行匹配</div>61 <div>当您在提示中途键入 <code>/</code> 时,您现在可以从 <a href="/docs/zh-CN/interactive-mode#complete-a-command-mid-prompt">匹配命令的列表</a>中选择,而不是单个建议。该列表在全屏渲染中键入时打开。插件技能也可以按其名称(不带插件前缀)进行匹配</div>

62 <div>在 VS Code 扩展中,单击提示框底部的代理计数以打开 <a href="/docs/zh-CN/vs-code#use-the-prompt-box">代理地图</a>,您可以在其中打开子代理的只读记录或停止它</div>62 <div>在 VS Code 扩展中,单击提示框底部的代理计数以打开 <a href="/docs/zh-CN/vs-code#use-the-prompt-box">代理地图</a>,您可以在其中打开子代理的只读记录或停止它</div>

workflows.md +1 −1

Details

239 在插件中分发工作流239 在插件中分发工作流

240</h3>240</h3>

241 241 

242要在团队或仓库中共享工作流,将其包含在[插件](/docs/zh-CN/plugins)中。将脚本放在插件根目录的 `workflows/` 目录中,或使用 [`workflows` 清单字段](/docs/zh-CN/plugins-reference#component-path-fields)指向不同的位置。242要在团队或仓库中共享工作流,将其包含在[插件](/docs/zh-CN/plugins/overview)中。将脚本放在插件根目录的 `workflows/` 目录中,或使用 [`workflows` 清单字段](/docs/zh-CN/plugins/manifest-reference#fields)指向不同的位置。

243 243 

244插件工作流由插件名称命名空间。一个名为 `acme-tools` 的插件,其 `meta.name` 为 `release-audit` 的脚本作为 `/acme-tools:release-audit` 运行。244插件工作流由插件名称命名空间。一个名为 `acme-tools` 的插件,其 `meta.name` 为 `release-audit` 的脚本作为 `/acme-tools:release-audit` 运行。

245 245 

worktrees.md +3 −1

Details

256Worktree 获得自己的文件和分支,但它与主检出共享以下内容:256Worktree 获得自己的文件和分支,但它与主检出共享以下内容:

257 257 

258* **存储库的 `.git` 目录**:worktree 中的 git 命令写入主存储库的共享 `.git` 目录,[沙箱](/docs/zh-CN/sandboxing#filesystem-isolation)允许这些写入,因此 `git commit` 等命令可以从启用沙箱的 worktree 内部工作。258* **存储库的 `.git` 目录**:worktree 中的 git 命令写入主存储库的共享 `.git` 目录,[沙箱](/docs/zh-CN/sandboxing#filesystem-isolation)允许这些写入,因此 `git commit` 等命令可以从启用沙箱的 worktree 内部工作。

259* **插件**:从主检出在[项目范围](/docs/zh-CN/plugins-reference#plugin-installation-scopes)安装的插件也会在同一存储库的 worktrees 中加载,因此您无需为每个 worktree 重新安装它们。需要 Claude Code v2.1.200 或更高版本。259* **插件**:从主检出在[项目范围](/docs/zh-CN/plugins/loading#find-where-a-plugin-is-enabled)安装的插件也会在同一存储库的 worktrees 中加载,因此您无需为每个 worktree 重新安装它们。需要 Claude Code v2.1.200 或更高版本。

260* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`,因此它适用于主检出和存储库的每个其他 worktree,并在 worktree 的删除后存活。在 Windows 和 Claude Code [不使用存储库根](/docs/zh-CN/settings#where-claude-code-looks-for-each-file)的其他情况下,规则与该 worktree 保持一致。在 v2.1.211 之前,在 worktree 中授予的批准被保存在该 worktree 内,不适用于其他地方,并在 worktree 被删除时丢失。请参阅[批准保存的位置](/docs/zh-CN/permissions#permission-system)。260* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`,因此它适用于主检出和存储库的每个其他 worktree,并在 worktree 的删除后存活。在 Windows 和 Claude Code [不使用存储库根](/docs/zh-CN/settings#where-claude-code-looks-for-each-file)的其他情况下,规则与该 worktree 保持一致。在 v2.1.211 之前,在 worktree 中授予的批准被保存在该 worktree 内,不适用于其他地方,并在 worktree 被删除时丢失。请参阅[批准保存的位置](/docs/zh-CN/permissions#permission-system)。

261* **未跟踪的 skills、agents 和 commands**:当 worktree 检出在其根目录没有 `.claude/skills` 目录时(例如因为您的 `.claude/skills` 被 gitignored),Claude Code 会在 worktree 会话中加载主检出的[项目 skills](/docs/zh-CN/skills#where-skills-live)。在具有自己的 `.claude/skills` 目录的 worktree 中,只加载该副本。261* **未跟踪的 skills、agents 和 commands**:当 worktree 检出在其根目录没有 `.claude/skills` 目录时(例如因为您的 `.claude/skills` 被 gitignored),Claude Code 会在 worktree 会话中加载主检出的[项目 skills](/docs/zh-CN/skills#where-skills-live)。在具有自己的 `.claude/skills` 目录的 worktree 中,只加载该副本。

262 262 


330 330 

331将其与 `WorktreeRemove` hook 配对以在会话结束时进行清理。有关输入架构和删除示例,请参阅 [hooks 参考](/docs/zh-CN/hooks#worktreecreate)。331将其与 `WorktreeRemove` hook 配对以在会话结束时进行清理。有关输入架构和删除示例,请参阅 [hooks 参考](/docs/zh-CN/hooks#worktreecreate)。

332 332 

333`WorktreeCreate` hook 还允许您在 git 存储库外运行 [`/batch`](/docs/zh-CN/commands#all-commands)。每个 `/batch` 子代理随后使用您项目的版本控制命令发布其更改,当它无法打开拉取请求时,报告它发布的内容。在 git 存储库外运行 `/batch` 需要 Claude Code v2.1.281 或更高版本。

334 

333<h2 id="troubleshooting">335<h2 id="troubleshooting">

334 故障排除336 故障排除

335</h2>337</h2>

Details

66| 功能 | 原因 |66| 功能 | 原因 |

67| ------------------------------------------------------------------------------------------------------ | --------------------------------- |67| ------------------------------------------------------------------------------------------------------ | --------------------------------- |

68| [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web),包括从 [Desktop 应用](/docs/zh-CN/desktop#cloud-sessions)启动的应用 | 需要服务器端存储会话数据,包括包含提示和完成的对话历史。 |68| [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web),包括从 [Desktop 应用](/docs/zh-CN/desktop#cloud-sessions)启动的应用 | 需要服务器端存储会话数据,包括包含提示和完成的对话历史。 |

69| [Claude Tag](/docs/zh-CN/claude-tag) | 保留频道内存和会话记录。 |69| [Claude Tag](https://claude.com/docs/claude-tag) | 保留频道内存和会话记录。 |

70| [Artifacts](/docs/zh-CN/artifacts) | 需要在 Anthropic 运营的基础设施上存储已发布的页面内容。 |70| [Artifacts](/docs/zh-CN/artifacts) | 需要在 Anthropic 运营的基础设施上存储已发布的页面内容。 |

71| 反馈提交(`/feedback`、`/bug`、`/share`) | 提交反馈会将对话数据发送给 Anthropic。 |71| 反馈提交(`/feedback`、`/bug`、`/share`) | 提交反馈会将对话数据发送给 Anthropic。 |

72| [Remote Control](/docs/zh-CN/remote-control) | 在 Anthropic 服务器上存储会话记录以跨设备同步对话。 |72| [Remote Control](/docs/zh-CN/remote-control) | 在 Anthropic 服务器上存储会话记录以跨设备同步对话。 |