SpyBara
Go Premium

Documentation 2026-10-01 23:59 UTC to 2026-10-02 20:57 UTC

102 files changed +6,124 −3,639. View all changes and history on the product overview
2026
Fri 2 20:57 Thu 1 23:59

accessibility.md +19 −13

Details

44| [`CLAUDE_AX_SCREEN_READER`](/docs/zh-CN/env-vars#variables) | 环境变量 | 从您设置它的 shell 启动的会话的屏幕阅读器模式。 |44| [`CLAUDE_AX_SCREEN_READER`](/docs/zh-CN/env-vars#variables) | 环境变量 | 从您设置它的 shell 启动的会话的屏幕阅读器模式。 |

45| [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) | 设置 | 当为 `true` 时,每个会话的屏幕阅读器模式。 |45| [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) | 设置 | 当为 `true` 时,每个会话的屏幕阅读器模式。 |

46| [`CLAUDE_AX_STARTUP_QUIET_MS`](/docs/zh-CN/env-vars#variables) | 环境变量 | Claude Code 在确认行之后等待多长时间才能在屏幕阅读器模式下绘制第一个提示。需要 Claude Code v2.1.217 或更高版本。 |46| [`CLAUDE_AX_STARTUP_QUIET_MS`](/docs/zh-CN/env-vars#variables) | 环境变量 | Claude Code 在确认行之后等待多长时间才能在屏幕阅读器模式下绘制第一个提示。需要 Claude Code v2.1.217 或更高版本。 |

47| [`CLAUDE_AX_PREPARK_MS`](/docs/zh-CN/env-vars#variables) | 环境变量 | Claude Code 在屏幕阅读器模式下,光标位于行首时,等待多长时间才能写入新行或更改的行。需要 Claude Code v2.1.233 或更高版本。 |47| [`CLAUDE_AX_PREPARK_MS`](/docs/zh-CN/env-vars#variables) | 环境变量 | 设置后,Claude Code 在屏幕阅读器模式下写入新行或更改的行之前,将终端光标停留在当前行行首的毫秒数。需要 Claude Code v2.1.233 或更高版本。 |

48| [`CLAUDE_CODE_ACCESSIBILITY`](/docs/zh-CN/env-vars#variables) | 环境变量 | 当您将其设置为 `1` 时,终端光标对屏幕放大镜(如 macOS Zoom)保持可见。光标跟随输入插入符号,在 Claude Code v2.1.218 或更高版本上,跟随菜单和面板(如 `/config` 和 `/plugin`)中的突出显示行。 |48| [`CLAUDE_CODE_ACCESSIBILITY`](/docs/zh-CN/env-vars#variables) | 环境变量 | 当您将其设置为 `1` 时,终端光标对屏幕放大镜(如 macOS Zoom)保持可见。光标跟随输入插入符号,在 Claude Code v2.1.218 或更高版本上,跟随菜单和面板(如 `/config` 和 `/plugin`)中的突出显示行。 |

49| [`prefersReducedMotion`](/docs/zh-CN/settings-reference#prefersreducedmotion) | 设置 | 当为 `true` 时,减少或没有旋转器、闪烁和其他动画。 |49| [`prefersReducedMotion`](/docs/zh-CN/settings-reference#prefersreducedmotion) | 设置 | 当为 `true` 时,减少或没有旋转器、闪烁和其他动画。 |

50| [`theme`](/docs/zh-CN/settings-reference#theme) | 设置 | 界面颜色,包括色盲友好的 `dark-daltonized` 和 `light-daltonized` 主题。您也可以使用 [`/theme`](/docs/zh-CN/commands#all-commands) 选择一个。 |50| [`theme`](/docs/zh-CN/settings-reference#theme) | 设置 | 界面颜色,包括色盲友好的 `dark-daltonized` 和 `light-daltonized` 主题。您也可以使用 [`/theme`](/docs/zh-CN/commands#all-commands) 选择一个。 |


60* 没有仅限颜色的提示60* 没有仅限颜色的提示

61* 没有未更改内容的重绘。进度旋转器呈现为静态文本61* 没有未更改内容的重绘。进度旋转器呈现为静态文本

62* Claude 回复中的表格读作 `Header: value` 句子而不是方框字符网格62* Claude 回复中的表格读作 `Header: value` 句子而不是方框字符网格

63* diff 以纯文本形式逐行读出,用 `+` 和 `-` 标记添加和删除的行,因此您可以在回答文件编辑批准提示之前听到建议的更改

63 64 

64Claude Code 将其打印到终端滚动条中的所有内容都保留下来,因此您可以使用屏幕阅读器的审查命令或终端的搜索功能重新阅读之前的回合。Claude Code 在屏幕阅读器模式下忽略 [`tui` 设置](/docs/zh-CN/settings-reference#tui)。除了在[已知限制](#known-limitations)下列出的附加后台会话外,它打印滚动文本而不是[全屏渲染](/docs/zh-CN/fullscreen)。65Claude Code 将其打印到终端滚动缓冲区中的所有内容都保留下来,因此您可以使用屏幕阅读器的审查命令或终端的搜索功能重新阅读之前的轮次。Claude Code 在屏幕阅读器模式下忽略 [`tui` 设置](/docs/zh-CN/settings-reference#tui)。除了在[已知限制](#known-limitations)下列出的附加后台会话外,它打印滚动文本而不是[全屏渲染](/docs/zh-CN/fullscreen)。

65 66 

66Claude Code 还在两个点等待,以便屏幕阅读器能够跟上:67Claude Code 在启动时打印[确认行](#turn-on-screen-reader-mode)后,会在绘制输入框之前等待 3 秒,以便屏幕阅读器可以读完该行。按任意键结束等待。要更改等待的长度,请设置 [`CLAUDE_AX_STARTUP_QUIET_MS`](/docs/zh-CN/env-vars#variables)。

67 68 

68* Claude Code 打印确认行后,在绘制提示之前等待 3 秒,以便屏幕阅读器可以完成该行。按任意键结束等待。要更改等待的长度,请设置 [`CLAUDE_AX_STARTUP_QUIET_MS`](/docs/zh-CN/env-vars#variables)。69会话记录中的每条消息都以屏幕阅读器宣布的标签开头,命名其内容:您的消息、Claude 的回复和思考、工具活动、错误和警告以及提示。这些标签也是可搜索的,因此您可以通过搜索终端的滚动缓冲区在会话记录的各个部分之间跳转:

69* 在 Claude Code 写入新行或更改的行(例如提示或更多 Claude 的回复)之前,它将光标移到行的开始处并等待 50 毫秒。然后屏幕阅读器从其第一个字符读取该行。您在输入行末尾键入或删除的字符立即出现。要更改等待的长度,请设置 [`CLAUDE_AX_PREPARK_MS`](/docs/zh-CN/env-vars#variables)。

70 

71成绩单中的每条消息都以屏幕阅读器宣布的标签开头,命名其内容:您的消息、Claude 的回复和思考、工具活动、错误和警告以及提示。这些标签也是可搜索的,因此您可以通过搜索终端的滚动条在成绩单的各个部分之间跳转:

72 70 

73| 标签 | 含义 |71| 标签 | 含义 |

74| :- | :- |72| :- | :- |


82| `Permission Required:` | 等待您的答案的权限提示 |80| `Permission Required:` | 等待您的答案的权限提示 |

83| `Cost:` | Claude Code 退出时的会话成本摘要,如果您的帐户[显示成本](/docs/zh-CN/costs) |81| `Cost:` | Claude Code 退出时的会话成本摘要,如果您的帐户[显示成本](/docs/zh-CN/costs) |

84 82 

85Claude Code 将终端光标保持在输入插入符上,因此屏幕阅读器的读取当前行命令读取您正在编辑的提示。83Claude Code 将终端光标保持在输入插入符上,因此屏幕阅读器的读取当前行命令读取您正在编辑的输入内容。

86 84 

87当您在输入行末尾键入时,或在那里按 `Backspace`,Claude Code 仅写入更改的字符。您的屏幕阅读器仅回显这些字符。85当您在输入行末尾键入时,或在那里按 `Backspace`,Claude Code 仅写入更改的字符。您的屏幕阅读器仅回显这些字符。

88 86 


92* 使用 `Ctrl+U` 或 `Cmd+Backspace` 删除到行的开始90* 使用 `Ctrl+U` 或 `Cmd+Backspace` 删除到行的开始

93* 使用 `Ctrl+K` 删除到行的末尾91* 使用 `Ctrl+K` 删除到行的末尾

94 92 

95当您使用 `Shift+Tab` 循环[权限模式](/docs/zh-CN/permission-modes)时,Claude Code 宣布您登陆的权限模式,例如 `[plan mode on]` 或 `[accept edits on]`。Claude Code 打印公告一次,不会在以后的重绘中重复。93当您使用 `Shift+Tab` 循环[权限模式](/docs/zh-CN/permission-modes)时,Claude Code 宣布您切换到的权限模式,例如 `[plan mode on]` 或 `[accept edits on]`。Claude Code 打印公告一次,不会在以后的重绘中重复。

94 

95<h3 id="read-earlier-output-without-losing-your-place">

96 阅读之前的输出而不丢失位置

97</h3>

98 

99如果您在阅读之前的输出时屏幕阅读器跳回到输入框,说明它正在跟随终端光标。Claude Code 每次写入新文本时都会将终端光标移回输入框。

100 

101要在阅读时保持位置,请让屏幕阅读器停止跟随终端光标。在 NVDA 中,按 `NVDA+6` 可让浏览光标停止跟随终端光标。再次按 `NVDA+6` 可重新开启跟随。

96 102 

97<h3 id="jump-between-turns">103<h3 id="jump-between-turns">

98 在回合之间跳转104 在轮次之间跳转

99</h3>105</h3>

100 106 

101Claude Code 在回合边界处发出 OSC 133 shell-integration 标记,因此您的终端的跳转到上一个提示键在回合之间移动,而无需阅读整个成绩单:107Claude Code 在轮次边界处发出 OSC 133 shell-integration 标记,因此您的终端的跳转到上一个提示符键可在轮次之间移动,而无需阅读整个会话记录:

102 108 

103* iTerm2:Cmd+Shift+Up109* iTerm2:Cmd+Shift+Up

104* VS Code 终端:Windows 上的 Ctrl+Up,macOS 上的 Cmd+Up110* VS Code 终端:Windows 上的 Ctrl+Up,macOS 上的 Cmd+Up

105* Windows Terminal:默认情况下没有键;在其设置中绑定 `scrollToMark` 操作111* Windows Terminal:默认情况下没有键;在其设置中绑定 `scrollToMark` 操作

106* Kitty 和 Ghostty:检查终端的文档以获取其跳转到提示键112* Kitty 和 Ghostty:查看终端的文档以获取其跳转到提示符键

107 113 

108macOS Terminal 不对标记进行操作,Claude Code 在 WezTerm 中不发出它们。在这些终端中,搜索滚动条中的 `you:` 标签。114macOS Terminal 不对标记进行操作,Claude Code 在 WezTerm 中不发出它们。在这些终端中,请改为在滚动缓冲区中搜索 `you:` 标签。

109 115 

110<h2 id="answer-menus-and-prompts">116<h2 id="answer-menus-and-prompts">

111 回答菜单和提示117 回答菜单和提示

admin-setup.md +23 −2

Details

118如果您的成员通过 claude.ai 或 Anthropic API 登录,并且您在 Claude Enterprise 计划上,您还可以从组织的管理设置中管理模型,而无需部署任何内容:118如果您的成员通过 claude.ai 或 Anthropic API 登录,并且您在 Claude Enterprise 计划上,您还可以从组织的管理设置中管理模型,而无需部署任何内容:

119 119 

120* [Organization model restrictions](/docs/zh-CN/model-config#organization-model-restrictions):禁用单个模型。在服务器端强制执行。120* [Organization model restrictions](/docs/zh-CN/model-config#organization-model-restrictions):禁用单个模型。在服务器端强制执行。

121* [Organization default model](/docs/zh-CN/model-config#organization-default-model):设置新会话启动时使用的模型。用户可以更改它,除非您的组织强制执行默认值,这仅适用于有限的组织集合;请咨询您的 Anthropic 账户团队。121* [Organization default model](/docs/zh-CN/model-config#organization-default-model):设置新会话启动时使用的模型。成员仍可切换模型。要在启动时将其恢复为您的默认模型,请启用该部分所述的覆盖设置。要限制成员可选择的模型,请使用[组织模型限制](/docs/zh-CN/model-config#organization-model-restrictions)。

122* [Organization effort limits](/docs/zh-CN/model-config#organization-effort-limits):按角色限制工作量级别。在服务器端强制执行。122* [Organization effort limits](/docs/zh-CN/model-config#organization-effort-limits):按角色限制工作量级别。在服务器端强制执行。

123 123 

124这些控制都不会到达 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 上的会话。在这些提供商上,使用托管设置代替:`availableModels` 用于限制,`model` 用于默认值,[`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel) 用于工作量限制。124这些控制都不会到达 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 上的会话。在这些提供商上,使用托管设置代替:`availableModels` 用于限制,`model` 用于默认值,[`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel) 用于工作量限制。

125 125 

126[Cloud sessions](/docs/zh-CN/claude-code-on-the-web) 有其自己的管理表面:在管理设置中的 Cloud environments 页面上,所有者创建[组织共享环境](/docs/zh-CN/cloud-environments#organization-shared-environments),设置成员云会话的[网络访问级别](/docs/zh-CN/cloud-environments#network-access)、环境变量和设置脚本。所有者在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 单独选择组织的默认环境。126[Cloud sessions](/docs/zh-CN/claude-code-on-the-web) 在 claude.ai 上有其自己的管理入口:

127 

128* **Cloud environments 页面**:所有者创建[组织共享环境](/docs/zh-CN/cloud-environments#organization-shared-environments),设置成员云端会话的[网络访问级别](/docs/zh-CN/cloud-environments#network-access)、环境变量和设置脚本。

129* **默认环境**:所有者在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 单独选择组织的默认环境。

130* **GitHub 页面**:请参阅[已关联的 GitHub 账户](#connected-github-accounts),了解关联到您组织的 GitHub 账户。

127 131 

128权限规则和沙箱覆盖不同的层。拒绝 WebFetch 会阻止 Claude 的 fetch 工具,但如果允许 Bash,`curl` 和 `wget` 仍然可以到达任何 URL。沙箱通过在操作系统级别强制执行的网络域允许列表来弥补这一差距。132权限规则和沙箱覆盖不同的层。拒绝 WebFetch 会阻止 Claude 的 fetch 工具,但如果允许 Bash,`curl` 和 `wget` 仍然可以到达任何 URL。沙箱通过在操作系统级别强制执行的网络域允许列表来弥补这一差距。

129 133 

130有关这些控制防御的威胁模型,请参阅[安全性](/docs/zh-CN/security)。134有关这些控制防御的威胁模型,请参阅[安全性](/docs/zh-CN/security)。

131 135 

136<h3 id="connected-github-accounts">

137 已关联的 GitHub 账户

138</h3>

139 

140在 Team 和 Enterprise 计划中,[**Admin settings > GitHub**](https://claude.ai/admin-settings/github) 列出了通过 [Claude GitHub App](https://github.com/apps/claude) 关联到您的 Claude 组织的 GitHub 组织和个人账户。Claude Code、[Claude Tag](https://claude.com/docs/claude-tag/admins/configure-github) 和 Claude Security 共享此列表。打开该页面需要在您的 Claude 组织中拥有管理员角色。

141 

142管理员或成员都可以关联账户:

143 

144* **管理员连接**:管理员在该页面上点击 **Connect**,并在某个 GitHub 组织上安装 Claude GitHub App。以这种方式关联组织,需要一个既是该 GitHub 组织所有者、又是您 Claude 组织管理员的人来操作。

145* **成员连接**:当成员将其 GitHub 账户连接到 Claude 时(例如在[设置云端会话](/docs/zh-CN/web-quickstart#connect-github)时),Claude 会关联该成员拥有且已安装 Claude GitHub App 的 GitHub 账户。这可能包括其个人账户以及其拥有的 GitHub 组织。

146 

147标记为 **Not linked** 的行来自您自己的 GitHub 登录。它是您在 GitHub 上可以看到且已安装 Claude GitHub App 的账户。

148 

149要将某个账户与您的 Claude 组织取消关联,请打开该行的菜单并选择 **Unlink from this workspace**。取消关联后,Claude GitHub App 仍安装在 GitHub 上,下次该账户的某个所有者将 GitHub 连接到 Claude 时,该账户会再次被关联。要防止其再次被关联,请在 GitHub 上从该账户卸载 Claude GitHub App。

150 

151在 Enterprise 计划中,用于关联和取消关联的 [Compliance API](https://platform.claude.com/docs/en/api/compliance/activities/list) 活动类型分别为 `github_app_installation_linked` 和 `github_app_installation_unlinked`。

152 

132<h2 id="set-up-usage-visibility">153<h2 id="set-up-usage-visibility">

133 设置使用情况可见性154 设置使用情况可见性

134</h2>155</h2>

advisor.md +22 −18

Details

50 50 

51该命令会确认 `Advisor set to` 后跟顾问模型名称。您的选择被保存到用户设置中的 `advisorModel`,并在会话之间持久化,除了 [`advisorModel` 条目](/docs/zh-CN/settings-reference#advisormodel)列出的仅适用于当前会话的情况。51该命令会确认 `Advisor set to` 后跟顾问模型名称。您的选择被保存到用户设置中的 `advisorModel`,并在会话之间持久化,除了 [`advisorModel` 条目](/docs/zh-CN/settings-reference#advisormodel)列出的仅适用于当前会话的情况。

52 52 

53该命令也适用于没有终端选择器的地方:在[非交互模式](/docs/zh-CN/headless)中使用 `-p`、在 Agent SDK 中、在桌面应用中以及通过[远程控制](/docs/zh-CN/remote-control)。这需要 Claude Code v2.1.260 或更高版本。在这些界面上:53该命令也适用于没有终端选择器的地方:在[非交互模式](/docs/zh-CN/headless)中使用 `-p`、在 Agent SDK 中、在桌面应用中以及通过 [Remote Control](/docs/zh-CN/remote-control)。这需要 Claude Code v2.1.260 或更高版本。在这些使用入口上:

54 54 

55* 运行不带参数的 `/advisor` 以打印当前顾问模型及其接受的别名。55* 运行不带参数的 `/advisor` 以打印当前顾问模型及其接受的别名。

56* 运行带有模型的 `/advisor`,例如 `/advisor opus`,以设置它。56* 运行带有模型的 `/advisor`,例如 `/advisor opus`,以设置它。

57* 运行 `/advisor off` 以关闭它。57* 运行 `/advisor off` 以关闭它。

58 58 

59Claude Code 不会调用您的组织的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表排除的已保存顾问。要使用顾问,请使用 `/advisor` 选择允许的模型。Claude Code 仍然会保存您当前主模型不支持的顾问。该顾问在您使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换到[兼容的主模型](#choose-an-advisor-model)后激活。如果 API 已在当前对话中拒绝了已保存的顾问,它将保持关闭状态,直到 `/clear` 或 `/compact`,即使在您切换模型之后。59Claude Code 不会调用您的组织的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表排除的已保存顾问。要使用顾问,请使用 `/advisor` 选择允许的模型。

60 

61Claude Code 仍然会保存您当前主模型不支持的顾问。该顾问在您使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换到[兼容的主模型](#choose-an-advisor-model)后激活。如果 API 已在当前对话中拒绝了已保存的顾问,它将保持关闭状态,直到 `/clear` 或 `/compact`,即使在您切换模型之后。

60 62 

61在某些计划中,使用 Fable 作为顾问还需要您一次性[同意将 Fable 使用费用计入使用额度](/docs/zh-CN/model-config#fable-and-usage-credits)。有关您给予该同意之前 `/advisor fable` 会做什么,请参阅 [Fable 顾问和使用额度](#fable-advisor-and-usage-credits)。63在某些计划中,使用 Fable 作为顾问还需要您一次性[同意将 Fable 使用费用计入使用额度](/docs/zh-CN/model-config#fable-and-usage-credits)。有关您给予该同意之前 `/advisor fable` 会做什么,请参阅 [Fable 顾问和使用额度](#fable-advisor-and-usage-credits)。

62 64 


91 93 

92如果您使用 `--advisor` 启动[后台会话](/docs/zh-CN/agent-view),并且上述任何情况成立,Claude Code 会在没有顾问的情况下启动会话,而不是退出。94如果您使用 `--advisor` 启动[后台会话](/docs/zh-CN/agent-view),并且上述任何情况成立,Claude Code 会在没有顾问的情况下启动会话,而不是退出。

93 95 

96如果请求的模型可以充当顾问,但[排名低于](#choose-an-advisor-model)会话的主模型,Claude Code 仍会启动会话。在后台会话之外,它还会在启动时警告该模型 `cannot advise` 主模型。

97 

94<h2 id="choose-an-advisor-model">98<h2 id="choose-an-advisor-model">

95 选择顾问模型99 选择顾问模型

96</h2>100</h2>

97 101 

98Claude Code 和 API 都需要一个顾问,其能力至少与主模型相同,这两者对某些模型的排名不同。每个主模型接受的顾问是:102Claude Code 按照担任顾问角色的能力对模型进行排名,顾问的排名必须等于或高于会话的主模型。各行按主模型从排名最低到最高排列:

99 103 

100| 主模型 | 接受的顾问 | 注释 |104| 主模型 | 接受的顾问 |

101| - | - | - |105| - | - |

102| Haiku 4.5 | Fable、Opus、Sonnet | Haiku 可以调用顾问但不能充当顾问 |106| Haiku 4.5 | Fable、Opus、Sonnet |

103| Sonnet 4.6 | Fable、Opus、Sonnet | |107| Sonnet 4.6 | Fable、Opus、Sonnet |

104| Sonnet 5 | Fable、Opus 4.7 或更高版本、Sonnet 5 或更高版本 | Sonnet 4.6 顾问被拒绝,API 拒绝 Opus 4.6 顾问 |108| Opus 4.6 | Fable、Opus、Sonnet 5 或更高版本 |

105| Sonnet 5.5 | Fable、Opus 5 或更高版本、Sonnet 5.5 | Sonnet 4.6 顾问被拒绝,API 拒绝 Sonnet 5、Opus 4.6、Opus 4.7 或 Opus 4.8 顾问 |109| Sonnet 5 | Fable、Opus 4.7 或更高版本、Sonnet 5 或更高版本 |

106| Opus 4.6 | Fable、Opus、Sonnet 5 或更高版本 | Sonnet 4.6 顾问被拒绝 |110| Opus 4.7 或 Opus 4.8 | Fable、Opus 4.7 或更高版本、Sonnet 5.5 |

107| Opus 4.7 或 Opus 4.8 | Fable 和 Opus 4.7 或更高版本 | Opus 4.6 或 Sonnet 顾问被拒绝 |111| Sonnet 5.5 | Fable、Opus 5 或更高版本、Sonnet 5.5 |

108| Opus 5.5 或 Opus 5 | Fable 和 Opus 5 或更高版本 | Opus 4.6 或 Sonnet 顾问被拒绝,API 拒绝 Opus 4.7 或 Opus 4.8 顾问 |112| Opus 5 或 Opus 5.5 | Fable、Opus 5 或更高版本 |

109| Fable 5 | Fable 5.1 或 Fable 5 | Opus 或 Sonnet 顾问被拒绝 |113| Fable 5 | Fable 5.1 或 Fable 5 |

110| Fable 5.1 | Fable 5.1 | Opus 或 Sonnet 顾问被拒绝,API 拒绝 Fable 5 顾问 |114| Fable 5.1 | Fable 5.1 |

111 115 

112Fable 5.1 需要 Claude Code v2.1.257 或更高版本。两个 Fable 模型都需要 [Fable 访问权限](/docs/zh-CN/model-config#work-with-fable)。116Fable 5.1 需要 Claude Code v2.1.257 或更高版本。Fable 模型需要 [Fable 访问权限](/docs/zh-CN/model-config#work-with-fable)。将 Sonnet 5.5 作为 Opus 4.7 或 Opus 4.8 主模型的顾问需要 Claude Code v2.1.287 或更高版本。

113 117 

114将顾问设置为 `fable`、`opus` 或 `sonnet`。这些别名解析为 Claude Code 为每个模型系列内置的默认版本,该版本随新的 Claude Code 版本而推进。您也可以传递完整的模型 ID,例如 `claude-opus-5-5`。118将顾问设置为 `fable`、`opus` 或 `sonnet`。这些别名解析为 Claude Code 为每个模型系列[内置的默认版本](/docs/zh-CN/model-config#model-aliases),该版本随新的 Claude Code 版本而推进。您也可以传递完整的模型 ID,例如 `claude-opus-5-5`。Haiku 可以调用顾问,但不能充当顾问。

115 119 

116子代理继承配置的顾问,并对其自己的模型应用相同的配对检查。120子代理继承配置的顾问,并对其自己的模型应用相同的配对检查。

117 121 

118Claude Code 在发送请求之前验证配对,API 也会再次验证:122Claude Code 在发送请求之前验证配对,API 也会再次验证:

119 123 

120* 对于表中列为被拒绝的顾问,Claude Code 不会将其附加到主模型的请求中。`/advisor` 命令输出和通知会显示这一点。其自己的模型满足配对的子代理仍然可以使用顾问。124* 对于排名低于主模型的顾问,Claude Code 不会将其附加到主模型的请求中。`/advisor` 命令输出和通知会显示这一点;请参阅[顾问的能力低于当前主模型](/docs/zh-CN/errors#advisor-is-less-capable-than-the-current-main-model)。其自己的模型满足配对的子代理仍然可以使用顾问。

121* 对于表中列为 API 拒绝的顾问,Claude Code 会附加它,API 会拒绝它。Claude Code 随后会在没有顾问的情况下重新发送该请求,对话的其余部分会在没有顾问的情况下运行,因此您看不到错误,也不会获得顾问调用。使用 `/advisor` 选择接受的顾问;更改在 `/clear` 或 `/compact` 之后以及新会话中生效。125* 如果 API 拒绝了 Claude Code 所附加顾问的配对,Claude Code 会在没有顾问的情况下重新发送该请求。对话会在没有顾问的情况下继续,因此您看不到错误,也不会获得顾问调用。如果您随后使用 `/advisor` 选择其他顾问,更改将在 `/clear` 或 `/compact` 之后以及新会话中生效。

122* 如果主模型或顾问是 Claude Code 无法识别的模型,顾问不会附加。126* 如果主模型或顾问是 Claude Code 无法识别的模型,顾问不会附加。

123 127 

124<h3 id="fable-advisor-and-usage-credits">128<h3 id="fable-advisor-and-usage-credits">

Details

325 325 

326对于长时间运行的代理的几个策略:326对于长时间运行的代理的几个策略:

327 327 

328* **为子任务使用子代理。** 每个子代理以新鲜对话开始(没有先前的消息历史,尽管它确实加载自己的系统提示和项目级上下文,如 CLAUDE.md)。它看不到父级的轮次,只有其最终响应作为工具结果返回给父级。主代理的上下文增长该摘要,而不是完整的子任务成绩单。有关详情,请参阅[子代理继承什么](/docs/zh-CN/agent-sdk/subagents#what-subagents-inherit)。328* **为子任务使用子代理。** 每个子代理以全新的对话开始(没有先前的消息历史,但它确实会加载自己的系统提示词和项目级上下文,如 CLAUDE.md)。它看不到父级的轮次,只有其最终回复会返回给父级。主 Agent 的上下文只会增加该摘要,而不是完整的子任务会话记录。有关详情,请参阅[子代理继承什么](/docs/zh-CN/agent-sdk/subagents#what-subagents-inherit)。

329* **对工具有选择性。** 每个工具定义占用上下文空间。在 [`AgentDefinition`](/docs/zh-CN/agent-sdk/subagents#agentdefinition-configuration) 上使用 `tools` 字段将子代理限制在它们需要的最小集合。329* **对工具有选择性。** 每个工具定义占用上下文空间。在 [`AgentDefinition`](/docs/zh-CN/agent-sdk/subagents#agentdefinition-configuration) 上使用 `tools` 字段将子代理限制在它们需要的最小集合。

330* **监视 MCP 服务器成本。** [MCP 工具搜索](/docs/zh-CN/agent-sdk/mcp#mcp-tool-search)默认延迟 MCP 工具架构,并按需加载它们。当工具搜索关闭或已回退到预先加载时,每个 MCP 服务器将其所有工具架构添加到每个请求,因此具有许多工具的几个服务器可以在代理执行任何工作之前消耗大量上下文。有关应用回退的配置,请参阅[配置工具搜索](/docs/zh-CN/agent-sdk/tool-search#configure-tool-search)。330* **监视 MCP 服务器成本。** [MCP 工具搜索](/docs/zh-CN/agent-sdk/mcp#mcp-tool-search)默认延迟 MCP 工具架构,并按需加载它们。当工具搜索关闭或已回退到预先加载时,每个 MCP 服务器将其所有工具架构添加到每个请求,因此具有许多工具的几个服务器可以在代理执行任何工作之前消耗大量上下文。有关应用回退的配置,请参阅[配置工具搜索](/docs/zh-CN/agent-sdk/tool-search#configure-tool-search)。

331* **对常规任务使用较低的努力。** 为仅需要读取文件或列出目录的代理设置[努力](#effort-level)为 `"low"`。这减少了令牌使用和成本。331* **对常规任务使用较低的努力。** 为仅需要读取文件或列出目录的代理设置[努力](#effort-level)为 `"low"`。这减少了令牌使用和成本。

Details

261 261 

262* **顶级字段**在每个事件上被接受:`systemMessage` 向用户显示消息,`continue`(Python 中的 `continue_`)确定代理在此 hook 后是否继续运行。某些事件会丢弃它们或将它们传递到其他地方。每个[事件的部分](/docs/zh-CN/hooks#hook-events)在 hooks 页面上说明它们的去向。262* **顶级字段**在每个事件上被接受:`systemMessage` 向用户显示消息,`continue`(Python 中的 `continue_`)确定代理在此 hook 后是否继续运行。某些事件会丢弃它们或将它们传递到其他地方。每个[事件的部分](/docs/zh-CN/hooks#hook-events)在 hooks 页面上说明它们的去向。

263* **`hookSpecificOutput`** 控制当前操作。内部的字段取决于 hook 事件类型:263* **`hookSpecificOutput`** 控制当前操作。内部的字段取决于 hook 事件类型:

264 * 对于 `PreToolUse` hooks,这是您设置 `permissionDecision`(`"allow"`、`"deny"`、`"ask"` 或 `"defer"`)、`permissionDecisionReason` 和 `updatedInput` 的地方。如果您返回 `"defer"`,查询结束,以便您可以[稍后恢复它](/docs/zh-CN/hooks#defer-a-tool-call-for-later)。264 * 对于 `PreToolUse` hook,这是您设置 `permissionDecision`(`"allow"`、`"deny"`、`"ask"` 或 `"defer"`)、`permissionDecisionReason` 和 `updatedInput` 的地方。如果您返回 `"defer"`,该轮次将以一条 `stop_reason` 为 `"tool_deferred"` 的结果消息结束,以便您可以[稍后恢复该调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)。

265 * 对于 `PostToolUse` hooks,您可以设置 `additionalContext` 以将信息附加到工具结果。要在 Claude 看到之前替换工具的输出,请设置 `updatedToolOutput`,这适用于两个 SDK 中的任何工具。较旧的 `updatedMCPToolOutput` 字段仅替换 MCP 工具输出,已弃用。265 * 对于 `PostToolUse` hook,您可以设置 `additionalContext` 以将信息附加到工具结果。要在 Claude 看到之前替换工具的输出,请设置 `updatedToolOutput`,这适用于两个 SDK 中的任何工具。较旧的 `updatedMCPToolOutput` 字段仅替换 MCP 工具输出,已弃用。

266 * 在 TypeScript SDK 中,`PostToolUse` 回调也可以返回 `classifierContext`,这是关于工具调用结果的简短说明,用于[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)权限分类器。因为您的回调在您的应用程序自己的进程中运行,分类器可能会将您在说明中转达的用户声明视为用户意图。该字段需要 TypeScript Agent SDK v0.3.236 或更高版本。[为自动模式分类器注释结果](/docs/zh-CN/hooks#annotate-a-result-for-the-auto-mode-classifier)涵盖了长度上限、仅同步规则以及不要在说明中放入的内容。266 * 在 TypeScript SDK 中,`PostToolUse` 回调也可以返回 `classifierContext`,这是关于工具调用结果的简短说明,用于[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)权限分类器。因为您的回调在您的应用程序自己的进程中运行,分类器可能会将您在说明中转达的用户声明视为用户意图。该字段需要 TypeScript Agent SDK v0.3.236 或更高版本。[为自动模式分类器注释结果](/docs/zh-CN/hooks#annotate-a-result-for-the-auto-mode-classifier)涵盖了长度上限、仅同步规则以及不要在说明中放入的内容。

267 267 

268返回 `{}` 以允许操作而不进行更改。SDK 回调 hooks 使用与 [Claude Code shell 命令 hooks](/docs/zh-CN/hooks#json-output) 相同的 JSON 输出格式,其中记录了每个字段和事件特定的选项。对于 SDK 类型定义,请参阅 [TypeScript](/docs/zh-CN/agent-sdk/typescript#synchookjsonoutput) 和 [Python](/docs/zh-CN/agent-sdk/python#synchookjsonoutput) SDK 参考。268返回 `{}` 以允许操作而不进行更改。SDK 回调 hooks 使用与 [Claude Code shell 命令 hooks](/docs/zh-CN/hooks#json-output) 相同的 JSON 输出格式,其中记录了每个字段和事件特定的选项。对于 SDK 类型定义,请参阅 [TypeScript](/docs/zh-CN/agent-sdk/typescript#synchookjsonoutput) 和 [Python](/docs/zh-CN/agent-sdk/python#synchookjsonoutput) SDK 参考。

Details

1488与 `ClaudeAgentOptions` 中的 `betas` 字段一起使用以启用测试功能。1488与 `ClaudeAgentOptions` 中的 `betas` 字段一起使用以启用测试功能。

1489 1489 

1490<Warning>1490<Warning>

1491 `context-1m-2025-08-07` 测试版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此标头无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 [Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8](https://platform.claude.com/docs/en/about-claude/models/overview),它们以标准定价包括 1M 上下文,无需测试版标头。1491 在 Claude API 上,`context-1m-2025-08-07` 测试版已针对 Claude Sonnet 4.5 和 Claude Sonnet 4 停用。如果您在使用其中任一模型时仍传递它,超过标准 200K token 上下文窗口的请求会返回错误,因此请将其从 `betas` 中移除。要运行具有 1M token 上下文窗口的会话,请将 `model` 设置为[默认以 1M 窗口运行](/docs/zh-CN/model-config#extended-context)的模型,例如 `claude-sonnet-5-5` 或 `claude-opus-5-5`。对于仅通过其 `[1m]` 变体才能达到 1M 的模型,请在模型 ID 后追加该后缀,例如 `claude-opus-4-6[1m]`。

1492</Warning>1492</Warning>

1493 1493 

1494<h3 id="mcpsdkserverconfig">1494<h3 id="mcpsdkserverconfig">

Details

92 Sandbox 运行时92 Sandbox 运行时

93</h3>93</h3>

94 94 

95对于无需容器的轻量级隔离,[sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) 在操作系统级别强制执行文件系统和网络限制。95对于无需容器的轻量级隔离,[sandbox-runtime](https://github.com/anthropics/sandbox-runtime) 在操作系统级别强制执行文件系统和网络限制。

96 96 

97主要优势是简单性:不需要 Docker 配置、容器镜像或网络设置。代理和文件系统限制是内置的。97主要优势是简单性:不需要 Docker 配置、容器镜像或网络设置。代理和文件系统限制是内置的。

98 98 


164 164 

165使用 `--network none`,容器根本没有网络接口。代理到达外部世界的唯一方式是通过挂载的 Unix 套接字,该套接字连接到在主机上运行的代理。此代理可以强制执行域允许列表、注入凭证并记录所有流量。165使用 `--network none`,容器根本没有网络接口。代理到达外部世界的唯一方式是通过挂载的 Unix 套接字,该套接字连接到在主机上运行的代理。此代理可以强制执行域允许列表、注入凭证并记录所有流量。

166 166 

167这与 [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) 使用的架构相同。即使代理通过提示注入被破坏,它也无法将数据泄露到任意服务器。它只能通过代理进行通信,代理控制哪些域可以访问。有关更多详情,请参阅 [Claude Code 沙箱博客文章](https://www.anthropic.com/engineering/claude-code-sandboxing)。167这与 [sandbox-runtime](https://github.com/anthropics/sandbox-runtime) 使用的架构相同。即使 Agent 通过提示词注入被破坏,它也无法将数据泄露到任意服务器。它只能通过代理进行通信,代理控制哪些域可以访问。有关更多详情,请参阅 [Claude Code 沙箱隔离博客文章](https://www.anthropic.com/engineering/claude-code-sandboxing)。

168 168 

169**额外加固选项:**169**额外加固选项:**

170 170 


385* [Claude Code 安全文档](/docs/zh-CN/security)385* [Claude Code 安全文档](/docs/zh-CN/security)

386* [托管 Agent SDK](/docs/zh-CN/agent-sdk/hosting)386* [托管 Agent SDK](/docs/zh-CN/agent-sdk/hosting)

387* [处理权限](/docs/zh-CN/agent-sdk/permissions)387* [处理权限](/docs/zh-CN/agent-sdk/permissions)

388* [Sandbox 运行时](https://github.com/anthropic-experimental/sandbox-runtime)388* [沙箱运行时](https://github.com/anthropics/sandbox-runtime)

389* [AI 代理的致命三角](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/)389* [AI 代理的致命三角](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/)

390* [OWASP 大型语言模型应用程序前 10 名](https://owasp.org/www-project-top-10-for-large-language-model-applications/)390* [OWASP 大型语言模型应用程序前 10 名](https://owasp.org/www-project-top-10-for-large-language-model-applications/)

391* [Docker 安全最佳实践](https://docs.docker.com/engine/security/)391* [Docker 安全最佳实践](https://docs.docker.com/engine/security/)

Details

378</h2>378</h2>

379 379 

380<Note>380<Note>

381 对于项目和个人 skills,Claude Code 在 SDK 会话中应用 [`allowed-tools`](/docs/zh-CN/skills#pre-approve-tools-for-a-skill) frontmatter 字段。你也可以通过查询配置中的 `allowedTools` 选项(Python 中的 `allowed_tools`)为这些 skills 预先批准工具。从 claude.ai [同步的 skills](/docs/zh-CN/skills#how-claude-code-handles-the-frontmatter-of-a-synced-skill) 遵循它们自己的 frontmatter 规则。381 在 SDK 会话中,您可以通过 skill 的 [`allowed-tools`](/docs/zh-CN/skills#pre-approve-tools-for-a-skill) frontmatter,或通过查询配置中的 `allowedTools` 选项(Python 中的 `allowed_tools`),为项目或个人 skill 预先批准工具。如果您的组织在托管设置中设置了 [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly),Claude Code 会忽略这两者。[从 claude.ai 同步的](/docs/zh-CN/skills#how-claude-code-handles-the-frontmatter-of-a-synced-skill) skill 遵循其自身的 frontmatter 规则。

382</Note>382</Note>

383 383 

384Skills 使用会话的工具运行。下面的示例使用 `allowedTools`(Python 中的 `allowed_tools`)预先批准 `Read`、`Grep` 和 `Glob`,因此 Claude 可以在运行 [security-check skill](#create-and-dispatch-your-first-skill) 时检查文件,而无需停止以获得批准:384Skills 使用会话的工具运行。下面的示例使用 `allowedTools`(Python 中的 `allowed_tools`)预先批准 `Read`、`Grep` 和 `Glob`,因此 Claude 可以在运行 [security-check skill](#create-and-dispatch-your-first-skill) 时检查文件,而无需停止以获得批准:

Details

166 166 

167当您运行该示例时,TypeScript 版本会在每个响应完成时打印它。Python 版本的 `receive_response()` 循环在第一条结果消息处结束,因此它会打印安全分析;要读取两个响应,请使用一对 `query()` 和 `receive_response()`,如 [Python 参考中继续对话的示例](/docs/zh-CN/agent-sdk/python#example-continuing-a-conversation)所示。167当您运行该示例时,TypeScript 版本会在每个响应完成时打印它。Python 版本的 `receive_response()` 循环在第一条结果消息处结束,因此它会打印安全分析;要读取两个响应,请使用一对 `query()` 和 `receive_response()`,如 [Python 参考中继续对话的示例](/docs/zh-CN/agent-sdk/python#example-continuing-a-conversation)所示。

168 168 

169如果图像块的 `source` 缺失或不是对象,SDK 不会报告错误。Claude Code 会向 Claude 发送一条文本说明来代替该图像,例如 `[Image could not be processed: image block has no source object]`,并且会话会继续进行。

170 

169<Note>171<Note>

170 在 TypeScript SDK 中,如果您的消息生成器抛出异常,例如当它读取的文件丢失时,流会以一条错误消息结束,内容为 `Claude Code process aborted by user`,而不是原始错误,因此当您看到该消息时,请先检查生成器内部的代码。该错误前面可能还有一长行捆绑 SDK 源代码的缩小代码,因此请阅读输出末尾的错误文本。172 在 TypeScript SDK 中,如果您的消息生成器抛出异常,例如当它读取的文件丢失时,流会以一条错误消息结束,内容为 `Claude Code process aborted by user`,而不是原始错误,因此当您看到该消息时,请先检查生成器内部的代码。该错误前面可能还有一长行捆绑 SDK 源代码的缩小代码,因此请阅读输出末尾的错误文本。

171 173 

Details

204| 工具定义(从父代理继承或 `tools` 中的子集,[为后台运行过滤](/docs/zh-CN/sub-agents#available-tools)) | 父代理的系统提示 |204| 工具定义(从父代理继承或 `tools` 中的子集,[为后台运行过滤](/docs/zh-CN/sub-agents#available-tools)) | 父代理的系统提示 |

205 205 

206<Note>206<Note>

207 父代理接收子代理的最终消息作为 Agent 工具结果,但可能在其自己的响应中对其进行总结。要在面向用户的响应中逐字保留子代理输出,请在传递给主 `query()` 调用的提示或 `systemPrompt` 选项中包含执行此操作的指令。207 父 Agent 接收子代理的最终报告,但可能在其自己的回复中对其进行总结。要在面向用户的回复中逐字保留子代理输出,请在传递给主 `query()` 调用的提示词或 `systemPrompt` 选项中包含执行此操作的指令。

208 208 

209 在 v2.1.210 及更高版本中,Claude Code [在父代理读取最终消息之前扫描它以查找指令形状的模式](/docs/zh-CN/sub-agents#subagent-output-scanning)。扫描以三种不同的方式处理三种模式:209 在 v2.1.210 及更高版本中,Claude Code [在父代理读取最终消息之前扫描它以查找指令形状的模式](/docs/zh-CN/sub-agents#subagent-output-scanning)。扫描以三种不同的方式处理三种模式:

210 210 

Details

716| `reloadOutputStyles()` | 从磁盘重新读取[输出样式](/docs/zh-CN/output-styles),以便您在中期会话添加或编辑的样式文件对运行的会话可用。使用 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) 解决,列出重新加载后可用的样式名称。需要 Agent SDK v0.3.261 或更高版本 |716| `reloadOutputStyles()` | 从磁盘重新读取[输出样式](/docs/zh-CN/output-styles),以便您在中期会话添加或编辑的样式文件对运行的会话可用。使用 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) 解决,列出重新加载后可用的样式名称。需要 Agent SDK v0.3.261 或更高版本 |

717| `accountInfo()` | 返回账户信息 |717| `accountInfo()` | 返回账户信息 |

718| `reconnectMcpServer(serverName)` | 按名称重新连接 MCP 服务器。如果名称也匹配设置文件中的条目如 `.mcp.json` 或 `~/.claude.json`,Claude Code 重新连接您通过 [`mcpServers`](#options) 或 `setMcpServers()` 配置的服务器,而不是设置文件条目。该解析顺序需要 Claude Code v2.1.257 或更高版本 |718| `reconnectMcpServer(serverName)` | 按名称重新连接 MCP 服务器。如果名称也匹配设置文件中的条目如 `.mcp.json` 或 `~/.claude.json`,Claude Code 重新连接您通过 [`mcpServers`](#options) 或 `setMcpServers()` 配置的服务器,而不是设置文件条目。该解析顺序需要 Claude Code v2.1.257 或更高版本 |

719| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器,使用与 `reconnectMcpServer()` 相同的名称解析。禁用 stdio、SSE 或 HTTP 服务器会断开连接并移除其工具;对于您使用 `setMcpServers()` 在中期会话添加的服务器,工具移除需要 Claude Code v2.1.285 或更高版本 |719| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器,名称解析方式与 `reconnectMcpServer()` 相同。禁用服务器会断开其连接并移除其工具。有关每种服务器所需的 Claude Code 版本,请参阅 [`toggleMcpServer()`](#togglemcpserver) |

720| `setMcpServers(servers)` | 动态替换此会话的 MCP 服务器集。使用 [`McpSetServersResult`](#mcpsetserversresult) 解决,命名添加和移除的服务器以及任何错误 |720| `setMcpServers(servers)` | 动态替换此会话的 MCP 服务器集。使用 [`McpSetServersResult`](#mcpsetserversresult) 解决,命名添加和移除的服务器以及任何错误 |

721| `readMcpResource(serverName, uri)` | *Alpha.* 从连接的 MCP 服务器读取一个 MCP Apps `ui://` 资源,以便您的应用可以呈现工具的小部件。使用 [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse) 解决。需要 TypeScript Agent SDK v0.3.280 或更高版本 |721| `readMcpResource(serverName, uri)` | *Alpha.* 从连接的 MCP 服务器读取一个 MCP Apps `ui://` 资源,以便您的应用可以呈现工具的小部件。使用 [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse) 解决。需要 TypeScript Agent SDK v0.3.280 或更高版本 |

722| `streamInput(stream)` | 将输入消息流式传输到查询以进行多轮对话 |722| `streamInput(stream)` | 将输入消息流式传输到查询以进行多轮对话 |


780 780 

781当请求携带任何其他键、会话在远程传输上运行以及会话的 [`settingSources`](#options) 排除您命名的源时,调用拒绝。不支持删除键。781当请求携带任何其他键、会话在远程传输上运行以及会话的 [`settingSources`](#options) 排除您命名的源时,调用拒绝。不支持删除键。

782 782 

783<h4 id="togglemcpserver">

784 `toggleMcpServer()`

785</h4>

786 

787禁用服务器会断开其连接,并从会话中移除其工具。对于您在会话中途添加的服务器和进程内服务器,这取决于您的 Claude Code 版本:

788 

789* 您在会话中途通过 `setMcpServers()` 添加的 stdio、SSE 或 HTTP 服务器:移除其工具需要 Claude Code v2.1.285 或更高版本。

790* 您通过 [`createSdkMcpServer()`](#createsdkmcpserver) 创建的进程内服务器,无论您是在 `mcpServers` 中还是通过 `setMcpServers()` 传入:断开其连接并移除其工具需要 Claude Code v2.1.286 或更高版本。禁用此类服务器还会使其仍在运行的工具调用失败,因此 Claude 会立即收到每个调用的错误结果,而无需等待您的处理程序返回。

791 

783<h3 id="warmquery">792<h3 id="warmquery">

784 `WarmQuery`793 `WarmQuery`

785</h3>794</h3>


1554* `'model_not_found'`:选定的模型不存在或对您的账户或部署不可用1563* `'model_not_found'`:选定的模型不存在或对您的账户或部署不可用

1555* `'overloaded'`:API 返回 529,因为服务器处于容量限制,与 `'rate_limit'` 不同,后者是针对您配额的 4291564* `'overloaded'`:API 返回 529,因为服务器处于容量限制,与 `'rate_limit'` 不同,后者是针对您配额的 429

1556* `'account_on_hold'`:[您的账户被冻结](/docs/zh-CN/errors#your-account-is-on-hold)1565* `'account_on_hold'`:[您的账户被冻结](/docs/zh-CN/errors#your-account-is-on-hold)

1557* `'cloud_credential_error'`:Claude Code 无法在其运行的机器上获取可用的 AWS 或 Google Cloud 凭证,因此没有请求到达云提供商。通常原因是云登录已过期或从未在该机器上完成,但暂时无法访问的凭证服务会报告相同的值。请参阅[无法加载 AWS 或 Google Cloud 凭证](/docs/zh-CN/errors#could-not-load-aws-or-google-cloud-credentials)。需要 TypeScript Agent SDK v0.3.267 或更高版本,其中包含 Claude Code v2.1.2671566* `'cloud_credential_error'`:Claude Code 无法在其运行的机器上获取可用的 AWS 或 Google Cloud 凭据,因此没有请求到达云提供商。通常原因是云登录已过期或从未在该机器上完成,但暂时无法访问的凭据服务会报告相同的值。请参阅[无法加载 AWS 或 Google Cloud 凭据](/docs/zh-CN/errors#could-not-load-aws-or-google-cloud-credentials)。需要 TypeScript Agent SDK v0.3.267 或更高版本,其中包含 Claude Code v2.1.267

1558 1567 

1559当中断或中止在流完成前截断助手消息时,`aborted` 为 `true`:消息没有 `stop_reason`,内容可能在单词中间结束。该字段在正常完成的消息上不存在。它需要 Agent SDK v0.3.214 或更高版本。1568当中断或中止在流完成前截断助手消息时,`aborted` 为 `true`:消息没有 `stop_reason`,内容可能在单词中间结束。该字段在正常完成的消息上不存在。它需要 Agent SDK v0.3.214 或更高版本。

1560 1569 


1562 1571 

1563`timestamp` 是消息内容在生成它的进程上完成生成的 ISO 8601 时间。该值来自该机器的时钟,因此仅用于显示,不要按它排序消息。一个 API 轮可以产生多条共享 `message.id` 的助手消息,每条都有自己的 `timestamp`。当字段不存在时,回退到您收到消息的时间。1572`timestamp` 是消息内容在生成它的进程上完成生成的 ISO 8601 时间。该值来自该机器的时钟,因此仅用于显示,不要按它排序消息。一个 API 轮可以产生多条共享 `message.id` 的助手消息,每条都有自己的 `timestamp`。当字段不存在时,回退到您收到消息的时间。

1564 1573 

1565`context_usage` 是 `/context` 报告的结构化副本,类型为 [`SDKContextUsage`](#sdkcontextusage),需要 Agent SDK v0.3.232 或更高版本。当您发送 `/context` 作为提示时,Claude Code 将报告作为助手消息传递,其 `message.content` 包含 markdown 表格,并将 `context_usage` 附加到同一消息。Claude Code 不在任何其他助手消息上设置该字段,早期版本在没有它的情况下传递 `/context` 表格,因此当字段存在时从字段读取分解,当不存在时回退到 markdown 文本。1574`context_usage` 是 `/context` 报告的结构化副本,类型为 [`SDKContextUsage`](#sdkcontextusage),需要 Agent SDK v0.3.232 或更高版本。当您发送 `/context` 作为提示词时,Claude Code 将报告作为助手消息传递,其 `message.content` 包含 markdown 表格,并将 `context_usage` 附加到同一消息。Claude Code 不在任何其他助手消息上设置该字段,早期版本在没有它的情况下传递 `/context` 表格,因此当字段存在时从字段读取分解,当不存在时回退到 markdown 文本。

1566 1575 

1567<h3 id="sdkusermessage">1576<h3 id="sdkusermessage">

1568 `SDKUserMessage`1577 `SDKUserMessage`


1582 shouldQuery?: boolean;1591 shouldQuery?: boolean;

1583 client_composed?: true;1592 client_composed?: true;

1584 tool_use_result?: unknown;1593 tool_use_result?: unknown;

1594 priority?: "now" | "next" | "later";

1585 origin?: SDKMessageOrigin;1595 origin?: SDKMessageOrigin;

1586 inline_pastes?: string[];1596 inline_pastes?: string[];

1587};1597};

1588```1598```

1589 1599 

1590设置 `pasted_content` 以发送用户粘贴到您的提示 UI 中而不是输入的内容,每个粘贴一个条目,每个条目是字符串或内容块数组。Claude Code 按顺序在输入的文本后追加每个条目的文本,并可能将每个粘贴包装在 `<pasted_content>` 标签中。除文本外的块被忽略,因此在 `message.content` 中发送图像和文档。需要 Agent SDK v0.3.277 或更高版本。1600设置 `pasted_content` 以发送用户粘贴到您的提示词 UI 中而不是输入的内容,每个粘贴一个条目,每个条目是字符串或内容块数组。Claude Code 按顺序在输入的文本后追加每个条目的文本,并可能将每个粘贴包装在 `<pasted_content>` 标签中。除文本外的块被忽略,因此在 `message.content` 中发送图像和文档。需要 Agent SDK v0.3.277 或更高版本。

1601 

1602设置 `inline_pastes` 可告知 Claude Code `message.content` 中哪些部分是用户粘贴的而非键入的,每次粘贴对应一个字符串。提示词文本保留在用户放置的位置。Claude Code 可能会在原位用 `<pasted_content>` 标签包裹每个列出的粘贴内容,以便 Claude 区分粘贴的材料和用户自己的话。只有提示词最后一个文本块中的粘贴内容会被包裹。需要 TypeScript Agent SDK v0.3.280 或更高版本。

1591 1603 

1592设置 `shouldQuery` 或 `client_composed` 以改变 Claude Code 处理您发送的消息的方式:1604设置 `shouldQuery`、`client_composed` 或 `priority` 可以改变 Claude Code 处理您所发送消息的方式:

1593 1605 

1594* `shouldQuery`:设置为 `false` 以将消息附加到记录中而不触发助手轮。消息被保留并合并到下一条触发轮的用户消息中。使用此方法注入上下文,例如您在带外运行的命令的输出,而无需在模型调用上花费。1606* `shouldQuery`:设置为 `false` 以将消息附加到会话记录中而不触发助手轮。消息被保留并合并到下一条触发轮的用户消息中。使用此方法注入上下文,例如您在带外运行的命令的输出,而无需在模型调用上花费。

1595* `client_composed`:设置为 `true` 以让 Claude Code 按原样传递消息文本。Claude Code 然后不展开 `@path` 或 [`@server:resource`](/docs/zh-CN/mcp#use-mcp-resources) 提及,也不运行以 `/` 开头的文本作为命令。当 [`verbatimPrompts`](#options) 选项打开时,SDK 在每条消息上设置该字段。需要 TypeScript Agent SDK v0.3.280 或更高版本和 Claude Code v2.1.248 或更高版本。1607* `client_composed`:设置为 `true` 以让 Claude Code 按原样传递消息文本。Claude Code 然后不展开 `@path` 或 [`@server:resource`](/docs/zh-CN/mcp#use-mcp-resources) 提及,也不运行以 `/` 开头的文本作为命令。当 [`verbatimPrompts`](#options) 选项打开时,SDK 在每条消息上设置该字段。需要 TypeScript Agent SDK v0.3.280 或更高版本和 Claude Code v2.1.248 或更高版本。

1608* `priority`:控制您在轮次运行期间发送的消息何时到达 Claude:

1609 * `'next'` 或未设置 `priority` 字段:Claude 会在同一轮次中读取该消息,时机是其正在运行的工具调用一完成之时。如果轮次先结束,该消息将开启下一轮次。

1610 * `'later'`:Claude Code 会暂存该消息直到轮次结束,然后将其作为新轮次发送。

1611 * 带有 [`origin: { kind: "human" }`](#sdkmessageorigin) 的 `'now'`:在 Claude Code v2.1.286 或更高版本上,可以在后台继续的工作会被移到后台,Claude 在同一轮次中读取该消息。可移动的工作包括 shell 命令、子代理和 MCP 工具调用。在 v2.1.287 或更高版本上,还包括 WebFetch 和 WebSearch 调用。当 Claude 只是在撰写回复,或其正在运行的工作无法移动时,Claude Code 会改为中断该轮次,Claude 接下来读取该消息。

1612 * 不带该 origin 的 `'now'`:Claude Code 中断该轮次,Claude 接下来读取该消息。

1596 1613 

1597在携带 `tool_result` 块的消息上,`tool_use_result` 是工具的结构化输出对象,而不是发送给模型的文本。其形状取决于匹配 `tool_use` 块命名的工具,因此该字段的类型为 `unknown`;内置形状列在[工具输出类型](#tool-output-types)下。1614以下消息在轮次运行期间发送,要求 Claude 改变方向,同时不丢失仍在运行的 shell 命令:

1598 1615 

1599对于 `Agent` 工具,`tool_use_result` 是 [`AgentOutput`](#agent-2)。在 `completed` 结果上,`content` 包含子代理的报告,不包含 Claude Code 附加到 `tool_result` 文本的代理 ID 和使用情况尾部,因此从 `tool_use_result` 渲染而不是解析该文本。1616```typescript theme={null}

1617const message: SDKUserMessage = {

1618 type: "user",

1619 message: { role: "user", content: "Skip the integration tests and summarize what you have so far" },

1620 parent_tool_use_id: null,

1621 priority: "now",

1622 origin: { kind: "human" },

1623};

1624```

1600 1625 

1601对于结果包含 `resource_link` 块的 MCP 工具,`tool_use_result` 是一个对象,其中包含 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 条目的 `resourceLinks` 数组。Claude 将每个链作为 `tool_result` 块中的一行文本接收,因此读取 `resourceLinks` 以渲染服务器返回的文件,而不是解析该文本。Claude Code 在结果没有链时省略 `resourceLinks`,在来自子代理的结果上省略,每个结果最多保留 50 个链,并在数组达到 64 KiB 序列化 JSON 后停止添加链。`resourceLinks` 需要 Agent SDK v0.3.257 或更高版本。1626在携带 `tool_result` 块的消息上,`tool_use_result` 是工具的结构化输出对象,而不是发送给模型的文本。其结构取决于对应 `tool_use` 块所指定的工具,因此该字段的类型为 `unknown`;内置结构列在[工具输出类型](#tool-output-types)下。以下结果需要超出其所列结构的额外处理:

1602 1627 

1603设置 `inline_pastes` 以告诉 Claude Code `message.content` 的哪些部分用户粘贴而不是输入,每个粘贴一个字符串。提示文本保留在用户放置的位置。Claude Code 可能会在其所在位置将每个列出的粘贴包装在 `<pasted_content>` 标签中,以便 Claude 可以区分粘贴的材料和用户自己的话。只有提示最后一个文本块中的粘贴被包装。需要 TypeScript Agent SDK v0.3.280 或更高版本。1628* `Agent` 工具:`tool_use_result` 为 [`AgentOutput`](#agent-2)。请据此进行渲染,而不是解析 `tool_result` 文本。`completed` 结果的 `content` 包含子代理的报告;对于通过 `SubagentHandback` 工具调用提交报告的子代理,则包含一条关于该交接的简短说明来代替报告。在 Claude Code v2.1.271 或更高版本的[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,每个产生 `completed` 结果的子代理都以这种方式报告([fork](/docs/zh-CN/sub-agents#fork-the-current-conversation) 除外),Claude 会以来自子代理的单独消息接收报告。

1629* Claude Code 为交付 `'now'` 消息而移到后台的 WebFetch 或 WebSearch 调用:携带该调用 `tool_result` 的用户消息的 `tool_use_result` 被设为 `{ detachedToolCall: true }`。该调用仍在运行,Claude 会在其完成后收到结果。该 `tool_use_id` 之后不会再有第二个 `tool_result`,因此如果您的应用为每个工具调用绘制一行,请在收到此消息时将该行标记为已移到后台。需要 Claude Code v2.1.287 或更高版本。

1630* 结果包含 `resource_link` 块的 MCP 工具:`tool_use_result` 是一个对象,其 `resourceLinks` 数组由 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 条目组成。Claude 会在 `tool_result` 块中以一行文本的形式接收每个链接,因此请读取 `resourceLinks` 来渲染服务器返回的文件,而不是解析该文本。当结果中没有链接时以及对于来自子代理的结果,Claude Code 会省略 `resourceLinks`;每个结果最多保留 50 个链接,并在数组序列化后的 JSON 达到 64 KiB 时停止添加链接。`resourceLinks` 需要 Agent SDK v0.3.257 或更高版本。

1631* 返回 [`structuredContent`](#calltoolresult) 的 MCP 工具:`tool_use_result` 是一个对象,其 `structuredContent` 成员包含服务器发送的内容,`content` 成员包含 [`McpOutput`](#mcpoutput) 值。来自子代理的结果不携带 `structuredContent`。

1632* `structuredContent` 序列化后超过 1,048,576 个字符 JSON 的 MCP 工具:Claude Code 会从 `tool_use_result` 中去掉 `structuredContent`,并在其位置设置 `structuredContentOmitted: true`,以便您的应用区分被丢弃的对象与根本未发送该对象的工具。其他成员(例如 `content` 和 `resourceLinks`)保留,Claude 接收到的内容也不会改变。来自[进程内 SDK 服务器](/docs/zh-CN/agent-sdk/custom-tools)的工具,以及其 `tools/list` 条目声明了 [MCP Apps `_meta.ui` 资源](#mcpserverstatus)的工具不受此限制,会完整交付该对象。Claude Code v2.1.287 或更高版本应用此上限。

1604 1633 

1605<h3 id="sdkusermessagereplay">1634<h3 id="sdkusermessagereplay">

1606 `SDKUserMessageReplay`1635 `SDKUserMessageReplay`


1623};1652};

1624```1653```

1625 1654 

1626从会话外部注入的用户轮,其 [`origin`](#sdkmessageorigin) 类型为 `peer` 或 `channel`,无论是在活跃轮期间传递还是在会话空闲时启动新轮,都作为重放到达流。在 v2.1.207 之前,在会话空闲时传递的注入轮在流上不产生消息,仅在您重新读取记录时出现。1655从会话外部注入的用户轮,其 [`origin`](#sdkmessageorigin) 类型为 `peer` 或 `channel`,无论是在活跃轮期间传递还是在会话空闲时启动新轮,都作为重放到达流。在 v2.1.207 之前,在会话空闲时传递的注入轮在流上不产生消息,仅在您重新读取会话记录时出现。

1627 1656 

1628<h3 id="sdkresultmessage">1657<h3 id="sdkresultmessage">

1629 `SDKResultMessage`1658 `SDKResultMessage`


1655 first_content_frame_ms?: number;1684 first_content_frame_ms?: number;

1656 first_stream_post_ms?: number;1685 first_stream_post_ms?: number;

1657 first_stream_post_ack_ms?: number;1686 first_stream_post_ack_ms?: number;

1687 first_stream_post_queue_wait_ms?: number;

1688 first_stream_post_queued_behind?: "durable_post" | "ephemeral_post" | "retry_backoff" | "hold" | "none";

1658 first_stream_post_wall_ms?: number;1689 first_stream_post_wall_ms?: number;

1690 first_text_post_ms?: number;

1691 first_text_post_queue_wait_ms?: number;

1692 first_text_post_queued_behind?: "durable_post" | "ephemeral_post" | "retry_backoff" | "hold" | "none";

1693 first_text_post_wall_ms?: number;

1659 total_cost_usd: number;1694 total_cost_usd: number;

1660 usage: NonNullableUsage;1695 usage: NonNullableUsage;

1661 modelUsage: { [modelName: string]: ModelUsage };1696 modelUsage: { [modelName: string]: ModelUsage };


1704结果上的多个字段除了 `subtype` 之外还提供诊断详情:1739结果上的多个字段除了 `subtype` 之外还提供诊断详情:

1705 1740 

1706* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮在没有 API 错误的情况下结束时不存在或为 `null`。1741* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮在没有 API 错误的情况下结束时不存在或为 `null`。

1707* `ttft_ms`:首个令牌的时间(毫秒),在第一条完整助手消息到达时测量。仅在成功分支上存在。1742* `ttft_ms`:首个 token 的时间(毫秒),在第一条完整助手消息到达时测量。仅在成功分支上存在。

1708* `ttft_stream_ms`:直到第一个 `message_start` 流事件(响应流打开时)的时间(毫秒)。低于 `ttft_ms`;两者之间的差距是流传输第一条消息所花费的时间。仅在成功分支上存在。1743* `ttft_stream_ms`:直到第一个 `message_start` 流事件(响应流打开时)的时间(毫秒)。低于 `ttft_ms`;两者之间的差距是流式传输第一条消息所花费的时间。仅在成功分支上存在。

1709* `user_message_uuid`:您发送的消息的 `uuid`,该轮回答了该消息。请参阅 [`user_message_uuid`](#user_message_uuid) 了解哪些结果携带它。1744* `user_message_uuid`:您发送的消息的 `uuid`,该轮回答了该消息。请参阅 [`user_message_uuid`](#user_message_uuid) 了解哪些结果携带它。

1710* `user_message_uuids`:您发送的每条消息的 `uuid`,Claude Code 在该轮中回答了这些消息。请参阅 [`user_message_uuids`](#user_message_uuids)。1745* `user_message_uuids`:您发送的每条消息的 `uuid`,Claude Code 在该轮中回答了这些消息。请参阅 [`user_message_uuids`](#user_message_uuids)。

1711* `resume_reason`:Claude Code 重新运行该轮的原因,在重启中断后。请参阅 [`resume_reason`](#resume_reason)。1746* `resume_reason`:在重启中断该轮后,Claude Code 重新运行该轮的原因。在两个分支上都存在,且仅在此类重新运行上存在。请参阅 [`resume_reason`](#resume_reason)。

1712* `local_command`:轮分派的命令的名称,在轮由命令完成而不进入代理循环的成功结果上,例如 `/compact`。名称折叠为小写字母和下划线,因此 `/reload-plugins` 报告 `reload_plugins`。MCP 服务器提供的命令和内置 `/mcp` 报告 `mcp`。您自己定义的命令报告 `custom`。参数从不包含。在进入代理循环的每个轮上不存在,在运行无命令的发送上不存在。需要 Agent SDK v0.3.268 或更高版本。1747* `local_command`:轮分派的命令的名称,在轮由命令完成而不进入 Agent 循环的成功结果上,例如 `/compact`。名称折叠为小写字母和下划线,因此 `/reload-plugins` 报告 `reload_plugins`。MCP 服务器提供的命令和内置 `/mcp` 报告 `mcp`。您自己定义的命令报告 `custom`。参数从不包含。在进入 Agent 循环的每个轮上不存在,在运行无命令的发送上不存在。需要 Agent SDK v0.3.268 或更高版本。

1713* `request_sent_wall_ms`:Claude Code 分派 API 请求的纪元毫秒,用于与服务器端时间戳的连接。仅与 [`user_message_uuid`](#user_message_uuid) 一起存在,在成功结果上,其中 `is_error` 为 false,且轮发送了 API 请求。1748* `request_sent_wall_ms`:Claude Code 分派 API 请求的纪元毫秒,用于与服务器端时间戳的连接。仅与 [`user_message_uuid`](#user_message_uuid) 一起存在,在成功结果上,其中 `is_error` 为 false,且轮发送了 API 请求。

1714* `first_content_frame_ms`:直到第一个 `content_block_start` 或 `content_block_delta` 流事件的时间(毫秒),计算思考块作为内容。仅在成功分支上存在,当 `is_error` 为 false 时。需要 Agent SDK v0.3.260 或更高版本。1749* `first_content_frame_ms`:直到第一个 `content_block_start` 或 `content_block_delta` 流事件的时间(毫秒),计算思考块作为内容。仅在成功分支上存在,当 `is_error` 为 false 时。需要 Agent SDK v0.3.260 或更高版本。

1715* `first_stream_post_ms`、`first_stream_post_ack_ms`、`first_stream_post_wall_ms`:上传轮的第一个流事件的时间。Claude Code 仅在它流传输到 claude.ai 的会话中记录它们,例如[云会话](/docs/zh-CN/claude-code-on-the-web),`query()` 产生的结果不携带它们。需要 Agent SDK v0.3.260 或更高版本。1750* `first_stream_post_ms`、`first_stream_post_ack_ms`、`first_stream_post_wall_ms`:上传轮的第一个流事件的时间。Claude Code 仅在它流式传输到 claude.ai 的会话中记录它们,例如[云端会话](/docs/zh-CN/claude-code-on-the-web),`query()` 产生的结果不携带它们。需要 Agent SDK v0.3.260 或更高版本。

1716* `usage`:仅主代理循环。排除子代理和辅助模型调用,在流式输入会话中按轮计算。对于令牌/成本会计,优先使用 `modelUsage`。1751* `usage`:仅主 Agent 循环。排除子代理和辅助模型调用,在流式输入会话中按轮计算。对于 token/成本核算,优先使用 `modelUsage`。

1717* `modelUsage`:在此 `query()` 调用期间通过查询管道进行的每个模型调用的每模型总计,包括主循环、子代理和内部调用(如压缩和 Workflow 代理)。该管道外的辅助调用(如权限分类器和令牌计数请求)被排除。恢复会话的调用也计算[从会话早期调用恢复的每模型总计](/docs/zh-CN/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)。在流式输入会话中,总计在轮中是累积的,因此读取最新结果而不是跨结果求和。请参阅[在流式输入模式中跟踪成本](/docs/zh-CN/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode)了解重置,以及[在会话崩溃后恢复总计](/docs/zh-CN/agent-sdk/cost-tracking#recover-totals-after-a-session-crash)了解零化结果。1752* `modelUsage`:在此 `query()` 调用期间通过查询管道进行的每个模型调用的每模型总计,包括主循环、子代理和内部调用(如压缩和 Workflow Agent)。该管道外的辅助调用(如权限分类器和 token 计数请求)被排除。恢复会话的调用也计算[从会话早期调用恢复的每模型总计](/docs/zh-CN/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)。在流式输入会话中,总计在轮中是累积的,因此读取最新结果而不是跨结果求和。请参阅[在流式输入模式中跟踪成本](/docs/zh-CN/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode)了解重置,以及[在会话崩溃后恢复总计](/docs/zh-CN/agent-sdk/cost-tracking#recover-totals-after-a-session-crash)了解零化结果。

1718* `total_cost_usd`:累积估计成本(美元),涵盖与 `modelUsage` 相同的调用并在相同点重置。恢复会话的调用也计算[从会话早期调用恢复的总计](/docs/zh-CN/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)。这是一个估计值,不是账单声明。请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)了解准确性注意事项。1753* `total_cost_usd`:累积估计成本(美元),涵盖与 `modelUsage` 相同的调用并在相同点重置。恢复会话的调用也计算[从会话早期调用恢复的总计](/docs/zh-CN/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)。这是一个估计值,不是账单声明。请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)了解准确性注意事项。

1719* `queued_turn_count`:您发送的带有 `origin: { kind: "human" }` 的消息数,在 Claude Code 产生结果时仍在等待。请参阅 [`queued_turn_count`](#queued_turn_count) 了解 `0` 和缺失字段告诉您什么。1754* `queued_turn_count`:您发送的带有 `origin: { kind: "human" }` 的消息数,在 Claude Code 产生结果时仍在等待。请参阅 [`queued_turn_count`](#queued_turn_count) 了解 `0` 和缺失字段告诉您什么。

1720* `result_index`:此结果在运行的传递顺序中的位置,从 0 开始计算,跨越进程写入的每个结果。在两个分支上存在。写入失败的结果仍然消耗其编号,因此序列中的间隙意味着结果丢失。需要 Agent SDK v0.3.268 或更高版本。1755* `result_index`:此结果在运行的传递顺序中的位置,从 0 开始计算,跨越进程写入的每个结果。在两个分支上存在。写入失败的结果仍然消耗其编号,因此序列中的间隙意味着结果丢失。需要 Agent SDK v0.3.268 或更高版本。


1740 1775 

1741相同的字段对出现在 [`SDKSystemMessage`](#sdksystemmessage) 和 [`SDKControlInitializeResponse`](#sdkcontrolinitializeresponse) 上,因此您可以在第一轮之前读取快速模式状态。1776相同的字段对出现在 [`SDKSystemMessage`](#sdksystemmessage) 和 [`SDKControlInitializeResponse`](#sdkcontrolinitializeresponse) 上,因此您可以在第一轮之前读取快速模式状态。

1742 1777 

1743`origin` 字段转发触发此结果的用户消息的 [`SDKMessageOrigin`](#sdkmessageorigin)。当 SDK 注入合成后续轮(例如对于完成的后台任务)时,生成的 `SDKResultMessage` 携带 `origin: { kind: "task-notification" }`。触发器触发和服务器验证的来自您其他会话的消息到达时也带有此类型,每个都带有[任务通知子类型](#task-notification-subkinds)中描述的 `subkind`。检查 `kind` 以区分回答您提示的结果和注入的后续,然后在路由或抑制它们之前进行区分。如果您的应用程序[声明计划运行](#declare-a-scheduled-run),它们的结果也携带 `kind: "task-notification"`,因此不要仅在 `kind` 上抑制。1778`origin` 字段转发触发此结果的用户消息的 [`SDKMessageOrigin`](#sdkmessageorigin)。当 SDK 注入合成后续轮(例如对于完成的后台任务)时,生成的 `SDKResultMessage` 携带 `origin: { kind: "task-notification" }`。触发器已触发的 Routine,以及经服务器验证、来自您其他会话的消息,到达时也带有此类型,每个都带有[任务通知子类型](#task-notification-subkinds)中描述的 `subkind`。在路由或抑制结果之前,检查 `kind` 以区分回答您提示词的结果和注入的后续轮。如果您的应用程序[声明定时运行](#declare-a-scheduled-run),它们的结果也携带 `kind: "task-notification"`,因此不要仅凭 `kind` 进行抑制。

1744 1779 

1745当多个后台任务完成一起排队时,Claude Code 可以在一轮中回答它们,而不是每个一轮。每个完成仍然产生自己的结果与此来源。Claude Code 一起回答的完成中除最后一个外的所有完成产生空结果,其中 `num_turns: 0`,按顺序,最后一个的结果携带回答它们全部的轮。1780当多个后台任务完成一起排队时,Claude Code 可以在一轮中回答它们,而不是每个一轮。每个完成仍然产生自己的结果与此来源。Claude Code 一起回答的完成中除最后一个外的所有完成产生空结果,其中 `num_turns: 0`,按顺序,最后一个的结果携带回答它们全部的轮。

1746 1781 

1747该字段在任何用户轮之前发出的结果上不存在,例如启动错误。1782该字段在任何用户轮之前发出的结果上不存在,例如启动错误。

1748 1783 

1749当 `PreToolUse` 钩子返回 `permissionDecision: "defer"` 时,结果具有 `stop_reason: "tool_deferred"` 和 `deferred_tool_use` 携带待处理工具的 `id`、`name` 和 `input`。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 `session_id` 恢复以继续。请参阅[延迟工具调用以供稍后使用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)了解完整往返。1784当 `PreToolUse` hook 返回 `permissionDecision: "defer"` 时,结果具有 `stop_reason: "tool_deferred"` 和 `deferred_tool_use` 携带待处理工具的 `id`、`name` 和 `input`。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 `session_id` 恢复以继续。请参阅[延迟工具调用以供稍后使用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)了解完整往返。

1750 1785 

1751<h4 id="user_message_uuid">1786<h4 id="user_message_uuid">

1752 `user_message_uuid`1787 `user_message_uuid`

1753</h4>1788</h4>

1754 1789 

1755轮回答的 [`SDKUserMessage`](#sdkusermessage) 的 `uuid`,回显以便您可以将 Claude Code 的回复与您发送的消息匹配。Claude Code 仅在您在消息上设置 uuid 时回显 `uuid`。该字段在 `SDKUserMessage` 上是可选的,传递给 `query()` 的字符串提示不携带任何。1790轮回答的 [`SDKUserMessage`](#sdkusermessage) 的 `uuid`,回显以便您可以将 Claude Code 的回复与您发送的消息匹配。Claude Code 仅在您在消息上设置 uuid 时回显 `uuid`。该字段在 `SDKUserMessage` 上是可选的,传递给 `query()` 的字符串提示词不携带任何。

1756 1791 

1757轮回答的消息取决于轮如何启动:1792轮回答的消息取决于轮如何启动:

1758 1793 

1759* **您发送的常规消息**,意思是没有 `isSynthetic: true` 的消息:轮在其整个运行中回答该消息。当您一起发送多条消息时,Claude Code 可以将它们合并为一轮,该字段然后仅携带最后一条消息的 `uuid`。要将回复与任何合并的消息匹配,请使用 [`user_message_uuids`](#user_message_uuids)。1794* **您发送的常规消息**,意思是没有 `isSynthetic: true` 的消息:轮在其整个运行中回答该消息。当您一起发送多条消息时,Claude Code 可以将它们合并为一轮,该字段然后仅携带最后一条消息的 `uuid`。要将回复与任何合并的消息匹配,请使用 [`user_message_uuids`](#user_message_uuids)。

1760* **您发送的带有 `isSynthetic: true` 的消息**:轮最初回答该消息。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答拾取的消息。回显合成消息的 `uuid` 需要 Agent SDK v0.3.265 或更高版本;早期版本在合成轮上不回显任何内容。1795* **您发送的带有 `isSynthetic: true` 的消息**:轮最初回答该消息。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答拾取的消息。回显合成消息的 `uuid` 需要 Agent SDK v0.3.265 或更高版本;早期版本在合成轮上不回显任何内容。

1761* **Claude Code 生成的提示以重新运行被重启中断的轮**(在 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars) 下):当被中断轮的最后一个提示是您发送的常规消息时,无论它是打开轮还是 Claude Code 在轮期间拾取它,重新运行最初回答该消息。[`resume_reason`](#resume_reason) 告诉重新运行的帧来自被中断尝试的。当最后一个提示不是您的常规消息时,重新运行最初不回答您的任何消息。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答拾取的消息。回显被中断轮的提示需要 Agent SDK v0.3.268 或更高版本。1796* **Claude Code 生成的、用于在 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars) 下重新运行被中断轮的提示词**:当被中断轮的最后一个提示词是您发送的常规消息时,无论它是打开轮还是 Claude Code 在轮期间拾取它,重新运行最初回答该消息。[`resume_reason`](#resume_reason) 可将重新运行的帧与被中断尝试的帧区分开。当最后一个提示词不是您的常规消息时,重新运行最初不回答您的任何消息。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答拾取的消息。回显被中断轮的提示词需要 Agent SDK v0.3.268 或更高版本。

1762* **Claude Code 自己生成的任何其他提示**:轮最初不回答您的任何消息,其帧不携带回显。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答该消息。拾取回显需要 Agent SDK v0.3.265 或更高版本;早期版本在这些轮上不回显任何内容。1797* **Claude Code 自己生成的任何其他提示词**:轮最初不回答您的任何消息,其帧不携带回显。如果 Claude Code 在工具调用之间拾取您的常规消息,轮从那时起回答该消息。拾取回显需要 Agent SDK v0.3.265 或更高版本;早期版本在这些轮上不回显任何内容。

1763 1798 

1764Claude Code 在三种帧上回显回答的消息的 `uuid`:1799Claude Code 在三种帧上回显回答的消息的 `uuid`:

1765 1800 

1766* **结果**:回答您发送的消息的轮的每个结果。在 Agent SDK v0.3.265 或更高版本上,每个这样的结果都携带它。在 v0.3.265 之前,常规消息启动的轮的成功结果在轮未发送 API 请求或以延迟工具调用结束时缺少它。在 v0.3.246 之前,错误结果也缺少它,在 v0.3.216 之前每个结果都缺少它。1801* **结果**:回答您发送的消息的轮的每个结果。在 Agent SDK v0.3.265 或更高版本上,每个这样的结果都携带它。在 v0.3.265 之前,常规消息启动的轮的成功结果在轮未发送 API 请求或以延迟工具调用结束时缺少它。在 v0.3.246 之前,错误结果也缺少它,在 v0.3.216 之前每个结果都缺少它。

1767* **轮的第一个回复**:第一条[助手消息](#sdkassistantmessage),或使用 `includePartialMessages` 时第一条[流事件](#sdkpartialassistantmessage),其 `event.type` 不是 `ping`,因此您可以在结果到达之前绑定回复。当轮流传输任何内容时,Claude Code 改为在第一条助手消息上设置它。第一个回复回显需要 Agent SDK v0.3.246 或更高版本。当轮回答的消息在轮中间改变时,改变后的第一个回复携带该字段,在 Agent SDK v0.3.265 或更高版本上;早期版本在每轮一个回复帧上设置它。1802* **轮的第一个回复**:第一条[助手消息](#sdkassistantmessage),以及在使用 `includePartialMessages` 时第一条 `event.type` 不是 `ping` 的[流事件](#sdkpartialassistantmessage),因此您可以在结果到达之前绑定回复。第一个回复回显需要 Agent SDK v0.3.246 或更高版本。在 v0.3.269 之前,使用 `includePartialMessages` 时,Claude Code 仅在该第一条流事件上设置它,或者在轮未流式传输任何内容时在第一条助手消息上设置它。当轮回答的消息在轮中间改变时,改变后的第一个回复也携带该字段,在 Agent SDK v0.3.265 或更高版本上;早期版本在每轮一个回复帧上设置它。

1768* **轮的每个 [`thinking_tokens`](#sdkthinkingtokensmessage) 帧**:以便您可以将思考进度归因于您发送的消息,而无需等待轮的第一个回复。需要 Agent SDK v0.3.260 或更高版本。1803* **轮的每个 [`thinking_tokens`](#sdkthinkingtokensmessage) 帧**:以便您可以将思考进度归因于您发送的消息,而无需等待轮的第一个回复。需要 Agent SDK v0.3.260 或更高版本。

1769 1804 

1770Claude Code 在这些情况下省略该字段:1805Claude Code 在这些情况下省略该字段:

1771 1806 

1772* 除了那些第一个回复之外的回复帧1807* 除了那些第一个回复之外的回复帧

1773* 子代理帧1808* 子代理帧

1774* 回答没有消息的轮,或回答您发送的没有 `uuid` 的消息的轮1809* 不回答您任何消息的轮,或回答您发送的没有 `uuid` 的消息的轮

1775* 回答您未发送的消息的结果,例如崩溃的工作进程后的零化结果1810* 不回答您发送的任何消息的结果,例如崩溃的工作进程后的零化结果

1776 1811 

1777<h4 id="user_message_uuids">1812<h4 id="user_message_uuids">

1778 `user_message_uuids`1813 `user_message_uuids`


1780 1815 

1781Claude Code 在该轮中回答的您发送的每条消息的 `uuid`。当您一起发送多条消息时,Claude Code 可以将它们合并为一轮,`user_message_uuid` 然后仅命名其中的最后一个。要将回复与任何合并的消息匹配,在此列表中的任何位置查找该消息的 `uuid`。需要 Agent SDK v0.3.259 或更高版本。1816Claude Code 在该轮中回答的您发送的每条消息的 `uuid`。当您一起发送多条消息时,Claude Code 可以将它们合并为一轮,`user_message_uuid` 然后仅命名其中的最后一个。要将回复与任何合并的消息匹配,在此列表中的任何位置查找该消息的 `uuid`。需要 Agent SDK v0.3.259 或更高版本。

1782 1817 

1783Claude Code 在携带该字段的每个回复帧和结果上一起设置列表与 `user_message_uuid`。对于携带 `user_message_uuid` 的完整帧集以及每个需要的版本,请参阅 [`user_message_uuid`](#user_message_uuid)。列表始终包含 `user_message_uuid` 并最多包含 64 个条目。1818Claude Code 在携带 `user_message_uuid` 的每个回复帧和结果上,与该字段一起设置此列表。有关回显所回答消息 `uuid` 的完整轮帧集合以及每种帧所需的版本,请参阅 [`user_message_uuid`](#user_message_uuid)。列表始终包含 `user_message_uuid` 并最多包含 64 个条目。

1784 1819 

1785当 Claude Code 在轮运行时拾取您发送的常规消息时,它将该消息的 `uuid` 添加到结果的列表中。1820当 Claude Code 在轮运行时拾取您发送的常规消息时,它将该消息的 `uuid` 添加到结果的列表中。

1786 1821 


1790 `resume_reason`1825 `resume_reason`

1791</h4>1826</h4>

1792 1827 

1793Claude Code 重新运行该轮的原因,在重启后。Claude Code 在它在 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars) 下重新运行的轮上设置此字段,以便您可以将重新运行的回复和结果与被中断尝试的区分开。需要 Agent SDK v0.3.268 或更高版本。1828Claude Code 在重启后重新运行该轮的原因。Claude Code 在它在 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars) 下重新运行的轮上设置此字段,以便您可以将重新运行的回复和结果与被中断尝试的区分开。需要 Agent SDK v0.3.268 或更高版本。

1794 1829 

1795Claude Code 在两种帧上设置该字段:1830Claude Code 在两种帧上设置该字段:

1796 1831 

1797* **重新运行的结果**:在成功和错误分支上,无论结果是否携带 `user_message_uuid`。1832* **重新运行的结果**:在成功和错误分支上,无论结果是否携带 `user_message_uuid`。

1798* **重新运行的回复帧**:那些携带 [`user_message_uuid`](#user_message_uuid) 的帧。1833* **重新运行的回复帧**:那些携带 [`user_message_uuid`](#user_message_uuid) 的帧。

1799 1834 

1800该值是一个短小写令牌,命名轮被重新运行的原因,例如 `interrupted_turn`。该字段在所有其他轮上不存在。1835该值是一个简短的小写标记,命名轮被重新运行的原因,例如 `interrupted_turn`。该字段在所有其他轮上不存在。

1801 1836 

1802<h4 id="queued_turn_count">1837<h4 id="queued_turn_count">

1803 `queued_turn_count`1838 `queued_turn_count`


1818 1853 

1819在 [`env`](#options) 中设置 `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` 为 `1` 以接收每个 `SDKStartupFailureReason` 值的此结果。没有该变量,Claude Code 仅为这些失败写入结果,其余的以 stderr 输出、非零退出和无结果消息结束:1854在 [`env`](#options) 中设置 `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` 为 `1` 以接收每个 `SDKStartupFailureReason` 值的此结果。没有该变量,Claude Code 仅为这些失败写入结果,其余的以 stderr 输出、非零退出和无结果消息结束:

1820 1855 

1821* Claude Code 停止的恢复,因为它[无法将会话返回到其工作树](/docs/zh-CN/worktrees#the-session-resumes-outside-its-worktree),带有 `worktree_unverified` 或 `worktree_resume_refused`。该部分说明哪个错误携带哪个值。1856* Claude Code 停止的恢复,因为它[无法将会话返回到其 worktree](/docs/zh-CN/worktrees#the-session-resumes-outside-its-worktree),带有 `worktree_unverified` 或 `worktree_resume_refused`。该部分说明哪个错误携带哪个值。

1822* 拒绝后台会话持有的对话的 [`continue`](#options),带有 `session_held_by_background`。对于这样的对话的拒绝 [`resume`](#options),Claude Code 仅在设置了变量时写入结果。1857* 拒绝后台会话持有的对话的 [`continue`](#options),带有 `session_held_by_background`。对于这样的对话的拒绝 [`resume`](#options),Claude Code 仅在设置了变量时写入结果。

1823 1858 

1824```typescript theme={null}1859```typescript theme={null}


1859| `cwd_unavailable` | 工作目录被删除、移动或无法读取 |1894| `cwd_unavailable` | 工作目录被删除、移动或无法读取 |

1860| `shell_tool_missing` | 在 Windows 上,没有可用的 shell 工具:Git Bash 缺失,PowerShell 缺失或使用 `CLAUDE_CODE_USE_POWERSHELL_TOOL` 关闭 |1895| `shell_tool_missing` | 在 Windows 上,没有可用的 shell 工具:Git Bash 缺失,PowerShell 缺失或使用 `CLAUDE_CODE_USE_POWERSHELL_TOOL` 关闭 |

1861| `session_held_by_background` | 要恢复或继续的对话作为[后台会话](/docs/zh-CN/agent-view)运行 |1896| `session_held_by_background` | 要恢复或继续的对话作为[后台会话](/docs/zh-CN/agent-view)运行 |

1862| `worktree_resume_refused` | 会话的工作树未通过其安全检查,或恢复是从其内部启动的。`errors` 说明运行相同恢复是否继续而不使用工作树 |1897| `worktree_resume_refused` | 会话的 worktree 未通过其安全检查,或恢复是从其内部启动的。`errors` 说明运行相同恢复是否继续而不使用 worktree |

1863| `worktree_unverified` | 会话的工作树现在无法验证,重试可能成功 |1898| `worktree_unverified` | 会话的 worktree 现在无法验证,重试可能成功 |

1864| `cli_version_too_old` | 此 Claude Code 版本低于 Anthropic 需要的最低版本 |1899| `cli_version_too_old` | 此 Claude Code 版本低于 Anthropic 需要的最低版本 |

1865| `bypass_root` | 在以 root 身份运行时请求了绕过权限模式 |1900| `bypass_root` | 在以 root 身份运行时请求了绕过权限模式 |

1866 1901 


1912`terminal_slash_commands` 命名 `slash_commands` 中的条目,其接口绑定到本地终端,例如 `exit`。您可以像 `slash_commands` 中的任何其他条目一样发送它们;该字段存在以便远程或移动客户端可以从其命令菜单中隐藏它们。该字段仅在非空时存在,需要 Agent SDK v0.3.229 或更高版本。1947`terminal_slash_commands` 命名 `slash_commands` 中的条目,其接口绑定到本地终端,例如 `exit`。您可以像 `slash_commands` 中的任何其他条目一样发送它们;该字段存在以便远程或移动客户端可以从其命令菜单中隐藏它们。该字段仅在非空时存在,需要 Agent SDK v0.3.229 或更高版本。

1913 1948 

1914* `source` 在每个 `mcp_servers` 条目上:服务器定义的来源,与 [`McpServerStatus`](#mcpserverstatus) 的 `source` 值相同。需要 Agent SDK v0.3.274 或更高版本。1949* `source` 在每个 `mcp_servers` 条目上:服务器定义的来源,与 [`McpServerStatus`](#mcpserverstatus) 的 `source` 值相同。需要 Agent SDK v0.3.274 或更高版本。

1915* `effort`:[努力级别](/docs/zh-CN/model-config#adjust-effort-level) Claude Code 在会话的下一个请求上发送,或当它不发送任何时为 `null`。Claude Code 仅在它发送到[远程控制](/docs/zh-CN/remote-control)客户端的初始化消息上设置该字段,并从您的应用程序读取的初始化消息中省略它。需要 Agent SDK v0.3.234 或更高版本。1950* `effort`:Claude Code 在会话的下一个请求上发送的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level),或当它不发送任何时为 `null`。Claude Code 仅在它发送到 [Remote Control](/docs/zh-CN/remote-control) 客户端的初始化消息上设置该字段,并从您的应用程序读取的初始化消息中省略它。需要 Agent SDK v0.3.234 或更高版本。

1916 1951 

1917`capabilities` 数组命名此 CLI 实现的协议行为,因此您可以进行功能检测而不是比较 `claude_code_version` 字符串。这是一个开放集:忽略您不认识的值,并检查您依赖其行为的特定功能。该字段需要 Claude Code v2.1.205 或更高版本,在早期 CLI 上不存在。1952`capabilities` 数组命名此 CLI 实现的协议行为,因此您可以进行功能检测而不是比较 `claude_code_version` 字符串。这是一个开放集:忽略您不认识的值,并检查您依赖其行为的特定功能。该字段需要 Claude Code v2.1.205 或更高版本,在早期 CLI 上不存在。

1918 1953 


1979 `SDKInformationalMessage`2014 `SDKInformationalMessage`

1980</h3>2015</h3>

1981 2016 

1982循环发出的通用文本横幅。携带警告、通知和其他非错误状态行 Claude Code 引发,以及钩子反馈,例如 `UserPromptSubmit` 钩子的阻止原因。2017循环发出的通用文本横幅。携带 Claude Code 引发的警告、通知和其他非错误状态行,以及 hook 反馈,例如 `UserPromptSubmit` hook 的阻止原因。

1983 2018 

1984在 Claude Code v2.1.227 或更高版本上,钩子的 [`systemMessage`](/docs/zh-CN/hooks#json-output) 可以作为此消息到达,每行以钩子的名称为前缀,例如 `PostToolUse:Bash says:`。每个[事件的部分](/docs/zh-CN/hooks#hook-events)在钩子页面上说明输出如何显示。2019在 Claude Code v2.1.227 或更高版本上,hook 的 [`systemMessage`](/docs/zh-CN/hooks#json-output) 可以作为此消息到达,每行以 hook 的名称为前缀,例如 `PostToolUse:Bash says:`。hooks 页面上每个[事件的部分](/docs/zh-CN/hooks#hook-events)说明输出如何显示。

1985 2020 

1986将 `content` 呈现为给定 `level` 的纯文本。2021将 `content` 呈现为给定 `level` 的纯文本。

1987 2022 


2002 `SDKWorkerShuttingDownMessage`2037 `SDKWorkerShuttingDownMessage`

2003</h3>2038</h3>

2004 2039 

2005在优雅的工作进程拆卸上发出,以便远程客户端可以显示工作进程退出的原因,而不是等待心跳超时。`reason` 是由主机 CLI 设置的短 snake\_case 字符串,例如 `"host_exit"` 或 `"remote_control_disabled"`。仅在流式传输实时时对此采取行动。恢复的会话重放此消息的过去实例,因此在这种情况下忽略它们。2040在优雅的工作进程拆卸上发出,以便远程客户端可以显示工作进程退出的原因,而不是等待心跳超时。`reason` 是由主机 CLI 设置的短 snake\_case 字符串,例如 `"host_exit"` 或 `"remote_control_disabled"`。仅在实时流式传输时对此采取行动。恢复的会话重放此消息的过去实例,因此在这种情况下忽略它们。

2006 2041 

2007```typescript theme={null}2042```typescript theme={null}

2008type SDKWorkerShuttingDownMessage = {2043type SDKWorkerShuttingDownMessage = {


2043* **使用 MCP 提示工具**,使用 `permissionPromptToolName` 或 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 标志设置,和默认 `permissionPrompts: 'host'`:Claude Code 根本不发出此事件,甚至不发出它自己决定的规则拒绝。2078* **使用 MCP 提示工具**,使用 `permissionPromptToolName` 或 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 标志设置,和默认 `permissionPrompts: 'host'`:Claude Code 根本不发出此事件,甚至不发出它自己决定的规则拒绝。

2044* **使用 [`permissionPrompts: 'none'`](#options)**:Claude Code 拒绝会提示的调用,即使也设置了 `canUseTool` 或 MCP 提示工具,此事件也报告这些拒绝以及 Claude Code 自己决定的拒绝。需要 Claude Code v2.1.259 或更高版本。2079* **使用 [`permissionPrompts: 'none'`](#options)**:Claude Code 拒绝会提示的调用,即使也设置了 `canUseTool` 或 MCP 提示工具,此事件也报告这些拒绝以及 Claude Code 自己决定的拒绝。需要 Claude Code v2.1.259 或更高版本。

2045 2080 

2046在每个配置中,此事件跳过在 `PreToolUse` 钩子路径上决定的任何拒绝,无论钩子本身拒绝了调用还是拒绝规则覆盖了钩子的允许或询问决定。该事件也是尽力而为的:偶尔 Claude Code 记录拒绝而不发出此事件,因此[结果消息](#sdkresultmessage)上的 `permission_denials` 是权威记录。2081在每个配置中,此事件跳过在 `PreToolUse` hook 路径上决定的任何拒绝,无论 hook 本身拒绝了调用还是拒绝规则覆盖了 hook 的允许或询问决定。该事件也是尽力而为的:偶尔 Claude Code 记录拒绝而不发出此事件,因此[结果消息](#sdkresultmessage)上的 `permission_denials` 是权威记录。

2047 2082 

2048```typescript theme={null}2083```typescript theme={null}

2049type SDKPermissionDeniedMessage = {2084type SDKPermissionDeniedMessage = {


2087 `SDKContextUsage`2122 `SDKContextUsage`

2088</h3>2123</h3>

2089 2124 

2090`/context` 报告的结构化形式,作为 `context_usage` 在传递 `/context` 结果的 [`SDKAssistantMessage`](#sdkassistantmessage) 上携带。Agent SDK v0.3.232 及更高版本导出该类型。与 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) 不同,它仅携带呈现使用情况分解所需的数据,不包含 `color` 和 `gridRows` 等显示字段。Claude Code 使用不出现在消息流中的令牌计数 API 请求计算报告;请参阅[这些请求如何处理](#sdkcontrolgetcontextusageresponse)。2125`/context` 报告的结构化形式,作为 `context_usage` 在传递 `/context` 结果的 [`SDKAssistantMessage`](#sdkassistantmessage) 上携带。Agent SDK v0.3.232 及更高版本导出该类型。与 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) 不同,它仅携带呈现使用情况分解所需的数据,不包含 `color` 和 `gridRows` 等显示字段。Claude Code 使用不出现在消息流中的 token 计数 API 请求计算报告;请参阅[这些请求如何处理](#sdkcontrolgetcontextusageresponse)。

2091 2126 

2092```typescript theme={null}2127```typescript theme={null}

2093type SDKContextUsage = {2128type SDKContextUsage = {


2124};2159};

2125```2160```

2126 2161 

2127该表列出了 Claude Code 在每个字段中放入的内容。从 `model` 到 `over_limit` 的字段描述整个会话,集合字段将令牌归因于单个项目。2162该表列出了 Claude Code 在每个字段中放入的内容。从 `model` 到 `over_limit` 的字段描述整个会话,集合字段将 token 归因于单个项目。

2128 2163 

2129| 字段 | 类型 | 描述 |2164| 字段 | 类型 | 描述 |

2130| - | - | - |2165| - | - | - |

2131| `model` | `string` | Claude Code 计算使用情况的主循环的模型,不是子代理的 |2166| `model` | `string` | Claude Code 计算使用情况的主循环的模型,不是子代理的 |

2132| `total_tokens` | `number` | Claude Code 对使用中令牌的估计。未限制在窗口,因此当会话超过限制时可以超过 `raw_max_tokens` |2167| `total_tokens` | `number` | Claude Code 对使用中 token 的估计。未限制在窗口,因此当会话超过限制时可以超过 `raw_max_tokens` |

2133| `raw_max_tokens` | `number` | 模型的上下文窗口,或较低的[自动压缩窗口](/docs/zh-CN/model-config#context-window-and-auto-compaction)(当适用时),例如您设置的或 Claude Code 应用于某些具有 1M 令牌窗口的模型的 200K 边界。Claude Code 针对此窗口测量 `total_tokens` |2168| `raw_max_tokens` | `number` | 模型的上下文窗口,或较低的[自动压缩窗口](/docs/zh-CN/model-config#context-window-and-auto-compaction)(当适用时),例如您设置的或 Claude Code 应用于某些具有 1M token 窗口的模型的 200K 边界。Claude Code 针对此窗口测量 `total_tokens` |

2134| `percentage` | `number` | `total_tokens` 作为 `raw_max_tokens` 的四舍五入百分比,因此当会话超过限制时可以超过 100 |2169| `percentage` | `number` | `total_tokens` 作为 `raw_max_tokens` 的四舍五入百分比,因此当会话超过限制时可以超过 100 |

2135| `over_limit` | `object` | 仅当 `total_tokens` 超过 `raw_max_tokens` 时存在。`tokens_over` 是超过的数量,`kind` 说明 Claude Code 如何解决窗口 |2170| `over_limit` | `object` | 仅当 `total_tokens` 超过 `raw_max_tokens` 时存在。`tokens_over` 是超过的数量,`kind` 说明 Claude Code 如何解决窗口 |

2136| `categories` | [`SDKContextUsageCategory`](#sdkcontextusagecategory)`[]` | 使用情况按类别分解的每一行一个条目 |2171| `categories` | [`SDKContextUsageCategory`](#sdkcontextusagecategory)`[]` | 使用情况按类别分解的每一行一个条目 |

2137| `mcp_tools` | `object[]` | 归因于每个 MCP 工具的令牌,带有其线路名称(例如 `mcp__linear__create_issue`)和其 `server_name` |2172| `mcp_tools` | `object[]` | 归因于每个 MCP 工具的 token,带有其线路名称(例如 `mcp__linear__create_issue`)和其 `server_name` |

2138| `memory_files` | `object[]` | 归因于每个加载的内存文件的令牌,带有其 `path` 和源标签(例如 `Project` 或 `User`)在 `type` 中 |2173| `memory_files` | `object[]` | 归因于每个加载的记忆文件的 token,带有其 `path` 和源标签(例如 `Project` 或 `User`)在 `type` 中 |

2139| `agents` | `object[]` | 归因于每个自定义子代理定义的令牌,带有源标识符,例如 `projectSettings`、`userSettings` 或 `plugin`。内置子代理未列出 |2174| `agents` | `object[]` | 归因于每个自定义子代理定义的 token,带有源标识符,例如 `projectSettings`、`userSettings` 或 `plugin`。内置子代理未列出 |

2140| `skills` | `object[]` | 归因于技能列表中每个技能的令牌,带有源标识符,对于插件技能,插件的名称在 `plugin_name` 中。当没有技能贡献令牌时不存在 |2175| `skills` | `object[]` | 归因于 skill 列表中每个 skill 的 token,带有源标识符,对于插件 skill,插件的名称在 `plugin_name` 中。当没有 skill 贡献 token 时不存在 |

2141 2176 

2142`over_limit.kind` 记录 Claude Code 如何解决窗口,而不是 API 是否接受下一个请求:2177`over_limit.kind` 记录 Claude Code 如何解决窗口,而不是 API 是否接受下一个请求:

2143 2178 


2165| 字段 | 类型 | 描述 |2200| 字段 | 类型 | 描述 |

2166| - | - | - |2201| - | - | - |

2167| `name` | `string` | 行的显示名称,如 `/context` 打印的那样,例如 `Messages`。按 `kind` 分类行,而不是按名称 |2202| `name` | `string` | 行的显示名称,如 `/context` 打印的那样,例如 `Messages`。按 `kind` 分类行,而不是按名称 |

2168| `tokens` | `number` | 行的令牌计数。行可以携带零令牌 |2203| `tokens` | `number` | 行的 token 计数。行可以携带零 token |

2169| `kind` | `string` | 行代表什么:`used`、`free`、`buffer` 或 `deferred` |2204| `kind` | `string` | 行代表什么:`used`、`free`、`buffer` 或 `deferred` |

2170 2205 

2171每个 `kind` 值说明行的令牌是什么:2206每个 `kind` 值说明行的 token 是什么:

2172 2207 

2173* `used`:占据上下文窗口的内容2208* `used`:占据上下文窗口的内容

2174* `free`:剩余窗口2209* `free`:剩余窗口

2175* `buffer`:压缩保留2210* `buffer`:压缩保留

2176* `deferred`:Claude Code 保留在窗口外的工具模式,从使用情况计算中排除,列出以供了解2211* `deferred`:Claude Code 保留在窗口外的工具 schema,从使用情况计算中排除,列出以供了解

2177 2212 

2178<h3 id="sdkmessageorigin">2213<h3 id="sdkmessageorigin">

2179 `SDKMessageOrigin`2214 `SDKMessageOrigin`


2207 2242 

2208| `kind` | 含义 |2243| `kind` | 含义 |

2209| - | - |2244| - | - |

2210| `human` | 来自最终用户的直接输入。如果您的应用程序将用户输入的内容转发为用户消息,显式将其 `origin` 设置为 `{ kind: "human" }`:Claude Code 将没有 `origin` 的用户消息视为未归因,并检查需要人类输入的提示(例如 [`ultracode` 工作流关键字](/docs/zh-CN/workflows#ask-for-a-workflow-in-your-prompt))不接受它。在 v2.1.210 之前,Claude Code 将用户消息上缺失的 `origin` 视为人类输入。 |2245| `human` | 来自最终用户的直接输入。如果您的应用程序将用户输入的内容转发为用户消息,显式将其 `origin` 设置为 `{ kind: "human" }`:Claude Code 将没有 `origin` 的用户消息视为未归因,并且需要人类输入的提示词的检查(例如 [`ultracode` 工作流关键字](/docs/zh-CN/workflows#ask-for-a-workflow-in-your-prompt))不接受它。在 v2.1.210 之前,Claude Code 将用户消息上缺失的 `origin` 视为人类输入。 |

2211| `channel` | 在[频道](/docs/zh-CN/channels)上到达的消息。`server` 是源 MCP 服务器名称。 |2246| `channel` | 在[频道](/docs/zh-CN/channels)上到达的消息。`server` 是源 MCP 服务器名称。 |

2212| `peer` | 来自另一个代理的消息:进程内[队友](/docs/zh-CN/agent-teams)或[跨会话对等体](/docs/zh-CN/cross-session-messaging),您的另一个 Claude Code 会话。请参阅[对等体来源字段](#peer-origin-fields)了解每个字段的语义和信任模型。 |2247| `peer` | 来自另一个 Agent 的消息:进程内[队友](/docs/zh-CN/agent-teams)或[跨会话对等体](/docs/zh-CN/cross-session-messaging),您的另一个 Claude Code 会话。请参阅[对等体来源字段](#peer-origin-fields)了解每个字段的语义和信任模型。 |

2213| `task-notification` | 为没有新鲜用户提示的传递注入的合成轮,例如完成的后台任务;请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 了解该分支。您的应用程序[声明为计划运行](#declare-a-scheduled-run)的提示也携带此类型。可选的 `subkind` 标记引发通知的原因。请参阅[任务通知子类型](#task-notification-subkinds)。 |2248| `task-notification` | 为没有新鲜用户提示词的传递注入的合成轮,例如完成的后台任务;请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 了解该分支。您的应用程序[声明为定时运行](#declare-a-scheduled-run)的提示词也携带此类型。可选的 `subkind` 标记引发通知的原因。请参阅[任务通知子类型](#task-notification-subkinds)。 |

2214| `coordinator` | 来自[代理团队](/docs/zh-CN/agent-teams)中的团队协调员的消息。 |2249| `coordinator` | 来自 [agent team](/docs/zh-CN/agent-teams) 中的团队协调员的消息。 |

2215| `auto-continuation` | 当会话在没有新鲜用户输入的情况下继续时注入的合成轮,例如触发后续提示的命令结果。 |2250| `auto-continuation` | 当会话在没有新鲜用户输入的情况下继续时注入的合成轮,例如触发后续提示词的命令结果。 |

2216| `unclassified` | 无法确定来源的注入轮。当 Claude Code 接收带有 `isSynthetic: true` 的 [`SDKUserMessage`](#sdkusermessage) 并无法将其分类为任何其他 `kind` 时,它在消息到达时设置此类型,并将轮框架化为非用户源而不是将其视为人类输入。您的应用程序不应设置此值。 |2251| `unclassified` | 无法确定来源的注入轮。需要 Claude Code v2.1.223 或更高版本。当 Claude Code 接收带有 `isSynthetic: true` 的 [`SDKUserMessage`](#sdkusermessage) 并无法将其分类为任何其他 `kind` 时,它在消息到达时设置此类型,并将轮作为非用户来源呈现给模型,而不是将其视为人类输入。您的应用程序不应设置此值。 |

2217 2252 

2218<h3 id="task-notification-subkinds">2253<h3 id="task-notification-subkinds">

2219 任务通知子类型2254 任务通知子类型

2220</h3>2255</h3>

2221 2256 

2222当 Claude Code 将任务通知传递到会话中时,如果 Anthropic 服务器验证了该通知的来源,它会在通知的 `origin` 上设置 `subkind`。当您的应用程序[自己声明消息为计划运行](#declare-a-scheduled-run)时,它也设置 `subkind`,这需要 TypeScript Agent SDK v0.3.280 或更高版本。`subkind` 需要 Claude Code v2.1.213 或更高版本,它采用两个值之一:2257当 Claude Code 将任务通知传递到会话中时,如果 Anthropic 服务器验证了该通知的来源,它会在通知的 `origin` 上设置 `subkind`。当您的应用程序[自己声明消息为定时运行](#declare-a-scheduled-run)时,它也设置 `subkind`,这需要 TypeScript Agent SDK v0.3.280 或更高版本。`subkind` 需要 Claude Code v2.1.213 或更高版本,它采用两个值之一:

2223 2258 

2224* `scheduled-trigger`:通知是[例程](/docs/zh-CN/routines)的存储提示,因为例程的触发器之一触发而传递:其计划、其 [API 触发器](/docs/zh-CN/routines#add-an-api-trigger)、其 [GitHub 触发器](/docs/zh-CN/routines#add-a-github-trigger) 或**立即运行**。您的应用程序[声明为计划运行](#declare-a-scheduled-run)的提示也携带此值。Claude Code 将这些框架化为会话的分配任务,与[其他任务通知携带的通知](#sdktasknotificationmessage)不同。2259* `scheduled-trigger`:通知是 [Routine](/docs/zh-CN/routines) 的存储提示词,因为 Routine 的触发器之一触发而传递:其计划、其 [API 触发器](/docs/zh-CN/routines#add-an-api-trigger)、其 [GitHub 触发器](/docs/zh-CN/routines#add-a-github-trigger) 或**立即运行**。您的应用程序[声明为定时运行](#declare-a-scheduled-run)的提示词也携带此值。Claude Code 将这些作为会话的分配任务呈现给模型,附带的通知与[其他任务通知携带的通知](#sdktasknotificationmessage)不同。

2225* `peer-send-message`:通知是另一个您的会话使用[云会话](/docs/zh-CN/claude-code-on-the-web)使用的服务器端 `send_message` 工具发送的消息,而不是[跨会话 `SendMessage` 工具](/docs/zh-CN/cross-session-messaging),并且 Anthropic 服务器验证了两个会话都属于同一私有会话组。需要 Claude Code v2.1.224 或更高版本。服务器未以这种方式验证的 `send_message` 传递没有 `subkind`。2260* `peer-send-message`:通知是您的另一个会话使用[云端会话](/docs/zh-CN/claude-code-on-the-web)用来互相发送消息的服务器端 `send_message` 工具发送的消息,而不是[跨会话 `SendMessage` 工具](/docs/zh-CN/cross-session-messaging),并且 Anthropic 服务器验证了两个会话都属于同一私有会话组。需要 Claude Code v2.1.224 或更高版本。服务器未以这种方式验证的 `send_message` 传递没有 `subkind`。

2226 2261 

2227每个其他任务通知都没有 `subkind`。这包括[PR 活动](/docs/zh-CN/claude-code-on-the-web#how-claude-responds-to-pr-activity)传递到会话和后台事件,例如完成的任务。来自[跨会话 `SendMessage` 工具](/docs/zh-CN/cross-session-messaging)的消息根本不是任务通知:无论它们来自同一机器上的会话还是通过 Anthropic 服务器来自另一台机器,Claude Code 都给它们 `kind: "peer"` 和[对等体来源字段](#peer-origin-fields)。2262每个其他任务通知都没有 `subkind`。这包括[PR 活动](/docs/zh-CN/claude-code-on-the-web#how-claude-responds-to-pr-activity)传递到会话和后台事件,例如完成的任务。来自[跨会话 `SendMessage` 工具](/docs/zh-CN/cross-session-messaging)的消息根本不是任务通知:无论它们来自同一机器上的会话还是通过 Anthropic 服务器来自另一台机器,Claude Code 都给它们 `kind: "peer"` 和[对等体来源字段](#peer-origin-fields)。

2228 2263 

2229`fireReason` 说明 `scheduled-trigger` 通知为什么触发,作为短小写令牌,例如 `scheduled`、`manual`、`retry`、`catch_up` 或 `api`。Anthropic 服务器在[例程](/docs/zh-CN/routines)的传递上设置它,您的应用程序在声明计划运行时设置它。当两者都未发送时不存在。需要 TypeScript Agent SDK v0.3.280 或更高版本。2264`fireReason` 说明 `scheduled-trigger` 通知为什么触发,作为简短的小写标记,例如 `scheduled`、`manual`、`retry`、`catch_up` 或 `api`。Anthropic 服务器在 [Routine](/docs/zh-CN/routines) 的传递上设置它,您的应用程序在声明定时运行时设置它。当两者都未发送时不存在。需要 TypeScript Agent SDK v0.3.280 或更高版本。

2230 2265 

2231<h4 id="declare-a-scheduled-run">2266<h4 id="declare-a-scheduled-run">

2232 声明计划运行2267 声明定时运行

2233</h4>2268</h4>

2234 2269 

2235如果您的应用程序按自己的计划运行提示,声明每个运行,以便 Claude Code 将轮框架化为计划任务而不是来自用户的实时输入。使用 [`env`](#options) 中设置为 `1` 的 `CLAUDE_CODE_HOST_SCHEDULED_RUN` 启动会话,然后发送运行的 [`SDKUserMessage`](#sdkusermessage),其中 `origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" }` 且没有 `isSynthetic`。Claude Code 忽略在没有该变量启动的进程中的声明。它也在进程的环境携带 [`CLAUDECODE`](/docs/zh-CN/env-vars) 或 `CLAUDE_CODE_CHILD_SESSION` 时忽略它。Claude Code 仅在值为 1 到 32 个小写字母或下划线时保留 `fireReason`。需要 TypeScript Agent SDK v0.3.280 或更高版本。2270如果您的应用程序按自己的计划运行提示词,声明每个运行,以便 Claude Code 将轮作为定时任务而不是来自用户的实时输入呈现给模型。使用 [`env`](#options) 中设置为 `1` 的 `CLAUDE_CODE_HOST_SCHEDULED_RUN` 启动会话,然后发送运行的 [`SDKUserMessage`](#sdkusermessage),其中 `origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" }` 且没有 `isSynthetic`。Claude Code 忽略在没有该变量启动的进程中的声明。它也在进程的环境携带 [`CLAUDECODE`](/docs/zh-CN/env-vars) 或 `CLAUDE_CODE_CHILD_SESSION` 时忽略它。Claude Code 仅在值为 1 到 32 个小写字母或下划线时保留 `fireReason`。需要 TypeScript Agent SDK v0.3.280 或更高版本。

2236 2271 

2237<h3 id="peer-origin-fields">2272<h3 id="peer-origin-fields">

2238 对等体来源字段2273 对等体来源字段

2239</h3>2274</h3>

2240 2275 

2241`peer` 来源标识哪个代理发送了消息:进程内[队友](/docs/zh-CN/agent-teams)使用 `SendMessage` 发送到 `main`,或[跨会话对等体](/docs/zh-CN/cross-session-messaging),您的另一个 Claude Code 会话。跨会话对等体在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更高版本;请参阅[跨会话消息传递可用性](/docs/zh-CN/cross-session-messaging#availability)了解本机 Windows 要求。跨会话对等体可以在同一机器上运行,或在[您的另一台机器](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)或[云中](/docs/zh-CN/claude-code-on-the-web)运行,当其消息通过远程控制到达时。两种发送者类型填充字段的方式不同:2276`peer` 来源标识哪个 Agent 发送了消息:进程内[队友](/docs/zh-CN/agent-teams)使用 `SendMessage` 发送到 `main`,或[跨会话对等体](/docs/zh-CN/cross-session-messaging),您的另一个 Claude Code 会话。跨会话对等体在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更高版本;请参阅[跨会话消息传递可用性](/docs/zh-CN/cross-session-messaging#availability)了解本机 Windows 要求。跨会话对等体可以在同一机器上运行,或在其消息通过 Remote Control 到达时,在[您的另一台机器](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)上或[云中](/docs/zh-CN/claude-code-on-the-web)运行。两种发送者类型填充字段的方式不同:

2242 2277 

2243* `from`:队友的名称,或跨会话对等体的发送者地址。对于[单向跨机器消息](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines),发送者没有回复地址,`from` 是 `"unknown"`。该值由发送者创作;`verifiedPeerPid` 是验证的身份。2278* `from`:队友的名称,或跨会话对等体的发送者地址。对于[单向跨机器消息](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines),发送者没有回复地址,`from` 是 `"unknown"`。该值由发送者创作;`verifiedPeerPid` 是验证的身份。

2244* `fromMode`:发送会话的权限类,`bypass` 或 `prompting`,由在您的会话之间中继对等消息的主机声明,例如[桌面应用](/docs/zh-CN/desktop#work-across-sessions)。Claude Code 在接收会话中应用[入站控制](/docs/zh-CN/cross-session-messaging#control-inbound-messages)时读取它。需要 Agent SDK v0.3.234 或更高版本。2279* `fromMode`:发送会话的权限类,`bypass` 或 `prompting`,由在您的会话之间中继对等消息的主机声明,例如[桌面应用](/docs/zh-CN/desktop#work-across-sessions)。Claude Code 在接收会话中应用[入站控制](/docs/zh-CN/cross-session-messaging#control-inbound-messages)时读取它。需要 Agent SDK v0.3.234 或更高版本。

2245* `senderTaskId`:队友的任务 ID。对于跨会话对等体不存在。2280* `senderTaskId`:队友的任务 ID。对于跨会话对等体不存在。

2246* `name`:发送者的显示名称,由 Claude Code 规范化:它删除 Unicode 控制、格式、代理和行或段落分隔符代码点,然后修剪结果并将其限制为 64 个代码点,带有省略号。需要 Claude Code v2.1.205 或更高版本。2281* `name`:发送者的显示名称,由 Claude Code 规范化:它删除 Unicode 控制、格式、代理项和行或段落分隔符代码点,然后修剪结果并将其限制为 64 个代码点,带有省略号。需要 Claude Code v2.1.205 或更高版本。

2247* `body`:解码的消息体,去除对等体信封,字节精确匹配模型看到的内容。始终存在于队友消息;对于跨会话对等体,仅当轮恰好是由 Claude Code 形成的一个对等体信封时存在。呈现 `name` 和 `body` 而不是重新解析消息文本。需要 Claude Code v2.1.205 或更高版本。2282* `body`:解码的消息体,去除对等体信封,字节精确匹配模型看到的内容。始终存在于队友消息;对于跨会话对等体,仅当轮恰好是由 Claude Code 形成的一个对等体信封时存在。呈现 `name` 和 `body` 而不是重新解析消息文本。需要 Claude Code v2.1.205 或更高版本。

2248* `fromSession`:发送者的主机可打开会话 ID,由发送者的主机设置,以便您的 UI 可以链接回发送会话。像 `from` 一样,它是发送者声称的:仅将其用作导航目标,不要将其视为发送者身份的证明。需要 Claude Code v2.1.216 或更高版本。2283* `fromSession`:发送者的主机可打开会话 ID,由发送者的主机设置,以便您的 UI 可以链接回发送会话。像 `from` 一样,它是发送者声称的:仅将其用作导航目标,不要将其视为发送者身份的证明。需要 Claude Code v2.1.216 或更高版本。

2249* `verifiedPeerPid`:连接到此会话的跨会话消息传递套接字的进程的进程 ID,由内核验证并从连接本身读取,从不从有效负载读取。使用它,而不是 `from`,来标识发送者:`from` 可由任何同用户进程伪造。当 Claude Code 无法验证它时,该字段不存在,例如在 Windows 或非套接字入口上,因此缺失值意味着发送者未验证。对于中继流量,它标识中继而不是消息的作者,进程 ID 是可回收的,因此将其视为来源而不是身份验证令牌。需要 Claude Code v2.1.216 或更高版本。2284* `verifiedPeerPid`:连接到此会话的跨会话消息传递套接字的进程的进程 ID,由内核验证并从连接本身读取,从不从负载读取。使用它,而不是 `from`,来标识发送者:`from` 可由任何同用户进程伪造。当 Claude Code 无法验证它时,该字段不存在,例如在 Windows 或非套接字入口上,因此缺失值意味着发送者未验证。对于中继流量,它标识中继而不是消息的作者,进程 ID 是可回收的,因此将其视为来源而不是身份验证令牌。需要 Claude Code v2.1.216 或更高版本。

2250 2285 

2251<h2 id="hook-types">2286<h2 id="hook-types">

2252 Hook 类型2287 Hook 类型


4964 };4999 };

4965```5000```

4966 5001 

4967MCP 工具结果作为字符串或内容块数组返回,取决于服务器。导出类型中的尾部纯对象分支是架构生成工件:SDK 不返回裸对象,因为服务器的结构化输出在返回前被序列化为 JSON 字符串。在运行时值也可能是 `undefined`,尽管导出的类型不对此建模。5002MCP 工具结果作为字符串或内容块数组返回,取决于服务器。导出类型中的尾部纯对象分支是 schema 生成过程的产物。对于同时携带 `structuredContent` 或资源链接的结果,请参阅 [`tool_use_result`](#sdkusermessage),它在其 `content` 成员中保存此值。在运行时值也可能是 `undefined`,尽管导出的类型不对此建模。

4968 5003 

4969<h2 id="permission-types">5004<h2 id="permission-types">

4970 权限类型5005 权限类型


5090```5125```

5091 5126 

5092<Warning>5127<Warning>

5093 `context-1m-2025-08-07` beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此值无效,超过标准 200k 令牌上下文窗口的请求将返回错误。要使用 1M 令牌上下文窗口,请迁移到 [Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5、Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8](https://platform.claude.com/docs/en/about-claude/models/overview),这些模型在标准定价下包含 1M 上下文,无需 beta 标头。5128 在 Claude API 上,`context-1m-2025-08-07` beta 已针对 Claude Sonnet 4.5 和 Claude Sonnet 4 停用。如果您在使用这两个模型之一时仍传递它,超过标准 200K token 上下文窗口的请求将返回错误,因此请将其从 `betas` 中移除。要以 1M token 上下文窗口运行会话,请将 `model` 设置为[默认以 1M 窗口运行](/docs/zh-CN/model-config#extended-context)的模型,例如 `claude-sonnet-5-5` 或 `claude-opus-5-5`。对于仅通过其 `[1m]` 变体才能达到 1M 的模型,请在模型 ID 后附加该后缀,例如 `claude-opus-4-6[1m]`。

5094</Warning>5129</Warning>

5095 5130 

5096<h3 id="slashcommand">5131<h3 id="slashcommand">


5109};5144};

5110```5145```

5111 5146 

5112`builtin` 在命令是 Claude Code 自己的命令且输入 `/name` 运行它时为 `true`。对于由用户、项目、plugin 或 MCP 服务器定义的命令,以及由这些命令之一 [按名称替换](/docs/zh-CN/skills#resolve-skills-that-share-a-name) 的捆绑命令,它不存在。需要 Agent SDK v0.3.277 或更高版本。5147`builtin` 在命令是 Claude Code 自己的命令且输入 `/name` 运行它时为 `true`。对于由用户、项目、插件或 MCP 服务器定义的命令,以及由这些命令之一 [按名称替换](/docs/zh-CN/skills#resolve-skills-that-share-a-name) 的捆绑命令,它不存在。需要 Agent SDK v0.3.277 或更高版本。

5113 5148 

5114<h3 id="modelinfo">5149<h3 id="modelinfo">

5115 `ModelInfo`5150 `ModelInfo`


5134| 字段 | 类型 | 描述 |5169| 字段 | 类型 | 描述 |

5135| :- | :- | :- |5170| :- | :- | :- |

5136| `value` | `string` | 在 API 调用中传递的模型标识符 |5171| `value` | `string` | 在 API 调用中传递的模型标识符 |

5137| `resolvedModel` | `string \| undefined` | 此条目的 `value` 解析到的规范线路模型 ID。别名条目(如 `sonnet`)解析为显式模型 ID(如 `claude-sonnet-5`),因此主机可以将存储的显式模型 ID 与覆盖它的别名条目匹配。需要 Claude Code v2.1.197 或更高版本。 |5172| `resolvedModel` | `string \| undefined` | 此条目的 `value` 解析到的模型 ID,例如 `sonnet` 别名条目对应 `claude-sonnet-5-5`。需要 Claude Code v2.1.197 或更高版本。 |

5138| `displayName` | `string` | 人类可读的显示名称 |5173| `displayName` | `string` | 人类可读的显示名称 |

5139| `description` | `string` | 模型功能的描述 |5174| `description` | `string` | 模型功能的描述 |

5140| `supportsEffort` | `boolean \| undefined` | 此模型是否支持努力级别 |5175| `supportsEffort` | `boolean \| undefined` | 此模型是否支持 effort 级别 |

5141| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | 此模型接受的努力级别 |5176| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | 此模型接受的 effort 级别 |

5142| `supportsAdaptiveThinking` | `boolean \| undefined` | 此模型是否支持自适应思考,其中 Claude 决定何时以及思考多少 |5177| `supportsAdaptiveThinking` | `boolean \| undefined` | 此模型是否支持自适应思考,其中 Claude 决定何时以及思考多少 |

5143| `supportsFastMode` | `boolean \| undefined` | 此模型是否支持快速模式 |5178| `supportsFastMode` | `boolean \| undefined` | 此模型是否支持快速模式 |

5144| `supportsAutoMode` | `boolean \| undefined` | 此模型是否支持自动模式 |5179| `supportsAutoMode` | `boolean \| undefined` | 此模型是否支持自动模式 |


5159 5194 

5160| 字段 | 类型 | 描述 |5195| 字段 | 类型 | 描述 |

5161| :- | :- | :- |5196| :- | :- | :- |

5162| `name` | `string` | 代理类型标识符(例如 `"Explore"`、`"general-purpose"`) |5197| `name` | `string` | Agent 类型标识符(例如 `"Explore"`、`"general-purpose"`) |

5163| `description` | `string` | 何时使用此代理的描述 |5198| `description` | `string` | 何时使用此 Agent 的描述 |

5164| `model` | `string \| undefined` | 此代理使用的模型:别名或模型 ID,或 `'inherit'` 表示父级的模型。当为 `undefined` 时,Claude Code 选择 [子代理模型顺序](/docs/zh-CN/sub-agents#choose-a-model) 中的模型 |5199| `model` | `string \| undefined` | 此 Agent 使用的模型:别名或模型 ID,或 `'inherit'` 表示父级的模型。当为 `undefined` 时,Claude Code 选择 [子代理模型顺序](/docs/zh-CN/sub-agents#choose-a-model) 中的模型 |

5165 5200 

5166<h3 id="mcpserverprovenance">5201<h3 id="mcpserverprovenance">

5167 `McpServerProvenance`5202 `McpServerProvenance`

5168</h3>5203</h3>

5169 5204 

5170提供 `mcp__*` 工具的 MCP 服务器,以及该服务器定义的来源。[`PreToolUse`](#pretoolusehookinput)、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied` 钩子输入将其作为 `mcp_server` 携带,[`CanUseTool`](#canusetool) 选项将其作为 `mcpServer` 携带。对于不来自 MCP 服务器的工具,两者都省略它。5205提供 `mcp__*` 工具的 MCP 服务器,以及该服务器定义的来源。[`PreToolUse`](#pretoolusehookinput)、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied` hook 输入将其作为 `mcp_server` 携带,[`CanUseTool`](#canusetool) 选项将其作为 `mcpServer` 携带。对于不来自 MCP 服务器的工具,两者都省略它。

5171 5206 

5172```typescript theme={null}5207```typescript theme={null}

5173type McpServerProvenance = {5208type McpServerProvenance = {


5179| 字段 | 类型 | 描述 |5214| 字段 | 类型 | 描述 |

5180| :- | :- | :- |5215| :- | :- | :- |

5181| `name` | `string` | 服务器注册时使用的名称,与 [`mcpServerStatus()`](#query-object) 为其报告的值相同 |5216| `name` | `string` | 服务器注册时使用的名称,与 [`mcpServerStatus()`](#query-object) 为其报告的值相同 |

5182| `source` | `string` | 服务器定义的来源:`sdk`、`plugin` 或配置范围 |5217| `source` | `string` | 服务器定义的来源:`sdk`、`plugin` 或配置作用域 |

5183 5218 

5184`source` 采用以下值之一。该集合是开放的,因此将您不认识的值视为配置的来源,而不是 `sdk`:5219`source` 采用以下值之一。该集合是开放的,因此将您不认识的值视为配置的来源,而不是 `sdk`:

5185 5220 

5186* **`sdk`**:您的应用程序注册的进程内服务器。只有 SDK 主机应用程序可以注册一个,因此配置的服务器永远不会报告 `sdk`,无论其名称如何。5221* **`sdk`**:您的应用程序注册的进程内服务器。只有 SDK 主机应用程序可以注册一个,因此配置的服务器永远不会报告 `sdk`,无论其名称如何。

5187* **`plugin`**:[plugin](/docs/zh-CN/agent-sdk/plugins) 提供的服务器。其 `name` 是 [plugin-provided MCP servers](/docs/zh-CN/mcp#plugin-provided-mcp-servers) 下描述的作用域 `plugin:<plugin-name>:<server-name>` 形式。5222* **`plugin`**:[插件](/docs/zh-CN/agent-sdk/plugins) 提供的服务器。其 `name` 是 [插件提供的 MCP 服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers) 下描述的作用域 `plugin:<plugin-name>:<server-name>` 形式。

5188* **配置范围**:`user`、`project`、`local`、`dynamic`、`managed`、`enterprise`、`claudeai` 或 `agent`。`.mcp.json` 服务器报告 `project`,[MCP installation scopes](/docs/zh-CN/mcp#mcp-installation-scopes) 定义 `local`、`project` 和 `user`。您的应用程序在 [`mcpServers` 选项](#options) 中传递的服务器(除了进程内 SDK 服务器外)报告 `dynamic`。5223* **配置作用域**:`user`、`project`、`local`、`dynamic`、`managed`、`enterprise`、`claudeai` 或 `agent`。`.mcp.json` 服务器报告 `project`,[MCP installation scopes](/docs/zh-CN/mcp#mcp-installation-scopes) 定义 `local`、`project` 和 `user`。您的应用程序在 [`mcpServers` 选项](#options) 中传递的服务器(除了进程内 SDK 服务器外)报告 `dynamic`。

5189 5224 

5190基于 `source` 做出信任决策,而不是基于 `name` 或 `mcp__<server>__` 工具名称前缀。对于除 `sdk` 之外的任何来源,`name` 是不受信任的文本:在显示前对其进行转义。5225基于 `source` 做出信任决策,而不是基于 `name` 或 `mcp__<server>__` 工具名称前缀。对于除 `sdk` 之外的任何来源,`name` 是不受信任的文本:在显示前对其进行转义。

5191 5226 


5224 5259 

5225`source` 说明服务器定义的来源,具有与 [`McpServerProvenance`](#mcpserverprovenance) 的 `source` 相同的值和信任规则。该字段需要 Agent SDK v0.3.274 或更高版本,在早期版本中不存在。5260`source` 说明服务器定义的来源,具有与 [`McpServerProvenance`](#mcpserverprovenance) 的 `source` 相同的值和信任规则。该字段需要 Agent SDK v0.3.274 或更高版本,在早期版本中不存在。

5226 5261 

5227`_meta` 在 `tools` 条目上携带该工具的 `_meta` 的 MCP Apps 成员,因此您的应用程序可以找到 `ui://` 资源以使用 [`readMcpResource()`](#query-object) 呈现。Claude Code 传递 `ui` 对象和已弃用的平面 `ui/resourceUri` 字符串,并保留所有其他密钥。在 `ui` 内,`resourceUri` 是 `ui://` 字符串,`visibility` 是当服务器设置它们时的 `"model"` 和 `"app"` 数组,任何其他成员原样传递。Claude Code 在值格式不正确时删除任一密钥,并从既不声明任何一个的工具中省略 `_meta`。该字段仅在初始化消息的 [`capabilities`](#sdksystemmessage) 包含 `mcp_tool_ui_meta_v1` 时出现,并需要 TypeScript Agent SDK v0.3.280 或更高版本。5262`_meta` 在 `tools` 条目上携带该工具的 `_meta` 的 MCP Apps 成员,因此您的应用程序可以找到 `ui://` 资源以使用 [`readMcpResource()`](#query-object) 呈现。Claude Code 传递 `ui` 对象和已弃用的平面 `ui/resourceUri` 字符串,并保留所有其他键。在 `ui` 内,`resourceUri` 是 `ui://` 字符串,`visibility` 是当服务器设置它们时的 `"model"` 和 `"app"` 数组,任何其他成员原样传递。Claude Code 在值格式不正确时删除任一键,并从既不声明任何一个的工具中省略 `_meta`。该字段仅在初始化消息的 [`capabilities`](#sdksystemmessage) 包含 `mcp_tool_ui_meta_v1` 时出现,并需要 TypeScript Agent SDK v0.3.280 或更高版本。

5228 5263 

5229<h3 id="mcpserverstatusconfig">5264<h3 id="mcpserverstatusconfig">

5230 `McpServerStatusConfig`5265 `McpServerStatusConfig`


5282};5317};

5283```5318```

5284 5319 

5285`thinkingTokens` 计算此模型生成的思考令牌。`outputTokens` 已包含它们,因此不要将两者相加。该字段在运行在记录它的 Claude Code 版本上的轮次之前不存在,因此在早期版本上开始的已恢复会话报告部分计数。`thinkingTokens` 需要 Agent SDK v0.3.257 或更高版本。5320`thinkingTokens` 计算此模型生成的思考 token。`outputTokens` 已包含它们,因此不要将两者相加。该字段在运行在记录它的 Claude Code 版本上的轮次之前不存在,因此在早期版本上开始的已恢复会话报告部分计数。`thinkingTokens` 需要 Agent SDK v0.3.257 或更高版本。

5286 5321 

5287`canonicalModel` 和 `provider` 字段需要 Claude Code v2.1.218 或更高版本。`canonicalModel` 是定价查询使用的规范模型 ID;它可能与键入条目的原始模型字符串不同,例如当该字符串是提供商特定的 ID 或别名时。5322`canonicalModel` 和 `provider` 字段需要 Claude Code v2.1.218 或更高版本。`canonicalModel` 是定价查询使用的规范模型 ID;它可能与键入条目的原始模型字符串不同,例如当该字符串是提供商特定的 ID 或别名时。

5288 5323 


5314 `Usage`5349 `Usage`

5315</h3>5350</h3>

5316 5351 

5317令牌使用统计信息。这是来自 `@anthropic-ai/sdk` 的 `BetaUsage` 类型。5352token 使用统计信息。这是来自 `@anthropic-ai/sdk` 的 `BetaUsage` 类型。

5318 5353 

5319```typescript theme={null}5354```typescript theme={null}

5320type Usage = {5355type Usage = {


5337 5372 

5338`BetaServerToolUsage`、`BetaIterationsUsage` 和 `BetaOutputTokensDetails` 在 `@anthropic-ai/sdk` 中定义。5373`BetaServerToolUsage`、`BetaIterationsUsage` 和 `BetaOutputTokensDetails` 在 `@anthropic-ai/sdk` 中定义。

5339 5374 

5340`output_tokens_details` 按类别分解计费输出。它目前携带一个字段 `thinking_tokens: number`,计算模型生成的作为内部推理的输出令牌,包括思考块分隔符。`output_tokens_details` 字段需要 TypeScript SDK v0.3.228 或更高版本,它捆绑了 Claude Code v2.1.228。5375`output_tokens_details` 按类别分解计费输出。它目前携带一个字段 `thinking_tokens: number`,计算模型生成的作为内部推理的输出 token,包括思考块分隔符。`output_tokens_details` 字段需要 TypeScript SDK v0.3.228 或更高版本,它捆绑了 Claude Code v2.1.228。

5341 5376 

5342* **计费**:读取分解以进行观察,而不是用于计费。`output_tokens` 保持为权威总数,`output_tokens - thinking_tokens` 近似非推理输出。5377* **计费**:读取分解以进行观察,而不是用于计费。`output_tokens` 保持为权威总数,`output_tokens - thinking_tokens` 近似非推理输出。

5343* **计数涵盖的内容**:模型生成的原始推理,可能比响应体中返回的思考文本更长。API 通过重新标记该原始文本来计算它,因此它可能与模型的精确生成计数相差几个令牌。5378* **计数涵盖的内容**:模型生成的原始推理,可能比响应体中返回的思考文本更长。API 通过重新对该原始文本进行 token 化来计算它,因此它可能与模型的精确生成计数相差几个 token。

5344* **流式传输**:在流式助手消息上,此分解与 `output_tokens` 一样是 `message_start` 占位符,不携带真实计数,因此从结果消息的 `usage` 读取它,如 [Read output tokens from the result message](/docs/zh-CN/agent-sdk/cost-tracking#read-output-tokens-from-the-result-message) 所述。在结果消息上,当模型或提供商不报告分解时,`thinking_tokens` 读取 `0`。5379* **流式输出**:在流式助手消息上,此分解与 `output_tokens` 一样是 `message_start` 占位符,不携带真实计数,因此从结果消息的 `usage` 读取它,如 [Read output tokens from the result message](/docs/zh-CN/agent-sdk/cost-tracking#read-output-tokens-from-the-result-message) 所述。在结果消息上,当模型或提供商不报告分解时,`thinking_tokens` 读取 `0`。

5345* **`null` 情况**:`output_tokens_details` 本身在 Claude Code 合成的助手消息上为 `null`,例如 API 错误消息。5380* **`null` 情况**:`output_tokens_details` 本身在 Claude Code 合成的助手消息上为 `null`,例如 API 错误消息。

5346 5381 

5347<h3 id="calltoolresult">5382<h3 id="calltoolresult">


5477 5512 

5478当您调用 `setMcpServers()` 时,Claude Code 应用这些规则:5513当您调用 `setMcpServers()` 时,Claude Code 应用这些规则:

5479 5514 

5480* **调用未命名的服务器**:Claude Code 保持 plugin 提供的服务器运行。需要 Agent SDK v0.3.210 或更高版本。5515* **调用未命名的服务器**:Claude Code 保持插件提供的服务器运行。需要 Agent SDK v0.3.210 或更高版本。

5481* **调用命名的服务器**:除了 CLI 在启动时启动的内置服务器外,Claude Code 仅在其配置与您传递的配置不同时才替换运行中的服务器。5516* **调用命名的服务器**:除了 CLI 在启动时启动的内置服务器外,Claude Code 仅在其配置与您传递的配置不同时才替换运行中的服务器。

5482* **CLI 在启动时启动的内置服务器**:如果调用命名了一个,Claude Code 会删除该条目并在 `errors` 中报告它。5517* **CLI 在启动时启动的内置服务器**:如果调用命名了一个,Claude Code 会删除该条目并在 `errors` 中报告它。

5483 5518 

5484承诺在新添加的 stdio、HTTP 和 SSE 服务器连接或失败后解决,因此来自已连接服务器的工具在下一轮可用。5519该 Promise 在新添加的 stdio、HTTP 和 SSE 服务器连接或失败后解析,因此来自已连接服务器的工具在下一轮可用。

5485 5520 

5486`added` 列出 Claude Code 添加或替换的服务器,无论它们是否连接。连接失败的服务器同时出现在 `added` 和 `errors` 中,`errors` 下有失败文本,[`mcpServerStatus()`](#methods) 中有 `failed` 行。在 Claude Code v2.1.257 之前,连接尝试抛出的服务器仅在 `errors` 下报告。5521`added` 列出 Claude Code 添加或替换的服务器,无论它们是否连接。连接失败的服务器同时出现在 `added` 和 `errors` 中,`errors` 下有失败文本,[`mcpServerStatus()`](#methods) 中有 `failed` 行。在 Claude Code v2.1.257 之前,连接尝试抛出的服务器仅在 `errors` 下报告。

5487 5522 


5574 `SDKHookStartedMessage`5609 `SDKHookStartedMessage`

5575</h3>5610</h3>

5576 5611 

5577在钩子开始执行时发出。5612在 hook 开始执行时发出。

5578 5613 

5579Claude Code 将此消息、[`SDKHookProgressMessage`](#sdkhookprogressmessage) 和 [`SDKHookResponseMessage`](#sdkhookresponsemessage) 立即传递到消息流,包括在会话启动期间 `SessionStart` 或 `Setup` 钩子仍在运行时。Claude Code v2.1.169 至 v2.1.203 在 `SessionStart` 或 `Setup` 钩子完成后分批传递这些消息;v2.1.204 恢复了实时传递。5614Claude Code 将此消息、[`SDKHookProgressMessage`](#sdkhookprogressmessage) 和 [`SDKHookResponseMessage`](#sdkhookresponsemessage) 立即传递到消息流,包括在会话启动期间 `SessionStart` 或 `Setup` hook 仍在运行时。Claude Code v2.1.169 至 v2.1.203 在 `SessionStart` 或 `Setup` hook 完成后分批传递这些消息;v2.1.204 恢复了实时传递。

5580 5615 

5581```typescript theme={null}5616```typescript theme={null}

5582type SDKHookStartedMessage = {5617type SDKHookStartedMessage = {


5594 `SDKHookProgressMessage`5629 `SDKHookProgressMessage`

5595</h3>5630</h3>

5596 5631 

5597在钩子运行时发出,带有 stdout/stderr 输出。5632在 hook 运行时发出,带有 stdout/stderr 输出。

5598 5633 

5599```typescript theme={null}5634```typescript theme={null}

5600type SDKHookProgressMessage = {5635type SDKHookProgressMessage = {


5615 `SDKHookResponseMessage`5650 `SDKHookResponseMessage`

5616</h3>5651</h3>

5617 5652 

5618在钩子完成执行时发出。5653在 hook 完成执行时发出。

5619 5654 

5620```typescript theme={null}5655```typescript theme={null}

5621type SDKHookResponseMessage = {5656type SDKHookResponseMessage = {


5671 5706 

5672* 按 `parent_tool_use_id` 跟踪指示器,这对每个子代理是唯一的。`tool_use_id` 由来自一个助手轮次的并行子代理共享,因此按它跟踪会让一个子代理的更新清除另一个的指示器。5707* 按 `parent_tool_use_id` 跟踪指示器,这对每个子代理是唯一的。`tool_use_id` 由来自一个助手轮次的并行子代理共享,因此按它跟踪会让一个子代理的更新清除另一个的指示器。

5673* 当同一 `parent_tool_use_id` 的后续 `tool_progress` 到达时清除指示器,既不带 `subagent_retry` 也不带 `heartbeat: true`,或当工具的结果消息到达时。带 `heartbeat: true` 的帧仅报告活跃性,因此在一个到达时保持指示器。`attempt` 可能在持续重试下超过 `max_retries`,因此不要从计数器派生清除。5708* 当同一 `parent_tool_use_id` 的后续 `tool_progress` 到达时清除指示器,既不带 `subagent_retry` 也不带 `heartbeat: true`,或当工具的结果消息到达时。带 `heartbeat: true` 的帧仅报告活跃性,因此在一个到达时保持指示器。`attempt` 可能在持续重试下超过 `max_retries`,因此不要从计数器派生清除。

5674* 将 `error_category` 视为选择您自己的消息文本的令牌,而不是显示文本。值为 `rate_limit`、`overloaded`、`authentication_failed`、`server_error`、`cloud_credential_error` 和 `unknown`。处理您不认识的值的方式与处理 `unknown` 的方式相同,因为后续版本可以添加值。5709* 将 `error_category` 视为用于选择您自己的消息文本的标识符,而不是显示文本。值为 `rate_limit`、`overloaded`、`authentication_failed`、`server_error`、`cloud_credential_error` 和 `unknown`。处理您不认识的值的方式与处理 `unknown` 的方式相同,因为后续版本可以添加值。

5675 5710 

5676<h3 id="sdkauthstatusmessage">5711<h3 id="sdkauthstatusmessage">

5677 `SDKAuthStatusMessage`5712 `SDKAuthStatusMessage`

5678</h3>5713</h3>

5679 5714 

5680在身份验证流期间发出。5715在身份验证流程期间发出。

5681 5716 

5682```typescript theme={null}5717```typescript theme={null}

5683type SDKAuthStatusMessage = {5718type SDKAuthStatusMessage = {


5727 `SDKTaskProgressMessage`5762 `SDKTaskProgressMessage`

5728</h3>5763</h3>

5729 5764 

5730在子代理或后台任务运行时定期发出。对于子代理任务,`summary` 字段仅在启用 [`agentProgressSummaries`](#options) 时填充。对于 [backgrounded MCP tool call](/docs/zh-CN/mcp#automatic-backgrounding-of-long-tool-calls),`summary` 携带 MCP 服务器的最新报告进度,不依赖于该选项。5765在子代理或后台任务运行时定期发出。

5766 

5767对于子代理任务,`summary` 字段携带模型生成的进度摘要,并且仅在启用 [`agentProgressSummaries`](#options) 时填充。对于 [backgrounded MCP tool call](/docs/zh-CN/mcp#automatic-backgrounding-of-long-tool-calls),`summary` 携带 MCP 服务器的最新报告进度,不依赖于该选项。

5731 5768 

5732```typescript theme={null}5769```typescript theme={null}

5733type SDKTaskProgressMessage = {5770type SDKTaskProgressMessage = {


5777 `SDKBackgroundTasksChangedMessage`5814 `SDKBackgroundTasksChangedMessage`

5778</h3>5815</h3>

5779 5816 

5780每当实时后台任务集更改时发出:任务启动、完成、被杀死、前台代理被后台化,或任务的 `description` 或 `ambient` 字段更改。5817每当实时后台任务集更改时发出:任务启动、完成、被杀死、前台 Agent 被后台化,或任务的 `description` 或 `ambient` 字段更改。

5781 5818 

5782`tasks` 数组是完整的实时集。用每个有效负载替换任何缓存的集,而不是配对 `task_started` 和 `task_notification` 事件,以便下一个成员资格更改纠正您错过的任何事件。5819`tasks` 数组是完整的实时集。用每个负载替换任何缓存的集,而不是配对 `task_started` 和 `task_notification` 事件,以便下一个成员资格更改纠正您错过的任何事件。

5783 5820 

5784相对于这些每任务事件的顺序是未指定的,因此不要关联两个流。5821相对于这些每任务事件的顺序是未指定的,因此不要关联两个流。

5785 5822 


5808 `SDKThinkingTokensMessage`5845 `SDKThinkingTokensMessage`

5809</h3>5846</h3>

5810 5847 

5811在 Claude 生成思考块时发出,包括编辑过的块。`estimated_tokens` 是当前块中迄今为止生成的思考令牌的运行估计,`estimated_tokens_delta` 是此帧携带的增量。使用这些估计进行进度显示。5848在 Claude 生成思考块时发出,包括编辑过的块。`estimated_tokens` 是当前块中迄今为止生成的思考 token 的运行估计,`estimated_tokens_delta` 是此帧携带的增量。使用这些估计进行进度显示。

5812 5849 

5813当模型或提供商报告分解时,顶级代理循环的最终计数是结果消息的 [`usage.output_tokens_details.thinking_tokens`](#usage),它 [不包括子代理令牌](/docs/zh-CN/agent-sdk/cost-tracking#get-the-total-cost-of-a-query)。5850当模型或提供商报告分解时,顶级 Agent 循环的最终计数是结果消息的 [`usage.output_tokens_details.thinking_tokens`](#usage),它 [不包括子代理 token](/docs/zh-CN/agent-sdk/cost-tracking#get-the-total-cost-of-a-query)。

5814 5851 

5815需要 Claude Code v2.1.153 或更高版本。5852需要 Claude Code v2.1.153 或更高版本。

5816 5853 


5866};5903};

5867```5904```

5868 5905 

5869当 `errorCode` 为 `"credits_required"` 时,拒绝来自 claude.ai 订阅,其包含的使用已耗尽,会话在用户购买使用额度之前无法继续。`canUserPurchaseCredits` 指示经过身份验证的用户是否可以为账户购买额度,`hasChargeableSavedPaymentMethod` 指示是否有保存的付款方式在文件中。所有三个字段在不是额度必需拒绝的速率限制事件上不存在。需要 Claude Code v2.1.181 或更高版本。5906当 `errorCode` 为 `"credits_required"` 时,拒绝来自 claude.ai 订阅,其包含的用量已耗尽,会话在用户购买使用额度之前无法继续。`canUserPurchaseCredits` 指示经过身份验证的用户是否可以为账户购买额度,`hasChargeableSavedPaymentMethod` 指示是否有已保存的付款方式。所有三个字段在不是需要额度拒绝的速率限制事件上不存在。需要 Claude Code v2.1.181 或更高版本。

5870 5907 

5871<h3 id="sdklocalcommandoutputmessage">5908<h3 id="sdklocalcommandoutputmessage">

5872 `SDKLocalCommandOutputMessage`5909 `SDKLocalCommandOutputMessage`

5873</h3>5910</h3>

5874 5911 

5875Claude Code 不发出此消息类型。当您发送命令(如 `/context` 或 `/usage`)作为提示时,其输出作为 [`SDKAssistantMessage`](#sdkassistantmessage) 到达。5912Claude Code 不发出此消息类型。当您将命令(如 `/context` 或 `/usage`)作为提示词发送时,其输出作为 [`SDKAssistantMessage`](#sdkassistantmessage) 到达。

5876 5913 

5877```typescript theme={null}5914```typescript theme={null}

5878type SDKLocalCommandOutputMessage = {5915type SDKLocalCommandOutputMessage = {


5888 `SDKCommandsChangedMessage`5925 `SDKCommandsChangedMessage`

5889</h3>5926</h3>

5890 5927 

5891当可用命令集在会话中期更改时发出,例如当 Claude Code 在代理进入子目录时发现技能时。`commands` 数组是完整的更新列表,因此用此有效负载替换任何缓存的命令列表。在此消息后调用 [`supportedCommands()`](#query-object) 返回相同的更新列表,因为该方法跟踪最新推送;这需要 Agent SDK v0.3.216 或更高版本。在早期 SDK 版本中,`supportedCommands()` 返回在初始化时捕获的快照,永远不会反映会话中期的更改。5928当可用命令集在会话中途更改时发出,例如当 Claude Code 在 Agent 进入子目录时发现 skill 时。`commands` 数组是完整的更新列表,因此用此负载替换任何缓存的命令列表。在此消息后调用 [`supportedCommands()`](#query-object) 返回相同的更新列表,因为该方法跟踪最新推送;这需要 Agent SDK v0.3.216 或更高版本。在早期 SDK 版本中,`supportedCommands()` 返回在初始化时捕获的快照,永远不会反映会话中途的更改。

5892 5929 

5893Claude Code 也在 MCP 服务器的 [prompts](/docs/zh-CN/mcp#use-mcp-prompts-as-commands) 加入或离开列表时发出此消息,例如当服务器在会话启动后完成连接时。这需要 Claude Code v2.1.281 或更高版本。5930Claude Code 也在 MCP 服务器的 [提示词](/docs/zh-CN/mcp#use-mcp-prompts-as-commands) 加入或离开列表时发出此消息,例如当服务器在会话启动后完成连接时。这需要 Claude Code v2.1.281 或更高版本。

5894 5931 

5895```typescript theme={null}5932```typescript theme={null}

5896type SDKCommandsChangedMessage = {5933type SDKCommandsChangedMessage = {


5906 `SDKPromptSuggestionMessage`5943 `SDKPromptSuggestionMessage`

5907</h3>5944</h3>

5908 5945 

5909在启用 [`promptSuggestions`](#options) 且 Claude Code 为该轮生成建议时,在轮次后发出。包含预测的下一个用户提示。对于未获得任何建议的轮次,请参阅 [When Claude Code skips suggestions](/docs/zh-CN/interactive-mode#when-claude-code-skips-suggestions)。5946在启用 [`promptSuggestions`](#options) 且 Claude Code 为该轮生成建议时,在轮次后发出。包含预测的下一个用户提示词。对于未获得任何建议的轮次,请参阅 [When Claude Code skips suggestions](/docs/zh-CN/interactive-mode#when-claude-code-skips-suggestions)。

5910 5947 

5911```typescript theme={null}5948```typescript theme={null}

5912type SDKPromptSuggestionMessage = {5949type SDKPromptSuggestionMessage = {


5921 `SDKConversationResetMessage`5958 `SDKConversationResetMessage`

5922</h3>5959</h3>

5923 5960 

5924在会话的对话被替换而不结束会话时发出。在 `query()` 调用中,只有 `/clear` 及其别名产生此消息。在 `new_conversation_id` 下挂载空成绩单并丢弃任何缓存的会话标题。5961在会话的对话被替换而不结束会话时发出。在 `query()` 调用中,只有 `/clear` 及其别名产生此消息。在 `new_conversation_id` 下挂载空会话记录并丢弃任何缓存的会话标题。

5925 5962 

5926```typescript theme={null}5963```typescript theme={null}

5927type SDKConversationResetMessage = {5964type SDKConversationResetMessage = {


5937 5974 

5938可选字段描述重置:5975可选字段描述重置:

5939 5976 

5940* `trigger`:什么丢弃了对话。在每个 `conversation_reset` 消息上重置您的成绩单,包括此字段不存在或携带您不认识的值的消息。5977* `trigger`:什么丢弃了对话。在每个 `conversation_reset` 消息上重置您的会话记录,包括此字段不存在或携带您不认识的值的消息。

5941* `user_message_uuid`:携带 `/clear` 的用户消息的 `uuid`。使用它将重置与该消息匹配。5978* `user_message_uuid`:携带 `/clear` 的用户消息的 `uuid`。使用它将重置与该消息匹配。

5942* `timestamp`:重置发生的时间,作为 UTC 中的 ISO 8601 字符串。使用它进行显示,而不是用于排序消息。5979* `timestamp`:重置发生的时间,作为 UTC 中的 ISO 8601 字符串。使用它进行显示,而不是用于排序消息。

5943 5980 

5944`trigger`、`user_message_uuid` 和 `timestamp` 字段需要 Claude Code v2.1.281 或更高版本。5981`trigger`、`user_message_uuid` 和 `timestamp` 字段需要 Claude Code v2.1.281 或更高版本。

5945 5982 

5946SDK 的已发布类型在 Claude Code v2.1.203 及更高版本中声明 `SDKConversationResetMessage`。在 v2.1.203 之前,`SDKMessage` 引用了该类型而不声明它,因此当 `skipLibCheck` 被禁用时,在 `type === "conversation_reset"` 上缩小范围失败类型检查。5983SDK 的已发布类型在 Claude Code v2.1.203 及更高版本中声明 `SDKConversationResetMessage`。在 v2.1.203 之前,`SDKMessage` 引用了该类型而不声明它,因此当 `skipLibCheck` 被禁用时,在 `type === "conversation_reset"` 上缩小范围无法通过类型检查。

5947 5984 

5948<h3 id="aborterror">5985<h3 id="aborterror">

5949 `AbortError`5986 `AbortError`


5955class AbortError extends Error {}5992class AbortError extends Error {}

5956```5993```

5957 5994 

5958`AbortError` 是 SDK 的类型化 API 中唯一的错误类。其他失败,例如 Claude Code 进程退出或启动失败,使用不携带 SDK 类以匹配的错误拒绝消息迭代。[Troubleshooting](/docs/zh-CN/agent-sdk/troubleshooting) 按消息键入这些错误,每个都有原因和修复。5995`AbortError` 是 SDK 的类型化 API 中唯一的错误类。其他失败,例如 Claude Code 进程退出或启动失败,使用不携带可供匹配的 SDK 类的错误拒绝消息迭代。[故障排除](/docs/zh-CN/agent-sdk/troubleshooting) 按消息列出这些错误,并给出每个错误的原因和修复方法。

5959 5996 

5960<h2 id="sandbox-configuration">5997<h2 id="sandbox-configuration">

5961 沙箱配置5998 沙箱配置

agent-teams.md +5 −2

Details

195* **In-process 模式**:在 agent 面板中使用上下箭头键选择队友,然后按 Enter 查看其会话并输入以向其发送消息。在选定的队友上按 `x` 以停止它。按 Ctrl+T 切换任务列表。195* **In-process 模式**:在 agent 面板中使用上下箭头键选择队友,然后按 Enter 查看其会话并输入以向其发送消息。在选定的队友上按 `x` 以停止它。按 Ctrl+T 切换任务列表。

196* **Split-pane 模式**:点击队友的窗格以直接与他们的会话交互。每个队友都有自己终端的完整视图。196* **Split-pane 模式**:点击队友的窗格以直接与他们的会话交互。每个队友都有自己终端的完整视图。

197 197 

198当你查看 in-process 队友时,纯文本和 [skills](/docs/zh-CN/skills) 会发送给该队友,但内置命令仍在负责人的会话中运行。198在查看 in-process 队友时,纯文本和 [skill](/docs/zh-CN/skills) 会发送给该队友,而内置命令会发送到负责人的会话,并有以下保护措施:

199 199 

200队友的模型和快速模式在它生成时是固定的,所以 `/model` 和 `/fast` 只改变负责人的设置。从 v2.1.199 开始,在查看队友时输入任一命令会显示一个通知,表示更改适用于负责人;较早的版本会将其应用于负责人而没有任何指示。`/effort` 仍然适用于所查看队友的后续轮次,因为队友遵循负责人的[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)。200* `/compact`、`/clear` 和 `/rewind` 作用于负责人的对话,因此在此视图中运行其中任一命令之前,Claude Code 会请您确认。

201* `/model` 和 `/fast` 设置的是负责人的模型和快速模式,而不是队友的,因此它们不会在此视图中运行。系统会显示一条通知说明原因。

202 

203队友的模型和快速模式在其生成时即已固定。`/effort` 仍然适用于所查看队友的后续轮次,因为队友遵循负责人的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。

201 204 

202<h3 id="assign-and-claim-tasks">205<h3 id="assign-and-claim-tasks">

203 分配和认领任务206 分配和认领任务

agent-view.md +26 −6

Details

224 224 

225大多数时候窥视面板就足够了,你不需要打开完整的记录。225大多数时候窥视面板就足够了,你不需要打开完整的记录。

226 226 

227在窥视面板中输入回复并按 `Enter` 将其发送到该会话。当会话提出带有预定义选择的问题时,窥视面板将它们显示为编号列表,你可以按数字键选择一个。权限提示显示为描述会话想要运行的内容的文本,没有编号选项。输入回复以回答它,或附加以用标准提示回答。对于其他被阻止的会话,按 `Tab` 用建议的回复填充输入,你可以在发送前编辑。用 `!` 前缀回复以发送 Bash 命令。227在窥视面板中输入回复并按 `Enter` 将其发送到该会话。在回复前加上 `!` 可改为发送 Bash 命令。回复的处理方式取决于会话以及您发送的内容:

228 

229* 正在工作的会话:回复会加入会话的[消息队列](/docs/zh-CN/interactive-mode#queue-messages-while-claude-works)而不是打断回复,并[在排队输入生效时](/docs/zh-CN/interactive-mode#when-claude-code-sends-what-you-queued)生效。[命令](/docs/zh-CN/commands)会等待当前轮次结束,即使是在会话自身的提示符处输入后会立即运行的命令

230* 恰好为 `/stop` 的回复:立即停止会话,而不是发送给会话,无论会话正在工作还是在等待您

231* [shell 作业](#run-a-shell-command):回复(包括 `/stop`)会作为键入的输入发送到该命令的终端

232 

233当会话正在等待您时,在窥视面板中如何回答取决于它在等待什么:

234 

235* 带有预定义选项的问题:面板按编号列出选项。在回复输入框为空时,按某个选项的编号将其填入,然后按 `Enter` 发送,或者改为输入您自己的答案

236* 没有预定义选项的问题:输入您的答案。当空输入框显示建议的回复时,按 `Tab` 将其填入,并可在发送前编辑

237* 权限提示或其他对话框,例如[沙箱](/docs/zh-CN/sandboxing)提示或 MCP 服务器的[输入请求](/docs/zh-CN/mcp#respond-to-mcp-elicitation-requests):回复并不会回答它。您的回复会在队列中等待。要回答该对话框,请用 `→` 附加

228 238 

229当 [`PermissionRequest`](/docs/zh-CN/hooks#permissionrequest) 或 [`PreToolUse`](/docs/zh-CN/hooks#pretooluse) hook 返回 Claude Code 无法为会话询问的调用验证的输出时,行显示 hook 事件和 `hook output invalid:` 以及验证错误,然后是待处理请求的文本。对于以其他方式失败的 hook,行说 hook 失败。会话仍然等待相同的请求。239当 [`PermissionRequest`](/docs/zh-CN/hooks#permissionrequest) 或 [`PreToolUse`](/docs/zh-CN/hooks#pretooluse) hook 返回 Claude Code 无法为会话询问的调用验证的输出时,行显示 hook 事件和 `hook output invalid:` 以及验证错误,然后是待处理请求的文本。对于以其他方式失败的 hook,行说 hook 失败。会话仍然等待相同的请求。

230 240 


301* 按 `Ctrl+T` 将会话固定到顶部并[在空闲时保持其进程运行](#the-supervisor-process)311* 按 `Ctrl+T` 将会话固定到顶部并[在空闲时保持其进程运行](#the-supervisor-process)

302* 按 `Shift+↑` 或 `Shift+↓` 重新排序会话312* 按 `Shift+↑` 或 `Shift+↓` 重新排序会话

303* 按 `Ctrl+R` 重命名会话313* 按 `Ctrl+R` 重命名会话

304* 在组标题上按 `Enter` 折叠它314* 在组标题上按 `Enter` 将其折叠,但[过滤](#filter-sessions)处于活动状态时除外,此时所有组都保持展开

305 315 

306要从列表中删除会话,按 `Ctrl+X` 停止它,在两秒内再按 `Ctrl+X` 删除它。在组标题上按 `Ctrl+X` 在确认后删除该组中的每个会话。316要从列表中删除会话,按 `Ctrl+X` 停止它,在两秒内再按 `Ctrl+X` 删除它。在组标题上按 `Ctrl+X` 在确认后删除该组中的每个会话。

307 317 


324 过滤会话334 过滤会话

325</h3>335</h3>

326 336 

327在调度输入中输入以过滤而不是调度:337在调度输入框开头输入以下过滤器之一,即可在输入时缩小列表范围:

328 338 

329| 过滤 | 显示 |339| 过滤 | 显示 |

330| :- | :- |340| :- | :- |

331| `a:<name>` | 运行命名代理的会话 |341| `a:<name>` | 运行命名代理的会话 |

332| `s:<state>` | 给定状态的会话,例如 `s:working`。也接受 `s:blocked` 用于等待你的所有内容 |342| `s:<state>` | 处于给定状态的会话,例如 `s:working`,或位于给定组标题下的会话,例如 `s:ready` 对应 `Ready for review`。`s:blocked` 列出所有正在等待您的会话 |

333| `#<number>` 或拉取或合并请求 URL | 处理该拉取请求或合并请求的会话 |343| `n:<text>` | 名称或第一个提示词包含该文本的会话,例如 `n:login`。需要 Claude Code v2.1.287 或更高版本 |

344| `o:<text>` | 结果包含该文本的会话,例如 `o:merged`。单独的 `o:` 会列出所有已报告结果的会话 |

345| 拉取请求或合并请求编号(例如 `#1234`)或其 URL | 正在处理该拉取请求或合并请求的会话 |

334| 任何其他 URL | 其第一个提示包含该 URL 的会话 |346| 任何其他 URL | 其第一个提示包含该 URL 的会话 |

335 347 

348要组合过滤器,请以 `a:`、`s:`、`n:` 或 `o:` 开头,再添加更多过滤器,以空格分隔。列表会显示同时匹配所有过滤器的会话。例如,`s:blocked a:reviewer` 会列出正在等待您的 `reviewer` 会话。

349 

350过滤器处于活动状态时,您折叠的组会展开以显示匹配项,并且第一个匹配项会被选中,因此按 `Enter` 即可打开它。清空输入框即可移除过滤器,这些组会再次折叠。

351 

336<h3 id="keyboard-shortcuts">352<h3 id="keyboard-shortcuts">

337 快捷键353 快捷键

338</h3>354</h3>


342| 快捷键 | 操作 |358| 快捷键 | 操作 |

343| :- | :- |359| :- | :- |

344| `↑` / `↓` | 在行之间移动 |360| `↑` / `↓` | 在行之间移动 |

345| `Enter` | 附加到选定的会话,或如果输入中有文本则调度 |361| `PgUp` / `PgDn` | 按一屏的行数向上或向下移动 |

362| `Home` / `End` | 跳到第一行或最后一行 |

363| `Enter` | 附加到选定的会话;如果输入框中的文本不是[过滤器](#filter-sessions),则提交该文本 |

346| `Space` | 打开或关闭选定会话的窥视面板 |364| `Space` | 打开或关闭选定会话的窥视面板 |

347| `Shift+Enter` | 在调度输入中插入换行符,[如在主提示中](/docs/zh-CN/terminal-config#enter-multiline-prompts) |365| `Shift+Enter` | 在调度输入中插入换行符,[如在主提示中](/docs/zh-CN/terminal-config#enter-multiline-prompts) |

348| `Ctrl+Enter` | 调度并立即附加,在终端中 `?` overlay 列出 `ctrl+enter to start and open` |366| `Ctrl+Enter` | 调度并立即附加,在终端中 `?` overlay 列出 `ctrl+enter to start and open` |


1068 1086 

1069| 版本 | 更改 |1087| 版本 | 更改 |

1070| - | - |1088| - | - |

1089| v2.1.287 | [`n:<text>` 筛选器](#filter-sessions)按名称或第一个提示词查找会话。当任何筛选器处于活动状态时,您折叠的组会展开以显示其匹配项,并且第一个匹配项被选中,因此 `Enter` 会打开它。 |

1090| v2.1.287 | 作为[窥视回复](#peek-and-reply)发送的命令会在会话当前轮次结束时运行,包括在会话自身的输入框中一键入就立即运行的命令。内容恰好为 `/stop` 的回复会立即停止会话。 |

1071| v2.1.281 | [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 限制[转移](#what-carries-over-when-you-background)到你使用 `←` 或 `/bg` 后台的会话,以及你从 agent view 调度的会话。在此版本之前,生成的会话加载每个设置源。 |1091| v2.1.281 | [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 限制[转移](#what-carries-over-when-you-background)到你使用 `←` 或 `/bg` 后台的会话,以及你从 agent view 调度的会话。在此版本之前,生成的会话加载每个设置源。 |

1072| v2.1.281 | `claude --bg` 和重启会话的命令首先检查会话目录的工作区信任。从该目录中的终端,如果你尚未接受,[信任对话框出现](#from-your-shell);在无法出现对话框的地方,例如在脚本中,命令以 [`Workspace not trusted`](/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session) 错误退出。 |1092| v2.1.281 | `claude --bg` 和重启会话的命令首先检查会话目录的工作区信任。从该目录中的终端,如果你尚未接受,[信任对话框出现](#from-your-shell);在无法出现对话框的地方,例如在脚本中,命令以 [`Workspace not trusted`](/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session) 错误退出。 |

1073| v2.1.274 | 自动更新后,你离开约一小时的 agent view 可以将自己重新启动到新的构建上。当它这样做时,它保留你打开它时的[调度默认值](#dispatch-defaults):`--model`、`--effort`、`--permission-mode`、`--allow-dangerously-skip-permissions` 和 `--agent`。在此版本之前,重新启动的 view 仅保留 `--cwd` 和配置标志,例如 `--settings` 和 `--mcp-config`,所以你之后调度的会话启动时没有这些默认值。 |1093| v2.1.274 | 自动更新后,你离开约一小时的 agent view 可以将自己重新启动到新的构建上。当它这样做时,它保留你打开它时的[调度默认值](#dispatch-defaults):`--model`、`--effort`、`--permission-mode`、`--allow-dangerously-skip-permissions` 和 `--agent`。在此版本之前,重新启动的 view 仅保留 `--cwd` 和配置标志,例如 `--settings` 和 `--mcp-config`,所以你之后调度的会话启动时没有这些默认值。 |

agents.md +1 −1

Details

55检查运行中工作的命令取决于您使用的方法:55检查运行中工作的命令取决于您使用的方法:

56 56 

57* 对于后台会话,`claude agents` 打开 [代理视图](/docs/zh-CN/agent-view):一个屏幕显示每个会话、其状态以及哪些需要您的输入。57* 对于后台会话,`claude agents` 打开 [代理视图](/docs/zh-CN/agent-view):一个屏幕显示每个会话、其状态以及哪些需要您的输入。

58* 对于当前会话中的子代理,命名的后台子代理出现在 @-mention 类型提前中,显示其状态。从 v2.1.198 开始,`/agents` 不再打开面板;它打印一个通知,指向子代理文件位置。要 [创建和编辑自定义子代理](/docs/zh-CN/sub-agents#configure-subagents),请询问 Claude 或直接编辑文件。尽管名称相似,`/agents` 与 `claude agents` 是分开的。58* 对于当前会话中的子代理,命名的后台子代理出现在 @-mention 类型提前中,显示其状态。`/agents` 命令会打印一条通知,指向子代理文件位置。要 [创建和编辑自定义子代理](/docs/zh-CN/sub-agents#configure-subagents),请询问 Claude 或直接编辑文件。尽管名称相似,`/agents` 与 `claude agents` 是分开的。

59* 对于当前会话后台运行的任何内容,`/tasks` 列出每个项目,让您检查、附加到或停止它。该列表还包括已完成的子代理。59* 对于当前会话后台运行的任何内容,`/tasks` 列出每个项目,让您检查、附加到或停止它。该列表还包括已完成的子代理。

60* 对于动态工作流,`/workflows` 列出运行和已完成的运行、每个运行所处的阶段以及有多少代理已完成。60* 对于动态工作流,`/workflows` 列出运行和已完成的运行、每个运行所处的阶段以及有多少代理已完成。

61 61 

Details

526 526 

527如果您的组织通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 策略传递 guardrail 标头,它们将被视为[需要批准的设置](/docs/zh-CN/server-managed-settings#environment-variables-and-the-approval-dialog)。527如果您的组织通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 策略传递 guardrail 标头,它们将被视为[需要批准的设置](/docs/zh-CN/server-managed-settings#environment-variables-and-the-approval-dialog)。

528 528 

529当 guardrail 在中途阻止响应时,已流式传输的文本会保留,并且回复将以 guardrail 上为被阻止响应配置的消息结尾。

530 

529<h2 id="use-the-mantle-endpoint">531<h2 id="use-the-mantle-endpoint">

530 使用 Mantle 端点532 使用 Mantle 端点

531</h2>533</h2>

artifacts.md +10 −0

Details

118 118 

119Claude 读取他人编写的页面的方式与它读取网页的方式相同,使用 [WebFetch](/docs/zh-CN/tools-reference#webfetch-tool-behavior):它获得关于所询问内容的摘要,而不是原始页面,摘要报告写入页面的说明,而不是转达它们。Claude Code 还将页面的完整源代码保存到本地文件,当 Claude 需要确切内容时可以打开该文件,例如将工件重新发布为 [编辑器](#let-someone-edit-with-you)。119Claude 读取他人编写的页面的方式与它读取网页的方式相同,使用 [WebFetch](/docs/zh-CN/tools-reference#webfetch-tool-behavior):它获得关于所询问内容的摘要,而不是原始页面,摘要报告写入页面的说明,而不是转达它们。Claude Code 还将页面的完整源代码保存到本地文件,当 Claude 需要确切内容时可以打开该文件,例如将工件重新发布为 [编辑器](#let-someone-edit-with-you)。

120 120 

121在以下情况下,除了您的权限模式或规则所要求的任何提示之外,Claude Code 还会在 Claude 读取 Artifact 之前请求您的批准:

122 

123* **没有网络访问权限的云端会话**:对于[云环境](/docs/zh-CN/cloud-environments#access-levels),即 **None** 级别。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,可以改由分类器进行批准;在 [Cowork](https://claude.com/product/cowork) 会话中,只能由您本人批准。

124* **其他组织的公开 Artifact**:即使在自动模式下,Claude Code 也会先询问您。在 Claude Code 无法询问您的情况下(例如在 `bypassPermissions` 模式下),Claude 无法读取该 Artifact。只有在[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)开启时,Claude 才能读取这些 Artifact。

125* **无法确认所有者或网络设置**:当 Claude Code 无法确认 Artifact 的创建者,或无法确认云端会话的网络设置时,它会进行询问,且您的批准仅适用于该次请求。

126* **计划模式,或已关闭功能标志获取**:在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,或者如果您关闭了[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching),Claude Code 会在 Artifact 工具读取您组织中其他人创建的 Artifact 之前进行询问。

127 

128当 Claude 使用 WebFetch 读取 Artifact 时,WebFetch 自身的[提示规则](/docs/zh-CN/tools-reference#webfetch-tool-behavior)仍然适用。

129 

121<h2 id="collect-comments-on-an-artifact">130<h2 id="collect-comments-on-an-artifact">

122 收集工件上的评论131 收集工件上的评论

123</h2>132</h2>


359| 下载 | 页面无法自行启动下载。为了让查看者保存页面生成的文件,Claude 声明下载功能。请参阅[提供文件下载](#offer-a-file-download)。 |368| 下载 | 页面无法自行启动下载。为了让查看者保存页面生成的文件,Claude 声明下载功能。请参阅[提供文件下载](#offer-a-file-download)。 |

360| 单页面 | 相对链接无法解析,因为页面旁边没有部署任何内容。对于多部分内容,Claude 使用页面内锚点而不是单独的文件。 |369| 单页面 | 相对链接无法解析,因为页面旁边没有部署任何内容。对于多部分内容,Claude 使用页面内锚点而不是单独的文件。 |

361| 源文件类型 | 发布的文件必须是 `.html`、`.htm` 或 `.md`,并且必须解码为 UTF-8,或通过其字节顺序标记解码为小端 UTF-16。Markdown 文件呈现为样式化的文档页面,带有语法突出显示的代码。无法解码或包含替换字符 `U+FFFD` 的文件会被[拒绝并显示要修复的行和列](/docs/zh-CN/errors#the-source-file-is-not-valid-utf-8-text)。 |370| 源文件类型 | 发布的文件必须是 `.html`、`.htm` 或 `.md`,并且必须解码为 UTF-8,或通过其字节顺序标记解码为小端 UTF-16。Markdown 文件呈现为样式化的文档页面,带有语法突出显示的代码。无法解码或包含替换字符 `U+FFFD` 的文件会被[拒绝并显示要修复的行和列](/docs/zh-CN/errors#the-source-file-is-not-valid-utf-8-text)。 |

371| 源文件位置 | 路径指向网络主机的文件会被拒绝,且不会被读取。有关哪些路径会被拒绝以及 Windows 上映射驱动器的例外情况,请参阅[未发布:该文件位于网络共享上](/docs/zh-CN/errors#not-published-that-file-is-on-a-network-share)。 |

362| 呈现大小 | 呈现的页面必须为 16 MiB 或更小。大型嵌入图像通常是发布因大小而失败的原因。 |372| 呈现大小 | 呈现的页面必须为 16 MiB 或更小。大型嵌入图像通常是发布因大小而失败的原因。 |

363 373 

364生成工件使用输出令牌,就像任何其他响应一样,样式化页面比相同内容作为终端文本更耗费令牌。内联 CSS、用于交互控制的 JavaScript,尤其是嵌入为数据 URI 的图像是主要贡献者。要减少工件的令牌成本:374生成工件使用输出令牌,就像任何其他响应一样,样式化页面比相同内容作为终端文本更耗费令牌。内联 CSS、用于交互控制的 JavaScript,尤其是嵌入为数据 URI 的图像是主要贡献者。要减少工件的令牌成本:

Details

148* **使用 `@` 引用文件**,而不是描述代码的位置。Claude 在响应前读取文件。148* **使用 `@` 引用文件**,而不是描述代码的位置。Claude 在响应前读取文件。

149* **直接粘贴图像**。复制/粘贴或拖放图像到提示中。149* **直接粘贴图像**。复制/粘贴或拖放图像到提示中。

150* **提供 URL** 用于文档和 API 参考。使用 `/permissions` 来允许列表经常使用的域。150* **提供 URL** 用于文档和 API 参考。使用 `/permissions` 来允许列表经常使用的域。

151* **管道数据** 通过运行 `cat error.log | claude` 直接发送文件内容。151* **通过管道传入数据**,运行 `cat error.log | claude -p "explain this error"` 直接发送文件内容。

152* **让 Claude 获取它需要的东西**。告诉 Claude 使用 Bash 命令、MCP 工具或通过读取文件来自己拉取上下文。152* **让 Claude 获取它需要的东西**。告诉 Claude 使用 Bash 命令、MCP 工具或通过读取文件来自己拉取上下文。

153 153 

154***154***

channels.md +22 −20

Details

21如果您管理 Team、Enterprise 或控制台组织,请参阅[为您的组织启用 channels](#enterprise-controls)。要构建您自己的 channel,请参阅 [Channels 参考](/docs/zh-CN/channels-reference)。21如果您管理 Team、Enterprise 或控制台组织,请参阅[为您的组织启用 channels](#enterprise-controls)。要构建您自己的 channel,请参阅 [Channels 参考](/docs/zh-CN/channels-reference)。

22 22 

23<h2 id="supported-channels">23<h2 id="supported-channels">

24 支持的 channels24 支持的频道

25</h2>25</h2>

26 26 

27每个支持的 channel 都是一个需要 [Bun](https://bun.sh) 的插件。在连接真实平台之前,要获得插件流程的实际演示,请尝试 [fakechat 快速入门](#quickstart)。27每个支持的频道都是一个需要 [Bun](https://bun.sh) 的插件。在连接真实平台之前,要获得插件流程的实际演示,请尝试 [fakechat 快速入门](#quickstart)。

28 28 

29<Tabs>29<Tabs>

30 <Tab title="Telegram">30 <Tab title="Telegram">


36 </Step>36 </Step>

37 37 

38 <Step title="安装插件">38 <Step title="安装插件">

39 在 Claude Code 中,运行:39 在终端中运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容:

40 40 

41 ```41 ```

42 /plugin install telegram@claude-plugins-official42 /plugin install telegram@claude-plugins-official


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/plugins/install#install-a-plugin):检查插件名称。48 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

49 49 

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


60 这会将其保存到 `~/.claude/channels/telegram/.env`。您也可以在启动 Claude Code 之前在 shell 环境中设置 `TELEGRAM_BOT_TOKEN`。60 这会将其保存到 `~/.claude/channels/telegram/.env`。您也可以在启动 Claude Code 之前在 shell 环境中设置 `TELEGRAM_BOT_TOKEN`。

61 </Step>61 </Step>

62 62 

63 <Step title="重启并启用 channels">63 <Step title="重启并启用频道">

64 退出 Claude Code 并使用 channel 标志重启。这会启动 Telegram 插件,它开始轮询来自您的机器人的消息:64 退出 Claude Code 并使用频道标志重启。这会启动 Telegram 插件,它开始轮询来自您的机器人的消息:

65 65 

66 ```bash theme={null}66 ```bash theme={null}

67 claude --channels plugin:telegram@claude-plugins-official67 claude --channels plugin:telegram@claude-plugins-official


71 <Step title="配对您的账户">71 <Step title="配对您的账户">

72 打开 Telegram 并向您的机器人发送任何消息。机器人会回复一个配对代码。72 打开 Telegram 并向您的机器人发送任何消息。机器人会回复一个配对代码。

73 73 

74 <Note>如果您的机器人没有响应,请确保 Claude Code 正在使用上一步中的 `--channels` 运行。机器人只能在 channel 处于活动状态时回复。</Note>74 <Note>如果您的机器人没有响应,请确保 Claude Code 正在使用上一步中的 `--channels` 运行。机器人只能在频道处于活动状态时回复。</Note>

75 75 

76 回到 Claude Code,运行:76 回到 Claude Code,运行:

77 77 


101 </Step>101 </Step>

102 102 

103 <Step title="邀请机器人加入您的服务器">103 <Step title="邀请机器人加入您的服务器">

104 转到 **OAuth2 > URL 生成器**。选择 `bot` 范围并启用这些权限:104 转到 **OAuth2 > URL 生成器**。选择 `bot` 作用域并启用这些权限:

105 105 

106 * 查看频道106 * 查看频道

107 * 发送消息107 * 发送消息


114 </Step>114 </Step>

115 115 

116 <Step title="安装插件">116 <Step title="安装插件">

117 在 Claude Code 中,运行:117 在终端中运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容:

118 118 

119 ```119 ```

120 /plugin install discord@claude-plugins-official120 /plugin install discord@claude-plugins-official


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/plugins/install#install-a-plugin):检查插件名称。126 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

127 127 

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


138 这会将其保存到 `~/.claude/channels/discord/.env`。您也可以在启动 Claude Code 之前在 shell 环境中设置 `DISCORD_BOT_TOKEN`。138 这会将其保存到 `~/.claude/channels/discord/.env`。您也可以在启动 Claude Code 之前在 shell 环境中设置 `DISCORD_BOT_TOKEN`。

139 </Step>139 </Step>

140 140 

141 <Step title="重启并启用 channels">141 <Step title="重启并启用频道">

142 退出 Claude Code 并使用 channel 标志重启。这会连接 Discord 插件,以便您的机器人可以接收和响应消息:142 退出 Claude Code 并使用频道标志重启。这会连接 Discord 插件,以便您的机器人可以接收和响应消息:

143 143 

144 ```bash theme={null}144 ```bash theme={null}

145 claude --channels plugin:discord@claude-plugins-official145 claude --channels plugin:discord@claude-plugins-official


149 <Step title="配对您的账户">149 <Step title="配对您的账户">

150 在 Discord 上向您的机器人发送私信。机器人会回复一个配对代码。150 在 Discord 上向您的机器人发送私信。机器人会回复一个配对代码。

151 151 

152 <Note>如果您的机器人没有响应,请确保 Claude Code 正在使用上一步中的 `--channels` 运行。机器人只能在 channel 处于活动状态时回复。</Note>152 <Note>如果您的机器人没有响应,请确保 Claude Code 正在使用上一步中的 `--channels` 运行。机器人只能在频道处于活动状态时回复。</Note>

153 153 

154 回到 Claude Code,运行:154 回到 Claude Code,运行:

155 155 


169 <Tab title="iMessage">169 <Tab title="iMessage">

170 查看完整的 [iMessage 插件源代码](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage)。170 查看完整的 [iMessage 插件源代码](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage)。

171 171 

172 iMessage channel 直接读取您的消息数据库,并通过 AppleScript 发送回复。它需要 macOS,不需要机器人令牌或外部服务。172 iMessage 频道直接读取您的消息数据库,并通过 AppleScript 发送回复。它需要 macOS,不需要机器人令牌或外部服务。

173 173 

174 <Steps>174 <Steps>

175 <Step title="授予完全磁盘访问权限">175 <Step title="授予完全磁盘访问权限">


179 </Step>179 </Step>

180 180 

181 <Step title="安装插件">181 <Step title="安装插件">

182 在 Claude Code 中,运行:182 在终端中运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容:

183 183 

184 ```184 ```

185 /plugin install imessage@claude-plugins-official185 /plugin install imessage@claude-plugins-official


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/plugins/install#install-a-plugin):检查插件名称。191 * 插件[在市场中找不到](/docs/zh-CN/plugins/install#install-a-plugin):检查插件名称。

192 192 

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

194 

195 如果安装摘要报告 `Run /reload-plugins to activate.`,您无需在此处理,因为下一步中的重启会加载该插件。

194 </Step>196 </Step>

195 197 

196 <Step title="重启并启用 channels">198 <Step title="重启并启用频道">

197 退出 Claude Code 并使用 channel 标志重启:199 退出 Claude Code 并使用频道标志重启:

198 200 

199 ```bash theme={null}201 ```bash theme={null}

200 claude --channels plugin:imessage@claude-plugins-official202 claude --channels plugin:imessage@claude-plugins-official


235* **Team、Enterprise 或托管控制台组织**:您的管理员必须在托管设置中[启用 channels](#enterprise-controls)237* **Team、Enterprise 或托管控制台组织**:您的管理员必须在托管设置中[启用 channels](#enterprise-controls)

236 238 

237<Steps>239<Steps>

238 <Step title="安装 fakechat channel 插件">240 <Step title="安装 fakechat 频道插件">

239 启动 Claude Code 会话并运行安装命令:241 在终端中运行 `claude` 启动 Claude Code,然后在其输入框中输入安装命令:

240 242 

241 ```text theme={null}243 ```text theme={null}

242 /plugin install fakechat@claude-plugins-official244 /plugin install fakechat@claude-plugins-official

chrome.md +14 −5

Details

107 默认启用 Chrome107 默认启用 Chrome

108</h3>108</h3>

109 109 

110为了避免每个会话都传递 `--chrome`,运行 `/chrome` 并选择"默认启用"。110要连接 Chrome 而无需每次都传递 `--chrome`,请在 CLI 会话中运行 `/chrome` 并选择 **Enabled by default**。在 [VS Code 扩展程序](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)中,在输入框中键入 `/chrome` 并打开 **Enabled by default** 开关。两者共享同一个设置,因此在任一处启用它,都会同时对 CLI 和 VS Code 启用。

111 111 

112当 Chrome 未运行时,Claude Code 正常启动。在 v2.1.211 之前,当启用了 Chrome 集成但 Chrome 未运行时,启动可能会挂起。112启用该设置且使用 Claude Code v2.1.287 或更高版本时,每个 VS Code 会话在启动时就会连接到您的浏览器,因此 Claude 无需您键入 `@browser` 即可使用它。在更早的版本中,或在关闭该设置时,VS Code 会话会在您键入 `@browser` 时连接。

113 113 

114在 [VS Code 扩展程序](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)中,只要安装了 Chrome 扩展程序,Chrome 就可用。无需额外标志。114当 Chrome 未运行时,Claude Code 正常启动。在 v2.1.211 之前,当启用了 Chrome 集成但 Chrome 未运行时,启动可能会挂起。

115 115 

116<Note>116<Note>

117 在 CLI 中默认启用 Chrome 会增加上下文使用,因为浏览器工具始终被加载。如果您注意到上下文消耗增加,请禁用此设置,仅在需要时使用 `--chrome`。117 默认启用 Chrome 会增加上下文使用,因为浏览器工具及其说明始终被加载。如果您注意到上下文消耗增加,请关闭此设置,仅在需要时连接:在 CLI 中使用 `--chrome`,或在 VS Code 输入框中键入 [`@browser`](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)。

118</Note>118</Note>

119 119 

120<h3 id="manage-site-permissions">120<h3 id="manage-site-permissions">


123 123 

124网站级权限从 Chrome 扩展程序继承。在 Chrome 扩展程序设置中管理权限,以控制 Claude 可以浏览、点击和输入的网站。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中,当自动模式分类器本身批准对网站的浏览器调用时,扩展程序会跳过该调用的自己的按网站检查,除非您的权限规则拒绝任何网站对 Claude in Chrome 的访问。124网站级权限从 Chrome 扩展程序继承。在 Chrome 扩展程序设置中管理权限,以控制 Claude 可以浏览、点击和输入的网站。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中,当自动模式分类器本身批准对网站的浏览器调用时,扩展程序会跳过该调用的自己的按网站检查,除非您的权限规则拒绝任何网站对 Claude in Chrome 的访问。

125 125 

126<h3 id="permission-prompts-in-vs-code-sessions">

127 VS Code 会话中的权限提示

128</h3>

129 

130在 VS Code 会话中,Claude Code 是否在浏览器操作前询问您,取决于该会话连接到您浏览器的方式:

131 

132* **您键入了 `@browser`**:扩展程序会批准 Claude Code 原本会询问您的每个浏览器操作。

133* **[Enabled by default](#enable-chrome-by-default) 设置在启动时建立了连接**:在 Manual、Edit automatically、Auto 和 Bypass permissions 模式下,Claude Code 会在浏览器操作前询问您,直到您在该会话中键入 `@browser`。

134 

126<h3 id="browser-tools-in-plan-mode">135<h3 id="browser-tools-in-plan-mode">

127 Plan Mode 中的浏览器工具136 Plan Mode 中的浏览器工具

128</h3>137</h3>

129 138 

130在 [plan mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)中,在 Claude 记录 GIF、打开新标签页或运行快捷方式之前会出现权限提示。如果您的会话中[可用绕过权限模式](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)且[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)已关闭,这些调用将在没有提示的情况下运行。139在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)中,在 Claude 记录 GIF、打开新标签页或运行快捷方式之前会出现权限提示,但在您键入了 [`@browser`](#permission-prompts-in-vs-code-sessions) 的 VS Code 会话中除外。在交互式 CLI 会话中,如果[可用绕过权限模式](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)且[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)已关闭,这些调用将在没有提示的情况下运行。

131 140 

132当 `tabs_context_mcp` 调用设置 `createIfEmpty` 时也会提示,包含任何这些操作的 `browser_batch` 调用也是如此。141当 `tabs_context_mcp` 调用设置 `createIfEmpty` 时也会提示,包含任何这些操作的 `browser_batch` 调用也是如此。

133 142 

Details

687 `pricing`687 `pricing`

688</h3>688</h3>

689 689 

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

691 691 

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

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


707| 字段 | 必需 | 描述 |707| 字段 | 必需 | 描述 |

708| - | - | - |708| - | - | - |

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

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

711 711 

712计量器如何匹配覆盖行:712计量器如何匹配覆盖行:

713 713 


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

743</h4>743</h4>

744 744 

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

746 746 

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

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


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

792 792 

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

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

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

796 796 

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


843 `cli` 中的内容843 `cli` 中的内容

844</h4>844</h4>

845 845 

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

847 847 

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

849 849 

850因为验证使用与网关的已安装版本捆绑的架构,将较新 Claude Code 版本引入的顶级设置键放入托管配置需要首先升级网关。在一个客户端上烟雾测试新策略,然后再推出。850因为验证使用与网关的已安装版本捆绑的 schema,将较新 Claude Code 版本引入的顶级设置键放入托管配置需要首先升级网关。在一个客户端上烟雾测试新策略,然后再推出。

851 851 

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

853 853 


874 env:874 env:

875 DISABLE_UPDATES: "1" # 通过您自己的分发固定版本875 DISABLE_UPDATES: "1" # 通过您自己的分发固定版本

876 876 

877 # 组织范围的钩子。钩子命令在开发者机器上运行,不是877 # 组织范围的 hook。hook 命令在开发者机器上运行,不是

878 # 网关,因此路径必须存在于策略中每个客户端操作系统上。878 # 网关,因此路径必须存在于策略中每个客户端操作系统上。

879 hooks:879 hooks:

880 PostToolUse:880 PostToolUse:


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

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

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

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

894| `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 或更高版本。早期客户端忽略该键。 |894| `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 或更高版本。早期客户端忽略该键。 |

895 895 

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


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

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

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

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

903 903 

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

905 905 

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

907 907 


911 911 

912[非交互式运行](/docs/zh-CN/server-managed-settings#security-approval-dialogs),例如 `claude -p` 或 Agent SDK 会话,无法显示对话框。它仅为该运行应用推送的设置,不将其记录为已批准,因此开发者的下一个交互式会话仍然显示对话框。在 v2.1.207 之前,非交互式运行将设置保存为已批准,没有后来的交互式会话显示对话框。912[非交互式运行](/docs/zh-CN/server-managed-settings#security-approval-dialogs),例如 `claude -p` 或 Agent SDK 会话,无法显示对话框。它仅为该运行应用推送的设置,不将其记录为已批准,因此开发者的下一个交互式会话仍然显示对话框。在 v2.1.207 之前,非交互式运行将设置保存为已批准,没有后来的交互式会话显示对话框。

913 913 

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

915 915 

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

917 917 

918<h4 id="context-window-in-terminal-sessions">

919 终端会话中的上下文窗口

920</h4>

921 

922通过 `/login` 登录的终端会话对 Opus 4.7 及更高版本、Sonnet 5 及更高版本以及 Fable 模型使用 1M 上下文窗口。模型 ID 无需 `[1m]` 后缀,会话在约 967K token 时压缩。在开发者机器上的 Claude Code v2.1.287 之前,除非模型 ID 以 `[1m]` 结尾,Claude Code 会将 Opus 和 Fable 模型视为具有 200K 窗口。

923 

924若要让终端会话改为在 200K 边界处压缩,请在策略的 `env` 中设置[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window):

925 

926```yaml theme={null}

927managed:

928 policies:

929 - match: {}

930 cli:

931 env:

932 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"

933```

934 

935Claude Code 应用此变量时不会向开发者显示批准对话框。该变量适用于每个模型,包括以 `[1m]` 结尾的模型 ID。

936 

937若要改为关闭 1M 上下文,请在同一 `env` 块中设置 [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](/docs/zh-CN/model-config#extended-context)。Claude Code 随后会将每个模型视为具有 200K 窗口。在交互式会话中,每个开发者需要在[批准对话框](#what-goes-in-cli)中批准此变量后,它才会生效。

938 

918<h4 id="mcp-servers-in-a-policy">939<h4 id="mcp-servers-in-a-policy">

919 策略中的 MCP 服务器940 策略中的 MCP 服务器

920</h4>941</h4>


939 960 

940网关从匹配策略的 `cli` 块和顶级网关配置派生响应的大部分:961网关从匹配策略的 `cli` 块和顶级网关配置派生响应的大部分:

941 962 

942* 模型列表,来自 `availableModels`963* 模型列表,来自 `availableModels`。[Claude Desktop 中的扩展上下文](#extended-context-in-claude-desktop)介绍每个模型的 1M 上下文选项

943* 禁用的工具,来自裸工具名称 `permissions.deny` 条目。如果您在策略的 `desktop` 块中设置 `disabledBuiltinTools`,网关提供您的值和派生列表的并集,因此您可以通过这种方式禁用更多工具,但无法重新启用您通过 `permissions.deny` 禁用的工具964* 禁用的工具,来自裸工具名称 `permissions.deny` 条目。如果您在策略的 `desktop` 块中设置 `disabledBuiltinTools`,网关提供您的值和派生列表的并集,因此您可以通过这种方式禁用更多工具,但无法重新启用您通过 `permissions.deny` 禁用的工具

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

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


964 banner: { text: "Contractor build: internal use only" }985 banner: { text: "Contractor build: internal use only" }

965```986```

966 987 

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

968 989 

969* 未知键990* 未知键

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


973 994 

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

975 996 

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

977 998 

978`blockReadsOutsideWorkingDirectories`、`disableBypassPermissionsMode`、`configRecheckIntervalMinutes` 和 `sshClientPath` 需要网关服务器上的 Claude Code v2.1.281 或更高版本。`microsoftAuthBroker` 的 `required` 值和 Microsoft 365 `managedMcpServers` 条目的 `continuousAccessEvaluation` 字段也是如此。早于 `required` 值的 Claude Desktop 版本将其读取为 `disabled`,因此仅在每个成员的 Claude Desktop 支持它后才设置 `required`。Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)列出首次读取每个键的版本。999`blockReadsOutsideWorkingDirectories`、`disableBypassPermissionsMode`、`configRecheckIntervalMinutes` 和 `sshClientPath` 需要网关服务器上的 Claude Code v2.1.281 或更高版本。`microsoftAuthBroker` 的 `required` 值和 Microsoft 365 `managedMcpServers` 条目的 `continuousAccessEvaluation` 字段也是如此。早于 `required` 值的 Claude Desktop 版本将其读取为 `disabled`,因此仅在每个成员的 Claude Desktop 支持它后才设置 `required`。Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)列出首次读取每个键的版本。

979 1000 


988 1009 

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

990 1011 

1012<h4 id="extended-context-in-claude-desktop">

1013 Claude Desktop 中的扩展上下文

1014</h4>

1015 

1016如果您从网关为 [Claude Desktop](#claude-desktop-overlay) 提供服务,其模型选择器会为每个可以使用 1M 上下文窗口运行的已列出模型提供 1M 上下文选项。这些模型包括 Claude Opus 4.6 及更高版本、Claude Sonnet 4.6 及更高版本,以及 Fable 模型。该选项是模型的 `[1m]` 变体,[扩展上下文](/docs/zh-CN/model-config#extended-context)对此有介绍。您需要网关服务器上的 Claude Code v2.1.284 或更高版本。

1017 

1018在以下情况下,[`models`](#models) 条目不会获得 1M 选项:

1019 

1020* 可以为该条目提供服务的某个上游将其映射到不支持 1M 的模型,包括网关仅在故障转移时才访问的上游

1021* 其 `id` 和任何 `upstream_model` 值都没有命名 Claude 模型,例如路由到应用推理配置文件 ARN 的自定义别名

1022 

1023要更改选择器提供的内容,请使用以下方法之一:

1024 

1025* **让用户从 1M 选项开始**:在策略的 `desktop` 块中设置 `modelPrefer1mContext: true`。尚未选择模型的用户,在第一个已列出模型具有 1M 选项时,会从该选项开始。已经选择模型的用户保留其选择。

1026* **手动提供该选项**:如果您的网关服务器运行的版本早于 v2.1.284,或某个条目未命名 Claude 模型,请这样做。在 `models` 中列出该模型两次,一次使用其普通 ID,一次附加 `[1m]`,两者使用相同的 `upstream_model` 映射。Claude Desktop 将这一对显示为一个带有 1M 选项的模型。网关提供 `[1m]` 条目时不会对其进行检查,因此仅为您的上游以 1M 提供服务的模型添加此类条目。

1027 

1028此示例为路由到应用推理配置文件的自定义别名手动提供该选项,并让新用户从该选项开始:

1029 

1030```yaml theme={null}

1031models:

1032 - id: corp-sonnet

1033 upstream_model:

1034 bedrock: arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/sonnet-5-prod

1035 - id: corp-sonnet[1m]

1036 upstream_model:

1037 bedrock: arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/sonnet-5-prod

1038 

1039managed:

1040 policies:

1041 - match: {}

1042 desktop:

1043 modelPrefer1mContext: true

1044```

1045 

1046<h5 id="remove-the-1m-option">

1047 移除 1M 选项

1048</h5>

1049 

1050要从选择器中移除该选项,请在策略 `cli` 键下的 `env` 块中设置 `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`。如果您还列出了 `id` 以 `[1m]` 结尾的条目,网关仍会提供该条目,因此也请删除该条目。

1051 

1052该变量也会传递到策略匹配的开发者的终端会话。有关它在那里的作用,请参阅[扩展上下文](/docs/zh-CN/model-config#extended-context)。

1053 

991<h4 id="precedence-with-other-managed-sources">1054<h4 id="precedence-with-other-managed-sources">

992 与其他托管来源的优先级1055 与其他托管来源的优先级

993</h4>1056</h4>


1038<Warning>1101<Warning>

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

1040 1103 

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

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

1043 1106 

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


1147 1210 

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

1149 1212 

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

1151 1214 

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

1153 1216 

1154<h3 id="http-tuning">1217<h3 id="http-tuning">

1155 HTTP 调整1218 HTTP 调整


1186 1249 

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

1188 1251 

1189下面的示例以默认值打开模式,大约 750 个令牌的文本的回复,在大约 10 秒内流:1252下面的示例以默认值打开模式,大约 750 个 token 的文本的回复,在大约 10 秒内流:

1190 1253 

1191```yaml theme={null}1254```yaml theme={null}

1192load_test_mode:1255load_test_mode:

1193 enabled: true1256 enabled: true

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

1195 reply_seconds: 9.5 # 流回复需要多长时间1258 reply_seconds: 9.5 # 流回复需要多长时间

1196```1259```

1197 1260 

1198| 字段 | 必需 | 描述 |1261| 字段 | 必需 | 描述 |

1199| - | - | - |1262| - | - | - |

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

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

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

1203 1266 

1204此模式中的负载测试涵盖网关、您的 Postgres 和网关前面的所有东西。它不涵盖提供商的限制、速度或网络路径。1267此模式中的负载测试涵盖网关、您的 Postgres 和网关前面的所有东西。它不涵盖提供商的限制、速度或网络路径。

Details

344* **主机进程流量**:主机进程是 Claude Code CLI。`claude gateway` 在与 Amazon Bedrock 和 Google Cloud 的 Agent Platform 部署相同的第三方规则下运行,不向 Anthropic 发送任何内容。在 v2.1.227 之前,主机进程发送启动遥测,例如产品版本和平台,在容器环境中设置 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` 关闭。这些版本也在启动时发送一个 `HEAD` 请求,没有正文或凭证,到 `https://api.anthropic.com` 上的 `/api/hello`,或在环境设置时的 `ANTHROPIC_BASE_URL` 上,除非环境也设置了代理变量(如 `HTTPS_PROXY`)或 mTLS 客户端证书。它们忽略了响应,因此在出口防火墙处阻止该请求不影响网关。344* **主机进程流量**:主机进程是 Claude Code CLI。`claude gateway` 在与 Amazon Bedrock 和 Google Cloud 的 Agent Platform 部署相同的第三方规则下运行,不向 Anthropic 发送任何内容。在 v2.1.227 之前,主机进程发送启动遥测,例如产品版本和平台,在容器环境中设置 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` 关闭。这些版本也在启动时发送一个 `HEAD` 请求,没有正文或凭证,到 `https://api.anthropic.com` 上的 `/api/hello`,或在环境设置时的 `ANTHROPIC_BASE_URL` 上,除非环境也设置了代理变量(如 `HTTPS_PROXY`)或 mTLS 客户端证书。它们忽略了响应,因此在出口防火墙处阻止该请求不影响网关。

345* **客户端分析**:CLI 在登录到网关时禁用自己的使用分析和错误报告。在第一次登录之前,CLI 仍然向 Anthropic 发送启动事件,包括在托管设置强制网关登录的机器上。要保持这些关闭,在强制网关登录的相同 [客户端托管设置](/docs/zh-CN/claude-apps-gateway-config#client-side-managed-settings) 中传递 [`DISABLE_TELEMETRY`](/docs/zh-CN/managed-settings#turn-telemetry-off-for-your-organization)。345* **客户端分析**:CLI 在登录到网关时禁用自己的使用分析和错误报告。在第一次登录之前,CLI 仍然向 Anthropic 发送启动事件,包括在托管设置强制网关登录的机器上。要保持这些关闭,在强制网关登录的相同 [客户端托管设置](/docs/zh-CN/claude-apps-gateway-config#client-side-managed-settings) 中传递 [`DISABLE_TELEMETRY`](/docs/zh-CN/managed-settings#turn-telemetry-off-for-your-organization)。

346* **错误报告**:每当 CLI 的模型请求去往 Anthropic 的第一方 API 以外的任何端点(如 Amazon Bedrock 或自定义 `ANTHROPIC_BASE_URL`)时,CLI 关闭错误报告。346* **错误报告**:每当 CLI 的模型请求去往 Anthropic 的第一方 API 以外的任何端点(如 Amazon Bedrock 或自定义 `ANTHROPIC_BASE_URL`)时,CLI 关闭错误报告。

347* **客户端机器**:开发者的 CLI 仍然向 Anthropic 发送 WebFetch 主机名检查和版本检查,除非设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` 和 `skipWebFetchPreflight: true`。请参阅 [数据使用](/docs/zh-CN/data-usage)。347* **客户端机器**:开发者的 CLI 仍然向 Anthropic 发送 WebFetch 主机名检查和版本检查,除非设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` 和 `skipWebFetchPreflight: true`。[插件市场请求](#plugin-marketplace-requests) 有各自的关闭开关。请参阅 [数据使用](/docs/zh-CN/data-usage)。

348* **调查评分**:在登录到网关时,CLI 禁用 Anthropic 绑定的评分上传以及分析流,因此它不向 Anthropic 发送评分。348* **调查评分**:在登录到网关时,CLI 禁用 Anthropic 绑定的评分上传以及分析流,因此它不向 Anthropic 发送评分。

349* **成绩单共享**:在调查的成绩单共享提示上选择"是"会在 `~/.claude/feedback-bundles/` 下写入本地文件,而不是上传到 Anthropic。349* **成绩单共享**:在调查的成绩单共享提示上选择"是"会在 `~/.claude/feedback-bundles/` 下写入本地文件,而不是上传到 Anthropic。

350* **客户端更新**:更新检查与网关流量分开。通过您自己的分发固定版本,如果笔记本电脑不得获取版本,设置 `DISABLE_UPDATES`。`DISABLE_AUTOUPDATER` 仅停止后台更新,而 `claude update` 仍然有效。350* **客户端更新**:更新检查与网关流量分开。通过您自己的分发固定版本,如果笔记本电脑不得获取版本,设置 `DISABLE_UPDATES`。`DISABLE_AUTOUPDATER` 仅停止后台更新,而 `claude update` 仍然有效。

351* **TLS**:在生产中通过 HTTPS 提供 `public_url`,要么从网关自己的监听器通过 `listen.tls`,要么从 TLS 终止入口在普通 HTTP 副本前面,在两种情况下都设置 `listen.public_url`。网关不拒绝普通 HTTP。IdP 必须在生产中提供 HTTPS,Postgres 支持 `?sslmode=require`。在您的入口处设置 `Strict-Transport-Security`。351* **TLS**:在生产中通过 HTTPS 提供 `public_url`,要么从网关自己的监听器通过 `listen.tls`,要么从 TLS 终止入口在普通 HTTP 副本前面,在两种情况下都设置 `listen.public_url`。网关不拒绝普通 HTTP。IdP 必须在生产中提供 HTTPS,Postgres 支持 `?sslmode=require`。在您的入口处设置 `Strict-Transport-Security`。

352* **漏洞披露**:遵循 [报告安全问题](/docs/zh-CN/security#reporting-security-issues)352* **漏洞披露**:遵循 [报告安全问题](/docs/zh-CN/security#reporting-security-issues)

353 353 

354<h3 id="plugin-marketplace-requests">

355 插件市场请求

356</h3>

357 

358Claude Code 直接从每位开发者的机器获取插件市场,而不是通过网关。[网络访问要求](/docs/zh-CN/network-config#network-access-requirements) 列出了相关主机。

359 

360开发者首次启动交互式终端会话时,Claude Code 会注册官方市场 `claude-plugins-official`。它从 `downloads.claude.ai` 下载目录,如果失败,则从 `github.com` 克隆。[哪些市场和插件会自动更新](/docs/zh-CN/plugins/loading#which-marketplaces-and-plugins-auto-update) 介绍了后续刷新。

361 

362`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` 不会阻止首次注册。以下任一托管设置可以阻止:

363 

364* **市场列表**:不包含该市场的 [`strictKnownMarketplaces`](/docs/zh-CN/plugins/org#allowlist-with-strictknownmarketplaces) 允许列表,或指明该市场的 [`blockedMarketplaces`](/docs/zh-CN/plugins/org#blocklist-with-blockedmarketplaces) 条目

365* **环境变量**:在托管的 [`env` 块](/docs/zh-CN/plugins/org#turn-updates-off-for-the-whole-fleet) 中将 `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` 设置为 `"1"`

366 

367首次注册可能在开发者登录网关之前运行,此时尚未收到任何网关策略。为覆盖首次启动,请在 [客户端托管设置](/docs/zh-CN/claude-apps-gateway-config#client-side-managed-settings) 以及网关策略的 [`cli` 块](/docs/zh-CN/claude-apps-gateway-config#what-goes-in-cli) 中同时传递您的选择。

368 

354<h2 id="troubleshooting">369<h2 id="troubleshooting">

355 故障排除370 故障排除

356</h2>371</h2>

Details

92 Claude Code 中的使用警告92 Claude Code 中的使用警告

93</h3>93</h3>

94 94 

95Claude Code 在开发者接近其上限时向其发出警告:一旦利用率超过 75%,再次超过其最消耗上限的 95%。当网关阻止请求时,Claude Code 按原样显示网关的 `429` 消息,包括你的 `admin.blocked_message`。95Claude Code 在开发者接近其上限时向其发出警告:一旦利用率超过 75% 时警告一次,超过其消耗最多的上限的 95% 时再次警告。当网关阻止请求时,Claude Code 按原样显示网关的 `429` 消息,包括您的 `admin.blocked_message`。它还会在 `/usage` 中显示该上限,并将其传递给开发者的[状态栏](/docs/zh-CN/statusline#spend-limit-fields)脚本。

96 96 

97警告基于响应标头工作:97每种显示都需要开发者机器和网关服务器上具备最低 Claude Code 版本:

98 98 

99* 在网关服务器上使用 v2.1.225 或更高版本,具有上限的开发者的每个成功 `/v1/messages` 响应在 `anthropic-ratelimit-unified-*` 标头中包含他们自己的上限利用率和重置时间。99| 开发者看到的内容 | 开发者的机器 | 网关服务器 |

100* 在开发者的机器上也使用 v2.1.225 或更高版本,Claude Code 读取标头并显示警告。100| :- | :- | :- |

101| 75% 和 95% 时的用量警告 | v2.1.225 或更高版本 | v2.1.225 或更高版本 |

102| `/usage` 中的 **Spend limit** 栏,显示其上限已使用的百分比和重置时间,以及状态栏输入中的 `rate_limits.spend_limit` 对象 | v2.1.251 或更高版本 | v2.1.225 或更高版本 |

103| **Spend limit** 栏中以美元表示的估计支出和上限,例如"\$271.40 / \$500.00 spent this month",以及状态栏输入中的相同金额和上限期间 | v2.1.284 或更高版本 | v2.1.284 或更高版本 |

101 104 

102标头始终描述开发者自己的上限:网关剥离上游提供商的速率限制标头(描述你的共享配额),从不转发它们。105警告和百分比来自 `anthropic-ratelimit-unified-*` 标头,网关会将这些标头添加到具有上限的开发者的每个成功 `/v1/messages` 响应中。标头始终描述开发者自己的上限:网关会剥离上游提供商的速率限制标头(这些标头描述您的共享配额),从不转发它们。

103 106 

104在开发者的机器上使用 v2.1.251 或更高版本,Claude Code 也读取相同的标头以在 `/usage` 中显示 **Spend limit** 栏,显示其上限使用的百分比和何时重置,并向 [status line](/docs/zh-CN/statusline#rate-limit-usage) 输入添加 `rate_limits.spend_limit` 对象。Claude Code 将两者显示为百分比而不是美元金额,并且不需要网关服务器上的版本比 v2.1.225 更新。107开发者看到的支出是网关自身的[估计值](#how-requests-are-priced),即网关用于执行上限的同一数值,而不是来自您的提供商账单的金额。Claude Code 通过向网关发送单独的请求来读取美元金额。如果您按照 [Compliance posture](/docs/zh-CN/claude-apps-gateway-deploy#compliance-posture) 的建议在开发者的机器上设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`,Claude Code 会跳过该请求。设置了该变量时,或者网关服务器版本早于 v2.1.284 时,该栏和状态栏仅显示百分比。

105 108 

106<h2 id="admin-api-reference">109<h2 id="admin-api-reference">

107 Admin API 参考110 Admin API 参考

Details

135 发送没有 GitHub 的本地存储库135 发送没有 GitHub 的本地存储库

136</h4>136</h4>

137 137 

138当您从没有 git 远程的存储库运行 `claude --cloud` 时,或从 Claude GitHub App 未安装的 github.com 存储库运行时,Claude Code 会捆绑您的本地存储库并直接上传到云会话。即使您使用 `/web-setup` 连接了 GitHub,这也适用。该捆绑包包括您在所有分支上的完整存储库历史记录,加上对跟踪文件的未提交更改。138当您从没有 git 远程的仓库运行 `claude --cloud` 时,或从未安装 Claude GitHub App 的 github.com 仓库运行时,Claude Code 会将您的本地仓库打包并直接上传到云端会话。即使您使用 `/web-setup` 连接了 GitHub,这也适用。

139 139 

140在 macOS、Linux 和 WSL 上,Claude Code 将未提交的更改排除在上传之外,这些更改涉及名称类似于凭据或密钥的文件,并命名它排除的文件。这涵盖 `.env` 文件、Terraform `*.tfvars` 文件和密钥文件,例如 `id_rsa` 和 `*.pem`。会话以每个文件的已提交版本启动,或如果未提交任何内容,则不包含该文件。140对于完整克隆,该捆绑包包括您在所有分支上的仓库历史记录,加上对已跟踪文件的未提交更改。

141 

142敏感文件中的未提交更改如何处理取决于您的平台:

143 

144* **macOS、Linux 和 WSL**:Claude Code 会将名称类似于凭据或密钥的文件的未提交更改排除在上传之外。这涵盖 `.env` 文件、Terraform `*.tfvars` 文件以及密钥文件,例如 `id_rsa` 和 `*.pem`。它还会排除由 git 过滤器(例如 Git LFS)管理的文件的未提交更改。`Left on this machine:` 通知会列出被排除的文件,会话以每个文件的已提交版本启动,如果该文件没有任何已提交版本,则不包含该文件。

145* **原生 Windows**:对已跟踪文件的未提交更改会按原样上传,无论文件名称如何。在启动云端会话之前,请先 stash 或还原您不希望出现在云端会话中的编辑。

141 146 

142要在 Claude Code 会克隆远程时上传捆绑包,请设置 `CCR_FORCE_BUNDLE=1`:147要在 Claude Code 会克隆远程时上传捆绑包,请设置 `CCR_FORCE_BUNDLE=1`:

143 148 


153* 在 macOS、Linux 和 WSL 上,当 Claude Code 无法遵循影响哪些属性规则适用于您的文件的 git 设置时,它会拒绝上传,例如在包含的配置文件中设置的 `core.attributesFile`。[拒绝消息](/docs/zh-CN/errors#the-repository-upload-cant-follow-a-git-setting) 命名该设置和修复158* 在 macOS、Linux 和 WSL 上,当 Claude Code 无法遵循影响哪些属性规则适用于您的文件的 git 设置时,它会拒绝上传,例如在包含的配置文件中设置的 `core.attributesFile`。[拒绝消息](/docs/zh-CN/errors#the-repository-upload-cant-follow-a-git-setting) 命名该设置和修复

154* 从捆绑创建的会话只有在您的 [GitHub 连接](#github-authentication-options) 对该存储库具有推送访问权限时,才能推送回 GitHub 远程159* 从捆绑创建的会话只有在您的 [GitHub 连接](#github-authentication-options) 对该存储库具有推送访问权限时,才能推送回 GitHub 远程

155 160 

161在 macOS、Linux 和 WSL 上,上传还需要 git 2.31 或更高版本以及受支持的检出布局,而在原生 Windows 上,Claude Code 上传时不进行这两项检查。当检出不满足这些要求时,Claude Code 不会启动会话。它会打印一条包含 `Not uploading this working tree:` 的错误,指明原因并说明需要更改的内容。以下是常见原因:

162 

163* **较旧的 git**:已安装的 git 早于 2.31。请更新 git,然后重试。

164* **上传不支持的检出布局**:您在子模块内启动、在使用 `git clone --separate-git-dir`、`--shared` 或 `--reference` 创建的克隆中启动、在设置了 `core.worktree` 的检出中启动,或在以 reftable 格式保存 refs 的仓库中启动。请改为从使用普通 `git clone` 创建的克隆的主检出启动。

165* **带有稀疏检出的链接 worktree**:`git sparse-checkout` 会将设置写入该 worktree 自己的 `config.worktree` 文件,而上传不接受该文件,因此具有这些设置的 worktree 不会被上传,Claude Code 使用 [`worktree.sparsePaths`](/docs/zh-CN/settings-reference#worktree-sparsepaths) 创建的 worktree 也不会被上传。请改为从仓库的主检出启动。

166* **保存在工作树内的 git 配置**:您的 git 配置包含位于检出内部的文件,例如指向仓库内部的 `include.path` 条目。请将该文件移到工作树之外或删除该 include,然后重试。

167 

168在 macOS、Linux 和 WSL 上,使用 `git clone --filter` 创建的部分克隆会作为其工作树的快照上传,不包含历史记录,前提是该克隆在本地拥有每个已跟踪文件。

169 

170对于 `claude --cloud`,如果仓库位于 GitHub 上,您可以避免上传及其要求:推送您的分支,在仓库上安装 Claude GitHub App,然后再次启动会话,使其从 GitHub 克隆。

171 

156<h3 id="send-follow-ups-from-the-cli">172<h3 id="send-follow-ups-from-the-cli">

157 从 CLI 发送后续消息173 从 CLI 发送后续消息

158</h3>174</h3>


227| 分支可用 | 来自云会话的分支必须已推送到远程。Teleport 会自动获取并检出它。 |243| 分支可用 | 来自云会话的分支必须已推送到远程。Teleport 会自动获取并检出它。 |

228| 相同账户 | 您必须使用云会话中使用的相同 claude.ai 账户进行身份验证。 |244| 相同账户 | 您必须使用云会话中使用的相同 claude.ai 账户进行身份验证。 |

229 245 

246当 teleport 获取会话的分支时,获取操作永远不会在您的终端中等待输入。如果 git 或 ssh 需要询问密码、密钥口令或确认新的 SSH 主机,获取就会失败,此时只有当您的本地克隆已包含该分支时,检出才能成功。对于两种 SSH 情况,请将您的密钥加载到 `ssh-agent` 中,并先手动运行一次 `git fetch` 以记录该主机。

247 

230<h4 id="teleport-is-unavailable">248<h4 id="teleport-is-unavailable">

231 `--teleport` 不可用249 `--teleport` 不可用

232</h4>250</h4>

Details

1620| `cache/changelog.md` | Claude Code changelog 的缓存副本,由 `/release-notes` 显示。在后台刷新。 |1620| `cache/changelog.md` | Claude Code changelog 的缓存副本,由 `/release-notes` 显示。在后台刷新。 |

1621| `policy-limits.json` | 为您的组织缓存的功能策略设置。仅对某些账户类型存在。自动刷新。`policy-limits.json.stamp.json` sidecar 记录缓存属于哪个账户或 API 密钥。Claude Code 在您注销时删除两个文件。 |1621| `policy-limits.json` | 为您的组织缓存的功能策略设置。仅对某些账户类型存在。自动刷新。`policy-limits.json.stamp.json` sidecar 记录缓存属于哪个账户或 API 密钥。Claude Code 在您注销时删除两个文件。 |

1622 1622 

1623<span id="state-files-to-keep" />1623<h4 id="state-files-to-keep">

1624 需保留的状态文件

1625</h4>

1624 1626 

1625其他文件根据您使用的功能而出现。缓存和锁定文件可以安全删除。保留这些状态文件:1627根据您使用的功能,`~/.claude/` 中还会保存[应用数据](#application-data)下各表未列出的文件。其中,缓存和锁定文件可以安全删除。请保留以下状态文件:

1626 1628 

1627* `.credentials.json`:您的 [login credentials](/docs/zh-CN/authentication#credential-management)1629* `.credentials.json`:您的 [login credentials](/docs/zh-CN/authentication#credential-management)

1628* `agent-memory/`:[subagent memory](/docs/zh-CN/sub-agents#enable-persistent-memory)1630* `agent-memory/`:[subagent memory](/docs/zh-CN/sub-agents#enable-persistent-memory)

Details

232 232 

233对于 CI 和自动化,为运行程序提供具有调用 Anthropic 服务权限的 IAM 角色,并设置 `AWS_REGION`。凭证链会自动获取该角色。233对于 CI 和自动化,为运行程序提供具有调用 Anthropic 服务权限的 IAM 角色,并设置 `AWS_REGION`。凭证链会自动获取该角色。

234 234 

235如果您的 SSO 凭证在会话中途过期,请配置 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration),以便 Claude Code 重新运行您的登录命令并重试,而不是失败。AWS 上的 Claude Platform 上的自动刷新需要 Claude Code v2.1.198 或更高版本;较早的版本会停止并提示运行 `/login`,这无法刷新 AWS 凭证。将命令添加到您的[设置文件](/docs/zh-CN/settings),例如 `~/.claude/settings.json`:235如果您的 SSO 凭据在会话中途过期,请配置 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration),以便 Claude Code 重新运行您的登录命令并重试,而不是失败。将命令添加到您的[设置文件](/docs/zh-CN/settings),例如 `~/.claude/settings.json`:

236 236 

237```json theme={null}237```json theme={null}

238{238{

Details

40 安装插件40 安装插件

41</h2>41</h2>

42 42 

43在 Claude Code 会话中,从[官方 Anthropic 市场](/docs/zh-CN/plugins/anthropic-marketplaces)安装:43在 VS Code 扩展或桌面应用中,请按照[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)进行安装。在终端中,运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容,从[官方 Anthropic 市场](/docs/zh-CN/plugins/anthropic-marketplaces)安装:

44 44 

45```text theme={null}45```text theme={null}

46/plugin install claude-security@claude-plugins-official46/plugin install claude-security@claude-plugins-official

cli-reference.md +11 −3

Details

26| `claude install [version]` | 安装或重新安装本机二进制文件。接受版本号如 `2.1.118`、`stable` 或 `latest`。请参阅 [安装特定版本](/docs/zh-CN/setup#install-a-specific-version) | `claude install stable` |26| `claude install [version]` | 安装或重新安装本机二进制文件。接受版本号如 `2.1.118`、`stable` 或 `latest`。请参阅 [安装特定版本](/docs/zh-CN/setup#install-a-specific-version) | `claude install stable` |

27| `claude auth login` | 登录您的 Anthropic 账户。使用 `--email` 预填充您的电子邮件地址,使用 `--sso` 强制 SSO 身份验证,使用 `--console` 使用 Anthropic Console 登录以进行 API 使用计费而不是 Claude 订阅 | `claude auth login --console` |27| `claude auth login` | 登录您的 Anthropic 账户。使用 `--email` 预填充您的电子邮件地址,使用 `--sso` 强制 SSO 身份验证,使用 `--console` 使用 Anthropic Console 登录以进行 API 使用计费而不是 Claude 订阅 | `claude auth login --console` |

28| `claude auth logout` | 从您的 Anthropic 账户登出 | `claude auth logout` |28| `claude auth logout` | 从您的 Anthropic 账户登出 | `claude auth logout` |

29| `claude auth status` | 以 JSON 格式显示身份验证状态。使用 `--text` 获取人类可读的输出。如果已登录,则以代码 0 退出,如果未登录,则以代码 1 退出。JSON 包含一个 `configDirectory` 字段,命名 CLI 使用的 [配置目录](/docs/zh-CN/claude-directory)。该字段需要 Claude Code v2.1.268 或更高版本 | `claude auth status` |29| `claude auth status` | 以 JSON 格式显示身份验证状态。使用 `--text` 获取人类可读的输出。如果已登录,则以代码 0 退出,如果未登录,则以代码 1 退出。JSON 包含一个 `configDirectory` 字段,命名 CLI 使用的 [配置目录](/docs/zh-CN/claude-directory)。该字段需要 Claude Code v2.1.268 或更高版本。JSON 的 `authMethod` 字段取值为 `none`、`claude.ai`、`oauth_token`、`api_key`、`api_key_helper` 或 `third_party` 之一 | `claude auth status` |

30| `claude agents` | 打开 [agent view](/docs/zh-CN/agent-view) 以监控和分派并行后台会话。使用 `--cwd <path>` 仅显示在该目录下启动的会话,或使用 `--json` 将实时会话打印为 JSON 数组以供脚本使用(`--json --all` 也包括已完成的后台会话)。传递 `--permission-mode`、`--model`、`--effort` 或 `--agent` 以设置 [分派会话的默认值](/docs/zh-CN/agent-view#permission-mode-model-and-effort)。接受 `--settings`、`--add-dir`、`--plugin-dir` 和 `--mcp-config`,如顶级 `claude` 命令。打开 agent view 需要交互式终端 | `claude agents --json` |30| `claude agents` | 打开 [agent view](/docs/zh-CN/agent-view) 以监控和分派并行后台会话。使用 `--cwd <path>` 仅显示在该目录下启动的会话,或使用 `--json` 将实时会话打印为 JSON 数组以供脚本使用(`--json --all` 也包括已完成的后台会话)。传递 `--permission-mode`、`--model`、`--effort` 或 `--agent` 以设置 [分派会话的默认值](/docs/zh-CN/agent-view#permission-mode-model-and-effort)。接受 `--settings`、`--add-dir`、`--plugin-dir` 和 `--mcp-config`,如顶级 `claude` 命令。打开 agent view 需要交互式终端 | `claude agents --json` |

31| `claude attach <id>` | 在此终端中附加到 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) | `claude attach 7c5dcf5d` |31| `claude attach <id>` | 在此终端中附加到 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | 以 JSON 格式打印内置 [auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置。`--label <prefix>` 仅打印标签以该前缀开头的规则,不区分大小写匹配。需要 Claude Code v2.1.208 或更高版本 | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | 以 JSON 格式打印内置 [auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置。`--label <prefix>` 仅打印标签以该前缀开头的规则,不区分大小写匹配。需要 Claude Code v2.1.208 或更高版本 | `claude auto-mode defaults --label 'Git Destructive'` |


117| `--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| `--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"` |

118| `--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-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` |

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

120| `--print`, `-p` | 打印响应而不进行交互模式(有关编程使用详情,请参阅 [Agent SDK 文档](/docs/zh-CN/agent-sdk/overview))。对于在仍在运行的后台会话上 `--resume`,请参阅[恢复会话](/docs/zh-CN/sessions#resume-a-running-background-session) | `claude -p "query"` |120| `--print`, `-p` | 打印回复而不进入交互模式(有关编程使用详情,请参阅 [Agent SDK 文档](/docs/zh-CN/agent-sdk/overview))。关于对仍在运行的后台会话使用 `--resume`,请参阅[恢复正在运行的后台会话](/docs/zh-CN/sessions#resume-a-running-background-session) | `claude -p "query"` |

121| `--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"` |121| `--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"` |

122| `--ref <branch>` | 使用 `--environment`,基于命名的 ref 而不是本地 `HEAD` 的新会话检出 | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |122| `--ref <branch>` | 使用 `--environment`,基于命名的 ref 而不是本地 `HEAD` 的新会话检出 | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |

123| `--remote` | `--cloud` 的已弃用别名,包括现有会话形式 | `claude --remote "Fix the login bug"` |123| `--remote` | `--cloud` 的已弃用别名,包括现有会话形式 | `claude --remote "Fix the login bug"` |


156| `--append-system-prompt-file` | 将文件内容附加到默认提示 | `claude --append-system-prompt-file ./style-rules.txt` |156| `--append-system-prompt-file` | 将文件内容附加到默认提示 | `claude --append-system-prompt-file ./style-rules.txt` |

157| `--system-prompt-snapshot` | 使用 `off`,在每个请求上重建提示。使用 `on`(默认),重用[记录应用的](#system-prompt-flags-in-resumed-conversations)记录的提示 | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |157| `--system-prompt-snapshot` | 使用 `off`,在每个请求上重建提示。使用 `on`(默认),重用[记录应用的](#system-prompt-flags-in-resumed-conversations)记录的提示 | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |

158 158 

159`--system-prompt` 和 `--system-prompt-file` 互斥。附加标志可以与任一替换标志组合。159您可以组合使用这些标志。要替换默认提示词并仍然附加您自己的文本,请将 `--append-system-prompt` 或 `--append-system-prompt-file` 与 `--system-prompt` 或 `--system-prompt-file` 一起传递。在 Claude Code v2.1.283 或更高版本中,您还可以将某个标志与其自身的文件形式一起传递,例如将 `--append-system-prompt` 与 `--append-system-prompt-file` 一起使用,Claude Code 会同时使用两者。

160 

161例如,在 shell 中运行以下命令,以同时附加来自文件的样式指南和一条额外的指令:

162 

163```bash theme={null}

164claude -p --append-system-prompt-file ./style.md --append-system-prompt "Always reply in French" "Summarize README.md"

165```

166 

167Claude 收到的是默认系统提示词,后跟 `style.md` 的内容、一个空行,然后是 `Always reply in French`。即使您在 `--append-system-prompt-file` 之前传递 `--append-system-prompt`,文件的内容也会排在前面。

160 168 

161当替换文本将每次运行相同的指令与每次运行变化的上下文结合时,添加仅包含 `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` 的行在指令和上下文之间。Claude Code 在第一个这样的行处分割提示并删除该行,因此上面的部分保持缓存而下面的部分变化。需要 Claude Code v2.1.275 或更高版本。[缓存自定义提示的静态部分](/docs/zh-CN/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt)列出应用分割的配置。169当替换文本将每次运行相同的指令与每次运行变化的上下文结合时,添加仅包含 `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` 的行在指令和上下文之间。Claude Code 在第一个这样的行处分割提示并删除该行,因此上面的部分保持缓存而下面的部分变化。需要 Claude Code v2.1.275 或更高版本。[缓存自定义提示的静态部分](/docs/zh-CN/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt)列出应用分割的配置。

162 170 

Details

271 271 

272* **Git 凭证**:VM 内的 git 客户端使用范围受限的凭证,代理验证并将其交换为您的实际 GitHub 令牌。272* **Git 凭证**:VM 内的 git 客户端使用范围受限的凭证,代理验证并将其交换为您的实际 GitHub 令牌。

273* **API 请求**:来自内置 GitHub 工具的请求,以及来自 [`proxy-injected` 占位符](#work-with-github-issues-and-pull-requests)下的 `gh` 的请求,会在替换为您的真实凭证后发出。273* **API 请求**:来自内置 GitHub 工具的请求,以及来自 [`proxy-injected` 占位符](#work-with-github-issues-and-pull-requests)下的 `gh` 的请求,会在替换为您的真实凭证后发出。

274* **推送保护**:`git push` 仅适用于会话的当前工作分支;克隆、获取和 PR 操作正常工作。274* **推送限制**:代理会拒绝分支删除,以及推送分支以外的任何内容(例如标签)。它不限制推送可以更新哪些分支。如需限制,请在 GitHub 上使用分支保护规则或规则集。

275* **存储库范围**:GitHub API 和发布资产请求仅能到达附加到会话的存储库,因此从未附加的存储库下载发布资产的设置脚本会收到 403。275* **存储库范围**:GitHub API 和发布资产请求仅能到达附加到会话的存储库,因此从未附加的存储库下载发布资产的设置脚本会收到 403。

276* **GraphQL 限制**:代理仅提供一组固定的 GraphQL 操作用于拉取请求工作流。代理在 GraphQL 端点上拒绝所有其他内容,返回 403,显示 `This GraphQL query is not enabled for this session`,并命名 REST 回退 `gh api repos/{owner}/{repo}/...`。无论您提供的凭证如何,限制都适用于通过代理的每个请求,因此您设置的 `GH_TOKEN` 会收到相同的 403。Claude 无法通过代理访问仅存在于 GraphQL 中的 GitHub API,例如 Projects v2。276* **GraphQL 限制**:代理仅提供一组固定的 GraphQL 操作用于拉取请求工作流。代理在 GraphQL 端点上拒绝所有其他内容,返回 403,显示 `This GraphQL query is not enabled for this session`,并命名 REST 回退 `gh api repos/{owner}/{repo}/...`。无论您提供的凭证如何,限制都适用于通过代理的每个请求,因此您设置的 `GH_TOKEN` 会收到相同的 403。Claude 无法通过代理访问仅存在于 GraphQL 中的 GitHub API,例如 Projects v2。

277 277 

code-review.md +2 −4

Details

391审查默认在后台运行;在 v2.1.218 之前,它在您的对话中运行。在以下情况下它在前台运行:391审查默认在后台运行;在 v2.1.218 之前,它在您的对话中运行。在以下情况下它在前台运行:

392 392 

393* 您在较早的审查仍在进行时再次运行 `/code-review`393* 您在较早的审查仍在进行时再次运行 `/code-review`

394* 您以非交互式模式运行它,使用 `-p` 标志或 Agent SDK;Claude Code 等待审查并在响应中包含发现,除了 `ultra`,它[启动云审查而不等待](#escalate-to-ultrareview)394* 您以非交互模式运行它,使用 `-p` 标志或 Agent SDK;Claude Code 等待审查并在响应中包含发现,除了 `ultra`,它[不等待云审查](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively)

395* 您将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,这也关闭了所有其他后台任务功能395* 您将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,这也关闭了所有其他后台任务功能

396 396 

397<h3 id="let-claude-start-the-review">397<h3 id="let-claude-start-the-review">


428 Ultrareview 需要使用 claude.ai 账户进行身份验证,在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用,或对启用了零数据保留的组织不可用。当 ultrareview 不可用时,`/code-review ultra` 在您的会话中运行本地审查。428 Ultrareview 需要使用 claude.ai 账户进行身份验证,在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用,或对启用了零数据保留的组织不可用。当 ultrareview 不可用时,`/code-review ultra` 在您的会话中运行本地审查。

429</Note>429</Note>

430 430 

431要从脚本或 CI 启动云审查,请运行 `claude -p '/code-review ultra'`。Claude Code 启动审查并打印用于跟踪它的链接。需要 Claude Code v2.1.218 或更高版本。431要从脚本或 CI 作业运行云审查,请使用 [`claude ultrareview` 子命令](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively),它会等待发现并将其打印到 stdout。

432 

433当审查会计费[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)时,Claude Code 在启动前停止,因为计费确认需要交互式会话。改为运行[`claude ultrareview` 子命令](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively);通过运行它,您同意该费用。

434 432 

435该命令在 v2.1.147 之前被命名为 `/simplify`,当时它默认应用修复。`/simplify` 运行单独的仅清理审查,应用修复而不寻找错误。如果您为错误查找编写了 `/simplify` 脚本,请切换到 `/code-review --fix`。433该命令在 v2.1.147 之前被命名为 `/simplify`,当时它默认应用修复。`/simplify` 运行单独的仅清理审查,应用修复而不寻找错误。如果您为错误查找编写了 `/simplify` 脚本,请切换到 `/code-review --fix`。

436 434 

commands.md +120 −119

Details

36 所有命令36 所有命令

37</h2>37</h2>

38 38 

39下表列出了 Claude Code 中包含的所有命令。大多数是内置命令,其行为被编码到 CLI 中。两种条目被标记:39下表列出了 Claude Code 中包含的所有命令。大多数是内置命令,其行为编码在 CLI 中。有两类条目带有标记:

40 40 

41* **[Skill](/docs/zh-CN/skills#bundled-skills)**:一个捆绑的 skill。它的工作方式与你自己编写的 skill 相同:一个提示词交给 Claude。41* **[Skill](/docs/zh-CN/skills#bundled-skills)**:随附 skill。它的工作方式与您自己编写的 skill 相同:是交给 Claude 的提示词。

42 * `/verify` 仅在你调用它时运行。在 v2.1.215 之前,Claude 也可以自己运行 `/verify`。42 * `/verify` 仅在您调用时运行。在 v2.1.215 之前,Claude 也可以自行运行 `/verify`。

43* **[Workflow](/docs/zh-CN/workflows#bundled-workflows)**:一个捆绑的[动态 workflow](/docs/zh-CN/workflows),它将工作分散到许多子代理中,并在后台运行。43* **[工作流](/docs/zh-CN/workflows#bundled-workflows)**:随附的[动态工作流](/docs/zh-CN/workflows),会将工作分发到多个子代理并在后台运行。

44 * `/deep-research` 仅在你调用它时运行。在 v2.1.218 之前,Claude 也可以自己启动它。44 * `/deep-research` 仅在您调用时运行。在 v2.1.218 之前,Claude 也可以自行启动它。

45 45 

46要添加你自己的命令,请参阅 [skills](/docs/zh-CN/skills)。46要添加您自己的命令,请参阅 [skill](/docs/zh-CN/skills)。

47 47 

48在下表中,`<arg>` 表示必需的参数,`[arg]` 表示可选参数。48在下表中,`<arg>` 表示必需参数,`[arg]` 表示可选参数。

49 49 

50<Note>50<Note>

51 并非每个命令都对每个用户显示。可用性取决于你的平台、计划和环境。例如,`/desktop` 仅在 macOS 和 x64 Windows 上使用 Claude 订阅登录时显示,`/upgrade` 在企业计划上不显示。51 并非每个命令都会对每个用户显示。可用性取决于您的平台、套餐和环境。例如,`/desktop` 仅在使用 Claude 订阅登录时才会在 macOS 和 x64 Windows 上显示,而 `/upgrade` 不会在 Enterprise 套餐上显示。

52</Note>52</Note>

53 53 

54| 命令 | 目的 |54| 命令 | 用途 |

55| :- | :- |55| :- | :- |

56| `/add-dir <path>` | 添加一个工作目录以在当前会话期间进行文件访问。输入部分路径以查看匹配的目录建议;按 `Tab` 接受一个。大多数 `.claude/` 配置[不会从添加的目录中被发现](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。你无法添加大多数[网络路径](/docs/zh-CN/errors#working-directory-is-a-network-path),例如 `\\server\share`。成功添加后,你的 [`DirectoryAdded` hooks](/docs/zh-CN/hooks#directoryadded) 会运行。当你在 Claude 响应时运行它时,Claude Code 会要求你立即确认目录,一旦你确认,Claude 在同一轮中的下一个工具调用就可以访问它。在 v2.1.234 之前,Claude Code 会将命令排队直到轮次完成 |56| `/add-dir <path>` | 添加一个工作目录,以便在当前会话期间访问文件。输入部分路径可查看匹配的目录建议;按 `Tab` 接受其中一个。大多数 `.claude/` 配置[不会从添加的目录中被发现](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。您无法添加大多数[网络路径](/docs/zh-CN/errors#working-directory-is-a-network-path),例如 `\\server\share`。成功添加后,您的 [`DirectoryAdded` hook](/docs/zh-CN/hooks#directoryadded) 会运行。如果在 Claude 回复时运行此命令,Claude Code 会立即要求您确认该目录,确认后,Claude 在同一轮次中的下一次工具调用即可访问该目录。在 v2.1.234 之前,Claude Code 会将该命令排队,直到该轮次结束 |

57| `/advisor [model\|off]` | 启用或禁用[顾问工具](/docs/zh-CN/advisor),它在任务期间的关键时刻咨询第二个模型以获得指导。接受 `fable`、`opus`、`sonnet` 或完整的模型 ID。`fable` 需要 [Fable 访问权限](/docs/zh-CN/advisor#choose-an-advisor-model)。没有参数时,打开一个选择器。在没有交互式终端的会话中,或通过 [Remote Control](/docs/zh-CN/remote-control#limitations),将模型或 `off` 作为参数传递;在那里没有参数时,命令将当前顾问打印为文本。这些形式需要 Claude Code v2.1.260 或更高版本 |57| `/advisor [model\|off]` | 启用或禁用[顾问工具](/docs/zh-CN/advisor),它会在任务的关键时刻咨询第二个模型以获取指导。接受 `fable`、`opus`、`sonnet` 或完整的模型 ID。`fable` 需要 [Fable 访问权限](/docs/zh-CN/advisor#choose-an-advisor-model)。不带参数时,打开选择器。在没有交互式终端的会话中,或通过 [Remote Control](/docs/zh-CN/remote-control#limitations) 使用时,请将模型或 `off` 作为参数传递;在这些情况下不带参数时,该命令会以文本形式输出当前顾问。这些形式需要 Claude Code v2.1.260 或更高版本 |

58| `/agents` | 从 v2.1.198 开始,运行 `/agents` 会打印一个提醒,要求你要求 Claude 创建或管理[子代理](/docs/zh-CN/sub-agents),或直接编辑 `.claude/agents/` 或 `~/.claude/agents/`。在 v2.1.197 及更早版本上,打开一个交互式界面来创建和管理子代理配置 |58| `/agents` | 输出一条提醒,提示您请 Claude 创建或管理[子代理](/docs/zh-CN/sub-agents),或直接编辑 `.claude/agents/` 或 `~/.claude/agents/`。在 v2.1.197 及更早版本中,打开用于创建和管理子代理配置的交互式界面 |

59| `/artifact-capabilities` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载已发布[工件](/docs/zh-CN/artifacts)可以使用的运行时功能的参考,例如[调用你的连接器](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)或[提供文件下载](/docs/zh-CN/artifacts#offer-a-file-download),包括你的账户拥有的功能。Claude 通常在构建使用其中一个的页面之前自己加载它。在[工件](/docs/zh-CN/artifacts#availability)可用的地方可用 |59| `/artifact-capabilities` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载已发布的 [Artifact](/docs/zh-CN/artifacts) 可使用的运行时功能参考,例如[调用您的连接器](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)或[提供文件下载](/docs/zh-CN/artifacts#offer-a-file-download),包括您的账户拥有哪些功能。Claude 通常会在构建使用其中某项功能的页面之前自行加载它。在 [Artifact 可用](/docs/zh-CN/artifacts#availability)的地方可用 |

60| `/artifact-diagramming` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为 Claude 在[工件](/docs/zh-CN/artifacts)中遵循的图表加载指导:何时图表有帮助、要绘制什么,以及如何编写在浅色和深色主题中保持清晰的内联 SVG。需要 Claude Code v2.1.221 或更高版本 |60| `/artifact-diagramming` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载供 Claude 在 [Artifact](/docs/zh-CN/artifacts) 中遵循的绘图指导:何时使用图表有帮助、绘制什么,以及如何编写在浅色和深色主题下都清晰可读的内联 SVG。需要 Claude Code v2.1.221 或更高版本 |

61| `/artifacts` | 列出你拥有或与你共享的[工件](/docs/zh-CN/artifacts#find-an-artifact-again),然后将其附加到会话、在浏览器中打开或复制其链接。在[工件](/docs/zh-CN/artifacts#availability)可用的地方可用。需要 Claude Code v2.1.208 或更高版本;使用 `Enter` 附加需要 v2.1.216 |61| `/artifacts` | 列出您拥有的或与您共享的 [Artifact](/docs/zh-CN/artifacts#find-an-artifact-again),然后将其中一个附加到会话、在浏览器中打开,或复制其链接。在 [Artifact 可用](/docs/zh-CN/artifacts#availability)的地方可用。需要 Claude Code v2.1.208 或更高版本;使用 `Enter` 附加需要 v2.1.216 |

62| `/auto-mode-setup` | [从你的项目和最近的会话中起草 `autoMode.environment` 条目](/docs/zh-CN/auto-mode-config#generate-environment-entries),然后审查草稿并将其保存到你的用户设置。需要 Pro、Max 或 Team 计划以及 Claude Code v2.1.228 或更高版本。在原生 Windows 上,需要 v2.1.233 或更高版本 |62| `/auto-mode-setup` | 根据您的项目和最近的会话[起草 `autoMode.environment` 条目](/docs/zh-CN/auto-mode-config#generate-environment-entries),然后审阅草稿并将其保存到您的用户设置中。需要 Pro、Max 或 Team 套餐以及 Claude Code v2.1.228 或更高版本。在原生 Windows 上,需要 v2.1.233 或更高版本 |

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

64| `/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) |64| `/autofix-pr [prompt]` | 生成一个[云端会话](/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 以及[云端会话](/docs/zh-CN/claude-code-on-the-web)访问权限 |

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

66| `/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` |66| `/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 仓库,或一个用于创建 worktree 的 [`WorktreeCreate` hook](/docs/zh-CN/worktrees#non-git-version-control)。在 git 仓库之外,`/batch` 需要 Claude Code v2.1.281 或更高版本。示例:`/batch migrate src/ from JavaScript to TypeScript` |

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

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

69| `/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` 的别名 |69| `/bug [report]` | 报告 bug 或分享您的对话。您可以选择包含多少会话历史,并在发送任何内容之前在同意屏幕上确认。当您通过第一方连接登录 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` 的别名 |

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

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

72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[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` 时也会自动激活。有关每个子命令的作用和它需要的版本,请参阅[在 Claude API 项目上工作](/docs/zh-CN/skills#work-on-claude-api-projects) |72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[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` 时也会自动激活。有关每个子命令的作用及其所需版本,请参阅[处理 Claude API 项目](/docs/zh-CN/skills#work-on-claude-api-projects) |

73| `/claude-in-chrome [task]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 让 Claude 通过 [Claude in Chrome](/docs/zh-CN/chrome) 在你的浏览器中执行任务,例如测试页面、填充表单或读取控制台日志。当为会话启用 Chrome 集成时可用,例如使用 `claude --chrome`,或当 Claude Code 可以提供[安装扩展](/docs/zh-CN/chrome#install-the-extension-when-claude-asks)时 |73| `/claude-in-chrome [task]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 让 Claude 通过 [Claude in Chrome](/docs/zh-CN/chrome) 在您的浏览器中执行任务,例如测试页面、填写表单或读取控制台日志。当会话启用了 Chrome 集成时可用(例如使用 `claude --chrome`),或者当 Claude Code 可以提议[安装扩展](/docs/zh-CN/chrome#install-the-extension-when-claude-asks)时可用 |

74| `/clear [name]` | 使用空上下文启动新对话。传递一个名称以在 `/resume` 选择器中标记上一个对话。要在继续同一对话的同时释放上下文,请改用 `/compact`。使用 `/resume` 恢复上一个对话,或在同一 Claude Code 进程中,从[倒带菜单的上一个会话条目](/docs/zh-CN/checkpointing#rewind-past-a-cleared-conversation)恢复它。别名:`/reset`、`/new` |74| `/clear [name]` | 使用空上下文开始新对话。传递名称可在 `/resume` 选择器中为之前的对话添加标签。要在继续同一对话的同时释放上下文,请改用 `/compact`。使用 `/resume` 恢复之前的对话,或者在同一 Claude Code 进程中,从[回退菜单的上一个会话条目](/docs/zh-CN/checkpointing#rewind-past-a-cleared-conversation)恢复。别名:`/reset`、`/new` |

75| `/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` |75| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查当前 diff,或您传递的 PR 编号、分支或路径,查找正确性 bug。根据您的模型和 effort 级别,审查还会涵盖清理机会。传递 `--fix` 可应用发现的问题,传递 `--comment` 可将其发布到 GitHub PR 或 GitLab Merge Request 上,传递 `ultra` 可运行深度[云端审查](/docs/zh-CN/ultrareview)。发布到 GitLab Merge Request 需要 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 或更高版本。有关 effort 级别、目标指定方式以及它与 `/simplify` 的关系,请参阅[在本地审查 diff](/docs/zh-CN/code-review#review-a-diff-locally)。别名:`/review` |

76| `/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 或更高版本 |76| `/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 或更高版本 |

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

78| `/config [key=value ...]` | 打开[设置](/docs/zh-CN/settings)界面以调整主题、模型、[输出样式](/docs/zh-CN/output-styles)和其他首选项。传递一个或多个 `key=value` 对以直接设置设置而不打开界面,例如 `/config thinking=false`、`/config theme=dark` 或 `/config model=sonnet`。`key=value` 形式也适用于非交互模式 (`-p`) 和来自 Claude 移动应用的 [Remote Control](/docs/zh-CN/remote-control)。`key=value` 形式无法打开需要你在面板中确认的设置,例如 [`autoContinueAtUsageLimit`](/docs/zh-CN/interactive-mode#turn-automatic-continue-off),尽管它可以关闭一个。运行 `/config --help` 以列出它接受的键。别名:`/settings` |78| `/config [key=value ...]` | 打开[设置](/docs/zh-CN/settings)界面,以调整主题、模型、[输出样式](/docs/zh-CN/output-styles)和其他偏好。传递一个或多个 `key=value` 对可直接设置某项设置而无需打开界面,例如 `/config thinking=false`、`/config theme=dark` 或 `/config model=sonnet`。`key=value` 形式也适用于非交互模式(`-p`),以及通过 [Remote Control](/docs/zh-CN/remote-control) 从 Claude 移动应用使用。`key=value` 形式无法开启需要您在面板中确认的设置,例如 [`autoContinueAtUsageLimit`](/docs/zh-CN/interactive-mode#turn-automatic-continue-off),但可以将其关闭。运行 `/config --help` 可列出其接受的键。别名:`/settings` |

79| `/context [all]` | 将当前上下文使用情况可视化为彩色网格。显示上下文繁重工具、内存膨胀和容量警告的优化建议。当对话超过上下文窗口时,输出包括一个[警告](/docs/zh-CN/errors#context-exceeds-the-token-limit),显示你超过限制的距离以及哪个命令释放空间。在[全屏模式](/docs/zh-CN/fullscreen)中,`/context` 折叠每项细目以保持网格可见。传递 `all` 以展开它 |79| `/context [all]` | 以彩色网格形式可视化当前上下文使用情况。显示针对占用大量上下文的工具、记忆膨胀的优化建议以及容量警告。当对话超出上下文窗口时,输出会包含一条[警告](/docs/zh-CN/errors#context-exceeds-the-token-limit),显示超出限制多少以及哪个命令可以释放空间。在[全屏模式](/docs/zh-CN/fullscreen)下,`/context` 会折叠逐项明细以保持网格可见。传递 `all` 可将其展开 |

80| `/copy [N]` | 将最后的助手响应复制到剪贴板。传递一个数字 `N` 以复制第 N 个最新响应:`/copy 2` 复制倒数第二个。当存在代码块时,显示一个交互式选择器以选择单个块或完整响应。在选择器中按 `w` 以将选择写入文件而不是剪贴板,这在 SSH 上很有用 |80| `/copy [N]` | 将最后一条助手回复复制到剪贴板。传递数字 `N` 可复制倒数第 N 条回复:`/copy 2` 复制倒数第二条。当存在代码块时,会显示交互式选择器,以选择单个代码块或完整回复。在选择器中按 `w` 可将所选内容写入文件而不是剪贴板,这在通过 SSH 使用时很有用 |

81| `/cost` | `/usage` 的别名 |81| `/cost` | `/usage` 的别名 |

82| `/dataviz [request]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为图表、图形和仪表板提供设计指导。Claude 为数据选择图表形式,按角色分配颜色,使用捆绑脚本验证调色板的色盲安全性和对比度,并应用标记、交互和可访问性规则。使用一个品牌中立的占位符调色板,你用自己的替换。需要 Claude Code v2.1.198 或更高版本 |82| `/dataviz [request]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 图表、图形和仪表板的设计指导。Claude 会为数据选择图表形式,按角色分配颜色,使用随附脚本验证调色板的色盲安全性和对比度,并应用标记、交互和无障碍规则。使用品牌中立的占位调色板,供您替换为自己的调色板 |

83| `/debug [description]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为当前会话启用调试日志记录并通过读取会话调试日志来排查问题。调试日志记录默认关闭,除非你使用 `claude --debug` 启动,所以在会话中期运行 `/debug` 会从该点开始捕获日志。可选地描述问题以集中分析 |83| `/debug [description]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 为当前会话启用调试日志记录,并通过读取会话调试日志来排除问题。除非您使用 `claude --debug` 启动,否则调试日志记录默认关闭,因此在会话中途运行 `/debug` 会从该时刻开始捕获日志。可选择描述问题以聚焦分析 |

84| `/deep-research <question>` | **[Workflow](/docs/zh-CN/workflows#bundled-workflows)。** 在问题上扇出网络搜索,获取和交叉检查来源,并综合一个引用的报告 |84| `/deep-research <question>` | **[工作流](/docs/zh-CN/workflows#bundled-workflows)。** 针对一个问题分散进行网络搜索,获取并交叉核对来源,并综合生成带引用的报告 |

85| `/design [brief]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在一个画布上起草 UI 模型、屏幕流、登陆页面或海报作为画板,发布为一个 Claude Design [工件](/docs/zh-CN/artifacts#draft-a-design-canvas),例如 `/design a settings screen for a mobile banking app`。你在桌面浏览器中编辑画板,你的编辑会自动保存。你可以将每个画板导出为 PNG 或 PDF。需要 Claude Code v2.1.265 或更高版本、一个[工件可用](/docs/zh-CN/artifacts#availability)的会话,以及一个[设计模板可用](/docs/zh-CN/artifacts#start-from-a-slides-design-or-docs-template)的账户;如果你的组织已关闭该模板,`/design` 不会起草设计。在 Anthropic API 上可用。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上,工件不可用,所以命令在那里不可用 |85| `/design [brief]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在一个画布上以画板形式起草 UI 模型、屏幕流程、着陆页或海报,并发布为 Claude Design [Artifact](/docs/zh-CN/artifacts#draft-a-design-canvas),例如 `/design a settings screen for a mobile banking app`。您可以在桌面浏览器中编辑画板,编辑内容会自动保存。您可以将每个画板导出为 PNG 或 PDF。需要 Claude Code v2.1.265 或更高版本、[Artifact 可用](/docs/zh-CN/artifacts#availability)的会话,以及 [Design 模板可用](/docs/zh-CN/artifacts#start-from-a-slides-design-or-docs-template)的账户;如果您的组织已关闭该模板,`/design` 不会起草设计。可在 Anthropic API 上使用。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上,Artifact 不可用,因此该命令在这些平台上不可用 |

86| `/design-login` | 使用你的 claude.ai 账户授权 `/design-sync` 的设计系统访问 |86| `/design-login` | 使用您的 claude.ai 账户为 `/design-sync` 授权设计系统访问 |

87| `/design-sync [hint]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 转换你的 repo 的 React 设计系统并将其上传到 [Claude Design](https://claude.ai/design),以便它生成的设计使用你的真实组件。可选地命名设计系统,例如 `/design-sync Acme DS`。首次同步验证每个组件,在大型 repo 上可能需要几个小时。在 Anthropic API 上可用。它需要 claude.ai,CLI 在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 上不联系,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations),所以命令在那里不可用 |87| `/design-sync [hint]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 转换您仓库中的 React 设计系统并将其上传到 [Claude Design](https://claude.ai/design),使其生成的设计使用您的真实组件。可选择为设计系统命名,例如 `/design-sync Acme DS`。首次同步会验证每个组件,在大型仓库上可能需要几个小时。可在 Anthropic API 上使用。它需要 claude.ai,而 CLI 在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 上,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations) 使用时不会连接 claude.ai,因此该命令在这些情况下不可用 |

88| `/desktop` | 在 Claude Code Desktop 应用中继续当前会话。需要 macOS 或 x64 Windows 和 Claude 订阅。别名:`/app` |88| `/desktop` | 在 Claude Code Desktop 应用中继续当前会话。需要 macOS 或 x64 Windows 以及 Claude 订阅。别名:`/app` |

89| `/diff` | 审查你的工作树中的更改,包括 Claude 到目前为止所做的编辑。请参阅[使用 /diff 审查更改](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) |89| `/diff` | 审查工作树中的更改,包括 Claude 到目前为止所做的编辑。请参阅[使用 /diff 审查更改](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) |

90| `/doctor [prompt-audit [path]]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 运行一个设置检查,诊断问题并可以修复它们。检查安装健康状况,包括重复或遗留安装、`PATH` 问题和无法解析的设置文件。查找未使用的 skill、MCP 服务器和插件与其上下文成本,标记缓慢的 [hooks](/docs/zh-CN/hooks),并检查你的[发布频道](/docs/zh-CN/setup#configure-release-channel)上是否有更新版本。根据检入的本地 `CLAUDE.md` 文件进行重复数据删除,通过削减 Claude 可以从代码库派生的内容来修剪检入的 [`CLAUDE.md`](/docs/zh-CN/memory#my-claude-md-is-too-large) 文件,并将保留的始终加载的指导迁移到[skill](/docs/zh-CN/skills) 和按需加载的嵌套 `CLAUDE.md` 文件中。还提供使[自动模式](/docs/zh-CN/permissions#permission-modes)成为你的默认值和[预先批准](/docs/zh-CN/permissions)经常被拒绝的只读命令。首先报告发现并在更改任何内容之前要求确认。从终端,`claude doctor` 打印只读安装诊断而不启动会话。别名:`/checkup`。运行 `/doctor prompt-audit` 以让 Claude [审计你的 `CLAUDE.md` 文件、skill 和其他配置](/docs/zh-CN/memory#audit-your-instruction-files)以查找过时或冲突的指令,而不是运行检查。`prompt-audit` 子命令需要 Claude Code v2.1.283 或更高版本。`CLAUDE.md` 修剪检查需要 Claude Code v2.1.206 或更高版本。在 v2.1.205 之前,`/doctor` 打开一个只读诊断屏幕,按 `f` 将报告发送给 Claude |90| `/doctor [prompt-audit [path]]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 运行设置检查,诊断问题并可以修复它们。检查安装健康状况,包括重复或残留的安装、`PATH` 问题以及无法解析的设置文件。找出未使用的 skill、MCP 服务器和插件,并与其上下文开销进行对比,标记运行缓慢的 [hook](/docs/zh-CN/hooks),并检查您的[发布渠道](/docs/zh-CN/setup#configure-release-channel)上是否有较新版本。将本地 `CLAUDE.md` 文件与已签入的文件进行去重,通过删除 Claude 可以从代码库推导出的内容来精简已签入的 [`CLAUDE.md`](/docs/zh-CN/memory#my-claude-md-is-too-large) 文件,并将剩余的始终加载的指导迁移到按需加载的 [skill](/docs/zh-CN/skills) 和嵌套 `CLAUDE.md` 文件中。还会提议将[自动模式](/docs/zh-CN/permissions#permission-modes)设为默认模式,并[预先批准](/docs/zh-CN/permissions)经常被拒绝的只读命令。先报告发现的问题,并在更改任何内容之前请求确认。在终端中,`claude doctor` 会输出只读的安装诊断信息而不启动会话。别名:`/checkup`。运行 `/doctor prompt-audit` 可让 Claude [审计您的 `CLAUDE.md` 文件、skill 和其他配置](/docs/zh-CN/memory#audit-your-instruction-files),查找过时或相互冲突的指令,而不是运行设置检查。`prompt-audit` 子命令需要 Claude Code v2.1.283 或更高版本。`CLAUDE.md` 精简检查需要 Claude Code v2.1.206 或更高版本。在 v2.1.205 之前,`/doctor` 会打开只读诊断屏幕,按 `f` 会将报告发送给 Claude |

91| `/effort [level\|auto\|status\|ultracode [on\|off]]` | 设置[工作量级别](/docs/zh-CN/model-config#adjust-effort-level):`low` 到 `xhigh`、`max` 或 `auto`;`status` 打印它。`ultracode` 或 `ultracode on` 在当前级别为会话打开 [ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode),`ultracode off` 关闭它;[`ultracode`](/docs/zh-CN/settings-reference#ultracode) 键持久化。`max` 仅限会话。使用 `on` 和 `off` 参数以及保持当前级别需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,`/effort ultracode` 将会话设置为 `xhigh`,`/effort ultracode off` 失败并显示 `Invalid argument`。在 Claude 响应时运行它,一旦你确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示一个),Claude Code 会将新级别应用于该轮中的下一个请求。在 v2.1.242 之前,Claude Code 从它从 Anthropic 获取的功能标志决定是在轮中期运行命令还是将其排队直到轮次完成,并始终在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中排队它,例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上。在 `-p` 中工作 |91| `/effort [level\|auto\|status\|ultracode [on\|off]]` | 设置 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level):`low` 到 `xhigh`、`max` 或 `auto`;`status` 会输出当前级别。`ultracode` 或 `ultracode on` 会以当前级别为会话开启 [ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode),`ultracode off` 会将其关闭;[`ultracode`](/docs/zh-CN/settings-reference#ultracode) 键会持久保存。`max` 仅对当前会话有效。`on` 和 `off` 参数以及保持当前级别需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,`/effort ultracode` 会将会话设置为 `xhigh`,而 `/effort ultracode off` 会失败并报告 `Invalid argument`。在 Claude 回复时运行此命令,一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示了该警告),Claude Code 就会将新级别应用于该轮次中的下一个请求。在 v2.1.242 之前,Claude Code 会根据从 Anthropic 获取的功能标志来决定是在轮次中途运行该命令,还是将其排队直到轮次结束,并且在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中(例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上)始终将其排队。可在 `-p` 中使用 |

92| `/exit` | 退出 CLI。在附加的[后台会话](/docs/zh-CN/agent-view#attach-to-a-session)中,这会分离,会话继续运行。别名:`/quit` |92| `/exit` | 退出 CLI。在已附加的[后台会话](/docs/zh-CN/agent-view#attach-to-a-session)中,此操作会分离,会话继续运行。别名:`/quit` |

93| `/export [filename]` | 将当前对话导出为纯文本。使用文件名,直接写入该文件。没有,打开一个对话框以复制到剪贴板或保存到文件 |93| `/export [filename]` | 将当前对话导出为纯文本。提供文件名时,直接写入该文件。不提供时,打开对话框以复制到剪贴板或保存到文件 |

94| `/fast [on\|off]` | 切换[快速模式](/docs/zh-CN/fast-mode)打开或关闭。在 Claude 响应时运行它,Claude Code 切换快速模式而不等待轮次结束,尽管运行的轮次以其原始速度完成。在 v2.1.242 之前,Claude Code 从它从 Anthropic 获取的功能标志决定是在轮中期运行命令还是将其排队直到轮次完成,并始终在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中排队它。非交互模式中的可用性受限于 `-p`;请参阅[切换快速模式](/docs/zh-CN/fast-mode#toggle-fast-mode)。需要 Claude Code v2.1.205 或更高版本 |94| `/fast [on\|off]` | 开启或关闭[快速模式](/docs/zh-CN/fast-mode)。在 Claude 回复时运行此命令,Claude Code 会切换快速模式而无需等待轮次结束,但正在运行的轮次仍会以其原始速度完成。在 v2.1.242 之前,Claude Code 会根据从 Anthropic 获取的功能标志来决定是在轮次中途运行该命令,还是将其排队直到轮次结束,并且在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中始终将其排队。在使用 `-p` 的非交互模式中可用性有限;请参阅[切换快速模式](/docs/zh-CN/fast-mode#toggle-fast-mode)。需要 Claude Code v2.1.205 或更高版本 |

95| `/feedback [report]` | 发送关于 Claude Code 的产品反馈。打开与 [`/bug`](#all-commands) 相同的对话框,具有相同的同意步骤、发送规则和轮中期行为。在具有 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior)的会话中,不带参数的 `/feedback` 打开草稿队列,你可以在其中审查、编辑、发送或丢弃 Claude 排队的草稿;队列包括一个选项来在对话框中写入新报告。使用参数,对于 `/bug` 总是,对话框直接打开 |95| `/feedback [report]` | 发送有关 Claude Code 的产品反馈。打开与 [`/bug`](#all-commands) 相同的对话框,具有相同的同意步骤、发送规则和轮次中途行为。在具有 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior)的会话中,不带参数的 `/feedback` 会改为打开草稿队列,您可以在其中审阅、编辑、发送或丢弃 Claude 排入队列的草稿;该队列包含一个在对话框中撰写新报告的选项。带参数时,以及对于 `/bug` 始终如此,对话框会直接打开 |

96| `/fewer-permission-prompts` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 扫描你的记录以查找常见的只读 Bash 和 MCP 工具调用,然后将优先级允许列表添加到项目 `.claude/settings.json` 以减少权限提示 |96| `/fewer-permission-prompts` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 扫描您的会话记录,查找常见的只读 Bash 和 MCP 工具调用,然后将按优先级排序的允许列表添加到项目的 `.claude/settings.json` 中,以减少权限提示 |

97| `/focus` | 切换焦点视图,仅显示你的最后一个提示、一行工具调用摘要和最终响应。工具调用摘要也计算在轮中启动的子代理数量,并将完成的后台任务通知折叠为单个计数。选择在会话中持久化;在设置中设置 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 以覆盖它。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用。从 [Remote Control](/docs/zh-CN/remote-control) 客户端,运行 `/focus [on\|off]` 以仅为当前会话打开或关闭焦点视图,而不更改你的保存选择;这需要 Claude Code v2.1.281 或更高版本。[VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)提供其自己的焦点视图作为命令菜单切换,存储为扩展设置,独立于 `viewMode` |97| `/focus` | 切换专注视图,该视图仅显示您的最后一条提示词、带有编辑 diffstat 的单行工具调用摘要以及最终回复。工具调用摘要还会统计该轮次中启动的子代理数量,并将已完成的后台任务通知合并为单个计数。该选择会跨会话保持;在设置中设置 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 可覆盖它。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用。在 [Remote Control](/docs/zh-CN/remote-control) 客户端中,运行 `/focus [on\|off]` 可仅为当前会话开启或关闭专注视图,而不更改您保存的选择;这需要 Claude Code v2.1.281 或更高版本。[VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)提供其自己的 Focus 视图,作为命令菜单中的开关,存储为扩展设置,独立于 `viewMode` |

98| `/fork [prompt]` | [将当前对话复制](/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork)到新的后台会话并继续在这里工作。传递一个提示词,副本立即开始处理它;没有它,它在代理视图中等待其第一个提示词。除非副本[就地编辑](/docs/zh-CN/agent-view#how-file-edits-are-isolated),Claude Code 指示它在进行代码更改之前创建自己的 worktree;隔离指令需要 Claude Code v2.1.221 或更高版本。要将侧面任务交给一个子代理,其结果返回到这个对话,请使用 `/subtask`;要自己切换到副本,请使用 `/branch`。需要 Claude Code v2.1.212 或更高版本;在 v2.1.161 到 v2.1.211,以及每当[代理视图关闭](/docs/zh-CN/agent-view#turn-off-agent-view)时,`/fork` 启动一个[分叉子代理](/docs/zh-CN/sub-agents#fork-the-current-conversation) |98| `/fork [prompt]` | [将当前对话复制](/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork)到新的后台会话中,并在此处继续工作。传递提示词后,副本会立即开始处理;不传递时,副本会在 Agent 视图中等待其第一条提示词。除非副本[就地编辑](/docs/zh-CN/agent-view#how-file-edits-are-isolated),否则 Claude Code 会指示它在进行代码更改之前创建自己的 worktree;该隔离指令需要 Claude Code v2.1.221 或更高版本。要将附带任务交给结果会返回到此对话的子代理,请使用 `/subtask`;要自己切换到副本中,请使用 `/branch`。需要 Claude Code v2.1.212 或更高版本;在 v2.1.161 至 v2.1.211 上,以及每当[关闭 Agent 视图](/docs/zh-CN/agent-view#turn-off-agent-view)时,`/fork` 会改为启动[分叉子代理](/docs/zh-CN/sub-agents#fork-the-current-conversation) |

99| `/goal [condition\|clear]` | 设置一个[目标](/docs/zh-CN/goal):Claude 跨轮继续工作直到条件满足或目标[因另一个原因清除](/docs/zh-CN/goal#how-evaluation-works)。没有参数时,显示当前或最近实现的目标。`clear`、`stop`、`off`、`reset`、`none` 或 `cancel` 提前移除活跃目标 |99| `/goal [condition\|clear]` | 设置[目标](/docs/zh-CN/goal):Claude 会跨轮次持续工作,直到满足条件或目标[因其他原因被清除](/docs/zh-CN/goal#how-evaluation-works)。不带参数时,显示当前目标或最近达成的目标。`clear`、`stop`、`off`、`reset`、`none` 或 `cancel` 可提前移除活动目标 |

100| `/heapdump` | 写入 JavaScript 堆快照和内存细目到 `~/Desktop`,或 Linux 上没有 Desktop 文件夹的主目录,用于诊断高内存使用。报告内存问题时仅附加 `-diagnostics.json` 文件;`.heapsnapshot` 包含你的完整对话和凭证,所以不要共享它。[从命令菜单隐藏](#how-the-command-menu-matches-what-you-type);完整输入它。请参阅[如何处理输出](/docs/zh-CN/troubleshooting#high-cpu-or-memory-usage) |100| `/heapdump` | 将 JavaScript 堆快照和内存明细写入 `~/Desktop`(在没有 Desktop 文件夹的 Linux 上则写入主目录),用于诊断高内存使用率。报告内存问题时只附加 `-diagnostics.json` 文件;`.heapsnapshot` 包含您的完整对话和凭据,因此请勿分享它。[在命令菜单中隐藏](#how-the-command-menu-matches-what-you-type);需要完整输入。请参阅[如何处理输出](/docs/zh-CN/troubleshooting#high-cpu-or-memory-usage) |

101| `/help` | 显示帮助和可用命令 |101| `/help` | 显示帮助和可用命令 |

102| `/hooks` | 查看工具事件的 [hook](/docs/zh-CN/hooks) 配置 |102| `/hooks` | 查看 [hook](/docs/zh-CN/hooks#the-%2Fhooks-menu) 配置 |

103| `/ide` | 管理 IDE 集成并显示状态 |103| `/ide` | 管理 IDE 集成并显示状态 |

104| `/import [codex\|gemini\|cursor] [--dry-run] [--yes]` | 将配置从你的机器上的 OpenAI Codex、Google Gemini CLI 或 Cursor 引入 Claude Code,包括指令文件、MCP 服务器、命令、子代理和 skill。在[非交互模式](/docs/zh-CN/headless)中使用 `-p`,`/import` 列出它找到的内容并给你确认导入的命令。添加 `--dry-run` 以预览而不写入任何内容,或 `--yes` 以跳过交互式选择器。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 上不可用,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)。当你关闭[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)时也不可用。需要 Claude Code v2.1.213 或更高版本。从 Cursor 导入需要 v2.1.265 或更高版本 |104| `/import [codex\|gemini\|cursor] [--dry-run] [--yes]` | 将您计算机上 OpenAI Codex、Google Gemini CLI 或 Cursor 中的配置导入 Claude Code,包括指令文件、MCP 服务器、命令、子代理和 skill。在使用 `-p` 的[非交互模式](/docs/zh-CN/headless)中,`/import` 会列出它找到的内容,并给出用于确认导入的命令。添加 `--dry-run` 可预览而不写入任何内容,或添加 `--yes` 以跳过交互式选择器。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 上,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations) 使用时不可用。当您关闭[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)时也不可用。需要 Claude Code v2.1.213 或更高版本。从 Cursor 导入需要 v2.1.265 或更高版本 |

105| `/init` | 使用 `CLAUDE.md` 指南初始化项目。设置 `CLAUDE_CODE_NEW_INIT=1` 以获得交互式流程,也会引导你完成 skill、hook 和个人内存文件。如果 `/init` 找到 OpenAI Codex 或 Google Gemini CLI 配置,它提供使用 `/import` 进行转移 |105| `/init` | 使用 `CLAUDE.md` 指南初始化项目。设置 `CLAUDE_CODE_NEW_INIT=1` 可使用交互式流程,该流程还会引导您完成 skill、hook 和个人记忆文件的设置。如果 `/init` 发现 OpenAI Codex 或 Google Gemini CLI 配置,它会提议使用 `/import` 将其迁移过来 |

106| `/insights` | 生成一个 HTML 报告,分析你在这台机器上的最近会话:你在哪些项目中工作、你如何使用 Claude Code、事情出错的地方以及要尝试的功能。在[cloud sessions](/docs/zh-CN/claude-code-on-the-web)中不可用。有关报告位置、保留和成本,请参阅[分析你的使用模式](/docs/zh-CN/costs#analyze-your-usage-patterns) |106| `/insights` | 生成 HTML 报告,分析您在此计算机上的最近会话:您在哪些项目中工作、如何使用 Claude Code、哪里出现问题,以及值得尝试的功能。在[云端会话](/docs/zh-CN/claude-code-on-the-web)中不可用。有关报告位置、保留期限和开销,请参阅[分析您的使用模式](/docs/zh-CN/costs#analyze-your-usage-patterns) |

107| `/install-github-app` | 为存储库安装 Claude GitHub App,可选步骤设置 [GitHub Actions](/docs/zh-CN/github-actions) 工作流和秘密。引导你完成选择 repo 和配置集成。仅适用于 github.com 存储库。当你的存储库的 git 远程在 gitlab.com 或 bitbucket.org 上时,命令打印通知并退出而不是启动设置。要从 GitLab 管道运行 Claude Code,请参阅 [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd) |107| `/install-github-app` | 为仓库安装 Claude GitHub App,并可选择设置 [GitHub Actions](/docs/zh-CN/github-actions) 工作流和密钥。引导您选择仓库并配置集成。仅适用于 github.com 仓库。当您仓库的 git 远程位于 gitlab.com 或 bitbucket.org 上时,该命令会输出一条通知并退出,而不是开始设置。要从 GitLab 流水线运行 Claude Code,请参阅 [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd) |

108| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |108| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |

109| `/keybindings` | 打开你的[快捷键](/docs/zh-CN/keybindings)文件 |109| `/keybindings` | 打开您的[快捷键](/docs/zh-CN/keybindings)文件 |

110| `/list-agents` | 列出子代理、[代理团队](/docs/zh-CN/agent-teams)队友和其他 Claude Code 会话 Claude 可以消息,以及每个要使用的名称。请参阅[跨会话消息](/docs/zh-CN/cross-session-messaging)。也可用作 `/peers`。需要 Claude Code v2.1.224 或更高版本;早期版本报告 `Unknown command: /list-agents`。队友行和显示此会话自己名称的第一行需要 v2.1.239 或更高版本。仅在[启用跨会话消息](/docs/zh-CN/cross-session-messaging#availability)的会话中可用 |110| `/list-agents` | 列出 Claude 可以向其发送消息的子代理、[agent team](/docs/zh-CN/agent-teams) 队友以及其他 Claude Code 会话,并显示每一项应使用的名称。请参阅[跨会话消息传递](/docs/zh-CN/cross-session-messaging)。也可作为 `/peers` 使用。需要 Claude Code v2.1.224 或更高版本;更早版本会报告 `Unknown command: /list-agents`。队友行以及显示此会话自身名称的第一行需要 v2.1.239 或更高版本。仅在[已启用跨会话消息传递](/docs/zh-CN/cross-session-messaging#availability)的会话中可用 |

111| `/login` | 登录到你的 Anthropic 账户 |111| `/login` | 登录您的 Anthropic 账户 |

112| `/logout` | 从你的 Anthropic 账户登出 |112| `/logout` | 从您的 Anthropic 账户注销 |

113| `/loop [interval] [prompt]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在会话保持打开时重复运行提示词。省略间隔,Claude [自我调整迭代之间的步伐](/docs/zh-CN/scheduled-tasks#let-claude-choose-the-interval)。省略提示词,Claude 运行[内置维护提示词](/docs/zh-CN/scheduled-tasks#run-the-built-in-maintenance-prompt)或你的 [`loop.md`](/docs/zh-CN/scheduled-tasks#customize-the-default-prompt-with-loop-md)。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示词](/docs/zh-CN/scheduled-tasks)。别名:`/proactive` |113| `/loop [interval] [prompt]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 在会话保持打开期间重复运行提示词。省略间隔时,Claude 会[自行决定迭代之间的节奏](/docs/zh-CN/scheduled-tasks#let-claude-choose-the-interval)。省略提示词时,Claude 会运行[内置维护提示词](/docs/zh-CN/scheduled-tasks#run-the-built-in-maintenance-prompt)或您的 [`loop.md`](/docs/zh-CN/scheduled-tasks#customize-the-default-prompt-with-loop-md)。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示词](/docs/zh-CN/scheduled-tasks)。别名:`/proactive` |

114| `/mcp [reconnect <server>\|enable\|disable [<server>\|all]]` | 管理 MCP 服务器连接和 OAuth 身份验证。运行不带参数以打开交互式列表,传递 `reconnect <server>` 以重新连接一个断开连接的服务器,或传递 `enable`/`disable` 带有服务器名称或 `all` 以更改连接状态而不打开对话框。也可在非交互模式 (`-p`) 中使用,其中运行不带参数会打印服务器状态的文本摘要而不是打开列表;需要 Claude Code v2.1.205 或更高版本 |114| `/mcp [reconnect (<server>\|all)\|enable\|disable [<server>\|all]]` | 管理 MCP 服务器连接和 OAuth 身份验证。不带参数运行可打开交互式列表,或传递 `reconnect`、`enable` 或 `disable` 以及服务器名称或 `all`,可在不打开列表的情况下更改连接状态。`reconnect all` 会[重试每个失败或需要身份验证的服务器](/docs/zh-CN/mcp#retry-failed-servers-yourself)。也可在非交互模式(`-p`)中使用,在该模式下不带参数运行会输出服务器状态的文本摘要,而不是打开列表;需要 Claude Code v2.1.205 或更高版本 |

115| `/memory` | 编辑 `CLAUDE.md` 文件,启用或禁用[自动内存](/docs/zh-CN/memory#auto-memory),并查看自动内存条目 |115| `/memory` | 编辑 `CLAUDE.md` 文件,启用或禁用[自动记忆](/docs/zh-CN/memory#auto-memory),并查看自动记忆条目 |

116| `/mobile` | 显示 QR 代码以下载 Claude 移动应用。别名:`/ios`、`/android` |116| `/mobile` | 显示用于下载 Claude 移动应用的二维码。别名:`/ios`、`/android` |

117| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认值。对于支持它的模型,使用左/右箭头来[调整工作量级别](/docs/zh-CN/model-config#adjust-effort-level)。没有参数时,打开选择器;在行上按 `s` 仅为当前会话切换。请参阅[当 Claude Code 要求你确认切换时](/docs/zh-CN/prompt-caching#switching-models)。一旦你确认切换,如果 Claude Code 要求,Claude Code 会应用更改而不等待当前响应完成。在 v2.1.242 之前,Claude Code 从它从 Anthropic 获取的功能标志决定是在轮中期运行命令还是将其排队直到轮次完成,并始终在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中排队它,例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上。也可在非交互模式 (`-p`) 中使用模型参数而不是选择器,其中它仅应用于当前会话并不保存为你的默认值;需要 Claude Code v2.1.205 或更高版本 |117| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认模型。对于支持的模型,使用左/右箭头[调整 effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。不带参数时,打开选择器;在某一行上按 `s` 可仅为当前会话切换。请参阅 [Claude Code 何时会要求您确认切换](/docs/zh-CN/prompt-caching#switching-models)。一旦您确认切换(如果 Claude Code 询问),Claude Code 会应用更改,而无需等待当前回复完成。在 v2.1.242 之前,Claude Code 会根据从 Anthropic 获取的功能标志来决定是在轮次中途运行该命令,还是将其排队直到轮次结束,并且在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中(例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上)始终将其排队。也可在非交互模式(`-p`)中通过模型参数(而非选择器)使用,此时仅应用于当前会话,不会保存为默认模型;需要 Claude Code v2.1.205 或更高版本 |

118| `/output-style [style]` | 列出[输出样式](/docs/zh-CN/output-styles)或切换到一个,例如 `/output-style concise`。请参阅[更改你的输出样式](/docs/zh-CN/output-styles#change-your-output-style)。需要 Claude Code v2.1.269 或更高版本 |118| `/output-style [style]` | 列出[输出样式](/docs/zh-CN/output-styles)或切换到其中一种,例如 `/output-style concise`。请参阅[更改输出样式](/docs/zh-CN/output-styles#change-your-output-style)。需要 Claude Code v2.1.269 或更高版本 |

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

120| `/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` |120| `/permissions` | 管理工具权限的允许、询问和拒绝规则。打开交互式对话框,您可以在其中按作用域查看规则、添加或删除规则、管理工作目录,以及查看[最近的自动模式拒绝记录](/docs/zh-CN/auto-mode-config#review-denials)。您还可以从对话框的 **Auto mode** 选项卡查看和编辑[自动模式分类器规则](/docs/zh-CN/auto-mode-config#edit-rules-from-permissions)。如果在 Claude 回复时运行此命令,Claude Code 会立即打开对话框,并从 Claude 在同一轮次中的下一次工具调用开始应用您的更改。在 v2.1.234 之前,Claude Code 会将该命令排队,直到该轮次结束。别名:`/allowed-tools` |

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

122| `/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` |122| `/plugin [subcommand]` | 管理 Claude Code [插件](/docs/zh-CN/plugins/overview)。不带参数运行可打开插件菜单,或传递 `list`、`install`、`enable` 或 `disable` 等子命令以直接执行操作。Claude Code 可以在安装期间激活插件;[安装摘要](/docs/zh-CN/plugins/install#install-a-plugin)会告诉您插件是否已激活,或是否需要运行 `/reload-plugins` |

123| `/powerup` | 通过带有动画演示的快速交互式课程发现 Claude Code 功能 |123| `/plugin-authoring` | 加载 Claude 用于[编写 mod](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 的参考资料。当您请求 mod 时,Claude 可以自行加载它。这是一个来自[内置插件](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code)的 skill,您可以在 `/plugin` 中将其关闭。需要 Claude Code v2.1.287 或更高版本 |

124| `/pr-comments [PR]` | 在 v2.1.91 中移除。直接要求 Claude 查看拉取请求评论。在早期版本上,从 GitHub 拉取请求获取和显示评论;自动检测当前分支的 PR,或传递 PR URL 或号码。需要 `gh` CLI |124| `/powerup` | 通过带有动画演示的快速交互式课程了解 Claude Code 功能 |

125| `/privacy-settings` | 查看和更新你的隐私设置。仅对 Pro 和 Max 计划订阅者可用 |125| `/pr-comments [PR]` | 已在 v2.1.91 中移除。请改为直接让 Claude 查看 Pull Request 评论。在更早版本中,获取并显示 GitHub Pull Request 中的评论;自动检测当前分支的 PR,或传递 PR URL 或编号。需要 `gh` CLI |

126| `/radio` | 在浏览器中打开 Claude FM lo-fi 电台。当没有浏览器可用时打印流 URL |126| `/privacy-settings` | 查看和更新您的隐私设置。仅适用于 Pro 和 Max 套餐订阅者 |

127| `/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 或更高版本 |127| `/radio` | 在浏览器中打开 Claude FM lo-fi 电台。没有可用浏览器时输出流 URL |

128| `/recap` | 按需生成当前会话的一行摘要。请参阅[会话摘要](/docs/zh-CN/interactive-mode#session-recap)以获得你离开后出现的自动摘要 |128| `/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 或更高版本 |

129| `/release-notes` | 在交互式版本选择器中查看更改日志。选择特定版本以查看其发布说明,或选择显示所有版本。说明出现在你的记录中而不进入 Claude 看到的对话 |129| `/recap` | 按需生成当前会话的单行摘要。有关您离开一段时间后出现的自动回顾,请参阅[会话回顾](/docs/zh-CN/interactive-mode#session-recap) |

130| `/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) |130| `/release-notes` | 在交互式版本选择器中查看更新日志。选择特定版本以查看其发布说明,或选择显示所有版本。这些说明会出现在您的会话记录中,但不会进入 Claude 看到的对话 |

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

132| `/remote-control` | 使此会话可从 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行它会打印 Remote Control 需要 claude.ai 订阅并告诉你如何登录;在 v2.1.206 之前它报告 `Unknown command: /remote-control`。别名:`/rc` |132| `/reload-skills` | 重新扫描 [skill](/docs/zh-CN/skills) 和命令目录,使会话期间在磁盘上添加或更改的 skill 无需重启即可使用。报告可用的 skill 数量以及添加或移除的数量 |

133| `/remote-env` | 为你从 CLI 启动的 cloud sessions 选择默认[云环境](/docs/zh-CN/cloud-environments#select-an-environment-from-the-cli) |133| `/remote-control` | 使此会话可通过 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行,会输出 Remote Control 需要 claude.ai 订阅的提示,并告诉您如何登录;在 v2.1.206 之前,它会报告 `Unknown command: /remote-control`。别名:`/rc` |

134| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。没有名称,从对话历史自动生成一个。也可在非交互模式 (`-p`) 中使用;需要 Claude Code v2.1.205 或更高版本。从每个重命名表面,包括 claude.ai 和桌面应用,Claude Code 用空格替换新名称中的控制和不可见字符,并将名称限制在 200 个字符。如果名称在移除不可见字符后为空,Claude Code 拒绝它并显示 `That name is empty once invisible characters are removed. Usage: /rename <name>`。字符替换和长度限制需要 Claude Code v2.1.221 或更高版本。如果这台机器上的另一个活跃会话已经使用你传递的名称,Claude Code 应用[它的变体](/docs/zh-CN/sessions#name-your-sessions) |134| `/remote-env` | 为您从 CLI 启动的云端会话选择默认[云环境](/docs/zh-CN/cloud-environments#select-an-environment-from-the-cli) |

135| `/resume [session]` | 按 ID 或名称恢复对话,或打开会话选择器。[后台会话](/docs/zh-CN/agent-view)在选择器中标记为 `bg` 出现。恢复仍在运行的会话,从选择器或按 ID 或名称,[打开该会话](/docs/zh-CN/sessions#resume-a-running-background-session):你的当前对话移到后台,此终端附加到运行的会话。在空提示符上按 `←` 返回代理视图,它也列出你离开的对话。在 v2.1.285 之前,Claude Code 拒绝并告诉你使用 `claude attach` 打开会话或先停止它。别名:`/continue` |135| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。不提供名称时,根据对话历史自动生成一个名称。也可在非交互模式(`-p`)中使用;需要 Claude Code v2.1.205 或更高版本。在所有重命名入口(包括 claude.ai 和桌面应用)中,Claude Code 都会将新名称中的控制字符和不可见字符替换为空格,并将名称长度上限设为 200 个字符。如果移除不可见字符后名称为空,Claude Code 会拒绝该名称并显示 `That name is empty once invisible characters are removed. Usage: /rename <name>`。字符替换和长度上限需要 Claude Code v2.1.221 或更高版本。如果此计算机上另一个活动会话已使用您传递的名称,Claude Code 会改为应用[该名称的变体](/docs/zh-CN/sessions#name-your-sessions) |

136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | [`/code-review`](/docs/zh-CN/code-review#review-a-diff-locally) 的别名:审查当前差异,或你传递的 PR 号、分支或路径,例如 `/review 1234`,并采用相同的工作量级别和标志。没有给定级别时,审查重用你输入的最后一个 `low` 到 `max` 级别;有关确切规则,请参阅[本地审查差异](/docs/zh-CN/code-review#review-a-diff-locally)。对于深度云审查,使用 [`/code-review ultra`](/docs/zh-CN/ultrareview)。在 v2.1.223 之前,`/review` 是一个单独的命令,运行 GitHub 拉取请求号的单遍、只读审查,在运行不带参数时列出打开的 PR 以选择;从 v2.1.186 到 v2.1.201,它运行与 `/code-review medium` 相同的多代理引擎 |136| `/resume [session]` | 通过 ID 或名称恢复对话,或打开会话选择器。[后台会话](/docs/zh-CN/agent-view)在选择器中以 `bg` 标记显示。恢复仍在运行的后台会话时(无论是从选择器还是通过 ID 或名称),会[打开该会话](/docs/zh-CN/sessions#resume-a-running-background-session):您当前的对话会移到后台,此终端会附加到正在运行的会话。在空输入框中按 `←` 可返回 Agent 视图,其中也会列出您离开的对话。在 v2.1.285 之前,Claude Code 会拒绝并告诉您使用 `claude attach` 打开该会话,或先停止它。别名:`/continue` |

137| `/rewind` | 倒带对话和/或代码到上一个点,或从选定的消息总结。请参阅[检查点](/docs/zh-CN/checkpointing)。别名:`/checkpoint`、`/undo` |137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | [`/code-review`](/docs/zh-CN/code-review#review-a-diff-locally) 的别名:审查当前 diff,或您传递的 PR 编号、分支或路径(例如 `/review 1234`),并接受相同的 effort 级别和标志。未指定级别时,审查会沿用您上次输入的 `low` 到 `max` 级别;有关确切规则,请参阅[在本地审查 diff](/docs/zh-CN/code-review#review-a-diff-locally)。要进行深度云端审查,请使用 [`/code-review ultra`](/docs/zh-CN/ultrareview)。在 v2.1.223 之前,`/review` 是一个单独的命令,按编号对 GitHub Pull Request 运行单次只读审查,不带参数运行时会列出打开的 PR 供选择;从 v2.1.186 到 v2.1.201,它运行与 `/code-review medium` 相同的多 Agent 引擎 |

138| `/run` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 启动并驱动你的项目应用以查看更改工作,而不仅仅是通过测试。请参阅[运行和验证你的应用](/docs/zh-CN/skills#run-and-verify-your-app) |138| `/rewind` | 将对话和/或代码回退到之前的某个时间点,或从选定的消息开始总结。请参阅[检查点功能](/docs/zh-CN/checkpointing)。别名:`/checkpoint`、`/undo` |

139| `/run-skill-generator` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 通过从干净环境编写每个项目的 [skill](/docs/zh-CN/skills#run-and-verify-your-app) 来教 `/run` 和 `/verify` 如何构建、启动和驱动你的项目应用 |139| `/run` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 启动并操作您项目的应用,以查看更改是否实际生效,而不仅仅是通过测试。请参阅[运行并验证您的应用](/docs/zh-CN/skills#run-and-verify-your-app) |

140| `/run-skill-generator` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 通过编写一个项目专属的 [skill](/docs/zh-CN/skills#run-and-verify-your-app),教会 `/run` 和 `/verify` 如何在干净的环境中构建、启动和操作您项目的应用 |

140| `/sandbox` | 切换[沙箱模式](/docs/zh-CN/sandboxing)。仅在支持的平台上可用 |141| `/sandbox` | 切换[沙箱模式](/docs/zh-CN/sandboxing)。仅在支持的平台上可用 |

141| `/schedule [description]` | 创建、更新、列出或运行在云中执行的[例程](/docs/zh-CN/routines)。Claude 以对话方式引导你完成设置。你也可以询问[例程的最近运行](/docs/zh-CN/routines#manage-routines-from-the-cli)。别名:`/routines` |142| `/schedule [description]` | 创建、更新、列出或运行在云端执行的 [Routine](/docs/zh-CN/routines)。Claude 会以对话方式引导您完成设置。您还可以询问 [Routine 的最近运行情况](/docs/zh-CN/routines#manage-routines-from-the-cli)。别名:`/routines` |

142| `/scroll-speed` | 交互式调整鼠标滚轮[滚动速度](/docs/zh-CN/fullscreen#mouse-wheel-scrolling),带有一个标尺,你可以在对话框打开时滚动以预览更改。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用,在 JetBrains IDE 终端中不可用 |143| `/scroll-speed` | 以交互方式调整鼠标滚轮[滚动速度](/docs/zh-CN/fullscreen#mouse-wheel-scrolling),对话框打开时可以滚动标尺来预览更改。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用,在 JetBrains IDE 终端中不可用 |

143| `/security-review` | 分析当前分支上的更改以查找安全漏洞。审查你的分支和 origin 默认分支之间的差异,识别注入、身份验证问题和数据暴露等风险。需要 `origin` 远程;如果审查失败并出现 `ambiguous argument` 错误,请参阅[错误参考](/docs/zh-CN/errors#security-review-fails-without-origin-head) |144| `/security-review` | 分析当前分支上的更改是否存在安全漏洞。审查您的分支与 origin 默认分支之间的 diff,识别注入、身份验证问题和数据泄露等风险。需要 `origin` 远程;如果审查因 `ambiguous argument` 错误而失败,请参阅[错误参考](/docs/zh-CN/errors#security-review-fails-without-origin-head) |

144| `/setup-bedrock` | 通过交互式向导配置 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 身份验证、区域和模型引脚。[从命令菜单隐藏](#how-the-command-menu-matches-what-you-type)直到设置 `CLAUDE_CODE_USE_BEDROCK=1`;完整输入它。首次 Amazon Bedrock 用户也可以从登录屏幕访问此向导 |145| `/setup-bedrock` | 通过交互式向导配置 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 身份验证、区域和模型固定。在设置 `CLAUDE_CODE_USE_BEDROCK=1` 之前[在命令菜单中隐藏](#how-the-command-menu-matches-what-you-type);需要完整输入。首次使用 Amazon Bedrock 的用户也可以从登录屏幕访问此向导 |

145| `/setup-vertex` | 通过交互式向导配置 [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 身份验证、项目、区域和模型引脚。[从命令菜单隐藏](#how-the-command-menu-matches-what-you-type)直到设置 `CLAUDE_CODE_USE_VERTEX=1`;完整输入它。首次 Google Cloud 的 Agent Platform 用户也可以从登录屏幕访问此向导 |146| `/setup-vertex` | 通过交互式向导配置 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 身份验证、项目、区域和模型固定。在设置 `CLAUDE_CODE_USE_VERTEX=1` 之前[在命令菜单中隐藏](#how-the-command-menu-matches-what-you-type);需要完整输入。首次使用 Google Cloud's Agent Platform 的用户也可以从登录屏幕访问此向导 |

146| `/simplify [target]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查更改的代码以查找清理机会并应用修复。四个审查[代理](/docs/zh-CN/sub-agents)并行运行,涵盖现有帮助程序的重用、简化、效率以及更改是否处于正确的抽象级别。审查不查找正确性错误。使用 `/code-review` 查找错误。传递路径或 PR 参考以审查特定目标 |147| `/simplify [target]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查已更改的代码以寻找清理机会并应用修复。四个审查 [Agent](/docs/zh-CN/sub-agents) 并行运行,涵盖现有辅助函数的复用、简化、效率,以及更改是否处于合适的抽象层级。该审查不查找正确性 bug。使用 `/code-review` 查找 bug。传递路径或 PR 引用可审查特定目标 |

147| `/skill-doctor` | 显示你的每个 [skill](/docs/zh-CN/skills) 在上下文中的成本以及它被使用的频率,以便你可以[找到要关闭的 skill](/docs/zh-CN/skills#find-unused-skills)。需要 Claude Code v2.1.252 或更高版本和[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) |148| `/skill-doctor` | 显示您的每个 [skill](/docs/zh-CN/skills) 在上下文中的开销以及使用频率,以便您[找到可以关闭的 skill](/docs/zh-CN/skills#find-unused-skills)。需要 Claude Code v2.1.252 或更高版本以及[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) |

148| `/skills` | 列出可用的 [skill](/docs/zh-CN/skills)。输入以按名称、描述或来源过滤列表。按 `t` 按令牌计数排序,`Space` 或 `Enter` 以[循环 skill 对 Claude 和 `/` 菜单的可见性](/docs/zh-CN/skills#override-skill-visibility-from-settings),`Esc` 保存并关闭。你无法循环插件 skill、frontmatter 设置 `disable-model-invocation: true` 的 skill 或在托管设置或 `--settings` 标志中有 `skillOverrides` 条目的 skill |149| `/skills` | 列出可用的 [skill](/docs/zh-CN/skills)。输入内容可按名称、描述或来源筛选列表。按 `t` 按 token 数排序,按 `Space` 或 `Enter` [循环切换 skill 对 Claude 和 `/` 菜单的可见性](/docs/zh-CN/skills#override-skill-visibility-from-settings),按 `Esc` 保存并关闭。您无法循环切换插件 skill、frontmatter 设置了 `disable-model-invocation: true` 的 skill,或在托管设置或 `--settings` 标志中具有 `skillOverrides` 条目的 skill |

149| `/slides [brief]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 制作一个新的演示文稿作为 Claude Slides [工件](/docs/zh-CN/artifacts#make-a-slide-deck),从你的简介中填充,例如 `/slides a quarterly review of the platform team`。需要 Claude Code v2.1.265 或更高版本、一个[工件可用](/docs/zh-CN/artifacts#availability)的会话,以及一个[Slides 模板可用](/docs/zh-CN/artifacts#start-from-a-slides-design-or-docs-template)的账户;否则命令不会出现。在 Anthropic API 上可用。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上,工件不可用,所以命令在那里不可用 |150| `/slides [brief]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 根据您的简介创建一个新的演示文稿,作为 Claude Slides [Artifact](/docs/zh-CN/artifacts#make-a-slide-deck),例如 `/slides a quarterly review of the platform team`。需要 Claude Code v2.1.265 或更高版本、[Artifact 可用](/docs/zh-CN/artifacts#availability)的会话,以及 [Slides 模板可用](/docs/zh-CN/artifacts#start-from-a-slides-design-or-docs-template)的账户;否则该命令不会出现。可在 Anthropic API 上使用。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上,Artifact 不可用,因此该命令在这些平台上不可用 |

150| `/stats` | `/usage` 的别名。在 Stats 选项卡上打开 |151| `/stats` | `/usage` 的别名。在 Stats 选项卡上打开 |

151| `/status` | 在 Status 选项卡上打开设置界面,显示版本、模型、账户和连接性。一个 `Session kind` 行在[后台会话](/docs/zh-CN/agent-view)中读取 `background job · attached` 或 `background job · unattended`,取决于是否附加了终端,在任何其他会话中读取 `interactive`。在 v2.1.221 之前,`/status` 没有显示此行。在 Claude 响应时工作 |152| `/status` | 在 Status 选项卡上打开设置界面,显示版本、模型、账户和连接状态。在[后台会话](/docs/zh-CN/agent-view)中,`Session kind` 行会显示 `background job · attached` 或 `background job · unattended`(取决于是否附加了终端),在其他任何会话中显示 `interactive`。在 v2.1.221 之前,`/status` 不显示此行。在 Claude 回复时也可使用 |

152| `/statusline` | 配置 Claude Code 的[状态行](/docs/zh-CN/statusline)。描述你想要的内容,或运行不带参数以从你的 shell 提示符自动配置 |153| `/statusline` | 配置 Claude Code 的[状态栏](/docs/zh-CN/statusline)。描述您想要的内容,或不带参数运行以根据您的 shell 提示符自动配置 |

153| `/stickers` | 订购 Claude Code 贴纸 |154| `/stickers` | 订购 Claude Code 贴纸 |

154| `/stop` | 停止当前[后台会话](/docs/zh-CN/agent-view)。仅在附加到后台会话时可用;记录和任何 worktree 都被保留。要分离而不停止,请使用 `/exit` 或按 `←` |155| `/stop` | 停止您已附加到的[后台会话](/docs/zh-CN/agent-view),或您以[窥视回复](/docs/zh-CN/agent-view#peek-and-reply)方式发送此命令的目标会话;会话记录和任何 worktree 都会保留。要分离而不停止,请使用 `/exit` 或按 `←` |

155| `/subtask <task>` | 生成一个[分叉子代理](/docs/zh-CN/sub-agents#fork-the-current-conversation):一个继承完整对话的后台子代理,在你继续工作时处理任务。其结果在完成时返回到这个对话。要将对话复制到单独的后台会话,请改用 `/fork`。需要 Claude Code v2.1.212 或更高版本;在 v2.1.161 到 v2.1.211,这个命令是 `/fork`。当[代理视图关闭](/docs/zh-CN/agent-view#turn-off-agent-view)时,`/subtask` 不可用,`/fork` 保持分叉子代理行为 |156| `/subtask <task>` | 生成一个[分叉子代理](/docs/zh-CN/sub-agents#fork-the-current-conversation):一个继承完整对话的后台子代理,在您继续工作的同时处理该任务。完成后,其结果会返回到此对话。要改为将对话复制到单独的后台会话中,请使用 `/fork`。需要 Claude Code v2.1.212 或更高版本;在 v2.1.161 至 v2.1.211 上,此命令为 `/fork`。当[关闭 Agent 视图](/docs/zh-CN/agent-view#turn-off-agent-view)时,`/subtask` 不可用,`/fork` 保留分叉子代理行为 |

156| `/tasks` | 查看和管理当前会话中的后台工作,包括已完成的子代理。也可用作 `/bashes` |157| `/tasks` | 查看和管理当前会话中的后台工作,包括已完成的子代理。也可作为 `/bashes` 使用 |

157| `/team-onboarding` | 从你的 Claude Code 使用历史生成团队入职指南。Claude 分析你过去 30 天的会话、命令和 MCP 服务器使用情况,并生成一个 markdown 指南,队友可以粘贴为第一条消息以快速设置。对于 Pro、Max、Team 和 Enterprise 计划上的 claude.ai 订阅者,也返回一个共享链接,队友可以直接在 Claude Code 中打开 |158| `/team-onboarding` | 根据您的 Claude Code 使用历史生成团队入门指南。Claude 会分析您过去 30 天的会话、命令和 MCP 服务器使用情况,并生成一份 markdown 指南,队友可以将其作为第一条消息粘贴以快速完成设置。对于 Pro、Max、Team 和 Enterprise 套餐的 claude.ai 订阅者,还会返回一个分享链接,队友可以直接在 Claude Code 中打开 |

158| `/teleport` | 将 [cloud session](/docs/zh-CN/claude-code-on-the-web#from-cloud-to-terminal) 拉入此终端。打开选择器,然后获取分支和对话。也可用作 `/tp`。需要 claude.ai 订阅 |159| `/teleport` | 将[云端会话](/docs/zh-CN/claude-code-on-the-web#from-cloud-to-terminal)拉取到此终端。打开选择器,然后获取分支和对话。也可作为 `/tp` 使用。需要 claude.ai 订阅 |

159| `/terminal-setup` | [在 VS Code、Cursor、Devin Desktop、Alacritty 或 Zed 中安装 Shift+Enter 快捷键以输入多行](/docs/zh-CN/terminal-config#enter-multiline-prompts)。在 Apple Terminal 中,[改为启用 Option+Enter 以输入多行并关闭可听铃声](/docs/zh-CN/terminal-config#enable-option-key-shortcuts-on-macos)。在 iTerm2 中,[打开剪贴板访问以便 `/copy` 工作](/docs/zh-CN/terminal-config#enable-option-key-shortcuts-on-macos) |160| `/terminal-setup` | 在 VS Code、Cursor、Devin Desktop、Alacritty 或 Zed 中[安装用于换行的 Shift+Enter 快捷键](/docs/zh-CN/terminal-config#enter-multiline-prompts)。在 Apple Terminal 中,则改为[启用 Option+Enter 换行并关闭提示音](/docs/zh-CN/terminal-config#enable-option-key-shortcuts-on-macos)。在 iTerm2 中,[开启剪贴板访问,使 `/copy` 能够正常工作](/docs/zh-CN/terminal-config#enable-option-key-shortcuts-on-macos) |

160| `/theme` | 更改颜色主题。包括与你的终端的浅色或深色背景匹配的 `auto` 选项、浅色和深色变体、色盲无障碍(daltonized)主题、使用你的终端颜色调色板的 ANSI 主题,以及来自 `~/.claude/themes/` 或插件的任何[自定义主题](/docs/zh-CN/terminal-config#create-a-custom-theme)。选择\*\*新建自定义主题…\*\*以创建一个 |161| `/theme` | 更改颜色主题。包括与终端浅色或深色背景匹配的 `auto` 选项、浅色和深色变体、色盲友好(daltonized)主题、使用终端调色板的 ANSI 主题,以及来自 `~/.claude/themes/` 或插件的任何[自定义主题](/docs/zh-CN/terminal-config#create-a-custom-theme)。选择 **New custom theme…** 可创建一个主题 |

161| `/tui [default\|fullscreen]` | 设置终端 UI 渲染器并使用你的对话完整地重新启动到它。`fullscreen` 启用[无闪烁 alt-screen 渲染器](/docs/zh-CN/fullscreen)。没有参数时,打印活跃渲染器 |162| `/tui [default\|fullscreen]` | 设置终端 UI 渲染器,并在保持对话完整的情况下重新启动到该渲染器。`fullscreen` 会启用[无闪烁备用屏幕渲染器](/docs/zh-CN/fullscreen)。不带参数时,输出当前活动的渲染器 |

162| `/ultraplan <prompt>` | 已移除。改用[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。以前将规划任务发送到 [cloud session](/docs/zh-CN/claude-code-on-the-web) 以在你的浏览器中审查 |163| `/ultraplan <prompt>` | 已移除。请改用[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。以前会将规划任务发送到[云端会话](/docs/zh-CN/claude-code-on-the-web),以便在浏览器中审阅 |

163| `/ultrareview [PR or branch]` | 在云沙箱中运行深度、多代理代码审查,使用 [ultrareview](/docs/zh-CN/ultrareview)。传递 PR 参考以审查该拉取请求,或分支名称以更改比较基础。首选调用现在是 `/code-review ultra`,`/ultrareview` 保留为别名。在 Pro 和 Max 上包括 3 次免费运行,然后需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |164| `/ultrareview [PR or branch]` | 使用 [ultrareview](/docs/zh-CN/ultrareview) 在云端沙箱中运行深度多 Agent 代码审查。传递 PR 引用可审查该 Pull Request,或传递基准分支或提交以更改比较基准。首选调用方式是 `/code-review ultra`,`/ultrareview` 是其别名。Pro 和 Max 包含 3 次免费运行,之后需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

164| `/update-config [request]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 描述一个设置更改,例如允许一个命令、设置一个环境变量或添加一个 [hook](/docs/zh-CN/hooks),Claude 编辑匹配的 [`settings.json`](/docs/zh-CN/settings) 文件。对于主题和模型等选项,改用 `/config` |165| `/update-config [request]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 描述一项设置更改,例如允许某个命令、设置环境变量或添加 [hook](/docs/zh-CN/hooks),Claude 会编辑相应的 [`settings.json`](/docs/zh-CN/settings) 文件。对于主题和模型等选项,请改用 `/config` |

165| `/upgrade` | 在浏览器中打开升级页面以切换到更高的计划层级。当浏览器无法打开时,命令显示登录提示而不打印 URL |166| `/upgrade` | 在浏览器中打开升级页面,以切换到更高的套餐级别。当浏览器无法打开时,该命令会显示登录提示,但不会输出 URL |

166| `/usage` | 显示会话成本、计划使用限制和活动统计。在 Pro、Max、Team 或 Enterprise 计划上,包括[计入你的计划限制的内容的细目](/docs/zh-CN/costs#plan-usage-breakdown)。`/cost` 和 `/stats` 是别名 |167| `/usage` | 显示会话开销、套餐用量限制和活动统计信息。在 Pro、Max、Team 或 Enterprise 套餐上,包括[计入套餐限制的内容明细](/docs/zh-CN/costs#plan-usage-breakdown)。`/cost` 和 `/stats` 是其别名 |

167| `/usage-credits` | 配置使用额度,或在达到限制时从你的管理员请求它们。在浏览器中打开你的[使用额度计费设置](/docs/zh-CN/costs#add-usage-credits-to-your-subscription),除了没有计费访问权限的 Team 和 Enterprise 成员改为从 CLI 向其管理员发送使用额度请求,在对话框中确认请求通知其管理员后。当没有浏览器可以打开计费页面时,例如通过 SSH,命令改为打印 URL 以访问;这需要 Claude Code v2.1.205 或更高版本,早期版本在这种情况下没有显示任何内容。以前 `/extra-usage` |168| `/usage-credits` | 在达到限制时配置使用额度,或向管理员申请使用额度。在浏览器中打开您的[使用额度计费设置](/docs/zh-CN/costs#add-usage-credits-to-your-subscription);但没有计费访问权限的 Team 和 Enterprise 成员会在对话框中确认该请求会通知其管理员后,改为从 CLI 向管理员发送使用额度请求。当无法打开浏览器访问计费页面时(例如通过 SSH),该命令会改为输出要访问的 URL;这需要 Claude Code v2.1.205 或更高版本,更早版本在这种情况下不显示任何内容。以前为 `/extra-usage` |

168| `/verify` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 通过构建你的项目应用、运行它并观察结果来确认代码更改做了它应该做的事,而不是依赖测试或类型检查。请参阅[运行和验证你的应用](/docs/zh-CN/skills#run-and-verify-your-app) |169| `/verify` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 通过构建、运行您项目的应用并观察结果来确认代码更改是否按预期工作,而不是依赖测试或类型检查。请参阅[运行并验证您的应用](/docs/zh-CN/skills#run-and-verify-your-app) |

169| `/vim` | 在 v2.1.92 中移除。要在 Vim 和 Normal 编辑模式之间切换,请使用 `/config` → 编辑器模式 |170| `/vim` | 已在 v2.1.92 中移除。要在 Vim 和 Normal 编辑模式之间切换,请使用 `/config` → Editor mode |

170| `/voice [hold\|tap\|off]` | 切换[语音听写](/docs/zh-CN/voice-dictation),或在特定模式下启用它。需要 Claude.ai 账户 |171| `/voice [hold\|tap\|off]` | 切换[语音听写](/docs/zh-CN/voice-dictation),或以特定模式启用它。需要 Claude.ai 账户 |

171| `/web-setup` | 使用你的本地 `gh` CLI 凭证将你的 GitHub 账户连接到 [cloud sessions](/docs/zh-CN/web-quickstart#connect-from-your-terminal) |172| `/web-setup` | 使用本地 `gh` CLI 凭据为[云端会话](/docs/zh-CN/web-quickstart#connect-from-your-terminal)连接您的 GitHub 账户 |

172| `/workflow-authoring` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载编写[动态 workflow](/docs/zh-CN/workflows) 脚本的参考:脚本 API、恢复行为、质量模式和工作示例。Claude 通常在编写脚本之前自己加载它;在[手动编辑保存的脚本](/docs/zh-CN/workflows#edit-a-saved-script)之前自己运行它。在启用动态 workflow 时可用,需要 Claude Code v2.1.248 或更高版本 |173| `/workflow-authoring` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载编写[动态工作流](/docs/zh-CN/workflows)脚本的参考:脚本 API、恢复行为、质量模式和完整示例。Claude 通常会在编写脚本之前自行加载它;在[手动编辑已保存的脚本](/docs/zh-CN/workflows#edit-a-saved-script)之前,请自行运行它。在启用动态工作流时可用,需要 Claude Code v2.1.248 或更高版本 |

173| `/workflows` | 打开 [workflow](/docs/zh-CN/workflows#watch-the-run) 进度视图以监视、暂停、恢复或保存运行和已完成的 workflow |174| `/workflows` | 打开[工作流](/docs/zh-CN/workflows#watch-the-run)进度视图,以监视、暂停、恢复或保存正在运行和已完成的工作流 |

174 175 

175<h2 id="how-the-command-menu-matches-what-you-type">176<h2 id="how-the-command-menu-matches-what-you-type">

176 命令菜单如何匹配你输入的内容177 命令菜单如何匹配你输入的内容

Details

70 70 

71* 消息 [超过大小限制](#limitations)。Claude Code 在发送会话中拒绝它,在它离开之前。71* 消息 [超过大小限制](#limitations)。Claude Code 在发送会话中拒绝它,在它离开之前。

72* 对这台机器上的会话的快速突发已达到 [该会话的收件箱接受的内容](#limitations)。Claude Code 拒绝向该会话发送进一步的消息。72* 对这台机器上的会话的快速突发已达到 [该会话的收件箱接受的内容](#limitations)。Claude Code 拒绝向该会话发送进一步的消息。

73* 这台机器之外的某个会话被[列为无法接收跨会话消息](#message-sessions-on-other-machines)。Claude Code 会在发送会话中、消息离开这台机器之前拒绝它。

73* 这台机器上的回复目标未通过安全检查,例如符号链接目标。[拒绝发送跨会话消息](/docs/zh-CN/errors#refusing-to-send-a-cross-session-message) 列出了这些检查。74* 这台机器上的回复目标未通过安全检查,例如符号链接目标。[拒绝发送跨会话消息](/docs/zh-CN/errors#refusing-to-send-a-cross-session-message) 列出了这些检查。

74 75 

75接收会话根据其自己的 [入站控制](#control-inbound-messages) 检查每条到达的消息,检查以三种结果之一结束:76接收会话根据其自己的 [入站控制](#control-inbound-messages) 检查每条到达的消息,检查以三种结果之一结束:


160 161 

161启动与你另一台机器上的会话的对话需要 Claude Code v2.1.225 或更高版本和一个 [出现在列表中](#see-which-sessions-claude-can-reach) 的目标。162启动与你另一台机器上的会话的对话需要 Claude Code v2.1.225 或更高版本和一个 [出现在列表中](#see-which-sessions-claude-can-reach) 的目标。

162 163 

163你可以向显示为 [列表](#see-which-sessions-claude-can-reach) 中 `offline` 的会话发送消息,其远程控制连接已断开的会话。发送通过,但消息仅在该会话的机器重新连接后到达。164会话在[列表](#see-which-sessions-claude-can-reach)中的行可能显示某种状况,这会影响 Claude 向该会话发送消息时的结果:

165 

166* **`offline`**:该会话的 Remote Control 连接已断开。消息可以发出,但仅在该会话的机器重新连接后才会到达。

167* **`can't receive cross-session messages (off in that session)`**:该会话中的消息功能[不可用](#availability),或其 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound) 值为 `refuse`。Claude Code 会在消息离开这台机器之前拒绝发往该会话的消息。Claude 的 `SendMessage` 调用返回的结果以 `Not sent` 开头并说明原因。在该会话中解决问题后,之后的列表将不再显示此状况,Claude 即可向该会话发送消息。

164 168 

165容器内的会话和主机上的会话无法相互到达。同一容器内的两个会话仍然可以相互发送消息,包括在 [自托管运行器](/docs/zh-CN/self-hosted-environments) 上。WSL 2 内的会话和同一计算机上的本机 Windows 会话也无法相互到达。169容器内的会话和主机上的会话无法相互到达。同一容器内的两个会话仍然可以相互发送消息,包括在 [自托管运行器](/docs/zh-CN/self-hosted-environments) 上。WSL 2 内的会话和同一计算机上的本机 Windows 会话也无法相互到达。

166 170 


337要检查会话,输入 `/list-agents`,也可用作 `/peers`。结果将没有该功能的会话与更窄的东西阻止消息的会话分开,如缺少 `SendMessage` 工具或拒绝的发送:341要检查会话,输入 `/list-agents`,也可用作 `/peers`。结果将没有该功能的会话与更窄的东西阻止消息的会话分开,如缺少 `SendMessage` 工具或拒绝的发送:

338 342 

339* **`/list-agents` 无法识别**:会话没有跨会话消息传递。通过上面的要求工作,从 `claude --version` 开始获取版本要求。343* **`/list-agents` 无法识别**:会话没有跨会话消息传递。通过上面的要求工作,从 `claude --version` 开始获取版本要求。

340* **`/list-agents` 有效但发送未到达**:消息传递启用,更窄的东西适用:344* **`/list-agents` 有效但发送未到达**:消息传递已启用,适用的是范围更窄的原因:

341 * **拒绝规则**:[权限拒绝规则](#turn-off-cross-session-messaging)删除 `SendMessage` 和 `ListAgents` 工具。345 * **拒绝规则**:[权限拒绝规则](#turn-off-cross-session-messaging)删除 `SendMessage` 和 `ListAgents` 工具。

342 * **入站控制**:[接收会话的入站控制](#control-inbound-messages)可以保留或删除您发送给它的内容。346 * **入站控制**:[接收会话的入站控制](#control-inbound-messages)可以保留或删除您发送给它的内容。

343 * **云会话缺失**:云会话仅在此会话连接到[远程控制](/docs/zh-CN/remote-control)时出现。347 * **云端会话缺失**:云端会话仅在此会话连接到 [Remote Control](/docs/zh-CN/remote-control) 时出现。

344 * **其他机器会话缺失**:您另一台机器上的会话仅在它使用[远程控制](/docs/zh-CN/remote-control)运行且此会话也连接时出现。348 * **其他机器会话缺失**:您另一台机器上的会话仅在它使用 [Remote Control](/docs/zh-CN/remote-control) 运行且此会话也已连接时出现。

345 * **其他机器会话 `offline`**:向列为 `offline` 的会话发送消息通过,但[仅在该会话的机器重新连接后到达](#message-sessions-on-other-machines)。349 * **其他机器会话 `offline`**:向列为 `offline` 的会话发送的消息会通过,但[仅在该会话的机器重新连接后到达](#message-sessions-on-other-machines)。

346 * **较旧的云或其他机器会话缺失**:Claude Code 首先读取这些会话列表最新的并在有限数量的页面后停止,因此 Claude 无法按名称向超过它们的会话发送消息。350 * **云端或其他机器会话 `can't receive cross-session messages`**:向列有此状态的会话发送的消息[不会离开此机器](#message-sessions-on-other-machines),并且 `SendMessage` 下的结果以 `Not sent` 开头。

351 * **较旧的云端或其他机器会话缺失**:Claude Code 按从新到旧的顺序读取这些会话列表,并在有限数量的页面后停止,因此 Claude 无法按名称向超出这些页面的会话发送消息。

347 352 

348在具有消息传递的会话中,`/status` 也显示 `Peer address` 行,带有会话自己的收件箱地址,或 `unavailable` 和原因,当 Claude Code [无法设置收件箱](#the-sessions-inbox-socket)时。353在具有消息传递的会话中,`/status` 也显示 `Peer address` 行,带有会话自己的收件箱地址,或 `unavailable` 和原因,当 Claude Code [无法设置收件箱](#the-sessions-inbox-socket)时。

349 354 

Details

62对于配置位置和范围规则,请参阅 [MCP](/docs/zh-CN/mcp)。62对于配置位置和范围规则,请参阅 [MCP](/docs/zh-CN/mcp)。

63 63 

64<h2 id="check-hooks">64<h2 id="check-hooks">

65 检查 hooks65 检查 hook

66</h2>66</h2>

67 67 

68运行 `/hooks` 来列出当前会话注册的每个 hook,按事件分组。如果你定义的 hook 没有出现,它没有被读取:hooks 在设置文件中的 `"hooks"` 键下,而不是在独立文件中。68运行 `/hooks` 来列出当前会话注册的每个 hook,按事件分组。如果您定义的 hook 没有出现,说明 Claude Code 没有加载它。请检查以下原因:

69 

70* 该 hook 定义在独立文件中。hook 应位于[设置文件](/docs/zh-CN/settings#settings-files)中的 `"hooks"` 键下。

71* `matcher` 值是数组而不是单个字符串。在您启动交互式会话时以及在 `claude doctor` 中,Claude Code 会将该条目列为无效设置。如果该数组位于 `PreToolUse` 或 `PermissionRequest` 下,该文件中的其他 hook 也都不会加载。

69 72 

70如果 hook 出现但没有触发,匹配器通常是原因。检查它是否有这些错误:73如果 hook 出现但没有触发,匹配器通常是原因。检查它是否有这些错误:

71 74 

72* `matcher` 字段是一个使用 `|` 来匹配多个工具名称的单个字符串,例如 `"Edit|Write"`。`,` 分隔符是等效的,所以 `"Edit,Write"` 匹配相同的工具。在 v2.1.191 之前,逗号会进入正则表达式评估,匹配器永远不会匹配,所以如果你不在 v2.1.191 上,请使用 `|`。75* `matcher` 字段是一个使用 `|` 来匹配多个工具名称的单个字符串,例如 `"Edit|Write"`。`,` 分隔符是等效的,所以 `"Edit,Write"` 匹配相同的工具。在 v2.1.191 之前,逗号会进入正则表达式评估,匹配器永远不会匹配,所以如果您尚未使用 v2.1.191,请使用 `|`。

73* 拼写错误的工具名称会产生一个不匹配任何内容的匹配器,所以 hook 会无声地失败。76* 拼写错误的工具名称会产生一个不匹配任何内容的匹配器,所以 hook 会无声地失败。

74* 数组值是一个 schema 错误:Claude Code 显示设置错误通知并拒绝整个用户、项目或本地设置文件,`claude doctor` 报告验证失败,该文件中没有 hook 出现在 `/hooks` 中。在[托管设置](/docs/zh-CN/managed-settings)中,Claude Code 从包含数组的文件中删除整个 `hooks` 键,所以该文件的 hooks 都不适用。文件的其他设置仍然适用,`claude doctor` 列出删除的键。

75 77 

76当你编辑 `settings.json` 时,更改在短暂的文件稳定延迟后在运行的会话中生效,即使你在会话启动后创建了文件或项目的 `.claude/` 文件夹。你不需要重新启动。在 v2.1.257 之前,Claude Code 没有检测到在会话启动后创建的 `.claude/` 文件夹中的编辑。78当您编辑 `settings.json` 时,更改在短暂的文件稳定延迟后在运行的会话中生效,即使您在会话启动后创建了文件或项目的 `.claude/` 文件夹。您不需要重新启动。在 v2.1.257 之前,Claude Code 没有检测到在会话启动后创建的 `.claude/` 文件夹中的编辑。

77 79 

78如果保存后几秒钟 `/hooks` 仍然显示旧定义,再次运行 `/hooks` 来刷新视图。80如果保存后几秒钟 `/hooks` 仍然显示旧定义,再次运行 `/hooks` 来刷新视图。

79 81 

80如果 `/hooks` 显示 hook 但它仍然没有触发,下一步是实时观察 hook 评估。使用 `claude --debug` 启动会话并触发工具调用。调试日志记录每个事件、检查了哪些匹配器以及 hook 的退出代码和输出。有关日志格式,请参阅[调试 hooks](/docs/zh-CN/hooks#debug-hooks),有关常见失败模式,请参阅[hooks 故障排除](/docs/zh-CN/hooks-guide#limitations-and-troubleshooting)。82如果 `/hooks` 显示 hook 但它仍然没有触发,下一步是实时观察 hook 评估。使用 `claude --debug` 启动会话并触发工具调用。调试日志记录每个事件、检查了哪些匹配器以及 hook 的退出码和输出。有关日志格式,请参阅[调试 hook](/docs/zh-CN/hooks#debug-hooks),有关常见失败模式,请参阅[hook 故障排除](/docs/zh-CN/hooks-guide#limitations-and-troubleshooting)。

81 83 

82<h2 id="test-against-a-clean-configuration">84<h2 id="test-against-a-clean-configuration">

83 针对干净配置进行测试85 针对干净配置进行测试

desktop.md +8 −6

Details

96 96 

97`dontAsk` 权限模式仅在 [CLI](/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 中可用。97`dontAsk` 权限模式仅在 [CLI](/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 中可用。

98 98 

99<span id="auto-mode-availability" />

100 

101Auto mode 对 Anthropic API 上的所有用户可用,需要 Claude Opus 4.6 或更高版本、Sonnet 4.6 或更高版本,或 [Fable model](/docs/zh-CN/model-config#work-with-fable)。组织管理员可以使用[托管设置](#managed-settings)中的 `disableAutoMode` 键关闭 auto mode。

102 

103在路由 Desktop 到 Google Cloud 的 Agent Platform 的 Enterprise 部署中,auto mode 也默认可用;有关支持的模型,请参阅 [Auto mode on Bedrock, Agent Platform, or Foundry](/docs/zh-CN/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry)。

104 

105<Tip title="最佳实践">99<Tip title="最佳实践">

106 在 Plan 中开始复杂任务,以便 Claude 在进行更改之前制定方法。一旦你批准计划,切换到 Accept edits 或 Manual 来执行它。有关此工作流的更多信息,请参阅[先探索,然后计划,然后编码](/docs/zh-CN/best-practices#explore-first-then-plan-then-code)。100 在 Plan 中开始复杂任务,以便 Claude 在进行更改之前制定方法。一旦你批准计划,切换到 Accept edits 或 Manual 来执行它。有关此工作流的更多信息,请参阅[先探索,然后计划,然后编码](/docs/zh-CN/best-practices#explore-first-then-plan-then-code)。

107</Tip>101</Tip>


110 104 

111Enterprise 管理员可以限制哪些权限模式可用。有关详细信息,请参阅[企业配置](#enterprise-configuration)。105Enterprise 管理员可以限制哪些权限模式可用。有关详细信息,请参阅[企业配置](#enterprise-configuration)。

112 106 

107<h4 id="auto-mode-availability">

108 自动模式可用性

109</h4>

110 

111自动模式对 Anthropic API 上的所有用户可用,需要 Claude Opus 4.6 或更高版本、Sonnet 4.6 或更高版本,或 [Fable 模型](/docs/zh-CN/model-config#work-with-fable)。组织管理员可以使用[托管设置](#managed-settings)中的 `disableAutoMode` 键关闭自动模式。

112 

113在将 Desktop 路由到 Google Cloud 的 Agent Platform 的 Enterprise 部署中,自动模式也默认可用;有关支持的模型,请参阅 [Bedrock、Agent Platform 或 Foundry 上的自动模式](/docs/zh-CN/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry)。

114 

113<h3 id="preview-your-app">115<h3 id="preview-your-app">

114 预览你的应用116 预览你的应用

115</h3>117</h3>

Details

103 103 

104如果 apt 报告 `E: Unsupported file ./claude-desktop_*.deb given on commandline`,则该模式与当前目录中的 `.deb` 文件不匹配。确认下载已完成,然后从包含该文件的目录再次运行该命令。104如果 apt 报告 `E: Unsupported file ./claude-desktop_*.deb given on commandline`,则该模式与当前目录中的 `.deb` 文件不匹配。确认下载已完成,然后从包含该文件的目录再次运行该命令。

105 105 

106安装 `.deb` 还会在 `/etc/apt/sources.list.d/claude-desktop.list` 注册 Anthropic 的 apt 存储库,因此未来的更新会随您系统的 [常规包更新](#update) 到达。106`.deb` 包含 Anthropic 的签名密钥,并将其安装到 `/usr/share/keyrings/claude-desktop-archive-keyring.asc`,因此您无需自行下载密钥。除非您已通过 `CLAUDE_DESKTOP_ADD_REPO` 关闭注册,否则该软件包还会在 `/etc/apt/sources.list.d/claude-desktop.list` 注册 apt 仓库,因此未来的更新会随您系统的 [常规包更新](#update) 到达。

107 107 

108<h2 id="update">108<h2 id="update">

109 更新109 更新

env-vars.md +6 −4

Details

180| `ANTHROPIC_FOUNDRY_API_KEY` | Microsoft Foundry 身份验证的 API 密钥(参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |180| `ANTHROPIC_FOUNDRY_API_KEY` | Microsoft Foundry 身份验证的 API 密钥(参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |

181| `ANTHROPIC_FOUNDRY_AUTH_TOKEN` | Microsoft Foundry 身份验证的持有者令牌,例如 Microsoft Entra 访问令牌。Claude Code 将其作为 `Authorization: Bearer` 标头发送。优先于 `ANTHROPIC_FOUNDRY_API_KEY` 和 Azure 默认凭证链。参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)。需要 Claude Code v2.1.203 或更高版本 |181| `ANTHROPIC_FOUNDRY_AUTH_TOKEN` | Microsoft Foundry 身份验证的持有者令牌,例如 Microsoft Entra 访问令牌。Claude Code 将其作为 `Authorization: Bearer` 标头发送。优先于 `ANTHROPIC_FOUNDRY_API_KEY` 和 Azure 默认凭证链。参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)。需要 Claude Code v2.1.203 或更高版本 |

182| `ANTHROPIC_FOUNDRY_BASE_URL` | Microsoft Foundry 资源的完整基础 URL(例如,`https://my-resource.services.ai.azure.com/anthropic`)。`ANTHROPIC_FOUNDRY_RESOURCE` 的替代方案(参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |182| `ANTHROPIC_FOUNDRY_BASE_URL` | Microsoft Foundry 资源的完整基础 URL(例如,`https://my-resource.services.ai.azure.com/anthropic`)。`ANTHROPIC_FOUNDRY_RESOURCE` 的替代方案(参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |

183| `ANTHROPIC_FOUNDRY_RESOURCE` | Microsoft Foundry 资源名称(例如,`my-resource`)。如果未设置 `ANTHROPIC_FOUNDRY_BASE_URL`,则为必需(参见 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |183| `ANTHROPIC_FOUNDRY_RESOURCE` | Microsoft Foundry 资源名称(例如 `my-resource`)。Claude Code [会拒绝 URL 或主机名](/docs/zh-CN/errors#anthropic-foundry-resource-must-be-a-foundry-resource-name)。如果未设置 `ANTHROPIC_FOUNDRY_BASE_URL` 则为必需(请参阅 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)) |

184| `ANTHROPIC_MODEL` | 要使用的模型设置的名称(参见 [模型配置](/docs/zh-CN/model-config#environment-variables)) |184| `ANTHROPIC_MODEL` | 要使用的模型设置的名称(参见 [模型配置](/docs/zh-CN/model-config#environment-variables)) |

185| `ANTHROPIC_ORGANIZATION_ID` | [工作负载身份联合](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 的组织 ID。与 `ANTHROPIC_FEDERATION_RULE_ID` 一起设置。参见 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) |185| `ANTHROPIC_ORGANIZATION_ID` | [工作负载身份联合](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 的组织 ID。与 `ANTHROPIC_FEDERATION_RULE_ID` 一起设置。参见 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) |

186| `ANTHROPIC_PROFILE` | 要使用的 Anthropic 配置文件的名称,例如由 [`ant auth login`](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/authentication) 创建的或通过 [在没有 API 密钥的情况下登录控制台帐户](/docs/zh-CN/authentication#sign-in-without-an-api-key)。参见 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) |186| `ANTHROPIC_PROFILE` | 要使用的 Anthropic 配置文件的名称,例如由 [`ant auth login`](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/authentication) 创建的或通过 [在没有 API 密钥的情况下登录控制台帐户](/docs/zh-CN/authentication#sign-in-without-an-api-key)。参见 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) |


205| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 子代理的停滞超时(毫秒)。默认 `600000`(10 分钟);如果您在流监视程序打开时提高 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`,默认值会随之上升,如 [处理缓慢或停滞的 API 响应](/docs/zh-CN/agent-sdk/typescript#handle-slow-or-stalled-api-responses) 所述。计时器在每个流式进度事件上重置;如果窗口内没有进度到达,Claude Code 会中止子代理并向父级报告停滞 |205| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 子代理的停滞超时(毫秒)。默认 `600000`(10 分钟);如果您在流监视程序打开时提高 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`,默认值会随之上升,如 [处理缓慢或停滞的 API 响应](/docs/zh-CN/agent-sdk/typescript#handle-slow-or-stalled-api-responses) 所述。计时器在每个流式进度事件上重置;如果窗口内没有进度到达,Claude Code 会中止子代理并向父级报告停滞 |

206| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 设置自动压缩窗口的百分比(1-100),自动压缩在该百分比处触发。使用较低的值(如 `50`)以更早压缩;变量无法提高阈值,因此高于默认百分比的值被忽略。它仅适用于在模型的上下文限制之前 [压缩](/docs/zh-CN/model-config#context-window-and-auto-compaction) 的会话。适用于主对话和子代理 |206| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 设置自动压缩窗口的百分比(1-100),自动压缩在该百分比处触发。使用较低的值(如 `50`)以更早压缩;变量无法提高阈值,因此高于默认百分比的值被忽略。它仅适用于在模型的上下文限制之前 [压缩](/docs/zh-CN/model-config#context-window-and-auto-compaction) 的会话。适用于主对话和子代理 |

207| `CLAUDE_AUTO_BACKGROUND_TASKS` | 设置为 `1` 以强制启用长时间运行的代理任务的自动后台处理。启用后,子代理在运行约两分钟后移至后台。在 Claude Code v2.1.212 或更高版本上,也启用 [长 MCP 工具调用的自动后台处理](/docs/zh-CN/mcp#automatic-backgrounding-of-long-tool-calls)(非交互模式) |207| `CLAUDE_AUTO_BACKGROUND_TASKS` | 设置为 `1` 以强制启用长时间运行的代理任务的自动后台处理。启用后,子代理在运行约两分钟后移至后台。在 Claude Code v2.1.212 或更高版本上,也启用 [长 MCP 工具调用的自动后台处理](/docs/zh-CN/mcp#automatic-backgrounding-of-long-tool-calls)(非交互模式) |

208| `CLAUDE_AX_PREPARK_MS` | 在 [屏幕阅读器模式](/docs/zh-CN/accessibility#what-your-screen-reader-hears) 中,Claude Code 在光标位于行首时等待的毫秒数,然后写入新行或更改的行。默认 `50`。设置 `0` 以立即写入。Claude Code 将等待上限设置为 `5000`。需要 Claude Code v2.1.233 或更高版本 |208| `CLAUDE_AX_PREPARK_MS` | 在[屏幕阅读器模式](/docs/zh-CN/accessibility)下,Claude Code 在写入新行或已更改行之前等待的毫秒数。默认为 `0`,因此 Claude Code 不会等待。在 v2.1.287 之前,默认值为 `50`。Claude Code 将等待时间上限设为 `5000`。需要 Claude Code v2.1.233 或更高版本 |

209| `CLAUDE_AX_SCREEN_READER` | 设置为 `1` 以呈现屏幕阅读器友好的输出:没有装饰性边框或动画的平面文本。设置为 `0` 以强制关闭屏幕阅读器模式,即使 [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) 为 `true`。[`--ax-screen-reader`](/docs/zh-CN/cli-reference#cli-flags) 标志优先。需要 Claude Code v2.1.181 或更高版本 |209| `CLAUDE_AX_SCREEN_READER` | 设置为 `1` 以呈现屏幕阅读器友好的输出:没有装饰性边框或动画的平面文本。设置为 `0` 以强制关闭屏幕阅读器模式,即使 [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) 为 `true`。[`--ax-screen-reader`](/docs/zh-CN/cli-reference#cli-flags) 标志优先。需要 Claude Code v2.1.181 或更高版本 |

210| `CLAUDE_AX_STARTUP_QUIET_MS` | 在 [屏幕阅读器模式](/docs/zh-CN/accessibility) 中,Claude Code 在启动确认行之后保持第一个界面呈现的毫秒数,以便您的屏幕阅读器可以在新输出中断之前完整地说出该行。默认 `3000`。设置 `0` 以立即呈现。Claude Code 将保持上限设置为 `600000`(10 分钟)。您的第一次按键会提前结束保持。需要 Claude Code v2.1.217 或更高版本 |210| `CLAUDE_AX_STARTUP_QUIET_MS` | 在 [屏幕阅读器模式](/docs/zh-CN/accessibility) 中,Claude Code 在启动确认行之后保持第一个界面呈现的毫秒数,以便您的屏幕阅读器可以在新输出中断之前完整地说出该行。默认 `3000`。设置 `0` 以立即呈现。Claude Code 将保持上限设置为 `600000`(10 分钟)。您的第一次按键会提前结束保持。需要 Claude Code v2.1.217 或更高版本 |

211| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | 在主会话中每个 Bash 或 PowerShell 命令后返回到原始工作目录 |211| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | 在主会话中每个 Bash 或 PowerShell 命令后返回到原始工作目录 |


245| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | 设置为 `1` 以禁用 [全屏呈现](/docs/zh-CN/fullscreen) 并使用经典主屏幕渲染器。对话保留在您终端的本机滚动条中,因此 `Cmd+f` 和 tmux 复制模式照常工作。优先于 `CLAUDE_CODE_NO_FLICKER` 和 [`tui`](/docs/zh-CN/settings-reference#tui) 设置。您也可以使用 `/tui default` 切换。不适用于从 [代理视图](/docs/zh-CN/agent-view) 打开的后台会话,它们始终使用全屏呈现 |245| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | 设置为 `1` 以禁用 [全屏呈现](/docs/zh-CN/fullscreen) 并使用经典主屏幕渲染器。对话保留在您终端的本机滚动条中,因此 `Cmd+f` 和 tmux 复制模式照常工作。优先于 `CLAUDE_CODE_NO_FLICKER` 和 [`tui`](/docs/zh-CN/settings-reference#tui) 设置。您也可以使用 `/tui default` 切换。不适用于从 [代理视图](/docs/zh-CN/agent-view) 打开的后台会话,它们始终使用全屏呈现 |

246| `CLAUDE_CODE_DISABLE_ARTIFACT` | 设置为 `1` 以关闭 [Artifact](/docs/zh-CN/artifacts) 工具,该工具将会话输出发布为 claude.ai 上的私有网页。设置后,没有设置文件会打开该工具。要改为从设置文件关闭该工具,请将 [`enableArtifact`](/docs/zh-CN/settings-reference#enableartifact) 设置为 `false`;已弃用的 [`disableArtifact`](/docs/zh-CN/settings-reference#disableartifact) 密钥也会关闭它 |246| `CLAUDE_CODE_DISABLE_ARTIFACT` | 设置为 `1` 以关闭 [Artifact](/docs/zh-CN/artifacts) 工具,该工具将会话输出发布为 claude.ai 上的私有网页。设置后,没有设置文件会打开该工具。要改为从设置文件关闭该工具,请将 [`enableArtifact`](/docs/zh-CN/settings-reference#enableartifact) 设置为 `false`;已弃用的 [`disableArtifact`](/docs/zh-CN/settings-reference#disableartifact) 密钥也会关闭它 |

247| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | 设置为 `1` 以禁用附件处理。带有 `@` 语法的文件提及作为纯文本发送,而不是扩展为文件内容 |247| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | 设置为 `1` 以禁用附件处理。带有 `@` 语法的文件提及作为纯文本发送,而不是扩展为文件内容 |

248| `CLAUDE_CODE_DISABLE_AUTH_REFRESH_LOCK` | 设置为 `1` 可让 Claude Code 进程自行运行其 [`gcpAuthRefresh`](/docs/zh-CN/settings-reference#gcpauthrefresh) 或 [`awsAuthRefresh`](/docs/zh-CN/settings-reference#awsauthrefresh) 命令,而不是在另一个进程运行该命令时等待。需要 Claude Code v2.1.286 或更高版本 |

248| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | 设置为 `1` 以禁用 [自动内存](/docs/zh-CN/memory#auto-memory)。设置为 `0` 以强制启用自动内存,即使 `--bare` 模式或 [`autoMemoryEnabled: false`](/docs/zh-CN/settings-reference#automemoryenabled) 会禁用它。禁用时,Claude 不创建或加载自动内存文件 |249| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | 设置为 `1` 以禁用 [自动内存](/docs/zh-CN/memory#auto-memory)。设置为 `0` 以强制启用自动内存,即使 `--bare` 模式或 [`autoMemoryEnabled: false`](/docs/zh-CN/settings-reference#automemoryenabled) 会禁用它。禁用时,Claude 不创建或加载自动内存文件 |

249| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | 设置为 `1` 以禁用所有后台任务功能,包括 Bash 和子代理工具上的 `run_in_background` 参数、自动后台处理和 Ctrl+B 快捷键 |250| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | 设置为 `1` 以禁用所有后台任务功能,包括 Bash 和子代理工具上的 `run_in_background` 参数、自动后台处理和 Ctrl+B 快捷键 |

250| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | 设置为 `1` 以停止 Claude Code 将缺少或空的 `Content-Type` 标头的 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 流式响应视为 Amazon Bedrock 的二进制事件流。默认情况下,Claude Code 假设网关从其他未修改的响应中删除了标头,因此它解码正文,流式处理继续工作。仅为也将流重新发出为服务器发送事件的网关设置此选项;Claude Code 随后将无标头正文读作服务器发送事件。需要 Claude Code v2.1.239 或更高版本 |251| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | 设置为 `1` 以停止 Claude Code 将缺少或空的 `Content-Type` 标头的 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 流式响应视为 Amazon Bedrock 的二进制事件流。默认情况下,Claude Code 假设网关从其他未修改的响应中删除了标头,因此它解码正文,流式处理继续工作。仅为也将流重新发出为服务器发送事件的网关设置此选项;Claude Code 随后将无标头正文读作服务器发送事件。需要 Claude Code v2.1.239 或更高版本 |


256| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | 设置为 `1` 以防止将任何 CLAUDE.md 内存文件加载到上下文中,包括用户、项目和自动内存文件 |257| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | 设置为 `1` 以防止将任何 CLAUDE.md 内存文件加载到上下文中,包括用户、项目和自动内存文件 |

257| `CLAUDE_CODE_DISABLE_CRON` | 设置为 `1` 以禁用 [计划任务](/docs/zh-CN/scheduled-tasks)。`/loop` skill 和 cron 工具变为不可用,任何已计划的任务停止触发,包括已在运行的任务 |258| `CLAUDE_CODE_DISABLE_CRON` | 设置为 `1` 以禁用 [计划任务](/docs/zh-CN/scheduled-tasks)。`/loop` skill 和 cron 工具变为不可用,任何已计划的任务停止触发,包括已在运行的任务 |

258| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | 设置为 `1` 以关闭 [关键路径删除](/docs/zh-CN/permission-modes#critical-paths) 提示的时间限制。在 `auto` 模式中,Claude Code 随后将这些删除发送给分类器,在 `bypassPermissions` 模式中,提示等待您的答案。在启动 Claude Code 的环境中设置它,因为 Claude Code 忽略通过设置 `env` 块传递的副本。需要 Claude Code v2.1.281 或更高版本 |259| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | 设置为 `1` 以关闭 [关键路径删除](/docs/zh-CN/permission-modes#critical-paths) 提示的时间限制。在 `auto` 模式中,Claude Code 随后将这些删除发送给分类器,在 `bypassPermissions` 模式中,提示等待您的答案。在启动 Claude Code 的环境中设置它,因为 Claude Code 忽略通过设置 `env` 块传递的副本。需要 Claude Code v2.1.281 或更高版本 |

259| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | 设置为 `1` 以从 API 请求中删除 Anthropic 特定的 `anthropic-beta` 请求标头和测试版工具模式字段(如 `defer_loading` 和 `eager_input_streaming`)。当代理网关拒绝请求并出现错误(如"Unexpected value(s) for the `anthropic-beta` header"或"Extra inputs are not permitted")时使用此选项。标准字段(`name`、`description`、`input_schema`、`cache_control`)被保留。[MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search) 被禁用,所有 MCP 工具预先加载,即使您设置 `ENABLE_TOOL_SEARCH`。在 Claude Code v2.1.227 或更高版本上,[托管设置](/docs/zh-CN/managed-settings) 可以保持工具搜索打开。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities) 涵盖覆盖应用的位置 |260| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | 设置为 `1` 可从 API 请求中移除预发布的 `anthropic-beta` 请求标头、与之配对的请求体字段,以及 `defer_loading` 和 `eager_input_streaming` 等 beta 工具架构字段。当代理网关因 `anthropic-beta` 标头报 `Unexpected value(s)` 错误或报 `Extra inputs are not permitted` 错误而拒绝请求时,请使用此变量。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities)列出了该变量移除的内容(包括 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search))以及 Claude Code 仍会发送的内容 |

260| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | 设置为 `1` 以禁用内置 [Explore 和 Plan 子代理](/docs/zh-CN/sub-agents#built-in-subagents)。Claude 使用其搜索工具或通用子代理进行探索,[plan 模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 直接读取文件而不是启动 Explore 和 Plan 代理。名为 `Explore` 或 `Plan` 的自定义子代理不受影响。要在 Agent SDK 或非交互模式中删除每个内置子代理类型,请改用 `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS`。需要 Claude Code v2.1.198 或更高版本 |261| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | 设置为 `1` 以禁用内置 [Explore 和 Plan 子代理](/docs/zh-CN/sub-agents#built-in-subagents)。Claude 使用其搜索工具或通用子代理进行探索,[plan 模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 直接读取文件而不是启动 Explore 和 Plan 代理。名为 `Explore` 或 `Plan` 的自定义子代理不受影响。要在 Agent SDK 或非交互模式中删除每个内置子代理类型,请改用 `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS`。需要 Claude Code v2.1.198 或更高版本 |

261| `CLAUDE_CODE_DISABLE_FAST_MODE` | 设置为 `1` 以禁用 [快速模式](/docs/zh-CN/fast-mode) |262| `CLAUDE_CODE_DISABLE_FAST_MODE` | 设置为 `1` 以禁用 [快速模式](/docs/zh-CN/fast-mode) |

262| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | 设置为 `1` 以禁用"Claude 表现如何?"会话质量调查。当设置 `DISABLE_TELEMETRY`、`DO_NOT_TRACK` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,调查也被禁用,除非 `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` 选择加入。要设置样本率而不是完全禁用,请使用 [`feedbackSurveyRate`](/docs/zh-CN/settings-reference#feedbacksurveyrate) 设置。参见 [会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys) |263| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | 设置为 `1` 以禁用"Claude 表现如何?"会话质量调查。当设置 `DISABLE_TELEMETRY`、`DO_NOT_TRACK` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,调查也被禁用,除非 `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` 选择加入。要设置样本率而不是完全禁用,请使用 [`feedbackSurveyRate`](/docs/zh-CN/settings-reference#feedbacksurveyrate) 设置。参见 [会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys) |


362| `CLAUDE_CODE_REMOTE` | 当 Claude Code 作为 [云会话](/docs/zh-CN/claude-code-on-the-web) 运行时自动设置为 `true`。从 hook 或设置脚本读取此项以检测您是否在云会话中 |363| `CLAUDE_CODE_REMOTE` | 当 Claude Code 作为 [云会话](/docs/zh-CN/claude-code-on-the-web) 运行时自动设置为 `true`。从 hook 或设置脚本读取此项以检测您是否在云会话中 |

363| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中自动设置为当前会话的 ID。读取此项以构造回到会话成绩单的链接。参见 [将输出链接回会话](/docs/zh-CN/cloud-environments#link-output-back-to-the-session) |364| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中自动设置为当前会话的 ID。读取此项以构造回到会话成绩单的链接。参见 [将输出链接回会话](/docs/zh-CN/cloud-environments#link-output-back-to-the-session) |

364| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 以在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 在设置文件的 `env` 块中忽略此变量。需要 Claude Code v2.1.248 或更高版本 |365| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 以在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 在设置文件的 `env` 块中忽略此变量。需要 Claude Code v2.1.248 或更高版本 |

365| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 以在前一个会话在转向中途结束时自动恢复。在 SDK 模式中使用,以便模型继续而不需要 SDK 重新发送提示。要关闭此功能,取消设置变量或将其设置为 `0`。在 v2.1.221 之前,Claude Code 忽略 `0` 和其他虚假值,因此设置 `0` 仍在非交互模式中触发恢复,取消设置变量是关闭它的唯一方法 |366| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 可在上一个会话于轮次中途结束时自动恢复。用于 SDK 模式,使模型无需 SDK 重新发送提示词即可继续。要关闭此功能,请取消设置该变量或将其设置为 `0`。有关 VS Code 聊天面板,请参阅[重新加载后继续对话](/docs/zh-CN/vs-code#continue-conversations-after-a-reload) |

366| `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 或更高版本 |367| `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 或更高版本 |

367| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖当 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 继续中断的转向而不是重新发送其提示时,或当您使用 `-p` 恢复 [延迟的工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later) 时,Claude Code 发送给 Claude 的继续消息。默认为 `Continue from where you left off.`。空字符串使用默认值 |368| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖当 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 继续中断的转向而不是重新发送其提示时,或当您使用 `-p` 恢复 [延迟的工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later) 时,Claude Code 发送给 Claude 的继续消息。默认为 `Continue from where you left off.`。空字符串使用默认值 |

368| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于无人值守的会话(如 eval 工具、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 或更高版本 |369| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于无人值守的会话(如 eval 工具、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 或更高版本 |


543* 同步为你的 claude.ai 账户启用的[技能](/docs/zh-CN/skills#where-synced-skills-load)和[插件](/docs/zh-CN/plugins/loading#synced-plugins)到你的终端会话中544* 同步为你的 claude.ai 账户启用的[技能](/docs/zh-CN/skills#where-synced-skills-load)和[插件](/docs/zh-CN/plugins/loading#synced-plugins)到你的终端会话中

544* 使用[顾问工具](/docs/zh-CN/advisor#requirements)545* 使用[顾问工具](/docs/zh-CN/advisor#requirements)

545* 读取或回复[工件上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)546* 读取或回复[工件上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)

547* 让 Claude 读取[其他组织的公开 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you)

546* 让 Claude Code 探测 claude.ai 连接器服务器以获取 [MCP 协议修订版本 2026-07-28](/docs/zh-CN/mcp#mcp-client-runtimes),除非你设置 `MCP_PROTOCOL_NEGOTIATION=auto`548* 让 Claude Code 探测 claude.ai 连接器服务器以获取 [MCP 协议修订版本 2026-07-28](/docs/zh-CN/mcp#mcp-client-runtimes),除非你设置 `MCP_PROTOCOL_NEGOTIATION=auto`

547* 默认为 claude.ai 和 Console 账户在安装了 Git Bash 的 Windows 上获取 [PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool);Claude Code 通过 Git Bash 路由 shell 命令,除非你设置 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。在没有 Git Bash 的 Windows 上,该工具保持启用549* 默认为 claude.ai 和 Console 账户在安装了 Git Bash 的 Windows 上获取 [PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool);Claude Code 通过 Git Bash 路由 shell 命令,除非你设置 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。在没有 Git Bash 的 Windows 上,该工具保持启用

548* 获取 [Claude 草拟的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),Claude Code 通过获取的标志来启用它550* 获取 [Claude 草拟的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),Claude Code 通过获取的标志来启用它

errors.md +1216 −984

Details

8 8 

9本页列出 Claude Code 显示的运行时错误以及如何从每个错误中恢复,以及当响应似乎有问题但没有错误时要检查的内容。对于安装错误(如 `command not found` 或设置期间的 TLS 失败),请参阅[排查安装和登录问题](/docs/zh-CN/troubleshoot-install)。9本页列出 Claude Code 显示的运行时错误以及如何从每个错误中恢复,以及当响应似乎有问题但没有错误时要检查的内容。对于安装错误(如 `command not found` 或设置期间的 TLS 失败),请参阅[排查安装和登录问题](/docs/zh-CN/troubleshoot-install)。

10 10 

11除了[包装器和 IDE 错误](#wrapper-and-ide-errors)(由启动程序打印而不是 Claude Code 本身打印)外,这些错误和恢复命令适用于 CLI、[桌面应用](/docs/zh-CN/desktop)和[云会话](/docs/zh-CN/claude-code-on-the-web),因为这三个都包装相同的 Claude Code CLI。对于其他表面特定的问题,请参阅该表面页面上的故障排除部分。11除了[包装器和 IDE 错误](#wrapper-and-ide-errors)(由启动程序打印而不是 Claude Code 本身打印)外,这些错误和恢复命令适用于 CLI、[桌面应用](/docs/zh-CN/desktop)和[云端会话](/docs/zh-CN/claude-code-on-the-web),因为这三个都包装相同的 Claude Code CLI。对于其他特定于使用入口的问题,请参阅该使用入口页面上的故障排除部分。

12 12 

13<Note>13<Note>

14 Claude Code 调用 Claude API 来获取模型响应,因此大多数运行时错误映射到底层 API 错误代码。本页介绍每个错误在 Claude Code 中的含义以及如何恢复。有关原始 HTTP 状态代码定义,请参阅 [Claude Platform 错误参考](https://platform.claude.com/docs/en/api/errors)。14 Claude Code 调用 Claude API 来获取模型响应,因此大多数运行时错误映射到底层 API 错误代码。本页介绍每个错误在 Claude Code 中的含义以及如何恢复。有关原始 HTTP 状态代码定义,请参阅 [Claude Platform 错误参考](https://platform.claude.com/docs/en/api/errors)。


75| `Remote Control stopped — the app running this session is now signed in to a different Claude account` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |75| `Remote Control stopped — the app running this session is now signed in to a different Claude account` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |

76| `Remote Control stopped — the app running this session is signed out of Claude` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |76| `Remote Control stopped — the app running this session is signed out of Claude` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |

77| `Couldn't verify your organization's policy for remote control` | [Troubleshoot Remote Control](/docs/zh-CN/remote-control#couldnt-verify-your-organizations-policy-for-remote-control) |77| `Couldn't verify your organization's policy for remote control` | [Troubleshoot Remote Control](/docs/zh-CN/remote-control#couldnt-verify-your-organizations-policy-for-remote-control) |

78| `Remote Control is disabled by your organization's policy` | [Troubleshoot Remote Control](/docs/zh-CN/remote-control#remote-control-is-disabled-by-your-organizations-policy) |

79| `Remote Control was turned off by your organization's policy` | [Troubleshoot Remote Control](/docs/zh-CN/remote-control#remote-control-was-turned-off-by-your-organizations-policy) |

78| `OAuth token revoked` / `OAuth token has expired` | [身份验证](#oauth-token-revoked-or-expired) |80| `OAuth token revoked` / `OAuth token has expired` | [身份验证](#oauth-token-revoked-or-expired) |

81| `Failed to authenticate: OAuth token revoked` | [身份验证](#oauth-token-revoked-or-expired) |

82| `Your account does not have access to Claude. Please login again or contact your administrator.` | [身份验证](#oauth-token-revoked-or-expired) |

79| `API Error: 401 Invalid authentication credentials` | [身份验证](#api-error-401-invalid-authentication-credentials) |83| `API Error: 401 Invalid authentication credentials` | [身份验证](#api-error-401-invalid-authentication-credentials) |

80| `Login expired · Please run /login` | [身份验证](#login-expired) |84| `Login expired · Please run /login` | [身份验证](#login-expired) |

81| `Failed to start OAuth callback server` | [身份验证](#failed-to-start-oauth-callback-server) |85| `Failed to start OAuth callback server` | [身份验证](#failed-to-start-oauth-callback-server) |


164| `Can't switch to the default model` | [请求错误](#cant-switch-to-the-default-model) |168| `Can't switch to the default model` | [请求错误](#cant-switch-to-the-default-model) |

165| `Model switch ... blocked by a PreModelSwitch hook` | [请求错误](#model-switch-was-blocked-by-a-premodelswitch-hook) |169| `Model switch ... blocked by a PreModelSwitch hook` | [请求错误](#model-switch-was-blocked-by-a-premodelswitch-hook) |

166| `couldn't save it as your default` / `couldn't confirm it was saved as your default` | [请求错误](#couldnt-save-it-as-your-default) |170| `couldn't save it as your default` / `couldn't confirm it was saved as your default` | [请求错误](#couldnt-save-it-as-your-default) |

171| `is less capable than the current main model` / `Advisor will not activate on the main model` / `cannot advise` | [请求错误](#advisor-is-less-capable-than-the-current-main-model) |

167| `thinking.type.enabled is not supported for this model` | [请求错误](#thinking-type-enabled-is-not-supported-for-this-model) |172| `thinking.type.enabled is not supported for this model` | [请求错误](#thinking-type-enabled-is-not-supported-for-this-model) |

168| `Effort '<level>' isn't available with thinking turned off on this model` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |173| `Effort '<level>' isn't available with thinking turned off on this model` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |

169| `effort '<level>' is not supported when thinking is disabled` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |174| `effort '<level>' is not supported when thinking is disabled` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |


186| `The connection dropped while downloading the update` | [安装错误](#the-connection-dropped-while-downloading-the-update) |191| `The connection dropped while downloading the update` | [安装错误](#the-connection-dropped-while-downloading-the-update) |

187| `Download timed out: exceeded the total deadline` | [安装错误](#the-connection-dropped-while-downloading-the-update) |192| `Download timed out: exceeded the total deadline` | [安装错误](#the-connection-dropped-while-downloading-the-update) |

188| `--bg and --print conflict` | [命令行错误](#conflict-between-bg-and-print) |193| `--bg and --print conflict` | [命令行错误](#conflict-between-bg-and-print) |

194| `Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.` | [命令行错误](#conflict-between-a-system-prompt-flag-and-its-file-form) |

189| `Cloud sessions cannot be created from a --restricted session` | [命令行错误](#cloud-sessions-cannot-be-created-from-a-restricted-session) |195| `Cloud sessions cannot be created from a --restricted session` | [命令行错误](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

190| `Cloud sessions are disabled by your organization's policy` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |196| `Cloud sessions are disabled by your organization's policy` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |

191| `Couldn't verify your organization's policy for cloud sessions` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |197| `Couldn't verify your organization's policy for cloud sessions` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |


203| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |209| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |

204| `Could not import <server>: <reason>` | [命令行错误](#could-not-import-a-server-from-claude-desktop) |210| `Could not import <server>: <reason>` | [命令行错误](#could-not-import-a-server-from-claude-desktop) |

205| `Cannot add MCP server to scope: managed` | [命令行错误](#cannot-add-mcp-server-to-the-managed-scope) |211| `Cannot add MCP server to scope: managed` | [命令行错误](#cannot-add-mcp-server-to-the-managed-scope) |

212| `Cannot add MCP server: your organization's managed settings allow only MCP servers that plugins provide` | [命令行错误](#cannot-add-mcp-server-when-managed-settings-allow-only-plugin-servers) |

206| `is Anthropic-hosted and doesn't support local OAuth` | [命令行错误](#anthropic-hosted-and-doesnt-support-local-oauth) |213| `is Anthropic-hosted and doesn't support local OAuth` | [命令行错误](#anthropic-hosted-and-doesnt-support-local-oauth) |

207| `Can't read .mcp.json: it isn't a regular file or is larger than 2097152 bytes` | [命令行错误](#cant-read-mcp-json) |214| `Can't read .mcp.json: it isn't a regular file or is larger than 2097152 bytes` | [命令行错误](#cant-read-mcp-json) |

208| `MCP server "<name>" was not saved to` / `was not removed from` | [命令行错误](#mcp-server-was-not-saved-or-removed) |215| `MCP server "<name>" was not saved to` / `was not removed from` | [命令行错误](#mcp-server-was-not-saved-or-removed) |


215| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |222| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |

216| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |223| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |

217| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |224| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |

225| `Claude Code can't read the keyboard here: stdin is not a terminal` | [命令行错误](#claude-code-cant-read-the-keyboard-here) |

218| `Error: Input contained only whitespace` | [命令行错误](#input-contained-only-whitespace) |226| `Error: Input contained only whitespace` | [命令行错误](#input-contained-only-whitespace) |

219| `Blank prompt — the message was only whitespace, so nothing was sent to the model.` | [命令行错误](#input-contained-only-whitespace) |227| `Blank prompt — the message was only whitespace, so nothing was sent to the model.` | [命令行错误](#input-contained-only-whitespace) |

220| `Error: stream-json input carried over 256M characters with no newline` | [命令行错误](#stream-json-input-carried-over-256m-characters-with-no-newline) |228| `Error: stream-json input carried over 256M characters with no newline` | [命令行错误](#stream-json-input-carried-over-256m-characters-with-no-newline) |


227| `The GitHub App preflight failed transiently (network or service hiccup) — retry in a moment to start from GitHub instead` | [命令行错误](#the-github-app-preflight-failed-transiently) |235| `The GitHub App preflight failed transiently (network or service hiccup) — retry in a moment to start from GitHub instead` | [命令行错误](#the-github-app-preflight-failed-transiently) |

228| `Not uploading this working tree` with `the upload cannot follow that setting` | [命令行错误](#the-repository-upload-cant-follow-a-git-setting) |236| `Not uploading this working tree` with `the upload cannot follow that setting` | [命令行错误](#the-repository-upload-cant-follow-a-git-setting) |

229| `GitHub isn't connected to your Claude account, so this repository can't be cloned in the cloud` | [命令行错误](#github-isnt-connected-to-your-claude-account) |237| `GitHub isn't connected to your Claude account, so this repository can't be cloned in the cloud` | [命令行错误](#github-isnt-connected-to-your-claude-account) |

238| `Your GitHub organization has an IP allowlist that is blocking Claude` | [命令行错误](#a-github-organization-policy-is-blocking-claude) |

239| `Your GitHub organization requires single sign-on` | [命令行错误](#a-github-organization-policy-is-blocking-claude) |

240| `Your GitHub organization's identity provider (Microsoft Entra ID) has a Conditional Access policy that is blocking Claude` | [命令行错误](#a-github-organization-policy-is-blocking-claude) |

230| `Single sign-on authorization needed` | [命令行错误](#single-sign-on-authorization-needed) |241| `Single sign-on authorization needed` | [命令行错误](#single-sign-on-authorization-needed) |

231| `Failed to resume the conversation` | [命令行错误](#failed-to-resume-the-conversation) |242| `Failed to resume the conversation` | [命令行错误](#failed-to-resume-the-conversation) |

232| `No conversation found with session ID: <session-id>` | [命令行错误](#no-conversation-found-with-the-session-id) |243| `No conversation found with session ID: <session-id>` | [命令行错误](#no-conversation-found-with-the-session-id) |


240| `Skill usage reports are not available on this connection.` | [命令行错误](#skill-usage-reports-are-not-available-on-this-connection) |251| `Skill usage reports are not available on this connection.` | [命令行错误](#skill-usage-reports-are-not-available-on-this-connection) |

241| `Custom output styles can't be selected over Remote Control or from a relayed message` | [命令行错误](#custom-output-styles-cant-be-selected-over-remote-control) |252| `Custom output styles can't be selected over Remote Control or from a relayed message` | [命令行错误](#custom-output-styles-cant-be-selected-over-remote-control) |

242| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [命令行错误](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |253| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [命令行错误](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |

254| `/recap only runs when you ask for it yourself in this session` | [命令行错误](#recap-only-runs-when-you-ask-for-it-yourself) |

243| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Plugin 错误](#plugin-eval-is-currently-in-early-access) |255| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Plugin 错误](#plugin-eval-is-currently-in-early-access) |

244| `Marketplace "<name>" is registered from an untrusted source` | [Plugin 错误](#marketplace-is-registered-from-an-untrusted-source) |256| `Marketplace "<name>" is registered from an untrusted source` | [Plugin 错误](#marketplace-is-registered-from-an-untrusted-source) |

245| `Claude Code refuses the marketplace name "<name>"` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |257| `Claude Code refuses the marketplace name "<name>"` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |

246| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |258| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |

247| `Marketplace "<name>" is already added from a different source` | [Plugin 错误](#marketplace-is-already-added-from-a-different-source) |259| `Marketplace "<name>" is already added from a different source` | [Plugin 错误](#marketplace-is-already-added-from-a-different-source) |

248| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin 错误](#marketplace-name-is-another-spelling-of-a-reserved-name) |260| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin 错误](#marketplace-name-is-another-spelling-of-a-reserved-name) |

261| `Marketplace "<name>" is added but ignored` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#marketplace-is-added-but-ignored) |

262| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#marketplace-is-added-but-ignored) |

249| `references ${user_config.*} in a shell-form command` | [Plugin 错误](#plugin-command-references-user-config) |263| `references ${user_config.*} in a shell-form command` | [Plugin 错误](#plugin-command-references-user-config) |

250| `Monitor "<name>" from plugin <plugin> references ${user_config.*} in its command` | [Plugin 错误](#plugin-command-references-user-config) |264| `Monitor "<name>" from plugin <plugin> references ${user_config.*} in its command` | [Plugin 错误](#plugin-command-references-user-config) |

251| `headersHelper for MCP server '<name>' references ${user_config.*}` | [Plugin 错误](#plugin-command-references-user-config) |265| `headersHelper for MCP server '<name>' references ${user_config.*}` | [Plugin 错误](#plugin-command-references-user-config) |

252| `Plugin archive integrity check failed` | [Plugin 错误](#plugin-archive-integrity-check-failed) |266| `Plugin archive integrity check failed` | [Plugin 错误](#plugin-archive-integrity-check-failed) |

267| `An npm plugin source must name a registry package` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |

268| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |

253| `path escapes plugin directory` | [Plugin 错误](#path-escapes-plugin-directory) |269| `path escapes plugin directory` | [Plugin 错误](#path-escapes-plugin-directory) |

254| `path could not be checked` | [Plugin 错误](#path-could-not-be-checked) |270| `path could not be checked` | [Plugin 错误](#path-could-not-be-checked) |

255| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin 错误](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |271| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin 错误](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |


260| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin 错误](#plugin-was-not-uninstalled) |276| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin 错误](#plugin-was-not-uninstalled) |

261| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin 错误](#plugin-was-not-uninstalled) |277| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin 错误](#plugin-was-not-uninstalled) |

262| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |278| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin 故障排除](/docs/zh-CN/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |

279| `Error: No such tool available: <tool name>` | [工具错误](#no-such-tool-available) |

263| `would be spawned with zero tools — refusing` | [工具错误](#agent-would-be-spawned-with-zero-tools) |280| `would be spawned with zero tools — refusing` | [工具错误](#agent-would-be-spawned-with-zero-tools) |

264| `File is covered by a Read deny rule in your permission settings` | [工具错误](#file-is-covered-by-a-read-deny-rule) |281| `File is covered by a Read deny rule in your permission settings` | [工具错误](#file-is-covered-by-a-read-deny-rule) |

265| `cannot contain null bytes (\0)` | [工具错误](#path-cannot-contain-null-bytes) |282| `cannot contain null bytes (\0)` | [工具错误](#path-cannot-contain-null-bytes) |


287| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |304| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |

288| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |305| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |

289| `the source file has the replacement character U+FFFD` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |306| `the source file has the replacement character U+FFFD` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |

307| `Not published: that file is on a network share` | [工具错误](#not-published-that-file-is-on-a-network-share) |

290| `Reading a local file from outside this session's connected folders, or through a link, needs the approval card` | [工具错误](#reading-a-local-file-from-outside-the-connected-folders) |308| `Reading a local file from outside this session's connected folders, or through a link, needs the approval card` | [工具错误](#reading-a-local-file-from-outside-the-connected-folders) |

291| `cannot read file_path (...) — the file could not be examined, and no one can answer the approval card` | [工具错误](#reading-a-local-file-from-outside-the-connected-folders) |309| `cannot read file_path (...) — the file could not be examined, and no one can answer the approval card` | [工具错误](#reading-a-local-file-from-outside-the-connected-folders) |

292| `WebFetch cannot fetch localhost or other hostnames without a dot` | [工具错误](#webfetch-cannot-fetch-localhost) |310| `WebFetch cannot fetch localhost or other hostnames without a dot` | [工具错误](#webfetch-cannot-fetch-localhost) |


342| `Unable to read managed policy settings` | [配置警告](#unable-to-read-managed-policy-settings) |360| `Unable to read managed policy settings` | [配置警告](#unable-to-read-managed-policy-settings) |

343| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [配置警告](#otelheadershelper-failed) |361| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [配置警告](#otelheadershelper-failed) |

344| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [配置警告](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |362| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [配置警告](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |

363| `API Error: ANTHROPIC_FOUNDRY_RESOURCE must be a Foundry resource name` | [配置警告](#anthropic-foundry-resource-must-be-a-foundry-resource-name) |

345| `headersHelper not run — this workspace has no persisted trust` | [配置警告](#headershelper-not-run) |364| `headersHelper not run — this workspace has no persisted trust` | [配置警告](#headershelper-not-run) |

346| `Invalid permission rule "..." was skipped: Malformed Tool(content) rule` | [配置警告](#malformed-tool-content-rule) |365| `Invalid permission rule "..." was skipped: Malformed Tool(content) rule` | [配置警告](#malformed-tool-content-rule) |

347| `... is not matched by file permission checks` | [配置警告](#is-not-matched-by-file-permission-checks) |366| `... is not matched by file permission checks` | [配置警告](#is-not-matched-by-file-permission-checks) |


360Claude Code 重试这些故障:379Claude Code 重试这些故障:

361 380 

362* 在 Claude 响应开始流式传输之前到达的服务器错误、过载响应和请求超时。381* 在 Claude 响应开始流式传输之前到达的服务器错误、过载响应和请求超时。

363* 连接断开。当连接在请求过程中途断开,且 Claude 尚未完成其响应的任何部分(包括其思考过程)时,Claude Code 会使用相同的退避重新发送请求,转换继续进行,即使某些文本已经开始流式传输。当连接在 Claude 完成思考之后但在开始任何文本或工具调用之前断开时,Claude Code 改为快速连续重新发送请求最多两次,如果连接在该点继续断开,则以 `Connection lost before a response was produced` 结束转换。382* 在 Claude 完成思考之后、但在开始任何文本或工具调用之前到达的服务器错误或过载响应。Claude Code 会在该点重试服务器错误最多两次。在 v2.1.284 之前,Claude Code 会在该点以该错误结束轮次。

364* Claude Code 检测到的连接在您的计算机进入睡眠状态时在请求过程中途被破坏。Claude Code 将其计为上述规则下的断开连接;一旦重试标签命名了具体原因,它会读作 `Connection lost while your computer was asleep`,如果转换在 Claude 完成思考之后但在任何文本或工具调用之前结束,消息会读作 `Your computer went to sleep before a response was produced`。383* 连接断开。当连接在请求过程中途断开,且 Claude 尚未完成其响应的任何部分(包括其思考过程)时,Claude Code 会使用相同的退避重新发送请求,轮次继续进行,即使某些文本已经开始流式传输。当连接在 Claude 完成思考之后但在开始任何文本或工具调用之前断开时,Claude Code 改为快速连续重新发送请求最多两次,如果连接在该点继续断开,则以 `Connection lost before a response was produced` 结束轮次。

365* 停滞的响应流,当响应头已到达但 Claude 响应的任何部分都未到达,或当 Claude 完成思考但尚未开始任何文本或工具调用时:Claude Code 中止停滞连接并最多重新发送一次请求,不在上述 10 次尝试预算之外。如果响应在 Claude 完成思考之后但在任何文本或工具调用之前第二次停滞,Claude Code 以 `The response stalled before a response was produced` 结束转换。384* Claude Code 检测到的连接在您的计算机进入睡眠状态时在请求过程中途被破坏。Claude Code 将其计为上述规则下的断开连接;一旦重试标签命名了具体原因,它会读作 `Connection lost while your computer was asleep`,如果轮次在 Claude 完成思考之后但在任何文本或工具调用之前结束,消息会读作 `Your computer went to sleep before a response was produced`。

366* 流式请求 API 从未用响应头回答,在 [first-byte deadline runs](/docs/zh-CN/network-config#streaming-idle-watchdogs) 的连接上:Claude Code 在截止时间中止它,并在重试预算内每个模型请求最多重新发送一次,然后如果该尝试也未得到回答,则以 [No response from API](#no-response-from-api) 结束转换。在其他连接上,请求等待 `API_TIMEOUT_MS`。当您设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,一次重试上限不适用。385* 停滞的响应流,当响应头已到达但 Claude 响应的任何部分都未到达,或当 Claude 完成思考但尚未开始任何文本或工具调用时:Claude Code 中止停滞连接并最多重新发送一次请求,不计入上述 10 次尝试预算。如果响应在 Claude 完成思考之后但在任何文本或工具调用之前第二次停滞,Claude Code 以 `The response stalled before a response was produced` 结束轮次。

386* 流式请求 API 从未用响应头回答,在 [first-byte deadline runs](/docs/zh-CN/network-config#streaming-idle-watchdogs) 的连接上:Claude Code 在截止时间中止它,并在重试预算内每个模型请求最多重新发送一次,然后如果该尝试也未得到回答,则以 [No response from API](#no-response-from-api) 结束轮次。在其他连接上,请求等待 `API_TIMEOUT_MS`。当您设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,一次重试上限不适用。

367* 临时 429 节流,但不是网关的支出限制 `429`,这不是节流;请参阅 [Spend limit reached](#spend-limit-reached)。387* 临时 429 节流,但不是网关的支出限制 `429`,这不是节流;请参阅 [Spend limit reached](#spend-limit-reached)。

368 * 当您使用 claude.ai 订阅登录时,这包括不携带您计划配额头的 429 节流。在 v2.1.199 之前,Claude Code 仅对 API 密钥和企业登录重试这些节流。388 * 当您使用 claude.ai 订阅登录时,这包括不携带您套餐配额头的 429 节流。在 v2.1.199 之前,Claude Code 仅对 API 密钥和企业登录重试这些节流。

369* 因为输入加上 `max_tokens` 超过上下文限制而被拒绝的请求。以相同方式重新发送它会以相同方式失败,所以 Claude Code 使用减少的 `max_tokens` 重试,并在两种情况下停止重试并改为压缩:389* 因为输入加上 `max_tokens` 超过上下文限制而被拒绝的请求。以相同方式重新发送它会以相同方式失败,所以 Claude Code 使用减少的 `max_tokens` 重试,并在两种情况下停止重试并改为压缩:

370 * 当没有减少可以适应时,例如当对话本身几乎填满上下文窗口时。390 * 当没有减少可以适应时,例如当对话本身几乎填满上下文窗口时。

371 * 当重试无法进一步缩小 `max_tokens` 时。在 v2.1.218 之前,Claude Code 可以重新发送仍然不适应的减少请求,例如当扩展思考预算超过剩余上下文时,直到重试预算用尽。391 * 当重试无法进一步缩小 `max_tokens` 时。在 v2.1.218 之前,Claude Code 可以重新发送仍然不适应的减少请求,例如当扩展思考预算超过剩余上下文时,直到重试预算用尽。

372* [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 上过期或缺失的 Google Cloud 凭证,或在您的机器上加载失败的 AWS 凭证。Claude Code 丢弃其缓存的凭证并重试最多两次,然后报告错误以便您可以立即重新身份验证,如 [Could not load AWS or Google Cloud credentials](#could-not-load-aws-or-google-cloud-credentials) 下所述。在 v2.1.228 之前,Claude Code 通过完整重试预算重试失败的 Google Cloud 凭证,然后显示错误。392* [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 上过期或缺失的 Google Cloud 凭据,或在您的机器上加载失败的 AWS 凭据。Claude Code 丢弃其缓存的凭据并重试最多两次,然后报告错误以便您可以立即重新身份验证,如 [Could not load AWS or Google Cloud credentials](#could-not-load-aws-or-google-cloud-credentials) 下所述。在 v2.1.228 之前,Claude Code 通过完整重试预算重试失败的 Google Cloud 凭据,然后显示错误。

373* 来自 Anthropic API 的 `401` 或 `403`,直接或通过 [LLM gateway](/docs/zh-CN/llm-gateway),而 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本提供凭证。Claude Code 重新运行脚本并使用其新输出重试,在完整重试预算内。当脚本本身在重新运行时失败时,Claude Code 改为显示 [Your apiKeyHelper script is failing](#your-apikeyhelper-script-is-failing)。393* 来自 Anthropic API 的 `401` 或 `403`,直接或通过 [LLM gateway](/docs/zh-CN/llm-gateway),而 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本提供凭据。Claude Code 重新运行脚本并使用其新输出重试,在完整重试预算内。当脚本本身在重新运行时失败时,Claude Code 改为显示 [Your apiKeyHelper script is failing](#your-apikeyhelper-script-is-failing)。

374 394 

375在 v2.1.227 之前,`Connection lost before a response was produced` 读作 `Connection closed while thinking, before producing a response`,`The response stalled before a response was produced` 读作 `Response stalled while thinking, before producing a response`。395在 v2.1.227 之前,`Connection lost before a response was produced` 读作 `Connection closed while thinking, before producing a response`,`The response stalled before a response was produced` 读作 `Response stalled while thinking, before producing a response`。

376 396 

377Claude Code 不重试这些故障:397Claude Code 不重试这些故障:

378 398 

379* TLS 证书验证失败,例如 TLS 检查代理、缺失的 `NODE_EXTRA_CA_CERTS` 包或过期的证书。Claude Code 在第一次尝试时报告错误,以便您可以立即修复证书设置;请参阅 [SSL certificate errors](#ssl-certificate-errors)。Claude Code 仍然重试瞬时 TLS 条件,例如握手超时。在 v2.1.199 之前,Claude Code 通过完整重试预算重试证书失败,然后显示错误。399* TLS 证书验证失败,例如 TLS 检查代理、缺失的 `NODE_EXTRA_CA_CERTS` 包或过期的证书。Claude Code 在第一次尝试时报告错误,以便您可以立即修复证书设置;请参阅 [SSL certificate errors](#ssl-certificate-errors)。Claude Code 仍然重试瞬时 TLS 条件,例如握手超时。在 v2.1.199 之前,Claude Code 通过完整重试预算重试证书失败,然后显示错误。

380* 服务器错误、断开连接或停滞流在 Claude 完成文本块或工具调用之后到达,或在完成思考之后开始一个但在完成响应之前。Claude Code 不重新运行请求,因为这可能会执行相同的工具调用两次。它保留 Claude 完成的内容,运行 Claude 完成的任何工具调用,并从其结果继续转换。对于您在交互式会话和非交互式会话中看到的内容,请阅读 [The response above may be incomplete](#the-response-above-may-be-incomplete)。在 v2.1.199 之前,当服务器错误在流中途到达时,Claude Code 丢弃部分输出并将整个转换报告为错误。400* 服务器错误、断开连接或停滞流在 Claude 完成文本块或工具调用之后到达,或在完成思考之后开始一个但在完成响应之前。Claude Code 不重新运行请求,因为这可能会执行相同的工具调用两次。它保留 Claude 完成的内容,运行 Claude 完成的任何工具调用,并从其结果继续轮次。对于您在交互式会话和非交互式会话中看到的内容,请阅读 [The response above may be incomplete](#the-response-above-may-be-incomplete)。在 v2.1.199 之前,当服务器错误在流中途到达时,Claude Code 丢弃部分输出并将整个轮次报告为错误。

381* 在 Claude 完成响应之后到达的故障:无需重试任何内容,所以 Claude Code 保留完整响应并正常结束转换。401* 在 Claude 完成响应之后到达的故障:无需重试任何内容,所以 Claude Code 保留完整响应并正常结束轮次。

382* [Amazon Bedrock 流式响应具有意外的 content-type](#bedrock-streaming-response-has-an-unexpected-content-type),因为重写响应的网关或代理会以相同方式重写重试。需要 Claude Code v2.1.208 或更高版本。402* [Amazon Bedrock 流式响应具有意外的 content-type](#bedrock-streaming-response-has-an-unexpected-content-type),因为重写响应的网关或代理会以相同方式重写重试。需要 Claude Code v2.1.208 或更高版本。

383* 失败的流式请求的非流式重试获得成功状态但 [body 中没有 Claude API 消息](#api-returned-an-empty-or-malformed-response)。Claude Code 以该错误结束转换。403* 失败的流式请求的非流式重试获得成功状态但 [body 中没有 Claude API 消息](#api-returned-an-empty-or-malformed-response)。Claude Code 以该错误结束轮次。

384* 您的组织的策略检查拒绝的请求,其表现为携带拒绝消息的 `API Error:` 行。您的组织管理员使用 [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks)(Claude Enterprise 功能)设置检查,消息以他们配置的说明结尾,或默认告诉您联系他们。Claude Code 不会将拒绝的请求重新发送到相同模型或 [fallback model](/docs/zh-CN/model-config#fallback-model-chains),因为拒绝涉及请求的内容而不是模型。在 v2.1.239 之前,Claude Code 可以重新发送拒绝的请求,不流式传输或在配置的备用模型上,然后向您显示拒绝。404* 您的组织的策略检查拒绝的请求,其表现为携带拒绝消息的 `API Error:` 行。您的组织管理员使用 [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks)(Claude Enterprise 功能)设置检查,消息以他们配置的说明结尾,或默认告诉您联系他们。Claude Code 不会将拒绝的请求重新发送到相同模型或 [备用模型](/docs/zh-CN/model-config#fallback-model-chains),因为拒绝涉及请求的内容而不是模型。在 v2.1.239 之前,Claude Code 可以重新发送拒绝的请求,不流式传输或在配置的备用模型上,然后向您显示拒绝。

385 405 

386<h3 id="what-you-see-while-claude-code-retries-or-waits">406<h3 id="what-you-see-while-claude-code-retries-or-waits">

387 Claude Code 重试或等待时您看到的内容407 Claude Code 重试或等待时您看到的内容


393 413 

394如果在请求仍然待处理时响应流上 20 秒内没有数据到达,微调器显示 `Waiting for API response · will retry in … · check your network`,然后任何重试都尚未开始。请求尚未失败:倒计时运行到 Claude Code 中止停滞连接的点。中止后,您看到的内容取决于响应已进行的距离:414如果在请求仍然待处理时响应流上 20 秒内没有数据到达,微调器显示 `Waiting for API response · will retry in … · check your network`,然后任何重试都尚未开始。请求尚未失败:倒计时运行到 Claude Code 中止停滞连接的点。中止后,您看到的内容取决于响应已进行的距离:

395 415 

396* 在 Claude 完成文本块或工具调用之前,或在完成思考之后开始一个,Claude Code 重试请求或以错误结束转换。[Automatic retries](#automatic-retries) 说明它重试哪些停滞以及多少次。416* 在 Claude 完成文本块或工具调用之前,或在完成思考之后开始一个,Claude Code 重试请求或以错误结束轮次。[Automatic retries](#automatic-retries) 说明它重试哪些停滞以及多少次。

397* 在 Claude 完成文本块或工具调用之后,或在完成思考之后开始一个,但在 Claude 完成响应之前,Claude Code 保留 Claude 完成的内容,从 Claude 完成的任何工具调用继续转换,并显示 [The response above may be incomplete](#the-response-above-may-be-incomplete)。在非交互式会话中,以及对于任何会话中的子代理响应,Claude Code 可能首先提示 Claude 继续响应;该条目说明何时执行以及何时您仍然在那里看到通知。417* 在 Claude 完成文本块或工具调用之后,或在完成思考之后开始一个,但在 Claude 完成响应之前,Claude Code 保留 Claude 完成的内容,从 Claude 完成的任何工具调用继续轮次,并显示 [The response above may be incomplete](#the-response-above-may-be-incomplete)。在非交互式会话中,以及对于任何会话中的子代理响应,Claude Code 可能首先提示 Claude 继续响应;该条目说明何时执行以及何时您仍然在那里看到通知。

398* 在 Claude 完成响应之后,Claude Code 正常结束转换。418* 在 Claude 完成响应之后,Claude Code 正常结束轮次。

399 419 

400一旦数据恢复或重试成功,横幅会自动清除。如果它在每次尝试时重新出现,将其视为 [network issue](#unable-to-connect-to-api)。在 v2.1.185 之前,横幅在 10 秒后出现,措辞不同。420一旦数据恢复或重试成功,横幅会自动清除。如果它在每次尝试时重新出现,将其视为 [network issue](#unable-to-connect-to-api)。在 v2.1.185 之前,横幅在 10 秒后出现,措辞不同。

401 421 

402当 Claude 咨询 [advisor](/docs/zh-CN/advisor) 时,横幅在 90 秒无数据后出现,而不是 20 秒,因为长时间的顾问审查可以发送超过 20 秒的任何内容。在 v2.1.214 之前,20 秒阈值也适用于顾问调用,所以横幅在顾问审查期间出现,即使没有任何问题。422当 Claude 咨询 [advisor](/docs/zh-CN/advisor) 时,横幅在 90 秒无数据后出现,而不是 20 秒,因为长时间的顾问审查可能在远超 20 秒的时间内不发送任何数据。在 v2.1.214 之前,20 秒阈值也适用于顾问调用,所以横幅在顾问审查期间出现,即使没有任何问题。

403 423 

404<h3 id="tune-retry-behavior">424<h3 id="tune-retry-behavior">

405 调整重试行为425 调整重试行为


418 服务器错误438 服务器错误

419</h2>439</h2>

420 440 

421这些错误中的大多数来自推理提供商:Anthropic API 上的 Anthropic 服务,以及 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或自定义网关上该提供商端点后面的服务。[Auto mode 无法确定操作的安全性](#auto-mode-cannot-determine-the-safety-of-an-action)和[Agent 因 API 错误而提前终止](#agent-terminated-early-due-to-an-api-error)也涵盖了您这一方的原因,例如无法调用分类器模型的 Amazon Bedrock 账户或达到使用限制的子代理。441这些错误中的大多数来自推理提供商:Anthropic API 上的 Anthropic 服务,以及 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或自定义网关上该提供商端点后面的服务。[自动模式无法确定操作的安全性](#auto-mode-cannot-determine-the-safety-of-an-action)和[Agent 因 API 错误而提前终止](#agent-terminated-early-due-to-an-api-error)也涵盖了您这一方的原因,例如无法调用分类器模型的 Amazon Bedrock 账户或达到用量限制的子代理。

422 442 

423<h3 id="api-error-500-internal-server-error">443<h3 id="api-error-500-internal-server-error">

424 API Error: 500 Internal server error444 API Error: 500 Internal server error


432 452 

433尾部句子指出了检查服务健康状况的位置,因提供商而异。Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 配置会指出该提供商的服务状态。自定义 `ANTHROPIC_BASE_URL` 会指出网关主机。453尾部句子指出了检查服务健康状况的位置,因提供商而异。Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 配置会指出该提供商的服务状态。自定义 `ANTHROPIC_BASE_URL` 会指出网关主机。

434 454 

435API 本身的 5xx 表示 API 内部出现了意外故障。它不是由您的提示、设置或账户引起的。455API 本身的 5xx 表示 API 内部出现了意外故障。它不是由您的提示词、设置或账户引起的。

436 456 

437当代理、负载均衡器或网关用 HTML 错误页面回复时,消息显示状态代码和页面的标题,例如 `API Error: 502 Bad Gateway`。对于没有标题的页面,消息显示状态代码及其标准名称。在 v2.1.281 之前,当页面有标题时状态代码被丢弃,当页面没有标题时打印页面的原始标记。457当代理、负载均衡器或网关用 HTML 错误页面回复时,消息显示状态代码和页面的标题,例如 `API Error: 502 Bad Gateway`。对于没有标题的页面,消息显示状态代码及其标准名称。在 v2.1.281 之前,当页面有标题时状态代码被丢弃,当页面没有标题时打印页面的原始标记。

438 458 

439**应该做什么:**459**应该做什么:**

440 460 

441* 检查 [status.claude.com](https://status.claude.com) 或消息中指出的提供商状态页面,查看是否有活跃事件461* 检查 [status.claude.com](https://status.claude.com) 或消息中指出的提供商状态页面,查看是否有活跃事件

442* 等待一分钟,然后再次发送您的消息。您的原始消息仍在对话中,因此对于较长的提示,您可以输入 `try again` 而不是粘贴整个内容。462* 等待一分钟,然后再次发送您的消息。您的原始消息仍在对话中,因此对于较长的提示词,您可以输入 `try again` 而不是粘贴整个内容。

443* 如果错误持续存在且没有发布事件,请运行 `/feedback` 以便 Anthropic 可以使用您的请求详情进行调查。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。463* 如果错误持续存在且没有发布事件,请运行 `/feedback` 以便 Anthropic 可以使用您的请求详情进行调查。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。

444 464 

445<h3 id="api-error-repeated-529-overloaded-errors">465<h3 id="api-error-repeated-529-overloaded-errors">


454 474 

455尾部句子因提供商而异,方式与上面的 500 错误相同。475尾部句子因提供商而异,方式与上面的 500 错误相同。

456 476 

457529 不是您的使用限制,也不会计入您的配额。477529 不是您的用量限制,也不会计入您的配额。

458 478 

459**应该做什么:**479**应该做什么:**

460 480 


474Request timed out494Request timed out

475```495```

476 496 

477这可能在高负载期间或模型生成非常大的响应时发生。默认请求超时为 10 分钟。497这可能在高负载期间或模型生成非常大的响应时发生。默认请求超时时间为 10 分钟。

478 498 

479**应该做什么:**499**应该做什么:**

480 500 


486 No response from API506 No response from API

487</h3>507</h3>

488 508 

489Claude Code 发送了流式请求,API 在第一个字节的截止时间内没有返回响应头,因此 Claude Code 中止了请求,而不是等待完整的 `API_TIMEOUT_MS` 请求超时(默认为 10 分钟)。Claude Code 最多再发送一次请求,如果[重试预算](#tune-retry-behavior)允许的话。当重试也没有得到回复时,该轮次以此消息结束,该消息显示每次尝试等待了多长时间。当您设置 [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/zh-CN/env-vars) 时,一次重试的上限不适用,Claude Code 在[调整重试行为](#tune-retry-behavior)中描述的预算下重试。509Claude Code 发送了流式请求,API 在第一个字节的截止时间内没有返回响应头,因此 Claude Code 中止了请求,而不是等待完整的 `API_TIMEOUT_MS` 请求超时时间(默认为 10 分钟)。Claude Code 最多再发送一次请求,如果[重试预算](#tune-retry-behavior)允许的话。当重试也没有得到回复时,该轮次以此消息结束,该消息显示每次尝试等待了多长时间。当您设置 [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/zh-CN/env-vars) 时,一次重试的上限不适用,Claude Code 在[调整重试行为](#tune-retry-behavior)中描述的预算下重试。

490 510 

491```text theme={null}511```text theme={null}

492API Error: No response from API (waited 3m, then 10m on the retry). If a proxy or gateway on your network holds responses until they complete, raise API_TIMEOUT_MS or CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS to wait longer.512API Error: No response from API (waited 3m, then 10m on the retry). If a proxy or gateway on your network holds responses until they complete, raise API_TIMEOUT_MS or CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS to wait longer.


494 514 

495Claude Code 分别为第一次尝试的等待响应头和重试的等待设置:515Claude Code 分别为第一次尝试的等待响应头和重试的等待设置:

496 516 

497* **第一次尝试**:当您将其设置为 1 或更多时使用 [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/zh-CN/env-vars),限制在 10 秒到 30 分钟之间。否则 Claude Code 使用[流式空闲监视程序](/docs/zh-CN/network-config#streaming-idle-watchdogs)中列出的字节级监视程序超时,因此改变该超时的变量也会改变此等待。无论哪种方式,Claude Code 为请求体的每 32KB 添加一秒。517* **第一次尝试**:当您将其设置为 1 或更多时使用 [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/zh-CN/env-vars),限制在 10 秒到 30 分钟之间。否则 Claude Code 使用[流式空闲监视程序](/docs/zh-CN/network-config#streaming-idle-watchdogs)中列出的字节级监视程序超时时间,因此改变该超时时间的变量也会改变此等待。无论哪种方式,Claude Code 为请求体的每 32KB 添加一秒。

498* **重试**:比 `API_TIMEOUT_MS` 少一秒,默认略低于 10 分钟,以便重试可以超过保持响应直到生成完成的代理或网关。在 Amazon Bedrock 上,重试使用与第一次尝试相同的截止时间,消息显示一个持续时间而不是两个。518* **重试**:比 `API_TIMEOUT_MS` 少一秒,默认略低于 10 分钟,以便重试可以超过保持响应直到生成完成的代理或网关。在 Amazon Bedrock 上,重试使用与第一次尝试相同的截止时间,消息显示一个持续时间而不是两个。

499 519 

500两个等待都不超过正 `API_TIMEOUT_MS` 少一秒,正 `API_TIMEOUT_MS` 低于 11 秒会关闭截止时间。字节级监视程序仅在响应头到达后才开始,因此在此之后停止发送字节的响应遵循[停滞流规则](#automatic-retries)而不是此截止时间。520两个等待都不超过正 `API_TIMEOUT_MS` 少一秒,正 `API_TIMEOUT_MS` 低于 11 秒会关闭截止时间。字节级监视程序仅在响应头到达后才开始,因此在此之后停止发送字节的响应遵循[停滞流规则](#automatic-retries)而不是此截止时间。

501 521 

502**应该做什么:**522**应该做什么:**

503 523 

504* 再次发送您的消息。您的原始消息仍在对话中,因此对于较长的提示,您可以输入 `try again` 而不是粘贴整个内容。524* 再次发送您的消息。您的原始消息仍在对话中,因此对于较长的提示词,您可以输入 `try again` 而不是粘贴整个内容。

505* 如果重复出现,将其视为[网络或代理问题](#unable-to-connect-to-api)。525* 如果重复出现,将其视为[网络或代理问题](#unable-to-connect-to-api)。

506* 如果您网络上的代理或网关保持响应直到完成,请提高 `API_TIMEOUT_MS` 以便重试等待更长时间。在 Amazon Bedrock 上,也提高 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`。526* 如果您网络上的代理或网关保持响应直到完成,请提高 `API_TIMEOUT_MS` 以便重试等待更长时间。在 Amazon Bedrock 上,也提高 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`。

507* 如果第一次尝试持续超时,然后重试成功,请提高 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` 以便第一次尝试也等待足够长的时间。527* 如果第一次尝试持续超时,然后重试成功,请提高 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` 以便第一次尝试也等待足够长的时间。

508 528 

509在 v2.1.242 之前,Claude Code 在未回复的流式请求失败之前等待完整的 `API_TIMEOUT_MS` 请求超时(默认为 10 分钟)。在 v2.1.261 之前,重试等待与第一次尝试相同的截止时间,消息没有显示持续时间。529在 v2.1.242 之前,Claude Code 在未回复的流式请求失败之前等待完整的 `API_TIMEOUT_MS` 请求超时时间(默认为 10 分钟)。在 v2.1.261 之前,重试等待与第一次尝试相同的截止时间,消息没有显示持续时间。

510 530 

511<h3 id="the-response-above-may-be-incomplete">531<h3 id="the-response-above-may-be-incomplete">

512 The response above may be incomplete532 The response above may be incomplete


528* `Your computer went to sleep mid-response`:Claude Code 检测到您的计算机在响应流式传输时进入睡眠状态。一旦您的计算机唤醒,Claude Code 会将连接视为断开并停止从中读取。548* `Your computer went to sleep mid-response`:Claude Code 检测到您的计算机在响应流式传输时进入睡眠状态。一旦您的计算机唤醒,Claude Code 会将连接视为断开并停止从中读取。

529* `Part of the response never arrived`:流事件在 API 和 Claude Code 之间被丢弃,因此后来的事件引用了从未到达的内容。在 v2.1.281 之前,此情况以 `API Error: Content block not found` 结束轮次。549* `Part of the response never arrived`:流事件在 API 和 Claude Code 之间被丢弃,因此后来的事件引用了从未到达的内容。在 v2.1.281 之前,此情况以 `API Error: Content block not found` 结束轮次。

530* `The response stream was malformed`:为已完成的内容块到达了事件,或事件到达时已损坏。损坏的事件是指其数据不是有效 JSON、其内容缺失或其内容与事件类型不匹配的事件。在 v2.1.284 之前,当具有无效 JSON 的事件在 Claude 完成其思考、文本块或工具调用后到达时,解析器的原始错误(例如以 `API Error: JSON Parse error` 开头的错误)出现。550* `The response stream was malformed`:为已完成的内容块到达了事件,或事件到达时已损坏。损坏的事件是指其数据不是有效 JSON、其内容缺失或其内容与事件类型不匹配的事件。在 v2.1.284 之前,当具有无效 JSON 的事件在 Claude 完成其思考、文本块或工具调用后到达时,解析器的原始错误(例如以 `API Error: JSON Parse error` 开头的错误)出现。

531* `The response stopped arriving`:连接保持打开但停止传递数据,因此流式空闲监视程序中止了它。在 v2.1.222 之前,Claude Code 也可能在通过 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 到达的[网关](/docs/zh-CN/gateways)连接上报告此故障,同时服务器的保活 ping 仍在到达,因为它只在那里计算已解析的响应事件;升级会停止这些虚假超时。通过提供商基础 URL(如 `ANTHROPIC_BEDROCK_BASE_URL`)到达的网关不被字节监视程序包装;请参阅[流式空闲监视程序](/docs/zh-CN/network-config#streaming-idle-watchdogs)。551* `The response stopped arriving`:连接保持打开但停止传递数据,因此流式空闲监视程序中止了它。在 v2.1.222 之前,Claude Code 也可能在通过 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 到达的[网关](/docs/zh-CN/gateways)连接上报告此故障,同时服务器的保活 ping 仍在到达,因为它只在那里计算已解析的响应事件;升级会在这些路由上停止这些虚假超时。通过提供商基础 URL(如 `ANTHROPIC_BEDROCK_BASE_URL`)到达的网关不被字节监视程序包装;请参阅[流式空闲监视程序](/docs/zh-CN/network-config#streaming-idle-watchdogs)。

532 552 

533在 v2.1.227 之前,`Connection lost mid-response` 读作 `Connection closed mid-response`,`The response stopped arriving` 读作 `Response stalled mid-stream`。553在 v2.1.227 之前,`Connection lost mid-response` 读作 `Connection closed mid-response`,`The response stopped arriving` 读作 `Response stalled mid-stream`。

534 554 


541 561 

542* 在响应的早期,Claude Code 要么重试故障,要么以不同的错误结束轮次。请参阅[自动重试](#automatic-retries)。562* 在响应的早期,Claude Code 要么重试故障,要么以不同的错误结束轮次。请参阅[自动重试](#automatic-retries)。

543* 当这些故障之一在 Claude 完成响应后到达时,Claude Code 保留完整响应并正常结束轮次,没有此通知。在 v2.1.222 之前,当连接在响应完成后断开或停滞时,Claude Code 显示此通知,并将轮次报告为错误,即使响应是完整的。563* 当这些故障之一在 Claude 完成响应后到达时,Claude Code 保留完整响应并正常结束轮次,没有此通知。在 v2.1.222 之前,当连接在响应完成后断开或停滞时,Claude Code 显示此通知,并将轮次报告为错误,即使响应是完整的。

544* 在[非交互式会话](/docs/zh-CN/headless)中,例如 `-p` 运行、[Agent SDK](/docs/zh-CN/agent-sdk/overview) 运行或[云会话](/docs/zh-CN/claude-code-on-the-web),当截断响应在主对话中且包含文本但没有工具调用时,您不必自己发送 `continue`:Claude Code 保留部分输出并提示 Claude 从停止的地方继续,最多连续三次。您只有在 Claude Code 用完这些继续后才会看到此通知。在 v2.1.246 之前,Claude Code 在第一次截断时以此通知结束非交互式轮次。564* 在[非交互式会话](/docs/zh-CN/headless)中,例如 `-p` 运行、[Agent SDK](/docs/zh-CN/agent-sdk/overview) 运行或[云端会话](/docs/zh-CN/claude-code-on-the-web),当截断响应在主对话中且包含文本但没有工具调用时,您不必自己发送 `continue`:Claude Code 保留部分输出并提示 Claude 从停止的地方继续,最多连续三次。您只有在 Claude Code 用完这些继续后才会看到此通知。在 v2.1.246 之前,Claude Code 在第一次截断时以此通知结束非交互式轮次。

545* 在[子代理](/docs/zh-CN/sub-agents#api-errors-in-subagents)中,无论会话是否交互式:当其截断响应包含文本但没有工具调用时,Claude Code 提示子代理继续。通知仅在这些继续用完后才成为子代理的最后一条消息。在 v2.1.257 之前,子代理在第一次截断时显示此通知。565* 在[子代理](/docs/zh-CN/sub-agents#api-errors-in-subagents)中,无论会话是否交互式:当其截断响应包含文本但没有工具调用时,Claude Code 提示子代理继续。通知仅在这些继续用完后才成为子代理的最后一条消息。在 v2.1.257 之前,子代理在第一次截断时显示此通知。

546 566 

547**应该做什么:**567**应该做什么:**

548 568 

549* 在交互式会话中,阅读屏幕上剩余的响应:Claude Code 保留 Claude 在错误前完成的每个块,但当轮次结束时丢弃中断的最后块,因此最后的句子或工具调用可能会丢失。回复 `continue` 以让 Claude 从其最后完成的块继续。569* 在交互式会话中,阅读屏幕上剩余的响应:Claude Code 保留 Claude 在错误前完成的每个块,但当轮次结束时丢弃中断的最后块,因此最后的句子或工具调用可能会丢失。回复 `continue` 以让 Claude 从其最后完成的块继续。

550* 在[非交互式模式](/docs/zh-CN/headless)(`-p`)中:570* 在[非交互模式](/docs/zh-CN/headless)(`-p`)中:

551 * 使用默认文本输出,Claude Code 打印它仍然从轮次早期保留的最后完成的文本块,然后是此消息。当它不保留任何内容时,Claude Code 仅打印此消息,例如因为 Claude Code 在轮次中间压缩了对话并清除了该文本。在 v2.1.219 之前,Claude Code 仅在 `-p` 文本输出中打印此消息并丢弃它已经生成的响应。571 * 使用默认文本输出,Claude Code 打印它仍然从轮次早期保留的最后完成的文本块,然后是此消息。当它不保留任何内容时,Claude Code 仅打印此消息,例如因为 Claude Code 在轮次中间压缩了对话并清除了该文本。在 v2.1.219 之前,Claude Code 仅在 `-p` 文本输出中打印此消息并丢弃它已经生成的响应。

552 * 使用 `--output-format json` 或 `stream-json`,Claude Code 在 `result` 字段中报告此消息。572 * 使用 `--output-format json` 或 `stream-json`,Claude Code 在 `result` 字段中报告此消息。

553 * 一旦连接稳定,要继续该轮次,请恢复会话并按照[继续对话](/docs/zh-CN/headless#continue-conversations)中的说明发送 `continue`。573 * 一旦连接稳定,要继续该轮次,请恢复会话并按照[继续对话](/docs/zh-CN/headless#continue-conversations)中的说明发送 `continue`。


556 Auto mode cannot determine the safety of an action576 Auto mode cannot determine the safety of an action

557</h3>577</h3>

558 578 

559[auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 使用的模型无法对操作进行分类,因此 auto mode 没有自动批准该操作。您看到的消息取决于分类器如何失败。579[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)使用的模型无法对操作进行分类,因此自动模式没有自动批准该操作。您看到的消息取决于分类器如何失败。

560 580 

561对工作目录内的读取、搜索和编辑会跳过分类器,因此它们在所有这些情况下都继续工作。581对工作目录内的读取、搜索和编辑会跳过分类器,因此它们在所有这些情况下都继续工作。

562 582 


572 592 

573**应该做什么:**593**应该做什么:**

574 594 

575* 几秒后重试;Claude 看到相同的消息,通常会自动重试。暂时故障与 [auto mode 资格](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)无关;您不需要更改设置595* 几秒后重试;Claude 看到相同的消息,通常会自动重试。暂时故障与[自动模式资格](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)无关;您不需要更改设置

576* 如果重试持续失败,继续进行只读任务,稍后回到被阻止的操作596* 如果重试持续失败,继续进行只读任务,稍后回到被阻止的操作

577* 在 Amazon Bedrock 上,如果消息在每次重试时返回,请检查您的账户是否可以调用它指出的模型:对于标准 Amazon Bedrock 模型,确认您的 [IAM 策略](/docs/zh-CN/amazon-bedrock#iam-configuration)允许调用它;对于 Mantle 模型 ID,[联系您的 AWS 账户团队](/docs/zh-CN/amazon-bedrock#mantle-endpoint-errors)597* 在 Amazon Bedrock 上,如果消息在每次重试时返回,请检查您的账户是否可以调用它指出的模型:对于标准 Amazon Bedrock 模型,确认您的 [IAM 策略](/docs/zh-CN/amazon-bedrock#iam-configuration)允许调用它;对于 Mantle 模型 ID,[联系您的 AWS 账户团队](/docs/zh-CN/amazon-bedrock#mantle-endpoint-errors)

578 598 

579当分类器请求失败是因为您的 OAuth 令牌过期或被另一个会话轮换时,Claude Code 刷新令牌并重试请求一次,因此例行令牌过期不会显示为此消息。在 v2.1.216 之前,过期或轮换的令牌会导致每个分类器请求失败,auto mode 会拒绝每个检查的操作,直到令牌被刷新。599当分类器请求失败是因为您的 OAuth 令牌过期或被另一个会话轮换时,Claude Code 刷新令牌并重试请求一次,因此常规的令牌过期不会显示为此消息。在 v2.1.216 之前,过期或轮换的令牌会导致每个分类器请求失败,自动模式会以此消息拒绝每个检查的操作,直到令牌被刷新。

580 600 

581当分类器返回无法解析的响应时:601当分类器返回无法解析的响应时:

582 602 


595Auto mode could not evaluate this action and is blocking it for safety — a safety check separate from auto mode blocked this request because of earlier conversation content — it isn't about the action itself — run with --debug for details615Auto mode could not evaluate this action and is blocking it for safety — a safety check separate from auto mode blocked this request because of earlier conversation content — it isn't about the action itself — run with --debug for details

596```616```

597 617 

598Claude Code 拒绝该操作,但告诉 Claude 这不是对该操作不安全的判断,并继续进行其他任务而不是重试。这些拒绝不计入 [auto mode 的暂停阈值](/docs/zh-CN/permission-modes#when-auto-mode-falls-back)。在[非交互式](/docs/zh-CN/headless) `-p` 运行中,Claude Code 不会停止运行。Claude 接收的内容取决于它请求操作的位置:618Claude Code 拒绝该操作,但告诉 Claude 这不是对该操作不安全的判断,并继续进行其他任务而不是重试。这些拒绝不计入[自动模式的暂停阈值](/docs/zh-CN/permission-modes#when-auto-mode-falls-back)。在[非交互式](/docs/zh-CN/headless) `-p` 运行中,Claude Code 不会停止运行。Claude 接收的内容取决于它请求操作的位置:

599 619 

600* 对于 `-p` 运行中没有 `--input-format stream-json` 的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),Claude Code 返回包含 `Agent aborted: auto mode classifier request refused by the safety safeguard in headless mode` 的错误结果620* 对于 `-p` 运行中没有 `--input-format stream-json` 的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),Claude Code 返回包含 `Agent aborted: auto mode classifier request refused by the safety safeguard in headless mode` 的错误结果

601* 在其他地方,包括交互式会话和 `-p` 运行的主对话,Claude Code 将该拒绝返回给 Claude621* 在其他地方,包括交互式会话和 `-p` 运行的主对话,Claude Code 将该拒绝返回给 Claude

602 622 

603在 v2.1.225 之前,Claude Code 将这些拒绝计入暂停阈值,并返回与真正分类器块相同的拒绝消息。623在 v2.1.225 之前,Claude Code 将这些拒绝计入暂停阈值,并返回与真正分类器阻止相同的拒绝消息。

604 624 

605**应该做什么:**625**应该做什么:**

606 626 

607* 这不是对您的操作的决定。您对话中已有的内容在 auto mode 将对话发送给分类器时触发了 API 上的安全过滤器627* 这不是对您的操作的决定。您对话中已有的内容在自动模式将对话发送给分类器时触发了 API 上的安全过滤器

608* 重试无法帮助;相同的对话内容将再次触发过滤器628* 重试无法帮助;相同的对话内容将再次触发过滤器

609* 在交互式会话中,切换到不同的[权限模式](/docs/zh-CN/permission-modes),以便您可以在提示时批准该操作629* 在交互式会话中,切换到不同的[权限模式](/docs/zh-CN/permission-modes),以便您可以在提示时批准该操作

610* 开始一个新对话,不包含触发内容630* 开始一个新对话,不包含触发内容


617 637 

618操作发生的情况取决于 Claude 请求它的位置:638操作发生的情况取决于 Claude 请求它的位置:

619 639 

620* 在交互式会话中,auto mode 回退到该操作的正常权限提示,以便您可以手动批准或拒绝它640* 在交互式会话中,自动模式回退到该操作的正常权限提示,以便您可以手动批准或拒绝它

621* 对于[非交互式](/docs/zh-CN/headless) `-p` 运行中没有 `--input-format stream-json` 的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),Claude Code 返回包含 `Agent aborted: auto mode classifier transcript exceeded context window in headless mode` 的错误结果,运行继续641* 对于[非交互式](/docs/zh-CN/headless) `-p` 运行中没有 `--input-format stream-json` 的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background),Claude Code 返回包含 `Agent aborted: auto mode classifier transcript exceeded context window in headless mode` 的错误结果,运行继续

622* 在 `-p` 运行中的其他地方,没有 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),没有提示可以回退到,因此操作不运行,运行继续642* 在 `-p` 运行中的其他地方,没有 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),没有提示可以回退到,因此操作不运行,运行继续

623 643 


630 The server returned no safety verdict650 The server returned no safety verdict

631</h3>651</h3>

632 652 

633在[服务器端分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)下,当服务器对操作没有给出判决时,auto mode 拒绝该操作。当 Claude Code 可以确定一个类别时,拒绝会在括号中指出一个类别,例如 `(timed out)`:653在[服务器端分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)下,当服务器对操作没有给出判决时,自动模式拒绝该操作。当 Claude Code 可以确定一个类别时,拒绝会在括号中指出一个类别,例如 `(timed out)`:

634 654 

635```text theme={null}655```text theme={null}

636The server-side auto mode classifier gave no verdict (timed out), so auto mode cannot determine the safety of <tool>.656The server-side auto mode classifier gave no verdict (timed out), so auto mode cannot determine the safety of <tool>.


638 658 

639消息的其余部分告诉 Claude 一次重试是否可以帮助。在某些这些拒绝之前,Claude Code 会等待,以便 Claude 的下一次尝试不会立即跟随。在交互式会话中等待期间,微调器显示 `Auto mode check unavailable` 和倒计时,按 `Esc` 会中断轮次。659消息的其余部分告诉 Claude 一次重试是否可以帮助。在某些这些拒绝之前,Claude Code 会等待,以便 Claude 的下一次尝试不会立即跟随。在交互式会话中等待期间,微调器显示 `Auto mode check unavailable` 和倒计时,按 `Esc` 会中断轮次。

640 660 

641在连续十个响应都没有判决后,auto mode 停止轮次:661在连续十个响应都没有判决后,自动模式停止轮次:

642 662 

643```text theme={null}663```text theme={null}

644Auto mode is unavailable — the server returned no safety verdict for the last 10 responses, so Claude stopped. Send a message to try again, or switch out of auto mode.664Auto mode is unavailable — the server returned no safety verdict for the last 10 responses, so Claude stopped. Send a message to try again, or switch out of auto mode.


646 666 

647停止消息在每种会话中出现在不同的位置:667停止消息在每种会话中出现在不同的位置:

648 668 

649* 在交互式会话中,消息作为警告出现在记录中,轮次结束669* 在交互式会话中,消息作为警告出现在会话记录中,轮次结束

650* 在[非交互式](/docs/zh-CN/headless) `-p` 运行中,运行结束并报告执行错误。使用默认文本输出,消息在 stderr 上打印。670* 在[非交互式](/docs/zh-CN/headless) `-p` 运行中,运行结束并报告执行错误。使用默认文本输出,消息在 stderr 上打印。

651* 当[子代理](/docs/zh-CN/sub-agents)达到限制时,子代理在完成之前停止,Claude 接收它生成的任何内容,并附带 auto mode 停止它的说明671* 当[子代理](/docs/zh-CN/sub-agents)达到限制时,子代理在完成之前停止,Claude 接收它生成的任何内容,并附带自动模式停止它的说明

652 672 

653**应该做什么:**673**应该做什么:**

654 674 

655* 发送另一条消息以让 Claude 重试。响应计数重新开始。675* 发送另一条消息以让 Claude 重试。响应计数重新开始。

656* 如果停止重复且您的请求通过[LLM 网关或代理](/docs/zh-CN/llm-gateway),检查它是否截断流式响应或重写它们。[服务器端分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)说明哪种网关行为会导致拒绝,[网关兼容性指南](/docs/zh-CN/llm-gateway-protocol#feature-pass-through)列出了要保持不变的内容。676* 如果停止重复且您的请求通过[LLM 网关或代理](/docs/zh-CN/llm-gateway),检查它是否截断流式响应或重写它们。[服务器端分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)说明哪种网关行为会导致拒绝,[网关兼容性指南](/docs/zh-CN/llm-gateway-protocol#feature-pass-through)列出了要保持不变的内容。

657* 在启动 Claude Code 之前设置 `CLAUDE_CODE_AUTO_MODE_SERVER=0` 以改用其自己的分类器请求。在 v2.1.281 之前,Claude Code 在直接连接到 Anthropic API 时不读取该变量。677* 在启动 Claude Code 之前设置 `CLAUDE_CODE_AUTO_MODE_SERVER=0` 以改用其自己的分类器请求。在 v2.1.281 之前,Claude Code 在直接连接到 Anthropic API 时不读取该变量。

658* 要自己批准操作,请改为[切换出 auto mode](/docs/zh-CN/permission-modes#switch-permission-modes)678* 要自己批准操作,请改为[切换出自动模式](/docs/zh-CN/permission-modes#switch-permission-modes)

659 679 

660在 v2.1.280 之前,Claude Code 立即拒绝来自没有判决的响应的每个操作,从不停止轮次。680在 v2.1.280 之前,Claude Code 立即拒绝来自没有判决的响应的每个操作,从不停止轮次。

661 681 


663 Agent terminated early due to an API error683 Agent terminated early due to an API error

664</h3>684</h3>

665 685 

666[子代理](/docs/zh-CN/sub-agents)的 API 请求终止失败,例如因为达到了使用限制或服务器错误的重试用尽,因此子代理在完成其任务之前停止。此消息需要 Claude Code v2.1.199 或更高版本;在此之前,API 错误文本被返回给 Claude,就像它是子代理的结果一样。686[子代理](/docs/zh-CN/sub-agents)的 API 请求终止失败,例如因为达到了用量限制或服务器错误的重试用尽,因此子代理在完成其任务之前停止。此消息需要 Claude Code v2.1.199 或更高版本;在此之前,API 错误文本被返回给 Claude,就像它是子代理的结果一样。

667 687 

668```text theme={null}688```text theme={null}

669Agent terminated early due to an API error: <error detail>689Agent terminated early due to an API error: <error detail>


671 691 

672**应该做什么:**692**应该做什么:**

673 693 

674* 将冒号后的错误详情与此页面上的其自己的部分匹配,例如[使用限制](#usage-limits)或[服务器错误](#server-errors),并按照该部分的步骤操作694* 将冒号后的错误详情与此页面上的其自己的部分匹配,例如[用量限制](#usage-limits)或[服务器错误](#server-errors),并按照该部分的步骤操作

675* 一旦底层错误清除,请要求 Claude 重试任务或[恢复子代理](/docs/zh-CN/sub-agents#resume-subagents)695* 一旦底层错误清除,请要求 Claude 重试任务或[恢复子代理](/docs/zh-CN/sub-agents#resume-subagents)

676 696 

677当速率限制、过载或服务器错误中断已经生成文本输出的前台子代理时,Claude 接收该部分输出标记为不完整,而不是此错误。仅输出为工具调用的子代理也会收到此错误;在 v2.1.199 中,该形状返回了空的部分结果。请参阅[子代理中的 API 错误](/docs/zh-CN/sub-agents#api-errors-in-subagents)。697当速率限制、过载或服务器错误中断已经生成文本输出的前台子代理时,Claude 接收该部分输出标记为不完整,而不是此错误。仅输出为工具调用的子代理也会收到此错误;在 v2.1.199 中,该形状返回了空的部分结果。请参阅[子代理中的 API 错误](/docs/zh-CN/sub-agents#api-errors-in-subagents)。


697 717 

698Claude Code 会阻止进一步的请求,直到消息中显示的重置时间。会话和周限制在所有模型中共享,因此切换模型不会恢复访问权限。Opus 和 Sonnet 限制各自仅适用于对该模型系列的请求,因此使用 `/model` 切换到该系列之外的模型可以继续工作。718Claude Code 会阻止进一步的请求,直到消息中显示的重置时间。会话和周限制在所有模型中共享,因此切换模型不会恢复访问权限。Opus 和 Sonnet 限制各自仅适用于对该模型系列的请求,因此使用 `/model` 切换到该系列之外的模型可以继续工作。

699 719 

700在使用 claude.ai 订阅登录的交互式会话中,Claude Code 也可以在打开的会话中等待,并在重置后不久继续中断的任务。等待时,会话底部的一行显示 `Usage limit reached · continuing automatically at 3:45pm · esc to cancel`。在空提示处按 `Esc` 可取消等待。有关您看到的内容、如何开始或取消等待以及如何关闭自动继续的信息,请参阅 [Wait for a usage limit to reset](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset)。在 v2.1.234 之前,Claude Code 不提供此等待功能。720在使用 claude.ai 订阅登录的交互式会话中,Claude Code 也可以在打开的会话中等待,并在重置后不久继续中断的任务。有关您看到的内容、如何开始或取消等待以及如何关闭自动继续的信息,请参阅 [Wait for a usage limit to reset](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset)。在 v2.1.234 之前,Claude Code 不提供此等待功能。

701 721 

702使用量同时计入会话和周额度。单次大量活动突发(例如大型工作流扇出)可能会在会话窗口重置之前耗尽周额度。722使用量同时计入会话和周额度。单次大量活动突发(例如大型工作流扇出)可能会在会话窗口重置之前耗尽周额度。

703 723 


885 身份验证错误905 身份验证错误

886</h2>906</h2>

887 907 

888这些错误意味着 Claude Code 无法向 API 证明您的身份。随时运行 `/status` 查看当前活跃的凭证。908这些错误表示 Claude Code 无法向 API 证明您的身份。您可以随时运行 `/status` 查看当前生效的凭据。

889 909 

890<h3 id="not-logged-in">910<h3 id="not-logged-in">

891 未登录911 未登录

892</h3>912</h3>

893 913 

894此会话没有可用的有效凭证。914此会话没有可用的有效凭据。

895 915 

896```text theme={null}916```text theme={null}

897Not logged in · Please run /login917Not logged in · Please run /login

898```918```

899 919 

900在 Claude Desktop 应用运行的会话中,例如 Code 标签页或 Cowork,消息读作 `Authentication required · Sign in again to continue`,您从应用中再次登录。920在由 Claude Desktop 应用运行的会话中(例如 Code 标签页或 Cowork),消息显示为 `Authentication required · Sign in again to continue`,您需要在应用中重新登录。

901 921 

902**应该做什么:**922如果您在另一个使用相同[配置目录](/docs/zh-CN/claude-directory)的 Claude Code 窗口中使用 claude.ai 账户登录,显示此消息的交互式会话会自动开始使用该登录。您无需重启会话。

923 

924在 macOS 上的 v2.1.286 之前版本中,您在另一个窗口登录后,该会话可能仍会继续显示此消息。在这些版本中,请重启显示此消息的会话。

903 925 

904* 运行 `/login` 以使用您的 Claude 订阅或 Console 账户进行身份验证926**解决方法:**

905* 如果您期望使用环境变量进行身份验证,请确认 `ANTHROPIC_API_KEY` 已在启动 `claude` 的 shell 中设置并导出

906* 对于无法进行交互式登录的 CI 或自动化,配置一个 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本,在启动时获取密钥

907* 查看 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) 以了解当存在多个凭证时 Claude Code 使用哪个凭证

908 927 

909如果您被重复提示登录,请参阅 [未登录或令牌过期](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired) 了解系统时钟检查和 macOS 凭证存储恢复步骤。928* 运行 `/login`,使用您的 Claude 订阅或 Console 账户进行身份验证

929* 如果您原本希望通过环境变量进行身份验证,请确认在启动 `claude` 的 shell 中已设置并导出 `ANTHROPIC_API_KEY`

930* 对于无法进行交互式登录的 CI 或自动化场景,请配置一个在启动时获取密钥的 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本

931* 请参阅[身份验证优先级](/docs/zh-CN/authentication#authentication-precedence),了解存在多个凭据时 Claude Code 使用哪一个

932 

933如果系统反复提示您登录,请参阅[未登录或令牌已过期](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired),了解系统时钟检查以及 macOS 凭据存储的恢复步骤。

910 934 

911<h3 id="could-not-resolve-authentication-method">935<h3 id="could-not-resolve-authentication-method">

912 无法解析身份验证方法936 无法确定身份验证方法

913</h3>937</h3>

914 938 

915会话到达 API 客户端时没有任何凭证。[后台会话](/docs/zh-CN/agent-view) 和云会话在 worker 启动时没有凭证时显示此消息。交互式、`-p` 和 Agent SDK 运行报告与 [未登录](#not-logged-in) 相同的条件,并仅将此字符串写入其调试日志,因此如果您在那里找到它,请改为遵循该条目。939会话在没有任何凭据的情况下到达了 API 客户端。当工作进程在没有凭据的情况下启动时,[后台会话](/docs/zh-CN/agent-view)和云端会话会显示此消息。交互式运行、`-p` 运行和 Agent SDK 运行会将同样的情况报告为[未登录](#not-logged-in),并且只将此字符串写入调试日志,因此如果您是在调试日志中发现的,请改为按照该条目操作。

916 940 

917```text theme={null}941```text theme={null}

918Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted942Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted

919```943```

920 944 

921在当前版本上,该错误意味着 worker 进程没有可用的凭证。在 v2.1.174 之前,分配给空闲预初始化 worker 的后台会话即使配置了有效凭证也可能以这种方式失败。在 v2.1.176 之前,在被声明之前处于空闲状态的云会话也可能失败。升级以恢复。945在当前版本中,此错误表示工作进程没有可用的凭据。在 v2.1.174 之前,分配给空闲的预初始化工作进程的后台会话即使已配置有效凭据,也可能以这种方式失败。在 v2.1.176 之前,在被认领前处于空闲状态的云端会话也可能出现这种情况。升级即可恢复。

922 946 

923**应该做什么:**947**解决方法:**

924 948 

925* 如果这出现在后台或云会话中且您的凭证已配置,请升级到 v2.1.176 或更高版本949* 如果此错误出现在后台会话或云端会话中,且您的凭据已经配置好,请升级到 v2.1.176 或更高版本

926* 确认 `ANTHROPIC_API_KEY`、`CLAUDE_CODE_OAUTH_TOKEN` 或您的云提供商凭证已在启动 worker 的环境中设置,而不仅仅在您的交互式 shell 中950* 确认 `ANTHROPIC_API_KEY`、`CLAUDE_CODE_OAUTH_TOKEN` 或您的云服务提供商凭据已在启动工作进程的环境中设置,而不仅仅是在您的交互式 shell 中设置

927* 对于 Agent SDK,请参阅 [快速入门中的身份验证设置](/docs/zh-CN/agent-sdk/quickstart#setup)951* 对于 Agent SDK,请参阅[快速入门中的身份验证设置](/docs/zh-CN/agent-sdk/quickstart#setup)

928* 在同一环境中的交互式会话中运行 `/status` 以确认哪个凭证源可解析952* 在同一环境中的交互式会话里运行 `/status`,确认解析到的是哪个凭据来源

929 953 

930<h3 id="invalid-api-key">954<h3 id="invalid-api-key">

931 无效的 API 密钥955 API 密钥无效

932</h3>956</h3>

933 957 

934`ANTHROPIC_API_KEY` 环境变量或 `apiKeyHelper` 脚本返回了 API 拒绝的密钥,或 Claude Code 在发送前阻止了来自 `ANTHROPIC_API_KEY` 的密钥。958`ANTHROPIC_API_KEY` 环境变量或 `apiKeyHelper` 脚本返回了一个被 API 拒绝的密钥,或者 Claude Code 在发送前拦截了来自 `ANTHROPIC_API_KEY` 的密钥。

935 959 

936```text theme={null}960```text theme={null}

937Invalid API key · Fix external API key961Invalid API key · Fix external API key

938```962```

939 963 

940当消息在 `Fix external API key` 之后继续,并带有描述如 `Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break at character 41 (120 characters on 2 lines).` 时,API 从未看到该密钥。Claude Code 发现了 HTTP 标头无法传输的字符,并在发送前停止了请求。请参阅 [无效的请求标头值](#invalid-request-header-value) 了解如何读取描述并修复该值。964如果消息在 `Fix external API key` 之后还附有一段描述,例如 `Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break at character 41 (120 characters on 2 lines).`,则说明 API 从未收到该密钥。Claude Code 发现了一个 HTTP 标头无法承载的字符,并在发送前停止了请求。请参阅[请求标头值无效](#invalid-request-header-value),了解如何解读该描述并修正该值。

941 965 

942**应该做什么:**966**解决方法:**

943 967 

944* 检查拼写错误并确认密钥未在 [Console](https://platform.claude.com/settings/keys) 中被撤销968* 检查是否有拼写错误,并在 [Console](https://platform.claude.com/settings/keys) 中确认该密钥未被撤销

945* 在同一 shell 中,运行 `env | grep ANTHROPIC`,或在 PowerShell 中运行 `Get-ChildItem Env:ANTHROPIC*`。direnv、dotenv shell 插件和 IDE 终端等工具可以从项目中的 `.env` 文件加载过时的密钥,而无需您显式设置它969* 在同一个 shell 中运行 `env | grep ANTHROPIC`,或在 PowerShell 中运行 `Get-ChildItem Env:ANTHROPIC*`。direnv、dotenv shell 插件以及 IDE 终端等工具可能会从项目中的 `.env` 文件加载过时的密钥,而您并未显式设置它。

946* 取消设置 `ANTHROPIC_API_KEY` 并运行 `/login` 以改用订阅身份验证970* 取消设置 `ANTHROPIC_API_KEY` 并运行 `/login`,改用订阅身份验证

947* 如果密钥来自 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本,请直接运行该脚本以确认它在 stdout 上打印有效密钥971* 如果密钥来自 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本,请直接运行该脚本,确认它在 stdout 上输出了有效的密钥

948* 运行 `/status` 以确认 Claude Code 实际使用的凭证源972* 运行 `/status`,确认 Claude Code 实际使用的是哪个凭据来源

949 973 

950<h3 id="your-apikeyhelper-script-is-failing">974<h3 id="your-apikeyhelper-script-is-failing">

951 您的 apiKeyHelper 脚本失败975 您的 apiKeyHelper 脚本运行失败

952</h3>976</h3>

953 977 

954Claude Code 运行了您的 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 设置中的命令,但没有获得密钥。没有密钥,请求会到达 API,并带有占位符凭证,API 会以 `401` 拒绝它。终端中的 `Authentication` 面板显示发生了以下哪种情况:978Claude Code 运行了您的 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 设置中的命令,但没有得到密钥。没有密钥时,请求会携带一个占位凭据到达 API,API 会以 `401` 拒绝它。终端中的 `Authentication` 面板会显示发生了以下哪种情况:

955 979 

956* 命令以错误退出或超时980* 命令以错误退出或超时

957* 命令未向 stdout 打印任何内容981* 命令没有向 stdout 输出任何内容

958* 命令打印了除密钥之外的内容,例如登录横幅或日志行。该面板显示 `returned output that cannot be used as an API key` 并说明了问题所在,而不重复输出。在 v2.1.227 之前,Claude Code 发送命令打印的任何内容,在修剪周围空格后。982* 命令输出了密钥以外的内容,例如登录横幅或日志行。面板会显示 `returned output that cannot be used as an API key` 并说明问题所在,但不会重复输出内容。在 v2.1.227 之前,Claude Code 会在去除首尾空白后发送命令输出的任何内容。

959 983 

960```text theme={null}984```text theme={null}

961Your apiKeyHelper script is failing · This usually means you need to re-authenticate with your provider · Run /status to see the script's error output985Your apiKeyHelper script is failing · This usually means you need to re-authenticate with your provider · Run /status to see the script's error output

962```986```

963 987 

964在 [非交互式模式](/docs/zh-CN/headless) 中,stderr 也带有具体原因,前缀为 `apiKeyHelper failed:`。988在[非交互模式](/docs/zh-CN/headless)下,stderr 也会带有具体原因,前缀为 `apiKeyHelper failed:`。

965 989 

966Claude Code 重新运行脚本并在显示此消息之前最多重试请求两次,因此故障在三次尝试内出现。在 v2.1.208 之前,Claude Code 花费完整的 [重试预算](#automatic-retries) 使用占位符凭证重新发送请求,然后报告通用 `401` 身份验证错误而不是脚本故障。990在显示此消息之前,Claude Code 会重新运行脚本并最多再重试请求两次,因此失败会在三次尝试内显现。在 v2.1.208 之前,Claude Code 会用完全部[重试预算](#automatic-retries),用占位凭据反复重新发送请求,然后报告一个通用的 `401` 身份验证错误,而不是脚本失败。

967 991 

968运行 `/login` 在这里没有帮助:只要设置存在,helper 的输出 [优先于](/docs/zh-CN/authentication#authentication-precedence) 保存的登录。992此时运行 `/login` 没有帮助:只要该设置存在,helper 的输出就[优先于](/docs/zh-CN/authentication#authentication-precedence)已保存的登录。

969 993 

970**应该做什么:**994**解决方法:**

971 995 

972* 直接在您的 shell 中运行在 `apiKeyHelper` 中配置的命令以重现故障996* 在您的 shell 中直接运行 `apiKeyHelper` 中配置的命令,以复现该失败

973* 如果命令报告会话过期,请使用您的凭证提供商重新身份验证,例如再次登录您的 SSO 或密钥保管库997* 如果命令报告会话已过期,请向您的凭据提供方重新进行身份验证,例如重新登录您的 SSO 或密钥保管库

974* 修复命令,使其仅将密钥打印到 stdout,作为单个可打印 ASCII 令牌,最多 16,384 个字符,并以代码 0 退出。请参阅 [使用 apiKeyHelper 轮换凭证](/docs/zh-CN/llm-gateway-connect#rotate-credentials-with-apikeyhelper) 了解工作设置。998* 修正命令,使其只向 stdout 输出密钥(一个由可打印 ASCII 字符组成、最多 16,384 个字符的单一令牌),并以退出码 0 退出。请参阅[使用 apiKeyHelper 轮换凭据](/docs/zh-CN/llm-gateway-connect#rotate-credentials-with-apikeyhelper)了解可用的设置方式。

975* 运行 `/status` 查看故障并确认 `apiKeyHelper` 是活跃凭证源。`apiKeyHelper` 行显示 `Failing` 以及最后一次故障的详细信息,例如退出代码和命令的错误输出,并在下一次成功运行后消失。在 v2.1.274 之前,`/status` 仅显示凭证源,而不是故障。999* 运行 `/status` 查看失败情况,并确认 `apiKeyHelper` 是当前生效的凭据来源。`apiKeyHelper` 行会显示 `Failing` 以及上一次失败的详细信息,例如退出码和命令的错误输出,并会在下一次成功运行后消失。在 v2.1.274 之前,`/status` 只显示凭据来源,不显示失败情况。

976* 每次命令失败时,其退出代码和错误输出也会出现在终端中的 `Authentication` 面板中。在 v2.1.212 之前,该面板的标题为 `Cloud authentication`。1000* 每次命令失败时,其退出码和错误输出也会显示在终端的 `Authentication` 面板中。在 v2.1.212 之前,该面板的标题为 `Cloud authentication`。

977 1001 

978<h3 id="invalid-request-header-value">1002<h3 id="invalid-request-header-value">

979 无效的请求标头值1003 请求标头值无效

980</h3>1004</h3>

981 1005 

982Claude Code 即将作为请求标头发送的值包含 HTTP 标头无法传输的字符:换行符、NUL 字节或 `U+00FF` 以上的字符,例如弯引号或零宽空格。Claude Code 在发送任何内容之前停止请求,并命名要修复的变量或设置。通常的原因是从文档或聊天粘贴的凭证,其中包含不可见字符或杂散换行符。1006Claude Code 即将作为请求标头发送的某个值包含 HTTP 标头无法承载的字符:换行符、NUL 字节,或 `U+00FF` 以上的字符(例如弯引号或零宽空格)。Claude Code 会在发送任何内容之前停止请求,并指出需要修正的变量或设置。常见原因是从文档或聊天中粘贴的凭据带有不可见字符或多余的换行符。

983 1007 

984Claude Code 在直接向 Claude API 或通过 [LLM 网关](/docs/zh-CN/llm-gateway) 发送请求时运行此检查。在第三方云提供商(如 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock))上,Claude Code 在发送前不运行它。1008当 Claude Code 直接或通过 [LLM 网关](/docs/zh-CN/llm-gateway)向 Claude API 发送请求时,会执行此检查。在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 等第三方云服务提供商上,Claude Code 不会在发送前执行此检查。

985 1009 

986```text theme={null}1010```text theme={null}

987Invalid auth token · Fix external auth token1011Invalid auth token · Fix external auth token


989Invalid request header from the environment · Fix the environment variable1013Invalid request header from the environment · Fix the environment variable

990```1014```

991 1015 

992消息的第一部分取决于坏值来自何处:1016消息的第一部分取决于错误值的来源:

993 1017 

994* `Invalid auth token`:来自 [`ANTHROPIC_AUTH_TOKEN`](/docs/zh-CN/env-vars) 或 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 的持有者令牌1018* `Invalid auth token`:来自 [`ANTHROPIC_AUTH_TOKEN`](/docs/zh-CN/env-vars) 或 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 的 bearer 令牌

995* `Invalid ANTHROPIC_CUSTOM_HEADERS`:您在 [`ANTHROPIC_CUSTOM_HEADERS`](/docs/zh-CN/env-vars) 中设置的标头名称或值。描述计算哪个 `Name: Value` 对有问题,例如 `distinct header 2 of 3 parsed from ANTHROPIC_CUSTOM_HEADERS`,而不重复名称或值,因为您选择了两者。1019* `Invalid ANTHROPIC_CUSTOM_HEADERS`:您在 [`ANTHROPIC_CUSTOM_HEADERS`](/docs/zh-CN/env-vars) 中设置的标头名称或值。描述会指出出错的是第几个 `Name: Value` 对,例如 `distinct header 2 of 3 parsed from ANTHROPIC_CUSTOM_HEADERS`,但不会重复名称或值,因为两者都是您自己设定的。

996* `Invalid request header from the environment`:Claude Code 从另一个环境变量(如 `CLAUDE_AGENT_SDK_CLIENT_APP`)复制到请求标头中的值。描述命名要修复的变量。1020* `Invalid request header from the environment`:Claude Code 从另一个环境变量(例如 `CLAUDE_AGENT_SDK_CLIENT_APP`)复制到请求标头中的值。描述会指出需要修正的变量。

997 1021 

998Claude Code 将此检查捕获的坏 `ANTHROPIC_API_KEY` 报告为 [无效的 API 密钥](#invalid-api-key),具有相同的尾部描述。它将坏的保存 `/login` 凭证报告为 [未登录](#not-logged-in);运行 `/login` 以保存新凭证。[`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本的输出永远不会到达此检查:Claude Code 在脚本运行时验证它,并且输出 HTTP 标头无法传输的失败会导致 [您的 apiKeyHelper 脚本失败](#your-apikeyhelper-script-is-failing)。1022此检查捕获到的错误 `ANTHROPIC_API_KEY` 会被 Claude Code 报告为 [API 密钥无效](#invalid-api-key),并附带同样的尾部描述。错误的已保存 `/login` 凭据则会被报告为[未登录](#not-logged-in);运行 `/login` 保存一个新的凭据即可。[`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本的输出永远不会进入此检查:Claude Code 在脚本运行时就会对其进行验证,HTTP 标头无法承载的输出会以[您的 apiKeyHelper 脚本运行失败](#your-apikeyhelper-script-is-failing)的形式失败。

999 1023 

1000在第二个 `·` 之后,消息描述问题,如以下完整示例:1024在第二个 `·` 之后,消息会描述问题,完整示例如下:

1001 1025 

1002```text theme={null}1026```text theme={null}

1003Invalid auth token · Fix external auth token · Invalid Authorization header value from ANTHROPIC_AUTH_TOKEN: it contains a line break at character 41 (120 characters on 2 lines).1027Invalid auth token · Fix external auth token · Invalid Authorization header value from ANTHROPIC_AUTH_TOKEN: it contains a line break at character 41 (120 characters on 2 lines).

1004```1028```

1005 1029 

1006位置从 1 开始计算字符。描述由固定短语和字符计数构建,因此它永远不包括值本身。它仅在字符是众所周知的不可见或排版字符(如字节顺序标记、零宽空格或弯引号)时命名该字符,并将其他任何内容报告为 `a non-ASCII character`。1030位置按字符计数,从 1 开始。描述由固定短语和字符计数组成,因此永远不会包含值本身。只有当问题字符是众所周知的不可见字符或排版字符(例如字节顺序标记、零宽空格或弯引号)时,描述才会指出该字符,其他字符一律报告为 `a non-ASCII character`。

1007 1031 

1008**应该做什么:**1032**解决方法:**

1009 1033 

1010* 重新设置消息命名的变量或设置,重新输入报告位置周围的字符,而不是从同一来源再次粘贴1034* 重新设置消息中指出的变量或设置,手动重新输入所报告位置附近的字符,而不是再次从同一来源粘贴

1011* 对于 `ANTHROPIC_CUSTOM_HEADERS`,每行保留一个 `Name: Value` 对,并重写消息计数的对1035* 对于 `ANTHROPIC_CUSTOM_HEADERS`,每行保留一个 `Name: Value` 对,并重写消息所指出的那一对

1012* 运行 `/status` 以确认哪个凭证源处于活跃状态1036* 运行 `/status`,确认当前生效的凭据来源

1013 1037 

1014<h3 id="this-organization-has-been-disabled">1038<h3 id="this-organization-has-been-disabled">

1015 此组织已被禁用1039 此组织已被停用

1016</h3>1040</h3>

1017 1041 

1018Claude Code 正在使用来自已禁用 Console 组织的过时 `ANTHROPIC_API_KEY`。当您有保存的订阅登录时,密钥会覆盖它。1042Claude Code 正在使用来自已停用 Console 组织的过时 `ANTHROPIC_API_KEY`。当您有已保存的订阅登录时,该密钥会覆盖它。

1019 1043 

1020```text theme={null}1044```text theme={null}

1021Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your subscription instead1045Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your subscription instead


1023API Error: 400 ... This organization has been disabled.1047API Error: 400 ... This organization has been disabled.

1024```1048```

1025 1049 

1026`·` 之后的提示取决于您保存的凭证:当存储的 `/login` 可以在您取消设置密钥后接管时出现第一种形式,当密钥是您唯一的凭证时出现第二种形式。1050`·` 之后的提示取决于您已保存的凭据:当您取消设置该密钥后有已存储的 `/login` 可以接替时,显示第一种形式;当该密钥是您唯一的凭据时,显示第二种形式。

1027 1051 

1028环境变量优先于 `/login`,因此在您的 shell 配置文件中导出或从 `.env` 文件加载的密钥即使您有有效的 Pro 或 Max 订阅也会被使用。在非交互式模式 (`-p`) 中,当存在密钥时始终使用该密钥。1052环境变量优先于 `/login`,因此即使您拥有可用的 Pro 或 Max 订阅,在 shell 配置文件中导出或从 `.env` 文件加载的密钥仍会被使用。在非交互模式(`-p`)下,只要存在该密钥,就总会使用它。

1029 1053 

1030**应该做什么:**1054**解决方法:**

1031 1055 

1032* 在当前 shell 中取消设置 `ANTHROPIC_API_KEY` 并从您的 shell 配置文件中删除它,然后重新启动 `claude`1056* 在当前 shell 中取消设置 `ANTHROPIC_API_KEY`,并将其从 shell 配置文件中删除,然后重新启动 `claude`

1033* 如果消息说 `Update or unset`,您没有保存的登录可以回退。取消设置密钥并运行 `/login`,或将密钥替换为来自活跃 Console 组织的密钥。1057* 如果消息显示 `Update or unset`,说明您没有可回退的已保存登录。请取消设置该密钥并运行 `/login`,或将其替换为来自活跃 Console 组织的密钥。

1034* 之后运行 `/status` 以确认活跃凭证是您的订阅1058* 之后运行 `/status`,确认当前生效的凭据是您的订阅

1035* 如果未设置环境变量且错误仍然存在,请联系支持或使用不同账户登录。1059* 如果没有设置任何环境变量但错误仍然存在,请联系支持团队或使用其他账户登录。

1036 1060 

1037<h3 id="your-organization-has-disabled-api-key-authentication">1061<h3 id="your-organization-has-disabled-api-key-authentication">

1038 您的组织已禁用 API 密钥身份验证1062 您的组织已禁用 API 密钥身份验证

1039</h3>1063</h3>

1040 1064 

1041此消息需要 Claude Code v2.1.169 或更高版本。您的 Console 组织的管理员已关闭 API 密钥身份验证,因此 API 拒绝 Claude Code 正在发送的密钥。`·` 之后的恢复提示因密钥来自何处而异:1065此消息需要 Claude Code v2.1.169 或更高版本。您的 Console 组织管理员已关闭 API 密钥身份验证,因此 API 会拒绝 Claude Code 发送的密钥。`·` 之后的恢复提示因密钥来源而异:

1042 1066 

1043```text theme={null}1067```text theme={null}

1044Your organization has disabled API key authentication · Run /login to sign in with your claude.ai account1068Your organization has disabled API key authentication · Run /login to sign in with your claude.ai account


1048Your organization has disabled API key authentication · Sign in again with your claude.ai account1072Your organization has disabled API key authentication · Sign in again with your claude.ai account

1049```1073```

1050 1074 

1051最后一种形式出现在 Claude Desktop 应用运行的会话中,例如 Code 标签页或 Cowork,您从应用中再次登录。1075最后一种形式出现在由 Claude Desktop 应用运行的会话中(例如 Code 标签页或 Cowork),此时您需要在应用中重新登录。

1052 1076 

1053环境变量和 `apiKeyHelper` 优先于 `/login`,因此仅运行 `/login` 在任一仍在提供密钥时没有帮助。请参阅 [身份验证优先级](/docs/zh-CN/authentication#authentication-precedence)。1077环境变量和 `apiKeyHelper` 优先于 `/login`,因此只要其中任何一个仍在提供密钥,单独运行 `/login` 是没有帮助的。请参阅[身份验证优先级](/docs/zh-CN/authentication#authentication-precedence)。

1054 1078 

1055**应该做什么:**1079**解决方法:**

1056 1080 

1057* 如果消息命名 `ANTHROPIC_API_KEY`,在当前 shell 中取消设置它并从您的 shell 配置文件或 `.env` 文件中删除它,然后重新启动 `claude`1081* 如果消息中提到 `ANTHROPIC_API_KEY`,请在当前 shell 中取消设置它,并将其从 shell 配置文件或 `.env` 文件中删除,然后重新启动 `claude`

1058* 如果消息命名 `apiKeyHelper`,从您的 `settings.json` 中删除 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 设置1082* 如果消息中提到 `apiKeyHelper`,请从您的 `settings.json` 中删除 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 设置

1059* 运行 `/login` 以使用您的 claude.ai 账户登录1083* 运行 `/login`,使用您的 claude.ai 账户登录

1060* 之后运行 `/status` 以确认活跃凭证是您的订阅而不是 API 密钥1084* 之后运行 `/status`,确认当前生效的凭据是您的订阅而不是 API 密钥

1061* 如果您需要 API 密钥身份验证用于自动化,请要求您的组织管理员在 Console 中重新启用它1085* 如果您的自动化流程需要 API 密钥身份验证,请让组织管理员在 Console 中重新启用它

1062 1086 

1063<h3 id="your-organization-has-disabled-claude-subscription-access">1087<h3 id="your-organization-has-disabled-claude-subscription-access">

1064 您的组织已禁用 Claude 订阅访问1088 您的组织已禁用 Claude 订阅访问

1065</h3>1089</h3>

1066 1090 

1067您的 Claude 组织不允许使用订阅登录登录 Claude Code。使用同一账户再次运行 `/login` 会返回相同的错误。1091您的 Claude 组织不允许使用订阅登录来登录 Claude Code。使用同一账户再次运行 `/login` 会返回相同的错误。

1068 1092 

1069```text theme={null}1093```text theme={null}

1070Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access1094Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access

1071```1095```

1072 1096 

1073这是服务器端组织设置,因此无法从本地设置、环境变量或 CLI 标志覆盖。1097这是服务器端的组织设置,因此无法通过本地设置、环境变量或 CLI 标志覆盖。

1074 1098 

1075Agent SDK 和 `-p` 非交互式模式将此显示为 `oauth_org_not_allowed` 错误代码。1099Agent SDK 和 `-p` 非交互模式会将其呈现为 `oauth_org_not_allowed` 错误代码。

1076 1100 

1077**应该做什么:**1101**解决方法:**

1078 1102 

1079* 要求您的管理员为您的组织启用 Claude Code 访问1103* 请管理员为您的组织启用 Claude Code 访问权限

1080* 使用 Console API 密钥而不是您的订阅进行身份验证。请参阅 [Claude Console 身份验证](/docs/zh-CN/authentication#claude-console-authentication) 了解设置。1104* 改用 Console API 密钥而不是订阅进行身份验证。设置方法请参阅 [Claude Console 身份验证](/docs/zh-CN/authentication#claude-console-authentication)。

1081* 如果您是管理员且看不到启用访问的选项,请联系 [Anthropic 支持](https://support.claude.com)1105* 如果您是管理员但找不到启用访问的选项,请联系 [Anthropic 支持](https://support.claude.com)

1082 1106 

1083<h3 id="routines-are-disabled-by-your-organizations-policy">1107<h3 id="routines-are-disabled-by-your-organizations-policy">

1084 例程被您的组织的策略禁用1108 Routine 已被您组织的策略禁用

1085</h3>1109</h3>

1086 1110 

1087您的 Team 或 Enterprise 组织中的所有者已在组织级别关闭例程。当您尝试创建或运行例程时会出现错误,例如从 [Routines](/docs/zh-CN/routines) UI on claude.ai/code。在 Claude Code v2.1.227 或更高版本上,相同的设置也 [隐藏 `/schedule`](/docs/zh-CN/routines#troubleshooting) 在 CLI 中。1111您所在的 Team 或 Enterprise 组织中的 Owner 已在组织级别关闭了 Routine。当您尝试创建或运行 Routine 时(例如通过 claude.ai/code 上的 [Routines](/docs/zh-CN/routines) 界面),会出现此错误。在 Claude Code v2.1.227 或更高版本中,同一设置还会在 CLI 中[隐藏 `/schedule`](/docs/zh-CN/routines#troubleshooting)。

1088 1112 

1089```text theme={null}1113```text theme={null}

1090Routines are disabled by your organization's policy.1114Routines are disabled by your organization's policy.

1091```1115```

1092 1116 

1093这是服务器端设置,因此无法从本地设置、环境变量或 CLI 标志覆盖。1117这是服务器端设置,因此无法通过本地设置、环境变量或 CLI 标志覆盖。

1094 1118 

1095**应该做什么:**1119**解决方法:**

1096 1120 

1097* 要求您的组织中的所有者在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 启用 **Routines** 切换1121* 请您组织中的 Owner 在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 启用 **Routines** 开关

1098* 对于不需要组织级例程的一次性计划工作,请参阅 [计划任务](/docs/zh-CN/scheduled-tasks)1122* 对于不需要组织级 Routine 的一次性定时工作,请参阅[定时任务](/docs/zh-CN/scheduled-tasks)

1099 1123 

1100<h3 id="remote-control-requires-the-anthropic-api">1124<h3 id="remote-control-requires-the-anthropic-api">

1101 Remote Control 需要 Anthropic API1125 Remote Control 需要 Anthropic API

1102</h3>1126</h3>

1103 1127 

1104会话不是直接与 Anthropic API 通信,因此 [Remote Control](/docs/zh-CN/remote-control) 需要。1128该会话没有直接与 Anthropic API 通信,而这是 [Remote Control](/docs/zh-CN/remote-control) 所必需的。

1105 1129 

1106```text theme={null}1130```text theme={null}

1107Remote Control is only available when using Claude via api.anthropic.com. CLAUDE_CODE_USE_BEDROCK is set, so this session is using Amazon Bedrock — unset it (or run in a shell without it) to use Remote Control.1131Remote Control is only available when using Claude via api.anthropic.com. CLAUDE_CODE_USE_BEDROCK is set, so this session is using Amazon Bedrock — unset it (or run in a shell without it) to use Remote Control.

1108```1132```

1109 1133 

1110第二句解释了什么将会话路由离开 Anthropic API;在 v2.1.219 之前,消息仅为第一句。根据原因,消息命名:1134第二句话解释了是什么让会话绕开了 Anthropic API;在 v2.1.219 之前,消息只有第一句话。根据原因不同,消息会指出:

1111 1135 

1112* `CLAUDE_CODE_USE_*` 提供商变量,例如 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 的 `CLAUDE_CODE_USE_BEDROCK` 或 [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 的 `CLAUDE_CODE_USE_VERTEX`1136* 某个 `CLAUDE_CODE_USE_*` 提供商变量,例如用于 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 的 `CLAUDE_CODE_USE_BEDROCK` 或用于 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 的 `CLAUDE_CODE_USE_VERTEX`

1113* [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 `api.anthropic.com` 以外的主机,例如 [LLM 网关](/docs/zh-CN/llm-gateway) 或代理,即使您使用 claude.ai 登录;在 v2.1.196 之前,自定义基础 URL 不会阻止 Remote Control1137* [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 `api.anthropic.com` 以外的主机,例如 [LLM 网关](/docs/zh-CN/llm-gateway)或代理,即使您使用 claude.ai 登录也是如此;在 v2.1.196 之前,自定义 base URL 不会阻止 Remote Control

1114* `ANTHROPIC_UNIX_SOCKET` 已设置,因此会话通过本地套接字而不是 `api.anthropic.com` 发送其请求1138* 设置了 `ANTHROPIC_UNIX_SOCKET`,因此会话通过本地套接字而不是发往 `api.anthropic.com` 来发送请求

1115* 企业 [云网关](/docs/zh-CN/claude-apps-gateway) 通过 `/login` 登录,不支持 Remote Control,没有变量可取消设置1139* 通过 `/login` 完成的企业[云网关](/docs/zh-CN/claude-apps-gateway)登录,它不支持 Remote Control,也没有可以取消设置的变量

1116 1140 

1117**应该做什么:**1141**解决方法:**

1118 1142 

1119* 取消设置消息命名的变量,例如 `CLAUDE_CODE_USE_BEDROCK` 或 `ANTHROPIC_BASE_URL`,并重新启动会话,或从直接与 Anthropic API 通信的会话启动 Remote Control1143* 取消设置消息中指出的变量(例如 `CLAUDE_CODE_USE_BEDROCK` 或 `ANTHROPIC_BASE_URL`)并重启会话,或从直接与 Anthropic API 通信的会话中启动 Remote Control

1120* 如果变量未在您的 shell 中设置,请检查您的 [设置文件](/docs/zh-CN/settings#where-settings-live) 中的 `env` 键,该键将环境变量应用于每个会话1144* 如果该变量并未在您的 shell 中设置,请检查您[设置文件](/docs/zh-CN/settings#where-settings-live)中的 `env` 键,它会将环境变量应用到每个会话

1121* 对于此和其他 Remote Control 启动消息,请参阅 [Remote Control 故障排除](/docs/zh-CN/remote-control#troubleshooting)1145* 关于此消息及其他 Remote Control 启动消息,请参阅[排除 Remote Control 故障](/docs/zh-CN/remote-control#troubleshooting)

1122 1146 

1123<h3 id="remote-control-couldnt-refresh-your-login">1147<h3 id="remote-control-couldnt-refresh-your-login">

1124 Remote Control 无法刷新您的登录1148 Remote Control 无法刷新您的登录

1125</h3>1149</h3>

1126 1150 

1127Claude Code 在短期凭证上运行实时 [Remote Control](/docs/zh-CN/remote-control) 连接,它使用您保存的 claude.ai 登录获取和更新这些凭证。当 claude.ai 停止接受该登录或 Claude Code 没有保存的登录时,Claude Code 停止 Remote Control 并需要您再次登录。任一故障都可能在 Claude Code 仍在连接时或稍后在更新凭证时发生。1151Claude Code 使用短期凭据运行实时的 [Remote Control](/docs/zh-CN/remote-control) 连接,这些凭据是它借助您已保存的 claude.ai 登录获取和续期的。当 claude.ai 不再接受该登录,或者 Claude Code 已没有任何已保存的登录时,Claude Code 会停止 Remote Control,需要您重新登录。这两种失败都可能发生在 Claude Code 仍在连接时,也可能发生在之后续期凭据时。

1128 1152 

1129当 Claude Code 要求登录服务刷新您保存的登录并且没有得到答复时,它会保持 Remote Control 运行并在连接的当前凭证仍然有效时再次尝试刷新。当 Claude Code 无法到达登录服务、请求超时或服务在不拒绝您的登录的情况下失败时,刷新会得不到答复。如果当该凭证过期时登录服务仍然没有答复,Claude Code 会停止 Remote Control 并报告 `OAuth token refresh failed`。1153当 Claude Code 请求登录服务刷新您已保存的登录却没有得到响应时,它会保持 Remote Control 运行,并在连接的当前凭据仍然有效期间再次尝试刷新。当 Claude Code 无法访问登录服务、请求超时,或服务失败但并未拒绝您的登录时,刷新就会得不到响应。如果在该凭据过期时登录服务仍未响应,Claude Code 会停止 Remote Control 并报告 `OAuth token refresh failed`。

1130 1154 

1131当 Claude Code 停止 Remote Control 时,它在警告和以 `Remote Control disconnected` 开头的成绩单行中显示原因。您的本地会话继续运行而没有 Remote Control。本部分涵盖这些行:1155当 Claude Code 停止 Remote Control 时,它会在警告以及一条以 `Remote Control disconnected` 开头的会话记录行中显示原因。您的本地会话会在没有 Remote Control 的情况下继续运行。本节涵盖以下消息行:

1132 1156 

1133```text theme={null}1157```text theme={null}

1134Remote Control disconnected — Claude.ai login expired — run /login to restore Remote Control1158Remote Control disconnected — Claude.ai login expired — run /login to restore Remote Control


1140Remote Control disconnected — Signed out of Claude — run /login, then /remote-control1164Remote Control disconnected — Signed out of Claude — run /login, then /remote-control

1141```1165```

1142 1166 

1143Claude Code 在消息中间命名原因:1167Claude Code 会在消息中间部分说明原因:

1144 1168 

1145* ` Claude.ai login expired` 和 `Claude.ai login was rejected`:claude.ai 不再接受您保存的登录令牌,因为它已过期或被撤销1169* `Claude.ai login expired` 和 `Claude.ai login was rejected`:claude.ai 不再接受您已保存的登录令牌,因为它已过期或被撤销

1146* ` OAuth token unavailable`:当连接的凭证到期需要更新时,Claude Code 没有保存的登录令牌1170* `OAuth token unavailable`:当连接的凭据到期需要续期时,Claude Code 没有已保存的登录令牌

1147* `OAuth token refresh failed`:claude.ai 在 Claude Code 重新连接时拒绝了您保存的登录令牌,刷新令牌没有产生新令牌1171* `OAuth token refresh failed`:Claude Code 重新连接时,claude.ai 拒绝了您已保存的登录令牌,且刷新令牌没有产生新令牌

1148* `JWT refresh failed: no OAuth token`:Claude Code 找不到保存的登录令牌来更新1172* `JWT refresh failed: no OAuth token`:Claude Code 找不到可用于续期的已保存登录令牌

1149* ` Signed out of Claude`:您在此机器上登出,例如在另一个终端中运行 `/logout`,因此 Claude Code 没有保存的登录来更新连接1173* `Signed out of Claude`:您在这台机器上退出了登录,例如在另一个终端中运行了 `/logout`,因此 Claude Code 已没有可用于续期连接的已保存登录

1150 1174 

1151**应该做什么:**1175**解决方法:**

1152 1176 

1153* 运行 `/login` 再次登录1177* 运行 `/login` 重新登录

1154* 运行 `/remote-control` 重新连接会话。以 `run /login to restore Remote Control` 结尾的消息不需要此步骤:Claude Code 在您登录后自动重新连接。1178* 运行 `/remote-control` 重新连接会话。以 `run /login to restore Remote Control` 结尾的消息不需要此步骤:您登录后 Claude Code 会自动重新连接。

1155 1179 

1156在 v2.1.224 之前,`OAuth token refresh failed — run /login to re-authenticate` 读作 `OAuth token refresh failed — re-authenticate, then re-enable Remote Control`,`JWT refresh failed: no OAuth token — run /login` 读作 `no OAuth token available for recovery (code <N>)`。` Claude.ai login expired`、`Claude.ai login was rejected` 和 `OAuth token unavailable` 消息在 v2.1.225 中添加。1180在 v2.1.224 之前,`OAuth token refresh failed — run /login to re-authenticate` 显示为 `OAuth token refresh failed — re-authenticate, then re-enable Remote Control`,`JWT refresh failed: no OAuth token — run /login` 显示为 `no OAuth token available for recovery (code <N>)`。`Claude.ai login expired`、`Claude.ai login was rejected` 和 `OAuth token unavailable` 消息是在 v2.1.225 中添加的。

1157 1181 

1158在 v2.1.238 之前,Claude Code 将现在说 `Signed out of Claude` 的情况报告为 `JWT refresh failed: no OAuth token — run /login`,并在一次登录刷新没有得到答复后立即停止 Remote Control,显示 `Claude.ai login expired — run /login to restore Remote Control`。1182在 v2.1.238 之前,Claude Code 将现在显示为 `Signed out of Claude` 的情况报告为 `JWT refresh failed: no OAuth token — run /login`,并且只要有一次登录刷新未得到响应,就会以 `Claude.ai login expired — run /login to restore Remote Control` 停止 Remote Control。

1159 1183 

1160<h3 id="remote-control-stopped-because-the-signed-in-account-changed">1184<h3 id="remote-control-stopped-because-the-signed-in-account-changed">

1161 Remote Control 停止,因为登录账户已更改1185 由于登录账户已更改,Remote Control 已停止

1162</h3>1186</h3>

1163 1187 

1164Claude Code 在 [Remote Control](/docs/zh-CN/remote-control) 会话期间显示此行,当您在此机器上登录到不同的 claude.ai 账户或组织时。您在 Claude Code 会话外进行了切换,例如在另一个终端中运行 `/login`。1188在 [Remote Control](/docs/zh-CN/remote-control) 会话期间,当您在这台机器上登录到另一个 claude.ai 账户或组织时,Claude Code 会显示这行消息。这种切换是在 Claude Code 会话之外进行的,例如在另一个终端中运行了 `/login`。

1165 1189 

1166您在通过 `/login` 登录时启动的 Remote Control 会话属于当时登录的 claude.ai 账户和组织。1190您在通过 `/login` 登录状态下启动的 Remote Control 会话,属于启动时所登录的 claude.ai 账户和组织。

1167 1191 

1168```text theme={null}1192```text theme={null}

1169Remote Control disconnected — signed-in claude.ai account or organization changed on this machine — run /remote-control to start a session for the current account, or /login to switch back, then /remote-control1193Remote Control disconnected — signed-in claude.ai account or organization changed on this machine — run /remote-control to start a session for the current account, or /login to switch back, then /remote-control

1170```1194```

1171 1195 

1172Claude Code 在 claude.ai 确认账户或组织已更改后立即停止 Remote Control 会话。您的本地会话继续运行而没有 Remote Control。1196一旦 claude.ai 确认账户或组织已更改,Claude Code 就会停止 Remote Control 会话。您的本地会话会在没有 Remote Control 的情况下继续运行。

1173 1197 

1174**应该做什么:**1198**解决方法:**

1175 1199 

1176* 运行 `/remote-control` 在当前账户或组织下启动新的 Remote Control 会话1200* 运行 `/remote-control`,在当前账户或组织下启动新的 Remote Control 会话

1177* 要切换回去,运行 `/login` 并再次登录到之前的账户或组织。然后运行 `/remote-control`。1201* 如需切换回去,请运行 `/login` 并重新登录之前的账户或组织,然后运行 `/remote-control`。

1178 1202 

1179在 v2.1.234 之前,Claude Code 在您在 Claude Code 会话外切换到不同账户或组织时没有注意到。Claude Code 保持 Remote Control 会话连接,直到稍后对 Remote Control 服务器的请求失败,显示 `Remote Control server rejected the request (HTTP 404)`。该故障可能在切换后数小时发生。1203在 v2.1.234 之前,当您在 Claude Code 会话之外切换到其他账户或组织时,Claude Code 不会察觉。Claude Code 会保持 Remote Control 会话连接,直到之后某个发往 Remote Control 服务器的请求以 `Remote Control server rejected the request (HTTP 404)` 失败。该失败可能在切换后数小时才出现。

1180 1204 

1181<h3 id="remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts">1205<h3 id="remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts">

1182 Remote Control 停止,因为运行会话的应用登出或切换了账户1206 由于运行会话的应用已退出登录或切换了账户,Remote Control 已停止

1183</h3>1207</h3>

1184 1208 

1185当 Claude 桌面应用或 IDE 托管您的会话时,Claude Code 从该应用而不是从 `/login` 获取其登录令牌。当 claude.ai 拒绝该令牌时,Claude Code 要求应用提供新令牌。如果应用回答说它已登出或现在登录到不同的 Claude 账户,Claude Code 结束 [Remote Control](/docs/zh-CN/remote-control) 会话并向应用发送以下行之一:1209当 Claude 桌面应用或 IDE 托管您的会话时,Claude Code 会从该应用而不是从 `/login` 获取登录令牌。当 claude.ai 拒绝该令牌时,Claude Code 会向应用请求新令牌。如果应用回复它已退出登录,或者现在登录的是另一个 Claude 账户,Claude Code 会结束 [Remote Control](/docs/zh-CN/remote-control) 会话,并向应用发送以下消息行之一:

1186 1210 

1187```text theme={null}1211```text theme={null}

1188Remote Control stopped — the app running this session is now signed in to a different Claude account1212Remote Control stopped — the app running this session is now signed in to a different Claude account

1189Remote Control stopped — the app running this session is signed out of Claude. Sign in there, then turn Remote Control back on1213Remote Control stopped — the app running this session is signed out of Claude. Sign in there, then turn Remote Control back on

1190```1214```

1191 1215 

1192您的本地会话继续运行而没有 Remote Control。1216您的本地会话会在没有 Remote Control 的情况下继续运行。

1193 1217 

1194**应该做什么:**1218**解决方法:**

1195 1219 

1196* 如果应用已登出,再次登录,然后在应用中重新打开 Remote Control1220* 如果应用已退出登录,请在应用中重新登录,然后在应用中重新打开 Remote Control

1197* 如果应用切换了账户,Claude Code 无法在新账户下继续已结束的会话。在该账户下启动新的 Remote Control 会话。1221* 如果应用切换了账户,Claude Code 无法在新账户下继续已结束的会话。请在该账户下启动新的 Remote Control 会话。

1198 1222 

1199在 v2.1.238 之前,Claude Code 在两种情况下都向应用发送了 [Remote Control 无法刷新您的登录](#remote-control-couldnt-refresh-your-login) 下列出的 `run /login` 消息。1223在 v2.1.238 之前,这两种情况下 Claude Code 都会向应用发送[Remote Control 无法刷新您的登录](#remote-control-couldnt-refresh-your-login)中列出的 `run /login` 消息。

1200 1224 

1201<h3 id="oauth-token-revoked-or-expired">1225<h3 id="oauth-token-revoked-or-expired">

1202 OAuth 令牌被撤销或过期1226 OAuth 令牌已撤销或已过期

1203</h3>1227</h3>

1204 1228 

1205您保存的登录不再有效。被撤销的令牌意味着您在任何地方登出或管理员删除了访问权限;过期的令牌意味着自动刷新在会话中失败。1229您已保存的登录不再有效。令牌被撤销意味着您在所有位置都退出了登录,或者管理员移除了访问权限;令牌过期意味着会话中途的自动刷新失败了。

1206 1230 

1207两条消息都报告 API 为 Claude Code 发送的请求返回的拒绝。当保存的登录在失败的刷新后已被清除时,您会看到 [登录过期](#login-expired)。如果您使用 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 中的长期令牌进行身份验证,当该令牌过期或被撤销时,您会看到相同的消息。1231这两条消息报告的都是 API 对 Claude Code 所发送请求返回的拒绝。如果已保存的登录在刷新失败后已被清除,您看到的将是[登录已过期](#login-expired)。如果您在 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 中使用长期令牌进行身份验证,当该令牌过期或被撤销时,您也会看到同样的消息。

1208 1232 

1209```text theme={null}1233```text theme={null}

1210OAuth token revoked · Please run /login1234OAuth token revoked · Please run /login

1211Please run /login · API Error: 401 OAuth token has expired ...1235Please run /login · API Error: 401 OAuth token has expired ...

1212```1236```

1213 1237 

1214**应该做什么:**1238在[非交互模式](/docs/zh-CN/headless)(`-p`)和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,消息如下,结构化错误代码为 `authentication_failed`:

1239 

1240```text theme={null}

1241Failed to authenticate: OAuth token revoked. Please log in again or contact your administrator.

1242Failed to authenticate. API Error: 401 OAuth token has expired ...

1243```

1215 1244 

1216* 运行 `/login` 再次登录1245在 v2.1.287 之前,非交互模式和 Agent SDK 中的撤销消息为 `Your account does not have access to Claude. Please login again or contact your administrator.`

1217* 如果您使用 `CLAUDE_CODE_OAUTH_TOKEN` 环境变量进行身份验证,Claude Code 在请求失败并显示 401 后会继续发送您设置的值,而不是切换到保存的登录的令牌。[`/status`](/docs/zh-CN/commands) 将此凭证显示为读取 `CLAUDE_CODE_OAUTH_TOKEN` 的 `Auth token` 行。使用 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 生成新令牌并使用它重新启动,或取消设置变量并运行 `/login`。在 v2.1.225 之前,Claude Code 可以在会话中用保存的登录的短期访问令牌替换变量的值,一旦该令牌过期,会话再次失败并显示 401 错误。1246 

1218* 对于跨启动的重复登录提示,请参阅 [故障排除](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired) 中的系统时钟检查和 macOS 凭证存储恢复步骤1247**解决方法:**

1219* 对于其他故障,包括 `403 Forbidden` 和 OAuth 浏览器问题,请参阅 [登录和身份验证](/docs/zh-CN/troubleshoot-install#login-and-authentication)1248 

1249* 在 Claude Code 提示符下运行 `/login` 重新登录

1250* 如果您的 `-p` 命令或 Agent SDK 程序使用已保存的登录,请在同一环境中运行 `claude`,完成 `/login`,然后再次运行该命令或程序。对于无法交互式登录的自动化场景,请使用 [`ANTHROPIC_API_KEY`](/docs/zh-CN/env-vars) 进行身份验证,或[使用 `claude setup-token` 生成长期令牌](/docs/zh-CN/authentication#generate-a-long-lived-token)。

1251* 如果您使用 `CLAUDE_CODE_OAUTH_TOKEN` 环境变量进行身份验证,在请求以 401 失败后,Claude Code 会继续发送您设置的值,而不会切换到已存储登录的令牌。[`/status`](/docs/zh-CN/commands) 会将此凭据显示为一个 `Auth token` 行,内容为 `CLAUDE_CODE_OAUTH_TOKEN`。请使用 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 生成新令牌并用它重启,或取消设置该变量并运行 `/login`。在 v2.1.225 之前,Claude Code 可能会在会话中途用已存储登录的短期访问令牌替换该变量的值,一旦该令牌过期,会话就会再次因 401 错误而失败。

1252* 如果每次启动都反复提示您登录,请参阅[故障排除](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired)中的系统时钟检查和 macOS 凭据存储恢复步骤

1253* 对于其他失败,包括 `403 Forbidden` 和 OAuth 浏览器问题,请参阅[登录和身份验证](/docs/zh-CN/troubleshoot-install#login-and-authentication)

1220 1254 

1221<h3 id="api-error-401-invalid-authentication-credentials">1255<h3 id="api-error-401-invalid-authentication-credentials">

1222 API 错误:401 无效的身份验证凭证1256 API Error: 401 Invalid authentication credentials

1223</h3>1257</h3>

1224 1258 

1225API 识别了您凭证的格式,但拒绝了其背后的账户或组织。当凭证最近被撤销、组织被禁用或删除了您的访问权限或账户本身被停用时,Anthropic 返回此消息,因此过期的令牌不是原因。凭证可以是您保存的登录或批准的 `ANTHROPIC_API_KEY`,修复方式不同,因此首先运行 `/status` 查看哪个处于活跃状态。1259API 识别了您凭据的格式,但拒绝了其背后的账户或组织。当凭据最近被撤销、组织被停用或移除了您的访问权限,或账户本身被停用时,Anthropic 会返回此消息,因此原因并不是令牌过期。该凭据可能是您已保存的登录,也可能是已批准的 `ANTHROPIC_API_KEY`,两者的修复方法不同,因此请先运行 `/status` 查看当前生效的是哪一个。

1226 1260 

1227```text theme={null}1261```text theme={null}

1228Please run /login · API Error: 401 Invalid authentication credentials1262Please run /login · API Error: 401 Invalid authentication credentials

1229```1263```

1230 1264 

1231**应该做什么:**1265**解决方法:**

1232 1266 

1233* 如果 `/status` 显示未标记为未使用的 `API key` 行,则批准的 [`ANTHROPIC_API_KEY`](/docs/zh-CN/authentication#authentication-precedence) 是活跃凭证并优先于您的登录,因此 `/login` 不会替换它。在 Claude Console 中轮换密钥,或通过运行 `unset ANTHROPIC_API_KEY` 回退到您的订阅,或在 PowerShell 中运行 `Remove-Item Env:ANTHROPIC_API_KEY`。1267* 如果 `/status` 显示一个未标记为未使用的 `API key` 行,说明已批准的 [`ANTHROPIC_API_KEY`](/docs/zh-CN/authentication#authentication-precedence) 是当前生效的凭据,并且优先于您的登录,因此 `/login` 不会替换它。请在 Claude Console 中轮换该密钥,或通过运行 `unset ANTHROPIC_API_KEY`(在 PowerShell 中为 `Remove-Item Env:ANTHROPIC_API_KEY`)回退到您的订阅。

1234* 如果 `/status` 仅显示您的登录,运行 `/login` 一次。如果凭证被撤销,新登录会替换它。1268* 如果 `/status` 只显示您的登录,请运行一次 `/login`。如果凭据已被撤销,新的登录会替换它。

1235* 如果相同的消息对相同的登录账户返回,则该账户或组织不再活跃。检查 `/status` 报告的账户和组织,并要求您的组织管理员恢复访问。1269* 如果同一登录账户再次出现相同消息,说明该账户或组织已不再活跃。请检查 `/status` 报告的账户和组织,并请您的组织管理员恢复访问权限。

1236* 如果 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 [LLM 网关](/docs/zh-CN/llm-gateway),`401` 之后的文本是您网关的消息而不是 Anthropic 的,`/login` 不会改变它。改为修复您的网关期望的凭证。1270* 如果 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 [LLM 网关](/docs/zh-CN/llm-gateway),`401` 之后的文本是您网关的消息而不是 Anthropic 的消息,`/login` 不会改变它。请改为修正网关所需的凭据。

1237 1271 

1238<h3 id="login-expired">1272<h3 id="login-expired">

1239 登录过期1273 登录已过期

1240</h3>1274</h3>

1241 1275 

1242Claude Code 尝试更新您保存的 claude.ai 登录,OAuth 服务拒绝了存储的刷新令牌,因此 Claude Code 清除了保存的凭证。之后,每个模型请求在到达 API 之前都会在本地停止,显示此消息,因为只有 `/login` 可以创建新凭证。1276Claude Code 尝试续期您已保存的 claude.ai 登录,但 OAuth 服务拒绝了已存储的刷新令牌,因此 Claude Code 清除了已保存的凭据。此后,每个模型请求都会在到达 API 之前于本地以此消息停止,因为只有 `/login` 才能创建新凭据。

1243 1277 

1244在 v2.1.206 之前,Claude Code 无论如何都会发送模型请求,使用环境中剩余的任何凭证,每个模型都会失败,显示 [所选模型有问题](#theres-an-issue-with-the-selected-model) 或 401,而不是登录提示。1278在 v2.1.206 之前,Claude Code 仍会使用环境中剩余的任何凭据发送模型请求,然后每个模型都会以[所选模型存在问题](#theres-an-issue-with-the-selected-model)或 401 失败,而不是提示您登录。

1245 1279 

1246```text theme={null}1280```text theme={null}

1247Login expired · Please run /login1281Login expired · Please run /login

1248```1282```

1249 1283 

1250在 [非交互式模式](/docs/zh-CN/headless) (`-p`) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,消息如下所示,结构化错误代码为 `authentication_failed`:1284在[非交互模式](/docs/zh-CN/headless)(`-p`)和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,消息如下,结构化错误代码为 `authentication_failed`:

1251 1285 

1252```text theme={null}1286```text theme={null}

1253Failed to authenticate: OAuth session expired and could not be refreshed1287Failed to authenticate: OAuth session expired and could not be refreshed

1254```1288```

1255 1289 

1256这与 [OAuth 令牌被撤销或过期](#oauth-token-revoked-or-expired) 的状态不同。这些消息报告 API 返回的拒绝。Claude Code 本身为已失败更新的登录生成 `Login expired`,因此它不发送请求。当更新失败是因为账户本身被暂停而不是登录过时时,Claude Code 改为显示 [您的账户被冻结](#your-account-is-on-hold)。1290这与 [OAuth 令牌已撤销或已过期](#oauth-token-revoked-or-expired)并非同一状态。那些消息报告的是 API 返回的拒绝。而 `Login expired` 是 Claude Code 针对已续期失败的登录自行生成的,因此它不会发送任何请求。当续期失败是因为账户本身被暂停而不是登录过时,Claude Code 会改为显示[您的账户已被暂停](#your-account-is-on-hold)。

1257 1291 

1258使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用保存的登录,永远不会看到此消息。1292使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用已保存的登录,永远不会看到此消息。

1259 1293 

1260您可以在请求失败之前检查此状态:[`/status`](/docs/zh-CN/commands) 显示读取 `Expired — log in again` 的 `Login` 行,加上它为过期登录保存的组织和电子邮件。该行仅在保存的登录是您的活跃凭证且无法再刷新时出现。以其他方式进行身份验证的会话不显示该行,即使过期的登录仍然保存。在 v2.1.210 之前,`/status` 在此状态下没有指示登录曾经存在过,因为清除的凭证使其无法报告。1294您可以在请求失败之前检查是否处于此状态:[`/status`](/docs/zh-CN/commands) 会显示一个 `Login` 行,内容为 `Expired — log in again`,以及它为该过期登录保存的组织和电子邮件。只有当已保存的登录是您当前生效的凭据且无法再刷新时,才会显示该行。以其他方式进行身份验证的会话不会显示该行,即使仍保存着已过期的登录。在 v2.1.210 之前,`/status` 在此状态下不会提供任何曾存在登录的迹象,因为凭据已被清除,没有可报告的内容。

1261 1295 

1262**应该做什么:**1296**解决方法:**

1263 1297 

1264* 运行 `/login` 再次登录。在不登录的情况下重试会在每个请求上显示相同的消息。1298* 运行 `/login` 重新登录。不登录而直接重试,每个请求都会显示相同的消息。

1265* 在非交互式模式中,在同一环境中运行 `claude`,完成 `/login`,然后重新运行您的命令。对于无法交互式登录的自动化,使用 `ANTHROPIC_API_KEY` 进行身份验证或 [使用 `claude setup-token` 生成长期令牌](/docs/zh-CN/authentication#generate-a-long-lived-token)。1299* 如果您在另一个 Claude Code 窗口中使用 claude.ai 账户登录,请参阅[未登录](#not-logged-in),了解此会话何时会自动开始使用该登录。

1266* 如果登录持续失败,请参阅 [登录和身份验证](/docs/zh-CN/troubleshoot-install#login-and-authentication)1300* 在非交互模式下,请在同一环境中运行 `claude`,完成 `/login`,然后重新运行您的命令。对于无法交互式登录的自动化场景,请使用 `ANTHROPIC_API_KEY` 进行身份验证,或[使用 `claude setup-token` 生成长期令牌](/docs/zh-CN/authentication#generate-a-long-lived-token)。

1301* 如果登录一直失败,请参阅[登录和身份验证](/docs/zh-CN/troubleshoot-install#login-and-authentication)

1267 1302 

1268<h3 id="could-not-refresh-your-login">1303<h3 id="could-not-refresh-your-login">

1269 无法刷新您的登录,因为另一个 Claude Code 进程正在刷新它1304 由于另一个 Claude Code 进程正在刷新您的登录,无法刷新

1270</h3>1305</h3>

1271 1306 

1272此消息不意味着您的登录被拒绝。您保存的 claude.ai 登录已过期,需要更新。另一个 Claude Code 进程在同一机器上持有共享刷新锁,或退出并留下它,刷新在此会话等待时没有进展。Claude Code 在发送前停止请求:1307此消息并不表示您的登录被拒绝。您已保存的 claude.ai 登录已过期,需要续期。同一台机器上的另一个 Claude Code 进程持有共享的刷新锁,或者该进程已退出但遗留了该锁,在此会话等待期间刷新没有任何进展。Claude Code 会在发送前停止请求:

1273 1308 

1274```text theme={null}1309```text theme={null}

1275Could not refresh your login because another Claude Code process is refreshing it (or exited mid-refresh) · Try again in a minute; if it keeps happening, close other Claude Code windows or sign in again with /login1310Could not refresh your login because another Claude Code process is refreshing it (or exited mid-refresh) · Try again in a minute; if it keeps happening, close other Claude Code windows or sign in again with /login

1276```1311```

1277 1312 

1278在 [非交互式模式](/docs/zh-CN/headless) (`-p`) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,消息如下所示,结构化错误代码为 `server_error`:1313在[非交互模式](/docs/zh-CN/headless)(`-p`)和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,消息如下,结构化错误代码为 `server_error`:

1279 1314 

1280```text theme={null}1315```text theme={null}

1281Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh. This is usually transient; retry in a minute, and if it persists close other Claude Code processes or sign in again1316Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh. This is usually transient; retry in a minute, and if it persists close other Claude Code processes or sign in again

1282```1317```

1283 1318 

1284使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用保存的登录,永远不会看到此消息。1319使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用已保存的登录,永远不会看到此消息。

1285 1320 

1286**应该做什么:**1321**解决方法:**

1287 1322 

1288* 一分钟后重试。如果另一个进程首先完成刷新,此会话使用更新的登录。1323* 一分钟后重试。如果另一个进程先完成了刷新,此会话会使用续期后的登录。

1289* 如果消息持续返回,关闭其他 Claude Code 窗口和进程,然后重试。1324* 如果消息反复出现,请关闭其他 Claude Code 窗口和进程,然后重试。

1290* 如果在没有其他 Claude Code 进程运行的情况下返回,运行 `/login`。再次登录不会等待刷新锁。1325* 如果在没有其他 Claude Code 进程运行的情况下仍出现该消息,请运行 `/login`。重新登录不会等待刷新锁。

1291 1326 

1292<h3 id="couldnt-save-your-login">1327<h3 id="couldnt-save-your-login">

1293 无法保存您的登录1328 无法保存您的登录

1294</h3>1329</h3>

1295 1330 

1296您使用 claude.ai 登录,但 Claude Code 无法将登录保存到其凭证存储,因此登录未完成。在 macOS 上,当登录钥匙链锁定时(例如在睡眠或空闲时),在 Claude Code 已在同一会话中读取或保存凭证之后,可能会发生这种情况。1331您已使用 claude.ai 登录,但 Claude Code 无法将登录保存到其凭据存储中,因此登录未完成。在 macOS 上,如果 Claude Code 在同一会话中已经读取或保存过登录钥匙串中的凭据,之后钥匙串被锁定(例如在睡眠或空闲时),就可能发生这种情况。

1297 1332 

1298```text theme={null}1333```text theme={null}

1299Couldn't save your login. If your Mac's keychain is locked, unlock it and log in again.1334Couldn't save your login. If your Mac's keychain is locked, unlock it and log in again.

1300Couldn't save your login. Try logging in again.1335Couldn't save your login. Try logging in again.

1301```1336```

1302 1337 

1303第一种形式出现在 macOS 上,第二种形式出现在其他地方。临时凭证存储故障(例如超时或不可读的存储)会产生相同的消息。1338第一种形式出现在 macOS 上,第二种形式出现在其他所有平台上。暂时性的凭据存储失败(例如超时或存储无法读取)也会产生同样的消息。

1304 1339 

1305**应该做什么:**1340**解决方法:**

1306 1341 

1307* 在 macOS 上,解锁登录钥匙链,然后再次运行 `/login`1342* 在 macOS 上,解锁登录钥匙串,然后再次运行 `/login`

1308* 在其他平台上,再次运行 `/login`1343* 在其他平台上,再次运行 `/login`

1309* 如果登录仍然不保存,请参阅 [未登录或令牌过期](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired) 了解钥匙链解锁命令和其他凭证存储恢复步骤1344* 如果登录仍然无法保存,请参阅[未登录或令牌已过期](/docs/zh-CN/troubleshoot-install#not-logged-in-or-token-expired),了解钥匙串解锁命令和其他凭据存储恢复步骤

1310 1345 

1311<h3 id="failed-to-start-oauth-callback-server">1346<h3 id="failed-to-start-oauth-callback-server">

1312 Failed to start OAuth callback server1347 无法启动 OAuth 回调服务器

1313</h3>1348</h3>

1314 1349 

1315当 `/login`、`claude auth login` 或 `claude setup-token` 通过浏览器登录您时,Claude Code 在 `127.0.0.1` 上打开一个监听端口,以便您的浏览器可以将登录结果返回给它。此消息意味着 Claude Code 无法打开该端口,登录在浏览器窗口或登录 URL 出现之前停止:1350当 `/login`、`claude auth login` 或 `claude setup-token` 通过浏览器为您登录时,Claude Code 会在 `127.0.0.1` 上打开一个监听端口,以便浏览器将登录结果返回给它。此消息表示 Claude Code 无法打开该端口,登录会在浏览器窗口或登录 URL 出现之前停止:

1316 1351 

1317```text theme={null}1352```text theme={null}

1318Failed to start OAuth callback server: Failed to start server. Is port 0 in use?1353Failed to start OAuth callback server: Failed to start server. Is port 0 in use?

1319```1354```

1320 1355 

1321如果您的消息以 `Is port 0 in use?` 结尾,尝试在 IPv4 环回地址 `127.0.0.1` 上监听的尝试完全失败。因为故障发生在登录 URL 存在之前,`Paste code here if prompted` 流不可用作解决方法。1356如果您的消息以 `Is port 0 in use?` 结尾,说明在 IPv4 回环地址 `127.0.0.1` 上监听的尝试直接失败了。由于失败发生在登录 URL 生成之前,`Paste code here if prompted` 流程无法作为变通方案使用。

1322 1357 

1323**应该做什么:**1358**解决方法:**

1324 1359 

1325* 要立即登录而不需要本地监听器:如果您使用 claude.ai 订阅,在登录有效的机器上运行 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 并将其打印的令牌设置为此机器上的 `CLAUDE_CODE_OAUTH_TOKEN`。否则将 `ANTHROPIC_API_KEY` 设置为来自 [Claude Console](https://platform.claude.com/settings/keys) 的密钥。[身份验证优先级](/docs/zh-CN/authentication#authentication-precedence) 解释了 Claude Code 在存在多个凭证时如何选择。1360* 如需不使用本地监听器立即登录:如果您使用 claude.ai 订阅,请在可以正常登录的机器上运行 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token),并在这台机器上将它输出的令牌设置为 `CLAUDE_CODE_OAUTH_TOKEN`。否则,请将 `ANTHROPIC_API_KEY` 设置为来自 [Claude Console](https://platform.claude.com/settings/keys) 的密钥。[身份验证优先级](/docs/zh-CN/authentication#authentication-precedence)解释了 Claude Code 如何在多个凭据之间进行选择。

1326* 要在此机器上改用浏览器登录,Claude Code 必须能够在 `127.0.0.1` 上监听。如果它在沙箱内运行,检查沙箱的策略是否允许在本地端口上监听,然后再次运行 `/login`。如果它应该能够但仍然失败,运行 `/feedback` 以便报告包含您的环境详细信息。1361* 如果要改为在这台机器上使用浏览器登录,Claude Code 必须能够在 `127.0.0.1` 上监听。如果它在沙箱中运行,请检查沙箱策略是否允许监听本地端口,然后再次运行 `/login`。如果它本应能够监听却仍然失败,请运行 `/feedback`,以便报告中包含您的环境详细信息。

1327 1362 

1328<h3 id="claude-login-not-accepted">1363<h3 id="claude-login-not-accepted">

1329 Claude login not accepted1364 Claude 登录未被接受

1330</h3>1365</h3>

1331 1366 

1332您尝试启动 [云会话](/docs/zh-CN/claude-code-on-the-web),服务器拒绝使用 401 创建它:它不接受此机器发送的 Claude 登录,通常是因为登录过期或被撤销。1367您尝试启动一个[云端会话](/docs/zh-CN/claude-code-on-the-web),服务器以 401 拒绝创建它:服务器不接受这台机器发送的 Claude 登录,通常是因为该登录已过期或被撤销。

1333 1368 

1334当服务器给出自己的原因时,行的第一部分是该原因。否则该行读作:1369如果服务器给出了原因,该行的第一部分就是服务器自己的原因。否则,该行显示为:

1335 1370 

1336```text theme={null}1371```text theme={null}

1337Claude login not accepted · Run /login, then try again1372Claude login not accepted · Run /login, then try again

1338```1373```

1339 1374 

1340**应该做什么:**1375**解决方法:**

1341 1376 

1342* 运行 `/login`,完成登录,然后再次启动会话1377* 运行 `/login`,完成登录,然后再次启动会话

1343 1378 

1344<h3 id="artifacts-need-a-claude-ai-login">1379<h3 id="artifacts-need-a-claude-ai-login">

1345 工件需要 claude.ai 登录1380 Artifact 需要 claude.ai 登录

1346</h3>1381</h3>

1347 1382 

1348Claude Code 拒绝了 [工件](/docs/zh-CN/artifacts) 发布或读取,因为会话没有可用于工件的 claude.ai 登录。1383Claude Code 拒绝了 [Artifact](/docs/zh-CN/artifacts) 的发布或读取,因为该会话没有可用于 Artifact 的 claude.ai 登录。

1349 1384 

1350消息的每种形式都以相同的词开头,然后是取决于您的会话如何进行身份验证的补救措施。没有竞争凭证时,它读作:1385该消息的每种形式都以相同的文字开头,后面跟着的补救措施取决于您的会话如何进行身份验证。没有竞争凭据时,消息显示为:

1351 1386 

1352```text theme={null}1387```text theme={null}

1353Artifacts need a claude.ai login. Run /login and select "Claude account with subscription", then retry — the "Anthropic Console account" option does not provide claude.ai credentials.1388Artifacts need a claude.ai login. Run /login and select "Claude account with subscription", then retry — the "Anthropic Console account" option does not provide claude.ai credentials.

1354```1389```

1355 1390 

1356**应该做什么:**1391**解决方法:**

1357 1392 

1358* 运行 `/login` 并选择 **Claude account with subscription**。**Anthropic Console account** 选项不提供 claude.ai 凭证。1393* 运行 `/login` 并选择 **Claude account with subscription**。**Anthropic Console account** 选项不提供 claude.ai 凭据。

1359* 当消息命名优先的凭证(如 `ANTHROPIC_API_KEY`、`apiKeyHelper` 设置或之前 `/login` 保存的 Console 密钥)时,按消息说的方式删除它,然后运行 `/login`1394* 当消息指出某个优先级更高的凭据时,例如 `ANTHROPIC_API_KEY`、`apiKeyHelper` 设置或之前的 `/login` 保存的 Console 密钥,请按消息所述将其移除,然后运行 `/login`

1360* 当消息说此远程会话通过启动它的机器进行身份验证时,在该机器上登录到 claude.ai,然后重新连接会话1395* 当消息说明此远程会话通过启动它的机器进行身份验证时,请在那台机器上登录 claude.ai,然后重新连接会话

1361* 当消息说凭证由会话的主机环境注入时,您无法在该会话中更改它;启动登录到 claude.ai 的会话1396* 当消息说明凭据由会话的宿主环境注入时,您无法在该会话中更改它;请启动一个已登录 claude.ai 的会话

1362* 请参阅 [可用性](/docs/zh-CN/artifacts#availability) 了解工件具有的其他要求,例如计划、模型提供商和组织策略1397* 请参阅[可用性](/docs/zh-CN/artifacts#availability),了解 Artifact 的其他要求,例如套餐、模型提供商和组织策略

1363 1398 

1364<h3 id="administrator-policy-requires-a-cloud-gateway-sign-in">1399<h3 id="administrator-policy-requires-a-cloud-gateway-sign-in">

1365 管理员策略需要 Cloud gateway 登录1400 管理员策略要求使用云网关登录

1366</h3>1401</h3>

1367 1402 

1368管理员在此机器上的 [托管设置](/docs/zh-CN/managed-settings) 将 [`forceLoginMethod`](/docs/zh-CN/settings-reference#forceloginmethod) 设置为 `"gateway"` 或设置 [`forceLoginGatewayUrl`](/docs/zh-CN/settings-reference#forcelogingatewayurl)。除非您通过 `CLAUDE_CODE_USE_BEDROCK` 等变量选择云提供商,Claude Code 仅接受 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录。您会看到两条消息之一:1403这台机器上管理员的[托管设置](/docs/zh-CN/managed-settings)将 [`forceLoginMethod`](/docs/zh-CN/settings-reference#forceloginmethod) 设置为 `"gateway"`,或设置了 [`forceLoginGatewayUrl`](/docs/zh-CN/settings-reference#forcelogingatewayurl)。除非您通过 `CLAUDE_CODE_USE_BEDROCK` 等变量选择了云服务提供商,否则 Claude Code 只接受 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录。您会看到以下两种消息之一:

1369 1404 

1370```text theme={null}1405```text theme={null}

1371Not signed in to the Cloud gateway — run /login.1406Not signed in to the Cloud gateway — run /login.

1372```1407```

1373 1408 

1374当会话没有网关登录时,模型请求失败,显示此消息,例如因为您自策略到达机器后未运行 `/login`。1409当会话没有网关登录时,模型请求会以此消息失败,例如因为在该策略下发到这台机器后您还没有运行过 `/login`。

1410 

1411如果这台机器上还存在 Anthropic 签发的凭据,并且托管设置设置了 `forceLoginMethod` 或 `forceLoginOrgUUID`,Claude Code 则会在启动时退出。该凭据可能是 `ANTHROPIC_API_KEY` 或 `ANTHROPIC_AUTH_TOKEN` 变量、`apiKeyHelper` 设置,或之前的 Claude Console 登录保存的 API 密钥。

1375 1412 

1376如果机器还持有 Anthropic 颁发的凭证且托管设置设置了 `forceLoginMethod` 或 `forceLoginOrgUUID`,Claude Code 在启动时改为以此消息退出:1413启动消息会指出会话所配置的凭据、它的设置位置以及移除它的步骤。例如,当您在 shell 中设置了 `ANTHROPIC_API_KEY` 变量时,消息显示为:

1377 1414 

1378```text theme={null}1415```text theme={null}

1379Administrator policy requires a Cloud gateway sign-in on this machine; the1416Administrator policy requires a Cloud gateway sign-in on this machine, but this session is configured with an API key from ANTHROPIC_API_KEY, which a gateway machine does not accept.

1380Anthropic-issued credential configured here (ANTHROPIC_API_KEY,1417 

1381ANTHROPIC_AUTH_TOKEN, or apiKeyHelper) is not used.1418To continue: unset ANTHROPIC_API_KEY (or run in a shell without it), then run claude and sign in with /login.

1382```1419```

1383 1420 

1384**应该做什么:**1421**解决方法:**

1422 

1423* 对于 `Not signed in to the Cloud gateway`,请运行 `/login` 并在 **Cloud gateway** 界面上完成登录

1424* 对于启动消息,请按照消息末尾的步骤移除该凭据

1425* 如果您认为这台机器不应要求使用网关,请让管理该机器的管理员从其托管设置中移除 `forceLoginMethod` 和 `forceLoginGatewayUrl`

1385 1426 

1386* 运行 `/login` 并在 **Cloud gateway** 屏幕上完成登录1427在 v2.1.284 之前,启动消息会列出可能的凭据,而不是指出已配置的那一个。它以 `Administrator policy requires a Cloud gateway sign-in on this machine; the Anthropic-issued credential configured here (ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, or apiKeyHelper) is not used.` 开头。如果您看到的是这种措辞且无法判断要移除哪个凭据,请更新到 v2.1.284 或更高版本,然后再次启动 `claude`。

1387* 对于启动消息,删除您配置的 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 设置。要删除保存的 Console API 密钥,运行 `claude auth logout`,这也会删除保存的 claude.ai 登录。如果您使用 `CLAUDE_CODE_USE_*` 选择云提供商,会话然后以无登录启动。否则启动 `claude` 并运行 `/login`

1388* 如果您认为机器不应该需要网关,请要求管理该机器的管理员从其托管设置中删除 `forceLoginMethod` 和 `forceLoginGatewayUrl`

1389 1428 

1390在 v2.1.265 上,回归也在某些 LLM 网关和代理配置中显示第一条消息,这些配置使用 API 密钥、`apiKeyHelper` 或自定义标头进行身份验证,即使机器上没有管理员要求。更新到 v2.1.266 或更高版本。您不需要更改您的配置。1429在 v2.1.265 上,一个回归问题还会在某些使用 API 密钥、`apiKeyHelper` 或自定义标头进行身份验证的 LLM 网关和代理配置中显示第一条消息,即使机器上没有管理员要求也是如此。请更新到 v2.1.266 或更高版本。您无需更改配置。

1391 1430 

1392在 v2.1.261 之前,在将 `forceLoginMethod` 设置为 `"gateway"` 的机器上,Claude Code 使用剩余的保存登录而不是失败模型请求,并使用 `This machine's managed settings require a first-party login` 而不是启动消息报告配置的环境凭证。在 v2.1.265 之前,其托管设置仅设置 `forceLoginGatewayUrl` 的机器不需要网关登录,Claude Code 在那里使用剩余凭证。1431在 v2.1.261 之前,在将 `forceLoginMethod` 设置为 `"gateway"` 的机器上,Claude Code 会使用遗留的已保存登录,而不是让模型请求失败,并且会以 `This machine's managed settings require a first-party login` 报告已配置的环境凭据,而不是显示启动消息。

1393 1432 

1394<h3 id="your-account-is-on-hold">1433<h3 id="your-account-is-on-hold">

1395 您的账户被冻结1434 您的账户已被暂停

1396</h3>1435</h3>

1397 1436 

1398您的 Claude 账户背后的登录已被暂停。Claude Code 在尝试更新您保存的登录并了解冻结时显示第一条消息,在您在浏览器中完成的登录报告时显示第二条消息:1437您登录所用的 Claude 账户已被暂停。当 Claude Code 尝试续期您已保存的登录并获知暂停时,会显示第一条消息;当您在浏览器中完成的登录报告暂停时,会显示第二条消息:

1399 1438 

1400```text theme={null}1439```text theme={null}

1401Your account is on hold and can't use Claude Code. View details or appeal: https://claude.ai/restricted1440Your account is on hold and can't use Claude Code. View details or appeal: https://claude.ai/restricted

1402Your account is on hold and can't sign in to Claude Code. View details or appeal: https://claude.ai/restricted1441Your account is on hold and can't sign in to Claude Code. View details or appeal: https://claude.ai/restricted

1403```1442```

1404 1443 

1405使用同一账户再次登录不会清除消息,因为冻结是在账户上而不是登录上。在 [非交互式模式](/docs/zh-CN/headless) (`-p`) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,结构化错误代码为 `account_on_hold`。在 v2.1.235 之前,Claude Code 将被冻结的账户报告为 [登录过期 · 请运行 /login](#login-expired),其恢复步骤无法清除冻结。1444使用同一账户重新登录不会清除该消息,因为暂停针对的是账户而不是登录。在[非交互模式](/docs/zh-CN/headless)(`-p`)和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,结构化错误代码为 `account_on_hold`。在 v2.1.235 之前,Claude Code 会将被暂停的账户报告为 [Login expired · Please run /login](#login-expired),而其恢复步骤无法解除暂停。

1406 1445 

1407**应该做什么:**1446**解决方法:**

1408 1447 

1409* 打开消息中的链接以查看冻结的详细信息或对其提出上诉1448* 打开消息中的链接,查看暂停的详细信息或提出申诉

1410* 如果您有另一个 Claude 账户或不受冻结影响的 API 密钥,您可以在冻结解决期间继续工作:使用该账户运行 `/login`,或使用 `ANTHROPIC_API_KEY` 设置密钥1449* 如果您有不受暂停影响的其他 Claude 账户或 API 密钥,可以在暂停解决期间继续工作:使用该账户运行 `/login`,或通过 `ANTHROPIC_API_KEY` 设置该密钥

1411 1450 

1412<h3 id="anthropic-profile-login-expired">1451<h3 id="anthropic-profile-login-expired">

1413 Anthropic 配置文件登录过期1452 Anthropic 配置文件登录已过期

1414</h3>1453</h3>

1415 1454 

1416Claude Code 通过 Anthropic 凭证配置文件进行身份验证,其保存的登录凭证已过期,且配置文件不包含 Claude Code 可用于更新它的刷新凭证。Claude Code 在本地停止每个请求而不重试,因为重试会读取相同的过期凭证。1455Claude Code 正在通过一个 Anthropic 凭据配置文件进行身份验证,该配置文件中已保存的登录凭据已过期,并且配置文件中没有 Claude Code 可用于续期的刷新凭据。Claude Code 会在本地停止每个请求且不重试,因为重试只会读取同一个已过期的凭据。

1417 1456 

1418```text theme={null}1457```text theme={null}

1419Anthropic profile login expired · Re-authenticate your Anthropic profile1458Anthropic profile login expired · Re-authenticate your Anthropic profile

1420Anthropic profile login expired · Run /login to use your claude.ai account instead, or re-authenticate the profile1459Anthropic profile login expired · Run /login to use your claude.ai account instead, or re-authenticate the profile

1421```1460```

1422 1461 

1423这仅在活跃凭证来自 Anthropic 凭证配置文件时出现,您使用 `ANTHROPIC_PROFILE` 环境变量选择该文件,Claude Code 从您的 Anthropic 配置目录中发现为活跃配置文件,或 Claude Code 在您 [不使用 API 密钥登录](/docs/zh-CN/authentication#sign-in-without-an-api-key) 时写入。使用 `/login` 的 claude.ai 选项、API 密钥、持有者令牌(如 `ANTHROPIC_AUTH_TOKEN`)或第三方提供商进行身份验证的会话永远不会看到此消息。1462只有当生效的凭据来自 Anthropic 凭据配置文件时才会出现此消息,该配置文件可以是您通过 `ANTHROPIC_PROFILE` 环境变量选择的、Claude Code 在您的 Anthropic 配置目录中发现为活跃配置文件的,或是您[在没有 API 密钥的情况下登录](/docs/zh-CN/authentication#sign-in-without-an-api-key)时 Claude Code 写入的。使用 API 密钥、bearer 令牌(例如 `ANTHROPIC_AUTH_TOKEN`)或第三方提供商进行身份验证的会话永远不会看到此消息。

1424 1463 

1425在 [提供无密钥登录](/docs/zh-CN/authentication#sign-in-without-an-api-key) 的机器上,运行 `/login`,选择 Anthropic Console 账户,并再次登录以更新无密钥 Console 登录或 Claude Platform CLI 的 `ant auth login` 写入的配置文件。Claude Code 替换该配置文件中的过期凭证。对于联合配置文件或另一个工具创建的配置文件,`/login` 不会更新凭证。您看到的形式取决于您是否显式选择了配置文件或 Claude Code 发现了它:1464在[提供无密钥登录](/docs/zh-CN/authentication#sign-in-without-an-api-key)的机器上,运行 `/login`,选择 Anthropic Console 账户并重新登录,即可续期由无密钥 Console 登录或 Claude Platform CLI 的 `ant auth login` 写入的配置文件。Claude Code 会替换该配置文件中已过期的凭据。对于联合身份配置文件或由其他工具创建的配置文件,`/login` 不会续期凭据。您看到哪种形式,取决于配置文件是您选择的还是 Claude Code 发现的:

1426 1465 

1427* 当您显式设置 `ANTHROPIC_PROFILE` 时,消息以 `Re-authenticate your Anthropic profile` 结尾。1466* 当您显式设置了 `ANTHROPIC_PROFILE` 时,消息以 `Re-authenticate your Anthropic profile` 结尾。

1428* 当 Claude Code 从您的配置目录发现配置文件时,消息提供 `/login`,因为 Claude Code 给予工作的 `/login` 优先于发现的配置文件,然后改为使用您的 claude.ai 或 Console 账户进行身份验证。在 v2.1.234 之前,Claude Code 在这种情况下也显示 `Re-authenticate your Anthropic profile` 形式。1467* 当 Claude Code 从您的配置目录中发现该配置文件时,消息会提供 `/login` 选项,因为 Claude Code 让可用的 `/login` 优先于所发现的配置文件,然后改用您的 claude.ai 或 Console 账户进行身份验证。在 v2.1.234 之前,这种情况下 Claude Code 也会显示 `Re-authenticate your Anthropic profile` 形式。

1429 1468 

1430**应该做什么:**1469**解决方法:**

1431 1470 

1432* 再次登录到配置文件,然后重试:在 [提供无密钥登录](/docs/zh-CN/authentication#sign-in-without-an-api-key) 的机器上,运行 `/login` 并为无密钥 Console 登录或 Claude Platform CLI 的 `ant auth login` 写入的配置文件选择 Anthropic Console 账户;对于其他配置文件,使用创建它们的工具1471* 重新登录该配置文件,然后重试:在[提供无密钥登录](/docs/zh-CN/authentication#sign-in-without-an-api-key)的机器上,对于由无密钥 Console 登录或 Claude Platform CLI 的 `ant auth login` 写入的配置文件,运行 `/login` 并选择 Anthropic Console 账户;对于其他配置文件,请使用创建它们的工具

1433* 如果管理员配置了配置文件的凭证,请要求他们颁发新凭证1472* 如果该配置文件的凭据由管理员预配,请让他们签发一个新的凭据

1434* 运行 `/status` 以确认活跃凭证源和配置文件名称1473* 运行 `/status`,确认当前生效的凭据来源和配置文件名称

1435* 要停止使用配置文件,如果您设置了 `ANTHROPIC_PROFILE`,则取消设置它,然后以其他方式进行身份验证,例如 `/login` 或 `ANTHROPIC_API_KEY`1474* 如需停止使用该配置文件,请取消设置 `ANTHROPIC_PROFILE`(如果您设置过),然后以其他方式进行身份验证,例如 `/login` 或 `ANTHROPIC_API_KEY`

1436 1475 

1437<h3 id="oauth-scope-requirement">1476<h3 id="oauth-scope-requirement">

1438 OAuth 范围要求1477 OAuth 作用域要求

1439</h3>1478</h3>

1440 1479 

1441存储的令牌早于较新功能需要的权限范围:1480已存储的令牌早于某个新功能所需的权限作用域:

1442 1481 

1443```text theme={null}1482```text theme={null}

1444OAuth token does not meet scope requirement: user:profile1483OAuth token does not meet scope requirement: user:profile

1445```1484```

1446 1485 

1447**应该做什么:**1486**解决方法:**

1448 1487 

1449* 运行 `/login` 以获取具有当前范围的新令牌。您不需要先登出。1488* 运行 `/login` 获取具有当前作用域的新令牌。您无需先注销。

1450 1489 

1451<h3 id="claude-ai-rejected-the-session-token">1490<h3 id="claude-ai-rejected-the-session-token">

1452 claude.ai 拒绝了会话令牌1491 claude.ai 拒绝了会话令牌

1453</h3>1492</h3>

1454 1493 

1455[claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 请求失败,因为 claude.ai 拒绝了您的 Claude Code 登录中的令牌。被拒绝的令牌是您的登录,而不是连接器在 claude.ai 中的自己的授权,因此再次授权连接器不会解决它。在 `/mcp` 中,连接器显示为 `session token rejected`,其详细视图读作:1494[claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)请求失败,因为 claude.ai 拒绝了来自您 Claude Code 登录的令牌。被拒绝的令牌是您的登录,而不是该连接器在 claude.ai 中自身的授权,因此重新授权连接器并不能解决问题。在 `/mcp` 中,该连接器显示为 `session token rejected`,其详细信息视图显示:

1456 1495 

1457```text theme={null}1496```text theme={null}

1458claude.ai rejected the session token. Run /login, then reconnect.1497claude.ai rejected the session token. Run /login, then reconnect.

1459```1498```

1460 1499 

1461**应该做什么:**1500**解决方法:**

1462 1501 

1463* 运行 `/login` 再次登录1502* 运行 `/login` 重新登录

1464* 从 `/mcp` 重新连接连接器,或运行 `/mcp reconnect <server>`。在您再次登录之前重新连接会使连接器处于相同状态。`/mcp` 面板的 **Reconnect** 选项报告 `your claude.ai session token was rejected`;输入的 `/mcp reconnect <server>` 形式报告成功重新连接,即使令牌仍然被拒绝。1503* 从 `/mcp` 重新连接该连接器,或运行 `/mcp reconnect <server>`。在重新登录之前重新连接,连接器会保持相同状态。`/mcp` 面板的 **Reconnect** 选项会报告 `your claude.ai session token was rejected`;而键入的 `/mcp reconnect <server>` 形式会报告重新连接成功,尽管令牌仍然被拒绝。

1465 1504 

1466在 v2.1.222 之前,Claude Code 改为将连接器标记为需要身份验证,这指向您连接器的授权流程,即使完成它也不会解决状态。1505在 v2.1.222 之前,Claude Code 会将该连接器标记为需要身份验证,这会引导您进入连接器的授权流程,而完成该流程并不能解决此状态。

1467 1506 

1468<h3 id="mcp-server-needs-you-to-sign-in-again">1507<h3 id="mcp-server-needs-you-to-sign-in-again">

1469 MCP 服务器需要您再次登录1508 MCP 服务器需要您重新登录

1470</h3>1509</h3>

1471 1510 

1472远程 [MCP 服务器](/docs/zh-CN/mcp) 在会话中期拒绝了工具调用上的凭证,通常是因为登录或令牌过期或令牌缺少工具需要的权限。工具调用失败,`/mcp` 将服务器标记为 [需要身份验证](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers)。1511某个远程 [MCP 服务器](/docs/zh-CN/mcp)在会话中途的工具调用中拒绝了凭据,通常是因为登录或令牌已过期,或令牌缺少工具所需的权限。该工具调用失败,`/mcp` 会将该服务器标记为[需要身份验证](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers)。

1473 1512 

1474对于您从 Claude Code 登录的服务器,包括 claude.ai 连接器,登录已过期或被撤销:1513对于您从 Claude Code 登录的服务器(包括 claude.ai 连接器),登录已过期或被撤销:

1475 1514 

1476```text theme={null}1515```text theme={null}

1477MCP server "<name>" needs you to sign in again (run /mcp to re-authenticate)1516MCP server "<name>" needs you to sign in again (run /mcp to re-authenticate)

1478```1517```

1479 1518 

1480运行 `/mcp`,选择服务器,并从其菜单再次登录。1519运行 `/mcp`,选择该服务器,然后从其菜单中重新登录。

1481 1520 

1482对于使用 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) 脚本配置的服务器,Claude Code 已在显示此之前重新运行 helper 并重试调用一次:1521对于配置了 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) 脚本的服务器,Claude Code 在显示以下消息之前已经重新运行过该 helper 并重试了一次调用:

1483 1522 

1484```text theme={null}1523```text theme={null}

1485MCP server "<name>" rejected the credential from its headersHelper (check the helper and run /mcp to reconnect, or to authenticate if the server also uses OAuth)1524MCP server "<name>" rejected the credential from its headersHelper (check the helper and run /mcp to reconnect, or to authenticate if the server also uses OAuth)

1486```1525```

1487 1526 

1488检查 helper 返回服务器接受的凭证,然后从 `/mcp` 重新连接,这会再次运行 helper。1527检查该 helper 是否返回服务器接受的凭据,然后从 `/mcp` 重新连接,这会再次运行该 helper。

1489 1528 

1490对于在其配置中具有静态 `Authorization` 标头的服务器:1529对于在配置中带有静态 `Authorization` 标头的服务器:

1491 1530 

1492```text theme={null}1531```text theme={null}

1493MCP server "<name>" rejected the Authorization header in its config (update it, then run /mcp to reconnect)1532MCP server "<name>" rejected the Authorization header in its config (update it, then run /mcp to reconnect)

1494```1533```

1495 1534 

1496在配置服务器的位置更新标头值,然后从 `/mcp` 重新连接。1535在配置该服务器的位置更新标头值,然后从 `/mcp` 重新连接。

1497 1536 

1498在 v2.1.273 之前,过期的登录、`headersHelper` 和 `Authorization` 标头情况都显示 `MCP server "<name>" requires re-authorization (token expired)`。1537在 v2.1.273 之前,登录过期、`headersHelper` 和 `Authorization` 标头这几种情况都显示 `MCP server "<name>" requires re-authorization (token expired)`。

1499 1538 

1500服务器也可以使用 HTTP 403 `insufficient_scope` 拒绝工具调用,以要求您授权范围,有时是您的令牌已列出的范围。消息命名该范围:1539服务器也可能以 HTTP 403 `insufficient_scope` 拒绝工具调用,要求您授权某个作用域,有时该作用域甚至已列在您的令牌中。消息会指出该作用域:

1501 1540 

1502```text theme={null}1541```text theme={null}

1503MCP server "<name>" needs additional permissions (scope: "<scope>") — run /mcp to re-authenticate1542MCP server "<name>" needs additional permissions (scope: "<scope>") — run /mcp to re-authenticate

1504```1543```

1505 1544 

1506运行 `/mcp`,选择服务器,并从其菜单再次进行身份验证。1545运行 `/mcp`,选择该服务器,然后从其菜单中重新进行身份验证。

1507 1546 

1508当服务器的配置既不设置 [`oauth.scopes`](/docs/zh-CN/mcp#restrict-oauth-scopes) 也不设置 [`authServerMetadataUrl`](/docs/zh-CN/mcp#override-oauth-metadata-discovery) 时,Claude Code 请求服务器命名的范围。使用任一设置,Claude Code 改为请求该设置的范围。如果您固定了 `oauth.scopes`,在再次进行身份验证之前将缺失的范围添加到该列表。1547当服务器的配置既未设置 [`oauth.scopes`](/docs/zh-CN/mcp#restrict-oauth-scopes) 也未设置 [`authServerMetadataUrl`](/docs/zh-CN/mcp#override-oauth-metadata-discovery) 时,Claude Code 会请求服务器指出的作用域。如果设置了其中任一项,Claude Code 会改为请求该设置中的作用域。如果您固定了 `oauth.scopes`,请在重新进行身份验证之前将缺失的作用域添加到该列表中。

1509 1548 

1510在 v2.1.274 之前,这种情况显示 `needs you to sign in again` 消息,在 v2.1.273 之前它显示 `requires re-authorization (token expired)`,如其他情况。1549在 v2.1.274 之前,这种情况显示 `needs you to sign in again` 消息;在 v2.1.273 之前,它与其他情况一样显示 `requires re-authorization (token expired)`。

1511 1550 

1512<h3 id="mcp-server-url-is-missing-or-not-a-valid-url">1551<h3 id="mcp-server-url-is-missing-or-not-a-valid-url">

1513 MCP 服务器 URL 缺失或不是有效的 URL1552 MCP 服务器 URL 缺失或不是有效的 URL

1514</h3>1553</h3>

1515 1554 

1516Claude Code 拒绝为远程 MCP 服务器启动 OAuth 登录,因为服务器的配置 `url` 不解析为 URL。除非 Claude Code 有更具体的配置问题要为服务器报告,否则在您的 shell 中运行 [`claude mcp login <name>`](/docs/zh-CN/mcp#authenticate-from-the-command-line) 会将拒绝打印为:1555Claude Code 拒绝为某个远程 MCP 服务器启动 OAuth 登录,因为该服务器配置的 `url` 无法解析为 URL。除非 Claude Code 对该服务器有更具体的配置问题需要报告,否则在您的 shell 中运行 [`claude mcp login <name>`](/docs/zh-CN/mcp#authenticate-from-the-command-line) 会将该拒绝输出为:

1517 1556 

1518```text theme={null}1557```text theme={null}

1519Couldn't complete authentication for "<name>": This server's URL is missing or not a valid URL, so sign-in can't start. Fix the URL in its MCP config (or set the environment variable it uses) and try again.1558Couldn't complete authentication for "<name>": This server's URL is missing or not a valid URL, so sign-in can't start. Fix the URL in its MCP config (or set the environment variable it uses) and try again.

1520```1559```

1521 1560 

1522**应该做什么:**1561**解决方法:**

1523 1562 

1524* 将条目的 `url` 设置为服务器的真实端点,其中配置服务器,或设置其 [`${VAR}` 引用](/docs/zh-CN/mcp#environment-variable-expansion-in-mcp-json) 命名的环境变量,然后再次运行登录。1563* 在配置该服务器的位置,将该条目的 `url` 设置为服务器的真实端点,或设置其 [`${VAR}` 引用](/docs/zh-CN/mcp#environment-variable-expansion-in-mcp-json)所指的环境变量,然后再次运行登录。

1525 1564 

1526<h3 id="issuer-mismatch-in-authorization-response">1565<h3 id="issuer-mismatch-in-authorization-response">

1527 授权响应中的发行者不匹配1566 授权响应中的颁发者不匹配

1528</h3>1567</h3>

1529 1568 

1530在 [MCP OAuth 登录](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers) 期间,授权服务器重定向回 Claude Code,其中 `iss` 参数不命名 Claude Code 从服务器的 OAuth 元数据期望的发行者。此步骤中的错误发行者是授权服务器混合攻击的样子,因此 Claude Code 失败登录而不是交换授权代码。Claude Code 在浏览器登录后在 `/mcp` 服务器菜单中显示错误:1569在 [MCP OAuth 登录](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers)期间,授权服务器重定向回 Claude Code 时所携带的 `iss` 参数与 Claude Code 根据服务器 OAuth 元数据所期望的颁发者不一致。此步骤中出现错误的颁发者正是授权服务器混淆攻击(mix-up attack)的表现形式,因此 Claude Code 会让登录失败,而不是交换授权码。Claude Code 会在浏览器登录后,在 `/mcp` 服务器菜单中显示该错误:

1531 1570 

1532```text theme={null}1571```text theme={null}

1533Issuer mismatch in authorization response (RFC 9207): expected "https://auth.example.com", received "https://other.example.com"1572Issuer mismatch in authorization response (RFC 9207): expected "https://auth.example.com", received "https://other.example.com"

1534```1573```

1535 1574 

1536`expected` 是来自服务器的 OAuth 元数据的发行者,`received` 是重定向携带的 `iss` 值。其重定向不携带 `iss` 参数的登录通过检查,除非服务器的元数据设置 `authorization_response_iss_parameter_supported`,在这种情况下 Claude Code 失败登录。1575`expected` 是来自服务器 OAuth 元数据的颁发者,`received` 是重定向所携带的 `iss` 值。重定向未携带 `iss` 参数的登录会通过检查,除非服务器的元数据设置了 `authorization_response_iss_parameter_supported`,这种情况下 Claude Code 会让登录失败。

1537 1576 

1538**应该做什么:**1577**解决方法:**

1539 1578 

1540* 从 `/mcp` 再次尝试登录1579* 从 `/mcp` 再次尝试登录

1541* 如果错误重复,将其报告给服务器操作员。修复是服务器端的:授权服务器必须在 `iss` 参数中返回与在其元数据中宣传的相同发行者1580* 如果错误重复出现,请向服务器运营方报告。需要在服务器端修复:授权服务器必须在 `iss` 参数中返回与其元数据中公布的相同的颁发者

1542* 要在修复服务器时连接,使用 [`MCP_SDK_GENERATION=v1`](/docs/zh-CN/env-vars) 启动 Claude Code,其 [运行时](/docs/zh-CN/mcp#mcp-client-runtimes) 不运行此检查。这消除了对混合攻击的保护,因此更喜欢服务器端修复1581* 如需在服务器修复期间进行连接,请使用 [`MCP_SDK_GENERATION=v1`](/docs/zh-CN/env-vars) 启动 Claude Code,其[运行时](/docs/zh-CN/mcp#mcp-client-runtimes)不执行此检查。这会移除一项针对混淆攻击的防护,因此请优先采用服务器端修复

1543 1582 

1544在 v2.1.232 之前,Claude Code 仅在逐步推出中或当您设置 `MCP_SDK_GENERATION=v2` 时使用 v2 运行时。1583在 v2.1.232 之前,Claude Code 仅在逐步推出时或您设置 `MCP_SDK_GENERATION=v2` 时才使用 v2 运行时。

1545 1584 

1546<h3 id="refusing-to-send-credentials-to-non-https-token-endpoint">1585<h3 id="refusing-to-send-credentials-to-non-https-token-endpoint">

1547 拒绝向非 https 令牌端点发送凭证1586 拒绝向非 https 令牌端点发送凭据

1548</h3>1587</h3>

1549 1588 

1550在 [v2 运行时](/docs/zh-CN/mcp#mcp-client-runtimes) 上,Claude Code 仅向通过 HTTPS 或在 `localhost`、`127.0.0.1` 或 `::1` 处提供的令牌端点发送 [MCP OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers) 令牌请求。此消息意味着服务器的令牌端点都不是,因此 Claude Code 在发送请求前停止。这发生在浏览器登录之后,因此浏览器步骤首先成功,并且每当 Claude Code 刷新服务器的令牌时再次发生。1589在 [v2 运行时](/docs/zh-CN/mcp#mcp-client-runtimes)上,Claude Code 只会将 [MCP OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers) 令牌请求发送到通过 HTTPS 提供服务的令牌端点,或位于 `localhost`、`127.0.0.1` 或 `::1` 的令牌端点。此消息表示服务器的令牌端点两者都不是,因此 Claude Code 在发送请求前就停止了。这发生在浏览器登录之后,因此浏览器步骤会先成功,并且每当 Claude Code 刷新该服务器的令牌时都会再次发生。

1551 1590 

1552在其完整形式中,消息来自 MCP SDK 并引用它拒绝的令牌端点。在调试日志中,它遵循 `Error during auth completion:` 用于登录或 `Token refresh failed:` 用于刷新。在您的 shell 中,`claude mcp login <name>` 在 `Couldn't complete authentication for "<name>":` 之后打印它,在会话中,`/mcp` 在服务器的菜单下显示它:1591该消息的完整形式来自 MCP SDK,并会引用它拒绝的令牌端点。在调试日志中,对于登录,它跟在 `Error during auth completion:` 之后;对于刷新,它跟在 `Token refresh failed:` 之后。在您的 shell 中,`claude mcp login <name>` 会在 `Couldn't complete authentication for "<name>":` 之后输出它;在会话中,`/mcp` 会在服务器菜单下显示它:

1553 1592 

1554```text theme={null}1593```text theme={null}

1555Refusing to send credentials to non-https token endpoint 'http://192.168.1.50:8123/oauth/token'. OAuth token requests MUST use TLS (localhost / 127.0.0.1 / ::1 are exempt).1594Refusing to send credentials to non-https token endpoint 'http://192.168.1.50:8123/oauth/token'. OAuth token requests MUST use TLS (localhost / 127.0.0.1 / ::1 are exempt).

1556```1595```

1557 1596 

1558Claude Code 将具有查询字符串或长随机外观路径段的服务器 URL 视为可能的秘密。对于这样的服务器,它在显示或记录它们之前会编辑 MCP SDK 引发的登录错误。此错误然后读作可能在版本之间更改的短名称,例如 `io`,后跟 `from the MCP SDK for` 和编辑的服务器 URL。MCP SDK 的其他错误在那里采用相同的形状。编辑的消息只能是此错误,当服务器的令牌端点是纯 `http://` 在 `localhost`、`127.0.0.1` 或 `::1` 以外的地址时。1597Claude Code 会将带有查询字符串或较长的随机外观路径段的服务器 URL 视为可能是机密的。对于此类服务器,它会在显示或记录 MCP SDK 引发的登录错误之前对其进行脱敏。此时该错误会显示为一个可能因版本而变化的简短名称(例如 `io`),后跟 `from the MCP SDK for` 和经过脱敏的服务器 URL。来自 MCP SDK 的其他错误在这种情况下也采用相同的形式。只有当服务器的令牌端点是位于 `localhost`、`127.0.0.1` 或 `::1` 以外地址的普通 `http://` 时,脱敏后的消息才可能是此错误。

1559 1598 

1560**应该做什么:**1599**解决方法:**

1561 1600 

1562* 通过 HTTPS 提供该令牌端点,例如通过将服务器放在终止 TLS 的反向代理或隧道后面,并配置服务器以宣传 `https://` 地址1601* 通过 HTTPS 提供该令牌端点,例如将服务器置于终止 TLS 的反向代理或隧道之后,并配置服务器公布 `https://` 地址

1563* 要在不更改服务器的情况下连接,使用 [`MCP_SDK_GENERATION=v1`](/docs/zh-CN/env-vars) 启动 Claude Code,其 [运行时](/docs/zh-CN/mcp#mcp-client-runtimes) 不应用此规则并通过纯 HTTP 发送令牌请求。该选择持续到您退出并应用于每个服务器。v1 运行时也跳过 [发行者检查](#issuer-mismatch-in-authorization-response),因此更喜欢通过 HTTPS 提供端点1602* 如需在不更改服务器的情况下进行连接,请使用 [`MCP_SDK_GENERATION=v1`](/docs/zh-CN/env-vars) 启动 Claude Code,其[运行时](/docs/zh-CN/mcp#mcp-client-runtimes)不应用此规则,会通过普通 HTTP 发送令牌请求。该选择会持续到您退出为止,并适用于所有服务器。v1 运行时还会跳过[颁发者检查](#issuer-mismatch-in-authorization-response),因此请优先通过 HTTPS 提供该端点

1564 1603 

1565<h3 id="aws-credentials-expired-or-invalid">1604<h3 id="aws-credentials-expired-or-invalid">

1566 AWS 凭证已过期或无效1605 AWS 凭据已过期或无效

1567</h3>1606</h3>

1568 1607 

1569您的 AWS 会话令牌已过期或被拒绝。此消息出现在来自 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 或 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint) 的 401,这是这些提供商报告过期安全令牌的方式。1608您的 AWS 会话令牌已过期或被拒绝。当 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 或 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)返回 401 时会出现此消息,这是这些提供商报告安全令牌过期的方式。

1570 1609 

1571中间的操作提示因您的设置而异。稳定部分是前导 `AWS credentials expired or invalid`:1610中间的操作提示因您的设置而异。稳定不变的部分是开头的 `AWS credentials expired or invalid`:

1572 1611 

1573```text theme={null}1612```text theme={null}

1574AWS credentials expired or invalid · run /login and select "Claude Platform on AWS · refresh credentials", or run `aws sso login --profile myprofile` in another terminal · API Error: 401 ...1613AWS credentials expired or invalid · run /login and select "Claude Platform on AWS · refresh credentials", or run `aws sso login --profile myprofile` in another terminal · API Error: 401 ...

1575```1614```

1576 1615 

1577在 v2.1.273 之前,仅当配置了 `awsAuthRefresh` 时才出现此消息。1616在 v2.1.273 之前,只有在配置了 `awsAuthRefresh` 时才会出现此消息。

1578 1617 

1579**应该做什么:**1618**解决方法:**

1580 1619 

1581* 如果提示说凭证由此环境管理,启动 Claude Code 的应用拥有凭证,此处的其他步骤不适用:重试或联系您的管理员1620* 如果提示说明凭据由此环境管理,则凭据归启动 Claude Code 的应用所有,此处的其他步骤不适用:请重试,或联系您的管理员

1582* 如果设置了 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration),在另一个终端中运行消息中命名的命令,例如 `aws sso login --profile myprofile`,并完成浏览器登录,然后重试。否则自己刷新您使用的 AWS 凭证:您的 SSO 登录、访问密钥、API 密钥或代理令牌1621* 如果设置了 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration),请在另一个终端中运行消息中指出的命令(例如 `aws sso login --profile myprofile`)并完成浏览器登录,然后重试。否则,请自行刷新您所使用的 AWS 凭据:您的 SSO 登录、访问密钥、API 密钥或代理令牌

1583* 在交互式会话中设置 `awsAuthRefresh`,您可以改为运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials** 以运行相同的命令而不重新启动 Claude Code。请参阅 [配置 AWS 凭证](/docs/zh-CN/claude-platform-on-aws#1-configure-aws-credentials)1622* 在设置了 `awsAuthRefresh` 的交互式会话中,您也可以运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials**,无需重启 Claude Code 即可运行同一命令。请参阅[配置 AWS 凭据](/docs/zh-CN/claude-platform-on-aws#1-configure-aws-credentials)

1584* 如果刷新命令成功后错误重复,通过在同一 shell 和配置文件中使用 `aws sts get-caller-identity` 在 Claude Code 外确认身份有效1623* 如果刷新命令成功后错误仍然重复出现,请在同一 shell 和 profile 中运行 `aws sts get-caller-identity`,确认该身份在 Claude Code 之外有效

1585 1624 

1586<h3 id="aws-authentication-failed">1625<h3 id="aws-authentication-failed">

1587 AWS 身份验证失败1626 AWS 身份验证失败


1589 1628 

1590您的 AWS 提供商返回了 403,或 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 返回了 401。1629您的 AWS 提供商返回了 403,或 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 返回了 401。

1591 1630 

1592Amazon Bedrock 将过期的安全令牌报告为 403,但 403 也是它报告授权拒绝的方式,例如来自缺失 IAM 权限的 `AccessDeniedException`。Claude Code 无法区分这两个原因。1631Amazon Bedrock 将安全令牌过期报告为 403,但 403 也是它报告授权被拒绝的方式,例如因缺少 IAM 权限而产生的 `AccessDeniedException`。Claude Code 无法区分这两种原因。

1593 1632 

1594来自 Amazon Bedrock 的 401 也在这里而不是在 [AWS 凭证已过期或无效](#aws-credentials-expired-or-invalid) 下,因为 Amazon Bedrock 不将过期令牌报告为 401。来自该端点的 401 通常来自请求路径中的其他内容,例如公司代理。1633来自 Amazon Bedrock 的 401 也会归到这里,而不是[AWS 凭据已过期或无效](#aws-credentials-expired-or-invalid),因为 Amazon Bedrock 不会将令牌过期报告为 401。来自该端点的 401 通常来自请求路径中的其他环节,例如企业代理。

1595 1634 

1596凭证刷新修复过期令牌,无法修复其他原因,因此消息提供两者:1635刷新凭据可以修复令牌过期,但无法修复其他原因,因此消息同时提供了两种方案:

1597 1636 

1598```text theme={null}1637```text theme={null}

1599AWS authentication failed · run /login and select "Claude Platform on AWS · refresh credentials", or run `aws sso login --profile myprofile` in another terminal · if credentials are current, check AWS permissions and model access · API Error: 403 ...1638AWS authentication failed · run /login and select "Claude Platform on AWS · refresh credentials", or run `aws sso login --profile myprofile` in another terminal · if credentials are current, check AWS permissions and model access · API Error: 403 ...

1600```1639```

1601 1640 

1602中间的操作提示因您的设置而异。稳定部分是前导 `AWS authentication failed`。1641中间的操作提示因您的设置而异。稳定不变的部分是开头的 `AWS authentication failed`。

1603 1642 

1604当 403 是 Amazon Bedrock 的答案,说您无权访问具有指定模型 ID 的模型时,提示改为告诉您在 Amazon Bedrock 控制台中为您的账户和区域启用模型。1643当 403 是 Amazon Bedrock 表示您无权访问指定模型 ID 的模型时,提示会改为告诉您在 Amazon Bedrock 控制台中为您的账户和区域启用该模型。

1605 1644 

1606在 v2.1.273 之前,仅当配置了 `awsAuthRefresh` 时才出现此消息。1645在 v2.1.273 之前,只有在配置了 `awsAuthRefresh` 时才会出现此消息。

1607 1646 

1608**应该做什么:**1647**解决方法:**

1609 1648 

1610* 如果提示说凭证由此环境管理,启动 Claude Code 的应用拥有凭证,此处的其他步骤不适用:重试或联系您的管理员1649* 如果提示说明凭据由此环境管理,则凭据归启动 Claude Code 的应用所有,此处的其他步骤不适用:请重试,或联系您的管理员

1611* 刷新您的 AWS 凭证以防过期凭证是原因:运行消息中命名的 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration) 命令(当设置时),或自己刷新您的 SSO 登录、访问密钥、API 密钥或代理令牌1650* 刷新您的 AWS 凭据,以防原因是凭据过期:如果设置了 [`awsAuthRefresh`](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration),请运行消息中指出的该命令;否则请自行刷新您的 SSO 登录、访问密钥、API 密钥或代理令牌

1612* 如果您的凭证是最新的,确认 [IAM 配置](/docs/zh-CN/amazon-bedrock#iam-configuration) 中的 IAM 权限已附加到您使用的身份,并且所选模型已为您的账户和区域启用1651* 如果您的凭据是最新的,请确认 [IAM 配置](/docs/zh-CN/amazon-bedrock#iam-configuration)中的 IAM 权限已附加到您正在使用的身份,并且所选模型已为您的账户和区域启用

1613* 运行 `aws sts get-caller-identity` 以确认您的请求使用哪个身份1652* 运行 `aws sts get-caller-identity`,确认您的请求使用的是哪个身份

1614 1653 

1615<h3 id="google-cloud-credentials-expired-or-invalid">1654<h3 id="google-cloud-credentials-expired-or-invalid">

1616 Google Cloud 凭证已过期或无效1655 Google Cloud 凭据已过期或无效

1617</h3>1656</h3>

1618 1657 

1619您的 [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) Google Cloud 凭证已过期或被拒绝:请求返回了 401,这是 Agent Platform 报告凭证过期的方式。1658您用于 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 的 Google Cloud 凭据已过期或被拒绝:请求返回了 401,这是 Agent Platform 报告凭据过期的方式。

1620 1659 

1621中间的操作提示因您的设置而异。稳定部分是前导 `Google Cloud credentials expired or invalid`:1660中间的操作提示因您的设置而异。稳定不变的部分是开头的 `Google Cloud credentials expired or invalid`:

1622 1661 

1623```text theme={null}1662```text theme={null}

1624Google Cloud credentials expired or invalid · refresh your Google Cloud credentials (application default sign-in, or the key file in GOOGLE_APPLICATION_CREDENTIALS) and retry · API Error: 401 ...1663Google Cloud credentials expired or invalid · refresh your Google Cloud credentials (application default sign-in, or the key file in GOOGLE_APPLICATION_CREDENTIALS) and retry · API Error: 401 ...

1625```1664```

1626 1665 

1627**应该做什么:**1666**解决方法:**

1628 1667 

1629* 如果提示说凭证由此环境管理,启动 Claude Code 的应用拥有凭证,此处的其他步骤不适用:重试或联系您的管理员1668* 如果提示说明凭据由此环境管理,则凭据归启动 Claude Code 的应用所有,此处的其他步骤不适用:请重试,或联系您的管理员

1630* 如果您使用应用默认凭证进行身份验证,运行消息中命名的 [`gcpAuthRefresh`](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration) 命令或 `gcloud auth application-default login`,并完成登录,然后重试1669* 如果您使用应用默认凭据进行身份验证,请运行消息中指出的 [`gcpAuthRefresh`](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration) 命令或 `gcloud auth application-default login` 并完成登录,然后重试

1631* 如果您通过设置了 `CLAUDE_CODE_SKIP_VERTEX_AUTH` 的 [LLM 网关](/docs/zh-CN/llm-gateway) 路由,刷新 `ANTHROPIC_AUTH_TOKEN` 或 `ANTHROPIC_CUSTOM_HEADERS` 中的网关令牌,然后重试1670* 如果您在设置了 `CLAUDE_CODE_SKIP_VERTEX_AUTH` 的情况下通过 [LLM 网关](/docs/zh-CN/llm-gateway)路由,请刷新 `ANTHROPIC_AUTH_TOKEN` 或 `ANTHROPIC_CUSTOM_HEADERS` 中的网关令牌,然后重试

1632* 如果您使用服务账户密钥文件进行身份验证,确认 `GOOGLE_APPLICATION_CREDENTIALS` 指向有效密钥。请参阅 [配置 GCP 凭证](/docs/zh-CN/google-vertex-ai#3-configure-gcp-credentials)1671* 如果您使用服务账号密钥文件进行身份验证,请确认 `GOOGLE_APPLICATION_CREDENTIALS` 指向有效的密钥。请参阅[配置 GCP 凭据](/docs/zh-CN/google-vertex-ai#3-configure-gcp-credentials)

1633* 如果刷新后错误重复,通过在同一 shell 中使用 `gcloud auth application-default print-access-token` 在 Claude Code 外确认身份有效1672* 如果刷新后错误仍然重复出现,请在同一 shell 中运行 `gcloud auth application-default print-access-token`,确认该身份在 Claude Code 之外可以正常工作

1634 1673 

1635在 v2.1.273 之前,来自 Agent Platform 的 401 显示通用 `Please run /login` 或 `Failed to authenticate` 消息,无法刷新 Google Cloud 凭证。1674在 v2.1.273 之前,来自 Agent Platform 的 401 会改为显示通用的 `Please run /login` 或 `Failed to authenticate` 消息,而这些消息无法刷新 Google Cloud 凭据。

1636 1675 

1637<h3 id="google-cloud-authentication-failed">1676<h3 id="google-cloud-authentication-failed">

1638 Google Cloud 身份验证失败1677 Google Cloud authentication failed

1639</h3>1678</h3>

1640 1679 

1641[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 返回了 403,它用于授权拒绝而不是过期凭证。通常您进行身份验证的身份缺少 IAM 权限,或模型未为您的项目启用。1680[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 返回了 403,该平台使用此状态码表示授权被拒绝,而非凭据过期。通常是您用于身份验证的身份缺少某项 IAM 权限,或者您的项目未启用该模型。

1642 1681 

1643中间的操作提示因您的设置而异。稳定部分是前导 `Google Cloud authentication failed`:1682中间的操作提示因您的设置而异。固定不变的部分是开头的 `Google Cloud authentication failed`:

1644 1683 

1645```text theme={null}1684```text theme={null}

1646Google Cloud authentication failed · refresh your Google Cloud credentials (application default sign-in, or the key file in GOOGLE_APPLICATION_CREDENTIALS) and retry · if credentials are current, check GCP IAM permissions and Vertex AI model access · API Error: 403 ...1685Google Cloud authentication failed · refresh your Google Cloud credentials (application default sign-in, or the key file in GOOGLE_APPLICATION_CREDENTIALS) and retry · if credentials are current, check GCP IAM permissions and Vertex AI model access · API Error: 403 ...

1647```1686```

1648 1687 

1649**应该做什么:**1688**解决方法:**

1650 1689 

1651* 如果提示说凭证由此环境管理,启动 Claude Code 的应用拥有凭证,此处的其他步骤不适用:重试或联系您的管理员1690* 如果提示表明凭据由当前环境管理,则凭据归启动 Claude Code 的应用所有,此处的其他步骤不适用:请重试,或联系您的管理员

1652* 确认 [IAM 配置](/docs/zh-CN/google-vertex-ai#iam-configuration) 中的角色已授予您进行身份验证的身份1691* 确认 [IAM 配置](/docs/zh-CN/google-vertex-ai#iam-configuration)中的角色已授予您用于身份验证的身份

1653* 确认模型已为您的项目启用。请参阅 [请求模型访问](/docs/zh-CN/google-vertex-ai#2-request-model-access)1692* 确认您的项目已启用该模型。请参阅[申请模型访问权限](/docs/zh-CN/google-vertex-ai#2-request-model-access)

1654 1693 

1655在 v2.1.273 之前,来自 Agent Platform 的 403 显示通用 `Please run /login` 或 `Failed to authenticate` 消息,无法刷新 Google Cloud 凭证。1694在 v2.1.273 之前,来自 Agent Platform 的 403 会改为显示通用的 `Please run /login` 或 `Failed to authenticate` 消息,而这些操作无法刷新 Google Cloud 凭据。

1656 1695 

1657<h3 id="microsoft-foundry-authentication-failed">1696<h3 id="microsoft-foundry-authentication-failed">

1658 Microsoft Foundry 身份验证失败1697 Microsoft Foundry authentication failed

1659</h3>1698</h3>

1660 1699 

1661[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 返回了 401 或 403:请求上的 Azure 凭证被拒绝,或其背后的身份无权访问 Foundry 资源。`/login` 无法铸造 Azure 凭证。中间的操作提示因您的设置而异。稳定部分是前导 `Microsoft Foundry authentication failed`:1700[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 返回了 401 或 403:请求中的 Azure 凭据被拒绝,或者其背后的身份无权访问 Foundry 资源。`/login` 无法生成 Azure 凭据。中间的操作提示因您的设置而异。固定不变的部分是开头的 `Microsoft Foundry authentication failed`:

1662 1701 

1663```text theme={null}1702```text theme={null}

1664Microsoft Foundry authentication failed · refresh your Foundry credential (ANTHROPIC_FOUNDRY_AUTH_TOKEN, ANTHROPIC_FOUNDRY_API_KEY, Azure sign-in for Entra, or your proxy token) and retry · if credentials are current, check access to the Foundry resource · API Error: 401 ...1703Microsoft Foundry authentication failed · refresh your Foundry credential (ANTHROPIC_FOUNDRY_AUTH_TOKEN, ANTHROPIC_FOUNDRY_API_KEY, Azure sign-in for Entra, or your proxy token) and retry · if credentials are current, check access to the Foundry resource · API Error: 401 ...

1665```1704```

1666 1705 

1667**应该做什么:**1706**解决方法:**

1668 1707 

1669* 如果提示说凭证由此环境管理,启动 Claude Code 的应用拥有凭证,此处的其他步骤不适用:重试或联系您的管理员1708* 如果提示表明凭据由当前环境管理,则凭据归启动 Claude Code 的应用所有,此处的其他步骤不适用:请重试,或联系您的管理员

1670* 刷新您在 [配置 Azure 凭证](/docs/zh-CN/microsoft-foundry#2-configure-azure-credentials) 中配置的凭证:轮换 `ANTHROPIC_FOUNDRY_API_KEY`、铸造新的 `ANTHROPIC_FOUNDRY_AUTH_TOKEN` 或运行 `az login` 以便默认 Microsoft Entra 凭证链可以再次登录1709* 刷新您在[配置 Azure 凭据](/docs/zh-CN/microsoft-foundry#2-configure-azure-credentials)中配置的凭据:轮换 `ANTHROPIC_FOUNDRY_API_KEY`、生成新的 `ANTHROPIC_FOUNDRY_AUTH_TOKEN`,或运行 `az login` 以便默认的 Microsoft Entra 凭据链可以重新登录

1671* 如果凭证是最新的,确认身份有权访问 Foundry 资源。请参阅 [Azure RBAC 配置](/docs/zh-CN/microsoft-foundry#azure-rbac-configuration)1710* 如果凭据有效,请确认该身份有权访问 Foundry 资源。请参阅 [Azure RBAC 配置](/docs/zh-CN/microsoft-foundry#azure-rbac-configuration)

1672 1711 

1673在 v2.1.273 之前,来自 Microsoft Foundry 的 401 或 403 显示通用 `Please run /login` 或 `Failed to authenticate` 消息,无法刷新 Azure 凭证。1712在 v2.1.273 之前,来自 Microsoft Foundry 的 401 或 403 会改为显示通用的 `Please run /login` 或 `Failed to authenticate` 消息,而这些操作无法刷新 Azure 凭据。

1674 1713 

1675<h3 id="could-not-load-aws-or-google-cloud-credentials">1714<h3 id="could-not-load-aws-or-google-cloud-credentials">

1676 无法加载 AWS 或 Google Cloud 凭证1715 Could not load AWS or Google Cloud credentials

1677</h3>1716</h3>

1678 1717 

1679Claude Code 无法从 AWS 凭证提供商链或从它运行的机器上的 Google 应用默认凭证获取可用凭证,因此没有请求到达您的云提供商。Claude Code 清除其缓存凭证并在显示此消息之前重试两次。`·` 之后的详细信息命名具体原因,例如过期的 SSO 会话、缺失的应用默认凭证报告为 `Could not load the default credentials` 或被撤销的登录报告为 `invalid_grant`:1718Claude Code 无法在其运行的机器上从 AWS 凭据提供程序链或 Google 应用默认凭据中获取可用的凭据,因此没有请求到达您的云提供商。Claude Code 会清除其缓存的凭据并重试两次,然后才显示此消息。`·` 之后的详细信息会指出具体原因,例如 SSO 会话已过期、缺少应用默认凭据(报告为 `Could not load the default credentials`),或登录已被撤销(报告为 `invalid_grant`):

1680 1719 

1681```text theme={null}1720```text theme={null}

1682API Error: Could not load AWS credentials · Could not load credentials from any providers. Check or refresh your AWS credentials and try again.1721API Error: Could not load AWS credentials · Could not load credentials from any providers. Check or refresh your AWS credentials and try again.

1683API Error: Could not load Google Cloud credentials · invalid_grant. Check or refresh your Google Cloud credentials and try again.1722API Error: Could not load Google Cloud credentials · invalid_grant. Check or refresh your Google Cloud credentials and try again.

1684```1723```

1685 1724 

1686在 [非交互式模式](/docs/zh-CN/headless) 中使用 `-p` 和在 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,结构化错误代码为 `cloud_credential_error`。在 v2.1.267 之前,消息仅显示 `API Error:` 之后的详细信息文本,结构化代码为 `server_error` 或 `unknown`。1725在使用 `-p` 的[非交互模式](/docs/zh-CN/headless)和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中,结构化错误代码为 `cloud_credential_error`。在 v2.1.267 之前,该消息仅显示 `API Error:` 之后的详细文本,结构化代码为 `server_error` 或 `unknown`。

1687 1726 

1688**应该做什么:**1727**解决方法:**

1689 1728 

1690* 运行您的提供商的登录命令,例如 `aws sso login --profile myprofile` 或 `gcloud auth application-default login`,然后重试。[Bedrock、Agent Platform 或 Foundry 凭证未加载](/docs/zh-CN/troubleshoot-install#bedrock-agent-platform-or-foundry-credentials-not-loading) 显示如何在 Claude Code 外确认凭证1729* 运行您的提供商的登录命令,例如 `aws sso login --profile myprofile` 或 `gcloud auth application-default login`,然后重试。[Bedrock、Agent Platform 或 Foundry 凭据无法加载](/docs/zh-CN/troubleshoot-install#bedrock-agent-platform-or-foundry-credentials-not-loading)介绍了如何在 Claude Code 之外确认凭据

1691* 如果详细信息读作 `AWS default-chain credential resolve timed out`,链挂起而不是失败,因此改为遵循 [AWS default-chain credential resolve timed out](#aws-default-chain-credential-resolve-timed-out)1730* 如果详细信息为 `AWS default-chain credential resolve timed out`,则表示凭据链卡住了而非失败,请改为按照 [AWS default-chain credential resolve timed out](#aws-default-chain-credential-resolve-timed-out) 进行处理

1692 1731 

1693<h3 id="aws-default-chain-credential-resolve-timed-out">1732<h3 id="aws-default-chain-credential-resolve-timed-out">

1694 AWS default-chain credential resolve 超时1733 AWS default-chain credential resolve timed out

1695</h3>1734</h3>

1696 1735 

1697AWS 默认凭证提供商链在 60 秒内未生成凭证,因此 Claude Code 停止了解析并失败了请求。此超时是 [无法加载 AWS 或 Google Cloud 凭证](#could-not-load-aws-or-google-cloud-credentials) 的一个原因。故障是本地凭证解析:请求从未到达 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 或 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。Claude Code 在此错误出现之前清除其 [凭证缓存](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout) 并重试,因此当您看到它时链已在重复尝试中停滞。1736AWS 默认凭据提供程序链未能在 60 秒内生成凭据,因此 Claude Code 停止了解析并使请求失败。此超时是 [Could not load AWS or Google Cloud credentials](#could-not-load-aws-or-google-cloud-credentials) 的原因之一。失败发生在本地凭据解析阶段:请求从未到达 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 或 [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。Claude Code 会在此错误出现之前清除其[凭据缓存](/docs/zh-CN/amazon-bedrock#credential-caching-and-resolution-timeout)并重试,因此当您看到此错误时,凭据链已在多次尝试中停滞。

1698 1737 

1699```text theme={null}1738```text theme={null}

1700API Error: Could not load AWS credentials · AWS default-chain credential resolve timed out. Check or refresh your AWS credentials and try again.1739API Error: Could not load AWS credentials · AWS default-chain credential resolve timed out. Check or refresh your AWS credentials and try again.

1701```1740```

1702 1741 

1703常见原因是您的 AWS 配置文件中的 `credential_process` 命令等待它无法接收的输入,以及其实例元数据服务 (IMDS) 从不回答链探针的容器或 VM。1742常见原因包括:AWS 配置文件中的 `credential_process` 命令在等待它无法接收的输入,以及容器或虚拟机的实例元数据服务(IMDS)始终未响应凭据链的探测。

1704 1743 

1705在 v2.1.267 之前,消息读作 `API Error: AWS default-chain credential resolve timed out`。1744在 v2.1.267 之前,该消息为 `API Error: AWS default-chain credential resolve timed out`。

1706在 v2.1.207 之前,停滞的链使请求无限期等待而不是失败。1745在 v2.1.207 之前,停滞的凭据链会让请求无限期等待,而不是失败。

1707 1746 

1708**应该做什么:**1747**解决方法:**

1709 1748 

1710* 在同一 shell 中使用相同的 `AWS_PROFILE` 运行 `aws sts get-caller-identity`。如果它也挂起,修复配置文件;提示交互式的 `credential_process` 命令是常见原因。1749* 在同一 shell 中使用相同的 `AWS_PROFILE` 运行 `aws sts get-caller-identity`。如果它也卡住,请修复该配置文件;以交互方式提示输入的 `credential_process` 命令是常见原因。

1711* 在启动 Claude Code 之前完成登录步骤,例如 `aws sso login --profile myprofile`,以便链从本地 SSO 缓存而不是等待浏览器流解析1750* 在启动 Claude Code 之前完成登录步骤,例如 `aws sso login --profile myprofile`

1712* 如果您的链运行合法需要超过 60 秒的交互式登录,例如通过 `aws-vault` 等包装器的 SSO 与 MFA,使用 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 以毫秒为单位提高限制1751* 如果您的凭据链运行的交互式登录确实需要超过 60 秒,例如通过 `aws-vault` 等包装工具进行带 MFA 的 SSO,请使用 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 以毫秒为单位提高该限制

1713 1752 

1714<h3 id="bedrock-setup-verification-timed-out-waiting-for-aws">1753<h3 id="bedrock-setup-verification-timed-out-waiting-for-aws">

1715 Bedrock 设置验证超时等待 AWS1754 Bedrock setup verification timed out waiting for AWS

1716</h3>1755</h3>

1717 1756 

1718在 [Bedrock 设置向导](/docs/zh-CN/amazon-bedrock#sign-in-with-bedrock) 的凭证验证期间对 AWS 的调用,例如凭证查找或身份检查,未在 60 秒限制内完成。向导停止等待并失败验证步骤:1757在 [Bedrock 设置向导](/docs/zh-CN/amazon-bedrock#sign-in-with-bedrock)的凭据验证过程中,对 AWS 的某个调用(例如凭据查找或身份检查)未能在 60 秒限制内完成。向导停止等待,并使验证步骤失败:

1719 1758 

1720```text theme={null}1759```text theme={null}

1721Timed out after 60s waiting for AWS. Check your network and proxy settings; if a credential helper needs longer to prompt you, raise CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS.1760Timed out after 60s waiting for AWS. Check your network and proxy settings; if a credential helper needs longer to prompt you, raise CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS.

1722```1761```

1723 1762 

1724该数字反映您的限制:默认 60 秒,或您在 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 中设置的值。1763其中的数字反映您的限制:默认为 60 秒,或您在 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 中设置的值。

1725 1764 

1726常见原因是停滞对 AWS 的请求的网络或代理,包括 SSO 令牌刷新,以及仍在等待您看不到的输入的凭证 helper。仅当 helper 合法需要更多时间时才提高限制。1765常见原因包括:网络或代理使发往 AWS 的请求(包括 SSO 令牌刷新)停滞,以及凭据助手仍在等待您看不到的输入。仅当助手确实需要更多时间时才提高该限制。

1727 1766 

1728对 AWS 的单个停滞请求也可能在其自己的每请求超时上失败,这在同一步骤上显示较短的消息:1767发往 AWS 的单个停滞请求也可能因其自身的单次请求超时而失败,此时同一步骤会显示一条较短的消息:

1729 1768 

1730```text theme={null}1769```text theme={null}

1731A request to AWS timed out. Check your network and proxy settings, then try again.1770A request to AWS timed out. Check your network and proxy settings, then try again.

1732```1771```

1733 1772 

1734当相同的超时在模型固定步骤上发生时,向导将模型标记为 `unreachable` 而不是显示任一消息。1773当相同的超时发生在模型固定步骤时,向导会将模型标记为 `unreachable`,而不显示上述任一消息。

1735 1774 

1736**应该做什么:**1775**解决方法:**

1737 1776 

1738* 在同一 shell 中运行 `aws sts get-caller-identity`。如果它也挂起,停滞在 Claude Code 外,在您的网络、您的代理或您的 AWS 配置文件中的凭证 helper 中;首先修复它。1777* 在同一 shell 中运行 `aws sts get-caller-identity`。如果它也卡住,则停滞发生在 Claude Code 之外,位于您的网络、代理或 AWS 配置文件中的凭据助手;请先修复该问题。

1739* 在打开向导之前完成任何交互式登录,例如 `aws sso login --profile myprofile`1778* 在打开向导之前完成所有交互式登录,例如 `aws sso login --profile myprofile`

1740* 如果您的 AWS 配置文件中的凭证 helper 合法需要超过 60 秒来提示您,使用 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 以毫秒为单位提高限制1779* 如果 AWS 配置文件中的凭据助手确实需要超过 60 秒来提示您,请使用 [`CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS`](/docs/zh-CN/env-vars) 以毫秒为单位提高该限制

1741 1780 

1742<h3 id="cloud-gateway-session-expired">1781<h3 id="cloud-gateway-session-expired">

1743 Cloud gateway 会话已过期1782 Cloud gateway session expired

1744</h3>1783</h3>

1745 1784 

1746您通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录,此机器上保存的网关会话已过期且无法更新,或网关不再接受它,例如在网关的 [JWT 密钥被替换](/docs/zh-CN/claude-apps-gateway-deploy#jwt-secret-rotation) 后。如果您在交互式启动 `claude` 时看到此行,会话已打开且未登录网关:1785您通过 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)登录,而保存在此机器上的网关会话已过期且无法续期,或者网关不再接受该会话,例如在网关的 [JWT 密钥被替换](/docs/zh-CN/claude-apps-gateway-deploy#jwt-secret-rotation)之后。如果您在以交互方式启动 `claude` 时看到这行消息,则表示会话已以未登录网关的状态打开:

1747 1786 

1748```text theme={null}1787```text theme={null}

1749Cloud gateway session expired — run /login to reconnect.1788Cloud gateway session expired — run /login to reconnect.

1750```1789```

1751 1790 

1752相同的行可能在会话中期出现,当网关凭证过期且 Claude Code 无法更新它时。1791当网关凭据过期且 Claude Code 无法续期时,同一行消息也可能在会话中途出现。

1753 1792 

1754在 [非交互式](/docs/zh-CN/headless) 运行、后台或其他无人值守会话或 `claude` 子命令(除 `claude auth` 外)中,Claude Code 改为在网关不再接受会话时以此消息退出:1793在[非交互](/docs/zh-CN/headless)运行、后台或其他无人值守会话,或除 `claude auth` 以外的 `claude` 子命令中,当网关不再接受该会话时,Claude Code 会改为显示以下消息并退出:

1755 1794 

1756```text theme={null}1795```text theme={null}

1757Cloud gateway <url> no longer accepts this session. Start `claude` and sign in again with /login.1796Cloud gateway <url> no longer accepts this session. Start `claude` and sign in again with /login.

1758```1797```

1759 1798 

1760**应该做什么:**1799**解决方法:**

1761 1800 

1762* 在会话中运行 `/login` 并完成浏览器登录1801* 在会话中运行 `/login` 并完成浏览器登录

1763* 对于非交互式启动,在同一环境中启动 `claude`,运行 `/login`,然后重新运行您的命令1802* 对于非交互式启动,请在同一环境中启动 `claude`,运行 `/login`,然后重新运行您的命令

1764 1803 

1765<h3 id="sign-in-timed-out-while-waiting-for-you-to-continue">1804<h3 id="sign-in-timed-out-while-waiting-for-you-to-continue">

1766 登录超时,等待您继续1805 Sign-in timed out while waiting for you to continue

1767</h3>1806</h3>

1768 1807 

1769在 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录期间,网关命名了登录的账户,Claude Code 要求您在保存凭证之前确认它。您将确认保持打开状态超过登录自己的过期,网关未颁发可更新它的刷新令牌,因此当您继续时 Claude Code 未存储任何内容:1808在 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)登录过程中,网关给出了已登录的账户,Claude Code 在保存凭据之前请您确认该账户。您让确认界面保持打开的时间超过了该次登录自身的有效期,且网关未签发可用于续期的刷新令牌,因此当您继续时,Claude Code 未存储任何内容:

1770 1809 

1771```text theme={null}1810```text theme={null}

1772Sign-in timed out while waiting for you to continue. Try again.1811Sign-in timed out while waiting for you to continue. Try again.

1773```1812```

1774 1813 

1775**应该做什么:**1814**解决方法:**

1776 1815 

1777* 再次运行 `/login` 并在登录过期之前确认账户1816* 再次运行 `/login`,并在登录过期之前确认账户

1778 1817 

1779<h3 id="gateway-refused-the-request">1818<h3 id="gateway-refused-the-request">

1780 Gateway 拒绝了请求1819 Gateway refused the request

1781</h3>1820</h3>

1782 1821 

1783您通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录,请求返回了 403:网关或其背后的上游拒绝了它。再次登录不会改变拒绝,因此消息指向您的网关管理员:1822您通过 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)登录,而某个请求返回了 403:网关或其背后的上游拒绝了该请求。重新登录不会改变拒绝结果,因此消息会提示您联系网关管理员:

1784 1823 

1785```text theme={null}1824```text theme={null}

1786Gateway refused the request · signing in again won't change this — check with your gateway administrator · API Error: 403 ...1825Gateway refused the request · signing in again won't change this — check with your gateway administrator · API Error: 403 ...

1787```1826```

1788 1827 

1789**应该做什么:**1828**解决方法:**

1790 1829 

1791* 要求您的网关管理员查找请求。`API Error:` 尾部携带网关返回的拒绝1830* 请您的网关管理员查询该请求。`API Error:` 之后的部分包含网关返回的拒绝信息

1792* 对于管理员:网关上的 [访问控制规则](/docs/zh-CN/claude-apps-gateway-config#http-tuning) 返回 403,[审计日志](/docs/zh-CN/claude-apps-gateway-deploy#logs) 记录其原因,上游的授权拒绝按 [上游错误消息](/docs/zh-CN/claude-apps-gateway-config#upstream-error-messages) 传递1831* 对于管理员:网关上的[访问控制规则](/docs/zh-CN/claude-apps-gateway-config#http-tuning)会返回 403,[审计日志](/docs/zh-CN/claude-apps-gateway-deploy#logs)会记录该 403 及其原因;上游的授权拒绝会按照[上游错误消息](/docs/zh-CN/claude-apps-gateway-config#upstream-error-messages)中的说明透传

1793 1832 

1794在 v2.1.273 之前,网关会话上的 403 显示通用 `Please run /login` 或 `Failed to authenticate` 消息,再次登录不会清除拒绝。1833在 v2.1.273 之前,网关会话上的 403 会改为显示通用的 `Please run /login` 或 `Failed to authenticate` 消息,且重新登录无法消除该拒绝。

1795 1834 

1796<h2 id="network-and-connection-errors">1835<h2 id="network-and-connection-errors">

1797 网络和连接错误1836 网络和连接错误


2132Context limit reached · /compact or /clear to continue2171Context limit reached · /compact or /clear to continue

2133```2172```

2134 2173 

2135当设置了 [`DISABLE_COMPACT`](/docs/zh-CN/env-vars) 时,该行仅显示 `/clear`。较长形式的错误,例如下面的压缩失败形式,保留 `Prompt is too long ·` 的措辞。在 `-p` 输出和记录中,文本保持为 `Prompt is too long`。2174当设置了 [`DISABLE_COMPACT`](/docs/zh-CN/env-vars) 时,该行仅显示 `/clear`。较长形式的错误,例如下面的压缩失败形式,保留 `Prompt is too long ·` 的措辞。在 `-p` 输出和会话记录中,文本保持为 `Prompt is too long`。

2136 2175 

2137当您在[用户设置](/docs/zh-CN/settings-reference#autocompactenabled)中关闭自动压缩时,该行也会显示:2176当您在[用户设置](/docs/zh-CN/settings-reference#autocompactenabled)中关闭自动压缩时,该行也会显示:

2138 2177 


2140Context limit reached · /compact or /clear to continue · auto-compact is off · /config to turn it on2179Context limit reached · /compact or /clear to continue · auto-compact is off · /config to turn it on

2141```2180```

2142 2181 

2143`/config` 中的**自动压缩**切换将 `autoCompactEnabled` 写入用户设置。该提示仅在 `/config` 更改会生效时出现。例如,当 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 或 [`DISABLE_COMPACT`](/docs/zh-CN/env-vars) 关闭自动压缩时,它不会出现。当更高优先级的范围(如项目或托管设置)将 `autoCompactEnabled` 设置为 `false` 时,它也不会出现。在 v2.1.235 之前,该行没有自动压缩提示。2182`/config` 中的**自动压缩**切换将 `autoCompactEnabled` 写入用户设置。该提示仅在 `/config` 更改会生效时出现。例如,当 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 或 [`DISABLE_COMPACT`](/docs/zh-CN/env-vars) 关闭自动压缩时,它不会出现。当更高优先级的作用域(如项目或托管设置)将 `autoCompactEnabled` 设置为 `false` 时,它也不会出现。在 v2.1.235 之前,该行没有自动压缩提示。

2144 2183 

2145Amazon Bedrock 将此条件报告为 `Input is too long for requested model.`,Claude Code 以相同方式处理。在 v2.1.217 之前,Claude Code 不识别 Bedrock 的措辞,因此自动压缩从不在其上触发,`/compact` 失败并显示相同错误。2184Amazon Bedrock 将此条件报告为 `Input is too long for requested model.`,Claude Code 以相同方式处理。在 v2.1.217 之前,Claude Code 不识别 Bedrock 的措辞,因此自动压缩从不在其上触发,`/compact` 失败并显示相同错误。

2146 2185 

2147[Claude apps gateway](/docs/zh-CN/claude-apps-gateway-config#upstream-error-messages) 在云上游以提供商自己的错误形状拒绝请求时,将此条件报告为 `capability_rejected: prompt_too_long`。Claude Code 将该令牌视为与 `Prompt is too long` 相同。在 v2.1.228 之前,Claude Code 不识别该令牌,因此自动压缩不会在其上触发。2186[Claude apps gateway](/docs/zh-CN/claude-apps-gateway-config#upstream-error-messages) 在云上游以提供商自己的错误形状拒绝请求时,将此条件报告为 `capability_rejected: prompt_too_long`。Claude Code 将该错误标识视为与 `Prompt is too long` 相同。在 v2.1.228 之前,Claude Code 不识别该错误标识,因此自动压缩不会在其上触发。

2148 2187 

2149当自动压缩在此轮上运行并因底层错误(如不可用的模型或身份验证失败)而失败时,该消息在分隔符后命名该错误:2188当自动压缩在此轮上运行并因底层错误(如不可用的模型或身份验证失败)而失败时,该消息在分隔符后命名该错误:

2150 2189 


2156 2195 

2157当自动压缩在此错误上运行时,它通常会总结您最早的交换并保留最新的。作为最后的手段,Claude Code 会以不同的方式总结:2196当自动压缩在此错误上运行时,它通常会总结您最早的交换并保留最新的。作为最后的手段,Claude Code 会以不同的方式总结:

2158 2197 

2159* 当它无法总结任何完整交换时,Claude Code 会逐字保留您最新的提示,并总结其前面的所有内容。2198* 当它无法总结任何完整交换时,Claude Code 会逐字保留您最新的提示词,并总结其前面的所有内容。

2160* 在这种情况下,当对话不以您的提示结尾时,Claude Code 会改为总结整个对话。2199* 在这种情况下,当对话不以您的提示词结尾时,Claude Code 会改为总结整个对话。

2161 2200 

2162当它将转发的内容不包含模型回复且您自己的文本少于约 1,000 个令牌(如在超大粘贴后发送的短重试)时,Claude Code 会跳过此恢复。运行 `/clear` 以重新开始。在 v2.1.269 之前,每当压缩无法总结完整交换时就会失败,因此处于该状态的会话在每一轮都会再次遇到此错误。2201当它将转发的内容不包含模型回复且您自己的文本少于约 1,000 个 token(如在超大粘贴后发送的短重试)时,Claude Code 会跳过此恢复。运行 `/clear` 以重新开始。在 v2.1.269 之前,每当压缩无法总结完整交换时就会失败,因此处于该状态的会话在每一轮都会再次遇到此错误。

2163 2202 

2164单交换对话没有更早的轮次可总结。当自动压缩会在其上运行时,Claude Code 会跳过尝试并解释请求中填充的内容。当 API 在其错误中不报告令牌计数时,消息读取:2203单交换对话没有更早的轮次可总结。当自动压缩会在其上运行时,Claude Code 会跳过尝试并解释请求中填充的内容。当 API 在其错误中不报告 token 计数时,消息读取:

2165 2204 

2166```text theme={null}2205```text theme={null}

2167Prompt is too long · this conversation is a single exchange and cannot be compacted — the request size comes mostly from system prompt, tool definitions, or attachments.2206Prompt is too long · this conversation is a single exchange and cannot be compacted — the request size comes mostly from system prompt, tool definitions, or attachments.

2168```2207```

2169 2208 

2170当 API 在其错误中报告令牌计数时,Claude Code 将其与对话大小的自己估计进行比较,以判断请求的大部分是什么:对话自己的内容,还是 Claude Code 与其一起发送的系统提示、工具定义和附件内容。当对话自己的内容是请求的大部分时,消息读取:2209当 API 在其错误中报告 token 计数时,Claude Code 将其与对话大小的自己估计进行比较,以判断请求的大部分是什么:对话自己的内容,还是 Claude Code 与其一起发送的系统提示词、工具定义和附件内容。当对话自己的内容是请求的大部分时,消息读取:

2171 2210 

2172```text theme={null}2211```text theme={null}

2173Prompt is too long · the request is ~<request tokens> tokens (limit <limit>) and this conversation's own content is most of it. A single-exchange conversation cannot be compacted; start with less content (smaller files or pasted text).2212Prompt is too long · the request is ~<request tokens> tokens (limit <limit>) and this conversation's own content is most of it. A single-exchange conversation cannot be compacted; start with less content (smaller files or pasted text).


2179Prompt is too long · the request is ~<request tokens> tokens (limit <limit>) but this conversation is only ~<conversation tokens> tokens — the rest is system prompt, tool definitions, and attachment content. A single-exchange conversation cannot be compacted; reduce attached files/tools or start with less context.2218Prompt is too long · the request is ~<request tokens> tokens (limit <limit>) but this conversation is only ~<conversation tokens> tokens — the rest is system prompt, tool definitions, and attachment content. A single-exchange conversation cannot be compacted; reduce attached files/tools or start with less context.

2180```2219```

2181 2220 

2182在 v2.1.162 之前,Claude Code 尝试了压缩,并在失败时显示裸露的 `Prompt is too long`。2221在 v2.1.162 之前,Claude Code 仍会尝试压缩,并在失败时显示裸露的 `Prompt is too long`。

2183 2222 

2184**要做什么:**2223**要做什么:**

2185 2224 

2186* 运行 `/compact` 以总结较早的轮次并释放空间,或运行 `/clear` 以重新开始。如果 `/compact` 回答 `Not enough messages to compact.`,则对话是单个交换,没有更早的内容可总结,因此空间由该单个提示和 Claude Code 与每个请求一起发送的内容占用:运行 `/clear` 并使用较少的粘贴文本或较小的附件重新发送,或使用下面的步骤减少工具定义和内存文件2225* 运行 `/compact` 以总结较早的轮次并释放空间,或运行 `/clear` 以重新开始。如果 `/compact` 回答 `Not enough messages to compact.`,则对话是单个交换,没有更早的内容可总结,因此空间由该单个提示词和 Claude Code 与每个请求一起发送的内容占用:运行 `/clear` 并使用较少的粘贴文本或较小的附件重新发送,或使用下面的步骤减少工具定义和记忆文件

2187* 运行 `/context` 以查看窗口消耗内容的分解:系统提示、工具、内存文件和消息2226* 运行 `/context` 以查看窗口消耗内容的分解:系统提示词、工具、记忆文件和消息

2188* 使用 `/mcp disable <name>` 禁用您未使用的 MCP 服务器,以从上下文中删除其工具定义2227* 使用 `/mcp disable <name>` 禁用您未使用的 MCP 服务器,以从上下文中删除其工具定义

2189* 修剪大型 `CLAUDE.md` 内存文件,或将说明移到仅在相关时加载的[路径范围规则](/docs/zh-CN/memory#path-specific-rules)中2228* 修剪大型 `CLAUDE.md` 记忆文件,或将说明移到仅在相关时加载的[路径范围规则](/docs/zh-CN/memory#path-specific-rules)中

2190* 自动压缩默认开启,通常可防止此错误。如果您在 `/config` 中或使用 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 关闭了它,请将其重新打开。如果您保持关闭,请在窗口填满之前自己运行 `/compact`。2229* 自动压缩默认开启,通常可防止此错误。如果您在 `/config` 中或使用 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 关闭了它,请将其重新打开。如果您保持关闭,请在窗口填满之前自己运行 `/compact`。

2191 2230 

2192有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/docs/zh-CN/context-window)。2231有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/docs/zh-CN/context-window)。

2193 2232 

2194<h3 id="context-exceeds-the-token-limit">2233<h3 id="context-exceeds-the-token-limit">

2195 上下文超过令牌限制2234 上下文超过 token 限制

2196</h3>2235</h3>

2197 2236 

2198`/context` 在其输出顶部显示此警告,当对话超过模型的上下文窗口时。请求失败,显示 [`Prompt is too long`](#prompt-is-too-long),直到您释放空间。交互式会话将该错误显示为 `Context limit reached` 行。2237当对话超过模型的上下文窗口时,`/context` 在其输出顶部显示此警告。在您释放空间之前,请求会失败并显示 [`Prompt is too long`](#prompt-is-too-long)。交互式会话将该错误显示为 `Context limit reached` 行。

2199 2238 

2200```text theme={null}2239```text theme={null}

2201Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.2240Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.


2220 请求过大2259 请求过大

2221</h3>2260</h3>

2222 2261 

2223原始请求体在令牌化之前超过了 API 的 32MB 限制,通常是由于大型粘贴内容、工具结果或附件。此限制与[上下文窗口](#prompt-is-too-long)分开。2262原始请求体在 token 化之前超过了 API 的 32MB 限制,通常是由于大型粘贴内容、工具结果或附件。此限制与[上下文窗口](#prompt-is-too-long)分开。

2224 2263 

2225```text theme={null}2264```text theme={null}

2226Request too large (max 32MB). Accumulated images and attachments in the conversation pushed the request over the limit. Run /compact, or double press esc to go back and remove attachments.2265Request too large (max 32MB). Accumulated images and attachments in the conversation pushed the request over the limit. Run /compact, or double press esc to go back and remove attachments.


2305pdftoppm is not installed. Install poppler-utils (e.g. `brew install poppler` or `apt-get install poppler-utils`) to enable PDF page rendering.2344pdftoppm is not installed. Install poppler-utils (e.g. `brew install poppler` or `apt-get install poppler-utils`) to enable PDF page rendering.

2306```2345```

2307 2346 

2308页面范围读取使用 `pdftoppm` 呈现页面。使用消息提供的命令安装 poppler-utils,或在其他平台上安装将 `pdftoppm` 放在您的 `PATH` 上的 poppler 构建。请参阅[Read 工具行为](/docs/zh-CN/tools-reference#read-tool-behavior)以了解哪些 PDF 按页面范围读取。2347页面范围读取使用 `pdftoppm` 呈现页面。使用消息提供的命令安装 poppler-utils,或在其他平台上安装将 `pdftoppm` 放在您的 `PATH` 上的 poppler 构建版本。请参阅[Read 工具行为](/docs/zh-CN/tools-reference#read-tool-behavior)以了解哪些 PDF 按页面范围读取。

2309 2348 

2310<h3 id="extra-inputs-are-not-permitted">2349<h3 id="extra-inputs-are-not-permitted">

2311 不允许额外输入2350 不允许额外输入


2317API Error: 400 ... Extra inputs are not permitted ... context_management2356API Error: 400 ... Extra inputs are not permitted ... context_management

2318```2357```

2319 2358 

2320Claude Code 发送 `context_management` 和 `effort` 等仅限测试版的字段,以及启用它们的 `anthropic-beta` 头。当网关转发正文但删除头时,API 会看到它不识别的字段。2359Claude Code 发送 `context_management` 等仅限测试版的字段,以及启用它们的 `anthropic-beta` 头。当网关转发正文但删除头时,API 会看到它不识别的字段。

2321 2360 

2322**要做什么:**2361**要做什么:**

2323 2362 

2324* 配置您的网关以转发 `anthropic-beta` 头。有关网关必须转发的内容,请参阅[功能传递](/docs/zh-CN/llm-gateway-protocol#feature-pass-through)。2363* 配置您的网关以转发 `anthropic-beta` 头。有关网关必须转发的内容,请参阅[功能传递](/docs/zh-CN/llm-gateway-protocol#feature-pass-through)。

2325* 作为后备,在启动前设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/docs/zh-CN/env-vars)。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities)涵盖确切范围。2364* 作为回退方案,在启动前设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/docs/zh-CN/env-vars)。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities)涵盖确切范围。

2326 2365 

2327<h3 id="tool-input-schema-is-invalid">2366<h3 id="tool-input-schema-is-invalid">

2328 工具输入架构无效2367 工具输入 schema 无效

2329</h3>2368</h3>

2330 2369 

2331请求中的工具声明了 `input_schema`,该架构未通过 API 的 JSON Schema 验证,因此 API 拒绝了整个请求。`tools.` 后的数字是失败工具在请求的工具列表中的位置,而不是您可以查找的名称。2370请求中的工具声明了 `input_schema`,该 schema 未通过 API 的 JSON Schema 验证,因此 API 拒绝了整个请求。`tools.` 后的数字是失败工具在请求的工具列表中的位置,而不是您可以查找的名称。

2332 2371 

2333```text theme={null}2372```text theme={null}

2334API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid2373API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid

2335API Error: 400 ... tools.N.custom.input_schema.properties: Property keys should match pattern '^[a-zA-Z0-9_.-]{1,64}$'2374API Error: 400 ... tools.N.custom.input_schema.properties: Property keys should match pattern '^[a-zA-Z0-9_.-]{1,64}$'

2336```2375```

2337 2376 

2338第一种形式意味着架构不是有效的 JSON Schema draft 2020-12。第二种意味着顶级属性名称与消息引用的模式不匹配。2377第一种形式意味着 schema 不是有效的 JSON Schema draft 2020-12。第二种意味着顶级属性名称与消息引用的模式不匹配。

2339 2378 

2340Claude Code [在加载服务器的工具时排除其输入架构会失败此验证的 MCP 工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas),因此请求通常永远不会包含一个。2379Claude Code [在加载服务器的工具时排除其输入 schema 会失败此验证的 MCP 工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas),因此请求通常永远不会包含一个。

2341 2380 

2342在[禁用标志获取的部署](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)上,或在标志从未到达的机器上,Claude Code 在服务器的日志中记录哪个工具会被拒绝,但仍然发送它,因此此错误仍然可能发生。2381在[禁用标志获取的部署](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)上,或在标志从未到达的机器上,Claude Code 在服务器的日志中记录哪个工具会被拒绝,但仍然发送它,因此此错误仍然可能发生。

2343 2382 

2344该错误也可能发生在其架构在 `$schema` 中声明 JSON Schema 方言(而不是 draft 2020-12)的工具上。Claude Code 不会根据 JSON Schema 元架构检查这些架构,尽管顶级属性名称检查仍然适用。2383该错误也可能发生在其 schema 在 `$schema` 中声明 JSON Schema 方言(而不是 draft 2020-12)的工具上。Claude Code 不会根据 JSON Schema 元 schema 检查这些 schema,尽管顶级属性名称检查仍然适用。

2345 2384 

2346在 v2.1.216 之前,没有部署运行排除检查。2385在 v2.1.216 之前,没有部署运行排除检查。

2347 2386 

2348**要做什么:**2387**要做什么:**

2349 2388 

2350* 如果您的 Claude Code 版本早于 v2.1.216,运行 `claude update`。2389* 如果您的 Claude Code 版本早于 v2.1.216,运行 `claude update`。

2351* 删除或[禁用](/docs/zh-CN/mcp#disable-a-server-without-removing-it)声明无效架构的 MCP 服务器。该错误仅按位置命名工具。在 v2.1.216 或更高版本上,检查每个服务器的日志,查找命名其输入架构会被拒绝的工具的行。如果没有日志命名一个,一次禁用一个服务器。2390* 删除或[禁用](/docs/zh-CN/mcp#disable-a-server-without-removing-it)声明无效 schema 的 MCP 服务器。该错误仅按位置命名工具。在 v2.1.216 或更高版本上,检查每个服务器的日志,查找命名其输入 schema 会被拒绝的工具的行。如果没有日志命名一个,一次禁用一个服务器。

2352* 如果您维护服务器,请修复工具的 `input_schema`。架构必须是有效的 JSON Schema,顶级属性名称必须为 1 到 64 个字符长,并仅使用 ASCII 字母和数字、`_`、`.` 和 `-`。请参阅[具有无效输入架构的工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas)。2391* 如果您维护服务器,请修复工具的 `input_schema`。schema 必须是有效的 JSON Schema,顶级属性名称必须为 1 到 64 个字符长,并仅使用 ASCII 字母和数字、`_`、`.` 和 `-`。请参阅[具有无效输入 schema 的工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas)。

2353 2392 

2354<h3 id="tool-use-name-over-200-characters">2393<h3 id="tool-use-name-over-200-characters">

2355 tool\_use.name 超过 200 个字符2394 tool\_use.name 超过 200 个字符


2361API Error: 400 ... tool_use.name: String should have at most 200 characters2400API Error: 400 ... tool_use.name: String should have at most 200 characters

2362```2401```

2363 2402 

2364Claude Code 在响应到达时以及加载保存的对话时将这样的名称切割为 200 个字符,因此调用失败,显示普通的 `No such tool available` 工具错误,对话继续而不显示此 API 错误。2403Claude Code 在响应到达时以及加载保存的对话时将这样的名称截断为 200 个字符,因此该调用会失败并显示 [`No such tool available`](#no-such-tool-available) 工具错误,对话继续而不显示此 API 错误。

2365 2404 

2366**要做什么:**2405**要做什么:**

2367 2406 

2368* 运行 `claude update`,然后恢复对话。更新的版本在加载记录时修复过长的名称,因此卡住的对话再次工作。2407* 运行 `claude update`,然后恢复对话。更新的版本在加载会话记录时修复过长的名称,因此卡住的对话再次工作。

2369 2408 

2370在 v2.1.281 之前,过长的名称保留在历史中,API 拒绝了重新发送对话的每个请求,包括 `/compact` 和 `--resume`,因此此错误重复,对话被卡住。2409在 v2.1.281 之前,过长的名称保留在历史中,API 拒绝了重新发送对话的每个请求,包括 `/compact` 和 `--resume`,因此此错误重复,对话被卡住。

2371 2410 


2373 所选模型存在问题2412 所选模型存在问题

2374</h3>2413</h3>

2375 2414 

2376配置的模型名称未被识别,或您的帐户无权访问它。从 v2.1.160 开始,尾部提示(此处以其交互形式显示)因表面而异。2415配置的模型名称未被识别,或您的帐户无权访问它。从 v2.1.160 开始,尾部提示(此处以其交互形式显示)因使用入口而异。

2377 2416 

2378```text theme={null}2417```text theme={null}

2379There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to pick a different model.2418There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to pick a different model.


2382**要做什么:**2421**要做什么:**

2383 2422 

2384* **交互式 CLI**:运行 `/model` 从您帐户可用的模型中选择。2423* **交互式 CLI**:运行 `/model` 从您帐户可用的模型中选择。

2385* **非交互模式 (`-p`)**:使用有效的别名或 ID 传递 `--model`,或设置 [`ANTHROPIC_MODEL`](/docs/zh-CN/env-vars)。错误文本在此表面上显示 `Run --model`。2424* **非交互模式 (`-p`)**:使用有效的别名或 ID 传递 `--model`,或设置 [`ANTHROPIC_MODEL`](/docs/zh-CN/env-vars)。错误文本在此使用入口上显示 `Run --model`。

2386* **Agent SDK**:错误文本省略提示,因为模型是以编程方式设置的。在 TypeScript 中的 [`Options` 上设置 `model`](/docs/zh-CN/agent-sdk/typescript#options),或在 Python 中设置 [`ClaudeAgentOptions(model=...)`](/docs/zh-CN/agent-sdk/python#claudeagentoptions),并处理结构化的 `model_not_found` 错误以显示您自己的重试或模型选择器。2425* **Agent SDK**:错误文本省略提示,因为模型是以编程方式设置的。在 TypeScript 中的 [`Options` 上设置 `model`](/docs/zh-CN/agent-sdk/typescript#options),或在 Python 中设置 [`ClaudeAgentOptions(model=...)`](/docs/zh-CN/agent-sdk/python#claudeagentoptions),并处理结构化的 `model_not_found` 错误以显示您自己的重试或模型选择器。

2387* 使用别名(如 `sonnet` 或 `opus`)而不是完整的版本化 ID。别名解析为维护的默认值,因此它们不会过时。请参阅[模型配置](/docs/zh-CN/model-config)。2426* 使用别名(如 `sonnet` 或 `opus`)而不是完整的版本化 ID。别名解析为维护的默认值,因此它们不会过时。请参阅[模型配置](/docs/zh-CN/model-config)。

2388* 如果错误的模型在 CLI 中不断返回,则某处设置了过时的 ID。按[优先级顺序](/docs/zh-CN/model-config#setting-your-model)检查您可以设置模型的位置,并删除过时的值。2427* 如果错误的模型在 CLI 中不断返回,则某处设置了过时的 ID。按[优先级顺序](/docs/zh-CN/model-config#setting-your-model)检查您可以设置模型的位置,并删除过时的值。


2416 模型未找到2455 模型未找到

2417</h3>2456</h3>

2418 2457 

2419您使用名称切换到模型,Claude Code 无法确认存在具有该名称的模型。当名称不是 [model alias](/docs/zh-CN/model-config#model-aliases) 或 Claude Code 在本地接受的另一种拼写时,Claude Code 使用最小 API 请求验证它,此错误通常是您的 API 端点的答案。使用 `/model <name>` 时,无法成为模型 ID 的名称(如包含空格的名称)会获得相同的消息。2458您使用名称切换到模型,Claude Code 无法确认存在具有该名称的模型。当名称不是[模型别名](/docs/zh-CN/model-config#model-aliases)或 Claude Code 在本地接受的另一种拼写时,Claude Code 使用最小 API 请求验证它,此错误通常是您的 API 端点的答案。使用 `/model <name>` 时,无法成为模型 ID 的名称(如包含空格的名称)会获得相同的消息。

2420 2459 

2421```text theme={null}2460```text theme={null}

2422Model 'claude-opus-9' not found2461Model 'claude-opus-9' not found

2423```2462```

2424 2463 

2425在具有提供商特定模型 ID 的提供商上,消息可能会添加 `Try '...' instead` 建议,该建议命名您提供商的后备模型 ID。2464在具有提供商特定模型 ID 的提供商上,消息可能会添加 `Try '...' instead` 建议,该建议命名您提供商的备用模型 ID。

2426 2465 

2427**要做什么:**2466**要做什么:**

2428 2467 

2429* 运行 `/model` 不带参数并从您帐户可用的模型中选择,或使用 [model alias](/docs/zh-CN/model-config#model-aliases)(如 `sonnet`),它解析为维护的默认值2468* 运行 `/model` 不带参数并从您帐户可用的模型中选择,或使用[模型别名](/docs/zh-CN/model-config#model-aliases)(如 `sonnet`),它解析为维护的默认值

2430* 如果您输入了完整 ID,请根据您提供商的模型目录检查它。新推出的模型可能在 Anthropic API 上可用,但您的提供商或地区尚未提供。2469* 如果您输入了完整 ID,请根据您提供商的模型目录检查它。新推出的模型可能在 Anthropic API 上可用,但您的提供商或地区尚未提供。

2431* 在 Agent SDK 中,`setModel()` 失败,显示此消息,会话继续在其前一个模型上运行。在 TypeScript SDK 中,调用 [`supportedModels()`](/docs/zh-CN/agent-sdk/typescript#query-object) 以列出您可以切换到的模型。2470* 在 Agent SDK 中,`setModel()` 失败,显示此消息,会话继续在其前一个模型上运行。在 TypeScript SDK 中,调用 [`supportedModels()`](/docs/zh-CN/agent-sdk/typescript#query-object) 以列出您可以切换到的模型。

2432* 在 v2.1.265 之前,`/model` 也以此错误拒绝了 `opusplan[1m]` 别名拼写。在这些版本上,更新 Claude Code,或在[设置](/docs/zh-CN/model-config#setting-your-model)中或使用 `--model` 设置模型。2471* 在 v2.1.265 之前,`/model` 也以此错误拒绝了 `opusplan[1m]` 别名拼写。在这些版本上,更新 Claude Code,或在[设置](/docs/zh-CN/model-config#setting-your-model)中或使用 `--model` 设置模型。


2435 无法通过 API 确认模型2474 无法通过 API 确认模型

2436</h3>2475</h3>

2437 2476 

2438您通过 [Agent SDK](/docs/zh-CN/agent-sdk/typescript) `setModel()` 方法或运行 Claude Code CLI 的应用程序(如 [Desktop app](/docs/zh-CN/desktop))切换了模型,确认模型 ID 与您的 API 端点的请求在五秒内没有得到答复。会话保持其当前模型。2477您通过 [Agent SDK](/docs/zh-CN/agent-sdk/typescript) `setModel()` 方法或运行 Claude Code CLI 的应用程序(如 [Desktop app](/docs/zh-CN/desktop))切换了模型,向您的 API 端点确认模型 ID 的请求在五秒内没有得到答复。会话保持其当前模型。

2439 2478 

2440```text theme={null}2479```text theme={null}

2441Couldn't confirm model "claude-sonnet-5" with the API. Try again, or run /model to see available models.2480Couldn't confirm model "claude-sonnet-5" with the API. Try again, or run /model to see available models.


2475Claude Opus is not available with the Claude Pro plan. If you have updated your subscription plan recently, run /logout and /login for the plan to take effect.2514Claude Opus is not available with the Claude Pro plan. If you have updated your subscription plan recently, run /logout and /login for the plan to take effect.

2476```2515```

2477 2516 

2478在 Claude Desktop app 运行的会话中,消息说改为`登出并登入`而不是命名命令。2517在 Claude Desktop app 运行的会话中,消息会提示 `sign out and sign in again`,而不是命名命令。

2479 2518 

2480**要做什么:**2519**要做什么:**

2481 2520 


2503 2542 

2504**要做什么:**2543**要做什么:**

2505 2544 

2506更新该二进制文件,然后启动新会话。二进制文件的来源决定了如何,除了在[自托管环境](/docs/zh-CN/self-hosted-environments-deploy#pin-the-version)中:2545更新该二进制文件,然后启动新会话。二进制文件的来源决定了如何更新,除了在[自托管环境](/docs/zh-CN/self-hosted-environments-deploy#pin-the-version)中:

2507 2546 

2508| 发出请求的二进制文件 | 如何更新它 |2547| 发出请求的二进制文件 | 如何更新它 |

2509| :- | :- |2548| :- | :- |

2510| 您安装的 Claude Code | 运行 `claude update` |2549| 您安装的 Claude Code | 运行 `claude update` |

2511| Claude desktop app | 更新应用 |2550| Claude desktop app | 更新应用 |

2512| [VS Code extension](/docs/zh-CN/vs-code) 捆绑的二进制文件 | 更新扩展 |2551| [VS Code extension](/docs/zh-CN/vs-code) 捆绑的二进制文件 | 更新扩展 |

2513| Agent SDK 包捆绑的二进制文件 | [升级 SDK 包](/docs/zh-CN/agent-sdk/hosting#runtime-dependencies),然后重启您的应用程序。在[编译的单文件可执行文件](/docs/zh-CN/agent-sdk/typescript#compile-to-a-single-executable)中,重建它 |2552| Agent SDK 包捆绑的二进制文件 | [升级 SDK 包](/docs/zh-CN/agent-sdk/hosting#runtime-dependencies),然后重启您的应用程序。在[编译的单文件可执行文件](/docs/zh-CN/agent-sdk/typescript#compile-to-a-single-executable)中,重新构建它 |

2514 2553 

2515* 对于按模型措辞,您可以通过切换到另一个模型来继续在当前会话中工作:在 CLI 中运行 `/model`,在流式输入模式下的 TypeScript SDK 的 `Query` 对象上调用 [`setModel()`](/docs/zh-CN/agent-sdk/typescript#query-object),或在 Python SDK 的 `ClaudeSDKClient` 上调用 [`set_model()`](/docs/zh-CN/agent-sdk/python#claudesdkclient)2554* 对于按模型措辞,您可以通过切换到另一个模型来继续在当前会话中工作:在 CLI 中运行 `/model`,在流式输入模式下的 TypeScript SDK 的 `Query` 对象上调用 [`setModel()`](/docs/zh-CN/agent-sdk/typescript#query-object),或在 Python SDK 的 `ClaudeSDKClient` 上调用 [`set_model()`](/docs/zh-CN/agent-sdk/python#claudesdkclient)

2516* 对于组织政策措辞,在继续之前更新2555* 对于组织政策措辞,在继续之前更新


2519 模型受您的组织设置限制2558 模型受您的组织设置限制

2520</h3>2559</h3>

2521 2560 

2522您的组织管理员在 claude.ai 管理控制台中禁用了此模型,或托管设置中的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表或 [`deniedModels`](/docs/zh-CN/model-config#block-specific-models-or-versions) 列表排除了它。当受限制的模型使用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置设置时,通知在启动时出现,并命名会话使用的模型。如果托管设置没有为会话留下允许的模型,请参阅[托管设置阻止默认模型](#managed-settings-block-the-default-model)。替换通知也可能在会话中期出现,在组织管理员在 claude.ai 管理控制台中禁用会话正在运行的模型之后。2561您的组织管理员在 claude.ai 管理控制台中禁用了此模型,或托管设置中的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表或 [`deniedModels`](/docs/zh-CN/model-config#block-specific-models-or-versions) 列表排除了它。当 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置指定了受限制的模型时,通知在启动时出现,并命名会话改用的模型。如果托管设置没有为会话留下允许的模型,请参阅[托管设置阻止默认模型](#managed-settings-block-the-default-model)。在管理员于 claude.ai 管理控制台中禁用会话正在运行的模型之后,替换通知也可能在会话中途出现。

2523 2562 

2524```text theme={null}2563```text theme={null}

2525Model "claude-opus-4-8" is restricted by your organization's settings. Using claude-sonnet-4-6 instead.2564Model "claude-opus-4-8" is restricted by your organization's settings. Using claude-sonnet-4-6 instead.


2527 2566 

2528为受限制的模型键入 `/model <name>` 被拒绝,会话保持其当前模型。对于在管理控制台中禁用的模型,拒绝读取 `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.`。对于托管设置排除的模型,它读取 `Model '<name>' is not available. Your organization restricts model selection.`2567为受限制的模型键入 `/model <name>` 被拒绝,会话保持其当前模型。对于在管理控制台中禁用的模型,拒绝读取 `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.`。对于托管设置排除的模型,它读取 `Model '<name>' is not available. Your organization restricts model selection.`

2529 2568 

2530以代理、技能或命令名称为前缀的通知意味着限制适用于该[子代理的请求模型](/docs/zh-CN/sub-agents#choose-a-model):子代理在替换模型上运行,您的会话模型保持不变。在 v2.1.223 之前,Claude Code 仅为使用 Agent 工具启动的子代理显示通知。2569以 Agent、skill 或命令名称为前缀的通知意味着限制适用于该[子代理的请求模型](/docs/zh-CN/sub-agents#choose-a-model):子代理在替换模型上运行,您的会话模型保持不变。在 v2.1.223 之前,Claude Code 仅为使用 Agent 工具启动的子代理显示通知。

2531 2570 

2532Claude Code 将模型族别名(`opus`、`sonnet`、`haiku` 或 `fable` 之一)视为对该族的请求,而不是对其最新版本的请求。在 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 上,受限制的族别名解析为您的组织的设置允许的族的最新版本,替换通知命名该版本。Claude Code 仅当族的每个版本都受限制时才拒绝 `/model <alias>`。在 v2.1.205 之前,族别名基于其最新版本单独被替换或拒绝,即使同一族的较旧版本被允许。2571Claude Code 将模型族别名(`opus`、`sonnet`、`haiku` 或 `fable` 之一)视为对该族的请求,而不是对其最新版本的请求。在 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 上,受限制的族别名解析为您的组织的设置允许的族的最新版本,替换通知命名该版本。Claude Code 仅当族的每个版本都受限制时才拒绝 `/model <alias>`。在 v2.1.205 之前,族别名仅基于其最新版本被替换或拒绝,即使同一族的较旧版本被允许。

2533 2572 

2534**要做什么:**2573**要做什么:**

2535 2574 

2536* 运行 `/model` 从您的组织允许的模型中选择。受限制的模型从选择器中隐藏。2575* 运行 `/model` 从您的组织允许的模型中选择。受限制的模型从选择器中隐藏。

2537* 如果受限制的模型在 `--model`、`ANTHROPIC_MODEL`、设置文件的 `model` 字段或[子代理](/docs/zh-CN/sub-agents#choose-a-model)、技能或命令的 `model` frontmatter 中设置,删除或更新该值,以便通知不会再次出现2576* 如果受限制的模型在 `--model`、`ANTHROPIC_MODEL`、设置文件的 `model` 字段或[子代理](/docs/zh-CN/sub-agents#choose-a-model)、skill 或命令的 `model` frontmatter 中设置,删除或更新该值,以便通知不会再次出现

2538* 如果您需要访问受限制的模型,请要求您的组织管理员启用它。请参阅[组织模型限制](/docs/zh-CN/model-config#organization-model-restrictions)。2577* 如果您需要访问受限制的模型,请要求您的组织管理员启用它。请参阅[组织模型限制](/docs/zh-CN/model-config#organization-model-restrictions)。

2539 2578 

2540<h3 id="cant-switch-to-the-default-model">2579<h3 id="cant-switch-to-the-default-model">


2559* 要求您的管理员更新消息命名的托管设置2598* 要求您的管理员更新消息命名的托管设置

2560* 对于 `couldn't read` 措辞,重启 Claude Code;如果它继续发生,要求您的管理员检查托管设置2599* 对于 `couldn't read` 措辞,重启 Claude Code;如果它继续发生,要求您的管理员检查托管设置

2561 2600 

2562如果会话改为在这些托管设置下以 `Claude Code can't start` 消息失败启动,请参阅[托管设置阻止默认模型](#managed-settings-block-the-default-model)。2601如果会话改为在这些托管设置下以 `Claude Code can't start` 消息启动失败,请参阅[托管设置阻止默认模型](#managed-settings-block-the-default-model)。

2563 2602 

2564<h3 id="model-switch-was-blocked-by-a-premodelswitch-hook">2603<h3 id="model-switch-was-blocked-by-a-premodelswitch-hook">

2565 模型切换被 PreModelSwitch hook 阻止2604 模型切换被 PreModelSwitch hook 阻止


2576* **hook 写入的原因**:PreModelSwitch hook 在[拒绝切换或要求确认](/docs/zh-CN/hooks#premodelswitch-decision-control)时提供了该原因。解决它要求的内容,或选择您的 hook 允许的模型。2615* **hook 写入的原因**:PreModelSwitch hook 在[拒绝切换或要求确认](/docs/zh-CN/hooks#premodelswitch-decision-control)时提供了该原因。解决它要求的内容,或选择您的 hook 允许的模型。

2577* **`PreModelSwitch hook <name> did not respond before its timeout`**:在其[超时](/docs/zh-CN/hooks#timeouts)之前不回答的 hook 阻止切换。修复挂起的命令或提高该 hook 的 `timeout`,然后再次切换。2616* **`PreModelSwitch hook <name> did not respond before its timeout`**:在其[超时](/docs/zh-CN/hooks#timeouts)之前不回答的 hook 阻止切换。修复挂起的命令或提高该 hook 的 `timeout`,然后再次切换。

2578* **`confirmation required, and this session cannot ask`**:hook 回答 `ask` 而没有原因,控制请求无法显示确认提示。[`-p` 运行](/docs/zh-CN/headless)中的 `/model` 命令以原因后的 `(run /model interactively to confirm)` 报告相同条件。从交互式会话进行切换,或更改 hook 对此模型的决定。2617* **`confirmation required, and this session cannot ask`**:hook 回答 `ask` 而没有原因,控制请求无法显示确认提示。[`-p` 运行](/docs/zh-CN/headless)中的 `/model` 命令以原因后的 `(run /model interactively to confirm)` 报告相同条件。从交互式会话进行切换,或更改 hook 对此模型的决定。

2579* **`so organization-managed PreModelSwitch hooks could not be checked`**:Claude Code 无法判断您的组织的[托管插件](/docs/zh-CN/settings-reference#enabledplugins)提供哪些 PreModelSwitch hook,例如因为托管插件加载失败。这些 hook 之一可能阻止切换,因此 Claude Code 拒绝而不是应用未检查的切换。原因的开始命名失败的内容。Claude Code 在每次切换尝试时重新检查,因此已清除的失败停止阻止;如果它继续失败,运行 `claude --debug` 并再次切换以捕获详细信息,然后修复插件或要求您的管理员修复它。2618* **`so organization-managed PreModelSwitch hooks could not be checked`**:Claude Code 无法判断您的组织的[托管插件](/docs/zh-CN/settings-reference#enabledplugins)提供哪些 PreModelSwitch hook,例如因为托管插件加载失败。这些 hook 之一可能阻止切换,因此 Claude Code 拒绝而不是应用未检查的切换。原因的开头命名失败的内容。Claude Code 在每次切换尝试时重新检查,因此已清除的失败不再阻止;如果它继续失败,运行 `claude --debug` 并再次切换以捕获详细信息,然后修复插件或要求您的管理员修复它。

2580* **`a PreModelSwitch hook failed before answering`** 或 **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**:hook 运行在没有判决的情况下结束,Claude Code 不将其视为批准。运行 `claude --debug` 以查看失败的内容,然后再次切换。2619* **`a PreModelSwitch hook failed before answering`** 或 **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**:hook 运行在没有判决的情况下结束,Claude Code 不将其视为批准。运行 `claude --debug` 以查看失败的内容,然后再次切换。

2581 2620 

2582在 v2.1.260 之前,托管插件拒绝读取 `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`。Claude Code 重试了一次插件加载,然后在会话中拒绝了后来的切换,即使您的组织没有管理任何插件。在这些版本上重启会话以再次运行插件加载。2621在 v2.1.260 之前,托管插件拒绝读取 `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`。Claude Code 重试了一次插件加载,然后在会话中拒绝了后来的切换,即使您的组织没有管理任何插件。在这些版本上重启会话以再次运行插件加载。


2585 无法将其保存为您的默认值2624 无法将其保存为您的默认值

2586</h3>2625</h3>

2587 2626 

2588您选择了一个模型以保存为您的默认值,例如使用 `/model <name>` 或 `/model` 选择器中的 Enter,Claude Code 无法将选择写入您的用户设置文件 `~/.claude/settings.json`。切换本身已应用,因此当前会话在您选择的模型上运行,但您的默认值保持不变,下一个会话在旧值上启动。2627您选择了一个模型以保存为您的默认值,例如使用 `/model <name>` 或 `/model` 选择器中的 `Enter`,Claude Code 无法将选择写入您的用户设置文件 `~/.claude/settings.json`。切换本身已应用,因此当前会话在您选择的模型上运行,但您的默认值保持不变,下一个会话在旧值上启动。

2589 2628 

2590```text theme={null}2629```text theme={null}

2591Set model to Fable 5.1 for this session only · couldn't save it as your default: ~/.claude/settings.json can't be written (EROFS)2630Set model to Fable 5.1 for this session only · couldn't save it as your default: ~/.claude/settings.json can't be written (EROFS)


2594文件路径后的原因说明失败的内容:2633文件路径后的原因说明失败的内容:

2595 2634 

2596* **`can't be written (<code>)`**:写入失败,显示括号中的操作系统错误代码,如 `EROFS`(当文件或其链接到的文件位于拒绝写入的文件系统上时)。使文件可写并再次切换。如果另一个工具生成文件,请在该工具中设置 `model` 键;请参阅[您在 Claude Code 中所做的更改在新会话中丢失](/docs/zh-CN/settings#a-change-you-made-in-claude-code-is-lost-in-new-sessions)。2635* **`can't be written (<code>)`**:写入失败,显示括号中的操作系统错误代码,如 `EROFS`(当文件或其链接到的文件位于拒绝写入的文件系统上时)。使文件可写并再次切换。如果另一个工具生成文件,请在该工具中设置 `model` 键;请参阅[您在 Claude Code 中所做的更改在新会话中丢失](/docs/zh-CN/settings#a-change-you-made-in-claude-code-is-lost-in-new-sessions)。

2597* **`isn't valid JSON`**:磁盘上的文件不解析,Claude Code 保持不动而不是覆盖它无法读回的内容。修复语法错误,然后再次切换;请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。2636* **`isn't valid JSON`**:磁盘上的文件无法解析,Claude Code 保持不动而不是覆盖它无法读回的内容。修复语法错误,然后再次切换;请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。

2598 2637 

2599以 `couldn't confirm it was saved as your default (~/.claude/settings.json is still being written)` 结尾的通知意味着写入在三秒后未完成。它在后台继续,因此默认值可能仍然被保存;检查您的下一个会话启动的模型,或再次运行 `/model <name>`。2638以 `couldn't confirm it was saved as your default (~/.claude/settings.json is still being written)` 结尾的通知意味着写入在三秒后未完成。它在后台继续,因此默认值可能仍然被保存;检查您的下一个会话启动的模型,或再次运行 `/model <name>`。

2600 2639 

2601在 v2.1.265 之前,通知说模型被`保存为您的新会话默认值`,即使写入失败。2640在 v2.1.265 之前,即使写入失败,通知也会说模型已 `saved as your default for new sessions`。

2641 

2642<h3 id="advisor-is-less-capable-than-the-current-main-model">

2643 Advisor 的能力低于当前主模型

2644</h3>

2645 

2646您的 [advisor 模型](/docs/zh-CN/advisor)排名低于会话的主模型,因此 Claude Code 保留该选择,但不会将 advisor 附加到主模型的请求上。

2647 

2648```text theme={null}

2649Advisor set to Opus 4.8

2650Note: Opus 4.8 is less capable than the current main model (Sonnet 5.5), so the advisor will not activate. Choose a more capable advisor, or switch to a smaller main model.

2651```

2652 

2653其他消息报告相同的情况:

2654 

2655* 在交互式会话中,通知显示 `Advisor will not activate on the main model (advisor is less capable); subagents may still use it and may use more tokens · /advisor`。

2656* 使用 `--advisor` 标志启动时,警告显示 `"<advisor>" cannot advise "<main model>" (the advisor must be at least as capable as the main model). The advisor will not be used for the main model.`,会话仍会启动。

2657 

2658**要做什么:**

2659 

2660* 选择排名更高的 advisor 或排名更低的主模型。[选择 advisor 模型](/docs/zh-CN/advisor#choose-an-advisor-model)展示了排名,并列出每个主模型可接受的 advisor。

2661* 如果您希望该 advisor 能够为其模型提供建议的[子代理](/docs/zh-CN/sub-agents)继续使用它,请保留 advisor 设置

2662 

2663在 v2.1.287 之前,Claude Code 对若干组合的排名不同。它会在 Sonnet 5.5 advisor 搭配 Opus 4.7 或 Opus 4.8 主模型时显示此提示,而现在接受该组合。它还会附加一些现在会产生此提示的 advisor,例如 Opus 4.8 advisor 搭配 Sonnet 5.5 主模型。

2602 2664 

2603<h3 id="thinking-type-enabled-is-not-supported-for-this-model">2665<h3 id="thinking-type-enabled-is-not-supported-for-this-model">

2604 thinking.type.enabled 此模型不支持2666 thinking.type.enabled 此模型不支持


2617* 如果您在 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中遇到这个,升级 SDK 包。Opus 4.8 需要 TypeScript SDK v0.3.154 或更高版本和 Python SDK v0.2.88 或更高版本。Sonnet 5 需要 TypeScript SDK v0.3.197 或更高版本。Opus 5 需要 TypeScript SDK v0.3.219 或更高版本。Opus 5.5 需要 TypeScript SDK v0.3.280 或更高版本。Sonnet 5.5 需要 TypeScript SDK v0.3.284 或更高版本2679* 如果您在 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中遇到这个,升级 SDK 包。Opus 4.8 需要 TypeScript SDK v0.3.154 或更高版本和 Python SDK v0.2.88 或更高版本。Sonnet 5 需要 TypeScript SDK v0.3.197 或更高版本。Opus 5 需要 TypeScript SDK v0.3.219 或更高版本。Opus 5.5 需要 TypeScript SDK v0.3.280 或更高版本。Sonnet 5.5 需要 TypeScript SDK v0.3.284 或更高版本

2618 2680 

2619<h3 id="effort-isnt-available-with-thinking-turned-off">2681<h3 id="effort-isnt-available-with-thinking-turned-off">

2620 关闭思考时努力不可用2682 关闭思考时 effort 不可用

2621</h3>2683</h3>

2622 2684 

2623您关闭了[扩展思考](/docs/zh-CN/model-config#extended-thinking)并以[努力级别](/docs/zh-CN/model-config#adjust-effort-level)高于 `high` 运行。模型不接受该组合,因此 API 拒绝了请求。2685您关闭了[扩展思考](/docs/zh-CN/model-config#extended-thinking)并以高于 `high` 的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)运行。模型不接受该组合,因此 API 拒绝了请求。

2624 2686 

2625```text theme={null}2687```text theme={null}

2626API Error: Effort 'xhigh' isn't available with thinking turned off on this model · run /effort high to continue, or turn thinking back on (unset MAX_THINKING_TOKENS=0)2688API Error: Effort 'xhigh' isn't available with thinking turned off on this model · run /effort high to continue, or turn thinking back on (unset MAX_THINKING_TOKENS=0)


2630 2692 

2631**要做什么:**2693**要做什么:**

2632 2694 

2633* [降低努力级别](/docs/zh-CN/model-config#set-the-effort-level)到 `high` 或以下。2695* [降低 effort 级别](/docs/zh-CN/model-config#set-the-effort-level)到 `high` 或以下。

2634* 打开思考,例如通过取消设置 [`MAX_THINKING_TOKENS`](/docs/zh-CN/env-vars) 或从您的设置中删除 [`"alwaysThinkingEnabled": false`](/docs/zh-CN/settings-reference#alwaysthinkingenabled)。2696* 重新打开思考,例如通过取消设置 [`MAX_THINKING_TOKENS`](/docs/zh-CN/env-vars) 或从您的设置中删除 [`"alwaysThinkingEnabled": false`](/docs/zh-CN/settings-reference#alwaysthinkingenabled)。

2635 2697 

2636在 v2.1.242 之前,Claude Code 显示了 API 自己的消息:`API Error: 400 output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.` 在 v2.1.251 之前,Claude Code 以您设置的努力级别发送请求,因此 Opus 5 拒绝了关闭思考时高于 `high` 的每个请求。Claude Code 现在向它知道拒绝该组合的模型(如 Opus 5)发送努力 `high`。2698在 v2.1.242 之前,Claude Code 显示了 API 自己的消息:`API Error: 400 output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.` 在 v2.1.251 之前,Claude Code 以您设置的 effort 级别发送请求,因此 Opus 5 拒绝了关闭思考时高于 `high` 的每个请求。Claude Code 现在向它知道拒绝该组合的模型(如 Opus 5)改为发送 effort `high`。

2637 2699 

2638<h3 id="thinking-budget-exceeds-output-limit">2700<h3 id="thinking-budget-exceeds-output-limit">

2639 思考预算超过输出限制2701 思考预算超过输出限制


2647 2709 

2648**要做什么:**2710**要做什么:**

2649 2711 

2650* 提高 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/docs/zh-CN/env-vars) 高于思考预算2712* 将 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/docs/zh-CN/env-vars) 提高到思考预算以上

2651* 请参阅[扩展思考](/docs/zh-CN/model-config#extended-thinking)以了解预算如何与输出长度交互2713* 请参阅[扩展思考](/docs/zh-CN/model-config#extended-thinking)以了解预算如何与输出长度交互

2652 2714 

2653<h3 id="tool-use-or-thinking-block-mismatch">2715<h3 id="tool-use-or-thinking-block-mismatch">


2668 2730 

2669**要做什么:**2731**要做什么:**

2670 2732 

2671* 如果您使用 Opus 4.7 或 Opus 4.8,首先运行 `claude update`。v2.1.156 之前的版本可以在正常工具使用期间触发此错误,`/rewind` 不会清除它。2733* 如果您使用 Opus 4.7 或 Opus 4.8,首先运行 `claude update`。v2.1.156 之前的版本可能在正常工具使用期间触发此错误,`/rewind` 不会清除它。

2672* 运行 `/rewind`,或按 Esc 两次,回退到损坏轮次之前的检查点并从那里继续。请参阅[检查点](/docs/zh-CN/checkpointing)以了解如何创建和恢复检查点。2734* 运行 `/rewind`,或按 Esc 两次,回退到损坏轮次之前的检查点并从那里继续。请参阅[检查点](/docs/zh-CN/checkpointing)以了解如何创建和恢复检查点。

2673 2735 

2674<h3 id="invalid-data-in-redacted-thinking-block">2736<h3 id="invalid-data-in-redacted-thinking-block">


2692 删除了不支持的工具内容2754 删除了不支持的工具内容

2693</h3>2755</h3>

2694 2756 

2695当 Claude Code 直接连接到 Anthropic API 并加载或预览保存的会话时,它删除 Anthropic API 不接受的工具内容,并在两个思考块之间删除的内容所在的位置留下此行:2757当 Claude Code 直接连接到 Anthropic API 并加载或预览保存的会话时,它删除 Anthropic API 不接受的工具内容,并在两个思考块之间被删除内容所在的位置留下此行:

2696 2758 

2697```text theme={null}2759```text theme={null}

2698[Unsupported tool content removed]2760[Unsupported tool content removed]


2702 2764 

2703**要做什么:**2765**要做什么:**

2704 2766 

2705* 当您看到占位符行时,无需任何操作。会话继续而不删除的内容。2767* 当您看到占位符行时,无需任何操作。会话在没有已删除内容的情况下继续。

2706* 如果恢复会话的每一轮都失败,显示 400 错误,运行 `claude update` 并再次恢复会话。v2.1.246 之前的版本不删除内容。2768* 如果恢复会话的每一轮都失败,显示 400 错误,运行 `claude update` 并再次恢复会话。v2.1.246 之前的版本不删除内容。

2707 2769 

2708<h3 id="role-system-must-precede-an-assistant-message">2770<h3 id="role-system-must-precede-an-assistant-message">


2715API Error: 400 messages.6: role 'system' must precede an 'assistant' message or end the array; ...2777API Error: 400 messages.6: role 'system' must precede an 'assistant' message or end the array; ...

2716```2778```

2717 2779 

2718Claude Code 将其一些提醒和附件文本作为系统消息发送到对话中。当 API 拒绝一个的位置时,Claude Code 重试请求一次,将该文本作为普通用户消息发送。API 的兄弟位置措辞,如 `use the top-level 'system' parameter for the initial system prompt`,获得相同的恢复。2780Claude Code 将其一些提醒和附件文本作为系统消息发送到对话中。当 API 拒绝其中一条的位置时,Claude Code 重试请求一次,将该文本作为普通用户消息发送。API 的同类位置措辞,如 `use the top-level 'system' parameter for the initial system prompt`,获得相同的恢复。

2719 2781 

2720当错误确实出现时,被拒绝的系统消息不是 Claude Code 可以删除的。这通常意味着 Claude Code 和 API 之间的代理或 [LLM gateway](/docs/zh-CN/llm-gateway) 添加了自己的系统消息或重新排序了对话。2782当错误确实出现时,被拒绝的系统消息不是 Claude Code 可以删除的。这通常意味着 Claude Code 和 API 之间的代理或 [LLM gateway](/docs/zh-CN/llm-gateway) 添加了自己的系统消息。

2721 2783 

2722**要做什么:**2784**要做什么:**

2723 2785 

2724* 如果错误在通过 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 配置的代理或网关后的每一轮上重复,连接而不使用代理以确认源,并向操作它的人报告错误2786* 如果错误在通过 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 配置的代理或网关后的每一轮上重复,不使用代理进行连接以确认来源,并向运营它的人报告错误

2725* 运行 `/clear` 以启动新对话。如果错误也在那里返回,原因在请求路径上,而不在保存的对话中。2787* 运行 `/clear` 以启动新对话。如果错误也在那里返回,原因在请求路径上,而不在保存的对话中。

2726 2788 

2727在 v2.1.280 之前,Claude Code 不识别此措辞,因此当被拒绝的系统消息是 Claude Code 本身发送的时,错误也出现,对话的每个后来轮次都以相同方式失败。2789在 v2.1.280 之前,Claude Code 不识别此措辞,因此当被拒绝的系统消息是 Claude Code 本身发送的时,错误也出现,对话的每个后来轮次都以相同方式失败。


2739API Error: 400 ... Invalid `encrypted_stdout` in `encrypted_code_execution_result` block2801API Error: 400 ... Invalid `encrypted_stdout` in `encrypted_code_execution_result` block

2740```2802```

2741 2803 

2742来自 API 的托管[网络搜索工具](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool)的结果携带只有 API 可以读取的加密字段。`encrypted_stdout` 措辞命名读取这样的结果的托管代码执行程序的输出,API 也加密。API 拒绝重放它无法解密的内容的请求,如为不同组织生成的内容。2804来自 API 的托管[网络搜索工具](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool)的结果携带只有 API 可以读取的加密字段。`encrypted_stdout` 措辞命名读取这样的结果的托管代码执行程序的输出,API 也会对其加密。API 拒绝重放它无法解密的内容的请求,如为不同组织生成的内容。

2743 2805 

2744Claude Code 自己的 [WebSearch 工具](/docs/zh-CN/tools-reference#websearch-tool-behavior)将搜索结果记录为纯文本,因此这些块通常通过代理或 [LLM gateway](/docs/zh-CN/llm-gateway) 到达对话,该网关自己运行了托管网络搜索。2806Claude Code 自己的 [WebSearch 工具](/docs/zh-CN/tools-reference#websearch-tool-behavior)将搜索结果记录为纯文本,因此这些块通常通过自己运行了托管网络搜索的代理或 [LLM gateway](/docs/zh-CN/llm-gateway) 到达对话。

2745 2807 

2746对于三个网络搜索措辞,Claude Code 将搜索调用、结果和引用排除在它发送的内容之外并重试请求一次,因此会话继续而不显示错误。`encrypted_stdout` 措辞没有这样的恢复,因此该消息仍然到达您。在 v2.1.282 之前,Claude Code 也保留了被拒绝的网络搜索块,每个后来的轮次和 `/compact` 都以相同方式失败。2808对于三个网络搜索措辞,Claude Code 将搜索调用、结果和引用排除在它发送的内容之外并重试请求一次,因此会话继续而不显示错误。`encrypted_stdout` 措辞没有这样的恢复,因此该消息仍然会显示给您。在 v2.1.282 之前,Claude Code 也保留了被拒绝的网络搜索块,每个后来的轮次和 `/compact` 都以相同方式失败。

2747 2809 

2748**要做什么:**2810**要做什么:**

2749 2811 

2750* 如果您在 v2.1.281 或更早版本上,每一轮都失败,显示网络搜索措辞之一,运行 `claude update` 并恢复会话2812* 如果您在 v2.1.281 或更早版本上,每一轮都失败,显示网络搜索措辞之一,运行 `claude update` 并恢复会话

2751* 如果错误持续,或消息命名 `encrypted_stdout`,运行 `/rewind` 回退到添加内容的轮次之前的检查点,或运行 `/clear` 启动不携带它的对话2813* 如果错误持续,或消息命名 `encrypted_stdout`,运行 `/rewind` 回退到添加内容的轮次之前的检查点,或运行 `/clear` 启动不携带它的对话

2752* 如果您在代理或网关后运行 Claude Code,向操作它的人报告错误2814* 如果您在代理或网关后运行 Claude Code,向运营它的人报告错误

2753 2815 

2754<h3 id="usage-policy-refusal">2816<h3 id="usage-policy-refusal">

2755 使用政策拒绝2817 使用政策拒绝


2757 2819 

2758API 拒绝了响应,因为对话中的内容触发了[使用政策](https://www.anthropic.com/legal/aup)检查。2820API 拒绝了响应,因为对话中的内容触发了[使用政策](https://www.anthropic.com/legal/aup)检查。

2759 2821 

2760消息包括请求 ID 和消息 ID,您可以引用给支持,如果您认为拒绝不正确。2822消息包括请求 ID 和消息 ID,如果您认为拒绝不正确,可以将其提供给支持人员。

2761 2823 

2762```text theme={null}2824```text theme={null}

2763API Error: Opus 4.6 can't help with this. Start a new session to continue.2825API Error: Opus 4.6 can't help with this. Start a new session to continue.


2767 2829 

2768消息命名拒绝的模型,或当没有记录模型时命名 `Claude`。2830消息命名拒绝的模型,或当没有记录模型时命名 `Claude`。

2769 2831 

2770检查评估完整对话,而不仅仅是您的最新提示,因此在同一会话中发送新消息通常会重新触发相同的拒绝。使用 `--continue` 或 `--resume` 退出并重新打开会话后也是如此,因为磁盘上的记录仍然包含触发内容。在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,此消息也涵盖模型的安全措施标记为网络安全主题的请求。请参阅[安全措施标记了网络安全主题](#safety-measures-flagged-a-cybersecurity-topic)。2832检查评估完整对话,而不仅仅是您的最新提示词,因此在同一会话中发送新消息通常会重新触发相同的拒绝。使用 `--continue` 或 `--resume` 退出并重新打开会话后也是如此,因为磁盘上的会话记录仍然包含触发内容。在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,此消息也涵盖模型的安全措施标记为网络安全主题的请求。请参阅[安全措施标记了网络安全主题](#safety-measures-flagged-a-cybersecurity-topic)。

2771 2833 

2772在 v2.1.219 之前,消息读取 `Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Please double press esc to edit your last message or start a new session for Claude Code to assist with a different task.`2834在 v2.1.219 之前,消息读取 `Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Please double press esc to edit your last message or start a new session for Claude Code to assist with a different task.`

2773 2835 


2775 2837 

2776* 按 Esc 两次或运行 `/rewind` 回退到触发拒绝的轮次之前的检查点,然后重新表述或采取不同的方法。请参阅[检查点](/docs/zh-CN/checkpointing)。2838* 按 Esc 两次或运行 `/rewind` 回退到触发拒绝的轮次之前的检查点,然后重新表述或采取不同的方法。请参阅[检查点](/docs/zh-CN/checkpointing)。

2777* 如果您无法识别哪个轮次导致了它,运行 `/clear` 在同一项目中启动新对话。您之前的对话保留在磁盘上,并在 `/resume` 中保持可用。2839* 如果您无法识别哪个轮次导致了它,运行 `/clear` 在同一项目中启动新对话。您之前的对话保留在磁盘上,并在 `/resume` 中保持可用。

2778* 在[非交互模式](/docs/zh-CN/headless)(`-p`) 中,其中回退不可用,在没有 `--continue` 的新会话中使用重新表述的提示重试。政策检查因模型而异,因此使用 `--model` 切换到不同的模型也可能在某些情况下解决拒绝。2840* 在[非交互模式](/docs/zh-CN/headless)(`-p`) 中,由于无法回退,请在不带 `--continue` 的新会话中使用重新表述的提示词重试。政策检查因模型而异,因此使用 `--model` 切换到不同的模型在某些情况下也可能解决拒绝。

2779 2841 

2780<h3 id="safety-measures-flagged-a-cybersecurity-topic">2842<h3 id="safety-measures-flagged-a-cybersecurity-topic">

2781 安全措施标记了网络安全主题2843 安全措施标记了网络安全主题


2787API Error: Opus 4.8's safeguards flagged this message. Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate cybersecurity work. Apply to the Cyber Verification Program to reduce these interruptions. Send feedback with /feedback or learn more: https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude2849API Error: Opus 4.8's safeguards flagged this message. Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate cybersecurity work. Apply to the Cyber Verification Program to reduce these interruptions. Send feedback with /feedback or learn more: https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude

2788```2850```

2789 2851 

2790消息链接到[网络安全验证计划](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude),该计划为合法网络安全工作授予访问权限。在 Opus 5.5 和 Sonnet 5.5 上,消息以 `<model>'s safeguards flagged this session` 开头。当标记的类别有可用的后备模型时,Claude Code [切换模型](/docs/zh-CN/model-config#automatic-model-fallback) 而不是显示此错误。2852消息链接到[网络安全验证计划](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude),该计划为合法网络安全工作授予访问权限。在 Opus 5.5 和 Sonnet 5.5 上,消息改以 `<model>'s safeguards flagged this session` 开头。当标记的类别有可用的备用模型时,Claude Code [切换模型](/docs/zh-CN/model-config#automatic-model-fallback)而不是显示此错误。

2791 2853 

2792在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,网络安全标记会产生[使用政策拒绝](#usage-policy-refusal)消息。2854在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,网络安全标记会改为产生[使用政策拒绝](#usage-policy-refusal)消息。

2793 2855 

2794保护措施本身是服务器端的,早于 v2.1.203;自那以后的客户端版本仅更改了消息的措辞。2856保护措施本身是服务器端的,早于 v2.1.203;自那以后的客户端版本仅更改了消息的措辞。

2795从 v2.1.203 到 v2.1.218,消息读取 `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply for access, visit our help center:` 后跟相同的帮助中心链接,交互式会话附加 `If you were not engaging in a cybersecurity topic, please send feedback via /feedback.`2857从 v2.1.203 到 v2.1.218,消息读取 `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply for access, visit our help center:` 后跟相同的帮助中心链接,交互式会话附加 `If you were not engaging in a cybersecurity topic, please send feedback via /feedback.`


2852 命令行错误2914 命令行错误

2853</h2>2915</h2>

2854 2916 

2855这些错误来自 `claude` 命令行及其子命令、您在提示符处提交的命令名称,以及诸如 `/security-review` 之类的命令,这些命令在运行其提示之前通过运行 shell 命令来收集上下文。它们也来自 `/tui`,它会重新启动 CLI。2917这些错误来自 `claude` 命令行及其子命令、您在提示符处提交的命令名称,以及 `/security-review` 等在其提示词运行前通过执行 shell 命令收集上下文的命令。它们也可能来自会重新启动 CLI 的 `/tui`。

2856 2918 

2857<h3 id="conflict-between-bg-and-print">2919<h3 id="conflict-between-bg-and-print">

2858 `--bg` 和 `--print` 之间的冲突2920 `--bg` 与 `--print` 冲突

2859</h3>2921</h3>

2860 2922 

2861此消息需要 Claude Code v2.1.198 或更高版本。您在同一个 `claude` 调用中将 `--bg` 与 `-p` 或 `--print` 结合使用。`--bg` 启动一个[后台会话](/docs/zh-CN/agent-view#from-your-shell),您稍后可以使用 `claude agents` 附加到该会话,而 `--print` 以[非交互方式](/docs/zh-CN/headless)运行,永远不会启动 `claude agents` 附加到的交互会话。在 v2.1.198 之前,此组合会以静默方式创建一个永远无法附加的后台作业。2923此消息需要 Claude Code v2.1.198 或更高版本。您在同一次 `claude` 调用中将 `--bg` 与 `-p` 或 `--print` 组合使用。`--bg` 会启动一个[后台会话](/docs/zh-CN/agent-view#from-your-shell),您稍后可通过 `claude agents` 附加到该会话;而 `--print` 以[非交互方式](/docs/zh-CN/headless)运行,永远不会启动 `claude agents` 所附加的交互式会话。在 v2.1.198 之前,这种组合会静默创建一个永远无法附加的后台作业。

2862 2924 

2863```text theme={null}2925```text theme={null}

2864--bg and --print conflict: --print never starts the interactive session that `claude agents` attaches to, so the job would be unattachable. The prompt is the positional — drop --print: `claude --bg '<task>'`.2926--bg and --print conflict: --print never starts the interactive session that `claude agents` attaches to, so the job would be unattachable. The prompt is the positional — drop --print: `claude --bg '<task>'`.

2865```2927```

2866 2928 

2867**应该做什么:**2929**解决方法:**

2868 2930 

2869* 删除 `-p` 或 `--print`。`--bg` 将提示作为其位置参数,所以 `claude --bg "<task>"` 是完整的命令。请参阅[从您的 shell 分派新代理](/docs/zh-CN/agent-view#from-your-shell)。2931* 去掉 `-p` 或 `--print`。`--bg` 将提示词作为其位置参数,因此 `claude --bg "<task>"` 就是完整的命令。请参阅[从 shell 中 Dispatch 新的 Agent](/docs/zh-CN/agent-view#from-your-shell)。

2870* 要以非交互方式运行提示并打印结果而不是创建后台会话,请删除 `--bg` 并运行 `claude -p "<task>"`2932* 若要以非交互方式运行提示词并打印结果,而不是创建后台会话,请去掉 `--bg` 并运行 `claude -p "<task>"`

2933 

2934<h3 id="conflict-between-a-system-prompt-flag-and-its-file-form">

2935 系统提示词标志与其文件形式冲突

2936</h3>

2937 

2938您在一次 `claude` 调用中同时传入了 [`--append-subagent-system-prompt`](/docs/zh-CN/cli-reference#cli-flags) 和 `--append-subagent-system-prompt-file`,因此 `claude` 以退出码 1 退出,而不是启动会话:

2939 

2940```text theme={null}

2941Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.

2942```

2943 

2944在 v2.1.283 之前,当您将 `--system-prompt` 与 `--system-prompt-file` 一起传入,或将 `--append-system-prompt` 与 `--append-system-prompt-file` 一起传入时,`claude` 也会以同样的方式退出,因为这些成对的标志会相互冲突,而不是[组合使用](/docs/zh-CN/cli-reference#system-prompt-flags)。在这些版本中,消息会指出您组合使用的那一对标志。

2945 

2946**解决方法:**

2947 

2948* 保留标志的一种形式并去掉另一种。若要将固定的提示词文件与每次运行的文本组合,请在启动前将文本合并到文件中,而不是同时传入两个标志

2871 2949 

2872<h3 id="invalid-agents-configuration">2950<h3 id="invalid-agents-configuration">

2873 无效的 `--agents` 配置2951 无效的 `--agents` 配置

2874</h3>2952</h3>

2875 2953 

2876您传递给 `--agents` 的值无效,所以 `claude` 以代码 1 退出,而不是启动会话。当您传递 `--safe-mode` 或设置 [`CLAUDE_CODE_SAFE_MODE`](/docs/zh-CN/env-vars#variables) 时,Claude Code 会完全忽略 `--agents`。使用 `--resume` 或 `--continue` 时,不会检查内联 JSON 值,会话会启动;从文件读取的值在每次启动时都会被检查。在 v2.1.242 之前,Claude Code 无论如何都会启动会话。2954您传给 `--agents` 的值无效,因此 `claude` 以退出码 1 退出,而不是启动会话。当您传入 `--safe-mode` 或设置 [`CLAUDE_CODE_SAFE_MODE`](/docs/zh-CN/env-vars#variables) 时,Claude Code 会完全忽略 `--agents`。使用 `--resume` 或 `--continue` 时,内联 JSON 值不会被检查,会话会正常启动;从文件读取的值则在每次启动时都会被检查。在 v2.1.242 之前,Claude Code 无论如何都会启动会话。

2877 2955 

2878```text theme={null}2956```text theme={null}

2879Error: Invalid --agents configuration:2957Error: Invalid --agents configuration:

2880<what failed>2958<what failed>

2881```2959```

2882 2960 

2883第一行之后的内容取决于值如何失败。Claude Code 按顺序运行这些检查,并在第一个失败的检查处停止。如果您的值有两种问题,您只有在修复第一个问题后才会看到第二个问题:2961第一行之后的内容取决于该值失败的方式。Claude Code 按顺序运行以下检查,并在第一个失败的检查处停止。如果您的值有两类问题,您只有在修复第一类问题后才会看到第二类:

2884 2962 

28851. 当值以 `{` 开头但不能解析为 JSON,或 `--agents` 文件的内容不能解析时,Claude Code 会打印一行 `invalid JSON:`,其中包含 JSON 解析器自己的消息29631. 当值以 `{` 开头但无法解析为 JSON,或 `--agents` 文件的内容无法解析时,Claude Code 会打印一行 `invalid JSON:`,其中包含 JSON 解析器自身的消息

28862. 当它解析但代理定义与 [CLI 定义的子代理](/docs/zh-CN/sub-agents#choose-the-subagent-scope)的架构不匹配时,Claude Code 会为每个问题打印一行29642. 当值可以解析,但某个 Agent 定义不符合 [CLI 定义的子代理](/docs/zh-CN/sub-agents#choose-the-subagent-scope)的 schema 时,Claude Code 会为每个问题打印一行

28873. 当代理名称以 `-` 开头时,Claude Code 会打印 `<name>: agent names must not start with '-'`29653. 当 Agent 名称以 `-` 开头时,Claude Code 会打印 `<name>: agent names must not start with '-'`

2888 2966 

2889当有超过 20 行问题时,Claude Code 会打印前 20 行,并用 `…and N more` 替换其余部分。2967当问题行超过 20 行时,Claude Code 会打印前 20 行,并将其余部分替换为 `…and N more`。

2890 2968 

2891使用 `--print` 时,`--agents` 也接受 [JSON 文件的路径](/docs/zh-CN/sub-agents#choose-the-subagent-scope)代替内联对象。在 v2.1.281 之前,`--agents` 仅接受内联 JSON,并将文件路径视为无效 JSON。文件形式有其自己的拒绝,打印在此消息的位置,包括这些:2969使用 `--print` 时,`--agents` 还接受 [JSON 文件的路径](/docs/zh-CN/sub-agents#choose-the-subagent-scope)来代替内联对象。在 v2.1.281 之前,`--agents` 只接受内联 JSON,并将文件路径视为无效 JSON。文件形式有其自身的拒绝情况,会代替此消息打印出来,包括以下几种:

2892 2970 

2893* **`Error: --agents takes a JSON object, or a file path only with --print (-p)`**:Claude Code 在交互会话中将值读取为文件路径。将定义作为内联 JSON 传递,或添加 `-p` 从文件读取它们。2971* **`Error: --agents takes a JSON object, or a file path only with --print (-p)`**:Claude Code 在交互式会话中将该值读取为文件路径。请以内联 JSON 的形式传入定义,或添加 `-p` 以从文件读取定义。

2894* **`Error: --agents file not found: <path>`**:该路径不存在任何文件。不以 `{` 开头且不是有效 JSON 的值被读取为路径,所以您的 shell 损坏的内联 JSON 也可能以这种方式失败。检查路径或引号,然后再次运行命令。2972* **`Error: --agents file not found: <path>`**:该路径下不存在文件。不以 `{` 开头且不是有效 JSON 的值会被读取为路径,因此被 shell 破坏的内联 JSON 也可能以这种方式失败。请检查路径或引号,然后再次运行命令。

2895 2973 

2896**应该做什么:**2974**解决方法:**

2897 2975 

2898* 修复消息列出的每个问题,然后再次运行命令。请参阅 [CLI 定义的子代理采用的字段](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。2976* 修复消息列出的每个问题,然后再次运行命令。请参阅 [CLI 定义的子代理可接受的字段](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。

2899 2977 

2900<h3 id="cloud-sessions-cannot-be-created-from-a-restricted-session">2978<h3 id="cloud-sessions-cannot-be-created-from-a-restricted-session">

2901 无法从 `--restricted` 会话创建云会话2979 无法从 `--restricted` 会话创建云端会话

2902</h3>2980</h3>

2903 2981 

2904当您使用 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 启动会话时,Claude Code 拒绝从中创建[云会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud),因为新会话将在受限进程之外运行,不会强制执行受限模式。Claude Code 在客户端拒绝,在联系服务器之前,所以不会创建云会话:2982当您使用 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 启动会话时,Claude Code 会拒绝从该会话创建[云端会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud),因为新会话将在受限进程之外运行,不会强制执行受限模式。Claude Code 在客户端拒绝,且发生在联系服务器之前,因此不会创建任何云端会话:

2905 2983 

2906```text theme={null}2984```text theme={null}

2907Cloud sessions cannot be created from a --restricted session: they would not enforce it.2985Cloud sessions cannot be created from a --restricted session: they would not enforce it.

2908```2986```

2909 2987 

2910**应该做什么:**2988**解决方法:**

2911 2989 

2912* 在受限会话中本地运行任务2990* 在受限会话中本地运行该任务

2913* 如果您控制会话的启动方式,请启动一个没有 `--restricted` 的新 `claude` 会话,并从那里创建云会话2991* 如果您能控制会话的启动方式,请不带 `--restricted` 启动一个新的 `claude` 会话,并从那里创建云端会话

2914 2992 

2915在 v2.1.248 之前,Claude Code 没有 `--restricted` 标志;较早的版本会以未知选项错误拒绝该标志本身。2993在 v2.1.248 之前,Claude Code 没有 `--restricted` 标志;更早的版本会以未知选项错误拒绝该标志本身。

2916 2994 

2917<h3 id="cloud-sessions-are-disabled-by-your-organizations-policy">2995<h3 id="cloud-sessions-are-disabled-by-your-organizations-policy">

2918 您的组织的策略禁用了云会话2996 云端会话已被您组织的策略禁用

2919</h3>2997</h3>

2920 2998 

2921您的组织的 `allow_remote_sessions` 策略已关闭,所以[云会话](/docs/zh-CN/claude-code-on-the-web)和使用它们的命令不可用:2999您组织的 `allow_remote_sessions` 策略已关闭,因此[云端会话](/docs/zh-CN/claude-code-on-the-web)以及使用云端会话的命令均不可用:

2922 3000 

2923```text theme={null}3001```text theme={null}

2924Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.3002Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.

2925```3003```

2926 3004 

2927当您[从终端创建云会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)时,消息会出现,当您提交需要云会话的命令时,例如 `/teleport`、`/remote-env` 或 `/web-setup`。在 v2.1.268 之前,提交其中一个命令会返回[`Unknown command`](#unknown-command)。3005当您[从终端创建云端会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)时,以及当您提交需要云端会话的命令(例如 `/teleport`、`/remote-env` 或 `/web-setup`)时,会出现此消息。在 v2.1.268 之前,提交这些命令之一会返回 [`Unknown command`](#unknown-command)。

2928 3006 

2929这是一个服务器端组织策略,所以它不能从本地设置、环境变量或 CLI 标志中被覆盖。3007这是服务器端的组织策略,因此无法通过本地设置、环境变量或 CLI 标志覆盖。

2930 3008 

2931如果 Claude Code 还没有加载您的组织策略或无法获取它,这些命令会回答 `Couldn't verify your organization's policy for cloud sessions. Check your network connection, then restart Claude Code and try again.`。3009如果 Claude Code 尚未加载您组织的策略或无法获取该策略,这些命令会改为回复 `Couldn't verify your organization's policy for cloud sessions. Check your network connection, then restart Claude Code and try again.`。

2932 3010 

2933**应该做什么:**3011**解决方法:**

2934 3012 

2935* 请您的组织中的[所有者](/docs/zh-CN/server-managed-settings#access-control)在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 的 Claude Code 管理员设置中启用云会话3013* 请您组织中的 [Owner](/docs/zh-CN/server-managed-settings#access-control) 在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 的 Claude Code 管理设置中启用云端会话

2936* 如果消息说它无法验证策略,请检查您的网络连接,然后重新启动 Claude Code 并重试3014* 如果消息提示无法验证策略,请检查您的网络连接,然后重新启动 Claude Code 并重试

2937 3015 

2938<h3 id="the-json-schema-value-is-not-a-valid-json-schema">3016<h3 id="the-json-schema-value-is-not-a-valid-json-schema">

2939 `--json-schema` 值不是有效的 JSON Schema3017 `--json-schema` 的值不是有效的 JSON Schema

2940</h3>3018</h3>

2941 3019 

2942您传递给 [`--json-schema`](/docs/zh-CN/cli-reference#cli-flags) 的架构在[非交互模式](/docs/zh-CN/headless#get-structured-output)中失败了 JSON Schema 编译,所以 `claude` 以代码 1 退出,而不是运行提示。在 v2.1.205 之前,无效的架构会产生无结构的输出,没有错误,任何使用 `format` 关键字的架构都被视为无效。3020您在[非交互模式](/docs/zh-CN/headless#get-structured-output)下传给 [`--json-schema`](/docs/zh-CN/cli-reference#cli-flags) 的 schema 未能通过 JSON Schema 编译,因此 `claude` 以退出码 1 退出,而不是运行提示词。在 v2.1.205 之前,无效的 schema 会产生非结构化输出且不报错,并且任何使用 `format` 关键字的 schema 都会被视为无效。

2943 3021 

2944```text theme={null}3022```text theme={null}

2945Error: --json-schema is not a valid JSON Schema: data/type must be equal to one of the allowed values3023Error: --json-schema is not a valid JSON Schema: data/type must be equal to one of the allowed values

2946```3024```

2947 3025 

2948第二个冒号后的文本是验证器的诊断,并命名失败的关键字或位置。使用 `format` 关键字的架构,例如 `"format": "email"`,是有效的:Claude Code 接受 `format` 作为注释,不强制执行它。3026第二个冒号之后的文本是验证器的诊断信息,会指出失败的关键字或位置。使用 `format` 关键字的 schema(例如 `"format": "email"`)是有效的:Claude Code 将 `format` 作为注解接受,但不强制执行。

2949 3027 

2950Claude Code 在架构编译之前运行两个检查:它拒绝不可解析的 JSON 值,显示 `Error: --json-schema is not valid JSON`,以及不是对象的有效 JSON,显示 `Error: --json-schema must be a JSON object`。3028Claude Code 在 schema 编译之前会运行两项检查:对于无法解析为 JSON 的值,它会以 `Error: --json-schema is not valid JSON` 拒绝;对于是有效 JSON 但不是对象的值,它会以 `Error: --json-schema must be a JSON object` 拒绝。

2951 3029 

2952**应该做什么:**3030**解决方法:**

2953 3031 

2954* 修复诊断命名的架构部分,然后重新运行命令3032* 修复诊断信息指出的 schema 部分,然后重新运行命令

2955* 请参阅[获取结构化输出](/docs/zh-CN/headless#get-structured-output)以获取工作架构和命令3033* 请参阅[获取结构化输出](/docs/zh-CN/headless#get-structured-output),了解可用的 schema 和命令示例

2956 3034 

2957<h3 id="settings-file-exceeds-the-2mib-limit">3035<h3 id="settings-file-exceeds-the-2mib-limit">

2958 设置文件超过 2MiB 限制3036 设置文件超过 2MiB 限制

2959</h3>3037</h3>

2960 3038 

2961您传递给 [`--settings`](/docs/zh-CN/cli-reference#cli-flags) 的文件大于 2 MiB,所以 `claude` 在启动时以代码 1 退出,而不是加载它。在 v2.1.214 之前,Claude Code 读取文件时没有大小检查,多 GB 文件或诸如 `/dev/zero` 之类的设备文件会无限增长内存。3039您传给 [`--settings`](/docs/zh-CN/cli-reference#cli-flags) 的文件大于 2 MiB,因此 `claude` 在启动时以退出码 1 退出,而不是加载该文件。在 v2.1.214 之前,Claude Code 读取文件时不检查大小,数 GB 的文件或 `/dev/zero` 之类的设备文件会使内存无限增长。

2962 3040 

2963```text theme={null}3041```text theme={null}

2964Error: Settings file exceeds the 2MiB limit: /path/to/settings.json3042Error: Settings file exceeds the 2MiB limit: /path/to/settings.json

2965```3043```

2966 3044 

2967Claude Code 以相同的方式拒绝不是常规文件的 `--settings` 路径:设备、FIFO 或套接字报告 `Error: Cannot use settings file (Not a regular file (device, FIFO, or socket))`,后跟路径,目录报告 `EISDIR` 原因。3045对于不是常规文件的 `--settings` 路径,Claude Code 也会以同样方式拒绝:设备、FIFO 或套接字会报告 `Error: Cannot use settings file (Not a regular file (device, FIFO, or socket))`,后跟路径;目录则会报告 `EISDIR` 原因。

2968 3046 

2969**应该做什么:**3047**解决方法:**

2970 3048 

2971* 将 `--settings` 指向 2 MiB 以下的常规 JSON 设置文件。请参阅[设置](/docs/zh-CN/settings)了解格式。3049* 将 `--settings` 指向一个小于 2 MiB 的常规 JSON 设置文件。有关格式,请参阅[设置](/docs/zh-CN/settings)。

2972 3050 

2973<h3 id="the-current-directory-no-longer-exists">3051<h3 id="the-current-directory-no-longer-exists">

2974 当前目录不再存在3052 当前目录已不存在

2975</h3>3053</h3>

2976 3054 

2977您从一个在您的 shell 进入后被删除或移动的目录启动了 `claude`,例如另一个 shell 删除的 worktree 或临时目录。Claude Code 无法读取其工作目录,所以它在启动会话之前以代码 1 退出,在交互和[非交互](/docs/zh-CN/headless)模式中都是如此。在 v2.1.239 之前,Claude Code 会因缩小的捆绑源和原始 `ENOENT ... uv_cwd` 堆栈在 stderr 上崩溃,而不是显示此消息。3055您从一个在 shell 进入后被删除或移动的目录中启动了 `claude`,例如被另一个 shell 删除的 worktree 或临时目录。Claude Code 无法读取其工作目录,因此无论是交互模式还是[非交互](/docs/zh-CN/headless)模式,它都会在启动会话前以退出码 1 退出。在 v2.1.239 之前,Claude Code 会崩溃,并在 stderr 上输出压缩后的 bundle 源代码和原始的 `ENOENT ... uv_cwd` 堆栈,而不是此消息。

2978 3056 

2979```text theme={null}3057```text theme={null}

2980The current directory no longer exists (it was deleted or moved). Start Claude Code from an existing directory.3058The current directory no longer exists (it was deleted or moved). Start Claude Code from an existing directory.

2981error: The current working directory was deleted, so that command didn't work. Please cd into a different directory and try again.3059error: The current working directory was deleted, so that command didn't work. Please cd into a different directory and try again.

2982```3060```

2983 3061 

2984两种形式的原因和修复是相同的。3062两种形式的原因和解决方法相同。

2985 3063 

2986当 Claude Code 因其他原因(例如权限更改)无法读取工作目录时,消息会命名错误代码:`Can't read the current directory (EACCES). Start Claude Code from a different directory.`3064当 Claude Code 因其他原因(例如权限变更)无法读取工作目录时,消息会改为指出错误代码:`Can't read the current directory (EACCES). Start Claude Code from a different directory.`

2987 3065 

2988在 macOS 上,`~/Desktop`、`~/Documents`、`~/Downloads` 或 iCloud Drive 中目录的 `EPERM` 通常意味着 macOS 阻止您的终端应用访问该文件夹。读取该文件夹的其他命令也会以相同的方式失败:即使使用 `sudo`,`ls` 也会报告 `Operation not permitted`。3066在 macOS 上,如果 `~/Desktop`、`~/Documents`、`~/Downloads` 或 iCloud Drive 中的目录出现 `EPERM`,通常意味着 macOS 阻止了您的终端应用访问该文件夹。读取该文件夹的其他命令也会以同样方式失败:在那里运行 `ls` 会报告 `Operation not permitted`,即使使用 `sudo` 也是如此。

2989 3067 

2990**应该做什么:**3068**解决方法:**

2991 3069 

2992* 更改为存在的目录,例如您的主目录或项目目录,然后再次运行 `claude`3070* 切换到一个存在的目录,例如您的主目录或项目目录,然后再次运行 `claude`

2993* 如果目录在同一路径被重新创建,您的 shell 仍然持有已删除的目录。运行 `cd "$PWD"` 或离开并重新进入目录,然后再次运行 `claude`3071* 如果该目录已在同一路径下重新创建,您的 shell 仍持有已删除的那个目录。运行 `cd "$PWD"`,或离开后重新进入该目录,然后再次运行 `claude`

2994* 对于 macOS 上的 `EPERM`,使用 Cmd+Q 退出您的终端应用,重新打开它,返回该文件夹,然后运行 `claude`。如果该文件夹中的 `ls` 仍然失败,请打开**系统设置 > 隐私和安全 > 文件和文件夹**,为您的终端应用打开该文件夹,然后重新打开终端3072* 对于 macOS 上的 `EPERM`,请使用 Cmd+Q 退出终端应用,重新打开它,返回该文件夹,然后运行 `claude`。如果在该文件夹中运行 `ls` 仍然失败,请打开 **System Settings > Privacy & Security > Files and Folders**,为您的终端应用启用该文件夹,然后重新打开终端

2995 3073 

2996<h3 id="temp-directory-refused-or-cannot-be-created">3074<h3 id="temp-directory-refused-or-cannot-be-created">

2997 临时目录被拒绝或无法创建3075 临时目录被拒绝或无法创建

2998</h3>3076</h3>

2999 3077 

3000在 macOS 和 Linux 上,Claude Code 在启动时创建一个私有临时目录 `claude-<uid>`,位于系统临时目录或 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 覆盖下。当目录无法创建,或该路径处的现有条目未通过安全检查时,Claude Code 将失败打印到 stderr 并以代码 1 退出,而不是启动会话:3078在 macOS 和 Linux 上,Claude Code 会在启动时创建一个私有临时目录,即系统临时目录下或 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 覆盖路径下的 `claude-<uid>`。当该目录无法创建,或该路径上已存在的条目未通过安全检查时,Claude Code 会将失败信息打印到 stderr,并以退出码 1 退出,而不是启动会话:

3001 3079 

3002```text wrap theme={null}3080```text wrap theme={null}

3003ENOSPC: no space left on device, mkdir '/tmp/claude-501'3081ENOSPC: no space left on device, mkdir '/tmp/claude-501'


3009Temp directory /tmp/claude-501 is not readable (its mode may have been altered, or a path component denies search). Refusing to use it — restore its permissions (chmod 0700) or remove it. Set CLAUDE_CODE_TMPDIR to a directory you control, or ask an administrator to remove it.3087Temp directory /tmp/claude-501 is not readable (its mode may have been altered, or a path component denies search). Refusing to use it — restore its permissions (chmod 0700) or remove it. Set CLAUDE_CODE_TMPDIR to a directory you control, or ask an administrator to remove it.

3010```3088```

3011 3089 

3012**应该做什么:**3090**解决方法:**

3013 3091 

3014* 对于 `ENOSPC`,释放保存临时目录的卷上的磁盘空间3092* 对于 `ENOSPC`,请释放存放临时目录的卷上的磁盘空间

3015* 对于 `Refusing to use it` 形式,删除命名的条目本身,而不是链接指向的内容,然后再次启动 Claude Code;对于 `owned by uid` 形式,只有管理员或该用户可以删除它3093* 对于 `Refusing to use it` 形式,请删除所指出的条目本身(而不是链接指向的内容),然后再次启动 Claude Code;对于 `owned by uid` 形式,只有管理员或该用户才能删除它

3016* 对于 `is not readable`,在命名目录上运行 `chmod 0700`,或删除它并重新启动3094* 对于 `is not readable`,请对所指出的目录运行 `chmod 0700`,或将其删除后重新启动

3017* 在任何这些情况下,将 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 设置为您控制的目录并启动 Claude Code,保留被拒绝的路径不变3095* 在上述任何情况下,都可以将 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 设置为您控制的目录,然后再次启动 Claude Code,而不必处理被拒绝的路径

3018 3096 

3019<h3 id="directory-couldnt-be-resolved-to-a-real-location">3097<h3 id="directory-couldnt-be-resolved-to-a-real-location">

3020 目录无法解析为真实位置3098 无法将目录解析为真实位置

3021</h3>3099</h3>

3022 3100 

3023您为工作目录的子目录运行了 `/add-dir`,Claude Code 无法将目录解析为其真实位置。3101您对工作目录的某个子目录运行了 `/add-dir`,而 Claude Code 无法将该目录解析为其真实位置。

3024 3102 

3025您已经可以访问工作目录的子目录,所以 `/add-dir` 只加载其 skills、命令和代理。在加载它们之前,Claude Code 检查目录的真实位置(解析任何符号链接)是否在工作目录内。当 Claude Code 无法解析该位置时,它不加载任何内容并显示此消息:3103您对工作目录的子目录已有文件访问权限,因此 `/add-dir` 只会加载其中的 skill、命令和 Agent。在加载之前,Claude Code 会检查该目录解析所有符号链接后的真实位置是否位于工作目录内。当 Claude Code 无法解析该位置时,它不会加载任何内容,并显示以下消息:

3026 3104 

3027```text theme={null}3105```text theme={null}

3028packages/app couldn't be resolved to a real location, so its skills, commands, and agents weren't loaded. Check that it is a directory inside the working directory and try again.3106packages/app couldn't be resolved to a real location, so its skills, commands, and agents weren't loaded. Check that it is a directory inside the working directory and try again.

3029```3107```

3030 3108 

3031**应该做什么:**3109**解决方法:**

3032 3110 

3033* 检查路径是否命名工作目录内的真实目录,然后再次运行 `/add-dir`3111* 检查该路径是否指向工作目录内的真实目录,然后再次运行 `/add-dir`

3034* 消息不会改变您的文件访问权限;它只报告目录的 `.claude/` 内容未被加载3112* 此消息不会改变您的文件访问权限;它只报告该目录的 `.claude/` 内容未被加载

3035 3113 

3036在 v2.1.261 之前,当工作目录在 `/net/<host>` 自动挂载上时,此消息也会为每个 `/add-dir <subdirectory>` 出现,Claude Code 按设计拒绝解析路径;目录很好,重试无法帮助。3114在 v2.1.261 之前,当工作目录位于 `/net/<host>` 自动挂载点上时,每次运行 `/add-dir <subdirectory>` 都会出现此消息,因为 Claude Code 在设计上不会解析这类路径;目录本身没有问题,重试也无济于事。

3037 3115 

3038<h3 id="workspace-not-trusted-when-starting-remote-control">3116<h3 id="workspace-not-trusted-when-starting-remote-control">

3039 启动远程控制时工作区不受信任3117 启动 Remote Control 时工作区不受信任

3040</h3>3118</h3>

3041 3119 

3042您在未信任的目录中使用 `claude remote-control` 或其 `claude rc` 别名启动了[远程控制](/docs/zh-CN/remote-control)服务器模式,命令无法询问您是否信任它。例如,命令的标准输入或标准输出不是终端,因为其中一个被重定向或管道化。命令以代码 1 退出:3120您在一个尚未信任的目录中使用 `claude remote-control` 或其别名 `claude rc` 启动了 [Remote Control](/docs/zh-CN/remote-control) 服务器模式,而该命令无法询问您是否信任该目录。例如,该命令的标准输入或标准输出不是终端,因为其中之一被重定向或通过管道传输。该命令以退出码 1 退出:

3043 3121 

3044```text theme={null}3122```text theme={null}

3045Error: Workspace not trusted. Please run `claude` in /Users/you/project first to review and accept the workspace trust dialog.3123Error: Workspace not trusted. Please run `claude` in /Users/you/project first to review and accept the workspace trust dialog.

3046```3124```

3047 3125 

3048两个也以 `Error: Workspace not trusted.` 开头的变体也出现在足够小的终端中,无法显示信任目录会打开什么,或一个没有报告其大小的终端。放大窗口或切换到正常终端窗口,然后再次运行 `claude rc`。3126还有两个同样以 `Error: Workspace not trusted.` 开头的变体,会出现在太小而无法显示信任该目录将启用哪些内容的终端中,或出现在未报告其尺寸的终端中。请放大窗口或切换到普通终端窗口,然后再次运行 `claude rc`。

3049 3127 

3050在您的主目录中,消息是不同的,因为工作区信任对话永远不会为主目录保存信任,所以在那里接受它无法满足此检查。在 v2.1.214 之前,主目录显示上面的消息,其建议在那里无法成功。3128在您的主目录中,消息会有所不同,因为工作区信任对话框永远不会为主目录保存信任,所以在那里接受信任无法满足此检查。在 v2.1.214 之前,主目录会显示上面的消息,而其建议在那里无法奏效。

3051 3129 

3052```text theme={null}3130```text theme={null}

3053Error: Workspace not trusted. /Users/you is your home directory, and for security home-directory trust is never saved, so running `claude` here first won't help. Run `claude rc` from a project directory instead (run `claude` there once to accept the trust dialog).3131Error: Workspace not trusted. /Users/you is your home directory, and for security home-directory trust is never saved, so running `claude` here first won't help. Run `claude rc` from a project directory instead (run `claude` there once to accept the trust dialog).

3054```3132```

3055 3133 

3056如果您在 [`Trust <directory>?` 问题](/docs/zh-CN/remote-control#requirements)处回答 `n` 或按 Enter,命令会打印一条 `Remote Control did not start` 消息,命名目录并以代码 1 退出。再次运行 `claude rc` 以回答 `y`。3134如果您在 [`Trust <directory>?` 问题](/docs/zh-CN/remote-control#requirements)处回答 `n` 或按 Enter,该命令会打印一条指出该目录的 `Remote Control did not start` 消息,并以退出码 1 退出。再次运行 `claude rc` 即可回答 `y`。

3057 3135 

3058**应该做什么:**3136**解决方法:**

3059 3137 

3060* 首先从终端信任目录:在那里运行 `claude rc` 并回答 `y`,或运行 `claude` 并接受[工作区信任对话](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),然后再次运行您的原始命令3138* 先从终端信任该目录:在那里运行 `claude rc` 并回答 `y`,或在那里运行 `claude` 并接受[工作区信任对话框](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),然后再次运行您原来的命令

3061* 在您的主目录中,更改为项目目录并在那里启动远程控制3139* 如果在主目录中,请切换到项目目录,并在那里启动 Remote Control

3062 3140 

3063在 v2.1.284 之前,命令从不询问,即使在终端中也是如此。3141在 v2.1.284 之前,即使在终端中,该命令也从不询问。

3064 3142 

3065<h3 id="not-carried-over-to-the-sessions-remote-control-starts">3143<h3 id="not-carried-over-to-the-sessions-remote-control-starts">

3066 未被远程控制启动的会话继承3144 不会传递到 Remote Control 启动的会话

3067</h3>3145</h3>

3068 3146 

3069您使用全局 `claude` 标志在 `remote-control` 动词之前启动了[远程控制](/docs/zh-CN/remote-control),该标志会限制或配置远程控制启动的会话,例如 `--settings`、`--setting-sources`、`--permission-mode`、`--disallowed-tools` 或 `--mcp-config`。放在动词之前的标志永远不会到达这些会话。Claude Code 拒绝启动,命名标志:3147您在 `remote-control` 动词之前使用了一个全局 `claude` 标志来启动 [Remote Control](/docs/zh-CN/remote-control),而该标志会限制或配置 Remote Control 启动的会话,例如 `--settings`、`--setting-sources`、`--permission-mode`、`--disallowed-tools` 或 `--mcp-config`。放在动词之前的标志永远不会传递到这些会话。Claude Code 会拒绝启动,并指出该标志:

3070 3148 

3071```text theme={null}3149```text theme={null}

3072Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`).3150Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`).

3073```3151```

3074 3152 

3075Claude Code 不拒绝无害的全局标志,例如 `--verbose`、`--model` 或包装器注入的 `--session-id` 或 `--plugin-dir`:它忽略它们,远程控制启动。3153对于丢弃后无害的全局标志,例如 `--verbose`、`--model`,或由包装器注入的 `--session-id` 或 `--plugin-dir`,Claude Code 不会拒绝:它会忽略这些标志,Remote Control 照常启动。

3076 3154 

3077Claude Code 也拒绝启动一个它还不认识为无害的全局标志,所以较新版本中添加的标志可能会出现在此消息中,直到稍后的版本将其标记为无害。3155对于尚未被识别为无害的全局标志,Claude Code 也会拒绝启动,因此较新版本中新增的标志可能会出现在此消息中,直到后续版本将其标记为无害。

3078 3156 

3079**应该做什么:**3157**解决方法:**

3080 3158 

3081* 从动词之前删除标志,并在其后传递[远程控制自己的选项](/docs/zh-CN/remote-control#start-a-remote-control-session);`claude remote-control --help` 列出它们3159* 从动词之前移除该标志,并在动词之后传入 [Remote Control 自己的选项](/docs/zh-CN/remote-control#start-a-remote-control-session);`claude remote-control --help` 会列出这些选项

3082* 当被拒绝的标志是 `--permission-mode` 时,运行 `claude remote-control --permission-mode <mode>` 为远程控制启动的会话设置权限模式3160* 当被拒绝的标志是 `--permission-mode` 时,请运行 `claude remote-control --permission-mode <mode>` 来为 Remote Control 启动的会话设置权限模式

3083 3161 

3084在 v2.1.248 之前,当全局标志首先出现时,`claude remote-control` 不接受其自己的标志,命令失败并显示未知选项错误。3162在 v2.1.248 之前,当全局标志在前时,`claude remote-control` 不接受其自身的标志,命令会以 `unknown option` 错误失败。

3085 3163 

3086<h3 id="claude-import-is-not-yet-available-in-this-build">3164<h3 id="claude-import-is-not-yet-available-in-this-build">

3087 claude import 在此构建中尚不可用3165 claude import 在此版本中尚不可用

3088</h3>3166</h3>

3089 3167 

3090您运行了 [`claude import`](/docs/zh-CN/cli-reference#cli-commands),Claude Code 发现导入流已关闭,所以命令以代码 1 退出,而不是启动导入。在 v2.1.222 之前,关闭导入流的构建将 `import` 视为提示并启动交互会话,而不是打印此消息。3168您运行了 [`claude import`](/docs/zh-CN/cli-reference#cli-commands),而 Claude Code 发现导入流程处于关闭状态,因此该命令以退出码 1 退出,而不是开始导入。在 v2.1.222 之前,关闭了导入流程的版本会将 `import` 视为提示词,并启动交互式会话,而不是打印此消息。

3091 3169 

3092```text theme={null}3170```text theme={null}

3093`claude import` is not yet available in this build. Run `claude` and use /mcp or edit ~/.claude/settings.json directly.3171`claude import` is not yet available in this build. Run `claude` and use /mcp or edit ~/.claude/settings.json directly.

3094```3172```

3095 3173 

3096Claude Code 通过从 Anthropic 获取并在磁盘上缓存的功能标志打开 `claude import`。此消息意味着缓存的值已关闭。原因通常是以下之一:3174Claude Code 通过从 Anthropic 获取并缓存在磁盘上的功能标志来启用 `claude import`。此消息表示缓存的值为关闭。原因通常是以下之一:

3097 3175 

3098* 您自安装以来还没有启动会话,所以 Claude Code 还没有获取标志。第一个 `claude import` 即使功能对您可用,也可能打印此消息。3176* 安装后您尚未启动过会话,因此 Claude Code 还没有获取该标志。即使该功能对您可用,第一次运行 `claude import` 也可能打印此消息。

3099* 您通过 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform,或通过[Claude 应用网关](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)使用 Claude Code。Claude Code 在这些会话中不获取功能标志,所以 `claude import` 保持不可用。3177* 您通过 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 Claude Platform on AWS 使用 Claude Code,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations) 使用。Claude Code 在这些会话中不会获取功能标志,因此 `claude import` 始终不可用。

3100* 您设置了 `DISABLE_TELEMETRY`、`DO_NOT_TRACK`、`DISABLE_GROWTHBOOK` 或 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars),它们关闭功能标志获取,所以 `claude import` 保持不可用。3178* 您设置了 `DISABLE_TELEMETRY`、`DO_NOT_TRACK`、`DISABLE_GROWTHBOOK` 或 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars),这些会关闭功能标志的获取,因此 `claude import` 始终不可用。

3101 3179 

3102**应该做什么:**3180**解决方法:**

3103 3181 

3104* 在新安装上,启动 `claude`,等待会话加载,退出,然后再次运行 `claude import`3182* 在全新安装中,启动 `claude`,等待会话加载完成后退出,然后再次运行 `claude import`

3105* 在功能标志获取保持关闭的地方,自己设置配置:使用 [`claude mcp add`](/docs/zh-CN/mcp#installing-mcp-servers) 添加 MCP 服务器,并创建您想要继承的 [`CLAUDE.md` 文件](/docs/zh-CN/memory#how-claude-md-files-load)、[skills 和命令](/docs/zh-CN/skills#where-skills-live)以及[子代理](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。消息也命名 `~/.claude/settings.json`。在 `claude import` 继承的配置中,该文件仅保存[权限模式](/docs/zh-CN/settings-reference#permission-settings);Claude Code 不从中读取 MCP 服务器。3183* 在功能标志获取始终关闭的情况下,请自行进行配置:使用 [`claude mcp add`](/docs/zh-CN/mcp#installing-mcp-servers) 添加 MCP 服务器,并创建您想迁移的 [`CLAUDE.md` 文件](/docs/zh-CN/memory#how-claude-md-files-load)、[skill 和命令](/docs/zh-CN/skills#where-skills-live)以及[子代理](/docs/zh-CN/sub-agents#choose-the-subagent-scope)。消息中还提到了 `~/.claude/settings.json`。在 `claude import` 迁移的配置中,该文件只保存[权限模式](/docs/zh-CN/settings-reference#permission-settings);Claude Code 不会从中读取 MCP 服务器。

3106 3184 

3107<h3 id="could-not-read-claude-code-config">3185<h3 id="could-not-read-claude-code-config">

3108 无法读取 Claude Code 配置3186 无法读取 Claude Code 配置

3109</h3>3187</h3>

3110 3188 

3111您在 Claude Code 无法解析 `~/.claude.json` 时运行了 [`claude import`](/docs/zh-CN/cli-reference#cli-commands),这是它存储您的登录和每个项目状态的文件。子命令读取该文件以检查可用性,但不显示交互会话显示的恢复对话,所以它以代码 1 退出。在 v2.1.222 之前,`claude import` 使用不可读的配置文件启动交互会话,其恢复对话处理该文件。3189您运行了 [`claude import`](/docs/zh-CN/cli-reference#cli-commands),而此时 Claude Code 无法解析 `~/.claude.json`,即存储您的登录信息和各项目状态的文件。该子命令会读取此文件以检查可用性,但不会显示交互式会话中的恢复对话框,因此它以退出码 1 退出。在 v2.1.222 之前,配置文件不可读时运行 `claude import` 会启动交互式会话,由其恢复对话框处理该文件。

3112 3190 

3113```text theme={null}3191```text theme={null}

3114Could not read Claude Code config — run `claude` with no arguments to recover it.3192Could not read Claude Code config — run `claude` with no arguments to recover it.

3115```3193```

3116 3194 

3117**应该做什么:**3195**解决方法:**

3118 3196 

3119* 运行不带参数的 `claude`。Claude Code 检测无效文件并提供重置它。然后再次运行 `claude import`。3197* 不带参数运行 `claude`。Claude Code 会检测到无效文件并提供重置选项。然后再次运行 `claude import`。

3120* 要保留您所做的手动编辑,请在编辑器中修复 `~/.claude.json` 中的 JSON 语法,然后重新运行 `claude import`3198* 若要保留您手动进行的编辑,请改为在编辑器中修复 `~/.claude.json` 中的 JSON 语法,然后重新运行 `claude import`

3121 3199 

3122<h3 id="could-not-import-a-server-from-claude-desktop">3200<h3 id="could-not-import-a-server-from-claude-desktop">

3123 无法从 Claude Desktop 导入服务器3201 无法从 Claude Desktop 导入服务器

3124</h3>3202</h3>

3125 3203 

3126Claude Code 无法添加您在 `claude mcp add-from-claude-desktop` 中选择的其中一个服务器。命令仍然导入其他选定的服务器,并为每个无法添加的服务器打印一行。在 v2.1.205 之前,第一个失败的服务器停止了导入。3204Claude Code 无法添加您在 `claude mcp add-from-claude-desktop` 中选择的某个服务器。该命令仍会导入其他选中的服务器,并为每个无法添加的服务器打印一行。在 v2.1.205 之前,第一个失败的服务器会中止导入。

3127 3205 

3128```text theme={null}3206```text theme={null}

3129Could not import my server: Invalid name my server. Names can only contain letters, numbers, hyphens, and underscores.3207Could not import my server: Invalid name my server. Names can only contain letters, numbers, hyphens, and underscores.

3130```3208```

3131 3209 

3132服务器名称后的文本是原因。最常见的是名称检查:Claude Desktop 允许服务器名称中的字符,例如空格和句号,而 `claude mcp` 限制为字母、数字、连字符和下划线。其他原因包括失败验证的服务器配置和被您的组织的 [MCP 策略](/docs/zh-CN/managed-mcp)阻止的服务器。3210服务器名称之后的文本是原因。最常见的是名称检查:Claude Desktop 允许服务器名称中包含空格和句点等字符,而 `claude mcp` 将其限制为字母、数字、连字符和下划线。其他原因包括服务器配置未通过验证,以及服务器被您组织的 [MCP 策略](/docs/zh-CN/managed-mcp)阻止。

3133 3211 

3134**应该做什么:**3212**解决方法:**

3135 3213 

3136* 在 `claude_desktop_config.json` 中重命名服务器以仅使用字母、数字、连字符和下划线,然后再次运行 `claude mcp add-from-claude-desktop`3214* 在 `claude_desktop_config.json` 中将服务器重命名为仅使用字母、数字、连字符和下划线,然后再次运行 `claude mcp add-from-claude-desktop`

3137* 使用 `claude mcp add` 或 `claude mcp add-json` 在有效名称下直接添加该服务器。请参阅[从 Claude Desktop 导入 MCP 服务器](/docs/zh-CN/mcp#import-mcp-servers-from-claude-desktop)。3215* 使用 `claude mcp add` 或 `claude mcp add-json` 以有效名称直接添加该服务器。请参阅[从 Claude Desktop 导入 MCP 服务器](/docs/zh-CN/mcp#import-mcp-servers-from-claude-desktop)。

3138 3216 

3139<h3 id="cannot-add-mcp-server-to-the-managed-scope">3217<h3 id="cannot-add-mcp-server-to-the-managed-scope">

3140 无法将 MCP 服务器添加到托管范围3218 无法将 MCP 服务器添加到 managed 作用域

3141</h3>3219</h3>

3142 3220 

3143您使用 `--scope managed` 运行了 `claude mcp add` 或 `claude mcp add-json`。该范围保存您的组织通过 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 托管设置提供的服务器。Claude Code 仅从托管设置读取它们,所以命令无法向该范围写入服务器。3221您使用 `--scope managed` 运行了 `claude mcp add` 或 `claude mcp add-json`。该作用域保存的是您的组织通过 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 托管设置提供的服务器。Claude Code 只从托管设置中读取它们,因此该命令无法将服务器写入该作用域。

3144 3222 

3145```text theme={null}3223```text theme={null}

3146Cannot add MCP server to scope: managed3224Cannot add MCP server to scope: managed

3147```3225```

3148 3226 

3149**应该做什么:**3227**解决方法:**

3228 

3229* 将服务器添加到您可以写入的作用域:`local`、`user` 或 `project`。不带 `--scope` 时,该命令使用 `local`。请参阅 [MCP 安装作用域](/docs/zh-CN/mcp#mcp-installation-scopes)

3230* 若要向组织中的每个用户提供该服务器,请将其添加到您部署的托管设置中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers)

3150 3231 

3151* 将服务器添加到您可以写入的范围:`local`、`user` 或 `project`。不带 `--scope` 时,命令使用 `local`。请参阅 [MCP 安装范围](/docs/zh-CN/mcp#mcp-installation-scopes)3232<h3 id="cannot-add-mcp-server-when-managed-settings-allow-only-plugin-servers">

3152* 要为您的组织中的每个用户提供服务器,请将其添加到您部署的托管设置中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers)3233 托管设置仅允许插件服务器时无法添加 MCP 服务器

3234</h3>

3235 

3236您运行了 `claude mcp add` 或 `claude mcp add-json`,而您组织的托管设置将 [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization) 设为 `true` 或设为包含 `mcp` 的列表。在该设置下,Claude Code 不会从 `~/.claude.json` 或 `.mcp.json` 加载 MCP 服务器,因此该命令以退出码 1 退出,而不是保存一个永远不会加载的服务器:

3237 

3238```text theme={null}

3239Cannot add MCP server: your organization's managed settings allow only MCP servers that plugins provide. Install a plugin that provides this server, or ask your administrator to make it available.

3240```

3241 

3242`claude mcp add-from-claude-desktop` 会将您选择的每个服务器报告为未导入,并以此消息作为原因。[`/import`](/docs/zh-CN/commands#all-commands) 会为其尝试添加的每个 MCP 服务器报告此消息,但仍会导入它找到的其他项目。

3243 

3244在 v2.1.284 之前,这些命令会保存服务器并报告成功,但该服务器永远不会加载。

3245 

3246**解决方法:**

3247 

3248* 安装一个提供该服务器的[插件](/docs/zh-CN/plugins/install)

3249* 请您的管理员通过[插件](/docs/zh-CN/plugins/org)分发该服务器;如果它是远程 HTTP 或 SSE 服务器,也可以通过 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 提供

3153 3250 

3154<h3 id="cant-read-mcp-json">3251<h3 id="cant-read-mcp-json">

3155 无法读取 .mcp.json3252 无法读取 .mcp.json

3156</h3>3253</h3>

3157 3254 

3158读取项目的 [`.mcp.json`](/docs/zh-CN/mcp#project-scope) 的命令,例如 `claude mcp add` 或 `claude mcp add-json` 使用 `--scope project`,或 `claude mcp remove`,发现您当前目录中的文件不是常规文件或大于 2 MiB,所以它以此错误退出,而不是读取文件。3255读取项目 [`.mcp.json`](/docs/zh-CN/mcp#project-scope) 的命令(例如带 `--scope project` 的 `claude mcp add` 或 `claude mcp add-json`,或 `claude mcp remove`)发现当前目录中的该文件不是常规文件或大于 2 MiB,因此以此错误退出,而不是读取该文件。

3159 3256 

3160```text theme={null}3257```text theme={null}

3161Can't read .mcp.json: it isn't a regular file or is larger than 2097152 bytes. Fix or remove it, then run the command again.3258Can't read .mcp.json: it isn't a regular file or is larger than 2097152 bytes. Fix or remove it, then run the command again.

3162```3259```

3163 3260 

3164在 v2.1.257 之前,`.mcp.json` 处的 FIFO 使命令永远等待,没有输出,指向诸如 `/dev/zero` 之类的设备文件的符号链接会增长内存,直到进程被杀死。3261在 v2.1.257 之前,`.mcp.json` 处的 FIFO 会使命令永远等待且没有任何输出,而指向 `/dev/zero` 等设备文件的符号链接会使内存持续增长,直到进程被终止。

3165 3262 

3166**应该做什么:**3263**解决方法:**

3167 3264 

3168* 检查您当前目录中 `.mcp.json` 处的内容。将其替换为 [project-scope 格式](/docs/zh-CN/mcp#project-scope)中的普通 JSON 文件,或删除它,然后再次运行命令。3265* 检查当前目录中 `.mcp.json` 处是什么内容。将其替换为采用[项目作用域格式](/docs/zh-CN/mcp#project-scope)的普通 JSON 文件,或将其删除,然后再次运行命令。

3169 3266 

3170<h3 id="mcp-server-was-not-saved-or-removed">3267<h3 id="mcp-server-was-not-saved-or-removed">

3171 MCP 服务器未被保存或删除3268 MCP 服务器未被保存或移除

3172</h3>3269</h3>

3173 3270 

3174您为 `user` 或 `local` [范围](/docs/zh-CN/mcp#mcp-installation-scopes)中的服务器运行了 `claude mcp add`、`claude mcp add-json` 或 `claude mcp remove`。两个范围都存储在 `~/.claude.json` 中,当 Claude Code 在写入后读取该文件时,更改不在该文件中。命令以此错误退出,而不是其成功行。3271您对 `user` 或 `local` [作用域](/docs/zh-CN/mcp#mcp-installation-scopes)中的服务器运行了 `claude mcp add`、`claude mcp add-json` 或 `claude mcp remove`。这两个作用域都存储在 `~/.claude.json` 中,而 Claude Code 在写入后回读该文件时,发现更改并不在其中。该命令以此错误退出,而不是输出成功信息。

3175 3272 

3176```text theme={null}3273```text theme={null}

3177MCP server "example" was not saved to /home/user/.claude.json. If that file is read-only or protected by a sandbox, make it writable or run the command outside the sandbox, then add the server again.3274MCP server "example" was not saved to /home/user/.claude.json. If that file is read-only or protected by a sandbox, make it writable or run the command outside the sandbox, then add the server again.

3178```3275```

3179 3276 

3180删除后,消息读取 `was not removed from` 并以 `then remove the server again` 结尾。对于 `local` 范围服务器,路径后跟项目目录条目所属的,如 `(local scope for /path/to/project)`。3277移除操作之后,消息会显示为 `was not removed from`,并以 `then remove the server again` 结尾。对于 `local` 作用域的服务器,路径之后会跟上该条目所属的项目目录,形式为 `(local scope for /path/to/project)`。

3181 3278 

3182在 v2.1.283 之前,`claude mcp add`、`claude mcp add-json` 和 `claude mcp remove` 即使更改没有到达文件也报告成功。3279在 v2.1.283 之前,即使更改未写入文件,`claude mcp add`、`claude mcp add-json` 和 `claude mcp remove` 也会报告成功。

3183 3280 

3184**应该做什么:**3281**解决方法:**

3185 3282 

3186* 使消息命名的文件可写,或在沙箱外运行命令,然后再次运行相同的添加或删除命令。3283* 使消息中指出的文件可写,或在沙箱之外运行命令,然后再次运行相同的添加或移除命令。

3187 3284 

3188<h3 id="mcp-server-may-not-have-been-saved-or-removed">3285<h3 id="mcp-server-may-not-have-been-saved-or-removed">

3189 MCP 服务器可能未被保存或删除3286 MCP 服务器可能未被保存或移除

3190</h3>3287</h3>

3191 3288 

3192您为 `user` 或 `local` [范围](/docs/zh-CN/mcp#mcp-installation-scopes)中的服务器运行了 `claude mcp add`、`claude mcp add-json` 或 `claude mcp remove`,Claude Code 无法读取 `~/.claude.json` 回来确认更改。更改可能在磁盘上,也可能不在。括号中的文本是该读取的错误。3289您对 `user` 或 `local` [作用域](/docs/zh-CN/mcp#mcp-installation-scopes)中的服务器运行了 `claude mcp add`、`claude mcp add-json` 或 `claude mcp remove`,而 Claude Code 无法回读 `~/.claude.json` 来确认更改。更改可能已写入磁盘,也可能没有。括号中的文本是该读取操作的错误。

3193 3290 

3194```text theme={null}3291```text theme={null}

3195MCP server "example" may not have been saved: /home/user/.claude.json could not be read to confirm the change (EACCES: permission denied, open '/home/user/.claude.json'). Run `claude mcp get example` to check, then add the server again if it is missing.3292MCP server "example" may not have been saved: /home/user/.claude.json could not be read to confirm the change (EACCES: permission denied, open '/home/user/.claude.json'). Run `claude mcp get example` to check, then add the server again if it is missing.

3196```3293```

3197 3294 

3198删除后,消息读取 `may not have been removed` 并以 `then remove the server again if it is still listed` 结尾。3295移除操作之后,消息会显示为 `may not have been removed`,并以 `then remove the server again if it is still listed` 结尾。

3199 3296 

3200在 v2.1.283 之前,命令即使更改无法确认也报告成功。3297在 v2.1.283 之前,即使无法确认更改,这些命令也会报告成功。

3201 3298 

3202**应该做什么:**3299**解决方法:**

3203 3300 

3204* 运行 `claude mcp get <name>` 检查更改是否在磁盘上。对于 `local` 范围服务器,从服务器所属的项目目录运行它,因为本地范围是每个项目的。3301* 运行 `claude mcp get <name>` 检查更改是否已写入磁盘。对于 `local` 作用域的服务器,请从该服务器所属的项目目录运行,因为 local 作用域是按项目划分的。

3205* 如果服务器在添加后丢失,或在删除后仍然列出,请再次运行相同的添加或删除命令。3302* 如果添加后服务器缺失,或移除后仍被列出,请再次运行相同的添加或移除命令。

3206 3303 

3207<h3 id="anthropic-hosted-and-doesnt-support-local-oauth">3304<h3 id="anthropic-hosted-and-doesnt-support-local-oauth">

3208 服务器是 Anthropic 托管的,不支持本地 OAuth3305 服务器由 Anthropic 托管,不支持本地 OAuth

3209</h3>3306</h3>

3210 3307 

3211您为 MCP 服务器启动了登录,其 URL 指向通过第三方身份提供商进行身份验证的 Anthropic 托管连接器主机。这些主机包括 `microsoft365.mcp.claude.com`、`gmail.mcp.claude.com` 和 `gcal.mcp.claude.com`。Claude Code 拒绝为这些主机从 `/mcp` 面板和 `claude mcp login` 启动其本地 OAuth 流,因为[它们的登录仅通过 claude.ai 工作](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)。3308您为某个 MCP 服务器发起了登录,而其 URL 指向一个通过第三方身份提供商进行身份验证的 Anthropic 托管连接器主机。这些主机包括 `microsoft365.mcp.claude.com`、`gmail.mcp.claude.com` 和 `gcal.mcp.claude.com`。对于这些主机,Claude Code 在 `/mcp` 面板和 `claude mcp login` 中都会拒绝启动其本地 OAuth 流程,因为[它们的登录只能通过 claude.ai 完成](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)。

3212 3309 

3213```text theme={null}3310```text theme={null}

3214"gmail" is Anthropic-hosted and doesn't support local OAuth. Connect it via Settings → Connectors on claude.ai (requires `claude login`), then it'll be available here automatically.3311"gmail" is Anthropic-hosted and doesn't support local OAuth. Connect it via Settings → Connectors on claude.ai (requires `claude login`), then it'll be available here automatically.

3215```3312```

3216 3313 

3217**应该做什么:**3314**解决方法:**

3218 3315 

3219* 使用 `claude mcp remove <name>` 删除您的条目,以便它不能隐藏同一 URL 处的 claude.ai 连接器3316* 使用 `claude mcp remove <name>` 移除您的条目,以免它遮蔽同一 URL 上的 claude.ai 连接器

3220* 删除后,在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 连接服务,同时登录到您在 Claude Code 中使用的帐户。连接后,如果您的活跃身份验证方法是 claude.ai 订阅登录,[连接器会自动出现在 Claude Code 中](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)3317* 移除后,在登录您在 Claude Code 中使用的账户的情况下,前往 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 连接该服务。连接完成后,如果您当前的身份验证方式是 claude.ai 订阅登录,[该连接器会自动出现在 Claude Code 中](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)

3221 3318 

3222<h3 id="server-rejected-the-authorization-header-minted-by-the-configured-headershelper">3319<h3 id="server-rejected-the-authorization-header-minted-by-the-configured-headershelper">

3223 服务器拒绝了由配置的 headersHelper 生成的 Authorization 标头3320 服务器拒绝了由配置的 headersHelper 生成的 Authorization 标头

3224</h3>3321</h3>

3225 3322 

3226其 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) 提供 `Authorization` 标头的 MCP 服务器以 HTTP 401 或 403 回答连接,所以 Claude Code 将连接报告为失败。因为助手提供 `Authorization` 标头,Claude Code [不会回退到 OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers) 对于服务器:3323某个由 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication) 提供 `Authorization` 标头的 MCP 服务器以 HTTP 401 或 403 响应了连接,因此 Claude Code 报告连接失败。由于该辅助程序提供了 `Authorization` 标头,Claude Code 对该服务器[不会回退到 OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers):

3227 3324 

3228```text theme={null}3325```text theme={null}

3229Server rejected the Authorization header minted by the configured headersHelper (HTTP 401). Check that the helper command returns a valid credential for this MCP endpoint — OAuth fallback is disabled when the helper supplies Authorization.3326Server rejected the Authorization header minted by the configured headersHelper (HTTP 401). Check that the helper command returns a valid credential for this MCP endpoint — OAuth fallback is disabled when the helper supplies Authorization.

3230```3327```

3231 3328 

3232Claude Code 在每次连接尝试时重新运行助手,所以在短暂拒绝后重试,例如令牌轮换竞争,可以使用新凭证成功。3329Claude Code 在每次连接尝试时都会重新运行该辅助程序,因此在暂时性拒绝(例如令牌轮换竞争)之后重试,可能会以新的凭据成功连接。

3233 3330 

3234**应该做什么:**3331**解决方法:**

3235 3332 

3236* 按照 Claude Code 运行它的方式自己运行 `headersHelper` 命令:从 [Claude Code 运行它的目录](/docs/zh-CN/mcp#where-the-helper-runs),使用 [Claude Code 为其设置的环境变量](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication),以及不使用 [Claude Code 为来自项目 `.mcp.json`、插件或项目代理文件的服务器删除的凭证变量](/docs/zh-CN/mcp#which-variables-a-helper-can-read)。检查它是否打印服务器端点接受的 `Authorization` 值3333* 按照 Claude Code 运行它的方式自行运行 `headersHelper` 命令:在 [Claude Code 运行它的目录](/docs/zh-CN/mcp#where-the-helper-runs)中,使用 [Claude Code 为其设置的环境变量](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication),并且对于来自项目 `.mcp.json`、插件或项目 Agent 文件的服务器,不包含 [Claude Code 移除的凭据变量](/docs/zh-CN/mcp#which-variables-a-helper-can-read)。检查它打印的 `Authorization` 值是否被服务器端点接受

3237* 修复助手或其凭证源后,在 `/mcp` 中选择服务器并选择**重新连接**3334* 修复辅助程序或其凭据来源后,在 `/mcp` 中选择该服务器并选择 **Reconnect**

3238 3335 

3239在 v2.1.248 之前,Claude Code 为其助手提供 `Authorization` 标头的服务器运行 OAuth 发现。该发现可能失败,显示 `Incompatible auth server: does not support dynamic client registration` 而不是报告被拒绝的凭证。3336在 v2.1.248 之前,对于由辅助程序提供 `Authorization` 标头的服务器,Claude Code 会运行 OAuth 发现。该发现过程可能以 `Incompatible auth server: does not support dynamic client registration` 失败,而不是报告被拒绝的凭据。

3240 3337 

3241<h3 id="mcp-permission-prompt-tool-not-found">3338<h3 id="mcp-permission-prompt-tool-not-found">

3242 未找到 MCP 权限提示工具3339 未找到 MCP 权限提示工具

3243</h3>3340</h3>

3244 3341 

3245您传递给 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 的工具在运行首次需要权限决定时不在连接的 MCP 工具中,要么因为其服务器从未连接,要么因为没有连接的服务器公开该名称的工具。Claude Code 仍然发送您的提示:[非交互](/docs/zh-CN/headless)运行在第一个工具调用时以此错误和退出代码 1 退出,所以即使请求已发出,它也不会产生答案。在第一个提示之前,Claude Code 等待最多由 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars) 设置的每个服务器连接超时 30 秒,以便该服务器连接。在 v2.1.206 之前,启动不等待服务器完成连接,所以启动缓慢但健康的服务器也会产生此错误。3342当运行首次需要权限决策时,您传给 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 的工具不在已连接的 MCP 工具之中,原因可能是其服务器从未连接,或者没有任何已连接的服务器公开该名称的工具。Claude Code 仍会发送您的提示词:[非交互](/docs/zh-CN/headless)运行会在第一次工具调用时以此错误和退出码 1 退出,因此即使请求已经发出,也不会产生回答。在第一个提示词之前,Claude Code 会等待该服务器连接,最长等待由 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars) 设置的每服务器连接超时时间 30 秒。在 v2.1.206 之前,启动时不会等待服务器完成连接,因此启动较慢但运行正常的服务器也会产生此错误。

3246 3343 

3247```text theme={null}3344```text theme={null}

3248Error: MCP tool mcp__permissions__approve (passed via --permission-prompt-tool) not found. Available MCP tools: none3345Error: MCP tool mcp__permissions__approve (passed via --permission-prompt-tool) not found. Available MCP tools: none

3249```3346```

3250 3347 

3251`Available MCP tools:` 后的列表命名已连接的 MCP 工具。3348`Available MCP tools:` 之后的列表列出了已连接的 MCP 工具。

3252 3349 

3253**应该做什么:**3350**解决方法:**

3254 3351 

3255* 检查服务器启动并保持连接:在同一目录中运行 `claude mcp list` 并确认服务器列为已连接3352* 检查服务器能否启动并保持连接:在同一目录中运行 `claude mcp list`,并确认该服务器被列为已连接

3256* 确认工具名称与服务器公开的 `mcp__<server>__<tool>` 名称匹配3353* 确认工具名称与服务器公开的 `mcp__<server>__<tool>` 名称一致

3257* 如果服务器需要超过 30 秒才能启动,请提高 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars)3354* 如果服务器需要超过 30 秒才能启动,请调高 [`MCP_TIMEOUT`](/docs/zh-CN/env-vars)

3258 3355 

3259<h3 id="oauth-callback-port-is-already-in-use">3356<h3 id="oauth-callback-port-is-already-in-use">

3260 OAuth 回调端口已在使用中3357 OAuth 回调端口已被占用

3261</h3>3358</h3>

3262 3359 

3263当您使用 OAuth 登录远程 MCP 服务器时,Claude Code 启动本地侦听器以接收登录回调。如果该侦听器需要的端口被另一个进程持有,登录失败,显示此消息。这主要发生在[固定回调端口](/docs/zh-CN/mcp#use-a-fixed-oauth-callback-port)通过 [`MCP_OAUTH_CALLBACK_PORT`](/docs/zh-CN/env-vars) 变量或 `--callback-port` 设置时,因为没有一个 Claude Code 会选择可用端口。3360当您使用 OAuth 登录远程 MCP 服务器时,Claude Code 会启动一个本地监听器来接收登录回调。如果该监听器所需的端口被另一个进程占用,登录就会以此消息失败。这种情况主要发生在通过 [`MCP_OAUTH_CALLBACK_PORT`](/docs/zh-CN/env-vars) 变量或 `--callback-port` 设置了[固定回调端口](/docs/zh-CN/mcp#use-a-fixed-oauth-callback-port)时,因为如果没有设置,Claude Code 会选择一个可用端口。

3264 3361 

3265```text theme={null}3362```text theme={null}

3266OAuth callback port <port> is already in use — another process may be holding it. Run `lsof -ti:<port> -sTCP:LISTEN` to find it.3363OAuth callback port <port> is already in use — another process may be holding it. Run `lsof -ti:<port> -sTCP:LISTEN` to find it.

3267```3364```

3268 3365 

3269在 Windows 上,建议的命令是 `netstat -ano | findstr :<port>`。3366在 Windows 上,建议的命令改为 `netstat -ano | findstr :<port>`。

3270 3367 

3271**应该做什么:**3368**解决方法:**

3272 3369 

3273* 运行消息中的命令以找到持有端口的进程,并停止它或等待它完成3370* 运行消息中的命令找到占用该端口的进程,然后将其停止或等待其结束

3274* 如果另一个程序永久需要该端口,请向服务器注册不同的重定向 URI,并使用 `MCP_OAUTH_CALLBACK_PORT` 或 `--callback-port` 设置其端口,以及您使用的任何一个3371* 如果其他程序需要永久占用该端口,请向服务器注册一个不同的重定向 URI,并使用 `MCP_OAUTH_CALLBACK_PORT` 或 `--callback-port`(取决于您使用哪一个)设置其端口

3275* 然后再次启动登录,例如通过在 `/mcp` 中选择服务器3372* 然后重新开始登录,例如在 `/mcp` 中选择该服务器

3276 3373 

3277<h3 id="no-available-ports-for-oauth-redirect">3374<h3 id="no-available-ports-for-oauth-redirect">

3278 OAuth 重定向没有可用的端口3375 没有可用于 OAuth 重定向的端口

3279</h3>3376</h3>

3280 3377 

3281当您使用[OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers)登录远程 MCP 服务器时,Claude Code 启动本地侦听器以接收登录回调。当 Claude Code 无法为其绑定本地端口时,登录失败,显示此消息。机器上的某些内容阻止它在 `127.0.0.1` 上侦听,例如安全软件或拒绝本地侦听器的沙箱策略。3378当您使用 [OAuth](/docs/zh-CN/mcp#authenticate-with-remote-mcp-servers) 登录远程 MCP 服务器时,Claude Code 会启动一个本地监听器来接收登录回调。当 Claude Code 无法为其绑定本地端口时,登录会以此消息失败。机器上的某些东西阻止了它在 `127.0.0.1` 上监听,例如安全软件或拒绝本地监听器的沙箱策略。

3282 3379 

3283```text theme={null}3380```text theme={null}

3284No available ports for OAuth redirect3381No available ports for OAuth redirect

3285```3382```

3286 3383 

3287在 v2.1.268 之前,Claude Code 不会回退到操作系统分配的端口,所以消息也会在仅其自选端口无法绑定时出现。这可能发生在 Hyper-V 保留覆盖 Claude Code 选择的端口的端口范围的 Windows 主机上。3384在 v2.1.268 之前,Claude Code 不会回退到由操作系统分配的端口,因此当仅是其自行选择的端口无法绑定时,也会出现此消息。这种情况可能发生在 Hyper-V 预留了覆盖 Claude Code 选择范围的端口区间的 Windows 主机上。

3288 3385 

3289**应该做什么:**3386**解决方法:**

3290 3387 

3291* 检查安全软件或沙箱策略是否阻止进程在 `127.0.0.1` 上侦听,并允许 Claude Code 绑定本地端口3388* 检查安全软件或沙箱策略是否阻止进程在 `127.0.0.1` 上监听,并允许 Claude Code 绑定本地端口

3292* 然后再次启动登录,例如通过在 `/mcp` 中选择服务器3389* 然后重新开始登录,例如在 `/mcp` 中选择该服务器

3293 3390 

3294<h3 id="security-review-fails-without-origin-head">3391<h3 id="security-review-fails-without-origin-head">

3295 /security-review 在没有 origin/HEAD 时失败3392 缺少 origin/HEAD 时 /security-review 失败

3296</h3>3393</h3>

3297 3394 

3298[`/security-review`](/docs/zh-CN/commands#all-commands) 通过将您的分支与 `origin/HEAD` 进行比较来构建其审查上下文,这是记录您的 `origin` 远程上哪个分支是默认分支的本地 ref。当该 ref 不存在时,收集差异的 git 命令失败,审查在启动前停止。3395[`/security-review`](/docs/zh-CN/commands#all-commands) 通过将您的分支与 `origin/HEAD` 进行 diff 来构建其审查上下文,`origin/HEAD` 是记录 `origin` 远程上哪个分支为默认分支的本地引用。当该引用不存在时,用于收集 diff 的 git 命令会失败,审查在开始之前就会停止。

3299 3396 

3300```text theme={null}3397```text theme={null}

3301Error: Shell command failed for pattern "!`git diff --name-only origin/HEAD...`": [stderr]3398Error: Shell command failed for pattern "!`git diff --name-only origin/HEAD...`": [stderr]


3304'git <command> [<revision>...] -- [<file>...]'3401'git <command> [<revision>...] -- [<file>...]'

3305```3402```

3306 3403 

3307消息可能引用 `git log` 或不同的 `git diff`。Git 仅在远程通告默认分支且您的获取 refspec 覆盖它时创建 `origin/HEAD`,完整的远程克隆带有提交时会这样做。在这些设置中 ref 丢失:3404消息中引用的也可能是 `git log` 或其他 `git diff` 命令。只有当远程公布了默认分支且您的 fetch refspec 覆盖了它时,Git 才会创建 `origin/HEAD`;对包含提交的远程执行完整的 `git clone` 时就是如此。在以下设置中,该引用会缺失:

3308 3405 

3309* 单分支或 CI 检出,它获取太窄的 refspec3406* 单分支或 CI 检出,其 fetch 的 refspec 范围过窄

3310* 远程服务器端 HEAD 指向没有人推送的分支3407* 服务器端 HEAD 指向一个从未有人推送过的分支的远程

3311* 没有 `origin` 远程的存储库,或您从未获取的存储库3408* 没有 `origin` 远程的仓库,或您从未执行过 fetch 的仓库

3312 3409 

3313Claude Code 为任何 [injects dynamic context](/docs/zh-CN/skills#when-an-injected-command-fails) 的 skill 显示相同的错误,失败的注入命令会中止该 skill 的调用。两个兄弟字符串在命令运行之前就会触发:3410对于任何[注入动态上下文](/docs/zh-CN/skills#when-an-injected-command-fails)的 skill,Claude Code 都会显示相同的错误,注入的命令失败会中止该 skill 的调用。还有两条相关字符串会在命令运行之前就触发:

3314 3411 

3315* `Shell command permission check failed for pattern "..."`:命令的权限检查不允许它。[Permission checks on injected commands](/docs/zh-CN/skills#permission-checks-on-injected-commands) 涵盖在每个权限模式中哪些结果会中止,以及如何使用 `allowed-tools` 预先批准命令3412* `Shell command permission check failed for pattern "..."`:该命令的权限检查未允许它运行。[注入命令的权限检查](/docs/zh-CN/skills#permission-checks-on-injected-commands)介绍了在每种权限模式下哪些结果会导致中止,以及如何使用 `allowed-tools` 预先批准命令

3316* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``:skill 的 frontmatter 在没有它的机器上要求 bash。安装 Git for Windows 或将 frontmatter 更改为 `shell: powershell`。请参阅[注入命令如何运行](/docs/zh-CN/skills#how-injected-commands-run)3413* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``:该 skill 的 frontmatter 要求使用 bash,但机器上没有 bash。请安装 Git for Windows,或将 frontmatter 改为 `shell: powershell`。请参阅[注入命令的运行方式](/docs/zh-CN/skills#how-injected-commands-run)

3317 3414 

3318**应该做什么:**3415**解决方法:**

3319 3416 

3320* 通过命名您的远程默认分支创建 ref:`git remote set-head origin <default-branch>`。只要本地跟踪 ref `origin/<default-branch>` 存在,这就有效。如果它不存在,如在单分支克隆中,首先获取分支:运行 `git remote set-branches --add origin <branch>`,然后 `git fetch origin`,然后重新运行 set-head 命令。重新运行 `/security-review`。3417* 通过指定远程的默认分支来创建该引用:`git remote set-head origin <default-branch>`。只要本地跟踪引用 `origin/<default-branch>` 存在,此方法就有效。如果它不存在(例如在单分支克隆中),请先 fetch 该分支:运行 `git remote set-branches --add origin <branch>`,然后运行 `git fetch origin`,再重新运行 set-head 命令。然后重新运行 `/security-review`。

3321* 如果您不想命名分支,运行 `git fetch origin` 然后 `git remote set-head origin --auto`,它询问远程其默认分支是什么。当远程不通告默认分支时它失败,显示 `error: Cannot determine remote HEAD`,因为它是空的或其 HEAD 指向没有人推送的分支;改为显式命名分支。当您的克隆不获取该分支时它失败,显示 `error: Not a valid ref`;首先按上面的方式扩大 refspec。3418* 如果您不想指定分支名,请运行 `git fetch origin`,然后运行 `git remote set-head origin --auto`,它会向远程询问哪个分支是默认分支。当远程未公布默认分支时(因为远程为空或其 HEAD 指向从未有人推送过的分支),它会以 `error: Cannot determine remote HEAD` 失败;此时请显式指定分支名。当您的克隆不 fetch 该分支时,它会以 `error: Not a valid ref` 失败;请先按上述方法扩大 refspec。

3322* 如果存储库没有远程,使用 `git remote add origin <url>` 添加一个并在创建 ref 之前获取。如果远程是空的,首先使用 `git push -u origin HEAD` 推送您的分支,并在 set-head 命令中命名该分支;`origin/HEAD` 然后指向您刚推送的分支,所以 `/security-review` 看到空差异,直到分支与其分歧。3419* 如果仓库没有远程,请使用 `git remote add origin <url>` 添加一个,并在创建引用之前执行 fetch。如果远程为空,请先使用 `git push -u origin HEAD` 推送您的分支,并在 set-head 命令中指定该分支;此后 `origin/HEAD` 指向您刚推送的分支,因此在该分支与其产生分歧之前,`/security-review` 看到的 diff 为空。

3323 3420 

3324<h3 id="input-must-be-provided-when-using-print">3421<h3 id="input-must-be-provided-when-using-print">

3325 使用 `--print` 时必须提供输入3422 使用 `--print` 时必须提供输入

3326</h3>3423</h3>

3327 3424 

3328裸 `claude` 需要 stdout 是终端才能启动交互 UI。当 stdout 被重定向,或控制台不是真实终端时,例如 PowerShell ISE 和某些 IDE 输出窗格,`claude` 改为以[非交互](/docs/zh-CN/headless)模式运行。这与 `claude -p` 相同,它需要提示,所以消息命名 `--print`,即使您没有传递标志。在任何地方传递 `-p`/`--print` 而不带提示且 stdin 上没有任何内容会产生相同的错误。3425不带参数的 `claude` 需要 stdout 是终端才能启动交互式 UI。当 stdout 被重定向,或控制台不是真正的终端(例如 PowerShell ISE 和某些 IDE 输出窗格)时,`claude` 会改为以[非交互方式](/docs/zh-CN/headless)运行。这与 `claude -p` 是同一种模式,而该模式需要提示词,因此即使您没有传入该标志,消息中也会提到 `--print`。在任何环境中,传入 `-p`/`--print` 却没有提示词、也没有通过 stdin 管道传入内容,都会产生相同的错误。

3329 3426 

3330```text theme={null}3427```text theme={null}

3331Error: Input must be provided either through stdin or as a prompt argument when using --print3428Error: Input must be provided either through stdin or as a prompt argument when using --print

3332```3429```

3333 3430 

3334**应该做什么:**3431**解决方法:**

3335 3432 

3336* 对于交互使用,在真实终端中运行 `claude`:Windows Terminal 或 PowerShell 控制台而不是 ISE,以及您的 IDE 的集成终端而不是输出窗格3433* 对于交互式使用,请在真正的终端中运行 `claude`:使用 Windows Terminal 或 PowerShell 控制台而非 ISE,使用 IDE 的集成终端而非输出窗格

3337* 对于一次性使用,传递提示:`claude -p "your question"`,或使用 `echo "your question" | claude -p` 管道它3434* 对于一次性使用,请传入提示词:`claude -p "your question"`,或通过管道传入:`echo "your question" | claude -p`

3435 

3436<h3 id="claude-code-cant-read-the-keyboard-here">

3437 Claude Code 在此处无法读取键盘输入

3438</h3>

3439 

3440您在没有 [`-p`](/docs/zh-CN/headless) 的情况下运行了 `claude`,这会启动一个[交互式会话](/docs/zh-CN/interactive-mode),但其标准输入不是终端。可能是某些东西通过管道传输或重定向了它,或者启动 `claude` 的程序提供了自己的输入流。

3441 

3442交互式会话需要一个终端来读取您的按键,而在没有终端时 Claude Code 的行为取决于您的平台:

3443 

3444* **Windows**:Claude Code 将消息打印到 stderr,并以退出码 1 退出,而不是启动界面

3445* **macOS 和 Linux**:Claude Code 从 `/dev/tty` 读取您的按键并启动会话,任何通过管道传入的文本都会作为您的第一个提示词。当 `/dev/tty` 无法打开时,您会看到此消息,其第一行会提到 `/dev/tty`,而不是 Windows 的措辞。

3446 

3447在 Windows 上,消息如下:

3448 

3449```text theme={null}

3450Claude Code can't read the keyboard here: stdin is not a terminal (it is piped, redirected, or supplied by the program that launched claude), and on Windows it can't fall back to the console for input yet.

3451Run claude directly in Windows Terminal, PowerShell, or Command Prompt, without piping or redirecting its input.

3452To send text as a prompt and print the reply instead, add -p; it also works with --continue and --resume <session-id> (for example: type notes.md | claude -p --continue).

3453```

3454 

3455**解决方法:**

3456 

3457* 若要以交互方式工作,请直接在终端中运行 `claude`,不要通过管道传输或重定向其输入

3458* 若要在不使用交互式界面的情况下获取回复(例如从脚本中),请添加 `-p`,并以参数或 stdin 的方式提供提示词,例如 `claude -p "your question"` 或 `echo "your question" | claude -p`。这同样适用于 `--continue` 和 `--resume <session-id>`。

3459 

3460在 v2.1.287 之前,Claude Code 会启动界面而不是打印此消息,然后要么屏幕上什么都不显示,要么以包含 `Raw mode is not supported` 的错误失败。

3461 

3462如果您是在 `claude install` 期间看到 `Raw mode is not supported`,请参阅[安装期间出现 `Raw mode is not supported`](/docs/zh-CN/troubleshoot-install#raw-mode-is-not-supported-during-install)。

3338 3463 

3339<h3 id="input-contained-only-whitespace">3464<h3 id="input-contained-only-whitespace">

3340 输入仅包含空格3465 输入仅包含空白字符

3341</h3>3466</h3>

3342 3467 

3343在[非交互模式](/docs/zh-CN/headless)中,Claude Code 拒绝完全由空格、制表符或换行符组成的提示,而不是发送它,因为 API 拒绝没有可见文本的消息。您看到的消息取决于空白提示来自何处:3468在[非交互模式](/docs/zh-CN/headless)下,Claude Code 会拒绝完全由空格、制表符或换行符组成的提示词,而不是发送它,因为 API 会拒绝没有可见文本的消息。您看到哪条消息取决于空白提示词的来源:

3344 3469 

3345* **`claude -p` 的提示参数或管道 stdin**:`claude` 以 `Error: Input contained only whitespace. Provide a prompt with text through stdin or as a prompt argument when using --print` 退出3470* **`claude -p` 的提示词参数或通过管道传入的 stdin**:`claude` 以 `Error: Input contained only whitespace. Provide a prompt with text through stdin or as a prompt argument when using --print` 退出

3346* **提交给运行 `--input-format stream-json` 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 会话的消息**:Claude Code 在不调用模型的情况下结束轮次,会话保持可用。拒绝作为信息消息和轮次的结果文本到达:`Blank prompt — the message was only whitespace, so nothing was sent to the model.`3471* **提交到正在运行的 `--input-format stream-json` 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 会话的消息**:Claude Code 会在不调用模型的情况下结束该轮次,会话仍可继续使用。拒绝信息会以一条提示性消息以及该轮次的结果文本的形式送达:`Blank prompt — the message was only whitespace, so nothing was sent to the model.`

3347 3472 

3348在 v2.1.229 之前,Claude Code 将仅空格消息发送到 API,API 以 400 错误拒绝请求。3473在 v2.1.229 之前,Claude Code 会将仅含空白字符的消息发送给 API,API 会以 400 错误拒绝该请求。

3349 3474 

3350**应该做什么:**3475**解决方法:**

3351 3476 

3352* 在提示中包含可见文本。如果脚本从变量或文件构建提示,请在调用 Claude Code 之前检查源是否不为空。3477* 在提示词中包含可见文本。如果脚本从变量或文件构建提示词,请在调用 Claude Code 之前检查来源是否为空。

3353 3478 

3354<h3 id="stream-json-input-carried-over-256m-characters-with-no-newline">3479<h3 id="stream-json-input-carried-over-256m-characters-with-no-newline">

3355 stream-json 输入在没有换行符的情况下超过 256M 个字符3480 stream-json 输入包含超过 256M 个字符且没有换行符

3356</h3>3481</h3>

3357 3482 

3358您的程序在没有换行符的情况下在 stdin 上发送了超过 268,435,456 个字符到 `claude -p --input-format stream-json` 运行,所以 Claude Code 将此错误打印到 stderr 并以代码 1 退出,而不是缓冲更多输入。消息将该预算表示为 `256M`。在 v2.1.257 之前,Claude Code 无限制地缓冲此类输入,增长内存直到进程崩溃或被杀死。3483您的程序在没有换行符的情况下,向 `claude -p --input-format stream-json` 运行的 stdin 发送了超过 268,435,456 个字符,因此 Claude Code 将此错误打印到 stderr 并以退出码 1 退出,而不是继续缓冲更多输入。消息将该上限表述为 `256M`。在 v2.1.257 之前,Claude Code 会无限制地缓冲此类输入,使内存不断增长,直到进程崩溃或被终止。

3359 3484 

3360```text theme={null}3485```text theme={null}

3361Error: stream-json input carried over 256M characters with no newline. Each stream-json message must be a single newline-terminated JSON line: either the producer is not newline-terminating its messages, or one message exceeded this budget.3486Error: stream-json input carried over 256M characters with no newline. Each stream-json message must be a single newline-terminated JSON line: either the producer is not newline-terminating its messages, or one message exceeded this budget.

3362```3487```

3363 3488 

3364没有换行符的这么长的输入通常意味着生产者根本不是 stream-json 生产者,例如二进制文件或意外管道的纯日志输出。超过预算的单个消息失败相同的检查。3489如此长且没有换行符的输入,通常意味着生产方根本不是 stream-json 生产方,例如误通过管道传入的二进制文件或纯日志输出。单条消息超过上限也会导致同样的检查失败。

3365 3490 

3366**应该做什么:**3491**解决方法:**

3367 3492 

3368* 检查什么被管道到 stdin。使用 [`--input-format stream-json`](/docs/zh-CN/cli-reference#cli-flags),每条消息必须是一个换行符终止的 JSON 行3493* 检查通过管道传入 stdin 的内容。使用 [`--input-format stream-json`](/docs/zh-CN/cli-reference#cli-flags) 时,每条消息都必须是以换行符结尾的单行 JSON

3369* 要改为发送纯文本,请删除 `--input-format stream-json`;`claude -p` 默认从 stdin 读取纯文本提示3494* 若要改为发送纯文本,请去掉 `--input-format stream-json`;`claude -p` 默认从 stdin 读取纯文本提示词

3370 3495 

3371<h3 id="unknown-command">3496<h3 id="unknown-command">

3372 未知命令3497 Unknown command

3373</h3>3498</h3>

3374 3499 

3375在交互终端会话中,您提交了一个 `/` 名称,它与此会话中的任何命令都不匹配,所以 Claude Code 报告该名称而不是运行任何内容:3500在交互式终端会话中,您提交的 `/` 名称与此会话中的任何命令都不匹配,因此 Claude Code 会报告该名称,而不运行任何内容:

3376 3501 

3377```text theme={null}3502```text theme={null}

3378Unknown command: /hepl. Did you mean /help?3503Unknown command: /hepl. Did you mean /help?

3379```3504```

3380 3505 

3381Claude Code 建议此会话中菜单列出的最接近的命令名称或别名。当没有接近的时候,消息在名称后结束。原因通常是以下之一:3506Claude Code 会建议菜单在此会话中列出的最接近的命令名称或别名。如果没有接近的名称,消息会在该名称之后结束。原因通常是以下之一:

3382 3507 

3383* 打字错误,例如 `/hepl` 代替 `/help`。[How the command menu matches what you type](/docs/zh-CN/commands#how-the-command-menu-matches-what-you-type) 涵盖在提交前选择接近的匹配3508* 拼写错误,例如将 `/help` 输成 `/hepl`。[命令菜单如何匹配您输入的内容](/docs/zh-CN/commands#how-the-command-menu-matches-what-you-type)介绍了如何在提交前选择一个接近的匹配项

3384* 存在但在此会话中不可用的命令,因为不满足要求,例如您的平台、计划或身份验证方法。[`/web-setup`](/docs/zh-CN/web-quickstart#web-setup-shows-no-commands-match-or-unknown-command) 和 [`/schedule`](/docs/zh-CN/routines#schedule-returns-unknown-command) 的故障排除条目演示两个常见情况。某些命令在您的组织的策略禁用它们时用自己的消息回答,例如 [`Cloud sessions are disabled by your organization's policy`](#cloud-sessions-are-disabled-by-your-organizations-policy)3509* 命令存在,但由于未满足某项要求(例如您的平台、套餐或身份验证方式)而在此会话中不可用。[`/web-setup`](/docs/zh-CN/web-quickstart#web-setup-shows-no-commands-match-or-unknown-command) 和 [`/schedule`](/docs/zh-CN/routines#schedule-returns-unknown-command) 的故障排除条目介绍了两种常见情况。某些命令在被您组织的策略禁用时会以自己的消息回复,例如 [`Cloud sessions are disabled by your organization's policy`](#cloud-sessions-are-disabled-by-your-organizations-policy)

3385* 来自[插件](/docs/zh-CN/plugins/overview)或[MCP 服务器](/docs/zh-CN/mcp#use-mcp-prompts-as-commands)的命令,在此会话中未安装或连接3510* 来自[插件](/docs/zh-CN/plugins/overview)或 [MCP 服务器](/docs/zh-CN/mcp#use-mcp-prompts-as-commands)的命令,而该插件或服务器在此会话中未安装或未连接

3386 3511 

3387Claude Code 仅在交互终端会话中以这种方式回答不匹配的 `/` 名称。在所有其他会话中,它将提示作为正常消息发送给 Claude,并注意命令未运行以及 Claude 可以在会话中运行的命令列表。这些会话包括:3512只有在交互式终端会话中,Claude Code 才会以这种方式回复未匹配的 `/` 名称。在其他所有会话中,它会将该提示词作为普通消息发送给 Claude,并附上一条说明,指出该命令未运行,以及 Claude 在此会话中可以运行的命令列表。这些会话包括:

3388 3513 

3389* `-p` 运行3514* `-p` 运行

3390* [Agent SDK](/docs/zh-CN/agent-sdk/overview) 应用程序3515* [Agent SDK](/docs/zh-CN/agent-sdk/overview) 应用程序

3391* [Desktop 应用](/docs/zh-CN/desktop)的代码选项卡3516* [桌面应用](/docs/zh-CN/desktop)的 Code 标签页

3392* [VS Code 扩展](/docs/zh-CN/vs-code)的聊天面板3517* [VS Code 扩展](/docs/zh-CN/vs-code)的聊天面板

3393* [云会话](/docs/zh-CN/claude-code-on-the-web)和[例程](/docs/zh-CN/routines)3518* [云端会话](/docs/zh-CN/claude-code-on-the-web)和 [Routine](/docs/zh-CN/routines)

3394 3519 

3395对于无法在这些会话之一中运行的内置命令,Claude Code 仍然回答命令不可用,而不是将其发送给 Claude。在 v2.1.274 之前,仅云会话和例程将不匹配的名称发送给 Claude。在 v2.1.273 之前,它们也回答 `Unknown command`。3520对于无法在上述会话之一中运行的内置命令,Claude Code 仍会回复该命令不可用,而不是将其发送给 Claude。在 v2.1.274 之前,只有云端会话和 Routine 会将未匹配的名称发送给 Claude。在 v2.1.273 之前,它们也会回复 `Unknown command`。

3396 3521 

3397Claude Code 不将每个以 `/` 开头的提示视为命令。当 `/` 后的第一个单词以标点符号开头时,它将提示作为正常消息发送给 Claude,例如打开 Lean doc 注释的 `/--`,或是路径,例如 `/var/log/syslog`。3522Claude Code 不会将每个以 `/` 开头的提示词都视为命令。当 `/` 之后的第一个词以标点开头(例如开启 Lean 文档注释的 `/--`),或者是一个路径(例如 `/var/log/syslog`)时,它会将该提示词作为普通消息发送给 Claude。

3398 3523 

3399在 v2.1.236 之前,如果您在命令菜单列出您键入的名称的接近匹配时按 `Enter`,Claude Code 会运行该匹配,所以 `/hepl` 之类的打字错误会运行 `/help` 而不是产生此消息。3524在 v2.1.236 之前,如果在命令菜单列出与您输入的名称相近的匹配项时按下 `Enter`,Claude Code 会运行该匹配项,因此像 `/hepl` 这样的拼写错误会运行 `/help`,而不是产生此消息。

3400 3525 

3401**应该做什么:**3526**解决方法:**

3402 3527 

3403* 运行建议的名称,或键入 `/` 后跟名称的一部分以查看此会话中可用的内容3528* 运行建议的名称,或输入 `/` 后跟名称的一部分,以查看此会话中可用的命令

3404* 如果 Claude Code 将记录的命令报告为未知,请检查[命令参考](/docs/zh-CN/commands)中的其行以了解它命名的要求3529* 如果 Claude Code 将文档中记载的命令报告为未知,请在[命令参考](/docs/zh-CN/commands)中查看其所在行列出的要求

3405 3530 

3406<h3 id="diff-is-too-large-for-ultrareview">3531<h3 id="diff-is-too-large-for-ultrareview">

3407 Diff 对于 ultrareview 来说太大了3532 diff 过大,无法进行 ultrareview

3408</h3>3533</h3>

3409 3534 

3410您的分支和基础分支之间的差异,包括未提交和暂存的更改,超过了 [ultrareview](/docs/zh-CN/ultrareview) 的大小限制,所以 `/code-review ultra` 和 `claude ultrareview` 子命令在云会话启动前拒绝审查。被拒绝的审查不使用免费运行,也不计费使用信用。消息命名有效的限制、您的差异大小以及贡献最多更改行的文件。在 v2.1.216 之前,消息仅显示原始差异统计。3535您的分支与基础分支之间的 diff(包括未提交和已暂存的更改)超出了 [ultrareview](/docs/zh-CN/ultrareview) 的大小限制,因此 `/code-review ultra` 和 `claude ultrareview` 子命令会在云端会话启动前拒绝审查。被拒绝的审查不会消耗免费次数,也不会计费使用额度。消息会指出生效的限制、您的 diff 大小,以及贡献最多更改行数的文件。在 v2.1.216 之前,消息只显示原始的 diff 统计信息。

3411 3536 

3412```text theme={null}3537```text theme={null}

3413Diff is too large for ultrareview: 812 files, 96,410 lines changed (limits: 500 files, 8,000 lines). Largest files: package-lock.json (41,904 lines), dist/bundle.js (18,210 lines), src/generated/api.ts (9,876 lines). Pass a closer base branch (`/code-review ultra <branch>`) to narrow the scope, or split the change.3538Diff is too large for ultrareview: 812 files, 96,410 lines changed (limits: 500 files, 8,000 lines). Largest files: package-lock.json (41,904 lines), dist/bundle.js (18,210 lines), src/generated/api.ts (9,876 lines). Pass a closer base branch (`/code-review ultra <branch>`) to narrow the scope, or split the change.

3414```3539```

3415 3540 

3416审查拉取请求应用相同的限制;该形式的消息以 `PR #<N> is too large for ultrareview` 开头,并命名 PR 的文件和行数。3541审查 Pull Request 时适用相同的限制;该形式的消息以 `PR #<N> is too large for ultrareview` 开头,并指出该 PR 的文件数和行数。

3417 3542 

3418**应该做什么:**3543**解决方法:**

3419 3544 

3420* 传递更接近您的工作的基础分支,例如 `/code-review ultra develop`,以便审查仅涵盖与该分支的差异3545* 传入一个更接近您工作的基础分支,例如 `/code-review ultra develop`,使审查仅覆盖相对于该分支的 diff

3421* 将更改分成较小的分支并审查每一个。消息命名的文件贡献最多更改行,所以首先将这些移到它们自己的分支。3546* 将更改拆分为更小的分支并分别审查。消息中指出的文件贡献了最多的更改行数,因此可以先将它们移到单独的分支中。

3422 3547 

3423<h3 id="could-not-find-merge-base-with-the-base-branch">3548<h3 id="could-not-find-merge-base-with-the-base-branch">

3424 无法找到与基础分支的合并基础3549 无法找到与基础分支的 merge-base

3425</h3>3550</h3>

3426 3551 

3427`/code-review ultra` 和 `claude ultrareview` 子命令审查您的分支和基础分支之间的差异,这需要两者共享的提交。当 `git merge-base` 找不到时,Claude Code 在云会话启动前拒绝审查。在 Claude Code 可以验证完整的克隆上,至少有一个分支,它改为回退到[审查每个跟踪文件](/docs/zh-CN/ultrareview#diff-limits-and-fallbacks)而不是拒绝。您在基础分支根本找不到时、Claude Code 无法验证您的克隆完整时,或在罕见的存储库中看到此拒绝,其中整个树差异不可能,例如 SHA-256 对象格式。3552`/code-review ultra` 和 `claude ultrareview` 子命令审查的是您的分支与基础分支之间的 diff,这需要两者共享一个提交。当 `git merge-base` 找不到共享提交时,Claude Code 会在云端会话启动前拒绝审查。在 Claude Code 能够验证是完整的、且至少有一个分支的克隆上,它会回退到[审查每个被跟踪的文件](/docs/zh-CN/ultrareview#diff-limits-and-fallbacks),而不是拒绝。当根本找不到基础分支、Claude Code 无法验证您的克隆是否完整,或者在无法进行整棵树 diff 的少数仓库中(例如使用 SHA-256 对象格式的仓库),您会看到此拒绝信息。

3428 3553 

3429```text theme={null}3554```text theme={null}

3430Could not find merge-base with main. Pass the base branch explicitly (e.g. `/code-review ultra develop`) or make sure you're in a git repo with a main branch.3555Could not find merge-base with main. Pass the base branch explicitly (e.g. `/code-review ultra develop`) or make sure you're in a git repo with a main branch.

3431```3556```

3432 3557 

3433第一句后的提示取决于 Claude Code 观察到的内容:3558第一句之后的提示取决于 Claude Code 观察到的情况:

3434 3559 

3435* **您没有传递基础分支**:Claude Code 与存储库的默认分支进行了比较,并建议显式传递您的基础,如上面的示例3560* **您没有传入基础分支**:Claude Code 与仓库的默认分支进行了比较,并建议您显式传入基础分支,如上例所示

3436* **您传递的基础分支已在您的克隆中**:提示读取 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3561* **您传入的基础分支已存在于您的克隆中**:提示为 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3437* **您传递的基础分支不在您的克隆中**:Claude Code 在比较前从 origin 获取了它。提示读取 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``;当 Claude Code 无法判断您的克隆是否浅时,它改为建议 `git fetch --unshallow origin`。在 v2.1.221 之前,提示为每个获取的基础分支建议 `git fetch --unshallow origin`,在完整克隆上该命令失败,显示 `fatal: --unshallow on a complete repository does not make sense`。3562* **您传入的基础分支不在您的克隆中**:Claude Code 在比较前已从 origin fetch 了该分支。提示为 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``;当 Claude Code 无法判断您的克隆是否为浅克隆时,它会改为建议 `git fetch --unshallow origin`。在 v2.1.221 之前,对于每个被 fetch 的基础分支,提示都会建议 `git fetch --unshallow origin`,而在完整克隆上,该命令会以 `fatal: --unshallow on a complete repository does not make sense` 失败。

3438 3563 

3439**应该做什么:**3564**解决方法:**

3440 3565 

3441* 如果另一个分支是您的真实基础,显式传递它:`/code-review ultra <branch>`3566* 如果您真正的基础分支是另一个分支,请显式传入:`/code-review ultra <branch>`

3442* 如果您的克隆可能没有完整历史,运行 `git fetch --unshallow origin` 并重新运行审查3567* 如果您的克隆可能没有完整历史,请运行 `git fetch --unshallow origin` 并重新运行审查

3443 3568 

3444<h3 id="your-checkout-has-no-branches">3569<h3 id="your-checkout-has-no-branches">

3445 您的检出没有分支3570 您的检出没有任何分支

3446</h3>3571</h3>

3447 3572 

3448检出可以有提交但没有分支:如果您运行 `git init` 后跟 `git fetch <url>` 和 `git checkout FETCH_HEAD`,您会得到一个分离的 HEAD,没有 refs。Claude Code 将您的存储库打包为 git 包以上传它进行 [ultrareview](/docs/zh-CN/ultrareview),它无法打包没有分支或其他 refs 的存储库,所以 `/code-review ultra` 和 `claude ultrareview` 子命令在云会话启动前拒绝审查。3573检出可能有提交却没有分支:如果您运行 `git init`,然后运行 `git fetch <url>` 和 `git checkout FETCH_HEAD`,就会得到一个没有任何引用的分离 HEAD。Claude Code 会将您的仓库打包为 git bundle 以上传用于 [ultrareview](/docs/zh-CN/ultrareview),而它无法打包没有分支或其他引用的仓库,因此 `/code-review ultra` 和 `claude ultrareview` 子命令会在云端会话启动前拒绝审查。

3449 3574 

3450```text theme={null}3575```text theme={null}

3451Your checkout has no branches (detached HEAD only), which cloud review can't bundle. Create one first — `git checkout -b <name>` — then rerun /code-review ultra.3576Your checkout has no branches (detached HEAD only), which cloud review can't bundle. Create one first — `git checkout -b <name>` — then rerun /code-review ultra.

3452```3577```

3453 3578 

3454在 v2.1.221 之前,Claude Code 尝试审查此检出中的每个跟踪文件,上传失败。3579在 v2.1.221 之前,Claude Code 会尝试审查此检出中的每个被跟踪的文件,然后上传失败。

3455 3580 

3456**应该做什么:**3581**解决方法:**

3457 3582 

3458* 使用 `git checkout -b <name>` 在您当前的提交处创建分支,然后重新运行审查3583* 使用 `git checkout -b <name>` 在当前提交处创建一个分支,然后重新运行审查

3459 3584 

3460<h3 id="no-github-account-is-connected-to-your-claude-account">3585<h3 id="no-github-account-is-connected-to-your-claude-account">

3461 没有 GitHub 帐户连接到您的 Claude 帐户3586 您的 Claude 账户未连接 GitHub 账户

3462</h3>3587</h3>

3463 3588 

3464您运行了 `/code-review ultra <PR#>` 或 `claude ultrareview <PR#>`,在创建云会话前 Claude Code 询问服务器[连接到您的 Claude 帐户的 GitHub 帐户](/docs/zh-CN/ultrareview#review-a-pull-request)是否可以到达 PR 的存储库。没有帐户连接,或连接已过期,所以云克隆会失败,Claude Code 拒绝启动。Claude Code 不为被拒绝的启动花费免费运行或计费使用信用。3589您运行了 `/code-review ultra <PR#>` 或 `claude ultrareview <PR#>`,在创建云端会话之前,Claude Code 会询问服务器[连接到您 Claude 账户的 GitHub 账户](/docs/zh-CN/ultrareview#review-a-pull-request)是否能访问该 PR 的仓库。由于没有连接账户,或连接已过期,云端克隆将会失败,因此 Claude Code 拒绝启动。对于被拒绝的启动,Claude Code 不会消耗免费次数,也不会计费使用额度。

3465 3590 

3466```text theme={null}3591```text theme={null}

3467Ultrareview clones <owner>/<repo> in the cloud with the GitHub account connected to your Claude account, and none is connected (or the connection expired). To fix: run /web-setup to reuse your GitHub CLI login, or connect an account at https://claude.ai/connect-github — then re-run /code-review ultra 1234 (allow a minute after connecting).3592Ultrareview clones <owner>/<repo> in the cloud with the GitHub account connected to your Claude account, and none is connected (or the connection expired). To fix: run /web-setup to reuse your GitHub CLI login, or connect an account at https://claude.ai/connect-github — then re-run /code-review ultra 1234 (allow a minute after connecting).

3468```3593```

3469 3594 

3470当 [`/web-setup`](/docs/zh-CN/web-quickstart#connect-from-your-terminal) 在您的会话中不可用时,消息仅命名 claude.ai 链接。3595当 [`/web-setup`](/docs/zh-CN/web-quickstart#connect-from-your-terminal) 在您的会话中不可用时,消息只会给出 claude.ai 链接。

3471 3596 

3472**应该做什么:**3597**解决方法:**

3473 3598 

3474* 运行 `/web-setup` 将您的 GitHub CLI 登录连接到您的 Claude 帐户,或在 [claude.ai/connect-github](https://claude.ai/connect-github) 连接帐户3599* 运行 `/web-setup` 将您的 GitHub CLI 登录连接到您的 Claude 账户,或在 [claude.ai/connect-github](https://claude.ai/connect-github) 连接一个账户

3475* 连接后一分钟重新运行审查3600* 连接后等待一分钟再重新运行审查

3476 3601 

3477在 v2.1.248 之前,Claude Code 在启动前不检查这个。3602在 v2.1.248 之前,Claude Code 不会在启动前进行此检查。

3478 3603 

3479<h3 id="your-connected-github-account-cant-see-the-repository">3604<h3 id="your-connected-github-account-cant-see-the-repository">

3480 您连接的 GitHub 帐户看不到存储库3605 您连接的 GitHub 账户无法访问该仓库

3481</h3>3606</h3>

3482 3607 

3483您运行了 `/code-review ultra <PR#>` 或 `claude ultrareview <PR#>`,[连接到您的 Claude 帐户的 GitHub 帐户](/docs/zh-CN/ultrareview#review-a-pull-request)无法读取 PR 的存储库,所以云克隆会失败,Claude Code 拒绝启动。Claude Code 不为被拒绝的启动花费免费运行或计费使用信用。3608您运行了 `/code-review ultra <PR#>` 或 `claude ultrareview <PR#>`,而[连接到您 Claude 账户的 GitHub 账户](/docs/zh-CN/ultrareview#review-a-pull-request)无法读取该 PR 的仓库,因此云端克隆将会失败,Claude Code 拒绝启动。对于被拒绝的启动,Claude Code 不会消耗免费次数,也不会计费使用额度。

3484 3609 

3485```text theme={null}3610```text theme={null}

3486Your connected GitHub account can't see <owner>/<repo> — usually the Claude GitHub app isn't installed on <owner> or wasn't granted this repo (web-connected accounts need it for private repos), or a different GitHub account is connected. To fix: run /web-setup to reuse your GitHub CLI login, or install the app at https://github.com/apps/claude/installations/new — then re-run /code-review ultra 1234.3611Your connected GitHub account can't see <owner>/<repo> — usually the Claude GitHub app isn't installed on <owner> or wasn't granted this repo (web-connected accounts need it for private repos), or a different GitHub account is connected. To fix: run /web-setup to reuse your GitHub CLI login, or install the app at https://github.com/apps/claude/installations/new — then re-run /code-review ultra 1234.

3487```3612```

3488 3613 

3489当 [`/web-setup`](/docs/zh-CN/web-quickstart#connect-from-your-terminal) 在您的会话中不可用时,消息仅命名应用安装。3614当 [`/web-setup`](/docs/zh-CN/web-quickstart#connect-from-your-terminal) 在您的会话中不可用时,消息只会给出应用安装方式。

3490 3615 

3491**应该做什么:**3616**解决方法:**

3492 3617 

3493* 如果您的本地 `gh` CLI 可以读取存储库,运行 `/web-setup` 将该登录连接到您的 Claude 帐户3618* 如果您本地的 `gh` CLI 可以读取该仓库,请运行 `/web-setup` 将该登录连接到您的 Claude 账户

3494* 更改后重新运行审查3619* 更改后重新运行审查

3495 3620 

3496在 v2.1.248 之前,Claude Code 在启动前不检查这个。3621在 v2.1.248 之前,Claude Code 不会在启动前进行此检查。

3497 3622 

3498<h3 id="the-github-app-preflight-failed-transiently">3623<h3 id="the-github-app-preflight-failed-transiently">

3499 GitHub App 预检暂时失败3624 GitHub App 预检暂时失败

3500</h3>3625</h3>

3501 3626 

3502您从本地存储库启动了[云会话](/docs/zh-CN/claude-code-on-the-web),两个步骤一起失败了。Claude Code 无法构建或上传您的存储库包。在上传之前,它检查了云服务是否可以从 GitHub 克隆存储库,而不是明确的答案,该检查以重试可能清除的错误结束,例如网络错误、超时或临时服务器错误。完整消息以停止包的内容开头,例如 `Could not upload repo bundle (<error>)`,并以预检句子结尾:3627您从本地仓库启动了一个[云端会话](/docs/zh-CN/claude-code-on-the-web),而有两个步骤同时失败。Claude Code 无法构建或上传您仓库的 bundle。在上传之前,它检查了云服务能否从 GitHub 克隆该仓库,而该检查没有得到明确答复,而是以一个可通过重试消除的错误结束,例如网络错误、超时或临时服务器错误。完整消息以导致 bundle 失败的原因开头,例如 `Could not upload repo bundle (<error>)`,并以预检相关的句子结尾:

3503 3628 

3504```text theme={null}3629```text theme={null}

3505Could not upload repo bundle (<error>). The GitHub App preflight failed transiently (network or service hiccup) — retry in a moment to start from GitHub instead3630Could not upload repo bundle (<error>). The GitHub App preflight failed transiently (network or service hiccup) — retry in a moment to start from GitHub instead

3506```3631```

3507 3632 

3508**应该做什么:**3633**解决方法:**

3509 3634 

3510* 片刻后重新运行命令。当 GitHub 检查通过时,Claude Code 可以从 GitHub 克隆启动会话,所以失败的上传不再阻止启动3635* 稍后重新运行该命令。当 GitHub 检查通过时,Claude Code 可以从 GitHub 克隆启动会话,因此失败的上传不再阻止启动

3511* 如果重试继续失败,消息的开头命名停止上传的内容。当该原因是您可以修复的内容时,修复它以便会话可以从您的本地存储库启动3636* 如果重试持续失败,消息开头会指出导致上传失败的原因。如果该原因是您可以修复的,请修复它,使会话可以改为从您的本地仓库启动

3512 3637 

3513在 v2.1.251 之前,Claude Code 以 `Please set up GitHub on https://claude.ai/code` 结束消息,即使 GitHub 检查仅暂时失败,设置建议无法清除暂时失败。3638在 v2.1.251 之前,即使 GitHub 检查只是暂时失败,Claude Code 也会以 `Please set up GitHub on https://claude.ai/code` 结束消息,而设置建议无法消除暂时性故障。

3514 3639 

3515<h3 id="the-repository-upload-cant-follow-a-git-setting">3640<h3 id="the-repository-upload-cant-follow-a-git-setting">

3516 存储库上传无法遵循 git 设置3641 仓库上传无法遵循某个 git 设置

3517</h3>3642</h3>

3518 3643 

3519您启动了[上传您的本地存储库的云会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github),或分支的 [ultrareview](/docs/zh-CN/ultrareview),上传无法遵循决定哪个属性规则适用于您的文件的 git 设置之一。如果上传继续并错过了规则,git 在存储它之前转换的文件,例如清理过滤器加密的文件,可能会到达云端,因为它在磁盘上。Claude Code 拒绝上传,什么都不上传:3644您启动了一个[上传本地仓库的云端会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github),或对某个分支进行 [ultrareview](/docs/zh-CN/ultrareview),而上传无法遵循用于决定哪些属性规则适用于您文件的某个 git 设置。如果上传继续进行并遗漏了某条规则,那么 git 在存储前会转换的文件(例如由 clean 过滤器加密的文件)可能会以其在磁盘上的原样上传到云端。因此 Claude Code 会拒绝上传,不会上传任何内容:

3520 3645 

3521```text theme={null}3646```text theme={null}

3522Not uploading this working tree: core.ignoreCase (which decides whether .gitattributes patterns match file names regardless of letter case) is set in <file>, and the upload cannot follow that setting, so a file git would change before storing it (to encrypt it, for example) could be uploaded as it is on disk. Move the core.ignoreCase line into this repository's .git/config or directly into your ~/.gitconfig, then retry.3647Not uploading this working tree: core.ignoreCase (which decides whether .gitattributes patterns match file names regardless of letter case) is set in <file>, and the upload cannot follow that setting, so a file git would change before storing it (to encrypt it, for example) could be uploaded as it is on disk. Move the core.ignoreCase line into this repository’s .git/config or directly into your ~/.gitconfig, then retry.

3523```3648```

3524 3649 

3525消息命名设置和它的设置位置,并以该情况的修复结尾。相同的拒绝出现在 `core.attributesFile` 和 `attr.tree`,每个都有自己的修复。3650消息会指出该设置及其所在位置,并以适用于您所遇情况的解决方法结尾。对于 `core.attributesFile` 和 `attr.tree`,也会出现相同的拒绝信息,各自附带其对应的解决方法。

3526 3651 

3527消息可以命名您的 git 配置通过 `include` 或 `includeIf` 指令拉入的配置文件,即使该指令的条件不适用于此存储库。3652消息中指出的可能是您的 git 配置通过 `include` 或 `includeIf` 指令引入的配置文件,即使该指令的条件并不适用于此仓库。

3528 3653 

3529**应该做什么:**3654**解决方法:**

3530 3655 

3531* 应用消息最后一句中的修复3656* 按照消息最后一句中的解决方法操作

3532 3657 

3533<h3 id="github-isnt-connected-to-your-claude-account">3658<h3 id="github-isnt-connected-to-your-claude-account">

3534 GitHub 未连接到您的 Claude 帐户3659 GitHub 未连接到您的 Claude 账户

3535</h3>3660</h3>

3536 3661 

3537您从本地存储库启动了[云会话](/docs/zh-CN/claude-code-on-the-web),例如使用 `/autofix-pr`。没有 GitHub 帐户连接到您的 Claude 帐户,或连接已过期,所以 Claude Code 拒绝启动:3662您从本地仓库启动了一个[云端会话](/docs/zh-CN/claude-code-on-the-web),例如使用 `/autofix-pr`。您的 Claude 账户没有连接 GitHub 账户,或连接已过期,因此 Claude Code 拒绝启动:

3538 3663 

3539```text theme={null}3664```text theme={null}

3540GitHub isn't connected to your Claude account, so this repository can't be cloned in the cloud. Run /web-setup to connect with your GitHub CLI login, or connect on the web at https://claude.ai/connect-github3665GitHub isn't connected to your Claude account, so this repository can't be cloned in the cloud. Run /web-setup to connect with your GitHub CLI login, or connect on the web at https://claude.ai/connect-github

3541```3666```

3542 3667 

3543当您使用 [`/schedule`](/docs/zh-CN/routines) 创建例程时,相同的消息作为命名存储库的设置注释出现;注释不会阻止创建例程。3668当您使用 [`/schedule`](/docs/zh-CN/routines) 创建 Routine 时,同样的消息会以指出该仓库的设置说明形式出现;该说明不会阻止创建 Routine。

3544 3669 

3545**应该做什么:**3670**解决方法:**

3671 

3672* 运行 `/web-setup` 将您的 GitHub CLI 登录连接到您的 Claude 账户,或在 [claude.ai/connect-github](https://claude.ai/connect-github) 连接一个账户。有关两者的区别,请参阅 [GitHub 身份验证选项](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)。

3673* 连接后等待一分钟再重新运行该命令

3674 

3675在 v2.1.268 之前,Claude Code 会将此报告为 Claude GitHub App 检查的暂时性失败,并建议重试或安装该应用;但这两种做法都不会连接 GitHub 账户。

3546 3676 

3547* 运行 `/web-setup` 将您的 GitHub CLI 登录连接到您的 Claude 帐户,或在 [claude.ai/connect-github](https://claude.ai/connect-github) 连接帐户。请参阅[GitHub 身份验证选项](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)了解两者的区别。3677<h3 id="a-github-organization-policy-is-blocking-claude">

3548* 连接后一分钟重新运行命令3678 GitHub 组织策略阻止了 Claude

3679</h3>

3680 

3681您在 Claude Code 提示符下运行了一个会启动云端会话的命令,例如 [`/autofix-pr`](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests)。在创建会话之前,Claude Code 会检查 Claude 对 GitHub 上该仓库的访问权限,而 GitHub 拒绝了访问,因为您的 GitHub 组织有一项阻止 Claude 的策略。Claude Code 会就此停止,并显示一条指明该策略的消息。

3682 

3683当阻止访问的是 IP 允许列表时,消息内容为:

3684 

3685```text theme={null}

3686Your GitHub organization has an IP allowlist that is blocking Claude. Add Claude's IP ranges to your GitHub allowlist.

3687```

3549 3688 

3550在 v2.1.268 之前,Claude Code 将此报告为 Claude GitHub App 检查的临时失败,并建议重试或安装应用;两者都不连接 GitHub 帐户。3689当阻止访问的是单点登录时,消息内容为:

3690 

3691```text theme={null}

3692Your GitHub organization requires single sign-on. Disconnect and reconnect GitHub on the Connectors page in Claude on the web, click Authorize next to your organization when GitHub asks, then try again.

3693```

3694 

3695当阻止访问的是 Microsoft Entra ID 条件访问策略时,消息内容为:

3696 

3697```text theme={null}

3698Your GitHub organization's identity provider (Microsoft Entra ID) has a Conditional Access policy that is blocking Claude. Ask your GitHub Enterprise or Entra ID admin to allow Claude in that policy.

3699```

3700 

3701**解决方法:**

3702 

3703* **IP 允许列表**:请您的 GitHub 组织或企业的所有者放行 Anthropic 的出站 IP 地址。有关这些地址以及需要更改的 GitHub 设置,请参阅 [GitHub 允许列表和防火墙](/docs/zh-CN/network-config#github-allow-lists-and-firewalls)。

3704* **单点登录**:在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 断开 GitHub 连接,然后重新连接。当 GitHub 询问时,点击您的组织旁边的 **Authorize**,使新连接获得该组织单点登录的授权。

3705* **条件访问策略**:请您的 GitHub Enterprise 或 Microsoft Entra ID 管理员在该策略中放行 Claude

3706* 完成更改后,再次运行该命令

3551 3707 

3552<h3 id="single-sign-on-authorization-needed">3708<h3 id="single-sign-on-authorization-needed">

3553 需要单点登录授权3709 需要单点登录授权

3554</h3>3710</h3>

3555 3711 

3556您运行了 [`/install-github-app`](/docs/zh-CN/github-actions#quick-setup),并选择了其组织强制执行 SAML 单点登录的存储库。在设置之前,Claude Code 使用 GitHub CLI 检查您对存储库的访问权限,GitHub 拒绝了该检查,因为您的 `gh` 令牌还没有为组织授权。向导显示警告和授权步骤:3712您运行了 [`/install-github-app`](/docs/zh-CN/github-actions#quick-setup),并选择了一个所属组织强制执行 SAML 单点登录的仓库。在设置之前,Claude Code 会使用 GitHub CLI 检查您对该仓库的访问权限,而 GitHub 拒绝了该检查,因为您的 `gh` 令牌尚未获得该组织的授权。向导会显示警告以及授权步骤:

3557 3713 

3558```text theme={null}3714```text theme={null}

3559Single sign-on authorization needed3715Single sign-on authorization needed

3560<owner>/<repo> belongs to an organization that enforces SAML single sign-on, and your GitHub CLI token isn't authorized for it yet.3716<owner>/<repo> belongs to an organization that enforces SAML single sign-on, and your GitHub CLI token isn't authorized for it yet.

3561```3717```

3562 3718 

3563**应该做什么:**3719**解决方法:**

3564 3720 

3565* 通过运行 `gh auth refresh -h github.com -s repo,workflow` 使用 `repo` 和 `workflow` 范围重新授权您的 GitHub CLI 登录,并在 GitHub 提示单点登录时授权组织3721* 运行 `gh auth refresh -h github.com -s repo,workflow`,以 `repo` 和 `workflow` 作用域重新授权您的 GitHub CLI 登录,并在 GitHub 提示单点登录时授权该组织

3566* 如果您使用 `GH_TOKEN` 中的个人访问令牌进行身份验证,请打开 [github.com/settings/tokens](https://github.com/settings/tokens),在令牌上选择**配置 SSO**,并授权组织3722* 如果您使用 `GH_TOKEN` 中的个人访问令牌进行身份验证,请打开 [github.com/settings/tokens](https://github.com/settings/tokens),在该令牌上选择 **Configure SSO**,然后授权该组织

3567* 再次运行 `/install-github-app`3723* 再次运行 `/install-github-app`

3568 3724 

3569在 v2.1.273 之前,Claude Code 为此条件显示 `Admin permissions required` 警告。3725在 v2.1.273 之前,Claude Code 在这种情况下显示的是 `Admin permissions required` 警告。

3570 3726 

3571<h3 id="failed-to-resume-the-conversation">3727<h3 id="failed-to-resume-the-conversation">

3572 无法恢复对话3728 无法恢复对话

3573</h3>3729</h3>

3574 3730 

3575Claude Code 无法读取或处理您从 [`claude --resume` 选择器](/docs/zh-CN/sessions#use-the-session-picker)选择的会话的保存成绩单,所以它结束进程而不是在部分加载状态下继续。消息包括重试的命令:3731Claude Code 无法读取或处理您从 [`claude --resume` 选择器](/docs/zh-CN/sessions#use-the-session-picker)中选择的会话的已保存会话记录,因此它会结束进程,而不是在部分加载的状态下继续运行。消息中包含用于重试的命令:

3576 3732 

3577```text theme={null}3733```text theme={null}

3578Failed to resume the conversation.3734Failed to resume the conversation.

3579Run claude --resume <session-id> to retry, or claude to start a new session.3735Run claude --resume <session-id> to retry, or claude to start a new session.

3580```3736```

3581 3737 

3582Claude Code 显示消息后以代码 1 退出。运行会话内的 `/resume` 选择器报告对话中的 `Failed to resume conversation`,您当前的会话保持运行。在 v2.1.216 之前,来自 `claude --resume` 选择器的失败恢复在 `Resuming conversation…` 微调器上无限期停留,而不是显示此消息。3738显示该消息后,Claude Code 以退出码 1 退出。而在运行中的会话内使用 `/resume` 选择器时,则会在对话中报告 `Failed to resume conversation`,您当前的会话会继续运行。在 v2.1.216 之前,从 `claude --resume` 选择器恢复失败时,会一直停留在 `Resuming conversation…` 加载动画上,而不是显示此消息。

3583 3739 

3584**应该做什么:**3740**解决方法:**

3585 3741 

3586* 使用消息中的会话 ID 运行 `claude --resume <session-id>` 重试3742* 使用消息中的会话 ID 运行 `claude --resume <session-id>` 进行重试

3587* 如果每次重试都以相同的方式失败,运行 `claude update` 并再次恢复。v2.1.275 之前的版本在保存的成绩单包含它们无法读取的条目时恢复失败。3743* 在 v2.1.285 之前的版本中,如果重试以同样的方式失败,请运行 `claude update` 后再次恢复。当已保存的会话记录包含这些版本无法读取的条目时,这些版本会恢复失败。

3588* 如果重试再次失败,运行 `claude` 启动新会话3744* 如果重试再次失败,请运行 `claude` 开始新会话

3589 3745 

3590<h3 id="no-conversation-found-with-the-session-id">3746<h3 id="no-conversation-found-with-the-session-id">

3591 未找到具有会话 ID 的对话3747 未找到具有该会话 ID 的对话

3592</h3>3748</h3>

3593 3749 

3594您将会话 ID 传递给 `claude --resume <session-id>`,没有保存的成绩单与其匹配:3750您向 `claude --resume <session-id>` 传入了一个会话 ID,但没有匹配的已保存会话记录:

3595 3751 

3596```text theme={null}3752```text theme={null}

3597No conversation found with session ID: <session-id>3753No conversation found with session ID: <session-id>

3598```3754```

3599 3755 

3600Claude Code 显示消息后以代码 1 退出。Claude Code [首先搜索当前项目,然后搜索此机器上的所有其他项目](/docs/zh-CN/sessions#resume-a-session)以查找 ID。在 v2.1.223 之前,查找停止在当前项目目录及其 git worktrees,所以从会话最后工作的目录恢复。3756显示该消息后,Claude Code 以退出码 1 退出。Claude Code 会[先搜索当前项目,然后搜索这台机器上的所有其他项目](/docs/zh-CN/sessions#resume-a-session)来查找该 ID。在 v2.1.223 之前,查找仅限于当前项目目录及其 git worktree,因此需要从该会话最后工作的目录中进行恢复。

3601 3757 

3602常见原因:3758常见原因:

3603 3759 

3604* **打字错误的 ID**:对于非交互运行,ID 是 [`--output-format json` 输出](/docs/zh-CN/headless#get-structured-output)的 `session_id` 字段3760* **ID 输入错误**:对于非交互式运行,ID 是 [`--output-format json` 输出](/docs/zh-CN/headless#get-structured-output)中的 `session_id` 字段

3605* **删除的成绩单**:Claude Code 在[保留期](/docs/zh-CN/sessions#where-transcripts-are-stored)后删除成绩单,默认 30 天,遵循[保留扫描规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)3761* **会话记录已删除**:Claude Code 会在[保留期](/docs/zh-CN/sessions#where-transcripts-are-stored)(默认 30 天)结束后按照[保留清理规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)删除会话记录

3606* **不同的机器**:Claude Code 在本地存储成绩单,所以在运行它的机器上恢复会话3762* **不同的机器**:Claude Code 将会话记录存储在本地,因此请在运行该会话的机器上恢复它

3607* **重复副本**:如果您在 `~/.claude/projects` 下复制了项目目录,所以两个成绩单携带相同的 ID,Claude Code 报告此消息而不是任意恢复一个副本3763* **重复副本**:如果您在 `~/.claude/projects` 下复制了项目目录,导致两份会话记录带有相同的 ID,Claude Code 会报告此消息,而不是任意恢复其中一份

3608 3764 

3609**应该做什么:**3765**解决方法:**

3610 3766 

3611* 对于交互会话,使用 `claude --resume` 打开[会话选择器](/docs/zh-CN/sessions#use-the-session-picker),按 `Ctrl+A` 将其扩展到此机器上的每个项目,然后选择会话3767* 对于交互式会话,使用 `claude --resume` 打开[会话选择器](/docs/zh-CN/sessions#use-the-session-picker),按 `Ctrl+A` 将其范围扩大到这台机器上的所有项目,然后选择该会话

3612* 使用 `claude -p` 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 创建的会话不会出现在选择器中,所以重新检查 ID 与您的原始运行打印的 `session_id`3768* 使用 `claude -p` 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 创建的会话不会出现在选择器中,因此请对照您最初运行时输出的 `session_id` 重新检查 ID

3613 3769 

3614<h3 id="windows-reported-an-error-ebadf">3770<h3 id="windows-reported-an-error-ebadf">

3615 Windows 在 Claude Code 读取此会话的成绩单文件时报告了错误 (EBADF)3771 Windows reported an error (EBADF) when Claude Code read this session's transcript file

3616</h3>3772</h3>

3617 3773 

3618您在 Windows 上恢复了会话,其保存的[成绩单文件](/docs/zh-CN/sessions#where-transcripts-are-stored)正常打开,读取它然后失败,显示系统错误 EBADF。系统错误没有说读取失败的原因,所以消息建议可能的原因和要尝试的内容:3774您在 Windows 上恢复了一个会话,其已保存的[会话记录文件](/docs/zh-CN/sessions#where-transcripts-are-stored)正常打开,但随后读取时因系统错误 EBADF 而失败。该系统错误并未说明读取失败的原因,因此消息会提示可能的原因以及可以尝试的操作:

3619 3775 

3620```text theme={null}3776```text theme={null}

3621Windows reported an error (EBADF) when Claude Code read this session's transcript file, although the file had opened normally. This can happen when other software intercepts file reads — security, encryption or endpoint-management tools, for example. If it keeps happening for this conversation, try excluding the folder that holds Claude Code's session transcripts from such software (the .claude folder in your user profile, unless the app or CLAUDE_CONFIG_DIR points Claude Code elsewhere), or adding Claude Code to its allowed applications, then resume again.3777Windows reported an error (EBADF) when Claude Code read this session's transcript file, although the file had opened normally. This can happen when other software intercepts file reads — security, encryption or endpoint-management tools, for example. If it keeps happening for this conversation, try excluding the folder that holds Claude Code's session transcripts from such software (the .claude folder in your user profile, unless the app or CLAUDE_CONFIG_DIR points Claude Code elsewhere), or adding Claude Code to its allowed applications, then resume again.

3622```3778```

3623 3779 

3624消息遵循命令自己的失败行,例如 `Failed to resume session <session-id>`。`claude --resume` 或 [`claude -p`](/docs/zh-CN/headless) 命令显示它后以代码 1 退出。在会话内的 `/resume` 后,您当前的会话保持运行。3780该消息跟在命令自身的失败行之后,例如 `Failed to resume session <session-id>`。`claude --resume` 或 [`claude -p`](/docs/zh-CN/headless) 命令在显示该消息后以退出码 1 退出。在会话内使用 `/resume` 后,您当前的会话会继续运行。

3625 3781 

3626**应该做什么:**3782**解决方法:**

3627 3783 

3628* 从扫描或拦截文件读取的软件(例如安全、加密或端点管理工具)中排除保存会话成绩单的文件夹。成绩单默认位于 `%USERPROFILE%\.claude\projects` 下,或位于 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 命名的目录下3784* 在扫描或拦截文件读取的软件(例如安全、加密或终端管理工具)中排除存放会话记录的文件夹。会话记录默认位于 `%USERPROFILE%\.claude\projects` 下,或位于 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 指定的目录下

3629* 如果您无法添加排除,请改为将 Claude Code 添加到该软件的允许应用程序3785* 如果无法添加排除项,请改为将 Claude Code 添加到该软件的允许应用程序中

3630* 再次恢复会话3786* 再次恢复该会话

3631 3787 

3632在 v2.1.282 之前,失败没有解释:`claude --resume <session-id>` 在 `Failed to resume session <session-id>` 处结束,`-p` 运行仅打印系统错误文本,例如 `Failed to resume session: EBADF: bad file descriptor, read`。3788在 v2.1.282 之前,失败时没有任何说明:`claude --resume <session-id>` 以 `Failed to resume session <session-id>` 结束,而 `-p` 运行只输出系统错误文本,例如 `Failed to resume session: EBADF: bad file descriptor, read`。

3633 3789 

3634<h3 id="cannot-switch-renderers-in-this-session">3790<h3 id="cannot-switch-renderers-in-this-session">

3635 无法在此会话中切换渲染器3791 无法在此会话中切换渲染器

3636</h3>3792</h3>

3637 3793 

3638当您切换渲染器时,Claude Code 重新启动其进程。您在 Claude Code 拒绝重新启动的会话中运行了 [`/tui`](/docs/zh-CN/fullscreen#enable-fullscreen-rendering),所以它不切换并保存任何内容。您看到的消息告诉您原因:3794切换渲染器时,Claude Code 会重启其进程。您在一个 Claude Code 拒绝重启的会话中运行了 [`/tui`](/docs/zh-CN/fullscreen#enable-fullscreen-rendering),因此它不会切换,也不会保存任何内容。您看到的消息会指明原因:

3639 3795 

3640* `Cannot switch renderers while work is running in the background`:您有在后台运行的工作,重新启动会放弃,例如后台 shell 或子代理。等待工作完成或使用 [`/tasks`](/docs/zh-CN/commands) 停止它,然后再次运行 `/tui fullscreen` 或 `/tui default`3796* `Cannot switch renderers while work is running in the background`:您有正在后台运行的工作,重启会使其被放弃,例如后台 shell 或子代理。请等待工作完成或使用 [`/tasks`](/docs/zh-CN/commands) 停止它,然后再次运行 `/tui fullscreen` 或 `/tui default`

3641* `Cannot switch renderers in this session`:会话有 Claude Code 无法传递给重新启动的进程的限制。在 v2.1.234 之前,Claude Code 无论如何都会重新启动,重新启动的会话运行时没有它们3797* `Cannot switch renderers in this session`:该会话带有 Claude Code 无法传递给重启后进程的限制。在 v2.1.234 之前,Claude Code 仍会重启,而重新启动的会话将不带这些限制运行

3642 3798 

3643在限制消息中,括号中的部分命名 Claude Code 找到的限制:3799在限制消息中,括号内的部分指明了 Claude Code 发现的限制:

3644 3800 

3645```text theme={null}3801```text theme={null}

3646Cannot switch renderers in this session — it has restrictions a restart can't carry over (permission rules set for this session only). Nothing was changed. Running /tui fullscreen in a session started without them switches every later session too.3802Cannot switch renderers in this session — it has restrictions a restart can't carry over (permission rules set for this session only). Nothing was changed. Running /tui fullscreen in a session started without them switches every later session too.

3647```3803```

3648 3804 

3649消息可以在括号中显示的每个原因:3805消息括号中可能显示的各项原因:

3650 3806 

3651* `launch flags: a custom system prompt, a tool allowlist, or restricted settings`:您使用 Claude Code 不传递回重新启动的进程的标志启动了会话。这些标志包括 [`--system-prompt`](/docs/zh-CN/cli-reference#cli-flags)、`--system-prompt-file`、`--append-system-prompt-file`、[`--tools`](/docs/zh-CN/cli-reference#cli-flags) 允许列表、[`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 和 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags)3807* `launch flags: a custom system prompt, a tool allowlist, or restricted settings`:您启动会话时使用了 Claude Code 不会传回给重启后进程的标志。这些标志包括 [`--system-prompt`](/docs/zh-CN/cli-reference#cli-flags)、`--system-prompt-file`、`--append-system-prompt-file`、[`--tools`](/docs/zh-CN/cli-reference#cli-flags) 允许列表、[`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 和 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags)

3652* `permission rules set for this session only`:来自钩子或 SDK 调用者的[权限更新](/docs/zh-CN/hooks#permission-update-entries)添加了带有 `session` 目标的拒绝或询问规则。会话范围的允许规则不会触发拒绝。重新启动会删除它们,Claude Code 改为再次提示3808* `permission rules set for this session only`:来自 hook 或 SDK 调用方的[权限更新](/docs/zh-CN/hooks#permission-update-entries)添加了目标为 `session` 的拒绝或询问规则。会话作用域的允许规则不会触发拒绝。重启会丢弃这些规则,Claude Code 会改为再次提示

3653* `ask-before-running rules with no command-line form`:来自钩子或 SDK 调用者的权限更新添加了询问规则以及 Claude Code 作为 `--allowed-tools` 和 `--disallowed-tools` 传递回的规则。不存在询问规则的标志3809* `ask-before-running rules with no command-line form`:来自 hook 或 SDK 调用方的权限更新在 Claude Code 以 `--allowed-tools` 和 `--disallowed-tools` 传回的规则之外,还添加了询问规则。询问规则没有对应的标志

3654* `permission rules a command line cannot carry intact` 和 `added directories a command line cannot carry intact`:权限更新在会话中期添加了规则或目录路径。重新启动的进程的命令行无法将其文本作为相同的值继承3810* `permission rules a command line cannot carry intact` 和 `added directories a command line cannot carry intact`:权限更新在会话中途添加了规则或目录路径。重启后进程的命令行无法将其文本作为相同的值传递

3655 3811 

3656**应该做什么:**3812**解决方法:**

3657 3813 

3658* 在没有这些限制的会话中,运行 `/tui fullscreen`,或 `/tui default` 切换回。Claude Code 在那里保存 [`tui` 设置](/docs/zh-CN/settings-reference#tui)3814* 在不带这些限制启动的会话中运行 `/tui fullscreen`,或运行 `/tui default` 切换回来。Claude Code 会在那里保存 [`tui` 设置](/docs/zh-CN/settings-reference#tui)

3659 3815 

3660<h3 id="couldnt-open-claude-desktop">3816<h3 id="couldnt-open-claude-desktop">

3661 无法打开 Claude Desktop3817 无法打开 Claude Desktop

3662</h3>3818</h3>

3663 3819 

3664您在会话中运行了 [`/desktop`](/docs/zh-CN/desktop#coming-from-the-cli) 或其别名 `/app`,或在您的 shell 中运行了 [`claude --desktop`](/docs/zh-CN/cli-reference#cli-flags),Claude Code 用来打开 Claude Desktop 的系统命令失败了。在 `/desktop` 后,会话保持在终端中;`claude --desktop` 打印消息而不带 `Error:` 前缀,并以状态 1 退出。3820您在会话中运行了 [`/desktop`](/docs/zh-CN/desktop#coming-from-the-cli) 或其别名 `/app`,或在 shell 中运行了 [`claude --desktop`](/docs/zh-CN/cli-reference#cli-flags),而 Claude Code 用于打开 Claude Desktop 的系统命令失败了。运行 `/desktop` 后,会话会留在终端中;`claude --desktop` 会输出不带 `Error:` 前缀的消息,并以状态 1 退出。

3665 3821 

3666括号中的文本命名失败的命令,带有其退出状态和其错误输出的第一行(如果它产生了)。在 macOS 上该命令是 `open`,如本例所示;在 Windows 上它是 `rundll32`:3822括号中的文本指明了失败的命令,如果该命令产生了退出状态和错误输出,还会附上其退出状态和错误输出的第一行。在 macOS 上该命令是 `open`,如下例所示;在 Windows 上是 `rundll32`:

3667 3823 

3668```text theme={null}3824```text theme={null}

3669Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and try again.3825Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and try again.

3670```3826```

3671 3827 

3672**应该做什么:**3828**解决方法:**

3673 3829 

3674* 自己打开 Claude Desktop,然后再次运行 `/desktop` 或 `claude --desktop`3830* 手动打开 Claude Desktop,然后再次运行 `/desktop` 或 `claude --desktop`

3675* 要读取失败命令的完整错误输出,使用 `/debug` 打开调试日志并再次运行 `/desktop`,或运行 `claude --desktop --debug-file <path>`,然后检查调试日志3831* 要查看失败命令的完整错误输出,请使用 `/debug` 启用调试日志并再次运行 `/desktop`,或运行 `claude --desktop --debug-file <path>`,然后查看调试日志

3676 3832 

3677在 v2.1.285 之前,消息以 `Open Claude Desktop and run /desktop again.` 结尾。在 v2.1.275 之前,它是 `Failed to open Claude Desktop. Please try opening it manually.`,没有说什么失败了。3833在 v2.1.285 之前,消息以 `Open Claude Desktop and run /desktop again.` 结尾。在 v2.1.275 之前,消息为 `Failed to open Claude Desktop. Please try opening it manually.`,且不会说明失败的内容。

3678 3834 

3679<h3 id="terminal-setup-left-your-zed-keymap-unchanged">3835<h3 id="terminal-setup-left-your-zed-keymap-unchanged">

3680 /terminal-setup 保持您的 Zed 快捷键不变3836 /terminal-setup 未更改您的 Zed 键位映射

3681</h3>3837</h3>

3682 3838 

3683您在 Zed 中运行了 [`/terminal-setup`](/docs/zh-CN/terminal-config#enter-multiline-prompts),Claude Code 无法完成对您的 Zed `keymap.json` 的更新,所以它保持文件不变。3839您在 Zed 中运行了 [`/terminal-setup`](/docs/zh-CN/terminal-config#enter-multiline-prompts),而 Claude Code 无法完成对您的 Zed `keymap.json` 的更新,因此保持该文件原样不变。

3684 3840 

3685每条消息命名您的快捷键的路径,并以您自己添加的快捷键块结尾:3841每条消息都会指明您的键位映射文件路径,并在末尾附上需要您自行添加的快捷键块:

3686 3842 

3687```text theme={null}3843```text theme={null}

3688Couldn't update your Zed keymap, so it was left unchanged.3844Couldn't update your Zed keymap, so it was left unchanged.


3690{ "context": "Terminal", "bindings": { "shift-enter": ["terminal::SendText", "\u001b\r"] } }3846{ "context": "Terminal", "bindings": { "shift-enter": ["terminal::SendText", "\u001b\r"] } }

3691```3847```

3692 3848 

3693消息的第一行命名原因:3849消息的第一行指明了原因:

3694 3850 

3695* `Couldn't read your Zed keymap, so it was left unchanged.`:Claude Code 无法读取文件,例如由于文件权限3851* `Couldn't read your Zed keymap, so it was left unchanged.`:Claude Code 无法读取该文件,例如由于文件权限问题

3696* `Your Zed keymap isn't a readable list of keybindings, so it was left unchanged.`:文件读取正常但不解析为快捷键块数组,即使允许 `//` 注释和尾随逗号3852* `Your Zed keymap isn't a readable list of keybindings, so it was left unchanged.`:文件可以正常读取,但即使允许 `//` 注释和尾随逗号,也无法解析为快捷键块数组

3697* `Couldn't back up your Zed keymap; not modifying it.`:Claude Code 无法将文件复制到其旁边的 `.bak` 备份,所以它没有更改任何内容3853* `Couldn't back up your Zed keymap; not modifying it.`:Claude Code 无法将该文件复制为其旁边的 `.bak` 备份,因此未做任何更改

3698* `Couldn't update your Zed keymap, so it was left unchanged.`:合并的结果没有验证为携带绑定的有效快捷键,所以 Claude Code 丢弃它而不是写入。具有重复键的快捷键块可能导致这种情况3854* `Couldn't update your Zed keymap, so it was left unchanged.`:合并后的结果未能验证为包含该快捷键的有效键位映射,因此 Claude Code 将其丢弃而未写入。包含重复键的快捷键块可能导致这种情况

3699 3855 

3700**应该做什么:**3856**解决方法:**

3701 3857 

3702* 将消息中的块复制到消息命名的路径处 `keymap.json` 中的顶级数组3858* 将消息中的块复制到消息所指明路径下 `keymap.json` 的顶层数组中

3703* 对于 `isn't a readable list of keybindings`,修复语法错误,或使文件的顶级值成为数组,然后再次运行 `/terminal-setup`3859* 对于 `isn't a readable list of keybindings`,请修复语法错误,或将文件的顶层值改为数组,然后再次运行 `/terminal-setup`

3704 3860 

3705在 v2.1.247 之前,`/terminal-setup` 无法解析使用 `//` 注释或尾随逗号的 Zed 快捷键,它用仅其自己的绑定替换整个文件,同时报告绑定已安装。要恢复较早版本替换的快捷键,请使用[输入多行提示](/docs/zh-CN/terminal-config#enter-multiline-prompts)下描述的 `.bak` 备份文件。3861在 v2.1.247 之前,`/terminal-setup` 无法解析使用了 `//` 注释或尾随逗号的 Zed 键位映射,它会用仅包含自身快捷键的内容替换整个文件,同时报告快捷键已安装。要恢复被早期版本替换的键位映射,请使用[输入多行提示词](/docs/zh-CN/terminal-config#enter-multiline-prompts)中所述的 `.bak` 备份文件。

3706 3862 

3707<h3 id="skill-usage-reports-are-not-available-on-this-connection">3863<h3 id="skill-usage-reports-are-not-available-on-this-connection">

3708 Skill 使用报告在此连接上不可用3864 此连接不支持 skill 使用情况报告

3709</h3>3865</h3>

3710 3866 

3711您在[远程控制](/docs/zh-CN/remote-control)上、从您的手机或浏览器运行了 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills)。Claude Code 不通过远程控制发送 skill 使用报告,改为用此消息回复:3867您通过 [Remote Control](/docs/zh-CN/remote-control) 从手机或浏览器运行了 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills)。Claude Code 不会通过 Remote Control 发送 skill 使用情况报告,而是回复以下消息:

3712 3868 

3713```text theme={null}3869```text theme={null}

3714Skill usage reports are not available on this connection.3870Skill usage reports are not available on this connection.

3715```3871```

3716 3872 

3717**应该做什么:**3873**解决方法:**

3718 3874 

3719* 在会话运行的机器上的终端中运行 `/skill-doctor`,或在那里运行 `claude -p "/skill-doctor"`3875* 在运行该会话的机器的终端中运行 `/skill-doctor`,或在该机器上运行 `claude -p "/skill-doctor"`

3720 3876 

3721<h3 id="custom-output-styles-cant-be-selected-over-remote-control">3877<h3 id="custom-output-styles-cant-be-selected-over-remote-control">

3722 无法通过远程控制选择自定义输出样式3878 无法通过 Remote Control 选择自定义输出样式

3723</h3>3879</h3>

3724 3880 

3725您从移动应用或网络通过[远程控制](/docs/zh-CN/remote-control)运行了 [`/output-style`](/docs/zh-CN/output-styles#change-your-output-style),或命令在中继到会话的消息中到达。因为此类轮次可能不来自帐户所有者,Claude Code 仅在其上列出并选择[内置样式](/docs/zh-CN/output-styles#built-in-output-styles),并在命令列出样式或不识别您给出的名称时添加此通知。[自定义样式](/docs/zh-CN/output-styles#create-a-custom-output-style)名称获得与不存在的名称相同的回复:3881您通过 [Remote Control](/docs/zh-CN/remote-control) 从移动应用或网页运行了 [`/output-style`](/docs/zh-CN/output-styles#change-your-output-style),或者该命令出现在转发到会话中的消息里。由于这样的轮次可能并非来自账户所有者,Claude Code 在其中只会列出和选择[内置样式](/docs/zh-CN/output-styles#built-in-output-styles),并且每当该命令列出样式或无法识别您提供的名称时,都会附加此通知。[自定义样式](/docs/zh-CN/output-styles#create-a-custom-output-style)名称得到的回复与不存在的名称相同:

3726 3882 

3727```text theme={null}3883```text theme={null}

3728Custom output styles can't be selected over Remote Control or from a relayed message. Select one in the session itself, or pick a built-in style here.3884Custom output styles can't be selected over Remote Control or from a relayed message. Select one in the session itself, or pick a built-in style here.

3729```3885```

3730 3886 

3731**应该做什么:**3887**解决方法:**

3732 3888 

3733* 选择内置样式,例如 `/output-style concise`3889* 选择一个内置样式,例如 `/output-style concise`

3734* 要使用自定义样式,在项目的 `.claude/settings.local.json` 中设置 [`outputStyle`](/docs/zh-CN/settings-reference#outputstyle),或在会话自己的终端中运行 `/output-style <style>`(如果它有的话)3890* 要使用自定义样式,请在项目的 `.claude/settings.local.json` 中设置 [`outputStyle`](/docs/zh-CN/settings-reference#outputstyle),或者如果会话有自己的终端,请在该终端中运行 `/output-style <style>`

3735 3891 

3736<h3 id="output-styles-are-saved-to-local-settings-which-this-session-doesnt-load">3892<h3 id="output-styles-are-saved-to-local-settings-which-this-session-doesnt-load">

3737 输出样式保存到此会话不加载的本地设置3893 输出样式保存在此会话不加载的本地设置中

3738</h3>3894</h3>

3739 3895 

3740您尝试在其设置源排除 `local` 的会话中使用 `/output-style <style>` 或 `/config outputStyle=<style>` 切换[输出样式](/docs/zh-CN/output-styles)。示例是 [`settingSources`](/docs/zh-CN/agent-sdk/typescript#options) 留出 `"local"` 的 [Agent SDK](/docs/zh-CN/agent-sdk/typescript) 会话,以及使用 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 值启动的 CLI 会话,该值留出 `local`。两个命令都将样式保存到 `.claude/settings.local.json`,此类会话从不读取回的文件,所以 Claude Code 拒绝而不是写入无效的设置:3896您在一个设置来源不包含 `local` 的会话中尝试使用 `/output-style <style>` 或 `/config outputStyle=<style>` 切换[输出样式](/docs/zh-CN/output-styles)。例如,[`settingSources`](/docs/zh-CN/agent-sdk/typescript#options) 省略了 `"local"` 的 [Agent SDK](/docs/zh-CN/agent-sdk/typescript) 会话,以及使用省略了 `local` 的 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 值启动的 CLI 会话。这两个命令都会将样式保存到 `.claude/settings.local.json`,而这类会话永远不会读回该文件,因此 Claude Code 会拒绝操作,而不是写入一个不会生效的设置:

3741 3897 

3742```text theme={null}3898```text theme={null}

3743Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load, so the style can't be changed here.3899Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load, so the style can't be changed here.

3744```3900```

3745 3901 

3746**应该做什么:**3902**解决方法:**

3747 3903 

3748* 将 `local` 添加到会话的设置源并再次切换3904* 将 `local` 添加到会话的设置来源中,然后再次切换

3749* 在会话确实加载的设置文件中设置 [`outputStyle`](/docs/zh-CN/settings-reference#outputstyle) 键,例如项目中的 `.claude/settings.json` 或 `~/.claude/settings.json`。在 TypeScript SDK 中,改为在内联 `settings` 对象内设置 `outputStyle`;请参阅[激活输出样式](/docs/zh-CN/agent-sdk/modifying-system-prompts#activate-an-output-style)3905* 在会话确实会加载的设置文件中设置 [`outputStyle`](/docs/zh-CN/settings-reference#outputstyle) 键,例如项目中的 `.claude/settings.json` 或 `~/.claude/settings.json`。在 TypeScript SDK 中,请改为在内联 `settings` 对象中设置 `outputStyle`;请参阅[激活输出样式](/docs/zh-CN/agent-sdk/modifying-system-prompts#activate-an-output-style)

3906 

3907<h3 id="recap-only-runs-when-you-ask-for-it-yourself">

3908 /recap 仅在您亲自请求时运行

3909</h3>

3910 

3911该 [`/recap`](/docs/zh-CN/interactive-mode#session-recap) 请求并非来自您自己的输入。它出现在从 Slack、Teams 或[项目](/docs/zh-CN/claude-projects)线程转发到会话中的消息里,或出现在 [Routine](/docs/zh-CN/routines) 或其他程序发送的提示词中。

3912 

3913即使转发的消息是您本人撰写的,也会收到此通知。Claude Code 无法判断转发或自动化的消息是否来自运行该会话的账户所有者,因此会以此通知代替摘要进行回复:

3914 

3915```text theme={null}

3916/recap only runs when you ask for it yourself in this session: from the terminal, the Claude app or claude.ai/code, or over Remote Control. A message relayed from Slack, Teams or a project thread, or sent by a routine or another program, can't request it.

3917```

3918 

3919传给 `claude -p` 的 `/recap`,或您自己的 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 应用程序向其启动的会话发送的 `/recap`,都算作您自己的输入。

3920 

3921**解决方法:**

3922 

3923* 亲自打开该会话并在其中运行 `/recap`:在其终端中、在 [Desktop 应用](/docs/zh-CN/desktop)或[移动应用](/docs/zh-CN/mobile)中、在 [claude.ai/code](https://claude.ai/code) 上,或通过 [Remote Control](/docs/zh-CN/remote-control)

3924* 如果是 Routine 或其他程序发送的,请从该提示词中删除 `/recap`

3750 3925 

3751<h2 id="plugin-errors">3926<h2 id="plugin-errors">

3752 插件错误3927 插件错误


4067 工具错误4242 工具错误

4068</h2>4243</h2>

4069 4244 

4070这些错误来自 Claude 的内置工具。Claude 通常会自动纠正大多数工具错误。当需要你进行更改时,该错误的**应该做什么**列表会说明需要更改的内容。4245这些错误来自 Claude 的工具调用。Claude 通常会自动纠正大多数工具错误。当需要您进行更改时,该错误的**应该做什么**列表会说明需要更改的内容。

4246 

4247<h3 id="no-such-tool-available">

4248 没有此类工具可用

4249</h3>

4250 

4251Claude 按名称调用了一个不在会话工具列表中的工具。Claude Code 将该错误作为工具调用的结果返回给 Claude,轮次继续。当 Claude Code 能够判断工具缺失的原因时,它会在工具名称后添加一句话,说明原因或指出应改为调用的工具,如第二行所示:

4252 

4253```text theme={null}

4254Error: No such tool available: <tool name>

4255Error: No such tool available: read. Tool names are case-sensitive: call Read instead.

4256```

4257 

4258在您恢复会话后不久,当 Claude 调用某个 MCP 服务器的工具时,该服务器可能仍在进行首次连接尝试。此时 Claude Code 会[等待该服务器](/docs/zh-CN/mcp#tool-availability),如果等待结束时该工具仍不可用,则返回此错误。在 v2.1.284 之前,此类调用会立即失败,而不会等待。

4259 

4260工具名称被 Claude Code [截断为 200 个字符](#tool-use-name-over-200-characters)的调用也会以此错误失败。

4261 

4262**应该做什么:**

4263 

4264* 如果只出现一次,无需执行任何操作。Claude 会读取该错误,轮次继续。

4265* 如果对某个 MCP 服务器工具的调用持续以此错误失败,请在会话中运行 `/mcp` 或在 shell 中运行 `claude mcp list` 来检查该服务器的[状态](/docs/zh-CN/mcp#server-status),并从 `/mcp` 重新连接失败的服务器。在 Agent SDK 中,请参阅[错误处理](/docs/zh-CN/agent-sdk/mcp#error-handling)。

4071 4266 

4072<h3 id="agent-would-be-spawned-with-zero-tools">4267<h3 id="agent-would-be-spawned-with-zero-tools">

4073 Agent 将以零个工具生成4268 Agent 将以零个工具生成

4074</h3>4269</h3>

4075 4270 

4076子代理的 [`tools` 列表](/docs/zh-CN/sub-agents#supported-frontmatter-fields)中的每个条目都无法匹配可用工具,因此 Claude Code 拒绝启动子代理:没有工具,它无法行动。该消息按出错原因对你的条目进行分组:4271子代理的 [`tools` 列表](/docs/zh-CN/sub-agents#supported-frontmatter-fields)中的每个条目都无法匹配可用工具,因此 Claude Code 拒绝启动子代理:没有工具,它无法行动。该消息按出错原因对您的条目进行分组:

4077 4272 

4078* **无法识别**:该条目与任何工具名称都不匹配,通常是拼写错误,例如 `Grpe` 代替 `Grep`。4273* **无法识别**:该条目与任何工具名称都不匹配,通常是拼写错误,例如 `Grpe` 代替 `Grep`。

4079* **子代理不可用**:该条目命名了一个真实工具,但[子代理无法使用](/docs/zh-CN/sub-agents#available-tools)。后台子代理保持较小的内置工具集,因此当子代理在后台运行时(这是默认设置),只有前台子代理才能使用的条目会出现在这里。如果你列出 `Agent`,该消息会改为在下一组中报告它。4274* **子代理不可用**:该条目命名了一个真实工具,但[子代理无法使用](/docs/zh-CN/sub-agents#available-tools)。后台子代理保持较小的内置工具集,因此当子代理在后台运行时(这是默认设置),只有前台子代理才能使用的条目会出现在这里。如果您列出 `Agent`,该消息会改为在下一组中报告它。

4080* **在此会话中未匹配任何工具**:该条目有效,但当前会话中没有工具与其匹配,例如没有连接 GitHub MCP 服务器的 `mcp__github__*`,或子代理处于[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)的 `Agent`。4275* **在此会话中未匹配任何工具**:该条目有效,但当前会话中没有工具与其匹配,例如没有连接 GitHub MCP 服务器的 `mcp__github__*`,或子代理处于[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)的 `Agent`。

4081 4276 

4082省略 `tools` 字段永远不会触发此拒绝。如果你将 `tools` 列表留空,或 `disallowedTools` 删除其中的每个条目,Claude Code 也会跳过拒绝并启动没有工具的子代理。4277省略 `tools` 字段永远不会触发此拒绝。如果您将 `tools` 列表留空,或 `disallowedTools` 删除其中的每个条目,Claude Code 也会跳过拒绝并启动没有工具的子代理。

4083 4278 

4084在 v2.1.208 之前,子代理以零个工具启动,可能返回空结果或令人困惑的结果。4279在 v2.1.208 之前,子代理以零个工具启动,可能返回空结果或令人困惑的结果。

4085 4280 


4093* 删除会话没有的工具条目,例如来自未连接的服务器的 MCP 工具4288* 删除会话没有的工具条目,例如来自未连接的服务器的 MCP 工具

4094* 对于[后台子代理删除](/docs/zh-CN/sub-agents#available-tools)的工具(例如 `CronCreate`),删除该条目。要保留该工具,[关闭 fork 模式](/docs/zh-CN/sub-agents#turn-fork-mode-on-or-off)并要求 Claude 在前台运行子代理4289* 对于[后台子代理删除](/docs/zh-CN/sub-agents#available-tools)的工具(例如 `CronCreate`),删除该条目。要保留该工具,[关闭 fork 模式](/docs/zh-CN/sub-agents#turn-fork-mode-on-or-off)并要求 Claude 在前台运行子代理

4095* 删除 `tools` 字段而不是列出工具,以给子代理每个[子代理可用的工具](/docs/zh-CN/sub-agents#available-tools)4290* 删除 `tools` 字段而不是列出工具,以给子代理每个[子代理可用的工具](/docs/zh-CN/sub-agents#available-tools)

4096* 对于仅包含 `Agent` 的 `tools` 列表,提高[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)或给代理至少一个其他工具:Claude Code 在该限制处保留 `Agent`,因此列表中没有其他内容会解析为零个工具4291* 对于仅包含 `Agent` 的 `tools` 列表,提高[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)或给该 Agent 至少一个其他工具:Claude Code 在该限制处保留 `Agent`,因此列表中没有其他内容会解析为零个工具

4097 4292 

4098<h3 id="file-is-covered-by-a-read-deny-rule">4293<h3 id="file-is-covered-by-a-read-deny-rule">

4099 文件被 Read 拒绝规则覆盖4294 文件被 Read 拒绝规则覆盖


4126 4321 

4127**应该做什么:**4322**应该做什么:**

4128 4323 

4129* 你这边不需要做任何事:错误作为工具的结果返回给 Claude,消息本身告诉 Claude 删除空字节并重试4324* 您这边不需要做任何事:错误作为工具的结果返回给 Claude,消息本身告诉 Claude 删除空字节并重试

4130 4325 

4131在 v2.1.281 之前,Read、Write、Edit 或 NotebookEdit 路径中的空字节会以命名 `Path contains null bytes` 的错误结束整个轮次,工具从不运行。4326在 v2.1.281 之前,Read、Write、Edit 或 NotebookEdit 路径中的空字节会以命名 `Path contains null bytes` 的错误结束整个轮次,工具从不运行。

4132 4327 


4141Claude 调用了 [Agent 工具](/docs/zh-CN/tools-reference#agent-tool-behavior)而没有 `subagent_type`,此会话没有[通用子代理](/docs/zh-CN/sub-agents#built-in-subagents)可回退。这种情况出现在两种设置中:4336Claude 调用了 [Agent 工具](/docs/zh-CN/tools-reference#agent-tool-behavior)而没有 `subagent_type`,此会话没有[通用子代理](/docs/zh-CN/sub-agents#built-in-subagents)可回退。这种情况出现在两种设置中:

4142 4337 

4143* [`CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1`](/docs/zh-CN/env-vars)在非交互模式下设置,这会删除每个内置子代理4338* [`CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1`](/docs/zh-CN/env-vars)在非交互模式下设置,这会删除每个内置子代理

4144* 会话的主线程代理有一个 [`tools: Agent(...)` 允许列表](/docs/zh-CN/sub-agents#restrict-which-subagents-can-be-spawned),其中不包括 `general-purpose`4339* 会话的主线程 Agent 有一个 [`tools: Agent(...)` 允许列表](/docs/zh-CN/sub-agents#restrict-which-subagents-can-be-spawned),其中不包括 `general-purpose`

4145 4340 

4146**应该做什么:**4341**应该做什么:**

4147 4342 


4151在 v2.1.235 之前,相同的调用失败并显示 `Agent type 'general-purpose' not found`。4346在 v2.1.235 之前,相同的调用失败并显示 `Agent type 'general-purpose' not found`。

4152 4347 

4153<h3 id="memory-index-is-over-its-read-limit">4348<h3 id="memory-index-is-over-its-read-limit">

4154 内存索引超过其读取限制4349 记忆索引超过其读取限制

4155</h3>4350</h3>

4156 4351 

4157Claude 写入了[自动内存](/docs/zh-CN/memory#auto-memory)索引 `MEMORY.md` 并将其留在其读取限制之一上:200 行或 25KB。写入成功,但仅加载前 200 行或 25KB(以先到者为准),因此每次读取索引时,超过限制的所有内容都会被丢弃。在 v2.1.210 之前,超限索引在下次加载时被静默截断,没有写入时信号。4352Claude 写入了[自动记忆](/docs/zh-CN/memory#auto-memory)索引 `MEMORY.md`,并使其超过了读取限制之一:200 行或 25KB。写入成功,但会话开始时仅加载前 200 行或 25KB(以先到者为准),因此每次读取索引时,超过限制的所有内容都会被丢弃。在 v2.1.210 之前,超限索引在下次加载时被静默截断,没有写入时信号。

4158 4353 

4159```text theme={null}4354```text theme={null}

4160Error: this write left the memory index at MEMORY.md at 214 lines, over its 200-line read limit. The write succeeded, but everything past the limit is silently dropped each time the index is loaded — entries at the end are already invisible to readers. Rewrite it to under 140 lines now: keep one line per entry, move detail into topic files, and merge or drop stale entries.4355Error: this write left the memory index at MEMORY.md at 214 lines, over its 200-line read limit. The write succeeded, but everything past the limit is silently dropped each time the index is loaded — entries at the end are already invisible to readers. Rewrite it to under 140 lines now: keep one line per entry, move detail into topic files, and merge or drop stale entries.


4162 4357 

4163仅加载的内容计入限制。YAML frontmatter 和块级 HTML 注释在加载索引前被删除,因此它们被排除在测量之外。在 v2.1.211 之前,Claude Code 测量原始文件,frontmatter 或注释即使在加载的内容符合时也可能触发此错误。4358仅加载的内容计入限制。YAML frontmatter 和块级 HTML 注释在加载索引前被删除,因此它们被排除在测量之外。在 v2.1.211 之前,Claude Code 测量原始文件,frontmatter 或注释即使在加载的内容符合时也可能触发此错误。

4164 4359 

4165Claude Code 在写入后将错误传递给 Claude,而不是在你的终端中打印为横幅,因此你可能仅在记录中注意到它。4360Claude Code 在写入后将错误传递给 Claude,而不是在您的终端中打印为横幅,因此您可能仅在会话记录中注意到它。

4166 4361 

4167当 Claude 的写入使文件接近限制但未超过时,Claude Code 返回更温和的提醒以压缩索引,而不是此错误。4362当 Claude 的写入使文件接近限制但未超过时,Claude Code 返回更温和的提醒以压缩索引,而不是此错误。

4168 4363 

4169**应该做什么:**4364**应该做什么:**

4170 4365 

4171* 让 Claude 重写 `MEMORY.md`,或要求它:每个条目保留一行,将详细信息移到主题文件中,并合并或删除过时条目4366* 让 Claude 重写 `MEMORY.md`,或要求它:每个条目保留一行,将详细信息移到主题文件中,并合并或删除过时条目

4172* 要自己修剪索引,请参阅[审计和编辑你的内存](/docs/zh-CN/memory#audit-and-edit-your-memory)4367* 要自己修剪索引,请参阅[审计和编辑您的记忆](/docs/zh-CN/memory#audit-and-edit-your-memory)

4173 4368 

4174<h3 id="pkill-pattern-matches-the-claude-code-process">4369<h3 id="pkill-pattern-matches-the-claude-code-process">

4175 pkill 模式匹配 Claude Code 进程4370 pkill 模式匹配 Claude Code 进程

4176</h3>4371</h3>

4177 4372 

4178Bash 工具调用中的 `pkill` 命令使用了一个模式(通常带有 `-f`),该模式与 Claude Code 进程本身匹配,因此 Claude Code 拒绝该命令而不是让它结束会话。Claude Code 在运行 `pkill` 之前使用 `pgrep` 测试该模式,并在其自己的进程 ID 在结果中时拒绝。该检查仅在 Linux 上运行;在 macOS 上,`pkill` 不经修改地运行。在 v2.1.214 之前,该命令运行,匹配的模式在中途杀死了 Claude Code 会话。4373Bash 工具调用中的 `pkill` 命令使用了一个模式(通常带有 `-f`),该模式与 Claude Code 进程本身匹配,因此 Claude Code 拒绝该命令而不是让它结束会话。Claude Code 在运行 `pkill` 之前使用 `pgrep` 测试该模式,并在其自己的进程 ID 在结果中时拒绝。该检查仅在 Linux 上运行;在 macOS 上,`pkill` 不经修改地运行。在 v2.1.214 之前,该命令运行,匹配的模式在轮次中途杀死了 Claude Code 会话。

4179 4374 

4180```text theme={null}4375```text theme={null}

4181pkill: refusing to run — this pattern matches the Claude CLI process (PID 12345). Narrow the pattern, or target your own children with `pkill -P $$ ...`.4376pkill: refusing to run — this pattern matches the Claude CLI process (PID 12345). Narrow the pattern, or target your own children with `pkill -P $$ ...`.

4182```4377```

4183 4378 

4184拒绝出现在 Bash 工具结果中,而不是作为你终端中的横幅,Claude 通常会自动调整该命令。4379拒绝出现在 Bash 工具结果中,而不是作为您终端中的横幅,Claude 通常会自动调整该命令。

4185 4380 

4186**应该做什么:**4381**应该做什么:**

4187 4382 


4192 无法写入队友的收件箱4387 无法写入队友的收件箱

4193</h3>4388</h3>

4194 4389 

4195Claude Code 无法将消息写入 `~/.claude/teams/{team-name}/inboxes/` 下的队友邮箱文件,因此收件人没有收到任何内容。当 Claude Code 无法创建或更新文件时写入失败,例如因为磁盘已满、目录不可写或另一个代理长时间持有收件箱锁。在 v2.1.224 之前,Claude Code 即使在写入失败时也报告消息已发送。4390Claude Code 无法将消息写入 `~/.claude/teams/{team-name}/inboxes/` 下的队友邮箱文件,因此收件人没有收到任何内容。当 Claude Code 无法创建或更新文件时写入失败,例如因为磁盘已满、目录不可写或另一个 Agent 长时间持有收件箱锁。在 v2.1.224 之前,Claude Code 即使在写入失败时也报告消息已发送。

4196 4391 

4197该错误出现在发送代理的工具结果中,而不是作为你终端中的横幅,其文本告诉 Claude 重试:4392该错误出现在发送方 Agent 的工具结果中,而不是作为您终端中的横幅,其文本告诉 Claude 重试:

4198 4393 

4199```text theme={null}4394```text theme={null}

4200Failed to write to researcher's inbox — nothing was sent. Try again, or message the lead.4395Failed to write to researcher's inbox — nothing was sent. Try again, or message the lead.

4201```4396```

4202 4397 

4203结构化[代理团队](/docs/zh-CN/agent-teams)协议消息以相同方式失败,错误命名未送达的消息:当 Claude Code 无法写入计划批准、计划拒绝、关闭请求或关闭拒绝时,错误读取 `Failed to write the <message> to <name>'s inbox — nothing was sent`。该列表中的 `plan approval` 是领导批准队友计划的决定;队友的计划提交是单独的 `plan approval request` 消息。该消息和另外两个协议消息携带自己的消息文本和后果:4398结构化 [agent team](/docs/zh-CN/agent-teams) 协议消息以相同方式失败,错误命名未送达的消息:当 Claude Code 无法写入计划批准、计划拒绝、关闭请求或关闭拒绝时,错误读取 `Failed to write the <message> to <name>'s inbox — nothing was sent`。该列表中的 `plan approval` 是领导批准队友计划的决定;队友的计划提交是单独的 `plan approval request` 消息。该消息和另外两个协议消息携带自己的消息文本和后果:

4204 4399 

4205* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`:队友的计划从未到达领导,队友保持计划模式直到重新提交成功4400* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`:队友的计划从未到达领导,队友保持计划模式直到重新提交成功

4206* `The permission request could not be delivered to the team lead (mailbox write failed)`:队友的权限请求从未到达领导,因此没有人批准工具调用4401* `The permission request could not be delivered to the team lead (mailbox write failed)`:队友的权限请求从未到达领导,因此没有人批准工具调用

4207* `The confirmation could not be written to team-lead's inbox.`:关闭批准本身生效,队友退出;仅缺少对领导的确认4402* `The confirmation could not be written to team-lead's inbox.`:关闭批准本身生效,队友退出;仅缺少对领导的确认

4208 4403 

4209当你自己给队友发消息时,在领导会话中输入 `@name` 后跟消息,相同的失败显示为通知 `Couldn't write to @name's inbox — message not sent. Try again.`,Claude Code 将你的文本保留在提示框中,以便你可以再次发送。4404当您自己给队友发消息时,在领导会话中输入 `@name` 后跟消息,相同的失败显示为通知 `Couldn't write to @name's inbox — message not sent. Try again.`,Claude Code 将您的文本保留在输入框中,以便您可以再次发送。

4210 4405 

4211**应该做什么:**4406**应该做什么:**

4212 4407 

4213* 要求发送者重新发送消息;收件箱锁的争用是暂时的,重试时会清除4408* 要求发送者重新发送消息;收件箱锁的争用是暂时的,重试时会清除

4214* 检查可用磁盘空间,并检查 `~/.claude/teams` 及其下的文件是否可由你的用户写入4409* 检查可用磁盘空间,并检查 `~/.claude/teams` 及其下的文件是否可由您的用户写入

4215 4410 

4216<h3 id="teammate-agent-definition-not-restored">4411<h3 id="teammate-agent-definition-not-restored">

4217 队友的代理定义未被恢复4412 队友的 Agent 定义未被恢复

4218</h3>4413</h3>

4219 4414 

4220Claude 给停止的[代理团队](/docs/zh-CN/agent-teams)队友发消息,Claude Code 将其恢复而没有重新应用它生成时的[子代理定义](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates),因为其定义文件来自没有保存信任的文件夹。该通知跟随发送代理的工具结果中的恢复报告:4415Claude 给停止的 [agent team](/docs/zh-CN/agent-teams) 队友发消息,Claude Code 将其恢复而没有重新应用它生成时的[子代理定义](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates),因为其定义文件来自没有保存信任的文件夹。该通知跟随发送方 Agent 的工具结果中的恢复报告:

4221 4416 

4222```text wrap theme={null}4417```text wrap theme={null}

4223Its agent definition was not restored: the folder its definition file came from is not trusted (source: projectSettings), so the teammate is running with the team-essential tools and no custom instructions. To restore it, the user needs to run Claude Code in that folder once and accept the trust dialog (the --debug log names the folder); do not change trust settings on the user's behalf.4418Its agent definition was not restored: the folder its definition file came from is not trusted (source: projectSettings), so the teammate is running with the team-essential tools and no custom instructions. To restore it, the user needs to run Claude Code in that folder once and accept the trust dialog (the --debug log names the folder); do not change trust settings on the user's behalf.

4224```4419```

4225 4420 

4226该检查适用于项目的 `.claude/agents/` 目录或 `--add-dir` 目录中的定义,接受父文件夹的信任对话不满足它。4421该检查适用于项目的 `.claude/agents/` 目录或 `--add-dir` 目录中的定义,接受父文件夹的信任对话框并不能满足它。

4227 4422 

4228**应该做什么:**4423**应该做什么:**

4229 4424 

4230* 在[调试日志](/docs/zh-CN/debug-your-config)命名的文件夹中运行 `claude` 并接受信任对话。下次 Claude Code 恢复队友时重新应用定义;你不需要重启领导会话4425* 在[调试日志](/docs/zh-CN/debug-your-config)命名的文件夹中运行 `claude` 并接受信任对话框。下次 Claude Code 恢复队友时重新应用定义;您不需要重启领导会话

4231* 或在 `~/.claude.json` 中将 `hasTrustDialogAccepted` 条目设置为 `true`,使用调试日志打印的确切 `projects["<path>"]` 键4426* 或在 `~/.claude.json` 中将 `hasTrustDialogAccepted` 条目设置为 `true`,使用调试日志打印的确切 `projects["<path>"]` 键

4232 4427 

4233<h3 id="message-too-large-for-cross-session-delivery">4428<h3 id="message-too-large-for-cross-session-delivery">

4234 跨会话传递消息过大4429 跨会话传递消息过大

4235</h3>4430</h3>

4236 4431 

4237Claude 的[跨会话消息](/docs/zh-CN/cross-session-messaging)到此机器上你的另一个会话太长而无法发送。Claude Code 拒绝了它,接收会话什么都没有收到。拒绝出现在发送会话的工具结果中,而不是作为你终端中的横幅。它命名两个大小以及如何使消息符合:4432Claude 发往此机器上您的另一个会话的[跨会话消息](/docs/zh-CN/cross-session-messaging)太长而无法发送。Claude Code 拒绝了它,接收会话什么都没有收到。拒绝出现在发送会话的工具结果中,而不是作为您终端中的横幅。它命名两个大小以及如何使消息符合:

4238 4433 

4239```text wrap theme={null}4434```text wrap theme={null}

4240Failed to send to api-worker: Message too large for cross-session delivery: the serialized message is 1,203,844 characters and the limit is 1,048,576. Shorten the message text — put bulk content in a file the recipient can read rather than in the message — or split it into smaller messages.4435Failed to send to api-worker: Message too large for cross-session delivery: the serialized message is 1,203,844 characters and the limit is 1,048,576. Shorten the message text — put bulk content in a file the recipient can read rather than in the message — or split it into smaller messages.


4244 4439 

4245**应该做什么:**4440**应该做什么:**

4246 4441 

4247* 要求 Claude 总结消息,或将大量内容放在收件人可以读取的文件中而不是消息中4442* 要求 Claude 总结消息,或将大量内容放入文件并发送该文件的路径

4248* 要求 Claude 将内容分成几条较短的消息4443* 要求 Claude 将内容分成几条较短的消息

4249 4444 

4250在 v2.1.235 之前,Claude Code 报告超大消息已发送。接收会话未读地丢弃了它。4445在 v2.1.235 之前,Claude Code 报告超大消息已发送。接收会话未读地丢弃了它。


4253 此会话刚刚收到太多消息4448 此会话刚刚收到太多消息

4254</h3>4449</h3>

4255 4450 

4256Claude 向此机器上你的一个会话发送了快速的[跨会话消息](/docs/zh-CN/cross-session-messaging)突发,突发达到了该会话的收件箱接受的内容。Claude Code 拒绝了下一次发送,接收会话什么都没有收到。拒绝出现在发送会话的工具结果中,而不是作为你终端中的横幅:4451Claude 向此机器上您的一个会话快速连续发送了大量[跨会话消息](/docs/zh-CN/cross-session-messaging),达到了该会话收件箱所能接受的上限。Claude Code 拒绝了下一次发送,接收会话什么都没有收到。拒绝出现在发送会话的工具结果中,而不是作为您终端中的横幅:

4257 4452 

4258```text wrap theme={null}4453```text wrap theme={null}

4259Failed to send to api-worker: Too many messages to this session just now: 30 were sent recently and more would be dropped by its rate limit, so this one was not sent. Batch what remains into one message, or wait a little before sending more.4454Failed to send to api-worker: Too many messages to this session just now: 30 were sent recently and more would be dropped by its rate limit, so this one was not sent. Batch what remains into one message, or wait a little before sending more.


4262**应该做什么:**4457**应该做什么:**

4263 4458 

4264* 通常不需要做任何事:Claude 将剩余内容批处理为一条消息,或在发送更多内容前等待4459* 通常不需要做任何事:Claude 将剩余内容批处理为一条消息,或在发送更多内容前等待

4265* 如果你自己提示了突发,要求 Claude 将剩余内容合并为单条消息4460* 如果是您自己的提示词引发了这次突发,请要求 Claude 将剩余内容合并为单条消息

4266 4461 

4267在 v2.1.236 之前,Claude Code 报告这些发送已发送。接收会话未读地丢弃了它们。4462在 v2.1.236 之前,Claude Code 报告这些消息已发送。接收会话未读地丢弃了它们。

4268 4463 

4269<h3 id="cross-session-message-dropped-at-the-inbox">4464<h3 id="cross-session-message-dropped-at-the-inbox">

4270 跨会话消息在收件人会话的收件箱处被丢弃4465 跨会话消息在收件人会话的收件箱处被丢弃

4271</h3>4466</h3>

4272 4467 

4273Claude 发送了[跨会话消息](/docs/zh-CN/cross-session-messaging)到此机器上你的另一个会话,该会话的收件箱在 Claude 在该会话中读取之前丢弃了它。该行命名收件人的地址,当收件人给出原因时,在破折号后添加原因:4468Claude 发送了[跨会话消息](/docs/zh-CN/cross-session-messaging)到此机器上您的另一个会话,该会话的收件箱在该会话中的 Claude 读取之前丢弃了它。该行命名收件人的地址,当收件人给出原因时,在破折号后添加原因:

4274 4469 

4275```text wrap theme={null}4470```text wrap theme={null}

4276Cross-session message was dropped at the recipient session's inbox (recipient: uds:/tmp/cc-socks/13605.sock) and not delivered — its queue of undelivered peer messages was full. Claude was told not to resend right away.4471Cross-session message was dropped at the recipient session's inbox (recipient: uds:/tmp/cc-socks/13605.sock) and not delivered — its queue of undelivered peer messages was full. Claude was told not to resend right away.


4280 4475 

4281在破折号后,该行给出以下一个或多个原因:4476在破折号后,该行给出以下一个或多个原因:

4282 4477 

4283* `its queue of undelivered peer messages was full`:收件人已经持有尽可能多的来自其他会话的未送达消息,其队列允许4478* `its queue of undelivered peer messages was full`:收件人持有的来自其他会话的未送达消息已达到其队列允许的上限

4284* `you sent faster than that session accepts`:发送会话的消息到达速度比收件人从一个发送者接受的速度快4479* `you sent faster than that session accepts`:发送会话的消息到达速度比收件人从一个发送者接受的速度快

4285* `it repeated your previous message`:该消息与发送会话不久前发送给该收件人的消息相同4480* `it repeated your previous message`:该消息与发送会话不久前发送给该收件人的消息相同

4286* `a relay loop between sessions was cut`:该消息继续了会话相互发送消息的链,链已通过收件人太多次或增长太长4481* `a relay loop between sessions was cut`:该消息延续了会话之间相互发送消息的链,且该链经过收件人的次数过多或增长过长

4287 4482 

4288**应该做什么:**4483**应该做什么:**

4289 4484 

4290* 假设收件人从未看到丢弃的消息。Claude Code 告诉 Claude 相同的内容,并告诉它改为在一条稍后的消息中包含仍然重要的任何内容,而不是立即重新发送4485* 假设收件人从未看到丢弃的消息。Claude Code 也会这样告诉 Claude,并告诉它在稍后的一条消息中包含仍然重要的任何内容,而不是立即重新发送

4291* 如果你的会话相互发送频繁更新,要求 Claude 发送更少、更大的消息,例如会话完成其工作时的一份报告4486* 如果您的会话相互发送频繁更新,请要求 Claude 发送更少、更大的消息,例如在会话完成其工作时发送一份报告

4292* 对于 `a relay loop between sessions was cut`,在其中一个会话中自己输入下一条指令。Claude 发送以响应你自己的提示的消息开始一条新链4487* 对于 `a relay loop between sessions was cut`,请在其中一个会话中自己输入下一条指令。Claude 为响应您自己的提示词而发送的消息会开始一条新链

4293 4488 

4294在 v2.1.238 之前,当收件人的收件箱丢弃消息时,发送会话没有收到报告。4489在 v2.1.238 之前,当收件人的收件箱丢弃消息时,发送会话没有收到报告。

4295 4490 


4297 拒绝发送跨会话消息4492 拒绝发送跨会话消息

4298</h3>4493</h3>

4299 4494 

4300在 Claude Code 将[跨会话消息](/docs/zh-CN/cross-session-messaging)写入此机器上你的另一个会话之前,它检查目标会话的收件箱套接字是消息寻址到的端点。当检查失败时,Claude Code 拒绝发送,目标会话什么都没有收到。对于 Claude 发送的消息,拒绝出现在发送会话的工具结果中:4495在 Claude Code 将[跨会话消息](/docs/zh-CN/cross-session-messaging)写入此机器上您的另一个会话之前,它检查目标会话的收件箱套接字是否为消息寻址到的端点。当检查失败时,Claude Code 在发送会话中拒绝发送,目标会话什么都没有收到。对于 Claude 发送的消息,拒绝出现在发送会话的工具结果中:

4301 4496 

4302```text theme={null}4497```text theme={null}

4303Failed to send to api-worker: Refusing to send: reply target is a symlink4498Failed to send to api-worker: Refusing to send: reply target is a symlink


4310 4505 

4311**应该做什么:**4506**应该做什么:**

4312 4507 

4313* 通常不需要做任何事:检查防止消息到达除了它寻址到的会话之外的端点,什么都没有发送4508* 通常不需要做任何事:这些检查防止消息到达其寻址会话之外的端点,且没有发送任何内容

4314* 如果 `reply target is a symlink` 对一个会话重复,检查在该会话的套接字路径处创建了什么链接,显示在其 `/status` 下的 `Peer address`4509* 如果 `reply target is a symlink` 对某个会话重复出现,请检查是什么在该会话的套接字路径处创建了链接,该路径显示在其 `/status` 的 `Peer address` 下

4315 4510 

4316<h3 id="refusing-after-a-symlink-changed">4511<h3 id="refusing-after-a-symlink-changed">

4317 拒绝读取、写入或搜索路径4512 拒绝读取、写入或搜索路径


4326每个拒绝命名其原因:4521每个拒绝命名其原因:

4327 4522 

4328* `its symlink resolution changed after permission was checked`:路径上的符号链接或 Grep 或 Glob 搜索根在权限检查和操作之间被替换。在读取拒绝中,括号中的短语命名哪个比较失败。4523* `its symlink resolution changed after permission was checked`:路径上的符号链接或 Grep 或 Glob 搜索根在权限检查和操作之间被替换。在读取拒绝中,括号中的短语命名哪个比较失败。

4329* `its parent-directory symlink resolution changed after permission was checked`:写入路径通过的目录不再解析到批准的位置4524* `its parent-directory symlink resolution changed after permission was checked`:写入路径经过的目录不再解析到批准的位置

4330* `where it leads on disk could not be determined (a link on the way could not be examined, or the links do not resolve)`:Claude Code 无法跟随路径到磁盘上的最终位置,例如因为其上的符号链接形成循环4525* `where it leads on disk could not be determined (a link on the way could not be examined, or the links do not resolve)`:Claude Code 无法跟随路径到磁盘上的最终位置,例如因为其上的符号链接形成循环

4331* `it is a symbolic link. Write to the link's target path instead`:符号链接位于批准的写入位置本身,例如 `CLAUDE.md` 是 `AGENTS.md` 的符号链接;消息指导 Claude 到链接的目标4526* `it is a symbolic link. Write to the link's target path instead`:符号链接位于请求的写入位置本身,例如 `CLAUDE.md` 是 `AGENTS.md` 的符号链接;消息指导 Claude 转向链接的目标

4332* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`:当另一个写入器打开文件时捕获的相同条件,例如写入符号链接的 `.mcp.json`4527* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`:当另一个写入器打开文件时捕获的相同条件,例如写入符号链接的 `.mcp.json`

4333* `Refusing to write into symlinked directory: <path>`:持有文件的目录本身是符号链接,例如项目的 `.claude/` 目录链接到另一个位置4528* `Refusing to write into symlinked directory: <path>`:持有文件的目录本身是符号链接,例如项目的 `.claude/` 目录链接到另一个位置

4334* `a path one of its Read deny rules is written through changed while the search was being prepared. Retry.`:搜索的 `Read` 拒绝规则命名通过符号链接的路径,该链接在 Claude Code 准备搜索时更改4529* `a path one of its Read deny rules is written through changed while the search was being prepared. Retry.`:搜索的 `Read` 拒绝规则命名了经过符号链接的路径,该链接在 Claude Code 准备搜索时发生更改

4335* `it could not be opened (EACCES) — it is unreadable, or is being replaced concurrently.`:搜索根存在但无法打开;括号中的代码是操作系统错误4530* `it could not be opened (EACCES) — it is unreadable, or is being replaced concurrently.`:搜索根存在但无法打开;括号中的代码是操作系统错误

4336* `its permission check expired before it ran (too many concurrent file operations). Retry.`:Claude Code 在许多同时文件操作下驱逐了批准记录,然后工具使用了它;重试运行新的权限检查4531* `its permission check expired before it ran (too many concurrent file operations). Retry.`:在大量同时进行的文件操作下,Claude Code 在工具使用批准记录之前将其逐出;重试会运行新的权限检查

4337* `ripgrep was found only by name on PATH, and a search outside the working directory cannot apply your Read deny rules in that configuration`:Claude Code 无法将 `rg` 二进制文件解析为绝对路径,因此它拒绝工作目录外的搜索,而不是运行你的拒绝规则不覆盖的搜索4532* `ripgrep was found only by name on PATH, and a search outside the working directory cannot apply your Read deny rules in that configuration`:Claude Code 无法将 `rg` 二进制文件解析为绝对路径,因此它拒绝工作目录外的搜索,而不是运行您的拒绝规则无法覆盖的搜索

4338 4533 

4339**应该做什么:**4534**应该做什么:**

4340 4535 

4341* 通常不需要做任何事:拒绝到达 Claude 作为工具结果,拒绝的操作不运行4536* 通常不需要做任何事:拒绝作为工具结果到达 Claude,被拒绝的操作不会运行

4342* 如果符号链接拒绝在一个路径上重复,找到什么保持在那里重写链接,例如构建工具或文件监视程序,或要求 Claude 使用文件的解析路径而不是链接的路径4537* 如果符号链接拒绝在某个路径上重复出现,请找出是什么在不断重写那里的链接,例如构建工具或文件监视程序,或要求 Claude 使用文件的解析路径而不是链接路径

4343* 如果此拒绝对 Windows 上 AppContainer 或受限令牌沙箱内运行的每个文件出现,升级到 v2.1.265 或更高版本4538* 如果 Claude Code 在 Windows 上的 AppContainer 或受限令牌沙箱内运行时,每个文件都出现此拒绝,请升级到 v2.1.265 或更高版本

4344* 如果读取拒绝在 macOS 上出现,针对没有任何东西重写的文件,例如拖入提示的屏幕截图,升级到 v2.1.273 或更高版本4539* 如果在 macOS 上,对没有任何东西在重写的文件(例如拖入提示词的屏幕截图)出现读取拒绝,请升级到 v2.1.273 或更高版本

4345* 对于 ripgrep 拒绝,使用你的包管理器安装 ripgrep,以便 `rg` 在 `PATH` 上解析为绝对路径,或将搜索保持在工作目录下4540* 对于 ripgrep 拒绝,使用您的包管理器安装 ripgrep,以便 `rg` 在 `PATH` 上解析为绝对路径,或将搜索保持在工作目录下

4346 4541 

4347在 v2.1.251 之前,Claude Code 仅对文件写入重新检查路径的解析,因此在权限检查后替换的链接可能会将读取或搜索重定向到不同的位置而没有消息。其中,仅父目录、通过符号链接和符号链接目录写入拒绝出现在早期版本上。4542在 v2.1.251 之前,Claude Code 仅对文件写入重新检查路径的解析,因此在权限检查后替换的链接可能会将读取或搜索重定向到不同的位置而没有消息。其中,仅父目录、通过符号链接和符号链接目录写入拒绝会出现在早期版本上。

4348 4543 

4349在 v2.1.280 之前,`where it leads on disk could not be determined` 拒绝没有出现。4544在 v2.1.280 之前,`where it leads on disk could not be determined` 拒绝没有出现。

4350 4545 


4358task output swap refused (tasks dir moved or linked): /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks/b7k2f9m3q.output. To recover: restart Claude Code with CLAUDE_CODE_TMPDIR set to a fresh directory; or, if /private/tmp/claude-501/-Users-you-my-project is a stray directory or a symbolic link that should not be there, remove that entry itself (not what it points to) and restart.4553task output swap refused (tasks dir moved or linked): /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks/b7k2f9m3q.output. To recover: restart Claude Code with CLAUDE_CODE_TMPDIR set to a fresh directory; or, if /private/tmp/claude-501/-Users-you-my-project is a stray directory or a symbolic link that should not be there, remove that entry itself (not what it points to) and restart.

4359```4554```

4360 4555 

4361括号中的文本命名失败的检查。诸如 `output symlink was re-pointed`、`output file identity changed` 和 `not a regular file` 之类的原因都报告相同的条件:输出路径上或沿着的某些东西不再是 Claude Code 创建的文件。仅某些原因携带 `To recover:` 句子。4556括号中的文本命名失败的检查。诸如 `output symlink was re-pointed`、`output file identity changed` 和 `not a regular file` 之类的原因都报告相同的条件:输出路径上或沿途的某些东西不再是 Claude Code 创建的文件。仅某些原因携带 `To recover:` 句子。

4362 4557 

4363如果在命令仍在运行时检查失败,Claude Code 停止该命令,其结果报告:4558如果在命令仍在运行时检查失败,Claude Code 停止该命令,其结果报告:

4364 4559 


4370 4565 

4371* 升级到 v2.1.260 或更高版本。早期版本有时在没有链接或移动目录存在时显示此消息4566* 升级到 v2.1.260 或更高版本。早期版本有时在没有链接或移动目录存在时显示此消息

4372* 使用设置为新目录的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars)重启 Claude Code4567* 使用设置为新目录的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars)重启 Claude Code

4373* 或检查你的项目在 Claude Code 临时目录下的目录,示例消息中的 `/private/tmp/claude-501/-Users-you-my-project`。如果该路径是符号链接或不应该存在的目录,删除链接或目录本身而不是链接的目标,然后重启 Claude Code4568* 或检查您的项目在 Claude Code 临时目录下的目录,示例消息中的 `/private/tmp/claude-501/-Users-you-my-project`。如果该路径是符号链接或不应该存在的目录,删除链接或目录本身而不是链接的目标,然后重启 Claude Code

4374* 如果拒绝重复,进程在会话运行时替换、链接或删除 Claude Code 临时目录下的条目。将 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 设置为没有其他东西管理的目录并重启4569* 如果拒绝重复出现,说明有进程在会话运行时替换、链接或删除 Claude Code 临时目录下的条目。将 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 设置为没有其他东西管理的目录并重启

4375 4570 

4376<h3 id="disk-quota-or-temp-filesystem-is-full">4571<h3 id="disk-quota-or-temp-filesystem-is-full">

4377 磁盘配额或临时文件系统已满4572 磁盘配额或临时文件系统已满

4378</h3>4573</h3>

4379 4574 

4380Claude Code 将每个 Bash 和 PowerShell 命令的输出保存到其临时目录下的文件。当命令以非零代码退出且完全没有输出时,Claude Code 检查持有该文件的文件系统是否空间不足或 inode 不足,或你在其上的磁盘配额是否已用完。如果是这样,诊断出现在命令的结果中,代替空输出:4575Claude Code 将每个 Bash 和 PowerShell 命令的输出保存到其临时目录下的文件。当命令以非零代码退出且完全没有输出时,Claude Code 检查持有该文件的文件系统是否空间不足或 inode 不足,或您在其上的磁盘配额是否已用完。如果是这样,诊断出现在命令的结果中,代替空输出:

4381 4576 

4382```text wrap theme={null}4577```text wrap theme={null}

4383Your disk quota is full on the filesystem with Claude Code's temp directory /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks (EDQUOT), so any output this command printed was lost, and it may have failed because it could not write. Delete files you no longer need there, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another filesystem.4578Your disk quota is full on the filesystem with Claude Code's temp directory /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks (EDQUOT), so any output this command printed was lost, and it may have failed because it could not write. Delete files you no longer need there, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another filesystem.


4385 4580 

4386该消息命名什么用完了:4581该消息命名什么用完了:

4387 4582 

4388* `Your disk quota is full ... (EDQUOT)`:你在该文件系统上的配额已用完。配额可以在文件系统仍显示可用空间时已满4583* `Your disk quota is full ... (EDQUOT)`:您在该文件系统上的配额已用完。配额可以在文件系统仍显示可用空间时已满

4389* `The filesystem with Claude Code's temp directory ..., or your disk quota on it, is full (ENOSPC)`:文件系统或你在其上的配额没有剩余空间4584* `The filesystem with Claude Code's temp directory ..., or your disk quota on it, is full (ENOSPC)`:文件系统或您在其上的配额没有剩余空间

4390* `Command output was lost: the temp filesystem at ... is full` 或 `... is out of inodes`:文件系统几乎没有剩余空间,或 inode 即将用完4585* `Command output was lost: the temp filesystem at ... is full` 或 `... is out of inodes`:文件系统几乎没有剩余空间,或 inode 即将用完

4391 4586 

4392**应该做什么:**4587**应该做什么:**

4393 4588 

4394* 删除你在持有 Claude Code 临时目录的文件系统上不再需要的文件。对于 `EDQUOT`,删除计入你自己配额的文件。对于 `out of inodes`,删除许多文件而不是几个大文件,因为每个文件占用一个 inode,无论其大小如何4589* 删除您在持有 Claude Code 临时目录的文件系统上不再需要的文件。对于 `EDQUOT`,删除计入您自己配额的文件。对于 `out of inodes`,删除许多文件而不是几个大文件,因为每个文件占用一个 inode,无论其大小如何

4395* 或使用设置为具有空间的文件系统上的目录的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars)重启 Claude Code4590* 或使用设置为具有空间的文件系统上的目录的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars)重启 Claude Code

4396* 然后让 Claude 再次运行该命令。它打印的输出已丢失,未被截断4591* 然后让 Claude 再次运行该命令。它打印的输出已丢失,未被截断

4397 4592 


4399 源文件不是有效的 UTF-8 文本4594 源文件不是有效的 UTF-8 文本

4400</h3>4595</h3>

4401 4596 

4402Claude 尝试从字节不解码为文本的文件发布[工件](/docs/zh-CN/artifacts),或其文本已包含替换字符 `U+FFFD`,因此 Claude Code 拒绝发布,然后上传任何内容。消息出现在 Artifact 工具结果中并命名第一个要修复的位置:4597Claude 尝试从一个字节无法解码为文本、或其文本已包含替换字符 `U+FFFD` 的文件发布 [Artifact](/docs/zh-CN/artifacts),因此 Claude Code 在上传任何内容之前拒绝了发布。消息出现在 Artifact 工具结果中并命名第一个要修复的位置:

4403 4598 

4404```text wrap theme={null}4599```text wrap theme={null}

4405file_path: the source file is not valid UTF-8 text (first invalid byte at line 12, column 40). It may be saved in another encoding or contain binary data. Rewrite it as UTF-8, then publish again. Nothing was published.4600file_path: the source file is not valid UTF-8 text (first invalid byte at line 12, column 40). It may be saved in another encoding or contain binary data. Rewrite it as UTF-8, then publish again. Nothing was published.


4407file_path: the source file has the replacement character U+FFFD at line 12, column 40, usually left where an earlier edit or paste lost a character. Replace it with the intended text (in HTML, write an intended U+FFFD as &#xFFFD;), then publish again. Nothing was published.4602file_path: the source file has the replacement character U+FFFD at line 12, column 40, usually left where an earlier edit or paste lost a character. Replace it with the intended text (in HTML, write an intended U+FFFD as &#xFFFD;), then publish again. Nothing was published.

4408```4603```

4409 4604 

4410Claude Code 将文件解码为 UTF-8,或当它以小端 UTF-16 字节顺序标记开始时解码为 UTF-16。当这样的 UTF-16 文件不解码时,第一条消息命名 `UTF-16` 并仍然告诉你将文件重写为 UTF-8。当更多位置跟随命名的位置时,消息在位置后添加计数,例如 `(+2 more)`。4605Claude Code 将文件解码为 UTF-8,或当它以小端 UTF-16 字节顺序标记开始时解码为 UTF-16。当这样的 UTF-16 文件无法解码时,第一条消息命名 `UTF-16` 并仍然告诉您将文件重写为 UTF-8。当命名的位置之后还有更多位置时,消息在位置后添加计数,例如 `(+2 more)`。

4411 4606 

4412**应该做什么:**4607**应该做什么:**

4413 4608 

4414* 通常不需要做任何事:Claude 重写文件并再次发布4609* 通常不需要做任何事:Claude 重写文件并再次发布

4415* 如果文件是你写或导出的,再次将其保存为 UTF-8,并将每个 `U+FFFD` 替换为早期编辑、粘贴或转换丢失的字符4610* 如果文件是您编写或导出的,请再次将其保存为 UTF-8,并将每个 `U+FFFD` 替换为早期编辑、粘贴或转换丢失的字符

4416* 要在页面上显示有意的 `U+FFFD`,在 HTML 中将其写为 `&#xFFFD;` 而不是文字字符4611* 要在页面上显示有意的 `U+FFFD`,在 HTML 中将其写为 `&#xFFFD;` 而不是字面字符

4612 

4613在 v2.1.267 之前,Claude Code 不加检查地上传这样的文件,而由服务器拒绝发布。

4614 

4615<h3 id="not-published-that-file-is-on-a-network-share">

4616 未发布:该文件位于网络共享上

4617</h3>

4618 

4619Claude 尝试从一个路径指向网络主机的文件发布 [Artifact](/docs/zh-CN/artifacts):

4417 4620 

4418在 v2.1.267 之前,Claude Code 上传这样的文件而不检查它,服务器拒绝发布。4621* 在 Windows 上,不在您启动时通过 [`--add-dir`](/docs/zh-CN/cli-reference#cli-flags) 传入的映射网络驱动器下的 `\\server\share` 路径

4622* 在 macOS 或 Linux 上,自动挂载路径,例如 `/net/<host>/page.html`

4623 

4624查找此类路径会联系其指向的主机,而在 Windows 上,这种联系可能会将您的凭据发送给该主机。Claude Code 拒绝发布该文件,也不会读取它。拒绝出现在 Artifact 工具结果中:

4625 

4626```text theme={null}

4627Not published: that file is on a network share. Publish a file from this session's folders instead.

4628```

4629 

4630**应该做什么:**

4631 

4632* 如果您不需要该特定文件,则无需执行任何操作:消息会告诉 Claude 改为从会话自己的文件夹发布文件

4633* 要发布该特定文件,请将其复制到本地磁盘上的文件夹中,然后再次请求

4634* 在 Windows 上,要让 Claude 直接从共享发布,请将其映射到驱动器号,并在启动 Claude Code 时传入该驱动器。例如,在 PowerShell 中运行 `net use Z: \\server\share`,然后运行 `claude --add-dir Z:\`。之后 Claude 就可以从该驱动器发布文件。在会话中途使用 `/add-dir` 添加驱动器是不够的。

4635* 在 macOS 或 Linux 上,将共享挂载到某个目录(例如 `/mnt` 或 `/Volumes` 下的目录),并从该路径而不是自动挂载路径发布

4419 4636 

4420<h3 id="reading-a-local-file-from-outside-the-connected-folders">4637<h3 id="reading-a-local-file-from-outside-the-connected-folders">

4421 在 Cowork 会话中从连接的文件夹外读取本地文件4638 在 Cowork 会话中从连接的文件夹外读取本地文件

4422</h3>4639</h3>

4423 4640 

4424在 Claude Desktop 应用中在你的机器上运行的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,Claude 为[工件](/docs/zh-CN/artifacts)命名了本地文件。Claude Code 无法确认文件是会话连接的文件夹内的纯文件:路径位于这些文件夹外、通过符号链接或以可能命名不同文件的方式拼写。读取这样的文件需要你的批准,在无法向你显示批准卡的会话中,例如设置为跳过所有批准的会话,Claude Code 拒绝读取。4641在 Claude Desktop 应用中于您的机器上运行的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,Claude 为 [Artifact](/docs/zh-CN/artifacts) 指定了一个本地文件。Claude Code 无法确认该文件是会话连接的文件夹内的普通文件:路径位于这些文件夹之外、经过符号链接,或者其写法可能指向与表面不同的文件。读取这样的文件需要您的批准,而在无法向您显示批准卡片的会话中(例如设置为跳过所有批准的会话),Claude Code 会拒绝读取。

4425 4642 

4426拒绝出现在 Artifact 工具结果中;当文件根本无法检查时,它改为命名该失败:4643拒绝出现在 Artifact 工具结果中;当文件根本无法检查时,它改为命名该失败:

4427 4644 


4433 4650 

4434**应该做什么:**4651**应该做什么:**

4435 4652 

4436* 通常不需要做任何事:消息告诉 Claude 改为使用连接的文件夹内的纯文件4653* 通常不需要做任何事:消息告诉 Claude 改为使用连接的文件夹内的普通文件

4437* 要将该确切文件放在工件中,将其复制到会话的连接文件夹之一中作为常规文件(不是符号链接),然后再次询问4654* 要将该特定文件放入 Artifact,请将其作为常规文件(而非符号链接)复制到会话的某个连接文件夹中,然后再次请求

4438 4655 

4439<h3 id="webfetch-cannot-fetch-localhost">4656<h3 id="webfetch-cannot-fetch-localhost">

4440 WebFetch 无法获取 localhost4657 WebFetch 无法获取 localhost

4441</h3>4658</h3>

4442 4659 

4443Claude 调用了 [WebFetch](/docs/zh-CN/tools-reference#webfetch-tool-behavior),其 URL 的主机名没有点,例如 `http://localhost:3000` 或裸 intranet 名称如 `http://wiki/`。WebFetch 在进行任何请求之前拒绝这些 URL:4660Claude 调用了 [WebFetch](/docs/zh-CN/tools-reference#webfetch-tool-behavior),其 URL 的主机名中没有点,例如 `http://localhost:3000` 或类似 `http://wiki/` 的纯内网名称。WebFetch 在发出任何请求之前拒绝这些 URL:

4444 4661 

4445```text wrap theme={null}4662```text wrap theme={null}

4446WebFetch cannot fetch localhost or other hostnames without a dot. To reach a local server, use Bash with curl instead.4663WebFetch cannot fetch localhost or other hostnames without a dot. To reach a local server, use Bash with curl instead.


4448 4665 

4449**应该做什么:**4666**应该做什么:**

4450 4667 

4451* 通常不需要做任何事:消息指向 Claude 通过 Bash 工具使用 `curl`,它可以到达本地和 intranet 服务器4668* 通常不需要做任何事:消息引导 Claude 通过 Bash 工具使用 `curl`,它可以访问本地和内网服务器

4452 4669 

4453在 v2.1.268 之前,WebFetch 用通用 `Invalid URL` 错误报告这些 URL。4670在 v2.1.268 之前,WebFetch 用通用的 `Invalid URL` 错误报告这些 URL。

4454 4671 

4455<h3 id="webfetch-domain-safety-check-failed">4672<h3 id="webfetch-domain-safety-check-failed">

4456 WebFetch 域名安全检查失败4673 WebFetch 域名安全检查失败

4457</h3>4674</h3>

4458 4675 

4459在获取 URL 之前,WebFetch 将 URL 的主机名发送到 `api.anthropic.com` 以根据 Anthropic 的[域名安全阻止列表](/docs/zh-CN/data-usage#webfetch-domain-safety-check)检查它。如果检查无法完成,WebFetch 无法确认域名是安全的,因此它不获取页面,工具结果改为携带以下消息之一:4676在获取 URL 之前,WebFetch 将 URL 的主机名发送到 `api.anthropic.com`,以根据 Anthropic 的[域名安全阻止列表](/docs/zh-CN/data-usage#webfetch-domain-safety-check)检查它。如果检查无法完成,WebFetch 无法确认域名是安全的,因此它不获取页面,工具结果改为携带以下消息之一:

4460 4677 

4461```text wrap theme={null}4678```text wrap theme={null}

4462The safety check for domain example.com is rate-limited (too many domain checks from this network; the limit is shared and can stay exhausted for minutes). Do not retry WebFetch in a loop or sleep to wait it out; continue without this page and report that its safety check was rate-limited. A single later attempt is fine; if that is rate-limited too, stop.4679The safety check for domain example.com is rate-limited (too many domain checks from this network; the limit is shared and can stay exhausted for minutes). Do not retry WebFetch in a loop or sleep to wait it out; continue without this page and report that its safety check was rate-limited. A single later attempt is fine; if that is rate-limited too, stop.


4464Unable to verify if domain example.com is safe to fetch. This may be due to network restrictions or enterprise security policies blocking claude.ai.4681Unable to verify if domain example.com is safe to fetch. This may be due to network restrictions or enterprise security policies blocking claude.ai.

4465```4682```

4466 4683 

4467* `rate-limited`:检查端点以 HTTP `429` 回答。消息告诉 Claude 继续而不使用页面,最多稍后再尝试一次。Claude Code 不缓存失败的检查,因此该域的稍后获取再次运行检查。如果你的网络上的会话经常遇到这种情况,你可以使用[`skipWebFetchPreflight: true`](/docs/zh-CN/settings-reference#skipwebfetchpreflight)在设置中跳过检查。4684* `rate-limited`:检查端点以 HTTP `429` 响应。消息告诉 Claude 在没有该页面的情况下继续,并且稍后最多再尝试一次。Claude Code 不缓存失败的检查,因此稍后获取该域名时会再次运行检查。如果您网络上的会话经常遇到这种情况,您可以在设置中使用 [`skipWebFetchPreflight: true`](/docs/zh-CN/settings-reference#skipwebfetchpreflight) 跳过检查。

4468* `Unable to verify`:检查请求失败、超时或获得另一个错误状态。如果你的网络阻止 `api.anthropic.com`,允许列表该域,或使用[`skipWebFetchPreflight: true`](/docs/zh-CN/settings-reference#skipwebfetchpreflight)在设置中跳过检查。4685* `Unable to verify`:检查请求失败、超时或收到其他错误状态。如果您的网络阻止 `api.anthropic.com`,请将该域名加入允许列表,或在设置中使用 [`skipWebFetchPreflight: true`](/docs/zh-CN/settings-reference#skipwebfetchpreflight) 跳过检查。

4469 4686 

4470在 v2.1.286 之前,速率限制消息读取 `The safety check for domain example.com is temporarily rate-limited (too many domain checks from this network). Retry after about a minute; retrying sooner will fail the same way.`。4687在 v2.1.286 之前,速率限制消息为 `The safety check for domain example.com is temporarily rate-limited (too many domain checks from this network). Retry after about a minute; retrying sooner will fail the same way.`。

4471在 v2.1.285 之前,速率限制检查用 `Unable to verify` 消息报告。4688在 v2.1.285 之前,被限流的检查改为用 `Unable to verify` 消息报告。

4472 4689 

4473<h2 id="background-session-errors">4690<h2 id="background-session-errors">

4474 后台会话错误4691 后台会话错误

4475</h2>4692</h2>

4476 4693 

4477[后台会话](/docs/zh-CN/agent-view)在没有自己的交互式终端的情况下运行,因此需要终端的命令在那里的行为会有所不同。这些消息出现在后台会话的记录中、附加到后台会话的终端中、您分派的会话或 shell 中,或者对于下面的[worktree-guard 条目](#write-or-command-blocked-because-the-path-cannot-be-safely-resolved),出现在任何在 worktree 中隔离的会话或运行 worktree 隔离子代理中;当消息特定于一个表面时,其条目会说明这一点。4694[后台会话](/docs/zh-CN/agent-view)在没有自己的交互式终端的情况下运行,因此需要终端的命令在那里的行为会有所不同。这些消息出现在后台会话的会话记录中、附加到后台会话的终端中、您分派的会话或 shell 中,或者对于下面的[worktree-guard 条目](#write-or-command-blocked-because-the-path-cannot-be-safely-resolved),出现在任何在 worktree 中隔离的会话或运行 worktree 隔离子代理中;当消息特定于一个使用入口时,其条目会说明这一点。

4478 4695 

4479<h3 id="commands-refused-in-a-background-session">4696<h3 id="commands-refused-in-a-background-session">

4480 后台会话中拒绝的命令4697 后台会话中拒绝的命令

4481</h3>4698</h3>

4482 4699 

4483打开交互式对话框的命令在没有终端附加到后台会话时无法执行。`/install-github-app`、`/mcp` 设置列表和 MCP 服务器菜单中的身份验证操作会响应一条消息。对于 `/install-github-app` 和 `/mcp` 设置列表,该会话也在[代理视图](/docs/zh-CN/agent-view)中的**需要输入**下显示,以便您可以找到它、附加并再次运行该命令。附加终端时,这些命令正常工作。4700打开交互式对话框的命令在没有终端附加到后台会话时无法执行。`/install-github-app`、`/mcp` 设置列表和 MCP 服务器菜单中的身份验证操作会响应一条消息。对于 `/install-github-app` 和 `/mcp` 设置列表,该会话也在 [Agent 视图](/docs/zh-CN/agent-view)中的**需要输入**下显示,以便您可以找到它、附加并再次运行该命令。附加终端时,这些命令正常工作。

4484 4701 

4485在 v2.1.216 之前,会话在拒绝 `/install-github-app` 或 `/mcp` 设置列表后不会在**需要输入**下显示。在 v2.1.213 到 v2.1.215 中,附加终端时命令仍然有效,拒绝消息告诉您附加并再次运行该命令。从 v2.1.208 到 v2.1.212,Claude Code 即使附加了终端也拒绝了它们,消息如 `Can't open MCP settings in a background session`;在这些版本上,从常规 `claude` 会话运行该命令,或升级。在 v2.1.208 之前,它们在后台会话内打开了对话框。在仅 v2.1.208 中,Claude Code 也拒绝了后台会话中的 `/model` 选择器,`/upgrade` 打印了升级 URL 而不是打开浏览器。4702在 v2.1.216 之前,会话在拒绝 `/install-github-app` 或 `/mcp` 设置列表后不会在**需要输入**下显示。在 v2.1.213 到 v2.1.215 中,附加终端时命令仍然有效,拒绝消息告诉您附加并再次运行该命令。从 v2.1.208 到 v2.1.212,Claude Code 即使附加了终端也拒绝了它们,消息如 `Can't open MCP settings in a background session`;在这些版本上,从常规 `claude` 会话运行该命令,或升级。在 v2.1.208 之前,它们在后台会话内打开了对话框。在仅 v2.1.208 中,Claude Code 也拒绝了后台会话中的 `/model` 选择器,`/upgrade` 打印了升级 URL 而不是打开浏览器。

4486 4703 


4492 4709 

4493**要做什么:**4710**要做什么:**

4494 4711 

4495* 从代理视图附加到会话并再次运行该命令4712* 从 Agent 视图附加到会话并再次运行该命令

4496* 或使用消息命名的形式,例如 `/mcp reconnect <server>`、`/mcp enable` 或 `/mcp disable`,这些不需要附加即可工作4713* 或使用消息命名的形式,例如 `/mcp reconnect <server>`、`/mcp enable` 或 `/mcp disable`,这些不需要附加即可工作

4497 4714 

4498<h3 id="write-or-command-blocked-because-the-path-cannot-be-safely-resolved">4715<h3 id="write-or-command-blocked-because-the-path-cannot-be-safely-resolved">


4509 4726 

4510**要做什么:**4727**要做什么:**

4511 4728 

4512* 通常什么都不做:完整消息作为工具错误发送给 Claude,Claude 使用它命名的直接路径重试。对于被阻止的文件编辑,对话视图仅显示简短的 `Error editing file` 行;完整消息出现在您使用 `Ctrl+O` 打开的记录视图中。被阻止的命令在其命令输出中打印它。4729* 通常什么都不做:完整消息作为工具错误发送给 Claude,Claude 使用它命名的直接路径重试。对于被阻止的文件编辑,对话视图仅显示简短的 `Error editing file` 行;完整消息出现在您使用 `Ctrl+O` 打开的会话记录视图中。被阻止的命令在其命令输出中打印它。

4513* 如果同一文件上的块重复,路径可能通过包含 `..` 的已提交符号链接运行,例如 `docs/current -> ../README.md`;要求 Claude 通过其真实路径而不是通过链接编辑目标文件4730* 如果同一文件上的阻止重复出现,路径可能通过包含 `..` 的已提交符号链接运行,例如 `docs/current -> ../README.md`;要求 Claude 通过其真实路径而不是通过链接编辑目标文件

4514 4731 

4515<h3 id="write-or-command-blocked-because-the-path-names-a-network-location">4732<h3 id="write-or-command-blocked-because-the-path-names-a-network-location">

4516 写入或命令被阻止,因为路径命名网络位置4733 写入或命令被阻止,因为路径命名网络位置


4550* 要有意对主检出采取行动,在会话外的终端中自己运行该命令4767* 要有意对主检出采取行动,在会话外的终端中自己运行该命令

4551 4768 

4552<h3 id="this-session-has-no-saved-transcript">4769<h3 id="this-session-has-no-saved-transcript">

4553 此会话没有保存的记录4770 此会话没有保存的会话记录

4554</h3>4771</h3>

4555 4772 

4556您附加到一个停止的[后台会话](/docs/zh-CN/agent-view),该会话从另一个对话中用 `←` 或 `/background` 后台化,并在其第一个响应完成之前停止。在该第一个响应完成之前,对话仍然仅存在于后台化它的会话中,因此 `claude attach` 拒绝启动停止的会话,而不是在相同的会话 ID 下开始空白对话。消息以此会话的 `claude respawn` 命令结尾:4773您附加到一个停止的[后台会话](/docs/zh-CN/agent-view),该会话从另一个对话中用 `←` 或 `/background` 后台化,并在其第一个回复完成之前停止。在该第一个回复完成之前,对话仍然仅存在于后台化它的会话中,因此 `claude attach` 拒绝启动停止的会话,而不是在相同的会话 ID 下开始空白对话。消息以此会话的 `claude respawn` 命令结尾:

4557 4774 

4558```text theme={null}4775```text theme={null}

4559This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.4776This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.

4560```4777```

4561 4778 

4562在[代理视图](/docs/zh-CN/agent-view)中打开相同会话的行显示 `Press enter again to restart this session fresh` 在列表下方,在该行上第二次 `Enter` 使用空对话重启会话。在 v2.1.212 之前,打开该行显示拒绝消息,无法从代理视图重启。在 v2.1.211 之前,打开停止的会话无声地启动了该空白对话,并可能重新运行会话的原始提示。4779在 [Agent 视图](/docs/zh-CN/agent-view)中打开相同会话的行会在列表下方显示 `Press enter again to restart this session fresh`,在该行上第二次按 `Enter` 会使用空对话重启会话。在 v2.1.212 之前,打开该行显示拒绝消息,无法从 Agent 视图重启。在 v2.1.211 之前,打开停止的会话会无声地启动该空白对话,并可能重新运行会话的原始提示词。

4563 4780 

4564**要做什么:**4781**要做什么:**

4565 4782 

4566* 您后台化的对话是完整的:使用 [`claude --resume`](/docs/zh-CN/sessions) 恢复它或继续在其中工作4783* 您后台化的对话是完整的:使用 [`claude --resume`](/docs/zh-CN/sessions) 恢复它或继续在其中工作

4567* 要无论如何启动停止的会话,请使用消息中的 ID 运行 `claude respawn <id>`,或在代理视图中的其行上按 `Enter` 两次4784* 要无论如何启动停止的会话,请使用消息中的 ID 运行 `claude respawn <id>`,或在 Agent 视图中的其行上按 `Enter` 两次

4568* 如果会话确实完成了响应,您仍然在 v2.1.214 之前的版本上看到此拒绝,`~/.claude/projects` 中的不可读文件夹可能会使记录扫描错过保存的对话;更新到 v2.1.214 或更高版本,它在扫描期间容忍不可读的文件夹4785* 如果会话确实完成了回复,您仍然在 v2.1.214 之前的版本上看到此拒绝,`~/.claude/projects` 中的不可读文件夹可能会使会话记录扫描错过保存的对话;更新到 v2.1.214 或更高版本,它在扫描期间容忍不可读的文件夹

4569 4786 

4570<h3 id="this-session-is-running-in-another-terminal">4787<h3 id="this-session-is-running-in-another-terminal">

4571 此会话在另一个终端中运行4788 此会话在另一个终端中运行

4572</h3>4789</h3>

4573 4790 

4574您在[代理视图](/docs/zh-CN/agent-view)中打开了停止的会话的行,其保存的对话已在此机器上的另一个实时 Claude Code 进程中打开,因此 Claude Code 拒绝启动将写入相同记录的第二个进程。您看到的消息取决于[什么持有对话](/docs/zh-CN/agent-view#opening-a-session-says-the-conversation-is-already-open):4791您在 [Agent 视图](/docs/zh-CN/agent-view)中打开了停止的会话的行,其保存的对话已在此机器上的另一个实时 Claude Code 进程中打开,因此 Claude Code 拒绝启动将写入相同会话记录的第二个进程。您看到的消息取决于[什么持有对话](/docs/zh-CN/agent-view#opening-a-session-says-the-conversation-is-already-open):

4575 4792 

4576```text theme={null}4793```text theme={null}

4577Can't open — this session is running in another terminal4794Can't open — this session is running in another terminal


4581* **`running in another terminal`**:终端持有对话,例如您使用 `claude --resume` 或 `/resume` 恢复它的终端。该行也显示 `Open in a terminal`。4798* **`running in another terminal`**:终端持有对话,例如您使用 `claude --resume` 或 `/resume` 恢复它的终端。该行也显示 `Open in a terminal`。

4582* **`already open in another running Claude session`**:另一个非交互式 Claude Code 进程持有它,例如相同对话的[后台会话](/docs/zh-CN/agent-view#the-supervisor-process)进程尚未退出。4799* **`already open in another running Claude session`**:另一个非交互式 Claude Code 进程持有它,例如相同对话的[后台会话](/docs/zh-CN/agent-view#the-supervisor-process)进程尚未退出。

4583 4800 

4584Claude Code 保存您在打开行时键入的回复,并在会话下次启动时将其作为会话的下一个提示发送。4801Claude Code 保存您在打开行时键入的回复,并在会话下次启动时将其作为会话的下一个提示词发送。

4585 4802 

4586**要做什么:**4803**要做什么:**

4587 4804 


4593 此会话的保存对话不再在磁盘上4810 此会话的保存对话不再在磁盘上

4594</h3>4811</h3>

4595 4812 

4596您打开了一个[后台会话](/docs/zh-CN/agent-view),该会话在后台服务关闭时结束,[记录清理](/docs/zh-CN/settings-reference#cleanupperioddays)随后删除了其保存的对话,例如在机器关闭数周后。通常打开这样的行会[恢复其保存的对话](/docs/zh-CN/agent-view#sessions-show-as-failed-after-shutdown)。没有什么可恢复的,Claude Code 拒绝而不是在不询问的情况下重新运行会话的原始提示:4813您打开了一个[后台会话](/docs/zh-CN/agent-view),该会话在后台服务关闭时结束,[会话记录清理](/docs/zh-CN/settings-reference#cleanupperioddays)随后删除了其保存的对话,例如在机器关闭数周后。通常打开这样的行会[恢复其保存的对话](/docs/zh-CN/agent-view#sessions-show-as-failed-after-shutdown)。没有什么可恢复的,Claude Code 拒绝而不是在不询问的情况下重新运行会话的原始提示词:

4597 4814 

4598```text theme={null}4815```text theme={null}

4599This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` deletes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.4816This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` deletes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.

4600```4817```

4601 4818 

4602`claude attach <id>` 打印此文本。在代理视图中,页脚更短,以 `ctrl+x deletes the row` 结尾。4819`claude attach <id>` 打印此文本。在 Agent 视图中,页脚更短,以 `ctrl+x deletes the row` 结尾。

4603 4820 

4604**要做什么:**4821**要做什么:**

4605 4822 

4606* 运行 `claude rm <id>` 删除该行。当[保留的情况](/docs/zh-CN/agent-view#what-deleting-a-session-removes)之一适用时,`claude rm` 保留该行和 worktree,并命名原因4823* 运行 `claude rm <id>` 删除该行。当[保留的情况](/docs/zh-CN/agent-view#what-deleting-a-session-removes)之一适用时,`claude rm` 保留该行和 worktree,并命名原因

4607* 要再次运行会话的原始提示作为新对话,请运行 `claude respawn <id>`4824* 要再次运行会话的原始提示词作为新对话,请运行 `claude respawn <id>`

4608 4825 

4609在 v2.1.248 之前,打开这样的行会重新运行会话的原始提示,而不是拒绝,将数周前的任务拉回前景。4826在 v2.1.248 之前,打开这样的行会重新运行会话的原始提示词,而不是拒绝,将数周前的任务拉回前台。

4610 4827 

4611<h3 id="worktree-has-commits-that-are-not-pushed-anywhere">4828<h3 id="worktree-has-commits-that-are-not-pushed-anywhere">

4612 Worktree 有未推送到任何地方的提交4829 Worktree 有未推送到任何地方的提交

4613</h3>4830</h3>

4614 4831 

4615您尝试删除一个[后台会话](/docs/zh-CN/agent-view#what-deleting-a-session-removes),其 worktree 持有 Claude Code 无法确认保存在其他地方的提交。Claude Code 保留 worktree 和会话行,而不是销毁提交。`claude rm` 命名分支和未推送的提交,并说明如何继续:4832您尝试删除一个[后台会话](/docs/zh-CN/agent-view#what-deleting-a-session-removes),其 worktree 持有 Claude Code 无法确认保存在其他地方的提交。Claude Code 保留 worktree 和会话行,而不是在未查看的情况下销毁提交。`claude rm` 命名分支和未推送的提交,并说明如何继续:

4616 4833 

4617```text theme={null}4834```text theme={null}

4618kept 7c5dcf5d — its worktree is still at "/home/you/project/.claude/worktrees/fix-login"4835kept 7c5dcf5d — its worktree is still at “/home/you/project/.claude/worktrees/fix-login”

4619 2 unpushed commits on "claude/fix-login": a1b2c3d "Fix login flow" and 1 more. They exist on no remote, so deleting the worktree would lose them.4836 2 unpushed commits on “claude/fix-login”: a1b2c3d “Fix login flow” and 1 more. They exist on no remote, so deleting the worktree would lose them.

4620 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef4837 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef

4621```4838```

4622 4839 

4623当 Claude Code 无法总结提交时,详细行读取 `The worktree has unpushed commits`。在[代理视图](/docs/zh-CN/agent-view)中,会话的行显示 `not deleted` 和相同的原因。4840当 Claude Code 无法总结提交时,详细行读取 `The worktree has unpushed commits`。在 [Agent 视图](/docs/zh-CN/agent-view)中,会话的行显示 `not deleted` 和相同的原因。

4624 4841 

4625远程上的提交不会阻止删除。本地副本中您的 `origin` 远程的默认分支上的提交也不会,只要该分支在您的主检出中检出,即存储库目录本身而不是 worktree。4842远程上的提交不会阻止删除。本地副本中您的 `origin` 远程的默认分支上的提交也不会,只要该分支在您的主检出中检出,即仓库目录本身而不是 worktree。

4626 4843 

4627**要做什么:**4844**要做什么:**

4628 4845 

4629* 要保留提交,推送 worktree 的分支,或将其合并到在主检出中检出的默认分支,然后再次删除会话4846* 要保留提交,推送 worktree 的分支,或将其合并到在主检出中检出的默认分支,然后再次删除会话

4630* 要丢弃提交,运行消息打印的 `claude rm <id> --discard-unpushed` 命令,或在代理视图中的会话行上再次按 `Ctrl+X`。这会删除会话和 worktree 以及其分支、未推送的提交和任何未提交的更改。如果 worktree 自拒绝以来获得了提交,Claude Code 再次保留它并显示更新的状态4847* 要丢弃提交,运行消息打印的 `claude rm <id> --discard-unpushed` 命令,或在 Agent 视图中的会话行上再次按 `Ctrl+X` 两次。这会删除会话和 worktree 以及其分支、未推送的提交和任何未提交的更改。如果 worktree 自拒绝以来获得了提交,Claude Code 再次保留它并显示更新的状态

4631* 当消息说 worktree 也由另一个完成的会话记录时,再次删除不会丢弃它:推送提交,然后再次删除会话4848* 当消息说 worktree 也由另一个完成的会话记录时,再次删除不会丢弃它:推送提交,然后再次删除会话

4632 4849 

4633在 v2.1.268 之前,`claude rm` 将提交摘要放在 `kept` 行本身上。当 `claude rm` 无法总结提交时,`kept` 行读取 `worktree has commits that are not pushed anywhere` 代替摘要。4850在 v2.1.268 之前,`claude rm` 将提交摘要放在 `kept` 行本身上。当 `claude rm` 无法总结提交时,`kept` 行读取 `worktree has commits that are not pushed anywhere` 代替摘要。


4642 4859 

4643每个[后台会话的](/docs/zh-CN/agent-view)终端在后台服务下的主机进程中运行,该进程在服务仍然持有其连接时死亡,因此无法到达会话。4860每个[后台会话的](/docs/zh-CN/agent-view)终端在后台服务下的主机进程中运行,该进程在服务仍然持有其连接时死亡,因此无法到达会话。

4644 4861 

4645在 Linux 和 WSL 上,后台服务每隔几秒检查每个主机进程,当进程已退出但其与服务的连接从未关闭时标记会话失败,并在[代理视图](/docs/zh-CN/agent-view#read-session-state)中的其行上显示原因:4862在 Linux 和 WSL 上,后台服务每隔几秒检查每个主机进程,当进程已退出但其与服务的连接从未关闭时标记会话失败,并在 [Agent 视图](/docs/zh-CN/agent-view#read-session-state)中的其行上显示原因:

4646 4863 

4647```text theme={null}4864```text theme={null}

4648terminal host process died — press Enter to restart4865terminal host process died — press Enter to restart


4656 4873 

4657对话无论如何都被保存。4874对话无论如何都被保存。

4658 4875 

4659运行[shell 命令](/docs/zh-CN/agent-view#run-a-shell-command)的行显示 `terminal host process died — its output is gone; the command was not run again`,`claude attach` 打印 `This command's terminal host process died — its output is gone and the command was not run again`。Claude Code 从不为您重新运行该命令。4876运行 [shell 命令](/docs/zh-CN/agent-view#run-a-shell-command)的行显示 `terminal host process died — its output is gone; the command was not run again`,`claude attach` 打印 `This command's terminal host process died — its output is gone and the command was not run again`。Claude Code 从不为您重新运行该命令。

4660 4877 

4661**要做什么:**4878**要做什么:**

4662 4879 

4663* 在代理视图中,在失败的行上按 `Enter`;会话在新的主机进程上重启,对话恢复4880* 在 Agent 视图中,在失败的行上按 `Enter`;会话在新的主机进程上重启,对话恢复

4664* 从 shell,再次运行 `claude attach <id>`。Claude Code 打印 `Session <id>'s terminal host died — restarting it on a fresh one…` 并重新打开会话4881* 从 shell,再次运行 `claude attach <id>`。Claude Code 打印 `Session <id>'s terminal host died — restarting it on a fresh one…` 并重新打开会话

4665* 您无法以这种方式重启 shell 命令行;再次分派命令以重新运行它4882* 您无法以这种方式重启 shell 命令行;再次分派命令以重新运行它

4666 4883 


4672 4889 

4673您打开了一个[后台会话](/docs/zh-CN/agent-view),后台服务接受了打开,但大约十秒钟内没有输出到达,因此 Claude Code 得出结论,中继会话终端的进程无法传递输出,并结束尝试而不是等待。4890您打开了一个[后台会话](/docs/zh-CN/agent-view),后台服务接受了打开,但大约十秒钟内没有输出到达,因此 Claude Code 得出结论,中继会话终端的进程无法传递输出,并结束尝试而不是等待。

4674 4891 

4675在代理视图中,Claude Code 在页脚中提供重启:4892在 Agent 视图中,Claude Code 在页脚中提供重启:

4676 4893 

4677```text theme={null}4894```text theme={null}

4678Press enter again to restart this session — it isn't responding (its conversation is saved and resumes).4895Press enter again to restart this session — it isn't responding (its conversation is saved and resumes).


4684Couldn't attach to <id> — Session isn't responding — `claude stop <id>`, then `claude attach <id>` restarts it (the conversation is saved).4901Couldn't attach to <id> — Session isn't responding — `claude stop <id>`, then `claude attach <id>` restarts it (the conversation is saved).

4685```4902```

4686 4903 

4687Claude Code 从不为您重启运行[shell 命令](/docs/zh-CN/agent-view#run-a-shell-command)的行,因为重启会再次运行该命令。4904Claude Code 从不为您重启运行 [shell 命令](/docs/zh-CN/agent-view#run-a-shell-command)的行,因为重启会再次运行该命令。

4688 4905 

4689**要做什么:**4906**要做什么:**

4690 4907 

4691* 在代理视图中,在同一行上再次按 `Enter`。Claude Code 停止无响应的进程并重启会话,对话恢复。没有第二次按下就不会停止任何东西4908* 在 Agent 视图中,在同一行上再次按 `Enter`。Claude Code 停止无响应的进程并重启会话,对话恢复。没有第二次按下就不会停止任何东西

4692* 从 shell,运行 `claude stop <id>`,然后 `claude attach <id>`4909* 从 shell,运行 `claude stop <id>`,然后 `claude attach <id>`

4693* 对于 shell 命令行,在代理视图中按 `Ctrl+X` 或运行 `claude stop <id>` 停止它;再次分派命令以重新运行它4910* 对于 shell 命令行,在 Agent 视图中按 `Ctrl+X` 或运行 `claude stop <id>` 停止它;再次分派命令以重新运行它

4694 4911 

4695<h3 id="session-was-stopped-while-the-respawn-was-in-flight">4912<h3 id="session-was-stopped-while-the-respawn-was-in-flight">

4696 会话在 respawn 进行中时被停止4913 会话在 respawn 进行中时被停止


4702Session <id> was stopped while the respawn was in flight4919Session <id> was stopped while the respawn was in flight

4703```4920```

4704 4921 

4705打开您刚刚分派的会话,当其进程仍在启动时,等待进程。在 v2.1.246 之前,在那一刻打开它可能会停止它并显示此消息。4922打开您刚刚分派的会话,当其进程仍在启动时,会改为等待进程。在 v2.1.246 之前,在那一刻打开它可能会停止它并显示此消息。

4706 4923 

4707**要做什么:**4924**要做什么:**

4708 4925 

4709* 如果您没有停止会话,在代理视图中再次打开其行或运行 `claude respawn <id>` 重启它4926* 如果您没有停止会话,在 Agent 视图中再次打开其行或运行 `claude respawn <id>` 重启它

4710* 如果您自己停止了它,没有什么剩下要做的:会话保持停止4927* 如果您自己停止了它,没有什么剩下要做的:会话保持停止

4711 4928 

4712<h3 id="session-agent-no-longer-available">4929<h3 id="session-agent-no-longer-available">

4713 会话代理不再可用4930 会话 Agent 不再可用

4714</h3>4931</h3>

4715 4932 

4716您恢复了一个正在运行[自定义代理](/docs/zh-CN/sub-agents#invoke-subagents-explicitly)的会话,使用 `--agent` 或 `agent` 设置启动,Claude Code 没有找到具有该名称的代理。它首先搜索会话的原始目录,当您[信任该工作区](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)时,然后搜索您恢复的目录。会话仍然恢复,但使用默认工具,因此代理的工具限制不再适用:4933您恢复了一个正在运行[自定义 Agent](/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 的会话,该会话使用 `--agent` 或 `agent` 设置启动,Claude Code 没有找到具有该名称的 Agent。它首先搜索会话的原始目录(当您已[信任该工作区](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)时),然后搜索您恢复的目录。会话仍然恢复,但使用默认工具,因此 Agent 的工具限制不再适用:

4717 4934 

4718```text theme={null}4935```text theme={null}

4719This session was running agent 'code-reviewer', which is no longer available (no agent by that name in /home/you/project). Continuing with the default tools and system prompt — the agent's tool restrictions no longer apply. To restore it, re-create the agent, or resume with an explicit --agent <name>.4936This session was running agent 'code-reviewer', which is no longer available (no agent by that name in /home/you/project). Continuing with the default tools and system prompt — the agent's tool restrictions no longer apply. To restore it, re-create the agent, or resume with an explicit --agent <name>.

4720```4937```

4721 4938 

4722警告仅命名 Claude Code 搜索的目录,它出现在恢复的对话中,无论您唤醒[后台会话](/docs/zh-CN/agent-view)、运行 `/resume` 或 `claude --resume`,还是在[非交互式模式](/docs/zh-CN/headless)中恢复,它也发送到 stderr。使用 `--input-format stream-json` 的会话不显示它,因为 Agent SDK 在启动后提供代理。4939警告仅命名 Claude Code 搜索的目录,它出现在恢复的对话中,无论您唤醒[后台会话](/docs/zh-CN/agent-view)、运行 `/resume` 或 `claude --resume`,还是在[非交互模式](/docs/zh-CN/headless)中恢复,在非交互模式中它也会发送到 stderr。使用 `--input-format stream-json` 的会话不显示它,因为 Agent SDK 在启动后提供 Agent。

4723 4940 

4724Claude Code 不保存回退到会话,因此警告在每次恢复时重复,直到您采取行动。内置 `claude` 代理不触发警告,因为回退到默认工具集对它没有改变。在 v2.1.216 之前,Claude Code 无声地继续作为默认代理,查找仅覆盖您恢复的目录,因此项目范围的代理在从另一个目录恢复时丢失。4941Claude Code 不会将回退保存到会话,因此警告在每次恢复时重复,直到您采取行动。内置 `claude` Agent 不触发警告,因为回退到默认工具集对它没有改变。在 v2.1.216 之前,Claude Code 无声地继续作为默认 Agent,查找仅覆盖您恢复的目录,因此项目范围的 Agent 在从另一个目录恢复时丢失。

4725 4942 

4726**要做什么:**4943**要做什么:**

4727 4944 

4728* 在会话的项目中的 `.claude/agents/<name>.md` 或个人代理的 `~/.claude/agents/<name>.md` 重新创建代理文件,然后再次恢复4945* 在会话的项目中的 `.claude/agents/<name>.md` 或个人 Agent 的 `~/.claude/agents/<name>.md` 重新创建 Agent 文件,然后再次恢复

4729* 或使用 `--agent <name>` 恢复,命名确实存在的代理,以改为作为该代理运行会话4946* 或使用 `--agent <name>` 恢复,命名确实存在的 Agent,以改为作为该 Agent 运行会话

4730* 如果代理是项目范围的,您还没有信任会话的原始目录,在那里运行一次 Claude Code,接受信任对话,然后再次恢复4947* 如果 Agent 是项目范围的,您还没有信任会话的原始目录,在那里运行一次 Claude Code,接受信任对话框,然后再次恢复

4731 4948 

4732<h3 id="claude_code_process_wrapper-launcher-errors">4949<h3 id="claude_code_process_wrapper-launcher-errors">

4733 CLAUDE\_CODE\_PROCESS\_WRAPPER 启动器错误4950 CLAUDE\_CODE\_PROCESS\_WRAPPER 启动器错误


4739CLAUDE_CODE_PROCESS_WRAPPER: launcher `/opt/corp/launcher` is not an executable regular file4956CLAUDE_CODE_PROCESS_WRAPPER: launcher `/opt/corp/launcher` is not an executable regular file

4740```4957```

4741 4958 

4742启动但在用 Claude Code 替换自己之前退出的启动器会使其启动的会话失败,会话在代理视图中的行报告启动器 `must exec, not daemonize`,后跟启动器打印的任何内容。无法启动或到达后台服务的会话因启动器报告启动器问题作为 `Couldn't reach the background service (...)` 内的原因。4959启动但在用 Claude Code 替换自己之前退出的启动器会使其启动的会话失败,会话在 Agent 视图中的行报告启动器 `must exec, not daemonize`,后跟启动器打印的任何内容。因启动器而无法启动或到达后台服务的会话会将启动器问题作为 `Couldn't reach the background service (...)` 内的原因报告。

4743 4960 

4744**要做什么:**4961**要做什么:**

4745 4962 

4746* 将变量设置为以调用 `exec "$@"` 结尾的可执行文件的绝对路径。有关完整合同,请参阅[启动器合同](/docs/zh-CN/corporate-launcher#the-launcher-contract)4963* 将变量设置为以调用 `exec "$@"` 结尾的可执行文件的绝对路径。有关完整合同,请参阅[启动器合同](/docs/zh-CN/corporate-launcher#the-launcher-contract)

4747* 检查 `/status`,它在其 Self-exec 条目中显示解析的启动命令,并在运行的后台服务不匹配时警告,或从 shell 运行 `claude daemon status`4964* 检查 `/status`,它在其 Self-exec 条目中显示解析的启动命令,并在运行的后台服务不匹配时警告,或从 shell 运行 `claude daemon status`

4748* 在[设置](/docs/zh-CN/corporate-launcher#set-up-the-launcher)的 `env` 块中修复值后,使用 `claude daemon stop --any` 重启后台服务,以便下一次分派启动一个包装的4965* 在[设置](/docs/zh-CN/corporate-launcher#set-up-the-launcher)的 `env` 块中修复值后,使用 `claude daemon stop --any` 重启后台服务,以便下一次分派启动一个包装的后台服务

4749 4966 

4750<h3 id="eunknown-when-starting-a-background-session">4967<h3 id="eunknown-when-starting-a-background-session">

4751 启动后台会话时 EUNKNOWN4968 启动后台会话时 EUNKNOWN


4767 4984 

4768**要做什么:**4985**要做什么:**

4769 4986 

4770* 如果消息读取 `Couldn't start the session`,升级到 v2.1.212 或更高版本。在早期版本上,您也可以在单独的终端中首先运行 `claude daemon run`,然后再次启动后台会话。该命令在终端的前景中运行后台服务,因此服务仅在该终端保持打开时持续。4987* 如果消息读取 `Couldn't start the session`,升级到 v2.1.212 或更高版本。在早期版本上,您也可以在单独的终端中首先运行 `claude daemon run`,然后再次启动后台会话。该命令在终端的前台运行后台服务,因此服务仅在该终端保持打开时持续。

4771* 如果 npm 安装正在替换二进制文件,等待它完成,然后再次启动后台会话4988* 如果 npm 安装正在替换二进制文件,等待它完成,然后再次启动后台会话

4772* 如果错误在 v2.1.212 或更高版本上出现,而没有 npm 安装运行,请要求您的 Windows 管理员在限制策略中允许 Claude Code 可执行文件4989* 如果错误在 v2.1.212 或更高版本上出现,而没有 npm 安装运行,请向您的 Windows 管理员确认是否有限制策略阻止了 Claude Code 可执行文件

4773* 如果关闭终端时后台服务停止,Claude Code 在没有 PowerShell 的情况下启动了它。安装 PowerShell 7,或要求您的管理员解除对 PowerShell 的阻止,以便服务可以超越终端。4990* 如果关闭终端时后台服务停止,Claude Code 在没有 PowerShell 的情况下启动了它。安装 PowerShell 7,或要求您的管理员解除对 PowerShell 的阻止,以便服务可以超越终端。

4774 4991 

4775<h3 id="eacces-when-starting-a-background-session">4992<h3 id="eacces-when-starting-a-background-session">

4776 启动后台会话时 EACCES4993 启动后台会话时 EACCES

4777</h3>4994</h3>

4778 4995 

4779Claude Code 无法运行其自己的二进制文件来启动[后台服务](/docs/zh-CN/agent-view#the-supervisor-process),该服务托管后台会话。在 npm 安装上,这通常意味着 `npm install -g @anthropic-ai/claude-code` 在那一刻替换二进制文件,无论您运行它还是[自动更新程序](/docs/zh-CN/setup#auto-updates)运行。当您从[代理视图](/docs/zh-CN/agent-view)打开会话时,错误出现:4996Claude Code 无法运行其自己的二进制文件来启动[后台服务](/docs/zh-CN/agent-view#the-supervisor-process),该服务托管后台会话。在 npm 安装上,这通常意味着 `npm install -g @anthropic-ai/claude-code` 在那一刻替换二进制文件,无论您运行它还是[自动更新程序](/docs/zh-CN/setup#auto-updates)运行。当您从 [Agent 视图](/docs/zh-CN/agent-view)打开会话时,错误出现:

4780 4997 

4781```text theme={null}4998```text theme={null}

4782Couldn't start the background service — spawn background service: EACCES: permission denied, posix_spawn '/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude'4999Couldn't start the background service — spawn background service: EACCES: permission denied, posix_spawn '/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude'


4795**要做什么:**5012**要做什么:**

4796 5013 

4797* 等待几秒钟,然后打开会话或再次分派。当消息说 Claude Code 正在更新时,在更新完成后重试。5014* 等待几秒钟,然后打开会话或再次分派。当消息说 Claude Code 正在更新时,在更新完成后重试。

4798* 如果错误在没有 npm 安装运行时持续,您的用户无法运行已安装的二进制文件。检查其权限及其目录的,或重新安装 Claude Code。5015* 如果错误在没有 npm 安装运行时持续,您的用户无法运行已安装的二进制文件。检查其权限及其目录的权限,或重新安装 Claude Code。

4799 5016 

4800<h3 id="background-service-exited-before-it-became-reachable">5017<h3 id="background-service-exited-before-it-became-reachable">

4801 后台服务在变得可达之前退出5018 后台服务在变得可达之前退出

4802</h3>5019</h3>

4803 5020 

4804Claude Code 启动的进程作为[后台服务](/docs/zh-CN/agent-view#the-supervisor-process)在变得可达之前退出,因此 Claude Code 无法打开您的会话。当服务在退出前打印错误时,括号中的原因给出退出代码或信号以及服务打印的第一行,它命名停止它的内容:5021Claude Code 作为[后台服务](/docs/zh-CN/agent-view#the-supervisor-process)启动的进程在接受连接之前退出,因此 Claude Code 无法打开您的会话。当服务在退出前打印错误时,括号中的原因给出退出码或信号以及服务打印的第一行,它命名停止它的内容:

4805 5022 

4806```text theme={null}5023```text theme={null}

4807Couldn't reach the background service (background service exited before it became reachable (exit code N): <the service's first error line>) — run 'claude daemon status'5024Couldn't reach the background service (background service exited before it became reachable (exit code N): <the service's first error line>) — run 'claude daemon status'

4808```5025```

4809 5026 

4810当您从[代理视图](/docs/zh-CN/agent-view)打开会话时,相同的原因跟随 `Couldn't start the background service —`。当服务在退出前没有打印任何内容时,消息说 `nothing on stderr`。5027当您从 [Agent 视图](/docs/zh-CN/agent-view)打开会话时,相同的原因跟随 `Couldn't start the background service —`。当服务在退出前没有打印任何内容时,消息说 `nothing on stderr`。

4811 5028 

4812Claude Code 使用服务的错误行报告失败。在 v2.1.246 之前,失败仅在 45 秒等待后显示,作为 `background service did not become reachable within 45s`,没有服务的错误行。5029Claude Code 使用服务的错误行报告失败。在 v2.1.246 之前,失败仅在 45 秒等待后显示,作为 `background service did not become reachable within 45s`,没有服务的错误行。

4813 5030 

4814两个引用的原因有已知的原因:5031两个引用的原因有已知的成因:

4815 5032 

4816* `Error: claude native binary not installed.`:npm 安装在那一刻替换 Claude Code 二进制文件,因此服务运行了 npm 的占位符。在安装完成后重试;如果没有安装运行的行持续,[完成 npm 安装](/docs/zh-CN/troubleshoot-install#native-binary-not-found-after-npm-install)。在 v2.1.257 之前,macOS npm 自更新在安装窗口期间的每次启动时产生此失败。5033* `Error: claude native binary not installed.`:npm 安装在那一刻替换 Claude Code 二进制文件,因此服务运行了 npm 的占位符。在安装完成后重试;如果在没有安装运行时该行持续出现,[完成 npm 安装](/docs/zh-CN/troubleshoot-install#native-binary-not-found-after-npm-install)。在 v2.1.257 之前,macOS npm 自更新在安装窗口期间的每次启动时产生此失败。

4817* 在 Windows 上,`nothing on stderr` 和退出代码 1,每次启动:`daemon.lock` 命名一个 Claude Code 既无法发信号也无法证明已消失的进程,因此每个新服务得出结论另一个持有锁并退出。Claude Code 可以证明其编写者已消失的锁会自动替换,不会产生此失败。当失败在每次启动时重复时,删除 `~/.claude/daemon.lock`,然后打开会话或再次分派。在 v2.1.257 之前,这样的锁阻止了每次启动,直到您删除了文件。5034* 在 Windows 上,`nothing on stderr` 和退出码 1,每次启动:`daemon.lock` 命名一个 Claude Code 既无法发信号也无法证明已消失的进程,因此每个新服务得出结论另一个持有锁并退出。Claude Code 可以证明其编写者已消失的锁会自动替换,不会产生此失败。当失败在每次启动时重复时,删除 `~/.claude/daemon.lock`,然后打开会话或再次分派。在 v2.1.257 之前,这样的锁阻止了每次启动,直到您删除了文件。

4818 5035 

4819**要做什么:**5036**要做什么:**

4820 5037 


4825 启动后台会话时工作目录不再存在5042 启动后台会话时工作目录不再存在

4826</h3>5043</h3>

4827 5044 

4828您尝试在不再存在的目录中启动[后台会话](/docs/zh-CN/agent-view)。Claude Code 不启动会话,消息命名缺失的目录:5045您启动[后台会话](/docs/zh-CN/agent-view)所在的目录在会话启动期间被删除。Claude Code 不启动会话,消息命名缺失的目录:

4829 5046 

4830```text theme={null}5047```text theme={null}

4831Couldn't start a background session (working directory no longer exists or is not accessible: /tmp/demo)5048Couldn't start a background session (working directory no longer exists or is not accessible: /tmp/demo)

4832```5049```

4833 5050 

4834在 v2.1.257 之前,会话似乎启动,然后在代理视图中显示为具有相同原因的失败行。5051在 v2.1.257 之前,会话似乎启动,然后在 Agent 视图中显示为具有相同原因的失败行。

4835 5052 

4836在 v2.1.281 之前,当您启动会话之前目录已经消失时,此消息也出现。该情况报告[`could not be resolved on disk`](#workspace-not-trusted-when-dispatching-a-background-session)。5053在 v2.1.281 之前,当您启动会话之前目录已经消失时,此消息也出现。该情况报告 [`could not be resolved on disk`](#workspace-not-trusted-when-dispatching-a-background-session)。

4837 5054 

4838**要做什么:**5055**要做什么:**

4839 5056 


4843 分派后台会话时工作区不受信任5060 分派后台会话时工作区不受信任

4844</h3>5061</h3>

4845 5062 

4846您在未[信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)的目录中启动或重启[后台会话](/docs/zh-CN/agent-view),工作区信任对话无法出现以询问您。Claude Code 不启动会话:5063您在未[信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)的目录中启动或重启[后台会话](/docs/zh-CN/agent-view),工作区信任对话框无法出现以询问您。Claude Code 不启动会话:

4847 5064 

4848```text theme={null}5065```text theme={null}

4849Workspace not trusted. Run `claude` in /path/to/project once and accept the trust prompt, then retry.5066Workspace not trusted. Run `claude` in /path/to/project once and accept the trust prompt, then retry.

4850```5067```

4851 5068 

4852从会话自己的目录中的终端,相同的命令显示信任对话,并在您接受后启动会话。此消息出现在无法显示对话的地方,例如在脚本中,或当您从不同于其自己的目录重启会话时。5069从会话自己的目录中的终端,相同的命令会改为显示信任对话框,并在您接受后启动会话。此消息出现在无法显示对话框的地方,例如在脚本中,或当您从不同于其自己的目录重启会话时。

4853 5070 

4854两个变体命名不同的原因:5071两个变体命名不同的原因:

4855 5072 

4856* **`The home directory is trusted one session at a time`**:会话的目录是您的主目录。Claude Code 从不保存主目录的信任,因此在早期会话中接受那里的对话不计数。5073* **`The home directory is trusted one session at a time`**:会话的目录是您的主目录。Claude Code 从不保存主目录的信任,因此在早期会话中在那里接受对话框不计数。

4857* **`<path> could not be resolved on disk`**:Claude Code 无法在磁盘上找到会话的目录。5074* **`<path> could not be resolved on disk`**:Claude Code 无法在磁盘上找到会话的目录。

4858 5075 

5076在 v2.1.286 之前,在 Windows 上,如果某个您已信任的目录的信任记录是以不同字母大小写的路径保存的,此消息也可能在该目录中出现。请更新到 v2.1.286 或更高版本。

5077 

4859**要做什么:**5078**要做什么:**

4860 5079 

4861* 在消息命名的目录中运行 `claude` 并接受信任对话,然后再次运行该命令5080* 在消息命名的目录中运行 `claude` 并接受信任对话框,然后再次运行该命令

4862* 对于主目录消息,从您的主目录中的终端运行该命令,以便对话可以出现,或改为从项目目录启动会话5081* 对于主目录消息,从您的主目录中的终端运行该命令,以便对话框可以出现,或改为从项目目录启动会话

4863* 对于 `could not be resolved on disk` 消息,重新创建目录,或从存在的目录启动新会话5082* 对于 `could not be resolved on disk` 消息,重新创建目录,或从存在的目录启动新会话

4864 5083 

4865<h2 id="wrapper-and-ide-errors">5084<h2 id="wrapper-and-ide-errors">


5067在 v2.1.236 之前,Claude Code 在此类错误后退出而不打印消息。5286在 v2.1.236 之前,Claude Code 在此类错误后退出而不打印消息。

5068 5287 

5069<h3 id="agent-descriptions-are-over-the-15000-token-limit">5288<h3 id="agent-descriptions-are-over-the-15000-token-limit">

5070 代理描述超过 15.0k 令牌限制5289 Agent 描述超过 15.0k token 限制

5071</h3>5290</h3>

5072 5291 

5073Claude Code 将此警告显示为对话视图中的启动通知,而不是在 stderr 上。您的[子代理](/docs/zh-CN/sub-agents)(除了内置代理)的组合描述超过 Claude Code 估计的 15,000 个令牌。每个代理计算其名称加上其 `description` frontmatter。Claude Code 加载每个代理,无论总数是否超过限制,因此警告不会改变加载的内容。5292Claude Code 将此警告显示为对话视图中的启动通知,而不是在 stderr 上。您的[子代理](/docs/zh-CN/sub-agents)(内置子代理除外)的组合描述超过 Claude Code 估计的 15,000 个 token。每个 Agent 计算其名称加上其 `description` frontmatter。Claude Code 加载每个 Agent,无论总数是否超过限制,因此警告不会改变加载的内容。

5074 5293 

5075```text theme={null}5294```text theme={null}

5076Agent descriptions are over the 15.0k-token limit (~16.2k tokens) · ask Claude to trim agent descriptions in .claude/agents/5295Agent descriptions are over the 15.0k-token limit (~16.2k tokens) · ask Claude to trim agent descriptions in .claude/agents/


5078 5297 

5079**要做什么:**5298**要做什么:**

5080 5299 

5081* 缩短您的代理文件的 `description` frontmatter,或要求 Claude 为您修剪它们。5300* 缩短您的 Agent 文件的 `description` frontmatter,或要求 Claude 为您修剪它们。

5082* 删除您不再使用的代理文件。5301* 删除您不再使用的 Agent 文件。

5083 5302 

5084<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">5303<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">

5085 技能、命令或工作流未被加载,因为其名称是保留的5304 skill、命令或工作流未被加载,因为其名称是保留的

5086</h3>5305</h3>

5087 5306 

5088技能文件夹、frontmatter `name`、`.claude/commands/` 中的文件或子文件夹,或[保存的工作流](/docs/zh-CN/workflows#save-the-workflow-for-reuse)使用名称 `anthropic-skills` 或以 `anthropic-skills:` 开头的名称。Claude Code [为从 claude.ai 同步的技能保留该名称](/docs/zh-CN/skills#names-reserved-for-synced-skills),不加载该项。5307skill 文件夹、frontmatter `name`、`.claude/commands/` 中的文件或子文件夹,或[保存的工作流](/docs/zh-CN/workflows#save-the-workflow-for-reuse)使用名称 `anthropic-skills` 或以 `anthropic-skills:` 开头的名称。Claude Code [为从 claude.ai 同步的 skill 保留该名称](/docs/zh-CN/skills#names-reserved-for-synced-skills),不加载该项。

5089 5308 

5090Claude Code 将此警告显示为对话视图中的启动通知,而不是在 stderr 上:5309Claude Code 将此警告显示为对话视图中的启动通知,而不是在 stderr 上:

5091 5310 


5093Not loaded: rename .claude/skills/anthropic-skills, then restart — its name uses "anthropic-skills", a name reserved for the skills synced from your claude.ai account5312Not loaded: rename .claude/skills/anthropic-skills, then restart — its name uses "anthropic-skills", a name reserved for the skills synced from your claude.ai account

5094```5313```

5095 5314 

5096通知命名它拒绝的第一项:要重命名的文件夹或文件、要编辑的 `name:` 行,或要重命名的工作流。当拒绝多个项时,通知以计数结尾,例如 `· 2 more`,[调试日志](/docs/zh-CN/debug-your-config)命名每一个。5315通知命名它拒绝的第一项需要更改的内容:要重命名的文件夹或文件、要编辑的 `name:` 行,或要重命名的工作流。当拒绝多个项时,通知以计数结尾,例如 `· 2 more`,[调试日志](/docs/zh-CN/debug-your-config)命名每一个。

5097 5316 

5098**要做什么:**5317**要做什么:**

5099 5318 

5100* 重命名通知命名的项,或编辑它指向的 `name:` 行,然后重启会话。5319* 重命名通知命名的项,或编辑它指向的 `name:` 行,然后重启会话。

5101 5320 

5102在 v2.1.282 之前,Claude Code 加载具有这些名称的技能和命令。5321在 v2.1.282 之前,Claude Code 加载具有这些名称的 skill 和命令。

5103 5322 

5104<h3 id="workspace-has-not-been-trusted">5323<h3 id="workspace-has-not-been-trusted">

5105 工作区尚未被信任5324 工作区尚未被信任


5115 5334 

5116* 在目录中运行 `claude` 并接受信任对话框。[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)说明该接受涵盖的文件夹。5335* 在目录中运行 `claude` 并接受信任对话框。[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)说明该接受涵盖的文件夹。

5117* 在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 不显示对话框。使用消息打印的确切 `projects` 键在 `~/.claude.json` 中设置 `hasTrustDialogAccepted` 条目。5336* 在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 不显示对话框。使用消息打印的确切 `projects` 键在 `~/.claude.json` 中设置 `hasTrustDialogAccepted` 条目。

5118* 如果消息命名 `.claude/settings.local.json` 并且您在 git 存储库外或主目录中启动了 Claude Code,请更新到 v2.1.200 或更高版本。版本 2.1.196 至 2.1.199 在这些工作区中将您自己的 `.claude/settings.local.json` 视为存储库提供的。在 v2.1.207 及更高版本上,如果您尚未信任该文件夹,在 git 存储库外更新是不够的:确定文件夹不在存储库内会运行 git,Claude Code 仅在您接受信任对话框后才运行该检查,因此请使用第一步。您的主目录和任何其他[配置主目录](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)是豁免的,不等待对话框。请参阅[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)。5337* 如果消息命名 `.claude/settings.local.json` 并且您在 git 仓库外或主目录中启动了 Claude Code,请更新到 v2.1.200 或更高版本。版本 2.1.196 至 2.1.199 在这些工作区中将您自己的 `.claude/settings.local.json` 视为仓库提供的。在 v2.1.207 及更高版本上,如果您尚未信任该文件夹,在 git 仓库外仅更新是不够的:确定文件夹不在仓库内会运行 git,Claude Code 仅在您接受信任对话框后才运行该检查,因此请使用第一步。您的主目录和任何其他[配置主目录](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)是豁免的,不等待对话框。请参阅[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)。

5119 5338 

5120<h3 id="working-directory-is-a-network-path">5339<h3 id="working-directory-is-a-network-path">

5121 工作目录是网络路径5340 工作目录是网络路径

5122</h3>5341</h3>

5123 5342 

5124Claude Code 不将网络路径添加为工作目录。查找网络路径可以联系它命名的主机,在 Windows 上该联系可以向主机发送您的凭据,因此 Claude Code 拒绝该路径而不查找它。当您使用此类路径运行 `/add-dir` 时,或作为启动时的警告,您会看到此消息。当它在启动时出现时,Claude Code 启动时不包含该目录。5343Claude Code 不将网络路径添加为工作目录。查找网络路径可能会联系它命名的主机,在 Windows 上该联系可能会向主机发送您的凭据,因此 Claude Code 拒绝该路径而不查找它。当您使用此类路径运行 `/add-dir` 时,或作为启动时的警告,您会看到此消息。当它在启动时出现时,Claude Code 启动时不包含该目录。

5125 5344 

5126```text theme={null}5345```text theme={null}

5127\\server\share is a network path, which cannot be added as a working directory. On Windows, map the share to a drive letter and pass it at launch with --add-dir (a drive letter added mid-session does not yet carry remote-read trust).5346\\server\share is a network path, which cannot be added as a working directory. On Windows, map the share to a drive letter and pass it at launch with --add-dir (a drive letter added mid-session does not yet carry remote-read trust).


5131 5350 

5132* UNC 共享,例如 `\\server\share`5351* UNC 共享,例如 `\\server\share`

5133* 自动挂载路径,例如 `/net/<host>`,除非您从该主机的自动挂载下的目录启动了 Claude Code5352* 自动挂载路径,例如 `/net/<host>`,除非您从该主机的自动挂载下的目录启动了 Claude Code

5134* 通过符号链接或连接到达网络位置的本地路径5353* 通过符号链接或连接点到达网络位置的本地路径

5135 5354 

5136映射的驱动器号和 `\\wsl$` 路径不计为网络路径。5355映射的驱动器号和 `\\wsl$` 路径不计为网络路径。

5137 5356 


5149 5368 

5150您的会话符合[服务器托管设置](/docs/zh-CN/server-managed-settings)的条件,但 Claude Code 无法获取它们或无法应用服务器返回的内容,因此在交互式会话中显示此警告。5369您的会话符合[服务器托管设置](/docs/zh-CN/server-managed-settings)的条件,但 Claude Code 无法获取它们或无法应用服务器返回的内容,因此在交互式会话中显示此警告。

5151 5370 

5152括号中的原因命名失败的内容,例如 `network error`、`request timed out` 或 `authentication rejected (401)`。原因 `no setting in the server response could be applied as written` 意味着服务器已应答,但它返回的设置都没有通过[验证](/docs/zh-CN/server-managed-settings#invalid-entries-in-delivered-settings)。在 v2.1.282 之前,此原因读取 `server returned invalid settings`。5371括号中的原因命名失败的内容,例如 `network error`、`request timed out` 或 `authentication rejected (401)`。原因 `no setting in the server response could be applied as written` 意味着服务器已应答,但它返回的设置都没有通过[验证](/docs/zh-CN/server-managed-settings#invalid-entries-in-delivered-settings)。在 v2.1.282 之前,此原因显示为 `server returned invalid settings`。

5153 5372 

5154该行的其余部分说明会话运行的策略:5373该行的其余部分说明会话运行的策略:

5155 5374 

5156* **从较早的成功获取缓存的设置**:Claude Code 在该缓存策略上运行会话,除了[扣留的环境变量](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior),行读取 `using cached policy`。5375* **从较早的成功获取缓存的设置**:Claude Code 在该缓存策略上运行会话,但[扣留的环境变量](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)除外,该行显示 `using cached policy`。

5157* **无缓存**:Claude Code 在没有服务器托管设置的情况下运行会话,行读取 `no remote policy applied`。5376* **无缓存**:Claude Code 在没有服务器托管设置的情况下运行会话,该行显示 `no remote policy applied`。

5158 5377 

5159**要做什么:**5378**要做什么:**

5160 5379 


5176 5395 

5177**要做什么:**5396**要做什么:**

5178 5397 

5179* 再次启动 Claude Code 并批准对话框以在您的组织设置下继续。拒绝的对话框不被记住,因此在下一次启动时再次出现。5398* 再次启动 Claude Code 并批准对话框以在您的组织设置下继续。拒绝的对话框不会被记住,因此在下一次启动时会再次出现。

5180* 如果您对对话框列出的设置不确定,请在批准前询问维护您的组织托管设置的人5399* 如果您对对话框列出的设置不确定,请在批准前询问维护您的组织托管设置的人

5181 5400 

5182<h3 id="managed-settings-block-the-default-model">5401<h3 id="managed-settings-block-the-default-model">

5183 托管设置阻止默认模型5402 托管设置阻止默认模型

5184</h3>5403</h3>

5185 5404 

5186您的组织的[托管设置](/docs/zh-CN/managed-settings)阻止默认选项解析到的模型以及它可以降级到的每个模型。将在默认选项上启动的会话在启动时退出,而不是运行被阻止的模型。您看到的消息取决于阻止它的设置。当 [`deniedModels`](/docs/zh-CN/model-config#block-specific-models-or-versions) 列表阻止它时,消息读取:5405您的组织的[托管设置](/docs/zh-CN/managed-settings)阻止默认选项解析到的模型以及它可以降级到的每个模型。将在默认选项上启动的会话在启动时退出,而不是运行被阻止的模型。您看到的消息取决于阻止它的设置。当 [`deniedModels`](/docs/zh-CN/model-config#block-specific-models-or-versions) 列表阻止它时,消息显示为:

5187 5406 

5188```text theme={null}5407```text theme={null}

5189Claude Code can't start: your organization's managed settings block the default model (claude-opus-5-5) in "deniedModels", and none of the models they allow can be used as the default instead. Ask your administrator to update "deniedModels" or "availableModels".5408Claude Code can't start: your organization's managed settings block the default model (claude-opus-5-5) in "deniedModels", and none of the models they allow can be used as the default instead. Ask your administrator to update "deniedModels" or "availableModels".

5190```5409```

5191 5410 

5192当 `availableModels` 列表与 [`availableModelsMatch`](/docs/zh-CN/settings-reference#availablemodelsmatch) 设置为 `"exact"` 省略它时,消息读取:5411当 [`availableModelsMatch`](/docs/zh-CN/settings-reference#availablemodelsmatch) 设置为 `"exact"` 的 `availableModels` 列表省略它时,消息显示为:

5193 5412 

5194```text theme={null}5413```text theme={null}

5195Claude Code can't start: your organization allows only the models listed in "availableModels", and none of them can be used as the default model (claude-opus-5-5 isn't listed). Ask your administrator to update "availableModels".5414Claude Code can't start: your organization allows only the models listed in "availableModels", and none of them can be used as the default model (claude-opus-5-5 isn't listed). Ask your administrator to update "availableModels".


5197 5416 

5198**要做什么:**5417**要做什么:**

5199 5418 

5200* 如果您管理设置,请将您的用户可以运行的模型添加到 `availableModels`,或缩小阻止每个回退的 `deniedModels` 条目。[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)描述默认选项如何降级5419* 如果您管理设置,请将您的用户可以运行的模型添加到 `availableModels`,或缩小阻止每个备用模型的 `deniedModels` 条目。[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)描述默认选项如何降级

5201* 如果您不管理它们,请将消息发送给您的管理员。您自己的设置文件无法扩大托管的 `availableModels` 或 `deniedModels` 列表5420* 如果您不管理它们,请将消息发送给您的管理员。您自己的设置文件无法扩大托管的 `availableModels` 或 `deniedModels` 列表

5202 5421 

5203<h3 id="managed-settings-dont-allow-this-api-provider">5422<h3 id="managed-settings-dont-allow-this-api-provider">

5204 托管设置不允许此 API 提供商5423 托管设置不允许此 API 提供商

5205</h3>5424</h3>

5206 5425 

5207您的组织的[托管设置](/docs/zh-CN/managed-settings)设置了 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 列表,会话的 API 提供商不在其上,或会话使用的端点不是按该条目要求的方式固定的。Claude Code 在启动前、登录前或会话下次联系 API 时拒绝。消息以允许的提供商开头:5426您的组织的[托管设置](/docs/zh-CN/managed-settings)设置了 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 列表,会话的 API 提供商不在其上,或会话使用的端点不是按该条目要求的方式固定的。Claude Code 在启动时、登录前或会话下次联系 API 时拒绝。消息以允许的提供商开头:

5208 5427 

5209```text theme={null}5428```text theme={null}

5210Your organization's managed settings allow Claude Code to use: Anthropic API, Amazon Bedrock.5429Your organization's managed settings allow Claude Code to use: Anthropic API, Amazon Bedrock.

5211```5430```

5212 5431 

5213当列表为空时,消息改为读取:5432当列表为空时,消息改为显示:

5214 5433 

5215```text theme={null}5434```text theme={null}

5216Your organization's managed settings allow Claude Code to use no API provider at all (allowedProviders is an empty list), so it cannot start on this machine.5435Your organization's managed settings allow Claude Code to use no API provider at all (allowedProviders is an empty list), so it cannot start on this machine.

5217```5436```

5218 5437 

5219当每个条目都无法识别时,括号读取 `(allowedProviders lists only unrecognized entries)` 代替。5438当每个条目都无法识别时,括号内容改为 `(allowedProviders lists only unrecognized entries)`。

5220 5439 

5221**要做什么:**5440**要做什么:**

5222 5441 

5223* 按照消息的 `To continue:` 步骤进行5442* 按照消息的 `To continue:` 步骤进行

5224* 如果您管理设置,消息的以 `Admins:` 开头的行命名要添加的条目或要固定的值,[`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 条目说明哪个源的 `env` 块可以固定它5443* 如果您管理设置,消息中以 `Admins:` 开头的行命名要添加的条目或要固定的值,[`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 条目说明哪个源的 `env` 块可以固定它

5225 5444 

5226<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">5445<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">

5227 MCP 服务器被企业托管策略阻止5446 MCP 服务器被企业托管策略阻止

5228</h3>5447</h3>

5229 5448 

5230您在 `/mcp` 中的服务器上选择了**重新连接**,或在那里重新打开了禁用的服务器,[限制 MCP 服务器](/docs/zh-CN/managed-mcp)的设置阻止了该服务器。Claude Code 拒绝连接它并显示:5449您在 `/mcp` 中的服务器上选择了**重新连接**,或在那里重新打开了禁用的服务器,而[限制 MCP 服务器](/docs/zh-CN/managed-mcp)的设置阻止了该服务器。Claude Code 拒绝连接它并显示:

5231 5450 

5232```text theme={null}5451```text theme={null}

5233MCP server <name> is blocked by enterprise managed policy5452MCP server <name> is blocked by enterprise managed policy

5234```5453```

5235 5454 

5236这些设置中的任何一个都可以产生消息:5455这些设置中的任何一个都可以产生该消息:

5237 5456 

5238* 与服务器匹配的 [`deniedMcpServers`](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 条目,包括您自己的 `~/.claude/settings.json` 或项目的 `.claude/settings.json` 中的条目5457* 与服务器匹配的 [`deniedMcpServers`](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 条目,包括您自己的 `~/.claude/settings.json` 或项目的 `.claude/settings.json` 中的条目

5239* 服务器不匹配的 [`allowedMcpServers`](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 列表5458* 服务器不匹配的 [`allowedMcpServers`](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 列表

5240* [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization) 与 `mcp` 锁定,这阻止在 `~/.claude.json` 和 `.mcp.json` 中配置的服务器5459* 锁定了 `mcp` 的 [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization),这会阻止在 `~/.claude.json` 和 `.mcp.json` 中配置的服务器

5241* [`disableClaudeAiConnectors`](/docs/zh-CN/mcp#disable-claude-ai-connectors),当服务器是 claude.ai 连接器时5460* [`disableClaudeAiConnectors`](/docs/zh-CN/mcp#disable-claude-ai-connectors),当服务器是 claude.ai 连接器时

5242 5461 

5243**要做什么:**5462**要做什么:**

5244 5463 

5245* 检查您自己的用户和项目设置文件中的这些设置之一,并更改或删除它5464* 检查您自己的用户和项目设置文件中是否有这些设置之一,并更改或删除它

5246* 如果您自己的设置都不能解释该阻止,请询问您的管理员哪个托管设置阻止了服务器5465* 如果您自己的设置都不能解释该阻止,请询问您的管理员哪个托管设置阻止了服务器

5247 5466 

5248在 v2.1.257 之前,`/mcp` 中的**重新连接**和重新启用可以连接中途策略更新阻止的服务器。5467在 v2.1.257 之前,`/mcp` 中的**重新连接**和重新启用可以连接被会话中途策略更新阻止的服务器。

5249 5468 

5250<h3 id="managed-settings-document-could-not-be-parsed">5469<h3 id="managed-settings-document-could-not-be-parsed">

5251 托管设置文档无法解析5470 托管设置文档无法解析

5252</h3>5471</h3>

5253 5472 

5254您的组织部署[托管设置](/docs/zh-CN/managed-settings),其中一个部署的文档存在但无法解析为 JSON 对象,因此 Claude Code 在启动时以代码 1 退出,而不是在没有文档携带的策略的情况下运行。该行在消息前命名失败的源:5473您的组织部署了[托管设置](/docs/zh-CN/managed-settings),其中一个部署的文档存在但无法解析为 JSON 对象,因此 Claude Code 在启动时以退出码 1 退出,而不是在没有该文档所携带策略的情况下运行。该行在消息前命名失败的源:

5255 5474 

5256```text theme={null}5475```text theme={null}

5257/Library/Application Support/ClaudeCode/managed-settings.json: Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.5476/Library/Application Support/ClaudeCode/managed-settings.json: Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.


5260源是以下之一:5479源是以下之一:

5261 5480 

5262* `managed-settings.json` 文件的路径或 `managed-settings.d` 下的放入文件5481* `managed-settings.json` 文件的路径或 `managed-settings.d` 下的放入文件

5263* macOS 托管首选项配置文件、`per-user managed preferences` 或 `device-level managed preferences`5482* macOS 托管首选项配置文件,`per-user managed preferences` 或 `device-level managed preferences`

5264* Windows 注册表值、`Registry: HKLM\SOFTWARE\Policies\ClaudeCode\Settings`5483* Windows 注册表值,`Registry: HKLM\SOFTWARE\Policies\ClaudeCode\Settings`

5265 5484 

5266[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)列出了使每个源无法解析的原因。5485[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)列出了使每个源无法解析的原因。

5267 5486 

5268Claude Code 拒绝启动,即使另一个管理员源提供有效策略。您在交互式会话、`claude -p`、Agent SDK 会话、[后台会话](/docs/zh-CN/agent-view)和大多数子命令(包括 `claude doctor`)中看到此错误。拒绝故意失败关闭:Claude Code 无法解析的文档中的设置无法被强制执行,启动时不运行会话会在没有组织控制的情况下运行。5487即使另一个管理员源提供了有效策略,Claude Code 也会拒绝启动。您在交互式会话、`claude -p`、Agent SDK 会话、[后台会话](/docs/zh-CN/agent-view)和大多数子命令(包括 `claude doctor`)中都会看到此错误。该拒绝有意采用失败关闭:Claude Code 无法解析的文档中的设置无法被强制执行,强行启动会在没有组织控制的情况下运行会话。

5269 5488 

5270可解析文档中的架构问题不会产生此错误。[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)涵盖 Claude Code 对其所做的操作。5489可解析文档中的 schema 问题不会产生此错误。[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)涵盖 Claude Code 对此类问题的处理方式。

5271 5490 

5272当 `managed-settings.d/` 目录存在但无法列出时,Claude Code 报告 `Managed settings drop-in directory could not be read:` 后跟基础错误。[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)涵盖读取失败在启动时退出的时间。5491当 `managed-settings.d/` 目录存在但无法列出时,Claude Code 改为报告 `Managed settings drop-in directory could not be read:`,后跟底层错误。[查找 Claude Code 删除的条目](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)涵盖读取失败何时会在启动时退出。

5273 5492 

5274**要做什么:**5493**要做什么:**

5275 5494 

5276* 如果您管理计算机,修复命名的文档使其解析为 JSON 对象,或删除文件、配置文件或注册表值。空的 `managed-settings.json` 计为 `{}` 并不阻止启动。5495* 如果您管理计算机,请修复命名的文档使其解析为 JSON 对象,或删除文件、配置文件或注册表值。空的 `managed-settings.json` 计为 `{}`,不会阻止启动。

5277* 如果您不管理,请要求您的管理员修复部署的文档。您自己的设置文件中的任何内容都不会导致或清除此错误。5496* 如果您不管理,请要求您的管理员修复部署的文档。您自己的设置文件中的任何内容都不会导致或清除此错误。

5278 5497 

5279<h3 id="unable-to-read-managed-policy-settings">5498<h3 id="unable-to-read-managed-policy-settings">

5280 无法读取托管策略设置5499 无法读取托管策略设置

5281</h3>5500</h3>

5282 5501 

5283您的组织部署[托管设置](/docs/zh-CN/managed-settings),其中一个部署的源存在但无法读取,原因例如 I/O 错误而不是操作系统拒绝读取。没有其他管理员源提供策略,Claude Code 在启动时退出,而不是在没有源可能携带的策略的情况下运行:5502您的组织部署了[托管设置](/docs/zh-CN/managed-settings),其中一个部署的源存在但无法读取,原因例如 I/O 错误,而不是操作系统拒绝读取。在没有其他管理员源提供策略的情况下,Claude Code 在启动时退出,而不是在没有该源可能携带的策略的情况下运行:

5284 5503 

5285```text theme={null}5504```text theme={null}

5286Unable to read managed policy settings.5505Unable to read managed policy settings.


5290Detail: <source>: <reason>5509Detail: <source>: <reason>

5291```5510```

5292 5511 

5293在相同的状态下,登录流、来自已运行的会话的 API 请求和 [`claude gateway`](/docs/zh-CN/claude-apps-gateway) 服务器被拒绝,其中第一行的变体命名 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders)。5512在相同的状态下,登录流程、来自已运行会话的 API 请求和 [`claude gateway`](/docs/zh-CN/claude-apps-gateway) 服务器会被拒绝,并显示第一行的一个变体,其中命名 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders)。

5294 5513 

5295操作系统拒绝的读取,例如在仅限 root 的文件上,不会产生此退出:[会话启动时不使用该源的策略](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)。对于无法解析的源,Claude Code 以[不同的消息命名源](#managed-settings-document-could-not-be-parsed)退出。5514操作系统拒绝的读取(例如对仅限 root 的文件)不会导致此退出:[会话启动时不使用该源的策略](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)。对于无法解析的源,Claude Code 以[命名该源的不同消息](#managed-settings-document-could-not-be-parsed)退出。

5296 5515 

5297**要做什么:**5516**要做什么:**

5298 5517 

5299* 如果您管理计算机,修复 `Detail:` 行命名的问题,以便部署的源可以被读取,或删除源5518* 如果您管理计算机,请修复 `Detail:` 行命名的问题,以便部署的源可以被读取,或删除该源

5300* 如果您不管理,请将消息发送给您的管理员。您自己的设置文件中的任何内容都不会导致或清除此错误5519* 如果您不管理,请将消息发送给您的管理员。您自己的设置文件中的任何内容都不会导致或清除此错误

5301 5520 

5302在 v2.1.285 之前,仅使用 claude.ai 或 Claude Console 凭据登录的会话以此消息退出,操作系统拒绝的读取也产生了它。5521在 v2.1.285 之前,仅使用 claude.ai 或 Claude Console 凭据登录的会话以此消息退出,并且操作系统拒绝的读取也会产生它。

5303 5522 

5304<h3 id="otelheadershelper-failed">5523<h3 id="otelheadershelper-failed">

5305 otelHeadersHelper 失败5524 otelHeadersHelper 失败


5307 5526 

5308当 [`otelHeadersHelper`](/docs/zh-CN/settings-reference#otelheadershelper) 脚本失败或打印不符合[脚本要求](/docs/zh-CN/monitoring-usage#script-requirements)的输出时,Claude Code 将此警告显示为终端界面中的通知,每个交互式会话一次。5527当 [`otelHeadersHelper`](/docs/zh-CN/settings-reference#otelheadershelper) 脚本失败或打印不符合[脚本要求](/docs/zh-CN/monitoring-usage#script-requirements)的输出时,Claude Code 将此警告显示为终端界面中的通知,每个交互式会话一次。

5309 5528 

5310当脚本继续失败时,导出失败,您的遥测后端从会话中接收不到任何内容。5529当脚本持续失败时,导出失败,您的遥测后端从会话中接收不到任何内容。

5311 5530 

5312`See /status:` 后的文本说明失败的内容,例如脚本的退出代码后跟其错误输出:5531`See /status:` 后的文本说明失败的内容,例如脚本的退出码后跟其错误输出:

5313 5532 

5314```text theme={null}5533```text theme={null}

5315otelHeadersHelper failed; telemetry is not being exported. See /status: exited 1: token service unreachable5534otelHeadersHelper failed; telemetry is not being exported. See /status: exited 1: token service unreachable


5318**要做什么:**5537**要做什么:**

5319 5538 

5320* 运行 `/status` 以读取失败详情。5539* 运行 `/status` 以读取失败详情。

5321* 修复脚本使其在 30 秒内退出 0 并在 stdout 上打印字符串标头值的 JSON 对象。请参阅[脚本要求](/docs/zh-CN/monitoring-usage#script-requirements)。5540* 修复脚本使其在 30 秒内以 0 退出,并在 stdout 上打印由字符串标头值组成的 JSON 对象。请参阅[脚本要求](/docs/zh-CN/monitoring-usage#script-requirements)。

5322* 如果您的组织通过[托管设置](/docs/zh-CN/managed-settings)部署脚本,请要求维护它们的人修复它。5541* 如果您的组织通过[托管设置](/docs/zh-CN/managed-settings)部署脚本,请要求维护它们的人修复它。

5323 5542 

5324在[非交互模式](/docs/zh-CN/headless)中使用 `-p`,相同的失败在 stderr 上显示为 `otelHeadersHelper failed (OpenTelemetry export headers unavailable): <error>`。5543在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 时,相同的失败改为在 stderr 上显示为 `otelHeadersHelper failed (OpenTelemetry export headers unavailable): <error>`。

5325 5544 

5326<h3 id="headershelper-not-run">5545<h3 id="headershelper-not-run">

5327 headersHelper 未运行5546 headersHelper 未运行

5328</h3>5547</h3>

5329 5548 

5330Claude Code 仅使用 MCP 服务器的静态 `headers` 连接了它,并跳过了服务器的 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication),因为助手是 shell 命令,文件夹没有保存的信任。当您手动在 `~/.claude.json` 中设置其条目时,或在主目录外,当您在交互式会话中为其接受信任对话框时,文件夹获得保存的信任。请参阅[在 headersHelper 运行前信任文件夹](/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs)了解此检查适用于哪些服务器。5549Claude Code 仅使用 MCP 服务器的静态 `headers` 连接了它,并跳过了服务器的 [`headersHelper`](/docs/zh-CN/mcp#use-dynamic-headers-for-custom-authentication),因为该助手是 shell 命令,而该文件夹没有保存的信任。当您手动在 `~/.claude.json` 中设置其条目时,或在主目录外,当您在交互式会话中为其接受信任对话框时,文件夹获得保存的信任。请参阅[在 headersHelper 运行前信任文件夹](/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs)了解此检查适用于哪些服务器。

5331 5550 

5332Claude Code 仅在[非交互模式](/docs/zh-CN/headless)中写入此行,每个服务器一次。在交互式会话中,它将相同的拒绝写入调试日志。5551Claude Code 仅在[非交互模式](/docs/zh-CN/headless)中写入此行,每个服务器一次。在交互式会话中,它改为将相同的拒绝写入调试日志。

5333 5552 

5334```text theme={null}5553```text theme={null}

5335MCP server 'internal-api': headersHelper not run — this workspace has no persisted trust; accept the trust dialog here once interactively, or set projects["/Users/you/project"].hasTrustDialogAccepted in /Users/you/.claude.json.5554MCP server 'internal-api': headersHelper not run — this workspace has no persisted trust; accept the trust dialog here once interactively, or set projects["/Users/you/project"].hasTrustDialogAccepted in /Users/you/.claude.json.

5336```5555```

5337 5556 

5338消息打印的 `projects` 键是文件夹[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)说明 Claude Code 在其上键入信任的。为父文件夹接受信任对话框不满足检查,`-p` 或 SDK 会话也不满足。5557消息打印的 `projects` 键就是[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)中说明的 Claude Code 用来记录信任的文件夹。为父文件夹接受信任对话框不满足该检查,`-p` 或 SDK 会话也不满足。

5339 5558 

5340**要做什么:**5559**要做什么:**

5341 5560 


5347 格式错误的 Tool(content) 规则5566 格式错误的 Tool(content) 规则

5348</h3>5567</h3>

5349 5568 

5350您的一个设置文件中的[权限规则](/docs/zh-CN/permissions#permission-rule-syntax)没有 `Tool` 或 `Tool(content)` 的形状,例如因为文本跟在右括号后或其中一个括号缺失。Claude Code 跳过规则,当交互式会话启动时在无效设置对话框中列出它,以及在 [`claude doctor`](/docs/zh-CN/debug-your-config#check-resolved-settings) 输出中:5569您的某个设置文件中的[权限规则](/docs/zh-CN/permissions#permission-rule-syntax)不具有 `Tool` 或 `Tool(content)` 的形式,例如因为右括号后跟有文本或缺少其中一个括号。Claude Code 跳过该规则,并在交互式会话启动时的无效设置对话框中以及 [`claude doctor`](/docs/zh-CN/debug-your-config#check-resolved-settings) 输出中列出它:

5351 5570 

5352```text theme={null}5571```text theme={null}

5353Invalid permission rule "Bash(ls) x" was skipped: Malformed Tool(content) rule. Rules take the form Tool or Tool(content) and must end at the closing ")"; parentheses inside the content are literal5572Invalid permission rule "Bash(ls) x" was skipped: Malformed Tool(content) rule. Rules take the form Tool or Tool(content) and must end at the closing ")"; parentheses inside the content are literal


5356**要做什么:**5575**要做什么:**

5357 5576 

5358* 在消息列出的设置文件中,重写规则使其在其右括号处结束,例如用 `Bash(ls *)` 代替 `Bash(ls) x`5577* 在消息列出的设置文件中,重写规则使其在其右括号处结束,例如用 `Bash(ls *)` 代替 `Bash(ls) x`

5359* 将内容内的括号保留原样。它们是字面的,因此诸如 `Edit(./Finance (2024)/**)` 的规则在没有转义的情况下是有效的5578* 将内容内的括号保留原样。它们是字面量,因此诸如 `Edit(./Finance (2024)/**)` 的规则无需转义即有效

5360 5579 

5361在 v2.1.260 之前,Claude Code 将具有不匹配括号的规则报告为 `Mismatched parentheses`。5580在 v2.1.260 之前,Claude Code 将具有不匹配括号的规则报告为 `Mismatched parentheses`。

5362 5581 


5364 不匹配文件权限检查5583 不匹配文件权限检查

5365</h3>5584</h3>

5366 5585 

5367Claude Code 在您的[设置文件](/docs/zh-CN/settings#where-settings-live)、[托管设置](/docs/zh-CN/managed-settings)或 `--allowedTools`、`--disallowedTools` 或 `--settings` 标志值中找到了 `Write`、`NotebookEdit`、`MultiEdit` 或 `Glob` [权限规则](/docs/zh-CN/permissions#read-and-edit),其中包含路径。它仅针对 `Edit` 和 `Read` 规则检查文件权限,因此它从不查询命名其他文件工具之一的路径规则。它保留规则并不改变其他任何内容;警告命名规则、其括号中的源和要写入的替换:5586Claude Code 在您的某个[设置文件](/docs/zh-CN/settings#where-settings-live)、[托管设置](/docs/zh-CN/managed-settings)或 `--allowedTools`、`--disallowedTools` 或 `--settings` 标志值中找到了带有路径的 `Write`、`NotebookEdit`、`MultiEdit` 或 `Glob` [权限规则](/docs/zh-CN/permissions#read-and-edit)。它仅针对 `Edit` 和 `Read` 规则检查文件权限,因此从不查询命名其他文件工具之一的路径规则。它保留该规则且不改变其他任何内容;警告命名该规则、括号中的来源以及要写入的替换内容:

5368 5587 

5369```text theme={null}5588```text theme={null}

5370Permission deny rule (.claude/settings.json): Write(docs/**) is not matched by file permission checks — only Edit(path) rules are. Use Edit(docs/**) instead (Edit rules cover all file-editing tools).5589Permission deny rule (.claude/settings.json): Write(docs/**) is not matched by file permission checks — only Edit(path) rules are. Use Edit(docs/**) instead (Edit rules cover all file-editing tools).


5373**要做什么:**5592**要做什么:**

5374 5593 

5375* 将 `Write(path)`、`NotebookEdit(path)` 和旧版 `MultiEdit(path)` 规则替换为 `Edit(path)`。`Edit` 规则涵盖所有文件编辑工具。5594* 将 `Write(path)`、`NotebookEdit(path)` 和旧版 `MultiEdit(path)` 规则替换为 `Edit(path)`。`Edit` 规则涵盖所有文件编辑工具。

5376* 除了在 `--allowedTools` 中,Claude Code 接受 `Glob` 规则而不警告,将 `Glob(path)` 规则替换为 `Read(path)`。5595* 除了在 `--allowedTools` 中(Claude Code 接受 `Glob` 规则而不警告),将 `Glob(path)` 规则替换为 `Read(path)`。

5377* 在警告括号中命名的源处修复规则:设置文件路径,或 `--allowed-tools` 和 `--disallowed-tools` 的标志本身。不存在于磁盘上的 `claude-settings-<hash>.json` 路径代表内联 `--settings` 值。修复您传递给该标志的 JSON。5596* 在警告括号中命名的来源处修复规则:设置文件路径,或对于 `--allowed-tools` 和 `--disallowed-tools` 则是标志本身。磁盘上不存在的 `claude-settings-<hash>.json` 路径代表内联 `--settings` 值。请修复您传递给该标志的 JSON。

5378* 将诸如 `Write` 或 `Glob` 的裸工具名称规则保留原样。Claude Code 在[工具级别](/docs/zh-CN/permissions#match-all-uses-of-a-tool)匹配它们,不对它们发出警告。5597* 将诸如 `Write` 或 `Glob` 的裸工具名称规则保留原样。Claude Code 在[工具级别](/docs/zh-CN/permissions#match-all-uses-of-a-tool)匹配它们,不对它们发出警告。

5379* 如果源读取 `managed policy settings`,将警告转发给维护您的托管设置的人,因为您无法自己清除它。5598* 如果来源显示为 `managed policy settings`,请将警告转发给维护您的托管设置的人,因为您无法自己清除它。

5380 5599 

5381在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json`,Claude Code 将警告写入调试日志而不是 stderr,因此机器读取输出保持干净。使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它。在 v2.1.210 之前,Claude Code 接受这些规则而不警告。5600在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json` 时,Claude Code 将警告写入调试日志而不是 stderr,以保持机器读取的输出干净。使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它。在 v2.1.210 之前,Claude Code 接受这些规则而不警告。

5382 5601 

5383<h3 id="has-a-wildcard-before-the-rest-of-the-command">5602<h3 id="has-a-wildcard-before-the-rest-of-the-command">

5384 在命令的其余部分之前有通配符5603 在命令的其余部分之前有通配符

5385</h3>5604</h3>

5386 5605 

5387Claude Code 找到了一个 `Bash` 允许规则,其 `*` 在后来的单词之前,该单词确定它是哪个命令,例如 `Bash(git * main)` 或 `Bash(git -C * status *)`,在您的[设置文件](/docs/zh-CN/settings#where-settings-live)、[托管设置](/docs/zh-CN/managed-settings)或 `--allowedTools` 或 `--settings` 标志值中。`*` 匹配任何文本,包括在该位置插入的选项:`Bash(git * main)` 也批准 `git -c core.fsmonitor=<script> diff main`,其中 `-c` 使 git 运行命令命名的程序。[通配符模式](/docs/zh-CN/permissions#wildcard-patterns)显示匹配规则。5606Claude Code 在您的某个[设置文件](/docs/zh-CN/settings#where-settings-live)、[托管设置](/docs/zh-CN/managed-settings)或 `--allowedTools` 或 `--settings` 标志值中找到了一个 `Bash` 允许规则,其 `*` 出现在决定命令类型的后续单词之前,例如 `Bash(git * main)` 或 `Bash(git -C * status *)`。`*` 匹配任何文本,包括在该位置插入的选项:`Bash(git * main)` 也会批准 `git -c core.fsmonitor=<script> diff main`,其中 `-c` 会使 git 运行命令所命名的程序。[通配符模式](/docs/zh-CN/permissions#wildcard-patterns)显示匹配规则。

5388 5607 

5389警告存在是为了让您缩小通配符比您打算的更宽的规则。Claude Code 保留规则并不改变它如何匹配;警告命名规则及其括号中的源:5608此警告的目的是让您缩小通配符范围超出预期的规则。Claude Code 保留该规则且不改变其匹配方式;警告命名该规则及括号中的来源:

5390 5609 

5391```text theme={null}5610```text theme={null}

5392Permission allow rule (.claude/settings.json): Bash(git -C * status *) has a wildcard before the rest of the command, so it also matches any options inserted at that position and approves them without a prompt. For git, options such as -c and --exec-path can run arbitrary commands. Replace that * with the exact value you mean, or only use * after the subcommand (for example Bash(git status *)).5611Permission allow rule (.claude/settings.json): Bash(git -C * status *) has a wildcard before the rest of the command, so it also matches any options inserted at that position and approves them without a prompt. For git, options such as -c and --exec-path can run arbitrary commands. Replace that * with the exact value you mean, or only use * after the subcommand (for example Bash(git status *)).


5394 5613 

5395**要做什么:**5614**要做什么:**

5396 5615 

5397* 将子命令前的 `*` 替换为您的确切值:用 `Bash(git checkout main)` 代替 `Bash(git * main)`。5616* 将子命令前的 `*` 替换为您想要的确切值:用 `Bash(git checkout main)` 代替 `Bash(git * main)`。

5398* 将每个 `*` 移到子命令后:用 `Bash(git status *)` 代替 `Bash(git -C * status *)`。为您想允许的每个子命令写一个规则。5617* 将每个 `*` 移到子命令后:用 `Bash(git status *)` 代替 `Bash(git -C * status *)`。为您想允许的每个子命令写一条规则。

5399* 在警告括号中命名的源处修复规则:设置文件路径,或 `--allowed-tools` 标志本身。不存在于磁盘上的 `claude-settings-<hash>.json` 路径代表内联 `--settings` 值。修复您传递给该标志的 JSON。5618* 在警告括号中命名的来源处修复规则:设置文件路径,或 `--allowed-tools` 标志本身。磁盘上不存在的 `claude-settings-<hash>.json` 路径代表内联 `--settings` 值。请修复您传递给该标志的 JSON。

5400* 如果源读取 `managed policy settings`,将警告转发给维护您的托管设置的人,因为您无法自己清除它。5619* 如果来源显示为 `managed policy settings`,请将警告转发给维护您的托管设置的人,因为您无法自己清除它。

5401 

5402Claude Code 不对具有相同形状的拒绝和询问规则发出警告:它拒绝或提示它们匹配的额外命令,而不是批准它们。它也不对子命令在第一个 `*` 之前的规则发出警告,例如 `Bash(git commit *)`,或规则中除了选项之外没有其他单词跟在 `*` 后的规则,例如 `Bash(git *)`,或关于 `:*` 前缀规则的规则,例如 `Bash(git:*)`。

5403 5620 

5404在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json`,Claude Code 将警告写入调试日志而不是 stderr,因此机器读取输出保持干净。使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它。在 v2.1.246 之前,Claude Code 接受这些规则而不警告。5621在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json` 时,Claude Code 将警告写入调试日志而不是 stderr,以保持机器读取的输出干净。使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它。在 v2.1.246 之前,Claude Code 接受这些规则而不警告。

5405 5622 

5406<h3 id="crosssessioninbound-must-be-one-of-accept-hold-refuse">5623<h3 id="crosssessioninbound-must-be-one-of-accept-hold-refuse">

5407 crossSessionInbound 必须是 accept、hold 或 refuse 之一5624 crossSessionInbound 必须是 accept、hold 或 refuse 之一

5408</h3>5625</h3>

5409 5626 

5410设置文件将 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound) 设置为 Claude Code 不识别的值,例如拼写错误 `"reject"`。警告的第二句取决于哪个文件保存该值;在用户、项目、本地或 `--settings` 文件中,它读取:5627某个设置文件将 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound) 设置为 Claude Code 无法识别的值,例如拼写错误 `"reject"`。警告的第二句取决于哪个文件包含该值;在用户、项目、本地或 `--settings` 文件中,它显示为:

5411 5628 

5412```text theme={null}5629```text theme={null}

5413"crossSessionInbound" must be one of "accept", "hold", "refuse"; received "reject". This value was ignored; while it is present, cross-session messages are held for your approval instead of being delivered. Set it to one of the values above.5630"crossSessionInbound" must be one of "accept", "hold", "refuse"; received "reject". This value was ignored; while it is present, cross-session messages are held for your approval instead of being delivered. Set it to one of the values above.

5414```5631```

5415 5632 

5416在[托管设置](/docs/zh-CN/managed-settings)中,Claude Code 将无法识别的值视为 `refuse`(最严格的值),警告说跨会话消息被拒绝,直到管理员修复它。有关保留如何与您的其他设置文件中的值结合,请参阅 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound)。5633在[托管设置](/docs/zh-CN/managed-settings)中,Claude Code 将无法识别的值视为 `refuse`(最严格的值),警告说明跨会话消息将被拒绝,直到管理员修复它。有关保留行为如何与您的其他设置文件中的值结合,请参阅 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound)。

5417 5634 

5418**要做什么:**5635**要做什么:**

5419 5636 

5420* 将键设置为 `"accept"`、`"hold"` 或 `"refuse"`,或删除它5637* 将该键设置为 `"accept"`、`"hold"` 或 `"refuse"`,或删除它

5421* 当警告命名托管设置时,要求管理员修复该值5638* 当警告命名托管设置时,要求管理员修复该值

5422 5639 

5423在 v2.1.248 之前,Claude Code 忽略无法识别的值而不警告。5640在 v2.1.248 之前,Claude Code 忽略无法识别的值而不警告。

5424 5641 

5642<h3 id="anthropic-foundry-resource-must-be-a-foundry-resource-name">

5643 ANTHROPIC\_FOUNDRY\_RESOURCE 必须是 Foundry 资源名称

5644</h3>

5645 

5646您将 [`ANTHROPIC_FOUNDRY_RESOURCE`](/docs/zh-CN/env-vars) 设置为了裸 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 资源名称以外的内容,例如端点 URL 或其主机名。Claude Code 在发送请求前拒绝了该值。该消息出现在 Claude 回复的位置,而不是作为启动警告:

5647 

5648```text theme={null}

5649API Error: ANTHROPIC_FOUNDRY_RESOURCE must be a Foundry resource name (2-64 letters, digits and hyphens, not starting or ending with a hyphen, such as my-resource), not a URL or host name. To use a full URL, set ANTHROPIC_FOUNDRY_BASE_URL instead.

5650```

5651 

5652**要做什么:**

5653 

5654* 将 `ANTHROPIC_FOUNDRY_RESOURCE` 仅设置为资源名称,然后重启 Claude Code。对于端点 `https://my-resource.services.ai.azure.com/anthropic`,名称为 `my-resource`。

5655* 若要改为提供完整的端点 URL,请将 [`ANTHROPIC_FOUNDRY_BASE_URL`](/docs/zh-CN/env-vars) 设置为该 URL 并删除 `ANTHROPIC_FOUNDRY_RESOURCE`,然后重启 Claude Code。Claude Code 只接受这两个变量之一。

5656 

5425<h3 id="the-200k-limit-isnt-enforced">5657<h3 id="the-200k-limit-isnt-enforced">

5426 200K 限制未被强制执行5658 200K 限制未被强制执行

5427</h3>5659</h3>

5428 5660 

5429您设置了 [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/zh-CN/env-vars),这通常使[自动压缩](/docs/zh-CN/model-config#default-auto-compact-thresholds)将 1M 上下文模型上的会话保持在 200K 窗口,但没有压缩阈值将此会话限制在或低于 200K,因此对话可以超过它。5661您设置了 [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/zh-CN/env-vars),这通常使[自动压缩](/docs/zh-CN/model-config#default-auto-compact-thresholds)将 1M 上下文模型上的会话保持在 200K 窗口内,但没有压缩阈值将此会话限制在 200K 或以下,因此对话可以超过它。

5430 5662 

5431```text theme={null}5663```text theme={null}

5432CLAUDE_CODE_DISABLE_1M_CONTEXT is set, but the 200K limit isn't enforced for <model>, so this session can grow past it. To enforce it, set CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 (or the autoCompactWindow setting).5664CLAUDE_CODE_DISABLE_1M_CONTEXT is set, but the 200K limit isn't enforced for <model>, so this session can grow past it. To enforce it, set CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 (or the autoCompactWindow setting).

5433```5665```

5434 5666 

5435Claude Code 为它识别为具有本机 1M 窗口的每个模型自己强制执行 200K 限制,对于它不识别的模型 ID,它在它假设的窗口处压缩。当其他配置击败该强制执行时出现警告:5667Claude Code 会为它识别为具有原生 1M 窗口的每个模型自行强制执行 200K 限制,对于它无法识别的模型 ID,它会在其假设的窗口处压缩。当其他配置使该强制执行失效时,会出现此警告:

5436 5668 

5437* 模型 ID 不是 Claude Code 识别的,例如[LLM 网关](/docs/zh-CN/llm-gateway)别名,并且您设置了 [`CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT=1`](/docs/zh-CN/env-vars) 或使用 [`CLAUDE_CODE_MAX_CONTEXT_TOKENS`](/docs/zh-CN/env-vars) 将假设的窗口提高到 200K 以上。在这种情况下,消息也提供 `or update to a Claude Code version that recognizes <model>` 作为补救。5669* 模型 ID 不是 Claude Code 能识别的,例如 [LLM 网关](/docs/zh-CN/llm-gateway)别名,并且您设置了 [`CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT=1`](/docs/zh-CN/env-vars) 或使用 [`CLAUDE_CODE_MAX_CONTEXT_TOKENS`](/docs/zh-CN/env-vars) 将假设的窗口提高到 200K 以上。在这种情况下,消息还会提供 `or update to a Claude Code version that recognizes <model>` 作为补救措施。

5438* 通过 [`ANTHROPIC_BETAS`](/docs/zh-CN/env-vars) 或 [`--betas`](/docs/zh-CN/cli-reference#cli-flags) 标志请求的 `context-1m` 测试版仍然要求 API 在接受该测试版的模型上使用 1M 窗口,而没有任何东西在 200K 处压缩会话5670* 通过 [`ANTHROPIC_BETAS`](/docs/zh-CN/env-vars) 或 [`--betas`](/docs/zh-CN/cli-reference#cli-flags) 标志请求的 `context-1m` 测试版仍然会在接受该测试版的模型上向 API 请求 1M 窗口,而没有任何机制在 200K 处压缩会话

5439 5671 

5440**要做什么:**5672**要做什么:**

5441 5673 

5442* 设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000`](/docs/zh-CN/env-vars),或 [`autoCompactWindow`](/docs/zh-CN/settings-reference#autocompactwindow) 设置为 `200000`,以便自动压缩在 200K 边界处压缩5674* 设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000`](/docs/zh-CN/env-vars),或将 [`autoCompactWindow`](/docs/zh-CN/settings-reference#autocompactwindow) 设置为 `200000`,以便自动压缩在 200K 边界处压缩

5443* 如果消息命名此版本不识别的模型 ID,运行 `claude update`。识别 ID 为 1M 上下文模型的版本在没有进一步配置的情况下强制执行限制。5675* 如果消息命名了此版本无法识别的模型 ID,请运行 `claude update`。能够将该 ID 识别为 1M 上下文模型的版本会强制执行该限制,无需进一步配置。

5444* 如果您希望会话使用模型的完整窗口,请取消设置 `CLAUDE_CODE_DISABLE_1M_CONTEXT`;警告仅报告 200K 限制未被强制执行5676* 如果您希望会话改为使用模型的完整窗口,请取消设置 `CLAUDE_CODE_DISABLE_1M_CONTEXT`;该警告仅报告 200K 限制未被强制执行

5445 5677 

5446在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json`,Claude Code 将警告写入调试日志而不是 stderr。5678在[后台会话](/docs/zh-CN/agent-view)中或使用 `--output-format json` 或 `stream-json` 时,Claude Code 将警告写入调试日志而不是 stderr。

5447 5679 

5448<h3 id="unrecognized-model-id-on-a-request">5680<h3 id="unrecognized-model-id-on-a-request">

5449 请求上无法识别的模型 ID5681 请求上无法识别的模型 ID

5450</h3>5682</h3>

5451 5683 

5452Claude Code 为您的 Claude Code 版本不识别的模型 ID 发送了请求,并找不到将该 ID 映射到它识别的模型的 [`modelOverrides`](/docs/zh-CN/model-config#override-model-ids-per-version) 条目。Claude Code 仍然使用您配置的 ID 发送请求,不退出或切换模型。5684Claude Code 为您的 Claude Code 版本无法识别的模型 ID 发送了请求,并且找不到将该 ID 映射到它能识别的模型的 [`modelOverrides`](/docs/zh-CN/model-config#override-model-ids-per-version) 条目。Claude Code 仍然使用您配置的 ID 发送请求,不会退出或切换模型。

5453 5685 

5454```text theme={null}5686```text theme={null}

5455[claude-code:unrecognized_model] {"model":"my-proxy-model","query_source":"sdk"}5687[claude-code:unrecognized_model] {"model":"my-proxy-model","query_source":"sdk"}

5456```5688```

5457 5689 

5458在读取 stderr 的脚本或工具中,匹配 `[claude-code:unrecognized_model]` 前缀。在前缀和一个空格之后,Claude Code 写入一行 JSON 对象。Claude Code 可以在更高版本中向其添加字段,因此忽略您不期望的任何字段。它至少写入这两个:5690在读取 stderr 的脚本或测试工具中,请匹配 `[claude-code:unrecognized_model]` 前缀。在前缀和一个空格之后,Claude Code 写入单行 JSON 对象。Claude Code 可能在更高版本中向其添加字段,因此请忽略任何您未预期的字段。它至少写入以下两个字段:

5459 5691 

5460* `model`:您配置的模型字符串5692* `model`:您配置的模型字符串

5461* `query_source`:使用模型的请求路径。Claude Code 为 `-p` 运行报告 `sdk`,为以 `agent:` 开头的值报告子代理。5693* `query_source`:使用该模型的请求路径。对于 `-p` 运行,Claude Code 报告 `sdk`;对于子代理,报告以 `agent:` 开头的值。

5462 5694 

5463Claude Code 根据您运行它的方式将行写入两个位置之一:5695Claude Code 根据您的运行方式将该行写入以下两个位置之一:

5464 5696 

5465* 在[非交互模式](/docs/zh-CN/headless)中使用 `-p`,Claude Code 在每个 `--output-format` 下将其写入 stderr,因此您可以解析 stdout 而不过滤该行5697* 在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 时,Claude Code 在每种 `--output-format` 下都将其写入 stderr,因此您可以解析 stdout 而无需过滤掉该行

5466* 在交互式会话或[后台会话](/docs/zh-CN/agent-view)中,Claude Code 将其写入调试日志;使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它5698* 在交互式会话或[后台会话](/docs/zh-CN/agent-view)中,Claude Code 改为将其写入调试日志;使用 `--debug` 运行以在 `~/.claude/debug/<session-id>.txt` 处捕获它

5467 5699 

5468Claude Code 每个模型字符串每个进程写入该行一次。它为每个进一步的无法识别的 ID 写入单独的行,例如[子代理](/docs/zh-CN/sub-agents#choose-a-model)或[后台功能](/docs/zh-CN/costs#background-token-usage)使用的 ID。5700Claude Code 每个进程为每个模型字符串写入该行一次。对于每个其他无法识别的 ID,例如[子代理](/docs/zh-CN/sub-agents#choose-a-model)或[后台功能](/docs/zh-CN/costs#background-token-usage)使用的 ID,它会写入单独的一行。

5469 5701 

5470Claude Code 不为它解析为它识别的模型的提供商 ID 写入该行,例如 Amazon Bedrock `us.anthropic.claude-...` ID、Google Cloud 的 Agent Platform ID 带有 `@` 版本后缀,以及包含 Claude 模型 ID 的 Microsoft Foundry 部署名称。Claude Code 检查 Amazon Bedrock [应用推理配置文件 ARN](/docs/zh-CN/amazon-bedrock#map-each-model-version-to-an-inference-profile) 后面的模型,而不是 ARN 本身。它为无法解析的 ARN(例如拼写错误的 ARN)不写入行。5702对于它能解析为可识别模型的提供商 ID,Claude Code 不写入该行,例如 Amazon Bedrock `us.anthropic.claude-...` ID、带有 `@` 版本后缀的 Google Cloud Agent Platform ID,以及包含 Claude 模型 ID 的 Microsoft Foundry 部署名称。Claude Code 检查 Amazon Bedrock [应用推理配置文件 ARN](/docs/zh-CN/amazon-bedrock#map-each-model-version-to-an-inference-profile) 背后的模型,而不是 ARN 本身。对于无法解析的 ARN(例如拼写错误的 ARN),它不写入任何行。

5471 5703 

5472**要做什么:**5704**要做什么:**

5473 5705 

5474* 如果您故意设置了 ID,例如[LLM 网关](/docs/zh-CN/llm-gateway)别名,请在您的[设置文件](/docs/zh-CN/settings#where-settings-live)中添加 [`modelOverrides`](/docs/zh-CN/model-config#override-model-ids-per-version) 条目,其中 ID 作为其值。使用 Anthropic 模型 ID 作为键,而不是系列别名,例如 `opus`。对于示例行中的 `my-proxy-model`,添加此条目:5706* 如果您是有意设置该 ID 的,例如 [LLM 网关](/docs/zh-CN/llm-gateway)别名,请在您的[设置文件](/docs/zh-CN/settings#where-settings-live)中添加一个以该 ID 为值的 [`modelOverrides`](/docs/zh-CN/model-config#override-model-ids-per-version) 条目。使用 Anthropic 模型 ID 作为键,而不是诸如 `opus` 的系列别名。对于示例行中的 `my-proxy-model`,添加此条目:

5475 5707 

5476 ```json theme={null}5708 ```json theme={null}

5477 {5709 {


5481 }5713 }

5482 ```5714 ```

5483 5715 

5484 Claude Code 然后将 `my-proxy-model` 视为 `claude-opus-4-6` 并停止写入该行。5716 然后 Claude Code 会将 `my-proxy-model` 视为 `claude-opus-4-6` 并停止写入该行。

5485 5717 

5486* 如果 ID 命名比您的 Claude Code 版本更新的模型,运行 `claude update`5718* 如果该 ID 命名的模型比您的 Claude Code 版本更新,请运行 `claude update`

5487 5719 

5488* 如果 ID 是拼写错误,在您可以设置模型的[位置](/docs/zh-CN/model-config#setting-your-model)或[别名变量](/docs/zh-CN/model-config#environment-variables)中修复它。如果 `query_source` 以 `agent:` 开头,改为在您设置[子代理模型](/docs/zh-CN/sub-agents#choose-a-model)的地方修复它。5720* 如果该 ID 是拼写错误,请在包含它的[可设置模型的位置](/docs/zh-CN/model-config#setting-your-model)或[别名变量](/docs/zh-CN/model-config#environment-variables)中修复它。如果 `query_source` 以 `agent:` 开头,请改为在您设置[子代理模型](/docs/zh-CN/sub-agents#choose-a-model)的地方修复它。

5489 5721 

5490在 v2.1.233 之前,Claude Code 在为它不识别的模型 ID 发送请求时不写入行。5722在 v2.1.233 之前,Claude Code 在为无法识别的模型 ID 发送请求时不写入任何行。

5491 5723 

5492<h3 id="stale-sandbox-mask-files-left-by-a-killed-session">5724<h3 id="stale-sandbox-mask-files-left-by-a-killed-session">

5493 被杀死的会话留下的陈旧沙箱掩码文件5725 被终止的会话留下的陈旧沙箱掩码文件

5494</h3>5726</h3>

5495 5727 

5496`claude doctor` 在其诊断中打印此警告,`/status` 列出相同的行。当[沙箱](/docs/zh-CN/sandboxing)在文件系统隔离打开的情况下启用时,它在 Linux 和 WSL2 上出现。5728`claude doctor` 在其诊断中打印此警告,`/status` 也列出相同的行。当启用了[沙箱隔离](/docs/zh-CN/sandboxing)并打开文件系统隔离时,它会在 Linux 和 WSL2 上出现。

5497 5729 

5498当沙箱命令运行时,沙箱通过在那里创建 0 字节只读占位符来保持对尚不存在的文件的写入拒绝,并在之后删除它。在该清理运行前被杀死的会话,例如通过 SIGKILL,会留下占位符。后来的会话在每次启动时再次只读绑定它们,因此诸如保存"是,不要再问"之类的设置写入失败。5730当沙箱中的命令运行时,沙箱通过在尚不存在的文件位置创建 0 字节只读占位符来保持对该文件的写入拒绝,并在之后删除它。在该清理运行前被终止的会话(例如通过 SIGKILL)会留下这些占位符。之后的会话在每次启动时都会再次以只读方式绑定它们,因此在占位符所在位置的设置写入(例如保存"是,不要再问")会失败。

5499 5731 

5500```text theme={null}5732```text theme={null}

5501- Stale sandbox mask files left by a killed session: /home/you/project/.claude/settings.local.json5733- Stale sandbox mask files left by a killed session: /home/you/project/.claude/settings.local.json


5504 5736 

5505**要做什么:**5737**要做什么:**

5506 5738 

5507* 退出在该项目中运行的任何其他 Claude Code 会话,然后使用 `rm` 删除每个列出的文件。警告列出最多三个文件并计数其余的,因此在删除后重新运行 `claude doctor` 直到警告不再出现。另一个会话的沙箱仍在使用的占位符是该会话写入保护的活跃部分5739* 退出在该项目中运行的任何其他 Claude Code 会话,然后使用 `rm` 删除每个列出的文件。警告最多列出三个文件并对其余文件计数,因此删除后请重新运行 `claude doctor`,直到警告不再出现。另一个会话的沙箱仍在使用的占位符是该会话写入保护的有效组成部分

5508* 如果您使用"是,不要再问"保存的权限选择没有坚持,请在删除占位符后再次保存5740* 如果您使用"是,不要再问"保存的权限选择没有生效,请在删除占位符后再次保存

5509 5741 

5510在 v2.1.257 之前,`claude doctor` 没有标记这些文件;较早的版本在会话被杀死时留下相同的占位符。5742在 v2.1.257 之前,`claude doctor` 不会标记这些文件;较早的版本在会话被终止时会留下相同的占位符。

5511 5743 

5512<h2 id="responses-seem-lower-quality-than-usual">5744<h2 id="responses-seem-lower-quality-than-usual">

5513 回复质量似乎低于预期5745 回复质量似乎低于预期

Details

39这些有提供商特定的差异:39这些有提供商特定的差异:

40 40 

41* **MCP servers**:[来自 claude.ai 的连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)仅在您的 claude.ai 订阅是活跃身份验证方法时加载。[工具搜索](/docs/zh-CN/mcp#configure-tool-search)在 `ANTHROPIC_BASE_URL` 指向非第一方主机时默认关闭,在 Google Cloud's Agent Platform 上早于 Claude 4.5 代的模型或在 Microsoft Foundry [部署在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)时不受支持41* **MCP servers**:[来自 claude.ai 的连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)仅在您的 claude.ai 订阅是活跃身份验证方法时加载。[工具搜索](/docs/zh-CN/mcp#configure-tool-search)在 `ANTHROPIC_BASE_URL` 指向非第一方主机时默认关闭,在 Google Cloud's Agent Platform 上早于 Claude 4.5 代的模型或在 Microsoft Foundry [部署在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)时不受支持

42* **Subagents**:内置的 [Explore subagent](/docs/zh-CN/sub-agents#built-in-subagents) 在 Claude API 上将其继承的模型限制为 Opus,在任何其他提供商(包括 Claude Platform on AWS)上直接继承主对话的模型42* **Subagents**:当主对话运行 Fable 时,如果使用 Claude 订阅、Anthropic Console 账户或通过 `ANTHROPIC_BASE_URL` 访问的 [LLM gateway](/docs/zh-CN/llm-gateway),内置的 [Explore subagent](/docs/zh-CN/sub-agents#built-in-subagents) 会在 Opus 上运行。在其他提供商(包括 Claude Platform on AWS)上,它在 Fable 上运行

43* **[Commands](/docs/zh-CN/commands#all-commands)**:43* **[Commands](/docs/zh-CN/commands#all-commands)**:

44 * `/design-sync` 和 `/import` 及其 `claude import` 子命令形式在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上不可用,以及通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)44 * `/design-sync` 和 `/import` 及其 `claude import` 子命令形式在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上不可用,以及通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)

45 * `/voice` 需要 claude.ai 账户45 * `/voice` 需要 claude.ai 账户

fullscreen.md +3 −1

Details

105* **单击 `/config` 面板中的设置值**以更改它,并使用鼠标滚轮滚动设置列表。需要 Claude Code v2.1.271 或更高版本。105* **单击 `/config` 面板中的设置值**以更改它,并使用鼠标滚轮滚动设置列表。需要 Claude Code v2.1.271 或更高版本。

106* **用鼠标滚轮滚动选择或多选菜单**当它显示的选项多于一次显示的选项时,例如短终端窗口中的 `/model` 列表。当指针悬停在其选项上时,滚轮会滚动列表。需要 Claude Code v2.1.280 或更高版本。106* **用鼠标滚轮滚动选择或多选菜单**当它显示的选项多于一次显示的选项时,例如短终端窗口中的 `/model` 列表。当指针悬停在其选项上时,滚轮会滚动列表。需要 Claude Code v2.1.280 或更高版本。

107* **用其滚动条滚动溢出的列表。** 在列表面板(例如 `/skills`、`/mcp` 和 `/plugin` 的已安装列表)中,当指针悬停在列表上时,滚动条会出现在有超过适应行数的列表旁边。单击轨道以跳转到该点,或拖动滑块。需要 Claude Code v2.1.281 或更高版本。107* **用其滚动条滚动溢出的列表。** 在列表面板(例如 `/skills`、`/mcp` 和 `/plugin` 的已安装列表)中,当指针悬停在列表上时,滚动条会出现在有超过适应行数的列表旁边。单击轨道以跳转到该点,或拖动滑块。需要 Claude Code v2.1.281 或更高版本。

108 * 当滚动条两端带有 `↑` 和 `↓` 箭头时,单击箭头可滚动一行,按住箭头可持续滚动。箭头需要 Claude Code v2.1.286 或更高版本。

109* **单击列表边缘的 `↑ N more` 或 `↓ N more` 行**以跳转到列表的该端,而不选择任何选项。需要 Claude Code v2.1.286 或更高版本。

108* **单击折叠的工具结果**以展开它并查看完整输出。再次单击以折叠。工具调用及其结果一起展开。只有有更多内容要显示的消息才可点击。110* **单击折叠的工具结果**以展开它并查看完整输出。再次单击以折叠。工具调用及其结果一起展开。只有有更多内容要显示的消息才可点击。

109 * 单击也会展开 `!` shell 命令的输出,无论是较旧的截断结果还是命令运行时的实时进度行。需要 Claude Code v2.1.257 或更高版本。111 * 单击也会展开 `!` shell 命令的输出,无论是较旧的截断结果还是命令运行时的实时进度行。需要 Claude Code v2.1.257 或更高版本。

110 * 单击也会展开一条暗淡的 `Message from @<sender>` 行,当发送者是[队友](/docs/zh-CN/agent-teams)或在您的会话中运行的另一个代理时。来自[您的其他会话之一](/docs/zh-CN/cross-session-messaging#what-a-message-looks-like)的消息行也会显示消息的第一行,并且不可点击,因此按 `Ctrl+o` 来阅读那一条。112 * 单击也会展开一条暗淡的 `Message from @<sender>` 行,当发送者是[队友](/docs/zh-CN/agent-teams)或在您的会话中运行的另一个代理时。来自[您的其他会话之一](/docs/zh-CN/cross-session-messaging#what-a-message-looks-like)的消息行也会显示消息的第一行,并且不可点击,因此按 `Ctrl+o` 来阅读那一条。


229 在 diff 面板中查看你的更改231 在 diff 面板中查看你的更改

230</h2>232</h2>

231 233 

232在全屏渲染中,[`/diff`](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) 打开一个面板在对话旁边,而不是一个你必须关闭的查看器,所以你可以在 Claude 工作时观看更改累积。在宽终端中,一旦 Claude 开始编辑文件,该面板也可以自动打开。[Diff 面板](/docs/zh-CN/interactive-mode#diff-panel)涵盖了它显示的内容、如何保持它关闭以及如何更改它比较的内容。234在全屏渲染中,[`/diff`](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) 会在对话旁边打开一个面板,因此您可以在 Claude 工作时观看更改逐步累积。[Diff 面板](/docs/zh-CN/interactive-mode#diff-panel)涵盖了它显示的内容、它何时会自动打开、如何保持它关闭以及如何更改它比较的内容。

233 235 

234<h2 id="clear-the-conversation">236<h2 id="clear-the-conversation">

235 清除对话237 清除对话

goal.md +2 −2

Details

6 6 

7> 使用 /goal 设置完成条件,Claude 会持续工作直到条件满足、模型判断其不可能实现或需要修复的错误清除目标。7> 使用 /goal 设置完成条件,Claude 会持续工作直到条件满足、模型判断其不可能实现或需要修复的错误清除目标。

8 8 

9`/goal` 命令设置一个完成条件,Claude 会在没有你逐步提示的情况下持续朝着这个目标工作。每个回合后,一个小型快速模型会检查条件是否满足。如果模型判断条件尚未满足,Claude 会开始另一个回合,而不是将控制权返回给你。一旦条件满足、模型判断条件不可能满足或回合因[需要修复的错误](#errors-you-have-to-fix-clear-the-goal)失败时,目标会自动清除。9`/goal` 命令设置一个完成条件,Claude 会在无需您逐步提示的情况下持续朝着这个目标工作。每个轮次后,模型会检查条件是否满足。如果模型判断条件尚未满足,Claude 会开始另一个轮次,而不是将控制权返回给您。一旦条件满足、模型判断条件不可能满足或轮次因[需要修复的错误](#errors-you-have-to-fix-clear-the-goal)失败时,目标会自动清除。

10 10 

11对于具有可验证的最终状态的实质性工作,使用目标:11对于具有可验证的最终状态的实质性工作,使用目标:

12 12 


135 评估如何工作135 评估如何工作

136</h2>136</h2>

137 137 

138`/goal` 是会话范围的[基于提示的 Stop hook](/docs/zh-CN/hooks#prompt-based-hooks)的包装器。每次 Claude 完成一个回合时,Claude Code 会将条件和到目前为止的对话发送到你配置的[小型快速模型](/docs/zh-CN/model-config),默认为 Claude API 上的 Haiku;在第三方提供商上,请查看你的[提供商页面](/docs/zh-CN/third-party-integrations)了解该平台的默认值。该模型返回三个判决之一,每个都带有简短的原因:138`/goal` 是会话范围的[基于提示词的 Stop hook](/docs/zh-CN/hooks#prompt-based-hooks)的包装器。每次 Claude 完成一个轮次时,Claude Code 会将条件和到目前为止的对话发送到您配置的[小型快速模型](/docs/zh-CN/model-config)。该模型返回三个判决之一,每个都带有简短的原因:

139 139 

140* **尚未满足**:Claude 继续工作,并将原因作为下一个回合的指导。140* **尚未满足**:Claude 继续工作,并将原因作为下一个回合的指导。

141* **已满足**:Claude Code 清除目标并在记录中记录一个已实现的条目。141* **已满足**:Claude Code 清除目标并在记录中记录一个已实现的条目。

headless.md +8 −0

Details

62| 自定义 agents | `--agents <json>` |62| 自定义 agents | `--agents <json>` |

63| 一个插件 | `--plugin-dir <path>`, `--plugin-url <url>` |63| 一个插件 | `--plugin-dir <path>`, `--plugin-url <url>` |

64 64 

65bare 模式还会限制会话运行期间发生的事情:

66 

67* **MCP 服务器**:只有在命令行中提供的服务器才会连接,例如通过 `--mcp-config`。在交互式会话中,除非您传递 `--ide`,否则 Claude Code 还会跳过自动 IDE 连接。

68* **系统提醒**:Claude 会收到您的提示词和工具结果,但不会收到 Claude Code 原本会随之添加的 [系统提醒](/docs/zh-CN/glossary#system-reminder)。例如,当 Claude 之前读取过的文件在磁盘上发生更改时,Claude 不会收到通知,也不会获得可用 skill 的列表,包括来自 `--add-dir` 文件夹的 skill。

69* **后台任务**:不会运行任何后台任务。达到 [超时](/docs/zh-CN/tools-reference#timeout-and-output-limits) 的命令会停止,而不是 [转入后台](/docs/zh-CN/tools-reference#background-commands)。

70 

71在 v2.1.286 之前,这些限制只部分生效:交互式 `--bare` 会话会连接普通会话会连接的 MCP 服务器,每个 `--bare` 会话都会发送系统提醒,并且后台任务仍然可用。

72 

65<Note>73<Note>

66 `--bare` 是脚本和 SDK 调用的推荐模式,将在未来版本中成为 `-p` 的默认值。74 `--bare` 是脚本和 SDK 调用的推荐模式,将在未来版本中成为 `-p` 的默认值。

67</Note>75</Note>

hooks.md +7 −17

Details

731 `/hooks` 菜单731 `/hooks` 菜单

732</h3>732</h3>

733 733 

734在 Claude Code 中键入 `/hooks` 来打开已配置 hooks 的只读浏览器。菜单显示每个 hook 事件及其配置的 hooks 计数,让您深入了解匹配器,并显示每个 hook 处理程序的完整详细信息。使用它来验证配置、检查 hook 来自哪个设置文件,或检查 hook 的命令、提示或 URL。734在 Claude Code 中键入 `/hooks` 来打开已配置 hook 的只读浏览器。列表为每个 hook 标注其来源,如用户设置、项目设置、本地设置、插件或当前会话。

735 735 

736菜单显示所有五种 hook 类型:`command`、`prompt`、`agent`、`http` 和 `mcp_tool`。每个 hook 都标有 `[type]` 前缀和指示其定义位置的源:736选择一个 hook 可查看其运行内容的完整文本以及其定义位置,如其设置文件的路径或其插件的名称。

737 737 

738* `User Settings`:来自 `~/.claude/settings.json`738要浏览所有 hook 事件,包括未配置任何 hook 的事件,请选择列表末尾的 `All events`。

739* `Project Settings`:来自 `.claude/settings.json`

740* `Local Settings`:来自 `.claude/settings.local.json`

741* `Plugin Hooks`:来自插件的 `hooks/hooks.json`

742* `Session Hooks`:为当前会话在内存中注册

743 

744选择 hook 打开详细视图,显示其事件、匹配器、类型、源文件以及完整的命令、提示或 URL。菜单是只读的:要添加、修改或删除 hooks,直接编辑设置 JSON 或要求 Claude 进行更改。

745 739 

746<h3 id="disable-or-remove-hooks">740<h3 id="disable-or-remove-hooks">

747 禁用或删除 hooks741 禁用或删除 hooks

748</h3>742</h3>

749 743 

750要删除 hook,从设置 JSON 文件中删除其条目。744要删除在设置文件中定义的 hook,请从该文件中删除其条目。

751 745 

752要临时禁用所有 hooks 而不删除它们,在设置文件中设置 `"disableAllHooks": true`。Claude Code 读取 [设置优先级](/docs/zh-CN/settings#settings-precedence) 应用后留下的值,所以项目的 `.claude/settings.json` 中的 `"disableAllHooks": false` 覆盖用户设置中的 `true`。要无论项目的设置如何关闭一次运行的 hooks,传递 `--settings '{"disableAllHooks": true}'`,这优先于项目和本地设置。没有办法在保持 hook 在配置中的同时禁用单个 hook。746要临时禁用所有 hooks 而不删除它们,在设置文件中设置 `"disableAllHooks": true`。Claude Code 读取 [设置优先级](/docs/zh-CN/settings#settings-precedence) 应用后留下的值,所以项目的 `.claude/settings.json` 中的 `"disableAllHooks": false` 覆盖用户设置中的 `true`。要无论项目的设置如何关闭一次运行的 hooks,传递 `--settings '{"disableAllHooks": true}'`,这优先于项目和本地设置。没有办法在保持 hook 在配置中的同时禁用单个 hook。

753 747 


1885 1879 

1886| 字段 | 类型 | 示例 | 描述 |1880| 字段 | 类型 | 示例 | 描述 |

1887| :- | :- | :- | :- |1881| :- | :- | :- | :- |

1888| `status` | string | `"completed"` | 前台子 agents 为 `"completed"`,后台子 agents 为 `"async_launched"`。从 v2.1.198 起,子 agents 默认在后台运行,因此省略的 `run_in_background` 也产生 `"async_launched"` |1882| `status` | string | `"completed"` | 前台子代理为 `"completed"`,后台子代理为 `"async_launched"`。子代理默认在后台运行,因此省略 `run_in_background` 的 Agent 调用也会产生 `"async_launched"` |

1889| `agentId` | string | `"a4d2c8f1e0b3a297"` | 子 agent 运行的标识符 |1883| `agentId` | string | `"a4d2c8f1e0b3a297"` | 子 agent 运行的标识符 |

1890| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | 子 agent 的最终文本块,或对于其报告通过 `SubagentHandback` 的子 agent,关于该交接的简短说明代替 |1884| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | 子 agent 的最终文本块,或对于其报告通过 `SubagentHandback` 的子 agent,关于该交接的简短说明代替 |

1891| `resolvedModel` | string | `"claude-sonnet-4-5"` | 子 agent 启动的模型,可能与请求的模型不同 |1885| `resolvedModel` | string | `"claude-sonnet-4-5"` | 子 agent 启动的模型,可能与请求的模型不同 |


2446| `quota_auto_resume_stale` | claude.ai 使用限制在您的计算机睡眠超过约 30 分钟时重置。Claude Code 等待您按 `Enter` 而不是继续。在更短的睡眠后它继续并改为触发 `quota_auto_resume_fired` |2440| `quota_auto_resume_stale` | claude.ai 使用限制在您的计算机睡眠超过约 30 分钟时重置。Claude Code 等待您按 `Enter` 而不是继续。在更短的睡眠后它继续并改为触发 `quota_auto_resume_fired` |

2447| `quota_auto_resume_disabled` | Claude Code 结束其对 claude.ai 使用限制的等待而不继续您的任务:[`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit) 关闭或重置在 Claude Code 自己启动的等待期间移动超过 24 小时,继续的任务继续命中限制,或继续在到达模型之前被阻止。当您按 `Esc` 或 `Ctrl+C` 或选择 **Don't continue automatically** 时不触发 |2441| `quota_auto_resume_disabled` | Claude Code 结束其对 claude.ai 使用限制的等待而不继续您的任务:[`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit) 关闭或重置在 Claude Code 自己启动的等待期间移动超过 24 小时,继续的任务继续命中限制,或继续在到达模型之前被阻止。当您按 `Esc` 或 `Ctrl+C` 或选择 **Don't continue automatically** 时不触发 |

2448 2442 

2449`agent_needs_input` 和 `agent_completed` 类型需要 Claude Code v2.1.198 或更高版本。

2450 

2451`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 类型需要 Claude Code v2.1.234 或更高版本。2443`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 类型需要 Claude Code v2.1.234 或更高版本。

2452 2444 

2453在终端会话中,沙箱命令的网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。2445在终端会话中,沙箱命令的网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。


4129}4121}

4130```4122```

4131 4123 

4132要从 PowerShell shell 形式命令引用项目根目录,请写入 `${CLAUDE_PROJECT_DIR}` 或 `$env:CLAUDE_PROJECT_DIR`。从 v2.1.198 开始,Claude Code 会将 PowerShell shell 形式命令中的 `${CLAUDE_PROJECT_DIR}`、`${CLAUDE_PLUGIN_ROOT}` 和 `${CLAUDE_PLUGIN_DATA}` 占位符重写为 PowerShell 的 `${env:NAME}` 形式,无论 hook 是在 `settings.json`、插件还是技能中定义。PowerShell 在解析后从导出的环境中解析该值,因此占位符在双引号字符串内有效,但在单引号字符串内无效,PowerShell 在单引号字符串中永远不会展开变量。4124要从 PowerShell shell 形式命令引用项目根目录,请写入 `${CLAUDE_PROJECT_DIR}` 或 `$env:CLAUDE_PROJECT_DIR`。Claude Code 会将 PowerShell shell 形式命令中的 `${CLAUDE_PROJECT_DIR}`、`${CLAUDE_PLUGIN_ROOT}` 和 `${CLAUDE_PLUGIN_DATA}` 占位符重写为 PowerShell 的 `${env:NAME}` 形式,无论 hook 是在 `settings.json`、插件还是 skill 中定义。PowerShell 随后在解析后从导出的环境中解析该值,因此占位符在双引号字符串内有效,但在单引号字符串内无效,PowerShell 在单引号字符串中永远不会展开变量。

4133 

4134在 v2.1.198 之前,此重写仅适用于插件 hooks。在早期版本上,`settings.json` hook 需要 `$env:` 形式或 [exec 形式](#exec-form-and-shell-form),其中 `${CLAUDE_PROJECT_DIR}` 在每个 `args` 元素中被替换,无论 hook 在何处定义。

4135 4125 

4136不要在 PowerShell hook 中写入裸 `$CLAUDE_PROJECT_DIR` 拼写。PowerShell 将其解析为未定义的本地变量,并将其解析为 `$null`,这会导致脚本路径没有其项目根前缀。Claude Code 不会重写该形式;它会在 [debug log](#debug-hooks) 中记录警告。4126不要在 PowerShell hook 中写入裸 `$CLAUDE_PROJECT_DIR` 拼写。PowerShell 将其解析为未定义的本地变量,并将其解析为 `$null`,这会导致脚本路径没有其项目根前缀。Claude Code 不会重写该形式;它会在 [debug log](#debug-hooks) 中记录警告。

4137 4127 

4138下面的示例显示了一个 `settings.json` hook,它使用 `$env:` 形式运行项目脚本,该形式在每个版本上都有效:4128下面的示例显示了一个 `settings.json` hook,它使用 `$env:` 形式运行项目脚本:

4139 4129 

4140```json theme={null}4130```json theme={null}

4141{4131{

hooks-guide.md +15 −14

Details

65 }65 }

66 ```66 ```

67 67 

68 你也可以通过在 CLI 中描述你想要的内容来要求 Claude 为你编写 hook。68 您也可以通过在 CLI 中描述您想要的内容来要求 Claude 为您编写 hook。

69 </Step>69 </Step>

70 70 

71 <Step title="验证配置">71 <Step title="验证配置">

72 输入 `/hooks` 打开 hooks 浏览器。你将看到所有可用 hook 事件的列表,每个配置了 hooks 的事件旁边都有一个计数。选择 `Notification` 以确认你的新 hook 出现在列表中。选择 hook 会显示其详细信息:事件、匹配器、类型、源文件和命令。72 在 Claude Code 输入框中输入 `/hooks` 以打开 hook 浏览器。您的新 hook 会出现在 `Notification` 下的列表中。

73 </Step>73 </Step>

74 74 

75 <Step title="测试 hook">75 <Step title="测试 hook">

76 按 `Esc` 返回 CLI。按 `Shift+Tab` 直到状态栏显示 `⏸ manual mode on`,要求 Claude 做需要权限的事情,然后切换离开终端。你应该会收到桌面通知。76 按 `Esc` 返回 CLI。按 `Shift+Tab` 直到状态栏显示 `⏸ manual mode on`,要求 Claude 做需要权限的事情,然后切换离开终端。您应该会收到桌面通知。

77 </Step>77 </Step>

78</Steps>78</Steps>

79 79 

80<Tip>

81 `/hooks` 菜单是只读的。要添加、修改或删除 hooks,请直接编辑你的设置 JSON 或要求 Claude 进行更改。

82</Tip>

83 

84<h2 id="what-you-can-automate">80<h2 id="what-you-can-automate">

85 你可以自动化什么81 你可以自动化什么

86</h2>82</h2>


97 93 

98每当 Claude 完成工作并需要你的输入时获得桌面通知,这样你可以切换到其他任务而无需检查终端。94每当 Claude 完成工作并需要你的输入时获得桌面通知,这样你可以切换到其他任务而无需检查终端。

99 95 

100此 hook 使用 `Notification` 事件,当 Claude 等待输入或权限时触发。请参阅[每个通知类型何时触发](/docs/zh-CN/hooks#notification)以了解确切的时间。下面的每个选项卡使用平台的原生通知命令。将其添加到 `~/.claude/settings.json`:96此 hook 使用 `Notification` 事件,Claude Code 会在 Claude 等待输入或权限时触发该事件。请参阅[每个通知类型何时触发](/docs/zh-CN/hooks#notification)以了解确切的时间。

97 

98下面的每个选项卡使用平台的原生通知命令。将其添加到 `~/.claude/settings.json`:

101 99 

102<Tabs>100<Tabs>

103 <Tab title="macOS">101 <Tab title="macOS">


120 ```118 ```

121 119 

122 <Accordion title="如果没有通知出现">120 <Accordion title="如果没有通知出现">

123 `osascript` 通过内置的 Script Editor 应用程序路由通知。如果 Script Editor 没有通知权限,命令会静默失败,macOS 不会提示你授予它。在 Terminal 中运行一次以使 Script Editor 出现在你的通知设置中:121 `osascript` 通过内置的 Script Editor 应用程序路由通知。如果 Script Editor 没有通知权限,命令会静默失败,macOS 也不会提示您授予该权限。

122 

123 在 Terminal 中运行一次以下命令,使 Script Editor 出现在您的通知设置中:

124 124 

125 ```bash theme={null}125 ```bash theme={null}

126 osascript -e 'display notification "test"'126 osascript -e 'display notification "test"'


180 ```180 ```

181 181 

182 <Accordion title="如果没有对话框出现">182 <Accordion title="如果没有对话框出现">

183 此命令打开一个对话框而不是屏幕角落的通知,因此对话框可能会在你的终端窗口后面打开。首先在 PowerShell 中直接测试该命令。如果你在 WSL 中运行 Claude Code,`powershell.exe` 必须通过 Windows 互操作在你的 `PATH` 上可用。183 此命令打开一个对话框而不是屏幕角落的通知,因此对话框可能会在您的终端窗口后面打开。首先在 PowerShell 中直接测试该命令。

184 

185 如果您在 WSL 中运行 Claude Code,`powershell.exe` 必须通过 Windows 互操作在您的 `PATH` 上可用。

184 </Accordion>186 </Accordion>

185 </Tab>187 </Tab>

186</Tabs>188</Tabs>


204 206 

205Claude Code 在终端和通过 Agent SDK 回答权限请求的 Claude Desktop、VS Code 扩展和其他主机中对 `permission_prompt` 的时间不同。请参阅[每个通知类型何时触发](/docs/zh-CN/hooks#notification)以了解两种时间。207Claude Code 在终端和通过 Agent SDK 回答权限请求的 Claude Desktop、VS Code 扩展和其他主机中对 `permission_prompt` 的时间不同。请参阅[每个通知类型何时触发](/docs/zh-CN/hooks#notification)以了解两种时间。

206 208 

207`agent_needs_input` 和 `agent_completed` 匹配器需要 Claude Code v2.1.198 或更高版本。

208 

209`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 匹配器需要 Claude Code v2.1.234 或更高版本。209`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 匹配器需要 Claude Code v2.1.234 或更高版本。

210 210 

211在终端会话中,沙箱命令的网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。211在终端会话中,沙箱命令的网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。

212 212 

213队友的终端设置问题的 `agent_needs_input` 需要 Claude Code v2.1.248 或更高版本。213队友的终端设置问题的 `agent_needs_input` 需要 Claude Code v2.1.248 或更高版本。

214 214 

215输入 `/hooks` 并选择 `Notification` 以确认 hook 已注册。有关完整的事件架构,请参阅 [Notification 参考](/docs/zh-CN/hooks#notification)。215在 Claude Code 输入框中输入 `/hooks`,并确认该 hook 出现在 `Notification` 下。

216 216 

217<h3 id="auto-format-code-after-edits">217<h3 id="auto-format-code-after-edits">

218 编辑后自动格式化代码218 编辑后自动格式化代码


1016 1016 

1017反面不成立:返回 `"allow"` 的 hook 不会绕过来自设置的拒绝规则,它也无法抑制标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具的提示或[你的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具在该设置到达 Claude Code 的会话中的提示。Hooks 在设置文件和插件的 `hooks/hooks.json` 中可以收紧限制,但不能放松它们超过权限规则允许的范围。1017反面不成立:返回 `"allow"` 的 hook 不会绕过来自设置的拒绝规则,它也无法抑制标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具的提示或[你的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具在该设置到达 Claude Code 的会话中的提示。Hooks 在设置文件和插件的 `hooks/hooks.json` 中可以收紧限制,但不能放松它们超过权限规则允许的范围。

1018 1018 

1019一个你安装的[mod](/docs/zh-CN/plugins/mods/overview)如果 hooks `tool.check` 可以批准你的 `PreToolUse` hook 阻止的调用,除非该 hook 在托管设置中。[使用 hooks 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了哪些规则优先于 mod。1019您安装的处理 `tool.check` 的 [mod](/docs/zh-CN/plugins/mods/overview) 可以批准被您的 `PreToolUse` hook 阻止的调用,除非该 hook 位于托管设置中。[使用 hooks 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了哪些规则优先于 mod。

1020 1020 

1021<h3 id="hook-not-firing">1021<h3 id="hook-not-firing">

1022 Hook 未触发1022 Hook 未触发


1055* 文件编辑通常会自动拾取。如果几秒钟后它们还没有出现,文件监视器可能错过了更改:重新启动你的会话以强制重新加载。1055* 文件编辑通常会自动拾取。如果几秒钟后它们还没有出现,文件监视器可能错过了更改:重新启动你的会话以强制重新加载。

1056* 验证你的 JSON 有效:不允许尾随逗号和注释1056* 验证你的 JSON 有效:不允许尾随逗号和注释

1057* 确认设置文件在正确的位置:`.claude/settings.json` 用于项目 hooks,`~/.claude/settings.json` 用于全局 hooks1057* 确认设置文件在正确的位置:`.claude/settings.json` 用于项目 hooks,`~/.claude/settings.json` 用于全局 hooks

1058* 如果菜单显示 `Only hooks from managed settings run here`,说明您的组织设置了 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly)。您的用户、项目和本地设置文件中的 hook 不会运行,也不会列出

1058 1059 

1059<h3 id="stop-hook-hits-the-block-cap">1060<h3 id="stop-hook-hits-the-block-cap">

1060 Stop hook 达到阻止上限1061 Stop hook 达到阻止上限

Details

394* 在空提示上按 `Escape`、`Backspace` 或 `Ctrl+U` 退出394* 在空提示上按 `Escape`、`Backspace` 或 `Ctrl+U` 退出

395* 将以 `!` 开头的文本粘贴到空提示中会自动进入 shell 模式,与输入的 `!` 行为匹配395* 将以 `!` 开头的文本粘贴到空提示中会自动进入 shell 模式,与输入的 `!` 行为匹配

396 396 

397除非你的会话是[严格沙箱模式](/docs/zh-CN/sandboxing#the-unsandboxed-retry-escape-hatch)下列出的会话之一,即使你已启用沙箱,你在 shell 模式中输入的命令也会在[沙箱](/docs/zh-CN/sandboxing)外运行,因为沙箱适用于 Claude 运行的命令。397除非您的会话是[严格沙箱模式](/docs/zh-CN/sandboxing#turn-off-the-retry-with-strict-sandbox-mode)下列出的会话之一,即使您已启用沙箱隔离,您在 shell 模式中输入的命令也会在[沙箱](/docs/zh-CN/sandboxing)外运行,因为沙箱适用于 Claude 运行的命令。

398 398 

399一旦命令输出出现在记录中,Claude 会自动响应,因此你可以运行 `! npm test` 并获得失败的解释,无需第二个提示。响应成本与发送普通提示相同。要恢复之前的行为,其中输出被添加到上下文而不响应,请在 `settings.json` 中将 [`respondToBashCommands`](/docs/zh-CN/settings-reference#respondtobashcommands) 设置为 `false`。在 v2.1.186 之前,shell 模式始终将输出添加到上下文而不响应。399一旦命令输出出现在记录中,Claude 会自动响应,因此你可以运行 `! npm test` 并获得失败的解释,无需第二个提示。响应成本与发送普通提示相同。要恢复之前的行为,其中输出被添加到上下文而不响应,请在 `settings.json` 中将 [`respondToBashCommands`](/docs/zh-CN/settings-reference#respondtobashcommands) 设置为 `false`。在 v2.1.186 之前,shell 模式始终将输出添加到上下文而不响应。

400 400 


406 406 

407已发送和排队的消息在 Claude 开始响应之前以灰色显示,因此您可以看出 Claude 还没有开始处理哪些消息。407已发送和排队的消息在 Claude 开始响应之前以灰色显示,因此您可以看出 Claude 还没有开始处理哪些消息。

408 408 

409如果您从[连接的 IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server)或[差异面板](#diff-panel)排队带有选择的消息,它会保留您按 `Enter` 时的选择,无论您之后选择什么。409如果您排队的消息附带了来自[连接的 IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server)的选择,它会保留您按 `Enter` 时的选择,无论您之后选择什么。

410 410 

411<h3 id="when-claude-code-sends-what-you-queued">411<h3 id="when-claude-code-sends-what-you-queued">

412 Claude Code 何时发送您排队的内容412 Claude Code 何时发送您排队的内容


422如果您在消息前排队了 `!` shell 命令,该快捷键会中断轮次。否则,轮次发生的情况取决于按下快捷键时 Claude 正在做什么:422如果您在消息前排队了 `!` shell 命令,该快捷键会中断轮次。否则,轮次发生的情况取决于按下快捷键时 Claude 正在做什么:

423 423 

424* 运行 shell 命令、子代理或其他可以移到[后台](#background-bash-commands)的工作:该工作移到后台并继续运行,Claude 在同一轮次中读取您的消息424* 运行 shell 命令、子代理或其他可以移到[后台](#background-bash-commands)的工作:该工作移到后台并继续运行,Claude 在同一轮次中读取您的消息

425* 仅写入响应,或运行无法移到后台的内容:Claude Code 中断轮次并接下来发送您的消息。在 v2.1.281 之前,该快捷键在两种情况下都中断轮次425* 仅撰写回复,或运行无法移到后台的内容:Claude Code 中断轮次并接下来发送您的消息。在 v2.1.281 之前,该快捷键在两种情况下都中断轮次

426 426 

427在 [shell 模式](#shell-mode-with-prefix)中,该快捷键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达并排队草稿;`Ctrl+X Ctrl+S` 在任何终端中都有效。两个快捷键都是 [`chat:sendNow` 操作](/docs/zh-CN/keybindings#chat-actions)的绑定。427在 [shell 模式](#shell-mode-with-prefix)中,该快捷键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达并排队草稿;`Ctrl+X Ctrl+S` 在任何终端中都有效。两个快捷键都是 [`chat:sendNow` 操作](/docs/zh-CN/keybindings#chat-actions)的绑定。

428 428 

429按 `Esc` 中断轮次而不提交您的草稿。Claude Code 保留您排队的内容并立即发送。429按 `Esc` 中断轮次而不提交您的草稿。Claude Code 保留您排队的内容并立即发送。

430 430 

431Claude Code 在您发送某些命令时立即运行它们,而不是排队它们,其中包括 `/model`、`/effort` 和 `/fast`。这三个命令各改变一个设置:模型、努力级别或快速模式。Claude Code 是将新设置应用于 Claude 已在处理的轮次,还是仅从您的下一轮次应用,因命令而异:431Claude Code 在您发送某些命令时立即运行它们,而不是排队它们,其中包括 `/model`、`/effort` 和 `/fast`。这三个命令各改变一个设置:模型、effort 级别或快速模式。Claude Code 是将新设置应用于 Claude 已在处理的轮次,还是仅从您的下一轮次应用,因命令而异:

432 432 

433* [`/model`](/docs/zh-CN/model-config#setting-your-model):一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#switching-models)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求433* [`/model`](/docs/zh-CN/model-config#setting-your-model):一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#switching-models)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求

434* [`/effort`](/docs/zh-CN/model-config#adjust-effort-level):一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求434* [`/effort`](/docs/zh-CN/model-config#adjust-effort-level):一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求


615 615 

616如果 Claude Code 移除了任何内容,该 Enter 将不发送任何内容。清理后的提示词会返回到输入框中,并显示类似 `Removed 3 invisible characters · review and press Enter to send` 的通知,再次按 Enter 会发送显示的文本。616如果 Claude Code 移除了任何内容,该 Enter 将不发送任何内容。清理后的提示词会返回到输入框中,并显示类似 `Removed 3 invisible characters · review and press Enter to send` 的通知,再次按 Enter 会发送显示的文本。

617 617 

618当您在命令行上传递提示词时,例如 `claude "fix the login bug"`,或将其管道传输到交互式会话中,Claude Code 不会等待第二次 Enter。它会移除这些字符,显示通知,并发送清理后的提示词。如果清理后的提示词以 `/` 开头,Claude Code 会将其放在输入框中供您审查和发送。618当您在命令行上传递提示词时,例如 `claude "fix the login bug"`,Claude Code 不会等待第二次 Enter。它会移除这些字符,显示通知,并发送清理后的提示词。如果清理后的提示词将以 `/` 开头,Claude Code 会改为将其放在输入框中供您审查和发送。

619 619 

620<h2 id="review-changes-with-/diff">620<h2 id="review-changes-with-/diff">

621 使用 /diff 查看更改621 使用 /diff 查看更改

622</h2>622</h2>

623 623 

624运行 `/diff` 可以在不离开 Claude Code 的情况下查看工作树中的更改。您可以看到 Claude 迄今为止所做的编辑以及您尚未提交的任何其他内容。624运行 `/diff` 可以在不离开 Claude Code 的情况下查看工作树中的更改。您可以看到 Claude 迄今为止所做的编辑以及您尚未提交的任何其他内容。`/diff` 打开的内容取决于当前启用的渲染器:

625 625 

626在 `/diff` 从 git 读取的更改中,子模块显示为单个条目,仅当它指向的提交发生更改时才会出现;对子模块内文件的编辑不会显示在那里。626* **[全屏渲染](/docs/zh-CN/fullscreen)**:[diff 面板](#diff-panel)会在对话旁边打开。该面板保持打开状态,并在您继续工作时更新。

627* **经典渲染器**:[diff 对话框](#diff-dialog)会在输入框上方打开,您阅读完后可以关闭它。

627 628 

628在[全屏渲染](/docs/zh-CN/fullscreen)中,`/diff` 在对话旁边打开[差异面板](#diff-panel),该面板保持打开状态并在您继续工作时更新。在经典渲染器中,`/diff` 在提示符的位置打开[差异查看器](#diff-viewer),您阅读完后可以关闭它。629面板和对话框都来自 `cc-plugin-diff`,它是 [Claude Code 内置的 mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 之一。如果您在 `/plugin` 中禁用该 mod,`/diff` 会改为打开 Claude Code 早期的面板和 [diff 查看器](/docs/zh-CN/keybindings#diff-actions)。

630 

631在 `/diff` 从 git 读取的更改中,子模块显示为单个条目,仅当它指向的提交发生更改时才会出现;对子模块内文件的编辑不会显示在那里。一旦 Claude 编辑了文件,面板和对话框还会提供每个轮次编辑的视图。这些轮次视图来自 Claude 的文件编辑而不是 git,因此 Claude 通过 shell 命令所做的更改仅显示在 `Current`(即工作树视图)下。

629 632 

630<h3 id="diff-panel">633<h3 id="diff-panel">

631 Diff panel634 Diff panel

632</h3>635</h3>

633 636 

634差异面板列出了更改的文件及其添加和删除的行数,并在列表下方显示每个文件的差异。Claude Code 在 Claude 编辑文件或运行 shell 命令时刷新它。要关闭它,请再次运行 `/diff` 或单击其标题中的 `✕`。637diff 面板列出了更改的文件及其添加和删除的行数,并在列表下方显示每个文件的 diff。Claude Code 在 Claude 编辑文件或运行 shell 命令时刷新它。要关闭面板,请再次运行 `/diff` 或单击其标题中的 `✕`。

635 638 

636要使用该面板,您需要:639要使用该面板,您需要:

637 640 

638* [全屏渲染](/docs/zh-CN/fullscreen)641* [全屏渲染](/docs/zh-CN/fullscreen)

639* 一个 git 仓库642* 一个 git 仓库

640* 至少 110 列宽的终端643* 至少 110 列宽的终端

641* Claude Code v2.1.260 或更高版本644* Claude Code v2.1.287 或更高版本

642 

643当面板无法打开时,`/diff` 会打开差异查看器或告诉您原因。

644 645 

645一旦 Claude 开始编辑文件,如果您的终端至少 144 列宽,该面板也会自动打开。在您自己使用 `/diff` 打开它后,后续会话会在 Claude 在任何足够宽的终端中编辑文件时立即打开它。关闭面板后,它在此会话和后续会话中保持关闭状态,直到您再次运行 `/diff`。646一旦 Claude 开始编辑文件,如果您的终端至少 144 列宽,该面板也会自动打开。在您自己使用 `/diff` 打开它后,后续会话会在 Claude 在任何足够宽的终端中编辑文件时立即打开它。关闭面板后,它在此会话和后续会话中保持关闭状态,直到您再次运行 `/diff`。

646 647 

647当面板打开时,您可以:648当面板打开时,您可以:

648 649 

649* **跳转到文件**:单击列表中的其行。使用鼠标滚轮滚动面板。当文件列表本身太长无法容纳时,使用 `Alt+Up` 和 `Alt+Down` 或 `Ctrl+Up` 和 `Ctrl+Down` 滚动它。650* **跳转到文件**:单击列表中的其行。使用鼠标滚轮滚动面板。当文件列表本身太长无法容纳时,使用 `Alt+Up` 和 `Alt+Down` 或 `Ctrl+Up` 和 `Ctrl+Down` 滚动它。

650* **询问 Claude 关于特定行的问题**:在面板中用鼠标选择它们。Claude Code 将选择附加到您的下一个提示,并在您发送之前在输入旁边显示行数。651* **询问 Claude 关于某个文件的更改**:单击文件 diff 上方文件名右侧的 `ask`。Claude Code 会将该文件的 diff 附加到您的下一个提示词,在您发送该提示词之前,按钮会显示为 `asked ✓`。对第二个文件进行询问会替换第一个。

651 * 要在不选择的情况下发送提示,请将光标移动到行数指示器之后,然后按 `Backspace` 删除它。需要 Claude Code v2.1.271 或更高版本。652* **显示某个轮次的编辑**:单击面板标题中的 `source` 选择器,然后使用 `Up` 和 `Down` 选择一个轮次并按 `Enter`。轮次标记为 `T1`、`T2` 等。该选择器在 Claude 编辑文件后出现,选择 `Current` 可返回工作树。

652* **显示面板遗漏的文件**:列表跳过测试文件和生成的文件,并将此会话之前的更改折叠为底部的一行。单击任一计数行以展开它。653* **显示面板遗漏的文件**:列表跳过测试文件和生成的文件,并将此会话之前的更改折叠为底部的一行。单击任一计数行以展开它。

653* **更改面板比较的内容**:按 `Ctrl+X B` 在此会话的更改、您的未提交更改作为一个列表,以及自您的分支从默认分支分离以来的所有内容之间循环。Claude Code 为每个项目记住该选择。654* **更改面板比较的内容**:按 `Ctrl+X B` 在此会话的更改、您的未提交更改作为一个列表,以及自您的分支从默认分支分离以来的所有内容之间循环。Claude Code 为每个仓库记住该选择。

654 655 

655要将快捷键绑定到这些操作,请参阅 [Diff panel actions](/docs/zh-CN/keybindings#diff-panel-actions)。656要重新绑定用于滚动文件列表或更改比较内容的快捷键,请参阅 [Diff panel actions](/docs/zh-CN/keybindings#diff-panel-actions)。

656 657 

657<h3 id="diff-viewer">658<h3 id="diff-dialog">

658 Diff viewer659 Diff dialog

659</h3>660</h3>

660 661 

661差异查看器取代提示符,直到您关闭它。其**当前**视图显示您来自 git 的未提交更改,或者当没有更改时,显示您的分支在默认分支之上添加的内容。查看器还为 Claude 编辑文件的每个提示后的轮次提供一个轮次视图,仅显示这些编辑。Claude Code 从 Claude 的文件编辑而不是从 git 构建轮次视图,因此 Claude 通过 shell 命令所做的更改仅显示在当前视图下。662diff 对话框以带边框的区块形式在输入框上方打开,列出您更改的文件及其添加和删除的行数。它将这些文件与 `HEAD` 进行比较,或者与您上次为此仓库[在 diff 面板中选择](#diff-panel)的内容进行比较。

662 663 

663在查看器中使用这些快捷键:664一旦 Claude 编辑了文件,列表上方会出现一个 `source` 选择器。对于每个促使 Claude 编辑文件的提示词,它都会提供一个轮次视图,标记为 `T1`、`T2` 等。轮次视图仅显示该轮次的编辑,选择 `Current` 可返回工作树。

664 665 

665* **左和右**:在当前视图和轮次视图之间移动。666在对话框中使用这些快捷键:

666* **上和下**:选择一个文件。

667* **Enter**:打开所选文件的差异。使用上和下或 PageUp 和 PageDown 滚动它。

668* **Esc**:从文件的差异返回到列表,或从列表关闭查看器。

669 667 

670要重新绑定这些快捷键,请参阅 [Diff actions](/docs/zh-CN/keybindings#diff-actions)。668* **上和下**:选择一个文件。

669* **Enter**:打开所选文件的 diff。使用上和下或 PageUp 和 PageDown 滚动它。

670* **Esc**:从文件的 diff 返回到列表,或从列表关闭对话框。

671* **Tab**:移动到 `source` 选择器,然后使用上和下选择 `Current` 或某个轮次视图并按 Enter。在文件的 diff 中,Tab 会移动到 `ask` 按钮。按 Enter 可将该文件的 diff 附加到您的下一个提示词。

671 672 

672<h2 id="side-questions-with-/btw">673<h2 id="side-questions-with-/btw">

673 使用 /btw 提出附加问题674 使用 /btw 提出附加问题


727 728 

728当你离开终端后返回时,Claude Code 会显示一行简短的回顾,说明到目前为止会话中发生了什么。一旦距离上次完成的轮次至少过了三分钟,且终端处于未聚焦状态,回顾就会在后台生成,这样当你切换回来时就已准备好。只有当会话至少有三个轮次时,回顾才会出现,且永远不会连续出现两次。729当你离开终端后返回时,Claude Code 会显示一行简短的回顾,说明到目前为止会话中发生了什么。一旦距离上次完成的轮次至少过了三分钟,且终端处于未聚焦状态,回顾就会在后台生成,这样当你切换回来时就已准备好。只有当会话至少有三个轮次时,回顾才会出现,且永远不会连续出现两次。

729 730 

730运行 `/recap` 可按需生成摘要。Claude Code 将自动回顾和 `/recap` 输出都限制在 400 个字符以内。要关闭自动回顾,请打开 `/config` 并关闭**会话回顾**。731运行 `/recap` 可按需生成摘要。它仅在您亲自请求时运行。当它出现在从 Slack、Teams 或项目线程转发的消息中,或出现在 Routine 发送的提示词中时,您会收到一条[通知](/docs/zh-CN/errors#recap-only-runs-when-you-ask-for-it-yourself),而不是回顾。

731 732 

732会话回顾在所有计划和提供商上默认启用。在非交互模式下,回顾始终被跳过。733会话回顾在所有计划和提供商上默认启用。要关闭自动回顾,请打开 `/config` 并关闭**会话回顾**。自动回顾永远不会在非交互模式下出现。Claude Code 将自动回顾和 `/recap` 输出都限制在 400 个字符以内。

733 734 

734<h2 id="wait-for-a-usage-limit-to-reset">735<h2 id="wait-for-a-usage-limit-to-reset">

735 等待使用限制重置736 等待使用限制重置


737 738 

738当 claude.ai [使用限制](/docs/zh-CN/errors#youve-hit-your-session-limit) 在任务中途停止 Claude 时,Claude Code 会在打开的会话中等待,并在限制重置后自动继续该任务。在使用 claude.ai 订阅登录的交互式会话中,自动继续功能默认处于启用状态。需要 Claude Code v2.1.234 或更高版本。739当 claude.ai [使用限制](/docs/zh-CN/errors#youve-hit-your-session-limit) 在任务中途停止 Claude 时,Claude Code 会在打开的会话中等待,并在限制重置后自动继续该任务。在使用 claude.ai 订阅登录的交互式会话中,自动继续功能默认处于启用状态。需要 Claude Code v2.1.234 或更高版本。

739 740 

740Claude Code 等待时,会话底部的一行显示何时继续:741Claude Code 等待时,会话底部的几行会显示您的限制何时重置以及 Claude 何时继续:

741 742 

742```text theme={null}743```text theme={null}

743Usage limit reached · continuing automatically at 3:45pm · esc to cancel744Usage limit reached · limit resets 3:45pm

745Continuing automatically at 3:45pm · esc to cancel

744```746```

745 747 

748这两行在这些文字之后都可能带有更多内容,例如第一行中的帮助链接,或第二行中的 `/usage-credits to continue now`。当等待自动开始时,对话中也会记录一行 `Usage limit reached · continuing automatically at 3:45pm · esc to cancel`。

749 

746保持会话打开。接下来发生的情况取决于等待如何结束:750保持会话打开。接下来发生的情况取决于等待如何结束:

747 751 

748* **在重置时**:该行显示 `continuing shortly`,然后显示 `Usage limit reset · continuing automatically`,Claude Code 向 Claude 发送一个固定提示以从停止的地方继续任务。它不会重新发送您的最后一条消息。752* **在重置时**:第二行变为 `Continuing shortly · esc to cancel`。然后对话中出现 `Usage limit reset · continuing automatically`,Claude Code 提示 Claude 从停止的地方继续任务。它不会重新发送您的最后一条消息。

749* **计算机睡眠后**:如果睡眠超过约 30 分钟,并且限制在睡眠期间重置,该行显示 `Your usage limit has reset · press enter to continue`。按 `Enter` 继续。睡眠时间较短后,Claude Code 会自动继续。753* **计算机睡眠后**:如果睡眠超过约 30 分钟,并且限制在睡眠期间重置,第一行显示 `Your usage limit has reset`,第二行显示 `Press enter to continue`。按 `Enter` 继续。如果睡眠时间较短,或睡眠在重置之前结束,Claude Code 会自动继续。

750* **提前**:当您使用 `/usage-credits` 完成添加 [使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)、在 `/upgrade` 后重新登录或在等待期间使用 `/model` 切换模型时,Claude Code 会检查使用情况是否再次可用,如果可用则立即继续。它不会在您在浏览器中自行进行的升级或购买后进行检查。在 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 和其他在不同模型上运行计划模式的模型设置下,Claude Code 会等待重置。754* **提前**:当您使用 `/usage-credits` 完成添加 [使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)、在 `/upgrade` 后重新登录或在等待期间使用 `/model` 切换模型时,Claude Code 会检查使用情况是否再次可用,如果可用则立即继续。它不会在您在浏览器中自行进行的升级或购买后进行检查。在 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 和其他在不同模型上运行计划模式的模型设置下,Claude Code 会等待重置。

751 755 

752继续的任务像任何其他轮次一样运行。Claude Code 仍然照常要求 [权限](/docs/zh-CN/permissions),因此任务可能在您离开时在提示处停止。如果再次达到限制,Claude Code 最多会自动重新启动等待两次,然后停止并显示 `Automatic continue stopped after repeated usage-limit hits · /rate-limit-options to try again`。756继续的任务像任何其他轮次一样运行。Claude Code 仍然照常要求 [权限](/docs/zh-CN/permissions),因此任务可能在您离开时在提示处停止。如果再次达到限制,Claude Code 最多会自动重新启动等待两次,然后停止并显示 `Automatic continue stopped after repeated usage-limit hits · /rate-limit-options to try again`。


755 取消等待759 取消等待

756</h3>760</h3>

757 761 

758在空提示处按 `Esc`,或在显示该行时按 `Ctrl+C`,或运行 [`/rate-limit-options`](/docs/zh-CN/commands#all-commands) 并选择 **Don't continue automatically**。Claude Code 会确认一行以 `Automatic continue cancelled` 开头的消息。762在显示这些行时,于输入框为空时按 `Esc` 或按 `Ctrl+C`,或运行 [`/rate-limit-options`](/docs/zh-CN/commands#all-commands) 并选择 **Don't continue automatically**。Claude Code 会显示一行以 `Automatic continue cancelled` 开头的消息进行确认。

759 763 

760取消后,在您发送提示或再次从 `/rate-limit-options` 中选择以 **Wait here, then continue automatically** 开头的行之前,不会继续任何操作。Claude Code 不会为该重置窗口自动启动等待;下一个重置窗口会重新开始。764取消后,在您发送提示或再次从 `/rate-limit-options` 中选择以 **Wait here, then continue automatically** 开头的行之前,不会继续任何操作。Claude Code 不会为该重置窗口自动启动等待;下一个重置窗口会重新开始。

761 765 

762在这些情况下,等待也会在不继续任务的情况下结束:766在这些情况下,等待也会在不继续任务的情况下结束:

763 767 

764* **您发送提示**:Claude Code 运行您的提示而不是等待。768* **您发送提示词**:Claude Code 发送您的提示词而不是等待。如果您的提示词也达到了限制,它会保留在对话中,并且 Claude Code 会重新开始等待。

765* **您退出 Claude Code**:当您恢复会话时,等待不会重新启动。769* **您退出 Claude Code**:当您恢复会话时,等待不会重新启动。

766* **对话转手**:您使用 `/login` 切换账户、清除或倒带对话、`/resume` 另一个会话、使用 `/teleport` 拉取一个会话、使用 `/tui` 重新启动,或将会话交给 Claude Desktop、后台会话或云端。770* **对话转手**:您使用 `/login` 切换账户、清除或倒带对话、`/resume` 另一个会话、使用 `/teleport` 拉取一个会话、使用 `/tui` 重新启动,或将会话交给 Claude Desktop、后台会话或云端。

767* **设置关闭,或重置超过 24 小时**:这仅结束 Claude Code 自动启动的等待。您从 `/rate-limit-options` 中选择的等待会继续倒计时。771* **设置关闭,或重置超过 24 小时**:这仅结束 Claude Code 自动启动的等待。您从 `/rate-limit-options` 中选择的等待会继续倒计时。

keybindings.md +7 −3

Details

62| `Attachments` | 选择对话框中的图像附件导航 |62| `Attachments` | 选择对话框中的图像附件导航 |

63| `Footer` | 页脚指示器导航(任务、团队、差异、工件) |63| `Footer` | 页脚指示器导航(任务、团队、差异、工件) |

64| `MessageSelector` | 回退和总结对话框消息选择 |64| `MessageSelector` | 回退和总结对话框消息选择 |

65| `DiffDialog` | 差异查看器导航 |65| `DiffDialog` | [diff 查看器](#diff-actions)导航 |

66| `DiffPanel` | [差异面板](/docs/zh-CN/interactive-mode#diff-panel)打开 |66| `DiffPanel` | [差异面板](/docs/zh-CN/interactive-mode#diff-panel)打开 |

67| `ModelPicker` | 模型选择器工作量级别 |67| `ModelPicker` | 模型选择器工作量级别 |

68| `EffortSlider` | 由 `/effort` 打开的工作量滑块 |68| `EffortSlider` | 由 `/effort` 打开的工作量滑块 |


334 Diff 操作334 Diff 操作

335</h3>335</h3>

336 336 

337这些操作仅作用于 Claude Code 早期的 diff 查看器:在您于 `/plugin` 中禁用 [`cc-plugin-diff` mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 后,`/diff` 会在 [全屏渲染](/docs/zh-CN/fullscreen) 之外打开该查看器。启用该 mod 时,`/diff` 会改为打开 [diff 对话框](/docs/zh-CN/interactive-mode#diff-dialog)。无论哪种情况,命名这些操作的 `keybindings.json` 都能正常加载而不会报错。

338 

337在 `DiffDialog` 上下文中可用的操作:339在 `DiffDialog` 上下文中可用的操作:

338 340 

339| 操作 | 默认 | 描述 |341| 操作 | 默认 | 描述 |


364 Diff panel 操作366 Diff panel 操作

365</h3>367</h3>

366 368 

367用于 [diff 面板](/docs/zh-CN/interactive-mode#diff-panel) 的操作,`/diff` 在全屏渲染中打开。`app:cycleDiffBase` 在 `DiffPanel` 上下文中,在面板打开时处于活动状态;其他的在 `Global` 中。该面板需要 Claude Code v2.1.260 或更高版本。369用于 [diff 面板](/docs/zh-CN/interactive-mode#diff-panel) 的操作,`/diff` 在全屏渲染中打开。`app:cycleDiffBase` 在 `DiffPanel` 上下文中,在面板打开时处于活动状态;其他的在 `Global` 中。

370 

371内置的 [`cc-plugin-diff` mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 绘制此面板,并处理 `app:cycleDiffBase`、`app:diffFileListUp` 和 `app:diffFileListDown`。`app:toggleReplTab`、`app:toggleDiffNoiseFilter` 和 `app:toggleDiffPreSession` 仅作用于 Claude Code 早期的面板,在您于 `/plugin` 中禁用 `cc-plugin-diff` 后,`/diff` 会打开该面板。

368 372 

369| 操作 | 默认 | 描述 |373| 操作 | 默认 | 描述 |

370| :- | :- | :- |374| :- | :- | :- |

371| `app:toggleReplTab` | (未绑定) | 打开或关闭 diff 面板,与运行 `/diff` 相同 |375| `app:toggleReplTab` | (未绑定) | 打开或关闭 diff 面板 |

372| `app:cycleDiffBase` | Ctrl+X B | 循环面板的比较基础:此会话、未提交、然后分支 |376| `app:cycleDiffBase` | Ctrl+X B | 循环面板的比较基础:此会话、未提交、然后分支 |

373| `app:diffFileListUp` | Ctrl+Up, Meta+Up | 当面板的文件列表溢出时向上滚动 |377| `app:diffFileListUp` | Ctrl+Up, Meta+Up | 当面板的文件列表溢出时向上滚动 |

374| `app:diffFileListDown` | Ctrl+Down, Meta+Down | 当面板的文件列表溢出时向下滚动 |378| `app:diffFileListDown` | Ctrl+Down, Meta+Down | 当面板的文件列表溢出时向下滚动 |

Details

204 204 

205在大型代码库中,查找符号的定义或使用位置可能需要许多文件读取和 grep 调用。[代码智能插件](/docs/zh-CN/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 和其他常见语言的插件。在 VS Code 扩展或桌面应用中,请按照[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)进行安装。在终端中,运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容来安装 TypeScript 插件:

208 208 

209```shell theme={null}209```shell theme={null}

210/plugin install typescript-lsp@claude-plugins-official210/plugin install typescript-lsp@claude-plugins-official

Details

73 73 

74流式传输推理响应。Claude Code 在流到达时读取流,因此如果您的网关在中继之前缓冲完整响应,Claude Code 会停滞。74流式传输推理响应。Claude Code 在流到达时读取流,因此如果您的网关在中继之前缓冲完整响应,Claude Code 会停滞。

75 75 

76传递每个响应的完整事件序列,不要丢弃、重复或重新排序事件。当事件引用的内容块的 `content_block_start` 从未到达,或块的 `content_block_stop` 已经到达时,Claude Code 会在该事件处停止读取流,而不是应用它,因此重复的 `content_block_stop` 不能运行相同的工具调用两次。[上述响应可能不完整](/docs/zh-CN/errors#the-response-above-may-be-incomplete)描述了用户看到的内容,在 `部分响应从未到达` 和 `响应流格式错误` 变体下。76传递每个响应的完整事件序列,不要丢弃、重复或重新排序事件。当 Amazon Bedrock 护栏拦截回复时,原样转发它发送的事件,即使这些事件引用的内容块的 `content_block_stop` 已经到达。[AWS Guardrails](/docs/zh-CN/amazon-bedrock#aws-guardrails) 描述了该回复如何结束。当任何其他事件引用的内容块的 `content_block_start` 从未到达,或块的 `content_block_stop` 已经到达时,Claude Code 会在该事件处停止读取流,而不是应用它,因此重复的 `content_block_stop` 不能运行相同的工具调用两次。[上述响应可能不完整](/docs/zh-CN/errors#the-response-above-may-be-incomplete)描述了用户看到的内容,见 `Part of the response never arrived` 和 `The response stream was malformed` 变体。

77 77 

78在结束正文之前,通过每个响应的最终 `message_delta` 和 `message_stop` 事件中继每个响应。在 `message_delta` 携带 `stop_reason` 之后结束的正文,没有内容块仍然打开,该帧之后没有内容块事件,即使 `message_stop` 缺失,也计为完整。您的网关更早结束的正文,一旦内容块已启动,就被视为与断开连接相同:[自动重试](/docs/zh-CN/errors#automatic-retries)说明 Claude Code 何时重新发出请求,[上述响应可能不完整](/docs/zh-CN/errors#the-response-above-may-be-incomplete)涵盖了一旦可见内容到达它保留的内容。Claude Code 保留 `message_delta` 传递的 `stop_reason`,因此稍后仅使用情况的 `message_delta`,其 `delta` 具有 `stop_reason: null` 或没有 `stop_reason` 键,不会清除它。78在结束正文之前,通过每个响应的最终 `message_delta` 和 `message_stop` 事件中继每个响应。在 `message_delta` 携带 `stop_reason` 之后结束的正文,没有内容块仍然打开,该帧之后没有内容块事件,即使 `message_stop` 缺失,也计为完整。您的网关更早结束的正文,一旦内容块已启动,就被视为与断开连接相同:[自动重试](/docs/zh-CN/errors#automatic-retries)说明 Claude Code 何时重新发出请求,[上述响应可能不完整](/docs/zh-CN/errors#the-response-above-may-be-incomplete)涵盖了一旦可见内容到达它保留的内容。Claude Code 保留 `message_delta` 传递的 `stop_reason`,因此稍后仅使用情况的 `message_delta`,其 `delta` 具有 `stop_reason: null` 或没有 `stop_reason` 键,不会清除它。

79 79 


242| 功能 | 请求头和请求体对 | 破坏时的症状 | 补救 |242| 功能 | 请求头和请求体对 | 破坏时的症状 | 补救 |

243| :- | :- | :- | :- |243| :- | :- | :- | :- |

244| [自适应推理](/docs/zh-CN/model-config#adjust-effort-level) | 无 beta 请求头。Claude Code 为 Claude 4.6 及更高版本发送 `thinking: {"type": "adaptive"}`,并将它不识别的模型名称(如 gateway 别名)视为接收该字段的当前模型 | 当上游模型构建不接受它时,命名 `thinking` 字段或 `adaptive` 标签的 `400` | 升级上游。在 Opus 4.6 和 Sonnet 4.6 上,开发者可以改为设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` |244| [自适应推理](/docs/zh-CN/model-config#adjust-effort-level) | 无 beta 请求头。Claude Code 为 Claude 4.6 及更高版本发送 `thinking: {"type": "adaptive"}`,并将它不识别的模型名称(如 gateway 别名)视为接收该字段的当前模型 | 当上游模型构建不接受它时,命名 `thinking` 字段或 `adaptive` 标签的 `400` | 升级上游。在 Opus 4.6 和 Sonnet 4.6 上,开发者可以改为设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` |

245| [上下文管理](https://platform.claude.com/docs/en/build-with-claude/context-editing) | 上下文管理 beta 请求头与 `context_management` 请求体字段配对 | `400` 带有 `Extra inputs are not permitted`。常见于 gateway 接受 Anthropic 格式请求但将其转发到 Amazon Bedrock 时 | 转发两者,或 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/docs/zh-CN/env-vars) |245| [上下文管理](https://platform.claude.com/docs/en/build-with-claude/context-editing) | 上下文管理 beta 请求头与 `context_management` 请求体字段配对 | `400` 带有 `Extra inputs are not permitted`。常见于网关接受 Anthropic 格式请求但将其转发到 Amazon Bedrock 时 | 转发两者,或 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities) |

246| [扩展上下文](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model)和[交错思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) | 仅 Beta 请求头,无请求体字段 | 当请求头被删除时无声地不可用;上游永远不会看到功能请求 | 逐字转发 `anthropic-beta` |246| [扩展上下文](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model)和[交错思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) | 仅 Beta 请求头,无请求体字段 | 当请求头被删除时无声地不可用;上游永远不会看到功能请求 | 逐字转发 `anthropic-beta` |

247| Beta [工具字段](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) | 工具相关的 beta 请求头与工具架构字段(如 `strict` 和 `defer_loading`)配对 | 当请求体通过而没有其请求头时,命名无法识别的工具架构字段的 `400` | 转发两者,或 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities) |247| Beta [工具字段](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) | 工具相关的 beta 请求头与工具架构字段(如 `strict` 和 `defer_loading`)配对 | 当请求体通过而没有其请求头时,命名无法识别的工具架构字段的 `400` | 转发两者,或 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities) |

248| [努力](https://platform.claude.com/docs/en/build-with-claude/effort)和[结构化输出](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) | `output_config` 请求体字段携带努力、结构化输出格式和任务预算设置;每个都与自己的 beta 请求头配对 | 在 Amazon Bedrock 和 Google Cloud 的 Agent Platform 上游上命名 `output_config` 的 `400`,通常是 `Extra inputs are not permitted` | 一起转发字段及其请求头 |248| [努力](https://platform.claude.com/docs/en/build-with-claude/effort)和[结构化输出](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) | `output_config` 请求体字段携带努力、结构化输出格式和任务预算设置;每个都与自己的 beta 请求头配对 | 在 Amazon Bedrock 和 Google Cloud 的 Agent Platform 上游上命名 `output_config` 的 `400`,通常是 `Extra inputs are not permitted` | 一起转发该字段及其请求头,或让开发者设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities),这会移除格式和任务预算设置,但不会移除努力 |

249| [提示缓存](/docs/zh-CN/prompt-caching) | 无 beta 配对。Claude Code 将 `cache_control` 标记附加到 `system` 块和 `messages` 条目,包括在对话中途附加的 `role: "system"` 条目 | 无错误:对话在每个回合都作为未缓存的输入计费,在 `usage` 中可见为高 `input_tokens` 且缓存活动很少或没有 | 在任何地方原封不动地转发 `cache_control`,并且不要将块形式的 `system` 或消息内容转换为纯字符串 |249| [提示缓存](/docs/zh-CN/prompt-caching) | 无 beta 配对。Claude Code 将 `cache_control` 标记附加到 `system` 块和 `messages` 条目,包括在对话中途附加的 `role: "system"` 条目 | 无错误:对话在每个回合都作为未缓存的输入计费,在 `usage` 中可见为高 `input_tokens` 且缓存活动很少或没有 | 在任何地方原封不动地转发 `cache_control`,并且不要将块形式的 `system` 或消息内容转换为纯字符串 |

250| [令牌计数](https://platform.claude.com/docs/en/build-with-claude/token-counting) | 无 beta 配对;使用 `count_tokens` 端点 | 无错误:Claude Code 回退到基于字符的估计,因此 `/context` 显示近似计数 | 公开该端点以获得精确的令牌计数 |250| [令牌计数](https://platform.claude.com/docs/en/build-with-claude/token-counting) | 无 beta 配对;使用 `count_tokens` 端点 | 无错误:Claude Code 回退到基于字符的估计,因此 `/context` 显示近似计数 | 公开该端点以获得精确的令牌计数 |

251 251 


260* 当上游拒绝 `thinking` 字段、中途对话系统消息或这些消息之一上的 `cache_control` 标记时,Claude Code 会重试请求并为对话的其余部分禁用被拒绝的功能260* 当上游拒绝 `thinking` 字段、中途对话系统消息或这些消息之一上的 `cache_control` 标记时,Claude Code 会重试请求并为对话的其余部分禁用被拒绝的功能

261* 当上游拒绝[思考签名](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)时,包括带有 `400` 的拒绝,其消息说该块被 `bound to a different conversation`,Claude Code 会从请求中删除早期思考块,重试,并将其排除在每个后续请求之外。新响应仍然包括思考261* 当上游拒绝[思考签名](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)时,包括带有 `400` 的拒绝,其消息说该块被 `bound to a different conversation`,Claude Code 会从请求中删除早期思考块,重试,并将其排除在每个后续请求之外。新响应仍然包括思考

262* 当 gateway 或其上游将[顾问工具](/docs/zh-CN/advisor)条目在 `tools` 中拒绝为无法识别的工具类型时,Claude Code 会重试一次请求,不包含该条目及其 `anthropic-beta` 值。对该基础 URL 的后续请求会将顾问排除在外,直到 Claude Code 退出,在该时间内 `/advisor` 对开发者不可用。Claude Code 通过 `400` 或 `422` 响应识别此拒绝,其消息在 `Input tag` 之后命名工具类型,例如 `Input tag 'advisor_20260301'`。在 v2.1.280 之前,Claude Code 没有重试此拒绝262* 当 gateway 或其上游将[顾问工具](/docs/zh-CN/advisor)条目在 `tools` 中拒绝为无法识别的工具类型时,Claude Code 会重试一次请求,不包含该条目及其 `anthropic-beta` 值。对该基础 URL 的后续请求会将顾问排除在外,直到 Claude Code 退出,在该时间内 `/advisor` 对开发者不可用。Claude Code 通过 `400` 或 `422` 响应识别此拒绝,其消息在 `Input tag` 之后命名工具类型,例如 `Input tag 'advisor_20260301'`。在 v2.1.280 之前,Claude Code 没有重试此拒绝

263* 当上游拒绝 `output_config.effort` 时,Claude Code 会在不带努力的情况下重试请求,并在 Claude Code 退出之前,在发往该模型的后续请求中省略它。Claude Code 通过 `400` 响应识别此拒绝,其消息同时命名 `output_config.effort` 和 `Extra inputs are not permitted`,或说明该模型不支持 effort 参数

263* Claude Code 不重试上下文管理或工具架构字段拒绝,因此这些 `400` 错误到达开发者264* Claude Code 不重试上下文管理或工具架构字段拒绝,因此这些 `400` 错误到达开发者

264 265 

265`bound to a different conversation` 拒绝来自 API 的[保留思考](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking)检查,当 `system`、`tools` 或早期 `messages` 内容与产生思考的请求不同时,该检查失败。重写任何该内容的 gateway 可能会导致拒绝本身;[库、代理和网关](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#libraries-proxies-gateways)涵盖了要原封不动地传递的内容。266`bound to a different conversation` 拒绝来自 API 的[保留思考](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking)检查,当 `system`、`tools` 或早期 `messages` 内容与产生思考的请求不同时,该检查失败。重写任何该内容的 gateway 可能会导致拒绝本身;[库、代理和网关](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#libraries-proxies-gateways)涵盖了要原封不动地传递的内容。


270 禁用预发布功能271 禁用预发布功能

271</h3>272</h3>

272 273 

273`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` 阻止 Claude Code 发送预发布功能及其请求体字段,包括上下文管理和 beta 工具字段。该变量不影响自适应推理,后者由模型而不是 beta 选择。它永远不会抑制订阅身份验证所需的 OAuth 功能。274当您的网关或其上游拒绝预发布的 `anthropic-beta` 值或与之配对的请求体字段,并且您无法同时转发两个部分时,请让开发者设置 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`。设置该变量后,Claude Code 将停止发送预发布功能以及与之配对的 `anthropic-beta` 值,包括:

275 

276* 上下文管理及其 `context_management` 请求体字段

277* beta 工具 schema 字段,例如 `strict` 和 `defer_loading`。标准的 `name`、`description`、`input_schema` 和 `cache_control` 工具字段会保留

278* 结构化输出 `output_config.format` 字段。需要 Claude Code v2.1.287 或更高版本

279* `output_config.task_budget` 字段

280* [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search),因此每个 MCP 工具都会预先加载,除非您的组织通过托管设置保持其开启

281 

282该变量不会删除所有 `anthropic-beta` 值。它保留的内容包括:

283 

284* 扩展上下文、交错思考和努力的 `anthropic-beta` 值,云提供商也接受这些值

285* `output_config.effort` 字段。[自动重试和错误转发](#automatic-retry-and-error-forwarding)介绍了上游拒绝它的情况

286* 自适应推理的 `thinking` 字段,它没有 beta 请求头

287* 订阅身份验证所需的 OAuth `anthropic-beta` 值

288* 开发者通过 [`ANTHROPIC_BETAS`](/docs/zh-CN/env-vars) 或 [`CLAUDE_CODE_EXTRA_BODY`](/docs/zh-CN/env-vars) 自行添加的请求头值和请求体字段

274 289 

275当嵌入 Claude Code 的主机平台设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 时,`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` 不会阻止 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 上的自动模式会话向服务器请求[分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)。该审查添加了 `anthropic-beta` 值和 `safeguards` 请求字段。设置 `CLAUDE_CODE_AUTO_MODE_SERVER=0` 以在那里停止它。290当嵌入 Claude Code 的主机平台设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 时,`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` 不会阻止 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 上的自动模式会话向服务器请求[分类器审查](/docs/zh-CN/permission-modes#server-side-classifier-review)。该审查添加了 `anthropic-beta` 值和 `safeguards` 请求字段。设置 `CLAUDE_CODE_AUTO_MODE_SERVER=0` 以在那里停止它。

276 291 

managed-mcp.md +1 −0

Details

532| `managed-mcp.json` 存在且可以在 Chrome 中运行 Claude 的用户运行 `claude --chrome` | Claude Code 在启动时退出,显示 `Claude in Chrome is blocked by your organization's managed MCP configuration (managed-mcp.json). An administrator can allow it with allowClaudeInChromeWithManagedMcp in device policy.` |532| `managed-mcp.json` 存在且可以在 Chrome 中运行 Claude 的用户运行 `claude --chrome` | Claude Code 在启动时退出,显示 `Claude in Chrome is blocked by your organization's managed MCP configuration (managed-mcp.json). An administrator can allow it with allowClaudeInChromeWithManagedMcp in device policy.` |

533| 服务器在拒绝列表上且用户运行 `claude mcp add` | `Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy` |533| 服务器在拒绝列表上且用户运行 `claude mcp add` | `Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy` |

534| 服务器不在允许列表上且用户运行 `claude mcp add` | `Cannot add MCP server "<name>": not allowed by enterprise policy` |534| 服务器不在允许列表上且用户运行 `claude mcp add` | `Cannot add MCP server "<name>": not allowed by enterprise policy` |

535| [`strictPluginOnlyCustomization`](/docs/zh-CN/settings-reference#strictpluginonlycustomization) 为 `true` 或包含 `mcp`,且用户运行 `claude mcp add` | [`Cannot add MCP server: your organization's managed settings allow only MCP servers that plugins provide`](/docs/zh-CN/errors#cannot-add-mcp-server-when-managed-settings-allow-only-plugin-servers) |

535| 用户在来自 `managedMcpServers` 的服务器上运行 `claude mcp remove` | `MCP server "<name>" is provided by your organization (managed settings) and cannot be removed locally.` |536| 用户在来自 `managedMcpServers` 的服务器上运行 `claude mcp remove` | `MCP server "<name>" is provided by your organization (managed settings) and cannot be removed locally.` |

536| 之前配置的服务器现在被策略阻止 | 服务器从 `/mcp` 和 `claude mcp list` 中消失 |537| 之前配置的服务器现在被策略阻止 | 服务器从 `/mcp` 和 `claude mcp list` 中消失 |

537| 服务器在会话运行时被阻止,用户选择**重新连接**或在 `/mcp` 中将其重新打开 | [`MCP server <name> is blocked by enterprise managed policy`](/docs/zh-CN/errors#mcp-server-is-blocked-by-enterprise-managed-policy) |538| 服务器在会话运行时被阻止,用户选择**重新连接**或在 `/mcp` 中将其重新打开 | [`MCP server <name> is blocked by enterprise managed policy`](/docs/zh-CN/errors#mcp-server-is-blocked-by-enterprise-managed-policy) |

Details

1571. 远程设置,从 claude.ai 作为 [服务器管理的设置](/docs/zh-CN/server-managed-settings) 或通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 交付。Claude Code 仅在会话使用 [符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability) 直接向 Anthropic 的 API 进行身份验证,或使用 `/login` 登录网关时才获取此源。在其他提供商上,或当 `ANTHROPIC_BASE_URL` 指向 Anthropic 的 API 以外的地方时,它从下一个源开始1571. 远程设置,从 claude.ai 作为 [服务器管理的设置](/docs/zh-CN/server-managed-settings) 或通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 交付。Claude Code 仅在会话使用 [符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability) 直接向 Anthropic 的 API 进行身份验证,或使用 `/login` 登录网关时才获取此源。在其他提供商上,或当 `ANTHROPIC_BASE_URL` 指向 Anthropic 的 API 以外的地方时,它从下一个源开始

1582. MDM 或操作系统级策略:macOS plist 或 HKLM 注册表键1582. MDM 或操作系统级策略:macOS plist 或 HKLM 注册表键

1593. 托管设置文件,`managed-settings.d/*.json` 和 `managed-settings.json` 合并在一起1593. 托管设置文件,`managed-settings.d/*.json` 和 `managed-settings.json` 合并在一起

1604. HKCU 注册表,在 Windows 上,以及在 WSL 上一旦 HKLM 注册表或 Windows 托管设置文件打开 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 并且 HKCU 值也设置它时。Claude Code 仅在上面没有管理员源存在且没有 [主机提供的父设置](#let-an-embedding-host-add-policy) 提供限制性键时才读取它1604. HKCU 注册表,在 Windows 上,以及在 WSL 上一旦 HKLM 注册表或 Windows 托管设置文件打开 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 并且 HKCU 值也设置它时。Claude Code 仅在 [其上方没有存在的管理员文档](#present-admin-documents) 且没有 [主机提供的父设置](#let-an-embedding-host-add-policy) 提供限制性键时才读取它

161 

162<span id="present-admin-documents" />

163 

164Claude Code 永远不会在存在的管理员源下应用用户可写的 HKCU 注册表。当源设置任何策略键为非 `null` 值时,该源是存在的,即使是 Claude Code 无法读取的值。无法读取的 HKLM 值、托管设置文件或 `managed-settings.d` 目录也是存在的。在 WSL 上,`/etc/claude-code` 也是用户可写的,[`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 条目说明 Windows 源何时位于其上方。

165 161 

166此图显示排名,以及 Claude Code 在任一设置下从前三个源读取的跨源键的示例:162此图显示排名,以及 Claude Code 在任一设置下从前三个源读取的跨源键的示例:

167 163 


169 165 

170<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence-dark.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=ae407a9a08a3d680e80cf1a2af845d71" className="hidden dark:block" alt="显示四个托管设置源的图表,从顶部的远程设置到 MDM、托管设置文件和底部的 HKCU 注册表。默认情况下,具有策略键的第一个源提供策略,其余的被跳过;当 managedSourcesBehavior 设置为 merge 时,每个具有策略键的管理员源都会贡献,按键的类型组合,HKCU 注册表保持不变。侧面板显示跨源键(如沙箱锁、forceRemoteSettingsRefresh 和每个变量的 env 合并)从每个管理员源读取,不包括 HKCU 注册表。" width="680" height="330" data-path="images/managed-source-precedence-dark.svg" />166<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence-dark.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=ae407a9a08a3d680e80cf1a2af845d71" className="hidden dark:block" alt="显示四个托管设置源的图表,从顶部的远程设置到 MDM、托管设置文件和底部的 HKCU 注册表。默认情况下,具有策略键的第一个源提供策略,其余的被跳过;当 managedSourcesBehavior 设置为 merge 时,每个具有策略键的管理员源都会贡献,按键的类型组合,HKCU 注册表保持不变。侧面板显示跨源键(如沙箱锁、forceRemoteSettingsRefresh 和每个变量的 env 合并)从每个管理员源读取,不包括 HKCU 注册表。" width="680" height="330" data-path="images/managed-source-precedence-dark.svg" />

171 167 

168<h3 id="present-admin-documents">

169 管理员文档何时算作存在

170</h3>

171 

172在 [托管源的排名](#how-claude-code-combines-managed-sources) 中,Claude Code 永远不会在存在的管理员文档之下应用用户可写的 HKCU 注册表。文档在以下情况下算作存在:

173 

174* 它将任何策略键设置为非 `null` 值,即使是 Claude Code 无法读取的值

175* 它是存在但无法读取的 HKLM 值、托管设置文件或 `managed-settings.d` 目录

176 

177在 WSL 上,`/etc/claude-code` 也是用户可写的,[`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 条目说明 Windows 文档何时位于其上方。

178 

172<h3 id="keys-read-from-every-admin-source">179<h3 id="keys-read-from-every-admin-source">

173 从每个管理员源读取的键180 从每个管理员源读取的键

174</h3>181</h3>


470| [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) | 当在 HKLM 注册表或 `C:\Program Files\ClaudeCode` 下的文件中设置时,让 WSL 读取 Windows 策略链,仅当[没有 Windows 管理文档存在](#present-admin-documents)时读取 `/etc/claude-code`;条目给出顺序 |477| [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) | 当在 HKLM 注册表或 `C:\Program Files\ClaudeCode` 下的文件中设置时,让 WSL 读取 Windows 策略链,仅当[没有 Windows 管理文档存在](#present-admin-documents)时读取 `/etc/claude-code`;条目给出顺序 |

471 478 

472<Note>479<Note>

473 在 Team 和 Enterprise 计划上,Owner 在[Claude Code 管理设置](https://claude.ai/admin-settings/claude-code)中为组织启用或禁用[远程控制](/docs/zh-CN/remote-control)和[云会话](/docs/zh-CN/claude-code-on-the-web)。远程控制可以另外通过 [`disableRemoteControl`](/docs/zh-CN/settings-reference#disableremotecontrol) 设置按设备禁用。云会话没有按设备托管设置密钥。480 在 Team 和 Enterprise 计划上,Owner 在[Claude Code 管理设置](https://claude.ai/admin-settings/claude-code)中为组织启用或禁用 [Remote Control](/docs/zh-CN/remote-control) 和[云端会话](/docs/zh-CN/claude-code-on-the-web)。当 Owner 关闭 Remote Control 时,运行 Claude Code v2.1.286 或更高版本的已连接会话也会断开连接。每个会话会在下次刷新您组织的策略时断开连接,大约每小时一次。有关这些会话中会发生什么,请参阅 [`Remote Control was turned off by your organization's policy`](/docs/zh-CN/remote-control#remote-control-was-turned-off-by-your-organizations-policy)。

481 

482 Remote Control 还可以通过 [`disableRemoteControl`](/docs/zh-CN/settings-reference#disableremotecontrol) 设置按设备禁用。云端会话没有按设备的托管设置密钥。

474 483 

475 要检查这些组织设置是否到达给定机器,在那里运行 `claude doctor` 并读取 `Organization policy` 行,它说 Claude Code 从哪里加载策略或为什么它没有加载。需要 Claude Code v2.1.261 或更高版本。在运行会话中,当策略未加载时,`/status` 显示相同的行。484 要检查这些组织设置是否到达给定机器,在那里运行 `claude doctor` 并读取 `Organization policy` 行,它说 Claude Code 从哪里加载策略或为什么它没有加载。需要 Claude Code v2.1.261 或更高版本。在运行会话中,当策略未加载时,`/status` 显示相同的行。

476</Note>485</Note>

mcp.md +74 −63

Details

40您也可以使用官方的 [`mcp-server-dev` plugin](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/mcp-server-dev) 让 Claude 为您搭建服务器。40您也可以使用官方的 [`mcp-server-dev` plugin](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/mcp-server-dev) 让 Claude 为您搭建服务器。

41 41 

42<Steps>42<Steps>

43 <Step title="安装 plugin">43 <Step title="安装插件">

44 在 Claude Code 会话中,运行:44 在 VS Code 扩展或桌面应用中,请按照 [安装插件](/docs/zh-CN/plugins/install#install-a-plugin) 操作,而不是执行此步骤。在终端中,运行 `claude` 启动 Claude Code,然后在其提示符处输入以下内容:

45 45 

46 ```46 ```

47 /plugin install mcp-server-dev@claude-plugins-official47 /plugin install mcp-server-dev@claude-plugins-official


126 126 

127Stdio 服务器作为本地进程在您的机器上运行。它们非常适合需要直接系统访问或自定义脚本的工具。127Stdio 服务器作为本地进程在您的机器上运行。它们非常适合需要直接系统访问或自定义脚本的工具。

128 128 

129Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,以便您的服务器可以解析项目相对路径,而不依赖于工作目录。这与 hooks 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。129Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,以便您的服务器可以解析项目相对路径,而不依赖于工作目录。这与 hook 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。

130 130 

131`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](/docs/zh-CN/permissions#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。在 v2.1.203 之前,`roots/list` 仅返回启动目录,Claude Code 不发送 `notifications/roots/list_changed`。131`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](/docs/zh-CN/permissions#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。在 v2.1.203 之前,`roots/list` 仅返回启动目录,Claude Code 不发送 `notifications/roots/list_changed`。

132 132 

133此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目范围的 `.mcp.json` 条目或 `~/.claude.json` 中的本地或用户范围服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。133此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目作用域的 `.mcp.json` 条目或 `~/.claude.json` 中的本地或用户作用域服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。

134 134 

135```bash theme={null}135```bash theme={null}

136# 基本语法136# 基本语法


181* **启动命令**,例如 `npx -y @example/mcp-server`:服务器在您的机器上运行。181* **启动命令**,例如 `npx -y @example/mcp-server`:服务器在您的机器上运行。

182* **`mcpServers` JSON 块**:为另一个客户端的设置文件编写的配置。182* **`mcpServers` JSON 块**:为另一个客户端的设置文件编写的配置。

183 183 

184每一个都是 [安装 MCP 服务器](#installing-mcp-servers) 中四个选项之一接受的输入。找到您下面拥有的形状,将其转换为 Claude Code 接受的命令。除非您添加 `--scope project` 或 `--scope user`,否则每个命令都写入 [本地范围](#local-scope)。184每一个都是 [安装 MCP 服务器](#installing-mcp-servers) 中四个选项之一接受的输入。找到您下面拥有的形状,将其转换为 Claude Code 接受的命令。除非您添加 `--scope project` 或 `--scope user`,否则每个命令都写入 [本地作用域](#local-scope)。

185 185 

186<h4 id="from-a-url">186<h4 id="from-a-url">

187 从 URL187 从 URL


211 从 `mcpServers` JSON 块211 从 `mcpServers` JSON 块

212</h4>212</h4>

213 213 

214为另一个 MCP 客户端(例如 Claude Desktop)编写的 `mcpServers` 块使用 Claude Code 读取的包装器密钥和条目形状。将 `claude mcp add-json` 传递给 `mcpServers` 内的对象,而不是包装器。两个条目需要先修复:214为另一个 MCP 客户端(例如 Claude Desktop)编写的 `mcpServers` 块使用 Claude Code 读取的包装器键和条目形状。将 `mcpServers` 内的对象(而不是包装器)传递给 `claude mcp add-json`。两种条目需要先修复:

215 215 

216* **`url` 没有 `type`**:添加 `"type": "http"`、`"type": "sse"` 或 `"type": "ws"` 以匹配端点。Claude Code 将没有 `type` 的条目读取为 stdio 服务器,因此没有 `type` 的 `url` 条目会失败。216* **`url` 没有 `type`**:添加 `"type": "http"`、`"type": "sse"` 或 `"type": "ws"` 以匹配端点。Claude Code 将没有 `type` 的条目读取为 stdio 服务器,因此没有 `type` 的 `url` 条目会失败。

217* **密钥包含除字母、数字、连字符和下划线以外的字符**:选择仅使用这些字符的服务器名称。否则密钥是服务器名称。217* **键包含除字母、数字、连字符和下划线以外的字符**:选择仅使用这些字符的服务器名称。否则键就是服务器名称。

218 218 

219例如,此块:219例如,此块:

220 220 


235claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'235claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'

236```236```

237 237 

238[从 JSON 配置添加 MCP 服务器](#add-mcp-servers-from-json-configuration) 涵盖 `add-json` 的 shell 转义和 `--scope` 标志。要与您的团队共享服务器,请改为添加 `--scope project`,或在项目根目录的 `.mcp.json` 下的 `mcpServers` 中添加条目并提交它。[项目范围](#project-scope) 涵盖 Claude Code 如何加载和批准该文件。238[从 JSON 配置添加 MCP 服务器](#add-mcp-servers-from-json-configuration) 涵盖 `add-json` 的 shell 转义和 `--scope` 标志。要与您的团队共享服务器,请改为添加 `--scope project`,或在项目根目录的 `.mcp.json` 中的 `mcpServers` 下添加条目并提交它。[项目作用域](#project-scope) 涵盖 Claude Code 如何加载和批准该文件。

239 239 

240每个 `claude mcp add` 和 `claude mcp add-json` 命令在成功时打印 `Added ...` 行。要检查 Claude Code 是否已连接,请运行 `claude mcp get <name>`;[服务器状态](#server-status) 涵盖它显示的状态和 `.mcp.json` 服务器的批准步骤。240每个 `claude mcp add` 和 `claude mcp add-json` 命令在成功时打印 `Added ...` 行。要检查 Claude Code 是否已连接,请运行 `claude mcp get <name>`;[服务器状态](#server-status) 涵盖它显示的状态和 `.mcp.json` 服务器的批准步骤。

241 241 


271 271 

272此列表中的状态报告配置决策而不是连接尝试,因此 Claude Code 在不连接到服务器的情况下打印它们:272此列表中的状态报告配置决策而不是连接尝试,因此 Claude Code 在不连接到服务器的情况下打印它们:

273 273 

274* ``⏸ Pending approval (run `claude` to approve)``:来自 `.mcp.json` 的项目范围服务器,您尚未批准。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。运行 `claude` 交互式地审查和批准它。274* ``⏸ Pending approval (run `claude` to approve)``:来自 `.mcp.json` 的项目作用域服务器,您尚未批准。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。运行 `claude` 交互式地审查和批准它。

275* `✘ Rejected (see disabledMcpjsonServers in settings)`:由 [`disabledMcpjsonServers`](/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目拒绝的 `.mcp.json` 服务器。Claude Code 仅在 `claude mcp get <name>` 中显示它。275* `✘ Rejected (see disabledMcpjsonServers in settings)`:由 [`disabledMcpjsonServers`](/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目拒绝的 `.mcp.json` 服务器。Claude Code 仅在 `claude mcp get <name>` 中显示它。

276* `⊘ Disabled for this project (re-enable via /mcp)`:项目的 [`disabledMcpServers`](#disable-a-server-without-removing-it) 列表命名的服务器。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。从 `/mcp` 面板打开服务器。276* `⊘ Disabled for this project (re-enable via /mcp)`:项目的 [`disabledMcpServers`](#disable-a-server-without-removing-it) 列表命名的服务器。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。从 `/mcp` 面板重新打开服务器。

277 277 

278WebSocket 服务器不出现在 `claude mcp list` 输出中。使用 `claude mcp get <name>` 或 `/mcp` 面板检查它们。278WebSocket 服务器不出现在 `claude mcp list` 输出中。使用 `claude mcp get <name>` 或 `/mcp` 面板检查它们。

279 279 


281 项目服务器批准和工作区信任281 项目服务器批准和工作区信任

282</h4>282</h4>

283 283 

284从 v2.1.196 开始,`claude mcp list` 和 `claude mcp get` 仅从未签入存储库的设置文件中读取 `.mcp.json` 批准,直到您通过在其中运行 `claude` 并接受工作区信任对话来信任工作区。克隆的存储库无法批准自己的服务器:提交到项目的 `.claude/settings.json` 的 [`enableAllProjectMcpServers`](/docs/zh-CN/settings-reference#enableallprojectmcpservers) 或 [`enabledMcpjsonServers`](/docs/zh-CN/settings-reference#enabledmcpjsonservers) 在不受信任的文件夹中被忽略,服务器保持在 `⏸ Pending approval` 而不是被连接和健康检查。284从 v2.1.196 开始,`claude mcp list` 和 `claude mcp get` 仅从未签入仓库的设置文件中读取 `.mcp.json` 批准,直到您通过在其中运行 `claude` 并接受工作区信任对话框来信任工作区。克隆的仓库无法批准自己的服务器:提交到项目的 `.claude/settings.json` 的 [`enableAllProjectMcpServers`](/docs/zh-CN/settings-reference#enableallprojectmcpservers) 或 [`enabledMcpjsonServers`](/docs/zh-CN/settings-reference#enabledmcpjsonservers) 在不受信任的文件夹中被忽略,服务器保持在 `⏸ Pending approval` 而不是被连接和健康检查。

285 285 

286这些来源的批准仍然适用于不受信任的文件夹:286这些来源的批准仍然适用于不受信任的文件夹:

287 287 


289* 托管设置289* 托管设置

290* 使用 `--settings` 传递的设置290* 使用 `--settings` 传递的设置

291 291 

292Claude Code 也应用来自未跟踪的 `.claude/settings.local.json` 的批准,但它运行 git 来检查文件是否被跟踪,并且仅在 [受信任的文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 中运行该检查。在您从未信任的文件夹中,Claude Code 等待信任对话后才应用文件的批准,除非该文件夹是您自己的配置主目录:您的主目录,或其 `.claude` 您已设置为 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 的目录。在 v2.1.207 之前,Claude Code 即使在您从未信任的文件夹中也应用来自未跟踪的 `.claude/settings.local.json` 的批准。292Claude Code 也应用来自未跟踪的 `.claude/settings.local.json` 的批准,但它运行 git 来检查文件是否被跟踪,并且仅在 [受信任的文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 中运行该检查。在您从未信任的文件夹中,Claude Code 等待信任对话框后才应用文件的批准,除非该文件夹是您自己的配置主目录:您的主目录,或其 `.claude` 您已设置为 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 的目录。在 v2.1.207 之前,Claude Code 即使在您从未信任的文件夹中也应用来自未跟踪的 `.claude/settings.local.json` 的批准。

293 293 

294任何设置文件中的 `disabledMcpjsonServers` 条目仍然拒绝服务器。294任何设置文件中的 `disabledMcpjsonServers` 条目仍然拒绝服务器。

295 295 


301 301 

302发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](/docs/zh-CN/env-vars) 打开它,或设置为 `0` 即使推出已启用它也保持关闭。在 v2.1.238 之前,缓存默认打开。302发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](/docs/zh-CN/env-vars) 打开它,或设置为 `0` 即使推出已启用它也保持关闭。在 v2.1.238 之前,缓存默认打开。

303 303 

304当您从 `/mcp` 中的服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。**Reconnect** 在连接或失败的服务器上也会丢弃它;在 `cached` 服务器上,**Reconnect** 现在连接服务器并保留条目。Claude Code 下次连接到服务器后丢弃条目时,它从服务器而不是从缓存获取工具列表。304当您从 `/mcp` 中的服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。**Reconnect** 在已连接或失败的服务器上也会丢弃它;在 `cached` 服务器上,**Reconnect** 会立即连接服务器并保留条目。丢弃条目后,Claude Code 下次连接到服务器时,会从服务器而不是从缓存获取工具列表。

305 305 

306当服务器的状态为 `✘ Failed to connect` 时,`claude mcp list` 将失败详情附加到该状态行,`claude mcp get <name>` 在 `Issue:` 行上显示它:HTTP 状态或错误代码,加上服务器返回的任何错误文本。`/mcp` 中的服务器详情视图在其 `Issue:` 行中包含相同的服务器报告文本。Claude Code 从此详情中编辑类似凭证的文本,并且永远不包括扩展的服务器 URL,它可能携带机密。Claude Code 不向 `✘ Connection error` 状态附加详情,因为它会打印的异常文本可以嵌入该 URL。在 v2.1.219 之前,两个命令仅显示裸失败状态,没有状态代码或服务器的错误文本。306当服务器的状态为 `✘ Failed to connect` 时,`claude mcp list` 将失败详情附加到该状态行,`claude mcp get <name>` 在 `Issue:` 行上显示它:HTTP 状态或错误代码,加上服务器返回的任何错误文本。`/mcp` 中的服务器详情视图在其 `Issue:` 行中包含相同的服务器报告文本。Claude Code 从此详情中编辑掉类似凭据的文本,并且永远不包括展开后的服务器 URL,它可能携带机密。Claude Code 不向 `✘ Connection error` 状态附加详情,因为它会打印的异常文本可能嵌入该 URL。在 v2.1.219 之前,两个命令仅显示裸失败状态,没有状态代码或服务器的错误文本。

307 307 

308当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如果有),例如 `https://mcp.example.com`。308当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如果有),例如 `https://mcp.example.com`。

309 309 

310* 路径和查询永远不会出现在该消息中。310* 路径和查询永远不会出现在该消息中。

311* 对于本地、项目或用户 [范围](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。311* 对于本地、项目或用户 [作用域](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。

312* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。312* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。

313 313 

314配置为空 `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` 报告为配置问题,并提示重新连接。314配置为空 `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` 报告为配置问题,并提示重新连接。

315 315 

316<h4 id="configuration-warnings">316<h4 id="configuration-warnings">

317 配置警告317 配置警告


319 319 

320Claude Code 警告以下配置问题。每个条目说明 Claude Code 检查什么以及如何清除警告:320Claude Code 警告以下配置问题。每个条目说明 Claude Code 检查什么以及如何清除警告:

321 321 

322* **隐藏的空格**:当 MCP 配置值携带隐藏的前导或尾随空格时,Claude Code 发出警告,这通常来自粘贴带有尾随换行符的令牌。Claude Code 检查 `command`、`url`、每个 `args` 条目以及 `env` 和 `headers` 下的值和密钥名称。Claude Code 在 `claude mcp list` 输出和 `/mcp` 中显示警告,命名受影响的字段而不回显其值,例如 `Leading or trailing whitespace in: headers.Authorization`。Claude Code 不修剪空格并完全按照写入的方式使用值,因此编辑配置以删除它。322* **隐藏的空格**:当 MCP 配置值携带隐藏的前导或尾随空格时,Claude Code 发出警告,这通常来自粘贴带有尾随换行符的令牌。Claude Code 检查 `command`、`url`、每个 `args` 条目以及 `env` 和 `headers` 下的值和键名称。Claude Code 在 `claude mcp list` 输出和 `/mcp` 中显示警告,命名受影响的字段而不回显其值,例如 `Leading or trailing whitespace in: headers.Authorization`。Claude Code 不修剪空格并完全按照写入的方式使用值,因此请编辑配置以删除它。

323* **在多个范围中使用相同名称**:如果您在多个 [范围](#mcp-installation-scopes) 中定义相同的服务器名称,具有不同的端点,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告冲突。Claude Code 按端点存储 OAuth 登录,因此当您在一个项目中验证加载的定义时,您仍然需要在不同定义加载的项目中单独登录。保留您想要的端点并使用 `claude mcp remove <name> --scope <scope>` 删除其他端点。在警告中,Claude Code 引用每个范围的端点,如您的配置中所写,带有 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 未展开,因此它永远不显示已解析的值,例如 API 密钥。323* **在多个作用域中使用相同名称**:如果您在多个 [作用域](#mcp-installation-scopes) 中定义相同的服务器名称,具有不同的端点,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告冲突。Claude Code 按端点存储 OAuth 登录,因此当您在一个项目中对加载的定义进行身份验证时,您仍然需要在加载不同定义的项目中单独登录。保留您想要的端点并使用 `claude mcp remove <name> --scope <scope>` 删除其他端点。在警告中,Claude Code 按您的配置中所写的形式引用每个作用域的端点,[`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 保持未展开,因此它永远不显示已解析的值,例如 API 密钥。

324* **保留名称**:Claude Code 保留其内置服务器的名称,包括 `workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义具有保留名称的服务器,Claude Code 在加载时跳过它并显示警告,要求您重命名它。`claude mcp add` 拒绝保留名称并出现错误。`Claude Preview` 和 `Claude Browser` 都命名 [Claude Code 桌面应用的预览窗格](/docs/zh-CN/desktop#preview-your-app) 使用的内置服务器。324* **保留名称**:Claude Code 保留其内置服务器的名称,包括 `workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义具有保留名称的服务器,Claude Code 在加载时跳过它并显示警告,要求您重命名它。`claude mcp add` 拒绝保留名称并出现错误。`Claude Preview` 和 `Claude Browser` 都命名 [Claude Code 桌面应用的预览窗格](/docs/zh-CN/desktop#preview-your-app) 使用的内置服务器。

325* **缺少环境变量**:如果服务器配置中的 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 命名未设置且没有 `:-default` 的变量,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告,命名变量,并仍然使用 `${VAR}` 文本未展开加载服务器。设置变量或添加 `${VAR:-default}` 回退。在远程服务器的 `url` 和 `headers` 中,某些凭证变量 [读取为空](#credential-variables-that-read-as-empty) 而不显示警告。325* **缺少环境变量**:如果服务器配置中的 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 命名未设置且没有 `:-default` 的变量,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告,命名变量,并仍然使用 `${VAR}` 文本未展开加载服务器。设置变量或添加 `${VAR:-default}` 备用值。在远程服务器的 `url` 和 `headers` 中,某些凭据变量 [读取为空](#credential-variables-that-read-as-empty) 而不显示警告。

326 326 

327<h4 id="tool-availability">327<h4 id="tool-availability">

328 工具可用性328 工具可用性


336* **不使用工具搜索**:Claude 改为使用 `WaitForMcpServers` 工具。不使用工具搜索的配置包括自定义 `ANTHROPIC_BASE_URL`、`ENABLE_TOOL_SEARCH=false` 和 Google Cloud 的 Agent Platform 上早于 Claude 4.5 代的模型。336* **不使用工具搜索**:Claude 改为使用 `WaitForMcpServers` 工具。不使用工具搜索的配置包括自定义 `ANTHROPIC_BASE_URL`、`ENABLE_TOOL_SEARCH=false` 和 Google Cloud 的 Agent Platform 上早于 Claude 4.5 代的模型。

337* **在 Microsoft Foundry [部署托管在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)**:Claude 在工具搜索路径上启动而不是使用 `WaitForMcpServers`,因为 Claude Code 仅从 API 发现部署的服务器端拒绝。Claude Code 将该部署切换到 [前期加载](#scale-with-mcp-tool-search) 后,来自完成连接的服务器的工具在 Claude 的下一个请求中变为可用。337* **在 Microsoft Foundry [部署托管在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)**:Claude 在工具搜索路径上启动而不是使用 `WaitForMcpServers`,因为 Claude Code 仅从 API 发现部署的服务器端拒绝。Claude Code 将该部署切换到 [前期加载](#scale-with-mcp-tool-search) 后,来自完成连接的服务器的工具在 Claude 的下一个请求中变为可用。

338 338 

339启用工具搜索后,当服务器在 Claude 工作时完成连接时,Claude Code 在同一轮的下一个请求中将服务器的工具名称列出给 Claude。Claude 然后可以搜索和调用这些工具,而无需等待您的下一条消息。339启用工具搜索后,当服务器在 Claude 工作时完成连接时,Claude Code 在同一轮次的下一个请求中将服务器的工具名称列出给 Claude。Claude 然后可以搜索和调用这些工具,而无需等待您的下一条消息。

340 

341恢复会话后,Claude 可以在工具的 MCP 服务器仍在连接时调用已保存对话中的工具。当服务器处于首次连接尝试时,Claude Code 会将该调用保留最多 10 秒,并在工具可用后运行它。如果服务器未能及时连接,或者已在 [失败尝试后重试](#automatic-reconnection),调用会失败并返回 `No such tool available` [工具错误](/docs/zh-CN/errors#no-such-tool-available)。

340 342 

341<h3 id="disable-a-server-without-removing-it">343<h3 id="disable-a-server-without-removing-it">

342 禁用服务器而不删除它344 禁用服务器而不删除它


357 MCP 客户端运行时359 MCP 客户端运行时

358</h3>360</h3>

359 361 

360Claude Code 通过两个客户端运行时之一连接到 MCP 服务器。v1 运行时基于 MCP TypeScript SDK 1.x。v2 运行时是 [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/) 上的相同代码,它添加了 MCP 协议修订版 2026-07-28。本页的其余部分适用于两个运行时,除非某个部分命名 v2 运行时。362Claude Code 通过两个客户端运行时之一连接到 MCP 服务器。v1 运行时基于 MCP TypeScript SDK 1.x。v2 运行时是 [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/) 上的相同代码,它添加了 MCP 协议修订版 2026-07-28。本页的其余部分适用于两个运行时,除非某个部分指明 v2 运行时。

361 363 

362Claude Code 在每次启动时选择一个运行时,并在您退出前保持它。在 [获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) 的会话中,它在 Claude Code v2.1.232 或更高版本上使用 v2 运行时。364Claude Code 在每次启动时选择一个运行时,并在您退出前保持它。在 [获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) 的会话中,它在 Claude Code v2.1.232 或更高版本上使用 v2 运行时。

363 365 


367* 通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 登录的会话369* 通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 登录的会话

368* 您关闭遥测或功能标志获取的会话,例如使用 `DISABLE_TELEMETRY`370* 您关闭遥测或功能标志获取的会话,例如使用 `DISABLE_TELEMETRY`

369 371 

370在 v2 上,Claude Code 也:372在 v2 上,Claude Code 还会:

371 373 

372* 询问 HTTP 服务器是否支持较新的修订版,并与支持的服务器一起使用它。它也在获取功能标志的会话中询问 claude.ai 连接器服务器。要让它询问 stdio 服务器或每个会话中的连接器服务器,请设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto`。它连接到每个其他服务器,如 v1 所做的那样。374* 询问 HTTP 服务器是否支持较新的修订版,并与支持的服务器一起使用它。它也在获取功能标志的会话中询问 claude.ai 连接器服务器。要让它询问 stdio 服务器或每个会话中的连接器服务器,请设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto`。它与 v1 一样连接到其他所有服务器。

373* 从 [它保持打开的流](#notification-streams-on-the-v2-runtime) 上的较新修订版的服务器接收 `list_changed` 通知。375* 通过 [它保持打开的流](#notification-streams-on-the-v2-runtime) 从使用较新修订版的服务器接收 `list_changed` 通知。

374* 不注册在较新修订版上连接的 [channel](#push-messages-with-channels) 服务器,因为该修订版无法携带频道消息。376* 不注册在较新修订版上连接的 [频道](#push-messages-with-channels) 服务器,因为该修订版无法携带频道消息。

375* 失败 [MCP OAuth 登录](#authenticate-with-remote-mcp-servers),其授权响应命名意外的发行者。377* 当授权响应指明意外的发行者时,使 [MCP OAuth 登录](#authenticate-with-remote-mcp-servers) 失败。

376* 仅将 [MCP OAuth](#authenticate-with-remote-mcp-servers) 凭证发送到通过 HTTPS 或在 `localhost`、`127.0.0.1` 或 `::1` 上提供的令牌端点。对于令牌端点为纯 `http://` 的服务器(例如本地网络上的设备),登录失败。请参阅 [拒绝向非 https 令牌端点发送凭证](/docs/zh-CN/errors#refusing-to-send-credentials-to-non-https-token-endpoint)。378* 仅将 [MCP OAuth](#authenticate-with-remote-mcp-servers) 凭据发送到通过 HTTPS 或在 `localhost`、`127.0.0.1` 或 `::1` 上提供的令牌端点。对于令牌端点在其他任何地方为纯 `http://` 的服务器(例如本地网络上的设备),登录失败。请参阅 [拒绝向非 https 令牌端点发送凭据](/docs/zh-CN/errors#refusing-to-send-credentials-to-non-https-token-endpoint)。

377 379 

378Anthropic 可以使用功能标志 Claude Code 获取来将特定服务器保持在较早的协议上,或将其从该流中删除。380Anthropic 可以通过 Claude Code 获取的功能标志,将特定服务器保持在较早的协议上,或不使用该流。

379 381 

380要自己选择运行时,请设置 [`MCP_SDK_GENERATION`](/docs/zh-CN/env-vars) 为 `v1` 或 `v2`。要决定 Claude Code 是否询问,请设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto` 或 `legacy`。382要自己选择运行时,请设置 [`MCP_SDK_GENERATION`](/docs/zh-CN/env-vars) 为 `v1` 或 `v2`。要决定 Claude Code 是否询问,请设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto` 或 `legacy`。

381 383 


383 动态工具更新385 动态工具更新

384</h3>386</h3>

385 387 

386Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 自动刷新来自该服务器的可用功能。388MCP 服务器可以在连接期间更改其提供的工具、提示词或资源,并发送 `list_changed` 通知。收到通知时:

389 

390* **在交互式终端会话中**,Claude Code 从该服务器获取更新后的列表,因此您无需重新连接它。

391* **在使用 `-p` 标志的 [非交互模式](/docs/zh-CN/headless) 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 中**,Claude Code 在收到这些通知时仅刷新工具列表。

387 392 

388如果刷新请求失败,Claude Code 保留服务器之前发现的工具、提示和资源,直到稍后的刷新成功。在 v2.1.214 之前,刷新期间的瞬时错误将服务器的工具、提示和资源替换为空列表。393如果刷新请求失败,Claude Code 保留服务器之前发现的工具、提示词和资源,直到稍后的刷新成功。在 v2.1.214 之前,刷新期间的瞬时错误将服务器的工具、提示词和资源替换为空列表。

389 394 

390<h4 id="notification-streams-on-the-v2-runtime">395<h4 id="notification-streams-on-the-v2-runtime">

391 v2 运行时上的通知流396 v2 运行时上的通知流

392</h4>397</h4>

393 398 

394在 [v2 运行时](#mcp-client-runtimes) 上,Claude Code 从 [它保持打开的流](#notification-streams-on-the-v2-runtime) 上的较新协议修订版的服务器接收 `list_changed` 通知。当流关闭时,Claude Code 重新打开它,有两个限制:399在 [v2 运行时](#mcp-client-runtimes) 上,Claude Code 通过它保持打开的流从使用较新协议修订版的服务器接收 `list_changed` 通知。当流关闭时,Claude Code 重新打开它,有两个限制:

395 400 

396* **流在 10 秒内再次关闭**:Claude Code 最多重新打开三次,然后停止该连接。401* **流在 10 秒内再次关闭**:Claude Code 最多重新打开三次,然后停止该连接。

397* **流保持打开超过 10 秒,然后关闭**,如流到无服务器主机通常所做的那样:在一小时内五次重新打开后,Claude Code 在下一次之前等待约六小时。402* **流保持打开超过 10 秒,然后关闭**,连接到无服务器主机的流通常如此:在一小时内五次重新打开后,Claude Code 在下一次之前等待约六小时。

398 403 

399在流重新打开之前,您保留服务器的最后获取的工具、提示和资源。要更快地获取其更改,请从 `/mcp` 重新连接服务器。404在流重新打开之前,您保留服务器最后获取的工具、提示词和资源。要更快地获取其更改,请从 `/mcp` 重新连接服务器。

400 405 

401<h3 id="automatic-reconnection">406<h3 id="automatic-reconnection">

402 自动重新连接407 自动重新连接

403</h3>408</h3>

404 409 

405Claude Code 重新连接在会话中期断开的远程服务器,并在瞬时错误后重试 HTTP 或 SSE 服务器的首次连接。Stdio 服务器是本地进程,Claude Code 不会自动重新连接它们。410Claude Code 重新连接在会话中途断开的远程服务器,并在瞬时错误后重试 HTTP 或 SSE 服务器的首次连接。Stdio 服务器是本地进程,Claude Code 不会自动重新连接它们。

406 411 

407<h4 id="mid-session-drops-of-a-remote-server">412<h4 id="mid-session-drops-of-a-remote-server">

408 远程服务器的会话中期断开413 远程服务器的会话中途断开

409</h4>414</h4>

410 415 

411Claude Code 使用指数退避重新连接断开的远程服务器:最多五次尝试,从一秒延迟开始,每次加倍。您看到的内容取决于您如何运行 Claude Code:416Claude Code 使用指数退避重新连接断开的远程服务器:最多五次尝试,从一秒延迟开始,每次加倍。您看到的内容取决于您如何运行 Claude Code:


422Claude Code 在这些情况下不重试:427Claude Code 在这些情况下不重试:

423 428 

424* WebSocket 服务器的首次连接429* WebSocket 服务器的首次连接

425* 身份验证或未找到错误,因为它需要配置更改来解决。当 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 是服务器唯一的 `Authorization` 标头来源时,Claude Code 仍然重试身份验证错误,因为它在每次尝试时重新运行助手并可以获取新凭证430* 身份验证或未找到错误,因为它需要配置更改来解决。当 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 是服务器唯一的 `Authorization` 标头来源时,Claude Code 仍然重试身份验证错误,因为它在每次尝试时重新运行助手并可以获取新凭据

426 431 

427<h4 id="failed-discovery-requests">432<h4 id="failed-discovery-requests">

428 失败的发现请求433 失败的发现请求


430 435 

431服务器连接后,Claude Code 向其发送能力发现请求,例如 `tools/list`、`prompts/list` 和 `resources/list`。Claude Code 在瞬时网络或服务器错误后最多重试这些请求三次,短退避。它不重试身份验证错误、4xx 响应或请求超时。436服务器连接后,Claude Code 向其发送能力发现请求,例如 `tools/list`、`prompts/list` 和 `resources/list`。Claude Code 在瞬时网络或服务器错误后最多重试这些请求三次,短退避。它不重试身份验证错误、4xx 响应或请求超时。

432 437 

438<h4 id="retry-failed-servers-yourself">

439 自行重试失败的服务器

440</h4>

441 

442要重试所有失败或需要身份验证的服务器,请运行 `/mcp reconnect all`。在交互式终端中,这需要 Claude Code v2.1.284 或更高版本,较早的版本会在此处打印 `MCP server "all" not found`。

443 

433<h4 id="how-claude-learns-that-a-server-failed">444<h4 id="how-claude-learns-that-a-server-failed">

434 Claude 如何了解服务器失败445 Claude 如何了解服务器失败

435</h4>446</h4>

436 447 

437Claude Code 是否告诉 Claude 配置的服务器未能连接取决于 [工具搜索](#scale-with-mcp-tool-search),默认打开:448Claude Code 是否告诉 Claude 配置的服务器未能连接取决于 [工具搜索](#scale-with-mcp-tool-search),默认打开:

438 449 

439* 使用工具搜索,Claude Code 告诉 Claude 哪个服务器失败及其连接错误,因此 Claude 在其响应中报告连接失败。Claude Code 在 `ToolSearch` 结果中包含相同的信息,这些结果找不到匹配的工具。450* 使用工具搜索,Claude Code 告诉 Claude 哪个服务器失败及其连接错误,因此 Claude 在其回复中报告连接失败。Claude Code 在找不到匹配工具的 `ToolSearch` 结果中包含相同的信息。

440* 在任何 [不使用工具搜索的配置](#configure-tool-search) 中,Claude Code 不向 Claude 报告失败的服务器连接。451* 在任何 [不使用工具搜索的配置](#configure-tool-search) 中,Claude Code 不向 Claude 报告失败的服务器连接。

441 452 

442<h3 id="push-messages-with-channels">453<h3 id="push-messages-with-channels">


458 * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 短形式469 * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 短形式

459 * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时(例如 `MCP_TIMEOUT=10000 claude` 设置 10 秒超时)470 * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时(例如 `MCP_TIMEOUT=10000 claude` 设置 10 秒超时)

460 * 通过在该服务器的 `.mcp.json` 条目中添加 `timeout` 字段(以毫秒为单位)来设置按服务器工具执行超时,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量471 * 通过在该服务器的 `.mcp.json` 条目中添加 `timeout` 字段(以毫秒为单位)来设置按服务器工具执行超时,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量

461 * 当 MCP 工具输出超过 10,000 个令牌时,Claude Code 显示警告,默认限制输出为 25,000 个令牌。要提高限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量(例如 `MAX_MCP_OUTPUT_TOKENS=50000`);警告阈值是固定的。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)472 * 当 MCP 工具输出超过 10,000 个 token 时,Claude Code 显示警告,默认限制输出为 25,000 个 token。要提高限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量(例如 `MAX_MCP_OUTPUT_TOKENS=50000`);警告阈值是固定的。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)

462 * 使用 `/mcp` 与需要 OAuth 2.0 身份验证的远程服务器进行身份验证473 * 使用 `/mcp` 与需要 OAuth 2.0 身份验证的远程服务器进行身份验证

463</Tip>474</Tip>

464 475 

465按服务器的 `timeout` 是每个工具调用的硬墙钟限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略并落入 `MCP_TOOL_TIMEOUT`,或在该变量未设置时落入其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 服务器,还有第二个按请求计时器,涵盖每个请求到服务器的第一个响应字节。Claude Code 将该计时器设置为三个值中最大的:60 秒、适用于服务器的工具超时和 `MCP_TIMEOUT`。未设置的 `MCP_TOOL_TIMEOUT` 的 28 小时默认值不进入该比较,低于 60 秒的值不会缩短计时器。Stdio 和 WebSocket 服务器没有按请求计时器。476按服务器的 `timeout` 是每个工具调用的硬性墙钟时间限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 服务器,还有第二个按请求计时器,覆盖每个请求直到服务器的第一个响应字节。Claude Code 将该计时器设置为三个值中最大的:60 秒、适用于服务器的工具超时和 `MCP_TIMEOUT`。未设置的 `MCP_TOOL_TIMEOUT` 的 28 小时默认值不参与该比较,低于 60 秒的值不会缩短计时器。Stdio 和 WebSocket 服务器没有按请求计时器。

466 477 

467至少 1000 的按服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会因空闲而中止该服务器的工具调用早于按服务器 `timeout`。需要 Claude Code v2.1.203 或更高版本。478至少 1000 的按服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会早于按服务器 `timeout` 因空闲而中止该服务器的工具调用。需要 Claude Code v2.1.203 或更高版本。

468 479 

469对 MCP 服务器的工具调用,在空闲窗口内不发送响应和不发送进度通知,会因错误而中止,而不是等待墙钟限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器外的每个服务器类型。空闲窗口对 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对 stdio 服务器默认为 30 分钟。在 v2.1.203 之前,stdio 服务器免除空闲超时。480对 MCP 服务器的工具调用,如果在空闲窗口内既没有响应也没有进度通知,会以错误中止,而不是等待墙钟时间限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器外的每种服务器类型。空闲窗口对 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对 stdio 服务器默认为 30 分钟。在 v2.1.203 之前,stdio 服务器免除空闲超时。

470 481 

471设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改空闲窗口,或将其设置为 `0` 以禁用检查。482设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改空闲窗口,或将其设置为 `0` 以禁用检查。

472 483 

473这些超时限制调用可以运行多长时间,不总是它阻止会话多长时间:在两分钟后仍在运行的主对话调用首先移到后台任务。请参阅 [长工具调用的自动后台处理](#automatic-backgrounding-of-long-tool-calls)。484这些超时限制调用可以运行多长时间,但不一定是它阻塞会话多长时间:运行超过两分钟的主对话调用会先移到后台任务。请参阅 [长工具调用的自动后台处理](#automatic-backgrounding-of-long-tool-calls)。

474 485 

475<h3 id="automatic-backgrounding-of-long-tool-calls">486<h3 id="automatic-backgrounding-of-long-tool-calls">

476 长工具调用的自动后台处理487 长工具调用的自动后台处理

477</h3>488</h3>

478 489 

479主对话中的 MCP 工具调用在两分钟后仍在运行时移到后台任务,而不是阻止会话。Claude 立即接收任务 ID 并继续工作,结果在调用解决时作为任务通知到达。自动后台处理需要 Claude Code v2.1.212 或更高版本。490主对话中的 MCP 工具调用在两分钟后仍在运行时会移到后台任务,而不是阻塞会话。Claude 立即收到任务 ID 并继续工作,结果在调用完成时作为任务通知到达。自动后台处理需要 Claude Code v2.1.212 或更高版本。

480 491 

481任务出现在 [`/tasks`](/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,它不会在退出会话时存活。任务的条目显示服务器报告的最新进度。492任务出现在 [`/tasks`](/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,退出会话后它不会保留。任务的条目显示服务器报告的最新进度。

482 493 

483每调用限制仍然适用于调用在后台运行时:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars) 设置的墙钟限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 设置的空闲超时。494调用在后台运行时,每次调用的限制仍然适用:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars) 设置的墙钟时间限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 设置的空闲超时。

484 495 

485设置 [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改阈值,或将其设置为 `0` 以关闭自动后台处理。将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 设置为 `1` 也会关闭它,以及所有其他后台任务功能。496设置 [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改阈值,或将其设置为 `0` 以关闭自动后台处理。将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 设置为 `1` 也会关闭它,以及所有其他后台任务功能。

486 497 


490* 对 IDE 服务器的调用501* 对 IDE 服务器的调用

491* [非交互模式](/docs/zh-CN/headless) 中的调用,除非 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1`,因为一次性运行可能在结果到达前结束502* [非交互模式](/docs/zh-CN/headless) 中的调用,除非 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1`,因为一次性运行可能在结果到达前结束

492 503 

493等待打开的 [引出对话](#respond-to-mcp-elicitation-requests) 的调用在对话打开时不会后台处理;服务器被阻止在您的输入上,而不是缓慢,因此 Claude Code 将移动推迟到对话关闭。504等待已打开的 [引出对话框](#respond-to-mcp-elicitation-requests) 的调用在对话框打开期间不会后台处理;服务器是在等待您的输入,而不是运行缓慢,因此 Claude Code 将移动推迟到对话框关闭。

494 505 

495<h3 id="plugin-provided-mcp-servers">506<h3 id="plugin-provided-mcp-servers">

496 插件提供的 MCP 服务器507 插件提供的 MCP 服务器


539 550 

540**插件 MCP 功能**:551**插件 MCP 功能**:

541 552 

542* **自动生命周期**:服务器在这些点连接和断开:553* **自动生命周期**:服务器在这些时间点连接和断开:

543 * 在会话启动时,Claude Code 自动连接启用的插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可以显示 [`cached` 状态](#server-status-detail) 而不是;Claude Code 在 Claude 首次调用其工具之一时连接它554 * 在会话启动时,Claude Code 自动连接已启用插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可能改为显示 [`cached` 状态](#server-status-detail);Claude Code 在 Claude 首次调用其工具之一时连接它

544 * 如果您在会话期间启用或禁用插件,Claude Code 在更改应用时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins) 描述何时应用。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效555 * 如果您在会话期间启用或禁用插件,Claude Code 在更改生效时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins) 说明了生效时间。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效

545 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,并在您从 Agent SDK [替换会话的 MCP 服务器列表](/docs/zh-CN/agent-sdk/typescript#mcpsetserversresult) 而不命名它们时执行相同操作556 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,当您从 Agent SDK [替换会话的 MCP 服务器列表](/docs/zh-CN/agent-sdk/typescript#mcpsetserversresult) 而未列出它们时也是如此

546 * 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置启用的插件的服务器,并断开不再启用的插件的服务器,因此您不需要在移动后运行 `/reload-plugins`557 * 当您在 v2.1.246 或更高版本上 [使用 `/cd` 移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置所启用插件的服务器,并断开不再启用的插件的服务器,因此您无需在移动后运行 `/reload-plugins`

547 * 在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中,对尚未连接的插件服务器的 MCP 调用(例如空闲会话唤醒后)按需启动服务器并等待它连接558 * 在 [云端会话](/docs/zh-CN/claude-code-on-the-web) 中,对尚未连接的插件服务器的 MCP 调用(例如空闲会话唤醒后)会按需启动服务器并等待它连接

548* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](/docs/zh-CN/plugins/components#path-variables-and-persistent-data) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:559* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](/docs/zh-CN/plugins/components#path-variables-and-persistent-data) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:

549 * `stdio` 服务器:`command`、`args`、`env`560 * `stdio` 服务器:`command`、`args`、`env`

550 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`561 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`

551* **用户环境访问**:访问与手动配置的服务器相同的环境变量562* **用户环境访问**:访问与手动配置的服务器相同的环境变量

552* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,尽管传输支持可能因服务器而异563* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,尽管传输支持可能因服务器而异

553 564 

554插件服务器在 `/mcp` 中出现,指示器显示它们来自插件。565插件服务器在 `/mcp` 中出现,并带有表明它们来自插件的指示器。

555 566 

556对于插件的 stdio 服务器,`claude mcp get` 打印 `Command: stdio`、空 `Args:` 行和每个环境变量作为 `NAME=[REDACTED]`。值被隐藏,因为它们可能携带凭证。567对于插件的 stdio 服务器,`claude mcp get` 打印 `Command: stdio`、空的 `Args:` 行,并将每个环境变量显示为 `NAME=[REDACTED]`。值被隐藏,因为它们可能携带凭据。

557 568 

558**插件 MCP 工具名称**:569**插件 MCP 工具名称**:

559 570 

560来自插件捆绑的 MCP 服务器的工具在其可调用名称中包含插件名称和服务器密钥。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具可调用为:571来自插件捆绑的 MCP 服务器的工具在其可调用名称中包含插件名称和服务器键。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具的可调用名称为:

561 572 

562```573```

563mcp__plugin_my-plugin_database-tools__query574mcp__plugin_my-plugin_database-tools__query

564```575```

565 576 

566在 [权限规则](/docs/zh-CN/permissions)、技能的 `allowed-tools` 列表、[子代理的 `tools` 字段](/docs/zh-CN/sub-agents#available-tools) 或 [hook 匹配器](/docs/zh-CN/hooks#match-mcp-tools) 中引用工具时使用此完整名称。针对裸服务器密钥编写的 hook 匹配器(例如 `mcp__database-tools__.*`)永远不会为插件捆绑的服务器触发。577在 [权限规则](/docs/zh-CN/permissions)、skill 的 `allowed-tools` 列表、[子代理的 `tools` 字段](/docs/zh-CN/sub-agents#available-tools) 或 [hook 匹配器](/docs/zh-CN/hooks#match-mcp-tools) 中引用工具时使用此完整名称。针对裸服务器键编写的 hook 匹配器(例如 `mcp__database-tools__.*`)永远不会为插件捆绑的服务器触发。

567 578 

568服务器本身在作用域名称 `plugin:<plugin-name>:<server-name>` 下注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。579服务器本身以限定名称 `plugin:<plugin-name>:<server-name>` 注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。

569 580 

570有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins/components#mcp-servers)。581有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins/components#mcp-servers)。

571 582 


1251 1262 

1252* `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 处于活跃状态1263* `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 处于活跃状态

1253* 第三方提供商(如 Amazon Bedrock 或 Google Cloud 的 Agent Platform)处于活跃状态1264* 第三方提供商(如 Amazon Bedrock 或 Google Cloud 的 Agent Platform)处于活跃状态

1254* `ANTHROPIC_PROFILE`、联合变量或活跃的 [Anthropic 配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials) 提供凭证1265* `ANTHROPIC_PROFILE`、联合变量或活跃的 [Anthropic 配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials) 提供凭据

1255* `CLAUDE_CODE_OAUTH_TOKEN` 持有来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的令牌,该令牌只能进行模型请求1266* `CLAUDE_CODE_OAUTH_TOKEN` 持有来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的令牌,该令牌只能进行模型请求

1256 1267 

1257如果 `/mcp` 没有列出您添加的 connector,请运行 `/status` 以确认哪个身份验证方法处于活跃状态。取消设置该环境变量,删除 `apiKeyHelper` 设置,或 [关闭配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials),然后运行 `/login` 以选择您的 claude.ai 账户。1268如果 `/mcp` 没有列出您添加的 connector,请运行 `/status` 以确认哪个身份验证方法处于活跃状态。取消设置该环境变量,删除 `apiKeyHelper` 设置,或 [关闭配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials),然后运行 `/login` 以选择您的 claude.ai 账户。


1265 1276 

1266在 v2.1.222 之前,Claude Code 将 connectors 标记为需要身份验证,授权它们无法解决此问题。1277在 v2.1.222 之前,Claude Code 将 connectors 标记为需要身份验证,授权它们无法解决此问题。

1267 1278 

1268您在 Claude Code 中添加的服务器优先于指向相同 URL 的 claude.ai connector。发生这种情况时,`/mcp` 将 connector 列为隐藏,并显示如何删除重复项(如果您更希望使用 connector)。1279您在 Claude Code 中添加的服务器[优先于](#scope-hierarchy-and-precedence)指向相同 URL 的 claude.ai connector。发生这种情况时,`/mcp` 将 connector 列为隐藏,并显示如何删除重复项(如果您更希望使用 connector)。

1269 1280 

1270某些 Anthropic 托管的 connectors(如 Microsoft 365、Gmail 和 Google Calendar)不支持来自 Claude Code 的本地 OAuth,因为上游身份提供商仅接受 claude.ai 注册的重定向 URL。当您使用 `claude mcp add` 或在 `.mcp.json` 中添加的服务器指向这些主机之一,并且您从 `/mcp` 或使用 `claude mcp login` 登录时,Claude Code 会显示 [`is Anthropic-hosted and doesn't support local OAuth`](/docs/zh-CN/errors#anthropic-hosted-and-doesnt-support-local-oauth),指导您改为在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 连接该服务。1281某些 Anthropic 托管的 connectors(如 Microsoft 365、Gmail 和 Google Calendar)不支持来自 Claude Code 的本地 OAuth,因为上游身份提供商仅接受 claude.ai 注册的重定向 URL。当您使用 `claude mcp add` 或在 `.mcp.json` 中添加的服务器指向这些主机之一,并且您从 `/mcp` 或使用 `claude mcp login` 登录时,Claude Code 会显示 [`is Anthropic-hosted and doesn't support local OAuth`](/docs/zh-CN/errors#anthropic-hosted-and-doesnt-support-local-oauth),指导您改为在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 连接该服务。

1271 1282 


1279 1290 

1280| 会话运行的位置 | Connectors 如何到达 | 什么管理它们 |1291| 会话运行的位置 | Connectors 如何到达 | 什么管理它们 |

1281| :- | :- | :- |1292| :- | :- | :- |

1282| Terminal、[VS Code](/docs/zh-CN/vs-code)、[JetBrains](/docs/zh-CN/jetbrains) 和 [Agent SDK](/docs/zh-CN/agent-sdk/claude-code-features) 会话 | Claude Code 从 claude.ai 获取它们 | 本部分中的设置和 [managed MCP 配置](/docs/zh-CN/managed-mcp) |1293| 终端、[VS Code](/docs/zh-CN/vs-code)、[JetBrains](/docs/zh-CN/jetbrains) 和 [Agent SDK](/docs/zh-CN/agent-sdk/claude-code-features) 会话 | Claude Code 从 claude.ai 获取它们 | 本部分中的设置和 [managed MCP 配置](/docs/zh-CN/managed-mcp) |

1283| [Cloud 会话](/docs/zh-CN/claude-code-on-the-web) | 云主机传入它们 | 您的 claude.ai 组织设置,加上到达会话的 [allowlist 和 denylist](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 设置以及运行它的主机上的任何 `managed-mcp.json` |1294| [云端会话](/docs/zh-CN/claude-code-on-the-web) | 云主机传入它们 | 您的 claude.ai 组织设置,加上到达会话的 [允许列表和拒绝列表](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 设置以及运行它的主机上的任何 `managed-mcp.json` |

1284| [桌面应用](/docs/zh-CN/desktop) 的本地和 SSH 会话 | 桌面应用在进程中传入它们 | 您组织的 [connector 工具控制](#organization-controls-on-connector-tools) 中的 `blocked` 条目 |1295| [桌面应用](/docs/zh-CN/desktop) 的本地和 SSH 会话 | 桌面应用在进程中传入它们 | 您组织的 [connector 工具控制](#organization-controls-on-connector-tools) 中的 `blocked` 条目 |

1285 1296 

1286[`disableClaudeAiConnectors`](#disable-claude-ai-connectors)、`ENABLE_CLAUDEAI_MCP_SERVERS` 和 [`allowAllClaudeAiMcps`](/docs/zh-CN/settings-reference#allowallclaudeaimcps) 仅作用于第一行,即 Claude Code 自身获取的 connectors。其他两行在这些方面与它不同:1297[`disableClaudeAiConnectors`](#disable-claude-ai-connectors)、`ENABLE_CLAUDEAI_MCP_SERVERS` 和 [`allowAllClaudeAiMcps`](/docs/zh-CN/settings-reference#allowallclaudeaimcps) 仅作用于第一行,即 Claude Code 自身获取的 connectors。其他两行在这些方面与它不同:

1287 1298 

1288* **Cloud 会话**:到达会话的 `allowedMcpServers` 和 `deniedMcpServers` 条目(例如通过 [server-managed 设置](/docs/zh-CN/server-managed-settings))也会过滤传入的 connectors。会话的代理重写每个 connector 的 URL,因此为 connector 自身 URL 编写的 `serverUrl` 模式不会匹配它。要在自托管环境中的 URL allowlist 旁边允许传入的 connectors,请添加 [Connector 流量离开您的网络](/docs/zh-CN/self-hosted-environments-deploy#connector-traffic-leaves-your-network) 下列出的 `serverUrl` 条目。当运行会话的主机上存在 `managed-mcp.json` 时(例如 [self-hosted runner 主机](/docs/zh-CN/self-hosted-environments-configuration#mcp-servers)),Claude Code 会删除传入的 connectors,无论您是否设置 `allowAllClaudeAiMcps`。1299* **云端会话**:到达会话的 `allowedMcpServers` 和 `deniedMcpServers` 条目(例如通过 [server-managed 设置](/docs/zh-CN/server-managed-settings))也会过滤传入的 connectors。会话的代理重写每个 connector 的 URL,因此为 connector 自身 URL 编写的 `serverUrl` 模式不会匹配它。要在自托管环境中的 URL 允许列表旁边允许传入的 connectors,请添加 [Connector 流量离开您的网络](/docs/zh-CN/self-hosted-environments-deploy#connector-traffic-leaves-your-network) 下列出的 `serverUrl` 条目。当运行会话的主机上存在 `managed-mcp.json` 时(例如 [self-hosted runner 主机](/docs/zh-CN/self-hosted-environments-configuration#mcp-servers)),Claude Code 会删除传入的 connectors,无论您是否设置 `allowAllClaudeAiMcps`。

1289* **桌面应用本地和 SSH 会话**:桌面应用将 connectors 注册为进程内 `type: "sdk"` 服务器,没有 MCP 设置或 `managed-mcp.json` 到达它们。用户通过在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 断开连接来将 connector 排除在自己的会话之外。组织阻止 connector 的 [工具](#organization-controls-on-connector-tools) 或完全关闭 [桌面应用中的 Claude Code](/docs/zh-CN/desktop#admin-console-controls)。1300* **桌面应用本地和 SSH 会话**:桌面应用将 connectors 注册为进程内 `type: "sdk"` 服务器,没有 MCP 设置或 `managed-mcp.json` 到达它们。用户通过在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 断开连接来将 connector 排除在自己的会话之外。组织阻止 connector 的 [工具](#organization-controls-on-connector-tools) 或完全关闭 [桌面应用中的 Claude Code](/docs/zh-CN/desktop#admin-console-controls)。

1290 1301 

1291<h3 id="organization-controls-on-connector-tools">1302<h3 id="organization-controls-on-connector-tools">


1303 禁用 claude.ai connectors1314 禁用 claude.ai connectors

1304</h3>1315</h3>

1305 1316 

1306Claude Code 仅将 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) 应用于它 [自身获取](#how-connectors-reach-claude-code) 的 connectors,而不是云主机或桌面应用传入的 connectors。要关闭它获取的 connectors,请在任何设置范围中将设置设置为 `true`:1317Claude Code 仅将 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) 应用于它 [自身获取](#how-connectors-reach-claude-code) 的 connectors,而不是云主机或桌面应用传入的 connectors。要关闭它获取的 connectors,请在任何设置作用域中将该设置项设置为 `true`:

1307 1318 

1308```json theme={null}1319```json theme={null}

1309{1320{

memory.md +27 −16

Details

41 CLAUDE.md 文件41 CLAUDE.md 文件

42</h2>42</h2>

43 43 

44CLAUDE.md 文件是 markdown 文件,为 Claude 提供项目、个人工作流或整个组织的持久指令。您用纯文本编写这些文件;Claude 在每个会话开始时读取它们。如果您的存储库改用 `AGENTS.md`,请参阅 [AGENTS.md](#agents-md)。44CLAUDE.md 文件是 markdown 文件,为 Claude 提供项目、个人工作流或整个组织的持久指令。您用纯文本编写这些文件;Claude 在每个会话开始时读取它们。如果您的仓库改用 `AGENTS.md`,请参阅 [AGENTS.md](#agents-md)。

45 45 

46<h3 id="when-to-add-to-claude-md">46<h3 id="when-to-add-to-claude-md">

47 何时添加到 CLAUDE.md47 何时添加到 CLAUDE.md


82<Tip>82<Tip>

83 运行 `/init` 自动生成起始 CLAUDE.md。Claude 分析您的代码库并创建一个包含构建命令、测试指令和它发现的项目约定的文件。如果 CLAUDE.md 已存在,`/init` 会建议改进而不是覆盖它。从那里进行细化,添加 Claude 不会自己发现的指令。83 运行 `/init` 自动生成起始 CLAUDE.md。Claude 分析您的代码库并创建一个包含构建命令、测试指令和它发现的项目约定的文件。如果 CLAUDE.md 已存在,`/init` 会建议改进而不是覆盖它。从那里进行细化,添加 Claude 不会自己发现的指令。

84 84 

85 为了启用交互式多阶段流程,请在运行 `/init` 之前将 `CLAUDE_CODE_NEW_INIT` 环境变量设置为 `1`。在您的 shell 中或在设置文件的 `env` 块中设置它,如 [设置环境变量](/docs/zh-CN/env-vars#set-environment-variables) 中所示。设置后,`/init` 会询问要设置哪些工件:CLAUDE.md 文件、skills 和 hooks。然后它使用子代理探索您的代码库,通过后续问题填补空白,并在写入任何文件之前呈现可审查的提案。该变量仅改变 `/init` 的运行方式,因此您可以保持它的设置。85 为了启用交互式多阶段流程,请在运行 `/init` 之前将 `CLAUDE_CODE_NEW_INIT` 环境变量设置为 `1`。在您的 shell 中或在设置文件的 `env` 块中设置它,如 [设置环境变量](/docs/zh-CN/env-vars#set-environment-variables) 中所示。设置后,`/init` 会询问要设置哪些制品:CLAUDE.md 文件、skill 和 hook。然后它使用子代理探索您的代码库,通过后续问题填补空白,并在写入任何文件之前呈现可审查的提案。该变量仅改变 `/init` 的运行方式,因此您可以保持它的设置。

86</Tip>86</Tip>

87 87 

88<h3 id="write-effective-instructions">88<h3 id="write-effective-instructions">


99 99 

100* **大小**:每个 CLAUDE.md 文件目标在 200 行以下。较长的文件消耗更多上下文并降低遵守度。将仅对代码库的一部分重要的指令移至 [path-scoped rules](#path-specific-rules),这样它们仅在 Claude 处理匹配文件时加载。[导入](#import-additional-files) 帮助您组织一个长文件,但不会减少其上下文成本,因为导入的文件也在启动时加载。100* **大小**:每个 CLAUDE.md 文件目标在 200 行以下。较长的文件消耗更多上下文并降低遵守度。将仅对代码库的一部分重要的指令移至 [path-scoped rules](#path-specific-rules),这样它们仅在 Claude 处理匹配文件时加载。[导入](#import-additional-files) 帮助您组织一个长文件,但不会减少其上下文成本,因为导入的文件也在启动时加载。

101* **结构**:使用 markdown 标题和项目符号来分组相关指令。有组织的部分比密集段落更容易让 Claude 遵循。101* **结构**:使用 markdown 标题和项目符号来分组相关指令。有组织的部分比密集段落更容易让 Claude 遵循。

102* **一致性**:如果两条指令相互矛盾,Claude 可能会任意选择一条。定期审查您的 CLAUDE.md 文件、子目录中的嵌套 CLAUDE.md 文件和 [`.claude/rules/`](#organize-rules-with-claude/rules/),以删除过时或冲突的指令。要让 Claude 为您找到它们,请 [运行提示审计](#audit-your-instruction-files)。102* **一致性**:如果两条指令相互矛盾,Claude 可能会任意选择一条。定期审查您的 CLAUDE.md 文件、子目录中的嵌套 CLAUDE.md 文件和 [`.claude/rules/`](#organize-rules-with-claude/rules/),以删除过时或冲突的指令。要让 Claude 为您找到它们,请 [运行提示词审计](#audit-your-instruction-files)。

103 103 

104<h4 id="audit-your-instruction-files">104<h4 id="audit-your-instruction-files">

105 审计您的指令文件105 审计您的指令文件


107 107 

108要让 Claude 检查您的指令文件是否有过时或冲突的内容,请在会话中运行 `/doctor prompt-audit`。Claude 查找问题,例如为旧模型编写的指令、对不存在的文件或命令的引用,以及相互矛盾的文件。您会获得一份发现报告和一组建议的编辑,在您要求 Claude 应用它们之前,您的文件中不会有任何更改。108要让 Claude 检查您的指令文件是否有过时或冲突的内容,请在会话中运行 `/doctor prompt-audit`。Claude 查找问题,例如为旧模型编写的指令、对不存在的文件或命令的引用,以及相互矛盾的文件。您会获得一份发现报告和一组建议的编辑,在您要求 Claude 应用它们之前,您的文件中不会有任何更改。

109 109 

110默认情况下,审计涵盖您的 CLAUDE.md、CLAUDE.local.md 和 AGENTS.md 文件,以及 `.claude/` 和 `~/.claude/` 下的规则、skills、命令、子代理和输出样式。要审计一个文件或目录,请改为传递其路径,例如 `/doctor prompt-audit .claude/skills/deploy`。110默认情况下,审计涵盖您的 CLAUDE.md、CLAUDE.local.md 和 AGENTS.md 文件,以及 `.claude/` 和 `~/.claude/` 下的规则、skill、命令、子代理和输出样式。要审计一个文件或目录,请改为传递其路径,例如 `/doctor prompt-audit .claude/skills/deploy`。

111 111 

112审计通过捆绑的 `/claude-api` skill 运行。当该 skill 在 [`skillOverrides`](/docs/zh-CN/skills#override-skill-visibility-from-settings) 中关闭或使用 [`disableBundledSkills`](/docs/zh-CN/settings-reference#disablebundledskills) 时,它不可用。`/doctor prompt-audit` 需要 Claude Code v2.1.283 或更高版本。112审计通过捆绑的 `/claude-api` skill 运行。当该 skill 在 [`skillOverrides`](/docs/zh-CN/skills#override-skill-visibility-from-settings) 中关闭或使用 [`disableBundledSkills`](/docs/zh-CN/settings-reference#disablebundledskills) 时,它不可用。`/doctor prompt-audit` 需要 Claude Code v2.1.283 或更高版本。

113 113 


138 138 

139对于不应该检入版本控制的私人项目特定偏好,请在项目根目录创建 `CLAUDE.local.md`。它与 `CLAUDE.md` 一起加载并以相同方式处理。将 `CLAUDE.local.md` 添加到您的 `.gitignore` 以便不提交它。设置 `CLAUDE_CODE_NEW_INIT=1` 后,运行 `/init` 并选择个人选项会为您执行此操作。139对于不应该检入版本控制的私人项目特定偏好,请在项目根目录创建 `CLAUDE.local.md`。它与 `CLAUDE.md` 一起加载并以相同方式处理。将 `CLAUDE.local.md` 添加到您的 `.gitignore` 以便不提交它。设置 `CLAUDE_CODE_NEW_INIT=1` 后,运行 `/init` 并选择个人选项会为您执行此操作。

140 140 

141如果您在同一存储库的多个 git worktrees 中工作,gitignored `CLAUDE.local.md` 仅存在于您创建它的 worktree 中。要在 worktrees 中共享个人指令,请改为从您的主目录导入文件:141如果您在同一仓库的多个 git worktree 中工作,gitignored `CLAUDE.local.md` 仅存在于您创建它的 worktree 中。要在 worktree 之间共享个人指令,请改为从您的主目录导入文件:

142 142 

143```text theme={null}143```text theme={null}

144# Individual Preferences144# Individual Preferences


146```146```

147 147 

148<Warning>148<Warning>

149 项目级内存文件中的导入是外部的,当其路径解析到工作目录外时,例如上面的主目录导入。Claude Code 首次在项目中遇到外部导入时,会显示一个批准对话框,列出文件。如果您拒绝,导入保持禁用状态,对话框不会再出现。149 项目级记忆文件中的导入是外部的,当其路径解析到工作目录外时,例如上面的主目录导入。Claude Code 首次在项目中遇到外部导入时,会显示一个批准对话框,列出文件。如果您拒绝,导入保持禁用状态,对话框不会再出现。

150 150 

151 Claude Code 显示对话框以保护您免受其他人提交到共享项目的文件。用户范围内存文件,例如 `~/.claude/CLAUDE.md` 和 `~/.claude/rules/`,是您自己编写的文件。除了在您的桌面上的 [Cowork](https://claude.com/product/cowork) 会话中,Claude Code 加载它们的导入而不显示对话框,并像信任您的其余个人配置一样信任它们。151 Claude Code 显示对话框以保护您免受其他人提交到共享项目的文件。用户范围记忆文件,例如 `~/.claude/CLAUDE.md` 和 `~/.claude/rules/`,是您自己编写的文件。除了在您的桌面上的 [Cowork](https://claude.com/product/cowork) 会话中,Claude Code 加载它们的导入而不显示对话框,并像信任您的其余个人配置一样信任它们。

152 152 

153 在您的桌面上的 Cowork 会话中,Claude Code 跳过用户范围文件中解析到会话工作目录外的路径的任何导入,并加载文件的其余部分。在这些会话中,它也跳过本身是符号链接或硬链接的 `~/.claude/CLAUDE.md`,以及指向工作目录外的符号链接 `~/.claude/rules/` 目录或规则文件。153 在您的桌面上的 Cowork 会话中,Claude Code 跳过用户范围文件中解析到会话工作目录外的路径的任何导入,并加载文件的其余部分。在这些会话中,它也跳过本身是符号链接或硬链接的 `~/.claude/CLAUDE.md`,以及指向工作目录外的符号链接 `~/.claude/rules/` 目录或规则文件。

154</Warning>154</Warning>


161 161 

162所有发现的文件被连接到上下文中,而不是相互覆盖。在目录树中,内容从文件系统根目录向下排序到您的工作目录。对于 `foo/bar/` 示例,`foo/CLAUDE.md` 在上下文中出现在 `foo/bar/CLAUDE.md` 之前,因此更接近您启动 Claude 的位置的指令最后读取。在每个目录中,`CLAUDE.local.md` 附加在 `CLAUDE.md` 之后,因此您的个人笔记是 Claude 在该级别读取的最后一件事。162所有发现的文件被连接到上下文中,而不是相互覆盖。在目录树中,内容从文件系统根目录向下排序到您的工作目录。对于 `foo/bar/` 示例,`foo/CLAUDE.md` 在上下文中出现在 `foo/bar/CLAUDE.md` 之前,因此更接近您启动 Claude 的位置的指令最后读取。在每个目录中,`CLAUDE.local.md` 附加在 `CLAUDE.md` 之后,因此您的个人笔记是 Claude 在该级别读取的最后一件事。

163 163 

164Claude 还发现当前工作目录下子目录中的 `CLAUDE.md` 和 `CLAUDE.local.md` 文件。它们不是在启动时加载,而是在 Claude 读取这些子目录中的文件时包含。164Claude 还发现当前工作目录下子目录中的 `CLAUDE.md` 和 `CLAUDE.local.md` 文件。它们不是在启动时加载,而是在 Claude 读取这些子目录中的文件时包含。对于 `.claude/worktrees/` 下 worktree 中的文件,请参阅 [使用 worktree 隔离子代理](/docs/zh-CN/worktrees#isolate-subagents-with-worktrees)。

165 165 

166如果您在大型 monorepo 中工作,其中其他团队的 CLAUDE.md 文件被拾取,请使用 [`claudeMdExcludes`](#exclude-specific-claude-md-files) 跳过它们。有关根目录和每目录 CLAUDE.md 文件和规则的完整布局,请参阅 [Monorepos 和大型存储库](/docs/zh-CN/large-codebases)。166如果您在大型 monorepo 中工作,其中其他团队的 CLAUDE.md 文件被拾取,请使用 [`claudeMdExcludes`](#exclude-specific-claude-md-files) 跳过它们。有关根目录和每目录 CLAUDE.md 文件和规则的完整布局,请参阅 [Monorepos 和大型仓库](/docs/zh-CN/large-codebases)。

167 167 

168CLAUDE.md 文件中的块级 HTML 注释(`<!-- maintainer notes -->`)在内容注入到 Claude 的上下文之前被剥离。使用它们为人类维护者留下笔记,而不在注释上花费上下文令牌。代码块内的注释被保留。当您直接使用 Read 工具打开 CLAUDE.md 文件时,注释保持可见。168CLAUDE.md 文件中的块级 HTML 注释(`<!-- maintainer notes -->`)在内容注入到 Claude 的上下文之前被剥离。使用它们为人类维护者留下笔记,而不在注释上花费上下文 token。代码块内的注释被保留。当您直接使用 Read 工具打开 CLAUDE.md 文件时,注释保持可见。

169 169 

170<h4 id="load-from-additional-directories">170<h4 id="load-from-additional-directories">

171 从其他目录加载171 从其他目录加载


173 173 

174`--add-dir` 标志使 Claude 能够访问主工作目录外的其他目录。默认情况下,这些目录中的 CLAUDE.md 文件不加载。174`--add-dir` 标志使 Claude 能够访问主工作目录外的其他目录。默认情况下,这些目录中的 CLAUDE.md 文件不加载。

175 175 

176要也从其他目录加载内存文件,请设置 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` 环境变量:176要也从其他目录加载记忆文件,请设置 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` 环境变量:

177 177 

178```bash theme={null}178```bash theme={null}

179CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config179CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config


190对于较大的项目,您可以使用 `.claude/rules/` 目录将指令组织到多个文件中。这使指令模块化并更容易让团队维护。规则也可以 [范围限定到特定文件路径](#path-specific-rules),因此它们仅在 Claude 处理匹配文件时加载到上下文中,减少噪音并节省上下文空间。190对于较大的项目,您可以使用 `.claude/rules/` 目录将指令组织到多个文件中。这使指令模块化并更容易让团队维护。规则也可以 [范围限定到特定文件路径](#path-specific-rules),因此它们仅在 Claude 处理匹配文件时加载到上下文中,减少噪音并节省上下文空间。

191 191 

192<Note>192<Note>

193 规则在每个会话或打开匹配文件时加载到上下文中。对于不需要始终在上下文中的特定任务指令,请改用 [skills](/docs/zh-CN/skills),它仅在您调用它们或 Claude 确定它们与您的提示相关时加载。193 规则在每个会话或打开匹配文件时加载到上下文中。对于不需要始终在上下文中的特定任务指令,请改用 [skills](/docs/zh-CN/skills),它仅在您调用它们或 Claude 确定它们与您的提示词相关时加载。

194</Note>194</Note>

195 195 

196<h4 id="set-up-rules">196<h4 id="set-up-rules">


232- Include OpenAPI documentation comments232- Include OpenAPI documentation comments

233```233```

234 234 

235没有 `paths` 字段的规则无条件加载并适用于所有文件。路径范围规则在 Claude 读取与模式匹配的文件时触发,而不是在每个工具使用时。从 v2.1.198 开始,当 Claude 通过项目目录的符号链接路径到达文件时,匹配也有效,例如在符号链接检出中。235没有 `paths` 字段的规则无条件加载并适用于所有文件。路径范围规则在 Claude 读取与模式匹配的文件时触发,而不是在每个工具使用时。当 Claude 通过项目目录的符号链接路径到达文件时,匹配也有效,例如在符号链接检出中。

236 236 

237在 `paths` 字段中使用 glob 模式按扩展名、目录或任何组合匹配文件:237在 `paths` 字段中使用 glob 模式按扩展名、目录或任何组合匹配文件:

238 238 


278 278 

279`.claude/rules/` 目录支持符号链接,因此您可以维护一组共享规则并将它们链接到多个项目中。循环符号链接被检测并妥善处理。279`.claude/rules/` 目录支持符号链接,因此您可以维护一组共享规则并将它们链接到多个项目中。循环符号链接被检测并妥善处理。

280 280 

281Claude Code 将其目标在工作目录外的符号链接视为 [external import](#import-additional-files)。链接的规则不加载,直到您批准项目的外部导入,之后仅加载没有 [`paths` 字段](#path-specific-rules) 的规则。Claude Code 仅当项目内存文件使用 `@path` 导入工作目录外的文件时才要求该批准,而不是仅针对符号链接。要加载共享规则而不需要该批准,请将它们保存在 [`~/.claude/rules/`](#user-level-rules) 中,它们适用于您机器上的每个项目。281Claude Code 将其目标在工作目录外的符号链接视为 [external import](#import-additional-files)。链接的规则不加载,直到您批准项目的外部导入,之后仅加载没有 [`paths` 字段](#path-specific-rules) 的规则。Claude Code 仅当项目记忆文件使用 `@path` 导入工作目录外的文件时才要求该批准,而不是仅针对符号链接。要加载共享规则而不需要该批准,请将它们保存在 [`~/.claude/rules/`](#user-level-rules) 中,它们适用于您机器上的每个项目。

282 282 

283此示例链接共享目录和单个文件:283此示例链接共享目录和单个文件:

284 284 


329 329 

330`claudeMd` 键允许您将托管 CLAUDE.md 内容直接放入 `managed-settings.json` 中,而不是部署单独的文件。330`claudeMd` 键允许您将托管 CLAUDE.md 内容直接放入 `managed-settings.json` 中,而不是部署单独的文件。

331 331 

332**范围**:机器上的每个 Claude Code 会话,在每个存储库中。对于存储库特定的指导,改为提交项目 CLAUDE.md。332**范围**:机器上的每个 Claude Code 会话,在每个仓库中。对于仓库特定的指导,改为提交项目 CLAUDE.md。

333 333 

334**优先级**:与托管 CLAUDE.md 文件相同。在用户和项目 CLAUDE.md 之前加载。334**优先级**:与托管 CLAUDE.md 文件相同。在用户和项目 CLAUDE.md 之前加载。

335 335 


538 启用或禁用自动记忆538 启用或禁用自动记忆

539</h3>539</h3>

540 540 

541自动记忆默认开启。要切换它,在会话中打开 `/memory` 并使用自动记忆切换,它将 `autoMemoryEnabled` 保存到你的用户设置 `~/.claude/settings.json`。要为单个项目关闭它,在该项目的设置中设置 `autoMemoryEnabled`:541自动记忆在本地会话中默认开启。在 [Claude Tag](https://claude.com/docs/claude-tag/overview) 会话之外,[自托管环境](/docs/zh-CN/self-hosted-environments-configuration#how-each-session’s-config-is-assembled)中的会话默认关闭自动记忆。

542 

543要切换它,在会话中打开 `/memory` 并使用自动记忆切换,它将 `autoMemoryEnabled` 保存到您的用户设置 `~/.claude/settings.json`。

544 

545在以下会话中,该切换可以关闭自动记忆,但无法将其重新开启:

546 

547* [后台会话](/docs/zh-CN/agent-view)

548* 由另一个 Claude Code 会话启动的会话,例如 Claude 通过其 Bash 工具运行 `claude` 时

549 

550在这些会话中自动记忆关闭时,切换显示为 `off · can't be turned on here; use a session started outside Claude Code`。要重新开启自动记忆,请直接在终端中运行 `claude`,并在该会话中使用 `/memory` 切换。

551 

552要为单个项目关闭它,在该项目的设置中设置 `autoMemoryEnabled`:

542 553 

543```json theme={null}554```json theme={null}

544{555{

Details

113 配置部署时,您还需要选择其[托管选项](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options),这决定了推理是在 Azure 上运行还是在 Anthropic 基础设施上运行。113 配置部署时,您还需要选择其[托管选项](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options),这决定了推理是在 Azure 上运行还是在 Anthropic 基础设施上运行。

114 114 

115<h3 id="2-configure-azure-credentials">115<h3 id="2-configure-azure-credentials">

116 2) 配置 Azure 凭证116 2) 配置 Azure 凭据

117</h3>117</h3>

118 118 

119Claude Code 支持三种 Microsoft Foundry 身份验证方法。选择最适合您安全要求的方法。119Claude Code 支持三种 Microsoft Foundry 身份验证方法。选择最适合您安全要求的方法。


131 131 

132**选项 B:Microsoft Entra ID 身份验证**132**选项 B:Microsoft Entra ID 身份验证**

133 133 

134当未设置 `ANTHROPIC_FOUNDRY_API_KEY` 和 `ANTHROPIC_FOUNDRY_AUTH_TOKEN` 时,Claude Code 会自动使用 Azure SDK [默认凭证链](https://learn.microsoft.com/en-us/azure/developer/javascript/sdk/authentication/credential-chains#defaultazurecredential-overview)。134当未设置 `ANTHROPIC_FOUNDRY_API_KEY` 和 `ANTHROPIC_FOUNDRY_AUTH_TOKEN` 时,Claude Code 会自动使用 Azure SDK [默认凭据链](https://learn.microsoft.com/en-us/azure/developer/javascript/sdk/authentication/credential-chains#defaultazurecredential-overview)。

135这支持多种方法来验证本地和远程工作负载。135这支持多种方法来验证本地和远程工作负载。

136 136 

137在本地环境中,您通常可以使用 Azure CLI:137在本地环境中,您通常可以使用 Azure CLI:


150export ANTHROPIC_FOUNDRY_AUTH_TOKEN=your-entra-access-token150export ANTHROPIC_FOUNDRY_AUTH_TOKEN=your-entra-access-token

151```151```

152 152 

153`ANTHROPIC_FOUNDRY_AUTH_TOKEN` 优先于 `ANTHROPIC_FOUNDRY_API_KEY` 和默认凭证链。153`ANTHROPIC_FOUNDRY_AUTH_TOKEN` 优先于 `ANTHROPIC_FOUNDRY_API_KEY` 和默认凭据链。

154 154 

155<Note>155<Note>

156 使用 Microsoft Foundry 时,`/logout` 命令不可用,因为身份验证通过 Azure 凭证处理。156 使用 Microsoft Foundry 时,`/logout` 命令不可用,因为身份验证通过 Azure 凭据处理。

157</Note>157</Note>

158 158 

159<h3 id="3-configure-claude-code">159<h3 id="3-configure-claude-code">


172# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic172# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic

173```173```

174 174 

175将 `ANTHROPIC_FOUNDRY_RESOURCE` 仅设置为资源名称,例如 `my-resource`。如果设置为 URL 或主机名,Claude Code 会在您发送消息时[拒绝该值](/docs/zh-CN/errors#anthropic-foundry-resource-must-be-a-foundry-resource-name)。

176 

175<h3 id="4-pin-model-versions">177<h3 id="4-pin-model-versions">

176 4. 固定模型版本178 4. 固定模型版本

177</h3>179</h3>


194 196 

195有关当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。有关完整的环境变量列表,请参阅[模型配置](/docs/zh-CN/model-config#pin-models-for-third-party-deployments)。197有关当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。有关完整的环境变量列表,请参阅[模型配置](/docs/zh-CN/model-config#pin-models-for-third-party-deployments)。

196 198 

197[Prompt caching](/docs/zh-CN/prompt-caching) 会自动启用。要请求 1 小时的缓存 TTL 而不是 5 分钟的默认值,请设置以下变量;具有 1 小时 TTL 的缓存写入按更高的费率计费:199[提示缓存](/docs/zh-CN/prompt-caching)会自动启用。要请求 1 小时的缓存 TTL 而不是 5 分钟的默认值,请设置以下变量;具有 1 小时 TTL 的缓存写入按更高的费率计费:

198 200 

199```bash theme={null}201```bash theme={null}

200export ENABLE_PROMPT_CACHING_1H=1202export ENABLE_PROMPT_CACHING_1H=1


212claude214claude

213```215```

214 216 

215Claude Code 从环境中读取 `CLAUDE_CODE_USE_FOUNDRY` 和其他 Microsoft Foundry 变量,并在第一个提示时连接到您的 Azure 资源。与 Amazon Bedrock 和 Google Cloud 的 Agent Platform 不同,Microsoft Foundry 没有交互式设置向导,因此第 3 和第 4 步中的环境变量是唯一的配置路径。217Claude Code 从环境中读取 `CLAUDE_CODE_USE_FOUNDRY` 和其他 Microsoft Foundry 变量,并在第一个提示词时连接到您的 Azure 资源。与 Amazon Bedrock 和 Google Cloud 的 Agent Platform 不同,Microsoft Foundry 没有交互式设置向导,因此第 3 和第 4 步中的环境变量是唯一的配置路径。

216 218 

217要验证您的设置,请在 Claude Code 中运行 `/status`。API 提供商行显示 `Microsoft Foundry`,以及您配置的资源名称或基础 URL。219要验证您的设置,请在 Claude Code 中运行 `/status`。API 提供商行显示 `Microsoft Foundry`,以及您配置的资源名称或基础 URL。

218 220 

model-config.md +117 −103

Details

241 限制模型选择241 限制模型选择

242</h2>242</h2>

243 243 

244企业管理员可以在[托管或策略设置](/docs/zh-CN/managed-settings)中使用 `availableModels` 来限制用户可以选择的模型。条目可以匹配模型系列(如 `sonnet`)、版本前缀(如 `claude-sonnet-4-5`)或完整模型 ID(如 `claude-sonnet-4-5-20250929`)。版本前缀也会匹配扩展它的后续模型 ID,因此 `claude-fable-5` 允许 Fable 5 和 Fable 5.1,而 `claude-fable-5-1` 仅允许 Fable 5.1。要阻止列表允许的模型,或使每个模型 ID 条目仅允许它命名的版本,请参阅[阻止特定模型或版本](#block-specific-models-or-versions)。244管理员可以在[托管或策略设置](/docs/zh-CN/managed-settings)中使用 `availableModels` 来限制用户可以选择的模型。条目可以匹配模型系列(如 `sonnet`)、版本前缀(如 `claude-sonnet-4-5`)或完整模型 ID(如 `claude-sonnet-4-5-20250929`)。版本前缀也会匹配扩展它的后续模型 ID,因此 `claude-fable-5` 允许 Fable 5 和 Fable 5.1,而 `claude-fable-5-1` 仅允许 Fable 5.1。要阻止列表允许的模型,或使每个模型 ID 条目仅允许它命名的版本,请参阅[阻止特定模型或版本](#block-specific-models-or-versions)。

245 245 

246在嵌入 Claude Code 并设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 的平台上,主机的模型配置优先于托管模型设置,而托管的 `availableModels` 允许列表保持有效,除非主机提供自己的列表;[托管设置优先级的例外](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence)说明了主机覆盖的键和变量。246在嵌入 Claude Code 并设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 的平台上,主机的模型配置优先于托管模型设置,而托管的 `availableModels` 允许列表保持有效,除非主机提供自己的列表;[托管设置优先级的例外](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence)说明了主机覆盖的键和变量。

247 247 


250* **主会话模型**:`/model`、`--model` 标志、`ANTHROPIC_MODEL` 环境变量、`model` 设置、[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions) 和[恢复会话](#setting-your-model)时恢复的模型250* **主会话模型**:`/model`、`--model` 标志、`ANTHROPIC_MODEL` 环境变量、`model` 设置、[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions) 和[恢复会话](#setting-your-model)时恢复的模型

251* **别名解析**:环境变量 `ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_HAIKU_MODEL` 和 `ANTHROPIC_DEFAULT_FABLE_MODEL` 无法将允许的别名重定向到列表外的模型251* **别名解析**:环境变量 `ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_HAIKU_MODEL` 和 `ANTHROPIC_DEFAULT_FABLE_MODEL` 无法将允许的别名重定向到列表外的模型

252* **快速模式**:当 `/fast` 会隐式切换到列表外的 Opus 模型时,它会拒绝切换,并显示消息"不在您组织的允许模型中"252* **快速模式**:当 `/fast` 会隐式切换到列表外的 Opus 模型时,它会拒绝切换,并显示消息"不在您组织的允许模型中"

253* **子代理和队友模型**:[子代理](/docs/zh-CN/sub-agents#choose-a-model)前置元数据中的 `model` 字段、Agent 工具的 `model` 参数、[代理团队](/docs/zh-CN/agent-teams#specify-teammates-and-models)队友模型、`CLAUDE_CODE_SUBAGENT_MODEL`,以及在 v2.1.197 及更早版本中,`/agents` 向导中的模型选择器&#x20;253* **子代理和队友模型**:[子代理](/docs/zh-CN/sub-agents#choose-a-model) frontmatter 中的 `model` 字段、Agent 工具的 `model` 参数、[agent team](/docs/zh-CN/agent-teams#specify-teammates-and-models) 队友模型、`CLAUDE_CODE_SUBAGENT_MODEL`,以及在 v2.1.197 及更早版本中,`/agents` 向导中的模型选择器&#x20;

254* **技能和命令模型**:[技能和命令](/docs/zh-CN/skills)中的 `model` 前置元数据254* **skill 和命令模型**:[skill 和命令](/docs/zh-CN/skills)中的 `model` frontmatter

255* **顾问模型**:配置的 [`advisorModel`](/docs/zh-CN/advisor) 设置和 `--advisor` 标志255* **顾问模型**:配置的 [`advisorModel`](/docs/zh-CN/advisor) 设置和 `--advisor` 标志

256* **后台代理模型**:在[分派选择器](/docs/zh-CN/agent-view)中选择的模型256* **后台 Agent 模型**:在 [Dispatch 选择器](/docs/zh-CN/agent-view)中选择的模型

257 257 

258在 Anthropic API 和 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws) 上,当允许列表允许该模型时,模型系列别名 `opus`、`sonnet`、`haiku` 或 `fable` 解析为其通常的模型。当允许列表阻止该模型时,Claude Code 替换允许列表允许的该系列的最新版本,并显示一条通知,命名请求的和替换的模型。例如,使用 `["sonnet", "claude-opus-4-6"]`,`/model opus` 和 `--model opus` 都选择 Claude Opus 4.6,这是允许的最新 Opus。在 v2.1.205 之前,最新发布版本在列表外的别名被拒绝或替换,就像任何其他被阻止的选择一样,即使列表允许较旧版本。258在 Anthropic API 和 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws) 上,当允许列表允许该模型时,模型系列别名 `opus`、`sonnet`、`haiku` 或 `fable` 解析为其通常的模型。当允许列表阻止该模型时,Claude Code 替换允许列表允许的该系列的最新版本,并显示一条通知,命名请求的和替换的模型。例如,使用 `["sonnet", "claude-opus-4-6"]`,`/model opus` 和 `--model opus` 都选择 Claude Opus 4.6,这是允许的最新 Opus。在 v2.1.205 之前,最新发布版本在列表外的别名被拒绝或替换,就像任何其他被阻止的选择一样,即使列表允许较旧版本。

259 259 


264* **`/model`**:Claude Code 以错误拒绝切换264* **`/model`**:Claude Code 以错误拒绝切换

265* **`--model` 标志、`ANTHROPIC_MODEL` 或 `model` 设置**:Claude Code 在启动时用警告替换该值,命名请求的和替换的模型,会话在默认模型上启动265* **`--model` 标志、`ANTHROPIC_MODEL` 或 `model` 设置**:Claude Code 在启动时用警告替换该值,命名请求的和替换的模型,会话在默认模型上启动

266* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**:Claude Code 忽略该变量266* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**:Claude Code 忽略该变量

267* **子代理或队友覆盖**:Claude Code 在回退模型上运行子代理或队友,而不是使请求失败。有关子代理回退,请参阅[选择模型](/docs/zh-CN/sub-agents#choose-a-model),有关队友回退,请参阅[指定队友和模型](/docs/zh-CN/agent-teams#specify-teammates-and-models)。267* **子代理或队友覆盖**:Claude Code 在备用模型上运行子代理或队友,而不是使请求失败。有关子代理回退,请参阅[选择模型](/docs/zh-CN/sub-agents#choose-a-model),有关队友回退,请参阅[指定队友和模型](/docs/zh-CN/agent-teams#specify-teammates-and-models)。

268 268 

269 在交互式会话中,当 Claude Code 通过此回退或上面的最新允许版本替换来替换子代理的模型时,它会警告您,命名请求的和替换的模型;它不报告队友的回退。269 在交互式会话中,当 Claude Code 通过此回退或上面的最新允许版本替换来替换子代理的模型时,它会警告您,命名请求的和替换的模型;它不报告队友的回退。

270 270 

271 在上面的最新允许版本替换操作的地方,被阻止的系列别名遵循它。在 v2.1.222 之前,别名在每个提供商上像任何其他被阻止的值一样回退271 在上面的最新允许版本替换操作的地方,被阻止的系列别名遵循它。在 v2.1.222 之前,别名在每个提供商上像任何其他被阻止的值一样回退

272* **技能或命令覆盖**:Claude Code 忽略覆盖,包括被阻止的系列别名,技能或命令在会话模型上运行。[在子代理中运行](/docs/zh-CN/skills#run-skills-in-a-subagent)的技能或命令遵循上面的子代理行为272* **skill 或命令覆盖**:Claude Code 忽略覆盖,包括被阻止的系列别名,skill 或命令在会话模型上运行。[在子代理中运行](/docs/zh-CN/skills#run-skills-in-a-subagent)的 skill 或命令遵循上面的子代理行为

273* **`advisorModel` 设置**:顾问对会话禁用273* **`advisorModel` 设置**:顾问对会话禁用

274* **`--advisor` 标志**:Claude Code 在启动时以错误退出。在[后台会话](/docs/zh-CN/agent-view)中,它改为在没有顾问的情况下启动会话,而不是退出274* **`--advisor` 标志**:Claude Code 在启动时以错误退出。在[后台会话](/docs/zh-CN/agent-view)中,它改为在没有顾问的情况下启动会话,而不是退出

275 275 


277 277 

278Claude Code 代表您进行的模型更改以相同的方式检查:278Claude Code 代表您进行的模型更改以相同的方式检查:

279 279 

280* **[回退模型链](#fallback-model-chains)**:允许列表外的条目被删除280* **[备用模型链](#fallback-model-chains)**:允许列表外的条目被删除

281* **Plan 模式升级**:在 Anthropic API 和 AWS 上的 Claude Platform 上,升级(如 [`opusplan`](#opusplan-model-setting))到排除的模型使用升级系列允许的最新版本。在具有提供商特定模型 ID 的提供商上,以及当不允许任何版本时,升级被跳过,规划继续在会话的模型上进行281* **计划模式升级**:在 Anthropic API 和 AWS 上的 Claude Platform 上,升级(如 [`opusplan`](#opusplan-model-setting))到排除的模型使用升级系列允许的最新版本。在具有提供商特定模型 ID 的提供商上,以及当不允许任何版本时,升级被跳过,规划继续在会话的模型上进行

282* **[自动模型回退](#automatic-model-fallback)**:目标被排除的回退不运行,因此标记的请求以拒绝结束282* **[自动模型回退](#automatic-model-fallback)**:目标被排除的回退不运行,因此标记的请求以拒绝结束

283* **[自动模式分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)**:分类器的 Claude Sonnet 5 默认值仅在允许列表允许 Sonnet 5 时适用。当它被排除时,分类器在会话的模型上运行,允许列表已经管理该模型,或在会话运行[Fable 模型](#work-with-fable)时在 Opus 模型上运行。在 Anthropic API 以外的提供商上,该 Opus 回退在提供商的默认 Opus 模型上运行,不咨询允许列表。需要 Claude Code v2.1.210 或更高版本283* **[自动模式分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)**:分类器的 Claude Sonnet 5 默认值仅在允许列表允许 Sonnet 5 时适用。当它被排除时,分类器在会话的模型上运行,允许列表已经管理该模型,或在会话运行 [Fable 模型](#work-with-fable)时在 Opus 模型上运行。在 Anthropic API 以外的提供商上,该 Opus 回退在您于 `ANTHROPIC_DEFAULT_OPUS_MODEL` 中设置的模型上运行,否则在 Opus 5 上运行,不咨询允许列表。需要 Claude Code v2.1.210 或更高版本

284* **[快速模式](/docs/zh-CN/fast-mode)**:当会话之后运行的模型在允许列表外时,启用快速模式被拒绝284* **[快速模式](/docs/zh-CN/fast-mode)**:当会话之后运行的模型在允许列表外时,启用快速模式被拒绝

285 285 

286```json theme={null}286```json theme={null}


290```290```

291 291 

292<h3 id="surface-coverage">292<h3 id="surface-coverage">

293 表面覆盖293 使用入口覆盖范围

294</h3>294</h3>

295 295 

296每个表面都强制执行它接收的允许列表。哪个交付机制到达每个表面不同:296每个使用入口都强制执行它接收的允许列表。哪个交付机制到达每个使用入口不同:

297 297 

298| 交付机制 | CLI 和 IDE | 桌面本地会话 | Web、移动和云会话 | Agent SDK 和非交互式 | Cowork |298| 交付机制 | CLI 和 IDE | 桌面本地会话 | Web、移动和云端会话 | Agent SDK 和非交互式 | Cowork |

299| :- | :- | :- | :- | :- | :- |299| :- | :- | :- | :- | :- | :- |

300| 来自管理控制台的[服务器管理设置](/docs/zh-CN/server-managed-settings) | 强制执行 | 强制执行 | 强制执行,除了[Claude Tag](https://claude.com/docs/claude-tag/overview) 会话 | 强制执行 | 远程 Cowork 会话:服务器检查模型。在用户的机器上:未交付。 |300| 来自管理控制台的[服务器管理设置](/docs/zh-CN/server-managed-settings) | 强制执行 | 强制执行 | 强制执行,除了[Claude Tag](https://claude.com/docs/claude-tag/overview) 会话 | 强制执行 | 远程 Cowork 会话:服务器检查模型。在用户的机器上:未交付。 |

301| [MDM 或托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms) | 强制执行 | 强制执行 | 在 Anthropic 托管环境中未交付;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,根据[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)从运行器镜像强制执行 | 强制执行 | 在部署的地方强制执行 |301| [MDM 或托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms) | 强制执行 | 强制执行 | 在 Anthropic 托管环境中未交付;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,根据[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)从运行器镜像强制执行 | 强制执行 | 在部署的地方强制执行 |

302 302 

303* [云会话](/docs/zh-CN/claude-code-on-the-web)(包括您从桌面应用启动的会话)默认在 Anthropic 管理的 VM 上运行:部署到您的设备的设置不会到达它们,因此通过服务器管理设置交付允许列表。您的组织路由到[自托管环境](/docs/zh-CN/self-hosted-environments)的会话在您自己的计算上运行,也读取运行器镜像中的托管设置文件。[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明了该文件何时适用。云会话中的中途模型切换在请求的模型被允许列表排除时被拒绝。当您的服务器管理设置中的 `availableModels` 列表非空时,服务器拒绝在列表排除的模型上启动云会话的请求。303* [云端会话](/docs/zh-CN/claude-code-on-the-web)(包括您从桌面应用启动的会话)默认在 Anthropic 管理的 VM 上运行:部署到您的设备的设置不会到达它们,因此通过服务器管理设置交付允许列表。您的组织路由到[自托管环境](/docs/zh-CN/self-hosted-environments)的会话在您自己的计算上运行,也读取运行器镜像中的托管设置文件。[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明了该文件何时适用。云端会话中的中途模型切换在请求的模型被允许列表排除时被拒绝。当您的服务器管理设置中的 `availableModels` 列表非空时,服务器拒绝在 claude.ai/code 或从桌面应用以列表排除的模型启动云端会话的请求。

304* [Claude Tag](https://claude.com/docs/claude-tag/overview) 会话在云环境中运行,但不接收服务器管理设置;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,它们仍然读取运行器镜像中的托管设置文件。要为这些会话设置模型,请参阅 Claude Tag 管理员指南中的[为范围选择模型](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope)。304* [Claude Tag](https://claude.com/docs/claude-tag/overview) 会话在云环境中运行,但不接收服务器管理设置;在[自托管环境](/docs/zh-CN/self-hosted-environments)中,它们仍然读取运行器镜像中的托管设置文件。要为这些会话设置模型,请参阅 Claude Tag 管理员指南中的[为作用域选择模型](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope)。

305* Cowork(Claude 桌面应用中的代理工作选项卡)在 Claude Code 上运行其会话,但按设计不从 claude.ai 管理控制台接收服务器管理设置。当您的服务器管理设置中的 `availableModels` 列表非空且用户选择列表外的模型时,服务器拒绝该模型用于远程 Cowork 会话。当托管设置文件存在于会话运行的地方时,它适用于 Cowork 会话;远程 Cowork 会话在 Anthropic 管理的 VM 上运行,其中不存在设备部署的文件。305* Cowork(Claude 桌面应用中的 Agent 式工作选项卡)在 Claude Code 上运行其会话,但按设计不从 claude.ai 管理控制台接收服务器管理设置。当您的服务器管理设置中的 `availableModels` 列表非空且用户选择列表外的模型时,服务器拒绝该模型用于远程 Cowork 会话。当托管设置文件存在于会话运行的地方时,它适用于 Cowork 会话;远程 Cowork 会话在 Anthropic 管理的 VM 上运行,其中不存在设备部署的文件。

306* [第三方提供商](/docs/zh-CN/server-managed-settings#platform-availability)(如 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws))上的会话不接收服务器管理设置,因此通过 MDM 或托管设置文件在那里交付允许列表。306* [第三方提供商](/docs/zh-CN/server-managed-settings#platform-availability)(如 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws))上的会话不接收服务器管理设置,因此通过 MDM 或托管设置文件在那里交付允许列表。

307* 服务器管理交付还需要会话使用[符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability)进行身份验证。仅通过 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本生成密钥的舰队应通过 MDM 或托管设置文件交付允许列表。307* 服务器管理交付还需要会话使用[符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability)进行身份验证。仅通过 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 脚本生成密钥的舰队应通过 MDM 或托管设置文件交付允许列表。

308* 桌面代码选项卡还托管 [SSH 会话](/docs/zh-CN/desktop#ssh-sessions),它们从运行的远程主机读取托管设置文件。请参阅[桌面托管设置](/docs/zh-CN/desktop#managed-settings)。308* 桌面代码选项卡还托管 [SSH 会话](/docs/zh-CN/desktop#ssh-sessions),它们从运行的远程主机读取托管设置文件。请参阅[桌面托管设置](/docs/zh-CN/desktop#managed-settings)。


329}329}

330```330```

331 331 

332对于在其帐户上没有模型[记录](#setting-your-model)的成员,默认选项解析为帐户类型默认值,或当管理员设置了一个时解析为[组织默认模型](#organization-default-model)。当该模型不在允许列表中时,默认选项改为解析为命名允许的、可用模型的第一个 `availableModels` 条目,`/model` 选择器的默认行显示该模型。这适用于到达默认值的所有地方:会话启动、在 `/model` 中选择默认值、[回退模型链](#fallback-model-chains)中的 `"default"` 关键字,以及排除选择被删除时使用的回退。在成员帐户上记录的模型也针对 `availableModels` 进行检查;[设置您的模型](#setting-your-model)描述了默认选项如何处理它。332对于在其帐户上没有模型[记录](#setting-your-model)的成员,默认选项解析为帐户类型默认值,或当管理员设置了一个时解析为[组织默认模型](#organization-default-model)。当该模型不在允许列表中时,默认选项改为解析为命名允许的、可用模型的第一个 `availableModels` 条目,`/model` 选择器的默认行显示该模型。这适用于到达默认值的所有地方:会话启动、在 `/model` 中选择默认值、[备用模型链](#fallback-model-chains)中的 `"default"` 关键字,以及排除选择被删除时使用的备用模型。在成员帐户上记录的模型也针对 `availableModels` 进行检查;[设置您的模型](#setting-your-model)描述了默认选项如何处理它。

333 333 

334`enforceAvailableModels` 仅当 `availableModels` 非空时才重新映射默认选项。当 `availableModels` 非空但没有条目解析为允许的、可用的模型时,强制执行被跳过,并显示仅在 `--debug` 下可见的警告。在列表中保留至少一个保证可用的条目以避免这种情况。334`enforceAvailableModels` 仅当 `availableModels` 非空时才重新映射默认选项。当 `availableModels` 非空但没有条目解析为允许的、可用的模型时,强制执行被跳过,并显示仅在 `--debug` 下可见的警告。在列表中保留至少一个保证可用的条目以避免这种情况。

335 335 


368 合并行为368 合并行为

369</h3>369</h3>

370 370 

371当 Claude Code 应用的托管设置定义 `availableModels` 时,该列表单独适用,除了[提供自己的主机平台](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence):用户、项目或本地设置中的条目无法扩展它,Claude Code 也永远不会跨托管源合并 `availableModels`;[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明了哪个源的列表适用。否则,来自用户、项目和本地设置的列表像其他数组设置一样[连接和去重](/docs/zh-CN/settings#settings-precedence)。在 Claude Code v2.1.175 之前,来自较低优先级范围的条目合并到托管列表中,而不是被它替换。371当 Claude Code 应用的托管设置定义 `availableModels` 时,该列表单独适用,除了[提供自己的主机平台](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence):用户、项目或本地设置中的条目无法扩展它,Claude Code 也永远不会跨托管源合并 `availableModels`;[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)说明了哪个源的列表适用。否则,来自用户、项目和本地设置的列表像其他数组设置一样[连接和去重](/docs/zh-CN/settings#settings-precedence)。在 Claude Code v2.1.175 之前,来自较低优先级作用域的条目合并到托管列表中,而不是被它替换。

372 372 

373在有效列表中,命名系列中特定模型的条目(无论是版本前缀还是完整模型 ID)禁用该系列的通配符条目:`["sonnet", "claude-sonnet-4-5"]` 仅允许 Sonnet 4.5 版本,而不是每个 Sonnet 模型。373在有效列表中,命名系列中特定模型的条目(无论是版本前缀还是完整模型 ID)禁用该系列的通配符条目:`["sonnet", "claude-sonnet-4-5"]` 仅允许 Sonnet 4.5 版本,而不是每个 Sonnet 模型。

374 374 


398}398}

399```399```

400 400 

401被阻止的模型(无论 `deniedModels` 是否命名它或 `"exact"` 列表是否省略它)在[允许列表适用](#restrict-model-selection)的所有地方被视为被阻止的选择。它从 `/model` 选择器中隐藏,`/model <name>` 拒绝它。如果您用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置命名被阻止的模型 ID,Claude Code 在启动时删除它并解析默认选项。如果[钩子](/docs/zh-CN/hooks)或后台请求命名 `deniedModels` 阻止的模型(如代理钩子的 `model` 字段),该请求在会话的模型上运行。401被阻止的模型(无论 `deniedModels` 是否命名它或 `"exact"` 列表是否省略它)在[允许列表适用](#restrict-model-selection)的所有地方被视为被阻止的选择。它从 `/model` 选择器中隐藏,`/model <name>` 拒绝它。如果您用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置命名被阻止的模型 ID,Claude Code 在启动时删除它并解析默认选项。如果 [hook](/docs/zh-CN/hooks) 或后台请求命名 `deniedModels` 阻止的模型(如 Agent hook 的 `model` 字段),该请求在会话的模型上运行。

402 402 

403默认选项遵循两个键,无论您是否设置 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model)。如果您使用非空 `availableModels` 设置它,被阻止的默认值计为允许列表外的模型。否则,会解析为被阻止模型的默认选项按此顺序下降:403默认选项遵循两个键,无论您是否设置 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model)。如果您使用非空 `availableModels` 设置它,被阻止的默认值计为允许列表外的模型。否则,会解析为被阻止模型的默认选项按此顺序下降:

404 404 


416 416 

417Claude Enterprise 计划上的组织管理员通过在 claude.ai 管理控制台中禁用单个模型来限制成员可以运行的模型。此限制在 Claude Code 进行身份验证时与帐户的权利一起交付,与设置中的任何 `availableModels` 列表分开,服务器在创建会话时独立强制执行相同的限制。需要 Claude Code v2.1.187 或更高版本。417Claude Enterprise 计划上的组织管理员通过在 claude.ai 管理控制台中禁用单个模型来限制成员可以运行的模型。此限制在 Claude Code 进行身份验证时与帐户的权利一起交付,与设置中的任何 `availableModels` 列表分开,服务器在创建会话时独立强制执行相同的限制。需要 Claude Code v2.1.187 或更高版本。

418 418 

419当成员登录或使用自己的 API 密钥时,限制适用。组织范围的凭证(如组织服务密钥)不与用户绑定,因此限制不适用于它们。419当成员登录或使用自己的 API 密钥时,限制适用。限定于组织的凭据(如组织服务密钥)不与用户绑定,因此限制不适用于它们。

420 420 

421Claude Console 没有模型限制控制。没有 Claude Enterprise 计划的组织(包括其成员通过 Anthropic API 进行身份验证的组织)使用[托管设置](/docs/zh-CN/managed-settings)中的 [`availableModels`](#restrict-model-selection) 限制模型,添加 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) 以覆盖默认选项。[表面覆盖](#surface-coverage)说明了每个表面如何接收和强制执行这些设置。421Claude Console 没有模型限制控制。没有 Claude Enterprise 计划的组织(包括其成员通过 Anthropic API 进行身份验证的组织)使用[托管设置](/docs/zh-CN/managed-settings)中的 [`availableModels`](#restrict-model-selection) 限制模型,添加 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) 以覆盖默认选项。[使用入口覆盖范围](#surface-coverage)说明了每个使用入口如何接收和强制执行这些设置。

422 422 

423受限模型从 `/model` 选择器中隐藏。用 `--model`、`ANTHROPIC_MODEL` 环境变量或 `model` 设置按名称选择它显示通知 `Model "<name>" is restricted by your organization's settings. Using <model> instead.`,会话在允许的模型上启动。为受限模型键入 `/model <name>` 被拒绝,显示 `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.`,会话保持其当前模型。423受限模型从 `/model` 选择器中隐藏。用 `--model`、`ANTHROPIC_MODEL` 环境变量或 `model` 设置按名称选择它显示通知 `Model "<name>" is restricted by your organization's settings. Using <model> instead.`,会话在允许的模型上启动。为受限模型键入 `/model <name>` 被拒绝,显示 `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.`,会话保持其当前模型。

424 424 


447* [托管设置](/docs/zh-CN/managed-settings)中的 `model` 值或通过 `--settings` 提供的值447* [托管设置](/docs/zh-CN/managed-settings)中的 `model` 值或通过 `--settings` 提供的值

448* 您的用户、项目或本地设置中的 `model` 值,包括您使用 `/model` 保存的模型448* 您的用户、项目或本地设置中的 `model` 值,包括您使用 `/model` 保存的模型

449 449 

450管理员还可以配置组织默认值以覆盖用户选择。启用覆盖后,它优先于用户、项目和本地设置中的 `model` 值,因此您使用 `/model` 保存的模型在当前会话中应用,组织默认值在下次启动时返回。当您的选择不同时,`/model` 显示 `您的组织的默认值(<model>)在重启时应用`。即使启用了覆盖,`--model` 标志、`ANTHROPIC_MODEL`、托管设置和 `--settings` 仍然优先。覆盖功能仅对有限的组织可用;请咨询您的 Anthropic 账户团队了解可用性。450管理员还可以配置组织默认值以覆盖用户选择。启用覆盖后,它优先于用户、项目和本地设置中的 `model` 值,因此您使用 `/model` 保存的模型在当前会话中应用,组织默认值在下次启动时返回。当您的选择不同时,`/model` 显示 `Your organization's default (<model>) applies on restart`。即使启用了覆盖,`--model` 标志、`ANTHROPIC_MODEL`、托管设置和 `--settings` 仍然优先。

451 451 

452要限制成员可以选择的模型,请改用[组织模型限制](#organization-model-restrictions)或 [`availableModels`](#restrict-model-selection)。452要限制成员可以选择的模型,请改用[组织模型限制](#organization-model-restrictions)或 [`availableModels`](#restrict-model-selection)。

453 453 


457 457 

458组织默认值在被采用之前会通过这些限制检查:458组织默认值在被采用之前会通过这些限制检查:

459 459 

460* 使用默认前缀匹配时,[`availableModels`](#restrict-model-selection) 本身不适用于组织默认值,因此允许列表外的组织默认值仍然适用。当同时设置了 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) 时,允许列表外的组织默认值会被重新映射到第一个允许列表条目460* 使用默认前缀匹配时,[`availableModels`](#restrict-model-selection) 本身不适用于组织默认值,因此允许列表外的组织默认值仍然适用。当同时设置了 [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) 时,允许列表外的组织默认值也会被重新映射到第一个允许列表条目

461* [组织模型限制](#organization-model-restrictions)拒绝的组织默认值会被替换为其系列中最新的允许模型,或当该系列的每个版本都被限制时被替换为成本较低的系列461* [组织模型限制](#organization-model-restrictions)对您的账户拒绝的组织默认值会被替换为其系列中最新的允许模型,或当该系列的每个版本都被限制时被替换为成本较低的系列

462* 对于 `deniedModels` 或 `"exact"` 列表阻止的组织默认值,请参阅[阻止特定模型或版本](#block-specific-models-or-versions)462* 对于 `deniedModels` 或 `"exact"` 列表阻止的组织默认值,请参阅[阻止特定模型或版本](#block-specific-models-or-versions)

463* 您的账户完全无法使用的组织默认值会被跳过,"默认"选项的解析方式与[没有组织默认值](#default-model-setting)时相同463* 您的账户完全无法使用的组织默认值会被跳过,"默认"选项的解析方式与[没有组织默认值](#default-model-setting)时相同

464 464 

465从 v2.1.199 开始,当组织默认值是与您的账户类型通常默认值不同的模型系列时,`/model` 选择器会为该通常系列保留单独的行,以便您仍然可以为会话切换到它。在 v2.1.196 到 v2.1.198 中,该行在选择器中缺失。465从 v2.1.199 开始,当组织默认值是与您的账户类型通常默认值不同的模型系列时,`/model` 选择器会为该通常系列保留单独的行,以便您仍然可以为会话切换到它。在 v2.1.196 到 v2.1.198 中,该行在选择器中缺失。

466 466 

467组织默认值仅适用于使用 Anthropic API 进行身份验证的会话。要在其他任何地方设置默认值,包括 [LLM gateway](/docs/zh-CN/llm-gateway) 部署,请改用[托管设置](/docs/zh-CN/managed-settings)中的 `model` 键。467组织默认值仅适用于使用 Anthropic API 进行身份验证的会话。要在其他任何地方设置默认值,包括 [LLM 网关](/docs/zh-CN/llm-gateway)部署,请改用[托管设置](/docs/zh-CN/managed-settings)中的 `model` 键。

468 468 

469<h2 id="organization-effort-limits">469<h2 id="organization-effort-limits">

470 组织工作量限制470 组织工作量限制


496 496 

497当您的账户上没有记录任何内容、托管设置[对默认模型强制执行允许列表](#enforce-the-allowlist-for-the-default-model)且账户类型默认值不在 `availableModels` 中时,`default` 会解析为强制执行的默认值,而不是上面的账户类型默认值。当组织默认值和强制执行都适用时,组织默认值首先替换账户类型默认值,然后强制执行应用于它:允许列表中的组织默认值被保留,而列表外的值解析为强制执行的默认值。497当您的账户上没有记录任何内容、托管设置[对默认模型强制执行允许列表](#enforce-the-allowlist-for-the-default-model)且账户类型默认值不在 `availableModels` 中时,`default` 会解析为强制执行的默认值,而不是上面的账户类型默认值。当组织默认值和强制执行都适用时,组织默认值首先替换账户类型默认值,然后强制执行应用于它:允许列表中的组织默认值被保留,而列表外的值解析为强制执行的默认值。

498 498 

499Fable 模型在任何计划或提供商上都不是账户类型默认值。使用 `/model` 选择一个会将其保存为用户设置中的选定模型,以便后续会话从它开始。关于 Claude Code v2.1.257 对保存的 Fable 5 选择所做的一次性更改,请参阅[使用 Fable](#work-with-fable)。499Fable 模型在任何套餐或提供商上都不是账户类型默认值。使用 `/model` 选择一个会将其保存为用户设置中的选定模型,以便后续会话从它开始。关于 Claude Code v2.1.257 对保存的 Fable 5 选择所做的一次性更改,请参阅[使用 Fable](#work-with-fable)。

500 500 

501<h3 id="opusplan-model-setting">501<h3 id="opusplan-model-setting">

502 `opusplan` 模型设置502 `opusplan` 模型设置


504 504 

505`opusplan` 模型别名提供了一种自动化混合方法:505`opusplan` 模型别名提供了一种自动化混合方法:

506 506 

507* **在 Plan Mode 中**:使用 `opus` 进行复杂推理和架构决策507* **在计划模式中**:使用 `opus` 进行复杂推理和架构决策

508* **在执行模式中**:自动切换到 `sonnet` 进行代码生成和实现508* **在执行模式中**:自动切换到 `sonnet` 进行代码生成和实现

509 509 

510这将 Opus 的推理能力与 Sonnet 的执行效率相结合。510这将 Opus 的推理能力与 Sonnet 的执行效率相结合。

511 511 

512Plan Mode Opus 阶段使用与 `opus` 模型设置相同的上下文窗口,执行阶段使用与 `sonnet` 相同的窗口。当 `opus` 和 `sonnet` 解析为默认运行[1M 上下文窗口](#extended-context)的模型时,如当前模型在 Anthropic API 上所做的那样,两个阶段都使用它运行。要在它们不这样做的地方为两个阶段请求 1M 上下文,[设置模型](#setting-your-model)为 `opusplan[1m]`,例如使用 `/model opusplan[1m]`。使用 `/model` 设置它需要 Claude Code v2.1.265 或更高版本;在早期版本上,使用 `--model` 标志或 `model` 设置。512计划模式 Opus 阶段使用与 `opus` 模型设置相同的上下文窗口,执行阶段使用与 `sonnet` 相同的窗口。当 `opus` 和 `sonnet` 解析为默认运行[1M 上下文窗口](#extended-context)的模型时,如当前模型在 Anthropic API 上所做的那样,两个阶段都使用它运行。要在它们不这样做的地方为两个阶段请求 1M 上下文,[设置模型](#setting-your-model)为 `opusplan[1m]`,例如使用 `/model opusplan[1m]`。使用 `/model` 设置它需要 Claude Code v2.1.265 或更高版本;在早期版本上,使用 `--model` 标志或 `model` 设置。

513 513 

514当 [`availableModels`](#restrict-model-selection) 排除最新的 Opus 但允许较旧版本时,例如 `["sonnet", "claude-opus-4-6"]`,`opusplan` 使用最新的允许的 Opus 进行规划,仅当每个 Opus 都被排除时才保持在 Sonnet 上。在 Plan Mode 中通常会升级到 Sonnet 的 Haiku 会话同样使用最新的允许的 Sonnet,仅当每个 Sonnet 都被排除时才保持在 Haiku 上。在 v2.1.205 之前,当升级系列的最新版本被排除时,Plan Mode 会保持在会话的模型上,即使允许列表允许较旧的版本。514当 [`availableModels`](#restrict-model-selection) 排除最新的 Opus 但允许较旧版本时,例如 `["sonnet", "claude-opus-4-6"]`,`opusplan` 使用最新的允许的 Opus 进行规划,仅当每个 Opus 都被排除时才保持在 Sonnet 上。在计划模式中通常会升级到 Sonnet 的 Haiku 会话同样使用最新的允许的 Sonnet,仅当每个 Sonnet 都被排除时才保持在 Haiku 上。在 v2.1.205 之前,当升级系列的最新版本被排除时,计划模式会保持在会话的模型上,即使允许列表允许较旧的版本。

515 515 

516较旧的允许版本的替换适用于 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Mantle 上,其部署使用提供商特定的模型 ID,当升级模型被排除时,Plan Mode 会保持在会话的模型上。516较旧的允许版本的替换适用于 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Mantle 上,其部署使用提供商特定的模型 ID,当升级模型被排除时,计划模式会保持在会话的模型上。

517 517 

518关于 Claude 在任务中途决定何时咨询第二个模型而不是在 Plan Mode 边界处切换的混合方法,请参阅[顾问工具](/docs/zh-CN/advisor)。518关于 Claude 在任务中途决定何时咨询第二个模型而不是在计划边界处切换的混合方法,请参阅[顾问工具](/docs/zh-CN/advisor)。

519 519 

520<h3 id="fallback-model-chains">520<h3 id="fallback-model-chains">

521 回退模型链521 备用模型链

522</h3>522</h3>

523 523 

524当主模型过载、不可用或返回另一个不可重试的服务器错误时,Claude Code 可以切换到回退模型,而不是使请求失败。身份验证、计费、速率限制、请求大小和传输错误,以及[您组织的策略检查拒绝](/docs/zh-CN/errors#automatic-retries),永远不会触发切换;这些遵循其正常的重试和错误处理。当 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock#when-a-model-is-disabled-mid-session) 或 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai#when-a-model-is-disabled-mid-session) 拒绝您的账户无法调用的模型时,它会切换,Claude Code 将其视为模型不可用而不是身份验证错误。524当主模型过载、不可用或返回另一个不可重试的服务器错误时,Claude Code 可以切换到备用模型,而不是使请求失败。身份验证、计费、速率限制、请求大小和传输错误,以及[您组织的策略检查拒绝](/docs/zh-CN/errors#automatic-retries),永远不会触发切换;这些遵循其正常的重试和错误处理。当 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock#when-a-model-is-disabled-mid-session) 或 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai#when-a-model-is-disabled-mid-session) 拒绝您的账户无法调用的模型时,它会切换,Claude Code 将其视为模型不可用而不是身份验证错误。

525 525 

526配置一个或多个回退模型,Claude Code 会按顺序尝试它们,在切换时显示通知。切换仅持续当前轮次,因此您的下一条消息会首先再次尝试主模型。Claude Code 在删除重复项后将链限制为三个模型,并忽略额外条目。526配置一个或多个备用模型,Claude Code 会按顺序尝试它们,在切换时显示通知。切换仅持续当前轮次,因此您的下一条消息会首先再次尝试主模型。Claude Code 在删除重复项后将链限制为三个模型,并忽略额外条目。

527 527 

528使用 `--fallback-model` 标志为一个会话设置链,该标志接受逗号分隔的列表:528使用 `--fallback-model` 标志为一个会话设置链,该标志接受逗号分隔的列表:

529 529 


546当请求失败转移时,Claude Code 会按顺序尝试每个条目,直到一个接受它。无法到达的条目,例如在设置中固定的已停用模型,会以相同方式失败转移到下一个。Claude Code 在该遍历开始前删除两种条目:546当请求失败转移时,Claude Code 会按顺序尝试每个条目,直到一个接受它。无法到达的条目,例如在设置中固定的已停用模型,会以相同方式失败转移到下一个。Claude Code 在该遍历开始前删除两种条目:

547 547 

548* **超出允许列表**:当 Claude Code 读取链时,会删除 [`availableModels`](#restrict-model-selection) 不允许的任何条目。548* **超出允许列表**:当 Claude Code 读取链时,会删除 [`availableModels`](#restrict-model-selection) 不允许的任何条目。

549* **压缩期间上下文窗口较小**:链也涵盖[压缩](/docs/zh-CN/context-window#what-survives-compaction),但 Claude Code 不会回退到上下文窗口小于主模型的模型,因为在那里进行摘要会首先切断部分对话。如果每个回退都较小,压缩会显示原始错误,您可以重试。549* **压缩期间上下文窗口较小**:链也涵盖[压缩](/docs/zh-CN/context-window#what-survives-compaction),但 Claude Code 不会回退到上下文窗口小于主模型的模型,因为在那里进行摘要会首先切断部分对话。如果每个备用模型都较小,压缩会显示原始错误,您可以重试。

550 550 

551Claude Code 也将链应用于[子代理](/docs/zh-CN/sub-agents)。当子代理的请求失败转移时,Claude Code 会按顺序尝试您配置的回退模型,子代理继续在接受请求的模型上运行。您的会话模型保持不变。在 v2.1.247 之前,链涵盖的失败会结束子代理。551Claude Code 也将链应用于[子代理](/docs/zh-CN/sub-agents)。当子代理的请求失败转移时,Claude Code 会按顺序尝试您配置的备用模型,子代理继续在接受请求的模型上运行。您的会话模型保持不变。在 v2.1.247 之前,链涵盖的失败会结束子代理。

552 552 

553<h3 id="automatic-model-fallback">553<h3 id="automatic-model-fallback">

554 自动模型回退554 自动模型回退

555</h3>555</h3>

556 556 

557本部分涵盖来自 Fable 模型、Opus 5.5、Sonnet 5.5 和 Opus 5 的基于内容的回退。关于模型过载或不可用时的基于可用性的回退,请参阅[回退模型链](#fallback-model-chains)。557本部分涵盖来自 Fable 模型、Opus 5.5、Sonnet 5.5 和 Opus 5 的基于内容的回退。关于模型过载或不可用时的基于可用性的回退,请参阅[备用模型链](#fallback-model-chains)。

558 558 

559Fable 模型、Opus 5.5、Sonnet 5.5 和 Opus 5 运行安全分类器,最常标记网络安全和生物学内容。当分类器标记请求且标记的类别有回退模型时,Claude Code 在该模型上重新运行请求并在记录中显示通知。对于这两个类别,回退模型取决于哪个模型拒绝:559Fable 模型、Opus 5.5、Sonnet 5.5 和 Opus 5 运行安全分类器,最常标记网络安全和生物学内容。当分类器标记请求且标记的类别有备用模型时,Claude Code 在该模型上重新运行请求并在会话记录中显示通知。对于这两个类别,备用模型取决于哪个模型拒绝:

560 560 

561* **Fable 5.1、Fable 5 和 Opus 5.5**:生物学标记的请求在 Opus 5 上重新运行,网络安全标记的请求在 Opus 4.8 上重新运行。561* **Fable 5.1、Fable 5 和 Opus 5.5**:生物学标记的请求在 Opus 5 上重新运行,网络安全标记的请求在 Opus 4.8 上重新运行。

562* **Sonnet 5.5**:网络安全标记的请求在 Sonnet 5 上重新运行。生物学标记的请求以拒绝结束,因为 Sonnet 5.5 没有生物学回退模型。562* **Sonnet 5.5**:网络安全标记的请求在 Sonnet 5 上重新运行。生物学标记的请求以拒绝结束,因为 Sonnet 5.5 没有生物学备用模型。

563* **Opus 5**:网络安全标记的请求在 Opus 4.8 上重新运行。生物学标记的请求以拒绝结束,因为 Opus 5 运行自己的生物学分类器,没有回退模型。563* **Opus 5**:网络安全标记的请求在 Opus 4.8 上重新运行。生物学标记的请求以拒绝结束,因为 Opus 5 运行自己的生物学分类器,没有备用模型。

564 564 

565在 Amazon Bedrock、Google Cloud's Agent Platform 和 Microsoft Foundry 上,Claude Code 通过您的部署的模型 ID 解析这些目标。请参阅[在 Bedrock、Agent Platform 和 Foundry 上启用回退](#enable-fallback-on-bedrock-agent-platform-and-foundry)。565在 Amazon Bedrock、Google Cloud's Agent Platform 和 Microsoft Foundry 上,Claude Code 通过您的部署的模型 ID 解析这些目标。请参阅[在 Bedrock、Agent Platform 和 Foundry 上启用回退](#enable-fallback-on-bedrock-agent-platform-and-foundry)。

566 566 

567回退后,会话继续在回退模型上。要返回到您的原始模型,运行 [`/model`](#setting-your-model)。567回退后,会话继续在备用模型上。要返回到您的原始模型,运行 [`/model`](#setting-your-model)。

568 568 

569基于类别的回退需要 Claude Code v2.1.219 或更高版本。在 v2.1.219 之前,每个标记的 Fable 5 请求都在您提供商的默认 Opus 模型上重新运行,Opus 5 不是回退源。569基于类别的回退需要 Claude Code v2.1.219 或更高版本。在 v2.1.219 之前,每个标记的 Fable 5 请求都在您提供商的默认 Opus 模型上重新运行,Opus 5 不是回退源。

570 570 

571回退模型针对 [`availableModels`](#restrict-model-selection) 进行检查。当它被阻止时,不会发生回退。拒绝显示为正常错误,会话的模型保持不变。571备用模型针对 [`availableModels`](#restrict-model-selection) 进行检查。当它被阻止时,不会发生回退。拒绝显示为正常错误,会话的模型保持不变。

572 

573<h4 id="effort-level-after-a-fallback">

574 回退后的 effort 级别

575</h4>

576 

577当 Claude Code 将您的会话切换到备用模型时,它会保留被标记请求运行时的 effort 级别,而不是使用该模型的默认 effort。例如,在 Opus 5.5 上以其默认 `medium` 运行的会话回退到 Opus 4.8 后仍保持 `medium`,尽管 Opus 4.8 默认为 `high`。

578 

579在以下情况下会应用不同的级别:

580 

581* **设置或组织默认值**:您的设置中适用于备用模型的级别,或您的组织为其设置的默认 effort,会改为生效。

582* **您自己的更改**:一旦您选择了 effort 级别、在 `/model` 中选择了模型或稍后恢复会话,被标记请求的级别就不再沿用。

583* **Skill effort**:skill 的 `effort` frontmatter 为被标记请求设置的级别适用于该轮次,后续轮次以 [effort 解析顺序](#adjust-effort-level)为备用模型给出的级别运行。

584 

585会话标题在模型名称旁边显示当前生效的级别。要更改它,在会话中运行 `/effort`。

572 586 

573<h4 id="check-what-triggered-fallback">587<h4 id="check-what-triggered-fallback">

574 检查触发回退的原因588 检查触发回退的原因

575</h4>589</h4>

576 590 

577回退可以在会话的第一个请求上触发,在您发送任何不寻常的内容之前,因为第一个请求携带工作区上下文,例如您的 CLAUDE.md 内容和 git 状态。包含安全或生物学材料的存储库可以仅在该上下文上触发分类器。591回退可以在会话的第一个请求上触发,在您发送任何不寻常的内容之前,因为第一个请求携带工作区上下文,例如您的 CLAUDE.md 内容和 git 状态。包含安全或生物学材料的仓库可以仅在该上下文上触发分类器。

578 592 

579要检查自定义是否是触发器,使用 `claude --safe-mode` 启动会话,这会禁用自定义,例如 CLAUDE.md、skills、MCP 服务器和 hooks。Git 状态和目录名称不是自定义,仍然包括在内。593要检查自定义是否是触发器,使用 `claude --safe-mode` 启动会话,这会禁用自定义,例如 CLAUDE.md、skill、MCP 服务器和 hook。Git 状态和目录名称不是自定义,仍然包括在内。

580 594 

581<h4 id="ask-before-switching">595<h4 id="ask-before-switching">

582 切换前询问596 切换前询问

583</h4>597</h4>

584 598 

585要决定每次请求被标记时发生什么,而不是自动切换,运行 `/config` 并关闭**当消息被标记时切换模型**,或在您的设置文件中将 [`switchModelsOnFlag`](/docs/zh-CN/settings-reference#switchmodelsonflag) 设置为 `false`。标记的请求然后暂停会话,有两个选项:切换到回退模型,或编辑提示并在当前模型上重试。599要决定每次请求被标记时发生什么,而不是自动切换,运行 `/config` 并关闭 **Switch models when a message is flagged**,或在您的设置文件中将 [`switchModelsOnFlag`](/docs/zh-CN/settings-reference#switchmodelsonflag) 设置为 `false`。标记的请求然后暂停会话,有两个选项:切换到备用模型,或编辑提示词并在当前模型上重试。

586 600 

587某些情况的行为不同:601某些情况的行为不同:

588 602 

589* 当标记的类别没有回退模型时,例如 Opus 5 或 Sonnet 5.5 上的生物学标记,Claude Code 不显示提示,请求以拒绝结束。603* 当标记的类别没有备用模型时,例如 Opus 5 或 Sonnet 5.5 上的生物学标记,Claude Code 不显示提示,请求以拒绝结束。

590* 如果两个模型都标记相同的请求,您可以编辑提示并重试,或启动新会话。604* 如果两个模型都标记相同的请求,您可以编辑提示词并重试,或启动新会话。

591* 在移动应用上的[云会话](/docs/zh-CN/claude-code-on-the-web)中,不支持编辑和重试。切换模型,或从桌面浏览器或桌面应用继续会话。605* 在移动应用上的[云端会话](/docs/zh-CN/claude-code-on-the-web)中,不支持编辑和重试。切换模型,或从桌面浏览器或桌面应用继续会话。

592* 在[非交互模式](/docs/zh-CN/cli-reference#cli-flags)和无法显示提示的 SDK 集成中,标记的请求以拒绝结束轮次。606* 在[非交互模式](/docs/zh-CN/cli-reference#cli-flags)和无法显示提示的 SDK 集成中,标记的请求以拒绝结束轮次。

593* 当回退目标被 [`availableModels`](#restrict-model-selection) 阻止时,Claude Code 不显示提示。标记的请求以拒绝结束,与目标被阻止时的自动回退相同。607* 当回退目标被 [`availableModels`](#restrict-model-selection) 阻止时,Claude Code 不显示提示。标记的请求以拒绝结束,与目标被阻止时的自动回退相同。

594 608 


596 在 Bedrock、Agent Platform 和 Foundry 上启用回退610 在 Bedrock、Agent Platform 和 Foundry 上启用回退

597</h4>611</h4>

598 612 

599在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,模型 ID 是提供商特定的,因此自动回退仅在 Claude Code 可以识别两个涉及的模型时运行:613在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,模型 ID 是提供商特定的,因此自动回退仅在 Claude Code 可以识别每个涉及的模型时运行:

600 614 

601* Claude Code 必须将当前模型识别为回退源。当模型 ID 包含 `claude-fable-5`、匹配 `ANTHROPIC_DEFAULT_FABLE_MODEL` 的值或使用 [`modelOverrides`](#override-model-ids-per-version) 映射时,Fable 5.1 和 Fable 5 被识别。Opus 5.5、Sonnet 5.5 和 Opus 5 通过其提供商模型 ID 或 [`modelOverrides`](#override-model-ids-per-version) 映射被识别。615* Claude Code 必须将当前模型识别为回退源。当模型 ID 包含 `claude-fable-5`、匹配 `ANTHROPIC_DEFAULT_FABLE_MODEL` 的值或使用 [`modelOverrides`](#override-model-ids-per-version) 映射时,Fable 5.1 和 Fable 5 被识别。Opus 5.5、Sonnet 5.5 和 Opus 5 通过其提供商模型 ID 或 [`modelOverrides`](#override-model-ids-per-version) 映射被识别。

602* 一个 Opus 目标必须在您的部署中解析,无论哪个模型拒绝:设置 `ANTHROPIC_DEFAULT_OPUS_MODEL`,或在提供商的模型列表中保留一个 Opus 4.8 条目。没有一个,回退对每个源模型都保持关闭,包括 Sonnet 5.5,标记的请求以拒绝结束。616* 一个 Opus 目标必须在您的部署中解析,无论哪个模型拒绝:设置 `ANTHROPIC_DEFAULT_OPUS_MODEL`,或在提供商的模型列表中保留一个 Opus 4.8 条目。没有一个,回退对每个源模型都保持关闭,包括 Sonnet 5.5,标记的请求以拒绝结束。

603* 标记的类别的回退模型必须在您的部署中解析。从 Fable 模型、Opus 5.5 或 Opus 5,如果您设置了 `ANTHROPIC_DEFAULT_OPUS_MODEL`,标记的请求会在该模型上为每个具有回退的类别重新运行;Opus 5 上的生物学标记仍以拒绝结束。如果您没有设置它,网络安全标记的请求会在提供商模型列表中的 Opus 4.8 条目上重新运行,来自 Fable 模型或 Opus 5.5 的生物学标记请求会在 Opus 5 条目上重新运行。从 Sonnet 5.5,网络安全标记的请求会在您在 `ANTHROPIC_DEFAULT_SONNET_MODEL` 中设置的模型上重新运行,或在提供商模型列表中的 Sonnet 5 条目上(如果您没有设置它)。617* 标记的类别的备用模型必须在您的部署中解析。从 Fable 模型、Opus 5.5 或 Opus 5,如果您设置了 `ANTHROPIC_DEFAULT_OPUS_MODEL`,标记的请求会在该模型上为每个具有回退的类别重新运行;Opus 5 上的生物学标记仍以拒绝结束。如果您没有设置它,网络安全标记的请求会在 Opus 4.8 条目上重新运行,来自 Fable 模型或 Opus 5.5 的生物学标记请求会在 Opus 5 条目上重新运行。从 Sonnet 5.5,网络安全标记的请求会在您在 `ANTHROPIC_DEFAULT_SONNET_MODEL` 中设置的模型上重新运行,或在提供商模型列表中的 Sonnet 5 条目上(如果您没有设置它)。

604 618 

605如果任一模型无法识别,Claude Code 不会自动切换。标记的请求以拒绝消息结束,您可以使用 [`/model`](#setting-your-model) 切换模型并重试。要使两个模型都可识别,为您的源模型设置固定值:619如果任一模型无法识别,Claude Code 不会切换。标记的请求以拒绝消息结束,您可以使用 [`/model`](#setting-your-model) 切换模型并重试。要使两个模型都可识别,为您的源模型设置固定值:

606 620 

607* **Fable 模型**:将 `ANTHROPIC_DEFAULT_FABLE_MODEL` 设置为您的 Fable 模型 ID,以便 Claude Code 将其识别为回退源。621* **Fable 模型**:将 `ANTHROPIC_DEFAULT_FABLE_MODEL` 设置为您的 Fable 模型 ID,以便 Claude Code 将其识别为回退源。

608* **每个源模型**:将 `ANTHROPIC_DEFAULT_OPUS_MODEL` 设置为 Opus 模型 ID 以打开回退并为标记的类别提供目标。命名 Opus 系列外的模型或拒绝的模型的固定值会使拒绝成立。622* **每个源模型**:将 `ANTHROPIC_DEFAULT_OPUS_MODEL` 设置为 Opus 模型 ID 以打开回退并为标记的类别提供目标。命名 Opus 系列外的模型或拒绝的模型的固定值会使拒绝成立。


617这是这些域的预期路由,不是账户标记。如果您的组织需要 Fable 级别的能力来完成这项工作,请向您的 Anthropic 账户团队询问受信任的访问计划。631这是这些域的预期路由,不是账户标记。如果您的组织需要 Fable 级别的能力来完成这项工作,请向您的 Anthropic 账户团队询问受信任的访问计划。

618 632 

619<h3 id="adjust-effort-level">633<h3 id="adjust-effort-level">

620 调整努力级别634 调整 effort 级别

621</h3>635</h3>

622 636 

623[努力级别](https://platform.claude.com/docs/en/build-with-claude/effort)控制自适应推理,让模型根据任务复杂性决定是否以及在每一步上思考多少。较低的努力对于直接的任务更快且更便宜,而较高的努力为复杂问题提供更深入的推理。637[Effort 级别](https://platform.claude.com/docs/en/build-with-claude/effort)控制自适应推理,让模型根据任务复杂性决定是否以及在每一步上思考多少。较低的 effort 对于直接的任务更快且更便宜,而较高的 effort 为复杂问题提供更深入的推理。

624 638 

625可用的努力级别取决于模型。此处未列出的模型不支持努力:639可用的 effort 级别取决于模型。此处未列出的模型不支持 effort:

626 640 

627| 模型 | 级别 |641| 模型 | 级别 |

628| :- | :- |642| :- | :- |


630| Opus 5.5、Sonnet 5.5、Opus 5、Sonnet 5、Opus 4.8 和 Opus 4.7 | `low`、`medium`、`high`、`xhigh`、`max` |644| Opus 5.5、Sonnet 5.5、Opus 5、Sonnet 5、Opus 4.8 和 Opus 4.7 | `low`、`medium`、`high`、`xhigh`、`max` |

631| Opus 4.6 和 Sonnet 4.6 | `low`、`medium`、`high`、`max` |645| Opus 4.6 和 Sonnet 4.6 | `low`、`medium`、`high`、`max` |

632 646 

633如果您设置活动模型不支持的级别,Claude Code 会回退到该模型支持的最高级别或以下。例如,`xhigh` 在 Opus 4.6 上运行为 `high`。您的组织或您自己的设置也可以限制模型提供的级别;请参阅[组织努力限制](#organization-effort-limits)。647如果您设置活动模型不支持的级别,Claude Code 会回退到不高于您所设级别的最高支持级别。例如,`xhigh` 在 Opus 4.6 上运行为 `high`。您的组织或您自己的设置也可以限制模型提供的级别;请参阅[组织 effort 限制](#organization-effort-limits)。

634 648 

635Claude Code 按此顺序解析会话的努力级别,采用首先适用的:649Claude Code 按此顺序解析会话的 effort 级别,采用首先适用的:

636 650 

6371. 明确选择:[`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars#variables) 环境变量、使用 `--effort` 启动或会话中的 `/effort`([非交互式 `/effort` 的效果更窄](#non-interactive-effort))6511. 明确选择:[`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars#variables) 环境变量、使用 `--effort` 启动或会话中的 `/effort`([非交互式 `/effort` 的效果更窄](#non-interactive-effort))

6382. 您的设置:您为模型保存的级别或 [`effortLevel`](/docs/zh-CN/settings-reference#effortlevel) 键,在 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 中说明它们之间和跨设置文件的优先级6522. 您的设置:您为模型保存的级别或 [`effortLevel`](/docs/zh-CN/settings-reference#effortlevel) 键,在 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 中说明它们之间和跨设置文件的优先级

6393. 模型的默认努力:在支持努力的每个模型上为 `high`,除了 Opus 5.5 和 Sonnet 5.5 默认为 `medium`、Opus 4.7 默认为 `xhigh`,当您的组织为其[组织默认模型](#organization-default-model)设置默认努力级别时,当您运行该模型时该级别是默认值6533. 模型的默认 effort:在支持 effort 的每个模型上为 `high`,除了 Opus 5.5 和 Sonnet 5.5 默认为 `medium`、Opus 4.7 默认为 `xhigh`,当您的组织为其[组织默认模型](#organization-default-model)设置默认 effort 级别时,当您运行该模型时该级别是默认值。自动模型回退后适用的级别,请参阅[回退后的 effort 级别](#effort-level-after-a-fallback)。

640 654 

641Opus 5.5 从 `medium` 开始,除非上面的源之一为其设置级别,您的用户设置文件中的顶级 `effortLevel` 不计入 Opus 5.5。该键是较旧的形式 `/effort` 在 Claude Code 按模型保存级别之前写入的:它继续在它之前应用的地方应用,在 Opus 5、Fable 5.1 和更早的模型上,而 Opus 5.5 和在它之后发布的模型从它们自己的默认开始,直到您使用 `/effort` 或 `/model` 选择器为它们选择级别。项目、本地或托管设置中的顶级 `effortLevel`,或使用 `--settings` 传递的,适用于每个模型。655Opus 5.5 从 `medium` 开始,除非上面的源之一为其设置级别,您的用户设置文件中的顶级 `effortLevel` 不计入 Opus 5.5。该键是较旧的形式 `/effort` 在 Claude Code 按模型保存级别之前写入的:它继续在它之前应用的地方应用,在 Opus 5、Fable 5.1 和更早的模型上,而 Opus 5.5 和在它之后发布的模型从它们自己的默认开始,直到您使用 `/effort` 或 `/model` 选择器为它们选择级别。项目、本地或托管设置中的顶级 `effortLevel`,或使用 `--settings` 传递的,适用于每个模型。

642 656 


650`max` 是最深的推理级别。除非您通过 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量设置它,Claude Code 仅将 `max` 应用于当前会话。664`max` 是最深的推理级别。除非您通过 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量设置它,Claude Code 仅将 `max` 应用于当前会话。

651 665 

652<Note>666<Note>

653 您从通过[远程控制](/docs/zh-CN/remote-control#what-connected-devices-see)连接的手机或浏览器上的努力控制中选择的级别仅适用于该会话。667 您从通过 [Remote Control](/docs/zh-CN/remote-control#what-connected-devices-see) 连接的手机或浏览器上的 effort 控件中选择的级别仅适用于该会话。

654</Note>668</Note>

655 669 

656<span id="non-interactive-effort" />670<span id="non-interactive-effort" />

657 671 

658当您在 [`-p` 运行](/docs/zh-CN/headless)中使用 `/effort` 设置级别时,Claude Code 仅将其应用于该会话,不将其保存为您的默认值。672当您在 [`-p` 运行](/docs/zh-CN/headless)中使用 `/effort` 设置级别时,Claude Code 仅将其应用于该会话,不将其保存为您的默认值。

659 673 

660`/effort` 滑块也有一个 **Ultracode** 切换。Ultracode 是 Claude Code 设置而不是模型努力级别:启用它时,Claude 为实质性任务编排[动态工作流](/docs/zh-CN/workflows),在会话运行的任何努力级别。关于它可以在哪里持久设置,请参阅 [`ultracode`](/docs/zh-CN/settings-reference#ultracode) 设置。674`/effort` 滑块也有一个 **Ultracode** 切换。Ultracode 是 Claude Code 设置而不是模型 effort 级别:启用它时,Claude 为实质性任务编排[动态工作流](/docs/zh-CN/workflows),在会话运行的任何 effort 级别。关于它可以在哪里持久设置,请参阅 [`ultracode`](/docs/zh-CN/settings-reference#ultracode) 设置。

661 675 

662使用 `/effort` 或 `ultracode` 设置打开或关闭 ultracode 会使努力级别保持不变。`--effort ultracode` 标志和 Agent SDK `effortLevel: "ultracode"` 值打开它,也将级别设置为 `xhigh`。在 `/effort` 滑块或 `/model` 选择器中选择级别会使 ultracode 保持原样。676使用 `/effort` 或 `ultracode` 设置打开或关闭 ultracode 会使 effort 级别保持不变。`--effort ultracode` 标志和 Agent SDK `effortLevel: "ultracode"` 值打开它,也将级别设置为 `xhigh`。在 `/effort` 滑块或 `/model` 选择器中选择级别会使 ultracode 保持原样。

663 677 

664您可以通过以下任何方式打开 ultracode:678您可以通过以下任何方式打开 ultracode:

665 679 

666* **`/effort`**:运行 `/effort ultracode` 为当前会话打开它或 `/effort ultracode off` 关闭它。在 `/effort` 滑块中,按 `Tab` 翻转 **Ultracode** 切换,然后 `Enter` 应用它680* **`/effort`**:运行 `/effort ultracode` 为当前会话打开它或 `/effort ultracode off` 关闭它。在 `/effort` 滑块中,按 `Tab` 翻转 **Ultracode** 切换,然后 `Enter` 应用它

667* **`--effort` 标志**:使用 `claude --effort ultracode` 启动,这会在 `xhigh` 努力和 ultracode 打开的情况下启动会话681* **`--effort` 标志**:使用 `claude --effort ultracode` 启动,这会在 `xhigh` effort 和 ultracode 打开的情况下启动会话

668* **`ultracode` 设置**:在设置文件中、使用 `--settings` 或在 Agent SDK 控制请求中设置 [`"ultracode": true`](/docs/zh-CN/settings-reference#ultracode)。[`applyFlagSettings()`](/docs/zh-CN/agent-sdk/typescript#applyflagsettings) 请求也接受 `effortLevel: "ultracode"`,它打开它并将努力级别设置为 `xhigh`682* **`ultracode` 设置**:在设置文件中、使用 `--settings` 或在 Agent SDK 控制请求中设置 [`"ultracode": true`](/docs/zh-CN/settings-reference#ultracode)。[`applyFlagSettings()`](/docs/zh-CN/agent-sdk/typescript#applyflagsettings) 请求也接受 `effortLevel: "ultracode"`,它打开它并将 effort 级别设置为 `xhigh`

669 683 

670`/effort ultracode off` 形式、滑块切换和在 `xhigh` 以外的努力级别保持 ultracode 打开需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,打开 ultracode 将会话设置为 `xhigh` 努力,选择另一个级别关闭它,努力上限低于 `xhigh` 使其不可用。684`/effort ultracode off` 形式、滑块切换和在 `xhigh` 以外的 effort 级别保持 ultracode 打开需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,打开 ultracode 将会话设置为 `xhigh` effort,选择另一个级别关闭它,effort 上限低于 `xhigh` 使其不可用。

671 685 

672将 `ultracode` 传递给 `--effort` 标志或 Agent SDK `effortLevel` 值需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,`--effort ultracode` 打印 `Unknown --effort value 'ultracode'`,会话以默认努力开始。686将 `ultracode` 传递给 `--effort` 标志或 Agent SDK `effortLevel` 值需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,`--effort ultracode` 打印 `Unknown --effort value 'ultracode'`,会话以默认 effort 开始。

673 687 

674持久化的 `effortLevel` 设置和 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量不接受 `ultracode`。如果 `CLAUDE_CODE_EFFORT_LEVEL` 或[努力上限](#organization-effort-limits)设置会话的级别,ultracode 在该级别保持打开。688持久化的 `effortLevel` 设置和 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量不接受 `ultracode`。如果 `CLAUDE_CODE_EFFORT_LEVEL` 或 [effort 上限](#organization-effort-limits)设置会话的级别,ultracode 在该级别保持打开。

675 689 

676<span id="when-ultracode-is-available" />690<span id="when-ultracode-is-available" />

677 691 

678Ultracode 在以下情况下不可用:692Ultracode 在以下情况下不可用:

679 693 

680* [工作流被关闭](/docs/zh-CN/workflows#turn-workflows-off)694* [工作流被关闭](/docs/zh-CN/workflows#turn-workflows-off)

681* 模型不支持 `xhigh` 努力695* 模型不支持 `xhigh` effort

682 696 

683在这些情况下,`--effort ultracode` 启动会话时 ultracode 关闭,努力级别为模型和任何上限允许的最高级别,最高为 `xhigh`。697在这些情况下,`--effort ultracode` 启动会话时 ultracode 关闭,effort 级别为模型和任何上限允许的最高级别,最高为 `xhigh`。

684 698 

685<h4 id="choose-an-effort-level">699<h4 id="choose-an-effort-level">

686 选择努力级别700 选择 effort 级别

687</h4>701</h4>

688 702 

689每个级别在令牌支出和能力之间进行权衡。默认值适合大多数编码任务;当您想要不同的平衡时进行调整。703每个级别在 token 支出和能力之间进行权衡。默认值适合大多数编码任务;当您想要不同的平衡时进行调整。

690 704 

691| 级别 | 何时使用 |705| 级别 | 何时使用 |

692| :- | :- |706| :- | :- |

693| `low` | 快速交换,您审查每个结果,例如头脑风暴、初稿或小改动如重命名 |707| `low` | 快速交换,您审查每个结果,例如头脑风暴、初稿或小改动如重命名 |

694| `medium` | Opus 5.5 和 Sonnet 5.5 上的默认值,适合具有明确范围的日常工程工作,例如实现新功能。在其他模型上,减少成本敏感工作的令牌使用,可以权衡一些智能 |708| `medium` | Opus 5.5 和 Sonnet 5.5 上的默认值,适合具有明确范围的日常工程工作,例如实现新功能。在其他模型上,减少成本敏感工作的 token 使用,可以权衡一些智能 |

695| `high` | 验证重要或边界情况可能的工作,例如修复现有代码库中的错误。除 Opus 5.5、Sonnet 5.5 和 Opus 4.7 外,每个模型上的默认值 |709| `high` | 验证重要或边界情况可能的工作,例如修复现有代码库中的错误。除 Opus 5.5、Sonnet 5.5 和 Opus 4.7 外,每个模型上的默认值 |

696| `xhigh` | 更高令牌支出的更深推理。Opus 4.7 上的默认值 |710| `xhigh` | 更高 token 支出的更深推理。Opus 4.7 上的默认值 |

697| `max` | 您想让 Claude 自己完成的难题,例如发现安全漏洞。`max` 可能显示收益递减,容易过度思考,所以在广泛采用前测试 |711| `max` | 您想让 Claude 自己完成的难题,例如发现安全漏洞。`max` 可能显示收益递减,容易过度思考,所以在广泛采用前测试 |

698| `ultracode` | 一个 Claude Code 设置而不是级别:为每个实质性任务规划[动态工作流](/docs/zh-CN/workflows),在任何努力级别 |712| `ultracode` | 一个 Claude Code 设置而不是级别:为每个实质性任务规划[动态工作流](/docs/zh-CN/workflows),在任何 effort 级别 |

699 713 

700在 Opus 5.5 和 Fable 5.1 的测试中,Claude 在更高级别测试了更多边界情况,在回答前验证了更多工作。它也自己做了更多选择。在较低级别,Claude 更快地返回起点,适合您审查每个结果并指导下一步的工作。要查看在每个级别运行的相同任务,请阅读博客上的[使用 Claude Code:花费您的努力](https://claude.dev/blog/spending-your-effort/)。714在 Opus 5.5 和 Fable 5.1 的测试中,Claude 在更高级别测试了更多边界情况,在回答前验证了更多工作。它也自己做了更多选择。在较低级别,Claude 更快地返回起点,适合您审查每个结果并指导下一步的工作。要查看在每个级别运行的相同任务,请阅读博客上的[Using Claude Code: Spending your effort](https://claude.dev/blog/spending-your-effort/)。

701 715 

702努力规模按模型校准,因此相同的级别名称在模型间不代表相同的基础值。716Effort 规模按模型校准,因此相同的级别名称在模型间不代表相同的基础值。

703 717 

704Opus 5.5 [默认为 `medium`](#adjust-effort-level),比 Opus 5 的默认值 `high` 低一个级别。在 Anthropic 的测试中,Opus 5.5 在 `medium` 时在编码和知识工作评估上匹配或超过 Opus 5 在 `high` 时的表现。在给定的级别,Opus 5.5 倾向于每轮比 Opus 5 思考更多。当您从 Opus 5 移动到 Opus 5.5 时,从 `medium` 开始,而不是携带您在 Opus 5 上使用的级别。要针对您自己的工作测试级别,请参阅 Opus 5.5 提示指南中的[校准努力](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#calibrate-effort)。718Opus 5.5 [默认为 `medium`](#adjust-effort-level),比 Opus 5 的默认值 `high` 低一个级别。在 Anthropic 的测试中,Opus 5.5 在 `medium` 时在编码和知识工作评估上匹配或超过 Opus 5 在 `high` 时的表现。在给定的级别,Opus 5.5 倾向于每轮比 Opus 5 思考更多。当您从 Opus 5 移动到 Opus 5.5 时,从 `medium` 开始,而不是沿用您在 Opus 5 上使用的级别。要针对您自己的工作测试级别,请参阅 Opus 5.5 提示词指南中的[校准 effort](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5#calibrate-effort)。

705 719 

706<h4 id="use-ultrathink-for-one-off-deep-reasoning">720<h4 id="use-ultrathink-for-one-off-deep-reasoning">

707 使用 ultrathink 进行一次性深度推理721 使用 ultrathink 进行一次性深度推理

708</h4>722</h4>

709 723 

710在您的提示中的任何地方包含 `ultrathink` 以请求该轮次的更深推理,而不改变您的会话努力设置。Claude Code 识别关键字并添加上下文内指令。发送到 API 的努力级别保持不变。Claude Code 将其他短语如"think"、"think hard"和"think more"作为普通提示文本传递,不将它们识别为关键字。724在您的提示词中的任何地方包含 `ultrathink` 以请求该轮次的更深推理,而不改变您的会话 effort 设置。Claude Code 识别关键字并添加上下文内指令。发送到 API 的 effort 级别保持不变。Claude Code 将其他短语如"think"、"think hard"和"think more"作为普通提示词文本传递,不将它们识别为关键字。

711 725 

712<h4 id="set-the-effort-level">726<h4 id="set-the-effort-level">

713 设置努力级别727 设置 effort 级别

714</h4>728</h4>

715 729 

716您可以通过以下任何方式更改努力:730您可以通过以下任何方式更改 effort:

717 731 

718* **`/effort`**:运行 `/effort` 不带参数以打开交互式滑块,`/effort` 后跟级别名称以直接设置它,或 `/effort auto` 以清除活动模型的保存级别。您可以在 Claude 工作时运行它,一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示一个),Claude Code 会将新级别应用于轮次中的下一个请求732* **`/effort`**:运行 `/effort` 不带参数以打开交互式滑块,`/effort` 后跟级别名称以直接设置它,或 `/effort auto` 以清除活动模型的保存级别。您可以在 Claude 工作时运行它,一旦您确认[缓存警告](/docs/zh-CN/prompt-caching#changing-effort-level)(如果 Claude Code 显示一个),Claude Code 会将新级别应用于轮次中的下一个请求

719* **在 `/model` 中**:选择模型时使用左/右箭头键调整努力滑块733* **在 `/model` 中**:选择模型时使用左/右箭头键调整 effort 滑块

720* **`--effort` 标志**:启动 Claude Code 时传递级别名称以为单个会话设置它734* **`--effort` 标志**:启动 Claude Code 时传递级别名称以为单个会话设置它

721* **环境变量**:将 `CLAUDE_CODE_EFFORT_LEVEL` 设置为级别名称或 `auto`735* **环境变量**:将 `CLAUDE_CODE_EFFORT_LEVEL` 设置为级别名称或 `auto`

722* **设置**:在 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 中设置每个模型的级别,或将 [`effortLevel`](/docs/zh-CN/settings-reference#effortlevel) 设置为 `low`、`medium`、`high` 或 `xhigh` 作为没有级别的模型的默认值。`max` 在任一键中都不被接受为级别,`ultracode` 有其自己的 [`ultracode`](/docs/zh-CN/settings-reference#ultracode) 键736* **设置**:在 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 中设置每个模型的级别,或将 [`effortLevel`](/docs/zh-CN/settings-reference#effortlevel) 设置为 `low`、`medium`、`high` 或 `xhigh` 作为没有级别的模型的默认值。`max` 在任一键中都不被接受为级别,`ultracode` 有其自己的 [`ultracode`](/docs/zh-CN/settings-reference#ultracode) 键

723* **从连接的设备**:在[远程控制](/docs/zh-CN/remote-control#what-connected-devices-see)会话中,从您的手机或浏览器上的努力控制中选择级别。该级别仅适用于当前会话。需要 Claude Code v2.1.234 或更高版本737* **从连接的设备**:在 [Remote Control](/docs/zh-CN/remote-control#what-connected-devices-see) 会话中,从您的手机或浏览器上的 effort 控件中选择级别。该级别仅适用于当前会话。需要 Claude Code v2.1.234 或更高版本

724* **Skill 和子代理 frontmatter**:在 [skill](/docs/zh-CN/skills#frontmatter-reference) 或[子代理](/docs/zh-CN/sub-agents#supported-frontmatter-fields) markdown 文件中设置 `effort` 以在该 skill 或子代理运行时覆盖努力级别738* **Skill 和子代理 frontmatter**:在 [skill](/docs/zh-CN/skills#frontmatter-reference) 或[子代理](/docs/zh-CN/sub-agents#supported-frontmatter-fields) markdown 文件中设置 `effort` 以在该 skill 或子代理运行时覆盖 effort 级别

725 739 

726Frontmatter 努力在该 skill 或子代理活跃时应用,覆盖会话级别但不覆盖环境变量。一个 [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel) 或[组织努力上限](#organization-effort-limits)仍然限制 skill 或子代理运行的级别。740Frontmatter effort 在该 skill 或子代理活跃时应用,覆盖会话级别但不覆盖环境变量。一个 [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel) 或[组织 effort 上限](#organization-effort-limits)仍然限制 skill 或子代理运行的级别。

727 741 

728如果您在[托管设置](/docs/zh-CN/managed-settings)中设置 `effortLevel`,Claude Code 在[努力解析顺序](#adjust-effort-level)的设置步骤处应用它,用户仍然可以使用 `/effort` 或 `--effort` 更改级别。要将用户保持在或低于某个级别,设置 [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel)。742如果您在[托管设置](/docs/zh-CN/managed-settings)中设置 `effortLevel`,Claude Code 在 [effort 解析顺序](#adjust-effort-level)的设置步骤处应用它,用户仍然可以使用 `/effort` 或 `--effort` 更改级别。要将用户保持在或低于某个级别,设置 [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel)。

729 743 

730努力滑块在选择支持的模型时出现在 `/model` 中。当前努力级别也显示在会话标题中模型名称旁边,例如"with low effort",因此您可以确认哪个设置处于活跃状态,而无需打开 `/model`。页脚也在启动和更改时简要显示努力级别。744Effort 滑块在选择支持的模型时出现在 `/model` 中。当前 effort 级别也显示在会话标题中模型名称旁边,例如"with low effort",因此您可以确认哪个设置处于活跃状态,而无需打开 `/model`。页脚也在启动和更改时简要显示 effort 级别。

731 745 

732<h4 id="adaptive-reasoning-and-fixed-thinking-budgets">746<h4 id="adaptive-reasoning-and-fixed-thinking-budgets">

733 自适应推理和固定思考预算747 自适应推理和固定思考预算

734</h4>748</h4>

735 749 

736自适应推理使思考在每一步上可选,因此 Claude 可以更快地响应例行提示,并为受益于它的步骤保留更深入的思考。如果您想要 Claude 比当前级别产生的更频繁或更少地思考,您可以直接在您的提示或 `CLAUDE.md` 中说出来;模型在其努力设置内响应该指导。750自适应推理使思考在每一步上可选,因此 Claude 可以更快地响应常规提示词,并为受益于它的步骤保留更深入的思考。如果您想要 Claude 比当前级别产生的更频繁或更少地思考,您可以直接在您的提示词或 `CLAUDE.md` 中说出来;模型在其 effort 设置内响应该指导。

737 751 

738Fable 模型、Sonnet 5 及更高版本和 Opus 4.7 及更高版本始终使用自适应推理。固定思考预算模式和 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 不适用于它们。752Fable 模型、Sonnet 5 及更高版本和 Opus 4.7 及更高版本始终使用自适应推理。固定思考预算模式和 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 不适用于它们。

739 753 


743 扩展思考757 扩展思考

744</h3>758</h3>

745 759 

746扩展思考是 Claude 在响应前发出的推理。在支持[自适应推理](#adjust-effort-level)的模型上,努力级别是对发生多少思考的主要控制;下面的设置打开或关闭思考并控制它如何显示。在 Anthropic API 上关闭思考时,Claude Code 向它知道[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(如 Opus 5)发送努力 `high` 而不是更高级别。760扩展思考是 Claude 在响应前发出的推理。在支持[自适应推理](#adjust-effort-level)的模型上,effort 级别是对发生多少思考的主要控制;下面的设置打开或关闭思考并控制它如何显示。在 Anthropic API 上关闭思考时,Claude Code 向它知道[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(如 Opus 5)发送 effort `high` 而不是更高级别。

747 761 

748| 控制 | 如何设置 |762| 控制 | 如何设置 |

749| :- | :- |763| :- | :- |


751| 设置全局默认值 | 运行 `/config` 并切换思考模式。保存为 `~/.claude/settings.json` 中的 `alwaysThinkingEnabled` |765| 设置全局默认值 | 运行 `/config` 并切换思考模式。保存为 `~/.claude/settings.json` 中的 `alwaysThinkingEnabled` |

752| 通过环境变量禁用 | 设置 [`MAX_THINKING_TOKENS=0`](/docs/zh-CN/env-vars),这在 Anthropic API 上关闭思考,除了 Opus 5.5、Sonnet 5.5 和 Fable 模型。在[第三方提供商](/docs/zh-CN/third-party-integrations)上,Claude Code 改为省略 `thinking` 参数,自适应推理模型可能仍然思考。其他值仅适用于[固定思考预算](#adaptive-reasoning-and-fixed-thinking-budgets) |766| 通过环境变量禁用 | 设置 [`MAX_THINKING_TOKENS=0`](/docs/zh-CN/env-vars),这在 Anthropic API 上关闭思考,除了 Opus 5.5、Sonnet 5.5 和 Fable 模型。在[第三方提供商](/docs/zh-CN/third-party-integrations)上,Claude Code 改为省略 `thinking` 参数,自适应推理模型可能仍然思考。其他值仅适用于[固定思考预算](#adaptive-reasoning-and-fixed-thinking-budgets) |

753 767 

754您不能在 Opus 5.5、Sonnet 5.5 或 Fable 模型上关闭思考。会话切换和 `/config` 行显示 `Thinking can't be turned off` 对于这些模型,而不是提供切换,保存的 `alwaysThinkingEnabled: false` 或 `MAX_THINKING_TOKENS=0` 在那里没有效果。在这些模型上,模型根据努力级别按步骤决定思考多少。保存的设置在您切换到接受它的模型时再次应用。768您不能在 Opus 5.5、Sonnet 5.5 或 Fable 模型上关闭思考。对于这些模型,会话切换和 `/config` 行显示 `Thinking can't be turned off`,而不是提供切换,保存的 `alwaysThinkingEnabled: false` 或 `MAX_THINKING_TOKENS=0` 在那里没有效果。在这些模型上,模型根据 effort 级别按步骤决定思考多少。保存的设置在您切换到接受它的模型时再次应用。

755 769 

756Claude Code 默认折叠思考输出。按 `Ctrl+O` 切换详细模式并将推理视为灰色斜体文本。Anthropic API 上的交互式会话默认接收编辑的思考块,因此如果您想要完整摘要在展开时可用,在[设置](/docs/zh-CN/settings)中设置 `showThinkingSummaries: true`。您需要为所有生成的思考令牌付费,即使折叠或编辑。770Claude Code 默认折叠思考输出。按 `Ctrl+O` 切换详细模式并将推理视为灰色斜体文本。Anthropic API 上的交互式会话默认接收编辑的思考块,因此如果您想要完整摘要在展开时可用,在[设置](/docs/zh-CN/settings)中设置 `showThinkingSummaries: true`。您需要为所有生成的思考 token 付费,即使折叠或编辑。

757 771 

758<a id="extended-context-with-1m" />772<a id="extended-context-with-1m" />

759 773 


761 扩展上下文775 扩展上下文

762</h3>776</h3>

763 777 

764Fable 5.1、Fable 5、Sonnet 5 及更高版本、Opus 4.6 及更高版本和 Sonnet 4.6 支持[100 万令牌上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model),用于具有大型代码库的长会话。778Fable 5.1、Fable 5、Sonnet 5 及更高版本、Opus 4.6 及更高版本和 Sonnet 4.6 支持[100 万 token 上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model),用于具有大型代码库的长会话。

765 779 

766在 Anthropic API 上,Fable 5.1、Fable 5、Sonnet 5 及更高版本和 Opus 4.7 及更高版本在每个计划上运行 1M 窗口,包括 Pro。您不需要为这些模型上的 1M 窗口选择 `[1m]` 变体或打开使用额度。Fable 使用本身可以在某些计划上计费到使用额度;请参阅[Fable 和使用额度](#fable-and-usage-credits)。780在 Anthropic API 上,Fable 5.1、Fable 5、Sonnet 5 及更高版本和 Opus 4.7 及更高版本在每个套餐上运行 1M 窗口,包括 Pro。您不需要为这些模型上的 1M 窗口选择 `[1m]` 变体或打开使用额度。Fable 使用本身可以在某些套餐上计费到使用额度;请参阅[Fable 和使用额度](#fable-and-usage-credits)。

767 781 

768Opus 4.6 和 Sonnet 4.6 仅通过其 `[1m]` 变体达到 1M,对该变体的访问取决于您的计划。在 Max、Team 和 Enterprise 计划上,包括 Team Standard 和 Team Premium 席位,Opus 4.6 与 1M 上下文包含在您的订阅中。Sonnet 4.6 与 1M 上下文在每个订阅计划上都需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),包括 Max。782Opus 4.6 和 Sonnet 4.6 仅通过其 `[1m]` 变体达到 1M,对该变体的访问取决于您的套餐。在 Max、Team 和 Enterprise 套餐上,包括 Team Standard 和 Team Premium 席位,Opus 4.6 与 1M 上下文包含在您的订阅中。Sonnet 4.6 与 1M 上下文在每个订阅套餐上都需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),包括 Max。

769 783 

770| 计划 | Opus 4.6 与 1M 上下文 | Sonnet 4.6 与 1M 上下文 |784| 套餐 | Opus 4.6 与 1M 上下文 | Sonnet 4.6 与 1M 上下文 |

771| - | - | - |785| - | - | - |

772| Max、Team 和 Enterprise | 包含在订阅中 | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |786| Max、Team 和 Enterprise | 包含在订阅中 | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

773| Pro | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |787| Pro | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) | 需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

774| API 和按量付费 | 完全访问 | 完全访问 |788| API 和按量付费 | 完全访问 | 完全访问 |

775 789 

776Claude Code 仅在直接连接到 Anthropic API 时检查这些计划要求。如果您将 `ANTHROPIC_BASE_URL` 指向[LLM 网关](/docs/zh-CN/llm-gateway#subscriptions-and-gateways),您保存的 claude.ai 登录保持活跃凭证,Claude Code 不检查账户的使用额度。`/model` 中的 `[1m]` 选项保持可用,网关决定请求是否成功。在 v2.1.229 之前,当 Claude Code 无法确认账户上的使用额度时,它在该配置中拒绝 `/model sonnet[1m]`。790Claude Code 仅在直接连接到 Anthropic API 时检查这些套餐要求。如果您将 `ANTHROPIC_BASE_URL` 指向 [LLM 网关](/docs/zh-CN/llm-gateway#subscriptions-and-gateways),且您保存的 claude.ai 登录仍为活跃凭据,Claude Code 不检查您套餐的使用额度。`/model` 中的 `[1m]` 选项保持可用,网关决定请求是否成功。在 v2.1.229 之前,当 Claude Code 无法确认账户上的使用额度时,它在该配置中拒绝 `/model sonnet[1m]`。

777 791 

778<span id="context-window-behind-a-gateway" />792<span id="context-window-behind-a-gateway" />

779 793 

780如果您将 `ANTHROPIC_BASE_URL` 设置为[LLM 网关](/docs/zh-CN/llm-gateway)或另一个代理,Claude Code 给每个它识别的模型与该模型在 Anthropic API 上具有的相同上下文窗口。Fable 5.1、Fable 5、Sonnet 5 及更高版本和 Opus 4.7 及更高版本获得 1M 窗口,没有 `[1m]` 变体可选择,仅通过其 `[1m]` 变体达到 1M 的模型(如 Opus 4.6)在没有它的情况下运行在 200K。Claude Code 无法检测网关或其后面的服务器强制的更低限制。如果您的网关拒绝超过 200K 令牌的请求,运行 [`/autocompact 200k`](#set-the-auto-compact-window) 以便会话在该边界处压缩。794如果您将 `ANTHROPIC_BASE_URL` 设置为 [LLM 网关](/docs/zh-CN/llm-gateway)或另一个代理,Claude Code 给每个它识别的模型与该模型在 Anthropic API 上具有的相同上下文窗口。Fable 5.1、Fable 5、Sonnet 5 及更高版本和 Opus 4.7 及更高版本获得 1M 窗口,没有 `[1m]` 变体可选择,仅通过其 `[1m]` 变体达到 1M 的模型(如 Opus 4.6)在没有它的情况下运行在 200K。Claude Code 无法检测网关或其后面的服务器强制的更低限制。如果您的网关拒绝超过 200K token 的请求,运行 [`/autocompact 200k`](#set-the-auto-compact-window) 以便会话在该边界处压缩。

781 795 

782要关闭 1M 上下文,设置 `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`。Claude Code 从模型选择器中删除 1M 模型变体。在具有本地 1M 窗口的模型上,例如 Sonnet 5 和 Fable 模型,它也将模型视为具有 200K 上下文窗口:796要关闭 1M 上下文,设置 `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`。Claude Code 从模型选择器中删除 1M 模型变体。在具有原生 1M 窗口的模型上,例如 Sonnet 5 和 Fable 模型,它也将模型视为具有 200K 上下文窗口:

783 797 

784* 启用自动压缩时,会话在 200K 边界处通过[自动压缩](#set-the-auto-compact-window)进行压缩。将自动压缩窗口设置在 200K 以上不会解除保持,因为 Claude Code 将该窗口限制为模型的上下文窗口。798* 启用自动压缩时,会话在 200K 边界处通过[自动压缩](#set-the-auto-compact-window)进行压缩。将自动压缩窗口设置在 200K 以上不会解除该限制,因为 Claude Code 将该窗口限制为模型的上下文窗口。

785* 禁用自动压缩时,会话在 200K 边界处停止,出现[上下文限制错误](/docs/zh-CN/errors#prompt-is-too-long),而不是压缩。799* 禁用自动压缩时,会话在 200K 边界处停止,出现[上下文限制错误](/docs/zh-CN/errors#prompt-is-too-long),而不是压缩。

786 800 

787在 v2.1.223 之前,Claude Code 仅将 Sonnet 5、Opus 4.8 和 Opus 5 会话保持在 200K。请参阅[环境变量](/docs/zh-CN/env-vars)。801在 v2.1.223 之前,Claude Code 仅将 Sonnet 5、Opus 4.8 和 Opus 5 会话限制在 200K。请参阅[环境变量](/docs/zh-CN/env-vars)。

788 802 

7891M 上下文窗口使用标准模型定价,超过 200K 的令牌没有溢价。对于扩展上下文包含在您的订阅中的计划,使用仍由您的订阅覆盖。对于通过使用额度访问扩展上下文的计划,令牌计费到使用额度。8031M 上下文窗口使用标准模型定价,超过 200K 的 token 没有溢价。对于扩展上下文包含在您的订阅中的套餐,使用仍由您的订阅覆盖。对于通过使用额度访问扩展上下文的套餐,token 计费到使用额度。

790 804 

791如果您的账户支持 1M 上下文,该选项会出现在最新版本的 Claude Code 的 `/model` 选择器中。如果您看不到它,请尝试重新启动您的会话,在第三方提供商上检查您的部署是否使用 `ANTHROPIC_DEFAULT_*_MODEL` 变量[固定了模型](#pin-models-for-third-party-deployments)。805如果您的账户支持 1M 上下文,该选项会出现在最新版本的 Claude Code 的 `/model` 选择器中。如果您看不到它,请重新启动您的会话,在第三方提供商上检查您的部署是否使用 `ANTHROPIC_DEFAULT_*_MODEL` 变量[固定了模型](#pin-models-for-third-party-deployments)。

792 806 

793您也可以使用 `[1m]` 后缀与模型别名或完整模型名称:807您也可以使用 `[1m]` 后缀与模型别名或完整模型名称:

794 808 

795```text theme={null}809```text theme={null}

796# 使用 opus[1m] 或 sonnet[1m] 别名810# Use the opus[1m] or sonnet[1m] alias

797/model opus[1m]811/model opus[1m]

798/model sonnet[1m]812/model sonnet[1m]

799 813 

800# 或将 [1m] 附加到完整模型名称814# Or append [1m] to a full model name

801/model claude-opus-4-8[1m]815/model claude-opus-4-8[1m]

802```816```

803 817 


805 Sonnet 5.5 和 Sonnet 5 上下文窗口819 Sonnet 5.5 和 Sonnet 5 上下文窗口

806</h4>820</h4>

807 821 

808在 Anthropic API 上,Sonnet 5.5 和 Sonnet 5 始终运行 1M 上下文窗口。没有 200K 变体,没有 `[1m]` 后缀可选择,任何计划上都不需要使用额度。会话在窗口填满前自动压缩,默认约 967K 令牌;设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/zh-CN/env-vars) 以选择不同的阈值。822在 Anthropic API 上,Sonnet 5.5 和 Sonnet 5 始终运行 1M 上下文窗口。没有 200K 变体,没有 `[1m]` 后缀可选择,任何套餐上都不需要使用额度。会话在窗口填满前自动压缩,默认约 967K token;设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/zh-CN/env-vars) 以选择不同的阈值。

809 823 

810Claude Code 在[LLM 网关](/docs/zh-CN/llm-gateway)或另一个自定义 `ANTHROPIC_BASE_URL` 后面给 Sonnet 5.5 和 Sonnet 5 相同的 1M 窗口。如果您的网关强制更低的限制,请参阅[网关后面的上下文窗口](#context-window-behind-a-gateway)。824Claude Code 在 [LLM 网关](/docs/zh-CN/llm-gateway)或另一个自定义 `ANTHROPIC_BASE_URL` 后面给 Sonnet 5.5 和 Sonnet 5 相同的 1M 窗口。如果您的网关强制更低的限制,请参阅[网关后面的上下文窗口](#context-window-behind-a-gateway)。

811 825 

812此设置将窗口预算为 200K:826此设置将窗口预算为 200K:

813 827 

814* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**:将具有本地 1M 窗口的每个模型上的会话保持在 200K 窗口;请参阅[扩展上下文](#extended-context)了解保持如何被强制执行。对于需要限制上下文的部署很有用。828* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**:将具有原生 1M 窗口的每个模型上的会话限制在 200K 窗口;请参阅[扩展上下文](#extended-context)了解该限制如何被强制执行。对于需要限制上下文的部署很有用。

815 829 

816<h2 id="context-window-and-auto-compaction">830<h2 id="context-window-and-auto-compaction">

817 上下文窗口和自动压缩831 上下文窗口和自动压缩

Details

255| `duration_ms` | 包括重试的挂钟持续时间 | |255| `duration_ms` | 包括重试的挂钟持续时间 | |

256| `ttft_ms` | 首个令牌的时间(毫秒) | |256| `ttft_ms` | 首个令牌的时间(毫秒) | |

257| `first_content_ms` | 从请求开始到成功尝试的第一个内容块的时间(毫秒)。在回退到非流式路径的请求上不存在。需要 Claude Code v2.1.268 或更高版本 | |257| `first_content_ms` | 从请求开始到成功尝试的第一个内容块的时间(毫秒)。在回退到非流式路径的请求上不存在。需要 Claude Code v2.1.268 或更高版本 | |

258| `input_tokens` | API 使用块中的输入令牌计数 | |258| `input_tokens` | API 使用块中的输入 token 计数。不包括从提示词缓存读取或写入提示词缓存的 token,这些 token 分别在 `cache_read_tokens` 和 `cache_creation_tokens` 中报告 | |

259| `output_tokens` | 输出令牌计数 | |259| `output_tokens` | 输出令牌计数 | |

260| `cache_read_tokens` | 从提示缓存读取的令牌 | |260| `cache_read_tokens` | 从提示缓存读取的令牌 | |

261| `cache_creation_tokens` | 写入提示缓存的令牌 | |261| `cache_creation_tokens` | 写入提示缓存的令牌 | |


305* 对除 Read、Edit、Write、Bash、WebFetch、WebSearch 和 MCP 工具之外的任何工具的调用305* 对除 Read、Edit、Write、Bash、WebFetch、WebSearch 和 MCP 工具之外的任何工具的调用

306* 返回除文件文本之外的任何内容的 Read,例如图像、PDF 或重新读取内容未更改的文件306* 返回除文件文本之外的任何内容的 Read,例如图像、PDF 或重新读取内容未更改的文件

307* Edit 或 Write 调用,除非您也设置 `OTEL_LOG_TOOL_DETAILS=1`307* Edit 或 Write 调用,除非您也设置 `OTEL_LOG_TOOL_DETAILS=1`

308* Claude Code 移到后台的 WebFetch 或 WebSearch 调用,因为您中断了转向以[立即发送您排队的消息](/docs/zh-CN/interactive-mode#when-claude-code-sends-what-you-queued),而调用运行。Claude 稍后在工具跨度结束后收到该结果308* Claude Code 在运行期间移到后台、以便等待中的消息能够送达 Claude 的 WebFetch 或 WebSearch 调用。稍后到达的结果也不会被记录。要了解 Claude Code 何时移动调用,对于终端请参阅[Claude Code 何时发送您排队的内容](/docs/zh-CN/interactive-mode#when-claude-code-sends-what-you-queued),对于 Agent SDK 会话请参阅 [`priority` 字段](/docs/zh-CN/agent-sdk/typescript#sdkusermessage)

309 309 

310该事件携带这些属性,每个都在内容限制处截断(默认值 60 KB)。`门控` 命名变量一个属性需要在 `OTEL_LOG_TOOL_CONTENT=1` 之上,对于 Edit 和 Write,该变量门控事件本身而不是属性。310该事件携带这些属性,每个都在内容限制处截断(默认值 60 KB)。`门控` 命名变量一个属性需要在 `OTEL_LOG_TOOL_CONTENT=1` 之上,对于 Edit 和 Write,该变量门控事件本身而不是属性。

311 311 


719**属性**:719**属性**:

720 720 

721* 所有[标准属性](#standard-attributes)721* 所有[标准属性](#standard-attributes)

722* `type`:(`"input"`、`"output"`、`"cacheRead"`、`"cacheCreation"`)722* `type`:(`"input"`、`"output"`、`"cacheRead"`、`"cacheCreation"`)。`"input"` 类型不包括从提示词缓存读取或写入提示词缓存的 token,这些 token 分别计入 `"cacheRead"` 和 `"cacheCreation"`

723* `model`:模型标识符(例如,"claude-sonnet-5")723* `model`:模型标识符(例如,"claude-sonnet-5")

724* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一724* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一

725* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在725* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在


874* `cost_usd`:以美元为单位的估计成本874* `cost_usd`:以美元为单位的估计成本

875* `cost_usd_micros`:以美元百万分之一为单位的估计成本,作为整数发出875* `cost_usd_micros`:以美元百万分之一为单位的估计成本,作为整数发出

876* `duration_ms`:请求持续时间(以毫秒为单位)876* `duration_ms`:请求持续时间(以毫秒为单位)

877* `input_tokens`:输入令牌数877* `input_tokens`:输入 token 数量,不包括从提示词缓存读取或写入提示词缓存的 token

878* `output_tokens`:输出令牌数878* `output_tokens`:输出令牌数

879* `cache_read_tokens`:从缓存读取的令牌数879* `cache_read_tokens`:从缓存读取的令牌数

880* `cache_creation_tokens`:用于缓存创建的令牌数880* `cache_creation_tokens`:用于缓存创建的令牌数


1473 1482 

1474| 指标 | 分析机会 |1483| 指标 | 分析机会 |

1475| - | - |1484| - | - |

1476| `claude_code.token.usage` | 按 `type`(输入/输出)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |1485| `claude_code.token.usage` | 按 token [`type`](#token-counter)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |

1477| `claude_code.session.count` | 跟踪随时间推移的采用和参与度 |1486| `claude_code.session.count` | 跟踪随时间推移的采用和参与度 |

1478| `claude_code.lines_of_code.count` | 通过跟踪代码添加和删除来衡量生产力,按模型分解 |1487| `claude_code.lines_of_code.count` | 通过跟踪代码添加和删除来衡量生产力,按模型分解 |

1479| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |1488| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |


1535 1544 

1536**性能监控**:跟踪 API 请求持续时间和工具执行时间以识别性能瓶颈。1545**性能监控**:跟踪 API 请求持续时间和工具执行时间以识别性能瓶颈。

1537 1546 

1547<h3 id="map-input-tokens-to-opentelemetry-genai-semantic-conventions">

1548 将输入 token 映射到 OpenTelemetry GenAI 语义约定

1549</h3>

1550 

1551Claude Code 按照 API 响应的 usage 块中的数值导出输入 token 计数,因此这些值不包括从[提示缓存](/docs/zh-CN/prompt-caching)读取或写入的 token:

1552 

1553* [`claude_code.llm_request`](#span-attributes) span 和 [`api_request`](#api-request-event) 事件上的 `input_tokens`

1554* [`claude_code.token.usage`](#token-counter) 指标的 `"input"` 类型

1555 

1556Claude Code 不设置 `gen_ai.usage.*` 属性。[OpenTelemetry GenAI 语义约定](https://github.com/open-telemetry/semantic-conventions-genai)规定 `gen_ai.usage.input_tokens` 应包括从缓存读取和写入缓存的 token。要计算该总数:

1557 

1558* 从 span 或事件:将 `input_tokens`、`cache_read_tokens` 和 `cache_creation_tokens` 相加

1559* 从 `claude_code.token.usage` 指标:将其 `"input"`、`"cacheRead"` 和 `"cacheCreation"` 类型相加

1560 

1561这些约定还为缓存读取和缓存写入定义了单独的属性:

1562 

1563* `cache_read_tokens` 映射到 `gen_ai.usage.cache_read.input_tokens`

1564* `cache_creation_tokens` 映射到 `gen_ai.usage.cache_write.input_tokens`。旧版本的约定将缓存写入属性命名为 `gen_ai.usage.cache_creation.input_tokens`,因此请使用您的后端所期望的名称。

1565 

1538<h2 id="audit-security-events">1566<h2 id="audit-security-events">

1539 审计安全事件1567 审计安全事件

1540</h2>1568</h2>

Details

287 287 

288前面的表格涵盖了独立 CLI。Claude Desktop 应用和浏览器中的 claude.ai 从其他 Anthropic CDN 主机加载其应用代码和用户内容,包括 `assets-proxy.anthropic.com` 和其他在这些应用中提供 [Artifact](/docs/zh-CN/artifacts) 的 `*.claudeusercontent.com` 源。允许 `claude.ai` 同时阻止这些主机会产生空白页面而不是错误。请参阅 Desktop 页面上的[网络访问要求](/docs/zh-CN/desktop#network-access-requirements)。288前面的表格涵盖了独立 CLI。Claude Desktop 应用和浏览器中的 claude.ai 从其他 Anthropic CDN 主机加载其应用代码和用户内容,包括 `assets-proxy.anthropic.com` 和其他在这些应用中提供 [Artifact](/docs/zh-CN/artifacts) 的 `*.claudeusercontent.com` 源。允许 `claude.ai` 同时阻止这些主机会产生空白页面而不是错误。请参阅 Desktop 页面上的[网络访问要求](/docs/zh-CN/desktop#network-access-requirements)。

289 289 

290Claude Desktop 和 claude.ai 还会将对话中的某些工具结果呈现为交互式小组件,例如某些连接器提供的 [MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/getting-started)。这些小组件从 `claudemcpcontent.com` 的生成子域加载,因此请允许 `*.claudemcpcontent.com` 并保留通配符。如果您阻止它,应用的其余部分仍可正常工作,但这些小组件不会加载。

291 

292<h4 id="third-party-hosts-for-artifact-fonts-and-libraries">

293 用于 Artifact 字体和库的第三方主机

294</h4>

295 

290从 [Google Fonts](/docs/zh-CN/artifacts#improve-the-visual-design) 加载字体的 [Artifact](/docs/zh-CN/artifacts) 也会请求 `fonts.googleapis.com` 和 `fonts.gstatic.com`。两个主机都是可选的。如果您阻止它们,Artifact 会以备用字体呈现。使用快速拒绝而不是静默丢弃来阻止,以便字体请求立即失败,而不是延迟页面的首次呈现。296从 [Google Fonts](/docs/zh-CN/artifacts#improve-the-visual-design) 加载字体的 [Artifact](/docs/zh-CN/artifacts) 也会请求 `fonts.googleapis.com` 和 `fonts.gstatic.com`。两个主机都是可选的。如果您阻止它们,Artifact 会以备用字体呈现。使用快速拒绝而不是静默丢弃来阻止,以便字体请求立即失败,而不是延迟页面的首次呈现。

291 297 

292Artifact 还可以从 `cdnjs.cloudflare.com`、`cdn.jsdelivr.net`、`cdn.tailwindcss.com`、`code.jquery.com` 和 `unpkg.com` 加载 JavaScript 库(如 React 或图表包),而不能从其他外部主机加载。如果您阻止这些主机,Artifact 中依赖库的部分将无法工作,与阻止的字体不同,阻止的库没有备用。也在这里使用快速拒绝,以便阻止的库请求立即失败,而不是挂起直到超时。298Artifact 还可以从 `cdnjs.cloudflare.com`、`cdn.jsdelivr.net`、`cdn.tailwindcss.com`、`code.jquery.com` 和 `unpkg.com` 加载 JavaScript 库(如 React 或图表包),而不能从其他外部主机加载。如果您阻止这些主机,Artifact 中依赖库的部分将无法工作,与阻止的字体不同,阻止的库没有备用。也在这里使用快速拒绝,以便阻止的库请求立即失败,而不是挂起直到超时。

permission-modes.md +174 −163

Details

133 133 

134<Tabs>134<Tabs>

135 <Tab title="CLI">135 <Tab title="CLI">

136 **在会话期间**:按 `Shift+Tab` 循环权限模式。从 `auto`,第一次按下切换到 `default`,循环然后运行 `default` → `acceptEdits` → `plan` → 回到 `default`。可选模式(如下所述)在 `plan` 之后插入。状态栏显示活动模式为灰色 `⏸ manual mode on`(对于 `default`),或为 `⏵⏵ accept edits on`、`⏸ plan mode on`、`⏵⏵ auto mode on`、`⏵⏵ don't ask on` 或 `⏵⏵ bypass permissions on`。136 **在会话期间**:按 `Shift+Tab` 循环权限模式。从 `auto` 开始,第一次按下会切换到 `default`,之后循环依次为 `default` → `acceptEdits` → `plan`。可选模式在 `plan` 之后插入。状态栏显示活动模式为灰色 `⏸ manual mode on`(对于 `default`),或为 `⏵⏵ accept edits on`、`⏸ plan mode on`、`⏵⏵ auto mode on`、`⏵⏵ don't ask on` 或 `⏵⏵ bypass permissions on`。

137 

138 请观察此片段中状态栏的变化,该会话以自动模式启动。每次按下 `Shift+Tab`,状态栏都会从 `auto mode on` 依次变为 `manual mode on`、`accept edits on`、`plan mode on`,然后回到 `auto mode on`。

139 

140 <Frame>

141 <video autoPlay muted loop playsInline className="w-full dark:hidden" style={{aspectRatio: "1440 / 264"}} src="https://mintcdn.com/claude-code/oa7CKjMeIChox26S/images/permission-modes-cycle-light.mp4?fit=max&auto=format&n=oa7CKjMeIChox26S&q=85&s=198ca90aeb2e3675b3d01b7d686aab0b" aria-label="每次按下 Shift+Tab,Claude Code 输入框下方的状态栏都会变化:auto mode on、manual mode on、accept edits on、plan mode on,然后再次变为 auto mode on。" data-path="images/permission-modes-cycle-light.mp4" />

142 

143 <video autoPlay muted loop playsInline className="w-full hidden dark:block" style={{aspectRatio: "1440 / 264"}} src="https://mintcdn.com/claude-code/oa7CKjMeIChox26S/images/permission-modes-cycle-dark.mp4?fit=max&auto=format&n=oa7CKjMeIChox26S&q=85&s=994cdeec4e99d2f474d236c1087d6e63" aria-label="每次按下 Shift+Tab,Claude Code 输入框下方的状态栏都会变化:auto mode on、manual mode on、accept edits on、plan mode on,然后再次变为 auto mode on。" data-path="images/permission-modes-cycle-dark.mp4" />

144 </Frame>

137 145 

138 并非每个模式都在默认循环中:146 并非每个模式都在默认循环中:

139 147 


291 使用自动模式消除权限提示299 使用自动模式消除权限提示

292</h2>300</h2>

293 301 

294自动模式让 Claude 无需常规权限提示即可执行。一个独立的分类器模型在操作运行前审查这些操作,阻止任何超出您请求范围、针对无法识别的基础设施或看起来由 Claude 读取的恶意内容驱动的操作。显式的[询问规则](/docs/zh-CN/permissions#manage-permissions)仍会强制显示提示。302自动模式让 Claude 无需经过常规权限提示即可执行操作。一个独立的分类器模型会在操作运行前对其进行审查,阻止任何超出您请求范围、针对无法识别的基础设施,或看起来受 Claude 读取的恶意内容驱动的操作。显式的 [ask 规则](/docs/zh-CN/permissions#manage-permissions)仍会强制弹出提示。

295 303 

296在 Claude Code v2.1.283 或更高版本中,自动模式是所有计划和提供商的交互式终端和 VS Code 会话的[内置起始权限模式](#which-mode-a-session-starts-in)。在早期版本中,它仅在 Pro、Max 和 Team 计划上是内置起始权限模式。304在 Claude Code v2.1.283 或更高版本中,对于所有计划和提供商,自动模式都是交互式终端和 VS Code 会话的[内置初始权限模式](#which-mode-a-session-starts-in)。在更早的版本中,它仅在 Pro、Max 和 Team 计划中是内置初始权限模式。

297 305 

298分类器还会审查 Claude 使用 [`SendMessage`](/docs/zh-CN/tools-reference) 发送给另一个代理的每条消息,无论是纯文本还是结构化的[代理团队](/docs/zh-CN/agent-teams)消息,在 Claude Code 传递之前,既在自动模式中也在[计划模式中分类器审查命令](#analyze-before-you-edit-with-plan-mode)时;发送审查需要 Claude Code v2.1.222 或更高版本。306分类器还会在 Claude Code 投递之前审查 Claude 通过 [`SendMessage`](/docs/zh-CN/tools-reference) 发送给另一个 Agent 的每条消息,无论是纯文本还是结构化的 [agent team](/docs/zh-CN/agent-teams) 消息,这在自动模式和[分类器审查命令时的计划模式](#analyze-before-you-edit-with-plan-mode)中均适用;发送审查需要 Claude Code v2.1.222 或更高版本。

299 307 

300默认情况下,分类器不审查针对关键路径的 `rm` 和 `rmdir` 删除,例如 `rm -rf /` 或 `rm -rf ~`。[关键路径](#critical-paths)涵盖在每种权限模式中对它们的处理。308默认情况下,分类器不会审查针对关键路径的 `rm` 和 `rmdir` 删除操作,例如 `rm -rf /` 或 `rm -rf ~`。[关键路径](#critical-paths)介绍了它们在各权限模式下的处理方式。

301 309 

302自动模式还会促使 Claude 继续工作而不停下来提出澄清问题,尽管当您的提示或技能明确依赖它时 Claude 仍会询问。为了在仍会提示您的模式中获得更强的自主行为,请改为设置[主动输出风格](/docs/zh-CN/output-styles)。310自动模式还会促使 Claude 持续工作,而不停下来提出澄清性问题,不过当您的提示词或某个 skill 明确依赖提问时,Claude 仍会提问。如果希望在仍会向您提示的模式下获得更强的自主行为,请改为设置 [Proactive 输出样式](/docs/zh-CN/output-styles)。

303 311 

304<Warning>312<Warning>

305 自动模式减少权限提示但不保证安全。将其用于您信任总体方向的任务,而不是作为敏感操作审查的替代品。313 自动模式可以减少权限提示,但不能保证安全。请将其用于您信任总体方向的任务,而不是作为敏感操作审查的替代品。

306</Warning>314</Warning>

307 315 

308自动模式仅在您的账户满足所有这些要求时可用:316只有当您的账户满足以下所有要求时,才能使用自动模式:

309 317 

310* **计划**:所有计划。318* **计划**:所有计划。

311* **组织**:在 Team 和 Enterprise 上,自动模式默认可用。管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中将 `permissions.disableAutoMode` 设置为 `"disable"` 来为组织关闭它。319* **组织**:在 Team 和 Enterprise 上,自动模式默认可用。管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中将 `permissions.disableAutoMode` 设置为 `"disable"` 来为组织关闭该功能。

312* **模型**:在 Anthropic API 和 [AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws) 上,Claude Opus 4.6 或更高版本、Sonnet 4.6 或更高版本,或[Fable 模型](/docs/zh-CN/model-config#work-with-fable)。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)会话上,仅 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本和 Fable 模型。较旧的模型,包括 Sonnet 4.5、Opus 4.5、Haiku 和 claude-3 模型,在任何提供商上都不受支持。320* **模型**:在 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 上,需要 Claude Opus 4.6 或更高版本、Sonnet 4.6 或更高版本,或 [Fable 模型](/docs/zh-CN/model-config#work-with-fable)。在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 以及已登录的 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 会话中,仅支持 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本以及 Fable 模型。较旧的模型(包括 Sonnet 4.5、Opus 4.5、Haiku 和 claude-3 模型)在任何提供商上均不受支持。

313* **提供商**:在 Anthropic API、AWS 上的 Claude Platform、Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude 应用网关会话上默认可用。321* **提供商**:在 Anthropic API、Claude Platform on AWS、Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 以及已登录的 Claude apps gateway 会话中默认可用。

314 322 

315如果 Claude Code 报告自动模式不可用,首先检查这些要求以及任何设置文件是否设置了 [`disableAutoMode`](/docs/zh-CN/settings-reference#disableautomode)。Anthropic 也可能已在服务器端关闭自动模式,或服务器可能已为您的账户拒绝自动模式。接收任一答案的会话会保持自动模式关闭直到会话结束,因此稍后启动新会话。323如果 Claude Code 报告自动模式不可用,请首先检查这些要求,以及是否有任何设置文件设置了 [`disableAutoMode`](/docs/zh-CN/settings-reference#disableautomode)。Anthropic 也可能已在服务器端关闭了自动模式,或者服务器可能拒绝了您账户的自动模式。收到上述任一答复的会话会在会话结束前一直保持自动模式关闭,因此请稍后启动新会话。

316 324 

317一条单独的消息命名一个模型并说自动模式"无法确定"操作的安全性意味着分类器请求失败。该失败通常是暂时的,但在 Amazon Bedrock 上,它可能会重复直到您的账户可以调用命名的模型。有关原因和处理方法,请参阅[错误参考](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。325另一条指明某个模型并表示自动模式"cannot determine the safety"(无法确定安全性)的消息,意味着某次分类器请求失败。这种失败通常是暂时的,但在 Amazon Bedrock 上,它可能会反复出现,直到您的账户能够调用所指明的模型。有关原因和处理方法,请参阅[错误参考](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。

318 326 

319如果您在[设置](/docs/zh-CN/settings-reference#all-settings)中设置 `defaultMode: "auto"` 并且终端会话在没有错误的情况下以 Manual 模式启动,该设置可能在 `.claude/settings.json` 或 `.claude/settings.local.json` 中。`auto` 不会从这些文件生效。将其移至 `~/.claude/settings.json`。对于 VS Code 扩展启动的对话,请改为检查扩展自己的列表在[切换权限模式](#switch-permission-modes)中。327如果您在[设置](/docs/zh-CN/settings-reference#all-settings)中设置了 `defaultMode: "auto"`,而终端会话却以 Manual 模式启动且没有报错,那么该设置很可能位于 `.claude/settings.json` 或 `.claude/settings.local.json` 中。`auto` 在这些文件中不会生效。请将其移至 `~/.claude/settings.json`。对于由 VS Code 扩展启动的对话,请改为查看[切换权限模式](#switch-permission-modes)中该扩展自己的列表。

320 328 

321<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">329<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">

322 Bedrock、Agent Platform 或 Foundry 上的自动模式330 Bedrock、Agent Platform 或 Foundry 上的自动模式

323</h3>331</h3>

324 332 

325在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai)、[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 和已登录的[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)会话上,自动模式默认可用。当没有其他设置权限模式时,它也是[内置起始权限模式](#which-mode-a-session-starts-in),在该部分的表列出的版本上。要自己选择起始权限模式,请按照[以不同权限模式启动](#start-in-a-different-mode)的描述设置 `permissions.defaultMode`,或从 VS Code 扩展的模式指示器中选择权限模式。333在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai)、[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 以及已登录的 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 会话中,自动模式默认可用。当没有其他内容设置权限模式时,在该部分表格所列的版本上,它也是[内置初始权限模式](#which-mode-a-session-starts-in)。要自行选择初始权限模式,请按照[以不同的权限模式启动](#start-in-a-different-mode)中的说明设置 `permissions.defaultMode`,或从 VS Code 扩展的模式指示器中选择权限模式。

326 334 

327这些提供商上仅支持 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本和 Fable 模型。在任何其他模型上,会话以 Manual 模式启动。335在这些提供商上,仅支持 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本以及 Fable 模型。在任何其他模型上,会话将改为以 Manual 模式启动。

328 336 

329要防止开发人员使用自动模式,请在[托管设置](/docs/zh-CN/managed-settings)中将 `disableAutoMode` 设置为 `"disable"`。这会从 `Shift+Tab` 循环中移除 `auto`,并且使用 `--permission-mode auto` 启动的会话以 Manual 模式启动。已在自动模式中运行的会话在设置从[管理员部署的源](/docs/zh-CN/managed-settings#which-managed-source-claude-code-uses)到达该会话时会离开它,并显示 `auto mode disabled by settings`。在 v2.1.251 之前,运行中的会话会保持自动模式直到它结束。337要阻止开发者使用自动模式,请在[托管设置](/docs/zh-CN/managed-settings)中将 `disableAutoMode` 设置为 `"disable"`。这会将 `auto` 从 `Shift+Tab` 循环中移除,并且使用 `--permission-mode auto` 启动的会话将改为以 Manual 模式启动。当该设置从[管理员部署的来源](/docs/zh-CN/managed-settings#which-managed-source-claude-code-uses)到达一个已在自动模式下运行的会话时,该会话会退出自动模式,并显示 `auto mode disabled by settings`。在 v2.1.251 之前,正在运行的会话会保持自动模式直到会话结束。

330 338 

331在 v2.1.158 到 v2.1.206 中,自动模式在这些提供商上是关闭的,直到您设置 `CLAUDE_CODE_ENABLE_AUTO_MODE=1`,并且 Claude Code 在这些提供商上忽略 `defaultMode: "auto"`,除非也设置了该变量。该变量仍被接受以保持兼容性,从 v2.1.207 开始无效。339在 v2.1.158 到 v2.1.206 中,这些提供商上的自动模式默认关闭,直到您设置 `CLAUDE_CODE_ENABLE_AUTO_MODE=1`;并且除非同时设置了该变量,否则 Claude Code 会在这些提供商上忽略 `defaultMode: "auto"`。出于兼容性考虑,该变量仍然可用,但从 v2.1.207 起不再产生任何效果。

332 340 

333<h3 id="server-side-classifier-review">341<h3 id="server-side-classifier-review">

334 服务器端分类器审查342 服务器端分类器审查

335</h3>343</h3>

336 344 

337在自动模式中,Claude Code 可以要求服务器检查[决策顺序](#how-the-classifier-evaluates-actions)发送的操作以供审查,作为会话模型请求的一部分,而不是发送自己的分类器请求。这些会话询问:345在自动模式下,Claude Code 可以在会话的模型请求中请求服务器检查由[决策顺序](#how-the-classifier-evaluates-actions)送交审查的操作,以代替发送其自身的分类器请求。以下会话会请求服务器审查:

338 346 

339* **直接连接到 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)的会话,例如因为您关闭了遥测,在任何类型的会话中默认询问服务器。347* **直接连接到 Anthropic API**:在交互式终端会话以及 `-p`、Agent SDK、[VS Code 扩展](/docs/zh-CN/vs-code)和[桌面应用](/docs/zh-CN/desktop)会话中,无论您的计划或账户类型如何,随 Anthropic 逐步推出而生效。在交互式终端会话中,Pro、Max 和 Team 计划需要 Claude Code v2.1.271 或更高版本,Enterprise 计划和 Claude API 账户需要 v2.1.278 或更高版本。在 `-p`、Agent SDK、VS Code 扩展和桌面应用会话中,需要 Claude Code v2.1.281 或更高版本。从 v2.1.282 起,[不获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话(例如因为您关闭了遥测)在任何类型的会话中都会默认请求服务器审查。

340* **云提供商、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 或更高版本。348* **云提供商,或 LLM 网关或代理**:在 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)、Amazon Bedrock、Google Cloud's Agent Platform 和 Microsoft Foundry 上,以及每当您将 `ANTHROPIC_BASE_URL` 指向 [LLM 网关或代理](/docs/zh-CN/llm-gateway)时,无论您的计划如何。默认请求服务器审查需要 Claude Code v2.1.278 或更高版本。

341* **已登录的[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)会话**:需要 Claude Code v2.1.280 或更高版本349* **已登录的 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 会话**:需要 Claude Code v2.1.280 或更高版本

342 350 

343服务器审查操作的地方,其判决决定了它们。另外两种结果是可能的:351当服务器审查这些操作时,由服务器的裁决决定结果。此外还有另外两种可能的结果:

344 352 

345* **服务器不审查会话**:响应完成时没有审查结果,或服务器回答它不审查此会话。最常见的原因是 LLM 网关或代理丢弃审查请求或结果,以及平台、区域或凭证还没有服务器端检查。Claude Code 回退到自己的分类器请求。一旦该回退对会话的其余部分生效,它会在那些请求被计费的账户上显示[关于分类器请求费用的通知](/docs/zh-CN/auto-mode-classifier-billing)。353* **服务器不审查该会话**:响应完成但没有审查结果,或服务器答复它不审查此会话。最常见的原因是 LLM 网关或代理丢弃了审查请求或结果,以及平台、区域或凭据尚不支持服务器端检查。Claude Code 会回退到其自身的分类器请求。一旦该回退在会话剩余时间内保持生效,在这些请求需要计费的账户上,它会显示[关于分类器请求费用的通知](/docs/zh-CN/auto-mode-classifier-billing)。

346* **服务器对操作没有给出判决**:Claude Code 拒绝该操作而不是运行它未审查。在任何连接上,当响应在审查结果到达之前结束或结果以 Claude Code 无法读取的形式到达时,这会发生。LLM 网关或代理切断响应或重写结果可能导致任一情况。在直接连接到 Anthropic API 时,当服务器对操作的检查失败时也会发生,例如超时。[服务器未返回安全判决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)涵盖拒绝消息、拒绝重复时发生的情况以及处理方法。354* **服务器未对某个操作给出裁决**:Claude Code 会拒绝该操作,而不是在未经审查的情况下运行它。在任何连接上,当响应在审查结果到达前结束,或结果以 Claude Code 无法读取的形式到达时,都会发生这种情况。截断响应或改写结果的 LLM 网关或代理可能导致上述任一情况。在直接连接到 Anthropic API 时,当服务器对该操作的检查失败(例如超时)时也会发生这种情况。[服务器未返回安全裁决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)介绍了拒绝消息、拒绝反复发生时的情况以及处理方法。

347 355 

348要跳过询问服务器并始终使用 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 也会停止询问服务器,除了[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities)描述的情况。356要跳过请求服务器审查并始终使用 Claude Code 自身的分类器请求,请设置 [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/zh-CN/env-vars)。在直接连接到 Anthropic API 时,该变量需要 Claude Code v2.1.281 或更高版本。在这种连接上将其设置为 `1`,会在尚未启用服务器审查的会话中启用它,除非您同时设置了 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`。如果您设置了 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` 且未设置 `CLAUDE_CODE_AUTO_MODE_SERVER`,Claude Code 也会停止请求服务器审查,[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities)中描述的情况除外。

349 357 

350<h3 id="what-the-classifier-blocks-by-default">358<h3 id="what-the-classifier-blocks-by-default">

351 分类器默认阻止的内容359 分类器默认阻止的内容

352</h3>360</h3>

353 361 

354分类器信任您的工作目录和会话启动时为其配置的远程。在会话期间使用 `git remote add` 或 `git remote set-url` 添加或重新指向的远程不受信任,其他所有内容都被视为外部,直到您[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。在 v2.1.200 之前,会话中期添加的远程也受信任。362分类器信任您的工作目录以及会话启动时为其配置的远程仓库。在会话期间通过 `git remote add` 或 `git remote set-url` 添加或重新指向的远程仓库不受信任,其他所有内容都被视为外部内容,直到您[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。在 v2.1.200 之前,会话中途添加的远程仓库也受信任。

355 363 

356**默认阻止**:364**默认阻止**:

357 365 

358* 下载和执行代码,如 `curl | bash`366* 下载并执行代码,例如 `curl | bash`

359* 向外部端点发送敏感数据367* 将敏感数据发送到外部端点

360* 生产部署和迁移368* 生产环境部署和迁移

361* 云存储上的大量删除369* 在云存储上进行批量删除

362* 授予 IAM 或仓库权限370* 授予 IAM 或仓库权限

363* 修改共享基础设施371* 修改共享基础设施

364* 不可逆地销毁会话前存在的文件372* 不可逆地销毁会话开始前已存在的文件

365* 强制推送373* 强制推送

366* 提交或推送会在运行时向仓库外发送秘密或敏感数据的更改,或扩大部署公开的内容。这涵盖将秘密传递给不已接收它的目的地的 CI 工作流或部署配置、读取秘密存储并发送数据的脚本或设置步骤,以及扩大部署发布内容的配置更改,例如注册表、可见性、工件或源映射设置。检查适用于任何分支,即使仓库是公开的也适用,并在提交或推送时触发,无论该提交或推送是否触发管道;清除它需要命名执行效果,而不仅仅是提交或推送。在 v2.1.211 之前,此检查的范围仅限于默认分支:推送到那里在携带敏感内容、隐瞒或误描述相对于您要求的内容、从仓库外移植的内容或绕过您要求的审查的内容时被阻止374* 提交或推送一项更改,该更改在运行时会将密钥或敏感数据发送到仓库之外,或扩大部署所暴露的内容。这包括将密钥传递给尚未接收它的目标的 CI 工作流或部署配置、读取密钥存储并将数据发送出去的脚本或设置步骤,以及扩大部署发布内容的配置更改,例如注册表、可见性、制品或 sourcemap 设置。该检查适用于任何分支,即使仓库是公开的也同样适用,并在更改被提交或推送时触发,无论该提交或推送是否会触发流水线;要解除阻止,需要说明其执行效果,而不仅仅是提交或推送本身。在 v2.1.211 之前,该检查改为限定于默认分支:当推送到默认分支的内容包含敏感内容、相对于您的要求隐瞒或错误描述的更改、从仓库外部移植的内容,或绕过了您要求的审查时,该推送会被阻止

367* `git reset --hard`、`git checkout -- .`、`git restore .`、`git clean -fd`、`git stash drop` 或 `git stash clear`,分类器推测会丢弃未提交的更改375* `git reset --hard`、`git checkout -- .`、`git restore .`、`git clean -fd`、`git stash drop` 或 `git stash clear`,分类器会假定这些命令会丢弃未提交的更改

368* `git commit --amend` 当 HEAD 处的提交不是在此会话中创建的376* 当 HEAD 处的提交并非在本会话中创建时执行 `git commit --amend`

369* 从 v2.1.198 开始,`git commit --amend` 当 HEAD 处的提交已被推送。仅消息重述不被阻止:`--amend -m` 在此会话中 Claude 创建的提交上没有新暂存的内容377* 从 v2.1.198 起,当 HEAD 处的提交已被推送时执行 `git commit --amend`。仅修改提交信息的改写不会被阻止:即在 Claude 于本会话中创建的提交上,不暂存任何新内容的情况下执行 `--amend -m`

370* `terraform destroy`、`pulumi destroy`、`cdk destroy` 或 `terragrunt destroy`,以及应用销毁资源的计划378* `terraform destroy`、`pulumi destroy`、`cdk destroy` 或 `terragrunt destroy`,以及应用会销毁资源的计划

371* 写入秘密管理器,或更改 DNS 记录或 TLS 证书379* 写入密钥管理器,或更改 DNS 记录或 TLS 证书

372* 合并没有人类批准的拉取请求、批准 Claude 自己的拉取请求或禁用 CI 检查380* 合并没有任何人工批准的 Pull Request、批准 Claude 自己的 Pull Request,或禁用 CI 检查

373* 发布本身是自动化命令的评论,例如 `atlantis apply` 或机器人的 `/deploy` 或 `/merge`381* 发布本身就是对自动化发出的命令的评论,例如 `atlantis apply` 或机器人的 `/deploy` 或 `/merge`

374* 切换、调整或删除生产功能标志382* 切换、逐步放量或删除生产环境的功能标志

375* 将基础设施更改应用于受保护的 IaC 范围,或排空和移除集群节点383* 将基础设施更改应用到受保护的 IaC 作用域,或排空并移除集群节点

376* 写入超出您命名的资源的共享计算集群,例如标签选择器或 `--all` 捕获其他用户的作业384* 对共享计算集群的写入超出了您所指定的资源,例如会波及其他用户作业的标签选择器或 `--all`

377* 创建在每个节点上运行或拦截集群流量的 Kubernetes 资源,例如 DaemonSets 和准入 webhooks385* 创建在每个节点上运行或拦截集群流量的 Kubernetes 资源,例如 DaemonSet 和准入 webhook

378* 交互式 shell 或端口转发到敏感的远程目标386* 连接到敏感远程目标的交互式 shell 或端口转发

379* 打开隧道或反向 shell 使本地服务可从公网访问387* 打开使本地服务可从公共互联网访问的隧道或反向 shell

380* 将实时凭证或令牌打印到记录或文件中388* 将有效的凭据或令牌打印到会话记录或文件中

381* 访问在您的[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)中列为敏感数据位置的位置,或从一个位置复制数据。从 v2.1.198 开始,这也阻止从一个位置向条目排除的受众发送数据389* 访问在您的[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)中被列为敏感数据位置的位置、从中复制数据,或将数据从此类位置发送给该条目所排除的受众

382* 绕过您的内部包注册表路由包安装到公开注册表。从 v2.1.198 开始,这也适用于您在对话中告诉 Claude 内部注册表或镜像存在的情况,而不仅仅是在您的环境中列出的情况390* 绕过您的内部包注册表、将包安装路由到公共注册表。当您的环境中列出了内部注册表或镜像,或者您在对话中告诉 Claude 存在内部注册表或镜像时,此规则适用

383* 使用禁用安全防护的标志运行命令,如 `--insecure`391* 使用会解除安全防护的标志运行命令,例如 `--insecure`

384* 启动在没有人类批准或沙箱的情况下运行的自主代理循环,例如使用 `--dangerously-skip-permissions` 或 `--no-sandbox` 启动的循环。从 v2.1.198 开始,这也涵盖运行禁用隔离和按操作批准的第三方代理或评估工具,例如使用 `--yes-always` 启动的运行器392* 启动无需人工批准或沙箱即可运行的自主 Agent 循环,例如使用 `--dangerously-skip-permissions` 或 `--no-sandbox` 启动的循环。这包括在禁用隔离和逐操作批准的情况下运行第三方 Agent 或评估工具,例如使用 `--yes-always` 启动的运行器

385* [Chrome 中的 Claude](/docs/zh-CN/chrome)浏览器操作可能会向源外发送页面内容、cookie 或凭证393* 可能将页面内容、cookie 或凭据发送到源站之外的 [Claude in Chrome](/docs/zh-CN/chrome) 浏览器操作

386 394* 通过通配符、glob 或时间过滤器(而非指定的具体路径)删除 `/tmp`、`$TMPDIR` 或其他共享临时目录或缓存目录中的文件

387其中几个类别取决于[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)条目,例如敏感的远程目标和受保护的 IaC 范围,您可以将其缩小到具体名称。395* 在发送、上传、发布或写入给他人或共享系统的内容中包含敏感细节,而您自己的消息并未授权将这些细节提供给该接收方。当仓库位于信任边界之外或为公开仓库(包括您组织自己的公开仓库)时,PR 和 issue 正文、提交信息以及评论都属于此类外发内容;内部文件路径、代号、实时 API 响应数据(例如电子邮件或账户标识符)以及基础设施标识符都属于敏感细节。PR、issue 和提交信息的范围限定需要 Claude Code v2.1.200 或更高版本。对于 PR 或 issue 正文中来自 API 响应的实时个人数据,例如电子邮件地址、账户或组织标识符或使用量指标,无论仓库的可见性或信任边界如何,都需要您明确指出这些细节和接收方。该检查需要 Claude Code v2.1.203 或更高版本

396* 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自身界面,分类器会将此视为 Claude 更改其自身的权限或监督

388 397 

389Claude Code v2.1.198 及更高版本也默认阻止这些:398其中一些类别依赖于[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)条目,例如敏感远程目标和受保护的 IaC 作用域,您可以将它们收窄到具体名称。

390 399 

391* 通过通配符、glob 或年龄过滤器而不是特定命名路径删除 `/tmp`、`$TMPDIR` 或另一个共享暂存或缓存目录中的文件400Claude Code v2.1.200 及更高版本还会默认阻止以下操作:

392* 在发送、上传、发布或写入其他人或共享系统的内容中包含敏感详情,当您自己的消息没有为该收件人授权这些详情时。PR 和问题正文、提交消息和评论在仓库在信任边界外或公开时计为这种出站内容,包括您组织自己的公开仓库;内部文件路径、代码名称、实时 API 响应数据(如电子邮件或账户标识符)和基础设施标识符计为敏感详情。PR、问题和提交消息范围需要 Claude Code v2.1.200 或更高版本。PR 或问题正文中的实时个人数据(如电子邮件地址、账户或组织标识符或使用指标)需要您命名这些详情和收件人,无论仓库的可见性或信任边界如何。该检查需要 Claude Code v2.1.203 或更高版本

393* 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自己的界面,分类器将其视为 Claude 更改自己的权限或监督

394 401 

395Claude Code v2.1.200 及更高版本也默认阻止这些:402* 注释掉、删除或强制通过用于保护安全行为(例如身份验证、访问控制、输入验证或沙箱隔离)的测试或断言

403* 删除或拆除 Claude 未在本会话中创建的有状态资源,且没有更具体的删除规则适用、您也未指定该资源

404* 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向与任务不相符的第三方主机,包括在 `.env.example` 等示例文件中

405* 使用 `git remote set-url` 或 `git remote add` 更改推送目标,除非您指定了新的远程仓库

406* 将密钥或个人数据、受托数据推送到已知为公开的仓库,或将不属于该仓库本身工作的机密材料推送到该仓库。对于个人数据或受托数据,唯一的例外是 dotfiles 仓库本身的主题内容;来自私有仓库的内容进入任何公开渠道也会以同样方式被阻止;这两项细化都需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,个人数据与机密材料归为一类,仅在不属于该仓库本身工作时才被阻止。当仓库的可见性无法确定时,分类器不会仅凭这一点进行阻止,而是依据其他规则来判断内容

407* 向其他仓库或组织发起 Pull Request、使用 `gh repo fork` 进行 fork,或推送到第三方仓库,除非您指定了该外部目标

396 408 

397* 注释掉、删除或强制通过保护安全行为的测试或断言,例如身份验证、访问控制、输入验证或沙箱409Claude Code v2.1.203 及更高版本还会默认阻止以下操作:

398* 删除或拆除 Claude 在会话中未创建的有状态资源,当没有更具体的删除规则适用且您没有命名该资源时

399* 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向不适合任务的第三方主机,包括在 `.env.example` 等示例文件中

400* 使用 `git remote set-url` 或 `git remote add` 更改推送去向,除非您命名了新远程

401* 推送秘密或个人或受信任的数据到已知为公开的仓库,或推送不属于该仓库自己工作的机密材料到那里。dotfiles 仓库自己的主题是个人或受信任数据的唯一例外,来自私有仓库到任何公开表面的内容以相同方式被阻止;两项改进都需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,个人数据与机密材料分组,仅在不属于该仓库自己的工作时被阻止。当仓库的可见性未建立时,分类器不仅基于此阻止;它改为根据其他规则判断内容

402* 针对不同仓库或组织打开拉取请求、使用 `gh repo fork` 进行分叉或推送到第三方仓库,除非您命名了该外部目标

403 410 

404Claude Code v2.1.203 及更高版本也默认阻止这些:411* 来自敏感本地存储的内容,或来自名称、路径或类型表明其为敏感文件的内容,进入提交、推送、PR 或 issue 文本、gist 或粘贴、或包发布,除非您同时指定了来源和目标。会话记录和对话日志、凭据和配置类点文件夹(例如 SSH 密钥、云凭据、浏览器配置文件和 shell 历史记录)以及用户数据导出都包括在内,仓库为私有也不能解除此阻止

405 412 

406* 来自敏感本地存储或其名称、路径或类型将其标记为敏感的文件的内容进入提交、推送、PR 或问题文本、gist 或粘贴或包发布,除非您命名了源和目的地。会话记录和对话日志、凭证和配置点文件夹(如 SSH 密钥、云凭证、浏览器配置文件和 shell 历史)以及用户数据导出都计为此,仓库是私有的不会清除它413Claude Code v2.1.205 及更高版本还会默认阻止以下操作:

407 414 

408Claude Code v2.1.205 及更高版本也默认阻止这些:415* 写入 Claude Code 会话记录,即 `~/.claude/projects/` 或您所配置的配置目录下的 `.jsonl` 历史文件,无论是直接写入还是通过 shell 命令写入。该规则还涵盖 Claude Code 为其自身检查而附加到每条会话记录条目中的元数据行。读取会话记录不会被阻止

416* 递归强制删除,例如 `rm -rf "$VAR"` 或 `Remove-Item -Recurse -Force $dir`,其目标是在分类器所见对话中任何地方都未赋值的 shell 变量,或以此类变量为根的 glob。该值仅来自先前的命令输出,而分类器从不接收这些输出,因此分类器无法根据其他删除规则验证删除目标。当您指明要删除的确切路径,或 Claude 将解析后的字面路径写入命令并重新运行删除时,该阻止会解除。分类器能够解析目标的删除操作不受影响。

409 417 

410* 写入 Claude Code 会话记录、`~/.claude/projects/` 下的 `.jsonl` 历史文件或您配置的配置目录,无论是直接还是通过 shell 命令。该规则也涵盖 Claude Code 为其自己的检查附加到每个记录条目的元数据行。读取记录不被阻止418 直接位于变量下的 glob(例如 `rm -rf "$VAR"/*`)则属于[关键路径](#critical-paths)。目标为单独的 `*` 或以 `/*` 或 `\*` 结尾的 `Remove-Item` 永远不会到达分类器:Claude Code 会[直接拒绝它们](#remove-item-in-powershell)。

411* 递归强制删除,例如 `rm -rf "$VAR"` 或 `Remove-Item -Recurse -Force $dir`,其目标是在分类器看到的对话中任何地方都未分配的 shell 变量,或以这样的变量为根的 glob。该值仅来自较早的命令输出,分类器永远不会接收,因此分类器无法根据其他删除规则验证删除目标。当您命名被删除的确切路径或 Claude 使用写入命令的已解析文字路径重新运行删除时,该块会清除。其目标分类器可以解析的删除不受影响。

412 419 

413 直接在变量下的 glob,如 `rm -rf "$VAR"/*`,是[关键路径](#critical-paths)。`Remove-Item` 目标是裸 `*` 或以 `/*` 或 `\*` 结尾的永远不会到达分类器:Claude Code [直接拒绝它们](#remove-item-in-powershell)。420Claude Code v2.1.257 及更高版本还会默认阻止以下操作:

414 421 

415Claude Code v2.1.257 及更高版本也默认阻止这些:422* 从云实例元数据端点(例如 `169.254.169.254`)请求凭据,或明确使用机器自身的服务账户或节点身份对云、集群或注册表调用进行身份验证

423* 通过直接请求以外的路径访问公共主机,例如隧道、反向 shell,或被改写为指向外部的解析器或代理配置

424* 读取属于主机而非您的任务的凭据,例如节点证书或节点的容器注册表身份验证信息

425* 连接或扫描 Claude 未启动的同级容器、pod 或虚拟机,或容器所在的节点

416 426 

417* 从云实例元数据端点请求凭证,例如 `169.254.169.254`,或使用机器自己的服务账户或节点身份显式验证云、集群或注册表调用427如果 Claude Code 运行的环境本应允许其中某项操作,请在 `autoMode.environment` 中的 [Host containment 条目](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)中描述该设置。

418* 通过直接请求以外的路由到达公开主机,例如隧道、反向 shell 或重写为指向外部的解析器或代理配置

419* 读取属于主机而不是您的任务的凭证,例如节点证书或节点的容器注册表身份验证

420* 连接到或扫描 Claude 未启动的同级容器、pod 或 VM,或容器下的节点

421 428 

422如果 Claude Code 在允许其中之一的地方运行,请在 `autoMode.environment` 中的[主机包含条目](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)中描述该设置。429Claude Code v2.1.261 及更高版本还会默认阻止以下操作:

423 430 

424Claude Code v2.1.261 及更高版本也默认阻止这些:431* 当 URL 本身携带了正在共享的内容时,在消息、PR 或 issue 文本、文档或任何其他会打开或获取该链接的地方,发布或写入指向公共粘贴、图表或数据共享服务的链接,除非您指定了该服务

425 

426* 在消息、PR 或问题文本、文档或链接将被打开或获取的任何其他地方发布或写入公开粘贴、图表或数据共享服务的链接,当 URL 本身携带被共享的内容时,除非您命名了该服务

427 432 

428**默认允许**:433**默认允许**:

429 434 

430* 您工作目录中的本地文件操作435* 在您的工作目录中进行本地文件操作

431* 安装在您的锁定文件或清单中声明的依赖项436* 安装您的锁文件或清单中声明的依赖

432* 读取 `.env` 并向其匹配的 API 发送凭证437* 读取 `.env` 并将凭据发送到与之匹配的 API

433* 只读 HTTP 请求438* 只读 HTTP 请求

434* 推送到您正在处理的仓库的任何分支,包括默认分支。其名称将其标记为部署或发布目标的非默认分支,例如 `production` 或 `gh-pages`,不被涵盖:分类器根据其自己的条款判断推送到那里。推送的内容仍根据其他规则进行检查,[`permissions.deny` 规则](/docs/zh-CN/permissions#manage-permissions)仍可以在每种模式中[按书写](/docs/zh-CN/permissions#bash-rule-limits)阻止推送命令,远程自己的分支保护仍适用。在 v2.1.211 之前,仅推送到您启动的分支、Claude 创建的分支和到默认分支的常规推送默认允许,在 v2.1.203 之前任何直接推送到默认分支都被阻止439* 推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如 `production` 或 `gh-pages`)不在此列:分类器会单独判断推送到这类分支的操作。推送的内容仍会根据其他规则进行检查,[`permissions.deny` 规则](/docs/zh-CN/permissions#manage-permissions)在所有模式下仍可按[命令的书写形式](/docs/zh-CN/permissions#bash-rule-limits)阻止推送命令,并且远程仓库自身的分支保护仍然适用。在 v2.1.211 之前,默认仅允许推送到您开始时所在的分支、Claude 创建的分支,以及对默认分支的常规推送;而在 v2.1.203 之前,任何直接推送到默认分支的操作都会被阻止

435* 删除 Claude 在同一会话中较早创建的确切作业440* 删除 Claude 在同一会话中先前创建的确切作业

436* 作为您的任务的一部分读取、审查或编写安全相关的代码、配置和威胁模型441* 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型

437* 在同一多代理会话中一起工作的代理之间的消息442* 在同一多 Agent 会话中协同工作的 Agent 之间的消息

438* 向您在 [`environment`](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure) 中列出的受信任域、存储桶和服务发送数据。这仅涵盖数据流,不涵盖同一基础设施上的破坏性或凭证操作443* 将数据发送到您在 [`environment`](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure) 中列出的受信任域名、存储桶和服务。这仅涵盖数据流动,不包括对同一基础设施的破坏性操作或凭据操作

439* [Chrome 中的 Claude](/docs/zh-CN/chrome)导航到受信任的内部域、localhost 或您命名的 URL444* [Claude in Chrome](/docs/zh-CN/chrome) 导航到受信任的内部域名、localhost 或您指定的 URL

440 445 

441沙箱命令默认不获得网络访问。Claude 在命令本身上命名命令需要的主机,分类器与命令一起审查它们,批准的列表仅为该一个命令打开这些主机。[每个命令允许的域](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)涵盖列表可以和不能打开什么以及命令到达未列出的主机时发生的情况。446沙箱化命令默认没有网络访问权限。Claude 会在命令本身上指明该命令所需的主机,分类器会将这些主机与命令一起审查,而获批的列表仅为该条命令开放这些主机。[按命令允许的域名](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)介绍了列表能开放和不能开放的内容,以及命令尝试访问未列出的主机时会发生什么。

442 447 

443运行 `claude auto-mode defaults` 以将完整规则列表打印为 JSON。如果常规操作被阻止,管理员可以通过 `autoMode.environment` 设置添加受信任的仓库、存储桶和服务:请参阅[配置自动模式](/docs/zh-CN/auto-mode-config)。448运行 `claude auto-mode defaults` 可以以 JSON 格式打印完整的规则列表。如果常规操作被阻止,管理员可以通过 `autoMode.environment` 设置添加受信任的仓库、存储桶和服务:请参阅[配置自动模式](/docs/zh-CN/auto-mode-config)。

444 449 

445推送到您正在处理的仓库的任何分支并创建与您的请求匹配的拉取请求无需提示即可运行,除非推送或拉取请求属于[阻止列表](#what-the-classifier-blocks-by-default),例如秘密或敏感数据离开仓库,或针对不同仓库或组织的拉取请求。要在保持自动模式的同时在这些命令之前需要人类检查点,请添加 `permissions.ask` 规则,这些规则与命令[按书写](/docs/zh-CN/permissions#bash-rule-limits)匹配:请参阅[常见边界](/docs/zh-CN/auto-mode-config#common-boundaries)。450推送到您正在处理的仓库的任何分支,以及创建与您的请求相符的 Pull Request,都会在无提示的情况下运行,除非该推送或 Pull Request 属于[阻止列表](#what-the-classifier-blocks-by-default)中的情况,例如密钥或敏感数据离开仓库,或 Pull Request 针对的是其他仓库或组织。如果要在保持自动模式的同时,要求在这些命令执行前进行人工确认,请添加 `permissions.ask` 规则,这些规则按[命令的书写形式](/docs/zh-CN/permissions#bash-rule-limits)进行匹配:请参阅[常见边界](/docs/zh-CN/auto-mode-config#common-boundaries)。

446 451 

447<h3 id="first-read-outside-the-working-directories">452<h3 id="first-read-outside-the-working-directories">

448 工作目录外的第一次读取453 首次读取工作目录之外的内容

449</h3>454</h3>

450 455 

451当 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 关闭时,文件读取在自动模式中无需提示即可运行,包括在[工作目录](/docs/zh-CN/permissions#working-directories)外的读取。Claude 第一次在它们外的路径上使用 Read、Grep 或 Glob 工具时,Claude Code 询问是否允许该读取。456当 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 关闭时,在自动模式下文件读取无需提示即可运行,包括读取[工作目录](/docs/zh-CN/permissions#working-directories)之外的内容。当 Claude 首次对工作目录之外的路径使用 Read、Grep 或 Glob 工具时,Claude Code 会询问是否允许该读取。

452 457 

453该提示不会出现在非交互式 `-p` 运行或后台会话中;那里的读取照常运行。458在非交互式 `-p` 运行或后台会话中不会出现该提示;这些情况下的读取照常运行。

454 459 

455无论您的答案如何,Claude 继续工作:460无论您如何回答,Claude 都会继续工作:

456 461 

457* **是的,继续允许工作目录外的任何读取**:读取运行,稍后工作目录外的读取照常运行,Claude Code 记录您的答案以便提示不再出现462* **是,并继续允许读取工作目录之外的任何内容**:读取会运行,之后对工作目录之外内容的读取照常运行,并且 Claude Code 会记录您的回答,使该提示不再出现

458* **否,从现在开始阻止工作目录外的读取**:读取被拒绝,Claude Code 在您的用户设置中将 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 设置为 `true`,这使文件工具在每个后续会话和每种权限模式中拒绝此类读取。要稍后让 Claude 读取此类路径,请使用 `/add-dir` 添加其目录或移除该设置。463* **否,并从现在起阻止读取工作目录之外的内容**:读取会被拒绝,并且 Claude Code 会在您的用户设置中将 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 设置为 `true`,这会使文件工具在之后的每个会话和每种权限模式中拒绝此类读取。如果之后要让 Claude 读取此类路径,请使用 `/add-dir` 添加其目录,或移除该设置。

459* **否,下次再问**:读取被拒绝,下一次工作目录外的读取再次提示464* **否,下次再询问**:读取会被拒绝,下一次读取工作目录之外的内容时会再次提示

460* **是的,但下次再问**:读取运行,不保存任何内容,下一次工作目录外的读取再次提示465* **是,但下次再询问**:读取会运行,不会保存任何内容,下一次读取工作目录之外的内容时会再次提示

461 466 

462<h3 id="boundaries-you-state-in-conversation">467<h3 id="boundaries-you-state-in-conversation">

463 您在对话中陈述的边界468 您在对话中声明的边界

464</h3>469</h3>

465 470 

466分类器将您在对话中陈述的边界视为阻止信号。如果您告诉 Claude"不要推送"或"在我审查后再部署",分类器会阻止匹配的操作,即使默认规则会允许它们。边界保持有效直到您在后续消息中解除它。Claude 自己的条件已满足的判断不会解除它。471分类器会将您在对话中声明的边界视为阻止信号。如果您告诉 Claude "不要推送"或"在部署前等我审查",即使默认规则允许,分类器也会阻止相应的操作。边界会一直有效,直到您在后续消息中解除它。Claude 自己判断某个条件已满足并不能解除边界。

467 472 

468边界不存储为规则。分类器在每次检查时从记录中重新读取它们,因此如果[上下文压缩](/docs/zh-CN/costs#reduce-token-usage)移除陈述边界的消息,边界可能会丢失。为了硬保证,请改为添加[拒绝规则](/docs/zh-CN/permissions#permission-rule-syntax)。473边界不会作为规则存储。分类器在每次检查时都会从会话记录中重新读取这些边界,因此如果[上下文压缩](/docs/zh-CN/costs#reduce-token-usage)移除了声明边界的消息,该边界可能会丢失。如需硬性保证,请改为添加 [deny 规则](/docs/zh-CN/permissions#permission-rule-syntax)。

469 474 

470<h3 id="approvals-you-state-in-conversation">475<h3 id="approvals-you-state-in-conversation">

471 您在对话中陈述的批准476 您在对话中声明的批准

472</h3>477</h3>

473 478 

474如果您告诉 Claude 被阻止的操作是允许的,分类器将其读取为您的批准并可以清除阻止。您如何措辞决定了操作是否运行以及批准到达多远:479如果您告诉 Claude 某个被阻止的操作是允许的,分类器会将其视为您的批准,并可以解除阻止。您的措辞决定了该操作是否会运行,以及批准的覆盖范围:

475 480 

476* **命名操作及其具体情况**:您的消息必须命名操作和使其危险的具体事项,例如强制推送的分支。仅命名动词不会清除任何内容,因此"您可以强制推送"会使阻止保持有效。481* **指明操作及其具体细节**:您的消息必须指明该操作以及使其具有危险性的具体内容,例如强制推送的分支。仅指明动词不会解除任何阻止,因此"你可以强制推送"不会解除阻止。

477* **期望它涵盖一个操作**:批准涵盖您命名的破坏性操作,因此稍后的操作再次被阻止,除非您授予批准为常设。要停止一次一个地批准常规模式,请将其添加到 [`autoMode.allow`](/docs/zh-CN/auto-mode-config#override-the-block-and-allow-rules)。482* **预期它仅涵盖一个操作**:批准涵盖您所指明的破坏性操作,因此之后的操作会再次被阻止,除非您授予的是持续性批准。如果不想逐个操作地批准某种常规模式,请将其添加到 [`autoMode.allow`](/docs/zh-CN/auto-mode-config#override-the-block-and-allow-rules)。

478* **某些阻止保持有效**:[分类器的优先级顺序](/docs/zh-CN/auto-mode-config#override-the-block-and-allow-rules)列出您的批准可以到达的阻止。要运行它不会清除的步骤,请[离开自动模式](#switch-permission-modes)并回答权限提示。483* **有些阻止会保持不变**:[分类器的优先级顺序](/docs/zh-CN/auto-mode-config#override-the-block-and-allow-rules)规定了您的批准可以解除哪些阻止。要运行它不会解除阻止的步骤,请[退出自动模式](#switch-permission-modes)并回应权限提示。

479 484 

480<h3 id="when-auto-mode-falls-back">485<h3 id="when-auto-mode-falls-back">

481 当自动模式回退时486 自动模式回退时

482</h3>487</h3>

483 488 

484当自动模式无法批准您的会话操作时,发生的情况取决于情况:489当自动模式无法批准您会话中的操作时,具体情况取决于以下场景:

485 490 

486* **被阻止的操作**:Claude Code 显示通知并在 `/permissions` 下的**最近拒绝**选项卡中列出操作,您可以按 `r` 使用手动批准重试它。491* **操作被阻止**:Claude Code 会显示通知,并在 `/permissions` 的 **Recently denied** 选项卡下列出该操作,您可以在那里按 `r` 以手动批准的方式重试。

487* **重复阻止**:如果分类器连续阻止操作 3 次或总共 20 次,自动模式暂停,Claude Code 恢复提示。批准提示的操作恢复自动模式。有关如何计数阻止的信息,请参阅[重复阻止阈值](#repeated-block-thresholds)。492* **反复阻止**:如果分类器连续 3 次或累计 20 次阻止操作,自动模式会暂停,Claude Code 会恢复提示。批准被提示的操作后会恢复自动模式。有关阻止次数的计算方式,请参阅[反复阻止阈值](#repeated-block-thresholds)。

488* **分类器无判决**:当与自动模式分离的安全检查拒绝分类器自己的请求或分类器的响应不解析时,Claude Code 拒绝操作而不显示通知或**最近拒绝**条目。有关每种情况显示的消息和处理方法,请参阅[自动模式无法确定操作的安全性](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。493* **分类器未给出裁决**:当独立于自动模式的安全检查拒绝了分类器自身的请求,或分类器的响应无法解析时,Claude Code 会拒绝该操作,且不显示通知,也不会添加 **Recently denied** 条目。有关每种情况显示的消息及处理方法,请参阅[自动模式无法确定操作的安全性](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。

489* **服务器无判决**:在[服务器端分类器审查](#server-side-classifier-review)下,Claude Code 拒绝服务器给不出判决的操作,并在连续十个响应都没有判决后停止轮次。请参阅[服务器未返回安全判决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)。494* **服务器未给出裁决**:在[服务器端分类器审查](#server-side-classifier-review)下,Claude Code 会拒绝服务器未给出裁决的操作,并在连续十个响应均无裁决后停止当前轮次。请参阅[服务器未返回安全裁决](/docs/zh-CN/errors#the-server-returned-no-safety-verdict)。

490* **检查期间的模式切换**:如果您在分类器检查待处理时切换权限模式,Claude Code 丢弃新模式不会请求的判决。您改为被提示批准,或在 [`dontAsk` 模式](#allow-only-pre-approved-tools-with-dontask-mode)中操作被自动拒绝。495* **检查期间切换模式**:如果您在分类器检查尚未完成时切换权限模式,Claude Code 会丢弃新模式本不会请求的裁决。此时会改为提示您批准,或者在 [`dontAsk` 模式](#allow-only-pre-approved-tools-with-dontask-mode)下自动拒绝该操作。

491 496 

492<h4 id="repeated-block-thresholds">497<h4 id="repeated-block-thresholds">

493 重复阻止阈值498 反复阻止阈值

494</h4>499</h4>

495 500 

4963 个连续阻止和 20 个总阻止的阈值不可配置。总计数器对会话持续并仅在其自己的限制触发回退时重置。当与自动模式分离的安全检查拒绝分类器自己的请求时,Claude Code 不计数拒绝到任一阈值。501连续 3 次阻止和累计 20 次阻止的阈值不可配置。累计计数器在整个会话期间持续存在,仅当其自身的限制触发回退时才会重置。当独立于自动模式的安全检查拒绝了分类器自身的请求时,Claude Code 不会将该拒绝计入任一阈值。

497 502 

498没有 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 的[非交互式](/docs/zh-CN/headless) `-p` 运行没有回退提示。当重复阻止到达阈值时,操作不运行,Claude 继续工作。Claude Code 不停止运行。503未使用 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 的[非交互式](/docs/zh-CN/headless) `-p` 运行没有可回退的提示。当反复阻止达到阈值时,该操作不会运行,Claude 会继续工作。Claude Code 不会停止该运行。

499 504 

500重复阻止通常意味着分类器缺少关于您的基础设施的上下文。使用 `/feedback` 报告假阳性,或让管理员[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。505反复阻止通常意味着分类器缺少有关您基础设施的上下文。请使用 `/feedback` 报告误报,或请管理员[配置受信任的基础设施](/docs/zh-CN/auto-mode-config)。

501 506 

502<h3 id="how-auto-mode-evaluates-actions">507<h3 id="how-auto-mode-evaluates-actions">

503 自动模式如何评估操作508 自动模式如何评估操作

504</h3>509</h3>

505 510 

506以下部分涵盖 Claude Code 评估操作的顺序、分类器如何审查子代理工作以及分类器调用在成本和延迟中添加的内容。511以下各节介绍 Claude Code 评估操作的顺序、分类器如何审查子代理的工作,以及分类器调用在成本和延迟方面带来的额外开销。

507 512 

508<span id="how-the-classifier-evaluates-actions" />513<span id="how-the-classifier-evaluates-actions" />

509 514 

510<AccordionGroup>515<AccordionGroup>

511 <Accordion title="自动模式如何评估操作">516 <Accordion title="分类器如何评估操作">

512 每个操作都经过固定的决策顺序。第一个匹配的步骤获胜:517 每个操作都会经过固定的决策顺序。第一个匹配的步骤生效:

518 

519 1. 与您的 [allow、ask 或 deny 规则](/docs/zh-CN/permissions#manage-permissions)匹配的操作会立即得到处理,但以下情况除外:

520 * 对[受保护路径](#protected-paths)的写入即使匹配了 allow 规则,也会交由分类器处理

521 * 任何 allow 规则都不会批准针对[关键路径](#critical-paths)的 `rm` 和 `rmdir` 删除操作

522 * 标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具即使匹配了 allow 规则,也会直接提示您;在[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具上也是如此(在该设置传达到 Claude Code 的会话中)

523 * 携带[按命令允许的域名](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)的 shell 命令即使匹配了 allow 规则,也会交由分类器处理,因为规则批准的是命令,而不是其主机

524 * 基于命令内容进行匹配的 ask 规则(例如 `Bash(git push *)`)会回退为权限提示

525 * 当 Claude 请求的路径本身不受保护,但[符号链接检查](/docs/zh-CN/permissions#symlinks)将写入解析到受保护路径时,会提示您

526 2. 工作目录中的只读操作和文件编辑会被自动批准,但对[受保护路径](#protected-paths)的写入以及[首次读取工作目录之外的内容](#first-read-outside-the-working-directories)除外,后者会提示您

527 * 在启用了[服务器端分类器审查](#server-side-classifier-review)的会话中,只读和[沙箱化](/docs/zh-CN/sandboxing#sandbox-modes)的 shell 命令会等待该审查,如果审查标记了它们,则会被阻止

528 * 当[符号链接检查](/docs/zh-CN/permissions#symlinks)将工作目录内的写入解析到工作目录之外的位置时,会提示您

529 * 当 Claude 读取[他人制作的 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you) 时,适用该部分列出的批准情况

530 3. 其他所有操作都会交给分类器处理,按默认方式处理的[关键路径删除](#critical-paths)除外。在第 1 步中直接提示您的连接器工具和 `requiresUserInteraction` MCP 工具也永远不会到达分类器,因此组织要求的批准和同意步骤都不会被自动批准

531 4. 如果分类器阻止了操作,Claude 会收到原因。在大多数会话中,原因会指明分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[查看拒绝记录](/docs/zh-CN/auto-mode-config#review-denials)

532 

533 您安装的处理 `tool.check` 的 [mod](/docs/zh-CN/plugins/mods/overview) 可以在第 3 步之前批准操作,分类器不会检查 mod 所批准的操作。请参阅[使用 hook 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)。

513 534 

514 1. 与您的[允许、询问或拒绝规则](/docs/zh-CN/permissions#manage-permissions)匹配的操作立即解决,但有以下例外:535 在 VS Code 扩展中,[Claude in Chrome](/docs/zh-CN/chrome) 浏览器操作如何获得批准取决于会话连接到浏览器的方式:请参阅 [VS Code 会话中的权限提示](/docs/zh-CN/chrome#permission-prompts-in-vs-code-sessions)。

515 * 写入[受保护路径](#protected-paths)的操作路由到分类器,即使允许规则匹配

516 * 没有允许规则批准针对[关键路径](#critical-paths)的 `rm` 和 `rmdir` 删除

517 * 标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具直接提示您,即使允许规则匹配,连接器工具您的组织在会话中设置为 `ask` 的[组织控制](/docs/zh-CN/mcp#organization-controls-on-connector-tools)也是如此,其中该设置到达 Claude Code

518 * 携带[每个命令允许的域](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)的 shell 命令也路由到分类器,即使允许规则匹配,因为规则批准命令,而不是其主机

519 * 在命令内容上匹配的询问规则,例如 `Bash(git push *)`,回退到权限提示

520 * [符号链接检查](/docs/zh-CN/permissions#symlinks)解决为受保护路径的写入在 Claude 请求的路径本身不受保护时提示您

521 2. 只读操作和您工作目录中的文件编辑被自动批准,除了写入[受保护路径](#protected-paths)和[工作目录外的第一次读取](#first-read-outside-the-working-directories),这会提示您

522 * 在具有[服务器端分类器审查](#server-side-classifier-review)的会话中,只读和[沙箱](/docs/zh-CN/sandboxing#sandbox-modes) shell 命令等待该审查,如果它标记它们则被阻止

523 * 您工作目录内的写入,[符号链接检查](/docs/zh-CN/permissions#symlinks)解决为其外的位置,提示您

524 3. 其他所有内容都进入分类器,除了[关键路径删除](#critical-paths)在其默认处理下。在步骤 1 中直接提示您的连接器工具和 `requiresUserInteraction` MCP 工具永远不会到达分类器,因此既不是组织要求的批准也不是同意步骤被自动批准

525 4. 如果分类器阻止,Claude 接收原因。在大多数会话中,原因命名分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[审查拒绝](/docs/zh-CN/auto-mode-config#review-denials)

526 536 

527 进入自动模式时,授予任意代码执行的广泛允许规则被丢弃:537 进入自动模式时,授予任意代码执行能力的宽泛 allow 规则会被丢弃:

528 538 

529 * 空白 `Bash(*)` 或 `PowerShell(*)`539 * 通配的 `Bash(*)` 或 `PowerShell(*)`

530 * 通配符解释器,如 `Bash(python*)`540 * 带通配符的解释器,例如 `Bash(python*)`

531 * 包管理器运行命令541 * 包管理器的 run 命令

532 * `Agent` 允许规则542 * `Agent` allow 规则

533 * [`Monitor`](/docs/zh-CN/tools-reference#monitor-tool)允许规则,因为 Claude Code 通过 shell 运行 Monitor 命令543 * [`Monitor`](/docs/zh-CN/tools-reference#monitor-tool) allow 规则,因为 Claude Code 通过 shell 运行 Monitor 命令

534 544 

535 狭窄的规则,如 `Bash(npm test)` 保持有效。Claude Code 在您离开自动模式时恢复丢弃的规则。在 v2.1.236 之前,Claude Code 在自动模式中保持 `Monitor` 允许规则有效,因此与整个工具匹配的规则批准 Monitor 命令而不进行分类器审查。545 像 `Bash(npm test)` 这样的窄范围规则会保持有效。当您退出自动模式时,Claude Code 会恢复被丢弃的规则。在 v2.1.236 之前,Claude Code 在自动模式下保留了 `Monitor` allow 规则,因此匹配整个工具的规则会在没有分类器审查的情况下批准 Monitor 命令。

536 546 

537 Claude Code 也在会丢弃未提交工作的命令之前运行 `git status`,例如 `git reset --hard` 或 `rm -rf`,并向分类器显示是否存在暂存、修改或未跟踪的工作。Claude Code 在该检查中报告未跟踪的文件,即使仓库的 git 配置设置 `status.showUntrackedFiles=no`。547 在执行会丢弃未提交工作的命令(例如 `git reset --hard` 或 `rm -rf`)之前,Claude Code 还会自行运行 `git status`,并向分类器显示是否存在已暂存、已修改或未跟踪的工作。即使仓库的 git 配置设置了 `status.showUntrackedFiles=no`,Claude Code 也会在该检查中报告未跟踪的文件。

538 548 

539 在 Claude Code 本身发送的分类器请求中,分类器看到用户消息、除只读查找(如文件读取和搜索)之外的工具调用以及您的 CLAUDE.md 内容。工具结果从这些请求中被剥离,因此文件或网页中的恶意内容无法直接操纵分类器。549 在 Claude Code 自身发送的分类器请求中,分类器可以看到用户消息、除只读查询(例如文件读取和搜索)以外的工具调用,以及您的 CLAUDE.md 内容。工具结果会从这些请求中剥离,因此文件或网页中的恶意内容无法直接操纵分类器。

540 550 

541 您可以使用 [PostToolUse hook 的 `classifierContext` 字段](/docs/zh-CN/hooks#annotate-a-result-for-the-auto-mode-classifier)注释调用的结果,分类器将其读取为应用程序提供的上下文。该字段需要 Claude Code v2.1.236 或更高版本。551 您可以使用 [PostToolUse hook 的 `classifierContext` 字段](/docs/zh-CN/hooks#annotate-a-result-for-the-auto-mode-classifier)为调用结果添加注释,分类器会将其作为应用提供的上下文读取。该字段需要 Claude Code v2.1.236 或更高版本。

542 552 

543 单独的服务器端探针扫描传入的工具结果并在 Claude 读取之前标记可疑内容。有关这些层如何协同工作的更多信息,请参阅[自动模式公告](https://claude.com/blog/auto-mode)和[工程深度潜水](https://www.anthropic.com/engineering/claude-code-auto-mode)。553 一个独立的服务器端探测器会扫描传入的工具结果,并在 Claude 读取之前标记可疑内容。有关这些层如何协同工作的更多信息,请参阅[自动模式公告](https://claude.com/blog/auto-mode)和[工程深度解析](https://www.anthropic.com/engineering/claude-code-auto-mode)。

544 </Accordion>554 </Accordion>

545 555 

546 <Accordion title="自动模式如何处理子代理">556 <Accordion title="自动模式如何处理子代理">

547 分类器在三个点检查[子代理](/docs/zh-CN/sub-agents)工作:557 分类器会在三个时间点检查[子代理](/docs/zh-CN/sub-agents)的工作:

548 558 

549 1. 在子代理启动之前,委托的任务描述被评估,因此看起来危险的任务在生成时被阻止。559 1. 在子代理启动之前,会评估委派的任务描述,因此看起来危险的任务会在生成时被阻止。

550 2. 当子代理运行时,其每个操作都经过与父会话相同的[决策顺序](#how-the-classifier-evaluates-actions),具有相同的阻止和允许规则。子代理的 frontmatter 中的任何 `permissionMode` 都被忽略。560 2. 在子代理运行期间,它的每个操作都会经过与父会话相同的[决策顺序](#how-the-classifier-evaluates-actions),并使用相同的阻止和允许规则。子代理 frontmatter 中的任何 `permissionMode` 都会被忽略。

551 3. 当子代理完成时,分类器审查其工作和最终报告,然后父会话读取报告。当分类器标记子代理的工作或报告,或单独的 API 安全检查拒绝审查时,报告仍被传递,前面带有安全警告。当分类器对审查不可用时,报告到达时带有注意在根据其采取行动之前验证子代理工作的注意。561 3. 当子代理完成时,分类器会在父级读取报告之前审查其工作和最终报告。当分类器标记了子代理的工作或报告,或者独立的 API 安全检查拒绝了该审查时,报告仍会被送达,但会在前面附加安全警告。当分类器无法进行审查时,报告送达时会附带一条说明,提醒您在据此采取行动之前先核实子代理的工作。

552 </Accordion>562 </Accordion>

553 563 

554 <Accordion title="成本和延迟">564 <Accordion title="成本和延迟">

555 分类器默认在 Claude Sonnet 5 上运行,而不是在您的 `/model` 选择上。Anthropic 配置的服务器端分类器模型优先于该默认值。当您的会话模型是 Claude Sonnet 4.6 或当 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 排除 Sonnet 5 时,分类器改为在会话的模型上运行,或在会话在[Fable 模型](/docs/zh-CN/model-config#work-with-fable)上运行时在 Opus 模型上运行;在 Anthropic API 以外的提供商上,该 Opus 回退是提供商的默认 Opus 模型。565 分类器默认在 Claude Sonnet 5 上运行,而不是在您通过 `/model` 选择的模型上运行。Anthropic 在服务器端配置的分类器模型优先于该默认值。当您会话的模型是 Claude Sonnet 4.6,或者 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 排除了 Sonnet 5 时,分类器会改为在会话的模型上运行;当会话在 [Fable 模型](/docs/zh-CN/model-config#work-with-fable)上运行时,则在 Opus 模型上运行。在 Anthropic API 以外的提供商上,该备用 Opus 模型是您在 [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/zh-CN/model-config#environment-variables) 中设置的模型,如果您未设置,则为 Opus 5。

556 566 

557 会话的第一个自动模式请求验证 Sonnet 5 默认值:如果请求成功,Sonnet 5 保持会话的分类器模型,如果它因模型不可用而失败,会话改为使用回退。567 会话的第一个自动模式请求会验证 Sonnet 5 默认值:如果请求成功,Sonnet 5 将保持为该会话的分类器模型;如果因模型不可用而失败,该会话将改用备用模型。

558 568 

559 在 Enterprise 计划和使用 Claude API 的账户、[AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)、Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上,分类器调用计入您的令牌使用。每次检查发送记录的一部分加上待处理操作,在执行前添加往返。读取和工作目录编辑在受保护路径外跳过分类器,因此开销主要来自 shell 命令和网络操作。服务器审查操作作为会话模型请求的一部分的地方,没有单独的分类器调用计数;请参阅[服务器端分类器审查](#server-side-classifier-review)。569 在 Enterprise 计划以及使用 Claude API、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)、Amazon Bedrock、Google Cloud's Agent Platform 或 Microsoft Foundry 的账户上,分类器调用会计入您的 token 用量。每次检查都会发送部分会话记录以及待执行的操作,从而在执行前增加一次往返。受保护路径之外的读取和工作目录编辑会跳过分类器,因此开销主要来自 shell 命令和网络操作。当服务器在会话的模型请求中审查操作时,不存在需要计算的单独分类器调用;请参阅[服务器端分类器审查](#server-side-classifier-review)。

560 570 

561 沙箱网络访问不添加每个连接分类器请求。分类器在一次审查中与命令一起判断[命令命名的主机](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode),Claude Code 根据批准的列表检查每个连接而不再次调用分类器。571 沙箱化的网络访问不会为每个连接增加分类器请求。分类器会在一次审查中将[命令所指明的主机](/docs/zh-CN/sandboxing#per-command-allowed-domains-in-auto-mode)与命令一起判断,Claude Code 会根据获批的列表检查每个连接,而无需再次调用分类器。

562 </Accordion>572 </Accordion>

563</AccordionGroup>573</AccordionGroup>

564 574 


586 596 

587`bypassPermissions` 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对[受保护路径](#protected-paths)的写入。597`bypassPermissions` 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对[受保护路径](#protected-paths)的写入。

588 598 

589[任何模式都不会自动批准的操作](#actions-no-mode-auto-approves)在此模式下仍会提示。[PowerShell 中的 Remove-Item](#remove-item-in-powershell) 拒绝也适用于此模式。599[任何模式都不会自动批准的操作](#actions-no-mode-auto-approves)在此模式下仍会提示。读取[其他组织的公开 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you) 需要您的批准,而此模式不会请求批准,因此 Claude 无法读取此类 Artifact。[PowerShell 中的 Remove-Item](#remove-item-in-powershell) 拒绝也适用于此模式。

590 600 

591两个[跨会话消息传递](/docs/zh-CN/cross-session-messaging)保护措施在此模式下仍然适用,以及在具有可用绕过权限的交互式终端 Plan Mode 会话中:601两个[跨会话消息传递](/docs/zh-CN/cross-session-messaging)保护措施在此模式下仍然适用,在可使用绕过权限的交互式终端计划模式会话中同样适用:

592 602 

593* [`isolatePeerMachines`](/docs/zh-CN/settings-reference#isolatepeermachines)批准提示用于发送到超出此机器的会话的消息仍然出现。603* 针对发送到此机器之外的您的会话的消息,[`isolatePeerMachines`](/docs/zh-CN/settings-reference#isolatepeermachines) 批准提示仍会出现。

594* 当没有[`crossSessionInbound`](/docs/zh-CN/cross-session-messaging#control-inbound-messages)值适用时,Claude Code 会从您的另一个会话中的入站消息保留以供您批准,仅当发送会话将自己标识为也绕过权限提示时才无需询问即可传递。如果您在保留消息时离开权限模式,Claude Code 会重新应用入站规则,并传递任何现在接受的保留消息。604* 当没有 [`crossSessionInbound`](/docs/zh-CN/cross-session-messaging#control-inbound-messages) 值适用时,Claude Code 会保留来自您另一个会话的入站消息以供您批准,仅当发送会话将自己标识为同样绕过权限提示时才无需询问即可传递。如果您在消息被保留期间离开该权限模式,Claude Code 会重新应用入站规则,并传递现在被接受的任何保留消息。

595 605 

596在具有可用绕过权限的交互式终端会话中,Claude Code 也不强制执行 [Plan Mode 的](#analyze-before-you-edit-with-plan-mode)块。Claude 仍然被指示在不编辑的情况下进行计划,但它在计划期间尝试的文件编辑或 shell 命令无需提示即可运行。显式[询问规则](/docs/zh-CN/permissions#manage-permissions)和针对[关键路径](#critical-paths)的 `rm` 和 `rmdir` 删除仍会提示。606在可使用绕过权限的交互式终端会话中,Claude Code 也不强制执行[计划模式的](#analyze-before-you-edit-with-plan-mode)阻止。Claude 仍然被指示在不编辑的情况下进行计划,但它在计划期间尝试的文件编辑或 shell 命令无需提示即可运行。显式[询问规则](/docs/zh-CN/permissions#manage-permissions)和针对[关键路径](#critical-paths)的 `rm` 和 `rmdir` 删除仍会提示。

597 607 

598Plan Mode 在 Claude Code 运行时没有交互式终端的任何地方都保持其块,包括[非交互式运行](/docs/zh-CN/headless)(带 `-p`)、[Agent SDK](/docs/zh-CN/agent-sdk/permissions#plan-mode-plan) 会话和 [VS Code 扩展](/docs/zh-CN/vs-code)的聊天面板中的对话。在那里,`--allow-dangerously-skip-permissions` 使 `bypassPermissions` 稍后可选。608在 Claude Code 没有交互式终端运行的任何地方,计划模式都会保留其阻止,包括[非交互式运行](/docs/zh-CN/headless)(带 `-p`)、[Agent SDK](/docs/zh-CN/agent-sdk/permissions#plan-mode-plan) 会话和 [VS Code 扩展](/docs/zh-CN/vs-code)的聊天面板中的对话。在这些环境中,`--allow-dangerously-skip-permissions` 使 `bypassPermissions` 稍后可选。

599 609 

600<Warning>610<Warning>

601 仅在隔离环境(如容器、虚拟机或没有互联网访问的开发容器)中使用此模式,其中 Claude Code 无法损害您的主机系统。611 仅在隔离环境(如容器、虚拟机或没有互联网访问的开发容器)中使用此模式,其中 Claude Code 无法损害您的主机系统。

602</Warning>612</Warning>

603 613 

604您无法从未启用此模式的会话进入 `bypassPermissions`。在启动时使用[`permissions.defaultMode: "bypassPermissions"`](/docs/zh-CN/settings-reference#permissions-defaultmode)或使用启用标志启用它:614您无法从未启用此模式的会话进入 `bypassPermissions`。在启动时使用 [`permissions.defaultMode: "bypassPermissions"`](/docs/zh-CN/settings-reference#permissions-defaultmode) 或使用启用标志启用它:

605 615 

606```bash theme={null}616```bash theme={null}

607claude --permission-mode bypassPermissions617claude --permission-mode bypassPermissions


609 619 

610`--dangerously-skip-permissions` 标志是等效的。620`--dangerously-skip-permissions` 标志是等效的。

611 621 

612Claude Code 在您使用[`--restricted`](/docs/zh-CN/cli-reference#cli-flags)启动的会话中拒绝 `bypassPermissions`。`--restricted` 需要 Claude Code v2.1.248 或更高版本。622Claude Code 在您使用 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 启动的会话中拒绝 `bypassPermissions`。`--restricted` 需要 Claude Code v2.1.248 或更高版本。

613 623 

614第一次使用此模式启动交互式会话时,Claude Code 会显示一个警告对话框,要求您接受对在没有权限检查的情况下执行的操作的责任:624第一次使用此模式启动交互式会话时,Claude Code 会显示一个警告对话框,要求您接受对在没有权限检查的情况下执行的操作的责任:

615 625 


626 636 

627在识别的沙箱内自动跳过检查。要在容器中自主运行,请使用[开发容器](/docs/zh-CN/devcontainer)配置,该配置以非 root 用户身份运行 Claude Code。637在识别的沙箱内自动跳过检查。要在容器中自主运行,请使用[开发容器](/docs/zh-CN/devcontainer)配置,该配置以非 root 用户身份运行 Claude Code。

628 638 

629[网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web)不遵守来自您的设置文件的 `defaultMode: "bypassPermissions"` 或 `"dontAsk"`,因此存储库的签入设置无法在绕过权限模式下启动云会话。该设置被静默忽略,会话改为以模式下拉菜单中显示的权限模式启动。有关云会话提供的模式,请参阅[切换权限模式](#switch-permission-modes)。639[云端会话](/docs/zh-CN/claude-code-on-the-web)不遵守来自您的设置文件的 `defaultMode: "bypassPermissions"` 或 `"dontAsk"`,因此仓库中签入的设置无法以绕过权限模式启动云端会话。该设置会被静默忽略,会话改为以模式下拉菜单中显示的权限模式启动。有关云端会话提供哪些模式,请参阅[切换权限模式](#switch-permission-modes)。

630 640 

631<Warning>641<Warning>

632 `bypassPermissions` 不提供针对提示注入或意外操作的保护。对于权限提示少得多的后台安全检查,请改用[自动模式](#eliminate-prompts-with-auto-mode)。管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来阻止此模式。642 `bypassPermissions` 不提供针对提示词注入或意外操作的保护。对于权限提示少得多的后台安全检查,请改用[自动模式](#eliminate-prompts-with-auto-mode)。管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来阻止此模式。

633</Warning>643</Warning>

634 644 

635<h2 id="protected-paths">645<h2 id="protected-paths">


667* `.yarn`677* `.yarn`

668* `.mvn`678* `.mvn`

669* `.claude`,除了 `.claude/worktrees`,Claude 在其中存储自己的 git worktrees679* `.claude`,除了 `.claude/worktrees`,Claude 在其中存储自己的 git worktrees

680* 使用 [`--plugin-dir`](/docs/zh-CN/plugins/mods/create#change-a-mod-with-claude) 加载的目录,因为当文件发生更改时,Claude Code 会从该目录重新加载并运行 mod 的代码

670 681 

671受保护的文件:682受保护的文件:

672 683 

permissions.md +26 −15

Details

22| Web 获取 | WebFetch | 是,除了内置的[预批准文档域](/docs/zh-CN/tools-reference#webfetch-tool-behavior)集合 | 每个项目目录和域永久有效 |22| Web 获取 | WebFetch | 是,除了内置的[预批准文档域](/docs/zh-CN/tools-reference#webfetch-tool-behavior)集合 | 每个项目目录和域永久有效 |

23| Web 搜索 | WebSearch | 是 | 每个项目目录永久有效 |23| Web 搜索 | WebSearch | 是 | 每个项目目录永久有效 |

24 24 

25权限提示会显示 Claude 即将执行的操作,然后列出您的选项。以下示例是手动模式会话中 Bash 命令的提示:

26 

27<Frame>

28 <img src="https://mintcdn.com/claude-code/oa7CKjMeIChox26S/images/permission-prompt-bash-light.png?fit=max&auto=format&n=oa7CKjMeIChox26S&q=85&s=87585d008a29304873466399f7b476f6" className="dark:hidden" alt="一个标题为 Bash command 的 Claude Code 权限提示。在一条关于自动模式的提示下方,它显示了描述&#x22;Run the test suite&#x22;、命令 npm test 以及&#x22;This command requires approval&#x22;这一行,然后询问&#x22;Do you want to proceed?&#x22;并提供四个选项:Yes;Yes, and don't ask again for: npm test *;Yes, and switch to auto mode;以及 No。页脚列出了两个按键:Esc 用于取消,Tab 用于修改。" width="1512" height="680" data-path="images/permission-prompt-bash-light.png" />

29 

30 <img src="https://mintcdn.com/claude-code/oa7CKjMeIChox26S/images/permission-prompt-bash-dark.png?fit=max&auto=format&n=oa7CKjMeIChox26S&q=85&s=dd25688056898df1d1e4f1b5542bc978" className="hidden dark:block" alt="一个标题为 Bash command 的 Claude Code 权限提示。在一条关于自动模式的提示下方,它显示了描述&#x22;Run the test suite&#x22;、命令 npm test 以及&#x22;This command requires approval&#x22;这一行,然后询问&#x22;Do you want to proceed?&#x22;并提供四个选项:Yes;Yes, and don't ask again for: npm test *;Yes, and switch to auto mode;以及 No。页脚列出了两个按键:Esc 用于取消,Tab 用于修改。" width="1512" height="680" data-path="images/permission-prompt-bash-dark.png" />

31</Frame>

32 

33第三个选项 **是,并切换到自动模式**,[并非在每个提示中都会出现](/docs/zh-CN/permission-modes#switch-permission-modes)。

34 

25当您选择"是,不再询问"且批准永久保存时(例如对于 Bash 命令或 WebFetch 域),Claude Code 会将规则保存到 git 项目根目录的 `.claude/settings.local.json`,通过[工作树](/docs/zh-CN/worktrees)解析到主检出。该规则适用于该项目中的未来会话,包括在子目录和工作树中启动的会话。文件修改批准不会保存到文件中:如表所示,它仅持续到会话结束。在某些情况下,例如在 git 项目外或在 Windows 上,Claude Code 不使用项目根目录;[Claude Code 查找每个文件的位置](/docs/zh-CN/settings#where-claude-code-looks-for-each-file)列出了这些情况以及它保存规则的位置。35当您选择"是,不再询问"且批准永久保存时(例如对于 Bash 命令或 WebFetch 域),Claude Code 会将规则保存到 git 项目根目录的 `.claude/settings.local.json`,通过[工作树](/docs/zh-CN/worktrees)解析到主检出。该规则适用于该项目中的未来会话,包括在子目录和工作树中启动的会话。文件修改批准不会保存到文件中:如表所示,它仅持续到会话结束。在某些情况下,例如在 git 项目外或在 Windows 上,Claude Code 不使用项目根目录;[Claude Code 查找每个文件的位置](/docs/zh-CN/settings#where-claude-code-looks-for-each-file)列出了这些情况以及它保存规则的位置。

26 36 

27在 v2.1.211 之前,Claude Code 总是在启动目录中保存规则,因此在工作树或子目录中授予的批准不适用于项目的其余部分。早期版本在子目录或工作树中保存的规则仍然适用于在那里启动的会话。37在 v2.1.211 之前,Claude Code 总是在启动目录中保存规则,因此在工作树或子目录中授予的批准不适用于项目的其余部分。早期版本在子目录或工作树中保存的规则仍然适用于在那里启动的会话。


244 254 

245当 `&&` 或 `||` 后面没有任何内容时,例如在 `npm test &&` 中,Claude Code 将命令视为无法解析,不会将其分割为子命令以进行 allow 规则匹配,因此像 `Bash(npm *)` 这样的规则不会批准它。255当 `&&` 或 `||` 后面没有任何内容时,例如在 `npm test &&` 中,Claude Code 将命令视为无法解析,不会将其分割为子命令以进行 allow 规则匹配,因此像 `Bash(npm *)` 这样的规则不会批准它。

246 256 

247当您使用"是,不再询问"批准复合命令时,Claude Code 会为需要批准的每个子命令保存一个单独的规则,而不是为完整的复合字符串保存单个规则。例如,批准 `git status && npm test` 会为 `npm test` 保存一个规则,因此将来的 `npm test` 调用被识别,无论 `&&` 前面是什么。诸如 `cd` 进入子目录之类的子命令会为该路径生成自己的 Read 规则。单个复合命令最多可能保存 5 个规则。257当您使用"是,不再询问"批准复合命令时,Claude Code 会为需要批准的每个子命令保存一个单独的规则,而不是为完整的复合字符串保存单个规则。例如,批准 `git status && npm test` 会为 `npm test` 保存一个规则,因此将来的 `npm test` 调用被识别,无论 `&&` 前面是什么。诸如 `cd` 进入工作目录之外的目录之类的子命令会为该路径生成自己的 Read 规则。单个复合命令最多可能保存 5 个规则。

248 258 

249<h4 id="process-wrappers">259<h4 id="process-wrappers">

250 包装器260 包装器


280 只读命令290 只读命令

281</h4>291</h4>

282 292 

283Claude 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)。293Claude 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)。

284 294 

285像 `ls > out.txt` 这样的重定向会在目标上添加检查。请参阅[重定向](#redirections)。295像 `ls > out.txt` 这样的重定向会在目标上添加检查。请参阅[重定向](#redirections)。

286 296 


292* **`docker` 指向另一个守护程序**:当命令携带选择不同守护程序的标志时,`docker` 的只读形式提示,如 `-H`、`--context` 或 Podman 的 `--url` 和 `--connection`。302* **`docker` 指向另一个守护程序**:当命令携带选择不同守护程序的标志时,`docker` 的只读形式提示,如 `-H`、`--context` 或 Podman 的 `--url` 和 `--connection`。

293* **`file` 带有路径打开标志**:当 `file` 传递 `-m`/`--magic-file` 或 `-f`/`--files-from` 时,`file` 提示,因为这些标志使 `file` 打开标志值中命名的路径。303* **`file` 带有路径打开标志**:当 `file` 传递 `-m`/`--magic-file` 或 `-f`/`--files-from` 时,`file` 提示,因为这些标志使 `file` 打开标志值中命名的路径。

294* **Windows 上的网络路径**:其参数包括网络 (UNC) 路径的命令,如 `\\server\share\file`,提示是因为访问网络路径可能会将您的 Windows 凭据发送到它命名的主机。同样的检查适用于[PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool)命令。304* **Windows 上的网络路径**:其参数包括网络 (UNC) 路径的命令,如 `\\server\share\file`,提示是因为访问网络路径可能会将您的 Windows 凭据发送到它命名的主机。同样的检查适用于[PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool)命令。

305* **写入特殊 shell 变量**:设置、取消设置或遍历某些特殊 shell 变量(如 `PATH` 或 `IFS`)的命令会提示,即使命令的其余部分是只读的。

295* **分析无法解析的命令**:当 Claude Code 无法完全解析命令时,它会要求批准而不是将命令视为只读。超过 10,000 个字符的命令总是提示,因为它们超过了分析解析的内容。306* **分析无法解析的命令**:当 Claude Code 无法完全解析命令时,它会要求批准而不是将命令视为只读。超过 10,000 个字符的命令总是提示,因为它们超过了分析解析的内容。

296 307 

297进入工作目录内或[其他目录](#working-directories)内的路径的 `cd` 也是只读的,像 `cd packages/api && ls` 这样的复合命令在每个部分都符合条件时无需提示即可运行。即使每个部分都是只读的,这些组合也会提示:308进入工作目录内或[其他目录](#working-directories)内的路径的 `cd` 也是只读的,像 `cd packages/api && ls` 这样的复合命令在每个部分都符合条件时无需提示即可运行。即使每个部分都是只读的,这些组合也会提示:


310 为了更可靠的 URL 过滤,请考虑:321 为了更可靠的 URL 过滤,请考虑:

311 322 

312 * **限制 Bash 网络工具**:使用 deny 规则阻止 `curl`、`wget` 和类似命令,然后对允许的域使用带有 `WebFetch(domain:github.com)` 权限的 WebFetch 工具。Deny 规则不匹配按路径调用的同一程序或在 `sh -c` 内部调用的程序,因此当限制必须成立时,将其与[沙箱网络允许列表](/docs/zh-CN/sandboxing#network-isolation)配对;请参阅[Bash 规则不匹配的内容](#bash-rule-limits)323 * **限制 Bash 网络工具**:使用 deny 规则阻止 `curl`、`wget` 和类似命令,然后对允许的域使用带有 `WebFetch(domain:github.com)` 权限的 WebFetch 工具。Deny 规则不匹配按路径调用的同一程序或在 `sh -c` 内部调用的程序,因此当限制必须成立时,将其与[沙箱网络允许列表](/docs/zh-CN/sandboxing#network-isolation)配对;请参阅[Bash 规则不匹配的内容](#bash-rule-limits)

313 * **使用 PreToolUse hooks**:实现一个 hook 来验证 Bash 命令中的 URL 并阻止不允许的域324 * **使用 PreToolUse hook**:实现一个 hook 来验证 Bash 命令中的 URL 并阻止不允许的域

314 * **添加 CLAUDE.md 指导**:在 `CLAUDE.md` 中描述您允许的 curl 模式。这会影响 Claude 尝试的内容,但不会强制执行边界,因此请将其与上述选项之一配对325 * **添加 CLAUDE.md 指导**:在 `CLAUDE.md` 中描述您允许的 curl 模式。这会影响 Claude 尝试的内容,但不会强制执行边界,因此请将其与上述选项之一配对

315 326 

316 请注意,仅使用 WebFetch 不会阻止网络访问。如果允许 Bash,Claude 仍然可以使用 `curl`、`wget` 或其他工具来访问任何 URL。327 请注意,仅使用 WebFetch 不会阻止网络访问。如果允许 Bash,Claude 仍然可以使用 `curl`、`wget` 或其他工具来访问任何 URL。


357 Read 和 Edit368 Read 和 Edit

358</h3>369</h3>

359 370 

360要阻止 Claude 的文件工具读取文件或目录,请为其路径添加 `Read` deny 规则,如 `Read(./.env)` 或 `Read(./secrets/**)`;[排除敏感文件](/docs/zh-CN/settings-reference#exclude-sensitive-files)有一个粘贴就用的示例。371要阻止 Claude 的文件工具读取文件或目录,请为其路径添加 `Read` deny 规则,如 `Read(./.env)` 或 `Read(./secrets/**)`;[排除敏感文件](/docs/zh-CN/settings-reference#exclude-sensitive-files)有一个粘贴就用的示例。如果您的项目有 `.claudeignore` 文件,它不会产生任何效果,因此请将其条目移到 `Read` deny 规则中。

361 372 

362`Edit` 规则适用于所有编辑文件的内置工具。Claude 尽力将 `Read` 规则应用于所有读取文件的内置工具,如 Grep 和 Glob,以及您提示中的 `@file` 提及,以及连接的 [IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server) 与 Claude 共享的选择和打开文件上下文。373`Edit` 规则适用于所有编辑文件的内置工具。Claude 尽力将 `Read` 规则应用于所有读取文件的内置工具,如 Grep 和 Glob,以及您提示词中的 `@file` 提及,以及连接的 [IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server) 与 Claude 共享的选择和打开文件上下文。

363 374 

364`Read` deny 规则也会阻止同一路径上的 [Edit 和 Write 工具](/docs/zh-CN/errors#file-is-covered-by-a-read-deny-rule),包括在那里创建新文件。NotebookEdit 不被覆盖,因此为任何工具都不能更改的路径添加 `Edit` deny 规则。检查需要 Claude Code v2.1.208 或更高版本进行编辑,以及 v2.1.228 或更高版本进行写入。375`Read` deny 规则也会阻止同一路径上的 [Edit 和 Write 工具](/docs/zh-CN/errors#file-is-covered-by-a-read-deny-rule),包括在那里创建新文件。NotebookEdit 不被覆盖,因此为任何工具都不能更改的路径添加 `Edit` deny 规则。检查需要 Claude Code v2.1.208 或更高版本进行编辑,以及 v2.1.228 或更高版本进行写入。

365 376 


394 405 

395您通过 `/permissions` 添加的规则遵循您保存它的设置文件的行。406您通过 `/permissions` 添加的规则遵循您保存它的设置文件的行。

396 407 

397本地设置规则锚定在会话的[主工作目录](#working-directories),而不是 Claude Code 在 v2.1.211 及更高版本中[存储文件](#permission-system)的存储库根目录。在从存储库根目录启动的会话中,两个目录相同;在[worktree](/docs/zh-CN/worktrees)会话中,像 `Edit(/src/**)` 这样的共享规则匹配该 worktree 自己的 `src/` 目录。408本地设置规则锚定在会话的[主工作目录](#working-directories),而不是 Claude Code 在 v2.1.211 及更高版本中[存储文件](#permission-system)的仓库根目录。在从仓库根目录启动的会话中,两个目录相同;在[worktree](/docs/zh-CN/worktrees)会话中,像 `Edit(/src/**)` 这样的共享规则匹配该 worktree 自己的 `src/` 目录。

398 409 

399像 `Read(/secrets/**)` 这样的 deny 规则在用户设置中阻止 `~/.claude/secrets/**`,而不是您项目中的 `secrets` 目录。要在用户设置中编写适用于每个项目内部的规则,请改用 `//` 绝对路径或 `~/` 主目录相对路径。410像 `Read(/secrets/**)` 这样的 deny 规则在用户设置中阻止 `~/.claude/secrets/**`,而不是您项目中的 `secrets` 目录。要在用户设置中编写适用于每个项目内部的规则,请改用 `//` 绝对路径或 `~/` 主目录相对路径。

400 411 


463 符号链接474 符号链接

464</h4>475</h4>

465 476 

466当 Claude 访问的文件路径通过符号链接时,权限检查涵盖两个路径:Claude 请求的路径和它解析到的文件。这适用于 macOS、Linux 和 Windows 上的符号链接,以及 Windows 上的目录连接。477当 Claude 请求的文件路径通过符号链接时,权限检查涵盖两个路径:Claude 请求的路径和它解析到的文件。这适用于 macOS、Linux 和 Windows 上的符号链接,以及 Windows 上的目录连接。

467 478 

468<h5 id="how-rules-match-a-symlinked-path">479<h5 id="how-rules-match-a-symlinked-path">

469 规则如何匹配符号链接路径480 规则如何匹配符号链接路径


471 482 

472Allow 和 deny 规则对请求的路径和它解析到的文件的处理方式不同:483Allow 和 deny 规则对请求的路径和它解析到的文件的处理方式不同:

473 484 

474* **Allow 规则**:仅在请求的路径和它解析到的文件都匹配时适用。允许目录内的符号链接指向其外部仍然会提示您。485* **Allow 规则**:仅在请求的路径和它解析到的文件都匹配时适用。通过允许目录内指向其外部的符号链接进行的读取不匹配该规则。

475* **Deny 规则**:当请求的路径或它解析到的文件匹配时适用。指向被拒绝文件的符号链接本身被拒绝。例如,使用 `Read(./project/**)` 允许和 `Read(~/.ssh/**)` 拒绝,`./project/key` 处的符号链接指向 `~/.ssh/id_rsa` 被阻止:目标未通过 allow 规则,并匹配 deny 规则。486* **Deny 规则**:当请求的路径或它解析到的文件匹配时适用。指向被拒绝文件的符号链接本身被拒绝。例如,使用 `Read(./project/**)` 允许和 `Read(~/.ssh/**)` 拒绝,`./project/key` 处的符号链接指向 `~/.ssh/id_rsa` 被阻止:目标未通过 allow 规则,并匹配 deny 规则。

476 487 

477在 macOS 和 Linux 上,通过带有 `//`、`~/` 或 `/` 模式的符号链接目录编写的 deny 或 ask 规则也适用于该目录的真实位置。例如,在 macOS 上,其中 `/etc` 解析为 `/private/etc`,`Read(//etc/**)` 也阻止 `/private/etc/hosts`。在 v2.1.268 之前,通过符号链接目录编写的 deny 或 ask 规则不适用于其真实位置给出的路径。488在 macOS 和 Linux 上,通过带有 `//`、`~/` 或 `/` 模式的符号链接目录编写的 deny 或 ask 规则也适用于该目录的真实位置。例如,在 macOS 上,其中 `/etc` 解析为 `/private/etc`,`Read(//etc/**)` 也阻止 `/private/etc/hosts`。在 v2.1.268 之前,通过符号链接目录编写的 deny 或 ask 规则不适用于其真实位置给出的路径。


509 520 

510在前导 `*.` 或裸 `*` 以外的任何位置,通配符仅匹配两个点之间的文本。`WebFetch(domain:example.*)` 匹配 `example.org`,其中 `*` 变成 `org`,但不匹配 `example.evil.com`,其中 `*` 必须变成 `evil.com` 并跨越一个点。这防止尾部通配符匹配攻击者可以注册的域。521在前导 `*.` 或裸 `*` 以外的任何位置,通配符仅匹配两个点之间的文本。`WebFetch(domain:example.*)` 匹配 `example.org`,其中 `*` 变成 `org`,但不匹配 `example.evil.com`,其中 `*` 必须变成 `evil.com` 并跨越一个点。这防止尾部通配符匹配攻击者可以注册的域。

511 522 

512WebFetch 规则中的通配符需要 Claude Code v2.1.172 或更高版本来匹配获取。523`WebFetch` 规则中的通配符需要 Claude Code v2.1.172 或更高版本来匹配获取。

513 524 

514<h4 id="allow-or-deny-every-fetch">525<h4 id="allow-or-deny-every-fetch">

515 允许或拒绝每次获取526 允许或拒绝每次获取


524| `WebFetch` | Claude 无需提示您即可获取。不改变沙箱命令可以到达的主机。 | Claude Code 移除 `WebFetch` 工具,因此 Claude 根本无法获取。不改变沙箱命令可以到达的主机。 |535| `WebFetch` | Claude 无需提示您即可获取。不改变沙箱命令可以到达的主机。 | Claude Code 移除 `WebFetch` 工具,因此 Claude 根本无法获取。不改变沙箱命令可以到达的主机。 |

525| `WebFetch(domain:*)` | Claude 无需提示您即可获取,沙箱命令可以到达任何主机。 | Claude Code 保留工具并拒绝每次获取,沙箱命令无法到达任何主机。 |536| `WebFetch(domain:*)` | Claude 无需提示您即可获取,沙箱命令可以到达任何主机。 | Claude Code 保留工具并拒绝每次获取,沙箱命令无法到达任何主机。 |

526 537 

527两种形式也在[工件](/docs/zh-CN/artifacts)的读取上有所不同,即 Artifact 工具在 claude.ai 上发布的页面。裸 `WebFetch` deny 或 ask 规则不适用于这些读取。覆盖 `claude.ai` 或 `*.claudeusercontent.com` 内容主机的 `domain:` 规则,如 `WebFetch(domain:claude.ai)` 或 `WebFetch(domain:*)`,拒绝每次读取或在读取前提示。[`Artifact` 规则](/docs/zh-CN/artifacts#disable-artifacts)也是如此。538两种形式也在 [Artifact](/docs/zh-CN/artifacts) 的读取上有所不同,即 Artifact 工具在 claude.ai 上发布的页面。裸 `WebFetch` deny 或 ask 规则不适用于这些读取。覆盖 `claude.ai` 或 `*.claudeusercontent.com` 内容主机的 `domain:` 规则,如 `WebFetch(domain:claude.ai)` 或 `WebFetch(domain:*)`,拒绝每次读取或在读取前提示。[`Artifact` 规则](/docs/zh-CN/artifacts#disable-artifacts)也是如此。

528 539 

529当规则阻止读取时,拒绝命名规则。在 v2.1.268 之前,裸 `WebFetch` deny 规则阻止每次工件读取,裸 ask 规则在每次读取前提示。540当规则阻止读取时,拒绝命名规则。在 v2.1.268 之前,裸 `WebFetch` deny 规则阻止每次 Artifact 读取,裸 ask 规则在每次读取前提示。

530 541 

531要让 Claude 自由获取同时保持沙箱允许列表不变,请使用裸形式。此 `settings.json` 这样做:542要让 Claude 自由获取同时保持沙箱允许列表不变,请使用裸形式。此 `settings.json` 这样做:

532 543 


557在 Claude Desktop 应用中的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,Claude 通过 Cowork 的 `mcp__workspace__bash` 工具而不是内置 `Bash` 工具运行 shell 命令,Cowork 同样为 web 获取提供 `mcp__workspace__web_fetch`。Claude Code 也将命名整个 `Bash` 或 `WebFetch` 工具的 deny 规则应用于这些 Cowork 工具,因此托管的 `Bash` deny 规则阻止 Claude 在 Cowork 中运行 shell 命令。当 Claude Code 阻止此类调用时,消息命名 Cowork 工具:`Permission to use mcp__workspace__bash has been denied.` Allow 规则不会转移:Claude Code 从不将 `Bash` allow 规则应用于 `mcp__workspace__bash`。568在 Claude Desktop 应用中的 [Cowork](https://claude.com/docs/cowork/overview) 会话中,Claude 通过 Cowork 的 `mcp__workspace__bash` 工具而不是内置 `Bash` 工具运行 shell 命令,Cowork 同样为 web 获取提供 `mcp__workspace__web_fetch`。Claude Code 也将命名整个 `Bash` 或 `WebFetch` 工具的 deny 规则应用于这些 Cowork 工具,因此托管的 `Bash` deny 规则阻止 Claude 在 Cowork 中运行 shell 命令。当 Claude Code 阻止此类调用时,消息命名 Cowork 工具:`Permission to use mcp__workspace__bash has been denied.` Allow 规则不会转移:Claude Code 从不将 `Bash` allow 规则应用于 `mcp__workspace__bash`。

558 569 

559<h3 id="agent-subagents">570<h3 id="agent-subagents">

560 Agent(subagents)571 Agent(子代理)

561</h3>572</h3>

562 573 

563使用 `Agent(AgentName)` 规则来控制 Claude 可以使用哪些[子代理](/docs/zh-CN/sub-agents):574使用 `Agent(AgentName)` 规则来控制 Claude 可以使用哪些[子代理](/docs/zh-CN/sub-agents):


566* `Agent(Plan)` 匹配 Plan 子代理577* `Agent(Plan)` 匹配 Plan 子代理

567* `Agent(my-custom-agent)` 匹配名为 `my-custom-agent` 的自定义子代理578* `Agent(my-custom-agent)` 匹配名为 `my-custom-agent` 的自定义子代理

568 579 

569将这些规则添加到您的设置中的 `deny` 数组,或使用 `--disallowedTools` CLI 标志来禁用特定代理。要禁用 Explore 代理:580将这些规则添加到您的设置中的 `deny` 数组,或使用 `--disallowedTools` CLI 标志来禁用特定 Agent。要禁用 Explore Agent:

570 581 

571```json theme={null}582```json theme={null}

572{583{


592| - | - | - |603| - | - | - |

593| `Cd(~/code/*)` | `~/code/app` | `~/code/app/src`、`~/code` |604| `Cd(~/code/*)` | `~/code/app` | `~/code/app/src`、`~/code` |

594| `Cd(~/code/**)` | `~/code` 和其下的任何目录 | `~/code` 外的目录 |605| `Cd(~/code/**)` | `~/code` 和其下的任何目录 | `~/code` 外的目录 |

595| `Cd(**/node_modules)` | 任何深度的任何 `node_modules` 目录 | `node_modules/pkg` |606| `Cd(**/node_modules)` | 当前目录下任何深度的任何 `node_modules` 目录 | `node_modules/pkg` |

596 607 

597<h2 id="extend-permissions-with-hooks">608<h2 id="extend-permissions-with-hooks">

598 使用 hooks 扩展权限609 使用 hooks 扩展权限


602 613 

603PreToolUse hook 决定不会绕过权限规则。Claude Code 评估 deny 和 ask 规则,无论 PreToolUse hook 返回什么:匹配的 deny 规则会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然会提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。614PreToolUse hook 决定不会绕过权限规则。Claude Code 评估 deny 和 ask 规则,无论 PreToolUse hook 返回什么:匹配的 deny 规则会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然会提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。

604 615 

605该优先级涵盖设置文件中的 hooks 和插件的 `hooks/hooks.json` 中的 hooks。您安装的[模块](/docs/zh-CN/plugins/mods/overview)如果 hooks `tool.check` 会在规则和 `PreToolUse` hooks 已经决定之后回答,其答案可以替代它们的答案:616该优先级涵盖设置文件中的 hooks 和插件的 `hooks/hooks.json` 中的 hooks。您安装的处理 `tool.check` 的[模块](/docs/zh-CN/plugins/mods/overview)会在规则和 `PreToolUse` hooks 已经决定之后回答,其答案可以替代它们的答案:

606 617 

607* **Ask 规则**:模块可以批准 ask 规则会提示的调用618* **Ask 规则**:模块可以批准 ask 规则会提示的调用

608* **来自 `PreToolUse` hook 的阻止**:模块可以批准调用,除非 hook 在托管设置中619* **来自 `PreToolUse` hook 的阻止**:模块可以批准调用,除非 hook 在托管设置中

plugin-evals.md +76 −66

Details

31* Claude Code v2.1.269 或更高版本。运行 `claude --version` 检查,运行 `claude update` 升级。31* Claude Code v2.1.269 或更高版本。运行 `claude --version` 检查,运行 `claude update` 升级。

32* Git 2.31 或更高版本(如果已安装 git)。运行 `git --version` 检查。使用较旧的 git,`claude plugin eval` [在运行任何案例之前停止](#git-is-too-old-for-claude-plugin-eval)。没有 git,它正常运行。32* Git 2.31 或更高版本(如果已安装 git)。运行 `git --version` 检查。使用较旧的 git,`claude plugin eval` [在运行任何案例之前停止](#git-is-too-old-for-claude-plugin-eval)。没有 git,它正常运行。

33* 一个包含 `plugin.json` 或 `.claude-plugin/plugin.json` 清单的插件目录,或一个[技能目录插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)。33* 一个包含 `plugin.json` 或 `.claude-plugin/plugin.json` 清单的插件目录,或一个[技能目录插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)。

34* 与你的常规 Claude Code 会话相同的身份验证和模型提供商。Eval 运行、评判评分器和 `claude plugin eval init` 使用你的凭证调用模型,因此它们计入你的计划使用限制或 API 账单。当命令报告成本时,该数字是这些调用的[列表价格估计](/docs/zh-CN/costs)。34* 与您的常规 Claude Code 会话相同的身份验证和模型提供商。Eval 运行、评判评分器和 `claude plugin eval init` 使用您的凭据调用模型,因此它们计入您的计划用量限制或 API 账单。当命令报告成本时,该数字是这些调用的[列表价格估计](/docs/zh-CN/costs)。如果您在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 Claude Code,请从导出与常规会话相同的提供商变量的 shell 中运行该套件,因为每次运行都会从该 shell 继承这些变量,如 [`env` 字段](#prompt-md-fields)所述。

35 35 

36<h2 id="how-an-eval-run-works">36<h2 id="how-an-eval-run-works">

37 eval 运行如何工作37 eval 运行如何工作


130 编写和完善用例130 编写和完善用例

131</h2>131</h2>

132 132 

133`claude plugin eval init` 编写的用例是你可以打开、更改和添加的纯文件。用例是插件 eval 目录下的一个目录,包含 `prompt.md`、`case.yaml` 或两者。每个用例至少要有一个评分器,作为 `graders/<name>.md` 文件或 `case.yaml` 中的 `graders:` 条目,因为没有评分器的用例无法加载。要对用例进行分组,将它们嵌套在不是用例本身的目录下;用例目录内的任何内容,例如 `graders/` 和 fixture 文件,都属于该用例。133`claude plugin eval init` 编写的用例是您可以打开、更改和添加的纯文件。用例是插件 eval 目录下的一个目录,包含 `prompt.md`、`case.yaml` 或两者。每个用例至少要有一个评分器,作为 `graders/<name>.md` 文件或 `case.yaml` 中的 `graders:` 条目,因为没有评分器的用例无法加载。要对用例进行分组,将它们嵌套在不是用例本身的目录下;用例目录内的任何内容,例如 `graders/` 和 fixture 文件,都属于该用例。

134 134 

135这是 `claude plugin eval init` 编写的布局,也是新套件要使用的布局。[eval 套件参考](#eval-suite-reference)有完整的树,包括 mocks 和结果:135这是 `claude plugin eval init` 编写的布局,也是新套件要使用的布局。[eval 套件参考](#eval-suite-reference)有完整的树,包括 mocks 和结果:

136 136 


167 └── criteria.md # one grader: how to score the result167 └── criteria.md # one grader: how to score the result

168```168```

169 169 

170在 `prompt.md` 中,你编写 Claude 在每次运行中接收的消息,并在其 frontmatter 中设置运行的限制和用例可能使用的工具。打开 `evals/first-case/prompt.md` 并用你的请求替换占位符正文,措辞方式应该是用户会输入的方式而不是命名技能。这个例子是针对起草提交消息的技能;使用你自己的请求:170在 `prompt.md` 中,您编写 Claude 在每次运行中接收的消息,并在其 frontmatter 中设置运行的限制和用例可以使用的工具。打开 `evals/first-case/prompt.md`,将占位符正文替换为您的某个 skill 应处理的请求,措辞应采用用户实际输入的方式,而不是直接点名该 skill。此示例针对的是一个起草提交信息的 skill;请使用您自己的请求:

171 171 

172```markdown theme={null}172```markdown theme={null}

173---173---


178Write me a commit message for this change: I renamed getUser to fetchUser and updated the three call sites.178Write me a commit message for this change: I renamed getUser to fetchUser and updated the three call sites.

179```179```

180 180 

181每次运行都在空工作目录中开始,所以将任务需要的任何内容放在提示本身中,或[首先设置工作区](#add-setup-or-history-with-case-yaml)。[frontmatter 字段的完整列表](#prompt-md-fields)涵盖了模型、超时、标签和环境变量。181每次运行都在空工作目录中开始,所以请将任务需要的任何内容放在提示词本身中,或[首先设置工作区](#add-setup-or-history-with-case-yaml)。

182 

183[frontmatter 字段的完整列表](#prompt-md-fields)涵盖了模型、超时时间、标签和环境变量。

182 184 

183`graders/` 下的每个文件都是运行后应用的一个检查。打开 `evals/first-case/graders/criteria.md` 并用评判模型的评分标准替换占位符,写成具体的 PASS 和 FAIL 条件:185`graders/` 下的每个文件都是运行后应用的一个检查。打开 `evals/first-case/graders/criteria.md` 并用评判模型的评分标准替换占位符,写成具体的 PASS 和 FAIL 条件:

184 186 


191FAIL if <what a wrong or missing response looks like>.193FAIL if <what a wrong or missing response looks like>.

192```194```

193 195 

194然后添加第二个评分器来检查你的技能是否是产生答案的原因。创建 `evals/first-case/graders/skill-fired.md`,将 `your-skill-name` 替换为技能在 `skills/` 下的目录名称,这是 Claude 调用它的名称:196然后添加第二个评分器,检查答案是否由您的 skill 产生。创建 `evals/first-case/graders/skill-fired.md`,将 `your-skill-name` 替换为该 skill 在 `skills/` 下的目录名称,这也是 Claude 调用它时使用的名称:

195 197 

196```markdown theme={null}198```markdown theme={null}

197---199---


201---203---

202```204```

203 205 

204当 Claude 在运行期间至少调用一次该技能时,这会通过,包括通过其命名空间 `plugin-name:skill-name` 形式。[评分器类型](#grader-types)列出了其他可用的检查,例如匹配正则表达式或确认文件已创建。206当 Claude 在运行期间至少调用一次该 skill 时(包括通过其命名空间形式 `plugin-name:skill-name` 调用),此评分器通过。

207 

208[评分器类型](#grader-types)列出了其他可用的检查,例如匹配正则表达式或确认文件已创建。

205 209 

206保存两个文件后,按照[快速入门](#create-your-first-eval-suite)的方式运行用例,使用 `claude plugin eval .` 从插件根目录。210保存两个文件后,按照[快速入门](#create-your-first-eval-suite)的方式,从插件根目录使用 `claude plugin eval .` 运行用例。

207 211 

208<h3 id="set-run-limits-and-tools-in-prompt-md">212<h3 id="set-run-limits-and-tools-in-prompt-md">

209 在 prompt.md 中设置运行限制和工具213 在 prompt.md 中设置运行限制和工具

210</h3>214</h3>

211 215 

212在 `prompt.md` frontmatter 中设置用例的 `max_turns`、`timeout_seconds`、`model`、`tags` 和它可能使用的 `allowed_tools`;[prompt.md frontmatter](#prompt-md-fields) 参考列出了每个字段及其默认值。Claude 接收正文完全按照你编写的方式。其中的 `@path` 提及不会扩展为文件附件,所以如果 Claude 需要读取文件,请在 `allowed_tools` 中为其授予工具。216在 `prompt.md` frontmatter 中设置用例的 `max_turns`、`timeout_seconds`、`model`、`tags` 和它可以使用的 `allowed_tools`;[prompt.md frontmatter](#prompt-md-fields) 参考列出了每个字段及其默认值。

217 

218Claude 会完全按照您编写的内容接收正文。其中的 `@path` 提及不会扩展为文件附件,所以如果 Claude 需要读取文件,请在 `allowed_tools` 中为其授予相应工具。

213 219 

214<h3 id="grade-the-result">220<h3 id="grade-the-result">

215 选择和加权评分器221 选择和加权评分器

216</h3>222</h3>

217 223 

218评分器的 frontmatter 设置其 `type`,以及可选的 `weight` 使其在运行分数中计数更多,以及一个[`arm`](#compare-against-a-no-plugin-baseline)来控制它如何针对基线评分。在六种类型中,`regex`、`tool_used`、`tool_order` 和 `file_exists` 从记录和文件计算,成本为零,而 `llm` 和 `baseline` 调用评判模型并增加运行成本。224评分器的 frontmatter 设置其 `type`,以及可选的 `weight`(使其在运行分数中占更大比重)和一个 [`arm`](#compare-against-a-no-plugin-baseline)(控制它如何针对基线评分)。在六种类型中,`regex`、`tool_used`、`tool_order` 和 `file_exists` 从会话记录和文件计算,不产生任何成本,而 `llm` 和 `baseline` 会调用评判模型并增加运行成本。

219 225 

220没有自定义代码评分器。[评分器类型](#grader-types)列出了每种类型的选项和通过条件,[评分器可以查看什么](#what-a-grader-can-look-at)列出了 `target` 和 `focus` 接受的值。226没有自定义代码评分器。

221 227 

222`llm` 和 `baseline` 评分器的评判默认是一个小型快速模型。传递 `--judge-model sonnet` 或完整模型 ID 以对细致的评分标准使用更强大的模型。228[评分器类型](#grader-types)列出了每种类型的选项和通过条件,[评分器可以查看什么](#what-a-grader-can-look-at)列出了 `target` 和 `focus` 接受的值。

229 

230默认情况下,`llm` 和 `baseline` 评分器的评判模型是 Claude Code 用于后台任务的模型。传递 `--judge-model sonnet` 或完整模型 ID 可自行选择评判模型。

223 231 

224<h4 id="choose-graders-that-give-a-stable-signal">232<h4 id="choose-graders-that-give-a-stable-signal">

225 选择提供稳定信号的评分器233 选择提供稳定信号的评分器

226</h4>234</h4>

227 235 

228`llm` 评分器要求模型做出判决,所以其答案可能在运行之间不同,并且它读取的文本越长差异越大。这些习惯使套件的分数足够稳定以信任:236`llm` 评分器要求模型做出判定,所以其答案可能在不同运行之间有所不同,并且它需要读取的文本越长,差异越大。以下习惯可使套件的分数足够稳定、值得信赖:

229 237 

230* 对于长输出(例如生成的文件),使用 `regex` 评分器对文件内容进行评分,它以相同的方式每次检查整个文件。为短输出保留 `llm` 评分器,使用具体的 PASS 和 FAIL 条件编写评分标准。238* 对于长输出(例如生成的文件),使用 `regex` 评分器对文件内容进行评分,它每次都以相同的方式检查整个文件。将 `llm` 评分器留给短输出,并使用具体的 PASS 和 FAIL 条件编写评分标准。

231* 为每个用例提供一个关于结果的评分器,例如最终消息或生成的文件,以及一个关于 Claude 如何到达那里的评分器,例如 `tool_used` 或 `tool_order`。它们一起告诉你答案是否正确以及你的插件是否产生了它。239* 为每个用例提供一个针对结果的评分器,例如最终消息或生成的文件,以及一个针对 Claude 产生该结果所采取步骤的评分器,例如 `tool_used` 或 `tool_order`。两者结合可以告诉您答案是否正确,以及是否由您的插件产生。

232* 如果用例的 `tool_used: Skill` 评分器通过但 `Δ` 为负,怀疑评判而不是插件。小型评判模型可能会因为格式与评分标准描述的不同而将正确答案标记为错误。使用 `--judge-model sonnet` 重新运行,并收紧评分标准,使格式不会决定判决。240* 如果用例的 `tool_used: Skill` 评分器通过但 `Δ` 为负,请先怀疑评判模型而不是插件。小型评判模型可能会因为格式与评分标准描述的不同而将正确答案标记为错误。使用 `--judge-model sonnet` 重新运行,并收紧评分标准,使格式不会决定判定结果。

233* 要检查构建或测试在运行内通过,让提示要求 Claude 运行它并将结果写入文件,评分该文件,并使用 `tool_used` 评分器断言命令运行,其 `input_match` 命名该命令。241* 要检查构建或测试在运行中是否通过,请让提示词要求 Claude 运行它并将结果写入文件,对该文件评分,并使用一个 `input_match` 指明该命令的 `tool_used` 评分器来断言命令已运行。

234 242 

235<h3 id="compare-against-a-no-plugin-baseline">243<h3 id="compare-against-a-no-plugin-baseline">

236 针对无插件基线评分244 针对无插件基线评分


238 246 

239当插件处于测试中时,用例通常在两个 arm 中运行。with-arm 是其加载插件的运行,without-arm 是相同数量的不加载任何插件的运行。摘要和报告显示两个分数和 `Δ`,即 with-arm 分数减去 without-arm 分数。247当插件处于测试中时,用例通常在两个 arm 中运行。with-arm 是其加载插件的运行,without-arm 是相同数量的不加载任何插件的运行。摘要和报告显示两个分数和 `Δ`,即 with-arm 分数减去 without-arm 分数。

240 248 

241在这些情况下,用例仅运行 with-arm,所以它没有 `W/OUT` 分数或 `Δ`:249在以下情况下,用例仅运行 with-arm,所以它没有 `W/OUT` 分数或 `Δ`:

242 250 

243* **你传递 `--ablation none`**:每个用例运行一个 arm,当你不需要比较时(例如在迭代评分器时)将成本减半。251* **您传递了 `--ablation none`**:每个用例运行一个 arm,当您不需要比较时(例如在迭代评分器时)可将成本减半。

244* **用例恢复记录并且目标是一个路径**:使用[目标](#choose-what-to-evaluate)(例如 `.` 而不是已安装插件的名称),[`context.history_file`](#add-setup-or-history-with-case-yaml) 用例默认运行一个 arm,假设记录的对话已经反映了插件。运行在 stderr 上打印 `single-arm (no Δ)` 通知,命名这些用例。要比较恢复的转向与和不带插件,传递 `--ablation with-without`。252* **用例恢复会话记录且目标是一个路径**:当[目标](#choose-what-to-evaluate)是 `.` 之类的路径而不是已安装插件的名称时,[`context.history_file`](#add-setup-or-history-with-case-yaml) 用例默认运行一个 arm,其假设是记录的对话已经反映了插件。运行会在 stderr 上打印 `single-arm (no Δ)` 通知,列出这些用例。要比较恢复的轮次在带插件和不带插件时的表现,请传递 `--ablation with-without`。

245* **没有为用例找到插件**:当目标是一个路径时,Claude Code 无法定位的插件的用例也默认运行一个 arm。参见[基线 arm 显示无插件](#the-baseline-arm-shows-no-plugin-or-delta-is-zero)来修复它。253* **没有为用例找到插件**:当目标是一个路径时,Claude Code 无法定位其插件的用例也默认运行一个 arm。请参阅[基线 arm 显示无插件](#the-baseline-arm-shows-no-plugin-or-delta-is-zero)来修复此问题。

246 254 

247在两个 arm 运行中,某些评分器报告为 `scored: false`。像"技能被调用"这样的检查在没有插件的情况下永远无法通过,所以计数会将 without-arm 推向零并夸大 `Δ`。为了保持两个 arm 可比较,Claude Code 在两个 arm 中排除此类评分器的分数,并在 with-arm 中仅将其报告为通过/失败指示器。这包括:255在双 arm 运行中,某些评分器会被报告为 `scored: false`。像"skill 被调用"这样的检查在没有插件的情况下永远无法通过,所以将其计入会将 without-arm 推向零并夸大 `Δ`。为了保持两个 arm 可比较,Claude Code 在两个 arm 中都将此类评分器排除在分数之外,并在 with-arm 中仅将其报告为通过/失败指示器。这包括:

248 256 

249* 每个 `tool_used` 评分器,其 `tool` 是 `Skill`257* 每个 `tool` 为 `Skill` 的 `tool_used` 评分器

250* 每个 `regex` 评分器,其 `target: mock_calls` 和每个 `llm` 评分器,其 `focus: mock_calls`,当每个[模拟服务器](#mock-mcp-servers)在用例中是你的插件声明的258* 每个带有 `target: mock_calls` 的 `regex` 评分器和每个带有 `focus: mock_calls` 的 `llm` 评分器,前提是用例中的每个[模拟服务器](#mock-mcp-servers)都是您的插件声明的

251* 任何你标记为 `arm: with-only` 的评分器259* 任何您标记为 `arm: with-only` 的评分器

252 260 

253三个设置改变了该排除:261三个设置会改变该排除行为:

254 262 

255* **每个评分器都被排除**:如果用例中的每个评分器都在排除集中,它们会被正常评分,因为没有什么可评分的。263* **每个评分器都被排除**:如果用例中的每个评分器都在排除集中,它们会改为正常评分,因为否则将没有可评分的内容。

256* **`arm: both`**:在评分器上设置 `arm: both` 以在两个 arm 中评分它,无论如何,这是你想要的"不得调用技能"检查,带有 `min: 0` 和 `max: 0`。264* **`arm: both`**:在评分器上设置 `arm: both`,使其无论如何都在两个 arm 中评分,这正适用于带有 `min: 0` 和 `max: 0` 的"不得调用 skill"检查。

257* **`--ablation none`**:在 `--ablation none` 下,没有任何内容被排除,所以相同的套件在两种模式中可能产生不同的绝对分数。265* **`--ablation none`**:在 `--ablation none` 下,没有任何内容被排除,所以同一套件在两种模式下可能产生不同的绝对分数。

258 266 

259<h3 id="use-a-different-eval-directory">267<h3 id="use-a-different-eval-directory">

260 使用不同的 eval 目录268 使用不同的 eval 目录

261</h3>269</h3>

262 270 

263如果 `evals/` 已被另一个工具占用,请将套件保留在不同的目录中。你可以在插件的 `plugin.json` 中记录该目录,以便每次运行和每个协作者都使用它,或在命令行上为单次运行传递它:271如果 `evals/` 已被另一个工具占用,请将套件保留在不同的目录中。您可以在插件的 `plugin.json` 中记录该目录,以便每次运行和每个协作者都使用它,或在命令行上为单次运行传递它:

264 272 

265* **在 `plugin.json` 中**:添加 `"experimental": { "evals": "quality/evals" }`。273* **在 `plugin.json` 中**:添加 `"experimental": { "evals": "quality/evals" }`。

266* **在命令行上**:将 `--eval-dir quality/evals` 传递给 `claude plugin eval` 和 `claude plugin eval init`。274* **在命令行上**:将 `--eval-dir quality/evals` 传递给 `claude plugin eval` 和 `claude plugin eval init`。

267 275 

268如果你同时设置两者,则使用标志的目录。给出相对路径,仅包含目录名称,例如 `qa` 或 `quality/evals`;包含 `..` 的绝对路径或路径被拒绝:作为标志值时是错误,而不可用的清单值会打印 `Warning:` 行,运行使用 `evals/` 代替。用例、结果和 `init` 输出都移动到该目录。276如果您同时设置两者,则使用标志指定的目录。请提供仅由目录名称组成的相对路径,例如 `qa` 或 `quality/evals`。绝对路径或包含 `..` 的路径不被接受:作为标志值时会报错,而不可用的清单值会打印一行 `Warning:`,运行将改用 `evals/`。用例、结果和 `init` 输出都会移动到该目录。

269 277 

270<h2 id="set-up-fixtures-and-mocks">278<h2 id="set-up-fixtures-and-mocks">

271 设置 fixtures 和 mocks279 设置 fixtures 和 mocks


323* **替换**:使用 `{{input.<field>}}` 从调用的输入插入字段,使用 `{{file:fixtures/{input.<field>}.json}}` 插入 mock 旁边的 fixture 文件的内容。331* **替换**:使用 `{{input.<field>}}` 从调用的输入插入字段,使用 `{{file:fixtures/{input.<field>}.json}}` 插入 mock 旁边的 fixture 文件的内容。

324* **`expect:`**:`expect:` 块保护输入。如果调用违反它,运行以分数 0 中止并记录原因,以便用例可以断言你的插件要求服务器执行的操作。332* **`expect:`**:`expect:` 块保护输入。如果调用违反它,运行以分数 0 中止并记录原因,以便用例可以断言你的插件要求服务器执行的操作。

325* **`error: true`**:设置 `error: true` 以将正文作为工具错误返回。333* **`error: true`**:设置 `error: true` 以将正文作为工具错误返回。

326* **`type: agent`**:设置 `type: agent` 以让小型模型从正文中的指令作为服务器回答。334* **`type: agent`**:设置 `type: agent`,让评判模型根据正文中的指令以服务器身份回答。

327 335 

328[mock 文件参考](#mock-files)列出了每个键和 `_server.md` 和 `_tools.json` 文件。336[mock 文件参考](#mock-files)列出了每个键和 `_server.md` 和 `_tools.json` 文件。

329 337 


346 运行 evals354 运行 evals

347</h2>355</h2>

348 356 

349一旦套件存在,`claude plugin eval` 就会运行它。你可以使用 target 参数选择运行哪个插件和哪些用例,使用 `--allow-tools` 授予用例所需的任何工具(超出只读集合),并使用其他选项控制运行次数、模型、成本和输出。357一旦套件存在,`claude plugin eval` 就会运行它。您可以使用 target 参数选择运行哪个插件和哪些用例,使用 `--allow-tools` 授予用例所需的任何工具(超出只读集合),并使用其他选项控制运行次数、模型、成本和输出。

350 358 

351<h3 id="choose-what-to-evaluate">359<h3 id="choose-what-to-evaluate">

352 选择要评估的内容360 选择要评估的内容

353</h3>361</h3>

354 362 

355大多数时候,你从插件根目录运行 `claude plugin eval .`,这会运行套件中的每个用例,并加载你所在的插件。要运行单个用例文件,或评估你安装的插件而不是你正在开发的插件,请传递不同的 target:363大多数时候,您从插件根目录运行 `claude plugin eval .`,这会运行套件中的每个用例,并加载您所在的插件。要运行单个用例文件,或评估您安装的插件而不是您正在开发的插件,请传递不同的 target:

356 364 

357| Target | 运行内容 |365| Target | 运行内容 |

358| :- | :- |366| :- | :- |


362| `name@skills-dir` | 相同,用于 [skills-directory 插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) |370| `name@skills-dir` | 相同,用于 [skills-directory 插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) |

363| 省略 | 当前目录作为路径 |371| 省略 | 当前目录作为路径 |

364 372 

365添加 `--case <glob>` 按用例名称过滤,添加 `--tag <tag>` 保留具有任何给定标签的用例。将 target 放在 `--tag`、`--allow-tools` 和 `--json` 之前。前两个接受列表,`--json` 接受可选路径,所以它们每个都读取后面的 target 作为自己的值。373添加 `--case <glob>` 按用例名称过滤,添加 `--tag <tag>` 保留具有任何给定标签的用例。

374 

375将 target 放在 `--tag`、`--allow-tools` 和 `--json` 之前。前两个接受列表,`--json` 接受可选路径,所以它们每个都会将后面的 target 读取为自己的值。

366 376 

367<h3 id="grant-tools">377<h3 id="grant-tools">

368 授予工具378 授予工具

369</h3>379</h3>

370 380 

371运行永远不会停下来请求权限。需要授予但你没有授予的内置工具,例如 `Bash`、`Write`、`Edit`、`WebFetch` 和 `WebSearch`,会从会话中移除,所以 Claude 根本无法调用它们。381运行永远不会停下来请求权限。需要授予但您没有授予的内置工具,例如 `Bash`、`Write`、`Edit`、`WebFetch` 和 `WebSearch`,会从会话中移除,所以 Claude 根本无法调用它们。

372 382 

373运行仅允许用例在 `allowed_tools` 中列出的只读工具,来自 `Read`、`Glob`、`Grep`、`NotebookRead`、`Skill`、`AskUserQuestion`、`Agent`、`TodoWrite` 和任务工具 `TaskCreate`、`TaskGet`、`TaskList`、`TaskUpdate` 和 `TaskStop`,加上你使用 `--allow-tools` 授予的任何工具。该授予适用于运行中的每个用例。要让用例使用 `Bash`、`Write`、`Edit`、`WebFetch` 或 `WebSearch`,请自己授予它们:383运行仅允许用例在 `allowed_tools` 中列出的只读工具,来自 `Read`、`Glob`、`Grep`、`NotebookRead`、`Skill`、`AskUserQuestion`、`Agent`、`TodoWrite` 和任务工具 `TaskCreate`、`TaskGet`、`TaskList`、`TaskUpdate` 和 `TaskStop`,加上您使用 `--allow-tools` 授予的任何工具。该授予适用于运行中的每个用例。要让用例使用 `Bash`、`Write`、`Edit`、`WebFetch` 或 `WebSearch`,请自行授予它们:

374 384 

375```bash theme={null}385```bash theme={null}

376claude plugin eval . --allow-tools Write Edit "Bash(npm test *)"386claude plugin eval . --allow-tools Write Edit "Bash(npm test *)"

377```387```

378 388 

379当用例请求你没有授予的工具时,进度输出会将其列为 `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>`。389当用例请求您没有授予的工具时,进度输出会将其列为 `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>`。

380 390 

381当你以任何形式授予 `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)。391当您以任何形式授予 `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)。

382 392 

383<h3 id="command-options">393<h3 id="command-options">

384 命令选项394 命令选项


389| 选项 | 默认值 | 效果 |399| 选项 | 默认值 | 效果 |

390| :- | :- | :- |400| :- | :- | :- |

391| `--runs <n>` | 每个用例的 `runs`,否则为 3 | 每个用例每个分支的运行次数 |401| `--runs <n>` | 每个用例的 `runs`,否则为 3 | 每个用例每个分支的运行次数 |

392| `-j`, `--concurrency <n>` | `1` | 一次最多运行这么多个代理运行,从 1 到 8。它们共享你账户的速率限制,所以这缩短了实际时间而不是提高超过该限制的吞吐量。结果保持用例顺序 |402| `-j`, `--concurrency <n>` | `1` | 一次最多运行这么多个 Agent 运行,从 1 到 8。它们共享您账户的速率限制,所以这缩短了实际耗时,而不是将吞吐量提高到超过该限制。结果保持用例顺序 |

393| `--model <model>` | 每个用例的 `model`,否则为 `ANTHROPIC_MODEL`(如果设置),否则为 Claude Code 的默认值 | 被测试代理的模型。在 CI 中固定它,以便模型推出不会被误认为是插件回归 |403| `--model <model>` | 每个用例的 `model`,否则为 `ANTHROPIC_MODEL`(如果设置),否则为 Claude Code 的默认值 | 被测试 Agent 的模型。在 CI 中固定它,以免模型推出被误认为是插件回归 |

394| `--judge-model <model>` | 一个小的快速模型 | 用于 `llm` 和 `baseline` 评分器的模型 |404| `--judge-model <model>` | 用于[后台任务](#grade-the-result)的模型 | 用于 `llm` 和 `baseline` 评分器的模型 |

395| `--ablation <mode>` | 按用例决定;请参阅 [与无插件基线比较](#compare-against-a-no-plugin-baseline) | 是否也运行每个用例而不使用插件来衡量它添加了什么。`none` 运行一个分支;`with-without` 添加无插件基线 |405| `--ablation <mode>` | 按用例决定;请参阅 [对照无插件基线评分](#compare-against-a-no-plugin-baseline) | 是否还要在不加载插件的情况下运行每个用例,以衡量插件带来的增益。`none` 运行一个分支;`with-without` 添加无插件基线 |

396| `--threshold <0..1>` | `1.0` | 当用例的 with 分支得分至少为此值时,用例通过。任何低于它的用例都会使命令退出 1 |406| `--threshold <0..1>` | `1.0` | 当用例的 with 分支得分至少为此值时,用例通过。任何低于它的用例都会使命令以 1 退出 |

397| `--max-cost-usd <usd>` | 无上限 | 运行的列表价格成本估计的上限,不是计划使用的上限。在每次运行开始前检查。一旦花费,不会进一步启动任何内容;已在进行中的运行会完成,所以花费可能会超过这些运行的上限。如果任何运行未启动,命令会以部分结果退出 2 |407| `--max-cost-usd <usd>` | 无上限 | 运行的标价成本估算的上限,而不是计划用量的上限。在每次运行开始前检查。一旦花完,不会再启动任何运行;已开始的运行会完成,所以花费可能会因这些运行而超过上限。如果有任何运行未启动,命令会以 2 退出并给出部分结果 |

398| `--allow-tools <tools...>` | 无 | 授予超出只读集合的工具。请参阅 [授予工具](#grant-tools) |408| `--allow-tools <tools...>` | 无 | 授予超出只读集合的工具。请参阅 [授予工具](#grant-tools) |

399| `--scaffold` | 关闭 | 运行每个用例的 [`scaffold_script`](#add-setup-or-history-with-case-yaml) |409| `--scaffold` | 关闭 | 运行每个用例的 [`scaffold_script`](#add-setup-or-history-with-case-yaml) |

400| `--trust-plugin` | 关闭 | 跳过你会自己运行其代码和套件的插件的首次运行信任提示。在 CI 中传递它,以便作业永远不会被提示拒绝或等待。请参阅 [运行可以访问什么](#security) |410| `--trust-plugin` | 关闭 | 对于您愿意自行运行其代码和套件的插件,跳过首次运行信任提示。在 CI 中传递它,以便作业永远不会被该提示拒绝或卡在该提示处等待。请参阅 [运行可以访问什么](#security) |

401| `--mocks <mode>` | `record` | `record` 从 [模拟](#mock-mcp-servers) 回答 MCP 工具调用,不启动插件的真实服务器,并保存代理-模拟答案以供重放。`off` 忽略模拟并启动插件的真实 MCP 服务器 |411| `--mocks <mode>` | `record` | `record` 从 [模拟](#mock-mcp-servers) 回答 MCP 工具调用,不启动插件的真实服务器,并保存 Agent 模拟答案以供重放。`off` 忽略模拟并启动插件的真实 MCP 服务器 |

402| `--allow-real-servers` | 关闭 | 使用 `--mocks record` 时,也为没有模拟的服务器启动插件的真实 MCP 服务器 |412| `--allow-real-servers` | 关闭 | 使用 `--mocks record` 时,也为没有模拟的服务器启动插件的真实 MCP 服务器 |

403| `--json [path]` | 关闭 | 将 [结果文档](#json-result) 打印到 stdout,或将其写入以 `.json` 结尾的路径。运行是安静的:没有进度行或摘要表 |413| `--json [path]` | 关闭 | 将 [结果文档](#json-result) 打印到 stdout,或将其写入以 `.json` 结尾的路径。运行是静默的:没有进度行或摘要表 |

404| `--output-dir <dir>` | `<eval dir>/results/<timestamp>/` | `aggregate-result.json` 和 `report.html` 的去向 |414| `--output-dir <dir>` | `<eval dir>/results/<timestamp>/` | `aggregate-result.json` 和 `report.html` 的输出位置 |

405| `--no-publish` | | 保持 HTML 报告本地。请参阅 [HTML 报告](#html-report) |415| `--no-publish` | | 将 HTML 报告保留在本地。请参阅 [HTML 报告](#html-report) |

406| `--publish-report` | | 发布报告,即使它会在默认情况下保持本地,例如 Claude Code 会话启动的运行 |416| `--publish-report` | | 即使在默认会保留在本地的情况下(例如由 Claude Code 会话启动的运行)也发布报告 |

407| `--keep-temp` | 关闭 | 保持每次运行的沙箱目录并打印其路径,用于调试 Claude 生成的内容 |417| `--keep-temp` | 关闭 | 保留每次运行的沙箱目录并打印其路径,用于调试 Claude 生成的内容 |

408 418 

409<h3 id="run-evals-in-ci">419<h3 id="run-evals-in-ci">

410 在 CI 中运行 evals420 在 CI 中运行 evals

411</h3>421</h3>

412 422 

413在你的 CI 作业中,使用 `--json` 运行套件以写入结果以供存档,并根据退出代码使构建失败。传递 `--trust-plugin` 以便作业永远不会在 [首次运行信任提示](#security) 处等待,固定两个模型以便得分在一段时间内可比较,保持报告本地,并设置成本上限作为上限:423在您的 CI 作业中,使用 `--json` 运行套件以写入结果供存档,并根据退出码使构建失败。传递 `--trust-plugin` 以便作业永远不会在 [首次运行信任提示](#security) 处等待,固定两个模型以便得分在一段时间内可比较,将报告保留在本地,并设置成本上限作为上限:

414 424 

415```bash theme={null}425```bash theme={null}

416claude plugin eval . \426claude plugin eval . \


423 --max-cost-usd 20433 --max-cost-usd 20

424```434```

425 435 

426作业的退出代码告诉你发生了什么:436作业的退出码说明了发生的情况:

427 437 

428| 退出代码 | 含义 |438| 退出码 | 含义 |

429| :- | :- |439| :- | :- |

430| 0 | 每个用例得分在 `--threshold` 处或以上,每个用例文件都加载了 |440| 0 | 每个用例得分均达到或高于 `--threshold`,且每个用例文件都已加载 |

431| 1 | 用例得分低于阈值,用例文件加载失败,未找到用例,无法启动运行,插件目录不受信任且未传递 `--trust-plugin`,或选项无效 |441| 1 | 用例得分低于阈值,用例文件加载失败,未找到用例,无法启动运行,插件目录不受信任且未传递 `--trust-plugin`,或选项无效 |

432| 2 | 部分运行:达到了 `--max-cost-usd` 上限,或你的凭证在首次运行前或首次运行时被拒绝。`results.json` 仍然以 `partial: true` 和原因写入 |442| 2 | 部分运行:达到了 `--max-cost-usd` 上限,或您的凭据在首次运行前或首次运行时被拒绝。`results.json` 仍会写入,并带有 `partial: true` 和原因 |

433| 130 | 中断。部分结果已写入 |443| 130 | 已中断。部分结果已写入 |

434| 143 | 已终止,例如由 CI 超时 |444| 143 | 已终止,例如因 CI 超时 |

435 445 

436写入或发布 HTML 报告的问题永远不会改变退出代码。446with 减 without 的差值会被报告,但永远不会改变退出码,写入或发布 HTML 报告时出现的问题也不会。

437 447 

438要查看用例得分低的原因,请在本地运行它而不使用 `--json` 以便打印每次运行的进度和评分器行。448要查看用例得分低的原因,请在本地运行它且不使用 `--json`,以便打印每次运行的进度和评分器行。

439 449 

440CI 运行程序还需要以下内容:450CI 运行器还需要具备以下条件:

441 451 

442* **安装和凭证**:CI 运行程序需要 Claude Code 安装和 [环境中的凭证](/docs/zh-CN/authentication),例如 `ANTHROPIC_API_KEY`。452* **安装和凭据**:CI 运行器需要安装 Claude Code,并需要 [环境中的凭据](/docs/zh-CN/authentication),例如 `ANTHROPIC_API_KEY` 或您的云提供商的变量。

443* **信任**:没有 `--trust-plugin`,其检出目录 Claude Code 还不信任的作业需要 [首次运行信任提示](#trust-the-plugin-directory),无法询问的运行会被拒绝,退出 1。453* **信任**:如果没有 `--trust-plugin`,检出目录尚未被 Claude Code 信任的作业需要经过 [首次运行信任提示](#trust-the-plugin-directory),无法询问的运行会被拒绝并以 1 退出。

444* **CI 中的 `init`**:`claude plugin eval init` 需要终端来提出问题;在 CI 中,运行 `claude plugin eval init --bare <name>` 以获取空白模板。454* **CI 中的 `init`**:`claude plugin eval init` 需要终端来向您提问;在 CI 中,请运行 `claude plugin eval init --bare <name>` 以获取空白模板。

445 455 

446要保持成本可预测,给快速的每次更改套件仅使用不调用评判者的评分器,在你不需要 `Δ` 的地方使用 `--ablation none`,并将 `partial: true` 文档和具有 `skippedPaidGraders` 的运行排除在你绘制的任何趋势之外。456要保持成本可预测,请为每次更改都运行的快速套件仅使用不调用评判模型的评分器,在不需要 `Δ` 的地方使用 `--ablation none`,并将 `partial: true` 文档和带有 `skippedPaidGraders` 的运行排除在您绘制的任何趋势之外。

447 457 

448<h2 id="read-the-results">458<h2 id="read-the-results">

449 读取结果459 读取结果


639 649 

640| 键 | 默认 | 目的 |650| 键 | 默认 | 目的 |

641| :- | :- | :- |651| :- | :- | :- |

642| `type` | `fixed` | `fixed` 按编写返回正文。`agent` 将正文视为小型模型的指令,该模型为运行扮演服务器并将早期调用视为历史 |652| `type` | `fixed` | `fixed` 按原样返回正文。`agent` 将正文视为给[评判模型](#command-options)的指令,该模型在运行中充当服务器,并将之前的调用视为历史 |

643| `expect` | 未设置 | 从点分输入路径到类型名称(例如 `string`、`number`、`boolean`、`array` 或 `object`)、`/regex/`、文字或允许的文字列表的映射。违反它的调用以分数 0 中止运行,并报告为 `aborted`,带有服务器、工具和原因 |653| `expect` | 未设置 | 从点分输入路径到类型名称(例如 `string`、`number`、`boolean`、`array` 或 `object`)、`/regex/`、文字或允许的文字列表的映射。违反它的调用以分数 0 中止运行,并报告为 `aborted`,带有服务器、工具和原因 |

644| `error` | `false` | `fixed` 仅。将正文作为工具错误返回 |654| `error` | `false` | `fixed` 仅。将正文作为工具错误返回 |

645| `abort_when` | 未设置 | `agent` 仅。散文列出代理可能中止运行的唯一条件 |655| `abort_when` | 未设置 | `agent` 仅。散文列出代理可能中止运行的唯一条件 |

Details

22 claude plugin 命令22 claude plugin 命令

23</h2>23</h2>

24 24 

25从你的 shell 或脚本运行 `claude plugin <subcommand>`,在 Claude Code 会话外部。这些子命令安装和管理插件,无需打开 [`/plugin`](#plugin-in-a-session) 面板。25在 Claude Code 会话外部,从 shell 或脚本运行 `claude plugin <subcommand>`。这些子命令用于安装和管理插件,无需打开 [`/plugin`](#plugin-in-a-session) 面板。

26 26 

27`claude plugins` 是 `claude plugin` 的别名。27`claude plugins` 是 `claude plugin` 的别名。

28 28 

29每个子命令共享这些退出代码、插件参数和作用域值:29每个子命令共享以下退出码、插件参数和作用域值:

30 30 

31* **退出代码**:成功时为 `0`,失败时为 `1`。`validate` 为意外错误添加退出 `2`,`eval` 添加 [其部分](#plugin-eval) 中列出的代码。31* **退出码**:成功时为 `0`,失败时为 `1`。`validate` 额外使用退出码 `2` 表示意外错误,`eval` 额外使用[其章节](#plugin-eval)中列出的退出码。

32* **插件参数**:`<plugin>` 参数是插件 `name` 或 `name@marketplace`。当两个市场提供相同的名称时,使用限定形式。`configure` 仅接受限定形式。32* **插件参数**:`<plugin>` 参数是插件 `name` 或 `name@marketplace`。当两个市场提供相同的名称时,请使用限定形式。`configure` 仅接受限定形式。

33* **作用域**:`--scope` 接受 `user`、`project` 或 `local`,并命名命令写入的设置文件。`update` 也接受 `managed`。33* **作用域**:`--scope` 接受 `user`、`project` 或 `local`,用于指定命令写入的设置文件。`update` 还接受 `managed`。

34 34 

35<h3 id="plugin-init">35<h3 id="plugin-init">

36 plugin init36 plugin init

37</h3>37</h3>

38 38 

39在 `~/.claude/skills/<name>/` 处搭建新插件。它在你的下一个会话中作为 `<name>@skills-dir` 加载,无需安装步骤。39在 `~/.claude/skills/<name>/` 处搭建新插件。它会在您的下一个会话中作为 `<name>@skills-dir` 加载,无需安装步骤。

40 40 

41`new` 是 `init` 的别名。41`new` 是 `init` 的别名。

42 42 

43对于从此命令开始的创建、测试和编辑工作流,请参阅 [创建插件](/docs/zh-CN/plugins/create)。43有关从此命令开始的创建、测试和编辑工作流,请参阅[创建插件](/docs/zh-CN/plugins/create)。

44 44 

45```bash theme={null}45```bash theme={null}

46claude plugin init <name> [options]46claude plugin init <name> [options]

47```47```

48 48 

49`<name>` 成为 `~/.claude/skills/` 下的目录名称和插件清单中的 `name`。49`<name>` 将成为 `~/.claude/skills/` 下的目录名称以及插件清单中的 `name`。

50 50 

51该命令没有用于另一个位置的标志。要在项目内搭建,请参阅 [创建插件](/docs/zh-CN/plugins/create)。51该命令没有用于指定其他位置的标志。如需在项目内搭建,请参阅[创建插件](/docs/zh-CN/plugins/create)。

52 52 

53| 标志 | 描述 |53| 标志 | 描述 |

54| :- | :- |54| :- | :- |

55| `--description <text>` | 清单描述 |55| `--description <text>` | 清单描述 |

56| `--author <name>` | 作者名称。默认为 `git config user.name` |56| `--author <name>` | 作者名称。默认为 `git config user.name` |

57| `--author-email <email>` | 作者电子邮件。默认为 `git config user.email` |57| `--author-email <email>` | 作者电子邮件。默认为 `git config user.email` |

58| `--with <components...>` | 也为 `skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style` 或 `channel` 搭建启动文件 |58| `--with <components...>` | 同时为 `skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style` 或 `channel` 搭建起始文件 |

59| `-f, --force` | 覆盖目标处的现有 `.claude-plugin/` |59| `-f, --force` | 覆盖目标处现有的 `.claude-plugin/` |

60 60 

61搭建带有启动 skill 和 hook 文件的插件:61搭建带有起始 skill 和 hook 文件的插件:

62 62 

63```bash theme={null}63```bash theme={null}

64claude plugin init my-helper --with skills hooks64claude plugin init my-helper --with skills hooks

65```65```

66 66 

67Claude Code 验证它写入的内容并打印 `Created plugin "my-helper" at ~/.claude/skills/my-helper`,后跟它加载的 id 和关闭它的 `claude plugin disable` 命令。67Claude Code 会验证其写入的内容并打印 `Created plugin "my-helper" at ~/.claude/skills/my-helper`,随后打印其加载时使用的 id,以及用于关闭它的 `claude plugin disable` 命令。

68 68 

69当 Claude Code 无法安全搭建时,它退出 `1` 而不写入,消息命名原因。这些是常见原因:69当 Claude Code 无法安全搭建时,它会以 `1` 退出且不写入任何内容,并在消息中说明原因。常见原因如下:

70 70 

71* 未知的 `--with` 值71* 未知的 `--with` 值

72* 目标处的现有搭建,没有 `--force`72* 目标处已存在搭建内容,且未使用 `--force`

73* 阻止 skills-directory 插件的托管设置73* 某项托管设置阻止了 skills-directory 插件

74 74 

75<h3 id="plugin-install">75<h3 id="plugin-install">

76 plugin install76 plugin install

77</h3>77</h3>

78 78 

79从你添加的市场安装插件。`i` 是 `install` 的别名。79从您已添加的市场安装插件。`i` 是 `install` 的别名。

80 80 

81```bash theme={null}81```bash theme={null}

82claude plugin install <plugin> [options]82claude plugin install <plugin> [options]

83```83```

84 84 

85大多数插件无需提示即可安装。对于其市场条目 [运行命令来安装它](/docs/zh-CN/plugins/host-marketplace) 或 [为其下载设置 `headersHelper`](/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 的插件,Claude Code 首先打印命令并询问 `Run this command now? [y/N]`。85大多数插件无需提示即可安装。对于其市场条目[通过运行命令来安装](/docs/zh-CN/plugins/host-marketplace)或[为下载设置了 `headersHelper`](/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 的插件,Claude Code 会先打印该命令并询问 `Run this command now? [y/N]`。

86 86 

87| 标志 | 描述 |87| 标志 | 描述 |

88| :- | :- |88| :- | :- |

89| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local`。默认为 `user` |89| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local`。默认为 `user` |

90| `--config <key=value>` | 设置插件清单声明的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference) 选项。为每个选项重复该标志。需要 Claude Code v2.1.147 或更高版本。写作 `<server>.<key>` 的键设置 [捆绑 MCP 服务器](/docs/zh-CN/plugins/components#include-a-packaged-mcpb-server) 在其自己的 `user_config` 中声明的设置,用于在插件内部发送的捆绑文件。`<server>.<key>` 形式需要 Claude Code v2.1.285 或更高版本 |90| `--config <key=value>` | 设置插件清单声明的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference) 选项。每个选项重复一次该标志。需要 Claude Code v2.1.147 或更高版本。写作 `<server>.<key>` 的键改为设置[捆绑 MCP 服务器](/docs/zh-CN/plugins/components#include-a-packaged-mcpb-server)在其自身 `user_config` 中声明的设置,适用于随插件附带的捆绑文件。`<server>.<key>` 形式需要 Claude Code v2.1.285 或更高版本 |

91| `-y, --yes` | 接受显示的安装命令,无需 `Run this command now?` 提示。在 Claude Code 会话内运行命令时被忽略,例如从 Bash 工具或 hook。需要 Claude Code v2.1.229 或更高版本 |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 或更高版本 |92| `--accept-command <sha256>` | 代替 `-y`,接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的显示安装命令。不能与 `-y` 组合使用。请参阅[接受显示的安装命令](#accept-a-displayed-install-command)。需要 Claude Code v2.1.271 或更高版本 |

93| `--json` | 将结果打印为 stdout 最后一行的一个 JSON 对象,而不是人类可读的消息,供脚本使用。请参阅 [JSON 结果格式](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |93| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,而不是人类可读的消息,供脚本使用。请参阅 [JSON 结果格式](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

94 94 

95从你自己的终端传递 `-y` 以接受显示的命令,无需提示。以下是没有 TTY 和 Claude 运行命令时发生的情况:95在 shell 中运行 `claude plugin install --help`,可查看您的版本支持的所有选项。

96 96 

97* **stdin 或 stdout 不是 TTY,且你既不传递 `-y` 也不传递 `--accept-command`**:安装被拒绝。输出说命令仅被显示,退出代码为 `1`97从您自己的终端传递 `-y`,即可接受显示的命令而不出现提示。以下是没有 TTY 以及由 Claude 运行命令时的情况:

98* **Claude 通过其 Bash 工具运行命令**:`-y` 被忽略。改为从你自己的终端运行命令

99 98 

100为克隆项目的每个人安装插件:99* **stdin 或 stdout 不是 TTY,且既未传递 `-y` 也未传递 `--accept-command`**:安装被拒绝。输出会说明命令仅被显示,退出码为 `1`

100* **Claude 通过其 Bash 工具运行命令**:`-y` 会被忽略。请改为从您自己的终端运行该命令

101 

102为克隆该项目的所有人安装插件:

101 103 

102```bash theme={null}104```bash theme={null}

103claude plugin install formatter@my-marketplace --scope project105claude plugin install formatter@my-marketplace --scope project

104```106```

105 107 

106Claude Code 打印 `Successfully installed plugin: formatter@my-marketplace (scope: project)`。当没有新内容被安装时,输出说明原因:108Claude Code 打印 `Successfully installed plugin: formatter@my-marketplace (scope: project)`。当没有安装任何新内容时,输出会说明原因:

107 109 

108* **已在该作用域安装**:输出为 `Plugin "formatter@my-marketplace" is already installed (scope: project)`,退出代码为 `0`110* **已在该作用域安装**:输出为 `Plugin "formatter@my-marketplace" is already installed (scope: project)`,退出码为 `0`

109* **你拒绝命令源提示**:输出为 `Aborted.`,退出代码为 `1`111* **您拒绝了命令源提示**:输出为 `Aborted.`,退出码为 `1`

110* **你拒绝 `headersHelper` 提示,或无法在没有 TTY 的情况下确认**:输出为 `Aborted — the command was not run.`,退出代码为 `1`112* **您拒绝了 `headersHelper` 提示,或在没有 TTY 的情况下无法确认**:输出为 `Aborted — the command was not run.`,退出码为 `1`

111 113 

112<h4 id="plugin-json-result">114<h4 id="plugin-json-result">

113 JSON 结果格式115 JSON 结果格式

114</h4>116</h4>

115 117 

116当你向 `plugin install` 传递 `--json` 时,stdout 的最后一行是一个 JSON 对象。仅解析该行,因为 Claude Code 在其前面打印市场声明的任何命令。118向 `plugin install` 传递 `--json` 时,stdout 的最后一行是一个 JSON 对象。请仅解析该行,因为 Claude Code 会在其之前打印市场声明的任何命令。

117 119 

118三个字段始终存在:120以下三个字段始终存在:

119 121 

120* `command`:运行的子命令,例如 `install`122* `command`:运行的子命令,例如 `install`

121* `outcome`:`ok` 或 `failed`123* `outcome`:`ok` 或 `failed`

122* `message`:结果的人类可读描述124* `message`:结果的人类可读描述

123 125 

124其他字段,例如 `pluginId`、`scope` 和 `failureCode`,仅在适用时出现。126其他字段(例如 `pluginId`、`scope` 和 `failureCode`)仅在适用时出现。

125 127 

126`--json` 选项在 `plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上打印相同的对象,带有该子命令自己的字段。128`plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上的 `--json` 选项会打印相同的对象,并带有各子命令自己的字段。

127 129 

128使用错误,例如无效的 `--scope`,不打印结果行,退出 `1`,原因在 stderr 上。130使用错误(例如无效的 `--scope`)不会打印结果行,而是以 `1` 退出,并在 stderr 上给出原因。

129 131 

130<h4 id="accept-a-displayed-install-command">132<h4 id="accept-a-displayed-install-command">

131 接受显示的安装命令133 接受显示的安装命令

132</h4>134</h4>

133 135 

134当 `--json` 运行显示市场声明的命令且不运行它时,`failed` 结果也携带 `shownCommand` 对象。其字段包括显示的命令、它所属的插件和命令的 `sha256`。136当 `--json` 运行显示了市场声明的命令但未运行它时,`failed` 结果还会携带一个 `shownCommand` 对象。其字段包括显示的命令、该命令所属的插件以及命令的 `sha256`。

135 137 

136要接受完全相同的命令,从你自己的终端使用该 `sha256` 作为 `--accept-command` 重新运行,因为该标志在 Claude Code 会话内无效。需要 Claude Code v2.1.271 或更高版本。138要恰好接受该命令,请从您自己的终端重新运行,并将该 `sha256` 作为 `--accept-command` 传入,因为该标志在 Claude Code 会话内无效。需要 Claude Code v2.1.271 或更高版本。

137 139 

138`sha256` 计为对完全相同的命令、插件和市场目录的接受。如果自命令显示以来其中任何一个发生了变化,Claude Code 不接受 `sha256` 并再次显示命令。运行自己的市场刷新获取的更改也计为此类更改。140`sha256` 仅对完全相同的命令、插件和市场目录视为接受。如果自命令显示以来其中任何一项发生了变化,Claude Code 不会接受该 `sha256`,并会再次显示命令。运行自身的市场刷新所获取的更改也算作此类变化。

139 141 

140如果 `shownCommand.acceptCommandMatched` 为 `false`,你传递的 `sha256` 与现在显示的命令不匹配。在使用其 `sha256` 重新运行之前,查看该命令。142如果 `shownCommand.acceptCommandMatched` 为 `false`,则您传递的 `sha256` 与当前显示的命令不匹配。请在使用其 `sha256` 重新运行之前检查该命令。

141 143 

142<h3 id="plugin-uninstall">144<h3 id="plugin-uninstall">

143 plugin uninstall145 plugin uninstall


151 153 

152| 标志 | 描述 |154| 标志 | 描述 |

153| :- | :- |155| :- | :- |

154| `-s, --scope <scope>` | 从作用域卸载:`user`、`project` 或 `local`。默认为 `user` |156| `-s, --scope <scope>` | 从指定作用域卸载:`user`、`project` 或 `local`。默认为 `user` |

155| `--keep-data` | 保留插件的持久数据目录 `~/.claude/plugins/data/<id>/` |157| `--keep-data` | 保留插件的持久数据目录 `~/.claude/plugins/data/<id>/` |

156| `--prune` | 也移除自动安装的 [依赖项](/docs/zh-CN/plugins/dependencies),没有剩余插件需要 |158| `--prune` | 同时移除不再被任何剩余插件需要的自动安装[依赖项](/docs/zh-CN/plugins/dependencies) |

157| `-y, --yes` | 跳过 `--prune` 确认提示。当 stdin 或 stdout 不是 TTY 时,与 `--prune` 一起需要 |159| `-y, --yes` | 跳过 `--prune` 确认提示。当 stdin 或 stdout 不是 TTY 时,与 `--prune` 一起使用时必须提供 |

158| `--json` | 将结果打印为 stdout 最后一行的一个 JSON 对象,格式与 [`plugin install --json`](#plugin-json-result) 相同。不能与 `--prune` 组合。需要 Claude Code v2.1.268 或更高版本 |160| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。不能与 `--prune` 组合使用。需要 Claude Code v2.1.268 或更高版本 |

159 161 

160从项目作用域卸载插件:162从项目作用域卸载插件:

161 163 


163claude plugin uninstall formatter@my-marketplace --scope project165claude plugin uninstall formatter@my-marketplace --scope project

164```166```

165 167 

166Claude Code 打印 `Successfully uninstalled plugin: formatter (scope: project)`。当插件未在该作用域安装时,命令打印以 `Failed to uninstall plugin "formatter@my-marketplace":` 开头的行并退出 `1`。168Claude Code 打印 `Successfully uninstalled plugin: formatter (scope: project)`。当插件未在该作用域安装时,命令会打印以 `Failed to uninstall plugin "formatter@my-marketplace":` 开头的行并以 `1` 退出。

167 169 

168如果失败行继续为 `"formatter" was not uninstalled:` 并命名设置文件,Claude Code 无法确认作用域的设置不再打开插件,因此插件保持安装状态,保留其保存的所有内容。使用 `--json` 时,结果携带 `failureCode: "settings_still_on"`。此设置检查需要 Claude Code v2.1.282 或更高版本。170如果失败行后接 `"formatter" was not uninstalled:` 并指出某个设置文件,说明 Claude Code 无法确认该作用域的设置已不再启用该插件,因此插件保持安装状态,其保存的所有内容也都保留。使用 `--json` 时,结果携带 `failureCode: "settings_still_on"`。此设置检查需要 Claude Code v2.1.282 或更高版本。

169 171 

170<h4 id="what-an-uninstall-deletes-and-keeps">172<h4 id="what-an-uninstall-deletes-and-keeps">

171 卸载删除和保留的内容173 卸载会删除和保留的内容

172</h4>174</h4>

173 175 

174当你从最后一个安装它的作用域卸载插件时,Claude Code 也删除插件存储的 [选项和密钥](/docs/zh-CN/plugins/manifest-reference#user-configuration) 及其数据目录 `~/.claude/plugins/data/<id>/`。有三个例外:176当您从插件安装所在的最后一个作用域卸载插件时,Claude Code 还会删除插件存储的[选项和密钥](/docs/zh-CN/plugins/manifest-reference#user-configuration)及其数据目录 `~/.claude/plugins/data/<id>/`。有三个例外:

175 177 

176* 使用 `--keep-data` 时,数据目录保留178* 使用 `--keep-data` 时,数据目录会保留

177* 当另一个已安装的插件使用相同的文件夹时,例如其 ID 仅在字母大小写上与此不同的插件,数据目录保留179* 当另一个已安装的插件使用相同的文件夹时(例如其 ID 与此插件仅在字母大小写上不同),数据目录会保留

178* 当 Claude Code 无法在从该作用域移除插件后读回已安装插件的列表时,选项、密钥和数据目录都保留,因为插件可能仍在另一个作用域安装。卸载仍然成功。消息列出保留的内容及如何删除它,使用 `--json` 时结果携带 `savedKept: "install_records_unreadable"`180* 当 Claude Code 从该作用域移除插件后无法读回已安装插件列表时,选项、密钥和数据目录都会保留,因为插件可能仍安装在另一个作用域。卸载仍然成功。消息会列出保留的内容以及如何删除它们,使用 `--json` 时结果携带 `savedKept: "install_records_unreadable"`

179 181 

180使用 `--json` 时,`keptData` 报告目录是否保留,`/plugin` 在保留时显示 `· data preserved`。对于在没有 `--keep-data` 的情况下保留的目录,此报告需要 Claude Code v2.1.281 或更高版本。`savedKept` 字段需要 Claude Code v2.1.282 或更高版本。182使用 `--json` 时,`keptData` 报告目录是否保留,目录保留时 `/plugin` 会显示 `· data preserved`。对于未使用 `--keep-data` 却保留的目录,此报告需要 Claude Code v2.1.281 或更高版本。`savedKept` 字段需要 Claude Code v2.1.282 或更高版本。

181 183 

182<h3 id="plugin-enable">184<h3 id="plugin-enable">

183 plugin enable185 plugin enable

184</h3>186</h3>

185 187 

186启用禁用的插件。对于 [从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),传递 `<name>@synced` 作为插件。188启用已禁用的插件。对于[从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),请传递 `<name>@synced` 作为插件。

187 189 

188```bash theme={null}190```bash theme={null}

189claude plugin enable <plugin> [options]191claude plugin enable <plugin> [options]


192| 标志 | 描述 |194| 标志 | 描述 |

193| :- | :- |195| :- | :- |

194| `-s, --scope <scope>` | 启用的作用域:`user`、`project` 或 `local`。省略时自动检测 |196| `-s, --scope <scope>` | 启用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

195| `--json` | 将结果打印为 stdout 最后一行的一个 JSON 对象,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |197| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

196 198 

197不使用 `--scope` 时,命令按本地、项目、用户的顺序检查你的设置文件,并使用第一个提及插件的作用域。199不使用 `--scope` 时,命令按 local、project、user 的顺序检查您的设置文件,并使用第一个提及该插件的作用域。

198 200 

199如果你传递插件未声明的 `--scope`,命令要么写入覆盖,要么失败:201如果传递的 `--scope` 并非插件声明所在的作用域,命令要么写入覆盖,要么失败:

200 202 

201* **一个 [优先于](/docs/zh-CN/plugins/loading) 声明作用域的作用域**:Claude Code 在你传递的作用域处写入覆盖。例如,`claude plugin disable formatter --scope local` 仅为你关闭项目启用的插件203* **[优先级高于](/docs/zh-CN/plugins/loading)声明作用域的作用域**:Claude Code 在您传递的作用域写入覆盖。例如,`claude plugin disable formatter --scope local` 仅为您自己关闭在项目中启用的插件

202* **任何其他作用域**:命令失败,显示 `Plugin "formatter" is installed at project scope, not user. Use --scope project or omit --scope to auto-detect.`204* **任何其他作用域**:命令失败,并显示 `Plugin "formatter" is installed at project scope, not user. Use --scope project or omit --scope to auto-detect.`

203 205 

204如果插件已在解析的作用域启用,命令打印 `Plugin "formatter" is already enabled` 并退出 `1`。使用 `--json` 时,结果有 `"failureCode": "already_in_goal_state"` 和 `"alreadyInGoalState": true`,所以脚本可以将该情况视为成功。206如果插件已在解析出的作用域中启用,命令会打印 `Plugin "formatter" is already enabled` 并以 `1` 退出。使用 `--json` 时,结果包含 `"failureCode": "already_in_goal_state"` 和 `"alreadyInGoalState": true`,因此脚本可以将这种情况视为成功。

205 207 

206当插件声明 [依赖项](/docs/zh-CN/plugins/dependencies) 时,Claude Code 也启用它们。命令在这些情况下失败:208当插件声明了[依赖](/docs/zh-CN/plugins/dependencies)时,Claude Code 也会启用这些依赖。在以下情况下命令会失败:

207 209 

208* **依赖项未安装**:启用失败并为每个缺失的依赖项打印 `claude plugin install` 命令210* **某个依赖未安装**:启用失败,并为每个缺失的依赖打印 `claude plugin install` 命令

209* **依赖项被你的组织的插件策略阻止**:启用失败并命名被阻止的依赖项211* **某个依赖被您组织的插件策略阻止**:启用失败,并指出被阻止的依赖

210* **依赖项在优先级高于目标作用域的作用域处设置为 `false`**:启用失败。在该作用域启用依赖项,或传递 `--scope` 以在那里写入212* **某个依赖在优先级高于目标作用域的作用域中被设置为 `false`**:启用失败。请在该作用域启用该依赖,或传递 `--scope` 以写入该作用域

211 213 

212在声明它的任何地方重新启用插件:214在插件声明所在的任何位置重新启用插件:

213 215 

214```bash theme={null}216```bash theme={null}

215claude plugin enable formatter217claude plugin enable formatter

216```218```

217 219 

218Claude Code 打印 `Successfully enabled plugin: formatter (scope: project)`,命名它检测到的作用域。220Claude Code 打印 `Successfully enabled plugin: formatter (scope: project)`,并指出它检测到的作用域。

219 221 

220<h3 id="plugin-disable">222<h3 id="plugin-disable">

221 plugin disable223 plugin disable

222</h3>224</h3>

223 225 

224禁用插件而不卸载它。对于 [从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),传递 `<name>@synced` 作为插件。226禁用插件而不卸载它。对于[从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),请传递 `<name>@synced` 作为插件。

225 227 

226```bash theme={null}228```bash theme={null}

227claude plugin disable [plugin] [options]229claude plugin disable [plugin] [options]


229 231 

230| 标志 | 描述 |232| 标志 | 描述 |

231| :- | :- |233| :- | :- |

232| `-a, --all` | 禁用每个启用的插件。不能与插件名称或 `--scope` 组合 |234| `-a, --all` | 禁用所有已启用的插件。不能与插件名称或 `--scope` 组合使用 |

233| `-s, --scope <scope>` | 禁用的作用域:`user`、`project` 或 `local`。省略时自动检测 |235| `-s, --scope <scope>` | 禁用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

234| `--json` | 将结果打印为 stdout 最后一行的一个 JSON 对象,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |236| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

235 237 

236不使用 `--scope` 时,作用域按与 [`plugin enable`](#plugin-enable) 相同的本地、项目、用户顺序自动检测。238不使用 `--scope` 时,作用域按与 [`plugin enable`](#plugin-enable) 相同的 local、project、user 顺序自动检测。

237 239 

238如果你既不传递插件名称也不传递 `--all`,Claude Code 打印 `Please specify a plugin name or use --all to disable all plugins` 并退出 `1`。禁用已禁用的插件打印 `Plugin "formatter" is already disabled` 并退出 `1`,如 [`plugin enable`](#plugin-enable) 对已启用的插件所做的那样。240如果既未传递插件名称也未传递 `--all`,Claude Code 会打印 `Please specify a plugin name or use --all to disable all plugins` 并以 `1` 退出。禁用已禁用的插件会打印 `Plugin "formatter" is already disabled` 并以 `1` 退出,与 [`plugin enable`](#plugin-enable) 对已启用插件的处理方式相同。

239 241 

240命令对仍然需要的插件失败:242对于仍被需要的插件,命令会失败:

241 243 

242* **另一个启用的插件 [依赖于](/docs/zh-CN/plugins/dependencies) 它**:命令失败并命名要首先禁用的依赖项244* **另一个已启用的插件[依赖](/docs/zh-CN/plugins/dependencies)它**:命令失败,并列出需要先禁用的依赖方插件

243* **你的组织要求它作为同步插件**:命令失败并不保存任何内容245* **您的组织要求将其作为同步插件**:命令失败且不保存任何内容

244 246 

245禁用一个插件:247禁用一个插件:

246 248 


254 plugin update256 plugin update

255</h3>257</h3>

256 258 

257将插件更新到其市场提供的最新版本。新版本在你的下一个会话中加载,或在运行中的会话中运行 `/reload-plugins` 后加载。259将插件更新到其市场提供的最新版本。新版本会在您的下一个会话中加载,或在正在运行的会话中运行 `/reload-plugins` 后加载。

258 260 

259```bash theme={null}261```bash theme={null}

260claude plugin update <plugin> [options]262claude plugin update <plugin> [options]


262 264 

263| 标志 | 描述 |265| 标志 | 描述 |

264| :- | :- |266| :- | :- |

265| `-s, --scope <scope>` | 更新的作用域:`user`、`project`、`local` 或 `managed`。省略时自动检测 |267| `-s, --scope <scope>` | 要更新的作用域:`user`、`project`、`local` 或 `managed`。省略时自动检测 |

266| `-y, --yes` | 接受来自 [命令源](/docs/zh-CN/plugins/host-marketplace) 插件的更改的安装命令,无需提示。当 stdin 或 stdout 不是 TTY 时需要,除非你传递 `--accept-command`。需要 Claude Code v2.1.229 或更高版本 |268| `-y, --yes` | 接受[命令源](/docs/zh-CN/plugins/host-marketplace)插件已更改的安装命令,不出现提示。当 stdin 或 stdout 不是 TTY 时必须提供,除非传递了 `--accept-command`。需要 Claude Code v2.1.229 或更高版本 |

267| `--accept-command <sha256>` | 接受市场声明的命令,其 `sha256` 之前的 [`--json` 运行](#plugin-json-result) 在 `shownCommand` 中报告,代替 `-y`。不能与 `-y` 组合。需要 Claude Code v2.1.271 或更高版本 |269| `--accept-command <sha256>` | 代替 `-y`,接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的市场声明命令。不能与 `-y` 组合使用。需要 Claude Code v2.1.271 或更高版本 |

268| `--json` | 将结果打印为 stdout 最后一行的一个 JSON 对象,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |270| `--json` | 将结果作为一个 JSON 对象打印在 stdout 的最后一行,格式与 [`plugin install --json`](#plugin-json-result) 相同。需要 Claude Code v2.1.268 或更高版本 |

269 

270如果你省略 `--scope`,命令在为你的当前项目安装它的最具体作用域处更新插件,检查本地、项目、用户,然后托管。

271 

272在 v2.1.281 之前,当你省略 `--scope` 时命令使用 `user`,所以更新仅在项目或本地作用域安装的插件失败,显示 `Plugin "<name>" is not installed at scope user`。在这些版本上,传递 `--scope`。

273 

274`managed` 是你可以更新但不能安装的唯一作用域。对于管理员安装的插件,请参阅 [为你的组织管理插件](/docs/zh-CN/plugins/org)。

275 271 

276更新插件:272更新插件:

277 273 


279claude plugin update formatter@my-marketplace275claude plugin update formatter@my-marketplace

280```276```

281 277 

282Claude Code 打印 `Checking for updates for plugin "formatter@my-marketplace"…`,然后是结果。当没有更新时,它打印 `formatter is already at the latest version (1.0.0).` 并退出 `0`。278Claude Code 打印 `Checking for updates for plugin "formatter@my-marketplace"…`,然后打印结果。当没有更新的版本时,它会打印 `formatter is already at the latest version (1.0.0).` 并以 `0` 退出,除非它[重试插件的依赖安装](#retry-an-unfinished-dependency-install)且该安装失败。

279 

280<h4 id="which-scope-the-command-updates">

281 命令更新哪个作用域

282</h4>

283 

284如果省略 `--scope`,命令会在当前项目中插件安装所在的最具体作用域更新插件,依次检查 local、project、user,然后是 managed。

285 

286在 v2.1.281 之前,省略 `--scope` 时命令使用 `user`,因此更新仅安装在 project 或 local 作用域的插件会失败,并显示 `Plugin "<name>" is not installed at scope user`。在这些版本上,请传递 `--scope`。

287 

288`managed` 是唯一可以更新但不能安装到的作用域。有关管理员安装的插件,请参阅[为组织管理插件](/docs/zh-CN/plugins/org)。

289 

290<h4 id="update-by-bare-name">

291 按裸名称更新

292</h4>

293 

294您可以传递不带市场的插件名称,命令会将其与已安装的插件进行匹配。当来自不同市场的已安装插件同名时,命令会拒绝更新,并列出应改为运行的限定 `plugin-name@marketplace-name` 命令。按裸名称更新需要 Claude Code v2.1.246 或更高版本。

295 

296<h4 id="retry-an-unfinished-dependency-install">

297 重试未完成的依赖安装

298</h4>

283 299 

284你可以传递一个裸插件名称,命令将其与你安装的插件匹配。当来自不同市场的已安装插件共享名称时,命令拒绝更新并列出要运行的限定 `plugin-name@marketplace-name` 命令。按裸名称更新需要 Claude Code v2.1.246 或更高版本。300当插件已是最新版本时,该命令还可以在其缓存副本中重试未完成的依赖安装。有关该重试会运行或被跳过的情况,请参阅[其列出的软件包未安装](/docs/zh-CN/plugins/troubleshooting#the-packages-it-lists-are-not-installed)。如果重试失败,输出为 `Failed to update plugin "formatter@my-marketplace"` 及原因,退出码为 `1`。在 v2.1.287 之前,该命令会报告插件已是最新版本,而不重试安装。

285 301 

286<h3 id="plugin-list">302<h3 id="plugin-list">

287 plugin list303 plugin list


295 311 

296| 标志 | 描述 |312| 标志 | 描述 |

297| :- | :- |313| :- | :- |

298| `--json` | 将列表打印为 JSON |314| `--json` | 以 JSON 格式打印列表 |

299| `--available` | 也列出你的市场提供但你未安装的插件。没有 `--json` 时无效 |315| `--available` | 同时列出您的市场提供但尚未安装的插件。不使用 `--json` 时无效 |

300| `--data-size [plugin]` | 测量每个已安装插件的 [保存数据目录](#what-an-uninstall-deletes-and-keeps),或仅命名插件的,给定为 `name@marketplace`。没有 `--json` 时无效。如果名称没有安装记录,命令打印 `--data-size names a plugin that is not installed` 并退出 `1`,而不是打印列表。需要 Claude Code v2.1.285 或更高版本 |316| `--data-size [plugin]` | 测量每个已安装插件的[已保存数据目录](#what-an-uninstall-deletes-and-keeps),或仅测量以 `name@marketplace` 形式指定的插件。不使用 `--json` 时无效。如果该名称没有安装记录,命令会打印 `--data-size names a plugin that is not installed` 并以 `1` 退出,而不是打印列表。需要 Claude Code v2.1.285 或更高版本 |

301 317 

302Claude Code 按每个插件的加载方式对人类可读的输出进行分组:318Claude Code 按各插件的加载方式对人类可读的输出进行分组:

303 319 

304* **`Installed plugins:`**:你从市场安装的插件320* **`Installed plugins:`**:您从市场安装的插件

305* **`Session-only plugins (--plugin-dir / --plugin-url):`**:由同一命令中的这些标志加载的插件,如 `claude --plugin-dir ./my-plugin plugin list`321* **`Session-only plugins (--plugin-dir / --plugin-url):`**:由同一命令中的这些标志加载的插件,如 `claude --plugin-dir ./my-plugin plugin list`

306* **`Skills-directory plugins (.claude/skills/*):`**:Claude Code 在 skills 目录中找到的插件322* **`Skills-directory plugins (.claude/skills/*):`**:Claude Code 在 skills 目录中找到的插件

307* **`Synced from claude.ai`**:[从你的 claude.ai 账户同步的插件](/docs/zh-CN/plugins/loading#synced-plugins)323* **`Synced from claude.ai`**:[从您的 claude.ai 账户同步的插件](/docs/zh-CN/plugins/loading#synced-plugins)

308 324 

309当任何组中都没有内容时,Claude Code 打印 ``No plugins installed. Use `claude plugin install` to install a plugin.``325当所有分组都为空时,Claude Code 打印 ``No plugins installed. Use `claude plugin install` to install a plugin.``

310 326 

311<h4 id="json-output">327<h4 id="json-output">

312 JSON 输出328 JSON 输出

313</h4>329</h4>

314 330 

315使用 `--json` 时,Claude Code 打印一个数组,每个安装一个对象。每个对象携带下面的字段。`id`、`version`、`scope`、`enabled` 和 `installPath` 始终存在,其他仅在适用时出现。331使用 `--json` 时,Claude Code 打印一个数组,每个安装对应一个对象。每个对象携带以下字段。`id`、`version`、`scope`、`enabled` 和 `installPath` 始终存在,其他字段仅在适用时出现。

316 332 

317| 字段 | 类型 | 描述 |333| 字段 | 类型 | 描述 |

318| :- | :- | :- |334| :- | :- | :- |

319| `id` | string | 安装时为 `name@marketplace`,会话内插件为 `name@inline`,skills-directory 插件为 `name@skills-dir`,从 claude.ai 同步的插件为 `name@synced` |335| `id` | string | 安装的插件为 `name@marketplace`,仅限会话的插件为 `name@inline`,skills-directory 插件为 `name@skills-dir`,从 claude.ai 同步的插件为 `name@synced` |

320| `version` | string | 对于市场安装,[Claude Code 在安装时计算的](/docs/zh-CN/plugins/loading#versions-and-updates) 版本。对于会话内、skills-directory 或同步插件,清单的 `version`,或当它不声明时为 `unknown` |336| `version` | string | 对于市场安装,为 [Claude Code 在安装时计算的版本](/docs/zh-CN/plugins/loading#versions-and-updates)。对于仅限会话、skills-directory 或同步插件,为清单的 `version`,未声明时为 `unknown` |

321| `scope` | string | 安装时为 `user`、`project`、`local` 或 `managed`;skills-directory 插件为 `user` 或 `project`;会话内插件为 `session`;从 claude.ai 同步的插件为 `synced` |337| `scope` | string | 安装的插件为 `user`、`project`、`local` 或 `managed`;skills-directory 插件为 `user` 或 `project`;仅限会话的插件为 `session`;从 claude.ai 同步的插件为 `synced` |

322| `enabled` | boolean | 插件在你的合并设置中是否启用 |338| `enabled` | boolean | 插件在合并后的设置中是否启用 |

323| `installPath` | string | 插件加载的目录 |339| `installPath` | string | 插件加载所在的目录 |

324| `installedAt` | string | 安装的 ISO 时间戳。仅市场安装 |340| `installedAt` | string | 安装的 ISO 时间戳。仅限市场安装 |

325| `lastUpdated` | string | 最后更新的 ISO 时间戳。仅市场安装 |341| `lastUpdated` | string | 最后更新的 ISO 时间戳。仅限市场安装 |

326| `projectPath` | string | 安装所属的项目。仅 `project` 和 `local` 作用域 |342| `projectPath` | string | 安装所属的项目。仅限 `project` 和 `local` 作用域 |

327| `mcpServers` | object | 插件的 MCP 服务器定义,当市场安装的插件有任何时 |343| `mcpServers` | object | 插件的 MCP 服务器定义,仅当市场安装的插件包含 MCP 服务器时出现 |

328| `errors` | array of strings | 加载错误,当插件加载失败时 |344| `errors` | array of strings | 加载错误,仅当插件加载失败时出现 |

329| `notes` | array of strings | 插件加载并工作的创作警告 |345| `notes` | array of strings | 非加载错误的警告,例如编写问题或[未安装的软件包](/docs/zh-CN/plugins/loading#when-the-dependency-install-fails-or-is-skipped) |

330| `errorDetails` | array of objects | 每个 `errors` 条目一个对象,给出其诊断 `type` 和它引用的名称,例如插件、市场、服务器或文件。需要 Claude Code v2.1.268 或更高版本 |346| `errorDetails` | array of objects | 每个 `errors` 条目对应一个对象,给出其诊断 `type` 以及它所引用的名称,例如插件、市场、服务器或文件。需要 Claude Code v2.1.268 或更高版本 |

331| `noteDetails` | array of objects | 每个 `notes` 条目的相同详细对象。需要 Claude Code v2.1.268 或更高版本 |347| `noteDetails` | array of objects | 每个 `notes` 条目对应的相同详细对象。需要 Claude Code v2.1.268 或更高版本 |

332| `hasUserConfig` | boolean | 当插件加载且其清单声明 [`userConfig` 选项](/docs/zh-CN/plugins/manifest-reference#user-configuration) 时存在且为 `true`。对于加载失败的插件不存在,无论其清单声明什么。保存的值永远不包括。需要 Claude Code v2.1.285 或更高版本 |348| `hasUserConfig` | boolean | 当插件已加载且其清单声明了 [`userConfig` 选项](/docs/zh-CN/plugins/manifest-reference#user-configuration)时存在且为 `true`。对于加载失败的插件,无论其清单声明什么,该字段都不存在。永远不包含已保存的值。需要 Claude Code v2.1.285 或更高版本 |

333| `projectEnabled` | boolean | 项目的共享 `.claude/settings.json` 是否打开插件。仅市场安装。需要 Claude Code v2.1.285 或更高版本 |349| `projectEnabled` | boolean | 项目共享的 `.claude/settings.json` 是否启用该插件。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

334| `dataDirSize` | object | 使用 `--data-size` 时,插件的 [保存数据目录](#what-an-uninstall-deletes-and-keeps) 的大小为 `bytes` 和 `human`;当目录缺失或为空时不存在。仅市场安装。需要 Claude Code v2.1.285 或更高版本 |350| `dataDirSize` | object | 使用 `--data-size` 时,以 `bytes` 和 `human` 表示的插件[已保存数据目录](#what-an-uninstall-deletes-and-keeps)大小;目录缺失或为空时不存在。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

335| `dataDirUnreadable` | boolean | 使用 `--data-size` 时,当保存的数据目录存在但无法测量时为 `true`。仅市场安装。需要 Claude Code v2.1.285 或更高版本 |351| `dataDirUnreadable` | boolean | 使用 `--data-size` 时,如果已保存的数据目录存在但无法测量,则为 `true`。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

336 352 

337使用 `--json --available` 时,Claude Code 打印一个对象而不是数组。其 `installed` 字段保存已安装插件对象的数组,其 `available` 字段保存每个未安装的市场插件的一个对象,带有下面的字段。353使用 `--json --available` 时,Claude Code 打印一个对象而不是数组。其 `installed` 字段包含已安装插件对象的数组,其 `available` 字段为每个未安装的市场插件包含一个对象,带有以下字段。

338 354 

339| 字段 | 类型 | 描述 |355| 字段 | 类型 | 描述 |

340| :- | :- | :- |356| :- | :- | :- |

341| `pluginId` | string | `name@marketplace` |357| `pluginId` | string | `name@marketplace` |

342| `name` | string | 插件在市场中的名称 |358| `name` | string | 插件在市场中的名称 |

343| `marketplaceName` | string | 提供它的市场 |359| `marketplaceName` | string | 提供该插件的市场 |

344| `source` | string or object | 市场条目的 [source](/docs/zh-CN/plugins/marketplace-reference):相对路径为字符串,否则为对象 |360| `source` | string or object | 市场条目的 [source](/docs/zh-CN/plugins/marketplace-reference):相对路径为字符串,否则为对象 |

345| `description` | string | 条目的描述,当它有时 |361| `description` | string | 条目的描述(如有) |

346| `version` | string | 条目的版本,当它声明时 |362| `version` | string | 条目的版本(如有声明) |

347| `installCount` | number | 安装计数,当 Claude Code 有插件的时 |363| `installCount` | number | 安装次数(当 Claude Code 有该插件的安装次数时) |

348 364 

349<h3 id="plugin-details">365<h3 id="plugin-details">

350 plugin details366 plugin details

351</h3>367</h3>

352 368 

353显示插件的组件清单及其预计令牌成本。369显示插件的组件清单及其预计 token 成本。

354 370 

355插件必须被加载:已安装、在 skills 目录中找到,或在同一命令中使用 `--plugin-dir` 或 `--plugin-url` 传递。`<name>` 是插件 `name` 或 `name@marketplace`。371插件必须已加载:已安装、在 skills 目录中找到,或在同一命令中通过 `--plugin-dir` 或 `--plugin-url` 传入。`<name>` 是插件 `name` 或 `name@marketplace`。

356 372 

357```bash theme={null}373```bash theme={null}

358claude plugin details <name>374claude plugin details <name>

359```375```

360 376 

361该命令除了 `--help` 外不接受标志。377该命令除 `--help` 外不接受任何标志。

362 378 

363显示已安装插件贡献的内容:379显示已安装插件提供的内容:

364 380 

365```bash theme={null}381```bash theme={null}

366claude plugin details formatter382claude plugin details formatter

367```383```

368 384 

369Claude Code 打印插件的名称、版本、描述和源,然后是这些部分:385Claude Code 打印插件的名称、版本、描述和来源,然后打印以下部分:

370 386 

371* **`Component inventory`**:插件的 skills、agents、hooks、MCP 服务器和 LSP 服务器387* **`Component inventory`**:插件的 skill、Agent、hook、MCP 服务器和 LSP 服务器

372* **`Projected token cost`**:插件添加到每个会话的始终开启令牌388* **`Projected token cost`**:插件添加到每个会话的常驻 token

373* **`Per-component (rounded)`**:每个 skill、agent 和命令的始终开启和按调用估计。当插件没有时省略389* **`Per-component (rounded)`**:每个 skill、Agent 和命令的常驻和调用时估算值。插件没有这些组件时省略

374 390 

375对于两个成本数字的含义,请参阅 [测量插件成本和使用](/docs/zh-CN/plugins/measure)。391有关这两个成本数字的含义,请参阅[衡量插件成本和使用情况](/docs/zh-CN/plugins/measure)。

376 392 

377对于未加载的插件,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`。393对于未加载的插件,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` 退出。

378 394 

379<h3 id="plugin-configure">395<h3 id="plugin-configure">

380 plugin configure396 plugin configure

381</h3>397</h3>

382 398 

383显示已安装插件的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference#user-configuration) 选项及其设置的选项,或保存在 stdin 上管道传入的值。需要 Claude Code v2.1.285 或更高版本。399显示已安装插件的 [`userConfig`](/docs/zh-CN/plugins/manifest-reference#user-configuration) 选项及哪些已设置,或保存通过 stdin 管道传入的值。需要 Claude Code v2.1.285 或更高版本。

384 400 

385```bash theme={null}401```bash theme={null}

386claude plugin configure <plugin>402claude plugin configure <plugin>


388 404 

389| 标志 | 描述 |405| 标志 | 描述 |

390| :- | :- |406| :- | :- |

391| `--values-stdin` | 从 stdin 读取选项值作为单行字符串的 JSON 对象并保存它们。你留出的选项保留其保存的值 |407| `--values-stdin` | 从 stdin 读取以单行字符串组成的 JSON 对象形式的选项值并保存。未提供的选项保留其已保存的值 |

392| `--json` | 将结果打印为 stdout 上的一个 JSON 对象。不使用 `--values-stdin` 时,对象携带选项的 `schema` 和 `choices`、它们的起始 `inputs` 和 `configured` 和 `unconfigured` 选项名称。使用 `--values-stdin` 时,它携带 `saved` 选项名称和,当它们可以被读回时,`unconfigured` 的名称 |408| `--json` | 将结果作为一个 JSON 对象打印在 stdout 上。不使用 `--values-stdin` 时,该对象携带选项的 `schema` 和 `choices`、它们的初始 `inputs`,以及 `configured` 和 `unconfigured` 选项名称。使用 `--values-stdin` 时,它携带 `saved` 选项名称,以及在可读回时的 `unconfigured` 选项名称 |

393 409 

394不使用标志时,命令列出每个选项,最多三个标签:`required` 或 `optional`,然后 `sensitive` 用于清单声明敏感的选项,然后 `set` 或 `not set`。它不打印保存的值。使用 `--json` 时,输出包括不敏感的选项的保存值,永远不包括敏感的文本。410不使用标志时,命令列出每个选项,最多带三个标签:`required` 或 `optional`,然后是用于清单声明为敏感的选项的 `sensitive`,然后是 `set` 或 `not set`。它不打印已保存的值。使用 `--json` 时,输出包括非敏感选项的已保存值,但永远不包括敏感选项的文本。

395 411 

396要保存值,将它们写入文件作为将选项键映射到字符串值的 JSON 对象,然后在 stdin 上传递文件。将 `formatter@my-marketplace` 替换为你自己的插件的 id,如 `claude plugin list` 所示。此示例从包含 `{"api_url": "https://example.com"}` 的文件 `values.json` 设置一个名为 `api_url` 的选项:412要保存值,请将其写入一个文件,作为将选项键映射到字符串值的 JSON 对象,然后通过 stdin 传入该文件。将 `formatter@my-marketplace` 替换为 `claude plugin list` 中显示的您自己插件的 id。此示例从包含 `{"api_url": "https://example.com"}` 的文件 `values.json` 设置一个名为 `api_url` 的选项:

397 413 

398```bash theme={null}414```bash theme={null}

399claude plugin configure formatter@my-marketplace --values-stdin < values.json415claude plugin configure formatter@my-marketplace --values-stdin < values.json

400```416```

401 417 

402Claude Code 根据选项的声明类型验证每个值并打印 `Configuration saved. Restart Claude Code to apply it.` 如果你传递清单不声明的键,或失败验证的值,命令不保存任何内容,打印 `Failed to save configuration:` 带原因,并退出 `1`。使用 `--json` 时,拒绝的值也打印 stdout 上的对象,其 `refused` 字段携带 `message` 和,当一个选项有问题时,其 `option` 键。418Claude Code 根据选项声明的类型验证每个值,并打印 `Configuration saved. Restart Claude Code to apply it.` 如果传递了清单未声明的键,或未通过验证的值,命令不保存任何内容,打印 `Failed to save configuration:` 及原因,并以 `1` 退出。使用 `--json` 时,被拒绝的值还会在 stdout 上打印一个对象,其 `refused` 字段携带 `message`,以及在某个选项出错时该选项的 `option` 键。

403 419 

404传递插件的完整 `name@marketplace` id,如 `claude plugin list` 所示。`configure` 不接受裸 `name`。当没有加载的插件有该 id 时,命令打印 `No installed plugin has the id "<plugin>".` 并退出 `1`。420请传递 `claude plugin list` 中显示的插件完整 `name@marketplace` id。`configure` 不接受裸 `name`。当没有已加载的插件具有该 id 时,命令打印 `No installed plugin has the id "<plugin>".` 并以 `1` 退出。

405 421 

406对于捆绑 MCP 服务器的设置,请参阅 [`plugin install --config`](#plugin-install) 或 `/plugin` 中的 **Configure** 项。422有关捆绑 MCP 服务器的设置,请参阅 [`plugin install --config`](#plugin-install) 或 `/plugin` 中的 **Configure** 项。

407 423 

408<h3 id="plugin-prune">424<h3 id="plugin-prune">

409 plugin prune425 plugin prune

410</h3>426</h3>

411 427 

412移除自动安装的 [依赖项](/docs/zh-CN/plugins/dependencies),没有已安装的插件需要。命令永远不会移除你自己安装的插件。`autoremove` 是 `prune` 的别名。428移除不再被任何已安装插件需要的自动安装[依赖项](/docs/zh-CN/plugins/dependencies)。该命令永远不会移除您自己安装的插件。`autoremove` 是 `prune` 的别名。

413 429 

414```bash theme={null}430```bash theme={null}

415claude plugin prune [options]431claude plugin prune [options]


417 433 

418| 标志 | 描述 |434| 标志 | 描述 |

419| :- | :- |435| :- | :- |

420| `-s, --scope <scope>` | 在作用域处修剪:`user`、`project` 或 `local`。默认为 `user` |436| `-s, --scope <scope>` | 在指定作用域清理:`user`、`project` 或 `local`。默认为 `user` |

421| `--dry-run` | 列出将被移除的内容而不移除它 |437| `--dry-run` | 列出将被移除的内容,但不实际移除 |

422| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时需要 |438| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时必须提供 |

423 439 

424预览修剪将移除的内容:440预览清理将移除的内容:

425 441 

426```bash theme={null}442```bash theme={null}

427claude plugin prune --dry-run443claude plugin prune --dry-run

428```444```

429 445 

430Claude Code 列出孤立的依赖项并以 `(dry run — nothing removed)` 结尾。没有要移除的内容时,它打印以 `Nothing to prune` 开头的行。446Claude Code 列出孤立的依赖项,并以 `(dry run — nothing removed)` 结尾。没有可移除的内容时,它会打印以 `Nothing to prune` 开头的行。

431 447 

432不使用 `--dry-run` 时,命令仅在你在提示处确认或传递 `-y` 后移除孤立的依赖项。448不使用 `--dry-run` 时,命令仅在您于提示处确认或传递 `-y` 后才移除孤立的依赖项。

433 449 

434无论你在提示处的答案如何,退出代码都是 `0`。450无论您在提示处如何回答,退出码都是 `0`。

435 451 

436`prune` 的作用取决于是否附加了终端以及你是否传递了 `-y`:452`prune` 的行为取决于是否连接了终端以及是否传递了 `-y`:

437 453 

438| 终端和标志 | 发生的情况 |454| 终端和标志 | 发生的情况 |

439| :- | :- |455| :- | :- |


445 plugin eval461 plugin eval

446</h3>462</h3>

447 463 

448运行插件的 [eval 案例](/docs/zh-CN/plugin-evals) 并报告评分结果。需要 Claude Code v2.1.269 或更高版本。464运行插件的 [eval 案例](/docs/zh-CN/plugin-evals)并报告评分结果。需要 Claude Code v2.1.269 或更高版本。

449 465 

450每个案例是一个提示加评分器。Claude Code 在隔离的会话中运行它多次,仅加载目标插件,默认情况下也不加载插件,所以报告显示差异。466每个案例由一个提示词加评分器组成。Claude Code 在仅加载目标插件的隔离会话中多次运行它,并且默认还会在不加载插件的情况下运行,以便报告显示两者的差异。

451 467 

452请参阅 [使用 evals 测试插件](/docs/zh-CN/plugin-evals) 了解案例格式、评分器、结果和 CI 使用。468有关案例格式、评分器、结果和 CI 用法,请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)。

453 469 

454```bash theme={null}470```bash theme={null}

455claude plugin eval [target] [options]471claude plugin eval [target] [options]

456```472```

457 473 

458可选的 `target` 默认为当前目录,并采用以下任何形式:474可选的 `target` 默认为当前目录,可采用以下任一形式:

459 475 

460* 插件目录476* 插件目录

461* 单个 `prompt.md` 或 `case.yaml` 文件477* 单个 `prompt.md` 或 `case.yaml` 文件

462* 已安装的插件作为 `name` 或 `name@marketplace`478* 以 `name` 或 `name@marketplace` 形式指定的已安装插件

463* `name@skills-dir`479* `name@skills-dir`

464 480 

465将目标放在 `--tag`、`--allow-tools` 和 `--json` 之前。这些选项中的每一个都将其后的单词作为其值,所以在其中一个之后写入的目标被读作标签、工具名称或 JSON 输出路径,而不是目标。481请将目标放在 `--tag`、`--allow-tools` 和 `--json` 之前。这些选项会将其后的单词都作为自己的值,因此写在它们之后的目标会被读作标签、工具名称或 JSON 输出路径,而不是目标。

466 482 

467此表列出大多数运行使用的选项。运行 `claude plugin eval --help` 以获取完整集合,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。483此表列出大多数运行使用的选项。运行 `claude plugin eval --help` 可查看完整选项集,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。

468 484 

469| 选项 | 描述 | 默认 |485| 选项 | 描述 | 默认值 |

470| :- | :- | :- |486| :- | :- | :- |

471| `--runs <n>` | 每个 [arm](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) 中每个案例的运行 | 每个案例的 `runs`,否则 3 |487| `--runs <n>` | 每个 [arm](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) 中每个案例的运行次数 | 每个案例的 `runs`,否则为 3 |

472| `-j, --concurrency <n>` | 一次运行的代理会话,1 到 8。它们共享你的速率限制 | `1` |488| `-j, --concurrency <n>` | 同时运行的 Agent 会话数,1 到 8。它们共享您的速率限制 | `1` |

473| `--model <model>` | 被测试代理的模型 | 每个案例的 `model`,否则 `ANTHROPIC_MODEL` 如果设置,否则 Claude Code 的默认值 |489| `--model <model>` | 被测 Agent 使用的模型 | 每个案例的 `model`;否则如已设置则为 `ANTHROPIC_MODEL`;否则为 Claude Code 的默认模型 |

474| `--judge-model <model>` | `llm` 和 `baseline` 评分器的模型 | 一个小的快速模型 |490| `--judge-model <model>` | `llm` 和 `baseline` 评分器使用的模型 | [后台任务](/docs/zh-CN/plugin-evals#grade-the-result)使用的模型 |

475| `--ablation <mode>` | `none` 或 `with-without`。请参阅 [与无插件基线比较](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) | 当插件解析时为 `with-without`,否则 `none` |491| `--ablation <mode>` | `none` 或 `with-without`。请参阅[根据无插件基线评分](/docs/zh-CN/plugin-evals#compare-against-a-no-plugin-baseline) | 按案例决定,如该章节所述 |

476| `--threshold <0..1>` | 如果任何案例评分低于此,退出 1 | `1.0` |492| `--threshold <0..1>` | 如果任何案例的得分低于此值,则以 1 退出 | `1.0` |

477| `--max-cost-usd <usd>` | 一旦支出达到此值,在下一次运行前停止,退出 2,并报告部分结果 | 无限制 |493| `--max-cost-usd <usd>` | 一旦支出达到此值,在下一次运行前停止,以 2 退出,并报告部分结果 | 无限制 |

478| `--allow-tools <tools...>` | 授予超出只读集合的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅 [授予工具](/docs/zh-CN/plugin-evals#grant-tools) | |494| `--allow-tools <tools...>` | 授予只读工具集之外的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅[授予工具](/docs/zh-CN/plugin-evals#grant-tools) | |

479| `--scaffold` | 运行每个案例的 [`scaffold_script`](/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |495| `--scaffold` | 运行每个案例的 [`scaffold_script`](/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |

480| `--trust-plugin` | 跳过首次运行信任提示,用于 CI。请参阅 [运行可以访问的内容](/docs/zh-CN/plugin-evals#security) | 关闭 |496| `--trust-plugin` | 跳过首次运行的信任提示,用于 CI。请参阅[运行可以访问的内容](/docs/zh-CN/plugin-evals#security) | 关闭 |

481| `--mocks <mode>` | `record` 或 `off`。请参阅 [模拟 MCP 服务器](/docs/zh-CN/plugin-evals#mock-mcp-servers) | `record` |497| `--mocks <mode>` | `record` 或 `off`。请参阅[模拟 MCP 服务器](/docs/zh-CN/plugin-evals#mock-mcp-servers) | `record` |

482| `--eval-dir <dir>` | 插件下方保存案例的目录 | 清单的 `experimental.evals`,否则 `evals` |498| `--eval-dir <dir>` | 插件下存放案例的目录 | 清单的 `experimental.evals`,否则为 `evals` |

483| `--json [path]` | 将 [结果文档](/docs/zh-CN/plugin-evals#json-result) 打印到 stdout,或写入 `.json` 路径 | |499| `--json [path]` | 将[结果文档](/docs/zh-CN/plugin-evals#json-result)打印到 stdout,或写入 `.json` 路径 | |

484| `--no-publish` | 保持 HTML 报告本地 | |500| `--no-publish` | 将 HTML 报告保留在本地 | |

485 501 

486退出代码报告运行如何结束。要在管道中对其进行操作,请参阅 [在 CI 中运行 evals](/docs/zh-CN/plugin-evals#run-evals-in-ci)。502退出码反映运行的结束方式。如需在流水线中据此采取操作,请参阅[在 CI 中运行 evals](/docs/zh-CN/plugin-evals#run-evals-in-ci)。

487 503 

488| 退出代码 | 含义 |504| 退出码 | 含义 |

489| :- | :- |505| :- | :- |

490| `0` | 每个案例都满足阈值 |506| `0` | 所有案例都达到阈值 |

491| `1` | 失败的案例、加载错误或不受信任的插件目录 |507| `1` | 存在失败的案例、加载错误或不受信任的插件目录 |

492| `2` | 部分运行 |508| `2` | 部分运行 |

493| `130` | 中断 |509| `130` | 被中断 |

494| `143` | 终止 |510| `143` | 被终止 |

495 511 

496<h3 id="plugin-eval-init">512<h3 id="plugin-eval-init">

497 plugin eval init513 plugin eval init

498</h3>514</h3>

499 515 

500为当前目录中的插件创建 eval 套件。需要 Claude Code v2.1.269 或更高版本。请参阅 [创建你的第一个 eval 套件](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)。516为当前目录中的插件创建 eval 套件。需要 Claude Code v2.1.269 或更高版本。请参阅[创建您的第一个 eval 套件](/docs/zh-CN/plugin-evals#create-your-first-eval-suite)。

501 517 

502```bash theme={null}518```bash theme={null}

503claude plugin eval init [name] [options]519claude plugin eval init [name] [options]

504```520```

505 521 

506从插件的根文件夹运行命令,即保存 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录。要有意在另一个目录中搭建套件,传递 `--eval-dir`。522请从插件的根文件夹运行该命令,即包含 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录。如需有意在其他目录中搭建套件,请传递 `--eval-dir`。

507 523 

508在终端中,命令打开交互式 Claude Code 会话进行创作访谈。在访谈中,Claude 执行以下操作:524在终端中,该命令会打开一个交互式 Claude Code 会话进行编写访谈。在访谈中,Claude 会执行以下操作:

509 525 

5101. 读取插件5261. 读取插件

5112. 询问你它应该做什么5272. 询问您插件应擅长做什么

5123. 提议案例和评分器5283. 提议案例和评分器

5134. 写入案例文件5294. 写入案例文件

5145. 运行案例并与你一起查看评分,以检查评分器是否按你的方式评分5305. 运行案例并与您一起审查评分,以检查评分器的打分方式是否与您一致

515 531 

516使用 `--bare` 或没有终端时,命令改为写入空白单案例模板。当 Claude 从 Claude Code 会话内运行命令时,命令打印该会话要遵循的访谈说明,而不是写入模板。532使用 `--bare` 或没有终端时,该命令改为写入一个空白的单案例模板。当 Claude 从 Claude Code 会话内运行该命令时,命令会打印供该会话遵循的访谈说明,而不是写入模板。

517 533 

518可选的 `name` 是案例名称。它与 `--bare` 或没有终端时需要,因为命令为该案例写入空白模板。案例名称以字母或数字开头,仅包含字母、数字、`.`、`_` 和 `-`。在每个平台上,命令也拒绝 Windows 无法存储的名称,例如 `con` 或以 `.` 结尾的名称。534可选的 `name` 是案例名称。使用 `--bare` 或没有终端时必须提供,因为命令会为该案例写入空白模板。案例名称以字母或数字开头,且仅包含字母、数字、`.`、`_` 和 `-`。在所有平台上,命令还会拒绝 Windows 无法存储的名称,例如 `con` 或以 `.` 结尾的名称。

519 535 

520命令接受这些选项:536该命令接受以下选项:

521 537 

522| 选项 | 描述 | 默认 |538| 选项 | 描述 | 默认值 |

523| :- | :- | :- |539| :- | :- | :- |

524| `--bare` | 为 `<name>` 写入空白 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |540| `--bare` | 为 `<name>` 写入空白的 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |

525| `-i, --interactive` | 需要访谈。没有终端时失败,而不是写入模板 | |541| `-i, --interactive` | 要求进行访谈。没有终端时失败,而不是写入模板 | |

526| `--eval-dir <dir>` | 当前目录下写入案例的目录 | 清单的 `experimental.evals`,否则 `evals` |542| `--eval-dir <dir>` | 当前目录下写入案例的目录 | 清单的 `experimental.evals`,否则为 `evals` |

527 543 

528<h3 id="plugin-tag">544<h3 id="plugin-tag">

529 plugin tag545 plugin tag

530</h3>546</h3>

531 547 

532为插件发布创建名为 `<name>--v<version>` 的带注释 git 标签。在标记前,命令检查插件的 `plugin.json` 和任何列出它的市场条目在版本上是否一致。548为插件发布创建名为 `<name>--v<version>` 的带注释 git 标签。在打标签之前,命令会检查插件的 `plugin.json` 与列出该插件的任何市场条目在版本上是否一致。

533 549 

534关于何时标记发布,请参阅 [发布插件](/docs/zh-CN/plugins/publish)。550有关何时为发布打标签,请参阅[发布插件](/docs/zh-CN/plugins/publish)。

535 551 

536```bash theme={null}552```bash theme={null}

537claude plugin tag [path] [options]553claude plugin tag [path] [options]

538```554```

539 555 

540`[path]` 是插件目录,默认为当前目录。命令通过从该目录向上走到列出插件的 `.claude-plugin/marketplace.json` 来找到市场条目。556`[path]` 是插件目录,默认为当前目录。命令从该目录向上查找,直到找到列出该插件的 `.claude-plugin/marketplace.json`,以此定位市场条目。

541 557 

542| 标志 | 描述 |558| 标志 | 描述 |

543| :- | :- |559| :- | :- |

544| `--push` | 创建标签后推送到 `--remote` |560| `--push` | 创建标签后将其推送到 `--remote` |

545| `--dry-run` | 打印将被标记的内容而不创建标签 |561| `--dry-run` | 打印将要打的标签,但不创建标签 |

546| `-f, --force` | 跳过脏工作树和标签已存在检查 |562| `-f, --force` | 跳过工作树不干净和标签已存在的检查 |

547| `-m, --message <msg>` | 标签注释消息。`%s` 代表版本。默认为 `<name> <version>` |563| `-m, --message <msg>` | 标签注释消息。`%s` 代表版本。默认为 `<name> <version>` |

548| `--remote <name>` | 使用 `--push` 推送到的远程。默认为 `origin` |564| `--remote <name>` | 使用 `--push` 时推送到的远程。默认为 `origin` |

549 565 

550预览市场检出中插件的标签:566预览市场检出中某个插件的标签:

551 567 

552```bash theme={null}568```bash theme={null}

553claude plugin tag plugins/formatter --dry-run569claude plugin tag plugins/formatter --dry-run


556Claude Code 打印计划:572Claude Code 打印计划:

557 573 

558* 插件名称574* 插件名称

559* 版本及其来自的文件575* 版本及其来源文件

560* 匹配的市场条目,当有时576* 匹配的市场条目(如有)

561* 标签名称577* 标签名称

562* 它将运行的 `git tag` 和 `git push` 命令578* 它将运行的 `git tag` 和 `git push` 命令

563 579 

564不使用 `--dry-run` 时,Claude Code 打印 `Created tag formatter--v1.0.0` 并打印 `Pushed to origin` 或你自己运行的推送命令。如果推送失败,标签仍在本地创建,命令以错误退出。580不使用 `--dry-run` 时,Claude Code 打印 `Created tag formatter--v1.0.0`,并打印 `Pushed to origin` 或需要您自己运行的推送命令。如果推送失败,标签仍会在本地创建,命令以错误退出。

565 581 

566当命令无法安全标记时,它退出 `1` 并打印原因。常见原因是:582当无法安全打标签时,命令以 `1` 退出并打印原因。常见原因如下:

567 583 

568* `plugin.json` 或市场条目中没有 `version`584* `plugin.json` 或市场条目中没有 `version`

569* 标签已存在585* 标签已存在

570* 工作树是脏的586* 工作树不干净

587 

588<h3 id="plugin-test">

589 plugin test

590</h3>

591 

592运行 [mod](/docs/zh-CN/plugins/mods/overview) 的测试,mod 是通过代码注册事件处理程序的插件。该命令无需会话、登录或网络。有关如何编写测试,请参阅[测试 mod](/docs/zh-CN/plugins/mods/test)。

593 

594```bash theme={null}

595claude plugin test [directory]

596```

597 

598`[directory]` 是 mod 的目录,默认为当前目录。该命令会运行其下所有名称以 `.test.ts` 或 `.test.tsx` 结尾的文件,并在有测试失败时以状态 1 退出。

599 

600运行 `./first-mod` 中 mod 的测试:

601 

602```bash theme={null}

603claude plugin test ./first-mod

604```

571 605 

572<h3 id="plugin-validate">606<h3 id="plugin-validate">

573 plugin validate607 plugin validate

574</h3>608</h3>

575 609 

576验证插件清单、市场清单或目录中的 skills、agents 和命令,并以 CI 作业可以操作的代码退出。对于创建、测试和编辑工作流,请参阅 [创建插件](/docs/zh-CN/plugins/create)。对于验证器在每个清单中检查的内容,请参阅 [插件清单参考](/docs/zh-CN/plugins/manifest-reference) 和 [市场参考](/docs/zh-CN/plugins/marketplace-reference)。610验证插件清单、市场清单或目录中的 skill、Agent 和命令,并以 CI 作业可据此操作的退出码退出。有关创建、测试和编辑工作流,请参阅[创建插件](/docs/zh-CN/plugins/create)。有关验证器在各清单中检查的内容,请参阅[插件清单参考](/docs/zh-CN/plugins/manifest-reference)和[市场参考](/docs/zh-CN/plugins/marketplace-reference)。

577 611 

578```bash theme={null}612```bash theme={null}

579claude plugin validate <path> [options]613claude plugin validate <path> [options]


581 615 

582| 标志 | 描述 |616| 标志 | 描述 |

583| :- | :- |617| :- | :- |

584| `--strict` | 将警告视为错误,所以运行时容忍的未识别字段和缺失元数据失败。需要 Claude Code v2.1.145 或更高版本 |618| `--strict` | 将警告视为错误,使运行时可容忍的未识别字段和缺失元数据导致运行失败。需要 Claude Code v2.1.145 或更高版本 |

585| `--json` | 将验证报告输出为一个 JSON 对象,具有相同的退出代码。需要 Claude Code v2.1.259 或更高版本 |619| `--json` | 将验证报告输出为一个 JSON 对象,退出码相同。需要 Claude Code v2.1.259 或更高版本 |

586 620 

587在提交前验证插件:621在提交前验证插件:

588 622 


594 验证目录628 验证目录

595</h4>629</h4>

596 630 

597`<path>` 是清单文件或目录。给定目录,Claude Code 通过它找到的内容选择要验证的内容:631`<path>` 是清单文件或目录。给定目录时,Claude Code 根据在其中找到的内容选择要验证的对象:

598 632 

599* `.claude-plugin/marketplace.json`,当它存在时633* `.claude-plugin/marketplace.json`(如果存在)

600* 否则 `.claude-plugin/plugin.json`634* 否则为 `.claude-plugin/plugin.json`

601* 否则组件文件,由目录的名称选择。在没有清单的情况下验证组件文件需要 Claude Code v2.1.233 或更高版本:635* 否则为组件文件,根据目录名称选择。在没有清单的情况下验证组件文件需要 Claude Code v2.1.233 或更高版本:

602 * 名为 `skills`、`agents` 或 `commands` 的目录:其中的文件636 * 名为 `skills`、`agents` 或 `commands` 的目录:其中的文件

603 * 名为 `.claude` 的目录:其中的 `skills`、`agents` 和 `commands` 目录637 * 名为 `.claude` 的目录:其中的 `skills`、`agents` 和 `commands` 目录

604 * 任何其他目录:其 `.claude` 下的这三个目录638 * 任何其他目录:其 `.claude` 下的这三个目录

605 639 

606Claude Code 不跟随你命名的目录内的符号链接。它的作用取决于链接的位置:640Claude Code 不会跟随您指定的目录内的符号链接。其行为取决于链接所在的位置:

607 641 

608* **插件或 `.claude` 根下的链接 `skills`、`agents` 或 `commands` 目录**:Claude Code 警告其中的任何内容都未被读取。642* **插件或 `.claude` 根目录下作为链接的 `skills`、`agents` 或 `commands` 目录**:Claude Code 会警告其中的任何内容都未被读取。

609* **`skills`、`agents` 或 `commands` 目录内的链接条目**:Claude Code 跳过它并警告,每个目录,它跳过了多少条目,会话会加载。643* **`skills`、`agents` 或 `commands` 目录内的链接条目**:Claude Code 会跳过它,并按目录警告跳过了多少会话本会加载的条目。

610* **你命名的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父 `.claude` 目录是**:Claude Code 报告错误并检查其中的任何内容。改为命名真实目录。644* **您指定的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父级 `.claude` 目录是符号链接**:Claude Code 报告错误,不检查其中的任何内容。请改为指定真实目录。

611 645 

612少数文件不被验证运行读取:646有少数文件不会被验证运行读取:

613 647 

614* **插件根处的 `SKILL.md`**:当你针对插件目录运行 `claude plugin validate` 时,Claude Code 不检查插件根处的 `SKILL.md`648* **插件根目录下的 `SKILL.md`**:针对插件目录运行 `claude plugin validate` 时,Claude Code 不会检查插件根目录下的 `SKILL.md`

615* **插件根处的 `CLAUDE.md`**:在插件运行中,Claude Code 也警告插件根处的 `CLAUDE.md`649* **插件根目录下的 `CLAUDE.md`**:在插件运行中,Claude Code 还会对插件根目录下的 `CLAUDE.md` 发出警告

616* **市场运行中的插件文件**:从市场目录,Claude Code 不打开插件的 skill、agent、command 或 hook 文件,或它们捆绑的 MCP 服务器文件。要在这些文件中找到错误,验证每个插件目录650* **市场运行中的插件文件**:从市场目录运行时,Claude Code 不会打开各插件的 skill、Agent、命令或 hook 文件,也不会打开它们捆绑的 MCP 服务器文件。要查找这些文件中的错误,请分别验证每个插件目录

617 651 

618<h4 id="output-and-exit-codes">652<h4 id="output-and-exit-codes">

619 输出和退出代码653 输出和退出码

620</h4>654</h4>

621 655 

622Claude Code 打印它验证的文件、任何错误和警告及其路径,以及判决行。退出代码遵循判决:656Claude Code 打印所验证的文件、所有错误和警告及其路径,以及一行结论。退出码与结论一致:

623 657 

624| 退出代码 | 判决行 | 含义 |658| 退出码 | 结论行 | 含义 |

625| :- | :- | :- |659| :- | :- | :- |

626| `0` | `Validation passed` 或 `Validation passed with warnings` | 清单加载。使用 `--strict` 时,也没有警告 |660| `0` | `Validation passed` 或 `Validation passed with warnings` | 清单可以加载。使用 `--strict` 时,也没有警告 |

627| `1` | `Validation failed` 或 `Validation failed (--strict treats warnings as errors)` | 错误,或 `--strict` 下的警告 |661| `1` | `Validation failed` 或 `Validation failed (--strict treats warnings as errors)` | 存在错误,或在 `--strict` 下存在警告 |

628| `2` | `Unexpected error during validation: <reason>` | 验证器本身失败,例如在不可读的路径上 |662| `2` | `Unexpected error during validation: <reason>` | 验证器本身失败,例如遇到不可读的路径 |

629 663 

630使用 `--json` 时,Claude Code 将报告作为一个 JSON 对象写入 stdout,具有这些顶级字段:664使用 `--json` 时,Claude Code 将报告作为一个 JSON 对象写入 stdout,包含以下顶级字段:

631 665 

632* `success`:退出代码给出的相同判决666* `success`:与退出码相同的结论

633* `strict`:运行是否将警告视为错误667* `strict`:运行是否将警告视为错误

634* `target`:Claude Code 验证的解析路径668* `target`:Claude Code 验证的解析后路径

635* `manifest`:清单自己的结果,或对没有清单的运行为 `null`669* `manifest`:清单自身的结果,对于没有清单的运行为 `null`

636* `contents`:每个文件的结果,命名其 `file` 并携带 `errors`、`warnings` 和 `notes` 数组670* `contents`:每个文件的结果,各自指明其 `file`,并携带 `errors`、`warnings` 和 `notes` 数组

637 671 

638在退出 `2` 时,命令不向 stdout 写入任何内容。错误消息转到 stderr。672以 `2` 退出时,命令不向 stdout 写入任何内容。错误消息输出到 stderr。

639 673 

640<h2 id="claude-plugin-marketplace-commands">674<h2 id="claude-plugin-marketplace-commands">

641 claude plugin marketplace 命令675 claude plugin marketplace 命令


802 836 

803`<plugin>` 是 plugin `name` 或 `name@marketplace`。837`<plugin>` 是 plugin `name` 或 `name@marketplace`。

804 838 

805下表列出每个会话形式。shell 子命令 `init`、`update`、`details`、`prune`、`eval` 和 `eval init` 没有会话形式。839下表列出每个会话形式。shell 子命令 `init`、`update`、`details`、`prune`、`eval`、`eval init` 和 `test` 没有会话形式。

806 840 

807| 命令 | 别名 | 它做什么 |841| 命令 | 别名 | 它做什么 |

808| :- | :- | :- |842| :- | :- | :- |

Details

52 </Step>52 </Step>

53 53 

54 <Step title="安装插件">54 <Step title="安装插件">

55 要安装在步骤 1 表格中为您的语言列出的插件,请在 Claude Code 会话中运行 `/plugin install`,将 `typescript-lsp` 替换为该插件的名称:55 在 VS Code 扩展或桌面应用中,请按照[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)操作,而不是执行此步骤。在终端中,运行 `claude` 启动 Claude Code,然后在其输入框中输入以下内容,将 `typescript-lsp` 替换为步骤 1 表格中为您的语言列出的插件:

56 56 

57 ```57 ```

58 /plugin install typescript-lsp@claude-plugins-official58 /plugin install typescript-lsp@claude-plugins-official

Details

435 435 

436<PluginExplorer>436<PluginExplorer>

437 <Piece id="manifest">437 <Piece id="manifest">

438 [清单](/docs/zh-CN/plugins/manifest-reference)是插件 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含插件的元数据和 Claude Code 提示用户的 `userConfig` 值。Claude Code 可以在没有清单的情况下加载插件,但 [Anthropic 的目录](/docs/zh-CN/plugins/publish#submit-to-anthropics-directory)需要它。在文件中,只有 `name` 是必需的。在这个文件中,`description` 是用户在 `/plugin` 中看到的插件文本,`version` 使用户保持在该版本,直到您更改它:438 [清单](/docs/zh-CN/plugins/manifest-reference)是插件 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含插件的元数据和 Claude Code 提示用户的 `userConfig` 值。Claude Code 可以在没有清单的情况下加载插件。在文件中,只有 `name` 是必需的。在这个文件中,`description` 是用户在 `/plugin` 中看到的插件文本,`version` 使用户保持在该版本,直到您更改它:

439 439 

440 ```json theme={null}440 ```json theme={null}

441 {441 {


507 </Piece>507 </Piece>

508 508 

509 <Piece id="monitors">509 <Piece id="monitors">

510 监视器是一个 shell 命令,Claude Code 在会话启动时在后台启动并保持运行直到会话结束,使用 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool)。它打印的内容作为通知到达 Claude。`when` 字段可以改为在命名 skill 首次运行时启动它。这个跟踪错误日志:510 监视器是一个 shell 命令,Claude Code 在会话启动时在后台启动它,并保持运行直到会话结束。它打印的内容作为通知到达 Claude。`when` 字段可以改为在命名 skill 首次运行时启动它。这个跟踪错误日志:

511 511 

512 ```json theme={null}512 ```json theme={null}

513 [513 [


1038 1038 

1039monitor 的命令在其启动位置和可以引用的内容方面受到限制:1039monitor 的命令在其启动位置和可以引用的内容方面受到限制:

1040 1040 

1041* **仅交互式会话**:插件 monitors 在交互式会话中启动,从不在带 `-p` 标志的非交互式模式中启动。它们也仅在 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool) 可用的地方启动1041* **仅限交互式会话**:插件 monitor 在交互式会话中启动,从不在使用 `-p` 标志的非交互模式中启动。在 API 提供商或遥测设置导致 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool) 不可用的会话中,它们也不会启动

1042* **无用户配置**:`command` 从环境中获取 [路径变量](#path-variables-and-persistent-data) 和 `${ENV_VAR}`,但从不获取 `${user_config.*}`。引用一个的 monitor 不启动,monitor 进程也不接收 `CLAUDE_PLUGIN_OPTION_<KEY>`1042* **无用户配置**:`command` 从环境中获取 [路径变量](#path-variables-and-persistent-data) 和 `${ENV_VAR}`,但从不获取 `${user_config.*}`。引用一个的 monitor 不启动,monitor 进程也不接收 `CLAUDE_PLUGIN_OPTION_<KEY>`

1043* **会话中期禁用**:如果你在会话中期禁用插件,Claude Code 不会停止已经运行的 monitors。它们在会话结束时停止1043* **会话中期禁用**:如果你在会话中期禁用插件,Claude Code 不会停止已经运行的 monitors。它们在会话结束时停止

1044 1044 

Details

130* `source`:Claude Code 从哪里获取 plugin。对于 marketplace 目录内的 plugin,写一个相对路径字符串,如[演练](#create-a-marketplace)中所示,或对于目录外的 plugin,写一个源对象。请参阅[选择 plugin 源](#choose-a-plugin-source)。130* `source`:Claude Code 从哪里获取 plugin。对于 marketplace 目录内的 plugin,写一个相对路径字符串,如[演练](#create-a-marketplace)中所示,或对于目录外的 plugin,写一个源对象。请参阅[选择 plugin 源](#choose-a-plugin-source)。

131* `description`:人们在 `/plugin` 中浏览你的 marketplace 时在 plugin 旁边看到的行。131* `description`:人们在 `/plugin` 中浏览你的 marketplace 时在 plugin 旁边看到的行。

132 132 

133有关完整的字段列表,请参阅[Plugin 条目](/docs/zh-CN/plugins/marketplace-reference#plugin-entries)。133有关完整的字段列表,请参阅[插件条目](/docs/zh-CN/plugins/marketplace-reference#plugin-entries),其中还介绍了条目可以设置的 [`plugin.json`](/docs/zh-CN/plugins/manifest-reference) 字段以及这些字段何时生效。

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 134 

137<h2 id="rules-for-plugin-entries">135<h2 id="rules-for-plugin-entries">

138 Plugin 条目的规则136 Plugin 条目的规则

Details

385 385 

386在 Claude Code 会话中,运行 `/plugin` 并转到 **Marketplaces** 选项卡。选择市场,然后选择 **Enable auto-update** 或 **Disable auto-update**。386在 Claude Code 会话中,运行 `/plugin` 并转到 **Marketplaces** 选项卡。选择市场,然后选择 **Enable auto-update** 或 **Disable auto-update**。

387 387 

388<h3 id="update-one-plugin-now">388<h3 id="update-plugins-now">

389 Update one plugin now389 Update plugins now

390</h3>390</h3>

391 391 

392在会话中,在 `/plugin` 中的 **Installed** 选项卡上打开插件并选择 **Update now**,或在 shell 中运行 `claude plugin update <plugin>@<marketplace>`。392要更新单个插件,请在会话中于 `/plugin` 的 **Installed** 选项卡上打开该插件并选择 **Update now**,或在 shell 中运行 `claude plugin update <plugin>@<marketplace>`。

393 

394没有可一次性更新所有插件的命令。要一次性更新您从某个市场安装的插件,请转到 `/plugin` 中的 **Marketplaces** 选项卡,选择该市场,然后选择 **Update marketplace**。这会刷新该市场的列表,更新您从中安装的插件,并报告留待您自行更新的任何插件。具有 [`command` source](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,或其市场条目设置了 `headersHelper` 命令的插件,不会通过这种方式更新,因此您需要在 **Installed** 选项卡上该插件的视图中更新它,或使用 `claude plugin update <plugin>@<marketplace>` 进行更新。

395 

396如果您在 shell 中运行不带名称的 `claude plugin marketplace update`,它会刷新每个市场的列表,但会将您已安装的插件保留在当前版本。

393 397 

394<h3 id="auto-update-from-a-private-marketplace">398<h3 id="auto-update-from-a-private-marketplace">

395 Auto-update from a private marketplace399 Auto-update from a private marketplace

plugins/loading.md +22 −17

Details

244 依赖项安装何时运行244 依赖项安装何时运行

245</h4>245</h4>

246 246 

247Claude Code 在创建复制的版本目录时在其内部运行安装:247Claude Code 每次创建复制的版本目录时,都会将依赖项安装到其中:

248 248 

249* 当您安装插件时249* 当您安装插件时

250* 当 Claude Code 将插件更新到新版本时250* 当 Claude Code 将插件更新到新版本时


252 252 

253对于从本地目录市场[就地加载](#in-place-and-copied-plugins)的相对路径插件,Claude Code 不会将依赖项安装到源目录中。自己在那里安装它们,或从 hook 安装到[`${CLAUDE_PLUGIN_DATA}`](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。253对于从本地目录市场[就地加载](#in-place-and-copied-plugins)的相对路径插件,Claude Code 不会将依赖项安装到源目录中。自己在那里安装它们,或从 hook 安装到[`${CLAUDE_PLUGIN_DATA}`](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。

254 254 

255安装仅在插件的根目录同时包含 `package.json` 和支持的锁定文件时运行。锁定文件决定 Claude Code 运行的命令:255安装仅在插件的根目录同时包含 `package.json` 和支持的锁定文件时运行。

256 256 

257| 锁定文件 | 命令 |257锁定文件决定 Claude Code 运行哪个包管理器:

258 

259| 锁定文件 | 包管理器 |

258| :- | :- |260| :- | :- |

259| `bun.lock` 或 `bun.lockb` | `bun install --frozen-lockfile --ignore-scripts` |261| `bun.lock` | Bun |

260| `npm-shrinkwrap.json` 或 `package-lock.json` | `npm ci --ignore-scripts` |262| `npm-shrinkwrap.json` 或 `package-lock.json` | npm |

261 263 

262如果插件包含这些锁定文件中的多个,Claude Code 使用第一个匹配项,按顺序检查:`bun.lock`、`bun.lockb`、`npm-shrinkwrap.json`、`package-lock.json`。264如果插件包含这些锁定文件中的多个,Claude Code 使用第一个匹配项,按顺序检查:`bun.lock`、`npm-shrinkwrap.json`、`package-lock.json`。

263 265 

264Claude Code 跳过 Yarn 和 pnpm 锁定文件以及 Bun 锁定文件旁边的 `bunfig.toml` 的安装:266在以下锁定文件情况下,Claude Code 会跳过安装:

265 267 

266* 如果您的插件仅有 `yarn.lock` 或 `pnpm-lock.yaml`,请将其替换为 npm 锁定文件268* **`bun.lockb`**:Bun 的二进制锁定文件无法被检查。请改为提供文本格式的 `bun.lock` 或 npm 锁定文件

267* 如果 `bunfig.toml` 与 Bun 锁定文件在同一目录中,请删除 `bunfig.toml`,或将 Bun 锁定文件替换为 npm 锁定文件269* **`yarn.lock` 或 `pnpm-lock.yaml`**:请将其替换为 npm 锁定文件

270* **Claude Code 无法读取的格式的锁定文件**:npm 锁定文件需要 `lockfileVersion` 为 `2` 或 `3`(由 npm 7 或更高版本写入),`bun.lock` 需要 `lockfileVersion` 不高于 `2`

268 271 

269包含 npm 锁定文件以到达最多用户。Claude Code 从用户的 PATH 运行匹配的锁定文件的包管理器,如果缺少该包管理器,不会尝试其他锁定文件。272包含 npm 锁定文件以到达最多用户。Claude Code 从用户的 PATH 运行匹配的锁定文件的包管理器,如果缺少该包管理器,不会尝试其他锁定文件。

270 273 


276 279 

277Claude Code 限制此依赖项安装,以便插件或其包中的任何代码在安装期间不执行,并限制其运行时间:280Claude Code 限制此依赖项安装,以便插件或其包中的任何代码在安装期间不执行,并限制其运行时间:

278 281 

279* **冻结解析**:Bun 和 npm 安装锁定文件精确固定的内容,当 `package.json` 和锁定文件不一致时失败而不是重新解析版本282* **仅限注册表包**:每个依赖项都必须是在锁定文件中固定到精确版本的注册表包。具有 git、GitHub、文件夹、工作区或链接依赖项的插件不会进行安装。

283* **`https` 下载**:锁定文件中的下载链接必须使用 `https`,除非它指向执行安装的用户自己的默认 npm 注册表。

284* **单独的安装文件夹**:包管理器在其专用的文件夹中运行,该文件夹仅包含经过检查的依赖项列表的副本,因此 npm 和 Bun 不会读取插件的 `.npmrc`、`.env` 或 `bunfig.toml`。安装成功后,Claude Code 会将生成的 `node_modules` 移入插件中。

285* **冻结解析**:安装严格使用锁定文件固定的版本,当 `package.json` 和锁定文件列出的依赖项不一致时,Claude Code 会跳过安装

280* **无生命周期脚本**:`--ignore-scripts` 防止 `preinstall`、`install` 和 `postinstall` 脚本运行,因此在这些脚本中构建本机模块的依赖项在此安装期间下载但不编译286* **无生命周期脚本**:`--ignore-scripts` 防止 `preinstall`、`install` 和 `postinstall` 脚本运行,因此在这些脚本中构建本机模块的依赖项在此安装期间下载但不编译

287* **无覆盖或补丁**:`package.json` 设置了 npm `overrides` 的插件不会从 npm 锁定文件进行安装,设置了 Bun `patchedDependencies` 的插件不会从 `bun.lock` 进行安装

281* **60 秒超时**:Claude Code 停止运行超过 60 秒的安装并将其视为失败288* **60 秒超时**:Claude Code 停止运行超过 60 秒的安装并将其视为失败

282 289 

283Claude Code 在此依赖项安装之前获取 npm 源插件,包的任何自己的安装脚本在获取期间不运行。请参阅 [npm 插件源](/docs/zh-CN/plugins/marketplace-reference#npm-plugin-source)。290Claude Code 在此依赖项安装之前获取 npm 源插件,包的任何自己的安装脚本在获取期间不运行。请参阅 [npm 插件源](/docs/zh-CN/plugins/marketplace-reference#npm-plugin-source)。


290 依赖项安装失败或被跳过时297 依赖项安装失败或被跳过时

291</h4>298</h4>

292 299 

293失败或跳过的安装永远不会阻止插件,每种情况都留下不同的迹象:300如果安装失败或被跳过,插件仍会加载,但其中需要缺失包的部分可能无法正常工作。

294 301 

295* 失败的安装或因 Yarn 或 pnpm 锁定文件或 `bunfig.toml` 而跳过的安装在 `claude --debug` 输出中显示为警告302对于已启用的插件,如果其缓存副本包含锁定文件和列出运行时依赖项的 `package.json`,但没有 `node_modules` 目录,`/plugin` 和 `claude plugin list` 会在该插件上显示一条说明。该说明会指出安装是未完成,还是无法针对此插件运行。有关每种情况的处理方法,请参阅[故障排除条目](/docs/zh-CN/plugins/troubleshooting#the-packages-it-lists-are-not-installed)。

296* 具有 `package.json` 且没有锁定文件的插件被跳过,没有日志条目

297* 超时的安装可能在缓存副本中留下部分 `node_modules` 树

298 303 

299当自动安装无法提供依赖项时,从 hook 安装到[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。这包括需要其生命周期脚本来构建的包、Python 依赖项以及使用 Yarn 或 pnpm 锁定的插件。304当自动安装无法提供依赖项时,从 hook 安装到[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。这包括需要其生命周期脚本来构建的包、Python 依赖项、使用 Yarn 或 pnpm 锁定的插件,以及不是注册表包的依赖项(例如 git 依赖项)。

300 305 

301<h2 id="versions-and-updates">306<h2 id="versions-and-updates">

302 版本和更新307 版本和更新

303</h2>308</h2>

304 309 

305如果插件的作者推送了新提交,`claude plugin update` 打印 `<name> is already at the latest version (<version>).`,Claude Code 为插件计算的版本未更改,因此磁盘上没有任何更改。310如果插件的作者推送了新提交,`claude plugin update` 打印 `<name> is already at the latest version (<version>).`,Claude Code 为插件计算的版本未更改,因此插件在磁盘上的文件不会更改。

306 311 

307Claude Code 为它安装的每个插件计算一个版本,这就是它如何检测更新的方式。`claude plugin update` 和后台自动更新重新计算版本,当它与 `installed_plugins.json` 记录的内容匹配时跳过插件。312Claude Code 为它安装的每个插件计算一个版本,这就是它如何检测更新的方式。`claude plugin update` 和后台自动更新会重新计算版本,当它与 `installed_plugins.json` 记录的内容匹配时,不会替换缓存副本。由您发起的更新仍可在该副本中[重试未完成的依赖安装](/docs/zh-CN/plugins/troubleshooting#the-packages-it-lists-are-not-installed)。

308 313 

309版本也命名插件的缓存目录。314版本也命名插件的缓存目录。

310 315 

Details

142| `license` | String | SPDX 标识符,如 `MIT` 或 `Apache-2.0` |142| `license` | String | SPDX 标识符,如 `MIT` 或 `Apache-2.0` |

143| `keywords` | Array of strings | 发现标签 |143| `keywords` | Array of strings | 发现标签 |

144| [`metadata`](#metadata) | Object | 用于您自己数据的自由形式对象。Claude Code 不读取它 |144| [`metadata`](#metadata) | Object | 用于您自己数据的自由形式对象。Claude Code 不读取它 |

145| [`icon`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的图标。Claude Code 不读取它 |

146| [`documentationUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的文档链接。Claude Code 不读取它 |

147| [`supportUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的支持链接。Claude Code 不读取它 |

148| [`privacyPolicyUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的隐私政策链接。Claude Code 不读取它 |

149| [`termsOfServiceUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的服务条款链接。Claude Code 不读取它 |

145| [`defaultEnabled`](#defaultenabled) | Boolean | 当用户未设置时 plugin 是否在启用时启动。默认为 `true` |150| [`defaultEnabled`](#defaultenabled) | Boolean | 当用户未设置时 plugin 是否在启用时启动。默认为 `true` |

146| [`dependencies`](#dependencies) | Array of strings or objects | 必须为此 plugin 启用的 plugin |151| [`dependencies`](#dependencies) | Array of strings or objects | 必须为此 plugin 启用的 plugin |

147| [`settings`](#settings) | Object | Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效 |152| [`settings`](#settings) | Object | Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效 |


202 207 

203用于您自己数据的自由形式对象,例如目录或权利字段。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本。208用于您自己数据的自由形式对象,例如目录或权利字段。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本。

204 209 

210<h3 id="directory-listing-fields">

211 目录列表字段

212</h3>

213 

214当您[提交插件](/docs/zh-CN/plugins/publish#submit-to-anthropics-directory)时,Anthropic 的目录会从 `plugin.json` 中读取 `icon`、`documentationUrl`、`supportUrl`、`privacyPolicyUrl` 和 `termsOfServiceUrl` 字段,用于您插件的列表。Claude Code 在加载时忽略它们。请仅在 `plugin.json` 中设置它们。在[市场条目](#marketplace-entries-and-the-manifest)中,`claude plugin validate` 会将它们逐一报告为未知字段。

215 

216将 `icon` 设置为插件内图像文件的路径,例如 `./logo.png`,并将四个 URL 字段分别设置为 `https://` URL。

217 

218在 Claude Code v2.1.281 或更高版本上,`claude plugin validate` 接受这些字段且不发出警告。更早的版本会为每个字段打印一条 `Unknown field` 警告,因此在这些版本上使用 `--strict` 运行会失败。

219 

205<h3 id="defaultenabled">220<h3 id="defaultenabled">

206 `defaultEnabled`221 `defaultEnabled`

207</h3>222</h3>


276 291 

277`hooks` 采用 `.json` 文件路径、与 [`settings.json` 中的 `hooks`](/docs/zh-CN/hooks#configuration)相同形状的内联 hooks 对象,或混合两者的数组。有关 hook 事件和处理程序字段,参见[hooks 参考](/docs/zh-CN/hooks#hook-events)。292`hooks` 采用 `.json` 文件路径、与 [`settings.json` 中的 `hooks`](/docs/zh-CN/hooks#configuration)相同形状的内联 hooks 对象,或混合两者的数组。有关 hook 事件和处理程序字段,参见[hooks 参考](/docs/zh-CN/hooks#hook-events)。

278 293 

279Claude Code 在该文件存在时将您声明的内容与 `hooks/hooks.json` 合并。294hooks 文件将事件映射包装在顶层 `"hooks"` 键中,即 [`hooks/hooks.json`](/docs/zh-CN/plugins/components#hooks) 使用的形状。仅包含事件映射而没有该包装的文件无法加载。内联对象就是事件映射本身,没有包装。

295 

296Claude Code 在该文件存在时将您声明的内容与 `hooks/hooks.json` 合并。此数组加载一个 hooks 文件并声明一个内联 `PostToolUse` hook:

280 297 

281```json theme={null}298```json theme={null}

282{299{


296}313}

297```314```

298 315 

316该数组指定的文件在其自身的事件映射外带有 `"hooks"` 包装:

317 

318```json config/extra-hooks.json theme={null}

319{

320 "hooks": {

321 "PreToolUse": [

322 {

323 "matcher": "Bash",

324 "hooks": [

325 { "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/check-command.sh" }

326 ]

327 }

328 ]

329 }

330}

331```

332 

299<h3 id="mcpservers">333<h3 id="mcpservers">

300 `mcpServers`334 `mcpServers`

301</h3>335</h3>


400* **`skills`**:也接受 `"."`。`"."` 和 `"./"` 都表示 plugin 根目录。在 v2.1.221 之前,`"."` 验证失败,因此当 plugin 必须在较早版本上加载时使用 `"./"`434* **`skills`**:也接受 `"."`。`"."` 和 `"./"` 都表示 plugin 根目录。在 v2.1.221 之前,`"."` 验证失败,因此当 plugin 必须在较早版本上加载时使用 `"./"`

401* **`mcpServers`**:也接受 `https://` 包 URL435* **`mcpServers`**:也接受 `https://` 包 URL

402 436 

437`experimental.evals` 不是组件路径,因此本节中的规则不适用于它,而是由 `claude plugin eval` 在运行时检查该值。它指定插件根目录下的一个目录,例如 `"quality/evals"`,可以带或不带 `./` 前缀。如果是数组,则仅使用第一个条目。有关该值接受的内容以及值不可用时会发生什么,请参阅[使用不同的 eval 目录](/docs/zh-CN/plugin-evals#use-a-different-eval-directory)。

438 

403<h3 id="containment-and-existence">439<h3 id="containment-and-existence">

404 包含和存在440 包含和存在

405</h3>441</h3>


693 Marketplace 条目和 manifest729 Marketplace 条目和 manifest

694</h2>730</h2>

695 731 

696[marketplace 条目](/docs/zh-CN/plugins/marketplace-reference)接受此页面上的每个字段以及[其自己的字段](/docs/zh-CN/plugins/marketplace-reference#plugin-entries),包括 `strict`。732[市场条目](/docs/zh-CN/plugins/marketplace-reference)接受[其自己的字段](/docs/zh-CN/plugins/marketplace-reference#plugin-entries)(包括 `strict`),以及此页面上除[目录列表字段](#directory-listing-fields)之外的每个字段。

697 733 

698`strict` 字段决定条目是否可以向具有自己 `plugin.json` 的 plugin 添加组件。它默认为 `true`。734`strict` 字段决定条目是否可以向具有自己 `plugin.json` 的 plugin 添加组件。它默认为 `true`。

699 735 

Details

81 81 

82`marketplace.json` 的顶级 `plugins` 数组中的每个对象命名一个插件并说明从哪里获取它。`name` 和 `source` 是必需的。82`marketplace.json` 的顶级 `plugins` 数组中的每个对象命名一个插件并说明从哪里获取它。`name` 和 `source` 是必需的。

83 83 

84条目也接受每个 [`plugin.json` 字段](/docs/zh-CN/plugins/manifest-reference),如 `description`、`version`、`author`、`commands` 和 `hooks`。有关这些字段何时适用,请参阅 [条目如何与 plugin.json 结合](#entry-and-plugin-json)。84除 [目录列表字段](/docs/zh-CN/plugins/manifest-reference#directory-listing-fields) 外,条目也接受每个 [`plugin.json` 字段](/docs/zh-CN/plugins/manifest-reference),如 `description`、`version`、`author`、`commands` 和 `hooks`。有关这些字段何时适用,请参阅 [条目如何与 plugin.json 结合](#entry-and-plugin-json)。

85 85 

86该表列出条目自己的字段和清单字段,其含义在条目中改变。86该表列出条目自己的字段和清单字段,其含义在条目中改变。

87 87 


94| `category` | string | 用于组织目录的自由格式类别 |94| `category` | string | 用于组织目录的自由格式类别 |

95| `tags` | array of strings | 用于搜索的自由格式标签 |95| `tags` | array of strings | 用于搜索的自由格式标签 |

96| `strict` | boolean | 默认 `true`。`plugin.json` 是否是插件组件的权威来源。请参阅 [严格模式](#strict-mode) |96| `strict` | boolean | 默认 `true`。`plugin.json` 是否是插件组件的权威来源。请参阅 [严格模式](#strict-mode) |

97| `relevance` | object | 告诉 Claude Code 何时建议插件的信号。请参阅 [为你的组织推荐插件](/docs/zh-CN/plugins/relevance) |97| `relevance` | object | 告诉 Claude Code 何时建议插件的信号。请参阅 [为您的组织推荐插件](/docs/zh-CN/plugins/relevance) |

98| `dependencies` | array | 必须为此插件启用的插件。每个项是 `"name"`、`"name@marketplace"` 或对象。请参阅 [插件依赖项](/docs/zh-CN/plugins/dependencies) |98| `dependencies` | array | 必须为此插件启用的插件。每个项是 `"name"`、`"name@marketplace"` 或对象。请参阅 [插件依赖项](/docs/zh-CN/plugins/dependencies) |

99| `defaultEnabled` | boolean | 默认 `true`。当用户未在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 中设置时,插件是否启动时启用。条目值优先于 `plugin.json` |99| `defaultEnabled` | boolean | 默认 `true`。当用户未在 [`enabledPlugins`](/docs/zh-CN/settings-reference#enabledplugins) 中设置时,插件是否启动时启用。条目值优先于 `plugin.json` |

100| `displayName` | string | 在 UI 中显示的人类可读名称。当条目和插件的 `plugin.json` 都未设置时,用户看到插件的 `name` |100| `displayName` | string | 在 UI 中显示的人类可读名称。当条目和插件的 `plugin.json` 都未设置时,用户看到插件的 `name` |

101| `metadata` | object | 用于你自己字段的自由格式对象。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本 |101| `metadata` | object | 用于您自己字段的自由格式对象。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本 |

102| `headers` | object | Claude Code 在下载此条目的 [archive](#archive-plugin-source) 时发送的 HTTP 标头。此处设置的标头替换 marketplace 源的 [`headers`](#fields-by-type) 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |102| `headers` | object | Claude Code 在下载此条目的 [archive](#archive-plugin-source) 时发送的 HTTP 标头。此处设置的标头替换市场源的 [`headers`](#fields-by-type) 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |

103| `headersHelper` | string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于过期的凭证。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads) |103| `headersHelper` | string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于会过期的凭据。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads) |

104 104 

105<h3 id="entry-and-plugin-json">105<h3 id="entry-and-plugin-json">

106 条目如何与 plugin.json 结合106 条目如何与 plugin.json 结合


115 条目中的 Hooks115 条目中的 Hooks

116</h4>116</h4>

117 117 

118将条目 `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` 中。118将条目 `hooks` 写成内联对象,将 hook 事件名称映射到匹配器数组。如果您写文件路径或数组,`claude plugin validate` 会通过。这些 hook 永远不会运行,Claude Code 为插件报告 `not yet supported in a marketplace entry` 错误。将基于文件的 hook 放在插件自己的 [`hooks/hooks.json`](/docs/zh-CN/plugins/components) 或 `plugin.json` 中。

119 119 

120<h4 id="display-fields">120<h4 id="display-fields">

121 显示字段121 显示字段


123 123 

124条目和插件自己的 `plugin.json` 都可以设置显示字段 `displayName`、`description`、`author`、`homepage`、`repository`、`license` 和 `keywords`。用户在插件列表和详情中看到这些值,在安装前后:124条目和插件自己的 `plugin.json` 都可以设置显示字段 `displayName`、`description`、`author`、`homepage`、`repository`、`license` 和 `keywords`。用户在插件列表和详情中看到这些值,在安装前后:

125 125 

126* 对于你在条目上设置的字段,用户看到条目的值,即使 `plugin.json` 设置了不同的值。126* 对于您在条目上设置的字段,用户看到条目的值,即使 `plugin.json` 设置了不同的值。

127* 对于条目未设置的字段,用户看到 `plugin.json` 值。127* 对于条目未设置的字段,用户看到 `plugin.json` 值。

128 128 

129在安装前,Claude Code 只能为具有 [相对路径源](#relative-path-plugin-source) 的条目读取 `plugin.json`,其插件文件在 marketplace 内。对于具有任何其他源类型的条目,用户在安装插件之前只看到条目自己的字段。129在安装前,Claude Code 只能为具有 [相对路径源](#relative-path-plugin-source) 的条目读取 `plugin.json`,其插件文件在市场内。对于具有任何其他源类型的条目,用户在安装插件之前只看到条目自己的字段。

130 130 

131<h3 id="strict-mode">131<h3 id="strict-mode">

132 严格模式132 严格模式


154| 相对路径 | 字符串本身 | marketplace 内的一个目录,从 marketplace 根目录解析。必须以 `./` 开头,除非你在 [`metadata.pluginRoot` 下写一个裸名](#relative-path-plugin-source)。`"."` 本身表示根目录 |154| 相对路径 | 字符串本身 | marketplace 内的一个目录,从 marketplace 根目录解析。必须以 `./` 开头,除非你在 [`metadata.pluginRoot` 下写一个裸名](#relative-path-plugin-source)。`"."` 本身表示根目录 |

155| `github` | `repo`, `ref`, `sha` | GitHub 仓库,格式为 `owner/repo` |155| `github` | `repo`, `ref`, `sha` | GitHub 仓库,格式为 `owner/repo` |

156| `url` | `url`, `ref`, `sha` | 任何 git 仓库的 URL |156| `url` | `url`, `ref`, `sha` | 任何 git 仓库的 URL |

157| `git-subdir` | `url`, `path`, `ref`, `sha` | git 仓库的一个子目录,使用稀疏部分克隆获取 |157| `git-subdir` | `url`, `path`, `ref`, `sha` | git 仓库的一个子目录,使用稀疏检出获取 |

158| `npm` | `package`, `version`, `registry` | npm 包,使用你的 npm 客户端获取并解包,不运行安装脚本 |158| `npm` | `package`, `version`, `registry` | npm registry 包或 tarball 链接,使用您的 npm 客户端获取并解包,不运行安装脚本 |

159| `archive` | `url`, `sha256` | HTTPS 上的 Zip 存档。需要 Claude Code v2.1.224 或更高版本 |159| `archive` | `url`, `sha256` | HTTPS 上的 Zip 存档。需要 Claude Code v2.1.224 或更高版本 |

160| `command` | `command`, `timeout`, `mode` | 由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |160| `command` | `command`, `timeout`, `mode` | 由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |

161 161 


239 git-subdir plugin source239 git-subdir plugin source

240</h3>240</h3>

241 241 

242`url` 接受完整的 git URL 或 GitHub `owner/repo` 简写。`path` 是保存插件的子目录,Claude Code 仅下载该子目录。242`url` 接受完整的 git URL 或 GitHub `owner/repo` 简写。`path` 是保存插件的子目录,Claude Code 仅检出该子目录。通过 `https` 或 SSH URL 时,Claude Code 会向服务器请求部分克隆,因此从支持部分克隆的主机获取时,大型 monorepo 中的插件无需下载仓库的其余部分即可安装。

243 243 

244```json theme={null}244```json theme={null}

245{245{


258 258 

259一个 `npm` 源采用这些字段:259一个 `npm` 源采用这些字段:

260 260 

261* `package`:一个包名,或一个作用域名,如 `@your-org/formatter`261* `package`:一个 registry 包名,如 `@your-org/formatter`;一个附加了版本的名称,如 `@your-org/formatter@2.0.0`;或一个指向包 tarball 文件的 `https` 链接

262* `version`:一个版本或范围262* `version`:一个版本、一个 semver 范围或一个 dist-tag,在 `package` 是未附加版本的包名时使用。省略它则获取 `latest`

263* `registry`:一个不在默认 registry 上的包的 registry URL263* `registry`:一个不在默认 registry 上的包的 registry URL

264 264 

265Claude Code 使用你的 npm 客户端获取包。包的安装脚本,如 `preinstall` 或 `postinstall`,永远不会运行,其依赖项在获取期间不会被安装。如果包在其 `package.json` 旁边有一个支持的 lockfile,Claude Code 在单独的步骤中安装这些 [Node.js 包依赖项](/docs/zh-CN/plugins/loading#node-js-package-dependencies),也禁用脚本。265Claude Code 使用你的 npm 客户端获取包。包的安装脚本,如 `preinstall` 或 `postinstall`,永远不会运行,其依赖项在获取期间不会被安装。如果包在其 `package.json` 旁边有一个支持的 lockfile,Claude Code 在单独的步骤中安装这些 [Node.js 包依赖项](/docs/zh-CN/plugins/loading#node-js-package-dependencies),也禁用脚本。

266 266 

267Claude Code 在获取任何内容之前会检查 `package` 值。被拒绝的值会导致安装失败,并显示一条指明该值及原因的消息。被拒绝的值包括:

268 

269* **git 地址、文件夹或 `file:` 路径,或 `npm:` 别名**:对于 git 仓库,请使用 [`github`、`url` 或 `git-subdir` 源](#plugin-sources);对于市场中的文件夹,请使用相对路径;对于别名,请使用包自身的名称

270* **位于 github.com、gist.github.com、gitlab.com、bitbucket.org 或 git.sr.ht 上的 tarball 链接**:即使该链接是 GitHub release 下载链接也会被拒绝,除非它是 `gitlab.com/api/v4/` 下的 GitLab npm registry 链接

271* **通过 `http` 的 tarball 链接**:除非它指向安装用户自己的默认 npm registry,否则会被拒绝

272 

273`registry` URL 必须使用 `https`,除非它是安装用户自己的默认 npm registry。对于任何其他 `http` registry,安装会在 npm 与其联系之前失败。

274 

267```json theme={null}275```json theme={null}

268{276{

269 "name": "formatter",277 "name": "formatter",

Details

67 使用 API 密钥进行身份验证的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry,仅在具有托管设置的机器上获得保护程序。67 使用 API 密钥进行身份验证的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry,仅在具有托管设置的机器上获得保护程序。

68* **保护程序保护您管理的内容。** 用户的 mod 无法更改您的托管 hooks 接收或决定的内容、系统提示、您的托管 `CLAUDE.md` 和其他托管说明、任何 mod 读取的设置内容,或您的托管 MCP 服务器的工具和描述。68* **保护程序保护您管理的内容。** 用户的 mod 无法更改您的托管 hooks 接收或决定的内容、系统提示、您的托管 `CLAUDE.md` 和其他托管说明、任何 mod 读取的设置内容,或您的托管 MCP 服务器的工具和描述。

69* **允许所有其他内容。** 保护程序不添加其他限制。用户的 mod 仍然可以读写文件、启动进程、发出网络请求、重写工具调用和提示、拒绝工具调用、批准否则会提示的工具调用,以及在界面中绘制,所有这些都具有该用户的权限。69* **允许所有其他内容。** 保护程序不添加其他限制。用户的 mod 仍然可以读写文件、启动进程、发出网络请求、重写工具调用和提示、拒绝工具调用、批准否则会提示的工具调用,以及在界面中绘制,所有这些都具有该用户的权限。

70* **拒绝规则和您的托管 hooks 优先。** 保护程序加载的地方,用户的 mod 无法批准 `deny` 规则拒绝的调用,无论哪个设置文件持有该规则。来自托管设置中 `PreToolUse` hook 的块也是最终的。两者都适用于 Claude 的工具调用。两者都不适用于 mod 自己的 [`$.fs` 和 `$.process` 调用](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network):即使 `Read(.env)` 被拒绝,mod 仍然可以使用 `$.fs.read` 读取该文件或启动执行此操作的程序。要限制这些调用,请防止 mod 加载或在[策略 mod](#enforce-a-policy-with-a-mod-of-your-own) 中挂接调用。70* **拒绝规则和您的托管 hook 优先。** 保护程序加载的地方,用户的 mod 无法批准 `deny` 规则拒绝的调用,无论哪个设置文件持有该规则。来自托管设置中 `PreToolUse` hook 的阻止也是最终的。两者都适用于 Claude 的工具调用。两者都不适用于 mod 自己的 [`$.fs` 和 `$.process` 调用](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network):即使 `Read(.env)` 被拒绝,mod 仍然可以使用 `$.fs.read` 读取该文件或启动执行此操作的程序。要限制这些调用,请防止 mod 加载或在[策略 mod](#enforce-a-policy-with-a-mod-of-your-own) 中处理该调用。

71* **其他权限检查可以被覆盖。** 批准工具调用的用户 mod 可以批准 `ask` 规则会提示的调用,或 `PreToolUse` hook 在托管设置外阻止的调用。在自动模式下,mod 批准的调用运行时不进行分类器检查。71* **其他权限检查可以被覆盖。** 批准工具调用的用户 mod 可以批准 `ask` 规则会提示的调用,或 `PreToolUse` hook 在托管设置外阻止的调用。在自动模式下,mod 批准的调用运行时不进行分类器检查。

72 72 

73保护程序的源代码在 [Claude Code 存储库的 `mods/sec-default` 目录](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)中是公开的。73保护程序的源代码在 [Claude Code 存储库的 `mods/sec-default` 目录](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)中是公开的。


161* **`allowManagedModsOnly`**:内置保护程序上的选项。用户自己的 mods 不加载,他们的设置 hooks、状态行和 `/goal` 继续工作。[停止用户安装的 mods 加载](#stop-user-installed-mods-from-loading)列出了它涵盖的内容。161* **`allowManagedModsOnly`**:内置保护程序上的选项。用户自己的 mods 不加载,他们的设置 hooks、状态行和 `/goal` 继续工作。[停止用户安装的 mods 加载](#stop-user-installed-mods-from-loading)列出了它涵盖的内容。

162* **`allowManagedHooksOnly`**:更广泛的设置。仅[您组织的 mods](#install-your-organizations-mods) 和内置于 Claude Code 的 mods 加载。用户自己安装的 mod 不加载。该设置还阻止用户自己的设置文件中的 hooks。在设置之前,请阅读[`allowManagedHooksOnly` 下运行什么](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)。162* **`allowManagedHooksOnly`**:更广泛的设置。仅[您组织的 mods](#install-your-organizations-mods) 和内置于 Claude Code 的 mods 加载。用户自己安装的 mod 不加载。该设置还阻止用户自己的设置文件中的 hooks。在设置之前,请阅读[`allowManagedHooksOnly` 下运行什么](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)。

163* **`disableAllHooks`**:最广泛的设置。在托管设置中,它停止每个已安装插件中的 mods,包括您的,并关闭设置文件中的每个 hook,因此您的托管设置中的 `PreToolUse` hook 不再阻止任何内容。自定义状态行和 `/goal` 也停止工作。在设置之前,请阅读[`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks)。163* **`disableAllHooks`**:最广泛的设置。在托管设置中,它停止每个已安装插件中的 mods,包括您的,并关闭设置文件中的每个 hook,因此您的托管设置中的 `PreToolUse` hook 不再阻止任何内容。自定义状态行和 `/goal` 也停止工作。在设置之前,请阅读[`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks)。

164* **`disableSideloadFlags`**:在启动时拒绝 `--plugin-dir` 和 `--plugin-url`,因此没有人从目录加载 mod,并防止 Claude 在会话期间编写的 mods 加载。该设置还拒绝 `--agents` 和 `--mcp-config`。在设置之前,请阅读[`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags)。164* **`disableSideloadFlags`**:在启动时拒绝 `--plugin-dir` 和 `--plugin-url`,并防止 Claude 在会话期间编写的 mods 加载。该设置还拒绝 `--agents` 和 `--mcp-config`。在设置之前,请阅读[`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags)。

165 165 

166内置于 Claude Code 的 Mods,例如 `AGENTS.md` 支持,不受这些设置的影响。每个都有[自己的开关](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code)。166内置于 Claude Code 的 Mods,例如 `AGENTS.md` 支持,不受这些设置的影响。每个都有[自己的开关](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code)。

167 167 

168mod 未加载的用户在其调试日志中找到原因。[拒绝消息](/docs/zh-CN/plugins/mods/troubleshoot#refusal-messages)列出了 `allowManagedHooksOnly` 和 `disableAllHooks` 的行,[来自内置保护程序的消息](/docs/zh-CN/plugins/mods/troubleshoot#messages-from-the-built-in-guard)有 `allowManagedModsOnly` 的行。168mod 未加载的用户在其调试日志中找到原因。[拒绝消息](/docs/zh-CN/plugins/mods/troubleshoot#refusal-messages)列出了 `allowManagedHooksOnly` 和 `disableAllHooks` 的行,[来自内置保护程序的消息](/docs/zh-CN/plugins/mods/troubleshoot#messages-from-the-built-in-guard)有 `allowManagedModsOnly` 的行。

169 169 

170<h3 id="allow-only-your-organization’s-mods">

171 仅允许您组织的 mods

172</h3>

173 

174要运行您组织的 mods 并阻止用户带来的 mods,请部署[策略表](#choose-how-much-to-allow)中 **仅您组织的 mods** 一行的设置,再加上 `disableSideloadFlags`。使用以下完整的 `managed-settings.json`,Claude Code 会拒绝用户自己的 mods,因此他们的 hooks 都不会运行,而您的策略 mod 会先于其他 mods 运行:

175 

176```json managed-settings.json theme={null}

177{

178 "extraKnownMarketplaces": {

179 "acme-tools": {

180 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

181 }

182 },

183 "enabledPlugins": { "acme-guard@acme-tools": true },

184 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"],

185 "pluginConfigs": {

186 "cc-plugin-sec-default@builtin": {

187 "options": { "allowManagedModsOnly": true }

188 }

189 },

190 "disableSideloadFlags": true

191}

192```

193 

194每组键各负责一项工作:

195 

196* **`extraKnownMarketplaces`、`enabledPlugins` 和 `prependPlugins`**:安装您的 mod 以便它计为您的,并让它首先运行,保护程序紧随其后。[安装您组织的 mods 并设置顺序](#install-your-organizations-mods)涵盖这些键所指向的目录。

197* **`pluginConfigs`**:设置保护程序的 `allowManagedModsOnly` 选项,因此 Claude Code 会拒绝用户自己的 mods。他们的设置 hooks、状态栏和 `/goal` 继续工作。

198* **`disableSideloadFlags`**:有关它在启动时拒绝的标志,请参阅 [`disableSideloadFlags`](/docs/zh-CN/settings-reference#disablesideloadflags)

199 

200要在测试机器上确认该策略,请在您的 shell 中使用 `claude --debug` 启动会话并阅读调试日志:

201 

202* **您的 mod**:其 `hooks module` 行带有 `tier prepend`

203* **用户安装的 mod**:有一行显示 `refused by cc-plugin-sec-default: mods are limited to your organization's by policy (allowManagedModsOnly)`。更早的一行会显示该 mod 的 hooks module 已 `loaded`,因此请查找拒绝信息。

204* **插件目录**:`claude --plugin-dir ./any-mod` 会退出,并显示以 `--plugin-dir is disabled by your organization's managed settings (disableSideloadFlags)` 开头的消息

205 

206要同时限制用户可以添加哪些市场,请将此文件与您的[市场限制](/docs/zh-CN/plugins/org#restrict-what-users-can-install)结合使用。

207 

208<h3 id="apply-your-plugin-controls-to-mods">

209 将您的插件控制应用于 mods

210</h3>

211 

212mod 就是插件,因此您[为组织管理插件](/docs/zh-CN/plugins/org)的方式同样适用于包含 mod 的插件:

213 

214* **查看整个设备群中加载了哪些插件**:[审计和审查](/docs/zh-CN/plugins/org#audit-and-review)

215* **决定您审查过的插件何时可以更新**:[设置更新策略](/docs/zh-CN/plugins/org#set-update-policy)

216* **为某个群组(例如试点群组)提供不同的策略**:[为托管设置无法强制执行的内容做好规划](/docs/zh-CN/plugins/org#plan-for-what-managed-settings-can’t-enforce)

217* **检查哪些应用和会话类型会应用插件键**:[各使用入口何时应用插件键](/docs/zh-CN/plugins/org#when-each-surface-applies-the-plugin-keys)

218* **设置 CI 和容器**:[为容器和 CI 预置内容](/docs/zh-CN/plugins/org#seed-containers-and-ci)

219* **提供用户可以安装的 mods**:[托管市场](/docs/zh-CN/plugins/host-marketplace)。Claude Code 从 GitHub、git、URL 或 npm 源复制的 mod 计为用户的,而不是[您组织的](#install-your-organizations-mods)。

220 

170<h3 id="set-options-on-the-built-in-guard">221<h3 id="set-options-on-the-built-in-guard">

171 在内置保护程序上设置选项222 在内置保护程序上设置选项

172</h3>223</h3>

173 224 

174内置保护程序采用两个选项。在托管设置中的 `pluginConfigs` 下设置它们,由 `cc-plugin-sec-default@builtin` 键入,如[停止用户安装的 mods 加载](#stop-user-installed-mods-from-loading)中的示例所示。225内置保护程序接受选项。在托管设置中的 `pluginConfigs` 下设置它们,由 `cc-plugin-sec-default@builtin` 键入,如[停止用户安装的 mods 加载](#stop-user-installed-mods-from-loading)中的示例所示。

175 226 

176该表给出了您的用户在每个选项未设置和设置为 `true` 时获得的内容:227该表给出了您的用户在每个选项未设置和设置为 `true` 时获得的内容:

177 228 


182 233 

183这些规则决定选项是否生效:234这些规则决定选项是否生效:

184 235 

185* **id 在这里有一个拼写**:Claude Code 仅在 `cc-plugin-sec-default@builtin` 下读取选项。`prependPlugins` 也接受 `sec-default@builtin`,而 `pluginConfigs` 不接受。236* **id 在这里只有一种形式**:Claude Code 仅在 `cc-plugin-sec-default@builtin` 下读取选项。`prependPlugins` 也接受 `sec-default@builtin`,而 `pluginConfigs` 不接受。

186* **仅托管设置计数**:用户、项目或本地设置文件中的相同条目,或使用 `--settings` 传递的文件中的相同条目既不设置选项也不放松选项237* **仅托管设置计数**:用户、项目或本地设置文件中的相同条目,或使用 `--settings` 传递的文件中的相同条目既不设置选项也不放松选项

187* **保护程序必须加载**:如果您设置 `prependPlugins`,[在列表中命名保护程序](#install-your-organizations-mods)。保护程序不加载的地方,两个选项都不适用。238* **保护程序必须加载**:如果您设置 `prependPlugins`,[在列表中命名保护程序](#install-your-organizations-mods)。保护程序不加载的地方,两个选项都不适用。

188* **保护程序失败关闭**:如果保护程序无法读取托管设置,它会拒绝每个用户的 mod 加载。如果它无法检查用户的 mod 批准的调用的拒绝规则,它会拒绝该调用。239* **保护程序失败关闭**:如果保护程序无法读取托管设置,它会拒绝每个用户的 mod 加载。如果它无法检查用户的 mod 批准的调用的拒绝规则,它会拒绝该调用。


199 安装您组织的 mods 并设置顺序250 安装您组织的 mods 并设置顺序

200</h3>251</h3>

201 252 

202您组织的 mods 在用户 mods 不存在的地方加载,并且可以在用户 mods 之前运行,因此 Claude Code 必须能够判断 mod 是否来自您。只有当以下所有条件都为真时,它才会将 mod 视为您组织的:253您组织的 mods 在用户 mods 无法加载的地方加载,并且可以在用户 mods 之前运行,因此 Claude Code 必须能够判断 mod 是否来自您。只有当以下所有条件都为真时,它才会将 mod 视为您组织的:

203 254 

204* 托管的 `enabledPlugins` 将 mod 的插件设置为 `true`255* 托管的 `enabledPlugins` 将 mod 的插件设置为 `true`

205* 托管设置通过绝对路径将插件的 [marketplace](/docs/zh-CN/plugins/create-marketplace) 命名为用户机器上的目录。`extraKnownMarketplaces` 条目可以做到这一点,并且也为用户注册 marketplace。256* 托管设置通过绝对路径将插件的[市场](/docs/zh-CN/plugins/create-marketplace)指定为用户机器上的目录。`extraKnownMarketplaces` 条目可以做到这一点,并且也会为用户注册该市场。

206* marketplace 通过相对路径列出插件,因此 Claude Code [从该目录就地加载它](/docs/zh-CN/plugins/loading#in-place-and-copied-plugins)257* 市场通过相对路径列出插件,因此 Claude Code [从该目录就地加载它](/docs/zh-CN/plugins/loading#in-place-and-copied-plugins)

207 258 

208为了满足这些条件,让您的设备管理将 marketplace 目录复制到每台机器上的相同路径。使该目录及其上方的每个目录仅可由管理员写入,就像托管设置文件一样。任何可以在那里写入的人都可以重写您的 mod。您从 claude.ai 管理员控制台交付的托管设置可以携带这些密钥,但它们无法将目录放在机器上。259为了满足这些条件,请让您的设备管理将市场目录复制到每台机器上的相同路径。使该目录及其上方的每个目录仅可由管理员写入,就像托管设置文件一样。任何可以在那里写入的人都可以重写您的 mod。您从 claude.ai 管理员控制台交付的托管设置可以携带这些键,但无法将目录放到机器上。

209 260 

210该目录包含 marketplace 的清单和插件:261该目录包含市场的清单和插件:

211 262 

212```text theme={null}263```text theme={null}

213/opt/acme/claude-plugins/264/opt/acme/claude-plugins/


234}285}

235```286```

236 287 

237Claude Code 复制到其缓存中的插件计为用户的,即使托管的 `enabledPlugins` 启用了它。这涵盖了来自 GitHub、git、URL 或 npm 源的每个插件。其 mod 在用户 mods 中运行,`prependPlugins` 和 `appendPlugins` 跳过它,并且它不在 `allowManagedModsOnly` 或 `allowManagedHooksOnly` 下加载。用户的调试日志有一行以插件的 id 和 `is enabled by managed settings, but` 开头。288Claude Code 复制到其缓存中的插件计为用户的,即使托管的 `enabledPlugins` 启用了它。这涵盖了来自 GitHub、git、URL 或 npm 源的每个插件。其 mod 在用户 mods 中运行,`prependPlugins` 和 `appendPlugins` 会跳过它,并且它不会在 `allowManagedModsOnly` 或 `allowManagedHooksOnly` 下加载。用户的调试日志中有一行以插件的 id 和 `is enabled by managed settings, but` 开头。

238 289 

239Claude Code 每次即将采取行动(例如运行工具)时都会引发一个事件,并依次将其传递给每个 mod。计为您的 mod [在用户 mods 之前运行](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in),即使您没有在任何地方列出它。要设置其位置,请在两个设置之一中列出其 id。id 是插件的名称、`@` 和 marketplace 的名称,例如 `acme-guard@acme-tools`。290Claude Code 每次即将采取行动(例如运行工具)时都会触发一个事件,并依次将其传递给每个 mod。计为您的 mod [在用户 mods 之前运行](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in),即使您没有在任何地方列出它。要设置其位置,请在两个设置之一中列出其 id。id 是插件的名称、`@` 和市场的名称,例如 `acme-guard@acme-tools`。

240 291 

241* **`prependPlugins`**:您的 mod 在任何用户 mod 之前看到每个事件,在之后看到每个结果。它可以更改事件、拒绝事件或跳过用户 mods。292* **`prependPlugins`**:您的 mod 在任何用户 mod 之前看到每个事件,并在之后看到每个结果。它可以更改事件、拒绝事件或跳过用户 mods。

242* **`appendPlugins`**:您的 mod 在每个用户 mod 之后运行,因此它只看到这些 mods 传递的事件,以及它们传递的形式293* **`appendPlugins`**:您的 mod 在每个用户 mod 之后运行,因此它只看到这些 mods 传递的事件,并以它们传递的形式看到

243 294 

244此示例在 `/opt/acme/claude-plugins` 声明 `acme-tools` marketplace,启用来自它的 `acme-guard`,并首先运行该 mod,内置保护在其后:295此示例在 `/opt/acme/claude-plugins` 声明 `acme-tools` 市场,启用来自它的 `acme-guard`,并首先运行该 mod,内置保护在其后:

245 296 

246```json managed-settings.json theme={null}297```json managed-settings.json theme={null}

247{298{


255}306}

256```307```

257 308 

258每个密钥做一项工作:309每个键做一项工作:

259 310 

260* **`extraKnownMarketplaces`**:命名保存 `acme-tools` marketplace 的目录。`path` 是包含 `.claude-plugin/marketplace.json` 的目录的绝对路径。311* **`extraKnownMarketplaces`**:指定保存 `acme-tools` 市场的目录。`path` 是包含 `.claude-plugin/marketplace.json` 的目录的绝对路径。

261* **`enabledPlugins`**:为接收这些托管设置的每个用户打开 `acme-guard`312* **`enabledPlugins`**:为接收这些托管设置的每个用户启用 `acme-guard`

262* **`prependPlugins`**:将 `acme-guard` 放在第一位,内置保护放在第二位,都在用户安装的任何 mod 之前。Claude Code 遵循您列出的顺序。313* **`prependPlugins`**:将 `acme-guard` 放在第一位,内置保护放在第二位,都在用户安装的任何 mod 之前。Claude Code 遵循您列出的顺序。

263 314 

264要确认用户的机器收到了设置,请参阅 [检查策略是否生效](/docs/zh-CN/managed-settings#check-that-a-policy-is-in-force)。315要确认用户的机器收到了设置,请参阅[检查策略是否生效](/docs/zh-CN/managed-settings#check-that-a-policy-is-in-force)。

265 316 

266要确认 mod 运行的位置,请在该机器上使用 `claude --debug` 启动会话,并在 [调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log) 中搜索 mod 的 id:317要确认 mod 运行的位置,请在该机器上使用 `claude --debug` 启动会话,并在[调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log)中搜索 mod 的 id:

267 318 

268* **`hooks module acme-guard@acme-tools loaded`,带有 `tier prepend`**:mod 计为您组织的,并首先运行319* **`hooks module acme-guard@acme-tools loaded`,带有 `tier prepend`**:mod 计为您组织的,并首先运行

269* **同一行带有 `tier user`**:Claude Code 将其视为用户的 mod。第二行 `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped` 表示列表跳过了它。320* **同一行带有 `tier user`**:Claude Code 将其视为用户的 mod。第二行 `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped` 表示列表跳过了它。

270 321 

271这些规则决定了两个列表中哪些 id 生效:322这些规则决定了两个列表中哪些 id 生效:

272 323 

273* **列表替换默认值**:当您在托管设置中设置 `prependPlugins` 时,在其中命名 `sec-default@builtin` 以保留内置保护。保护是内置的,不需要 `enabledPlugins` 条目。324* **列表替换默认值**:当您在托管设置中设置 `prependPlugins` 时,请在其中列出 `sec-default@builtin` 以保留内置保护。该保护是内置的,不需要 `enabledPlugins` 条目。

274* **您自己的 id 必须计为您的**:在托管设置中,Claude Code 跳过其插件不满足组织 mod 三个条件的 id325* **您自己的 id 必须计为您的**:在托管设置中,Claude Code 会跳过其插件不满足组织 mod 条件的 id

275* **存储库无法设置它们**:Claude Code 从托管设置读取两个设置,从不从存储库的设置文件读取。用户可以在 `~/.claude/settings.json` 中设置它们以仅在没有托管设置的机器上对其自己的 mods 进行排序,并且仅当他们未使用 Team 或 Enterprise 计划登录时。在其他任何地方,Claude Code 忽略用户设置中的两个密钥。那里的列表既不添加也不删除内置保护。326* **仓库无法设置它们**:Claude Code 从托管设置读取这两个设置,从不从仓库的设置文件读取。用户可以在 `~/.claude/settings.json` 中设置它们来对自己的 mods 排序,但仅限于没有托管设置的机器,并且仅当他们未使用 Team 或 Enterprise 计划登录时。在其他任何情况下,Claude Code 都会忽略用户设置中的这两个键。那里的列表既不添加也不删除内置保护。

276 327 

277<h3 id="enforce-a-policy-with-a-mod-of-your-own">328<h3 id="enforce-a-policy-with-a-mod-of-your-own">

278 使用您自己的 mod 强制执行策略329 使用您自己的 mod 强制执行策略

279</h3>330</h3>

280 331 

281要阻止每个用户的 mod,您不需要自己的 mod。设置 [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading)。当您想允许某些用户的 mods 并拒绝其他的,或记录 mods 的作用时,编写策略 mod。332要阻止每个用户的 mod,您不需要自己的 mod。设置 [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading) 即可。当您想允许某些用户的 mods 并拒绝其他的,或记录 mods 的行为时,请编写策略 mod。

282 333 

283每次另一个 mod 即将加载时,您的 mod 会收到 `claude plugin validate` 打印的列表,在名为 [`plugin.register`](/docs/zh-CN/plugins/mods/reference#other-mods) 的事件中。`prependPlugins` 中的 mod 可以读取该列表并拒绝该 mod。它也可以 [按名称钩住任何 mods API 调用](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) 以记录或拒绝每个其他 mod 的该调用。名称是没有 `$.` 的方法,因此 `fs.write` 上的钩子看到每个 `$.fs.write` 调用。334每次另一个 mod 即将加载时,您的 mod 会在名为 [`plugin.register`](/docs/zh-CN/plugins/mods/reference#other-mods) 的事件中收到 `claude plugin validate` 打印的列表。`prependPlugins` 中的 mod 可以读取该列表并拒绝该 mod。它也可以[按名称处理任何 mods API 调用](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network),以便针对每个其他 mod 记录或拒绝该调用。名称是去掉 `$.` 的方法,因此 `fs.write` 上的 hook 会看到每个 `$.fs.write` 调用。

284 335 

285此策略 mod 拒绝任何用户的 mod,其自己的代码调用 `$.process.run` 或 `$.process.spawn`。它也保留审计日志,将每个工具调用和每个 mod 写入的文件写入调试日志。因为它首先运行,日志记录了在任何用户 mod 更改之前请求的内容。将其保存为 `acme-guard/hooks/register.js`:336此策略 mod 拒绝任何自身代码调用 `$.process.run` 或 `$.process.spawn` 的用户 mod。它还保留审计日志,将每个工具调用和 mod 写入的每个文件写入调试日志。因为它首先运行,日志记录的是请求的原始内容,在任何用户 mod 更改之前。将其保存为 `acme-guard/hooks/register.js`:

286 337 

287```javascript acme-guard/hooks/register.js theme={null}338```javascript acme-guard/hooks/register.js theme={null}

288// 用户 mod 不得调用的方法,每个拼写为 namespace.method339// The methods no user's mod may call, each spelled namespace.method

289const BLOCKED_CALLS = ['process.run', 'process.spawn']340const BLOCKED_CALLS = ['process.run', 'process.spawn']

290 341 

291export function register(on) {342export function register(on) {

292 // 每次另一个 mod 即将加载时运行343 // Runs each time another mod is about to load

293 on('plugin.register', async ($, e, next) => {344 on('plugin.register', async ($, e, next) => {

294 // 保留该 mod 代码中在阻止列表上的调用345 // Keep the calls in that mod's code that are on the blocked list

295 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))346 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

296 if (e.tier === 'user' && blocked.length > 0) {347 if (e.tier === 'user' && blocked.length > 0) {

297 // 返回 refuse 阻止 mod 加载,文本是原因348 // Returning refuse keeps the mod from loading, and the text is the reason

298 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }349 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

299 }350 }

300 // 让每个其他 mod 加载351 // Let every other mod load

301 return next(e)352 return next(e)

302 })353 })

303 354 

304 // 记录每个工具调用,然后让它继续不变355 // Record each tool call, then let it go ahead unchanged

305 on('tool.call', async ($, e, next) => {356 on('tool.call', async ($, e, next) => {

306 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })357 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })

307 return next(e)358 return next(e)

308 })359 })

309 360 

310 // 记录哪个 mod 写了文件,然后是路径,引用因为 mod 选择了它361 // Record which mod wrote a file, then the path, quoted because the mod chose it

311 on('fs.write', async ($, e, next) => {362 on('fs.write', async ($, e, next) => {

312 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })363 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })

313 return next(e)364 return next(e)


315}366}

316```367```

317 368 

318该文件注册三个钩子:369该文件注册三个 hook:

319 370 

320* **`plugin.register`**:决定另一个 mod 是否加载。它拒绝调用阻止方法的用户 mod,并传递每个其他 mod。371* **`plugin.register`**:决定另一个 mod 是否加载。它拒绝调用被阻止方法的用户 mod,并放行每个其他 mod。

321* **`tool.call`**:为每个工具调用向调试日志写入一行,例如 `audit tool.call Bash`,并且不改变任何内容372* **`tool.call`**:为每个工具调用向调试日志写入一行,例如 `audit tool.call Bash`,并且不更改任何内容

322* **`fs.write`**:为每个 `$.fs.write` 调用另一个 mod 进行的写入一行,例如 `audit fs.write by reader "/tmp/notes.md"`,并且不改变任何内容。mod 的名称首先出现,路径被引用,因此 mod 选择的路径无法冒充该行的另一个字段。373* **`fs.write`**:为另一个 mod 发起的每个 `$.fs.write` 调用写入一行,例如 `audit fs.write by reader "/tmp/notes.md"`,并且不更改任何内容。mod 的名称在前,路径加了引号,因此 mod 选择的路径无法冒充该行的其他字段。

323 374 

324`plugin.register` 钩子读取事件的两个字段:375`plugin.register` hook 读取事件的两个字段:

325 376 

326* **`e.tier`**:mod 将运行的位置,`prepend`、`user`、`append` 或 `builtin` 之一。每个人安装的每个 mod 都是 `user`。377* **`e.tier`**:mod 将运行的位置,为 `prepend`、`user`、`append` 或 `builtin` 之一。用户安装的每个 mod 都是 `user`。

327* **`e.uses.calls`**:mod 调用的 mods API 方法,每个拼写为 `namespace.method`,例如 `process.run`,不带 `claude plugin validate` 打印的 `$.`378* **`e.uses.calls`**:mod 调用的 mods API 方法,每个写作 `namespace.method`,例如 `process.run`,不带 `claude plugin validate` 打印的 `$.`

328 379 

329当用户安装调用 `$.process.run` 的 mod 时,mod 不加载,其调试日志有一行以 `refused by acme-guard:` 和您的原因结尾。拒绝也到达 [热重新加载插件目录的会话](/docs/zh-CN/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing) 中的记录。要在不拒绝整个 mod 的情况下阻止调用,请从该调用名称上的钩子返回 `{ deny: 'your reason' }`。380当用户安装调用 `$.process.run` 的 mod 时,该 mod 不会加载,其调试日志中有一行以 `refused by acme-guard:` 和您的原因结尾。在[热重新加载插件目录的会话](/docs/zh-CN/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing)中,拒绝信息也会出现在会话记录中。要在不拒绝整个 mod 的情况下阻止某个调用,请从该调用名称上的 hook 返回 `{ deny: 'your reason' }`。

330 381 

331要将审计行发送到调试日志以外的地方,请从相同的钩子调用 `$.http.fetch`。382要将审计行发送到调试日志以外的地方,请从相同的 hook 中调用 `$.http.fetch`。

332 383 

333会话可以在没有您的 mod 的情况下运行。如果运行已安装 mods 的工作线程 [崩溃三次](/docs/zh-CN/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session),Claude Code 卸载每个不是内置的 mod,包括您的,直到用户运行 `/reload-plugins` 或启动新会话。并且使用 `--safe-mode` 启动 Claude Code 的用户运行时没有已安装的 mods,包括您的。384会话可以在没有您的 mod 的情况下运行。如果运行已安装 mods 的工作线程[崩溃三次](/docs/zh-CN/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session),Claude Code 会卸载所有非内置的 mod(包括您的),直到用户运行 `/reload-plugins` 或启动新会话。此外,使用 `--safe-mode` 启动 Claude Code 的用户运行时不会加载已安装的 mods,包括您的。

334 385 

335[创建 mod](/docs/zh-CN/plugins/mods/create) 涵盖 mod 需要的文件。[测试判断其他 mods 的 mod](/docs/zh-CN/plugins/mods/test#test-a-mod-that-judges-other-mods) 有此策略 mod 的测试文件。386[创建 mod](/docs/zh-CN/plugins/mods/create) 介绍 mod 需要的文件。[测试策略 mod](/docs/zh-CN/plugins/mods/test#test-a-mod-that-judges-other-mods) 提供此策略 mod 的测试文件。

336 387 

337<h4 id="refuse-mods-when-your-check-fails">388<h4 id="refuse-mods-when-your-check-fails">

338 当您的检查失败时拒绝 mods389 当您的检查失败时拒绝 mods

339</h4>390</h4>

340 391 

341如果您的 `plugin.register` 钩子抛出或超过其时间限制,Claude Code 跳过钩子,因此检查失败打开,它正在检查的 mod 加载。要失败关闭并拒绝用户 mods,将检查移到命名函数中并添加返回拒绝的 `.catch` 处理程序。此版本的文件仅显示 `plugin.register` 钩子,因此在 `register` 中保留第一个版本的两个审计钩子:392如果您的 `plugin.register` hook 抛出异常或超过其时间限制,Claude Code 会跳过该 hook,因此检查以放行方式失败,正在被检查的 mod 会加载。要以拒绝方式失败并拒绝用户 mods,请将检查移到命名函数中,并添加返回拒绝的 `.catch` 处理程序。此版本的文件仅显示 `plugin.register` hook,因此请在 `register` 中保留第一个版本的两个审计 hook:

342 393 

343```javascript acme-guard/hooks/register.js theme={null}394```javascript acme-guard/hooks/register.js theme={null}

344const BLOCKED_CALLS = ['process.run', 'process.spawn']395const BLOCKED_CALLS = ['process.run', 'process.spawn']

345 396 

346// 与之前相同的检查,移到其自己的函数中397// The same check as before, moved into a function of its own

347async function checkMod($, e, next) {398async function checkMod($, e, next) {

348 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))399 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

349 if (e.tier === 'user' && blocked.length > 0) {400 if (e.tier === 'user' && blocked.length > 0) {


353}404}

354 405 

355export function register(on) {406export function register(on) {

356 // 处理程序仅在 checkMod 抛出或超过其时间限制时运行407 // The handler runs only when checkMod throws or exceeds its time limit

357 on('plugin.register', checkMod).catch(async ($, e, next) => {408 on('plugin.register', checkMod).catch(async ($, e, next) => {

358 // 让您组织的 mods 和内置 mods 加载409 // Let your organization's mods and built-in mods load

359 if (e.tier !== 'user') return next(e)410 if (e.tier !== 'user') return next(e)

360 // 拒绝无法检查的用户 mod411 // Refuse the user's mod that couldn't be checked

361 return { refuse: 'Acme policy check failed, so this mod was not loaded' }412 return { refuse: 'Acme policy check failed, so this mod was not loaded' }

362 })413 })

363}414}

364```415```

365 416 

366处理程序就位后,正在检查时检查抛出或超时的 mod 不加载,拒绝行携带第二个原因,如 `refused by acme-guard: Acme policy check failed, so this mod was not loaded`。处理程序将 `user` 层外的每个 mod 传递给 `next(e)`,因此失败的检查不会停止您组织列出的 mods。[处理失败的钩子](/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails) 涵盖其他事件的 `.catch`。417处理程序就位后,如果检查在处理某个 mod 时抛出异常或超时,该 mod 不会加载,拒绝行会带有第二个原因,例如 `refused by acme-guard: Acme policy check failed, so this mod was not loaded`。处理程序将 `user` 层以外的每个 mod 传递给 `next(e)`,因此失败的检查不会阻止您组织列出的 mods。[处理失败的 hook](/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails) 介绍其他事件的 `.catch`。

367 418 

368<h2 id="next-steps">419<h2 id="next-steps">

369 后续步骤420 后续步骤

Details

98 98 

99当您运行 `/triage the export button does nothing` 时,mod 将该文本发送到模型并打印其答案,例如 `Label: bug`。Claude 的对话不是请求的一部分。当模型不回答时,标签是 `unknown`。99当您运行 `/triage the export button does nothing` 时,mod 将该文本发送到模型并打印其答案,例如 `Label: bug`。Claude 的对话不是请求的一部分。当模型不回答时,标签是 `unknown`。

100 100 

101Claude API 失败不会拒绝调用,因此检查 `r.isAnswered`,当其为 `false` 时读取 `r.reason`。调用仅对 Claude Code 不会发送的请求拒绝,例如您的组织阻止的模型。[您的构建的类型](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)列出其他选项,例如 `effort`,[限制](/docs/zh-CN/plugins/mods/reference#limits)给出 `maxTokens` 默认值。101Claude API 失败不会拒绝调用,因此检查 `r.isAnswered`,当其为 `false` 时读取 `r.reason`。对于 Claude Code 不会发送的请求,调用会拒绝,例如您的组织阻止的模型。[您的构建的类型](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)列出其他选项,例如 `effort`,[限制](/docs/zh-CN/plugins/mods/reference#limits)给出 `maxTokens` 默认值。

102 102 

103`$.model.fork({ prompt })` 改为在当前对话上提出一个问题,使用相同的模型和系统提示,因此 Claude API 从提示缓存为大部分内容提供服务。103`$.model.fork({ prompt })` 改为在当前对话上提出一个问题,使用相同的模型和系统提示,因此 Claude API 从提示缓存为大部分内容提供服务。

104 104 


108 在后台运行工作108 在后台运行工作

109</h2>109</h2>

110 110 

111超越一个事件的工作,例如每分钟检查一次,在您从 `session.start` 启动的计时器上运行。hook 本身为一个事件运行,其自身运行时间限制为 10 秒。在 `next` 或 mods API 调用上花费的时间不计算,除了 `$.clock.sleep`。`$.clock.every` 和 `$.clock.after` 代替 `setInterval` 和 `setTimeout`,延迟以毫秒为单位:`$.clock.after(5000, fn)` 在五秒后调用 `fn` 一次。每个都返回一个带有 `cancel()` 方法的计时器,`await $.clock.now()` 给出以毫秒为单位的时间。111超越一个事件的工作,例如每分钟检查一次,在您从 `session.start` 启动的计时器上运行。hook 本身为一个事件运行,其自身运行时间有[时间限制](/docs/zh-CN/plugins/mods/reference#limits)。在 `next` 或 mods API 调用上花费的时间不计算,除了 `$.clock.sleep`。`$.clock.every` 和 `$.clock.after` 代替 `setInterval` 和 `setTimeout`,延迟以毫秒为单位:`$.clock.after(5000, fn)` 在五秒后调用 `fn` 一次。每个都返回一个带有 `cancel()` 方法的计时器,`await $.clock.now()` 给出以毫秒为单位的时间。

112 112 

113此 hook 每分钟查找一次拉取请求的检查,并在提示下显示结果。`summarize` 是您自己的函数,将命令的 JSON 输出转换为几个单词:113此 hook 每分钟查找一次拉取请求的检查,并在提示下显示结果。`summarize` 是您自己的函数,将命令的 JSON 输出转换为几个单词:

114 114 


136| 调用 | 用户看到的内容 |136| 调用 | 用户看到的内容 |

137| :- | :- |137| :- | :- |

138| `$.ui.status(text)` | 提示下的一行,保持不变直到您更改它。它以 `⚠` 和 mod 的名称开头,如 `⚠ my-mod: checks: 3 passing`。 |138| `$.ui.status(text)` | 提示下的一行,保持不变直到您更改它。它以 `⚠` 和 mod 的名称开头,如 `⚠ my-mod: checks: 3 passing`。 |

139| `$.ui.toast(text)` | 右上角的一个小框,mod 的名称在文本上方,几秒后消失 |139| `$.ui.toast(text)` | 右上角的一条 toast 通知,mod 的名称在文本上方,几秒后消失 |

140| `$.ui.log(text)` | 成绩单中的一条暗线,Claude 不读取。它以 `●` 和 mod 的名称开头,如 `● my-mod: build finished`。 |140| `$.ui.log(text)` | 成绩单中的一条暗线,Claude 不读取。它以 `●` 和 mod 的名称开头,如 `● my-mod: build finished`。 |

141 141 

142<h3 id="start-a-turn-from-a-background-job">142<h3 id="start-a-turn-from-a-background-job">


149 停止后台工作149 停止后台工作

150</h3>150</h3>

151 151 

152后台工作以两种方式停止。当模块重新加载时,计时器停止。对于 hook 内的长时间运行工作,[`next.signal`](/docs/zh-CN/plugins/mods/reference#the-hook-function) 是一个 `AbortSignal`,当您的 hook 处理的事件被放弃时中止,例如当用户中断时,因此将其传递给任何长时间运行的内容。152当模块重新加载时,计时器停止。对于 hook 内的长时间运行工作,[`next.signal`](/docs/zh-CN/plugins/mods/reference#the-hook-function) 是一个 `AbortSignal`,当您的 hook 处理的事件被放弃时中止,例如当用户中断时,因此将其传递给任何长时间运行的内容。

153 153 

154<h2 id="send-and-receive-messages-between-sessions">154<h2 id="send-and-receive-messages-between-sessions">

155 在会话之间发送和接收消息155 在会话之间发送和接收消息


170})170})

171```171```

172 172 

173当消息排队时,您的会话中不会出现任何内容,其他会话的 Claude 读取 `Status? One line.`。当没有传递任何内容时,右上角的小框给出原因并在几秒后消失。173当消息排队时,您的会话中不会出现任何内容,其他会话的 Claude 读取 `Status? One line.`。当没有传递任何内容时,toast 通知会给出原因。

174 174 

175两个事件让 mod 观察消息。从两者都返回 `next(e)` 以不变地传递每条消息:175`session.receive` 和 `session.send` 让 mod 观察消息。从两者都返回 `next(e)` 以不变地传递每条消息:

176 176 

177| 事件 | 何时触发 | 有用的字段 |177| 事件 | 何时触发 | 有用的字段 |

178| :- | :- | :- |178| :- | :- | :- |


202 202 

203文件和进程有一些自己的规则:203文件和进程有一些自己的规则:

204 204 

205* **路径**:相对路径在会话的工作目录下205* **路径**:相对路径相对于会话的工作目录进行解析

206* **`$.fs.list`**:将一个目录的条目作为 `{ name, kind, size, isLink }` 返回,不下降到子目录206* **`$.fs.list`**:将一个目录的条目作为 `{ name, kind, size, isLink }` 返回,不进行递归

207* **`$.process.run`**:接受参数列表,不使用 shell。它解析为 `{ exitCode, stdout, stderr }`,无论退出代码如何。如果程序无法启动或在超时时仍在运行,它会拒绝,默认为 30 秒,因此将其包装在 `try` 和 `catch` 中。207* **`$.process.run`**:接受参数列表,不使用 shell。它解析为 `{ exitCode, stdout, stderr }`,无论退出代码如何。如果程序无法启动或在超时时仍在运行,它会拒绝,默认为 30 秒,因此将其包装在 `try` 和 `catch` 中。

208 208 

209这些调用中的每一个本身都是一个事件,以其命名空间和方法命名,不带 `$.`,例如 `fs.read` 用于 `$.fs.read`。[链中较早的](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in) mod 可以观察、重写或拒绝您的调用,这是组织限制 mod 到达的方式。209这些调用中的每一个本身都是一个事件,以其命名空间和方法命名,不带 `$.`,例如 `fs.read` 用于 `$.fs.read`。[链中较早的](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in) mod 可以观察、重写或拒绝您的调用,这是组织限制 mod 到达的方式。


215* [对事件做出反应](/docs/zh-CN/plugins/mods/events):hook 工具调用、提示和轮次215* [对事件做出反应](/docs/zh-CN/plugins/mods/events):hook 工具调用、提示和轮次

216* [在界面中绘制](/docs/zh-CN/plugins/mods/interface):在窗格或提示上方显示您的 mod 收集的内容216* [在界面中绘制](/docs/zh-CN/plugins/mods/interface):在窗格或提示上方显示您的 mod 收集的内容

217* [测试 mod](/docs/zh-CN/plugins/mods/test):在测试中存根这些调用中的任何一个217* [测试 mod](/docs/zh-CN/plugins/mods/test):在测试中存根这些调用中的任何一个

218* [Mods 参考](/docs/zh-CN/plugins/mods/reference):每个事件、每个 mods API 方法和限制218* [Mods 参考](/docs/zh-CN/plugins/mods/reference):事件、mods API 方法和限制

Details

6 6 

7> 让 Claude 从描述中编写一个 Claude Code mod,或者自己编写一个来计算工具调用并添加命令。学习重新加载和验证循环。7> 让 Claude 从描述中编写一个 Claude Code mod,或者自己编写一个来计算工具调用并添加命令。学习重新加载和验证循环。

8 8 

9Mod 是一个 Claude Code [插件](/docs/zh-CN/plugins/overview),具有一个入口文件,称为 hooks 模块:一个 JavaScript 或 TypeScript 文件,其函数在事件发生时由 Claude Code 调用。有两种方式来创建一个:9Mod 是一个 Claude Code [插件](/docs/zh-CN/plugins/overview),具有一个入口文件,称为 hooks 模块:一个 JavaScript 或 TypeScript 文件,其函数在事件发生时由 Claude Code 调用。创建方式如下:

10 10 

11* **让 Claude 编写它**:在 Claude Code 会话中[描述你想要的内容](#ask-claude-for-a-mod)11* **让 Claude 编写它**:在 Claude Code 会话中[描述你想要的内容](#ask-claude-for-a-mod)

12* **自己编写**:[按照教程](#write-a-mod-yourself)学习 mod 代码的工作原理。你不需要 Node.js、打包工具或构建步骤,因为 Claude Code 直接加载 `.js` 和 `.ts` 文件。12* **自己编写**:[按照教程](#write-a-mod-yourself)学习 mod 代码的工作原理。你不需要 Node.js、打包工具或构建步骤,因为 Claude Code 直接加载 `.js` 和 `.ts` 文件。


69 69 

70* **没有人在那里批准**:会话无法向你显示提示,如在 `claude -p` 运行或 [`dontAsk` 模式](/docs/zh-CN/permission-modes)中70* **没有人在那里批准**:会话无法向你显示提示,如在 `claude -p` 运行或 [`dontAsk` 模式](/docs/zh-CN/permission-modes)中

71* **工作区不受信任**:你还没有接受目录的信任提示71* **工作区不受信任**:你还没有接受目录的信任提示

72* **Mod 已停止**:你使用 `--safe-mode` 或 `--bare` 启动,你设置了 `disableAllHooks`,或你的组织的[托管设置阻止了它](/docs/zh-CN/plugins/mods/admin#choose-how-much-to-allow)72* **mod 已被禁用**:您使用 `--safe-mode` 或 `--bare` 启动,您设置了 `disableAllHooks`,或者您组织的[托管设置阻止了它](/docs/zh-CN/plugins/mods/admin#choose-how-much-to-allow)

73 73 

74<h2 id="write-a-mod-yourself">74<h2 id="write-a-mod-yourself">

75 自己编写一个 mod75 自己编写一个 mod


249* **事件**,名为 `e`:[事件的输入](/docs/zh-CN/plugins/mods/reference#events)作为纯数据,例如工具调用的名称和参数249* **事件**,名为 `e`:[事件的输入](/docs/zh-CN/plugins/mods/reference#events)作为纯数据,例如工具调用的名称和参数

250* **下一个处理程序**,名为 [`next`](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event):一个函数,将事件传递给其他 mod,然后传递给 Claude Code 自己的行为,并返回结果250* **下一个处理程序**,名为 [`next`](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event):一个函数,将事件传递给其他 mod,然后传递给 Claude Code 自己的行为,并返回结果

251 251 

252`first-mod` 中的 hook 以 hook 可以处理的三种方式处理它们的事件:252`first-mod` 中的 hook 以下列方式处理各自的事件:

253 253 

254* **观察**:`session.start` hook 注册命令,`tool.call` hook 计算调用并要求重新绘制。两者都返回 `next(e)`,所以会话启动,工具照常运行。254* **观察**:`session.start` hook 注册命令,`tool.call` hook 计算调用并要求重新绘制。两者都返回 `next(e)`,所以会话启动,工具照常运行。

255* **回答**:`command.run` hook 返回自己的结果,从不调用 `next`。`on` 的第二个参数 `{ command: 'tally' }` 是一个过滤器,称为[匹配器](/docs/zh-CN/plugins/mods/events#filter-which-events-a-hook-handles),所以 hook 仅对 `/tally` 运行。255* **回答**:`command.run` hook 返回自己的结果,从不调用 `next`。`on` 的第二个参数 `{ command: 'tally' }` 是一个过滤器,称为[匹配器](/docs/zh-CN/plugins/mods/events#filter-which-events-a-hook-handles),所以 hook 仅对 `/tally` 运行。


318 318 

319`hooks:` 行列出你的模块 hook 的事件,每个都带有其在大括号中的过滤器。`calls:` 行列出它调用的每个 mods API 方法。读取或设置环境变量的模块也会获得 `env reads:` 和 `env writes:` 行,使用 [`$.state`](/docs/zh-CN/plugins/mods/interface#keep-state) 的模块会获得 `state reads:` 和 `state writes:`。319`hooks:` 行列出你的模块 hook 的事件,每个都带有其在大括号中的过滤器。`calls:` 行列出它调用的每个 mods API 方法。读取或设置环境变量的模块也会获得 `env reads:` 和 `env writes:` 行,使用 [`$.state`](/docs/zh-CN/plugins/mods/interface#keep-state) 的模块会获得 `state reads:` 和 `state writes:`。

320 320 

321如果你打算 hook 的事件在第一行中缺失,Claude Code 也不会调用该 hook。通常的原因是事件名称拼写错误,命令报告为错误,例如 `"tool.calls" is not an event`。321如果您打算处理的某个事件未出现在第一行中,Claude Code 也不会调用该 hook。常见原因是事件名称拼写错误,该命令会将其报告为错误,例如 `"tool.calls" is not an event`。

322 322 

323遵循这些规则,以便静态分析可以找到每个 hook 和调用:323遵循这些规则,以便静态分析可以找到每个 hook 和调用:

324 324 

325* 完整拼写每个 mods API 调用:`$`、命名空间,然后是方法,如 `$.store.get('notes')`。你可以将 `$` 传递给在同一文件的顶级声明的函数,对于你的名为 `loadNotes` 的函数,`calls:` 行然后读取 `$.store.get (via loadNotes)`。将 `$` 传递给方法、在 hook 内定义的函数或从另一个文件导入的函数会导致验证失败。[`$.state`](/docs/zh-CN/plugins/mods/interface#keep-state) 使用的 `read` 和 `update` 函数是可以接受它的导入。不要将 `$` 或其命名空间之一分配给变量、解构它或使用计算名称索引它。`const ui = $.ui` 失败,出现 `$.ui is used as a value`。325* 完整写出每个 mods API 调用:`$`、命名空间,然后是方法,例如 `$.store.get('notes')`。您可以将 `$` 传递给在同一文件顶层声明的函数;对于名为 `loadNotes` 的自定义函数,`calls:` 行会显示 `$.store.get (via loadNotes)`。将 `$` 传递给方法、在 hook 内部定义的函数或从您的其他文件导入的函数会导致验证失败。[`$.state`](/docs/zh-CN/plugins/mods/interface#keep-state) 使用的 `read` 和 `update` 函数是可以接收它的导入。不要将 `$` 或其某个命名空间赋值给变量、对其解构,或使用计算名称对其进行索引。`const ui = $.ui` 会失败并报告 `$.ui is used as a value`。

326* 在每个 `on` 调用中将事件名称写为字符串文字,例如 `'tool.call'`。变量或循环遍历名称列表会失败,出现 `the event name passed to on() is not a string literal`。326* 在每个 `on` 调用中将事件名称写为字符串文字,例如 `'tool.call'`。变量或循环遍历名称列表会失败,出现 `the event name passed to on() is not a string literal`。

327* 在 `register` 内,不要声明第二个名为 `on` 的变量或参数。验证失败,出现 `"on" is declared again (shadowed)`。327* 在 `register` 内,不要声明第二个名为 `on` 的变量或参数。验证失败,出现 `"on" is declared again (shadowed)`。

328* 仅从插件目录内的文件导入,通过相对路径。唯一允许的裸导入是 `claude-code`,用于类型和一些帮助程序。328* 仅从插件目录内的文件导入,通过相对路径。唯一允许的裸导入是 `claude-code`,用于类型和一些帮助程序。


333 测试 mod333 测试 mod

334</h3>334</h3>

335 335 

336你可以为 mod 编写自动化测试,并使用 `claude plugin test` 从你的 shell 运行它们,无需会话、登录或网络。测试引发你的 hook 处理的事件,并检查 hook 做了什么。336您可以为 mod 编写自动化测试,并在 shell 中使用 `claude plugin test` 运行,无需会话、登录或网络。测试会触发您的 hook 所处理的事件,并检查 hook 执行了哪些操作。

337 337 

338这个测试引发两个工具调用,运行 `/tally`,并检查回复计算两者。将其保存为 `first-mod/tests/first-mod.test.ts`:338以下测试触发两次工具调用,运行 `/tally`,并检查回复是否统计了这两次调用。将其保存为 `first-mod/tests/first-mod.test.ts`:

339 339 

340```typescript first-mod/tests/first-mod.test.ts theme={null}340```typescript first-mod/tests/first-mod.test.ts theme={null}

341import { expect, test } from 'claude-code/testing'341import { expect, test } from 'claude-code/testing'


344 // Answer each tool call in Claude Code's place, so no tool runs344 // Answer each tool call in Claude Code's place, so no tool runs

345 on('tool.call', () => ({ result: 'ok' }))345 on('tool.call', () => ({ result: 'ok' }))

346 346 

347 // Raise two tool calls, which the mod's tool.call hook counts347 // Fire two tool calls, which the mod's tool.call hook counts

348 await $.tool.call({ tool: 'Bash', command: 'ls' })348 await $.tool.call({ tool: 'Bash', command: 'ls' })

349 await $.tool.call({ tool: 'Read', file_path: 'README.md' })349 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

350 350 


381 381 

382在你这样做之前,检查插件的 `name`:`claude plugin validate` 失败一个[看起来像 Anthropic 自己的](/docs/zh-CN/plugins/manifest-reference#name)名称,例如以 `claude-` 开头的名称。事件和方法可以在版本之间更改,所以你的 README 是说明你测试的 Claude Code 版本的地方。382在你这样做之前,检查插件的 `name`:`claude plugin validate` 失败一个[看起来像 Anthropic 自己的](/docs/zh-CN/plugins/manifest-reference#name)名称,例如以 `claude-` 开头的名称。事件和方法可以在版本之间更改,所以你的 README 是说明你测试的 Claude Code 版本的地方。

383 383 

384继续针对目录使用 `--plugin-dir` 进行开发,而不是针对已安装的副本。Claude Code 按版本缓存已安装的插件,所以你的编辑在你提高版本并再次安装之前不会到达已安装的副本。384继续针对目录使用 `--plugin-dir` 进行开发,而不是针对已安装的副本。Claude Code 按版本缓存已安装的插件,所以在您提高版本并再次安装之前,您的编辑不会到达已安装的副本。

385 385 

386<h2 id="next-steps">386<h2 id="next-steps">

387 后续步骤387 后续步骤

Details

52 重写事件52 重写事件

53</h3>53</h3>

54 54 

55要更改 Claude Code 作用的内容,例如提示的文本,请使用修改后的事件副本调用 `next`。事件本身是不可变的:它在每个深度都被冻结,分配给字段会抛出错误。此 hook 在发送前修剪每个提示:55要更改 Claude Code 作用的内容,例如提示词的文本,请使用修改后的事件副本调用 `next`。事件本身是不可变的:它被深度冻结,对字段赋值会抛出错误。此 hook 在发送前修剪每个提示词:

56 56 

57```javascript theme={null}57```javascript theme={null}

58on('prompt.submit', async ($, e, next) => {58on('prompt.submit', async ($, e, next) => {


97 97 

98`hook` 为 Bash、Edit 或 Write 调用各运行一次,为名称以 `mcp__github__` 开头的工具调用运行一次。对任何其他工具(如 Read)的调用都不匹配这三个中的任何一个,因此 `hook` 不会为它运行。98`hook` 为 Bash、Edit 或 Write 调用各运行一次,为名称以 `mcp__github__` 开头的工具调用运行一次。对任何其他工具(如 Read)的调用都不匹配这三个中的任何一个,因此 `hook` 不会为它运行。

99 99 

100事件名称可以是通配符。`'classic.*'` 匹配每个[设置 hook 事件](#hook-the-settings-hook-events)。`'*'` 匹配除[遥测事件](/docs/zh-CN/plugins/mods/reference#telemetry)之外的每个事件,你可以按名称或作为 `'telemetry.*'` 来 hook 这些事件。100事件名称可以是通配符。`'classic.*'` 匹配每个[设置 hook 事件](#hook-the-settings-hook-events)。`'*'` 匹配除[遥测事件](/docs/zh-CN/plugins/mods/reference#telemetry)之外的每个事件,遥测事件需使用其自身的名称和 `{ to: 'collector' }` 过滤器。

101 101 

102为每个 matcher 注册一次事件。如果你为 `session.start` 调用 `on` 两次而没有 matcher,模块将无法加载,错误为 `on("session.start") is registered twice without a matcher`。将你的 mod 在会话启动时执行的所有操作放在一个 hook 中。102为每个 matcher 注册一次事件。如果你为 `session.start` 调用 `on` 两次而没有 matcher,模块将无法加载,错误为 `on("session.start") is registered twice without a matcher`。将你的 mod 在会话启动时执行的所有操作放在一个 hook 中。

103 103 

104<h2 id="hook-what-claude-is-doing">104<h2 id="hook-what-claude-is-doing">

105 Hook Claude 正在做的事情105 对 Claude 正在执行的操作设置 hook

106</h2>106</h2>

107 107 

108Hook 这些事件以查看或更改工具调用、提示或轮次。对于每个事件以及 hook 可以返回的内容,请参阅[事件参考](/docs/zh-CN/plugins/mods/reference#events)。108处理这些事件,可以在工具调用、提示词或轮次发生时查看或更改它们。有关每个事件以及 hook 可以返回的内容,请参阅[事件参考](/docs/zh-CN/plugins/mods/reference#events)。

109 109 

110<h3 id="guard-or-change-a-tool-call">110<h3 id="guard-or-change-a-tool-call">

111 保护或更改工具调用111 拦截或更改工具调用

112</h3>112</h3>

113 113 

114`tool.call` hook 看到 Claude 即将使用的每个工具,因此它可以拒绝调用、更改其参数或让其通过。`tool.call` 在 Claude Code 即将运行工具时触发,包括子代理进行的调用和对 MCP 工具的调用。`e.tool` 是工具的名称,工具的参数是 `e` 的字段,例如 Bash 的 `e.command`。当你调用 `next(e)` 时,Claude Code 运行权限检查,然后运行工具。114`tool.call` hook 会看到 Claude 即将使用的每个工具,因此可以拒绝调用、更改其参数或放行。`tool.call` 在 Claude Code 即将运行某个工具时触发,包括子代理发起的调用以及对 MCP 工具的调用。`e.tool` 是工具名称,工具的参数是 `e` 的字段,例如 Bash 的 `e.command`。调用 `next(e)` 时,Claude Code 会先运行权限检查,然后运行该工具。

115 115 

116此 hook 拒绝强制推送的 Bash 命令,并告诉 Claude 原因:116以下 hook 会拒绝执行强制推送的 Bash 命令,并告诉 Claude 原因:

117 117 

118```javascript theme={null}118```javascript theme={null}

119// matcher 将 hook 限制为 Bash 调用,因此 e.command 是 shell 命令119// The matcher limits the hook to Bash calls, so e.command is the shell command

120on('tool.call', { tool: 'Bash' }, async ($, e, next) => {120on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

121 if (/git push .*--force/.test(e.command)) {121 if (/git push .*--force/.test(e.command)) {

122 // 返回而不调用 next 会回答事件,所以命令永远不会运行122 // Returning without calling next answers the event, so the command never runs

123 return { deny: 'Force pushes are not allowed in this repository. Push to a new branch instead.' }123 return { deny: 'Force pushes are not allowed in this repository. Push to a new branch instead.' }

124 }124 }

125 // 每个其他命令都会进行权限检查,然后进行 Bash125 // Every other command goes on to the permission check and then to Bash

126 return next(e)126 return next(e)

127})127})

128```128```

129 129 

130当 Claude 尝试 `git push --force` 时,命令不会运行,也不会出现权限提示,因为 hook 永远不会调用 `next`。Claude 将 `deny` 文本读作工具的结果,因此将其写成 Claude 可以采取行动的指令。每个其他 Bash 命令的运行方式与没有 mod 时相同。130当 Claude 尝试执行 `git push --force` 时,该命令不会运行,也不会出现权限提示,因为该 hook 从未调用 `next`。Claude 会将 `deny` 文本作为工具的结果读取,因此请将其写成 Claude 可以据此采取行动的指令。其他所有 Bash 命令的运行方式与没有该 mod 时相同。

131 131 

132要在工具运行后采取行动,请 `await next(e)`、执行你的工作并返回 `next` 给你的内容。此 hook 记录 Claude 更改的每个 `.mdx` 文件,使用 [`$.ui.log`](/docs/zh-CN/plugins/mods/api#show-something-without-starting-a-turn),它向转录中添加一条暗线,Claude 不会读取:132要在工具运行之后执行操作,请 `await next(e)`,完成您的工作,然后返回 `next` 给您的结果。以下 hook 使用 [`$.ui.log`](/docs/zh-CN/plugins/mods/api#show-something-without-starting-a-turn) 记录 Claude 更改的每个 `.mdx` 文件,该方法会在会话记录中添加一行 Claude 不会读取的暗色文本:

133 133 

134```javascript theme={null}134```javascript theme={null}

135on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {135on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {

136 // 等待权限检查和工具,并保留它们生成的内容136 // Wait for the permission check and the tool, and keep what they produced

137 const result = await next(e)137 const result = await next(e)

138 // 被拒绝的调用返回为 { deny },失败的调用设置了 isError138 // A refused call comes back as { deny }, and a failed one has isError set

139 const changed = !result.deny && !result.isError139 const changed = !result.deny && !result.isError

140 if (changed && e.file_path.endsWith('.mdx')) $.ui.log('Claude changed ' + e.file_path)140 if (changed && e.file_path.endsWith('.mdx')) $.ui.log('Claude changed ' + e.file_path)

141 // 原样返回结果,所以 Claude 读取工具返回的内容141 // Return the result as it came, so Claude reads what the tool returned

142 return result142 return result

143})143})

144```144```

145 145 

146Claude 编辑或写入 `.mdx` 文件后,转录中的暗线会命名该文件。对于另一种文件或被拒绝或失败的调用,不会记录任何内容。Claude 对调用的看法不会改变,因为 hook 返回它接收的结果。146在 Claude 编辑或写入 `.mdx` 文件后,会话记录中会出现一行暗色文本,注明该文件名。对于其他类型的文件,或者被拒绝或失败的调用,不会记录任何内容。Claude 对该调用的认知不会改变,因为该 hook 返回的是它收到的结果。

147 147 

148要更改调用,请将更改的参数传递给 `next`。要重试调用,请再次调用 `next(e)`:看到第一个结果上的 `isError` 的 hook 可以第二次运行工具并返回该结果。要自己回答调用,请返回带有 `result` 字段的对象,例如 `{ result: 'Skipped by my-mod' }`,而不调用 `next`。当你这样做时,不会出现权限提示,工具不会运行,因此你返回的结果是 Claude 了解发生了什么的全部内容。148要更改调用,请将更改后的参数传给 `next`。要重试调用,请再次调用 `next(e)`:如果 hook 在第一次结果中看到 `isError`,可以再次运行该工具并返回那次的结果。要自行响应调用,请在不调用 `next` 的情况下返回一个带有 `result` 字段的对象,例如 `{ result: 'Skipped by my-mod' }`。这样做时,不会出现权限提示,工具也不会运行,因此您返回的结果就是 Claude 对所发生情况的全部了解。

149 149 

150你的组织的[托管设置](/docs/zh-CN/server-managed-settings)中的 hooks 在任何 mod 的 `tool.call` hook 之前运行,其中一个的块是最终的。150您组织的[托管设置](/docs/zh-CN/server-managed-settings)中的 hook 会在任何 mod 的 `tool.call` hook 之前运行,并且其中任一 hook 的阻止都是最终决定。

151 151 

152<h4 id="hold-a-tool-call-until-the-user-decides">152<h4 id="hold-a-tool-call-until-the-user-decides">

153 保持工具调用直到用户决定153 暂缓工具调用,直到用户做出决定

154</h4>154</h4>

155 155 

156hook 可以暂停工具调用并在继续之前询问用户该怎么做。`tool.call` hook 可以在调用 `next` 或返回之前 `await`,工具调用保持待处理状态直到那时。要向用户提出问题,请调用 `$.ui.ask`。它在 Claude 用来问你的对话框中的编号列表上方显示你的问题,并解析为用户选择的标签。在你的选项之后,对话框添加一行用于输入不同的答案和一个**聊天此问题**行。156hook 可以暂停工具调用,并在其继续之前询问用户如何处理。`tool.call` hook 可以在调用 `next` 或返回之前执行 `await`,在此之前工具调用会一直处于挂起状态。要向用户提出问题,请调用 `$.ui.ask`。它会在 Claude 向您提问时使用的对话框中,将您的问题显示在您的选项编号列表上方,并解析为用户选择的标签。在您的选项之后,对话框会添加一行用于输入其他答案,以及一行 **Chat about this**。

157 157 

158此示例中的 `RISKY` 模式匹配 `rm -r`、`rm -rf`、`git reset --hard` 和带有 `--force` 的 `git push`,它会错过其他拼写,例如 `git push -f`。此模块在运行与模式匹配的 Bash 命令之前询问:158此示例中的 `RISKY` 模式匹配 `rm -r`、`rm -rf`、`git reset --hard` 以及带有 `--force` 的 `git push`,但不匹配其他写法,例如 `git push -f`。此模块会在运行与该模式匹配的 Bash 命令之前进行询问:

159 159 

160```javascript theme={null}160```javascript theme={null}

161const RISKY = /\brm\s+-rf?\b|\bgit\s+reset\s+--hard\b|\bgit\s+push\b.*--force/161const RISKY = /\brm\s+-rf?\b|\bgit\s+reset\s+--hard\b|\bgit\s+push\b.*--force/

162 162 

163export function register(on) {163export function register(on) {

164 on('tool.call', { tool: 'Bash' }, async ($, e, next) => {164 on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

165 // 让每个其他命令通过而不提问165 // Let every other command through without a question

166 if (!RISKY.test(e.command)) return next(e)166 if (!RISKY.test(e.command)) return next(e)

167 // 从安全答案开始,所以没有人回答的问题会拒绝命令167 // Start from the safe answer, so a question nobody answers refuses the command

168 let answer = 'Refuse'168 let answer = 'Refuse'

169 try {169 try {

170 // 工具调用在这里等待,直到用户选择两个标签之一170 // The tool call waits here until the user picks one of the two labels

171 answer = await $.ui.ask('Run this command? ' + e.command, ['Run it', 'Refuse'])171 answer = await $.ui.ask('Run this command? ' + e.command, ['Run it', 'Refuse'])

172 } catch {172 } catch {

173 // 用户关闭了问题,或这是一个 claude -p 运行,没有人可以问173 // The user dismissed the question, or this is a claude -p run with nobody to ask

174 }174 }

175 if (answer !== 'Run it') {175 if (answer !== 'Run it') {

176 // 回答而不调用 next,所以命令不会运行176 // Answer without calling next, so the command doesn't run

177 return { deny: 'The user declined this command. Ask before trying a different approach.' }177 return { deny: 'The user declined this command. Ask before trying a different approach.' }

178 }178 }

179 return next(e)179 return next(e)


181}181}

182```182```

183 183 

184当 Claude 尝试诸如 `rm -rf build` 的命令时,问题会出现,命令会等待答案:184当 Claude 尝试执行诸如 `rm -rf build` 之类的命令时,会出现包含该命令的问题,命令会等待回答:

185 185 

186* **用户选择 Run it**:hook 调用 `next(e)`,通常的权限检查仍然在之后运行186* **用户选择 Run it**:hook 调用 `next(e)`,之后仍会运行常规的权限检查

187* **用户选择 Refuse**:命令不会运行,Claude 读取 `deny` 文本187* **用户选择 Refuse**:命令不会运行,Claude 会读取 `deny` 文本

188* **用户输入答案**:`$.ui.ask` 解析为输入的文本。hook 将其与 `Run it` 进行比较,因此任何其他文本都会拒绝命令。188* **用户输入答案**:`$.ui.ask` 解析为输入的文本。hook 会将其与 `Run it` 比较,因此任何其他文本都会拒绝该命令。

189* **没有人回答**:当用户关闭问题或选择**聊天此问题**时,`$.ui.ask` 会拒绝,在 `claude -p` 运行中也是如此,因此 `catch` 块将答案保留在 `Refuse`189* **无人回答**:当用户关闭问题或选择 **Chat about this** 时,以及在 `claude -p` 运行中,`$.ui.ask` 会 reject,因此 `catch` 块会将答案保留为 `Refuse`

190 190 

191将等待保持在 mods API 调用(如 `$.ui.ask`)内,因为该时间不计入 hook 的[10 秒时间限制](/docs/zh-CN/plugins/mods/reference#limits)。花在等待你自己的承诺上的时间确实计入。Claude Code 跳过超时的 hook,因此保持的命令会运行。191请将等待保持在诸如 `$.ui.ask` 之类的 mods API 调用内部,因为这段时间不计入 hook 的[时间限制](/docs/zh-CN/plugins/mods/reference#limits)。等待您自己的 promise 所花费的时间则会计入。Claude Code 会跳过超时的 hook,因此被暂缓的命令将会运行。

192 

193<h4 id="approve-or-refuse-a-tool-call-before-the-user-is-asked">

194 在询问用户之前批准或拒绝工具调用

195</h4>

196 

197要决定某个工具调用是否可以运行,请处理 [`tool.check`](/docs/zh-CN/plugins/mods/reference#tools),这是 Claude Code 做出该决定的事件。它在权限规则和设置 hook 做出决定之后触发,`next(e)` 会解析为它们的决定:`allow`、`ask` 或 `deny`。您的 hook 返回该决定或另一个决定。`e.input` 保存工具的参数,例如 Bash 的 `command`。

198 

199对于固定的命令或路径,请使用诸如 `Bash(npm test)` 之类的[权限规则](/docs/zh-CN/permissions#permission-rule-syntax),无需编写代码。当决定取决于当下的实际情况(例如当前的 Git 分支或另一个 hook 记录的值)时,请处理 `tool.check`。

200 

201以下 hook 会在当前分支为 `main` 时拒绝 `git push`:

202 

203```javascript theme={null}

204on('tool.check', { tool: 'Bash' }, async ($, e, next) => {

205 // What the permission rules and settings hooks decided: 'allow', 'ask', or 'deny'

206 const decided = await next(e)

207 if (!e.input.command.includes('git push')) return decided

208 const branch = await $.process.run(['git', 'branch', '--show-current'])

209 if (branch.stdout.trim() !== 'main') return decided

210 return { decision: 'deny', reason: 'Push from a branch other than main' }

211})

212```

213 

214在 `main` 上,即使有规则允许 `git push`,该 hook 也会返回 `deny`。在其他分支上以及对于其他命令,调用会得到与没有该 mod 时相同的决定。

215 

216该 hook 匹配的是命令文本,因此请将其视为对 Claude 的提醒。要为所有人阻止向 `main` 推送,请在您的 Git 托管平台上保护该分支。

217 

218hook 可以返回 `allow`、`ask` 或 `deny`,因此它也可以批准被托管设置之外的 `PreToolUse` hook 阻止的调用。[使用 hook 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了哪些决定优先于 mod。

192 219 

193<h3 id="rewrite-or-add-to-a-prompt">220<h3 id="rewrite-or-add-to-a-prompt">

194 重写或添加到提示221 改写或补充提示词

195</h3>222</h3>

196 223 

197`prompt.submit` hook 在轮次开始之前看到每个提示,因此它可以重写文本或添加到其中。`e.text` 是输入的内容。224`prompt.submit` hook 会在轮次开始之前看到每个提示词,因此可以改写文本或向其中添加内容。`e.text` 是输入的内容。

198 225 

199| 要执行此操作 | 返回此内容 |226| 要执行的操作 | 返回的内容 |

200| :- | :- |227| :- | :- |

201| 重写提示。转录中的消息显示新文本。 | `next({ ...e, text: newText })` |228| 改写提示词。会话记录中的消息会显示新文本。 | `next({ ...e, text: newText })` |

202| 仅添加 Claude 读取的文本,在提示之后 | `next({ ...e, context: [...(e.context ?? []), extraText] })` |229| 在提示词之后添加只有 Claude 读取的文本 | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

203| 停止发送提示 | `{ drop: 'the reason' }` |230| 阻止发送提示词 | `{ drop: 'the reason' }` |

204 231 

205此 hook 在提示提及拉取请求时为 Claude 添加当前分支名称:232以下 hook 会在提示词提及 Pull Request 时,为 Claude 添加当前分支名称:

206 233 

207```javascript theme={null}234```javascript theme={null}

208on('prompt.submit', async ($, e, next) => {235on('prompt.submit', async ($, e, next) => {

209 // 原样传递不提及拉取请求的提示236 // Pass on a prompt that doesn't mention a pull request as it is

210 if (!/\bPR\b|pull request/i.test(e.text)) return next(e)237 if (!/\bPR\b|pull request/i.test(e.text)) return next(e)

211 const git = await $.process.run(['git', 'branch', '--show-current'])238 const git = await $.process.run(['git', 'branch', '--show-current'])

212 // 在 git 存储库外,命令失败,因此没有分支可添加239 // Outside a git repository the command fails, so there's no branch to add

213 if (git.exitCode !== 0) return next(e)240 if (git.exitCode !== 0) return next(e)

214 // 保留早期 hook 添加的任何上下文,并为 Claude 添加一行241 // Keep any context an earlier hook added, and add one more line for Claude

215 return next({ ...e, context: [...(e.context ?? []), 'Current branch: ' + git.stdout.trim()] })242 return next({ ...e, context: [...(e.context ?? []), 'Current branch: ' + git.stdout.trim()] })

216})243})

217```244```

218 245 

219当你发送诸如 `open a PR for this change` 的提示时,你的消息在转录中看起来相同,Claude 也会在其后读取诸如 `Current branch: feature/auth` 的行。不提及拉取请求的提示会原样通过,`git` 不会运行。246当您发送诸如 `open a PR for this change` 之类的提示词时,您的消息在会话记录中看起来不变,而 Claude 还会在其后读取诸如 `Current branch: feature/auth` 的一行。未提及 Pull Request 的提示词会原样通过,且不会运行 `git`。

220 247 

221[其他事件](/docs/zh-CN/plugins/mods/reference#prompts-and-what-claude-reads)涵盖 Claude 读取的其余内容:`prompt.section` 用于系统提示的每个部分,`prompt.context` 用于与第一条消息一起发送的上下文,`skill.prompt` 用于技能的文本。来自这些 hook 的文本在请求之间更改时会[使提示缓存失效](/docs/zh-CN/prompt-caching)。248[其他事件](/docs/zh-CN/plugins/mods/reference#prompts-and-what-claude-reads)涵盖了 Claude 读取的其余内容:`prompt.section` 用于系统提示词的每个部分,`prompt.context` 用于随第一条消息发送的上下文,`skill.prompt` 用于 skill 的文本。这些 hook 产生的文本如果在请求之间发生变化,会[使提示缓存失效](/docs/zh-CN/prompt-caching)。

222 249 

223<h3 id="follow-a-turn">250<h3 id="follow-a-turn">

224 跟踪轮次251 跟踪轮次

225</h3>252</h3>

226 253 

227轮次是 Claude 为回答一个提示而做的所有事情。Hook `turn.start`、`turn.step` 和 `turn.complete` 来跟踪一个:254轮次是 Claude 为回应一个提示词所做的全部工作。处理 `turn.start`、`turn.step` 和 `turn.complete` 来跟踪一个轮次:

228 255 

229| 事件 | 何时触发 | hook 可以做什么 |256| 事件 | 触发时机 | hook 可以执行的操作 |

230| :- | :- | :- |257| :- | :- | :- |

231| `turn.start` | 轮次开始 | 观察。`e.turnId` 在其他两个事件中标识轮次。 |258| `turn.start` | 轮次开始 | 观察。`e.turnId` 在另外两个事件中标识该轮次。 |

232| `turn.step` | Claude Code 即将向模型发送一个请求。具有工具调用的轮次有多个。`e.agentId` 为子代理的请求设置。 | 读取每个请求的令牌使用情况,使用 `next({ ...e, model })` 将其发送到不同的模型,或在不调用模型的情况下回答 |259| `turn.step` | Claude Code 即将向模型发送一个请求。包含工具调用的轮次会有多个请求。子代理的请求会设置 `e.agentId`。 | 读取每个请求的 token 用量、通过 `next({ ...e, model })` 将其发送到不同的模型,或在不调用模型的情况下直接响应 |

233| `turn.complete` | 轮次结束,包括用户中断的轮次,其中 `e.isAborted` 为 `true`。`e.answer` 是 Claude 的最终文本,`e.durationMs` 是花费的时间,`e.usage` 是轮次的令牌总数。子代理的轮次使用 `e.agentId` 设置触发它。 | 观察,或返回带有 `text` 字段的对象,例如 `{ text: 'Done in 12 seconds' }`,以在答案下显示一行 |260| `turn.complete` | 轮次结束,包括用户中断的轮次,此时 `e.isAborted` 为 `true`。`e.answer` 是 Claude 的最终文本,`e.durationMs` 是所用时间,`e.usage` 是该轮次的 token 总量。子代理的轮次触发该事件时会设置 `e.agentId`。 | 观察,或返回一个带有 `text` 字段的对象(例如 `{ text: 'Done in 12 seconds' }`),以在回答下方显示一行 |

234 261 

235将 `turn.step` hook 写成异步生成器,因为事件流。`yield* next(e)` 在流式传输时转发响应并评估为完成的结果。此 hook 记录每个请求中 Claude API 从[提示缓存](/docs/zh-CN/prompt-caching)提供的数量:262请将 `turn.step` hook 编写为异步生成器,因为该事件是流式的。`yield* next(e)` 会在响应流式传输时将其转发,并求值为完成后的结果。以下 hook 会记录 Claude API 从[提示缓存](/docs/zh-CN/prompt-caching)中为每个请求提供了多少内容:

236 263 

237```javascript theme={null}264```javascript theme={null}

238// function* 使 hook 成为生成器,可以逐块传递响应265// function* makes the hook a generator, which can pass the response on piece by piece

239on('turn.step', async function* ($, e, next) {266on('turn.step', async function* ($, e, next) {

240 // 发送请求,在每个片段到达时转发它,并保留完成的结果267 // Send the request, forward each piece as it arrives, and keep the finished result

241 const result = yield* next(e)268 const result = yield* next(e)

242 // 跳过不报告令牌计数的结果269 // Skip a result that reports no token counts

243 if (result.usage) {270 if (result.usage) {

244 $.ui.log('cache read ' + result.usage.cache_read_input_tokens + ' · wrote ' + result.usage.cache_creation_input_tokens)271 $.ui.log('cache read ' + result.usage.cache_read_input_tokens + ' · wrote ' + result.usage.cache_creation_input_tokens)

245 }272 }

246 // 原样返回结果,所以轮次照常继续273 // Return the result unchanged, so the turn continues as usual

247 return result274 return result

248})275})

249```276```

250 277 

251Claude 的响应流式传输到屏幕,就像没有 mod 时一样。每个请求完成后,转录中的暗线给出从缓存读取的令牌数和写入的令牌数。具有工具调用的轮次有多个请求,因此它添加多行。278Claude 的回复会像没有该 mod 时一样以流式方式显示在屏幕上。每个请求完成后,会话记录中会出现一行暗色文本,给出从缓存读取的 token 数和写入缓存的 token 数。包含工具调用的轮次会有多个请求,因此会添加多行。

252 279 

253`result.usage` 保存 Claude API 为请求报告的四个令牌计数,加上回答的 `model`:`input_tokens`、`output_tokens`、`cache_read_input_tokens` 和 `cache_creation_input_tokens`。hook 也为子代理的请求运行,因此当你只想要主对话时检查 `e.agentId`。280`result.usage` 保存 Claude API 为某个请求报告的 token 计数,以及作出回答的 `model`:`input_tokens`、`output_tokens`、`cache_read_input_tokens` 和 `cache_creation_input_tokens`。该 hook 也会针对子代理的请求运行,因此如果您只想处理主对话,请检查 `e.agentId`。

254 281 

255<h3 id="hook-the-settings-hook-events">282<h3 id="hook-the-settings-hook-events">

256 Hook 设置 hook 事件283 处理设置 hook 事件

257</h3>284</h3>

258 285 

259设置 hooks 是你在设置文件中配置的命令、HTTP、提示和代理 hooks。每个[设置 hook 事件](/docs/zh-CN/hooks#hook-events),例如 `Stop`、`SessionEnd` 或 `PostToolUse`,也是一个名为 `classic.` 后跟设置 hook 事件名称的事件,例如 `classic.Stop`。`e` 是设置 hook 在 stdin 上接收的 JSON,包括 `transcript_path`。286设置 hook 是您在设置文件中配置的命令、HTTP、提示词和 Agent hook。每个[设置 hook 事件](/docs/zh-CN/hooks#hook-events)(例如 `Stop`、`SessionEnd` 或 `PostToolUse`)同时也是一个名为 `classic.` 后跟该设置 hook 事件名称的事件,例如 `classic.Stop`。`e` 是设置 hook 在 stdin 上接收的 JSON,包括 `transcript_path`。

260 287 

261此 hook 使用 `Stop`(在 Claude 完成响应时触发)来记录会话的转录保存位置:288以下 hook 使用 `Stop`(在 Claude 完成回复时触发)来记录会话的会话记录保存位置:

262 289 

263```javascript theme={null}290```javascript theme={null}

264on('classic.Stop', async ($, e, next) => {291on('classic.Stop', async ($, e, next) => {

265 // e 具有设置文件中的 Stop hook 从 stdin 读取的相同字段292 // e has the same fields a Stop hook in a settings file reads from stdin

266 $.ui.log('Transcript saved at ' + e.transcript_path)293 $.ui.log('Transcript saved at ' + e.transcript_path)

267 // 传递事件,所以你的设置文件中的 Stop hooks 仍然运行294 // Pass the event on, so Stop hooks in your settings files still run

268 return next(e)295 return next(e)

269})296})

270```297```

271 298 

272每次 Claude 完成响应时,转录中的暗线都会给出转录文件的路径。hook 返回 `next(e)`,因此它观察事件并不改变轮次的结束方式。299每次 Claude 完成回复时,会话记录中会出现一行暗色文本,给出会话记录文件的路径。该 hook 返回 `next(e)`,因此它只观察该事件,不会改变轮次结束的方式。

273 300 

274<h2 id="run-alongside-other-mods">301<h2 id="run-alongside-other-mods">

275 与其他 mod 一起运行302 与其他 mod 一起运行

276</h2>303</h2>

277 304 

278多个 mod 可以 hook 同一事件,其中任何一个都可能失败。如果你的 mod 阻止工具调用,请检查它在链中的位置以及当其 hook 失败时会发生什么。305多个 mod 可以处理同一事件,其中任何一个都可能失败。如果您的 mod 阻止工具调用,请检查它在链中的位置以及当其 hook 失败时会发生什么。

279 306 

280<h3 id="the-order-mods-run-in">307<h3 id="the-order-mods-run-in">

281 mod 运行的顺序308 mod 运行的顺序


301* **来自托管设置的 `PreToolUse` hooks**:在第一个 mod 的 `tool.call` hook 之前运行,其中一个的块是最终的,因此没有 mod 看到调用。328* **来自托管设置的 `PreToolUse` hooks**:在第一个 mod 的 `tool.call` hook 之前运行,其中一个的块是最终的,因此没有 mod 看到调用。

302* **来自每个其他设置文件和插件的 `hooks/hooks.json` 的 `PreToolUse` hooks**:在最后一个 mod 调用 `next` 后运行,作为 Claude Code 自己的行为的一部分。回答 `tool.call` 而不调用 `next` 的 mod 会阻止它们运行,调用 `next` 的 mod 在它返回的结果中看到它们的决定。329* **来自每个其他设置文件和插件的 `hooks/hooks.json` 的 `PreToolUse` hooks**:在最后一个 mod 调用 `next` 后运行,作为 Claude Code 自己的行为的一部分。回答 `tool.call` 而不调用 `next` 的 mod 会阻止它们运行,调用 `next` 的 mod 在它返回的结果中看到它们的决定。

303 330 

304[`tool.check`](/docs/zh-CN/plugins/mods/reference#tools) 是 Claude Code 决定是否允许工具调用运行的事件。它在这些 hooks 和权限规则决定后触发,`next(e)` 解析为它们的决定。`tool.check` 上的 hook 可以返回不同的决定,例如 `{ decision: 'allow' }`,因此它可以批准第二组中的 hook 阻止的调用。[使用 hooks 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出哪些决定对 mod 有效。331[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) 在这些 hook 和权限规则做出决定后触发,因此其上的 hook 可以批准第二组中的 hook 所阻止的调用。

305 332 

306<h3 id="handle-a-hook-that-fails">333<h3 id="handle-a-hook-that-fails">

307 处理失败的 hook334 处理失败的 hook


324})351})

325```352```

326 353 

327当 `guard` 工作时,处理程序永远不会运行。当 `guard` 在 Bash 调用上抛出或超时时,Claude Code 使用相同的事件调用处理程序。处理程序返回 `{ deny }`,所以命令不会运行,Claude 读取末尾带有 `throw` 或 `timeout` 的文本。没有处理程序,Claude Code 会跳过 `guard` 并运行命令。处理程序有[一秒](/docs/zh-CN/plugins/mods/reference#limits)来回答。354当 `guard` 工作时,处理程序永远不会运行。当 `guard` 在 Bash 调用上抛出或超时时,Claude Code 使用相同的事件调用处理程序。处理程序返回 `{ deny }`,所以命令不会运行,Claude 读取末尾带有 `throw` 或 `timeout` 的文本。没有处理程序,Claude Code 会跳过 `guard` 并运行命令。处理程序自身有更短的[时间限制](/docs/zh-CN/plugins/mods/reference#limits)。

328 355 

329<h2 id="next-steps">356<h2 id="next-steps">

330 后续步骤357 后续步骤

Details

4 4 

5# 使用 mod 在界面中绘制5# 使用 mod 在界面中绘制

6 6 

7> 从 Claude Code mod 中绘制窗格、提示符上方的条带、按钮和文本字段,处理按键和输入,并在重绘和会话之间保持状态。7> 从 Claude Code mod 中绘制窗格、输入框上方的条带、按钮和文本字段,处理按键和输入,并在重绘和会话之间保持状态。

8 8 

9mod 可以在 Claude Code 中绘制自己的界面,并更改 Claude Code 已经绘制的界面部分。mod 可以绘制的每个位置称为[渲染站点](/docs/zh-CN/plugins/mods/reference#render-sites),例如窗格、提示符上方的条带或加载指示器。Claude Code 在即将绘制渲染站点时会触发 [`ui.render`](/docs/zh-CN/plugins/mods/reference#interface) 事件,你的该事件钩子返回在那里绘制的内容。9mod 可以在 Claude Code 中绘制自己的界面,并更改 Claude Code 已经绘制的界面部分。mod 可以绘制的每个位置称为[渲染站点](/docs/zh-CN/plugins/mods/reference#render-sites),例如窗格、输入框上方的条带或加载指示器。Claude Code 每次即将绘制渲染站点时都会触发 [`ui.render`](/docs/zh-CN/plugins/mods/reference#interface) 事件,您为该事件编写的 hook 返回要在那里绘制的内容。

10 10 

11此地图显示 mod 可以在终端会话中的绘制位置:11此地图显示 mod 可以在终端会话中的绘制位置:

12 12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Claude Code 终端会话的地图。mod 可以在右侧添加窗格作为侧边栏,在记录的右上角添加 toast,在记录中添加日志行,在提示符上方添加条带,以及在提示符下方添加状态行。mod 可以重绘消息、工具调用行和加载指示器。提示符是 Claude Code 自己的。" width="600" height="336" data-path="images/mods-screen-map.svg" />13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Claude Code 终端会话的地图。mod 可以在右侧添加窗格作为侧边栏,在会话记录的右上角添加 toast,在会话记录中添加日志行,在输入框上方添加条带,以及在输入框下方添加状态栏。mod 可以重绘消息、工具调用行和加载指示器。输入框是 Claude Code 自己的。" width="600" height="336" data-path="images/mods-screen-map.svg" />

14 14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Claude Code 终端会话的地图。mod 可以在右侧添加窗格作为侧边栏,在记录的右上角添加 toast,在记录中添加日志行,在提示符上方添加条带,以及在提示符下方添加状态行。mod 可以重绘消息、工具调用行和加载指示器。提示符是 Claude Code 自己的。" width="600" height="336" data-path="images/mods-screen-map-dark.svg" />15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Claude Code 终端会话的地图。mod 可以在右侧添加窗格作为侧边栏,在会话记录的右上角添加 toast,在会话记录中添加日志行,在输入框上方添加条带,以及在输入框下方添加状态栏。mod 可以重绘消息、工具调用行和加载指示器。输入框是 Claude Code 自己的。" width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 16 

17在较窄的终端中,窗格位于提示符上方而不是记录旁边。17在较窄的终端中,窗格位于输入框上方而不是会话记录旁边。

18 18 

19在开始之前,请构建你的[第一个 mod](/docs/zh-CN/plugins/mods/create)。从工作示例开始,该示例构建一个具有两个选项卡和计数器的窗格,然后阅读你想要更改的每个部分的部分。19在开始之前,请先构建您的[第一个 mod](/docs/zh-CN/plugins/mods/create)。从完整示例开始,该示例构建一个具有两个选项卡和一个计数器的窗格,然后阅读您想要更改的每个部分对应的章节。

20 20 

21<Note>21<Note>

22 要查找一个属性或限制,请参阅[参考](/docs/zh-CN/plugins/mods/reference#render-sites)。22 要查找某个属性或限制,请参阅[参考](/docs/zh-CN/plugins/mods/reference#render-sites)。

23</Note>23</Note>

24 24 

25<h2 id="build-a-pane-with-tabs">25<h2 id="build-a-pane-with-tabs">

26 构建带有选项卡的窗格26 构建带有选项卡的窗格

27</h2>27</h2>

28 28 

29在本部分中,你将构建一个 mod,该 mod 添加 `/hello-tabs` 命令,该命令打开一个窗格。窗格是在宽全屏终端中记录旁边的侧边栏,或在其他情况下是提示符上方的框架区域。此窗格显示两个选项卡,第二个选项卡有一个按钮,可以将计数器加一。重新启动 Claude Code 后,计数仍然存在。29在本部分中,您将构建一个 mod,该 mod 添加 `/hello-tabs` 命令,该命令打开一个窗格。窗格是在宽全屏终端中会话记录旁边的侧边栏,或在其他情况下是输入框上方的框架区域。此窗格显示两个选项卡,第二个选项卡有一个按钮,可以将计数器加一。重新启动 Claude Code 后,计数仍然存在。

30 30 

31完成的 mod 看起来像这样。录制打开窗格,切换到第二个选项卡,按几次按钮,然后返回到第一个选项卡:31完成的 mod 看起来像这样。录制内容打开窗格,切换到第二个选项卡,按几次按钮,然后返回到第一个选项卡:

32 32 

33<Frame>33<Frame>

34 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=49d520094d87b5b44bfe50fa49677f06" aria-label="在 Claude Code 提示符处键入 /hello-tabs 命令,一个框架窗格在其上方打开,顶部显示&#x22;1: One&#x22;和&#x22;2: Two&#x22;,文本为&#x22;This is the first tab.&#x22;。第二个选项卡显示&#x22;Add one&#x22;按钮,旁边是&#x22;Count: 1&#x22;,计数上升到 3。窗格然后返回到第一个选项卡。" data-path="images/mods-hello-tabs-light.mp4" />34 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=49d520094d87b5b44bfe50fa49677f06" aria-label="在 Claude Code 输入框中键入 /hello-tabs 命令,一个框架窗格在其上方打开,顶部显示&#x22;1: One&#x22;和&#x22;2: Two&#x22;,文本为&#x22;This is the first tab.&#x22;。第二个选项卡显示&#x22;Add one&#x22;按钮,旁边是&#x22;Count: 1&#x22;,计数上升到 3。窗格然后返回到第一个选项卡。" data-path="images/mods-hello-tabs-light.mp4" />

35 35 

36 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=ff7a14d713d6e5d3b0000efa8522ea4b" aria-label="在 Claude Code 提示符处键入 /hello-tabs 命令,一个框架窗格在其上方打开,顶部显示&#x22;1: One&#x22;和&#x22;2: Two&#x22;,文本为&#x22;This is the first tab.&#x22;。第二个选项卡显示&#x22;Add one&#x22;按钮,旁边是&#x22;Count: 1&#x22;,计数上升到 3。窗格然后返回到第一个选项卡。" data-path="images/mods-hello-tabs-dark.mp4" />36 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=ff7a14d713d6e5d3b0000efa8522ea4b" aria-label="在 Claude Code 输入框中键入 /hello-tabs 命令,一个框架窗格在其上方打开,顶部显示&#x22;1: One&#x22;和&#x22;2: Two&#x22;,文本为&#x22;This is the first tab.&#x22;。第二个选项卡显示&#x22;Add one&#x22;按钮,旁边是&#x22;Count: 1&#x22;,计数上升到 3。窗格然后返回到第一个选项卡。" data-path="images/mods-hello-tabs-dark.mp4" />

37</Frame>37</Frame>

38 38 

39Claude Code 没有内置的 tabs 元素,所以选项卡是一行中的两个按钮。mod 跟踪哪一个是活动的,并在该行下方绘制该选项卡的内容。39选项卡是一行中的两个按钮。mod 跟踪哪一个是活动的,并在该行下方绘制该选项卡的内容。

40 40 

41<Steps>41<Steps>

42 <Step title="创建插件">42 <Step title="创建插件">

43 mod 是一个具有清单、指向你的代码的 `hooks.json` 和代码文件的插件。[创建 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 解释了每一个。创建一个名为 `hello-tabs` 的目录,其中包含 `.claude-plugin` 和 `hooks` 目录,然后保存前两个文件。43 mod 是一个具有清单、指向您的代码的 `hooks.json` 和代码文件的插件。[创建 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 解释了每一个。创建一个名为 `hello-tabs` 的目录,其中包含 `.claude-plugin` 和 `hooks` 目录,然后保存前两个文件。

44 44 

45 将清单保存为 `hello-tabs/.claude-plugin/plugin.json`:45 将清单保存为 `hello-tabs/.claude-plugin/plugin.json`:

46 46 


53 }53 }

54 ```54 ```

55 55 

56 在 `hello-tabs/hooks/hooks.json` 中命名你的入口点:56 在 `hello-tabs/hooks/hooks.json` 中命名您的入口点:

57 57 

58 ```json hello-tabs/hooks/hooks.json theme={null}58 ```json hello-tabs/hooks/hooks.json theme={null}

59 {59 {


63 </Step>63 </Step>

64 64 

65 <Step title="编写代码">65 <Step title="编写代码">

66 代码执行三个任务,每个钩子一个:66 此列表按照代码中出现的顺序说明每个 hook 的作用:

67 67 

68 * 添加 `/hello-tabs` 命令68 * 添加 `/hello-tabs` 命令,并加载早期会话保存的计数

69 * 运行该命令时打开窗格69 * 运行该命令时打开窗格

70 * 绘制窗格的内容:选项卡行和打开的选项卡的主体70 * 绘制窗格的内容:选项卡行和打开的选项卡的主体

71 71 


82 let count = 082 let count = 0

83 83 

84 export function register(on) {84 export function register(on) {

85 // 在你的第一个提示符之前运行,以及重新加载后再次运行85 // 在您的第一个提示词之前运行,以及重新加载后再次运行

86 on('session.start', async ($, e, next) => {86 on('session.start', async ($, e, next) => {

87 await $.command.register({ name: 'hello-tabs', description: 'Open the hello-tabs pane' })87 await $.command.register({ name: 'hello-tabs', description: 'Open the hello-tabs pane' })

88 // 加载早期会话保存的计数(如果有的话)88 // 加载早期会话保存的计数(如果有的话)


91 return next(e)91 return next(e)

92 })92 })

93 93 

94 // 当你键入 /hello-tabs 时运行94 // 当您键入 /hello-tabs 时运行

95 on('command.run', { command: 'hello-tabs' }, async ($) => {95 on('command.run', { command: 'hello-tabs' }, async ($) => {

96 // 打开窗格,给它键盘焦点,让 Esc 关闭它96 // 打开窗格,给它键盘焦点,让 Esc 关闭它

97 await $.ui.open({ id: PANE, title: 'Hello tabs', focus: true, closeOnEscape: true })97 await $.ui.open({ id: PANE, title: 'Hello tabs', focus: true, closeOnEscape: true })

98 // 在记录中不打印任何内容98 // 在会话记录中不打印任何内容

99 return {}99 return {}

100 })100 })

101 101 


105 if (e.requestId !== PANE) return next(e)105 if (e.requestId !== PANE) return next(e)

106 // 获取此应用可以绘制的元素106 // 获取此应用可以绘制的元素

107 const { Box, Text, Button } = $.ui.resolve(e)107 const { Box, Text, Button } = $.ui.resolve(e)

108 // 要求 Claude Code 再次运行此钩子108 // 要求 Claude Code 再次运行此 hook

109 const redraw = () => $.ui.invalidate('ui.render')109 const redraw = () => $.ui.invalidate('ui.render')

110 110 

111 // 一个选项卡:一个按钮,按下时切换到其选项卡111 // 一个选项卡:一个按钮,按下时切换到其选项卡


165 }165 }

166 ```166 ```

167 167 

168 每个钩子也做代码没有明确说明的事情:168 每个 hook 也做代码没有明确说明的事情:

169 169 

170 * **[`session.start`](/docs/zh-CN/plugins/mods/reference#session)** 也从 [`$.store`](#keep-state) 读取保存的计数,这是一个在会话之间持久化的键值存储。170 * **[`session.start`](/docs/zh-CN/plugins/mods/reference#session)** 也从 [`$.store`](#keep-state) 读取保存的计数,这是一个在会话之间持久化的键值存储。

171 * **[`command.run`](/docs/zh-CN/plugins/mods/api#add-a-command)** 只告诉 Claude Code 窗格存在。打开窗格本身不绘制任何内容:Claude Code 然后触发 `ui.render` 来询问在其中放入什么。171 * **[`command.run`](/docs/zh-CN/plugins/mods/api#add-a-command)** 只告诉 Claude Code 窗格存在。打开窗格本身不绘制任何内容:Claude Code 然后触发 `ui.render` 来询问在其中放入什么。

172 * **`ui.render`** 返回元素树,一个 `Box`,它保存其他框、文本和按钮,并从 `tab` 和 `count` 每次运行时重新构建它。172 * **`ui.render`** 返回元素树,即一个保存其他框、文本和按钮的 `Box`,并在每次运行时根据 `tab` 和 `count` 重新构建它。

173 173 

174 按下按钮会运行其 `onPress` 回调,该回调更改变量并调用 `redraw`。Claude Code 然后再次运行 `ui.render` 钩子,该钩子从新值构建新树。每个交互式绘制都使用该渲染周期:回调更改状态,钩子从新状态重新渲染。174 按下按钮会运行其 `onPress` 回调,该回调更改变量并调用 `redraw`。Claude Code 然后再次运行 `ui.render` hook,该 hook 根据新值构建新树。每个交互式绘制都使用该渲染周期:回调更改状态,hook 根据新状态重新渲染。

175 </Step>175 </Step>

176 176 

177 <Step title="打开窗格">177 <Step title="打开窗格">

178 在你的 shell 中,使用 `claude --plugin-dir ./hello-tabs` 启动 Claude Code。在 Claude Code 提示符处,运行 `/hello-tabs`。一个窗格打开,顶部显示 `1: One` 和 `2: Two`。按 `2`,然后按 `a`,**Add one** 的快捷键,几次。计数上升。178 在您的 shell 中,使用 `claude --plugin-dir ./hello-tabs` 启动 Claude Code。在 Claude Code 输入框中,运行 `/hello-tabs`。一个窗格打开,顶部显示 `1: One` 和 `2: Two`。按 `2`,然后按几次 `a`(即 **Add one** 的快捷键)。计数上升。

179 </Step>179 </Step>

180 180 

181 <Step title="检查计数是否已保存">181 <Step title="检查计数是否已保存">

182 按 Esc 关闭窗格,然后退出会话。在你的 shell 中,使用相同的 `claude --plugin-dir ./hello-tabs` 命令再次启动 Claude Code,在 Claude Code 提示符处运行 `/hello-tabs`。计数在你离开的地方。182 按 Esc 关闭窗格,然后退出会话。在您的 shell 中,使用相同的 `claude --plugin-dir ./hello-tabs` 命令再次启动 Claude Code,在 Claude Code 输入框中运行 `/hello-tabs`。计数仍停留在您离开时的值。

183 183 

184 要清除计数,让 mod 调用 `$.store.delete('count')`。[保持状态](#keep-state) 涵盖每种值持续多长时间。184 要清除计数,让 mod 调用 `$.store.delete('count')`。[保持状态](#keep-state) 涵盖每种值持续多长时间。

185 </Step>185 </Step>


189 选择绘制位置189 选择绘制位置

190</h2>190</h2>

191 191 

192`ui.render` 钩子为每个渲染站点运行,除非你将其缩小到你想要绘制的站点。要选择渲染站点,请将称为[匹配器](/docs/zh-CN/plugins/mods/events#filter-which-events-a-hook-handles)的过滤器作为第二个参数传递给 `on`。`{ component: 'Pane' }` 仅为窗格运行钩子。在钩子中,`e.component` 命名站点,`e.surface` 说明哪个应用在绘制,`e.props` 保存站点自己的数据。对于窗格,`e.requestId` 是你用来打开它的 `id`。192`ui.render` hook 会为每个渲染站点运行,除非您将其限定到想要绘制的那个站点。要选择渲染站点,请将一个过滤器(称为[匹配器](/docs/zh-CN/plugins/mods/events#filter-which-events-a-hook-handles))作为第二个参数传递给 `on`。`{ component: 'Pane' }` 仅为窗格运行该 hook。在 hook 中,`e.component` 指明站点名称,`e.surface` 说明哪个应用在绘制,`e.props` 保存站点自己的数据。对于窗格,`e.requestId` 是您打开它时使用的 `id`。

193 193 

194两个站点是空的,直到 mod 填充它们,窗格和条带。选择一个选项卡以查看每个是什么以及如何在其中绘制:194窗格和条带在 mod 填充之前都是空的。选择一个选项卡,查看每个站点是什么以及如何在其中绘制:

195 195 

196<Tabs>196<Tabs>

197 <Tab title="Pane">197 <Tab title="Pane">

198 窗格是在宽全屏终端中记录旁边的侧边栏,或在其他情况下是提示符上方的框架区域。打开多个窗格时,每个窗格都会获得一个显示其标题的选项卡。198 窗格在宽幅全屏终端中是会话记录旁边的侧边栏,在其他情况下是输入框上方的带边框区域。打开多个窗格时,每个窗格都会获得一个显示其标题的选项卡。

199 199 

200 当你的 mod 使用你选择的 `id` 调用 `$.ui.open` 时,窗格出现,如 `$.ui.open({ id: 'hello-tabs' })`。[在正确的时间打开窗格](#open-a-pane-at-the-right-time) 涵盖其他字段以及窗格何时等待更宽的终端。200 当您的 mod 使用您选择的 `id` 调用 `$.ui.open` 时,窗格就会出现,如 `$.ui.open({ id: 'hello-tabs' })`。[在正确的时间打开窗格](#open-a-pane-at-the-right-time) 介绍了其他字段以及窗格何时会等待更宽的终端。

201 201 

202 要在你的窗格中绘制,请过滤 `{ component: 'Pane' }` 并检查 `e.requestId` 是否是你的 `id`。202 要在您的窗格中绘制,请过滤 `{ component: 'Pane' }` 并检查 `e.requestId` 是否为您的 `id`。

203 </Tab>203 </Tab>

204 204 

205 <Tab title="Band above the prompt">205 <Tab title="Band above the prompt">

206 条带是直接在提示符输入上方的条纹。它始终存在,每个 mod 都共享它。206 条带是紧贴输入框上方的一条区域。它始终存在,并由所有 mod 共享。

207 207 

208 你的钩子返回一棵树以在条带中显示某些内容,或返回 `next(e)` 以不显示任何内容。一棵树替换 mod [在你之后](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in) 在那里绘制的内容。要保留他们的,将 `await next(e)` 的结果放在你的树中的 [`Box`](#build-a-tree-from-elements) 的子项中。208 您的 hook 返回一棵树以在条带中显示内容,或返回 `next(e)` 以不显示任何内容。一棵树会替换[在您之后](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in)运行的 mod 在那里绘制的内容。要保留它们的内容,请将 `await next(e)` 的结果放在您树中某个 [`Box`](#build-a-tree-from-elements) 的子项中。

209 209 

210 要在条带中绘制,请过滤 `{ component: 'AbovePrompt' }`。210 要在条带中绘制,请过滤 `{ component: 'AbovePrompt' }`。

211 </Tab>211 </Tab>


215 更改 Claude Code 已经绘制的内容215 更改 Claude Code 已经绘制的内容

216</h3>216</h3>

217 217 

218Claude Code 自己绘制大部分界面:消息、工具调用行、加载指示器等。这些部分中的每一个也是一个渲染站点,所以 mod 可以重新设置样式或替换它。要更改一个,请在你的 `ui.render` 钩子上过滤此表中的其名称:218Claude Code 自己绘制大部分界面:消息、工具调用行、加载指示器等。这些部分中的每一个也是一个渲染站点,因此 mod 可以重新设置其样式或替换它。要更改其中一个,请让您的 `ui.render` hook 按此表中的名称进行过滤:

219 219 

220| 站点 | 它是什么 |220| 站点 | 它是什么 |

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

222| `UserMessage`, `AssistantMessage` | 记录中的消息 |222| `UserMessage`, `AssistantMessage` | 会话记录中的一条消息 |

223| `ToolUse`, `ToolResult`, `ToolGroup` | 工具调用的行、其结果和折叠的调用运行 |223| `ToolUse`, `ToolResult`, `ToolGroup` | 工具调用的行、其结果,以及折叠起来的一组调用 |

224| `CommandOutput` | 命令打印的行 |224| `CommandOutput` | 命令打印的行 |

225| `AskUserQuestion` | Claude 打开的对话框以询问你一个问题 |225| `AskUserQuestion` | Claude 打开以向您提问的对话框 |

226| `Spinner`, `ToolProgress`, `TurnDuration` | 轮次的状态行:在 Claude 工作时动画的行、运行工具的实时进度行以及关闭轮次的行 |226| `Spinner`, `ToolProgress`, `TurnDuration` | 轮次的状态栏:Claude 工作时显示动画的行、正在运行的工具的实时进度行,以及结束轮次的行 |

227| `InfoNotice`, `SessionMode`, `PromptHint` | 徽标下的状态行、页脚中的模式标签以及提示符下的提示行 |227| `InfoNotice`, `SessionMode`, `PromptHint` | 徽标下方的状态栏、页脚中的模式标签,以及输入框下方的提示行 |

228 228 

229在 Claude Code 已经绘制的站点,你的钩子有三个选择:更改详细信息、替换绘制或不理它。选择一个选项卡以查看每一个应用于加载指示器。示例读取另一个钩子计数的 `calls` 变量,如[教程 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 中所示。229在 Claude Code 已经绘制的站点上,您的 hook 可以更改某个细节、替换绘制内容,或保持不变。选择一个选项卡,查看每种方式应用于加载指示器的效果。这些示例读取由另一个 hook 计数的 `calls` 变量,如[教程 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 中所示。

230 230 

231<Tabs>231<Tabs>

232 <Tab title="Change a detail">232 <Tab title="Change a detail">

233 要保留 Claude Code 的绘制并更改其一部分,请将 `next` 传递给更改了 `props` 的事件副本。此钩子更改加载指示器单词后的文本:233 要保留 Claude Code 的绘制内容并更改其中一部分,请向 `next` 传递一个更改了 `props` 的事件副本。此 hook 更改加载指示器单词后面的文本:

234 234 

235 ```javascript theme={null}235 ```javascript theme={null}

236 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {236 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

237 // 保留 Claude Code 的加载指示器,并更改其单词后的文本237 // Keep Claude Code's spinner, and change the text after its word

238 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })238 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

239 })239 })

240 ```240 ```

241 241 

242 加载指示器保留其动画和单词,你的文本跟在单词后面:242 加载指示器保留其动画和单词,您的文本跟在单词后面:

243 243 

244 ```text theme={null}244 ```text theme={null}

245 Thinking · tool calls: 2…245 Thinking · tool calls: 2…


247 </Tab>247 </Tab>

248 248 

249 <Tab title="Replace the drawing">249 <Tab title="Replace the drawing">

250 要在站点的位置绘制你自己的内容,请返回一棵树,不要调用 `next`。此钩子在加载指示器所在的位置绘制一行文本:250 要在站点的位置绘制您自己的内容,请返回一棵树,并且不要调用 `next`。此 hook 在加载指示器所在的位置绘制一行文本:

251 251 

252 ```javascript theme={null}252 ```javascript theme={null}

253 on('ui.render', { component: 'Spinner' }, async ($, e) => {253 on('ui.render', { component: 'Spinner' }, async ($, e) => {

254 const { Text } = $.ui.resolve(e)254 const { Text } = $.ui.resolve(e)

255 // 没有对 next 的调用,所以这一行在加载指示器的位置绘制255 // No call to next, so this line is drawn in the spinner's place

256 return Text({ children: ['Claude has made ' + calls + ' tool calls'] })256 return Text({ children: ['Claude has made ' + calls + ' tool calls'] })

257 })257 })

258 ```258 ```

259 259 

260 当 Claude 工作时,你的行显示,Claude Code 的加载指示器不显示:260 当 Claude 工作时,显示的是您的这一行,而不是 Claude Code 的加载指示器:

261 261 

262 ```text theme={null}262 ```text theme={null}

263 Claude has made 2 tool calls263 Claude has made 2 tool calls


265 </Tab>265 </Tab>

266 266 

267 <Tab title="Leave it alone">267 <Tab title="Leave it alone">

268 要将站点保留为 Claude Code 绘制的方式,请返回 `next(e)`。钩子通常对某些事件这样做,对其他事件不这样做。此钩子在有要计数的调用之前保留加载指示器:268 要让站点保持 Claude Code 绘制的样子,请返回 `next(e)`。hook 通常对某些事件这样做,而对其他事件不这样做。此 hook 在出现可计数的调用之前保持加载指示器不变:

269 269 

270 ```javascript theme={null}270 ```javascript theme={null}

271 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {271 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

272 // 还没有什么要显示的,所以不变地传递事件272 // Nothing to show yet, so pass the event on unchanged

273 if (calls === 0) return next(e)273 if (calls === 0) return next(e)

274 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })274 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

275 })275 })

276 ```276 ```

277 277 

278 在第一个工具调用之前,加载指示器看起来就像没有 mod 的样子:278 在第一次工具调用之前,加载指示器看起来与没有该 mod 时一样:

279 279 

280 ```text theme={null}280 ```text theme={null}

281 Thinking…281 Thinking…


283 </Tab>283 </Tab>

284</Tabs>284</Tabs>

285 285 

286权限提示不是渲染站点,所以 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是一个,所以 mod 可以更改它。286在这些站点上,`next(e)` 会返回对 Claude Code 绘制内容的引用 `{ type: 'engine', ref }`,除非在您之后运行的某个 mod 返回了它自己的树。要更改该绘制内容中的内容,请向 `next` 传递一个具有不同 props 的事件副本,就像 **Change a detail** 选项卡所做的那样。您可以原样返回该引用,也可以将其与您自己的元素一起放在一个 `Box` 中:

287 287 

288终端和桌面应用不会触发所有相同的站点。`Pane`、`AbovePrompt`、`Spinner` 和记录站点在两者中都有效。其他一些状态行仅在终端中触发。[渲染站点表](/docs/zh-CN/plugins/mods/reference#render-sites) 列出了每个站点在哪里触发。288```javascript theme={null}

289on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

290 const { Box, Text } = $.ui.resolve(e)

291 const theirs = await next(e)

292 return Box({ flexDirection: 'column', children: [theirs, Text({ children: ['under the spinner'] })] })

293})

294```

295 

296当 Claude 工作时,加载指示器像以前一样显示动画,而 `under the spinner` 出现在其下方。

297 

298权限提示不是渲染站点,因此 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是渲染站点,因此 mod 可以更改它。为该对话框返回的树必须恰好包含一次该引用,并将您的元素放在它的上方。否则,Claude Code 会绘制它自己的对话框。

299 

300终端和桌面应用不会触发所有相同的站点。`Pane`、`AbovePrompt`、`Spinner` 和会话记录站点在两者中都有效。其他一些状态栏仅在终端中触发。[渲染站点表](/docs/zh-CN/plugins/mods/reference#render-sites) 列出了每个站点在哪里触发。

289 301 

290<h3 id="open-a-pane-at-the-right-time">302<h3 id="open-a-pane-at-the-right-time">

291 在正确的时间打开窗格303 在正确的时间打开窗格

292</h3>304</h3>

293 305 

294窗格仅在你的 mod 打开它时出现。你如何以及何时打开它决定了它是否获得键盘焦点、它要求多少空间,以及它是否在狭窄的终端中显示。306窗格仅在您的 mod 打开它时出现。您如何以及何时打开它,决定了它是否获得键盘焦点、它请求多少空间,以及它在狭窄的终端中是否显示。

295 307 

296要打开窗格,请使用你选择的 `id` 调用 [`$.ui.open`](/docs/zh-CN/plugins/mods/reference#mods-api-methods)。`id` 是窗格的名称:你的 `ui.render` 钩子检查它,你再次传递它来关闭窗格。308要打开窗格,请使用您选择的 `id` 调用 [`$.ui.open`](/docs/zh-CN/plugins/mods/reference#mods-api-methods)。`id` 是窗格的名称:您的 `ui.render` hook 会检查它,关闭窗格时您也要再次传递它。

297 309 

298```javascript theme={null}310```javascript theme={null}

299await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })311await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })

300```312```

301 313 

302要关闭窗格,请使用你打开它的 `id` 调用 `$.ui.close`:314要关闭窗格,请使用打开它时所用的 `id` 调用 `$.ui.close`:

303 315 

304```javascript theme={null}316```javascript theme={null}

305await $.ui.close({ id: 'hello-tabs' })317await $.ui.close({ id: 'hello-tabs' })

306```318```

307 319 

308除了 `id`,`$.ui.open` 还接受这些可选字段:320除了 `id`,`$.ui.open` 还接受以下可选字段:

309 321 

310| 字段 | 它做什么 |322| 字段 | 作用 |

311| :- | :- |323| :- | :- |

312| `title` | 打开多个窗格时窗格的选项卡标签 |324| `title` | 打开多个窗格时窗格的选项卡标签 |

313| `focus` | 请求[键盘焦点](#know-which-keys-your-mod-can-receive) |325| `focus` | 请求[键盘焦点](#know-which-keys-your-mod-can-receive) |

314| `closeOnEscape` | 使 Esc 关闭窗格 |326| `closeOnEscape` | 使 Esc 关闭窗格 |

315| `holdToasts` | 保持 toast,来自 [`$.ui.toast`](/docs/zh-CN/plugins/mods/api#show-something-without-starting-a-turn) 的小通知,直到窗格关闭 |327| `holdToasts` | 暂缓显示 toast(来自 [`$.ui.toast`](/docs/zh-CN/plugins/mods/api#show-something-without-starting-a-turn) 的小通知),直到窗格关闭 |

316| `rows` | 当窗格位于提示符上方时要求的高度。默认值是空间的三分之一。 |328| `rows` | 当窗格位于输入框上方时请求的高度。默认值为空间的三分之一。 |

317| `columns` | 当窗格位于记录旁边时要求的宽度 |329| `columns` | 当窗格位于会话记录旁边时请求的宽度 |

318 330 

319`focus`、`closeOnEscape` 和 `holdToasts` 是可选的,仅接受 `true`。要省略其中一个,请忽略它。传递 `false` 会抛出错误,例如 `ui.open: focus is true or left out`。要有条件地设置其中一个,仅在条件成立时添加字段。此调用仅在 `items` 不为空时请求键盘焦点:331`focus`、`closeOnEscape` 和 `holdToasts` 是可选的,且仅接受 `true`。要不设置其中某一项,请直接省略。传递 `false` 会抛出错误,例如 `ui.open: focus is true or left out`。要有条件地设置其中某一项,请仅在条件成立时添加该字段。此调用仅在 `items` 不为空时请求键盘焦点:

320 332 

321```javascript theme={null}333```javascript theme={null}

322const pane = { id: 'hello-tabs', title: 'Hello tabs' }334const pane = { id: 'hello-tabs', title: 'Hello tabs' }

323await $.ui.open(items.length > 0 ? { ...pane, focus: true } : pane)335await $.ui.open(items.length > 0 ? { ...pane, focus: true } : pane)

324```336```

325 337 

326要让命令在 Claude 工作时打开窗格,请在[注册命令](/docs/zh-CN/plugins/mods/api#add-a-command)时添加 `immediate: true`。没有它,在轮次期间键入的命令会等待轮次结束。338要让命令在 Claude 工作时打开窗格,请在[注册命令](/docs/zh-CN/plugins/mods/api#add-a-command)时添加 `immediate: true`。如果不添加,在轮次进行期间输入的命令会等待轮次结束。

327 339 

328<h4 id="when-a-pane-waits-for-a-wider-terminal">340<h4 id="when-a-pane-waits-for-a-wider-terminal">

329 当窗格等待更宽的终端时341 当窗格等待更宽的终端时

330</h4>342</h4>

331 343 

332你的 mod 打开的窗格而不被要求不会在狭窄的终端中出现,所以它无法接管小屏幕。它是否出现取决于打开它的内容:344您的 mod 在未经用户请求的情况下打开的窗格不会出现在狭窄的终端中,因此它无法占据小屏幕。它是否出现取决于是什么打开了它:

333 345 

334* **由用户做的事情打开**,例如他们运行的命令或他们按下的按钮,窗格在任何宽度出现346* **由用户的操作打开**,例如用户运行的命令或按下的按钮,窗格在任何宽度下都会出现

335* **由你的 mod 自己打开**,例如从计时器或 [`turn.start`](/docs/zh-CN/plugins/mods/events#follow-a-turn) 钩子,窗格仅在至少 144 列宽的终端中出现。用户自己打开该窗格一次后,110 列就足够了。347* **由您的 mod 自行打开**,例如从计时器或 [`turn.start`](/docs/zh-CN/plugins/mods/events#follow-a-turn) hook 中打开,窗格仅在至少 144 列宽的终端中出现。用户亲自打开过该窗格一次后,110 列就足够了。

336 348 

337当窗格出现时,`$.ui.open` 解析为 `{ isPlaced: true }`。当窗格在等待时,`isPlaced` 是 `false`,`reason` 是一个说明原因的字符串。等待的窗格在用户打开它或拓宽终端时出现。要说某些内容可用而不打开窗格,请调用 `$.ui.toast('Your message')`,它显示一个在几秒后消失的小通知。349当窗格出现时,`$.ui.open` 解析为 `{ isPlaced: true }`。当窗格处于等待状态时,`isPlaced` 为 `false`,`reason` 是一个说明原因的字符串。等待中的窗格会在用户打开它或拓宽终端时出现。要在不打开窗格的情况下告知某些内容可用,请调用 `$.ui.toast('Your message')`,它会显示一条 toast 通知。

338 350 

339<h2 id="build-a-tree-from-elements">351<h2 id="build-a-tree-from-elements">

340 从元素构建树352 从元素构建树

341</h2>353</h2>

342 354 

343`ui.render` 钩子返回的是一个元素树:对要绘制的内容的描述,由相互嵌套的框、文本和控件组成。你描述绘制,Claude Code 在终端或桌面应用中呈现它。355`ui.render` hook 返回的是一个元素树:对要绘制的内容的描述,由相互嵌套的框、文本和控件组成。您描述绘制,Claude Code 在终端或桌面应用中呈现它。

344 356 

345要获取元素,请在你的钩子中调用 `$.ui.resolve(e)`,如 `const { Box, Text, Button } = $.ui.resolve(e)`。每个元素都是一个函数。你传递它属性,你把在其中的元素和字符串放在 `children` 中。357要获取元素,请在您的 hook 中调用 `$.ui.resolve(e)`,如 `const { Box, Text, Button } = $.ui.resolve(e)`。每个元素都是一个函数。您向它传递属性,并把放在其中的元素和字符串放在 `children` 中。

346 358 

347大多数绘制使用四个元素。选择一个选项卡以查看每一个以及终端如何绘制它:359选择一个选项卡以查看每个最常用的元素以及终端如何绘制它:

348 360 

349<Tabs>361<Tabs>

350 <Tab title="Text">362 <Tab title="Text">


379 </Tab>391 </Tab>

380 392 

381 <Tab title="Button">393 <Tab title="Button">

382 `Button` 是用户可以按下的控件。它运行你的 `onPress` 回调。使用 `plain: true` 它没有括号并显示其快捷键:394 `Button` 是用户可以按下的控件。它运行您的 `onPress` 回调。使用 `plain: true` 时,它没有括号并显示其快捷键:

383 395 

384 ```javascript theme={null}396 ```javascript theme={null}

385 Button({ key: 'more', label: 'Add one', onPress: addOne })397 Button({ key: 'more', label: 'Add one', onPress: addOne })


393 </Tab>405 </Tab>

394 406 

395 <Tab title="Input">407 <Tab title="Input">

396 `Input` 是一个文本字段。当用户按 Enter 时,它使用文本运行你的 `onSubmit` 回调:408 `Input` 是一个文本字段。当用户按 Enter 时,它使用文本运行您的 `onSubmit` 回调:

397 409 

398 ```javascript theme={null}410 ```javascript theme={null}

399 Input({411 Input({


407 ```419 ```

408 420 

409 ```text theme={null}421 ```text theme={null}

410 Note: Type a note and press Enter ⏎ add422 Note: Type a note and press Enter

411 ```423 ```

412 </Tab>424 </Tab>

413</Tabs>425</Tabs>

414 426 

415此表列出了每个元素:427[界面图库](/docs/zh-CN/plugins/mods/gallery)提供了大多数元素的示例和屏幕截图。此表列出了每个元素:

416 428 

417| 元素 | 它绘制什么 | 位置 |429| 元素 | 它绘制什么 | 位置 |

418| :- | :- | :- |430| :- | :- | :- |

419| `Box` | 一个 flex 容器。接受布局属性,如 `flexDirection`、`columnGap`、`padding`、`borderStyle` 和 `width`。 | 到处 |431| `Box` | 一个 flex 容器。接受布局属性,如 `flexDirection`、`columnGap`、`padding`、`borderStyle` 和 `width`。 | 到处 |

420| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |432| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |

421| `Button` | 调用 `onPress` 的控件 | 到处 |433| `Button` | 调用 `onPress` 的控件 | 到处 |

422| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当你传递 `onLinkPress` 时需要 `key`。 | 到处 |434| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当您传递 `onLinkPress` 时需要 `key`。 | 到处 |

423| `Input`, `Select` | 文本字段和选择器 | 终端、桌面 |435| `Input`, `Select` | 文本字段和下拉列表 | 终端、桌面 |

424| `Svg` | SVG 文档 | 桌面 |436| `Svg` | SVG 文档 | 桌面 |

425| `Client` | 由你的第二个文件绘制的区域,用于动画和指针输入。该文件没有 mod API。它仅通过发布数据到达你的钩子,该数据作为 `ui.message` 事件到达。 | 终端、桌面 |437| `Client` | 由您的第二个文件绘制的区域,用于动画和指针输入。该文件没有 mods API。它仅通过发布数据到达您的 hook,该数据作为 `ui.message` 事件到达。 | 终端、桌面 |

426| `Raster`, `Image` | [彩色单元格网格](#draw-a-grid-of-colored-cells)和图片 | 终端 |438| `Raster`, `Image` | [彩色单元格网格](#draw-a-grid-of-colored-cells)和图片 | 终端 |

427 439 

428如果你的模块是 `.tsx` 或 `.jsx` 文件,你可以将树写成 JSX。首先从 `$.ui.resolve(e)` 解构元素,因为钩子模块没有元素全局。440如果您的模块是 `.tsx` 或 `.jsx` 文件,您可以将树写成 JSX。首先从 `$.ui.resolve(e)` 解构元素。

429 441 

430如果树使用应用没有的元素、元素不接受的属性或没有子项的位置,Claude Code 绘制其自己的站点版本。442如果树使用应用没有的元素、元素不接受的属性或在不应有子项的位置放置子项,Claude Code 会绘制其自己的站点版本。

431 443 

432在使用 `--plugin-dir` 启动的会话中,记录行说明这一点,例如 `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`。[调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log) 将其记录为 `ui.render (Pane): a hook returned a tree that does not validate` 并带有相同的原因。会话中没有其他内容出现,所以当绘制不显示时,检查该行或日志。444在使用 `--plugin-dir` 启动的会话中,会话记录中会有一行说明这一点,例如 `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`。[调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log) 将其记录为 `ui.render (Pane): a hook returned a tree that does not validate` 并带有相同的原因。会话中没有其他内容出现,所以当绘制不显示时,请检查该行或日志。

433 445 

434<h3 id="draw-a-grid-of-colored-cells">446<h3 id="draw-a-grid-of-colored-cells">

435 绘制彩色单元格网格447 绘制彩色单元格网格

436</h3>448</h3>

437 449 

438对于热力图、迷你图或终端中的游戏板,绘制一个 `Raster` 而不是每个单元格的 `Box`。`Raster` 接受 `key`、其大小(以 `columns` 和 `rows` 为单位)和 `cells`,它将每个单元格打包到一个字符串中。每个单元格是三个数字:字符的代码点、其颜色和其背景颜色。颜色是十六进制数字,红、绿、蓝各两位,例如 `0xc62828` 表示红色,或 `0x01000000` 表示终端的默认值。450对于热力图、迷你图或终端中的游戏板,绘制一个 `Raster`,而不是为每个单元格绘制一个 `Box`。`Raster` 接受 `key`、其大小(以 `columns` 和 `rows` 为单位)和 `cells`,后者是一个打包了所有单元格的 base64 字符串。每个单元格是三个数字:字符的代码点、其颜色和其背景颜色。颜色是十六进制的 24 位 RGB 值,例如 `0xc62828` 表示红色。值 `0x01000000` 比该范围大一,表示终端的默认值。

439 451 

440桌面应用没有 `Raster`,所以检查 `e.surface` 并在那里绘制文本。此窗格主体绘制一个三乘二的热力图:452桌面应用没有 `Raster`,所以请检查 `e.surface` 并在那里绘制文本。此窗格主体绘制一个三乘二的热力图:

441 453 

442```javascript theme={null}454```javascript theme={null}

443// 表示"使用终端的默认颜色"的值455// 表示"使用终端的默认颜色"的值


473 485 

474<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-heat-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=b91bcce3bad74bc851149133d4acc5d5" alt="终端中的一个窗格,包含一个小的彩色块网格,两行三列。顶行是绿色、琥珀色和红色。底行是绿色、绿色和琥珀色。" width="360" height="132" data-path="images/mods-heat-map.svg" />486<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-heat-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=b91bcce3bad74bc851149133d4acc5d5" alt="终端中的一个窗格,包含一个小的彩色块网格,两行三列。顶行是绿色、琥珀色和红色。底行是绿色、绿色和琥珀色。" width="360" height="132" data-path="images/mods-heat-map.svg" />

475 487 

476`rows` 数组是你要更改的部分,`cellsOf` 将其转换为打包的字符串。钩子仅在 `id` 为 `heat` 的窗格中绘制,所以从命令中使用 `$.ui.open({ id: 'heat' })` 打开一个,如 [`hello-tabs` 示例](#build-a-pane-with-tabs) 打开其窗格。488`rows` 数组是您要更改的部分,`cellsOf` 将其转换为打包的字符串。hook 仅在 `id` 为 `heat` 的窗格中绘制,所以请从命令中使用 `$.ui.open({ id: 'heat' })` 打开一个,如 [`hello-tabs` 示例](#build-a-pane-with-tabs) 打开其窗格。

477 489 

478每个字符必须是一个单元格宽。要动画化已经在屏幕上的 `Raster`,请使用窗格的 `id` 作为 `requestId`、`Raster` 的 `key`、相同的大小和新单元格调用 `$.ui.blit`。对于此示例,这是 `$.ui.blit({ requestId: 'heat', key: 'grid', columns: 3, rows: 2, cells: cellsOf(newRows) })`。它重新绘制该一个元素而不再次运行你的 `ui.render` 钩子。490每个字符必须是一个单元格宽。要动画化已经在屏幕上的 `Raster`,请使用窗格的 `id` 作为 `requestId`、`Raster` 的 `key`、相同的大小和新单元格调用 `$.ui.blit`。对于此示例,这是 `$.ui.blit({ requestId: 'heat', key: 'grid', columns: 3, rows: 2, cells: cellsOf(newRows) })`。它重新绘制该一个元素,而不再次运行您的 `ui.render` hook。

479 491 

480<h2 id="respond-to-presses-and-typing">492<h2 id="respond-to-presses-and-typing">

481 响应按键和输入493 响应按键和输入

482</h2>494</h2>

483 495 

484当用户按下你绘制的按钮、输入字段或从列表中选择时,Claude Code 调用你给该控件的函数,它在你的模块中运行。每个控件接受其自己的回调:496当用户按下您的 mod 绘制的按钮、在字段中输入或从列表中选择时,Claude Code 调用该控件的回调,它在您的模块中运行。每个控件接受其自己的回调:

485 497 

486* **`Button`**:接受 `onPress(e)`,其中 `e.surface` 是按键来自的应用498* **`Button`**:接受 `onPress(e)`,其中 `e.surface` 是按键来自的应用

487* **`Input`**:接受 `onSubmit(value)` 和 `onInput(value)`499* **`Input`**:接受 `onSubmit(value)` 和 `onInput(value)`

488* **`Select`**:接受 `onSelect(value)`,其选择在 `options` 中,至少一个选择的列表,具有唯一值,例如 `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`500* **`Select`**:接受 `onSelect(value)`,其选项在 `options` 中,这是一个至少包含一个选项且值唯一的列表,例如 `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`

489 501 

490测试通过其 `key` 按下或输入到控件中,所以给每个控件一个。控件的每次使用也会触发 [`ui.press`、`ui.input` 或 `ui.select`](/docs/zh-CN/plugins/mods/reference#interface),其中 `key` 在 `e.element` 中,另一个 mod 可以钩住这些事件。其钩子在你的回调之前运行,所以它看到用户输入到你的 `Input` 中的内容,可以更改它或代替你的回调回答。mod API 没有按下另一个 mod 的按钮的方法。502测试通过控件的 `key` 按下控件或向其输入,因此请为每个控件指定一个。控件的每次使用也会触发 [`ui.press`、`ui.input` 或 `ui.select`](/docs/zh-CN/plugins/mods/reference#interface),其中 `key` 在 `e.element` 中,另一个 mod 可以处理这些事件。其 hook 在您的回调之前运行,因此它能看到用户输入到您的 `Input` 中的内容,可以更改它或代替您的回调作出响应。mod API 没有按下另一个 mod 的按钮的方法。

491 503 

492<h3 id="know-which-keys-your-mod-can-receive">504<h3 id="know-which-keys-your-mod-can-receive">

493 键盘焦点和快捷键505 键盘焦点和快捷键

494</h3>506</h3>

495 507 

496你的 mod 永远不会自己读取键盘。用户按下一个键,Claude Code 决定它是为你的哪个控件,该控件的回调运行。除了[条带上的数字快捷键](/docs/zh-CN/plugins/mods/reference#elements),这仅在你的窗格或条带有键盘焦点时发生。其余时间,键进入提示符。508您的 mod 永远不会自己读取键盘。用户按下一个键,Claude Code 决定它属于您的哪个控件,然后该控件的回调运行。除了[条带上的数字快捷键](/docs/zh-CN/plugins/mods/reference#elements),这仅在您的窗格或条带拥有键盘焦点时发生。其余时间,按键进入输入框。

497 509 

498<h4 id="how-a-pane-gets-keyboard-focus">510<h4 id="how-a-pane-gets-keyboard-focus">

499 窗格如何获得键盘焦点511 窗格如何获得键盘焦点

500</h4>512</h4>

501 513 

502窗格通过以下三种方式之一获得键盘焦点:514窗格在以下情况下获得键盘焦点:

503 515 

504* 你的 mod 从命令或按键使用 `focus: true` 打开它516* 您的 mod 从命令或按键使用 `focus: true` 打开它

505* 用户按 Ctrl+X 然后 Tab517* 用户按 Ctrl+X 然后按 Tab

506* 用户点击它518* 用户点击它

507 519 

508Claude Code 仅在提示符为空且没有其他内容有键盘焦点时授予 `focus: true`。在用户输入时打开的窗格不会获取他们的按键。520Claude Code 仅在输入框为空且没有其他内容拥有键盘焦点时授予 `focus: true`。在用户输入时打开的窗格不会获取其按键。

509 521 

510<h4 id="what-each-key-does">522<h4 id="what-each-key-does">

511 每个键做什么523 每个键做什么

512</h4>524</h4>

513 525 

514此表列出了当你的窗格或条带有键盘焦点时每个键做什么:526此表列出了当您的窗格或条带拥有键盘焦点时每个键做什么:

515 527 

516| 键 | 它做什么 |528| 键 | 它做什么 |

517| :- | :- |529| :- | :- |

518| Tab | 移动到下一个控件 |530| Tab | 移动到下一个控件 |

519| 上和下 | 在你的绘制适合时在控件之间移动。当窗格或条带的行数超过它可以显示的行数时,它们会滚动它。 |531| 上和下 | 在绘制内容能完整显示时在控件之间移动。当窗格或条带的行数超过它可以显示的行数时,它们会滚动它。 |

520| Enter | 按下焦点 `Button`、提交焦点 `Input` 或在 `Select` 中选择 |532| Enter | 按下获得焦点的 `Button`、提交获得焦点的 `Input` 或在 `Select` 中选择 |

521| 按钮的快捷键 | 按下该按钮。当 `Input` 有焦点时,每个可打印键都进入字段。 |533| 按钮的快捷键 | 按下该按钮。当 `Input` 拥有焦点时,每个可打印键都进入字段。 |

522| Esc | 将键盘焦点返回到提示符。使用 `closeOnEscape: true`,它也关闭窗格。 |534| Esc | 将键盘焦点返回到输入框。使用 `closeOnEscape: true` 时,它还会关闭窗格。 |

523 535 

524mod 无法将 Tab 或箭头键绑定到其他任何东西,所以游戏用 `w`、`a`、`s` 和 `d` 操舵。536mod 无法将 Tab 或方向键绑定到其他任何功能,因此游戏使用 `w`、`a`、`s` 和 `d` 控制方向。

525 537 

526<h4 id="set-a-hotkey-and-the-first-focus">538<h4 id="set-a-hotkey-and-the-first-focus">

527 设置快捷键和第一个焦点539 设置快捷键和初始焦点

528</h4>540</h4>

529 541 

530控件上的两个属性决定了键盘如何到达它:542控件上的以下属性决定了键盘如何到达它:

531 543 

532* **`hotkey`**:要让用户用一个键按下 `Button`,给它一个 `hotkey`,一个数字或一个小写字母,如 `hotkey: 'a'`544* **`hotkey`**:要让用户用一个键按下 `Button`,请为它指定一个 `hotkey`,值为一个数字或一个小写字母,如 `hotkey: 'a'`

533* **`autoFocus`**:要选择窗格打开时哪个控件有焦点,向它添加 `autoFocus: true`。在其他上省略属性,因为 Claude Code 拒绝 `autoFocus: false`。545* **`autoFocus`**:要选择窗格打开时哪个控件拥有焦点,请向它添加 `autoFocus: true`。该属性只接受 `true`,因此请在其他控件上省略它。

534 546 

535快捷键的显示方式取决于按钮和应用:547快捷键的显示方式取决于按钮和应用:

536 548 

537| 按钮 | 在终端中 | 在桌面应用中 |549| 按钮 | 在终端中 | 在桌面应用中 |

538| :- | :- | :- |550| :- | :- | :- |

539| 带括号,默认 | `[ Add one ]`,没有显示快捷键 | 标签,旁边有一个小键 |551| 带括号(默认) | `[ Add one ]`,不显示快捷键 | 标签,旁边有一个小键 |

540| 使用 `plain: true` | `1: One` | 标签,旁边有一个小键 |552| 使用 `plain: true` | `1: One` | 标签,旁边有一个小键 |

541 553 

542在终端中,在括号按钮的标签中命名键,或使用 `plain: true`,所以用户可以看到要按什么。[元素参考](/docs/zh-CN/plugins/mods/reference#elements) 有其他 `Button` 规则:`action`、条带上的数字快捷键和一个快捷键上的两个按钮。554在终端中,请在带括号按钮的标签中写明按键,或使用 `plain: true`,以便用户知道要按什么。[元素参考](/docs/zh-CN/plugins/mods/reference#elements)包含其他 `Button` 规则:`action`、条带上的数字快捷键,以及同一快捷键上的两个按钮。

543 555 

544<h3 id="take-typed-input-and-draw-a-row-for-each-item">556<h3 id="take-typed-input-and-draw-a-row-for-each-item">

545 获取输入的文本并为每个项目绘制一行557 获取输入的文本并为每个项目绘制一行

546</h3>558</h3>

547 559 

548许多窗格是一个文本字段,下面有一个列表。本部分中的示例是一个笔记窗格:你输入一个笔记并按 Enter 添加它,每个笔记都有一个删除它的 `x` 按钮。添加两个笔记后,终端这样绘制窗格:560许多窗格是一个文本字段,下面有一个列表。本部分中的示例是一个笔记窗格:输入一条笔记并按 Enter 添加它,每条笔记都有一个用于删除它的 `x` 按钮。添加两条笔记后,终端这样绘制窗格:

549 561 

550```text theme={null}562```text theme={null}

551╭──────────────────────────────────────────────────────────╮563╭──────────────────────────────────────────────────────────╮


555╰──────────────────────────────────────────────────────────╯567╰──────────────────────────────────────────────────────────╯

556```568```

557 569 

558示例使用两种技术:570示例使用以下技术:

559 571 

560* **获取输入的文本**:当用户按 Enter 时,`Input` 使用字段的文本调用 `onSubmit(value)`,在每次更改时调用 `onInput(value)`572* **获取输入的文本**:当用户按 Enter 时,`Input` 使用字段的文本调用 `onSubmit(value)`,并在每次更改时调用 `onInput(value)`

561* **绘制列表**:将你的数据映射到每个一行,并给每行的按钮其自己的 `key`573* **绘制列表**:将您的数据映射为每项一行,并为每行的按钮指定其自己的 `key`

562 574 

563此钩子绘制窗格的内容:575此 hook 绘制窗格的内容:

564 576 

565```javascript theme={null}577```javascript theme={null}

566// 窗格绘制的列表578// 窗格绘制的列表


579 key: 'new-note',591 key: 'new-note',

580 label: 'Note',592 label: 'Note',

581 placeholder: 'Type a note and press Enter',593 placeholder: 'Type a note and press Enter',

582 // 每次绘制字段为空,这在提交后清除它594 // 每次都将字段绘制为空,这会在提交后清空它

583 value: '',595 value: '',

584 submitLabel: 'add',596 submitLabel: 'add',

585 autoFocus: true,597 autoFocus: true,

586 // 当你在字段中按 Enter 时运行598 // 在字段中按 Enter 时运行

587 onSubmit: async (value) => {599 onSubmit: async (value) => {

588 // 忽略空行600 // 忽略空行

589 if (!value.trim()) return601 if (!value.trim()) return


592 await $.store.set('notes', notes)604 await $.store.set('notes', notes)

593 },605 },

594 }),606 }),

595 // 每个笔记一行:一个删除按钮,然后是笔记的文本607 // 每条笔记一行:一个删除按钮,然后是笔记的文本

596 ...notes.map((note, i) =>608 ...notes.map((note, i) =>

597 Box({609 Box({

598 flexDirection: 'row',610 flexDirection: 'row',

599 columnGap: 1,611 columnGap: 1,

600 children: [612 children: [

601 Button({613 Button({

602 // 它自己的键,所以每行的按钮可以区分614 // 独有的键,以便区分每行的按钮

603 key: 'delete-' + i,615 key: 'delete-' + i,

604 label: 'x',616 label: 'x',

605 plain: true,617 plain: true,


618})630})

619```631```

620 632 

621要尝试窗格:633要试用该窗格:

622 634 

623* **添加笔记**:输入一行并按 Enter。该行显示为新行,字段清空。635* **添加笔记**:输入一行并按 Enter。该行显示为新行,字段清空。

624* **删除笔记**:按 Tab 直到笔记的 `x` 按钮有焦点,然后按 Enter。`x` 是按钮的标签,不是快捷键,所以输入字母不会按下它。636* **删除笔记**:按 Tab 直到笔记的 `x` 按钮获得焦点,然后按 Enter。`x` 是按钮的标签,不是快捷键,因此输入该字母不会按下它。

625 637 

626每个更改遵循与 `hello-tabs` 相同的渲染周期:回调更改 `notes`,调用 `redraw`,并将列表保存到 `$.store`。638每次更改都遵循与 `hello-tabs` 相同的渲染周期:回调更改 `notes`,调用 `redraw`,并将列表保存到 `$.store`。

627 639 

628字段在每次提交后清空,因为其 `value` 属性。`value` 是绘制字段时保存的文本,用户的输入替换它,直到你的钩子再次绘制字段。示例总是用 `''` 绘制字段。640字段在每次提交后清空,是因为其 `value` 属性。`value` 是绘制字段时字段中的文本,用户的输入会替换它,直到您的 hook 再次绘制字段。示例总是用 `''` 绘制字段。

629 641 

630示例保存笔记而不加载它们。要在下一个会话中将它们带回,请在 `session.start` 钩子中读取它们,就像 `hello-tabs` 读取 `count` 的方式一样。642示例保存笔记但不加载它们。要在下一个会话中恢复它们,请在 `session.start` hook 中读取它们,就像 `hello-tabs` 读取 `count` 的方式一样。

631 643 

632三个属性组成字段的行,`Note: Type a note and press Enter ⏎ add`:644以下属性组成字段的这一行,`Note: Type a note and press Enter ⏎ add`:

633 645 

634| 属性 | 在示例中 | 它是什么 |646| 属性 | 在示例中 | 它是什么 |

635| :- | :- | :- |647| :- | :- | :- |

636| `label` | `Note` | 字段前的文本。终端在其后绘制 `: `。 |648| `label` | `Note` | 字段前的文本。终端在其后绘制 `: `。 |

637| `placeholder` | `Type a note and press Enter` | 当字段为空时显示的暗文本 |649| `placeholder` | `Type a note and press Enter` | 当字段为空时显示的暗色文本 |

638| `submitLabel` | `add` | `⏎` 后的单词,说明 Enter 做什么 |650| `submitLabel` | `add` | `⏎` 后的单词,说明 Enter 做什么 |

639 651 

640提交 `Input` 不会启动轮次,除非你的回调调用 [`$.prompt.submit`](/docs/zh-CN/plugins/mods/api#start-a-turn-from-a-background-job)。652提交 `Input` 不会启动轮次,除非您的回调调用 [`$.prompt.submit`](/docs/zh-CN/plugins/mods/api#start-a-turn-from-a-background-job)。

641 653 

642<h2 id="redraw-when-something-changes">654<h2 id="redraw-when-something-changes">

643 重绘站点655 重绘站点

644</h2>656</h2>

645 657 

646绘制是一个快照:它显示你的 `ui.render` 钩子上次运行时返回的内容。要显示新内容,钩子必须再次运行。Claude Code 为某些更改再次运行它,你的 mod 要求其余的。658绘制是一个快照:它显示您的 `ui.render` hook 上次运行时返回的内容。要显示新内容,hook 必须再次运行。Claude Code 会针对某些更改再次运行它,其余情况则由您的 mod 发起请求。

647 659 

648<h3 id="when-claude-code-redraws-without-being-asked">660<h3 id="when-claude-code-redraws-without-being-asked">

649 当 Claude Code 在不被要求时重绘661 当 Claude Code 在不被要求时重绘

650</h3>662</h3>

651 663 

652当站点的属性更改或终端的宽度更改时,Claude Code 再次运行你的 `ui.render` 钩子。它不在计时器上运行钩子,也无法判断你的模块中的变量何时更改。664当站点的 prop 更改或终端的宽度更改时,Claude Code 会再次运行您的 `ui.render` hook。它不会按计时器运行 hook,也无法判断您的模块中的变量何时更改。

653 665 

654<h3 id="redraw-when-your-data-changes">666<h3 id="redraw-when-your-data-changes">

655 当你的数据更改时重绘667 当您的数据更改时重绘

656</h3>668</h3>

657 669 

658要在你自己的数据更改后再次绘制你的站点,请调用 `$.ui.invalidate('ui.render')`。此窗格计数按键。按钮的回调更改 `count`,然后要求重绘:670要在您自己的数据更改后再次绘制您的站点,请调用 `$.ui.invalidate('ui.render')`。此窗格统计按键次数。按钮的回调更改 `count`,然后请求重绘:

659 671 

660```javascript theme={null}672```javascript theme={null}

661let count = 0673let count = 0


682})694})

683```695```

684 696 

685每次按键都会提高窗格中的数字。[`hello-tabs` 示例](#build-a-pane-with-tabs) 将相同的调用包装在其 `redraw` 函数中。697每次按键都会使窗格中的数字增加。[`hello-tabs` 示例](#build-a-pane-with-tabs) 将相同的调用包装在其 `redraw` 函数中。

686 698 

687你在 [`$.state`](#keep-a-value-in-\$-state) 中保存的值不需要调用,因为写入值会重绘读取它的站点。699您在 [`$.state`](#keep-a-value-in-\$-state) 中保存的值不需要此调用,因为写入值会重绘读取它的站点。

688 700 

689<h3 id="redraw-on-a-timer">701<h3 id="redraw-on-a-timer">

690 在计时器上重绘702 按计时器重绘

691</h3>703</h3>

692 704 

693要保持时钟、倒计时或来自会话外部的值最新,请按计划重绘。在模块的 `session.start` 钩子中启动计时器。如果模块已经有一个,如 `hello-tabs` 所做的,请将 [`$.clock.every`](/docs/zh-CN/plugins/mods/api#run-work-in-the-background) 行添加到它:705要使时钟、倒计时或来自会话外部的值保持最新,请按计划重绘。在模块的 `session.start` hook 中启动计时器。如果模块已经有一个该 hook(如 `hello-tabs`),请将 [`$.clock.every`](/docs/zh-CN/plugins/mods/api#run-work-in-the-background) 这一行添加到其中:

694 706 

695```javascript theme={null}707```javascript theme={null}

696on('session.start', async ($, e, next) => {708on('session.start', async ($, e, next) => {

697 // 每 1000 毫秒,要求 Claude Code 再次绘制你的站点709 // 每 1000 毫秒,要求 Claude Code 再次绘制您的站点

698 $.clock.every(1000, () => $.ui.invalidate('ui.render'))710 $.clock.every(1000, () => $.ui.invalidate('ui.render'))

699 return next(e)711 return next(e)

700})712})

701```713```

702 714 

703Claude Code 现在每秒运行你的 `ui.render` 钩子一次。当模块重新加载时计时器停止,新副本启动其自己的。715Claude Code 现在每秒运行您的 `ui.render` hook 一次。当模块重新加载时计时器停止,模块的新实例会启动其自己的计时器。

704 716 

705<h3 id="how-often-a-site-can-redraw">717<h3 id="how-often-a-site-can-redraw">

706 站点可以重绘的频率718 站点可以重绘的频率

707</h3>719</h3>

708 720 

709Claude Code 限制重绘的频率,所以你的 mod 可以在其数据更改时调用 `$.ui.invalidate`。可见窗格和条带的限制比其他站点更高,[限制表](/docs/zh-CN/plugins/mods/reference#limits) 中有具体数字。721Claude Code 会限制站点的重绘频率,因此您的 mod 可以在数据每次更改时调用 `$.ui.invalidate`。有关每个站点可以重绘的频率,请参阅[限制表](/docs/zh-CN/plugins/mods/reference#limits)。

710 722 

711比限制更快的调用被合并为一次重绘。该重绘运行你的钩子一次,钩子读取你的数据,因为它在那一刻的样子,所以最新值显示,中间的值不显示。动画无法比限制运行得更快。723快于该限制的调用会被合并为一次重绘。该重绘只运行您的 hook 一次,hook 读取的是您的数据在那一刻的状态,因此显示的是最新值,而中间的值不会显示。动画的运行速度无法超过该限制。

712 724 

713<h2 id="keep-state">725<h2 id="keep-state">

714 保持状态726 保持状态

715</h2>727</h2>

716 728 

717mod 有三个地方可以保存值,它们在值持续多长时间方面有所不同:直到模块重新加载、直到会话结束或从一个会话到下一个会话。根据值必须持续多长时间选择:729mod 将值保存在何处,决定了该值持续多长时间:直到模块重新加载、直到会话结束,或从一个会话持续到下一个会话。根据值需要持续的时长进行选择:

718 730 

719| 在其中保存 | 它持续到 | 用于 |731| 在其中保存 | 它持续到 | 用于 |

720| :- | :- | :- |732| :- | :- | :- |

721| 模块级变量 | 模块重新加载,这在开发期间每次保存文件时发生 | 你可以丢失的值,如 `hello-tabs` 中的 `tab` |733| 模块级变量 | 模块重新加载,这在开发期间每次保存文件时发生 | 您可以丢失的值,如 `hello-tabs` 中的 `tab` |

722| `$.state` | 会话结束,或用户运行 `/clear`、`/resume` 或 `/branch` | 绘制依赖的值,应该在重新加载后存活 |734| `$.state` | 会话结束,或用户运行 `/clear`、`/resume` 或 `/branch` | 绘制依赖的值,应该在重新加载后存活 |

723| `$.store` | 你的 mod 删除它,或没有会话在 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 内读取或写入存储。存储是一个键值存储,保存为你的插件自己的 JSON 文件,位于 `~/.claude/plugins/store/` 下。 | 设置、历史记录、用户期望下次找到的任何内容 |735| `$.store` | 您的 mod 删除它,或没有会话在 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 内读取或写入存储。存储是一个键值存储,保存为您的插件自己的 JSON 文件,位于 `~/.claude/plugins/store/` 下。 | 设置、历史记录、用户期望下次找到的任何内容 |

724 736 

725`$.store.get(key)` 解析为值或 `undefined`,`$.store.set(key, value)` 接受任何 JSON 值。737`$.store.get(key)` 解析为值或 `undefined`,`$.store.set(key, value)` 接受任何 JSON 值。

726 738 

727<h3 id="keep-a-value-in-state">739<h3 id="keep-a-value-in-$-state">

728 在 `$.state` 中保存值740 在 `$.state` 中保存值

729</h3>741</h3>

730 742 

731`$.state` 为会话的长度保存值,并为你重绘。它是反应式状态:读取值的 `ui.render` 钩子订阅它,所以 Claude Code 每次你写入值时重绘该站点,你不调用 `$.ui.invalidate`。`$.state` 中的值也在模块重新加载后存活,变量不会。743`$.state` 在会话期间保存值,并为您重绘。它是反应式状态:读取值的 `ui.render` hook 会订阅该值,因此每次您写入该值时,Claude Code 都会重绘该站点,您无需调用 `$.ui.invalidate`。`$.state` 中的值也会在模块重新加载后存活,而变量不会。

732 744 

733要设置它,声明你的值,将你的清单指向声明,然后定义和使用每个值。示例将 `count` 从 `hello-tabs` 移到 `$.state`。745要设置它,请声明您的值,将您的清单指向该声明,然后定义和使用每个值。示例将 `count` 从 `hello-tabs` 移到 `$.state`。

734 746 

735<h4 id="declare-the-values">747<h4 id="declare-the-values">

736 声明值748 声明值

737</h4>749</h4>

738 750 

739在类型文件中声明值。外键是你的插件的名称,其下的每个条目是一个值及其类型。将其保存为 `hello-tabs/types/index.d.ts`:751在类型声明文件中声明值。外层键是您的插件的名称,其下的每个条目是一个值及其类型。将其保存为 `hello-tabs/types/index.d.ts`:

740 752 

741```typescript hello-tabs/types/index.d.ts theme={null}753```typescript hello-tabs/types/index.d.ts theme={null}

742declare module 'claude-code' {754declare module 'claude-code' {


753 将清单指向声明765 将清单指向声明

754</h4>766</h4>

755 767 

756要让 `claude plugin validate` 根据该文件检查你的代码,请向清单添加 `types` 字段及其路径:768要让 `claude plugin validate` 根据该文件检查您的代码,请向清单添加 `types` 字段及其路径:

757 769 

758```json hello-tabs/.claude-plugin/plugin.json theme={null}770```json hello-tabs/.claude-plugin/plugin.json theme={null}

759{771{


769 定义、读取和写入值781 定义、读取和写入值

770</h4>782</h4>

771 783 

772在你的模块中,定义每个值及其默认值,在绘制时读取它,并从回调中写入它。`atom` 命名值及其默认值,`read` 返回它,`update` 写入它。三个帮助程序为你调用 `$.state.get` 和 `$.state.set`:784在您的模块中,定义每个值及其默认值,在绘制时读取它,并从回调中写入它。`atom` 命名值及其默认值,`read` 返回它,`update` 写入它。这三个帮助程序会为您调用 `$.state.get` 和 `$.state.set`:

773 785 

774```javascript theme={null}786```javascript theme={null}

775import { atom, read, update } from 'claude-code'787import { atom, read, update } from 'claude-code'


777// 在模块顶部:命名值并给出其默认值789// 在模块顶部:命名值并给出其默认值

778const count = atom({ plugin: 'hello-tabs', key: 'count' }, 0)790const count = atom({ plugin: 'hello-tabs', key: 'count' }, 0)

779 791 

780// 在 ui.render 钩子中:读取值以绘制它792// 在 ui.render hook 中:读取值以绘制它

781const n = await read($, count)793const n = await read($, count)

782 794 

783// 在按钮中:从旧值写入新值795// 在按钮中:从旧值写入新值

784onPress: () => update($, count, (value) => value + 1)796onPress: () => update($, count, (value) => value + 1)

785```797```

786 798 

787因为 `ui.render` 钩子读取了 `count`,Claude Code 每次按钮写入它时再次运行钩子。799因为 `ui.render` hook 读取了 `count`,所以每次按钮写入它时,Claude Code 都会再次运行该 hook。

788 800 

789三个规则适用于代码:801以下规则适用于代码:

790 802 

791* **将 `plugin` 和 `key` 写成字面字符串**:`claude plugin validate` 从你的源代码中读取它们803* **将 `plugin` 和 `key` 写成字面字符串**:`claude plugin validate` 从您的源代码中读取它们

792* **在类型文件中声明每个值**:否则验证失败,出现 `hello-tabs.count is not declared`804* **在类型声明文件中声明每个值**:否则验证失败,出现 `hello-tabs.count is not declared`

793* **从回调或另一个事件的钩子中写入**:`ui.render` 钩子可以读取状态,不能写入它,所以从 `onPress`、`onSubmit` 或另一个事件的钩子中写入805* **从回调或另一个事件的 hook 中写入**:`ui.render` hook 可以读取状态,但不能写入它,因此请从 `onPress`、`onSubmit` 或另一个事件的 hook 中写入

794 806 

795<h4 id="change-hello-tabs-to-use-state">807<h4 id="change-hello-tabs-to-use-$-state">

796 更改 `hello-tabs` 以使用 `$.state`808 更改 `hello-tabs` 以使用 `$.state`

797</h4>809</h4>

798 810 

799要将 `hello-tabs` 中的 `count` 移到 `$.state`,请更改使用它的每一行:811要将 `hello-tabs` 中的 `count` 移到 `$.state`,请更改使用它的每一行:

800 812 

801* **在模块顶部**:添加 `import` 行,并用 `atom` 行替换 `let count = 0`813* **在模块顶部**:添加 `import` 行,并用 `atom` 行替换 `let count = 0`

802* **在 `ui.render` 钩子中**:在 `tabButton` 之前添加 `read` 行,并在 `Text` 中绘制 `'Count: ' + n`814* **在 `ui.render` hook 中**:在 `tabButton` 之前添加 `read` 行,并在 `Text` 中绘制 `'Count: ' + n`

803* **在 Add one 按钮中**:用[从多个会话保存](#save-from-more-than-one-session)中的按钮替换 `onPress`,它保存计数以及写入它815* **在 Add one 按钮中**:用[从多个会话保存](#save-from-more-than-one-session)中的 `onPress` 替换 `onPress`,它在写入计数的同时也会保存计数

804* **在 `session.start` 钩子中**:用[在 `/clear` 后再次加载保存的值](#load-a-saved-value-again-after-clear)中的 `loadCount` 调用替换读取 `saved` 的两行816* **在 `session.start` hook 中**:用[在 `/clear` 后再次加载保存的值](#load-a-saved-value-again-after-clear)中的 `loadCount` 调用替换读取 `saved` 的两行

805 817 

806为选项卡按钮保留 `redraw`,因为 `tab` 仍然是一个变量。818为选项卡按钮保留 `redraw`,因为 `tab` 仍然是一个变量。

807 819 


809 在 `/clear` 后再次加载保存的值821 在 `/clear` 后再次加载保存的值

810</h3>822</h3>

811 823 

812如果你的 mod 在 `session.start` 时将保存的值从 `$.store` 复制到 `$.state`,它必须在 `/clear`、`/resume` 或 `/branch` 后再次复制。这些命令将每个 `$.state` 值放回其默认值,`session.start` 不再触发。[`classic.SessionStart`](/docs/zh-CN/plugins/mods/events#hook-the-settings-hook-events) 在每个之后触发,`e.source` 设置为 `clear`、`resume` 或 `fork`,所以在其上的钩子中再次复制值。否则你的绘制显示默认值,保存 `$.state` 值的回调将默认值写入你存储的内容。824如果您的 mod 在 `session.start` 时将保存的值从 `$.store` 复制到 `$.state`,它必须在 `/clear`、`/resume` 或 `/branch` 后再次复制。这些命令会将每个 `$.state` 值重置为其默认值,而 `session.start` 不会再次触发。[`classic.SessionStart`](/docs/zh-CN/plugins/mods/events#hook-the-settings-hook-events) 确实会在每个命令之后触发,`e.source` 设置为 `clear`、`resume` 或 `fork`,因此请在其上的 hook 中再次复制值。否则您的绘制会显示默认值,而保存 `$.state` 值的回调会用默认值覆盖您存储的内容。

813 825 

814此代码从两个钩子加载 `count`。它基于 `hello-tabs` 的 `$.state` 版本,其中 `count` 是原子,`update` 被导入。将 `loadCount` 放在 `register` 上方,并将 `loadCount` 调用添加到你已经拥有的 `session.start` 钩子。`classic.SessionStart` 也在启动和压缩后触发,这不会重置 `$.state`,所以对 `source` 的过滤将钩子保留到三个重置:826此代码从两个 hook 加载 `count`。它基于 `hello-tabs` 的 `$.state` 版本,其中 `count` 是原子,`update` 已被导入。将 `loadCount` 放在 `register` 上方,并将 `loadCount` 调用添加到您已有的 `session.start` hook。`classic.SessionStart` 也会在启动时和压缩后触发,而这些不会重置 `$.state`,因此对 `source` 的过滤将该 hook 限定于这三种重置:

815 827 

816```javascript theme={null}828```javascript theme={null}

817// 将保存的计数从 $.store 复制到 $.state,如果没有保存任何内容则为 0829// 将保存的计数从 $.store 复制到 $.state,如果没有保存任何内容则为 0


820 await update($, count, () => saved)832 await update($, count, () => saved)

821}833}

822 834 

823// 在你的第一个提示符之前运行,以及重新加载后再次运行835// 在您的第一个提示词之前运行,以及重新加载后再次运行

824on('session.start', async ($, e, next) => {836on('session.start', async ($, e, next) => {

825 await loadCount($)837 await loadCount($)

826 return next(e)838 return next(e)

827})839})

828 840 

829// 在 /clear、/resume 和 /branch 后再次运行,报告 fork841// 在 /clear、/resume 和 /branch 后再次运行,/branch 报告为 fork

830on('classic.SessionStart', { source: ['clear', 'resume', 'fork'] }, async ($, e, next) => {842on('classic.SessionStart', { source: ['clear', 'resume', 'fork'] }, async ($, e, next) => {

831 await loadCount($)843 await loadCount($)

832 return next(e)844 return next(e)

833})845})

834```846```

835 847 

836两个钩子就位后,窗格在 `/clear` 后显示保存的计数,而不是 `0`,**Add one** 的下一次按键添加到保存的计数。848两个 hook 就位后,窗格在 `/clear` 后显示保存的计数,而不是 `0`,并且下一次按下 **Add one** 会在保存的计数上累加。

837 849 

838`loadCount` 将存储的值写入 `$.state` 中的值,`session.start` 每次模块重新加载时再次触发。要保持存储不落后,请在每次更改时保存,如 **Add one** 按钮所做的。850`loadCount` 会用存储的值覆盖 `$.state` 中的值,并且每次模块重新加载时 `session.start` 都会再次触发。为了防止存储落后,请在每次更改时保存,就像 **Add one** 按钮所做的那样。

839 851 

840要在不会话的情况下检查重新加载,请[在 `/clear` 后测试绘制](/docs/zh-CN/plugins/mods/test#test-a-drawing-after-clear)。852要在不启动会话的情况下检查重新加载,请[在 `/clear` 后测试绘制](/docs/zh-CN/plugins/mods/test#test-a-drawing-after-clear)。

841 853 

842<h3 id="save-from-more-than-one-session">854<h3 id="save-from-more-than-one-session">

843 从多个会话保存855 从多个会话保存

844</h3>856</h3>

845 857 

846你的机器上运行你的 mod 的每个会话共享一个 `$.store`。`get` 后跟 `set` 不是原子的。当两个会话各自读取值、更改它并写回时,它们竞争,第二次写入替换第一次。858您的机器上运行您的 mod 的每个会话共享一个 `$.store`。`get` 后跟 `set` 不是原子的。当两个会话各自读取值、更改它并写回时,它们会发生竞争,第二次写入会替换第一次。

847 859 

848两个选择使这种情况不太可能:860要降低这种情况发生的可能性:

849 861 

850* **给每个项目其自己的键**:`set` 仅更改其自己的键,所以写入不同键的会话不会相互覆盖862* **给每个项目其自己的键**:`set` 仅更改其自己的键,所以写入不同键的会话不会相互覆盖

851* **在写入前再次读取**:对于多个会话更改的值,在回调中 `get` 键,并从该值构建新值,而不是从你在 `session.start` 加载的副本。如果另一个会话的写入落在你的 `get` 和 `set` 之间,它仍然会丢失。863* **在写入前立即再次读取**:对于多个会话更改的值,在回调中 `get` 该键,并从该值构建新值,而不是从您在 `session.start` 加载的副本构建。如果另一个会话的写入落在您的 `get` 和 `set` 之间,它仍然会丢失。

852 864 

853此按钮将一个添加到存储现在保存的任何内容,然后更新绘制:865此按钮在存储当前保存的值上加一,然后更新绘制:

854 866 

855```javascript theme={null}867```javascript theme={null}

856onPress: async () => {868onPress: async () => {

857 // 读取存储现在保存的内容,另一个会话可能已更改869 // 读取存储当前保存的内容,另一个会话可能已更改它

858 const saved = Number((await $.store.get('count')) ?? 0)870 const saved = Number((await $.store.get('count')) ?? 0)

859 // 保存新计数,然后显示它871 // 保存新计数,然后显示它

860 await $.store.set('count', saved + 1)872 await $.store.set('count', saved + 1)


862}874}

863```875```

864 876 

865如果第二个会话自此会话启动以来按下了其自己的按钮三次,此按键显示并保存包括这三个的计数。877如果自此会话启动以来,第二个会话已按下其自己的按钮三次,那么此次按下所显示并保存的计数会包含这三次。

866 878 

867<h2 id="next-steps">879<h2 id="next-steps">

868 后续步骤880 后续步骤

Details

30 获取 mod30 获取 mod

31</h2>31</h2>

32 32 

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

34 34 

35* **使用你已经拥有的**:Claude Code 的一些自己的功能是 mods,例如 `/diff`。请参阅[内置于 Claude Code 的 Mods](#mods-built-into-claude-code)。35* **使用您已经拥有的**:Claude Code 自身的一些功能就是 mod,例如 `/diff`。请参阅[内置于 Claude Code 的 mod](#mods-built-into-claude-code)。

36* **创建一个**:在 Claude Code 会话中描述你想要的内容,Claude 会编写 mod。请参阅[向 Claude 请求 mod](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod)。要了解 mod 代码如何工作,[自己编写一个](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself)。36* **创建一个**:在 Claude Code 会话中描述您想要的内容,Claude 会编写 mod。请参阅[向 Claude 请求 mod](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod)。要了解 mod 代码如何工作,[自己编写一个](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself)。

37* **安装一个**:请参阅[安装或更新 mod](#install-or-update-a-mod)37* **安装一个**:请参阅[安装或更新 mod](#install-or-update-a-mod),或[试用示例 mod](#try-a-sample-mod)

38 38 

39<h3 id="install-or-update-a-mod">39<h3 id="install-or-update-a-mod">

40 安装或更新 mod40 安装或更新 mod

41</h3>41</h3>

42 42 

43<Warning>43<Warning>

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

45</Warning>45</Warning>

46 46 

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

48 48 

49* 在 Claude Code 会话中,运行 `/plugin install token-chart@your-org`。49* 在 Claude Code 会话中,运行 `/plugin install token-chart@your-org`。

50* 在你的 shell 中,运行 `claude plugin install token-chart@your-org`。50* 在您的 shell 中,运行 `claude plugin install token-chart@your-org`。

51 51 

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

53 53 

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

55 

56<h3 id="try-a-sample-mod">

57 试用示例 mod

58</h3>

59 

60Anthropic 在 [`claude-code-playground` 仓库的 `claude-code/mods` 目录](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods)中分享示例 mod。每个示例都是一个完整的插件,其 README 说明了它的构建方式。该仓库按原样分享这些示例,不提供支持。

61 

62* [`token-weather`](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/token-weather):在输入框上方绘制上下文窗口的预测图

63* [`blast-radius`](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/blast-radius):拦截有风险的 shell 命令(例如 `rm -rf` 或强制推送),显示它将更改的内容,并提供继续或取消的按钮

64* [`replay-theater`](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/replay-theater):添加一个 `/replay` 命令,用于逐步浏览 Claude 在上一轮次中所做的文件编辑

65 

66示例 mod 使用您的权限运行。要在加载之前查看它的作用,请[列出其 hook 和调用](#list-what-a-mod-does-before-you-install-one)。

67 

68要试用某个示例,请克隆该仓库,并使用 `--plugin-dir` [为单个会话加载该 mod 的目录](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session)。要确认 mod 已加载,请[检查会话加载了哪些 mod](#see-which-mods-a-session-loaded)。

69 

70要保留某个示例,请[将克隆中的 `claude-code/mods` 目录添加为市场](/docs/zh-CN/plugins/install#add-a-marketplace),然后从 `claude-code-playground-mods` 安装该 mod。该市场指向您的克隆,因此如果您移动或删除该克隆,mod 将停止加载。

55 71 

56<h2 id="decide-whether-to-trust-a-mod">72<h2 id="decide-whether-to-trust-a-mod">

57 决定是否信任 mod73 决定是否信任 mod

58</h2>74</h2>

59 75 

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

61 77 

62<h3 id="what-a-mod-can-reach">78<h3 id="what-a-mod-can-reach">

63 Mod 可以访问什么79 Mod 可以访问什么

64</h3>80</h3>

65 81 

66Mod 使用你的权限运行,所以在安装之前,了解它可以访问什么。一旦加载,mod 可以:82Mod 使用您的权限运行,所以在安装之前,请了解它可以访问什么。一旦加载,mod 可以:

67 83 

68* **在你的机器上以你的身份行动**:读写你的用户账户可以访问的任何地方的文件、启动程序和发出网络请求84* **在您的机器上以您的身份行动**:读写您的用户账户可以访问的任何位置的文件、启动程序以及发出网络请求

69* **读取你的秘密**:环境变量和设置文件,包括你保存在其中任何一个的 API 密钥85* **读取您的机密信息**:环境变量和设置文件,包括您保存在其中任何一处的 API 密钥

70* **查看你的会话**:你发送的每个提示和 Claude 进行的每个工具调用86* **查看您的会话**:您发送的每个提示词和 Claude 进行的每个工具调用

71* **更改你的会话**:重写提示或工具调用、提交提示就像你输入的一样,或向你的另一个会话发送消息87* **更改您的会话**:重写提示词或工具调用、像您亲自输入一样提交提示词,或向您的另一个会话发送消息

72* **在不询问你的情况下行动**:在被询问之前批准工具调用88* **在不询问您的情况下行动**:在询问您之前批准工具调用

73* **花费你的使用量**:在你的计划或 API 密钥上调用模型89* **消耗您的使用量**:使用您的计划或 API 密钥调用模型

74 90 

75批准工具调用的 mod 可以批准 `ask` 规则会提示的工具调用,或你自己的 `PreToolUse` hooks 阻止的工具调用。[使用 hooks 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了这样的 mod 可以批准的内容,包括它何时可以批准 `deny` 规则拒绝的调用。91Mod 不在沙箱中运行。如果您启用[沙箱隔离](/docs/zh-CN/sandboxing),沙箱会隔离 Claude 运行的 Bash 命令,而 mod 启动的进程在沙箱之外运行。

76 92 

77Mod 可以重新设置 Claude Code 界面的大部分样式,但不能重新设置权限提示。它不能改变提示显示给你的内容。93批准工具调用的 mod 可以批准 `ask` 规则会提示确认的工具调用,或您自己的 `PreToolUse` hook 阻止的工具调用。[使用 hook 扩展权限](/docs/zh-CN/permissions#extend-permissions-with-hooks)列出了这样的 mod 可以批准的内容,包括它何时可以批准 `deny` 规则拒绝的调用。

94 

95Mod 可以重新设置 Claude Code 界面的大部分样式,但不能重新设置权限提示。它无法改变权限提示向您显示的内容。

78 96 

79<h3 id="list-what-a-mod-does-before-you-install-one">97<h3 id="list-what-a-mod-does-before-you-install-one">

80 在安装 mod 之前列出它做什么98 在安装 mod 之前列出它做什么

81</h3>99</h3>

82 100 

83在安装 mod 之前,你可以列出它 hooks 的事件以及它要求 Claude Code 做什么,例如读取文件或发出网络请求,而无需运行它。首先获取插件的文件,例如通过克隆其存储库。然后,在你的 shell 中,在插件的目录上运行 `claude plugin validate`:101在安装 mod 之前,您可以在不运行它的情况下列出它处理哪些事件以及它要求 Claude Code 做什么,例如读取文件或发出网络请求。首先获取插件的文件,例如通过克隆其仓库。然后,在您的 shell 中,对插件的目录运行 `claude plugin validate`:

84 102 

85```bash theme={null}103```bash theme={null}

86claude plugin validate ./some-mod104claude plugin validate ./some-mod

87```105```

88 106 

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

90 108 

91<h2 id="turn-mods-on-or-off">109<h2 id="turn-mods-on-or-off">

92 打开或关闭 mods110 打开或关闭 mods

93</h2>111</h2>

94 112 

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

96 114 

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

98 116 

99* **一个 mod**:从[`/plugin` 中的**已安装**选项卡](/docs/zh-CN/plugins/install#manage-installed-plugins)禁用或卸载其插件117* **一个 mod**:从[`/plugin` 中的**已安装**选项卡](/docs/zh-CN/plugins/install#manage-installed-plugins)禁用或卸载其插件

100* **每个已安装的 mod,对于一个会话**:使用 [`--safe-mode`](/docs/zh-CN/cli-reference#cli-flags) 启动 Claude Code,这也会排除你的其他自定义118* **每个已安装的 mod,对于一个会话**:使用 [`--safe-mode`](/docs/zh-CN/cli-reference#cli-flags) 启动 Claude Code,这也会禁用您的其他自定义

101* **你安装的每个 mod,在每个会话中**:在 `~/.claude/settings.json` 中设置 [`"disableAllHooks": true`](/docs/zh-CN/settings-reference#disableallhooks)。你的设置 hooks 和自定义状态行也会停止。你的组织管理的内容继续运行。119* **您安装的每个 mod,在每个会话中**:在 `~/.claude/settings.json` 中设置 [`"disableAllHooks": true`](/docs/zh-CN/settings-reference#disableallhooks)。您的设置 hook 和自定义状态栏也会停止。您的组织管理的内容继续运行。

120 

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

102 122 

103如果你通过组织使用 Claude Code,管理员也可以限制哪些 mods 加载。管理员从[停止用户安装的 mods 加载](/docs/zh-CN/plugins/mods/admin#stop-user-installed-mods-from-loading)开始。123`disableAllHooks` 和您组织的 `allowManagedModsOnly` 会停止 mod,但保留其插件的其余部分:插件保持安装状态,其 skill、命令、Agent 和 MCP 服务器照常加载。其他设置和标志的影响范围更广。[`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks) 和[`allowManagedHooksOnly` 下运行的内容](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)列出了每一项对插件及其设置 hook 的影响。

104 124 

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

106 126 

107<Note>127<Note>

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

109</Note>129</Note>

110 130 

111<h3 id="see-which-mods-a-session-loaded">131<h3 id="see-which-mods-a-session-loaded">

112 查看会话加载了哪些 mods132 查看会话加载了哪些 mods

113</h3>133</h3>

114 134 

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

116 136 

117<h2 id="how-a-mod-works">137<h2 id="how-a-mod-works">

118 Mod 如何工作138 Mod 如何工作

119</h2>139</h2>

120 140 

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

122 142 

123```text theme={null}143```text theme={null}

124first-mod/144first-mod/


130```150```

131 151 

132* **`plugin.json`**:插件的[清单](/docs/zh-CN/plugins/manifest-reference)152* **`plugin.json`**:插件的[清单](/docs/zh-CN/plugins/manifest-reference)

133* **`hooks.json`**:[指向你的代码文件](/docs/zh-CN/plugins/mods/reference#files)153* **`hooks.json`**:[指向您的代码文件](/docs/zh-CN/plugins/mods/reference#files)

134* **`register.js`**:[你的代码](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself),称为 hooks 模块。它告诉 Claude Code 在哪些事件上运行你的函数。154* **`register.js`**:[您的代码](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself),称为 hooks 模块。它告诉 Claude Code 在哪些事件上运行您的函数。

135 155 

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

137 157 

138```javascript hooks/register.js theme={null}158```javascript hooks/register.js theme={null}

139// The count, shared by the two hooks below159// The count, shared by the two hooks below


158}178}

159```179```

160 180 

161该文件注册了两个 hooks,两者都使用顶部的 `calls` 变量:181该文件注册了两个 hook,两者都使用顶部的 `calls` 变量:

162 182 

163* **[`tool.call`](/docs/zh-CN/plugins/mods/reference#tools) hook** 在 Claude 即将使用工具时运行。它将一个添加到 `calls`,要求 Claude Code 再次绘制界面,并让工具照常运行。183* **[`tool.call`](/docs/zh-CN/plugins/mods/reference#tools) hook** 在 Claude 每次即将使用工具时运行。它将 `calls` 加一,要求 Claude Code 再次绘制界面,并让工具照常运行。

164* **[`ui.render`](/docs/zh-CN/plugins/mods/reference#interface) hook** 在 Claude Code 绘制微调器时运行。它保持 Claude Code 自己的微调器,并在单词后添加计数。184* **[`ui.render`](/docs/zh-CN/plugins/mods/reference#interface) hook** 在 Claude Code 每次绘制微调器时运行。它保留 Claude Code 自己的微调器,并在其文字后添加计数。

165 185 

166这个录制显示了 mod 的工作。观看提示框上方的微调器行:当 Claude 列出目录并读取两个文件时,它读取 `Thinking · tool calls: 1…`,然后 `2…`,然后 `3…`。186这段录屏展示了 mod 的工作过程。请观察输入框上方的微调器行:当 Claude 列出目录并读取两个文件时,它显示 `Thinking · tool calls: 1…`,然后是 `2…`,然后是 `3…`。

167 187 

168<Frame>188<Frame>

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

170 190 

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

172</Frame>192</Frame>

173 193 

174<h3 id="what-a-hook-can-do-with-an-event">194<h3 id="what-a-hook-can-do-with-an-event">

175 Hook 可以对事件做什么195 Hook 可以对事件做什么

176</h3>196</h3>

177 197 

178Claude Code 在对事件采取行动之前运行你的 hook,所以 hook 决定接下来会发生什么。它有三个选择:198Claude Code 在对事件采取行动之前运行您的 hook,因此由 hook 决定接下来会发生什么。它可以:

179 199 

180* **观察**:注意正在发生的事情并让它继续不变,就像示例中的 `tool.call` hook 一样200* **观察**:记录正在发生的事情并让其不变地继续,就像示例中的 `tool.call` hook 一样

181* **重写**:在事件继续之前更改事件,就像 `ui.render` hook 在向微调器添加计数时所做的那样201* **重写**:在事件继续之前更改事件,就像 `ui.render` hook 在向微调器添加计数时所做的那样

182* **回答**:自己处理事件,所以通常的行为不会运行,例如拒绝命令202* **回答**:自己处理事件,使通常的行为不会运行,例如拒绝某个命令

183 203 

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

185 205 

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

187 207 

188<h3 id="where-mods-run">208<h3 id="where-mods-run">

189 Mods 在哪里运行209 Mods 在哪里运行

190</h3>210</h3>

191 211 

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

193 213 

194| 你运行 Claude Code 的地方 | Hooks 运行 | Mod 绘制的内容出现 |214| 您运行 Claude Code 的地方 | Hook 是否运行 | Mod 绘制的内容是否出现 |

195| :- | :- | :- |215| :- | :- | :- |

196| 终端中的 `claude`,包括编辑器的集成终端和 JetBrains 插件 | 是 | 是 |216| 终端中的 `claude`,包括编辑器的集成终端和 JetBrains 插件 | 是 | 是 |

197| 桌面应用的代码选项卡,除了 WSL 会话中 | 是 | 是,除了[元素表](/docs/zh-CN/plugins/mods/reference#elements)标记为仅终端的元素 |217| 桌面应用的代码选项卡,WSL 会话除外 | 是 | 是,[元素表](/docs/zh-CN/plugins/mods/reference#elements)标记为仅限终端的元素除外 |

198| 桌面应用中的 [WSL 会话](/docs/zh-CN/desktop-wsl) | 否,因为插件在 WSL 会话中不可用 | 否 |218| 桌面应用中的 [WSL 会话](/docs/zh-CN/desktop-wsl) | 否,因为插件在 WSL 会话中不可用 | 否 |

199| VS Code 扩展的聊天面板 | 是 | 否 |219| VS Code 扩展的聊天面板 | 是 | 否 |

200| `claude -p` 和[代理 SDK](/docs/zh-CN/agent-sdk/overview) | 是 | 否 |220| `claude -p` 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) | 是 | 否 |

201| 从 claude.ai 或移动应用[远程控制](/docs/zh-CN/remote-control) | 是,在你机器上的会话中 | 在你机器上的终端中 |221| 从 claude.ai 或移动应用使用 [Remote Control](/docs/zh-CN/remote-control) | 是,在您机器上的会话中 | 在您机器上的终端中 |

202| [云会话](/docs/zh-CN/claude-code-on-the-web) | 是,对于[到达云会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)的插件 | 否 |222| [云端会话](/docs/zh-CN/claude-code-on-the-web) | 是,适用于[可进入云端会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)的插件 | 否 |

203 223 

204绘制的 mod 可以检查它运行在哪个应用中,并在文本记录中的行或命令的文本回复中回退,其中没有任何内容绘制。224会绘制内容的 mod 可以检查自己运行在哪个应用中,并在无法绘制的地方回退为会话记录中的一行或命令的文本回复。

205 225 

206<h2 id="control-mods-for-your-organization">226<h2 id="control-mods-for-your-organization">

207 为你的组织控制 mods227 为你的组织控制 mods


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

211 231 

212<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">232<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">

213 比较 mods、设置 hooks、skills 和 MCP 服务器233 比较 mod、设置 hook、skill 和 MCP 服务器

214</h2>234</h2>

215 235 

216Mods、设置 hooks、skills 和 MCP 服务器重叠。此表显示每一个是什么以及何时选择它。236Mod、设置 hook、skill 和 MCP 服务器的功能有所重叠。此表说明每一种是什么以及何时选择它。

217 237 

218| | Mod | 设置 hook | Skill | MCP 服务器 |238| | Mod | 设置 hook | Skill | MCP 服务器 |

219| :- | :- | :- | :- | :- |239| :- | :- | :- | :- | :- |

220| 它是什么 | Claude Code 在其自己的进程中调用的插件中的函数 | Claude Code 在生命周期事件上运行的 shell 命令、HTTP 请求或提示 | Claude 读取的 `SKILL.md` 文件指令 | 给 Claude 工具的外部进程或服务 |240| 它是什么 | Claude Code 在其自己的进程中调用的插件中的函数 | Claude Code 在生命周期事件上运行的 shell 命令、HTTP 请求或提示词 | Claude 读取的 `SKILL.md` 文件指令 | 为 Claude 提供工具的外部进程或服务 |

221| 它可以改变什么 | 工具调用、提示、命令、转折和界面绘制的内容 | 工具调用或提示是否继续、工具调用的参数和结果,以及为 Claude 添加的上下文 | Claude 知道和做什么 | Claude 拥有哪些工具 |241| 它可以改变什么 | 工具调用、提示词、命令、轮次和界面绘制的内容 | 工具调用或提示词是否继续、工具调用的参数和结果,以及为 Claude 添加的上下文 | Claude 知道什么和做什么 | Claude 拥有哪些工具 |

222| 它可以在界面中绘制吗 | 是 | 否 | 否 | 否 |242| 它可以在界面中绘制吗 | 是 | 否 | 否 | 否 |

223| 你写什么 | JavaScript 或 TypeScript | 脚本和 `settings.json` 条目 | Markdown | 任何语言的服务器 |243| 您编写什么 | JavaScript 或 TypeScript | 脚本和 `settings.json` 条目 | Markdown | 任何语言的服务器 |

224| 当你想要时选择它 | 你想要一个窗格、提示上方的带状区域、自定义命令或重写事件 | 你想用你已经拥有的脚本阻止、允许或记录事件 | 你不断将相同的指令粘贴到聊天中 | Claude 需要到达外部系统 |244| 何时选择它 | 您想要一个窗格、输入框上方的带状区域、自定义命令或重写事件 | 您想用已有的脚本阻止、允许或记录事件 | 您不断将相同的指令粘贴到聊天中 | Claude 需要访问外部系统 |

225 245 

226其他每一个都有自己的页面:[Hooks](/docs/zh-CN/hooks)、[Skills](/docs/zh-CN/skills) 和 [MCP](/docs/zh-CN/mcp)。一个插件可以容纳所有四个,所以 mod 可以与 skill 和 MCP 服务器一起在同一个插件中发货。246其他每一种都有自己的页面:[Hooks](/docs/zh-CN/hooks)、[Skills](/docs/zh-CN/skills) 和 [MCP](/docs/zh-CN/mcp)。一个插件可以容纳所有这些,因此 mod 可以与 skill 和 MCP 服务器放在同一个插件中发布。

227 247 

228<h2 id="mods-built-into-claude-code">248<h2 id="mods-built-into-claude-code">

229 内置于 Claude Code 的 Mods249 内置于 Claude Code 的 Mods

230</h2>250</h2>

231 251 

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

233 253 

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

235 255 


238| `cc-plugin-agents-md` | 将 `AGENTS.md` 加载为项目指令 | 每个会话,除了[无法读取 `AGENTS.md` 的会话](/docs/zh-CN/memory#when-agents-md-support-is-unavailable) | 在 `/plugin` 中禁用它,或[选择哪些指令文件加载](/docs/zh-CN/memory#choose-which-instruction-files-load) |258| `cc-plugin-agents-md` | 将 `AGENTS.md` 加载为项目指令 | 每个会话,除了[无法读取 `AGENTS.md` 的会话](/docs/zh-CN/memory#when-agents-md-support-is-unavailable) | 在 `/plugin` 中禁用它,或[选择哪些指令文件加载](/docs/zh-CN/memory#choose-which-instruction-files-load) |

239| `cc-plugin-diff` | 接管 [`/diff`](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) 并绘制其窗格 | 交互式终端会话 | 在 `/plugin` 中禁用它。`/diff` 保持,Claude Code 的内置版本的命令回答它。 |259| `cc-plugin-diff` | 接管 [`/diff`](/docs/zh-CN/interactive-mode#review-changes-with-%2Fdiff) 并绘制其窗格 | 交互式终端会话 | 在 `/plugin` 中禁用它。`/diff` 保持,Claude Code 的内置版本的命令回答它。 |

240| `cc-plugin-plugin-authoring` | 给 Claude [`plugin-authoring` skill](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 用于编写 mods。它持有一个 skill,没有 mod 代码。 | 除非 Anthropic 已远程关闭已安装的 mods | 在 `/plugin` 中禁用它 |260| `cc-plugin-plugin-authoring` | 给 Claude [`plugin-authoring` skill](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 用于编写 mods。它持有一个 skill,没有 mod 代码。 | 除非 Anthropic 已远程关闭已安装的 mods | 在 `/plugin` 中禁用它 |

241| `cc-plugin-sec-default` | 保护你的组织管理的内容免受用户安装的 mods | [保护加载的地方](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default) | 你不能。管理员在托管设置中[设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) |261| `cc-plugin-sec-default` | 保护您的组织管理的内容免受用户安装的 mods | [保护加载的地方](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default) | 您不能。管理员在托管设置中[设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) |

242| `cc-plugin-telemetry` | 发送 Claude Code 及其内置 mods 记录的分析记录 | 无论 Claude Code 自己的分析在哪里打开 | 在 `/plugin` 中禁用它,或关闭分析,例如使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/env-vars) |262| `cc-plugin-telemetry` | 发送 Claude Code 及其内置 mods 记录的分析记录 | 无论 Claude Code 自己的分析在哪里打开 | 在 `/plugin` 中禁用它,或关闭分析,例如使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/env-vars) |

243| `cc-plugin-you-should-know` | 运行一个侧面代理,在 Claude 处理较长任务时监视你的背后。当它发现值得了解的东西而你可能会错过时,它会在提示符上方显示一条注释。 | 默认禁用。如果可用于你的组织,在 `/plugin` -> **已安装** -> **显示禁用**中列出。使用 [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/zh-CN/plugins/cli-reference#plugin-in-a-session) 启用。 | 在 `/plugin` 中禁用它 |263| `cc-plugin-you-should-know` | 运行一个侧边 Agent,在 Claude 处理较长任务时为您留意情况。当它发现值得了解的东西而您可能会错过时,它会在提示符上方显示一条注释。 | 默认禁用。如果可用于您的组织,在 `/plugin` -> **已安装** -> **显示禁用**中列出。使用 [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/zh-CN/plugins/cli-reference#plugin-in-a-session) 启用。 | 在 `/plugin` 中禁用它 |

244 264 

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

246 266 


248 阅读内置 mods 的源代码268 阅读内置 mods 的源代码

249</h3>269</h3>

250 270 

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

252 272 

253* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff):`/diff` 窗格,带有绑定到键盘操作的按钮和 mod 自己处理的滚动273* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff):`/diff` 窗格,带有绑定到键盘操作的按钮和 mod 自己处理的滚动

254* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md):将 `AGENTS.md` 加载为项目指令,带有 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 选项274* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md):将 `AGENTS.md` 加载为项目指令,带有 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 选项

255* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default):[了解默认情况下发生的事情](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default)中描述的保护,一个强制执行策略的 mod 的模型275* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default):[了解默认情况下发生的事情](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default)中描述的保护,一个强制执行策略的 mod 的模型

256* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry):添加其他 mods 可以调用的方法,并发货其类型276* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry):添加其他 mods 可以调用的方法,并提供其类型

257 277 

258<h2 id="next-steps">278<h2 id="next-steps">

259 后续步骤279 后续步骤

260</h2>280</h2>

261 281 

262* [创建 mod](/docs/zh-CN/plugins/mods/create):构建一个计算工具调用、在微调器旁边显示计数并添加命令的 mod,并学习编辑和重新加载循环282* [创建 mod](/docs/zh-CN/plugins/mods/create):构建一个计算工具调用、在微调器旁边显示计数并添加命令的 mod,并学习编辑和重新加载循环

263* [在界面中绘制](/docs/zh-CN/plugins/mods/interface):窗格、提示上方的带状区域、按钮、文本字段和状态283* [在界面中绘制](/docs/zh-CN/plugins/mods/interface):窗格、输入框上方的带状区域、按钮、文本字段和状态

264* [对事件做出反应](/docs/zh-CN/plugins/mods/events):工具调用、提示、转折和 mods 运行的顺序284* [对事件做出反应](/docs/zh-CN/plugins/mods/events):工具调用、提示词、轮次和 mods 运行的顺序

265* [使用 mods API](/docs/zh-CN/plugins/mods/api):命令、工具、模型调用、计时器和文件285* [使用 mods API](/docs/zh-CN/plugins/mods/api):命令、工具、模型调用、计时器和文件

266* [测试 mod](/docs/zh-CN/plugins/mods/test):在没有会话的情况下运行的自动化测试286* [测试 mod](/docs/zh-CN/plugins/mods/test):在没有会话的情况下运行的自动化测试

267* [对 mod 进行故障排除](/docs/zh-CN/plugins/mods/troubleshoot):mod 什么都不做的原因和调试日志287* [对 mod 进行故障排除](/docs/zh-CN/plugins/mods/troubleshoot):mod 什么都不做的原因和调试日志

268* [为你的组织管理 mods](/docs/zh-CN/plugins/mods/admin):默认值、托管设置、查看 mod 和策略 mods288* [为您的组织管理 mods](/docs/zh-CN/plugins/mods/admin):默认值、托管设置、查看 mod 和策略 mods

269* [Mods 参考](/docs/zh-CN/plugins/mods/reference):每个事件、方法、元素和限制289* [Mods 参考](/docs/zh-CN/plugins/mods/reference):事件、方法、元素和限制

plugins/mods/reference.md +326 −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# mod 参考

6 

7> Claude Code mod 的完整参考:hook 模块布局、事件、mods API 方法、渲染位置、按使用入口划分的元素、限制和设置。

8 

9查阅 [mod](/docs/zh-CN/plugins/mods/overview) 可以处理的任何事件、可以调用的任何 mods API 方法,或可以在其中绘制的任何渲染位置,适用于 v2.1.287 起的 Claude Code CLI 和 Desktop 应用。每个条目给出名称和一行描述,如有相应的指南章节,还会链接到该章节。

10 

11<Note>

12 完整的参考是 Claude Code 的 [mod TypeScript 声明](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts),其中描述了每个事件、方法和元素,并附有示例。GitHub 上的副本可能比您安装的 Claude Code 版本更旧。两者不一致时,请以 [Claude Code 为您的版本写入的副本](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)为准。

13</Note>

14 

15<h2 id="files">

16 文件

17</h2>

18 

19mod 是一个包含以下文件的插件目录:

20 

21| 文件 | 必需 | 内容 |

22| :- | :- | :- |

23| `.claude-plugin/plugin.json` | 是 | 插件[清单](/docs/zh-CN/plugins/manifest-reference)。mod 不会添加任何必需字段。 |

24| `hooks/hooks.json` | 是 | `modules`:一个数组,包含一个指向 hook 模块的路径(相对于此文件),如 `"modules": ["./register.js"]`。也可以在 `hooks` 下包含[设置 hook](/docs/zh-CN/hooks)。 |

25| hook 模块,例如 [`hooks/register.js`](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) | 是 | mod 的入口点。导出 `register(on, options)`。文件名以 `.js`、`.mjs`、`.cjs`、`.jsx`、`.ts`、`.mts`、`.cts` 或 `.tsx` 结尾。是一个 ES 模块。 |

26| [`types/index.d.ts`](/docs/zh-CN/plugins/mods/interface#declare-the-values),由清单中的 `types` 指定 | 当 mod 使用 `$.state` 或向 mods API 添加命名空间时 | 声明 `PluginState` 值以及 mod 添加的任何命名空间 |

27| 名称以 `.test.ts` 或 `.test.tsx` 结尾的文件 | 否 | [`claude plugin test`](/docs/zh-CN/plugins/mods/test#write-a-test) 运行的测试 |

28 

29`register` 接收 `on` 和 `options`。`options` 包含清单所声明的 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 字段的值,并已填入默认值。

30 

31<h2 id="the-hook-function">

32 hook 函数

33</h2>

34 

35mod 通过在 `register` 内调用 `on` 来注册它的每个 hook(即事件处理程序)。`on` 接受事件名称、一个可选的[匹配器](/docs/zh-CN/plugins/mods/events#filter-which-events-a-hook-handles)(即对事件字段的过滤条件)以及 hook,如 `on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))`。`on` 返回一个注册对象,它只有一个方法 `.catch(handler)`,用于设置该 hook 的[错误处理程序](/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。

36 

37| 参数 | 说明 |

38| :- | :- |

39| [`$`](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event) | mods API:[mods API 方法](#mods-api-methods)中的所有方法。每次调用都要完整写出,先写命名空间再写方法,如 `$.fs.read('notes.md')`。 |

40| [`e`](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event) | 事件的输入,为深度冻结的纯数据。要更改它,请将副本传给 `next`。 |

41| [`next(e)`](/docs/zh-CN/plugins/mods/events#how-a-hook-handles-an-event) | 下一个处理程序,类似中间件。先运行此 hook 之后的 hook,再运行 Claude Code 的行为。解析为事件的结果。 |

42| [`next.signal`](/docs/zh-CN/plugins/mods/api#stop-background-work) | 一个 `AbortSignal`,在事件被放弃时中止 |

43| `next.origin` | 触发该事件者的 `{ plugin, tier }`。Claude Code 自身为 `{ plugin: 'engine', tier: 'core' }`。mod 的 `tier` 是它在 [mod 运行顺序](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in)中的优先级组:`prepend`、`user`、`append` 或 `builtin`。 |

44| `next.budget` | hook 的时间限制(以毫秒为单位):`next.budget.ms` 是总限制,`next.budget.remainingMs` 是当前剩余时间 |

45| `next.to(e, tier)` | 跳到后面的层级,即 `append`、`builtin` 或 `core`。`next.to(e, 'append')` 会跳过用户安装的 mod。只有 `prependPlugins` 或 `appendPlugins` 中的 mod 才能调用它。 |

46| `next.error`, `next.called` | 仅在 `.catch` 处理程序中可用。`next.error.kind` 为 `throw` 或 `timeout`,`next.error.message` 是错误文本;当失败的 hook 已调用 `next` 时,`next.called` 为 `true`。 |

47 

48<h2 id="events">

49 事件

50</h2>

51 

52事件按其涉及的内容分组,每个事件都列出了触发时机以及其上的 hook 可以返回的内容。`turn.step` 和 `process.spawn` 上的 hook 是异步生成器,其他 hook 是异步函数。

53 

54每个表格的最后一列使用简写。`next(e)` 原样传递事件。`next({ ...e, text })` 传递一个更改了指定字段的副本,如 `next({ ...e, text: e.text.trim() })`。对象表示不调用 `next` 而直接应答该事件,而 `reason` 之类的词代表您编写的字符串,如 `{ deny: 'Use the file tools.' }`。

55 

56<h3 id="tools">

57 工具

58</h3>

59 

60工具事件围绕 Claude 发出的每个工具调用触发,涵盖从 Claude 读取的描述到是否运行该调用的决定:

61 

62| 事件 | 触发时机 | hook 可以返回 |

63| :- | :- | :- |

64| [`tool.call`](/docs/zh-CN/plugins/mods/events#guard-or-change-a-tool-call) | 工具即将运行 | `next(e)`、`{ deny: reason }` 或 `{ result }` |

65| [`tool.check`](/docs/zh-CN/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code 在 `tool.call` 和 `PreToolUse` hook 之后决定是否允许运行某个工具调用。`next(e)` 解析为规则、权限模式和这些 hook 得出的决定。 | `{ decision }`,其值为 `allow`、`ask` 或 `deny` |

66| `tool.describe` | 每个工具一次,在其描述首次发送给 Claude 时 | `{ description }` |

67 

68<h3 id="prompts-and-what-claude-reads">

69 提示词以及 Claude 读取的内容

70</h3>

71 

72提示词事件涵盖用户输入的文本,以及 Claude Code 自行发送给 Claude 的文本,例如系统提示词和提醒:

73 

74| 事件 | 触发时机 | hook 可以返回 |

75| :- | :- | :- |

76| [`prompt.submit`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | 提交提示词时 | `next({ ...e, text })`、`next({ ...e, context })` 或 `{ drop: reason }` |

77| `prompt.fill`, `prompt.suggest` | 文本即将作为草稿或暗色建议进入输入框 | 更改了文本的 `next(e)` |

78| `prompt.edit` | 用户编辑输入框 | `next(e)` |

79| `prompt.compose` | Claude Code 渲染系统提示词 | `{ sections }`,一个按发送顺序排列的 `{ id, text, scope }` 列表 |

80| [`prompt.section`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | 系统提示词的每个命名部分一次。`e.name` 是该部分在 `prompt.compose` 中的 `id`。 | `{ text }`,或 `{ text: null }` 以省略该部分 |

81| [`prompt.context`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | 每个对话一次,用于随第一条消息发送的上下文 | `{ blocks }` |

82| `prompt.attachment` | Claude Code 为 Claude 添加一条它自己的消息,例如提醒。`e.type` 指明消息类型;对于类型声明中已声明的类型,`e.detail` 包含编写该文本所依据的事实。 | `{ text }`,或 `{ text: null }` 以省略它 |

83| [`skill.prompt`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | skill 的文本为 Claude 展开时 | `{ text }` |

84| `attribution.text` | Claude Code 撰写提交或 Pull Request 的署名文本时 | `{ text }` |

85 

86<h3 id="commands-and-configuration">

87 命令和配置

88</h3>

89 

90命令和配置事件在命令运行或被列出时,以及 `/config` 行显示或更改时触发:

91 

92| 事件 | 触发时机 | hook 可以返回 |

93| :- | :- | :- |

94| [`command.run`](/docs/zh-CN/plugins/mods/api#add-a-command) | 命令即将运行 | `{ text }`、`{}` 或 `next(e)` |

95| `command.describe` | 每个命令一次,用于命令列表 | `{ description, argumentHint, isHidden }` |

96| `config.set` | `/config` 行即将更改 | `next({ ...e, value })` 或 `{ deny: reason }` |

97| `config.describe` | 每个 `/config` 行一次 | `{ label, description, isHidden }` |

98 

99<h3 id="turns">

100 轮次

101</h3>

102 

103轮次事件从头到尾跟踪一次回答,包括其中每个发往模型的请求:

104 

105| 事件 | 触发时机 | hook 可以返回 |

106| :- | :- | :- |

107| [`turn.start`](/docs/zh-CN/plugins/mods/events#follow-a-turn) | 轮次开始 | `next(e)` |

108| [`turn.step`](/docs/zh-CN/plugins/mods/events#follow-a-turn) | 一个请求即将发往模型 | `yield* next(e)`,或 `next({ ...e, model })`、`next({ ...e, effort })` |

109| [`turn.complete`](/docs/zh-CN/plugins/mods/events#follow-a-turn) | 轮次结束 | `next(e)`,或 `{ text }` 以在回答下方显示一行 |

110 

111<h3 id="session">

112 会话

113</h3>

114 

115会话事件标记会话的开始、结束、压缩,以及与其他会话交换消息:

116 

117| 事件 | 触发时机 | hook 可以返回 |

118| :- | :- | :- |

119| [`session.start`](/docs/zh-CN/plugins/mods/api#add-a-command-or-a-tool) | 每个已加载的 mod 一次,在第一个提示词之前触发,并在该 mod 重新加载后再次触发。`/clear`、`/resume` 或 `/branch` 之后不会触发。 | `next(e)` |

120| `session.end` | 会话结束,或运行 `/clear`、`/resume` 或 `/branch` 时。`e.reason` 为 `clear`、`resume`、`logout`、`prompt_input_exit` 或 `other`。`/branch` 报告为 `resume`。 | `next(e)` |

121| `session.compact` | 对话即将被压缩 | `{ skip: reason }` |

122| [`session.receive`](/docs/zh-CN/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/zh-CN/plugins/mods/api#send-and-receive-messages-between-sessions) | 一条消息从另一个 Agent 或会话到达,或即将发往另一个 Agent 或会话。请参阅[在会话之间发送和接收消息](/docs/zh-CN/plugins/mods/api#send-and-receive-messages-between-sessions)。 | `receive` 返回 `{ consumed: reason }`,`send` 返回 `{ isDelivered: false, reason }` |

123| `session.append` | 对话保留的每一行一次,例如提示词、响应块、工具结果或通知,在存储之前触发 | `next({ ...e, message })` 以重写该行的 `content` |

124| `session.attach`, `session.detach` | 另一个应用连接到会话或从会话断开 | `next(e)` |

125| `session.measure` | 每个轮次之后,以及套餐限制的已用百分比发生变化时 | `next(e)` |

126 

127<h3 id="subagents">

128 子代理

129</h3>

130 

131子代理事件在向 Claude 提供某个子代理类型时,以及子代理即将启动时触发:

132 

133| 事件 | 触发时机 | hook 可以返回 |

134| :- | :- | :- |

135| `agent.offer` | 向 Claude 提供某个子代理类型 | `{ isOffered: false }` 以不提供它 |

136| `agent.spawn` | 子代理即将启动 | `{ model }` 或 `{ deny: reason }` |

137 

138<h3 id="interface">

139 界面

140</h3>

141 

142界面事件在 Claude Code 绘制渲染位置时,以及用户使用 mod 绘制的控件时触发。[在界面中绘制](/docs/zh-CN/plugins/mods/interface)展示了 `ui.render` hook 返回的内容:

143 

144| 事件 | 触发时机 |

145| :- | :- |

146| [`ui.render`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | 某个[渲染位置](#render-sites)即将被绘制 |

147| `ui.resolve` | mod 加载时,每个应用、渲染位置和 mod 各一次。其结果是 `$.ui.resolve(e)` 读取的元素表。 |

148| [`ui.press`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing), [`ui.input`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing), [`ui.select`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | mod 绘制的 `Button`、`Input` 或 `Select` 被使用 |

149| `ui.focus`, `ui.scroll` | 获得焦点的控件,或窗格或横栏的滚动位置即将更改 |

150| `ui.close` | 窗格即将关闭。`e.id` 是该窗格,`e.origin.kind` 为 `plugin`、`person` 或 `unload`。 |

151| [`ui.message`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `Client` 元素向其 mod 发送数据 |

152 

153<h3 id="other-mods">

154 其他 mod

155</h3>

156 

157这些事件让 mod 在其他 mod 加载时对其进行操作,以拒绝某个 mod 或更改它收到的 mods API:

158 

159| 事件 | 触发时机 | hook 可以返回 |

160| :- | :- | :- |

161| [`plugin.register`](/docs/zh-CN/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | hook 模块即将加载。`e.uses` 列出它的事件、mods API 调用、环境变量和状态,与 `claude plugin validate` 打印的内容一致。每个调用都不带 `$.` 前缀,如 `fs.read`。 | `{ refuse: reason }` |

162| `engine.create` | 正在为此 mod 构建 mods API | 更改后的 mods API,用于添加或隐藏某个命名空间 |

163 

164<h3 id="telemetry">

165 遥测

166</h3>

167 

168遥测事件针对 Claude Code 记录的使用情况记录触发:

169 

170| 事件 | 触发时机 | hook 可以返回 |

171| :- | :- | :- |

172| `telemetry.log`, `telemetry.mark` | 一条遥测记录即将被记录,或标记某项功能的一次使用。在您安装的 mod 中,请为遥测 hook 设置过滤条件 `{ to: 'collector' }`,如 `on('telemetry.log', { to: 'collector' }, hook)`。如果没有该过滤条件,mod 将无法通过 `claude plugin validate`。`*` 不匹配这些事件。 | `next(e)` 或 `{ deny: reason }` |

173 

174<h3 id="settings-hook-events">

175 设置 hook 事件

176</h3>

177 

178每个[设置 hook 事件](/docs/zh-CN/hooks#hook-events)都是一个名为 `classic.<Event>` 的事件,如 `classic.Stop` 或 `classic.PostToolUse`。`e` 是该 hook 的 stdin JSON。

179 

180<h3 id="mods-api-calls">

181 mods API 调用

182</h3>

183 

184每个 [mods API 方法](#mods-api-methods)也是一个事件,以其命名空间和方法命名,如 `fs.read`、`model.complete` 或 `ui.open`。其上的 hook 会拦截在它之后运行的 mod 发出的调用,并可以返回 `next(e)`、`{ deny: reason }` 或 `{ value }`。

185 

186<h2 id="mods-api-methods">

187 mods API 方法

188</h2>

189 

190mods API 是每个 hook 接收的 `$` 参数。它的方法按命名空间分组,例如 `$.ui`。此表按名称列出每个命名空间的方法,因此 `$.ui` 行中的 `open` 就是调用 `$.ui.open(...)`。指南展示了常用方法的用法,而[您的构建版本的类型](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)记录了每个方法并附有示例。

191 

192| 命名空间 | 方法 |

193| :- | :- |

194| `$.plugin` | `name`、`root`:此插件的名称和目录 |

195| [`$.ui`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `resolve`、`invalidate`、`open`、`close`、`panes`、`focus`、`scroll`、`toast`、`status`、`log`、`notice`、`ask`、`copy`、`blit` |

196| [`$.command`](/docs/zh-CN/plugins/mods/api#add-a-command) | `register`、`run`、`list` |

197| [`$.tool`](/docs/zh-CN/plugins/mods/api#add-a-tool) | `register`、`call`、`check`、`list` |

198| `$.agent` | `register`、`spawn`、`list` |

199| [`$.model`](/docs/zh-CN/plugins/mods/api#call-a-model) | `complete`、`fork`、`classify` |

200| [`$.prompt`](/docs/zh-CN/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`、`read`、`fill`、`suggest`、`compose`。Claude 读取来自 `submit({ text })` 的文本时,前面会有一句指明您的 mod 为发送者的话。`submit({ text, asUser: true })` 将文本作为用户自己的话发送,不带那句话。 |

201| `$.turn` | `abort` |

202| [`$.session`](/docs/zh-CN/plugins/mods/api#send-and-receive-messages-between-sessions) | `messages`、`cwd`、`root`、`model`、`turns`、`id`、`repo`、`surfaces`、`usage`、`version`、`compact`、`send`、`append`、`authorize`。`usage()` 返回 `{ startedAt, context, rateLimits, cost }`:`context` 包含 `tokens`、`window` 和 `percent`,`rateLimits` 是由 `{ kind, percentUsed, resetsAt }` 组成的列表。 |

203| `$.config` | `list`、`set` |

204| [`$.settings`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `read` |

205| [`$.env`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `get`、`set` |

206| [`$.fs`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `read`、`write`、`list`、`exists`、`stat`、`ancestors`。`write` 不是原子操作:它会原地替换文件内容,因此另一个进程可能读到只写了一部分的文件。请将多个会话都会更改的数据保存在 `$.store` 中。 |

207| [`$.store`](/docs/zh-CN/plugins/mods/interface#keep-state) | `get`、`set`、`delete`、`keys`。一个由本机所有会话共享的键值存储。请参阅[从多个会话保存](/docs/zh-CN/plugins/mods/interface#save-from-more-than-one-session)。 |

208| [`$.state`](/docs/zh-CN/plugins/mods/interface#keep-a-value-in-\$-state) | 响应式状态:`get`、`set`,以及从 `claude-code` 导入的辅助函数 `atom`、`read`、`update`、`derive` 和 `memberOf` |

209| [`$.clock`](/docs/zh-CN/plugins/mods/api#run-work-in-the-background) | `now`、`sleep`、`after`、`every` |

210| [`$.http`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `fetch` |

211| [`$.process`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `run`、`spawn` |

212| [`$.mcp`](/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network) | `call`、`connect`。`connect(server)` 连接您自己的插件清单中列出的 MCP 服务器。 |

213| `$.audio` | `play`、`speak` |

214| `$.telemetry` | `log`、`mark`。仅当由 Claude Code 或内置 mod 发出调用时,才会发送记录。 |

215 

216<h2 id="render-sites">

217 渲染位置

218</h2>

219 

220渲染位置是 Claude Code 界面中的扩展点。每一行是 `ui.render` hook 中 `e.component` 的一个值,并列出了 `e.props` 的字段以及渲染它的应用。`e.surface` 为 `terminal` 或 `desktop`。[更改 Claude Code 已绘制的内容](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws)展示了 hook 在某个位置可以做什么,并为每种选择提供了示例。

221 

222| 位置 | `e.props` | `e.requestId` | 渲染于 |

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

224| [`Pane`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | 窗格的 `id` | 终端、Desktop |

225| [`AbovePrompt`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |

226| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 消息 id | 终端、Desktop |

227| `AssistantMessage` | 回复的文本 | 消息 id | 终端、Desktop |

228| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop |

229| `CommandOutput` | `command`、`text` | 消息 id | 终端、Desktop |

230| [`AskUserQuestion`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | 问题和选项 | 工具调用 id | 终端、Desktop |

231| `ToolProgress` | `kind` | 工具调用 id | 终端 |

232| [`Spinner`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | Agent id | 终端、Desktop |

233| `TurnDuration` | `word`、`durationMs` | 消息 id | 终端 |

234| `InfoNotice` | `text`、`command` | 消息 id | 终端 |

235| `SessionMode` | `modes` | 单一实例 | 终端、Desktop |

236| `PromptHint` | `isDraft`、`isWorking`、`hint` | 单一实例 | 终端、Desktop |

237 

238`e.viewport` 包含 `columns`、`rows` 和 `isFullscreen`。在应用测量其窗口之前,它不存在。它的 `rows` 是整个窗口的高度,而不是您的窗格的高度。

239 

240要使树适配其所在位置,请在 hook 中读取以下 prop:

241 

242* **`Pane` 或横栏的宽度**:按 `e.props.bodyColumns` 绘制

243* **会话记录旁的 `Pane` 的高度**:当 `e.props.placement` 为 `'dock'` 时,`e.props.scroll.bodyRows` 是该窗格拥有的行数

244* **输入框上方的 `Pane` 的高度**:当 `e.props.placement` 为 `'inline'` 时,窗格会随您的树增高,直到达到上限,且 `bodyRows` 只计算当前显示的行。[`$.ui.open` 的 `rows` 字段](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)可请求不同的上限。

245 

246比窗格更高的树会整体滚动。

247 

248<h2 id="elements">

249 元素

250</h2>

251 

252元素是 `ui.render` hook 所返回的树的构建块,您可以从 `$.ui.resolve(e)` 获取它们。[用元素构建树](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements)展示了常用元素以及终端如何绘制它们,[界面图库](/docs/zh-CN/plugins/mods/gallery)提供了大多数元素的截图。对勾表示该应用可以绘制该元素。

253 

254| 元素 | 主要 prop | 终端 | Desktop |

255| :- | :- | :-: | :-: |

256| [`Box`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、`gap`、`padding`、`margin`、`width`、`height`、`borderStyle`、`backgroundColor`、`position`、`hover` | ✓ | ✓ |

257| [`Text`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、`bold`、`italic`、`underline`、`dimColor`、`inverse`、`wrap` | ✓ | ✓ |

258| [`Button`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ |

259| `Link` | `href`、`label` | ✓ | ✓ |

260| `Code` | 代码,最多 10,000 个字符 | ✓ | ✓ |

261| `Markdown` | `text`(最多 10,000 个字符)、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ |

262| [`Input`](/docs/zh-CN/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`、`label`、`placeholder`、`value`、`submitLabel`、`onSubmit`、`onInput`、`autoFocus` | ✓ | ✓ |

263| `Select` | `key`、`label`、`options`、`value`、`onSelect`、`autoFocus` | ✓ | ✓ |

264| `Svg` | 一个 SVG 文档,最多 131,072 个字符 | | ✓ |

265| [`Client`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `module`、`key` | ✓ | ✓ |

266| [`Raster`](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`、`columns`(最多 512)、`rows`(最多 256)、`cells`。请参阅[绘制彩色单元格网格](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells)。 | ✓ | |

267| `Image` | 最多 2 MiB 的 PNG 或 RGBA 字节,或文件路径 | ✓ | |

268 

269更多 `Button` 规则:`action` 指定 Claude Code 自身的某个[快捷键操作](/docs/zh-CN/keybindings),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮。当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发。当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。

270 

271<h2 id="limits">

272 限制

273</h2>

274 

275hook 和 mods API 调用受时间和大小限制。Claude Code 会跳过超出时间限制的 hook,并拒绝超出大小限制的调用。

276 

277| 限制 | 值 |

278| :- | :- |

279| 单个事件中 hook 自身的执行时间,不计入在 `next` 内或在除 `$.clock.sleep` 之外的 mods API 调用中花费的时间 | 10 秒 |

280| `.catch` 处理程序的执行时间 | 1 秒 |

281| 所有 `session.end` hook 合计 | 1.5 秒 |

282| `$.process.run` 超时时间 | 默认 30 秒,最长 10 分钟 |

283| `$.model.complete` `maxTokens` | 默认 1024,最多 64,000 或模型的输出上限 |

284| `$.fs.read` 和 `$.fs.write` | 单个文件 4 MiB |

285| `Text` 的单个字符串子元素 | 10,000 个字符 |

286| `$.store` | JSON 总计 4 MiB |

287| `$.session.messages()` | 最新的 4,096 个条目 |

288| `$.ui.invalidate('ui.render')` 重绘 | 限制为每秒 10 次;在终端中,对于可见窗格、展开区域以及输入框下方的提示行,限制为每秒 30 次。更早到达的调用会被合并。 |

289| `$.ui.toast` | 显示 4 秒,除非您传入 `{ timeoutMs }` |

290| 非用户主动打开的窗格 | 从终端第 144 列起放置;用户打开过一次后,从第 110 列起放置 |

291| 命令、工具、子代理类型和窗格名称 | 字母、数字、`_` 和 `-`,最多 64 个字符 |

292| 单个 `claude plugin test` 测试 | 5 秒,除非该测试设置了 `timeoutMs` |

293 

294<h2 id="settings-and-environment-variables">

295 设置和环境变量

296</h2>

297 

298以下是影响 mod 的设置和环境变量。“位置”列说明每一项从哪个设置文件或环境中读取:

299 

300| 名称 | 位置 | 作用 |

301| :- | :- | :- |

302| `CLAUDE_CODE_PLUGIN_DIRS` | 环境变量,或 `~/.claude/settings.json` 中的 `env` | 要像 `--plugin-dir` 那样加载的插件目录,用于无法传递标志的应用。以 `:` 分隔的绝对路径,在 Windows 上以 `;` 分隔。 |

303| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 环境变量 | `1` 使长时间运行的非交互式会话在保存时重新加载 `--plugin-dir` mod |

304| `prependPlugins`, `appendPlugins` | 托管设置。仅在没有托管设置的机器上、且用户未使用 Team 或 Enterprise 套餐登录时,才可在用户设置中使用。 | 插件 id 列表,例如 `acme-guard@acme-tools`。`prependPlugins` 中的 mod 在用户安装的每个 mod 之前运行,`appendPlugins` 中的 mod 在之后运行,均按列出的顺序。请参阅 [mod 运行顺序](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in)。 |

305| `allowManagedModsOnly` | 托管设置,作为[内置守卫的选项](/docs/zh-CN/plugins/mods/admin#set-options-on-the-built-in-guard) | 只加载[算作您组织的](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) mod 以及 Claude Code 内置的 mod。用户的设置 hook 会继续运行。 |

306| `allowModsToOverrideDenyRules` | 托管设置,作为[内置守卫的选项](/docs/zh-CN/plugins/mods/admin#set-options-on-the-built-in-guard) | 允许用户安装的 mod 批准被 `deny` 规则拒绝的工具调用 |

307| `allowManagedHooksOnly` | 托管设置 | 阻止不属于您组织的 hook 和已安装的 mod。请参阅[哪些会继续运行](/docs/zh-CN/settings-reference#what-runs-under-allowmanagedhooksonly)。 |

308| `disableAllHooks` | 任何设置文件 | 在托管设置中,来自已安装插件的任何 mod 或 hook 都不会运行。在您自己的设置中,您组织管理的内容会继续运行。请参阅 [`disableAllHooks`](/docs/zh-CN/settings-reference#disableallhooks)。 |

309| `disableSideloadFlags` | 托管设置 | 在启动时拒绝 `--plugin-dir` 和 `--plugin-url` |

310| `pluginConfigs` | 用户设置或托管设置 | 保存 mod 的 `userConfig` 值,以插件 id 为键,例如 `acme-guard@acme-tools`;对于使用 `--plugin-dir` 加载的 mod,则以其名称加 `@inline` 为键,例如 `first-mod@inline` |

311 

312`sec-default@builtin` 是 Claude Code 内置的守卫,在 `/plugin` 和调试日志中显示为 `cc-plugin-sec-default`。在有托管设置的机器上,或对于使用 Team 或 Enterprise 套餐登录的用户,它会在用户安装的每个 mod 之前加载。如果设置了托管的 `prependPlugins`,则只有当该列表指定了该守卫时它才会加载,并位于列出的位置。其源代码位于 [Claude Code 仓库的 `mods/sec-default` 目录](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)中。

313 

314<h2 id="commands">

315 命令

316</h2>

317 

318这些命令和标志用于加载、检查和测试 mod。`claude` 命令在您的 shell 中运行,`/` 命令在 Claude Code 输入框中运行。表中的 `<directory>` 代表您输入的路径,如 `claude plugin validate ./first-mod`。方括号表示可选参数。

319 

320| 命令 | 作用 |

321| :- | :- |

322| [`/plugin`](/docs/zh-CN/plugins/mods/overview#see-which-mods-a-session-loaded) | 当有非内置的 mod 加载时,在其标签页下方显示一行,例如 `1 mod active · first-mod` |

323| [`claude plugin validate <directory>`](/docs/zh-CN/plugins/mods/create#check-what-claude-code-reads-from-your-mod) | 读取插件的清单和 hook 模块,并报告错误、它处理的事件以及它发出的 mods API 调用。`--strict` 将警告视为错误,`--json` 打印机器可读的报告。 |

324| [`claude plugin test [directory]`](/docs/zh-CN/plugins/mods/test#write-a-test) | 运行该目录(如果未指定目录,则为当前目录)下名称以 `.test.ts` 或 `.test.tsx` 结尾的每个文件。有测试失败时以状态 1 退出。 |

325| [`claude --plugin-dir <directory>`](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) | 为一个会话加载插件目录,并在您保存时重新加载其 hook 模块。重复该标志可加载多个目录。 |

326| `/reload-plugins` | 在您运行时重新加载插件 |

Details

6 6 

7> 为 Claude Code mod 编写自动化测试,该测试可以触发事件、存根 Claude Code 的答案、按下按钮,无需会话、登录或网络。7> 为 Claude Code mod 编写自动化测试,该测试可以触发事件、存根 Claude Code 的答案、按下按钮,无需会话、登录或网络。

8 8 

9您可以为 mod 编写自动化测试,并使用 [`claude plugin test`](/docs/zh-CN/plugins/mods/reference#commands) 从您的 shell 运行它们。测试会触发您的 hooks 处理的事件并检查 hooks 做了什么,这样您可以在问题到达会话之前捕获它。第一个示例测试来自 [Create a mod](/docs/zh-CN/plugins/mods/create) 的 mod。9您可以为 mod 编写自动化测试,并使用 [`claude plugin test`](/docs/zh-CN/plugins/mods/reference#commands) 从您的 shell 运行它们。测试会触发您的 hook 处理的事件并检查 hook 做了什么,这样您可以在问题到达会话之前捕获它。第一个示例测试来自 [创建 mod](/docs/zh-CN/plugins/mods/create) 的 mod。

10 10 

11<h2 id="write-a-test">11<h2 id="write-a-test">

12 编写测试12 编写测试


25 // Answer each tool call in Claude Code's place, so no tool runs25 // Answer each tool call in Claude Code's place, so no tool runs

26 on('tool.call', () => ({ result: 'ok' }))26 on('tool.call', () => ({ result: 'ok' }))

27 27 

28 // Raise two tool calls, which the mod's tool.call hook counts28 // Fire two tool calls, which the mod's tool.call hook counts

29 await $.tool.call({ tool: 'Bash', command: 'ls' })29 await $.tool.call({ tool: 'Bash', command: 'ls' })

30 await $.tool.call({ tool: 'Read', file_path: 'README.md' })30 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

31 31 


105 105 

106测试通过是因为 hook 的 `reply` 是 `value` 下的对象,其 `text` 以 `PASS` 开头。要检查另一个分支,添加第二个测试,其 stub 返回以 `FAIL` 开头的 `text`,并期望 `Try again`。106测试通过是因为 hook 的 `reply` 是 `value` 下的对象,其 `text` 以 `PASS` 开头。要检查另一个分支,添加第二个测试,其 stub 返回以 `FAIL` 开头的 `text`,并期望 `Try again`。

107 107 

108mods API 调用的 stub 返回一个带有 `value` 字段的对象,该字段保存调用在您的 mod 中解析的内容:`{ value: 7 }` 使 `$.store.get` 解析为 `7`。Claude Code 事件(例如 [`turn.step`](/docs/zh-CN/plugins/mods/reference#turns) 或 `tool.call`)的 stub 返回该事件自己的结果,例如 `{ result: 'ok' }`。`$.session.send` 和 `$.prompt.fill` 也采用其事件的结果,如表所示。[查看 stub 返回的内容](#look-up-what-a-stub-returns) 显示每个常见名称采用的形式。两个错误意味着 stub 是错误的或缺失的。失败的测试的输出包括一个以 `the engine reported:` 开头的块,每个错误都出现在那里:108mods API 调用的 stub 返回一个带有 `value` 字段的对象,该字段保存调用在您的 mod 中解析的内容:`{ value: 7 }` 使 `$.store.get` 解析为 `7`。Claude Code 事件(例如 [`turn.step`](/docs/zh-CN/plugins/mods/reference#turns) 或 `tool.call`)的 stub 返回该事件自己的结果,例如 `{ result: 'ok' }`。`$.session.send` 和 `$.prompt.fill` 也采用其事件的结果,如表所示。[查看 stub 返回的内容](#look-up-what-a-stub-returns) 显示每个常见名称采用的形式。以下错误意味着 stub 是错误的或缺失的。失败的测试的输出包括一个以 `the engine reported:` 开头的块,每个错误都出现在那里:

109 109 

110* `returned neither { value } nor { deny }`:mods API 调用的 stub 返回了一个裸值110* `returned neither { value } nor { deny }`:mods API 调用的 stub 返回了一个裸值

111* `no implementation for` 后跟一个名称:您的 mod 进行了该调用,没有 stub 回答它111* `no implementation for` 后跟一个名称:您的 mod 进行了该调用,没有 stub 回答它


127 on('session.start', () => ({ cwd: '/work' }))127 on('session.start', () => ({ cwd: '/work' }))

128 // Answer the $.command.register call your hook makes128 // Answer the $.command.register call your hook makes

129 on('command.register', () => ({ value: undefined }))129 on('command.register', () => ({ value: undefined }))

130 // Raise the event, which runs your session.start hook130 // Fire the event, which runs your session.start hook

131 await $.session.start({ surface: 'terminal', isInteractive: true, cwd: '/work' })131 await $.session.start({ surface: 'terminal', isInteractive: true, cwd: '/work' })

132 ```132 ```

133 133 


152 return { turnId: e.turnId, index: e.index, answer: 'ok', toolUses: [], stopReason: 'end_turn', usage: null }152 return { turnId: e.turnId, index: e.index, answer: 'ok', toolUses: [], stopReason: 'end_turn', usage: null }

153 })153 })

154 154 

155 // Raise one request to the model, which runs your turn.step hook155 // Fire one request to the model, which runs your turn.step hook

156 const stream = $.turn.step({ turnId: 't', index: 0, model: 'claude-test', messageCount: 1 })156 const stream = $.turn.step({ turnId: 't', index: 0, model: 'claude-test', messageCount: 1 })

157 // Read every piece until the stream says it's done157 // Read every piece until the stream says it's done

158 let step = await stream.next()158 let step = await stream.next()


340 // Answer the event after your hook passes it on with next(e)340 // Answer the event after your hook passes it on with next(e)

341 on('classic.SessionStart', () => ({}))341 on('classic.SessionStart', () => ({}))

342 342 

343 // Raise the event that fires after /clear, which runs your hook343 // Fire the event that follows /clear, which runs your hook

344 await $.classic.SessionStart({ source: 'clear' })344 await $.classic.SessionStart({ source: 'clear' })

345 345 

346 const ui = await $.ui.mount({ ...PANE, surface: 'terminal' })346 const ui = await $.ui.mount({ ...PANE, surface: 'terminal' })


353当您的 `classic.SessionStart` hook 在窗格绘制之前将存储的 `7` 复制到 `$.state` 时,测试通过。如果您的模块中没有该 hook,窗格绘制 `Count: 0`,`find` 返回 `undefined`,测试在 `toBeDefined` 处失败。353当您的 `classic.SessionStart` hook 在窗格绘制之前将存储的 `7` 复制到 `$.state` 时,测试通过。如果您的模块中没有该 hook,窗格绘制 `Count: 0`,`find` 返回 `undefined`,测试在 `toBeDefined` 处失败。

354 354 

355<h2 id="test-a-mod-that-judges-other-mods">355<h2 id="test-a-mod-that-judges-other-mods">

356 测试判断其他 mods 的 mod356 测试 policy mod

357</h2>357</h2>

358 358 

359您的组织在 [`prependPlugins`](/docs/zh-CN/plugins/mods/admin) 中列出的 mod 可以在另一个 mod 加载之前拒绝它。要测试一个,请设置您的 mod 的层级并给测试第二个 mod,供您的 mod 接受或拒绝:359您的组织在 [`prependPlugins`](/docs/zh-CN/plugins/mods/admin) 中列出的 mod 可以在另一个 mod 加载之前拒绝它。要测试一个,请设置您的 mod 的层级并给测试第二个 mod,供您的 mod 接受或拒绝:

Details

12 找出为什么 mod 不起作用12 找出为什么 mod 不起作用

13</h2>13</h2>

14 14 

15当 mod 不起作用时,两项检查可以找到原因:Claude Code 从 mod 文件读取的内容,以及它在跳过某些内容时写入的行。对于第一项,在您的 shell 中运行 [`claude plugin validate`](/docs/zh-CN/plugins/mods/create#check-what-claude-code-reads-from-your-mod),使用 mod 的目录,如 `claude plugin validate ./first-mod`。它可以捕获拼写错误的事件、错误的清单和 Claude Code 无法读取的模块,而无需启动会话。15当 mod 不起作用时,请检查 Claude Code 从 mod 文件读取的内容,以及它在跳过某些内容时写入的行。对于第一项,在您的 shell 中运行 [`claude plugin validate`](/docs/zh-CN/plugins/mods/create#check-what-claude-code-reads-from-your-mod),使用 mod 的目录,如 `claude plugin validate ./first-mod`。它可以捕获拼写错误的事件、错误的清单和 Claude Code 无法读取的模块,而无需启动会话。

16 16 

17当模块未加载、hook 被跳过或另一个 mod 拒绝您的 mod 时,Claude Code 会写入一行,其中命名您的 mod。您读取该行的位置取决于会话:17当模块未加载、hook 被跳过或另一个 mod 拒绝您的 mod 时,Claude Code 会写入一行,其中命名您的 mod。您读取该行的位置取决于会话:

18 18 


56 56 

57读取冒号后的原因。[拒绝消息](#refusal-messages) 部分列出了每一个。如果日志中没有这样的行,请逐一处理此组中的其他条目。57读取冒号后的原因。[拒绝消息](#refusal-messages) 部分列出了每一个。如果日志中没有这样的行,请逐一处理此组中的其他条目。

58 58 

59某些设置会阻止 mod,同时让其插件的其余部分继续工作。[启用或关闭 mod](/docs/zh-CN/plugins/mods/overview#turn-mods-on-or-off) 列出了这些设置。

60 

59<h3 id="a-claude-p-run-prints-hooks-module-not-loaded">61<h3 id="a-claude-p-run-prints-hooks-module-not-loaded">

60 `claude -p` 运行打印 `hooks module not loaded`62 `claude -p` 运行打印 `hooks module not loaded`

61</h3>63</h3>


110 `options do not fit plugin.json userConfig`112 `options do not fit plugin.json userConfig`

111</h3>113</h3>

112 114 

113该行以 mod 的名称开头,然后是 `hooks module did not load: options do not fit plugin.json userConfig:` 和一个原因。选项不适合其 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 字段,例如高于字段 `max` 的数字,或必需字段没有值。115该行以 mod 的名称开头,然后是 `hooks module did not load: options do not fit plugin.json userConfig:` 和一个原因。某个选项未通过其 [`userConfig`](/docs/zh-CN/plugins/components#user-configuration) 字段的验证,例如高于字段 `max` 的数字,或必需字段没有值。

114 116 

115设置或更改值。该行的末尾命名其在 `settings.json` 中的 `pluginConfigs` 条目。117设置或更改值。该行的末尾命名其在 `settings.json` 中的 `pluginConfigs` 条目。

116 118 


140 `hook skipped`142 `hook skipped`

141</h3>143</h3>

142 144 

143该行命名 mod 和事件,然后说 `hook skipped:` 和一个原因,如 `first-mod: tool.call hook skipped: threw Error: boom`。hook 抛出了异常、运行超过了其 [10 秒时间限制](/docs/zh-CN/plugins/mods/reference#limits),或返回了错误形状的结果。该行对每个事件和失败类型出现一次,直到 mod 重新加载。145该行命名 mod 和事件,然后说 `hook skipped:` 和一个原因,如 `first-mod: tool.call hook skipped: threw Error: boom`。hook 抛出了异常、运行超过了其[时间限制](/docs/zh-CN/plugins/mods/reference#limits),或返回了错误形状的结果。该行对每个事件和失败类型出现一次,直到 mod 重新加载。

144 146 

145修复错误。调试日志对每次出现都有一行。147修复错误。调试日志对每次出现都有一行。

146 148 


207 209 

208读取该行上的原因。常见原因是元素不接受的 prop 和应用没有的元素。210读取该行上的原因。常见原因是元素不接受的 prop 和应用没有的元素。

209 211 

210<h3 id="ui-open-runs-and-no-pane-appears">212<h3 id="$-ui-open-runs-and-no-pane-appears">

211 `$.ui.open` 运行且没有窗格出现213 `$.ui.open` 运行且没有窗格出现

212</h3>214</h3>

213 215 

214调用不是来自用户做的事情,终端宽度小于 144 列。216调用不是来自用户做的事情,且终端宽度小于[该窗格所需的宽度](/docs/zh-CN/plugins/mods/interface#when-a-pane-waits-for-a-wider-terminal)。

215 217 

216从命令或按钮打开窗格,或检查调用的 `isPlaced` 结果。请参阅 [在正确的时间打开窗格](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)。218从命令或按钮打开窗格,或检查调用的 `isPlaced` 结果。请参阅 [在正确的时间打开窗格](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)。

217 219 


277tail -f ./mod-debug.log | grep first-mod279tail -f ./mod-debug.log | grep first-mod

278```280```

279 281 

280已加载的 mod 有一行命名它并列出它 hooks 的事件。使用 `--plugin-dir` 加载的 mod 出现在其名称后跟 `@inline` 下:282已加载的 mod 有一行命名它并列出它处理的事件。使用 `--plugin-dir` 加载的 mod 出现在其名称后跟 `@inline` 下:

281 283 

282```text theme={null}284```text theme={null}

283hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render285hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render

Details

9Claude Code 插件是一个目录,包含 skills、agents、hooks、MCP 服务器或其他组件,Claude Code 将其作为一个单元进行安装和加载。大多数插件来自市场,市场是一个目录,列出了插件及其获取位置。您也可以从某人提供给您的文件夹中加载插件,或者[构建您自己的插件](/docs/zh-CN/plugins/create)。9Claude Code 插件是一个目录,包含 skills、agents、hooks、MCP 服务器或其他组件,Claude Code 将其作为一个单元进行安装和加载。大多数插件来自市场,市场是一个目录,列出了插件及其获取位置。您也可以从某人提供给您的文件夹中加载插件,或者[构建您自己的插件](/docs/zh-CN/plugins/create)。

10 10 

11<Note>11<Note>

12 如果以下任一情况适用于您,请改为在 claude.com 上开始:12 以下情况在其他页面中介绍:

13 13 

14 * **您使用 claude.ai 聊天或 Cowork,而不是 Claude Code**:请参阅 [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)14 * **您使用 claude.ai 聊天或 Cowork,而不是 Claude Code**:请参阅 [claude.ai 和 Cowork 中的插件](https://claude.com/docs/plugins/overview)

15 * **您构建了 MCP 服务器并希望将其添加到 Anthropic 的目录中**:请参阅[发布到目录](https://claude.com/docs/directory/publish)15 * **您构建了 MCP 服务器并希望将其添加到 Anthropic 的目录中**:请参阅[发布到目录](https://claude.com/docs/directory/publish)

16 * **您希望在 VS Code 或 JetBrains IDE 中使用 Claude Code**:那是 VS Code 扩展或 JetBrains 插件,而不是 Claude Code 插件。请参阅[在 VS Code 中使用 Claude Code](/docs/zh-CN/vs-code) 或 [JetBrains IDE](/docs/zh-CN/jetbrains)

16</Note>17</Note>

17 18 

18要立即尝试插件,请在 Claude Code 终端会话中运行 `/plugin`,并从**发现**选项卡安装一个插件,该选项卡列出了来自您的市场的插件。从那里:19要立即尝试插件,请在 Claude Code 终端会话中运行 `/plugin`,并从**发现**选项卡安装一个插件,该选项卡列出了来自您的市场的插件。从那里:

Details

37 37 

38Claude Code 的[权限规则](/docs/zh-CN/permissions)和[沙箱](/docs/zh-CN/sandboxing)涵盖 Claude 进行的工具调用,而不是插件自己运行的代码:38Claude Code 的[权限规则](/docs/zh-CN/permissions)和[沙箱](/docs/zh-CN/sandboxing)涵盖 Claude 进行的工具调用,而不是插件自己运行的代码:

39 39 

40* **Hooks 和服务器进程**:命令 hooks 使用您的完整用户权限执行 shell 命令。Claude Code 在沙箱外运行 hooks 和 MCP 服务器。40* **Hooks 和服务器进程**:命令 hooks 使用您的完整用户权限执行 shell 命令。Claude Code 在沙箱外运行 hook、MCP 服务器以及 [mod](/docs/zh-CN/plugins/mods/overview#what-a-mod-can-reach) 启动的进程。

41* **Claude 的工具调用**:对插件的 MCP 工具之一的调用,以及运行插件 `bin/` 中的可执行文件的 Bash 命令,都是工具调用,所以您的权限规则适用于它们。关于 mod 对工具调用可以做什么,请参阅[决定是否信任 mod](/docs/zh-CN/plugins/mods/overview#decide-whether-to-trust-a-mod)。41* **Claude 的工具调用**:对插件的 MCP 工具之一的调用,以及运行插件 `bin/` 中的可执行文件的 Bash 命令,都是工具调用,所以您的权限规则适用于它们。关于 mod 对工具调用可以做什么,请参阅[决定是否信任 mod](/docs/zh-CN/plugins/mods/overview#decide-whether-to-trust-a-mod)。

42 42 

43安装插件也会启用它,除非其清单或市场条目设置了 [`defaultEnabled: false`](/docs/zh-CN/plugins/install#choose-an-install-scope),并且您自己没有启用它。43安装插件也会启用它,除非其清单或市场条目设置了 [`defaultEnabled: false`](/docs/zh-CN/plugins/install#choose-an-install-scope),并且您自己没有启用它。

Details

460* **您发布插件**:重新计算 URL 提供的确切文件的摘要,并更新市场条目中的 `sha256`。使用 `shasum -a 256 my-plugin.zip`,或在 PowerShell 中使用 `Get-FileHash -Algorithm SHA256 my-plugin.zip`460* **您发布插件**:重新计算 URL 提供的确切文件的摘要,并更新市场条目中的 `sha256`。使用 `shasum -a 256 my-plugin.zip`,或在 PowerShell 中使用 `Get-FileHash -Algorithm SHA256 my-plugin.zip`

461* **您安装插件**:在会话中运行 `/plugin marketplace update <name>` 以刷新目录以防条目已更正,然后重试安装。如果刷新后摘要仍然不同,请在安装前询问市场所有者他们引脚了哪个文件461* **您安装插件**:在会话中运行 `/plugin marketplace update <name>` 以刷新目录以防条目已更正,然后重试安装。如果刷新后摘要仍然不同,请在安装前询问市场所有者他们引脚了哪个文件

462 462 

463<h3 id="an-npm-plugin-source-must-name-a-registry-package">

464 `An npm plugin source must name a registry package`

465</h3>

466 

467市场条目使用 [`npm` 源](/docs/zh-CN/plugins/marketplace-reference#npm-plugin-source) 的插件安装、更新或加载失败,且消息中包含这句话。Claude Code 在获取任何内容之前检查了该条目的 `package` 值并拒绝了它。消息会指出该值和原因:

468 

469```text theme={null}

470"github:acme/formatter" was not installed: it is not an http or https link. An npm plugin source must name a registry package (name or name@version) or link to a tarball file. For a plugin in a git repository, use a "github", "url" or "git-subdir" source.

471```

472 

473市场的所有者必须更改该条目:

474 

475* **如果那是您**:将 `package` 更改为 [npm 插件源参考](/docs/zh-CN/plugins/marketplace-reference#npm-plugin-source) 接受的值,或将该条目切换为 `github`、`url` 或 `git-subdir` 源

476* **如果不是您**:向市场所有者报告消息

477 

463<h3 id="marketplace-is-registered-from-an-untrusted-source">478<h3 id="marketplace-is-registered-from-an-untrusted-source">

464 `Marketplace "<name>" is registered from an untrusted source`479 `Marketplace "<name>" is registered from an untrusted source`

465</h3>480</h3>

466 481 

467您之前添加的市场停止加载,其插件也停止加载。此行出现在 `/plugin` **Errors** 选项卡中或下一次刷新时。482您之前添加的市场停止加载,其插件也停止加载。此行出现在 `/plugin` **Errors** 选项卡中或下一次刷新时。

468 483 

469市场以 [为官方 Anthropic 市场保留](/docs/zh-CN/plugins/marketplace-reference) 的名称注册,但其注册源不是 `anthropics` GitHub 存储库。每次市场加载或刷新时都会重新检查保留名称,因此市场和从它安装的插件停止加载。484市场以 [为官方 Anthropic 市场保留](/docs/zh-CN/plugins/marketplace-reference) 的名称注册,但其注册源不是 `anthropics` GitHub 仓库。每次市场加载或刷新时都会重新检查保留名称,因此市场和从它安装的插件停止加载。

470 485 

471完整消息命名保留名称和修复:486完整消息命名保留名称和修复:

472 487 


476 491 

477修复因用户和发布者而异:492修复因用户和发布者而异:

478 493 

479* **您使用市场**:在您的 shell 中,运行 `claude plugin marketplace remove <name>`,然后从官方 `github.com/anthropics` 存储库再次添加市场494* **您使用市场**:在您的 shell 中,运行 `claude plugin marketplace remove <name>`,然后从官方 `github.com/anthropics` 仓库再次添加市场

480* **您发布在其名称成为保留之前使用该名称的第三方市场**:重命名它并要求用户从您的源重新添加它495* **您发布在其名称成为保留之前使用该名称的第三方市场**:重命名它并要求用户从您的源重新添加它

481 496 

482在 v2.1.205 之前,Claude Code 仅在您添加市场时检查名称,因此在其名称成为保留之前注册的条目继续加载。497在 v2.1.205 之前,Claude Code 仅在您添加市场时检查名称,因此在其名称成为保留之前注册的条目继续加载。

483 498 

499<h3 id="marketplace-is-added-but-ignored">

500 `Marketplace "<name>" is added but ignored`

501</h3>

502 

503该市场在 `~/.claude/plugins/known_marketplaces.json` 中有条目,但该条目未通过 Claude Code 每次读取该文件时运行的检查,因此该市场以及从它安装的插件停止加载。在您的 shell 中,`claude plugin list` 会为每个受影响的插件报告一行,指出原因和修复方法:

504 

505```text theme={null}

506Marketplace team-tools is added but ignored. Its location is on a network drive, has "." or ".." in its path, or couldn't be checked. Re-add the marketplace (one added from a folder or file must be re-added from a copy on this computer), or, to trust a folder on a network drive, declare it under extraKnownMarketplaces in user or managed settings.

507```

508 

509在会话中,`/plugin` **Errors** 选项卡会将市场名称放在引号中,在原因之后结束该行,并在其下一行显示修复方法。

510 

511`is added but ignored` 之后的句子指出该条目未通过的检查:

512 

513* `Its location is on a network drive, has "." or ".." in its path, or couldn't be checked`,或关于 `The folder or file it was added from` 的相同句子:市场的目录或添加它时所用的本地路径位于网络位置、路径中包含 `.` 或 `..` 段,或无法检查

514* `Its git URL can't be used: <reason>` 或 `Its URL can't be read as an https:// or http:// address`:条目记录的源 URL 是 Claude Code 拒绝从中克隆或获取的 URL

515* `Its source doesn't match its extraKnownMarketplaces entry in user or managed settings`:该条目与同名的 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 声明不匹配

516 

517当 `(see the debug log)` 代替原因出现在 `is added but ignored` 之后时,Claude Code 拒绝了该市场的名称,例如 [保留名称的另一种拼写](/docs/zh-CN/errors#marketplace-name-is-another-spelling-of-a-reserved-name)。[调试日志](/docs/zh-CN/debug-your-config) 会指出该条目。

518 

519**处理方法:**

520 

521* 按照消息中的修复方法操作。在您的 shell 中,运行 `claude plugin marketplace remove <name>`,然后从受支持的源或本地路径再次添加该市场,并重新安装其插件(remove 命令会卸载这些插件)。remove 命令对被忽略的条目同样有效

522* 要保留位于网络位置的市场,请在您的用户设置或托管设置中的 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下声明它;仓库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的声明不算数

523* 对于与其设置声明不同的源,请从声明的源重新添加市场,或更改声明。`claude plugin marketplace add` 会拒绝同样的不匹配;请参阅 [对应的 `Cannot add marketplace` 条目](#cannot-add-marketplace-source-doesnt-match)

524* 对于被拒绝的名称,请删除该市场;如果该行给出了 `Remove it:` 之后的命令,则使用该命令。以相同名称再次添加会再次被拒绝

525 

526在 v2.1.286 之前,无论原因是什么,`claude plugin list` 都将此类市场报告为 `Marketplace <name> not found`,而 `/plugin` **Errors** 选项卡将其报告为 `Marketplace "<name>" is registered but was refused (see the debug log)`。原因仅出现在调试日志中。在 v2.1.286 中,原因和修复句子使用了不同的措辞,例如 `Its recorded location is network-shaped or unclassifiable (never probed)`。

527 

484<h3 id="plugin-has-a-corrupt-manifest-file-or-has-an-invalid-manifest-file">528<h3 id="plugin-has-a-corrupt-manifest-file-or-has-an-invalid-manifest-file">

485 `Plugin <name> has a corrupt manifest file` 或 `has an invalid manifest file`529 `Plugin <name> has a corrupt manifest file` 或 `has an invalid manifest file`

486</h3>530</h3>


488Claude Code 获取了插件,然后无法读取其 `.claude-plugin/plugin.json`。在 shell 中,此行中的 `<name>` 可以是临时目录名称;`Failed to install plugin "<name>@<marketplace>"` 前缀携带插件的真实名称。措辞说明哪个检查失败:532Claude Code 获取了插件,然后无法读取其 `.claude-plugin/plugin.json`。在 shell 中,此行中的 `<name>` 可以是临时目录名称;`Failed to install plugin "<name>@<marketplace>"` 前缀携带插件的真实名称。措辞说明哪个检查失败:

489 533 

490* **`corrupt manifest file`,后跟 `JSON parse error:`**:文件不是有效的 JSON534* **`corrupt manifest file`,后跟 `JSON parse error:`**:文件不是有效的 JSON

491* **`invalid manifest file`,后跟 `Validation errors:`**:文件解析但失败架构,例如 `name: Invalid input` 用于缺失的必需字段535* **`invalid manifest file`,后跟 `Validation errors:`**:文件可以解析但未通过 schema 校验,例如缺失必需字段时显示 `name: Invalid input`

492 536 

493`claude plugin install` 报告为 `Failed to install plugin "<name>@<marketplace>":` 并以代码 1 退出。537`claude plugin install` 报告为 `Failed to install plugin "<name>@<marketplace>":` 并以代码 1 退出。

494 538 


536* **您已添加的市场**:使用 `/plugin install <plugin>@<name>` 按名称从它安装580* **您已添加的市场**:使用 `/plugin install <plugin>@<name>` 按名称从它安装

537* **新源**:运行 `/plugin marketplace remove <name>`,然后重试安装581* **新源**:运行 `/plugin marketplace remove <name>`,然后重试安装

538 582 

539<h3 id="cannot-add-marketplace-its-network-source-differs">583<h3 id="cannot-add-marketplace-source-doesnt-match">

540 `Cannot add marketplace "<name>": its network source differs from the one declared for it in settings`584 `Cannot add marketplace "<name>": its source doesn't match its extraKnownMarketplaces entry in user or managed settings`

541</h3>585</h3>

542 586 

543您运行了 `marketplace add`,该源处的目录与设置文件已在 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 下声明的市场具有相同的名称,但源不同。Claude Code 拒绝添加并注册任何内容。587您添加了一个市场,而其 `marketplace.json` 中的 `name` 在您的用户设置或托管设置中已有一个 [`extraKnownMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目。您提供的源与该条目列出的源不同,因此 Claude Code 拒绝添加,并且不注册任何内容。

588 

589只有当两个源类型相同且每个字段的值都相同时,它们才匹配。设置了您未传递的 `ref` 的条目视为不同。当您以 `https://github.com/` URL 的形式提供仓库时,`github` 条目也视为不同,因为 Claude Code 会将该 URL 记录为 [`git` 源](/docs/zh-CN/plugins/marketplace-reference#marketplace-sources)。执行以下操作之一:

544 590 

545消息以修复结尾:源必须与设置中为此名称声明的源匹配,或您更改声明。将您传递的源与该名称的 `extraKnownMarketplaces` 条目进行比较,包括其 `ref`、`path` 和 `headers`,然后执行以下操作之一:591* **使用声明的源**:Claude Code 会自行[注册设置中声明的市场](/docs/zh-CN/settings-reference#extraknownmarketplaces),因此请先在会话中运行 `/plugin marketplace list`。如果列表中显示该名称,则该市场已注册,无需添加。

592 

593 如果列表中未显示该名称,请按照条目的写法键入源来添加它。对于 `source` 对象为 `{ "source": "github", "repo": "acme-corp/claude-plugins", "ref": "v1.2.0" }` 的条目,请运行:

594 

595 ```text theme={null}

596 /plugin marketplace add acme-corp/claude-plugins#v1.2.0

597 ```

546 598 

547* **使用声明的源**:从设置条目命名的源添加市场

548* **使用新源**:编辑或删除 `extraKnownMarketplaces` 条目,然后再次添加市场。如果托管设置声明它,请询问您的管理员599* **使用新源**:编辑或删除 `extraKnownMarketplaces` 条目,然后再次添加市场。如果托管设置声明它,请询问您的管理员

549 600 

601在 v2.1.287 之前,该消息为 `Cannot add marketplace "<name>": its network source differs from the one declared for it in settings (kind, target, or a fetch-shaping field such as headers / ref / path / sparsePaths)`。

602 

550<h3 id="failed-to-install-from-the-plugin-menu">603<h3 id="failed-to-install-from-the-plugin-menu">

551 `Failed to install: <plugin> (<reason>)`604 `Failed to install: <plugin> (<reason>)`

552</h3>605</h3>


603| `Requires "<dep>" <range>, installed <version>` | 已安装的依赖项的版本在插件的声明范围之外。 | 将依赖项更新到范围内的版本,或卸载插件。 |656| `Requires "<dep>" <range>, installed <version>` | 已安装的依赖项的版本在插件的声明范围之外。 | 将依赖项更新到范围内的版本,或卸载插件。 |

604| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 没有版本满足每个引脚它的范围。消息列出范围。 | 卸载或更新其中一个冲突的插件,或要求上游作者扩大其约束。 |657| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 没有版本满足每个引脚它的范围。消息列出范围。 | 卸载或更新其中一个冲突的插件,或要求上游作者扩大其约束。 |

605| `... has version requirements too complex to intersect` 或 `has an invalid version requirement` | 范围不是有效的 semver,或组合范围无法相交。 | 修复无效范围或简化长 `\|\|` 链。 |658| `... has version requirements too complex to intersect` 或 `has an invalid version requirement` | 范围不是有效的 semver,或组合范围无法相交。 | 修复无效范围或简化长 `\|\|` 链。 |

606| `... has no git tag satisfying <range>` | 依赖项的存储库在范围内没有 `<name>--v*` 标签。 | 检查上游是否使用该约定标记发布,或放宽范围。 |659| `... has no git tag satisfying <range>` | 依赖项的仓库在范围内没有 `<name>--v*` 标签。 | 检查上游是否使用该约定标记发布,或放宽范围。 |

607| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 依赖项在不同的市场中,默认情况下跨市场解析已关闭。 | 自己在相同的作用域安装依赖项,在您的 shell 中使用 `claude plugin install <dep>@<marketplace>` 加上您安装插件的 `--scope`,然后重试。 |660| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 依赖项在不同的市场中,默认情况下跨市场解析已关闭。 | 自己在相同的作用域安装依赖项,在您的 shell 中使用 `claude plugin install <dep>@<marketplace>` 加上您安装插件的 `--scope`,然后重试。 |

608 661 

609要以编程方式查看这些,请在您的 shell 中运行 `claude plugin list --json`。有问题的插件携带带有消息的 `errors` 字段和带有每个 `type` 的 `errorDetails` 字段:前两行是 `dependency-unsatisfied`,第三行是 `dependency-version-unsatisfied`。662要以编程方式查看这些,请在您的 shell 中运行 `claude plugin list --json`。有问题的插件携带带有消息的 `errors` 字段和带有每个 `type` 的 `errorDetails` 字段:前两行是 `dependency-unsatisfied`,第三行是 `dependency-version-unsatisfied`。


660 713 

661在 v2.1.246 之前,该摘要中的技能计数仅包括插件的 `commands/` 条目,因此重新加载可以加载插件的 `SKILL.md` 技能并仍然报告 `0 skills`。714在 v2.1.246 之前,该摘要中的技能计数仅包括插件的 `commands/` 条目,因此重新加载可以加载插件的 `SKILL.md` 技能并仍然报告 `0 skills`。

662 715 

716<h3 id="the-packages-it-lists-are-not-installed">

717 `The packages it lists are not installed` 或 `were not installed, because ...`

718</h3>

719 

720当插件的依赖安装未留下 `node_modules` 目录时,`/plugin` 和 `claude plugin list` 会在该插件上显示以下注释之一。插件会加载,但需要缺失包的部分可能无法工作。

721 

722* **`are not installed`**:此插件可以运行安装,但安装没有完成,例如因为安装失败或超时。要重试安装,请在您的 shell 中运行注释给出的 `claude plugin update` 命令,或从 `/plugin` 更新插件

723 

724 ```shell theme={null}

725 claude plugin update formatter@my-marketplace

726 ```

727 

728 如果重试失败,输出会给出原因。当设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,`claude plugin update` 和 `/plugin` 会跳过重试,并报告插件已是最新版本。

729 

730* **`were not installed, because ...`**:此插件无法运行安装,注释会说明原因,例如 Yarn、pnpm 或 `bun.lockb` lockfile,或者其包管理器未安装在此计算机上的 lockfile。只要该原因存在,更新插件就不会安装这些包。如果原因是 lockfile,插件作者必须替换它。如果是缺少包管理器,请安装它,然后更新插件

731 

663<h3 id="plugin-not-cached-at">732<h3 id="plugin-not-cached-at">

664 `Plugin "<name>" not cached at <path>`733 `Plugin "<name>" not cached at <path>`

665</h3>734</h3>


877 构建插件946 构建插件

878</h2>947</h2>

879 948 

880你正在开发插件并使用 `--plugin-dir` 加载它或从本地市场安装它。这些条目涵盖了你在开发插件时遇到的失败。要在每次更改后运行检查,请参阅[测试和调试](/docs/zh-CN/plugins/create#test-and-debug)。949您正在开发插件,并使用 `--plugin-dir` 加载它或从本地市场安装它。这些条目涵盖了开发插件时遇到的失败。要了解每次更改后需要运行的检查,请参阅[测试和调试](/docs/zh-CN/plugins/create#test-and-debug)。

881 950 

882两个也会影响插件用户的失败在[插件已安装但无法工作](#plugin-installed-but-not-working)下有相应条目:951有两种失败也会影响插件的用户,它们的条目位于[插件已安装但无法工作](#plugin-installed-but-not-working)下:

883 952 

884* **未触发的 hook**:请参阅[未触发的 hook](#failed-to-load-hooks-from-and-hooks-that-dont-fire)953* **未触发的 hook**:请参阅[未触发的 hook](#failed-to-load-hooks-from-and-hooks-that-dont-fire)

885* **无法启动的 MCP 服务器**:请参阅[无法启动的 MCP 服务器](#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start)954* **无法启动的 MCP 服务器**:请参阅[无法启动的 MCP 服务器](#invalid-mcp-server-config-for-and-mcp-servers-that-dont-start)


890 959 

891**Errors** 选项卡显示 `commands path not found: <absolute path>`,并提示 `Check that the path in your manifest or marketplace config is correct`。`skills`、`agents` 和 `hooks` 也会显示相同的消息。960**Errors** 选项卡显示 `commands path not found: <absolute path>`,并提示 `Check that the path in your manifest or marketplace config is correct`。`skills`、`agents` 和 `hooks` 也会显示相同的消息。

892 961 

893Claude Code 根据插件根目录解析了你的 `plugin.json` 或市场条目中的路径,但在那里找不到任何内容。消息中的路径是它检查的绝对路径,因此请将其与磁盘上的内容进行比较。修复路径或创建目录,然后运行 `/reload-plugins`。962Claude Code 根据插件根目录解析了您的 `plugin.json` 或市场条目中的路径,但在那里找不到任何内容。消息中的路径是它检查的绝对路径,因此请将其与磁盘上的内容进行比较。修复路径或创建目录,然后运行 `/reload-plugins`。

894 963 

895清单中的路径相对于插件根目录,以 `./` 开头。解析到插件根目录外的路径会被报告为 `<component> path escapes plugin directory`,并被丢弃。964清单中的路径相对于插件根目录,以 `./` 开头。解析到插件根目录外的路径会被报告为 `<component> path escapes plugin directory`,并被丢弃。

896 965 


898 `--plugin-dir` 在市场根目录处不会加载 `plugins/` 下的插件967 `--plugin-dir` 在市场根目录处不会加载 `plugins/` 下的插件

899</h3>968</h3>

900 969 

901你启动了 `claude --plugin-dir <path>`,没有看到错误,但插件的 skills、agents 和 hooks 不存在。970您启动了 `claude --plugin-dir <path>`,没有看到错误,但插件的 skill、Agent 和 hook 不存在。

902 971 

903`--plugin-dir` 接受插件的根目录,即包含 `.claude-plugin/plugin.json` 和 `skills/` 等组件目录的目录。如果你改为指向市场根目录,Claude Code 不会读取 `marketplace.json`,所以 `plugins/` 下的插件不会加载,你也看不到错误。在 v2.1.281 之前,Claude Code 将市场根目录作为一个以该目录命名的空插件加载。将标志指向插件目录本身:972`--plugin-dir` 接受插件的根目录,即包含 `.claude-plugin/plugin.json` 和 `skills/` 等组件目录的目录。如果改为指向市场根目录,Claude Code 不会读取 `marketplace.json`,因此 `plugins/` 下的插件不会加载,也看不到任何错误。在 v2.1.281 之前,Claude Code 将市场根目录作为一个以该目录命名的空插件加载。请将标志指向插件目录本身:

904 973 

905```shell theme={null}974```shell theme={null}

906claude --plugin-dir ./my-marketplace/plugins/my-plugin975claude --plugin-dir ./my-marketplace/plugins/my-plugin


912 插件引用的目录外文件找不到981 插件引用的目录外文件找不到

913</h3>982</h3>

914 983 

915插件使用 `--plugin-dir` 从其源目录工作,但安装后失败,出现关于 `../shared-utils` 等路径的错误。984插件使用 `--plugin-dir` 从其源目录运行正常,但安装后失败,出现关于 `../shared-utils` 等路径的错误。

916 985 

917Claude Code 将已安装的插件复制到其缓存中并从那里加载它,因此到达插件自身目录外的路径在缓存中指向任何东西都找不到。将共享文件移到插件目录内,或通过插件内的符号链接引用它们。有关缓存位置和路径解析方式,请参阅[在磁盘上查找插件](/docs/zh-CN/plugins/loading#find-plugins-on-disk)。986Claude Code 将已安装的插件复制到其缓存中并从那里加载,因此指向插件自身目录之外的路径在缓存中找不到任何内容。请将共享文件移到插件目录内,或通过插件目录内的符号链接引用它们。有关缓存位置和路径解析方式,请参阅[在磁盘上查找插件](/docs/zh-CN/plugins/loading#find-plugins-on-disk)。

918 987 

919<h3 id="claude-plugin-root-shows-forward-slashes-on-windows">988<h3 id="claude-plugin-root-shows-forward-slashes-on-windows">

920 `${CLAUDE_PLUGIN_ROOT}` 在 Windows 上显示正斜杠989 `${CLAUDE_PLUGIN_ROOT}` 在 Windows 上显示正斜杠

921</h3>990</h3>

922 991 

923在 Windows 上,插件 hook 接收 `${CLAUDE_PLUGIN_ROOT}` 为 `C:/Users/you/...` 而不是 `C:\Users\you\...`,期望反斜杠的脚本会中断。992在 Windows 上,插件 hook 接收到的 `${CLAUDE_PLUGIN_ROOT}` 为 `C:/Users/you/...` 而不是 `C:\Users\you\...`,期望反斜杠的脚本因此出错。

924 993 

925Claude Code 在 Windows 上通过 Git Bash 运行 shell 形式的 hook,并故意以正斜杠 Win32 形式替换插件根目录。Bash 内置命令、MSYS 工具和本机 Windows 二进制文件都接受该形式。994Claude Code 在 Windows 上通过 Git Bash 运行 shell 形式的 hook,并有意以正斜杠 Win32 形式替换插件根目录。Bash 内置命令、MSYS 工具和本机 Windows 二进制文件都接受该形式。

926 995 

927如果你的脚本需要反斜杠,请将 hook 切换到保留本机路径的形式之一,如[执行形式和 shell 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)下所述:996如果您的脚本需要反斜杠,请将 hook 切换到保留本机路径的形式之一,如[执行形式和 shell 形式](/docs/zh-CN/hooks#exec-form-and-shell-form)下所述:

928 997 

929* 执行形式的 hook,它使用 `args` 数组直接生成进程998* 执行形式的 hook,它使用 `args` 数组直接生成进程

930* 带有 `"shell": "powershell"` 的 hook999* 带有 `"shell": "powershell"` 的 hook

931 1000 

932<h3 id="plugin-loads-but-its-skills-are-missing">1001<h3 id="plugin-loads-but-its-skills-are-missing">

933 插件加载但其 skills 缺失1002 插件已加载但其 skill 缺失

934</h3>1003</h3>

935 1004 

936你的插件在 **Installed** 下列出,没有错误,但当你输入 `/` 时,不会提供其 skills。1005您的插件在 **Installed** 下列出且没有错误,但输入 `/` 时不会提供其 skill。

937 1006 

938Skills 从插件根目录的 `skills/` 加载,commands 从插件根目录的 `commands/` 加载。只有 `plugin.json` 属于 `.claude-plugin/`,`.claude-plugin/` 内的 `skills/` 目录不会被扫描。将目录移到插件根目录并运行 `/reload-plugins`。之后,插件的详情窗格在 `/plugin` 中列出 skills,输入 `/` 会提供它们。1007skill 从插件根目录的 `skills/` 加载,command 从插件根目录的 `commands/` 加载。只有 `plugin.json` 应位于 `.claude-plugin/` 内,`.claude-plugin/` 内的 `skills/` 目录不会被扫描。请将这些目录移到插件根目录并运行 `/reload-plugins`。之后,`/plugin` 中插件的详情窗格会列出这些 skill,输入 `/` 也会提供它们。

939 1008 

940每个 skill 是一个包含 `SKILL.md` 的目录。清单中指向 `SKILL.md` 文件而不是其目录的 `skills` 条目会被报告为 `path is a file; skills entries must be directories containing SKILL.md`。1009每个 skill 是一个包含 `SKILL.md` 的目录。清单中指向 `SKILL.md` 文件而不是其目录的 `skills` 条目会被报告为 `path is a file; skills entries must be directories containing SKILL.md`。

941 1010 

942<h3 id="skill-loads-but-claude-never-invokes-the-skill">1011<h3 id="skill-loads-but-claude-never-invokes-the-skill">

943 Skill 加载但 Claude 从不调用该 skill1012 Skill 已加载但 Claude 从不调用该 skill

944</h3>1013</h3>

945 1014 

946你的插件的 skill 在你输入其 `/<plugin>:<skill>` 命令时运行,但 Claude 从不在响应普通请求时调用它。1015输入 `/<plugin>:<skill>` 命令时,您插件的 skill 会运行,但 Claude 在响应普通请求时从不调用它。

947 1016 

948按顺序检查这些原因:1017请按顺序检查以下原因:

949 1018 

950* **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) 涵盖该字段1019* **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) 介绍了该字段

951* **描述与人们的提问方式不匹配**:完成[Skill 未触发](/docs/zh-CN/skills#skill-not-triggering)中的检查1020* **描述与人们的提问方式不匹配**:请完成[Skill 未触发](/docs/zh-CN/skills#skill-not-triggering)中的检查

952* **描述被截断**:当安装了许多 skills 时,Claude Code 会缩短描述以适应列表的字符预算,这可能会删除 Claude 需要匹配请求的关键字。请参阅[Skill 描述被截断](/docs/zh-CN/skills#skill-descriptions-are-cut-short)1021* **描述被截断**:当安装了许多 skill 时,Claude Code 会缩短描述以适应列表的字符预算,这可能会删除 Claude 匹配请求所需的关键字。请参阅[Skill 描述被截断](/docs/zh-CN/skills#skill-descriptions-are-cut-short)

953 1022 

954要衡量 skill 在现实提示中触发的频率,而不是一次检查一个,请使用 [`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite) 编写一个 eval 案例,并在每次描述更改后使用 `claude plugin eval` 运行它。1023要衡量 skill 在真实提示词中触发的频率,而不是逐一检查,请使用 [`tool_used: Skill` grader](/docs/zh-CN/plugin-evals#create-your-first-eval-suite) 编写一个 eval 用例,并在每次更改描述后使用 `claude plugin eval` 运行它。

955 1024 

956<h3 id="is-not-a-plugin-or-skill-folder">1025<h3 id="is-not-a-plugin-or-skill-folder">

957 `<directory> is not a plugin or skill folder` 来自 `claude plugin eval init`1026 `claude plugin eval init` 报告 `<directory> is not a plugin or skill folder`

958</h3>1027</h3>

959 1028 

960你从不是插件根目录的目录(如你的主目录或保存插件在子目录中的存储库根目录)运行了 `claude plugin eval init`。`init` 在工作目录下写入套件,所以它会停止而不是创建插件永远看不到的 `evals/` 目录。1029您在不是插件根目录的目录中运行了 `claude plugin eval init`,例如您的主目录,或将插件保存在子目录中的仓库根目录。`init` 会在工作目录下写入套件,因此它会停止,而不是创建一个插件永远看不到的 `evals/` 目录。

961 1030 

962更改到插件的根目录(保存 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录),然后再次运行命令。要有意在其他地方搭建套件,请传递 `--eval-dir`。请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)。1031请切换到插件的根目录(包含 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录),然后再次运行命令。如果确实要在其他位置搭建套件,请传递 `--eval-dir`。请参阅[使用 evals 测试插件](/docs/zh-CN/plugin-evals)。

963 1032 

964<h3 id="the-userconfig-dialog-never-appears">1033<h3 id="the-userconfig-dialog-never-appears">

965 `userConfig` 对话框从不出现1034 `userConfig` 对话框从不出现

966</h3>1035</h3>

967 1036 

968你的插件声明了 `userConfig` 选项,但安装时没有出现配置对话框。1037您的插件声明了 `userConfig` 选项,但安装时没有出现配置对话框。

969 1038 

970安装是否要求这些值取决于你在哪里运行它:1039安装时是否询问这些值取决于运行安装的位置:

971 1040 

972* **在会话中 `/plugin install`,或 `/plugin` 中的 Discover 选项卡**:对话框是此交互式安装的一部分1041* **在会话中运行 `/plugin install`,或使用 `/plugin` 中的 Discover 选项卡**:对话框是此交互式安装的一部分

973* **VS Code 扩展的 Manage plugins 对话框**:在安装后作为表单要求未设置的选项。在 v2.1.285 之前,在那里安装不显示选项表单,所以使用 `/plugin configure <plugin>@<marketplace>` 从终端会话设置值1042* **VS Code 扩展的 Manage plugins 对话框**:在安装后以表单形式询问未设置的选项。在 v2.1.285 之前,在此处安装不会显示选项表单,因此请在终端会话中使用 `/plugin configure <plugin>@<marketplace>` 设置这些值

974* **在你的 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` 后面。1043* **在 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.` 当任何未设置的选项为必需项时,`not yet set` 后面会跟上 `(M required)`。

975 1044 

976如果你从 shell 安装,请使用 `--config` 传递值,每个选项一个标志:1045如果您从 shell 安装,请使用 `--config` 传递值,每个选项一个标志:

977 1046 

978```shell theme={null}1047```shell theme={null}

979claude plugin install my-plugin@my-marketplace --config api_url=https://example.com1048claude plugin install my-plugin@my-marketplace --config api_url=https://example.com

980```1049```

981 1050 

982当每个选项都设置后,安装输出不会包含 `not yet set` 行。1051当所有选项都已设置后,安装输出不会包含 `not yet set` 行。

983 1052 

984要在之后打开对话框,请在会话中运行 `/plugin configure my-plugin@my-marketplace`。从 shell,[`claude plugin configure`](/docs/zh-CN/plugins/cli-reference#plugin-configure) 显示哪些选项仍未设置,并保存在 stdin 上管道传入的值。它需要 Claude Code v2.1.285 或更高版本。1053如果想在之后打开对话框,请在会话中运行 `/plugin configure my-plugin@my-marketplace`。在 shell 中,[`claude plugin configure`](/docs/zh-CN/plugins/cli-reference#plugin-configure) 会显示哪些选项仍未设置,并保存通过 stdin 管道传入的值。它需要 Claude Code v2.1.285 或更高版本。

985 1054 

986如果你传递清单未声明的 `--config` 键,插件仍会安装,命令会打印 `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` 后跟插件声明的键。1055如果您传递了清单未声明的 `--config` 键,插件仍会安装,命令会打印 `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.`,后跟插件已声明的键。

987 1056 

988对于运送声明自己的 `user_config` 的[MCPB 包文件](/docs/zh-CN/plugins/components#include-a-packaged-mcpb-server)的插件,消息改为读取 `isn't declared in this plugin's userConfig or by its bundled MCP servers.`,已知的键包括该服务器的键,写作 `<server>.<key>`。清单通过 URL 引用的包在安装时不会被读取,所以其键不会被列出,消息说在 `/plugin` 中配置它。设置 `<server>.<key>` 键需要 Claude Code v2.1.285 或更高版本。1057对于附带自身声明了 `user_config` 的[MCPB 包文件](/docs/zh-CN/plugins/components#include-a-packaged-mcpb-server)的插件,消息会改为 `isn't declared in this plugin's userConfig or by its bundled MCP servers.`,已知的键包括该服务器的键,写作 `<server>.<key>`。清单通过 URL 引用的包在安装时不会被读取,因此其键不会被列出,消息会提示在 `/plugin` 中进行配置。设置 `<server>.<key>` 键需要 Claude Code v2.1.285 或更高版本。

989 1058 

990<h3 id="claude-plugin-validate-reports-errors">1059<h3 id="claude-plugin-validate-reports-errors">

991 `claude plugin validate` 报告错误1060 `claude plugin validate` 报告错误

992</h3>1061</h3>

993 1062 

994你运行了 `claude plugin validate <path>`,或在会话中运行了 `/plugin validate <path>`,它打印了 `Found N errors` 和 `Validation failed`,然后以代码 1 退出。1063您运行了 `claude plugin validate <path>`,或在会话中运行了 `/plugin validate <path>`,它打印了 `Found N errors` 和 `Validation failed`,然后以代码 1 退出。

995 1064 

996验证器读取你给定的路径处的清单:插件目录的 `.claude-plugin/plugin.json`,或市场目录的 `.claude-plugin/marketplace.json`。对于市场,它在条目自身清单中的问题前加上条目索引,如 `plugins[1] plugin.json → json: ...`。1065验证器读取您指定路径处的清单:插件目录为 `.claude-plugin/plugin.json`,市场目录为 `.claude-plugin/marketplace.json`。对于市场,它会在条目自身清单中的问题前加上条目索引,例如 `plugins[1] plugin.json → json: ...`。

997 1066 

998该表涵盖停止验证的消息和两个警告 `No frontmatter block found` 和 `Unknown field '<key>'`,当你传递 `--strict` 时它们才会停止。其他警告,如缺少描述,未列出。1067下表涵盖会导致验证停止的消息,以及两个警告 `No frontmatter block found` 和 `Unknown field '<key>'`,这两个警告仅在传递 `--strict` 时才会导致验证停止。其他警告(例如缺少描述)未列出。

999 1068 

1000| 消息 | 原因 | 修复 |1069| 消息 | 原因 | 修复 |

1001| :- | :- | :- |1070| :- | :- | :- |

1002| `File not found: <path>` | 路径没有清单,或不存在。 | 针对插件或市场根目录运行命令,即包含 `.claude-plugin/` 的目录。 |1071| `File not found: <path>` | 路径没有清单,或路径不存在。 | 针对插件或市场根目录(即包含 `.claude-plugin/` 的目录)运行命令。 |

1003| `No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json` | 目录没有 `.claude-plugin/` 清单。 | 创建清单,或指向正确的目录。 |1072| `No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json` | 目录没有 `.claude-plugin/` 清单。 | 创建清单,或指向正确的目录。 |

1004| `Invalid JSON syntax: <parse error>` | 清单或 `hooks/hooks.json` 不是有效的 JSON。 | 修复 JSON。在你修复 `hooks/hooks.json` 之前,会话会加载插件而不包含该文件中的 hook。 |1073| `Invalid JSON syntax: <parse error>` | 清单或 `hooks/hooks.json` 不是有效的 JSON。 | 修复 JSON。在修复 `hooks/hooks.json` 之前,会话加载插件时不会包含该文件中的 hook。 |

1005| `Path not found: <path>. The runtime loader will report this as a load failure.` | 清单中的组件路径不存在。 | 修复路径或创建目录。 |1074| `Path not found: <path>. The runtime loader will report this as a load failure.` | 清单中的组件路径不存在。 | 修复路径或创建目录。 |

1006| `Path contains ".." which could be a path traversal attempt: <path>` | 组件路径逃离插件目录。 | 使用插件根目录内的路径。 |1075| `Path contains ".." which could be a path traversal attempt: <path>` | 组件路径超出了插件目录。 | 使用插件根目录内的路径。 |

1007| `Path is a file; skills entries must be directories containing SKILL.md` | `skills` 条目指向 `SKILL.md` 而不是其目录。 | 指向父目录,或 `.` 表示根级 `SKILL.md`。 |1076| `Path is a file; skills entries must be directories containing SKILL.md` | `skills` 条目指向 `SKILL.md` 而不是其目录。 | 指向父目录,对于根级 `SKILL.md` 则使用 `.`。 |

1008| `No frontmatter block found` 或 `YAML frontmatter failed to parse: <error>` | skill、agent 或 command 文件缺少或有无效的 YAML frontmatter。 | 在 `---` 分隔符之间添加或修复 frontmatter。在验证插件目录时报告。 |1077| `No frontmatter block found` 或 `YAML frontmatter failed to parse: <error>` | skill、Agent 或 command 文件缺少 YAML frontmatter 或其无效。 | 在 `---` 分隔符之间添加或修复 frontmatter。在验证插件目录时报告。 |

1009| `Plugin name "<name>" is reserved: it passes as one of Anthropic's own` | 插件的 `name` 是[保留名称](/docs/zh-CN/plugins/manifest-reference#name)之一。 | 根据其功能重命名插件。 |1078| `Plugin name "<name>" is reserved: it passes as one of Anthropic's own` | 插件的 `name` 是[保留名称](/docs/zh-CN/plugins/manifest-reference#name)之一。 | 根据插件的功能重命名插件。 |

1010| `Unknown field '<key>'` | 清单有一个架构未定义的字段。 | 删除它,或使用消息建议的名称。Claude Code 在加载时忽略未知字段。 |1079| `Unknown field '<key>'` | 清单中有一个 schema 未定义的字段。 | 删除它,或使用消息建议的名称。Claude Code 在加载时会忽略未知字段。有关 `plugin.json` 中的 `privacyPolicyUrl` 及其他目录列表字段,请参阅[目录列表字段](/docs/zh-CN/plugins/manifest-reference#directory-listing-fields)。 |

1011 1080 

1012在每次修复后再次运行命令,直到它不打印任何错误。1081每次修复后再次运行命令,直到不再打印任何错误。

1013 1082 

1014`plugin.json` 字段在[清单参考](/docs/zh-CN/plugins/manifest-reference)上,市场级消息在[市场验证错误](#marketplace-validation-errors)下。1083`plugin.json` 字段请参阅[清单参考](/docs/zh-CN/plugins/manifest-reference),市场级消息请参阅[市场验证错误](#marketplace-validation-errors)。

1015 1084 

1016<h3 id="plugin-has-conflicting-manifests">1085<h3 id="plugin-has-conflicting-manifests">

1017 `Plugin <name> has conflicting manifests`1086 `Plugin <name> has conflicting manifests`


1019 1088 

1020插件加载失败,显示 `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components.`1089插件加载失败,显示 `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components.`

1021 1090 

1022插件有自己的 `plugin.json`,其市场条目设置 `strict: false` 同时声明 `commands`、`agents`、`skills`、`hooks`、`outputStyles` 或 `themes` 中的任何一个。从条目中删除这些字段,或在条目中设置 `strict: true`,以便 Claude Code 将它们附加到 `plugin.json`。请参阅[严格模式](/docs/zh-CN/plugins/marketplace-reference#strict-mode)。1091插件有自己的 `plugin.json`,而其市场条目设置了 `strict: false`,同时声明了 `commands`、`agents`、`skills`、`hooks`、`outputStyles` 或 `themes` 中的任何一个。请从条目中删除这些字段,或在条目中设置 `strict: true`,以便 Claude Code 将它们附加到 `plugin.json`。请参阅[严格模式](/docs/zh-CN/plugins/marketplace-reference#strict-mode)。

1023 1092 

1024<h3 id="warning-no-commands-found-in-plugin-custom-directory">1093<h3 id="warning-no-commands-found-in-plugin-custom-directory">

1025 `Warning: No commands found in plugin <name> custom directory`1094 `Warning: No commands found in plugin <name> custom directory`

1026</h3>1095</h3>

1027 1096 

1028当插件加载时,`~/.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** 选项卡中不会出现任何内容。1097插件加载时,位于 `~/.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** 选项卡中不会显示任何内容。

1029 1098 

1030清单中的 `commands` 路径存在但不包含 `.md` 文件,也不包含子目录中的 `SKILL.md`。添加 command 文件,或从清单中删除路径。1099清单中的 `commands` 路径存在,但其中既没有 `.md` 文件,子目录中也没有 `SKILL.md`。请添加 command 文件,或从清单中删除该路径。

1031 1100 

1032<h2 id="host-a-marketplace">1101<h2 id="host-a-marketplace">

1033 托管市场1102 托管市场

prompt-library.md +338 −115

Details

622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);

623 const locale = m ? m[1] : 'en';623 const locale = m ? m[1] : 'en';

624 return href => {624 return href => {

625 if (!href || href[0] !== '/' || href[1] === '/') return href;625 if (!href) return undefined;

626 if (href[0] === '#' || href.startsWith('https://')) return href;

627 if (!(/^\/[A-Za-z0-9]/).test(href)) return undefined;

626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);628 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);

627 };629 };

628 }, []);630 }, []);


671 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);673 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);

672 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);674 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);

673 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');675 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');

674 const widthFor = s => (s || '').length + 3 + 'ch';676 const WIDE_RE = /[\u1100-\u115F\u2E80-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6]/g;

677 const widthFor = s => {

678 const t = typeof s === 'string' ? s : '';

679 return t.length + (t.match(WIDE_RE) || []).length + 3 + 'ch';

680 };

675 const ql = q.trim().toLowerCase();681 const ql = q.trim().toLowerCase();

676 const toggleTag = k => {682 const toggleTag = k => {

677 setStart(false);683 setStart(false);


1096 1102 

1097export const text = {1103export const text = {

1098 "get-oriented-in-a": {1104 "get-oriented-in-a": {

1099 title: "在新存储库中定位",1105 title: "快速熟悉新仓库",

1100 teaches: "描述你想了解的内容,而不是要读哪些文件。Claude 自己探索项目并返回它如何组合在一起的摘要。",1106 teaches: "描述您想了解的内容,而不是要读哪些文件。Claude 会自行探索项目,并返回一份关于各部分如何组合在一起的摘要。",

1101 next: "运行 `/init` 来设置 `CLAUDE.md`,以便 Claude 在每个会话中记住这一点"1107 next: "运行 `/init` 来设置 `CLAUDE.md`,以便 Claude 在每个会话中记住这些内容",

1108 prompt: "给我概述一下这个代码库:架构、关键目录,以及各部分之间如何关联"

1102 },1109 },

1103 "explain-unfamiliar-code": {1110 "explain-unfamiliar-code": {

1104 title: "解释不熟悉的代码",1111 title: "解释不熟悉的代码",

1105 teaches: "命名文件并说出你想要答案的格式。将 HTML 页面交换为图表、项目符号或任何适合你学习方式的内容。",1112 teaches: "指明文件,并说明您希望答案采用的格式。可以把 HTML 页面换成图表、要点列表,或任何适合您学习方式的形式。",

1106 next: "设置输出样式,以便 Claude 始终以你喜欢的格式进行解释"1113 next: "设置输出样式,以便 Claude 始终以您喜欢的格式进行解释",

1114 prompt: "解释 {path} 的作用以及数据如何在其中流动。将其写成{format}",

1115 slots: {

1116 path: "src/scheduler/queue.ts",

1117 format: "一个带图表的 HTML 页面,然后在我的浏览器中打开它"

1118 }

1107 },1119 },

1108 "find-where-something-happens": {1120 "find-where-something-happens": {

1109 title: "找到某事发生的地方",1121 title: "找到某个行为发生的位置",

1110 teaches: "按行为而不是按文件名搜索。即使你不知道文件叫什么或它位于哪个目录,搜索也能工作。"1122 teaches: "按行为而不是按文件名搜索。即使您不知道文件叫什么或位于哪个目录,搜索也同样有效。",

1123 prompt: "我们在哪里{behavior}?",

1124 slots: {

1125 behavior: "验证上传的文件类型"

1126 }

1111 },1127 },

1112 "see-what-depends-on": {1128 "see-what-depends-on": {

1113 title: "在删除前检查什么会破坏",1129 title: "删除前检查会破坏什么",

1114 teaches: "在删除任何内容之前询问。调用者列表和下游影响告诉你是在看一行清理还是需要协调的更改。"1130 teaches: "在删除任何内容之前先询问。调用方列表和下游影响会告诉您,这只是一行代码的清理,还是一项需要协调的更改。",

1131 prompt: "如果我删除{target},会破坏什么?",

1132 slots: {

1133 target: "retryWithBackoff 辅助函数"

1134 }

1115 },1135 },

1116 "trace-how-code-evolved": {1136 "trace-how-code-evolved": {

1117 title: "追踪代码如何演变",1137 title: "追踪代码如何演变",

1118 teaches: "当问题是为什么而不是什么时,指向提交历史。Claude 读取你使用的任何版本控制的日志和责备,并解释当前实现背后的决策。"1138 teaches: "当问题是“为什么”而不是“是什么”时,请指向提交历史。Claude 会读取您所用版本控制系统的日志和 blame 信息,并解释当前实现背后的决策。",

1139 prompt: "查看 {path} 的提交历史,总结它是如何演变的以及原因",

1140 slots: {

1141 path: "internal/auth/session.go"

1142 }

1119 },1143 },

1120 "scope-a-change-before": {1144 "scope-a-change-before": {

1121 title: "在开始前确定更改的范围",1145 title: "开始前确定更改的范围",

1122 teaches: "在将工作提交到路线图之前调整其大小。文件列表告诉你是在看一个组件还是跨越式更改。"1146 teaches: "在将工作列入路线图之前先评估其规模。文件列表会告诉您,这只涉及一个组件,还是一项跨越多个部分的更改。",

1147 prompt: "要{change},我需要修改哪些文件?",

1148 slots: {

1149 change: "在设置中添加深色模式开关"

1150 }

1123 },1151 },

1124 "ask-the-codebase-a": {1152 "ask-the-codebase-a": {

1125 title: "向代码库提出产品问题",1153 title: "向代码库提出产品问题",

1126 teaches: "说出你的角色,以便答案在正确的级别上。Claude 从源代码解释产品实际做什么,无需你阅读它。",1154 teaches: "说明您的角色,以便答案处于合适的深度。Claude 会根据源代码解释产品实际做了什么,您无需亲自阅读代码。",

1127 next: "设置输出样式,以便 Claude 始终在此级别上提出答案"1155 next: "设置输出样式,以便 Claude 始终以这一深度给出回答",

1156 prompt: "我是{role}。请带我了解当用户{action}时会发生什么,从 UI 一直到最终结果",

1157 slots: {

1158 role: "PM",

1159 action: "点击导出为 PDF"

1160 }

1128 },1161 },

1129 "plan-a-multi-file": {1162 "plan-a-multi-file": {

1130 title: "在触及代码前计划多文件更改",1163 title: "在改动代码前规划多文件更改",

1131 teaches: "添加\"不要编辑\"将探索与更改分开,所以你在任何代码移动前看到方法。要使计划优先成为每个提示词的默认值,按 Shift+Tab 进入[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。"1164 teaches: "加上“暂时不要编辑”可以将探索与更改分开,让您在任何代码变动之前先看到方案。要让每个提示词都默认先做计划,请按 Shift+Tab 进入[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。",

1165 prompt: "规划如何重构{target}以{goal}。列出需要修改的文件,但暂时不要编辑任何内容",

1166 slots: {

1167 target: "支付模块",

1168 goal: "支持多种货币"

1169 }

1132 },1170 },

1133 "draft-a-spec-by": {1171 "draft-a-spec-by": {

1134 title: "通过采访起草规范",1172 title: "通过访谈起草规范",

1135 teaches: "要求被采访而不是自己编写规范。Claude 提出结构化问题,直到需求完成,然后将结果写入文件。",1173 teaches: "请 Claude 采访您,而不是自己编写规范。Claude 会向您提出结构化问题,直到需求完整为止,然后将结果写入文件。",

1136 next: "将你的采访问题保存为 `/spec` 技能,以便每个规范都以相同的方式开始"1174 next: "将您的访谈问题保存为 `/spec` skill,让每份规范都以相同方式开始",

1175 prompt: "我想构建{feature}。就实现、UX、边界情况和权衡向我提问,直到所有内容都覆盖到,然后将规范写入 SPEC.md",

1176 slots: {

1177 feature: "按工作区划分的速率限制"

1178 }

1137 },1179 },

1138 "turn-a-meeting-into": {1180 "turn-a-meeting-into": {

1139 title: "将会议转变为工单",1181 title: "将会议转化为工单",

1140 teaches: "跳过转录步骤。Claude 从非结构化输入中提取行动项,并通过 [MCP](/docs/zh-CN/mcp) 直接将其写入你的跟踪器,所以你审查工单,而不是转录。",1182 teaches: "省去整理文字稿这一步。Claude 会从非结构化输入中提取行动项,并通过 [MCP](/docs/zh-CN/mcp) 直接写入您的跟踪器,因此您审查的是工单,而不是文字稿。",

1141 next: "将此保存为 `/tickets` 技能"1183 next: "将此保存为 `/tickets` skill",

1184 prompt: "阅读 {input} 并整理出行动项,然后为每一项创建一个包含验收标准的 {tracker} 工单",

1185 slots: {

1186 input: "@meeting-notes.md",

1187 tracker: "Linear"

1188 }

1142 },1189 },

1143 "map-edge-cases-before": {1190 "map-edge-cases-before": {

1144 title: "在构建前映射边界情况",1191 title: "构建前梳理边界情况",

1145 teaches: "要求缺少什么,而不是有什么。Claude 列出快乐路径设计倾向于跳过的错误状态、空状态和边界情况。"1192 teaches: "询问缺少什么,而不是已有什么。Claude 会列出只考虑理想路径的设计往往会遗漏的错误状态、空状态和边界情况。",

1193 prompt: "列出设计中需要覆盖的{feature}的错误状态、空状态和边界情况",

1194 slots: {

1195 feature: "文件上传流程"

1196 }

1146 },1197 },

1147 "turn-a-mockup-into": {1198 "turn-a-mockup-into": {

1148 title: "将模型转变为工作原型",1199 title: "将设计稿转化为可运行的原型",

1149 teaches: "可点击的原型回答静态模型无法回答的问题。将工作代码交给工程部门,而不是在文档中解释交互。"1200 teaches: "可点击的原型能回答静态设计稿无法回答的问题。把可运行的代码交给工程团队,而不是在文档中解释交互。",

1201 prompt: "这是一份设计稿。构建一个可以点击操作的可运行原型,与其中展示的布局和状态保持一致"

1150 },1202 },

1151 "implement-from-a-screenshot": {1203 "implement-from-a-screenshot": {

1152 title: "从屏幕截图实现并自检",1204 title: "根据截图实现并自行检查",

1153 teaches: "这给 Claude 一个验证循环:它呈现、与源图像比较,并迭代,无需你指出每个差距。",1205 teaches: "这为 Claude 提供了一个验证循环:它会渲染结果、与原始图像比较并反复迭代,无需您逐一指出差距。",

1154 next: "使用 `/goal` 让 Claude 继续迭代,直到屏幕截图匹配"1206 next: "使用 `/goal` 让 Claude 持续迭代,直到截图一致",

1207 prompt: "实现这个设计,然后对结果截图,与原图进行比较,并修复所有差异"

1155 },1208 },

1156 "follow-an-existing-pattern": {1209 "follow-an-existing-pattern": {

1157 title: "遵循现有模式",1210 title: "遵循现有模式",

1158 teaches: "指向你已经喜欢的代码。没有参考,Claude 默认为一般最佳实践。有了参考,它匹配你的代码库实际使用的约定。",1211 teaches: "指向您已经认可的代码。没有参考时,Claude 会默认采用通用的最佳实践;有了参考,它会匹配您的代码库实际使用的约定。",

1159 next: "要求 Claude 将其遵循的模式写入 `CLAUDE.md`,以便未来会话无需参考即可匹配它"1212 next: "请 Claude 将其遵循的模式写入 `CLAUDE.md`,以便以后的会话无需参考也能保持一致",

1213 prompt: "查看 {example} 的实现方式以理解其模式,然后用相同的方式构建 {new}",

1214 slots: {

1215 example: "GitHub webhook 处理程序",

1216 new: "Stripe webhook 处理程序"

1217 }

1160 },1218 },

1161 "add-a-small-well": {1219 "add-a-small-well": {

1162 title: "添加一个小的、定义明确的功能",1220 title: "添加一个小而明确的功能",

1163 teaches: "说明输入和输出,而不是如何构建它。Claude 找到类似代码的位置并在其旁边添加你的代码。"1221 teaches: "说明输入和输出,而不是如何构建。Claude 会找到类似代码所在的位置,并在旁边添加您的代码。",

1222 prompt: "添加一个 {endpoint} 端点,返回{payload}",

1223 slots: {

1224 endpoint: "/health",

1225 payload: "应用版本和运行时长"

1226 }

1164 },1227 },

1165 "build-a-small-internal": {1228 "build-a-small-internal": {

1166 title: "从头开始构建一个小的内部工具",1229 title: "从零构建一个小型内部工具",

1167 teaches: "你不需要项目、框架或构建步骤。描述工具并要求 Claude 打开它,以便你立即看到它工作。"1230 teaches: "您不需要项目、框架或构建步骤。描述工具并请 Claude 打开它,即可立即看到它运行。",

1231 prompt: "使用 HTML、CSS 和原生 JavaScript 创建一个{tool},然后在我的浏览器中打开它",

1232 slots: {

1233 tool: "包含三列的拖放式看板"

1234 }

1168 },1235 },

1169 "work-an-issue-end": {1236 "work-an-issue-end": {

1170 title: "端到端处理问题",1237 title: "端到端处理一个 issue",

1171 teaches: "给出问题编号,而不是摘要。Claude 自己读取完整工单,所以你会忘记提及的需求会通过,它在报告前验证更改。"1238 teaches: "给出 issue 编号,而不是摘要。Claude 会自行读取完整工单,因此您可能忘记提及的需求也会被考虑在内,并且它会在汇报前验证更改。",

1239 prompt: "阅读 issue #{issue},实现修复,并运行测试",

1240 slots: {

1241 issue: "312"

1242 }

1172 },1243 },

1173 "find-and-update-copy": {1244 "find-and-update-copy": {

1174 title: "在代码库中查找和更新副本",1245 title: "在代码库中查找并更新文案",

1175 teaches: "要求变体并说出要跳过的内容。Claude 找到字面搜索会遗漏的措辞,并保持测试夹具和历史不变,所以你只审查用户实际看到的副本。"1246 teaches: "要求查找变体,并说明要跳过的内容。Claude 会找出字面搜索会遗漏的措辞,同时不改动测试夹具和历史记录,因此您只需审查用户实际看到的文案。",

1247 prompt: "找到所有提到“{copy}”或类似说法的地方,逐一展示其上下文,然后将它们全部更新为“{new}”。不要改动测试和 changelog",

1248 slots: {

1249 copy: "免费注册",

1250 new: "开始免费试用"

1251 }

1176 },1252 },

1177 "draft-from-past-examples": {1253 "draft-from-past-examples": {

1178 title: "从过去的例子起草文档",1254 title: "根据以往示例起草文档",

1179 teaches: "指向已完成工作的文件夹,而不是描述你的风格。Claude 从你已经发布的内容学习结构和声音,所以第一稿读起来像你的。",1255 teaches: "指向存放已完成工作的文件夹,而不是描述您的风格。Claude 会从您已经发布的内容中学习结构和语气,因此初稿读起来就像出自您之手。",

1180 next: "将声音保存为技能,以便每个草稿都从那里开始"1256 next: "将这种语气保存为 skill,让每份草稿都以此为起点",

1257 prompt: "阅读 {folder} 中的{examples}以学习其结构和语气,然后为{topic}起草一份新的",

1258 slots: {

1259 examples: "隐私影响评估",

1260 folder: "legal/pia/",

1261 topic: "新的分析集成"

1262 }

1181 },1263 },

1182 "write-tests-run-them": {1264 "write-tests-run-them": {

1183 title: "编写测试、运行它们、修复失败",1265 title: "编写测试、运行测试、修复失败",

1184 teaches: "一起要求编写、运行和修复,以便 Claude 迭代而无需停止以获取说明。",1266 teaches: "同时要求编写、运行和修复,让 Claude 持续迭代,无需停下来等待指示。",

1185 next: "运行 `/init` 以便 Claude 自动学习你的测试命令"1267 next: "运行 `/init`,让 Claude 自动了解您的测试命令",

1268 prompt: "为 {path} 编写测试,运行它们,并修复所有失败",

1269 slots: {

1270 path: "app/parsers/feed.py"

1271 }

1186 },1272 },

1187 "drive-implementation-from-tests": {1273 "drive-implementation-from-tests": {

1188 title: "从测试驱动实现",1274 title: "用测试驱动实现",

1189 teaches: "测试驱动开发:测试定义工作何时完成,Claude 迭代实现直到它们通过。"1275 teaches: "测试驱动开发:由测试来定义工作何时完成,Claude 会不断迭代实现,直到测试通过。",

1276 prompt: "先为{feature}编写测试,然后实现它,直到测试通过",

1277 slots: {

1278 feature: "密码重置流程"

1279 }

1190 },1280 },

1191 "fill-gaps-from-a": {1281 "fill-gaps-from-a": {

1192 title: "从覆盖率报告填补空白",1282 title: "根据覆盖率报告填补空白",

1193 teaches: "指向覆盖率报告而不是猜测什么是未测试的。Claude 读取实际数字并为最需要的文件编写测试。",1283 teaches: "指向覆盖率报告,而不是猜测哪些部分未被测试。Claude 会读取实际数据,并为最需要测试的文件编写测试。",

1194 next: "将此设置为 `/goal`,以便 Claude 继续编写测试,直到覆盖率达到目标"1284 next: "将此设置为 `/goal`,让 Claude 持续编写测试,直到达到覆盖率目标",

1285 prompt: "阅读 {report},为覆盖率最低的文件添加测试,直到每个文件都超过 {target}%",

1286 slots: {

1287 report: "coverage/coverage-summary.json",

1288 target: "80"

1289 }

1195 },1290 },

1196 "port-code-between-languages": {1291 "port-code-between-languages": {

1197 title: "将代码移植到另一种语言",1292 title: "将代码移植到另一种语言",

1198 teaches: "说出要保留的内容,而不仅仅是目标语言。命名必须保持相同的 API 或行为给 Claude 一个合同来检查端口。"1293 teaches: "说明需要保留的内容,而不仅仅是目标语言。指明必须保持不变的 API 或行为,相当于给 Claude 一份契约,用来检验移植结果。",

1294 prompt: "将{source}移植到 {target},保持相同的{keep}",

1295 slots: {

1296 source: "这个 Python 模块",

1297 target: "Rust",

1298 keep: "公共 API 和测试行为"

1299 }

1199 },1300 },

1200 "generate-docs-for-code": {1301 "generate-docs-for-code": {

1201 title: "为未记录的代码生成文档",1302 title: "为缺少文档的代码生成文档",

1202 teaches: "命名范围和格式。Claude 找到缺少的内容并匹配文件中已有的注释风格,所以新文档读起来像其余部分。"1303 teaches: "指明范围和格式。Claude 会找出缺失的内容,并匹配文件中已有的注释风格,让新文档与其余部分保持一致。",

1304 prompt: "找出没有 {format} 注释的{scope}并添加注释,与文件中已有的风格保持一致",

1305 slots: {

1306 scope: "src/auth/ 中的公共函数",

1307 format: "JSDoc"

1308 }

1203 },1309 },

1204 "migrate-a-pattern-across": {1310 "migrate-a-pattern-across": {

1205 title: "在代码库中迁移模式",1311 title: "在整个代码库中迁移模式",

1206 teaches: "描述旧模式和新模式。要求 Claude 首先识别每个地方意味着调用站点在响应中列出,所以你可以检查没有遗漏。对于跨许多文件的迁移,运行 [/batch](/docs/zh-CN/commands)。Claude 将工作分成单位供你批准,然后后台子代理进行更改。"1312 teaches: "描述旧模式和新模式。要求 Claude 先找出每一处需要修改的地方,这样调用位置会列在回复中,方便您检查是否有遗漏。对于涉及大量文件的迁移,请运行 [/batch](/docs/zh-CN/commands)。Claude 会将工作拆分为多个单元供您批准,然后由后台子代理进行更改。",

1313 prompt: "将所有内容从{from}迁移到{to}:先找出每一处需要修改的地方,然后进行修改",

1314 slots: {

1315 from: "旧的日志 API",

1316 to: "结构化日志记录器"

1317 }

1207 },1318 },

1208 "optimize-against-a-measurable": {1319 "optimize-against-a-measurable": {

1209 title: "针对可测量目标进行优化",1320 title: "针对可量化目标进行优化",

1210 teaches: "说明指标和目标给 Claude 一个明确的完成定义。",1321 teaches: "说明指标和目标,能为 Claude 提供明确的完成标准。",

1211 next: "将此设置为 `/goal`,以便 Claude 继续测量和迭代,直到达到数字"1322 next: "将此设置为 `/goal`,让 Claude 持续测量和迭代,直到达到目标数值",

1323 prompt: "优化{target},将{metric}从 {current} 降低到 {goal} 以下",

1324 slots: {

1325 target: "搜索查询",

1326 metric: "p95 延迟",

1327 current: "2s",

1328 goal: "500ms"

1329 }

1212 },1330 },

1213 "fix-a-precise-visual": {1331 "fix-a-precise-visual": {

1214 title: "修复精确的视觉错误",1332 title: "修复精确的视觉问题",

1215 teaches: "精确的视觉反馈得到精确的修复。说明确切的元素、测量和视口。",1333 teaches: "精确的视觉反馈才能换来精确的修复。请说明具体的元素、尺寸和视口。",

1216 next: "添加预览工具,以便 Claude 自己截图并验证修复"1334 next: "添加预览工具,让 Claude 自行截图并验证修复",

1335 prompt: "在{viewport}上,{element}超出{container} {amount}。请修复。",

1336 slots: {

1337 element: "登录按钮",

1338 amount: "20px",

1339 container: "卡片边框",

1340 viewport: "移动端"

1341 }

1217 },1342 },

1218 "review-your-changes-before": {1343 "review-your-changes-before": {

1219 title: "在提交前审查你的更改",1344 title: "提交前审查您的更改",

1220 teaches: "在问题仍然便宜时捕获它们。Claude 完整读取更改的文件,而不仅仅是差异行,所以它发现快速自审会遗漏的问题。",1345 teaches: "趁问题修复成本还低时发现它们。Claude 会完整读取更改过的文件,而不仅仅是 diff 行,因此能发现快速自查时容易遗漏的问题。",

1221 next: "运行 `/code-review` 以在一个命令中进行相同的检查"1346 next: "运行 `/code-review`,一条命令完成同样的检查",

1347 prompt: "审查我尚未提交的更改,在我提交前标出任何看起来有风险的地方"

1222 },1348 },

1223 "review-a-pull-request": {1349 "review-a-pull-request": {

1224 title: "审查拉取请求",1350 title: "审查 Pull Request",

1225 teaches: "Claude 在整个代码库的背景下审查,而不仅仅是差异。它读取更改的代码和它调用的内容,所以它捕获仅差异审查会遗漏的问题。",1351 teaches: "Claude 审查时会结合整个代码库的上下文,而不仅仅是 diff。它会读取更改的代码及其调用的内容,因此能发现只看 diff 的审查会遗漏的问题。",

1226 next: "为每个 PR 打开代码审查"1352 next: "运行 `/code-review <pr#>` 一条命令完成,或为每个 PR 启用 Code Review",

1353 prompt: "审查 PR #{pr},总结更改内容,然后列出任何疑虑",

1354 slots: {

1355 pr: "247"

1356 }

1227 },1357 },

1228 "review-infrastructure-changes-before": {1358 "review-infrastructure-changes-before": {

1229 title: "在应用前审查基础设施更改",1359 title: "应用前审查基础设施更改",

1230 teaches: "计划输出密集且难以扫描。粘贴它会得到一个关于实际将要更改的内容的纯文本摘要,然后再应用它。"1360 teaches: "plan 输出内容密集,难以快速浏览。将其粘贴进来,即可在应用之前获得一份通俗易懂的摘要,了解实际将发生哪些更改。",

1361 prompt: "这是我的 Terraform plan 输出。它会做什么?其中有没有会导致问题的内容?"

1231 },1362 },

1232 "run-a-security-review": {1363 "run-a-security-review": {

1233 title: "使用子代理运行安全审查",1364 title: "使用子代理运行安全审查",

1234 teaches: "[子代理](/docs/zh-CN/sub-agents)在其自己的上下文窗口中运行审计并报告回摘要,所以长安全审查不会填满你的主会话。内置的通用子代理无需额外设置即可处理此问题。",1365 teaches: "[子代理](/docs/zh-CN/sub-agents)会在自己的上下文窗口中运行审计并汇报摘要,因此冗长的安全审查不会占满您的主会话。内置的通用子代理无需额外设置即可处理此任务。",

1235 next: "设置一个专用的安全审查子代理,你的整个团队都可以使用"1366 next: "设置一个专用的安全审查子代理,供整个团队使用",

1367 prompt: "使用子代理审查 {path} 中的安全问题,并报告其发现",

1368 slots: {

1369 path: "src/api/"

1370 }

1236 },1371 },

1237 "review-content-before-sending": {1372 "review-content-before-sending": {

1238 title: "在正式审查前捕获问题",1373 title: "在正式审查前发现问题",

1239 teaches: "在人类花时间之前获得第一遍。命名你想检查的关注点,以便审查是有针对性的,然后修复它找到的内容并发送更清洁的草稿。",1374 teaches: "在他人投入时间之前先过一遍。指明您希望检查的关注点,让审查更有针对性,然后修复发现的问题,再发送一份更完善的草稿。",

1240 next: "将你的审查清单捕获为你的整个团队可以运行的技能"1375 next: "将您的审查清单保存为整个团队都能运行的 skill",

1376 prompt: "审查 {file} 中的{concerns},并列出在提交给{reviewer}之前需要修复的内容",

1377 slots: {

1378 file: "launch-post.md",

1379 concerns: "无依据的说法、缺失的出处标注以及品牌规范问题",

1380 reviewer: "法务"

1381 }

1241 },1382 },

1242 "course-correct-a-wrong": {1383 "course-correct-a-wrong": {

1243 title: "纠正错误的方法",1384 title: "纠正错误的方向",

1244 teaches: "命名 Claude 遗漏的约束,而不仅仅是它是错误的。具体的原因给 Claude 一个具体的约束来满足重试,而不是再次猜测。",1385 teaches: "指出 Claude 遗漏的约束,而不只是说它错了。具体的原因能给 Claude 一个在重试时需要满足的明确约束,而不是再次猜测。",

1245 next: "按 `Esc` 两次打开倒带菜单并恢复代码和对话,以便重试从干净开始"1386 next: "按两次 `Esc` 打开回退菜单,恢复代码和对话,让重试从干净的状态开始",

1387 prompt: "这不对:{feedback}。换一种方法试试",

1388 slots: {

1389 feedback: "函数签名需要保持向后兼容"

1390 }

1246 },1391 },

1247 "narrow-the-scope-of": {1392 "narrow-the-scope-of": {

1248 title: "缩小更改的范围",1393 title: "缩小更改的范围",

1249 teaches: "当方向正确但更改过于宽泛时,要求 Claude 保留其中一部分而不是倒带所有内容。说明的边界使小修复不会变成重构。"1394 teaches: "当方向正确但更改过于宽泛时,请 Claude 保留其中一部分,而不是全部回退。明确的边界能避免一个小修复演变成一次重构。",

1395 prompt: "改动太多了。只保留对{scope}的更改,撤销其他编辑",

1396 slots: {

1397 scope: "src/forms/ 中的验证逻辑"

1398 }

1250 },1399 },

1251 "turn-a-correction-into": {1400 "turn-a-correction-into": {

1252 title: "将更正转变为规则",1401 title: "将纠正转化为规则",

1253 teaches: "聊天中的更正不与你的团队共享。项目的 [CLAUDE.md](/docs/zh-CN/memory) 中的规则在你提交后共享,Claude 在每个会话开始时读取它。",1402 teaches: "在聊天中的纠正不会与团队共享。而项目 [CLAUDE.md](/docs/zh-CN/memory) 中的规则在您提交后即可共享,Claude 会在每个会话开始时读取它。",

1254 next: "打开 `/memory` 来审查 Claude 写了什么"1403 next: "打开 `/memory` 查看 Claude 写入的内容",

1404 prompt: "反复出现{mistake}的问题。请在 CLAUDE.md 中添加一条规则,避免再次发生",

1405 slots: {

1406 mistake: "在本项目使用具名导出的情况下使用默认导出"

1407 }

1255 },1408 },

1256 "resolve-merge-conflicts": {1409 "resolve-merge-conflicts": {

1257 title: "解决合并冲突",1410 title: "解决合并冲突",

1258 teaches: "说出你想要的状态,而不是要保留哪些标记。要求推理使合并可审查,而不是黑盒。"1411 teaches: "说明您想要的最终状态,而不是要保留哪些标记。要求说明理由,能让合并结果可审查,而不是一个黑盒。",

1412 prompt: "解决此分支中的合并冲突,并说明从每一方各保留了哪些内容"

1259 },1413 },

1260 "commit-with-a-generated": {1414 "commit-with-a-generated": {

1261 title: "使用生成的消息提交",1415 title: "使用生成的提交信息进行提交",

1262 teaches: "让 Claude 从差异中推导消息。它匹配你的存储库的现有提交风格。"1416 teaches: "让 Claude 根据 diff 生成提交信息。它会匹配您仓库现有的提交风格。",

1417 prompt: "提交这些更改,并附上一条总结我所做工作的提交信息"

1263 },1418 },

1264 "open-a-pull-request": {1419 "open-a-pull-request": {

1265 title: "从工单打开拉取请求",1420 title: "根据工单创建 Pull Request",

1266 teaches: "跳过跟踪器、编辑器和 GitHub 之间的上下文切换。一个提示词读取规范、进行更改并打开 PR。"1421 teaches: "省去在跟踪器、编辑器和 GitHub 之间来回切换。一个提示词即可读取需求、完成更改并创建 PR。",

1422 prompt: "找到关于{topic}的 {tracker} 工单,并创建一个实现它的 PR",

1423 slots: {

1424 tracker: "Linear",

1425 topic: "登录超时"

1426 }

1267 },1427 },

1268 "draft-release-notes-from": {1428 "draft-release-notes-from": {

1269 title: "从 git 历史起草发布说明",1429 title: "根据 git 历史起草发布说明",

1270 teaches: "给出两个参考点和你想要的结构。Claude 读取它们之间的提交日志并起草你可以编辑的更改日志。",1430 teaches: "给出两个参考点以及您想要的结构。Claude 会读取两者之间的提交日志,并起草一份可供您编辑的更新日志。",

1271 next: "将此保存为 `/changelog` 技能"1431 next: "将此保存为 `/changelog` skill",

1432 prompt: "比较 {from} 和 {to},按功能、修复和破坏性变更分组起草发布说明",

1433 slots: {

1434 from: "v2.3.0",

1435 to: "v2.4.0"

1436 }

1272 },1437 },

1273 "write-a-ci-workflow": {1438 "write-a-ci-workflow": {

1274 title: "编写 CI 工作流",1439 title: "编写 CI 工作流",

1275 teaches: "描述它应该何时运行以及它应该做什么;YAML 为你生成,与你的项目的构建和测试命令匹配。"1440 teaches: "描述它应在何时运行以及应做什么;系统会为您生成 YAML,并与项目的构建和测试命令相匹配。",

1441 prompt: "编写一个 GitHub Actions 工作流,在每次推送到 {branch} 时{steps}",

1442 slots: {

1443 steps: "运行测试并部署到预发布环境",

1444 branch: "main"

1445 }

1276 },1446 },

1277 "find-and-fix-a": {1447 "find-and-fix-a": {

1278 title: "找到并修复失败的测试",1448 title: "找到并修复失败的测试",

1279 teaches: "描述症状;你不需要知道哪个文件被破坏。Claude 运行测试以查看失败,将其追踪到源中,并修复它。"1449 teaches: "描述症状即可;您无需知道是哪个文件出了问题。Claude 会运行测试查看失败情况,追踪到源代码中,并进行修复。",

1450 prompt: "{test} 测试失败了,找出原因并修复",

1451 slots: {

1452 test: "UserAuth"

1453 }

1280 },1454 },

1281 "investigate-a-reported-error": {1455 "investigate-a-reported-error": {

1282 title: "调查报告的错误",1456 title: "调查报告的错误",

1283 teaches: "描述症状和位置;Claude 读取相关代码路径并追踪可能的原因。如果你有堆栈跟踪或日志,请粘贴它们。",1457 teaches: "描述症状和位置;Claude 会读取相关代码路径并追踪可能的原因。如果您有堆栈跟踪或日志,请一并粘贴。",

1284 next: "在你的运行手册中放置一个深层链接,用此提示词预填打开 Claude"1458 next: "在您的运行手册中放置一个深层链接,打开 Claude 时自动预填此提示词",

1459 prompt: "用户在 {where} 上遇到了{symptom}。请调查并告诉我发生了什么",

1460 slots: {

1461 symptom: "500 错误",

1462 where: "/api/settings"

1463 }

1285 },1464 },

1286 "fix-a-build-error": {1465 "fix-a-build-error": {

1287 title: "在根处修复构建错误",1466 title: "从根源修复构建错误",

1288 teaches: "要求根本原因和验证可防止表面级补丁抑制错误而不修复它。"1467 teaches: "要求修复根本原因并进行验证,可以避免只是压制错误而未真正修复的表面补丁。",

1468 prompt: "这是一个构建错误。修复根本原因并验证构建成功"

1289 },1469 },

1290 "investigate-a-production-incident": {1470 "investigate-a-production-incident": {

1291 title: "调查生产事件",1471 title: "调查生产事件",

1292 teaches: "列出要关联的证据来源,而不是要采取的步骤。Claude 一起读取日志、git 历史和配置以缩小原因。",1472 teaches: "列出需要关联分析的证据来源,而不是要采取的步骤。Claude 会综合读取日志、git 历史和配置,以缩小原因范围。",

1293 next: "通过 MCP 连接 Sentry 或你的日志存储"1473 next: "通过 MCP 连接 Sentry 或您的日志存储",

1474 prompt: "{symptom}。检查日志、最近的部署和配置更改,然后告诉我最可能的原因",

1475 slots: {

1476 symptom: "结账端点从一小时前开始返回 500"

1477 }

1294 },1478 },

1295 "query-logs-in-plain": {1479 "query-logs-in-plain": {

1296 title: "用纯英文查询日志",1480 title: "用自然语言查询日志",

1297 teaches: "问问题而不是编写 SQL。Claude 构建查询,针对你连接的日志运行它,并显示查询和结果,以便你可以检查运行了什么。"1481 teaches: "直接提出问题,而不是编写 SQL。Claude 会构建查询、在您连接的日志上运行,并同时展示查询语句和结果,方便您核对实际运行的内容。",

1482 prompt: "显示{scope}在{timeframe}内的所有{events}。编写查询、运行它,并告诉我哪些地方值得注意",

1483 slots: {

1484 events: "登录失败",

1485 scope: "认证服务",

1486 timeframe: "过去 24 小时"

1487 }

1298 },1488 },

1299 "diagnose-from-a-console": {1489 "diagnose-from-a-console": {

1300 title: "从控制台屏幕截图诊断",1490 title: "根据控制台截图进行诊断",

1301 teaches: "云控制台向你显示问题,但不显示修复它的命令。Claude 读取屏幕截图并将仪表板转换为要运行的 kubectl、gcloud 或 aws 命令。"1491 teaches: "云控制台会向您展示问题,但不会给出修复命令。Claude 会读取截图,并将仪表板内容转换为需要运行的 kubectl、gcloud 或 aws 命令。",

1492 prompt: "这是{console}的截图。请带我分析{resource}为什么失败,并给出修复它的确切命令",

1493 slots: {

1494 console: "GCP Kubernetes 仪表板",

1495 resource: "这个 pod"

1496 }

1302 },1497 },

1303 "analyze-a-data-file": {1498 "analyze-a-data-file": {

1304 title: "分析数据文件",1499 title: "分析数据文件",

1305 teaches: "一次性问题不需要一次性脚本。指向项目文件夹中的文件,Claude 直接读取它,找到模式,并将输出写入你要求的位置。",1500 teaches: "一次性的问题不需要一次性的脚本。指向项目文件夹中的文件,Claude 会直接读取它、找出规律,并将输出写到您指定的位置。",

1306 next: "通过 MCP 连接数据源,而不是导出文件"1501 next: "通过 MCP 连接数据源,而不是导出文件",

1502 prompt: "读取 {file},总结关键规律,并将结果写入{output}",

1503 slots: {

1504 file: "@reports/q1-signups.csv",

1505 output: "一个带图表的 HTML 页面,然后在我的浏览器中打开它"

1506 }

1307 },1507 },

1308 "generate-variations-from-performance": {1508 "generate-variations-from-performance": {

1309 title: "从性能数据生成变体",1509 title: "根据效果数据生成变体",

1310 teaches: "在开始时说明约束,以便生成保持在限制内。Claude 读取指标,选择要替换的内容,并生成适合的替代方案。",1510 teaches: "在一开始就说明约束,让生成内容不超出限制。Claude 会读取指标,挑选需要替换的内容,并生成符合要求的替代方案。",

1311 next: "通过 MCP 连接广告平台,而不是导出文件"1511 next: "通过 MCP 连接广告平台,而不是导出文件",

1512 prompt: "读取 {file},找出表现不佳的{items},并生成 {n} 个不超过 {limit} 个字符的新变体",

1513 slots: {

1514 file: "@ads-performance.csv",

1515 items: "标题",

1516 n: "20",

1517 limit: "90"

1518 }

1312 },1519 },

1313 "turn-a-recurring-task": {1520 "turn-a-recurring-task": {

1314 title: "将重复任务转变为技能",1521 title: "将重复任务转化为 skill",

1315 teaches: "命名步骤一次;将其重用为命令。Claude 编写任何团队成员都可以运行的 [技能](/docs/zh-CN/skills)。"1522 teaches: "只需说明一次步骤,即可作为命令反复使用。Claude 会编写一个团队中任何人都能运行的 [skill](/docs/zh-CN/skills)。",

1523 prompt: "为此项目创建一个 /{name} skill,用于{steps}",

1524 slots: {

1525 name: "ship",

1526 steps: "运行 linter 和测试,然后起草提交信息"

1527 }

1316 },1528 },

1317 "add-a-hook-for": {1529 "add-a-hook-for": {

1318 title: "为重复行为添加钩子",1530 title: "为重复行为添加 hook",

1319 teaches: "钩子使行为自动化,而不是你必须记住要求的东西。描述触发器和操作,Claude 编写 [钩子](/docs/zh-CN/hooks) 配置。"1531 teaches: "hook 能让某个行为自动发生,而不必每次都记得提出要求。描述触发条件和操作,Claude 就会编写 [hook](/docs/zh-CN/hooks) 配置。",

1532 prompt: "编写一个 hook,在每次{event}后{action}",

1533 slots: {

1534 action: "运行 prettier",

1535 event: "编辑 .ts 或 .tsx 文件"

1536 }

1320 },1537 },

1321 "connect-a-tool-with": {1538 "connect-a-tool-with": {

1322 title: "使用 MCP 连接工具",1539 title: "使用 MCP 连接工具",

1323 teaches: "连接源一次,而不是每个会话粘贴数据。在 [MCP](/docs/zh-CN/mcp) 设置后,当你询问它时,Claude 直接从工具读取。"1540 teaches: "一次性连接数据源,而不是每个会话都粘贴数据。完成 [MCP](/docs/zh-CN/mcp) 设置后,当您询问相关内容时,Claude 会直接从该工具读取数据。",

1541 prompt: "设置 {server} MCP 服务器,以便直接读取我的{data}",

1542 slots: {

1543 server: "Sentry",

1544 data: "错误报告"

1545 }

1324 },1546 },

1325 "capture-what-to-remember": {1547 "capture-what-to-remember": {

1326 title: "捕获下次要记住的内容",1548 title: "记录下次需要记住的内容",

1327 teaches: "在你忘记之前询问。Claude 知道它在这个会话中必须弄清楚什么,并提议 [CLAUDE.md](/docs/zh-CN/memory) 条目,以便下一个会话以该上下文开始。"1549 teaches: "趁还没忘记时询问。Claude 知道它在本次会话中需要摸索出哪些内容,并会建议添加到 [CLAUDE.md](/docs/zh-CN/memory) 的条目,让下一个会话从这些上下文开始。",

1550 prompt: "总结我们在本次会话中做了什么,并建议向 CLAUDE.md 添加哪些内容"

1328 }1551 }

1329};1552};

1330 1553 

remote-control.md +35 −21

Details

220 220 

221这些命令在服务器停止后约四小时内有效。之后,运行 `claude remote-control` 以启动新会话。如果您在此期间存档了会话,`--continue` 和 `--session-id` 在 Claude Code v2.1.228 或更高版本上取消存档它。221这些命令在服务器停止后约四小时内有效。之后,运行 `claude remote-control` 以启动新会话。如果您在此期间存档了会话,`--continue` 和 `--session-id` 在 Claude Code v2.1.228 或更高版本上取消存档它。

222 222 

223要恢复您使用 `claude --remote-control` 或 `/remote-control` 启动的会话,请使用 `claude --continue` 或 `claude --resume` 恢复对话。如果远程控制无法重新连接,请参阅[无法重新连接到您的远程控制会话](#couldnt-reconnect-to-your-remote-control-session)。223要恢复您使用 `claude --remote-control` 或 `/remote-control` 启动的会话,请使用 `claude --continue` 或 `claude --resume` 恢复对话。有关恢复的对话以何种权限模式启动,请参阅[恢复时的权限模式](/docs/zh-CN/sessions#permission-mode-on-resume)。如果 Remote Control 无法重新连接,请参阅[无法重新连接到您的 Remote Control 会话](#couldnt-reconnect-to-your-remote-control-session)。

224 224 

225如果您在第一个终端仍然打开远程控制的情况下在第二个终端中恢复对话,Claude Code 会在第二个终端中打印 `Remote Control not started here` 通知,并改为在那里关闭远程控制,而不是从第一个终端取走会话。在第二个终端中运行 `/remote-control` 以将远程控制移动到它。225如果您在第一个终端仍然打开远程控制的情况下在第二个终端中恢复对话,Claude Code 会在第二个终端中打印 `Remote Control not started here` 通知,并改为在那里关闭远程控制,而不是从第一个终端取走会话。在第二个终端中运行 `/remote-control` 以将远程控制移动到它。

226 226 


257 257 

258生物识别检查通过操作系统或浏览器在设备上运行,与通行密钥登录的机制相同。Anthropic 从不接收或存储指纹、面部数据或任何其他生物识别信息。仅存储设备的公钥和基本元数据,如显示名称、平台和注册时间。258生物识别检查通过操作系统或浏览器在设备上运行,与通行密钥登录的机制相同。Anthropic 从不接收或存储指纹、面部数据或任何其他生物识别信息。仅存储设备的公钥和基本元数据,如显示名称、平台和注册时间。

259 259 

260该设置仅适用于 Remote Control。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。260该设置同时适用于 Claude Code 和 [Cowork](https://claude.com/docs/cowork/overview) 中的 Remote Control。本页介绍 Claude Code 方面的内容。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。

261 261 

262<h3 id="enable-trusted-devices-for-your-organization">262<h3 id="enable-trusted-devices-for-your-organization">

263 为 Team 或 Enterprise 组织启用受信任的设备263 为 Team 或 Enterprise 组织启用受信任的设备


361</h2>361</h2>

362 362 

363* **每个交互式进程只能有一个远程会话**:在服务器模式之外,每个 Claude Code 实例一次只支持一个远程会话。使用[服务器模式](#start-a-remote-control-session)从单个进程运行多个并发会话。363* **每个交互式进程只能有一个远程会话**:在服务器模式之外,每个 Claude Code 实例一次只支持一个远程会话。使用[服务器模式](#start-a-remote-control-session)从单个进程运行多个并发会话。

364* **本地进程必须保持运行**:Remote Control 作为本地进程运行。如果你关闭终端、退出桌面应用或 VS Code,或以其他方式停止 `claude` 进程,会话将离线,直到你[恢复它](#resume-sessions-after-stopping-the-server)。要在断开 SSH 连接后保持远程机器上的会话运行,请在 `tmux` 或 `screen` 内启动它。364* **本地进程必须保持运行**:Remote Control 作为本地进程运行。如果您关闭终端、退出桌面应用或 VS Code,或以其他方式停止 `claude` 进程,会话将离线,直到您[恢复它](#resume-sessions-after-stopping-the-server)。要在断开 SSH 连接后保持远程机器上的会话运行,请在 `tmux` 或 `screen` 内启动它。

365* **服务器模式中的崩溃会话**:如果由 `claude remote-control` 提供的会话崩溃,请从连接的设备向其发送消息。Claude Code 会再次提供它。你不必重启服务器。需要 Claude Code v2.1.238 或更高版本。365* **服务器模式中的崩溃会话**:如果由 `claude remote-control` 提供的会话崩溃,请从连接的设备向其发送消息。Claude Code 会再次提供它。您不必重启服务器。需要 Claude Code v2.1.238 或更高版本。

366* **已连接会话上的 HTTP 403 拒绝**:一旦交互式会话连接,当你的机器和 Anthropic 服务器之间的某个地方返回 HTTP 403 时(在 VPN 或网络更改后可能发生),Claude Code 会重试最多三分钟。如果拒绝持续更长时间,Claude Code 会断开连接,原因会说明是什么拒绝了:网络边缘,或你自己网络上的代理、VPN 或防火墙。366* **已连接会话上的 HTTP 403 拒绝**:一旦交互式会话连接,当您的机器和 Anthropic 服务器之间的某个地方返回 HTTP 403 时(在 VPN 或网络更改后可能发生),Claude Code 会重试最多三分钟。如果拒绝持续更长时间,Claude Code 会断开连接,原因会说明是什么拒绝了:网络边缘,或您自己网络上的代理、VPN 或防火墙。

367* **扩展网络中断**:如果你的机器处于唤醒状态但无法到达网络,接下来的操作取决于模式:367* **扩展网络中断**:如果您的机器处于唤醒状态但无法到达网络,接下来的操作取决于模式:

368 * **服务器模式**:Claude Code 在大约 10 分钟后放弃,`claude remote-control` 进程退出。再次运行 `claude remote-control` 以启动新会话。368 * **服务器模式**:Claude Code 在大约 10 分钟后放弃,`claude remote-control` 进程退出。再次运行 `claude remote-control` 以启动新会话。

369 * **交互式会话**:继续在本地工作。Claude Code 会在中断期间持续重试,并在网络恢复时自动重新连接。369 * **交互式会话**:继续在本地工作。Claude Code 会在中断期间持续重试,并在网络恢复时自动重新连接。

370* **未能下载的附件**:如果您从手机或浏览器附加的文件无法下载到您的机器,Claude 仍会收到您的消息以及已下载的文件。Claude Code 会在消息中添加一条说明(例如 `[1 of 3 attachments did not arrive]`)来代替缺失的文件。

370* **存在心跳失败**:如果交互式会话断开连接并显示 `could not reach the Remote Control server for about 30 minutes`,运行 `/remote-control` 以重新连接。371* **存在心跳失败**:如果交互式会话断开连接并显示 `could not reach the Remote Control server for about 30 minutes`,运行 `/remote-control` 以重新连接。

371* **转发的对话过期**:Claude Code 会保持权限提示和 `AskUserQuestion` 问题打开,直到你回答它们。当 Claude Code 将另一种对话转发到远程会话时,例如安全拒绝后显示的模型选择提示,默认情况下它会等待五分钟,然后关闭对话并继续使用对话的无操作默认值。设置 [`dialogExpiry`](/docs/zh-CN/settings-reference#dialogexpiry) 以调整或禁用截止时间。需要 Claude Code v2.1.224 或更高版本。372* **转发的对话过期**:Claude Code 会保持权限提示和 `AskUserQuestion` 问题打开,直到您回答它们。当 Claude Code 将另一种对话转发到远程会话时,例如安全拒绝后显示的模型选择提示,默认情况下它会等待五分钟,然后关闭对话并继续使用对话的无操作默认值。设置 [`dialogExpiry`](/docs/zh-CN/settings-reference#dialogexpiry) 以调整或禁用截止时间。需要 Claude Code v2.1.224 或更高版本。

372* **Fable 使用额度同意提示未转发**:Claude Code 仅在会话运行的地方显示中途[Fable 使用额度同意提示](/docs/zh-CN/model-config#fable-and-usage-credits),而不是在你的设备上。当会话在终端中运行且那里没有人在 Claude Code 关闭提示之前回答时,该轮结束而不发送请求;请参阅[确认提示未被回答](/docs/zh-CN/errors#the-prompt-to-confirm-went-unanswered)。373* **Fable 使用额度同意提示未转发**:Claude Code 仅在会话运行的地方显示中途[Fable 使用额度同意提示](/docs/zh-CN/model-config#fable-and-usage-credits),而不是在您的设备上。当会话在终端中运行且那里没有人在 Claude Code 关闭提示之前回答时,该轮结束而不发送请求;请参阅[确认提示未被回答](/docs/zh-CN/errors#the-prompt-to-confirm-went-unanswered)。

373* **某些命令仅限本地**:仅在终端界面中运行的命令,例如 `/plugin` 或 `/resume`,仅从本地 CLI 工作,无论你是否传递参数。以下命令可从移动和网络使用:374* **某些命令仅限本地**:仅在终端界面中运行的命令,例如 `/plugin` 或 `/resume`,仅从本地 CLI 工作,无论您是否传递参数。从移动或网络输入 `/claude-api` 时,它同样不可用。Claude 仍可在那里[自行加载该 skill](/docs/zh-CN/skills#work-on-claude-api-projects)。以下命令可从移动和网络使用:

374 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 打印计费 URL 而不是打开浏览器。`/reload-plugins` 仅在会话在交互式终端中运行时工作;没有交互式终端的会话会拒绝它。375 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 打印计费 URL 而不是打开浏览器。`/reload-plugins` 仅在会话在交互式终端中运行时工作;没有交互式终端的会话会拒绝它。

375 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。从移动和网络,`/model` 和 `/effort` 将参数用于代替终端选择器或滑块。376 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。从移动和网络,`/model` 和 `/effort` 将参数用于代替终端选择器或滑块。

376 * `/mcp`:从移动应用,返回服务器状态的文本摘要而不是打开选择器。在网络上,`/mcp` 单独打开 [claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 的目录而不是返回摘要。`reconnect`、`enable` 和 `disable` [子命令](/docs/zh-CN/commands#all-commands)可从两者工作。与本地 CLI 不同,`/mcp reconnect` 不带服务器名称会重新连接每个已失败或需要身份验证的服务器。377 * `/mcp`:从移动应用,返回服务器状态的文本摘要而不是打开选择器。在网络上,`/mcp` 单独打开 [claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 的目录而不是返回摘要。`reconnect`、`enable` 和 `disable` [子命令](/docs/zh-CN/commands#all-commands)可从两者工作。`/mcp reconnect` 不带服务器名称时会重试每个已失败或需要身份验证的服务器。

377 * `/config`:从移动应用,传递 `key=value` 以设置设置,或不带参数运行它以列出你可以设置的键。在网络上,`/config` 打开你的设置的 Claude Code 部分,并忽略命令后的文本。378 * `/config`:从移动应用,传递 `key=value` 以设置设置,或不带参数运行它以列出您可以设置的键。在网络上,`/config` 打开您的设置的 Claude Code 部分,并忽略命令后的文本。

378 * 在 Team 和 Enterprise 上,从移动或网络的 `/usage-credits` 不会向你的管理员发送[使用额度请求](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)。发送需要仅在交互式 CLI 中出现的确认,因此命令告诉你改为在那里运行它。379 * 在 Team 和 Enterprise 上,从移动或网络的 `/usage-credits` 不会向您的管理员发送[使用额度请求](/docs/zh-CN/costs#add-usage-credits-to-your-subscription)。发送需要仅在交互式 CLI 中出现的确认,因此命令告诉您改为在那里运行它。

379 * `/autocompact`,从 v2.1.221:将窗口大小作为参数传递,例如 `/autocompact 500k`。不带参数,它打印当前窗口大小作为文本,而不是打开命令在终端会话中显示的对话。380 * `/autocompact`,从 v2.1.221:将窗口大小作为参数传递,例如 `/autocompact 500k`。不带参数,它打印当前窗口大小作为文本,而不是打开命令在终端会话中显示的对话。

380 * `/advisor`,从 v2.1.260:将模型作为参数传递,例如 `/advisor opus`,或传递 `off` 以关闭顾问。两种形式仅适用于当前会话,并保持你保存的默认值不变。不带参数,它打印当前顾问作为文本,而不是打开选择器。381 * `/advisor`,从 v2.1.260:将模型作为参数传递,例如 `/advisor opus`,或传递 `off` 以关闭顾问。两种形式仅适用于当前会话,并保持您保存的默认值不变。不带参数,它打印当前顾问作为文本,而不是打开选择器。

381 * `/output-style`,从 v2.1.269:将样式名称作为参数传递,例如 `/output-style concise`,或不带参数运行它以列出样式。从移动和网络,你只能列出和选择[内置样式](/docs/zh-CN/output-styles#built-in-output-styles)。要使用[自定义样式](/docs/zh-CN/output-styles#create-a-custom-output-style),在会话本身中选择它。382 * `/output-style`,从 v2.1.269:将样式名称作为参数传递,例如 `/output-style concise`,或不带参数运行它以列出样式。从移动和网络,您只能列出和选择[内置样式](/docs/zh-CN/output-styles#built-in-output-styles)。要使用[自定义样式](/docs/zh-CN/output-styles#create-a-custom-output-style),在会话本身中选择它。

382 * `/focus`,从 v2.1.281:将 `on` 或 `off` 作为参数传递,例如 `/focus on`,或不带参数运行它以切换[焦点视图](/docs/zh-CN/commands#all-commands)。两种形式仅适用于当前会话,并保持你保存的选择不变。383 * `/focus`,从 v2.1.281:将 `on` 或 `off` 作为参数传递,例如 `/focus on`,或不带参数运行它以切换[焦点视图](/docs/zh-CN/commands#all-commands)。两种形式仅适用于当前会话,并保持您保存的选择不变。

383 384 

384<h2 id="troubleshooting">385<h2 id="troubleshooting">

385 故障排除386 故障排除


389 "Remote Control requires a claude.ai subscription"390 "Remote Control requires a claude.ai subscription"

390</h3>391</h3>

391 392 

392您未使用 claude.ai 账户登录,或者其他凭证优先于您的登录。该消息采用以下形式之一:393您未使用 claude.ai 账户登录,或者其他凭据优先于您的登录。该消息采用以下形式之一:

393 394 

394* 已登出,来自 `/remote-control` 或 `--remote-control`:`Remote Control requires a claude.ai subscription.` 或 `/remote-control requires a claude.ai subscription.`395* 已登出,来自 `/remote-control` 或 `--remote-control`:`Remote Control requires a claude.ai subscription.` 或 `/remote-control requires a claude.ai subscription.`

395* 已登出,来自 `claude remote-control`:`You must be logged in to use Remote Control. Remote Control is only available with claude.ai subscriptions.`396* 已登出,来自 `claude remote-control`:`You must be logged in to use Remote Control. Remote Control is only available with claude.ai subscriptions.`

396* 已登入,但正在使用 API 密钥或令牌:`Remote Control requires claude.ai subscription auth.` 后跟正在使用的凭证,例如 `ANTHROPIC_API_KEY is set, so this session is using API-key auth`。`apiKeyHelper` 设置和 `ANTHROPIC_AUTH_TOKEN` 的命名方式相同。397* 已登入,但正在使用 API 密钥或令牌:`Remote Control requires claude.ai subscription auth.` 后跟正在使用的凭据,例如 `ANTHROPIC_API_KEY is set, so this session is using API-key auth`。`apiKeyHelper` 设置和 `ANTHROPIC_AUTH_TOKEN` 的命名方式相同。

397 398 

398运行 `claude auth login` 并选择 claude.ai 选项。如果消息中提到 `ANTHROPIC_API_KEY` 或 `ANTHROPIC_AUTH_TOKEN`,请在设置它的任何地方删除它:您的 shell 环境或[设置文件](/docs/zh-CN/settings-reference#env)的 `env` 块。如果提到 `apiKeyHelper`,请删除该设置。399运行 `claude auth login` 并选择 claude.ai 选项。如果消息中提到 `ANTHROPIC_API_KEY` 或 `ANTHROPIC_AUTH_TOKEN`,请在设置它的任何地方删除它:您的 shell 环境或[设置文件](/docs/zh-CN/settings-reference#env)的 `env` 块。如果提到 `apiKeyHelper`,请删除该设置。

399 400 


440 441 

441会话不是直接与 Anthropic API 通信,Remote Control 需要这样做。这发生在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上。当 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 `api.anthropic.com` 以外的主机时,例如 [LLM 网关](/docs/zh-CN/llm-gateway)或代理,即使您使用 claude.ai 登录,也会发生这种情况。有关完整原因列表,请参阅[错误参考](/docs/zh-CN/errors#remote-control-requires-the-anthropic-api)。442会话不是直接与 Anthropic API 通信,Remote Control 需要这样做。这发生在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上。当 [`ANTHROPIC_BASE_URL`](/docs/zh-CN/env-vars) 指向 `api.anthropic.com` 以外的主机时,例如 [LLM 网关](/docs/zh-CN/llm-gateway)或代理,即使您使用 claude.ai 登录,也会发生这种情况。有关完整原因列表,请参阅[错误参考](/docs/zh-CN/errors#remote-control-requires-the-anthropic-api)。

442 443 

443消息命名了将会话路由离开 Anthropic API 的内容,例如 `CLAUDE_CODE_USE_BEDROCK` 或自定义 `ANTHROPIC_BASE_URL`。如果您有符合条件的 claude.ai 登录,请取消设置命名的变量,如果您在[设置](/docs/zh-CN/settings)中设置了它,请从 `env` 密钥中删除它,然后重新启动会话。444消息命名了将会话路由离开 Anthropic API 的内容,例如 `CLAUDE_CODE_USE_BEDROCK` 或自定义 `ANTHROPIC_BASE_URL`。如果您有符合条件的 claude.ai 登录,请取消设置命名的变量,如果您在[设置](/docs/zh-CN/settings)中设置了它,请从 `env` 键中删除它,然后重新启动会话。

444 445 

445<h3 id="remote-control-is-disabled-by-your-organization’s-policy">446<h3 id="remote-control-is-disabled-by-your-organizations-policy">

446 "Remote Control is disabled by your organization's policy"447 "Remote Control is disabled by your organization's policy"

447</h3>448</h3>

448 449 


455 456 

456在 v2.1.281 之前,当 Claude Code 未在此计算机上加载您的组织策略时,此消息也会出现,例如在离线启动后。更高版本将该状态报告为[`Couldn't verify your organization's policy for remote control`](#couldnt-verify-your-organizations-policy-for-remote-control)。457在 v2.1.281 之前,当 Claude Code 未在此计算机上加载您的组织策略时,此消息也会出现,例如在离线启动后。更高版本将该状态报告为[`Couldn't verify your organization's policy for remote control`](#couldnt-verify-your-organizations-policy-for-remote-control)。

457 458 

459<h3 id="remote-control-was-turned-off-by-your-organizations-policy">

460 "Remote Control was turned off by your organization's policy"

461</h3>

462 

463在会话已连接期间,您的组织策略不再允许 Remote Control,因此 Claude Code 断开了该会话的连接。会话之后的状态取决于您启动 Remote Control 的方式:

464 

465* **使用 `/remote-control`、`claude --remote-control` 或[自动连接](#enable-remote-control-for-all-sessions)**:会话继续运行但不再使用 Remote Control,Claude Code 会在 claude.ai 上将其归档

466* **使用 `claude remote-control`**:服务器停止并归档其所服务的会话,然后退出

467 

468您仍然可以通过[筛选已归档的会话](/docs/zh-CN/claude-code-on-the-web#archive-sessions)找到已归档的会话。

469 

470Remote Control 不会自动重新连接。要在您的组织重新允许后再次启用它,请在会话中运行 `/remote-control`,或在 shell 中运行 `claude remote-control`。在此计算机上的 Claude Code 获取到已更改的策略之前,这两个命令都会失败并显示 [`Remote Control is disabled by your organization's policy`](#remote-control-is-disabled-by-your-organizations-policy)。打开的会话大约每小时获取一次策略。要找出阻止 Remote Control 的原因,请将命令输出的完整文本与该条目进行对照。

471 

458<h3 id="couldnt-verify-your-organizations-policy-for-remote-control">472<h3 id="couldnt-verify-your-organizations-policy-for-remote-control">

459 "Couldn't verify your organization's policy for remote control"473 "Couldn't verify your organization's policy for remote control"

460</h3>474</h3>


474 "Remote credentials fetch failed"488 "Remote credentials fetch failed"

475</h3>489</h3>

476 490 

477Claude Code 无法从 Anthropic API 获取短期凭证来建立连接。使用 `--verbose` 重新运行以查看完整错误:491Claude Code 无法从 Anthropic API 获取短期凭据来建立连接。使用 `--verbose` 重新运行以查看完整错误:

478 492 

479```bash theme={null}493```bash theme={null}

480claude remote-control --verbose494claude remote-control --verbose


506 "Remote Control got an unexpected server response"520 "Remote Control got an unexpected server response"

507</h3>521</h3>

508 522 

509Remote Control 服务器接受了请求但以此版本的 Claude Code 无法读取的形式回复,同时创建远程会话或获取其凭证。在同一版本上重试会以相同方式失败。运行 `claude update`,然后运行 `/remote-control` 以重新连接。523Remote Control 服务器接受了请求但以此版本的 Claude Code 无法读取的形式回复,同时创建远程会话或获取其凭据。在同一版本上重试会以相同方式失败。运行 `claude update`,然后运行 `/remote-control` 以重新连接。

510 524 

511<h3 id="your-organization-requires-trusted-devices-for-remote-control-but-this-device-is-not-enrolled">525<h3 id="your-organization-requires-trusted-devices-for-remote-control-but-this-device-is-not-enrolled">

512 "Your organization requires Trusted Devices for Remote Control, but this device is not enrolled"526 "Your organization requires Trusted Devices for Remote Control, but this device is not enrolled"

routines.md +1 −5

Details

365 365 

366您添加的每个存储库在每次运行时都会被克隆。Claude 从存储库的默认分支开始,除非您的提示另有指定。366您添加的每个存储库在每次运行时都会被克隆。Claude 从存储库的默认分支开始,除非您的提示另有指定。

367 367 

368Claude 将其工作推送到以 `claude/` 为前缀的分支,这些分支始终被接受。当您的提示指示 Claude 推送到另一个分支时,Claude Code 会先检查推送,如果以下任何情况为真,则拒绝它:368Claude 将其工作推送到以 `claude/` 为前缀的分支,除非您的提示词指示它推送到其他分支。要控制运行可以推送到哪些分支,请在 GitHub 上使用分支保护规则或规则集。对于在 Anthropic 托管基础设施上的运行,以及通过 [Anthropic 的 git 代理](/docs/zh-CN/self-hosted-environments-deploy#use-the-anthropic-git-proxy)推送的自托管运行,GitHub 会将这些规则应用于您连接的 GitHub 访问权限,因此该访问权限可以绕过的规则不会阻止运行的推送。使用您的部署所提供的 git 凭据进行推送的自托管运行,则会根据这些凭据进行检查。请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy#configure-git)。

369 

370* 该分支在 GitHub 上受保护

371* 其他人有一个来自该分支的开放拉取请求

372* 该分支包含由您以外的人创建的提交

373 369 

374<h3 id="connectors">370<h3 id="connectors">

375 Connectors371 Connectors

Details

91 Sandbox runtime91 Sandbox runtime

92</h2>92</h2>

93 93 

94[`@anthropic-ai/sandbox-runtime`](https://github.com/anthropic-experimental/sandbox-runtime) 包将整个进程包装在内置 Bash 沙箱使用的相同 Seatbelt 或 bubblewrap 隔离中。通过它运行 Claude Code 会限制会话中的每个工具、hook 和 MCP 服务器,而不仅仅是 Bash 命令。运行时是测试版研究预览,其配置格式可能会随着包的发展而改变。94[`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) 包将整个进程包装在内置 Bash 沙箱使用的相同 Seatbelt 或 bubblewrap 隔离中。通过该运行时运行 Claude Code 不仅会限制 shell 命令,还会限制会话的工具、hook 和 MCP 服务器。运行时是测试版研究预览,其配置格式可能会随着包的发展而改变。

95 95 

96本部分涵盖您配置的内容以及运行时自身强制执行的内容。有关在 Agent SDK 应用程序中部署运行时,请参阅[安全部署指南](/docs/zh-CN/agent-sdk/secure-deployment#sandbox-runtime)。96本部分涵盖您配置的内容以及运行时自身强制执行的内容。有关在 Agent SDK 应用程序中部署运行时,请参阅[安全部署指南](/docs/zh-CN/agent-sdk/secure-deployment#sandbox-runtime)。

97 97 


101 101 

102在 Linux 和 WSL2 上,运行时依赖于与内置沙箱相同的 `bubblewrap` 和 `socat` 包,加上 `ripgrep`,Claude Code 捆绑了它,但独立运行时从您的 PATH 中解析。按照[设置 Linux 和 WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 中的说明安装 `bubblewrap` 和 `socat`,以及从您的发行版包管理器安装 `ripgrep`。在 macOS 上,您不需要任何额外的包。运行时在那里使用内置的 Seatbelt 沙箱。102在 Linux 和 WSL2 上,运行时依赖于与内置沙箱相同的 `bubblewrap` 和 `socat` 包,加上 `ripgrep`,Claude Code 捆绑了它,但独立运行时从您的 PATH 中解析。按照[设置 Linux 和 WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 中的说明安装 `bubblewrap` 和 `socat`,以及从您的发行版包管理器安装 `ripgrep`。在 macOS 上,您不需要任何额外的包。运行时在那里使用内置的 Seatbelt 沙箱。

103 103 

104默认情况下,运行时拒绝网络访问并将写入限制在一小组内置运行时路径,因此在通过它启动 Claude Code 之前配置它。将您的配置放在 `~/.srt-settings.json` 中,或在您使用 `--settings` 传递的文件中。包 [README](https://github.com/anthropic-experimental/sandbox-runtime) 记录了完整的配置架构。104默认情况下,运行时拒绝网络访问并将写入限制在一小组内置运行时路径,因此在通过它启动 Claude Code 之前配置它。将您的配置放在 `~/.srt-settings.json` 中,或在您使用 `--settings` 传递的文件中。包 [README](https://github.com/anthropics/sandbox-runtime) 记录了配置 schema。

105 105 

106至少允许写入访问:106至少允许写入访问:

107 107 

108* 您的项目目录。108* 您的项目目录。

109* Claude Code 的配置路径 `~/.claude` 和 `~/.claude.json`。109* Claude Code 的配置路径 `~/.claude` 和 `~/.claude.json`。

110* `/tmp`,Claude Code 在其中写入运行时文件。110* Claude Code 写入运行时文件的目录。除非您设置了 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars),否则该目录为:

111 * **Linux 和 WSL2**:`/tmp`

112 * **macOS**:`/private/tmp`。`/tmp` 是指向该目录的符号链接,而 Seatbelt 检查的是解析后的路径。

111 113 

112允许您的会话需要的网络域:114允许您的会话需要的网络域:

113 115 


120mkdir -p ~/.claude && { [ -f ~/.claude.json ] || echo '{}' > ~/.claude.json; }122mkdir -p ~/.claude && { [ -f ~/.claude.json ] || echo '{}' > ~/.claude.json; }

121```123```

122 124 

123配置文件就位后,使用 `npx` 启动 Claude Code 并传递 `claude` 作为要包装的命令:125设置文件就位后,使用 `npx` 启动 Claude Code 并传递 `claude` 作为要包装的命令:

124 126 

125```bash theme={null}127```bash theme={null}

126npx @anthropic-ai/sandbox-runtime claude128npx @anthropic-ai/sandbox-runtime claude


136 138 

137* `denyWrite` 优先于 `allowWrite`。139* `denyWrite` 优先于 `allowWrite`。

138* 在项目根目录,运行时拒绝 `.git/hooks`,拒绝 `.git/config` 除非您设置 `filesystem.allowGitConfig: true`,并拒绝 `.mcp.json`、`.claude/commands`、`.claude/agents` 和 shell 启动文件。140* 在项目根目录,运行时拒绝 `.git/hooks`,拒绝 `.git/config` 除非您设置 `filesystem.allowGitConfig: true`,并拒绝 `.mcp.json`、`.claude/commands`、`.claude/agents` 和 shell 启动文件。

139* 在 macOS 上,这些拒绝在写入发生时被检查,因此它们也涵盖嵌套文件和在会话期间创建的存储库。141* 在 macOS 上,这些拒绝在写入发生时被检查,因此它们也涵盖嵌套文件和在会话期间创建的仓库。

140* 在 Linux 和 WSL2 上,运行时在启动时构建拒绝列表一次。它可靠地涵盖项目根目录,对当时存在的嵌套副本进行最佳努力的浅层扫描,并不涵盖会话稍后创建的任何内容,例如 `git init`、`git clone` 或脚手架。README 的 `mandatoryDenySearchDepth` 部分描述了扫描的确切语义。142* 在 Linux 和 WSL2 上,运行时在启动时构建拒绝列表一次。它可靠地涵盖项目根目录,对当时存在的嵌套副本进行最佳努力的浅层扫描,并不涵盖会话稍后创建的任何内容,例如 `git init`、`git clone` 或脚手架。README 的 `mandatoryDenySearchDepth` 部分描述了扫描的确切语义。

141* 如果 `~/.srt-settings.json` 不存在且您没有传递 `--settings`,运行时仍然启动。它阻止网络访问并将写入限制在内置运行时路径,例如 `/tmp/claude`、`~/.npm/_logs` 和 `~/.claude/debug`。不要将干净的启动作为您的设置已加载的证明。143* 如果 `~/.srt-settings.json` 不存在且您没有传递 `--settings`,运行时仍然启动。它阻止网络访问并将写入限制在内置运行时路径,例如 `/tmp/claude`、`~/.npm/_logs` 和 `~/.claude/debug`。不要将干净的启动作为您的设置已加载的证明。

142* 如果设置文件存在但为空、不可读或无效,运行时拒绝启动,无论是 `~/.srt-settings.json` 还是您使用 `--settings` 传递的文件。如果 `--settings` 文件不存在,它也拒绝启动。144* 如果设置文件存在但为空、不可读或无效,运行时拒绝启动,无论是 `~/.srt-settings.json` 还是您使用 `--settings` 传递的文件。如果 `--settings` 文件不存在,它也拒绝启动。


165 167 

166几个托管沙箱和远程执行服务可以为您托管容器。与您操作的任何容器相同的检查清单适用:查看挂载的可写内容、容器内可访问的凭据和令牌,以及网络出站策略允许的内容。168几个托管沙箱和远程执行服务可以为您托管容器。与您操作的任何容器相同的检查清单适用:查看挂载的可写内容、容器内可访问的凭据和令牌,以及网络出站策略允许的内容。

167 169 

168您可以在容器内分层内置 Bash 沙箱以进行按命令限制。无特权容器需要 [Sandboxing troubleshooting](/docs/zh-CN/sandboxing#troubleshooting) 中描述的嵌套沙箱设置。170您可以在容器内分层内置 Bash 沙箱以进行按命令限制。无特权容器需要 `enableWeakerNestedSandbox`,详见 [Bubblewrap 在容器内无法启动](/docs/zh-CN/sandboxing#bubblewrap-fails-to-start-inside-a-container)。

169 171 

170<h2 id="virtual-machine">172<h2 id="virtual-machine">

171 Virtual machine173 Virtual machine

sandboxing.md +603 −302

Details

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> 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.3> Use this file to discover all available pages before exploring further.

4 4 

5# 配置沙箱化 Bash 工具5# 配置沙箱化的 Bash 工具

6 6 

7> 了解 Claude Code 的沙箱化 Bash 工具如何提供文件系统和网络隔离,以实现更安全、更自主的代理执行。7> 使用内置沙箱限制 Claude Code 的 shell 命令可以访问的文件和网络主机。启用沙箱、设置边界,并修复它导致的问题。

8 8 

9Bash 沙箱让 Claude 可以运行大多数 shell 命令,而无需停下来请求权限。与其批准每个命令不同,你定义命令可以接触哪些文件和网络域,操作系统为每个 Bash、PowerShell 或 Monitor 命令及其子进程强制执行该边界。9Bash 沙箱是操作系统围绕 Claude 在您的计算机上运行的 shell 命令强制执行的边界。您可以设置这些命令可以访问哪些文件和网络域,这些限制适用于 Bash、PowerShell 和 Monitor 命令及其启动的进程。由于操作系统会在命令运行时应用这些限制,Claude Code 可以[运行沙箱化命令而无需询问您](#sandbox-modes)逐一批准。

10 

11沙箱仅涵盖 shell 命令。Claude 的文件工具、MCP 服务器和 hook [在沙箱之外运行](#what-runs-outside-the-sandbox)。

12 

13沙箱可在 macOS、Linux 和 WSL2 上运行。在原生 Windows 上,Claude Code 以非沙箱方式运行命令。要在 Windows 计算机上使用沙箱,请在 WSL2 发行版中运行 Claude Code。

10 14 

11<Note>15<Note>

12 要比较其他隔离方法,如开发容器、自定义容器和虚拟机,请参阅 [Sandbox environments](/docs/zh-CN/sandbox-environments)。要减少 Bash 以外工具的权限提示,请参阅 [permission modes](/docs/zh-CN/permission-modes)。16 本页介绍您自己计算机上围绕 shell 命令的沙箱。其他页面涵盖相关问题:

17 

18 * 有关云端会话如何隔离,请参阅[安全与隔离](/docs/zh-CN/claude-code-on-the-web#security-and-isolation)

19 * 要比较开发容器、自定义容器和虚拟机等其他隔离方法,请参阅[沙箱环境](/docs/zh-CN/sandbox-environments)

20 * 要减少 Bash 以外工具的权限提示,请参阅[权限模式](/docs/zh-CN/permission-modes)

13</Note>21</Note>

14 22 

23<h2 id="what-the-sandbox-restricts">

24 沙箱限制的内容

25</h2>

26 

27沙箱启用时,Claude 运行的 shell 命令会在其边界内启动,这些命令启动的进程也是如此。沙箱默认处于关闭状态。要启用它,请按照[入门](#get-started)中的说明在会话中运行 `/sandbox`,或在 `~/.claude/settings.json` 等[设置文件](/docs/zh-CN/settings)中将 [`sandbox.enabled`](/docs/zh-CN/settings-reference#sandbox-enabled) 设置为 `true`。

28 

29下表列出了沙箱化命令默认可以访问的内容,以及可更改各项默认值的设置。

30 

31| 访问 | 默认值 | 更改方式 |

32| :- | :- | :- |

33| 写入 | 工作目录、每个用户独立的临时目录,以及[您添加的目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。[受保护路径](#protected-paths)始终禁止写入 | [`filesystem.allowWrite`](/docs/zh-CN/settings-reference#sandbox-filesystem-allowwrite)、[`filesystem.denyWrite`](/docs/zh-CN/settings-reference#sandbox-filesystem-denywrite) |

34| 读取 | 机器上的大部分内容,包括 `~/.ssh` 和 `~/.aws/credentials` 等凭据文件 | [`filesystem.denyRead`](/docs/zh-CN/settings-reference#sandbox-filesystem-denyread)、[`credentials`](#protect-credentials) |

35| 网络 | 没有直接的出站路由。连接会经过您机器上的代理,该代理会根据您允许的域名检查每个主机,允许的域名列表初始为空。您的权限模式决定了[其他主机的处理方式](#hosts-outside-your-allowed-domains) | [`network.allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains)、[`network.deniedDomains`](/docs/zh-CN/settings-reference#sandbox-network-denieddomains) |

36| 环境变量 | 继承自 Claude Code,包括其环境中的任何机密信息 | [`credentials`](#protect-credentials)、[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars) |

37 

38Claude Code 基于开源的 [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) 包构建沙箱。

39 

40<h3 id="what-runs-outside-the-sandbox">

41 在沙箱之外运行的内容

42</h3>

43 

44沙箱封装的是 shell 命令。以下工具和进程在沙箱之外运行:

45 

46* **内置文件和 Web 工具**:Read、Edit、Write、WebFetch 和 WebSearch 等工具改为遵循[权限规则](/docs/zh-CN/permissions)。`denyRead` 条目不会阻止 Read 工具,`allowedDomains` 也不会限制 WebFetch

47* **Claude Code 启动的其他进程**:命令 [hook](/docs/zh-CN/hooks)、本地 [MCP 服务器](/docs/zh-CN/mcp)、[插件监视器](/docs/zh-CN/plugins/components#monitors)、[LSP 服务器](/docs/zh-CN/tools-reference#lsp-tool-behavior),以及您的[状态栏](/docs/zh-CN/statusline)命令和 `apiKeyHelper` 等辅助命令,都以您的完整访问权限运行

48 

49根据您的设置,某些 shell 命令也会在沙箱之外运行:

50 

51* **您自己输入的命令**:在大多数会话中,您在 [`!` shell 模式提示符](/docs/zh-CN/interactive-mode#shell-mode-with-prefix)处输入的命令不在沙箱中运行。[严格沙箱模式](#turn-off-the-retry-with-strict-sandbox-mode)列出了您输入的命令会在沙箱中运行的会话

52* **排除的命令**:与 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 匹配的命令不在沙箱中运行

53* **非沙箱重试**:Claude 可以[请求在沙箱之外运行命令](#the-unsandboxed-retry-escape-hatch),通常是在命令于沙箱中运行失败之后

54 

55要将本节中的工具、进程和命令置于同一边界之内,请在[容器、虚拟机或沙箱运行时](/docs/zh-CN/sandbox-environments)中运行 Claude Code 进程本身。

56 

15<h2 id="get-started">57<h2 id="get-started">

16 入门58 开始使用

17</h2>59</h2>

18 60 

19沙箱内置于 Claude Code 中,在 macOS、Linux 和 WSL2 上运行。不支持原生 Windows。在 Windows 上,在 WSL2 发行版内运行 Claude Code。61沙箱内置于 Claude Code 中。需要安装的内容取决于您的平台:

20 62 

21在 macOS 上,无需安装任何内容:沙箱使用内置的 Seatbelt 框架。在 Linux 和 WSL2 上,沙箱依赖两个包,详见 [设置 Linux 和 WSL2](#set-up-linux-and-wsl2)。即使你还没有安装它们,你也可以从 `/sandbox` 开始,因为它的面板显示是否缺少任何内容。63* **macOS**:沙箱隔离使用内置的 Seatbelt 框架,因此可以直接按照以下步骤操作

64* **Linux 和 WSL2**:沙箱依赖 `bubblewrap` 和 `socat`,详见[设置 Linux 和 WSL2](#set-up-linux-and-wsl2)。即使尚未安装它们,也可以先运行 `/sandbox`,因为其面板会显示是否缺少任何内容

22 65 

23<Steps>66<Steps>

24 <Step title="运行 /sandbox">67 <Step title="运行 /sandbox">


28 /sandbox71 /sandbox

29 ```72 ```

30 73 

31 这会打开沙箱面板,有三个选项卡,在 Linux 上缺少可选的 seccomp 过滤器时还有一个 Dependencies 选项卡:74 这会打开包含三个选项卡的沙箱面板;在 Linux 上,如果缺少可选的 seccomp 过滤器,还会额外显示一个 Dependencies 选项卡:

32 75 

33 * **Mode**:选择沙箱化命令的批准方式,在下一步中介绍76 * **Mode**:选择沙箱命令的批准方式,详见下一步

34 * **Overrides**:选择在沙箱下失败的命令是否可以回退到运行非沙箱化。这是 [`allowUnsandboxedCommands`](/docs/zh-CN/settings-reference#sandbox-allowunsandboxedcommands) 设置77 * **Overrides**:选择在沙箱中失败的命令是否可以回退到在沙箱外运行。这对应 [`allowUnsandboxedCommands`](/docs/zh-CN/settings-reference#sandbox-allowunsandboxedcommands) 设置

35 * **Config**:查看已解析的沙箱设置78 * **Config**:查看解析后的沙箱设置

36 79 

37 如果面板仅显示 Dependencies 选项卡,则缺少必需的包。按照 [设置 Linux 和 WSL2](#set-up-linux-and-wsl2) 中的说明安装它,重启 Claude Code,然后再次运行 `/sandbox`。80 如果面板只显示 Dependencies 选项卡,则表示缺少必需的软件包。请按照[设置 Linux 和 WSL2](#set-up-linux-and-wsl2) 中的说明进行安装,重启 Claude Code,然后再次运行 `/sandbox`。

38 </Step>81 </Step>

39 82 

40 <Step title="选择一个模式">83 <Step title="选择模式">

41 在 Mode 选项卡上,选择自动允许或常规权限。自动允许在不提示的情况下运行沙箱化命令,常规权限即使在命令沙箱化时也保持常规权限提示。有关在自动允许模式下仍会提示哪些命令,请参阅 [沙箱模式](#sandbox-modes)。84 在 Mode 选项卡中,选择自动允许或常规权限。自动允许会在不提示的情况下运行沙箱命令,而常规权限即使在命令处于沙箱中时也会保留常规权限提示。有关在自动允许模式下仍会提示的命令,请参阅[沙箱模式](#sandbox-modes)。

42 </Step>85 </Step>

43 86 

44 <Step title="运行 Bash 命令">87 <Step title="运行 Bash 命令">

45 要求 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令可以写入工作目录、[每用户临时目录](/docs/zh-CN/env-vars) 以及任何你用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` [添加的目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。88 让 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令可以写入工作目录、[每用户临时目录](/docs/zh-CN/env-vars),以及通过 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` [添加的任何目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。

46 89 

47 命令第一次需要新的网络域时,Claude Code 会提示批准;在 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 中,Claude 改为在 [命令本身上命名](#per-command-allowed-domains-in-auto-mode) 命令需要的主机供分类器与其一起审查。90 当命令首次需要访问新的网络域名时,Claude Code 会请求批准;在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,Claude 则会[在命令本身上](#per-command-allowed-domains-in-auto-mode)列出该命令所需的主机,供分类器连同命令一起审查。

48 91 

49 无法沙箱化运行的命令会回退到常规权限流程。Claude Code 将其权限提示标题为"Bash 命令(非沙箱化)"而不是"Bash 命令",这样你可以看出哪些命令在沙箱外运行。要扩大或缩小沙箱允许的范围,请参阅 [配置沙箱](#configure-sandboxing)。92 要扩大或缩小沙箱允许的范围,请参阅[配置沙箱隔离](#configure-sandboxing)。

50 93 

51 如果沙箱化命令在容器内因 `Operation not permitted` 失败,请参阅 [故障排除](#troubleshooting) 下的 Bubblewrap 条目。94 如果沙箱命令在容器内失败并显示 `Operation not permitted`,请参阅 [Bubblewrap 在容器内无法启动](#bubblewrap-fails-to-start-inside-a-container)。

52 </Step>95 </Step>

53</Steps>96</Steps>

54 97 

55在面板中选择一个模式时,Claude Code 会将其保存到你的项目的本地设置 `.claude/settings.local.json`,这些设置适用于当前项目。Claude Code 在那里保存设置时会将该文件添加到你的全局 gitignore。要在所有项目中启用沙箱,请在 `~/.claude/settings.json` 的用户设置中将 [`sandbox.enabled`](/docs/zh-CN/settings-reference#sandbox-enabled) 设置为 `true`。要为组织中的每个开发者强制执行沙箱,请使用 [托管设置](#enforce-sandboxing-with-managed-settings)。98当您在面板中选择模式时,Claude Code 会将其保存到项目的本地设置 `.claude/settings.local.json` 中,该设置适用于当前项目。Claude Code 在该文件中保存设置时,会将其添加到您的全局 gitignore 中。要在所有项目中启用沙箱,请在用户设置 `~/.claude/settings.json` 中将 [`sandbox.enabled`](/docs/zh-CN/settings-reference#sandbox-enabled) 设置为 `true`。要为组织中的每位开发者强制启用沙箱隔离,请使用[托管设置](#enforce-sandboxing-with-managed-settings)。

56 99 

57要在一个会话中更改沙箱而不写入设置文件,请使用 [`--settings`](/docs/zh-CN/settings#change-a-setting-for-one-session) 启动 Claude Code。例如,此命令启动一个沙箱化会话,其中 Claude 无法在沙箱外重试被阻止的命令:100要在不写入设置文件的情况下为单个会话更改沙箱,请使用 [`--settings`](/docs/zh-CN/settings#change-a-setting-for-one-session) 启动 Claude Code。例如,以下命令会启动一个沙箱会话,在该会话中 Claude 无法在沙箱外重试被阻止的命令:

58 101 

59```bash theme={null}102```bash theme={null}

60claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'103claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'

61```104```

62 105 

63<Warning>106<Warning>

64 默认情况下,如果沙箱因缺少依赖项或不支持的平台而无法启动,Claude Code 会显示警告并在没有沙箱的情况下运行命令。要使其成为硬失败,请将 [`sandbox.failIfUnavailable`](/docs/zh-CN/settings-reference#sandbox-failifunavailable) 设置为 `true`。这适用于需要沙箱作为安全门的托管部署。107 默认情况下,如果由于缺少依赖或平台不受支持而导致沙箱无法启动,Claude Code 会在不使用沙箱的情况下运行命令。要让 Claude Code 改为在启动时退出,请将 [`sandbox.failIfUnavailable`](/docs/zh-CN/settings-reference#sandbox-failifunavailable) 设置为 `true`。需要将沙箱隔离作为安全关卡的托管部署可以使用此设置。

65</Warning>108</Warning>

66 109 

110<h3 id="confirm-commands-run-inside-the-sandbox">

111 确认命令在沙箱内运行

112</h3>

113 

114要检查沙箱是否正常工作,请让 Claude 运行表中的每一行。您在 [`!` 提示符](#what-runs-outside-the-sandbox)处输入的内容通常在沙箱外运行,因此自己输入这些命令无法起到测试作用。

115 

116| 命令 | 在沙箱内的结果 |

117| :- | :- |

118| `touch ~/sandbox-probe` | 在 macOS 上失败并显示 `Operation not permitted`,在 Linux 和 WSL2 上失败并显示 `Read-only file system` |

119| `curl --noproxy '*' https://example.com` | 失败并显示 `Could not resolve host`,因为该命令没有绕过沙箱代理的路由 |

120 

121如果 Claude 请求在沙箱外重试失败的命令,请拒绝该重试。如果 `touch` 成功,而您的主目录并不在沙箱允许命令写入的目录之列,请删除 `~/sandbox-probe`。然后运行 `/sandbox`,检查沙箱是否已开启以及其依赖是否已安装。

122 

67<h3 id="set-up-linux-and-wsl2">123<h3 id="set-up-linux-and-wsl2">

68 设置 Linux 和 WSL2124 设置 Linux 和 WSL2

69</h3>125</h3>

70 126 

71在 Linux 和 WSL2 上,沙箱依赖两个包:127在 Linux 和 WSL2 上,沙箱依赖以下软件包:

72 128 

73* [`bubblewrap`](https://github.com/containers/bubblewrap):无特权沙箱工具,强制执行文件系统隔离129* [`bubblewrap`](https://github.com/containers/bubblewrap):用于强制执行文件系统隔离的非特权沙箱隔离工具

74* [`socat`](http://www.dest-unreach.org/socat/):用于通过沙箱代理路由网络流量的中继130* [`socat`](http://www.dest-unreach.org/socat/):用于将网络流量通过沙箱代理进行路由的中继

75 131 

76使用你的发行版的包管理器安装它们:132使用您的发行版的包管理器安装它们:

77 133 

78<Tabs>134<Tabs>

79 <Tab title="Ubuntu/Debian">135 <Tab title="Ubuntu/Debian">


89 </Tab>145 </Tab>

90</Tabs>146</Tabs>

91 147 

92当缺少依赖项时,`/sandbox` 中的 Dependencies 选项卡列出你的平台缺少 `ripgrep`、`bubblewrap`、`socat` 和 seccomp 过滤器中的哪些。如果在安装并重启 Claude Code 后没有看到该选项卡,则所有依赖项都已存在。148当缺少依赖时,`/sandbox` 中的 Dependencies 选项卡会列出您的平台缺少 `ripgrep`、`bubblewrap`、`socat` 和 seccomp 过滤器中的哪些。如果在安装并重启 Claude Code 后没有看到该选项卡,则说明所有依赖都已就绪。

93 149 

94Ripgrep 与原生 Claude Code 二进制文件捆绑在一起。seccomp 过滤器是可选的,添加 Unix 域套接字阻止。如果缺少,请使用 `npm install -g @anthropic-ai/sandbox-runtime` 安装它。150Ripgrep 已随原生 Claude Code 二进制文件捆绑提供。seccomp 过滤器是可选的,用于增加对 Unix 域套接字的阻止。如果缺少该过滤器,请使用 `npm install -g @anthropic-ai/sandbox-runtime` 进行安装。

95 151 

96当缺少必需的依赖项时,Dependencies 选项卡是唯一显示的选项卡,直到你安装它。当仅缺少可选的 seccomp 过滤器时,Dependencies 选项卡与其他选项卡一起出现。依赖项检查在启动时运行,因此在安装包后重启 Claude Code,以便 `/sandbox` 检测到它们。152当缺少必需的依赖时,在安装之前 Dependencies 选项卡是唯一显示的选项卡。当仅缺少可选的 seccomp 过滤器时,Dependencies 选项卡会与其他选项卡一起显示。依赖检查在启动时运行,因此安装软件包后请重启 Claude Code,以便 `/sandbox` 检测到它们。

97 153 

98<AccordionGroup>154<AccordionGroup>

99 <Accordion title="Ubuntu 24.04 及更高版本:允许 bubblewrap 创建用户命名空间">155 <Accordion title="Ubuntu 24.04 及更高版本:允许 bubblewrap 创建用户命名空间">

100 在 Ubuntu 24.04 及更高版本上,默认 AppArmor 策略阻止 bubblewrap 创建隔离所需的用户命名空间。156 在 Ubuntu 24.04 及更高版本上,默认的 AppArmor 策略会阻止 bubblewrap 创建其隔离所需的用户命名空间。

101 157 

102 要检查你的环境(包括 WSL2 内)是否强制执行此限制,请运行 `sysctl kernel.apparmor_restrict_unprivileged_userns`。如果命令返回 `0`,请跳过此步骤。如果打印 `No such file or directory` 错误,该密钥不存在,你可以跳过此步骤。如果返回 `1`,请添加一个 AppArmor 配置文件,授予 `bwrap` 此功能:158 要检查您的环境(包括 WSL2 内部)是否强制执行此限制,请运行 `sysctl kernel.apparmor_restrict_unprivileged_userns`。如果该命令返回 `0`,请跳过此步骤。如果输出 `No such file or directory` 错误,则表示该键不存在,也可以跳过此步骤。如果返回 `1`,请添加一个授予 `bwrap` 此能力的 AppArmor 配置文件:

103 159 

104 ```bash theme={null}160 ```bash theme={null}

105 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'161 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'


113 EOF169 EOF

114 ```170 ```

115 171 

116 该配置文件仅适用于 `bwrap` 本身,不适用于在沙箱内运行的命令。重新加载 AppArmor 以应用它:172 该配置文件仅适用于 `bwrap` 本身,而不适用于它在沙箱内运行的命令。重新加载 AppArmor 以使其生效:

117 173 

118 ```bash theme={null}174 ```bash theme={null}

119 sudo systemctl reload apparmor175 sudo systemctl reload apparmor


121 </Accordion>177 </Accordion>

122 178 

123 <Accordion title="WSL2 注意事项">179 <Accordion title="WSL2 注意事项">

124 使用 PowerShell 中的 `wsl -l -v` 检查你的 WSL 版本。如果你看到 `Sandboxing requires WSL2`,你的发行版运行的是 WSL1。将其升级到 WSL2 或在没有沙箱的情况下运行 Claude Code。180 在 PowerShell 中使用 `wsl -l -v` 检查您的 WSL 版本。如果看到 `Sandboxing requires WSL2`,则说明您的发行版运行的是 WSL1。请将其升级到 WSL2,或在不使用沙箱隔离的情况下运行 Claude Code。

125 181 

126 在 WSL2 上,WSL 通过 Unix 套接字将 Windows 二进制文件(如 `cmd.exe`、`powershell.exe` 或 `/mnt/c/` 下的任何内容)的启动交给 Windows 主机,因此沙箱化命令是否可以启动一个取决于沙箱的 [Unix 套接字设置](/docs/zh-CN/settings-reference#sandbox-network-allowunixsockets):必须安装可选的 seccomp 过滤器才能首先阻止套接字。要允许这些启动,请设置 `allowAllUnixSockets`;要将它们完全排除在沙箱外,请将命令添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。182 在 WSL2 上,WSL 会通过 Unix 套接字将 Windows 二进制文件(例如 `cmd.exe`、`powershell.exe` 或 `/mnt/c/` 下的任何内容)的启动交给 Windows 主机处理,因此沙箱命令能否启动这些程序取决于沙箱的 [Unix 套接字设置](/docs/zh-CN/settings-reference#sandbox-network-allowunixsockets):必须先安装可选的 seccomp 过滤器,才能阻止该套接字。要允许这些启动,请设置 `allowAllUnixSockets`,这会向沙箱命令开放所有 Unix 套接字。

127 </Accordion>183 </Accordion>

128</AccordionGroup>184</AccordionGroup>

129 185 


131 沙箱模式187 沙箱模式

132</h3>188</h3>

133 189 

134Claude Code 提供两种沙箱模式。在两种模式中,沙箱都强制执行相同的文件系统和网络限制;区别仅在于沙箱化命令是自动批准还是需要明确权限。190Claude Code 提供两种沙箱模式。在这两种模式下,沙箱都会强制执行相同的文件系统和网络限制;区别仅在于沙箱命令是自动批准还是需要明确的权限。

135 191 

136<h4 id="auto-allow-mode">192<h4 id="auto-allow-mode">

137 自动允许模式193 自动允许模式

138</h4>194</h4>

139 195 

140当命令可以沙箱化时,Claude Code 在沙箱内运行它并自动批准,无需询问你的权限。无法沙箱化的命令(例如需要访问非允许主机的网络访问的命令)会回退到常规权限流程,其中 Claude Code 检查你的 [权限规则](/docs/zh-CN/permissions) 并为这些规则不允许的任何命令提示,在 Manual 模式下提示。196当命令在沙箱内运行时,Claude Code 会自动批准该命令,不会提示。当命令因匹配 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 或因 Claude [在沙箱外重试](#the-unsandboxed-retry-escape-hatch)而在沙箱外运行时,它会经过常规的[权限流程](/docs/zh-CN/permissions)。

197 

198连接到您未允许的主机的沙箱命令仍会留在沙箱中。[允许域名之外的主机](#hosts-outside-your-allowed-domains)介绍了由谁决定是否放行该连接。

141 199 

142即使在自动允许模式下,以下仍然适用:200即使在自动允许模式下,以下规则仍然适用:

143 201 

144* 显式 [拒绝规则](/docs/zh-CN/permissions) 始终被尊重202* 始终遵守明确的[拒绝规则](/docs/zh-CN/permissions)

145* 针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 命令仍会通过常规权限流程203* 针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)的 `rm` 或 `rmdir` 命令仍会经过常规权限流程

146* 内容范围的 [询问规则](/docs/zh-CN/permissions)(如 `Bash(git push *)`)仍会强制提示,即使对于沙箱化命令204* 限定内容范围的[询问规则](/docs/zh-CN/permissions)(如 `Bash(git push *)`)即使对沙箱命令也仍会强制提示

147* 裸 `Bash` 询问规则,或等效的 `Bash(*)` 形式,对于运行沙箱化的命令会被跳过;它仍然适用于回退到常规权限流程的命令。在 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,该规则不会被跳过:它也会对沙箱化命令提示,包括只读命令。在 v2.1.212 之前,跳过也适用于 Plan Mode205* 单独的 `Bash` 询问规则或等效的 `Bash(*)` 形式,对于在沙箱中运行的命令会被跳过;对于回退到常规权限流程的命令仍然适用。在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,该规则不会被跳过:它同样会对沙箱命令进行提示,包括只读命令

148 206 

149<Info>207<Info>

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 模式下,文件编辑工具会提示。208 自动允许模式独立于您的权限模式设置运行,但有三个例外:[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)、带有[每命令允许域名](#per-command-allowed-domains-in-auto-mode)的自动模式命令,以及自动模式下对沙箱命令的[服务器端分类器审查](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions)。即使您未处于"接受编辑"模式,启用自动允许后,沙箱 Bash 命令也会自动运行。这意味着,即使在 Manual 模式下(此时文件编辑工具会提示),在沙箱边界内修改文件的 Bash 命令也会在不提示的情况下执行。

151 209 

152 在 Plan Mode 中,自动允许不会扩大批准;请参阅 [Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 了解 Claude Code 如何在你计划时限制命令。在 v2.1.212 之前,自动允许在 Plan Mode 中也无需提示地运行沙箱化命令。210 在计划模式下,自动允许不会扩大批准范围;有关 Claude Code 在您制定计划时如何管控命令,请参阅[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。

153</Info>211</Info>

154 212 

155<h4 id="regular-permissions-mode">213<h4 id="regular-permissions-mode">

156 常规权限模式214 常规权限模式

157</h4>215</h4>

158 216 

159所有 Bash 命令都通过常规权限流程,即使沙箱化也是如此。这提供了更多控制,但需要更多批准。217所有 Bash 命令都会经过常规权限流程,即使在沙箱中也是如此。这提供了更多控制,但需要更多批准。

160 218 

161<h4 id="the-unsandboxed-retry-escape-hatch">219<h4 id="the-unsandboxed-retry-escape-hatch">

162 非沙箱化重试逃生舱220 沙箱外重试逃生通道

221</h4>

222 

223沙箱外重试是为在沙箱内失败的命令(例如与沙箱不兼容的工具)提供的逃生通道。当沙箱阻止网络连接时,Claude Code 会在命令结果中指明被拒绝的主机,从而让 Claude 了解被阻止的内容。Claude 会分析失败原因,并可能使用 `dangerouslyDisableSandbox` 参数重试该命令。

224 

225重试的命令在沙箱外运行。在交互式终端会话中,由谁批准取决于您的权限模式:

226 

227* **`bypassPermissions` 模式**:重试在不提示的情况下运行

228* **Manual 模式和 `acceptEdits` 模式**:您会收到标题为"Bash command (unsandboxed)"的提示

229* **[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)**:由一个独立的分类器模型评估底层命令

230* **`dontAsk` 模式**:Claude Code 拒绝该重试

231* **计划模式**:请参阅 [Claude Code 在您制定计划时如何管控命令](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)

232 

233以下规则和设置会改变由谁批准重试:

234 

235* **匹配的允许规则**:如果诸如 `Bash(curl *)` 之类的允许规则与命令匹配,它也会批准重试,因此该命令会在沙箱外运行且不提示

236* **针对该参数的询问规则**:为 `Bash(dangerouslyDisableSandbox:true)` 添加[询问规则](/docs/zh-CN/permissions#match-by-input-parameter),即可在 Bash 重试时收到提示。在自动模式和 `bypassPermissions` 模式下您也会收到提示,并且该规则优先于匹配的允许规则

237* **[`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories)**:[任何模式都不会自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)介绍了在启用该设置时会提示的重试

238 

239<h4 id="turn-off-the-retry-with-strict-sandbox-mode">

240 使用严格沙箱模式关闭重试

163</h4>241</h4>

164 242 

165某些命令根本无法在沙箱内运行,例如与其不兼容的工具或需要你未允许的主机的工具。Claude Code 在被阻止命令的结果中报告沙箱违规,命名沙箱拒绝的路径或主机,因此 Claude 看到沙箱阻止了什么。与其让任务失败或要求你关闭沙箱,Claude Code 包括一个逃生舱:Claude 分析违规并可能使用 `dangerouslyDisableSandbox` 参数重试命令。243您可以在[沙箱设置](/docs/zh-CN/settings-reference#sandbox-settings)中设置 `"allowUnsandboxedCommands": false` 来禁用沙箱外重试。禁用重试后,Claude Code 会忽略 `dangerouslyDisableSandbox` 参数。此后,在沙箱运行期间,Claude 运行的命令都会在沙箱中执行,除非它们匹配 `excludedCommands` 条目。要防止 Claude Code 在沙箱无法启动时在沙箱外运行命令,还需设置 [`failIfUnavailable`](/docs/zh-CN/settings-reference#sandbox-failifunavailable)。`/sandbox` 的 **Overrides** 选项卡将此设置显示为 **Strict sandbox mode**。

166 244 

167重试的命令在沙箱外运行,因此通过常规权限流程进行。在 Manual 模式下你会获得确认提示。在 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 中,分类器评估基础命令。当 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 打开时,需要批准才能在沙箱外运行的重试会提示你。要在自动模式下的每次非沙箱化重试时都被提示,请为 `Bash(dangerouslyDisableSandbox:true)` 添加一个 [询问规则](/docs/zh-CN/permissions#match-by-input-parameter)。245即使项目设置中设置了 `true`,在您的用户设置、`--settings` 或托管设置中设置的 `false` 仍然有效。用户设置中的 `false` 不会使沙箱成为管理员强制要求的,因此项目的其他沙箱设置仍然适用。在 v2.1.285 之前,项目的 `true` 会覆盖您用户设置中的 `false`。

168 246 

169你可以通过在 [沙箱设置](/docs/zh-CN/settings-reference#sandbox-settings) 中设置 `"allowUnsandboxedCommands": false` 来禁用此逃生舱。禁用逃生舱后,Claude Code 忽略 `dangerouslyDisableSandbox` 参数,Claude 运行的每个命令都必须沙箱化运行,除非你已在 `excludedCommands` 中列出它。`/sandbox` **Overrides** 选项卡将此设置显示为 **Strict sandbox mode**。247如果您或您的管理员在托管设置中或通过 `--settings` 标志禁用了重试,沙箱将成为管理员强制要求的。此时 Claude Code 会忽略仓库文件中放宽沙箱的设置,包括 `excludedCommands` 条目。[管理员强制沙箱下的仓库设置](#repository-settings-under-an-admin-required-sandbox)列出了这些设置。

170 248 

171严格沙箱模式适用于 Claude 运行的命令。你在 [`!` shell-mode 提示符](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 处自己输入的命令在沙箱外运行,除非会话是以下之一:249严格沙箱模式适用于 Claude 运行的命令。您自己在 [`!` shell 模式提示符](/docs/zh-CN/interactive-mode#shell-mode-with-prefix)处输入的命令会在沙箱外运行,除非会话属于以下情况之一:

172 250 

173* **一个 [后台会话](/docs/zh-CN/agent-view)**:严格沙箱模式也覆盖 shell-mode 命令251* **[后台会话](/docs/zh-CN/agent-view)**:严格沙箱模式也涵盖 shell 模式命令

174* **一个设置了 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars#variables) 的 Linux 会话**:每个命令都沙箱化运行,包括 shell-mode 命令252* **设置了 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars#variables) 的 Linux 会话**:所有命令都在沙箱中运行,包括 shell 模式命令

175 253 

176在 v2.1.260 之前,严格沙箱模式在每个会话中沙箱化 shell-mode 命令。254在 v2.1.260 之前,严格沙箱模式会在每个会话中对 shell 模式命令进行沙箱隔离。

177 255 

178<h4 id="temporary-directories">256<h4 id="temporary-directories">

179 临时目录257 临时目录

180</h4>258</h4>

181 259 

182会话临时目录在沙箱内默认可写,与工作目录一起。除非你 [禁用文件系统隔离](#disable-filesystem-isolation),Claude Code 为沙箱化命令设置 `$TMPDIR` 为此目录,因此写入临时文件的工具无需额外配置即可工作。非沙箱化命令继承你的 shell 的 `$TMPDIR` 不变,因此当文件系统隔离打开时,沙箱化和非沙箱化命令将 `$TMPDIR` 解析为不同的目录。如果你的 shell 将 `$TMPDIR` 留空或未设置,引用 `$TMPDIR` 的非沙箱化命令会接收你的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 覆盖,或当你未设置覆盖或覆盖是长路径时接收操作系统的临时目录,因此变量不会展开为空字符串。要在两者之间传递临时文件,请改为在工作目录下写入它们。260默认情况下,除工作目录外,每用户临时目录在沙箱内也是可写的。除非您[禁用文件系统隔离](#disable-filesystem-isolation),否则 Claude Code 会为沙箱命令将 `$TMPDIR` 设置为此目录,因此写入临时文件的工具无需额外配置即可正常工作。

261 

262沙箱外命令在您的 shell 设置了 `$TMPDIR` 时会继承该值,因此在启用文件系统隔离时,沙箱命令和沙箱外命令会将 `$TMPDIR` 解析为不同的目录。如果您的 shell 未设置 `$TMPDIR` 或将其设为空,引用 `$TMPDIR` 的沙箱外命令会获得您的 [`CLAUDE_CODE_TMPDIR`](/docs/zh-CN/env-vars) 覆盖值;如果您未设置该覆盖值或覆盖值是一个较长的路径,则会获得操作系统的临时目录,因此该变量不会展开为空字符串。要在两者之间传递临时文件,请改为将其写入工作目录下。

183 263 

184<h2 id="configure-sandboxing">264<h2 id="configure-sandboxing">

185 配置沙箱265 配置沙箱隔离

186</h2>266</h2>

187 267 

188通过 `settings.json` 文件自定义沙箱行为。有关完整的配置参考,请参阅 [Settings](/docs/zh-CN/settings-reference#sandbox-settings)。268通过 `settings.json` 文件自定义沙箱行为。完整的配置参考请参阅[设置](/docs/zh-CN/settings-reference#sandbox-settings)。

189 269 

190默认情况下,沙箱化命令可以写入当前工作目录、会话临时目录以及任何[你已添加](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)的目录(使用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories`)。如果子进程命令(如 `kubectl`、`terraform` 或 `npm`)需要在这些目录外写入,请使用 `sandbox.filesystem.allowWrite` 向特定路径授予访问权限:270默认情况下,沙箱中的命令可以写入当前工作目录、每用户临时目录,以及通过 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` [添加的任何目录](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。如果 `kubectl`、`terraform` 或 `npm` 等子进程命令需要写入这些目录之外的位置,请使用 `sandbox.filesystem.allowWrite` 授予对特定路径的访问权限:

191 271 

192```json theme={null}272```json theme={null}

193{273{


200}280}

201```281```

202 282 

203这些路径在操作系统级别强制执行,因此在沙箱内运行的所有命令(包括其子进程)都尊重它们。这是推荐的方法,当工具需要对特定位置的写入访问时,而不是使用 `excludedCommands` 将工具从沙箱中完全排除。283这些路径在操作系统层面强制执行,因此在沙箱内运行的所有命令(包括其子进程)都会遵守这些限制。当某个工具需要对特定位置的写入权限时,推荐使用这种方法,而不是使用 `excludedCommands` 将该工具完全排除在沙箱之外。

204 

205当在多个 [settings scopes](/docs/zh-CN/settings#settings-precedence) 中定义相同的文件系统数组时,Claude Code 会合并它们,组合来自每个范围的路径,而不是用另一个范围的数组替换一个范围的数组。

206 284 

207如果你在 CLI 上使用 [`--setting-sources`](/docs/zh-CN/cli-reference) 或在 Agent SDK 中使用 [`settingSources`](/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 排除一个源,Claude Code 会在构建沙箱配置时忽略其 `sandbox.filesystem` 条目、其 `Edit` 权限规则以及其 `Read` 拒绝规则。需要 Claude Code v2.1.246 或更高版本。285当您在多个[设置作用域](/docs/zh-CN/settings#settings-precedence)中定义同一个文件系统数组时,Claude Code 会将它们合并,组合来自每个作用域的路径,而不是用一个作用域的数组替换另一个作用域的数组。当某个条目受到[防止开发者放宽策略](#keep-developers-from-widening-the-policy)中的锁定约束时,Claude Code 会将该条目排除在合并之外。

208 286 

209当你在会话期间编辑这些文件系统列表时,Claude Code [将更改应用于运行中的会话](/docs/zh-CN/settings#when-edits-take-effect),因此下一个沙箱化命令在新路径下运行。287如果您在 CLI 上使用 [`--setting-sources`](/docs/zh-CN/cli-reference) 或在 Agent SDK 中使用 [`settingSources`](/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 排除了某个来源,Claude Code 在构建沙箱配置时会忽略该来源的 `sandbox.filesystem` 条目、`Edit` 权限规则以及 `Read` 拒绝规则。需要 Claude Code v2.1.246 或更高版本。

210 288 

211路径前缀控制路径的解析方式:289当您在会话期间编辑这些文件系统列表时,Claude Code 会[将更改应用到正在运行的会话](/docs/zh-CN/settings#when-edits-take-effect),因此下一条沙箱命令将在新路径下运行。

212 

213| 前缀 | 含义 | 示例 |

214| :- | :- | :- |

215| `/` | 从文件系统根目录的绝对路径 | `/tmp/build` 保持 `/tmp/build` |

216| `~/` | 相对于主目录 | `~/.kube` 变为 `$HOME/.kube` |

217| `./` 或无前缀 | 对于项目设置相对于项目根目录,或对于用户设置相对于 `~/.claude` | `.claude/settings.json` 中的 `./output` 解析为 `<project-root>/output` |

218 290 

219此语法与 [Read and Edit permission rules](/docs/zh-CN/permissions#read-and-edit) 不同,后者使用 `//path` 表示绝对路径,`/path` 表示项目相对路径。沙箱文件系统路径使用标准约定:`/tmp/build` 是绝对路径。有关 Claude Code 如何处理这些路径中的尾部斜杠或通配符,请参阅 [Sandbox path prefixes](/docs/zh-CN/settings-reference#sandbox-path-prefixes)。291沙箱文件系统路径使用标准约定:`/tmp/build` 是绝对路径,`~/.kube` 相对于您的主目录。这与 [Read 和 Edit 权限规则](/docs/zh-CN/permissions#read-and-edit)不同,后者使用 `//path` 表示绝对路径,使用 `/path` 表示相对于项目的路径。有关相对路径、末尾斜杠和通配符,请参阅[沙箱路径前缀](/docs/zh-CN/settings-reference#sandbox-path-prefixes)。

220 292 

221你也可以使用 `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` 拒绝写入或读取访问,以及使用 `sandbox.filesystem.allowRead` 重新允许被拒绝区域内的特定路径。当读取规则重叠时,更具体的路径获胜:293您还可以使用 `sandbox.filesystem.denyWrite` 和 `sandbox.filesystem.denyRead` 拒绝写入或读取访问,并使用 `sandbox.filesystem.allowRead` 在被拒绝的区域内重新允许特定路径。当读取规则重叠时,路径范围更窄的规则生效:

222 294 

223| 示例规则 | 结果 |295| 示例规则 | 结果 |

224| :- | :- |296| :- | :- |

225| `"denyRead": ["~/"]` 与 `"allowRead": ["~/projects"]` | `~/projects` 可读,主目录的其余部分保持被阻止。更窄的允许重新打开被拒绝区域的该部分 |297| `"denyRead": ["~/"]` 搭配 `"allowRead": ["~/projects"]` | `~/projects` 可读,主目录的其余部分仍被阻止。范围更窄的允许规则重新开放了被拒绝区域中的这一部分 |

226| `"allowRead": ["~/"]` 与 `"denyRead": ["~/.env"]` | `~/.env` 保持被阻止,主目录的其余部分可读。精确的拒绝在更广泛的允许内部保持有效,因此广泛的允许无法悄悄地重新暴露秘密 |298| `"allowRead": ["~/"]` 搭配 `"denyRead": ["~/.env"]` | `~/.env` 仍被阻止,主目录的其余部分可读。拒绝规则在更宽的允许规则内依然有效,因此宽泛的允许规则不会悄无声息地重新暴露机密 |

227| `"allowRead": ["~/"]` 与 `"denyRead": ["~/**/.env"]` | 主目录下的每个 `.env` 保持被阻止,其余部分可读。[通配符拒绝](/docs/zh-CN/settings-reference#sandbox-path-prefixes)在更广泛的允许内部保持有效,就像精确路径一样 |299| `"allowRead": ["~/"]` 搭配 `"denyRead": ["~/**/.env"]` | 主目录下的每个 `.env` 都仍被阻止,其余部分可读。[通配符拒绝规则](/docs/zh-CN/settings-reference#sandbox-path-prefixes)在更宽的允许规则内的效果与精确路径相同 |

228 300 

229下面的示例阻止从整个主目录读取,同时仍允许从当前项目读取。将其放在你的项目的 `.claude/settings.json` 中,因为相对路径 `.` 仅在配置位于项目设置中时才解析为项目根目录:301下面的示例阻止读取整个主目录,同时仍允许读取当前项目。请将其放在项目的 `.claude/settings.json` 中,因为只有当配置位于项目设置中时,相对路径 `.` 才会解析为项目根目录:

230 302 

231```json theme={null}303```json theme={null}

232{304{


240}312}

241```313```

242 314 

243如果你将相同的配置放在 `~/.claude/settings.json` 中,`.` 将解析为 `~/.claude`,项目文件将保持被 `denyRead` 规则阻止。315如果您将相同的配置放在 `~/.claude/settings.json` 中,`.` 将解析为 `~/.claude`,项目文件将仍被 `denyRead` 规则阻止。

316 

317要拒绝沙箱命令对主目录和挂载卷的读取访问,同时保持工作目录可读,请设置 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories),而不是编写路径规则。

318 

319<h3 id="run-commands-outside-the-sandbox-with-excludedcommands">

320 使用 `excludedCommands` 在沙箱外运行命令

321</h3>

322 

323在 [`sandbox.excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands) 中列出命令模式,即可在沙箱外运行匹配的命令,这意味着没有文件系统限制,也没有网络代理。请将其用于无法在沙箱内工作、且您信任其拥有您全部访问权限的工具。如果某个工具只是需要多一个目录或多一个主机,可以尝试使用 `allowWrite` 或 `allowedDomains`,这样命令仍会保持在沙箱中。

324 

325此示例将 `docker compose` 命令移出沙箱。将其保存在 `~/.claude/settings.json` 中即可应用于您的所有项目:

326 

327```json theme={null}

328{

329 "sandbox": {

330 "enabled": true,

331 "excludedCommands": ["docker compose *"]

332 }

333}

334```

335 

336Claude Code 会将您的条目与每次 Bash 和 Monitor 调用进行比对。一次调用是 Claude 发送的整个命令行,其中可以串联多条命令。以下规则决定一次调用是否离开沙箱:

337 

338* **以 ` *` 结尾模式**:条目使用与 `Bash(...)` [权限规则](/docs/zh-CN/permissions#permission-rule-syntax)相同的语法,不含通配符的模式为精确匹配。`docker` 只匹配不带参数的 `docker`。`docker *` 匹配带或不带参数的 `docker`

339* **调用中的每条命令都必须匹配**:`npm ci && docker compose build` 会保持在沙箱中,除非有另一个条目覆盖 `npm ci`

340* **Claude Code 匹配的是调用的文本**:在内部调用 `docker` 的脚本或 `make` 目标不会匹配,`/usr/local/bin/docker` 也不会匹配

341* **某些调用会保持在沙箱中**:重定向到文件、`cd` 或诸如 `$(...)` 的命令替换会使整个调用保持在沙箱中。[参考条目](/docs/zh-CN/settings-reference#sandbox-excludedcommands)列出了更多会保持在沙箱中的调用

342* **条目的保存位置可能很重要**:当沙箱为[管理员强制要求](#repository-settings-under-an-admin-required-sandbox)时,Claude Code 会忽略 `.claude/settings.json` 和 `.claude/settings.local.json` 中的条目

244 343 

245要拒绝沙箱化命令对主目录和挂载卷的读取访问,同时保持工作目录可读,请改为设置 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories),而不是编写路径规则。344被排除的命令会经过常规的权限流程:

345 

346* [只读命令](/docs/zh-CN/permissions#read-only-commands)以及您的允许规则所覆盖的命令无需确认提示即可运行

347* 在自动模式下,分类器会审查其他被排除的命令

348* 在 `bypassPermissions` 模式下,被排除的命令无需确认提示即可运行,除非有询问规则与之匹配

349 

350要确认某个条目是否匹配,请切换到 Manual 模式,并让 Claude 运行一条会更改内容的匹配命令,例如 `docker compose up -d`。权限提示的标题为“Bash command (unsandboxed)”。

351 

352<Warning>

353 被排除的命令以您的全部访问权限运行。诸如 `docker *` 这样宽泛的条目涵盖了该工具能做的一切。如果您编写的模式涵盖了解释器、工作目录中的脚本,或者作用于该目录中某个文件的工具(正如 `docker compose` 作用于其 compose 文件那样),Claude 就可以写入该文件,然后在沙箱外运行它。范围更窄的模式会减少 Claude 可以在沙箱外运行的内容。

354</Warning>

246 355 

247<h3 id="disable-filesystem-isolation">356<h3 id="disable-filesystem-isolation">

248 禁用文件系统隔离357 禁用文件系统隔离

249</h3>358</h3>

250 359 

251设置 `sandbox.filesystem.disabled` 为 `true` 以跳过文件系统隔离,同时保持网络隔离。下面的示例关闭文件系统隔离,同时保持网络域的允许列表:360将 `sandbox.filesystem.disabled` 设置为 `true` 可跳过文件系统隔离,同时保留网络隔离。下面的示例关闭了文件系统隔离,同时保留网络域名的允许列表:

252 361 

253```json theme={null}362```json theme={null}

254{363{


264}373}

265```374```

266 375 

267沙箱有两个独立的层:[文件系统隔离](#filesystem-isolation)控制沙箱化命令可以读写哪些路径,[网络隔离](#network-isolation)控制它们可以到达哪些域。关闭文件系统层后,沙箱化命令获得对主机文件系统的无限制读写访问权限,同时其网络出站流量仍然限制在你允许的域内。当你沙箱化以控制命令连接的位置而不是它们写入的内容时,请关闭该层。376沙箱有两个相互独立的层:[文件系统隔离](#filesystem-isolation)控制沙箱命令可以读写哪些路径,[网络隔离](#network-isolation)控制它们可以访问哪些域名。关闭文件系统层后,沙箱命令将获得对主机文件系统不受限制的读写访问权限,而其网络出站流量仍限于您允许的域名。当您使用沙箱的目的是控制命令连接到哪里,而不是控制它们写入什么时,请关闭该层。

268 377 

269该设置默认关闭,适用于沙箱运行的平台:macOS、Linux 和 WSL2。需要 Claude Code v2.1.216 或更高版本。378`sandbox.filesystem.disabled` 默认为 `false`。需要 Claude Code v2.1.216 或更高版本。

270 379 

271<Warning>380<Warning>

272 关闭文件系统隔离且命令自动允许时,沙箱化命令可以写入文件,这些文件稍后可能被其他命令运行或读取,例如 shell 启动文件、`$PATH` 上的可执行文件或 `~/.claude/settings.json`,并使用它们在下一次运行时扩大自己的访问权限。仅当你信任工作负载不会升级自己的访问权限时,才将 `filesystem.disabled` 设置为 `true`。使用 [`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) 锁定网络域会缩小风险,但不会消除它,因为该锁定仅适用于在沙箱内运行的命令。381 在文件系统隔离关闭且命令自动允许的情况下,沙箱命令可以写入后续命令会运行或读取的文件,例如 shell 启动文件、`$PATH` 上的可执行文件或 `~/.claude/settings.json`,并利用它们在下一次运行时扩大自身的访问权限。仅对您信任不会自行提升访问权限的工作负载将 `filesystem.disabled` 设置为 `true`。使用 [`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) 锁定网络域名可以降低风险,但无法消除风险,因为该锁定仅适用于在沙箱内运行的命令。

273</Warning>382</Warning>

274 383 

275<h4 id="which-settings-can-disable-it">384<h4 id="which-settings-can-disable-it">

276 哪些设置可以禁用它385 哪些设置可以禁用它

277</h4>386</h4>

278 387 

279由于关闭文件系统隔离会扩大沙箱化命令可以做的事情,Claude Code 仅从这些设置源中遵守 `filesystem.disabled`:388由于关闭文件系统隔离会扩大沙箱命令的能力范围,Claude Code 仅接受来自以下设置来源的 `filesystem.disabled`:

280 

281* 用户设置、托管设置和 `--settings` CLI 标志可以设置它。`.claude/settings.json` 和 `.claude/settings.local.json` 中的项目设置不能,因此已检出的项目无法关闭文件系统隔离。

282* 当托管设置配置 `sandbox.filesystem` 时,或列出任何 `sandbox.credentials.files` 条目且 `"mode": "deny"` 时,仅托管设置可以设置该键。这保持管理员部署的文件系统限制有效;要放松此类部署,请在托管设置中设置 `"disabled": true`。

283* 当设置 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars) 时,Claude Code 会忽略来自每个源(包括托管设置)的 `filesystem.disabled`,并保持文件系统隔离开启。

284 389 

285托管 `credentials.files` 条目是否固定 `filesystem.disabled`(将键锁定到托管设置,以便开发人员无法关闭文件系统隔离)取决于条目的 `mode` 以及沙箱启动时条目发生的情况:390* 用户设置、托管设置和 `--settings` CLI 标志可以设置它。`.claude/settings.json` 和 `.claude/settings.local.json` 中的项目设置不能设置它,因此检出的项目无法关闭文件系统隔离。

391* 当托管设置配置了任何 `sandbox.filesystem` 内容,或列出了任何 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,只有托管设置可以设置该键。这可确保管理员部署的文件系统限制保持有效;要放宽此类部署,请在托管设置中设置 `"disabled": true`。

392* 当设置了 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars) 时,Claude Code 会忽略来自所有来源(包括托管设置)的 `filesystem.disabled`,并保持文件系统隔离开启。

286 393 

287| 托管条目 | 固定 `filesystem.disabled` | 隔离关闭时保护文件的内容 |394[有效的](/docs/zh-CN/settings-reference#invalid-credential-entries-in-managed-settings) `mask` 条目不会锁定该键,即使 Claude Code 在启动时对其[回退为 `deny`](#mask-credential-files) 也是如此。请将无法掩码的路径(例如凭据目录)在托管设置中列为显式的 `deny` 条目,这样会锁定该键。

288| - | - | - |

289| `"mode": "deny"` | 是 | 无:读取块是文件系统层的一部分 |

290| `"mode": "mask"`,应用为掩盖 | 否 | 掩盖本身:Linux 和 WSL2 上的[哨兵副本和代理](#mask-credential-files),macOS 上沙箱自己的读取规则 |

291| `"mode": "mask"`,[在设置时回退到 `deny`](#mask-credential-files) | 否 | 无,与 `deny` 相同。将无法掩盖的路径(如目录)列为显式 `deny` 条目,这会固定该键 |

292| `"mode": "mask"`,[由验证降级为 `deny`](/docs/zh-CN/managed-settings#invalid-entries-in-managed-settings) | 是,如显式 `deny` | 无,与 `deny` 相同 |

293 

294回退发生在沙箱启动时,在 Claude Code 已读取设置后,固定检查运行,因此回退条目永远不会固定。验证在设置加载时将无效条目重写为 `deny`,因此降级条目的固定方式与你写为 `deny` 的条目相同。

295 395 

296<h4 id="what-changes-when-filesystem-isolation-is-off">396<h4 id="what-changes-when-filesystem-isolation-is-off">

297 文件系统隔离关闭时的变化397 关闭文件系统隔离后的变化

298</h4>398</h4>

299 399 

300设置 `filesystem.disabled` 会解除文件系统层本身强制执行的保护。其他层强制执行的保护继续适用:400设置 `filesystem.disabled` 会解除文件系统层本身强制执行的保护。由其他层强制执行的保护仍然有效:

301 401 

302| 保护 | 文件系统隔离关闭时 |402| 保护 | 文件系统隔离关闭时 |

303| - | - |403| - | - |

304| `filesystem.denyRead` 和 [`credentials.files`](#protect-credentials) `deny` 读取块 | 未强制执行。文件系统层应用两者 |404| `filesystem.denyRead` 和 [`credentials.files`](#protect-credentials) `deny` 读取阻止 | 不强制执行。两者都由文件系统层应用 |

305| `credentials.envVars` `deny` 和 `mask` 条目 | 强制执行。环境变量清理独立于文件系统层 |405| `credentials.envVars` `deny` 和 `mask` 条目 | 强制执行。环境变量清除独立于文件系统层 |

306| [`credentials.files` `mask` 条目](#mask-credential-files)应用为掩盖 | 强制执行:掩盖独立于文件系统层。[回退到 `deny`](#mask-credential-files) 的条目未被强制执行,如任何 `deny` 条目 |406| 以掩码方式应用的 [`credentials.files` `mask` 条目](#mask-credential-files) | 强制执行:掩码独立于文件系统层。[已回退为 `deny`](#mask-credential-files) 的条目与任何 `deny` 条目一样不强制执行 |

307 407 

308另外两件事会改变:408另外还有两项变化:

309 409 

310* 沙箱化命令继承你的 shell 的 `$TMPDIR`,而不是会话临时目录,因为每个临时目录都是可写的,Claude Code 不再将命令重定向到会话临时目录。410* 沙箱命令会继承您 shell 的 `$TMPDIR`,而不是每用户临时目录,因为所有临时目录都可写,Claude Code 不再将命令重定向到每用户临时目录。

311 411 

312 在 Linux 上,该变量通常在父 shell 中未设置。Bash 工具指导告诉 Claude 使用 `mktemp -d` 创建临时目录,而不是依赖 `$TMPDIR`。412 在 Linux 上,父 shell 中通常未设置该变量。Bash 工具指引会告诉 Claude 使用 `mktemp -d` 创建临时工作目录,而不是依赖 `$TMPDIR`。

313* [`autoAllowBashIfSandboxed`](/docs/zh-CN/settings-reference#sandbox-autoallowbashifsandboxed) 仍默认为 `true`,因此沙箱化命令继续运行而无需提示。设置为 `false` 以提示沙箱化命令。413* [`autoAllowBashIfSandboxed`](/docs/zh-CN/settings-reference#sandbox-autoallowbashifsandboxed) 默认仍为 `true`,因此沙箱命令会继续在无确认提示的情况下运行。将其设置为 `false` 可对沙箱命令进行确认提示。

314 414 

315<h3 id="protect-credentials">415<h3 id="protect-credentials">

316 保护凭证416 保护凭据

317</h3>417</h3>

318 418 

319`sandbox.credentials` 设置声明凭证文件和环境变量,以保护其免受沙箱化命令的访问。每个条目命名一个文件路径或环境变量以及一个 `mode`。专用的 `credentials` 块将凭证规则分组在一起,并与常规文件系统规则分开。419`sandbox.credentials` 设置声明需要防范沙箱命令访问的凭据文件和环境变量。每个条目指定一个文件路径或一个环境变量以及一个 `mode`。专用的 `credentials` 块使凭据规则集中在一起,并与通用文件系统规则分开。

320 420 

321对于 `"mode": "deny"` 的条目,文件路径在沙箱内被拒绝读取,与 `filesystem.denyRead` 应用的限制相同,环境变量在每个沙箱化命令运行前被取消设置。文件保护是文件系统层的一部分,因此如果你[禁用文件系统隔离](#disable-filesystem-isolation),它不适用;环境变量保护仍然适用。421对于 `"mode": "deny"` 的条目,文件路径在沙箱内被拒绝读取(与 `filesystem.denyRead` 施加的限制相同),环境变量则在每条沙箱命令运行前被取消设置。文件保护属于文件系统层,因此如果您[禁用文件系统隔离](#disable-filesystem-isolation),它将不再生效;而环境变量保护仍然有效。

322 422 

323下面的示例阻止读取 AWS 凭证文件和 SSH 目录,并从沙箱化命令的环境中删除 `GITHUB_TOKEN` 和 `NPM_TOKEN`:423下面的示例阻止读取 AWS 凭据文件和 SSH 目录,并从沙箱命令的环境中移除 `GITHUB_TOKEN` 和 `NPM_TOKEN`:

324 424 

325```json theme={null}425```json theme={null}

326{426{


340}440}

341```441```

342 442 

343环境变量条目和文件条目也接受 `"mode": "mask"`,如下所述 [Mask credentials](#mask-credentials)。443环境变量条目和文件条目也接受 `"mode": "mask"`,详见[掩码凭据](#mask-credentials)。

344 444 

345文件路径遵循与 `sandbox.filesystem.*` 设置相同的[前缀规则](/docs/zh-CN/settings-reference#sandbox-path-prefixes)。445文件路径遵循与 `sandbox.filesystem.*` 设置相同的[前缀规则](/docs/zh-CN/settings-reference#sandbox-path-prefixes)。

346 446 

347Claude Code 合并来自会话加载的每个 [settings scope](/docs/zh-CN/settings#settings-precedence) 的 `deny` 条目。`deny` 条目只会缩小访问权限,因此任何范围都可以添加一个,但没有任何范围可以删除另一个范围添加的条目。447Claude Code 会合并会话所加载的每个[设置作用域](/docs/zh-CN/settings#settings-precedence)中的 `deny` 条目。`deny` 条目只会收窄访问权限,因此任何作用域都可以添加此类条目,但任何作用域都无法移除其他作用域添加的条目。

348 448 

349当你[排除一个设置源](#configure-sandboxing)时:449当您[排除某个设置来源](#configure-sandboxing)时:

350 450 

351* **项目或本地设置**:Claude Code 不应用它们的任何 `credentials` 条目。需要 Claude Code v2.1.246 或更高版本。451* **项目或本地设置**:Claude Code 不会应用其中的任何 `credentials` 条目。需要 Claude Code v2.1.246 或更高版本。

352* **用户设置**:Claude Code 仍然应用 `~/.claude/settings.json` 中的 `deny` 条目,并将其[文件 `mask` 条目](#mask-credential-files)保持为限制,但删除其[环境变量 `mask` 条目](#mask-environment-variables)。452* **用户设置**:Claude Code 仍会应用 `~/.claude/settings.json` 中的 `deny` 条目,并将其[文件 `mask` 条目](#mask-credential-files)作为限制保留(这些限制不再授权代理替换真实值),但会丢弃其[环境变量 `mask` 条目](#mask-environment-variables)。

353 453 

354没有内置的凭证拒绝列表,因此只有你列出的文件和变量被限制。454没有内置的凭据拒绝列表,因此只有您列出的文件和变量会受到限制。

355 455 

356`sandbox.credentials` 仅影响沙箱化的 Bash 命令。要从所有子进程中删除凭证,无论是否进行沙箱处理,请设置 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars)。456`sandbox.credentials` 仅影响沙箱中的 Bash 命令。要从所有子进程中清除凭据(无论是否使用沙箱),请设置 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars)。

357 457 

358<h3 id="mask-credentials">458<h3 id="mask-credentials">

359 掩盖凭证459 掩码凭据

360</h3>460</h3>

361 461 

362掩盖比 [Protect credentials](#protect-credentials) 下的 `deny` 条目更进一步。Claude Code 不是阻止凭证,而是向沙箱化命令显示占位符(哨兵),[沙箱代理](#network-isolation)在出站请求到你允许的主机时交换真实值。对于文件,替换是 Linux 和 WSL2 行为;[macOS 改为阻止文件](#mask-credential-files)。462当您对凭据进行掩码时,Claude Code 会向沙箱命令显示一个每个会话的占位符(称为哨兵值),并由[沙箱代理](#network-isolation)在发往您允许的主机的出站请求中替换为真实值。而[保护凭据](#protect-credentials)中的 `deny` 条目则会阻止该凭据。对于 macOS 上的文件,Claude Code 会[阻止该文件](#mask-credential-files),而不是对其进行掩码。

363 

364<h4 id="mask-environment-variables">

365 掩盖环境变量

366</h4>

367 

368`"mode": "mask"` 保护凭证,同时保持使用它进行身份验证的工具正常工作。`deny` 完全删除变量,这也会破坏需要它的工具,例如 `gh` 或 `npm`。需要 Claude Code v2.1.199 或更高版本。

369 463 

370使用 `mask`,沙箱化命令看到的是每个会话的哨兵值,而不是真实值。每个 `mask` 条目可以列出 `injectHosts`,真实值被允许到达的主机。当请求离开沙箱前往其中一个主机时,[沙箱代理](#network-isolation)将哨兵值替换为真实值。命令及其记录的任何内容都不会持有真实凭证,但其请求仍然进行身份验证。464掩码环境变量需要 Claude Code v2.1.199 或更高版本。[`sandbox.credentials`](/docs/zh-CN/settings-reference#sandbox-credentials) 参考列出了所有字段。

371 465 

372代理在请求内容中替换凭证,因此它必须看到它们。设置 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 以便代理自己终止 TLS。466掩码需要满足以下条件:

373 467 

374没有它,掩盖会失败关闭:命令仍然只看到哨兵值,但哨兵值不变地到达服务器,身份验证失败。Claude Code 在启动时报告此配置错误。468* **TLS 终止**:代理在请求内容中替换真实值,因此它必须能够看到请求内容。请设置 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate),使代理自行终止 TLS。如果不设置,掩码会失败,但不会暴露任何内容:命令仍然只能看到哨兵值,但哨兵值会原样到达服务器,导致身份验证失败。Claude Code 会在启动时报告此错误配置。

469* **允许的目标**:每个 `mask` 条目可以列出 `injectHosts`,即允许真实值到达的主机。代理只在[域名允许列表](#network-isolation)所允许的连接上注入凭据,因此每个 `injectHosts` 主机还必须能够通过 `network.allowedDomains` 访问。对于没有 `injectHosts` 的 `mask` 条目,代理会在发往 `network.allowedDomains` 中每个主机的请求中替换真实值。

470* **受信任的设置作用域**:掩码会授权代理将您的真实凭据发送到某处,因此 Claude Code 只接受来自用户设置、托管设置和 `--settings` 标志的 `mask` 条目、`network.tlsTerminate`、[`credentials.allowPlaintextInject`](/docs/zh-CN/settings-reference#sandbox-credentials-allowplaintextinject)、`awsPairs` 和 `sigv4`。它会忽略仓库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的这些设置。当您的管理员通过服务器托管设置下发 `mask` 条目、`network.tlsTerminate` 或 `credentials.allowPlaintextInject` 时,它们属于[需要批准的设置](/docs/zh-CN/server-managed-settings#security-approval-dialogs)。

375 471 

376替换涵盖标头和请求体。使用从凭证派生的签名进行身份验证的请求,而不是凭证本身,需要在代理处重新签名;[Re-sign AWS requests](#re-sign-aws-requests) 涵盖这对 AWS 的工作原理。472<h4 id="mask-environment-variables">

473 掩码环境变量

474</h4>

377 475 

378代理仅在[域允许列表](#network-isolation)允许的连接上注入,因此每个 `injectHosts` 目标也必须通过 `network.allowedDomains` 可达。476要对环境变量进行掩码,请在其 `credentials.envVars` 条目上设置 `"mode": "mask"`。命令及其记录的任何日志都不会持有真实凭据,但其请求仍能通过身份验证。当同一变量在任何作用域中以 `deny` 列出时,`deny` 优先。

379 477 

380下面的示例掩盖两个令牌。`GH_TOKEN` 仅在对 `api.github.com` 的请求上被替换,而 `NPM_TOKEN` 没有 `injectHosts`,在对 `network.allowedDomains` 中每个主机的请求上被替换。478下面的示例对两个令牌进行掩码。`GH_TOKEN` 仅在发往 `api.github.com` 的请求中被替换,而 `NPM_TOKEN` 没有 `injectHosts`,因此会在发往 `network.allowedDomains` 中每个主机的请求中被替换:

381 479 

382```json theme={null}480```json theme={null}

383{481{


397}495}

398```496```

399 497 

400<span id="ipv6-destinations-in-injecthosts" />在两个列表中以不同方式拼写 IPv6 目标,因为每个列表都有自己的匹配器:498默认情况下,掩码会替换整个值。对于具有结构的值(例如 `DATABASE_URL` 连接字符串或 JWT),请使用 [`extract`、`decode`、`maskClaims` 和 `onExtractNoMatch` 字段](/docs/zh-CN/settings-reference#sandbox-credentials-envvars),使解析该值的工具继续正常工作。

401 

402* **`network.allowedDomains`**:[括号形式域列表使用](#ipv6-addresses-in-domain-lists),例如 `"[::1]"`。代理检查此列表以允许连接。

403* **`injectHosts`**:其规范压缩形式中的裸地址,例如 `"::1"` 或 `"2001:db8::1"`。代理将每个条目与连接的裸目标地址匹配,忽略端口,因此括号、区域 ID 或不同压缩的拼写永远不会匹配,代理永远不会在那里注入凭证。

404 

405`claude doctor` 标记 `injectHosts` 条目,这些条目永远无法与警告 `Sandbox credential injectHosts entries can never match their destination` 匹配。此检查需要 Claude Code v2.1.229 或更高版本。

406 499 

407与 `deny` 不同,掩盖授权代理将你的真实凭证发送到列出的主机,因此 Claude Code 仅从你或你的管理员控制的设置中遵守它:用户设置、托管设置和 `--settings` CLI 标志。Claude Code 忽略存储库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `mask` 条目。在这些文件中,它也忽略 `network.tlsTerminate` 和 [`credentials.allowPlaintextInject`](/docs/zh-CN/settings-reference#sandbox-credentials-allowplaintextinject),允许代理将凭证注入未加密请求的设置。如果你[排除用户设置](#configure-sandboxing),Claude Code 也会删除 `~/.claude/settings.json` 中的环境变量 `mask` 条目。500<span id="ipv6-destinations-in-injecthosts" />对于 IPv6 目标,在两个列表中的地址写法不同:

408 501 

409当你的管理员通过服务器托管设置交付 `mask` 条目、`network.tlsTerminate` 或 `credentials.allowPlaintextInject` 时,它们计为[需要批准的设置](/docs/zh-CN/server-managed-settings#security-approval-dialogs)。502* **`network.allowedDomains`**:使用方括号形式,例如 `"[::1]"`

503* **`injectHosts`**:使用规范压缩形式的裸地址,例如 `"::1"`

410 504 

411当相同的变量在任何范围中以 `deny` 列出时,`deny` 优先。505代理将每个 `injectHosts` 条目与连接的裸目标地址进行匹配,忽略端口,因此带方括号、带区域 ID 或采用其他压缩方式的写法永远不会匹配。`claude doctor` 会使用警告 `Sandbox credential injectHosts entries can never match their destination` 标记永远无法匹配的条目。此检查需要 Claude Code v2.1.229 或更高版本。

412 

413掩盖默认替换变量的整个值,这适合裸令牌。可选条目字段(需要 Claude Code v2.1.224 或更高版本)处理具有结构的值:

414 

415* `extract`:Claude Code 在整个值上应用的正则表达式,仅替换每个匹配的第 1 组捕获的文本,因此解析值的工具(如 `DATABASE_URL` 连接字符串)仍在沙箱内工作。模式必须包含至少一个捕获组。

416* `onExtractNoMatch` 控制模式匹配不到任何内容时发生的情况:

417 * `warn`,默认值,警告并不掩盖地传递变量

418 * `deny` 在沙箱内取消设置变量

419 * `error` 停止沙箱设置,直到你修复配置

420* `decode: "jwt"`:对于持有 JSON Web Token (JWT) 的变量。Claude Code 验证值是 JWT 并将其替换为结构上有效的假令牌,因此沙箱内解码令牌的代码继续工作。添加 `maskClaims` 以列出要单独掩盖的顶级有效负载声明,而不是替换整个令牌;其他声明保持可读。当值未验证为 JWT 或没有列出的声明匹配时,Claude Code 会以警告不掩盖地传递变量。`decode` 不能与 `extract` 组合。

421 

422有关完整字段列表,请参阅[设置参考中的 `credentials.envVars[]` 行](/docs/zh-CN/settings-reference#sandbox-settings)。

423 506 

424<h4 id="re-sign-aws-requests">507<h4 id="re-sign-aws-requests">

425 重新签名 AWS 请求508 重新签名 AWS 请求

426</h4>509</h4>

427 510 

428AWS 请求在请求内容上携带 SigV4 签名,因此一起掩盖 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY`。代理通过访问密钥的哨兵检测 SigV4 请求,并在替换真实值后重新签名。仅掩盖秘密会使请求使用占位符签名,代理无法检测,因此它们在 AWS 处失败;Claude Code 在启动时警告此情况,但仅掩盖访问密钥 ID 时不警告。代理无法重新签名的检测到的请求(如缺少其 `x-amz-date` 标头的请求)会因代理错误而失败,而不是到达服务器并带有损坏的签名。511AWS 请求携带基于请求内容的 SigV4 签名,因此请同时对 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 进行掩码。代理通过访问密钥的[哨兵值](#mask-credentials)识别 SigV4 请求,并使用真实值对请求重新签名,这需要 Claude Code v2.1.221 或更高版本。如果仅对私有密钥进行掩码,请求会使用代理无法识别的占位符签名,因此它们会在 AWS 处失败。

429 

430当你掩盖它们的整个值时,Claude Code 会自动将常规 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` 变量链接到一个凭证中。如果你的 AWS 凭证位于其他名称的变量中,请使用 [`credentials.awsPairs`](/docs/zh-CN/settings-reference#sandbox-credentials-awspairs) 自己分组,这需要 Claude Code v2.1.224 或更高版本。此示例将配对添加到已掩盖 `MY_KEY_ID`、`MY_SECRET_KEY` 和 `MY_SESSION_TOKEN` 整个值的配置中,如上面的[掩盖配置](#mask-environment-variables)所示:

431 

432```json theme={null}

433{

434 "sandbox": {

435 "credentials": {

436 "awsPairs": [

437 {

438 "accessKeyIdVar": "MY_KEY_ID",

439 "secretAccessKeyVar": "MY_SECRET_KEY",

440 "sessionTokenVar": "MY_SESSION_TOKEN"

441 }

442 ]

443 }

444 }

445}

446```

447 

448每个条目遵循这些规则:

449 512 

450* `accessKeyIdVar` 和 `secretAccessKeyVar` 命名持有访问密钥 ID 和秘密密钥的掩盖 `envVars` 条目。可选的 `sessionTokenVar` 命名持有临时凭证会话令牌的条目;设置时,代理在重新签名的请求上将真实令牌作为 `x-amz-security-token` 发送。513当您对常规的 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` 变量的整个值进行掩码时,Claude Code 会自动将它们关联为一个凭据。如果您的 AWS 凭据存储在其他名称的变量中,请使用 [`credentials.awsPairs`](/docs/zh-CN/settings-reference#sandbox-credentials-awspairs) 对它们进行分组,这需要 Claude Code v2.1.224 或更高版本。

451* 每个命名的变量必须是掩盖其整个值的 `mask` 条目,不带 `extract` 或 `decode`。

452* 代理在访问密钥 ID 条目的 `injectHosts` 中列出的主机上重新签名请求。

453* 在对中命名任何常规变量会替换自动配对。

454 514 

455与 `mask` 条目一样,`awsPairs` 仅从用户设置、托管设置和 `--settings` CLI 标志中遵守。515流式上传、预签名 URL 和 SigV4A 请求携带代理无法重新计算的签名。当此类请求使用已掩码凭据对的占位符签名时,代理会使其失败,而不是转发损坏的签名。使用未掩码凭据签名的请求不受影响。请使用 [`credentials.sigv4`](/docs/zh-CN/settings-reference#sandbox-credentials-sigv4)(需要 Claude Code v2.1.224 或更高版本)来转发这些请求形式之一。AWS 仍会拒绝该请求,因此调用工具会收到 AWS 自身的拒绝响应,而不是代理错误。

456 

457三种 AWS 请求形式携带代理无法重新计算的签名。当此类请求使用掩盖对的占位符签名时,代理会失败它而不是转发损坏的签名;使用未掩盖凭证签名的请求永远不会受到影响。[`credentials.sigv4`](/docs/zh-CN/settings-reference#sandbox-credentials-sigv4) 设置(需要 Claude Code v2.1.224 或更高版本)放松每种形式:将形式的键设置为 `passthrough` 会转发带有其占位符派生签名的请求,因此调用工具接收 AWS 自己的拒绝响应而不是代理错误。与 `awsPairs` 一样,`sigv4` 仅从用户设置、托管设置和 `--settings` CLI 标志中遵守。

458 

459| 请求形式 | `sigv4` 键 | 代理无法重新签名的原因 |

460| :- | :- | :- |

461| aws-chunked 流式上传 | `streaming` | 每个块签名链接到种子签名,因此重新签名需要重写正文 |

462| 预签名 URL | `presigned` | 签名位于 URL 本身,没有 `Authorization` 标头 |

463| SigV4A 非对称签名 | `sigv4a` | 没有共享密钥 HMAC 可重新计算 |

464 516 

465<h4 id="mask-credential-files">517<h4 id="mask-credential-files">

466 掩盖凭证文件518 掩码凭据文件

467</h4>519</h4>

468 520 

469文件条目也接受 `"mode": "mask"`,这需要 Claude Code v2.1.221 或更高版本。沙箱化命令看到的内容取决于平台:521要对凭据文件进行掩码,请在其 `credentials.files` 条目上设置 `"mode": "mask"`。掩码文件需要 Claude Code v2.1.221 或更高版本。沙箱命令看到的内容取决于平台:

470 

471* **Linux 和 WSL2**:沙箱化命令读取文件的哨兵副本,一个替代品,其秘密被替换为占位符值,[沙箱代理](#network-isolation)在出站时替换真实值。

472* **macOS**:沙箱化命令根本无法读取列出的文件。Claude Code 不构建哨兵副本,也不在出站时替换任何内容,因此使用文件进行身份验证的工具在沙箱内不工作,与 `deny` 的效果相同。与 `deny` 条目不同,即使你[禁用文件系统隔离](#disable-filesystem-isolation),读取块也保持有效。

473 522 

474在每个平台上,Claude Code 应用 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 要求和 `injectHosts` 的方式与[掩盖环境变量](#mask-environment-variables)相同,并以相同方式忽略存储库设置。如果你[排除用户设置](#configure-sandboxing),Claude Code 将 `~/.claude/settings.json` 中的文件 `mask` 条目保持为限制,但条目不再授权代理替换真实值。523* **Linux 和 WSL2**:沙箱命令读取的是该文件的[哨兵](#mask-credentials)副本,代理会在出站请求中替换为真实值。

524* **macOS**:沙箱命令完全无法读取该文件。Claude Code 不会构建哨兵副本,因此使用该文件进行身份验证的工具无法在沙箱内工作,效果与 `deny` 相同。即使您[禁用文件系统隔离](#disable-filesystem-isolation),该读取阻止仍然有效。

475 525 

476下面的示例掩盖存储在 `~/.config/gh/hosts.yml` 中的 GitHub 令牌;`extract` 模式(如下所述)告诉 Claude Code 文件的哪一部分是秘密。在 Linux 和 WSL2 上,读取文件的沙箱化命令获得令牌位置的哨兵,代理在对 `api.github.com` 的请求上替换真实令牌:526下面的示例对存储在 `~/.config/gh/hosts.yml` 中的 GitHub 令牌进行掩码。`extract` 模式标记文件的哪一部分是机密,因此在 Linux 和 WSL2 上,`gh` 仍能解析其配置的其余部分:

477 527 

478```json theme={null}528```json theme={null}

479{529{


497}547}

498```548```

499 549 

500要确认掩盖处于活动状态,请要求 Claude 在沙箱化命令中运行 `cat ~/.config/gh/hosts.yml`:在 Linux 和 WSL2 上,输出显示令牌位置的哨兵值,在 macOS 上,读取失败。550要确认掩码是否生效,请让 Claude 在沙箱命令中运行 `cat ~/.config/gh/hosts.yml`。在 Linux 和 WSL2 上,输出会显示一个替代令牌的哨兵值;在 macOS 上,读取则会失败。

501 

502在 Linux 和 WSL2 上,`extract` 模式是保持 `hosts.yml` 其余部分可读的原因。Claude Code 在整个文件上应用正则表达式,仅替换每个匹配的第 1 组捕获的文本,因此 `gh` 仍然解析其配置,仅令牌是占位符。对任何工具解析的结构化文件使用 `extract`,例如 `.netrc`、JSON 或 YAML;模式必须包含至少一个捕获组。没有 `extract`,Claude Code 将整个文件内容替换为一个哨兵值,这适合持有单个裸秘密且没有其他内容的文件。

503 

504对于持有 JSON Web Token (JWT) 的文件,设置 `decode: "jwt"` 而不是或与 `extract` 一起。`decode` 需要 Claude Code v2.1.224 或更高版本。Claude Code 使用内置模式或你的 `extract` 模式(设置时)查找 JWT 候选项,验证每个候选项是 JWT,并将其替换为结构上有效的假令牌,因此在沙箱内解码令牌的代码继续工作。添加 `maskClaims` 以仅掩盖每个验证令牌内的命名顶级有效负载声明,并保持其他声明可读。当没有候选项验证或没有命名声明匹配时,下面的 `onExtractNoMatch` 字段控制结果,就像模式匹配不到任何内容一样。

505 551 

506两个可选字段细化匹配行为。两者仅在 `mode` 为 `mask` 且 `extract` 或 `decode` 设置时适用。在 macOS 上,当文件系统隔离开启时,Claude Code 在模式运行前将 `mask` 条目应用为 `deny`,因此这些字段和下面的不匹配结果仅在[文件系统隔离关闭](#disable-filesystem-isolation)时在那里生效:552如果不使用 `extract` 或 `decode`,Claude Code 会用一个哨兵值替换整个文件,这适用于只包含单个裸机密的文件。请使用 [`extract`、`decode`、`maskClaims`、`onExtractNoMatch` 和 `maskDuplicates` 字段](/docs/zh-CN/settings-reference#sandbox-credentials-files)来控制部分掩码,以及模式未匹配到任何内容时的处理方式。

507 553 

508* `onExtractNoMatch` 控制匹配在文件中找不到任何内容要掩盖时发生的情况:554<Warning>

509 555 当匹配未找到任何可掩码的内容时,默认的 `onExtractNoMatch` 值 `warn` 会跳过该条目,因此沙箱命令可以读取未掩码的真实文件。在 macOS 上,只要文件系统隔离开启,Claude Code 就会在模式运行之前将 `mask` 条目作为 `deny` 应用,因此未匹配处理结果仅在[文件系统隔离关闭](#disable-filesystem-isolation)时才在 macOS 上生效。默认值适用于可能合法缺失的凭据。如果机密可能存在但模式可能漏匹配,请使用 [`deny`](/docs/zh-CN/settings-reference#mask-fields-for-files)。

510 * `warn`,默认值,警告并跳过条目,因此沙箱化命令可以不掩盖地读取真实文件。默认值适合凭证可能合法不存在的情况;如果秘密可能存在但模式可能错过它,使用 `deny`556</Warning>

511 * `deny` 使文件改为不可读

512 * `error` 停止沙箱设置,直到你修复配置

513 

514 当读取块不会被强制执行时,Claude Code 将 `deny` 视为 `error`:当你[禁用文件系统隔离](#disable-filesystem-isolation)时,以及当任何设置源中的 `filesystem.allowRead` 条目重新打开文件的路径时。

515* `maskDuplicates` 也替换每个掩盖凭证值的逐字副本,一个 `extract` 捕获或 `decode` 验证的令牌,在匹配跨度外找到,对于在匹配无法到达的地方重复的秘密。它匹配原始子字符串,因此短或常见的值会被替换到处出现;为长、高熵秘密保留它。默认值:false。

516 557 

517`mask` 适用于单个文件,因此单独列出每个凭证文件。Claude Code 回退到 `deny` 对于它无法安全掩盖的 `mask` 条目:目录路径、glob 模式、大于 8 MiB 的文件或非 UTF-8 文本文件。改为将目录写为显式 `deny` 条目;[Which settings can disable it](#which-settings-can-disable-it) 下的表格涵盖每种形式是否固定 `filesystem.disabled` 以及它在文件系统隔离关闭时的行为。558`mask` 仅适用于单个文件,因此请逐个列出每个凭据文件。对于无法安全掩码的 `mask` 条目,Claude Code 会回退为 `deny`:目录路径、glob 模式、大于 8 MiB 的文件,或非 UTF-8 文本的文件。

518 559 

519<h2 id="how-sandboxing-works">560<h2 id="how-sandboxing-works">

520 沙箱如何工作561 沙箱隔离的工作原理

521</h2>562</h2>

522 563 

523<h3 id="filesystem-isolation">564<h3 id="filesystem-isolation">

524 文件系统隔离565 文件系统隔离

525</h3>566</h3>

526 567 

527沙箱化 Bash 工具将文件系统访问限制在特定目录:568沙箱化的 Bash 工具将文件系统访问限制在特定目录内:

528 569 

529* **默认写入行为**:对当前工作目录及其子目录的读写访问,加上使用 `--add-dir`、`/add-dir` 或 [`permissions.additionalDirectories`](/docs/zh-CN/settings-reference#permissions-additionaldirectories) 添加的任何目录,以及 `$TMPDIR` 指向的会话临时目录570* **默认写入行为**:对当前工作目录及其子目录、通过 `--add-dir`、`/add-dir` 或 [`permissions.additionalDirectories`](/docs/zh-CN/settings-reference#permissions-additionaldirectories) 添加的任何目录,以及 `$TMPDIR` 所指向的每用户临时目录拥有读写权限

530* **默认读取行为**:对整个计算机的读取访问,除了某些被拒绝的目录。注意此默认仍允许读取凭证文件,例如 `~/.aws/credentials` 和 `~/.ssh/`。使用 [`sandbox.credentials`](#protect-credentials) 阻止读取这些文件并取消设置密钥环境变量,或将路径添加到 `denyRead`。571* **默认读取行为**:对整台计算机拥有读取权限,但某些被拒绝的目录除外。此默认设置仍允许读取凭据文件,因此请[保护凭据](#protect-credentials),防止命令读取您不希望其读取的凭据。

531* **读取阻止**:启用 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 时,沙箱化命令也会失去对你的主目录和其他保存用户文件的目录的读取访问权限,除了 [Sandboxed commands under the block](/docs/zh-CN/settings-reference#sandboxed-commands-under-the-block) 列出的路径。该部分也说明了此阻止部分何时不适用。572* **读取阻止**:启用 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 后,沙箱化的命令也会失去对您的主目录以及其他存放用户文件的目录的读取权限,[阻止状态下的沙箱化命令](/docs/zh-CN/settings-reference#sandboxed-commands-under-the-block)中列出的路径除外。该部分还说明了此部分阻止在何种情况下不适用。

532* **被阻止的访问**:无法在没有明确权限的情况下修改工作目录、添加的目录和会话临时目录外的文件,包括 shell 配置文件(例如 `~/.bashrc`)和 `/bin/` 中的系统二进制文件573* **Git worktree**:当工作目录是[链接的 git worktree](/docs/zh-CN/worktrees) 时,沙箱还允许写入主仓库共享的 `.git` 目录,以便 `git commit` 等命令能够更新 ref 和索引。对该目录内 `hooks/` 和 `config` 的写入仍被拒绝。

533* **Git worktrees**:当工作目录是[链接的 git worktree](/docs/zh-CN/worktrees)时,沙箱还允许写入主存储库的共享 `.git` 目录,以便 `git commit` 等命令可以更新引用和索引。对该目录内的 `hooks/` 和 `config` 的写入仍然被拒绝。

534* **可配置**:通过设置定义自定义允许和拒绝的路径

535 574 

536要完全跳过文件系统隔离同时保持网络隔离,请设置 [`sandbox.filesystem.disabled`](#disable-filesystem-isolation)。575要完全跳过文件系统隔离而保留网络隔离,请设置 [`sandbox.filesystem.disabled`](#disable-filesystem-isolation)。

537 576 

538<h3 id="protected-paths">577<h3 id="protected-paths">

539 受保护的路径578 受保护的路径

540</h3>579</h3>

541 580 

542在沙箱化命令可以写入的目录内,沙箱仍然拒绝对 Claude Code 从中加载配置和代码的文件进行写入。可以编辑这些文件的命令可能会授予自己权限,或添加 Claude Code 在沙箱外运行的 hook 或 MCP 服务器。权限系统有自己的[受保护路径](/docs/zh-CN/permission-modes#protected-paths),它控制 Claude Code 在工具运行前批准的内容;沙箱的列表适用于已经运行的命令。它涵盖四组路径:581在沙箱化命令可写入的目录中,沙箱仍会拒绝写入 Claude Code 从中加载配置和代码的文件。能够编辑这些文件的命令可能会为自己授予权限,或添加由 Claude Code 在沙箱之外运行的 hook 或 MCP 服务器。权限系统有其自己的[受保护的路径](/docs/zh-CN/permission-modes#protected-paths),用于控制 Claude Code 在工具运行之前批准的内容;而沙箱的列表适用于已经在运行的命令。它涵盖四组路径:

543 582 

544* **在你的工作目录及其上方的目录中**:`.claude` 设置文件、`.claude/skills`、`.claude/agents`、`.claude/commands` 和 `.claude/hooks` 目录、`.mcp.json`,以及 Claude Code 自己运行的文件,例如 `.claude/workflows` 和 `.claude/scheduled_tasks.json`583* **在您的工作目录及其上级目录中**:`.claude` 设置文件,`.claude/skills`、`.claude/agents`、`.claude/commands` 和 `.claude/hooks` 目录,`.mcp.json`,以及 Claude Code 自行运行的文件,例如 `.claude/workflows` 和 `.claude/scheduled_tasks.json`

545* **仅在你的工作目录中**:shell 启动文件,例如 `.bashrc` 和 `.zshrc`、`.gitconfig`、`.vscode` 和 `.idea` 目录,以及 `.git` 内的 `hooks` 和 `config`584* **仅在您的工作目录中**:shell 启动文件(例如 `.bashrc` 和 `.zshrc`)、`.gitconfig`、`.vscode` 和 `.idea` 目录,以及 `.git` 内的 `hooks` 和 `config`

546* **会将你的工作目录变成裸 git 存储库的文件**:顶级的 `HEAD`、`objects` 和 `refs`,加上 `config` 和 `hooks`(当它们已经存在时)。即使 `config` 文件没有 `HEAD` 也会被拒绝。在 Linux 和 WSL2 上,沙箱删除在沙箱化命令运行时出现的顶级 `HEAD` 文件或 `objects` 或 `refs` 目录585* **会将您的工作目录变成裸 git 仓库的文件**:顶层的 `HEAD`、`objects` 和 `refs`,以及当旁边存在 `HEAD` 时,该处已有的 `config` 和 `hooks` 条目。即使没有 `HEAD`,名为 `config` 的文件也会被拒绝。在 Linux 和 WSL2 上,如果沙箱化命令运行期间出现顶层 `HEAD` 文件或 `objects`、`refs` 目录,沙箱会将其删除

547* **在 `~/.claude` 中,或 `CLAUDE_CONFIG_DIR` 指向的目录中**:其大部分内容,加上 `~/.claude.json` 和 `.credentials.json` 凭证存储586* **在 `~/.claude` 或 `CLAUDE_CONFIG_DIR` 所指向的目录中**:其中的大部分内容,以及 `~/.claude.json` 和 `.credentials.json` 凭据存储

548 587 

549如果在会话期间受保护设置文件的路径处出现符号链接,沙箱也会拒绝对其指向的文件进行写入,从下一个命令开始。588如果会话期间在受保护设置文件的路径上出现符号链接,沙箱还会从下一条命令开始拒绝写入该符号链接所指向的文件。

550 589 

551无法豁免这些路径之一:覆盖该路径的 `allowWrite` 条目或 `Edit` 允许规则不会解除保护。关闭保护的唯一方法是 [`filesystem.disabled`](#disable-filesystem-isolation),它为每个路径关闭文件系统隔离。要查看为你的机器解析的大多数这些路径,请运行 `/sandbox` 并打开 **Config** 选项卡,它在 **Denied within allowed** 下列出它们,混合在你自己的 `denyWrite` 条目中。590无法豁免这些路径中的任何一个:覆盖该路径的 `allowWrite` 条目或 `Edit` 允许规则都无法解除保护。关闭此保护的唯一方法是 [`filesystem.disabled`](#disable-filesystem-isolation),它会关闭所有路径的文件系统隔离。要查看其中大部分路径在您的计算机上解析后的结果,请运行 `/sandbox` 并打开 **Config** 标签页,其中会在 **Denied within allowed** 下列出这些路径,并与您自己的 `denyWrite` 条目混合显示。

552 591 

553如果 `git merge` 或 `git checkout` 在这些路径之一上失败并显示 `unable to unlink old`,请参阅[故障排除](#troubleshooting)。592如果 `git merge` 或 `git checkout` 在这些路径之一上因 `unable to unlink old` 而失败,请参阅[git 命令因 `unable to unlink old` 而失败](#a-git-command-fails-with-unable-to-unlink-old)。

554 593 

555<h3 id="network-isolation">594<h3 id="network-isolation">

556 网络隔离595 网络隔离

557</h3>596</h3>

558 597 

559网络访问通过在沙箱外运行的代理服务器进行控制:598沙箱化的命令没有直接通往网络的路径:

599 

600* **Linux 和 WSL2**:命令在一个独立的网络命名空间中运行,该命名空间与您的网络没有连接

601* **macOS**:Seatbelt 沙箱框架默认阻止除连接到沙箱代理之外的其他连接

602 

603Claude Code 在您的计算机上、沙箱之外运行沙箱代理,并通过 `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY` 及相关环境变量将命令引导至该代理。代理会根据您允许和拒绝的域名检查每个连接的主机名。

604 

605工具能够访问的内容取决于它是否使用代理:

560 606 

561* **域名限制**:Claude Code 默认不预先允许任何域名。命令第一次需要新的域名时,Claude Code 会提示批准;在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中,Claude 会根据[按命令允许的域名](#per-command-allowed-domains-in-auto-mode)在命令本身上命名命令需要的主机。607* **读取代理变量的工具**:`curl`、`npm`、基于 HTTPS 的 `git` 以及类似工具在其主机被允许后即可连接。不带端口的 `allowedDomains` 条目会允许该主机上的所有端口

562* **批准选择**:如果在提示时选择"是",Claude Code 会在当前会话的其余时间内允许该主机,之后连接到同一主机时不会再次提示。如果选择"是,以后不再询问",Claude Code 会将 `WebFetch(domain:...)` 允许规则保存到你的[本地设置](/docs/zh-CN/permissions#permission-system),因此该主机在未来会话中保持允许。608* **忽略代理变量的工具**:普通的 `ssh`、大多数数据库驱动程序以及类似工具无法连接,即使是连接到被允许的主机也不行。请参阅[数据库客户端或其他非 HTTP 工具无法访问被允许的主机](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host)

563* **预先允许的域名**:使用 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 预先允许域名以完全避免提示。Claude Code 也预先允许来自 `WebFetch(domain:...)` 允许规则的域名,如[权限规则](#permission-rules)中所述。609* **任何非 TCP 的流量**:UDP、基于 QUIC 的 HTTP/3 以及 `ping` 等 ICMP 工具无法离开沙箱

564* **严格允许列表**:如果在用户、托管或 CLI `--settings` 设置中将 [`strictAllowlist`](/docs/zh-CN/settings-reference#sandbox-network-strictallowlist) 设置为 `true`,Claude Code 会拒绝沙箱化命令访问允许列表外的任何主机,而不是提示。允许列表与沙箱否则会提示的相同:`allowedDomains` 加上来自 `WebFetch(domain:...)` 允许规则的域名,或当设置了 `allowManagedDomainsOnly` 时仅限托管设置条目。Claude Code 仅对沙箱化命令强制执行此;进程内工具(例如 `WebFetch`)仍然遵循其[权限规则](#permission-rules)。在存储库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置它没有效果。需要 Claude Code v2.1.219 或更高版本。

565* **托管锁定**:如果在托管设置中设置了 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly),非允许的域名会自动被阻止而不是提示,只有来自托管设置的 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则被尊重。

566* **企业代理**:当你的网络要求出站流量通过企业代理时,按照[代理配置](/docs/zh-CN/network-config#proxy-configuration)的描述在你的设置的 `env` 块中设置 `HTTPS_PROXY`、`HTTP_PROXY` 和 `NO_PROXY`,以便[后台代理](/docs/zh-CN/network-config#set-network-variables-in-settings-not-the-shell)也能获得它们,或在你启动 Claude Code 的环境中设置。Claude Code 强制执行域名允许列表,然后通过该上游代理隧道允许的连接。

567* **自定义代理支持**:高级用户可以在出站流量上实现自定义规则

568* **全面覆盖**:限制适用于所有脚本、程序和由命令生成的子进程

569 610 

570在 `WebFetch(domain:...)` 规则中,沙箱尊重两种通配符形式:前导 `*.`,例如 `*.example.com`,和裸 `*`。裸 `*` 形式需要 Claude Code v2.1.186 或更高版本。任何其他位置的通配符,例如 `WebFetch(domain:example.*)`,仍然匹配获取但对沙箱化命令没有影响。611以下设置和行为控制代理允许哪些主机:

612 

613* **域名限制**:您允许的域名初始为空。[允许域名之外的主机](#hosts-outside-your-allowed-domains)介绍了命令首次需要新域名时会发生什么。

614* **批准选项**:如果您在提示时选择 Yes,Claude Code 会在当前会话的剩余时间内允许该主机。如果您选择"Yes, and don't ask again",Claude Code 会将一条 `WebFetch(domain:...)` 允许规则保存到您的[本地设置](/docs/zh-CN/permissions#permission-system)中,使该主机在以后的会话中保持允许状态。当沙箱处于[管理员要求](#repository-settings-under-an-admin-required-sandbox)状态时,Claude Code 会将该规则保存到您的用户设置中,使其在每个项目中都生效。

615* **预先允许的域名**:使用 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 预先允许域名,以完全避免提示。Claude Code 还会预先允许来自 `WebFetch(domain:...)` 允许规则的域名,如[权限规则](#permission-rules)中所述。

616* **严格允许列表**:如果您在用户设置、托管设置或 CLI `--settings` 设置中将 [`strictAllowlist`](/docs/zh-CN/settings-reference#sandbox-network-strictallowlist) 设为 `true`,Claude Code 会拒绝沙箱化命令访问允许列表之外的任何主机,而不是进行提示。允许列表由 `allowedDomains` 加上来自 `WebFetch(domain:...)` 允许规则的域名组成;当设置了 `allowManagedDomainsOnly` 时,则仅包含托管设置中的条目。[无需管理员要求沙箱即可生效的锁定](#locks-that-apply-without-an-admin-required-sandbox)介绍了仓库中的条目。Claude Code 仅对沙箱化命令强制执行此设置;`WebFetch` 等进程内工具仍遵循其[权限规则](#permission-rules)。在仓库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中设置此项无效。需要 Claude Code v2.1.219 或更高版本。

617* **托管锁定**:如果在托管设置中设置了 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly),未被允许的域名会被自动阻止而不会提示,并且只有托管设置中的 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则会生效。

618* **企业代理**:当您的网络要求出站流量通过企业代理时,请按照[代理配置](/docs/zh-CN/network-config#proxy-configuration)中的说明设置 `HTTPS_PROXY`、`HTTP_PROXY` 和 `NO_PROXY`,可以设置在您设置的 `env` 块中,以便[后台 Agent](/docs/zh-CN/network-config#set-network-variables-in-settings-not-the-shell) 也能获取它们,也可以设置在您启动 Claude Code 的环境中。Claude Code 会强制执行域名允许列表,然后通过该上游代理隧道传输被允许的连接。`http://` 和 `https://` 代理 URL 均可使用,如有需要,可在 URL 中包含基本身份验证信息。

619 

620在 `WebFetch(domain:...)` 规则中,沙箱支持两种通配符形式:前导 `*.`(例如 `*.example.com`)和单独的 `*`。单独的 `*` 形式需要 Claude Code v2.1.186 或更高版本。位于其他位置的通配符(例如 `WebFetch(domain:example.*)`)仍可匹配抓取请求,但对沙箱化命令没有任何作用。

571 621 

572<Note>622<Note>

573 内置代理基于请求的主机名强制执行允许列表,默认情况下不会终止或检查 TLS 流量。实验性的 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 设置在 Claude Code v2.1.199 及更高版本中可用,使内置代理自行终止 TLS,这是 [`mask` 凭证条目](#mask-credentials)所需的。有关默认设置的含义,请参阅[安全限制](#security-limitations),如果你的威胁模型需要 TLS 检查,请参阅[自定义代理配置](#custom-proxy-configuration)。623 内置代理根据请求的主机名强制执行允许列表,默认情况下不会终止或检查 TLS 流量。实验性的 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 设置(在 Claude Code v2.1.199 及更高版本中可用)会让内置代理自行终止 TLS,这是 [`mask` 凭据条目](#mask-credentials)所必需的。有关默认行为的影响,请参阅[安全限制](#security-limitations);如果您的威胁模型要求进行 TLS 检查,请参阅[自定义代理配置](#custom-proxy-configuration)。

574</Note>624</Note>

575 625 

626<h4 id="hosts-outside-your-allowed-domains">

627 允许域名之外的主机

628</h4>

629 

630当沙箱化命令连接到不在您允许域名中的主机时,该命令会留在沙箱中并等待决定。在交互式终端会话中,该决定取决于您的权限模式:

631 

632| 权限模式 | 连接会发生什么 |

633| :- | :- |

634| `bypassPermissions` 模式,以及[可绕过权限](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)时的计划模式 | 无需提示即被允许 |

635| 手动模式、`acceptEdits` 模式,以及其他情况下的计划模式 | 您会收到提示 |

636| 自动模式 | 被拒绝,除非命令[列出了该主机](#per-command-allowed-domains-in-auto-mode)且分类器批准了该列表 |

637| `dontAsk` 模式 | 被拒绝 |

638 

639启用 [`strictAllowlist`](/docs/zh-CN/settings-reference#sandbox-network-strictallowlist) 或 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) 后,内置沙箱代理会在所有权限模式下拒绝该连接。在 `bypassPermissions` 模式下,除非启用了其中之一,否则允许域名之外的主机会被允许。[非沙箱重试逃生通道](#the-unsandboxed-retry-escape-hatch)介绍了在该模式下命令何时可以离开沙箱。连接到 [`deniedDomains`](/docs/zh-CN/settings-reference#sandbox-network-denieddomains) 中的主机也会在所有权限模式下被拒绝。

640 

641<h4 id="hostnames-that-resolve-to-local-addresses">

642 解析为本地地址的主机名

643</h4>

644 

645主机名通过允许列表后,沙箱代理会对其进行解析,当该名称仅解析为本地地址时拒绝连接。本地地址包括 `127.0.0.1` 等环回地址、`169.254.169.254` 云元数据端点等链路本地地址,以及分配给您自己计算机的地址。名称 `localhost` 和 `*.localhost` 允许解析为环回地址。

646 

647解析为 `10.0.0.0/8` 等私有地址范围的被允许内网主机名可以连接。要让某个名称解析为被拒绝的地址,请将该 IP 地址添加到 `allowedDomains`,例如 `"127.0.0.1:8080"`。

648 

649此检查适用于主机名。对 IP 地址的连接由您允许的域名和权限模式决定。对于通过上游企业代理发送的连接,代理也会跳过此检查,因为该名称由上游代理解析。

650 

576<h4 id="per-command-allowed-domains-in-auto-mode">651<h4 id="per-command-allowed-domains-in-auto-mode">

577 自动模式中按命令允许的域名652 自动模式下的逐命令允许域名

578</h4>653</h4>

579 654 

580在启用沙箱的[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中,Claude 会在命令本身上命名命令需要的主机,而不是为每个连接触发网络批准。在沙箱中运行的每个 Bash、PowerShell 或[监视器](/docs/zh-CN/tools-reference#monitor-tool)命令都可以携带超出沙箱允许列表的主机列表:一个域名,例如 `registry.npmjs.org`,一个通配符,例如 `*.pythonhosted.org`,或一个 IP 地址,每个都带有可选的 `:port`。分类器将主机与命令一起审查。需要 Claude Code v2.1.271 或更高版本。655在启用沙箱隔离的[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,Claude 会在命令本身上指明该命令所需的主机,而不是为每个连接触发网络批准。在沙箱中运行的每个 Bash、PowerShell 或 [Monitor](/docs/zh-CN/tools-reference#monitor-tool) 命令都可以携带一个超出沙箱允许列表的主机列表:可以是 `registry.npmjs.org` 等域名、`*.pythonhosted.org` 等通配符或 IP 地址,每项均可带有可选的 `:port`。分类器会将这些主机与命令一起审查。需要 Claude Code v2.1.271 或更高版本。

581 656 

582批准的列表仅为该一个命令打开这些主机,只要它运行。没有任何内容被添加到你的会话允许的主机或你的设置;下一个命令命名它自己的主机。657经批准的列表仅对该单条命令开放这些主机,并在其运行期间有效。不会向会话允许的主机或您的设置中添加任何内容;下一条命令会指明它自己的主机。

583 658 

584携带主机的命令会进入分类器,而不是由权限规则或沙箱的[自动允许模式](#sandbox-modes)批准。如果[询问规则](/docs/zh-CN/permissions#manage-permissions)强制对命令进行提示,你的终端中的权限对话框会在其旁边列出主机,在那里批准会同时覆盖两者。659携带主机的命令会交给分类器处理,而不是由权限规则或沙箱的[自动允许模式](#sandbox-modes)批准。如果某条[询问规则](/docs/zh-CN/permissions#manage-permissions)强制对该命令进行提示,终端中的权限对话框会在命令旁列出这些主机,在此处批准即同时涵盖两者。

585 660 

586按命令列表仅扩大沙箱默认拒绝的内容。[`deniedDomains`](/docs/zh-CN/settings-reference#sandbox-network-denieddomains) 条目仍然会阻止。当 [`strictAllowlist`](/docs/zh-CN/settings-reference#sandbox-network-strictallowlist) 或 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) 锁定允许列表时,Claude Code 拒绝按命令列表。661逐命令列表只会放宽沙箱默认拒绝的内容。[`deniedDomains`](/docs/zh-CN/settings-reference#sandbox-network-denieddomains) 条目仍会阻止访问。当 [`strictAllowlist`](/docs/zh-CN/settings-reference#sandbox-network-strictallowlist) 或 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) 锁定允许列表时,Claude Code 会拒绝逐命令列表。

587 662 

588当按命令列表适用时,Claude Code 拒绝连接到没有批准命令列出的主机,没有提示或分类器检查。拒绝在命令的结果中命名主机,Claude 会重新运行添加了主机的命令。663在逐命令列表生效期间,Claude Code 会拒绝连接到任何未被已批准命令列出的主机,既不提示也不经过分类器检查。拒绝信息会在命令结果中指明该主机,Claude 会在添加该主机后重新运行命令。

589 664 

590<h4 id="ipv6-addresses-in-domain-lists">665<h4 id="ipv6-addresses-in-domain-lists">

591 域名列表中的 IPv6 地址666 域名列表中的 IPv6 地址

592</h4>667</h4>

593 668 

594沙箱的域名列表是 `allowedDomains`、`deniedDomains` 和为其提供数据的 `WebFetch(domain:...)` 规则。要在其中任何一个中匹配 IPv6 地址,请在括号中写入文字:`"[::1]"` 在每个端口上匹配该地址,`"[::1]:443"` 仅在端口 443 上匹配它。将端口写为 1 到 65535 之间的数字,不带前导零。括号形式需要 Claude Code v2.1.229 或更高版本。在 v2.1.229 之前,当未括号条目的最后一个冒号后的文本是端口号时,Claude Code 将其读为一个,所以 `::1:443` 命名地址 `::1` 在端口 443 上。669要在 `allowedDomains`、`deniedDomains` 或 `WebFetch(domain:...)` 规则中匹配 IPv6 地址,请将地址写在方括号中:`"[::1]"` 匹配该地址的所有端口,`"[::1]:443"` 仅匹配其 443 端口。方括号形式需要 Claude Code v2.1.229 或更高版本。

595 670 

596当你在 IPv6 地址的网络批准提示处选择"是,以后不再询问"时,Claude Code 会使用括号地址保存 `WebFetch(domain:...)` 规则,因此该规则在未来会话中继续匹配该地址。671不带方括号的条目(例如 `::1:443`)存在歧义,既可能是一个地址,也可能是一个地址加端口:

597 672 

598未括号的条目有两个或更多冒号是模糊的:`::1:443` 既是完整的 IPv6 地址,也是后跟端口的地址。Claude Code 保守地强制执行模糊的拼写,而不是猜测你的意思是哪种读法:673* **拒绝列表**:Claude Code 会拒绝该条目可解析出的每一种含义,因此无论您指的是哪种含义都会被阻止。对于无法解析出任何含义的条目,Claude Code 不会阻止任何内容

674* **允许列表**:Claude Code 绝不会允许超出您所写的内容。当主机加端口的含义能够被清晰解析时,它会将有歧义的条目改写为该含义;它也可能会完全丢弃该条目,而不是扩大允许列表

599 675 

600* **拒绝列表**:Claude Code 拒绝条目解析为的每种读法,因此无论你的意思是哪种读法都被阻止。对于没有可解析读法的条目,Claude Code 不阻止任何内容。676要查找有歧义的条目,请在终端中运行 `claude doctor` 并查看 `Sandbox network domain entries have unreliable spellings` 警告。将每个有歧义的条目改写为方括号形式。

601* **允许列表**:Claude Code 永远不允许超过你写的内容。当主机和端口读法干净地解析时,它会将模糊条目重写为其主机和端口读法,并可能完全删除条目,而不是扩大允许列表。

602 

603在你的终端中运行 `claude doctor` 以找到受影响的条目:`Sandbox network domain entries have unreliable spellings` 警告命名最多三个条目并计算其余的。将每个条目重写为括号形式以清除警告。警告也命名拼写不可靠的条目,原因包括 `@`、路径或查询字符,或括号内的通配符。

604 677 

605<h3 id="os-level-enforcement">678<h3 id="os-level-enforcement">

606 操作系统级强制执行679 操作系统级强制执行

607</h3>680</h3>

608 681 

609沙箱化 Bash 工具使用操作系统安全原语:682沙箱化的 Bash 工具使用操作系统安全原语:

610 683 

611* **macOS**:使用 Seatbelt 进行沙箱强制执行684* **macOS**:使用 Seatbelt 进行沙箱强制执行

612* **Linux**:使用 [bubblewrap](https://github.com/containers/bubblewrap) 进行隔离685* **Linux**:使用 [bubblewrap](https://github.com/containers/bubblewrap) 进行隔离

613* **WSL2**:使用 bubblewrap,与 Linux 相同686* **WSL2**:使用 bubblewrap,与 Linux 相同

614 687 

615不支持 WSL1,因为 bubblewrap 需要仅在 WSL2 中可用的内核功能。688您也可以单独运行 [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) 包来包装 Claude Code 进程。请参阅[沙箱运行时](/docs/zh-CN/sandbox-environments#sandbox-runtime)。

616 

617这些相同的原语作为独立的 [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropic-experimental/sandbox-runtime) 包提供,[Sandbox environments](/docs/zh-CN/sandbox-environments#sandbox-runtime) 页面将其作为包装整个 Claude Code 进程的单独方法进行介绍。

618 689 

619<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">690<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">

620 沙箱隔离与权限和权限模式的关系691 沙箱隔离与权限和权限模式的关系


666沙箱的[自动允许模式](#sandbox-modes)与[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分开:自动允许批准 Bash 命令是因为沙箱边界包含它们,而自动模式使用分类器来审查操作。这两者独立工作,可以组合,但[沙箱模式](#sandbox-modes)下列出的例外除外。要为无人值守运行选择隔离边界,请参阅[沙箱环境](/docs/zh-CN/sandbox-environments#how-isolation-relates-to-permission-modes)。有关常见权限模式和沙箱配对及启动每个配对的标志的表格,请参阅[常见设置](/docs/zh-CN/permission-modes#common-setups)。737沙箱的[自动允许模式](#sandbox-modes)与[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分开:自动允许批准 Bash 命令是因为沙箱边界包含它们,而自动模式使用分类器来审查操作。这两者独立工作,可以组合,但[沙箱模式](#sandbox-modes)下列出的例外除外。要为无人值守运行选择隔离边界,请参阅[沙箱环境](/docs/zh-CN/sandbox-environments#how-isolation-relates-to-permission-modes)。有关常见权限模式和沙箱配对及启动每个配对的标志的表格,请参阅[常见设置](/docs/zh-CN/permission-modes#common-setups)。

667 738 

668<h2 id="configure-the-sandbox-for-your-organization">739<h2 id="configure-the-sandbox-for-your-organization">

669 为你的组织配置沙箱740 为您的组织配置沙箱

670</h2>741</h2>

671 742 

672管理员可以为每个用户要求沙箱,防止开发者扩大策略,并通过公司代理路由沙箱流量。743管理员可以为每个用户强制要求沙箱隔离,防止开发者扩大策略,并通过公司代理路由沙箱流量。

673 744 

674<h3 id="enforce-sandboxing-with-managed-settings">745<h3 id="enforce-sandboxing-with-managed-settings">

675 使用托管设置强制执行沙箱746 使用托管设置强制执行沙箱隔离

676</h3>747</h3>

677 748 

678要为每个开发者要求沙箱,通过 [managed settings](/docs/zh-CN/managed-settings#delivery-mechanisms) 提供 `sandbox` 密钥,可以是由你的 MDM 管理的文件,也可以是通过 claude.ai 上的 [server-managed settings](/docs/zh-CN/server-managed-settings)。749要为每个开发者强制要求沙箱,请通过[托管设置](/docs/zh-CN/managed-settings#delivery-mechanisms)下发 `sandbox` 设置项,可以是由您的 MDM 管理的文件,也可以是通过 claude.ai 上的[服务器托管设置](/docs/zh-CN/server-managed-settings)。

679 750 

680以下托管设置配置启用沙箱,如果沙箱无法初始化则拒绝启动 Claude Code,并防止模型在沙箱外重试命令:751以下托管设置配置会启用沙箱,在平台不受支持或缺少依赖时拒绝启动 Claude Code,并防止模型在沙箱外重试命令:

681 752 

682```json theme={null}753```json theme={null}

683{754{


689}760}

690```761```

691 762 

692超过 `enabled` 的两个密钥控制沙箱无法运行命令时会发生什么:763除 `enabled` 之外的两个设置项控制沙箱无法运行命令时会发生什么:

693 764 

694* **`failIfUnavailable`**:缺少的依赖项(例如 Linux 上的 bubblewrap)会阻止 Claude Code 启动,而不是显示警告并回退到非沙箱化执行765* **`failIfUnavailable`**:缺少依赖(例如 Linux 上的 bubblewrap)时会阻止 Claude Code 启动,而不是回退到非沙箱化执行

695* **`allowUnsandboxedCommands: false`**:Claude Code 忽略 `dangerouslyDisableSandbox` 逃生舱,因此在沙箱下失败的命令无法在其外重试766* **`allowUnsandboxedCommands: false`**:Claude Code 忽略 `dangerouslyDisableSandbox` 逃生舱,因此当命令在沙箱下失败时,Claude 无法在沙箱外重试该命令

696 767 

697值得考虑与它们一起添加两个补充。为任何必须在没有隔离的情况下运行的组织批准的工具添加 `excludedCommands`。为凭证目录(例如 `~/.aws` 和 `~/.ssh`)和秘密环境变量添加 [`sandbox.credentials`](#protect-credentials) 条目,因为默认读取策略仍允许这些。768请考虑同时添加以下内容:

698 769 

699此配置对 Claude 运行的命令进行沙箱化。开发者仍然可以在 [`!` shell 模式提示符](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 处键入命令,并在沙箱外运行它,具有与他们在 Claude Code 外任何终端中已有的相同访问权限。有关键入命令运行沙箱化的会话,请参阅 [The unsandboxed retry escape hatch](#the-unsandboxed-retry-escape-hatch)。770* 为任何必须在没有隔离的情况下运行的组织批准的工具添加 `excludedCommands`,因为此配置会[阻止仓库的设置将命令移出沙箱](#repository-settings-under-an-admin-required-sandbox)

771* 为凭据目录(例如 `~/.aws` 和 `~/.ssh`)以及机密环境变量添加 [`sandbox.credentials`](#protect-credentials) 条目,因为默认读取策略仍允许访问这些内容

700 772 

701沙箱不在原生 Windows 上运行,因此如果你的队伍包括 Windows 主机,请将此配置的范围限制在 macOS 和 Linux,或让这些用户在 WSL2 或容器内运行 Claude Code。773此配置对 Claude 运行的命令进行沙箱化。开发者仍然可以在 [`!` shell 模式提示符](/docs/zh-CN/interactive-mode#shell-mode-with-prefix)处键入命令并在沙箱外运行,其访问权限与他们在 Claude Code 之外的任何终端中已有的权限相同。有关键入的命令也在沙箱中运行的会话,请参阅[严格沙箱模式](#turn-off-the-retry-with-strict-sandbox-mode)。

774 

775沙箱无法在原生 Windows 上运行,因此设置 `failIfUnavailable` 后,Claude Code 会在这些机器上于启动时退出。如果您的设备群包含 Windows 主机,您可以:

776 

777* **按操作系统下发配置**:仅在 macOS 和 Linux 机器上通过您的 MDM 或作为[托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms)进行部署。[服务器托管设置](/docs/zh-CN/server-managed-settings#current-limitations)适用于组织中的所有用户

778* **将 Windows 用户迁移到受支持的环境**:让他们在 WSL2 或容器内运行 Claude Code

702 779 

703<h3 id="keep-developers-from-widening-the-policy">780<h3 id="keep-developers-from-widening-the-policy">

704 防止开发者扩大策略781 防止开发者扩大策略

705</h3>782</h3>

706 783 

707对于布尔密钥(例如 `enabled` 和 `failIfUnavailable`),Claude Code 使用托管值并忽略开发者在本地设置的任何内容。对于数组密钥(例如 `excludedCommands` 和 `allowRead`),Claude Code 合并来自会话加载的每个范围的条目,因此开发者可以追加扩大策略的条目。784当托管设置设定了布尔设置项(例如 `enabled` 或 `failIfUnavailable`)时,Claude Code 使用托管值并忽略开发者在本地设置的任何内容。对于数组设置项(例如 `allowRead`),Claude Code 会合并来自会话加载的各个作用域的条目,因此除非有锁定覆盖该设置项,否则开发者可以追加扩大策略的条目。

785 

786除非托管设置已设定,否则开发者的用户设置或 `--settings` 可以启用以下设置项。仓库的 `.claude/settings.json` 也可以启用,除非沙箱是[管理员强制要求的](#repository-settings-under-an-admin-required-sandbox)。其中每一项都会削弱沙箱,因此如果您不希望使用它们,请在托管设置中将其设置为 `false`:

787 

788* [`enableWeakerNestedSandbox`](/docs/zh-CN/settings-reference#sandbox-enableweakernestedsandbox)

789* [`enableWeakerNetworkIsolation`](/docs/zh-CN/settings-reference#sandbox-enableweakernetworkisolation)

790* [`network.allowAllUnixSockets`](/docs/zh-CN/settings-reference#sandbox-network-allowallunixsockets)

791* [`network.allowLocalBinding`](/docs/zh-CN/settings-reference#sandbox-network-allowlocalbinding)

792* [`allowAppleEvents`](/docs/zh-CN/settings-reference#sandbox-allowappleevents),仓库无法启用此项

793 

794在托管设置中将 `allowManagedReadPathsOnly` 设置为 `true`,以便仅采用来自托管设置的 `allowRead` 条目。这可以防止开发者将读取访问权限扩大到组织批准的路径之外。

795 

796要以相同的方式将网络域锁定为托管值,请设置 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly)。启用此锁定后,只有托管设置可以设置[代理端口](#custom-proxy-configuration)。

797 

798当托管设置配置了 `sandbox.filesystem` 或列出任何带有 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,仅托管设置可以设置 [`filesystem.disabled`](#disable-filesystem-isolation),因此开发者无法关闭管理员部署的文件系统限制。[有效的](/docs/zh-CN/settings-reference#invalid-credential-entries-in-managed-settings) `mask` 条目不会锁定该设置项。请参阅[哪些设置可以禁用它](#which-settings-can-disable-it)。

799 

800<h4 id="repository-settings-under-an-admin-required-sandbox">

801 管理员强制要求沙箱时的仓库设置

802</h4>

803 

804当以下任一设置生效时,沙箱即为管理员强制要求的:

805 

806* [`allowUnsandboxedCommands`](/docs/zh-CN/settings-reference#sandbox-allowunsandboxedcommands) 在托管设置中设置为 `false`,或通过 `--settings` 标志设置为 `false`(除非托管设置将其设置为 `true`)

807* [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly) 在托管设置中设置为 `true`

708 808 

709在托管设置中将 `allowManagedReadPathsOnly` 设置为 `true`,以便仅尊重来自托管设置的 `allowRead` 条目。这防止开发者扩大读取访问权限超过组织批准的路径。要以相同的方式将网络域锁定到托管值,请设置 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly)。809这些设置不会启用沙箱,因此还需设置 `enabled`。

710 810 

711当托管设置配置 `sandbox.filesystem` 或列出任何带有 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,仅托管设置可以设置 [`filesystem.disabled`](#disable-filesystem-isolation),因此开发者无法关闭管理员部署的文件系统限制。`mask` 条目是否固定密钥取决于它如何解析;[Which settings can disable it](#which-settings-can-disable-it) 下的表格涵盖了四种情况。811当沙箱为管理员强制要求时,Claude Code 仅从托管设置、`--settings` 标志以及每个开发者的 `~/.claude/settings.json` 中读取放宽沙箱的设置。它会忽略仓库的 `.claude/settings.json` 和 `.claude/settings.local.json` 中的以下设置:

712 812 

713`excludedCommands` 没有等效的仅托管锁定,因此开发者总是可以追加在沙箱外运行其他命令的条目。保持托管列表狭窄。813| 仓库设置 | Claude Code 忽略的内容 |

814| :- | :- |

815| `excludedCommands`、`ignoreViolations`、`network.allowedDomains`、`network.allowUnixSockets`、`network.allowMachLookup`、`network.httpProxyPort`、`network.socksProxyPort` | 所有条目 |

816| `filesystem.allowWrite`、`Edit(...)` 允许规则、`permissions.additionalDirectories` | 每个条目为沙箱化命令授予的写入权限。Claude 的文件工具仍遵循 `Edit(...)` 规则和附加目录 |

817| `WebFetch(domain:...)` 允许规则 | 每条规则添加到沙箱允许列表中的主机。WebFetch 工具仍遵循该规则 |

818| `enableWeakerNestedSandbox`、`enableWeakerNetworkIsolation`、`network.allowAllUnixSockets`、`network.allowLocalBinding` | `true`。`false` 仍然生效 |

819| `enabled`、`failIfUnavailable` | 当开发者的 `~/.claude/settings.json` 设置为 `true` 时的 `false` |

820| `filesystem.allowRead` | 位于托管设置、`--settings` 或用户设置拒绝读取的路径处或其下的条目,或可能匹配此类路径的 glob |

821 

822当沙箱为管理员强制要求时,以下设置仍然生效:

823 

824* **在仓库的文件中**:拒绝条目和 `autoAllowBashIfSandboxed` 值。在托管设置中设置该设置项可防止仓库更改它

825* **在开发者自己的设置中**:表中的设置在 `~/.claude/settings.json` 或 `--settings` 中仍然生效,除非有仅托管锁定(例如 `allowManagedDomainsOnly`)覆盖它们。其中大多数(例如 `excludedCommands` 和 `filesystem.allowWrite`)没有仅托管锁定

826 

827[使用托管设置强制执行沙箱隔离](#enforce-sandboxing-with-managed-settings)下的配置会使沙箱成为管理员强制要求的。请将您批准的工具所需的 `excludedCommands`、`allowWrite` 和套接字条目添加到托管设置中,因为仓库无法提供它们。

828 

829需要 Claude Code v2.1.285 或更高版本。在 v2.1.282 到 v2.1.284 中,相同的设置会使 Claude Code 忽略仓库的 `excludedCommands` 条目。

830 

831<h4 id="locks-that-apply-without-an-admin-required-sandbox">

832 无需管理员强制要求沙箱即可生效的锁定

833</h4>

834 

835即使沙箱不是管理员强制要求的,某些设置也会使 Claude Code 忽略直接覆盖某项限制的仓库设置项。每项设置仅在您于其所在行列出的文件中设置时才有此效果,仓库的其他沙箱设置仍然生效。需要 Claude Code v2.1.285 或更高版本。

836 

837| 设置 | 设置位置 | Claude Code 在仓库设置中忽略的内容 |

838| :- | :- | :- |

839| `network.deniedDomains` 或 `WebFetch(domain:...)` 拒绝规则 | 托管设置、`--settings` | `httpProxyPort` 和 `socksProxyPort` |

840| `network.strictAllowlist` | 托管设置、`--settings`、用户设置 | 代理端口、`allowedDomains` 和 `WebFetch(domain:...)` 允许规则 |

841| `filesystem.denyRead`、`Read(...)` 拒绝规则或 `credentials.files` 条目 | 托管设置、`--settings` | 位于托管设置、`--settings` 或用户设置拒绝读取的路径处或其下的 `allowRead`、`allowWrite`、`Edit(...)` 允许或 `additionalDirectories` 条目,或可能匹配此类路径的 glob |

842 

843这些锁定改变的是沙箱化命令可以访问的内容。WebFetch 工具和 Claude 的文件工具仍遵循仓库的规则和附加目录。

714 844 

715<h3 id="custom-proxy-configuration">845<h3 id="custom-proxy-configuration">

716 自定义代理配置846 自定义代理配置

717</h3>847</h3>

718 848 

719对于需要高级网络安全的组织,你可以实现自定义代理以:849要使用您自己的工具检查、过滤或记录沙箱流量,请将内置的沙箱代理替换为您在同一台机器上运行的代理。

720 850 

721* 解密和检查 HTTPS 流量851要通过网络中其他位置的公司代理路由沙箱流量,请改为设置 `HTTPS_PROXY`,如[网络隔离](#network-isolation)下的**公司代理**条目所述。这样,Claude Code 的允许列表仍然适用。

722* 应用自定义过滤规则

723* 记录所有网络请求

724* 与现有安全基础设施集成

725 852 

726要将 Claude Code 指向你的代理,请在 [sandbox settings](/docs/zh-CN/settings-reference#sandbox-settings) 中设置代理端口:853要将沙箱化命令定向到您的代理,请在[沙箱设置](/docs/zh-CN/settings-reference#sandbox-settings)中设置代理监听的 localhost 端口:

727 854 

728```json theme={null}855```json theme={null}

729{856{


736}863}

737```864```

738 865 

866如果您设置了端口,同时也设置了 `HTTPS_PROXY` 或 `HTTP_PROXY`,Claude Code 不会将沙箱化命令发送到您的代理的内容转发到这些变量指定的代理。要访问公司代理,请配置您自己的代理转发到该代理。

867 

868哪些文件可以设置端口取决于您的其他沙箱设置。以第一个匹配的情况为准:

869 

870* **已启用 `allowManagedDomainsOnly`**:仅托管设置

871* **沙箱为[管理员强制要求的](#repository-settings-under-an-admin-required-sandbox),或适用[更窄的网络锁定](#locks-that-apply-without-an-admin-required-sandbox)**:托管设置、`--settings` 和用户设置

872* **其他情况**:任何设置文件

873 

874Claude Code 会忽略在其他任何位置设置的端口。在 v2.1.285 之前,任何设置文件都可以设置端口。

875 

876<Warning>

877 一旦任一端口生效,您的代理就负责过滤发送给它的所有内容。Claude Code 自身的网络控制(例如 `allowedDomains`、`deniedDomains`、`strictAllowlist`、批准提示和[本地地址检查](#hostnames-that-resolve-to-local-addresses))将不再适用于该流量。沙箱化命令可以连接到任一代理,因此如果您只设置了一个端口,另一个代理上的 Claude Code 域列表无法限制该命令通过您的代理访问的内容。

878</Warning>

879 

739<h2 id="troubleshooting">880<h2 id="troubleshooting">

740 故障排除881 故障排除

741</h2>882</h2>

742 883 

743某些命令在沙箱内失败,即使它们在沙箱外工作。下面的修复涵盖最常见的情况。884某些命令在沙箱内失败,即使它们在沙箱外可以正常工作。请找到与您的症状或错误消息相符的标题。

885 

886如果您的组织的沙箱是[管理员强制要求的](#repository-settings-under-an-admin-required-sandbox),Claude Code 会忽略项目设置文件中这些修复所提到的设置,因此请将它们保存在 `~/.claude/settings.json` 中,这样它们会在每个项目中生效。如果某个修复仍然没有效果,可能是您的组织的托管设置设置了该键。

887 

888添加 `excludedCommands` 模式的修复会让该模式匹配的命令脱离沙箱。请参阅[被排除的命令可以做什么](#run-commands-outside-the-sandbox-with-excludedcommands)。

744 889 

745* **命令因主机不允许错误而失败**:许多 CLI 工具需要到达特定的主机。在提示时授予权限会将主机添加到你的允许列表,以便该工具在将来在沙箱内运行。890<h3 id="commands-fail-with-a-host-not-allowed-error">

746* **`jest` 挂起或失败**:`watchman` 与沙箱不兼容。改为运行 `jest --no-watchman`。891 命令因主机不允许错误而失败

747* **Go 基础 CLI 在 macOS 上 TLS 验证失败**:`gh`、`gcloud` 和 `terraform` 等工具在 Seatbelt 下可能无法进行 TLS 验证。在 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands) 中列出这些工具。如果你使用 `httpProxyPort` 与 MITM 代理和自定义 CA,请改为将 [`enableWeakerNetworkIsolation`](/docs/zh-CN/settings-reference#sandbox-enableweakernetworkisolation) 设置为 `true`。892</h3>

748* **`open`、`osascript` 或基于浏览器的身份验证流在 macOS 上因错误 `-600` 失败**:沙箱默认阻止 Apple Events。在你的用户、托管或 CLI 设置中将 [`allowAppleEvents`](/docs/zh-CN/settings-reference#sandbox-allowappleevents) 设置为 `true` 以允许它们。项目设置对此密钥被忽略。启用它会移除代码执行隔离,因为沙箱化命令随后可以在没有用户提示的情况下启动其他未沙箱化的应用程序,并向运行的应用程序发送 AppleScript 命令,受 macOS 自动化同意提示 (TCC) 的约束。或者,将命令添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。893 

749* **`docker` 命令失败**:`docker` 与沙箱不兼容。将 `docker *` 添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。894许多 CLI 工具需要访问特定的主机。在出现提示时批准该主机,或将其添加到 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains)。如果您的组织使用 `allowManagedDomainsOnly` 锁定了允许列表,则不会出现提示,因此请让您的管理员添加该主机。

750* **`pbcopy`、`xclip` 或 `wl-copy` 不更新剪贴板**:这些剪贴板实用程序可能无法从沙箱内到达系统剪贴板,在这种情况下,管道传输到它们的文本不会到达。

751 895 

752 要将 Claude 的输出放在你的剪贴板上,请要求 Claude 在其响应中打印它,然后运行 [`/copy`](/docs/zh-CN/commands)。`/copy` 从 Claude Code 进程而不是从沙箱化命令写入剪贴板。896<h3 id="jest-hangs-or-fails">

897 `jest` 挂起或失败

898</h3>

753 899 

754 当 Claude 将文本管道传输到这些工具之一时,将该工具添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands) 本身不会将该调用从沙箱中取出。900`watchman` 与沙箱不兼容。改为运行 `jest --no-watchman`。

755* **git 命令因 `unable to unlink old` 失败**:`git merge`、`git checkout` 和类似命令在需要替换沙箱拒绝写入的文件时以这种方式失败,无论该文件是在 [protected path](#protected-paths) 下(如 `.claude/skills`),在你的 `denyWrite` 条目之一下,还是在沙箱允许命令写入的目录之外。在 Linux 和 WSL2 上,错误以 `Read-only file system` 结尾。

756 901 

757 失败后,Claude 可能会 [提供在沙箱外重新运行命令](#the-unsandboxed-retry-escape-hatch);批准该重试,或在另一个终端中自己运行 git 命令。如果你已将 `allowUnsandboxedCommands` 设置为 `false`,Claude 无法提供重试,所以自己运行该命令。如果相同的 git 命令经常失败,将其添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。902<h3 id="go-based-clis-fail-tls-verification-on-macos">

758* **Bubblewrap 在容器内启动失败**:在无特权容器中,bubblewrap 无法挂载新的 `/proc` 文件系统,所以沙箱化命令因 `bwrap` 错误(如 `Can't mount proc on /newroot/proc: Operation not permitted`)失败。将 [`enableWeakerNestedSandbox`](/docs/zh-CN/settings-reference#sandbox-enableweakernestedsandbox) 设置为 `true`,以便内部沙箱绑定挂载容器的现有 `/proc`。仅在外部容器已提供你需要的隔离边界时使用此设置,因为它向沙箱化命令公开进程信息,而新的 `/proc` 挂载会隐藏这些信息。903 基于 Go 的 CLI 在 macOS 上 TLS 验证失败

759* **0 字节只读文件出现在 `.claude` 设置路径,"是的,不要再问"不保存**:在 Linux 和 WSL2 上,沙箱通过在沙箱化命令运行时在那里创建 0 字节只读占位符来对不存在的文件持有写入拒绝。沙箱在之后移除占位符。如果会话在该清理运行之前被杀死,例如通过 SIGKILL,占位符会留下。后续会话在每次启动时再次将它们绑定为只读,所以设置写入(如保存权限选择)在其中一个坐着的地方失败。904</h3>

905 

906`gh`、`gcloud` 和 `terraform` 等工具在 [Seatbelt](#os-level-enforcement) 下可能无法通过 TLS 验证。要在沙箱外运行这些工具,请为每个工具向 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 添加一个模式,例如 `gh *`。这样该工具将以您的完整访问权限及其存储的凭据运行。如果您将 `httpProxyPort` 与 MITM 代理和自定义 CA 一起使用,请改为将 [`enableWeakerNetworkIsolation`](/docs/zh-CN/settings-reference#sandbox-enableweakernetworkisolation) 设置为 `true`。

907 

908<h3 id="open-osascript-or-browser-based-auth-flows-fail-with-error-600-on-macos">

909 `open`、`osascript` 或基于浏览器的身份验证流程在 macOS 上因错误 `-600` 失败

910</h3>

911 

912沙箱默认阻止 Apple Events。在您的用户、托管或 CLI 设置中将 [`allowAppleEvents`](/docs/zh-CN/settings-reference#sandbox-allowappleevents) 设置为 `true` 以允许它们。Claude Code 会忽略项目设置中的此键。

913 

914启用 `allowAppleEvents` 会移除代码执行隔离,因为沙箱化命令随后可以在没有用户提示的情况下启动其他未沙箱化的应用程序,并向正在运行的应用程序发送 AppleScript 命令,但受 macOS 自动化同意提示 (TCC) 的约束。或者,向 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 添加一个模式,例如 `open *`。这样每次 `open` 调用都会经过权限流程,而 `open` 可以启动任何文件或应用,包括 Claude 编写的文件或应用。

915 

916<h3 id="docker-commands-fail">

917 `docker` 命令失败

918</h3>

760 919 

761 运行 `claude doctor` 以列出剩余的占位符文件。[`Stale sandbox mask files left by a killed session`](/docs/zh-CN/errors#stale-sandbox-mask-files-left-by-a-killed-session) 警告命名最多三个,并计算其余的。在该项目中没有其他 Claude Code 会话运行时,使用 `rm` 删除每个文件。在 v2.1.257 之前,Claude Code 留下相同的占位符而不标记它们。920`docker` 与沙箱不兼容。使用 `excludedCommands` 模式(例如 `docker compose *`)将您需要的 `docker` 命令移出沙箱。[使用 `excludedCommands` 在沙箱外运行命令](#run-commands-outside-the-sandbox-with-excludedcommands)说明了被排除的 `docker` 命令可以访问什么。模式越窄,移出沙箱的命令就越少。

762* **`--dangerously-skip-permissions` 以 root 身份失败**:当在 Linux 和 macOS 上以 root 身份或通过 sudo 运行时,此标志被阻止,因为 root 访问加上没有权限提示可以修改系统上的任何文件或服务。检查在识别的沙箱内自动跳过。要在容器中自主运行,请使用 [dev container](/docs/zh-CN/devcontainer) 配置,它以非 root 用户身份运行 Claude Code。921 

922<h3 id="pbcopy-xclip-or-wl-copy-doesn’t-update-the-clipboard">

923 `pbcopy`、`xclip` 或 `wl-copy` 不更新剪贴板

924</h3>

925 

926`pbcopy`、`xclip` 和 `wl-copy` 剪贴板实用程序可能无法从沙箱内访问系统剪贴板,在这种情况下,通过管道传给它们的文本不会到达剪贴板。

927 

928要将 Claude 的输出放到您的剪贴板上,请让 Claude 在其回复中打印出来,然后运行 [`/copy`](/docs/zh-CN/commands)。`/copy` 从 Claude Code 进程而不是从沙箱化命令写入剪贴板。

929 

930当 Claude 将文本通过管道传给这些工具之一时,将该工具添加到 [`excludedCommands`](/docs/zh-CN/settings-reference#sandbox-excludedcommands) 本身并不会将该调用移出沙箱。

931 

932<h3 id="a-git-command-fails-with-unable-to-unlink-old">

933 git 命令因 `unable to unlink old` 失败

934</h3>

935 

936`git merge`、`git checkout` 和类似命令在需要替换沙箱拒绝写入的文件时会因 `unable to unlink old` 失败。在 Linux 和 WSL2 上,错误以 `Read-only file system` 结尾。该文件可能位于以下位置之一:

937 

938* 位于[受保护路径](#protected-paths)(如 `.claude/skills`)下

939* 位于您的某个 `denyWrite` 条目下

940* 根本位于沙箱允许命令写入的目录之外

941 

942失败后,Claude 可能会[提议在沙箱外重新运行该命令](#the-unsandboxed-retry-escape-hatch)。批准该重试,或在另一个终端中自行运行该 git 命令。如果您已将 `allowUnsandboxedCommands` 设置为 `false`,Claude 无法提供重试,因此请自行运行该命令。

943 

944<h3 id="bubblewrap-fails-to-start-inside-a-container">

945 Bubblewrap 在容器内启动失败

946</h3>

947 

948在无特权容器中,[bubblewrap](#os-level-enforcement) 无法挂载新的 `/proc` 文件系统,因此沙箱化命令会因 `bwrap` 错误(如 `Can't mount proc on /newroot/proc: Operation not permitted`)而失败。将 [`enableWeakerNestedSandbox`](/docs/zh-CN/settings-reference#sandbox-enableweakernestedsandbox) 设置为 `true`,以便沙箱改为绑定挂载容器现有的 `/proc`。仅当外部容器已提供您需要的隔离边界时才使用此设置,因为该设置会向沙箱化命令公开进程信息,而新的 `/proc` 挂载会隐藏这些信息。

949 

950<h3 id="0-byte-read-only-files-appear-at-claude-settings-paths-and-yes-and-don’t-ask-again-doesn’t-save">

951 0 字节只读文件出现在 `.claude` 设置路径中,且"是的,不要再问"无法保存

952</h3>

953 

954在 Linux 和 WSL2 上,沙箱化命令运行期间,沙箱通过在尚不存在的文件位置创建 0 字节只读占位符来保持对该文件的写入拒绝。沙箱随后会移除占位符。如果会话在清理运行之前被终止,例如通过 SIGKILL,占位符就会残留下来。后续会话每次启动时都会再次将这些占位符以只读方式绑定,因此在占位符所在的位置,设置写入(如保存权限选择)会失败。

955 

956在终端中运行 `claude doctor` 以列出残留的占位符文件。[`Stale sandbox mask files left by a killed session`](/docs/zh-CN/errors#stale-sandbox-mask-files-left-by-a-killed-session) 警告会列出其中部分文件的名称,并统计其余文件的数量。在该项目中没有其他 Claude Code 会话运行时,使用 `rm` 删除每个文件。在 v2.1.257 之前,Claude Code 会留下相同的占位符而不对其进行标记。

957 

958<h3 id="git-over-ssh-fails-with-the-sandbox-on">

959 启用沙箱时通过 SSH 使用 `git` 失败

960</h3>

961 

962在 macOS 上,即使主机已被允许,针对 SSH 远程仓库的 `git fetch`、`git pull` 和 `git push` 在沙箱内也会失败。在 Linux 和 WSL2 上,只要主机被允许,它们就能正常工作。Claude Code 通过[沙箱代理](#network-isolation)隧道传输 git 的 SSH 连接,而 macOS 上的隧道无法向该代理进行身份验证。

963 

964在 Linux 和 WSL2 上,如果连接仍然失败,请检查以下几点:

965 

966* **主机在端口 22 上被允许**:不带端口的 `allowedDomains` 条目(例如 `"git.example.com"`)即可涵盖

967* **您的企业代理允许端口 22**:如果您的网络需要上游代理,隧道也会经过该代理

968* **密钥可以作为文件读取**:沙箱可能会阻止 `ssh-agent` 套接字,而针对 `~/.ssh` 的 `denyRead` 或 `credentials` 条目会隐藏您的密钥文件

969 

970在 macOS 上,将远程仓库切换为 HTTPS,这需要 HTTPS 凭据,例如个人访问令牌:

971 

972```bash theme={null}

973git remote set-url origin https://git.example.com/example-org/example-repo.git

974```

975 

976如果您必须保留 SSH 远程仓库,请使用 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 将 git 的网络命令移出沙箱:

977 

978```json theme={null}

979{

980 "sandbox": {

981 "excludedCommands": ["git fetch *", "git pull *", "git push *"]

982 }

983}

984```

985 

986这些条目匹配 `git push origin main`。添加了 `cd`、使用 `git -C` 或包含命令替换的调用仍会留在沙箱中。被排除的 git 命令可以访问任何主机,而不仅仅是 `allowedDomains` 中的主机。

987 

988通过 SSH 使用的普通 `ssh`、`scp` 和 `rsync` 会失败,原因见[数据库客户端条目](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host)。

989 

990<h3 id="a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host">

991 数据库客户端或其他非 HTTP 工具无法访问允许的主机

992</h3>

993 

994忽略代理环境变量的工具无法从沙箱内建立连接,即使目标是 `allowedDomains` 中的主机也是如此。沙箱化命令[没有直接访问网络的路由](#network-isolation),因此自行建立连接的工具会失败。大多数数据库驱动程序、普通 `ssh` 以及使用 UDP 的工具都属于这种情况。

995 

996失败表现为网络或名称解析错误:

997 

998* **macOS**:`Operation not permitted`,或名称解析错误,例如 `Could not resolve host`

999* **Linux 和 WSL2**:`Network is unreachable`,或名称解析错误,例如 `Temporary failure in name resolution`

1000 

1001使用代理的工具在其主机未被允许时会以不同方式失败。您会收到网络提示,或者该工具会收到来自代理的 `403` 响应。

1002 

1003要让该工具能够连接,请使用 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 在沙箱外运行需要它的命令。此示例排除了一个脚本,并添加了一条 [ask 规则](/docs/zh-CN/permissions),以便您批准每次运行:

1004 

1005```json theme={null}

1006{

1007 "sandbox": {

1008 "excludedCommands": ["python scripts/load_orders.py *"]

1009 },

1010 "permissions": {

1011 "ask": ["Bash(python scripts/load_orders.py *)"]

1012 }

1013}

1014```

1015 

1016该脚本以您的完整访问权限运行,而 Claude 可以编辑位于您工作目录内的脚本,因此请在出现提示时审查它。

1017 

1018<h3 id="a-command-fails-to-reach-a-server-on-localhost">

1019 命令无法访问 localhost 上的服务器

1020</h3>

1021 

1022默认情况下,沙箱化命令无法直接连接到在您的机器上、沙箱外运行的服务器,例如开发服务器或容器中的数据库。您可以更改的内容取决于您的平台:

1023 

1024* **macOS**:将 [`network.allowLocalBinding`](/docs/zh-CN/settings-reference#sandbox-network-allowlocalbinding) 设置为 `true`。这样沙箱化命令就可以监听网络端口并连接到 localhost 上的任何端口,包括在那里监听的所有其他服务。不需要身份验证的 localhost 服务(例如调试器)随后可以代表该命令在沙箱外执行操作,而在非回环地址上监听的命令会接受来自其他机器的连接

1025* **Linux 和 WSL2**:沙箱化命令的 `localhost` 是该命令私有的。该命令可以监听端口并访问它自己启动的服务器。直接连接到 `localhost` 或 `127.0.0.1` 无法访问主机上的服务器,且 `allowLocalBinding` 不起作用。使用 [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 在沙箱外运行需要访问主机服务器的命令,在那里它不受任何文件系统或网络限制。对于经过沙箱代理的连接,请参阅[解析为本地地址的主机名](#hostnames-that-resolve-to-local-addresses)

1026 

1027此示例在 macOS 上启用该设置:

1028 

1029```json theme={null}

1030{

1031 "sandbox": {

1032 "network": {

1033 "allowLocalBinding": true

1034 }

1035 }

1036}

1037```

1038 

1039针对 `localhost` 的 `allowedDomains` 条目适用于经过代理的连接,因此它不会改变直接连接。Claude Code 为沙箱化命令设置了 `NO_PROXY`,以便它们直接连接到 `localhost`,而不经过代理。该条目还会将您机器 localhost 上的每个端口暴露给确实使用代理的命令。对于指向 `127.0.0.1` 的开发主机名,请参阅[允许的主机名因 `resolved to a loopback address` 被拒绝](#an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address)。

1040 

1041<h3 id="an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address">

1042 允许的主机名因 `resolved to a loopback address` 被拒绝

1043</h3>

1044 

1045沙箱代理会拒绝[解析为本地地址](#hostnames-that-resolve-to-local-addresses)的允许主机名,这会影响指向 `127.0.0.1` 的开发名称,例如 `myapp.test`。命令会收到一个 `403` 响应,其正文会指明地址类型,例如 `Connection to myapp.test blocked: resolved to a loopback address`。

1046 

1047在 `allowedDomains` 中将该名称解析到的 IP 地址与主机名一起添加,并分别附上您的服务器监听的端口:

1048 

1049```json theme={null}

1050{

1051 "sandbox": {

1052 "network": {

1053 "allowedDomains": ["myapp.test:3000", "127.0.0.1:3000"]

1054 }

1055 }

1056}

1057```

1058 

1059不带端口的 IP 地址条目会让沙箱化命令能够访问在该地址上监听的所有服务。

1060 

1061在 v2.1.284 之前,代理会连接到允许的主机名所解析到的任何地址。

1062 

1063<h3 id="/sandbox-fails-with-sandbox-settings-are-overridden-by-a-higher-priority-configuration">

1064 `/sandbox` 因 `Sandbox settings are overridden by a higher-priority configuration` 失败

1065</h3>

1066 

1067当更高的[设置级别](/docs/zh-CN/settings#settings-precedence)设置了 `sandbox.enabled`、`sandbox.autoAllowBashIfSandboxed` 或 `sandbox.allowUnsandboxedCommands` 时,`/sandbox` 会打印 `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.`,而不是打开其面板。该面板会将您的选择保存到 `.claude/settings.local.json`,而保存在那里的值无法覆盖这些级别。

1068 

1069托管设置和 `--settings` 的优先级高于本地设置。要查看此会话加载了其中哪些,请运行 `/status` 并查看 `Setting sources` 行:

1070 

1071* **`Command line arguments`**:如果您使用 [`--settings`](/docs/zh-CN/settings#change-a-setting-for-one-session) 启动了 Claude Code,请检查您传入的文件或 JSON 是否设置了上述某个键。如果是,请在那里更改该值,或在不带这些键的情况下重新启动 Claude Code。

1072* **`Enterprise managed settings`**:已加载您的组织的托管设置。如果它们设置了上述某个键,您无法通过 `/sandbox` 或您控制的任何设置文件更改该键,因此请联系您的管理员。

763 1073 

764<h2 id="limitations">1074<h2 id="limitations">

765 限制1075 限制


771 安全限制1081 安全限制

772</h3>1082</h3>

773 1083 

774* **网络过滤**:沙箱限制进程可以连接的域。默认情况下,内置代理不会终止或检查出站流量上的 TLS,因此不会检查加密连接的内容。实验性的 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 设置在代理处终止 TLS 以进行 [`mask` 凭证替换](#mask-credentials),但不添加内容过滤。你负责确保只有受信任的域在你的策略中被允许。1084* **网络过滤**:沙箱限制进程可以连接的域。默认情况下,内置代理不会终止或检查出站流量上的 TLS,因此不会检查加密连接的内容。实验性的 [`network.tlsTerminate`](/docs/zh-CN/settings-reference#sandbox-network-tlsterminate) 设置在代理处终止 TLS 以进行 [`mask` 凭据替换](#mask-credentials),但不添加内容过滤。您负责确保策略中只允许受信任的域。

775 1085 

776<Warning>1086<Warning>

777 允许广泛的域名(例如 `github.com`)可能会为数据泄露创建路径。因为代理从客户端提供的主机名做出允许决定而不检查 TLS,在沙箱内运行的代码可能会使用 [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) 或类似技术来到达允许列表外的主机。如果你的威胁模型需要更强的保证,请配置一个 [custom proxy](#custom-proxy-configuration),它终止 TLS 并检查流量,并在沙箱内安装其 CA 证书。更强的 TLS 感知网络隔离是一个活跃的开发领域。1087 允许广泛的域名(例如 `github.com`)可能会为数据泄露创建路径。因为代理从客户端提供的主机名做出允许决定而不检查 TLS,在沙箱内运行的代码可能会使用 [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) 或类似技术来到达允许列表外的主机。如果您的威胁模型需要更强的保证,请配置一个 [custom proxy](#custom-proxy-configuration),它终止 TLS 并检查流量,并在沙箱内安装其 CA 证书。更强的 TLS 感知网络隔离是一个活跃的开发领域。

778</Warning>1088</Warning>

779 1089 

780* **通过 Unix 套接字的权限提升**:`allowUnixSockets` 配置可能会无意中授予对可能导致沙箱绕过的系统服务的访问权限。例如,允许访问 `/var/run/docker.sock` 有效地通过 Docker 套接字授予对主机系统的访问权限。仔细考虑你通过沙箱允许的任何 Unix 套接字。1090* **通过 Unix 套接字的权限提升**:`allowUnixSockets` 配置可能会无意中授予对可能导致沙箱绕过的系统服务的访问权限。例如,允许访问 `/var/run/docker.sock` 有效地通过 Docker 套接字授予对主机系统的访问权限。请仔细考虑通过沙箱允许的任何 Unix 套接字。

781* **文件系统权限提升**:过于宽泛的文件系统写入权限可能导致权限提升攻击。允许写入包含 `$PATH` 中的可执行文件、系统配置目录或用户 shell 配置文件(例如 `.bashrc` 或 `.zshrc`)的目录可能导致当其他用户或系统进程访问这些文件时在不同的安全上下文中执行代码。1091* **文件系统权限提升**:过于宽泛的文件系统写入权限可能导致权限提升攻击。允许写入包含 `$PATH` 中的可执行文件、系统配置目录或用户 shell 配置文件(例如 `.bashrc` 或 `.zshrc`)的目录可能导致当其他用户或系统进程访问这些文件时在不同的安全上下文中执行代码。

782* **Linux 沙箱强度**:Linux 实现提供强大的文件系统和网络隔离,但包括一个 `enableWeakerNestedSandbox` 模式,使其能够在 Docker 环境中工作而无需特权命名空间,或在禁用无特权用户命名空间的 Linux 主机上。此选项大大削弱了安全性,应仅在其他隔离被强制执行时使用。1092* **Linux 沙箱强度**:Linux 实现提供强大的文件系统和网络隔离,但包括一个 `enableWeakerNestedSandbox` 模式,使其能够在 Docker 环境中工作而无需特权命名空间。此选项大大削弱了安全性,应仅在其他隔离被强制执行时使用。

783* **macOS 上的 Apple Events**:macOS 沙箱默认阻止 Apple Events。`allowAppleEvents` 设置解除此限制,以便 `open` 和 `osascript` 等工具可以工作,但它移除了代码执行隔离:沙箱化命令可以在没有用户提示的情况下启动其他未沙箱化的应用程序,并可以向运行的应用程序发送 AppleScript 命令,受限于每个应用程序的 macOS 自动化同意提示 (TCC)。它仅从用户、托管或 CLI 设置中被遵守。项目设置无法启用它。1093* **macOS 上的 Apple Events**:macOS 沙箱默认阻止 Apple Events。`allowAppleEvents` 设置解除此限制,以便 `open` 和 `osascript` 等工具可以工作,但它移除了代码执行隔离:沙箱化命令可以在没有用户提示的情况下启动其他未沙箱化的应用程序,并可以向运行的应用程序发送 AppleScript 命令,受限于每个应用程序的 macOS 自动化同意提示 (TCC)。它仅从用户、托管或 CLI 设置中被遵守。项目设置无法启用它。

784 1094 

785<h3 id="platform-and-tool-compatibility">

786 平台和工具兼容性

787</h3>

788 

789* **平台支持**:支持 macOS、Linux 和 WSL2。不支持 WSL1 和原生 Windows。

790* **性能开销**:最小,但某些文件系统操作可能稍慢。

791* **工具兼容性**:某些需要特定系统访问模式的工具可能需要配置调整,或可能需要在沙箱外运行。

792 

793<h3 id="scope">1095<h3 id="scope">

794 范围1096 范围

795</h3>1097</h3>

796 1098 

797沙箱隔离 Bash 子进程。其他工具在不同的边界下运行:1099沙箱隔离 shell 命令及其子进程。[在沙箱外运行的内容](#what-runs-outside-the-sandbox)列出了它不涵盖的工具和辅助进程。计算机使用和子代理与沙箱的关系如下:

798 1100 

799* **内置文件工具**:Read、Edit 和 Write 直接使用权限系统,而不是通过沙箱运行。请参阅 [permissions](/docs/zh-CN/permissions)。1101* **计算机使用**:当 Claude 打开应用程序并控制您的屏幕时,它在您的实际桌面上运行,而不是在隔离的环境中。每个应用程序的权限提示控制每个应用程序。请参阅 [CLI 中的计算机使用](/docs/zh-CN/computer-use) 或 [Desktop 中的计算机使用](/docs/zh-CN/desktop#let-claude-use-your-computer)。

800* **计算机使用**:当 Claude 打开应用程序并控制你的屏幕时,它在你的实际桌面上运行,而不是在隔离的环境中。每个应用程序的权限提示控制每个应用程序。请参阅 [CLI 中的计算机使用](/docs/zh-CN/computer-use) 或 [Desktop 中的计算机使用](/docs/zh-CN/desktop#let-claude-use-your-computer)。1102* **子代理**:[子代理](/docs/zh-CN/sub-agents) 在与父会话相同的进程中运行,并使用相同的沙箱配置。当在父会话中启用沙箱隔离时,子代理内的 Bash 命令被沙箱化。

801* **环境变量**:沙箱化 Bash 命令默认继承父进程环境,包括在那里设置的任何凭证。使用 [`sandbox.credentials`](#protect-credentials) 为沙箱化命令取消设置或掩盖特定变量,或设置 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/zh-CN/env-vars) 以从所有子进程中删除凭证。1103* **Mods**:[mod](/docs/zh-CN/plugins/mods/overview) 是一种在 Claude Code 内运行自身代码的插件,由 mod 启动的进程在沙箱外运行。请参阅 [mod 可以访问的内容](/docs/zh-CN/plugins/mods/overview#what-a-mod-can-reach)。

802* **子代理**:[subagents](/docs/zh-CN/sub-agents) 在与父会话相同的进程中运行,并使用相同的沙箱配置。当在父会话中启用沙箱时,子代理内的 Bash 命令被沙箱化。

803 1104 

804<Warning>1105<Warning>

805 有效的沙箱需要同时进行文件系统和网络隔离。没有网络隔离,被破坏的代理可能会泄露敏感文件,如 SSH 密钥。没有文件系统隔离,无论是来自宽泛的策略还是来自 [disabling the filesystem layer](#disable-filesystem-isolation),被破坏的代理可能会后门系统资源以获得网络访问权限。当你扩大默认值时,检查 `allowWrite` 路径、广泛的 `allowedDomains` 条目或 `excludedCommands` 异常是否不会撤销另一侧的限制。1106 有效的沙箱隔离需要同时进行文件系统和网络隔离。没有网络隔离,被入侵的 Agent 可能会泄露敏感文件,如 SSH 密钥。没有文件系统隔离,无论是来自宽泛的策略还是来自 [disabling the filesystem layer](#disable-filesystem-isolation),被入侵的 Agent 可能会在系统资源中植入后门以获得网络访问权限。当您扩大默认值时,请检查 `allowWrite` 路径、广泛的 `allowedDomains` 条目或 `excludedCommands` 例外是否会撤销另一侧的限制。

806</Warning>1107</Warning>

807 1108 

808<h2 id="see-also">1109<h2 id="see-also">

security.md +15 −19

Details

20 基于权限的架构20 基于权限的架构

21</h3>21</h3>

22 22 

23在 Manual mode 中,Claude Code 以只读权限开始。当 Claude Code 需要编辑文件、运行测试或执行命令时,它会先询问您,您可以选择批准该操作一次或从此允许该操作。23会话的权限模式决定了 Claude 无需先询问您即可执行哪些操作。自动模式是交互式终端和 VS Code 会话的内置初始权限模式。[会话以哪种模式启动](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)介绍了早期版本、其他使用入口以及可更改初始权限模式的设置。

24 24 

25在 Manual mode 中,Claude Code 在运行可以修改您的系统的 Bash 命令之前也会询问。它运行一组内置的[只读命令](/docs/zh-CN/permissions#read-only-commands),如 `ls`、`cat` 和 `git status`,无需询问。您和您的组织可以直接配置这些权限。25* **自动模式**:一个单独的分类器模型代替您审查操作,并阻止它认为不安全的操作。[分类器如何评估操作](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions)列出了 Claude Code 直接批准的操作、发送给分类器的操作以及 Claude Code 仍然询问您的操作。您显式设置的 ask 规则和 deny 规则仍然适用,您的组织可以[关闭自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)

26* **Manual mode**:Claude Code 以只读权限开始。当它需要编辑文件、运行测试或执行命令时,它会先询问您,您可以选择批准该操作一次或从此允许该操作。它无需询问即可运行一组内置的[只读命令](/docs/zh-CN/permissions#read-only-commands),如 `ls`、`cat` 和 `git status`

26 27 

27在 [auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 中,一个单独的分类器模型会审查操作而不是您,并阻止它认为不安全的操作。[分类器如何评估操作](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions) 列出了 Claude Code 直接批准的操作、发送给分类器的操作以及 Claude Code 仍然询问您的操作。您显式设置的 ask 规则和拒绝规则仍然适用,您的组织可以 [关闭 auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)。28您和您的组织可以直接配置这些权限。有关详细的权限配置,请参阅 [Permissions](/docs/zh-CN/permissions)。

28 

29会话开始时使用哪种权限模式取决于您的计划、启动它的界面以及您的设置和您的组织的设置;请参阅 [Permission modes](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)。

30 

31有关详细的权限配置,请参阅 [Permissions](/docs/zh-CN/permissions)。

32 29 

33<h3 id="built-in-protections">30<h3 id="built-in-protections">

34 内置保护31 内置保护


37为了降低代理系统中的风险:34为了降低代理系统中的风险:

38 35 

39* **沙箱化 bash 工具**:使用文件系统和网络隔离的 [Sandbox](/docs/zh-CN/sandboxing) bash 命令,减少权限提示同时保持安全性。使用 `/sandbox` 配置以定义 Claude Code 可以自主工作的边界36* **沙箱化 bash 工具**:使用文件系统和网络隔离的 [Sandbox](/docs/zh-CN/sandboxing) bash 命令,减少权限提示同时保持安全性。使用 `/sandbox` 配置以定义 Claude Code 可以自主工作的边界

40* **工作目录边界**:在 Manual mode 中,Claude Code 只能写入启动它的文件夹及其子文件夹,不能在没有明确权限的情况下修改父目录中的文件。在 Manual mode 中,Claude Code 在使用 Read、Grep 和 Glob 工具读取此边界外的路径之前也会询问您。使用[额外目录](/docs/zh-CN/permissions#working-directories)扩展边界以跳过提示,或使用[沙箱 `denyRead` 规则](/docs/zh-CN/sandboxing#filesystem-isolation)限制对只读 Bash 命令可用的更广泛读取访问,这些规则仅在启用沙箱时适用37* **工作目录边界**:在 Manual mode 中,Claude Code 的文件工具在读取或写入启动它的文件夹及其子文件夹之外的内容之前会先询问您。该边界是一个权限提示,因此您批准的 Bash 命令仍然可以写入您的用户账户有权写入的任何位置

38 * 要在没有提示的情况下读取某个文件夹,请将其添加为[额外目录](/docs/zh-CN/permissions#working-directories)

39 * 要在操作系统层面限制 Bash 命令,请启用[沙箱隔离](/docs/zh-CN/sandboxing#filesystem-isolation)

41* **提示疲劳缓解**:支持按用户、按代码库或按组织的白名单常用安全命令40* **提示疲劳缓解**:支持按用户、按代码库或按组织的白名单常用安全命令

42* **Accept Edits 模式**:自动批准文件编辑和一组固定的文件系统 Bash 命令,如 `mkdir`、`touch`、`rm`、`mv`、`cp` 和 `sed`,用于工作目录中的路径。其他 Bash 命令和超出范围的路径仍然会提示41* **Accept Edits 模式**:自动批准文件编辑和一组固定的文件系统 Bash 命令,如 `mkdir`、`touch`、`rm`、`mv`、`cp` 和 `sed`,用于工作目录中的路径。其他 Bash 命令和超出范围的路径仍然会提示

43 42 


45 用户责任44 用户责任

46</h3>45</h3>

47 46 

48Claude Code 只拥有您授予它的权限。您负责在批准前审查建议的代码和命令的安全性。47您负责在批准前审查建议的代码和命令的安全性。

49 48 

50<h2 id="protect-against-prompt-injection">49<h2 id="protect-against-prompt-injection">

51 防止提示注入50 防止提示注入


58</h3>57</h3>

59 58 

60* **权限系统**:在手动模式下,敏感操作需要明确批准59* **权限系统**:在手动模式下,敏感操作需要明确批准

61* **上下文感知分析**:通过分析完整请求来检测潜在有害指令

62* **输入清理**:通过处理用户输入来防止命令注入

63* **网络命令批准**:从网络获取内容的命令,如 `curl` 和 `wget`,默认不会自动批准。在手动模式下,它们会像任何其他非只读 Bash 命令一样提示,因此您仍然可以批准一次或添加显式允许规则,如 `Bash(curl *)`。要阻止 Claude 运行它们,请将其添加到 [`permissions.deny`](/docs/zh-CN/permissions#tool-specific-permission-rules)。拒绝规则匹配[按照编写的命令](/docs/zh-CN/permissions#bash-rule-limits);对于不依赖命令文本的网络强制执行,请参阅[沙箱网络隔离](/docs/zh-CN/sandboxing#network-isolation)60* **网络命令批准**:从网络获取内容的命令,如 `curl` 和 `wget`,默认不会自动批准。在手动模式下,它们会像任何其他非只读 Bash 命令一样提示,因此您仍然可以批准一次或添加显式允许规则,如 `Bash(curl *)`。要阻止 Claude 运行它们,请将其添加到 [`permissions.deny`](/docs/zh-CN/permissions#tool-specific-permission-rules)。拒绝规则匹配[按照编写的命令](/docs/zh-CN/permissions#bash-rule-limits);对于不依赖命令文本的网络强制执行,请参阅[沙箱网络隔离](/docs/zh-CN/sandboxing#network-isolation)

64 61 

65<h3 id="privacy-safeguards">62<h3 id="privacy-safeguards">


79</h3>76</h3>

80 77 

81* **网络请求批准**:在手动模式下,进行网络请求的大多数工具默认需要用户批准78* **网络请求批准**:在手动模式下,进行网络请求的大多数工具默认需要用户批准

82* **隔离的上下文窗口**:Web fetch 使用单独的上下文窗口以避免注入潜在恶意提示79* **网页摘要**:对于大多数获取操作,WebFetch 会针对页面运行一次单独的模型调用,Claude 接收的是该调用的回答,而不是原始页面。请参阅 [WebFetch 工具行为](/docs/zh-CN/tools-reference#webfetch-tool-behavior)

83* **信任验证**:首次代码库运行和新 MCP servers 需要信任验证80* **信任验证**:在交互式会话中,当您在尚未信任的文件夹中启动 Claude Code 时,它会显示工作区信任对话框。项目 `.mcp.json` 中的服务器有其单独的批准提示,[项目作用域](/docs/zh-CN/mcp#project-scope) 列出了跳过该提示的会话

84 * 注意:使用 `-p` 标志以非交互方式运行时,信任验证被禁用81 * 注意:`-p` 会话不会显示上述任何一种提示。[信任文件夹之前会运行什么](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 列出了仓库中的文件在此情况下可以运行的内容

85 * 注意:当您直接在主目录中启动 Claude Code 时,信任接受仅在当前会话期间保持,不会写入磁盘,因此提示在每次启动时都会重新出现。没有设置可以持久化它。请从项目子目录启动 Claude Code,其中信任接受按目录保存82 * 注意:当您直接在主目录中启动 Claude Code 时,信任接受仅在当前会话期间保持,不会写入磁盘,因此提示在每次启动时都会重新出现。没有设置可以持久化它。请从项目子目录启动 Claude Code,其中信任接受按目录保存

86* **命令注入检测**:在手动模式下,即使之前已白名单,可疑的 bash 命令也需要手动批准83* **命令注入检测**:在手动模式下,Claude Code 在运行无法完全分析的 Bash 命令之前会先询问。针对命令一部分的允许规则(如 `Bash(git *)`)不会跳过该提示。[沙箱隔离的命令](/docs/zh-CN/permissions#how-permissions-interact-with-sandboxing)可以在没有该提示的情况下运行

87* **故障关闭匹配**:在手动模式下,不匹配的命令默认需要批准84* **故障关闭匹配**:在手动模式下,不匹配的命令默认需要批准

88* **自然语言描述**:复杂的 bash 命令包括用户理解的说明85* **安全凭据存储**:API 密钥和令牌在可用时存储在 macOS Keychain 中。在 Linux 上,它们存储在模式为 `0600` 的文件中;在 Windows 上,它们存储在继承您用户配置文件目录访问控制的文件中。请参阅 [Credential Management](/docs/zh-CN/authentication#credential-management)

89* **安全凭证存储**:API 密钥和令牌存储在可用时的 macOS Keychain 中,在 Windows 和 Linux 上受文件权限保护。请参阅 [Credential Management](/docs/zh-CN/authentication#credential-management)

90 86 

91<Warning>87<Warning>

92 **Windows WebDAV 安全风险**:在 Windows 上运行 Claude Code 时,我们建议不要启用 WebDAV 或允许 Claude Code 访问可能包含 WebDAV 子目录的路径,如 `\\*`。[WebDAV 已被 Microsoft 弃用](https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#:~:text=The%20Webclient%20\(WebDAV\)%20service%20is%20deprecated),原因是安全风险。启用 WebDAV 可能允许 Claude Code 触发对远程主机的网络请求,绕过权限系统。88 **Windows WebDAV 安全风险**:在 Windows 上运行 Claude Code 时,我们建议不要启用 WebDAV 或允许 Claude Code 访问可能包含 WebDAV 子目录的路径,如 `\\*`。[WebDAV 已被 Microsoft 弃用](https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#:~:text=The%20Webclient%20\(WebDAV\)%20service%20is%20deprecated),原因是安全风险。启用 WebDAV 可能允许 Claude Code 触发对远程主机的网络请求,绕过权限系统。


108 MCP 安全性104 MCP 安全性

109</h2>105</h2>

110 106 

111Claude Code 允许用户配置 Model Context Protocol (MCP) servers。允许的 MCP servers 列表在您的源代码中配置,作为 Claude Code 设置的一部分,工程师将其检入源代码控制。107您可以将 Claude Code 连接到 Model Context Protocol (MCP) 服务器。项目作用域的服务器在 `.mcp.json` 中定义,您可以将该文件检入源代码控制。[其他作用域](/docs/zh-CN/mcp#mcp-installation-scopes)的服务器和 [claude.ai 连接器](/docs/zh-CN/mcp#how-connectors-reach-claude-code)是在仓库之外配置的,插件也可以添加服务器,因此查看 `.mcp.json` 并不能看到会话可能加载的所有服务器。要限制您的组织中可以运行哪些服务器,请参阅[托管 MCP 配置](/docs/zh-CN/managed-mcp)。

112 108 

113我们鼓励编写您自己的 MCP servers 或使用来自您信任的提供商的 MCP servers。您能够为 MCP servers 配置 Claude Code 权限。Anthropic 在将连接器添加到 [Anthropic Directory](https://claude.ai/directory) 之前,会根据其 [列表标准](https://claude.com/docs/connectors/building/review-criteria) 审查连接器,但不对任何 MCP server 进行安全审计或管理。109我们鼓励编写您自己的 MCP servers 或使用来自您信任的提供商的 MCP servers。您能够为 MCP servers 配置 Claude Code 权限。Anthropic 在将连接器添加到 [Anthropic Directory](https://claude.ai/directory) 之前,会根据其 [列表标准](https://claude.com/docs/connectors/building/review-criteria) 审查连接器,但不对任何 MCP server 进行安全审计或管理。

114 110 


127* **隔离的虚拟机**:每个云会话在隔离的、由 Anthropic 管理的 VM 中运行123* **隔离的虚拟机**:每个云会话在隔离的、由 Anthropic 管理的 VM 中运行

128* **网络访问控制**:网络访问默认受限,可以配置为禁用或仅允许特定域124* **网络访问控制**:网络访问默认受限,可以配置为禁用或仅允许特定域

129* **凭证保护**:GitHub 凭证在 Anthropic 的服务器上以加密方式存储,永远不会进入会话 VM。VM 持有一个作用域限制于该会话的短期凭证,GitHub 流量通过 [Anthropic proxy](/docs/zh-CN/cloud-environments#github-proxy) 进行,该代理在服务器端附加 GitHub 凭证。有关如何授予访问权限,请参阅 [GitHub authentication options](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)125* **凭证保护**:GitHub 凭证在 Anthropic 的服务器上以加密方式存储,永远不会进入会话 VM。VM 持有一个作用域限制于该会话的短期凭证,GitHub 流量通过 [Anthropic proxy](/docs/zh-CN/cloud-environments#github-proxy) 进行,该代理在服务器端附加 GitHub 凭证。有关如何授予访问权限,请参阅 [GitHub authentication options](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)

130* **分支限制**:Git push 操作限制在当前工作分支126* **推送限制**:[GitHub 代理](/docs/zh-CN/cloud-environments#github-proxy)会拒绝删除分支,以及推送分支以外的任何内容(例如标签)。GitHub 通过将您仓库的分支保护规则和规则集应用于您所连接的 GitHub 访问权限,来决定会话可以更新哪些分支。该访问权限可以绕过的规则不会阻止会话的推送

131* **审计日志**:云会话中的所有操作都被记录以用于合规和审计目的127* **审计日志**:云会话中的所有操作都被记录以用于合规和审计目的

132* **自动清理**:会话 VM 在一段时间不活动后被回收128* **自动清理**:会话 VM 在一段时间不活动后被回收

133* **删除**:您可以随时 [delete a session](/docs/zh-CN/claude-code-on-the-web#delete-sessions)。有关 Anthropic 为云会话存储的内容,请参阅 [Cloud execution data flow](/docs/zh-CN/data-usage#cloud-execution-data-flow-and-dependencies)129* **删除**:您可以随时 [delete a session](/docs/zh-CN/claude-code-on-the-web#delete-sessions)。有关 Anthropic 为云会话存储的内容,请参阅 [Cloud execution data flow](/docs/zh-CN/data-usage#cloud-execution-data-flow-and-dependencies)

Details

1001. 具有可用容量的运行器声称会话并对其持有租约。1001. 具有可用容量的运行器声称会话并对其持有租约。

1012. 运行器将存储库克隆到其工作目录中并生成子 Claude Code 进程。1012. 运行器将存储库克隆到其工作目录中并生成子 Claude Code 进程。

1023. 子进程通过 HTTPS 流回事件,而运行器继续轮询;每次轮询刷新租约并充当心跳。1023. 子进程通过 HTTPS 流回事件,而运行器继续轮询;每次轮询刷新租约并充当心跳。

1034. 如果运行器停止轮询约 60 秒,服务器会将会话重新排队给另一个运行器。1034. 如果运行器停止轮询,其租约会在大约 60 秒后失效,服务器会在几分钟内将会话重新排队给另一个运行器。

104 104 

105运行器给每个轮询请求 10 秒。当请求超时、丢失或获得运行器无法解析的响应时,运行器继续为其活跃会话服务,并在一两秒后重试,而不是等待下一个计划的轮询。例如,一个拦截代理用自己的页面回答轮询会产生运行器无法解析的响应。每次另一个请求以这些方式之一失败时,运行器会将下一次重试前的间隔加倍,最多 20 秒,并在租约即将过期时缩短间隔。105运行器给每个轮询请求 10 秒。当请求超时、丢失或获得运行器无法解析的响应时,运行器继续为其活跃会话服务,并在一两秒后重试,而不是等待下一个计划的轮询。例如,一个拦截代理用自己的页面回答轮询会产生运行器无法解析的响应。每次另一个请求以这些方式之一失败时,运行器会将下一次重试前的间隔加倍,最多 20 秒,并在租约即将过期时缩短间隔。

106 106 


119 119 

1201. 运行器停止接受新工作。1201. 运行器停止接受新工作。

1212. 运行器通过 [`--release-idle-session-min`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 标志使用的相同释放路径释放每个活跃会话,因此当用户发送下一条消息时,会话在新运行器上恢复。运行器何时释放每个会话取决于其状态:1212. 运行器通过 [`--release-idle-session-min`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 标志使用的相同释放路径释放每个活跃会话,因此当用户发送下一条消息时,会话在新运行器上恢复。运行器何时释放每个会话取决于其状态:

122 * 运行器在会话中途转时立即释放它。122 * 对于处于轮次中途的会话,运行器会在该轮次完成后释放它。它首先等待会话的进程向 Anthropic 报告该轮次结束,等待时间不超过 [`SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS`](/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings)。在 v2.1.280 之前,运行器会在轮次完成后立即释放会话。

123 * 当转完成并留下后台任务运行时,运行器等待最多 60 秒,然后释放会话,即使它们仍在运行。如果任务已完成但读取其结果的后续转还未运行,运行器保持会话直到该转完成,并等待不超过 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 以便该转开始。123 * 当轮次完成并留下后台任务运行时,运行器等待最多 60 秒,然后释放会话,即使它们仍在运行。如果任务已完成但读取其结果的后续轮次还未运行,运行器保持会话直到该轮次完成,并等待不超过 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 以便该轮次开始。

1243. 运行器在所有会话都被释放后以 0 退出。1243. 运行器在所有会话都被释放后以 0 退出。

125 125 

126超过杀死的转仍然丢失;[关闭时序](/docs/zh-CN/self-hosted-environments-deploy#shutdown-timing)涵盖了调整边距的大小。没有 `--retire-at`,无信号主机杀死与崩溃无法区分:控制平面记录丢失的工作者而不是干净释放,会话重新排队给另一个运行器。126超过杀死的转仍然丢失;[关闭时序](/docs/zh-CN/self-hosted-environments-deploy#shutdown-timing)涵盖了调整边距的大小。没有 `--retire-at`,无信号主机杀死与崩溃无法区分:控制平面记录丢失的工作者而不是干净释放,会话重新排队给另一个运行器。

Details

4 4 

5# 在自托管环境中自定义会话5# 在自托管环境中自定义会话

6 6 

7> 使用包装脚本在自托管环境会话中自定义每个会话的凭证、生命周期钩子和按需运行程序生成。7> 使用包装脚本在自托管环境会话中自定义每个会话的凭据、生命周期 hook 和按需运行程序生成。

8 8 

9<Note>9<Note>

10 自托管环境在 Team 和 Enterprise 计划中处于公开测试阶段;[Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 通过在 [**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments) 上打开 **Allow self-hosted environments** 来启用它们。本页面假设您已有一个正常运行的运行程序;有关设置,请参阅 [quickstart](/docs/zh-CN/self-hosted-environments-quickstart),有关 fleet recipes,请参阅 [Deploy to production](/docs/zh-CN/self-hosted-environments-deploy)。10 自托管环境在 Team 和 Enterprise 计划中处于公开测试阶段;[Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 通过在 [**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments) 上打开 **Allow self-hosted environments** 来启用它们。本页面假设您已有一个正常运行的运行程序;有关设置,请参阅[快速入门](/docs/zh-CN/self-hosted-environments-quickstart),有关集群部署方案,请参阅[部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy)。

11</Note>11</Note>

12 12 

13[self-hosted environment](/docs/zh-CN/self-hosted-environments) 在您自己的基础设施上运行 Claude Code [cloud sessions](/docs/zh-CN/claude-code-on-the-web),由您部署的运行程序进程执行。在没有配置的情况下,该运行程序克隆会话的存储库,生成 Claude Code,然后进行清理。本页面适用于操作运行程序的平台工程师:它涵盖了当这些默认值不适用时的扩展点,从每个会话的凭证配置到完全替换检出。包装脚本和钩子作为运行程序主机上的可执行文件运行,该主机是 Linux 或 macOS,本页面上的示例假设使用 POSIX shell。13[自托管环境](/docs/zh-CN/self-hosted-environments)在您自己的基础设施上运行 Claude Code [云端会话](/docs/zh-CN/claude-code-on-the-web),由您部署的运行程序进程执行。在没有配置的情况下,该运行程序克隆会话的仓库,生成 Claude Code,然后进行清理。本页面适用于操作运行程序的平台工程师:它涵盖了当这些默认值不适用时的扩展点,从每个会话的凭据配置到完全替换检出。包装脚本和 hook 作为运行程序主机上的可执行文件运行,该主机是 Linux 或 macOS,本页面上的示例假设使用 POSIX shell。

14 14 

15本页面上的一些钩子环境变量仍然使用 `pool`,例如 `CLAUDE_RUNNER_POOL_ID`;CLI 标志和环境变量名称使用 `environment`,例如 `--environment-secret-file`。15本页面上的一些 hook 环境变量仍然使用 `pool`,例如 `CLAUDE_RUNNER_POOL_ID`;CLI 标志和环境变量名称使用 `environment`,例如 `--environment-secret-file`。

16 16 

17<h2 id="wrapper-scripts">17<h2 id="wrapper-scripts">

18 包装脚本18 包装脚本

19</h2>19</h2>

20 20 

21当每个会话需要运行器无法自行完成的设置时,使用包装脚本:为会话创建者配置作用域的短期凭证、导出特定于环境的密钥、准备语言工具链或围绕子进程应用资源限制。运行器每个会话启动一次您的包装脚本,而不是 Claude Code 二进制文件。通过 `exec` 进入 `$CLAUDE_RUNNER_CLAUDE_BIN`(运行器自己的二进制文件)来结束包装脚本,以便信号和退出代码正确传播。21当每个会话需要运行器无法自行完成的设置时,使用包装脚本:为会话创建者配置作用域的短期凭据、导出特定于环境的密钥、准备语言工具链或围绕子进程应用资源限制。运行器每个会话启动一次您的包装脚本,而不是 Claude Code 二进制文件。通过 `exec` 进入 `$CLAUDE_RUNNER_CLAUDE_BIN`(运行器自己的二进制文件)来结束包装脚本,以便信号和退出码正确传播。

22 22 

23启动运行器时,使用 `--exec-path` 或 `SELF_HOSTED_RUNNER_EXEC_PATH` 指向包装脚本:23启动运行器时,使用 `--exec-path` 或 `SELF_HOSTED_RUNNER_EXEC_PATH` 指向包装脚本:

24 24 


30 30 

31| 变量 | 描述 |31| 变量 | 描述 |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话 JWT,前缀为 `sk-ant-cc-`。其 `act` 声明标识会话创建者,包含创建者的电子邮件和上游身份提供者主题(如果创建表面记录了它们)。该值是生成时的令牌;刷新通过子进程的 stdin 到达,因此包装脚本只看到初始值。请参阅 [Verify session identity](/docs/zh-CN/self-hosted-environments-identity)。 |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话 JWT,前缀为 `sk-ant-cc-`。其 `act` 声明标识会话创建者,并在创建会话的使用入口记录了创建者电子邮件时包含该电子邮件。该值是生成时的令牌;刷新通过子进程的 stdin 到达,因此包装脚本只看到初始值。请参阅 [Verify session identity](/docs/zh-CN/self-hosted-environments-identity)。 |

34| `CCR_SESSION_ACCOUNT_EMAIL` | 会话创建者的电子邮件,由运行器从令牌的 `act.email` 声明中预先提取,无需签名验证。适合用于标记,例如提交预告片。当电子邮件控制凭证发放时,验证令牌并从中读取声明;请参阅 [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator)。当令牌不包含创建者电子邮件时未设置。视为个人可识别信息。 |34| `CCR_SESSION_ACCOUNT_EMAIL` | 会话创建者的电子邮件,由运行器从令牌的 `act.email` 声明中预先提取,无需签名验证。适合用于标记,例如提交 trailer。当电子邮件控制凭据发放时,验证令牌并从中读取声明;请参阅 [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator)。当令牌不包含创建者电子邮件时未设置。视为个人可识别信息。 |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app`、`ios`、`claude_code_cli` 或 `scheduled_trigger`。Anthropic 在会话创建时记录该值一次,因此包装脚本和每个生命周期钩子都看到相同的值。仅将其用于采用分析和标记,不用作授权信号。当会话没有记录或识别的表面时未设置,因此在 `set -u` 下将其引用为 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`。需要 Claude Code v2.1.229 或更高版本。 |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app`、`ios`、`claude_code_cli` 或 `scheduled_trigger`。Anthropic 在会话创建时记录该值一次,因此包装脚本和每个生命周期 hook 都看到相同的值。仅将其用于采用分析和标记,不用作授权信号。当会话没有记录或识别的使用入口时未设置,因此在 `set -u` 下将其引用为 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`。需要 Claude Code v2.1.229 或更高版本。 |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | 运行器自己的 Claude Code 二进制文件的绝对路径。使用 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` 结束您的包装脚本,以移交到固定的二进制文件,而无需硬编码安装路径。 |36| `CLAUDE_RUNNER_CLAUDE_BIN` | 运行器自己的 Claude Code 二进制文件的绝对路径。使用 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` 结束您的包装脚本,以移交到固定的二进制文件,而无需硬编码安装路径。 |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | 会话 ID,采用标记的 `cse_...` 形式。这与[生命周期钩子](#lifecycle-hooks)以 `session_...` 形式在 `CLAUDE_RUNNER_SESSION_ID` 中看到的是同一个会话;UUID 变量在两者之间匹配,将 `cse_` 前缀替换为 `session_` 会产生会话 URL 中显示的 ID。 |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | 会话 ID,采用标记的 `cse_...` 形式。这与[生命周期 hook](#lifecycle-hooks)以 `session_...` 形式在 `CLAUDE_RUNNER_SESSION_ID` 中看到的是同一个会话;UUID 变量在两者之间匹配,将 `cse_` 前缀替换为 `session_` 会产生会话 URL 中显示的 ID。 |

38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式。 |38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式,供以 UUID 作为键的系统使用。 |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 绝对路径,指向保存当前会话 JWT 的按会话文件,在令牌刷新时保持最新。Shell 子进程在下载用户添加到会话的附件时从中读取其 `Authorization` 标头。`exec` 自动保留该变量;重建子进程环境的包装脚本必须携带该变量,否则附件下载会无声地停止工作。 |39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 绝对路径,指向保存当前会话 JWT 的按会话文件,在令牌刷新时保持最新。Shell 子进程在下载用户添加到会话的附件时从中读取其 `Authorization` 标头。`exec` 自动保留该变量;重建子进程环境的包装脚本必须携带该变量,否则附件下载会无声地停止工作。 |

40| `CLAUDE_CONFIG_DIR` | 按会话 Claude 配置目录,在会话启动时从运行器在启动时捕获的运行器主机配置快照中写入;请参阅 [Permissions and tool approval](#permissions-and-tool-approval)。此处的写入仅限于此会话。 |40| `CLAUDE_CONFIG_DIR` | 按会话 Claude 配置目录,在会话启动时从运行器在启动时捕获的运行器主机配置快照中写入;请参阅 [Permissions and tool approval](#permissions-and-tool-approval)。此处的写入仅限于此会话。除非您使用 [`--remove-session-state`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动运行器,否则会话结束后该目录仍会保留在 `<base-dir>/_sessions/` 下;请参阅 [Reuse a pre-warmed checkout](/docs/zh-CN/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)。 |

41| `ANTHROPIC_BASE_URL` | 子进程将使用的 API 基础 URL,由控制平面按会话交付,通常为 `https://api.anthropic.com`。不要覆盖它:会话的推理凭证是 Anthropic 颁发的 OAuth 令牌,其他提供者不接受,因此自托管环境中的推理无法路由到其他地方。 |41| `ANTHROPIC_BASE_URL` | 子进程将使用的 API 基础 URL,由控制平面按会话交付,通常为 `https://api.anthropic.com`。不要覆盖它:会话的推理凭据是 Anthropic 颁发的 OAuth 令牌,其他提供者不接受,因此自托管环境中的推理无法路由到其他地方。 |

42| `CLAUDE_CODE_OAUTH_TOKEN` | 子进程用于模型推理的短期 OAuth 访问令牌,作用域仅限于模型推理和文件上传,生命周期约为 30 分钟。运行器在过期前重新生成它,并通过子进程的 stdin 交付轮换,因此不 [keep stdin attached](#keep-stdin-and-file-descriptor-3-attached) 的包装脚本只看到初始值。不要依赖您的组织 IP 允许列表来限制此令牌的使用:将其视为持有者凭证,如果泄露,大约 30 分钟内仍可使用,不要记录它、写入磁盘或在会话容器外转发它。 |42| `CLAUDE_CODE_OAUTH_TOKEN` | 子进程用于模型推理的短期 OAuth 访问令牌,作用域仅限于模型推理和文件上传,生命周期约为 30 分钟。运行器在过期前重新生成它,并通过子进程的 stdin 交付轮换,因此不 [keep stdin attached](#keep-stdin-and-file-descriptor-3-attached) 的包装脚本只看到初始值。不要依赖您的组织 IP 允许列表来限制此令牌的使用:将其视为持有者凭据,如果泄露,大约 30 分钟内仍可使用,不要记录它、写入磁盘或在会话容器外转发它。 |

43 43 

44包装脚本还继承子进程的其余托管环境,包括任何服务器提供的环境变量。`exec` 自动传播所有内容;如果您的包装脚本以其他方式生成子进程,请转发完整环境。44包装脚本还继承子进程的其余托管环境,包括任何服务器提供的环境变量。`exec` 自动传播所有内容;如果您的包装脚本以其他方式生成子进程,请转发完整环境。

45 45 


49 49 

50子进程的 stdin 是运行器的控制通道。令牌轮换和会话结束信号在其上到达。运行器还在文件描述符 3 上打开一个管道,并从中读取子进程的活动信号以驱动空闲和启动超时。普通的 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` 自动保留两者。50子进程的 stdin 是运行器的控制通道。令牌轮换和会话结束信号在其上到达。运行器还在文件描述符 3 上打开一个管道,并从中读取子进程的活动信号以驱动空闲和启动超时。普通的 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` 自动保留两者。

51 51 

52如果您的包装脚本使用裸 `&` 在后台运行子进程,它会切断子进程的 stdin:会话看起来健康,直到初始 OAuth 令牌的大约 30 分钟生命周期过期,然后每个 API 调用都失败,出现 `401 authentication_error`。如果您的包装脚本必须在后台运行子进程,例如保持拆卸陷阱活跃,请在文件描述符 4 或更高版本上保存 stdin 并显式重新连接它:52如果您的包装脚本使用裸 `&` 在后台运行子进程,它会切断子进程的 stdin:会话看起来健康,直到初始 OAuth 令牌的大约 30 分钟生命周期过期,然后每个 API 调用都失败,出现 `401 authentication_error`。如果您的包装脚本必须在后台运行子进程,例如保持拆卸陷阱活跃,请在文件描述符 4 或更高编号上保存 stdin 并显式重新连接它:

53 53 

54```bash theme={null}54```bash theme={null}

55exec 4<&055exec 4<&0


61 61 

62不要在包装脚本中关闭或重用文件描述符 3。重定向子进程的 stdout 和 stderr 是可以的。62不要在包装脚本中关闭或重用文件描述符 3。重定向子进程的 stdout 和 stderr 是可以的。

63 63 

64<h3 id="pass-the-system-prompt-flags-through">

65 透传系统提示词标志

66</h3>

67 

68Anthropic 控制平面为会话发送的系统提示词和追加系统提示词以文件路径的形式(而不是内联文本)到达您的包装脚本。运行器将每个提示词写入会话配置目录 `CLAUDE_CONFIG_DIR` 中的文件,并在您的包装脚本接收的参数中传递其路径,形式为 [`--system-prompt-file <path>` 或 `--append-system-prompt-file <path>`](/docs/zh-CN/cli-reference#system-prompt-flags)。

69 

70Claude Code v2.1.281 或更高版本上的运行器以文件形式传递提示词。在 v2.1.281 之前,运行器以 `--system-prompt <text>` 和 `--append-system-prompt <text>` 的形式传递它们。

71 

72在您的包装脚本或 [`command` hook](#command) 中,按如下方式处理这些标志:

73 

74* **透传它们**:使用 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` 结束包装脚本,这会将文件标志与其他所有参数一起转发。不要丢弃或改写它们。如果会话丢失了某个提示词文件标志,它将在没有控制平面为其发送的指令的情况下运行。

75* **在 v2.1.281 或更高版本的运行器上,您追加的文件标志会替换服务器的标志,而不会叠加**:每个提示词文件标志只接受单个值,Claude Code 保留最后一次出现的值,因此如果您在 `"$@"` 之后追加 `--append-system-prompt-file <path>`,您文件的内容将替换服务器追加的指令。要在服务器指令之上添加指令,请将其放入运行器镜像的 `CLAUDE.md` 中,运行器会将其[植入每个会话的用户级配置](#how-each-session’s-config-is-assembled)。

76 

64<h3 id="provision-credentials-scoped-to-the-session-creator">77<h3 id="provision-credentials-scoped-to-the-session-creator">

65 配置作用域限定为会话创建者的凭证78 配置作用域限定为会话创建者的凭据

66</h3>79</h3>

67 80 

68使用 `decode-token` 子命令从会话 JWT 读取声明。它从参数、`CLAUDE_CODE_SESSION_ACCESS_TOKEN` 或 stdin 读取令牌,按该顺序;请参阅 [Verify the token inside the session](/docs/zh-CN/self-hosted-environments-identity#verify-the-token-inside-the-session) 了解它检查的内容。下面的示例解码创建者身份,将其交换为短期 AWS 凭证,并 exec 进入 Claude Code:81使用 `decode-token` 子命令从会话 JWT 读取声明。它从参数、`CLAUDE_CODE_SESSION_ACCESS_TOKEN` 或 stdin 读取令牌,按该顺序;请参阅 [Verify the token inside the session](/docs/zh-CN/self-hosted-environments-identity#verify-the-token-inside-the-session) 了解它检查的内容。下面的示例解码创建者身份,将其交换为短期 AWS 凭据,并 exec 进入 Claude Code:

69 82 

70```bash theme={null}83```bash theme={null}

71#!/bin/bash84#!/bin/bash


81exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"94exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"

82```95```

83 96 

84在提取的声明控制身份验证决策时,使用 `jq -re` 而不是 `jq -r`,以便缺失的声明以非零状态退出,而不是将字面字符串 `null` 传递给下游。由组织服务身份(例如机器人和代理会话)创建的会话携带 `agent:` 主题而不是 `user:`,因此此示例拒绝它们;如果您的环境为这些会话提供服务,请明确决定包装脚本是否为它们回退到默认凭证,而不是退出。当您的凭证交换需要 SSO 主题或电子邮件时,读取 `.act.attested_by.sub` 或 `.act.email` 并处理它们的缺失:令牌仅在创建表面记录它们时才携带它们,[CLI 分派的会话](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop) 可能两者都缺少。有关完整的声明参考和来自运行器外部服务的验证,请参阅 [Verify session identity](/docs/zh-CN/self-hosted-environments-identity)。97在提取的声明控制身份验证决策时,使用 `jq -re` 而不是 `jq -r`,以便缺失的声明以非零状态退出,而不是将字面字符串 `null` 传递给下游。由组织服务身份(例如机器人和 Agent 会话)创建的会话携带 `agent:` 主题而不是 `user:`,因此此示例拒绝它们;如果您的环境为这些会话提供服务,请明确决定包装脚本是否为它们回退到默认凭据,而不是退出。当您的凭据交换改为需要电子邮件时,读取 `.act.email` 并处理其缺失:令牌仅在创建会话的使用入口记录了电子邮件时才携带它,[CLI 分派的会话](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop) 可能缺少它。有关完整的声明参考和来自运行器外部服务的验证,请参阅 [Verify session identity](/docs/zh-CN/self-hosted-environments-identity)。

85 98 

86<h2 id="lifecycle-hooks">99<h2 id="lifecycle-hooks">

87 生命周期钩子100 生命周期钩子


95 checkout108 checkout

96</h3>109</h3>

97 110 

98每个存储库运行一次,代替运行器的内置克隆和获取。使用钩子从读通镜像克隆、从存档为工作树设置种子或应用按会话 git 身份验证。运行器设置:111每个仓库运行一次,代替运行器的内置克隆和获取。使用此 hook 从读通镜像克隆、从存档为工作树设置种子或应用按会话的 git 身份验证。运行器设置以下变量,并且可能设置表中未列出的其他 `CLAUDE_RUNNER_` 变量:

99 112 

100| 变量 | 描述 |113| 变量 | 描述 |

101| :- | :- |114| :- | :- |


107| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |120| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |

108| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或识别的表面时未设置。 |121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或识别的表面时未设置。 |

109| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |

123| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |

110 124 

111脚本必须在 `CLAUDE_RUNNER_CHECKOUT_PATH` 处留下一个工作树,检出到请求的修订版本。分离的 HEAD 是可以的;运行器在其上创建会话的工作分支。运行器之后验证路径包含 `.git`;如果您的钩子具体化非 git 源(例如 Perforce 或解包的 tarball),请在运行器的环境中设置 `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` 以跳过该检查。基于 Git 的流程(例如工作分支创建和推送结果)需要 git 检出,因此使用 [`post-session` 钩子](#post-session) 从非 git 树导出结果。125脚本必须在 `CLAUDE_RUNNER_CHECKOUT_PATH` 处留下一个工作树,检出到请求的修订版本。分离的 HEAD 是可以的;运行器在其上创建会话的工作分支。运行器之后验证路径包含 `.git`;如果您的钩子具体化非 git 源(例如 Perforce 或解包的 tarball),请在运行器的环境中设置 `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` 以跳过该检查。基于 Git 的流程(例如工作分支创建和推送结果)需要 git 检出,因此使用 [`post-session` 钩子](#post-session) 从非 git 树导出结果。

112 126 


139| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |153| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |

140| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或识别的表面时未设置。需要 Claude Code v2.1.229 或更高版本。 |154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或识别的表面时未设置。需要 Claude Code v2.1.229 或更高版本。 |

141| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |

156| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |

142 157 

143`CLAUDE_RUNNER_EXIT_REASON` 采用四个值之一:158`CLAUDE_RUNNER_EXIT_REASON` 采用四个值之一:

144 159 


155#!/usr/bin/env bash170#!/usr/bin/env bash

156set -u171set -u

157IFS=':'172IFS=':'

158# Pin config the session could have planted in the checkout's .git/config:

159# -c overrides beat repo-local settings, blocking session-written fsmonitor,173# -c overrides beat repo-local settings, blocking session-written fsmonitor,

160# hook-path, and gpg-program config from executing code with the hook's174# hook-path, and gpg-program config from executing code with the hook's

161# privileges. Repo-local credential.helper, core.sshCommand, and pushurl175# privileges. -c commit.gpgsign=false also leaves these rescue commits

162# still apply; if the hook holds credentials the session didn't, pin the176# unsigned under --configure-git.

163# push URL and helper too (see the note below the script).177# Repo-local credential.helper and pushurl still apply, and on a runner

178# before v2.1.280 so does core.sshCommand; if the hook holds credentials

179# the session didn't, see the note below the script.

164g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

165 -c commit.gpgsign=false "$@"; }181 -c commit.gpgsign=false "$@"; }

166for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


172done188done

173```189```

174 190 

175钩子使用运行器主机上其自己环境中可用的任何 git 凭证进行推送。在 [no-credentials-in-the-image posture](/docs/zh-CN/self-hosted-environments-deploy#configure-git) 下,包括当内置克隆通过 Anthropic git 代理时,没有凭证,因此在推送前在钩子内生成短期推送凭证:将钩子在 `CLAUDE_CODE_SESSION_ACCESS_TOKEN` 中接收的会话令牌与您自己的令牌服务交换,如 [Verify session identity](/docs/zh-CN/self-hosted-environments-identity) 所述进行验证,然后让您的凭证服务为令牌的 `act` 声明中的身份发放短期推送凭证。当钩子持有会话没有的凭证时,也要固定它推送的位置:将 `origin` 替换为操作员提供的 URL,并传递 `-c credential.helper=` 加上您自己的助手,以便会话写入的 repo-local 配置无法重定向凭证推送。191hook 使用运行器主机上其自身环境中可用的任何 git 凭据进行推送。在[镜像中不含凭据的部署方式](/docs/zh-CN/self-hosted-environments-deploy#configure-git)下,包括内置克隆通过 Anthropic git 代理进行时,都没有可用凭据,因此请在推送前于 hook 内生成短期推送凭据:将 hook 在 `CLAUDE_CODE_SESSION_ACCESS_TOKEN` 中收到的会话令牌与您自己的令牌服务进行交换,并按照[验证会话身份](/docs/zh-CN/self-hosted-environments-identity)中的说明对其进行验证。当 hook 持有会话没有的凭据时,请将 `origin` 替换为操作员提供的 URL,并传递 `-c credential.helper=` 加上您自己的助手。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)说明了会话写入的配置仍可能影响哪些内容。

176 192 

177<h4 id="hook-timing-when-the-runner-releases-a-session">193<h4 id="hook-timing-when-the-runner-releases-a-session">

178 运行器释放会话时的钩子时序194 运行器释放会话时的钩子时序


187 203 

188在 `SIGTERM` 排空期间,运行器持有会话租约直到钩子完成;请参阅 [Shutdown timing](/docs/zh-CN/self-hosted-environments-deploy#shutdown-timing)。204在 `SIGTERM` 排空期间,运行器持有会话租约直到钩子完成;请参阅 [Shutdown timing](/docs/zh-CN/self-hosted-environments-deploy#shutdown-timing)。

189 205 

206<h3 id="git-configuration-inside-lifecycle-hooks">

207 生命周期 hook 中的 Git 配置

208</h3>

209 

210`checkout` 和 `post-session` hook 运行时,其环境中包含会话的访问令牌,而它们运行的 git 会读取会话可以写入的配置文件,例如 `~/.gitconfig` 和检出目录中的 `.git/config`。在任一 hook 运行之前,运行器会在 hook 的环境中以 `GIT_CONFIG_COUNT`/`GIT_CONFIG_KEY_n`/`GIT_CONFIG_VALUE_n` 对和 git 环境变量的形式设置 git 设置,包括以下各项。Git 将这些设置的优先级排在所有配置文件之上,并且它们仅适用于您的 hook 运行的 git,而不适用于会话自己的 git。启动时,运行器会打印一行 `[runner:git] lifecycle hooks:`,显示当前生效的钩子路径、允许的协议、gpg 程序和签名模式。需要 Claude Code v2.1.280 或更高版本。

211 

212* **Git 钩子**:除非您提供值,否则 `core.hooksPath` 为 `/dev/null`,因此 git 会跳过仓库 `.git/hooks` 中的钩子以及 `~/.gitconfig` 指定的任何钩子目录。要提供一个值,请在运行器的环境中将 `core.hooksPath` 导出为 `GIT_CONFIG_KEY_n`/`GIT_CONFIG_VALUE_n` 对。运行器还会从系统 git 配置中读取 `core.hooksPath`,并且仅当运行器的用户无法写入该文件、其指定的目录或其中的钩子文件时才使用它。当运行器忽略某个值时,启动时会有一行 `[runner:warn]` 指明该值及原因。

213* **文件系统监视器**:`core.fsmonitor` 为空,因此 hook 中的 git 不会运行配置文件中指定的监视程序。

214* **远程协议**:`GIT_ALLOW_PROTOCOL` 为 `https:http:ssh`。使用本地路径、`file://` URL 或 `git://` URL 的克隆、获取或推送会失败,并报错 `fatal: transport 'file' not allowed` 或 `fatal: transport 'git' not allowed`。

215* **SSH 命令和凭据提示**:hook 中的 git 会忽略配置文件中的 `core.sshCommand` 和 `core.askPass`。要使用您自己的 SSH 命令,请在运行器的环境中设置 `GIT_SSH_COMMAND`。要使用凭据提示程序,请在其中设置 `GIT_ASKPASS`。会话会继承运行器的环境,因此这两个变量也会影响会话自己的 git。请勿在其中任何一个中放入凭据。

216* **gpg 程序**:`gpg.program`、`gpg.openpgp.program`、`gpg.x509.program` 和 `gpg.ssh.program` 是运行器设置的路径,绝不会取自配置文件中的值。

217* **提交签名**:使用 [`--configure-git`](/docs/zh-CN/self-hosted-environments-deploy#let-the-runner-configure-git) 时,您从 hook 中进行的提交会以会话身份签名。不使用该标志时,`commit.gpgsign` 和 `tag.gpgsign` 为 `false`。

218 

219要更改其中某项设置,请使用运行器的环境或在 hook 内使用 `git -c` 选项:

220 

221* **配置对**:您在运行器环境中导出的 `GIT_CONFIG_KEY_n`/`GIT_CONFIG_VALUE_n` 对会替换运行器为同一键设置的值。请从 `0` 开始为您的配置对编号,并将 `GIT_CONFIG_COUNT` 设置为配置对的数量。当计数所声明的最后一个配置对缺失时,运行器会忽略您的所有配置对,并在启动时记录一行 `[runner:warn]`。

222* **Git 环境变量**:运行器会保留您在其环境中设置的 `GIT_ALLOW_PROTOCOL`、`GIT_SSH_COMMAND` 和 `GIT_ASKPASS`。

223* **`git -c` 选项**:hook 内的 `git -c` 选项会覆盖 `GIT_CONFIG_KEY_n` 对,无论是运行器的还是您的。它不会更改 `GIT_ALLOW_PROTOCOL`、`GIT_SSH_COMMAND` 或 `GIT_ASKPASS`,git 会先于任何配置读取这些变量。

224 

225hook 中的 git 仍会从每个配置文件(包括会话可以写入的配置文件)中读取运行器未设置的所有设置,例如凭据助手、`url.*.insteadOf` 重写和过滤器驱动程序。这些文件之一中指定的凭据助手或过滤器驱动程序会以您的 hook 的权限作为程序运行,并且这些文件中的配置仍可能改变您的 hook 推送的目标位置,包括推送到您在命令行上传递的 URL。

226 

227在 v2.1.280 之前,运行器不设置这些设置中的任何一项,并且在 `--configure-git` 下,从 hook 中进行的提交会失败,除非 hook 传递了 `-c commit.gpgsign=false`。

228 

190<h3 id="command">229<h3 id="command">

191 command230 command

192</h3>231</h3>


199 按需运行器238 按需运行器

200</h2>239</h2>

201 240 

202您可以为每个会话启动一个运行器,而不是运行固定的队列。编排器是一个单独的、无状态的子命令,它轮询 Anthropic 以获取生成请求(每个没有可用运行器的排队会话一个),并为每个运行您的 `spawn-runner` 钩子。您的钩子向您的平台提交工作负载:Kubernetes Job、EC2 实例、Nomad dispatch。241您可以为每个会话启动一个运行器,而不是运行固定的队列。编排器是一个单独的、无状态的子命令,它轮询 Anthropic 以获取生成请求(每个没有可用运行器的排队会话一个),并为每个请求运行您的 `spawn-runner` hook。您的 hook 向您的平台提交工作负载:Kubernetes Job、EC2 实例、Nomad dispatch。

203 242 

204按需运行器改进了凭证卫生。在固定队列上,环境密钥存在于每个运行器主机上,这是运行用户会话的同一主机。使用编排器,环境密钥仅保留在编排器主机上,该主机从不运行用户代码;每个生成的运行器接收一个单次使用的工作单,恰好注册一个运行器,然后过期。243按需运行器改进了凭据卫生。在固定队列上,环境密钥存在于每个运行器主机上,这是运行用户会话的同一主机。使用编排器,环境密钥仅保留在编排器主机上,该主机从不运行用户代码;每个生成的运行器接收一个单次使用的工作单,恰好注册一个运行器,然后过期。

205 244 

206要启动编排器,请传递环境密钥和包含可执行 `spawn-runner` 脚本的钩子目录:245要启动编排器,请传递环境密钥和包含可执行 `spawn-runner` 脚本的 hook 目录:

207 246 

208```bash theme={null}247```bash theme={null}

209claude self-hosted-runner orchestrator \248claude self-hosted-runner orchestrator \


211 --hooks-dir /etc/claude/hooks250 --hooks-dir /etc/claude/hooks

212```251```

213 252 

214编排器在轮询之间保持无状态,因此您可以针对同一环境运行两个或多个副本以实现可用性。每个生成请求由服务器端的恰好一个副本声称。所有副本必须使用相同的 `--expected-spawn-seconds` 值;请参阅 [hook contract](#the-spawn-runner-hook)。253编排器在轮询之间保持无状态,因此您可以针对同一环境运行两个或多个副本以实现可用性。每个生成请求由服务器端的恰好一个副本声称。所有副本必须使用相同的 `--expected-spawn-seconds` 值;请参阅 [hook 约定](#the-spawn-runner-hook)。

215 254 

216<h3 id="the-spawn-runner-hook">255<h3 id="the-spawn-runner-hook">

217 spawn-runner 钩子256 spawn-runner hook

218</h3>257</h3>

219 258 

220编排器为每个生成请求运行一次 `${hooks-dir}/spawn-runner`。钩子必须异步提交工作,不等待运行器启动,并在 `--hook-timeout`(默认 60 秒)内返回。钩子接收:259编排器为每个生成请求运行一次 `${hooks-dir}/spawn-runner`。hook 必须异步提交工作,不等待运行器启动,并在 `--hook-timeout`(默认 60 秒)内返回。hook 接收:

221 260 

222| 变量 | 描述 |261| 变量 | 描述 |

223| :- | :- |262| :- | :- |

224| `CLAUDE_RUNNER_WORK_ORDER_FILE` | 包含新运行器注册的已签名工作单 JWT 的临时文件的路径。钩子退出后删除。不要记录文件的内容。 |263| `CLAUDE_RUNNER_WORK_ORDER_FILE` | 包含新运行器注册所用的已签名工作单 JWT 的临时文件的路径。hook 退出后删除。不要记录文件的内容。 |

225| `CLAUDE_RUNNER_ORDER_ID` | 不透明的幂等性密钥,每个生成请求唯一,对 Kubernetes 资源名称安全。将其用作您的配置器的去重密钥。 |264| `CLAUDE_RUNNER_ORDER_ID` | 不透明的幂等性密钥,每个生成请求唯一,对 Kubernetes 资源名称安全。仅将订单 ID 用作您的配置器的去重密钥。 |

226| `CLAUDE_RUNNER_SESSION_ID` | 此请求所针对的会话。对于预热请求为空,当设置 [`--min-idle`](/docs/zh-CN/self-hosted-environments-reference#orchestrator-cli-flags) 时启动待命运行器,在任何特定会话之前,因此不要假设变量已设置。 |265| `CLAUDE_RUNNER_SESSION_ID` | 此请求所针对的会话。该会话的每次重新请求都会重复此值,因此请将其用于日志记录和路由,而不要用作去重密钥。对于预热请求为空,预热请求在设置 [`--min-idle`](/docs/zh-CN/self-hosted-environments-reference#orchestrator-cli-flags) 时于任何特定会话之前启动待命运行器,因此不要假设变量已设置。 |

227| `CLAUDE_RUNNER_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式。对于预热请求为空。 |266| `CLAUDE_RUNNER_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式。对于预热请求为空。 |

228| `CLAUDE_RUNNER_ATTEMPT` | 此会话已有多少个生成请求。对于预热请求为 `0`。 |267| `CLAUDE_RUNNER_ATTEMPT` | 此会话已有多少个生成请求。对于预热请求为 `0`。 |

229| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | 来自轮询响应的 HTTP `Date` 标头的服务器时间。当钩子验证工作单 JWT 的 `exp` 时,与此值进行比较而不是本地时钟,以容忍时钟偏差。当网关省略标头时为空。 |268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | 来自轮询响应的 HTTP `Date` 标头的服务器时间。当 hook 验证工作单 JWT 的 `exp` 时,与此值进行比较而不是本地时钟,以容忍时钟偏差。当网关省略标头时为空。 |

230| `CLAUDE_RUNNER_POOL_ID` | 新运行器应加入的环境的 ID,采用 `ccpool_...` 形式 |269| `CLAUDE_RUNNER_POOL_ID` | 新运行器应加入的环境的 ID,采用 `ccpool_...` 形式 |

231| `CLAUDE_RUNNER_ACCOUNT_ID` | 排队会话的帐户的标记 ID,用于按帐户路由、配额或退款。当不可用时为空,对于 Claude Tag 频道会话始终为空,这些会话没有帐户排队。 |270| `CLAUDE_RUNNER_ACCOUNT_ID` | 排队会话的帐户的标记 ID,用于按帐户路由、配额或退款。当不可用时为空,对于 Claude Tag 频道会话始终为空,这些会话没有帐户排队。 |

232| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | 排队会话的帐户的电子邮件。当不可用时为空。将电子邮件视为个人可识别信息,不要记录它。 |271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | 排队会话的帐户的电子邮件。当不可用时为空。将电子邮件视为个人可识别信息,不要记录它。 |

233| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | 会话的第一个 git 源的 URL,用于路由到具有该存储库预热的运行器。当会话没有 git 源时为空。 |272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | 会话的第一个 git 源的 URL,用于路由到已预热该仓库的运行器。当会话没有 git 源时为空。 |

234| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | 会话的第一个 git 源的修订版本:分支、SHA 或标签。当未指定时为空。 |273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | 会话的第一个 git 源的修订版本:分支、SHA 或标签。当未指定时为空。 |

235| `CLAUDE_RUNNER_REPO_SOURCES` | 所有会话的 git 源的 `{url, revision}` 的 JSON 数组,用于在辅助存储库上路由的钩子。当没有源时为空。 |274| `CLAUDE_RUNNER_REPO_SOURCES` | 所有会话的 git 源的 `{url, revision}` 的 JSON 数组,用于根据辅助仓库进行路由的 hook。当没有源时为空。 |

236| `CLAUDE_RUNNER_CORRELATION_ID` | 在会话创建时提供的关联 ID,回显以便钩子可以将此工作单映射到创建会话的请求。当会话没有时为空。 |275| `CLAUDE_RUNNER_CORRELATION_ID` | 在会话创建时提供的关联 ID,回显以便 hook 可以将此工作单映射到创建会话的请求。当会话没有时为空。 |

237| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端表面,例如 `web_claude_ai`、`desktop_app`、`ios` 或 `scheduled_trigger`,用于采用分析。当会话没有记录或识别的表面时未设置,对于预热请求也未设置;使用 `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]` 检查它,这在 `set -u` 下保持安全。 |276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app`、`ios` 或 `scheduled_trigger`,用于采用分析。当会话没有记录或识别的使用入口时未设置,对于预热请求也未设置;使用 `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]` 检查它,这在 `set -u` 下保持安全。 |

238 277 

239生成的运行器使用工作单代替环境密钥进行注册:278生成的运行器使用工作单代替环境密钥进行注册:

240 279 

241* **使用工作单启动它**:将 [`--environment-secret-file`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 指向包含工作单 JWT 的文件,或将 `SELF_HOSTED_RUNNER_ENVIRONMENT_SECRET` 设置为 JWT 值。280* **使用工作单启动它**:将 [`--environment-secret-file`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 指向包含工作单 JWT 的文件,或将 `SELF_HOSTED_RUNNER_ENVIRONMENT_SECRET` 设置为 JWT 值。

242* **在钩子退出前复制 JWT**:编排器在钩子退出后删除工作单文件,因此将 JWT 复制到您提交的工作负载中,例如生成的 Job 上的 Kubernetes Secret,而不是通过文件路径。281* **在 hook 退出前复制 JWT**:编排器在 hook 退出后删除工作单文件,因此将 JWT 复制到您提交的工作负载中,例如生成的 Job 上的 Kubernetes Secret,而不是传递文件路径。

243* **在生成的运行器上使用 `--capacity 1`**:会话绑定的工作单恰好注册一个绑定到该会话的运行器,因此更高的容量添加永远不会接收工作的插槽,运行器在启动时记录警告。282* **在生成的运行器上使用 `--capacity 1`**:会话绑定的工作单恰好注册一个绑定到该会话的运行器,因此更高的容量添加永远不会接收工作的插槽,运行器在启动时记录警告。

244* **预热工作单注册未绑定**:待命运行器未绑定到会话,并像固定队列运行器一样声称排队的工作。283* **预热工作单注册未绑定**:待命运行器未绑定到会话,并像固定队列运行器一样声称排队的工作。

245 284 

246合同有四个配置器不可知的规则:285约定有四个与配置器无关的规则:

247 286 

2481. **在 `CLAUDE_RUNNER_ORDER_ID` 上是幂等的。** 相同请求的重新交付必须最多生成一个运行器。从 ID 派生确定性资源名称,让您的平台拒绝重复。2871. **在 `CLAUDE_RUNNER_ORDER_ID` 上保持幂等。** 相同请求的重新交付必须最多生成一个运行器。从订单 ID 派生确定性资源名称,让您的平台拒绝重复。不要改为以 `CLAUDE_RUNNER_SESSION_ID` 作为键。会话的每次重新请求都携带相同的会话 ID 和新的订单 ID,因此按会话 ID 命名或去重的工作负载只会创建一次,之后该会话再也不会创建。

2492. **不要重试工作负载。** 一个订单 ID 意味着最多创建一个工作负载。如果运行器从不注册,Anthropic 在 `--expected-spawn-seconds` 后使用新订单 ID 重新请求。2882. **不要重试工作负载。** 一个订单 ID 意味着最多创建一个工作负载。如果运行器从不注册,Anthropic 在 `--expected-spawn-seconds` 后使用新订单 ID 重新请求。

2503. **使用退出代码合同。** 退出 0 表示已提交。退出 1 表示可重试失败;会话退避并被重新提供。退出 2 或更高表示不可重试;会话被阻止再次生成,直到 [Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 在环境的 **Activity** 标签中选择 **Retry**。在非零退出时,钩子的 stderr 尾部出现在那里作为失败原因,因此将可操作的错误写入 stderr,永远不要写密钥。对于预热请求,没有会话失败:编排器仅在本地记录非零退出,服务器在租约后重新请求生成。2893. **使用退出码约定。** 退出 0 表示已提交。退出 1 表示可重试失败;会话退避并被重新提供。退出 2 或更高表示不可重试;会话被阻止再次生成,直到 [Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 在环境的 **Activity** 标签中选择 **Retry**。在非零退出时,hook 的 stderr 尾部出现在那里作为失败原因,因此将可操作的错误写入 stderr,永远不要写密钥。对于预热请求,没有会话失败:编排器仅在本地记录非零退出,服务器在租约后重新请求生成。

2514. **将 `--expected-spawn-seconds` 设置为至少您的 p99 启动时间。** 这是服务器端租约。所有编排器副本必须使用相同的值。2904. **将 `--expected-spawn-seconds` 设置为至少您的 p99 启动时间。** 这是服务器端租约。所有编排器副本必须使用相同的值。

252 291 

253钩子写入 stdout 或 stderr 的所有内容都出现在编排器的日志中,凭证自动删除。如果会话保持排队,检查编排器的 `/healthz` 正文以获取队列计数,然后在 [**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments) 上打开您的环境的 **Activity** 标签:在那里展开失败的会话以获取其生成错误,并选择 **Retry** 以重新请求它。292hook 写入 stdout 或 stderr 的所有内容都出现在编排器的日志中,凭据会自动脱敏。如果会话保持排队,检查编排器的 `/healthz` 正文以获取队列计数,然后在 [**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments) 上打开您的环境的 **Activity** 标签:在那里展开失败的会话以获取其生成错误,并选择 **Retry** 以重新请求它。

293 

294如果会话保持排队,且 **Activity** 标签中没有生成错误,可能意味着 hook 以会话 ID 作为键。要确认这一点,请检查您的平台是否存在该会话第一次生成请求对应的工作负载,而重新请求却没有对应的工作负载。如果是这样,请改为以 `CLAUDE_RUNNER_ORDER_ID` 作为工作负载的键。

254 295 

255<h2 id="mcp-servers">296<h2 id="mcp-servers">

256 MCP 服务器297 MCP 服务器


267 308 

268Claude Code 还从其他源加载 MCP 服务器:309Claude Code 还从其他源加载 MCP 服务器:

269 310 

270* 企业范围的 [managed MCP file](/docs/zh-CN/managed-mcp) 在其标准系统路径:Linux 运行器主机上的 `/etc/claude-code/managed-mcp.json`,macOS 主机上的 `/Library/Application Support/ClaudeCode/managed-mcp.json`。将其用于锁定的队列,其中只有管理员列出的服务器可能加载。有关优先级规则,请参阅 [exclusive control with managed-mcp.json](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json)。当此文件在运行器主机上时,Claude Code 跳过 Anthropic 的控制平面交付给会话的 MCP 服务器(包括 claude.ai 连接器),并在会话子进程的 stderr 上命名它们,运行器在 `debug` 日志级别记录。在 v2.1.229 之前,这些会话在启动时以 `You cannot dynamically configure MCP servers when an enterprise MCP config is present` 退出。311* 企业作用域的 [managed MCP file](/docs/zh-CN/managed-mcp) 在其标准系统路径:Linux 运行器主机上的 `/etc/claude-code/managed-mcp.json`,macOS 主机上的 `/Library/Application Support/ClaudeCode/managed-mcp.json`。将其用于锁定的队列,其中只有管理员列出的服务器可能加载。有关优先级规则,请参阅 [exclusive control with managed-mcp.json](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json)。当此文件在运行器主机上时,Claude Code 跳过 Anthropic 的控制平面交付给会话的 MCP 服务器(包括 claude.ai 连接器),并在会话子进程的 stderr 上的警告中列出它们的名称,运行器在 `debug` 日志级别记录该警告。在 v2.1.229 之前,这些会话在启动时以 `You cannot dynamically configure MCP servers when an enterprise MCP config is present` 退出。

271* 运行器主机上 [managed settings](/docs/zh-CN/managed-settings) 中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 密钥:提供 HTTP 和 SSE 服务器而不获得独占控制,因此来自其他源的服务器仍然加载。需要 Claude Code v2.1.259 或更高版本。312* 运行器主机上 [managed settings](/docs/zh-CN/managed-settings) 中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 密钥:提供 HTTP 和 SSE 服务器而不获得独占控制,因此来自其他源的服务器仍然加载。需要 Claude Code v2.1.259 或更高版本。

272* `<repo>/.mcp.json`:项目范围。将文件提交到存储库;其服务器在云会话中自动批准。313* `<repo>/.mcp.json`:项目作用域。将文件提交到仓库;其服务器在云端会话中自动批准。

273 314 

274当为您的组织启用连接器交付时,Anthropic 的控制平面将您在 claude.ai 上配置的连接器交付给通过服务器提供的 MCP 配置路由的交互式创建的会话,通过 `api.anthropic.com` 路由。以编程方式创建的会话(例如 [CLI dispatches](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop))不接收连接器交付;通过本节列出的任何其他源为它们提供 MCP 服务器。子进程的 OAuth 令牌不携带直接获取连接器的作用域,因此子进程不尝试该获取本身;交付是服务器驱动的。315当为您的组织启用连接器交付时,Anthropic 的控制平面将您在 claude.ai 上配置的连接器通过服务器提供的 MCP 配置交付给交互式创建的会话,通过 `api.anthropic.com` 路由。以编程方式创建的会话(例如 [CLI dispatches](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop))不接收连接器交付;请改为通过本节列出的任何其他源为它们提供 MCP 服务器。子进程的 OAuth 令牌不携带直接获取连接器的作用域,因此子进程不尝试该获取本身;交付是服务器驱动的。

275 316 

276`settings.json` 不携带 MCP 服务器定义,设置架构中没有顶级 `mcpServers` 字段。在托管设置中,使用 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 密钥提供服务器。317`settings.json` 不携带 MCP 服务器定义,设置 schema 中没有顶级 `mcpServers` 字段。在托管设置中,请改用 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 密钥提供服务器。

277 318 

278会话继承运行器的环境,因此在那里设置 [`ENABLE_TOOL_SEARCH`](/docs/zh-CN/mcp#scale-with-mcp-tool-search) 以控制运行器生成的每个会话的 MCP 工具搜索;MCP 页面涵盖了这些值。319会话继承运行器的环境,因此在那里设置 [`ENABLE_TOOL_SEARCH`](/docs/zh-CN/mcp#scale-with-mcp-tool-search) 以控制运行器生成的每个会话的 MCP 工具搜索;MCP 页面涵盖了这些值。

279 320 

321<h3 id="turn-off-built-in-session-tools">

322 关闭内置会话工具

323</h3>

324 

325Anthropic 的控制平面会将其自己的 MCP 服务器(名为 Claude Code Remote)附加到云端会话。Claude 使用该服务器的工具来安排 [Routine](/docs/zh-CN/routines)、启动和引导其他云端会话、附加更多仓库,以及跟踪 Pull Request 活动。

326 

327要关闭整个服务器,请在设置中添加一条[服务器级拒绝规则](/docs/zh-CN/permissions#mcp)。控制平面会根据会话的创建方式,以三个名称之一注册该服务器。Claude Code 会精确匹配规则中的名称(包括大小写),因此请按如下所示为每个名称各写一条规则:

328 

329```json theme={null}

330{

331 "permissions": {

332 "deny": [

333 "mcp__Claude_Code_Remote",

334 "mcp__claude-code-remote",

335 "mcp__bf7c680d-5fdc-5ef4-b4a0-abadb619bf0a"

336 ]

337 }

338}

339```

340 

341指定整个服务器的规则也会覆盖该服务器之后新增的工具。要关闭某一个工具而保留其余工具,请在每条规则后追加两个下划线和工具名称,例如 `mcp__Claude_Code_Remote__add_repo`。如果要完全阻止该服务器连接,而不只是移除其工具,请改为将这三个名称(不带 `mcp__` 前缀)作为 `serverName` 条目添加到 [`deniedMcpServers`](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 下。

342 

343将这些规则放在[服务器托管设置](/docs/zh-CN/server-managed-settings)中,即可在不更改运行器的情况下作用于每个会话;也可以放在运行器上的 `~/.claude/settings.json` 中。[权限和工具批准](#permissions-and-tool-approval)说明了运行器上的设置如何到达会话。

344 

345要确认规则已生效,请在该环境上启动一个会话,并要求 Claude 列出其 MCP 工具。Claude Code 会从 Claude 的上下文中移除被拒绝的工具,因此这些被拒绝的工具不会出现在其回答中。

346 

280<h2 id="prompt-sessions-to-push-their-work">347<h2 id="prompt-sessions-to-push-their-work">

281 提示会话推送其工作348 提示会话推送其工作

282</h2>349</h2>


388 权限和工具批准455 权限和工具批准

389</h2>456</h2>

390 457 

391自托管会话没有连接的终端,因此未回答的权限提示会停止轮次,直到用户在 UI 中响应。Anthropic 的控制平面使用工作负载发送每个会话的工具列表和权限规则;默认配置预批准例行工具调用(包括 `Bash`),云会话 [pre-approve file edits regardless of mode](/docs/zh-CN/permission-modes#switch-permission-modes)。没有任何东西预批准的调用通过会话 UI 提示。458自托管会话没有连接的终端,因此未回答的权限提示会使当前轮次停滞,直到用户在 UI 中响应。Anthropic 的控制平面随工作负载一起发送每个会话的工具列表和权限规则;默认配置预批准常规工具调用(包括 `Bash`),并且云端会话[无论处于何种模式都会预批准文件编辑](/docs/zh-CN/permission-modes#switch-permission-modes)。任何未被预批准的调用都会通过会话 UI 进行提示。

392 459 

393<Note>460<Note>

394 仅在会话容器运行 [default-deny network egress](/docs/zh-CN/self-hosted-environments-deploy#default-deny-egress) 和 [hardening section](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment) 中其余部分的环境上固定自动模式。例行工具调用(包括 `Bash` 网络请求)在默认预批准工具集和自动模式中都无需人工干预运行,因此网络边界是限制这些调用可以到达的位置的原因。461 仅在会话容器运行时启用了[默认拒绝网络出口](/docs/zh-CN/self-hosted-environments-deploy#default-deny-egress)并落实了[加固部分](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment)中其余措施的环境上固定自动模式。在默认预批准工具集和自动模式下,常规工具调用(包括 `Bash` 网络请求)都会在无人参与的情况下运行,因此网络边界才是限制这些调用可访问范围的关键。

395</Note>462</Note>

396 463 

397要无论控制平面发送什么都将提示保持在最低限度,请从您的包装脚本或 [`command` 钩子](#command) 固定 [auto mode](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)。自动模式让会话无需例行权限提示运行:单独的分类器模型在运行前审查操作并阻止它拒绝的操作,显式询问规则仍然强制提示;权限模式页面涵盖分类器检查的内容。运行器在调用包装脚本前追加服务器计算的标志,对于单值标志(如 `--permission-mode`),解析器尊重最后出现的标志,因此您在 `"$@"` 后追加的标志覆盖服务器发送的值:464要无论控制平面发送什么都将提示保持在最低限度,请从您的包装脚本或 [`command` hook](#command) 固定[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)。自动模式让会话无需常规权限提示即可运行:单独的分类器模型在操作运行前对其进行审查,并阻止它拒绝的操作,而显式的询问规则仍会强制提示;权限模式页面介绍了分类器检查的内容。运行器在调用包装脚本前追加服务器计算的标志,对于单值标志(如 `--permission-mode`),解析器以最后一次出现的值为准,因此您在 `"$@"` 之后追加的标志会覆盖服务器发送的值:

398 465 

399```bash theme={null}466```bash theme={null}

400#!/bin/bash467#!/bin/bash

401exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --permission-mode auto468exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --permission-mode auto

402```469```

403 470 

404要预批准特定工具,请改为追加 `--allowed-tools` 和您的规则,例如 `--allowed-tools "Bash(bazel *) Bash(yarn *) mcp__internal__*"`。列表标志(如 `--allowed-tools` 和 `--disallowed-tools`)在出现时累积而不是覆盖,因此您的规则应用在控制平面发送的任何规则之上。要缩小范围,请追加 `--disallowed-tools`,即使另一个规则允许工具也拒绝工具。471要改为预批准特定工具,请追加 `--allowed-tools` 和您的规则,例如 `--allowed-tools "Bash(bazel *) Bash(yarn *) mcp__internal__*"`。列表标志(如 `--allowed-tools` 和 `--disallowed-tools`)会在多次出现时累积而不是覆盖,因此您的规则会叠加在控制平面发送的任何规则之上。要缩小范围,请追加 `--disallowed-tools`,即使其他规则允许某些工具,它也会拒绝这些工具。

405 472 

406<h3 id="how-each-session’s-config-is-assembled">473<h3 id="how-each-session’s-config-is-assembled">

407 每个会话的配置如何组装474 每个会话的配置如何组装

408</h3>475</h3>

409 476 

410运行器为每个会话提供自己的配置目录,从运行器在启动时捕获的主机 `~/.claude/` 的快照中播种:`settings.json`、`CLAUDE.md`、钩子、代理、命令和技能在您的运行器镜像中应用于每个会话作为用户级基线。如果您更改运行主机上的配置,更改仅在您重启运行器后生效。477运行器为每个会话提供自己的配置目录,该目录以运行器在启动时一次性捕获的主机 `~/.claude/` 快照为初始内容:您的运行器镜像中的 `settings.json`、`CLAUDE.md`、hook、Agent、命令和 skill 会作为用户级基线应用于每个会话。如果您更改正在运行的主机上的配置,更改仅在您重启运行器后生效。

478 

479设置 `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` 可从其他路径获取初始内容,或将其指向空目录以禁用初始内容填充。

480 

481仓库中提交的 `.claude/settings.json` 会作为项目设置叠加在其上。会话还会从运行器镜像中的标准系统路径读取 [`managed-settings.json`](/docs/zh-CN/settings#where-settings-live)。其中的键是否与[服务器托管设置](/docs/zh-CN/server-managed-settings)一起应用,取决于 [Claude Code 如何合并托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources):默认情况下,当您的组织下发了任何服务器托管的键时,会话会忽略运行器镜像中的该文件,但 [Claude Code 从每个管理员来源读取的键](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source)除外,例如 `env` 块、沙箱锁定、沙箱二进制路径和 `forceRemoteSettingsRefresh`。请参阅[设置优先级](/docs/zh-CN/settings#settings-precedence)。

411 482 

412设置 `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` 以从不同路径播种,或将其指向空目录以禁用播种。483当 Anthropic 的控制平面为会话提供 [Claude Code hook](/docs/zh-CN/hooks) 时,运行器会将它们与您自己的配置并行安装,而不是覆盖您的配置。需要 Claude Code v2.1.229 或更高版本。

413 484 

414存储库提交的 `.claude/settings.json` 作为项目设置分层。会话还从运行器镜像中的标准系统路径读取 [`managed-settings.json`](/docs/zh-CN/settings#where-settings-live)。其密钥是否与 [server-managed settings](/docs/zh-CN/server-managed-settings) 一起应用遵循 [how Claude Code combines managed sources](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources):默认情况下,当您的组织交付任何服务器管理的密钥时,会话忽略运行器镜像的文件,除了 [keys Claude Code reads from every admin source](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source),例如 `env` 块、沙箱锁、沙箱二进制路径和 `forceRemoteSettingsRefresh`。请参阅 [settings precedence](/docs/zh-CN/settings#settings-precedence)。485* **安装位置**:运行器将提供的每个 hook 脚本写入会话配置目录中保留的 `hooks/.ccr-launcher/` 子目录,并在一个单独的设置文件中注册这些脚本,该文件通过 `--settings` 传递给会话,从而使初始填充的 `settings.json` 以及您位于 `hooks/<name>` 的脚本保持不变。运行器会为每个会话重新创建该保留子目录,并且不会将主机上 `~/.claude/hooks/.ccr-launcher/` 中的内容填充到会话中。

486* **编写者**:控制平面使用其自身部署中的固定常量填充这些脚本,绝不使用按会话或第三方的输入。

487* **仍然适用的管控**:通过 `--settings` 下发的 hook 会进入普通的合并 hook 配置,而不是托管层,因此您的托管设置仍然适用。`disableAllHooks` 会禁用它们,并且它们不属于 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 保持加载的类别。

415 488 

416当 Anthropic 的控制平面为会话提供 [Claude Code hooks](/docs/zh-CN/hooks) 时,运行器将它们安装在旁边,而不是覆盖您自己的配置。需要 Claude Code v2.1.229 或更高版本。489除 [Claude Tag](https://claude.com/docs/claude-tag/overview) 会话外,自托管环境中的会话默认关闭[自动记忆](/docs/zh-CN/memory#auto-memory)。对于需要跨会话保留的指令,请使用运行器镜像或仓库中的 `CLAUDE.md`。

417 490 

418* **它们落在哪里**:运行器将每个提供的钩子脚本写入会话配置目录的保留 `hooks/.ccr-launcher/` 子目录,并在单独的设置文件中注册脚本,它使用 `--settings` 传递给会话,保留播种的 `settings.json` 和您自己的脚本在 `hooks/<name>` 不变。运行器为每个会话重新创建保留的子目录,不播种主机内容在 `~/.claude/hooks/.ccr-launcher/` 到会话。491运行器对主机 `~/.claude/` 的快照不包含 `projects/` 目录。自动记忆的默认存储位置就在该目录下。如果您将记忆文件放在那里,运行器不会将它们填充到会话中,它们也不会启用自动记忆。

419* **谁编写它们**:控制平面从其自己部署中的固定常量填充脚本,永远不从按会话或第三方输入。

420* **什么仍然管理它们**:通过 `--settings` 交付的钩子进入普通合并的钩子配置,而不是托管层,因此您的托管设置仍然适用。`disableAllHooks` 禁用它们,它们不在 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 保持加载的类别中。

421 492 

422<h3 id="repository-committed-permission-rules">493<h3 id="repository-committed-permission-rules">

423 存储库提交的权限规则494 仓库中提交的权限规则

424</h3>495</h3>

425 496 

426不要在存储库提交的 `permissions.allow` 中放置裸 `"Edit"`、`"Write"` 或 `"NotebookEdit"` 条目。裸文件工具规则匹配工具,无论路径如何,授予主机任何地方的写入而不仅仅是工作区,因此运行器的写入范围限制守卫标记会话;使用 [`--confine-repo-settings enforce`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 它拒绝生成会话而不是记录并继续。请参阅 [hardening section](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment)。497不要在仓库中提交的 `permissions.allow` 中放置不带限定的 `"Edit"`、`"Write"` 或 `"NotebookEdit"` 条目。不带限定的文件工具规则会匹配该工具而不论路径如何,从而授予在主机上任意位置写入的权限,而不仅限于工作区,因此运行器的写入范围限制守卫会标记该会话;使用 [`--confine-repo-settings enforce`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 时,它会拒绝生成该会话,而不是记录日志后继续。请参阅[加固部分](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment)。

427 498 

428存储库根本不需要文件工具规则:云会话 [pre-approve file edits regardless of mode](/docs/zh-CN/permission-modes#switch-permission-modes)。如果您确实提交规则,将其作用域限制到工作区,例如 `"Edit(/**)"`;单个前导斜杠相对于项目根目录,这是会话的工作区。裸文件工具规则在操作员的主机级 `settings.json` 中很好,因为该文件不是存储库提交的。499仓库根本不需要文件工具规则:云端会话[无论处于何种模式都会预批准文件编辑](/docs/zh-CN/permission-modes#switch-permission-modes)。如果您确实要提交规则,请将其限定到工作区,例如 `"Edit(/**)"`;单个前导斜杠相对于项目根目录,即会话的工作区。不带限定的文件工具规则可以放在操作员的主机级 `settings.json` 中,因为该文件不是在仓库中提交的。

429 500 

430`defaultMode` 为 `auto` 仅从镜像范围或用户级设置文件中受尊重,因此检出的存储库无法为自己授予自动模式。有关云会话接受的模式和完整规则语法,请参阅 [permission modes](/docs/zh-CN/permission-modes)。501`defaultMode` 为 `auto` 的设置仅在来自镜像范围或用户级设置文件时才会生效,因此检出的仓库无法为自己授予自动模式。有关云端会话接受哪些模式以及完整的规则语法,请参阅[权限模式](/docs/zh-CN/permission-modes)。

431 502 

432<h2 id="what’s-next">503<h2 id="what’s-next">

433 接下来504 接下来

Details

140 140 

141提交签名需要 git 2.34 或更高版本;运行器在启动时检查并在您的 git 较旧时以错误退出。此标志不配置推送凭证,您仍然在镜像中提供。141提交签名需要 git 2.34 或更高版本;运行器在启动时检查并在您的 git 较旧时以错误退出。此标志不配置推送凭证,您仍然在镜像中提供。

142 142 

143在 v2.1.280 或更高版本的运行器上,您从 `checkout` 或 `post-session` 生命周期钩子中进行的提交也会以会话身份签名,但不带 `Co-authored-by:` 尾注。[生命周期钩子内的 Git 配置](/docs/zh-CN/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks)介绍了运行器在这些钩子内固定的 git 设置。

144 

143<h3 id="ship-git-config-in-your-image">145<h3 id="ship-git-config-in-your-image">

144 在镜像中提供 git 配置146 在镜像中提供 git 配置

145</h3>147</h3>


435 437 

436给你的主机停止超时至少三个部分的总和:你配置的 `n` 分钟、发布后宽限期和 [Shutdown timing](#shutdown-timing) 描述的完整排空路径。使用默认设置,发布后宽限期为 75 秒,排空路径为 80 秒,因此允许 `n` 分钟加 155 秒。当设置 `--defer-shutdown-max-min` 时,运行器在启动时打印此总和。438给你的主机停止超时至少三个部分的总和:你配置的 `n` 分钟、发布后宽限期和 [Shutdown timing](#shutdown-timing) 描述的完整排空路径。使用默认设置,发布后宽限期为 75 秒,排空路径为 80 秒,因此允许 `n` 分钟加 155 秒。当设置 `--defer-shutdown-max-min` 时,运行器在启动时打印此总和。

437 439 

438如果停止超时在运行器完成前用完,主机会杀死运行器。它仍然持有的会话不会获得 `post-session` 钩子。运行器不会注销,控制平面大约一分钟后重新排队会话。如果你无法给停止超时该总和,请不设置 `--defer-shutdown-max-min`,以便运行器在第一个信号上排空。440如果停止超时在运行器完成前用完,主机会杀死运行器。它仍然持有的会话不会获得 `post-session` hook。运行器不会注销,控制平面会在几分钟内重新排队这些会话。如果您无法给停止超时该总和,请不设置 `--defer-shutdown-max-min`,以便运行器在第一个信号上排空。

439 441 

440<h3 id="what-reaches-a-running-post-session-hook">442<h3 id="what-reaches-a-running-post-session-hook">

441 什么到达运行的 post-session 钩子443 什么到达运行的 post-session 钩子


543 其他限制545 其他限制

544</h3>546</h3>

545 547 

546* **恢复的会话丢失未推送的工作**:当会话被释放或其运行器重启,用户发送另一条消息时,会话在新运行器上恢复,该运行器从其起始分支再次克隆存储库,所以会话未推送的工作消失。设置 [`--push-outcome-on-release`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 使运行器在释放之前尽力推送会话的结果分支,所以恢复的会话从这些提交开始;这保留提交的工作,而不是脏工作树。在启用之前,限制谁可以推送到源远程上的 `claude/*` refs,例如使用分支规则集:在恢复时,运行器获取之前推送的分支而不验证谁推送了它,所以任何有推送访问这些 refs 的人都可以将内容放入恢复的工作区。运行器也在恢复时丢弃按会话配置,意味着会话的 Claude 配置目录和会话写入的任何 shell 状态;`--push-outcome-on-release` 不涵盖这些。548* **恢复的会话丢失未推送的工作**:新的运行器会从其起始分支重新克隆仓库,因此会话未推送的工作会丢失。

547* **私有存储库无法在会话中途添加**:在自托管运行器上,添加到已启动会话的存储库不使用凭证克隆,所以添加失败。创建会话时选择会话需要的每个存储库。549 * **要保留已提交的工作**:设置 [`--push-outcome-on-release`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags)。运行器随后会在释放之前尽力推送会话的结果分支,恢复的会话将从这些提交开始。未提交的更改仍会丢失。

550 * **启用该标志之前**:限制谁可以推送到源远程上的 `claude/*` refs。在恢复时,运行器会获取之前推送的分支,而不验证是谁推送的。

551* **会话中途添加的仓库可能无法克隆**:Claude 通过 HTTPS 使用 `git clone` 克隆它。在未启用 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) 的运行器上,如果主机上没有任何内容能够读取该仓库,克隆会因 git 身份验证错误而失败。如有可能,请在创建会话时选择会话所需的每个仓库。

548* **某些连接器不出现在自托管会话中**:您在 claude.ai Settings 中尚未连接的连接器不在自托管会话中列出,会话不会提示您连接它。首先在 Settings 中连接它,然后启动新会话。向已运行的会话添加连接器也不会使其工具对 Claude 可用;启动新会话以获取新添加的连接器。552* **某些连接器不出现在自托管会话中**:您在 claude.ai Settings 中尚未连接的连接器不在自托管会话中列出,会话不会提示您连接它。首先在 Settings 中连接它,然后启动新会话。向已运行的会话添加连接器也不会使其工具对 Claude 可用;启动新会话以获取新添加的连接器。

549 553 

550<h3 id="report-an-issue">554<h3 id="report-an-issue">

Details

187 187 

188[包装脚本](/docs/zh-CN/self-hosted-environments-configuration#wrapper-scripts)在会话内运行,在 Claude 启动之前。它们可以运行运行程序二进制文件的 `self-hosted-runner decode-token` 子命令,而不是调用 JWT 库。子命令从位置参数、`CLAUDE_CODE_SESSION_ACCESS_TOKEN` 或管道 stdin 读取令牌(按该顺序),然后删除前缀,根据 JWKS 端点验证签名,检查过期,并将声明打印为 JSON。子命令仅执行签名和过期检查;它不检查 `iss`、`aud` 或 `ccr:role`。当您的包装器的身份验证决定取决于这些声明时,从打印的 JSON 中读取它们并明确比较它们。188[包装脚本](/docs/zh-CN/self-hosted-environments-configuration#wrapper-scripts)在会话内运行,在 Claude 启动之前。它们可以运行运行程序二进制文件的 `self-hosted-runner decode-token` 子命令,而不是调用 JWT 库。子命令从位置参数、`CLAUDE_CODE_SESSION_ACCESS_TOKEN` 或管道 stdin 读取令牌(按该顺序),然后删除前缀,根据 JWKS 端点验证签名,检查过期,并将声明打印为 JSON。子命令仅执行签名和过期检查;它不检查 `iss`、`aud` 或 `ccr:role`。当您的包装器的身份验证决定取决于这些声明时,从打印的 JSON 中读取它们并明确比较它们。

189 189 

190此命令提取创建者身份,优先选择 SSO 提供程序的主题,然后是电子邮件地址,然后是创建者的 `act.sub` 主题 `user:<id>` 或 `agent:<id>`:190此命令提取创建者身份,优先选择电子邮件地址,然后是创建者的 `act.sub` 主题 `user:<id>` 或 `agent:<id>`:

191 191 

192```bash theme={null}192```bash theme={null}

193"$CLAUDE_RUNNER_CLAUDE_BIN" self-hosted-runner decode-token | jq -re '.act.attested_by.sub // .act.email // .act.sub'193"$CLAUDE_RUNNER_CLAUDE_BIN" self-hosted-runner decode-token | jq -re '.act.email // .act.sub'

194```194```

195 195 

196包装脚本在 `CLAUDE_RUNNER_CLAUDE_BIN` 中接收运行程序自身二进制文件的绝对路径;使用该路径而不是 PATH 解析的 `claude`,以便解码在运行程序本身使用的同一二进制文件上运行。196包装脚本在 `CLAUDE_RUNNER_CLAUDE_BIN` 中接收运行程序自身二进制文件的绝对路径;使用该路径而不是 PATH 解析的 `claude`,以便解码在运行程序本身使用的同一二进制文件上运行。


231| :- | :- |231| :- | :- |

232| `act.sub` | 创建用户的 Anthropic 用户 ID,形式为 `user:<id>`,或当您组织的服务身份创建会话时为 `agent:<id>`,就像它对 Claude Tag 频道会话所做的那样。 |232| `act.sub` | 创建用户的 Anthropic 用户 ID,形式为 `user:<id>`,或当您组织的服务身份创建会话时为 `agent:<id>`,就像它对 Claude Tag 频道会话所做的那样。 |

233| `act.email` | 创建用户的电子邮件地址,当在会话创建时记录了一个时。不要求它;根据 `act.sub` 确定身份。 |233| `act.email` | 创建用户的电子邮件地址,当在会话创建时记录了一个时。不要求它;根据 `act.sub` 确定身份。 |

234| `act.attested_by` | 上游身份提供程序对创建用户的证明,当可用时。`act.attested_by.sub` 是您的 SSO 提供程序(例如 Google 或 Okta)发布的主题。在映射到您自己系统中的身份时,优先选择这个而不是 `act.email`。 |234| `act.attested_by` | 保留用于上游身份提供程序对创建用户的证明。预期它不存在,请勿依赖它。根据 `act.sub` 确定身份。如果您需要地址,请在 `act.email` 存在时读取它。 |

235| `act.act` | 生成会话的运行程序。`act.act.sub` 是 `ccr:runner:<runner_id>`。 |235| `act.act` | 生成会话的运行程序。`act.act.sub` 是 `ccr:runner:<runner_id>`。 |

236| `act.act.act` | 环境。`act.act.act.sub` 是 `ccr:pool:<pool_id>`。 |236| `act.act.act` | 环境。`act.act.act.sub` 是 `ccr:pool:<pool_id>`。 |

237| `act.act.act.act` | 创建运行程序注册的环境机密的身份。链在此处结束。 |237| `act.act.act.act` | 创建运行程序注册的环境机密的身份。链在此处结束。 |

sessions.md +13 −4

Details

27 27 

28Claude Code 将使用 [`claude -p`](/docs/zh-CN/headless) 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 创建的会话排除在会话选择器和 `claude --continue` 之外。您仍然可以通过将其会话 ID 传递给 `claude --resume <session-id>` 来恢复它。使用 `claude --continue` 时,Claude Code 也会跳过[第一个提示是 `/loop` 的会话](#where-the-session-picker-looks)。当您运行 [`claude -p --continue`](/docs/zh-CN/headless#continue-conversations) 时,Claude Code 包括 `-p`、SDK 和 `/loop` 会话。28Claude Code 将使用 [`claude -p`](/docs/zh-CN/headless) 或 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 创建的会话排除在会话选择器和 `claude --continue` 之外。您仍然可以通过将其会话 ID 传递给 `claude --resume <session-id>` 来恢复它。使用 `claude --continue` 时,Claude Code 也会跳过[第一个提示是 `/loop` 的会话](#where-the-session-picker-looks)。当您运行 [`claude -p --continue`](/docs/zh-CN/headless#continue-conversations) 时,Claude Code 包括 `-p`、SDK 和 `/loop` 会话。

29 29 

30您可以从任何目录运行 `claude --resume <session-id>`,因此可以恢复在其他地方启动或使用 [`/cd`](/docs/zh-CN/commands) 移动过的会话。Claude Code 按以下顺序查找该 ID:

31 

321. 当前项目目录及其 git worktrees

332. 此计算机上的所有其他项目

34 

35跨项目搜索仅在恰好一个其他项目持有具有该 ID 的消息的会话记录时解析 ID,因此手动复制的重复项会导致 Claude Code 报告未找到,而不是恢复任意副本。如果没有存储的会话与 ID 匹配,Claude Code 会报告 `No conversation found with session ID: <session-id>`。

36 

37在 v2.1.223 之前,查找在当前项目目录及其 git worktrees 处停止,因此您必须从会话最后工作的目录恢复。

38 

30`claude --continue` 打开已完成的[后台会话](/docs/zh-CN/agent-view),但不打开仍在运行的会话;打开已完成的后台会话需要 Claude Code v2.1.257 或更高版本。如果您最近的对话是您[移到后台](/docs/zh-CN/agent-view#send-the-session-to-the-background)的会话,并且它仍在那里运行,Claude Code 会以 `Your most recent conversation is running in the background` 和该会话的 ID 退出。从 [`claude agents`](/docs/zh-CN/agent-view#attach-to-a-session) 附加到会话,或运行 `claude --resume` 选择另一个。39`claude --continue` 打开已完成的[后台会话](/docs/zh-CN/agent-view),但不打开仍在运行的会话;打开已完成的后台会话需要 Claude Code v2.1.257 或更高版本。如果您最近的对话是您[移到后台](/docs/zh-CN/agent-view#send-the-session-to-the-background)的会话,并且它仍在那里运行,Claude Code 会以 `Your most recent conversation is running in the background` 和该会话的 ID 退出。从 [`claude agents`](/docs/zh-CN/agent-view#attach-to-a-session) 附加到会话,或运行 `claude --resume` 选择另一个。

31 40 

32<span id="resume-a-running-background-session" />41<h3 id="resume-a-running-background-session">

42 恢复正在运行的后台会话

43</h3>

33 44 

34当您使用 `claude --resume` 或 `/resume` 恢复的对话属于仍在运行的[后台会话](/docs/zh-CN/agent-view)时,Claude Code 会打开运行中的会话本身。在命令行上使用 `--bg` 时,恢复是[后台调度](/docs/zh-CN/agent-view#from-your-shell)。在 v2.1.285 之前,Claude Code 拒绝并告诉您使用 `claude attach <id>` 打开会话,或首先使用 `claude stop <id>` 停止它。45当您使用 `claude --resume` 或 `/resume` 恢复的对话属于仍在运行的[后台会话](/docs/zh-CN/agent-view)时,Claude Code 会打开运行中的会话本身。在命令行上使用 `--bg` 时,恢复改为[后台调度](/docs/zh-CN/agent-view#from-your-shell)。在 v2.1.285 之前,Claude Code 拒绝并告诉您使用 `claude attach <id>` 打开会话,或首先使用 `claude stop <id>` 停止它。

35 46 

36* **从您的 shell**:`claude --resume <session>` 在同一终端中对该会话运行 [`claude attach`](/docs/zh-CN/agent-view#attach-to-a-session),而不是加载文本记录本身。您在命令行上传递的提示,如 `claude --resume <session> "check the tests too"`,首先作为其下一轮转到会话,Claude Code 在附加之前打印 `Sent your prompt to the background session (<id>); opening it…`。`claude -p --resume <session> "prompt"` 在终端中输入时执行相同操作,因此 `-p` 不会保持该运行非交互式。47* **从您的 shell**:`claude --resume <session>` 在同一终端中对该会话运行 [`claude attach`](/docs/zh-CN/agent-view#attach-to-a-session),而不是加载文本记录本身。您在命令行上传递的提示,如 `claude --resume <session> "check the tests too"`,首先作为其下一轮转到会话,Claude Code 在附加之前打印 `Sent your prompt to the background session (<id>); opening it…`。`claude -p --resume <session> "prompt"` 在终端中输入时执行相同操作,因此 `-p` 不会保持该运行非交互式。

37 48 


47 以 `/` 或 `!` 开头的提示不会被发送,会话等待您回答问题时的任何提示也不会。在这两种情况下,Claude Code 都不会打开会话,消息包括 `Your prompt was not sent to it` 和原因。58 以 `/` 或 `!` 开头的提示不会被发送,会话等待您回答问题时的任何提示也不会。在这两种情况下,Claude Code 都不会打开会话,消息包括 `Your prompt was not sent to it` 和原因。

48* **从会话内**:`/resume` 将您当前的对话移到后台,并将此终端附加到运行中的会话,打印 `Opening "<title>", running in the background (<id>)`。在空提示上按 `←` 返回代理视图,这也列出您离开的对话。当当前对话无法移到后台时,例如因为您已附加到后台会话或会话持久性已关闭,`/resume` 会打印 `claude attach` 命令以改为运行。59* **从会话内**:`/resume` 将您当前的对话移到后台,并将此终端附加到运行中的会话,打印 `Opening "<title>", running in the background (<id>)`。在空提示上按 `←` 返回代理视图,这也列出您离开的对话。当当前对话无法移到后台时,例如因为您已附加到后台会话或会话持久性已关闭,`/resume` 会打印 `claude attach` 命令以改为运行。

49 60 

50您可以从任何目录运行 `claude --resume <session-id>`:Claude Code 首先在当前项目目录及其 git worktrees 中查找 ID,然后在此计算机上的所有其他项目中查找,因此它会找到在其他地方启动或使用 [`/cd`](/docs/zh-CN/commands) 移动的会话。跨项目搜索仅在恰好一个其他项目持有具有该 ID 的消息的文本记录时解析 ID,因此手动复制的重复项会导致 Claude Code 报告未找到,而不是恢复任意副本。如果没有存储的会话与 ID 匹配,Claude Code 会报告 `No conversation found with session ID: <session-id>`。在 v2.1.223 之前,查找在当前项目目录及其 git worktrees 处停止,因此您必须从会话最后工作的目录恢复。

51 

52<h3 id="what-a-resumed-session-restores">61<h3 id="what-a-resumed-session-restores">

53 恢复的会话恢复的内容62 恢复的会话恢复的内容

54</h3>63</h3>

Details

216 "enabledPlugins": {216 "enabledPlugins": {

217 "code-formatter@acme-tools": true217 "code-formatter@acme-tools": true

218 },218 },

219 // 沙箱命令:可写的构建目录;npm 和 example.com 预先允许,其他主机仍然提示219 // 沙箱命令:可写的构建目录;npm 和 example.com 预先允许

220 "sandbox": {220 "sandbox": {

221 "enabled": true,221 "enabled": true,

222 "filesystem": {222 "filesystem": {


250* [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 和 [`allowManagedMcpServersOnly`](/docs/zh-CN/settings-reference#allowmanagedmcpserversonly) 使托管权限和 MCP 允许列表成为唯一适用的列表250* [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 和 [`allowManagedMcpServersOnly`](/docs/zh-CN/settings-reference#allowmanagedmcpserversonly) 使托管权限和 MCP 允许列表成为唯一适用的列表

251* `allowedMcpServers` 通过 URL 固定 MCP 服务器251* `allowedMcpServers` 通过 URL 固定 MCP 服务器

252* `strictKnownMarketplaces` 允许一个插件市场252* `strictKnownMarketplaces` 允许一个插件市场

253* `sandbox` 使用固定的网络允许列表对命令进行沙箱处理,无需无沙箱重试253* `sandbox` 使用固定的网络允许列表对命令进行沙箱处理,无需无沙箱重试。其 `failIfUnavailable` 键会[在沙箱无法运行的环境中阻止 Claude Code 启动](/docs/zh-CN/sandboxing#enforce-sandboxing-with-managed-settings)

254* `requiredMinimumVersion` 设置最低 Claude Code 版本254* `requiredMinimumVersion` 设置最低 Claude Code 版本

255* `cleanupPeriodDays` 将会话记录和其他本地数据的保留期缩短为七天255* `cleanupPeriodDays` 将会话记录和其他本地数据的保留期缩短为七天

256* `companyAnnouncements` 在启动时显示消息256* `companyAnnouncements` 在启动时显示消息

settings-reference.md +194 −112

Details

606| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | 为每个会话关闭[扩展思考](/docs/zh-CN/model-config#extended-thinking) | 模型和响应 | Any file |606| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | 为每个会话关闭[扩展思考](/docs/zh-CN/model-config#extended-thinking) | 模型和响应 | Any file |

607| [`apiKeyHelper`](#apikeyhelper) | 使用您自己的命令生成 [API 凭证](/docs/zh-CN/authentication#credential-management) | 身份验证和提供商 | Any file |607| [`apiKeyHelper`](#apikeyhelper) | 使用您自己的命令生成 [API 凭证](/docs/zh-CN/authentication#credential-management) | 身份验证和提供商 | Any file |

608| [`askUserQuestionTimeout`](#askuserquestiontimeout) | 让未回答的问题在空闲时间后[自动继续](/docs/zh-CN/tools-reference#question-auto-continue-timeout) | 界面和终端 | User or managed |608| [`askUserQuestionTimeout`](#askuserquestiontimeout) | 让未回答的问题在空闲时间后[自动继续](/docs/zh-CN/tools-reference#question-auto-continue-timeout) | 界面和终端 | User or managed |

609| [`appendPlugins`](#appendplugins) | 在用户安装的每个 mod 之后运行您的组织的 [mod](/docs/zh-CN/plugins/mods/admin) | 插件和 skill | User or managed |

609| [`attribution`](#attribution) | 自定义 Claude Code 添加到提交和拉取请求的属性 | Git 和属性 | Any file |610| [`attribution`](#attribution) | 自定义 Claude Code 添加到提交和拉取请求的属性 | Git 和属性 | Any file |

610| [`attribution.commit`](#attribution-commit) | 更改或隐藏 Claude Code 添加到提交的预告片 | Git 和属性 | Any file |611| [`attribution.commit`](#attribution-commit) | 更改或隐藏 Claude Code 添加到提交的预告片 | Git 和属性 | Any file |

611| [`attribution.pr`](#attribution-pr) | 更改或隐藏拉取请求描述中的属性行 | Git 和属性 | Any file |612| [`attribution.pr`](#attribution-pr) | 更改或隐藏拉取请求描述中的属性行 | Git 和属性 | Any file |


632| [`blockedMarketplaces`](#blockedmarketplaces) | 为您的组织阻止[插件市场](/docs/zh-CN/plugins/overview)来源 | 插件和技能 | Managed |633| [`blockedMarketplaces`](#blockedmarketplaces) | 为您的组织阻止[插件市场](/docs/zh-CN/plugins/overview)来源 | 插件和技能 | Managed |

633| [`browserExternalPageTools`](#browserexternalpagetools) | 在[桌面](/docs/zh-CN/desktop)浏览器窗格中的外部页面上关闭 Claude 的工具 | 工具 | Managed |634| [`browserExternalPageTools`](#browserexternalpagetools) | 在[桌面](/docs/zh-CN/desktop)浏览器窗格中的外部页面上关闭 Claude 的工具 | 工具 | Managed |

634| [`channelsEnabled`](#channelsenabled) | 为您的组织允许[频道](/docs/zh-CN/channels#enable-channels-for-your-organization) | 插件和技能 | Managed |635| [`channelsEnabled`](#channelsenabled) | 为您的组织允许[频道](/docs/zh-CN/channels#enable-channels-for-your-organization) | 插件和技能 | Managed |

635| [`claudeInChromeDefaultEnabled`](#claudeinchromedefaultenabled) | 在每个交互式 CLI 会话中打开[Chrome 集成](/docs/zh-CN/chrome)而无需传递 `--chrome` | 全局配置设置 | Global config |636| [`claudeInChromeDefaultEnabled`](#claudeinchromedefaultenabled) | 在会话启动时打开 [Chrome 集成](/docs/zh-CN/chrome),适用于交互式 CLI 和 VS Code 扩展 | 全局配置设置 | Global config |

636| [`claudeMd`](#claudemd) | 从托管设置注入组织范围的 [CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) 指令 | 内存和上下文 | Managed |637| [`claudeMd`](#claudemd) | 从托管设置注入组织范围的 [CLAUDE.md](/docs/zh-CN/memory#deploy-organization-wide-claude-md) 指令 | 内存和上下文 | Managed |

637| [`claudeMdExcludes`](#claudemdexcludes) | 在内存加载时跳过特定的 [CLAUDE.md](/docs/zh-CN/memory#exclude-specific-claude-md-files) 文件 | 内存和上下文 | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | 在内存加载时跳过特定的 [CLAUDE.md](/docs/zh-CN/memory#exclude-specific-claude-md-files) 文件 | 内存和上下文 | Any file |

638| [`cleanupPeriodDays`](#cleanupperioddays) | 选择 Claude Code 在删除[记录](/docs/zh-CN/data-usage#data-retention)之前保留多少天 | 隐私和遥测 | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | 选择 Claude Code 在删除[记录](/docs/zh-CN/data-usage#data-retention)之前保留多少天 | 隐私和遥测 | Any file |


730| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | 设置 Claude Code 等待[辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的时间 | 企业和托管设置 | Managed |731| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | 设置 Claude Code 等待[辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的时间 | 企业和托管设置 | Managed |

731| [`preferredNotifChannel`](#preferrednotifchannel) | 为任务完成选择[终端铃声或桌面通知](/docs/zh-CN/terminal-config#get-a-terminal-bell-or-notification) | 远程、桌面和通知 | Any file |732| [`preferredNotifChannel`](#preferrednotifchannel) | 为任务完成选择[终端铃声或桌面通知](/docs/zh-CN/terminal-config#get-a-terminal-bell-or-notification) | 远程、桌面和通知 | Any file |

732| [`prefersReducedMotion`](#prefersreducedmotion) | [减少或关闭](/docs/zh-CN/accessibility#accessibility-settings)旋转、闪烁和闪光动画 | 界面和终端 | Any file |733| [`prefersReducedMotion`](#prefersreducedmotion) | [减少或关闭](/docs/zh-CN/accessibility#accessibility-settings)旋转、闪烁和闪光动画 | 界面和终端 | Any file |

734| [`prependPlugins`](#prependplugins) | 在用户安装的每个 mod 之前运行您的组织的 [mod](/docs/zh-CN/plugins/mods/admin) | 插件和 skill | User or managed |

733| [`processWrapper`](#processwrapper) | 在 macOS 和 Linux 上通过[企业启动器](/docs/zh-CN/corporate-launcher)运行 Claude Code 的后台进程 | 代理、会话和工作树 | User or managed |735| [`processWrapper`](#processwrapper) | 在 macOS 和 Linux 上通过[企业启动器](/docs/zh-CN/corporate-launcher)运行 Claude Code 的后台进程 | 代理、会话和工作树 | User or managed |

734| [`promptCacheTtl`](#promptcachettl) | 为主对话选择[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime) | 模型和响应 | Any file |736| [`promptCacheTtl`](#promptcachettl) | 为主对话选择[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime) | 模型和响应 | Any file |

735| [`promptSuggestionEnabled`](#promptsuggestionenabled) | 隐藏输入框中灰显的[提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) | 界面和终端 | Any file |737| [`promptSuggestionEnabled`](#promptsuggestionenabled) | 隐藏输入框中灰显的[提示建议](/docs/zh-CN/interactive-mode#prompt-suggestions) | 界面和终端 | Any file |


754| [`sandbox.credentials.sigv4`](#sandbox-credentials-sigv4) | 选择流式传输、预签名或 [SigV4A AWS 请求](/docs/zh-CN/sandboxing#re-sign-aws-requests)是否失败或通过 | 沙箱设置 | User or managed |756| [`sandbox.credentials.sigv4`](#sandbox-credentials-sigv4) | 选择流式传输、预签名或 [SigV4A AWS 请求](/docs/zh-CN/sandboxing#re-sign-aws-requests)是否失败或通过 | 沙箱设置 | User or managed |

755| [`sandbox.enabled`](#sandbox-enabled) | 在 macOS、Linux 和 WSL2 上打开 [Bash 沙箱](/docs/zh-CN/sandboxing#get-started) | 沙箱设置 | Any file |757| [`sandbox.enabled`](#sandbox-enabled) | 在 macOS、Linux 和 WSL2 上打开 [Bash 沙箱](/docs/zh-CN/sandboxing#get-started) | 沙箱设置 | Any file |

756| [`sandbox.enableWeakerNestedSandbox`](#sandbox-enableweakernestedsandbox) | 在无特权容器内运行 Linux [沙箱](/docs/zh-CN/sandboxing) | 沙箱设置 | Any file |758| [`sandbox.enableWeakerNestedSandbox`](#sandbox-enableweakernestedsandbox) | 在无特权容器内运行 Linux [沙箱](/docs/zh-CN/sandboxing) | 沙箱设置 | Any file |

757| [`sandbox.enableWeakerNetworkIsolation`](#sandbox-enableweakernetworkisolation) | 让 `gh`、`gcloud` 和 `terraform` 在[沙箱](/docs/zh-CN/sandboxing#troubleshooting)内的 MITM 代理后面验证 TLS | 沙箱设置 | Any file |759| [`sandbox.enableWeakerNetworkIsolation`](#sandbox-enableweakernetworkisolation) | 在 macOS 上让 `gh`、`gcloud` 和 `terraform` 在[沙箱](/docs/zh-CN/sandboxing#go-based-clis-fail-tls-verification-on-macos)内的 MITM 代理后面验证 TLS | 沙箱设置 | Any file |

758| [`sandbox.excludedCommands`](#sandbox-excludedcommands) | 命名始终在[沙箱](/docs/zh-CN/sandboxing)外运行的命令 | 沙箱设置 | Any file |760| [`sandbox.excludedCommands`](#sandbox-excludedcommands) | 命名始终在[沙箱](/docs/zh-CN/sandboxing)外运行的命令 | 沙箱设置 | Any file |

759| [`sandbox.failIfUnavailable`](#sandbox-failifunavailable) | 当[沙箱](/docs/zh-CN/sandboxing)无法启动时拒绝启动,而不是运行未沙箱化的 | 沙箱设置 | Any file |761| [`sandbox.failIfUnavailable`](#sandbox-failifunavailable) | 当[沙箱](/docs/zh-CN/sandboxing)无法启动时拒绝启动,而不是运行未沙箱化的 | 沙箱设置 | Any file |

760| [`sandbox.filesystem`](#sandbox-filesystem) | 控制[沙箱化](/docs/zh-CN/sandboxing#filesystem-isolation)命令可以读写的路径 | 沙箱设置 | Any file |762| [`sandbox.filesystem`](#sandbox-filesystem) | 控制[沙箱化](/docs/zh-CN/sandboxing#filesystem-isolation)命令可以读写的路径 | 沙箱设置 | Any file |


768| [`sandbox.network`](#sandbox-network) | 控制[沙箱化](/docs/zh-CN/sandboxing#network-isolation)命令可以到达的主机、端口和套接字 | 沙箱设置 | Any file |770| [`sandbox.network`](#sandbox-network) | 控制[沙箱化](/docs/zh-CN/sandboxing#network-isolation)命令可以到达的主机、端口和套接字 | 沙箱设置 | Any file |

769| [`sandbox.network.allowAllUnixSockets`](#sandbox-network-allowallunixsockets) | 让[沙箱化](/docs/zh-CN/sandboxing)命令连接到每个 Unix 套接字 | 沙箱设置 | Any file |771| [`sandbox.network.allowAllUnixSockets`](#sandbox-network-allowallunixsockets) | 让[沙箱化](/docs/zh-CN/sandboxing)命令连接到每个 Unix 套接字 | 沙箱设置 | Any file |

770| [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) | 预先允许域,以便[沙箱化](/docs/zh-CN/sandboxing)命令不会提示它们 | 沙箱设置 | Any file |772| [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) | 预先允许域,以便[沙箱化](/docs/zh-CN/sandboxing)命令不会提示它们 | 沙箱设置 | Any file |

771| [`sandbox.network.allowLocalBinding`](#sandbox-network-allowlocalbinding) | 让[沙箱化](/docs/zh-CN/sandboxing)命令在 macOS 上绑定到 localhost 端口 | 沙箱设置 | Any file |773| [`sandbox.network.allowLocalBinding`](#sandbox-network-allowlocalbinding) | 让[沙箱化](/docs/zh-CN/sandboxing)命令在 macOS 上监听网络端口并连接到 localhost | 沙箱设置 | Any file |

772| [`sandbox.network.allowMachLookup`](#sandbox-network-allowmachlookup) | 让 macOS [沙箱化](/docs/zh-CN/sandboxing)工具(如 iOS 模拟器或 Playwright)到达其 XPC 服务 | 沙箱设置 | Any file |774| [`sandbox.network.allowMachLookup`](#sandbox-network-allowmachlookup) | 让 macOS [沙箱化](/docs/zh-CN/sandboxing)工具(如 iOS 模拟器或 Playwright)到达其 XPC 服务 | 沙箱设置 | Any file |

773| [`sandbox.network.allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) | 将网络允许列表锁定到[托管设置](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy) | 沙箱设置 | Managed |775| [`sandbox.network.allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) | 将网络允许列表锁定到[托管设置](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy) | 沙箱设置 | Managed |

774| [`sandbox.network.allowUnixSockets`](#sandbox-network-allowunixsockets) | 列出[沙箱化](/docs/zh-CN/sandboxing)命令可以在 macOS 上使用的 Unix 套接字路径 | 沙箱设置 | Any file |776| [`sandbox.network.allowUnixSockets`](#sandbox-network-allowunixsockets) | 列出[沙箱化](/docs/zh-CN/sandboxing)命令可以在 macOS 上使用的 Unix 套接字路径 | 沙箱设置 | Any file |


1445 1447 

1446有关 `--disallowedTools` 或会话规则中的 `!` 模式可以排除什么,请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions#read-and-edit)。1448有关 `--disallowedTools` 或会话规则中的 `!` 模式可以排除什么,请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions#read-and-edit)。

1447 1449 

1450设置此键后,Claude Code v2.1.282 或更高版本还会忽略来自以下来源的 skill 和 `.claude/commands/` 文件中的 [`allowed-tools`](/docs/zh-CN/skills#pre-approve-tools-for-a-skill) frontmatter:

1451 

1452* 仓库的 `.claude/` 目录

1453* 您的 `~/.claude/skills/` 和 `~/.claude/commands/` 目录,包括[从 claude.ai 同步的 skill](/docs/zh-CN/skills#where-synced-skills-load)

1454* `--add-dir` 目录

1455* `~/.claude/skills/` 或项目的 `.claude/skills/` 中[使用 `.claude-plugin` 清单声明的插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository)

1456 

1457来自托管设置的 skill 和随附 skill 保留其 `allowed-tools`。skill 的 `disallowed-tools` 仍然适用。有关 Claude Code 忽略该字段时开发人员会看到什么,请参阅[仅应用托管权限规则时](/docs/zh-CN/skills#when-only-managed-permission-rules-apply)。

1458 

1448* **作用域**: [`Managed`](#scopes)1459* **作用域**: [`Managed`](#scopes)

1449* **类型**: 布尔值1460* **类型**: 布尔值

1450 * `true`: 托管设置成为权限规则的唯一设置来源1461 * `true`: 托管设置成为权限规则的唯一设置来源


1659 1670 

1660给予 Claude 对您启动的目录之外的目录的文件访问权限,作为额外的[工作目录](/docs/zh-CN/permissions#working-directories)。大多数 `.claude/` 配置[不会从这些目录中发现](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。1671给予 Claude 对您启动的目录之外的目录的文件访问权限,作为额外的[工作目录](/docs/zh-CN/permissions#working-directories)。大多数 `.claude/` 配置[不会从这些目录中发现](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。

1661 1672 

1662* **作用域**: [`Any file`](#scopes)1673* **作用域**: [`Any file`](#scopes),项目和本地条目提供的[沙箱写入访问权限受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

1663* **类型**: 目录路径数组1674* **类型**: 目录路径数组

1664* **默认值**: 未设置1675* **默认值**: 未设置

1665* **每个会话覆盖**: `--add-dir` 和 `/add-dir` 为一个会话添加目录,与此键一起1676* **每个会话覆盖**: `--add-dir` 和 `/add-dir` 为一个会话添加目录,与此键一起


1855}1866}

1856```1867```

1857 1868 

1858Claude Code 从优先级最高的设置范围获取布尔键的值,因此托管的 `enabled` 或 `failIfUnavailable` 会覆盖开发人员设置的任何内容。它在会话加载的每个设置范围中合并数组键,因此开发人员可以追加条目;请参阅 [Keep developers from widening the policy](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy) 了解仅限托管的锁。要为组织强制执行沙箱,请参阅 [Enforce sandboxing with managed settings](/docs/zh-CN/sandboxing#enforce-sandboxing-with-managed-settings)。1869当托管设置设置了 `enabled` 或 `failIfUnavailable` 等布尔键时,该值会覆盖开发人员设置的任何内容。Claude Code 在会话加载的各个设置作用域中合并数组键,因此开发人员可以追加条目;请参阅 [Keep developers from widening the policy](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy) 了解仅限托管的锁。要为组织强制执行沙箱,请参阅 [Enforce sandboxing with managed settings](/docs/zh-CN/sandboxing#enforce-sandboxing-with-managed-settings)。

1859 1870 

1860<h3 id="sandbox-enabled">1871<h3 id="sandbox-enabled">

1861 `sandbox.enabled`1872 `sandbox.enabled`


1863 1874 

1864为 Bash 命令打开 [sandboxing](/docs/zh-CN/sandboxing)。当您在 `/sandbox` 面板中选择一个模式时,Claude Code 会将此键写入当前项目的 `.claude/settings.local.json`;在 `~/.claude/settings.json` 中设置它以对每个项目进行沙箱处理。1875为 Bash 命令打开 [sandboxing](/docs/zh-CN/sandboxing)。当您在 `/sandbox` 面板中选择一个模式时,Claude Code 会将此键写入当前项目的 `.claude/settings.local.json`;在 `~/.claude/settings.json` 中设置它以对每个项目进行沙箱处理。

1865 1876 

1866* **Scope**: [`Any file`](#scopes)1877* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

1867* **Type**: 布尔值1878* **Type**: 布尔值

1868 * `true`: Claude Code 对 Bash 命令进行沙箱处理1879 * `true`: Claude Code 对 Bash 命令进行沙箱处理

1869 * `false`: Bash 命令在没有沙箱的情况下运行1880 * `false`: Bash 命令在没有沙箱的情况下运行


1877}1888}

1878```1889```

1879 1890 

1880在 Linux 和 WSL2 上,沙箱需要 `bubblewrap` 和 `socat`;请参阅 [Set up Linux and WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2)。当沙箱无法启动时,Claude Code 会显示警告并在没有设置 [`failIfUnavailable`](#sandbox-failifunavailable) 的情况下运行未沙箱化的命令。1891在 Linux 和 WSL2 上,沙箱需要 `bubblewrap` 和 `socat`;请参阅 [Set up Linux and WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2)。当沙箱无法启动时,除非您同时设置了 [`failIfUnavailable`](#sandbox-failifunavailable),否则 Claude Code 会在没有沙箱的情况下运行命令。

1881 1892 

1882<h3 id="sandbox-failifunavailable">1893<h3 id="sandbox-failifunavailable">

1883 `sandbox.failIfUnavailable`1894 `sandbox.failIfUnavailable`

1884</h3>1895</h3>

1885 1896 

1886当 `sandbox.enabled` 为 `true` 但沙箱无法启动时(因为缺少依赖项或不支持该平台),使 Claude Code 在启动时以错误退出。没有它,Claude Code 会显示警告并运行未沙箱化的命令。在托管设置中使用它,当您的组织要求沙箱作为硬门时。1897当 `sandbox.enabled` 为 `true` 但沙箱无法启动时(因为缺少依赖项或不支持该平台),使 Claude Code 在启动时以错误退出。没有此键时,Claude Code 会在没有沙箱的情况下运行命令。将沙箱作为安全关卡强制要求的托管部署可以使用此设置。

1887 1898 

1888* **Scope**: [`Any file`](#scopes)1899在沙箱不支持的平台上,启用此键时 Claude Code 不会启动。请参阅 [Enforce sandboxing with managed settings](/docs/zh-CN/sandboxing#enforce-sandboxing-with-managed-settings)。

1900 

1901* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

1889* **Type**: 布尔值1902* **Type**: 布尔值

1890 * `true`: 当 `sandbox.enabled` 为 `true` 但沙箱无法启动时,Claude Code 在启动时以错误退出1903 * `true`: 当 `sandbox.enabled` 为 `true` 但沙箱无法启动时,Claude Code 在启动时以错误退出

1891 * `false`: Claude Code 显示警告并运行未沙箱化的命令1904 * `false`: 当沙箱无法启动时,Claude Code 在没有沙箱的情况下运行命令

1892* **Default**: `false`1905* **Default**: `false`

1893 1906 

1894这使每台托管机器对命令进行沙箱处理或拒绝启动:1907这使每台托管机器对命令进行沙箱处理或拒绝启动:


1933 `sandbox.excludedCommands`1946 `sandbox.excludedCommands`

1934</h3>1947</h3>

1935 1948 

1936命名 Claude Code 在沙箱外运行的命令,例如在沙箱下不工作的工具。每个条目使用与 `Bash(...)` [permission rule](/docs/zh-CN/permissions#permission-rule-syntax) 内容相同的语法:精确命令、前缀(如 `docker *` )或通配符模式。1949指定 Claude Code 在沙箱外运行的命令,例如在沙箱下无法工作的工具。每个条目使用与 `Bash(...)` [permission rule](/docs/zh-CN/permissions#permission-rule-syntax) 内容相同的语法:精确命令、前缀(如 `docker *` )或通配符模式。不含通配符的模式是精确匹配,因此 `docker` 仅匹配不带参数的 `docker`。

1937 1950 

1938您的条目仅当它们覆盖复合命令中的每个命令时才将 Bash 调用从沙箱中取出,某些调用形式即使这样也保持沙箱化。单独的 `docker *` 条目不会将 `npm ci && docker build .` 从沙箱中取出。1951您的条目仅当它们覆盖复合命令中的每个命令时才将 Bash 调用从沙箱中取出,某些调用形式即使这样也保持沙箱化。单独的 `docker *` 条目不会将 `npm ci && docker build .` 从沙箱中取出。

1939 1952 

1940* **Scope**: [`Any file`](#scopes)1953* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

1941* **Type**: 命令模式数组1954* **Type**: 命令模式数组

1942* **Default**: 未设置,因此没有命令被排除1955* **Default**: 未设置,因此没有命令被排除

1943 1956 


1956* 命令替换、子 shell 或控制流块,例如 `if` 或 `for`1969* 命令替换、子 shell 或控制流块,例如 `if` 或 `for`

1957* 重定向,例如 `docker build . > build.log`,除了仅复制文件描述符的重定向,如 `2>&1` 所做的1970* 重定向,例如 `docker build . > build.log`,除了仅复制文件描述符的重定向,如 `2>&1` 所做的

1958* 来自变量的命令名称1971* 来自变量的命令名称

1972* 带有绝对路径参数、以 `~` 开头的路径参数或包含 `..` 段的路径参数的 `git clone`、`git init`、`git worktree add`、`git worktree move` 或 `git bundle create`

1959 1973 

1960例如,`cd build && docker compose up` 在 `docker *` 条目下保持沙箱化,添加 `cd` 条目不会改变这一点。1974例如,`cd build && docker compose up` 在 `docker *` 条目下保持沙箱化,添加 `cd` 条目不会改变这一点。在 `git *` 条目下,`git clone <url> vendor/lib` 在沙箱外运行,但 `git clone <url> ~/tools` 保持沙箱化。克隆操作会在其目标路径指向的任何位置写入整个文件树,其中可能包括可执行文件。

1961 1975 

1962排除的命令仍会通过常规权限流程。排除是一种便利,而不是安全边界:当工具只需要在特定位置写入时,优先使用 [`filesystem.allowWrite`](#sandbox-filesystem-allowwrite)。Claude Code 在会话加载的每个设置范围中合并条目,此列表没有仅限托管的锁,因此保持托管列表狭窄。1976排除的命令仍会通过常规权限流程。排除是一种便利,而不是安全边界:当工具只需要在特定位置写入时,[`filesystem.allowWrite`](#sandbox-filesystem-allowwrite) 可以使其保持沙箱化。

1977 

1978除非沙箱是[管理员强制要求的](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox),否则来自会话加载的各个设置作用域的条目会合并为一个列表。在管理员强制要求沙箱期间,Claude Code 会忽略 `.claude/settings.json` 和 `.claude/settings.local.json` 中的条目,因此克隆的仓库无法将命令移出沙箱。托管设置、`--settings` 和您的 `~/.claude/settings.json` 中的条目仍然适用,并且此列表没有仅限托管的锁。

1963 1979 

1964<h3 id="sandbox-allowunsandboxedcommands">1980<h3 id="sandbox-allowunsandboxedcommands">

1965 `sandbox.allowUnsandboxedCommands`1981 `sandbox.allowUnsandboxedCommands`

1966</h3>1982</h3>

1967 1983 

1968让 Claude 在沙箱阻止后使用 `dangerouslyDisableSandbox` 参数在沙箱外重试命令。将其设置为 `false` 以使 Claude Code 完全忽略该参数,并且 Claude 运行的每个命令都必须进行沙箱处理或出现在 [`excludedCommands`](#sandbox-excludedcommands) 中。`/sandbox` **Overrides** 选项卡将该状态显示为 **Strict sandbox mode**。在托管设置中使用 `false` 以获得需要严格沙箱处理的策略。1984让 Claude 在沙箱阻止命令后,使用 `dangerouslyDisableSandbox` 参数在沙箱外重试该命令。当其为 `false` 时,Claude Code 会忽略该参数。此时在沙箱运行期间,Claude 运行的命令都会进行沙箱处理,除非它们匹配 [`excludedCommands`](#sandbox-excludedcommands) 条目。`/sandbox` **Overrides** 选项卡将该状态显示为 **Strict sandbox mode**。托管设置中的 `false` 会为其覆盖的开发人员打开严格沙箱模式。

1969 1985 

1970* **Scope**: [`Any file`](#scopes)1986* **Scope**: [`Any file`](#scopes),[项目和本地设置受到一项限制](/docs/zh-CN/sandboxing#turn-off-the-retry-with-strict-sandbox-mode)

1971* **Type**: 布尔值1987* **Type**: 布尔值

1972 * `true`: Claude 可以在沙箱阻止后使用 `dangerouslyDisableSandbox` 参数在沙箱外重试命令1988 * `true`: Claude 可以在沙箱阻止后使用 `dangerouslyDisableSandbox` 参数在沙箱外重试命令

1973 * `false`: Claude Code 忽略该参数,因此 Claude 运行的每个命令都进行沙箱处理或出现在 `excludedCommands` 中1989 * `false`: Claude Code 忽略该参数,因此在沙箱运行期间,Claude 运行的命令都会进行沙箱处理,除非它们匹配 `excludedCommands` 条目

1974* **Default**: `true`1990* **Default**: `true`

1975 1991 

1976这为托管设置覆盖的每个人强制执行严格沙箱模式:1992这为托管设置覆盖的每个人强制执行严格沙箱模式:


1984}2000}

1985```2001```

1986 2002 

1987未沙箱化的重试通过常规权限流程,在手动模式下带有提示。请参阅 [The unsandboxed retry escape hatch](/docs/zh-CN/sandboxing#the-unsandboxed-retry-escape-hatch)。2003来自托管设置或 `--settings` 的 `false` 还会使沙箱成为[管理员强制要求的](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)。用户设置中的 `false` 会优先于项目的 `true`,但不会使沙箱成为管理员强制要求的。优先于项目值需要 Claude Code v2.1.285 或更高版本。

1988 2004 

1989要查看您在 [`!` shell-mode prompt](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 处自己输入的命令何时运行沙箱化,请参阅 [strict sandbox mode](/docs/zh-CN/sandboxing#the-unsandboxed-retry-escape-hatch)。2005由谁批准未沙箱化的重试取决于您的权限模式和允许规则。请参阅 [The unsandboxed retry escape hatch](/docs/zh-CN/sandboxing#the-unsandboxed-retry-escape-hatch)。

2006 

2007要查看您在 [`!` shell-mode prompt](/docs/zh-CN/interactive-mode#shell-mode-with-prefix) 处自己输入的命令何时以沙箱化方式运行,请参阅 [strict sandbox mode](/docs/zh-CN/sandboxing#turn-off-the-retry-with-strict-sandbox-mode)。

1990 2008 

1991<h3 id="sandbox-filesystem">2009<h3 id="sandbox-filesystem">

1992 `sandbox.filesystem`2010 `sandbox.filesystem`


2013 2031 

2014Claude Code 在操作系统沙箱边界强制执行这些列表,因此它们适用于沙箱化命令启动的每个子进程,例如 `kubectl`、`terraform` 或 `npm`。Claude Code 将您的 [permission rules](/docs/zh-CN/sandboxing#permission-rules) 添加到相同的列表:`Edit` 允许和拒绝规则到 `allowWrite` 和 `denyWrite`,`Read` 拒绝规则到 `denyRead`,以及 `WebFetch(domain:...)` 允许和拒绝规则到 [`network`](#sandbox-network) 域列表。2032Claude Code 在操作系统沙箱边界强制执行这些列表,因此它们适用于沙箱化命令启动的每个子进程,例如 `kubectl`、`terraform` 或 `npm`。Claude Code 将您的 [permission rules](/docs/zh-CN/sandboxing#permission-rules) 添加到相同的列表:`Edit` 允许和拒绝规则到 `allowWrite` 和 `denyWrite`,`Read` 拒绝规则到 `denyRead`,以及 `WebFetch(domain:...)` 允许和拒绝规则到 [`network`](#sandbox-network) 域列表。

2015 2033 

2016除非设置了仅限托管的锁,否则 Claude Code 在会话加载的设置文件中合并每个列表。[`allowManagedReadPathsOnly`](#sandbox-filesystem-allowmanagedreadpathsonly) 将 `allowRead` 限制为托管设置中的条目,[`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 对允许的域执行相同操作。2034除非有锁适用,否则 Claude Code 在会话加载的设置文件中合并这些列表。[`allowManagedReadPathsOnly`](#sandbox-filesystem-allowmanagedreadpathsonly) 将 `allowRead` 限制为托管设置中的条目,[`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 对允许的域执行相同操作。[仓库锁](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)会排除来自仓库设置文件的条目。

2017 2035 

2018[Configure sandboxing](/docs/zh-CN/sandboxing#configure-sandboxing) 涵盖您使用 `--setting-sources` 排除的源。当您在会话期间编辑列表时,Claude Code [applies the change to the running session](/docs/zh-CN/settings#when-edits-take-effect)。2036[Configure sandboxing](/docs/zh-CN/sandboxing#configure-sandboxing) 涵盖您使用 `--setting-sources` 排除的源。当您在会话期间编辑列表时,Claude Code [applies the change to the running session](/docs/zh-CN/settings#when-edits-take-effect)。

2019 2037 


2044 2062 

2045添加沙箱化命令可以写入的路径,超出工作目录、会话临时目录以及使用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` 添加的目录。当子进程(如 `kubectl` 或构建工具)需要在项目外写入时使用它。2063添加沙箱化命令可以写入的路径,超出工作目录、会话临时目录以及使用 `--add-dir`、`/add-dir` 或 `permissions.additionalDirectories` 添加的目录。当子进程(如 `kubectl` 或构建工具)需要在项目外写入时使用它。

2046 2064 

2047* **Scope**: [`Any file`](#scopes)2065* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2048* **Type**: 路径字符串数组,使用 [sandbox path prefixes](#sandbox-path-prefixes)2066* **Type**: 路径字符串数组,使用 [sandbox path prefixes](#sandbox-path-prefixes)

2049* **Default**: 未设置,因此沙箱化命令可以写入工作目录、会话临时目录、使用 `--add-dir` 或 `/add-dir` 添加的目录以及 [`permissions.additionalDirectories`](#permissions-additionaldirectories) 中的目录2067* **Default**: 未设置,因此沙箱化命令可以写入工作目录、会话临时目录、使用 `--add-dir` 或 `/add-dir` 添加的目录以及 [`permissions.additionalDirectories`](#permissions-additionaldirectories) 中的目录

2050 2068 


2060}2078}

2061```2079```

2062 2080 

2063Claude Code 在会话加载的每个设置范围中合并 `allowWrite` 条目和您的 `Edit(...)` 允许权限规则中的路径,在 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 打开时留出存储库设置中的条目。`allowWrite` 条目不能提升 [protected path](/docs/zh-CN/sandboxing#protected-paths)。2081Claude Code 在会话加载的各个设置作用域中合并 `allowWrite` 条目和您的 `Edit(...)` 允许权限规则中的路径,在 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 打开时排除来自仓库设置的条目。[仓库锁](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)也可能排除仓库的条目。`allowWrite` 条目不能解除 [protected path](/docs/zh-CN/sandboxing#protected-paths)。

2064 2082 

2065<h3 id="sandbox-filesystem-denywrite">2083<h3 id="sandbox-filesystem-denywrite">

2066 `sandbox.filesystem.denyWrite`2084 `sandbox.filesystem.denyWrite`


2114 2132 

2115重新打开 [`denyRead`](#sandbox-filesystem-denyread) 阻止的区域内特定路径的读取,以构建仅工作区读取访问。精确或通配符 `denyRead` 条目在更广泛的 `allowRead` 内保持阻止,如 [overlap table](/docs/zh-CN/sandboxing#configure-sandboxing) 所示。当通配符 `denyRead` 条目(如 `~/**/.env` )匹配目录时,Claude Code 也会阻止其内容的读取。在 v2.1.236 之前的 macOS 上,Claude Code 在更广泛的 `allowRead` 条目覆盖它们的任何地方重新打开通配符 `denyRead` 条目匹配的路径,并保持匹配目录的内容可读。2133重新打开 [`denyRead`](#sandbox-filesystem-denyread) 阻止的区域内特定路径的读取,以构建仅工作区读取访问。精确或通配符 `denyRead` 条目在更广泛的 `allowRead` 内保持阻止,如 [overlap table](/docs/zh-CN/sandboxing#configure-sandboxing) 所示。当通配符 `denyRead` 条目(如 `~/**/.env` )匹配目录时,Claude Code 也会阻止其内容的读取。在 v2.1.236 之前的 macOS 上,Claude Code 在更广泛的 `allowRead` 条目覆盖它们的任何地方重新打开通配符 `denyRead` 条目匹配的路径,并保持匹配目录的内容可读。

2116 2134 

2117* **Scope**: [`Any file`](#scopes)2135* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2118* **Type**: 路径字符串数组,使用 [sandbox path prefixes](#sandbox-path-prefixes)2136* **Type**: 路径字符串数组,使用 [sandbox path prefixes](#sandbox-path-prefixes)

2119* **Default**: 未设置2137* **Default**: 未设置

2120 2138 


2131}2149}

2132```2150```

2133 2151 

2134Claude Code 在项目设置中将 `.` 条目解析为项目根目录,在用户设置中解析为 `~/.claude`。Claude Code 在会话加载的每个设置文件中合并条目,除非设置了 [`allowManagedReadPathsOnly`](#sandbox-filesystem-allowmanagedreadpathsonly),并在 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 打开时留出存储库设置中的条目。2152Claude Code 在项目设置中将 `.` 条目解析为项目根目录,在用户设置中解析为 `~/.claude`。Claude Code 在会话加载的设置文件中合并条目,除非设置了 [`allowManagedReadPathsOnly`](#sandbox-filesystem-allowmanagedreadpathsonly),并在 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 打开时排除来自仓库设置的条目。[仓库锁](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)也可能排除仓库的条目。

2135 2153 

2136<h3 id="sandbox-filesystem-allowmanagedreadpathsonly">2154<h3 id="sandbox-filesystem-allowmanagedreadpathsonly">

2137 `sandbox.filesystem.allowManagedReadPathsOnly`2155 `sandbox.filesystem.allowManagedReadPathsOnly`


2142* **Scope**: [`Managed`](#scopes)2160* **Scope**: [`Managed`](#scopes)

2143* **Type**: 布尔值2161* **Type**: 布尔值

2144 * `true`: Claude Code 仅遵守来自托管设置的 `allowRead` 条目2162 * `true`: Claude Code 仅遵守来自托管设置的 `allowRead` 条目

2145 * `false`: `allowRead` 条目从会话加载的每个设置范围合并2163 * `false`: 来自其他设置文件的 `allowRead` 条目可以合并进来

2146* **Default**: `false`2164* **Default**: `false`

2147 2165 

2148这阻止读取主目录,重新打开 `~/work`,并阻止开发人员重新打开任何其他内容:2166这阻止读取主目录,重新打开 `~/work`,并阻止开发人员重新打开任何其他内容:


2197 2215 

2198沉默沙箱违规报告,针对您期望命令探测并被拒绝的路径,例如在启动时检查 `/etc/hosts` 的工具,因此这些拒绝不会显示为违规或在 Claude 看到的内容中。沙箱仍然阻止访问;只有报告被抑制。键是与命令匹配的子字符串,`*` 匹配每个命令,值是该命令要忽略的违规子字符串,例如文件系统路径。2216沉默沙箱违规报告,针对您期望命令探测并被拒绝的路径,例如在启动时检查 `/etc/hosts` 的工具,因此这些拒绝不会显示为违规或在 Claude 看到的内容中。沙箱仍然阻止访问;只有报告被抑制。键是与命令匹配的子字符串,`*` 匹配每个命令,值是该命令要忽略的违规子字符串,例如文件系统路径。

2199 2217 

2200* **Scope**: [`Any file`](#scopes)2218* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2201* **Type**: 对象,将命令子字符串映射到违规子字符串数组,通常是路径2219* **Type**: 对象,将命令子字符串映射到违规子字符串数组,通常是路径

2202* **Default**: 未设置,因此报告每个违规2220* **Default**: 未设置,因此报告每个违规

2203 2221 


2217 2235 

2218在无特权 Docker 容器内运行 Linux 沙箱,其中 bubblewrap 无法挂载新的 `/proc`。相反,内部沙箱绑定挂载容器的现有 `/proc`,这暴露了新挂载会隐藏的进程信息。这降低了安全性;仅当外部容器已提供您需要的隔离时才使用它。2236在无特权 Docker 容器内运行 Linux 沙箱,其中 bubblewrap 无法挂载新的 `/proc`。相反,内部沙箱绑定挂载容器的现有 `/proc`,这暴露了新挂载会隐藏的进程信息。这降低了安全性;仅当外部容器已提供您需要的隔离时才使用它。

2219 2237 

2220* **Scope**: [`Any file`](#scopes)2238* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2221* **Type**: 布尔值2239* **Type**: 布尔值

2222 * `true`: 内部沙箱绑定挂载容器的现有 `/proc` 而不是挂载新的2240 * `true`: 内部沙箱绑定挂载容器的现有 `/proc` 而不是挂载新的

2223 * `false`: 沙箱挂载新的 `/proc`,在无特权 Docker 容器中不工作2241 * `false`: 沙箱挂载新的 `/proc`,在无特权 Docker 容器中不工作


2232}2250}

2233```2251```

2234 2252 

2235仅限 Linux 和 WSL2。请参阅 [Bubblewrap fails to start inside a container](/docs/zh-CN/sandboxing#troubleshooting)。2253仅限 Linux 和 WSL2。请参阅 [Bubblewrap fails to start inside a container](/docs/zh-CN/sandboxing#bubblewrap-fails-to-start-inside-a-container)。

2236 2254 

2237<h3 id="sandbox-enableweakernetworkisolation">2255<h3 id="sandbox-enableweakernetworkisolation">

2238 `sandbox.enableWeakerNetworkIsolation`2256 `sandbox.enableWeakerNetworkIsolation`


2240 2258 

2241让 macOS 上的沙箱化命令到达系统 TLS 信任服务 `com.apple.trustd.agent`。基于 Go 的工具(如 `gh`、`gcloud` 和 `terraform` )在您使用 [`network.httpProxyPort`](#sandbox-network-httpproxyport) 与 MITM 代理和自定义 CA 时需要它来验证 TLS 证书。这通过打开通过信任服务的潜在数据泄露路径来降低安全性。2259让 macOS 上的沙箱化命令到达系统 TLS 信任服务 `com.apple.trustd.agent`。基于 Go 的工具(如 `gh`、`gcloud` 和 `terraform` )在您使用 [`network.httpProxyPort`](#sandbox-network-httpproxyport) 与 MITM 代理和自定义 CA 时需要它来验证 TLS 证书。这通过打开通过信任服务的潜在数据泄露路径来降低安全性。

2242 2260 

2243* **Scope**: [`Any file`](#scopes)2261* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2244* **Type**: 布尔值2262* **Type**: 布尔值

2245 * `true`: macOS 上的沙箱化命令可以到达 `com.apple.trustd.agent`2263 * `true`: macOS 上的沙箱化命令可以到达 `com.apple.trustd.agent`

2246 * `false`: macOS 上的沙箱化命令无法到达系统 TLS 信任服务2264 * `false`: macOS 上的沙箱化命令无法到达系统 TLS 信任服务


2255}2273}

2256```2274```

2257 2275 

2258如果您不使用 MITM 代理,请改为在 [`excludedCommands`](#sandbox-excludedcommands) 中列出失败的工具;请参阅 [Go-based CLIs fail TLS verification on macOS](/docs/zh-CN/sandboxing#troubleshooting)。2276如果您不使用 MITM 代理,请改为在 [`excludedCommands`](#sandbox-excludedcommands) 中列出失败的工具;请参阅 [Go-based CLIs fail TLS verification on macOS](/docs/zh-CN/sandboxing#go-based-clis-fail-tls-verification-on-macos)。

2259 2277 

2260<h3 id="sandbox-allowappleevents">2278<h3 id="sandbox-allowappleevents">

2261 `sandbox.allowAppleEvents`2279 `sandbox.allowAppleEvents`


2406 2424 

2407路径使用与 `sandbox.filesystem.*` 设置相同的 [prefixes](#sandbox-path-prefixes),Claude Code 在会话加载的每个设置范围中合并数组。[Protect credentials](/docs/zh-CN/sandboxing#protect-credentials) 涵盖您使用 `--setting-sources` 排除的源仍然适用的内容。`mask` 条目需要 Claude Code v2.1.221 或更高版本。2425路径使用与 `sandbox.filesystem.*` 设置相同的 [prefixes](#sandbox-path-prefixes),Claude Code 在会话加载的每个设置范围中合并数组。[Protect credentials](/docs/zh-CN/sandboxing#protect-credentials) 涵盖您使用 `--setting-sources` 排除的源仍然适用的内容。`mask` 条目需要 Claude Code v2.1.221 或更高版本。

2408 2426 

2409`mask` 替换仅通过沙箱代理运行,因此设置 [`sandbox.network.tlsTerminate`](#sandbox-network-tlsterminate) 或 [`allowPlaintextInject`](#sandbox-credentials-allowplaintextinject) 用于纯 HTTP 测试网络。`mask` 适用于单个文件,因此单独列出每个凭证文件。Claude Code 接受但忽略 `deny` 条目上的 `mask` 字段。[Mask credential files](/docs/zh-CN/sandboxing#mask-credential-files) 涵盖遵守哪些设置源以及条目何时回退到 `deny`。2427`mask` 替换仅通过沙箱代理运行,因此请设置 [`sandbox.network.tlsTerminate`](#sandbox-network-tlsterminate),或针对纯 HTTP 测试网络设置 [`allowPlaintextInject`](#sandbox-credentials-allowplaintextinject)。`mask` 适用于单个文件,因此请单独列出每个凭据文件。Claude Code 接受但忽略 `deny` 条目上的 `mask` 字段。[Mask credentials](/docs/zh-CN/sandboxing#mask-credentials) 涵盖遵守哪些设置源,[Mask credential files](/docs/zh-CN/sandboxing#mask-credential-files) 涵盖条目何时回退到 `deny`。

2410 2428 

2411<span id="sandbox-credentials-files-extract" />2429<span id="sandbox-credentials-files-extract" />

2412 2430 


2483 2501 

2484`name` 必须以字母或下划线开头,仅包含字母、数字和下划线。Claude Code 在会话加载的每个设置范围中合并数组,当同一变量同时出现两种模式时应用 `deny`。[Protect credentials](/docs/zh-CN/sandboxing#protect-credentials) 涵盖您使用 `--setting-sources` 排除的源仍然适用的内容。`mask` 条目需要 Claude Code v2.1.199 或更高版本。2502`name` 必须以字母或下划线开头,仅包含字母、数字和下划线。Claude Code 在会话加载的每个设置范围中合并数组,当同一变量同时出现两种模式时应用 `deny`。[Protect credentials](/docs/zh-CN/sandboxing#protect-credentials) 涵盖您使用 `--setting-sources` 排除的源仍然适用的内容。`mask` 条目需要 Claude Code v2.1.199 或更高版本。

2485 2503 

2486`mask` 替换仅通过沙箱代理运行,因此设置 [`sandbox.network.tlsTerminate`](#sandbox-network-tlsterminate) 或 [`allowPlaintextInject`](#sandbox-credentials-allowplaintextinject) 用于纯 HTTP 测试网络;请参阅 [Mask environment variables](/docs/zh-CN/sandboxing#mask-environment-variables)。Claude Code 接受但忽略 `deny` 条目上的 `mask` 字段。2504`mask` 替换仅通过沙箱代理运行,因此请设置 [`sandbox.network.tlsTerminate`](#sandbox-network-tlsterminate),或针对纯 HTTP 测试网络设置 [`allowPlaintextInject`](#sandbox-credentials-allowplaintextinject);请参阅 [Mask credentials](/docs/zh-CN/sandboxing#mask-credentials)。Claude Code 接受但忽略 `deny` 条目上的 `mask` 字段。

2487 2505 

2488<span id="sandbox-credentials-envvars-extract" />2506<span id="sandbox-credentials-envvars-extract" />

2489 2507 


2586}2604}

2587```2605```

2588 2606 

2589每个命名的变量必须是 [`sandbox.credentials.envVars`](#sandbox-credentials-envvars) 中的整个值 `mask` 条目,没有 `extract` 或 `decode`,并且只能在所有对中填充一个槽。2607每个指定的变量必须是 [`sandbox.credentials.envVars`](#sandbox-credentials-envvars) 中的整值 `mask` 条目,不带 `extract` 或 `decode`,并且在所有配对中只能填充一个槽位。以下规则也适用:

2608 

2609* 代理在访问密钥 ID 条目的 `injectHosts` 中列出的主机上重新签名请求

2610* 设置 `sessionTokenVar` 时,代理在重新签名的请求上将真实令牌作为 `x-amz-security-token` 发送

2611* 在配对中指定任何常规变量都会替换自动配对

2590 2612 

2591<h3 id="sandbox-credentials-sigv4">2613<h3 id="sandbox-credentials-sigv4">

2592 `sandbox.credentials.sigv4`2614 `sandbox.credentials.sigv4`


2624 2646 

2625* **Scope**: [`Any file`](#scopes)。`strictAllowlist`、`allowManagedDomainsOnly` 和 `tlsTerminate` 从较少的源读取,如其条目所述。2647* **Scope**: [`Any file`](#scopes)。`strictAllowlist`、`allowManagedDomainsOnly` 和 `tlsTerminate` 从较少的源读取,如其条目所述。

2626* **Type**: 对象,包含以下子键2648* **Type**: 对象,包含以下子键

2627* **Default**: 未设置,因此没有域被预先允许,沙箱为每个新主机提示2649* **Default**: 未设置,因此没有域被预先允许,由您的权限模式决定[每个新主机的处理方式](/docs/zh-CN/sandboxing#hosts-outside-your-allowed-domains)

2628 2650 

2629这预先允许 GitHub 和 npm,阻止 `uploads.github.com`,并让命令绑定到 localhost:2651这预先允许 GitHub 和 npm,阻止 `uploads.github.com`,并让命令绑定到 localhost:

2630 2652 


2640}2662}

2641```2663```

2642 2664 

2643Claude Code 在设置范围中合并数组子键并删除重复项,因此项目可以向您的用户列表添加域。`WebFetch(domain:...)` 允许和拒绝 [permission rules](/docs/zh-CN/sandboxing#permission-rules) 馈送相同的允许和拒绝列表。2665Claude Code 在各个设置作用域中合并数组子键,因此项目可以向您的用户列表添加域,除非有[仓库锁](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)适用。`WebFetch(domain:...)` 允许和拒绝 [permission rules](/docs/zh-CN/sandboxing#permission-rules) 会填充相同的允许和拒绝列表。

2644 2666 

2645<h3 id="sandbox-network-allowunixsockets">2667<h3 id="sandbox-network-allowunixsockets">

2646 `sandbox.network.allowUnixSockets`2668 `sandbox.network.allowUnixSockets`


2648 2670 

2649列出 macOS 上沙箱化命令可以连接到的 Unix 套接字路径。Claude Code 在 Linux 和 WSL2 上忽略此列表,其中 seccomp 过滤器无法检查套接字路径;改为在那里使用 [`allowAllUnixSockets`](#sandbox-network-allowallunixsockets)。2671列出 macOS 上沙箱化命令可以连接到的 Unix 套接字路径。Claude Code 在 Linux 和 WSL2 上忽略此列表,其中 seccomp 过滤器无法检查套接字路径;改为在那里使用 [`allowAllUnixSockets`](#sandbox-network-allowallunixsockets)。

2650 2672 

2651* **Scope**: [`Any file`](#scopes)2673* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2652* **Type**: 字符串数组,每个是套接字路径2674* **Type**: 字符串数组,每个是套接字路径

2653* **Default**: 未设置,因此 macOS 沙箱阻止每个 Unix 套接字2675* **Default**: 未设置,因此 macOS 沙箱阻止每个 Unix 套接字

2654 2676 


2670 2692 

2671让沙箱化命令连接到每个 Unix 套接字。在 Linux 和 WSL2 上,沙箱的 [seccomp filter](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 阻止 `socket(AF_UNIX, ...)` 调用,因此这是在那里允许 Unix 套接字的唯一方式。当过滤器缺失时,`/sandbox` 在其 Dependencies 选项卡上报告,沙箱不阻止 Unix 套接字调用。请参阅 [Set up Linux and WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 了解过滤器来自何处。2693让沙箱化命令连接到每个 Unix 套接字。在 Linux 和 WSL2 上,沙箱的 [seccomp filter](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 阻止 `socket(AF_UNIX, ...)` 调用,因此这是在那里允许 Unix 套接字的唯一方式。当过滤器缺失时,`/sandbox` 在其 Dependencies 选项卡上报告,沙箱不阻止 Unix 套接字调用。请参阅 [Set up Linux and WSL2](/docs/zh-CN/sandboxing#set-up-linux-and-wsl2) 了解过滤器来自何处。

2672 2694 

2673* **Scope**: [`Any file`](#scopes)2695* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2674* **Type**: 布尔值2696* **Type**: 布尔值

2675 * `true`: 沙箱化命令可以连接到每个 Unix 套接字2697 * `true`: 沙箱化命令可以连接到每个 Unix 套接字

2676 * `false`: 沙箱阻止 Unix 套接字连接:在 macOS 上除了 `allowUnixSockets` 中的路径,在 Linux 和 WSL2 上通过 seccomp 过滤器(当存在时)2698 * `false`: 沙箱阻止 Unix 套接字连接:在 macOS 上除了 `allowUnixSockets` 中的路径,在 Linux 和 WSL2 上通过 seccomp 过滤器(当存在时)


2692 `sandbox.network.allowLocalBinding`2714 `sandbox.network.allowLocalBinding`

2693</h3>2715</h3>

2694 2716 

2695让 macOS 上的沙箱化命令绑定到 localhost 端口,例如启动开发服务器。2717让 macOS 上的沙箱化命令监听网络端口(例如启动开发服务器),并连接到 localhost 上的任何端口。监听非回环地址的命令会接受来自其他机器的连接。该键在 Linux 和 WSL2 上无效,因为那里每个沙箱化命令都有自己的回环接口。要从 Linux 或 WSL2 访问主机上的服务器,请参阅 [A command fails to reach a server on localhost](/docs/zh-CN/sandboxing#a-command-fails-to-reach-a-server-on-localhost)。

2696 2718 

2697* **Scope**: [`Any file`](#scopes)2719* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2698* **Type**: 布尔值2720* **Type**: 布尔值

2699 * `true`: macOS 上的沙箱化命令可以绑定到 localhost 端口2721 * `true`: macOS 上的沙箱化命令可以监听任何本地地址并连接到 localhost 上的任何端口

2700 * `false`: macOS 上的沙箱化命令无法绑定到 localhost 端口2722 * `false`: macOS 上的沙箱化命令无法监听端口,也无法直接连接到 localhost 上的服务器

2701* **Default**: `false`2723* **Default**: `false`

2702 2724 

2703```json settings.json theme={null}2725```json settings.json theme={null}


2716 2738 

2717列出 macOS 沙箱可能查找的其他 XPC 和 Mach 服务名称。通过 XPC 通信的工具,例如 iOS Simulator 或 Playwright,需要在此处列出其服务。2739列出 macOS 沙箱可能查找的其他 XPC 和 Mach 服务名称。通过 XPC 通信的工具,例如 iOS Simulator 或 Playwright,需要在此处列出其服务。

2718 2740 

2719* **Scope**: [`Any file`](#scopes)2741* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)

2720* **Type**: 字符串数组,每个是服务名称;单个尾部 `*` 匹配前缀,`"*"` 单独匹配每个服务2742* **Type**: 字符串数组,每个是服务名称;单个尾部 `*` 匹配前缀,`"*"` 单独匹配每个服务

2721* **Default**: 未设置2743* **Default**: 未设置

2722 2744 


2738 2760 

2739预先允许来自沙箱化命令的出站流量的域,因此沙箱不会为它们提示。通配符(如 `*.example.com` )匹配子域,可选的 `:port` 后缀将条目限制为一个端口;没有端口的条目匹配每个端口。2761预先允许来自沙箱化命令的出站流量的域,因此沙箱不会为它们提示。通配符(如 `*.example.com` )匹配子域,可选的 `:port` 后缀将条目限制为一个端口;没有端口的条目匹配每个端口。

2740 2762 

2741* **Scope**: [`Any file`](#scopes)。仅当设置 [`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 时的托管设置。2763* **Scope**: [`Any file`](#scopes),[项目和本地设置受到限制](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox)。当设置了 [`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 时,仅限托管设置。

2742* **Type**: 字符串数组,每个是域、通配符模式或 IP 文字,带有可选的 `:port` 后缀2764* **Type**: 字符串数组,每个是域、通配符模式或 IP 文字,带有可选的 `:port` 后缀

2743* **Default**: 未设置,因此沙箱在命令首次到达新主机时提示2765* **Default**: 未设置,因此由您的权限模式决定[每个新主机的处理方式](/docs/zh-CN/sandboxing#hosts-outside-your-allowed-domains)

2744 2766 

2745这预先允许 GitHub 在每个端口、每个 npm 子域和一个 API 主机仅在端口 443 上:2767这预先允许 GitHub 在每个端口、每个 npm 子域和一个 API 主机仅在端口 443 上:

2746 2768 


2784 `sandbox.network.strictAllowlist`2806 `sandbox.network.strictAllowlist`

2785</h3>2807</h3>

2786 2808 

2787拒绝沙箱化命令访问允许列表外的主机,而不是提示批准。允许列表是 [`allowedDomains`](#sandbox-network-alloweddomains) 加上来自 `WebFetch(domain:...)` 允许规则的域,或仅当设置 [`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 时的托管设置条目。需要 Claude Code v2.1.219 或更高版本。2809拒绝沙箱化命令访问允许列表外的主机,而不是提示批准。允许列表是 [`allowedDomains`](#sandbox-network-alloweddomains) 加上来自 `WebFetch(domain:...)` 允许规则的域,或者当设置了 [`allowManagedDomainsOnly`](#sandbox-network-allowmanageddomainsonly) 时仅为托管设置条目。[Locks that apply without an admin-required sandbox](/docs/zh-CN/sandboxing#locks-that-apply-without-an-admin-required-sandbox) 涵盖仓库的条目。需要 Claude Code v2.1.219 或更高版本。

2788 2810 

2789* **Scope**: [`User or managed`](#scopes)。存储库无法打开或关闭它。2811* **Scope**: [`User or managed`](#scopes)。存储库无法打开或关闭它。

2790* **Type**: 布尔值2812* **Type**: 布尔值


2812 2834 

2813* **Scope**: [`Managed`](#scopes)2835* **Scope**: [`Managed`](#scopes)

2814* **Type**: 布尔值2836* **Type**: 布尔值

2815 * `true`: Claude Code 仅遵守来自托管设置的 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则,并自动阻止非允许的域而不是提示2837 * `true`: Claude Code 仅遵守来自托管设置的 `allowedDomains` 和 `WebFetch(domain:...)` 允许规则,并阻止非允许的域而不是提示

2816 * `false`: 来自用户、项目、本地和 `--settings` 设置的域合并到允许列表中2838 * `false`: 来自其他设置文件的域可以合并到允许列表中

2817* **Default**: `false`2839* **Default**: `false`

2818 2840 

2819这将允许列表锁定到 GitHub 和 npm,并忽略开发人员添加的任何域:2841这将允许列表锁定到 GitHub 和 npm,并忽略开发人员添加的任何域:


2829}2851}

2830```2852```

2831 2853 

2854当该键为 `true` 时,沙箱是[管理员强制要求的](/docs/zh-CN/sandboxing#repository-settings-under-an-admin-required-sandbox),并且只有托管设置可以设置[代理端口](#sandbox-network-httpproxyport)。

2855 

2832被拒绝的域仍然从会话加载的每个源合并。请参阅 [Keep developers from widening the policy](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy)。2856被拒绝的域仍然从会话加载的每个源合并。请参阅 [Keep developers from widening the policy](/docs/zh-CN/sandboxing#keep-developers-from-widening-the-policy)。

2833 2857 

2834<h3 id="sandbox-network-httpproxyport">2858<h3 id="sandbox-network-httpproxyport">

2835 `sandbox.network.httpProxyPort`2859 `sandbox.network.httpProxyPort`

2836</h3>2860</h3>

2837 2861 

2838将沙箱指向您自己的 HTTP 代理而不是 Claude Code 运行的。组织这样做以检查 HTTPS 流量、应用自己的过滤规则或记录每个请求。未设置时,Claude Code 为 HTTP 流量启动自己的代理。2862将沙箱指向您自己的 HTTP 代理,而不是 Claude Code 运行的代理。组织这样做是为了检查 HTTPS 流量、应用自己的过滤规则或记录请求日志。您的代理将接管过滤,Claude Code 不再对发送到那里的流量应用其域列表和网络提示。未设置时,Claude Code 为 HTTP 流量启动自己的代理。

2839 2863 

2840* **Scope**: [`Any file`](#scopes)2864* **Scope**: [`Any file`](#scopes),除非[其他沙箱设置限制了哪些文件可以设置端口](/docs/zh-CN/sandboxing#custom-proxy-configuration)

2841* **Type**: 数字,本地 TCP 端口2865* **Type**: 数字,本地 TCP 端口

2842* **Default**: 未设置,因此 Claude Code 运行自己的代理2866* **Default**: 未设置,因此 Claude Code 运行自己的代理

2843 2867 


2857 `sandbox.network.socksProxyPort`2881 `sandbox.network.socksProxyPort`

2858</h3>2882</h3>

2859 2883 

2860将沙箱指向您自己的 SOCKS5 代理而不是 Claude Code 运行的。未设置时,Claude Code 为 SOCKS 流量启动自己的代理。2884将沙箱指向您自己的 SOCKS5 代理,而不是 Claude Code 运行的代理。您的代理将接管过滤,Claude Code 不再对发送到那里的流量应用其域列表和网络提示。未设置时,Claude Code 为 SOCKS 流量启动自己的代理。

2861 2885 

2862* **Scope**: [`Any file`](#scopes)2886* **Scope**: [`Any file`](#scopes),除非[其他沙箱设置限制了哪些文件可以设置端口](/docs/zh-CN/sandboxing#custom-proxy-configuration)

2863* **Type**: 数字,本地 TCP 端口2887* **Type**: 数字,本地 TCP 端口

2864* **Default**: 未设置,因此 Claude Code 运行自己的代理2888* **Default**: 未设置,因此 Claude Code 运行自己的代理

2865 2889 


3084 Claude Code 在 `env` 中忽略的变量3108 Claude Code 在 `env` 中忽略的变量

3085</h4>3109</h4>

3086 3110 

3087* 项目和本地设置无法设置已检出的存储库不应控制的变量;改为在您的 shell、用户设置或托管设置中设置这些变量。Claude Code 删除每个变量并记录您可以使用 `claude --debug` 看到的警告。它们包括:3111* 项目和本地设置无法设置已检出的仓库不应控制的变量;改为在您的 shell、用户设置或托管设置中设置这些变量。除少数关闭遥测的值外,Claude Code 删除每个变量并记录您可以使用 `claude --debug` 看到的警告。它们包括:

3088 3112 

3089 * 选择 Claude Code 存储或写入其自己文件的位置的变量:`CLAUDE_CONFIG_DIR`、`CLAUDE_CODE_TMPDIR` 和操作系统目录变量,例如 `HOME`、`TMPDIR`、`TMP`、`TEMP` 和 `XDG_*` 系列。3113 * 选择 Claude Code 存储或写入其自己文件的位置的变量:`CLAUDE_CONFIG_DIR`、`CLAUDE_CODE_TMPDIR` 和操作系统目录变量,例如 `HOME`、`TMPDIR`、`TMP`、`TEMP` 和 `XDG_*` 系列。

3114 * 为 Claude Code 启动的进程选择程序和机器范围配置的 Windows 变量,例如 `SystemRoot`、`ComSpec`、`ProgramData`、`LOCALAPPDATA`、`PATHEXT`、`PSModulePath` 和 `ProgramFiles` 系列。

3090 * 导出会话内容的变量:[`OTEL_LOG_RAW_API_BODIES`](/docs/zh-CN/env-vars#variables) 和详细的 beta 跟踪对 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT`。3115 * 导出会话内容的变量:[`OTEL_LOG_RAW_API_BODIES`](/docs/zh-CN/env-vars#variables) 和详细的 beta 跟踪对 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT`。

3091 * [OpenTelemetry 导出器](/docs/zh-CN/monitoring-usage)变量,打开遥测、选择它的去向或选择它捕获的内容:3116 * [OpenTelemetry 导出器](/docs/zh-CN/monitoring-usage)变量,打开遥测、选择它的去向或选择它捕获的内容:

3092 3117 


4306将其设置为 `true` 时,Claude Code 会更改加载的 hooks 和类似 hook 的命令:4331将其设置为 `true` 时,Claude Code 会更改加载的 hooks 和类似 hook 的命令:

4307 4332 

4308* **托管和 SDK hooks 运行**: 来自托管设置的 hooks 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks4333* **托管和 SDK hooks 运行**: 来自托管设置的 hooks 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks

4309* **强制启用的插件 hooks 运行**: 来自您的托管设置通过 [`enabledPlugins`](#enabledplugins) 强制启用的插件的 hooks。Claude Code 与完整的 `plugin@marketplace` ID 匹配,因此来自不同市场的同名插件保持被阻止。这使您可以通过组织市场分发经过审查的 hooks,同时阻止其他所有内容4334* **强制启用的插件 hooks 运行**: 来自您的托管设置通过 [`enabledPlugins`](#enabledplugins) 强制启用的插件的 hooks。Claude Code 与完整的 `plugin@marketplace` ID 匹配,因此来自不同市场的同名插件保持被阻止。这使您可以通过组织市场分发经过审查的 hooks,同时阻止其他所有内容。此类插件中的 [mod](/docs/zh-CN/plugins/mods/overview) 仅在[被视为您组织的 mod](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) 时才会加载

4310* **其他所有内容都被阻止**: 用户、项目和本地 hooks,来自其他插件的 hooks,以及在代理 frontmatter 中声明的 hooks4335* **其他所有内容都被阻止**: 用户、项目和本地 hooks,来自其他已安装插件的 hooks 和 mods,以及在 Agent frontmatter 中声明的 hooks。[Claude Code 内置的 mods](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 会继续运行。若只想阻止用户的 mods,请改为设置 [`allowManagedModsOnly`](/docs/zh-CN/plugins/mods/admin#set-options-on-the-built-in-guard)。

4311* **禁用命令源插件**: Claude Code 还禁用具有 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您明确将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`4336* **禁用命令源插件**: Claude Code 还禁用具有 [`command` 源](/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您明确将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`

4312* **市场 `headersHelper` 命令被阻止**: Claude Code 还会阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](#disablecommandpluginsources) 明确设置为 `false`,托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本4337* **市场 `headersHelper` 命令被阻止**: Claude Code 还会阻止市场 [`headersHelper` 命令](/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](#disablecommandpluginsources) 明确设置为 `false`,托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本

4313* **状态行和文件建议缩小到托管设置**: Claude Code 仅从托管设置读取 [`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](#filesuggestion) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines),遵循 [状态行和文件建议门](#status-line-and-file-suggestion-gates)4338* **状态行和文件建议缩小到托管设置**: Claude Code 仅从托管设置读取 [`statusLine`](/docs/zh-CN/statusline)、[`fileSuggestion`](#filesuggestion) 和 [`subagentStatusLine`](/docs/zh-CN/statusline#subagent-status-lines),遵循 [状态行和文件建议门](#status-line-and-file-suggestion-gates)


4337* **在托管设置中**: Claude Code 禁用每个配置的 hook,包括托管的,并继续运行 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks4362* **在托管设置中**: Claude Code 禁用每个配置的 hook,包括托管的,并继续运行 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 在进程中注册的 hooks

4338* **在任何其他设置文件中**: Claude Code 禁用用户、项目、本地和插件 hooks;托管 hooks、Agent SDK hooks 和来自在托管 [`enabledPlugins`](#enabledplugins) 中强制启用的插件的 hooks 继续运行4363* **在任何其他设置文件中**: Claude Code 禁用用户、项目、本地和插件 hooks;托管 hooks、Agent SDK hooks 和来自在托管 [`enabledPlugins`](#enabledplugins) 中强制启用的插件的 hooks 继续运行

4339 4364 

4365该键还会停止 [mods](/docs/zh-CN/plugins/mods/overview),即其代码会注册 hook 的插件:

4366 

4367* **在托管设置中**: 每个已安装插件中的 mods 都会停止,包括您组织的 mods

4368* **在任何其他设置文件中**: 您安装的 mods 会停止,而[您组织的 mods](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) 继续运行

4369 

4370Claude Code 内置的 mods 在这两种情况下都会继续运行。每个内置 mod 都有[各自的开关](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code)。

4371 

4340当托管设置设置此键时保持 Agent SDK hooks 运行需要 Claude Code v2.1.242 或更高版本。4372当托管设置设置此键时保持 Agent SDK hooks 运行需要 Claude Code v2.1.242 或更高版本。

4341 4373 

4342当 hooks 被禁用时,[`/goal`](/docs/zh-CN/goal) 命令无法运行,`/hooks` 菜单显示通知而不是您的 hooks。4374当 hooks 被禁用时,[`/goal`](/docs/zh-CN/goal) 命令无法运行,`/hooks` 菜单显示通知而不是您的 hooks。


5047* **`git`**: 任何 git URL,带 `url`5079* **`git`**: 任何 git URL,带 `url`

5048* **`url`**: 直接 URL 到 `marketplace.json` 文件,带 `url` 和可选 `headers` 和 `headersHelper` 用于经过身份验证的访问。`headersHelper` 命名一个打印标头的命令,其值太短暂而无法在 `headers` 中列出,需要 Claude Code v2.1.238 或更高版本5080* **`url`**: 直接 URL 到 `marketplace.json` 文件,带 `url` 和可选 `headers` 和 `headersHelper` 用于经过身份验证的访问。`headersHelper` 命名一个打印标头的命令,其值太短暂而无法在 `headers` 中列出,需要 Claude Code v2.1.238 或更高版本

5049* **`file`**: 到 `marketplace.json` 文件的本地路径,带 `path`5081* **`file`**: 到 `marketplace.json` 文件的本地路径,带 `path`

5050* **`directory`**: 本地文件系统路径,带 `path`,仅用于开发5082* **`directory`**: 本地文件系统路径,使用 `path`。可用于开发,或用于您的组织[部署到每台机器](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods)的市场。

5051* **`settings`**: 直接在设置文件中声明的内联 marketplace,不带托管存储库,带 `name` 和 `plugins`5083* **`settings`**: 直接在设置文件中声明的内联 marketplace,不带托管存储库,带 `name` 和 `plugins`

5052 5084 

5053`git` 源类型适用于任何 git 托管服务,包括自托管 GitLab 和 Bitbucket。Claude Code 使用 `git clone` 在该机器上使用的相同身份验证克隆存储库:配置的凭证助手或 SSH 密钥。提供者令牌如 `GITHUB_TOKEN` 通过读取它的凭证助手生效。请参阅 [私有存储库](/docs/zh-CN/plugins/host-marketplace#grant-access-to-a-private-marketplace) 了解设置详情。5085`git` 源类型适用于任何 git 托管服务,包括自托管 GitLab 和 Bitbucket。Claude Code 使用 `git clone` 在该机器上使用的相同身份验证克隆存储库:配置的凭证助手或 SSH 密钥。提供者令牌如 `GITHUB_TOKEN` 通过读取它的凭证助手生效。请参阅 [私有存储库](/docs/zh-CN/plugins/host-marketplace#grant-access-to-a-private-marketplace) 了解设置详情。


5134 5166 

5135Claude Code 忽略项目和本地条目,因为它将这些值替换到 plugin hook、MCP 和 LSP 配置中,克隆的存储库不得能够提供它们。在 v2.1.207 之前,项目和本地设置也被读取。5167Claude Code 忽略项目和本地条目,因为它将这些值替换到 plugin hook、MCP 和 LSP 配置中,克隆的存储库不得能够提供它们。在 v2.1.207 之前,项目和本地设置也被读取。

5136 5168 

5169<h3 id="prependplugins">

5170 `prependPlugins`

5171</h3>

5172 

5173列出托管插件,其 [mod](/docs/zh-CN/plugins/mods/overview) 会按列出的顺序在用户安装的所有 mod 之前运行。当您在托管设置中设置此键时,请在列表中包含 `sec-default@builtin` 以保留内置防护。在托管设置中,如果某个 ID 对应的插件不被视为您组织的插件,Claude Code 会跳过它。有关这些条件以及两个排序键如何协同工作,请参阅[安装您组织的 mod 并设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods)。

5174 

5175* **Scope**: [`User or managed`](#scopes)。Claude Code 从托管设置中读取此键。仅在没有托管设置的机器上,且用户未使用 Team 或 Enterprise 计划登录时,它才会从用户设置中读取此键。它会忽略项目设置、本地设置以及 `--settings` 文件中的此键。

5176* **Type**: `plugin-name@marketplace-name` 字符串数组

5177* **Default**: 未设置

5178 

5179```json managed-settings.json theme={null}

5180{

5181 "extraKnownMarketplaces": {

5182 "acme-tools": {

5183 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5184 }

5185 },

5186 "enabledPlugins": { "acme-guard@acme-tools": true },

5187 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

5188}

5189```

5190 

5191<h3 id="appendplugins">

5192 `appendPlugins`

5193</h3>

5194 

5195列出托管插件,其 [mod](/docs/zh-CN/plugins/mods/overview) 会按列出的顺序在用户安装的所有 mod 之后运行。同时列在 `prependPlugins` 和 `appendPlugins` 中的 ID 会被前置。在托管设置中,如果某个 ID 对应的插件不[被视为您组织的插件](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods),Claude Code 会跳过它。

5196 

5197* **Scope**: [`User or managed`](#scopes)。Claude Code 从托管设置中读取此键。仅在没有托管设置的机器上,且用户未使用 Team 或 Enterprise 计划登录时,它才会从用户设置中读取此键。它会忽略项目设置、本地设置以及 `--settings` 文件中的此键。

5198* **Type**: `plugin-name@marketplace-name` 字符串数组

5199* **Default**: 未设置

5200 

5201```json managed-settings.json theme={null}

5202{

5203 "extraKnownMarketplaces": {

5204 "acme-tools": {

5205 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5206 }

5207 },

5208 "enabledPlugins": { "acme-audit@acme-tools": true },

5209 "appendPlugins": ["acme-audit@acme-tools"]

5210}

5211```

5212 

5137<h2 id="mcp">5213<h2 id="mcp">

5138 MCP5214 MCP

5139</h2>5215</h2>


5878 身份验证和提供商5954 身份验证和提供商

5879</h2>5955</h2>

5880 5956 

5881通过辅助脚本提供凭证,对于组织,强制使用登录方法或组织。请参阅[身份验证](/docs/zh-CN/authentication)。5957通过辅助脚本提供凭据,对于组织,强制使用登录方法或组织。请参阅[身份验证](/docs/zh-CN/authentication)。

5882 5958 

5883<h3 id="allowedproviders">5959<h3 id="allowedproviders">

5884 `allowedProviders`5960 `allowedProviders`

5885</h3>5961</h3>

5886 5962 

5887列出机器可以通过其到达 Claude 的服务,例如 Anthropic API、Amazon Bedrock 或 LLM 网关。未列出的提供商上的会话在启动时、登录时以及下次联系 API 时被拒绝,因此在会话中期切换到未列出的提供商也被拒绝。[拒绝消息](/docs/zh-CN/errors#managed-settings-dont-allow-this-api-provider)会命名选择提供商的内容和继续的步骤。需要 Claude Code v2.1.285 或更高版本。5963列出机器可以通过其访问 Claude 的服务,例如 Anthropic API、Amazon Bedrock 或 LLM 网关。使用未列出的提供商的会话会在启动时、登录时以及下次联系 API 时被拒绝,因此在会话中途切换到未列出的提供商也会被拒绝。[拒绝消息](/docs/zh-CN/errors#managed-settings-dont-allow-this-api-provider)会指明是什么选择了该提供商以及继续操作的步骤。需要 Claude Code v2.1.285 或更高版本。

5888 5964 

5889* **Scope**: [`Managed`](#scopes)。机器自身管理员源设置的列表、MDM 策略和托管设置文件在服务器托管设置也提供一个列表时继续应用:会话随后只能使用两个列表上的提供商,因此服务器托管列表可以缩小机器允许的范围但永远不能扩大它。哪个机器源的 `allowedProviders` 计数遵循[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)。通过仅服务器托管设置传递的列表仅到达[获取服务器托管设置](/docs/zh-CN/server-managed-settings#platform-availability)的会话。5965* **Scope**: [`Managed`](#scopes)。由机器自身的管理员源(MDM 策略和托管设置文件)设置的列表,在服务器托管设置也提供一个列表时仍继续生效:此时会话只能使用同时出现在两个列表上的提供商,因此服务器托管列表可以缩小机器允许的范围,但永远不能扩大它。哪个机器源的 `allowedProviders` 生效遵循[Claude Code 如何组合托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)。仅通过服务器托管设置提供的列表只会作用于[获取服务器托管设置](/docs/zh-CN/server-managed-settings#platform-availability)的会话。

5890* **Type**: 字符串数组,每个都是以下之一:5966* **Type**: 字符串数组,每个都是以下之一:

5891 * `"anthropic"`:Anthropic 自有主机上的 Anthropic API,通过 claude.ai 或 Console 登录或 API 密钥。将其与 [`forceLoginMethod`](#forceloginmethod) 或 [`forceLoginOrgUUID`](#forceloginorguuid) 配对以也限制登录5967 * `"anthropic"`:Anthropic 自有主机上的 Anthropic API,通过 claude.ai 或 Console 登录或 API 密钥访问。将其与 [`forceLoginMethod`](#forceloginmethod) 或 [`forceLoginOrgUUID`](#forceloginorguuid) 配合使用,以同时限制登录

5892 * `"bedrock"`:[Amazon Bedrock](/docs/zh-CN/amazon-bedrock)5968 * `"bedrock"`:[Amazon Bedrock](/docs/zh-CN/amazon-bedrock)

5893 * `"vertex"`:[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai),以前称为 Vertex AI5969 * `"vertex"`:[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai),以前称为 Vertex AI

5894 * `"foundry"`:[Microsoft Foundry](/docs/zh-CN/microsoft-foundry)5970 * `"foundry"`:[Microsoft Foundry](/docs/zh-CN/microsoft-foundry)

5895 * `"anthropicAws"`:[AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)5971 * `"anthropicAws"`:[AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)

5896 * `"mantle"`:Amazon Bedrock [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。[在 Invoke API 旁边运行 Mantle](/docs/zh-CN/amazon-bedrock#run-mantle-alongside-the-invoke-api) 的会话使用两个提供商,因此将 `"bedrock"` 和 `"mantle"` 一起列出5972 * `"mantle"`:Amazon Bedrock [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)。[在 Invoke API 旁边运行 Mantle](/docs/zh-CN/amazon-bedrock#run-mantle-alongside-the-invoke-api) 的会话使用两个提供商,因此需为其将 `"bedrock"` 和 `"mantle"` 一起列出

5897 * `"customEndpoint"`:Anthropic API 或云提供商的 API 发送到另一个主机,例如由 `ANTHROPIC_BASE_URL` 命名的 [LLM 网关](/docs/zh-CN/llm-gateway)、提供商的 `ANTHROPIC_*_BASE_URL` 变量或不是裸资源名称的 `ANTHROPIC_FOUNDRY_RESOURCE` 值。Claude Code 仅为托管 [`env`](#env) 块固定的确切值允许它5973 * `"customEndpoint"`:发送到其他主机的 Anthropic API 或云提供商的 API,例如由 `ANTHROPIC_BASE_URL` 或由提供商的端点变量(例如 `ANTHROPIC_BEDROCK_BASE_URL`)指定的 [LLM 网关](/docs/zh-CN/llm-gateway)。Claude Code 仅允许托管 [`env`](#env) 块所固定的确切值

5898 * `"gateway"`:[Cloud 网关](/docs/zh-CN/claude-apps-gateway)登录5974 * `"gateway"`:[Cloud 网关](/docs/zh-CN/claude-apps-gateway)登录

5899* **Default**: 未设置,因此可以使用任何提供商5975* **Default**: 未设置,因此可以使用任何提供商

5900 5976 


5904}5980}

5905```5981```

5906 5982 

5907每个云提供商的条目意味着该提供商自己的服务,包括其区域、FIPS 和私有端点。5983每个云提供商的条目指该提供商自己的服务,包括其区域、FIPS 和私有端点。

5908 5984 

5909Claude Code 不识别为提供商名称的条目被删除并报告,列表的其余部分保持强制执行。使用空列表,或其每个条目都无法识别的列表,Claude Code 拒绝每个提供商并不在机器上启动。5985Claude Code 无法识别为提供商名称的条目会被删除并报告,列表的其余部分仍保持强制执行。如果列表为空,或其每个条目都无法识别,Claude Code 会拒绝所有提供商,并且不会在该机器上启动。

5910 5986 

5911<h4 id="endpoints-that-need-a-pin-in-managed-env">5987<h4 id="endpoints-that-need-a-pin-in-managed-env">

5912 需要在托管 `env` 中固定的端点5988 需要在托管 `env` 中固定的端点

5913</h4>5989</h4>

5914 5990 

5915固定是在托管 [`env`](#env) 块中设置的端点变量的值。当会话将提供商的流量发送到该提供商自己的服务以外的地方时,Claude Code 仅在会话的值与固定值相同时允许它。这些端点需要一个:5991固定值是在托管 [`env`](#env) 块中设置的端点变量的值。当会话将提供商的流量发送到该提供商自己的服务以外的地方时,Claude Code 仅在会话的值与固定值相同时才允许它。以下端点需要固定值:

5916 5992 

5917* **`"customEndpoint"` 会话**:命名主机的变量,例如 `ANTHROPIC_BASE_URL`5993* **`"customEndpoint"` 会话**:指定主机的变量,例如 `ANTHROPIC_BASE_URL`

5918* **Amazon Bedrock**:AWS SDK 的 `AWS_ENDPOINT_URL`、`AWS_ENDPOINT_URL_BEDROCK` 和 `AWS_ENDPOINT_URL_BEDROCK_RUNTIME` 变量当它们指向 Bedrock 自己的服务之外时。会话保持在 `"bedrock"` 下而不是 `"customEndpoint"`5994* **Amazon Bedrock**:当 AWS SDK 的 `AWS_ENDPOINT_URL`、`AWS_ENDPOINT_URL_BEDROCK` 和 `AWS_ENDPOINT_URL_BEDROCK_RUNTIME` 变量指向 Bedrock 自己的服务之外时。会话仍归于 `"bedrock"` 而不是 `"customEndpoint"`

5919* **网关登录的 URL**:会话保持在 `"gateway"` 下,[`forceLoginGatewayUrl`](#forcelogingatewayurl) 也计为固定5995* **网关登录的 URL**:会话仍归于 `"gateway"`,[`forceLoginGatewayUrl`](#forcelogingatewayurl) 也计为固定值

5920 5996 

5921哪些 `env` 块计为固定取决于列表设置的位置:5997哪些 `env` 块计为固定值取决于列表设置的位置:

5922 5998 

5923* **机器上的管理员源设置列表**:仅机器自身管理员源的 `env` 块计为固定5999* **机器上的管理员源设置了列表**:仅机器自身管理员源的 `env` 块计为固定值

5924* **仅服务器托管设置设置列表**:这些服务器托管设置中的 `env` 值也计为固定6000* **仅服务器托管设置设置了列表**:这些服务器托管设置中的 `env` 值也计为固定值

5925 6001 

5926列表不判断云提供商的凭证和租赁变量或网络路径,例如 `HTTPS_PROXY` 和证书设置。在托管 `env` 块中为舰队设置这些。6002该列表不评判云提供商的凭据和租户变量或网络路径,例如 `HTTPS_PROXY` 和证书设置。请在托管 `env` 块中为所有机器设置这些内容。

5927 6003 

5928<h3 id="apikeyhelper">6004<h3 id="apikeyhelper">

5929 `apiKeyHelper`6005 `apiKeyHelper`

5930</h3>6006</h3>

5931 6007 

5932运行您自己的命令来生成 Claude Code 随模型请求发送的凭证。Claude Code 通过系统 shell 运行该命令,在 macOS 和 Linux 上为 `/bin/sh`,在 Windows 上为 `cmd`,并将其输出作为 `X-Api-Key` 和 `Authorization: Bearer` 标头发送。将其用于动态或轮换凭证,例如从保管库获取的短期令牌。6008运行您自己的命令来生成 Claude Code 随模型请求发送的凭据。Claude Code 通过系统 shell 运行该命令,在 macOS 和 Linux 上为 `/bin/sh`,在 Windows 上为 `cmd`,并将其输出同时作为 `X-Api-Key` 和 `Authorization: Bearer` 标头发送。将其用于动态或轮换的凭据,例如从保管库获取的短期令牌。

5933 6009 

5934* **Scope**: [`Any file`](#scopes)6010* **Scope**: [`Any file`](#scopes)

5935* **Type**: string,shell 命令行6011* **Type**: string,shell 命令行


5943 6019 

5944Claude Code 缓存该值并在以下情况下重新运行该命令:6020Claude Code 缓存该值并在以下情况下重新运行该命令:

5945 6021 

5946* 在缓存生命周期后,默认为五分钟或您使用 [`CLAUDE_CODE_API_KEY_HELPER_TTL_MS`](/docs/zh-CN/env-vars) 设置的间隔。6022* 在缓存生命周期之后,默认为五分钟或您使用 [`CLAUDE_CODE_API_KEY_HELPER_TTL_MS`](/docs/zh-CN/env-vars) 设置的间隔。

5947* 当对 Anthropic API 的请求(直接或通过 [LLM gateway](/docs/zh-CN/llm-gateway))失败并返回 `401` 或 `403` 时。6023* 当对 Anthropic API 的请求(直接或通过 [LLM 网关](/docs/zh-CN/llm-gateway))失败并返回 `401` 或 `403` 时。

5948* 在向 Anthropic API 发送请求之前(直接或通过 LLM gateway),当缓存的输出是在辅助程序生成后过期的 JWT 时。需要 Claude Code v2.1.246 或更高版本。6024* 在向 Anthropic API 发送请求之前(直接或通过 LLM 网关),当缓存的输出是在辅助程序生成后已过期的 JWT 时。需要 Claude Code v2.1.246 或更高版本。

5949 6025 

5950最后两种情况仅在辅助程序的输出是 Claude Code 发送的凭证且未设置 `ANTHROPIC_AUTH_TOKEN` 时适用。6026最后两种情况仅在辅助程序的输出是 Claude Code 发送的凭据且未设置 `ANTHROPIC_AUTH_TOKEN` 时适用。

5951 6027 

5952在交互式会话中,当命令来自项目或本地设置时,Claude Code 在您接受工作区信任提示之前不会运行它。请参阅[凭证管理](/docs/zh-CN/authentication#credential-management)。6028在交互式会话中,当命令来自项目或本地设置时,Claude Code 在您接受工作区信任提示之前不会运行它。请参阅[凭据管理](/docs/zh-CN/authentication#credential-management)。

5953 6029 

5954<h3 id="awsauthrefresh">6030<h3 id="awsauthrefresh">

5955 `awsAuthRefresh`6031 `awsAuthRefresh`

5956</h3>6032</h3>

5957 6033 

5958运行您自己的命令(例如 `aws sso login`),以在 Claude Code 用于 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 的凭证停止工作时刷新 `.aws` 目录中的凭证。Claude Code 首先根据 STS 检查当前凭证,仅在该检查失败时运行该命令,然后读取刷新的 `.aws` 目录。6034运行您自己的命令(例如 `aws sso login`),以在 Claude Code 用于 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 的凭据失效时刷新 `.aws` 目录中的凭据。Claude Code 首先通过 STS 检查当前凭据,仅在该检查失败时运行该命令,然后读取刷新后的 `.aws` 目录。

6035 

6036当多个使用相同命令和凭据的 Claude Code 进程(例如不同的终端或 IDE 窗口)同时检查失败时,由一个进程运行该命令,其余进程等待该次运行,而不是各自启动运行。在有待处理请求的情况下已等待 60 秒的进程会自行运行该命令。要关闭此行为,请将 [`CLAUDE_CODE_DISABLE_AUTH_REFRESH_LOCK`](/docs/zh-CN/env-vars) 设置为 `1`。

5959 6037 

5960* **Scope**: [`Any file`](#scopes)6038* **Scope**: [`Any file`](#scopes)

5961* **Type**: string,shell 命令行6039* **Type**: string,shell 命令行

5962* **Default**: 未设置,因此 Claude Code 不为您刷新 AWS 凭证6040* **Default**: 未设置,因此 Claude Code 不会为您刷新 AWS 凭据

5963 6041 

5964```json settings.json theme={null}6042```json settings.json theme={null}

5965{6043{


5967}6045}

5968```6046```

5969 6047 

5970当您的刷新流写入 `.aws` 时使用此密钥;当它打印凭证时使用 [`awsCredentialExport`](#awscredentialexport)。请参阅[高级凭证配置](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration)。6048当您的刷新流程写入 `.aws` 时使用此设置项;当它打印凭据时改用 [`awsCredentialExport`](#awscredentialexport)。请参阅[高级凭据配置](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration)。

5971 6049 

5972<h3 id="awscredentialexport">6050<h3 id="awscredentialexport">

5973 `awsCredentialExport`6051 `awsCredentialExport`

5974</h3>6052</h3>

5975 6053 

5976运行您自己的命令,该命令将 AWS 凭证打印为 JSON,以便 Claude Code 可以使用不存在于 `.aws` 目录中的凭证调用 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)。Claude Code 接受 `aws sts` 输出形状和平面 `aws configure export-credentials` 形状,并将凭证范围限定为其自己的 Bedrock 客户端,因此 Claude Code 运行的 shell 命令仍然看到您的环境凭证。6054运行您自己的命令,该命令将 AWS 凭据打印为 JSON,以便 Claude Code 可以使用不存放在 `.aws` 目录中的凭据调用 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)。Claude Code 接受 `aws sts` 输出格式和扁平的 `aws configure export-credentials` 格式,并将凭据限定于其自己的 Bedrock 客户端,因此 Claude 运行的 shell 命令仍然看到您的环境凭据。

5977 6055 

5978* **Scope**: [`Any file`](#scopes)6056* **Scope**: [`Any file`](#scopes)

5979* **Type**: string,shell 命令行6057* **Type**: string,shell 命令行

5980* **Default**: 未设置,因此 Claude Code 使用环境 AWS 凭证链6058* **Default**: 未设置,因此 Claude Code 使用环境中的 AWS 凭据链

5981 6059 

5982```json settings.json theme={null}6060```json settings.json theme={null}

5983{6061{


5985}6063}

5986```6064```

5987 6065 

5988与 [`awsAuthRefresh`](#awsauthrefresh) 不同,Claude Code 在设置此命令时始终运行它,而不首先检查环境凭证。请参阅[高级凭证配置](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration)。6066与 [`awsAuthRefresh`](#awsauthrefresh) 不同,只要设置了此命令,Claude Code 就始终运行它,而不会先检查环境凭据。请参阅[高级凭据配置](/docs/zh-CN/amazon-bedrock#advanced-credential-configuration)。

5989 6067 

5990<h3 id="forceloginmethod">6068<h3 id="forceloginmethod">

5991 `forceLoginMethod`6069 `forceLoginMethod`

5992</h3>6070</h3>

5993 6071 

5994限制人们可以使用哪种帐户登录。设置 `"claudeai"` 以仅允许 claude.ai 帐户,设置 `"console"` 以仅允许 Claude Console 帐户,或设置 `"gateway"` 以将人们发送到 [cloud gateway](/docs/zh-CN/claude-apps-gateway) 而不是第一方登录。管理员在托管设置中设置它,并将其与 [`forceLoginOrgUUID`](#forceloginorguuid) 配对,以将开发人员的 claude.ai 登录保持在一个组织内。如果您在任何设置文件中将其设置为 `"claudeai"` 或 `"console"`,Claude Code 也会停止在该文件适用的会话中提供[无密钥 Console 登录](/docs/zh-CN/authentication#sign-in-without-an-api-key)。6072限制人们可以使用哪种帐户登录。设置 `"claudeai"` 以仅允许 claude.ai 帐户,设置 `"console"` 以仅允许 Claude Console 帐户,或设置 `"gateway"` 以将人们引导至 [cloud gateway](/docs/zh-CN/claude-apps-gateway) 而不是第一方登录。管理员在托管设置中设置它,并将其与 [`forceLoginOrgUUID`](#forceloginorguuid) 配合使用,以将开发人员的 claude.ai 登录限制在一个组织内。如果您在任何设置文件中将其设置为 `"claudeai"` 或 `"console"`,Claude Code 也会在该文件适用的会话中停止提供[无密钥 Console 登录](/docs/zh-CN/authentication#sign-in-without-an-api-key)。

5995 6073 

5996* **Scope**: [`Any file`](#scopes)。Claude Code 仅从机器上的托管源(`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序)接受 `"gateway"`。它在用户、项目、本地、HKCU 和服务器托管设置中将 `"gateway"` 视为未设置,与 [`forceLoginGatewayUrl`](#forcelogingatewayurl) 的规则相同。6074* **Scope**: [`Any file`](#scopes)。Claude Code 仅接受来自机器上托管源(`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序)的 `"gateway"`。它在用户、项目、本地、HKCU 和服务器托管设置中将 `"gateway"` 视为未设置,与 [`forceLoginGatewayUrl`](#forcelogingatewayurl) 的规则相同。

5997* **Type**: string,以下之一:6075* **Type**: string,以下之一:

5998 * `"claudeai"`:仅 claude.ai 帐户可以登录6076 * `"claudeai"`:仅 claude.ai 帐户可以登录

5999 * `"console"`:仅 Claude Console 帐户可以登录6077 * `"console"`:仅 Claude Console 帐户可以登录

6000 * `"gateway"`:Claude Code 将人们发送到 cloud gateway 而不是第一方登录6078 * `"gateway"`:Claude Code 将人们引导至 cloud gateway 而不是第一方登录

6001* **Default**: 未设置,因此人们选择登录方法6079* **Default**: 未设置,因此人们自行选择登录方法

6002 6080 

6003```json settings.json theme={null}6081```json settings.json theme={null}

6004{6082{


6006}6084}

6007```6085```

6008 6086 

6009每个第一方登录路径都应用该限制,包括 [VS Code 扩展](/docs/zh-CN/vs-code)、Agent SDK、`claude setup-token` 和 `/install-github-app`,除了终端的交互式登录屏幕(通过 `/login` 或首次运行入门到达),它预选择该方法而不强制执行。在 v2.1.212 之前,仅终端登录应用了它。请参阅[限制登录到您的组织](/docs/zh-CN/authentication#restrict-login-to-your-organization),了解如何处理每个登录路径、环境凭证和第三方提供商。6087每个第一方登录路径都会应用该限制,包括 [VS Code 扩展](/docs/zh-CN/vs-code)、Agent SDK、`claude setup-token` 和 `/install-github-app`,但终端的交互式登录屏幕(通过 `/login` 或首次运行引导进入)除外,它会预先选择该方法但不强制执行。在 v2.1.212 之前,仅终端登录应用该限制。请参阅[限制登录到您的组织](/docs/zh-CN/authentication#restrict-login-to-your-organization),了解如何处理每个登录路径、环境凭据和第三方提供商。

6010 6088 

6011当机器上的托管源设置 `"gateway"` 时,Claude Code 不使用剩余登录、API 密钥或 `apiKeyHelper` 凭证。请参阅[管理员策略需要 Cloud gateway 登录](/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in),了解每个凭证生成的消息。如果您通过 `CLAUDE_CODE_USE_BEDROCK` 或类似的环境变量选择云提供商,该会话不需要网关登录。在 v2.1.261 之前,Claude Code 在这些机器上使用了剩余登录。6089当机器上的托管源设置 `"gateway"` 时,Claude Code 不会使用遗留的登录、API 密钥或 `apiKeyHelper` 凭据。请参阅[管理员策略需要 Cloud gateway 登录](/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in),了解每种情况生成的消息。如果您通过 `CLAUDE_CODE_USE_BEDROCK` 或类似的环境变量选择云提供商,该会话不需要网关登录。在 v2.1.261 之前,Claude Code 在这些机器上会使用遗留的登录。

6012 6090 

6013<h3 id="forcelogingatewayurl">6091<h3 id="forcelogingatewayurl">

6014 `forceLoginGatewayUrl`6092 `forceLoginGatewayUrl`

6015</h3>6093</h3>

6016 6094 

6017设置 `/login` Cloud gateway 屏幕连接到的网关 URL,以便人们可以到达您的 [cloud gateway](/docs/zh-CN/claude-apps-gateway) 而无需输入其地址。该屏幕没有 URL 字段:设置此密钥后,它显示您的网关 URL 并在人们按 Enter 时连接;不设置时,它告诉他们联系其 IT 管理员。6095设置 `/login` Cloud gateway 屏幕连接到的网关 URL,以便人们无需输入地址即可访问您的 [cloud gateway](/docs/zh-CN/claude-apps-gateway)。该屏幕没有 URL 字段:设置此设置项后,它会显示您的网关 URL,并在用户按 Enter 时连接;未设置时,它会告诉用户联系其 IT 管理员。

6018 6096 

6019此密钥或 `forceLoginMethod: "gateway"` 使机器仅限网关,除了使用 `CLAUDE_CODE_USE_*` 选择云提供商的会话外。`/login` 然后在 Cloud gateway 屏幕上打开,没有登录方法选择器。请参阅[管理员策略需要 Cloud gateway 登录](/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in),了解剩余第一方登录或 API 密钥会发生什么。设置两个密钥,以便屏幕连接而不是显示错误。6097此设置项或 `forceLoginMethod: "gateway"` 都会使机器仅限网关,但使用 `CLAUDE_CODE_USE_*` 选择云提供商的会话除外。此时 `/login` 会直接打开 Cloud gateway 屏幕,没有登录方法选择器。请参阅[管理员策略需要 Cloud gateway 登录](/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in),了解遗留的第一方登录或 API 密钥会发生什么。请同时设置这两个设置项,以便屏幕能够连接而不是显示错误。

6020 6098 

6021* **Scope**: [`Managed`](#scopes)。仅从机器上的源读取:`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序。Claude Code 在 HKCU 和服务器托管设置中忽略它。6099* **Scope**: [`Managed`](#scopes)。仅从机器上的源读取:`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序。Claude Code 在 HKCU 和服务器托管设置中忽略它。

6022* **Type**: string,包括方案的完整 URL6100* **Type**: string,包含协议方案的完整 URL

6023* **Default**: 未设置,因此 Cloud gateway 屏幕显示错误,告诉人们联系其 IT 管理员6101* **Default**: 未设置,因此 Cloud gateway 屏幕显示错误,告诉人们联系其 IT 管理员

6024 6102 

6025```json managed-settings.json theme={null}6103```json managed-settings.json theme={null}


6028}6106}

6029```6107```

6030 6108 

6031如果该值不是有效的 URL,登录屏幕会报告它,托管设置文件的其余部分仍然适用。请参阅[设置网关 URL](/docs/zh-CN/claude-apps-gateway#set-the-gateway-url)。6109如果该值不是有效的 URL,登录屏幕会报告该问题,托管设置文件的其余部分仍然适用。请参阅[设置网关 URL](/docs/zh-CN/claude-apps-gateway#set-the-gateway-url)。

6032 6110 

6033<h3 id="forceloginorguuid">6111<h3 id="forceloginorguuid">

6034 `forceLoginOrgUUID`6112 `forceLoginOrgUUID`

6035</h3>6113</h3>

6036 6114 

6037从托管源,要求 claude.ai 帐户登录属于一个 Anthropic 组织(给定为单个 UUID)或属于多个组织(给定为数组)。从任何设置文件,Claude Code 也使用单个 UUID 在 claude.ai 或 Claude Console 登录期间预选择该组织,对于数组预选择任何内容。如果您在任何设置文件中设置该密钥,Claude Code 也会停止在该文件适用的会话中提供[无密钥 Console 登录](/docs/zh-CN/authentication#sign-in-without-an-api-key),并改为创建 API 密钥。6115在托管源中,要求 claude.ai 帐户登录属于某一个 Anthropic 组织(以单个 UUID 给出),或属于多个组织中的任意一个(以数组给出)。在任何设置文件中,Claude Code 还会使用单个 UUID 在 claude.ai 或 Claude Console 登录期间预先选择该组织,而对于数组则不预选任何组织。如果您在任何设置文件中设置此设置项,Claude Code 也会在该文件适用的会话中停止提供[无密钥 Console 登录](/docs/zh-CN/authentication#sign-in-without-an-api-key),并改为创建 API 密钥。

6038 6116 

6039* **Scope**: [`Any file`](#scopes)。仅托管源强制执行限制;任何其他设置文件中的单个 UUID 在登录期间预选择组织而不限制它。6117* **Scope**: [`Any file`](#scopes)。仅托管源会强制执行限制;任何其他设置文件中的单个 UUID 只会在登录期间预先选择组织,而不会限制它。

6040* **Type**: string,一个 UUID,或字符串数组,多个 UUID6118* **Type**: string,一个 UUID,或字符串数组,多个 UUID

6041* **Default**: 未设置,因此任何组织都可以登录6119* **Default**: 未设置,因此任何组织都可以登录

6042 6120 

6043此示例接受来自两个组织之一的登录,而不预选择一个:6121此示例接受来自两个组织中任意一个的登录,而不预先选择其中之一:

6044 6122 

6045```json managed-settings.json theme={null}6123```json managed-settings.json theme={null}

6046{6124{


6048}6126}

6049```6127```

6050 6128 

6051如果托管源设置空数组或 Claude Code 无法解析的值,Claude Code 会使用错误配置消息阻止每个登录。6129如果托管源设置了空数组或 Claude Code 无法解析的值,Claude Code 会以配置错误消息阻止所有登录。

6052 6130 

6053请参阅[限制登录到您的组织](/docs/zh-CN/authentication#restrict-login-to-your-organization),了解 Claude Code 如何处理 Claude Console 登录、其他登录路径和环境凭证。6131请参阅[限制登录到您的组织](/docs/zh-CN/authentication#restrict-login-to-your-organization),了解 Claude Code 如何处理 Claude Console 登录、其他登录路径和环境凭据。

6054 6132 

6055<h3 id="gatewayinternalnetworks">6133<h3 id="gatewayinternalnetworks">

6056 `gatewayInternalNetworks`6134 `gatewayInternalNetworks`

6057</h3>6135</h3>

6058 6136 

6059声明您的组织从其内部网络编号的公共 IPv4 块,以便 `/login` 在那里接受 [cloud gateway](/docs/zh-CN/claude-apps-gateway)。需要 Claude Code v2.1.268 或更高版本。6137声明您的组织用于为其内部网络编址的公共 IPv4 地址块,以便 `/login` 接受位于其中的 [cloud gateway](/docs/zh-CN/claude-apps-gateway)。需要 Claude Code v2.1.268 或更高版本。

6060 6138 

6061没有此密钥,`/login` 连接到私有地址上的任何网关,仅此而已。有了它,`/login` 也接受列出的块内的网关,仅通过直接连接。该机器在该连接上的自身地址也必须在同一块内。6139未设置此设置项时,`/login` 只会连接到私有地址上的网关。设置后,`/login` 还会接受位于所列地址块内的网关,但仅限直接连接。该机器在该连接上的自身地址也必须位于同一地址块内。

6062 6140 

6063* **Scope**: [`Managed`](#scopes)。仅从机器上的源读取:`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序。Claude Code 在 HKCU 和服务器托管设置中忽略它。6141* **Scope**: [`Managed`](#scopes)。仅从机器上的源读取:`managed-settings.json`、macOS plist 或 Windows HKLM 注册表或策略辅助程序。Claude Code 在 HKCU 和服务器托管设置中忽略它。

6064* **Type**: 字符串数组,最多四个 IPv4 CIDR 块,每个 `/8` 到 `/32`,彼此不重叠,且都不与私有空间重叠。6142* **Type**: 字符串数组,最多四个 IPv4 CIDR 块,每个为 `/8` 到 `/32`,彼此不重叠,且都不与私有地址空间重叠。

6065* **Default**: 未设置,因此 `/login` 仅接受私有地址上的网关6143* **Default**: 未设置,因此 `/login` 仅接受私有地址上的网关

6066 6144 

6067```json managed-settings.json theme={null}6145```json managed-settings.json theme={null}


6070}6148}

6071```6149```

6072 6150 

6073将示例中的文档范围替换为您自己的块。Claude Code 拒绝文档范围、VPN 和 NAT64 客户端在本地使用的范围,以及保留空间(没有网络从其编号),例如多播。6151请将示例中的文档专用地址范围替换为您自己的地址块。Claude Code 会拒绝文档专用地址范围、VPN 和 NAT64 客户端在本地使用的地址范围,以及不用于任何网络编址的保留地址空间,例如多播。

6074 6152 

6075如果条目无效或值不是字符串列表,`/login` 会命名问题,并拒绝机器上的每个新网关登录,直到您修复该值。现有登录继续工作。请参阅[允许网关在您拥有的公共地址空间上](/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own),了解完整规则和开发人员看到的内容。6153如果某个条目无效,或该值不是字符串列表,`/login` 会指明问题,并拒绝该机器上的所有新网关登录,直到您修复该值。现有登录继续有效。请参阅[允许网关在您拥有的公共地址空间上](/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own),了解完整规则以及开发人员看到的内容。

6076 6154 

6077<h3 id="gcpauthrefresh">6155<h3 id="gcpauthrefresh">

6078 `gcpAuthRefresh`6156 `gcpAuthRefresh`

6079</h3>6157</h3>

6080 6158 

6081运行您自己的命令以在 Claude Code 发现 Google Cloud Application Default Credentials 已过期或无法加载时刷新它们,以便 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai) 请求继续工作,而无需您手动重新身份验证。6159运行您自己的命令,以在 Claude Code 发现 Google Cloud Application Default Credentials 已过期或无法加载时刷新它们,以便 [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 请求继续正常工作,而无需您手动重新进行身份验证。

6160 

6161当多个使用相同命令和凭据的 Claude Code 进程(例如不同的终端或 IDE 窗口)同时发现凭据已过期时,由一个进程运行该命令,其余进程等待该次运行,而不是各自启动运行。在有待处理请求的情况下已等待 60 秒的进程会自行运行该命令。要关闭此行为,请将 [`CLAUDE_CODE_DISABLE_AUTH_REFRESH_LOCK`](/docs/zh-CN/env-vars) 设置为 `1`。

6082 6162 

6083* **Scope**: [`Any file`](#scopes)6163* **Scope**: [`Any file`](#scopes)

6084* **Type**: string,shell 命令行6164* **Type**: string,shell 命令行

6085* **Default**: 未设置,因此 Claude Code 的凭证错误告诉您自己运行 `gcloud auth application-default login`6165* **Default**: 未设置,因此 Claude Code 的凭据错误会提示您自行运行 `gcloud auth application-default login`

6086 6166 

6087```json settings.json theme={null}6167```json settings.json theme={null}

6088{6168{


6090}6170}

6091```6171```

6092 6172 

6093请参阅[高级凭证配置](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration)。6173请参阅[高级凭据配置](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration)。

6094 6174 

6095<h3 id="otelheadershelper">6175<h3 id="otelheadershelper">

6096 `otelHeadersHelper`6176 `otelHeadersHelper`

6097</h3>6177</h3>

6098 6178 

6099运行您自己的命令以生成 Claude Code 随 OpenTelemetry 导出发送的标头,用于令牌轮换的后端。Claude Code 在启动时运行它,之后定期运行,并期望在 stdout 上获得字符串标头值的 JSON 对象。6179运行您自己的命令以生成 Claude Code 随 OpenTelemetry 导出发送的标头,适用于令牌会轮换的后端。Claude Code 在启动时运行它,之后定期运行,并期望在 stdout 上获得由字符串标头值组成的 JSON 对象。

6100 6180 

6101* **Scope**: [`Any file`](#scopes)6181* **Scope**: [`Any file`](#scopes)

6102* **Type**: string,可执行路径或 shell 命令行6182* **Type**: string,可执行文件路径或 shell 命令行

6103* **Default**: 未设置,因此 Claude Code 不添加辅助程序生成的标头6183* **Default**: 未设置,因此 Claude Code 不添加辅助程序生成的标头

6104 6184 

6105```json settings.json theme={null}6185```json settings.json theme={null}


6108}6188}

6109```6189```

6110 6190 

6111使用 [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/docs/zh-CN/env-vars) 设置刷新间隔。请参阅[动态标头](/docs/zh-CN/monitoring-usage#dynamic-headers),了解脚本要求以及 Claude Code 报告失败辅助程序的位置。6191使用 [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/docs/zh-CN/env-vars) 设置刷新间隔。请参阅[动态标头](/docs/zh-CN/monitoring-usage#dynamic-headers),了解脚本要求以及辅助程序失败时会发生什么。

6112 6192 

6113<h2 id="updates-and-versioning">6193<h2 id="updates-and-versioning">

6114 更新和版本控制6194 更新和版本控制


6689 `claudeInChromeDefaultEnabled`6769 `claudeInChromeDefaultEnabled`

6690</h3>6770</h3>

6691 6771 

6692启动每个交互式 CLI 会话时,[Chrome 集成](/docs/zh-CN/chrome)默认打开,无需每次都传递 `--chrome`。如果你运行 [`claude remote-control`](/docs/zh-CN/remote-control),它为你的某个[项目](/docs/zh-CN/claude-projects)线程启动的会话也遵循此键,除非在 `bypassPermissions` 模式下。运行 `/chrome` 并选择**默认启用**会为你设置此键,如[启用 Chrome 默认设置](/docs/zh-CN/chrome#enable-chrome-by-default)中所述。在 `/config` 中显示为**默认启用 Chrome 中的 Claude**。6772启动每个交互式 CLI 会话时默认打开 [Chrome 集成](/docs/zh-CN/chrome),无需每次都传递 `--chrome`。如果您运行 [`claude remote-control`](/docs/zh-CN/remote-control),它为您的某个[项目](/docs/zh-CN/claude-projects)线程启动的会话也遵循此键,但 `bypassPermissions` 模式除外。在 Claude Code v2.1.287 或更高版本中,此键也适用于 [VS Code 扩展](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)中的会话:请参阅[默认启用 Chrome](/docs/zh-CN/chrome#enable-chrome-by-default)。

6773 

6774运行 `/chrome` 并选择**默认启用**会为您设置此键。在 `/config` 中显示为**默认启用 Chrome 中的 Claude**。

6693 6775 

6694* **作用域**: [`全局配置`](#scopes)6776* **作用域**: [`全局配置`](#scopes)

6695* **类型**: 布尔值6777* **类型**: 布尔值

6696 * `true`: 当交互式 CLI 会话启动时,Claude Code 打开 Chrome 集成,就像你传递 `--chrome` 时一样6778 * `true`: 当交互式 CLI 会话启动时,Claude Code 打开 Chrome 集成,就像传递 `--chrome` 时一样。在 VS Code 扩展中,会话在启动时连接到浏览器

6697 * `false`: 交互式 CLI 会话启动时 Chrome 集成关闭,Claude Code 停止[提供设置它](/docs/zh-CN/chrome#install-the-extension-when-claude-asks)。传递 `--chrome` 为一个交互式会话打开它6779 * `false`: 交互式 CLI 会话启动时 Chrome 集成关闭,Claude Code 不再[提议进行设置](/docs/zh-CN/chrome#install-the-extension-when-claude-asks)。传递 `--chrome` 可为单个交互式会话打开它。在 VS Code 扩展中,会话在您输入 `@browser` 时连接,与未设置此键时相同

6698* **默认值**: 未设置,因此 Chrome 集成关闭,Claude Code 仍然可以提供设置它6780* **默认值**: 未设置,因此 Chrome 集成关闭,Claude Code 仍然可以提供设置它

6699* **每个会话的覆盖**: `--chrome` 和 [`--no-chrome`](/docs/zh-CN/cli-reference) 在一个交互式会话中优先于此键6781* **每个会话的覆盖**: `--chrome` 和 [`--no-chrome`](/docs/zh-CN/cli-reference) 在一个交互式会话中优先于此键

6700 6782 

setup.md +18 −3

Details

123 123 

124**选项 1:原生 Windows**124**选项 1:原生 Windows**

125 125 

126从 PowerShell 或 CMD 运行安装命令。您无需以管理员身份运行。安装 [Git for Windows](https://git-scm.com/downloads/win) 是可选的。它通过提供 Git Bash 来启用 [Bash 工具](/docs/zh-CN/tools-reference#bash-tool-behavior)。126从 PowerShell 或 CMD 运行安装命令。您无需以管理员身份运行。安装 [Git for Windows](https://git-scm.com/downloads/win) 是可选的。它提供 Git Bash,[Bash 工具](/docs/zh-CN/tools-reference#bash-tool-behavior)和 [Monitor 工具](/docs/zh-CN/tools-reference#monitor-tool)需要用到它。

127 127 

128无论您从 PowerShell 还是 CMD 安装,只会影响您运行的安装命令。您的提示在 PowerShell 中显示为 `PS C:\Users\YourName>`,在 CMD 中显示为 `C:\Users\YourName>`(不带 `PS`)。如果您是终端新手,[终端指南](/docs/zh-CN/terminal-guide#windows)会逐步讲解每个步骤。128无论您从 PowerShell 还是 CMD 安装,只会影响您运行的安装命令。您的提示在 PowerShell 中显示为 `PS C:\Users\YourName>`,在 CMD 中显示为 `C:\Users\YourName>`(不带 `PS`)。如果您是终端新手,[终端指南](/docs/zh-CN/terminal-guide#windows)会逐步讲解每个步骤。

129 129 


316 高级安装选项316 高级安装选项

317</h2>317</h2>

318 318 

319这些选项用于版本固定、Linux 包管理器、npm 和验证二进制完整性。319这些选项用于版本固定、Linux 包管理器、npm、网络存储和验证二进制完整性。

320 320 

321<h3 id="install-a-specific-version">321<h3 id="install-a-specific-version">

322 安装特定版本322 安装特定版本


496 使用 npm 安装496 使用 npm 安装

497</h3>497</h3>

498 498 

499您也可以将 Claude Code 安装为全局 npm 包。从 v2.1.198 开始,npm 包需要 [Node.js 22 或更高版本](https://nodejs.org/en/download)。在较旧的 Node.js 版本上,npm 在安装期间打印 `EBADENGINE` 警告而不是失败;安装完成,`claude` 仍然运行,因为该包下载了在运行时不使用您的 Node.js 的原生二进制文件。499您也可以将 Claude Code 安装为全局 npm 包。npm 包需要 [Node.js 22 或更高版本](https://nodejs.org/en/download)。在较旧的 Node.js 版本上,npm 在安装期间打印 `EBADENGINE` 警告而不是失败;安装完成,`claude` 仍然运行,因为该包下载了在运行时不使用您的 Node.js 的原生二进制文件。

500 500 

501```bash theme={null}501```bash theme={null}

502npm install -g @anthropic-ai/claude-code502npm install -g @anthropic-ai/claude-code


512 不要使用 `sudo npm install -g`,因为这可能导致权限问题和安全风险。如果遇到权限错误,请参阅[故障排除权限错误](/docs/zh-CN/troubleshoot-install#permission-errors-during-installation)。512 不要使用 `sudo npm install -g`,因为这可能导致权限问题和安全风险。如果遇到权限错误,请参阅[故障排除权限错误](/docs/zh-CN/troubleshoot-install#permission-errors-during-installation)。

513</Warning>513</Warning>

514 514 

515<h3 id="install-on-network-storage">

516 在网络存储上安装

517</h3>

518 

519正在运行的会话在工作过程中会从磁盘读取 Claude Code 可执行文件的部分内容,而不仅仅是在启动时读取。如果该文件在会话中途变得不可读,例如因为它在网络存储上被截断或删除,会话就会崩溃。在 Linux 上,您的 shell 会将此报告为 `Bus error`。

520 

521当主目录位于网络存储上时(例如挂载在多台机器上的 NFS 主目录),请合理规划安装布局,使每个会话的可执行文件在会话结束前始终保持可读:

522 

523* **安装在本地磁盘上**:将二进制文件放在每台机器的本地文件系统上,例如使用 [Linux 包管理器](#install-with-linux-package-managers)或您自己的部署工具。按用户设置的 npm 前缀和原生安装程序的默认 `~/.local/share/claude/versions/` 目录都位于主目录中。

524* **将每个版本保存在各自的目录中**:使用 `npm install -g` 原地升级 npm 安装会删除之前的二进制文件。在多台机器共享的存储上,这会删除其他机器上的会话仍在运行的文件。请将每个新版本安装在旧版本旁边,然后将用户迁移到新版本。

525* **仅在没有任何机器可能仍在运行旧版本时才删除它**:一台机器无法看到其他机器上运行的进程,因此在删除之前检查正在运行的进程是不够的。

526* **关闭 Claude Code 自身的更新**:设置 [`DISABLE_UPDATES`](/docs/zh-CN/env-vars),并使用您自己的工具安装新版本。否则,一台机器上 npm 安装的自动更新会执行相同的原地升级,从而删除其他机器上的会话正在运行的二进制文件。仅设置 `DISABLE_AUTOUPDATER` 是不够的,因为用户仍然可以运行 `claude update` 和 `claude install`。请参阅[禁用自动更新](#disable-auto-updates)。

527 

528原生安装程序会自行从 `~/.local/share/claude/versions/` 中删除旧版本,当该目录位于共享存储上时,这一点尤为重要。除了启动器指向的版本以及同一台机器上的会话正在运行的任何版本之外,它会保留最新的两个版本并删除其余版本。另一台机器上正在运行已删除版本的会话将失去其二进制文件。使用[自定义启动器](#auto-updates)时,Claude Code 会保留所有已安装的版本,并由您自行负责清理。

529 

515<h3 id="binary-integrity-and-code-signing">530<h3 id="binary-integrity-and-code-signing">

516 二进制完整性和代码签名531 二进制完整性和代码签名

517</h3>532</h3>

skills.md +121 −103

Details

56 56 

57Claude 仅在它引导运行出错时编辑记录的文件,例如失败的命令或缺少的步骤,因此您可以提交文件而无需每个会话的差异。在 v2.1.205 之前,捆绑技能告诉 Claude 折叠运行学到的任何内容,这导致频繁的合并冲突。57Claude 仅在它引导运行出错时编辑记录的文件,例如失败的命令或缺少的步骤,因此您可以提交文件而无需每个会话的差异。在 v2.1.205 之前,捆绑技能告诉 Claude 折叠运行学到的任何内容,这导致频繁的合并冲突。

58 58 

59<h3 id="run-your-checks-before-each-commit">

60 在每次提交前运行检查

61</h3>

62 

63当会话启动时已存在名为 `verify` 或 `simplify` 的 skill,Claude Code 的提交指令会告诉 Claude 在每次提交之前运行它,但对文档或测试的更改除外。这需要 Claude Code v2.1.286 或更高版本。当会话开始时满足以下条件,Claude 会收到该指令:

64 

65* **位置**:该 skill 从企业、个人、项目或附加目录[位置](#where-skills-live)加载,或来自具有该名称的 `.claude/commands/` 文件。`/verify` 在您的存储库根目录记录的配方是项目 skill,因此也算在内。随附的 `/verify` 和 `/simplify`、插件 skill 以及来自您 claude.ai 账户的 skill 不算在内。

66* **调用**:Claude 可以调用该 skill。如果您已[阻止 Claude 调用它](#control-who-invokes-a-skill),例如使用 `disable-model-invocation: true`,Claude 不会收到该指令。

67* **Git 指令**:您没有关闭 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions)。关闭它会将此指令与其余内置提交和 PR 指令一起移除。

68 

59<h3 id="work-on-claude-api-projects">69<h3 id="work-on-claude-api-projects">

60 处理 Claude API 项目70 处理 Claude API 项目

61</h3>71</h3>


290 300 

291Claude Code 对同步 skill 的 frontmatter 应用两条规则:301Claude Code 对同步 skill 的 frontmatter 应用两条规则:

292 302 

293* Claude Code 在每种会话中都遵守 frontmatter,因此 `allowed-tools` 授予通过正常 [权限流](/docs/zh-CN/permissions) 进行。303* frontmatter 在每种会话中都适用,因此 `allowed-tools` 授予通过正常 [权限流](/docs/zh-CN/permissions) 进行。如果您的组织设置了 `allowManagedPermissionRulesOnly`,该授予 [不适用](#when-only-managed-permission-rules-apply)。

294* Claude Code 清理 skill 提供的显示文本,例如其描述。它删除控制字符,在到达 Claude 的文本(例如描述)中,它还转义尖括号,以便文本无法模仿 Claude Code 的内部格式。此清理需要 Claude Code v2.1.228 或更高版本。304* Claude Code 清理 skill 提供的显示文本,例如其描述。它删除控制字符,在到达 Claude 的文本(例如描述)中,它还转义尖括号,以便文本无法模仿 Claude Code 的内部格式。此清理需要 Claude Code v2.1.228 或更高版本。

295 305 

296<h4 id="how-claude-code-handles-the-body-of-a-synced-skill">306<h4 id="how-claude-code-handles-the-body-of-a-synced-skill">


328要保留 personal 或 project skill 但阻止 Claude 自动调用它,请在其 frontmatter 中设置 [`disable-model-invocation: true`](#control-who-invokes-a-skill),或在不想编辑文件时在 [`skillOverrides`](#override-skill-visibility-from-settings) 中设置 `"user-invocable-only"`。338要保留 personal 或 project skill 但阻止 Claude 自动调用它,请在其 frontmatter 中设置 [`disable-model-invocation: true`](#control-who-invokes-a-skill),或在不想编辑文件时在 [`skillOverrides`](#override-skill-visibility-from-settings) 中设置 `"user-invocable-only"`。

329 339 

330<h2 id="configure-skills">340<h2 id="configure-skills">

331 配置 skills341 配置 skill

332</h2>342</h2>

333 343 

334Skills 通过位于 `SKILL.md` 顶部的 YAML frontmatter 和随后的 markdown 内容进行配置。344skill 通过 `SKILL.md` 顶部的 YAML frontmatter 及其后的 markdown 内容进行配置。

335 345 

336<h3 id="types-of-skill-content">346<h3 id="types-of-skill-content">

337 Skill 内容的类型347 skill 内容的类型

338</h3>348</h3>

339 349 

340Skill 文件可以包含任何说明,但思考你想如何调用它们有助于指导应该包含什么内容:350skill 文件可以包含任何指令,但思考您希望如何调用它们有助于确定应包含哪些内容:

341 351 

342**参考内容**添加 Claude 应用于你当前工作的知识。约定、模式、风格指南、领域知识。此内容以内联方式运行,以便 Claude 可以将其与你的对话上下文一起使用。352**参考内容**为 Claude 添加可应用于当前工作的知识,例如约定、模式、风格指南、领域知识。此类内容以内联方式运行,因此 Claude 可以将其与对话上下文结合使用。

343 353 

344```yaml theme={null}354```yaml theme={null}

345---355---


353- Include request validation363- Include request validation

354```364```

355 365 

356**任务内容**为 Claude 提供特定操作的分步说明,如部署、提交或代码生成。这些通常是你想直接使用 `/skill-name` 调用的操作,而不是让 Claude 决定何时运行它们。添加 `disable-model-invocation: true` 以防止 Claude 自动触发它。下面的示例添加了 `context: fork`,它在自己的子代理上下文中运行 skill;请参阅[在子代理中运行 skills](#run-skills-in-a-subagent)。366**任务内容**为 Claude 提供执行特定操作的分步指令,例如部署、提交或代码生成。这些通常是您希望通过 `/skill-name` 直接调用的操作,而不是让 Claude 决定何时运行。添加 `disable-model-invocation: true` 可防止 Claude 自动触发它。下面的示例添加了 `context: fork`,它会在 skill 自己的子代理上下文中运行该 skill;请参阅[在子代理中运行 skill](#run-skills-in-a-subagent)。

357 367 

358```yaml theme={null}368```yaml theme={null}

359---369---


3693. Push to the deployment target3793. Push to the deployment target

370```380```

371 381 

372保持正文本身简洁。一旦 skill 加载,其内容[在多个回合中保持在上下文中](#skill-content-lifecycle),所以每一行都是一个重复的令牌成本。说明要做什么,而不是叙述如何或为什么做,并应用与[CLAUDE.md 内容](/docs/zh-CN/best-practices#write-an-effective-claude-md)相同的简洁性测试。382请保持正文本身简洁。skill 加载后,其内容会[在各轮次之间保留在上下文中](#skill-content-lifecycle),因此每一行都是重复的 token 开销。说明要做什么,而不是叙述如何做或为什么做,并采用与 [CLAUDE.md 内容](/docs/zh-CN/best-practices#write-an-effective-claude-md)相同的简洁性标准。

373 383 

374<h3 id="frontmatter-reference">384<h3 id="frontmatter-reference">

375 Frontmatter 参考385 Frontmatter 参考

376</h3>386</h3>

377 387 

378使用位于 `SKILL.md` 文件顶部 `---` 标记之间的 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 配置 skill,并在关闭 `---` 后将 skill 的说明写成 Markdown。字段名称使用由连字符分隔的小写单词,除了 `when_to_use`。`.claude/commands/` 中的[命令文件](#where-skills-live)接受相同的字段,除了 `name` 和 `paths`。此示例设置四个字段:388在 `SKILL.md` 顶部的 `---` 标记之间使用 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 配置 skill,并在结束的 `---` 之后以 Markdown 编写 skill 的指令。字段名使用以连字符分隔的小写单词,`when_to_use` 除外。`.claude/commands/` 中的[命令文件](#where-skills-live)接受相同的字段,但 `name` 和 `paths` 除外。此示例设置了四个字段:

379 389 

380```yaml theme={null}390```yaml theme={null}

381---391---


388Your skill instructions here...398Your skill instructions here...

389```399```

390 400 

391所有字段都是可选的。只有 `description` 是推荐的,以便 Claude 知道何时使用该 skill。字段名称必须与表格完全匹配,包括连字符:Claude Code 会忽略它不识别的字段而不报告错误。401所有字段都是可选的。仅建议设置 `description`,以便 Claude 知道何时使用该 skill。字段名必须与表格完全一致,包括连字符:Claude Code 会忽略无法识别的字段,且不会报告错误。

392 402 

393Claude Code 仅在开始 `---` 是文件的第一行时读取 frontmatter。否则,它将整个文件(包括 `---` 标记)视为 skill 内容。如果标记之间的 YAML 无法解析,skill 仍然加载但没有设置字段;请参阅[Skill 未触发](#skill-not-triggering)以查找并修复错误。403仅当开头的 `---` 位于文件第一行时,Claude Code 才会读取 frontmatter。否则,它会将整个文件(包括 `---` 标记)视为 skill 内容。如果标记之间的 YAML 无法解析,skill 仍会加载,但不会设置任何字段;请参阅 [Skill 未触发](#skill-not-triggering)以查找并修复错误。

394 404 

395布尔字段接受 `yes`、`no`、`on`、`off`、`1` 和 `0`(任何字母大小写),以及 `true` 和 `false`。在 v2.1.218 之前,Claude Code 仅识别 `true` 和 `false`。405除 `true` 和 `false` 外,布尔字段还接受任意大小写的 `yes`、`no`、`on`、`off`、`1` 和 `0`。在 v2.1.218 之前,Claude Code 仅识别 `true` 和 `false`。

396 406 

397| 字段 | 必需 | 描述 |407| 字段 | 必需 | 描述 |

398| :- | :- | :- |408| :- | :- | :- |

399| `name` | 否 | 在 `/` 菜单中显示的命令名称。默认为目录名称。请参阅[skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)以了解该字段如何与你键入以调用 skill 的名称交互。 |409| `name` | 否 | 在 `/` 菜单中显示的命令名称。默认为目录名称。有关该字段如何与您为调用 skill 而输入的名称交互,请参阅 [skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。 |

400| `description` | 推荐 | skill 的功能以及何时使用它。Claude 使用此信息来决定何时应用该 skill。如果省略,则使用 markdown 内容的第一个非空行。首先放置关键用例:组合的 `description` 和 `when_to_use` 文本在 skill 列表中被截断为 1,536 个字符以减少上下文使用。 |410| `description` | 建议 | skill 的功能以及何时使用它。Claude 据此决定何时应用该 skill。如果省略,则使用 markdown 内容的第一个非空行。请将关键用例放在最前面:为减少上下文占用,`description` 和 `when_to_use` 的合并文本在 skill 列表中会被截断为 1,536 个字符。 |

401| `when_to_use` | 否 | 关于 Claude 何时应调用该 skill 的其他上下文,例如触发短语或示例请求。附加到 skill 列表中的 `description`,并计入 1,536 字符的上限。 |411| `when_to_use` | 否 | 关于 Claude 何时应调用该 skill 的附加上下文,例如触发短语或示例请求。在 skill 列表中附加到 `description` 之后,并计入 1,536 个字符的上限。 |

402| `argument-hint` | 否 | 在自动完成期间显示的提示,以指示预期的参数。示例:`[issue-number]` 或 `[filename] [format]`。 |412| `argument-hint` | 否 | 自动补全期间显示的提示,用于指示预期的参数。示例:`[issue-number]` 或 `[filename] [format]`。 |

403| `arguments` | 否 | 用于 skill 内容中[`$name` 替换](#available-string-substitutions)的命名位置参数。接受以空格分隔的字符串或 YAML 列表。名称按顺序映射到参数位置。 |413| `arguments` | 否 | 用于 skill 内容中 [`$name` 替换](#available-string-substitutions)的命名位置参数。接受以空格分隔的字符串或 YAML 列表。名称按顺序映射到参数位置。 |

404| `disable-model-invocation` | 否 | 设置为 `true` 以防止 Claude 自动加载此 skill。用于你想使用 `/name` 手动触发的工作流。还防止 skill 被[预加载到子代理中](/docs/zh-CN/sub-agents#preload-skills-into-subagents)。从 v2.1.196 开始,还防止 skill 在[计划任务](/docs/zh-CN/scheduled-tasks)以该 skill 作为其提示触发时运行。默认值:`false`。 |414| `disable-model-invocation` | 否 | 设置为 `true` 可防止 Claude 自动加载此 skill。适用于您希望通过 `/name` 手动触发的工作流。还会阻止该 skill [预加载到子代理中](/docs/zh-CN/sub-agents#preload-skills-into-subagents)。从 v2.1.196 起,当以该 skill 作为提示词的[定时任务](/docs/zh-CN/scheduled-tasks)触发时,也会阻止该 skill 运行。默认值:`false`。 |

405| `user-invocable` | 否 | 当仅 Claude 应调用该 skill 时设置为 `false`:Claude Code 将其从 `/` 菜单中隐藏,并且当你键入 `/name` 时不运行它。用于用户不应直接调用的背景知识。默认值:`true`。 |415| `user-invocable` | 否 | 当只有 Claude 应调用该 skill 时设置为 `false`:Claude Code 会将其从 `/` 菜单中隐藏,并且在您输入 `/name` 时不会运行它。适用于用户不应直接调用的背景知识。默认值:`true`。 |

406| `allowed-tools` | 否 | Claude 在调用此 skill 的回合中可以使用而无需请求许可的工具。当你发送下一条消息时,授权将被清除。接受以空格或逗号分隔的字符串或 YAML 列表。请参阅[为 skill 预先批准工具](#pre-approve-tools-for-a-skill)。 |416| `allowed-tools` | 否 | 在调用此 skill 的轮次中,Claude 无需请求权限即可使用的工具。当您发送下一条消息时,该授予即被清除。接受以空格或逗号分隔的字符串,或 YAML 列表。请参阅[为 skill 预先批准工具](#pre-approve-tools-for-a-skill)。 |

407| `disallowed-tools` | 否 | 此 skill 处于活动状态时从 Claude 的可用工具池中删除的工具。用于不应调用某些工具的自主 skills,例如用于后台循环的 `AskUserQuestion`。接受以空格或逗号分隔的字符串或 YAML 列表。当你发送下一条消息时,限制将被清除。与拒绝规则一样,该字段在任何其他工具保持时无法删除[`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior)。 |417| `disallowed-tools` | 否 | 在此 skill 处于活动状态时,从 Claude 可用工具池中移除的工具。适用于永远不应调用某些工具的自主 skill,例如对后台循环禁用 `AskUserQuestion`。接受以空格或逗号分隔的字符串,或 YAML 列表。当您发送下一条消息时,该限制即被清除。与拒绝规则一样,只要还有其他工具存在,该字段就无法移除 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior)。 |

408| `model` | 否 | 此 skill 处于活动状态时要使用的模型。覆盖适用于当前回合的其余部分,不会保存到设置。当你发送下一个提示时,会话模型恢复。接受与[`/model`](/docs/zh-CN/model-config)相同的值,或 `inherit` 以保持活动模型。你的组织的[`availableModels`](/docs/zh-CN/model-config#restrict-model-selection)允许列表排除的值不会被使用,会话保持其当前模型。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中,以及在[计划模式中,当分类器审查命令时](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode),自动模式不支持的模型也不会被使用,会话保持其当前模型。使用 `context: fork` 时,该值设置[分叉子代理的模型](#run-skills-in-a-subagent),而被排除的值遵循[与子代理模型覆盖相同的规则](/docs/zh-CN/model-config#restrict-model-selection)。 |418| `model` | 否 | 此 skill 处于活动状态时使用的模型。该覆盖适用于当前轮次的剩余部分,且不会保存到设置中。当您发送下一个提示词时,会话模型即恢复。接受与 [`/model`](/docs/zh-CN/model-config) 相同的值,或使用 `inherit` 保留当前活动的模型。被组织的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表排除的值不会被使用,会话将保留其当前模型。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,以及在[分类器审查命令时的计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,自动模式不支持的模型同样不会被使用,会话将保留其当前模型。使用 `context: fork` 时,该值改为设置[分叉子代理的模型](#run-skills-in-a-subagent),被排除的值遵循[与子代理模型覆盖相同的规则](/docs/zh-CN/model-config#restrict-model-selection)。 |

409| `effort` | 否 | 此 skill 处于活动状态时的[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)。覆盖会话工作量级别。默认值:从会话继承。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。 |419| `effort` | 否 | 此 skill 处于活动状态时的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。覆盖会话的 effort 级别。默认值:继承自会话。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。 |

410| `context` | 否 | 设置为 `fork` 以在分叉子代理上下文中运行。请参阅[在子代理中运行 skills](#run-skills-in-a-subagent)。 |420| `context` | 否 | 设置为 `fork` 可在分叉的子代理上下文中运行。请参阅[在子代理中运行 skill](#run-skills-in-a-subagent)。 |

411| `agent` | 否 | 设置 `context: fork` 时要使用的子代理类型。 |421| `agent` | 否 | 设置 `context: fork` 时使用的子代理类型。 |

412| `background` | 否 | 仅适用于 `context: fork`。设置为 `false` 以在调用 skill 的回合中等待分叉子代理的结果,而不是[在后台运行它](#run-skills-in-a-subagent)。默认值:`true`。需要 Claude Code v2.1.218 或更高版本。 |422| `background` | 否 | 仅在使用 `context: fork` 时适用。设置为 `false` 可在调用该 skill 的轮次中等待分叉子代理的结果,而不是[在后台运行它](#run-skills-in-a-subagent)。默认值:`true`。需要 Claude Code v2.1.218 或更高版本。 |

413| `hooks` | 否 | Claude Code 在调用 skill 时注册并在会话的其余部分保持运行的 hooks。请参阅[skills 和代理中的 hooks](/docs/zh-CN/hooks#hooks-in-skills-and-agents)以了解配置格式和 `once` 选项。 |423| `hooks` | 否 | Claude Code 在调用该 skill 时注册并在会话剩余时间内持续运行的 hook。有关配置格式和 `once` 选项,请参阅 [skill 和 Agent 中的 hook](/docs/zh-CN/hooks#hooks-in-skills-and-agents)。 |

414| `paths` | 否 | 限制何时激活此 skill 的 Glob 模式。接受以逗号分隔的字符串或 YAML 列表。设置后,Claude 仅在处理与模式匹配的文件时自动加载该 skill。使用与[路径特定规则](/docs/zh-CN/memory#path-specific-rules)相同的格式。 |424| `paths` | 否 | 限制此 skill 何时激活的 Glob 模式。接受以逗号分隔的字符串或 YAML 列表。设置后,仅当处理与这些模式匹配的文件时,Claude 才会自动加载该 skill。使用与[特定路径规则](/docs/zh-CN/memory#path-specific-rules)相同的格式。 |

415| `shell` | 否 | 用于此 skill 中的 `` !`command` `` 和 ` ```! ` 块的 shell。接受 `bash`(默认)或 `powershell`。设置 `powershell` 在启用[PowerShell 工具](/zh-CN/tools-reference#powershell-tool)时通过 PowerShell 运行内联 shell 命令:在没有 Git Bash 的 Windows 上默认启用,在带有 Git Bash 的 claude.ai 和 Console 帐户上默认启用,在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 会话以及 macOS、Linux 和 WSL 上需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。设置为 `0` 以关闭工具。 |425| `shell` | 否 | 此 skill 中 `` !`command` `` 和 ` ```! ` 块使用的 shell。接受 `bash`(默认)或 `powershell`。当 [PowerShell 工具](/zh-CN/tools-reference#powershell-tool)启用时,设置 `powershell` 会通过 PowerShell 运行内联 shell 命令:在没有 Git Bash 的 Windows 上默认启用,对于 claude.ai 和 Console 账户在有 Git Bash 时默认启用,而在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 会话中以及在 macOS、Linux 和 WSL 上需要设置 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。将其设置为 `0` 可关闭该工具。 |

416| `metadata` | 否 | 用于你自己的键值数据的自由格式 YAML 映射,例如权利或目录字段,由你自己的工具从 `SKILL.md` 读取。Claude Code 不对其内容进行操作,并删除不是映射的值。不要重用 frontmatter 字段名称(如 `paths`)作为键。 |426| `metadata` | 否 | 用于存放您自己的键值数据的自由格式 YAML 映射,例如权益或目录字段,由您自己的工具从 `SKILL.md` 中读取。Claude Code 不会处理其内容,并会丢弃非映射类型的值。请勿将 `paths` 等 frontmatter 字段名用作键。 |

417| `license` | 否 | 涵盖该 skill 的许可证。[Agent Skills](https://agentskills.io) 规范的一部分;请参阅[在 Claude Code 外使用 skill frontmatter](#using-skill-frontmatter-outside-claude-code)。Claude Code 接受该字段但不对其进行操作。 |427| `license` | 否 | 适用于该 skill 的许可证。属于 [Agent Skills](https://agentskills.io) 规范的一部分;请参阅[在 Claude Code 之外使用 skill frontmatter](#using-skill-frontmatter-outside-claude-code)。Claude Code 接受该字段,但不会对其进行处理。 |

418| `compatibility` | 否 | skill 的环境要求,例如预期的产品或系统先决条件,如[Agent Skills](https://agentskills.io) 规范所定义;请参阅[在 Claude Code 外使用 skill frontmatter](#using-skill-frontmatter-outside-claude-code)。接受最多 500 个字符的字符串。Claude Code 接受该字段但不对其进行操作。 |428| `compatibility` | 否 | skill 的环境要求,例如目标产品或系统前提条件,由 [Agent Skills](https://agentskills.io) 规范定义;请参阅[在 Claude Code 之外使用 skill frontmatter](#using-skill-frontmatter-outside-claude-code)。接受最多 500 个字符的字符串。Claude Code 接受该字段,但不会对其进行处理。 |

419 429 

420<h4 id="using-skill-frontmatter-outside-claude-code">430<h4 id="using-skill-frontmatter-outside-claude-code">

421 在 Claude Code 外使用 skill frontmatter431 在 Claude Code 之外使用 skill frontmatter

422</h4>432</h4>

423 433 

424Claude Code 接受上表中的每个字段。在 Claude Code 外,你只能使用[Agent Skills](https://agentskills.io) 规范中的字段:434Claude Code 接受上表中的所有字段。在 Claude Code 之外,您只能使用 [Agent Skills](https://agentskills.io) 规范中的字段:

425 435 

426| 分发路径 | 你可以使用的 Frontmatter 字段 |436| 分发途径 | 可使用的 frontmatter 字段 |

427| :- | :- |437| :- | :- |

428| Claude Code skills 在[任何级别](#where-skills-live),包括[插件](/docs/zh-CN/plugins/overview) skills | 上表中的每个字段 |438| [任意级别](#where-skills-live)的 Claude Code skill,包括[插件](/docs/zh-CN/plugins/overview) skill | 上表中的所有字段 |

429| claude.ai skill 上传、Skills API 和使用来自 [anthropics/skills](https://github.com/anthropics/skills) 的 `package_skill.py` 打包 | `name`、`description`、`license`、`compatibility`、`metadata`、`allowed-tools` |439| claude.ai skill 上传、Skills API,以及使用 [anthropics/skills](https://github.com/anthropics/skills) 中的 `package_skill.py` 打包 | `name`、`description`、`license`、`compatibility`、`metadata`、`allowed-tools` |

430 440 

431当你为[Cowork 和云会话](#skills-in-cowork-and-cloud-sessions)启用个人 skill(包括例程)时,你将其上传到 claude.ai,因此适用相同的规则。441当您为 claude.ai 账户启用个人 skill 时(例如在 [Cowork 和云端会话](#skills-in-cowork-and-cloud-sessions)以及 Routine 中使用),您会将其上传到 claude.ai,因此适用相同的规则。

432 442 

433如果你包含规范不允许的任何字段,打包或上传将失败并出现硬错误,而不是忽略该字段:443如果您包含了规范不允许的任何字段,打包或上传将以硬错误失败,而不是忽略该字段:

434 444 

435```445```

436Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name446Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name

437```447```

438 448 

439将 frontmatter 限制为规范的六个字段可避免上述意外密钥错误。[Agent Skills 规范](https://agentskills.io)和[Skills API 要求](https://docs.claude.com/en/api/skills-guide)定义了这些路径验证的所有其他内容。Claude Code 特定的正文功能,例如[动态上下文注入](#inject-dynamic-context),在 claude.ai 聊天或通过 API 中不起作用。Claude Code 接受所有六个字段,因此遵循规范的 frontmatter 在 Claude Code 中加载时无需更改。449将 frontmatter 限制为规范中的六个字段可避免上述意外键错误。[Agent Skills 规范](https://agentskills.io)和 [Skills API 要求](https://docs.claude.com/en/api/skills-guide)定义了这些途径所验证的其他所有内容。仅限 Claude Code 的正文功能(例如[动态上下文注入](#inject-dynamic-context))在 claude.ai 聊天中或通过 API 无法发挥作用。Claude Code 接受全部六个字段,因此遵循规范的 frontmatter 无需修改即可在 Claude Code 中加载。

440 450 

441<h4 id="how-a-skill-gets-its-command-name">451<h4 id="how-a-skill-gets-its-command-name">

442 skill 如何获得其命令名称452 skill 如何获得其命令名称

443</h4>453</h4>

444 454 

445你键入以调用 skill 的命令来自 skill 文件的位置,对于 skill 目录和插件 skills,还来自 frontmatter `name` 字段。在个人或项目 skill 目录中,`name` 设置 `/` 菜单显示的命令以及你键入的命令,除非另一个命令已使用该名称。目录名称也调用该 skill。在插件 skill 中,`name` 设置命令的最后一段,插件前缀保持不变。455您为调用 skill 而输入的命令取决于 skill 文件所在的位置,对于 skill 目录和插件 skill,还取决于 frontmatter 的 `name` 字段。在个人或项目 skill 目录中,`name` 设置 `/` 菜单中显示且由您输入的命令,除非已有其他命令使用该名称。目录名称同样可以调用该 skill。在插件 skill 中,`name` 设置命令的最后一段,插件前缀保持不变。

446 456 

447下表显示了每个布局的命令名称来自何处:457下表显示了每种布局下命令名称的来源:

448 458 

449| Skill 位置 | 命令名称来源 | 示例 |459| Skill 位置 | 命令名称来源 | 示例 |

450| :- | :- | :- |460| :- | :- | :- |

451| `~/.claude/skills/` 或 `.claude/skills/` 下的 Skill 目录 | Frontmatter `name` 或目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging`,或使用 `name: deploy` 时为 `/deploy` |461| `~/.claude/skills/` 或 `.claude/skills/` 下的 skill 目录 | Frontmatter `name` 或目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging`,或使用 `name: deploy` 时为 `/deploy` |

452| [嵌套](#where-skills-live)`.claude/skills/` 目录,当目录名称与另一个 skill 冲突时 | 相对于工作目录的子目录路径,然后是 skill 目录名称 | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |462| [嵌套的](#where-skills-live) `.claude/skills/` 目录,当目录名称与其他 skill 冲突时 | 相对于工作目录的子目录路径,然后是 skill 目录名称 | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |

453| `.claude/commands/` 下的文件 | 文件名(不含扩展名) | `.claude/commands/deploy.md` → `/deploy` |463| `.claude/commands/` 下的文件 | 不含扩展名的文件名 | `.claude/commands/deploy.md` → `/deploy` |

454| `.claude/commands/` 的子目录中的文件 | 相对于 `commands/` 的子目录路径,每个 `/` 替换为 `:`,然后是不含扩展名的文件名 | `.claude/commands/frontend/component.md` → `/frontend:component` |464| `.claude/commands/` 子目录中的文件 | 相对于 `commands/` 的子目录路径(每个 `/` 替换为 `:`),然后是不含扩展名的文件名 | `.claude/commands/frontend/component.md` → `/frontend:component` |

455| 插件 `skills/` 子目录 | Frontmatter `name` 或目录名称,由插件命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review`,或使用 `name: fancy` 时为 `/my-plugin:fancy` |465| 插件 `skills/` 子目录 | Frontmatter `name` 或目录名称,以插件作为命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review`,或使用 `name: fancy` 时为 `/my-plugin:fancy` |

456| 插件根 `SKILL.md` | Frontmatter `name`,以插件目录名称作为后备 | `my-plugin/SKILL.md` 带有 `name: review` → `/my-plugin:review`。请参阅[单个 skill 在插件根](/docs/zh-CN/plugins/components#skills) |466| 插件根目录 `SKILL.md` | Frontmatter `name`,以插件目录名称作为回退 | 带有 `name: review` 的 `my-plugin/SKILL.md` → `/my-plugin:review`。请参阅[插件根目录下的单个 skill](/docs/zh-CN/plugins/components#skills) |

457| 从 claude.ai [同步的 skill](#how-synced-skills-behave) | 你的 claude.ai 帐户上 skill 的名称,前缀为 `anthropic-skills:` | 帐户 skill `deploy` → `/anthropic-skills:deploy`,或在没有其他命令使用该名称时为 `/deploy` |467| [从 claude.ai 同步的](#how-synced-skills-behave) skill | 该 skill 在您 claude.ai 账户中的名称,加上 `anthropic-skills:` 前缀 | 账户 skill `deploy` → `/anthropic-skills:deploy`,或在没有其他命令使用该名称时为 `/deploy` |

458 468 

459在插件 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 会加倍前缀。469在插件 skill 中,frontmatter `name` 会替换命令最后一段中的目录名称,因此带有 `name: fancy` 的 `my-plugin/skills/review/SKILL.md` 会变为 `/my-plugin:fancy`。除非已有其他命令使用该名称,否则不带前缀的 `/fancy` 也可以调用该 skill。在 v2.1.246 或更高版本中,如果您编写的 `name` 已经以插件自身的前缀开头,Claude Code 不会再次添加该前缀。例如,`name: my-plugin:fancy` 仍会变为 `/my-plugin:fancy`。在 v2.1.216 至 v2.1.245 中,当 `name` 已带有前缀时,Claude Code 会重复添加前缀。

460 470 

461在[非交互式会话](/docs/zh-CN/headless)中,名称 `help` 和 `feedback` 不是为其仅限终端的内置命令保留的,因此具有其中一个名称的插件 skill 在那里保持其裸命令。每个其他仅限终端的内置命令的名称(如 `/login`)即使该命令无法在这些会话中运行,仍然保留。471在[非交互式会话](/docs/zh-CN/headless)中,名称 `help` 和 `feedback` 不会为其仅限终端的内置命令保留,因此使用这两个名称之一的插件 skill 在此类会话中会保留其不带前缀的命令。其他所有仅限终端的内置命令的名称(例如 `/login`)仍会保留,即使该命令无法在此类会话中运行。

462 472 

463对于插件根 `SKILL.md`,没有 skill 目录来获取名称,因此 `name` 提供整个最后一段。没有 `name` 字段,Claude Code 回退到插件的目录名称。473对于插件根目录的 `SKILL.md`,没有可供获取名称的 skill 目录,因此由 `name` 提供整个最后一段。如果没有 `name` 字段,Claude Code 会回退到插件的目录名称。

464 474 

465<h4 id="available-string-substitutions">475<h4 id="available-string-substitutions">

466 可用的字符串替换476 可用的字符串替换

467</h4>477</h4>

468 478 

469Skills 支持 skill 内容中动态值的字符串替换:479skill 支持对 skill 内容中的动态值进行字符串替换:

470 480 

471| 变量 | 描述 |481| 变量 | 描述 |

472| :- | :- |482| :- | :- |

473| `$ARGUMENTS` | 调用 skill 时传递的所有参数。当没有占位符接收参数时,Claude Code 将它们附加为 `ARGUMENTS: <value>`。请参阅[将参数传递给 skills](#pass-arguments-to-skills)。 |483| `$ARGUMENTS` | 调用 skill 时传递的所有参数。当没有占位符接收参数时,Claude Code 会将其以 `ARGUMENTS: <value>` 的形式附加。请参阅[向 skill 传递参数](#pass-arguments-to-skills)。 |

474| `$ARGUMENTS[N]` | 按 0 基索引访问特定参数,例如 `$ARGUMENTS[0]` 表示第一个参数。 |484| `$ARGUMENTS[N]` | 按从 0 开始的索引访问特定参数,例如 `$ARGUMENTS[0]` 表示第一个参数。 |

475| `$N` | `$ARGUMENTS[N]` 的简写,例如 `$0` 表示第一个参数或 `$1` 表示第二个参数。 |485| `$N` | `$ARGUMENTS[N]` 的简写,例如 `$0` 表示第一个参数,`$1` 表示第二个参数。 |

476| `$name` | 在[`arguments`](#frontmatter-reference) frontmatter 列表中声明的命名参数。名称按顺序映射到位置,因此使用 `arguments: [issue, branch]`,占位符 `$issue` 扩展到第一个参数,`$branch` 扩展到第二个参数。 |486| `$name` | 在 [`arguments`](#frontmatter-reference) frontmatter 列表中声明的命名参数。名称按顺序映射到位置,因此使用 `arguments: [issue, branch]` 时,占位符 `$issue` 展开为第一个参数,`$branch` 展开为第二个参数。 |

477| `${CLAUDE_SESSION_ID}` | 当前会话 ID。用于日志记录、创建会话特定文件或将 skill 输出与会话关联。 |487| `${CLAUDE_SESSION_ID}` | 当前会话 ID。可用于记录日志、创建会话专属文件,或将 skill 输出与会话关联。 |

478| `${CLAUDE_EFFORT}` | 当前工作量级别:`low`、`medium`、`high`、`xhigh` 或 `max`。使用此来根据活动工作量设置调整 skill 说明。 |488| `${CLAUDE_EFFORT}` | 当前 effort 级别:`low`、`medium`、`high`、`xhigh` 或 `max`。可用于根据当前的 effort 设置调整 skill 指令。 |

479| `${CLAUDE_SKILL_DIR}` | 包含 skill 的 `SKILL.md` 文件的目录。对于插件 skills,这是插件内 skill 的子目录,而不是插件根。在 bash 注入命令中使用此来引用与 skill 捆绑的脚本或文件,无论当前工作目录如何。 |489| `${CLAUDE_SKILL_DIR}` | 包含该 skill 的 `SKILL.md` 文件的目录。对于插件 skill,这是该 skill 在插件中的子目录,而不是插件根目录。在 bash 注入命令中使用此变量,可引用与 skill 捆绑的脚本或文件,而不受当前工作目录影响。 |

480| `${CLAUDE_PROJECT_DIR}` | 项目根目录。这是与[hooks](/docs/zh-CN/hooks#reference-scripts-by-path)和 MCP 服务器相同的路径,作为 `CLAUDE_PROJECT_DIR` 接收。使用此来引用项目本地脚本或文件,例如 `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`,独立于 skill 的安装位置。 |490| `${CLAUDE_PROJECT_DIR}` | 项目根目录。这与 [hook](/docs/zh-CN/hooks#reference-scripts-by-path) 和 MCP 服务器作为 `CLAUDE_PROJECT_DIR` 接收的路径相同。使用此变量可引用项目本地的脚本或文件,例如 `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`,而不受 skill 安装位置的影响。 |

481| `${CLAUDE_PLUGIN_ROOT}` | 插件的安装目录。仅在插件 skills 中替换。使用此来引用插件中任何位置的脚本或文件,包括插件 skills 之间共享的资源。请参阅[插件环境变量](/docs/zh-CN/plugins/manifest-reference#environment-variables)。 |491| `${CLAUDE_PLUGIN_ROOT}` | 插件的安装目录。仅在插件 skill 中进行替换。使用此变量可引用捆绑在插件中任意位置的脚本或文件,包括插件各 skill 之间共享的资源。请参阅[插件环境变量](/docs/zh-CN/plugins/manifest-reference#environment-variables)。 |

482| `${CLAUDE_PLUGIN_DATA}` | 插件的[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data),在插件更新后仍然存在。仅在插件 skills 中替换。使用此来引用已安装的依赖项、生成的文件或必须超过更新的缓存。 |492| `${CLAUDE_PLUGIN_DATA}` | 插件的[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data),在插件更新后仍会保留。仅在插件 skill 中进行替换。使用此变量可引用已安装的依赖、生成的文件或必须在更新后保留的缓存。 |

483 493 

484Claude 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 显示了该模式:494Claude 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 展示了这种模式:

485 495 

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

487---497---


493Run `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` to render the chart.503Run `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` to render the chart.

494```504```

495 505 

496如果此 skill 安装在 `~/.claude/skills/render-chart/`,`${CLAUDE_SKILL_DIR}` 的两个出现都扩展到该目录。`allowed-tools` 规则然后匹配 skill 正文告诉 Claude 运行的确切命令,因此脚本运行而无需提示。506如果此 skill 安装在 `~/.claude/skills/render-chart/`,则两处 `${CLAUDE_SKILL_DIR}` 都会展开为该目录。这样,`allowed-tools` 规则就会与 skill 正文指示 Claude 运行的命令完全匹配,因此脚本运行时无需提示。

497 507 

498`${CLAUDE_PROJECT_DIR}` 替换需要 Claude Code v2.1.196 或更高版本。508`${CLAUDE_PROJECT_DIR}` 替换需要 Claude Code v2.1.196 或更高版本。

499 509 

500索引参数使用 shell 风格的引用,因此用引号包装多字值以将其作为单个参数传递。例如,`/my-skill "hello world" second` 使 `$0` 扩展到 `hello world`,`$1` 扩展到 `second`。`$ARGUMENTS` 占位符始终扩展到完整的参数字符串,如输入的那样。510索引参数使用 shell 风格的引号规则,因此请将多词值用引号括起来,以将其作为单个参数传递。例如,`/my-skill "hello world" second` 会使 `$0` 展开为 `hello world`,`$1` 展开为 `second`。`$ARGUMENTS` 占位符始终展开为输入时的完整参数字符串。

501 511 

502没有对应参数的索引占位符,例如仅传递一个参数时的 `$2`,在内容中保持不变。来自[`arguments`](#frontmatter-reference) frontmatter 的没有匹配参数的命名占位符扩展为空字符串。512没有对应参数的索引占位符(例如仅传递了一个参数时的 `$2`)会原样保留在内容中。来自 [`arguments`](#frontmatter-reference) frontmatter 的命名占位符如果没有匹配的参数,则展开为空字符串。

503 513 

504如果你传递的参数值本身包含文本(如 `$1` 或 `$ARGUMENTS`),Claude Code 将其作为文字文本插入,不会扩展它。例如,如果 skill 的正文包含 `Summarize $0`,你运行 `/summarize "$ARGUMENTS from yesterday"`,Claude 接收 `Summarize $ARGUMENTS from yesterday`。Claude Code 仍然在插入参数后替换 `${CLAUDE_*}` 变量(如 `${CLAUDE_SKILL_DIR}`)。514如果您传递的参数值本身包含 `$1` 或 `$ARGUMENTS` 之类的文本,Claude Code 会将其作为字面文本插入,而不会展开它。例如,如果 skill 正文包含 `Summarize $0`,而您运行 `/summarize "$ARGUMENTS from yesterday"`,则 Claude 收到的是 `Summarize $ARGUMENTS from yesterday`。在插入参数之后,Claude Code 仍会替换 `${CLAUDE_*}` 变量,例如 `${CLAUDE_SKILL_DIR}`。

505 515 

506要在数字、`ARGUMENTS` 或声明的参数名称之前包含文字 `$`,例如散文中的 `$1.00`,用反斜杠转义它:`\$1.00`。任何其他 `$` 之前的反斜杠保持不变。仅直接在令牌之前的单个反斜杠转义它。双反斜杠(如 `\\$1`)在原地保留两个反斜杠,`$1` 仍然扩展到参数值。反斜杠转义仅涵盖这些参数占位符。反斜杠不会阻止 `${CLAUDE_*}` 变量的替换,其中变量适用。516要在数字、`ARGUMENTS` 或已声明的参数名之前包含字面 `$`(例如正文中的 `$1.00`),请使用反斜杠对其进行转义:`\$1.00`。其他任何 `$` 之前的反斜杠都保持不变。只有紧接在标记之前的单个反斜杠才会对其进行转义。双反斜杠(例如 `\\$1`)会保留两个反斜杠,且 `$1` 仍会展开为参数值。反斜杠转义仅适用于这些参数占位符。在 `${CLAUDE_*}` 变量适用的位置,反斜杠无法阻止对该变量的替换。

507 517 

508**使用替换的示例:**518**使用替换的示例:**

509 519 


522 添加支持文件532 添加支持文件

523</h3>533</h3>

524 534 

525Skills 可以在其目录中包含多个文件。这使 `SKILL.md` 专注于要点,同时让 Claude 仅在需要时访问详细的参考材料。大型参考文档、API 规范或示例集合不需要在每次 skill 运行时加载到上下文中。535skill 可以在其目录中包含多个文件。这样可以使 `SKILL.md` 专注于核心内容,同时让 Claude 仅在需要时访问详细的参考资料。大型参考文档、API 规范或示例集合无需在每次运行 skill 时都加载到上下文中。

526 536 

527```text theme={null}537```text theme={null}

528my-skill/538my-skill/


533 └── helper.py (utility script - executed, not loaded)543 └── helper.py (utility script - executed, not loaded)

534```544```

535 545 

536从 `SKILL.md` 引用支持文件,以便 Claude 知道每个文件包含什么以及何时加载它:546在 `SKILL.md` 中引用支持文件,以便 Claude 知道每个文件包含什么内容以及何时加载它:

537 547 

538```markdown theme={null}548```markdown theme={null}

539## Additional resources549## Additional resources


542- For usage examples, see [examples.md](examples.md)552- For usage examples, see [examples.md](examples.md)

543```553```

544 554 

545<Tip>保持 `SKILL.md` 在 500 行以下。将详细的参考材料移到单独的文件。</Tip>555<Tip>请将 `SKILL.md` 保持在 500 行以内。将详细的参考资料移到单独的文件中。</Tip>

546 556 

547<h3 id="control-who-invokes-a-skill">557<h3 id="control-who-invokes-a-skill">

548 控制谁调用 skill558 控制谁可以调用 skill

549</h3>559</h3>

550 560 

551默认情况下,你和 Claude 都可以调用任何 skill。你可以键入 `/skill-name` 直接调用它,Claude 可以在与你的对话相关时自动加载它。两个 frontmatter 字段让你限制这一点:561默认情况下,您和 Claude 都可以调用任何 skill。您可以输入 `/skill-name` 直接调用它,Claude 也可以在与您的对话相关时自动加载它。有两个 frontmatter 字段可用于限制这一点:

552 562 

553* **`disable-model-invocation: true`**:仅你可以调用该 skill。用于具有副作用或你想控制时间的工作流,如 `/commit`、`/deploy` 或 `/send-slack-message`。你不希望 Claude 因为你的代码看起来准备好就决定部署。563* **`disable-model-invocation: true`**:只有您可以调用该 skill。适用于具有副作用或您希望控制时机的工作流,例如 `/commit`、`/deploy` 或 `/send-slack-message`。您不会希望 Claude 因为代码看起来已准备就绪就决定进行部署。

554 564 

555* **`user-invocable: false`**:仅 Claude 可以调用该 skill。用于不可作为命令操作的背景知识。`legacy-system-context` skill 解释了旧系统的工作原理。Claude 在相关时应该知道这一点,但 `/legacy-system-context` 对用户来说不是一个有意义的操作。565* **`user-invocable: false`**:只有 Claude 可以调用该 skill。适用于无法作为命令执行的背景知识。例如,`legacy-system-context` skill 解释旧系统的工作原理。Claude 应在相关时了解这些内容,但 `/legacy-system-context` 对用户而言并不是一个有意义的操作。

556 566 

557此示例创建一个仅你可以触发的部署 skill。如果你设置 `disable-model-invocation: true`,Claude 无法自动运行该 skill:567此示例创建了一个只有您可以触发的部署 skill。如果您设置 `disable-model-invocation: true`,Claude 就无法自动运行该 skill:

558 568 

559```yaml theme={null}569```yaml theme={null}

560---570---


5714. Verify the deployment succeeded5814. Verify the deployment succeeded

572```582```

573 583 

574如果 Claude 仍然尝试,Claude Code 会阻止该调用并指示它不要以另一种方式重现部署步骤,因此期望 Claude 建议你自己运行 `/deploy`。584如果 Claude 仍然尝试调用,Claude Code 会阻止该调用,并指示它不要以其他方式重现部署步骤,因此 Claude 通常会建议您自行运行 `/deploy`。

575 585 

576以下是两个字段如何影响调用和上下文加载:586以下是这两个字段对调用和上下文加载的影响:

577 587 

578| Frontmatter | 你可以调用 | Claude 可以调用 | 何时加载到上下文中 |588| Frontmatter | 您可以调用 | Claude 可以调用 | 何时加载到上下文中 |

579| :- | :- | :- | :- |589| :- | :- | :- | :- |

580| (默认) | 是 | 是 | 描述始终在上下文中,调用时加载完整 skill |590| (默认) | 是 | 是 | 描述始终在上下文中,调用时加载完整 skill |

581| `disable-model-invocation: true` | 是 | 否 | 描述不在上下文中,你调用时加载完整 skill |591| `disable-model-invocation: true` | 是 | 否 | 描述不在上下文中,您调用时加载完整 skill |

582| `user-invocable: false` | 否 | 是 | 描述始终在上下文中,调用时加载完整 skill |592| `user-invocable: false` | 否 | 是 | 描述始终在上下文中,调用时加载完整 skill |

583 593 

584<Note>594<Note>

585 在常规会话中,skill 描述被加载到上下文中,以便 Claude 知道什么可用,但完整 skill 内容仅在调用时加载。[具有预加载 skills 的子代理](/docs/zh-CN/sub-agents#preload-skills-into-subagents)的工作方式不同:完整 skill 内容在启动时注入。595 在常规会话中,skill 描述会加载到上下文中,以便 Claude 知道有哪些可用的 skill,但完整的 skill 内容仅在调用时加载。[预加载了 skill 的子代理](/docs/zh-CN/sub-agents#preload-skills-into-subagents)的工作方式不同:完整的 skill 内容会在启动时注入。

586</Note>596</Note>

587 597 

588<h3 id="skill-content-lifecycle">598<h3 id="skill-content-lifecycle">

589 Skill 内容生命周期599 Skill 内容生命周期

590</h3>600</h3>

591 601 

592当你或 Claude 调用 skill 时,渲染的 `SKILL.md` 内容作为单个消息进入对话,并在后续回合中保持在那里。此持久性适用于 skill 的说明,而不是其权限:[`allowed-tools`](#pre-approve-tools-for-a-skill) 授权在你发送下一条消息时被清除。Claude Code 不会在后续回合中重新读取 skill 文件,因此将应该在整个任务中应用的指导写成常设说明,而不是一次性步骤。602当您或 Claude 调用 skill 时,渲染后的 `SKILL.md` 内容会作为一条消息进入对话,并在后续轮次中保留。这种持久性适用于 skill 的指令,而不适用于其权限:[`allowed-tools`](#pre-approve-tools-for-a-skill) 授予会在您发送下一条消息时清除。Claude Code 不会在后续轮次中重新读取 skill 文件,因此请将应在整个任务中适用的指导写成持续有效的指令,而不是一次性步骤。

593 603 

594当 Claude 重新调用一个其渲染内容与已在上下文中的副本相同的 skill 时,Claude Code 添加一个简短的注释,说明该 skill 已加载,而不是内容的第二个副本。当渲染内容不同时,因为参数改变或[动态上下文](#inject-dynamic-context)命令产生了新输出,Claude Code 再次附加完整内容。604当 Claude 重新调用某个 skill,且其渲染后的内容与上下文中已有的副本完全相同时,Claude Code 会添加一条简短说明,指出该 skill 已加载,而不是添加第二份内容副本。当渲染后的内容不同时(因为参数发生了变化,或[动态上下文](#inject-dynamic-context)命令产生了新的输出),Claude Code 会再次附加完整内容。

595 605 

596[自动压缩](/docs/zh-CN/how-claude-code-works#when-context-fills-up)在令牌预算内携带调用的 skills。当对话被总结以释放上下文时,Claude Code 在总结后重新附加每个 skill 的最新调用,保留每个的前 5,000 个令牌。重新附加的 skills 共享 25,000 个令牌的组合预算。Claude Code 从最近调用的 skill 开始填充此预算,因此如果你在一个会话中调用了许多,较旧的 skills 可能在压缩后完全被删除。606[自动压缩](/docs/zh-CN/how-claude-code-works#when-context-fills-up)会在 token 预算范围内保留已调用的 skill。当对话被总结以释放上下文时,Claude Code 会在总结之后重新附加每个 skill 的最近一次调用,每个保留前 5,000 个 token。重新附加的 skill 共享 25,000 个 token 的总预算。Claude Code 从最近调用的 skill 开始填充该预算,因此如果您在一个会话中调用了许多 skill,较早的 skill 可能会在压缩后被完全丢弃。

597 607 

598如果 skill 似乎在第一个响应后停止影响行为,内容通常仍然存在,模型选择其他工具或方法。加强 skill 的 `description` 和说明,以便模型继续偏好它,或使用[hooks](/docs/zh-CN/hooks)来确定性地强制行为。如果 skill 很大或你在它之后调用了其他几个,在压缩后重新调用它以恢复完整内容。608如果 Claude 在会话中途停止遵循某个 skill,请参阅 [Claude 停止遵循 skill](#claude-stops-following-a-skill)。

599 609 

600<h3 id="pre-approve-tools-for-a-skill">610<h3 id="pre-approve-tools-for-a-skill">

601 为 skill 预先批准工具611 为 skill 预先批准工具

602</h3>612</h3>

603 613 

604`allowed-tools` 字段在调用 skill 的回合中为列出的工具授予权限,以便 Claude 可以使用它们而无需提示你批准。当你发送下一条消息时,授权被清除,即使 skill 内容[保持在上下文中](#skill-content-lifecycle);再次调用 skill 会为该回合重新应用它。它不限制哪些工具可用:每个工具仍然可调用,你的[权限设置](/docs/zh-CN/permissions)仍然管理未列出的工具。要为整个会话而不是单个回合预先批准工具,请改为向这些权限设置添加允许规则。614`allowed-tools` 字段会在调用该 skill 的轮次中为列出的工具授予权限,因此 Claude 可以使用这些工具而无需提示您批准。即使 skill 内容[保留在上下文中](#skill-content-lifecycle),该授予也会在您发送下一条消息时清除;再次调用该 skill 会在该轮次中重新应用授予。它不会限制哪些工具可用:所有工具仍然可以调用,未列出的工具仍受您的[权限设置](/docs/zh-CN/permissions)约束。要为整个会话而非单个轮次预先批准工具,请改为在这些权限设置中添加允许规则。

605 615 

606工作区信任不会限制此字段。Claude Code 在你或 Claude 调用 skill 时应用项目 skill 的 `allowed-tools`,包括在你从未信任的文件夹中的 `-p` 运行。skill 可以授予自己广泛的工具访问权限,因此在你在那里运行 Claude Code 之前,查看检入存储库的 skills 的 `allowed-tools`。616工作区信任不会限制此字段。即使在您从未信任过的文件夹中进行 `-p` 运行,Claude Code 也会应用项目 skill 的 `allowed-tools`。skill 可以为自身授予广泛的工具访问权限,因此在仓库中运行 Claude Code 之前,请检查提交到该仓库的 skill 的 `allowed-tools`。要在整个组织范围内对仓库 skill 禁用该字段,请参阅[仅适用托管权限规则时](#when-only-managed-permission-rules-apply)。

607 617 

608此 skill 让 Claude 在你调用它时运行 git 命令而无需每次使用批准:618每当您调用此 skill 时,它都允许 Claude 运行 git 命令而无需逐次批准:

609 619 

610```yaml theme={null}620```yaml theme={null}

611---621---


616---626---

617```627```

618 628 

619要在 skill 处于活动状态时从 Claude 的可用工具池中删除工具,在 skill 的 frontmatter 中的 `disallowed-tools` 中列出它们。当你发送下一条消息时,限制被清除。与拒绝规则一样,该字段在任何其他工具保持时无法删除[`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior)。要在所有 skills 和提示中阻止工具,在你的[权限设置](/docs/zh-CN/permissions)中添加拒绝规则。629要在 skill 处于活动状态时从 Claude 的可用工具池中移除工具,请在 skill 的 frontmatter 中的 `disallowed-tools` 里列出这些工具。当您发送下一条消息时,该限制即被清除。与拒绝规则一样,只要还有其他工具存在,该字段就无法移除 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior)。要在所有 skill 和提示词中阻止工具,请在您的[权限设置](/docs/zh-CN/permissions)中添加拒绝规则。

630 

631<h4 id="when-only-managed-permission-rules-apply">

632 仅适用托管权限规则时

633</h4>

634 

635当您的组织在托管设置中设置了 `allowManagedPermissionRulesOnly` 时,Claude Code 会忽略项目和个人 skill 中的 `allowed-tools`,以及[该设置条目所列的其他来源](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly)中的 `allowed-tools`。这需要 Claude Code v2.1.282 或更高版本。

636 

637受影响的 skill 所列出的工具会改为经过您组织的托管规则和常规权限提示。运行 `/status` 可列出在当前会话中到目前为止 Claude Code 已忽略其 `allowed-tools` 的每个 skill。skill 中不被任何托管规则允许的注入命令遵循[注入命令的权限检查](#permission-checks-on-injected-commands)。

620 638 

621<h3 id="pass-arguments-to-skills">639<h3 id="pass-arguments-to-skills">

622 将参数传递给 skills640 向 skill 传递参数

623</h3>641</h3>

624 642 

625你和 Claude 都可以在调用 skill 时传递参数。参数可通过 `$ARGUMENTS` 占位符获得。643您和 Claude 都可以在调用 skill 时传递参数。参数可通过 `$ARGUMENTS` 占位符获取。

626 644 

627此 skill 按编号修复 GitHub 问题。`$ARGUMENTS` 占位符被替换为 skill 名称后面的任何内容:645此 skill 按编号修复 GitHub issue。`$ARGUMENTS` 占位符会被替换为 skill 名称之后的任何内容:

628 646 

629```yaml theme={null}647```yaml theme={null}

630---648---


6425. Create a commit6605. Create a commit

643```661```

644 662 

645当你运行 `/fix-issue 123` 时,Claude 接收"Fix GitHub issue 123 following our coding standards..."663当您运行 `/fix-issue 123` 时,Claude 会收到 "Fix GitHub issue 123 following our coding standards..."

646 664 

647如果你使用参数调用 skill,但 skill 内容中没有占位符接收一个,Claude Code 将 `ARGUMENTS: <your input>` 附加到 skill 内容的末尾,以便 Claude 仍然看到你键入的内容。占位符是 `$ARGUMENTS`、索引形式(如 `$1`)或命名参数。没有其位置参数的索引占位符保持为文字文本,不计为接收一个。命名占位符计数,即使其位置没有参数,因为它扩展为空字符串。665如果您在调用 skill 时传递了参数,但 skill 内容中没有占位符接收参数,Claude Code 会将 `ARGUMENTS: <your input>` 附加到 skill 内容的末尾,以便 Claude 仍能看到您输入的内容。占位符是指 `$ARGUMENTS`、索引形式(例如 `$1`)或命名参数。在其位置上没有参数的索引占位符会保留为字面文本,不算作接收了参数。命名占位符即使在其位置上没有参数也算作接收了参数,因为它会展开为空字符串。

648 666 

649你也可以在一条消息的开始处堆叠多个 skills。键入 `/write-tests /fix-issue 123` 加载两个 skills 并将尾随文本 `123` 作为 `$ARGUMENTS` 传递给每个。在 v2.1.199 之前,仅第一个 skill 加载并接收 `/fix-issue 123` 作为文字参数文本。667您还可以在一条消息的开头叠加多个 skill。输入 `/write-tests /fix-issue 123` 会加载这两个 skill,并将末尾的文本 `123` 作为 `$ARGUMENTS` 传递给每个 skill。在 v2.1.199 之前,只有第一个 skill 会加载,并将 `/fix-issue 123` 作为字面参数文本接收。

650 668 

651Claude Code 扩展第一个 skill 加上最多五个在其后堆叠的。扩展在第一个不是内联用户可调用 skill 的令牌处停止,因此作为[分叉子代理](#run-skills-in-a-subagent)运行的 skill(如[`/code-review`](/docs/zh-CN/code-review#review-a-diff-locally))或其参数本身可能以斜杠命令开头的 skill(如 `/loop`)也在那里结束运行。该令牌和其后的所有内容成为每个扩展 skill 的参数文本。从 v2.1.218 开始,`/code-review` 作为分叉子代理运行;在早期版本上,它以内联方式运行并堆叠。669Claude Code 会展开第一个 skill 以及其后叠加的最多五个 skill。展开会在第一个不是内联用户可调用 skill 的标记处停止,因此以[分叉子代理](#run-skills-in-a-subagent)方式运行的 skill(例如 [`/code-review`](/docs/zh-CN/code-review#review-a-diff-locally)),或其参数本身可能以斜杠命令开头的 skill(例如 `/loop`),也会在该处终止叠加。该标记及其后的所有内容会成为每个已展开 skill 的参数文本。从 v2.1.218 起,`/code-review` 以分叉子代理方式运行;在更早的版本中,它以内联方式运行并可叠加。

652 670 

653要按位置访问单个参数,使用 `$ARGUMENTS[N]` 或较短的 `$N`:671要按位置访问单个参数,请使用 `$ARGUMENTS[N]` 或更简短的 `$N`:

654 672 

655```yaml theme={null}673```yaml theme={null}

656---674---


662Preserve all existing behavior and tests.680Preserve all existing behavior and tests.

663```681```

664 682 

665运行 `/migrate-component SearchBar JavaScript TypeScript` 将 `$ARGUMENTS[0]` 替换为 `SearchBar`,`$ARGUMENTS[1]` 替换为 `JavaScript`,`$ARGUMENTS[2]` 替换为 `TypeScript`。使用 `$N` 简写的相同 skill:683运行 `/migrate-component SearchBar JavaScript TypeScript` 会将 `$ARGUMENTS[0]` 替换为 `SearchBar`,`$ARGUMENTS[1]` 替换为 `JavaScript`,`$ARGUMENTS[2]` 替换为 `TypeScript`。使用 `$N` 简写的同一 skill:

666 684 

667```yaml theme={null}685```yaml theme={null}

668---686---


766 784 

767注入命令在技能呈现时永远不会提示权限。Claude Code 首先根据你的[权限规则](/docs/zh-CN/permissions)检查每一个。命令与拒绝规则匹配的命令会中止调用,显示 `Shell command permission check failed for pattern "..."`。785注入命令在技能呈现时永远不会提示权限。Claude Code 首先根据你的[权限规则](/docs/zh-CN/permissions)检查每一个。命令与拒绝规则匹配的命令会中止调用,显示 `Shell command permission check failed for pattern "..."`。

768 786 

769在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)之外,当命令的权限检查返回除允许之外的任何内容时,Claude Code 会中止调用。这包括通常会询问你的规则。要防止不匹配的命令在此处中止,请使用 [`allowed-tools`](#pre-approve-tools-for-a-skill) 预先批准它。拒绝和询问规则仍然会覆盖 `allowed-tools`。请参阅[管理权限](/docs/zh-CN/permissions#manage-permissions)。787在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)之外,当命令的权限检查返回除允许之外的任何结果时,Claude Code 都会以相同的错误中止调用。这包括通常会询问您的规则。为避免未匹配的命令在此处导致中止,请使用 [`allowed-tools`](#pre-approve-tools-for-a-skill) 预先批准它。如果您的组织将权限规则限制为仅来自托管设置,请参阅[仅应用托管权限规则时](#when-only-managed-permission-rules-apply)。拒绝规则和询问规则仍然会覆盖 `allowed-tools`。请参阅[管理权限](/docs/zh-CN/permissions#manage-permissions)。

770 788 

771在自动模式中,原本需要你批准的命令不会中止调用。技能加载时带有指令,告诉 Claude 首先运行该命令,然后 Claude 自己的调用通过[自动模式的常规检查](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions)。调用仍然会在[分叉技能](#run-skills-in-a-subagent)中中止,该技能设置 `agent`,以及在 Claude 没有[运行注入命令的 shell 工具](#how-injected-commands-run)的会话中。789在自动模式中,原本需要你批准的命令不会中止调用。技能加载时带有指令,告诉 Claude 首先运行该命令,然后 Claude 自己的调用通过[自动模式的常规检查](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions)。调用仍然会在[分叉技能](#run-skills-in-a-subagent)中中止,该技能设置 `agent`,以及在 Claude 没有[运行注入命令的 shell 工具](#how-injected-commands-run)的会话中。

772 790 


840 限制 Claude 的技能访问858 限制 Claude 的技能访问

841</h3>859</h3>

842 860 

843默认情况下,Claude 可以调用任何没有设置 `disable-model-invocation: true` 的技能。定义 `allowed-tools` 的技能在调用技能的轮次中授予 Claude 对这些工具的访问权限而无需逐次批准;当你发送下一条消息时,授权清除。你的[权限设置](/docs/zh-CN/permissions)仍然管理所有其他工具的基线批准行为。一些内置命令也可通过 Skill 工具获得,包括 `/init` 和 `/security-review`。其他内置命令如 `/compact` 则不可用。861默认情况下,Claude 可以调用任何未设置 `disable-model-invocation: true` 的 skill。定义了 [`allowed-tools`](#pre-approve-tools-for-a-skill) 的 skill 会在调用该 skill 的轮次中授予 Claude 使用这些工具的权限,无需逐次批准;当您发送下一条消息时,该授予即被清除。您的[权限设置](/docs/zh-CN/permissions)仍然管理所有其他工具的基线批准行为。一些内置命令也可以通过 Skill 工具使用,包括 `/init` 和 `/security-review`。其他内置命令(例如 `/compact`)则不可用。

844 862 

845控制 Claude 可以调用哪些技能的三种方法:863控制 Claude 可以调用哪些技能的三种方法:

846 864 


953 使用 skill-creator 运行评估971 使用 skill-creator 运行评估

954</h3>972</h3>

955 973 

956[`skill-creator` 插件](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/skill-creator)在 Claude Code 内自动化比较循环。从官方市场安装它:974[`skill-creator` 插件](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/skill-creator)可在 Claude Code 内自动执行比较循环。在 VS Code 扩展或桌面应用中,请按照[安装插件](/docs/zh-CN/plugins/install#install-a-plugin)从官方市场安装它。在终端中,运行 `claude` 启动 Claude Code,然后在其提示符处输入:

957 975 

958```text theme={null}976```text theme={null}

959/plugin install skill-creator@claude-plugins-official977/plugin install skill-creator@claude-plugins-official

statusline.md +40 −6

Details

206| `thinking.enabled` | 是否为会话启用了扩展思考 |206| `thinking.enabled` | 是否为会话启用了扩展思考 |

207| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | 消耗的 5 小时或 7 天速率限制的百分比,从 0 到 100 |207| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | 消耗的 5 小时或 7 天速率限制的百分比,从 0 到 100 |

208| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | Unix 纪元秒,当 5 小时或 7 天速率限制窗口重置时 |208| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | Unix 纪元秒,当 5 小时或 7 天速率限制窗口重置时 |

209| `rate_limits.spend_limit.used_percentage`, `rate_limits.spend_limit.resets_at` | 在 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway-spend-limits#usage-warnings-in-claude-code) 后面,应用于你的支出限制的已使用百分比,以及其周期重置时的 Unix 纪元秒。百分比从 0 到 100 运行,或一旦你超过限制就超过 100。需要 Claude Code v2.1.251 或更高版本 |209| `rate_limits.spend_limit.used_percentage`, `rate_limits.spend_limit.resets_at` | 在 Claude apps gateway 后面,您已使用的支出限制额度以及其周期何时重置。请参阅 [支出限制字段](#spend-limit-fields)。需要 Claude Code v2.1.251 或更高版本 |

210| `rate_limits.spend_limit.used_usd`, `rate_limits.spend_limit.limit_usd`, `rate_limits.spend_limit.period` | 您以美元计的估计支出和限额,以及该限制的周期。这些字段可能不存在。请参阅 [支出限制字段](#spend-limit-fields)。Claude Code 和网关均需要 v2.1.284 或更高版本 |

210| `prompt_cache` | 会话的主对话的 [prompt cache](/docs/zh-CN/prompt-caching) 统计信息:命中率、未命中次数以及缓存是否预热。有关每个字段,请参阅 [prompt cache 字段](#prompt-cache-fields)。在主对话的第一次 API 响应之前不存在。需要 Claude Code v2.1.251 或更高版本 |211| `prompt_cache` | 会话的主对话的 [prompt cache](/docs/zh-CN/prompt-caching) 统计信息:命中率、未命中次数以及缓存是否预热。有关每个字段,请参阅 [prompt cache 字段](#prompt-cache-fields)。在主对话的第一次 API 响应之前不存在。需要 Claude Code v2.1.251 或更高版本 |

211| `session_id` | 唯一的会话标识符 |212| `session_id` | 唯一的会话标识符 |

212| `session_name` | 会话名称。使用使用 `--name` 标志或 `/rename` 设置的自定义名称(如果存在),否则使用 AI 生成的会话标题。[默认显示名称](/docs/zh-CN/sessions#name-your-sessions)(例如 `my-app-3f`)不会填充此字段。当会话既没有自定义名称也没有 AI 生成的标题时不存在 |213| `session_name` | 会话名称。使用使用 `--name` 标志或 `/rename` 设置的自定义名称(如果存在),否则使用 AI 生成的会话标题。[默认显示名称](/docs/zh-CN/sessions#name-your-sessions)(例如 `my-app-3f`)不会填充此字段。当会话既没有自定义名称也没有 AI 生成的标题时不存在 |


315 },316 },

316 "spend_limit": {317 "spend_limit": {

317 "used_percentage": 62.8,318 "used_percentage": 62.8,

318 "resets_at": 1740787200319 "resets_at": 1740787200,

320 "used_usd": 314.12,

321 "limit_usd": 500,

322 "period": "monthly"

319 }323 }

320 },324 },

321 "vim": {325 "vim": {


385 389 

386`current_usage` 对象在会话中第一次 API 调用之前为 `null`,以及在 `/compact` 之后直到下一次 API 调用重新填充它为止再次为 `null`。390`current_usage` 对象在会话中第一次 API 调用之前为 `null`,以及在 `/compact` 之后直到下一次 API 调用重新填充它为止再次为 `null`。

387 391 

392<h3 id="spend-limit-fields">

393 支出限制字段

394</h3>

395 

396在 [设置了支出限制的 Claude apps gateway](/docs/zh-CN/claude-apps-gateway-spend-limits#usage-warnings-in-claude-code) 后面,`rate_limits.spend_limit` 对象描述适用于您的支出限制。它在会话的第一次 API 响应后出现,需要 Claude Code v2.1.251 或更高版本。您的脚本按不同的时间表接收其字段:

397 

398* `used_percentage` 和 `resets_at`:随每个响应一起提供,因此只要 `spend_limit` 存在,它们就存在。`used_percentage` 的范围是 0 到 100,一旦您超过限制则会超过 100;`resets_at` 是该限制周期重置时的 Unix 纪元秒。

399* `used_usd`、`limit_usd` 和 `period`:您迄今为止以美元计的估计支出和限额,以及该限制涵盖的周期,为 `daily`、`weekly` 或 `monthly` 之一。网关 [根据 token 计数计算 `used_usd`](/docs/zh-CN/claude-apps-gateway-spend-limits#how-requests-are-priced),因此它是一个估计值,而不是计费金额。Claude Code 通过单独的请求从网关读取这些字段,在您发送请求期间大约每五分钟一次。美元金额可能比 `used_percentage` 滞后约五分钟,因此两者可能会短暂不一致。Claude Code 和网关均需要 v2.1.284 或更高版本。

400 

401即使 `spend_limit` 存在,也应将 `used_usd`、`limit_usd` 和 `period` 视为可选字段。您的脚本会先于它们收到百分比;如果您设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`(它会关闭该请求),它们将始终不存在。请在脚本中为每个字段提供备用值来读取,例如 `jq -r '.rate_limits.spend_limit.used_usd // empty'`。

402 

388<h3 id="prompt-cache-fields">403<h3 id="prompt-cache-fields">

389 Prompt cache 字段404 Prompt cache 字段

390</h3>405</h3>


860 速率限制使用情况875 速率限制使用情况

861</h3>876</h3>

862 877 

863在状态行中显示 claude.ai 订阅速率限制使用情况。`rate_limits` 对象包含一个滚动的 `five_hour` 窗口和一个每周的 `seven_day` 窗口。每个窗口提供 `used_percentage`(从 0 到 100)和 `resets_at`(Unix 纪元秒,当窗口重置时)。878在状态栏中显示 claude.ai 订阅速率限制使用情况,或您相对于 Claude 应用网关支出限制的支出。对于订阅者,`rate_limits` 对象包含一个滚动的 `five_hour` 窗口和一个每周的 `seven_day` 窗口。每个窗口提供 `used_percentage`(从 0 到 100)和 `resets_at`(窗口重置时的 Unix 纪元秒数)。在网关后面时,请读取 `spend_limit` 对象,详见[支出限制字段](#spend-limit-fields)。

864 

865在具有支出限制的 Claude 应用网关后面,`rate_limits` 携带 `spend_limit`,其中包含适用于你的支出限制的相同两个字段,除了其 `used_percentage` 一旦超过限制可能会超过 100。需要 Claude Code v2.1.251 或更高版本。

866 879 

867`rate_limits` 对象仅对 claude.ai Pro 和 Max 订阅者或具有支出限制的 Claude 应用网关后面的用户出现,并且仅在第一次 API 响应后出现。每个脚本优雅地处理缺失字段:880`rate_limits` 对象仅对 claude.ai Pro 和 Max 订阅者或具有支出限制的 Claude 应用网关后面的用户出现,并且仅在第一次 API 响应后出现。每个脚本都会优雅地处理缺失的字段,并且在网关后面时打印 `spend: $314.12 / $500`,或在美元字段缺失时打印 `spend: 63%`:

868 881 

869<CodeGroup>882<CodeGroup>

870 ```bash Bash theme={null}883 ```bash Bash theme={null}


880 [ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"893 [ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"

881 [ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"894 [ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"

882 895 

896 # Behind a Claude apps gateway: dollars when the gateway reports them, else the percentage

897 SPEND_PCT=$(echo "$input" | jq -r '.rate_limits.spend_limit.used_percentage // empty')

898 SPEND_USD=$(echo "$input" | jq -r '.rate_limits.spend_limit | select(.used_usd != null) | "$\(.used_usd) / $\(.limit_usd)"')

899 [ -n "$SPEND_PCT" ] && LIMITS="${LIMITS:+$LIMITS }spend: ${SPEND_USD:-$(printf '%.0f' "$SPEND_PCT")%}"

900 

883 [ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"901 [ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"

884 ```902 ```

885 903 


900 if week is not None:918 if week is not None:

901 parts.append(f"7d: {week:.0f}%")919 parts.append(f"7d: {week:.0f}%")

902 920 

921 # Behind a Claude apps gateway: dollars when the gateway reports them, else the percentage

922 spend = rate.get('spend_limit', {})

923 if spend.get('used_percentage') is not None:

924 if spend.get('used_usd') is not None:

925 parts.append(f"spend: ${spend['used_usd']} / ${spend['limit_usd']}")

926 else:

927 parts.append(f"spend: {spend['used_percentage']:.0f}%")

928 

903 if parts:929 if parts:

904 print(f"[{model}] | {' '.join(parts)}")930 print(f"[{model}] | {' '.join(parts)}")

905 else:931 else:


921 if (fiveH != null) parts.push(`5h: ${Math.round(fiveH)}%`);947 if (fiveH != null) parts.push(`5h: ${Math.round(fiveH)}%`);

922 if (week != null) parts.push(`7d: ${Math.round(week)}%`);948 if (week != null) parts.push(`7d: ${Math.round(week)}%`);

923 949 

950 // Behind a Claude apps gateway: dollars when the gateway reports them, else the percentage

951 const spend = data.rate_limits?.spend_limit;

952 if (spend?.used_percentage != null) {

953 parts.push(spend.used_usd != null

954 ? `spend: $${spend.used_usd} / $${spend.limit_usd}`

955 : `spend: ${Math.round(spend.used_percentage)}%`);

956 }

957 

924 console.log(parts.length ? `[${model}] | ${parts.join(' ')}` : `[${model}]`);958 console.log(parts.length ? `[${model}] | ${parts.join(' ')}` : `[${model}]`);

925 });959 });

926 ```960 ```

sub-agents.md +183 −173

Details

38 <Tab title="Explore">38 <Tab title="Explore">

39 一个快速的、只读的代理,针对搜索和分析代码库进行了优化。39 一个快速的、只读的代理,针对搜索和分析代码库进行了优化。

40 40 

41 * **Model**: 从主对话继承,在 Claude API 上限制为 Opus,因此 Explore 永远不会在比您为会话选择的模型更昂贵的模型上运行,除非您设置 `CLAUDE_CODE_SUBAGENT_MODEL` 并[强制将其应用于每个 subagent](#run-every-subagent-on-one-model)41 * **Model**: 主对话的模型。当主对话运行 Fable 时,Explore 的模型取决于您的连接方式:

42 * 使用 Claude 订阅、Anthropic Console 账户,或通过 `ANTHROPIC_BASE_URL` 访问的 [LLM 网关](/docs/zh-CN/llm-gateway)时,Explore 在 [`opus` 别名](/docs/zh-CN/model-config#model-aliases)解析到的 Opus 模型上运行。

43 * 在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry、[AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws) 或 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)上,Explore 保持使用主对话的模型。

42 * **Tools**: 只读工具;拒绝访问 Write 和 Edit44 * **Tools**: 只读工具;拒绝访问 Write 和 Edit

43 * **Purpose**: 文件发现、代码搜索、代码库探索45 * **Purpose**: 文件发现、代码搜索、代码库探索

44 46 

45 从 v2.1.198 开始,Explore 继承主对话的模型,而不是始终在 Haiku 上运行。在 Claude API 上,继承的模型限制为 Opus:主对话在更高层级上运行 Explore 时使用 Opus,主对话在 Sonnet 或 Haiku 上运行 Explore 时使用相同的模型。在任何其他提供商上,例如 [Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform](/docs/zh-CN/third-party-integrations),Explore 直接继承主对话的模型。47 名为 `Explore` 的[用户或项目子代理](#choose-the-subagent-scope)会覆盖内置的子代理,并保持其自己的 `model` 字段,因此可以定义一个带有 `model: haiku` 的子代理,在较低成本的模型上运行探索。要将同一个模型强制应用于每个子代理(包括 Explore),请参阅[在一个模型上运行每个子代理](#run-every-subagent-on-one-model)。

46 

47 名为 `Explore` 的[用户或项目 subagent](#choose-the-subagent-scope) 会覆盖内置的,并保持其自己的 `model` 字段,因此定义一个带有 `model: haiku` 的来保持探索在较低成本的模型上。

48 48 

49 当 Claude 需要搜索或理解代码库而不进行更改时,它会委托给 Explore。这样可以将探索结果保持在主对话上下文之外。49 当 Claude 需要搜索或理解代码库而不进行更改时,它会委托给 Explore。这样可以将探索结果保持在主对话上下文之外。

50 50 


94除了这些内置 subagents,您可以创建自己的,具有自定义提示、工具限制、权限模式、hooks 和 skills。以下部分展示了如何开始和自定义 subagents。94除了这些内置 subagents,您可以创建自己的,具有自定义提示、工具限制、权限模式、hooks 和 skills。以下部分展示了如何开始和自定义 subagents。

95 95 

96<h2 id="quickstart-create-your-first-subagent">96<h2 id="quickstart-create-your-first-subagent">

97 快速入门:创建您的第一个 subagent97 快速入门:创建您的第一个子代理

98</h2>98</h2>

99 99 

100Subagents 是带有 YAML frontmatter 的 Markdown 文件。要创建一个,请要求 Claude 为您编写,或者 [自己编写文件](#write-subagent-files)。100子代理是带有 YAML frontmatter 的 Markdown 文件。要创建一个,请要求 Claude 为您编写,或者 [自己编写文件](#write-subagent-files)。

101 

102从 v2.1.198 开始,`/agents` 命令不再打开交互式创建向导;运行它会打印一个提醒,要求您询问 Claude 或直接编辑 `.claude/agents/`。Subagent 文件、frontmatter 字段以及 `.claude/agents/` 和 `~/.claude/agents/` 位置保持不变;仅删除了终端向导。

103 101 

104本演练创建一个用户级 subagent,用于审查代码并建议改进。102本演练创建一个用户级子代理,用于审查代码并建议改进。

105 103 

106<Steps>104<Steps>

107 <Step title="要求 Claude 创建 subagent">105 <Step title="要求 Claude 创建子代理">

108 在 Claude Code 中,描述您想要的 subagent 及其保存位置:106 在 Claude Code 中,描述您想要的子代理及其保存位置:

109 107 

110 ```text wrap theme={null}108 ```text wrap theme={null}

111 Create a personal code-improver subagent in ~/.claude/agents/ that scans109 Create a personal code-improver subagent in ~/.claude/agents/ that scans


114 provide an improved version. Make it read-only and have it use Sonnet.112 provide an improved version. Make it read-only and have it use Sonnet.

115 ```113 ```

116 114 

117 Claude 使用 `name`、`description`、`tools` 列表、`model` 和系统提示来编写文件。115 Claude 使用 `name`、`description`、`tools` 列表、`model` 和系统提示词来编写文件。

118 </Step>116 </Step>

119 117 

120 <Step title="审查文件">118 <Step title="审查文件">


132 the problem, show the current code, and provide an improved version.130 the problem, show the current code, and provide an improved version.

133 ```131 ```

134 132 

135 因为该文件位于 `~/.claude/agents/`,所以 subagent 在您机器上的每个项目中都可用。要将其范围限制在一个项目中,请将其移动到该项目的 `.claude/agents/` 目录。[选择 subagent 范围](#choose-the-subagent-scope) 比较了两者。133 因为该文件位于 `~/.claude/agents/`,所以该子代理在您机器上的每个项目中都可用。要将其限定在一个项目中,请将其移动到该项目的 `.claude/agents/` 目录。[选择子代理作用域](#choose-the-subagent-scope) 比较了两者。

136 </Step>134 </Step>

137 135 

138 <Step title="尝试一下">136 <Step title="尝试一下">

139 要求 Claude 委托给新的 subagent:137 要求 Claude 委托给新的子代理:

140 138 

141 ```text wrap theme={null}139 ```text wrap theme={null}

142 Use the code-improver agent to suggest improvements in this project140 Use the code-improver agent to suggest improvements in this project

143 ```141 ```

144 142 

145 Claude 委托给您的新 subagent,它扫描代码库并返回改进建议。在记录中,委托显示为工具调用行,显示 subagent 的名称后跟简短的任务描述,例如 `code-improver(Suggest code improvements)`。143 Claude 委托给您的新子代理,它扫描代码库并返回改进建议。在会话记录中,委托显示为工具调用行,显示子代理的名称后跟简短的任务描述,例如 `code-improver(Suggest code improvements)`。

146 144 

147 如果 Claude 找不到新的 subagent,请重新启动 Claude Code 并重试。这仅在会话开始前 `~/.claude/agents/` 不存在时发生,因为运行中的会话不会检测到新创建的 `agents` 目录。145 如果 Claude 找不到新的子代理,请重新启动 Claude Code 并重试。这仅在会话开始前 `~/.claude/agents/` 不存在时发生,因为运行中的会话不会检测到新创建的 `agents` 目录。

148 </Step>146 </Step>

149</Steps>147</Steps>

150 148 

151现在您有了一个 subagent,可以在您机器上的任何项目中使用它来分析代码库并建议改进。149现在您有了一个子代理,可以在您机器上的任何项目中使用它来分析代码库并建议改进。

152 150 

153您也可以手动编写 subagent 文件、通过 CLI 标志定义它们,或通过 plugins 分发它们。以下部分涵盖所有配置选项。151您也可以手动编写子代理文件、通过 CLI 标志定义它们,或通过插件分发它们。以下部分涵盖所有配置选项。

154 152 

155<Note>153<Note>

156 在 Claude Code v2.1.197 及更早版本中,`/agents` 打开一个交互式向导,其中有一个 **Running** 选项卡列出实时 subagents,以及一个 **Library** 选项卡用于创建、编辑和删除它们。154 运行 `/agents` 会打印一个提醒,提示您询问 Claude 或直接编辑 `.claude/agents/` 和 `~/.claude/agents/`。

155 在 Claude Code v2.1.197 及更早版本中,`/agents` 打开一个交互式向导,其中有一个 **Running** 选项卡列出实时子代理,以及一个 **Library** 选项卡用于创建、编辑和删除它们。

157</Note>156</Note>

158 157 

159<h2 id="configure-subagents">158<h2 id="configure-subagents">


245**Plugin subagents** 来自您已安装的 [plugins](/docs/zh-CN/plugins/overview)。它们与您的自定义 subagents 一起自动加载,并在 @-mention 类型提前中以其范围名称出现。有关创建 plugin subagents 的详细信息,请参阅 [plugin 组件参考](/docs/zh-CN/plugins/components#agents)。244**Plugin subagents** 来自您已安装的 [plugins](/docs/zh-CN/plugins/overview)。它们与您的自定义 subagents 一起自动加载,并在 @-mention 类型提前中以其范围名称出现。有关创建 plugin subagents 的详细信息,请参阅 [plugin 组件参考](/docs/zh-CN/plugins/components#agents)。

246 245 

247<Note>246<Note>

248 出于安全原因,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。247 出于安全原因,插件子代理不支持 `hooks`、`mcpServers` 或 `permissionMode` frontmatter 字段。从插件加载 Agent 时,这些字段会被忽略。如果您需要它们,请将 Agent 文件复制到 `.claude/agents/` 或 `~/.claude/agents/`。您也可以在 `settings.json` 或 `settings.local.json` 中向 [`permissions.allow`](/docs/zh-CN/settings-reference#permissions-allow) 添加规则,但这些规则适用于整个会话,而不仅仅是该插件子代理。

248 

249 如果您是插件的作者,请改为在插件的 [`hooks/hooks.json`](/docs/zh-CN/plugins/components#hooks) 中提供 hook,并在其 [`.mcp.json`](/docs/zh-CN/plugins/components#mcp-servers) 中提供 MCP 服务器。它们会在插件启用时始终生效,而不仅仅在子代理内部生效。

249</Note>250</Note>

250 251 

251来自任何这些范围的 subagent 定义也可用于 [agent teams](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates):当生成一个队友时,您可以引用一个 subagent 类型,Claude Code 将该定义的部分应用于队友。有关每个显示模式中哪些部分适用,请参阅 [agent teams](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates)。252来自任何这些范围的 subagent 定义也可用于 [agent teams](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates):当生成一个队友时,您可以引用一个 subagent 类型,Claude Code 将该定义的部分应用于队友。有关每个显示模式中哪些部分适用,请参阅 [agent teams](/docs/zh-CN/agent-teams#use-subagent-definitions-for-teammates)。


411`CLAUDE_CODE_SUBAGENT_MODEL` 是一个默认值,因此 subagent 的定义或 Claude 传递的模型仍然优先于它。要将一个模型应用于每个 subagent、[teammate](/docs/zh-CN/agent-teams#specify-teammates-and-models) 和 [workflow agent](/docs/zh-CN/workflows),也设置 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` 为 `1`。需要 Claude Code v2.1.257 或更高版本。412`CLAUDE_CODE_SUBAGENT_MODEL` 是一个默认值,因此 subagent 的定义或 Claude 传递的模型仍然优先于它。要将一个模型应用于每个 subagent、[teammate](/docs/zh-CN/agent-teams#specify-teammates-and-models) 和 [workflow agent](/docs/zh-CN/workflows),也设置 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` 为 `1`。需要 Claude Code v2.1.257 或更高版本。

412 413 

413* 如果您设置两个变量,subagents 在 `CLAUDE_CODE_SUBAGENT_MODEL` 中的模型上运行。414* 如果您设置两个变量,subagents 在 `CLAUDE_CODE_SUBAGENT_MODEL` 中的模型上运行。

414* 如果您仅设置 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`,subagents 在主对话的模型上运行。415* 如果仅设置 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`,子代理将在主对话的模型上运行,但内置 Explore 子代理除外,它会在[内置子代理下为其列出的模型](#built-in-subagents)上运行。

415 416 

416例如,要在 Haiku 上运行每个 subagent,在 [settings file](/docs/zh-CN/settings) 的 `env` 块中设置两个变量:417例如,要在 Haiku 上运行每个 subagent,在 [settings file](/docs/zh-CN/settings) 的 `env` 块中设置两个变量:

417 418 


426 427 

427要检查设置是否生效,在 subagent 运行时运行 [`/tasks`](/docs/zh-CN/commands)。Subagent 的行显示它运行的模型。428要检查设置是否生效,在 subagent 运行时运行 [`/tasks`](/docs/zh-CN/commands)。Subagent 的行显示它运行的模型。

428 429 

429当 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` [on](/docs/zh-CN/env-vars) 时,Claude Code 忽略每个 subagent 定义的 `model` 字段,包括内置 Explore 和 Plan subagents,Claude 无法在启动 subagent 时传递模型。两种 subagent 仍然在主对话的模型上运行:430当 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` [启用](/docs/zh-CN/env-vars)时,Claude Code 会忽略子代理定义中的 `model` 字段,Claude 在启动子代理时也无法传递模型。以下子代理仍在主对话的模型上运行:

430 431 

431* 一个 [fork](#fork-the-current-conversation)432* 一个 [fork](#fork-the-current-conversation)

432* 一个 [skill that runs in a subagent](/docs/zh-CN/skills#run-skills-in-a-subagent),带有 `model: inherit`433* 一个 [skill that runs in a subagent](/docs/zh-CN/skills#run-skills-in-a-subagent),带有 `model: inherit`

433 434 

434当您仅设置 `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` 时,内置 Explore subagent 保持其 [model cap](#built-in-subagents)。

435 

436<h3 id="control-subagent-capabilities">435<h3 id="control-subagent-capabilities">

437 控制 subagent 能力436 控制 subagent 能力

438</h3>437</h3>


566 565 

567要将 MCP 服务器保持在主对话之外,并避免其工具描述消耗那里的上下文,请在此处内联定义它,而不是在 `.mcp.json` 中。Subagent 获得工具;父对话不获得。566要将 MCP 服务器保持在主对话之外,并避免其工具描述消耗那里的上下文,请在此处内联定义它,而不是在 `.mcp.json` 中。Subagent 获得工具;父对话不获得。

568 567 

569<span id="inline-server-trust" />Claude Code 从您项目的 `.claude/agents/` 目录中的代理文件加载内联服务器,或在 `--add-dir` 目录的 `.claude/agents/` 中,仅在您 [trust the folder the agent file came from](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 之后。在 v2.1.238 之前,Claude Code 加载这些服务器而不检查信任。568适用于主会话的 MCP 限制同样涵盖子代理 frontmatter 中声明的服务器:

569 

570* [`--strict-mcp-config`](/docs/zh-CN/cli-reference) 和 [`--bare`](/docs/zh-CN/cli-reference)

571* [企业托管 MCP 配置](/docs/zh-CN/managed-mcp)

572* [`allowedMcpServers` 和 `deniedMcpServers` 策略](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists)

573 

574当其中任一项阻止某个服务器时,Claude Code 会跳过它,并显示一条列出被阻止服务器的警告。

575 

576托管设置限制适用于每个子代理,无论其如何定义。`--strict-mcp-config` 不会过滤您通过 `--agents` 或 SDK `agents` 选项内联传递的服务器,因为这些属于调用方的显式输入。

577 

578<h4 id="inline-server-trust">

579 内联 MCP 服务器需要信任

580</h4>

581 

582只有在您[信任 Agent 文件所在的文件夹](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)之后,Claude Code 才会从项目 `.claude/agents/` 目录或 `--add-dir` 目录的 `.claude/agents/` 中的 Agent 文件加载[内联 MCP 服务器](#scope-mcp-servers-to-a-subagent)。在 v2.1.238 之前,Claude Code 加载这些服务器时不检查信任。

570 583 

571* **不计数的信任**:父文件夹的信任,以及 `-p` 或 SDK 会话为 [hooks in settings files](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 获得的自动信任584* **不计数的信任**:父文件夹的信任,以及 `-p` 或 SDK 会话为 [hooks in settings files](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 获得的自动信任

572* **直到那时**:Claude Code 跳过该代理文件中的每个内联服务器,并将确切的 `projects["<path>"].hasTrustDialogAccepted` 键写入调试日志,用于 `~/.claude.json`585* **直到那时**:Claude Code 跳过该代理文件中的每个内联服务器,并将确切的 `projects["<path>"].hasTrustDialogAccepted` 键写入调试日志,用于 `~/.claude.json`


577* 一个引用您已配置的服务器的名称590* 一个引用您已配置的服务器的名称

578* 一个代理文件中的内联服务器,来自 `~/.claude/agents/`,在您使用 `--agents` 或 SDK `agents` 选项传递的一个中,或托管设置提供的一个中591* 一个代理文件中的内联服务器,来自 `~/.claude/agents/`,在您使用 `--agents` 或 SDK `agents` 选项传递的一个中,或托管设置提供的一个中

579 592 

580适用于主会话的 MCP 限制也涵盖在 subagent frontmatter 中声明的服务器:

581 

582* [`--strict-mcp-config`](/docs/zh-CN/cli-reference) 和 [`--bare`](/docs/zh-CN/cli-reference)

583* [Enterprise managed MCP configuration](/docs/zh-CN/managed-mcp)

584* [`allowedMcpServers` 和 `deniedMcpServers` 策略](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists)

585 

586当其中之一阻止服务器时,Claude Code 会跳过它并显示一个警告,命名被阻止的服务器。

587 

588托管设置限制适用于每个 subagent,无论如何定义。`--strict-mcp-config` 不会过滤您通过 `--agents` 或 SDK `agents` 选项内联传递的服务器,因为这些是显式调用者输入。

589 

590<h4 id="permission-modes">593<h4 id="permission-modes">

591 权限模式594 权限模式

592</h4>595</h4>


853有关完整的 hook 配置格式,请参阅 [Hooks](/docs/zh-CN/hooks)。856有关完整的 hook 配置格式,请参阅 [Hooks](/docs/zh-CN/hooks)。

854 857 

855<h2 id="work-with-subagents">858<h2 id="work-with-subagents">

856 使用 subagents859 使用子代理

857</h2>860</h2>

858 861 

859<h3 id="understand-automatic-delegation">862<h3 id="understand-automatic-delegation">

860 理解自动委托863 理解自动委托

861</h3>864</h3>

862 865 

863Claude 根据您请求中的任务描述、subagent 配置中的 `description` 字段和当前上下文自动委托任务。要鼓励主动委托,在您的 subagent 的 description 字段中包含"use proactively"之类的短语。866Claude 根据您请求中的任务描述、子代理配置中的 `description` 字段以及当前上下文自动委托任务。要鼓励主动委托,请在子代理的 description 字段中包含"use proactively"之类的短语。

864 867 

865保持描述简洁:当您的 subagents 的组合描述超过 [15,000 令牌限制](/docs/zh-CN/errors#agent-descriptions-are-over-the-15000-token-limit) 时,Claude Code 会显示启动警告,但仍然加载每个 subagent。868请保持描述简洁:当您的子代理描述总和超过 [15,000 token 限制](/docs/zh-CN/errors#agent-descriptions-are-over-the-15000-token-limit)时,Claude Code 会显示启动警告,但仍会加载每个子代理。

866 869 

867如果 subagent 在 [plugin](/docs/zh-CN/plugins/overview) 中提供,您可以衡量 Claude 在现实提示中对其委托的可靠性,而不是一次检查一个:[`claude plugin eval`](/docs/zh-CN/plugin-evals) 使用和不使用 plugin 运行每个提示,并对结果进行评分。870如果子代理由[插件](/docs/zh-CN/plugins/overview)提供,您可以在一组贴近实际的提示词上衡量 Claude 委托给它的可靠程度,而无需逐个检查:[`claude plugin eval`](/docs/zh-CN/plugin-evals) 会在启用和不启用该插件的情况下分别运行每个提示词,并对结果进行评分。

868 871 

869<h3 id="invoke-subagents-explicitly">872<h3 id="invoke-subagents-explicitly">

870 显式调用 subagents873 显式调用子代理

871</h3>874</h3>

872 875 

873当自动委托不够时,您可以自己请求 subagent。三种模式从一次性建议升级到会话范围的默认值:876当自动委托不够用时,您可以自行请求使用子代理。以下三种模式从一次性建议逐步升级到整个会话的默认设置:

874 877 

875* **自然语言**:在提示中命名 subagent;Claude 决定是否委托878* **自然语言**:在提示词中点名子代理;由 Claude 决定是否委托

876* **@-mention**:保证 subagent 为一个任务运行879* **@-mention**:保证该子代理为某一个任务运行

877* **会话范围**:整个会话使用该 subagent 的系统提示、工具限制和模型,通过 `--agent` 标志或 `agent` 设置880* **会话范围**:通过 `--agent` 标志或 `agent` 设置,让整个会话以该子代理的身份运行

878 881 

879对于自然语言,没有特殊语法。命名 subagent,Claude 通常会委托:882使用自然语言时没有特殊语法。点名子代理,Claude 通常就会委托:

880 883 

881```text wrap theme={null}884```text wrap theme={null}

882Use the test-runner subagent to fix failing tests885Use the test-runner subagent to fix failing tests

883Have the code-reviewer subagent look at my recent changes886Have the code-reviewer subagent look at my recent changes

884```887```

885 888 

886**@-mention subagent。** 输入 `@` 并从类型提前中选择 subagent,就像您 @-mention 文件一样。这确保特定 subagent 运行,而不是将选择留给 Claude:889**@-mention 子代理。** 输入 `@` 并从自动补全列表中选择子代理,方式与 @-mention 文件相同。这可以确保运行指定的子代理,而不是将选择权交给 Claude:

887 890 

888```text wrap theme={null}891```text wrap theme={null}

889@"code-reviewer (agent)" look at the auth changes892@"code-reviewer (agent)" look at the auth changes

890```893```

891 894 

892您的完整消息仍然发送给 Claude,它根据您的要求为 subagent 编写任务提示。@-mention 控制调用哪个 subagent,而不是它接收什么提示。895您的完整消息仍会发送给 Claude,由 Claude 根据您的要求为子代理编写任务提示词。@-mention 控制的是 Claude 调用哪个子代理,而不是子代理收到什么提示词。

893 896 

894由启用的 [plugin](/docs/zh-CN/plugins/overview) 提供的 Subagents 在类型提前中显示为其作用域名称,例如 `my-plugin:code-reviewer` 或 `my-plugin:review:security`,当 plugin [将 agents 组织到子文件夹中](#choose-the-subagent-scope)。命名背景 subagents 当前在会话中运行也出现在类型提前中,在名称旁边显示其状态。897已启用[插件](/docs/zh-CN/plugins/overview)提供的子代理会以其作用域名称显示在自动补全列表中,例如 `my-plugin:code-reviewer`;当插件[将 Agent 组织到子文件夹中](#choose-the-subagent-scope)时,则显示为 `my-plugin:review:security` 这样的名称。当前在会话中运行的已命名后台子代理也会出现在自动补全列表中,并在名称旁显示其状态。

895 898 

896您也可以手动输入提及而不使用选择器:`@agent-<name>` 用于本地 subagents,或 `@agent-` 后跟 plugin subagents 的作用域名称,例如 `@agent-my-plugin:code-reviewer`。当您输入这种形式时,类型提前显示文件匹配而不是 agents。当您提交时,agent 提及仍然会解析。899您也可以不使用选择器而手动输入提及:本地子代理使用 `@agent-<name>`,插件子代理使用 `@agent-` 后跟作用域名称,例如 `@agent-my-plugin:code-reviewer`。输入这种形式时,自动补全列表显示的是匹配的文件而不是 Agent,但提交时该 Agent 提及仍会被正确解析。

897 900 

898**将整个会话作为 subagent 运行。** 传递 [`--agent <name>`](/docs/zh-CN/cli-reference) 以启动一个会话,其中主线程本身采用该 subagent 的工具限制和模型:901**以子代理身份运行整个会话。** 传递 [`--agent <name>`](/docs/zh-CN/cli-reference) 可启动一个会话,让主线程本身采用该子代理的工具限制和模型:

899 902 

900```bash theme={null}903```bash theme={null}

901claude --agent code-reviewer904claude --agent code-reviewer

902```905```

903 906 

904除非代理的 [提示为空](#choose-the-subagent-scope),custom subagent 的系统提示完全替换默认 Claude Code 系统提示,就像 [`--system-prompt`](/docs/zh-CN/cli-reference) 一样。`CLAUDE.md` 文件和项目内存仍然通过正常消息流加载,即使代理的定义设置了 [`omitClaudeMd`](#supported-frontmatter-fields)。代理名称在启动标题中显示为 `@<name>`,以便您可以确认它是活跃的。907除非该 Agent 的[提示词为空](#choose-the-subagent-scope),否则自定义子代理的系统提示词会完全替换默认的 Claude Code 系统提示词,效果与 [`--system-prompt`](/docs/zh-CN/cli-reference) 相同。`CLAUDE.md` 文件和项目记忆仍会通过正常的消息流加载,即使该 Agent 的定义设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 也是如此。

908 

909Agent 名称会以 `@<name>` 的形式显示在启动标题中,方便您确认其已生效。

905 910 

906这适用于内置和自定义 subagents,当您恢复会话时选择会持续:Claude Code 恢复代理的工具限制和模型以及对话。如果代理在您恢复时不再存在,会话继续使用默认工具并显示 [警告命名代理](/docs/zh-CN/errors#session-agent-no-longer-available)。对于任一情况下的系统提示,请参阅 [已恢复对话中的系统提示标志](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)。911这适用于内置和自定义子代理,并且在恢复会话时该选择会保留:Claude Code 会随对话一起恢复该 Agent 的工具限制和模型。如果恢复时该 Agent 已不存在,会话将使用默认工具继续,并显示一条[指明该 Agent 的警告](/docs/zh-CN/errors#session-agent-no-longer-available)。关于这两种情况下的系统提示词,请参阅[已恢复对话中的系统提示词标志](/docs/zh-CN/cli-reference#system-prompt-flags-in-resumed-conversations)。

907 912 

908对于 plugin 提供的 subagent,您可以仅传递代理名称,Claude Code 会找到它:913对于插件提供的子代理,您可以只传递 Agent 名称,Claude Code 会自行找到它:

909 914 

910```bash theme={null}915```bash theme={null}

911claude --agent security-reviewer916claude --agent security-reviewer

912```917```

913 918 

914如果多个 plugins 提供具有相同名称的 agents,传递作用域名称以消除歧义:919如果多个插件提供了同名的 Agent,请传递作用域名称以消除歧义:

915 920 

916```bash theme={null}921```bash theme={null}

917claude --agent my-plugin:security-reviewer922claude --agent my-plugin:security-reviewer

918```923```

919 924 

920如果 plugin 将 agent 放在其 `agents/` 目录的子文件夹中,请在作用域名称中包含子文件夹,例如 `claude --agent my-plugin:review:security`。925如果插件将 Agent 放在其 `agents/` 目录的子文件夹中,请在作用域名称中包含该子文件夹,例如 `claude --agent my-plugin:review:security`。

921 926 

922要使其成为项目中每个会话的默认值,在 `.claude/settings.json` 中设置 `agent`:927要使其成为项目中每个会话的默认值,请在 `.claude/settings.json` 中设置 `agent`:

923 928 

924```json theme={null}929```json theme={null}

925{930{


927}932}

928```933```

929 934 

930如果两者都存在,CLI 标志覆盖设置。935如果两者同时存在,CLI 标志会覆盖该设置。

931 936 

932<h3 id="run-subagents-in-foreground-or-background">937<h3 id="run-subagents-in-foreground-or-background">

933 在前台或后台运行 subagents938 在前台或后台运行子代理

934</h3>939</h3>

935 940 

936Subagents 可以在前台或后台运行:941子代理可以在前台或后台运行:

937 942 

938* **前台 subagents** 阻塞主对话直到完成。权限提示会在出现时传递给您。943* **前台子代理**会阻塞主对话直到完成。权限提示会在出现时传递给您。

939* **后台 subagents** 在您继续工作时并发运行。当后台 subagent 到达需要权限的工具调用时,Claude Code 在您的主会话中显示提示,并命名正在请求的 subagent。批准以让 subagent 继续,或按 Esc 拒绝该单个工具调用而不停止 subagent。944* **后台子代理**在您继续工作时并发运行。当后台子代理遇到需要权限的工具调用时,Claude Code 会在您的主会话中显示该提示,并指明发出请求的子代理。批准即可让子代理继续;按 Esc 则拒绝该单个工具调用,而不会停止子代理。

940 945 

941对于每个 Claude 使用 Agent 工具生成的 subagent,Claude Code 从适用的第一种情况中选择前台或后台:946对于 Claude 使用 Agent 工具生成的每个子代理,Claude Code 会按以下情况中第一个适用的情况来决定前台还是后台:

942 947 

943* 如果进程中的 [agent team](/docs/zh-CN/agent-teams#limitations) 队友生成了 subagent,Claude Code 在前台运行它。Claude Code 拒绝生成定义设置 [`background: true`](#supported-frontmatter-fields) 的队友的 subagent,并显示错误。当 [fork 模式](#turn-fork-mode-on-or-off) 关闭且您未 [关闭后台任务](/docs/zh-CN/env-vars) 时,Claude Code 也会在队友设置 `run_in_background: true` 时拒绝并显示错误。948* 如果是进程内的 [agent team](/docs/zh-CN/agent-teams#limitations) 队友生成了该子代理,Claude Code 会在前台运行它。如果队友要生成的子代理的定义设置了 [`background: true`](#supported-frontmatter-fields),Claude Code 会拒绝并报错。在 [fork 模式](#turn-fork-mode-on-or-off)关闭且您未[关闭后台任务](/docs/zh-CN/env-vars)的情况下,如果队友设置了 `run_in_background: true`,Claude Code 也会拒绝并报错。

944* 如果您将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,Claude Code 在前台运行 subagent,在每种会话中,无论 fork 模式是否打开。949* 如果您将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,Claude Code 会在前台运行子代理,适用于所有类型的会话,且无论 fork 模式是否开启。

945* 当 [fork 模式](#turn-fork-mode-on-or-off) 打开时(在交互式会话中默认打开),Claude Code 在后台运行 subagent,fork 和非 fork subagents 都是如此,Claude 无法要求前台。950* 当 [fork 模式](#turn-fork-mode-on-or-off)开启时(交互式会话中默认开启),Claude Code 会在后台运行子代理,fork 和非 fork 子代理都是如此,且 Claude 无法要求在前台运行。

946* 当 fork 模式关闭时,Claude 默认在后台运行 subagent,在需要结果才能继续时在前台运行。Fork 模式在 [非交互模式](/docs/zh-CN/headless) 中使用 `-p` 和在 Agent SDK 中关闭,除非您打开它。要保持特定 subagent 在后台,即使 Claude 想要结果,请将其 frontmatter [`background`](#supported-frontmatter-fields) 字段设置为 `true`。951* 当 fork 模式关闭时,Claude 默认在后台运行子代理,并在需要先拿到结果才能继续时在前台运行。在使用 `-p` 的[非交互模式](/docs/zh-CN/headless)和 Agent SDK 中,fork 模式默认关闭,除非您将其开启。要让某个子代理即使在 Claude 需要其结果时也保持在后台运行,请将其 frontmatter 中的 [`background`](#supported-frontmatter-fields) 字段设置为 `true`。

947 952 

948对于具有 `context: fork` 的技能,Claude Code 遵循 [在 subagent 中运行技能](/docs/zh-CN/skills#run-skills-in-a-subagent) 中的规则,无论 fork 模式是否打开。953对于带有 `context: fork` 的 skill,Claude Code 改为遵循[在子代理中运行 skill](/docs/zh-CN/skills#run-skills-in-a-subagent) 中的规则,无论 fork 模式是否开启。

949 954 

950后台 subagents 运行的 [内置工具集](#available-tools) 比前台 subagents 更小,除了对话 forks 和 [已恢复](#resume-subagents) 的前台 subagents。955后台子代理使用的[内置工具集](#available-tools)比前台子代理更小,但对话 fork 和[已恢复](#resume-subagents)的前台子代理除外。

951 956 

952后台 subagents 在您的主会话中显示每个权限提示。当您用持续超过该单个工具调用的选择(例如持续整个会话的授予)回答其中一个提示时,Claude Code 将您的答案应用于整个会话,包括您的主对话。957后台子代理会在您的主会话中显示每一个权限提示。当您对其中某个提示所作的选择会在该次工具调用之后继续生效(例如在会话剩余时间内持续有效的授予)时,Claude Code 会将您的答复应用于整个会话,包括您的主对话。

953 958 

954后台 subagent 可以留下后台 [Bash 或 PowerShell 命令](/docs/zh-CN/tools-reference#background-commands) [在其轮次结束后继续运行](/docs/zh-CN/interactive-mode#how-backgrounding-works)。当该命令结束时,Claude Code 向 subagent 发送通知。959后台子代理可以让后台 [Bash 或 PowerShell 命令](/docs/zh-CN/tools-reference#background-commands)[在其轮次结束后继续运行](/docs/zh-CN/interactive-mode#how-backgrounding-works)。该命令结束时,Claude Code 会向该子代理发送通知。

955 960 

956后台 subagent 的结果在稍后的轮次中作为完成通知到达 Claude。Claude 在报告 subagent 的结果之前等待该通知,如果您先询问进度,它会报告 subagent 仍在运行。在 v2.1.211 之前,Claude 有时会报告尚未完成的后台 subagent 的结果。961后台子代理的结果会在之后的某个轮次中以完成通知的形式送达 Claude。Claude 会等待该通知后再报告子代理的结果;如果您先询问进度,它会告知子代理仍在运行。在 v2.1.211 之前,Claude 有时会报告尚未完成的后台子代理的结果。

957 962 

958您也可以自己控制这个:963您也可以自行控制:

959 964 

960* 当 fork 模式关闭时,要求 Claude 在后台或前台运行任务965* 当 fork 模式关闭时,要求 Claude 在后台或前台运行任务

961* 按 **Ctrl+B** 将运行中的任务放在后台966* 按 **Ctrl+B** 将正在运行的任务转到后台

962 967 

963Claude Code 以两种方式之一从提示输入下方的 subagent 面板中清除后台 subagent 的行,取决于 subagent 如何结束:968Claude Code 会以两种方式之一从输入框下方的子代理面板中清除后台子代理所在的行,具体取决于子代理的结束方式:

964 969 

965* 当 subagent 成功完成时,Claude Code 立即移除其行,除了在 [屏幕阅读器模式](/docs/zh-CN/accessibility) 中,在页脚显示 `/tasks to see subagents` 30 秒。在这 30 秒内,运行 [`/tasks`](/docs/zh-CN/commands) 并在 subagent 上按 `Enter` 以打开其转录。在 v2.1.232 之前,Claude Code 在 subagent 完成后保持该行 30 秒,与失败的相同,并显示无页脚提示。970* 当子代理成功完成时,Claude Code 会立即移除其所在行,并在页脚显示 `/tasks to see subagents` 30 秒([屏幕阅读器模式](/docs/zh-CN/accessibility)下除外)。在这 30 秒内,运行 [`/tasks`](/docs/zh-CN/commands) 并在该子代理上按 `Enter` 即可打开其会话记录。在 v2.1.232 之前,Claude Code 会在子代理完成后将该行保留 30 秒(与失败的子代理相同),且不显示页脚提示。

966* 当 subagent 失败或您停止它时,Claude Code 保持其行 30 秒。要更快地清除该行,选择它并按 `x`。971* 当子代理失败或被您停止时,Claude Code 会将其所在行保留 30 秒。要更早清除该行,请选中它并按 `x`。

967 972 

968完成的后台 subagent 在 [`/tasks`](/docs/zh-CN/commands) 中保持列出,标记为完成并排序在运行工作下方,与页脚提示相同的 30 秒。其详情视图在 subagent 完成时保持打开。失败或您停止的 Subagents 离开列表。在 v2.1.208 之前,完成的 subagent 在完成时立即离开列表,其详情视图关闭。973已完成的后台子代理会继续列在 [`/tasks`](/docs/zh-CN/commands) 中,标记为已完成并排在正在运行的工作下方,持续时间与页脚提示相同,为 30 秒。子代理完成时,其详情视图保持打开。失败或被您停止的子代理会从列表中移除。在 v2.1.208 之前,已完成的子代理会在完成的那一刻离开列表,其详情视图也会关闭。

969 974 

970<h3 id="subagent-names">975<h3 id="subagent-names">

971 Subagent 名称976 子代理名称

972</h3>977</h3>

973 978 

974Claude 可以通过在 Agent 工具调用上传递 `name` 参数来给 subagent 命名,并可能自己这样做,而不先询问您。该名称使 subagent 可寻址:Claude 可以在完成后 [按名称消息或恢复它](#resume-subagents)。979Claude 可以在 Agent 工具调用中传递 `name` 参数来为子代理命名,并且可能会自行这样做,而不事先询问您。名称使子代理可被寻址:在子代理完成后,Claude 可以[按名称向其发送消息或恢复它](#resume-subagents)。

975 980 

976在启用 [agent teams](/docs/zh-CN/agent-teams) 的交互式会话中,Claude 从主对话生成的具有 `name` 的 subagent 作为队友启动,除非调用是 [fork](#fork-the-current-conversation) 或在调用本身上传递 `isolation`。subagent 的 frontmatter 中的 `isolation` 值不会阻止它,队友然后在主会话的工作目录中运行。请参阅 [Claude 如何启动 agent teams](/docs/zh-CN/agent-teams#how-claude-starts-agent-teams)。981在启用了 [agent teams](/docs/zh-CN/agent-teams) 的交互式会话中,Claude 从主对话生成的带有 `name` 的子代理会改为以队友身份启动,除非该调用是 [fork](#fork-the-current-conversation) 或在调用本身中传递了 `isolation`。子代理 frontmatter 中的 `isolation` 值无法阻止这一点,此时该队友会在主会话的工作目录中运行。请参阅 [Claude 如何启动 agent teams](/docs/zh-CN/agent-teams#how-claude-starts-agent-teams)。

977 982 

978<h3 id="api-errors-in-subagents">983<h3 id="api-errors-in-subagents">

979 Subagents 中的 API 错误984 子代理中的 API 错误

980</h3>985</h3>

981 986 

982当某些东西 [在流中途切断 subagent 的响应](/docs/zh-CN/errors#the-response-above-may-be-incomplete),且部分响应包含文本但没有工具调用时,Claude Code 提示 subagent 继续而不是结束运行。这也发生在交互式会话中。运行仅在这些继续用完后才在错误上结束。987当某种原因[在流式传输中途截断了子代理的响应](/docs/zh-CN/errors#the-response-above-may-be-incomplete),且部分响应包含文本但没有工具调用时,Claude Code 会提示子代理继续,而不是结束运行。这在交互式会话中同样适用。只有当这些继续次数用完后,运行才会因该错误而结束。

983 988 

984从 v2.1.199 开始,subagent 的运行因 API 错误(例如使用限制或重复的服务器错误)而结束时,会向 Claude 报告该失败,而不是返回错误文本,就像它是 subagent 的发现一样。Claude 接收的内容取决于 subagent 运行的位置:989从 v2.1.199 开始,因 API 错误(例如用量限制或反复出现的服务器错误)而结束运行的子代理会将该失败报告给 Claude,而不是把错误文本当作子代理的发现返回。Claude 收到的内容取决于子代理的运行位置:

985 990 

986* **前台**:如果速率限制、过载或服务器错误切断已经产生文本输出的 subagent,Agent 工具返回该部分输出,并注明 subagent 被切断且未完成其任务。未产生任何内容的 subagent,或其唯一输出是工具调用的 subagent,失败并出现 [`Agent terminated early due to an API error`](/docs/zh-CN/errors#agent-terminated-early-due-to-an-api-error),后跟错误详情。在 v2.1.199 中,切断仅工具调用形状的速率限制、过载或服务器错误返回了仅包含切断注记的空部分结果。991* **前台**:如果速率限制、过载或服务器错误截断了已经产生文本输出的子代理,Agent 工具会返回该部分输出,并附注说明子代理被截断、未完成其任务。未产生任何输出、或输出仅包含工具调用的子代理会以 [`Agent terminated early due to an API error`](/docs/zh-CN/errors#agent-terminated-early-due-to-an-api-error) 失败,后跟错误详情。在 v2.1.199 中,速率限制、过载或服务器错误截断仅含工具调用的输出时,返回的是只包含截断说明的空部分结果。

987* **后台**:subagent 被标记为失败,Claude 在其结束时接收的消息命名 API 错误并包括 subagent 的最后输出,所以部分工作不会丢失。992* **后台**:子代理会被标记为失败,Claude 在其结束时收到的消息会指明该 API 错误,并包含子代理的最后输出,因此部分工作不会丢失。

988 993 

989当您配置 [fallback 模型链](/docs/zh-CN/model-config#fallback-model-chains) 且 subagent 遇到链覆盖的失败(例如其模型不可用)时,Claude Code 将 subagent 切换到链中接受请求的第一个模型。subagent 继续工作而不是在错误上结束。994当您配置了[备用模型链](/docs/zh-CN/model-config#fallback-model-chains),且子代理遇到该链所覆盖的失败(例如其模型不可用)时,Claude Code 会将子代理切换到链中第一个接受请求的模型。子代理会继续工作,而不是因错误而结束。

990 995 

991一旦底层 API 错误清除,要求 Claude 重试任务或 [恢复 subagent](#resume-subagents)。996底层 API 错误消除后,请让 Claude 重试该任务或[恢复子代理](#resume-subagents)。

992 997 

993<h3 id="subagent-output-scanning">998<h3 id="subagent-output-scanning">

994 Subagent 输出扫描999 子代理输出扫描

995</h3>1000</h3>

996 1001 

997Claude Code 在 Claude 读取 subagent 的最终报告之前扫描它。Subagent 可能已读取您从未审查过的文件、网页或命令输出,这些来源的文本可能包含针对主对话的指令。扫描永远不会删除或改写任何内容;它进行两种您可能在报告中注意到的更改:1002Claude Code 会在 Claude 读取每个子代理的最终报告之前对其进行扫描。子代理可能读取过您从未审查过的文件、网页或命令输出,而这些来源中的文本可能携带针对主对话的指令。扫描从不删除或改写任何内容;它会做出两种您可能在报告中注意到的更改:

998 1003 

999* **反斜杠插入**:扫描在模仿 Claude Code 自己输出的文本中插入反斜杠,例如 `<system-reminder>` 标签或以 `Human:` 或 `Assistant:` 开头的行,所以模仿读作普通文本而不是被误认为是对话的一部分。1004* **插入反斜杠**:扫描会在模仿 Claude Code 自身输出的文本中插入反斜杠,例如 `<system-reminder>` 标签,或以 `Human:` 或 `Assistant:` 开头的行,使这些模仿内容被当作普通文本读取,而不会被误认为是对话的一部分。

1000* **标记行**:当报告模仿 `<system-reminder>` 之类的标签或提及权限设置(例如 `bypassPermissions` 或 `--dangerously-skip-permissions`)时,扫描前置一行以 `[harness: subagent output matched instruction-shaped pattern(s):` 开头。权限设置提及获得标记行,但文本本身保持原样。1005* **标记行**:当报告模仿了 `<system-reminder>` 之类的标签,或提及 `bypassPermissions` 或 `--dangerously-skip-permissions` 等权限设置时,扫描会在开头添加一行以 `[harness: subagent output matched instruction-shaped pattern(s):` 开头的内容。提及权限设置的报告会获得标记行,但文本本身保持原样。

1001 1006 

1002扫描不判断内容是否恶意,它不改变报告中的指令能做什么:报告导致 Claude 进行的工具调用仍然通过会话的 [权限检查](/docs/zh-CN/permissions) 和 [沙箱](/docs/zh-CN/sandboxing)。它不是 [限制 subagent 可以到达的内容](#control-subagent-capabilities) 的替代品。1007扫描不会判断内容是否恶意,也不会改变报告中的指令所能产生的效果:报告促使 Claude 发起的工具调用仍然要经过会话的[权限检查](/docs/zh-CN/permissions)和[沙箱隔离](/docs/zh-CN/sandboxing)。它不能替代[限制子代理可访问的范围](#control-subagent-capabilities)。

1003 1008 

1004返回给 Claude 的报告作为 subagent 的结果也在标题下到达,标记为 subagent 输出。标题说明报告中的指令或批准声明是 subagent 的话语,不从您那里获得任何权限。1009作为子代理结果返回给 Claude 的报告还会带有一个标题,将其标记为子代理输出。该标题说明报告中的指令或批准声明是子代理的话语,并不具备来自您的任何权威。

1005 1010 

1006[后台 subagent 的报告](#run-subagents-in-foreground-or-background) 在完成通知内到达,标记为自动化事件而不是来自您的消息。1011[后台子代理的报告](#run-subagents-in-foreground-or-background)会包含在完成通知中送达,该通知被标记为自动化事件,而不是来自您的消息。

1007 1012 

1008<Note>1013<Note>

1009 Subagent 输出扫描需要 Claude Code v2.1.210 或更高版本。1014 子代理输出扫描需要 Claude Code v2.1.210 或更高版本。

1010</Note>1015</Note>

1011 1016 

1012<h3 id="common-patterns">1017<h3 id="common-patterns">


1014</h3>1019</h3>

1015 1020 

1016<h4 id="isolate-high-volume-operations">1021<h4 id="isolate-high-volume-operations">

1017 隔离高容量操作1022 隔离高输出量操作

1018</h4>1023</h4>

1019 1024 

1020subagents 最有效的用途之一是隔离产生大量输出的操作。运行测试、获取文档或处理日志文件可能会消耗大量上下文。通过将这些委托给 subagent,详细输出保留在 subagent 的上下文中,而只有相关摘要返回到您的主对话。1025子代理最有效的用途之一是隔离会产生大量输出的操作。运行测试、获取文档或处理日志文件可能会消耗大量上下文。将这些操作委托给子代理后,冗长的输出会留在子代理的上下文中,只有相关摘要会返回到您的主对话。

1021 1026 

1022```text wrap theme={null}1027```text wrap theme={null}

1023Use a subagent to run the test suite and report only the failing tests with their error messages1028Use a subagent to run the test suite and report only the failing tests with their error messages

1024```1029```

1025 1030 

1026<h4 id="run-parallel-research">1031<h4 id="run-parallel-research">

1027 运行并行研究1032 并行研究

1028</h4>1033</h4>

1029 1034 

1030对于独立的调查,生成多个 subagents 以同时工作:1035对于相互独立的调查,可以生成多个子代理同时工作:

1031 1036 

1032```text wrap theme={null}1037```text wrap theme={null}

1033Research the authentication, database, and API modules in parallel using separate subagents1038Research the authentication, database, and API modules in parallel using separate subagents

1034```1039```

1035 1040 

1036每个 subagent 独立探索其区域,然后 Claude 综合这些发现。当研究路径彼此不依赖时,这效果最好。1041每个子代理独立探索各自的领域,然后由 Claude 综合这些发现。当各条研究路径互不依赖时,这种方式效果最好。

1037 1042 

1038<Warning>1043<Warning>

1039 当 subagents 完成时,它们的结果返回到您的主对话。运行许多 subagents,每个都返回详细结果,可能会消耗大量上下文,每个 subagent 在运行时花费自己的令牌。1044 子代理完成后,其结果会返回到您的主对话。运行许多各自返回详细结果的子代理可能会消耗大量上下文,而且每个子代理在运行时也会消耗自己的 token。

1040</Warning>1045</Warning>

1041 1046 

1042对于需要持续并行运行或不适合一个上下文窗口的工作,在 [单独的会话](/docs/zh-CN/agents) 中运行它,让 Claude [在它们之间传递发现](/docs/zh-CN/cross-session-messaging)。1047对于需要持续并行运行或无法容纳在一个上下文窗口中的工作,请在[单独的会话](/docs/zh-CN/agents)中运行,并让 Claude [在会话之间传递发现](/docs/zh-CN/cross-session-messaging)。

1043 1048 

1044<h4 id="chain-subagents">1049<h4 id="chain-subagents">

1045 链接 subagents1050 串联子代理

1046</h4>1051</h4>

1047 1052 

1048对于多步骤工作流,要求 Claude 按顺序使用 subagents。每个 subagent 完成其任务并将结果返回给 Claude,然后将相关上下文传递给下一个 subagent。1053对于多步骤工作流,可以要求 Claude 依次使用多个子代理。每个子代理完成其任务后将结果返回给 Claude,再由 Claude 将相关上下文传递给下一个子代理。

1049 1054 

1050```text wrap theme={null}1055```text wrap theme={null}

1051Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them1056Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

1052```1057```

1053 1058 

1054<h3 id="choose-between-subagents-and-main-conversation">1059<h3 id="choose-between-subagents-and-main-conversation">

1055 在 subagents 和主对话之间选择1060 在子代理和主对话之间选择

1056</h3>1061</h3>

1057 1062 

1058在以下情况下使用 **主对话**:1063在以下情况下使用**主对话**:

1059 1064 

1060* 任务需要频繁的来回或迭代细化1065* 任务需要频繁来回交流或迭代完善

1061* 多个阶段共享重要上下文,例如规划、实现和测试1066* 多个阶段(例如规划、实现和测试)共享大量上下文

1062* 您正在进行快速、有针对性的更改1067* 您要进行快速、有针对性的更改

1063* 延迟很重要。不是 [fork](#fork-the-current-conversation) 的 subagent 从头开始,可能需要时间来收集上下文1068* 延迟很重要。非 [fork](#fork-the-current-conversation) 的子代理从零开始,可能需要时间来收集上下文

1064 1069 

1065在以下情况下使用 **subagents**:1070在以下情况下使用**子代理**:

1066 1071 

1067* 任务产生您不需要在主上下文中的详细输出1072* 任务会产生您在主上下文中不需要的冗长输出

1068* 您想强制执行特定的工具限制或权限1073* 您想强制执行特定的工具限制或权限

1069* 工作是自包含的,可以返回摘要1074* 工作是自成一体的,可以返回一份摘要

1070 1075 

1071当您想要可重用的提示或在主对话上下文中运行的工作流而不是隔离的 subagent 上下文时,请改为考虑 [Skills](/docs/zh-CN/skills)。1076如果您想要可复用的提示词或工作流,并希望它们在主对话上下文中而不是隔离的子代理上下文中运行,请考虑改用 [Skills](/docs/zh-CN/skills)。

1072 1077 

1073对于关于对话中已有内容的问题,使用 [`/btw`](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw) 而不是 subagent。它看到您的完整上下文但没有工具访问,答案不添加到历史记录。1078对于关于对话中已有内容的问题,请使用 [`/btw`](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw) 而不是子代理。它能看到您的完整上下文,但无法使用工具,且答案不会添加到历史记录中。

1074 1079 

1075<h3 id="let-subagents-spawn-their-own-subagents">1080<h3 id="let-subagents-spawn-their-own-subagents">

1076 让 subagents 生成自己的 subagents1081 让子代理生成自己的子代理

1077</h3>1082</h3>

1078 1083 

1079默认情况下,subagent 可以生成自己的 subagents,最多在主对话下方三层。在深度限制处,Claude Code 从除 [fork](#fork-the-current-conversation) 外的每个 subagent 中扣留 `Agent` 工具,所以限制处的 subagent 自己进行委托工作并返回一个摘要。限制处的 fork 在其继承的工具列表中保持 `Agent`,但工具返回错误而不是生成。1084默认情况下,子代理可以生成自己的子代理,最多可达主对话之下三层。达到深度限制时,Claude Code 会从除 [fork](#fork-the-current-conversation) 之外的所有子代理中移除 `Agent` 工具,因此处于限制层级的子代理会自己完成委托的工作并返回一份摘要。处于限制层级的 fork 在其继承的工具列表中仍保留 `Agent`,但该工具会返回错误而不是生成子代理。

1080 1085 

1081嵌套 subagents 适合委托任务本身分裂成并行子任务,例如审查者 subagent 为每个发现分派验证者。在交互式会话中,只有顶级 subagent 的摘要返回给您,中间输出保留在 subagent 的上下文中:生成后台 subagents 的 subagent 在完成之前等待其结果。在 [非交互模式](/docs/zh-CN/headless) 和 Agent SDK 中,启动 subagent 不等待,所以在其启动器已结束后完成的嵌套后台 subagent 报告给您的主对话。1086嵌套子代理适用于本身可拆分为并行子任务的委托任务,例如一个审查子代理为每项发现分派一个验证者。在交互式会话中,只有顶层子代理的摘要会返回给您,中间输出不会进入您的主对话:启动后台子代理的子代理会等待它们的结果后再结束。在[非交互模式](/docs/zh-CN/headless)和 Agent SDK 中,发起启动的子代理不会等待,因此如果嵌套的后台子代理在其启动者结束后才完成,它会改为向您的主对话报告。

1082 1087 

1083要改变限制,将 [`CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH`](/docs/zh-CN/env-vars) 设置为您想要在主对话下方的 subagent 层数。例如,此条目在 [`settings.json`](/docs/zh-CN/settings) 中将嵌套限制为两层:1088要更改该限制,请将 [`CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH`](/docs/zh-CN/env-vars) 设置为您希望在主对话之下允许的子代理层数。例如,[`settings.json`](/docs/zh-CN/settings) 中的以下条目将嵌套限制为两层:

1084 1089 

1085```json theme={null}1090```json theme={null}

1086{1091{


1090}1095}

1091```1096```

1092 1097 

1093使用此值,您的 subagents 可以委托给自己的第二层,该第二层无法进一步委托。设置 `1` 以关闭嵌套。1098使用此值时,您的子代理可以委托给它们自己的第二层子代理,而第二层无法再进一步委托。设置为 `1` 可关闭嵌套。

1094 1099 

1095嵌套 subagent 的配置方式与顶级 subagent 相同,并从相同的 [scopes](#choose-the-subagent-scope) 解析。要保持一个 subagent 在嵌套打开时不生成,例如应保持只读的审查者,从其 [`tools`](#available-tools) 列表中省略 `Agent` 或将其添加到 `disallowedTools`。1100嵌套子代理的配置方式与顶层子代理相同,并从相同的[作用域](#choose-the-subagent-scope)中解析。要在嵌套开启时阻止某个子代理生成子代理(例如应保持只读的审查者),请从其 [`tools`](#available-tools) 列表中省略 `Agent`,或将其添加到 `disallowedTools`。

1096 1101 

1097Claude Code 在提示输入下方的 subagent 面板中将嵌套 subagents 显示为树,并用 `(+N)` 后代计数标记面板中仍有后代的每一行。打开一行以查看该 subagent 的兄弟和直接子代,以及返回到 `main` 的路径。1102在终端中,Claude Code 会在输入框下方的子代理面板中以树形显示嵌套子代理,并为面板中仍有后代的每一行标注 `(+N)`,表示其后代数量。打开某一行即可查看该子代理的同级和直接子级,以及返回 `main` 的路径。

1098 1103 

1099<Note>1104<Note>

1100 早期版本使用了不同的默认值:1105 早期版本使用不同的默认值:

1101 1106 

1102 * **v2.1.172 到 v2.1.216**:subagents 默认可以嵌套,最多五层深,限制无法更改。1107 * **v2.1.172 至 v2.1.216**:子代理默认可以嵌套,最多五层,且该限制无法更改。

1103 * **v2.1.217 到 v2.1.218**:限制默认为一,所以 subagent 无法生成自己的,除非您提高它;v2.1.219 将默认值提高到三。1108 * **v2.1.217 至 v2.1.218**:该限制默认为一,因此除非您调高,否则子代理无法生成自己的子代理;v2.1.219 将默认值提高到三。

1104</Note>1109</Note>

1105 1110 

1106<h3 id="concurrent-subagent-limit">1111<h3 id="concurrent-subagent-limit">

1107 并发 subagent 限制1112 并发子代理限制

1108</h3>1113</h3>

1109 1114 

1110两个限制控制 subagent 使用,每个都有自己的变量:这个限制阻止 Claude 在太多运行时生成更多 subagents,[深度限制](#let-subagents-spawn-their-own-subagents) 限制 subagents 嵌套的深度。对于 Claude 在会话中可以生成的 subagents 总数没有限制。1115有两个限制控制子代理的使用,各自对应一个变量:本限制在运行中的子代理过多时阻止 Claude 生成更多子代理,而[深度限制](#let-subagents-spawn-their-own-subagents)则限制子代理的嵌套深度。Claude 在一个会话中可以生成的子代理总数没有限制。

1111 1116 

1112默认情况下,当 20 个 subagents 在会话中运行时,使用 Agent 工具生成另一个失败,出现 `Concurrent subagent limit reached`,错误告诉 Claude 不要重试。当运行计数降至限制以下时,生成再次成功。要改变限制,将 [`CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS`](/docs/zh-CN/env-vars) 设置为任何正整数。具有 [ultracode](/docs/zh-CN/model-config#adjust-effort-level) 活跃的会话被豁免:限制在那里不被强制。需要 Claude Code v2.1.217 或更高版本。1117默认情况下,当会话中有 20 个子代理正在运行时,使用 Agent 工具再生成一个会失败并返回 `Concurrent subagent limit reached`,且该错误会告知 Claude 不要重试。当运行数量降到限制以下时,即可再次成功生成。要更改该限制,请将 [`CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS`](/docs/zh-CN/env-vars) 设置为任意正整数。启用了 [ultracode](/docs/zh-CN/model-config#adjust-effort-level) 的会话不受此限制约束。需要 Claude Code v2.1.217 或更高版本。

1113 1118 

1114限制仅阻止 Claude 使用 Agent 工具生成的 subagents,但其他运行占用相同的槽位:1119该限制只阻止 Claude 使用 Agent 工具生成的子代理,但其他运行也会占用相同的槽位:

1115 1120 

1116* 您使用 [`/subtask`](#fork-the-current-conversation) 启动的进程中 fork 在运行时占用一个槽位,永远不会被限制阻止。1121* 您通过 [`/subtask`](#fork-the-current-conversation) 启动的会话内 fork 在运行时会占用一个槽位,且永远不会被该限制阻止。

1117* [恢复已完成的 subagent](#resume-subagents) 占用新槽位而不检查限制,所以恢复可以将运行计数推过限制。1122* [恢复](#resume-subagents)已完成的子代理会占用一个新槽位,且不检查限制,因此恢复操作可能使运行数量超过限制。

1118 1123 

1119其他功能运行的 Agents,例如 [workflow](/docs/zh-CN/workflows) agents 和 [agent team](/docs/zh-CN/agent-teams) 队友,遵循自己的限制。1124其他功能运行的 Agent,例如[工作流](/docs/zh-CN/workflows) Agent 和 [agent team](/docs/zh-CN/agent-teams) 队友,则遵循各自的限制。

1120 1125 

1121<h3 id="manage-subagent-context">1126<h3 id="manage-subagent-context">

1122 管理 subagent 上下文1127 管理子代理上下文

1123</h3>1128</h3>

1124 1129 

1125<h4 id="what-loads-at-startup">1130<h4 id="what-loads-at-startup">

1126 启动时加载的内容1131 启动时加载的内容

1127</h4>1132</h4>

1128 1133 

1129每个 subagent 都以新鲜的隔离上下文窗口开始。它看不到您的对话历史、您已经调用的技能或 Claude 已经读取的文件。Claude 编写一条委托消息来总结任务,subagent 从那里开始工作。例外是 [fork](#fork-the-current-conversation),它继承父对话而不是从头开始。1134每个子代理都从一个全新的、隔离的上下文窗口开始。它看不到您的对话历史、您已调用的 skill 或 Claude 已读取的文件。Claude 会编写一条概括任务的委托消息,子代理以此为起点开展工作。例外是 [fork](#fork-the-current-conversation),它会继承父对话,而不是从零开始。

1130 1135 

1131非 fork subagent 的初始上下文包含:1136非 fork 子代理的初始上下文包含:

1132 1137 

1133* **系统提示**:代理自己的提示加上 Claude Code 附加的环境详情,而不是 Claude Code 系统提示。自定义 subagents 在 [markdown 正文](#write-subagent-files) 或 `prompt` 字段中定义它们。内置代理有预定义的提示。1138* **系统提示词**:Agent 自身的提示词加上 Claude Code 附加的环境详情,而不是 Claude Code 系统提示词。自定义子代理在 [markdown 正文](#write-subagent-files)或 `prompt` 字段中定义其系统提示词。内置 Agent 具有预定义的提示词。

1134* **任务消息**:Claude 在移交工作时编写的委托提示。1139* **任务消息**:Claude 在移交工作时编写的委托提示词。

1135* **CLAUDE.md 文件**:主对话加载的 [CLAUDE.md 层次结构](/docs/zh-CN/memory#how-claude-md-files-load) 的每个级别,包括 `~/.claude/CLAUDE.md`、项目规则、`CLAUDE.local.md`、托管策略文件和任何 [`AGENTS.md` 文件](/docs/zh-CN/memory#agents-md) 作为项目指令加载。内置的 Explore 和 Plan 代理跳过这个。Subagent 的定义设置 [`omitClaudeMd`](#supported-frontmatter-fields) 时仅加载托管策略文件,或当定义来自 [托管设置](#choose-the-subagent-scope) 时不加载任何文件。1140* **CLAUDE.md 文件**:主对话所加载的 [CLAUDE.md 层级结构](/docs/zh-CN/memory#how-claude-md-files-load)中的每一级,包括 `~/.claude/CLAUDE.md`、项目规则、`CLAUDE.local.md`、托管策略文件,以及作为项目指令加载的任何 [`AGENTS.md` 文件](/docs/zh-CN/memory#agents-md)。内置的 Explore 和 Plan Agent 会跳过这些。定义中设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 的子代理只加载托管策略文件;如果该定义来自[托管设置](#choose-the-subagent-scope),则一个也不加载。

1136* **Git 状态**:在 subagent 启动时从您的存储库读取的快照。在 Git 存储库外或每当快照关闭时不存在;请参阅 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions)。Explore 和 Plan 无论如何都跳过它。1141* **Git 状态**:子代理启动时 Claude Code 从您的仓库读取的快照。在 Git 仓库之外或快照被关闭时不存在;请参阅 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions)。Explore 和 Plan 无论如何都会跳过它。

1137* **预加载的技能**:代理的 [`skills` 字段](#preload-skills-into-subagents) 中命名的任何技能的完整内容。内置代理不预加载技能。1142* **预加载的 skill**:Agent 的 [`skills` 字段](#preload-skills-into-subagents)中列出的每个 skill 的完整内容。内置 Agent 不预加载 skill。

1138* **兄弟名单**:[系统提醒](/docs/zh-CN/glossary#system-reminder),列出 `main` 和会话中的每个其他命名代理,每个都是 [`SendMessage`](#resume-subagents) 的有效 `to` 值。需要 Claude Code v2.1.206 或更高版本。名单仅在 subagent 的工具包括 `SendMessage` 且至少有一个其他代理有名称时出现,无论 Claude 在生成时命名它还是它作为 [agent team](/docs/zh-CN/agent-teams) 队友运行。它是 subagent 启动时拍摄的快照,所以稍后命名的代理不会出现。1143* **同级名单**:一条[系统提醒](/docs/zh-CN/glossary#system-reminder),列出 `main` 以及会话中所有其他已命名的 Agent,每一个都是 [`SendMessage`](#resume-subagents) 的有效 `to` 值。需要 Claude Code v2.1.206 或更高版本。仅当子代理的工具包含 `SendMessage` 且至少有一个其他 Agent 拥有名称时才会出现该名单,无论该名称是 Claude 在生成时指定的,还是该 Agent 作为 [agent team](/docs/zh-CN/agent-teams) 队友运行。名单是子代理启动时拍摄的快照,因此之后命名的 Agent 不会出现在其中。

1139 1144 

1140要启动您自己的 subagents 而不使用用户、项目和本地 CLAUDE.md 文件,在其 frontmatter 中设置 [`omitClaudeMd: true`](#supported-frontmatter-fields) 或 `--agents` JSON。1145要在不加载用户、项目和本地 CLAUDE.md 文件的情况下启动您自己的某个子代理,请在其 frontmatter 或 `--agents` JSON 中设置 [`omitClaudeMd: true`](#supported-frontmatter-fields)。

1141 1146 

1142主对话仍然有您的完整 CLAUDE.md 当它读取这些 subagents 的结果时,所以大多数规则不需要到达 subagent 本身。如果规则必须,例如"忽略 `vendor/` 目录",在您给 Claude 委托时的提示中重新陈述它。1147主对话在读取这些子代理的结果时仍拥有您的完整 CLAUDE.md,因此大多数规则无需传达给子代理本身。如果某条规则必须传达,例如"忽略 `vendor/` 目录",请在委托时给 Claude 的提示词中重新说明。

1143 1148 

1144您无法改变哪些 subagents 接收 git 状态。只有 Explore 和 Plan 跳过它。1149您无法更改哪些子代理会接收 Git 状态。只有 Explore 和 Plan 会跳过它。

1145 1150 

1146某些主对话状态永远不会到达非 fork subagent:1151某些主对话状态永远不会传递给非 fork 子代理:

1147 1152 

1148* **输出样式**:subagent 运行自己的系统提示,所以您的 [输出样式](/docs/zh-CN/output-styles) 不会塑造其响应,除了在 [fork](#fork-the-current-conversation) 中。1153* **输出样式**:子代理运行自己的系统提示词,因此您的[输出样式](/docs/zh-CN/output-styles)不会影响其回复,[fork](#fork-the-current-conversation) 除外。

1149* **自动内存**:主对话的 [自动内存](/docs/zh-CN/memory#auto-memory) 不被加载。要给 subagent 自己的持久内存,使用 [`memory` 字段](#enable-persistent-memory)。1154* **自动记忆**:不会加载主对话的[自动记忆](/docs/zh-CN/memory#auto-memory)。要为子代理提供其自身的持久记忆,请使用 [`memory` 字段](#enable-persistent-memory)。

1150* **上下文窗口大小**:subagent 的上下文窗口由其自己的模型调整大小,而不是父级的。委托给具有较小窗口的模型给该 subagent 较小的窗口。1155* **上下文窗口大小**:子代理的上下文窗口大小由其自身的模型决定,而不是由父级决定。委托给上下文窗口较小的模型时,该子代理获得的也是较小的窗口。

1151 1156 

1152<h4 id="resume-subagents">1157<h4 id="resume-subagents">

1153 恢复 subagents1158 恢复子代理

1154</h4>1159</h4>

1155 1160 

1156每个 subagent 调用都会创建一个新实例而不是继续早期的。要继续现有 subagent 的工作而不是重新开始,要求 Claude 恢复它。1161每次调用子代理都会创建一个新实例,而不是延续之前的实例。要继续某个现有子代理的工作而不是从头开始,请让 Claude 恢复它。

1157 1162 

1158恢复的 subagents 保留其完整的对话历史,包括所有以前的工具调用、结果和推理。如果 subagent 生成了 [自己的后台 subagents](#let-subagents-spawn-their-own-subagents),该历史包括它们在运行时传递的结果。Subagent 从它停止的地方继续,而不是从头开始。1163恢复的子代理会保留其完整的对话历史,包括之前所有的工具调用、结果和推理。如果该子代理生成过[自己的后台子代理](#let-subagents-spawn-their-own-subagents),该历史还包括这些后台子代理在其运行期间交付的结果。子代理会从停止的地方继续,而不是从零开始。

1159 1164 

1160* 当 subagent 完成时,Claude 接收其代理 ID。1165* 子代理完成时,Claude 会收到其 Agent ID。

1161* 内置的 Explore 和 Plan 代理是一次性的,不返回代理 ID,所以 Claude 无法恢复它们。当您需要继续工作时,使用 `general-purpose` 或自定义 subagent。1166* 内置的 Explore 和 Plan Agent 是一次性的,不返回 Agent ID,因此 Claude 无法恢复它们。需要继续工作时,请使用 `general-purpose` 或自定义子代理。

1162* 当 subagent 在其 [`maxTurns`](#supported-frontmatter-fields) 限制处停止时,Claude Code 将返回的输出标记为部分。对于返回代理 ID 的 subagents,Claude Code 也在结果中注明 Claude 可以消息 subagent 以从它停止的地方继续。1167* 当子代理因达到 [`maxTurns`](#supported-frontmatter-fields) 限制而停止时,Claude Code 会将返回的输出标记为部分结果。对于会返回 Agent ID 的子代理,Claude Code 还会在结果中注明 Claude 可以向该子代理发送消息,让它从停止处继续。

1163 1168 

1164Claude 使用 `SendMessage` 工具,将代理的 ID 或名称作为 `to` 字段来恢复它。`SendMessage` 不需要启用 [agent teams](/docs/zh-CN/agent-teams);只有结构化的团队协议消息,例如 `shutdown_request` 和 `plan_approval_response`,才需要启用。除了 subagents 和队友,在启用跨会话消息的会话中,Claude 可以使用相同的工具来消息 [您的其他 Claude Code 会话](/docs/zh-CN/cross-session-messaging),在这台机器上或 [超越它](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)。1169Claude 使用 `SendMessage` 工具,以 Agent 的 ID 或名称作为 `to` 字段来恢复它。`SendMessage` 不要求启用 [agent teams](/docs/zh-CN/agent-teams);只有 `shutdown_request` 和 `plan_approval_response` 等结构化团队协议消息才需要。除了子代理和队友之外,在启用了跨会话消息的会话中,Claude 还可以使用同一工具向[您的其他 Claude Code 会话](/docs/zh-CN/cross-session-messaging)发送消息,无论它们在本机还是[其他机器上](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)。

1165 1170 

1166要恢复 subagent,要求 Claude 继续之前的工作:1171要恢复子代理,请让 Claude 继续之前的工作:

1167 1172 

1168```text wrap theme={null}1173```text wrap theme={null}

1169Use the code-reviewer subagent to review the authentication module1174Use the code-reviewer subagent to review the authentication module


1173[Claude resumes the subagent with full context from previous conversation]1178[Claude resumes the subagent with full context from previous conversation]

1174```1179```

1175 1180 

1176当 Claude 使用 `SendMessage` 工具向完成的 subagent 发送消息时,subagent 在后台恢复,无需新的 `Agent` 调用。同样适用于 Claude 用 `TaskStop` 工具停止的 subagent,一旦其停止的运行已退出。恢复的运行保持 [subagent 首次运行时的工具集](#run-subagents-in-foreground-or-background),可以继续读取 [原始运行预热的提示缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)。1181当 Claude 使用 `SendMessage` 工具向已完成的子代理发送消息时,该子代理会在后台恢复,无需新的 `Agent` 调用。对于 Claude 使用 `TaskStop` 工具停止的子代理,在其被停止的运行退出后同样适用。恢复后的运行会保留[子代理首次运行时的工具集](#run-subagents-in-foreground-or-background),并且可以继续读取[原始运行预热的提示缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)。

1177 1182 

1178具有 `SendMessage` 工具的 subagent 也可以发送该消息。在交互式会话中,恢复的代理然后报告回恢复它的 subagent,而不是您的主对话。该 subagent 在完成自己的工作之前等待结果。当 subagent 消息它报告给的代理(例如自己的启动器)时,Claude Code 恢复该代理而不重定向其结果。1183拥有 `SendMessage` 工具的子代理也可以发送这种消息。在交互式会话中,被恢复的 Agent 随后会向恢复它的那个子代理汇报,而不是向您的主对话汇报。该子代理会等待结果后再完成自己的工作。当子代理向它所汇报的 Agent(例如其自身的启动者)发送消息时,Claude Code 会恢复该 Agent,且不会重定向其结果。

1179 1184 

1180您自己停止的 subagent,使用 `/tasks` 中的 `x` 或 SDK `stop_task` 请求,不会自动恢复。如果 Claude 向它发送消息,消息被拒绝,Claude 被告知代理已被取消。1185由您亲自停止的子代理(通过在 `/tasks` 中按 `x` 或发出 SDK `stop_task` 请求)不会自动恢复。如果 Claude 向它发送消息,该消息会被拒绝,并告知 Claude 该 Agent 已被取消。

1181 1186 

1182当 [该 subagent 的行仍在 subagent 面板中](#run-subagents-in-foreground-or-background) 时,输入到其转录以自己恢复它。之后,来自 Claude 的消息可以再次自动恢复它。1187当[该子代理所在的行仍在子代理面板中](#run-subagents-in-foreground-or-background)时,您可以在其会话记录中输入内容来亲自恢复它。此后,来自 Claude 的消息即可再次自动恢复它。

1183 1188 

1184恢复在相同 ID 下启动代理的新运行,所以已经失败或完成的 subagent 在任务列表和 Agent SDK 的任务事件中再次显示为运行。在 v2.1.205 之前,它在恢复的运行工作时保持显示其早期的失败或完成状态。1189恢复会在同一 ID 下启动该 Agent 的一次新运行,因此已失败或已完成的子代理会在任务列表和 Agent SDK 的任务事件中再次显示为运行中。在 v2.1.205 之前,在恢复的运行进行期间,它仍会显示之前的失败或已完成状态。

1185 1190 

1186从 v2.1.199 开始,`SendMessage` 检查名称是否仍然指向它在对话中早期到达的同一代理。如果较新的代理已经采用了该名称,例如重新生成的后台代理重新使用了它,Claude Code 会拒绝发送,而不是将其传递给错误的代理,错误会报告该名称现在到达的代理,以便 Claude 可以重新定向。要在它仍在运行时到达早期的代理,Claude 通过其生成结果中的代理 ID 来寻址它。检查的范围是当前对话,并在 `/clear` 时重置。1191从 v2.1.199 开始,`SendMessage` 会检查某个名称是否仍指向对话中先前通过该名称联系到的同一个 Agent。如果该名称已被较新的 Agent 占用(例如重新生成的后台 Agent 复用了该名称),Claude Code 会拒绝发送,而不是将消息送达错误的 Agent,并且错误会报告该名称现在指向哪个 Agent,以便 Claude 重新指定目标。要在较早的 Agent 仍在运行时联系它,Claude 会使用生成该 Agent 时收到的 Agent ID 来寻址。此检查仅限于当前对话,并会在 `/clear` 时重置。

1187 1192 

1188从 v2.1.198 开始,subagent 将来自启动它的代理的消息视为正常任务方向,包括中途任务方向更正,并在其自己的权限设置内对其进行操作。无论谁发送消息,两个限制仍然成立:来自任何代理的消息都不计为您对待处理权限提示的批准,任何代理消息都无法改变 subagent 的权限设置、`CLAUDE.md` 或配置。只有权限系统或您自己的消息可以授予批准。1193子代理会将来自启动它的 Agent 的消息视为正常的任务指示,包括任务进行中的方向修正,并在其自身的权限设置范围内执行。无论消息由谁发送,以下两项限制始终有效:任何 Agent 发来的消息都不算作您对待处理权限提示的批准;任何 Agent 消息都无法更改子代理的权限设置、`CLAUDE.md` 或配置。只有权限系统或您本人的消息才能给予批准。

1189 1194 

1190您也可以要求 Claude 提供代理 ID,如果您想明确引用它,或在 `~/.claude/projects/{project}/{sessionId}/subagents/` 的转录文件中找到 ID。每个转录存储为 `agent-{agentId}.jsonl`。1195如果您想明确引用某个子代理,也可以向 Claude 询问其 Agent ID,或在 `~/.claude/projects/{project}/{sessionId}/subagents/` 下的会话记录文件中查找 ID。每份会话记录存储为 `agent-{agentId}.jsonl`。

1191 1196 

1192Subagent 转录独立于主对话持久化:1197子代理会话记录独立于主对话持久保存:

1193 1198 

1194* **主对话压缩**:当主对话压缩时,subagent 转录不受影响。它们存储在单独的文件中。1199* **主对话压缩**:主对话压缩时,子代理会话记录不受影响。它们存储在单独的文件中。

1195* **会话持久性**:Subagent 转录在其会话中持久化。您可以通过恢复相同的会话在重启 Claude Code 后 [恢复 subagent](#resume-subagents)。1200* **会话持久性**:子代理会话记录在其所属会话内持久保存。重启 Claude Code 后,您可以通过恢复同一会话来[恢复子代理](#resume-subagents)。

1196* **自动清理**:Claude Code 根据 `cleanupPeriodDays` 保留期(默认为 30 天)删除 subagent 转录,遵循 [保留扫描规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)。1201* **自动清理**:Claude Code 会在 `cleanupPeriodDays` 保留期(默认为 30 天)过后删除子代理会话记录,遵循[保留清理规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)。

1197 1202 

1198<h4 id="auto-compaction">1203<h4 id="auto-compaction">

1199 自动压缩1204 上下文自动压缩

1200</h4>1205</h4>

1201 1206 

1202Subagents 支持使用与主对话相同的逻辑进行自动压缩。压缩在相同条件下触发,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 也适用于 subagents。有关何时覆盖生效的信息,请参阅 [environment variables](/docs/zh-CN/env-vars)。1207子代理支持使用与主对话相同的逻辑进行自动压缩。压缩在相同条件下触发,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 同样适用于子代理。有关该覆盖何时生效,请参阅[环境变量](/docs/zh-CN/env-vars)。

1203 1208 

1204压缩事件记录在 subagent 转录文件中:1209压缩事件会记录在子代理会话记录文件中:

1205 1210 

1206```json theme={null}1211```json theme={null}

1207{1212{


1214}1219}

1215```1220```

1216 1221 

1217`preTokens` 值显示压缩发生前使用了多少令牌。1222`preTokens` 值表示压缩发生前已使用的 token 数量。

1218 1223 

1219<h2 id="fork-the-current-conversation">1224<h2 id="fork-the-current-conversation">

1220 分叉当前对话1225 分叉当前对话


1253| `x` | 如果分叉正在运行,停止它;如果不再运行,关闭其行。在主会话行或您使用 `Enter` 打开其转录的分叉行上,`x` 会输入到提示中 |1258| `x` | 如果分叉正在运行,停止它;如果不再运行,关闭其行。在主会话行或您使用 `Enter` 打开其转录的分叉行上,`x` 会输入到提示中 |

1254| `Esc` | 将焦点返回到提示输入 |1259| `Esc` | 将焦点返回到提示输入 |

1255 1260 

1256打开分叉或 subagent 的转录后,后续消息和 [skills](/docs/zh-CN/skills) 会发送到该代理,但内置命令仍在您的主对话中运行。从 v2.1.199 开始,在该视图中键入 `/model` 或 `/fast` 会显示一条通知,说明它改变主对话的模型或快速模式,而不是所查看代理的,而不是静默运行它。1261打开分叉或子代理的会话记录后,后续消息和 [skill](/docs/zh-CN/skills) 会发送到该 Agent,而内置命令会发送到您的主对话,并有以下保护措施:

1262 

1263* `/compact`、`/clear` 和 `/rewind` 作用于主对话,因此 Claude Code 在从该视图运行其中任何一个之前会要求您确认。

1264* `/model` 和 `/fast` 设置的是主对话的模型和快速模式,而不是所查看 Agent 的,因此它们不会从该视图运行。一条通知会告诉您原因。

1265 

1266要让所查看的 Agent 在其等待的工作完成之前读取您的消息,请使用 [`Ctrl+Enter` 或 `Ctrl+X Ctrl+S`](/docs/zh-CN/keybindings#chat-actions) 发送。该 Agent 正在等待的任何可以移至[后台](/docs/zh-CN/tools-reference#background-commands)的 shell 命令或子代理都会移至后台并继续运行。当该 Agent 正在编写回复,或正在等待无法移至后台的工作时,它会继续进行,并在完成后读取您的消息。需要 Claude Code v2.1.286 或更高版本。

1257 1267 

1258<h3 id="how-forks-differ-from-other-subagents">1268<h3 id="how-forks-differ-from-other-subagents">

1259 分叉与其他 subagents 的区别1269 分叉与其他 subagents 的区别

Details

231 231 

232当前台命令在完成前达到其超时时,Claude Code 会将其移到后台而不是停止它,除非命令以 `sleep` 开头。移动的命令的[时间限制](#time-limit-for-background-commands)从移动时开始计算,前台子代理的移动命令仍然在该子代理的运行结束时停止。232当前台命令在完成前达到其超时时,Claude Code 会将其移到后台而不是停止它,除非命令以 `sleep` 开头。移动的命令的[时间限制](#time-limit-for-background-commands)从移动时开始计算,前台子代理的移动命令仍然在该子代理的运行结束时停止。

233 233 

234设置 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/zh-CN/env-vars#variables) 禁用自动后台处理以及其余后台任务功能。234设置 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/zh-CN/env-vars#variables) 或在 [bare 模式](/docs/zh-CN/headless#start-faster-with-bare-mode)下运行会禁用自动后台处理以及其余后台任务功能,因此达到超时的命令会改为停止。

235 235 

236移到后台的命令的结果说明发生了什么:236移到后台的命令的结果说明发生了什么:

237 237 


401 401 

402在截止时间时,监视结束。Claude 会收到一个通知,因此如果仍然需要,它可以重新启动监视。402在截止时间时,监视结束。Claude 会收到一个通知,因此如果仍然需要,它可以重新启动监视。

403 403 

404通过要求 Claude 取消监视或结束会话来停止监视。当您停止启动了监视的 [subagent](/docs/zh-CN/sub-agents)(例如来自 `/tasks`)时,这些监视会随之停止。404通过要求 Claude 取消监视或结束会话来停止监视。当您停止启动了监视的 [子代理](/docs/zh-CN/sub-agents)(例如来自 `/tasks`)时,这些监视会随之停止。

405 405 

406当 Monitor 运行命令时,它使用与 Bash 相同的 [权限规则](/docs/zh-CN/permissions#tool-specific-permission-rules),因此您为 Bash 设置的 `allow` 和 `deny` 模式也适用于此处。当 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 处于活动状态时,Claude Code 会搁置命名 `Monitor` 本身的允许规则,以及它删除的其他 [广泛允许规则](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions),因此分类器以与审查 Bash 命令相同的方式审查 Monitor 命令。406当 Monitor 运行命令时,它使用与 Bash 相同的 [权限规则](/docs/zh-CN/permissions#tool-specific-permission-rules),因此您为 Bash 设置的 `allow` 和 `deny` 模式也适用于此处。当 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 处于活动状态时,Claude Code 会搁置命名 `Monitor` 本身的允许规则,以及它删除的其他 [广泛允许规则](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions),因此分类器以与审查 Bash 命令相同的方式审查 Monitor 命令。

407 407 

408[WebSocket 源](#websocket-source) 有其自己的批准提示,分类器也在自动模式下决定。408[WebSocket 源](#websocket-source) 有其自己的批准提示,分类器也在自动模式下决定。

409 409 

410该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用。当设置了 `DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,它也不可用。410该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用。当设置了 `DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,它也不可用。在 Windows 上,仅当安装了 [Git Bash](/docs/zh-CN/setup#set-up-on-windows) 时该工具才可用。

411 411 

412插件可以声明在插件处于活动状态时自动启动的监视,而不是要求 Claude 启动它们。请参阅 [plugin monitors](/docs/zh-CN/plugins/components#monitors)。412插件可以声明在插件处于活动状态时自动启动的监视,而不是要求 Claude 启动它们。请参阅 [插件监视器](/docs/zh-CN/plugins/components#monitors)。

413 413 

414<h3 id="websocket-source">414<h3 id="websocket-source">

415 WebSocket 源415 WebSocket 源


637 WebFetch 工具行为637 WebFetch 工具行为

638</h2>638</h2>

639 639 

640WebFetch 接收一个 URL 和一个描述要提取内容的提示。它获取页面,当服务器返回 HTML 时将响应转换为 Markdown,并使用一个小型、快速的模型针对内容运行提示。对于大多数获取操作,Claude 接收的是该模型的答案,而不是原始页面。转换步骤不可配置。640WebFetch 接收一个 URL 和一个描述要提取内容的提示词。它获取页面,当服务器返回 HTML 时将响应转换为 Markdown。对于大多数获取操作,它随后会在单独的模型调用中针对内容运行该提示词,Claude 接收的是该调用的结果,而不是原始页面。转换步骤不可配置。

641 641 

642这使得 WebFetch 在设计上是有损的。提取提示决定了什么到达 Claude,所以一个说页面没有提及某事的结果可能只是意味着提示没有询问它。要求 Claude 使用更具体的提示再次获取,或通过 Bash 使用 `curl` 获取未处理的页面。642这使得 WebFetch 在设计上是有损的。提取提示决定了什么到达 Claude,所以一个说页面没有提及某事的结果可能只是意味着提示没有询问它。要求 Claude 使用更具体的提示再次获取,或通过 Bash 使用 `curl` 获取未处理的页面。

643 643 


661 661 

662`deny`、`ask` 或 `allow` 中的显式 `WebFetch(domain:...)` 规则优先于预批准集,所以您可以阻止预批准域或要求对其进行提示。662`deny`、`ask` 或 `allow` 中的显式 `WebFetch(domain:...)` 规则优先于预批准集,所以您可以阻止预批准域或要求对其进行提示。

663 663 

664当 URL 是 claude.ai [Artifact](/docs/zh-CN/artifacts) 链接时,Claude Code 还可能请求批准以读取该 Artifact 本身。有关会请求批准的情况,请参阅[读取与您共享的 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you)。

665 

664WebFetch 设置一个以 `Claude-User` 开头的 `User-Agent` 标头,以及一个 `Accept` 标头,优先选择 Markdown 而不是 HTML,以便支持内容协商的服务器可以直接返回 Markdown。666WebFetch 设置一个以 `Claude-User` 开头的 `User-Agent` 标头,以及一个 `Accept` 标头,优先选择 Markdown 而不是 HTML,以便支持内容协商的服务器可以直接返回 Markdown。

665 667 

666沙箱化命令不继承 WebFetch 的内置预批准文档域集。要让沙箱化命令无需提示即可到达一个域,将域添加到 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 或使用 `WebFetch(domain:...)` 规则允许它,[沙箱也遵守](/docs/zh-CN/sandboxing#network-isolation)该规则。WebFetch 反过来从不读取沙箱允许列表,所以将域添加到沙箱或组织网络允许列表不会阻止 WebFetch 对其进行提示。668沙箱化命令不继承 WebFetch 的内置预批准文档域集。要让沙箱化命令无需提示即可到达一个域,将域添加到 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 或使用 `WebFetch(domain:...)` 规则允许它,[沙箱也遵守](/docs/zh-CN/sandboxing#network-isolation)该规则。WebFetch 反过来从不读取沙箱允许列表,所以将域添加到沙箱或组织网络允许列表不会阻止 WebFetch 对其进行提示。

Details

22| `curl: (23)` 或 `curl: (56) Failure writing output to destination` | [检查连接或使用替代安装程序](#curl-56-failure-writing-output-to-destination) |22| `curl: (23)` 或 `curl: (56) Failure writing output to destination` | [检查连接或使用替代安装程序](#curl-56-failure-writing-output-to-destination) |

23| Linux 上安装期间 `Killed`,或 `Installation was killed before it could finish (exit code 137)` | [释放内存或添加交换空间](#install-killed-on-low-memory-linux-servers) |23| Linux 上安装期间 `Killed`,或 `Installation was killed before it could finish (exit code 137)` | [释放内存或添加交换空间](#install-killed-on-low-memory-linux-servers) |

24| 安装期间 `Raw mode is not supported` | [重新运行安装程序](#raw-mode-is-not-supported-during-install) |24| 安装期间 `Raw mode is not supported` | [重新运行安装程序](#raw-mode-is-not-supported-during-install) |

25| 安装期间 `EACCES: permission denied` | [修复安装目录的权限](#permission-errors-during-installation) |

25| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |26| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |

26| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity) |27| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity) |

27| `irm is not recognized` 或 `The token '&&' is not a valid statement separator` | [对您的 shell 使用正确的命令](#wrong-install-command-on-windows) |28| `irm is not recognized` 或 `The token '&&' is not a valid statement separator` | [对您的 shell 使用正确的命令](#wrong-install-command-on-windows) |


34| `Error loading shared library` | [您的系统的二进制变体错误](#linux-musl-or-glibc-binary-mismatch) |35| `Error loading shared library` | [您的系统的二进制变体错误](#linux-musl-or-glibc-binary-mismatch) |

35| `Illegal instruction` | [架构或 CPU 指令集不匹配](#illegal-instruction) |36| `Illegal instruction` | [架构或 CPU 指令集不匹配](#illegal-instruction) |

36| WSL 中 `cannot execute binary file: Exec format error` | [WSL1 上的本机二进制回归](#exec-format-error-on-wsl1) |37| WSL 中 `cannot execute binary file: Exec format error` | [WSL1 上的本机二进制回归](#exec-format-error-on-wsl1) |

38| 会话运行期间出现 `Bus error` 或 `oh no: Bun has crashed` | [保持可执行文件可读](#bus-error-while-a-session-is-running) |

37| PowerShell 安装程序完成但 `claude` 未找到或显示旧版本 | [将安装目录添加到您的 PATH](#verify-your-path),然后打开新终端 |39| PowerShell 安装程序完成但 `claude` 未找到或显示旧版本 | [将安装目录添加到您的 PATH](#verify-your-path),然后打开新终端 |

38| macOS 上 `dyld: Symbol not found`、`dyld: cannot load` 或 `Abort trap` | [二进制不兼容](#dyld-cannot-load-on-macos) |40| macOS 上 `dyld: Symbol not found`、`dyld: cannot load` 或 `Abort trap` | [二进制不兼容](#dyld-cannot-load-on-macos) |

39| `claude update` 在 `Checking for updates` 后挂起,或 `claude doctor` 挂起且无输出 | [移动 shell 配置路径处的目录](#claude-update-or-claude-doctor-hangs) |41| `claude update` 在 `Checking for updates` 后挂起,或 `claude doctor` 挂起且无输出 | [移动 shell 配置路径处的目录](#claude-update-or-claude-doctor-hangs) |


295 检查目录权限297 检查目录权限

296</h3>298</h3>

297 299 

298安装程序需要对 macOS 和 Linux 上的 `~/.local/bin/` 和 `~/.claude/` 有写入权限。在 Windows 上,安装位置在 `%USERPROFILE%` 下,默认情况下您的用户可以写入,因此此部分很少适用于那里。300因权限问题而失败的安装会指出其无法创建或写入的路径。在 Windows 上,安装会写入 `%USERPROFILE%` 下,默认情况下您的用户可以写入该位置,因此此部分很少适用于那里。

301 

302在 macOS 和 Linux 上,安装会写入以下位置:

303 

304* `~/.claude/downloads/`:安装命令存放下载的二进制文件的位置

305* `~/.local/bin/`:`claude` 启动程序

306* `~/.local/share/claude/`:其下载的每个版本

307* `~/.local/state/claude/`:其锁文件

308* `~/.cache/claude/`:暂存的下载内容

309* [`~/.claude.json`](/docs/zh-CN/claude-directory):您的全局配置文件,安装程序在其中记录安装方式

310 

311如果您设置了 `XDG_DATA_HOME`、`XDG_STATE_HOME` 或 `XDG_CACHE_HOME`,安装将使用这些位置来代替 `~/.local/share`、`~/.local/state` 和 `~/.cache`。如果您设置了 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars),全局配置文件将位于该目录下,而不是您的主目录下。

299 312 

300检查目录是否可写:313检查目录是否可写:

301 314 


847 860 

8482. **更新 macOS**,如果您在较旧版本上。二进制文件使用较旧 macOS 版本不支持的加载命令和系统库。Homebrew 等替代安装方法下载相同的二进制文件,不会解决此错误。8612. **更新 macOS**,如果您在较旧版本上。二进制文件使用较旧 macOS 版本不支持的加载命令和系统库。Homebrew 等替代安装方法下载相同的二进制文件,不会解决此错误。

849 862 

863<h3 id="bus-error-while-a-session-is-running">

864 会话运行时出现 `Bus error`

865</h3>

866 

867如果正在运行的会话退出,且您的 shell 打印 `Bus error`,其中一个原因是 Claude Code 无法再从磁盘读取其自身的可执行文件。例如,在会话运行期间,该文件被截断,或在网络存储上被删除。

868 

869在 shell 的消息之前,Claude Code 的运行时可能会打印一份崩溃报告,其中包括 `panic(main thread): Bus error at address` 和 `oh no: Bun has crashed. This indicates a bug in Bun, not your code.`。当可执行文件变得不可读时,崩溃来自不可读的文件,而不是 Bun 中的 bug。如果运行时也无法读取打印该报告的代码,该报告也可能缺失。

870 

871启动新会话以继续。如果 Claude Code 安装在网络存储上,请按照[在网络存储上安装](/docs/zh-CN/setup#install-on-network-storage)操作,以免升级删除正在运行的会话仍需要的二进制文件。

872 

850<h3 id="exec-format-error-on-wsl1">873<h3 id="exec-format-error-on-wsl1">

851 WSL1 上的 `Exec format error`874 WSL1 上的 `Exec format error`

852</h3>875</h3>


1045 1068 

1046如果您看到 `API Error: 400 ... "This organization has been disabled"`,尽管有活跃的 Claude 订阅,`ANTHROPIC_API_KEY` 环境变量正在覆盖您的订阅。这通常发生在来自前一个雇主或项目的旧 API 密钥仍在您的 shell 配置文件中设置时。1069如果您看到 `API Error: 400 ... "This organization has been disabled"`,尽管有活跃的 Claude 订阅,`ANTHROPIC_API_KEY` 环境变量正在覆盖您的订阅。这通常发生在来自前一个雇主或项目的旧 API 密钥仍在您的 shell 配置文件中设置时。

1047 1070 

1048当 `ANTHROPIC_API_KEY` 存在且您已批准它时,Claude Code 使用该密钥而不是您的订阅的 OAuth 凭证。在使用 `-p` 标志的非交互模式下,当存在时始终使用该密钥。有关完整的解决顺序,请参阅 [authentication precedence](/docs/zh-CN/authentication#authentication-precedence)。1071当 `ANTHROPIC_API_KEY` 存在且您已批准它时,Claude Code 使用该密钥而不是您的订阅的 OAuth 凭据。在使用 `-p` 标志的非交互模式下,当存在时始终使用该密钥。有关完整的解决顺序,请参阅 [authentication precedence](/docs/zh-CN/authentication#authentication-precedence)。

1049 1072 

1050要改用您的订阅,请取消设置环境变量并从您的 shell 配置文件中删除它:1073要改用您的订阅,请取消设置环境变量并从您的 shell 配置文件中删除它:

1051 1074 


1098 1121 

1099运行 `/login` 重新身份验证。如果这经常发生,检查您的系统时钟是否准确,因为令牌验证取决于正确的时间戳。1122运行 `/login` 重新身份验证。如果这经常发生,检查您的系统时钟是否准确,因为令牌验证取决于正确的时间戳。

1100 1123 

1101一台机器上的并行会话共享已保存的登录并协调其续期,以便只有一个进程一次刷新令牌。在 v2.1.211 之前,从睡眠状态唤醒机器可能导致两个会话使用相同令牌续期,这会撤销已保存的登录并提示每个打开的会话立即再次登录。1124一台机器上的并行会话共享已保存的登录并协调其续期,以便只有一个进程一次刷新令牌。有关在其中一个会话中重新登录后其他会话的行为,请参阅[未登录](/docs/zh-CN/errors#not-logged-in)。

1125 

1126在 v2.1.211 之前,从睡眠状态唤醒机器可能导致两个会话使用相同令牌续期,这会撤销已保存的登录并提示每个打开的会话立即再次登录。

1102 1127 

1103在 macOS 上,Claude Code 将凭证保存到登录 Keychain。当 Keychain 拒绝写入时,例如当它在 SSH 会话中被锁定或其密码与您的账户密码不同步时,Claude Code 改为将您的登录保存到纯文本 `~/.claude/.credentials.json` 文件。Console 登录创建 API 密钥会失败,直到 Keychain 再次可写。1128在 macOS 上,Claude Code 将凭据保存到登录 Keychain。当 Keychain 拒绝写入时,例如当它在 SSH 会话中被锁定或其密码与您的账户密码不同步时,Claude Code 改为将您的登录保存到纯文本 `~/.claude/.credentials.json` 文件。Console 登录创建 API 密钥会失败,直到 Keychain 再次可写。

1104 1129 

1105要使 Keychain 再次可写并将您的登录移回加密的 Keychain:1130要使 Keychain 再次可写并将您的登录移回加密的 Keychain:

1106 1131 


1122 </Step>1147 </Step>

1123 1148 

1124 <Step title="注销并重新登录">1149 <Step title="注销并重新登录">

1125 一旦 Keychain 再次可写,Claude Code 在下次写入凭证时将凭证移回。要立即强制执行,请运行 `/logout` 然后 `/login`。注销会删除所有存储的凭证,包括纯文本文件的内容、已保存的 MCP 服务器登录和插件敏感值,因此预期之后需要重新授权 MCP 服务器和重新输入插件密钥。再次登录会将您的登录存储在 Keychain 中。1150 一旦 Keychain 再次可写,Claude Code 在下次写入凭据时将凭据移回。要立即强制执行,请运行 `/logout` 然后 `/login`。注销会删除所有存储的凭据,包括纯文本文件的内容、已保存的 MCP 服务器登录和插件敏感值,因此预期之后需要重新授权 MCP 服务器和重新输入插件密钥。再次登录会将您的登录存储在 Keychain 中。

1126 </Step>1151 </Step>

1127</Steps>1152</Steps>

1128 1153 

1129<h3 id="bedrock-agent-platform-or-foundry-credentials-not-loading">1154<h3 id="bedrock-agent-platform-or-foundry-credentials-not-loading">

1130 Bedrock、Agent Platform 或 Foundry 凭证未加载1155 Bedrock、Agent Platform 或 Foundry 凭据未加载

1131</h3>1156</h3>

1132 1157 

1133如果您配置了 Claude Code 以使用云提供商,并在 Amazon Bedrock 上看到 `Could not load credentials from any providers`、在 Google Cloud 的 Agent Platform 上看到 `Could not load the default credentials` 或在 Microsoft Foundry 上看到 `ChainedTokenCredential authentication failed`,您的云提供商 CLI 可能在当前 shell 中未进行身份验证。1158如果您配置了 Claude Code 以使用云提供商,并在 Amazon Bedrock 上看到 `Could not load credentials from any providers`、在 Google Cloud 的 Agent Platform 上看到 `Could not load the default credentials` 或在 Microsoft Foundry 上看到 `ChainedTokenCredential authentication failed`,您的云提供商 CLI 可能在当前 shell 中未进行身份验证。

1134 1159 

1135对于 Amazon Bedrock,确认您的 AWS 凭证有效:1160对于 Amazon Bedrock,确认您的 AWS 凭据有效:

1136 1161 

1137```bash theme={null}1162```bash theme={null}

1138aws sts get-caller-identity1163aws sts get-caller-identity

1139```1164```

1140 1165 

1141对于 Google Cloud 的 Agent Platform,确认 `ANTHROPIC_VERTEX_PROJECT_ID` 和 `CLOUD_ML_REGION` 在您的 shell 中设置,然后设置应用默认凭证:1166对于 Google Cloud 的 Agent Platform,确认 `ANTHROPIC_VERTEX_PROJECT_ID` 和 `CLOUD_ML_REGION` 在您的 shell 中设置,然后设置应用默认凭据:

1142 1167 

1143```bash theme={null}1168```bash theme={null}

1144gcloud auth application-default login1169gcloud auth application-default login

1145```1170```

1146 1171 

1147对于 Microsoft Foundry,确认 `ANTHROPIC_FOUNDRY_API_KEY` 已设置,或使用 Azure CLI 登录以便默认凭证链可以找到您的账户:1172对于 Microsoft Foundry,确认 `ANTHROPIC_FOUNDRY_API_KEY` 已设置,或使用 Azure CLI 登录以便默认凭据链可以找到您的账户:

1148 1173 

1149```bash theme={null}1174```bash theme={null}

1150az login1175az login

1151```1176```

1152 1177 

1153如果凭证在您的终端中有效但在 VS Code 或 JetBrains 扩展中无效,IDE 进程可能未继承您的 shell 环境。在 IDE 自己的设置中设置提供商环境变量,或从已导出它们的终端启动 IDE。1178如果凭据在您的终端中有效但在 VS Code 或 JetBrains 扩展中无效,IDE 进程可能未继承您的 shell 环境。在 IDE 自己的设置中设置提供商环境变量,或从已导出它们的终端启动 IDE。

1154 1179 

1155有关完整的提供商设置,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)。1180有关完整的提供商设置,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry)。

1156 1181 

Details

803. 将大文件工作移到 [subagent](/docs/zh-CN/sub-agents),以便它在单独的上下文窗口中运行803. 将大文件工作移到 [subagent](/docs/zh-CN/sub-agents),以便它在单独的上下文窗口中运行

814. 如果早期对话不再需要,运行 `/clear`814. 如果早期对话不再需要,运行 `/clear`

82 82 

83如果在 `/clear` 之后错误再次出现,请运行 [`/context`](/docs/zh-CN/debug-your-config) 并将 `Messages` 行与其上方的行进行比较:

84 

85* **`Messages` 是最大的行**:新对话中的文件或工具输出正在重新填满窗口,因此请再次执行步骤 1 到 3

86* **其他行加起来更大**:会话启动时加载的内容留下的工作空间太少,因此请[精简启动时加载的内容](/docs/zh-CN/errors#prompt-is-too-long)

87 

83<h3 id="command-hangs-or-freezes">88<h3 id="command-hangs-or-freezes">

84 命令挂起或冻结89 命令挂起或冻结

85</h3>90</h3>

ultrareview.md +23 −23

Details

30/code-review ultra30/code-review ultra

31```31```

32 32 

33不带参数时,ultrareview 审查您当前分支与默认分支之间的差异,包括未提交和暂存的更改。对于名称类似凭证或密钥的文件(如 `.env` 和 `*.tfvars` 文件)中的未提交更改,Claude Code 遵循[将本地存储库上传到云会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github)的规则。33不带参数时,ultrareview 审查您当前分支与默认分支之间的 diff,包括未提交和暂存的更改。

34 34 

35对于分支审查,Claude Code 捆绑存储库状态并将其上传到云沙箱;当您[审查拉取请求](#review-a-pull-request)时,Claude Code 不会从您的计算机上传任何内容。35对于分支审查,Claude Code 按照[将本地仓库上传到云端会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github)的规则捆绑仓库状态并将其上传到云沙箱,这些规则涵盖了大小限制、检出要求,以及名称类似凭据或密钥的文件(如 `.env` 和 `*.tfvars` 文件)中的未提交更改会如何处理。当您[审查拉取请求](#review-a-pull-request)时,Claude Code 不会从您的计算机上传任何内容。

36 36 

37启动前,Claude Code 显示一个确认对话框,其中包含审查范围、您剩余的免费运行次数和估计成本;对于分支审查,范围包括文件和行数。确认后,审查在后台继续进行,您可以继续使用您的会话。37启动前,Claude Code 显示一个确认对话框,其中包含审查范围、您剩余的免费运行次数和估计成本;对于分支审查,范围包括文件和行数。确认后,审查在后台继续进行,您可以继续使用您的会话。

38 38 


153 跟踪正在运行的审查153 跟踪正在运行的审查

154</h2>154</h2>

155 155 

156审查通常需要 5 到 10 分钟。审查作为后台任务运行,因此您可以继续在会话中工作、启动其他命令或完全关闭终端。如果您选择了[将发现发布到拉取请求](#post-findings-to-the-pull-request),请保持会话打开直到审查完成;如果会话先结束,Claude Code 将不会发布任何内容。156审查通常需要 5 到 10 分钟。审查作为后台任务运行,因此您可以继续在会话中工作或启动其他命令。如果您选择了[将发现发布到拉取请求](#post-findings-to-the-pull-request),请保持会话打开直到审查完成;如果会话先结束,Claude Code 将不会发布任何内容。

157 157 

158使用 `/tasks` 查看正在运行和已完成的审查、打开审查的详细视图或停止正在进行的审查。如果您停止审查,Claude Code 会存档云会话,不会返回部分发现。158使用 `/tasks` 查看正在运行和已完成的审查、打开审查的详细视图或停止正在进行的审查。如果您停止审查,Claude Code 会存档云会话,不会返回部分发现。

159 159 


166审查完成后,Claude Code 会在您的会话中将验证的发现显示为通知。每个发现都包括文件位置和问题的解释,因此您可以要求 Claude 直接修复它。166审查完成后,Claude Code 会在您的会话中将验证的发现显示为通知。每个发现都包括文件位置和问题的解释,因此您可以要求 Claude 直接修复它。

167 167 

168<h2 id="run-ultrareview-non-interactively">168<h2 id="run-ultrareview-non-interactively">

169 非交互式运行 ultrareview169 以非交互方式运行 ultrareview

170</h2>170</h2>

171 171 

172使用 `claude ultrareview` 子命令从 CI 或脚本启动 ultrareview,无需交互式会话。该子命令启动与 `/code-review ultra` 相同的审查,阻止直到远程审查完成,并将发现打印到 stdout。172使用 `claude ultrareview` 子命令,可以在 CI 或脚本中启动 ultrareview,而无需交互式会话。该子命令启动的审查与 `/code-review ultra` 相同,会一直阻塞到远程审查完成,然后将发现的问题输出到 stdout。

173 173 

174```bash theme={null}174```bash theme={null}

175claude ultrareview175claude ultrareview


177claude ultrareview origin/main177claude ultrareview origin/main

178```178```

179 179 

180不带参数时,该子命令审查您当前分支与默认分支之间的差异,当不存在合并基础时具有与 `/code-review ultra` 相同的[整个存储库回退](#diff-limits-and-fallbacks)。传递 PR 编号来审查拉取请求,或传递基础分支来审查与该分支的差异;[基础分支处理](#review-against-a-different-base)与交互式命令匹配。180不带参数时,该子命令会审查当前分支与默认分支之间的 diff;当不存在合并基准时,会执行与 `/code-review ultra` 相同的[回退到整个仓库审查](#diff-limits-and-fallbacks)。传入 PR 编号可审查对应的 Pull Request,传入基准分支则以该分支为基准进行审查;[基准分支的处理方式](#review-against-a-different-base)与交互式命令一致。

181 181 

182运行该子命令时,您同意整个存储库回退以及计费和条款提示,因此运行开始时无需等待输入。运行它本身就是您的同意。当 Claude 代替您运行该子命令时,例如通过 Bash 工具,Claude Code 会拒绝整个存储库审查。182运行该子命令即表示您同意回退到整个仓库审查,并同意计费和条款确认提示,因此运行会直接开始,无需等待输入。只有您亲自运行才算作同意。如果改由 Claude 替您运行该子命令(例如通过 Bash 工具),Claude Code 会拒绝执行整个仓库审查。

183 183 

184在 Claude Code v2.1.218 或更高版本上,您也可以通过在非交互式会话中运行 `/code-review ultra` 来启动云审查,例如 `claude -p '/code-review ultra'`。Claude Code 启动审查并打印跟踪链接,无需等待发现,与 `claude ultrareview` 不同,后者会阻止直到发现到达。当审查会计费使用额度时,Claude Code 在启动前停止并指向 `claude ultrareview`,因为计费确认需要交互式会话。在 v2.1.218 之前,非交互式会话中的 `/code-review ultra` 运行本地审查。184`claude -p '/code-review ultra'` 无法获取发现的问题,因此请在脚本中使用 `claude ultrareview`。`-p` 运行会启动云端审查,但不等待其完成就退出。如果该审查会消耗使用额度,`-p` 运行会停止且不启动审查。在 v2.1.218 之前,非交互式会话中的 `/code-review ultra` 会运行本地审查。

185 185 

186进度消息和实时会话 URL 转到 stderr,以便 stdout 保持可解析。使用这些标志来控制输出、超时以及是否发布发现:186`claude ultrareview` 会将进度消息写入 stderr,以便 stdout 保持可解析。使用以下标志控制其输出、超时时间以及是否发布发现的问题:

187 187 

188| 标志 | 描述 |188| 标志 | 描述 |

189| - | - |189| - | - |

190| `--json` | 打印原始 `bugs.json` 有效负载而不是格式化的发现 |190| `--json` | 输出原始的 `bugs.json` 负载,而不是格式化后的发现结果 |

191| `--timeout <minutes>` | 等待审查完成的最大分钟数。默认为 45 |191| `--timeout <minutes>` | 等待审查完成的最长分钟数。默认为 45 |

192| `--post` | [将完成的发现作为来自您 GitHub 账户的一条纯文本注释发布](#post-findings-to-the-pull-request)到拉取请求。适用于 `github.com` 拉取请求目标;在其他目标上,Claude Code 忽略该标志并说明。需要 Claude Code v2.1.227 或更高版本 |192| `--post` | 以您的 GitHub 账户身份,将完成的发现结果作为一条纯文本评论[发布到 Pull Request](#post-findings-to-the-pull-request)。适用于 `github.com` 上的 Pull Request 目标;对于其他目标,Claude Code 会忽略该标志并给出提示。需要 Claude Code v2.1.227 或更高版本 |

193| `--no-post` | 不发布发现。这是默认值,如果您同时传递两个标志,Claude Code 不会发布。需要 Claude Code v2.1.227 或更高版本 |193| `--no-post` | 不发布发现结果。这是默认行为;如果同时传入两个标志,Claude Code 不会发布。需要 Claude Code v2.1.227 或更高版本 |

194 194 

195运行 `claude ultrareview` 需要与 `/code-review ultra` 相同的身份验证和使用额度配置。195运行 `claude ultrareview` 所需的身份验证和使用额度配置与 `/code-review ultra` 相同。

196 196 

197该子命令以三个代码之一退出:197该子命令会以以下三种退出码之一退出:

198 198 

199* **0**:审查完成,无论是否有发现199* **0**:审查已完成,无论是否有发现结果

200* **1**:审查无法启动、云会话出错或超时已过200* **1**:审查启动失败或在完成前被停止、云端会话出错,或已超时

201* **130**:您使用 Ctrl-C 中断了子命令201* **130**:您使用 Ctrl-C 中断了该子命令

202 202 

203如果您中断子命令,远程审查会继续运行;按照打印到 stderr 的会话 URL 在浏览器中观看它。203如果子命令在发现结果返回之前退出,这些结果将永远不会到达您的终端。审查可能仍在云端运行。再次运行该子命令会启动一次新的审查,而不是恢复之前那次,并且新的审查会[使用一次免费运行或按使用额度计费](#pricing-and-free-runs)。

204 204 

205使用 `--post` 时,子命令在打印发现后立即开始发布,并将链接打印到 stderr。205使用 `--post` 时,子命令会在输出发现结果后立即开始发布,并将链接输出到 stderr。

206 206 

207* 如果运行失败、停止或超时,或者您中断它,子命令不发布任何内容。207* 如果运行失败、被停止或超时,子命令不会发布任何内容。

208* 如果审查完成但注释未发布,Claude Code 将原因打印到 stderr,发现保留在 stdout 上,以便您可以手动发布它们。208* 如果审查完成但评论未能发布,Claude Code 会将原因输出到 stderr,发现结果仍保留在 stdout 中,以便您手动发布。

209 209 

210对于 GitHub 拉取请求上的自动审查,[Code Review](/docs/zh-CN/code-review) 直接与您的存储库集成,并将发现作为内联 PR 注释发布,无需 CLI 步骤。210如需对 GitHub Pull Request 进行自动审查,[Code Review](/docs/zh-CN/code-review) 可直接与您的仓库集成,并以 PR 行内评论的形式发布发现结果,无需 CLI 步骤。

211 211 

212<h2 id="how-ultrareview-compares-to-/code-review">212<h2 id="how-ultrareview-compares-to-/code-review">

213 ultrareview 与 /code-review 的比较213 ultrareview 与 /code-review 的比较

vs-code.md +143 −95

Details

104</Tip>104</Tip>

105 105 

106<h2 id="use-the-prompt-box">106<h2 id="use-the-prompt-box">

107 使用提示框107 使用输入框

108</h2>108</h2>

109 109 

110提示框支持多项功能:110输入框支持以下几项功能:

111 111 

112* **权限模式**:点击提示框底部的模式指示器来切换权限模式。在 Claude Code v2.1.283 或更高版本中,Auto 是内置的起始权限模式,在较早版本中仅在 Pro、Max 和 Team 计划上可用。请参阅[扩展程序如何选择起始权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)了解会改变这一点的因素,以及指示器提供的每种权限模式。112* **权限模式**:点击输入框底部的模式指示器即可切换权限模式。在 Claude Code v2.1.283 或更高版本中,Auto 是内置的初始权限模式;在更早的版本中,仅 Pro、Max 和 Team 套餐如此。请参阅[扩展如何选择初始权限模式](/docs/zh-CN/permission-modes#switch-permission-modes),了解哪些因素会改变这一点,以及指示器提供的所有权限模式。

113 * **Auto**:分类器审查大多数操作,而不是询问您。请参阅 [auto 模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)了解它审查和阻止的内容。113 * **Auto**:由分类器审查大多数操作,而不是询问您。请参阅[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),了解它会审查和阻止哪些操作。

114 * **Manual**:Claude 在文件编辑和大多数 shell 命令之前请求权限。114 * **Manual**:Claude 在编辑文件和执行大多数 shell 命令之前会请求权限。

115 * **Plan**:Claude 描述它将做什么,并在进行更改之前等待批准。VS Code 自动将计划作为完整的 Markdown 文档打开,您可以在其中添加内联注释以在 Claude 开始之前提供反馈。115 * **Plan**:Claude 会描述它将要做什么,并在进行更改之前等待批准。VS Code 会自动将计划作为完整的 Markdown 文档打开,您可以在 Claude 开始之前添加行内评论来提供反馈。

116 116 

117 您也可以在提示框中输入 `/plan`。需要 Claude Code v2.1.280 或更高版本。117 您也可以在输入框中输入 `/plan`。需要 Claude Code v2.1.280 或更高版本。

118 118 

119 * `/plan`:切换到 Plan 模式。如果您已经在 Plan 模式中,则显示当前计划。119 * `/plan`:切换到计划模式。如果已处于计划模式,则改为显示当前计划。

120 * `/plan` 加上任务,例如 `/plan fix the auth bug`:切换到 Plan 模式并开始规划该任务。120 * 带任务的 `/plan`,例如 `/plan fix the auth bug`:切换到计划模式并开始为该任务制定计划。

121 * `/plan open`:当您已经在 Plan 模式中时,在编辑器中打开计划文件。121 * `/plan open`:已处于计划模式时,在编辑器中打开计划文件。

122 * **Edit automatically**:Claude 进行编辑而不询问。122 * **Edit automatically**:Claude 直接进行编辑,不再询问。

123* **Model**:从命令菜单中选择 **Switch model…** 以在会话中途更改模型。您也可以点击提示框底部的模型名称来打开相同的选择器。123* **模型**:从命令菜单中选择 **Switch model…** 即可在会话中途更换模型。您也可以点击输入框底部的模型名称来打开同一个选择器。在 Claude Code v2.1.284 或更高版本中,在输入框中单独输入 `/model` 也会打开该选择器。

124 124 

125 当当前模型支持[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)时,选择器还会显示 **Effort** 行和模型名称按钮显示选定的级别。当您选择除 `max` 之外的级别时,Claude Code 会在 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 下的用户设置中将其保存为当前模型的默认值;`max` 仅适用于当前会话。模型名称按钮和 **Effort** 行需要 Claude Code v2.1.257 或更高版本。125 当当前模型支持 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)时,选择器还会显示 **Effort** 行,模型名称按钮会显示所选级别。当您选择 `max` 以外的级别时,Claude Code 会将其保存为当前模型的默认值,存放在用户设置的 [`modelSettings`](/docs/zh-CN/settings-reference#modelsettings) 下;`max` 仅适用于当前会话。模型名称按钮和 **Effort** 行需要 Claude Code v2.1.257 或更高版本。

126 126 

127 当[动态工作流](/docs/zh-CN/workflows)启用且当前模型支持时,**Effort** 行下会出现 **Ultracode** 开关。打开它以让 Claude 为此会话中的每个实质性任务规划[工作流](/docs/zh-CN/workflows#let-claude-decide-with-ultracode),在选定的工作量级别。当它打开时,模型名称按钮在级别后显示 `· Ultracode`。该开关需要 Claude Code v2.1.284 或更高版本。127 当启用了[动态工作流](/docs/zh-CN/workflows)且当前模型支持时,**Effort** 行下方会出现 **Ultracode** 开关。打开它后,Claude 会以所选 effort 级别,为此会话中的每项实质性任务规划一个[工作流](/docs/zh-CN/workflows#let-claude-decide-with-ultracode)。开关打开期间,模型名称按钮会在级别后显示 `· Ultracode`。该开关需要 Claude Code v2.1.284 或更高版本。

128* **Command menu**:点击 `/` 或输入 `/` 来打开命令菜单。选项包括附加文件、切换模型和切换扩展思考。128* **命令菜单**:点击 `/` 或输入 `/` 即可打开命令菜单。选项包括附加文件、切换模型以及开关扩展思考。

129 129 

130 Customize 部分提供对 MCP 服务器、slash commands、输出样式、hooks、memory、instructions、permissions 和 plugins 的访问。带有终端图标的项目在集成终端中打开。130 Customize 部分包含 MCP 服务器、命令、输出样式、hook、记忆、指令、权限和插件等条目。带有终端图标的条目会在集成终端中打开。

131 131 

132 * 要浏览 `/usage` 或 [`/remote-control`](/docs/zh-CN/remote-control) 等命令,请在 Customize 部分中选择 **Slash commands**。对话框会列出它们并带有过滤框。选择一个来运行它。在提示框中输入 `/` 仍会内联建议命令。需要 Claude Code v2.1.257 或更高版本。132 * 要浏览 `/usage` 或 [`/remote-control`](/docs/zh-CN/remote-control) 等命令,请在 Customize 部分选择 **Slash commands**。对话框会列出这些命令并提供筛选框。选择其中一个即可运行。在输入框中输入 `/` 仍会以内联方式建议命令。需要 Claude Code v2.1.257 或更高版本。

133 133 

134 输入 `/skills` 也会打开此对话框。每个 [skill](/docs/zh-CN/skills) 行显示其[可见性](/docs/zh-CN/skills#override-skill-visibility-from-settings),例如 **On** 或 **Name only**。点击可见性来更改它,除了标记为 **locked** 的行,例如 plugin skills。`/skills` 快捷方式和可见性控件需要 Claude Code v2.1.280 或更高版本。134 输入 `/skills` 也会打开此对话框。每个 [skill](/docs/zh-CN/skills) 行都会显示其[可见性](/docs/zh-CN/skills#override-skill-visibility-from-settings),例如 **On** 或 **Name only**。点击可见性即可更改,但标记为 **locked** 的行(例如插件 skill)除外。`/skills` 快捷方式和可见性控件需要 Claude Code v2.1.280 或更高版本。

135 * 在 Customize 部分中选择 **Output styles** 来选择[输出样式](/docs/zh-CN/output-styles),包括您的自定义样式。需要 Claude Code v2.1.257 或更高版本。135 * 在 Customize 部分选择 **Output styles** 即可选择[输出样式](/docs/zh-CN/output-styles),包括您的自定义样式。需要 Claude Code v2.1.257 或更高版本。

136 136 

137 要创建自定义样式,请从 **Output styles** 菜单中选择 **Build a custom style**。Claude Code 会在项目或用户级别为您编写[样式文件](/docs/zh-CN/output-styles#create-a-custom-output-style)。需要 Claude Code v2.1.261 或更高版本。137 若要创建自定义样式,请从 **Output styles** 菜单中选择 **Build a custom style**。Claude Code 会在项目级或用户级为您编写[样式文件](/docs/zh-CN/output-styles#create-a-custom-output-style)。需要 Claude Code v2.1.261 或更高版本。

138 * 在 Customize 部分中选择 **Hooks** 来查看在会话中加载的 [hooks](/docs/zh-CN/hooks),按事件分组。您可以添加、编辑或删除保存在您的用户、项目和本地设置文件中的 hooks。来自其他来源的 Hooks,例如托管设置或插件,是只读的。需要 Claude Code v2.1.269 或更高版本。138 * 在 Customize 部分选择 **Hooks** 即可查看会话中加载的 [hook](/docs/zh-CN/hooks),按事件分组。您可以添加、编辑或删除保存在用户、项目和本地设置文件中的 hook。来自其他来源(例如托管设置或插件)的 hook 是只读的。需要 Claude Code v2.1.269 或更高版本。

139 * 在 Customize 部分中选择 **Permissions** 来查看会话的[权限规则](/docs/zh-CN/permissions),分组为 Allow、Ask 和 Deny。您可以向您的用户、项目或本地设置添加规则,并删除保存在那里的规则。来自其他来源的规则,例如托管设置或仅为此会话进行的批准,是只读的。需要 Claude Code v2.1.269 或更高版本。139 * 在 Customize 部分选择 **Permissions** 即可查看会话的[权限规则](/docs/zh-CN/permissions),分为 Allow、Ask 和 Deny 三组。您可以向用户、项目或本地设置添加规则,并删除保存在其中的规则。来自其他来源的规则(例如托管设置或仅对本会话做出的批准)是只读的。需要 Claude Code v2.1.269 或更高版本。

140 * 在 Customize 部分中选择 **Memory** 来打开或关闭[自动 memory](/docs/zh-CN/memory#auto-memory)。当它打开时,您也可以浏览 Claude 保存的 memories 并在您的文件管理器中显示存储它们的文件夹。需要 Claude Code v2.1.274 或更高版本。140 * 在 Customize 部分选择 **Memory** 即可打开或关闭[自动记忆](/docs/zh-CN/memory#auto-memory)。打开时,您还可以浏览 Claude 已保存的记忆,并在文件管理器中显示存储这些记忆的文件夹。需要 Claude Code v2.1.274 或更高版本。

141 141 

142 点击保存的 memory 来在对话框中读取它,您可以在其中编辑文本、删除 memory 或在编辑器中打开其文件。在对话框中查看、编辑和删除 memory 需要 Claude Code v2.1.275 或更高版本。142 点击已保存的记忆即可在对话框中阅读,您可以在其中编辑文本、删除该记忆,或在编辑器中打开其文件。在对话框中查看、编辑和删除记忆需要 Claude Code v2.1.275 或更高版本。

143 * 在 Customize 部分中选择 **Instructions** 来编辑 Claude 读取的 [CLAUDE.md 文件](/docs/zh-CN/memory#claude-md-files)。选择一个文件来在编辑器中打开它。如果文件还不存在,Claude Code 会先创建它。需要 Claude Code v2.1.274 或更高版本。143 * 在 Customize 部分选择 **Instructions** 即可编辑 Claude 读取的 [CLAUDE.md 文件](/docs/zh-CN/memory#claude-md-files)。选择一个文件即可在编辑器中打开。如果该文件尚不存在,Claude Code 会先创建它。需要 Claude Code v2.1.274 或更高版本。

144 * 在 Customize 部分中选择 **Status**,或输入 `/status`,来检查会话的 Claude Code 版本、账户、模型和 MCP 服务器详情。需要 Claude Code v2.1.280 或更高版本。144 * 在 Customize 部分选择 **Status**,或输入 `/status`,即可查看会话的 Claude Code 版本、账户、模型和 MCP 服务器详细信息。需要 Claude Code v2.1.280 或更高版本。

145 * 在 Customize 部分中选择 **Sandbox**,或输入 `/sandbox`,来查看 Claude 的 Bash 命令是否运行在[沙箱中](/docs/zh-CN/sandboxing)。您可以在那里切换沙箱模式并添加[排除的命令](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。需要 Claude Code v2.1.280 或更高版本。145 * 在 Customize 部分选择 **Sandbox**,或输入 `/sandbox`,即可查看 Claude 的 Bash 命令是否在[沙箱中](/docs/zh-CN/sandboxing)运行。您可以在此切换沙箱模式并添加[排除的命令](/docs/zh-CN/settings-reference#sandbox-excludedcommands)。需要 Claude Code v2.1.280 或更高版本。

146 * 在 Customize 部分中选择 **Claude in Chrome**,或输入 `/chrome`,来检查和管理 [Claude in Chrome](/docs/zh-CN/chrome) 连接。两者都需要使用 claude.ai 账户登录。需要 Claude Code v2.1.280 或更高版本。146 * 在 Customize 部分选择 **Claude in Chrome**,或输入 `/chrome`,即可检查和管理 [Claude in Chrome](/docs/zh-CN/chrome) 连接。两者都需要使用 claude.ai 账户登录。需要 Claude Code v2.1.280 或更高版本。

147 * 在 Context 部分中选择 **Export conversation**,或输入 `/export`,来将对话复制为纯文本或保存到文件。添加文件名,例如 `/export notes.txt`,来跳过对话框并选择保存文件的位置。需要 Claude Code v2.1.280 或更高版本。147 * 在 Context 部分选择 **Export conversation**,或输入 `/export`,即可将对话复制为纯文本或保存到文件。添加文件名(例如 `/export notes.txt`)可跳过对话框并选择文件的保存位置。需要 Claude Code v2.1.280 或更高版本。

148 * Settings 部分包括 **Enable Remote Control for all sessions**,它设置 [`remoteControlAtStartup`](/docs/zh-CN/settings-reference#remotecontrolatstartup) 来控制[新的交互式会话是否自动连接到 Remote Control](/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions)。需要 Claude Code v2.1.203 或更高版本。148 * Settings 部分包含 **Enable Remote Control for all sessions**,它会设置 [`remoteControlAtStartup`](/docs/zh-CN/settings-reference#remotecontrolatstartup),用于控制[新的交互式会话是否自动连接到 Remote Control](/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions)。需要 Claude Code v2.1.203 或更高版本。

149 149 

150 当您在 VS Code 窗口中打开或关闭切换开关时,更改适用于该 VS Code 窗口中已打开的会话,而不仅仅是您之后启动的会话。如果您关闭它,打开的会话将断开连接。使用 Claude Code v2.1.261 或更高版本,更改也会到达您其他 VS Code 窗口中打开的会话。150 当您在某个 VS Code 窗口中打开或关闭此开关时,更改会应用于该 VS Code 窗口中已打开的会话,而不仅仅是之后启动的会话。如果关闭它,已打开的会话会断开连接。在 Claude Code v2.1.261 或更高版本中,更改还会同步到您其他 VS Code 窗口中打开的会话。

151 * Settings 部分还包括 **Focus view**,它隐藏工具调用、工具结果和思考在可展开的行后面,只留下您的提示和 Claude 的响应。在那里切换它,使用 `Ctrl+Option+F`(Mac)/ `Ctrl+Alt+F`(Windows/Linux),或从命令面板使用 **Claude Code: Toggle Focus view**。更改适用于每个打开的会话并在会话之间持续。需要 Claude Code v2.1.221 或更高版本。151 * Settings 部分还包含 **Focus view**,它会将工具调用、工具结果和思考内容隐藏在可展开的行后面,只保留您的提示词和 Claude 的回复。您可以在此处切换,也可以使用 `Ctrl+Option+F`(Mac)/ `Ctrl+Alt+F`(Windows/Linux),或在命令面板中使用 **Claude Code: Toggle Focus view**。更改会应用于所有已打开的会话,并在会话之间保留。需要 Claude Code v2.1.221 或更高版本。

152 152 

153 Claude 的最新待办事项列表保持可见,Claude 提出的待处理问题的文本也保持可见;这需要 Claude Code v2.1.225 或更高版本。当 Claude 运行[子代理](/docs/zh-CN/sub-agents)时,带有其最新活动的实时进度行出现在启动它们的工具调用组下。这需要 Claude Code v2.1.269 或更高版本。153 Claude 最新的待办事项列表会保持可见,Claude 待回答问题所针对的文本也会保持可见;这需要 Claude Code v2.1.225 或更高版本。当 Claude 运行[子代理](/docs/zh-CN/sub-agents)时,显示其最新活动的实时进度行会出现在启动它们的工具调用组下方。这需要 Claude Code v2.1.269 或更高版本。

154 * 要登出您的 Anthropic 账户,请在 Settings 部分中选择 **Sign out**,或输入 `/logout`。在[第三方提供商](#use-third-party-providers)上,菜单不提供任何一个。需要 Claude Code v2.1.277 或更高版本。154 * 要退出您的 Anthropic 账户,请在 Settings 部分选择 **Sign out**,或输入 `/logout`。使用[第三方提供商](#use-third-party-providers)时,菜单不提供这两种方式。需要 Claude Code v2.1.277 或更高版本。

155 * 要报告错误,请点击菜单底部的 **Report a problem**,或输入 `/bug` 或 `/feedback` 以及可选的描述来预填充报告。当您提交报告并且您在第一方连接上登录到 Anthropic 时,Claude Code 会将其发送给 Anthropic。需要 Claude Code v2.1.229 或更高版本。155 * 要报告 bug,请点击菜单底部的 **Report a problem**,或输入 `/bug` 或 `/feedback`,并可附带一段描述来预填报告。当您提交报告且通过第一方连接登录了 Anthropic 时,Claude Code 会将报告发送给 Anthropic。需要 Claude Code v2.1.229 或更高版本。

156 156 

157 在第三方提供商上,或没有 Anthropic 凭证的情况下,不会发送任何内容。对话框在您写入之前会说明这一点。提交会将报告保存为[本地存档在 `~/.claude/feedback-bundles/`](/docs/zh-CN/data-usage#telemetry-services),其中已知的 API 密钥和令牌模式被编辑。将该文件发送给您的 Anthropic 账户代表或将其附加到支持请求。确认会命名该文件并包括一个 **Show folder** 按钮。在您的计算机上保存报告需要 Claude Code v2.1.284 或更高版本。157 使用第三方提供商或没有 Anthropic 凭据时,不会发送任何内容。对话框会在您填写之前说明这一点。提交后,报告会保存为[位于 `~/.claude/feedback-bundles/` 下的本地归档](/docs/zh-CN/data-usage#telemetry-services),其中已知的 API 密钥和令牌模式会被遮盖。请将该文件发送给您的 Anthropic 客户代表,或将其附加到支持请求中。确认信息会显示文件名,并包含 **Show folder** 按钮。在您的计算机上保存报告需要 Claude Code v2.1.284 或更高版本。

158 158 

159 如果您的组织的策略关闭了产品反馈,**Report a problem** 不会出现在菜单中,`/bug` 和 `/feedback` 会显示 `Feedback is turned off by your organization's policy or this environment's settings.` 通知,而不是打开报告。使用 Claude Code v2.1.284 或更高版本,如果您设置了 `DISABLE_FEEDBACK_COMMAND` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 环境变量,反馈也会被关闭,打开报告会显示该通知。159 如果您组织的策略关闭了产品反馈,菜单中不会出现 **Report a problem**,并且 `/bug` 和 `/feedback` 会显示 `Feedback is turned off by your organization's policy or this environment's settings.` 提示,而不是打开报告。在 Claude Code v2.1.284 或更高版本中,如果您设置了 `DISABLE_FEEDBACK_COMMAND` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 环境变量,反馈也会被关闭,打开报告时会改为显示该提示。

160* **Side questions**:输入 `/btw` 后跟一个问题来提问您的会话[而不添加到对话](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)。答案在聊天旁边的面板中打开,您可以在其中提出后续问题。线程在窗口重新加载后仍然存在。Claude Code 保留最新的 20 个交换,并根据 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 计划过期存储的线程,只要 Claude Code 可以[安全地确定保留期](/docs/zh-CN/claude-directory#cleaned-up-automatically)。要清除线程,请点击面板中的垃圾箱图标。需要 Claude Code v2.1.227 或更高版本。160* **旁支问题**:输入 `/btw` 后跟一个问题,即可就会话提问,且[不会添加到对话中](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)。回答会在聊天旁边的面板中打开,您可以在其中继续追问。该线程在窗口重新加载后仍会保留。Claude Code 会保留最新的 20 次交流,并按照 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 的计划使已存储的线程过期,前提是 Claude Code 能够[安全地确定保留期限](/docs/zh-CN/claude-directory#cleaned-up-automatically)。要清除线程,请点击面板中的垃圾桶图标。需要 Claude Code v2.1.227 或更高版本。

161* **Copy a response**:将鼠标悬停在响应上并点击 **Copy response** 来将其复制到您的剪贴板,或输入 `/copy` 来复制最新的响应。`/copy 2` 复制倒数第二个。需要 Claude Code v2.1.277 或更高版本。161* **复制回复**:将鼠标悬停在某条回复上并点击 **Copy response** 即可将其复制到剪贴板,或输入 `/copy` 复制最新的回复。`/copy 2` 会复制倒数第二条。需要 Claude Code v2.1.277 或更高版本。

162* **Context indicator**:提示框显示您使用了多少 Claude 的上下文窗口。Claude 在需要时自动压缩,或者您可以手动运行 `/compact`。162* **上下文指示器**:输入框会显示您已使用了 Claude 上下文窗口的多少。Claude 会在需要时自动压缩,您也可以手动运行 `/compact`。

163* **Prompt cache clock**:上下文指示器旁边的时钟图标估计对话的 [prompt cache](/docs/zh-CN/prompt-caching) 在过期前还剩多少时间。它从缓存的五分钟或一小时[生命周期](/docs/zh-CN/prompt-caching#cache-lifetime)倒计时,每个使用缓存的响应都会重新启动倒计时。除了压缩外,[使缓存失效的操作](/docs/zh-CN/prompt-caching#actions-that-invalidate-the-cache)不会重置时钟,因此在您切换模型后它仍然可以显示剩余的分钟数。163* **提示缓存时钟**:上下文指示器旁边的时钟图标会估算对话的[提示缓存](/docs/zh-CN/prompt-caching)在过期前还剩多少时间。它会从缓存的五分钟或一小时[生命周期](/docs/zh-CN/prompt-caching#cache-lifetime)开始倒计时,每次使用缓存的响应都会重新开始倒计时。除压缩外,[使缓存失效的操作](/docs/zh-CN/prompt-caching#actions-that-invalidate-the-cache)不会重置时钟,因此在您切换模型后它仍可能显示剩余分钟数。

164 * 在倒计时结束之前,图标显示剩余的分钟数,例如 **12m**。164 * 在倒计时结束之前,图标会显示剩余分钟数,例如 **12m**。

165 * 当倒计时结束时,分钟消失,图标变为红色,或您主题的错误颜色,直到下一个响应。缓存可能已过期,因此在缓存重建时,您对下一条消息的响应可能会更慢、更昂贵。如果五分钟的生命周期在您的消息之间不断耗尽,请参阅[自己选择 TTL](/docs/zh-CN/prompt-caching#choose-the-ttl-yourself)。165 * 倒计时结束时,分钟数会消失,图标会变为红色(或您主题的错误颜色),直到下一次响应。此时缓存很可能已经过期,因此在缓存重建期间,您下一条消息的响应会更慢、更昂贵。如果五分钟的生命周期总是在您发送消息的间隔中耗尽,请参阅[自行选择 TTL](/docs/zh-CN/prompt-caching#choose-the-ttl-yourself)。

166 * 在对话[压缩](/docs/zh-CN/prompt-caching#compacting-the-conversation)后,图标也会变为红色,没有分钟直到下一个响应,因为缓存还不覆盖压缩的对话。166 * 在对话刚刚[压缩](/docs/zh-CN/prompt-caching#compacting-the-conversation)之后,图标也会变为红色且不显示分钟数,直到下一次响应,因为缓存尚未覆盖压缩后的对话。

167* **Agent map**:当对话包括[子代理](/docs/zh-CN/sub-agents)时,代理计数(例如 **2 agents**)出现在提示框的底部。其点显示任何子代理是否正在工作或等待您的权限。167* **Agent 地图**:当对话包含[子代理](/docs/zh-CN/sub-agents)时,输入框底部会出现 Agent 计数,例如 **2 agents**。其圆点显示是否有子代理正在工作或正在等待您授予权限。

168 168 

169 点击代理计数来打开代理地图,它将对话的子代理绘制为主代理下的树,每个都有其状态、经过的时间和令牌计数。点击子代理来查看其提示和工具调用、打开其只读记录,或在其运行时停止它。需要 Claude Code v2.1.269 或更高版本。169 点击 Agent 计数即可打开 Agent 地图,它会将对话的子代理以树状形式绘制在主 Agent 之下,每个子代理都显示其状态、已用时间和 token 数。点击某个子代理即可查看其提示词和工具调用、打开其只读会话记录,或在其运行时停止它。需要 Claude Code v2.1.269 或更高版本。

170 170 

171 地图还列出了会话的其他[后台任务](/docs/zh-CN/tools-reference#background-commands),例如后台 shell 命令和[监视器](/docs/zh-CN/tools-reference#monitor-tool),在代理下方。点击一行来打开任务的卡片并在那里停止它。171 地图还会在 Agent 下方列出会话的其他[后台任务](/docs/zh-CN/tools-reference#background-commands),例如后台 shell 命令和[监视器](/docs/zh-CN/tools-reference#monitor-tool)。点击某一行即可打开该任务的卡片并在其中停止它。

172 172 

173 要在没有显示代理计数时打开地图,例如当 Claude 已启动后台 shell 但没有子代理时,请在提示框中输入 `/tasks`。地图中的后台任务和输入的 `/tasks` 需要 Claude Code v2.1.277 或更高版本。173 当没有显示 Agent 计数时(例如 Claude 启动了后台 shell 但没有子代理),要打开地图,请在输入框中输入 `/tasks`。地图中的后台任务以及输入 `/tasks` 需要 Claude Code v2.1.277 或更高版本。

174* **Extended thinking**:让 Claude 花更多时间推理复杂问题。通过命令菜单(`/`)打开它。Claude 的推理在对话中显示为折叠块:点击一个块来阅读它,或按 `Ctrl+O` 来展开或折叠会话中的每个思考块。有关详细信息,请参阅[Extended thinking](/docs/zh-CN/model-config#extended-thinking)。174* **扩展思考**:让 Claude 花更多时间推理复杂问题。通过命令菜单(`/`)将其打开。Claude 的推理会以折叠块的形式出现在对话中:点击某个块即可阅读,或按 `Ctrl+O` 展开或折叠会话中的所有思考块。详情请参阅[扩展思考](/docs/zh-CN/model-config#extended-thinking)。

175* **Multi-line input**:按 `Shift+Enter` 添加新行而不发送。这也适用于问题对话框的"Other"自由文本输入。175* **多行输入**:按 `Shift+Enter` 可添加新行而不发送。这同样适用于问题对话框中的“Other”自由文本输入。

176 176 

177<h3 id="reference-files-and-folders">177<h3 id="reference-files-and-folders">

178 参考文件和文件夹178 引用文件和文件夹

179</h3>179</h3>

180 180 

181使用 @-mentions 为 Claude 提供有关特定文件或文件夹的上下文。当您输入 `@` 后跟文件或文件夹名称时,Claude 会读取该内容,可以回答有关它的问题或对其进行更改。Claude Code 支持模糊匹配,因此您可以输入部分名称来找到您需要的内容:181使用 @ 提及为 Claude 提供有关特定文件或文件夹的上下文。当您输入 `@` 后跟文件或文件夹名称时,Claude 会读取该内容,并可以回答有关它的问题或对其进行更改。Claude Code 支持模糊匹配,因此您可以输入部分名称来找到所需内容:

182 182 

183```text wrap theme={null}183```text wrap theme={null}

184Explain the logic in @auth (fuzzy matches auth.js, AuthService.ts, etc.)184Explain the logic in @auth (fuzzy matches auth.js, AuthService.ts, etc.)

185What's in @src/components/ (include a trailing slash for folders)185What's in @src/components/ (include a trailing slash for folders)

186```186```

187 187 

188对于大型 PDF,您可以要求 Claude 读取特定页面而不是整个文件:单个页面、范围如第 1-10 页,或开放式范围如第 3 页及以后。读取特定页面需要在 Claude Code 运行的机器上安装 [poppler-utils](/docs/zh-CN/tools-reference#read-tool-behavior)。188对于大型 PDF,您可以让 Claude 读取特定页面而不是整个文件:单个页面、像第 1-10 页这样的范围,或像第 3 页及之后这样的开放范围。读取特定页面需要在运行 Claude Code 的机器上安装 [poppler-utils](/docs/zh-CN/tools-reference#read-tool-behavior)。

189 189 

190当您在编辑器中选择文本时,Claude 可以自动看到您突出显示的代码。提示框页脚显示选择了多少行。按 `Option+K`(Mac)/ `Alt+K`(Windows/Linux)来插入带有文件路径和行号的 @-mention(例如 `@app.ts#5-10`)。点击选择指示器上的 **X** 来删除它,这样 Claude 就不会收到选择。当您选择其他文本时,指示器会重新出现。190当您在编辑器中选择文本时,Claude 可以自动看到您高亮的代码。输入框底部会显示选中了多少行。按 `Option+K`(Mac)/ `Alt+K`(Windows/Linux)可插入带有文件路径和行号的 @ 提及(例如 `@app.ts#5-10`)。点击选区指示器上的 **X** 可将其移除,这样 Claude 就不会收到该选区。当您选择其他文本时,指示器会重新出现。

191 191 

192扩展程序从某些文件中隐瞒选定的文本。当文件在您的工作区内并匹配您的 `files.exclude` 或 `search.exclude` 设置时,Claude 最多接收文件的路径而不是您选择的文本。同样适用于 git 忽略的文件,只要 VS Code 的 `search.useIgnoreFiles` 设置和扩展程序的 [`respectGitIgnore` 设置](#extension-settings)都打开,这是默认值。此过滤器仅覆盖聊天面板:当 Claude Code 在集成终端中运行时,CLI 会发送您选择的文本,无论文件如何,因此添加 [`Read` deny 规则](#the-built-in-ide-mcp-server)来防止文件的内容从 Claude 那里被发送。192扩展会对某些文件隐瞒所选文本。当文件位于您的工作区内且匹配您的 `files.exclude` 或 `search.exclude` 设置时,Claude 最多只会收到该文件的路径,而不会收到您选择的文本。对于 git 忽略的文件也是如此,前提是 VS Code 的 `search.useIgnoreFiles` 设置和扩展的 [`respectGitIgnore` 设置](#extension-settings)都已打开(默认即为打开)。此过滤仅适用于聊天面板:当 Claude Code 在集成终端中运行时,无论是什么文件,CLI 都会发送您选择的文本,因此若要在那里阻止 Claude 获取某个文件的内容,请添加 [`Read` 拒绝规则](#the-built-in-ide-mcp-server)。

193 193 

194Claude 也会看到您在编辑器中打开的文件,即使没有选择任何内容,提示框也会显示其名称。要仅添加您选择的文本,请关闭[附加打开文件设置](vscode://settings/claudeCode.attachOpenFile)。该设置需要 Claude Code v2.1.271 或更高版本。194即使没有选择任何内容,Claude 也能看到您在编辑器中打开的是哪个文件,输入框会显示其名称。若只想添加您选择的文本,请关闭 [Attach Open File 设置](vscode://settings/claudeCode.attachOpenFile)。该设置需要 Claude Code v2.1.271 或更高版本。

195 195 

196您也可以将图像和文件附加到您的消息:196您还可以在消息中附加图片和文件:

197 197 

198* 要附加图像,请从剪贴板将其粘贴到提示框中。198* 要附加图片,请将其从剪贴板粘贴到输入框中。

199* 要附加文件,请在将它们拖入提示框时按住 `Shift`。199* 要附加文件,请按住 `Shift` 将其拖入输入框。

200* 要从上下文中删除附件,请点击它上面的 X。200* 要从上下文中移除附件,请点击其上的 X。

201 201 

202<h3 id="paste-text">202<h3 id="paste-text">

203 粘贴文本203 粘贴文本

204</h3>204</h3>

205 205 

206您粘贴的文本在提示框中保持可见,而不是像在[终端](/docs/zh-CN/terminal-config#paste-large-content)中那样折叠到占位符。在 Claude Code [标记粘贴文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text)的会话中,Claude 仍然会看到大型粘贴作为您粘贴而不是输入的文本。206您粘贴的文本会在输入框中保持可见,而不会像[在终端中](/docs/zh-CN/terminal-config#paste-large-content)那样折叠为占位符。在 Claude Code [标记粘贴文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text)的会话中,Claude 仍会将大段粘贴内容视为您粘贴的文本,而不是您输入的文本。

207 207 

208Claude Code 还从您粘贴到提示框中的文本和您发送的任何其他内容中删除[不可见的 Unicode 字符](/docs/zh-CN/interactive-mode#invisible-characters-in-prompts):208Claude Code 还会从您粘贴到输入框中的文本以及您发送的任何其他内容中移除[不可见的 Unicode 字符](/docs/zh-CN/interactive-mode#invisible-characters-in-prompts):

209 209 

210* 如果在粘贴时出现诸如 `Removed 3 invisible characters from the pasted text` 的通知,文本进入时没有这些字符。210* 如果粘贴时出现 `Removed 3 invisible characters from the pasted text` 之类的提示,说明文本已在去除这些字符后输入。

211* 如果在发送时出现关于删除字符的通知,则没有发送任何内容。清理后的文本回到提示框中。再次发送以发送显示的文本。211* 如果发送时出现有关已移除字符的提示,说明没有发送任何内容。清理后的文本已回到输入框中。再次发送即可按所示内容发送文本。

212 212 

213<h3 id="resume-past-conversations">213<h3 id="resume-past-conversations">

214 恢复过去的对话214 恢复过去的对话

215</h3>215</h3>

216 216 

217点击 Claude Code 面板顶部的 **Session history** 按钮来访问您的对话历史。您可以按关键字搜索或按时间浏览。217点击 Claude Code 面板顶部的 **Session history** 按钮即可访问您的对话历史。您可以按关键字搜索或按时间浏览。

218 218 

219点击任何对话来恢复它,包含完整的消息历史。如果对话已在当前窗口的另一个选项卡中打开,点击它会切换到该选项卡。有关恢复会话的更多信息,请参阅[管理会话](/docs/zh-CN/sessions)。219点击任意对话即可带着完整的消息历史恢复它。如果该对话已在当前窗口的另一个标签页中打开,点击它会切换到该标签页。有关恢复会话的更多信息,请参阅[管理会话](/docs/zh-CN/sessions)。

220 220 

221* **Session titles**:新会话根据您的第一条消息接收 AI 生成的标题。221* **会话标题**:新会话会根据您的第一条消息获得 AI 生成的标题。

222* **Rename and archive**:将鼠标悬停在会话上以显示这些操作。重命名以给它一个描述性标题,或存档以将其移动到列表底部的 **Archived sessions** 组。222* **重命名和归档**:将鼠标悬停在会话上即可显示这些操作。重命名可为其设置描述性标题,归档则会将其移到列表底部的 **Archived sessions** 组中。

223 223 

224默认情况下,14 天内没有活动的会话会自动移动到 **Archived sessions**,除非它是打开的、未读的或在[组](#organize-sessions-into-groups)中。自动存档需要 Claude Code v2.1.265 或更高版本。要更改期间或关闭它,请打开[存档非活动会话设置](vscode://settings/claudeCode.archiveInactiveSessions)并选择天数或 **Never**。224如果该对话在另一个 Claude Code 进程中打开(例如终端中的 `claude` 或另一个 VS Code 窗口),输入框的位置会显示一条提示:`This conversation is still open somewhere else. Using it in two places at once can mix up its messages.` 若要在此处继续,请先在另一处关闭该对话,然后点击 **Open here anyway**。如果不关闭就点击,该对话会在两处同时打开。设置了 [`claudeProcessWrapper`](#extension-settings) 时,扩展会跳过此检查并直接打开对话。

225 225 

226要恢复存档的会话,请展开 **Archived sessions** 并点击 **Unarchive session**。要一次恢复每个存档的会话,请将鼠标悬停在活动栏中会话列表中的 **Archived sessions** 标题上,并点击其取消存档图标,这需要 Claude Code v2.1.277 或更高版本。在 v2.1.257 之前,该操作是 **Delete session**,它隐藏了一个会话而无法恢复。您之前删除的会话在升级后会出现在 **Archived sessions** 下。226默认情况下,14 天内没有活动的会话会自动移到 **Archived sessions**,除非它处于打开状态、未读或位于某个[组](#organize-sessions-into-groups)中。自动归档需要 Claude Code v2.1.265 或更高版本。要更改期限或将其关闭,请打开 [Archive Inactive Sessions 设置](vscode://settings/claudeCode.archiveInactiveSessions),然后选择天数或 **Never**。

227 227 

228当您恢复的对话以 Plan 模式结束时,Claude Code 会恢复 Plan 模式。需要 Claude Code v2.1.246 或更高版本。Claude Code 在两种情况下不会恢复它:228要恢复已归档的会话,请展开 **Archived sessions** 并点击 **Unarchive session**。要一次性恢复所有已归档的会话,请将鼠标悬停在活动栏会话列表中的 **Archived sessions** 标题上,然后点击其取消归档图标,这需要 Claude Code v2.1.277 或更高版本。在 v2.1.257 之前,该操作是 **Delete session**,它会隐藏会话且无法恢复。升级后,您当时删除的会话会出现在 **Archived sessions** 下。

229 229 

230* 扩展程序从 `claudeCode.initialPermissionMode` 或从较早对话中继承的选择[选择起始权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)230当您恢复的对话以计划模式结束时,Claude Code 会恢复计划模式。需要 Claude Code v2.1.246 或更高版本。在以下两种情况下,Claude Code 不会恢复计划模式:

231 

232* 扩展根据 `claudeCode.initialPermissionMode` 或从先前对话沿用的选择来[选择初始权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)

231* 您配置了 `claudeCode.claudeProcessWrapper`233* 您配置了 `claudeCode.claudeProcessWrapper`

232 234 

233<h3 id="resume-cloud-sessions-from-claude-ai">235<h3 id="resume-cloud-sessions-from-claude-ai">

234 从 Claude.ai 恢复云会话236 从 Claude.ai 恢复云端会话

235</h3>237</h3>

236 238 

237如果您运行[网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web),您可以直接在 VS Code 中恢复这些云会话。这需要使用 **Claude.ai Subscription** 登录,而不是 Anthropic Console。239如果您运行[云端会话](/docs/zh-CN/claude-code-on-the-web),可以直接在 VS Code 中恢复它们。这需要使用 **Claude.ai Subscription** 登录,而不是 Anthropic Console。

238 240 

239<Steps>241<Steps>

240 <Step title="打开会话历史">242 <Step title="打开会话历史">

241 点击 Claude Code 面板顶部的 **Session history** 按钮。243 点击 Claude Code 面板顶部的 **Session history** 按钮。

242 </Step>244 </Step>

243 245 

244 <Step title="选择 Web 选项卡">246 <Step title="选择 Web 标签页">

245 对话框显示两个选项卡:Local 和 Web。点击 **Web** 来查看来自 claude.ai 的会话。247 对话框显示两个标签页:Local 和 Web。点击 **Web** 即可查看来自 claude.ai 的会话。

246 </Step>248 </Step>

247 249 

248 <Step title="选择要恢复的会话">250 <Step title="选择要恢复的会话">

249 浏览或搜索会话。点击一个来继续本地对话。251 浏览或搜索会话。点击其中一个即可在本地继续对话。

250 </Step>252 </Step>

251</Steps>253</Steps>

252 254 

253<Note>255<Note>

254 当您打开的文件夹是 GitHub 存储库时,Web 选项卡仅显示来自该存储库的会话。256 当您打开的文件夹是 GitHub 仓库时,Web 标签页仅显示来自该仓库的会话。

255 257 

256 当您恢复云会话时,扩展程序会下载对话历史的副本;更改不会同步回 claude.ai。258 当您恢复云端会话时,扩展会下载对话历史的副本;更改不会同步回 claude.ai。

257</Note>259</Note>

258 260 

259Web 选项卡还列出您的 [Remote Control](/docs/zh-CN/remote-control) 会话。如果您点击在您打开的文件夹中运行的会话,扩展程序会打开该本地对话,而不是下载副本,如果有的话,会聚焦已显示它的选项卡。如果扩展程序无法排除另一个 Claude 进程已打开对话,您会获得下载的副本。261Web 标签页还会列出您的 [Remote Control](/docs/zh-CN/remote-control) 会话。如果您点击的会话曾在您当前打开的文件夹中运行,扩展会打开该本地对话而不是下载副本,并且如果已有标签页正在显示它,则会聚焦到该标签页。如果扩展无法排除另一个 Claude 进程已打开该对话的可能性,您将获得一份下载的副本。

260 262 

261如果对话的任何部分下载失败,会出现错误,不会保存副本。再次选择会话以重试。如果您选择还没有对话可下载的会话,错误会告诉您在哪里继续它。263如果对话的任何部分下载失败,会出现错误且不会保存副本。再次选择该会话即可重试。如果您选择的会话尚无可下载的对话,错误信息会告诉您应在何处继续该会话。

262 264 

263<h3 id="check-account-and-usage">265<h3 id="check-account-and-usage">

264 检查账户和使用情况266 查看账户和用量

265</h3>267</h3>

266 268 

267运行 `/usage` 来打开 Account & usage 对话框。它显示您登录的账户,使用情况报告因登录而异:269运行 `/usage` 即可打开 Account & usage 对话框。它会显示您已登录的账户,所报告的用量因登录方式而异:

268 270 

269* **claude.ai plan**:您的计划限制的使用条形图,例如当前会话和周。每个条形图显示距离其限制重置还有多长时间。271* **claude.ai 套餐**:显示您套餐各项限额的用量条,例如当前会话和本周。每个用量条都会显示距离该限额重置还有多长时间。

270 272 

271 对话框还分解了对您的计划限制有贡献的内容。它标记占最近使用量 10% 或更多的行为,例如缓存未命中、长上下文和子代理密集或高度并行的会话,每个都有减少它的提示。Attribution 表显示了每个 skill、subagent、plugin 和 MCP 服务器贡献了多少使用量。273 对话框还会细分哪些因素在消耗您的套餐限额。它会标出占近期用量 10% 或以上的行为,例如缓存未命中、长上下文以及大量使用子代理或高度并行的会话,并为每项提供降低用量的建议。归因表会显示每个 skill、子代理、插件和 MCP 服务器各自产生了多少用量。

272 274 

273 使用 Day 和 Week 切换来在过去 24 小时和过去 7 天之间切换。这些数字是近似的,并从此机器上的本地会话计算,因此不包括来自其他设备或 claude.ai 的使用情况。275 使用 Day 和 Week 切换按钮可在过去 24 小时和过去 7 天之间切换。这些数据是根据本机上的本地会话计算得出的近似值,因此不包括来自其他设备或 claude.ai 的用量。

274* **Other sign-ins**:当计划限制不适用于您的登录时,例如在[第三方提供商](#use-third-party-providers)上或使用 API 密钥时,Usage 部分显示会话自己的成本和令牌使用情况。CLI 的 `/usage` 在其[会话块](/docs/zh-CN/costs#track-your-costs)中显示相同的总计。活动栏中的会话列表也在其 **Account & usage** 标题下显示活跃会话的总计。需要 Claude Code v2.1.277 或更高版本。276* **其他登录方式**:当套餐限额不适用于您的登录方式时(例如使用[第三方提供商](#use-third-party-providers)或 API 密钥),Usage 部分会改为显示会话自身的费用和 token 用量。CLI 的 `/usage` 会在其 [Session 区块](/docs/zh-CN/costs#track-your-costs)中显示相同的总计。活动栏中的会话列表也会在其 **Account & usage** 标题下显示活动会话的总计。需要 Claude Code v2.1.277 或更高版本。

275 277 

276有关跟踪和减少使用情况的更多信息,请参阅[跟踪您的成本](/docs/zh-CN/costs#track-your-costs)。278有关跟踪和降低用量的更多信息,请参阅[跟踪您的费用](/docs/zh-CN/costs#track-your-costs)。

277 279 

278<h2 id="customize-your-workflow">280<h2 id="customize-your-workflow">

279 自定义您的工作流281 自定义您的工作流


299 将侧边栏用于您的主要 Claude 会话,并为辅助任务打开其他选项卡。Claude 会记住您首选的位置。Activity Bar 会话列表图标与 Claude 面板分开:会话列表始终在 Activity Bar 中可见,而 Claude 面板图标仅在面板停靠到左侧边栏时才出现在那里。301 将侧边栏用于您的主要 Claude 会话,并为辅助任务打开其他选项卡。Claude 会记住您首选的位置。Activity Bar 会话列表图标与 Claude 面板分开:会话列表始终在 Activity Bar 中可见,而 Claude 面板图标仅在面板停靠到左侧边栏时才出现在那里。

300</Tip>302</Tip>

301 303 

304<h3 id="continue-conversations-after-a-reload">

305 重新加载后继续对话

306</h3>

307 

302运行 **Developer: Reload Window** 或重启 VS Code 后,聊天是否会返回其对话取决于它在哪里打开:308运行 **Developer: Reload Window** 或重启 VS Code 后,聊天是否会返回其对话取决于它在哪里打开:

303 309 

304* **编辑器选项卡**:对话会随其选项卡返回。310* **编辑器选项卡**:对话会随其选项卡返回。

305* **侧边栏**:如果您在过去 10 分钟内发送了消息或 Claude 在其中做出了响应,对话会返回。如果它没有返回,请从 [Session history](#resume-past-conversations) 恢复对话。311* **侧边栏**:如果您在过去 10 分钟内发送了消息或 Claude 在其中做出了响应,对话会返回。如果它没有返回,请从 [Session history](#resume-past-conversations) 恢复对话。

306 312 

313如果另一个 Claude Code 进程仍打开着该对话,在此处打开之前会先询问您,显示的 **Open here anyway** 通知与您[从会话历史记录恢复对话](#resume-past-conversations)时相同。

314 

307如果重新加载中断了 Claude 的中间步骤,当对话返回时 Claude 会继续该步骤,聊天中的通知会标记该继续。需要 Claude Code v2.1.274 或更高版本。如果步骤在一小时前被中断或会话在其他地方打开,对话会返回为空闲状态。315如果重新加载中断了 Claude 的中间步骤,当对话返回时 Claude 会继续该步骤,聊天中的通知会标记该继续。需要 Claude Code v2.1.274 或更高版本。如果步骤在一小时前被中断或会话在其他地方打开,对话会返回为空闲状态。

308 316 

309要关闭继续功能,请打开 [Continue After Reload setting](vscode://settings/claudeCode.continueAfterReload) 并取消勾选它。317要关闭继续功能,请打开 [Continue After Reload setting](vscode://settings/claudeCode.continueAfterReload) 并取消勾选它。在 VS Code 的环境中或在 [`environmentVariables` 设置](#extension-settings)中设置 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars#variables) 或任何其他 `CLAUDE_CODE_RESUME_` 变量在面板中不起作用,因为扩展会在启动面板的会话之前移除这些变量。

310 318 

311<h3 id="run-multiple-conversations">319<h3 id="run-multiple-conversations">

312 运行多个对话320 运行多个对话


364 372 

365* **已安装的插件**显示在顶部,带有切换开关以启用或禁用它们。373* **已安装的插件**显示在顶部,带有切换开关以启用或禁用它们。

366 * 如果您关闭项目的共享 `.claude/settings.json` 启用的插件,扩展会先询问:**为我禁用**仅为您关闭它,而**为所有人禁用**会更改共享文件。374 * 如果您关闭项目的共享 `.claude/settings.json` 启用的插件,扩展会先询问:**为我禁用**仅为您关闭它,而**为所有人禁用**会更改共享文件。

375 * 加载失败的插件会在其行上显示简短原因。点击该原因可查看您可以采取的措施,包括复制完整的错误消息以便在[插件故障排除](/docs/zh-CN/plugins/troubleshooting)中查找。

367* **可用插件**来自您配置的市场,显示在下方376* **可用插件**来自您配置的市场,显示在下方

368* 搜索以按名称或描述过滤插件377* 搜索以按名称或描述过滤插件

369* 点击任何可用插件上的**安装**378* 点击任何可用插件上的**安装**


406| 参数 | 描述 |415| 参数 | 描述 |

407| - | - |416| - | - |

408| `plugin` | 插件的名称,如其市场所列。必需。 |417| `plugin` | 插件的名称,如其市场所列。必需。 |

409| `marketplace` | 插件的来源:GitHub `owner/repo`、`https://` URL 或 git SSH URL,例如 `git@github.com:owner/repo.git`。省略时默认为 `anthropics/claude-plugins-official`。 |418| `marketplace` | 市场的[来源](/docs/zh-CN/plugins/install#add-a-marketplace):GitHub `owner/repo`、`https://` URL 或 git SSH 地址,例如 `git@github.com:owner/repo.git`。省略时默认为 `anthropics/claude-plugins-official`。 |

419 

420扩展在打开任何内容之前会检查这两个值:

410 421 

411[Marketplaces 选项卡](#manage-marketplaces)接受的某些值在链接中不起作用,例如本地路径或 `http://` 地址。对于这些,VS Code 会显示错误消息,对话框不会打开。422* **插件名称**:最多 100 个字符,以 ASCII 字母或数字开头,其余部分只能使用 ASCII 字母、数字、`.`、`_` 和 `-`。

423* **市场来源**:只能是 `marketplace` 参数所列出的形式,因此不能是本地路径、`http://` 地址或市场的名称(例如 `claude-plugins-official`)。`https://` URL 不能包含用户名、密码或查询字符串。

424* **Git ref**:要将市场固定到某个分支或标签,请在来源后附加 `%23`(`#` 的编码形式)再加上 ref,例如 `marketplace=owner/repo%23v1.0`。包含未编码 `#` 的链接会失败。`anthropics` GitHub 组织中的市场无法在链接中固定。

412 425 

413两种情况在对话框中以消息结束,而不是范围选择:426打开违反这些规则的链接时,用户会看到以 `Invalid plugin installation URL` 开头的错误。Claude Code 面板和对话框不会打开,也不会安装任何内容。如果您的插件名称或市场无法放入链接中,请告知用户在 **Marketplaces** 选项卡中添加该市场,然后从 **Plugins** 选项卡安装插件。

427 

428以下情况会在对话框中以消息结束,而不是作用域选择:

414 429 

415* **市场中没有列出该名称的插件**:对话框报告未找到该插件。根据市场的列表检查 `plugin` 值。430* **市场中没有列出该名称的插件**:对话框报告未找到该插件。根据市场的列表检查 `plugin` 值。

416* **插件已安装**:对话框会说明这一点,不会发生任何更改。431* **插件已安装**:对话框会说明这一点,不会发生任何更改。

432* **已添加了另一个同名的市场**:对话框会说明链接中的市场未被添加,不会安装任何内容。

417 433 

418GitHub README、问题和某些其他 Markdown 主机会删除其方案不是 `http` 或 `https` 的链接,因此 `vscode://` 链接在那里呈现为纯文本。在这些主机上将 URL 放在代码块中,如 [链接呈现为纯文本而不是可点击的](/docs/zh-CN/deep-links#the-link-renders-as-plain-text-instead-of-being-clickable) 对 `claude-cli://` 链接所描述的那样。434GitHub README、问题和某些其他 Markdown 主机会删除其方案不是 `http` 或 `https` 的链接,因此 `vscode://` 链接在那里呈现为纯文本。在这些主机上将 URL 放在代码块中,如 [链接呈现为纯文本而不是可点击的](/docs/zh-CN/deep-links#the-link-renders-as-plain-text-instead-of-being-clickable) 对 `claude-cli://` 链接所描述的那样。

419 435 


453 469 

454Claude 为浏览器任务打开新标签页并共享您浏览器的登录状态,因此它可以访问您已登录的任何网站。470Claude 为浏览器任务打开新标签页并共享您浏览器的登录状态,因此它可以访问您已登录的任何网站。

455 471 

472如需让每个会话在启动时自动连接到您的浏览器,而无需输入 `@browser`,请参阅[默认启用 Chrome](/docs/zh-CN/chrome#enable-chrome-by-default)。关于在以这种方式连接的会话中,Claude Code 在执行浏览器操作前询问您的情况,请参阅 [VS Code 会话中的权限提示](/docs/zh-CN/chrome#permission-prompts-in-vs-code-sessions)。

473 

456有关设置说明、完整的功能列表和故障排除,请参阅 [在 Chrome 中使用 Claude Code](/docs/zh-CN/chrome)。474有关设置说明、完整的功能列表和故障排除,请参阅 [在 Chrome 中使用 Claude Code](/docs/zh-CN/chrome)。

457 475 

458<h2 id="vs-code-commands-and-shortcuts">476<h2 id="vs-code-commands-and-shortcuts">


569| `attachOpenFile` | `true` | 将编辑器中打开的文件添加到您的消息中,并在提示框中显示它。关闭时,仅添加您选择的文本。需要 Claude Code v2.1.271 或更高版本 |587| `attachOpenFile` | `true` | 将编辑器中打开的文件添加到您的消息中,并在提示框中显示它。关闭时,仅添加您选择的文本。需要 Claude Code v2.1.271 或更高版本 |

570| `useCtrlEnterToSend` | `false` | 使用 Ctrl/Cmd+Enter 而不是 Enter 来发送提示 |588| `useCtrlEnterToSend` | `false` | 使用 Ctrl/Cmd+Enter 而不是 Enter 来发送提示 |

571| `scrollToBottomOnSend` | `true` | 当您发送消息时,将对话滚动到底部。关闭时,对话保持在您离开的位置。需要 Claude Code v2.1.275 或更高版本 |589| `scrollToBottomOnSend` | `true` | 当您发送消息时,将对话滚动到底部。关闭时,对话保持在您离开的位置。需要 Claude Code v2.1.275 或更高版本 |

590| `showMessageTimestamps` | `false` | 显示每条消息的发送时间。日期行会标记日期变更的位置。需要 Claude Code v2.1.284 或更高版本 |

572| `enableNewConversationShortcut` | `false` | 启用 Cmd/Ctrl+N 来开始新对话 |591| `enableNewConversationShortcut` | `false` | 启用 Cmd/Ctrl+N 来开始新对话 |

573| `enableReopenClosedSessionShortcut` | `true` | 使用 Cmd/Ctrl+Shift+T 重新打开最近关闭的 Claude 会话标签页。当最后关闭的标签页不是 Claude 会话时,快捷键会运行 VS Code 的正常重新打开关闭编辑器命令。 |592| `enableReopenClosedSessionShortcut` | `true` | 使用 Cmd/Ctrl+Shift+T 重新打开最近关闭的 Claude 会话标签页。当最后关闭的标签页不是 Claude 会话时,快捷键会运行 VS Code 的正常重新打开关闭编辑器命令。 |

574| `archiveInactiveSessions` | `14` | 在无活动的这么多天后[自动存档会话](#resume-past-conversations):`1`、`2`、`7` 或 `14`。设置为 `0` 以关闭。需要 Claude Code v2.1.265 或更高版本 |593| `archiveInactiveSessions` | `14` | 在无活动的这么多天后[自动存档会话](#resume-past-conversations):`1`、`2`、`7` 或 `14`。设置为 `0` 以关闭。需要 Claude Code v2.1.265 或更高版本 |

575| `continueAfterReload` | `true` | 窗口重新加载后,Claude [继续在恢复的会话中被中断的步骤](#choose-where-claude-lives)。需要 Claude Code v2.1.274 或更高版本 |594| `continueAfterReload` | `true` | 窗口重新加载后,Claude [继续在恢复的会话中被中断的步骤](#continue-conversations-after-a-reload)。需要 Claude Code v2.1.274 或更高版本 |

576| `hideOnboarding` | `false` | 隐藏入门清单(毕业帽图标) |595| `hideOnboarding` | `false` | 隐藏入门清单(毕业帽图标) |

577| `focusView` | `false` | 将工具调用、工具结果和思考隐藏在可展开的行后面,只留下您的提示和 Claude 的响应。Claude 的最新待办事项列表保持可见;这需要 Claude Code v2.1.225 或更高版本。您也可以从命令菜单切换焦点视图。需要 Claude Code v2.1.221 或更高版本 |596| `focusView` | `false` | 将工具调用、工具结果和思考隐藏在可展开的行后面,只留下您的提示和 Claude 的响应。Claude 的最新待办事项列表保持可见;这需要 Claude Code v2.1.225 或更高版本。您也可以从命令菜单切换焦点视图。需要 Claude Code v2.1.221 或更高版本 |

578| `respectGitIgnore` | `true` | 从文件搜索和[选择上下文](#reference-files-and-folders)中排除 .gitignore 模式 |597| `respectGitIgnore` | `true` | 从文件搜索和[选择上下文](#reference-files-and-folders)中排除 .gitignore 模式 |

579| `usePythonEnvironment` | `true` | 运行 Claude 时激活工作区的 Python 环境。需要 Python 扩展。 |598| `usePythonEnvironment` | `true` | 运行 Claude 时激活工作区的 Python 环境。需要 Python 扩展。 |

580| `environmentVariables` | `[]` | 为 Claude 进程设置环境变量。对于共享配置,请改用 Claude Code 设置。 |599| `environmentVariables` | `[]` | 为 Claude 进程设置环境变量。对于共享配置,请改用 Claude Code 设置。仅当值为绝对路径时,[`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 条目才会生效;扩展不会展开 `~`,并且会忽略相对路径值。 |

581| `disableLoginPrompt` | `false` | 跳过身份验证提示(用于第三方提供商设置) |600| `disableLoginPrompt` | `false` | 跳过身份验证提示(用于第三方提供商设置) |

582| `allowDangerouslySkipPermissions` | `false` | 在模式选择器中添加绕过权限。仅在没有互联网访问的沙箱中使用。 |601| `allowDangerouslySkipPermissions` | `false` | 在模式选择器中添加绕过权限。仅在没有互联网访问的沙箱中使用。 |

583| `claudeProcessWrapper` | - | 用于启动 Claude 进程的可执行文件。当存在时,捆绑的二进制路径作为参数传递。如果扩展构建不包含您的平台的二进制文件,请将其设置为单独安装的 `claude` 二进制文件。在包装的设置中,对话以手动模式开始,除非您设置了 `initialPermissionMode` 或在之前的对话中选择了手动、自动编辑或自动,因为扩展会跳过那里的设置和内置默认步骤;请参阅[切换权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)。激活时出现"不支持的平台"错误意味着您的平台没有捆绑的二进制文件;请参阅[哪些平台有预构建的二进制文件](/docs/zh-CN/troubleshoot-install#native-binary-not-found-after-npm-install)。 |602| `claudeProcessWrapper` | - | 用于启动 Claude 进程的可执行文件。当存在时,捆绑的二进制路径作为参数传递。如果扩展构建不包含您的平台的二进制文件,请将其设置为单独安装的 `claude` 二进制文件。在包装的设置中,对话以手动模式开始,除非您设置了 `initialPermissionMode` 或在之前的对话中选择了手动、自动编辑或自动,因为扩展会跳过那里的设置和内置默认步骤;请参阅[切换权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)。激活时出现"不支持的平台"错误意味着您的平台没有捆绑的二进制文件;请参阅[哪些平台有预构建的二进制文件](/docs/zh-CN/troubleshoot-install#native-binary-not-found-after-npm-install)。 |


666 685 

667使用 `@terminal:name` 在您的提示中引用终端输出,其中 `name` 是终端的标题。这让 Claude 可以看到命令输出、错误消息或日志,而无需复制粘贴。686使用 `@terminal:name` 在您的提示中引用终端输出,其中 `name` 是终端的标题。这让 Claude 可以看到命令输出、错误消息或日志,而无需复制粘贴。

668 687 

688<h3 id="move-a-running-command-or-subagent-to-the-background">

689 Move a running command or subagent to the background

690</h3>

691 

692当 Claude 正在等待某个命令或[子代理](/docs/zh-CN/sub-agents),而其耗时超出您的预期时,请单击对话中其工具调用下方的 **Run in background**。该操作会在命令运行约两秒后出现,或在子代理启动后立即出现。Claude 会停止等待并继续当前轮次,而该命令或子代理则作为[后台任务](/docs/zh-CN/tools-reference#background-commands)继续运行,并在完成时通知 Claude。需要 Claude Code v2.1.287 或更高版本。

693 

694在此期间,若要查看任务状态或停止任务,请在提示框中输入 `/tasks` 以打开 [Agent 地图](#use-the-prompt-box)。子代理会在其中的 Agent 树中保留其位置,而命令则列在各 Agent 下方,其[卡片上显示最新输出](#monitor-background-processes)。以这种方式移至后台的命令受[后台命令的时间限制](/docs/zh-CN/tools-reference#time-limit-for-background-commands)约束。

695 

669<h3 id="monitor-background-processes">696<h3 id="monitor-background-processes">

670 Monitor background processes697 Monitor background processes

671</h3>698</h3>

672 699 

673在提示框中输入 `/tasks` 以打开[代理地图](#use-the-prompt-box),它列出会话的后台任务,例如 Claude 作为后台 shell 命令留下运行的开发服务器。单击任务以打开其卡片并在那里停止它。需要 Claude Code v2.1.277 或更高版本。700在提示框中输入 `/tasks` 以打开 [Agent 地图](#use-the-prompt-box),它列出会话的后台任务,例如 Claude 作为后台 shell 命令留下运行的开发服务器。单击任务以打开其卡片,您可以在那里停止它。需要 Claude Code v2.1.277 或更高版本。

701 

702对于后台 shell 命令,或运行命令的[监视器](/docs/zh-CN/tools-reference#monitor-tool),卡片还会显示该命令的最新输出,并在命令运行期间持续刷新。

674 703 

675<h3 id="connect-to-external-tools-with-mcp">704<h3 id="connect-to-external-tools-with-mcp">

676 Connect to external tools with MCP705 Connect to external tools with MCP


778| `mcp__ide__getDiagnostics` | 返回语言服务器诊断——VS Code 的问题面板中的错误和警告。可选地限定到一个文件。 | 是 |807| `mcp__ide__getDiagnostics` | 返回语言服务器诊断——VS Code 的问题面板中的错误和警告。可选地限定到一个文件。 | 是 |

779| `mcp__ide__executeCode` | 在活动 Jupyter notebook 的内核中运行 Python 代码。请参阅下面的确认流程。 | 否 |808| `mcp__ide__executeCode` | 在活动 Jupyter notebook 的内核中运行 Python 代码。请参阅下面的确认流程。 | 否 |

780 809 

810**聊天面板中的诊断。** 在聊天面板中,使用 Claude Code v2.1.285 或更高版本时,Claude 通过一个名为 `claude-vscode` 的独立内置服务器读取 VS Code 的问题面板。Claude 可以向它请求某个文件中的当前错误和警告,或者 VS Code 具有诊断信息的所有文件中的当前错误和警告。

811 

812hook 和权限规则将聊天面板的诊断工具视为 `mcp__claude-vscode__getDiagnostics`。要同时涵盖 CLI 和聊天面板中的诊断,请在您的 hook 或规则中同时指定 `mcp__ide__getDiagnostics` 和 `mcp__claude-vscode__getDiagnostics`。

813 

814以下 `settings.json` 示例拒绝这两个工具:

815 

816```json theme={null}

817{

818 "permissions": {

819 "deny": [

820 "mcp__ide__getDiagnostics",

821 "mcp__claude-vscode__getDiagnostics"

822 ]

823 }

824}

825```

826 

827`Read` 拒绝规则不涵盖这两个工具中的任何一个,因此请像示例那样使用[拒绝规则](/docs/zh-CN/permissions#mcp)按名称阻止它们。

828 

781**Jupyter 执行始终先询问。** `mcp__ide__executeCode` 无法静默运行任何内容。在每次调用时,代码被插入为活动 notebook 末尾的新单元格,VS Code 将其滚动到视图中,原生快速选择器要求您**执行**或**取消**。取消——或用 `Esc` 关闭选择器——会向 Claude 返回错误,不会运行任何内容。当没有活动 notebook、未安装 Jupyter 扩展 (`ms-toolsai.jupyter`) 或内核不是 Python 时,该工具也会直接拒绝。829**Jupyter 执行始终先询问。** `mcp__ide__executeCode` 无法静默运行任何内容。在每次调用时,代码被插入为活动 notebook 末尾的新单元格,VS Code 将其滚动到视图中,原生快速选择器要求您**执行**或**取消**。取消——或用 `Esc` 关闭选择器——会向 Claude 返回错误,不会运行任何内容。当没有活动 notebook、未安装 Jupyter 扩展 (`ms-toolsai.jupyter`) 或内核不是 Python 时,该工具也会直接拒绝。

782 830 

783<Note>831<Note>

Details

75 75 

76 通过此连接,会话可以克隆任何公共存储库,但只有在 Claude GitHub App 安装在私有存储库上时,才能在私有存储库中工作。[安装 Claude GitHub App](https://github.com/apps/claude/installations/new) 到您想要使用其私有存储库的每个 GitHub 账户或组织。在 GitHub 组织上,组织所有者可能需要批准安装。安装应用还会启用[Auto-fix](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests),这让 Claude 能够响应这些存储库中拉取请求的 CI 失败和审查评论。76 通过此连接,会话可以克隆任何公共存储库,但只有在 Claude GitHub App 安装在私有存储库上时,才能在私有存储库中工作。[安装 Claude GitHub App](https://github.com/apps/claude/installations/new) 到您想要使用其私有存储库的每个 GitHub 账户或组织。在 GitHub 组织上,组织所有者可能需要批准安装。安装应用还会启用[Auto-fix](/docs/zh-CN/claude-code-on-the-web#auto-fix-pull-requests),这让 Claude 能够响应这些存储库中拉取请求的 CI 失败和审查评论。

77 77 

78 连接时,如果您拥有的 GitHub 账户安装了 Claude GitHub App,Claude 还会将这些账户关联到您的 Claude 组织。在 Team 和 Enterprise 计划上,管理员可以在[已连接的 GitHub 账户列表](/docs/zh-CN/admin-setup#connected-github-accounts)中看到这些账户。

79 

78 如果入门流程在此时提示您安装 Claude GitHub App,而您想稍后再做,请单击**Skip**。80 如果入门流程在此时提示您安装 Claude GitHub App,而您想稍后再做,请单击**Skip**。

79 </Step>81 </Step>

80 82 

worktrees.md +5 −1

Details

131 131 

132子代理 worktrees 使用与 `--worktree` 相同的[基础分支](#choose-the-base-branch),因此它们从您的存储库的默认分支分支,除非 `worktree.baseRef` 设置为 `"head"`。132子代理 worktrees 使用与 `--worktree` 相同的[基础分支](#choose-the-base-branch),因此它们从您的存储库的默认分支分支,除非 `worktree.baseRef` 设置为 `"head"`。

133 133 

134在自己的 worktree 中运行的子代理会从您的主对话中获取其[启动时加载](/docs/zh-CN/sub-agents#what-loads-at-startup)的指令文件,而不是从其 worktree 中获取。当该 worktree 位于 `.claude/worktrees/` 下的默认位置时,子代理在读取其中的文件时也不会加载 worktree 根目录下的 `CLAUDE.md` 文件或 `.claude/rules/` 目录,即使它们在 worktree 的分支上有所不同。

135 

134<h3 id="clean-up-subagent-and-background-session-worktrees">136<h3 id="clean-up-subagent-and-background-session-worktrees">

135 清理子代理和后台会话 worktrees137 清理子代理和后台会话 worktrees

136</h3>138</h3>


170 172 

171您无法将 `worktree.baseRef` 设置为分支名称。要从特定的现有分支启动 worktree,请[直接使用 git 创建它](#manage-worktrees-manually)。173您无法将 `worktree.baseRef` 设置为分支名称。要从特定的现有分支启动 worktree,请[直接使用 git 创建它](#manage-worktrees-manually)。

172 174 

173对于 `"fresh"` 基础,Claude Code 会保持 `origin/HEAD` 最新:当存储库在过去 24 小时内没有被获取时,它会获取默认分支,上限为 5 秒,如果获取失败则使用本地缓存的引用。如果未配置远程,或 `origin/HEAD` 未在本地缓存且无法获取,worktree 会回退到您当前的本地 `HEAD`。在 v2.1.208 之前,新 worktree 使用已经本地缓存的任何 `origin/HEAD`。175对于 `"fresh"` 基础,Claude Code 会保持 `origin/HEAD` 最新:当仓库在过去 24 小时内没有被获取时,它会获取默认分支,上限为 5 秒,如果获取失败则使用本地缓存的引用。该获取操作从不等待您终端中的输入,因此当 git 或 ssh 要求输入密码、密钥密码短语或确认新的 SSH 主机时,也会被视为获取失败。如果未配置远程,或 `origin/HEAD` 未在本地缓存且无法获取,worktree 会回退到您当前的本地 `HEAD`。在 v2.1.208 之前,新 worktree 使用已经本地缓存的任何 `origin/HEAD`。

174 176 

175此示例使每个新 worktree 从您的当前工作分支:177此示例使每个新 worktree 从您的当前工作分支:

176 178 


198* **gitlab.com**:获取 `merge-requests/<number>/head`200* **gitlab.com**:获取 `merge-requests/<number>/head`

199* **GitHub Enterprise、自管理 GitLab 或任何其他主机**:首先尝试 `pull/<number>/head`,然后尝试 `merge-requests/<number>/head`201* **GitHub Enterprise、自管理 GitLab 或任何其他主机**:首先尝试 `pull/<number>/head`,然后尝试 `merge-requests/<number>/head`

200 202 

203此获取操作从不等待您终端中的输入。如果 git 或 ssh 会要求输入密码、密钥密码短语或确认新的 SSH 主机,获取会直接失败,Claude Code 会退出并显示 `Error creating worktree: Failed to fetch PR/MR #<number>` 消息。`ssh-agent` 持有的密钥仍然可用,因此请在开始之前将您的密钥加载到其中,并手动运行一次 `git fetch` 以记录新主机。

204 

201在 v2.1.233 之前,Claude Code 仅接受 `#<number>` 和 GitHub 风格的拉取请求 URL 用于 `--worktree`,并总是获取 `pull/<number>/head`。205在 v2.1.233 之前,Claude Code 仅接受 `#<number>` 和 GitHub 风格的拉取请求 URL 用于 `--worktree`,并总是获取 `pull/<number>/head`。

202 206 

203<h3 id="copy-gitignored-files-into-worktrees">207<h3 id="copy-gitignored-files-into-worktrees">