SpyBara
Go Premium

Documentation 2026-06-16 21:57 UTC to 2026-06-17 17:02 UTC

112 files changed +8,269 −1,215. View all changes and history on the product overview
2026
Tue 30 23:02 Mon 29 23:02 Sat 27 01:01 Fri 26 23:00 Thu 25 23:58 Wed 24 22:02 Tue 23 22:00 Mon 22 23:59 Fri 19 22:58 Thu 18 22:00 Wed 17 17:02 Tue 16 21:57 Mon 15 23:02 Sat 13 21:59 Fri 12 22:00 Thu 11 23:01 Wed 10 23:57 Tue 9 06:34 Mon 8 06:52 Sat 6 06:24 Fri 5 06:45 Thu 4 06:52 Wed 3 06:53 Tue 2 06:51

admin-setup.md +27 −10

Details

22| [设置使用情况可见性](#set-up-usage-visibility) | 如何跟踪支出和采用情况 | [Analytics](/zh-CN/analytics)、[Monitoring](/zh-CN/monitoring-usage)、[Costs](/zh-CN/costs) |22| [设置使用情况可见性](#set-up-usage-visibility) | 如何跟踪支出和采用情况 | [Analytics](/zh-CN/analytics)、[Monitoring](/zh-CN/monitoring-usage)、[Costs](/zh-CN/costs) |

23| [审查数据处理](#review-data-handling) | 数据保留和合规性态势 | [Data usage](/zh-CN/data-usage)、[Security](/zh-CN/security) |23| [审查数据处理](#review-data-handling) | 数据保留和合规性态势 | [Data usage](/zh-CN/data-usage)、[Security](/zh-CN/security) |

24 24 

25## 选择您的 API 提供商25<h2 id="choose-your-api-provider">

26 选择您的 API 提供商

27</h2>

26 28 

27Claude Code 通过多个 API 提供商之一连接到 Claude。您的选择会影响计费、身份验证、您继承的合规性态势,以及您的开发人员可以使用的 Claude Code 功能。29Claude Code 通过多个 API 提供商之一连接到 Claude。您的选择会影响计费、身份验证、您继承的合规性态势,以及您的开发人员可以使用的 Claude Code 功能。

28 30 


40 42 

41[Network configuration](/zh-CN/network-config) 中的代理和防火墙要求适用于所有提供商。如果您想要在多个提供商前面有单个端点或集中式请求日志记录,请参阅 [LLM gateway](/zh-CN/llm-gateway)。43[Network configuration](/zh-CN/network-config) 中的代理和防火墙要求适用于所有提供商。如果您想要在多个提供商前面有单个端点或集中式请求日志记录,请参阅 [LLM gateway](/zh-CN/llm-gateway)。

42 44 

43## 决定设置如何到达设备45<h2 id="decide-how-settings-reach-devices">

46 决定设置如何到达设备

47</h2>

44 48 

45托管设置定义优先于本地开发人员配置的策略。Claude Code 在四个位置查找它们并使用在给定设备上找到的第一个49托管设置定义优先于本地开发人员配置的策略。Claude Code 按优先级顺序检查以下四个来源并应用返回非空配置的第一个

46 50 

47| 机制 | 传递 | 优先级 | 平台 |51| 机制 | 传递 | 优先级 | 平台 |

48| :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-- | :------------ |52| :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-- | :------------ |


55 59 

56如果您的组织混合使用提供商,请为 Claude.ai 用户配置 [server-managed settings](/zh-CN/server-managed-settings) 加上 [file-based 或 plist/registry 回退](/zh-CN/settings#settings-files),以便其他用户仍然接收托管策略。60如果您的组织混合使用提供商,请为 Claude.ai 用户配置 [server-managed settings](/zh-CN/server-managed-settings) 加上 [file-based 或 plist/registry 回退](/zh-CN/settings#settings-files),以便其他用户仍然接收托管策略。

57 61 

58plist 和 HKLM 注册表位置适用于任何提供商,并且由于需要管理员权限才能写入,因此可以抵抗篡改。Windows 用户注册表中的 HKCU 可以在没有提升权限的情况下写入,因此将其视为便利默认值而不是执行通道62plist 和 HKLM 注册表位置适用于任何提供商,并且由于需要管理员权限才能写入,因此可以抵抗篡改。Windows 用户注册表中的 HKCU 可以在没有提升权限的情况下写入,因此将其视为便利默默认值而不是执行通道

63 

64默认情况下,WSL 仅读取 `/etc/claude-code` 处的 Linux 文件路径。要将您的 Windows 注册表和 `C:\Program Files\ClaudeCode` 策略扩展到同一台机器上的 WSL,请在这些仅限管理员的 Windows 来源之一中设置 [`wslInheritsWindowsSettings: true`](/zh-CN/settings#available-settings)。

59 65 

60无论您选择哪种机制,托管值都优先于用户和项目设置。数组设置(如 `permissions.allow` 和 `permissions.deny`)合并来自所有源的条目,因此开发人员可以扩展托管列表但不能从中删除。66无论您选择哪种机制,托管值都优先于用户和项目设置。数组设置(如 `permissions.allow` 和 `permissions.deny`)合并来自所有源的条目,因此开发人员可以扩展托管列表但不能从中删除。

61 67 

62请参阅 [Server-managed settings](/zh-CN/server-managed-settings) 和 [Settings files and precedence](/zh-CN/settings#settings-files)。68请参阅 [Server-managed settings](/zh-CN/server-managed-settings) 和 [Settings files and precedence](/zh-CN/settings#settings-files)。

63 69 

64## 决定要强制执行的内容70<h2 id="decide-what-to-enforce">

71 决定要强制执行的内容

72</h2>

65 73 

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

67 75 


77| [Hook restrictions](/zh-CN/settings#hook-configuration) | 仅托管 hooks 加载;限制 HTTP hook URL | `allowManagedHooksOnly`、`allowedHttpHookUrls` |85| [Hook restrictions](/zh-CN/settings#hook-configuration) | 仅托管 hooks 加载;限制 HTTP hook URL | `allowManagedHooksOnly`、`allowedHttpHookUrls` |

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

79| [Version floor](/zh-CN/settings) | 防止自动更新安装低于组织范围最小值的版本 | `minimumVersion` |87| [Version floor](/zh-CN/settings) | 防止自动更新安装低于组织范围最小值的版本 | `minimumVersion` |

88| [Required version range](/zh-CN/settings) | 当运行版本超出组织批准的范围时拒绝启动。比 `minimumVersion` 更强大,后者仅阻止降级 | `requiredMinimumVersion`、`requiredMaximumVersion` |

80 89 

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

82 91 

83有关这些控制防御的威胁模型,请参阅 [Security](/zh-CN/security)。92有关这些控制防御的威胁模型,请参阅 [Security](/zh-CN/security)。

84 93 

85## 设置使用情况可见性94<h2 id="set-up-usage-visibility">

95 设置使用情况可见性

96</h2>

86 97 

87根据您需要报告的内容选择监控。98根据您需要报告的内容选择监控。

88 99 


94 105 

95云提供商通过 AWS Cost Explorer、GCP Billing 或 Azure Cost Management 公开支出。Claude for Teams 和 Enterprise 计划在 [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) 包含使用情况仪表板。106云提供商通过 AWS Cost Explorer、GCP Billing 或 Azure Cost Management 公开支出。Claude for Teams 和 Enterprise 计划在 [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) 包含使用情况仪表板。

96 107 

97## 审查数据处理108<h2 id="review-data-handling">

109 审查数据处理

110</h2>

98 111 

99在 Team、Enterprise、Claude API 和云提供商计划上,Anthropic 不会在您的代码或提示上训练模型。您的 API 提供商决定保留和合规性态势。112在 Team、Enterprise、Claude API 和云提供商计划上,Anthropic 不会在您的代码或提示上训练模型。您的 API 提供商决定保留和合规性态势。

100 113 


106 119 

107如果您需要请求级别的审计日志或按数据敏感性路由流量,请在开发人员和您的提供商之间放置 [LLM gateway](/zh-CN/llm-gateway)。有关监管要求和认证,请参阅 [Legal and compliance](/zh-CN/legal-and-compliance)。120如果您需要请求级别的审计日志或按数据敏感性路由流量,请在开发人员和您的提供商之间放置 [LLM gateway](/zh-CN/llm-gateway)。有关监管要求和认证,请参阅 [Legal and compliance](/zh-CN/legal-and-compliance)。

108 121 

109## 验证和入职122<h2 id="verify-and-onboard">

123 验证和入职

124</h2>

110 125 

111配置托管设置后,让开发人员在 Claude Code 中运行 `/status`。输出包括以 `Enterprise managed settings` 开头的一行,后跟括号中的源,为 `(remote)`、`(plist)`、`(HKLM)`、`(HKCU)` 或 `(file)` 之一。请参阅 [验证活跃设置](/zh-CN/settings#verify-active-settings)。126配置托管设置后,让开发人员在 Claude Code 中运行 `/status`。 **Status** 选项卡上,`Setting sources` 行显示 `Enterprise managed settings` 后跟括号中的源,为 `(remote)`、`(plist)`、`(HKLM)`、`(HKCU)` 或 `(file)` 之一。请参阅 [验证活跃设置](/zh-CN/settings#verify-active-settings)。

112 127 

113分享这些资源以帮助开发人员入门:128分享这些资源以帮助开发人员入门:

114 129 


124 139 

125如果开发人员看到"您还没有被添加到您的组织",他们的座位不包括 Claude Code 访问权限,需要在管理控制台中更新。140如果开发人员看到"您还没有被添加到您的组织",他们的座位不包括 Claude Code 访问权限,需要在管理控制台中更新。

126 141 

127## 后续步骤142<h2 id="next-steps">

143 后续步骤

144</h2>

128 145 

129选择提供商和传递机制后,继续进行详细配置:146选择提供商和传递机制后,继续进行详细配置:

130 147 

advisor.md +198 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 使用顾问工具升级困难决策

6 

7> 将您的主模型与更强大的顾问模型配对,Claude 在任务期间的关键时刻咨询该模型。

8 

9{/* plan-availability: feature=advisor providers=anthropic */}

10 

11<Note>

12 顾问工具是实验性的,需要 Claude Code v2.1.98 或更高版本以及 Anthropic API。它在 Amazon Bedrock、Google Vertex AI 或 Microsoft Foundry 上不可用。行为、定价和可用性可能会改变。

13</Note>

14 

15顾问工具让 Claude 在任务期间的关键时刻咨询第二个通常更强大的模型,例如在提交方法之前、陷入重复错误时或在声明任务完成之前。顾问接收完整的对话,包括每个工具调用和结果,并返回 Claude 在继续之前应用的指导。

16 

17顾问在 Anthropic 基础设施上作为[服务器工具](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool)运行,可供订阅和 API 计费账户使用。您选择哪个模型充当顾问,Claude 决定何时调用它。

18 

19本页介绍如何启用顾问、接受哪些模型配对、Claude 在咨询期间显示什么,以及顾问使用如何计费。

20 

21<h2 id="when-to-use-the-advisor">

22 何时使用顾问

23</h2>

24 

25顾问适合长期、多步骤的任务,其中大多数轮次是常规的,但计划质量决定了结果。示例包括大型重构、错误不断重复的调试会话,以及您希望在 Claude 声明完成之前独立检查的任务。

26 

27在短任务上(几乎没有计划的地方)或需要每一轮都使用最强模型的工作上,它的价值较少。对于这些情况,[切换主模型](/zh-CN/model-config#setting-your-model),或查看[顾问与 opusplan 和子代理的比较](#compare-with-related-features)以获取其他获取第二意见的方式。

28 

29<h2 id="enable-the-advisor">

30 启用顾问

31</h2>

32 

33您可以通过三种方式设置顾问模型:

34 

35* **`/advisor` 命令**:在会话中途设置或更改顾问,并将其保存为默认值

36* **`advisorModel` 设置**:在您的[设置文件](/zh-CN/settings)中配置持久默认值

37* **`--advisor` 标志**:在启动时为单个会话设置顾问

38 

39如果其中任何一个设置了顾问模型,则对于主模型[支持它](#choose-an-advisor-model)的会话,顾问是启用的。要停止使用它,请参阅[关闭顾问](#turn-the-advisor-off)。

40 

41<Note>

42 要使用 Fable 5 作为顾问,您需要 Claude Code v2.1.170 或更高版本以及您的组织的 [Fable 5 访问权限](/zh-CN/model-config#work-with-fable-5)。

43</Note>

44 

45<h3 id="use-the-/advisor-command">

46 使用 `/advisor` 命令

47</h3>

48 

49运行不带参数的 `/advisor` 以打开列出可用顾问模型的选择器,或直接传递模型:

50 

51```

52/advisor opus

53```

54 

55您的选择被保存到用户设置中的 `advisorModel`,并在会话之间持久化。如果您当前的主模型不支持顾问,选择仍然被保存,并在您使用[`/model`](/zh-CN/model-config#setting-your-model)切换到[兼容的主模型](#choose-an-advisor-model)时激活。

56 

57<h3 id="set-advisormodel-in-settings">

58 在设置中设置 `advisorModel`

59</h3>

60 

61要在不打开会话的情况下将顾问配置为默认值,请在设置文件中设置它:

62 

63```json theme={null}

64{

65 "advisorModel": "opus"

66}

67```

68 

69<h3 id="use-the-advisor-flag">

70 使用 `--advisor` 标志

71</h3>

72 

73要为单个会话设置顾问而不更改保存的设置,请使用该标志启动:

74 

75```bash theme={null}

76claude --advisor opus

77```

78 

79该标志在该会话中优先于 `advisorModel` 设置。与保存非活动选择的 `/advisor` 不同,如果会话的主模型不支持顾问,该标志会以错误退出。

80 

81<h2 id="choose-an-advisor-model">

82 选择顾问模型

83</h2>

84 

85顾问的能力必须至少与主模型相同。每个主模型接受的顾问是:

86 

87| 主模型 | 接受的顾问 | 注释 |

88| ----------------------------------------------- | -------------------- | ---------------------------- |

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

90| Sonnet 4.6 | Fable、Opus、Sonnet | |

91| Opus 4.6 或更高版本 | Fable、Opus 在主模型版本或以上 | Opus 4.7 主模型与 Opus 4.6 顾问被拒绝 |

92| Fable 5 ({/* min-version: 2.1.170 */}v2.1.170+) | Fable | Opus 或 Sonnet 顾问被拒绝 |

93 

94Fable 5 需要 Claude Code v2.1.170 或更高版本以及 Fable 5 访问权限,无论它是充当主模型还是顾问。

95 

96将顾问设置为 `opus`、`sonnet` 或 `fable`。这些别名解析为每个模型的最新版本。您也可以传递完整的模型 ID,例如 `claude-opus-4-8`。

97 

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

99 

100Claude Code 在发送请求之前验证配对:

101 

102* 如果顾问的能力低于主模型,顾问不会附加到主模型的请求中。`/advisor` 命令输出和通知会显示这一点。其自己的模型满足配对的子代理仍然可以使用顾问。

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

104 

105<h3 id="common-model-pairings">

106 常见模型配对

107</h3>

108 

109任何接受的配对都有效。这些组合以不同的方式平衡成本和能力:

110 

111| 配对 | 何时使用 |

112| ---------------------- | ----------------------------------------------------------------------------------- |

113| Sonnet 主模型 + Opus 顾问 | Sonnet 处理常规工作,并将规划、模糊失败和完成检查升级到 Opus |

114| Sonnet 主模型 + Fable 顾问 | Fable 5 在决策点的指导,无需全程运行 Fable 5。需要 v2.1.170 或更高版本以及 Fable 5 访问权限 |

115| Haiku 主模型 + Opus 顾问 | 最低成本的主模型具有强大的规划能力。预期成本高于仅 Haiku,但低于将主模型切换到 Sonnet 或 Opus |

116| Opus 主模型 + Opus 顾问 | 第二个 Opus 审查第一个。对于高风险任务很有用,其中独立检查比成本更重要 |

117| Fable 主模型 + Fable 顾问 | 当 Fable 5 可用时的最高能力配对 (v2.1.170+)。Fable 是比 Opus 和 Sonnet 更高的层级,因此它是 Fable 主模型唯一接受的顾问 |

118| Sonnet 主模型 + Sonnet 顾问 | 用于捕捉常规疏忽的低成本第二意见 |

119 

120<h2 id="when-claude-consults-the-advisor">

121 Claude 何时咨询顾问

122</h2>

123 

124Claude 决定何时调用顾问。它倾向于在提交方法之前、错误不断重复时以及在声明任务完成之前咨询,但时间是由模型驱动的,而不是基于规则的。

125 

126您可以在提示中要求咨询,就像您会请求任何工具一样,例如 `consult the advisor before you continue`。没有设置来限制或强制顾问调用;如果您希望 Claude 在任务期间更频繁或更少地咨询顾问,请在您的说明中说明。

127 

128<h2 id="what-you-see-during-a-session">

129 会话期间您看到的内容

130</h2>

131 

132当 Claude 调用顾问时,成绩单显示一条 `Advising` 行,其中包含顾问模型名称,同时调用正在进行中。当结果返回时,该行确认顾问已审查对话。按 `Ctrl+O` 展开它并阅读顾问的完整指导。

133 

134Claude 通常遵循顾问的指导,但在其自己的证据与特定声明相矛盾时进行调整:如果推荐的步骤在尝试时失败,或文件内容与建议相矛盾,Claude 会显示冲突而不是无条件地遵循指导。

135 

136顾问始终接收完整的对话,Claude 控制时间。为了获得更多控制或不同的配置,请参阅[顾问与子代理和 opusplan 的比较](#compare-with-related-features)。

137 

138<h2 id="cost">

139 成本

140</h2>

141 

142每个顾问调用都会将对话发送到顾问模型,因此除了主模型的使用外,它还会以顾问模型的费率消耗令牌。使用 API 计费,顾问令牌按顾问模型的输入和输出费率计费。在订阅计划上,顾问使用计入您的计划使用限制。

143 

144Claude 在决策点而不是每一轮都调用顾问,因此将更快的主模型与更强的顾问配对通常比全程运行更强的模型成本更低。顾问使用计入由 [`/usage`](/zh-CN/costs#track-your-costs) 显示的会话总计。

145 

146有关顾问令牌如何在 API 响应中报告的信息,请参阅 Claude API 文档中的[使用和计费](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool#usage-and-billing)。

147 

148<h2 id="impact-on-prompt-caching">

149 对提示缓存的影响

150</h2>

151 

152在会话中途启用或禁用顾问不会使主模型的[提示缓存](/zh-CN/prompt-caching)失效。与[更改模型或努力级别](/zh-CN/prompt-caching#actions-that-invalidate-the-cache)不同,切换 `/advisor` 会保持缓存的前缀完整,顾问返回的指导在后续轮次中作为成绩单的一部分被缓存。

153 

154顾问模型自己对对话的读取不被缓存。每个顾问调用都会重新处理完整的成绩单,调用之间没有重用。

155 

156<h2 id="requirements">

157 要求

158</h2>

159 

160顾问工具需要以下所有条件:

161 

162* **Claude Code v2.1.98 或更高版本**:运行 `claude update` 进行升级。

163* **仅 Anthropic API**:顾问是服务器执行的工具。它在 Amazon Bedrock、Google Vertex AI 或 Microsoft Foundry 上不可用。通过配置了 `ANTHROPIC_BASE_URL` 的 [LLM 网关](/zh-CN/llm-gateway),可用性取决于网关是否将请求完整转发到 Anthropic API。

164* **支持的主模型**:Opus 4.6 或更高版本、Sonnet 4.6 或 Haiku 4.5。{/* min-version: 2.1.170 */}Fable 5 在 Claude Code v2.1.170 或更高版本上也符合条件。

165 

166<h2 id="turn-the-advisor-off">

167 关闭顾问

168</h2>

169 

170要停止使用顾问并清除保存的 `advisorModel`,运行 `/advisor off` 或在 `/advisor` 选择器中选择 **No advisor**:

171 

172```

173/advisor off

174```

175 

176要完全禁用顾问工具,包括 `/advisor` 命令和 `--advisor` 标志,设置 `CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`。请参阅[环境变量](/zh-CN/env-vars)。

177 

178<h2 id="compare-with-related-features">

179 与相关功能比较

180</h2>

181 

182顾问是结合模型优势的几种方式之一。根据您希望何时涉及第二个模型来选择。

183 

184| 方法 | 更强的模型何时运行 | 如何启动 |

185| -------------------------------------------------------- | ----------------------- | ----------------- |

186| 顾问工具 | 在任务中途的决策点 | Claude 在需要指导时调用它 |

187| [`opusplan`](/zh-CN/model-config#opusplan-model-setting) | 在计划模式期间,然后切换到 Sonnet 执行 | 您进入计划模式 |

188| [子代理](/zh-CN/sub-agents#choose-a-model),设置了 `model` | 对于整个委派的子任务 | Claude 委派,或您调用子代理 |

189| [`/model`](/zh-CN/model-config#setting-your-model) | 对于所有后续轮次 | 您切换模型 |

190 

191<h2 id="see-also">

192 另请参阅

193</h2>

194 

195* [模型配置](/zh-CN/model-config):切换模型、设置努力级别并使用 `opusplan`

196* [有效管理成本](/zh-CN/costs):跨模型跟踪令牌使用情况

197* [Claude API 中的顾问工具](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool):了解底层服务器工具,或直接从 Messages API 使用它

198* [顾问策略](https://claude.com/blog/the-advisor-strategy):为什么将快速主模型与更强的顾问配对有效

Details

16 16 

17每个代理会话都遵循相同的周期:17每个代理会话都遵循相同的周期:

18 18 

19<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-loop-diagram.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=1c6e8f28d80dba14a7287419656f1237" alt="代理循环提示输入,Claude 评估分支到工具调用或最终答案" width="720" height="212" data-path="images/agent-loop-diagram.svg" />19<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-loop-diagram.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=1c6e8f28d80dba14a7287419656f1237" alt="代理循环的图表你的提示进入代理循环,Claude 评估并要么请求工具调用(其结果反馈到另一个评估中)要么返回最终答案" width="720" height="212" data-path="images/agent-loop-diagram.svg" />

20 20 

211. **接收提示。** Claude 接收你的提示,以及系统提示、工具定义和对话历史。SDK 产生一个 [`SystemMessage`](#message-types),子类型为 `"init"`,包含会话元数据。211. **接收提示。** Claude 接收你的提示,以及系统提示、工具定义和对话历史。SDK 产生一个 [`SystemMessage`](#message-types),子类型为 `"init"`,包含会话元数据。

222. **评估并响应。** Claude 评估当前状态并确定如何继续。它可能用文本响应、请求一个或多个工具调用,或两者都有。SDK 产生一个 [`AssistantMessage`](#message-types),包含文本和任何工具调用请求。222. **评估并响应。** Claude 评估当前状态并确定如何继续。它可能用文本响应、请求一个或多个工具调用,或两者都有。SDK 产生一个 [`AssistantMessage`](#message-types),包含文本和任何工具调用请求。


53 53 

54当循环运行时,SDK 产生一个消息流。每条消息都有一个类型,告诉你它来自循环的哪个阶段。五个核心类型是:54当循环运行时,SDK 产生一个消息流。每条消息都有一个类型,告诉你它来自循环的哪个阶段。五个核心类型是:

55 55 

56* **`SystemMessage`:** 会话生命周期事件。`subtype` 字段区分它们:`"init"` 是第一条消息(会话元数据),`"compact_boundary"` 在 [压缩](#automatic-compaction) 后触发。在 TypeScript 中,压缩边界是其自己的 [`SDKCompactBoundaryMessage`](/zh-CN/agent-sdk/typescript#sdkcompactboundarymessage) 类型,而不是 `SDKSystemMessage` 的子类型。56* **`SystemMessage`:** 会话生命周期事件。`subtype` 字段区分它们:

57 

58 * `"init"`:第一条消息,包含会话元数据

59 * `"compact_boundary"`:在 [compaction](#automatic-compaction) 后触发

60 * `"informational"`:来自循环的纯文本状态横幅

61 * `"worker_shutting_down"`:循环将在当前轮次后结束,因为主机正在退出或 Remote Control 已断开连接

62 

63 在 TypeScript 中,除了 `"init"` 之外的每个 subtype 在 [`SDKMessage` union](/zh-CN/agent-sdk/typescript#sdkmessage) 中都是其自己的类型,而不是 `SDKSystemMessage` 的子类型。

57* **`AssistantMessage`:** 在每个 Claude 响应后发出,包括最终仅包含文本的响应。包含该轮次的文本内容块和工具调用块。64* **`AssistantMessage`:** 在每个 Claude 响应后发出,包括最终仅包含文本的响应。包含该轮次的文本内容块和工具调用块。

58* **`UserMessage`:** 在每个工具执行后发出,包含发送回 Claude 的工具结果内容。也为你在循环中间流式传输的任何用户输入发出。65* **`UserMessage`:** 在每个工具执行后发出,包含发送回 Claude 的工具结果内容。也为你在循环中间流式传输的任何用户输入发出。

59* **`StreamEvent`:** 仅在启用部分消息时发出。包含原始 API 流事件(文本增量、工具输入块)。请参阅 [流式响应](/zh-CN/agent-sdk/streaming-output)。66* **`StreamEvent`:** 仅在启用部分消息时发出。包含原始 API 流事件(文本增量、工具输入块)。请参阅 [Stream responses](/zh-CN/agent-sdk/streaming-output)。

60* **`ResultMessage`:** 标记代理循环的结束。包含最终文本结果、令牌使用、成本和会话 ID。检查 `subtype` 字段以确定任务是否成功或达到限制。少数尾随系统事件(如 `prompt_suggestion`)可能在其后到达,因此迭代流直到完成,而不是在结果处中断。请参阅 [处理结果](#handle-the-result)。67* **`ResultMessage`:** 标记代理循环的结束。包含最终文本结果、令牌使用、成本和会话 ID。检查 `subtype` 字段以确定任务是否成功或达到限制。少数尾随系统事件(如 `prompt_suggestion`)可能在其后到达,因此迭代流直到完成,而不是在结果处中断。请参阅 [Handle the result](#handle-the-result)。

61 68 

62这五种类型涵盖了两个 SDK 中完整的代理循环生命周期。TypeScript SDK 还产生额外的可观测性事件(hook 事件、工具进度、速率限制、任务通知),提供额外的细节,但不是驱动循环所必需的。有关完整列表,请参阅 [Python 消息类型参考](/zh-CN/agent-sdk/python#message-types) 和 [TypeScript 消息类型参考](/zh-CN/agent-sdk/typescript#message-types)。69这五种类型涵盖了两个 SDK 中完整的代理循环生命周期。TypeScript SDK 还产生额外的可观测性事件(hook 事件、工具进度、速率限制、任务通知),提供额外的细节,但不是驱动循环所必需的。有关完整列表,请参阅 [Python message types reference](/zh-CN/agent-sdk/python#message-types) 和 [TypeScript message types reference](/zh-CN/agent-sdk/typescript#message-types)。

63 70 

64<h3 id="handle-messages">71<h3 id="handle-messages">

65 处理消息72 处理消息


69 76 

70* **仅最终结果:** 处理 `ResultMessage` 以获取输出、成本以及任务是否成功或达到限制。77* **仅最终结果:** 处理 `ResultMessage` 以获取输出、成本以及任务是否成功或达到限制。

71* **进度更新:** 处理 `AssistantMessage` 以查看 Claude 每个轮次在做什么,包括它调用了哪些工具。78* **进度更新:** 处理 `AssistantMessage` 以查看 Claude 每个轮次在做什么,包括它调用了哪些工具。

72* **实时流式传输:** 启用部分消息(Python 中的 `include_partial_messages`,TypeScript 中的 `includePartialMessages`)以实时获取 `StreamEvent` 消息。请参阅 [实时流式响应](/zh-CN/agent-sdk/streaming-output)。79* **实时流式传输:** 启用部分消息(Python 中的 `include_partial_messages`,TypeScript 中的 `includePartialMessages`)以实时获取 `StreamEvent` 消息。请参阅 [Stream responses in real-time](/zh-CN/agent-sdk/streaming-output)。

73 80 

74检查消息类型的方式取决于 SDK:81检查消息类型的方式取决于 SDK:

75 82 


183`effort` 选项控制 Claude 应用多少推理。较低的努力级别每个轮次使用更少的令牌并降低成本。并非所有模型都支持努力参数。有关哪些模型支持它,请参阅 [Effort](https://platform.claude.com/docs/en/build-with-claude/effort)。190`effort` 选项控制 Claude 应用多少推理。较低的努力级别每个轮次使用更少的令牌并降低成本。并非所有模型都支持努力参数。有关哪些模型支持它,请参阅 [Effort](https://platform.claude.com/docs/en/build-with-claude/effort)。

184 191 

185| 级别 | 行为 | 适合 |192| 级别 | 行为 | 适合 |

186| :--------- | :-------- | :--------------------- |193| :--------- | :-------- | :-------------------------------- |

187| `"low"` | 最小推理,快速响应 | 文件查找、列出目录 |194| `"low"` | 最小推理,快速响应 | 文件查找、列出目录 |

188| `"medium"` | 平衡推理 | 常规编辑、标准任务 |195| `"medium"` | 平衡推理 | 常规编辑、标准任务 |

189| `"high"` | 彻底分析 | 重构、调试 |196| `"high"` | 彻底分析 | 重构、调试 |

190| `"xhigh"` | 扩展推理深度 | 编码和代理任务;在 Opus 4.7 上推荐 |197| `"xhigh"` | 扩展推理深度 | 编码和代理任务;在 Fable 5 和 Opus 4.7+ 上推荐 |

191| `"max"` | 最大推理深度 | 需要深度分析的多步骤问题 |198| `"max"` | 最大推理深度 | 需要深度分析的多步骤问题 |

192 199 

193如果你不设置 `effort`,Python SDK 会将参数保留未设置,并遵从模型的默认行为。TypeScript SDK 默认为 `"high"`。200如果你不设置 `effort`,两个 SDK 都会将参数保留未设置,并遵从模型的默认行为。

194 201 

195<Note>202<Note>

196 `effort` 在每个响应内交换延迟和令牌成本以获得推理深度。[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 是一个单独的功能,在输出中产生可见的思维链块。它们是独立的:你可以设置 `effort: "low"` 并启用扩展思考,或 `effort: "max"` 而不启用它。203 `effort` 在每个响应内交换延迟和令牌成本以获得推理深度。[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 是一个单独的功能,在输出中产生可见的思维链块。它们是独立的:你可以设置 `effort: "low"` 并启用扩展思考,或 `effort: "max"` 而不启用它。


205权限模式选项(Python 中的 `permission_mode`,TypeScript 中的 `permissionMode`)控制代理是否在使用工具前请求批准:212权限模式选项(Python 中的 `permission_mode`,TypeScript 中的 `permissionMode`)控制代理是否在使用工具前请求批准:

206 213 

207| 模式 | 行为 |214| 模式 | 行为 |

208| :--------------------- | :----------------------------------------------------------------------------------------------- |215| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

209| `"default"` | 不被允许规则覆盖的工具触发你的批准回调;没有回调意味着拒绝 |216| `"default"` | 不被允许规则覆盖的工具触发你的批准回调;没有回调意味着拒绝 |

210| `"acceptEdits"` | 自动批准文件编辑和常见文件系统命令(`mkdir`、`touch`、`mv`、`cp` 等);其他 Bash 命令遵循默认规则 |217| `"acceptEdits"` | 自动批准文件编辑和常见文件系统命令(`mkdir`、`touch`、`mv`、`cp` 等);其他 Bash 命令遵循默认规则 |

211| `"plan"` | 只读工具运行;Claude 探索并产生计划而不编辑你的源文件 |218| `"plan"` | Claude 探索并规划而不编辑你的源文件;文件编辑永远不会自动批准,并通过你的 `canUseTool` 回调提示 |

212| `"dontAsk"` | 从不提示。由 [权限规则](/zh-CN/settings#permission-settings) 预批准的工具运行,其他一切被拒绝 |219| `"dontAsk"` | 从不提示。由 [权限规则](/zh-CN/settings#permission-settings) 预批准的工具运行,其他一切被拒绝 |

213| `"auto"`(仅 TypeScript) | 使用模型分类器批准或拒绝每个工具调用。有关可用性和行为,请参阅 [自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) |220| `"auto"`(仅 TypeScript) | 使用模型分类器批准或拒绝每个工具调用。有关可用性和行为,请参阅 [自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) |

214| `"bypassPermissions"` | 运行所有允许的工具而不询问。在 Unix 上以 root 身份运行时无法使用。仅在隔离环境中使用,其中代理的操作无法影响你关心的系统 |221| `"bypassPermissions"` | 运行所有允许的工具而不询问,除非显式 [`ask` 规则](/zh-CN/settings#permission-settings) 匹配;有关 ask 规则在优先级顺序中的位置,请参阅 [权限如何被评估](/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)。在 Unix 上以 root 身份运行时无法使用。仅在隔离环境中使用,其中代理的操作无法影响你关心的系统 |

215 222 

216对于交互式应用程序,使用 `"default"` 和工具批准回调来显示批准提示。对于开发机器上的自主代理,`"acceptEdits"` 自动批准文件编辑和常见文件系统命令(`mkdir`、`touch`、`mv`、`cp` 等),同时仍然在允许规则后面限制其他 `Bash` 命令。为 CI、容器或其他隔离环境保留 `"bypassPermissions"`。有关完整详情,请参阅 [权限](/zh-CN/agent-sdk/permissions)。223对于交互式应用程序,使用 `"default"` 和工具批准回调来显示批准提示。对于开发机器上的自主代理,`"acceptEdits"` 自动批准文件编辑和常见文件系统命令(`mkdir`、`touch`、`mv`、`cp` 等),同时仍然在允许规则后面限制其他 `Bash` 命令。为 CI、容器或其他隔离环境保留 `"bypassPermissions"`。有关完整详情,请参阅 [权限](/zh-CN/agent-sdk/permissions)。

217 224 


305当循环结束时,`ResultMessage` 告诉你发生了什么并给你输出。`subtype` 字段(在两个 SDK 中都可用)是检查终止状态的主要方式。312当循环结束时,`ResultMessage` 告诉你发生了什么并给你输出。`subtype` 字段(在两个 SDK 中都可用)是检查终止状态的主要方式。

306 313 

307| 结果子类型 | 发生了什么 | `result` 字段可用? |314| 结果子类型 | 发生了什么 | `result` 字段可用? |

308| :------------------------------------ | :----------------------- | :------------: |315| :------------------------------------ | :----------------------------------------------------- | :------------: |

309| `success` | Claude 正常完成了任务 | 是 |316| `success` | Claude 正常完成了任务 | 是 |

310| `error_max_turns` | 在完成前达到 `maxTurns` 限制 | 否 |317| `error_max_turns` | 在完成前达到 `maxTurns` 限制 | 否 |

311| `error_max_budget_usd` | 在完成前达到 `maxBudgetUsd` 限制 | 否 |318| `error_max_budget_usd` | 在完成前达到 `maxBudgetUsd` 限制 | 否 |

312| `error_during_execution` | 错误中断了循环(例如,API 失败或取消的请求) | 否 |319| `error_during_execution` | 错误中断了循环(例如,API 失败或取消的请求) | 否 |

313| `error_max_structured_output_retries` | 结构化输出验证在配置的重试限制后失败 | 否 |320| `error_max_structured_output_retries` | 在配置的重试限制内没有生成有效的结构化输出:每次尝试都未通过验证,或者模型回退撤销了完成的输出且没有成功重试 | 否 |

314 321 

315`result` 字段(最终文本输出)仅在 `success` 变体上存在,因此在读取它之前始终检查子类型。所有结果子类型都包含 `total_cost_usd`、`usage`、`num_turns` 和 `session_id`,因此你可以跟踪成本并在错误后恢复。在 Python 中,`total_cost_usd` 和 `usage` 被类型化为可选的,在某些错误路径上可能是 `None`,因此在格式化它们之前进行保护。有关解释 `usage` 字段的详情,请参阅 [跟踪成本和使用](/zh-CN/agent-sdk/cost-tracking)。322`result` 字段(最终文本输出)仅在 `success` 变体上存在,因此在读取它之前始终检查子类型。所有结果子类型都包含 `total_cost_usd`、`usage`、`num_turns` 和 `session_id`,因此你可以跟踪成本并在错误后恢复。在 Python 中,`total_cost_usd` 和 `usage` 被类型化为可选的,在某些错误路径上可能是 `None`,因此在格式化它们之前进行保护。有关解释 `usage` 字段的详情,请参阅 [跟踪成本和使用](/zh-CN/agent-sdk/cost-tracking)。

316 323 

Details

257 257 

258<CodeGroup>258<CodeGroup>

259 ```python Python theme={null}259 ```python Python theme={null}

260 from claude_agent_sdk import ClaudeAgentOptions, query

261 import asyncio

262 

263 

264 async def main():

260 options = ClaudeAgentOptions(265 options = ClaudeAgentOptions(

261 env={266 env={

262 "CLAUDE_CODE_USE_BEDROCK": "1",267 "CLAUDE_CODE_USE_BEDROCK": "1",

263 "ENABLE_PROMPT_CACHING_1H": "1",268 "ENABLE_PROMPT_CACHING_1H": "1",

264 },269 },

265 )270 )

271 

272 async for message in query(prompt="Summarize this project", options=options):

273 print(message)

274 

275 

276 asyncio.run(main())

266 ```277 ```

267 278 

268 ```typescript TypeScript theme={null}279 ```typescript TypeScript theme={null}

280 import { query } from "@anthropic-ai/claude-agent-sdk";

281 

269 const options = {282 const options = {

270 env: {283 env: {

271 ...process.env,284 ...process.env,


273 ENABLE_PROMPT_CACHING_1H: "1",286 ENABLE_PROMPT_CACHING_1H: "1",

274 },287 },

275 };288 };

289 

290 for await (const message of query({ prompt: "Summarize this project", options })) {

291 console.log(message);

292 }

276 ```293 ```

277</CodeGroup>294</CodeGroup>

278 295 

Details

36* **描述:** 工具的功能。Claude 读取此内容以决定何时调用它。36* **描述:** 工具的功能。Claude 读取此内容以决定何时调用它。

37* **输入架构:** Claude 必须提供的参数。在 TypeScript 中,这始终是 [Zod 架构](https://zod.dev/),处理程序的 `args` 会自动从中获得类型。在 Python 中,这是一个将名称映射到类型的字典,如 `{"latitude": float}`,SDK 会为您将其转换为 JSON Schema。Python 装饰器还接受完整的 [JSON Schema](https://json-schema.org/understanding-json-schema/about) 字典,当您需要枚举、范围、可选字段或嵌套对象时。37* **输入架构:** Claude 必须提供的参数。在 TypeScript 中,这始终是 [Zod 架构](https://zod.dev/),处理程序的 `args` 会自动从中获得类型。在 Python 中,这是一个将名称映射到类型的字典,如 `{"latitude": float}`,SDK 会为您将其转换为 JSON Schema。Python 装饰器还接受完整的 [JSON Schema](https://json-schema.org/understanding-json-schema/about) 字典,当您需要枚举、范围、可选字段或嵌套对象时。

38* **处理程序:** 当 Claude 调用工具时运行的异步函数。它接收验证的参数,必须返回一个对象,包含:38* **处理程序:** 当 Claude 调用工具时运行的异步函数。它接收验证的参数,必须返回一个对象,包含:

39 * `content`(必需):结果块的数组,每个块的 `type` 为 `"text"`、`"image"` 或 `"resource"`。有关非文本块,请参阅[返回图像和资源](#return-images-and-resources)。39 * `content`(必需):结果块的数组,每个块的 `type` 为 `"text"`、`"image"`、`"audio"`、`"resource"` 或 `"resource_link"`。有关非文本块,请参阅[返回图像和资源](#return-images-and-resources)。

40 * `structuredContent`(可选):保存结果作为机器可读数据的 JSON 对象,与 `content` 一起返回。请参阅[返回结构化数据](#return-structured-data)。40 * `structuredContent`(可选):保存结果作为机器可读数据的 JSON 对象,与 `content` 一起返回。请参阅[返回结构化数据](#return-structured-data)。

41 * `isError`(可选):设置为 `true` 以表示工具失败,以便 Claude 可以对其做出反应。请参阅[处理错误](#handle-errors)。41 * `isError`(可选):设置为 `true` 以表示工具失败,以便 Claude 可以对其做出反应。请参阅[处理错误](#handle-errors)。

42 42 


461 返回图像和资源461 返回图像和资源

462</h2>462</h2>

463 463 

464工具结果中的 `content` 数组接受 `text`、`image` 和 `resource` 块。您可以在同一响应中混合它们。464工具结果中的 `content` 数组接受 `text`、`image`、`audio`、`resource` 和 `resource_link` 块。您可以在同一响应中混合它们。音频块被保存到磁盘,Claude 接收一个包含保存文件路径的文本块。资源链接块被转换为包含链接名称、URI 和描述的文本块。

465 465 

466<h3 id="images">466<h3 id="images">

467 图像467 图像

Details

19</Warning>19</Warning>

20 20 

21<h2 id="how-checkpointing-works">21<h2 id="how-checkpointing-works">

22 Checkpointing如何工作22 Checkpointing 如何工作

23</h2>23</h2>

24 24 

25启用文件checkpointing时SDK会在通过WriteEdit或NotebookEdit工具修改文件之前创建文件备份响应流中的用户消息包含一个checkpoint UUID,您可以将其用作恢复点。25启用文件 checkpointing 时SDK 会在通过 WriteEdit 或 NotebookEdit 工具修改文件之前创建文件备份响应流中的用户消息包含一个 checkpoint UUID,您可以将其用作恢复点。

26 26 

27Checkpoint与agent用来修改文件的这些内置工具一起工作27Checkpoint 与 agent 用来修改文件的这些内置工具一起工作

28 28 

29| 工具 | 描述 |29| 工具 | 描述 |

30| ------------ | ----------------------------------- |30| ------------ | ------------------------------------- |

31| Write | 创建新文件或用新内容覆盖现有文件 |31| Write | 创建新文件或用新内容覆盖现有文件 |

32| Edit | 对现有文件的特定部分进行有针对性的编辑 |32| Edit | 对现有文件的特定部分进行有针对性的编辑 |

33| NotebookEdit | 修改Jupyter notebook(`.ipynb`文件)中的单元格 |33| NotebookEdit | 修改 Jupyter notebook(`.ipynb` 文件)中的单元格 |

34 34 

35<Note>35<Note>

36 文件回滚将磁盘上的文件恢复到之前的状态。它不会回滚对话本身。调用`rewindFiles()`(TypeScript)或`rewind_files()`(Python)后,对话历史和上下文保持不变。36 文件回滚将磁盘上的文件恢复到之前的状态。它不会回滚对话本身。调用 `rewindFiles()`(TypeScript)或 `rewind_files()`(Python)后,对话历史和上下文保持不变。

37</Note>37</Note>

38 38 

39Checkpoint系统跟踪39Checkpoint 系统跟踪

40 40 

41* 会话期间创建的文件41* 会话期间创建的文件

42* 会话期间修改的文件42* 会话期间修改的文件

43* 修改文件的原始内容43* 修改文件的原始内容

44 44 

45当您回滚到checkpoint时,创建的文件被删除,修改的文件被恢复到该点的内容。45当您回滚到 checkpoint 时,创建的文件被删除,修改的文件被恢复到该点的内容。

46 46 

47<h2 id="implement-checkpointing">47<h2 id="implement-checkpointing">

48 实现checkpointing48 实现checkpointing


715| 本地文件 | 远程或网络文件不被跟踪 |715| 本地文件 | 远程或网络文件不被跟踪 |

716 716 

717<h2 id="troubleshooting">717<h2 id="troubleshooting">

718 Troubleshooting718 故障排除

719</h2>719</h2>

720 720 

721<h3 id="checkpointing-options-not-recognized">721<h3 id="checkpointing-options-not-recognized">


729* **Python**:`pip install --upgrade claude-agent-sdk`729* **Python**:`pip install --upgrade claude-agent-sdk`

730* **TypeScript**:`npm install @anthropic-ai/claude-agent-sdk@latest`730* **TypeScript**:`npm install @anthropic-ai/claude-agent-sdk@latest`

731 731 

732<h3 id="user-messages-don-t-have-uuids">732<h3 id="user-messages-dont-have-uuids">

733 用户消息没有UUID733 用户消息没有UUID

734</h3>734</h3>

735 735 

agent-sdk/mcp.md +80 −28

Details

14 本页面涵盖 Agent SDK 的 MCP 配置。要将 MCP 服务器添加到 Claude Code CLI 以便在每个项目中加载,请参阅 [MCP 安装范围](/zh-CN/mcp#mcp-installation-scopes)。14 本页面涵盖 Agent SDK 的 MCP 配置。要将 MCP 服务器添加到 Claude Code CLI 以便在每个项目中加载,请参阅 [MCP 安装范围](/zh-CN/mcp#mcp-installation-scopes)。

15</Note>15</Note>

16 16 

17## 快速开始17<h2 id="quickstart">

18 快速开始

19</h2>

18 20 

19此示例使用 [HTTP 传输](#httpsse-servers) 连接到 [Claude Code 文档](https://code.claude.com/docs) MCP 服务器,并使用 [`allowedTools`](#allow-mcp-tools) 与通配符来允许来自服务器的所有工具。21此示例使用 [HTTP 传输](#http%2Fsse-servers) 连接到 [Claude Code 文档](https://code.claude.com/docs) MCP 服务器,并使用 [`allowedTools`](#allow-mcp-tools) 与通配符来允许来自服务器的所有工具。

20 22 

21<CodeGroup>23<CodeGroup>

22 ```typescript TypeScript theme={null}24 ```typescript TypeScript theme={null}


70 72 

71代理连接到文档服务器,搜索有关 hooks 的信息,并返回结果。73代理连接到文档服务器,搜索有关 hooks 的信息,并返回结果。

72 74 

73## 添加 MCP 服务器75<h2 id="add-an-mcp-server">

76 添加 MCP 服务器

77</h2>

74 78 

75您可以在调用 `query()` 时在代码中配置 MCP 服务器,或在通过 [`settingSources`](#from-a-config-file) 加载的 `.mcp.json` 文件中配置。79您可以在调用 `query()` 时在代码中配置 MCP 服务器,或在通过 [`settingSources`](#from-a-config-file) 加载的 `.mcp.json` 文件中配置。

76 80 

77### 在代码中81<h3 id="in-code">

82 在代码中

83</h3>

78 84 

79在 `mcpServers` 选项中直接传递 MCP 服务器:85在 `mcpServers` 选项中直接传递 MCP 服务器:

80 86 


129 ```135 ```

130</CodeGroup>136</CodeGroup>

131 137 

132### 从配置文件138<h3 id="from-a-config-file">

139 从配置文件

140</h3>

133 141 

134在项目根目录创建一个 `.mcp.json` 文件。当启用 `project` 设置源时,该文件会被选中,这对默认 `query()` 选项是默认的。如果您显式设置 `settingSources`,请包含 `"project"` 以便加载此文件:142在项目根目录创建一个 `.mcp.json` 文件。当启用 `project` 设置源时,该文件会被选中,这对默认 `query()` 选项是默认的。如果您显式设置 `settingSources`,请包含 `"project"` 以便加载此文件:

135 143 


144}152}

145```153```

146 154 

147## 允许 MCP 工具155<h2 id="allow-mcp-tools">

156 允许 MCP 工具

157</h2>

148 158 

149MCP 工具需要明确的权限才能让 Claude 使用它们。没有权限,Claude 会看到工具可用,但无法调用它们。159MCP 工具需要明确的权限才能让 Claude 使用它们。没有权限,Claude 会看到工具可用,但无法调用它们。

150 160 

151### 工具命名约定161<h3 id="tool-naming-convention">

162 工具命名约定

163</h3>

152 164 

153MCP 工具遵循命名模式 `mcp__<server-name>__<tool-name>`。例如,名为 `"github"` 的 GitHub 服务器与 `list_issues` 工具变成 `mcp__github__list_issues`。165MCP 工具遵循命名模式 `mcp__<server-name>__<tool-name>`。例如,名为 `"github"` 的 GitHub 服务器与 `list_issues` 工具变成 `mcp__github__list_issues`。

154 166 

155### 使用 allowedTools 自动批准167<h3 id="auto-approve-with-allowedtools">

168 使用 allowedTools 自动批准

169</h3>

156 170 

157使用 `allowedTools` 自动批准特定的 MCP 工具,以便 Claude 可以在没有权限提示的情况下使用它们:171使用 `allowedTools` 自动批准特定的 MCP 工具,以便 Claude 可以在没有权限提示的情况下使用它们:

158 172 


174通配符 (`*`) 让您允许来自服务器的所有工具,而无需逐个列出每一个。188通配符 (`*`) 让您允许来自服务器的所有工具,而无需逐个列出每一个。

175 189 

176<Note>190<Note>

177 **对于 MCP 访问,优先使用 `allowedTools` 而不是权限模式。** `permissionMode: "acceptEdits"` 不会自动批准 MCP 工具(仅文件编辑和文件系统 Bash 命令)。`permissionMode: "bypassPermissions"` 确实会自动批准 MCP 工具,但也会禁用所有其他安全提示,这比必要的范围更广。`allowedTools` 中的通配符仅授予您想要的 MCP 服务器,没有其他。请参阅 [权限模式](/zh-CN/agent-sdk/permissions#permission-modes) 以获得完整比较。191 **对于 MCP 访问,优先使用 `allowedTools` 而不是权限模式。** `permissionMode: "acceptEdits"` 不会自动批准 MCP 工具(仅文件编辑和文件系统 Bash 命令)。`permissionMode: "bypassPermissions"` 确实会自动批准 MCP 工具,但也会禁用所有其他安全提示,除非明确的 [`ask` 规则](/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated) 匹配,这比必要的范围更广。`allowedTools` 中的通配符仅授予您想要的 MCP 服务器,没有其他。请参阅 [权限模式](/zh-CN/agent-sdk/permissions#permission-modes) 以获得完整比较。

178</Note>192</Note>

179 193 

180### 发现可用工具194<h3 id="discover-available-tools">

195 发现可用工具

196</h3>

181 197 

182要查看 MCP 服务器提供的工具,请检查服务器的文档或连接到服务器并检查 `system` init 消息:198要查看 MCP 服务器提供的工具,请检查服务器的文档或连接到服务器并检查 `system` init 消息:

183 199 


189}205}

190```206```

191 207 

192## 传输类型208<h2 id="transport-types">

209 传输类型

210</h2>

193 211 

194MCP 服务器使用不同的传输协议与您的代理通信。检查服务器的文档以查看它支持哪种传输:212MCP 服务器使用不同的传输协议与您的代理通信。检查服务器的文档以查看它支持哪种传输:

195 213 


197* 如果文档给您一个 **URL**,请使用 HTTP 或 SSE215* 如果文档给您一个 **URL**,请使用 HTTP 或 SSE

198* 如果您在代码中构建自己的工具,请使用 SDK MCP 服务器216* 如果您在代码中构建自己的工具,请使用 SDK MCP 服务器

199 217 

200### stdio 服务器218<h3 id="stdio-servers">

219 stdio 服务器

220</h3>

201 221 

202通过 stdin/stdout 通信的本地进程。对于在同一台机器上运行的 MCP 服务器,请使用此选项:222通过 stdin/stdout 通信的本地进程。对于在同一台机器上运行的 MCP 服务器,请使用此选项:

203 223 


253 </Tab>273 </Tab>

254</Tabs>274</Tabs>

255 275 

256### HTTP/SSE 服务器276<h3 id="http/sse-servers">

277 HTTP/SSE 服务器

278</h3>

257 279 

258对于云托管的 MCP 服务器和远程 API,请使用 HTTP 或 SSE:280对于云托管的 MCP 服务器和远程 API,请使用 HTTP 或 SSE:

259 281 


311 333 

312对于可流式传输的 HTTP 传输,请改用 `"type": "http"`。在 `.mcp.json` 和其他 JSON 配置文件中,`"streamable-http"` 被接受作为 `"http"` 的别名。编程式 `mcpServers` 选项仅接受 `"http"`。334对于可流式传输的 HTTP 传输,请改用 `"type": "http"`。在 `.mcp.json` 和其他 JSON 配置文件中,`"streamable-http"` 被接受作为 `"http"` 的别名。编程式 `mcpServers` 选项仅接受 `"http"`。

313 335 

314### SDK MCP 服务器336<h3 id="sdk-mcp-servers">

337 SDK MCP 服务器

338</h3>

315 339 

316直接在应用程序代码中定义自定义工具,而不是运行单独的服务器进程。有关实现详情,请参阅 [自定义工具指南](/zh-CN/agent-sdk/custom-tools)。340直接在应用程序代码中定义自定义工具,而不是运行单独的服务器进程。有关实现详情,请参阅 [自定义工具指南](/zh-CN/agent-sdk/custom-tools)。

317 341 

318## MCP 工具搜索342<h2 id="mcp-tool-search">

343 MCP 工具搜索

344</h2>

319 345 

320当您配置了许多 MCP 工具时,工具定义可能会消耗上下文窗口的很大一部分。工具搜索通过从上下文中隐藏工具定义并仅加载 Claude 每轮需要的工具来解决此问题。346当您配置了许多 MCP 工具时,工具定义可能会消耗上下文窗口的很大一部分。工具搜索通过从上下文中隐藏工具定义并仅加载 Claude 每轮需要的工具来解决此问题。

321 347 


323 349 

324有关更多详情,包括最佳实践和将工具搜索与自定义 SDK 工具一起使用,请参阅 [工具搜索指南](/zh-CN/agent-sdk/tool-search)。350有关更多详情,包括最佳实践和将工具搜索与自定义 SDK 工具一起使用,请参阅 [工具搜索指南](/zh-CN/agent-sdk/tool-search)。

325 351 

326## 身份验证352<h2 id="authentication">

353 身份验证

354</h2>

327 355 

328大多数 MCP 服务器需要身份验证才能访问外部服务。通过服务器配置中的环境变量传递凭据。356大多数 MCP 服务器需要身份验证才能访问外部服务。通过服务器配置中的环境变量传递凭据。

329 357 

330### 通过环境变量传递凭据358<h3 id="pass-credentials-via-environment-variables">

359 通过环境变量传递凭据

360</h3>

331 361 

332使用 `env` 字段将 API 密钥、令牌和其他凭据传递给 MCP 服务器:362使用 `env` 字段将 API 密钥、令牌和其他凭据传递给 MCP 服务器:

333 363 


387 417 

388有关带有调试日志的完整工作示例,请参阅 [从存储库列出问题](#list-issues-from-a-repository)。418有关带有调试日志的完整工作示例,请参阅 [从存储库列出问题](#list-issues-from-a-repository)。

389 419 

390### 远程服务器的 HTTP 标头420<h3 id="http-headers-for-remote-servers">

421 远程服务器的 HTTP 标头

422</h3>

391 423 

392对于 HTTP 和 SSE 服务器,直接在服务器配置中传递身份验证标头:424对于 HTTP 和 SSE 服务器,直接在服务器配置中传递身份验证标头:

393 425 


445 </Tab>477 </Tab>

446</Tabs>478</Tabs>

447 479 

448### OAuth2 身份验证480<h3 id="oauth2-authentication">

481 OAuth2 身份验证

482</h3>

449 483 

450[MCP 规范支持 OAuth 2.1](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization) 用于授权。SDK 不会自动处理 OAuth 流程,但您可以在应用程序中完成 OAuth 流程后通过标头传递访问令牌:484[MCP 规范支持 OAuth 2.1](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization) 用于授权。SDK 不会自动处理 OAuth 流程,但您可以在应用程序中完成 OAuth 流程后通过标头传递访问令牌:

451 485 


485 ```519 ```

486</CodeGroup>520</CodeGroup>

487 521 

488## 示例522<h2 id="examples">

523 示例

524</h2>

489 525 

490### 从存储库列出问题526<h3 id="list-issues-from-a-repository">

527 从存储库列出问题

528</h3>

491 529 

492此示例连接到 [GitHub MCP 服务器](https://github.com/modelcontextprotocol/servers/tree/main/src/github) 以列出最近的问题。该示例包括调试日志以验证 MCP 连接和工具调用。530此示例连接到 [GitHub MCP 服务器](https://github.com/modelcontextprotocol/servers/tree/main/src/github) 以列出最近的问题。该示例包括调试日志以验证 MCP 连接和工具调用。

493 531 


584 ```622 ```

585</CodeGroup>623</CodeGroup>

586 624 

587### 查询数据库625<h3 id="query-a-database">

626 查询数据库

627</h3>

588 628 

589此示例使用 [Postgres MCP 服务器](https://github.com/modelcontextprotocol/servers/tree/main/src/postgres) 查询数据库。连接字符串作为参数传递给服务器。代理自动发现数据库架构、编写 SQL 查询并返回结果:629此示例使用 [Postgres MCP 服务器](https://github.com/modelcontextprotocol/servers/tree/main/src/postgres) 查询数据库。连接字符串作为参数传递给服务器。代理自动发现数据库架构、编写 SQL 查询并返回结果:

590 630 


655 ```695 ```

656</CodeGroup>696</CodeGroup>

657 697 

658## 错误处理698<h2 id="error-handling">

699 错误处理

700</h2>

659 701 

660MCP 服务器可能因各种原因连接失败:服务器进程可能未安装、凭据可能无效,或远程服务器可能无法访问。702MCP 服务器可能因各种原因连接失败:服务器进程可能未安装、凭据可能无效,或远程服务器可能无法访问。

661 703 


717 ```759 ```

718</CodeGroup>760</CodeGroup>

719 761 

720## 故障排除762<h2 id="troubleshooting">

763 故障排除

764</h2>

721 765 

722### 服务器显示"失败"状态766<h3 id="server-shows-failed-status">

767 服务器显示"失败"状态

768</h3>

723 769 

724检查 `init` 消息以查看哪些服务器连接失败:770检查 `init` 消息以查看哪些服务器连接失败:

725 771 


740* **无效的连接字符串**:对于数据库服务器,验证连接字符串格式以及数据库是否可访问。786* **无效的连接字符串**:对于数据库服务器,验证连接字符串格式以及数据库是否可访问。

741* **网络问题**:对于远程 HTTP/SSE 服务器,检查 URL 是否可达以及任何防火墙是否允许连接。787* **网络问题**:对于远程 HTTP/SSE 服务器,检查 URL 是否可达以及任何防火墙是否允许连接。

742 788 

743### 工具未被调用789<h3 id="tools-not-being-called">

790 工具未被调用

791</h3>

744 792 

745如果 Claude 看到工具但不使用它们,请检查您是否已使用 `allowedTools` 授予权限:793如果 Claude 看到工具但不使用它们,请检查您是否已使用 `allowedTools` 授予权限:

746 794 


755};803};

756```804```

757 805 

758### 连接超时806<h3 id="connection-timeouts">

807 连接超时

808</h3>

759 809 

760MCP SDK 对服务器连接的默认超时为 60 秒。如果您的服务器需要更长时间才能启动,连接将失败。对于需要更多启动时间的服务器,请考虑:810MCP SDK 对服务器连接的默认超时为 60 秒。如果您的服务器需要更长时间才能启动,连接将失败。对于需要更多启动时间的服务器,请考虑:

761 811 


763* 在启动代理之前预热服务器813* 在启动代理之前预热服务器

764* 检查服务器日志以了解缓慢初始化的原因814* 检查服务器日志以了解缓慢初始化的原因

765 815 

766## 相关资源816<h2 id="related-resources">

817 相关资源

818</h2>

767 819 

768* **[自定义工具指南](/zh-CN/agent-sdk/custom-tools)**:构建您自己的 MCP 服务器,与您的 SDK 应用程序在进程中运行820* **[自定义工具指南](/zh-CN/agent-sdk/custom-tools)**:构建您自己的 MCP 服务器,与您的 SDK 应用程序在进程中运行

769* **[权限](/zh-CN/agent-sdk/permissions)**:使用 `allowedTools` 和 `disallowedTools` 控制您的代理可以使用哪些 MCP 工具821* **[权限](/zh-CN/agent-sdk/permissions)**:使用 `allowedTools` 和 `disallowedTools` 控制您的代理可以使用哪些 MCP 工具

Details

12 12 

13Claude Code SDK 已重命名为 **Claude Agent SDK**,其文档已重新组织。这一变化反映了该 SDK 在构建超越编码任务的 AI 代理方面的更广泛功能。13Claude Code SDK 已重命名为 **Claude Agent SDK**,其文档已重新组织。这一变化反映了该 SDK 在构建超越编码任务的 AI 代理方面的更广泛功能。

14 14 

15<h2 id="what-s-changed">15<h2 id="whats-changed">

16 变更内容16 变更内容

17</h2>17</h2>

18 18 


82}82}

83```83```

84 84 

85就这样!无需进行其他代码更改。85**5. 查看 [破坏性变更](#breaking-changes)**

86 

87进行完成迁移所需的任何代码更改。

86 88 

87<h3 id="for-python-projects">89<h3 id="for-python-projects">

88 对于 Python 项目90 对于 Python 项目


172 174 

173<CodeGroup>175<CodeGroup>

174 ```typescript TypeScript theme={null}176 ```typescript TypeScript theme={null}

177 import { query } from "@anthropic-ai/claude-agent-sdk";

178 

175 // 之前 (v0.0.x) - 默认使用 Claude Code 的系统提示179 // 之前 (v0.0.x) - 默认使用 Claude Code 的系统提示

176 const result = query({ prompt: "Hello" });180 const before = query({ prompt: "Hello" });

177 181 

178 // 之后 (v0.1.0) - 默认使用最小系统提示182 // 之后 (v0.1.0) - 默认使用最小系统提示

179 // 要获得旧行为,请显式请求 Claude Code 的预设:183 // 要获得旧行为,请显式请求 Claude Code 的预设:

180 const result = query({184 const presetResult = query({

181 prompt: "Hello",185 prompt: "Hello",

182 options: {186 options: {

183 systemPrompt: { type: "preset", preset: "claude_code" }187 systemPrompt: { type: "preset", preset: "claude_code" }


185 });189 });

186 190 

187 // 或使用自定义系统提示:191 // 或使用自定义系统提示:

188 const result = query({192 const customResult = query({

189 prompt: "Hello",193 prompt: "Hello",

190 options: {194 options: {

191 systemPrompt: "You are a helpful coding assistant"195 systemPrompt: "You are a helpful coding assistant"


233 237 

234<CodeGroup>238<CodeGroup>

235 ```typescript TypeScript theme={null}239 ```typescript TypeScript theme={null}

236 const result = query({240 import { query } from "@anthropic-ai/claude-agent-sdk";

241 

242 const isolatedResult = query({

237 prompt: "Hello",243 prompt: "Hello",

238 options: {244 options: {

239 settingSources: [] // 未加载文件系统设置245 settingSources: [] // 未加载文件系统设置


241 });247 });

242 248 

243 // 或仅加载特定源:249 // 或仅加载特定源:

244 const result = query({250 const projectOnlyResult = query({

245 prompt: "Hello",251 prompt: "Hello",

246 options: {252 options: {

247 settingSources: ["project"] // 仅项目设置253 settingSources: ["project"] // 仅项目设置

Details

193 ...process.env,193 ...process.env,

194 // ... 导出器配置 ...194 // ... 导出器配置 ...

195 OTEL_SERVICE_NAME: "support-triage-agent",195 OTEL_SERVICE_NAME: "support-triage-agent",

196 OTEL_RESOURCE_ATTRIBUTES:196 OTEL_RESOURCE_ATTRIBUTES":

197 "service.version=1.4.0,deployment.environment=production",197 "service.version=1.4.0,deployment.environment=production",

198 },198 },

199 };199 };

Details

27 检查 `deny` 规则(来自 `disallowed_tools` 和 [settings.json](/zh-CN/settings#permission-settings))。如果拒绝规则匹配,工具被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名称拒绝规则(如 `Bash`)在此评估开始之前将工具从 Claude 的上下文中移除,因此只有作用域规则(如 `Bash(rm *)`)在此步骤中被检查。27 检查 `deny` 规则(来自 `disallowed_tools` 和 [settings.json](/zh-CN/settings#permission-settings))。如果拒绝规则匹配,工具被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名称拒绝规则(如 `Bash`)在此评估开始之前将工具从 Claude 的上下文中移除,因此只有作用域规则(如 `Bash(rm *)`)在此步骤中被检查。

28 </Step>28 </Step>

29 29 

30 <Step title="询问规则">

31 检查来自 [settings.json](/zh-CN/settings#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。在 `dontAsk` 模式下,匹配的询问规则会被拒绝,因为该模式从不提示。

32 </Step>

33 

30 <Step title="权限模式">34 <Step title="权限模式">

31 应用活跃的 [权限模式](#permission-modes)。`bypassPermissions` 批准到达此步骤的所有内容。`acceptEdits` 批准文件操作。其他模式会继续进行。35 应用活跃的 [权限模式](#permission-modes)。`bypassPermissions` 批准到达此步骤的所有内容。`acceptEdits` 批准文件操作。`plan` 将文件编辑和 shell 写入工具路由到您的 `canUseTool` 回调,无论允许规则如何,因此在规划时写入操作无法自动批准。其他模式会继续进行。

32 </Step>36 </Step>

33 37 

34 <Step title="允许规则">38 <Step title="允许规则">


40 </Step>44 </Step>

41</Steps>45</Steps>

42 46 

43<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=cc94220087262cd48c9b64a14c4e1c2c" alt="权限评估流程图" width="1024" height="260" data-path="images/agent-sdk/permissions-flow.svg" />47<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=cc94220087262cd48c9b64a14c4e1c2c" alt="五步权限评估流程图,与上述步骤相匹配:工具请求通过 hooks、拒绝规则、权限模式、允许规则和 canUseTool。Hooks、拒绝规则和 canUseTool 可以路由到阻止;权限模式绕过、允许规则和 canUseTool 可以路由到执行。" width="1024" height="260" data-path="images/agent-sdk/permissions-flow.svg" />

44 48 

45本页面重点关注 **允许和拒绝规则** 以及 **权限模式**。对于其他步骤:49本页面重点关注 **允许和拒绝规则** 以及 **权限模式**。对于其他步骤:

46 50 


58| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准。此处未列出的工具仍然存在并继续进行权限模式和 `canUseTool`。 |62| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准。此处未列出的工具仍然存在并继续进行权限模式和 `canUseTool`。 |

59| `disallowed_tools=["Bash"]` | `Bash` 工具定义从请求中移除。Claude 看不到该工具,无法尝试它。 |63| `disallowed_tools=["Bash"]` | `Bash` 工具定义从请求中移除。Claude 看不到该工具,无法尝试它。 |

60| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。与 `rm *` 匹配的调用在每个权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用继续进行权限模式。 |64| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。与 `rm *` 匹配的调用在每个权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用继续进行权限模式。 |

65| `disallowed_tools=["*"]` | 每个工具定义都从请求中移除。工具名称通配符在拒绝规则中受支持:`"*"` 匹配每个工具,`"mcp__*"` 匹配所有服务器中的每个 MCP 工具。 |

66 

67允许规则仅在字面 `mcp__<server>__` 前缀之后接受工具名称通配符。服务器段必须无通配符,以便规则命名您配置的特定服务器:`mcp__puppeteer__*` 匹配来自 `puppeteer` 服务器的每个工具,`mcp__github__get_*` 匹配其 `get_` 工具。未锚定的条目如 `allowed_tools=["*"]` 或 `allowed_tools=["mcp__*"]` 被忽略并显示启动警告,不会自动批准任何内容。

61 68 

62对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对。列出的工具被批准;其他任何内容都被直接拒绝,而不是提示:69对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对。列出的工具被批准;其他任何内容都被直接拒绝,而不是提示:

63 70 


91| `default` | 标准权限行为 | 无自动批准;不匹配的工具触发您的 `canUseTool` 回调 |98| `default` | 标准权限行为 | 无自动批准;不匹配的工具触发您的 `canUseTool` 回调 |

92| `dontAsk` | 拒绝而不是提示 | 任何未被 `allowed_tools` 或规则预批准的内容都被拒绝;`canUseTool` 永远不会被调用 |99| `dontAsk` | 拒绝而不是提示 | 任何未被 `allowed_tools` 或规则预批准的内容都被拒绝;`canUseTool` 永远不会被调用 |

93| `acceptEdits` | 自动接受文件编辑 | 文件编辑和 [文件系统操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)被自动批准 |100| `acceptEdits` | 自动接受文件编辑 | 文件编辑和 [文件系统操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)被自动批准 |

94| `bypassPermissions` | 绕过所有权限检查 | 所有工具运行而无需权限提示(谨慎使用) |101| `bypassPermissions` | 绕过权限检查 | 工具运行而无需权限提示,除非显式 [`ask` 规则](#how-permissions-are-evaluated) 匹配(谨慎使用) |

95| `plan` | 规划模式 | 只读工具运行;Claude 分析和规划而不编辑您的源文件 |102| `plan` | 规划模式 | Claude 在不编辑源文件的情况下探索和规划;文件编辑永远不会自动批准,并通过您的 `canUseTool` 回调提示 |

96| `auto`(仅 TypeScript) | 模型分类批准 | 模型分类器批准或拒绝每个工具调用。请参阅 [Auto 模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 了解可用性 |103| `auto`(仅 TypeScript) | 模型分类批准 | 模型分类器批准或拒绝每个工具调用。请参阅 [Auto 模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 了解可用性 |

97 104 

98<Warning>105<Warning>

99 **子代理继承:** 当父代理使用 `bypassPermissions`、`acceptEdits` 或 `auto` 时,所有子代理继承该模式,并且不能按子代理覆盖。子代理可能有不同的系统提示和行为约束较少,比您的主代理,所以继承 `bypassPermissions` 授予它们完整的、自主的系统访问权限,无需任何批准提示106 **子代理继承:** 当父代理使用 `bypassPermissions`、`acceptEdits` 或 `auto` 时,所有子代理继承该模式,并且不能按子代理覆盖。子代理可能有不同的系统提示和行为约束较少,比您的主代理,所以继承 `bypassPermissions` 授予它们完整的、自主的系统访问权限。显式 [`ask` 规则](#how-permissions-are-evaluated) 仍然会强制提示。

100</Warning>107</Warning>

101 108 

102<h3 id="set-permission-mode">109<h3 id="set-permission-mode">


226 233 

227**使用时机:** 您信任 Claude 的编辑并希望更快的迭代,例如在原型设计期间或在隔离目录中工作时。234**使用时机:** 您信任 Claude 的编辑并希望更快的迭代,例如在原型设计期间或在隔离目录中工作时。

228 235 

229<h4 id="don-t-ask-mode-dontask">236<h4 id="dont-ask-mode-dontask">

230 不询问模式(`dontAsk`)237 不询问模式(`dontAsk`)

231</h4>238</h4>

232 239 


250 规划模式(`plan`)257 规划模式(`plan`)

251</h4>258</h4>

252 259 

253Claude 限制为只读工具Claude 可以读取文件并运行只读 shell 命令来探索代码库,但不编辑您的源文件。Claude 可能使用 `AskUserQuestion` 在最终确定计划之前澄清需求。请参阅 [处理批准和用户输入](/zh-CN/agent-sdk/user-input#handle-clarifying-questions) 以处理这些提示。260Claude 探索代码库并生成计划而不编辑您的源文件只读工具在默认模式下运行。文件编辑在规划模式下永远不会自动批准,即使允许规则匹配。它们通过您的 `canUseTool` 回调提示。Claude 可能使用 `AskUserQuestion` 在最终确定计划之前澄清需求。请参阅 [处理批准和用户输入](/zh-CN/agent-sdk/user-input#handle-clarifying-questions) 以处理这些提示。

254 261 

255**使用时机:** 您想要 Claude 提议更改而不执行它们,例如在代码审查期间或当您需要在进行更改之前批准更改时。262**使用时机:** 您想要 Claude 提议更改而不执行它们,例如在代码审查期间或当您需要在进行更改之前批准更改时。

256 263 

agent-sdk/python.md +517 −176

Details

6 6 

7> Python Agent SDK 的完整 API 参考,包括所有函数、类型和类。7> Python Agent SDK 的完整 API 参考,包括所有函数、类型和类。

8 8 

9## 安装9<h2 id="installation">

10 安装

11</h2>

10 12 

11```bash theme={null}13```bash theme={null}

12pip install claude-agent-sdk14pip install claude-agent-sdk

13```15```

14 16 

15## 在 `query()` 和 `ClaudeSDKClient` 之间选择17<h2 id="choosing-between-query-and-claudesdkclient">

18 在 `query()` 和 `ClaudeSDKClient` 之间选择

19</h2>

16 20 

17Python SDK 提供了两种与 Claude Code 交互的方式:21Python SDK 提供了两种与 Claude Code 交互的方式:

18 22 

19### 快速比较23<h3 id="quick-comparison">

24 快速比较

25</h3>

20 26 

21| 功能 | `query()` | `ClaudeSDKClient` |27| 功能 | `query()` | `ClaudeSDKClient` |

22| :-------- | :----------------------------------------- | :---------------- |28| :-------- | :----------------------------------------- | :---------------- |


30| **继续聊天** | 通过 `continue_conversation` 或 `resume` 手动进行 | ✅ 自动 |36| **继续聊天** | 通过 `continue_conversation` 或 `resume` 手动进行 | ✅ 自动 |

31| **用例** | 一次性任务 | 持续对话 |37| **用例** | 一次性任务 | 持续对话 |

32 38 

33### 何时使用 `query()`(一次性任务)39<h3 id="when-to-use-query-one-off-tasks">

40 何时使用 `query()`(一次性任务)

41</h3>

34 42 

35**最适合:**43**最适合:**

36 44 


39* 简单的自动化脚本47* 简单的自动化脚本

40* 当你想每次都重新开始时48* 当你想每次都重新开始时

41 49 

42### 何时使用 `ClaudeSDKClient`(持续对话)50<h3 id="when-to-use-claudesdkclient-continuous-conversation">

51 何时使用 `ClaudeSDKClient`(持续对话)

52</h3>

43 53 

44**最适合:**54**最适合:**

45 55 


49* **响应驱动的逻辑** - 当下一步操作取决于 Claude 的响应时59* **响应驱动的逻辑** - 当下一步操作取决于 Claude 的响应时

50* **会话控制** - 显式管理对话生命周期60* **会话控制** - 显式管理对话生命周期

51 61 

52## 函数62<h2 id="functions">

63 函数

64</h2>

53 65 

54### `query()`66<h3 id="query">

67 `query()`

68</h3>

55 69 

56为每次与 Claude Code 的交互创建一个新会话。默认情况下返回一个异步迭代器,当消息到达时产生消息。每次调用 `query()` 都会重新开始,不记得之前的交互,除非你传递 `continue_conversation=True` 或在 [`ClaudeAgentOptions`](#claudeagentoptions) 中传递 `resume`。参见 [Sessions](/zh-CN/agent-sdk/sessions)。70为每次与 Claude Code 的交互创建一个新会话。默认情况下返回一个异步迭代器,当消息到达时产生消息。每次调用 `query()` 都会重新开始,不记得之前的交互,除非你传递 `continue_conversation=True` 或在 [`ClaudeAgentOptions`](#claudeagentoptions) 中传递 `resume`。参见 [Sessions](/zh-CN/agent-sdk/sessions)。

57 71 


64) -> AsyncIterator[Message]78) -> AsyncIterator[Message]

65```79```

66 80 

67#### 参数81<h4 id="parameters">

82 参数

83</h4>

68 84 

69| 参数 | 类型 | 描述 |85| 参数 | 类型 | 描述 |

70| :---------- | :--------------------------- | :------------------------------------------ |86| :---------- | :--------------------------- | :------------------------------------------ |


72| `options` | `ClaudeAgentOptions \| None` | 可选配置对象(如果为 None,默认为 `ClaudeAgentOptions()`) |88| `options` | `ClaudeAgentOptions \| None` | 可选配置对象(如果为 None,默认为 `ClaudeAgentOptions()`) |

73| `transport` | `Transport \| None` | 用于与 CLI 进程通信的可选自定义传输 |89| `transport` | `Transport \| None` | 用于与 CLI 进程通信的可选自定义传输 |

74 90 

75#### 返回91<h4 id="returns">

92 返回

93</h4>

76 94 

77返回一个 `AsyncIterator[Message]`,从对话中产生消息。95返回一个 `AsyncIterator[Message]`,从对话中产生消息。

78 96 

79#### 示例 - 带选项97<h4 id="example-with-options">

98 示例 - 带选项

99</h4>

80 100 

81```python theme={null}101```python theme={null}

82import asyncio102import asyncio


97asyncio.run(main())117asyncio.run(main())

98```118```

99 119 

100### `tool()`120<h3 id="tool">

121 `tool()`

122</h3>

101 123 

102用于定义具有类型安全的 MCP 工具的装饰器。124用于定义具有类型安全的 MCP 工具的装饰器。

103 125 


110) -> Callable[[Callable[[Any], Awaitable[dict[str, Any]]]], SdkMcpTool[Any]]132) -> Callable[[Callable[[Any], Awaitable[dict[str, Any]]]], SdkMcpTool[Any]]

111```133```

112 134 

113#### 参数135<h4 id="parameters-1">

136 参数

137</h4>

114 138 

115| 参数 | 类型 | 描述 |139| 参数 | 类型 | 描述 |

116| :------------- | :---------------------------------------------- | :---------------------- |140| :------------- | :---------------------------------------------- | :---------------------- |


119| `input_schema` | `type \| dict[str, Any]` | 定义工具输入参数的模式(见下文) |143| `input_schema` | `type \| dict[str, Any]` | 定义工具输入参数的模式(见下文) |

120| `annotations` | [`ToolAnnotations`](#toolannotations)` \| None` | 可选的 MCP 工具注解,为客户端提供行为提示 |144| `annotations` | [`ToolAnnotations`](#toolannotations)` \| None` | 可选的 MCP 工具注解,为客户端提供行为提示 |

121 145 

122#### 输入模式选项146<h4 id="input-schema-options">

147 输入模式选项

148</h4>

123 149 

1241. **简单类型映射**(推荐):1501. **简单类型映射**(推荐):

125 151 


139 }165 }

140 ```166 ```

141 167 

142#### 返回168<h4 id="returns-1">

169 返回

170</h4>

143 171 

144一个装饰器函数,包装工具实现并返回一个 `SdkMcpTool` 实例。172一个装饰器函数,包装工具实现并返回一个 `SdkMcpTool` 实例。

145 173 

146#### 示例174<h4 id="example">

175 示例

176</h4>

147 177 

148```python theme={null}178```python theme={null}

149from claude_agent_sdk import tool179from claude_agent_sdk import tool


155 return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}185 return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}

156```186```

157 187 

158#### `ToolAnnotations`188<h4 id="toolannotations">

189 `ToolAnnotations`

190</h4>

159 191 

160从 `mcp.types` 重新导出(也可以从 `claude_agent_sdk` 导入为 `from claude_agent_sdk import ToolAnnotations`)。所有字段都是可选的提示;客户端不应依赖它们做出安全决策。192从 `mcp.types` 重新导出(也可以从 `claude_agent_sdk` 导入为 `from claude_agent_sdk import ToolAnnotations`)。所有字段都是可选的提示;客户端不应依赖它们做出安全决策。

161 193 


182 return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]}214 return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]}

183```215```

184 216 

185### `create_sdk_mcp_server()`217<h3 id="create_sdk_mcp_server">

218 `create_sdk_mcp_server()`

219</h3>

186 220 

187创建在 Python 应用程序中运行的进程内 MCP 服务器。221创建在 Python 应用程序中运行的进程内 MCP 服务器。

188 222 


194) -> McpSdkServerConfig228) -> McpSdkServerConfig

195```229```

196 230 

197#### 参数231<h4 id="parameters-2">

232 参数

233</h4>

198 234 

199| 参数 | 类型 | 默认值 | 描述 |235| 参数 | 类型 | 默认值 | 描述 |

200| :-------- | :------------------------------ | :-------- | :---------------------- |236| :-------- | :------------------------------ | :-------- | :---------------------- |


202| `version` | `str` | `"1.0.0"` | 服务器版本字符串 |238| `version` | `str` | `"1.0.0"` | 服务器版本字符串 |

203| `tools` | `list[SdkMcpTool[Any]] \| None` | `None` | 使用 `@tool` 装饰器创建的工具函数列表 |239| `tools` | `list[SdkMcpTool[Any]] \| None` | `None` | 使用 `@tool` 装饰器创建的工具函数列表 |

204 240 

205#### 返回241<h4 id="returns-2">

242 返回

243</h4>

206 244 

207返回一个 `McpSdkServerConfig` 对象,可以传递给 `ClaudeAgentOptions.mcp_servers`。245返回一个 `McpSdkServerConfig` 对象,可以传递给 `ClaudeAgentOptions.mcp_servers`。

208 246 

209#### 示例247<h4 id="example-1">

248 示例

249</h4>

210 250 

211```python theme={null}251```python theme={null}

212from claude_agent_sdk import tool, create_sdk_mcp_server252from claude_agent_sdk import tool, create_sdk_mcp_server


235)275)

236```276```

237 277 

238### `list_sessions()`278<h3 id="list_sessions">

279 `list_sessions()`

280</h3>

239 281 

240列出带有元数据的过去会话。按项目目录过滤或列出所有项目中的会话。同步;立即返回。282列出带有元数据的过去会话。按项目目录过滤或列出所有项目中的会话。同步;立即返回。

241 283 


247) -> list[SDKSessionInfo]289) -> list[SDKSessionInfo]

248```290```

249 291 

250#### 参数292<h4 id="parameters-3">

293 参数

294</h4>

251 295 

252| 参数 | 类型 | 默认值 | 描述 |296| 参数 | 类型 | 默认值 | 描述 |

253| :------------------ | :------------ | :----- | :--------------------------------------------- |297| :------------------ | :------------ | :----- | :--------------------------------------------- |


255| `limit` | `int \| None` | `None` | 返回的最大会话数 |299| `limit` | `int \| None` | `None` | 返回的最大会话数 |

256| `include_worktrees` | `bool` | `True` | 当 `directory` 在 git 仓库内时,包括所有 worktrees 路径中的会话 |300| `include_worktrees` | `bool` | `True` | 当 `directory` 在 git 仓库内时,包括所有 worktrees 路径中的会话 |

257 301 

258#### 返回类型:`SDKSessionInfo`302<h4 id="return-type-sdksessioninfo">

303 返回类型:`SDKSessionInfo`

304</h4>

259 305 

260| 属性 | 类型 | 描述 |306| 属性 | 类型 | 描述 |

261| :-------------- | :------------ | :------------------------------------------- |307| :-------------- | :------------ | :------------------------------------------- |


270| `tag` | `str \| None` | 用户设置的会话标签(见 [`tag_session()`](#tag_session)) |316| `tag` | `str \| None` | 用户设置的会话标签(见 [`tag_session()`](#tag_session)) |

271| `created_at` | `int \| None` | 会话创建时间(自纪元以来的毫秒数) |317| `created_at` | `int \| None` | 会话创建时间(自纪元以来的毫秒数) |

272 318 

273#### 示例319<h4 id="example-2">

320 示例

321</h4>

274 322 

275打印项目的 10 个最近会话。结果按 `last_modified` 降序排序,所以第一项是最新的。省略 `directory` 以搜索所有项目。323打印项目的 10 个最近会话。结果按 `last_modified` 降序排序,所以第一项是最新的。省略 `directory` 以搜索所有项目。

276 324 


281 print(f"{session.summary} ({session.session_id})")329 print(f"{session.summary} ({session.session_id})")

282```330```

283 331 

284### `get_session_messages()`332<h3 id="get_session_messages">

333 `get_session_messages()`

334</h3>

285 335 

286从过去的会话中检索消息。同步;立即返回。336从过去的会话中检索消息。同步;立即返回。

287 337 


294) -> list[SessionMessage]344) -> list[SessionMessage]

295```345```

296 346 

297#### 参数347<h4 id="parameters-4">

348 参数

349</h4>

298 350 

299| 参数 | 类型 | 默认值 | 描述 |351| 参数 | 类型 | 默认值 | 描述 |

300| :----------- | :------------ | :----- | :------------------ |352| :----------- | :------------ | :----- | :------------------ |


303| `limit` | `int \| None` | `None` | 返回的最大消息数 |355| `limit` | `int \| None` | `None` | 返回的最大消息数 |

304| `offset` | `int` | `0` | 从开始跳过的消息数 |356| `offset` | `int` | `0` | 从开始跳过的消息数 |

305 357 

306#### 返回类型:`SessionMessage`358<h4 id="return-type-sessionmessage">

359 返回类型:`SessionMessage`

360</h4>

307 361 

308| 属性 | 类型 | 描述 |362| 属性 | 类型 | 描述 |

309| :------------------- | :----------------------------- | :------ |363| :------------------- | :----------------------------- | :------ |


313| `message` | `Any` | 原始消息内容 |367| `message` | `Any` | 原始消息内容 |

314| `parent_tool_use_id` | `None` | 保留供将来使用 |368| `parent_tool_use_id` | `None` | 保留供将来使用 |

315 369 

316#### 示例370<h4 id="example-3">

371 示例

372</h4>

317 373 

318```python theme={null}374```python theme={null}

319from claude_agent_sdk import list_sessions, get_session_messages375from claude_agent_sdk import list_sessions, get_session_messages


325 print(f"[{msg.type}] {msg.uuid}")381 print(f"[{msg.type}] {msg.uuid}")

326```382```

327 383 

328### `get_session_info()`384<h3 id="get_session_info">

385 `get_session_info()`

386</h3>

329 387 

330按 ID 读取单个会话的元数据,无需扫描完整项目目录。同步;立即返回。388按 ID 读取单个会话的元数据,无需扫描完整项目目录。同步;立即返回。

331 389 


336) -> SDKSessionInfo | None394) -> SDKSessionInfo | None

337```395```

338 396 

339#### 参数397<h4 id="parameters-5">

398 参数

399</h4>

340 400 

341| 参数 | 类型 | 默认值 | 描述 |401| 参数 | 类型 | 默认值 | 描述 |

342| :----------- | :------------ | :----- | :------------------ |402| :----------- | :------------ | :----- | :------------------ |


345 405 

346返回 [`SDKSessionInfo`](#return-type-sdksessioninfo),如果找不到会话则返回 `None`。406返回 [`SDKSessionInfo`](#return-type-sdksessioninfo),如果找不到会话则返回 `None`。

347 407 

348#### 示例408<h4 id="example-4">

409 示例

410</h4>

349 411 

350查找单个会话的元数据,无需扫描项目目录。当你已经从之前的运行中获得会话 ID 时很有用。412查找单个会话的元数据,无需扫描项目目录。当你已经从之前的运行中获得会话 ID 时很有用。

351 413 


357 print(f"{info.summary} (branch: {info.git_branch}, tag: {info.tag})")419 print(f"{info.summary} (branch: {info.git_branch}, tag: {info.tag})")

358```420```

359 421 

360### `rename_session()`422<h3 id="rename_session">

423 `rename_session()`

424</h3>

361 425 

362通过追加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。同步。426通过追加自定义标题条目来重命名会话。重复调用是安全的;最新的标题获胜。同步。

363 427 


369) -> None433) -> None

370```434```

371 435 

372#### 参数436<h4 id="parameters-6">

437 参数

438</h4>

373 439 

374| 参数 | 类型 | 默认值 | 描述 |440| 参数 | 类型 | 默认值 | 描述 |

375| :----------- | :------------ | :----- | :------------------ |441| :----------- | :------------ | :----- | :------------------ |


379 445 

380如果 `session_id` 不是有效的 UUID 或 `title` 为空,则抛出 `ValueError`;如果找不到会话,则抛出 `FileNotFoundError`。446如果 `session_id` 不是有效的 UUID 或 `title` 为空,则抛出 `ValueError`;如果找不到会话,则抛出 `FileNotFoundError`。

381 447 

382#### 示例448<h4 id="example-5">

449 示例

450</h4>

383 451 

384重命名最近的会话,使其更容易找到。新标题在后续读取时出现在 [`SDKSessionInfo.custom_title`](#return-type-sdksessioninfo) 中。452重命名最近的会话,使其更容易找到。新标题在后续读取时出现在 [`SDKSessionInfo.custom_title`](#return-type-sdksessioninfo) 中。

385 453 


391 rename_session(sessions[0].session_id, "Refactor auth module")459 rename_session(sessions[0].session_id, "Refactor auth module")

392```460```

393 461 

394### `tag_session()`462<h3 id="tag_session">

463 `tag_session()`

464</h3>

395 465 

396标记会话。传递 `None` 以清除标签。重复调用是安全的;最新的标签获胜。同步。466标记会话。传递 `None` 以清除标签。重复调用是安全的;最新的标签获胜。同步。

397 467 


403) -> None473) -> None

404```474```

405 475 

406#### 参数476<h4 id="parameters-7">

477 参数

478</h4>

407 479 

408| 参数 | 类型 | 默认值 | 描述 |480| 参数 | 类型 | 默认值 | 描述 |

409| :----------- | :------------ | :----- | :---------------------------------- |481| :----------- | :------------ | :----- | :---------------------------------- |


413 485 

414如果 `session_id` 不是有效的 UUID 或 `tag` 在清理后为空,则抛出 `ValueError`;如果找不到会话,则抛出 `FileNotFoundError`。486如果 `session_id` 不是有效的 UUID 或 `tag` 在清理后为空,则抛出 `ValueError`;如果找不到会话,则抛出 `FileNotFoundError`。

415 487 

416#### 示例488<h4 id="example-6">

489 示例

490</h4>

417 491 

418标记会话,然后在稍后的读取中按该标签过滤。传递 `None` 以清除现有标签。492标记会话,然后在稍后的读取中按该标签过滤。传递 `None` 以清除现有标签。

419 493 


429 print(session.summary)503 print(session.summary)

430```504```

431 505 

432## 506<h2 id="classes">

507

508</h2>

433 509 

434### `ClaudeSDKClient`510<h3 id="claudesdkclient">

511 `ClaudeSDKClient`

512</h3>

435 513 

436**在多次交换中维持对话会话。** 这是 TypeScript SDK 的 `query()` 函数内部工作方式的 Python 等价物 - 它创建一个可以继续对话的客户端对象。514**在多次交换中维持对话会话。** 这是 TypeScript SDK 的 `query()` 函数内部工作方式的 Python 等价物 - 它创建一个可以继续对话的客户端对象。

437 515 

438#### 关键特性516<h4 id="key-features">

517 关键特性

518</h4>

439 519 

440* **会话连续性**:在多个 `query()` 调用中维持对话上下文520* **会话连续性**:在多个 `query()` 调用中维持对话上下文

441* **同一对话**:会话保留之前的消息521* **同一对话**:会话保留之前的消息


463 async def disconnect(self) -> None543 async def disconnect(self) -> None

464```544```

465 545 

466#### 方法546<h4 id="methods">

547 方法

548</h4>

467 549 

468| 方法 | 描述 |550| 方法 | 描述 |

469| :---------------------------------------- | :-------------------------------------------------------------------------------------------------- |551| :---------------------------------------- | :-------------------------------------------------------------------------------------------------- |


483| `get_server_info()` | 获取服务器信息,包括会话 ID 和功能 |565| `get_server_info()` | 获取服务器信息,包括会话 ID 和功能 |

484| `disconnect()` | 从 Claude 断开连接 |566| `disconnect()` | 从 Claude 断开连接 |

485 567 

486#### 上下文管理器支持568<h4 id="context-manager-support">

569 上下文管理器支持

570</h4>

487 571 

488客户端可以用作异步上下文管理器以自动管理连接:572客户端可以用作异步上下文管理器以自动管理连接:

489 573 


496 580 

497> **重要:** 迭代消息时,避免使用 `break` 提前退出,因为这可能导致 asyncio 清理问题。相反,让迭代自然完成或使用标志来跟踪何时找到了你需要的内容。581> **重要:** 迭代消息时,避免使用 `break` 提前退出,因为这可能导致 asyncio 清理问题。相反,让迭代自然完成或使用标志来跟踪何时找到了你需要的内容。

498 582 

499#### 示例 - 继续对话583<h4 id="example-continuing-a-conversation">

584 示例 - 继续对话

585</h4>

500 586 

501```python theme={null}587```python theme={null}

502import asyncio588import asyncio


537asyncio.run(main())623asyncio.run(main())

538```624```

539 625 

540#### 示例 - 使用 ClaudeSDKClient 进行流式输入626<h4 id="example-streaming-input-with-claudesdkclient">

627 示例 - 使用 ClaudeSDKClient 进行流式输入

628</h4>

541 629 

542```python theme={null}630```python theme={null}

543import asyncio631import asyncio


581asyncio.run(main())669asyncio.run(main())

582```670```

583 671 

584#### 示例 - 使用中断672<h4 id="example-using-interrupts">

673 示例 - 使用中断

674</h4>

585 675 

586```python theme={null}676```python theme={null}

587import asyncio677import asyncio


624 **中断后的缓冲行为:** `interrupt()` 发送停止信号但不清除消息缓冲区。被中断任务已产生的消息,包括其 `ResultMessage`(带 `subtype="error_during_execution"`),保留在流中。你必须在读取新查询的响应之前用 `receive_response()` 清空它们。如果在 `interrupt()` 之后立即发送新查询并仅调用一次 `receive_response()`,你将收到被中断任务的消息,而不是新查询的响应。714 **中断后的缓冲行为:** `interrupt()` 发送停止信号但不清除消息缓冲区。被中断任务已产生的消息,包括其 `ResultMessage`(带 `subtype="error_during_execution"`),保留在流中。你必须在读取新查询的响应之前用 `receive_response()` 清空它们。如果在 `interrupt()` 之后立即发送新查询并仅调用一次 `receive_response()`,你将收到被中断任务的消息,而不是新查询的响应。

625</Note>715</Note>

626 716 

627#### 示例 - 高级权限控制717<h4 id="example-advanced-permission-control">

718 示例 - 高级权限控制

719</h4>

628 720 

629```python theme={null}721```python theme={null}

630from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions722from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions


673asyncio.run(main())765asyncio.run(main())

674```766```

675 767 

676## 类型768<h2 id="types">

769 类型

770</h2>

677 771 

678<Note>772<Note>

679 **`@dataclass` vs `TypedDict`:** 此 SDK 使用两种类型。用 `@dataclass` 装饰的类(如 `ResultMessage`、`AgentDefinition`、`TextBlock`)在运行时是对象实例,支持属性访问:`msg.result`。用 `TypedDict` 定义的类(如 `ThinkingConfigEnabled`、`McpStdioServerConfig`、`SyncHookJSONOutput`)在运行时是**普通字典**,需要键访问:`config["budget_tokens"]`,而不是 `config.budget_tokens`。`ClassName(field=value)` 调用语法对两者都有效,但只有数据类产生具有属性的对象。773 **`@dataclass` vs `TypedDict`:** 此 SDK 使用两种类型。用 `@dataclass` 装饰的类(如 `ResultMessage`、`AgentDefinition`、`TextBlock`)在运行时是对象实例,支持属性访问:`msg.result`。用 `TypedDict` 定义的类(如 `ThinkingConfigEnabled`、`McpStdioServerConfig`、`SyncHookJSONOutput`)在运行时是**普通字典**,需要键访问:`config["budget_tokens"]`,而不是 `config.budget_tokens`。`ClassName(field=value)` 调用语法对两者都有效,但只有数据类产生具有属性的对象。

680</Note>774</Note>

681 775 

682### `SdkMcpTool`776<h3 id="sdkmcptool">

777 `SdkMcpTool`

778</h3>

683 779 

684使用 `@tool` 装饰器创建的 SDK MCP 工具的定义。780使用 `@tool` 装饰器创建的 SDK MCP 工具的定义。

685 781 


701| `handler` | `Callable[[T], Awaitable[dict[str, Any]]]` | 处理工具执行的异步函数 |797| `handler` | `Callable[[T], Awaitable[dict[str, Any]]]` | 处理工具执行的异步函数 |

702| `annotations` | `ToolAnnotations \| None` | 可选的 MCP 工具注解(例如 `readOnlyHint`、`destructiveHint`、`openWorldHint`)。来自 `mcp.types` |798| `annotations` | `ToolAnnotations \| None` | 可选的 MCP 工具注解(例如 `readOnlyHint`、`destructiveHint`、`openWorldHint`)。来自 `mcp.types` |

703 799 

704### `Transport`800<h3 id="transport">

801 `Transport`

802</h3>

705 803 

706自定义传输实现的抽象基类。使用此类通过自定义通道与 Claude 进程通信(例如,远程连接而不是本地子进程)。804自定义传输实现的抽象基类。使用此类通过自定义通道与 Claude 进程通信(例如,远程连接而不是本地子进程)。

707 805 


746 844 

747导入:`from claude_agent_sdk import Transport`845导入:`from claude_agent_sdk import Transport`

748 846 

749### `ClaudeAgentOptions`847<h3 id="claudeagentoptions">

848 `ClaudeAgentOptions`

849</h3>

750 850 

751Claude Code 查询的配置数据类。851Claude Code 查询的配置数据类。

752 852 


810| `max_budget_usd` | `float \| None` | `None` | 当客户端成本估计达到此 USD 值时停止查询。与 `total_cost_usd` 的相同估计进行比较;见 [跟踪成本和使用](/zh-CN/agent-sdk/cost-tracking) 了解准确性注意事项 |910| `max_budget_usd` | `float \| None` | `None` | 当客户端成本估计达到此 USD 值时停止查询。与 `total_cost_usd` 的相同估计进行比较;见 [跟踪成本和使用](/zh-CN/agent-sdk/cost-tracking) 了解准确性注意事项 |

811| `disallowed_tools` | `list[str]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 从 Claude 的上下文中移除工具。作用域规则如 `"Bash(rm *)"` 保持工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用。见 [权限](/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |911| `disallowed_tools` | `list[str]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 从 Claude 的上下文中移除工具。作用域规则如 `"Bash(rm *)"` 保持工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用。见 [权限](/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |

812| `enable_file_checkpointing` | `bool` | `False` | 启用文件更改跟踪以进行回滚。见 [文件检查点](/zh-CN/agent-sdk/file-checkpointing) |912| `enable_file_checkpointing` | `bool` | `False` | 启用文件更改跟踪以进行回滚。见 [文件检查点](/zh-CN/agent-sdk/file-checkpointing) |

813| `model` | `str \| None` | `None` | 要使用的 Claude 模型 |913| `model` | `str \| None` | `None` | Claude 模型别名或完整模型名称。见 [接受的值和特定于提供商的 ID](/zh-CN/model-config#available-models) |

814| `fallback_model` | `str \| None` | `None` | 主模型失败时使用的备用模型 |914| `fallback_model` | `str \| None` | `None` | 主模型失败时使用的备用模型 |

815| `betas` | `list[SdkBeta]` | `[]` | 要启用的测试功能。见 [`SdkBeta`](#sdkbeta) 了解可用选项 |915| `betas` | `list[SdkBeta]` | `[]` | 要启用的测试功能。见 [`SdkBeta`](#sdkbeta) 了解可用选项 |

816| `output_format` | `dict[str, Any] \| None` | `None` | 结构化响应的输出格式(例如 `{"type": "json_schema", "schema": {...}}`)。见 [结构化输出](/zh-CN/agent-sdk/structured-outputs) 了解详情 |916| `output_format` | `dict[str, Any] \| None` | `None` | 结构化响应的输出格式(例如 `{"type": "json_schema", "schema": {...}}`)。见 [结构化输出](/zh-CN/agent-sdk/structured-outputs) 了解详情 |


837| `skills` | `list[str] \| Literal["all"] \| None` | `None` | 会话可用的技能。传递 `"all"` 以启用每个发现的技能,或传递技能名称列表。设置时,SDK 会自动将 Skill 工具添加到 `allowed_tools`。如果你也传递 `tools`,在该列表中包含 `"Skill"`。见 [Skills](/zh-CN/agent-sdk/skills) |937| `skills` | `list[str] \| Literal["all"] \| None` | `None` | 会话可用的技能。传递 `"all"` 以启用每个发现的技能,或传递技能名称列表。设置时,SDK 会自动将 Skill 工具添加到 `allowed_tools`。如果你也传递 `tools`,在该列表中包含 `"Skill"`。见 [Skills](/zh-CN/agent-sdk/skills) |

838| `max_thinking_tokens` | `int \| None` | `None` | *已弃用* - 思考块的最大令牌数。改用 `thinking` |938| `max_thinking_tokens` | `int \| None` | `None` | *已弃用* - 思考块的最大令牌数。改用 `thinking` |

839| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | 控制扩展思考行为。优先于 `max_thinking_tokens` |939| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | 控制扩展思考行为。优先于 `max_thinking_tokens` |

840| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | 思考深度的努力级别 |940| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | 思考深度的努力级别。见 [调整努力级别](/zh-CN/model-config#adjust-effort-level) |

841| `session_store` | [`SessionStore`](/zh-CN/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | 将会话记录镜像到外部后端,以便任何主机都可以恢复它们。见 [将会话持久化到外部存储](/zh-CN/agent-sdk/session-storage) |941| `session_store` | [`SessionStore`](/zh-CN/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | 将会话记录镜像到外部后端,以便任何主机都可以恢复它们。见 [将会话持久化到外部存储](/zh-CN/agent-sdk/session-storage) |

842| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | 何时将镜像的记录条目刷新到 `session_store`。`"batched"` 每轮刷新一次或当缓冲区填满时;`"eager"` 在每帧后触发后台刷新。当 `session_store` 为 `None` 时忽略 |942| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | 何时将镜像的记录条目刷新到 `session_store`。`"batched"` 每轮刷新一次或当缓冲区填满时;`"eager"` 在每帧后触发后台刷新。当 `session_store` 为 `None` 时忽略 |

843 943 

844#### 处理缓慢或停滞的 API 响应944<h4 id="handle-slow-or-stalled-api-responses">

945 处理缓慢或停滞的 API 响应

946</h4>

845 947 

846CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过 `ClaudeAgentOptions.env` 传递它们:948CLI 子进程读取多个环境变量,这些变量控制 API 超时和停滞检测。通过 `ClaudeAgentOptions.env` 传递它们:

847 949 


858* `API_TIMEOUT_MS`:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 `600000`。适用于主循环和所有子代理。960* `API_TIMEOUT_MS`:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 `600000`。适用于主循环和所有子代理。

859* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。961* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。

860* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:使用 `run_in_background` 启动的子代理的停滞监视器。默认 `600000`。在每个流事件时重置;停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父代理。不适用于同步子代理。962* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:使用 `run_in_background` 启动的子代理的停滞监视器。默认 `600000`。在每个流事件时重置;停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父代理。不适用于同步子代理。

861* `CLAUDE_ENABLE_STREAM_WATCHDOG=1` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应体停止流式传输时中止请求。默认关闭。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止的请求通过正常重试路径进行。963* `CLAUDE_ENABLE_STREAM_WATCHDOG=1` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应体停止流式传输时中止请求。当 `CLAUDE_ENABLE_STREAM_WATCHDOG` 未设置时,默认值在直接 Anthropic API 上由服务器控制,在其他提供商上关闭。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止的请求通过正常重试路径进行。

862 964 

863### `OutputFormat`965<h3 id="outputformat">

966 `OutputFormat`

967</h3>

864 968 

865结构化输出验证的配置。将其作为 `dict` 传递给 `ClaudeAgentOptions` 上的 `output_format` 字段:969结构化输出验证的配置。将其作为 `dict` 传递给 `ClaudeAgentOptions` 上的 `output_format` 字段:

866 970 


877| `type` | 是 | 必须是 `"json_schema"` 用于 JSON Schema 验证 |981| `type` | 是 | 必须是 `"json_schema"` 用于 JSON Schema 验证 |

878| `schema` | 是 | 用于输出验证的 JSON Schema 定义 |982| `schema` | 是 | 用于输出验证的 JSON Schema 定义 |

879 983 

880### `SystemPromptPreset`984<h3 id="systempromptpreset">

985 `SystemPromptPreset`

986</h3>

881 987 

882使用 Claude Code 的预设系统提示和可选添加的配置。988使用 Claude Code 的预设系统提示和可选添加的配置。

883 989 


896| `append` | 否 | 要追加到预设系统提示的其他说明 |1002| `append` | 否 | 要追加到预设系统提示的其他说明 |

897| `exclude_dynamic_sections` | 否 | 将每个会话的上下文(如工作目录、git 状态和内存路径)从系统提示移到第一条用户消息。改进跨用户和机器的提示缓存重用。见 [修改系统提示](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |1003| `exclude_dynamic_sections` | 否 | 将每个会话的上下文(如工作目录、git 状态和内存路径)从系统提示移到第一条用户消息。改进跨用户和机器的提示缓存重用。见 [修改系统提示](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

898 1004 

899### `SettingSource`1005<h3 id="settingsource">

1006 `SettingSource`

1007</h3>

900 1008 

901控制 SDK 从哪些基于文件系统的配置源加载设置。1009控制 SDK 从哪些基于文件系统的配置源加载设置。

902 1010 


910| `"project"` | 共享项目设置(版本控制) | `.claude/settings.json` |1018| `"project"` | 共享项目设置(版本控制) | `.claude/settings.json` |

911| `"local"` | 本地项目设置(gitignored) | `.claude/settings.local.json` |1019| `"local"` | 本地项目设置(gitignored) | `.claude/settings.local.json` |

912 1020 

913#### 默认行为1021<h4 id="default-behavior">

1022 默认行为

1023</h4>

914 1024 

915当 `setting_sources` 被省略或为 `None` 时,`query()` 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。无论如何都会加载托管策略设置。见 [settingSources 不控制什么](/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control) 了解无论此选项如何都会读取的输入,以及如何禁用它们。1025当 `setting_sources` 被省略或为 `None` 时,`query()` 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。无论如何都会加载托管策略设置。见 [settingSources 不控制什么](/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control) 了解无论此选项如何都会读取的输入,以及如何禁用它们。

916 1026 

917#### 为什么使用 setting\_sources1027<h4 id="why-use-setting_sources">

1028 为什么使用 setting\_sources

1029</h4>

918 1030 

919**禁用文件系统设置:**1031**禁用文件系统设置:**

920 1032 


1011 print(message)1123 print(message)

1012```1124```

1013 1125 

1014#### 设置优先级1126<h4 id="settings-precedence">

1127 设置优先级

1128</h4>

1015 1129 

1016加载多个源时,设置按此优先级合并(从高到低):1130加载多个源时,设置按此优先级合并(从高到低):

1017 1131 


1021 1135 

1022编程选项(如 `agents` 和 `allowed_tools`)覆盖用户、项目和本地文件系统设置。托管策略设置优先于编程选项。1136编程选项(如 `agents` 和 `allowed_tools`)覆盖用户、项目和本地文件系统设置。托管策略设置优先于编程选项。

1023 1137 

1024### `AgentDefinition`1138<h3 id="agentdefinition">

1139 `AgentDefinition`

1140</h3>

1025 1141 

1026以编程方式定义的子代理的配置。1142以编程方式定义的子代理的配置。

1027 1143 


1044```1160```

1045 1161 

1046| 字段 | 必需 | 描述 |1162| 字段 | 必需 | 描述 |

1047| :---------------- | :- | :----------------------------------------------------------------------------- |1163| :---------------- | :- | :---------------------------------------------------------------------------------------------------------- |

1048| `description` | 是 | 何时使用此代理的自然语言描述 |1164| `description` | 是 | 何时使用此代理的自然语言描述 |

1049| `prompt` | 是 | 代理的系统提示 |1165| `prompt` | 是 | 代理的系统提示 |

1050| `tools` | 否 | 允许的工具名称数组。如果省略,继承所有工具 |1166| `tools` | 否 | 允许的工具名称数组。如果省略,继承所有工具 |

1051| `disallowedTools` | 否 | 要从代理的工具集中移除的工具名称数组 |1167| `disallowedTools` | 否 | 要从代理的工具集中移除的工具名称数组。也接受 MCP 服务器级别的模式:`mcp__server` 或 `mcp__server__*` 移除该服务器的每个工具,`mcp__*` 移除任何服务器的每个 MCP 工具 |

1052| `model` | 否 | 此代理的模型覆盖。接受别名如 `"sonnet"`、`"opus"`、`"haiku"` 或 `"inherit"`,或完整模型 ID。如果省略,使用主模型 |1168| `model` | 否 | 此代理的模型覆盖。接受别名如 `"sonnet"`、`"opus"`、`"haiku"` 或 `"inherit"`,或完整模型 ID。如果省略,使用主模型 |

1053| `skills` | 否 | 此代理可用的技能名称列表 |1169| `skills` | 否 | 此代理可用的技能名称列表 |

1054| `memory` | 否 | 此代理的内存源:`"user"`、`"project"` 或 `"local"` |1170| `memory` | 否 | 此代理的内存源:`"user"`、`"project"` 或 `"local"` |


1063 `AgentDefinition` 字段名称使用 camelCase,如 `disallowedTools`、`permissionMode` 和 `maxTurns`。这些名称直接映射到与 TypeScript SDK 共享的线路格式。这与 `ClaudeAgentOptions` 不同,后者对等效的顶级字段(如 `disallowed_tools` 和 `permission_mode`)使用 Python snake\_case。因为 `AgentDefinition` 是数据类,传递 snake\_case 关键字在构造时会引发 `TypeError`。1179 `AgentDefinition` 字段名称使用 camelCase,如 `disallowedTools`、`permissionMode` 和 `maxTurns`。这些名称直接映射到与 TypeScript SDK 共享的线路格式。这与 `ClaudeAgentOptions` 不同,后者对等效的顶级字段(如 `disallowed_tools` 和 `permission_mode`)使用 Python snake\_case。因为 `AgentDefinition` 是数据类,传递 snake\_case 关键字在构造时会引发 `TypeError`。

1064</Note>1180</Note>

1065 1181 

1066### `PermissionMode`1182<h3 id="permissionmode">

1183 `PermissionMode`

1184</h3>

1067 1185 

1068用于控制工具执行的权限模式。1186用于控制工具执行的权限模式。

1069 1187 


1071PermissionMode = Literal[1189PermissionMode = Literal[

1072 "default", # Standard permission behavior1190 "default", # Standard permission behavior

1073 "acceptEdits", # Auto-accept file edits1191 "acceptEdits", # Auto-accept file edits

1074 "plan", # Planning mode - read-only tools only1192 "plan", # Planning mode - explore without editing

1075 "dontAsk", # Deny anything not pre-approved instead of prompting1193 "dontAsk", # Deny anything not pre-approved instead of prompting

1076 "bypassPermissions", # Bypass all permission checks (use with caution)1194 "bypassPermissions", # Bypass permission checks; explicit ask rules still prompt (use with caution)

1077]1195]

1078```1196```

1079 1197 

1080### `EffortLevel`1198<h3 id="effortlevel">

1199 `EffortLevel`

1200</h3>

1081 1201 

1082用于指导思考深度的努力级别。1202用于指导思考深度的努力级别。

1083 1203 


1086 "low", # Minimal thinking, fastest responses1206 "low", # Minimal thinking, fastest responses

1087 "medium", # Moderate thinking1207 "medium", # Moderate thinking

1088 "high", # Deep reasoning1208 "high", # Deep reasoning

1089 "xhigh", # Extended reasoning (Opus 4.7 only; falls back to "high" on other models)1209 "xhigh", # Extended reasoning (Opus 4.8 and Opus 4.7; falls back to "high" on other models)

1090 "max", # Maximum effort1210 "max", # Maximum effort

1091]1211]

1092```1212```

1093 1213 

1094### `CanUseTool`1214<h3 id="canusetool">

1215 `CanUseTool`

1216</h3>

1095 1217 

1096工具权限回调函数的类型别名。1218工具权限回调函数的类型别名。

1097 1219 


1109 1231 

1110返回 `PermissionResult`(`PermissionResultAllow` 或 `PermissionResultDeny`)。1232返回 `PermissionResult`(`PermissionResultAllow` 或 `PermissionResultDeny`)。

1111 1233 

1112### `ToolPermissionContext`1234<h3 id="toolpermissioncontext">

1235 `ToolPermissionContext`

1236</h3>

1113 1237 

1114传递给工具权限回调的上下文信息。1238传递给工具权限回调的上下文信息。

1115 1239 


1135| `display_name` | `str \| None` | 工具操作的短名词短语,如 `Read file`,适合按钮标签 |1259| `display_name` | `str \| None` | 工具操作的短名词短语,如 `Read file`,适合按钮标签 |

1136| `description` | `str \| None` | 权限 UI 的人类可读副标题 |1260| `description` | `str \| None` | 权限 UI 的人类可读副标题 |

1137 1261 

1138### `PermissionResult`1262<h3 id="permissionresult">

1263 `PermissionResult`

1264</h3>

1139 1265 

1140权限回调结果的联合类型。1266权限回调结果的联合类型。

1141 1267 


1143PermissionResult = PermissionResultAllow | PermissionResultDeny1269PermissionResult = PermissionResultAllow | PermissionResultDeny

1144```1270```

1145 1271 

1146### `PermissionResultAllow`1272<h3 id="permissionresultallow">

1273 `PermissionResultAllow`

1274</h3>

1147 1275 

1148指示应允许工具调用的结果。1276指示应允许工具调用的结果。

1149 1277 


1161| `updated_input` | `dict[str, Any] \| None` | `None` | 要使用的修改后的输入而不是原始输入 |1289| `updated_input` | `dict[str, Any] \| None` | `None` | 要使用的修改后的输入而不是原始输入 |

1162| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | 要应用的权限更新 |1290| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | 要应用的权限更新 |

1163 1291 

1164### `PermissionResultDeny`1292<h3 id="permissionresultdeny">

1293 `PermissionResultDeny`

1294</h3>

1165 1295 

1166指示应拒绝工具调用的结果。1296指示应拒绝工具调用的结果。

1167 1297 


1179| `message` | `str` | `""` | 解释为什么拒绝工具的消息 |1309| `message` | `str` | `""` | 解释为什么拒绝工具的消息 |

1180| `interrupt` | `bool` | `False` | 是否中断当前执行 |1310| `interrupt` | `bool` | `False` | 是否中断当前执行 |

1181 1311 

1182### `PermissionUpdate`1312<h3 id="permissionupdate">

1313 `PermissionUpdate`

1314</h3>

1183 1315 

1184用于以编程方式更新权限的配置。1316用于以编程方式更新权限的配置。

1185 1317 


1212| `directories` | `list[str] \| None` | 用于添加/移除目录操作的目录 |1344| `directories` | `list[str] \| None` | 用于添加/移除目录操作的目录 |

1213| `destination` | `Literal[...] \| None` | 应用权限更新的位置 |1345| `destination` | `Literal[...] \| None` | 应用权限更新的位置 |

1214 1346 

1215### `PermissionRuleValue`1347<h3 id="permissionrulevalue">

1348 `PermissionRuleValue`

1349</h3>

1216 1350 

1217要在权限更新中添加、替换或移除的规则。1351要在权限更新中添加、替换或移除的规则。

1218 1352 


1223 rule_content: str | None = None1357 rule_content: str | None = None

1224```1358```

1225 1359 

1226### `ToolsPreset`1360<h3 id="toolspreset">

1361 `ToolsPreset`

1362</h3>

1227 1363 

1228使用 Claude Code 的默认工具集的预设工具配置。1364使用 Claude Code 的默认工具集的预设工具配置。

1229 1365 


1233 preset: Literal["claude_code"]1369 preset: Literal["claude_code"]

1234```1370```

1235 1371 

1236### `ThinkingConfig`1372<h3 id="thinkingconfig">

1373 `ThinkingConfig`

1374</h3>

1237 1375 

1238控制扩展思考行为。三种配置的联合:1376控制扩展思考行为。三种配置的联合:

1239 1377 


1281# config.budget_tokens would raise AttributeError1419# config.budget_tokens would raise AttributeError

1282```1420```

1283 1421 

1284### `SdkBeta`1422<h3 id="sdkbeta">

1423 `SdkBeta`

1424</h3>

1285 1425 

1286SDK 测试功能的字面类型。1426SDK 测试功能的字面类型。

1287 1427 


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

1293 1433 

1294<Warning>1434<Warning>

1295 `context-1m-2025-08-07` 测试版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此标头无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 [Claude Sonnet 4.6、Claude Opus 4.6 或 Claude Opus 4.7](https://platform.claude.com/docs/en/about-claude/models/overview),它们以标准定价包括 1M 上下文,无需测试版标头。1435 `context-1m-2025-08-07` 测试版自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此标头无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 [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 上下文,无需测试版标头。

1296</Warning>1436</Warning>

1297 1437 

1298### `McpSdkServerConfig`1438<h3 id="mcpsdkserverconfig">

1439 `McpSdkServerConfig`

1440</h3>

1299 1441 

1300使用 `create_sdk_mcp_server()` 创建的 SDK MCP 服务器的配置。1442使用 `create_sdk_mcp_server()` 创建的 SDK MCP 服务器的配置。

1301 1443 


1306 instance: Any # MCP Server instance1448 instance: Any # MCP Server instance

1307```1449```

1308 1450 

1309### `McpServerConfig`1451<h3 id="mcpserverconfig">

1452 `McpServerConfig`

1453</h3>

1310 1454 

1311MCP 服务器配置的联合类型。1455MCP 服务器配置的联合类型。

1312 1456 


1316)1460)

1317```1461```

1318 1462 

1319#### `McpStdioServerConfig`1463<h4 id="mcpstdioserverconfig">

1464 `McpStdioServerConfig`

1465</h4>

1320 1466 

1321```python theme={null}1467```python theme={null}

1322class McpStdioServerConfig(TypedDict):1468class McpStdioServerConfig(TypedDict):


1326 env: NotRequired[dict[str, str]]1472 env: NotRequired[dict[str, str]]

1327```1473```

1328 1474 

1329#### `McpSSEServerConfig`1475<h4 id="mcpsseserverconfig">

1476 `McpSSEServerConfig`

1477</h4>

1330 1478 

1331```python theme={null}1479```python theme={null}

1332class McpSSEServerConfig(TypedDict):1480class McpSSEServerConfig(TypedDict):


1335 headers: NotRequired[dict[str, str]]1483 headers: NotRequired[dict[str, str]]

1336```1484```

1337 1485 

1338#### `McpHttpServerConfig`1486<h4 id="mcphttpserverconfig">

1487 `McpHttpServerConfig`

1488</h4>

1339 1489 

1340```python theme={null}1490```python theme={null}

1341class McpHttpServerConfig(TypedDict):1491class McpHttpServerConfig(TypedDict):


1344 headers: NotRequired[dict[str, str]]1494 headers: NotRequired[dict[str, str]]

1345```1495```

1346 1496 

1347### `McpServerStatusConfig`1497<h3 id="mcpserverstatusconfig">

1498 `McpServerStatusConfig`

1499</h3>

1348 1500 

1349由 [`get_mcp_status()`](#methods) 报告的 MCP 服务器的配置。这是所有 [`McpServerConfig`](#mcpserverconfig) 传输变体加上用于通过 claude.ai 代理的服务器的仅输出 `claudeai-proxy` 变体的联合。1501由 [`get_mcp_status()`](#methods) 报告的 MCP 服务器的配置。这是所有 [`McpServerConfig`](#mcpserverconfig) 传输变体加上用于通过 claude.ai 代理的服务器的仅输出 `claudeai-proxy` 变体的联合。

1350 1502 


1360 1512 

1361`McpSdkServerConfigStatus` 是 [`McpSdkServerConfig`](#mcpsdkserverconfig) 的可序列化形式,仅包含 `type`(`"sdk"`)和 `name`(`str`)字段;进程内 `instance` 被省略。`McpClaudeAIProxyServerConfig` 具有 `type`(`"claudeai-proxy"`)、`url`(`str`)和 `id`(`str`)字段。1513`McpSdkServerConfigStatus` 是 [`McpSdkServerConfig`](#mcpsdkserverconfig) 的可序列化形式,仅包含 `type`(`"sdk"`)和 `name`(`str`)字段;进程内 `instance` 被省略。`McpClaudeAIProxyServerConfig` 具有 `type`(`"claudeai-proxy"`)、`url`(`str`)和 `id`(`str`)字段。

1362 1514 

1363### `McpStatusResponse`1515<h3 id="mcpstatusresponse">

1516 `McpStatusResponse`

1517</h3>

1364 1518 

1365来自 [`ClaudeSDKClient.get_mcp_status()`](#methods) 的响应。在 `mcpServers` 键下包装服务器状态列表。1519来自 [`ClaudeSDKClient.get_mcp_status()`](#methods) 的响应。在 `mcpServers` 键下包装服务器状态列表。

1366 1520 


1369 mcpServers: list[McpServerStatus]1523 mcpServers: list[McpServerStatus]

1370```1524```

1371 1525 

1372### `McpServerStatus`1526<h3 id="mcpserverstatus">

1527 `McpServerStatus`

1528</h3>

1373 1529 

1374连接的 MCP 服务器的状态,包含在 [`McpStatusResponse`](#mcpstatusresponse) 中。1530连接的 MCP 服务器的状态,包含在 [`McpStatusResponse`](#mcpstatusresponse) 中。

1375 1531 


1394| `scope` | `str`(可选) | 配置范围 |1550| `scope` | `str`(可选) | 配置范围 |

1395| `tools` | `list`(可选) | 此服务器提供的工具,每个都有 `name`、`description` 和 `annotations` 字段 |1551| `tools` | `list`(可选) | 此服务器提供的工具,每个都有 `name`、`description` 和 `annotations` 字段 |

1396 1552 

1397### `SdkPluginConfig`1553<h3 id="sdkpluginconfig">

1554 `SdkPluginConfig`

1555</h3>

1398 1556 

1399SDK 中加载插件的配置。1557SDK 中加载插件的配置。

1400 1558 


1420 1578 

1421有关创建和使用插件的完整信息,见 [Plugins](/zh-CN/agent-sdk/plugins)。1579有关创建和使用插件的完整信息,见 [Plugins](/zh-CN/agent-sdk/plugins)。

1422 1580 

1423## 消息类型1581<h2 id="message-types">

1582 消息类型

1583</h2>

1424 1584 

1425### `Message`1585<h3 id="message">

1586 `Message`

1587</h3>

1426 1588 

1427所有可能消息的联合类型。1589所有可能消息的联合类型。

1428 1590 


1437)1599)

1438```1600```

1439 1601 

1440### `UserMessage`1602<h3 id="usermessage">

1603 `UserMessage`

1604</h3>

1441 1605 

1442用户输入消息。1606用户输入消息。

1443 1607 


1457| `parent_tool_use_id` | `str \| None` | 如果此消息是工具结果响应,则为工具使用 ID |1621| `parent_tool_use_id` | `str \| None` | 如果此消息是工具结果响应,则为工具使用 ID |

1458| `tool_use_result` | `dict[str, Any] \| None` | 工具结果数据(如果适用) |1622| `tool_use_result` | `dict[str, Any] \| None` | 工具结果数据(如果适用) |

1459 1623 

1460### `AssistantMessage`1624<h3 id="assistantmessage">

1625 `AssistantMessage`

1626</h3>

1461 1627 

1462带有内容块的助手响应消息。1628带有内容块的助手响应消息。

1463 1629 


1481| `usage` | `dict[str, Any] \| None` | 每条消息的令牌使用情况(与 [`ResultMessage.usage`](#resultmessage) 相同的键) |1647| `usage` | `dict[str, Any] \| None` | 每条消息的令牌使用情况(与 [`ResultMessage.usage`](#resultmessage) 相同的键) |

1482| `message_id` | `str \| None` | API 消息 ID。来自一个轮次的多条消息共享相同的 ID |1648| `message_id` | `str \| None` | API 消息 ID。来自一个轮次的多条消息共享相同的 ID |

1483 1649 

1484### `AssistantMessageError`1650<h3 id="assistantmessageerror">

1651 `AssistantMessageError`

1652</h3>

1485 1653 

1486助手消息的可能错误类型。1654助手消息的可能错误类型。

1487 1655 


1497]1665]

1498```1666```

1499 1667 

1500### `SystemMessage`1668<h3 id="systemmessage">

1669 `SystemMessage`

1670</h3>

1501 1671 

1502带有元数据的系统消息。1672带有元数据的系统消息。

1503 1673 


1508 data: dict[str, Any]1678 data: dict[str, Any]

1509```1679```

1510 1680 

1511### `ResultMessage`1681<h3 id="resultmessage">

1682 `ResultMessage`

1683</h3>

1512 1684 

1513带有成本和使用信息的最终结果消息。1685带有成本和使用信息的最终结果消息。

1514 1686 


1534 uuid: str | None = None1706 uuid: str | None = None

1535```1707```

1536 1708 

1709`subtype` 字段确定填充哪些其他字段。它是 `"success"`、`"error_during_execution"`、`"error_max_turns"`、`"error_max_budget_usd"` 或 `"error_max_structured_output_retries"` 之一。Python 数据类将所有变体展平为一种形状,因此不适用于返回的子类型的字段为 `None`。

1710 

1711当对话以错误结束时,多个字段会携带诊断详情:

1712 

1713* `is_error`:当对话以错误状态结束时为 `True`。在 `error_*` 子类型上始终为 `True`。在 `subtype="success"` 上,当最终模型请求失败时为 `True`,这意味着代理循环完成但最后一个 API 调用返回了错误。

1714* `api_error_status`:终止 API 错误的 HTTP 状态代码。当轮次结束时没有错误时为 `None`。仅在 `subtype="success"` 上填充。

1715* `result`:在 `subtype="success"` 上为最终助手消息的文本,或在 `error_*` 子类型上为 `None`。当 `subtype="success"` 且 `is_error=True` 时,如果可用,此字段保存 API 错误字符串,但可能为空,因此请检查 `api_error_status` 和前面的 `AssistantMessage` 内容以获取详情。

1716* `errors`:循环级别的错误字符串,例如最大轮次消息。仅在 `error_*` 子类型上填充。

1717 

1537`usage` 字典在存在时包含以下键:1718`usage` 字典在存在时包含以下键:

1538 1719 

1539| 键 | 类型 | 描述 |1720| 键 | 类型 | 描述 |


1556| `contextWindow` | `int` | 此模型的上下文窗口大小。 |1737| `contextWindow` | `int` | 此模型的上下文窗口大小。 |

1557| `maxOutputTokens` | `int` | 此模型的最大输出令牌限制。 |1738| `maxOutputTokens` | `int` | 此模型的最大输出令牌限制。 |

1558 1739 

1559### `StreamEvent`1740<h3 id="streamevent">

1741 `StreamEvent`

1742</h3>

1560 1743 

1561流式事件,用于流式传输期间的部分消息更新。仅在 `ClaudeAgentOptions` 中 `include_partial_messages=True` 时接收。通过 `from claude_agent_sdk.types import StreamEvent` 导入。1744流式事件,用于流式传输期间的部分消息更新。仅在 `ClaudeAgentOptions` 中 `include_partial_messages=True` 时接收。通过 `from claude_agent_sdk.types import StreamEvent` 导入。

1562 1745 


1576| `event` | `dict[str, Any]` | 原始 Claude API 流事件数据 |1759| `event` | `dict[str, Any]` | 原始 Claude API 流事件数据 |

1577| `parent_tool_use_id` | `str \| None` | 如果此事件来自子代理,则为父工具使用 ID |1760| `parent_tool_use_id` | `str \| None` | 如果此事件来自子代理,则为父工具使用 ID |

1578 1761 

1579### `RateLimitEvent`1762<h3 id="ratelimitevent">

1763 `RateLimitEvent`

1764</h3>

1580 1765 

1581当速率限制状态更改时发出(例如,从 `"allowed"` 到 `"allowed_warning"`)。使用此来在用户达到硬限制之前警告他们,或在状态为 `"rejected"` 时退避。1766当速率限制状态更改时发出(例如,从 `"allowed"` 到 `"allowed_warning"`)。使用此来在用户达到硬限制之前警告他们,或在状态为 `"rejected"` 时退避。

1582 1767 


1594| `uuid` | `str` | 唯一事件标识符 |1779| `uuid` | `str` | 唯一事件标识符 |

1595| `session_id` | `str` | 会话标识符 |1780| `session_id` | `str` | 会话标识符 |

1596 1781 

1597### `RateLimitInfo`1782<h3 id="ratelimitinfo">

1783 `RateLimitInfo`

1784</h3>

1598 1785 

1599由 [`RateLimitEvent`](#ratelimitevent) 携带的速率限制状态。1786由 [`RateLimitEvent`](#ratelimitevent) 携带的速率限制状态。

1600 1787 


1628| `overage_disabled_reason` | `str \| None` | 为什么超额不可用,如果状态为 `"rejected"` |1815| `overage_disabled_reason` | `str \| None` | 为什么超额不可用,如果状态为 `"rejected"` |

1629| `raw` | `dict[str, Any]` | 来自 CLI 的完整原始字典,包括上面未建模的字段 |1816| `raw` | `dict[str, Any]` | 来自 CLI 的完整原始字典,包括上面未建模的字段 |

1630 1817 

1631### `TaskStartedMessage`1818<h3 id="taskstartedmessage">

1819 `TaskStartedMessage`

1820</h3>

1632 1821 

1633当后台任务启动时发出。后台任务是在主轮次之外跟踪的任何内容:后台 Bash 命令、[Monitor](#monitor) 监视、通过 Agent 工具生成的子代理或远程代理。`task_type` 字段告诉你是哪一个。此命名与 `Task` 到 `Agent` 工具重命名无关。1822当后台任务启动时发出。后台任务是在主轮次之外跟踪的任何内容:后台 Bash 命令、[Monitor](#monitor) 监视、通过 Agent 工具生成的子代理或远程代理。`task_type` 字段告诉你是哪一个。此命名与 `Task` 到 `Agent` 工具重命名无关。

1634 1823 


1652| `tool_use_id` | `str \| None` | 关联的工具使用 ID |1841| `tool_use_id` | `str \| None` | 关联的工具使用 ID |

1653| `task_type` | `str \| None` | 哪种后台任务:`"local_bash"` 用于后台 Bash 和 Monitor 监视,`"local_agent"` 或 `"remote_agent"` |1842| `task_type` | `str \| None` | 哪种后台任务:`"local_bash"` 用于后台 Bash 和 Monitor 监视,`"local_agent"` 或 `"remote_agent"` |

1654 1843 

1655### `TaskUsage`1844<h3 id="taskusage">

1845 `TaskUsage`

1846</h3>

1656 1847 

1657后台任务的令牌和计时数据。1848后台任务的令牌和计时数据。

1658 1849 


1663 duration_ms: int1854 duration_ms: int

1664```1855```

1665 1856 

1666### `TaskProgressMessage`1857<h3 id="taskprogressmessage">

1858 `TaskProgressMessage`

1859</h3>

1667 1860 

1668定期为运行的后台任务发出进度更新。1861定期为运行的后台任务发出进度更新。

1669 1862 


1689| `tool_use_id` | `str \| None` | 关联的工具使用 ID |1882| `tool_use_id` | `str \| None` | 关联的工具使用 ID |

1690| `last_tool_name` | `str \| None` | 任务使用的最后一个工具的名称 |1883| `last_tool_name` | `str \| None` | 任务使用的最后一个工具的名称 |

1691 1884 

1692### `TaskNotificationMessage`1885<h3 id="tasknotificationmessage">

1886 `TaskNotificationMessage`

1887</h3>

1693 1888 

1694当后台任务完成、失败或停止时发出。后台任务包括 `run_in_background` Bash 命令、Monitor 监视和后台子代理。1889当后台任务完成、失败或停止时发出。后台任务包括 `run_in_background` Bash 命令、Monitor 监视和后台子代理。

1695 1890 


1717| `tool_use_id` | `str \| None` | 关联的工具使用 ID |1912| `tool_use_id` | `str \| None` | 关联的工具使用 ID |

1718| `usage` | `TaskUsage \| None` | 任务的最终令牌使用情况 |1913| `usage` | `TaskUsage \| None` | 任务的最终令牌使用情况 |

1719 1914 

1720## 内容块类型1915<h2 id="content-block-types">

1916 内容块类型

1917</h2>

1721 1918 

1722### `ContentBlock`1919<h3 id="contentblock">

1920 `ContentBlock`

1921</h3>

1723 1922 

1724所有内容块的联合类型。1923所有内容块的联合类型。

1725 1924 


1727ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock1926ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock

1728```1927```

1729 1928 

1730### `TextBlock`1929<h3 id="textblock">

1930 `TextBlock`

1931</h3>

1731 1932 

1732文本内容块。1933文本内容块。

1733 1934 


1737 text: str1938 text: str

1738```1939```

1739 1940 

1740### `ThinkingBlock`1941<h3 id="thinkingblock">

1942 `ThinkingBlock`

1943</h3>

1741 1944 

1742思考内容块(用于具有思考能力的模型)。1945思考内容块(用于具有思考能力的模型)。

1743 1946 


1748 signature: str1951 signature: str

1749```1952```

1750 1953 

1751### `ToolUseBlock`1954<h3 id="tooluseblock">

1955 `ToolUseBlock`

1956</h3>

1752 1957 

1753工具使用请求块。1958工具使用请求块。

1754 1959 


1760 input: dict[str, Any]1965 input: dict[str, Any]

1761```1966```

1762 1967 

1763### `ToolResultBlock`1968<h3 id="toolresultblock">

1969 `ToolResultBlock`

1970</h3>

1764 1971 

1765工具执行结果块。1972工具执行结果块。

1766 1973 


1772 is_error: bool | None = None1979 is_error: bool | None = None

1773```1980```

1774 1981 

1775## 错误类型1982<h2 id="error-types">

1983 错误类型

1984</h2>

1776 1985 

1777### `ClaudeSDKError`1986<h3 id="claudesdkerror">

1987 `ClaudeSDKError`

1988</h3>

1778 1989 

1779所有 SDK 错误的基础异常类。1990所有 SDK 错误的基础异常类。

1780 1991 


1783 """Base error for Claude SDK."""1994 """Base error for Claude SDK."""

1784```1995```

1785 1996 

1786### `CLINotFoundError`1997<h3 id="clinotfounderror">

1998 `CLINotFoundError`

1999</h3>

1787 2000 

1788当 Claude Code CLI 未安装或找不到时引发。2001当 Claude Code CLI 未安装或找不到时引发。

1789 2002 


1799 """2012 """

1800```2013```

1801 2014 

1802### `CLIConnectionError`2015<h3 id="cliconnectionerror">

2016 `CLIConnectionError`

2017</h3>

1803 2018 

1804当连接到 Claude Code 失败时引发。2019当连接到 Claude Code 失败时引发。

1805 2020 


1808 """Failed to connect to Claude Code."""2023 """Failed to connect to Claude Code."""

1809```2024```

1810 2025 

1811### `ProcessError`2026<h3 id="processerror">

2027 `ProcessError`

2028</h3>

1812 2029 

1813当 Claude Code 进程失败时引发。2030当 Claude Code 进程失败时引发。

1814 2031 


1821 self.stderr = stderr2038 self.stderr = stderr

1822```2039```

1823 2040 

1824### `CLIJSONDecodeError`2041<h3 id="clijsondecodeerror">

2042 `CLIJSONDecodeError`

2043</h3>

1825 2044 

1826当 JSON 解析失败时引发。2045当 JSON 解析失败时引发。

1827 2046 


1837 self.original_error = original_error2056 self.original_error = original_error

1838```2057```

1839 2058 

1840## Hook 类型2059<h2 id="hook-types">

2060 Hook 类型

2061</h2>

1841 2062 

1842有关使用 hooks 的综合指南,包括示例和常见模式,见 [Hooks 指南](/zh-CN/agent-sdk/hooks)。2063有关使用 hooks 的综合指南,包括示例和常见模式,见 [Hooks 指南](/zh-CN/agent-sdk/hooks)。

1843 2064 

1844### `HookEvent`2065<h3 id="hookevent">

2066 `HookEvent`

2067</h3>

1845 2068 

1846支持的 hook 事件类型。2069支持的 hook 事件类型。

1847 2070 


1864 TypeScript SDK 支持 Python 中尚未提供的其他 hook 事件:`SessionStart`、`SessionEnd`、`Setup`、`TeammateIdle`、`TaskCompleted`、`ConfigChange`、`WorktreeCreate`、`WorktreeRemove`、`PostToolBatch` 和 `MessageDisplay`。2087 TypeScript SDK 支持 Python 中尚未提供的其他 hook 事件:`SessionStart`、`SessionEnd`、`Setup`、`TeammateIdle`、`TaskCompleted`、`ConfigChange`、`WorktreeCreate`、`WorktreeRemove`、`PostToolBatch` 和 `MessageDisplay`。

1865</Note>2088</Note>

1866 2089 

1867### `HookCallback`2090<h3 id="hookcallback">

2091 `HookCallback`

2092</h3>

1868 2093 

1869hook 回调函数的类型定义。2094hook 回调函数的类型定义。

1870 2095 


1884* `systemMessage`:显示给用户的警告消息2109* `systemMessage`:显示给用户的警告消息

1885* `hookSpecificOutput`:hook 特定的输出数据2110* `hookSpecificOutput`:hook 特定的输出数据

1886 2111 

1887### `HookContext`2112<h3 id="hookcontext">

2113 `HookContext`

2114</h3>

1888 2115 

1889传递给 hook 回调的上下文信息。2116传递给 hook 回调的上下文信息。

1890 2117 


1893 signal: Any | None # Future: abort signal support2120 signal: Any | None # Future: abort signal support

1894```2121```

1895 2122 

1896### `HookMatcher`2123<h3 id="hookmatcher">

2124 `HookMatcher`

2125</h3>

1897 2126 

1898用于将 hooks 匹配到特定事件或工具的配置。2127用于将 hooks 匹配到特定事件或工具的配置。

1899 2128 


1911 )2140 )

1912```2141```

1913 2142 

1914### `HookInput`2143<h3 id="hookinput">

2144 `HookInput`

2145</h3>

1915 2146 

1916所有 hook 输入类型的联合类型。实际类型取决于 `hook_event_name` 字段。2147所有 hook 输入类型的联合类型。实际类型取决于 `hook_event_name` 字段。

1917 2148 


1930)2161)

1931```2162```

1932 2163 

1933### `BaseHookInput`2164<h3 id="basehookinput">

2165 `BaseHookInput`

2166</h3>

1934 2167 

1935所有 hook 输入类型中存在的基础字段。2168所有 hook 输入类型中存在的基础字段。

1936 2169 


1949| `cwd` | `str` | 当前工作目录 |2182| `cwd` | `str` | 当前工作目录 |

1950| `permission_mode` | `str`(可选) | 当前权限模式 |2183| `permission_mode` | `str`(可选) | 当前权限模式 |

1951 2184 

1952### `PreToolUseHookInput`2185<h3 id="pretoolusehookinput">

2186 `PreToolUseHookInput`

2187</h3>

1953 2188 

1954`PreToolUse` hook 事件的输入数据。2189`PreToolUse` hook 事件的输入数据。

1955 2190 


1972| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |2207| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |

1973| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |2208| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |

1974 2209 

1975### `PostToolUseHookInput`2210<h3 id="posttoolusehookinput">

2211 `PostToolUseHookInput`

2212</h3>

1976 2213 

1977`PostToolUse` hook 事件的输入数据。2214`PostToolUse` hook 事件的输入数据。

1978 2215 


1997| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |2234| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |

1998| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |2235| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |

1999 2236 

2000### `PostToolUseFailureHookInput`2237<h3 id="posttoolusefailurehookinput">

2238 `PostToolUseFailureHookInput`

2239</h3>

2001 2240 

2002`PostToolUseFailure` hook 事件的输入数据。当工具执行失败时调用。2241`PostToolUseFailure` hook 事件的输入数据。当工具执行失败时调用。

2003 2242 


2024| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |2263| `agent_id` | `str`(可选) | 子代理标识符,当 hook 在子代理内触发时存在 |

2025| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |2264| `agent_type` | `str`(可选) | 子代理类型,当 hook 在子代理内触发时存在 |

2026 2265 

2027### `UserPromptSubmitHookInput`2266<h3 id="userpromptsubmithookinput">

2267 `UserPromptSubmitHookInput`

2268</h3>

2028 2269 

2029`UserPromptSubmit` hook 事件的输入数据。2270`UserPromptSubmit` hook 事件的输入数据。

2030 2271 


2039| `hook_event_name` | `Literal["UserPromptSubmit"]` | 始终为 "UserPromptSubmit" |2280| `hook_event_name` | `Literal["UserPromptSubmit"]` | 始终为 "UserPromptSubmit" |

2040| `prompt` | `str` | 用户提交的提示 |2281| `prompt` | `str` | 用户提交的提示 |

2041 2282 

2042### `StopHookInput`2283<h3 id="stophookinput">

2284 `StopHookInput`

2285</h3>

2043 2286 

2044`Stop` hook 事件的输入数据。2287`Stop` hook 事件的输入数据。

2045 2288 


2054| `hook_event_name` | `Literal["Stop"]` | 始终为 "Stop" |2297| `hook_event_name` | `Literal["Stop"]` | 始终为 "Stop" |

2055| `stop_hook_active` | `bool` | stop hook 是否活跃 |2298| `stop_hook_active` | `bool` | stop hook 是否活跃 |

2056 2299 

2057### `SubagentStopHookInput`2300<h3 id="subagentstophookinput">

2301 `SubagentStopHookInput`

2302</h3>

2058 2303 

2059`SubagentStop` hook 事件的输入数据。2304`SubagentStop` hook 事件的输入数据。

2060 2305 


2075| `agent_transcript_path` | `str` | 子代理的记录文件路径 |2320| `agent_transcript_path` | `str` | 子代理的记录文件路径 |

2076| `agent_type` | `str` | 子代理的类型 |2321| `agent_type` | `str` | 子代理的类型 |

2077 2322 

2078### `PreCompactHookInput`2323<h3 id="precompacthookinput">

2324 `PreCompactHookInput`

2325</h3>

2079 2326 

2080`PreCompact` hook 事件的输入数据。2327`PreCompact` hook 事件的输入数据。

2081 2328 


2092| `trigger` | `Literal["manual", "auto"]` | 什么触发了压缩 |2339| `trigger` | `Literal["manual", "auto"]` | 什么触发了压缩 |

2093| `custom_instructions` | `str \| None` | 压缩的自定义说明 |2340| `custom_instructions` | `str \| None` | 压缩的自定义说明 |

2094 2341 

2095### `NotificationHookInput`2342<h3 id="notificationhookinput">

2343 `NotificationHookInput`

2344</h3>

2096 2345 

2097`Notification` hook 事件的输入数据。2346`Notification` hook 事件的输入数据。

2098 2347 


2111| `title` | `str`(可选) | 通知标题 |2360| `title` | `str`(可选) | 通知标题 |

2112| `notification_type` | `str` | 通知类型 |2361| `notification_type` | `str` | 通知类型 |

2113 2362 

2114### `SubagentStartHookInput`2363<h3 id="subagentstarthookinput">

2364 `SubagentStartHookInput`

2365</h3>

2115 2366 

2116`SubagentStart` hook 事件的输入数据。2367`SubagentStart` hook 事件的输入数据。

2117 2368 


2128| `agent_id` | `str` | 子代理的唯一标识符 |2379| `agent_id` | `str` | 子代理的唯一标识符 |

2129| `agent_type` | `str` | 子代理的类型 |2380| `agent_type` | `str` | 子代理的类型 |

2130 2381 

2131### `PermissionRequestHookInput`2382<h3 id="permissionrequesthookinput">

2383 `PermissionRequestHookInput`

2384</h3>

2132 2385 

2133`PermissionRequest` hook 事件的输入数据。允许 hooks 以编程方式处理权限决策。2386`PermissionRequest` hook 事件的输入数据。允许 hooks 以编程方式处理权限决策。

2134 2387 


2147| `tool_input` | `dict[str, Any]` | 工具的输入参数 |2400| `tool_input` | `dict[str, Any]` | 工具的输入参数 |

2148| `permission_suggestions` | `list[Any]`(可选) | 来自 CLI 的建议权限更新 |2401| `permission_suggestions` | `list[Any]`(可选) | 来自 CLI 的建议权限更新 |

2149 2402 

2150### `HookJSONOutput`2403<h3 id="hookjsonoutput">

2404 `HookJSONOutput`

2405</h3>

2151 2406 

2152hook 回调返回值的联合类型。2407hook 回调返回值的联合类型。

2153 2408 


2155HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput2410HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput

2156```2411```

2157 2412 

2158#### `SyncHookJSONOutput`2413<h4 id="synchookjsonoutput">

2414 `SyncHookJSONOutput`

2415</h4>

2159 2416 

2160具有控制和决策字段的同步 hook 输出。2417具有控制和决策字段的同步 hook 输出。

2161 2418 


2179 在 Python 代码中使用 `continue_`(带下划线)。发送到 CLI 时会自动转换为 `continue`。2436 在 Python 代码中使用 `continue_`(带下划线)。发送到 CLI 时会自动转换为 `continue`。

2180</Note>2437</Note>

2181 2438 

2182#### `HookSpecificOutput`2439<h4 id="hookspecificoutput">

2440 `HookSpecificOutput`

2441</h4>

2183 2442 

2184包含 hook 事件名称和事件特定字段的 `TypedDict`。形状取决于 `hookEventName` 值。有关每个 hook 事件的可用字段的完整详情,见 [使用 hooks 控制执行](/zh-CN/agent-sdk/hooks#outputs)。2443包含 hook 事件名称和事件特定字段的 `TypedDict`。形状取决于 `hookEventName` 值。有关每个 hook 事件的可用字段的完整详情,见 [使用 hooks 控制执行](/zh-CN/agent-sdk/hooks#outputs)。

2185 2444 


2237)2496)

2238```2497```

2239 2498 

2240#### `AsyncHookJSONOutput`2499<h4 id="asynchookjsonoutput">

2500 `AsyncHookJSONOutput`

2501</h4>

2241 2502 

2242延迟 hook 执行的异步 hook 输出。2503延迟 hook 执行的异步 hook 输出。

2243 2504 


2251 在 Python 代码中使用 `async_`(带下划线)。发送到 CLI 时会自动转换为 `async`。2512 在 Python 代码中使用 `async_`(带下划线)。发送到 CLI 时会自动转换为 `async`。

2252</Note>2513</Note>

2253 2514 

2254### Hook 使用示例2515<h3 id="hook-usage-example">

2516 Hook 使用示例

2517</h3>

2255 2518 

2256此示例注册两个 hooks:一个阻止危险的 bash 命令(如 `rm -rf /`),另一个记录所有工具使用以进行审计。安全 hook 仅在 Bash 命令上运行(通过 `matcher`),而日志 hook 在所有工具上运行。2519此示例注册两个 hooks:一个阻止危险的 bash 命令(如 `rm -rf /`),另一个记录所有工具使用以进行审计。安全 hook 仅在 Bash 命令上运行(通过 `matcher`),而日志 hook 在所有工具上运行。

2257 2520 


2303 print(message)2566 print(message)

2304```2567```

2305 2568 

2306## 工具输入/输出类型2569<h2 id="tool-input/output-types">

2570 工具输入/输出类型

2571</h2>

2307 2572 

2308所有内置 Claude Code 工具的输入/输出模式文档。虽然 Python SDK 不将这些导出为类型,但它们代表消息中工具输入和输出的结构。2573所有内置 Claude Code 工具的输入/输出模式文档。虽然 Python SDK 不将这些导出为类型,但它们代表消息中工具输入和输出的结构。

2309 2574 

2310### Agent2575<h3 id="agent">

2576 Agent

2577</h3>

2311 2578 

2312**工具名称:** `Agent`(之前为 `Task`,仍然接受作为别名)2579**工具名称:** `Agent`(之前为 `Task`,仍然接受作为别名)

2313 2580 


2332}2599}

2333```2600```

2334 2601 

2335### AskUserQuestion2602<h3 id="askuserquestion">

2603 AskUserQuestion

2604</h3>

2336 2605 

2337**工具名称:** `AskUserQuestion`2606**工具名称:** `AskUserQuestion`

2338 2607 


2378}2647}

2379```2648```

2380 2649 

2381### Bash2650<h3 id="bash">

2651 Bash

2652</h3>

2382 2653 

2383**工具名称:** `Bash`2654**工具名称:** `Bash`

2384 2655 


2404}2675}

2405```2676```

2406 2677 

2407### Monitor2678<h3 id="monitor">

2679 Monitor

2680</h3>

2408 2681 

2409**工具名称:** `Monitor`2682**工具名称:** `Monitor`

2410 2683 


2431}2704}

2432```2705```

2433 2706 

2434### Edit2707<h3 id="edit">

2708 Edit

2709</h3>

2435 2710 

2436**工具名称:** `Edit`2711**工具名称:** `Edit`

2437 2712 


2456}2731}

2457```2732```

2458 2733 

2459### Read2734<h3 id="read">

2735 Read

2736</h3>

2460 2737 

2461**工具名称:** `Read`2738**工具名称:** `Read`

2462 2739 


2490}2767}

2491```2768```

2492 2769 

2493### Write2770<h3 id="write">

2771 Write

2772</h3>

2494 2773 

2495**工具名称:** `Write`2774**工具名称:** `Write`

2496 2775 


2513}2792}

2514```2793```

2515 2794 

2516### Glob2795<h3 id="glob">

2796 Glob

2797</h3>

2517 2798 

2518**工具名称:** `Glob`2799**工具名称:** `Glob`

2519 2800 


2536}2817}

2537```2818```

2538 2819 

2539### Grep2820<h3 id="grep">

2821 Grep

2822</h3>

2540 2823 

2541**工具名称:** `Grep`2824**工具名称:** `Grep`

2542 2825 


2585}2868}

2586```2869```

2587 2870 

2588### NotebookEdit2871<h3 id="notebookedit">

2872 NotebookEdit

2873</h3>

2589 2874 

2590**工具名称:** `NotebookEdit`2875**工具名称:** `NotebookEdit`

2591 2876 


2612}2897}

2613```2898```

2614 2899 

2615### WebFetch2900<h3 id="webfetch">

2901 WebFetch

2902</h3>

2616 2903 

2617**工具名称:** `WebFetch`2904**工具名称:** `WebFetch`

2618 2905 


2638}2925}

2639```2926```

2640 2927 

2641### WebSearch2928<h3 id="websearch">

2929 WebSearch

2930</h3>

2642 2931 

2643**工具名称:** `WebSearch`2932**工具名称:** `WebSearch`

2644 2933 


2662}2951}

2663```2952```

2664 2953 

2665### TodoWrite2954<h3 id="todowrite">

2955 TodoWrite

2956</h3>

2666 2957 

2667**工具名称:** `TodoWrite`2958**工具名称:** `TodoWrite`

2668 2959 


2693}2984}

2694```2985```

2695 2986 

2696### TaskCreate2987<h3 id="taskcreate">

2988 TaskCreate

2989</h3>

2697 2990 

2698**工具名称:** `TaskCreate`2991**工具名称:** `TaskCreate`

2699 2992 


2716}3009}

2717```3010```

2718 3011 

2719### TaskUpdate3012<h3 id="taskupdate">

3013 TaskUpdate

3014</h3>

2720 3015 

2721**工具名称:** `TaskUpdate`3016**工具名称:** `TaskUpdate`

2722 3017 


2748}3043}

2749```3044```

2750 3045 

2751### TaskGet3046<h3 id="taskget">

3047 TaskGet

3048</h3>

2752 3049 

2753**工具名称:** `TaskGet`3050**工具名称:** `TaskGet`

2754 3051 


2775}3072}

2776```3073```

2777 3074 

2778### TaskList3075<h3 id="tasklist">

3076 TaskList

3077</h3>

2779 3078 

2780**工具名称:** `TaskList`3079**工具名称:** `TaskList`

2781 3080 


2801}3100}

2802```3101```

2803 3102 

2804### BashOutput3103<h3 id="bashoutput">

3104 BashOutput

3105</h3>

2805 3106 

2806**工具名称:** `BashOutput`3107**工具名称:** `BashOutput`

2807 3108 


2824}3125}

2825```3126```

2826 3127 

2827### KillBash3128<h3 id="killbash">

3129 KillBash

3130</h3>

2828 3131 

2829**工具名称:** `KillBash`3132**工具名称:** `KillBash`

2830 3133 


2845}3148}

2846```3149```

2847 3150 

2848### ExitPlanMode3151<h3 id="exitplanmode">

3152 ExitPlanMode

3153</h3>

2849 3154 

2850**工具名称:** `ExitPlanMode`3155**工具名称:** `ExitPlanMode`

2851 3156 


2866}3171}

2867```3172```

2868 3173 

2869### ListMcpResources3174<h3 id="listmcpresources">

3175 ListMcpResources

3176</h3>

2870 3177 

2871**工具名称:** `ListMcpResourcesTool`3178**工具名称:** `ListMcpResourcesTool`

2872 3179 


2895}3202}

2896```3203```

2897 3204 

2898### ReadMcpResource3205<h3 id="readmcpresource">

3206 ReadMcpResource

3207</h3>

2899 3208 

2900**工具名称:** `ReadMcpResourceTool`3209**工具名称:** `ReadMcpResourceTool`

2901 3210 


2919}3228}

2920```3229```

2921 3230 

2922## ClaudeSDKClient 的高级功能3231<h2 id="advanced-features-with-claudesdkclient">

3232 ClaudeSDKClient 的高级功能

3233</h2>

2923 3234 

2924### 构建持续对话界面3235<h3 id="building-a-continuous-conversation-interface">

3236 构建持续对话界面

3237</h3>

2925 3238 

2926```python theme={null}3239```python theme={null}

2927from claude_agent_sdk import (3240from claude_agent_sdk import (


2994# Turn 1 - Claude: "I'll create a hello.py file for you..."3307# Turn 1 - Claude: "I'll create a hello.py file for you..."

2995# Turn 2 - You: "What's in that file?"3308# Turn 2 - You: "What's in that file?"

2996# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)3309# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)

2997# Turn 3 -You: "Add a main function to it"3310# Turn 3 - You: "Add a main function to it"

2998# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)3311# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)

2999 3312 

3000asyncio.run(main())3313asyncio.run(main())

3001```3314```

3002 3315 

3003### 使用 Hooks 进行行为修改3316<h3 id="using-hooks-for-behavior-modification">

3317 使用 Hooks 进行行为修改

3318</h3>

3004 3319 

3005```python theme={null}3320```python theme={null}

3006from claude_agent_sdk import (3321from claude_agent_sdk import (


3084asyncio.run(main())3399asyncio.run(main())

3085```3400```

3086 3401 

3087### 实时进度监控3402<h3 id="real-time-progress-monitoring">

3403 实时进度监控

3404</h3>

3088 3405 

3089```python theme={null}3406```python theme={null}

3090from claude_agent_sdk import (3407from claude_agent_sdk import (


3125asyncio.run(monitor_progress())3442asyncio.run(monitor_progress())

3126```3443```

3127 3444 

3128## 示例用法3445<h2 id="example-usage">

3446 示例用法

3447</h2>

3129 3448 

3130### 基本文件操作(使用 query3449<h3 id="basic-file-operations-using-query">

3450 基本文件操作(使用 query)

3451</h3>

3131 3452 

3132```python theme={null}3453```python theme={null}

3133from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock3454from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock


3153asyncio.run(create_project())3474asyncio.run(create_project())

3154```3475```

3155 3476 

3156### 错误处理3477<h3 id="error-handling">

3478 错误处理

3479</h3>

3157 3480 

3158```python theme={null}3481```python theme={null}

3159from claude_agent_sdk import query, CLINotFoundError, ProcessError, CLIJSONDecodeError3482from claude_agent_sdk import query, CLINotFoundError, ProcessError, CLIJSONDecodeError


3171 print(f"Failed to parse response: {e}")3494 print(f"Failed to parse response: {e}")

3172```3495```

3173 3496 

3174### 使用客户端的流式模式3497<h3 id="streaming-mode-with-client">

3498 使用客户端的流式模式

3499</h3>

3175 3500 

3176```python theme={null}3501```python theme={null}

3177from claude_agent_sdk import ClaudeSDKClient3502from claude_agent_sdk import ClaudeSDKClient


3198asyncio.run(interactive_session())3523asyncio.run(interactive_session())

3199```3524```

3200 3525 

3201### 使用 ClaudeSDKClient 的自定义工具3526<h3 id="using-custom-tools-with-claudesdkclient">

3527 使用 ClaudeSDKClient 的自定义工具

3528</h3>

3202 3529 

3203```python theme={null}3530```python theme={null}

3204from claude_agent_sdk import (3531from claude_agent_sdk import (


3270asyncio.run(main())3597asyncio.run(main())

3271```3598```

3272 3599 

3273## 沙箱配置3600<h2 id="sandbox-configuration">

3601 沙箱配置

3602</h2>

3274 3603 

3275### `SandboxSettings`3604<h3 id="sandboxsettings">

3605 `SandboxSettings`

3606</h3>

3276 3607 

3277沙箱行为的配置。使用此来启用命令沙箱和以编程方式配置网络限制。3608沙箱行为的配置。使用此来启用命令沙箱和以编程方式配置网络限制。

3278 3609 


3303 在沙箱设置中设置 `"failIfUnavailable": True` 以改为停止。该键尚未在 `SandboxSettings` 上声明,但 SDK 会将其转发给 Claude Code,后者会遵守它。然后 `query()` 报告一个 `ResultMessage`,其 `subtype="error_during_execution"` 和 `errors` 中的原因。监视该子类型,而不是期望 `query()` 在生成消息之前引发。3634 在沙箱设置中设置 `"failIfUnavailable": True` 以改为停止。该键尚未在 `SandboxSettings` 上声明,但 SDK 会将其转发给 Claude Code,后者会遵守它。然后 `query()` 报告一个 `ResultMessage`,其 `subtype="error_during_execution"` 和 `errors` 中的原因。监视该子类型,而不是期望 `query()` 在生成消息之前引发。

3304</Note>3635</Note>

3305 3636 

3306#### 示例用法3637<h4 id="example-usage-1">

3638 示例用法

3639</h4>

3307 3640 

3308```python theme={null}3641```python theme={null}

3309from claude_agent_sdk import query, ClaudeAgentOptions, SandboxSettings3642from claude_agent_sdk import query, ClaudeAgentOptions, SandboxSettings


3325 **Unix socket 安全性**:`allowUnixSockets` 选项可以授予对强大系统服务的访问权限。例如,允许 `/var/run/docker.sock` 实际上通过 Docker API 授予完整的主机系统访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets,并理解每个的安全含义。3658 **Unix socket 安全性**:`allowUnixSockets` 选项可以授予对强大系统服务的访问权限。例如,允许 `/var/run/docker.sock` 实际上通过 Docker API 授予完整的主机系统访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets,并理解每个的安全含义。

3326</Warning>3659</Warning>

3327 3660 

3328### `SandboxNetworkConfig`3661<h3 id="sandboxnetworkconfig">

3662 `SandboxNetworkConfig`

3663</h3>

3329 3664 

3330沙箱模式的网络特定配置。这些设置适用于当父 [`SandboxSettings`](#sandboxsettings) 中的 `enabled` 为 `True` 时的沙箱化 Bash 命令。它们不限制 WebFetch 工具,该工具改用 [权限规则](/zh-CN/permissions#webfetch)。3665沙箱模式的网络特定配置。这些设置适用于当父 [`SandboxSettings`](#sandboxsettings) 中的 `enabled` 为 `True` 时的沙箱化 Bash 命令。它们不限制 WebFetch 工具,该工具改用 [权限规则](/zh-CN/permissions#webfetch)。

3331 3666 


3358 内置沙箱代理基于请求的主机名强制执行网络允许列表,不会终止或检查 TLS 流量,因此 [域名前置](https://en.wikipedia.org/wiki/Domain_fronting) 等技术可能会绕过它。有关详细信息,请参阅 [沙箱安全限制](/zh-CN/sandboxing#security-limitations),以及 [安全部署](/zh-CN/agent-sdk/secure-deployment#traffic-forwarding) 以配置 TLS 终止代理。3693 内置沙箱代理基于请求的主机名强制执行网络允许列表,不会终止或检查 TLS 流量,因此 [域名前置](https://en.wikipedia.org/wiki/Domain_fronting) 等技术可能会绕过它。有关详细信息,请参阅 [沙箱安全限制](/zh-CN/sandboxing#security-limitations),以及 [安全部署](/zh-CN/agent-sdk/secure-deployment#traffic-forwarding) 以配置 TLS 终止代理。

3359</Note>3694</Note>

3360 3695 

3361### `SandboxIgnoreViolations`3696<h3 id="sandboxignoreviolations">

3697 `SandboxIgnoreViolations`

3698</h3>

3362 3699 

3363用于忽略特定沙箱违规的配置。3700用于忽略特定沙箱违规的配置。

3364 3701 


3373| `file` | `list[str]` | `[]` | 要忽略违规的文件路径模式 |3710| `file` | `list[str]` | `[]` | 要忽略违规的文件路径模式 |

3374| `network` | `list[str]` | `[]` | 要忽略违规的网络模式 |3711| `network` | `list[str]` | `[]` | 要忽略违规的网络模式 |

3375 3712 

3376### 沙箱外命令的权限回退3713<h3 id="permissions-fallback-for-unsandboxed-commands">

3714 沙箱外命令的权限回退

3715</h3>

3377 3716 

3378当 `allowUnsandboxedCommands` 启用时,模型可以通过在工具输入中设置 `dangerouslyDisableSandbox: True` 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着你的 `can_use_tool` 处理程序将被调用,允许你实现自定义授权逻辑。3717当 `allowUnsandboxedCommands` 启用时,模型可以通过在工具输入中设置 `dangerouslyDisableSandbox: True` 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着你的 `can_use_tool` 处理程序将被调用,允许你实现自定义授权逻辑。

3379 3718 


3451 如果 `permission_mode` 设置为 `bypassPermissions` 且 `allow_unsandboxed_commands` 启用,模型可以自主执行沙箱外的命令,无需任何批准提示。此组合实际上允许模型无声地逃离沙箱隔离。3790 如果 `permission_mode` 设置为 `bypassPermissions` 且 `allow_unsandboxed_commands` 启用,模型可以自主执行沙箱外的命令,无需任何批准提示。此组合实际上允许模型无声地逃离沙箱隔离。

3452</Warning>3791</Warning>

3453 3792 

3454## 另见3793<h2 id="see-also">

3794 另见

3795</h2>

3455 3796 

3456* [SDK 概述](/zh-CN/agent-sdk/overview) - 一般 SDK 概念3797* [SDK 概述](/zh-CN/agent-sdk/overview) - 一般 SDK 概念

3457* [TypeScript SDK 参考](/zh-CN/agent-sdk/typescript) - TypeScript SDK 文档3798* [TypeScript SDK 参考](/zh-CN/agent-sdk/typescript) - TypeScript SDK 文档

Details

340**权限模式**控制你想要多少人工监督:340**权限模式**控制你想要多少人工监督:

341 341 

342| 模式 | 行为 | 用例 |342| 模式 | 行为 | 用例 |

343| -------------------- | -------------------------- | -------------- |343| -------------------- | ------------------------------------------------------------------------------------------ | -------------- |

344| `acceptEdits` | 自动批准文件编辑和常见文件系统命令,询问其他操作 | 受信任的开发工作流 |344| `acceptEdits` | 自动批准文件编辑和常见文件系统命令,询问其他操作 | 受信任的开发工作流 |

345| `dontAsk` | 拒绝不在 `allowedTools` 中的任何内容 | 锁定的无头代理 |345| `dontAsk` | 拒绝不在 `allowedTools` 中的任何内容 | 锁定的无头代理 |

346| `auto`(仅 TypeScript) | 模型分类器批准或拒绝每个工具调用 | 具有安全防护的自主代理 |346| `auto`(仅 TypeScript) | 模型分类器批准或拒绝每个工具调用 | 具有安全防护的自主代理 |

347| `bypassPermissions` | 运行每个工具而不提示 | 沙箱 CI、完全受信任的环境 |347| `bypassPermissions` | 运行每个工具而不提示,除非显式的 [`ask` 规则](/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated) 匹配 | 沙箱 CI、完全受信任的环境 |

348| `default` | 需要 `canUseTool` 回调来处理批准 | 自定义批准流程 |348| `default` | 需要 `canUseTool` 回调来处理批准 | 自定义批准流程 |

349 349 

350上面的示例使用 `acceptEdits` 模式,它自动批准文件操作,以便代理可以在没有交互式提示的情况下运行。如果你想提示用户批准,使用 `default` 模式并提供一个 [`canUseTool` 回调](/zh-CN/agent-sdk/user-input)来收集用户输入。为了获得更多控制,请参阅[权限](/zh-CN/agent-sdk/permissions)。350上面的示例使用 `acceptEdits` 模式,它自动批准文件操作,以便代理可以在没有交互式提示的情况下运行。如果你想提示用户批准,使用 `default` 模式并提供一个 [`canUseTool` 回调](/zh-CN/agent-sdk/user-input)来收集用户输入。为了获得更多控制,请参阅[权限](/zh-CN/agent-sdk/permissions)。

Details

150 ```150 ```

151</CodeGroup>151</CodeGroup>

152 152 

153第二个查询打印来自第一个查询的文件摘要,这表明代理从存储中恢复了完整的上下文。

154 

153<h2 id="write-your-own-adapter">155<h2 id="write-your-own-adapter">

154 编写您自己的适配器156 编写您自己的适配器

155</h2>157</h2>

Details

230 ```230 ```

231 231 

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

233 import { query } from "@anthropic-ai/claude-agent-sdk";

234 

235 const sessionId = "..."; // The ID you captured in the previous example

236 

233 // Earlier session analyzed the code; now build on that analysis237 // Earlier session analyzed the code; now build on that analysis

234 for await (const message of query({238 for await (const message of query({

235 prompt: "Now implement the refactoring you suggested",239 prompt: "Now implement the refactoring you suggested",


245 ```249 ```

246</CodeGroup>250</CodeGroup>

247 251 

252您应该看到一个基于早期分析而构建的响应,而不是从头开始。这证实了代理恢复了会话,其先前的上下文保持完整。

253 

248<Tip>254<Tip>

249 如果 `resume` 调用返回新会话而不是预期的历史记录,最常见的原因是不匹配的 `cwd`。会话存储在 `~/.claude/projects/<encoded-cwd>/*.jsonl` 下,其中 `<encoded-cwd>` 是绝对工作目录,每个非字母数字字符都被替换为 `-`(所以 `/Users/me/proj` 变成 `-Users-me-proj`)。如果您的 resume 调用从不同的目录运行,SDK 会在错误的位置查找。会话文件也需要存在于当前机器上。255 如果 `resume` 调用返回新会话而不是预期的历史记录,最常见的原因是不匹配的 `cwd`。会话存储在 `~/.claude/projects/<encoded-cwd>/*.jsonl` 下,或者如果您设置了 `CLAUDE_CONFIG_DIR` 环境变量,则存储在 `$CLAUDE_CONFIG_DIR/projects/<encoded-cwd>/*.jsonl` 下,其中 `<encoded-cwd>` 是绝对工作目录,每个非字母数字字符都被替换为 `-`(所以 `/Users/me/proj` 变成 `-Users-me-proj`)。如果您的 resume 调用从不同的目录运行,SDK 会在错误的位置查找。会话文件也需要存在于当前机器上。

250</Tip>256</Tip>

251 257 

252要在机器之间或在无服务器环境中恢复会话,请使用 [`SessionStore` 适配器](/zh-CN/agent-sdk/session-storage)将记录镜像到共享存储。258要在机器之间或在无服务器环境中恢复会话,请使用 [`SessionStore` 适配器](/zh-CN/agent-sdk/session-storage)将记录镜像到共享存储。


268 # Fork: branch from session_id into a new session274 # Fork: branch from session_id into a new session

269 forked_id = None275 forked_id = None

270 async for message in query(276 async for message in query(

271 prompt="Instead of JWT, implement OAuth2 for the auth module",277 prompt="Instead of JWT, outline how OAuth2 would work for the auth module",

272 options=ClaudeAgentOptions(278 options=ClaudeAgentOptions(

273 resume=session_id,279 resume=session_id,

274 fork_session=True,280 fork_session=True,

281 max_turns=5,

275 ),282 ),

276 ):283 ):

277 if isinstance(message, ResultMessage):284 if isinstance(message, ResultMessage):


291 ```298 ```

292 299 

293 ```typescript TypeScript theme={null}300 ```typescript TypeScript theme={null}

301 import { query } from "@anthropic-ai/claude-agent-sdk";

302 

303 const sessionId = "..."; // The ID you captured in the previous example

304 

294 // Fork: branch from sessionId into a new session305 // Fork: branch from sessionId into a new session

295 let forkedId: string | undefined;306 let forkedId: string | undefined;

296 307 

297 for await (const message of query({308 for await (const message of query({

298 prompt: "Instead of JWT, implement OAuth2 for the auth module",309 prompt: "Instead of JWT, outline how OAuth2 would work for the auth module",

299 options: {310 options: {

300 resume: sessionId,311 resume: sessionId,

301 forkSession: true312 forkSession: true,

313 maxTurns: 5

302 }314 }

303 })) {315 })) {

304 if (message.type === "system" && message.subtype === "init") {316 if (message.type === "system" && message.subtype === "init") {


323 ```335 ```

324</CodeGroup>336</CodeGroup>

325 337 

338您应该看到 `forkedId` 与原始会话 ID 不同。恢复原始会话仍然继续 JWT 线程,这证实了 fork 没有修改原始历史记录。

339 

326<h2 id="resume-across-hosts">340<h2 id="resume-across-hosts">

327 跨主机恢复341 跨主机恢复

328</h2>342</h2>

Details

12 12 

13Agent Skills 通过专业能力扩展 Claude,Claude 会在相关时自动调用这些能力。Skills 被打包为 `SKILL.md` 文件,包含说明、描述和可选的支持资源。13Agent Skills 通过专业能力扩展 Claude,Claude 会在相关时自动调用这些能力。Skills 被打包为 `SKILL.md` 文件,包含说明、描述和可选的支持资源。

14 14 

15有关 Skills 的全面信息,包括优势、架构和编写指南,请参阅 [Agent Skills 概述](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)。15有关 Skills 的全面信息,包括优势、架构和编写指南,请参阅 [Agent Skills 概述](https://platform.claude.com/docs/zh-CN/agents-and-tools/agent-skills/overview)。

16 16 

17<h2 id="how-skills-work-with-the-sdk">17<h2 id="how-skills-work-with-the-sdk">

18 Skills 如何与 SDK 配合使用18 Skills 如何与 SDK 配合使用

Details

101 parent_tool_use_id: string | null;101 parent_tool_use_id: string | null;

102 uuid: UUID;102 uuid: UUID;

103 session_id: string;103 session_id: string;

104 ttft_ms?: number; // 首个令牌的时间(毫秒),仅在 message_start 事件中出现

104 };105 };

105 ```106 ```

106</CodeGroup>107</CodeGroup>

Details

218 ```218 ```

219</CodeGroup>219</CodeGroup>

220 220 

221<Note>

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

223 

224 在 Python SDK 中,生成器异常在调试级别被记录,会话会停滞而不会引发异常,因此如果流式会话挂起且没有输出,请启用调试日志记录并检查您的生成器。

225</Note>

226 

221<h2 id="single-message-input">227<h2 id="single-message-input">

222 单消息输入228 单消息输入

223</h2>229</h2>


247 * 自然的多轮对话253 * 自然的多轮对话

248</Warning>254</Warning>

249 255 

250<h3 id="implementation-example">256如果查询以错误结果结束,例如 `error_max_turns`,单个消息 `query()` 调用会抛出一个错误,该错误包含在生成最终结果消息后的失败文本,因此如果您的代码需要继续,请将循环包装在 try 块中。有关结果子类型,请参阅[处理结果](/zh-CN/agent-sdk/agent-loop#handle-the-result)。

257 

258<h3 id="implementation-example-1">

251 实现示例259 实现示例

252</h3>260</h3>

253 261 

Details

245* `type`:设置为 `"json_schema"` 以获得结构化输出245* `type`:设置为 `"json_schema"` 以获得结构化输出

246* `schema`:一个 [JSON Schema](https://json-schema.org/understanding-json-schema/about) 对象,定义你的输出结构。你可以使用 `z.toJSONSchema()` 从 Zod schema 生成它,或使用 `.model_json_schema()` 从 Pydantic 模型生成它246* `schema`:一个 [JSON Schema](https://json-schema.org/understanding-json-schema/about) 对象,定义你的输出结构。你可以使用 `z.toJSONSchema()` 从 Zod schema 生成它,或使用 `.model_json_schema()` 从 Pydantic 模型生成它

247 247 

248SDK 支持标准 JSON Schema 功能,包括所有基本类型(object、array、string、number、boolean、null)、`enum`、`const`、`required`、嵌套对象和 `$ref` 定义。有关支持的功能和限制的完整列表,请参阅 [JSON Schema 限制](https://platform.claude.com/docs/en/build-with-claude/structured-outputs#json-schema-limitations)。248SDK 支持标准 JSON Schema 功能,包括所有基本类型(object、array、string、number、boolean、null)、`enum`、`const`、`required`、嵌套对象和 `$ref` 定义。有关支持的功能和限制的完整列表,请参阅 [JSON Schema 限制](https://platform.claude.com/docs/zh-CN/build-with-claude/structured-outputs#json-schema-limitations)。

249 249 

250<h2 id="example-todo-tracking-agent">250<h2 id="example-todo-tracking-agent">

251 示例:TODO 跟踪代理251 示例:TODO 跟踪代理


358 错误处理358 错误处理

359</h2>359</h2>

360 360 

361当代理无法生成与你的 schema 匹配的有效 JSON 时,结构化输出生成可能会失败。这通常发生在 schema 对于任务来说太复杂、任务本身不明确或代理在尝试修复验证错误时达到重试限制时。361结构化输出生成可能会失败,当代理无法生成与你的 schema 匹配的有效 JSON 时。这通常发生在 schema 对于任务来说太复杂、任务本身不明确或代理在尝试修复验证错误时达到重试限制时。它也可能在没有任何验证失败的情况下发生:[模型回退](/zh-CN/model-config#automatic-model-fallback)可以在流中途收回已完成的输出,如果没有重试替换它,运行将以相同的错误结束。在调试你的 schema 之前,检查结果消息上的 `errors` 字段以区分这两个原因。

362 362 

363发生错误时,结果消息有一个 `subtype` 指示出了什么问题:363发生错误时,结果消息有一个 `subtype` 指示出了什么问题:

364 364 

365| Subtype | 含义 |365| Subtype | 含义 |

366| ------------------------------------- | ---------------- |366| ------------------------------------- | ---------------------------------- |

367| `success` | 输出已成功生成并验证 |367| `success` | 输出已成功生成并验证 |

368| `error_max_structured_output_retries` | 代理在多次尝试后无法生成有效输出 |368| `error_max_structured_output_retries` | 多次尝试后没有有效输出存活(验证失败,或模型回退收回且没有成功重试) |

369 369 

370下面的示例检查 `subtype` 字段以确定输出是否成功生成或你是否需要处理失败:370下面的示例检查 `subtype` 字段以确定输出是否成功生成或你是否需要处理失败:

371 371 

Details

41 并行化41 并行化

42</h3>42</h3>

43 43 

44多个子代理可以并发运行,大大加快复杂工作流的速度44多个子代理可以并发运行,因此独立的子任务完成时间为最慢的一个,而不是所有任务的总和

45 45 

46**示例:** 在代码审查期间,您可以同时运行 `style-checker`、`security-scanner` 和 `test-coverage` 子代理,将审查时间从几分钟减少到几秒钟46**示例:** 在代码审查期间,您可以同时运行 `style-checker`、`security-scanner` 和 `test-coverage` 子代理,而不是按顺序运行

47 47 

48<h3 id="specialized-instructions-and-knowledge">48<h3 id="specialized-instructions-and-knowledge">

49 专门的指令和知识49 专门的指令和知识


178</h3>178</h3>

179 179 

180| 字段 | 类型 | 必需 | 描述 |180| 字段 | 类型 | 必需 | 描述 |

181| :---------------- | :---------------------------------------------------------- | :- | :------------------------------------------------------------------------------ |181| :---------------- | :---------------------------------------------------------- | :- | :-------------------------------------------------------------------------------------------------------------- |

182| `description` | `string` | 是 | 何时使用此代理的自然语言描述 |182| `description` | `string` | 是 | 何时使用此代理的自然语言描述 |

183| `prompt` | `string` | 是 | 代理的系统提示词,定义其角色和行为 |183| `prompt` | `string` | 是 | 代理的系统提示词,定义其角色和行为 |

184| `tools` | `string[]` | 否 | 允许的工具名称数组。如果省略,继承所有工具 |184| `tools` | `string[]` | 否 | 允许的工具名称数组。如果省略,继承所有工具 |

185| `disallowedTools` | `string[]` | 否 | 要从代理的工具集中移除的工具名称数组 |185| `disallowedTools` | `string[]` | 否 | 要从代理的工具集中移除的工具名称数组。MCP 服务器级别的模式也被接受:`mcp__server` 或 `mcp__server__*` 移除来自该服务器的每个工具,`mcp__*` 移除来自任何服务器的每个 MCP 工具 |

186| `model` | `string` | 否 | 此代理的模型覆盖。接受别名,如 `'sonnet'`、`'opus'`、`'haiku'`、`'inherit'`,或完整的模型 ID。如果省略,默认为主模型 |186| `model` | `string` | 否 | 此代理的模型覆盖。接受别名,如 `'fable'`、`'opus'`、`'sonnet'`、`'haiku'`、`'inherit'`,或完整的模型 ID。如果省略,默认为主模型 |

187| `skills` | `string[]` | 否 | 在启动时预加载到代理上下文中的 skills 名称列表。未列出的 skills 仍可通过 Skill 工具调用 |187| `skills` | `string[]` | 否 | 在启动时预加载到代理上下文中的 skills 名称列表。未列出的 skills 仍可通过 Skill 工具调用 |

188| `memory` | `'user' \| 'project' \| 'local'` | 否 | 此代理的内存源 |188| `memory` | `'user' \| 'project' \| 'local'` | 否 | 此代理的内存源 |

189| `mcpServers` | `(string \| object)[]` | 否 | 此代理可用的 MCP 服务器,按名称或内联配置 |189| `mcpServers` | `(string \| object)[]` | 否 | 此代理可用的 MCP 服务器,按名称或内联配置 |

190| `initialPrompt` | `string` | 否 | 当此代理作为主线程代理运行时自动提交为第一个用户轮次。当代理作为子代理调用时忽略 |

190| `maxTurns` | `number` | 否 | 代理停止前的最大代理轮数 |191| `maxTurns` | `number` | 否 | 代理停止前的最大代理轮数 |

191| `background` | `boolean` | 否 | 调用时将此代理作为非阻塞后台任务运行 |192| `background` | `boolean` | 否 | 调用时将此代理作为非阻塞后台任务运行 |

192| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | 否 | 此代理的推理工作量级别 |193| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | 否 | 此代理的推理工作量级别 |


195在 Python SDK 中,这些字段名称使用 camelCase 以匹配线路格式。有关详细信息,请参阅 [`AgentDefinition` 参考](/zh-CN/agent-sdk/python#agentdefinition)。196在 Python SDK 中,这些字段名称使用 camelCase 以匹配线路格式。有关详细信息,请参阅 [`AgentDefinition` 参考](/zh-CN/agent-sdk/python#agentdefinition)。

196 197 

197<Note>198<Note>

198 子代理无法生成自己的子代理不要在子代理的 `tools` 数组中包含 `Agent`。199 {/* min-version: 2.1.172 */}自 Claude Code v2.1.172 起,子代理可以生成自己的子代理位于主代理下方五个级别的后台子代理无法生成进一步的子代理;前台子代理可以在任何深度生成。要防止子代理生成其他子代理,请从其 `tools` 数组中省略 `Agent` 或将其添加到 `disallowedTools`有关完整的深度规则,请参阅[嵌套子代理](/zh-CN/sub-agents#spawn-nested-subagents)。

199</Note>200</Note>

200 201 

201<h3 id="filesystem-based-definition-alternative">202<h3 id="filesystem-based-definition-alternative">


215子代理的上下文窗口从新开始(无父对话),但不是空的。从父代理到子代理的唯一通道是 Agent 工具的提示词字符串,因此请直接在该提示词中包含子代理需要的任何文件路径、错误消息或决策。216子代理的上下文窗口从新开始(无父对话),但不是空的。从父代理到子代理的唯一通道是 Agent 工具的提示词字符串,因此请直接在该提示词中包含子代理需要的任何文件路径、错误消息或决策。

216 217 

217| 子代理接收 | 子代理不接收 |218| 子代理接收 | 子代理不接收 |

218| :------------------------------------------------ | :---------------------------------------------- |219| :---------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------- |

219| 其自己的系统提示词(`AgentDefinition.prompt`)和 Agent 工具的提示词 | 父代理的对话历史或工具结果 |220| 其自己的系统提示词(`AgentDefinition.prompt`)和 Agent 工具的提示词 | 父代理的对话历史或工具结果 |

220| 项目 CLAUDE.md(通过 `settingSources` 加载) | 预加载的 skills 内容,除非在 `AgentDefinition.skills` 中列出 |221| 项目 CLAUDE.md(通过 [`settingSources`](/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 加载) | 预加载的 skill 内容,除非在 `AgentDefinition.skills` 中列出 |

221| 工具定义(从父代理继承,或 `tools` 中的子集) | 父代理的系统提示词 |222| 工具定义(从父代理继承,或 `tools` 中的子集) | 父代理的系统提示词 |

222 223 

223<Note>224<Note>


336 工具名称在 Claude Code v2.1.63 中从 `"Task"` 重命名为 `"Agent"`。当前 SDK 版本在 `tool_use` 块中发出 `"Agent"`,但在 `system:init` 工具列表和 `result.permission_denials[].tool_name` 中仍使用 `"Task"`。检查 `block.name` 中的两个值可确保跨 SDK 版本的兼容性。337 工具名称在 Claude Code v2.1.63 中从 `"Task"` 重命名为 `"Agent"`。当前 SDK 版本在 `tool_use` 块中发出 `"Agent"`,但在 `system:init` 工具列表和 `result.permission_denials[].tool_name` 中仍使用 `"Task"`。检查 `block.name` 中的两个值可确保跨 SDK 版本的兼容性。

337</Note>338</Note>

338 339 

339此示例遍历流式消息记录何时调用子代理以及后续消息何时源自该子代理的执行上下文340消息结构在 SDK 之间有所不同。在 Python 中内容块直接通过 `message.content` 访问在 TypeScript 中,`SDKAssistantMessage` 包装 Claude API 消息,因此内容通过 `message.message.content` 访问。

340 341 

341<Note>342此示例遍历流式消息,记录何时调用子代理以及后续消息何时源自该子代理的执行上下文。

342 消息结构在 SDK 之间有所不同。在 Python 中,内容块直接通过 `message.content` 访问。在 TypeScript 中,`SDKAssistantMessage` 包装 Claude API 消息,因此内容通过 `message.message.content` 访问。

343</Note>

344 343 

345<CodeGroup>344<CodeGroup>

346 ```python Python theme={null}345 ```python Python theme={null}


427 426 

428子代理可以恢复以继续中断的地方。恢复的子代理保留其完整的对话历史,包括所有先前的工具调用、结果和推理。子代理从停止的地方继续,而不是重新开始。427子代理可以恢复以继续中断的地方。恢复的子代理保留其完整的对话历史,包括所有先前的工具调用、结果和推理。子代理从停止的地方继续,而不是重新开始。

429 428 

430当子代理完成时,Claude Agent 工具结果中接收其代理 ID。要以编程方式恢复子代理:429当子代理完成时,Agent 工具结果包含一个包含 `agentId: <id>` 的文本块内置的 [`Explore` 和 `Plan` 代理](/zh-CN/sub-agents#built-in-subagents) 是一次性的,不返回 `agentId`,因此当您需要恢复时,请使用自定义代理或 `general-purpose`。要以编程方式恢复子代理:

431 430 

4321. **捕获会话 ID**:在第一个查询期间从消息中提取 `session_id`4311. **捕获会话 ID**:在第一个查询期间从消息中提取 `session_id`

4332. **提取代理 ID**:从消息内容中解析 `agentId`4322. **提取代理 ID**: Agent 工具结果文本中解析 `agentId`

4343. **恢复会话**:在第二个查询的选项中传递 `resume: sessionId`,并在您的提示词中包含代理 ID4333. **恢复会话**:在第二个查询的选项中传递 `resume: sessionId`,并在您的提示词中包含代理 ID

435 434 

436<Note>435<Note>

437 您必须恢复同一会话以访问子代理的记录。默认情况下,每个 `query()` 调用都会启动一个新会话,因此请传递 `resume: sessionId` 以在同一会话中继续。436 您必须恢复同一会话以访问子代理的记录。默认情况下,每个 `query()` 调用都会启动一个新会话,因此请传递 `resume: sessionId` 以在同一会话中继续。

438 437 

439 如果您使用的是自定义代理(而不是内置代理)您还需要在两个查询的 `agents` 参数中传递相同的代理定义。438 使用自定义代理时在两个查询的 `agents` 参数中传递相同的代理定义。

440</Note>439</Note>

441 440 

442下面的示例演示了此流程:第一个查询运行子代理并捕获会话 ID 和代理 ID,然后第二个查询恢复会话以提出需要来自第一个分析的上下文的后续问题。441下面的示例定义了一个自定义 `endpoint-finder` 代理。第一个查询运行它并从 Agent 工具结果中捕获会话 ID 和代理 ID,然后第二个查询恢复会话以提出需要来自第一个分析的上下文的后续问题。

443 442 

444<CodeGroup>443<CodeGroup>

445 ```typescript TypeScript theme={null}

446 import { query, type SDKMessage } from "@anthropic-ai/claude-agent-sdk";

447 

448 // Helper to extract agentId from message content

449 // Stringify to avoid traversing different block types (TextBlock, ToolResultBlock, etc.)

450 function extractAgentId(message: SDKMessage): string | undefined {

451 if (message.type !== "assistant" && message.type !== "user") return undefined;

452 // Stringify the content so we can search it without traversing nested blocks

453 const content = JSON.stringify(message.message.content);

454 const match = content.match(/agentId:\s*([a-f0-9-]+)/);

455 return match?.[1];

456 }

457 

458 let agentId: string | undefined;

459 let sessionId: string | undefined;

460 

461 // First invocation - use the Explore agent to find API endpoints

462 for await (const message of query({

463 prompt: "Use the Explore agent to find all API endpoints in this codebase",

464 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"] }

465 })) {

466 // Capture session_id from ResultMessage (needed to resume this session)

467 if ("session_id" in message) sessionId = message.session_id;

468 // Search message content for the agentId (appears in Agent tool results)

469 const extractedId = extractAgentId(message);

470 if (extractedId) agentId = extractedId;

471 // Print the final result

472 if ("result" in message) console.log(message.result);

473 }

474 

475 // Second invocation - resume and ask follow-up

476 if (agentId && sessionId) {

477 for await (const message of query({

478 prompt: `Resume agent ${agentId} and list the top 3 most complex endpoints`,

479 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"], resume: sessionId }

480 })) {

481 if ("result" in message) console.log(message.result);

482 }

483 }

484 ```

485 

486 ```python Python theme={null}444 ```python Python theme={null}

487 import asyncio445 import asyncio

488 import json

489 import re446 import re

490 from claude_agent_sdk import query, ClaudeAgentOptions447 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ToolResultBlock

448 

449 AGENTS = {

450 "endpoint-finder": AgentDefinition(

451 description="Locates and catalogs API endpoints in a codebase.",

452 prompt="You find and document API endpoints. Report each endpoint's path, method, and handler.",

453 tools=["Read", "Grep", "Glob"],

454 )

455 }

491 456 

492 457 

493 def extract_agent_id(text: str) -> str | None:458 def extract_agent_id(block: ToolResultBlock) -> str | None:

494 """Extract agentId from Agent tool result text."""459 """Extract agentId from an Agent tool result's text content."""

495 match = re.search(r"agentId:\s*([a-f0-9-]+)", text)460 parts = block.content if isinstance(block.content, list) else [{"text": block.content}]

496 return match.group(1) if match else None461 for part in parts:

462 if match := re.search(r"agentId:\s*([\w-]+)", part.get("text") or ""):

463 return match.group(1)

464 return None

497 465 

498 466 

499 async def main():467 async def main():

500 agent_id = None468 agent_id = None

501 session_id = None469 session_id = None

502 470 

503 # First invocation - use the Explore agent to find API endpoints471 # First invocation - run the endpoint-finder subagent

504 async for message in query(472 async for message in query(

505 prompt="Use the Explore agent to find all API endpoints in this codebase",473 prompt="Use the endpoint-finder agent to find all API endpoints in this codebase",

506 options=ClaudeAgentOptions(allowed_tools=["Read", "Grep", "Glob", "Agent"]),474 options=ClaudeAgentOptions(allowed_tools=["Read", "Grep", "Glob", "Agent"], agents=AGENTS),

507 ):475 ):

508 # Capture session_id from ResultMessage (needed to resume this session)476 # Capture session_id from ResultMessage (needed to resume this session)

509 if hasattr(message, "session_id"):477 if hasattr(message, "session_id"):

510 session_id = message.session_id478 session_id = message.session_id

511 # Search message content for the agentId (appears in Agent tool results)479 # Search tool results for the agentId trailer

512 if hasattr(message, "content"):480 for block in getattr(message, "content", None) or []:

513 # Stringify the content so we can search it without traversing nested blocks481 if isinstance(block, ToolResultBlock):

514 content_str = json.dumps(message.content, default=str)482 agent_id = extract_agent_id(block) or agent_id

515 extracted = extract_agent_id(content_str)

516 if extracted:

517 agent_id = extracted

518 # Print the final result483 # Print the final result

519 if hasattr(message, "result"):484 if hasattr(message, "result"):

520 print(message.result)485 print(message.result)


524 async for message in query(489 async for message in query(

525 prompt=f"Resume agent {agent_id} and list the top 3 most complex endpoints",490 prompt=f"Resume agent {agent_id} and list the top 3 most complex endpoints",

526 options=ClaudeAgentOptions(491 options=ClaudeAgentOptions(

527 allowed_tools=["Read", "Grep", "Glob", "Agent"], resume=session_id492 allowed_tools=["Read", "Grep", "Glob", "Agent"], agents=AGENTS, resume=session_id

528 ),493 ),

529 ):494 ):

530 if hasattr(message, "result"):495 if hasattr(message, "result"):


533 498 

534 asyncio.run(main())499 asyncio.run(main())

535 ```500 ```

501 

502 ```typescript TypeScript theme={null}

503 import { query, type SDKMessage } from "@anthropic-ai/claude-agent-sdk";

504 

505 const agents = {

506 "endpoint-finder": {

507 description: "Locates and catalogs API endpoints in a codebase.",

508 prompt: "You find and document API endpoints. Report each endpoint's path, method, and handler.",

509 tools: ["Read", "Grep", "Glob"]

510 }

511 };

512 

513 // Stringify content to search for agentId without traversing nested block types

514 function extractAgentId(message: SDKMessage): string | undefined {

515 if (message.type !== "assistant" && message.type !== "user") return undefined;

516 const content = JSON.stringify(message.message.content);

517 const match = content.match(/agentId:\s*([\w-]+)/);

518 return match?.[1];

519 }

520 

521 let agentId: string | undefined;

522 let sessionId: string | undefined;

523 

524 // First invocation - run the endpoint-finder subagent

525 for await (const message of query({

526 prompt: "Use the endpoint-finder agent to find all API endpoints in this codebase",

527 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"], agents }

528 })) {

529 // Capture session_id from ResultMessage (needed to resume this session)

530 if ("session_id" in message) sessionId = message.session_id;

531 // Search message content for the agentId (appears in Agent tool results)

532 const extractedId = extractAgentId(message);

533 if (extractedId) agentId = extractedId;

534 // Print the final result

535 if ("result" in message) console.log(message.result);

536 }

537 

538 // Second invocation - resume and ask follow-up

539 if (agentId && sessionId) {

540 for await (const message of query({

541 prompt: `Resume agent ${agentId} and list the top 3 most complex endpoints`,

542 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"], agents, resume: sessionId }

543 })) {

544 if ("result" in message) console.log(message.result);

545 }

546 }

547 ```

536</CodeGroup>548</CodeGroup>

537 549 

538子代理记录独立于主对话而持久存在:550子代理记录独立于主对话而持久存在:


541* **会话持久性**:子代理记录在其会话内持久存在。您可以通过恢复同一会话在重启 Claude Code 后恢复子代理。553* **会话持久性**:子代理记录在其会话内持久存在。您可以通过恢复同一会话在重启 Claude Code 后恢复子代理。

542* **自动清理**:记录根据 `cleanupPeriodDays` 设置进行清理(默认:30 天)。554* **自动清理**:记录根据 `cleanupPeriodDays` 设置进行清理(默认:30 天)。

543 555 

544<h2 id="tool-restrictions">556<h2 id="tool-restrictions-1">

545 工具限制557 工具限制

546</h2>558</h2>

547 559 

Details

217| 项目形状:`{ content, status, activeForm }` | `TaskCreate` 输入:`{ subject, description, activeForm?, metadata? }`。`TaskUpdate` 输入:`{ taskId, status?, subject?, description?, activeForm?, addBlocks?, addBlockedBy?, owner?, metadata? }`。`status` 是 `"pending"`、`"in_progress"` 或 `"completed"`;设置 `status: "deleted"` 以删除 |217| 项目形状:`{ content, status, activeForm }` | `TaskCreate` 输入:`{ subject, description, activeForm?, metadata? }`。`TaskUpdate` 输入:`{ taskId, status?, subject?, description?, activeForm?, addBlocks?, addBlockedBy?, owner?, metadata? }`。`status` 是 `"pending"`、`"in_progress"` 或 `"completed"`;设置 `status: "deleted"` 以删除 |

218| 直接渲染 `block.input.todos` | 跨调用累积项目,或从 `TaskList` 工具结果读取快照 |218| 直接渲染 `block.input.todos` | 跨调用累积项目,或从 `TaskList` 工具结果读取快照 |

219 219 

220分配的任务 ID 不在 `TaskCreate` 输入中。它在匹配的 `tool_result` 中返回为 `{ task: { id, subject } }`,因此从结果块捕获它以键入您的映射。以下示例显示了对[监控待办事项变化](#monitoring-todo-changes)循环的最小更改。要渲染完整列表,请在流中监视 `TaskList` 工具结果或将 `TaskCreate` 结果和 `TaskUpdate` 输入累积到映射中220分配的任务 ID 不在 `TaskCreate` 输入中。它在匹配的 `tool_result` 中返回为 `{ task: { id, subject } }`,因此从结果块捕获它以键入您的映射。以下示例显示了对[监控待办事项变化](#monitoring-todo-changes)循环的最小更改。要渲染完整列表,请在流中监视 `TaskList` 工具结果或将 `TaskCreate` 结果和 `TaskUpdate` 输入累积到映射中

221 

222流式传输的 `tool_use` 输入是模型发出的原始形状。Claude Code 在执行前修复一些接近但不正确的键名,将 `id` 或 `task_id` 映射到 `taskId`,将 `active_form` 映射到 `activeForm`,但该修复不会反映在流中。防御性地读取 `TaskUpdate` 输入字段,如下面的示例所示,而不是假设规范名称始终存在。

221 223 

222<CodeGroup>224<CodeGroup>

223 ```typescript TypeScript theme={null}225 ```typescript TypeScript theme={null}


233 const input = block.input as { subject: string };235 const input = block.input as { subject: string };

234 console.log(`+ ${input.subject}`);236 console.log(`+ ${input.subject}`);

235 } else if (block.name === "TaskUpdate") {237 } else if (block.name === "TaskUpdate") {

236 const input = block.input as { taskId: string; status?: string };238 const input = block.input as {

237 if (input.status) console.log(` ${input.taskId} -> ${input.status}`);239 taskId?: string;

240 id?: string;

241 task_id?: string;

242 status?: string;

243 };

244 const taskId = input.taskId ?? input.id ?? input.task_id;

245 if (taskId && input.status) console.log(` ${taskId} -> ${input.status}`);

238 }246 }

239 }247 }

240 }248 }


254 if block.name == "TaskCreate":262 if block.name == "TaskCreate":

255 print(f"+ {block.input['subject']}")263 print(f"+ {block.input['subject']}")

256 elif block.name == "TaskUpdate" and block.input.get("status"):264 elif block.name == "TaskUpdate" and block.input.get("status"):

257 print(f" {block.input['taskId']} -> {block.input['status']}")265 task_id = (

266 block.input.get("taskId")

267 or block.input.get("id")

268 or block.input.get("task_id")

269 )

270 if task_id:

271 print(f" {task_id} -> {block.input['status']}")

258 ```272 ```

259</CodeGroup>273</CodeGroup>

260 274 

Details

481| `debug` | `boolean` | `false` | 为 Claude Code 进程启用调试模式 |481| `debug` | `boolean` | `false` | 为 Claude Code 进程启用调试模式 |

482| `debugFile` | `string` | `undefined` | 将调试日志写入特定文件路径。隐式启用调试模式 |482| `debugFile` | `string` | `undefined` | 将调试日志写入特定文件路径。隐式启用调试模式 |

483| `disallowedTools` | `string[]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 会从 Claude 的上下文中移除该工具。作用域规则如 `"Bash(rm *)"` 会保留该工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用。请参阅[权限](/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |483| `disallowedTools` | `string[]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 会从 Claude 的上下文中移除该工具。作用域规则如 `"Bash(rm *)"` 会保留该工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用。请参阅[权限](/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |

484| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `'high'` | 控制 Claude 在其响应中投入的努力程度。与自适应思考一起工作以指导思考深度 |484| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | 模型默认值 | 控制 Claude 在其响应中投入的努力程度。与自适应思考一起工作以指导思考深度。请参阅[调整努力级别](/zh-CN/model-config#adjust-effort-level) |

485| `enableFileCheckpointing` | `boolean` | `false` | 启用文件更改跟踪以进行回滚。请参阅[文件 checkpointing](/zh-CN/agent-sdk/file-checkpointing) |485| `enableFileCheckpointing` | `boolean` | `false` | 启用文件更改跟踪以进行回滚。请参阅[文件 checkpointing](/zh-CN/agent-sdk/file-checkpointing) |

486| `env` | `Record<string, string \| undefined>` | `process.env` | 环境变量。设置此选项时,这会替换子进程环境而不是与 `process.env` 合并,因此请传递 `{ ...process.env, YOUR_VAR: 'value' }` 以保留继承的变量如 `PATH`。请参阅[处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses)了解此模式的示例,以及[环境变量](/zh-CN/env-vars)了解底层 CLI 读取的变量。设置 `CLAUDE_AGENT_SDK_CLIENT_APP` 以在 User-Agent 标头中标识您的应用 |486| `env` | `Record<string, string \| undefined>` | `process.env` | 环境变量。设置此选项时,这会替换子进程环境而不是与 `process.env` 合并,因此请传递 `{ ...process.env, YOUR_VAR: 'value' }` 以保留继承的变量如 `PATH`。请参阅[处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses)了解此模式的示例,以及[环境变量](/zh-CN/env-vars)了解底层 CLI 读取的变量。设置 `CLAUDE_AGENT_SDK_CLIENT_APP` 以在 User-Agent 标头中标识您的应用 |

487| `executable` | `'bun' \| 'deno' \| 'node'` | 自动检测 | 要使用的 JavaScript 运行时 |487| `executable` | `'bun' \| 'deno' \| 'node'` | 自动检测 | 要使用的 JavaScript 运行时 |


499| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 改用 `thinking`。思考过程的最大令牌数 |499| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 改用 `thinking`。思考过程的最大令牌数 |

500| `maxTurns` | `number` | `undefined` | 最大代理轮次(工具使用往返) |500| `maxTurns` | `number` | `undefined` | 最大代理轮次(工具使用往返) |

501| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 服务器配置 |501| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 服务器配置 |

502| `model` | `string` | CLI 的默认值 | 要使用的 Claude 模型 |502| `model` | `string` | CLI 的默认值 | Claude 模型别名或完整模型名称。请参阅[接受的值和特定于提供商的 ID](/zh-CN/model-config#available-models) |

503| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | 用于处理 MCP 引出请求的回调。当 MCP 服务器请求用户输入且没有 hook 首先处理它时调用。未提供时,未处理的引出请求会自动被拒绝 |503| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | 用于处理 MCP 引出请求的回调。当 MCP 服务器请求用户输入且没有 hook 首先处理它时调用。未提供时,未处理的引出请求会自动被拒绝 |

504| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 为代理结果定义输出格式。请参阅[结构化输出](/zh-CN/agent-sdk/structured-outputs)了解详情 |504| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 为代理结果定义输出格式。请参阅[结构化输出](/zh-CN/agent-sdk/structured-outputs)了解详情 |

505| `outputStyle` | `string` | `undefined` | 不是 `Options` 字段。改为在内联 [`settings`](/zh-CN/settings) 对象或设置文件中设置 `outputStyle`。请参阅[激活输出样式](/zh-CN/agent-sdk/modifying-system-prompts#activate-an-output-style) |505| `outputStyle` | `string` | `undefined` | 不是 `Options` 字段。改为在内联 [`settings`](/zh-CN/settings) 对象或设置文件中设置 `outputStyle`。请参阅[激活输出样式](/zh-CN/agent-sdk/modifying-system-prompts#activate-an-output-style) |


553* `API_TIMEOUT_MS`:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 `600000`。适用于主循环和所有子代理。553* `API_TIMEOUT_MS`:Anthropic 客户端上的每个请求超时,以毫秒为单位。默认 `600000`。适用于主循环和所有子代理。

554* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。554* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。

555* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:使用 `run_in_background` 启动的子代理的停滞监视程序。默认 `600000`。在每个流事件上重置;在停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父级。不适用于同步子代理。555* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:使用 `run_in_background` 启动的子代理的停滞监视程序。默认 `600000`。在每个流事件上重置;在停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父级。不适用于同步子代理。

556* `CLAUDE_ENABLE_STREAM_WATCHDOG=1` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应正文停止流式传输时中止请求。默认关闭。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止的请求通过正常重试路径进行。556* `CLAUDE_ENABLE_STREAM_WATCHDOG=1` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应正文停止流式传输时中止请求。当 `CLAUDE_ENABLE_STREAM_WATCHDOG` 未设置时,默认值在直接 Anthropic API 上由服务器控制,在其他提供商上关闭。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止的请求通过正常重试路径进行。

557 557 

558<h3 id="query-object">558<h3 id="query-object">

559 `Query` 对象559 `Query` 对象


658}658}

659```659```

660 660 

661<h4 id="methods">661<h4 id="methods-1">

662 方法662 方法

663</h4>663</h4>

664 664 


717```717```

718 718 

719| 字段 | 必需 | 描述 |719| 字段 | 必需 | 描述 |

720| :------------------------------------ | :- | :------------------------------------------------------------------------------------------ |720| :------------------------------------ | :- | :-------------------------------------------------------------------------------------------------------- |

721| `description` | 是 | 何时使用此代理的自然语言描述 |721| `description` | 是 | 何时使用此代理的自然语言描述 |

722| `tools` | 否 | 允许的工具名称数组。如果省略,继承父级的所有工具。要将 Skills 预加载到代理的上下文中,请使用 `skills` 字段而不是在此处列出 `'Skill'` |722| `tools` | 否 | 允许的工具名称数组。如果省略,继承父级的所有工具。要将 Skills 预加载到代理的上下文中,请使用 `skills` 字段而不是在此处列出 `'Skill'` |

723| `disallowedTools` | 否 | 要为此代理明确禁止的工具名称数组 |723| `disallowedTools` | 否 | 要为此代理明确禁止的工具名称数组。也接受 MCP 服务器级别的模式:`mcp__server` 或 `mcp__server__*` 移除该服务器的每个工具,`mcp__*` 移除任何服务器的每个 MCP 工具 |

724| `prompt` | 是 | 代理的系统提示 |724| `prompt` | 是 | 代理的系统提示 |

725| `model` | 否 | 此代理的模型覆盖。接受别名,如 `'sonnet'`、`'opus'`、`'haiku'`、`'inherit'`,或完整的模型 ID。如果省略或 `'inherit'`,使用主模型 |725| `model` | 否 | 此代理的模型覆盖。接受别名,如 `'fable'`、`'opus'`、`'sonnet'`、`'haiku'`、`'inherit'`,或完整的模型 ID。如果省略或 `'inherit'`,使用主模型 |

726| `mcpServers` | 否 | 此代理的 MCP 服务器规范 |726| `mcpServers` | 否 | 此代理的 MCP 服务器规范 |

727| `skills` | 否 | 要预加载到代理上下文中的 skill 名称数组 |727| `skills` | 否 | 要预加载到代理上下文中的 skill 名称数组 |

728| `initialPrompt` | 否 | 当此代理作为主线程代理运行时,自动提交为第一个用户轮次 |728| `initialPrompt` | 否 | 当此代理作为主线程代理运行时,自动提交为第一个用户轮次 |


756```756```

757 757 

758| 值 | 描述 | 位置 |758| 值 | 描述 | 位置 |

759| :---------- | :----------------- | :---------------------------- |759| :---------- | :------------ | :---------------------------- |

760| `'user'` | 全局用户设置 | `~/.claude/settings.json` |760| `'user'` | 全局用户设置 | `~/.claude/settings.json` |

761| `'project'` | 共享项目设置(版本控制) | `.claude/settings.json` |761| `'project'` | 共享项目设置(版本控制) | `.claude/settings.json` |

762| `'local'` | 本地项目设置(gitignored) | `.claude/settings.local.json` |762| `'local'` | 本地项目设置(不版本控制) | `.claude/settings.local.json` |

763 763 

764<h4 id="default-behavior">764<h4 id="default-behavior">

765 默认行为765 默认行为


874type PermissionMode =874type PermissionMode =

875 | "default" // 标准权限行为875 | "default" // 标准权限行为

876 | "acceptEdits" // 自动接受文件编辑876 | "acceptEdits" // 自动接受文件编辑

877 | "bypassPermissions" // 绕过所有权限检查877 | "bypassPermissions" // 绕过权限检查;显式询问规则仍然提示

878 | "plan" // Plan Mode - 仅读取工具878 | "plan" // Plan Mode - 仅读取工具

879 | "dontAsk" // 不提示权限,如果未预先批准则拒绝879 | "dontAsk" // 不提示权限,如果未预先批准则拒绝

880 | "auto"; // 使用模型分类器批准或拒绝每个工具调用880 | "auto"; // 使用模型分类器批准或拒绝每个工具调用


1035type SdkPluginConfig = {1035type SdkPluginConfig = {

1036 type: "local";1036 type: "local";

1037 path: string;1037 path: string;

1038 skipMcpDiscovery?: boolean;

1038};1039};

1039```1040```

1040 1041 

1041| 字段 | 类型 | 描述 |1042| 字段 | 类型 | 描述 |

1042| :----- | :-------- | :----------------------------- |1043| :----------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------- |

1043| `type` | `'local'` | 必须为 `'local'`(目前仅支持本地 plugins) |1044| `type` | `'local'` | 必须为 `'local'`(目前仅支持本地 plugins) |

1044| `path` | `string` | 插件目录的绝对或相对路径 |1045| `path` | `string` | 插件目录的绝对或相对路径 |

1046| `skipMcpDiscovery` | `boolean` | 当为 `true` 时,SDK 从此 plugin 加载 skills、hooks、agents 和 commands,但不读取其 `.mcp.json` 或 manifest `mcpServers`。当您的应用程序拥有 plugin 的 MCP 连接时设置此选项。 |

1045 1047 

1046**示例:**1048**示例:**

1047 1049 


1086 | SDKTaskProgressMessage1088 | SDKTaskProgressMessage

1087 | SDKTaskUpdatedMessage1089 | SDKTaskUpdatedMessage

1088 | SDKSessionStateChangedMessage1090 | SDKSessionStateChangedMessage

1091 | SDKWorkerShuttingDownMessage

1089 | SDKCommandsChangedMessage1092 | SDKCommandsChangedMessage

1090 | SDKNotificationMessage1093 | SDKNotificationMessage

1091 | SDKFilesPersistedEvent1094 | SDKFilesPersistedEvent


1096 | SDKPermissionDeniedMessage1099 | SDKPermissionDeniedMessage

1097 | SDKPromptSuggestionMessage1100 | SDKPromptSuggestionMessage

1098 | SDKAPIRetryMessage1101 | SDKAPIRetryMessage

1099 | SDKMirrorErrorMessage;1102 | SDKMirrorErrorMessage

1103 | SDKInformationalMessage;

1100```1104```

1101 1105 

1102<h3 id="sdkassistantmessage">1106<h3 id="sdkassistantmessage">


1183 result: string;1187 result: string;

1184 stop_reason: string | null;1188 stop_reason: string | null;

1185 ttft_ms?: number;1189 ttft_ms?: number;

1190 ttft_stream_ms?: number;

1186 total_cost_usd: number;1191 total_cost_usd: number;

1187 usage: NonNullableUsage;1192 usage: NonNullableUsage;

1188 modelUsage: { [modelName: string]: ModelUsage };1193 modelUsage: { [modelName: string]: ModelUsage };


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

1222 1227 

1223* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为 `null`。1228* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为 `null`。

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

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

1225* `terminal_reason`:循环结束的原因。为 `"completed"`、`"max_turns"`、`"tool_deferred"`、`"aborted_streaming"`、`"aborted_tools"`、`"hook_stopped"`、`"stop_hook_prevented"`、`"blocking_limit"`、`"rapid_refill_breaker"`、`"prompt_too_long"`、`"image_error"` 或 `"model_error"` 之一。1231* `terminal_reason`:循环结束的原因。为 `"completed"`、`"max_turns"`、`"tool_deferred"`、`"aborted_streaming"`、`"aborted_tools"`、`"hook_stopped"`、`"stop_hook_prevented"`、`"blocking_limit"`、`"rapid_refill_breaker"`、`"prompt_too_long"`、`"image_error"` 或 `"model_error"` 之一。

1226* `fast_mode_state`:为 `"on"`、`"off"` 或 `"cooldown"` 之一。1232* `fast_mode_state`:为 `"on"`、`"off"` 或 `"cooldown"` 之一。

1227 1233 


1273 parent_tool_use_id: string | null;1279 parent_tool_use_id: string | null;

1274 uuid: UUID;1280 uuid: UUID;

1275 session_id: string;1281 session_id: string;

1282 ttft_ms?: number; // 首个令牌的时间(毫秒),仅在 message_start 事件上显示

1276};1283};

1277```1284```

1278 1285 


1295};1302};

1296```1303```

1297 1304 

1305<h3 id="sdkinformationalmessage">

1306 `SDKInformationalMessage`

1307</h3>

1308 

1309由循环发出的通用文本横幅。携带非错误状态行、hook 反馈(例如 `UserPromptSubmit` hook 的阻止原因)和命令输出。将 `content` 呈现为给定 `level` 的纯文本。

1310 

1311```typescript theme={null}

1312type SDKInformationalMessage = {

1313 type: "system";

1314 subtype: "informational";

1315 content: string;

1316 level: "info" | "notice" | "suggestion" | "warning";

1317 tool_use_id?: string;

1318 prevent_continuation?: boolean;

1319 uuid: UUID;

1320 session_id: string;

1321};

1322```

1323 

1324<h3 id="sdkworkershuttingdownmessage">

1325 `SDKWorkerShuttingDownMessage`

1326</h3>

1327 

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

1329 

1330```typescript theme={null}

1331type SDKWorkerShuttingDownMessage = {

1332 type: "system";

1333 subtype: "worker_shutting_down";

1334 reason: string;

1335 uuid: UUID;

1336 session_id: string;

1337};

1338```

1339 

1298<h3 id="sdkplugininstallmessage">1340<h3 id="sdkplugininstallmessage">

1299 `SDKPluginInstallMessage`1341 `SDKPluginInstallMessage`

1300</h3>1342</h3>


1369type SDKMessageOrigin =1411type SDKMessageOrigin =

1370 | { kind: "human" }1412 | { kind: "human" }

1371 | { kind: "channel"; server: string }1413 | { kind: "channel"; server: string }

1372 | { kind: "peer"; from: string; name?: string }1414 | { kind: "peer"; from: string; name?: string; senderTaskId?: string }

1373 | { kind: "task-notification" }1415 | { kind: "task-notification" }

1374 | { kind: "coordinator" };1416 | { kind: "coordinator" }

1417 | { kind: "auto-continuation" };

1375```1418```

1376 1419 

1377| `kind` | 含义 |1420| `kind` | 含义 |

1378| ------------------- | ------------------------------------------------------------------------------- |1421| ------------------- | --------------------------------------------------------------------------------------------------------------------------------- |

1379| `human` | 来自最终用户的直接输入。在用户消息上,缺少的 `origin` 也表示人工输入。 |1422| `human` | 来自最终用户的直接输入。在用户消息上,缺少的 `origin` 也表示人工输入。 |

1380| `channel` | 消息到达[频道](/zh-CN/channels)。`server` 是源 MCP 服务器名称。 |1423| `channel` | 消息到达[频道](/zh-CN/channels)。`server` 是源 MCP 服务器名称。 |

1381| `peer` | 来自另一个代理会话的消息,通过 `SendMessage`。`from` 是发送者地址`name` 是发送者的显示名称(如果可用)。 |1424| `peer` | 保留用于来自另一个代理会话的消息。`from` 是发送者地址`name` 是发送者的显示名称(如果可用)。`senderTaskId` 是发送消息的进程内后台子代理的任务 ID;对于跨会话对等体不存在。Agent SDK 不会发出此来源;将其视为未知来源。 |

1382| `task-notification` | 后台任务完成后注入的合成轮次。请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)。 |1425| `task-notification` | 后台任务完成后注入的合成轮次。请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)。 |

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

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

1384 1428 

1385<h2 id="hook-types">1429<h2 id="hook-types">

1386 Hook 类型1430 Hook 类型


1712type TeammateIdleHookInput = BaseHookInput & {1756type TeammateIdleHookInput = BaseHookInput & {

1713 hook_event_name: "TeammateIdle";1757 hook_event_name: "TeammateIdle";

1714 teammate_name: string;1758 teammate_name: string;

1759 /** @deprecated 自 v2.1.178 起已弃用。携带会话派生的团队名称;将被移除。 */

1715 team_name: string;1760 team_name: string;

1716};1761};

1717```1762```


1727 task_subject: string;1772 task_subject: string;

1728 task_description?: string;1773 task_description?: string;

1729 teammate_name?: string;1774 teammate_name?: string;

1775 /** @deprecated 自 v2.1.178 起已弃用。携带会话派生的团队名称;将被移除。 */

1730 team_name?: string;1776 team_name?: string;

1731};1777};

1732```1778```


1934 description: string;1980 description: string;

1935 prompt: string;1981 prompt: string;

1936 subagent_type: string;1982 subagent_type: string;

1937 model?: "sonnet" | "opus" | "haiku";1983 model?: "sonnet" | "opus" | "haiku" | "fable";

1938 resume?: string;1984 resume?: string;

1939 run_in_background?: boolean;1985 run_in_background?: boolean;

1940 max_turns?: number;1986 max_turns?: number;

1941 name?: string;1987 name?: string;

1942 team_name?: string;

1943 mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";1988 mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";

1944 isolation?: "worktree";1989 isolation?: "worktree";

1945};1990};


2385 | WorkflowOutput;2430 | WorkflowOutput;

2386```2431```

2387 2432 

2388<h3 id="agent">2433<h3 id="agent-1">

2389 Agent2434 Agent

2390</h3>2435</h3>

2391 2436 


2397 status: "completed";2442 status: "completed";

2398 agentId: string;2443 agentId: string;

2399 content: Array<{ type: "text"; text: string }>;2444 content: Array<{ type: "text"; text: string }>;

2445 resolvedModel?: string;

2400 totalToolUseCount: number;2446 totalToolUseCount: number;

2401 totalDurationMs: number;2447 totalDurationMs: number;

2402 totalTokens: number;2448 totalTokens: number;


2421 status: "async_launched";2467 status: "async_launched";

2422 agentId: string;2468 agentId: string;

2423 description: string;2469 description: string;

2470 resolvedModel?: string;

2424 prompt: string;2471 prompt: string;

2425 outputFile: string;2472 outputFile: string;

2426 canReadOutputFile?: boolean;2473 canReadOutputFile?: boolean;


2434 2481 

2435返回来自子代理的结果。在 `status` 字段上进行区分:`"completed"` 表示已完成的任务,`"async_launched"` 表示后台任务,`"sub_agent_entered"` 表示交互式子代理。2482返回来自子代理的结果。在 `status` 字段上进行区分:`"completed"` 表示已完成的任务,`"async_launched"` 表示后台任务,`"sub_agent_entered"` 表示交互式子代理。

2436 2483 

2437<h3 id="askuserquestion">2484`completed` 和 `async_launched` 变体上的 `resolvedModel` 字段命名子代理实际运行的模型,当应用 [`availableModels`](/zh-CN/model-config#restrict-model-selection) 或其他覆盖时,该模型可能与请求的 `model` 输入不同。{/* min-version: 2.1.174 */}此字段需要 Claude Code v2.1.174 或更高版本。

2485 

2486<h3 id="askuserquestion-1">

2438 AskUserQuestion2487 AskUserQuestion

2439</h3>2488</h3>

2440 2489 


2455 2504 

2456返回提出的问题和用户的答案。当用户输入自由形式的回复而不是回答结构化问题时,`response` 被设置;当存在时,Claude 会收到"用户回复:…"而不是每个问题的答案列表。2505返回提出的问题和用户的答案。当用户输入自由形式的回复而不是回答结构化问题时,`response` 被设置;当存在时,Claude 会收到"用户回复:…"而不是每个问题的答案列表。

2457 2506 

2458<h3 id="bash">2507<h3 id="bash-1">

2459 Bash2508 Bash

2460</h3>2509</h3>

2461 2510 


2480 2529 

2481返回命令输出,stdout/stderr 分开。后台命令包括 `backgroundTaskId`。2530返回命令输出,stdout/stderr 分开。后台命令包括 `backgroundTaskId`。

2482 2531 

2483<h3 id="monitor">2532<h3 id="monitor-1">

2484 Monitor2533 Monitor

2485</h3>2534</h3>

2486 2535 


2496 2545 

2497返回运行监视器的后台任务 ID。使用此 ID 与 `TaskStop` 一起提前取消监视。2546返回运行监视器的后台任务 ID。使用此 ID 与 `TaskStop` 一起提前取消监视。

2498 2547 

2499<h3 id="edit">2548<h3 id="edit-1">

2500 Edit2549 Edit

2501</h3>2550</h3>

2502 2551 


2530 2579 

2531返回编辑操作的结构化差异。2580返回编辑操作的结构化差异。

2532 2581 

2533<h3 id="read">2582<h3 id="read-1">

2534 Read2583 Read

2535</h3>2584</h3>

2536 2585 


2590 2639 

2591返回适合文件类型的格式的文件内容。在 `type` 字段上进行区分。2640返回适合文件类型的格式的文件内容。在 `type` 字段上进行区分。

2592 2641 

2593<h3 id="write">2642<h3 id="write-1">

2594 Write2643 Write

2595</h3>2644</h3>

2596 2645 


2622 2671 

2623返回写入结果,包含结构化差异信息。2672返回写入结果,包含结构化差异信息。

2624 2673 

2625<h3 id="glob">2674<h3 id="glob-1">

2626 Glob2675 Glob

2627</h3>2676</h3>

2628 2677 


2639 2688 

2640返回与 glob 模式匹配的文件路径,按修改时间排序。2689返回与 glob 模式匹配的文件路径,按修改时间排序。

2641 2690 

2642<h3 id="grep">2691<h3 id="grep-1">

2643 Grep2692 Grep

2644</h3>2693</h3>

2645 2694 


2660 2709 

2661返回搜索结果。形状因 `mode` 而异:文件列表、带匹配的内容或匹配计数。2710返回搜索结果。形状因 `mode` 而异:文件列表、带匹配的内容或匹配计数。

2662 2711 

2663<h3 id="taskstop">2712<h3 id="taskstop-1">

2664 TaskStop2713 TaskStop

2665</h3>2714</h3>

2666 2715 


2677 2726 

2678停止后台任务后返回确认。2727停止后台任务后返回确认。

2679 2728 

2680<h3 id="notebookedit">2729<h3 id="notebookedit-1">

2681 NotebookEdit2730 NotebookEdit

2682</h3>2731</h3>

2683 2732 


2699 2748 

2700返回笔记本编辑的结果,包含原始和更新的文件内容。2749返回笔记本编辑的结果,包含原始和更新的文件内容。

2701 2750 

2702<h3 id="webfetch">2751<h3 id="webfetch-1">

2703 WebFetch2752 WebFetch

2704</h3>2753</h3>

2705 2754 


2718 2767 

2719返回获取的内容,包含 HTTP 状态和元数据。2768返回获取的内容,包含 HTTP 状态和元数据。

2720 2769 

2721<h3 id="websearch">2770<h3 id="websearch-1">

2722 WebSearch2771 WebSearch

2723</h3>2772</h3>

2724 2773 


2740 2789 

2741返回来自网络的搜索结果。2790返回来自网络的搜索结果。

2742 2791 

2743<h3 id="workflow">2792<h3 id="workflow-1">

2744 Workflow2793 Workflow

2745</h3>2794</h3>

2746 2795 


2770| `scriptPath` | `string` | 此运行的持久化工作流脚本的路径。编辑它并作为 `scriptPath` 传回以重新运行而无需重新发送脚本 |2819| `scriptPath` | `string` | 此运行的持久化工作流脚本的路径。编辑它并作为 `scriptPath` 传回以重新运行而无需重新发送脚本 |

2771| `error` | `string` | 当脚本语法检查失败时设置。存在时,尽管 `async_launched` 状态,运行未启动 |2820| `error` | `string` | 当脚本语法检查失败时设置。存在时,尽管 `async_launched` 状态,运行未启动 |

2772 2821 

2773<h3 id="todowrite">2822<h3 id="todowrite-1">

2774 TodoWrite2823 TodoWrite

2775</h3>2824</h3>

2776 2825 


2797 自 TypeScript Agent SDK 0.3.142 起,`TodoWrite` 默认被禁用。改用 `TaskCreate`、`TaskGet`、`TaskUpdate` 和 `TaskList`。请参阅[迁移到 Task 工具](/zh-CN/agent-sdk/todo-tracking#migrate-to-task-tools)更新您的监视代码,或设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以恢复为 `TodoWrite`。2846 自 TypeScript Agent SDK 0.3.142 起,`TodoWrite` 默认被禁用。改用 `TaskCreate`、`TaskGet`、`TaskUpdate` 和 `TaskList`。请参阅[迁移到 Task 工具](/zh-CN/agent-sdk/todo-tracking#migrate-to-task-tools)更新您的监视代码,或设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以恢复为 `TodoWrite`。

2798</Note>2847</Note>

2799 2848 

2800<h3 id="taskcreate">2849<h3 id="taskcreate-1">

2801 TaskCreate2850 TaskCreate

2802</h3>2851</h3>

2803 2852 


2814 2863 

2815返回创建的任务及其分配的 ID。2864返回创建的任务及其分配的 ID。

2816 2865 

2817<h3 id="taskupdate">2866<h3 id="taskupdate-1">

2818 TaskUpdate2867 TaskUpdate

2819</h3>2868</h3>

2820 2869 


2835 2884 

2836返回更新结果,包括哪些字段已更改。2885返回更新结果,包括哪些字段已更改。

2837 2886 

2838<h3 id="taskget">2887<h3 id="taskget-1">

2839 TaskGet2888 TaskGet

2840</h3>2889</h3>

2841 2890 


2856 2905 

2857返回完整的任务记录,或在找不到 ID 时返回 `null`。2906返回完整的任务记录,或在找不到 ID 时返回 `null`。

2858 2907 

2859<h3 id="tasklist">2908<h3 id="tasklist-1">

2860 TaskList2909 TaskList

2861</h3>2910</h3>

2862 2911 


2876 2925 

2877返回当前列表中所有任务的快照。2926返回当前列表中所有任务的快照。

2878 2927 

2879<h3 id="exitplanmode">2928<h3 id="exitplanmode-1">

2880 ExitPlanMode2929 ExitPlanMode

2881</h3>2930</h3>

2882 2931 


2895 2944 

2896返回退出规划模式后的计划状态。2945返回退出规划模式后的计划状态。

2897 2946 

2898<h3 id="listmcpresources">2947<h3 id="listmcpresources-1">

2899 ListMcpResources2948 ListMcpResources

2900</h3>2949</h3>

2901 2950 


2913 2962 

2914返回可用 MCP 资源的数组。2963返回可用 MCP 资源的数组。

2915 2964 

2916<h3 id="readmcpresource">2965<h3 id="readmcpresource-1">

2917 ReadMcpResource2966 ReadMcpResource

2918</h3>2967</h3>

2919 2968 


2931 2980 

2932返回请求的 MCP 资源的内容。2981返回请求的 MCP 资源的内容。

2933 2982 

2934<h3 id="enterworktree">2983<h3 id="enterworktree-1">

2935 EnterWorktree2984 EnterWorktree

2936</h3>2985</h3>

2937 2986 


3010type PermissionUpdateDestination =3059type PermissionUpdateDestination =

3011 | "userSettings" // 全局用户设置3060 | "userSettings" // 全局用户设置

3012 | "projectSettings" // 每个目录的项目设置3061 | "projectSettings" // 每个目录的项目设置

3013 | "localSettings" // Gitignored 本地设置3062 | "localSettings" // 本地项目设置

3014 | "session" // 仅当前会话3063 | "session" // 仅当前会话

3015 | "cliArg"; // CLI 参数3064 | "cliArg"; // CLI 参数

3016```3065```


3049```3098```

3050 3099 

3051<Warning>3100<Warning>

3052 `context-1m-2025-08-07` beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此值无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 [Claude Sonnet 4.6、Claude Opus 4.6 或 Claude Opus 4.7](https://platform.claude.com/docs/zh-CN/about-claude/models/overview),它们以标准定价包括 1M 上下文,无需 beta 标头。3101 `context-1m-2025-08-07` beta 自 2026 年 4 月 30 日起已停用。使用 Claude Sonnet 4.5 或 Sonnet 4 传递此值无效,超过标准 200k 令牌上下文窗口的请求返回错误。要使用 1M 令牌上下文窗口,请迁移到 [Claude Sonnet 4.6、Claude Opus 4.6、Claude Opus 4.7 或 Claude Opus 4.8](https://platform.claude.com/docs/zh-CN/about-claude/models/overview),它们以标准定价包括 1M 上下文,无需 beta 标头。

3053</Warning>3102</Warning>

3054 3103 

3055<h3 id="slashcommand">3104<h3 id="slashcommand">


3241```typescript theme={null}3290```typescript theme={null}

3242type CallToolResult = {3291type CallToolResult = {

3243 content: Array<{3292 content: Array<{

3244 type: "text" | "image" | "resource";3293 type: "text" | "image" | "audio" | "resource" | "resource_link";

3245 // 其他字段因类型而异3294 // 其他字段因类型而异

3246 }>;3295 }>;

3247 structuredContent?: Record<string, unknown>;3296 structuredContent?: Record<string, unknown>;

Details

16 16 

17本指南向您展示如何检测每种类型的请求并做出适当的响应。17本指南向您展示如何检测每种类型的请求并做出适当的响应。

18 18 

19## 检测 Claude 何时需要输入19<h2 id="detect-when-claude-needs-input">

20 检测 Claude 何时需要输入

21</h2>

20 22 

21在您的查询选项中传递 `canUseTool` 回调。每当 Claude 需要用户输入时,回调就会触发,接收工具名称和输入作为参数:23在您的查询选项中传递 `canUseTool` 回调。每当 Claude 需要用户输入时,回调就会触发,接收工具名称和输入作为参数:

22 24 


49 要自动允许或拒绝工具而不提示用户,请改用 [hooks](/zh-CN/agent-sdk/hooks)。Hooks 在 `canUseTool` 之前执行,可以根据您自己的逻辑允许、拒绝或修改请求。您还可以使用 [`PermissionRequest` hook](/zh-CN/agent-sdk/hooks#available-hooks) 在 Claude 等待批准时发送外部通知(Slack、电子邮件、推送)。51 要自动允许或拒绝工具而不提示用户,请改用 [hooks](/zh-CN/agent-sdk/hooks)。Hooks 在 `canUseTool` 之前执行,可以根据您自己的逻辑允许、拒绝或修改请求。您还可以使用 [`PermissionRequest` hook](/zh-CN/agent-sdk/hooks#available-hooks) 在 Claude 等待批准时发送外部通知(Slack、电子邮件、推送)。

50</Note>52</Note>

51 53 

52## 处理工具批准请求54<h2 id="handle-tool-approval-requests">

55 处理工具批准请求

56</h2>

53 57 

54一旦您在查询选项中传递了 `canUseTool` 回调,当 Claude 想要使用不被自动批准的工具时,它就会触发。您的回调接收三个参数:58一旦您在查询选项中传递了 `canUseTool` 回调,当 Claude 想要使用不被自动批准的工具时,它就会触发。您的回调接收三个参数:

55 59 


197 201 

198此示例使用 y/n 流,其中除 `y` 之外的任何输入都被视为拒绝。在实践中,您可能会构建一个更丰富的 UI,让用户修改请求、提供反馈或完全重定向 Claude。有关所有响应方式,请参阅[响应工具请求](#respond-to-tool-requests)。202此示例使用 y/n 流,其中除 `y` 之外的任何输入都被视为拒绝。在实践中,您可能会构建一个更丰富的 UI,让用户修改请求、提供反馈或完全重定向 Claude。有关所有响应方式,请参阅[响应工具请求](#respond-to-tool-requests)。

199 203 

200### 响应工具请求204<h3 id="respond-to-tool-requests">

205 响应工具请求

206</h3>

201 207 

202您的回调返回两种响应类型之一:208您的回调返回两种响应类型之一:

203 209 


407 </Tab>413 </Tab>

408</Tabs>414</Tabs>

409 415 

410## 处理澄清问题416<h2 id="handle-clarifying-questions">

417 处理澄清问题

418</h2>

411 419 

412当 Claude 需要在具有多个有效方法的任务上获得更多指导时,它会调用 `AskUserQuestion` 工具。这会触发您的 `canUseTool` 回调,其中 `toolName` 设置为 `AskUserQuestion`。输入包含 Claude 的问题作为多选选项,您向用户显示这些问题并返回他们的选择。420当 Claude 需要在具有多个有效方法的任务上获得更多指导时,它会调用 `AskUserQuestion` 工具。这会触发您的 `canUseTool` 回调,其中 `toolName` 设置为 `AskUserQuestion`。输入包含 Claude 的问题作为多选选项,您向用户显示这些问题并返回他们的选择。

413 421 


551 </Step>559 </Step>

552</Steps>560</Steps>

553 561 

554### 问题格式562<h3 id="question-format">

563 问题格式

564</h3>

555 565 

556输入包含 Claude 在 `questions` 数组中生成的问题。每个问题都有这些字段:566输入包含 Claude 在 `questions` 数组中生成的问题。每个问题都有这些字段:

557 567 

558| 字段 | 描述 |568| 字段 | 描述 |

559| ------------- | ------------------------------------------------------------------------------------------------------ |569| ------------- | ----------------------------------------------------------------------------------------------------- |

560| `question` | 要显示的完整问题文本 |570| `question` | 要显示的完整问题文本 |

561| `header` | 问题的短标签(最多 12 个字符) |571| `header` | 问题的短标签(最多 12 个字符) |

562| `options` | 2-4 个选择的数组,每个都有 `label` 和 `description`。TypeScript:可选 `preview`(请参阅[下文](#option-previews-type-script)) |572| `options` | 2-4 个选择的数组,每个都有 `label` 和 `description`。TypeScript:可选 `preview`(请参阅[下文](#option-previews-typescript)) |

563| `multiSelect` | 如果为 `true`,用户可以选择多个选项 |573| `multiSelect` | 如果为 `true`,用户可以选择多个选项 |

564 574 

565您的回调接收的结构:575您的回调接收的结构:


580}590}

581```591```

582 592 

583#### 选项预览 (TypeScript)593<h4 id="option-previews-typescript">

594 选项预览 (TypeScript)

595</h4>

584 596 

585`toolConfig.askUserQuestion.previewFormat` 向每个选项添加 `preview` 字段,以便您的应用可以在标签旁显示视觉模型。没有此设置,Claude 不会生成预览,该字段不存在。597`toolConfig.askUserQuestion.previewFormat` 向每个选项添加 `preview` 字段,以便您的应用可以在标签旁显示视觉模型。没有此设置,Claude 不会生成预览,该字段不存在。

586 598 


621}633}

622```634```

623 635 

624### 响应格式636<h3 id="response-format">

637 响应格式

638</h3>

625 639 

626返回 `answers` 对象,将每个问题的 `question` 字段映射到所选选项的 `label`:640返回 `answers` 对象,将每个问题的 `question` 字段映射到所选选项的 `label`:

627 641 


645}659}

646```660```

647 661 

648#### 支持自由文本输入662<h4 id="support-free-text-input">

663 支持自由文本输入

664</h4>

649 665 

650Claude 的预定义选项并不总是涵盖用户想要的内容。要让用户输入自己的答案:666Claude 的预定义选项并不总是涵盖用户想要的内容。要让用户输入自己的答案:

651 667 


654 670 

655有关完整实现,请参阅下面的[完整示例](#complete-example)。671有关完整实现,请参阅下面的[完整示例](#complete-example)。

656 672 

657### 完整示例673<h3 id="complete-example">

674 完整示例

675</h3>

658 676 

659当 Claude 需要用户输入来继续时,它会提出澄清问题。例如,当被要求帮助为移动应用程序决定技术栈时,Claude 可能会询问跨平台与原生、后端偏好或目标平台。这些问题帮助 Claude 做出与用户偏好相匹配的决定,而不是猜测。677当 Claude 需要用户输入来继续时,它会提出澄清问题。例如,当被要求帮助为移动应用程序决定技术栈时,Claude 可能会询问跨平台与原生、后端偏好或目标平台。这些问题帮助 Claude 做出与用户偏好相匹配的决定,而不是猜测。

660 678 


821 ```839 ```

822</CodeGroup>840</CodeGroup>

823 841 

824## 限制842<h2 id="limitations">

843 限制

844</h2>

825 845 

826* **子代理**:`AskUserQuestion` 目前在通过 Agent 工具生成的子代理中不可用846* **子代理**:`AskUserQuestion` 目前在通过 Agent 工具生成的子代理中不可用

827* **问题限制**:每个 `AskUserQuestion` 调用支持 1-4 个问题,每个 2-4 个选项847* **问题限制**:每个 `AskUserQuestion` 调用支持 1-4 个问题,每个 2-4 个选项

828 848 

829## 获取用户输入的其他方式849<h2 id="other-ways-to-get-user-input">

850 获取用户输入的其他方式

851</h2>

830 852 

831`canUseTool` 回调和 `AskUserQuestion` 工具涵盖了大多数批准和澄清场景,但 SDK 提供了其他从用户获取输入的方式:853`canUseTool` 回调和 `AskUserQuestion` 工具涵盖了大多数批准和澄清场景,但 SDK 提供了其他从用户获取输入的方式:

832 854 

833### 流输入855<h3 id="streaming-input">

856 流输入

857</h3>

834 858 

835当您需要以下情况时,使用[流输入](/zh-CN/agent-sdk/streaming-vs-single-mode):859当您需要以下情况时,使用[流输入](/zh-CN/agent-sdk/streaming-vs-single-mode):

836 860 


840 864 

841流输入非常适合对话式 UI,用户在整个执行过程中与代理交互,而不仅仅在批准检查点。865流输入非常适合对话式 UI,用户在整个执行过程中与代理交互,而不仅仅在批准检查点。

842 866 

843### 自定义工具867<h3 id="custom-tools">

868 自定义工具

869</h3>

844 870 

845当您需要以下情况时,使用[自定义工具](/zh-CN/agent-sdk/custom-tools):871当您需要以下情况时,使用[自定义工具](/zh-CN/agent-sdk/custom-tools):

846 872 


850 876 

851自定义工具让您完全控制交互,但需要比使用内置 `canUseTool` 回调更多的实现工作。877自定义工具让您完全控制交互,但需要比使用内置 `canUseTool` 回调更多的实现工作。

852 878 

853## 相关资源879<h2 id="related-resources">

880 相关资源

881</h2>

854 882 

855* [配置权限](/zh-CN/agent-sdk/permissions):设置权限模式和规则883* [配置权限](/zh-CN/agent-sdk/permissions):设置权限模式和规则

856* [使用 hooks 控制执行](/zh-CN/agent-sdk/hooks):在代理生命周期的关键点运行自定义代码884* [使用 hooks 控制执行](/zh-CN/agent-sdk/hooks):在代理生命周期的关键点运行自定义代码

agent-teams.md +143 −77

Details

7> 协调多个 Claude Code 实例作为一个团队一起工作,具有共享任务、代理间消息传递和集中管理。7> 协调多个 Claude Code 实例作为一个团队一起工作,具有共享任务、代理间消息传递和集中管理。

8 8 

9<Warning>9<Warning>

10 Agent teams 是实验性功能,默认禁用。通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 添加到你的 [settings.json](/zh-CN/settings) 或环境变量来启用它们。Agent teams 在 [已知限制](#limitations) 中存在关于会话恢复、任务协调和关闭行为的问题。10 Agent teams 是实验性功能,默认禁用。通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 添加到你的 [settings.json](/zh-CN/settings) 或环境变量来启用它们。如果没有该变量,会话启动时不会设置任何团队,不会写入团队目录,Claude 也不会生成或提议队友。Agent teams 在 [已知限制](#limitations) 中存在关于会话恢复、任务协调和关闭行为的问题。

11</Warning>11</Warning>

12 12 

13Agent teams 让你协调多个 Claude Code 实例一起工作。一个会话充当团队负责人,协调工作、分配任务和综合结果。队友独立工作,每个都在自己的 context window 中,并直接相互通信。13Agent teams 让你协调多个 Claude Code 实例一起工作。一个会话充当团队负责人,协调工作、分配任务和综合结果。队友独立工作,每个都在自己的 context window 中,并直接相互通信。


15与 [subagents](/zh-CN/sub-agents) 不同,subagents 在单个会话中运行,只能向主代理报告,你也可以直接与个别队友互动,无需通过负责人。15与 [subagents](/zh-CN/sub-agents) 不同,subagents 在单个会话中运行,只能向主代理报告,你也可以直接与个别队友互动,无需通过负责人。

16 16 

17<Note>17<Note>

18 Agent teams 需要 Claude Code v2.1.32 或更高版本。使用 `claude --version` 检查你的版本18 本页描述的是 v2.1.178 版本的 agent teams。设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 后,生成队友不再需要设置步骤,会话退出时会自动清理。在 v2.1.178 之前,你需要要求 Claude 先创建并命名一个团队,Claude 使用 `TeamCreate` 和 `TeamDelete` 工具来设置和删除它。这两个工具已不再存在。Agent 工具上的 `team_name` 输入被接受但被忽略,`TaskCreated`、`TaskCompleted` 和 `TeammateIdle` [hook payloads](/zh-CN/hooks#taskcreated) 中的 `team_name` 字段携带会话派生的名称,已被弃用

19</Note>19</Note>

20 20 

21本页涵盖:21本页涵盖:


25* [控制队友](#control-your-agent-team),包括显示模式、任务分配和委派25* [控制队友](#control-your-agent-team),包括显示模式、任务分配和委派

26* [并行工作的最佳实践](#best-practices)26* [并行工作的最佳实践](#best-practices)

27 27 

28## 何时使用 agent teams28<h2 id="when-to-use-agent-teams">

29 何时使用 agent teams

30</h2>

29 31 

30Agent teams 最适合用于并行探索能增加真实价值的任务。有关完整场景,请参阅 [用例示例](#use-case-examples)。最强的用例是:32Agent teams 最适合用于并行探索能增加真实价值的任务。有关完整场景,请参阅 [用例示例](#use-case-examples)。最强的用例是:

31 33 


36 38 

37Agent teams 增加了协调开销,使用的令牌数量明显多于单个会话。当队友可以独立运作时,它们效果最好。对于顺序任务、同一文件编辑或有许多依赖关系的工作,单个会话或 [subagents](/zh-CN/sub-agents) 更有效。39Agent teams 增加了协调开销,使用的令牌数量明显多于单个会话。当队友可以独立运作时,它们效果最好。对于顺序任务、同一文件编辑或有许多依赖关系的工作,单个会话或 [subagents](/zh-CN/sub-agents) 更有效。

38 40 

39### 与 subagents 比较41<h3 id="compare-with-subagents">

42 与 subagents 比较

43</h3>

40 44 

41Agent teams 和 [subagents](/zh-CN/sub-agents) 都让你并行化工作,但它们的运作方式不同。根据你的工作人员是否需要相互通信来选择:45Agent teams 和 [subagents](/zh-CN/sub-agents) 都让你并行化工作,但它们的运作方式不同。根据你的工作人员是否需要相互通信来选择:

42 46 


56 60 

57当你需要快速、专注的工作人员报告结果时,使用 subagents。当队友需要分享发现、相互质疑和自我协调时,使用 agent teams。61当你需要快速、专注的工作人员报告结果时,使用 subagents。当队友需要分享发现、相互质疑和自我协调时,使用 agent teams。

58 62 

59## 启用 agent teams63<h2 id="enable-agent-teams">

64 启用 agent teams

65</h2>

60 66 

61Agent teams 默认禁用。通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 环境变量设置为 `1`,在你的 shell 环境中或通过 [settings.json](/zh-CN/settings) 来启用它:67Agent teams 默认禁用。通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 环境变量设置为 `1`,在你的 shell 环境中或通过 [settings.json](/zh-CN/settings) 来启用它:

62 68 


68}74}

69```75```

70 76 

71## 启动你的第一个 agent team77<h2 id="start-your-first-agent-team">

78 启动你的第一个 agent team

79</h2>

72 80 

73启用 agent teams 后,告诉 Claude 创建一个 agent team,并用自然语言描述你想要的任务和团队结构。Claude 创建团队、生成队友并根据你的提示协调工作81启用 agent teams 后,用自然语言描述你想要的任务和队友。Claude 会生成他们并根据你的提示协调工作

74 82 

75这个例子效果很好,因为三个角色是独立的,可以在不相互等待的情况下探索问题:83这个例子效果很好,因为三个角色是独立的,可以在不相互等待的情况下探索问题:

76 84 

77```text theme={null}85```text theme={null}

78I'm designing a CLI tool that helps developers track TODO comments across86I'm designing a CLI tool that helps developers track TODO comments across

79their codebase. Create an agent team to explore this from different angles: one87their codebase. Spawn three teammates to explore this from different angles:

80teammate on UX, one on technical architecture, one playing devil's advocate.88one on UX, one on technical architecture, one playing devil's advocate.

81```89```

82 90 

83从那里,Claude 创建一个具有 [共享任务列表](/zh-CN/interactive-mode#task-list) 的团队,为每个角度生成队友,让他们探索问题,综合发现,并在完成时尝试 [清理团队](#clean-up-the-team)91从那里,Claude 会填充一个 [共享任务列表](/zh-CN/interactive-mode#task-list),为每个角度生成队友,让他们探索问题,并在完成时综合发现

84 92 

85负责人的终端列出所有队友及其正在处理的工作。使用 Shift+Down 循环浏览队友并直接向他们发送消息。在最后一个队友之后,Shift+Down 会回到负责人。93负责人的终端列出所有队友及其正在处理的工作。使用 Shift+Down 循环浏览队友并直接向他们发送消息。在最后一个队友之后,Shift+Down 会回到负责人。

86 94 

87如果你想让每个队友在自己的分割窗格中,请参阅 [选择显示模式](#choose-a-display-mode)。95如果你想让每个队友在自己的分割窗格中,请参阅 [选择显示模式](#choose-a-display-mode)。

88 96 

89## 控制你的 agent team97<h2 id="control-your-agent-team">

98 控制你的 agent team

99</h2>

90 100 

91用自然语言告诉负责人你想要什么。它根据你的指示处理团队协调、任务分配和委派。101用自然语言告诉负责人你想要什么。它根据你的指示处理团队协调、任务分配和委派。

92 102 

93### 选择显示模式103<h3 id="choose-a-display-mode">

104 选择显示模式

105</h3>

94 106 

95Agent teams 支持两种显示模式:107Agent teams 支持两种显示模式:

96 108 


101 `tmux` 在某些操作系统上有已知限制,传统上在 macOS 上效果最好。在 iTerm2 中使用 `tmux -CC` 是进入 `tmux` 的建议入口点。113 `tmux` 在某些操作系统上有已知限制,传统上在 macOS 上效果最好。在 iTerm2 中使用 `tmux -CC` 是进入 `tmux` 的建议入口点。

102</Note>114</Note>

103 115 

104默认值是 `"auto"`,如果你已经在 tmux 会话中运行,则使用分割窗格,否则使用 in-process。`"tmux"` 设置启用分割窗格模式,并根据你的终端自动检测是使用 tmux 还是 iTerm2。要覆盖,在 `~/.claude/settings.json` 中设置 [`teammateMode`](/zh-CN/settings#available-settings):116默认值是 `"auto"`,如果你已经在 tmux 会话中运行或你的终端是 iTerm2,则使用分割窗格,否则使用 in-process。`"tmux"` 设置启用分割窗格模式,并根据你的终端自动检测是使用 tmux 还是 iTerm2。要覆盖,在 `~/.claude/settings.json` 中设置 [`teammateMode`](/zh-CN/settings#available-settings):

105 117 

106```json theme={null}118```json theme={null}

107{119{


120* **tmux**:通过你的系统包管理器安装。有关特定于平台的说明,请参阅 [tmux wiki](https://github.com/tmux/tmux/wiki/Installing)。132* **tmux**:通过你的系统包管理器安装。有关特定于平台的说明,请参阅 [tmux wiki](https://github.com/tmux/tmux/wiki/Installing)。

121* **iTerm2**:安装 [`it2` CLI](https://github.com/mkusaka/it2),然后在 **iTerm2 → Settings → General → Magic → Enable Python API** 中启用 Python API。133* **iTerm2**:安装 [`it2` CLI](https://github.com/mkusaka/it2),然后在 **iTerm2 → Settings → General → Magic → Enable Python API** 中启用 Python API。

122 134 

123### 指定队友和模型135<h3 id="specify-teammates-and-models">

136 指定队友和模型

137</h3>

124 138 

125Claude 根据你的任务决定要生成的队友数量,或者你可以指定你想要的确切内容:139Claude 根据你的任务决定要生成的队友数量,或者你可以指定你想要的确切内容:

126 140 

127```text theme={null}141```text theme={null}

128Create a team with 4 teammates to refactor these modules in parallel.142Spawn 4 teammates to refactor these modules in parallel. Use Sonnet for

129Use Sonnet for each teammate.143each teammate.

130```144```

131 145 

132队友默认不继承负责人的 `/model` 选择。要更改在提示未指定模型时使用的模型,在 `/config` 中设置**默认队友模型**。选择\*\*默认(负责人的模型)\*\*以让队友遵循负责人的当前模型。146队友默认不继承负责人的 `/model` 选择。要更改在提示未指定模型时使用的模型,在 `/config` 中设置**默认队友模型**。选择\*\*默认(负责人的模型)\*\*以让队友遵循负责人的当前模型。

133 147 

134### 要求队友的计划批准148<h3 id="require-plan-approval-for-teammates">

149 要求队友的计划批准

150</h3>

135 151 

136对于复杂或有风险的任务,你可以要求队友在实施前进行规划。队友在只读计划模式下工作,直到负责人批准他们的方法:152对于复杂或有风险的任务,你可以要求队友在实施前进行规划。队友在只读计划模式下工作,直到负责人批准他们的方法:

137 153 


144 160 

145负责人自主做出批准决定。要影响负责人的判断,在你的提示中给出标准,例如"仅批准包括测试覆盖的计划"或"拒绝修改数据库架构的计划"。161负责人自主做出批准决定。要影响负责人的判断,在你的提示中给出标准,例如"仅批准包括测试覆盖的计划"或"拒绝修改数据库架构的计划"。

146 162 

147### 直接与队友交谈163<h3 id="talk-to-teammates-directly">

164 直接与队友交谈

165</h3>

148 166 

149每个队友都是一个完整的、独立的 Claude Code 会话。你可以直接向任何队友发送消息,以提供额外的指示、提出后续问题或改变他们的方法。167每个队友都是一个完整的、独立的 Claude Code 会话。你可以直接向任何队友发送消息,以提供额外的指示、提出后续问题或改变他们的方法。

150 168 

151* **In-process 模式**:使用 Shift+Down 循环浏览队友,然后输入向他们发送消息。按 Enter 查看队友的会话,然后按 Escape 中断他们的当前轮次。按 Ctrl+T 切换任务列表。169* **In-process 模式**:使用 Shift+Down 循环浏览队友,然后输入向他们发送消息。按 Enter 查看队友的会话,然后按 Escape 中断他们的当前轮次。按 Ctrl+T 切换任务列表。

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

153 171 

154### 分配和认领任务172<h3 id="assign-and-claim-tasks">

173 分配和认领任务

174</h3>

155 175 

156共享任务列表协调整个团队的工作。负责人创建任务,队友完成它们。任务有三种状态:待处理、进行中和已完成。任务也可以依赖其他任务:具有未解决依赖关系的待处理任务在这些依赖关系完成之前无法被认领。176共享任务列表协调整个团队的工作。负责人创建任务,队友完成它们。任务有三种状态:待处理、进行中和已完成。任务也可以依赖其他任务:具有未解决依赖关系的待处理任务在这些依赖关系完成之前无法被认领。

157 177 


162 182 

163任务认领使用文件锁定来防止多个队友同时尝试认领同一任务时的竞态条件。183任务认领使用文件锁定来防止多个队友同时尝试认领同一任务时的竞态条件。

164 184 

165### 关闭队友185<h3 id="shut-down-teammates">

186 关闭队友

187</h3>

166 188 

167要优雅地结束队友的会话:189要优雅地结束队友的会话,按名称引用它。例如,对于一个名为 researcher 的队友

168 190 

169```text theme={null}191```text theme={null}

170Ask the researcher teammate to shut down192Ask the researcher teammate to shut down

171```193```

172 194 

173负责人发送关闭请求。队友可以批准并优雅地退出,或拒绝并提供解释。195负责人发送关闭请求。队友可以批准优雅地退出,或拒绝并提供解释。

174 196 

175### 清理团队197团队的共享目录在会话结束时自动清理,因此没有单独的清理步骤。请参阅[架构](#architecture)了解哪些目录被删除以及哪些目录为恢复的会话保留。

176 198 

177完成后,要求负责人清理:199<h3 id="enforce-quality-gates-with-hooks">

178 200 使用 hooks 强制质量门

179```text theme={null}201</h3>

180Clean up the team

181```

182 

183这会删除共享的团队资源。当负责人运行清理时,它会检查活跃的队友,如果仍有任何队友在运行,则失败,所以先关闭他们。

184 

185<Warning>

186 始终使用负责人进行清理。队友不应该运行清理,因为他们的团队 context 可能无法正确解析,可能会使资源处于不一致的状态。

187</Warning>

188 

189### 使用 hooks 强制质量门

190 202 

191使用 [hooks](/zh-CN/hooks) 在队友完成工作或任务创建或完成时强制执行规则:203使用 [hooks](/zh-CN/hooks) 在队友完成工作或任务创建或完成时强制执行规则:

192 204 


194* [`TaskCreated`](/zh-CN/hooks#taskcreated):当任务被创建时运行。以代码 2 退出以防止创建并发送反馈。206* [`TaskCreated`](/zh-CN/hooks#taskcreated):当任务被创建时运行。以代码 2 退出以防止创建并发送反馈。

195* [`TaskCompleted`](/zh-CN/hooks#taskcompleted):当任务被标记为完成时运行。以代码 2 退出以防止完成并发送反馈。207* [`TaskCompleted`](/zh-CN/hooks#taskcompleted):当任务被标记为完成时运行。以代码 2 退出以防止完成并发送反馈。

196 208 

197## Agent teams 如何工作209<h2 id="how-agent-teams-work">

210 Agent teams 如何工作

211</h2>

198 212 

199本部分涵盖 agent teams 背后的架构和机制。如果你想开始使用它们,请参阅上面的 [控制你的 agent team](#control-your-agent-team)。213本部分涵盖 agent teams 背后的架构和机制。如果你想开始使用它们,请参阅上面的 [控制你的 agent team](#control-your-agent-team)。

200 214 

201### Claude 如何启动 agent teams215<h3 id="how-claude-starts-agent-teams">

216 Claude 如何启动 agent teams

217</h3>

202 218 

203Agent teams 有两种启动方式219当第一个队友被生成时,agent team 就形成了,主会话充当负责人。队友有两种方式被生成

204 220 

205* **你请求一个团队**:给 Claude 一个受益于并行工作的任务,并明确要求一个 agent team。Claude 根据你的指示创建一个221* **你请求队友**:给 Claude 一个受益于并行工作的任务,并明确要求队友。Claude 根据你的指示生成他们

206* **Claude 提议一个团队**:如果 Claude 确定你的任务将受益于并行工作,它可能会建议创建一个团队。你在它继续之前确认。222* **Claude 提议队友**:如果 Claude 确定你的任务将受益于并行工作,它可能会建议生成队友。你在它继续之前确认。

207 223 

208在这两种情况下,你都保持控制。Claude 不会在没有你的批准的情况下创建团队224在这两种情况下,你都保持控制。Claude 不会在没有你的批准的情况下生成队友

209 225 

210### 架构226<h3 id="architecture">

227 架构

228</h3>

211 229 

212Agent team 由以下部分组成:230Agent team 由以下部分组成:

213 231 

214| 组件 | 角色 |232| 组件 | 角色 |

215| :------------ | :------------------------------ |233| :------------ | :------------------------- |

216| **Team lead** | 创建团队、生成队友并协调工作的主 Claude Code 会话 |234| **Team lead** | 生成队友并协调工作的主 Claude Code 会话 |

217| **Teammates** | 各自处理分配任务的独立 Claude Code 实例 |235| **Teammates** | 各自处理分配任务的独立 Claude Code 实例 |

218| **Task list** | 队友认领和完成的共享工作项列表 |236| **Task list** | 队友认领和完成的共享工作项列表 |

219| **Mailbox** | 代理之间通信的消息系统 |237| **Mailbox** | 代理之间通信的消息系统 |


222 240 

223系统自动管理任务依赖关系。当队友完成其他任务依赖的任务时,被阻止的任务会自动解除阻止。241系统自动管理任务依赖关系。当队友完成其他任务依赖的任务时,被阻止的任务会自动解除阻止。

224 242 

225团队和任务存储在本地:243团队和任务存储在本地,名称来自会话派生的名称。名称是 `session-` 后跟会话 ID 的前八个字符

226 244 

227* **Team config**:`~/.claude/teams/{team-name}/config.json`245* **Team config**:`~/.claude/teams/{team-name}/config.json`

228* **Task list**:`~/.claude/tasks/{team-name}/`246* **Task list**:`~/.claude/tasks/{team-name}/`

229 247 

230Claude Code 在你创建团队时自动生成这两个,并在队友加入、空闲或离开时更新它们。团队配置保存运行时状态例如会话 ID 和 tmux 窗格 ID,所以不要手动编辑它或预先编写它:你的更改会在下一次状态更新时被覆盖248Claude Code 在会话启动时自动生成这两个,并在队友加入、空闲或离开时更新它们。团队配置目录在会话结束时被删除。任务列表目录在本地持久化永远不会上传,所以恢复的会话会保留它们的任务。保留期由你已经为会话记录控制的相同 [`cleanupPeriodDays`](/zh-CN/settings#available-settings) 管理

249 

250团队配置保存运行时状态,例如会话 ID 和 tmux 窗格 ID,所以不要手动编辑它或预先编写它:你的更改会在下一次状态更新时被覆盖。

231 251 

232要定义可重用的队友角色,请改用 [subagent 定义](#use-subagent-definitions-for-teammates)。252要定义可重用的队友角色,请改用 [subagent 定义](#use-subagent-definitions-for-teammates)。

233 253 


235 255 

236没有项目级别的团队配置等效项。项目目录中的 `.claude/teams/teams.json` 之类的文件不被识别为配置;Claude 将其视为普通文件。256没有项目级别的团队配置等效项。项目目录中的 `.claude/teams/teams.json` 之类的文件不被识别为配置;Claude 将其视为普通文件。

237 257 

238### 为队友使用 subagent 定义258<h3 id="use-subagent-definitions-for-teammates">

259 为队友使用 subagent 定义

260</h3>

239 261 

240生成队友时,你可以引用来自任何 [subagent 范围](/zh-CN/sub-agents#choose-the-subagent-scope) 的 [subagent](/zh-CN/sub-agents) 类型:项目、用户、插件或 CLI 定义。这让你定义一个角色一次,例如安全审查员或测试运行器,并将其同时重用为委派的 subagent 和 agent team 队友。262生成队友时,你可以引用来自任何 [subagent 范围](/zh-CN/sub-agents#choose-the-subagent-scope) 的 [subagent](/zh-CN/sub-agents) 类型:项目、用户、插件或 CLI 定义。这让你定义一个角色一次,例如安全审查员或测试运行器,并将其同时重用为委派的 subagent 和 agent team 队友。

241 263 


251 subagent 定义中的 `skills` 和 `mcpServers` frontmatter 字段在该定义作为队友运行时不被应用。队友从你的项目和用户设置加载 skills 和 MCP servers,与常规会话相同。273 subagent 定义中的 `skills` 和 `mcpServers` frontmatter 字段在该定义作为队友运行时不被应用。队友从你的项目和用户设置加载 skills 和 MCP servers,与常规会话相同。

252</Note>274</Note>

253 275 

254### 权限276<h3 id="permissions">

277 权限

278</h3>

255 279 

256队友从负责人的权限设置开始。如果负责人使用 `--dangerously-skip-permissions` 运行,所有队友也会这样做。生成后,你可以更改个别队友模式,但在生成时无法设置每个队友的模式。280队友从负责人的权限设置开始。如果负责人使用 `--dangerously-skip-permissions` 运行,所有队友也会这样做。生成后,你可以更改个别队友模式,但在生成时无法设置每个队友的模式。

257 281 

258### Context 和通信282<h3 id="context-and-communication">

283 Context 和通信

284</h3>

259 285 

260每个队友都有自己的 context window。生成时,队友加载与常规会话相同的项目 context:CLAUDE.md、MCP servers 和 skills。它还接收来自负责人的生成提示。负责人的对话历史不会继承。286每个队友都有自己的 context window。生成时,队友加载与常规会话相同的项目 context:CLAUDE.md、MCP servers 和 skills。它还接收来自负责人的生成提示。负责人的对话历史不会继承。

261 287 


268 294 

269负责人在生成队友时为其分配一个名称,任何队友都可以按该名称向任何其他队友发送消息。要获得可预测的名称,你可以在后续提示中引用,在你的生成指令中告诉负责人如何称呼每个队友。295负责人在生成队友时为其分配一个名称,任何队友都可以按该名称向任何其他队友发送消息。要获得可预测的名称,你可以在后续提示中引用,在你的生成指令中告诉负责人如何称呼每个队友。

270 296 

271### 令牌使用297<h3 id="token-usage">

298 令牌使用

299</h3>

272 300 

273Agent teams 使用的令牌数量明显多于单个会话。每个队友都有自己的 context window,令牌使用量随活跃队友数量而增加。对于研究、审查和新功能工作,额外的令牌通常是值得的。对于日常任务,单个会话更具成本效益。有关使用指导,请参阅 [agent team 令牌成本](/zh-CN/costs#agent-team-token-costs)。301Agent teams 使用的令牌数量明显多于单个会话。每个队友都有自己的 context window,令牌使用量随活跃队友数量而增加。对于研究、审查和新功能工作,额外的令牌通常是值得的。对于日常任务,单个会话更具成本效益。有关使用指导,请参阅 [agent team 令牌成本](/zh-CN/costs#agent-team-token-costs)。

274 302 

275## 用例示例303<h2 id="use-case-examples">

304 用例示例

305</h2>

276 306 

277这些示例展示了 agent teams 如何处理并行探索增加价值的任务。307这些示例展示了 agent teams 如何处理并行探索增加价值的任务。

278 308 

279### 运行并行代码审查309<h3 id="run-a-parallel-code-review">

310 运行并行代码审查

311</h3>

280 312 

281单个审查者往往一次只关注一种类型的问题。将审查标准分解为独立的领域意味着安全性、性能和测试覆盖都同时获得彻底的关注。提示为每个队友分配一个不同的视角,以便他们不重叠:313单个审查者往往一次只关注一种类型的问题。将审查标准分解为独立的领域意味着安全性、性能和测试覆盖都同时获得彻底的关注。提示为每个队友分配一个不同的视角,以便他们不重叠:

282 314 

283```text theme={null}315```text theme={null}

284Create an agent team to review PR #142. Spawn three reviewers:316Spawn three teammates to review PR #142:

285- One focused on security implications317- One focused on security implications

286- One checking performance impact318- One checking performance impact

287- One validating test coverage319- One validating test coverage


290 322 

291每个审查者从同一个 PR 工作,但应用不同的过滤器。负责人在他们完成后综合所有三个的发现。323每个审查者从同一个 PR 工作,但应用不同的过滤器。负责人在他们完成后综合所有三个的发现。

292 324 

293### 使用竞争假设进行调查325<h3 id="investigate-with-competing-hypotheses">

326 使用竞争假设进行调查

327</h3>

294 328 

295当根本原因不清楚时,单个代理往往会找到一个看似合理的解释并停止寻找。提示通过让队友明确对抗来对抗这一点:每个队友的工作不仅是调查自己的理论,还要质疑其他队友的理论。329当根本原因不清楚时,单个代理往往会找到一个看似合理的解释并停止寻找。提示通过让队友明确对抗来对抗这一点:每个队友的工作不仅是调查自己的理论,还要质疑其他队友的理论。

296 330 


305 339 

306有多个独立的调查者积极尝试相互反驳,存活下来的理论更有可能是实际的根本原因。340有多个独立的调查者积极尝试相互反驳,存活下来的理论更有可能是实际的根本原因。

307 341 

308## 最佳实践342<h2 id="best-practices">

343 最佳实践

344</h2>

309 345 

310### 给队友足够的 context346<h3 id="give-teammates-enough-context">

347 给队友足够的 context

348</h3>

311 349 

312队友自动加载项目 context,包括 CLAUDE.md、MCP servers 和 skills,但他们不继承负责人的对话历史。有关详细信息,请参阅 [Context 和通信](#context-and-communication)。在生成提示中包含特定于任务的详细信息:350队友自动加载项目 context,包括 CLAUDE.md、MCP servers 和 skills,但他们不继承负责人的对话历史。有关详细信息,请参阅 [Context 和通信](#context-and-communication)。在生成提示中包含特定于任务的详细信息:

313 351 


318httpOnly cookies. Report any issues with severity ratings."356httpOnly cookies. Report any issues with severity ratings."

319```357```

320 358 

321### 选择适当的团队规模359<h3 id="choose-an-appropriate-team-size">

360 选择适当的团队规模

361</h3>

322 362 

323队友数量没有硬限制,但实际限制适用:363队友数量没有硬限制,但实际限制适用:

324 364 


332 372 

333仅当工作真正受益于队友同时工作时才扩展。三个专注的队友通常胜过五个分散的队友。373仅当工作真正受益于队友同时工作时才扩展。三个专注的队友通常胜过五个分散的队友。

334 374 

335### 适当调整任务大小375<h3 id="size-tasks-appropriately">

376 适当调整任务大小

377</h3>

336 378 

337* **太小**:协调开销超过收益379* **太小**:协调开销超过收益

338* **太大**:队友长时间工作而不进行检查,增加浪费努力的风险380* **太大**:队友长时间工作而不进行检查,增加浪费努力的风险


342 负责人将工作分解为任务并自动分配给队友。如果它没有创建足够的任务,要求它将工作分成更小的部分。每个队友有 5-6 个任务可以让每个人保持生产力,并让负责人在有人卡住时重新分配工作。384 负责人将工作分解为任务并自动分配给队友。如果它没有创建足够的任务,要求它将工作分成更小的部分。每个队友有 5-6 个任务可以让每个人保持生产力,并让负责人在有人卡住时重新分配工作。

343</Tip>385</Tip>

344 386 

345### 等待队友完成387<h3 id="wait-for-teammates-to-finish">

388 等待队友完成

389</h3>

346 390 

347有时负责人开始自己实施任务,而不是等待队友。如果你注意到这一点:391有时负责人开始自己实施任务,而不是等待队友。如果你注意到这一点:

348 392 


350Wait for your teammates to complete their tasks before proceeding394Wait for your teammates to complete their tasks before proceeding

351```395```

352 396 

353### 从研究和审查开始397<h3 id="start-with-research-and-review">

398 从研究和审查开始

399</h3>

354 400 

355如果你是 agent teams 的新手,从具有明确边界且不需要编写代码的任务开始:审查 PR、研究库或调查错误。这些任务展示了并行探索的价值,而不会带来并行实施所带来的协调挑战。401如果你是 agent teams 的新手,从具有明确边界且不需要编写代码的任务开始:审查 PR、研究库或调查错误。这些任务展示了并行探索的价值,而不会带来并行实施所带来的协调挑战。

356 402 

357### 避免文件冲突403<h3 id="avoid-file-conflicts">

404 避免文件冲突

405</h3>

358 406 

359两个队友编辑同一文件会导致覆盖。分解工作,使每个队友拥有不同的文件集。407两个队友编辑同一文件会导致覆盖。分解工作,使每个队友拥有不同的文件集。

360 408 

361### 监控和指导409<h3 id="monitor-and-steer">

410 监控和指导

411</h3>

362 412 

363检查队友的进度,重定向不起作用的方法,并在发现时综合发现。让团队无人值守运行太长时间会增加浪费努力的风险。413检查队友的进度,重定向不起作用的方法,并在发现时综合发现。让团队无人值守运行太长时间会增加浪费努力的风险。

364 414 

365## 故障排除415<h2 id="troubleshooting">

416 故障排除

417</h2>

366 418 

367### 队友未出现419<h3 id="teammates-not-appearing">

420 队友未出现

421</h3>

368 422 

369如果在你要求 Claude 创建团队后队友没有出现423如果在你要求 Claude 创建队友后队友没有出现

370 424 

371* 在 in-process 模式中,队友可能已经在运行但不可见。按 Shift+Down 循环浏览活跃的队友。425* 在 in-process 模式中,队友可能已经在运行但不可见。按 Shift+Down 循环浏览活跃的队友。

372* 检查你给 Claude 的任务是否足够复杂以保证一个团队。Claude 根据任务决定是否生成队友。426* 检查你给 Claude 的任务是否足够复杂以保证需要队友。Claude 根据任务决定是否生成队友。

373* 如果你明确要求分割窗格,请确保 tmux 已安装并在你的 PATH 中可用:427* 如果你明确要求分割窗格,请确保 tmux 已安装并在你的 PATH 中可用:

374 ```bash theme={null}428 ```bash theme={null}

375 which tmux429 which tmux

376 ```430 ```

377* 对于 iTerm2,验证 `it2` CLI 已安装,并在 iTerm2 偏好设置中启用了 Python API。431* 对于 iTerm2,验证 `it2` CLI 已安装,并在 iTerm2 偏好设置中启用了 Python API。

378 432 

379### 过多权限提示433<h3 id="too-many-permission-prompts">

434 过多权限提示

435</h3>

380 436 

381队友权限请求冒泡到负责人,这可能会造成摩擦。在生成队友之前,在你的 [权限设置](/zh-CN/permissions) 中预批准常见操作,以减少中断。437队友权限请求冒泡到负责人,这可能会造成摩擦。在生成队友之前,在你的 [权限设置](/zh-CN/permissions) 中预批准常见操作,以减少中断。

382 438 

383### 队友在错误后停止439<h3 id="teammates-stopping-on-errors">

440 队友在错误后停止

441</h3>

384 442 

385队友可能在遇到错误后停止,而不是恢复。在 in-process 模式中使用 Shift+Down 或在分割模式中点击窗格来检查他们的输出,然后:443队友可能在遇到错误后停止,而不是恢复。在 in-process 模式中使用 Shift+Down 或在分割模式中点击窗格来检查他们的输出,然后:

386 444 

387* 直接给他们额外的指示445* 直接给他们额外的指示

388* 生成一个替代队友来继续工作446* 生成一个替代队友来继续工作

389 447 

390### 负责人在工作完成前关闭448<h3 id="lead-shuts-down-before-work-is-done">

449 负责人在工作完成前关闭

450</h3>

391 451 

392负责人可能会在所有任务实际完成之前决定团队已完成。如果发生这种情况,告诉它继续。你也可以告诉负责人在继续之前等待队友完成,如果它开始做工作而不是委派。452负责人可能会在所有任务实际完成之前决定团队已完成。如果发生这种情况,告诉它继续。你也可以告诉负责人在继续之前等待队友完成,如果它开始做工作而不是委派。

393 453 

394### 孤立的 tmux 会话454<h3 id="orphaned-tmux-sessions">

455 孤立的 tmux 会话

456</h3>

395 457 

396如果 tmux 会话在团队结束后仍然存在,它可能没有被完全清理。列出会话并杀死由团队创建的会话:458如果 tmux 会话在 Claude Code 会话结束后仍然存在,它可能没有被完全清理。列出会话并杀死由团队创建的会话:

397 459 

398```bash theme={null}460```bash theme={null}

399tmux ls461tmux ls

400tmux kill-session -t <session-name>462tmux kill-session -t <session-name>

401```463```

402 464 

403## 限制465<h2 id="limitations">

466 限制

467</h2>

404 468 

405Agent teams 是实验性的。需要注意的当前限制:469Agent teams 是实验性的。需要注意的当前限制:

406 470 

407* **In-process 队友没有会话恢复**:`/resume` 和 `/rewind` 不会恢复 in-process 队友。恢复会话后,负责人可能会尝试向不再存在的队友发送消息。如果发生这种情况,告诉负责人生成新队友。471* **In-process 队友没有会话恢复**:`/resume` 和 `/rewind` 不会恢复 in-process 队友。恢复会话后,负责人可能会尝试向不再存在的队友发送消息。如果发生这种情况,告诉负责人生成新队友。

408* **任务状态可能滞后**:队友有时无法将任务标记为已完成,这会阻止依赖任务。如果任务似乎卡住,检查工作是否实际完成,并手动更新任务状态或告诉负责人推动队友。472* **任务状态可能滞后**:队友有时无法将任务标记为已完成,这会阻止依赖任务。如果任务似乎卡住,检查工作是否实际完成,并手动更新任务状态或告诉负责人推动队友。

409* **关闭可能很慢**:队友在关闭前完成他们的当前请求或工具调用,这可能需要时间。473* **关闭可能很慢**:队友在关闭前完成他们的当前请求或工具调用,这可能需要时间。

410* **每个会话一个团队**:负责人一次只能管理一个团队在启动新团队之前清理当前团队474* **每个会话一个团队**:一个会话恰好有一个团队,作用域限于该会话你无法创建额外的命名团队或在会话间共享团队

411* **没有嵌套团队**:队友无法生成自己的团队或队友。只有负责人可以管理团队。475* **没有嵌套团队**:队友无法生成自己的队友。只有负责人可以管理团队。

412* **负责人是固定的**:创建团队的会话在其生命周期内是负责人。你无法将队友提升为负责人或转移领导权。476* **负责人是固定的**:主会话在其生命周期内是其团队的负责人。你无法将队友提升为负责人或转移领导权。

413* **权限在生成时设置**:所有队友从负责人的权限模式开始。你可以在生成后更改个别队友模式,但在生成时无法设置每个队友的模式。477* **权限在生成时设置**:所有队友从负责人的权限模式开始。你可以在生成后更改个别队友模式,但在生成时无法设置每个队友的模式。

414* **分割窗格需要 tmux 或 iTerm2**:默认 in-process 模式在任何终端中工作。VS Code 的集成终端、Windows Terminal 或 Ghostty 不支持分割窗格模式。478* **分割窗格需要 tmux 或 iTerm2**:默认 in-process 模式在任何终端中工作。VS Code 的集成终端、Windows Terminal 或 Ghostty 不支持分割窗格模式。

415 479 


417 **`CLAUDE.md` 正常工作**:队友从他们的工作目录读取 `CLAUDE.md` 文件。使用这个为所有队友提供项目特定的指导。481 **`CLAUDE.md` 正常工作**:队友从他们的工作目录读取 `CLAUDE.md` 文件。使用这个为所有队友提供项目特定的指导。

418</Tip>482</Tip>

419 483 

420## 后续步骤484<h2 id="next-steps">

485 后续步骤

486</h2>

421 487 

422探索用于并行工作和委派的相关方法:488探索用于并行工作和委派的相关方法:

423 489 

agent-view.md +16 −7

Details

143 143 

144每行中的单行摘要由 [Haiku-class 模型](/zh-CN/model-config)生成,所以该行可以告诉你会话正在做什么、需要什么或生成了什么,无需打开记录。当会话正在积极工作时,摘要最多每 15 秒刷新一次,加上每个回合结束时刷新一次。144每行中的单行摘要由 [Haiku-class 模型](/zh-CN/model-config)生成,所以该行可以告诉你会话正在做什么、需要什么或生成了什么,无需打开记录。当会话正在积极工作时,摘要最多每 15 秒刷新一次,加上每个回合结束时刷新一次。

145 145 

146从 v2.1.161 开始,当会话运行两个或更多并行工作项时,例如 subagents、后台 shell 命令或监视器,`done/total` 计数(例如 `2/5`)出现在摘要文本之前。

147 

146每次刷新是通过你的正常提供商的一个短 Haiku-class 请求,按与会话本身相同的[数据使用条款](/zh-CN/data-usage)计费和处理。在第三方提供商(如 Bedrock、Vertex AI、Microsoft Foundry 和自定义网关)上,当没有配置 Haiku 模型时,请求会回退到会话的主模型。设置 [`ANTHROPIC_DEFAULT_HAIKU_MODEL`](/zh-CN/model-config#environment-variables) 以在这些提供商上为这些摘要选择模型。148每次刷新是通过你的正常提供商的一个短 Haiku-class 请求,按与会话本身相同的[数据使用条款](/zh-CN/data-usage)计费和处理。在第三方提供商(如 Bedrock、Vertex AI、Microsoft Foundry 和自定义网关)上,当没有配置 Haiku 模型时,请求会回退到会话的主模型。设置 [`ANTHROPIC_DEFAULT_HAIKU_MODEL`](/zh-CN/model-config#environment-variables) 以在这些提供商上为这些摘要选择模型。

147 149 

148<h3 id="pull-request-status">150<h3 id="pull-request-status">


170 172 

171在选定的行上按 `Space` 打开窥视面板。它显示会话需要什么、其最近的输出和它打开的任何拉取请求。大多数时候这就足够了,你永远不需要打开完整的记录。173在选定的行上按 `Space` 打开窥视面板。它显示会话需要什么、其最近的输出和它打开的任何拉取请求。大多数时候这就足够了,你永远不需要打开完整的记录。

172 174 

175从 v2.1.161 开始,当会话运行并行工作项时,面板也会命名运行时间最长的一个以及它已经运行了多长时间,所以你可以看到会话在等待什么而无需附加。

176 

173在窥视面板中输入回复并按 `Enter` 将其发送到该会话。当会话提出多选问题时,窥视面板显示选项,你可以按数字键选择一个。对于其他被阻止的会话,按 `Tab` 用建议的回复填充输入,你可以在发送前编辑。用 `!` 前缀回复以发送 Bash 命令。177在窥视面板中输入回复并按 `Enter` 将其发送到该会话。当会话提出多选问题时,窥视面板显示选项,你可以按数字键选择一个。对于其他被阻止的会话,按 `Tab` 用建议的回复填充输入,你可以在发送前编辑。用 `!` 前缀回复以发送 Bash 命令。

174 178 

175启用[语音听写](/zh-CN/voice-dictation)后,在回复输入获得焦点时按住或点击你的推送通话键以听写回复而不是输入。同样的功能在 agent view 底部的调度输入中也有效。179启用[语音听写](/zh-CN/voice-dictation)后,在回复输入获得焦点时按住或点击你的推送通话键以听写回复而不是输入。同样的功能在 agent view 底部的调度输入中也有效。


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

225| `s:<state>` | 给定状态的会话,例如 `s:working`。也接受 `s:blocked` 用于等待你的所有内容 |229| `s:<state>` | 给定状态的会话,例如 `s:working`。也接受 `s:blocked` 用于等待你的所有内容 |

226| `#<number>` 或 PR URL | 处理该拉取请求的会话 |230| `#<number>` 或 PR URL | 处理该拉取请求的会话 |

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

227 232 

228<h3 id="keyboard-shortcuts">233<h3 id="keyboard-shortcuts">

229 快捷键234 快捷键


478每个后台会话有一个短 ID,你可以从 shell 使用。当你使用 `claude --bg` 启动会话时会打印该 ID,每个会话的 ID 是其在 `~/.claude/jobs/` 下的目录名。这些命令对于脚本编写或当你不想打开 agent view 时很有用。483每个后台会话有一个短 ID,你可以从 shell 使用。当你使用 `claude --bg` 启动会话时会打印该 ID,每个会话的 ID 是其在 `~/.claude/jobs/` 下的目录名。这些命令对于脚本编写或当你不想打开 agent view 时很有用。

479 484 

480| 命令 | 目的 |485| 命令 | 目的 |

481| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- |486| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

482| `claude agents` | 打开 agent view |487| `claude agents` | 打开 agent view |

483| `claude agents --cwd <path>` | 打开 agent view,范围限定为在 `<path>` 下启动的会话 |488| `claude agents --cwd <path>` | 打开 agent view,范围限定为在 `<path>` 下启动的会话 |

484| `claude agents --json` | 将活跃会话打印为 JSON 数组并退出。每个条目都有 `pid``cwd`、`kind` 和 `startedAt`,以及设置时的 `sessionId`、`name` 和 `status`。与 `--cwd <path>` 结合使用以进行过滤 |489| `claude agents --json` | 将活跃会话打印为 JSON 数组并退出:每个活跃会话,加上仍在工作或被阻止的后台会话,即使其进程已退出添加 `--all` 以也包括已完成的后台会话。每个条目都有 `cwd`、`kind` 和 `startedAt`。后台条目还有 `id`可与 `claude attach`/`logs`/`stop` 一起使用,以及 `state`:`working`、`blocked`、`done`、`failed` 或 `stopped` 之一。`pid` 和 `status` 仅在进程活跃时出现,当 status 为 `waiting` 时出现 `waitingFor`,说明会话被阻止的原因,例如 `permission prompt` 或 `input needed`;当设置时出现 `sessionId` 和 `name`。与 `--cwd <path>` 结合使用以进行过滤 |

485| `claude attach <id>` | 在此终端附加到会话 |490| `claude attach <id>` | 在此终端附加到会话 |

486| `claude logs <id>` | 打印会话的最近输出 |491| `claude logs <id>` | 打印会话的最近输出 |

487| `claude stop <id>` | 停止会话。也接受 `claude kill` |492| `claude stop <id>` | 停止会话。也接受 `claude kill` |

488| `claude respawn <id>` | 重新启动会话运行中或已停止,保持其对话完整,例如用于获取更新的 Claude Code 二进制文件 |493| `claude respawn <id>` | 重新启动会话运行中或已停止,保持其对话完整,例如用于获取更新的 Claude Code 二进制文件 |

489| `claude respawn --all` | 重新启动每个运行中的会话,例如一次性将所有会话移至更新的 Claude Code 二进制文件 |494| `claude respawn --all` | 重新启动每个运行中的会话,例如一次性将所有会话移至更新的 Claude Code 二进制文件 |

490| `claude rm <id>` | 从列表中删除会话。如果没有未提交的更改,会删除 Claude 为会话创建的 worktree;否则打印 worktree 路径以便你清理。保留你自己创建的 worktree。对话记录保存在你的本地机器上,并且仍然可以通过 `claude --resume` 访问 |495| `claude rm <id>` | 从列表中删除会话。如果没有未提交的更改,会删除 Claude 为会话创建的 worktree;否则打印 worktree 路径以便你清理。保留你自己创建的 worktree。对话记录保存在你的本地机器上,并且仍然可以通过 `claude --resume` 访问 |

491| `claude daemon status` | 打印 [supervisor](#the-supervisor-process) 的状态、版本、socket 目录和 worker 数量 |496| `claude daemon status` | 打印 [supervisor](#the-supervisor-process) 的状态、版本、socket 目录和 worker 数量 |


530 535 

531每个后台会话都设置了 `CLAUDE_JOB_DIR` 环境变量指向其 `~/.claude/jobs/<id>` 目录,因此会话运行的 shell 命令可以将临时文件写入 `$CLAUDE_JOB_DIR/tmp` 而不会与并行会话冲突。536每个后台会话都设置了 `CLAUDE_JOB_DIR` 环境变量指向其 `~/.claude/jobs/<id>` 目录,因此会话运行的 shell 命令可以将临时文件写入 `$CLAUDE_JOB_DIR/tmp` 而不会与并行会话冲突。

532 537 

533要在不直接读取文件的情况下检查此状态,请运行 `claude daemon status`。它报告监督进程是否可达、其进程 ID 和版本、套接字目录以及有多少后台会话处于活跃状态。`/doctor` 包括相同检查的摘要。在 Windows 上,当守护进程的管道密钥文件被锁定或无法读取时,`claude daemon status` 会显示底层文件错误,而不是报告通用连接失败。538要在不直接读取文件的情况下检查此状态,请运行 `claude daemon status`。它报告监督进程是否可达、其进程 ID 和版本、套接字目录以及有多少后台会话处于活跃状态。`/doctor` 包括相同检查的摘要。

539 

540该命令还会在运行的监督进程版本与你调用的 `claude` 版本不同时发出警告,这发生在监督进程尚未重新启动到新版本的更新之后。警告显示两个版本,并告诉你运行 `claude daemon stop --any` 以获取新版本。当 Claude Code 作为操作系统服务安装时,建议的命令是 `claude daemon stop` 不带该标志。

541 

542在 Windows 上,当守护进程的管道密钥文件被锁定或无法读取时,`claude daemon status` 会显示底层文件错误,而不是报告通用连接失败。

534 543 

535<h3 id="turn-off-agent-view">544<h3 id="turn-off-agent-view">

536 关闭 agent view545 关闭 agent view


556 565 

557在你调度你的第一个会话之前,agent view 显示一个简短的入门提示,在会话列表的位置显示示例提示。在底部的输入框中输入提示并按 `Enter` 来调度你的第一个会话。566在你调度你的第一个会话之前,agent view 显示一个简短的入门提示,在会话列表的位置显示示例提示。在底部的输入框中输入提示并按 `Enter` 来调度你的第一个会话。

558 567 

559<h3 id="cannot-open-agents-because-background-tasks-are-running">568<h3 id="cannot-open-agents-because-work-is-running-in-the-background">

560 无法打开代理,因为后台任务正在运行569 无法打开代理,因为后台工作正在运行

561</h3>570</h3>

562 571 

563如果按 `←` 来后台当前会话显示 `Cannot open agents — N background task(s) running`,说明会话有进行中的工作,例如子代理、动态工作流或后台 shell 命令,快捷键不会默默放弃它。运行 `/tasks` 来查看正在运行的内容,然后运行 `/bg` 来确认放弃它们。参见[从会话内部](#from-inside-a-session)了解后台时什么会转移,什么不会转移。572如果按 `←` 来后台当前会话显示 `Cannot open agents — N still running in the background`,说明会话有进行中的工作,例如子代理、动态工作流或后台 shell 命令,快捷键不会默默放弃它。运行 `/tasks` 来查看正在运行的内容,然后运行 `/bg` 来确认放弃它们。参见[从会话内部](#from-inside-a-session)了解后台时什么会转移,什么不会转移。

564 573 

565<h3 id="prompt-rejected-as-too-short">574<h3 id="prompt-rejected-as-too-short">

566 提示被拒绝,因为太短575 提示被拒绝,因为太短

agents.md +2 −2

Details

9[子代理](/zh-CN/sub-agents)、[代理视图](/zh-CN/agent-view)、[代理团队](/zh-CN/agent-teams) 和 [动态工作流](/zh-CN/workflows) 各自以不同的方式并行化工作。正确的选择取决于您是否想在每个对话中保持参与、交付任务并稍后检查,或让 Claude 为您协调一组工作人员。9[子代理](/zh-CN/sub-agents)、[代理视图](/zh-CN/agent-view)、[代理团队](/zh-CN/agent-teams) 和 [动态工作流](/zh-CN/workflows) 各自以不同的方式并行化工作。正确的选择取决于您是否想在每个对话中保持参与、交付任务并稍后检查,或让 Claude 为您协调一组工作人员。

10 10 

11| 方法 | 它提供什么 | 何时使用 |11| 方法 | 它提供什么 | 何时使用 |

12| :------------------------- | :--------------------------------------------------- | :----------------------------------------------------------------------- |12| :------------------------- | :---------------------------------------------- | :----------------------------------------------------------------------- |

13| [子代理](/zh-CN/sub-agents) | 在一个会话内的委派工作人员,在自己的上下文中执行辅助任务并返回摘要 | 辅助任务会用搜索结果、日志或文件内容淹没您的主对话,而您不会再次引用这些内容 |13| [子代理](/zh-CN/sub-agents) | 在一个会话内的委派工作人员,在自己的上下文中执行辅助任务并返回摘要 | 辅助任务会用搜索结果、日志或文件内容淹没您的主对话,而您不会再次引用这些内容 |

14| [代理视图](/zh-CN/agent-view) | 一个屏幕来分派和监控在后台运行的会话,使用 `claude agents` 打开。研究预览 | 您有多个独立任务,想要交付它们,一目了然地检查状态,并仅在需要时介入 |14| [代理视图](/zh-CN/agent-view) | 一个屏幕来分派和监控在后台运行的会话,使用 `claude agents` 打开。研究预览 | 您有多个独立任务,想要交付它们,一目了然地检查状态,并仅在需要时介入 |

15| [代理团队](/zh-CN/agent-teams) | 多个协调的会话,具有共享任务列表和代理间消息传递,由主导者管理。实验性功能,默认禁用 | 您希望 Claude 将项目分成多个部分、分配它们,并保持工作人员同步 |15| [代理团队](/zh-CN/agent-teams) | 多个协调的会话,具有共享任务列表和代理间消息传递,由主导者管理。实验性功能,默认禁用 | 您希望 Claude 将项目分成多个部分、分配它们,并保持工作人员同步 |

16| [动态工作流](/zh-CN/workflows) | 一个脚本,运行许多子代理并交叉检查其结果,用于一个太大而无法一次协调的工作或需要多次处理的工作。研究预览 | 一个任务对于少数几个子代理来说太大了,或者您想要对结果进行相互验证:代码库范围的审计、500 个文件的迁移、交叉检查的研究或从多个角度起草的计划 |16| [动态工作流](/zh-CN/workflows) | 一个脚本,运行许多子代理并交叉检查其结果,用于一个太大而无法一次协调的工作或需要多次处理的工作 | 一个任务对于少数几个子代理来说太大了,或者您想要对结果进行相互验证:代码库范围的审计、500 个文件的迁移、交叉检查的研究或从多个角度起草的计划 |

17 17 

18在每种方法中,工作人员都是 Claude 会话。要涉及不同的工具,请将其作为 [MCP server](/zh-CN/mcp) 公开给 Claude。18在每种方法中,工作人员都是 Claude 会话。要涉及不同的工具,请将其作为 [MCP server](/zh-CN/mcp) 公开给 Claude。

19 19 

Details

6 6 

7> 了解如何通过 Amazon Bedrock 配置 Claude Code,包括设置、IAM 配置和故障排除。7> 了解如何通过 Amazon Bedrock 配置 Claude Code,包括设置、IAM 配置和故障排除。

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79<ContactSalesCard surface="bedrock" />

80 

9<h2 id="prerequisites">81<h2 id="prerequisites">

10 前置条件82 前置条件

11</h2>83</h2>


141 "Credentials": {213 "Credentials": {

142 "AccessKeyId": "value",214 "AccessKeyId": "value",

143 "SecretAccessKey": "value",215 "SecretAccessKey": "value",

144 "SessionToken": "value"216 "SessionToken": "value",

217 "Expiration": "2026-01-01T00:00:00Z"

145 }218 }

146}219}

147```220```

148 221 

222`Expiration` 是可选的。{/* min-version: 2.1.176 */}从 Claude Code v2.1.176 开始,当命令返回有效的 ISO 8601 `Expiration` 时,Claude Code 会缓存凭证直到该时间前五分钟。没有它,或在更早的版本上,凭证被缓存一小时。

223 

149<h3 id="3-configure-claude-code">224<h3 id="3-configure-claude-code">

150 3. 配置 Claude Code225 3. 配置 Claude Code

151</h3>226</h3>


155```bash theme={null}230```bash theme={null}

156# 启用 Bedrock 集成231# 启用 Bedrock 集成

157export CLAUDE_CODE_USE_BEDROCK=1232export CLAUDE_CODE_USE_BEDROCK=1

158export AWS_REGION=us-east-1 # 或您首选的区域233export AWS_REGION=us-east-1 # 如果您的 AWS 配置文件已设置区域,则可选

159 234 

160# 可选:覆盖小型/快速模型 (Bedrock 和 Mantle) 的 AWS 区域。235# 可选:覆盖小型/快速模型 (Bedrock 和 Mantle) 的 AWS 区域。

161# 在 Bedrock 上,如果未设置 ANTHROPIC_DEFAULT_HAIKU_MODEL236# 在 Bedrock 上,如果未设置 ANTHROPIC_DEFAULT_HAIKU_MODEL


168 243 

169为 Claude Code 启用 Bedrock 时,请记住以下几点:244为 Claude Code 启用 Bedrock 时,请记住以下几点:

170 245 

171* `AWS_REGION` 是必需的环境变量。Claude Code 不会从 `.aws` 配置文件中读取此设置。246* {/* min-version: 2.1.172 */}从 v2.1.172 开始,您只需设置 `AWS_REGION` 来覆盖您的 AWS 配置文件的区域,或在您的配置文件没有区域时设置。Claude Code 按此顺序解析区域:

247 

248 * `AWS_REGION`

249 * `AWS_DEFAULT_REGION`

250 * 在您的活跃 AWS 配置文件上设置的 `region`,首先从 AWS 共享凭证文件读取,然后从共享配置文件读取,匹配 AWS SDK 优先级

251 * `us-east-1`

252 

253 活跃配置文件是 `AWS_PROFILE`(如果已设置),否则为 `default`。设置 `AWS_SHARED_CREDENTIALS_FILE` 或 `AWS_CONFIG_FILE` 以指向非默认文件路径。运行 `/status` 以查看解析的区域。当区域来自您的 AWS 配置文件或默认回退时,`/status` 也会注明来源。在 v2.1.171 及更早版本上,Claude Code 不读取 AWS 配置文件,因此请显式设置 `AWS_REGION`。

172* 使用 Bedrock 时,`/logout` 命令不可用,因为身份验证通过 AWS 凭证处理。254* 使用 Bedrock 时,`/logout` 命令不可用,因为身份验证通过 AWS 凭证处理。

173* WebSearch 工具在 Bedrock 上不可用。请参阅 [WebSearch 工具行为](/zh-CN/tools-reference#websearch-tool-behavior)。255* WebSearch 工具在 Bedrock 上不可用。请参阅 [WebSearch 工具行为](/zh-CN/tools-reference#websearch-tool-behavior)。

174* 您可以使用设置文件来处理环境变量,如 `AWS_PROFILE`,您不希望泄露给其他进程。请参阅[设置](/zh-CN/settings)了解更多信息。256* 您可以使用设置文件来处理环境变量,如 `AWS_PROFILE`,您不希望泄露给其他进程。请参阅[设置](/zh-CN/settings)了解更多信息。


178</h3>260</h3>

179 261 

180<Warning>262<Warning>

181 在部署到多个用户时固定特定的模型版本。如果不固定,模型别名(如 `sonnet` 和 `opus`)会解析为最新版本,当 Anthropic 发布更新时,您的 Bedrock 账户中可能还没有该版本。Claude Code 在启动时会[回退](#startup-model-checks)到上一个版本(如果最新版本不可用),但固定让您可以控制用户何时迁移到新模型。263 在部署到多个用户时固定特定的模型版本。如果不固定,模型别名(如 `sonnet` 和 `opus`)会解析为 Claude Code Bedrock 内置的默认值,这可能滞后于最新版本,并且可能在您的账户中还不可用。Claude Code 在启动时会[回退](#startup-model-checks)到上一个版本(如果默认版本不可用),但固定让您可以控制用户何时迁移到新模型。

182</Warning>264</Warning>

183 265 

184将这些环境变量设置为特定的 Bedrock 模型 ID。266将这些环境变量设置为特定的 Bedrock 模型 ID。


191export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'273export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

192```274```

193 275 

194这些变量使用跨区域推理配置文件 ID(带有 `us.` 前缀)。如果您使用不同的区域前缀或应用推理配置文件,请相应调整。有关当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。请参阅[模型配置](/zh-CN/model-config#pin-models-for-third-party-deployments)了解完整的环境变量列表。276这些变量使用跨区域推理配置文件 ID(带有 `us.` 前缀)。如果您使用不同的区域前缀或应用推理配置文件,请相应调整。在 AWS GovCloud 区域中,使用 `us-gov.` 前缀。有关当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。请参阅[模型配置](/zh-CN/model-config#pin-models-for-third-party-deployments)了解完整的环境变量列表。

195 277 

196Claude Code 使用这些默认模型当未设置固定变量时:278Claude Code 使用这些默认模型当未设置固定变量时:

197 279 


366export AWS_REGION=us-east-1448export AWS_REGION=us-east-1

367```449```

368 450 

369Claude Code 从 `AWS_REGION` 构造端点 URL。要为自定义端点或网关覆盖它,请设置 `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`。451Claude Code 从 AWS 区域构造端点 URL。{/* min-version: 2.1.172 */}从 v2.1.172 开始,区域的解析优先级与[上面的 Bedrock](#3-configure-claude-code) 相同;较早的版本仅使用 `AWS_REGION`。要为自定义端点或网关覆盖 URL,请设置 `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`。

370 452 

371在 Claude Code 内运行 `/status` 来确认。当 Mantle 处于活动状态时,提供者行显示 `Amazon Bedrock (Mantle)`。453在 Claude Code 内运行 `/status` 来确认。当 Mantle 处于活动状态时,提供者行显示 `Amazon Bedrock (Mantle)`。

372 454 

Details

136* **刷新间隔**:默认情况下,`apiKeyHelper` 在 5 分钟后或在 HTTP 401 响应时调用。设置 `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` 环境变量以获得自定义刷新间隔。136* **刷新间隔**:默认情况下,`apiKeyHelper` 在 5 分钟后或在 HTTP 401 响应时调用。设置 `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` 环境变量以获得自定义刷新间隔。

137* **缓慢助手通知**:如果 `apiKeyHelper` 返回密钥需要超过 10 秒,Claude Code 会在提示栏中显示警告通知,显示经过的时间。如果您经常看到此通知,请检查您的凭证脚本是否可以优化。137* **缓慢助手通知**:如果 `apiKeyHelper` 返回密钥需要超过 10 秒,Claude Code 会在提示栏中显示警告通知,显示经过的时间。如果您经常看到此通知,请检查您的凭证脚本是否可以优化。

138 138 

139`apiKeyHelper`、`ANTHROPIC_API_KEY` 和 `ANTHROPIC_AUTH_TOKEN` 仅适用于终端 CLI 会话。Claude Desktop 和远程会话仅使用 OAuth,不会调用 `apiKeyHelper` 或读取 API 密钥环境变量。139`apiKeyHelper`、`ANTHROPIC_API_KEY` 和 `ANTHROPIC_AUTH_TOKEN` 仅适用于终端 CLI 会话。Claude Desktop 和云会话仅使用 OAuth,不会调用 `apiKeyHelper` 或读取 API 密钥环境变量。

140 140 

141<h3 id="authentication-precedence">141<h3 id="authentication-precedence">

142 身份验证优先级142 身份验证优先级

Details

6 6 

7> 告诉自动模式分类器您的组织信任哪些代码库、存储桶和域。设置环境上下文,覆盖默认的阻止和允许规则,并使用自动模式 CLI 子命令检查您的有效配置。7> 告诉自动模式分类器您的组织信任哪些代码库、存储桶和域。设置环境上下文,覆盖默认的阻止和允许规则,并使用自动模式 CLI 子命令检查您的有效配置。

8 8 

9[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)让 Claude Code 无需权限提示即可运行,通过将每个工具调用路由到一个分类器,该分类器会阻止任何不可逆、破坏性或针对您环境外的操作。使用 `autoMode` 设置块告诉该分类器您的组织信任哪些代码库、存储桶和域,以便它停止阻止常规内部操作。9[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)让 Claude Code 无需权限提示即可运行,通过将每个工具调用路由到一个分类器,该分类器会阻止任何不可逆、破坏性或针对您环境外的操作。拒绝和明确询问规则在分类器之前进行评估,仍然会阻止或提示。使用 `autoMode` 设置块告诉该分类器您的组织信任哪些代码库、存储桶和域,以便它停止阻止常规内部操作。

10 10 

11<Note>11<Note>

12 自动模式可通过 Anthropic API 供所有用户使用。在 Amazon Bedrock、Google Cloud Vertex AI 和 Microsoft Foundry 上,您必须首先[设置 `CLAUDE_CODE_ENABLE_AUTO_MODE`](/zh-CN/permission-modes#enable-auto-mode-on-bedrock-vertex-ai-or-foundry)。如果 Claude Code 报告您的账户无法使用自动模式,请检查[完整要求](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),其中还涵盖了支持的模型和 Team 及 Enterprise 计划上的管理员启用。12 自动模式可通过 Anthropic API 供所有用户使用。在 Amazon Bedrock、Google Cloud Vertex AI 和 Microsoft Foundry 上,您必须首先[设置 `CLAUDE_CODE_ENABLE_AUTO_MODE`](/zh-CN/permission-modes#enable-auto-mode-on-bedrock-vertex-ai-or-foundry)。如果 Claude Code 报告您的账户无法使用自动模式,请检查[完整要求](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),其中还涵盖了支持的模型和 Team 及 Enterprise 计划上的管理员启用。


33对于跨项目应用的规则,例如受信任的基础设施或组织范围的拒绝规则,请使用 `autoMode` 设置块。分类器从以下范围读取 `autoMode`:33对于跨项目应用的规则,例如受信任的基础设施或组织范围的拒绝规则,请使用 `autoMode` 设置块。分类器从以下范围读取 `autoMode`:

34 34 

35| 范围 | 文件 | 用途 |35| 范围 | 文件 | 用途 |

36| :------------------------- | :------------------------------------- | :----------------------- |36| :------------------------- | :------------------------------------- | :--------------- |

37| 一个开发者 | `~/.claude/settings.json` | 个人受信任的基础设施 |37| 一个开发者 | `~/.claude/settings.json` | 个人受信任的基础设施 |

38| 一个项目,一个开发者 | `.claude/settings.local.json` | 按项目的受信任存储桶或服务,gitignored |38| 一个项目,一个开发者 | `.claude/settings.local.json` | 按项目的受信任存储桶或服务 |

39| 组织范围 | [托管设置](/zh-CN/server-managed-settings) | 分发给所有开发者的受信任基础设施 |39| 组织范围 | [托管设置](/zh-CN/server-managed-settings) | 分发给所有开发者的受信任基础设施 |

40| `--settings` 标志或 Agent SDK | 内联 JSON | 用于自动化的按调用覆盖 |40| `--settings` 标志或 Agent SDK | 内联 JSON | 用于自动化的按调用覆盖 |

41 41 

champion-kit.md +1 −1

Details

211| 技术 | 如何应用它 |211| 技术 | 如何应用它 |

212| ---------- | ----------------------------------------------------------------------------------------------- |212| ---------- | ----------------------------------------------------------------------------------------------- |

213| 提供正确的上下文 | 使用 `@file` 或 `@directory/` 引用,或直接粘贴错误或日志输出。提供相关上下文比精心设计的提示更有效。 |213| 提供正确的上下文 | 使用 `@file` 或 `@directory/` 引用,或直接粘贴错误或日志输出。提供相关上下文比精心设计的提示更有效。 |

214| 在编辑前审查计划 | 按 `Shift+Tab` 进入 plan mode。Claude 将在执行之前描述预期的更改以供你批准。 |214| 在编辑前审查计划 | 按 `Shift+Tab` 进入 Plan Mode。Claude 将在执行之前描述预期的更改以供你批准。 |

215| 教它你的存储库 | 运行 `/init` 生成 `CLAUDE.md` 文件,然后添加你的约定、测试命令和任何不应该修改的目录。参见 [Memory](/zh-CN/memory)。 |215| 教它你的存储库 | 运行 `/init` 生成 `CLAUDE.md` 文件,然后添加你的约定、测试命令和任何不应该修改的目录。参见 [Memory](/zh-CN/memory)。 |

216| 重用工作流 | 在 `.claude/skills/<name>/` 中保存 `SKILL.md` 文件以创建整个团队可以使用的 `/name` 技能。参见 [Skills](/zh-CN/skills)。 |216| 重用工作流 | 在 `.claude/skills/<name>/` 中保存 `SKILL.md` 文件以创建整个团队可以使用的 `/name` 技能。参见 [Skills](/zh-CN/skills)。 |

217| 在长任务期间保持知情 | 配置一个 Stop hook 以在长时间运行的任务完成时收到桌面通知。参见 [Hooks](/zh-CN/hooks-guide)。 |217| 在长任务期间保持知情 | 配置一个 Stop hook 以在长时间运行的任务完成时收到桌面通知。参见 [Hooks](/zh-CN/hooks-guide)。 |

Details

142 claude --dangerously-load-development-channels server:webhook142 claude --dangerously-load-development-channels server:webhook

143 ```143 ```

144 144 

145 第一次在此项目中启动会话时,Claude Code 在使用来自 `.mcp.json` 的新服务器之前要求同意。对话框报告"在此项目中找到新的 MCP 服务器:webhook"。选择**使用此 MCP 服务器**继续。

146 

145 当 Claude Code 启动时,它读取您的 MCP 配置,将您的 `webhook.ts` 作为子进程生成,HTTP 侦听器自动在您配置的端口上启动(此示例中为 8788)。您不需要自己运行服务器。147 当 Claude Code 启动时,它读取您的 MCP 配置,将您的 `webhook.ts` 作为子进程生成,HTTP 侦听器自动在您配置的端口上启动(此示例中为 8788)。您不需要自己运行服务器。

146 148 

149 启动横幅下方的暗淡通知确认频道已注册:`Channels (experimental) messages from server:webhook inject directly in this session · restart without --dangerously-load-development-channels to stop`。

150 

147 如果您看到"被组织政策阻止",您的组织管理员需要[启用频道](/zh-CN/channels#enterprise-controls)。151 如果您看到"被组织政策阻止",您的组织管理员需要[启用频道](/zh-CN/channels#enterprise-controls)。

148 152 

149 在单独的终端中,通过向您的服务器发送带有消息的 HTTP POST 来模拟 webhook。此示例向端口 8788 发送 CI 失败警报(或您配置的任何端口):153 在单独的终端中,通过向您的服务器发送带有消息的 HTTP POST 来模拟 webhook。此示例向端口 8788 发送 CI 失败警报(或您配置的任何端口):


753curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788757curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788

754```758```

755 759 

756本地权限对话在您的 Claude Code 终端中打开片刻后,提示出现在 `/events` 流中,包括五字母 ID。从远程端批准它:760列出文件是只读的,所以 Claude 在没有批准的情况下运行它。当 Claude 调用 `reply` 工具发送其答案回复时,权限对话打开。本地对话在您的 Claude Code 终端中打开片刻后,提示出现在 `/events` 流中,包括五字母 ID。从远程端批准它:

757 761 

758```bash theme={null}762```bash theme={null}

759curl -d "yes <id>" -H "X-Sender: dev" localhost:8788763curl -d "yes <id>" -H "X-Sender: dev" localhost:8788

760```764```

761 765 

762本地对话关闭,工具运行。Claude 的回复通过 `reply` 工具返回并也在流中着陆766本地对话关闭,`reply` 工具运行,Claude 的回复在流中着陆

763 767 

764此文件中的三个频道特定部分:768此文件中的三个频道特定部分:

765 769 

Details

59 59 

60每个会话在一个新的 Anthropic 管理的 VM 中运行,其中克隆了你的存储库。本节涵盖会话启动时可用的内容以及如何自定义它。60每个会话在一个新的 Anthropic 管理的 VM 中运行,其中克隆了你的存储库。本节涵盖会话启动时可用的内容以及如何自定义它。

61 61 

62<h3 id="what-s-available-in-cloud-sessions">62<h3 id="whats-available-in-cloud-sessions">

63 云会话中可用的内容63 云会话中可用的内容

64</h3>64</h3>

65 65 

66云会话从你的存储库的新克隆开始。任何提交到存储库的内容都可用。任何你仅在自己的机器上安装或配置的内容都不可用。66云会话从你的存储库的新克隆开始。任何提交到存储库的内容都可用。任何你仅在自己的机器上安装或配置的内容都不可用。

67 67 

68| | 在云会话中可用 | 原因 |68| | 在云会话中可用 | 原因 |

69| :------------------------------------------------------------- | :------ | :------------------------------------------------------------------------------------------- |69| :----------------------------------------------------------------- | :------ | :------------------------------------------------------------------------------------------- |

70| 你的存储库的 `CLAUDE.md` | 是 | 克隆的一部分 |70| 你的存储库的 `CLAUDE.md` | 是 | 克隆的一部分 |

71| 你的存储库的 `.claude/settings.json` hooks | 是 | 克隆的一部分 |71| 你的存储库的 `.claude/settings.json` hooks | 是 | 克隆的一部分 |

72| 你的存储库的 `.mcp.json` MCP 服务器 | 是 | 克隆的一部分 |72| 你的存储库的 `.mcp.json` MCP 服务器 | 是 | 克隆的一部分 |


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

75| 在 `.claude/settings.json` 中声明的插件 | 是 | 在会话启动时从你声明的[市场](/zh-CN/plugin-marketplaces)安装。需要网络访问才能到达市场源 |75| 在 `.claude/settings.json` 中声明的插件 | 是 | 在会话启动时从你声明的[市场](/zh-CN/plugin-marketplaces)安装。需要网络访问才能到达市场源 |

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

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

77| 仅在你的用户设置中启用的插件 | 否 | 用户范围的 `enabledPlugins` 存在于 `~/.claude/settings.json` 中。改为在存储库的 `.claude/settings.json` 中声明它们 |78| 仅在你的用户设置中启用的插件 | 否 | 用户范围的 `enabledPlugins` 存在于 `~/.claude/settings.json` 中。改为在存储库的 `.claude/settings.json` 中声明它们 |

78| 你使用 `claude mcp add` 添加的 MCP 服务器 | 否 | 这些写入你的本地用户配置,不是存储库。改为在[`.mcp.json`](/zh-CN/mcp#project-scope)中声明服务器 |79| 你使用 `claude mcp add` 添加的 MCP 服务器 | 否 | 这些写入你的本地用户配置,不是存储库。改为在[`.mcp.json`](/zh-CN/mcp#project-scope)中声明服务器 |

79| 静态 API 令牌和凭证 | 否 | 尚不存在专用的秘密存储。见下文 |80| 静态 API 令牌和凭证 | 否 | 尚不存在专用的秘密存储。见下文 |


353* 防止恶意请求354* 防止恶意请求

354* 速率限制和滥用防止355* 速率限制和滥用防止

355* 增强安全性的内容过滤356* 增强安全性的内容过滤

357* 请求的主机名的 DNS 级审计跟踪

356 358 

357<h3 id="default-allowed-domains">359<h3 id="default-allowed-domains">

358 默认允许的域360 默认允许的域


745| `/context` | 是 | 显示当前在上下文窗口中的内容 |747| `/context` | 是 | 显示当前在上下文窗口中的内容 |

746| `/clear` | 否 | 从侧边栏启动新会话 |748| `/clear` | 否 | 从侧边栏启动新会话 |

747 749 

748自动压缩在上下文窗口接近容量时自动运行,与 CLI 中相同。要更早触发它,在你的[环境变量](#configure-your-environment)中设置 [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/zh-CN/env-vars)。例如,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70` 在 70% 容量而不是默认 \~95% 时压缩。要更改压缩计算的有效窗口大小,请使用 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/zh-CN/env-vars)。750自动压缩在上下文窗口接近容量时自动运行。要更早触发它,在你的[环境变量](#configure-your-environment)中设置 [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/zh-CN/env-vars)。例如,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70` 在 70% 容量而不是等待窗口几乎满时压缩。要更改压缩计算的有效窗口大小,请使用 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/zh-CN/env-vars)。

749 751 

750[Subagents](/zh-CN/sub-agents)的工作方式与本地相同。Claude 可以使用 Task 工具生成它们,以将研究或并行工作卸载到单独的上下文窗口中,保持主对话更轻。在你的存储库的 `.claude/agents/` 中定义的 Subagents 会自动被拾取。[Agent teams](/zh-CN/agent-teams)默认关闭,但可以通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 添加到你的[环境变量](#configure-your-environment)来启用。752[Subagents](/zh-CN/sub-agents)的工作方式与本地相同。Claude 可以使用 Task 工具生成它们,以将研究或并行工作卸载到单独的上下文窗口中,保持主对话更轻。在你的存储库的 `.claude/agents/` 中定义的 Subagents 会自动被拾取。[Agent teams](/zh-CN/agent-teams)默认关闭,但可以通过将 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 添加到你的[环境变量](#configure-your-environment)来启用。

751 753 


868 870 

869* 在本地运行 `/login` 以刷新你的凭证,然后重新连接871* 在本地运行 `/login` 以刷新你的凭证,然后重新连接

870* 确认你已登录到拥有会话的相同账户872* 确认你已登录到拥有会话的相同账户

871* 如果你看到 `Remote Control may not be available for this organization`,你的管理员尚未为你的计划启用远程会话873* 如果你看到 `Remote Control may not be available for this organization`,你的管理员尚未为你的计划启用云会话

872 874 

873<h3 id="environment-expired">875<h3 id="environment-expired">

874 环境已过期876 环境已过期

claude-directory.md +1431 −5

Details

6 6 

7> Claude Code 读取 CLAUDE.md、settings.json、hooks、skills、commands、subagents、workflows、rules 和自动内存的位置。探索项目中的 .claude 目录和主目录中的 ~/.claude。7> Claude Code 读取 CLAUDE.md、settings.json、hooks、skills、commands、subagents、workflows、rules 和自动内存的位置。探索项目中的 .claude 目录和主目录中的 ~/.claude。

8 8 

9export const ClaudeExplorer = () => {

10 const A = useMemo(() => ({href, children}) => <a href={href} style={{

11 color: 'var(--ce-accent)',

12 textDecoration: 'none',

13 borderBottom: '1px dotted var(--ce-accent)'

14 }}>{children}</a>, []);

15 const C = useMemo(() => ({children}) => <code style={{

16 fontFamily: 'var(--ce-mono)',

17 fontSize: '0.92em',

18 padding: '1px 4px',

19 borderRadius: '3px',

20 background: 'var(--ce-surface)',

21 border: '0.5px solid var(--ce-border-subtle)'

22 }}>{children}</code>, []);

23 const commandsNote = useMemo(() => <>Commands and skills are now the same mechanism. For new workflows, use <A href="/en/skills">skills/</A> instead: same <C>/name</C> invocation, plus you can bundle supporting files.</>, []);

24 const FILE_TREE = useMemo(() => ({

25 project: {

26 label: 'your-project/',

27 children: [{

28 id: 'claude-md',

29 label: 'CLAUDE.md',

30 type: 'file',

31 icon: 'md',

32 color: '#6A9BCC',

33 badge: 'committed',

34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/en/skills">skill</A> or a path-scoped <A href="/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions

40 

41## Commands

42- Build: \`npm run build\`

43- Test: \`npm test\`

44- Lint: \`npm run lint\`

45 

46## Stack

47- TypeScript with strict mode

48- React 19, functional components only

49 

50## Rules

51- Named exports, never default exports

52- Tests live next to source: \`foo.ts\` -> \`foo.test.ts\`

53- All API routes return \`{ data, error }\` shape`,

54 docsLink: '/en/memory'

55 }, {

56 id: 'mcp-json',

57 label: '.mcp.json',

58 type: 'file',

59 icon: 'json',

60 color: '#9B7BC4',

61 badge: 'committed',

62 oneLiner: 'Project-scoped MCP servers, shared with your team',

63 when: <>Servers connect when the session begins. Tool schemas are deferred by default and load on demand via <A href="/en/mcp#scale-with-mcp-tool-search">tool search</A></>,

64 description: <>Configures Model Context Protocol (MCP) servers that give Claude access to external tools: databases, APIs, browsers, and more. This file holds the project-scoped servers your whole team uses. Personal servers you want to keep to yourself go in <C>~/.claude.json</C> instead.</>,

65 tips: [<>Use environment variable references for secrets: <C>{'${GITHUB_TOKEN}'}</C></>, <>Lives at the project root, not inside <C>.claude/</C></>, <>For servers only you need, run <C>claude mcp add --scope user</C>. This writes to <C>~/.claude.json</C> instead of <C>.mcp.json</C></>],

66 exampleIntro: <>This example configures the GitHub MCP server so Claude can read issues and open pull requests. The <C>{'${GITHUB_TOKEN}'}</C> reference is read from your shell environment when Claude Code starts the server, so the token never lands in the file.</>,

67 example: `{

68 "mcpServers": {

69 "github": {

70 "command": "npx",

71 "args": ["-y", "@modelcontextprotocol/server-github"],

72 "env": {

73 "GITHUB_TOKEN": "\${GITHUB_TOKEN}"

74 }

75 }

76 }

77}`,

78 docsLink: '/en/mcp'

79 }, {

80 id: 'worktreeinclude',

81 label: '.worktreeinclude',

82 type: 'file',

83 icon: 'md',

84 color: '#8FA876',

85 badge: 'committed',

86 oneLiner: 'Gitignored files to copy into new worktrees',

87 when: <>Read when Claude creates a git worktree via <C>--worktree</C>, the <C>EnterWorktree</C> tool, or subagent <C>isolation: worktree</C></>,

88 description: <>Lists gitignored files to copy from your main repository into each new worktree. Worktrees are fresh checkouts, so untracked files like <C>.env</C> are missing by default. Patterns here use <C>.gitignore</C> syntax. Only files that match a pattern and are also gitignored get copied, so tracked files are never duplicated.</>,

89 tips: [<>Lives at the project root, not inside <C>.claude/</C></>, <>Git-only: if you configure a <A href="/en/hooks#worktreecreate">WorktreeCreate hook</A> for a different VCS, this file is not read. Copy files inside your hook script instead</>, <>Also applies to parallel sessions in the <A href="/en/desktop#work-in-parallel-with-sessions">desktop app</A></>],

90 exampleIntro: 'This example copies your local environment files and a secrets config into every worktree Claude creates. Comments start with # and blank lines are ignored, same as .gitignore.',

91 example: `# Local environment

92.env

93.env.local

94 

95# API credentials

96config/secrets.json`,

97 docsLink: '/en/worktrees#copy-gitignored-files-into-worktrees'

98 }, {

99 id: 'dot-claude',

100 label: '.claude/',

101 type: 'folder',

102 icon: 'folder',

103 color: 'var(--ce-accent)',

104 oneLiner: 'Project-level configuration, rules, and extensions',

105 description: 'Everything Claude Code reads that is specific to this project. If you use git, commit most files here so your team shares them; a few, like settings.local.json, are automatically gitignored. Each file badge shows which.',

106 children: [{

107 id: 'settings-json',

108 label: 'settings.json',

109 type: 'file',

110 icon: 'json',

111 color: 'var(--ce-text-3)',

112 badge: 'committed',

113 oneLiner: 'Permissions, hooks, and configuration',

114 when: <>Overrides global <C>~/.claude/settings.json</C>. Local settings, CLI flags, and managed settings override this</>,

115 description: 'Settings that Claude Code applies directly. Permissions control which commands and tools Claude can use; hooks run your scripts at specific points in a session. Unlike CLAUDE.md, which Claude reads as guidance, these are enforced whether Claude follows them or not.',

116 contains: [<><A href="/en/permissions">permissions</A>: allow, deny, or prompt before Claude uses specific tools or commands</>, <><A href="/en/hooks">hooks</A>: run your own scripts on events like before a tool call or after a file edit</>, <><A href="/en/statusline">statusLine</A>: customize the line shown at the bottom while Claude works</>, <><A href="/en/settings#available-settings">model</A>: pick a default model for this project</>, <><A href="/en/settings#environment-variables">env</A>: environment variables set in every session</>, <><A href="/en/output-styles">outputStyle</A>: select a custom system-prompt style from output-styles/</>],

117 tips: [<>Bash permission patterns support wildcards: <C>Bash(npm test *)</C> matches any command starting with <C>npm test</C></>, <>Array settings like <C>permissions.allow</C> combine across all scopes; scalar settings like <C>model</C> use the most specific value</>],

118 exampleIntro: <>This example allows <C>npm test</C> and <C>npm run</C> commands without prompting, blocks <C>rm -rf</C>, and runs Prettier on files after Claude edits or writes them.</>,

119 example: `{

120 "permissions": {

121 "allow": [

122 "Bash(npm test *)",

123 "Bash(npm run *)"

124 ],

125 "deny": [

126 "Bash(rm -rf *)"

127 ]

128 },

129 "hooks": {

130 "PostToolUse": [{

131 "matcher": "Edit|Write",

132 "hooks": [{

133 "type": "command",

134 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

135 }]

136 }]

137 }

138}`,

139 docsLink: '/en/settings'

140 }, {

141 id: 'settings-local-json',

142 label: 'settings.local.json',

143 type: 'file',

144 icon: 'json',

145 color: 'var(--ce-text-3)',

146 badge: 'gitignored',

147 oneLiner: 'Your personal settings overrides for this project',

148 when: 'Highest of the user-editable settings files; CLI flags and managed settings still take precedence',

149 description: 'Personal settings that take precedence over the project defaults. Same JSON format as settings.json, but not committed. Use this when you need different permissions or defaults than the team config.',

150 tips: [<>Same schema as settings.json. Array settings like <C>permissions.allow</C> combine across scopes; scalar settings like <C>model</C> use the local value</>, <>Claude Code adds this file to <C>~/.config/git/ignore</C> the first time it writes one. If you use a custom <C>core.excludesFile</C>, add the pattern there too. To share the ignore rule with your team, also add it to the project <C>.gitignore</C></>],

151 exampleIntro: 'This example adds Docker permissions on top of whatever the team settings.json allows.',

152 example: `{

153 "permissions": {

154 "allow": [

155 "Bash(docker *)"

156 ]

157 }

158}`,

159 docsLink: '/en/settings'

160 }, {

161 id: 'rules',

162 label: 'rules/',

163 type: 'folder',

164 icon: 'folder',

165 color: '#9B7BC4',

166 oneLiner: 'Topic-scoped instructions, optionally gated by file paths',

167 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

168 description: [<>Project instructions split into topic files that can load conditionally based on file paths. A rule without <C>paths:</C> frontmatter loads at session start like CLAUDE.md; a rule with <C>paths:</C> loads only when Claude reads a matching file.</>, <>Like CLAUDE.md, rules are guidance Claude reads, not configuration Claude Code enforces. For guaranteed behavior use <A href="/en/hooks">hooks</A> or <A href="/en/permissions">permissions</A>.</>],

169 tips: [<>Use <C>paths:</C> frontmatter with globs to scope rules to directories or file types</>, <>Subdirectories work: <C>.claude/rules/frontend/react.md</C> is discovered automatically</>, 'When CLAUDE.md approaches 200 lines, start splitting into rules'],

170 docsLink: '/en/memory#organize-rules-with-claude/rules/',

171 children: [{

172 id: 'rule-testing',

173 label: 'testing.md',

174 type: 'file',

175 icon: 'md',

176 color: '#9B7BC4',

177 badge: 'committed',

178 oneLiner: 'Test conventions scoped to test files',

179 when: <>Loaded when Claude reads a file matching the <C>paths:</C> globs below</>,

180 description: <>An example rule that only loads when Claude is working on test files. The <C>paths:</C> globs in the frontmatter define which files trigger it; here, anything ending in .test.ts or .test.tsx. For other files, this rule is not loaded into context.</>,

181 example: `---

182paths:

183 - "**/*.test.ts"

184 - "**/*.test.tsx"

185---

186 

187# Testing Rules

188 

189- Use descriptive test names: "should [expected] when [condition]"

190- Mock external dependencies, not internal modules

191- Clean up side effects in afterEach`

192 }, {

193 id: 'rule-api',

194 label: 'api-design.md',

195 type: 'file',

196 icon: 'md',

197 color: '#9B7BC4',

198 badge: 'committed',

199 oneLiner: 'API conventions scoped to backend code',

200 when: <>Loaded when Claude reads a file matching the <C>paths:</C> glob below</>,

201 description: <>A second example showing a rule scoped to backend code. The <C>paths:</C> glob matches files under src/api/, so these conventions load only when Claude is editing API routes.</>,

202 example: `---

203paths:

204 - "src/api/**/*.ts"

205---

206 

207# API Design Rules

208 

209- All endpoints must validate input with Zod schemas

210- Return shape: { data: T } | { error: string }

211- Rate limit all public endpoints`

212 }]

213 }, {

214 id: 'skills',

215 label: 'skills/',

216 type: 'folder',

217 icon: 'folder',

218 color: '#D4A843',

219 oneLiner: 'Reusable prompts you or Claude invoke by name',

220 when: <>Invoked with <C>/skill-name</C> or when Claude matches the task to a skill</>,

221 description: <>Each skill is a folder with a SKILL.md file plus any supporting files it needs. By default, both you and Claude can invoke a skill. Use frontmatter to control that: <C>disable-model-invocation: true</C> for user-only workflows like <C>/deploy</C>, or <C>user-invocable: false</C> to hide from the <C>/</C> menu while Claude can still invoke it.</>,

222 tips: [<>Skills accept arguments: <C>/deploy staging</C> passes "staging" as <C>$ARGUMENTS</C>. Use <C>$0</C>, <C>$1</C>, and so on for positional access</>, <>The <C>description</C> frontmatter determines when Claude auto-invokes the skill</>, 'Bundle reference docs alongside SKILL.md. Claude knows the skill directory path and can read supporting files when you mention them'],

223 docsLink: '/en/skills',

224 children: [{

225 id: 'skill-review',

226 label: 'security-review/',

227 type: 'folder',

228 icon: 'folder',

229 color: '#D4A843',

230 oneLiner: 'A skill bundling SKILL.md with supporting files',

231 children: [{

232 id: 'skill-review-md',

233 label: 'SKILL.md',

234 type: 'file',

235 icon: 'md',

236 color: '#D4A843',

237 badge: 'committed',

238 oneLiner: 'Entrypoint: trigger, invocability, instructions',

239 when: <>User types <C>/security-review &lt;target&gt;</C>; Claude cannot auto-invoke this skill</>,

240 description: [<>This skill uses <C>disable-model-invocation: true</C> so only you can trigger it; Claude never invokes it on its own.</>, <>The <C>!`...`</C> line runs a shell command and injects its output into the prompt. <C>$ARGUMENTS</C> substitutes whatever you typed after the skill name. Claude sees the skill directory path, so mentioning a bundled file like checklist.md lets Claude read it.</>],

241 example: `---

242description: Reviews code changes for security vulnerabilities, authentication gaps, and injection risks

243disable-model-invocation: true

244argument-hint: <branch-or-path>

245---

246 

247## Diff to review

248 

249!\`git diff $ARGUMENTS\`

250 

251Audit the changes above for:

252 

2531. Injection vulnerabilities (SQL, XSS, command)

2542. Authentication and authorization gaps

2553. Hardcoded secrets or credentials

256 

257Use checklist.md in this skill directory for the full review checklist.

258 

259Report findings with severity ratings and remediation steps.`

260 }, {

261 id: 'skill-checklist',

262 label: 'checklist.md',

263 type: 'file',

264 icon: 'md',

265 color: '#D4A843',

266 badge: 'committed',

267 oneLiner: 'Supporting file bundled with the skill',

268 when: 'Claude reads it on demand while running the skill',

269 description: <>Skills can bundle any supporting files: reference docs, templates, scripts. The skill directory path is prepended to SKILL.md, so Claude can read bundled files by name. For scripts in bash injection commands, use the <C>{'${CLAUDE_SKILL_DIR}'}</C> placeholder.</>,

270 example: `# Security Review Checklist

271 

272## Input Validation

273- [ ] All user input sanitized before DB queries

274- [ ] File upload MIME types validated

275- [ ] Path traversal prevented on file operations

276 

277## Authentication

278- [ ] JWT tokens expire after 24 hours

279- [ ] API keys stored in environment variables

280- [ ] Passwords hashed with bcrypt or argon2`

281 }]

282 }]

283 }, {

284 id: 'commands',

285 label: 'commands/',

286 type: 'folder',

287 icon: 'folder',

288 color: '#788C5D',

289 oneLiner: <>Single-file prompts invoked with <C>/name</C></>,

290 note: commandsNote,

291 when: <>User types <C>/command-name</C></>,

292 description: <>A file at <C>commands/deploy.md</C> creates <C>/deploy</C> the same way a skill at <C>skills/deploy/SKILL.md</C> does, and both can be auto-invoked by Claude. Skills use a directory with SKILL.md, letting you bundle reference docs, templates, or scripts alongside the prompt.</>,

293 tips: [<>Use <C>$ARGUMENTS</C> in the file to accept parameters: <C>/fix-issue 123</C></>, 'If a skill and command share a name, the skill takes precedence', 'New commands should usually be skills instead; commands remain supported'],

294 docsLink: '/en/skills',

295 children: [{

296 id: 'cmd-example',

297 label: 'fix-issue.md',

298 type: 'file',

299 icon: 'md',

300 color: '#788C5D',

301 badge: 'committed',

302 oneLiner: <>Invoked as <C>/fix-issue &lt;number&gt;</C></>,

303 note: commandsNote,

304 description: [<>An example command for fixing a GitHub issue. Type <C>/fix-issue 123</C> and the <C>!`...`</C> line runs <C>gh issue view 123</C> in your shell, injecting the output into the prompt before Claude sees it.</>, <><C>$ARGUMENTS</C> substitutes whatever you typed after the command name. For positional access, use <C>$0</C> <C>$1</C> and so on.</>],

305 example: `---

306argument-hint: <issue-number>

307---

308 

309!\`gh issue view $ARGUMENTS\`

310 

311Investigate and fix the issue above.

312 

3131. Trace the bug to its root cause

3142. Implement the fix

3153. Write or update tests

3164. Summarize what you changed and why`

317 }]

318 }, {

319 id: 'output-styles',

320 label: 'output-styles/',

321 type: 'folder',

322 icon: 'folder',

323 color: '#5AA7A7',

324 oneLiner: 'Project-scoped output styles, if your team shares any',

325 when: 'Applied at session start when selected via the outputStyle setting',

326 description: <>Output styles are usually personal, so most live in <C>~/.claude/output-styles/</C>. Put one here if your team shares a style, like a review mode everyone uses. See <A href="#ce-global-output-styles">the Global tab</A> for the full explanation and example.</>,

327 docsLink: '/en/output-styles',

328 children: []

329 }, {

330 id: 'agents',

331 label: 'agents/',

332 type: 'folder',

333 icon: 'folder',

334 color: '#C46686',

335 oneLiner: 'Specialized subagents with their own context window',

336 when: 'Runs in its own context window when you or Claude invoke it',

337 description: 'Each markdown file defines a subagent with its own system prompt, tool access, and optionally its own model. Subagents run in a fresh context window, keeping the main conversation clean. Useful for parallel work or isolated tasks.',

338 tips: ['Each agent gets a fresh context window, separate from your main session', <>Restrict tool access per agent with the <C>tools:</C> frontmatter field</>, 'Type @ and pick an agent from the autocomplete to delegate directly'],

339 docsLink: '/en/sub-agents',

340 children: [{

341 id: 'agent-reviewer',

342 label: 'code-reviewer.md',

343 type: 'file',

344 icon: 'md',

345 color: '#C46686',

346 badge: 'committed',

347 oneLiner: 'Subagent for isolated code review',

348 when: 'Claude spawns it for review tasks, or you @-mention it from the autocomplete',

349 description: <>An example subagent restricted to read-only tools. The <C>description</C> frontmatter tells Claude when to delegate to it automatically; <C>tools:</C> limits it to Read, Grep, and Glob so it can inspect code but never edit. The body becomes the subagent's system prompt.</>,

350 example: `---

351name: code-reviewer

352description: Reviews code for correctness, security, and maintainability

353tools: Read, Grep, Glob

354---

355 

356You are a senior code reviewer. Review for:

357 

3581. Correctness: logic errors, edge cases, null handling

3592. Security: injection, auth bypass, data exposure

3603. Maintainability: naming, complexity, duplication

361 

362Every finding must include a concrete fix.`

363 }]

364 }, {

365 id: 'workflows',

366 label: 'workflows/',

367 type: 'folder',

368 icon: 'folder',

369 color: '#C46686',

370 oneLiner: 'Dynamic workflow scripts that orchestrate many subagents',

371 when: 'Loaded at startup; each file becomes a /<name> command',

372 description: <>Each <C>.js</C> file is a <A href="/en/workflows">dynamic workflow</A>: a script the runtime executes to spawn and coordinate many subagents. Workflows are written by Claude and saved here from <C>/workflows</C> rather than authored from scratch.</>,

373 tips: [<>Save a run from <C>/workflows</C> with <C>s</C> to create one of these</>, <>A project workflow takes precedence over a personal one in <C>~/.claude/workflows/</C> with the same name</>],

374 docsLink: '/en/workflows'

375 }, {

376 id: 'agent-memory',

377 label: 'agent-memory/',

378 type: 'folder',

379 icon: 'folder',

380 color: '#C46686',

381 badge: 'committed',

382 autogen: true,

383 oneLiner: 'Subagent persistent memory, separate from your main session auto memory',

384 when: 'First 200 lines (capped at 25KB) of MEMORY.md loaded into the subagent system prompt when it runs',

385 description: <>Subagents with <C>memory: project</C> in their frontmatter get a dedicated memory directory here. This is distinct from your <A href="/en/memory#auto-memory">main session auto memory</A> at <C>~/.claude/projects/</C>: each subagent reads and writes its own MEMORY.md, not yours.</>,

386 tips: [<>Only created for subagents that set the <C>memory:</C> frontmatter field</>, <>This directory holds project-scoped subagent memory, meant to be shared with your team. To keep memory out of version control use <C>memory: local</C>, which writes to <C>.claude/agent-memory-local/</C> instead. For cross-project memory use <C>memory: user</C>, which writes to <C>~/.claude/agent-memory/</C></>, <>The main session auto memory is a different feature; see <C>~/.claude/projects/</C> in the Global tab</>],

387 docsLink: '/en/sub-agents#enable-persistent-memory',

388 children: [{

389 id: 'agent-memory-sub',

390 label: '<agent-name>/',

391 type: 'folder',

392 icon: 'folder',

393 color: '#C46686',

394 autogen: true,

395 children: [{

396 id: 'agent-memory-md',

397 label: 'MEMORY.md',

398 type: 'file',

399 icon: 'md',

400 color: '#C46686',

401 badge: 'committed',

402 autogen: true,

403 oneLiner: 'The subagent writes and maintains this file automatically',

404 when: 'Loaded into the subagent system prompt when the subagent starts',

405 description: <>Works the same as your <A href="/en/memory#auto-memory">main auto memory</A>: the subagent creates and updates this file itself. You do not write it. The subagent reads it at the start of each task and writes back what it learns.</>,

406 example: `# code-reviewer memory

407 

408## Patterns seen

409- Project uses custom Result<T, E> type, not exceptions

410- Auth middleware expects Bearer token in Authorization header

411- Tests use factory functions in test/factories/

412 

413## Recurring issues

414- Missing null checks on API responses (src/api/*)

415- Unhandled promise rejections in background jobs`

416 }]

417 }]

418 }]

419 }]

420 },

421 global: {

422 label: '~/',

423 children: [{

424 id: 'claude-json',

425 label: '.claude.json',

426 type: 'file',

427 icon: 'json',

428 color: 'var(--ce-text-3)',

429 badge: 'local',

430 oneLiner: 'App state and UI preferences',

431 when: <>Read at session start for your preferences and MCP servers. Claude Code writes back to it when you change settings in <C>/config</C> or approve trust prompts</>,

432 description: <>Holds state that does not belong in settings.json: theme, OAuth session, per-project trust decisions, your personal MCP servers, and UI toggles. Mostly managed through <C>/config</C> rather than editing directly.</>,

433 tips: [<>IDE toggles like <C>autoConnectIde</C> and <C>externalEditorContext</C> live here, not in settings.json</>, <>The <C>projects</C> key tracks per-project state like trust-dialog acceptance and last-session metrics. Permission rules you approve in-session go to <C>.claude/settings.local.json</C> instead</>, <>MCP servers here are yours only: user scope applies across all projects, local scope is per-project but not committed. Team-shared servers go in <C>.mcp.json</C> at the project root instead</>],

434 example: `{

435 "autoConnectIde": true,

436 "externalEditorContext": true,

437 "mcpServers": {

438 "my-tools": {

439 "command": "npx",

440 "args": ["-y", "@example/mcp-server"]

441 }

442 }

443}`,

444 docsLink: '/en/settings#global-config-settings'

445 }, {

446 id: 'global-dot-claude',

447 label: '.claude/',

448 type: 'folder',

449 icon: 'folder',

450 color: 'var(--ce-accent)',

451 oneLiner: 'Your personal configuration across all projects',

452 description: 'The global counterpart to your project .claude/ directory. Files here apply to every project you work in and are never committed to any repository.',

453 children: [{

454 id: 'global-claude-md',

455 label: 'CLAUDE.md',

456 type: 'file',

457 icon: 'md',

458 color: '#6A9BCC',

459 badge: 'local',

460 oneLiner: 'Personal preferences across every project',

461 when: 'Loaded at the start of every session, in every project',

462 description: 'Your global instruction file. Loaded alongside the project CLAUDE.md at session start, so both are in context together. When instructions conflict, project-level instructions take priority. Keep this to preferences that apply everywhere: response style, commit format, personal conventions.',

463 tips: ['Keep it short since it loads into context for every project, alongside that project\'s own CLAUDE.md', 'Good for response style, commit format, and personal conventions'],

464 example: `# Global preferences

465 

466- Keep explanations concise

467- Use conventional commit format

468- Show the terminal command to verify changes

469- Prefer composition over inheritance`,

470 docsLink: '/en/memory'

471 }, {

472 id: 'global-settings',

473 label: 'settings.json',

474 type: 'file',

475 icon: 'json',

476 color: 'var(--ce-text-3)',

477 badge: 'local',

478 oneLiner: 'Default settings for all projects',

479 when: 'Your defaults. Project and local settings.json override any keys you also set there',

480 description: [<>Same keys as project <C>settings.json</C>: permissions, hooks, model, environment variables, and the rest. Put settings here that you want in every project, like permissions you always allow, a preferred model, or a notification hook that runs regardless of which project you're in.</>, <>Settings follow a precedence order: project <C>settings.json</C> overrides any matching keys you set here. This is different from CLAUDE.md, where global and project files are both loaded into context rather than merged key by key.</>],

481 example: `{

482 "permissions": {

483 "allow": [

484 "Bash(git log *)",

485 "Bash(git diff *)"

486 ]

487 }

488}`,

489 docsLink: '/en/settings'

490 }, {

491 id: 'keybindings',

492 label: 'keybindings.json',

493 type: 'file',

494 icon: 'json',

495 color: 'var(--ce-text-3)',

496 badge: 'local',

497 oneLiner: 'Custom keyboard shortcuts',

498 when: 'Read at session start and hot-reloaded when you edit the file',

499 description: <>Rebind keyboard shortcuts in the interactive CLI. Run <C>/keybindings</C> to create or open this file with a schema reference. Ctrl+C, Ctrl+D, Ctrl+M, and Caps Lock are reserved and cannot be rebound.</>,

500 exampleIntro: <>This example binds <C>Ctrl+E</C> to open your external editor and unbinds <C>Ctrl+U</C> by setting it to <C>null</C>. The <C>context</C> field scopes bindings to a specific part of the CLI, here the main chat input.</>,

501 example: `{

502 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

503 "$docs": "https://code.claude.com/docs/en/keybindings",

504 "bindings": [

505 {

506 "context": "Chat",

507 "bindings": {

508 "ctrl+e": "chat:externalEditor",

509 "ctrl+u": null

510 }

511 }

512 ]

513}`,

514 docsLink: '/en/keybindings'

515 }, {

516 id: 'themes',

517 label: 'themes/',

518 type: 'folder',

519 icon: 'folder',

520 color: '#5AA7A7',

521 oneLiner: 'Custom color themes',

522 when: <>Read at session start and hot-reloaded when files change. Listed in <C>/theme</C></>,

523 description: <>Each <C>.json</C> file defines a custom color theme: a built-in <C>base</C> preset plus an <C>overrides</C> map of color tokens. Create one interactively with <C>/theme</C> or write the JSON by hand. Selecting a custom theme stores <C>custom:&lt;slug&gt;</C> as your theme preference.</>,

524 example: `{

525 "name": "Dracula",

526 "base": "dark",

527 "overrides": {

528 "claude": "#bd93f9",

529 "error": "#ff5555",

530 "success": "#50fa7b"

531 }

532}`,

533 docsLink: '/en/terminal-config#create-a-custom-theme',

534 children: []

535 }, {

536 id: 'global-projects',

537 label: 'projects/',

538 type: 'folder',

539 icon: 'folder',

540 color: '#E8A45C',

541 autogen: true,

542 oneLiner: "Auto memory: Claude's notes to itself, per project",

543 when: 'MEMORY.md loaded at session start; topic files read on demand',

544 description: 'Auto memory lets Claude accumulate knowledge across sessions without you writing anything. Claude saves notes as it works: build commands, debugging insights, architecture notes. Each project gets its own memory directory keyed by the repository path.',

545 tips: [<>On by default. Toggle with <C>/memory</C> or <C>autoMemoryEnabled</C> in settings</>, 'MEMORY.md is the index loaded each session. The first 200 lines, or 25KB, whichever comes first, are read', 'Topic files like debugging.md are read on demand, not at startup', 'These are plain markdown. Edit or delete them anytime'],

546 docsLink: '/en/memory#auto-memory',

547 children: [{

548 id: 'memory-dir',

549 label: '<project>/memory/',

550 type: 'folder',

551 icon: 'folder',

552 color: '#E8A45C',

553 autogen: true,

554 oneLiner: "Claude's accumulated knowledge for one project",

555 children: [{

556 id: 'memory-md',

557 label: 'MEMORY.md',

558 type: 'file',

559 icon: 'md',

560 color: '#E8A45C',

561 badge: 'local',

562 autogen: true,

563 oneLiner: 'Claude writes and maintains this file automatically',

564 when: 'First 200 lines (capped at 25KB) loaded at session start',

565 description: 'Claude creates and updates this file as it works; you do not write it yourself. It acts as an index that Claude reads at the start of every session, pointing to topic files for detail. You can edit or delete it, but Claude will keep updating it.',

566 example: `# Memory Index

567 

568## Project

569- [build-and-test.md](build-and-test.md): npm run build (~45s), Vitest, dev server on 3001

570- [architecture.md](architecture.md): API client singleton, refresh-token auth

571 

572## Reference

573- [debugging.md](debugging.md): auth token rotation and DB connection troubleshooting`,

574 docsLink: '/en/memory'

575 }, {

576 id: 'memory-topic',

577 label: 'debugging.md',

578 type: 'file',

579 icon: 'md',

580 color: '#E8A45C',

581 badge: 'local',

582 autogen: true,

583 oneLiner: 'Topic notes Claude writes when MEMORY.md gets long',

584 when: 'Claude reads this when a related task comes up',

585 description: 'An example of a topic file Claude creates when MEMORY.md grows too long. Claude picks the filename based on what it splits out: debugging.md, architecture.md, build-commands.md, or similar. You never create these yourself. Claude reads a topic file back only when the current task relates to it.',

586 example: `---

587name: Debugging patterns

588description: Auth token rotation and database connection troubleshooting for this project

589type: reference

590---

591 

592## Auth Token Issues

593- Refresh token rotation: old token invalidated immediately

594- If 401 after refresh: check clock skew between client and server

595 

596## Database Connection Drops

597- Connection pool: max 10 in dev, 50 in prod

598- Always check \`docker compose ps\` first`

599 }]

600 }]

601 }, {

602 id: 'global-rules',

603 label: 'rules/',

604 type: 'folder',

605 icon: 'folder',

606 color: '#9B7BC4',

607 oneLiner: 'User-level rules that apply to every project',

608 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

609 description: 'Same as project .claude/rules/ but applies everywhere. Use this for conventions you want across all your work, like personal code style or commit message format.',

610 docsLink: '/en/memory#organize-rules-with-claude/rules/',

611 children: []

612 }, {

613 id: 'global-skills',

614 label: 'skills/',

615 type: 'folder',

616 icon: 'folder',

617 color: '#D4A843',

618 oneLiner: 'Personal skills available in every project',

619 when: <>Invoked with <C>/skill-name</C> in any project</>,

620 description: 'Skills you built for yourself that work everywhere. Same structure as project skills: each is a folder with SKILL.md, scoped to your user account instead of a single project.',

621 docsLink: '/en/skills',

622 children: []

623 }, {

624 id: 'global-commands',

625 label: 'commands/',

626 type: 'folder',

627 icon: 'folder',

628 color: '#788C5D',

629 oneLiner: 'Personal single-file commands available in every project',

630 note: commandsNote,

631 when: <>User types <C>/command-name</C> in any project</>,

632 description: 'Same as project commands/ but scoped to your user account. Each markdown file becomes a command available everywhere.',

633 docsLink: '/en/skills',

634 children: []

635 }, {

636 id: 'global-output-styles',

637 label: 'output-styles/',

638 type: 'folder',

639 icon: 'folder',

640 color: '#5AA7A7',

641 oneLiner: 'Custom system-prompt sections that adjust how Claude works',

642 when: 'Applied at session start when selected via the outputStyle setting',

643 description: [<>Each markdown file defines an output style: a section appended to the system prompt that, by default, also drops the built-in software-engineering task instructions. Use this to adapt Claude Code for uses beyond coding, or to add teaching or review modes.</>, <>Select a built-in or custom style with <C>/config</C> or the <C>outputStyle</C> key in settings. Styles here are available in every project; project-level styles with the same name take precedence.</>],

644 tips: ['Built-in styles Explanatory and Learning are included with Claude Code; custom styles go here', <>Set <C>keep-coding-instructions: true</C> in frontmatter to keep the default task instructions alongside your additions</>, 'Changes take effect on the next session since the system prompt is fixed at startup for caching'],

645 docsLink: '/en/output-styles',

646 children: [{

647 id: 'output-style-example',

648 label: 'teaching.md',

649 type: 'file',

650 icon: 'md',

651 color: '#5AA7A7',

652 badge: 'local',

653 oneLiner: 'Example style that adds explanations and leaves small changes for you',

654 when: <>Active when <C>outputStyle</C> in settings is set to <C>teaching</C></>,

655 description: <>This style appends instructions to the system prompt: Claude adds a "Why this approach" note after each task and leaves TODO(human) markers for changes under 10 lines instead of writing them itself. Select it by setting <C>outputStyle</C> to the filename without .md, or to the <C>name</C> field if you set one in frontmatter.</>,

656 example: `---

657description: Explains reasoning and asks you to implement small pieces

658keep-coding-instructions: true

659---

660 

661After completing each task, add a brief "Why this approach" note

662explaining the key design decision.

663 

664When a change is under 10 lines, ask the user to implement it

665themselves by leaving a TODO(human) marker instead of writing it.`

666 }]

667 }, {

668 id: 'global-agents',

669 label: 'agents/',

670 type: 'folder',

671 icon: 'folder',

672 color: '#C46686',

673 oneLiner: 'Personal subagents available in every project',

674 when: 'Claude delegates or you @-mention in any project',

675 description: 'Subagents defined here are available across all your projects. Same format as project agents.',

676 docsLink: '/en/sub-agents',

677 children: []

678 }, {

679 id: 'global-workflows',

680 label: 'workflows/',

681 type: 'folder',

682 icon: 'folder',

683 color: '#C46686',

684 oneLiner: 'Personal dynamic workflows available in every project',

685 when: 'Loaded at startup; each file becomes a /<name> command',

686 description: <>Workflow scripts saved here are available across all your projects. A project workflow with the same name in <C>.claude/workflows/</C> takes precedence.</>,

687 docsLink: '/en/workflows',

688 children: []

689 }, {

690 id: 'global-agent-memory',

691 label: 'agent-memory/',

692 type: 'folder',

693 icon: 'folder',

694 color: '#C46686',

695 autogen: true,

696 oneLiner: <>Persistent memory for subagents with <C>memory: user</C></>,

697 when: 'Loaded into the subagent system prompt when the subagent starts',

698 description: <>Subagents with <C>memory: user</C> in their frontmatter store knowledge here that persists across all projects. For project-scoped subagent memory, see <C>.claude/agent-memory/</C> instead.</>,

699 docsLink: '/en/sub-agents#enable-persistent-memory',

700 children: []

701 }]

702 }]

703 }

704 }), []);

705 const BADGE_STYLES = useMemo(() => ({

706 committed: {

707 bg: 'rgba(85,138,66,0.08)',

708 color: 'var(--ce-badge-committed)',

709 border: 'rgba(85,138,66,0.15)',

710 label: 'committed'

711 },

712 gitignored: {

713 bg: 'rgba(217,119,87,0.06)',

714 color: 'var(--ce-badge-gitignored)',

715 border: 'rgba(217,119,87,0.15)',

716 label: 'gitignored'

717 },

718 local: {

719 bg: 'rgba(115,114,108,0.06)',

720 color: 'var(--ce-badge-local)',

721 border: 'rgba(115,114,108,0.12)',

722 label: 'local only'

723 },

724 autogen: {

725 bg: 'rgba(232,164,92,0.1)',

726 color: 'var(--ce-badge-autogen)',

727 border: 'rgba(232,164,92,0.2)',

728 label: 'Claude writes'

729 }

730 }), []);

731 const allNodes = useMemo(() => {

732 const flatten = (nodes, acc, path, parentId) => {

733 for (const node of nodes) {

734 const nextPath = [...path, node.label];

735 acc[node.id] = {

736 ...node,

737 path: nextPath,

738 parentId

739 };

740 if (node.children) flatten(node.children, acc, nextPath, node.id);

741 }

742 return acc;

743 };

744 const project = flatten(FILE_TREE.project.children, {}, [FILE_TREE.project.label]);

745 const global = flatten(FILE_TREE.global.children, {}, [FILE_TREE.global.label]);

746 for (const id in project) project[id].root = 'project';

747 for (const id in global) global[id].root = 'global';

748 return {

749 ...project,

750 ...global

751 };

752 }, [FILE_TREE]);

753 const allFolderIds = useMemo(() => Object.keys(allNodes).filter(id => allNodes[id].type === 'folder'), [allNodes]);

754 const DEFAULT_EXPANDED = ['dot-claude', 'rules', 'skills', 'skill-review', 'commands', 'agents', 'agent-memory', 'agent-memory-sub', 'global-dot-claude', 'global-output-styles', 'global-projects', 'memory-dir'];

755 const [mounted, setMounted] = useState(false);

756 const [activeRoot, setActiveRoot] = useState('project');

757 const [selectedId, setSelectedId] = useState('claude-md');

758 const [expandedFolders, setExpandedFolders] = useState(() => new Set(DEFAULT_EXPANDED));

759 const [forceMobile, setForceMobile] = useState(false);

760 const [copiedId, setCopiedId] = useState(null);

761 const [isFullscreen, setIsFullscreen] = useState(false);

762 const copyTimeoutRef = useRef(null);

763 const rootRef = useRef(null);

764 useEffect(() => {

765 setMounted(true);

766 const applyHash = scroll => {

767 const hash = window.location.hash.slice(1);

768 if (!hash.startsWith('ce-')) return;

769 const id = hash.slice(3);

770 const node = allNodes[id];

771 if (!node) return;

772 setActiveRoot(node.root);

773 setSelectedId(id);

774 setExpandedFolders(new Set(allFolderIds));

775 if (scroll && rootRef.current) rootRef.current.scrollIntoView({

776 behavior: 'smooth',

777 block: 'start'

778 });

779 };

780 applyHash(false);

781 const onHashChange = () => applyHash(true);

782 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

783 window.addEventListener('hashchange', onHashChange);

784 document.addEventListener('fullscreenchange', onFsChange);

785 return () => {

786 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

787 window.removeEventListener('hashchange', onHashChange);

788 document.removeEventListener('fullscreenchange', onFsChange);

789 };

790 }, []);

791 useEffect(() => {

792 if (!mounted || !rootRef.current) return;

793 const hash = window.location.hash.slice(1);

794 if (hash.startsWith('ce-') && allNodes[hash.slice(3)]) {

795 rootRef.current.scrollIntoView({

796 behavior: 'smooth',

797 block: 'start'

798 });

799 }

800 }, [mounted]);

801 if (!mounted) return null;

802 const selected = allNodes[selectedId];

803 const tree = FILE_TREE[activeRoot];

804 const isCopied = copiedId === selected.id;

805 const toggleFolder = id => {

806 const next = new Set(expandedFolders);

807 next.has(id) ? next.delete(id) : next.add(id);

808 setExpandedFolders(next);

809 };

810 const switchRoot = root => {

811 if (root === activeRoot) return;

812 setActiveRoot(root);

813 const firstId = FILE_TREE[root].children[0].id;

814 setSelectedId(firstId);

815 try {

816 history.replaceState(null, '', '#ce-' + firstId);

817 } catch (e) {}

818 };

819 const toggleFullscreen = () => {

820 if (!rootRef.current) return;

821 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

822 };

823 const selectNode = n => {

824 setSelectedId(n.id);

825 if (n.type === 'folder' && !expandedFolders.has(n.id)) toggleFolder(n.id);

826 try {

827 history.replaceState(null, '', '#ce-' + n.id);

828 } catch (e) {}

829 };

830 const iconBtn = {

831 width: 28,

832 flexShrink: 0,

833 borderRadius: '6px',

834 border: 'none',

835 cursor: 'pointer',

836 background: 'transparent',

837 color: 'var(--ce-text-4)',

838 display: 'flex',

839 alignItems: 'center',

840 justifyContent: 'center'

841 };

842 const visibleFolderIds = allFolderIds.filter(id => allNodes[id].root === activeRoot);

843 const allExpanded = visibleFolderIds.every(id => expandedFolders.has(id));

844 const toggleAllFolders = () => {

845 const next = new Set(expandedFolders);

846 visibleFolderIds.forEach(id => allExpanded ? next.delete(id) : next.add(id));

847 setExpandedFolders(next);

848 };

849 const onTreeKeyDown = e => {

850 if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(e.key)) return;

851 const visible = [];

852 const walk = nodes => {

853 for (const n of nodes) {

854 visible.push(n.id);

855 if (n.children && expandedFolders.has(n.id)) walk(n.children);

856 }

857 };

858 walk(tree.children);

859 const i = visible.indexOf(selectedId);

860 if (i === -1) return;

861 e.preventDefault();

862 if (e.key === 'ArrowDown' && i < visible.length - 1) selectNode(allNodes[visible[i + 1]]); else if (e.key === 'ArrowUp' && i > 0) selectNode(allNodes[visible[i - 1]]); else if (e.key === 'ArrowRight' && selected.type === 'folder') {

863 if (!expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.children && selected.children.length) selectNode(allNodes[selected.children[0].id]);

864 } else if (e.key === 'ArrowLeft') {

865 if (selected.type === 'folder' && expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.parentId) selectNode(allNodes[selected.parentId]);

866 }

867 };

868 const copyExample = (id, text) => {

869 const done = () => {

870 setCopiedId(id);

871 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

872 copyTimeoutRef.current = setTimeout(() => setCopiedId(null), 2000);

873 };

874 const fallback = () => {

875 const ta = document.createElement('textarea');

876 ta.value = text;

877 ta.style.position = 'fixed';

878 ta.style.opacity = '0';

879 document.body.appendChild(ta);

880 ta.select();

881 try {

882 if (document.execCommand('copy')) done();

883 } catch (e) {}

884 document.body.removeChild(ta);

885 };

886 if (navigator.clipboard) {

887 navigator.clipboard.writeText(text).then(done, fallback);

888 } else {

889 fallback();

890 }

891 };

892 const renderIcon = (icon, color, size) => {

893 const sz = size || 14;

894 if (icon === 'folder') {

895 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

896 <path d="M1.5 3.5a1 1 0 0 1 1-1h2.6l1 1.2h5.4a1 1 0 0 1 1 1v5.8a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1V3.5z" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

897 </svg>;

898 }

899 if (icon === 'json') {

900 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

901 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

902 <text x="7" y="9" fontSize="6" fontFamily="monospace" fill={color} textAnchor="middle" fontWeight="700">{'{}'}</text>

903 </svg>;

904 }

905 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

906 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

907 <line x1="4.5" y1="5" x2="9.5" y2="5" stroke={color} strokeWidth="1" />

908 <line x1="4.5" y1="7" x2="9.5" y2="7" stroke={color} strokeWidth="1" />

909 <line x1="4.5" y1="9" x2="8" y2="9" stroke={color} strokeWidth="1" />

910 </svg>;

911 };

912 const renderNode = (node, depth) => {

913 const isFolder = node.type === 'folder';

914 const isExpanded = expandedFolders.has(node.id);

915 const isSelected = selectedId === node.id;

916 return <div key={node.id}>

917 <button role="treeitem" tabIndex={-1} onClick={() => selectNode(node)} aria-selected={isSelected} aria-expanded={isFolder ? isExpanded : undefined} style={{

918 display: 'flex',

919 alignItems: 'center',

920 gap: '5px',

921 width: '100%',

922 padding: `4px 8px 4px ${8 + depth * 16}px`,

923 background: isSelected ? 'var(--ce-accent-bg)' : 'transparent',

924 borderTop: 'none',

925 borderRight: 'none',

926 borderBottom: 'none',

927 borderLeft: isSelected ? '2px solid var(--ce-accent)' : '2px solid transparent',

928 outline: 'none',

929 cursor: 'pointer',

930 textAlign: 'left',

931 fontFamily: 'var(--ce-mono)',

932 fontSize: '13.5px',

933 color: isSelected ? 'var(--ce-accent)' : 'var(--ce-text-2)',

934 fontWeight: isSelected ? 550 : 400,

935 transition: 'all 0.1s'

936 }}>

937 {isFolder ? <span onClick={e => {

938 e.stopPropagation();

939 toggleFolder(node.id);

940 }} style={{

941 fontSize: '14px',

942 color: 'var(--ce-text-4)',

943 width: '20px',

944 height: '20px',

945 display: 'inline-flex',

946 alignItems: 'center',

947 justifyContent: 'center',

948 cursor: 'pointer',

949 borderRadius: '4px',

950 marginLeft: '-6px',

951 flexShrink: 0

952 }} onMouseEnter={e => {

953 e.currentTarget.style.background = 'var(--ce-arrow-hover)';

954 e.currentTarget.style.color = 'var(--ce-text-2)';

955 }} onMouseLeave={e => {

956 e.currentTarget.style.background = 'transparent';

957 e.currentTarget.style.color = 'var(--ce-text-4)';

958 }}>{isExpanded ? '▾' : '▸'}</span> : <span style={{

959 width: '14px',

960 flexShrink: 0

961 }} />}

962 {renderIcon(node.icon, node.color)}

963 <span style={{

964 flex: 1,

965 overflow: 'hidden',

966 textOverflow: 'ellipsis',

967 whiteSpace: 'nowrap'

968 }}>{node.label}</span>

969 {node.badge && BADGE_STYLES[node.badge] && <span title={BADGE_STYLES[node.badge].label} style={{

970 width: 6,

971 height: 6,

972 borderRadius: '50%',

973 background: BADGE_STYLES[node.badge].color,

974 flexShrink: 0,

975 opacity: 0.7

976 }} />}

977 </button>

978 {isFolder && isExpanded && node.children && <div role="group">{node.children.map(child => renderNode(child, depth + 1))}</div>}

979 </div>;

980 };

981 return <>

982 <style>{`

983 .ce-root {

984 --ce-mono: var(--font-mono, ui-monospace, monospace);

985 --ce-accent: #D97757;

986 --ce-accent-bg: rgba(217,119,87,0.06);

987 --ce-accent-border: rgba(217,119,87,0.12);

988 --ce-bg: #fff;

989 --ce-surface: #FAFAF7;

990 --ce-surface-hover: #F0EEE6;

991 --ce-border: #E8E6DC;

992 --ce-border-subtle: #F0EEE6;

993 --ce-text: #141413;

994 --ce-text-2: #5E5D59;

995 --ce-text-3: #73726C;

996 --ce-text-4: #9C9A92;

997 --ce-text-5: #B8B6AE;

998 --ce-sep: #D1CFC5;

999 --ce-code-header: #F5F4ED;

1000 --ce-code-bg: #1A1918;

1001 --ce-arrow-hover: rgba(0,0,0,0.08);

1002 --ce-badge-committed: #3d6b2e;

1003 --ce-badge-gitignored: #b85c3a;

1004 --ce-badge-local: #5e5d59;

1005 --ce-badge-autogen: #b07520;

1006 --ce-when-text: #4a7fb5;

1007 }

1008 .dark .ce-root {

1009 --ce-bg: #1a1918;

1010 --ce-surface: #232221;

1011 --ce-surface-hover: #2e2d2b;

1012 --ce-border: #3a3936;

1013 --ce-border-subtle: #2e2d2b;

1014 --ce-text: #e8e6dc;

1015 --ce-text-2: #c4c2b8;

1016 --ce-text-3: #9c9a92;

1017 --ce-text-4: #73726c;

1018 --ce-text-5: #5e5d59;

1019 --ce-sep: #4a4946;

1020 --ce-code-header: #2e2d2b;

1021 --ce-code-bg: #0d0d0c;

1022 --ce-arrow-hover: rgba(255,255,255,0.08);

1023 --ce-badge-committed: #6fa85c;

1024 --ce-badge-gitignored: #e08a60;

1025 --ce-badge-local: #9c9a92;

1026 --ce-badge-autogen: #e8a45c;

1027 --ce-when-text: #8bb4e0;

1028 }

1029 .ce-mobile-fallback { display: none; border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.03); }

1030 .dark .ce-mobile-fallback { border-color: rgba(255,255,255,0.15); background: rgba(255,255,255,0.04); }

1031 @media (max-width: 700px) {

1032 .ce-root:not(.ce-force) { display: none !important; }

1033 .ce-mobile-fallback { display: block; }

1034 }

1035 `}</style>

1036 {!forceMobile && <div className="ce-mobile-fallback" style={{

1037 padding: '14px 16px',

1038 borderRadius: '8px',

1039 fontSize: '14px'

1040 }}>

1041 The interactive explorer works best on a larger screen. See the <a href="#file-reference" style={{

1042 color: '#D97757'

1043 }}>file reference table</a> below, or <button onClick={() => setForceMobile(true)} style={{

1044 border: 'none',

1045 background: 'none',

1046 padding: 0,

1047 color: '#D97757',

1048 textDecoration: 'underline',

1049 cursor: 'pointer',

1050 font: 'inherit'

1051 }}>show the explorer anyway</button>.

1052 </div>}

1053 <div ref={rootRef} className={forceMobile ? 'ce-root ce-force' : 'ce-root'} style={{

1054 borderRadius: isFullscreen ? 0 : '12px',

1055 border: '1px solid var(--ce-border)',

1056 background: 'var(--ce-bg)',

1057 display: 'flex',

1058 alignItems: 'stretch',

1059 overflow: 'hidden',

1060 fontFamily: 'var(--font-sans, -apple-system, sans-serif)',

1061 ...isFullscreen && ({

1062 height: '100vh'

1063 })

1064 }}>

1065 {}

1066 <div style={{

1067 width: 'min(240px, 35%)',

1068 minWidth: '180px',

1069 flexShrink: 0,

1070 borderRight: '1px solid var(--ce-border-subtle)',

1071 background: 'var(--ce-surface)',

1072 display: 'flex',

1073 flexDirection: 'column'

1074 }}>

1075 <div style={{

1076 padding: '8px 8px 4px',

1077 borderBottom: '1px solid var(--ce-border-subtle)',

1078 display: 'flex',

1079 gap: '4px'

1080 }}>

1081 {['project', 'global'].map(root => <button key={root} onClick={() => switchRoot(root)} style={{

1082 flex: 1,

1083 padding: '6px 0',

1084 borderRadius: '6px',

1085 border: 'none',

1086 cursor: 'pointer',

1087 fontFamily: 'var(--ce-mono)',

1088 fontSize: '11.5px',

1089 background: activeRoot === root ? 'var(--ce-accent-bg)' : 'transparent',

1090 color: activeRoot === root ? 'var(--ce-accent)' : 'var(--ce-text-4)',

1091 fontWeight: activeRoot === root ? 600 : 430

1092 }}>

1093 {root === 'project' ? 'Project' : 'Global (~/)'}

1094 </button>)}

1095 <button onClick={toggleAllFolders} title={allExpanded ? 'Collapse all' : 'Expand all'} style={{

1096 ...iconBtn,

1097 fontSize: 11

1098 }}>

1099 {allExpanded ? '⊟' : '⊞'}

1100 </button>

1101 <button onClick={toggleFullscreen} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} style={{

1102 ...iconBtn,

1103 fontSize: 13

1104 }}>

1105 {isFullscreen ? '⤡' : '⛶'}

1106 </button>

1107 </div>

1108 <div role="tree" aria-label="Configuration files" tabIndex={0} onKeyDown={onTreeKeyDown} style={{

1109 padding: '6px 0',

1110 overflowY: 'auto',

1111 flex: 1,

1112 outline: 'none'

1113 }}>

1114 {tree.children.map(node => renderNode(node, 0))}

1115 </div>

1116 </div>

1117 

1118 {}

1119 <div style={{

1120 flex: 1,

1121 minWidth: 0,

1122 padding: '20px 24px',

1123 minHeight: '400px',

1124 overflowY: 'auto'

1125 }}>

1126 <span aria-live="polite" style={{

1127 position: 'absolute',

1128 width: 1,

1129 height: 1,

1130 overflow: 'hidden',

1131 clip: 'rect(0 0 0 0)'

1132 }}>{selected.label} selected</span>

1133 {}

1134 <div style={{

1135 fontFamily: 'var(--ce-mono)',

1136 fontSize: '11px',

1137 color: 'var(--ce-text-4)',

1138 marginBottom: '10px',

1139 cursor: 'default'

1140 }}>

1141 {selected.path.map((seg, i) => <span key={i}>

1142 <span style={{

1143 color: i === selected.path.length - 1 ? 'var(--ce-accent)' : 'var(--ce-text-4)'

1144 }}>{seg.replace(/\/$/, '')}</span>

1145 {i < selected.path.length - 1 && <span style={{

1146 color: 'var(--ce-sep)'

1147 }}> / </span>}

1148 </span>)}

1149 </div>

1150 

1151 {}

1152 <div style={{

1153 display: 'flex',

1154 alignItems: 'flex-start',

1155 gap: '10px',

1156 marginBottom: '10px'

1157 }}>

1158 <span style={{

1159 flexShrink: 0,

1160 display: 'flex'

1161 }}>{renderIcon(selected.icon, selected.color, 24)}</span>

1162 <div style={{

1163 flex: 1,

1164 minWidth: 0

1165 }}>

1166 <div style={{

1167 fontSize: '22px',

1168 fontWeight: 600,

1169 color: 'var(--ce-text)',

1170 letterSpacing: '-0.3px',

1171 lineHeight: '26px'

1172 }}>{selected.label}</div>

1173 {selected.oneLiner && <div style={{

1174 fontSize: '15px',

1175 color: 'var(--ce-text-3)',

1176 marginTop: '3px'

1177 }}>{selected.oneLiner}</div>}

1178 </div>

1179 <div style={{

1180 display: 'flex',

1181 gap: '4px',

1182 flexShrink: 0

1183 }}>

1184 {[selected.autogen && 'autogen', selected.badge].filter(Boolean).map(k => {

1185 const s = BADGE_STYLES[k];

1186 if (!s) return null;

1187 return <span key={k} style={{

1188 fontFamily: 'var(--ce-mono)',

1189 fontSize: '10px',

1190 fontWeight: 600,

1191 textTransform: 'uppercase',

1192 letterSpacing: '0.3px',

1193 padding: '2px 6px',

1194 borderRadius: '4px',

1195 background: s.bg,

1196 color: s.color,

1197 border: `0.5px solid ${s.border}`

1198 }}>{s.label}</span>;

1199 })}

1200 </div>

1201 </div>

1202 

1203 {}

1204 {selected.note && <div style={{

1205 padding: '10px 12px',

1206 borderRadius: '8px',

1207 marginBottom: '14px',

1208 background: 'rgba(217,119,87,0.06)',

1209 border: '1px solid rgba(217,119,87,0.2)',

1210 borderLeft: '3px solid var(--ce-accent)',

1211 fontSize: '15px',

1212 color: 'var(--ce-text-2)',

1213 lineHeight: 1.6

1214 }}>

1215 {selected.note}

1216 </div>}

1217 

1218 {}

1219 {selected.when && <div style={{

1220 padding: '8px 12px',

1221 borderRadius: '6px',

1222 background: 'rgba(106,155,204,0.06)',

1223 border: '0.5px solid rgba(106,155,204,0.12)',

1224 fontSize: '15px',

1225 color: 'var(--ce-when-text)',

1226 marginBottom: '16px'

1227 }}>

1228 <div style={{

1229 fontSize: '10px',

1230 fontWeight: 700,

1231 textTransform: 'uppercase',

1232 letterSpacing: '0.4px',

1233 opacity: 0.65,

1234 marginBottom: '3px'

1235 }}>When it loads</div>

1236 <div style={{

1237 fontWeight: 500

1238 }}>{selected.when}</div>

1239 </div>}

1240 

1241 {}

1242 {selected.description && <div style={{

1243 fontSize: '16px',

1244 color: 'var(--ce-text-2)',

1245 lineHeight: 1.65,

1246 marginBottom: '16px'

1247 }}>

1248 {Array.isArray(selected.description) ? selected.description.map((para, i) => <div key={i} style={{

1249 marginBottom: i < selected.description.length - 1 ? '12px' : 0

1250 }}>{para}</div>) : selected.description}

1251 </div>}

1252 

1253 {}

1254 {selected.contains && selected.contains.length > 0 && <div style={{

1255 marginBottom: '16px'

1256 }}>

1257 <div style={{

1258 fontSize: '11px',

1259 fontWeight: 700,

1260 color: 'var(--ce-text-4)',

1261 textTransform: 'uppercase',

1262 letterSpacing: '0.4px',

1263 marginBottom: '8px'

1264 }}>Common keys</div>

1265 {selected.contains.map((item, i) => <div key={i} style={{

1266 display: 'flex',

1267 gap: '7px',

1268 fontSize: '15px',

1269 color: 'var(--ce-text-2)',

1270 lineHeight: 1.5,

1271 marginBottom: '5px'

1272 }}>

1273 <span style={{

1274 fontSize: '7px',

1275 color: 'var(--ce-text-4)',

1276 marginTop: '6px'

1277 }}>●</span>

1278 <span>{item}</span>

1279 </div>)}

1280 </div>}

1281 

1282 {}

1283 {selected.tips && selected.tips.length > 0 && <div style={{

1284 padding: '12px 14px',

1285 borderRadius: '8px',

1286 background: 'var(--ce-surface)',

1287 border: '1px solid var(--ce-border-subtle)',

1288 marginBottom: '16px'

1289 }}>

1290 <div style={{

1291 fontSize: '11px',

1292 fontWeight: 700,

1293 color: 'var(--ce-accent)',

1294 textTransform: 'uppercase',

1295 letterSpacing: '0.4px',

1296 marginBottom: '6px'

1297 }}>Tips</div>

1298 {selected.tips.map((tip, i) => <div key={i} style={{

1299 display: 'flex',

1300 gap: '7px',

1301 fontSize: '14.5px',

1302 color: 'var(--ce-text-2)',

1303 marginBottom: i < selected.tips.length - 1 ? '5px' : 0

1304 }}>

1305 <span style={{

1306 fontSize: '7px',

1307 color: 'var(--ce-accent)',

1308 marginTop: '6px'

1309 }}>●</span>

1310 <span>{tip}</span>

1311 </div>)}

1312 </div>}

1313 

1314 {}

1315 {selected.example && <div style={{

1316 marginBottom: '16px'

1317 }}>

1318 {selected.exampleIntro && <div style={{

1319 fontSize: '15px',

1320 color: 'var(--ce-text-2)',

1321 lineHeight: 1.6,

1322 marginBottom: '10px'

1323 }}>

1324 {selected.exampleIntro}

1325 </div>}

1326 <div style={{

1327 display: 'flex',

1328 justifyContent: 'space-between',

1329 alignItems: 'center',

1330 padding: '6px 10px',

1331 background: 'var(--ce-code-header)',

1332 border: '1px solid var(--ce-border)',

1333 borderRadius: '8px 8px 0 0'

1334 }}>

1335 <span style={{

1336 fontFamily: 'var(--ce-mono)',

1337 fontSize: '11px',

1338 fontWeight: 600,

1339 color: 'var(--ce-text-3)'

1340 }}>{selected.label}</span>

1341 <button onClick={() => copyExample(selected.id, selected.example)} style={{

1342 padding: '3px 8px',

1343 borderRadius: '4px',

1344 fontSize: '11px',

1345 fontWeight: 600,

1346 cursor: 'pointer',

1347 transition: 'all 0.15s',

1348 background: isCopied ? 'rgba(85,138,66,0.08)' : 'var(--ce-code-header)',

1349 border: isCopied ? '0.5px solid rgba(85,138,66,0.2)' : '0.5px solid var(--ce-border)',

1350 color: isCopied ? '#558A42' : 'var(--ce-text-3)'

1351 }}>

1352 {isCopied ? '✓ Copied' : 'Copy'}

1353 </button>

1354 </div>

1355 <pre style={{

1356 margin: 0,

1357 padding: '12px 14px',

1358 background: 'var(--ce-code-bg)',

1359 color: '#E8E6DC',

1360 fontFamily: 'var(--ce-mono)',

1361 fontSize: '13px',

1362 lineHeight: 1.65,

1363 borderRadius: '0 0 8px 8px',

1364 overflowX: 'auto',

1365 whiteSpace: 'pre'

1366 }}>{selected.example}</pre>

1367 </div>}

1368 

1369 {}

1370 {selected.docsLink && <a href={selected.docsLink} style={{

1371 display: 'inline-flex',

1372 padding: '5px 12px',

1373 borderRadius: '6px',

1374 background: 'var(--ce-accent-bg)',

1375 border: '1px solid var(--ce-accent-border)',

1376 color: 'var(--ce-accent)',

1377 fontSize: '12px',

1378 fontWeight: 600,

1379 textDecoration: 'none'

1380 }}>Full docs →</a>}

1381 

1382 {}

1383 {selected.children && selected.children.length > 0 && <div style={{

1384 marginTop: '20px'

1385 }}>

1386 <div style={{

1387 fontSize: '11px',

1388 fontWeight: 700,

1389 color: 'var(--ce-text-4)',

1390 textTransform: 'uppercase',

1391 letterSpacing: '0.4px',

1392 marginBottom: '8px'

1393 }}>Contents</div>

1394 <div style={{

1395 display: 'flex',

1396 flexDirection: 'column',

1397 gap: '4px'

1398 }}>

1399 {selected.children.map(child => <button key={child.id} onClick={() => selectNode(child)} style={{

1400 display: 'flex',

1401 alignItems: 'center',

1402 gap: '8px',

1403 padding: '6px 8px',

1404 width: '100%',

1405 background: 'var(--ce-surface)',

1406 borderRadius: '6px',

1407 border: 'none',

1408 cursor: 'pointer',

1409 textAlign: 'left',

1410 transition: 'background 0.1s'

1411 }} onMouseEnter={e => e.currentTarget.style.background = 'var(--ce-surface-hover)'} onMouseLeave={e => e.currentTarget.style.background = 'var(--ce-surface)'}>

1412 {renderIcon(child.icon, child.color, 13)}

1413 <span style={{

1414 fontFamily: 'var(--ce-mono)',

1415 fontSize: '12px',

1416 color: 'var(--ce-text-2)'

1417 }}>{child.label}</span>

1418 {child.oneLiner && <span style={{

1419 fontSize: '11px',

1420 color: 'var(--ce-text-4)',

1421 overflow: 'hidden',

1422 textOverflow: 'ellipsis',

1423 whiteSpace: 'nowrap'

1424 }}>{child.oneLiner}</span>}

1425 </button>)}

1426 </div>

1427 </div>}

1428 </div>

1429 </div>

1430 </>;

1431};

1432 

9Claude Code 从您的项目目录和主目录中的 `~/.claude` 读取指令、设置、skills、subagents 和内存。将项目文件提交到 git 以与您的团队共享;`~/.claude` 中的文件是个人配置,适用于您的所有项目。1433Claude Code 从您的项目目录和主目录中的 `~/.claude` 读取指令、设置、skills、subagents 和内存。将项目文件提交到 git 以与您的团队共享;`~/.claude` 中的文件是个人配置,适用于您的所有项目。

10 1434 

11在 Windows 上,`~/.claude` 解析为 `%USERPROFILE%\.claude`。如果您设置了 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars),此页面上的每个 `~/.claude` 路径都将位于该目录下。1435在 Windows 上,`~/.claude` 解析为 `%USERPROFILE%\.claude`。如果您设置了 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars),此页面上的每个 `~/.claude` 路径都将位于该目录下。


18 1442 

19单击树中的文件以查看每个文件的作用、何时加载以及示例。1443单击树中的文件以查看每个文件的作用、何时加载以及示例。

20 1444 

21<h2 id="what-s-not-shown">1445<ClaudeExplorer />

1446 

1447<h2 id="what’s-not-shown">

22 未显示的内容1448 未显示的内容

23</h2>1449</h2>

24 1450 


107下面路径中的文件在启动时被删除,一旦它们的年龄超过 [`cleanupPeriodDays`](/zh-CN/settings#available-settings)。默认值为 30 天。1533下面路径中的文件在启动时被删除,一旦它们的年龄超过 [`cleanupPeriodDays`](/zh-CN/settings#available-settings)。默认值为 30 天。

108 1534 

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

110| -------------------------------------------- | ------------------------------------------------------------------------------------- |1536| -------------------------------------------- | --------------------------------------------------------------------------------------- |

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

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

113| `projects/<project>/<session>/tool-results/` | 大型工具输出溢出到单独的文件 |1539| `projects/<project>/<session>/tool-results/` | 大型工具输出溢出到单独的文件 |

114| `file-history/<session>/` | Claude 更改的文件的编辑前快照,用于[checkpoint 恢复](/zh-CN/checkpointing) |1540| `file-history/<session>/` | Claude 更改的文件的编辑前快照,用于 [checkpoint 恢复](/zh-CN/checkpointing) |

115| `plans/` | 在[Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)期间写入的计划文件 |1541| `plans/` | 在 [Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 期间写入的计划文件 |

116| `debug/` | 每个会话的调试日志,仅在您使用 `--debug` 启动或运行 `/debug` 时写入 |1542| `debug/` | 每个会话的调试日志,仅在您使用 `--debug` 启动或运行 `/debug` 时写入 |

117| `paste-cache/`、`image-cache/` | 大型粘贴和附加图像的内容 |1543| `paste-cache/`、`image-cache/` | 大型粘贴和附加图像的内容 |

118| `session-env/` | 每个会话的环境元数据 |1544| `session-env/` | 每个会话的环境元数据 |


144 1570 

145* 降低 `cleanupPeriodDays` 以缩短记录的保留时间1571* 降低 `cleanupPeriodDays` 以缩短记录的保留时间

146* 设置 [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-CN/env-vars) 环境变量以跳过在任何模式下写入记录和提示历史。在非交互模式下,您可以改为在 `-p` 旁边传递 `--no-session-persistence`,或在 Agent SDK 中设置 `persistSession: false`。1572* 设置 [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-CN/env-vars) 环境变量以跳过在任何模式下写入记录和提示历史。在非交互模式下,您可以改为在 `-p` 旁边传递 `--no-session-persistence`,或在 Agent SDK 中设置 `persistSession: false`。

147* 使用[权限规则](/zh-CN/permissions)拒绝读取凭证文件1573* 使用 [权限规则](/zh-CN/permissions) 拒绝读取凭证文件

148 1574 

149<h3 id="clear-local-data">1575<h3 id="clear-local-data">

150 清除本地数据1576 清除本地数据

Details

6 6 

7> 配置 Claude Code 以使用 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。7> 配置 Claude Code 以使用 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="claude_platform_on_aws" />} />

190 

9AWS 上的 Claude Platform 是 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。请求直接到达 Anthropic 的 API,因此您获得与 [Claude API](https://platform.claude.com/docs) 相同的模型和功能,并遵循相同的发布计划。您可以使用 AWS 凭证或工作区 API 密钥进行身份验证,并通过 AWS Marketplace 付款。191AWS 上的 Claude Platform 是 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。请求直接到达 Anthropic 的 API,因此您获得与 [Claude API](https://platform.claude.com/docs) 相同的模型和功能,并遵循相同的发布计划。您可以使用 AWS 凭证或工作区 API 密钥进行身份验证,并通过 AWS Marketplace 付款。

10 192 

11使用本指南将 Claude Code 指向您已通过 AWS 上的 Claude Platform 配置的工作区。有关在此之前的 AWS 订阅和工作区设置,请参阅 [AWS 上的 Claude Platform 文档](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws)。193使用本指南将 Claude Code 指向您已通过 AWS 上的 Claude Platform 配置的工作区。有关在此之前的 AWS 订阅和工作区设置,请参阅 [AWS 上的 Claude Platform 文档](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws)。


92 3. 固定模型版本274 3. 固定模型版本

93</h3>275</h3>

94 276 

95AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。默认别名 `opus`、`sonnet` 和 `haiku` 解析为您工作区中可用的最新版本277AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。默认别名 `fable`、`opus`、`sonnet` 和 `haiku` 解析为 Claude Code 为 AWS 上的 Claude Platform 内置的默认值,这些值可能滞后于最新版本如果没有 `ANTHROPIC_DEFAULT_OPUS_MODEL`,`opus` 别名解析为 Opus 4.7。

96 278 

97如果您将 Claude Code 部署到团队,请显式固定模型 ID,以便新版本不会一次性移动所有人:279如果您将 Claude Code 部署到团队,请显式固定模型 ID,以便新版本不会一次性移动所有人:

98 280 

99```bash theme={null}281```bash theme={null}

282export ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5

100export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-7283export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-7

101export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-4-6284export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-4-6

102export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5285export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5


154运行 `/status` 以查看已解析的提供程序以及任何显式配置的工作区 ID、区域、基础 URL 覆盖和身份验证跳过设置。这是确认 Claude Code 是否针对 AWS 上的 Claude Platform 的最快方法。337运行 `/status` 以查看已解析的提供程序以及任何显式配置的工作区 ID、区域、基础 URL 覆盖和身份验证跳过设置。这是确认 Claude Code 是否针对 AWS 上的 Claude Platform 的最快方法。

155 338 

156<h3 id="403-forbidden-or-accessdenied-on-every-request">339<h3 id="403-forbidden-or-accessdenied-on-every-request">

157 每个请求都出现 `403 Forbidden` 或 `AccessDenied`340 `403 Forbidden` 或 `AccessDenied` 在每个请求上

158</h3>341</h3>

159 342 

160Claude Code 解析的 IAM 主体可能缺少在您的工作区中调用 Anthropic 服务的权限。检查附加到您的 AWS 配置文件或启动 Claude Code 的运行程序的角色,并验证它具有 [IAM action reference](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions) 中记录的 `aws-external-anthropic` 操作。343Claude Code 解析的 IAM 主体可能缺少在您的工作区中调用 Anthropic 服务的权限。检查附加到您的 AWS 配置文件或启动 Claude Code 的运行程序的角色,并验证它具有 [IAM action reference](https://platform.claude.com/docs/zh-CN/api/claude-platform-on-aws-iam-actions) 中记录的 `aws-external-anthropic` 操作。

161 344 

162如果您设置了 `ANTHROPIC_AWS_API_KEY`,该密钥优先于 SigV4,过期的密钥会产生相同的错误。在 AWS Console 中的 **Claude Platform on AWS → API keys** 下重新生成密钥,或取消设置变量以回退到您的 AWS 凭证。345如果您设置了 `ANTHROPIC_AWS_API_KEY`,该密钥优先于 SigV4,过期的密钥会产生相同的错误。在 AWS Console 中的 **Claude Platform on AWS → API keys** 下重新生成密钥,或取消设置变量以回退到您的 AWS 凭证。

163 346 

cli-reference.md +11 −9

Details

13您可以使用这些命令启动会话、管道内容、恢复对话和管理更新:13您可以使用这些命令启动会话、管道内容、恢复对话和管理更新:

14 14 

15| 命令 | 描述 | 示例 |15| 命令 | 描述 | 示例 |

16| :------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |16| :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |

17| `claude` | 启动交互式会话 | `claude` |17| `claude` | 启动交互式会话 | `claude` |

18| `claude "query"` | 使用初始提示启动交互式会话 | `claude "explain this project"` |18| `claude "query"` | 使用初始提示启动交互式会话 | `claude "explain this project"` |

19| `claude -p "query"` | 通过 SDK 查询,然后退出 | `claude -p "explain this function"` |19| `claude -p "query"` | 通过 SDK 查询,然后退出 | `claude -p "explain this function"` |


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

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

28| `claude auth status` | 以 JSON 格式显示身份验证状态。使用 `--text` 获取人类可读的输出。如果已登录,则以代码 0 退出,如果未登录,则以代码 1 退出 | `claude auth status` |28| `claude auth status` | 以 JSON 格式显示身份验证状态。使用 `--text` 获取人类可读的输出。如果已登录,则以代码 0 退出,如果未登录,则以代码 1 退出 | `claude auth status` |

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

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

31| `claude auto-mode defaults` | 以 JSON 格式打印内置 [auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置 | `claude auto-mode defaults > rules.json` |31| `claude auto-mode defaults` | 以 JSON 格式打印内置 [auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置 | `claude auto-mode defaults > rules.json` |

32| `claude daemon status` | 打印后台会话 [supervisor](/zh-CN/agent-view#the-supervisor-process) 的状态、版本、套接字目录和工作进程数以进行诊断。如果 supervisor 未运行,则退出代码 1 | `claude daemon status` |32| `claude daemon status` | 打印后台会话 [supervisor](/zh-CN/agent-view#the-supervisor-process) 的状态、版本、套接字目录和工作进程数以进行诊断。如果 supervisor 未运行,则退出代码 1 | `claude daemon status` |


51使用这些命令行标志自定义 Claude Code 的行为。`claude --help` 不会列出每个标志,因此标志在 `--help` 中的缺失并不意味着它不可用。51使用这些命令行标志自定义 Claude Code 的行为。`claude --help` 不会列出每个标志,因此标志在 `--help` 中的缺失并不意味着它不可用。

52 52 

53| 标志 | 描述 | 示例 |53| 标志 | 描述 | 示例 |

54| :---------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- |54| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------- |

55| `--add-dir` | 为 Claude 添加额外的工作目录以读取和编辑文件。授予文件访问权限;大多数 `.claude/` 配置 [不会从这些目录中发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。验证每个路径是否存在为目录。要在会话间持久化这些目录,请在设置中设置 [`permissions.additionalDirectories`](/zh-CN/settings#permission-settings) | `claude --add-dir ../apps ../lib` |55| `--add-dir` | 为 Claude 添加额外的工作目录以读取和编辑文件。授予文件访问权限;大多数 `.claude/` 配置 [不会从这些目录中发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。验证每个路径是否存在为目录。要在会话间持久化这些目录,请在设置中设置 [`permissions.additionalDirectories`](/zh-CN/settings#permission-settings) | `claude --add-dir ../apps ../lib` |

56| `--advisor <model>` | {/* min-version: 2.1.98 */}为此会话启用服务器端 [advisor tool](/zh-CN/advisor),使用模型别名:`opus`、`sonnet` 或 `fable`({/* min-version: 2.1.170 */}v2.1.170+),或完整模型 ID。优先于会话的 `advisorModel` 设置。需要 Claude Code v2.1.98 或更高版本 | `claude --advisor opus` |

56| `--agent` | 为当前会话指定代理(覆盖 `agent` 设置) | `claude --agent my-custom-agent` |57| `--agent` | 为当前会话指定代理(覆盖 `agent` 设置) | `claude --agent my-custom-agent` |

57| `--agents` | 通过 JSON 动态定义自定义 subagents。使用与 subagent [frontmatter](/zh-CN/sub-agents#supported-frontmatter-fields) 相同的字段名称,加上代理指令的 `prompt` 字段 | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |58| `--agents` | 通过 JSON 动态定义自定义 subagents。使用与 subagent [frontmatter](/zh-CN/sub-agents#supported-frontmatter-fields) 相同的字段名称,加上代理指令的 `prompt` 字段 | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

58| `--allow-dangerously-skip-permissions` | 将 `bypassPermissions` 添加到 `Shift+Tab` 模式循环中而不启动它。允许您以不同的模式(如 `plan`)开始,稍后切换到 `bypassPermissions`。请参阅 [权限模式](/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |59| `--allow-dangerously-skip-permissions` | 将 `bypassPermissions` 添加到 `Shift+Tab` 模式循环中而不启动它。允许您以不同的模式(如 `plan`)开始,稍后切换到 `bypassPermissions`。请参阅 [权限模式](/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

59| `--allowedTools` | 无需提示权限即可执行的工具。请参阅 [权限规则语法](/zh-CN/settings#permission-rule-syntax) 了解模式匹配。要限制哪些工具可用,请改用 `--tools` | `"Bash(git log *)" "Bash(git diff *)" "Read"` |60| `--allowedTools`, `--allowed-tools` | 无需提示权限即可执行的工具。请参阅 [权限规则语法](/zh-CN/settings#permission-rule-syntax) 了解模式匹配。要限制哪些工具可用,请改用 `--tools` | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

60| `--append-system-prompt` | 将自定义文本附加到默认系统提示的末尾 | `claude --append-system-prompt "Always use TypeScript"` |61| `--append-system-prompt` | 将自定义文本附加到默认系统提示的末尾 | `claude --append-system-prompt "Always use TypeScript"` |

61| `--append-system-prompt-file` | 从文件加载额外的系统提示文本并附加到默认提示 | `claude --append-system-prompt-file ./extra-rules.txt` |62| `--append-system-prompt-file` | 从文件加载额外的系统提示文本并附加到默认提示 | `claude --append-system-prompt-file ./extra-rules.txt` |

62| `--bare` | 最小模式:跳过 hooks、skills、plugins、MCP 服务器、自动内存和 CLAUDE.md 的自动发现,以便脚本化调用启动更快。Claude 可以访问 Bash、文件读取和文件编辑工具。设置 [`CLAUDE_CODE_SIMPLE`](/zh-CN/env-vars)。请参阅 [bare mode](/zh-CN/headless#start-faster-with-bare-mode) | `claude --bare -p "query"` |63| `--bare` | 最小模式:跳过 hooks、skills、plugins、MCP 服务器、自动内存和 CLAUDE.md 的自动发现,以便脚本化调用启动更快。Claude 可以访问 Bash、文件读取和文件编辑工具。设置 [`CLAUDE_CODE_SIMPLE`](/zh-CN/env-vars)。请参阅 [bare mode](/zh-CN/headless#start-faster-with-bare-mode) | `claude --bare -p "query"` |


70| `--debug` | 启用调试模式,可选类别过滤(例如,`"api,hooks"` 或 `"!statsig,!file"`) | `claude --debug "api,mcp"` |71| `--debug` | 启用调试模式,可选类别过滤(例如,`"api,hooks"` 或 `"!statsig,!file"`) | `claude --debug "api,mcp"` |

71| `--debug-file <path>` | 将调试日志写入特定文件路径。隐式启用调试模式。优先于 `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |72| `--debug-file <path>` | 将调试日志写入特定文件路径。隐式启用调试模式。优先于 `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

72| `--disable-slash-commands` | 为此会话禁用所有 skills 和命令 | `claude --disable-slash-commands` |73| `--disable-slash-commands` | 为此会话禁用所有 skills 和命令 | `claude --disable-slash-commands` |

73| `--disallowedTools` | 拒绝规则。裸工具名称从模型的上下文中删除该工具。作用域规则(如 `Bash(rm *)` )使工具保持可用,仅拒绝匹配的调用 | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |74| `--disallowedTools`, `--disallowed-tools` | 拒绝规则。裸工具名称从模型的上下文中删除匹配的工具:`"Edit"` 删除 Edit,`"*"` 删除每个工具,`"mcp__*"` 删除每个 MCP 工具。作用域规则(如 `Bash(rm *)` )使工具保持可用,仅拒绝匹配的调用 | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

74| `--effort` | 为当前会话设置 [工作量级别](/zh-CN/model-config#adjust-effort-level)。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。覆盖此会话的 [`effortLevel`](/zh-CN/settings#available-settings) 设置,不会持久化 | `claude --effort high` |75| `--effort` | 为当前会话设置 [工作量级别](/zh-CN/model-config#adjust-effort-level)。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。覆盖此会话的 [`effortLevel`](/zh-CN/settings#available-settings) 设置,不会持久化 | `claude --effort high` |

75| `--enable-auto-mode` | {/* max-version: 2.1.110 */}在 v2.1.111 中移除。Auto mode 现在默认在 `Shift+Tab` 循环中;使用 `--permission-mode auto` 以它开始 | `claude --permission-mode auto` |76| `--enable-auto-mode` | {/* max-version: 2.1.110 */}在 v2.1.111 中移除。Auto mode 现在默认在 `Shift+Tab` 循环中;使用 `--permission-mode auto` 以它开始 | `claude --permission-mode auto` |

76| `--exclude-dynamic-system-prompt-sections` | 将每台机器的部分从系统提示(工作目录、环境信息、内存路径、git 状态)移到第一条用户消息中。改进在运行相同任务的不同用户和机器之间的提示缓存重用。仅适用于默认系统提示;当设置 `--system-prompt` 或 `--system-prompt-file` 时忽略。与 `-p` 一起用于脚本化的多用户工作负载 | `claude -p --exclude-dynamic-system-prompt-sections "query"` |77| `--exclude-dynamic-system-prompt-sections` | 将每台机器的部分从系统提示(工作目录、环境信息、内存路径、git 状态)移到第一条用户消息中。改进在运行相同任务的不同用户和机器之间的提示缓存重用。仅适用于默认系统提示;当设置 `--system-prompt` 或 `--system-prompt-file` 时忽略。与 `-p` 一起用于脚本化的多用户工作负载 | `claude -p --exclude-dynamic-system-prompt-sections "query"` |

77| `--exec` | 运行 shell 命令作为 PTY 支持的后台作业而不是启动 Claude 会话。与 `--bg` 一起使用以从 shell 启动 | `claude --bg --exec 'pytest -x'` |78| `--exec` | 运行 shell 命令作为 PTY 支持的后台作业而不是启动 Claude 会话。与 `--bg` 一起使用以从 shell 启动 | `claude --bg --exec 'pytest -x'` |

78| `--fallback-model` | 当默认模型过载或不可用时启用自动回退到指定模型,例如已停用的模型。在打印模式(`-p`)和 [后台会话](/zh-CN/agent-view) 中生效这些会话以非交互方式运行;在交互式会话中被忽略 | `claude -p --fallback-model sonnet "query"` |79| `--fallback-model` | 当主模型过载或不可用时启用自动回退到指定的模型,例如已停用的模型。接受逗号分隔的列表,按顺序尝试。请参阅 [Fallback model chains](/zh-CN/model-config#fallback-model-chains)。要在会话间持久化链,请使用 [`fallbackModel` 设置](/zh-CN/settings#available-settings)此标志会覆盖它 | `claude --fallback-model sonnet,haiku` |

79| `--fork-session` | 恢复时,创建新的会话 ID 而不是重用原始 ID(与 `--resume` 或 `--continue` 一起使用) | `claude --resume abc123 --fork-session` |80| `--fork-session` | 恢复时,创建新的会话 ID 而不是重用原始 ID(与 `--resume` 或 `--continue` 一起使用) | `claude --resume abc123 --fork-session` |

80| `--from-pr` | 恢复链接到特定拉取请求的会话。接受 PR 号、GitHub 或 GitHub Enterprise PR URL、GitLab 合并请求 URL 或 Bitbucket 拉取请求 URL。当 Claude 创建拉取请求时会自动链接会话 | `claude --from-pr 123` |81| `--from-pr` | 恢复链接到特定拉取请求的会话。接受 PR 号、GitHub 或 GitHub Enterprise PR URL、GitLab 合并请求 URL 或 Bitbucket 拉取请求 URL。当 Claude 创建拉取请求时会自动链接会话 | `claude --from-pr 123` |

81| `--ide` | 如果恰好有一个有效的 IDE 可用,则在启动时自动连接到 IDE | `claude --ide` |82| `--ide` | 如果恰好有一个有效的 IDE 可用,则在启动时自动连接到 IDE | `claude --ide` |


89| `--max-budget-usd` | API 调用前停止的最大美元金额(仅打印模式) | `claude -p --max-budget-usd 5.00 "query"` |90| `--max-budget-usd` | API 调用前停止的最大美元金额(仅打印模式) | `claude -p --max-budget-usd 5.00 "query"` |

90| `--max-turns` | 限制代理转数(仅打印模式)。达到限制时以错误退出。默认无限制 | `claude -p --max-turns 3 "query"` |91| `--max-turns` | 限制代理转数(仅打印模式)。达到限制时以错误退出。默认无限制 | `claude -p --max-turns 3 "query"` |

91| `--mcp-config` | 从 JSON 文件或字符串加载 MCP 服务器(以空格分隔) | `claude --mcp-config ./mcp.json` |92| `--mcp-config` | 从 JSON 文件或字符串加载 MCP 服务器(以空格分隔) | `claude --mcp-config ./mcp.json` |

92| `--model` | 为当前会话设置模型,使用最新模型的别名(`sonnet` 或 `opus`)或模型的完整名称。覆盖 [`model`](/zh-CN/settings#available-settings) 设置和 [`ANTHROPIC_MODEL`](/zh-CN/model-config#environment-variables) | `claude --model claude-sonnet-4-6` |93| `--model` | 为当前会话设置模型,使用最新模型的别名(`sonnet`、`opus`、`haiku` 或 `fable`)或模型的完整名称。覆盖 [`model`](/zh-CN/settings#available-settings) 设置和 [`ANTHROPIC_MODEL`](/zh-CN/model-config#environment-variables) | `claude --model claude-sonnet-4-6` |

93| `--name`, `-n` | 为会话设置显示名称,显示在 `/resume` 和终端标题中。您可以使用 `claude --resume <name>` 恢复命名会话。<br /><br />[`/rename`](/zh-CN/commands) 在会话中更改名称,也会在提示栏中显示 | `claude -n "my-feature-work"` |94| `--name`, `-n` | 为会话设置显示名称,显示在 `/resume` 和终端标题中。您可以使用 `claude --resume <name>` 恢复命名会话。<br /><br />[`/rename`](/zh-CN/commands) 在会话中更改名称,也会在提示栏中显示 | `claude -n "my-feature-work"` |

94| `--no-chrome` | 为此会话禁用 [Chrome 浏览器集成](/zh-CN/chrome) | `claude --no-chrome` |95| `--no-chrome` | 为此会话禁用 [Chrome 浏览器集成](/zh-CN/chrome) | `claude --no-chrome` |

95| `--no-session-persistence` | 禁用会话持久化,以便会话不会保存到磁盘且无法恢复。仅打印模式。[`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-CN/env-vars) 环境变量在任何模式下都做同样的事情 | `claude -p --no-session-persistence "query"` |96| `--no-session-persistence` | 禁用会话持久化,以便会话不会保存到磁盘且无法恢复。仅打印模式。[`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-CN/env-vars) 环境变量在任何模式下都做同样的事情 | `claude -p --no-session-persistence "query"` |


104| `--remote-control`, `--rc` | 启动启用了 [Remote Control](/zh-CN/remote-control#start-a-remote-control-session) 的交互式会话,以便您也可以从 claude.ai 或 Claude 应用控制它。可选地为会话传递名称 | `claude --remote-control "My Project"` |105| `--remote-control`, `--rc` | 启动启用了 [Remote Control](/zh-CN/remote-control#start-a-remote-control-session) 的交互式会话,以便您也可以从 claude.ai 或 Claude 应用控制它。可选地为会话传递名称 | `claude --remote-control "My Project"` |

105| `--remote-control-session-name-prefix <prefix>` | 当未设置显式名称时,[Remote Control](/zh-CN/remote-control) 自动生成会话名称的前缀。默认为您的机器的主机名,生成名称如 `myhost-graceful-unicorn`。设置 `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` 以获得相同效果 | `claude remote-control --remote-control-session-name-prefix dev-box` |106| `--remote-control-session-name-prefix <prefix>` | 当未设置显式名称时,[Remote Control](/zh-CN/remote-control) 自动生成会话名称的前缀。默认为您的机器的主机名,生成名称如 `myhost-graceful-unicorn`。设置 `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` 以获得相同效果 | `claude remote-control --remote-control-session-name-prefix dev-box` |

106| `--replay-user-messages` | 从 stdin 重新发出用户消息到 stdout 以进行确认。需要 `--input-format stream-json` 和 `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |107| `--replay-user-messages` | 从 stdin 重新发出用户消息到 stdout 以进行确认。需要 `--input-format stream-json` 和 `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |

107| `--resume`, `-r` | 按 ID 或名称恢复特定会话,或显示交互式选择器以选择会话。包括使用 `/add-dir` 添加此目录的会话。截至 v2.1.144,[后台会话](/zh-CN/agent-view) 在选择器中显示,标记为 `bg` | `claude --resume auth-refactor` |108| `--resume`, `-r` | 按 ID 或名称恢复特定会话,或显示交互式选择器以选择会话。选择器和名称搜索包括使用 `/add-dir` 添加此目录的会话;传递会话 ID 仅搜索当前项目目录及其 git worktrees。截至 v2.1.144,[后台会话](/zh-CN/agent-view) 在选择器中显示,标记为 `bg` | `claude --resume auth-refactor` |

109| `--safe-mode` | {/* min-version: 2.1.169 */}以所有自定义禁用的状态启动以排查损坏的配置:CLAUDE.md、skills、plugins、hooks、MCP 服务器、自定义命令和代理、输出样式、工作流、自定义主题、自定义快捷键、状态行和文件建议命令、LSP 服务器和自动内存不加载。身份验证、模型选择、内置工具和权限正常工作,这与 [`--bare`](/zh-CN/headless#start-faster-with-bare-mode) 不同。托管设置策略仍然适用,包括策略配置的 hooks、状态行和文件建议命令;托管插件、托管 skills、托管 CLAUDE.md 和策略配置的 MCP 服务器不适用。用于检查自定义是否触发 [从 Fable 5 自动回退](/zh-CN/model-config#automatic-model-fallback)。设置 [`CLAUDE_CODE_SAFE_MODE`](/zh-CN/env-vars) | `claude --safe-mode` |

108| `--session-id` | 为对话使用特定的会话 ID(必须是有效的 UUID) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |110| `--session-id` | 为对话使用特定的会话 ID(必须是有效的 UUID) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

109| `--setting-sources` | 逗号分隔的设置源列表以加载(`user`、`project`、`local`) | `claude --setting-sources user,project` |111| `--setting-sources` | 逗号分隔的设置源列表以加载(`user`、`project`、`local`) | `claude --setting-sources user,project` |

110| `--settings` | 设置 JSON 文件的路径或内联 JSON 字符串。您在此处设置的值会覆盖此会话的 `settings.json` 文件中的相同键。您省略的键保留其基于文件的值。请参阅 [设置优先级](/zh-CN/settings#settings-precedence) | `claude --settings ./settings.json` |112| `--settings` | 设置 JSON 文件的路径或内联 JSON 字符串。您在此处设置的值会覆盖此会话的 `settings.json` 文件中的相同键。您省略的键保留其基于文件的值。请参阅 [设置优先级](/zh-CN/settings#settings-precedence) | `claude --settings ./settings.json` |


114| `--teleport` | 在本地终端中恢复 [网络会话](/zh-CN/claude-code-on-the-web) | `claude --teleport` |116| `--teleport` | 在本地终端中恢复 [网络会话](/zh-CN/claude-code-on-the-web) | `claude --teleport` |

115| `--teammate-mode` | 设置 [agent team](/zh-CN/agent-teams) 队友的显示方式:`auto`(默认)、`in-process` 或 `tmux`。覆盖此会话的 [`teammateMode`](/zh-CN/settings#available-settings) 设置。请参阅 [选择显示模式](/zh-CN/agent-teams#choose-a-display-mode) | `claude --teammate-mode in-process` |117| `--teammate-mode` | 设置 [agent team](/zh-CN/agent-teams) 队友的显示方式:`auto`(默认)、`in-process` 或 `tmux`。覆盖此会话的 [`teammateMode`](/zh-CN/settings#available-settings) 设置。请参阅 [选择显示模式](/zh-CN/agent-teams#choose-a-display-mode) | `claude --teammate-mode in-process` |

116| `--tmux` | 为 worktree 创建 tmux 会话。需要 `--worktree`。在可用时使用 iTerm2 原生窗格;传递 `--tmux=classic` 以使用传统 tmux | `claude -w feature-auth --tmux` |118| `--tmux` | 为 worktree 创建 tmux 会话。需要 `--worktree`。在可用时使用 iTerm2 原生窗格;传递 `--tmux=classic` 以使用传统 tmux | `claude -w feature-auth --tmux` |

117| `--tools` | 限制 Claude 可以使用的内置工具。使用 `""` 禁用所有,`"default"` 表示全部,或工具名称如 `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |119| `--tools` | 限制 Claude 可以使用的内置工具。使用 `""` 禁用所有,`"default"` 表示全部,或工具名称如 `"Bash,Edit,Read"`。MCP 工具不受影响;要拒绝这些工具,请改用 `--disallowedTools "mcp__*"`,或传递 `--strict-mcp-config` 而不带 `--mcp-config` 以便不加载 MCP 服务器 | `claude --tools "Bash,Edit,Read"` |

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

119| `--version`, `-v` | 输出版本号 | `claude -v` |121| `--version`, `-v` | 输出版本号 | `claude -v` |

120| `--worktree`, `-w` | 在隔离的 [git worktree](/zh-CN/worktrees) 中启动 Claude,位于 `<repo>/.claude/worktrees/<name>`。如果未给出名称,则自动生成一个。传递 `#<number>` 或 GitHub 拉取请求 URL 以从 `origin` 获取该 PR 并从其分支 worktree | `claude -w feature-auth` |122| `--worktree`, `-w` | 在隔离的 [git worktree](/zh-CN/worktrees) 中启动 Claude,位于 `<repo>/.claude/worktrees/<name>`。如果未给出名称,则自动生成一个。传递 `#<number>` 或 GitHub 拉取请求 URL 以从 `origin` 获取该 PR 并从其分支 worktree | `claude -w feature-auth` |

code-review.md +5 −5

Details

290 290 

291GitHub 检查选项卡中的**重新运行**按钮不会重新触发 Code Review。改用注释命令或新推送。291GitHub 检查选项卡中的**重新运行**按钮不会重新触发 Code Review。改用注释命令或新推送。

292 292 

293<h3 id="review-didn-t-run-and-the-pr-shows-a-spend-cap-message">293<h3 id="review-didnt-run-and-the-pr-shows-a-spend-cap-message">

294 审查未运行,PR 显示支出上限消息294 审查未运行,PR 显示支出上限消息

295</h3>295</h3>

296 296 

297当您的组织的每月支出上限达到时,Code Review 在 PR 上发布单条评论,解释审查被跳过。审查在下一个计费周期开始时自动恢复,或当管理员在 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) 提高上限时立即恢复。297当您的组织的每月支出上限达到时,Code Review 在 PR 上发布单条评论,解释审查被跳过。审查在下一个计费周期开始时自动恢复,或当管理员在 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) 提高上限时立即恢复。

298 298 

299<h3 id="find-issues-that-aren-t-showing-as-inline-comments">299<h3 id="find-issues-that-arent-showing-as-inline-comments">

300 查找未显示为内联评论的问题300 查找未显示为内联评论的问题

301</h3>301</h3>

302 302 


310 在本地审查差异310 在本地审查差异

311</h2>311</h2>

312 312 

313[`/code-review` 命令](/zh-CN/commands)在您的终端中审查差异,无需安装 GitHub App。在任何 Claude Code 会话中运行它:它报告当前差异中的正确性错误,以及{/* min-version: 2.1.151 */}重用、简化和效率清理。传递 `--comment` 以将发现作为内联 PR 评论发布,或传递 `--fix` 以在审查后将发现应用到您的工作树。313[`/code-review` 命令](/zh-CN/commands)在您的终端中审查差异,无需安装 GitHub App。在任何 Claude Code 会话中运行它:它报告正确性错误和{/* min-version: 2.1.151 */}重用、简化和效率清理。默认情况下,本地审查涵盖您分支相对于其上游的提前提交加上工作树中的任何未提交更改。传递 `--comment` 以将发现作为内联 PR 评论发布,或传递 `--fix` 以在审查后将发现应用到您的工作树。

314 314 

315较低的[工作量级别](/zh-CN/model-config#adjust-effort-level)返回较少、更高置信度的发现,而 `high` 到 `max` 提供更广泛的覆盖范围,可能包括不确定的发现。没有工作量参数,审查使用会话的当前工作量。传递路径或 PR 引用以审查特定目标而不是当前差异315较低的[工作量级别](/zh-CN/model-config#adjust-effort-level)返回较少、更高置信度的发现,而 `high` 到 `max` 提供更广泛的覆盖范围,可能包括不确定的发现。没有工作量参数,审查使用会话的当前工作量。要审查默认差异以外的内容,请传递一个目标:文件路径、PR 编号、分支名称或引用范围,例如 `main...my-feature`引用范围形式审查从 `my-feature` 到 `main` 的拉取请求将包含的已提交差异,无论分支的上游如何配置。

316 316 

317`/code-review ultra --fix` 在云中运行更深入的 [ultrareview](/zh-CN/ultrareview),然后在发现到达您的会话时将其应用到您的工作树。317`/code-review ultra --fix` 在云中运行更深入的 [ultrareview](/zh-CN/ultrareview),然后在发现到达您的会话时将其应用到您的工作树。Ultrareview 使用其自己的范围:您当前的分支与存储库的默认分支,加上工作树中的任何未提交和暂存的更改。

318 318 

319该命令在 v2.1.147 之前被命名为 `/simplify`,当时它默认应用修复。{/* min-version: 2.1.154 */}从 v2.1.154 开始,`/simplify` 运行单独的仅清理审查,应用修复而不寻找错误。如果您为错误查找编写了 `/simplify` 脚本,请切换到 `/code-review --fix`,它保持不变。319该命令在 v2.1.147 之前被命名为 `/simplify`,当时它默认应用修复。{/* min-version: 2.1.154 */}从 v2.1.154 开始,`/simplify` 运行单独的仅清理审查,应用修复而不寻找错误。如果您为错误查找编写了 `/simplify` 脚本,请切换到 `/code-review --fix`,它保持不变。

320 320 

commands.md +24 −13

Details

12 12 

13命令只在您的消息开头被识别。命令名称后面的文本作为参数传递给它。13命令只在您的消息开头被识别。命令名称后面的文本作为参数传递给它。

14 14 

15## 典型工作流程中的命令15<h2 id="commands-across-a-typical-workflow">

16 典型工作流程中的命令

17</h2>

16 18 

17大多数命令在会话的特定点很有用,从设置项目到发布更改。19大多数命令在会话的特定点很有用,从设置项目到发布更改。

18 20 


28 30 

29**当出现问题时。** `/rewind` 将代码和对话回滚到检查点,或总结对话的一部分。`/doctor` 和 `/debug` 诊断安装和运行时问题,`/feedback` 报告附加会话上下文的错误。31**当出现问题时。** `/rewind` 将代码和对话回滚到检查点,或总结对话的一部分。`/doctor` 和 `/debug` 诊断安装和运行时问题,`/feedback` 报告附加会话上下文的错误。

30 32 

31## 所有命令33<h2 id="all-commands">

34 所有命令

35</h2>

32 36 

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

34 38 


46| 命令 | 用途 |50| 命令 | 用途 |

47| :--------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |51| :--------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

48| `/add-dir <path>` | 为当前会话期间的文件访问添加工作目录。大多数 `.claude/` 配置[不会从添加的目录中发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。您可以稍后使用 `--continue` 或 `--resume` 从添加的目录恢复会话 |52| `/add-dir <path>` | 为当前会话期间的文件访问添加工作目录。大多数 `.claude/` 配置[不会从添加的目录中发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。您可以稍后使用 `--continue` 或 `--resume` 从添加的目录恢复会话 |

53| `/advisor [model\|off]` | {/* min-version: 2.1.98 */}启用或禁用[顾问工具](/zh-CN/advisor),它在任务期间的关键时刻咨询第二个模型以获取指导。接受 `opus`、`sonnet`、`fable`({/* min-version: 2.1.170 */}v2.1.170+)或完整模型 ID。不带参数时,打开选择器。需要 Claude Code v2.1.98 或更高版本 |

49| `/agents` | 管理 [agent](/zh-CN/sub-agents) 配置 |54| `/agents` | 管理 [agent](/zh-CN/sub-agents) 配置 |

50| `/autofix-pr [prompt]` | 生成一个[网络版 Claude Code](/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 和访问[网络版 Claude Code](/zh-CN/claude-code-on-the-web#who-can-use-claude-code-on-the-web) |55| `/autofix-pr [prompt]` | 生成一个[网络版 Claude Code](/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 和访问[网络版 Claude Code](/zh-CN/claude-code-on-the-web) |

51| `/background [prompt]` | 将当前会话分离以作为[后台 agent](/zh-CN/agent-view) 运行并释放此终端。传递一个提示以在分离前发送一条更多指令。使用 `claude agents` 监视会话。别名:`/bg` |56| `/background [prompt]` | 将当前会话分离以作为[后台 agent](/zh-CN/agent-view) 运行并释放此终端。传递一个提示以在分离前发送一条更多指令。使用 `claude agents` 监视会话。别名:`/bg` |

52| `/batch <instruction>` | **[Skill](/zh-CN/skills#bundled-skills).** 在整个代码库中并行编排大规模更改。研究代码库,将工作分解为 5 到 30 个独立单元,并呈现一个计划。获得批准后,在隔离的 [git worktree](/zh-CN/worktrees) 中为每个单元生成一个[后台 subagent](/zh-CN/sub-agents#run-subagents-in-foreground-or-background)。每个 subagent 实现其单元、运行测试并打开一个 pull request。需要一个 git 存储库。示例:`/batch migrate src/ from Solid to React` |57| `/batch <instruction>` | **[Skill](/zh-CN/skills#bundled-skills).** 在整个代码库中并行编排大规模更改。研究代码库,将工作分解为 5 到 30 个独立单元,并呈现一个计划。获得批准后,在隔离的 [git worktree](/zh-CN/worktrees) 中为每个单元生成一个[后台 subagent](/zh-CN/sub-agents#run-subagents-in-foreground-or-background)。每个 subagent 实现其单元、运行测试并打开一个 pull request。需要一个 git 存储库。示例:`/batch migrate src/ from Solid to React` |

53| `/branch [name]` | 在此点创建当前对话的分支。切换到分支并保留原始分支,您可以使用 `/resume` 返回。别名:`/fork`。当设置 [`CLAUDE_CODE_FORK_SUBAGENT`](/zh-CN/env-vars) ,`/fork` 改为生成一个[分叉的 subagent](/zh-CN/sub-agents#fork-the-current-conversation),不再是此命令的别名 |58| `/branch [name]` | 在此点创建当前对话的分支,以便您可以尝试不同的方向而不会丢失当前的对话。切换到分支并保留原始分支,您可以使用 `/resume` 返回。要将附加任务交给后台 subagent 而不是自己切换到副本请使用 `/fork` |

54| `/btw <question>` | 提出快速[附加问题](/zh-CN/interactive-mode#side-questions-with-%2Fbtw),无需添加到对话中 |59| `/btw <question>` | 提出快速[附加问题](/zh-CN/interactive-mode#side-questions-with-%2Fbtw),无需添加到对话中 |

60| `/cd <path>` | {/* min-version: 2.1.169 */}将此会话移动到新的工作目录。对话的提示缓存被保留:新目录的 [`CLAUDE.md`](/zh-CN/memory) 作为消息附加,而不是重建系统提示。会话被重新定位到新目录的项目存储,因此 `--resume` 和 `--continue` 从那里找到它。如果您之前未在该目录中工作过,会提示您信任该目录。要授予对额外目录的访问权限而不移动会话,请使用 `/add-dir`。使用 [`Cd` 权限规则](/zh-CN/permissions#cd) 限制或禁用 `/cd` 目标。需要 Claude Code v2.1.169 或更高版本;早期版本报告 `Unknown command: /cd` |

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

56| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/zh-CN/skills#bundled-skills).** 为您的项目语言(Python、TypeScript、Java、Go、Ruby、C#、PHP 或 cURL)和 Managed Agents 参考加载 Claude API 参考资料。涵盖工具使用、流式传输、批处理、结构化输出和常见陷阱。当您的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。运行 `/claude-api migrate` 以将现有 Claude API 代码升级到更新的模型:Claude 询问要扫描哪些文件以及要针对哪个模型,然后更新在版本之间更改的模型 ID、thinking 配置和其他参数。运行 `/claude-api managed-agents-onboard` 以获得交互式演练,从头开始创建新的 Managed Agent |62| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/zh-CN/skills#bundled-skills).** 为您的项目语言(Python、TypeScript、Java、Go、Ruby、C#、PHP 或 cURL)和 Managed Agents 参考加载 Claude API 参考资料。涵盖工具使用、流式传输、批处理、结构化输出和常见陷阱。当您的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。运行 `/claude-api migrate` 以将现有 Claude API 代码升级到更新的模型:Claude 询问要扫描哪些文件以及要针对哪个模型,然后更新在版本之间更改的模型 ID、thinking 配置和其他参数。运行 `/claude-api managed-agents-onboard` 以获得交互式演练,从头开始创建新的 Managed Agent |

57| `/clear [name]` | 使用空上下文启动新对话。之前的对话在 `/resume` 中保持可用。传递一个名称以在 `/resume` 选择器中标记之前的对话。要在继续同一对话的同时释放上下文,请改用 `/compact`。别名:`/reset`、`/new` |63| `/clear [name]` | 使用空上下文启动新对话。之前的对话在 `/resume` 中保持可用。传递一个名称以在 `/resume` 选择器中标记之前的对话。要在继续同一对话的同时释放上下文,请改用 `/compact`。别名:`/reset`、`/new` |


74| `/feedback [report]` | 提交反馈、报告错误或分享您的对话。别名:`/bug`、`/share` |80| `/feedback [report]` | 提交反馈、报告错误或分享您的对话。别名:`/bug`、`/share` |

75| `/fewer-permission-prompts` | **[Skill](/zh-CN/skills#bundled-skills).** 扫描您的记录以查找常见的只读 Bash 和 MCP 工具调用,然后向项目 `.claude/settings.json` 添加优先级允许列表以减少权限提示 |81| `/fewer-permission-prompts` | **[Skill](/zh-CN/skills#bundled-skills).** 扫描您的记录以查找常见的只读 Bash 和 MCP 工具调用,然后向项目 `.claude/settings.json` 添加优先级允许列表以减少权限提示 |

76| `/focus` | 切换焦点视图,仅显示您的最后一个提示、带有编辑 diffstats 的单行工具调用摘要和最终响应。选择在会话间保持。仅在[全屏渲染](/zh-CN/fullscreen)中可用 |82| `/focus` | 切换焦点视图,仅显示您的最后一个提示、带有编辑 diffstats 的单行工具调用摘要和最终响应。选择在会话间保持。仅在[全屏渲染](/zh-CN/fullscreen)中可用 |

83| `/fork <directive>` | {/* min-version: 2.1.161 */}生成一个[分叉的 subagent](/zh-CN/sub-agents#fork-the-current-conversation):一个继承完整对话的后台 subagent,在您继续进行时处理该指令。其结果在完成时返回到您的对话。要自己切换到对话的副本,请使用 `/branch`。在 v2.1.161 之前,`/fork` 是 `/branch` 的别名 |

77| `/goal [condition\|clear]` | 设置一个[目标](/zh-CN/goal):Claude 在多个轮次中继续工作,直到满足条件。不带参数时,显示当前或最近实现的目标。`clear`、`stop`、`off`、`reset`、`none` 或 `cancel` 会提前移除活跃目标 |84| `/goal [condition\|clear]` | 设置一个[目标](/zh-CN/goal):Claude 在多个轮次中继续工作,直到满足条件。不带参数时,显示当前或最近实现的目标。`clear`、`stop`、`off`、`reset`、`none` 或 `cancel` 会提前移除活跃目标 |

78| `/heapdump` | 将 JavaScript 堆快照和内存分解写入 `~/Desktop`,或在 Linux 上没有 Desktop 文件夹的情况下写入您的主目录,以诊断高内存使用情况。请参阅[故障排除](/zh-CN/troubleshooting#high-cpu-or-memory-usage) |85| `/heapdump` | 将 JavaScript 堆快照和内存分解写入 `~/Desktop`,或在 Linux 上没有 Desktop 文件夹的情况下写入您的主目录,以诊断高内存使用情况。请参阅[故障排除](/zh-CN/troubleshooting#high-cpu-or-memory-usage) |

79| `/help` | 显示帮助和可用命令 |86| `/help` | 显示帮助和可用命令 |


83| `/insights` | 生成报告,分析您的 Claude Code 会话,包括项目领域、交互模式和摩擦点 |90| `/insights` | 生成报告,分析您的 Claude Code 会话,包括项目领域、交互模式和摩擦点 |

84| `/install-github-app` | 为存储库设置 [Claude GitHub Actions](/zh-CN/github-actions) 应用。引导您选择存储库并配置集成 |91| `/install-github-app` | 为存储库设置 [Claude GitHub Actions](/zh-CN/github-actions) 应用。引导您选择存储库并配置集成 |

85| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |92| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |

86| `/keybindings` | 打开或创建您的快捷键配置文件 |93| `/keybindings` | 打开您的[快捷键](/zh-CN/keybindings)文件 |

87| `/login` | 登录到您的 Anthropic 账户 |94| `/login` | 登录到您的 Anthropic 账户 |

88| `/logout` | 从您的 Anthropic 账户登出 |95| `/logout` | 从您的 Anthropic 账户登出 |

89| `/loop [interval] [prompt]` | **[Skill](/zh-CN/skills#bundled-skills).** 在会话保持打开状态时重复运行提示。省略间隔,Claude 会在迭代之间自动调整步速。省略提示,Claude 运行自主维护检查,或运行 `.claude/loop.md` 中的提示(如果[可用](/zh-CN/scheduled-tasks#run-the-built-in-maintenance-prompt)。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示](/zh-CN/scheduled-tasks)。别名:`/proactive` |96| `/loop [interval] [prompt]` | **[Skill](/zh-CN/skills#bundled-skills).** 在会话保持打开状态时重复运行提示。省略间隔,Claude 会在迭代之间自动调整步速。省略提示,[在可用的地方](/zh-CN/scheduled-tasks#run-the-built-in-maintenance-prompt)Claude 运行自主维护检查或运行 `.claude/loop.md` 中的提示。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示](/zh-CN/scheduled-tasks)。别名:`/proactive` |

90| `/mcp` | 管理 MCP server 连接和 OAuth 身份验证 |97| `/mcp [reconnect <server>\|enable\|disable [<server>\|all]]` | 管理 MCP server 连接和 OAuth 身份验证。不带参数运行以打开交互式列表,传递 `reconnect <server>` 以重新连接一个断开连接的 server,或传递 `enable`/`disable` 与 server 名称或 `all` 以更改连接状态而不打开对话框 |

91| `/memory` | 编辑 `CLAUDE.md` 内存文件,启用或禁用 [auto-memory](/zh-CN/memory#auto-memory),并查看自动内存条目 |98| `/memory` | 编辑 `CLAUDE.md` 内存文件,启用或禁用 [auto-memory](/zh-CN/memory#auto-memory),并查看自动内存条目 |

92| `/mobile` | 显示二维码以下载 Claude 移动应用。别名:`/ios`、`/android` |99| `/mobile` | 显示二维码以下载 Claude 移动应用。别名:`/ios`、`/android` |

93| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认值。对于支持的模型,使用左/右箭头[调整工作量级别](/zh-CN/model-config#adjust-effort-level)。不带参数时,打开选择器;在一行上按 `s` 以仅为当前会话切换。当对话有先前输出时,选择器要求确认,因为下一个响应会重新读取完整历史记录而不使用缓存的上下文。确认后,更改立即生效,无需等待当前响应完成 |100| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认值。对于支持的模型,使用左/右箭头[调整工作量级别](/zh-CN/model-config#adjust-effort-level)。不带参数时,打开选择器;在一行上按 `s` 以仅为当前会话切换。当对话有先前输出时,选择器要求确认,因为下一个响应会重新读取完整历史记录而不使用缓存的上下文。确认后,更改立即生效,无需等待当前响应完成 |

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

95| `/permissions` | 管理工具权限的允许、询问和拒绝规则。打开交互式对话框,您可以按范围查看规则、添加或删除规则、管理工作目录,以及查看[最近的自动模式拒绝](/zh-CN/auto-mode-config#review-denials)。别名:`/allowed-tools` |102| `/permissions` | 管理工具权限的允许、询问和拒绝规则。打开交互式对话框,您可以按范围查看规则、添加或删除规则、管理工作目录,以及查看[最近的自动模式拒绝](/zh-CN/auto-mode-config#review-denials)。别名:`/allowed-tools` |

96| `/plan [description]` | 直接从提示进入 Plan Mode。传递可选描述以进入 Plan Mode 并立即开始该任务,例如 `/plan fix the auth bug` |103| `/plan [description]` | 直接从提示进入 Plan Mode。传递可选描述以进入 Plan Mode 并立即开始该任务,例如 `/plan fix the auth bug` |

97| `/plugin` | 管理 Claude Code [plugins](/zh-CN/plugins) |104| `/plugin [subcommand]` | 管理 Claude Code [plugins](/zh-CN/plugins)。不带参数运行以打开 plugin 菜单,或传递子命令如 `list`、`install`、`enable` 或 `disable` 以直接执行 |

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

99| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}在 v2.1.91 中移除。改为直接询问 Claude 以查看 pull request 评论。在早期版本中,从 GitHub pull request 获取并显示评论;自动检测当前分支的 PR,或传递 PR URL 或编号。需要 `gh` CLI |106| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}在 v2.1.91 中移除。改为直接询问 Claude 以查看 pull request 评论。在早期版本中,从 GitHub pull request 获取并显示评论;自动检测当前分支的 PR,或传递 PR URL 或编号。需要 `gh` CLI |

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

101| `/radio` | 在浏览器中打开 Claude FM lo-fi 电台。当浏览器不可用时打印流 URL。在 Bedrock、Vertex 或 Foundry 上不可用 |108| `/radio` | 在浏览器中打开 Claude FM lo-fi 电台。当浏览器不可用时打印流 URL。在 Bedrock、Vertex 或 Foundry 上不可用 |

102| `/recap` | 按需生成当前会话的单行摘要。请参阅[会话摘要](/zh-CN/interactive-mode#session-recap)以了解您离开后出现的自动摘要 |109| `/recap` | 按需生成当前会话的单行摘要。请参阅[会话摘要](/zh-CN/interactive-mode#session-recap)以了解您离开后出现的自动摘要 |

103| `/release-notes` | 在交互式版本选择器中查看更改日志。选择特定版本以查看其发布说明,或选择显示所有版本 |110| `/release-notes` | 在交互式版本选择器中查看更改日志。选择特定版本以查看其发布说明,或选择显示所有版本 |

104| `/reload-plugins` | 重新加载所有活跃 [plugins](/zh-CN/plugins) 以应用待处理的更改,无需重启。报告每个已重新加载组件的计数并标记任何加载错误 |111| `/reload-plugins [--force]` | 重新加载所有活跃 [plugins](/zh-CN/plugins) 以应用待处理的更改而无需重启。报告每个已重新加载组件的计数并标记任何加载错误。当重新加载会改变加载哪些 MCP 工具并使提示缓存失效时,该命令会警告并跳过,除非您传递 `--force` |

105| `/reload-skills` | {/* min-version: 2.1.152 */}重新扫描 [skill](/zh-CN/skills) 和命令目录,以便在会话期间添加或更改的 skills 在磁盘上变得可用,无需重启。报告有多少 skills 可用以及添加或删除了多少 |112| `/reload-skills` | {/* min-version: 2.1.152 */}重新扫描 [skill](/zh-CN/skills) 和命令目录,以便在会话期间添加或更改的 skills 在磁盘上变得可用,无需重启。报告有多少 skills 可用以及添加或删除了多少 |

106| `/remote-control` | 使此会话可从 claude.ai 进行[远程控制](/zh-CN/remote-control)。别名:`/rc` |113| `/remote-control` | 使此会话可从 claude.ai 进行[远程控制](/zh-CN/remote-control)。别名:`/rc` |

107| `/remote-env` | 为[使用 `--remote` 启动的网络会话](/zh-CN/claude-code-on-the-web#configure-your-environment)配置默认远程环境 |114| `/remote-env` | 为[ agents](/zh-CN/claude-code-on-the-web#configure-your-environment) 选择默认环境 |

108| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。不使用名称时,从对话历史记录自动生成一个 |115| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。不使用名称时,从对话历史记录自动生成一个 |

109| `/resume [session]` | 按 ID 或名称恢复对话,或打开会话选择器。从 v2.1.144 起,[后台会话](/zh-CN/agent-view)在选择器中显示,标记为 `bg`。别名:`/continue` |116| `/resume [session]` | 按 ID 或名称恢复对话,或打开会话选择器。从 v2.1.144 起,[后台会话](/zh-CN/agent-view)在选择器中显示,标记为 `bg`。别名:`/continue` |

110| `/review [PR]` | 在当前会话中本地审阅 pull request。要进行更深入的基于云的审阅,请参阅 [`/code-review ultra`](/zh-CN/ultrareview) |117| `/review [PR]` | 在当前会话中本地审阅 pull request。要进行更深入的基于云的审阅,请参阅 [`/code-review ultra`](/zh-CN/ultrareview) |


124| `/statusline` | 配置 Claude Code 的[状态行](/zh-CN/statusline)。描述您想要的内容,或不带参数运行以从您的 shell 提示自动配置 |131| `/statusline` | 配置 Claude Code 的[状态行](/zh-CN/statusline)。描述您想要的内容,或不带参数运行以从您的 shell 提示自动配置 |

125| `/stickers` | 订购 Claude Code 贴纸 |132| `/stickers` | 订购 Claude Code 贴纸 |

126| `/stop` | 停止当前[后台会话](/zh-CN/agent-view)。仅在附加到后台会话时可用;记录和任何 worktree 都会保留。要分离而不停止,请使用 `/exit` 或按 `←` |133| `/stop` | 停止当前[后台会话](/zh-CN/agent-view)。仅在附加到后台会话时可用;记录和任何 worktree 都会保留。要分离而不停止,请使用 `/exit` 或按 `←` |

127| `/tasks` | 列出并管理后台任务。也可用作 `/bashes` |134| `/tasks` | 查看和管理后台运行的所有内容。也可用作 `/bashes` |

128| `/team-onboarding` | 从您的 Claude Code 使用历史记录生成团队入职指南。Claude 分析您过去 30 天的会话、命令和 MCP server 使用情况,并生成一个 markdown 指南,团队成员可以粘贴为第一条消息以快速设置。对于 Pro、Max、Team 和 Enterprise 计划上的 claude.ai 订阅者,还返回一个共享链接,团队成员可以直接在 Claude Code 中打开 |135| `/team-onboarding` | 从您的 Claude Code 使用历史记录生成团队入职指南。Claude 分析您过去 30 天的会话、命令和 MCP server 使用情况,并生成一个 markdown 指南,团队成员可以粘贴为第一条消息以快速设置。对于 Pro、Max、Team 和 Enterprise 计划上的 claude.ai 订阅者,还返回一个共享链接,团队成员可以直接在 Claude Code 中打开 |

129| `/teleport` | 将[网络版 Claude Code](/zh-CN/claude-code-on-the-web#from-web-to-terminal) 会话拉入此终端:打开选择器,然后获取分支和对话。也可用作 `/tp`。需要 claude.ai 订阅 |136| `/teleport` | 将[网络版 Claude Code](/zh-CN/claude-code-on-the-web#from-web-to-terminal) 会话拉入此终端:打开选择器,然后获取分支和对话。也可用作 `/tp`。需要 claude.ai 订阅 |

130| `/terminal-setup` | 为 Shift+Enter 和其他快捷键配置终端快捷键。仅在需要它的终端中可见,如 VS Code、Cursor、Devin Desktop、Alacritty 或 Zed |137| `/terminal-setup` | 为 Shift+Enter 和其他快捷键配置终端快捷键。仅在需要它的终端中可见,如 VS Code、Cursor、Devin Desktop、Alacritty 或 Zed |


141| `/web-setup` | 使用您的本地 `gh` CLI 凭证将您的 GitHub 账户连接到[网络版 Claude Code](/zh-CN/web-quickstart#connect-from-your-terminal)。如果 GitHub 未连接,`/schedule` 会自动提示此操作 |148| `/web-setup` | 使用您的本地 `gh` CLI 凭证将您的 GitHub 账户连接到[网络版 Claude Code](/zh-CN/web-quickstart#connect-from-your-terminal)。如果 GitHub 未连接,`/schedule` 会自动提示此操作 |

142| `/workflows` | 打开[工作流](/zh-CN/workflows#watch-the-run)进度视图以监视、暂停、恢复或保存运行中和已完成的工作流 |149| `/workflows` | 打开[工作流](/zh-CN/workflows#watch-the-run)进度视图以监视、暂停、恢复或保存运行中和已完成的工作流 |

143 150 

144## MCP prompts151<h2 id="mcp-prompts">

152 MCP prompts

153</h2>

145 154 

146MCP servers 可以公开显示为命令的 prompts。这些使用格式 `/mcp__<server>__<prompt>`,并从连接的服务器动态发现。有关详细信息,请参阅 [MCP prompts](/zh-CN/mcp#use-mcp-prompts-as-commands)。155MCP servers 可以公开显示为命令的 prompts。这些使用格式 `/mcp__<server>__<prompt>`,并从连接的服务器动态发现。有关详细信息,请参阅 [MCP prompts](/zh-CN/mcp#use-mcp-prompts-as-commands)。

147 156 

148## 另请参阅157<h2 id="see-also">

158 另请参阅

159</h2>

149 160 

150* [Skills](/zh-CN/skills):创建您自己的命令161* [Skills](/zh-CN/skills):创建您自己的命令

151* [Interactive mode](/zh-CN/interactive-mode):快捷键、Vim 模式和命令历史记录162* [Interactive mode](/zh-CN/interactive-mode):快捷键、Vim 模式和命令历史记录

Details

521claude --permission-mode plan521claude --permission-mode plan

522```522```

523 523 

524您也可以在会话中按 `Shift+Tab` 切换到 plan mode。有关批准流程和在文本编辑器中编辑计划,请参阅 [Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。524您也可以在会话中按 `Shift+Tab` 切换到 plan mode。有关批准流程和在文本编辑器中编辑计划,请参阅 [Plan mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。

525 525 

526<h2 id="delegate-research-to-subagents">526<h2 id="delegate-research-to-subagents">

527 将研究委派给 subagents527 将研究委派给 subagents

Details

198使用 Opus 修复打字错误会浪费计算。使用 Haiku 进行 12 文件重构198使用 Opus 修复打字错误会浪费计算。使用 Haiku 进行 12 文件重构

199是在要求重做。199是在要求重做。

200 200 

201Claude Code 在与 Claude 应用相同的模型上运行,您可以在会话中间切换。*Sonnet* 是日常功能工作、错误、测试和审查的主力默认值。在大型重构、复杂调试或任何高风险的事情上使用 *Opus*。对于快速问题、格式化和速度获胜的机械编辑,降低到 *Haiku*。201Claude Code 在与 Claude 应用相同的模型上运行,您可以在会话中间切换。*Sonnet* 是日常功能工作、错误、测试和审查的主力默认值。在大型重构、复杂调试或任何高风险的事情上使用 *Opus*。对于快速问题、格式化和速度获胜的机械编辑,降低到 *Haiku*。*Fable 5* 是您最困难、最长时间运行任务的最强大模型;它不是默认值,所以使用 `/model fable` 选择它,请注意网络安全和生物学内容会自动回退到 Opus。

202 202 

203*现在尝试:* 输入 `/model` 并选择 Sonnet(如果您还没有的话)。它是大多数任务的正确默认值。203*现在尝试:* 输入 `/model` 并选择 Sonnet(如果您还没有的话)。它是大多数任务的正确默认值。

204 204 

205📖 模型配置 → https://code.claude.com/docs/en/model-config205📖 Model configuration → https://code.claude.com/docs/zh-CN/model-config

206```206```

207 207 

208| 模型 | 最适合 |208| 模型 | 最适合 |

209| ------ | ----------------------------- |209| ------- | ------------------------------------------------------------------------------------------------------------ |

210| Fable 5 | 最困难、最长时间运行的任务。仅选择加入:使用 `/model fable` 选择它。网络安全或生物学内容[回退到 Opus](/zh-CN/model-config#automatic-model-fallback) |

210| Opus | 大规模重构、复杂调试、架构决策、高风险更改 |211| Opus | 大规模重构、复杂调试、架构决策、高风险更改 |

211| Sonnet | 日常功能工作、错误修复、测试、文档、代码审查。推荐默认值。 |212| Sonnet | 日常功能工作、错误修复、测试、文档、代码审查。推荐默认值。 |

212| Haiku | 快速问题、格式化、机械编辑、快速迭代 |213| Haiku | 快速问题、格式化、机械编辑、快速迭代 |


226 227 

227*现在尝试:* 选择您一直在避免的错误并粘贴错误消息。228*现在尝试:* 选择您一直在避免的错误并粘贴错误消息。

228 229 

229📖 快速入门 → https://code.claude.com/docs/en/quickstart230📖 Quickstart → https://code.claude.com/docs/zh-CN/quickstart

230```231```

231 232 

232<h3 id="project-memory">233<h3 id="project-memory">


244 245 

245*现在尝试:* 打开您的主仓库,运行 `claude`,输入 `/init`。三十秒,在之后的每个会话中都有回报。246*现在尝试:* 打开您的主仓库,运行 `claude`,输入 `/init`。三十秒,在之后的每个会话中都有回报。

246 247 

247📖 CLAUDE.md 和项目记忆 → https://code.claude.com/docs/en/memory248📖 CLAUDE.md and project memory → https://code.claude.com/docs/zh-CN/memory

248```249```

249 250 

250**@-引用**251**@-引用**


260 261 

261*现在尝试:* 输入 `@` 然后 Tab。自动完成显示您可以到达的每个文件。262*现在尝试:* 输入 `@` 然后 Tab。自动完成显示您可以到达的每个文件。

262 263 

263📖 引用文件 → https://code.claude.com/docs/en/common-workflows264📖 Referencing files → https://code.claude.com/docs/zh-CN/common-workflows

264```265```

265 266 

266<h3 id="control-and-safety">267<h3 id="control-and-safety">


278 279 

279*现在尝试:* 在您的下一个重构上,按 Shift+Tab 直到您看到"plan",然后描述更改。您将在单个文件移动之前获得完整的提议。280*现在尝试:* 在您的下一个重构上,按 Shift+Tab 直到您看到"plan",然后描述更改。您将在单个文件移动之前获得完整的提议。

280 281 

281📖 权限模式 → https://code.claude.com/docs/en/permissions282📖 Permission modes → https://code.claude.com/docs/zh-CN/permissions

282```283```

283 284 

284**Checkpointing 和 `/rewind`**285**Checkpointing 和 `/rewind`**


292 293 

293*现在尝试:* 按 *Esc* 两次打开倒带菜单,或输入 `/rewind`。选择事情变得不对劲之前的点。294*现在尝试:* 按 *Esc* 两次打开倒带菜单,或输入 `/rewind`。选择事情变得不对劲之前的点。

294 295 

295📖 Checkpointing → https://code.claude.com/docs/en/checkpointing296📖 Checkpointing → https://code.claude.com/docs/zh-CN/checkpointing

296```297```

297 298 

298<h3 id="connect-your-tools">299<h3 id="connect-your-tools">


310 311 

311*现在尝试:* 问 Claude "在这个仓库中为 [GitHub/Jira/Linear] 设置一个 MCP 连接器"。它将为您写配置。312*现在尝试:* 问 Claude "在这个仓库中为 [GitHub/Jira/Linear] 设置一个 MCP 连接器"。它将为您写配置。

312 313 

313📖 MCP 连接器 → https://code.claude.com/docs/en/mcp314📖 MCP connectors → https://code.claude.com/docs/zh-CN/mcp

314```315```

315 316 

316<h3 id="automate-your-workflows">317<h3 id="automate-your-workflows">


328 329 

329*现在尝试:* 输入"为我制作一个 /standup skill,从 git log 总结我今天所做的工作",然后明天早上运行 `/standup`。330*现在尝试:* 输入"为我制作一个 /standup skill,从 git log 总结我今天所做的工作",然后明天早上运行 `/standup`。

330 331 

331📖 Skills → https://code.claude.com/docs/en/skills332📖 Skills → https://code.claude.com/docs/zh-CN/skills

332```333```

333 334 

334**Hooks**335**Hooks**


342 343 

343*现在尝试:* 问 Claude "添加一个 Stop hook,当您完成时发送桌面通知"。它将写脚本并连接它。344*现在尝试:* 问 Claude "添加一个 Stop hook,当您完成时发送桌面通知"。它将写脚本并连接它。

344 345 

345📖 Hooks 指南 → https://code.claude.com/docs/en/hooks-guide346📖 Hooks guide → https://code.claude.com/docs/zh-CN/hooks-guide

346```347```

347 348 

348<h3 id="day-to-day-development">349<h3 id="day-to-day-development">


360 361 

361*现在尝试:* 下次视觉上出现问题时,截图并直接粘贴到提示中。然后只需输入"这里出了什么问题?"362*现在尝试:* 下次视觉上出现问题时,截图并直接粘贴到提示中。然后只需输入"这里出了什么问题?"

362 363 

363📖 使用图像 → https://code.claude.com/docs/en/common-workflows364📖 Working with images → https://code.claude.com/docs/zh-CN/common-workflows

364```365```

365 366 

366**Git 工作流**367**Git 工作流**


374 375 

375*现在尝试:* 在您的下一个修复后,而不是切换到您的 git 客户端,只需输入"用一个好消息提交这个并打开一个 PR"。376*现在尝试:* 在您的下一个修复后,而不是切换到您的 git 客户端,只需输入"用一个好消息提交这个并打开一个 PR"。

376 377 

377📖 创建拉取请求 → https://code.claude.com/docs/en/common-workflows378📖 Creating pull requests → https://code.claude.com/docs/zh-CN/common-workflows

378```379```

379 380 

380<h3 id="share-and-scale">381<h3 id="share-and-scale">


392 393 

393*现在尝试:* 输入 `/plugin` 并滚动浏览。您会找到至少一件您不知道自己想要的东西。394*现在尝试:* 输入 `/plugin` 并滚动浏览。您会找到至少一件您不知道自己想要的东西。

394 395 

395📖 Plugins → https://code.claude.com/docs/en/plugins396📖 Plugins → https://code.claude.com/docs/zh-CN/plugins

396```397```

397 398 

398<h3 id="security-and-admin">399<h3 id="security-and-admin">


411 412 

412*现在尝试:* 保存这两个链接以备下次问题出现。它们回答了大多数安全审查问题。413*现在尝试:* 保存这两个链接以备下次问题出现。它们回答了大多数安全审查问题。

413 414 

414📖 https://code.claude.com/docs/en/security415📖 https://code.claude.com/docs/zh-CN/security

415📖 https://code.claude.com/docs/en/data-usage416📖 https://code.claude.com/docs/zh-CN/data-usage

416```417```

417 418 

418**最佳实践**419**最佳实践**


429 430 

430*现在尝试:* 如果您只做了其中一两个,选择您缺少的那个并在您的下一个任务上做。在 #claude-code 中发布什么改变了。431*现在尝试:* 如果您只做了其中一两个,选择您缺少的那个并在您的下一个任务上做。在 #claude-code 中发布什么改变了。

431 432 

432📖 最佳实践 → https://code.claude.com/docs/en/best-practices433📖 Best practices → https://code.claude.com/docs/zh-CN/best-practices

433```434```

434 435 

435<h2 id="quick-reference">436<h2 id="quick-reference">

computer-use.md +1 −1

Details

229 229 

230授予 Screen Recording 后,macOS 有时需要重启请求进程。完全退出 Claude Code 并启动新会话。如果提示仍然存在,打开 **System Settings > Privacy & Security > Screen Recording** 并确认您的终端应用已列出并启用。230授予 Screen Recording 后,macOS 有时需要重启请求进程。完全退出 Claude Code 并启动新会话。如果提示仍然存在,打开 **System Settings > Privacy & Security > Screen Recording** 并确认您的终端应用已列出并启用。

231 231 

232<h3 id="computer-use-doesn-t-appear-in-/mcp">232<h3 id="computer-use-doesnt-appear-in-/mcp">

233 `computer-use` 不出现在 `/mcp` 中233 `computer-use` 不出现在 `/mcp` 中

234</h3>234</h3>

235 235 

context-window.md +1591 −5

Details

6 6 

7> Claude Code 上下文窗口在会话期间如何填充的交互式模拟。查看自动加载的内容、每个文件读取的成本以及规则和 hooks 何时触发。7> Claude Code 上下文窗口在会话期间如何填充的交互式模拟。查看自动加载的内容、每个文件读取的成本以及规则和 hooks 何时触发。

8 8 

9Claude Code 的上下文窗口包含 Claude 在您的会话中了解的所有内容:您的指令、它读取的文件、它自己的响应以及从不在您的终端中出现的内容。下面的时间线展示了加载的内容和时间。有关相同内容的列表形式,请参阅[书面分解](#what-the-timeline-shows)9export const ContextWindow = () => {

10 const MAX = 200000;

11 const STARTUP_END = 0.2;

12 {}

13 const EVENTS = useMemo(() => [{}, {

14 t: 0.015,

15 kind: 'auto',

16 label: 'System prompt',

17 tokens: 4200,

18 color: '#6B6964',

19 vis: 'hidden',

20 desc: 'Core instructions for behavior, tool use, and response formatting. Always loaded first. You never see it.',

21 link: null

22 }, {

23 t: 0.035,

24 kind: 'auto',

25 label: 'Auto memory (MEMORY.md)',

26 tokens: 680,

27 color: '#E8A45C',

28 vis: 'hidden',

29 desc: "Claude's notes to itself from previous sessions: build commands it learned, patterns it noticed, mistakes to avoid. The first 200 lines or 25KB, whichever comes first, are loaded into the conversation context.",

30 link: '/en/memory#auto-memory'

31 }, {

32 t: 0.06,

33 kind: 'auto',

34 label: 'Environment info',

35 tokens: 280,

36 color: '#6B6964',

37 vis: 'hidden',

38 desc: 'Working directory, platform, shell, OS version, and whether this is a git repo. Git branch, status, and recent commits load as a separate block at the very end of the system prompt.',

39 link: null

40 }, {

41 t: 0.08,

42 kind: 'auto',

43 label: 'MCP tools (deferred)',

44 tokens: 120,

45 color: '#9B7BC4',

46 vis: 'hidden',

47 desc: 'MCP tool names listed so Claude knows what is available. By default, full schemas stay deferred and Claude loads specific ones on demand via tool search when a task needs them. Set `ENABLE_TOOL_SEARCH=auto` to load schemas upfront when they fit within 10% of the context window, or `ENABLE_TOOL_SEARCH=false` to load everything.',

48 link: '/en/mcp#scale-with-mcp-tool-search'

49 }, {

50 t: 0.1,

51 kind: 'auto',

52 label: 'Skill descriptions',

53 tokens: 450,

54 color: '#D4A843',

55 vis: 'hidden',

56 noSurviveCompact: true,

57 desc: 'One-line descriptions of available skills so Claude knows what it can invoke. Full skill content loads only when Claude actually uses one. Skills with `disable-model-invocation: true` are not in this list. They stay completely out of context until you invoke them with `/name`. Unlike the rest of the startup content, this listing is not re-injected after `/compact`. Only skills you actually invoked get preserved.',

58 link: '/en/skills'

59 }, {

60 t: 0.12,

61 kind: 'auto',

62 label: '~/.claude/CLAUDE.md',

63 tokens: 320,

64 color: '#6A9BCC',

65 vis: 'hidden',

66 desc: 'Your global preferences. Applies to every project. Loaded alongside project instructions at the start of every conversation.',

67 link: '/en/memory#choose-where-to-put-claude-md-files'

68 }, {

69 t: 0.14,

70 kind: 'auto',

71 label: 'Project CLAUDE.md',

72 tokens: 1800,

73 color: '#6A9BCC',

74 vis: 'hidden',

75 desc: 'Project conventions, build commands, architecture notes. The most important file you can create. Lives in your project root, so your whole team gets the same instructions.',

76 tip: 'Keep it under 200 lines. Move reference content to skills or path-scoped rules so it only loads when needed.',

77 link: '/en/memory'

78 }, {}, {

79 t: 0.22,

80 kind: 'user',

81 label: 'Your prompt',

82 tokens: 45,

83 color: '#558A42',

84 vis: 'full',

85 desc: '"Fix the auth bug where users get 401 after token refresh"',

86 link: null

87 }, {}, {

88 t: 0.28,

89 kind: 'claude',

90 label: 'Read src/api/auth.ts',

91 tokens: 2400,

92 color: '#8A8880',

93 vis: 'brief',

94 desc: 'Main auth file. You see "Read auth.ts" in your terminal, but the 2,400 tokens of file content only Claude sees.',

95 tip: 'File reads dominate context usage. Be specific in prompts ("fix the bug in auth.ts") so Claude reads fewer files. For research-heavy tasks, use a subagent.',

96 link: null

97 }, {

98 t: 0.32,

99 kind: 'claude',

100 label: 'Read src/lib/tokens.ts',

101 tokens: 1100,

102 color: '#8A8880',

103 vis: 'brief',

104 desc: 'Following imports to the token module. Shown as a one-liner in your terminal.',

105 link: null

106 }, {

107 t: 0.35,

108 kind: 'auto',

109 label: 'Rule: api-conventions.md',

110 tokens: 380,

111 color: '#4A9B8E',

112 vis: 'brief',

113 desc: 'This rule in `.claude/rules/` has a `paths:` pattern matching `src/api/**`. It loaded automatically when Claude read a file in that directory. You see "Loaded .claude/rules/api-conventions.md" in your terminal, but not the rule content.',

114 link: '/en/memory#path-specific-rules'

115 }, {

116 t: 0.38,

117 kind: 'claude',

118 label: 'Read middleware.ts',

119 tokens: 1800,

120 color: '#8A8880',

121 vis: 'brief',

122 desc: 'Tracing the auth flow deeper.',

123 link: null

124 }, {

125 t: 0.41,

126 kind: 'claude',

127 label: 'Read auth.test.ts',

128 tokens: 1600,

129 color: '#8A8880',

130 vis: 'brief',

131 desc: 'Checking existing tests for expected behavior.',

132 link: null

133 }, {

134 t: 0.44,

135 kind: 'auto',

136 label: 'Rule: testing.md',

137 tokens: 290,

138 color: '#4A9B8E',

139 vis: 'brief',

140 desc: 'Another path-scoped rule, this one matching `*.test.ts` files. Triggered when Claude read auth.test.ts. Shown as a one-line "Loaded" notice.',

141 link: '/en/memory#path-specific-rules'

142 }, {

143 t: 0.47,

144 kind: 'claude',

145 label: 'grep "refreshToken"',

146 tokens: 600,

147 color: '#A09E96',

148 vis: 'brief',

149 desc: 'Search results across the codebase. You see the command ran, not the full output.',

150 link: null

151 }, {}, {

152 t: 0.53,

153 kind: 'claude',

154 label: "Claude's analysis",

155 tokens: 800,

156 color: '#D97757',

157 vis: 'full',

158 desc: 'Explains the bug: token invalidated too early in the rotation. This text appears in your terminal.',

159 link: null

160 }, {

161 t: 0.57,

162 kind: 'claude',

163 label: 'Edit auth.ts',

164 tokens: 400,

165 color: '#D97757',

166 vis: 'full',

167 desc: 'Fixes the token rotation order. The diff appears in your terminal.',

168 link: null

169 }, {

170 t: 0.59,

171 kind: 'hook',

172 label: 'Hook: prettier',

173 tokens: 120,

174 color: '#B8860B',

175 vis: 'hidden',

176 desc: 'A PostToolUse hook in `settings.json` runs prettier after every file edit and reports back via `hookSpecificOutput.additionalContext`. That field enters Claude\'s context. Plain stdout on exit 0 does not. It is written to the debug log only.',

177 tip: 'Output JSON with `additionalContext` to send info to Claude. For PostToolUse hooks, exit code 2 surfaces stderr as an error but cannot block since the tool already ran. Keep output concise since it enters context without truncation.',

178 link: '/en/hooks-guide'

179 }, {

180 t: 0.62,

181 kind: 'claude',

182 label: 'Edit auth.test.ts',

183 tokens: 600,

184 color: '#D97757',

185 vis: 'full',

186 desc: 'Adds a regression test for the fix. The diff appears in your terminal.',

187 link: null

188 }, {

189 t: 0.64,

190 kind: 'hook',

191 label: 'Hook: prettier',

192 tokens: 100,

193 color: '#B8860B',

194 vis: 'hidden',

195 desc: 'The same hook fires again for the test file. Every matching tool event triggers it.',

196 link: '/en/hooks-guide'

197 }, {

198 t: 0.67,

199 kind: 'claude',

200 label: 'npm test output',

201 tokens: 1200,

202 color: '#A09E96',

203 vis: 'brief',

204 desc: 'Runs the test suite. You see "Running npm test..." and the pass count, not the full 1,200 tokens of output.',

205 link: null

206 }, {

207 t: 0.70,

208 kind: 'claude',

209 label: 'Summary',

210 tokens: 400,

211 color: '#D97757',

212 vis: 'full',

213 desc: '"Fixed token rotation. Added regression test. All tests pass."',

214 link: null

215 }, {}, {

216 t: 0.72,

217 kind: 'user',

218 label: 'Your follow-up',

219 tokens: 40,

220 color: '#558A42',

221 vis: 'full',

222 desc: '"Use a subagent to research session timeout handling, then fix it"',

223 tip: 'Follow-ups add to the same context. Delegating research to a subagent keeps large file reads out of your main window.',

224 link: null

225 }, {

226 t: 0.79,

227 kind: 'claude',

228 label: 'Spawn research subagent',

229 tokens: 80,

230 color: '#D97757',

231 vis: 'brief',

232 desc: "Claude delegates the research to a subagent with a fresh, separate context window. It loads CLAUDE.md and the same MCP and skill setup, but starts without your conversation history or the main session's auto memory.",

233 link: '/en/sub-agents'

234 }, {

235 t: 0.795,

236 kind: 'sub',

237 label: 'System prompt',

238 tokens: 0,

239 subTokens: 900,

240 color: '#6B6964',

241 vis: 'hidden',

242 desc: "The subagent gets its own system prompt, shorter than the main session's. For the general-purpose agent, it's a brief prompt plus environment details. The main session's auto memory is not included. If a custom agent has memory: in its frontmatter, it loads its own separate MEMORY.md here instead.",

243 link: '/en/sub-agents#enable-persistent-memory'

244 }, {

245 t: 0.80,

246 kind: 'sub',

247 label: 'Project CLAUDE.md (own copy)',

248 tokens: 0,

249 subTokens: 1800,

250 color: '#6A9BCC',

251 vis: 'hidden',

252 desc: "The subagent loads CLAUDE.md too. Same file, same content, but it counts against the subagent's context, not yours. The built-in Explore and Plan agents skip this for a smaller context.",

253 link: '/en/sub-agents'

254 }, {

255 t: 0.805,

256 kind: 'sub',

257 label: 'MCP tools + skills',

258 tokens: 0,

259 subTokens: 970,

260 color: '#9B7BC4',

261 vis: 'hidden',

262 desc: "The subagent has access to the same MCP servers and skills. It gets most of the parent's tools, minus several that don't apply in a nested context, including plan-mode controls, background-task tools, and by default the Agent tool itself to prevent recursion.",

263 link: '/en/sub-agents'

264 }, {

265 t: 0.81,

266 kind: 'sub',

267 label: 'Task prompt from main',

268 tokens: 0,

269 subTokens: 120,

270 color: '#558A42',

271 vis: 'hidden',

272 desc: "Instead of a user prompt, the subagent receives the task Claude wrote for it: 'Research session timeout handling in this codebase.'",

273 link: '/en/sub-agents'

274 }, {

275 t: 0.82,

276 kind: 'sub',

277 label: 'Read session.ts',

278 tokens: 0,

279 subTokens: 2200,

280 color: '#8A8880',

281 vis: 'hidden',

282 desc: "Now the subagent does its work. This file read fills the subagent's context, not yours.",

283 link: '/en/sub-agents'

284 }, {

285 t: 0.825,

286 kind: 'sub',

287 label: 'Read timeouts.ts',

288 tokens: 0,

289 subTokens: 800,

290 color: '#8A8880',

291 vis: 'hidden',

292 desc: "Another file read in the subagent's separate context.",

293 link: '/en/sub-agents'

294 }, {

295 t: 0.83,

296 kind: 'sub',

297 label: 'Read config/*.ts',

298 tokens: 0,

299 subTokens: 3100,

300 color: '#8A8880',

301 vis: 'hidden',

302 desc: "The subagent can read as many files as it needs. None of this touches your main context.",

303 link: '/en/sub-agents'

304 }, {

305 t: 0.85,

306 kind: 'claude',

307 label: 'Subagent returns summary',

308 tokens: 420,

309 color: '#D97757',

310 vis: 'brief',

311 desc: "Only the subagent's final text response comes back to your context, plus a small metadata trailer with token counts and duration. The subagent read 6,100 tokens of files. You got a 420-token result. That's the context savings.",

312 link: '/en/sub-agents'

313 }, {

314 t: 0.86,

315 kind: 'claude',

316 label: "Claude's response",

317 tokens: 1200,

318 color: '#D97757',

319 vis: 'full',

320 desc: 'Analysis and fix for session timeouts. This text appears in your terminal.',

321 link: null

322 }, {}, {

323 t: 0.875,

324 kind: 'user',

325 label: '!git status',

326 tokens: 180,

327 color: '#558A42',

328 vis: 'full',

329 desc: "You ran a shell command with the ! prefix to see which files Claude modified. The command and its output both enter context as part of your message. Useful for grounding Claude in command output without Claude running it.",

330 link: '/en/interactive-mode#bash-mode-with-prefix'

331 }, {

332 t: 0.89,

333 kind: 'user',

334 label: '/commit-push',

335 tokens: 620,

336 color: '#558A42',

337 vis: 'brief',

338 desc: 'You invoked a skill that has `disable-model-invocation: true`. Its description was not in the skill index at startup, so it cost zero context until this moment. Now the full skill content loads and Claude follows its instructions to stage, commit, and push your changes.',

339 tip: 'Set `disable-model-invocation: true` on skills with side effects like committing, deploying, or sending messages. They stay out of context entirely until you need them.',

340 link: '/en/skills#control-who-invokes-a-skill'

341 }, {}, {

342 t: 0.93,

343 kind: 'compact',

344 label: '/compact',

345 tokens: 0,

346 color: '#D97757',

347 vis: 'brief',

348 desc: 'Replaces the conversation with a structured summary. You see a "Conversation compacted" message. The summarization happens without appearing in your terminal.',

349 link: '/en/how-claude-code-works#the-context-window'

350 }].filter(e => e.t !== undefined), []);

351 const VIS_META = {

352 hidden: {

353 label: 'Invisible in your terminal',

354 sub: 'This content does not appear in your terminal.'

355 },

356 brief: {

357 label: 'One-liner in your terminal',

358 sub: 'You see a brief mention, not the full content.'

359 },

360 full: {

361 label: 'Shown in your terminal',

362 sub: 'The actual content appears in your terminal.'

363 }

364 };

365 {}

366 const GATES = [{

367 at: 0.18,

368 kind: 'prompt',

369 text: 'Fix the auth bug where users get 401 after token refresh',

370 resumeTo: 0.22

371 }, {

372 at: 0.705,

373 kind: 'prompt',

374 text: 'Use a subagent to research session timeout handling, then fix it',

375 resumeTo: 0.72

376 }, {

377 at: 0.865,

378 kind: 'bang',

379 text: '!git status',

380 resumeTo: 0.875

381 }, {

382 at: 0.88,

383 kind: 'slash',

384 text: '/commit-push',

385 resumeTo: 0.89

386 }, {

387 at: 0.90,

388 kind: 'compact',

389 text: '/compact',

390 resumeTo: 1

391 }];

392 const KIND_META = {

393 auto: {

394 badge: 'auto',

395 detail: 'Auto-loaded',

396 badgeBg: 'rgba(94,93,89,0.15)',

397 badgeColor: '#8A8880'

398 },

399 user: {

400 badge: 'you',

401 detail: 'You typed this',

402 badgeBg: 'rgba(85,138,66,0.15)',

403 badgeColor: '#6BA656'

404 },

405 claude: {

406 badge: 'claude',

407 detail: "Claude's work",

408 badgeBg: 'rgba(217,119,87,0.12)',

409 badgeColor: '#D97757'

410 },

411 hook: {

412 badge: 'hook',

413 detail: 'Hook (automatic)',

414 badgeBg: 'rgba(184,134,11,0.15)',

415 badgeColor: '#CCA020'

416 },

417 compact: {

418 badge: 'compact',

419 detail: 'Compaction',

420 badgeBg: 'rgba(217,119,87,0.12)',

421 badgeColor: '#D97757'

422 },

423 sub: {

424 badge: 'subagent',

425 detail: "In subagent's context",

426 badgeBg: 'rgba(155,123,196,0.12)',

427 badgeColor: '#9B7BC4'

428 }

429 };

430 const LEGEND = [{

431 c: '#6B6964',

432 l: 'System'

433 }, {

434 c: '#6A9BCC',

435 l: 'CLAUDE.md'

436 }, {

437 c: '#E8A45C',

438 l: 'Memory'

439 }, {

440 c: '#D4A843',

441 l: 'Skills'

442 }, {

443 c: '#9B7BC4',

444 l: 'MCP'

445 }, {

446 c: '#4A9B8E',

447 l: 'Rules'

448 }, {

449 c: '#558A42',

450 l: 'You'

451 }, {

452 c: '#8A8880',

453 l: 'Files'

454 }, {

455 c: '#A09E96',

456 l: 'Output'

457 }, {

458 c: '#D97757',

459 l: 'Claude'

460 }, {

461 c: '#B8860B',

462 l: 'Hooks'

463 }];

464 const fmt = n => n >= 1000 ? (n / 1000).toFixed(1).replace(/\.0$/, '') + 'K' : n + '';

465 const [time, setTime] = useState(0);

466 const [playing, setPlaying] = useState(false);

467 const [hovIdx, setHovIdx] = useState(null);

468 const [selIdx, setSelIdx] = useState(null);

469 const [hovCat, setHovCat] = useState(null);

470 const [gatesPassed, setGatesPassed] = useState(0);

471 const [mounted, setMounted] = useState(false);

472 const [hasInteracted, setHasInteracted] = useState(false);

473 const lastRef = useRef(null);

474 const scrollRef = useRef(null);

475 const detailRef = useRef(null);

476 useEffect(() => setMounted(true), []);

477 const activeGate = GATES.find((g, i) => i >= gatesPassed && time >= g.at && time < g.resumeTo);

478 useEffect(() => {

479 if (!playing) return;

480 let raf;

481 let stopped = false;

482 const tick = ts => {

483 if (stopped) return;

484 if (!lastRef.current) lastRef.current = ts;

485 const dt = (ts - lastRef.current) / 1000;

486 lastRef.current = ts;

487 setTime(prev => {

488 const next = prev + dt * 0.032;

489 const gate = GATES.find((g, i) => i >= gatesPassed && next >= g.at && prev < g.resumeTo);

490 if (gate) {

491 stopped = true;

492 setPlaying(false);

493 return gate.at;

494 }

495 if (next >= 1) {

496 stopped = true;

497 setPlaying(false);

498 return 1;

499 }

500 return next;

501 });

502 if (!stopped) raf = requestAnimationFrame(tick);

503 };

504 raf = requestAnimationFrame(tick);

505 return () => {

506 stopped = true;

507 cancelAnimationFrame(raf);

508 lastRef.current = null;

509 };

510 }, [playing, gatesPassed]);

511 const sendPrompt = () => {

512 if (!activeGate) return;

513 const isCompact = activeGate.kind === 'compact';

514 setGatesPassed(n => n + 1);

515 setTime(activeGate.resumeTo);

516 setSelIdx(null);

517 setHovIdx(null);

518 if (!isCompact) setPlaying(true);

519 };

520 const visibleCount = EVENTS.filter(e => e.t <= time).length;

521 const preCompactVisible = useMemo(() => EVENTS.slice(0, visibleCount), [EVENTS, visibleCount]);

522 const compactGateIdx = GATES.length - 1;

523 const isCompacted = gatesPassed > compactGateIdx && preCompactVisible.some(e => e.kind === 'compact');

524 const {visible, preCompactTotal} = useMemo(() => {

525 const nonCompact = preCompactVisible.filter(e => e.kind !== 'compact');

526 if (!isCompacted) {

527 return {

528 visible: preCompactVisible,

529 preCompactTotal: 0

530 };

531 }

532 {}

533 const autoLoads = nonCompact.filter(e => e.kind === 'auto' && e.t < STARTUP_END && !e.noSurviveCompact);

534 const summarized = nonCompact.filter(e => e.t >= STARTUP_END && e.kind !== 'sub');

535 const sumTokens = summarized.reduce((s, e) => s + e.tokens, 0);

536 const summaryBlock = {

537 t: STARTUP_END,

538 kind: 'compact',

539 label: 'Conversation summary',

540 tokens: Math.round(sumTokens * 0.12),

541 color: '#A09E96',

542 vis: 'hidden',

543 desc: `All ${summarized.length} conversation events condensed into one structured summary. The summary keeps: your requests and intent, key technical concepts, files examined or modified with important code snippets, errors and how they were fixed, pending tasks, and current work. It replaces the verbatim conversation: full tool outputs and intermediate reasoning are gone. Claude can still reference the work but won't have the exact code it read earlier.`,

544 link: '/en/how-claude-code-works#the-context-window'

545 };

546 return {

547 visible: [...autoLoads, summaryBlock],

548 preCompactTotal: nonCompact.reduce((s, e) => s + e.tokens, 0)

549 };

550 }, [preCompactVisible, isCompacted]);

551 const {blocks, totalTokens} = useMemo(() => {

552 const bl = visible.map((e, visIdx) => ({

553 ...e,

554 id: e.label + e.t,

555 visIdx

556 })).filter(e => e.tokens > 0 || e.label === 'Conversation summary');

557 return {

558 blocks: bl,

559 totalTokens: bl.reduce((s, b) => s + b.tokens, 0)

560 };

561 }, [visible]);

562 const subTotal = useMemo(() => visible.filter(e => e.kind === 'sub').reduce((s, e) => s + (e.subTokens || 0), 0), [visible]);

563 useEffect(() => {

564 if (!scrollRef.current) return;

565 if (isCompacted) scrollRef.current.scrollTo({

566 top: 0,

567 behavior: 'smooth'

568 }); else if (playing || activeGate) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;

569 }, [visible.length, !!activeGate, isCompacted]);

570 const rootRef = useRef(null);

571 const keyStateRef = useRef({});

572 const [isFullscreen, setIsFullscreen] = useState(false);

573 keyStateRef.current = {

574 time,

575 activeGate,

576 sendPrompt,

577 hasInteracted

578 };

579 useEffect(() => {

580 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

581 document.addEventListener('fullscreenchange', onFsChange);

582 return () => document.removeEventListener('fullscreenchange', onFsChange);

583 }, []);

584 const toggleFullscreen = () => {

585 if (!rootRef.current) return;

586 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

587 };

588 useEffect(() => {

589 const onKey = e => {

590 const tag = e.target.tagName;

591 if (tag === 'INPUT' || tag === 'BUTTON' || tag === 'TEXTAREA' || tag === 'SELECT' || e.target.isContentEditable) return;

592 if (!rootRef.current) return;

593 const rect = rootRef.current.getBoundingClientRect();

594 if (rect.width === 0 && rect.height === 0) return;

595 if (rect.bottom < 0 || rect.top > window.innerHeight) return;

596 if (e.code === 'Space') {

597 const {time: t, activeGate: g, sendPrompt: send, hasInteracted: hi} = keyStateRef.current;

598 if (!hi) return;

599 e.preventDefault();

600 if (t === 0) setPlaying(true); else if (g) send(); else if (t >= 1) {

601 setTime(0);

602 setGatesPassed(0);

603 setSelIdx(null);

604 setHovIdx(null);

605 setPlaying(true);

606 } else setPlaying(p => !p);

607 }

608 };

609 window.addEventListener('keydown', onKey);

610 return () => window.removeEventListener('keydown', onKey);

611 }, []);

612 const pct = totalTokens / MAX * 100;

613 const barColor = pct > 75 ? '#D97757' : pct > 50 ? '#B8860B' : '#558A42';

614 const activeIdx = selIdx !== null ? selIdx : hovIdx;

615 const hovEvent = activeIdx !== null ? visible[activeIdx] : null;

616 useEffect(() => {

617 if (detailRef.current) detailRef.current.scrollTop = 0;

618 }, [hovEvent]);

619 const focusT = hovEvent ? hovEvent.t : time;

620 const takeaway = isCompacted ? 'Compaction replaces the conversation with a structured summary. System prompt, CLAUDE.md, memory, and MCP tools reload automatically. The skill listing is the one exception. Only skills you actually invoked are preserved.' : focusT < STARTUP_END ? 'A lot loads before you type anything. CLAUDE.md, memory, skills, and MCP tools are all in context before your first prompt.' : focusT < 0.28 ? "Your prompt is tiny compared to what's already loaded. Most of Claude's context is project knowledge, not your words." : focusT < 0.50 ? 'Each file Claude reads grows the context. Path-scoped rules load automatically alongside matching files.' : focusT < 0.71 ? 'Hooks fire automatically on tool events. Output reaches Claude via additionalContext JSON. Exit code 2 surfaces stderr to Claude. Plain stdout on exit 0 goes to the debug log, not the transcript.' : focusT < 0.79 ? 'Follow-up questions keep building on the same context. Everything from earlier is still there.' : focusT < 0.87 ? "The subagent works in its own separate context window. None of its file reads touch yours. Only the final summary comes back." : focusT < 0.88 ? 'Bang commands run in your shell and prefix the output to your next message. Useful for grounding Claude in command results without it running them.' : focusT < 0.90 ? 'User-only skills stay out of context entirely until you invoke them. The skill index at startup only lists skills Claude can call on its own.' : '/compact summarizes the conversation to free space while keeping key information. In a real session, run it when context starts affecting performance or before a long new task.';

621 const terminalView = isCompacted ? 'A "Conversation compacted" message. The summarization happens silently.' : focusT < STARTUP_END ? 'The input box, waiting for your first message. Everything above loads silently before you type anything.' : focusT < 0.28 ? 'Your prompt. Claude hasn\'t started working yet.' : focusT < 0.52 ? 'Your prompt and "Reading files...". Rules show as one-line "Loaded" notices, not their content.' : focusT < 0.72 ? "Claude's response and file diffs. Hooks fire silently. Tool output like npm test shows as a brief summary, not the full content." : focusT < 0.79 ? 'Your follow-up prompt.' : focusT < 0.86 ? "A brief notice that a subagent is working, then its result. You don't see the subagent's individual file reads." : focusT < 0.90 ? "Claude's response, your git status output, and the commit-push skill running." : 'Your full conversation. /compact is available to run.';

622 const mono = 'var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace)';

623 const renderWithCode = s => s.split('`').map((part, i) => i % 2 === 1 ? <code key={i} style={{

624 fontFamily: mono,

625 fontSize: '0.92em',

626 background: 'var(--cw-track)',

627 padding: '1px 4px',

628 borderRadius: 3

629 }}>{part}</code> : part);

630 if (!mounted) return null;

631 return <>

632 <div className="cw-mobile-fallback">

633 This interactive timeline works best on a larger screen. See <a href="#what-the-timeline-shows" style={{

634 color: '#D97757'

635 }}>the written breakdown below</a> for the same concepts.

636 </div>

637 <div className="cw-root" ref={rootRef} onClickCapture={() => setHasInteracted(true)} style={isFullscreen ? {

638 height: '100vh',

639 borderRadius: 0,

640 display: 'flex',

641 flexDirection: 'column'

642 } : {}}>

643 <style>{`

644 .cw-root {

645 --cw-bg: #FAFAF8;

646 --cw-text: #1A1918;

647 --cw-text-2: #3D3C38;

648 --cw-text-3: #5E5D59;

649 --cw-text-dim: #6E6C64;

650 --cw-text-faint: #8A8880;

651 --cw-surface: rgba(0,0,0,0.025);

652 --cw-surface-2: rgba(0,0,0,0.04);

653 --cw-border: rgba(0,0,0,0.08);

654 --cw-track: rgba(0,0,0,0.04);

655 --cw-hover: rgba(0,0,0,0.04);

656 --cw-rail: rgba(0,0,0,0.08);

657 --cw-scrollbar: rgba(0,0,0,0.22);

658 background: var(--cw-bg);

659 border-radius: 12px;

660 overflow: hidden;

661 font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, sans-serif);

662 color: var(--cw-text);

663 border: 1px solid var(--cw-border);

664 }

665 .dark .cw-root {

666 --cw-bg: #111110;

667 --cw-text: #E8E6DC;

668 --cw-text-2: #B8B6AE;

669 --cw-text-3: #9C9A92;

670 --cw-text-dim: #8A8880;

671 --cw-text-faint: #6E6C64;

672 --cw-surface: rgba(255,255,255,0.02);

673 --cw-surface-2: rgba(255,255,255,0.015);

674 --cw-border: rgba(255,255,255,0.06);

675 --cw-track: rgba(255,255,255,0.03);

676 --cw-hover: rgba(255,255,255,0.04);

677 --cw-rail: rgba(255,255,255,0.04);

678 --cw-scrollbar: rgba(255,255,255,0.18);

679 }

680 .cw-scroll::-webkit-scrollbar { width: 6px; }

681 .cw-scroll::-webkit-scrollbar-track { background: transparent; }

682 .cw-scroll::-webkit-scrollbar-thumb { background: var(--cw-scrollbar); border-radius: 3px; }

683 @keyframes cw-blink { 50% { opacity: 0; } }

684 @keyframes cw-fadein { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }

685 .cw-compacted-row { animation: cw-fadein 0.3s ease-out backwards; }

686 .cw-mobile-fallback { display: none; padding: 14px 16px; border-radius: 8px; font-size: 14px; border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.03); }

687 .dark .cw-mobile-fallback { border-color: rgba(255,255,255,0.15); background: rgba(255,255,255,0.04); }

688 @media (max-width: 700px) {

689 .cw-root { display: none !important; }

690 .cw-mobile-fallback { display: block; }

691 }

692 `}</style>

10 693 

11## 时间线显示的内容694 {}

695 <div style={{

696 padding: '16px 20px 12px',

697 display: 'flex',

698 alignItems: 'flex-end',

699 gap: 24

700 }}>

701 <div style={{

702 flex: 1,

703 minWidth: 0

704 }}>

705 <div style={{

706 fontSize: 18,

707 fontWeight: 600,

708 letterSpacing: -0.3,

709 lineHeight: 1

710 }}>

711 Explore the context window

712 </div>

713 <div style={{

714 fontSize: 14,

715 color: 'var(--cw-text-dim)',

716 marginTop: 4

717 }}>

718 A simulated session showing what enters context and what it costs

719 </div>

720 </div>

721 <div style={{

722 textAlign: 'right',

723 flexShrink: 0

724 }}>

725 <div style={{

726 fontFamily: mono,

727 fontSize: 20,

728 fontWeight: 600,

729 color: barColor,

730 letterSpacing: -0.5,

731 lineHeight: 1

732 }}>

733 ~{fmt(totalTokens)}<span style={{

734 fontSize: 15,

735 fontWeight: 500,

736 marginLeft: 4

737 }}>tokens</span>

738 </div>

739 <div style={{

740 fontFamily: mono,

741 fontSize: 13,

742 color: 'var(--cw-text-dim)',

743 marginTop: 2

744 }} title="Token counts are illustrative. Actual values vary with your CLAUDE.md size, MCP servers, and file lengths.">

745 / {fmt(MAX)} · illustrative

746 </div>

747 </div>

748 </div>

749 

750 {}

751 <div style={{

752 padding: '0 20px'

753 }}>

754 <div style={{

755 height: 4,

756 borderRadius: 2,

757 background: 'var(--cw-track)',

758 overflow: 'hidden',

759 marginBottom: 6

760 }}>

761 <div style={{

762 width: pct + '%',

763 height: '100%',

764 background: barColor,

765 transition: 'width 0.6s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s'

766 }} />

767 </div>

768 <div style={{

769 height: 28,

770 borderRadius: 5,

771 background: 'var(--cw-track)',

772 border: '1px solid var(--cw-border)',

773 overflow: 'hidden',

774 display: 'flex'

775 }}>

776 {blocks.map((b, i) => {

777 const w = Math.max(b.tokens / MAX * 100, 0.15);

778 const isHov = b.visIdx === activeIdx;

779 const catMatch = hovCat && b.color === hovCat;

780 const dimmed = hovCat ? !catMatch : activeIdx !== null && !isHov;

781 return <div key={b.id} onMouseEnter={() => setHovIdx(b.visIdx)} onMouseLeave={() => setHovIdx(null)} onClick={() => setSelIdx(selIdx === b.visIdx ? null : b.visIdx)} style={{

782 width: w + '%',

783 height: '100%',

784 background: b.color,

785 opacity: isHov || catMatch ? 1 : dimmed ? 0.25 : 0.65,

786 borderRight: i < blocks.length - 1 ? '0.5px solid var(--cw-border)' : 'none',

787 transition: 'opacity 0.15s',

788 cursor: 'pointer'

789 }} />;

790 })}

791 </div>

792 <div style={{

793 display: 'flex',

794 gap: 12,

795 marginTop: 6,

796 flexWrap: 'wrap',

797 justifyContent: 'space-between'

798 }}>

799 <div style={{

800 display: 'flex',

801 gap: 12,

802 flexWrap: 'wrap'

803 }}>

804 {LEGEND.map(x => {

805 const active = hovCat === x.c;

806 return <div key={x.l} onMouseEnter={() => setHovCat(x.c)} onMouseLeave={() => setHovCat(null)} style={{

807 display: 'flex',

808 alignItems: 'center',

809 gap: 4,

810 padding: '2px 6px',

811 borderRadius: 4,

812 cursor: 'pointer',

813 background: active ? 'var(--cw-hover)' : 'transparent',

814 transition: 'background 0.1s'

815 }}>

816 <div style={{

817 width: 6,

818 height: 6,

819 borderRadius: 1.5,

820 background: x.c,

821 opacity: active ? 1 : 0.7

822 }} />

823 <span style={{

824 fontSize: 12,

825 color: active ? 'var(--cw-text)' : 'var(--cw-text-dim)'

826 }}>{x.l}</span>

827 </div>;

828 })}

829 </div>

830 <div style={{

831 display: 'flex',

832 gap: 6,

833 alignItems: 'center',

834 fontSize: 12,

835 color: 'var(--cw-text-dim)'

836 }}>

837 <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="#558A42" strokeWidth="2.5">

838 <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" /><circle cx="12" cy="12" r="3" />

839 </svg>

840 <span>= appears in your terminal</span>

841 </div>

842 </div>

843 </div>

844 

845 {}

846 <div style={{

847 display: 'flex',

848 padding: '14px 20px 0',

849 gap: 16,

850 height: isFullscreen ? 'calc(100vh - 240px)' : 420

851 }}>

852 

853 {}

854 <div ref={scrollRef} className="cw-scroll" style={{

855 flex: 1,

856 minWidth: 0,

857 overflowY: 'auto',

858 paddingRight: 8,

859 scrollBehavior: 'smooth'

860 }}>

861 {visible.length === 0 && !playing && <div style={{

862 height: '100%',

863 display: 'flex',

864 flexDirection: 'column',

865 alignItems: 'center',

866 justifyContent: 'center',

867 gap: 16

868 }}>

869 <div style={{

870 fontFamily: mono,

871 fontSize: 16,

872 color: 'var(--cw-text-dim)',

873 display: 'flex',

874 alignItems: 'center',

875 gap: 8

876 }}>

877 <span style={{

878 color: 'var(--cw-text-faint)'

879 }}>$</span>

880 <span>claude</span>

881 <span style={{

882 display: 'inline-block',

883 width: 8,

884 height: 16,

885 background: 'var(--cw-text-dim)',

886 opacity: 0.5,

887 animation: 'cw-blink 1s step-end infinite'

888 }} />

889 </div>

890 <button onClick={() => setPlaying(true)} style={{

891 padding: '10px 20px',

892 borderRadius: 8,

893 border: '1px solid rgba(217,119,87,0.3)',

894 background: 'rgba(217,119,87,0.08)',

895 color: '#D97757',

896 fontSize: 15,

897 fontWeight: 600,

898 cursor: 'pointer',

899 display: 'flex',

900 alignItems: 'center',

901 gap: 8

902 }}>

903 <span>▶</span>

904 <span>Start session</span>

905 </button>

906 <div style={{

907 fontSize: 13,

908 color: 'var(--cw-text-faint)',

909 maxWidth: 280,

910 textAlign: 'center',

911 lineHeight: 1.5

912 }}>

913 Watch what loads into context, from the moment you run <code style={{

914 fontFamily: mono

915 }}>claude</code> through a full conversation.

916 </div>

917 </div>}

918 {isCompacted && <div style={{

919 marginBottom: 10,

920 padding: '10px 12px',

921 borderRadius: 6,

922 background: 'rgba(217,119,87,0.05)',

923 border: '1px solid rgba(217,119,87,0.15)'

924 }}>

925 <div style={{

926 fontSize: 13,

927 fontWeight: 600,

928 color: '#D97757',

929 marginBottom: 3

930 }}>

931 After /compact

932 </div>

933 <div style={{

934 fontSize: 13,

935 color: 'var(--cw-text-3)',

936 lineHeight: 1.5,

937 fontFamily: mono

938 }}>

939 {fmt(preCompactTotal)} → {fmt(totalTokens)} tokens · freed {fmt(preCompactTotal - totalTokens)}

940 </div>

941 <div style={{

942 fontSize: 13,

943 color: 'var(--cw-text-dim)',

944 lineHeight: 1.5,

945 marginTop: 4

946 }}>

947 This is what's left in context: startup content, which lives outside the message history and reloads after compaction, plus a structured summary of the entire conversation. Skill descriptions don't reload.

948 </div>

949 </div>}

950 {time > 0 && visible.length > 0 && <div style={{

951 fontSize: 12,

952 fontWeight: 700,

953 color: 'var(--cw-text-faint)',

954 textTransform: 'uppercase',

955 letterSpacing: 0.6,

956 marginBottom: 6,

957 paddingLeft: 28

958 }}>

959 {isCompacted ? 'Reloaded after compact' : 'Before you type anything'}

960 </div>}

961 

962 {time > 0 && visible.map((evt, i) => {

963 const meta = KIND_META[evt.kind];

964 const isHov = hovIdx === i;

965 const prevKind = i > 0 ? visible[i - 1].kind : null;

966 const isSub = evt.kind === 'sub';

967 const enteringSubagent = isSub && prevKind !== 'sub';

968 const leavingSubagent = prevKind === 'sub' && !isSub;

969 let showPhase = null;

970 if (evt.kind === 'user' && prevKind !== 'user') showPhase = 'You'; else if (evt.kind === 'claude' && prevKind === 'user') showPhase = 'Claude works'; else if (evt.label === 'Conversation summary') showPhase = 'Summarized by /compact';

971 const isNewRow = isCompacted && !(evt.kind === 'auto' && evt.t < STARTUP_END);

972 return <div key={evt.label + evt.t} className={isNewRow ? 'cw-compacted-row' : ''} style={isNewRow ? {

973 animationDelay: `${i * 60}ms`

974 } : {}}>

975 {showPhase && <div style={{

976 fontSize: 12,

977 fontWeight: 700,

978 color: 'var(--cw-text-faint)',

979 textTransform: 'uppercase',

980 letterSpacing: 0.6,

981 marginTop: 14,

982 marginBottom: 6,

983 paddingLeft: 28

984 }}>

985 {showPhase}

986 </div>}

987 {enteringSubagent && <div style={{

988 marginLeft: 28,

989 marginTop: 6,

990 marginBottom: 2,

991 paddingLeft: 10,

992 borderLeft: '2px solid rgba(155,123,196,0.4)',

993 fontSize: 12,

994 fontWeight: 600,

995 color: '#9B7BC4',

996 textTransform: 'uppercase',

997 letterSpacing: 0.5

998 }}>

999 Subagent's separate context window

1000 </div>}

1001 {leavingSubagent && <div style={{

1002 marginLeft: 28,

1003 marginBottom: 6,

1004 paddingLeft: 10,

1005 paddingBottom: 6,

1006 borderLeft: '2px solid rgba(155,123,196,0.4)',

1007 fontSize: 12,

1008 color: 'var(--cw-text-dim)',

1009 fontFamily: mono

1010 }}>

1011 ↓ {fmt(subTotal)} tokens stayed in subagent's context · only the summary returns

1012 </div>}

1013 <div onMouseEnter={() => setHovIdx(i)} onMouseLeave={() => setHovIdx(null)} onClick={() => setSelIdx(selIdx === i ? null : i)} style={{

1014 display: 'flex',

1015 alignItems: 'flex-start',

1016 borderRadius: 6,

1017 cursor: 'pointer',

1018 background: selIdx === i || isHov ? 'var(--cw-hover)' : 'transparent',

1019 outline: selIdx === i ? '1px solid rgba(217,119,87,0.4)' : 'none',

1020 opacity: hovCat && evt.color !== hovCat ? 0.35 : 1,

1021 transition: 'background 0.1s, opacity 0.15s',

1022 marginLeft: isSub ? 28 : 0,

1023 paddingLeft: isSub ? 10 : 0,

1024 borderLeft: isSub ? '2px solid rgba(155,123,196,0.4)' : 'none'

1025 }}>

1026 <div style={{

1027 width: 28,

1028 display: 'flex',

1029 flexDirection: 'column',

1030 alignItems: 'center',

1031 paddingTop: 8,

1032 flexShrink: 0

1033 }}>

1034 <div style={{

1035 width: evt.kind === 'user' || evt.kind === 'compact' ? 10 : 7,

1036 height: evt.kind === 'user' || evt.kind === 'compact' ? 10 : 7,

1037 borderRadius: '50%',

1038 background: evt.color,

1039 opacity: isHov ? 1 : 0.6,

1040 transition: 'opacity 0.15s',

1041 boxShadow: isHov ? `0 0 8px ${evt.color}40` : 'none'

1042 }} />

1043 {i < visible.length - 1 && <div style={{

1044 width: 1.5,

1045 flex: 1,

1046 background: 'var(--cw-rail)',

1047 marginTop: 2,

1048 minHeight: 6

1049 }} />}

1050 </div>

1051 <div style={{

1052 flex: 1,

1053 minWidth: 0,

1054 padding: '5px 10px 5px 4px',

1055 display: 'flex',

1056 alignItems: 'center',

1057 gap: 8

1058 }}>

1059 <span style={{

1060 fontSize: 12,

1061 fontWeight: 600,

1062 padding: '1px 5px',

1063 borderRadius: 3,

1064 background: meta.badgeBg,

1065 color: meta.badgeColor,

1066 flexShrink: 0,

1067 fontFamily: mono

1068 }}>

1069 {meta.badge}

1070 </span>

1071 <span style={{

1072 fontSize: 15,

1073 fontFamily: mono,

1074 color: isHov ? 'var(--cw-text)' : evt.kind === 'user' ? '#558A42' : evt.kind === 'auto' ? 'var(--cw-text-dim)' : 'var(--cw-text-2)',

1075 flex: 1,

1076 minWidth: 0,

1077 overflow: 'hidden',

1078 textOverflow: 'ellipsis',

1079 whiteSpace: 'nowrap',

1080 fontWeight: evt.kind === 'user' ? 550 : 400

1081 }}>

1082 {evt.label}

1083 </span>

1084 {evt.tokens > 0 && <span style={{

1085 fontSize: 12,

1086 fontFamily: mono,

1087 color: 'var(--cw-text-faint)',

1088 flexShrink: 0

1089 }}>

1090 +{fmt(evt.tokens)}

1091 </span>}

1092 {evt.subTokens > 0 && <span style={{

1093 fontSize: 12,

1094 fontFamily: mono,

1095 color: '#9B7BC4',

1096 flexShrink: 0,

1097 opacity: 0.6

1098 }}>

1099 +{fmt(evt.subTokens)}

1100 </span>}

1101 {evt.tokens > 0 && <div style={{

1102 width: 50,

1103 height: 5,

1104 borderRadius: 2,

1105 background: 'var(--cw-track)',

1106 flexShrink: 0,

1107 overflow: 'hidden'

1108 }}>

1109 <div style={{

1110 width: Math.min(evt.tokens / 5000 * 100, 100) + '%',

1111 height: '100%',

1112 background: evt.color,

1113 opacity: isHov ? 0.8 : 0.4,

1114 transition: 'opacity 0.15s'

1115 }} />

1116 </div>}

1117 <span style={{

1118 width: 14,

1119 flexShrink: 0,

1120 display: 'flex',

1121 justifyContent: 'center'

1122 }} title={VIS_META[evt.vis].label}>

1123 {evt.vis !== 'hidden' && <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke={evt.vis === 'full' ? '#558A42' : 'currentColor'} style={{

1124 color: 'var(--cw-text-faint)',

1125 opacity: evt.vis === 'full' ? 1 : 0.5

1126 }} strokeWidth="2">

1127 <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" /><circle cx="12" cy="12" r="3" />

1128 </svg>}

1129 </span>

1130 </div>

1131 </div>

1132 </div>;

1133 })}

1134 

1135 {activeGate && (activeGate.kind === 'prompt' || activeGate.kind === 'bang' || activeGate.kind === 'slash') && <div style={{

1136 paddingLeft: 28,

1137 marginTop: 12,

1138 paddingRight: 8

1139 }}>

1140 <div style={{

1141 fontSize: 11,

1142 fontWeight: 600,

1143 color: '#6BA656',

1144 fontFamily: mono,

1145 textTransform: 'uppercase',

1146 letterSpacing: 0.5,

1147 marginBottom: 4,

1148 paddingLeft: 2

1149 }}>

1150 You type in your terminal

1151 </div>

1152 <div style={{

1153 display: 'flex',

1154 alignItems: 'flex-start',

1155 gap: 8,

1156 padding: '10px 12px',

1157 borderRadius: 6,

1158 background: 'rgba(85,138,66,0.06)',

1159 border: '1px solid rgba(85,138,66,0.2)'

1160 }}>

1161 <span style={{

1162 color: '#558A42',

1163 fontSize: 15,

1164 fontFamily: mono,

1165 flexShrink: 0

1166 }}>❯</span>

1167 <span style={{

1168 fontSize: 15,

1169 fontFamily: mono,

1170 color: 'var(--cw-text-2)',

1171 flex: 1,

1172 lineHeight: 1.5

1173 }}>

1174 {activeGate.text}

1175 <span style={{

1176 display: 'inline-block',

1177 width: 7,

1178 height: 13,

1179 marginLeft: 2,

1180 background: '#558A42',

1181 opacity: 0.5,

1182 verticalAlign: 'middle',

1183 animation: 'cw-blink 1s step-end infinite'

1184 }} />

1185 </span>

1186 <button onClick={sendPrompt} style={{

1187 padding: '5px 12px',

1188 borderRadius: 5,

1189 border: 'none',

1190 background: '#558A42',

1191 color: '#fff',

1192 fontSize: 13,

1193 fontWeight: 600,

1194 cursor: 'pointer',

1195 flexShrink: 0

1196 }}>

1197 {activeGate.kind === 'prompt' ? 'Send ↵' : 'Run ↵'}

1198 </button>

1199 </div>

1200 </div>}

1201 {activeGate && activeGate.kind === 'compact' && <div style={{

1202 paddingLeft: 28,

1203 marginTop: 12,

1204 paddingRight: 8

1205 }}>

1206 <div style={{

1207 padding: '12px 14px',

1208 borderRadius: 6,

1209 background: 'rgba(217,119,87,0.06)',

1210 border: '1px solid rgba(217,119,87,0.25)'

1211 }}>

1212 <div style={{

1213 fontSize: 13,

1214 color: 'var(--cw-text-3)',

1215 marginBottom: 8,

1216 lineHeight: 1.5

1217 }}>

1218 Context is at <span style={{

1219 fontFamily: mono,

1220 fontWeight: 600,

1221 color: barColor

1222 }}>{fmt(totalTokens)} tokens</span>.

1223 Run <code style={{

1224 fontFamily: mono,

1225 background: 'var(--cw-track)',

1226 padding: '1px 4px',

1227 borderRadius: 3

1228 }}>/compact</code> to

1229 summarize older exchanges and free space for more work.

1230 </div>

1231 <div style={{

1232 display: 'flex',

1233 alignItems: 'center',

1234 gap: 8

1235 }}>

1236 <span style={{

1237 color: '#D97757',

1238 fontSize: 15,

1239 fontFamily: mono

1240 }}>❯</span>

1241 <span style={{

1242 fontSize: 15,

1243 fontFamily: mono,

1244 color: 'var(--cw-text-2)',

1245 flex: 1

1246 }}>

1247 {activeGate.text}

1248 </span>

1249 <button onClick={sendPrompt} style={{

1250 padding: '5px 12px',

1251 borderRadius: 5,

1252 border: 'none',

1253 background: '#D97757',

1254 color: '#fff',

1255 fontSize: 13,

1256 fontWeight: 600,

1257 cursor: 'pointer',

1258 flexShrink: 0

1259 }}>

1260 Run ↵

1261 </button>

1262 </div>

1263 </div>

1264 </div>}

1265 </div>

1266 

1267 {}

1268 <div style={{

1269 width: 300,

1270 flexShrink: 0,

1271 display: 'flex',

1272 flexDirection: 'column'

1273 }}>

1274 <div ref={detailRef} className="cw-scroll" style={{

1275 padding: '14px 16px',

1276 borderRadius: 10,

1277 background: 'var(--cw-surface)',

1278 border: '1px solid var(--cw-border)',

1279 flex: 1,

1280 minHeight: 0,

1281 overflowY: 'auto',

1282 display: 'flex',

1283 flexDirection: 'column',

1284 gap: 10

1285 }}>

1286 {hovEvent ? <div>

1287 <div style={{

1288 display: 'flex',

1289 alignItems: 'center',

1290 gap: 8,

1291 marginBottom: 8

1292 }}>

1293 <div style={{

1294 width: 10,

1295 height: 10,

1296 borderRadius: 3,

1297 background: hovEvent.color,

1298 opacity: 0.8

1299 }} />

1300 <span style={{

1301 fontSize: 16,

1302 fontWeight: 600

1303 }}>{hovEvent.label}</span>

1304 </div>

1305 <div style={{

1306 display: 'flex',

1307 width: 'fit-content',

1308 padding: '3px 8px',

1309 borderRadius: 4,

1310 marginBottom: 8,

1311 background: KIND_META[hovEvent.kind].badgeBg

1312 }}>

1313 <span style={{

1314 fontSize: 12,

1315 fontWeight: 600,

1316 color: KIND_META[hovEvent.kind].badgeColor

1317 }}>

1318 {KIND_META[hovEvent.kind].detail}

1319 </span>

1320 </div>

1321 {hovEvent.tokens > 0 && <div style={{

1322 fontSize: 14,

1323 fontFamily: mono,

1324 color: 'var(--cw-text-dim)',

1325 marginBottom: 6

1326 }}>

1327 {fmt(hovEvent.tokens)} tokens

1328 </div>}

1329 {hovEvent.subTokens > 0 && <div style={{

1330 fontSize: 14,

1331 fontFamily: mono,

1332 color: '#9B7BC4',

1333 marginBottom: 6

1334 }}>

1335 {fmt(hovEvent.subTokens)} tokens in the subagent's context

1336 </div>}

1337 <p style={{

1338 fontSize: 15,

1339 color: 'var(--cw-text-3)',

1340 lineHeight: 1.55,

1341 margin: 0

1342 }}>

1343 {renderWithCode(hovEvent.desc)}

1344 </p>

1345 <div style={{

1346 marginTop: 10,

1347 padding: '8px 10px',

1348 borderRadius: 6,

1349 background: hovEvent.vis === 'full' ? 'rgba(85,138,66,0.08)' : 'var(--cw-surface-2)',

1350 border: '1px solid ' + (hovEvent.vis === 'full' ? 'rgba(85,138,66,0.2)' : 'var(--cw-border)')

1351 }}>

1352 <div style={{

1353 display: 'flex',

1354 alignItems: 'center',

1355 gap: 6,

1356 marginBottom: 3

1357 }}>

1358 <span style={{

1359 fontSize: 13,

1360 color: hovEvent.vis === 'full' ? '#558A42' : 'var(--cw-text-dim)'

1361 }}>

1362 {hovEvent.vis === 'full' ? '●' : hovEvent.vis === 'brief' ? '◐' : '○'}

1363 </span>

1364 <span style={{

1365 fontSize: 12,

1366 fontWeight: 600,

1367 color: 'var(--cw-text-2)'

1368 }}>

1369 {VIS_META[hovEvent.vis].label}

1370 </span>

1371 </div>

1372 <div style={{

1373 fontSize: 13,

1374 color: 'var(--cw-text-dim)',

1375 lineHeight: 1.4

1376 }}>

1377 {VIS_META[hovEvent.vis].sub}

1378 </div>

1379 </div>

1380 {hovEvent.tip && <div style={{

1381 marginTop: 10,

1382 padding: '8px 10px',

1383 borderRadius: 6,

1384 background: 'rgba(85,138,66,0.06)',

1385 border: '1px solid rgba(85,138,66,0.15)'

1386 }}>

1387 <div style={{

1388 fontSize: 12,

1389 fontWeight: 600,

1390 color: '#558A42',

1391 marginBottom: 3,

1392 display: 'flex',

1393 alignItems: 'center',

1394 gap: 4

1395 }}>

1396 <span>💡</span> Save context

1397 </div>

1398 <div style={{

1399 fontSize: 13,

1400 color: 'var(--cw-text-3)',

1401 lineHeight: 1.5

1402 }}>

1403 {renderWithCode(hovEvent.tip)}

1404 </div>

1405 </div>}

1406 {hovEvent.link && <a href={hovEvent.link} style={{

1407 display: 'inline-block',

1408 marginTop: 10,

1409 fontSize: 13,

1410 color: '#D97757',

1411 textDecoration: 'none',

1412 borderBottom: '1px solid rgba(217,119,87,0.3)'

1413 }}>

1414 Learn more →

1415 </a>}

1416 </div> : <div style={{

1417 display: 'flex',

1418 flexDirection: 'column',

1419 alignItems: 'center',

1420 textAlign: 'center',

1421 gap: 4,

1422 padding: '12px 0 4px'

1423 }}>

1424 <div style={{

1425 fontSize: 22,

1426 opacity: 0.2

1427 }}>👁</div>

1428 <div style={{

1429 fontSize: 14,

1430 fontWeight: 500,

1431 color: 'var(--cw-text-dim)'

1432 }}>Hover or click any event</div>

1433 <div style={{

1434 fontSize: 12,

1435 color: 'var(--cw-text-faint)',

1436 lineHeight: 1.4,

1437 maxWidth: 200

1438 }}>

1439 Hover to preview. Click to pin so you can scroll.

1440 </div>

1441 </div>}

1442 

1443 <div style={{

1444 padding: '10px 12px',

1445 borderRadius: 8,

1446 background: 'rgba(217,119,87,0.05)',

1447 border: '1px solid rgba(217,119,87,0.12)'

1448 }}>

1449 <div style={{

1450 fontSize: 11,

1451 fontWeight: 700,

1452 color: '#D97757',

1453 textTransform: 'uppercase',

1454 letterSpacing: 0.5,

1455 marginBottom: 3

1456 }}>

1457 Key takeaway

1458 </div>

1459 <div style={{

1460 fontSize: 13,

1461 color: 'var(--cw-text-3)',

1462 lineHeight: 1.5

1463 }}>

1464 {takeaway}

1465 </div>

1466 </div>

1467 

1468 <div style={{

1469 padding: '10px 12px',

1470 borderRadius: 8,

1471 background: 'var(--cw-surface-2)',

1472 border: '1px solid var(--cw-border)'

1473 }}>

1474 <div style={{

1475 fontSize: 11,

1476 fontWeight: 700,

1477 color: 'var(--cw-text-dim)',

1478 textTransform: 'uppercase',

1479 letterSpacing: 0.5,

1480 marginBottom: 3

1481 }}>

1482 In your terminal you see

1483 </div>

1484 <div style={{

1485 fontSize: 13,

1486 color: 'var(--cw-text-3)',

1487 lineHeight: 1.5

1488 }}>

1489 {terminalView}

1490 </div>

1491 </div>

1492 </div>

1493 </div>

1494 </div>

1495 

1496 {}

1497 <div style={{

1498 padding: '10px 20px 14px',

1499 display: 'flex',

1500 alignItems: 'center',

1501 gap: 10

1502 }}>

1503 <button aria-label={time >= 1 ? 'Restart' : activeGate ? 'Continue' : playing ? 'Pause' : 'Play'} onClick={() => {

1504 if (time >= 1) {

1505 setTime(0);

1506 setGatesPassed(0);

1507 setSelIdx(null);

1508 setHovIdx(null);

1509 setPlaying(true);

1510 } else if (activeGate) sendPrompt(); else setPlaying(!playing);

1511 }} style={{

1512 width: 30,

1513 height: 30,

1514 borderRadius: 6,

1515 border: 'none',

1516 background: 'rgba(217,119,87,0.1)',

1517 color: '#D97757',

1518 cursor: 'pointer',

1519 fontSize: 15,

1520 fontWeight: 700,

1521 display: 'flex',

1522 alignItems: 'center',

1523 justifyContent: 'center'

1524 }}>

1525 {time >= 1 ? '↺' : playing ? '⏸' : '▶'}

1526 </button>

1527 <div style={{

1528 flex: 1,

1529 height: 3,

1530 borderRadius: 2,

1531 background: 'var(--cw-track)',

1532 overflow: 'hidden'

1533 }}>

1534 <div style={{

1535 width: time * 100 + '%',

1536 height: '100%',

1537 background: '#D97757',

1538 transition: 'width 0.1s linear'

1539 }} />

1540 </div>

1541 <span style={{

1542 fontSize: 12,

1543 fontFamily: mono,

1544 color: 'var(--cw-text-faint)',

1545 minWidth: 30

1546 }}>

1547 {Math.round(time * 100)}%

1548 </span>

1549 <button onClick={toggleFullscreen} aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} style={{

1550 width: 28,

1551 height: 28,

1552 borderRadius: 6,

1553 border: '1px solid var(--cw-border)',

1554 background: 'var(--cw-surface)',

1555 color: 'var(--cw-text-dim)',

1556 cursor: 'pointer',

1557 fontSize: 15,

1558 flexShrink: 0,

1559 marginLeft: 4,

1560 display: 'flex',

1561 alignItems: 'center',

1562 justifyContent: 'center'

1563 }}>

1564 {isFullscreen ? '⤡' : '⛶'}

1565 </button>

1566 </div>

1567 </div>

1568 </>;

1569};

1570 

1571Claude Code 的上下文窗口包含 Claude 在您的会话中了解的所有内容:您的指令、它读取的文件、它自己的响应以及从不在您的终端中出现的内容。下面的时间线展示了从启动到压缩的完整会话:在您输入之前加载的内容、每个文件读取、规则和 hook 在 Claude 工作时添加的内容,以及子代理如何将大型读取保留在您的上下文之外。有关相同内容的列表形式,请参阅[书面分解](#what-the-timeline-shows)。

1572 

1573<ContextWindow />

1574 

1575<h2 id="what-the-timeline-shows">

1576 时间线显示的内容

1577</h2>

12 1578 

13该会话通过具有代表性的令牌计数演示了一个现实的流程:1579该会话通过具有代表性的令牌计数演示了一个现实的流程:

14 1580 


17* **后续提示**:[子代理](/zh-CN/sub-agents)在其自己的单独上下文窗口中处理研究,因此大文件读取不会进入您的窗口。只有摘要和一个小的元数据预告片返回。1583* **后续提示**:[子代理](/zh-CN/sub-agents)在其自己的单独上下文窗口中处理研究,因此大文件读取不会进入您的窗口。只有摘要和一个小的元数据预告片返回。

18* **最后**:`/compact` 用结构化摘要替换对话。大多数启动内容会自动重新加载;下表显示了每个机制会发生什么。1584* **最后**:`/compact` 用结构化摘要替换对话。大多数启动内容会自动重新加载;下表显示了每个机制会发生什么。

19 1585 

20## 压缩后保留的内容1586<h2 id="what-survives-compaction">

1587 压缩后保留的内容

1588</h2>

21 1589 

22当长会话压缩时,Claude Code 会总结对话历史以适应上下文窗口。您的指令会发生什么取决于它们的加载方式:1590当长会话压缩时,Claude Code 会总结对话历史以适应上下文窗口。您的指令会发生什么取决于它们的加载方式:

23 1591 


35 1603 

36技能主体在压缩后重新注入,但大型技能会被截断以适应每个技能的上限,一旦超过总预算,最旧的调用技能就会被删除。截断保留文件的开头,因此请将最重要的指令放在 `SKILL.md` 的顶部附近。1604技能主体在压缩后重新注入,但大型技能会被截断以适应每个技能的上限,一旦超过总预算,最旧的调用技能就会被删除。截断保留文件的开头,因此请将最重要的指令放在 `SKILL.md` 的顶部附近。

37 1605 

38## 检查您自己的会话1606<h2 id="when-your-context-fills-up">

1607 当您的上下文填满时

1608</h2>

1609 

1610Claude Code 在您接近限制时自动压缩,因此完整的上下文窗口不会结束您的会话。自动传递的工作方式与时间线中的 `/compact` 步骤相同。有关它保留的内容,请参阅[当上下文填满时](/zh-CN/how-claude-code-works#when-context-fills-up)。

1611 

1612您也可以在自动传递运行之前采取行动:

1613 

1614* **带有焦点的压缩**:在开始长时间的新任务之前,运行带有指令的 `/compact`,例如 `/compact focus on the auth bug fix`。摘要保留您选择的内容,而不是自动传递猜测的重要内容。

1615* **在任务之间清除**:切换到不相关的工作时运行 `/clear`。旧对话会挤出您接下来需要的文件,并在每条消息上花费令牌。

1616* **委托大型读取**:将研究发送给[子代理](/zh-CN/sub-agents),以便文件内容保留在其上下文窗口中,而不是您的。

1617 

1618如果您需要更大的窗口而不是更小的对话,Fable 5、Opus 4.6 及更高版本以及 Sonnet 4.6 支持 100 万令牌的上下文窗口。有关按计划的可用性以及如何选择 `[1m]` 模型变体,请参阅[扩展上下文](/zh-CN/model-config#extended-context)。压缩在更大的限制下以相同的方式工作。

1619 

1620<h2 id="check-your-own-session">

1621 检查您自己的会话

1622</h2>

39 1623 

40该可视化使用代表性数字。要在任何时刻查看您的实际上下文使用情况,请运行 `/context` 以获取按类别的实时分解和优化建议。运行 `/memory` 以检查在启动时加载了哪些 CLAUDE.md 和自动内存文件。1624该可视化使用代表性数字。要在任何时刻查看您的实际上下文使用情况,请运行 `/context` 以获取按类别的实时分解和优化建议。运行 `/memory` 以检查在启动时加载了哪些 CLAUDE.md 和自动内存文件。

41 1625 

42## 相关资源1626<h2 id="related-resources">

1627 相关资源

1628</h2>

43 1629 

44有关时间线中显示的功能的更深入覆盖,请参阅这些页面:1630有关时间线中显示的功能的更深入覆盖,请参阅这些页面:

45 1631 

costs.md +4 −2

Details

35 35 

36在 Pro、Max、Team 或 Enterprise 计划上,`/usage` 还显示计入您的计划限制的内容明细。它将最近的使用情况归属于 skills、subagents、plugins 和各个 MCP 服务器,每个都显示为总数的百分比。按 `d` 或 `w` 在过去 24 小时和过去 7 天之间切换。这些数据是近似值,从此机器上的本地会话历史记录计算,因此不包括来自其他设备或 claude.ai 的使用情况。36在 Pro、Max、Team 或 Enterprise 计划上,`/usage` 还显示计入您的计划限制的内容明细。它将最近的使用情况归属于 skills、subagents、plugins 和各个 MCP 服务器,每个都显示为总数的百分比。按 `d` 或 `w` 在过去 24 小时和过去 7 天之间切换。这些数据是近似值,从此机器上的本地会话历史记录计算,因此不包括来自其他设备或 claude.ai 的使用情况。

37 37 

38在 [VS Code 扩展](/zh-CN/vs-code#check-account-and-usage) 中,相同的明细显示在"账户和使用情况"对话框中,带有"日"和"周"切换。需要 Claude Code v2.1.174 或更高版本。

39 

38<h2 id="managing-costs-for-teams">40<h2 id="managing-costs-for-teams">

39 管理团队成本41 管理团队成本

40</h2>42</h2>


85* 为队友使用 Sonnet。它为协调任务平衡了能力和成本。87* 为队友使用 Sonnet。它为协调任务平衡了能力和成本。

86* 保持团队规模小。每个队友运行自己的上下文窗口,因此令牌使用大致与团队规模成正比。88* 保持团队规模小。每个队友运行自己的上下文窗口,因此令牌使用大致与团队规模成正比。

87* 保持生成提示的重点。队友会自动加载 CLAUDE.md、MCP servers 和 skills,但生成提示中的所有内容都会从一开始就添加到其上下文中。89* 保持生成提示的重点。队友会自动加载 CLAUDE.md、MCP servers 和 skills,但生成提示中的所有内容都会从一开始就添加到其上下文中。

88* 工作完成后清理团队活跃的队友即使处于空闲状态也会继续消耗令牌90* 工作完成后关闭队友每个活跃的队友会继续消耗令牌,直到它退出或会话结束

89* Agent 团队默认被禁用。在您的[settings.json](/zh-CN/settings)或环境中设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 以启用它们。请参阅[启用 agent 团队](/zh-CN/agent-teams#enable-agent-teams)。91* Agent 团队默认被禁用。在您的[settings.json](/zh-CN/settings)或环境中设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 以启用它们。请参阅[启用 agent 团队](/zh-CN/agent-teams#enable-agent-teams)。

90 92 

91<h2 id="reduce-token-usage">93<h2 id="reduce-token-usage">


196 调整扩展思考198 调整扩展思考

197</h3>199</h3>

198 200 

199扩展思考默认启用,因为它显著改进了复杂规划和推理任务的性能。思考令牌作为输出令牌计费,默认预算可能是每个请求数万个令牌,具体取决于模型。对于不需要深度推理的更简单任务,您可以通过在 `/effort` 中或在 `/model` 中降低 [effort level](/zh-CN/model-config#adjust-effort-level)、在 `/config` 中禁用思考或使用 `MAX_THINKING_TOKENS=8000` 降低预算来降低成本。201扩展思考默认启用,因为它显著改进了复杂规划和推理任务的性能。思考令牌作为输出令牌计费,默认预算可能是每个请求数万个令牌,具体取决于模型。对于不需要深度推理的更简单任务,您可以通过在 `/effort` 中或在 `/model` 中降低 [effort level](/zh-CN/model-config#adjust-effort-level)、在 `/config` 中禁用思考或在具有[固定思考预算](/zh-CN/model-config#adaptive-reasoning-and-fixed-thinking-budgets)的模型上使用 `MAX_THINKING_TOKENS=8000` 降低预算来降低成本。自适应推理模型忽略非零预算,因此请改用 effort levels。Fable 5 上不提供禁用思考,它始终使用扩展思考。

200 202 

201<h3 id="delegate-verbose-operations-to-subagents">203<h3 id="delegate-verbose-operations-to-subagents">

202 将冗长的操作委托给 subagents204 将冗长的操作委托给 subagents

data-usage.md +3 −3

Details

62**商业用户(Team、Enterprise 和 API)**:62**商业用户(Team、Enterprise 和 API)**:

63 63 

64* 标准:30 天保留期64* 标准:30 天保留期

65* [零数据保留](/zh-CN/zero-data-retention):适用于 Claude for Enterprise 上的 Claude Code。ZDR 按组织启用;每个新组织必须由您的账户团队单独启用 ZDR65* [零数据保留](/zh-CN/zero-data-retention):适用于 Claude for Enterprise 上的 Claude Code。ZDR 不包含在标准 Enterprise 计划中;在您的账户团队确认符合条件后,按组织启用

66* 本地缓存:Claude Code 客户端在 `~/.claude/projects/` 下以纯文本形式本地存储会话记录,默认保留 30 天以启用会话恢复。使用 `cleanupPeriodDays` 调整期限。请参阅[应用程序数据](/zh-CN/claude-directory#application-data)了解存储的内容以及如何清除它。66* 本地缓存:Claude Code 客户端在 `~/.claude/projects/` 下以纯文本形式本地存储会话记录,默认保留 30 天以启用会话恢复。使用 `cleanupPeriodDays` 调整期限。请参阅[应用程序数据](/zh-CN/claude-directory#application-data)了解存储的内容以及如何清除它。

67 67 

68您可以随时删除网络上的单个 Claude Code 会话。删除会话会永久删除该会话的事件数据。有关如何删除会话的说明,请参阅[删除会话](/zh-CN/claude-code-on-the-web#delete-sessions)。68您可以随时删除网络上的单个 Claude Code 会话。删除会话会永久删除该会话的事件数据。有关如何删除会话的说明,请参阅[删除会话](/zh-CN/claude-code-on-the-web#delete-sessions)。


83 83 

84下面的图表显示了 Claude Code 在安装和正常操作期间如何连接到外部服务。实线表示必需的连接,而虚线表示可选或用户启动的数据流。84下面的图表显示了 Claude Code 在安装和正常操作期间如何连接到外部服务。实线表示必需的连接,而虚线表示可选或用户启动的数据流。

85 85 

86<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/claude-code-data-flow.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=5b1131530bdfdd415700a0cb4d4070c4" alt="显示 Claude Code 外部连接的图表:安装/更新连接到分发服务器,用户请求连接到 Anthropic 服务,包括 Console 身份验证、public-api,以及可选的指标、Sentry 和错误报告" width="720" height="520" data-path="images/claude-code-data-flow.svg" />86<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/claude-code-data-flow.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=5b1131530bdfdd415700a0cb4d4070c4" alt="显示 Claude Code 外部连接的图表:安装/更新连接到分发服务器,用户请求连接到 Anthropic 服务,包括 Console 身份验证、public-api,以及可选的指标和 Sentry。通过 /feedback 发送的反馈转到 Google Cloud Storage,并可选择创建 GitHub issue" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

87 87 

88Claude Code 在本地运行。为了与 LLM 交互,Claude Code 通过网络发送数据。此数据包括所有用户提示和模型输出,通过 TLS 1.2+ 在传输中加密。Claude Code 与大多数流行的 VPN 和 LLM 代理兼容。88Claude Code 在本地运行。为了与 LLM 交互,Claude Code 通过网络发送数据。此数据包括所有用户提示和模型输出,通过 TLS 1.2+ 在传输中加密。Claude Code 与大多数流行的 VPN 和 LLM 代理兼容。

89 89 


119 119 

120Claude Code 从用户的机器连接到 Sentry 以进行操作错误日志记录。数据使用 TLS 在传输中加密,使用 256 位 AES 加密在静止时加密。在 [Sentry 安全文档](https://sentry.io/security/) 中了解更多。要选择退出错误日志记录,请设置 `DISABLE_ERROR_REPORTING` 环境变量。120Claude Code 从用户的机器连接到 Sentry 以进行操作错误日志记录。数据使用 TLS 在传输中加密,使用 256 位 AES 加密在静止时加密。在 [Sentry 安全文档](https://sentry.io/security/) 中了解更多。要选择退出错误日志记录,请设置 `DISABLE_ERROR_REPORTING` 环境变量。

121 121 

122当您运行 `/feedback` 命令时,您的对话历史记录(包括代码)的副本被发送到 Anthropic。在提交之前,您可以选择包含多少历史记录:仅当前会话(这是默认设置),或者也包括来自同一项目在过去 24 小时或 7 天内的其他会话。数据通过 TLS 在传输中加密。可选地,在公共存储库中创建 GitHub 问题。要选择退出,请将 `DISABLE_FEEDBACK_COMMAND` 环境变量设置为 `1`。122当您运行 `/feedback` 命令时,您的对话历史记录(包括代码)的副本被发送到 Anthropic。在提交之前,您可以选择包含多少历史记录:仅当前会话(这是默认设置),或者也包括来自同一项目在过去 24 小时或 7 天内的其他会话。数据通过 TLS 在传输中加密并存储在 Google Cloud Storage 中,Google Cloud Storage 默认对静止数据进行加密。可选地,在公共存储库中创建 GitHub 问题。要选择退出,请将 `DISABLE_FEEDBACK_COMMAND` 环境变量设置为 `1`。

123 123 

124当您使用第三方提供商(如 Bedrock 或 Vertex)或未配置 Anthropic 凭据时,`/feedback` 会将报告写入 `~/.claude/feedback-bundles/` 下的本地存档,而不是将其发送到 Anthropic。已知的 API 密钥和令牌模式在写入存档之前被编辑。在您将该文件发送给您的 Anthropic 账户代表或将其附加到支持请求之前,没有任何内容离开您的机器。124当您使用第三方提供商(如 Bedrock 或 Vertex)或未配置 Anthropic 凭据时,`/feedback` 会将报告写入 `~/.claude/feedback-bundles/` 下的本地存档,而不是将其发送到 Anthropic。已知的 API 密钥和令牌模式在写入存档之前被编辑。在您将该文件发送给您的 Anthropic 账户代表或将其附加到支持请求之前,没有任何内容离开您的机器。

125 125 

Details

60* 启动失败的服务器在 `/mcp` 中显示为失败。`command` 或 `args` 中的相对文件路径是一个常见原因,因为它们相对于你启动 Claude Code 的目录而不是 `.mcp.json` 的位置进行解析。60* 启动失败的服务器在 `/mcp` 中显示为失败。`command` 或 `args` 中的相对文件路径是一个常见原因,因为它们相对于你启动 Claude Code 的目录而不是 `.mcp.json` 的位置进行解析。

61* 显示为已连接但列出零个工具的服务器已成功启动但没有返回工具列表。从 `/mcp` 选择**重新连接**。如果计数保持为零,运行 `claude --debug mcp` 来查看服务器的 stderr 输出。61* 显示为已连接但列出零个工具的服务器已成功启动但没有返回工具列表。从 `/mcp` 选择**重新连接**。如果计数保持为零,运行 `claude --debug mcp` 来查看服务器的 stderr 输出。

62 62 

63对于配置位置和范围规则,请参阅[MCP](/zh-CN/mcp)。63对于配置位置和范围规则,请参阅 [MCP](/zh-CN/mcp)。

64 64 

65<h2 id="check-hooks">65<h2 id="check-hooks">

66 检查 hooks66 检查 hooks


78 针对干净配置进行测试78 针对干净配置进行测试

79</h2>79</h2>

80 80 

81如果有针对性的检查无法隔离原因,或你的配置处于未知状态,请与从你的常规设置中不加载任何内容的会话进行比较。将 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars) 指向一个空目录以绕过 `~/.claude` 下的所有内容并从没有 `.claude` 文件夹、`.mcp.json` 或 `CLAUDE.md` 的目录启动以便也跳过项目配置81{/* min-version: 2.1.169 */}使用 [`claude --safe-mode`](/zh-CN/cli-reference#cli-flags) 开始它会启动一个会话,禁用所有自定义,包括 `CLAUDE.md`、skills、plugins、hooks、MCP 服务器以及自定义命令和代理。身份验证、模型选择、内置工具和权限正常工作。如果问题在安全模式下消失则其中一个方面是原因;使用上面的针对性检查来找出是哪一个由你的组织部署的托管设置仍然部分适用,因此策略配置的 hooks 和状态行即使在安全模式下也会运行。

82 

83如果问题在安全模式下仍然存在,或你的设置本身可疑,请与从你的常规设置中不加载任何内容的会话进行比较。将 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars) 指向一个空目录以绕过 `~/.claude` 下的所有内容,并从没有 `.claude` 文件夹、`.mcp.json` 或 `CLAUDE.md` 的目录启动,以便也跳过项目配置。

82 84 

83```bash theme={null}85```bash theme={null}

84cd /tmp && CLAUDE_CONFIG_DIR=/tmp/claude-clean claude86cd /tmp && CLAUDE_CONFIG_DIR=/tmp/claude-clean claude

85```87```

86 88 

87干净会话没有用户或项目设置、hooks、MCP 服务器、插件或内存89干净会话没有用户或项目设置、hooks、MCP 服务器、plugins 或内存

88 90 

89* 如果你的组织部署了托管设置,它们仍然适用,因为它们位于 `~/.claude` 之外的系统路径中91* 如果你的组织部署了托管设置,它们仍然适用,因为它们位于 `~/.claude` 之外的系统路径中

90* 在 Linux 和 Windows 上,你将被提示再次登录,因为凭证存储在配置目录下92* 在 Linux 和 Windows 上,你将被提示再次登录,因为凭证存储在配置目录下

desktop.md +25 −23

Details

67 67 

68提示框支持两种方式来引入外部上下文:68提示框支持两种方式来引入外部上下文:

69 69 

70* **@mention 文件**:输入 `@` 后跟文件名,将文件添加到对话上下文。Claude 然后可以读取和引用该文件。@mention 在远程会话中不可用70* **@mention 文件**:输入 `@` 后跟文件名,将文件添加到对话上下文。Claude 然后可以读取和引用该文件。@mention 在云会话中不可用

71* **附加文件**:使用附件按钮将图像、PDF 和其他文件附加到你的提示,或直接将文件拖放到提示中。这对于共享错误的屏幕截图、设计模型或参考文档很有用。71* **附加文件**:使用附件按钮将图像、PDF 和其他文件附加到你的提示,或直接将文件拖放到提示中。这对于共享错误的屏幕截图、设计模型或参考文档很有用。

72 72 

73<h3 id="choose-a-permission-mode">73<h3 id="choose-a-permission-mode">


94 在 Plan Mode 中启动复杂任务,以便 Claude 在进行更改之前制定方法。一旦你批准计划,切换到"自动接受编辑"或"询问权限"来执行它。有关此工作流的更多信息,请参阅[先探索,然后计划,然后编码](/zh-CN/best-practices#explore-first-then-plan-then-code)。94 在 Plan Mode 中启动复杂任务,以便 Claude 在进行更改之前制定方法。一旦你批准计划,切换到"自动接受编辑"或"询问权限"来执行它。有关此工作流的更多信息,请参阅[先探索,然后计划,然后编码](/zh-CN/best-practices#explore-first-then-plan-then-code)。

95</Tip>95</Tip>

96 96 

97远程会话支持"自动接受编辑"Plan Mode。"询问权限"不可用,因为远程会话默认自动接受文件编辑,"绕过权限"不可用,因为远程环境已经是沙箱化的97云会话支持"自动接受编辑"Plan Mode 和 Auto mode。"自动接受编辑"对应于 `default` 模式:云会话预先批准文件编辑所以选择器显示"自动接受编辑"而不是"询问权限"。"绕过权限"不可用,因为云环境已经是沙箱化的

98 98 

99企业管理员可以限制哪些权限模式可用。有关详细信息,请参阅[企业配置](#enterprise-configuration)。99企业管理员可以限制哪些权限模式可用。有关详细信息,请参阅[企业配置](#enterprise-configuration)。

100 100 


403 连接外部工具403 连接外部工具

404</h3>404</h3>

405 405 

406对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Connectors** 来添加集成,如 Google Calendar、Slack、GitHub、Linear、Notion 等。你可以在会话之前或期间添加连接器。**+** 按钮在远程会话中不可用,但[例程](/zh-CN/routines)在例程创建时配置连接器。406对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Connectors** 来添加集成,如 Google Calendar、Slack、GitHub、Linear、Notion 等。你可以在会话之前或期间添加连接器。**+** 按钮在云会话中不可用,但[例程](/zh-CN/routines)在例程创建时配置连接器。

407 407 

408要管理或断开连接器,请在桌面应用中转到设置 → Connectors,或从提示框中的 Connectors 菜单中选择 **Manage connectors**。408要管理或断开连接器,请在桌面应用中转到设置 → Connectors,或从提示框中的 Connectors 菜单中选择 **Manage connectors**。

409 409 


425 425 

426对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Plugins** 来查看你已安装的插件及其 skills。要添加插件,从子菜单中选择 **Add plugin** 来打开插件浏览器,它显示来自你配置的[市场](/zh-CN/plugin-marketplaces)的可用插件,包括官方 Anthropic 市场。选择 **Manage plugins** 来启用、禁用或卸载插件。426对于本地和 [SSH](#ssh-sessions) 会话,点击提示框旁的 **+** 按钮并选择 **Plugins** 来查看你已安装的插件及其 skills。要添加插件,从子菜单中选择 **Add plugin** 来打开插件浏览器,它显示来自你配置的[市场](/zh-CN/plugin-marketplaces)的可用插件,包括官方 Anthropic 市场。选择 **Manage plugins** 来启用、禁用或卸载插件。

427 427 

428插件可以限定到你的用户账户、特定项目或仅本地。如果你的组织集中管理插件,这些插件在桌面会话中的可用方式与在 CLI 中相同。插件在远程会话中不可用。有关完整的插件参考,包括创建你自己的插件,请参阅[插件](/zh-CN/plugins)。428插件可以限定到你的用户账户、特定项目或仅本地。如果你的组织集中管理插件,这些插件在桌面会话中的可用方式与在 CLI 中相同。插件在云会话中不可用。有关完整的插件参考,包括创建你自己的插件,请参阅[插件](/zh-CN/plugins)。

429 429 

430<h3 id="configure-preview-servers">430<h3 id="configure-preview-servers">

431 配置预览服务器431 配置预览服务器


487| `program` | string | 用 `node` 运行的脚本。请参阅[何时使用 `program` vs `runtimeExecutable`](#when-to-use-program-vs-runtimeexecutable) |487| `program` | string | 用 `node` 运行的脚本。请参阅[何时使用 `program` vs `runtimeExecutable`](#when-to-use-program-vs-runtimeexecutable) |

488| `args` | string\[] | 传递给 `program` 的参数。仅在设置 `program` 时使用 |488| `args` | string\[] | 传递给 `program` 的参数。仅在设置 `program` 时使用 |

489 489 

490<a id="when-to-use-program-vs-runtimeexecutable" />

491 

490<h5 id="when-to-use-program-vs-runtimeexecutable">492<h5 id="when-to-use-program-vs-runtimeexecutable">

491 何时使用 `program` vs `runtimeExecutable`493 何时使用 `program` vs `runtimeExecutable`

492</h5>494</h5>


598 600 

599要在任何平台上为本地会话和开发服务器设置环境变量,在提示框中打开环境下拉菜单,将鼠标悬停在 **Local** 上,然后点击齿轮图标来打开本地环境编辑器。你在此处保存的变量在你的机器上加密存储,并适用于你启动的每个本地会话和预览服务器。你也可以将变量添加到你的 `~/.claude/settings.json` 文件中的 `env` 键,尽管这些仅到达 Claude 会话而不是开发服务器。有关支持的变量的完整列表,请参阅[环境变量](/zh-CN/env-vars)。601要在任何平台上为本地会话和开发服务器设置环境变量,在提示框中打开环境下拉菜单,将鼠标悬停在 **Local** 上,然后点击齿轮图标来打开本地环境编辑器。你在此处保存的变量在你的机器上加密存储,并适用于你启动的每个本地会话和预览服务器。你也可以将变量添加到你的 `~/.claude/settings.json` 文件中的 `env` 键,尽管这些仅到达 Claude 会话而不是开发服务器。有关支持的变量的完整列表,请参阅[环境变量](/zh-CN/env-vars)。

600 602 

601[Extended thinking](/zh-CN/model-config#extended-thinking)默认启用,这改进了复杂推理任务的性能,但使用额外的令牌。要完全禁用思考,在本地环境编辑器中将 `MAX_THINKING_TOKENS` 设置为 `0`。在具有[自适应推理](/zh-CN/model-config#adjust-effort-level)的模型上,任何其他 `MAX_THINKING_TOKENS` 值都被忽略,因为自适应推理控制思考深度。在 Opus 4.6 和 Sonnet 4.6 上,设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 为 `1` 来使用固定思考预算;Opus 4.7 及更高版本始终使用自适应推理,没有固定预算模式。603[Extended thinking](/zh-CN/model-config#extended-thinking)默认启用,这改进了复杂推理任务的性能,但使用额外的令牌。要禁用思考,在本地环境编辑器中将 `MAX_THINKING_TOKENS` 设置为 `0`;这对 Fable 5 没有影响,Fable 5 始终使用 extended thinking在[第三方提供商](/zh-CN/third-party-integrations)上,`0` 会省略 `thinking` 参数,自适应推理模型可能仍然会思考。在具有[自适应推理](/zh-CN/model-config#adjust-effort-level)的模型上,任何其他 `MAX_THINKING_TOKENS` 值都被忽略,因为自适应推理控制思考深度。在 Opus 4.6 和 Sonnet 4.6 上,设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 为 `1` 来使用固定思考预算;Opus 4.7 及更高版本始终使用自适应推理,没有固定预算模式。

602 604 

603<h3 id="remote-sessions">605<h3 id="cloud-sessions">

604 远程会话606 云会话

605</h3>607</h3>

606 608 

607远程会话即使在你关闭应用后也会在后台继续。使用计入你的[订阅计划限制](/zh-CN/costs),没有单独的计算费用。609云会话即使在你关闭应用后也会在后台继续。使用计入你的[订阅计划限制](/zh-CN/costs),没有单独的计算费用。

608 610 

609你可以创建具有不同网络访问级别和环境变量的自定义云环境。在启动远程会话时选择环境下拉菜单并选择 **Add environment**。有关配置网络访问和环境变量的详细信息,请参阅[云环境](/zh-CN/claude-code-on-the-web#the-cloud-environment)。611你可以创建具有不同网络访问级别和环境变量的自定义云环境。在启动云会话时选择环境下拉菜单并选择 **Add environment**。有关配置网络访问和环境变量的详细信息,请参阅[云环境](/zh-CN/claude-code-on-the-web#the-cloud-environment)。

610 612 

611<h3 id="ssh-sessions">613<h3 id="ssh-sessions">

612 SSH 会话614 SSH 会话


710 712 

711IT 团队可以通过 macOS 上的 MDM 或 Windows 上的组策略管理桌面应用。可用的策略包括启用或禁用 Claude Code 功能、控制自动更新和设置自定义部署 URL。713IT 团队可以通过 macOS 上的 MDM 或 Windows 上的组策略管理桌面应用。可用的策略包括启用或禁用 Claude Code 功能、控制自动更新和设置自定义部署 URL。

712 714 

713* **macOS**:通过使用 Jamf 或 Kandji 等工具的 `com.anthropic.Claude` 偏好域配置715* **macOS**:通过使用 Jamf 或 Kandji 等工具的 `com.anthropic.claudefordesktop` 偏好域配置

714* **Windows**:通过 `SOFTWARE\Policies\Claude` 处的注册表配置716* **Windows**:通过 `SOFTWARE\Policies\Claude` 处的注册表配置

715 717 

716<h3 id="authentication-and-sso">718<h3 id="authentication-and-sso">


723 数据处理725 数据处理

724</h3>726</h3>

725 727 

726Claude Code 在本地会话中本地处理你的代码,或在远程会话中在 Anthropic 的云基础设施上处理。对话和代码上下文被发送到 Anthropic 的 API 进行处理。有关数据保留、隐私和合规性的详细信息,请参阅[数据处理](/zh-CN/data-usage)。728Claude Code 在本地会话中本地处理你的代码,或在云会话中在 Anthropic 的云基础设施上处理。对话和代码上下文被发送到 Anthropic 的 API 进行处理。有关数据保留、隐私和合规性的详细信息,请参阅[数据处理](/zh-CN/data-usage)。

727 729 

728<h3 id="deployment">730<h3 id="deployment">

729 部署731 部署


762| `--resume`, `--continue` | 点击侧边栏中的会话 |764| `--resume`, `--continue` | 点击侧边栏中的会话 |

763| `--permission-mode` | 发送按钮旁的模式选择器 |765| `--permission-mode` | 发送按钮旁的模式选择器 |

764| `--dangerously-skip-permissions` | 绕过权限模式。在设置 → Claude Code → "允许绕过权限模式"中启用。企业管理员可以禁用此设置。 |766| `--dangerously-skip-permissions` | 绕过权限模式。在设置 → Claude Code → "允许绕过权限模式"中启用。企业管理员可以禁用此设置。 |

765| `--add-dir` | 在远程会话中使用 **+** 按钮添加多个存储库 |767| `--add-dir` | 在云会话中使用 **+** 按钮添加多个存储库 |

766| `--allowedTools`, `--disallowedTools` | 无每个会话的等效项。[设置文件](/zh-CN/settings)中的权限规则仍然适用。 |768| `--allowedTools`, `--disallowedTools` | 无每个会话的等效项。[设置文件](/zh-CN/settings)中的权限规则仍然适用。 |

767| `--verbose` | [Verbose 视图模式](#switch-view-modes)在 Transcript 视图下拉菜单中 |769| `--verbose` | [Verbose 视图模式](#switch-view-modes)在 Transcript 视图下拉菜单中 |

768| `--print`, `--output-format` | 不可用。Desktop 仅是交互式的。 |770| `--print`, `--output-format` | 不可用。Desktop 仅是交互式的。 |


779* **[MCP servers](/zh-CN/mcp)** 在 `~/.claude.json` 或 `.mcp.json` 中配置在两者中工作781* **[MCP servers](/zh-CN/mcp)** 在 `~/.claude.json` 或 `.mcp.json` 中配置在两者中工作

780* **[Hooks](/zh-CN/hooks)** 和 **[skills](/zh-CN/skills)** 在设置中定义适用于两者782* **[Hooks](/zh-CN/hooks)** 和 **[skills](/zh-CN/skills)** 在设置中定义适用于两者

781* **[Settings](/zh-CN/settings)** 在 `~/.claude.json` 和 `~/.claude/settings.json` 中是共享的。权限规则、允许的工具和 `settings.json` 中的其他设置适用于 Desktop 会话。783* **[Settings](/zh-CN/settings)** 在 `~/.claude.json` 和 `~/.claude/settings.json` 中是共享的。权限规则、允许的工具和 `settings.json` 中的其他设置适用于 Desktop 会话。

782* **Models**:Sonnet、Opus 和 Haiku 在两者中都可用。在 Desktop 中,从发送按钮旁的下拉菜单中选择模型。你可以在会话期间从相同的下拉菜单更改模型。784* **Models**:相同的[模型](/zh-CN/model-config#available-models)在两者中都可用。在 Desktop 中,从发送按钮旁的下拉菜单中选择模型。你可以在会话期间从相同的下拉菜单更改模型。

783 785 

784<Note>786<Note>

785 **来自 Claude Desktop 聊天应用的 MCP servers**:Desktop 应用从 `claude_desktop_config.json` 将 MCP servers 加载到 Code 选项卡会话中,以及来自 `~/.claude.json` 和 `.mcp.json` 的服务器。在 `claude_desktop_config.json` 中定义的服务器在 Desktop 聊天表面和 Code 选项卡中都可用。787 **来自 Claude Desktop 聊天应用的 MCP servers**:Desktop 应用从 `claude_desktop_config.json` 将 MCP servers 加载到 Code 选项卡会话中,以及来自 `~/.claude.json` 和 `.mcp.json` 的服务器。在 `claude_desktop_config.json` 中定义的服务器在 Desktop 聊天表面和 Code 选项卡中都可用。


794此表比较了 CLI 和 Desktop 之间的核心功能。有关 CLI 标志的完整列表,请参阅 [CLI 参考](/zh-CN/cli-reference)。796此表比较了 CLI 和 Desktop 之间的核心功能。有关 CLI 标志的完整列表,请参阅 [CLI 参考](/zh-CN/cli-reference)。

795 797 

796| 功能 | CLI | Desktop |798| 功能 | CLI | Desktop |

797| ----------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |799| ----------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

798| 权限模式 | 所有模式,包括 `dontAsk` | 询问权限、自动接受编辑、Plan Mode、Auto 和通过设置的绕过权限 |800| 权限模式 | 所有模式,包括 `dontAsk` | 询问权限、自动接受编辑、Plan Mode、Auto 和通过设置的绕过权限 |

799| `--dangerously-skip-permissions` | CLI 标志 | 绕过权限模式。在设置 → Claude Code → "允许绕过权限模式"中启用 |801| `--dangerously-skip-permissions` | CLI 标志 | 绕过权限模式。在设置 → Claude Code → "允许绕过权限模式"中启用 |

800| [第三方提供商](/zh-CN/third-party-integrations) | Bedrock、Vertex、Foundry | Anthropic 的 API 默认。企业部署可以配置 Vertex AI 和网关提供商。请参阅[企业配置指南](https://support.claude.com/en/articles/12622667-enterprise-configuration)。 |802| [第三方提供商](/zh-CN/third-party-integrations) | Bedrock、Vertex AI、Foundry | Anthropic 的 API 默认。企业部署可以配置 Vertex AI 和网关提供商。请参阅[企业配置指南](https://support.claude.com/en/articles/12622667-enterprise-configuration)。要在 Bedrock、Vertex AI、Foundry 或自托管 LLM 网关上运行 Code 选项卡,请参阅 [Cowork on 3P research preview](https://claude.com/docs/cowork/3p/overview)。 |

801| [MCP servers](/zh-CN/mcp) | 在设置文件中配置 | 本地和 SSH 会话的连接器 UI,或设置文件 |803| [MCP servers](/zh-CN/mcp) | 在设置文件中配置 | 本地和 SSH 会话的连接器 UI,或设置文件 |

802| [Plugins](/zh-CN/plugins) | `/plugin` 命令 | 插件管理器 UI |804| [Plugins](/zh-CN/plugins) | `/plugin` 命令 | 插件管理器 UI |

803| @mention 文件 | 基于文本 | 带自动完成;仅本地和 SSH 会话 |805| @mention 文件 | 基于文本 | 带自动完成;仅本地和 SSH 会话 |


809| Dispatch 集成 | 不可用 | [Dispatch 会话](#sessions-from-dispatch)在侧边栏中 |811| Dispatch 集成 | 不可用 | [Dispatch 会话](#sessions-from-dispatch)在侧边栏中 |

810| 脚本和自动化 | [`--print`](/zh-CN/cli-reference)、[Agent SDK](/zh-CN/headless) | 不可用 |812| 脚本和自动化 | [`--print`](/zh-CN/cli-reference)、[Agent SDK](/zh-CN/headless) | 不可用 |

811 813 

812<h3 id="what-s-not-available-in-desktop">814<h3 id="whats-not-available-in-desktop">

813 Desktop 中不可用的内容815 Desktop 中不可用的内容

814</h3>816</h3>

815 817 

816以下功能仅在 CLI 或 VS Code 扩展中可用:818以下功能仅在 CLI 或 VS Code 扩展中可用,除非另有说明

817 819 

818* **第三方提供商**:Desktop 默认连接到 Anthropic 的 API。企业部署可以配置 Vertex AI 和网关提供商,通过[托管设置](https://support.claude.com/en/articles/12622667-enterprise-configuration)。对于 Bedrock 或 Foundry,使用 [CLI](/zh-CN/quickstart)。820* **第三方提供商**:Desktop 默认连接到 Anthropic 的 API。企业部署可以通过[托管设置](https://support.claude.com/en/articles/12622667-enterprise-configuration)配置 Vertex AI 和网关提供商。对于 CLI 中的 Bedrock 或 Foundry,请参阅[快速入门](/zh-CN/quickstart)。作为上述部分的例外,[Cowork on 3P research preview](https://claude.com/docs/cowork/3p/overview)在 Bedrock、Vertex AI、Foundry 或自托管 LLM 网关上运行 Code 选项卡。

819* **Linux**:桌面应用仅在 macOS 和 Windows 上可用。在 Linux 上,使用 [CLI](/zh-CN/quickstart)。821* **Linux**:桌面应用仅在 macOS 和 Windows 上可用。在 Linux 上,使用 [CLI](/zh-CN/quickstart)。

820* **内联代码建议**:Desktop 不提供自动完成风格的建议。它通过对话提示和显式代码更改工作。822* **内联代码建议**:Desktop 不提供自动完成风格的建议。它通过对话提示和显式代码更改工作。

821* **Agent teams**:并行 Claude Code 会话相互通信在 [CLI](/zh-CN/agent-teams) 中可用,不在 Desktop 中。对于一个会话内的多 agent 工作,使用[动态工作流](/zh-CN/workflows),它在 Desktop 中运行。823* **Agent teams**:并行 Claude Code 会话相互通信在 [CLI](/zh-CN/agent-teams) 中可用,不在 Desktop 中。对于一个会话内的多 agent 工作,使用[动态工作流](/zh-CN/workflows),它在 Desktop 中运行。


885 887 

886如果 MCP server 切换不响应或服务器在 Windows 上连接失败,检查服务器在你的设置中是否正确配置,重启应用,验证服务器进程在任务管理器中运行,并查看服务器日志以获取连接错误。888如果 MCP server 切换不响应或服务器在 Windows 上连接失败,检查服务器在你的设置中是否正确配置,重启应用,验证服务器进程在任务管理器中运行,并查看服务器日志以获取连接错误。

887 889 

888<h3 id="app-won-t-quit">890<h3 id="app-wont-quit">

889 应用无法退出891 应用无法退出

890</h3>892</h3>

891 893 


899* **安装后 PATH 未更新**:打开新的终端窗口。PATH 更新仅适用于新的终端会话。901* **安装后 PATH 未更新**:打开新的终端窗口。PATH 更新仅适用于新的终端会话。

900* **并发安装错误**:如果你看到关于另一个安装正在进行的错误,但实际上没有,尝试以管理员身份运行安装程序。902* **并发安装错误**:如果你看到关于另一个安装正在进行的错误,但实际上没有,尝试以管理员身份运行安装程序。

901 903 

902<h3 id="branch-doesn-t-exist-yet-when-opening-in-cli">904<h3 id="branch-doesnt-exist-yet-when-opening-in-cli">

903 在 CLI 中打开时"Branch doesn't exist yet"905 在 CLI 中打开时"Branch doesn't exist yet"

904</h3>906</h3>

905 907 


914 仍然卡住?916 仍然卡住?

915</h3>917</h3>

916 918 

917* [GitHub Issues](https://github.com/anthropics/claude-code/issues) 上搜索或提交错误919* 在桌面应用中打开 Help → Get Support,或直接访问 [Claude 支持中心](https://support.claude.com/)

918* 访问 [Claude 支持中心](https://support.claude.com/)920* 对于在独立 `claude` CLI 中也能重现的问题,在 [GitHub Issues](https://github.com/anthropics/claude-code/issues) 上搜索或提交错误

919 921 

920提交错误时,包括你的桌面应用版本、你的操作系统、确切的错误消息和相关日志。在 macOS 上,检查 Console.app。在 Windows 上,检查事件查看器 → Windows 日志 → 应用程序。922提交问题时,包括你的桌面应用版本、你的操作系统、确切的错误消息和相关日志。在 macOS 上,检查 Console.app。在 Windows 上,检查事件查看器 → Windows 日志 → 应用程序。

Details

71 </Step>71 </Step>

72 72 

73 <Step title="选择模型">73 <Step title="选择模型">

74 从发送按钮旁的下拉菜单中选择模型。请参阅[模型](/zh-CN/model-config#available-models)了解 Opus、Sonnet 和 Haiku 的比较。您可以稍后从同一下拉菜单更改模型。74 从发送按钮旁的下拉菜单中选择模型。请参阅[模型](/zh-CN/model-config#available-models)了解可用模型的比较。您可以稍后从同一下拉菜单更改模型。

75 </Step>75 </Step>

76 76 

77 <Step title="告诉 Claude 要做什么">77 <Step title="告诉 Claude 要做什么">


129 129 

130Desktop 运行与 CLI 相同的引擎,但具有图形界面。您可以在同一项目上同时运行两者,它们共享配置(CLAUDE.md 文件、MCP servers、hooks、skills 和设置)。有关功能、标志等效项和 Desktop 中不可用内容的完整比较,请参阅 [CLI 比较](/zh-CN/desktop#coming-from-the-cli)。130Desktop 运行与 CLI 相同的引擎,但具有图形界面。您可以在同一项目上同时运行两者,它们共享配置(CLAUDE.md 文件、MCP servers、hooks、skills 和设置)。有关功能、标志等效项和 Desktop 中不可用内容的完整比较,请参阅 [CLI 比较](/zh-CN/desktop#coming-from-the-cli)。

131 131 

132<h2 id="what-s-next">132<h2 id="whats-next">

133 接下来是什么133 接下来是什么

134</h2>134</h2>

135 135 

Details

169 * **市场**:添加、删除或更新已添加的市场169 * **市场**:添加、删除或更新已添加的市场

170 * **错误**:查看任何插件加载错误170 * **错误**:查看任何插件加载错误

171 171 

172 转到**发现**选项卡以查看您刚添加的市场中的插件。{/* min-version: 2.1.154 */}标记为与您当前工作目录相关的插件会在顶部固定,并带有**建议用于此目录**标签。172 转到**发现**选项卡以查看您刚添加的市场中的插件。{/* min-version: 2.1.154 */}当您的管理员通过 [`pluginSuggestionMarketplaces`](/zh-CN/settings#available-settings) 托管设置将市场列入允许列表时,标记为与您当前工作目录相关的插件会在顶部固定,并带有**建议用于此目录**标签。

173 </Step>173 </Step>

174 174 

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


328* 输入以按插件名称或描述筛选328* 输入以按插件名称或描述筛选

329* 按 Enter 打开插件的详细视图并启用、禁用或卸载它329* 按 Enter 打开插件的详细视图并启用、禁用或卸载它

330 330 

331详细视图显示插件贡献的组件:commands、skills、agents、hooks、MCP servers 和 LSP servers。相同的清单也可以从命令行通过 `claude plugin details` 获得。

332 

331当您安装声明依赖项的插件时,安装输出会列出哪些依赖项与其一起自动安装。333当您安装声明依赖项的插件时,安装输出会列出哪些依赖项与其一起自动安装。

332 334 

333您也可以使用直接命令管理插件。335您也可以使用直接命令管理插件。

334 336 

337列出已安装的插件而不打开菜单:

338 

339```shell theme={null}

340/plugin list

341```

342 

343传递 `--enabled` 或 `--disabled` 以仅显示处于该状态的插件。

344 

335禁用插件而不卸载:345禁用插件而不卸载:

336 346 

337```shell theme={null}347```shell theme={null}


369 379 

370Claude Code 重新加载所有活跃插件,并显示插件、skills、agents、hooks、插件 MCP servers 和插件 LSP servers 的计数。380Claude Code 重新加载所有活跃插件,并显示插件、skills、agents、hooks、插件 MCP servers 和插件 LSP servers 的计数。

371 381 

372重新加载在下一个请求时会产生令牌成本:新加载的组件在附加到对话的内容中宣布自己,而现有历史记录仍然从 prompt cache 读取。提供 MCP servers 的插件在其工具未被 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 延迟时成本更高:该更改使缓存失效,下一个请求重新读取整个对话。有关详细信息,请参阅[启用或禁用插件](/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)。382重新加载在下一个请求时会产生令牌成本:新加载的组件在附加到对话的内容中宣布自己,而现有历史记录仍然从 prompt cache 读取。提供 MCP servers 的插件在其工具未被 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 延迟时成本更高:该更改使缓存失效,下一个请求重新读取整个对话。在这种情况下,`/reload-plugins` 显示警告并不应用重新加载;传递 `--force` 以强制应用。有关详细信息,请参阅[启用或禁用插件](/zh-CN/prompt-caching#enabling-or-disabling-a-plugin)。

373 383 

374<h2 id="manage-marketplaces">384<h2 id="manage-marketplaces">

375 管理市场385 管理市场

env-vars.md +36 −21

Details

73您选择的文件控制变量适用于谁:73您选择的文件控制变量适用于谁:

74 74 

75| 文件 | 适用于 |75| 文件 | 适用于 |

76| :---------------------------- | :----------------- |76| :---------------------------- | :-------------------------------- |

77| `~/.claude/settings.json` | 您,在每个项目中 |77| `~/.claude/settings.json` | 您,在每个项目中 |

78| `.claude/settings.json` | 在项目中工作的每个人,检入源代码控制 |78| `.claude/settings.json` | 在项目中工作的每个人,检入源代码控制 |

79| `.claude/settings.local.json` | 您,仅在此项目中,未检入 |79| `.claude/settings.local.json` | 您,仅在此项目中(如果手动创建请将其添加到 gitignore) |

80| 托管设置 | 您组织中的每个人,由管理员部署 |80| 托管设置 | 您组织中的每个人,由管理员部署 |

81 81 

82请参阅[设置文件](/zh-CN/settings#settings-files)了解每个文件的位置,以及[设置优先级](/zh-CN/settings#settings-precedence)了解当多个文件设置相同变量时它们如何组合。82请参阅[设置文件](/zh-CN/settings#settings-files)了解每个文件的位置,以及[设置优先级](/zh-CN/settings#settings-precedence)了解当多个文件设置相同变量时它们如何组合。


96</h2>96</h2>

97 97 

98| 变量 | 目的 |98| 变量 | 目的 |

99| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |99| :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

100| `ANTHROPIC_API_KEY` | 作为 `X-Api-Key` 标头发送的 API 密钥。设置后,即使您已登录,此密钥也会用于替代您的 Claude Pro、Max、Team 或 Enterprise 订阅。在非交互模式(`-p`)中,存在时始终使用该密钥。在交互模式中,系统会提示您在密钥覆盖订阅之前批准一次。要改用您的订阅,请运行 `unset ANTHROPIC_API_KEY` |100| `ANTHROPIC_API_KEY` | 作为 `X-Api-Key` 标头发送的 API 密钥。设置后,即使您已登录,此密钥也会用于替代您的 Claude Pro、Max、Team 或 Enterprise 订阅。在非交互模式(`-p`)中,存在时始终使用该密钥。在交互模式中,系统会提示您在密钥覆盖订阅之前批准一次。要改用您的订阅,请运行 `unset ANTHROPIC_API_KEY` |

101| `ANTHROPIC_AUTH_TOKEN` | `Authorization` 标头的自定义值(您在此处设置的值将以 `Bearer ` 为前缀) |101| `ANTHROPIC_AUTH_TOKEN` | `Authorization` 标头的自定义值(您在此处设置的值将以 `Bearer ` 为前缀) |

102| `ANTHROPIC_AWS_API_KEY` | [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 的工作区 API 密钥,在 AWS 控制台中生成。作为 `x-api-key` 发送,优先于 AWS SigV4 |102| `ANTHROPIC_AWS_API_KEY` | [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 的工作区 API 密钥,在 AWS 控制台中生成。作为 `x-api-key` 发送,优先于 AWS SigV4 |


112| `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` | `/model` 选择器中自定义模型条目的显示描述。未设置时默认为 `Custom model (<model-id>)` |112| `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` | `/model` 选择器中自定义模型条目的显示描述。未设置时默认为 `Custom model (<model-id>)` |

113| `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` | `/model` 选择器中自定义模型条目的显示名称。未设置时默认为模型 ID |113| `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` | `/model` 选择器中自定义模型条目的显示名称。未设置时默认为模型 ID |

114| `ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |114| `ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |

115| `ANTHROPIC_DEFAULT_FABLE_MODEL` | 请参阅[模型配置](/zh-CN/model-config#environment-variables) |

116| `ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |

117| `ANTHROPIC_DEFAULT_FABLE_MODEL_NAME` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |

118| `ANTHROPIC_DEFAULT_FABLE_MODEL_SUPPORTED_CAPABILITIES` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |

115| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | 请参阅[模型配置](/zh-CN/model-config#environment-variables) |119| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | 请参阅[模型配置](/zh-CN/model-config#environment-variables) |

116| `ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |120| `ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |

117| `ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |121| `ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME` | 请参阅[模型配置](/zh-CN/model-config#customize-pinned-model-display-and-capabilities) |


133| `ANTHROPIC_VERTEX_BASE_URL` | 覆盖 Vertex AI 端点 URL。用于自定义 Vertex 端点或通过 [LLM 网关](/zh-CN/llm-gateway)路由时。请参阅 [Google Vertex AI](/zh-CN/google-vertex-ai) |137| `ANTHROPIC_VERTEX_BASE_URL` | 覆盖 Vertex AI 端点 URL。用于自定义 Vertex 端点或通过 [LLM 网关](/zh-CN/llm-gateway)路由时。请参阅 [Google Vertex AI](/zh-CN/google-vertex-ai) |

134| `ANTHROPIC_VERTEX_PROJECT_ID` | Vertex AI 请求的 GCP 项目 ID。被 `GCLOUD_PROJECT`、`GOOGLE_CLOUD_PROJECT` 或您的 `GOOGLE_APPLICATION_CREDENTIALS` 凭证文件中的项目覆盖。请参阅 [Google Vertex AI](/zh-CN/google-vertex-ai) |138| `ANTHROPIC_VERTEX_PROJECT_ID` | Vertex AI 请求的 GCP 项目 ID。被 `GCLOUD_PROJECT`、`GOOGLE_CLOUD_PROJECT` 或您的 `GOOGLE_APPLICATION_CREDENTIALS` 凭证文件中的项目覆盖。请参阅 [Google Vertex AI](/zh-CN/google-vertex-ai) |

135| `ANTHROPIC_WORKSPACE_ID` | [工作负载身份联合](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation)的工作区 ID。当您的联合规则的范围超过一个工作区时设置此选项,以便令牌交换知道要针对哪个工作区 |139| `ANTHROPIC_WORKSPACE_ID` | [工作负载身份联合](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation)的工作区 ID。当您的联合规则的范围超过一个工作区时设置此选项,以便令牌交换知道要针对哪个工作区 |

140| `API_FORCE_IDLE_TIMEOUT` | 覆盖 5 分钟空闲超时,该超时在没有字节到达时中止流式模型响应。设置为 `0` 以禁用超时,例如当缓慢的[网关](/zh-CN/llm-gateway)或本地模型在块之间暂停超过 5 分钟时。设置为 `1` 以在每个提供商上保持超时。未设置时,超时在直接 Anthropic API 和 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 连接上不活跃,其中 Claude Code 自己的字节级流监视程序运行,在所有其他提供商上活跃,包括 [Vertex AI](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry)、[Mantle](/zh-CN/amazon-bedrock#use-the-mantle-endpoint)、[Bedrock](/zh-CN/amazon-bedrock) 和网关连接,因此停滞的流会中止而不是挂起。从 v2.1.169 开始 |

136| `API_TIMEOUT_MS` | API 请求的超时时间(以毫秒为单位)(默认值:600000,或 10 分钟;最大值:2147483647)。在缓慢网络上请求超时或通过代理路由时增加此值。超过最大值的值会导致底层计时器溢出,导致请求立即失败 |141| `API_TIMEOUT_MS` | API 请求的超时时间(以毫秒为单位)(默认值:600000,或 10 分钟;最大值:2147483647)。在缓慢网络上请求超时或通过代理路由时增加此值。超过最大值的值会导致底层计时器溢出,导致请求立即失败 |

137| `AWS_BEARER_TOKEN_BEDROCK` | 用于身份验证的 Bedrock API 密钥(请参阅 [Bedrock API 密钥](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |142| `AWS_BEARER_TOKEN_BEDROCK` | 用于身份验证的 Bedrock API 密钥(请参阅 [Bedrock API 密钥](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

138| `BASH_DEFAULT_TIMEOUT_MS` | 长时间运行的 bash 命令的默认超时(默认值:120000,或 2 分钟) |143| `BASH_DEFAULT_TIMEOUT_MS` | 长时间运行的 bash 命令的默认超时(默认值:120000,或 2 分钟) |

139| `BASH_MAX_OUTPUT_LENGTH` | bash 输出中的最大字符数,超过此数字后将完整输出保存到文件,Claude 接收路径加上简短预览。请参阅 [Bash 工具行为](/zh-CN/tools-reference#bash-tool-behavior) |144| `BASH_MAX_OUTPUT_LENGTH` | bash 输出中的最大字符数,超过此数字后将完整输出保存到文件,Claude 接收路径加上简短预览。请参阅 [Bash 工具行为](/zh-CN/tools-reference#bash-tool-behavior) |

140| `BASH_MAX_TIMEOUT_MS` | 模型可以为长时间运行的 bash 命令设置的最大超时(默认值:600000,或 10 分钟) |145| `BASH_MAX_TIMEOUT_MS` | 模型可以为长时间运行的 bash 命令设置的最大超时(默认值:600000,或 10 分钟) |

141| `CCR_FORCE_BUNDLE` | 设置为 `1` 以强制 [`claude --remote`](/zh-CN/claude-code-on-the-web#send-local-repositories-without-github) 捆绑并上传您的本地存储库,即使 GitHub 访问可用 |146| `CCR_FORCE_BUNDLE` | 设置为 `1` 以强制 [`claude --remote`](/zh-CN/claude-code-on-the-web#send-local-repositories-without-github) 捆绑并上传您的本地存储库,即使 GitHub 访问可用 |

142| `CLAUDECODE` | 在 Claude Code 生成的子进程中设置为 `1`(Bash 和 PowerShell 工具、tmux 会话、[hook](/zh-CN/hooks) 命令、[状态行](/zh-CN/statusline)命令、stdio [MCP server](/zh-CN/mcp) 子进程)。用于检测脚本何时在 Claude Code 生成的子进程内运行 |147| `CLAUDECODE` | 在 Claude Code 生成的子进程中设置为 `1`(Bash 和 PowerShell 工具、tmux 会话、[hook](/zh-CN/hooks) 命令、[状态行](/zh-CN/statusline)命令、stdio [MCP server](/zh-CN/mcp) 子进程)。IDE 扩展也在其集成终端中设置此选项。用于检测脚本何时在 Claude Code 生成的子进程内运行。要检查当前进程是否由工具调用或 hook 直接生成,而不是在 Claude Code 启动的 stdio MCP 服务器内,请改用 `CLAUDE_CODE_CHILD_SESSION` |

143| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | 设置为 `1` 以禁用所有内置 [subagent](/zh-CN/sub-agents) 类型,如 Explore 和 Plan。仅适用于非交互模式(`-p` 标志)。对于想要空白状态的 SDK 用户很有用 |148| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | 设置为 `1` 以禁用所有内置 [subagent](/zh-CN/sub-agents) 类型,如 Explore 和 Plan。仅适用于非交互模式(`-p` 标志)。对于想要空白状态的 SDK 用户很有用 |

144| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | 设置为 `1` 以跳过 SDK 创建的 MCP 服务器中工具名称上的 `mcp__<server>__` 前缀。工具使用其原始名称。仅限 SDK 使用 |149| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | 设置为 `1` 以跳过 SDK 创建的 MCP 服务器中工具名称上的 `mcp__<server>__` 前缀。工具使用其原始名称。仅限 SDK 使用 |

145| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 后台 subagents 的停滞超时(以毫秒为单位)。默认 `600000`(10 分钟)。计时器在每个流式进度事件时重置;如果在窗口内没有进度到达,subagent 会被中止,任务被标记为失败,将任何部分结果呈现给父级 |150| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 后台 subagents 的停滞超时(以毫秒为单位)。默认 `600000`(10 分钟)。计时器在每个流式进度事件时重置;如果在窗口内没有进度到达,subagent 会被中止,任务被标记为失败,将任何部分结果呈现给父级 |

146| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 设置触发自动压缩的上下文容量百分比(1-100)。默认情况下,自动压缩在大约 95% 容量时触发。使用较低的值(如 `50`)可更早进行压缩。高于默认阈值的值无效。适用于主对话和 subagents。此百分比与[状态行](/zh-CN/statusline)中可用的 `context_window.used_percentage` 字段一致 |151| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 设置触发自动压缩的上下文容量百分比(1-100)。使用较低的值(如 `50`)可更早进行压缩。此变量仅在 Claude Code 主动压缩时导致更早压缩:当设置 `CLAUDE_CODE_AUTO_COMPACT_WINDOW` 时、在[云会话](/zh-CN/claude-code-on-the-web)中、在[远程控制](/zh-CN/remote-control)会话中,以及在没有[扩展上下文](/zh-CN/model-config#extended-context)的 Sonnet 4.6 和 Opus 4.6 上,默认在 200K 边界处压缩。在其他情况下,例如默认本地会话,当对话达到模型的上下文限制时自动压缩触发。覆盖只能降低阈值,因此高于默认值的值无效。适用于主对话和 subagents |

147| `CLAUDE_AUTO_BACKGROUND_TASKS` | 设置为 `1` 以强制启用长时间运行的代理任务的自动后台处理。启用后,subagents 在运行约两分钟后会移到后台 |152| `CLAUDE_AUTO_BACKGROUND_TASKS` | 设置为 `1` 以强制启用长时间运行的代理任务的自动后台处理。启用后,subagents 在运行约两分钟后会移到后台 |

148| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | 在主会话中每个 Bash 或 PowerShell 命令后返回到原始工作目录 |153| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | 在主会话中每个 Bash 或 PowerShell 命令后返回到原始工作目录 |

149| `CLAUDE_CODE_ACCESSIBILITY` | 设置为 `1` 以保持原生终端光标可见并禁用反向文本光标指示器。允许 macOS Zoom 等屏幕放大镜跟踪光标位置 |154| `CLAUDE_CODE_ACCESSIBILITY` | 设置为 `1` 以保持原生终端光标可见并禁用反向文本光标指示器。允许 macOS Zoom 等屏幕放大镜跟踪光标位置 |

150| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | 设置为 `1` 以从使用 `--add-dir` 指定的目录加载内存文件。加载 `CLAUDE.md`、`.claude/CLAUDE.md`、`.claude/rules/*.md` 和 `CLAUDE.local.md`。默认情况下,其他目录不加载内存文件 |155| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | 设置为 `1` 以从使用 `--add-dir` 指定的目录加载内存文件。加载 `CLAUDE.md`、`.claude/CLAUDE.md`、`.claude/rules/*.md` 和 `CLAUDE.local.md`。默认情况下,其他目录不加载内存文件 |

151| `CLAUDE_CODE_ALT_SCREEN_FULL_REPAINT` | 设置为 `1` 以在[全屏渲染](/zh-CN/fullscreen)中的每一帧上重新绘制整个屏幕,而不是发送增量更新。如果全屏模式显示陈旧或错位的文本片段,请使用此选项。Claude Code 在 Windows 上的后台会话和[代理视图](/zh-CN/agent-view)中自动启用此选项 |156| `CLAUDE_CODE_ALT_SCREEN_FULL_REPAINT` | 设置为 `1` 以在[全屏渲染](/zh-CN/fullscreen)中的每一帧上重新绘制整个屏幕,而不是发送增量更新。如果全屏模式显示陈旧或错位的文本片段,请使用此选项。Claude Code 在 Windows 上的后台会话和[代理视图](/zh-CN/agent-view)中自动启用此选项 |

157| `CLAUDE_CODE_ALWAYS_ENABLE_EFFORT` | 设置为 `1` 以在每个请求中发送[努力](/zh-CN/model-config#adjust-effort-level)参数,即使 Claude Code 不将模型 ID 识别为支持努力的。当通过 [LLM 网关](/zh-CN/llm-gateway)或第三方提供商路由时使用,这些提供商在自定义标识符下提供模型。拒绝 API 中努力参数的模型,包括 Claude 3 模型、Sonnet 4.0 和 4.5、Opus 4.0 和 4.1 以及 Haiku 4.5,仍被排除,以便请求不会失败 |

152| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | 应刷新凭证的间隔(以毫秒为单位)(使用 [`apiKeyHelper`](/zh-CN/settings#available-settings) 时) |158| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | 应刷新凭证的间隔(以毫秒为单位)(使用 [`apiKeyHelper`](/zh-CN/settings#available-settings) 时) |

153| `CLAUDE_CODE_ATTRIBUTION_HEADER` | 设置为 `0` 以从系统提示的开头省略归属块(客户端版本和提示指纹)。禁用它会改善通过 [LLM 网关](/zh-CN/llm-gateway)路由时的 prompt caching 命中率。Anthropic API 缓存不受影响 |159| `CLAUDE_CODE_ATTRIBUTION_HEADER` | 设置为 `0` 以从系统提示的开头省略归属块(客户端版本和提示指纹)。禁用它会改善通过 [LLM 网关](/zh-CN/llm-gateway)路由时的 prompt caching 命中率。Anthropic API 缓存不受影响 |

154| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置用于自动压缩计算的上下文容量(以令牌为单位)。默认为模型的上下文窗口:标准模型为 200K,或[扩展上下文](/zh-CN/model-config#extended-context)模型为 1M。在 1M 模型上使用较低的值(如 `500000`)可将窗口视为 500K 用于压缩目的。该值上限为模型的实际上下文窗口。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 作为此值的百分比应用。设置此变量会将压缩阈值与状态行的 `used_percentage` 解耦,后者始终使用模型的完整上下文窗口 |160| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置用于自动压缩计算的上下文容量(以令牌为单位)。默认为模型的上下文窗口:标准模型为 200K,或[扩展上下文](/zh-CN/model-config#extended-context)模型为 1M。在 1M 模型上使用较低的值(如 `500000`)可将窗口视为 500K 用于压缩目的。该值上限为模型的实际上下文窗口。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 作为此值的百分比应用。设置此变量会将压缩阈值与状态行的 `used_percentage` 解耦,后者始终使用模型的完整上下文窗口 |

155| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](/zh-CN/vs-code)。默认情况下,在支持的 IDE 的集成终端内启动时,Claude Code 会自动连接。设置为 `false` 以防止这种情况。设置为 `true` 以在自动检测失败时强制连接尝试,例如当 tmux 遮挡父终端时。优先于 [`autoConnectIde`](/zh-CN/settings#global-config-settings) 全局配置设置 |161| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](/zh-CN/vs-code)。默认情况下,在支持的 IDE 的集成终端内启动时,Claude Code 会自动连接。设置为 `false` 以防止这种情况。设置为 `true` 以在自动检测失败时强制连接尝试,例如当 tmux 遮挡父终端时。优先于 [`autoConnectIde`](/zh-CN/settings#global-config-settings) 全局配置设置 |

156| `CLAUDE_CODE_CERT_STORE` | TLS 连接的 CA 证书源的逗号分隔列表。`bundled` 是 Claude Code 附带的 Mozilla CA 集。`system` 是操作系统信任存储。默认为 `bundled,system` |162| `CLAUDE_CODE_CERT_STORE` | TLS 连接的 CA 证书源的逗号分隔列表。`bundled` 是 Claude Code 附带的 Mozilla CA 集。`system` 是操作系统信任存储。默认为 `bundled,system` |

163| `CLAUDE_CODE_CHILD_SESSION` | 在 Claude Code 通过 Bash、PowerShell 和 Monitor 工具、[hook](/zh-CN/hooks) 命令和[状态行](/zh-CN/statusline)命令生成的子进程中设置为 `1`。不为 stdio [MCP server](/zh-CN/mcp) 子进程设置,这些是长期存在的,超过生成它们的会话。与 `CLAUDECODE` 不同,这仅由 Claude Code 自己在启动子进程时设置,而不是由 IDE 扩展设置,因此它可靠地区分嵌套会话与在 IDE 集成终端中启动的顶级 `claude`。以这种方式启动的嵌套交互式 `claude` TUI 自动从 `--resume`、`--continue`、向上箭头历史和 `claude agents` 列表中排除。非交互式 `claude -p` 会话仍然持续。设置 `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE=1` 以覆盖此排除。需要 Claude Code v2.1.172 或更高版本 |

157| `CLAUDE_CODE_CLIENT_CERT` | 用于 mTLS 身份验证的客户端证书文件的路径 |164| `CLAUDE_CODE_CLIENT_CERT` | 用于 mTLS 身份验证的客户端证书文件的路径 |

158| `CLAUDE_CODE_CLIENT_KEY` | 用于 mTLS 身份验证的客户端私钥文件的路径 |165| `CLAUDE_CODE_CLIENT_KEY` | 用于 mTLS 身份验证的客户端私钥文件的路径 |

159| `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE` | 加密 CLAUDE\_CODE\_CLIENT\_KEY 的密码短语(可选) |166| `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE` | 加密 CLAUDE\_CODE\_CLIENT\_KEY 的密码短语(可选) |

160| `CLAUDE_CODE_DEBUG_LOGS_DIR` | 覆盖调试日志文件路径。尽管名称如此,这是文件路径,而不是目录。需要通过 `--debug`、`/debug` 或 `DEBUG` 环境变量单独启用调试模式:仅设置此变量不会启用日志记录。[`--debug-file`](/zh-CN/cli-reference#cli-flags) 标志同时执行两者。默认为 `~/.claude/debug/<session-id>.txt` |167| `CLAUDE_CODE_DEBUG_LOGS_DIR` | 覆盖调试日志文件路径。尽管名称如此,这是文件路径,而不是目录。需要通过 `--debug`、`/debug` 或 `DEBUG` 环境变量单独启用调试模式:仅设置此变量不会启用日志记录。[`--debug-file`](/zh-CN/cli-reference#cli-flags) 标志同时执行两者。默认为 `~/.claude/debug/<session-id>.txt` |

161| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | 写入调试日志文件的最小日志级别。值:`verbose`、`debug`(默认)、`info`、`warn`、`error`。设置为 `verbose` 以包含高容量诊断(如完整状态行命令输出),或提高到 `error` 以减少噪音 |168| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | 写入调试日志文件的最小日志级别。值:`verbose`、`debug`(默认)、`info`、`warn`、`error`。设置为 `verbose` 以包含高容量诊断(如完整状态行命令输出),或提高到 `error` 以减少噪音 |

162| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | 设置为 `1` 以禁用[1M 上下文窗口](/zh-CN/model-config#extended-context)支持。设置后,1M 模型变体在模型选择器中不可用。对于具有合规要求的企业环境很有用 |169| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | 设置为 `1` 以禁用[1M 上下文窗口](/zh-CN/model-config#extended-context)支持。设置后,1M 模型变体在模型选择器中不可用。对于具有合规要求的企业环境很有用 |

163| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | 设置为 `1` 以禁用 Opus 4.6 和 Sonnet 4.6 的[自适应推理](/zh-CN/model-config#adjust-effort-level)并回退到由 `MAX_THINKING_TOKENS` 控制的固定思考预算。从 v2.1.111 开始,对 Opus 4.7 及更高版本无效,它们始终使用自适应推理 |170| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | 设置为 `1` 以禁用 Opus 4.6 和 Sonnet 4.6 的[自适应推理](/zh-CN/model-config#adjust-effort-level)并回退到由 `MAX_THINKING_TOKENS` 控制的固定思考预算。从 v2.1.111 开始,对 Fable 5 无效,或对 Opus 4.7 及更高版本无效,它们始终使用自适应推理 |

171| `CLAUDE_CODE_DISABLE_ADVISOR_TOOL` | 设置为 `1` 以禁用[顾问工具](/zh-CN/advisor)。`/advisor` 命令和 `--advisor` 标志变为不可用,任何配置的 `advisorModel` 被忽略。需要 Claude Code v2.1.98 或更高版本 |

164| `CLAUDE_CODE_DISABLE_AGENT_VIEW` | 设置为 `1` 以关闭[后台代理和代理视图](/zh-CN/agent-view):`claude agents`、`--bg`、`/background` 和按需监督员。等同于 [`disableAgentView`](/zh-CN/settings#available-settings) 设置 |172| `CLAUDE_CODE_DISABLE_AGENT_VIEW` | 设置为 `1` 以关闭[后台代理和代理视图](/zh-CN/agent-view):`claude agents`、`--bg`、`/background` 和按需监督员。等同于 [`disableAgentView`](/zh-CN/settings#available-settings) 设置 |

165| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | 设置为 `1` 以禁用[全屏渲染](/zh-CN/fullscreen)并使用经典主屏幕渲染器。对话保持在您的终端的原生滚动条中,因此 `Cmd+f` 和 tmux 复制模式可以正常工作。优先于 `CLAUDE_CODE_NO_FLICKER` 和 [`tui`](/zh-CN/settings#available-settings) 设置。您也可以使用 `/tui default` 切换。不适用于从[代理视图](/zh-CN/agent-view)打开的后台会话,它们始终使用全屏渲染 |173| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | 设置为 `1` 以禁用[全屏渲染](/zh-CN/fullscreen)并使用经典主屏幕渲染器。对话保持在您的终端的原生滚动条中,因此 `Cmd+f` 和 tmux 复制模式可以正常工作。优先于 `CLAUDE_CODE_NO_FLICKER` 和 [`tui`](/zh-CN/settings#available-settings) 设置。您也可以使用 `/tui default` 切换。不适用于从[代理视图](/zh-CN/agent-view)打开的后台会话,它们始终使用全屏渲染 |

166| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | 设置为 `1` 以禁用附件处理。带有 `@` 语法的文件提及作为纯文本发送,而不是扩展为文件内容 |174| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | 设置为 `1` 以禁用附件处理。带有 `@` 语法的文件提及作为纯文本发送,而不是扩展为文件内容 |

167| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | 设置为 `1` 以禁用[自动内存](/zh-CN/memory#auto-memory)。设置为 `0` 以在 `--bare` 模式或 [`autoMemoryEnabled: false`](/zh-CN/settings#available-settings) 会禁用它时强制启用自动内存。禁用后,Claude 不会创建或加载自动内存文件 |175| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | 设置为 `1` 以禁用[自动内存](/zh-CN/memory#auto-memory)。设置为 `0` 以在 `--bare` 模式或 [`autoMemoryEnabled: false`](/zh-CN/settings#available-settings) 会禁用它时强制启用自动内存。禁用后,Claude 不会创建或加载自动内存文件 |

168| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | 设置为 `1` 以禁用所有后台任务功能,包括 Bash 和 subagent 工具上的 `run_in_background` 参数、自动后台处理和 Ctrl+B 快捷键 |176| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | 设置为 `1` 以禁用所有后台任务功能,包括 Bash 和 subagent 工具上的 `run_in_background` 参数、自动后台处理和 Ctrl+B 快捷键 |

177| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | 设置为 `1` 以禁用 Claude Code 附带的 [skills](/zh-CN/skills) 和工作流:捆绑的 skills 和工作流被完全删除,而内置的斜杠命令如 `/init` 保持可输入但对模型隐藏。来自插件、`.claude/skills/` 和 `.claude/commands/` 的 skills 不受影响。等同于 [`disableBundledSkills`](/zh-CN/settings#available-settings) 设置;`0` 不会覆盖它 |

169| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | 设置为 `1` 以防止将任何 CLAUDE.md 内存文件加载到上下文中,包括用户、项目和自动内存文件 |178| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | 设置为 `1` 以防止将任何 CLAUDE.md 内存文件加载到上下文中,包括用户、项目和自动内存文件 |

170| `CLAUDE_CODE_DISABLE_CRON` | 设置为 `1` 以禁用[计划任务](/zh-CN/scheduled-tasks)。`/loop` skill 和 cron 工具变为不可用,任何已计划的任务停止触发,包括已在会话中运行的任务 |179| `CLAUDE_CODE_DISABLE_CRON` | 设置为 `1` 以禁用[计划任务](/zh-CN/scheduled-tasks)。`/loop` skill 和 cron 工具变为不可用,任何已计划的任务停止触发,包括已在会话中运行的任务 |

171| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | 设置为 `1` 以从 API 请求中删除 Anthropic 特定的 `anthropic-beta` 请求标头和 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`)被保留。 |180| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | 设置为 `1` 以从 API 请求中删除 Anthropic 特定的 `anthropic-beta` 请求标头和 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`)被保留。 |


180| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | 设置为 `1` 以跳过首次运行时官方插件市场的自动添加 |189| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | 设置为 `1` 以跳过首次运行时官方插件市场的自动添加 |

181| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | 设置为 `1` 以跳过从系统范围的托管 skills 目录加载 skills。对于不应加载操作员配置的 skills 的容器或 CI 会话很有用 |190| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | 设置为 `1` 以跳过从系统范围的托管 skills 目录加载 skills。对于不应加载操作员配置的 skills 的容器或 CI 会话很有用 |

182| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | 设置为 `1` 以禁用基于对话上下文的自动终端标题更新。在 Agent SDK 和 `claude -p` 会话中,这也会跳过生成会话标题的后台 Haiku 请求 |191| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | 设置为 `1` 以禁用基于对话上下文的自动终端标题更新。在 Agent SDK 和 `claude -p` 会话中,这也会跳过生成会话标题的后台 Haiku 请求 |

183| `CLAUDE_CODE_DISABLE_THINKING` | 设置为 `1` 以强制禁用[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking),无论模型支持或其他设置如何。比 `MAX_THINKING_TOKENS=0` 更直接 |192| `CLAUDE_CODE_DISABLE_THINKING` | 设置为 `1` 以从 API 请求中完全省略 `thinking` 参数。这是代理和网关拒绝该参数的兼容性选项。在默认思考的模型上,省略该参数意味着模型仍可能思考。要在 Anthropic API 上明确禁用[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking),请改用 `MAX_THINKING_TOKENS=0`,这在 Fable 5 上也无效,因为它无法关闭思考。在[第三方提供商](/zh-CN/third-party-integrations)上,`0` 同样省略该参数,因此两个变量在那里的行为相同 |

184| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | 设置为 `1` 以禁用[全屏渲染](/zh-CN/fullscreen)中的虚拟滚动并渲染转录中的每条消息。如果全屏模式中的滚动显示应该出现消息的空白区域,请使用此选项 |193| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | 设置为 `1` 以禁用[全屏渲染](/zh-CN/fullscreen)中的虚拟滚动并渲染转录中的每条消息。如果全屏模式中的滚动显示应该出现消息的空白区域,请使用此选项 |

185| `CLAUDE_CODE_DISABLE_WORKFLOWS` | 设置为 `1` 以禁用[工作流](/zh-CN/workflows#turn-workflows-off)。等同于 [`disableWorkflows`](/zh-CN/settings#available-settings) 设置 |194| `CLAUDE_CODE_DISABLE_WORKFLOWS` | 设置为 `1` 以禁用[工作流](/zh-CN/workflows#turn-workflows-off)。等同于 [`disableWorkflows`](/zh-CN/settings#available-settings) 设置 |

186| `CLAUDE_CODE_EFFORT_LEVEL` | 为支持的模型设置努力级别。值:`low`、`medium`、`high`、`xhigh`、`max` 或 `auto` 以使用模型默认值。可用级别取决于模型。优先于 `/effort` 和 `effortLevel` 设置。请参阅[调整努力级别](/zh-CN/model-config#adjust-effort-level) |195| `CLAUDE_CODE_EFFORT_LEVEL` | 为支持的模型设置努力级别。值:`low`、`medium`、`high`、`xhigh`、`max` 或 `auto` 以使用模型默认值。可用级别取决于模型。优先于 `/effort` 和 `effortLevel` 设置。请参阅[调整努力级别](/zh-CN/model-config#adjust-effort-level) |


198| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 以启用[代理团队](/zh-CN/agent-teams)。代理团队是实验性的,默认禁用 |207| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 以启用[代理团队](/zh-CN/agent-teams)。代理团队是实验性的,默认禁用 |

199| `CLAUDE_CODE_EXTRA_BODY` | JSON 对象以合并到每个 API 请求体的顶级。对于传递 Claude Code 不直接公开的提供商特定参数很有用 |208| `CLAUDE_CODE_EXTRA_BODY` | JSON 对象以合并到每个 API 请求体的顶级。对于传递 Claude Code 不直接公开的提供商特定参数很有用 |

200| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 覆盖文件读取的默认令牌限制。当您需要完整读取较大文件时很有用 |209| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 覆盖文件读取的默认令牌限制。当您需要完整读取较大文件时很有用 |

210| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | 设置为 `1` 以强制转录持久化、提示历史和 `claude agents` 注册,即使此 `claude` 是从另一个 Claude Code 会话内启动的。当继承的 `CLAUDE_CODE_CHILD_SESSION` 值(例如来自 Claude Code 的 Bash 工具首次启动的 tmux 服务器)导致真正的顶级会话被误分类为嵌套时使用。也在 v2.1.169 及更早版本上受尊重;对 v2.1.170 和 v2.1.171 无效,其中它覆盖的嵌套会话检测被移除 |

201| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | 设置为 `1` 以在您的终端支持但未自动检测到时强制启用 DEC 私有模式 2026 [同步输出](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)。对于实现 BSU/ESU 但不回复能力探针的模拟器(如 Emacs `eat`)很有用。在 tmux 下无效 |211| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | 设置为 `1` 以在您的终端支持但未自动检测到时强制启用 DEC 私有模式 2026 [同步输出](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)。对于实现 BSU/ESU 但不回复能力探针的模拟器(如 Emacs `eat`)很有用。在 tmux 下无效 |

202| `CLAUDE_CODE_FORK_SUBAGENT` | 设置为 `1` 以使[分叉 subagents](/zh-CN/sub-agents#fork-the-current-conversation)成为模型的默认值Claude 生成一个分叉,一个继承完整对话上下文而不是从头开始的 subagent,每当它会以其他方式使用通用 subagent 时,所有 subagent 生成在后台运行。显式 [`/fork`](/zh-CN/commands) 命令无需此变量即可工作。在交互模式和通过 SDK 或 `claude -p` 中工作 |212| `CLAUDE_CODE_FORK_SUBAGENT` | 设置为 `1` 以使[分叉 subagents](/zh-CN/sub-agents#fork-the-current-conversation)成为模型的默认值,或 `0` 以禁用它们,覆盖任何服务器端推出。启用后,Claude 生成一个分叉,一个继承完整对话上下文而不是从头开始的 subagent,每当它会以其他方式使用通用 subagent 时,所有 subagent 生成在后台运行。显式 [`/fork`](/zh-CN/commands) 命令无需此变量即可工作。在交互模式和通过 SDK 或 `claude -p` 中工作 |

203| `CLAUDE_CODE_GIT_BASH_PATH` | 仅限 Windows:Git Bash 可执行文件 (`bash.exe`) 的路径。当 Git Bash 已安装但不在您的 PATH 中时使用。请参阅 [Windows 设置](/zh-CN/setup#set-up-on-windows) |213| `CLAUDE_CODE_GIT_BASH_PATH` | 仅限 Windows:Git Bash 可执行文件 (`bash.exe`) 的路径。当 Git Bash 已安装但不在您的 PATH 中时使用。请参阅 [Windows 设置](/zh-CN/setup#set-up-on-windows) |

204| `CLAUDE_CODE_GLOB_HIDDEN` | 设置为 `false` 以在 Claude 调用 [Glob 工具](/zh-CN/tools-reference#glob-tool-behavior)时从结果中排除点文件。默认包含。不影响 `@` 文件自动完成、`ls`、Grep 或 Read |214| `CLAUDE_CODE_GLOB_HIDDEN` | 设置为 `false` 以在 Claude 调用 [Glob 工具](/zh-CN/tools-reference#glob-tool-behavior)时从结果中排除点文件。默认包含。不影响 `@` 文件自动完成、`ls`、Grep 或 Read |

205| `CLAUDE_CODE_GLOB_NO_IGNORE` | 设置为 `false` 以使 [Glob 工具](/zh-CN/tools-reference#glob-tool-behavior)尊重 `.gitignore` 模式。默认情况下,Glob 返回所有匹配的文件,包括被 gitignore 的文件。不影响 `@` 文件自动完成,它有自己的 [`respectGitignore` 设置](/zh-CN/settings#available-settings) |215| `CLAUDE_CODE_GLOB_NO_IGNORE` | 设置为 `false` 以使 [Glob 工具](/zh-CN/tools-reference#glob-tool-behavior)尊重 `.gitignore` 模式。默认情况下,Glob 返回所有匹配的文件,包括被 gitignore 的文件。不影响 `@` 文件自动完成,它有自己的 [`respectGitignore` 设置](/zh-CN/settings#available-settings) |


239| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在[云会话](/zh-CN/claude-code-on-the-web)中自动设置为当前会话的 ID。读取此值以构造返回会话转录的链接。请参阅[将工件链接回会话](/zh-CN/claude-code-on-the-web#link-artifacts-back-to-the-session) |249| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在[云会话](/zh-CN/claude-code-on-the-web)中自动设置为当前会话的 ID。读取此值以构造返回会话转录的链接。请参阅[将工件链接回会话](/zh-CN/claude-code-on-the-web#link-artifacts-back-to-the-session) |

240| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 以在上一个会话在中途结束时自动恢复。在 SDK 模式中使用,以便模型继续而无需 SDK 重新发送提示 |250| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 以在上一个会话在中途结束时自动恢复。在 SDK 模式中使用,以便模型继续而无需 SDK 重新发送提示 |

241| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖在恢复在中途结束的会话时注入的继续消息。默认为 `Continue from where you left off.`。长时间运行的代理的生成脚本可以将其设置为更具指导性的启动消息。空字符串使用默认值 |251| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖在恢复在中途结束的会话时注入的继续消息。默认为 `Continue from where you left off.`。长时间运行的代理的生成脚本可以将其设置为更具指导性的启动消息。空字符串使用默认值 |

252| `CLAUDE_CODE_SAFE_MODE` | 设置为 `1` 以在安全模式下启动:CLAUDE.md、skills、plugins、hooks、MCP 服务器、自定义命令和代理、输出样式、工作流、自定义主题、自定义快捷键、状态行和文件建议命令、LSP 服务器和自动内存不加载,用于排除故障的破损配置。托管设置策略仍然适用,包括策略配置的 hooks、状态行和文件建议命令;托管插件、托管 skills、托管 CLAUDE.md 和策略配置的 MCP 服务器不适用。等同于传递 [`--safe-mode`](/zh-CN/cli-reference#cli-flags)。直接生成的子进程继承该变量 |

242| `CLAUDE_CODE_SCRIPT_CAPS` | JSON 对象,当设置 `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` 时限制特定脚本在每个会话中可以调用的次数。键是与命令文本匹配的子字符串;值是整数调用限制。例如,`{"deploy.sh": 2}` 允许 `deploy.sh` 最多被调用两次。匹配是基于子字符串的,所以 shell 扩展技巧如 `./scripts/deploy.sh $(evil)` 仍然计入上限。通过 `xargs` 或 `find -exec` 的运行时扇出不被检测;这是一个深度防御控制 |253| `CLAUDE_CODE_SCRIPT_CAPS` | JSON 对象,当设置 `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` 时限制特定脚本在每个会话中可以调用的次数。键是与命令文本匹配的子字符串;值是整数调用限制。例如,`{"deploy.sh": 2}` 允许 `deploy.sh` 最多被调用两次。匹配是基于子字符串的,所以 shell 扩展技巧如 `./scripts/deploy.sh $(evil)` 仍然计入上限。通过 `xargs` 或 `find -exec` 的运行时扇出不被检测;这是一个深度防御控制 |

243| `CLAUDE_CODE_SCROLL_SPEED` | 在[全屏渲染](/zh-CN/fullscreen)中设置鼠标滚轮滚动倍数。接受 1 到 20 的值。设置为 `3` 以匹配 `vim`(如果您的终端每个刻度线发送一个滚轮事件而不进行放大)。在 JetBrains IDE 终端中被忽略,Claude Code 使用其自己的滚动处理 |254| `CLAUDE_CODE_SCROLL_SPEED` | 在[全屏渲染](/zh-CN/fullscreen#mouse-wheel-scrolling)中设置鼠标滚轮滚动倍数。接受 1 到 20 的值,以及低于 1 的分数值(如 `0.5`)以减慢终端上原生滚动路径中加速的触控板和滚轮滚动。设置为 `3` 以匹配 `vim`(如果您的终端每个刻度线发送一个滚轮事件而不进行放大)。在 JetBrains IDE 终端中被忽略,Claude Code 使用其自己的滚动处理 |

244| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | [SessionEnd](/zh-CN/hooks#sessionend) hooks 的时间预算(以毫秒为单位)。适用于会话退出、`/clear` 和通过交互式 `/resume` 切换会话。默认预算为 1.5 秒,自动提高到设置文件中配置的最高每个 hook `timeout`,最高 60 秒。插件提供的 hooks 上的超时不会提高预算 |255| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | [SessionEnd](/zh-CN/hooks#sessionend) hooks 的时间预算(以毫秒为单位)。适用于会话退出、`/clear` 和通过交互式 `/resume` 切换会话。默认预算为 1.5 秒,自动提高到设置文件中配置的最高每个 hook `timeout`,最高 60 秒。插件提供的 hooks 上的超时不会提高预算 |

245| `CLAUDE_CODE_SESSION_ID` | 在 Bash 和 PowerShell 工具子进程中自动设置为当前会话 ID,[hook 命令](/zh-CN/hooks)子进程和 stdio [MCP server](/zh-CN/mcp) 子进程。对于 Bash、PowerShell 和 hooks,这与传递给 [hooks](/zh-CN/hooks) 的 `session_id` 字段匹配,并在 `/clear` 时更新。MCP 服务器子进程保留它生成时的 ID,并在通过 `--resume` `--continue` 启动时可能接收初始启动 ID 而不是恢复的 ID。用于将脚本和外部工具与启动它们的 Claude Code 会话相关联 |256| `CLAUDE_CODE_SESSION_ID` | 在 Bash 和 PowerShell 工具子进程中自动设置为当前会话 ID,[hook 命令](/zh-CN/hooks)子进程和 stdio [MCP server](/zh-CN/mcp) 子进程。对于 Bash、PowerShell 和 hooks,这与传递给 [hooks](/zh-CN/hooks) 的 `session_id` 字段匹配,并在 `/clear` 时更新。MCP 服务器子进程保留它生成时的 ID。在 `--resume <session-id>` 上它接收恢复的 ID,与 hooks 和 Bash 匹配。在 `--continue` `--resume` 没有显式 ID 时它可能接收初始启动 ID。用于将脚本和外部工具与启动它们的 Claude Code 会话相关联 |

246| `CLAUDE_CODE_SHELL` | 覆盖自动 shell 检测。当您的登录 shell 与您的首选工作 shell 不同时很有用(例如,`bash` 与 `zsh`) |257| `CLAUDE_CODE_SHELL` | 覆盖自动 shell 检测。当您的登录 shell 与您的首选工作 shell 不同时很有用(例如,`bash` 与 `zsh`) |

247| `CLAUDE_CODE_SHELL_PREFIX` | 命令前缀以包装 Claude Code 生成的所有 bash 命令:Bash 工具调用、[hook](/zh-CN/hooks) 命令和 stdio [MCP server](/zh-CN/mcp) 启动命令。对于日志记录或审计很有用。示例:设置 `/path/to/logger.sh` 将每个命令作为 `/path/to/logger.sh <command>` 运行 |258| `CLAUDE_CODE_SHELL_PREFIX` | 命令前缀以包装 Claude Code 生成的 shell 命令:Bash 工具调用、[hook](/zh-CN/hooks) 命令、[状态行](/zh-CN/statusline)命令和 stdio [MCP server](/zh-CN/mcp) 启动命令。PowerShell hooks 和 exec 形式的 hooks 运行时不带前缀。对于日志记录或审计很有用。设置裸可执行文件路径如 `/path/to/logger.sh` 将每个命令作为 `/path/to/logger.sh '<command>'` 运行。包装器在 `$1` 中接收命令行作为单个 shell 引用的参数,因此包装器必须使用 shell 重新评估 `$1`,例如 `exec bash -c "$1"`。将 `$1` 视为裸可执行文件路径会破坏传递参数的 stdio MCP 服务器,如 `npx -y <package>`。对于 Bash 工具调用,`$1` 包含 Claude Code 组装的完整 shell 调用,包括环境设置,而不仅仅是 Claude 运行的命令 |

248| `CLAUDE_CODE_SIMPLE` | 设置为 `1` 以使用最小系统提示和仅 Bash、文件读取和文件编辑工具运行。MCP 工具来自 `--mcp-config` 仍然可用。禁用 hooks、skills、plugins、MCP servers、自动内存和 CLAUDE.md 的自动发现。OAuth 令牌和钥匙链凭证不被读取,所以 Anthropic 身份验证必须来自 `ANTHROPIC_API_KEY` 或 `--settings` 中的 `apiKeyHelper`。等同于传递 [`--bare`](/zh-CN/headless#start-faster-with-bare-mode) |259| `CLAUDE_CODE_SIMPLE` | 设置为 `1` 以使用最小系统提示和仅 Bash、文件读取和文件编辑工具运行。MCP 工具来自 `--mcp-config` 仍然可用。禁用 hooks、skills、plugins、MCP servers、自动内存和 CLAUDE.md 的自动发现。OAuth 令牌和钥匙链凭证不被读取,所以 Anthropic 身份验证必须来自 `ANTHROPIC_API_KEY` 或 `--settings` 中的 `apiKeyHelper`。等同于传递 [`--bare`](/zh-CN/headless#start-faster-with-bare-mode) |

249| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | 设置为 `1` 以在任何模型上使用较短的系统提示和缩写的工具描述。设置为 `0`、`false`、`no` 或 `off` 以选择退出,即使在实验或服务器配置会以其他方式启用它的模型上。完整的工具集、hooks、MCP 服务器和 CLAUDE.md 发现保持启用 |260| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | 设置为 `1` 以在任何模型上使用较短的系统提示和缩写的工具描述。设置为 `0`、`false`、`no` 或 `off` 以选择退出,即使在实验或服务器配置会以其他方式启用它的模型上。完整的工具集、hooks、MCP 服务器和 CLAUDE.md 发现保持启用 |

250| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | 跳过 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 的客户端身份验证,用于自己签署请求的网关 |261| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | 跳过 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 的客户端身份验证,用于自己签署请求的网关 |


258| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | 设置为 `1` 以从子进程环境(Bash 工具、hooks、MCP stdio 服务器)中删除 Anthropic 和云提供商凭证。父 Claude 进程为 API 调用保留这些凭证,但子进程无法读取它们,减少了通过 shell 扩展尝试窃取机密的提示注入攻击的暴露。在 Linux 上,这也在隔离的 PID 命名空间中运行 Bash 子进程,以便它们无法通过 `/proc` 读取主机进程环境;作为副作用,`ps`、`pgrep` 和 `kill` 无法看到或信号主机进程。当配置了 `allowed_non_write_users` 时,`claude-code-action` 会自动设置此选项 |269| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | 设置为 `1` 以从子进程环境(Bash 工具、hooks、MCP stdio 服务器)中删除 Anthropic 和云提供商凭证。父 Claude 进程为 API 调用保留这些凭证,但子进程无法读取它们,减少了通过 shell 扩展尝试窃取机密的提示注入攻击的暴露。在 Linux 上,这也在隔离的 PID 命名空间中运行 Bash 子进程,以便它们无法通过 `/proc` 读取主机进程环境;作为副作用,`ps`、`pgrep` 和 `kill` 无法看到或信号主机进程。当配置了 `allowed_non_write_users` 时,`claude-code-action` 会自动设置此选项 |

259| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 设置为 `1` 在非交互模式(`-p` 标志)中等待插件安装完成后再进行第一个查询。没有这个,插件在后台安装,可能在第一个回合不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合以限制等待时间 |270| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 设置为 `1` 在非交互模式(`-p` 标志)中等待插件安装完成后再进行第一个查询。没有这个,插件在后台安装,可能在第一个回合不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合以限制等待时间 |

260| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(以毫秒为单位)。超过时,Claude Code 继续而不使用插件并记录错误。无默认值:没有此变量,同步安装会等待直到完成 |271| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(以毫秒为单位)。超过时,Claude Code 继续而不使用插件并记录错误。无默认值:没有此变量,同步安装会等待直到完成 |

261| `CLAUDE_CODE_SYNC_SKILLS` | 设置为 `1` 以在第一个查询之前将您启用的 claude.ai skills 下载到 `~/.claude/skills/` 中,并每 10 分钟重新同步一次。仅适用于非交互模式,带有 `-p` 标志。[Claude Code on the web](/zh-CN/claude-code-on-the-web) 会话中自动设置。需要 claude.ai 身份验证 |272| `CLAUDE_CODE_SYNC_SKILLS` | 设置为 `1` 以在第一个查询之前将您启用的 claude.ai skills 下载到 `~/.claude/skills/` 中,并每 10 分钟重新同步一次。仅适用于非交互模式,带有 `-p` 标志。需要 claude.ai 身份验证。[Claude Code on the web](/zh-CN/claude-code-on-the-web) 会话自动接收您启用的 claude.ai skills;您不需要在那里设置此选项 |

273| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | 当设置 `CLAUDE_CODE_SYNC_SKILLS` 时,中会话 skills 重新同步的超时时间(以毫秒为单位)(默认值:30000)。限制在主机请求 skill 重新加载期间触发的下载。超过时,重新同步停止,剩余下载在后台继续 |

262| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 当设置 `CLAUDE_CODE_SYNC_SKILLS` 时,第一个查询等待初始 skills 同步的超时时间(以毫秒为单位)(默认值:5000)。超过时,查询继续进行,剩余的 skill 下载在后台继续 |274| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 当设置 `CLAUDE_CODE_SYNC_SKILLS` 时,第一个查询等待初始 skills 同步的超时时间(以毫秒为单位)(默认值:5000)。超过时,查询继续进行,剩余的 skill 下载在后台继续 |

263| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 以禁用 diff 输出中的语法突出显示。当颜色干扰您的终端设置时很有用。要同时禁用代码块和文件预览中的突出显示,请使用 [`syntaxHighlightingDisabled`](/zh-CN/settings) 设置 |275| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 以禁用 diff 输出中的语法突出显示。当颜色干扰您的终端设置时很有用。要同时禁用代码块和文件预览中的突出显示,请使用 [`syntaxHighlightingDisabled`](/zh-CN/settings) 设置 |

264| `CLAUDE_CODE_TASK_LIST_ID` | 跨会话共享任务列表。在多个 Claude Code 实例中设置相同的 ID 以协调共享任务列表。请参阅[任务列表](/zh-CN/interactive-mode#task-list) |276| `CLAUDE_CODE_TASK_LIST_ID` | 跨会话共享任务列表。在多个 Claude Code 实例中设置相同的 ID 以协调共享任务列表。请参阅[任务列表](/zh-CN/interactive-mode#task-list) |

265| `CLAUDE_CODE_TEAM_NAME` | 此队友所属的代理团队的名称。在[代理团队](/zh-CN/agent-teams)成员上自动设置 |277| `CLAUDE_CODE_TEAM_NAME` | 此队友所属的代理团队的名称。在[代理团队](/zh-CN/agent-teams)成员上自动设置 |

266| `CLAUDE_CODE_TMPDIR` | 覆盖用于内部临时文件的临时目录。Claude Code 将 `/claude-{uid}/`(Unix)或 `/claude/`(Windows)附加到此路径。默认值:macOS 上为 `/tmp`,Linux/Windows 上为 `os.tmpdir()`。从 v2.1.161 开始,在 macOS 和 Linux 上,当您的覆盖是长路径时,Bash 子进程会在系统默认值下接收短回退 `$TMPDIR`,因为某些工具在临时路径过长时会失败。Claude Code 自己的临时文件始终使用您的覆盖 |278| `CLAUDE_CODE_TMPDIR` | 覆盖用于内部临时文件的临时目录。Claude Code 将 `/claude-{uid}/`(Unix)或 `/claude/`(Windows)附加到此路径。默认值:macOS 上为 `/tmp`,Linux/Windows 上为 `os.tmpdir()`。从 v2.1.161 开始,在 macOS 和 Linux 上,[沙箱化](/zh-CN/sandboxing) Bash 子进程在系统默认值下接收短回退 `$TMPDIR`,当您的覆盖是长路径时,因为某些工具在临时路径过长时会失败。未沙箱化的 Bash 命令继承您的 shell 的 `$TMPDIR` 不变。Claude Code 自己的临时文件始终使用您的覆盖 |

267| `CLAUDE_CODE_TMUX_TRUECOLOR` | 设置为 `1` 以允许 tmux 内的 24 位真彩色输出。默认情况下,当设置 `$TMUX` 时,Claude Code 限制为 256 色,因为 tmux 不会通过真彩色转义序列,除非配置为这样做。在将 `set -ga terminal-overrides ',*:Tc'` 添加到您的 `~/.tmux.conf` 后设置此选项。请参阅[终端配置](/zh-CN/terminal-config)了解其他 tmux 设置 |279| `CLAUDE_CODE_TMUX_TRUECOLOR` | 设置为 `1` 以允许 tmux 内的 24 位真彩色输出。默认情况下,当设置 `$TMUX` 时,Claude Code 限制为 256 色,因为 tmux 不会通过真彩色转义序列,除非配置为这样做。在将 `set -ga terminal-overrides ',*:Tc'` 添加到您的 `~/.tmux.conf` 后设置此选项。请参阅[终端配置](/zh-CN/terminal-config)了解其他 tmux 设置 |

268| `CLAUDE_CODE_USE_ANTHROPIC_AWS` | 使用 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) |280| `CLAUDE_CODE_USE_ANTHROPIC_AWS` | 使用 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) |

269| `CLAUDE_CODE_USE_BEDROCK` | 使用 [Bedrock](/zh-CN/amazon-bedrock) |281| `CLAUDE_CODE_USE_BEDROCK` | 使用 [Bedrock](/zh-CN/amazon-bedrock) |


274| `CLAUDE_CODE_USE_VERTEX` | 使用 [Vertex](/zh-CN/google-vertex-ai) |286| `CLAUDE_CODE_USE_VERTEX` | 使用 [Vertex](/zh-CN/google-vertex-ai) |

275| `CLAUDE_CONFIG_DIR` | 覆盖配置目录(默认值:`~/.claude`)。所有设置、凭证、会话历史和插件都存储在此路径下。对于并行运行多个帐户很有用:例如,`alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |287| `CLAUDE_CONFIG_DIR` | 覆盖配置目录(默认值:`~/.claude`)。所有设置、凭证、会话历史和插件都存储在此路径下。对于并行运行多个帐户很有用:例如,`alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

276| `CLAUDE_EFFORT` | 在 Bash 工具子进程和 hook 命令中自动设置为该转换的活动[努力级别](/zh-CN/model-config#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。Ultracode 不是一个不同的级别,报告为 `xhigh`。与传递给 [hooks](/zh-CN/hooks) 的 `effort.level` 字段匹配。仅在当前模型支持努力参数时设置 |288| `CLAUDE_EFFORT` | 在 Bash 工具子进程和 hook 命令中自动设置为该转换的活动[努力级别](/zh-CN/model-config#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。Ultracode 不是一个不同的级别,报告为 `xhigh`。与传递给 [hooks](/zh-CN/hooks) 的 `effort.level` 字段匹配。仅在当前模型支持努力参数时设置 |

277| `CLAUDE_ENABLE_BYTE_WATCHDOG` | 设置为 `1` 以强制启用字节级流式空闲监视程序,或设置为 `0` 以强制禁用它。未设置时,监视程序对 Anthropic API 连接默认启用。字节监视程序在 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 设置的持续时间内没有字节到达线路时中止连接,最少 5 分钟,独立于事件级监视程序 |289| `CLAUDE_ENABLE_BYTE_WATCHDOG` | 设置为 `1` 以强制启用字节级流式空闲监视程序,或设置为 `0` 以强制禁用它。未设置时,监视程序对 Anthropic API 和 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 连接默认启用。字节监视程序在 180 秒(直接 Anthropic API 连接)、300 秒(Claude Platform on AWS 和其他提供商)或 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 设置的值(限制为最少 5 分钟)内没有字节到达线路时中止连接,独立于事件级监视程序 |

278| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | 设置为 `1` 以在 Amazon Bedrock `vnd.amazon.eventstream` 响应上启用字节级流式空闲监视程序。默认关闭。使用 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 配置超时 |290| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | 设置为 `1` 以在 Amazon Bedrock `vnd.amazon.eventstream` 响应上启用字节级流式空闲监视程序。默认关闭。使用 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 配置超时 |

279| `CLAUDE_ENABLE_STREAM_WATCHDOG` | 设置为 `1` 以启用事件级流式空闲监视程序。默认关闭对于所有提供商包括 Bedrock对于 VertexFoundry这是唯一可用的空闲监视程序。在 Bedrock 上,您也可以使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` 启用独立的字节级监视程序;当两者都设置时,它们一起运行。使用 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 配置超时 |291| `CLAUDE_ENABLE_STREAM_WATCHDOG` | 设置为 `1` 以强制启用事件级流式空闲监视程序,或设置为 `0` 以强制禁用它未设置时默认值在直接 Anthropic API 上由服务器控制,在其他提供商上关闭 v2.1.169 开始,直接 Anthropic API Claude Platform on AWS 以外的提供商也有默认启用的 5 分钟体空闲超时独立于此变量;请参阅 `API_FORCE_IDLE_TIMEOUT`。在 Bedrock 上,您也可以使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` 启用独立的字节级监视程序;当两者都设置时,它们一起运行。使用 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 配置超时 |

280| `CLAUDE_ENV_FILE` | Claude Code 在每个 Bash 命令之前在同一 shell 进程中运行的 shell 脚本的路径,因此文件中的导出对命令可见。用于在命令之间保持 virtualenv 或 conda 激活。也由 [SessionStart](/zh-CN/hooks#persist-environment-variables)、[Setup](/zh-CN/hooks#setup)、[CwdChanged](/zh-CN/hooks#cwdchanged) 和 [FileChanged](/zh-CN/hooks#filechanged) hooks 动态填充 |292| `CLAUDE_ENV_FILE` | Claude Code 在每个 Bash 命令之前在同一 shell 进程中运行的 shell 脚本的路径,因此文件中的导出对命令可见。用于在命令之间保持 virtualenv 或 conda 激活。也由 [SessionStart](/zh-CN/hooks#persist-environment-variables)、[Setup](/zh-CN/hooks#setup)、[CwdChanged](/zh-CN/hooks#cwdchanged) 和 [FileChanged](/zh-CN/hooks#filechanged) hooks 动态填充 |

281| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | 当未提供显式名称时,自动生成的[远程控制](/zh-CN/remote-control)会话名称的前缀。默认为您的机器的主机名,生成名称如 `myhost-graceful-unicorn`。`--remote-control-session-name-prefix` CLI 标志为单个调用设置相同的值 |293| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | 当未提供显式名称时,自动生成的[远程控制](/zh-CN/remote-control)会话名称的前缀。默认为您的机器的主机名,生成名称如 `myhost-graceful-unicorn`。`--remote-control-session-name-prefix` CLI 标志为单个调用设置相同的值 |

282| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | 流式空闲监视程序关闭停滞连接前的超时(以毫秒为单位)。默认和最小 `300000`(5 分钟)对于字节级和事件级监视程序;较低的值被静默限制以吸收扩展思考暂停和代理缓冲。对于第三方提供商,需要 `CLAUDE_ENABLE_STREAM_WATCHDOG=1`。在 Bedrock 上,也在 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 时应用 |294| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | 流式空闲监视程序关闭停滞连接前的超时(以毫秒为单位)。当您明确设置此变量时,最小值为 `300000`(5 分钟);较低的值被静默限制以吸收扩展思考暂停和代理缓冲。未设置时事件级监视程序默认为 300 秒,字节级监视程序在直接 Anthropic API 连接上默认为 180 秒(Claude Platform on AWS 和其他提供商上为 300 秒)。未设置的 180 秒字节监视程序默认值是一个单独的值,不受 5 分钟限制。对于第三方提供商上的事件级监视程序,需要 `CLAUDE_ENABLE_STREAM_WATCHDOG=1`;`API_FORCE_IDLE_TIMEOUT` 下描述的体空闲超时独立应用。在 Bedrock 上,也在 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 时应用 |

283| `DEBUG` | 设置为 `1` 以启用调试模式,等同于使用 [`--debug`](/zh-CN/cli-reference#cli-flags) 启动。调试日志写入 `~/.claude/debug/<session-id>.txt`,或写入 `CLAUDE_CODE_DEBUG_LOGS_DIR` 设置的路径。仅真值 `1`、`true`、`yes` 和 `on` 启用调试模式,因此为其他工具设置的命名空间模式如 `DEBUG=express:*` 不会触发它 |295| `DEBUG` | 设置为 `1` 以启用调试模式,等同于使用 [`--debug`](/zh-CN/cli-reference#cli-flags) 启动。调试日志写入 `~/.claude/debug/<session-id>.txt`,或写入 `CLAUDE_CODE_DEBUG_LOGS_DIR` 设置的路径。仅真值 `1`、`true`、`yes` 和 `on` 启用调试模式,因此为其他工具设置的命名空间模式如 `DEBUG=express:*` 不会触发它 |

284| `DISABLE_AUTOUPDATER` | 设置为 `1` 以禁用自动后台更新。手动 `claude update` 仍然有效。使用 `DISABLE_UPDATES` 以阻止两者 |296| `DISABLE_AUTOUPDATER` | 设置为 `1` 以禁用自动后台更新。手动 `claude update` 仍然有效。使用 `DISABLE_UPDATES` 以阻止两者 |

285| `DISABLE_AUTO_COMPACT` | 设置为 `1` 以禁用接近上下文限制时的自动压缩。手动 `/compact` 命令仍然可用。当您想要明确控制何时进行压缩时使用 |297| `DISABLE_AUTO_COMPACT` | 设置为 `1` 以禁用接近上下文限制时的自动压缩。手动 `/compact` 命令仍然可用。当您想要明确控制何时进行压缩时使用 |


296| `DISABLE_LOGIN_COMMAND` | 设置为 `1` 以隐藏 `/login` 命令。当身份验证通过 API 密钥或 `apiKeyHelper` 外部处理时很有用 |308| `DISABLE_LOGIN_COMMAND` | 设置为 `1` 以隐藏 `/login` 命令。当身份验证通过 API 密钥或 `apiKeyHelper` 外部处理时很有用 |

297| `DISABLE_LOGOUT_COMMAND` | 设置为 `1` 以隐藏 `/logout` 命令 |309| `DISABLE_LOGOUT_COMMAND` | 设置为 `1` 以隐藏 `/logout` 命令 |

298| `DISABLE_PROMPT_CACHING` | 设置为 `1` 以禁用所有模型的 prompt caching(优先于每个模型的设置) |310| `DISABLE_PROMPT_CACHING` | 设置为 `1` 以禁用所有模型的 prompt caching(优先于每个模型的设置) |

311| `DISABLE_PROMPT_CACHING_FABLE` | 设置为 `1` 以禁用 Fable 模型的 prompt caching |

299| `DISABLE_PROMPT_CACHING_HAIKU` | 设置为 `1` 以禁用 Haiku 模型的 prompt caching |312| `DISABLE_PROMPT_CACHING_HAIKU` | 设置为 `1` 以禁用 Haiku 模型的 prompt caching |

300| `DISABLE_PROMPT_CACHING_OPUS` | 设置为 `1` 以禁用 Opus 模型的 prompt caching |313| `DISABLE_PROMPT_CACHING_OPUS` | 设置为 `1` 以禁用 Opus 模型的 prompt caching |

301| `DISABLE_PROMPT_CACHING_SONNET` | 设置为 `1` 以禁用 Sonnet 模型的 prompt caching |314| `DISABLE_PROMPT_CACHING_SONNET` | 设置为 `1` 以禁用 Sonnet 模型的 prompt caching |


307| `ENABLE_PROMPT_CACHING_1H` | 设置为 `1` 以请求 1 小时的 prompt cache TTL 而不是默认的 5 分钟。适用于 API 密钥、[Bedrock](/zh-CN/amazon-bedrock)、[Vertex](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 和 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 用户。订阅用户自动获得 1 小时 TTL。1 小时缓存写入按更高费率计费 |320| `ENABLE_PROMPT_CACHING_1H` | 设置为 `1` 以请求 1 小时的 prompt cache TTL 而不是默认的 5 分钟。适用于 API 密钥、[Bedrock](/zh-CN/amazon-bedrock)、[Vertex](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 和 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 用户。订阅用户自动获得 1 小时 TTL。1 小时缓存写入按更高费率计费 |

308| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | 已弃用。改用 `ENABLE_PROMPT_CACHING_1H` |321| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | 已弃用。改用 `ENABLE_PROMPT_CACHING_1H` |

309| `ENABLE_TOOL_SEARCH` | 控制 [MCP 工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)。未设置:默认延迟所有 MCP 工具,但在 Vertex AI 上或当 `ANTHROPIC_BASE_URL` 指向非第一方主机时提前加载。值:`true`(始终延迟并发送 beta 标头,在 Vertex AI 上支持 Sonnet 4.5 及更高版本或 Opus 4.5 及更高版本的请求失败,或在不支持 `tool_reference` 的代理上)、`auto`(阈值模式:如果工具适合在上下文的 10% 内则提前加载)、`auto:N`(自定义阈值,例如 `auto:5` 表示 5%)、`false`(提前加载所有) |322| `ENABLE_TOOL_SEARCH` | 控制 [MCP 工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)。未设置:默认延迟所有 MCP 工具,但在 Vertex AI 上或当 `ANTHROPIC_BASE_URL` 指向非第一方主机时提前加载。值:`true`(始终延迟并发送 beta 标头,在 Vertex AI 上支持 Sonnet 4.5 及更高版本或 Opus 4.5 及更高版本的请求失败,或在不支持 `tool_reference` 的代理上)、`auto`(阈值模式:如果工具适合在上下文的 10% 内则提前加载)、`auto:N`(自定义阈值,例如 `auto:5` 表示 5%)、`false`(提前加载所有) |

310| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | 设置为任何非空值以在任何主模型上重复过载错误后触发回退到 [`--fallback-model`](/zh-CN/cli-reference#cli-flags)。默认情况下仅 Opus 模型触发回退 |323| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | 设置为任何非空值以在任何主模型上重复过载错误后触发回退。从 v2.1.160 开始,配置的[回退模型链](/zh-CN/model-config#fallback-model-chains)在任何主模型的重复过载错误时触发因此此变量不影响切换到回退模型 |

311| `FORCE_AUTOUPDATE_PLUGINS` | 设置为 `1` 以强制插件自动更新,即使主自动更新程序通过 `DISABLE_AUTOUPDATER` 禁用 |324| `FORCE_AUTOUPDATE_PLUGINS` | 设置为 `1` 以强制插件自动更新,即使主自动更新程序通过 `DISABLE_AUTOUPDATER` 禁用 |

312| `FORCE_PROMPT_CACHING_5M` | 设置为 `1` 以强制 5 分钟的 prompt cache TTL,即使 1 小时 TTL 会以其他方式应用。覆盖 `ENABLE_PROMPT_CACHING_1H` |325| `FORCE_PROMPT_CACHING_5M` | 设置为 `1` 以强制 5 分钟的 prompt cache TTL,即使 1 小时 TTL 会以其他方式应用。覆盖 `ENABLE_PROMPT_CACHING_1H` |

313| `HTTP_PROXY` | 为网络连接指定 HTTP 代理服务器 |326| `HTTP_PROXY` | 为网络连接指定 HTTP 代理服务器 |


315| `IS_DEMO` | 设置为 `1` 以启用演示模式:隐藏标头中的电子邮件和组织名称以及 `/status` 输出,并跳过入门。对于流式传输或录制会话很有用 |328| `IS_DEMO` | 设置为 `1` 以启用演示模式:隐藏标头中的电子邮件和组织名称以及 `/status` 输出,并跳过入门。对于流式传输或录制会话很有用 |

316| `MAX_MCP_OUTPUT_TOKENS` | MCP 工具响应中允许的最大令牌数。Claude Code 在输出超过 10,000 个令牌时显示警告。声明 [`anthropic/maxResultSizeChars`](/zh-CN/mcp#raise-the-limit-for-a-specific-tool) 的工具对文本内容使用该字符限制,但来自这些工具的图像内容仍受此变量约束(默认值:25000) |329| `MAX_MCP_OUTPUT_TOKENS` | MCP 工具响应中允许的最大令牌数。Claude Code 在输出超过 10,000 个令牌时显示警告。声明 [`anthropic/maxResultSizeChars`](/zh-CN/mcp#raise-the-limit-for-a-specific-tool) 的工具对文本内容使用该字符限制,但来自这些工具的图像内容仍受此变量约束(默认值:25000) |

317| `MAX_STRUCTURED_OUTPUT_RETRIES` | 当模型的响应无法针对非交互模式(`-p` 标志)中的 [`--json-schema`](/zh-CN/cli-reference#cli-flags) 进行验证时重试的次数。默认为 5 |330| `MAX_STRUCTURED_OUTPUT_RETRIES` | 当模型的响应无法针对非交互模式(`-p` 标志)中的 [`--json-schema`](/zh-CN/cli-reference#cli-flags) 进行验证时重试的次数。默认为 5 |

318| `MAX_THINKING_TOKENS` | 覆盖[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)令牌预算。上限是模型的[最大输出令牌](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison)减一。设置为 `0` 以完全禁用思考在具有[自适应推理](/zh-CN/model-config#adjust-effort-level)的模型上,除非通过 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 禁用自适应推理,否则预算被忽略 |331| `MAX_THINKING_TOKENS` | 覆盖[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)令牌预算。上限是模型的[最大输出令牌](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison)减一。设置为 `0` 以在 Anthropic API 上禁用思考,除了 Fable 5,它无法关闭思考[第三方提供商](/zh-CN/third-party-integrations)上,`0` 同样省略该参数,具有[自适应推理](/zh-CN/model-config#adjust-effort-level)的模型仍可能思考。对于非零值在自适应推理模型上预算被忽略,除非通过 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 禁用自适应推理 |

319| `MCP_CLIENT_SECRET` | 需要[预配置凭证](/zh-CN/mcp#use-pre-configured-oauth-credentials)的 MCP 服务器的 OAuth 客户端密钥。在使用 `--client-secret` 添加服务器时避免交互式提示 |332| `MCP_CLIENT_SECRET` | 需要[预配置凭证](/zh-CN/mcp#use-pre-configured-oauth-credentials)的 MCP 服务器的 OAuth 客户端密钥。在使用 `--client-secret` 添加服务器时避免交互式提示 |

320| `MCP_CONNECTION_NONBLOCKING` | 控制启动是否等待 MCP 服务器在第一个查询之前连接。从 Claude Code v2.1.142 开始,MCP 启动默认为非阻塞:服务器在后台连接,其工具在完成时变为可用。设置为 `0` 以恢复阻塞 5 秒连接等待。配置为 [`alwaysLoad: true`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器始终阻止启动,无论此变量如何,因为它们的工具必须在构建第一个提示时存在 |333| `MCP_CONNECTION_NONBLOCKING` | 控制启动是否等待 MCP 服务器在第一个查询之前连接。从 Claude Code v2.1.142 开始,MCP 启动默认为非阻塞:服务器在后台连接,其工具在完成时变为可用。设置为 `0` 以恢复阻塞 5 秒连接等待。配置为 [`alwaysLoad: true`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器始终阻止启动,无论此变量如何,因为它们的工具必须在构建第一个提示时存在 |

321| `MCP_CONNECT_TIMEOUT_MS` | 阻塞 MCP 启动等待连接批处理的时间(以毫秒为单位),然后快照工具列表(默认值:5000)。在截止时间处仍待处理的服务器继续在后台连接,但在下一个查询之前不会出现。与 `MCP_TIMEOUT` 不同,后者限制单个服务器的连接尝试 |334| `MCP_CONNECT_TIMEOUT_MS` | 阻塞 MCP 启动等待连接批处理的时间(以毫秒为单位),然后快照工具列表(默认值:5000)。在 `MCP_CONNECTION_NONBLOCKING=0` 时应用或对于标记为 [`alwaysLoad: true`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器。在截止时间处仍待处理的服务器继续在后台连接,但在下一个查询之前不会出现。与 `MCP_TIMEOUT` 不同,后者限制单个服务器的连接尝试 |

322| `MCP_OAUTH_CALLBACK_PORT` | OAuth 重定向回调的固定端口,作为在使用[预配置凭证](/zh-CN/mcp#use-pre-configured-oauth-credentials)添加 MCP 服务器时 `--callback-port` 的替代方案 |335| `MCP_OAUTH_CALLBACK_PORT` | OAuth 重定向回调的固定端口,作为在使用[预配置凭证](/zh-CN/mcp#use-pre-configured-oauth-credentials)添加 MCP 服务器时 `--callback-port` 的替代方案 |

323| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | 启动期间并行连接的远程 MCP 服务器(HTTP/SSE)的最大数量(默认值:20) |336| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | 启动期间并行连接的远程 MCP 服务器(HTTP/SSE)的最大数量(默认值:20) |

324| `MCP_SERVER_CONNECTION_BATCH_SIZE` | 启动期间并行连接的本地 MCP 服务器(stdio)的最大数量(默认值:3) |337| `MCP_SERVER_CONNECTION_BATCH_SIZE` | 启动期间并行连接的本地 MCP 服务器(stdio)的最大数量(默认值:3) |

325| `MCP_TIMEOUT` | MCP 服务器启动的超时(以毫秒为单位)(默认值:30000,或 30 秒) |338| `MCP_TIMEOUT` | MCP 服务器启动的超时(以毫秒为单位)(默认值:30000,或 30 秒) |

326| `MCP_TOOL_TIMEOUT` | MCP 工具执行的超时(以毫秒为单位)(默认值:100000000,约 28 小时)。`.mcp.json` 中的每个服务器 `timeout` 字段会覆盖该服务器的此值。低于 1000 的值被限制为一秒 |339| `MCP_TOOL_TIMEOUT` | MCP 工具执行的超时(以毫秒为单位)(默认值:100000000,约 28 小时)。`.mcp.json` 中的每个服务器 `timeout` 字段会覆盖该服务器的此值。对于 env 变量,低于 1000 的值被限制为一秒;对于每个服务器字段,低于 1000 的值被忽略 |

327| `NO_PROXY` | 域和 IP 列表,对其的请求将直接发出,绕过代理 |340| `NO_PROXY` | 域和 IP 列表,对其的请求将直接发出,绕过代理 |

328| `OTEL_LOG_RAW_API_BODIES` | 设置为 `1` 以将完整的 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件发出,或 `file:<dir>` 以将未截断的主体写入磁盘并发出 `body_ref` 路径。默认禁用;主体包括整个对话历史。请参阅[监控](/zh-CN/monitoring-usage#api-request-body-event) |341| `OTEL_LOG_RAW_API_BODIES` | 设置为 `1` 以将完整的 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件发出,截断为 60 KB,或 `file:<dir>` 以将未截断的主体写入磁盘并发出 `body_ref` 路径。默认禁用;主体包括整个对话历史。请参阅[监控](/zh-CN/monitoring-usage#api-request-body-event) |

329| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 以在 OpenTelemetry span 事件中包含工具输入和输出内容。默认禁用以保护敏感数据。请参阅[监控](/zh-CN/monitoring-usage) |342| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 以在 OpenTelemetry span 事件中包含工具输入和输出内容。默认禁用以保护敏感数据。请参阅[监控](/zh-CN/monitoring-usage) |

330| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含工具输入参数、MCP 服务器名称、工具失败时的原始错误字符串和其他工具详情。默认禁用以保护 PII。请参阅[监控](/zh-CN/monitoring-usage) |343| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含工具输入参数、MCP 服务器名称、工具失败时的原始错误字符串和其他工具详情。默认禁用以保护 PII。请参阅[监控](/zh-CN/monitoring-usage) |

331| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。请参阅[监控](/zh-CN/monitoring-usage) |344| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。请参阅[监控](/zh-CN/monitoring-usage) |


348| `VERTEX_REGION_CLAUDE_4_6_OPUS` | 使用 Vertex AI 时覆盖 Claude Opus 4.6 的区域 |361| `VERTEX_REGION_CLAUDE_4_6_OPUS` | 使用 Vertex AI 时覆盖 Claude Opus 4.6 的区域 |

349| `VERTEX_REGION_CLAUDE_4_6_SONNET` | 使用 Vertex AI 时覆盖 Claude Sonnet 4.6 的区域 |362| `VERTEX_REGION_CLAUDE_4_6_SONNET` | 使用 Vertex AI 时覆盖 Claude Sonnet 4.6 的区域 |

350| `VERTEX_REGION_CLAUDE_4_7_OPUS` | 使用 Vertex AI 时覆盖 Claude Opus 4.7 的区域。在 v2.1.111 中添加 |363| `VERTEX_REGION_CLAUDE_4_7_OPUS` | 使用 Vertex AI 时覆盖 Claude Opus 4.7 的区域。在 v2.1.111 中添加 |

364| `VERTEX_REGION_CLAUDE_4_8_OPUS` | 使用 Vertex AI 时覆盖 Claude Opus 4.8 的区域。在 v2.1.154 中添加 |

365| `VERTEX_REGION_CLAUDE_FABLE_5` | 使用 Vertex AI 时覆盖 Claude Fable 5 的区域。在 v2.1.170 中添加 |

351| `VERTEX_REGION_CLAUDE_HAIKU_4_5` | 使用 Vertex AI 时覆盖 Claude Haiku 4.5 的区域 |366| `VERTEX_REGION_CLAUDE_HAIKU_4_5` | 使用 Vertex AI 时覆盖 Claude Haiku 4.5 的区域 |

352 367 

353标准 OpenTelemetry 导出器变量(`OTEL_METRICS_EXPORTER`、`OTEL_LOGS_EXPORTER`、`OTEL_EXPORTER_OTLP_ENDPOINT`、`OTEL_EXPORTER_OTLP_PROTOCOL`、`OTEL_EXPORTER_OTLP_HEADERS`、`OTEL_METRIC_EXPORT_INTERVAL`、`OTEL_RESOURCE_ATTRIBUTES` 和信号特定变体)也受支持。请参阅[监控](/zh-CN/monitoring-usage)了解配置详情。368标准 OpenTelemetry 导出器变量(`OTEL_METRICS_EXPORTER`、`OTEL_LOGS_EXPORTER`、`OTEL_EXPORTER_OTLP_ENDPOINT`、`OTEL_EXPORTER_OTLP_PROTOCOL`、`OTEL_EXPORTER_OTLP_HEADERS`、`OTEL_METRIC_EXPORT_INTERVAL`、`OTEL_RESOURCE_ATTRIBUTES` 和信号特定变体)也受支持。请参阅[监控](/zh-CN/monitoring-usage)了解配置详情。

errors.md +197 −46

Details

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)。

15</Note>15</Note>

16 16 

17## 查找您的错误17<h2 id="find-your-error">

18 查找您的错误

19</h2>

18 20 

19将您在终端中看到的消息与下面的部分相匹配。21将您在终端中看到的消息与下面的部分相匹配。

20 22 


26| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |28| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |

27| `Auto mode could not evaluate this action and is blocking it for safety` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |29| `Auto mode could not evaluate this action and is blocking it for safety` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |

28| `Auto mode classifier transcript exceeded context window` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |30| `Auto mode classifier transcript exceeded context window` | [服务器错误](#auto-mode-cannot-determine-the-safety-of-an-action) |

29| `You've hit your session limit` / `You've hit your weekly limit` | [使用限制](#youve-hit-your-session-limit) |31| `You've hit your session limit` / `You've hit your weekly limit` | [使用限制](#you%E2%80%99ve-hit-your-session-limit) |

32| `Usage credits required for 1M context` | [使用限制](#usage-credits-required-for-1m-context) |

30| `Server is temporarily limiting requests` | [使用限制](#server-is-temporarily-limiting-requests) |33| `Server is temporarily limiting requests` | [使用限制](#server-is-temporarily-limiting-requests) |

31| `Request rejected (429)` | [使用限制](#request-rejected-429) |34| `Request rejected (429)` | [使用限制](#request-rejected-429) |

32| `Credit balance is too low` | [使用限制](#credit-balance-is-too-low) |35| `Credit balance is too low` | [使用限制](#credit-balance-is-too-low) |

33| `Not logged in · Please run /login` | [身份验证](#not-logged-in) |36| `Not logged in · Please run /login` | [身份验证](#not-logged-in) |

37| `Could not resolve authentication method` | [身份验证](#could-not-resolve-authentication-method) |

34| `Invalid API key` | [身份验证](#invalid-api-key) |38| `Invalid API key` | [身份验证](#invalid-api-key) |

35| `This organization has been disabled` | [身份验证](#this-organization-has-been-disabled) |39| `This organization has been disabled` | [身份验证](#this-organization-has-been-disabled) |

40| `Your organization has disabled API key authentication` | [身份验证](#your-organization-has-disabled-api-key-authentication) |

36| `Your organization has disabled Claude subscription access` | [身份验证](#your-organization-has-disabled-claude-subscription-access) |41| `Your organization has disabled Claude subscription access` | [身份验证](#your-organization-has-disabled-claude-subscription-access) |

37| `Routines are disabled by your organization's policy` | [身份验证](#routines-are-disabled-by-your-organizations-policy) |42| `Routines are disabled by your organization's policy` | [身份验证](#routines-are-disabled-by-your-organization%E2%80%99s-policy) |

38| `OAuth token revoked` / `OAuth token has expired` | [身份验证](#oauth-token-revoked-or-expired) |43| `OAuth token revoked` / `OAuth token has expired` | [身份验证](#oauth-token-revoked-or-expired) |

39| `does not meet scope requirement user:profile` | [身份验证](#oauth-scope-requirement) |44| `does not meet scope requirement user:profile` | [身份验证](#oauth-scope-requirement) |

40| `Unable to connect to API` | [网络](#unable-to-connect-to-api) |45| `Unable to connect to API` | [网络](#unable-to-connect-to-api) |


47| `Unable to resize image` | [请求错误](#unable-to-resize-image) |52| `Unable to resize image` | [请求错误](#unable-to-resize-image) |

48| `PDF too large` / `PDF is password protected` | [请求错误](#pdf-errors) |53| `PDF too large` / `PDF is password protected` | [请求错误](#pdf-errors) |

49| `Extra inputs are not permitted` | [请求错误](#extra-inputs-are-not-permitted) |54| `Extra inputs are not permitted` | [请求错误](#extra-inputs-are-not-permitted) |

50| `There's an issue with the selected model` | [请求错误](#theres-an-issue-with-the-selected-model) |55| `There's an issue with the selected model` | [请求错误](#there%E2%80%99s-an-issue-with-the-selected-model) |

51| `Claude Opus is not available with the Claude Pro plan` | [请求错误](#claude-opus-is-not-available-with-the-claude-pro-plan) |56| `Claude Opus is not available with the Claude Pro plan` | [请求错误](#claude-opus-is-not-available-with-the-claude-pro-plan) |

52| `thinking.type.enabled is not supported for this model` | [请求错误](#thinking-type-enabled-is-not-supported-for-this-model) |57| `thinking.type.enabled is not supported for this model` | [请求错误](#thinking-type-enabled-is-not-supported-for-this-model) |

53| `max_tokens must be greater than thinking.budget_tokens` | [请求错误](#thinking-budget-exceeds-output-limit) |58| `max_tokens must be greater than thinking.budget_tokens` | [请求错误](#thinking-budget-exceeds-output-limit) |


55| `Claude Code is unable to respond to this request, which appears to violate our Usage Policy` | [请求错误](#usage-policy-refusal) |60| `Claude Code is unable to respond to this request, which appears to violate our Usage Policy` | [请求错误](#usage-policy-refusal) |

56| 响应质量似乎低于平常 | [响应质量](#responses-seem-lower-quality-than-usual) |61| 响应质量似乎低于平常 | [响应质量](#responses-seem-lower-quality-than-usual) |

57 62 

58## 自动重试63<h2 id="automatic-retries">

64 自动重试

65</h2>

59 66 

60Claude Code 在向您显示错误之前会重试瞬时故障。服务器错误、过载响应、请求超时、临时 429 限流和断开的连接都会以指数退避方式重试最多 10 次。重试时,微调器显示 `Retrying in Ns · attempt x/y` 倒计时。67Claude Code 在向您显示错误之前会重试瞬时故障。服务器错误、过载响应、请求超时、临时 429 限流和断开的连接都会以指数退避方式重试最多 10 次。重试时,微调器显示 `Retrying in Ns · attempt x/y` 倒计时。

61 68 


66| [`CLAUDE_CODE_MAX_RETRIES`](/zh-CN/env-vars) | 10 | 重试次数。降低它以在脚本中更快地显示故障;提高它以等待更长的事件。 |73| [`CLAUDE_CODE_MAX_RETRIES`](/zh-CN/env-vars) | 10 | 重试次数。降低它以在脚本中更快地显示故障;提高它以等待更长的事件。 |

67| [`API_TIMEOUT_MS`](/zh-CN/env-vars) | 600000 | 每个请求的超时时间(毫秒)。为慢速网络或代理提高它。 |74| [`API_TIMEOUT_MS`](/zh-CN/env-vars) | 600000 | 每个请求的超时时间(毫秒)。为慢速网络或代理提高它。 |

68 75 

69## 服务器错误76<h2 id="server-errors">

77 服务器错误

78</h2>

70 79 

71这些错误来自推理提供商,而不是您的帐户或请求。在 Anthropic API 上,这意味着 Anthropic 基础设施。在 Bedrock、Vertex AI、Foundry 或自定义网关上,这意味着该提供商的基础设施。80这些错误来自推理提供商,而不是您的帐户或请求。在 Anthropic API 上,这意味着 Anthropic 基础设施。在 Bedrock、Vertex AI、Foundry 或自定义网关上,这意味着该提供商的基础设施。

72 81 

73### API Error: 500 Internal server error82<h3 id="api-error-500-internal-server-error">

83 API Error: 500 Internal server error

84</h3>

74 85 

75Claude Code 为任何 5xx 响应显示状态代码和 API 的错误消息。下面的示例显示了 Anthropic API 上的 500 响应:86Claude Code 为任何 5xx 响应显示状态代码和 API 的错误消息。下面的示例显示了 Anthropic API 上的 500 响应:

76 87 


88* 等待一分钟,然后再次发送您的消息。您的原始消息仍在对话中,因此对于长提示,您可以输入 `try again` 而不是粘贴整个内容。99* 等待一分钟,然后再次发送您的消息。您的原始消息仍在对话中,因此对于长提示,您可以输入 `try again` 而不是粘贴整个内容。

89* 如果错误持续存在且没有发布的事件,请运行 `/feedback`,以便 Anthropic 可以使用您的请求详情进行调查。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。100* 如果错误持续存在且没有发布的事件,请运行 `/feedback`,以便 Anthropic 可以使用您的请求详情进行调查。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。

90 101 

91### API Error: Repeated 529 Overloaded errors102<h3 id="api-error-repeated-529-overloaded-errors">

103 API Error: Repeated 529 Overloaded errors

104</h3>

92 105 

93API 在所有用户中暂时处于容量限制。Claude Code 在显示此消息之前已经重试了多次:106API 在所有用户中暂时处于容量限制。Claude Code 在显示此消息之前已经重试了多次:

94 107 


104* 几分钟后重试117* 几分钟后重试

105* 运行 `/model` 并切换到不同的模型以继续工作,因为容量是按模型跟踪的。当一个模型处于特别高的负载下时,Claude Code 会提示您这样做,例如 `Opus is experiencing high load, please use /model to switch to Sonnet`。118* 运行 `/model` 并切换到不同的模型以继续工作,因为容量是按模型跟踪的。当一个模型处于特别高的负载下时,Claude Code 会提示您这样做,例如 `Opus is experiencing high load, please use /model to switch to Sonnet`。

106 119 

107### Request timed out120<h3 id="request-timed-out">

121 Request timed out

122</h3>

108 123 

109API 在连接截止时间之前没有响应。124API 在连接截止时间之前没有响应。

110 125 


121* 如果是慢速网络或代理导致的,请按照[自动重试](#automatic-retries)中的说明提高 `API_TIMEOUT_MS`136* 如果是慢速网络或代理导致的,请按照[自动重试](#automatic-retries)中的说明提高 `API_TIMEOUT_MS`

122* 如果超时频繁且您的网络状况良好,请参阅下面的[网络和连接错误](#network-and-connection-errors)137* 如果超时频繁且您的网络状况良好,请参阅下面的[网络和连接错误](#network-and-connection-errors)

123 138 

124### Auto mode cannot determine the safety of an action139<h3 id="auto-mode-cannot-determine-the-safety-of-an-action">

140 Auto mode cannot determine the safety of an action

141</h3>

125 142 

126[auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 用来分类操作的模型无法做出决定,因此 auto mode 没有自动批准该操作。您看到的消息取决于分类器失败的原因。143[auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 用来分类操作的模型无法做出决定,因此 auto mode 没有自动批准该操作。您看到的消息取决于分类器失败的原因。

127 144 


163* 在出现的提示中批准或拒绝该操作180* 在出现的提示中批准或拒绝该操作

164* 运行 `/compact` 以减少对话大小,以便后续操作再次适应分类器窗口181* 运行 `/compact` 以减少对话大小,以便后续操作再次适应分类器窗口

165 182 

166## 使用限制183<h2 id="usage-limits">

184 使用限制

185</h2>

167 186 

168这些错误意味着与您的帐户或计划相关的配额已达到。它们与影响所有人的[服务器错误](#server-errors)不同。187这些错误意味着与您的帐户或计划相关的配额已达到。它们与影响所有人的[服务器错误](#server-errors)不同。

169 188 

170### 您已达到会话限制189<h3 id="you’ve-hit-your-session-limit">

190 您已达到会话限制

191</h3>

171 192 

172订阅计划包括滚动使用额度。当它用完时,您会看到以下消息之一:193订阅计划包括滚动使用额度。当它用完时,您会看到以下消息之一:

173 194 


188 209 

189要在达到限制之前监视您的剩余额度,请将 `rate_limits` 字段添加到[自定义状态行](/zh-CN/statusline#rate-limit-usage),或在桌面应用中单击模型选择器旁边的[使用环](/zh-CN/desktop#check-usage)。210要在达到限制之前监视您的剩余额度,请将 `rate_limits` 字段添加到[自定义状态行](/zh-CN/statusline#rate-limit-usage),或在桌面应用中单击模型选择器旁边的[使用环](/zh-CN/desktop#check-usage)。

190 211 

191### 服务器暂时限制请求212<h3 id="usage-credits-required-for-1m-context">

213 1M 上下文所需的使用信用

214</h3>

215 

216所选模型使用 1M 令牌扩展上下文窗口,而您的计划仅通过使用信用包含它。

217 

218```text theme={null}

219API Error: Usage credits required for 1M context · run /usage-credits to turn them on, or /model to switch to standard context

220```

221 

222这是一个权利检查,而不是配额耗尽。即使您的会话和每周额度仍有容量,它也会触发。请参阅[扩展上下文](/zh-CN/model-config#extended-context)以了解哪些计划直接包含 1M 上下文,哪些需要使用信用。

223 

224{/* min-version: 2.1.172 */}当此错误在对话中途出现,因为上下文增长超过 200K 令牌时,Claude Code 会自动将对话压缩回标准上下文限制以下,并在之后将会话保持在该限制,因此无需采取任何操作。在 v2.1.172 之前的版本上,错误在每个后续请求(包括 `/compact`)上重复;在这些版本上运行 `/clear` 以恢复。以下步骤适用于您明确选择 `[1m]` 模型的情况。

225 

226**要做什么:**

227 

228* 运行 `/model` 并选择不带 `[1m]` 后缀的变体以回退到标准上下文窗口

229* 运行 `/usage-credits` 以在 Pro 和 Max 上启用 1M 变体的计量计费,或在 Team 和 Enterprise 上向您的管理员请求

230* 如果在 `/model` 后错误仍然存在,1M 模型 ID 可能在其他地方设置。请参阅[所选模型存在问题](#there%E2%80%99s-an-issue-with-the-selected-model)以按优先级顺序检查配置位置。

231* 要从模型选择器中完全删除 1M 变体,请设置 [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/zh-CN/env-vars)

232 

233<h3 id="server-is-temporarily-limiting-requests">

234 服务器暂时限制请求

235</h3>

192 236 

193API 应用了与您的计划配额无关的短期限流。237API 应用了与您的计划配额无关的短期限流。

194 238 


203* 等待片刻后重试247* 等待片刻后重试

204* 如果持续存在,请检查 [status.claude.com](https://status.claude.com)248* 如果持续存在,请检查 [status.claude.com](https://status.claude.com)

205 249 

206### 请求被拒绝 (429)250<h3 id="request-rejected-429">

251 请求被拒绝 (429)

252</h3>

207 253 

208您已达到为您的 API 密钥、Amazon Bedrock 项目或 Google Vertex AI 项目配置的速率限制。254您已达到为您的 API 密钥、Amazon Bedrock 项目或 Google Vertex AI 项目配置的速率限制。

209 255 


220* 对于 Anthropic API 密钥,请参阅[速率限制参考](https://platform.claude.com/docs/en/api/rate-limits)以了解层级如何工作以及如何设置每个工作区的上限266* 对于 Anthropic API 密钥,请参阅[速率限制参考](https://platform.claude.com/docs/en/api/rate-limits)以了解层级如何工作以及如何设置每个工作区的上限

221* 降低并发:降低 [`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY`](/zh-CN/env-vars),避免运行许多并行子代理,或使用 `/model` 切换到较小的模型以进行高容量脚本运行267* 降低并发:降低 [`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY`](/zh-CN/env-vars),避免运行许多并行子代理,或使用 `/model` 切换到较小的模型以进行高容量脚本运行

222 268 

223### 信用余额过低269<h3 id="credit-balance-is-too-low">

270 信用余额过低

271</h3>

224 272 

225您的 Console 组织已用完预付信用。273您的 Console 组织已用完预付信用。

226 274 


234* 如果您有 Pro、Max、Team 或 Enterprise 计划,请使用 `/login` 切换到订阅身份验证282* 如果您有 Pro、Max、Team 或 Enterprise 计划,请使用 `/login` 切换到订阅身份验证

235* 在 Console 中设置每个工作区的支出上限,以防止单个项目耗尽组织余额。请参阅[有效管理成本](/zh-CN/costs)。283* 在 Console 中设置每个工作区的支出上限,以防止单个项目耗尽组织余额。请参阅[有效管理成本](/zh-CN/costs)。

236 284 

237## 身份验证错误285<h2 id="authentication-errors">

286 身份验证错误

287</h2>

238 288 

239这些错误意味着 Claude Code 无法向 API 证明您的身份。随时运行 `/status` 以查看当前活跃的凭证。289这些错误意味着 Claude Code 无法向 API 证明您的身份。随时运行 `/status` 以查看当前活跃的凭证。

240 290 

241### Not logged in291<h3 id="not-logged-in">

292 Not logged in

293</h3>

242 294 

243此会话没有有效的凭证可用。295此会话没有有效的凭证可用。

244 296 


255 307 

256如果您被重复提示登录,请参阅[未登录或令牌过期](/zh-CN/troubleshoot-install#not-logged-in-or-token-expired)以了解系统时钟和 macOS Keychain 修复。308如果您被重复提示登录,请参阅[未登录或令牌过期](/zh-CN/troubleshoot-install#not-logged-in-or-token-expired)以了解系统时钟和 macOS Keychain 修复。

257 309 

258### Invalid API key310<h3 id="could-not-resolve-authentication-method">

311 Could not resolve authentication method

312</h3>

313 

314会话到达 API 客户端时没有任何凭证。这出现在[后台会话](/zh-CN/agent-view)、云会话和 Agent SDK 上下文中,其中交互式登录检查在第一个请求之前不运行。

315 

316```text theme={null}

317Could 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

318```

319 

320{/* min-version: 2.1.174 */}在 v2.1.174 之前,分配给空闲预初始化工作进程的后台或云会话即使配置了有效凭证也可能以这种方式失败。升级以恢复。在当前版本中,该错误意味着工作进程没有可用的凭证。

321 

322**要做什么:**

323 

324* 如果这出现在后台或云会话中且您的凭证已配置,请升级到 v2.1.174 或更高版本

325* 确认 `ANTHROPIC_API_KEY`、`CLAUDE_CODE_OAUTH_TOKEN` 或您的云提供商凭证已在启动工作进程的环境中设置,而不仅仅在您的交互式 shell 中

326* 对于 Agent SDK,请参阅[身份验证设置](/zh-CN/agent-sdk/overview#get-started)

327* 在同一环境中的交互式会话中运行 `/status` 以确认哪个凭证源解析

328 

329<h3 id="invalid-api-key">

330 Invalid API key

331</h3>

259 332 

260`ANTHROPIC_API_KEY` 环境变量或 `apiKeyHelper` 脚本返回了 API 拒绝的密钥。333`ANTHROPIC_API_KEY` 环境变量或 `apiKeyHelper` 脚本返回了 API 拒绝的密钥。

261 334 


271* 如果密钥来自 [`apiKeyHelper`](/zh-CN/settings#available-settings) 脚本,请直接运行脚本以确认它在 stdout 上打印有效的密钥344* 如果密钥来自 [`apiKeyHelper`](/zh-CN/settings#available-settings) 脚本,请直接运行脚本以确认它在 stdout 上打印有效的密钥

272* 运行 `/status` 以确认 Claude Code 实际使用的凭证源345* 运行 `/status` 以确认 Claude Code 实际使用的凭证源

273 346 

274### This organization has been disabled347<h3 id="this-organization-has-been-disabled">

348 This organization has been disabled

349</h3>

275 350 

276来自禁用的 Console 组织的过时 `ANTHROPIC_API_KEY` 正在覆盖您的订阅登录。351来自禁用的 Console 组织的过时 `ANTHROPIC_API_KEY` 正在覆盖您的订阅登录。

277 352 


288* 之后运行 `/status` 以确认活跃凭证是您的订阅363* 之后运行 `/status` 以确认活跃凭证是您的订阅

289* 如果未设置环境变量且错误仍然存在,则禁用的组织是与您的 `/login` 相关联的组织。联系支持或使用不同的帐户登录。364* 如果未设置环境变量且错误仍然存在,则禁用的组织是与您的 `/login` 相关联的组织。联系支持或使用不同的帐户登录。

290 365 

291### Your organization has disabled Claude subscription access366<h3 id="your-organization-has-disabled-api-key-authentication">

367 Your organization has disabled API key authentication

368</h3>

369 

370您的 Console 组织的管理员已关闭 API 密钥身份验证,因此 API 拒绝了 Claude Code 正在发送的密钥。`·` 之后的恢复提示因密钥的来源而异:

371 

372```text theme={null}

373Your organization has disabled API key authentication · Run /login to sign in with your claude.ai account

374Your organization has disabled API key authentication · Unset ANTHROPIC_API_KEY to use your claude.ai account instead

375Your organization has disabled API key authentication · Unset ANTHROPIC_API_KEY and run /login to sign in with your claude.ai account

376Your organization has disabled API key authentication · Unset the apiKeyHelper setting and run /login to sign in with your claude.ai account

377```

378 

379环境变量和 `apiKeyHelper` 优先于 `/login`,因此仅运行 `/login` 在任一仍在提供密钥时无法帮助。请参阅[身份验证优先级](/zh-CN/authentication#authentication-precedence)。

380 

381**要做什么:**

382 

383* 如果消息命名 `ANTHROPIC_API_KEY`,在当前 shell 中取消设置它并从您的 shell 配置文件或 `.env` 文件中删除它,然后重新启动 `claude`

384* 如果消息命名 `apiKeyHelper`,从您的 `settings.json` 中删除 [`apiKeyHelper`](/zh-CN/settings#available-settings) 设置

385* 运行 `/login` 以使用您的 claude.ai 帐户登录

386* 之后运行 `/status` 以确认活跃凭证是您的订阅而不是 API 密钥

387* 如果您需要 API 密钥身份验证用于自动化,请要求您的组织管理员在 Console 中重新启用它

388 

389<h3 id="your-organization-has-disabled-claude-subscription-access">

390 Your organization has disabled Claude subscription access

391</h3>

292 392 

293您的 Claude 组织不允许使用订阅登录登录到 Claude Code。使用同一帐户再次运行 `/login` 会返回相同的错误。393您的 Claude 组织不允许使用订阅登录登录到 Claude Code。使用同一帐户再次运行 `/login` 会返回相同的错误。

294 394 


304* 改用 Console API 密钥进行身份验证,而不是您的订阅。有关设置,请参阅 [Claude Console 身份验证](/zh-CN/authentication#claude-console-authentication)。404* 改用 Console API 密钥进行身份验证,而不是您的订阅。有关设置,请参阅 [Claude Console 身份验证](/zh-CN/authentication#claude-console-authentication)。

305* 如果您是管理员且看不到启用访问权限的选项,请联系 [Anthropic 支持](https://support.claude.com)405* 如果您是管理员且看不到启用访问权限的选项,请联系 [Anthropic 支持](https://support.claude.com)

306 406 

307### Routines are disabled by your organization's policy407<h3 id="routines-are-disabled-by-your-organizations-policy">

408 Routines are disabled by your organization's policy

409</h3>

308 410 

309您的团队或企业管理员已在组织级别关闭了例程。当您尝试创建或运行例程时会出现该错误,包括从 `/schedule` 和 claude.ai/code 上的 [Routines](/zh-CN/routines) UI。411您的团队或企业管理员已在组织级别关闭了例程。当您尝试创建或运行例程时会出现该错误,包括从 `/schedule` 和 claude.ai/code 上的 [Routines](/zh-CN/routines) UI。

310 412 


319* 要求您的管理员在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 启用**例程**切换421* 要求您的管理员在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 启用**例程**切换

320* 对于不需要组织级别例程的一次性计划工作,请参阅[计划任务](/zh-CN/scheduled-tasks)422* 对于不需要组织级别例程的一次性计划工作,请参阅[计划任务](/zh-CN/scheduled-tasks)

321 423 

322### OAuth token revoked or expired424<h3 id="oauth-token-revoked-or-expired">

425 OAuth token revoked or expired

426</h3>

323 427 

324您保存的登录不再有效。撤销的令牌意味着您在任何地方都签出或管理员删除了访问权限;过期的令牌意味着自动刷新在会话中途失败。428您保存的登录不再有效。撤销的令牌意味着您在任何地方都签出或管理员删除了访问权限;过期的令牌意味着自动刷新在会话中途失败。

325 429 


336* 对于跨启动的重复登录提示,请参阅[故障排除](/zh-CN/troubleshoot-install#not-logged-in-or-token-expired)中的系统时钟和 macOS Keychain 检查440* 对于跨启动的重复登录提示,请参阅[故障排除](/zh-CN/troubleshoot-install#not-logged-in-or-token-expired)中的系统时钟和 macOS Keychain 检查

337* 对于其他故障,包括 `403 Forbidden` 和 OAuth 浏览器问题,请参阅[登录和身份验证](/zh-CN/troubleshoot-install#login-and-authentication)441* 对于其他故障,包括 `403 Forbidden` 和 OAuth 浏览器问题,请参阅[登录和身份验证](/zh-CN/troubleshoot-install#login-and-authentication)

338 442 

339### OAuth scope requirement443<h3 id="oauth-scope-requirement">

444 OAuth scope requirement

445</h3>

340 446 

341存储的令牌早于较新功能所需的权限范围。您最常从 `/usage` 和状态行使用指示器看到这一点:447存储的令牌早于较新功能所需的权限范围。您最常从 `/usage` 和状态行使用指示器看到这一点:

342 448 


348 454 

349* 运行 `/login` 以使用当前范围铸造新令牌。您不需要先登出。455* 运行 `/login` 以使用当前范围铸造新令牌。您不需要先登出。

350 456 

351## 网络和连接错误457<h2 id="network-and-connection-errors">

458 网络和连接错误

459</h2>

352 460 

353这些错误意味着来自 Claude Code 的网络请求无法到达其目的地。它们通常源于您的本地网络、代理或防火墙,或云环境的网络策略。461这些错误意味着来自 Claude Code 的网络请求无法到达其目的地。它们通常源于您的本地网络、代理或防火墙,或云环境的网络策略。

354 462 

355### Unable to connect to API463<h3 id="unable-to-connect-to-api">

464 Unable to connect to API

465</h3>

356 466 

357到 API 的 TCP 连接失败或从未完成。467到 API 的 TCP 连接失败或从未完成。

358 468 


381* 在 macOS 上,已断开连接或卸载的 VPN 客户端可能会留下隧道接口或路由规则。检查 `ifconfig` 以查找过时的 `utun` 接口,并在系统设置中删除 VPN 的网络扩展。491* 在 macOS 上,已断开连接或卸载的 VPN 客户端可能会留下隧道接口或路由规则。检查 `ifconfig` 以查找过时的 `utun` 接口,并在系统设置中删除 VPN 的网络扩展。

382* Docker Desktop 和类似的容器运行时可以拦截出站流量。退出它们并重试以排除这一点。492* Docker Desktop 和类似的容器运行时可以拦截出站流量。退出它们并重试以排除这一点。

383 493 

384### SSL certificate errors494<h3 id="ssl-certificate-errors">

495 SSL certificate errors

496</h3>

385 497 

386您网络上的代理或安全设备正在使用其自己的证书拦截 TLS 流量,而 Claude Code 不信任它。498您网络上的代理或安全设备正在使用其自己的证书拦截 TLS 流量,而 Claude Code 不信任它。

387 499 


396* 有关完整设置说明,请参阅[网络配置](/zh-CN/network-config#custom-ca-certificates)508* 有关完整设置说明,请参阅[网络配置](/zh-CN/network-config#custom-ca-certificates)

397* 不要设置 `NODE_TLS_REJECT_UNAUTHORIZED=0`,这会完全禁用证书验证509* 不要设置 `NODE_TLS_REJECT_UNAUTHORIZED=0`,这会完全禁用证书验证

398 510 

399### Host not allowed in a cloud session511<h3 id="host-not-allowed-in-a-cloud-session">

512 Host not allowed in a cloud session

513</h3>

400 514 

401来自云会话或例程的出站 HTTP 请求被环境的网络策略阻止。515来自云会话或例程的出站 HTTP 请求被环境的网络策略阻止。

402 516 


417 531 

418有关访问级别和默认允许列表,请参阅[网络访问](/zh-CN/claude-code-on-the-web#network-access)。本地 CLI 会话不受此策略影响。532有关访问级别和默认允许列表,请参阅[网络访问](/zh-CN/claude-code-on-the-web#network-access)。本地 CLI 会话不受此策略影响。

419 533 

420## 请求错误534<h2 id="request-errors">

535 请求错误

536</h2>

421 537 

422这些错误意味着 API 收到了您的请求但拒绝了其内容。538这些错误意味着 API 收到了您的请求但拒绝了其内容。

423 539 

424### Prompt is too long540<h3 id="prompt-is-too-long">

541 Prompt is too long

542</h3>

425 543 

426对话加上附加文件超过了模型的上下文窗口。544对话加上附加文件超过了模型的上下文窗口。

427 545 


440 558 

441有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/zh-CN/context-window)。559有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/zh-CN/context-window)。

442 560 

443### Error during compaction: Conversation too long561<h3 id="error-during-compaction-conversation-too-long">

562 Error during compaction: Conversation too long

563</h3>

444 564 

445`/compact` 本身失败,因为没有足够的可用上下文来保存它生成的摘要。565`/compact` 本身失败,因为没有足够的可用上下文来保存它生成的摘要。

446 566 


455* 按 Esc 两次打开消息列表并回退几轮。这会从上下文中删除最近的消息。然后再次运行 `/compact`。575* 按 Esc 两次打开消息列表并回退几轮。这会从上下文中删除最近的消息。然后再次运行 `/compact`。

456* 如果回退没有释放足够的空间,请运行 `/clear` 以启动新的会话。您之前的对话已保存,可以使用 `/resume` 重新打开。576* 如果回退没有释放足够的空间,请运行 `/clear` 以启动新的会话。您之前的对话已保存,可以使用 `/resume` 重新打开。

457 577 

458### Request too large578<h3 id="request-too-large">

579 Request too large

580</h3>

459 581 

460原始请求体在标记化之前超过了 API 的字节限制,通常是因为粘贴的大文件或附件。582原始请求体在标记化之前超过了 API 的字节限制,通常是因为粘贴的大文件或附件。

461 583 


471* 按路径引用大文件而不是粘贴其内容,以便 Claude 可以分块读取它们593* 按路径引用大文件而不是粘贴其内容,以便 Claude 可以分块读取它们

472* 对于图像,请参阅下面的[图像太大](#image-was-too-large)594* 对于图像,请参阅下面的[图像太大](#image-was-too-large)

473 595 

474### Image was too large596<h3 id="image-was-too-large">

597 Image was too large

598</h3>

475 599 

476粘贴或附加的图像超过了 API 的大小或尺寸限制。600粘贴或附加的图像超过了 API 的大小或尺寸限制。

477 601 


480API Error: 400 ... image dimensions exceed max allowed size604API Error: 400 ... image dimensions exceed max allowed size

481```605```

482 606 

483错误后图像保留在对话历史中因此每个后续消息都会失败出现相同的错误直到您删除它607{/* min-version: 2.1.142 */}Claude Code 将无法处理的图像替换为文本占位符并重试因此后续消息成功。在 2.1.142 之前的版本上粘贴的图像可能保留在对话中并在每个后续消息上重复相同的错误要在这些版本上恢复,请按 Esc 两次并回退到添加图像的轮次之前。

484 608 

485**要做什么:**609**要做什么:**

486 610 

487* 按 Esc 两次并回退到添加图像的轮次之前

488* 在粘贴之前调整图像大小。API 接受单个图像最长边最多 8000 像素的图像,或当许多图像在上下文中时为 2000 像素。611* 在粘贴之前调整图像大小。API 接受单个图像最长边最多 8000 像素的图像,或当许多图像在上下文中时为 2000 像素。

489* 拍摄相关区域的更紧密屏幕截图,而不是整个屏幕612* 拍摄相关区域的更紧密屏幕截图,而不是整个屏幕

490 613 

491### Unable to resize image614<h3 id="unable-to-resize-image">

615 Unable to resize image

616</h3>

492 617 

493Claude Code 无法在将附加的图像发送到 API 之前缩小其大小。618Claude Code 无法在将附加的图像发送到 API 之前缩小其大小。

494 619 


506* 如果消息要求您转换图像,请将其转换为 PNG、JPEG、GIF 或 WebP 并再次附加。Claude Code 可以验证这些格式的尺寸,而无需图像处理器。631* 如果消息要求您转换图像,请将其转换为 PNG、JPEG、GIF 或 WebP 并再次附加。Claude Code 可以验证这些格式的尺寸,而无需图像处理器。

507* 如果消息报告尺寸或大小限制,请在附加之前将图像调整大小或重新压缩到该限制以下。632* 如果消息报告尺寸或大小限制,请在附加之前将图像调整大小或重新压缩到该限制以下。

508 633 

509### PDF errors634<h3 id="pdf-errors">

635 PDF errors

636</h3>

510 637 

511您附加的 PDF 无法处理。638您附加的 PDF 无法处理。

512 639 


521* 对于超大 PDF,要求 Claude 使用 Read 工具读取页面范围而不是附加整个文件,或使用 `pdftotext` 等工具提取文本并按路径引用输出文件648* 对于超大 PDF,要求 Claude 使用 Read 工具读取页面范围而不是附加整个文件,或使用 `pdftotext` 等工具提取文本并按路径引用输出文件

522* 对于受保护或无效的 PDF,删除密码或从其源应用程序重新导出文件,然后重试649* 对于受保护或无效的 PDF,删除密码或从其源应用程序重新导出文件,然后重试

523 650 

524### Extra inputs are not permitted651<h3 id="extra-inputs-are-not-permitted">

652 Extra inputs are not permitted

653</h3>

525 654 

526Claude Code 和 API 之间的代理或 LLM 网关删除了 `anthropic-beta` 请求标头,因此 API 拒绝了依赖它的字段。655Claude Code 和 API 之间的代理或 LLM 网关删除了 `anthropic-beta` 请求标头,因此 API 拒绝了依赖它的字段。

527 656 


538* 配置您的网关以转发 `anthropic-beta` 标头。请参阅 [LLM 网关配置](/zh-CN/llm-gateway)。667* 配置您的网关以转发 `anthropic-beta` 标头。请参阅 [LLM 网关配置](/zh-CN/llm-gateway)。

539* 作为后备,在启动之前设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/zh-CN/env-vars)。这会禁用需要 beta 标头的功能,以便请求通过无法转发它的网关成功。668* 作为后备,在启动之前设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/zh-CN/env-vars)。这会禁用需要 beta 标头的功能,以便请求通过无法转发它的网关成功。

540 669 

541### There's an issue with the selected model670<h3 id="there’s-an-issue-with-the-selected-model">

671 There's an issue with the selected model

672</h3>

542 673 

543配置的模型名称未被识别或您的帐户缺少对它的访问权限。从 v2.1.160 开始,尾部提示(此处以其交互式形式显示)因表面而异。674配置的模型名称未被识别或您的帐户缺少对它的访问权限。从 v2.1.160 开始,尾部提示(此处以其交互式形式显示)因表面而异。

544 675 


555* 如果错误的模型一直出现在 CLI 中,则某处设置了过时的 ID。按[优先级顺序](/zh-CN/model-config#setting-your-model)检查:`--model` 标志、`ANTHROPIC_MODEL` 环境变量,然后是 `.claude/settings.local.json` 中的 `model` 字段、您项目的 `.claude/settings.json` 和 `~/.claude/settings.json`。删除过时的值,Claude Code 将回退到您的帐户默认值。686* 如果错误的模型一直出现在 CLI 中,则某处设置了过时的 ID。按[优先级顺序](/zh-CN/model-config#setting-your-model)检查:`--model` 标志、`ANTHROPIC_MODEL` 环境变量,然后是 `.claude/settings.local.json` 中的 `model` 字段、您项目的 `.claude/settings.json` 和 `~/.claude/settings.json`。删除过时的值,Claude Code 将回退到您的帐户默认值。

556* 对于 Vertex AI 部署,请参阅 [Vertex AI 故障排除](/zh-CN/google-vertex-ai#troubleshooting)。687* 对于 Vertex AI 部署,请参阅 [Vertex AI 故障排除](/zh-CN/google-vertex-ai#troubleshooting)。

557 688 

558### Claude Opus is not available with the Claude Pro plan689<h3 id="claude-opus-is-not-available-with-the-claude-pro-plan">

690 Claude Opus is not available with the Claude Pro plan

691</h3>

559 692 

560您的活跃订阅计划不包括您选择的模型。693您的活跃订阅计划不包括您选择的模型。

561 694 


569* 如果您最近升级了计划但仍然看到这个,请运行 `/logout` 然后 `/login`。存储的令牌反映了您登录时的计划,因此在现有会话中升级网络不会生效,直到您重新身份验证。702* 如果您最近升级了计划但仍然看到这个,请运行 `/logout` 然后 `/login`。存储的令牌反映了您登录时的计划,因此在现有会话中升级网络不会生效,直到您重新身份验证。

570* 有关每个计划包括哪些模型,请参阅 [claude.com/pricing](https://claude.com/pricing)703* 有关每个计划包括哪些模型,请参阅 [claude.com/pricing](https://claude.com/pricing)

571 704 

572### thinking.type.enabled is not supported for this model705<h3 id="thinking-type-enabled-is-not-supported-for-this-model">

706 thinking.type.enabled is not supported for this model

707</h3>

573 708 

574您的 Claude Code 版本早于 Opus 4.7 或 Opus 4.8 的最低版本。CLI 发送了模型不再接受的思考配置。709您的 Claude Code 版本早于 Opus 4.7 或 Opus 4.8 的最低版本。CLI 发送了模型不再接受的思考配置。

575 710 


583* 如果您无法升级,请运行 `/model` 并选择 Opus 4.6 或 Sonnet718* 如果您无法升级,请运行 `/model` 并选择 Opus 4.6 或 Sonnet

584* 如果您在 Agent SDK 中遇到这个,请参阅 [SDK 故障排除](/zh-CN/agent-sdk/quickstart#troubleshooting)719* 如果您在 Agent SDK 中遇到这个,请参阅 [SDK 故障排除](/zh-CN/agent-sdk/quickstart#troubleshooting)

585 720 

586### Thinking budget exceeds output limit721<h3 id="thinking-budget-exceeds-output-limit">

722 Thinking budget exceeds output limit

723</h3>

587 724 

588配置的扩展思考预算超过了最大响应长度,因此没有空间留给实际答案。725配置的扩展思考预算超过了最大响应长度,因此没有空间留给实际答案。

589 726 


598* 降低 `MAX_THINKING_TOKENS`,或将 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/zh-CN/env-vars) 提高到思考预算之上735* 降低 `MAX_THINKING_TOKENS`,或将 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/zh-CN/env-vars) 提高到思考预算之上

599* 有关预算如何与输出长度交互的信息,请参阅[扩展思考](/zh-CN/model-config#extended-thinking)736* 有关预算如何与输出长度交互的信息,请参阅[扩展思考](/zh-CN/model-config#extended-thinking)

600 737 

601### Tool use or thinking block mismatch738<h3 id="tool-use-or-thinking-block-mismatch">

739 Tool use or thinking block mismatch

740</h3>

602 741 

603对话历史以不一致的状态到达 API,通常是在工具调用被中断或轮次在流中途被编辑后。742对话历史以不一致的状态到达 API,通常是在工具调用被中断或轮次在流中途被编辑后。

604 743 


615* {/* max-version: 2.1.155 */}如果您使用的是 Opus 4.7 或 Opus 4.8,请先运行 `claude update`。v2.1.156 之前的版本可能在正常工具使用期间触发此错误,并且 `/rewind` 无法清除它。754* {/* max-version: 2.1.155 */}如果您使用的是 Opus 4.7 或 Opus 4.8,请先运行 `claude update`。v2.1.156 之前的版本可能在正常工具使用期间触发此错误,并且 `/rewind` 无法清除它。

616* 运行 `/rewind`,或按 Esc 两次,回退到损坏轮次之前的检查点并从那里继续。有关如何创建和恢复检查点的信息,请参阅[检查点](/zh-CN/checkpointing)。755* 运行 `/rewind`,或按 Esc 两次,回退到损坏轮次之前的检查点并从那里继续。有关如何创建和恢复检查点的信息,请参阅[检查点](/zh-CN/checkpointing)。

617 756 

618### Usage Policy refusal757<h3 id="usage-policy-refusal">

758 Usage Policy refusal

759</h3>

619 760 

620API 拒绝响应,因为对话中的内容触发了[使用政策](https://www.anthropic.com/legal/aup)检查。该消息包含一个请求 ID,如果您认为拒绝不正确,可以向支持部门引用。761API 拒绝响应,因为对话中的内容触发了[使用政策](https://www.anthropic.com/legal/aup)检查。该消息包含一个请求 ID,如果您认为拒绝不正确,可以向支持部门引用。

621 762 


631* 如果您无法识别哪个轮次导致了它,请运行 `/clear` 以在同一项目中启动新的对话。您之前的对话已保存在磁盘上,并且在 `/resume` 中仍然可用。772* 如果您无法识别哪个轮次导致了它,请运行 `/clear` 以在同一项目中启动新的对话。您之前的对话已保存在磁盘上,并且在 `/resume` 中仍然可用。

632* 在[非交互模式](/zh-CN/headless)(`-p`)中,其中 rewind 不可用,使用重新表述的提示重试或启动新会话而不使用 `--continue`。773* 在[非交互模式](/zh-CN/headless)(`-p`)中,其中 rewind 不可用,使用重新表述的提示重试或启动新会话而不使用 `--continue`。

633 774 

634## 响应质量似乎低于平常775<h2 id="responses-seem-lower-quality-than-usual">

776 响应质量似乎低于平常

777</h2>

778 

779如果 Claude 的答案似乎不如您期望的那样有能力,但没有显示错误,原因通常是对话状态而不是模型本身。Claude Code 不会默默更改模型版本。它可以在三种特定情况下切换到后备模型:

780 

781* 配置的 [`--fallback-model`](/zh-CN/cli-reference#cli-flags) 在可用性错误后接管该轮次,并在记录中显示通知

782* Bedrock 或 Vertex AI 启动检查发现您的默认模型不可用

783* [自动模型后备](/zh-CN/model-config#automatic-model-fallback)在 Fable 5 上将会话移至默认 Opus 模型,并在记录中显示通知

635 784 

636如果 Claude 的答案似乎不如您期望的那样有能力,但没有显示错误,原因通常是对话状态而不是模型本身。Claude Code 不会默默更改模型版本它可以在特定情况下切换到后备模型,例如达到 Opus 配额或 Bedrock 或 Vertex AI 区域缺少您的模型;下面的模型选择检查会捕获两者,[模型配置](/zh-CN/model-config)解释了何时应用后备785下面的模型选择检查会捕获第二和第三种情况;第一种情况显示为记录通知而不是 `/model` 更改。[模型配置](/zh-CN/model-config)解释了何时应用每个后备

637 786 

638首先检查这些:787首先检查这些:

639 788 


646 795 

647如果在检查上述内容后质量仍然似乎有问题,请运行 `/feedback` 并描述您期望的内容与您得到的内容。以这种方式提交的反馈包括对话记录,这是 Anthropic 诊断真实回归的最快方式。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。796如果在检查上述内容后质量仍然似乎有问题,请运行 `/feedback` 并描述您期望的内容与您得到的内容。以这种方式提交的反馈包括对话记录,这是 Anthropic 诊断真实回归的最快方式。如果您的环境中 `/feedback` 不可用,请参阅[报告错误](#report-an-error)。

648 797 

649## 报告错误798<h2 id="report-an-error">

799 报告错误

800</h2>

650 801 

651本页涵盖来自 Claude API 的错误。对于来自其他 Claude Code 组件的错误,请参阅相关指南:802本页涵盖来自 Claude API 的错误。对于来自其他 Claude Code 组件的错误,请参阅相关指南:

652 803 

fast-mode.md +1 −1

Details

115* **团队和企业的管理员启用**:快速模式默认对团队和企业组织禁用。管理员必须明确[启用快速模式](#enable-fast-mode-for-your-organization),用户才能访问它。115* **团队和企业的管理员启用**:快速模式默认对团队和企业组织禁用。管理员必须明确[启用快速模式](#enable-fast-mode-for-your-organization),用户才能访问它。

116 116 

117<Note>117<Note>

118 如果您的管理员尚未为您的组织启用快速模式,`/fast` 命令将显示"Fast mode has been disabled by your organization."118 如果您的管理员尚未为您的组织启用快速模式,`/fast` 命令将显示"Fast mode has been disabled by your organization."。如果您的组织的 [`availableModels`](/zh-CN/model-config#restrict-model-selection) 允许列表排除了快速模式 Opus 模型,`/fast` 将被拒绝,显示"is not in your organization's allowed models"。

119</Note>119</Note>

120 120 

121<h3 id="enable-fast-mode-for-your-organization">121<h3 id="enable-fast-mode-for-your-organization">

Details

109 109 

110 **如果它是 Claude 有时需要的参考材料(API 文档、风格指南)或您使用 `/<name>` 触发的工作流(部署、审查、发布),请将其放在 skill 中**。110 **如果它是 Claude 有时需要的参考材料(API 文档、风格指南)或您使用 `/<name>` 触发的工作流(部署、审查、发布),请将其放在 skill 中**。

111 111 

112 **经验法则:** 保持 CLAUDE.md 在 200 行以下。如果它在增长,将参考内容移到 skills 或拆分为 [`.claude/rules/`](/zh-CN/memory#organize-rules-with-clauderules) 文件。112 **经验法则:** 保持 CLAUDE.md 在 200 行以下。如果它在增长,将参考内容移到 skills 或拆分为 [`.claude/rules/`](/zh-CN/memory#organize-rules-with-claude%2Frules%2F) 文件。

113 </Tab>113 </Tab>

114 114 

115 <Tab title="CLAUDE.md vs Rules vs Skills">115 <Tab title="CLAUDE.md vs Rules vs Skills">


198 198 

199功能可以在多个级别定义:用户范围、每个项目、通过 plugins 或通过托管策略。您还可以在子目录中嵌套 CLAUDE.md 文件或在 monorepo 的特定包中放置 skills。当相同的功能存在于多个级别时,以下是它们的分层方式:199功能可以在多个级别定义:用户范围、每个项目、通过 plugins 或通过托管策略。您还可以在子目录中嵌套 CLAUDE.md 文件或在 monorepo 的特定包中放置 skills。当相同的功能存在于多个级别时,以下是它们的分层方式:

200 200 

201* **CLAUDE.md 文件** 是累加的:所有级别同时向 Claude 的上下文贡献内容。来自您的工作目录及以上的文件在启动时加载;子目录在您在其中工作时加载。当说明冲突时,Claude 使用判断来协调它们,更具体的说明通常优先。有关详细信息,请参阅 [CLAUDE.md 文件如何加载](/zh-CN/memory#how-claudemd-files-load)。201* **CLAUDE.md 文件** 是累加的:所有级别同时向 Claude 的上下文贡献内容。来自您的工作目录及以上的文件在启动时加载;子目录在您在其中工作时加载。当说明冲突时,Claude 使用判断来协调它们,更具体的说明通常优先。有关详细信息,请参阅 [CLAUDE.md 文件如何加载](/zh-CN/memory#how-claude-md-files-load)。

202* **Skills 和 subagents** 按名称覆盖:当相同的名称存在于多个级别时,一个定义根据优先级获胜(对于 skills 为托管 > 用户 > 项目;对于 subagents 为托管 > CLI 标志 > 项目 > 用户 > plugin)。Plugin skills 是 [命名空间的](/zh-CN/plugins#add-skills-to-your-plugin) 以避免冲突。有关详细信息,请参阅 [skill 发现](/zh-CN/skills#where-skills-live) 和 [subagent 范围](/zh-CN/sub-agents#choose-the-subagent-scope)。202* **Skills 和 subagents** 按名称覆盖:当相同的名称存在于多个级别时,一个定义根据优先级获胜(对于 skills 为托管 > 用户 > 项目;对于 subagents 为托管 > CLI 标志 > 项目 > 用户 > plugin)。Plugin skills 是 [命名空间的](/zh-CN/plugins#add-skills-to-your-plugin) 以避免冲突。有关详细信息,请参阅 [skill 发现](/zh-CN/skills#where-skills-live) 和 [subagent 范围](/zh-CN/sub-agents#choose-the-subagent-scope)。

203* **MCP 服务器** 按名称覆盖:本地 > 项目 > 用户。有关详细信息,请参阅 [MCP 范围](/zh-CN/mcp#scope-hierarchy-and-precedence)。203* **MCP 服务器** 按名称覆盖:本地 > 项目 > 用户。有关详细信息,请参阅 [MCP 范围](/zh-CN/mcp#scope-hierarchy-and-precedence)。

204* **Hooks** 合并:所有注册的 hooks 为其匹配的事件触发,无论来源如何。有关详细信息,请参阅 [hooks](/zh-CN/hooks-guide)。204* **Hooks** 合并:所有注册的 hooks 为其匹配的事件触发,无论来源如何。有关详细信息,请参阅 [hooks](/zh-CN/hooks-guide)。

fullscreen.md +22 −3

Details

104export CLAUDE_CODE_SCROLL_SPEED=3104export CLAUDE_CODE_SCROLL_SPEED=3

105```105```

106 106 

107值 `3` 与 `vim` 和类似应用程序中的默认值匹配。该设置接受 1 到 20 的值。107值 `3` 与 `vim` 和类似应用程序中的默认值匹配。该设置接受 1 到 20 的值,以及 1 以下的分数值,如 `0.5`,以减缓已经放大滚轮事件的终端中加速的触控板和滚轮滚动

108 108 

109要交互式地调整滚动速度,请运行 `/scroll-speed`。该对话框显示一个标尺,您可以在其打开时滚动,以便您可以立即感受到变化。按 `←` 和 `→` 来调整,按 `r` 重置为自动检测的默认值,按 `Enter` 保存。该命令写入与 `CLAUDE_CODE_SCROLL_SPEED` 环境变量设置相同的值,持久化到 `~/.claude/settings.json`。该命令在 JetBrains IDE 终端中不可用。109要交互式地调整滚动速度,请运行 `/scroll-speed`。该对话框显示一个标尺,您可以在其打开时滚动,以便您可以立即感受到变化。按 `←` 和 `→` 来调整,按 `r` 重置为自动检测的默认值,按 `Enter` 保存。该命令写入与 `CLAUDE_CODE_SCROLL_SPEED` 环境变量设置相同的值,持久化到 `~/.claude/settings.json`。该命令在 JetBrains IDE 终端中不可用。

110 110 

111除了基础速度外,Claude Code 还会在您快速旋转滚轮时加速滚动速率,因此快速旋转覆盖的距离比相同数量的慢凹口更远。要关闭加速并保持每个凹口的恒定速率,请在 [`settings.json`](/zh-CN/settings#available-settings) 中将 `wheelScrollAccelerationEnabled` 设置为 `false`。此设置需要 Claude Code v2.1.174 或更高版本。

112 

111<h3 id="scroll-in-the-jetbrains-ide-terminal">113<h3 id="scroll-in-the-jetbrains-ide-terminal">

112 JetBrains IDE 终端中的滚动114 JetBrains IDE 终端中的滚动

113</h3>115</h3>


171 173 

172鼠标捕获是最常见的摩擦点,特别是在 SSH 上或 tmux 内。当 Claude Code 捕获鼠标事件时,您的终端的原生选择时复制停止工作。您使用点击拖动进行的选择存在于 Claude Code 内,而不是在您的终端的选择缓冲区中,因此 tmux 复制模式、Kitty 提示和类似工具看不到它。174鼠标捕获是最常见的摩擦点,特别是在 SSH 上或 tmux 内。当 Claude Code 捕获鼠标事件时,您的终端的原生选择时复制停止工作。您使用点击拖动进行的选择存在于 Claude Code 内,而不是在您的终端的选择缓冲区中,因此 tmux 复制模式、Kitty 提示和类似工具看不到它。

173 175 

174Claude Code 尝试将选择写入您的剪贴板,但它使用的路径取决于您的设置。在 tmux 内,它写入 tmux 粘贴缓冲区。在 SSH 上,它回退到 OSC 52 转义序列,一些终端默认阻止这些。iTerm2 会阻止它们直到您打开 Settings → General → Selection → Applications in terminal may access clipboard。在 iTerm2 中运行 [`/terminal-setup`](/zh-CN/terminal-config) 会为您启用此功能Claude Code 在每次复制后打印一个 toast告诉您它使用了哪个路径。176Claude Code 将选择写入您的系统剪贴板它使用的路径取决于您的设置在本地会话中它运行原生剪贴板工具:

177 

178* **macOS**: `pbcopy`

179* **Linux**: Wayland 上的 `wl-copy`,或 X11 上的 `xclip` 或 `xsel`(取决于安装的是哪个)。Claude Code 同时写入剪贴板和 PRIMARY 选择,因此中键粘贴可以工作。

180* **Windows 和 WSL**: PowerShell `Set-Clipboard`

181 

182在 tmux 内,它也写入 tmux 粘贴缓冲区。在 SSH 上,它回退到 OSC 52 转义序列。Claude Code 在每次复制后打印一个 toast,告诉您它使用了哪个路径。

183 

184某些终端默认阻止 OSC 52。iTerm2 会阻止它,直到您打开 Settings → General → Selection → Applications in terminal may access clipboard;在 iTerm2 中运行 [`/terminal-setup`](/zh-CN/terminal-config) 会为您启用此功能。

185 

186对于一次性的原生选择,要使用的键取决于您的终端:

187 

188* **Terminal.app**: `Fn`

189* **iTerm2**: `Option`

190* **VS Code、Cursor 和 Devin Desktop**: `Shift`,或在启用 `terminal.integrated.macOptionClickForcesSelection` 设置的 macOS 上使用 `Option`

191* **大多数其他终端**: `Shift`

192 

193按住该键同时点击拖动。您的终端自己处理选择,而不是将其传递给 Claude Code,因此 `Cmd+C` 等复制快捷键可以在您选择的内容上工作。Claude Code 也会在其屏幕提示中显示正确的键。

175 194 

176如果您想进行一次性的原生选择,请在点击拖动时按住您的终端的绕过修饰键:iTerm2 中的 `Option`,或大多数 Linux Windows 终端中的 `Shift`。修饰键告诉您的终端自己处理选择而不是将鼠标事件转发给 Claude Code,因此 `Cmd+C` 和您的终端的其他复制快捷键可以在其上工作195 SSH 上或 tmux ,Claude Code 无法总是检测到您连接的终端,因此提示会列出候选键

177 196 

178如果您一直依赖原生选择,请设置 `CLAUDE_CODE_DISABLE_MOUSE=1` 以选择退出鼠标捕获,同时保持无闪烁渲染和平稳内存:197如果您一直依赖原生选择,请设置 `CLAUDE_CODE_DISABLE_MOUSE=1` 以选择退出鼠标捕获,同时保持无闪烁渲染和平稳内存:

179 198 

github-actions.md +103 −39

Details

12 Claude Code GitHub Actions 建立在 [Claude Agent SDK](/zh-CN/agent-sdk/overview) 之上,该 SDK 支持将 Claude Code 以编程方式集成到您的应用程序中。您可以使用该 SDK 构建超越 GitHub Actions 的自定义自动化工作流。12 Claude Code GitHub Actions 建立在 [Claude Agent SDK](/zh-CN/agent-sdk/overview) 之上,该 SDK 支持将 Claude Code 以编程方式集成到您的应用程序中。您可以使用该 SDK 构建超越 GitHub Actions 的自定义自动化工作流。

13</Note>13</Note>

14 14 

15<Info>15<h2 id="why-use-claude-code-github-actions">

16 **Claude Opus 4.8 现已推出。** Claude Code GitHub Actions 默认使用 Sonnet。要使用 Opus 4.8,请配置 [model 参数](#breaking-changes-reference)以使用 `claude-opus-4-8`。16 为什么使用 Claude Code GitHub Actions

17</Info>17</h2>

18 

19## 为什么使用 Claude Code GitHub Actions?

20 18 

21* **即时 PR 创建**:描述您需要什么,Claude 会创建一个包含所有必要更改的完整 PR19* **即时 PR 创建**:描述您需要什么,Claude 会创建一个包含所有必要更改的完整 PR

22* **自动化代码实现**:通过单个命令将 issue 转换为可工作的代码20* **自动化代码实现**:通过单个命令将 issue 转换为可工作的代码


24* **简单设置**:通过我们的安装程序和 API 密钥在几分钟内开始使用22* **简单设置**:通过我们的安装程序和 API 密钥在几分钟内开始使用

25* **默认安全**:您的代码保留在 Github 的运行器上23* **默认安全**:您的代码保留在 Github 的运行器上

26 24 

27## Claude 可以做什么?25<h2 id="what-can-claude-do">

26 Claude 可以做什么?

27</h2>

28 28 

29Claude Code 提供了一个强大的 GitHub Action,改变了您处理代码的方式:29Claude Code 提供了一个强大的 GitHub Action,改变了您处理代码的方式:

30 30 

31### Claude Code Action31<h3 id="claude-code-action">

32 Claude Code Action

33</h3>

32 34 

33这个 GitHub Action 允许您在 GitHub Actions 工作流中运行 Claude Code。您可以使用它在 Claude Code 之上构建任何自定义工作流。35这个 GitHub Action 允许您在 GitHub Actions 工作流中运行 Claude Code。您可以使用它在 Claude Code 之上构建任何自定义工作流。

34 36 

35[查看仓库 →](https://github.com/anthropics/claude-code-action)37[查看仓库 →](https://github.com/anthropics/claude-code-action)

36 38 

37## 设置39<h2 id="setup">

40 设置

41</h2>

38 42 

39## 快速设置43<h2 id="quick-setup">

44 快速设置

45</h2>

40 46 

41设置此 action 的最简单方法是通过终端中的 Claude Code。只需打开 claude 并运行 `/install-github-app`。47设置此 action 的最简单方法是通过终端中的 Claude Code。只需打开 claude 并运行 `/install-github-app`。

42 48 


48 * 此快速启动方法仅适用于直接 Claude API 用户。如果您使用 Amazon Bedrock 或 Google Vertex AI,请参阅 [使用 Amazon Bedrock 和 Google Vertex AI](#using-with-amazon-bedrock-%26-google-vertex-ai) 部分。54 * 此快速启动方法仅适用于直接 Claude API 用户。如果您使用 Amazon Bedrock 或 Google Vertex AI,请参阅 [使用 Amazon Bedrock 和 Google Vertex AI](#using-with-amazon-bedrock-%26-google-vertex-ai) 部分。

49</Note>55</Note>

50 56 

51## 手动设置57<h2 id="manual-setup">

58 手动设置

59</h2>

52 60 

53如果 `/install-github-app` 命令失败或您更喜欢手动设置,请按照以下手动设置说明进行操作:61如果 `/install-github-app` 命令失败或您更喜欢手动设置,请按照以下手动设置说明进行操作:

54 62 


68 完成快速启动或手动设置后,通过在 issue 或 PR 评论中标记 `@claude` 来测试该 action。76 完成快速启动或手动设置后,通过在 issue 或 PR 评论中标记 `@claude` 来测试该 action。

69</Tip>77</Tip>

70 78 

71## 从 Beta 升级79<h2 id="upgrading-from-beta">

80 从 Beta 升级

81</h2>

72 82 

73<Warning>83<Warning>

74 Claude Code GitHub Actions v1.0 引入了重大更改,需要更新您的工作流文件才能从 beta 版本升级到 v1.0。84 Claude Code GitHub Actions v1.0 引入了重大更改,需要更新您的工作流文件才能从 beta 版本升级到 v1.0。


76 86 

77如果您当前使用 Claude Code GitHub Actions 的 beta 版本,我们建议您更新工作流以使用 GA 版本。新版本简化了配置,同时添加了强大的新功能,如自动模式检测。87如果您当前使用 Claude Code GitHub Actions 的 beta 版本,我们建议您更新工作流以使用 GA 版本。新版本简化了配置,同时添加了强大的新功能,如自动模式检测。

78 88 

79### 基本更改89<h3 id="essential-changes">

90 基本更改

91</h3>

80 92 

81所有 beta 用户必须对其工作流文件进行这些更改才能升级:93所有 beta 用户必须对其工作流文件进行这些更改才能升级:

82 94 


853. **更新提示输入**:将 `direct_prompt` 替换为 `prompt`973. **更新提示输入**:将 `direct_prompt` 替换为 `prompt`

864. **移动 CLI 选项**:将 `max_turns`、`model`、`custom_instructions` 等转换为 `claude_args`984. **移动 CLI 选项**:将 `max_turns`、`model`、`custom_instructions` 等转换为 `claude_args`

87 99 

88### 重大更改参考100<h3 id="breaking-changes-reference">

101 重大更改参考

102</h3>

89 103 

90| 旧 Beta 输入 | 新 v1.0 输入 |104| 旧 Beta 输入 | 新 v1.0 输入 |

91| --------------------- | ------------------------------------- |105| --------------------- | ------------------------------------- |


99| `disallowed_tools` | `claude_args: --disallowedTools` |113| `disallowed_tools` | `claude_args: --disallowedTools` |

100| `claude_env` | `settings` JSON 格式 |114| `claude_env` | `settings` JSON 格式 |

101 115 

102### 前后示例116<h3 id="before-and-after-example">

117 前后示例

118</h3>

103 119 

104**Beta 版本:**120**Beta 版本:**

105 121 


131 该 action 现在根据您的配置自动检测是在交互模式(响应 `@claude` 提及)还是自动化模式(立即使用提示运行)下运行。147 该 action 现在根据您的配置自动检测是在交互模式(响应 `@claude` 提及)还是自动化模式(立即使用提示运行)下运行。

132</Tip>148</Tip>

133 149 

134## 示例用例150<h2 id="example-use-cases">

151 示例用例

152</h2>

135 153 

136Claude Code GitHub Actions 可以帮助您完成各种任务。[examples 目录](https://github.com/anthropics/claude-code-action/tree/main/examples)包含针对不同场景的现成工作流。154Claude Code GitHub Actions 可以帮助您完成各种任务。[examples 目录](https://github.com/anthropics/claude-code-action/tree/main/examples)包含针对不同场景的现成工作流。

137 155 

138### 基本工作流156<h3 id="basic-workflow">

157 基本工作流

158</h3>

139 159 

140```yaml theme={null}160```yaml theme={null}

141name: Claude Code161name: Claude Code


154 # Responds to @claude mentions in comments174 # Responds to @claude mentions in comments

155```175```

156 176 

157### 使用 skills177<h3 id="using-skills">

178 使用 skills

179</h3>

158 180 

159`prompt` 输入接受 [skill](/zh-CN/skills) 调用以及纯文本:181`prompt` 输入接受 [skill](/zh-CN/skills) 调用以及纯文本:

160 182 


180 prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"202 prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"

181```203```

182 204 

183### 使用提示的自定义自动化205<h3 id="custom-automation-with-prompts">

206 使用提示的自定义自动化

207</h3>

184 208 

185```yaml theme={null}209```yaml theme={null}

186name: Daily Report210name: Daily Report


198 claude_args: "--model opus"222 claude_args: "--model opus"

199```223```

200 224 

201### 常见用例225<h3 id="common-use-cases">

226 常见用例

227</h3>

202 228 

203在 issue 或 PR 评论中:229在 issue 或 PR 评论中:

204 230 


210 236 

211Claude 将自动分析上下文并做出适当的响应。237Claude 将自动分析上下文并做出适当的响应。

212 238 

213## 最佳实践239<h2 id="best-practices">

240 最佳实践

241</h2>

214 242 

215### CLAUDE.md 配置243<h3 id="claude-md-configuration">

244 CLAUDE.md 配置

245</h3>

216 246 

217在您的仓库根目录创建一个 `CLAUDE.md` 文件来定义代码风格指南、审查标准、项目特定规则和首选模式。此文件指导 Claude 对您的项目标准的理解。247在您的仓库根目录创建一个 `CLAUDE.md` 文件来定义代码风格指南、审查标准、项目特定规则和首选模式。此文件指导 Claude 对您的项目标准的理解。

218 248 

219### 安全考虑249<h3 id="security-considerations">

250 安全考虑

251</h3>

220 252 

221<Warning>永远不要直接将 API 密钥提交到您的仓库。</Warning>253<Warning>永远不要直接将 API 密钥提交到您的仓库。</Warning>

222 254 


231 263 

232始终使用 GitHub Secrets(例如,`${{ secrets.ANTHROPIC_API_KEY }}`)而不是直接在工作流文件中硬编码 API 密钥。264始终使用 GitHub Secrets(例如,`${{ secrets.ANTHROPIC_API_KEY }}`)而不是直接在工作流文件中硬编码 API 密钥。

233 265 

234### 优化性能266<h3 id="optimizing-performance">

267 优化性能

268</h3>

235 269 

236使用 issue 模板提供上下文,保持您的 `CLAUDE.md` 简洁和专注,并为您的工作流配置适当的超时。270使用 issue 模板提供上下文,保持您的 `CLAUDE.md` 简洁和专注,并为您的工作流配置适当的超时。

237 271 

238### CI 成本272<h3 id="ci-costs">

273 CI 成本

274</h3>

239 275 

240使用 Claude Code GitHub Actions 时,请注意相关成本:276使用 Claude Code GitHub Actions 时,请注意相关成本:

241 277 


257* 设置工作流级别的超时以避免失控的作业293* 设置工作流级别的超时以避免失控的作业

258* 考虑使用 GitHub 的并发控制来限制并行运行294* 考虑使用 GitHub 的并发控制来限制并行运行

259 295 

260## 配置示例296<h2 id="configuration-examples">

297 配置示例

298</h2>

261 299 

262Claude Code Action v1 使用统一参数简化了配置:300Claude Code Action v1 使用统一参数简化了配置:

263 301 


282 当响应 issue 或 PR 评论时,Claude 会自动响应 @claude 提及。对于其他事件,使用 `prompt` 参数提供说明。320 当响应 issue 或 PR 评论时,Claude 会自动响应 @claude 提及。对于其他事件,使用 `prompt` 参数提供说明。

283</Tip>321</Tip>

284 322 

285## 使用 Amazon Bedrock 和 Google Vertex AI323<h2 id="using-with-amazon-bedrock--google-vertex-ai">

324 使用 Amazon Bedrock 和 Google Vertex AI

325</h2>

286 326 

287对于企业环境,您可以将 Claude Code GitHub Actions 与您自己的云基础设施一起使用。这种方法让您可以控制数据驻留和计费,同时保持相同的功能。327对于企业环境,您可以将 Claude Code GitHub Actions 与您自己的云基础设施一起使用。这种方法让您可以控制数据驻留和计费,同时保持相同的功能。

288 328 

289### 前置条件329<h3 id="prerequisites">

330 前置条件

331</h3>

290 332 

291在使用云提供商设置 Claude Code GitHub Actions 之前,您需要:333在使用云提供商设置 Claude Code GitHub Actions 之前,您需要:

292 334 

293#### 对于 Google Cloud Vertex AI:335<h4 id="for-google-cloud-vertex-ai">

336 对于 Google Cloud Vertex AI:

337</h4>

294 338 

2951. 启用了 Vertex AI 的 Google Cloud 项目3391. 启用了 Vertex AI 的 Google Cloud 项目

2962. 为 GitHub Actions 配置的工作负载身份联合3402. 为 GitHub Actions 配置的工作负载身份联合

2973. 具有所需权限的服务账户3413. 具有所需权限的服务账户

2984. GitHub 应用(推荐)或使用默认 GITHUB\_TOKEN3424. GitHub 应用(推荐)或使用默认 GITHUB\_TOKEN

299 343 

300#### 对于 Amazon Bedrock:344<h4 id="for-amazon-bedrock">

345 对于 Amazon Bedrock:

346</h4>

301 347 

3021. 启用了 Amazon Bedrock 的 AWS 账户3481. 启用了 Amazon Bedrock 的 AWS 账户

3032. 在 AWS 中配置的 GitHub OIDC 身份提供商3492. 在 AWS 中配置的 GitHub OIDC 身份提供商


447 * `APP_ID`:您的 GitHub 应用的 ID493 * `APP_ID`:您的 GitHub 应用的 ID

448 * `APP_PRIVATE_KEY`:私钥 (.pem) 内容494 * `APP_PRIVATE_KEY`:私钥 (.pem) 内容

449 495 

450 #### 对于 AWS Bedrock496 #### 对于 Amazon Bedrock

451 497 

452 1. **对于 AWS 身份验证**:498 1. **对于 AWS 身份验证**:

453 * `AWS_ROLE_TO_ASSUME`499 * `AWS_ROLE_TO_ASSUME`


609 </Step>655 </Step>

610</Steps>656</Steps>

611 657 

612## 故障排除658<h2 id="troubleshooting">

659 故障排除

660</h2>

613 661 

614### Claude 不响应 @claude 命令662<h3 id="claude-not-responding-to-claude-commands">

663 Claude 不响应 @claude 命令

664</h3>

615 665 

616验证 GitHub 应用是否正确安装,检查工作流是否已启用,确保 API 密钥在仓库密钥中设置,并确认评论包含 `@claude`(不是 `/claude`)。666验证 GitHub 应用是否正确安装,检查工作流是否已启用,确保 API 密钥在仓库密钥中设置,并确认评论包含 `@claude`(不是 `/claude`)。

617 667 

618### CI 不在 Claude 的提交上运行668<h3 id="ci-not-running-on-claude’s-commits">

669 CI 不在 Claude 的提交上运行

670</h3>

619 671 

620确保您使用的是 GitHub 应用或自定义应用(不是 Actions 用户),检查工作流触发器是否包含必要的事件,并验证应用权限是否包括 CI 触发器。672确保您使用的是 GitHub 应用或自定义应用(不是 Actions 用户),检查工作流触发器是否包含必要的事件,并验证应用权限是否包括 CI 触发器。

621 673 

622### 身份验证错误674<h3 id="authentication-errors">

675 身份验证错误

676</h3>

623 677 

624确认 API 密钥有效且具有足够的权限。对于 Bedrock/Vertex,检查凭证配置并确保密钥在工作流中正确命名。678确认 API 密钥有效且具有足够的权限。对于 Bedrock/Vertex,检查凭证配置并确保密钥在工作流中正确命名。

625 679 

626## 高级配置680<h2 id="advanced-configuration">

681 高级配置

682</h2>

627 683 

628### Action 参数684<h3 id="action-parameters">

685 Action 参数

686</h3>

629 687 

630Claude Code Action v1 使用简化的配置:688Claude Code Action v1 使用简化的配置:

631 689 


644\*提示是可选的 - 当对 issue/PR 评论省略时,Claude 响应触发短语\702\*提示是可选的 - 当对 issue/PR 评论省略时,Claude 响应触发短语\

645\*\*对于直接 Claude API 是必需的,对于 Bedrock/Vertex 不是必需的703\*\*对于直接 Claude API 是必需的,对于 Bedrock/Vertex 不是必需的

646 704 

647#### 传递 CLI 参数705<h4 id="pass-cli-arguments">

706 传递 CLI 参数

707</h4>

648 708 

649`claude_args` 参数接受任何 Claude Code CLI 参数:709`claude_args` 参数接受任何 Claude Code CLI 参数:

650 710 


660* `--allowedTools`:允许的工具的逗号分隔列表。`--allowed-tools` 别名也可以使用。720* `--allowedTools`:允许的工具的逗号分隔列表。`--allowed-tools` 别名也可以使用。

661* `--debug`:启用调试输出721* `--debug`:启用调试输出

662 722 

663### 替代集成方法723<h3 id="alternative-integration-methods">

724 替代集成方法

725</h3>

664 726 

665虽然 `/install-github-app` 命令是推荐的方法,但您也可以:727虽然 `/install-github-app` 命令是推荐的方法,但您也可以:

666 728 


670 732 

671有关身份验证、安全和高级配置的详细指南,请参阅 [Claude Code Action 文档](https://github.com/anthropics/claude-code-action/blob/main/docs)。733有关身份验证、安全和高级配置的详细指南,请参阅 [Claude Code Action 文档](https://github.com/anthropics/claude-code-action/blob/main/docs)。

672 734 

673### 自定义 Claude 的行为735<h3 id="customizing-claude’s-behavior">

736 自定义 Claude 的行为

737</h3>

674 738 

675您可以通过两种方式配置 Claude 的行为:739您可以通过两种方式配置 Claude 的行为:

676 740 

Details

205 GHES 实例无法访问205 GHES 实例无法访问

206</h3>206</h3>

207 207 

208如果审查或网络会话超时,您的 GHES 实例可能无法从 Anthropic 基础设施访问。确认您的防火墙允许来自 [Anthropic API IP 地址](https://platform.claude.com/docs/en/api/ip-addresses) 的入站连接。208如果审查或网络会话超时,您的 GHES 实例可能无法从 Anthropic 基础设施访问。确认您的防火墙允许来自 [Anthropic API IP 地址](https://platform.claude.com/docs/zh-CN/api/ip-addresses) 的入站连接。

209 209 

210<h2 id="related-resources">210<h2 id="related-resources">

211 相关资源211 相关资源

gitlab-ci-cd.md +85 −29

Details

16 此集成基于 [Claude Code CLI and Agent SDK](/zh-CN/agent-sdk/overview) 构建,可在您的 CI/CD 作业和自定义自动化工作流中以编程方式使用 Claude。16 此集成基于 [Claude Code CLI and Agent SDK](/zh-CN/agent-sdk/overview) 构建,可在您的 CI/CD 作业和自定义自动化工作流中以编程方式使用 Claude。

17</Note>17</Note>

18 18 

19## 为什么在 GitLab 中使用 Claude Code?19<h2 id="why-use-claude-code-with-gitlab">

20 为什么在 GitLab 中使用 Claude Code?

21</h2>

20 22 

21* **即时 MR 创建**:描述您的需求,Claude 会提议一个完整的 MR,包含更改和说明23* **即时 MR 创建**:描述您的需求,Claude 会提议一个完整的 MR,包含更改和说明

22* **自动化实现**:使用单个命令或提及将问题转化为可工作的代码24* **自动化实现**:使用单个命令或提及将问题转化为可工作的代码


25* **企业就绪**:选择 Claude API、Amazon Bedrock 或 Google Vertex AI 以满足数据驻留和采购需求27* **企业就绪**:选择 Claude API、Amazon Bedrock 或 Google Vertex AI 以满足数据驻留和采购需求

26* **默认安全**:在您的 GitLab runners 中运行,具有您的分支保护和批准28* **默认安全**:在您的 GitLab runners 中运行,具有您的分支保护和批准

27 29 

28## 工作原理30<h2 id="how-it-works">

31 工作原理

32</h2>

29 33 

30Claude Code 使用 GitLab CI/CD 在隔离的作业中运行 AI 任务,并通过 MR 将结果提交回来:34Claude Code 使用 GitLab CI/CD 在隔离的作业中运行 AI 任务,并通过 MR 将结果提交回来:

31 35 


40 44 

41选择区域端点以降低延迟并满足数据主权要求,同时使用现有的云协议。45选择区域端点以降低延迟并满足数据主权要求,同时使用现有的云协议。

42 46 

43## Claude 可以做什么?47<h2 id="what-can-claude-do">

48 Claude 可以做什么?

49</h2>

44 50 

45Claude Code 支持强大的 CI/CD 工作流,改变您处理代码的方式:51Claude Code 支持强大的 CI/CD 工作流,改变您处理代码的方式:

46 52 


50* 修复由测试或评论识别的错误和回归56* 修复由测试或评论识别的错误和回归

51* 响应后续评论以迭代所请求的更改57* 响应后续评论以迭代所请求的更改

52 58 

53## 设置59<h2 id="setup">

60 设置

61</h2>

54 62 

55### 快速设置63<h3 id="quick-setup">

64 快速设置

65</h3>

56 66 

57最快的入门方式是向您的 `.gitlab-ci.yml` 添加一个最小作业,并将您的 API 密钥设置为掩码变量。67最快的入门方式是向您的 `.gitlab-ci.yml` 添加一个最小作业,并将您的 API 密钥设置为掩码变量。

58 68 


98添加作业和您的 `ANTHROPIC_API_KEY` 变量后,通过从 **CI/CD** → **Pipelines** 手动运行作业进行测试,或从 MR 触发它,让 Claude 在分支中提议更新并在需要时打开 MR。108添加作业和您的 `ANTHROPIC_API_KEY` 变量后,通过从 **CI/CD** → **Pipelines** 手动运行作业进行测试,或从 MR 触发它,让 Claude 在分支中提议更新并在需要时打开 MR。

99 109 

100<Note>110<Note>

101 要改为在 Amazon Bedrock 或 Google Vertex AI 上运行而不是 Claude API,请参阅下面的 [Using with Amazon Bedrock & Google Vertex AI](#using-with-amazon-bedrock--google-vertex-ai) 部分,了解身份验证和环境设置。111 要改为在 Amazon Bedrock 或 Google Vertex AI 上运行而不是 Claude API,请参阅下面的 [Using with Amazon Bedrock & Google Vertex AI](#using-with-amazon-bedrock-%26-google-vertex-ai) 部分,了解身份验证和环境设置。

102</Note>112</Note>

103 113 

104### 手动设置(建议用于生产)114<h3 id="manual-setup-recommended-for-production">

115 手动设置(建议用于生产)

116</h3>

105 117 

106如果您更喜欢更受控的设置或需要企业提供商:118如果您更喜欢更受控的设置或需要企业提供商:

107 119 


120 * 为"Comments (notes)"添加项目 webhook 到您的事件监听器(如果您使用)132 * 为"Comments (notes)"添加项目 webhook 到您的事件监听器(如果您使用)

121 * 当评论包含 `@claude` 时,让监听器使用 `AI_FLOW_INPUT` 和 `AI_FLOW_CONTEXT` 等变量调用管道触发 API133 * 当评论包含 `@claude` 时,让监听器使用 `AI_FLOW_INPUT` 和 `AI_FLOW_CONTEXT` 等变量调用管道触发 API

122 134 

123## 示例用例135<h2 id="example-use-cases">

136 示例用例

137</h2>

124 138 

125### 将问题转化为 MR139<h3 id="turn-issues-into-mrs">

140 将问题转化为 MR

141</h3>

126 142 

127在问题评论中:143在问题评论中:

128 144 


132 148 

133Claude 分析问题和代码库,在分支中编写更改,并打开 MR 供审查。149Claude 分析问题和代码库,在分支中编写更改,并打开 MR 供审查。

134 150 

135### 获取实现帮助151<h3 id="get-implementation-help">

152 获取实现帮助

153</h3>

136 154 

137在 MR 讨论中:155在 MR 讨论中:

138 156 


142 160 

143Claude 提议更改,添加具有适当缓存的代码,并更新 MR。161Claude 提议更改,添加具有适当缓存的代码,并更新 MR。

144 162 

145### 快速修复错误163<h3 id="fix-bugs-quickly">

164 快速修复错误

165</h3>

146 166 

147在问题或 MR 评论中:167在问题或 MR 评论中:

148 168 


152 172 

153Claude 定位错误,实现修复,并更新分支或打开新 MR。173Claude 定位错误,实现修复,并更新分支或打开新 MR。

154 174 

155## 使用 Amazon Bedrock 和 Google Vertex AI175<h2 id="using-with-amazon-bedrock--google-vertex-ai">

176 使用 Amazon Bedrock 和 Google Vertex AI

177</h2>

156 178 

157对于企业环境,您可以在云基础设施上完全运行 Claude Code,具有相同的开发者体验。179对于企业环境,您可以在云基础设施上完全运行 Claude Code,具有相同的开发者体验。

158 180 


238 </Tab>260 </Tab>

239</Tabs>261</Tabs>

240 262 

241## 配置示例263<h2 id="configuration-examples">

264 配置示例

265</h2>

242 266 

243以下是您可以适配到管道的现成代码片段。267以下是您可以适配到管道的现成代码片段。

244 268 

245### 基本 .gitlab-ci.yml(Claude API)269<h3 id="basic-gitlab-ci-yml-claude-api">

270 基本 .gitlab-ci.yml(Claude API)

271</h3>

246 272 

247```yaml theme={null}273```yaml theme={null}

248stages:274stages:


271 # Claude Code 将使用 CI/CD 变量中的 ANTHROPIC_API_KEY297 # Claude Code 将使用 CI/CD 变量中的 ANTHROPIC_API_KEY

272```298```

273 299 

274### Amazon Bedrock 作业示例(OIDC)300<h3 id="amazon-bedrock-job-example-oidc">

301 Amazon Bedrock 作业示例(OIDC)

302</h3>

275 303 

276**前置条件:**304**前置条件:**

277 305 


322 Bedrock 的模型 ID 包括特定于区域的前缀(例如,`us.anthropic.claude-sonnet-4-6`)。如果您的工作流支持,通过您的作业配置或提示传递所需的模型。350 Bedrock 的模型 ID 包括特定于区域的前缀(例如,`us.anthropic.claude-sonnet-4-6`)。如果您的工作流支持,通过您的作业配置或提示传递所需的模型。

323</Note>351</Note>

324 352 

325### Google Vertex AI 作业示例(Workload Identity Federation)353<h3 id="google-vertex-ai-job-example-workload-identity-federation">

354 Google Vertex AI 作业示例(Workload Identity Federation)

355</h3>

326 356 

327**前置条件:**357**前置条件:**

328 358 


375 使用 Workload Identity Federation,您无需存储服务账户密钥。使用特定于存储库的信任条件和最小权限服务账户。405 使用 Workload Identity Federation,您无需存储服务账户密钥。使用特定于存储库的信任条件和最小权限服务账户。

376</Note>406</Note>

377 407 

378## 最佳实践408<h2 id="best-practices">

409 最佳实践

410</h2>

379 411 

380### CLAUDE.md 配置412<h3 id="claude-md-configuration">

413 CLAUDE.md 配置

414</h3>

381 415 

382在存储库根目录创建 `CLAUDE.md` 文件以定义编码标准、审查标准和项目特定规则。Claude 在运行期间读取此文件,并在提议更改时遵循您的约定。416在存储库根目录创建 `CLAUDE.md` 文件以定义编码标准、审查标准和项目特定规则。Claude 在运行期间读取此文件,并在提议更改时遵循您的约定。

383 417 

384### 安全考虑418<h3 id="security-considerations">

419 安全考虑

420</h3>

385 421 

386**永远不要将 API 密钥或云凭证提交到您的存储库**。始终使用 GitLab CI/CD 变量:422**永远不要将 API 密钥或云凭证提交到您的存储库**。始终使用 GitLab CI/CD 变量:

387 423 


390* 限制作业权限和网络出口426* 限制作业权限和网络出口

391* 像审查任何其他贡献者一样审查 Claude 的 MR427* 像审查任何其他贡献者一样审查 Claude 的 MR

392 428 

393### 优化性能429<h3 id="optimizing-performance">

430 优化性能

431</h3>

394 432 

395* 保持 `CLAUDE.md` 专注和简洁433* 保持 `CLAUDE.md` 专注和简洁

396* 提供清晰的问题/MR 描述以减少迭代434* 提供清晰的问题/MR 描述以减少迭代

397* 配置合理的作业超时以避免失控运行435* 配置合理的作业超时以避免失控运行

398* 在可能的情况下在 runners 中缓存 npm 和包安装436* 在可能的情况下在 runners 中缓存 npm 和包安装

399 437 

400### CI 成本438<h3 id="ci-costs">

439 CI 成本

440</h3>

401 441 

402在 GitLab CI/CD 中使用 Claude Code 时,请注意相关成本:442在 GitLab CI/CD 中使用 Claude Code 时,请注意相关成本:

403 443 


415 * 设置适当的 `max_turns` 和作业超时值455 * 设置适当的 `max_turns` 和作业超时值

416 * 限制并发以控制并行运行456 * 限制并发以控制并行运行

417 457 

418## 安全和治理458<h2 id="security-and-governance">

459 安全和治理

460</h2>

419 461 

420* 每个作业都在具有受限网络访问的隔离容器中运行462* 每个作业都在具有受限网络访问的隔离容器中运行

421* Claude 的更改通过 MR 流动,以便审查者可以看到每个差异463* Claude 的更改通过 MR 流动,以便审查者可以看到每个差异


423* Claude Code 使用工作区范围的权限来限制写入465* Claude Code 使用工作区范围的权限来限制写入

424* 成本保持在您的控制下,因为您带来自己的提供商凭证466* 成本保持在您的控制下,因为您带来自己的提供商凭证

425 467 

426## 故障排除468<h2 id="troubleshooting">

469 故障排除

470</h2>

427 471 

428### Claude 不响应 @claude 命令472<h3 id="claude-not-responding-to-claude-commands">

473 Claude 不响应 @claude 命令

474</h3>

429 475 

430* 验证您的管道是否被触发(手动、MR 事件或通过注释事件监听器/webhook)476* 验证您的管道是否被触发(手动、MR 事件或通过注释事件监听器/webhook)

431* 确保 CI/CD 变量(`ANTHROPIC_API_KEY` 或云提供商设置)存在且未掩码477* 确保 CI/CD 变量(`ANTHROPIC_API_KEY` 或云提供商设置)存在且未掩码

432* 检查评论是否包含 `@claude`(不是 `/claude`)以及您的提及触发器是否已配置478* 检查评论是否包含 `@claude`(不是 `/claude`)以及您的提及触发器是否已配置

433 479 

434### 作业无法写入评论或打开 MR480<h3 id="job-can’t-write-comments-or-open-mrs">

481 作业无法写入评论或打开 MR

482</h3>

435 483 

436* 确保 `CI_JOB_TOKEN` 对项目具有足够的权限,或使用具有 `api` 范围的项目访问令牌484* 确保 `CI_JOB_TOKEN` 对项目具有足够的权限,或使用具有 `api` 范围的项目访问令牌

437* 检查 `mcp__gitlab` 工具是否在 `--allowedTools` 中启用485* 检查 `mcp__gitlab` 工具是否在 `--allowedTools` 中启用

438* 确认作业在 MR 的上下文中运行或通过 `AI_FLOW_*` 变量有足够的上下文486* 确认作业在 MR 的上下文中运行或通过 `AI_FLOW_*` 变量有足够的上下文

439 487 

440### 身份验证错误488<h3 id="authentication-errors">

489 身份验证错误

490</h3>

441 491 

442* **对于 Claude API**:确认 `ANTHROPIC_API_KEY` 有效且未过期492* **对于 Claude API**:确认 `ANTHROPIC_API_KEY` 有效且未过期

443* **对于 Bedrock/Vertex**:验证 OIDC/WIF 配置、角色模拟和密钥名称;确认区域和模型可用性493* **对于 Bedrock/Vertex**:验证 OIDC/WIF 配置、角色模拟和密钥名称;确认区域和模型可用性

444 494 

445## 高级配置495<h2 id="advanced-configuration">

496 高级配置

497</h2>

446 498 

447### 常见参数和变量499<h3 id="common-parameters-and-variables">

500 常见参数和变量

501</h3>

448 502 

449Claude Code 支持这些常用输入:503Claude Code 支持这些常用输入:

450 504 


458 确切的标志和参数可能因 `@anthropic-ai/claude-code` 的版本而异。在您的作业中运行 `claude --help` 以查看支持的选项。512 确切的标志和参数可能因 `@anthropic-ai/claude-code` 的版本而异。在您的作业中运行 `claude --help` 以查看支持的选项。

459</Note>513</Note>

460 514 

461### 自定义 Claude 的行为515<h3 id="customizing-claude’s-behavior">

516 自定义 Claude 的行为

517</h3>

462 518 

463您可以通过两种主要方式指导 Claude:519您可以通过两种主要方式指导 Claude:

464 520 

glossary.md +2 −2

Details

162 Effort level162 Effort level

163</h3>163</h3>

164 164 

165一个设置,控制 Claude 在每个回合上使用多少自适应推理思考预算。更高的努力意味着更多的思考 tokens 和更深入的推理;更低的努力更快且更便宜。Effort 在 Opus 4.6 及更高版本以及 Sonnet 4.6 上受支持。165一个设置,控制 Claude 在每个回合上使用多少自适应推理思考预算。更高的努力意味着更多的思考 tokens 和更深入的推理;更低的努力更快且更便宜。Effort 在 Fable 5、Opus 4.6 及更高版本以及 Sonnet 4.6 上受支持。

166 166 

167了解更多:[调整 effort level](/zh-CN/model-config#adjust-effort-level)167了解更多:[调整 effort level](/zh-CN/model-config#adjust-effort-level)

168 168 


170 Extended thinking170 Extended thinking

171</h3>171</h3>

172 172 

173模型在响应前执行的可见逐步推理。您可以使用 `MAX_THINKING_TOKENS` 限制思考 tokens 或调整 [effort level](#effort-level)。思考在终端中以灰色斜体文本显示。173模型在响应前执行的可见逐步推理。您可以使用 [effort level](#effort-level) 调整它,或使用 `MAX_THINKING_TOKENS` 在具有固定思考预算的模型上限制思考 tokens。思考在终端中以灰色斜体文本显示。

174 174 

175了解更多:[使用 extended thinking](/zh-CN/model-config#extended-thinking)175了解更多:[使用 extended thinking](/zh-CN/model-config#extended-thinking)

176 176 

Details

6 6 

7> 了解如何通过 Google Vertex AI 配置 Claude Code,包括设置、IAM 配置和故障排除。7> 了解如何通过 Google Vertex AI 配置 Claude Code,包括设置、IAM 配置和故障排除。

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79<ContactSalesCard surface="vertex" />

80 

9<h2 id="prerequisites">81<h2 id="prerequisites">

10 前置条件82 前置条件

11</h2>83</h2>


155</h3>227</h3>

156 228 

157<Warning>229<Warning>

158 在部署到多个用户时固定特定的模型版本。如果不固定,模型别名(如 `sonnet` 和 `opus`)会解析为最新版本,当 Anthropic 发布更新时,该版本可能尚未在您的 Vertex AI 项目中启用。Claude Code 在启动时当最新版本不可用时会[回退](#startup-model-checks)到之前的版本,但固定让您可以控制用户何时迁移到新模型。230 在部署到多个用户时固定特定的模型版本。如果不固定,模型别名(如 `sonnet` 和 `opus`)会解析为 Claude Code Vertex AI 内置默认值,该默认值可能滞后于最新版本,并且可能尚未在您的项目中启用。Claude Code 在启动时当默认值不可用时会[回退](#startup-model-checks)到之前的版本,但固定让您可以控制用户何时迁移到新模型。

159</Warning>231</Warning>

160 232 

161将这些环境变量设置为特定的 Vertex AI 模型 ID。233将这些环境变量设置为特定的 Vertex AI 模型 ID。

headless.md +11 −3

Details

62 `--bare` 是脚本和 SDK 调用的推荐模式,将在未来版本中成为 `-p` 的默认值。62 `--bare` 是脚本和 SDK 调用的推荐模式,将在未来版本中成为 `-p` 的默认值。

63</Note>63</Note>

64 64 

65<h3 id="background-tasks-at-exit">

66 退出时的后台任务

67</h3>

68 

69如果 Claude 在 `claude -p` 运行期间启动 [后台 Bash 任务](/zh-CN/tools-reference#bash-tool-behavior),例如开发服务器或监视构建,该任务将在 Claude 返回其最终结果并关闭 stdin 后约五秒钟被终止。宽限期允许在结果之后立即完成的任务仍然能够传递其输出。在 v2.1.163 之前,永不退出的后台进程会无限期地保持 `claude -p` 调用打开。

70 

65<h2 id="examples">71<h2 id="examples">

66 示例72 示例

67</h2>73</h2>


163当 API 请求因可重试错误而失败时,Claude Code 在重试前发出 `system/api_retry` 事件。您可以使用此来显示重试进度或实现自定义退避逻辑。169当 API 请求因可重试错误而失败时,Claude Code 在重试前发出 `system/api_retry` 事件。您可以使用此来显示重试进度或实现自定义退避逻辑。

164 170 

165| 字段 | 类型 | 描述 |171| 字段 | 类型 | 描述 |

166| ---------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |172| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

167| `type` | `"system"` | 消息类型 |173| `type` | `"system"` | 消息类型 |

168| `subtype` | `"api_retry"` | 将其标识为重试事件 |174| `subtype` | `"api_retry"` | 将其标识为重试事件 |

169| `attempt` | 整数 | 当前尝试次数,从 1 开始 |175| `attempt` | 整数 | 当前尝试次数,从 1 开始 |

170| `max_retries` | 整数 | 允许的总重试次数 |176| `max_retries` | 整数 | 允许的总重试次数 |

171| `retry_delay_ms` | 整数 | 毫秒直到下一次尝试 |177| `retry_delay_ms` | 整数 | 毫秒直到下一次尝试 |

172| `error_status` | 整数或 null | HTTP 状态代码,或 `null` 表示没有 HTTP 响应的连接错误 |178| `error_status` | 整数或 null | HTTP 状态代码,或 `null` 表示没有 HTTP 响应的连接错误 |

173| `error` | 字符串 | 错误类别:`authentication_failed`、`oauth_org_not_allowed`、`billing_error`、`rate_limit`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens` 或 `unknown` |179| `error` | 字符串 | 错误类别:`authentication_failed`、`oauth_org_not_allowed`、`billing_error`、`rate_limit`、`overloaded`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens` 或 `unknown` |

174| `uuid` | 字符串 | 唯一事件标识符 |180| `uuid` | 字符串 | 唯一事件标识符 |

175| `session_id` | 字符串 | 事件所属的会话 |181| `session_id` | 字符串 | 事件所属的会话 |

176 182 


226`--allowedTools` 标志使用 [权限规则语法](/zh-CN/settings#permission-rule-syntax)。尾部的 ` *` 启用前缀匹配,因此 `Bash(git diff *)` 允许任何以 `git diff` 开头的命令。空格在 `*` 之前很重要:没有它,`Bash(git diff*)` 也会匹配 `git diff-index`。232`--allowedTools` 标志使用 [权限规则语法](/zh-CN/settings#permission-rule-syntax)。尾部的 ` *` 启用前缀匹配,因此 `Bash(git diff *)` 允许任何以 `git diff` 开头的命令。空格在 `*` 之前很重要:没有它,`Bash(git diff*)` 也会匹配 `git diff-index`。

227 233 

228<Note>234<Note>

229 用户调用的 [skills](/zh-CN/skills) `/code-review` [内置命令](/zh-CN/commands) 仅在交互模式下可用。在 `-p` 模式下,改为描述您想要完成的任务235 用户调用的 [skills](/zh-CN/skills) 和自定义命令在 `-p` 模式下工作:在提示字符串中包含 `/skill-name`,Claude Code 会在运行前展开它打开交互对话框的内置命令,例如 `/config` 和 `/login`,在 `-p` 模式下不可用

230</Note>236</Note>

231 237 

232<h3 id="customize-the-system-prompt">238<h3 id="customize-the-system-prompt">


265claude -p "Continue that review" --resume "$session_id"271claude -p "Continue that review" --resume "$session_id"

266```272```

267 273 

274从同一目录运行两个命令:会话 ID 查找的范围限定为当前项目目录及其 git worktrees。有关完整范围规则,请参阅 [恢复会话](/zh-CN/sessions#resume-a-session)。

275 

268<h2 id="next-steps">276<h2 id="next-steps">

269 后续步骤277 后续步骤

270</h2>278</h2>

hooks.md +65 −26

Details

108现在假设 Claude Code 决定运行 `Bash "rm -rf /tmp/build"`。以下是发生的情况:108现在假设 Claude Code 决定运行 `Bash "rm -rf /tmp/build"`。以下是发生的情况:

109 109 

110<Frame>110<Frame>

111 <img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/hook-resolution.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=be0bf3053550c26de5f54cd64674c197" alt="Hook 解析流程:PreToolUse 事件触发,匹配器检查 Bash 匹配,if 条件检查 Bash(rm *) 匹配,hook 处理程序运行,结果返回到 Claude Code" width="930" height="270" data-path="images/hook-resolution.svg" />111 <img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/hook-resolution.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=be0bf3053550c26de5f54cd64674c197" alt="Hook 解析流程图:PreToolUse 触发,匹配器检查 Bash 匹配,然后 if 条件检查 Bash(rm *) 匹配。如果两者都匹配,hook 命令运行并返回 permissionDecision deny,因此工具调用被阻止,Claude Code 继续。如果任一检查未能匹配,hook 被跳过,工具调用被允许继续。" width="930" height="270" data-path="images/hook-resolution.svg" />

112</Frame>112</Frame>

113 113 

114<Steps>114<Steps>


174您定义 hook 的位置决定了其范围:174您定义 hook 的位置决定了其范围:

175 175 

176| 位置 | 范围 | 可共享 |176| 位置 | 范围 | 可共享 |

177| :---------------------------------------------------------- | :----- | :----------- |177| :---------------------------------------------------------- | :----- | :----------------------------- |

178| `~/.claude/settings.json` | 您的所有项目 | 否,本地于您的计算机 |178| `~/.claude/settings.json` | 您的所有项目 | 否,本地于您的计算机 |

179| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |179| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |

180| `.claude/settings.local.json` | 单个项目 | 否,gitignored |180| `.claude/settings.local.json` | 单个项目 | 否,gitignored 当 Claude Code 创建时 |

181| 托管策略设置 | 组织范围 | 是,管理员控制 |181| 托管策略设置 | 组织范围 | 是,管理员控制 |

182| [Plugin](/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |182| [Plugin](/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |

183| [Skill](/zh-CN/skills) 或[代理](/zh-CN/sub-agents) frontmatter | 组件活跃时 | 是,在组件文件中定义 |183| [Skill](/zh-CN/skills) 或[代理](/zh-CN/sub-agents) frontmatter | 组件活跃时 | 是,在组件文件中定义 |


311这些字段适用于所有 hook 类型:311这些字段适用于所有 hook 类型:

312 312 

313| 字段 | 必需 | 描述 |313| 字段 | 必需 | 描述 |

314| :-------------- | :- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |314| :-------------- | :- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

315| `type` | 是 | `"command"`、`"http"`、`"mcp_tool"`、`"prompt"` 或 `"agent"` |315| `type` | 是 | `"command"`、`"http"`、`"mcp_tool"`、`"prompt"` 或 `"agent"` |

316| `if` | 否 | 权限规则语法以过滤此 hook 何时运行,例如 `"Bash(git *)"` 或 `"Edit(*.ts)"`。仅当工具调用与模式匹配时,hook 才会生成,或当 Bash 命令太复杂而无法解析时。仅在工具事件上评估:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。在其他事件上,设置了 `if` 的 hook 永远不会运行。使用与[权限规则](/zh-CN/permissions)相同的语法 |316| `if` | 否 | 权限规则语法以过滤此 hook 何时运行,例如 `"Bash(git *)"` 或 `"Edit(*.ts)"`。hook 命令仅在工具调用与模式匹配时运行。请参阅下面的[Bash 匹配表](#bash-if-matching)了解 Bash 模式如何针对子命令、`$()`和反引号进行评估。仅在工具事件上评估:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。在其他事件上,设置了 `if` 的 hook 永远不会运行。使用与[权限规则](/zh-CN/permissions)相同的语法 |

317| `timeout` | 否 | 取消前的秒数。默认值:`command`、`http` 和 `mcp_tool` 为 600;`prompt` 为 30;`agent` 为 60。[`UserPromptSubmit`](#userpromptsubmit) 将 `command`、`http` 和 `mcp_tool` 的默认值降低到 30,[`MessageDisplay`](#messagedisplay) 将其降低到 10 |317| `timeout` | 否 | 取消前的秒数。默认值:`command`、`http` 和 `mcp_tool` 为 600;`prompt` 为 30;`agent` 为 60。[`UserPromptSubmit`](#userpromptsubmit) 将 `command`、`http` 和 `mcp_tool` 的默认值降低到 30,[`MessageDisplay`](#messagedisplay) 将其降低到 10 |

318| `statusMessage` | 否 | hook 运行时显示的自定义加载程序消息 |318| `statusMessage` | 否 | hook 运行时显示的自定义加载程序消息 |

319| `once` | 否 | 如果为 `true`,每个会话仅运行一次,然后被移除。仅在[skill frontmatter](#hooks-in-skills-and-agents)中声明的 hooks 中受尊重;在设置文件和代理 frontmatter 中被忽略 |319| `once` | 否 | 如果为 `true`,每个会话仅运行一次,然后被移除。仅在[skill frontmatter](#hooks-in-skills-and-agents)中声明的 hooks 中受尊重;在设置文件和代理 frontmatter 中被忽略 |

320 320 

321`if` 字段恰好包含一个权限规则。没有 `&&`、`||` 或列表语法来组合规则;要应用多个条件,请为每个条件定义一个单独的 hook 处理程序。对于 Bash,规则针对工具输入的每个子命令进行匹配,在去除前导 `VAR=value` 赋值后,因此 `if: "Bash(git push *)"` 既匹配 `FOO=bar git push` 也匹配 `npm test && git push`。如果任何子命令匹配,hook 会运行,并且在命令太复杂而无法解析时总是运行。321`if` 字段恰好包含一个权限规则。没有 `&&`、`||` 或列表语法来组合规则;要应用多个条件,请为每个条件定义一个单独的 hook 处理程序。

322 

323<span id="bash-if-matching" />对于 Bash 模式,您的 hook 命令是否运行取决于模式的形状和 Claude 调用的 Bash 命令。前导 `VAR=value` 赋值在匹配前被剥离。

324 

325| `if` 模式 | Bash 命令 | Hook 运行? | 原因 |

326| :----------------- | :--------------------- | :------- | :-------------------------------------- |

327| `Bash(git *)` | `FOO=bar git push` | 是 | 前导赋值被剥离;`git push` 匹配 |

328| `Bash(git *)` | `npm test && git push` | 是 | 每个子命令都被检查;`git push` 匹配 |

329| `Bash(rm *)` | `echo $(rm -rf /)` | 是 | `$()` 和反引号内的命令被检查;`rm -rf /` 匹配 |

330| `Bash(rm *)` | `echo $(date)` | 否 | 没有子命令匹配 `rm *` |

331| `Bash(git push *)` | `echo $(date)` | 是 | 指定超过命令名称的模式在 `$()`、反引号或 `$VAR` 上运行 hook |

332 

333过滤器也会失败开放,当 Bash 命令无法解析时无论如何运行您的 hook。因为 `if` 过滤器是尽力而为的,使用[权限系统](/zh-CN/permissions)而不是 hook 来强制执行硬允许或拒绝。

322 334 

323<h4 id="command-hook-fields">335<h4 id="command-hook-fields">

324 命令 hook 字段336 命令 hook 字段


461除了[通用字段](#common-fields)外,提示和代理 hooks 还接受这些字段:473除了[通用字段](#common-fields)外,提示和代理 hooks 还接受这些字段:

462 474 

463| 字段 | 必需 | 描述 |475| 字段 | 必需 | 描述 |

464| :------- | :- | :----------------------------------------------- |476| :------- | :- | :----------------------------------------------------------------------------------- |

465| `prompt` | 是 | 要发送给模型的提示文本。使用 `$ARGUMENTS` 作为 hook 输入 JSON 的占位符 |477| `prompt` | 是 | 要发送给模型的提示文本。使用 `$ARGUMENTS` 作为 hook 输入 JSON 的占位符。使用反斜杠转义以包含文字文本:`\$1.00` 呈现为 `$1.00` |

466| `model` | 否 | 用于评估的模型。默认为快速模型 |478| `model` | 否 | 用于评估的模型。默认为快速模型 |

467 479 

468所有匹配的 hooks 并行运行,相同的处理程序会自动去重。命令 hooks 按命令字符串和 `args` 去重,HTTP hooks 按 URL 去重。处理程序在当前目录中运行,使用 Claude Code 的环境。在远程 web 环境中,`$CLAUDE_CODE_REMOTE` 环境变量设置为 `"true"`,在本地 CLI 中未设置。480所有匹配的 hooks 并行运行,相同的处理程序会自动去重。命令 hooks 按命令字符串和 `args` 去重,HTTP hooks 按 URL 去重。处理程序在当前目录中运行,使用 Claude Code 的环境。在远程 web 环境中,`$CLAUDE_CODE_REMOTE` 环境变量设置为 `"true"`,在本地 CLI 中未设置。


619| `agent_id` | Subagent 的唯一标识符。仅当 hook 在 subagent 调用内触发时存在。使用此来区分 subagent hook 调用和主线程调用。 |631| `agent_id` | Subagent 的唯一标识符。仅当 hook 在 subagent 调用内触发时存在。使用此来区分 subagent hook 调用和主线程调用。 |

620| `agent_type` | 代理名称(例如,`"Explore"` 或 `"security-reviewer"`)。当会话使用 `--agent` 或 hook 在 subagent 内触发时存在。对于 subagents,subagent 的类型优先于会话的 `--agent` 值。对于[自定义 subagents](/zh-CN/sub-agents),这是代理 frontmatter 中的 `name` 字段,而不是文件名。 |632| `agent_type` | 代理名称(例如,`"Explore"` 或 `"security-reviewer"`)。当会话使用 `--agent` 或 hook 在 subagent 内触发时存在。对于 subagents,subagent 的类型优先于会话的 `--agent` 值。对于[自定义 subagents](/zh-CN/sub-agents),这是代理 frontmatter 中的 `name` 字段,而不是文件名。 |

621 633 

622仅[`SessionStart`](#sessionstart) hooks 接收 `model` 字段。没有 `$CLAUDE_MODEL` 环境变量。Hook 进程继承父环境,因此如果您在 shell 中设置了 `$ANTHROPIC_MODEL`,它可以读取该值,但当您在会话期间使用 `/model` 切换模型时,该值不会改变。634仅[`SessionStart`](#sessionstart) hooks 可以接收 `model` 字段,且不保证存在。没有 `$CLAUDE_MODEL` 环境变量。Hook 进程继承父环境,因此如果您在 shell 中设置了 `$ANTHROPIC_MODEL`,它可以读取该值,但当您在会话期间使用 `/model` 切换模型时,该值不会改变。

623 635 

624例如,Bash 命令的 `PreToolUse` hook 在 stdin 上接收:636例如,Bash 命令的 `PreToolUse` hook 在 stdin 上接收:

625 637 


782# Notification hook:当 Claude Code 需要注意时 ping 桌面。794# Notification hook:当 Claude Code 需要注意时 ping 桌面。

783input=$(cat)795input=$(cat)

784title="Claude Code'796title="Claude Code'

785body=$(jq -r '.message // 'Needs your attention'' <<<"$input")797body=$(jq -r '.message // 'Needs your attention'' <<<'$input")

786seq=$(printf '\033]777;notify;%s;%s\007' "$title" "$body")798seq=$(printf '\033]777;notify;%s;%s\007' "$title" "$body")

787jq -nc --arg seq "$seq" '{terminalSequence: $seq}'799jq -nc --arg seq "$seq" '{terminalSequence: $seq}'

788```800```


815* [SessionStart](#sessionstart)、[Setup](#setup) 和 [SubagentStart](#subagentstart):在对话开始,在第一个提示之前827* [SessionStart](#sessionstart)、[Setup](#setup) 和 [SubagentStart](#subagentstart):在对话开始,在第一个提示之前

816* [UserPromptSubmit](#userpromptsubmit) 和 [UserPromptExpansion](#userpromptexpansion):与提交的提示一起828* [UserPromptSubmit](#userpromptsubmit) 和 [UserPromptExpansion](#userpromptexpansion):与提交的提示一起

817* [PreToolUse](#pretooluse)、[PostToolUse](#posttooluse)、[PostToolUseFailure](#posttoolusefailure) 和 [PostToolBatch](#posttoolbatch):在工具结果旁边829* [PreToolUse](#pretooluse)、[PostToolUse](#posttooluse)、[PostToolUseFailure](#posttoolusefailure) 和 [PostToolBatch](#posttoolbatch):在工具结果旁边

830* [Stop](#stop) 和 [SubagentStop](#subagentstop):在轮次末尾。对话继续,以便 Claude 可以对反馈采取行动。请参阅[Stop 决定控制](#stop-decision-control)

818 831 

819当多个 hooks 为同一事件返回 `additionalContext` 时,Claude 接收所有值。如果值超过 10,000 个字符,Claude Code 将完整文本写入会话目录中的文件,并将 Claude 传递文件路径以及简短预览。832当多个 hooks 为同一事件返回 `additionalContext` 时,Claude 接收所有值。如果值超过 10,000 个字符,Claude Code 将完整文本写入会话目录中的文件,并将 Claude 传递文件路径以及简短预览。

820 833 


838 851 

839| 事件 | 决定模式 | 关键字段 |852| 事件 | 决定模式 | 关键字段 |

840| :-------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |853| :-------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

841| UserPromptSubmit、UserPromptExpansion、PostToolUse、PostToolUseFailure、PostToolBatch、Stop、SubagentStop、ConfigChange、PreCompact | 顶级 `decision` | `decision: "block"`、`reason` |854| UserPromptSubmit、UserPromptExpansion、PostToolUse、PostToolUseFailure、PostToolBatch、Stop、SubagentStop、ConfigChange、PreCompact | 顶级 `decision` | `decision: "block"`、`reason`。Stop 和 SubagentStop 也接受 `hookSpecificOutput.additionalContext` 用于[继续对话的非错误反馈](#stop-decision-control) |

842| TeammateIdle、TaskCreated、TaskCompleted | 退出代码或 `continue: false` | 退出代码 2 使用 stderr 反馈阻止操作。JSON `{"continue": false, "stopReason": "..."}` 也会完全停止队友,匹配 `Stop` hook 行为 |855| TeammateIdle、TaskCreated、TaskCompleted | 退出代码或 `continue: false` | 退出代码 2 使用 stderr 反馈阻止操作。JSON `{"continue": false, "stopReason": "..."}` 也会完全停止队友,匹配 `Stop` hook 行为 |

843| PreToolUse | `hookSpecificOutput` | `permissionDecision`(allow/deny/ask/defer)、`permissionDecisionReason` |856| PreToolUse | `hookSpecificOutput` | `permissionDecision`(allow/deny/ask/defer)、`permissionDecisionReason` |

844| PermissionRequest | `hookSpecificOutput` | `decision.behavior`(allow/deny) |857| PermissionRequest | `hookSpecificOutput` | `decision.behavior`(allow/deny) |


850| SessionStart、Setup、SubagentStart | 仅上下文 | `hookSpecificOutput.additionalContext` 为 Claude 添加上下文。SessionStart 也接受[`initialUserMessage`、`watchPaths`、`sessionTitle` 和 `reloadSkills`](#sessionstart-decision-control)。无阻止或决定控制 |863| SessionStart、Setup、SubagentStart | 仅上下文 | `hookSpecificOutput.additionalContext` 为 Claude 添加上下文。SessionStart 也接受[`initialUserMessage`、`watchPaths`、`sessionTitle` 和 `reloadSkills`](#sessionstart-decision-control)。无阻止或决定控制 |

851| WorktreeRemove、Notification、SessionEnd、PostCompact、InstructionsLoaded、StopFailure、CwdChanged、FileChanged | 无 | 无决定控制。用于日志记录或清理等副作用 |864| WorktreeRemove、Notification、SessionEnd、PostCompact、InstructionsLoaded、StopFailure、CwdChanged、FileChanged | 无 | 无决定控制。用于日志记录或清理等副作用 |

852 865 

866一些事件也可以重写内容而不仅仅允许或阻止它:

867 

868* `PreToolUse` — `updatedInput` 直接在 `hookSpecificOutput` 下替换工具的参数,然后它运行([详情](#pretooluse-decision-control))

869* `PermissionRequest` — `updatedInput` 在 `decision` 对象内([详情](#permissionrequest-decision-control))

870* `PostToolUse` — `updatedToolOutput` 替换工具的结果([详情](#posttooluse-decision-control))

871* `UserPromptSubmit` — 无法替换提示;仅在其旁边注入 `additionalContext`

872 

873对于编辑或转换用例,在 `PreToolUse` 处拦截出站工具输入,在 `PostToolUse` 处拦截入站工具结果。

874 

853以下是每种模式的实际示例:875以下是每种模式的实际示例:

854 876 

855<Tabs>877<Tabs>


926 SessionStart 输入948 SessionStart 输入

927</h4>949</h4>

928 950 

929除了[通用输入字段](#common-input-fields)外,SessionStart hooks 还接收 `source`、`model` 和可选的 `agent_type` 和 `session_title`。`source` 字段指示会话如何启动:新会话为 `"startup"`,恢复会话为 `"resume"`,`/clear` 后为 `"clear"`,压缩后为 `"compact"`。`model` 字段包含模型标识符。如果您使用 `claude --agent <name>` 启动 Claude Code,`agent_type` 字段包含代理名称。`session_title` 字段携带当前会话标题(如果已设置),例如通过 `--name` 或 `/rename`。发出 `sessionTitle` 的 hook 可以先检查 `session_title` 以避免覆盖用户显式设置的标题。951除了[通用输入字段](#common-input-fields)外,SessionStart hooks 还接收 `source` 和可选的 `model`、`agent_type` 和 `session_title`。`source` 字段指示会话如何启动:新会话为 `"startup"`,恢复会话为 `"resume"`,`/clear` 后为 `"clear"`,压缩后为 `"compact"`。`model` 字段包含活跃模型标识符它可以被省略,例如在 `/clear` 后或当会话通过对话恢复恢复时,因此在读取字段前检查它。如果您使用 `claude --agent <name>` 启动 Claude Code,`agent_type` 字段包含代理名称。`session_title` 字段携带当前会话标题(如果已设置),例如通过 `--name` 或 `/rename`。发出 `sessionTitle` 的 hook 可以先检查 `session_title` 以避免覆盖用户显式设置的标题。

930 952 

931```json theme={null}953```json theme={null}

932{954{


1506| `status` | string | `"completed"` | 同步调用为 `"completed"`,`run_in_background: true` 为 `"async_launched"` |1528| `status` | string | `"completed"` | 同步调用为 `"completed"`,`run_in_background: true` 为 `"async_launched"` |

1507| `agentId` | string | `"a4d2c8f1e0b3a297"` | subagent 运行的标识符 |1529| `agentId` | string | `"a4d2c8f1e0b3a297"` | subagent 运行的标识符 |

1508| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | subagent 的最终文本块 |1530| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | subagent 的最终文本块 |

1531| `resolvedModel` | string | `"claude-sonnet-4-5"` | subagent 运行的模型,可能与请求的模型不同。{/* min-version: 2.1.174 */}需要 Claude Code v2.1.174 或更高版本 |

1509| `totalTokens` | number | `12450` | 在 subagent 轮次中计费的总令牌数 |1532| `totalTokens` | number | `12450` | 在 subagent 轮次中计费的总令牌数 |

1510| `totalDurationMs` | number | `48211` | subagent 运行的挂钟时间 |1533| `totalDurationMs` | number | `48211` | subagent 运行的挂钟时间 |

1511| `totalToolUseCount` | number | `7` | subagent 进行的工具调用计数 |1534| `totalToolUseCount` | number | `7` | subagent 进行的工具调用计数 |

1512| `usage` | object | `{"input_tokens": 8320, ...}` | 按类型的令牌分解:`input_tokens`、`output_tokens`、`cache_creation_input_tokens`、`cache_read_input_tokens` |1535| `usage` | object | `{"input_tokens": 8320, ...}` | 按类型的令牌分解:`input_tokens`、`output_tokens`、`cache_creation_input_tokens`、`cache_read_input_tokens` |

1513 1536 

1514对于 `run_in_background: true` 调用,工具在启动 subagent 后立即返回,因此 `tool_response` 不携带使用字段。它具有 `status: "async_launched"`、`agentId`、`description`、`prompt` 和 `outputFile`。1537对于 `run_in_background: true` 调用,工具在启动 subagent 后立即返回,因此 `tool_response` 不携带使用字段。它具有 `status: "async_launched"`、`agentId`、`description`、`prompt`、`outputFile` 和 `resolvedModel`。

1538 

1539`resolvedModel` 字段命名 subagent 实际运行的模型,可能与 `tool_input` 中的 `model` 值不同。它需要 Claude Code v2.1.174 或更高版本。

1540 

1541<a id="askuserquestion" />

1515 1542 

1516<h5 id="askuserquestion">1543<h5 id="askuserquestion">

1517 AskUserQuestion1544 AskUserQuestion


2087}2114}

2088```2115```

2089 2116 

2090SubagentStop hooks 使用与[Stop hooks](#stop-decision-control)相同的决定控制格式。它们不支持 `additionalContext`。返回 `decision: "block"` 和 `reason` 保持 subagent 运行并将 `reason` 作为其下一个指令传递给 subagent。要在 subagent 返回后向父会话注入上下文,请改用 `Agent` 工具上的[`PostToolUse`](#posttooluse) hook。2117SubagentStop hooks 使用与[Stop hooks](#stop-decision-control)相同的决定控制格式,包括 `hookSpecificOutput.additionalContext` 和 `hookEventName` 设置为 `"SubagentStop"`,用于非错误反馈以保持 subagent 运行。返回 `decision: "block"` 和 `reason` 保持 subagent 运行并将 `reason` 作为其下一个指令传递给 subagent。要在 subagent 返回后向父会话注入上下文,请改用 `Agent` 工具上的[`PostToolUse`](#posttooluse) hook。

2091 2118 

2092<h3 id="taskcreated">2119<h3 id="taskcreated">

2093 TaskCreated2120 TaskCreated


2114 "task_subject": "Implement user authentication",2141 "task_subject": "Implement user authentication",

2115 "task_description": "Add login and signup endpoints",2142 "task_description": "Add login and signup endpoints",

2116 "teammate_name": "implementer",2143 "teammate_name": "implementer",

2117 "team_name": "my-project"2144 "team_name": "session-a1b2c3d4"

2118}2145}

2119```2146```

2120 2147 

2121| 字段 | 描述 |2148| 字段 | 描述 |

2122| :----------------- | :--------------- |2149| :----------------- | :---------------------- |

2123| `task_id` | 被创建的任务的标识符 |2150| `task_id` | 被创建的任务的标识符 |

2124| `task_subject` | 任务的标题 |2151| `task_subject` | 任务的标题 |

2125| `task_description` | 任务的详细描述。可能不存在 |2152| `task_description` | 任务的详细描述。可能不存在 |

2126| `teammate_name` | 创建任务的队友的名称。可能不存在 |2153| `teammate_name` | 创建任务的队友的名称。可能不存在 |

2127| `team_name` | 团队的名称可能不存在 |2154| `team_name` | 已弃用会话派生的团队名称;将在未来版本中删除 |

2128 2155 

2129<h4 id="taskcreated-decision-control">2156<h4 id="taskcreated-decision-control">

2130 TaskCreated 决定控制2157 TaskCreated 决定控制


2175 "task_subject": "Implement user authentication",2202 "task_subject": "Implement user authentication",

2176 "task_description": "Add login and signup endpoints",2203 "task_description": "Add login and signup endpoints",

2177 "teammate_name": "implementer",2204 "teammate_name": "implementer",

2178 "team_name": "my-project"2205 "team_name": "session-a1b2c3d4"

2179}2206}

2180```2207```

2181 2208 

2182| 字段 | 描述 |2209| 字段 | 描述 |

2183| :----------------- | :--------------- |2210| :----------------- | :---------------------- |

2184| `task_id` | 被完成的任务的标识符 |2211| `task_id` | 被完成的任务的标识符 |

2185| `task_subject` | 任务的标题 |2212| `task_subject` | 任务的标题 |

2186| `task_description` | 任务的详细描述。可能不存在 |2213| `task_description` | 任务的详细描述。可能不存在 |

2187| `teammate_name` | 完成任务的队友的名称。可能不存在 |2214| `teammate_name` | 完成任务的队友的名称。可能不存在 |

2188| `team_name` | 团队的名称可能不存在 |2215| `team_name` | 已弃用会话派生的团队名称;将在未来版本中删除 |

2189 2216 

2190<h4 id="taskcompleted-decision-control">2217<h4 id="taskcompleted-decision-control">

2191 TaskCompleted 决定控制2218 TaskCompleted 决定控制


2226 Stop 输入2253 Stop 输入

2227</h4>2254</h4>

2228 2255 

2229除了[通用输入字段](#common-input-fields)外,Stop hooks 还接收 `stop_hook_active`、`last_assistant_message`、`background_tasks` 和 `session_crons`。`stop_hook_active` 字段在 Claude Code 已经作为 stop hook 的结果继续时为 `true`。检查此值或处理成绩单以防止 Claude Code 无限运行。`last_assistant_message` 字段包含 Claude 最终响应的文本内容,因此 hooks 可以访问它而无需解析成绩单文件。2256除了[通用输入字段](#common-input-fields)外,Stop hooks 还接收 `stop_hook_active`、`last_assistant_message`、`background_tasks` 和 `session_crons`。`stop_hook_active` 字段在 Claude Code 已经作为 stop hook 的结果继续时为 `true`。检查此值或处理成绩单以防止 Claude Code 无限运行。Claude Code 在 8 次连续阻止后覆盖 hook 并结束轮次。`last_assistant_message` 字段包含 Claude 最终响应的文本内容,因此 hooks 可以访问它而无需解析成绩单文件。

2230 2257 

2231`background_tasks` 和 `session_crons` 数组在 Claude Code v2.1.145 或更高版本中可用,让 hooks 区分"会话完成"和"会话暂停等待后台工作唤醒它"。当任务注册表可达时两个数组都存在,当没有任何内容在进行中或计划时为空。2258`background_tasks` 和 `session_crons` 数组在 Claude Code v2.1.145 或更高版本中可用,让 hooks 区分"会话完成"和"会话暂停等待后台工作唤醒它"。当任务注册表可达时两个数组都存在,当没有任何内容在进行中或计划时为空。

2232 2259 


2291`Stop` 和 `SubagentStop` hooks 可以控制 Claude 是否继续。除了所有 hooks 可用的[JSON 输出字段](#json-output)外,您的 hook 脚本可以返回这些事件特定字段:2318`Stop` 和 `SubagentStop` hooks 可以控制 Claude 是否继续。除了所有 hooks 可用的[JSON 输出字段](#json-output)外,您的 hook 脚本可以返回这些事件特定字段:

2292 2319 

2293| 字段 | 描述 |2320| 字段 | 描述 |

2294| :--------- | :---------------------------------------------- |2321| :------------------------------------- | :------------------------------------------------------------------------------------------- |

2295| `decision` | `"block"` 防止 Claude 停止。省略以允许 Claude 停止 |2322| `decision` | `"block"` 防止 Claude 停止。省略以允许 Claude 停止 |

2296| `reason` | 当 `decision` 为 `"block"` 时必需。告诉 Claude 为什么它应该继续 |2323| `reason` | 当 `decision` 为 `"block"` 时必需。告诉 Claude 为什么它应该继续 |

2324| `hookSpecificOutput.additionalContext` | 非错误反馈给 Claude。对话继续,以便 Claude 可以对其采取行动,但与 `decision: "block"` 不同,它在成绩单中显示为 hook 反馈而不是 hook 错误 |

2297 2325 

2298```json theme={null}2326```json theme={null}

2299{2327{


2302}2330}

2303```2331```

2304 2332 

2333当 hook 按设计工作并给予 Claude 指导时使用 `additionalContext`,例如"在完成前运行测试套件"。它通过与 `decision: "block"` 相同的循环保护保持对话进行,即 `stop_hook_active` 输入和 8 次连续继续上限,但成绩单将其标记为 `Stop hook feedback`,不显示 hook 错误通知:

2334 

2335```json theme={null}

2336{

2337 "hookSpecificOutput": {

2338 "hookEventName": "Stop",

2339 "additionalContext": "Please run the test suite before finishing"

2340 }

2341}

2342```

2343 

2305<h3 id="stopfailure">2344<h3 id="stopfailure">

2306 StopFailure2345 StopFailure

2307</h3>2346</h3>


2356 "permission_mode": "default",2395 "permission_mode": "default",

2357 "hook_event_name": "TeammateIdle",2396 "hook_event_name": "TeammateIdle",

2358 "teammate_name": "researcher",2397 "teammate_name": "researcher",

2359 "team_name": "my-project"2398 "team_name": "session-a1b2c3d4"

2360}2399}

2361```2400```

2362 2401 

2363| 字段 | 描述 |2402| 字段 | 描述 |

2364| :-------------- | :--------- |2403| :-------------- | :---------------------- |

2365| `teammate_name` | 即将空闲的队友的名称 |2404| `teammate_name` | 即将空闲的队友的名称 |

2366| `team_name` | 团队的名称 |2405| `team_name` | 已弃用。会话派生的团队名称;将在未来版本中删除 |

2367 2406 

2368<h4 id="teammateidle-decision-control">2407<h4 id="teammateidle-decision-control">

2369 TeammateIdle 决定控制2408 TeammateIdle 决定控制


2736 SessionEnd 输入2775 SessionEnd 输入

2737</h4>2776</h4>

2738 2777 

2739除了[通用输入字段](#common-input-fields)外,SessionEnd hooks 还接收 `reason` 字段,指示会话为何结束。有关所有值,请参阅上面的[原因表](#sessionend)2778除了[通用输入字段](#common-input-fields)外,SessionEnd hooks 还接收 `reason` 字段,指示会话为何结束。有关所有值,请参阅上面的原因表

2740 2779 

2741```json theme={null}2780```json theme={null}

2742{2781{

hooks-guide.md +18 −6

Details

506 506 

507当多个 hooks 匹配同一事件时,每个 hook 的命令都会运行到完成,然后 Claude Code 合并结果。一个 hook 返回 `deny` 不会阻止兄弟 hooks 执行。不要依赖一个 hook 的 `deny` 来抑制另一个 hook 中的副作用。507当多个 hooks 匹配同一事件时,每个 hook 的命令都会运行到完成,然后 Claude Code 合并结果。一个 hook 返回 `deny` 不会阻止兄弟 hooks 执行。不要依赖一个 hook 的 `deny` 来抑制另一个 hook 中的副作用。

508 508 

509所有匹配的 hooks 完成后,Claude Code 合并它们的输出。对于 `PreToolUse` 权限决策,最严格的答案获胜`deny` 覆盖 `ask``ask` 覆盖 `allow`。来自 `additionalContext` 的文本从每个 hook 保留并一起传递给 Claude。509所有匹配的 hooks 完成后,Claude Code 合并它们的输出。对于 `PreToolUse` 权限决策,最严格的答案获胜,顺序为 `deny``defer``ask``allow`。来自 `additionalContext` 的文本从每个 hook 保留并一起传递给 Claude。

510 510 

511下面的示例在 `Bash` 上注册两个 `PreToolUse` hooks。第一个将每个命令附加到日志文件并以 0 退出。第二个运行一个脚本,当命令包含 `rm -rf` 时以 2 退出以拒绝:511下面的示例在 `Bash` 上注册两个 `PreToolUse` hooks。第一个将每个命令附加到日志文件并以 0 退出。第二个运行一个脚本,当命令包含 `rm -rf` 时以 2 退出以拒绝:

512 512 


751 `if` 字段需要 Claude Code v2.1.85 或更高版本。早期版本忽略它并在每个匹配的调用上运行 hook。751 `if` 字段需要 Claude Code v2.1.85 或更高版本。早期版本忽略它并在每个匹配的调用上运行 hook。

752</Note>752</Note>

753 753 

754`if` 字段使用 [权限规则语法](/zh-CN/permissions) 按工具名称和参数一起过滤 hooks,因此 hook 进程仅在工具调用匹配时生成,或当 Bash 命令太复杂而无法解析时。这超越了 `matcher`,它仅在工具名称级别按组过滤。754`if` 字段使用 [权限规则语法](/zh-CN/permissions) 按工具名称和参数一起过滤 hooks,因此 hook 进程仅在工具调用匹配时生成。这超越了 `matcher`,它仅在工具名称级别按组过滤。

755 755 

756例如,要仅在 Claude 使用 `git` 命令而不是所有 Bash 命令时运行 hook:756例如,要仅在 Claude 使用 `git` 命令而不是所有 Bash 命令时运行 hook:

757 757 


774}774}

775```775```

776 776 

777hook 进程仅在 Bash 命令的子命令与 `git *` 匹配时生成,或当命令太复杂而无法解析为子命令时。对于像 `npm test && git push` 这样的复合命令,Claude Code 评估每个子命令并触发 hook,因为 `git push` 匹配。`if` 字段接受与权限规则相同的模式:`"Bash(git *)"`、`"Edit(*.ts)"` 等。要匹配多个工具名称,使用单独的处理程序,每个都有自己的 `if` 值,或在 `matcher` 级别匹配,其中支持管道交替。777你的 hook 命令是否运行取决于你的 `if` 模式的形状和 Claude 正在调用的 Bash 命令:

778 

779| `if` 模式 | Bash 命令 | Hook 运行? | 为什么 |

780| :----------------- | :--------------------- | :------- | :-------------------------------------- |

781| `Bash(git *)` | `git push` | 是 | 命令名称匹配 |

782| `Bash(git *)` | `npm test && git push` | 是 | 每个子命令都被检查;`git push` 匹配 |

783| `Bash(git *)` | `echo $(git log)` | 是 | `$()` 和反引号内的命令被检查;`git log` 匹配 |

784| `Bash(git *)` | `echo $(date)` | 否 | 没有子命令匹配 `git *` |

785| `Bash(git push *)` | `echo $(date)` | 是 | 指定超过命令名称的模式在 `$()`、反引号或 `$VAR` 上运行 hook |

786 

787当 Bash 命令无法解析时,过滤器也会失败开放,无论如何都会运行你的 hook。因为过滤器是尽力而为的,使用 [权限系统](/zh-CN/permissions) 而不是 hook 来强制执行硬允许或拒绝。

788 

789`if` 字段接受与权限规则相同的模式:`"Bash(git *)"`、`"Edit(*.ts)"` 等。要匹配多个工具名称,使用单独的处理程序,每个都有自己的 `if` 值,或在 `matcher` 级别匹配,其中支持管道交替。

778 790 

779`if` 仅适用于工具事件:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。将其添加到任何其他事件会阻止 hook 运行。791`if` 仅适用于工具事件:`PreToolUse`、`PostToolUse`、`PostToolUseFailure`、`PermissionRequest` 和 `PermissionDenied`。将其添加到任何其他事件会阻止 hook 运行。

780 792 


785你添加 hook 的位置决定了其范围:797你添加 hook 的位置决定了其范围:

786 798 

787| 位置 | 范围 | 可共享 |799| 位置 | 范围 | 可共享 |

788| :-------------------------------------------------------------- | :---------------------- | :----------- |800| :-------------------------------------------------------------- | :---------------------- | :------------------------------ |

789| `~/.claude/settings.json` | 所有你的项目 | 否,本地到你的机器 |801| `~/.claude/settings.json` | 所有你的项目 | 否,本地到你的机器 |

790| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |802| `.claude/settings.json` | 单个项目 | 是,可以提交到仓库 |

791| `.claude/settings.local.json` | 单个项目 | 否,gitignored |803| `.claude/settings.local.json` | 单个项目 | 否,gitignored 当 Claude Code 创建它时 |

792| 托管策略设置 | 组织范围 | 是,管理员控制 |804| 托管策略设置 | 组织范围 | 是,管理员控制 |

793| [Plugin](/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |805| [Plugin](/zh-CN/plugins) `hooks/hooks.json` | 启用插件时 | 是,与插件捆绑 |

794| [Skill](/zh-CN/skills) 或 [agent](/zh-CN/sub-agents) frontmatter | 当 skill 或 agent 处于活动状态时 | 是,在组件文件中定义 |806| [Skill](/zh-CN/skills) 或 [agent](/zh-CN/sub-agents) frontmatter | 当 skill 或 agent 处于活动状态时 | 是,在组件文件中定义 |

795 807 

796在 Claude Code 中运行 [`/hooks`](/zh-CN/hooks#the-hooks-menu) 以浏览所有按事件分组的配置 hooks。要一次禁用所有 hooks,在设置文件中设置 `"disableAllHooks": true`。托管设置中配置的 Hooks 仍然运行,除非 `disableAllHooks` 也在那里设置。808在 Claude Code 中运行 [`/hooks`](/zh-CN/hooks#the-%2Fhooks-menu) 以浏览所有按事件分组的配置 hooks。要禁用 hooks,在设置文件中设置 `"disableAllHooks": true`。托管设置中配置的 Hooks 仍然运行,除非 `disableAllHooks` 也在那里设置。

797 809 

798如果你在 Claude Code 运行时直接编辑设置文件,文件监视器通常会自动拾取 hook 更改。810如果你在 Claude Code 运行时直接编辑设置文件,文件监视器通常会自动拾取 hook 更改。

799 811 

Details

16 16 

17当您给 Claude 一个任务时,它会经历三个阶段:**收集上下文**、**采取行动**和**验证结果**。这些阶段相互融合。Claude 始终使用工具,无论是搜索文件以了解您的代码、编辑以进行更改,还是运行测试以检查其工作。17当您给 Claude 一个任务时,它会经历三个阶段:**收集上下文**、**采取行动**和**验证结果**。这些阶段相互融合。Claude 始终使用工具,无论是搜索文件以了解您的代码、编辑以进行更改,还是运行测试以检查其工作。

18 18 

19<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agentic-loop.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=4a30fb7ce2815012a9f27c955e2c6bb0" alt="代理循环:您的提示导致 Claude 收集上下文、采取行动、验证结果,并重复直到任务完成。您可以在任何时刻中断。" width="720" height="280" data-path="images/agentic-loop.svg" />19<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agentic-loop.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=4a30fb7ce2815012a9f27c955e2c6bb0" alt="代理循环的图表:您的提示导致 Claude 收集上下文、采取行动、验证结果,并重复直到任务完成。您可以在任何时刻中断。" width="720" height="280" data-path="images/agentic-loop.svg" />

20 20 

21循环会根据您的要求进行调整。关于您代码库的问题可能只需要收集上下文。错误修复会循环通过所有三个阶段多次。重构可能涉及广泛的验证。Claude 根据从前一步学到的内容决定每一步需要什么,将数十个操作链接在一起并沿途进行纠正。21循环会根据您的要求进行调整。关于您代码库的问题可能只需要收集上下文。错误修复会循环通过所有三个阶段多次。重构可能涉及广泛的验证。Claude 根据从前一步学到的内容决定每一步需要什么,将数十个操作链接在一起并沿途进行纠正。

22 22 


130 130 

131使用 `claude --continue` 或 `claude --resume` 恢复会话会在相同的会话 ID 下重新打开它,并将新消息附加到现有对话。使用 `--fork-session` 或 `/branch` 分叉会将历史复制到新的会话 ID 中,保持原始会话不变。131使用 `claude --continue` 或 `claude --resume` 恢复会话会在相同的会话 ID 下重新打开它,并将新消息附加到现有对话。使用 `--fork-session` 或 `/branch` 分叉会将历史复制到新的会话 ID 中,保持原始会话不变。

132 132 

133<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/session-continuity.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=04ed0984a58e4127e05b3640265241a3" alt="会话连续性:恢复继续相同的会话,分叉创建一个具有新 ID 的新分支。" width="560" height="280" data-path="images/session-continuity.svg" />133<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/session-continuity.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=04ed0984a58e4127e05b3640265241a3" alt="会话连续性图表:恢复继续相同的会话,分叉创建一个具有新 ID 的新分支。" width="560" height="280" data-path="images/session-continuity.svg" />

134 134 

135有关恢复标志、`/resume` 选择器、命名以及当相同会话在两个终端中打开时会发生什么,请参阅[管理会话](/zh-CN/sessions)。135有关恢复标志、`/resume` 选择器、命名以及当相同会话在两个终端中打开时会发生什么,请参阅[管理会话](/zh-CN/sessions)。

136 136 


170 使用检查点和权限保持安全170 使用检查点和权限保持安全

171</h2>171</h2>

172 172 

173Claude 有两个安全机制:检查点让您撤销文件更改,权限控制 Claude 可以在不询问的情况下做什么。173Claude 有两个安全机制:checkpoints 让您撤销文件更改,权限控制 Claude 可以在不询问的情况下做什么。

174 174 

175<h3 id="undo-changes-with-checkpoints">175<h3 id="undo-changes-with-checkpoints">

176 使用检查点撤销更改176 使用 checkpoints 撤销更改

177</h3>177</h3>

178 178 

179**每个文件编辑都是可逆的。** 在 Claude 编辑任何文件之前,它会对当前内容进行快照。如果出现问题,按两次 `Esc` 以回退到之前的状态,或要求 Claude 撤销。179**每个文件编辑都是可逆的。** 在 Claude 编辑任何文件之前,它会对当前内容进行快照。如果出现问题,按两次 `Esc` 以回退到之前的状态,或要求 Claude 撤销。

180 180 

181检查点是会话本地的,独立于 git。它们仅涵盖文件更改。影响远程系统的操作(数据库、API、部署)无法进行检查点,这就是为什么 Claude 在运行具有外部副作用的命令之前询问。181Checkpoints 是会话本地的,独立于 git。它们仅涵盖文件更改。影响远程系统的操作(数据库、API、部署)无法进行 checkpointing,这就是为什么 Claude 在运行具有外部副作用的命令之前询问。

182 182 

183<h3 id="control-what-claude-can-do">183<h3 id="control-what-claude-can-do">

184 控制 Claude 可以做什么184 控制 Claude 可以做什么


186 186 

187按 `Shift+Tab` 循环通过权限模式:187按 `Shift+Tab` 循环通过权限模式:

188 188 

189* **默认**:Claude 在文件编辑和 shell 命令之前询问189* **Default**:Claude 在文件编辑和 shell 命令之前询问

190* **自动接受编辑**:Claude 编辑文件并运行常见的文件系统命令(如 `mkdir` 和 `mv`)而不询问,仍然询问其他命令190* **Auto-accept edits**:Claude 编辑文件并运行常见的文件系统命令(如 `mkdir` 和 `mv`)而不询问,仍然询问其他命令

191* **Plan Mode**:Claude 仅使用只读工具创建您可以在执行前批准的计划191* **Plan Mode**:Claude 探索并提出计划而不编辑您的源文件;权限提示仍然适用如默认模式

192* **自动模式**:Claude 使用后台安全检查评估所有操作。目前是研究预览192* **Auto mode**:Claude 使用后台安全检查评估所有操作。目前是研究预览

193 193 

194您也可以在 `.claude/settings.json` 中允许特定命令,以便 Claude 不会每次都询问。这对于受信任的命令(如 `npm test` 或 `git status`)很有用。设置可以从组织范围的策略范围到个人偏好。有关详细信息,请参阅[权限](/zh-CN/permissions)。194您也可以在 `.claude/settings.json` 中允许特定命令,以便 Claude 不会每次都询问。这对于受信任的命令(如 `npm test` 或 `git status`)很有用。设置可以从组织范围的策略范围到个人偏好。有关详细信息,请参阅[权限](/zh-CN/permissions)。

195 195 


213* `/agents` 帮助您配置自定义 subagents213* `/agents` 帮助您配置自定义 subagents

214* `/doctor` 诊断您的安装的常见问题214* `/doctor` 诊断您的安装的常见问题

215 215 

216<h3 id="it-s-a-conversation">216<h3 id="its-a-conversation">

217 这是一个对话217 这是一个对话

218</h3>218</h3>

219 219 


282 282 

283审查计划,通过对话细化它,然后让 Claude 实现。这种两阶段方法比直接跳到代码产生更好的结果。283审查计划,通过对话细化它,然后让 Claude 实现。这种两阶段方法比直接跳到代码产生更好的结果。

284 284 

285<h3 id="delegate-don-t-dictate">285<h3 id="delegate-dont-dictate">

286 委派,不要指示286 委派,不要指示

287</h3>287</h3>

288 288 


295 295 

296您不需要指定要读取哪些文件或运行什么命令。Claude 会弄清楚。296您不需要指定要读取哪些文件或运行什么命令。Claude 会弄清楚。

297 297 

298<h2 id="what-s-next">298<h2 id="whats-next">

299 接下来是什么299 接下来是什么

300</h2>300</h2>

301 301 

Details

39| `Ctrl+B` | 后台运行任务 | 后台运行 bash 命令和代理。Tmux 用户按两次 |39| `Ctrl+B` | 后台运行任务 | 后台运行 bash 命令和代理。Tmux 用户按两次 |

40| `Ctrl+T` | 切换任务列表 | 在终端状态区域中显示或隐藏[任务列表](#task-list) |40| `Ctrl+T` | 切换任务列表 | 在终端状态区域中显示或隐藏[任务列表](#task-list) |

41| `Left/Right arrows` | 在对话框选项卡之间循环 | 在权限对话框和菜单中的选项卡之间导航 |41| `Left/Right arrows` | 在对话框选项卡之间循环 | 在权限对话框和菜单中的选项卡之间导航 |

42| `Up/Down arrows` 或 `Ctrl+P`/`Ctrl+N` | 移动光标或导航命令历史 | 在多行输入中,首先在提示内移动光标。一旦光标已在顶部或底部边缘,再次按下会导航命令历史 |42| `Up/Down arrows` 或 `Ctrl+P`/`Ctrl+N` | 移动光标或导航命令历史 | 当输入跨越多个可视行时无论是换行还是多行,首先在提示内移动光标。一旦光标在第一行或最后一行,再次按下会导航命令历史。{/* min-version: 2.1.169 */}从 v2.1.169 开始,换行的单行输入的行为与多行输入相同 |

43| `Esc` | 中断 Claude | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止完成的工作 |43| `Esc` | 中断 Claude | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止完成的工作 |

44| `Esc` + `Esc` | 清除输入草稿,或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录中,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](/zh-CN/checkpointing)以从上一个点恢复或总结代码和对话 |44| `Esc` + `Esc` | 清除输入草稿,或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录中,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](/zh-CN/checkpointing)以从上一个点恢复或总结代码和对话 |

45| `Shift+Tab` 或 `Alt+M`(某些配置) | 循环权限模式 | 在 `default`、`acceptEdits`、`plan` 和您启用的任何模式(如 `auto` 或 `bypassPermissions`)之间循环。请参阅[权限模式](/zh-CN/permission-modes)。 |45| `Shift+Tab` 或 `Alt+M`(某些配置) | 循环权限模式 | 在 `default`、`acceptEdits`、`plan` 和您启用的任何模式(如 `auto` 或 `bypassPermissions`)之间循环。请参阅[权限模式](/zh-CN/permission-modes)。 |

46| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |46| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |

47| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。{/* min-version: 2.1.132 */}从 v2.1.132 开始,此快捷键在 macOS 上无需配置 Option 作为 Meta 即可工作 |47| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。对 Fable 5 无效,它始终使用扩展思考。{/* min-version: 2.1.132 */}从 v2.1.132 开始,此快捷键在 macOS 上无需配置 Option 作为 Meta 即可工作 |

48| `Option+O`(macOS)或 `Alt+O`(Windows/Linux) | 切换快速模式 | 启用或禁用[快速模式](/zh-CN/fast-mode) |48| `Option+O`(macOS)或 `Alt+O`(Windows/Linux) | 切换快速模式 | 启用或禁用[快速模式](/zh-CN/fast-mode) |

49 49 

50<h3 id="text-editing">50<h3 id="text-editing">


305* 长时间运行的进程(docker、terraform)305* 长时间运行的进程(docker、terraform)

306 306 

307<h3 id="shell-mode-with-prefix">307<h3 id="shell-mode-with-prefix">

308 使用 `!` 前缀的 Bash 模式308 使用 `!` 前缀的 Shell 模式

309</h3>309</h3>

310 310 

311通过在输入前加上 `!` 来直接运行 bash 命令,无需通过 Claude:311通过在输入前加上 `!` 来直接运行 bash 命令,无需通过 Claude:


316! ls -la316! ls -la

317```317```

318 318 

319Bash 模式:319Shell 模式:

320 320 

321* 将命令及其输出添加到对话上下文321* 将命令及其输出添加到对话上下文

322* 显示实时进度和输出322* 显示实时进度和输出


324* 不需要 Claude 解释或批准命令324* 不需要 Claude 解释或批准命令

325* 支持基于历史的自动完成:键入部分命令并按 **Tab** 以从当前项目中的上一个 `!` 命令完成325* 支持基于历史的自动完成:键入部分命令并按 **Tab** 以从当前项目中的上一个 `!` 命令完成

326* 使用 `Escape`、`Backspace` 或在空提示上使用 `Ctrl+U` 退出326* 使用 `Escape`、`Backspace` 或在空提示上使用 `Ctrl+U` 退出

327* 将以 `!` 开头的文本粘贴到空提示中会自动进入 bash 模式,与键入的 `!` 行为相匹配327* 将以 `!` 开头的文本粘贴到空提示中会自动进入 shell 模式,与键入的 `!` 行为相匹配

328 328 

329这对于快速 shell 操作同时保持对话上下文很有用。329这对于快速 shell 操作同时保持对话上下文很有用。

330 330 


372| :----------------------- | :---------------------------------------------------------------------------------------------- |372| :----------------------- | :---------------------------------------------------------------------------------------------- |

373| `Space`、`Enter`、`Escape` | 关闭答案并返回提示 |373| `Space`、`Enter`、`Escape` | 关闭答案并返回提示 |

374| `Up` / `Down` | 滚动答案 |374| `Up` / `Down` | 滚动答案 |

375| `c` | 将答案作为原始 Markdown 复制到您的剪贴板。使用此方法而不是鼠标选择,后者会捕获硬换行的终端呈现而不是源文本 |

375| `f` | 分叉到新会话。分叉继承父对话加上此问题和答案作为真实记录轮次,因此您可以继续使用完整工具访问。原始会话保留在 [`/resume`](/zh-CN/commands) 下。仅在本地会话中可用 |376| `f` | 分叉到新会话。分叉继承父对话加上此问题和答案作为真实记录轮次,因此您可以继续使用完整工具访问。原始会话保留在 [`/resume`](/zh-CN/commands) 下。仅在本地会话中可用 |

376| `x` | 清除当前答案上方显示的较早 `/btw` 交换列表 |377| `x` | 清除当前答案上方显示的较早 `/btw` 交换列表 |

377 378 

jetbrains.md +77 −25

Details

8 8 

9Claude Code 通过专用插件与 JetBrains IDE 集成,提供交互式差异查看、选择上下文共享等功能。9Claude Code 通过专用插件与 JetBrains IDE 集成,提供交互式差异查看、选择上下文共享等功能。

10 10 

11## 支持的 IDE11<h2 id="supported-ides">

12 支持的 IDE

13</h2>

12 14 

13Claude Code 插件适用于大多数 JetBrains IDE,包括:15Claude Code 插件适用于大多数 JetBrains IDE,包括:

14 16 


19* PhpStorm21* PhpStorm

20* GoLand22* GoLand

21 23 

22## 功能24<h2 id="features">

25 功能

26</h2>

23 27 

24* **快速启动**:使用 `Cmd+Esc`(Mac)或 `Ctrl+Esc`(Windows/Linux)直接从编辑器打开 Claude Code,或点击 UI 中的 Claude Code 按钮28* **快速启动**:使用 `Cmd+Esc`(Mac)或 `Ctrl+Esc`(Windows/Linux)直接从编辑器打开 Claude Code,或点击 UI 中的 Claude Code 按钮

25* **差异查看**:代码更改可以直接在 IDE 差异查看器中显示,而不是在终端中显示29* **差异查看**:代码更改可以直接在 IDE 差异查看器中显示,而不是在终端中显示


27* **文件引用快捷方式**:使用 `Cmd+Option+K`(Mac)或 `Alt+Ctrl+K`(Linux/Windows)插入文件引用,例如 `@src/auth.ts#L1-99`31* **文件引用快捷方式**:使用 `Cmd+Option+K`(Mac)或 `Alt+Ctrl+K`(Linux/Windows)插入文件引用,例如 `@src/auth.ts#L1-99`

28* **诊断共享**:IDE 中的诊断错误(如 lint 和语法错误)在您工作时会自动与 Claude 共享32* **诊断共享**:IDE 中的诊断错误(如 lint 和语法错误)在您工作时会自动与 Claude 共享

29 33 

30## 安装34<h2 id="installation">

35 安装

36</h2>

31 37 

32### 市场安装38该插件在您的 IDE 集成终端中运行 `claude` 命令并连接到它。它不包含自己的 CLI 副本,因此您需要安装两个部分:

33 39 

34从 JetBrains 市场查找并安装 [Claude Code 插件](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-),然后重启您的 IDE。40<Steps>

41 <Step title="安装 Claude Code CLI">

42 如果您还没有安装 CLI,请按照[快速入门](/zh-CN/quickstart)进行安装。当 `claude` 不在您的 PATH 中时,插件会显示"无法启动 Claude Code"通知。

43 </Step>

44 

45 <Step title="安装 JetBrains 插件">

46 从 JetBrains Marketplace 安装 [Claude Code 插件](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-),然后重启您的 IDE。

47 </Step>

48</Steps>

49 

50如果 `claude` 安装在您的 IDE 找不到的位置,请在插件的 [Claude 命令设置](#general-settings)中设置完整路径。

35 51 

36如果您还没有安装 Claude Code,请参阅[快速入门指南](/zh-CN/quickstart)了解安装说明52Claude Code 适用于任何付费 Claude 订阅(Pro、Max、Team 或 Enterprise)或 Claude Console 账户无需 API 密钥。首次运行 `claude` 时,系统会提示您[登录](/zh-CN/authentication#log-in-to-claude-code)。

37 53 

38<Note>54<Note>

39 安装插件后,您可能需要完全重启 IDE 才能使其生效。55 安装插件后,您可能需要完全重启 IDE 才能使其生效。

40</Note>56</Note>

41 57 

42## 使用58<h2 id="usage">

59 使用

60</h2>

43 61 

44### 从您的 IDE62<h3 id="from-your-ide">

63 从您的 IDE

64</h3>

45 65 

46从 IDE 的集成终端运行 `claude`,所有集成功能都将处于活跃状态。66从 IDE 的集成终端运行 `claude`,所有集成功能都将处于活跃状态。

47 67 

48### 从外部终端68<h3 id="from-external-terminals">

69 从外部终端

70</h3>

49 71 

50在任何外部终端中使用 `/ide` 命令将 Claude Code 连接到您的 JetBrains IDE 并激活所有功能:72在任何外部终端中使用 `/ide` 命令将 Claude Code 连接到您的 JetBrains IDE 并激活所有功能:

51 73 


59 81 

60如果您希望 Claude 能够访问与 IDE 相同的文件,请从与 IDE 项目根目录相同的目录启动 Claude Code。82如果您希望 Claude 能够访问与 IDE 相同的文件,请从与 IDE 项目根目录相同的目录启动 Claude Code。

61 83 

62## 配置84<h2 id="configuration">

85 配置

86</h2>

63 87 

64### Claude Code 设置88<h3 id="claude-code-settings">

89 Claude Code 设置

90</h3>

65 91 

66通过 Claude Code 的设置配置 IDE 集成:92通过 Claude Code 的设置配置 IDE 集成:

67 93 


692. 输入 `/config` 命令952. 输入 `/config` 命令

703. 将差异工具设置为 `auto` 以在 IDE 中显示差异,或设置为 `terminal` 以在终端中保留它们963. 将差异工具设置为 `auto` 以在 IDE 中显示差异,或设置为 `terminal` 以在终端中保留它们

71 97 

72### 插件设置98<h3 id="plugin-settings">

99 插件设置

100</h3>

73 101 

74通过转到 **Settings → Tools → Claude Code \[Beta]** 配置 Claude Code 插件:102通过转到 **Settings → Tools → Claude Code \[Beta]** 配置 Claude Code 插件:

75 103 

76#### 常规设置104<h4 id="general-settings">

105 常规设置

106</h4>

77 107 

78* **Claude 命令**:指定自定义命令来运行 Claude,例如 `claude`、`/usr/local/bin/claude` 或 `npx @anthropic-ai/claude-code`108* **Claude 命令**:指定自定义命令来运行 Claude,例如 `claude`、`/usr/local/bin/claude` 或 `npx @anthropic-ai/claude-code`

79* **抑制 Claude 命令未找到的通知**:跳过有关找不到 Claude 命令的通知109* **抑制 Claude 命令未找到的通知**:跳过有关找不到 Claude 命令的通知


84 对于 WSL 用户:将 `wsl -d Ubuntu -- bash -lic "claude"` 设置为您的 Claude 命令(将 `Ubuntu` 替换为您的 WSL 发行版名称)114 对于 WSL 用户:将 `wsl -d Ubuntu -- bash -lic "claude"` 设置为您的 Claude 命令(将 `Ubuntu` 替换为您的 WSL 发行版名称)

85</Tip>115</Tip>

86 116 

87#### ESC 键配置117<h4 id="esc-key-configuration">

118 ESC 键配置

119</h4>

88 120 

89如果 ESC 键在 JetBrains 终端中无法中断 Claude Code 操作:121如果 ESC 键在 JetBrains 终端中无法中断 Claude Code 操作:

90 122 


96 128 

97这将允许 ESC 键正确中断 Claude Code 操作。129这将允许 ESC 键正确中断 Claude Code 操作。

98 130 

99## 特殊配置131<h2 id="special-configurations">

132 特殊配置

133</h2>

100 134 

101### 远程开发135<h3 id="remote-development">

136 远程开发

137</h3>

102 138 

103<Warning>139<Warning>

104 使用 JetBrains 远程开发时,您必须通过 **Settings → Plugin (Host)** 在远程主机上安装插件。140 使用 JetBrains 远程开发时,您必须通过 **Settings → Plugin (Host)** 在远程主机上安装插件。


106 142 

107插件必须安装在远程主机上,而不是在您的本地客户端计算机上。143插件必须安装在远程主机上,而不是在您的本地客户端计算机上。

108 144 

109### WSL 配置145<h3 id="wsl-configuration">

146 WSL 配置

147</h3>

110 148 

111如果您在 WSL2 上使用 Claude Code 和 JetBrains IDE,并看到"未检测到可用的 IDE",原因通常是 WSL2 的 NAT 网络或 Windows 防火墙阻止了 WSL2 和在 Windows 主机上运行的 IDE 之间的连接。WSL1 直接使用主机的网络,不受影响。149如果您在 WSL2 上使用 Claude Code 和 JetBrains IDE,并看到"未检测到可用的 IDE",原因通常是 WSL2 的 NAT 网络或 Windows 防火墙阻止了 WSL2 和在 Windows 主机上运行的 IDE 之间的连接。WSL1 直接使用主机的网络,不受影响。

112 150 

113#### 允许 WSL2 流量通过 Windows 防火墙151<h4 id="allow-wsl2-traffic-through-windows-firewall">

152 允许 WSL2 流量通过 Windows 防火墙

153</h4>

114 154 

115这是推荐的修复方法,因为它保持您现有的 WSL2 网络模式。155这是推荐的修复方法,因为它保持您现有的 WSL2 网络模式。

116 156 


138 </Step>178 </Step>

139</Steps>179</Steps>

140 180 

141#### 将 WSL2 切换到镜像网络181<h4 id="switch-wsl2-to-mirrored-networking">

182 将 WSL2 切换到镜像网络

183</h4>

142 184 

143镜像网络需要 Windows 11 22H2 或更高版本。如果您使用 Windows 10,请改用上面的防火墙规则。185镜像网络需要 Windows 11 22H2 或更高版本。如果您使用 Windows 10,请改用上面的防火墙规则。

144 186 


151 193 

152然后从 PowerShell 使用 `wsl --shutdown` 重启 WSL。194然后从 PowerShell 使用 `wsl --shutdown` 重启 WSL。

153 195 

154## 故障排除196<h2 id="troubleshooting">

197 故障排除

198</h2>

155 199 

156### 插件不工作200<h3 id="plugin-not-working">

201 插件不工作

202</h3>

157 203 

158如果插件已安装但 Claude Code 功能未出现在您的 IDE 中:204如果插件已安装但 Claude Code 功能未出现在您的 IDE 中:

159 205 


162* 完全重启 IDE(您可能需要多次执行此操作)208* 完全重启 IDE(您可能需要多次执行此操作)

163* 对于远程开发,确保插件已安装在远程主机上209* 对于远程开发,确保插件已安装在远程主机上

164 210 

165### IDE 未检测到211<h3 id="ide-not-detected">

212 IDE 未检测到

213</h3>

166 214 

167如果运行 `claude` 显示"未检测到可用的 IDE":215如果运行 `claude` 显示"未检测到可用的 IDE":

168 216 

169* 验证插件已安装并启用217* 验证插件已安装并启用

170* 完全重启 IDE218* 完全重启 IDE

171* 检查您是否从集成终端运行 Claude Code219* 检查您是否从集成终端运行 Claude Code

172* 对于 WSL 用户,请参阅上面的 [WSL 配置](#wsl-配置)220* 对于 WSL 用户,请参阅上面的 [WSL 配置](#wsl-configuration)

173 221 

174### 命令未找到222<h3 id="command-not-found">

223 命令未找到

224</h3>

175 225 

176如果点击 Claude 图标显示"命令未找到":226如果点击 Claude 图标显示"命令未找到":

177 227 


1792. 在插件设置中配置 Claude 命令路径2292. 在插件设置中配置 Claude 命令路径

1803. 对于 WSL 用户,使用配置部分中提到的 WSL 命令格式2303. 对于 WSL 用户,使用配置部分中提到的 WSL 命令格式

181 231 

182## 安全考虑232<h2 id="security-considerations">

233 安全考虑

234</h2>

183 235 

184当 Claude Code 在启用自动编辑权限的 JetBrains IDE 中运行时,它可能能够修改可由您的 IDE 自动执行的 IDE 配置文件。这可能会增加在自动编辑模式下运行 Claude Code 的风险,并允许绕过 Claude Code 对 bash 执行的权限提示。236当 Claude Code 在启用自动编辑权限的 JetBrains IDE 中运行时,它可能能够修改可由您的 IDE 自动执行的 IDE 配置文件。这可能会增加在自动编辑模式下运行 Claude Code 的风险,并允许绕过 Claude Code 对 bash 执行的权限提示。

185 237 

keybindings.md +2 −2

Details

203在 `Task` 上下文中可用的操作:203在 `Task` 上下文中可用的操作:

204 204 

205| 操作 | 默认 | 描述 |205| 操作 | 默认 | 描述 |

206| :---------------- | :----- | :----- |206| :---------------- | :-------------------- | :--------------------------------------------------------------------------------- |

207| `task:background` | Ctrl+B | 后台当前任务 |207| `task:background` | Ctrl+B, Ctrl+X Ctrl+B | 后台当前任务。{/* min-version: 2.1.169 */}Ctrl+X Ctrl+B 组合键需要 v2.1.169 或更高版本,避免 tmux 前缀冲突 |

208 208 

209<h3 id="theme-actions">209<h3 id="theme-actions">

210 主题操作210 主题操作

Details

148 148 

149对你从不处理的目录使用此功能,例如其他团队的包、遗留代码或供应商子树。排除列表是静态的,不是按任务的开关。要今天专注于一个包,明天专注于另一个包,[从该包的目录启动 Claude](#choose-where-to-start-claude) 而不是编辑排除。149对你从不处理的目录使用此功能,例如其他团队的包、遗留代码或供应商子树。排除列表是静态的,不是按任务的开关。要今天专注于一个包,明天专注于另一个包,[从该包的目录启动 Claude](#choose-where-to-start-claude) 而不是编辑排除。

150 150 

151如果你只想为自己排除这些,将设置放在 `.claude/settings.local.json` 中,该文件被 gitignored 且不提交。模式使用 glob 语法与绝对文件路径匹配,所以以相对样式模式开头的 `**/` 以在树中的任何地方匹配。下面的示例排除其他团队拥有的包:151如果你只想为自己排除这些,将设置放在 `.claude/settings.local.json` 中。Claude Code 在创建它时会 gitignore 该文件;由于你在这里手动创建它,请将其添加到你的 gitignore。模式使用 glob 语法与绝对文件路径匹配,所以以相对样式模式开头的 `**/` 以在树中的任何地方匹配。下面的示例排除其他团队拥有的包:

152 152 

153```json .claude/settings.local.json theme={null}153```json .claude/settings.local.json theme={null}

154{154{


329 添加按目录 skills329 添加按目录 skills

330</h2>330</h2>

331 331 

332任何子目录都可以定义[skills](/zh-CN/skills) 范围限于其自己的堆栈。skill 在 Claude 确定其相关时按需加载,所以 API 特定的工具在前端工作期间不会消耗上下文。332任何子目录都可以定义[skills](/zh-CN/skills)范围限于其自己的堆栈。skill 在 Claude 确定其相关时按需加载,所以 API 特定的工具在前端工作期间不会消耗上下文。

333 333 

334Skills 位于目录内的 `.claude/skills/` 下。将它们与该区域的代码一起提交,以便克隆存储库的任何人都能获得它们。在 monorepo 中,这可以是每个包一套 skills。在大型单树代码库中,它是每个子系统一套,例如 `src/db/.claude/skills/`。334Skills 位于目录内的 `.claude/skills/` 下。将它们与该区域的代码一起提交,以便克隆存储库的任何人都能获得它们。在 monorepo 中,这可以是每个包一套 skills。在大型单树代码库中,它是每个子系统一套,例如 `src/db/.claude/skills/`。

335 335 

llm-gateway.md +2 −0

Details

14* **审计日志** - 跟踪所有模型交互以实现合规性14* **审计日志** - 跟踪所有模型交互以实现合规性

15* **模型路由** - 无需更改代码即可在提供商之间切换15* **模型路由** - 无需更改代码即可在提供商之间切换

16 16 

17本页面涵盖 Claude Code CLI 的网关要求和配置。企业桌面部署可以通过[托管设置](https://support.claude.com/zh-CN/articles/12622667-enterprise-configuration)配置网关提供商。Claude Desktop 应用也可以通过 [Cowork on 3P research preview](https://claude.com/docs/cowork/3p/gateway) 针对自托管网关运行,该预览版使用自己的配置密钥。

18 

17<h2 id="gateway-requirements">19<h2 id="gateway-requirements">

18 网关要求20 网关要求

19</h2>21</h2>

mcp.md +158 −72

Details

12 12 

13如果您是第一次连接服务器,请从 [MCP 快速入门](/zh-CN/mcp-quickstart) 开始,获取分步演练。本页面是完整参考。13如果您是第一次连接服务器,请从 [MCP 快速入门](/zh-CN/mcp-quickstart) 开始,获取分步演练。本页面是完整参考。

14 14 

15## 使用 MCP 可以做什么15<h2 id="what-you-can-do-with-mcp">

16 使用 MCP 可以做什么

17</h2>

16 18 

17连接 MCP 服务器后,您可以要求 Claude Code:19连接 MCP 服务器后,您可以要求 Claude Code:

18 20 


23* **自动化工作流**:"创建 Gmail 草稿,邀请这 10 个用户参加关于新功能的反馈会议。"25* **自动化工作流**:"创建 Gmail 草稿,邀请这 10 个用户参加关于新功能的反馈会议。"

24* **对外部事件做出反应**:MCP 服务器也可以充当[频道](/zh-CN/channels),将消息推送到您的会话中,因此当您不在时,Claude 可以对 Telegram 消息、Discord 聊天或 webhook 事件做出反应。26* **对外部事件做出反应**:MCP 服务器也可以充当[频道](/zh-CN/channels),将消息推送到您的会话中,因此当您不在时,Claude 可以对 Telegram 消息、Discord 聊天或 webhook 事件做出反应。

25 27 

26## 查找和构建 MCP 服务器28<h2 id="find-and-build-mcp-servers">

29 查找和构建 MCP 服务器

30</h2>

27 31 

28在 [Anthropic Directory](https://claude.ai/directory) 中浏览已审核的连接器。Directory 连接器使用与 Claude Code 相同的 MCP 基础设施,因此您可以使用 `claude mcp add` 添加列出的任何远程服务器。32在 [Anthropic Directory](https://claude.ai/directory) 中浏览已审核的连接器。Directory 连接器使用与 Claude Code 相同的 MCP 基础设施,因此您可以使用 `claude mcp add` 添加列出的任何远程服务器。

29 33 


55 </Step>59 </Step>

56</Steps>60</Steps>

57 61 

58## 安装 MCP 服务器62<h2 id="installing-mcp-servers">

63 安装 MCP 服务器

64</h2>

59 65 

60MCP 服务器可以根据您的需求以多种方式进行配置:66MCP 服务器可以根据您的需求以多种方式进行配置:

61 67 

62### 选项 1:添加远程 HTTP 服务器68<h3 id="option-1-add-a-remote-http-server">

69 选项 1:添加远程 HTTP 服务器

70</h3>

63 71 

64HTTP 服务器是连接到远程 MCP 服务器的推荐选项。这是云服务最广泛支持的传输方式。72HTTP 服务器是连接到远程 MCP 服务器的推荐选项。这是云服务最广泛支持的传输方式。

65 73 


77 85 

78在通过 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中的 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范对此传输使用名称 `streamable-http`,因此从服务器文档复制的配置无需修改即可工作。86在通过 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中的 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范对此传输使用名称 `streamable-http`,因此从服务器文档复制的配置无需修改即可工作。

79 87 

80### 选项 2:添加远程 SSE 服务器88<h3 id="option-2-add-a-remote-sse-server">

89 选项 2:添加远程 SSE 服务器

90</h3>

81 91 

82<Warning>92<Warning>

83 SSE (Server-Sent Events) 传输已弃用。请在可用的地方使用 HTTP 服务器。93 SSE (Server-Sent Events) 传输已弃用。请在可用的地方使用 HTTP 服务器。


95 --header "X-API-Key: your-key-here"105 --header "X-API-Key: your-key-here"

96```106```

97 107 

98### 选项 3:添加本地 stdio 服务器108<h3 id="option-3-add-a-local-stdio-server">

109 选项 3:添加本地 stdio 服务器

110</h3>

99 111 

100Stdio 服务器作为您机器上的本地进程运行。它们非常适合需要直接系统访问或自定义脚本的工具。112Stdio 服务器作为您机器上的本地进程运行。它们非常适合需要直接系统访问或自定义脚本的工具。

101 113 


108claude mcp add [options] <name> -- <command> [args...]120claude mcp add [options] <name> -- <command> [args...]

109 121 

110# 真实示例:添加 Airtable 服务器122# 真实示例:添加 Airtable 服务器

111claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \123claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \

112 -- npx -y airtable-mcp-server124 -- npx -y airtable-mcp-server

113```125```

114 126 

115<Note>127<Note>

116 **重要:选项顺序**128 **重要:使用 `--` 分隔服务器参数**

117 129 

118 所有选项(`--transport``--env`、`--scope``--header`)必须在服务器名称**之前**然后 `--`(双破折号)将服务器名称与传递给 MCP 服务器的命令和参数分开130 对于 stdio 服务器,`--`(双破折号)将 Claude 自己的选项(如 `--transport`、`--env``--scope`)与运行服务器的命令和参数分开。`--` 之后的所有内容都会原封不动地传递给服务器

119 131 

120 例如:132 例如:

121 133 

122 * `claude mcp add --transport stdio myserver -- npx server` → 运行 `npx server`134 * `claude mcp add --transport stdio myserver -- npx server` → 运行 `npx server`

123 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → 运行 `python server.py --port 8080`,环境中有 `KEY=value`135 * `claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080` → 运行 `python server.py --port 8080`,环境中有 `KEY=value`

124 136 

125 这可以防止 Claude 的标志与服务器标志之间的冲突137 没有 `--`,Claude Code 会尝试将服务器的标志(如上面的 `--port`)解析为自己的选项

138 

139 `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将该名称读取为另一对并拒绝它,因此请在 `--env` 和服务器名称之间放置至少一个其他选项,如上面的示例所示。

126</Note>140</Note>

127 141 

128### 选项 4:添加远程 WebSocket 服务器142<h3 id="option-4-add-a-remote-websocket-server">

143 选项 4:添加远程 WebSocket 服务器

144</h3>

129 145 

130WebSocket 服务器保持持久的双向连接,适合于向 Claude 主动推送事件的远程 MCP 服务器。当您的服务器仅响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 两者都不支持。146WebSocket 服务器保持持久的双向连接,适合于向 Claude 主动推送事件的远程 MCP 服务器。当您的服务器仅响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 两者都不支持。

131 147 


138 154 

139`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅限于标头,因此在 `headers` 中传递静态令牌或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成一个。`claude mcp add --transport` 标志不接受 `ws`。155`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅限于标头,因此在 `headers` 中传递静态令牌或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成一个。`claude mcp add --transport` 标志不接受 `ws`。

140 156 

141### 管理您的服务器157<h3 id="managing-your-servers">

158 管理您的服务器

159</h3>

142 160 

143配置后,您可以使用这些命令管理您的 MCP 服务器:161配置后,您可以使用这些命令管理您的 MCP 服务器:

144 162 


164 182 

165服务器名称 `workspace` 保留供内部使用。如果您的配置定义了具有该名称的服务器,Claude Code 会在加载时跳过它,并显示一条警告,要求您重命名它。183服务器名称 `workspace` 保留供内部使用。如果您的配置定义了具有该名称的服务器,Claude Code 会在加载时跳过它,并显示一条警告,要求您重命名它。

166 184 

167### 动态工具更新185<h3 id="dynamic-tool-updates">

186 动态工具更新

187</h3>

168 188 

169Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 会自动刷新来自该服务器的可用功能。189Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 会自动刷新来自该服务器的可用功能。

170 190 

171### 自动重新连接191<h3 id="automatic-reconnection">

192 自动重新连接

193</h3>

172 194 

173如果 HTTP 或 SSE 服务器在会话中途断开连接,Claude Code 会自动以指数退避方式重新连接:最多五次尝试,从一秒延迟开始,每次加倍。服务器在 `/mcp` 中显示为待处理状态,同时重新连接正在进行中。五次失败尝试后,服务器被标记为失败,您可以从 `/mcp` 手动重试。Stdio 服务器是本地进程,不会自动重新连接。195如果 HTTP 或 SSE 服务器在会话中途断开连接,Claude Code 会自动以指数退避方式重新连接:最多五次尝试,从一秒延迟开始,每次加倍。服务器在 `/mcp` 中显示为待处理状态,同时重新连接正在进行中。五次失败尝试后,服务器被标记为失败,您可以从 `/mcp` 手动重试。Stdio 服务器是本地进程,不会自动重新连接。

174 196 

175相同的退避策略也适用于 HTTP 或 SSE 服务器在启动时初始连接失败的情况。从 v2.1.121 开始,Claude Code 在瞬时错误(如 5xx 响应、连接被拒绝或超时)上最多重试初始连接三次,如果仍然无法连接,则将服务器标记为失败。身份验证和未找到错误不会重试,因为它们需要配置更改才能解决。197相同的退避策略也适用于 HTTP 或 SSE 服务器在启动时初始连接失败的情况。从 v2.1.121 开始,Claude Code 在瞬时错误(如 5xx 响应、连接被拒绝或超时)上最多重试初始连接三次,如果仍然无法连接,则将服务器标记为失败。身份验证和未找到错误不会重试,因为它们需要配置更改才能解决。

176 198 

177### 使用频道推送消息199<h3 id="push-messages-with-channels">

200 使用频道推送消息

201</h3>

178 202 

179MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 功能,并在启动时使用 `--channels` 标志选择加入。请参阅 [Channels](/zh-CN/channels) 以使用官方支持的频道,或 [Channels reference](/zh-CN/channels-reference) 以构建您自己的频道。203MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 功能,并在启动时使用 `--channels` 标志选择加入。请参阅 [Channels](/zh-CN/channels) 以使用官方支持的频道,或 [Channels reference](/zh-CN/channels-reference) 以构建您自己的频道。

180 204 


192 * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证216 * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证

193</Tip>217</Tip>

194 218 

195每个服务器的 `timeout` 是每个工具调用的硬时钟限制,来自服务器的进度通知不会延长它。低于 1000 的值被限制为一秒。对于 HTTP 和 SSE 服务器,每个请求的 fetch 首字节预算有 60 秒的最小值,无论此值如何,因此只有工具调用监视程序遵守较小的值219每个服务器的 `timeout` 是每个工具调用的硬时钟限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略,并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。{/* min-version: 2.1.162 */}在 v2.1.162 之前,低于 1000 的值被限制为一秒。对于 HTTP 和 SSE 服务器,每个请求的 fetch 首字节预算有 60 秒的最小值。

196 220 

197### 插件提供的 MCP 服务器221<h3 id="plugin-provided-mcp-servers">

222 插件提供的 MCP 服务器

223</h3>

198 224 

199[Plugins](/zh-CN/plugins) 可以捆绑 MCP 服务器,在启用插件时自动提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。225[Plugins](/zh-CN/plugins) 可以捆绑 MCP 服务器,在启用插件时自动提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。

200 226 


253 279 

254插件服务器在列表中出现,并带有指示它们来自插件的指示符。280插件服务器在列表中出现,并带有指示它们来自插件的指示符。

255 281 

282**插件 MCP 工具名称**:

283 

284来自插件捆绑的 MCP 服务器的工具在其可调用名称中包括插件名称和服务器密钥。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具可调用为:

285 

286```

287mcp__plugin_my-plugin_database-tools__query

288```

289 

290在[权限规则](/zh-CN/permissions)中、技能的 `allowed-tools` 列表中或[子代理的 `tools` 字段](/zh-CN/sub-agents#available-tools)中引用工具时,使用此完整名称。

291 

256**插件 MCP 服务器的优势**:292**插件 MCP 服务器的优势**:

257 293 

258* **捆绑分发**:工具和服务器打包在一起294* **捆绑分发**:工具和服务器打包在一起


261 297 

262有关使用插件捆绑 MCP 服务器的详细信息,请参阅[插件组件参考](/zh-CN/plugins-reference#mcp-servers)。298有关使用插件捆绑 MCP 服务器的详细信息,请参阅[插件组件参考](/zh-CN/plugins-reference#mcp-servers)。

263 299 

264## MCP 安装范围300<h2 id="mcp-installation-scopes">

301 MCP 安装范围

302</h2>

265 303 

266MCP 服务器可以在三个不同的范围级别进行配置。您选择的范围控制服务器在哪些项目中加载以及配置是否与您的团队共享。管理员还可以通过[托管配置](#managed-mcp-configuration)在企业级别部署服务器。304MCP 服务器可以在三个不同的范围级别进行配置。您选择的范围控制服务器在哪些项目中加载以及配置是否与您的团队共享。管理员还可以通过[托管配置](#managed-mcp-configuration)在企业级别部署服务器。

267 305 


271| [项目](#project-scope) | 仅当前项目 | 是,通过版本控制 | 项目根目录中的 `.mcp.json` |309| [项目](#project-scope) | 仅当前项目 | 是,通过版本控制 | 项目根目录中的 `.mcp.json` |

272| [用户](#user-scope) | 您的所有项目 | 否 | `~/.claude.json` |310| [用户](#user-scope) | 您的所有项目 | 否 | `~/.claude.json` |

273 311 

274### 本地范围312<h3 id="local-scope">

313 本地范围

314</h3>

275 315 

276本地范围是默认范围。本地范围的服务器仅在您添加它的项目中加载,并对您保持私密。Claude Code 将其存储在 `~/.claude.json` 中该项目的路径下,因此相同的服务器不会出现在您的其他项目中。对个人开发服务器、实验配置或包含您不想在版本控制中的凭据的服务器使用本地范围。316本地范围是默认范围。本地范围的服务器仅在您添加它的项目中加载,并对您保持私密。Claude Code 将其存储在 `~/.claude.json` 中该项目的路径下,因此相同的服务器不会出现在您的其他项目中。对个人开发服务器、实验配置或包含您不想在版本控制中的凭据的服务器使用本地范围。

277 317 


304}344}

305```345```

306 346 

307### 项目范围347<h3 id="project-scope">

348 项目范围

349</h3>

308 350 

309项目范围的服务器通过在项目根目录中存储配置在 `.mcp.json` 文件中来启用团队协作。此文件设计为检入版本控制,确保所有团队成员都可以访问相同的 MCP 工具和服务。添加项目范围的服务器时,Claude Code 会自动创建或更新此文件,使用适当的配置结构。351项目范围的服务器通过在项目根目录中存储配置在 `.mcp.json` 文件中来启用团队协作。此文件设计为检入版本控制,确保所有团队成员都可以访问相同的 MCP 工具和服务。添加项目范围的服务器时,Claude Code 会自动创建或更新此文件,使用适当的配置结构。

310 352 


329 371 

330出于安全原因,Claude Code 在使用来自 `.mcp.json` 文件的项目范围的服务器之前会提示批准。如果您需要重置这些批准选择,请使用 `claude mcp reset-project-choices` 命令。372出于安全原因,Claude Code 在使用来自 `.mcp.json` 文件的项目范围的服务器之前会提示批准。如果您需要重置这些批准选择,请使用 `claude mcp reset-project-choices` 命令。

331 373 

332### 用户范围374<h3 id="user-scope">

375 用户范围

376</h3>

333 377 

334用户范围的服务器存储在 `~/.claude.json` 中,并提供跨项目可访问性,使其在您机器上的所有项目中可用,同时对您的用户帐户保持私密。此范围适用于个人实用程序服务器、开发工具或您在不同项目中经常使用的服务。378用户范围的服务器存储在 `~/.claude.json` 中,并提供跨项目可访问性,使其在您机器上的所有项目中可用,同时对您的用户帐户保持私密。此范围适用于个人实用程序服务器、开发工具或您在不同项目中经常使用的服务。

335 379 


338claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic382claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

339```383```

340 384 

341### 范围层次结构和优先级385<h3 id="scope-hierarchy-and-precedence">

386 范围层次结构和优先级

387</h3>

342 388 

343当具有相同名称的服务器在多个位置定义时,Claude Code 连接到它一次,使用来自最高优先级源的定义。整个服务器条目来自该源;字段不会跨范围合并。389当具有相同名称的服务器在多个位置定义时,Claude Code 连接到它一次,使用来自最高优先级源的定义。整个服务器条目来自该源;字段不会跨范围合并。

344 390 


350 396 

351三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。397三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。

352 398 

353### `.mcp.json` 中的环境变量扩展399<h3 id="environment-variable-expansion-in-mcp-json">

400 `.mcp.json` 中的环境变量扩展

401</h3>

354 402 

355Claude Code 支持 `.mcp.json` 文件中的环境变量扩展,允许团队共享配置,同时为特定于机器的路径和 API 密钥等敏感值保持灵活性。403Claude Code 支持 `.mcp.json` 文件中的环境变量扩展,允许团队共享配置,同时为特定于机器的路径和 API 密钥等敏感值保持灵活性。

356 404 


386 434 

387如果未设置所需的环境变量且没有默认值,Claude Code 将无法解析配置。435如果未设置所需的环境变量且没有默认值,Claude Code 将无法解析配置。

388 436 

389## 实际示例437<h2 id="practical-examples">

438 实际示例

439</h2>

390 440 

391{/* ### 示例:使用 Playwright 自动化浏览器测试441<h3 id="example-monitor-errors-with-sentry">

392 442 示例:使用 Sentry 监控错误

393```bash443</h3>

394claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

395```

396 

397然后编写并运行浏览器测试:

398 

399```text

400Test if the login flow works with test@example.com

401```

402```text

403Take a screenshot of the checkout page on mobile

404```

405```text

406Verify that the search feature returns results

407``` */}

408 

409### 示例:使用 Sentry 监控错误

410 444 

411```bash theme={null}445```bash theme={null}

412claude mcp add --transport http sentry https://mcp.sentry.dev/mcp446claude mcp add --transport http sentry https://mcp.sentry.dev/mcp


432哪个部署引入了这些新错误?466哪个部署引入了这些新错误?

433```467```

434 468 

435### 示例:连接到 GitHub 进行代码审查469<h3 id="example-connect-to-github-for-code-reviews">

470 示例:连接到 GitHub 进行代码审查

471</h3>

436 472 

437GitHub 的远程 MCP 服务器使用作为标头传递的 GitHub 个人访问令牌进行身份验证。要获取一个,请打开您的 [GitHub 令牌设置](https://github.com/settings/personal-access-tokens),生成一个新的细粒度令牌,具有对您希望 Claude 使用的存储库的访问权限,然后添加服务器:473GitHub 的远程 MCP 服务器使用作为标头传递的 GitHub 个人访问令牌进行身份验证。要获取一个,请打开您的 [GitHub 令牌设置](https://github.com/settings/personal-access-tokens),生成一个新的细粒度令牌,具有对您希望 Claude 使用的存储库的访问权限,然后添加服务器:

438 474 


455显示分配给我的所有开放 PR491显示分配给我的所有开放 PR

456```492```

457 493 

458### 示例:查询您的 PostgreSQL 数据库494<h3 id="example-query-your-postgresql-database">

495 示例:查询您的 PostgreSQL 数据库

496</h3>

459 497 

460```bash theme={null}498```bash theme={null}

461claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \499claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \


476查找 90 天内未进行购买的客户514查找 90 天内未进行购买的客户

477```515```

478 516 

479## 使用远程 MCP 服务器进行身份验证517<h2 id="authenticate-with-remote-mcp-servers">

518 使用远程 MCP 服务器进行身份验证

519</h2>

480 520 

481许多基于云的 MCP 服务器需要身份验证。Claude Code 支持 OAuth 2.0 以实现安全连接。521许多基于云的 MCP 服务器需要身份验证。Claude Code 支持 OAuth 2.0 以实现安全连接。

482 522 


514 * OAuth 身份验证适用于 HTTP 服务器554 * OAuth 身份验证适用于 HTTP 服务器

515</Tip>555</Tip>

516 556 

517### 使用固定的 OAuth 回调端口557<h3 id="use-a-fixed-oauth-callback-port">

558 使用固定的 OAuth 回调端口

559</h3>

518 560 

519某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。561某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。

520 562 


527 my-server https://mcp.example.com/mcp569 my-server https://mcp.example.com/mcp

528```570```

529 571 

530### 使用预配置的 OAuth 凭据572<h3 id="use-pre-configured-oauth-credentials">

573 使用预配置的 OAuth 凭据

574</h3>

531 575 

532某些 MCP 服务器不支持通过动态客户端注册进行自动 OAuth 设置。如果您看到类似"不兼容的身份验证服务器:不支持动态客户端注册"的错误,服务器需要预配置的凭据。Claude Code 也支持使用客户端 ID 元数据文档 (CIMD) 而不是动态客户端注册的服务器,并自动发现这些服务器。如果自动发现失败,请首先通过服务器的开发者门户注册 OAuth 应用,然后在添加服务器时提供凭据。576某些 MCP 服务器不支持通过动态客户端注册进行自动 OAuth 设置。如果您看到类似"不兼容的身份验证服务器:不支持动态客户端注册"的错误,服务器需要预配置的凭据。Claude Code 也支持使用客户端 ID 元数据文档 (CIMD) 而不是动态客户端注册的服务器,并自动发现这些服务器。如果自动发现失败,请首先通过服务器的开发者门户注册 OAuth 应用,然后在添加服务器时提供凭据。

533 577 


598 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据642 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据

599</Tip>643</Tip>

600 644 

601### 覆盖 OAuth 元数据发现645<h3 id="override-oauth-metadata-discovery">

646 覆盖 OAuth 元数据发现

647</h3>

602 648 

603指向 Claude Code 一个特定的 OAuth 授权服务器元数据 URL 以绕过默认发现链。当 MCP 服务器的标准端点出错时,或当您想通过内部代理路由发现时,设置 `authServerMetadataUrl`。默认情况下,Claude Code 首先检查 RFC 9728 受保护资源元数据(位于 `/.well-known/oauth-protected-resource`),然后回退到 RFC 8414 授权服务器元数据(位于 `/.well-known/oauth-authorization-server`)。649指向 Claude Code 一个特定的 OAuth 授权服务器元数据 URL 以绕过默认发现链。当 MCP 服务器的标准端点出错时,或当您想通过内部代理路由发现时,设置 `authServerMetadataUrl`。默认情况下,Claude Code 首先检查 RFC 9728 受保护资源元数据(位于 `/.well-known/oauth-protected-resource`),然后回退到 RFC 8414 授权服务器元数据(位于 `/.well-known/oauth-authorization-server`)。

604 650 


620 666 

621URL 必须使用 `https://`。`authServerMetadataUrl` 需要 Claude Code v2.1.64 或更高版本。元数据 URL 的 `scopes_supported` 覆盖上游服务器公开的范围。667URL 必须使用 `https://`。`authServerMetadataUrl` 需要 Claude Code v2.1.64 或更高版本。元数据 URL 的 `scopes_supported` 覆盖上游服务器公开的范围。

622 668 

623### 限制 OAuth 范围669<h3 id="restrict-oauth-scopes">

670 限制 OAuth 范围

671</h3>

624 672 

625设置 `oauth.scopes` 以固定 Claude Code 在授权流程中请求的范围。这是限制 MCP 服务器到安全团队批准的子集的支持方式,当上游授权服务器公开的范围超过您想要授予的范围时。该值是单个空格分隔的字符串,与 RFC 6749 §3.3 中的 `scope` 参数格式匹配。673设置 `oauth.scopes` 以固定 Claude Code 在授权流程中请求的范围。这是限制 MCP 服务器到安全团队批准的子集的支持方式,当上游授权服务器公开的范围超过您想要授予的范围时。该值是单个空格分隔的字符串,与 RFC 6749 §3.3 中的 `scope` 参数格式匹配。

626 674 


644 692 

645如果服务器稍后为工具调用返回 403 `insufficient_scope`,Claude Code 会使用相同的固定范围重新进行身份验证。当您需要的工具需要固定范围之外的范围时,扩展 `oauth.scopes`。693如果服务器稍后为工具调用返回 403 `insufficient_scope`,Claude Code 会使用相同的固定范围重新进行身份验证。当您需要的工具需要固定范围之外的范围时,扩展 `oauth.scopes`。

646 694 

647### 使用动态标头进行自定义身份验证695<h3 id="use-dynamic-headers-for-custom-authentication">

696 使用动态标头进行自定义身份验证

697</h3>

648 698 

649如果您的 MCP 服务器使用 OAuth 以外的身份验证方案(例如 Kerberos、短期令牌或内部 SSO),请使用 `headersHelper` 在连接时生成请求标头。Claude Code 运行命令并将其输出合并到连接标头中。699如果您的 MCP 服务器使用 OAuth 以外的身份验证方案(例如 Kerberos、短期令牌或内部 SSO),请使用 `headersHelper` 在连接时生成请求标头。Claude Code 运行命令并将其输出合并到连接标头中。

650 700 


695 `headersHelper` 执行任意 shell 命令。在项目或本地范围定义时,它仅在您接受工作区信任对话框后运行。745 `headersHelper` 执行任意 shell 命令。在项目或本地范围定义时,它仅在您接受工作区信任对话框后运行。

696</Note>746</Note>

697 747 

698## 从 JSON 配置添加 MCP 服务器748<h2 id="add-mcp-servers-from-json-configuration">

749 从 JSON 配置添加 MCP 服务器

750</h2>

699 751 

700如果您有 MCP 服务器的 JSON 配置,您可以直接添加它:752如果您有 MCP 服务器的 JSON 配置,您可以直接添加它:

701 753 


731 * 您可以使用 `--scope user` 将服务器添加到您的用户配置而不是项目特定的配置783 * 您可以使用 `--scope user` 将服务器添加到您的用户配置而不是项目特定的配置

732</Tip>784</Tip>

733 785 

734## 从 Claude Desktop 导入 MCP 服务器786<h2 id="import-mcp-servers-from-claude-desktop">

787 从 Claude Desktop 导入 MCP 服务器

788</h2>

735 789 

736如果您已在 Claude Desktop 中配置了 MCP 服务器,您可以导入它们:790如果您已在 Claude Desktop 中配置了 MCP 服务器,您可以导入它们:

737 791 


764 * 如果具有相同名称的服务器已存在,它们将获得数字后缀(例如,`server_1`)818 * 如果具有相同名称的服务器已存在,它们将获得数字后缀(例如,`server_1`)

765</Tip>819</Tip>

766 820 

767## 使用来自 Claude.ai 的 MCP 服务器821<h2 id="use-mcp-servers-from-claude-ai">

822 使用来自 Claude.ai 的 MCP 服务器

823</h2>

768 824 

769如果您已使用 [Claude.ai](https://claude.ai) 帐户登录 Claude Code,您在 Claude.ai 中添加的 MCP 服务器会自动在 Claude Code 中可用:825如果您已使用 [Claude.ai](https://claude.ai) 帐户登录 Claude Code,您在 Claude.ai 中添加的 MCP 服务器会自动在 Claude Code 中可用:

770 826 


794 850 

795您在 Claude Code 中添加的服务器优先于指向相同 URL 的 claude.ai 连接器。发生这种情况时,`/mcp` 会将连接器列为隐藏,并显示如何删除重复项(如果您更希望使用连接器)。851您在 Claude Code 中添加的服务器优先于指向相同 URL 的 claude.ai 连接器。发生这种情况时,`/mcp` 会将连接器列为隐藏,并显示如何删除重复项(如果您更希望使用连接器)。

796 852 

853某些 Anthropic 托管的连接器(如 Microsoft 365、Gmail 和 Google Calendar)不支持来自 Claude Code 的本地 OAuth,因为上游身份提供商仅接受 claude.ai 注册的重定向 URL。从 v2.1.162 开始,在 `/mcp` 中对这些主机之一进行身份验证会显示一条消息,指导您改为在 claude.ai 上的"设置"→"连接器"中连接它。连接后,连接器会自动出现在 Claude Code 中。

854 

797要在 Claude Code 中禁用 claude.ai MCP 服务器,请将 `ENABLE_CLAUDEAI_MCP_SERVERS` 环境变量设置为 `false`:855要在 Claude Code 中禁用 claude.ai MCP 服务器,请将 `ENABLE_CLAUDEAI_MCP_SERVERS` 环境变量设置为 `false`:

798 856 

799```bash theme={null}857```bash theme={null}

800ENABLE_CLAUDEAI_MCP_SERVERS=false claude858ENABLE_CLAUDEAI_MCP_SERVERS=false claude

801```859```

802 860 

803## 将 Claude Code 用作 MCP 服务器861<h2 id="use-claude-code-as-an-mcp-server">

862 将 Claude Code 用作 MCP 服务器

863</h2>

804 864 

805您可以将 Claude Code 本身用作 MCP 服务器,其他应用程序可以连接到它:865您可以将 Claude Code 本身用作 MCP 服务器,其他应用程序可以连接到它:

806 866 


859 * 请注意,此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为单个工具调用实现用户确认。919 * 请注意,此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为单个工具调用实现用户确认。

860</Tip>920</Tip>

861 921 

862## MCP 输出限制和警告922<h2 id="mcp-output-limits-and-warnings">

923 MCP 输出限制和警告

924</h2>

863 925 

864当 MCP 工具产生大量输出时,Claude Code 可帮助管理令牌使用情况,以防止压倒您的对话上下文:926当 MCP 工具产生大量输出时,Claude Code 可帮助管理令牌使用情况,以防止压倒您的对话上下文:

865 927 


881* 生成详细的报告或文档943* 生成详细的报告或文档

882* 处理广泛的日志文件或调试信息944* 处理广泛的日志文件或调试信息

883 945 

884### 为特定工具提高限制946<h3 id="raise-the-limit-for-a-specific-tool">

947 为特定工具提高限制

948</h3>

885 949 

886如果您正在构建 MCP 服务器,您可以通过在工具的 `tools/list` 响应条目中设置 `_meta["anthropic/maxResultSizeChars"]` 来允许单个工具返回大于默认持久化到磁盘阈值的结果。Claude Code 将该工具的阈值提高到注释值,最高为 500,000 个字符的硬上限。950如果您正在构建 MCP 服务器,您可以通过在工具的 `tools/list` 响应条目中设置 `_meta["anthropic/maxResultSizeChars"]` 来允许单个工具返回大于默认持久化到磁盘阈值的结果。Claude Code 将该工具的阈值提高到注释值,最高为 500,000 个字符的硬上限。

887 951 


903 如果您经常遇到特定 MCP 服务器的输出警告,而您不控制这些服务器,请考虑增加 `MAX_MCP_OUTPUT_TOKENS` 限制。您也可以要求服务器作者添加 `anthropic/maxResultSizeChars` 注释或对其响应进行分页。注释对返回图像内容的工具没有影响;对于这些,提高 `MAX_MCP_OUTPUT_TOKENS` 是唯一的选择。967 如果您经常遇到特定 MCP 服务器的输出警告,而您不控制这些服务器,请考虑增加 `MAX_MCP_OUTPUT_TOKENS` 限制。您也可以要求服务器作者添加 `anthropic/maxResultSizeChars` 注释或对其响应进行分页。注释对返回图像内容的工具没有影响;对于这些,提高 `MAX_MCP_OUTPUT_TOKENS` 是唯一的选择。

904</Warning>968</Warning>

905 969 

906## 响应 MCP 引发请求970<h2 id="respond-to-mcp-elicitation-requests">

971 响应 MCP 引发请求

972</h2>

907 973 

908MCP 服务器可以在任务中途使用引发来请求您的结构化输入。当服务器需要无法自行获取的信息时,Claude Code 会显示交互式对话框并将您的响应传递回服务器。您无需进行任何配置:当服务器请求时,引发对话框会自动出现。974MCP 服务器可以在任务中途使用引发来请求您的结构化输入。当服务器需要无法自行获取的信息时,Claude Code 会显示交互式对话框并将您的响应传递回服务器。您无需进行任何配置:当服务器请求时,引发对话框会自动出现。

909 975 


912* **表单模式**:Claude Code 显示一个对话框,其中包含服务器定义的表单字段(例如,用户名和密码提示)。填写字段并提交。978* **表单模式**:Claude Code 显示一个对话框,其中包含服务器定义的表单字段(例如,用户名和密码提示)。填写字段并提交。

913* **URL 模式**:Claude Code 打开浏览器 URL 以进行身份验证或批准。在浏览器中完成流程,然后在 CLI 中确认。979* **URL 模式**:Claude Code 打开浏览器 URL 以进行身份验证或批准。在浏览器中完成流程,然后在 CLI 中确认。

914 980 

915要自动响应引发请求而不显示对话框,请使用 [`Elicitation` hook](/zh-CN/hooks#Elicitation)。981要自动响应引发请求而不显示对话框,请使用 [`Elicitation` hook](/zh-CN/hooks#elicitation)。

916 982 

917如果您正在构建使用引发的 MCP 服务器,请参阅 [MCP 引发规范](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation)以了解协议详细信息和架构示例。983如果您正在构建使用引发的 MCP 服务器,请参阅 [MCP 引发规范](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation)以了解协议详细信息和架构示例。

918 984 

919## 使用 MCP 资源985<h2 id="use-mcp-resources">

986 使用 MCP 资源

987</h2>

920 988 

921MCP 服务器可以公开资源,您可以使用 @ 提及来引用,类似于您引用文件的方式。989MCP 服务器可以公开资源,您可以使用 @ 提及来引用,类似于您引用文件的方式。

922 990 

923### 引用 MCP 资源991<h3 id="reference-mcp-resources">

992 引用 MCP 资源

993</h3>

924 994 

925<Steps>995<Steps>

926 <Step title="列出可用资源">996 <Step title="列出可用资源">


957 * 资源可以包含 MCP 服务器提供的任何类型的内容(文本、JSON、结构化数据等)1027 * 资源可以包含 MCP 服务器提供的任何类型的内容(文本、JSON、结构化数据等)

958</Tip>1028</Tip>

959 1029 

960## 使用 MCP 工具搜索进行扩展1030<h2 id="scale-with-mcp-tool-search">

1031 使用 MCP 工具搜索进行扩展

1032</h2>

961 1033 

962工具搜索通过延迟工具定义直到 Claude 需要它们来保持 MCP 上下文使用低。仅工具名称和服务器说明在会话启动时加载,因此添加更多 MCP 服务器对您的上下文窗口的影响最小。1034工具搜索通过延迟工具定义直到 Claude 需要它们来保持 MCP 上下文使用低。仅工具名称和服务器说明在会话启动时加载,因此添加更多 MCP 服务器对您的上下文窗口的影响最小。Claude Code 不对每个服务器施加固定的工具上限;实际限制是您的上下文窗口预算。

963 1035 

964### 工作原理1036<h3 id="how-it-works">

1037 工作原理

1038</h3>

965 1039 

966工具搜索默认启用。MCP 工具被延迟而不是预先加载到上下文中,Claude 使用搜索工具在任务需要时发现相关的工具。仅 Claude 实际使用的工具进入上下文。从您的角度来看,MCP 工具的工作方式与之前完全相同。1040工具搜索默认启用。MCP 工具被延迟而不是预先加载到上下文中,Claude 使用搜索工具在任务需要时发现相关的工具。仅 Claude 实际使用的工具进入上下文。从您的角度来看,MCP 工具的工作方式与之前完全相同。

967 1041 

968如果您更喜欢基于阈值的加载,请设置 `ENABLE_TOOL_SEARCH=auto` 以在工具适合上下文窗口的 10% 内时预先加载架构,仅延迟溢出部分。有关所有选项,请参阅[配置工具搜索](#configure-tool-search)。1042如果您更喜欢基于阈值的加载,请设置 `ENABLE_TOOL_SEARCH=auto` 以在工具适合上下文窗口的 10% 内时预先加载架构,仅延迟溢出部分。有关所有选项,请参阅[配置工具搜索](#configure-tool-search)。

969 1043 

970### 对于 MCP 服务器作者1044<h3 id="for-mcp-server-authors">

1045 对于 MCP 服务器作者

1046</h3>

971 1047 

972如果您正在构建 MCP 服务器,启用工具搜索时服务器说明字段会变得更有用。服务器说明可帮助 Claude 了解何时搜索您的工具,类似于 [skills](/zh-CN/skills) 的工作方式。1048如果您正在构建 MCP 服务器,启用工具搜索时服务器说明字段会变得更有用。服务器说明可帮助 Claude 了解何时搜索您的工具,类似于 [skills](/zh-CN/skills) 的工作方式。

973 1049 


979 1055 

980Claude Code 将工具描述和服务器说明截断为每个 2KB。保持它们简洁以避免截断,并将关键详细信息放在开头。1056Claude Code 将工具描述和服务器说明截断为每个 2KB。保持它们简洁以避免截断,并将关键详细信息放在开头。

981 1057 

982### 配置工具搜索1058<h3 id="configure-tool-search">

1059 配置工具搜索

1060</h3>

983 1061 

984工具搜索默认启用:MCP 工具被延迟并按需发现。Claude Code 在 Vertex AI 上默认禁用它。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,它也被禁用,因为大多数代理不转发 `tool_reference` 块。显式设置 `ENABLE_TOOL_SEARCH` 以覆盖任一回退。1062工具搜索默认启用:MCP 工具被延迟并按需发现。Claude Code 在 Vertex AI 上默认禁用它。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,它也被禁用,因为大多数代理不转发 `tool_reference` 块。显式设置 `ENABLE_TOOL_SEARCH` 以覆盖任一回退。

985 1063 

986工具搜索需要支持 `tool_reference` 块的模型:Sonnet 4 及更高版本,或 Opus 4 及更高版本。Haiku 模型不支持它。在 Vertex AI 上,工具搜索支持 Claude Sonnet 4.5 及更高版本以及 Claude Opus 4.5 及更高版本。1064工具搜索需要支持 `tool_reference` 块的模型。Haiku 模型不支持它。在 Vertex AI 上,工具搜索支持 Claude Sonnet 4.5 及更高版本以及 Claude Opus 4.5 及更高版本。

987 1065 

988使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:1066使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:

989 1067 


1015}1093}

1016```1094```

1017 1095 

1018### 豁免服务器延迟1096<h3 id="exempt-a-server-from-deferral">

1097 豁免服务器延迟

1098</h3>

1019 1099 

1020如果服务器的工具应始终对 Claude 可见而无需搜索步骤,请在该服务器的配置中将 `alwaysLoad` 设置为 `true`。来自该服务器的每个工具随后在会话启动时加载到上下文中,无论 `ENABLE_TOOL_SEARCH` 设置如何。对于 Claude 在每个回合都需要的少量工具,请使用此选项,因为每个预先加载的工具会消耗本来可用于您的对话的上下文。1100如果服务器的工具应始终对 Claude 可见而无需搜索步骤,请在该服务器的配置中将 `alwaysLoad` 设置为 `true`。来自该服务器的每个工具随后在会话启动时加载到上下文中,无论 `ENABLE_TOOL_SEARCH` 设置如何。对于 Claude 在每个回合都需要的少量工具,请使用此选项,因为每个预先加载的工具会消耗本来可用于您的对话的上下文。

1021 1101 


1037 1117 

1038设置 `alwaysLoad: true` 也会阻止启动直到服务器连接,上限为标准 5 秒连接超时。即使 MCP 启动在其他方面[默认为非阻塞](/zh-CN/env-vars),这也适用,因为工具必须在构建第一个提示时存在。其他服务器继续在后台连接。1118设置 `alwaysLoad: true` 也会阻止启动直到服务器连接,上限为标准 5 秒连接超时。即使 MCP 启动在其他方面[默认为非阻塞](/zh-CN/env-vars),这也适用,因为工具必须在构建第一个提示时存在。其他服务器继续在后台连接。

1039 1119 

1040## 将 MCP 提示用作命令1120<h2 id="use-mcp-prompts-as-commands">

1121 将 MCP 提示用作命令

1122</h2>

1041 1123 

1042MCP 服务器可以公开在 Claude Code 中作为命令可用的提示。1124MCP 服务器可以公开在 Claude Code 中作为命令可用的提示。

1043 1125 

1044### 执行 MCP 提示1126<h3 id="execute-mcp-prompts">

1127 执行 MCP 提示

1128</h3>

1045 1129 

1046<Steps>1130<Steps>

1047 <Step title="发现可用的提示">1131 <Step title="发现可用的提示">


1076 * 服务器和提示名称被规范化(空格变为下划线)1160 * 服务器和提示名称被规范化(空格变为下划线)

1077</Tip>1161</Tip>

1078 1162 

1079## 托管 MCP 配置1163<h2 id="managed-mcp-configuration">

1164 托管 MCP 配置

1165</h2>

1080 1166 

1081对于需要对用户可以连接的 MCP 服务器进行集中控制的组织,请参阅[托管 MCP 配置](/zh-CN/managed-mcp)。它涵盖使用 `managed-mcp.json` 部署固定服务器集、使用 `allowedMcpServers` 和 `deniedMcpServers` 限制服务器,以及当服务器被阻止时用户看到的内容。1167对于需要对用户可以连接的 MCP 服务器进行集中控制的组织,请参阅[托管 MCP 配置](/zh-CN/managed-mcp)。它涵盖使用 `managed-mcp.json` 部署固定服务器集、使用 `allowedMcpServers` 和 `deniedMcpServers` 限制服务器,以及当服务器被阻止时用户看到的内容。

Details

176 176 

177本地 stdio 服务器是 Claude Code 在您的机器上作为子进程启动的程序,而不是它通过 URL 访问的服务。对于需要访问本地资源(如浏览器、您的文件系统或数据库套接字)的工具,请使用一个。177本地 stdio 服务器是 Claude Code 在您的机器上作为子进程启动的程序,而不是它通过 URL 访问的服务。对于需要访问本地资源(如浏览器、您的文件系统或数据库套接字)的工具,请使用一个。

178 178 

179[Playwright MCP 服务器](https://github.com/microsoft/playwright-mcp) 是一个很好的尝试:它为 Claude 提供了一个可以导航、点击和读取的浏览器,并且不需要帐户。它通过 `npx` 运行,因此需要 [Node.js](https://nodejs.org/en/download) 18 或更高版本。179[Playwright MCP 服务器](https://github.com/microsoft/playwright-mcp)是一个很好的尝试:它为 Claude 提供了一个可以导航、点击和读取的浏览器,并且不需要帐户。它通过 `npx` 运行,因此需要 [Node.js](https://nodejs.org/en/download) 18 或更高版本。

180 180 

181<Steps>181<Steps>

182 <Step title="添加 Playwright 服务器">182 <Step title="添加 Playwright 服务器">


222 连接需要登录的服务器222 连接需要登录的服务器

223</h3>223</h3>

224 224 

225Sentry、Linear 和 Notion 等托管服务在 OAuth 后面运行其 MCP 服务器:您添加服务器的 URL,然后通过浏览器登录。225托管服务(如 Sentry、Linear 和 Notion)在 OAuth 后面运行其 MCP 服务器:您添加服务器的 URL,然后通过浏览器登录。

226 226 

227下面的步骤以 Sentry 为例。要连接不同的服务,请替换其 URL,您可以在 [Anthropic 目录](/zh-CN/mcp#find-and-build-mcp-servers) 或服务的文档中找到。227下面的步骤以 Sentry 为例。要连接不同的服务,请替换其 URL,您可以在 [Anthropic 目录](/zh-CN/mcp#find-and-build-mcp-servers)或服务的文档中找到。

228 228 

229<Steps>229<Steps>

230 <Step title="添加服务器">230 <Step title="添加服务器">


318 </Accordion>318 </Accordion>

319 319 

320 <Accordion title="状态显示连接失败或连接错误">320 <Accordion title="状态显示连接失败或连接错误">

321 两种状态都意味着服务器没有启动或 URL 没有响应。对于期望令牌而不是 [连接需要登录的服务器](#connect-a-server-that-requires-sign-in) 中涵盖的浏览器登录的 HTTP 服务器,它们也可能出现。321 两种状态都意味着服务器没有启动或 URL 没有响应。对于期望令牌而不是[连接需要登录的服务器](#connect-a-server-that-requires-sign-in)中涵盖的浏览器登录的 HTTP 服务器,它们也可能出现。

322 322 

323 对于 HTTP 服务器,确认 URL 可从您的机器访问:323 对于 HTTP 服务器,确认 URL 可从您的机器访问:

324 324 


331 响应告诉您您有什么样的问题:331 响应告诉您您有什么样的问题:

332 332 

333 * `404` 或 `405`:服务器已启动。许多 MCP 端点仅回答 POST 请求,因此这仍然确认 URL 可从您的机器访问。333 * `404` 或 `405`:服务器已启动。许多 MCP 端点仅回答 POST 请求,因此这仍然确认 URL 可从您的机器访问。

334 * `401` 或 `403`:服务器已启动,您需要进行身份验证。使用 [连接需要登录的服务器](#connect-a-server-that-requires-sign-in) 中的浏览器登录,或对于接受令牌的服务器(如 GitHub 的),在 `claude mcp add` 命令上使用 `--header "Authorization: Bearer <token>"` 传递它。334 * `401` 或 `403`:服务器已启动,您需要进行身份验证。使用[连接需要登录的服务器](#connect-a-server-that-requires-sign-in)中的浏览器登录,或对于接受令牌的服务器(如 GitHub 的),在 `claude mcp add` 命令上使用 `--header "Authorization: Bearer <token>"` 传递它。

335 * 完全没有响应:检查 URL 和您的网络。335 * 完全没有响应:检查 URL 和您的网络。

336 336 

337 对于 stdio 服务器,直接在终端中运行配置的命令以查看基础错误。对于本指南中的 Playwright 服务器,运行:337 对于 stdio 服务器,直接在终端中运行配置的命令以查看基础错误。对于本指南中的 Playwright 服务器,运行:

memory.md +93 −33

Details

14本页面涵盖以下内容:14本页面涵盖以下内容:

15 15 

16* [编写和组织 CLAUDE.md 文件](#claude-md-files)16* [编写和组织 CLAUDE.md 文件](#claude-md-files)

17* [使用 `.claude/rules/` 将规则范围限定到特定文件类型](#organize-rules-with-clauderules)17* [使用 `.claude/rules/` 将规则范围限定到特定文件类型](#organize-rules-with-claude/rules/)

18* [配置自动记忆](#auto-memory),使 Claude 自动记笔记18* [配置自动记忆](#auto-memory),使 Claude 自动记笔记

19* [故障排除](#troubleshoot-memory-issues),当指令未被遵循时19* [故障排除](#troubleshoot-memory-issues),当指令未被遵循时

20 20 

21## CLAUDE.md 与自动记忆21<h2 id="claude-md-vs-auto-memory">

22 CLAUDE.md 与自动记忆

23</h2>

22 24 

23Claude Code 有两个互补的记忆系统。两者都在每次对话开始时加载。Claude 将它们视为上下文,而不是强制配置。要阻止某个操作,无论 Claude 决定什么,请改用 [PreToolUse hook](/zh-CN/hooks-guide)。你的指令越具体和简洁,Claude 遵循它们的一致性就越高。25Claude Code 有两个互补的记忆系统。两者都在每次对话开始时加载。Claude 将它们视为上下文,而不是强制配置。要阻止某个操作,无论 Claude 决定什么,请改用 [PreToolUse hook](/zh-CN/hooks-guide)。你的指令越具体和简洁,Claude 遵循它们的一致性就越高。

24 26 


34 36 

35Subagents 也可以维护自己的自动记忆。有关详细信息,请参阅 [subagent 配置](/zh-CN/sub-agents#enable-persistent-memory)。37Subagents 也可以维护自己的自动记忆。有关详细信息,请参阅 [subagent 配置](/zh-CN/sub-agents#enable-persistent-memory)。

36 38 

37## CLAUDE.md 文件39<h2 id="claude-md-files">

40 CLAUDE.md 文件

41</h2>

38 42 

39CLAUDE.md 文件是 markdown 文件,为项目、你的个人工作流或整个组织为 Claude 提供持久指令。你用纯文本编写这些文件;Claude 在每个会话开始时读取它们。43CLAUDE.md 文件是 markdown 文件,为项目、你的个人工作流或整个组织为 Claude 提供持久指令。你用纯文本编写这些文件;Claude 在每个会话开始时读取它们。

40 44 

41### 何时添加到 CLAUDE.md45<h3 id="when-to-add-to-claude-md">

46 何时添加到 CLAUDE.md

47</h3>

42 48 

43将 CLAUDE.md 视为你写下你本来会重新解释的内容的地方。在以下情况下添加到它:49将 CLAUDE.md 视为你写下你本来会重新解释的内容的地方。在以下情况下添加到它:

44 50 


49 55 

50将其保持为 Claude 应该在每个会话中保持的事实:构建命令、约定、项目布局、"总是做 X"规则。如果一个条目是多步骤过程或仅对代码库的一部分重要,将其移到 [skill](/zh-CN/skills) 或 [路径范围规则](#organize-rules-with-claude/rules/) 中。[扩展概述](/zh-CN/features-overview#build-your-setup-over-time)涵盖何时使用每种机制。56将其保持为 Claude 应该在每个会话中保持的事实:构建命令、约定、项目布局、"总是做 X"规则。如果一个条目是多步骤过程或仅对代码库的一部分重要,将其移到 [skill](/zh-CN/skills) 或 [路径范围规则](#organize-rules-with-claude/rules/) 中。[扩展概述](/zh-CN/features-overview#build-your-setup-over-time)涵盖何时使用每种机制。

51 57 

52### 选择 CLAUDE.md 文件的位置58<h3 id="choose-where-to-put-claude-md-files">

59 选择 CLAUDE.md 文件的位置

60</h3>

53 61 

54CLAUDE.md 文件可以位于多个位置,每个位置有不同的范围。下表按加载顺序列出它们,从最广泛的范围到最具体的范围,因此项目指令在用户指令之后出现在上下文中。62CLAUDE.md 文件可以位于多个位置,每个位置有不同的范围。下表按加载顺序列出它们,从最广泛的范围到最具体的范围,因此项目指令在用户指令之后出现在上下文中。

55 63 


64 72 

65对于大型项目,你可以使用 [项目规则](#organize-rules-with-claude/rules/) 将指令分解为特定主题的文件。规则让你将指令范围限定到特定文件类型或子目录。73对于大型项目,你可以使用 [项目规则](#organize-rules-with-claude/rules/) 将指令分解为特定主题的文件。规则让你将指令范围限定到特定文件类型或子目录。

66 74 

67### 设置项目 CLAUDE.md75<h3 id="set-up-a-project-claude-md">

76 设置项目 CLAUDE.md

77</h3>

68 78 

69项目 CLAUDE.md 可以存储在 `./CLAUDE.md` 或 `./.claude/CLAUDE.md` 中。创建此文件并添加适用于在项目上工作的任何人的指令:构建和测试命令、编码标准、架构决策、命名约定和常见工作流。这些指令通过版本控制与你的团队共享,因此请关注项目级标准而不是个人偏好。79项目 CLAUDE.md 可以存储在 `./CLAUDE.md` 或 `./.claude/CLAUDE.md` 中。创建此文件并添加适用于在项目上工作的任何人的指令:构建和测试命令、编码标准、架构决策、命名约定和常见工作流。这些指令通过版本控制与你的团队共享,因此请关注项目级标准而不是个人偏好。

70 80 


74 设置 `CLAUDE_CODE_NEW_INIT=1` 以启用交互式多阶段流程。`/init` 询问要设置哪些工件:CLAUDE.md 文件、skills 和 hooks。然后它使用 subagent 探索你的代码库,通过后续问题填补空白,并在写入任何文件之前呈现可审查的提案。84 设置 `CLAUDE_CODE_NEW_INIT=1` 以启用交互式多阶段流程。`/init` 询问要设置哪些工件:CLAUDE.md 文件、skills 和 hooks。然后它使用 subagent 探索你的代码库,通过后续问题填补空白,并在写入任何文件之前呈现可审查的提案。

75</Tip>85</Tip>

76 86 

77### 编写有效的指令87<h3 id="write-effective-instructions">

88 编写有效的指令

89</h3>

78 90 

79CLAUDE.md 文件在每个会话开始时加载到上下文窗口中,与你的对话一起消耗令牌。[上下文窗口可视化](/zh-CN/context-window)显示 CLAUDE.md 相对于其余启动上下文的加载位置。因为它们是上下文而不是强制配置,你编写指令的方式会影响 Claude 遵循它们的可靠性。具体、简洁、结构良好的指令效果最好。91CLAUDE.md 文件在每个会话开始时加载到上下文窗口中,与你的对话一起消耗令牌。[上下文窗口可视化](/zh-CN/context-window)显示 CLAUDE.md 相对于其余启动上下文的加载位置。因为它们是上下文而不是强制配置,你编写指令的方式会影响 Claude 遵循它们的可靠性。具体、简洁、结构良好的指令效果最好。

80 92 


90 102 

91**一致性**:如果两条规则相互矛盾,Claude 可能会任意选择一条。定期审查你的 CLAUDE.md 文件、子目录中的嵌套 CLAUDE.md 文件和 [`.claude/rules/`](#organize-rules-with-claude/rules/) 以删除过时或冲突的指令。在 monorepos 中,使用 [`claudeMdExcludes`](#exclude-specific-claude-md-files) 跳过与你的工作无关的其他团队的 CLAUDE.md 文件。103**一致性**:如果两条规则相互矛盾,Claude 可能会任意选择一条。定期审查你的 CLAUDE.md 文件、子目录中的嵌套 CLAUDE.md 文件和 [`.claude/rules/`](#organize-rules-with-claude/rules/) 以删除过时或冲突的指令。在 monorepos 中,使用 [`claudeMdExcludes`](#exclude-specific-claude-md-files) 跳过与你的工作无关的其他团队的 CLAUDE.md 文件。

92 104 

93### 导入其他文件105<h3 id="import-additional-files">

106 导入其他文件

107</h3>

94 108 

95CLAUDE.md 文件可以使用 `@path/to/import` 语法导入其他文件。导入的文件在启动时展开并加载到上下文中,与引用它们的 CLAUDE.md 一起。109CLAUDE.md 文件可以使用 `@path/to/import` 语法导入其他文件。导入的文件在启动时展开并加载到上下文中,与引用它们的 CLAUDE.md 一起。

96 110 


120 134 

121有关组织指令的更结构化方法,请参阅 [`.claude/rules/`](#organize-rules-with-claude/rules/)。135有关组织指令的更结构化方法,请参阅 [`.claude/rules/`](#organize-rules-with-claude/rules/)。

122 136 

123### AGENTS.md137<h3 id="agents-md">

138 AGENTS.md

139</h3>

124 140 

125Claude Code 读取 `CLAUDE.md`,而不是 `AGENTS.md`。如果你的存储库已经为其他编码代理使用 `AGENTS.md`,创建一个导入它的 `CLAUDE.md`,这样两个工具都可以读取相同的指令而无需重复。你也可以在导入下方添加 Claude 特定的指令。Claude 在会话开始时加载导入的文件,然后附加其余部分:141Claude Code 读取 `CLAUDE.md`,而不是 `AGENTS.md`。如果你的存储库已经为其他编码代理使用 `AGENTS.md`,创建一个导入它的 `CLAUDE.md`,这样两个工具都可以读取相同的指令而无需重复。你也可以在导入下方添加 Claude 特定的指令。Claude 在会话开始时加载导入的文件,然后附加其余部分:

126 142 


140 156 

141在 Windows 上,创建符号链接需要管理员权限或开发者模式,所以改用 `@AGENTS.md` 导入。157在 Windows 上,创建符号链接需要管理员权限或开发者模式,所以改用 `@AGENTS.md` 导入。

142 158 

143在已经有 `AGENTS.md` 的存储库中运行 [`/init`](/zh-CN/commands) 会读取它并将相关部分合并到生成的 `CLAUDE.md` 中。它也读取其他工具配置,如 `.cursorrules` 和 `.windsurfrules`。159在已经有 `AGENTS.md` 的存储库中运行 [`/init`](/zh-CN/commands) 会读取它并将相关部分合并到生成的 `CLAUDE.md` 中。它也读取其他工具配置,如 `.cursorrules`、`.devin/rules/` 和 `.windsurfrules`。

144 160 

145### CLAUDE.md 文件如何加载161<h3 id="how-claude-md-files-load">

162 CLAUDE.md 文件如何加载

163</h3>

146 164 

147Claude Code 通过从当前工作目录向上遍历目录树来读取 CLAUDE.md 文件,检查沿途的每个目录是否有 `CLAUDE.md` 和 `CLAUDE.local.md` 文件。这意味着如果你在 `foo/bar/` 中运行 Claude Code,它会从 `foo/bar/CLAUDE.md`、`foo/CLAUDE.md` 和沿途的任何 `CLAUDE.local.md` 文件加载指令。165Claude Code 通过从当前工作目录向上遍历目录树来读取 CLAUDE.md 文件,检查沿途的每个目录是否有 `CLAUDE.md` 和 `CLAUDE.local.md` 文件。这意味着如果你在 `foo/bar/` 中运行 Claude Code,它会从 `foo/bar/CLAUDE.md`、`foo/CLAUDE.md` 和沿途的任何 `CLAUDE.local.md` 文件加载指令。

148 166 


154 172 

155块级 HTML 注释(`<!-- maintainer notes -->`)在 CLAUDE.md 文件中在内容注入到 Claude 的上下文之前被剥离。使用它们为人类维护者留下笔记,而不在它们上花费上下文令牌。代码块内的注释被保留。当你直接用 Read 工具打开 CLAUDE.md 文件时,注释保持可见。173块级 HTML 注释(`<!-- maintainer notes -->`)在 CLAUDE.md 文件中在内容注入到 Claude 的上下文之前被剥离。使用它们为人类维护者留下笔记,而不在它们上花费上下文令牌。代码块内的注释被保留。当你直接用 Read 工具打开 CLAUDE.md 文件时,注释保持可见。

156 174 

157#### 从其他目录加载175<h4 id="load-from-additional-directories">

176 从其他目录加载

177</h4>

158 178 

159`--add-dir` 标志使 Claude 可以访问主工作目录外的其他目录。默认情况下,不加载这些目录中的 CLAUDE.md 文件。179`--add-dir` 标志使 Claude 可以访问主工作目录外的其他目录。默认情况下,不加载这些目录中的 CLAUDE.md 文件。

160 180 


166 186 

167这会从其他目录加载 `CLAUDE.md`、`.claude/CLAUDE.md`、`.claude/rules/*.md` 和 `CLAUDE.local.md`。如果你从 [`--setting-sources`](/zh-CN/cli-reference) 中排除 `local`,`CLAUDE.local.md` 会被跳过。187这会从其他目录加载 `CLAUDE.md`、`.claude/CLAUDE.md`、`.claude/rules/*.md` 和 `CLAUDE.local.md`。如果你从 [`--setting-sources`](/zh-CN/cli-reference) 中排除 `local`,`CLAUDE.local.md` 会被跳过。

168 188 

169### 使用 `.claude/rules/` 组织规则189<h3 id="organize-rules-with-claude/rules/">

190 使用 `.claude/rules/` 组织规则

191</h3>

170 192 

171对于较大的项目,你可以使用 `.claude/rules/` 目录将指令组织到多个文件中。这使指令保持模块化并更容易让团队维护。规则也可以 [范围限定到特定文件路径](#path-specific-rules),因此它们仅在 Claude 处理匹配文件时加载到上下文中,减少噪音并节省上下文空间。193对于较大的项目,你可以使用 `.claude/rules/` 目录将指令组织到多个文件中。这使指令保持模块化并更容易让团队维护。规则也可以 [范围限定到特定文件路径](#path-specific-rules),因此它们仅在 Claude 处理匹配文件时加载到上下文中,减少噪音并节省上下文空间。

172 194 


174 规则在每个会话或打开匹配文件时加载到上下文中。对于不需要始终在上下文中的特定任务指令,改用 [skills](/zh-CN/skills),它仅在你调用它们或 Claude 确定它们与你的提示相关时加载。196 规则在每个会话或打开匹配文件时加载到上下文中。对于不需要始终在上下文中的特定任务指令,改用 [skills](/zh-CN/skills),它仅在你调用它们或 Claude 确定它们与你的提示相关时加载。

175</Note>197</Note>

176 198 

177#### 设置规则199<h4 id="set-up-rules">

200 设置规则

201</h4>

178 202 

179在你的项目的 `.claude/rules/` 目录中放置 markdown 文件。每个文件应涵盖一个主题,具有描述性文件名,如 `testing.md` 或 `api-design.md`。所有 `.md` 文件都被递归发现,因此你可以将规则组织到子目录中,如 `frontend/` 或 `backend/`:203在你的项目的 `.claude/rules/` 目录中放置 markdown 文件。每个文件应涵盖一个主题,具有描述性文件名,如 `testing.md` 或 `api-design.md`。所有 `.md` 文件都被递归发现,因此你可以将规则组织到子目录中,如 `frontend/` 或 `backend/`:

180 204 


190 214 

191没有 [`paths` frontmatter](#path-specific-rules) 的规则在启动时加载,优先级与 `.claude/CLAUDE.md` 相同。215没有 [`paths` frontmatter](#path-specific-rules) 的规则在启动时加载,优先级与 `.claude/CLAUDE.md` 相同。

192 216 

193#### 特定路径的规则217<h4 id="path-specific-rules">

218 特定路径的规则

219</h4>

194 220 

195规则可以使用带有 `paths` 字段的 YAML frontmatter 范围限定到特定文件。这些条件规则仅在 Claude 处理与指定模式匹配的文件时适用。221规则可以使用带有 `paths` 字段的 YAML frontmatter 范围限定到特定文件。这些条件规则仅在 Claude 处理与指定模式匹配的文件时适用。

196 222 


229---255---

230```256```

231 257 

232#### 使用符号链接跨项目共享规则258<h4 id="share-rules-across-projects-with-symlinks">

259 使用符号链接跨项目共享规则

260</h4>

233 261 

234`.claude/rules/` 目录支持符号链接,因此你可以维护一组共享规则并将它们链接到多个项目中。符号链接被解析并正常加载,循环符号链接被检测并优雅处理。262`.claude/rules/` 目录支持符号链接,因此你可以维护一组共享规则并将它们链接到多个项目中。符号链接被解析并正常加载,循环符号链接被检测并优雅处理。

235 263 


240ln -s ~/company-standards/security.md .claude/rules/security.md268ln -s ~/company-standards/security.md .claude/rules/security.md

241```269```

242 270 

243#### 用户级规则271<h4 id="user-level-rules">

272 用户级规则

273</h4>

244 274 

245`~/.claude/rules/` 中的个人规则适用于你机器上的每个项目。使用它们来处理不是项目特定的偏好:275`~/.claude/rules/` 中的个人规则适用于你机器上的每个项目。使用它们来处理不是项目特定的偏好:

246 276 


252 282 

253用户级规则在项目规则之前加载,给予项目规则更高的优先级。283用户级规则在项目规则之前加载,给予项目规则更高的优先级。

254 284 

255### 为大型团队管理 CLAUDE.md285<h3 id="manage-claude-md-for-large-teams">

286 为大型团队管理 CLAUDE.md

287</h3>

256 288 

257对于在团队中部署 Claude Code 的组织,你可以集中指令并控制加载哪些 CLAUDE.md 文件。289对于在团队中部署 Claude Code 的组织,你可以集中指令并控制加载哪些 CLAUDE.md 文件。

258 290 

259#### 部署组织范围的 CLAUDE.md291<h4 id="deploy-organization-wide-claude-md">

292 部署组织范围的 CLAUDE.md

293</h4>

260 294 

261组织可以部署一个集中管理的 CLAUDE.md,适用于机器上的所有用户。此文件不能被个人设置排除。295组织可以部署一个集中管理的 CLAUDE.md,适用于机器上的所有用户。此文件不能被个人设置排除。

262 296 


302 336 

303设置规则由客户端强制执行,无论 Claude 决定做什么。CLAUDE.md 指令塑造 Claude 的行为,但不是硬强制层。337设置规则由客户端强制执行,无论 Claude 决定做什么。CLAUDE.md 指令塑造 Claude 的行为,但不是硬强制层。

304 338 

305#### 排除特定的 CLAUDE.md 文件339<h4 id="exclude-specific-claude-md-files">

340 排除特定的 CLAUDE.md 文件

341</h4>

306 342 

307在大型 monorepos 中,祖先 CLAUDE.md 文件可能包含与你的工作无关的指令。`claudeMdExcludes` 设置让你按路径或 glob 模式跳过特定文件。343在大型 monorepos 中,祖先 CLAUDE.md 文件可能包含与你的工作无关的指令。`claudeMdExcludes` 设置让你按路径或 glob 模式跳过特定文件。

308 344 


321 357 

322托管策略 CLAUDE.md 文件不能被排除。这确保组织范围指令始终适用,无论个人设置如何。358托管策略 CLAUDE.md 文件不能被排除。这确保组织范围指令始终适用,无论个人设置如何。

323 359 

324## 自动记忆360<h2 id="auto-memory">

361 自动记忆

362</h2>

325 363 

326自动记忆让 Claude 跨会话积累知识,无需你编写任何内容。Claude 在工作时为自己保存笔记:构建命令、调试见解、架构笔记、代码样式偏好和工作流习惯。Claude 不会每个会话都保存内容。它根据信息在未来对话中是否有用来决定什么值得记住。364自动记忆让 Claude 跨会话积累知识,无需你编写任何内容。Claude 在工作时为自己保存笔记:构建命令、调试见解、架构笔记、代码样式偏好和工作流习惯。Claude 不会每个会话都保存内容。它根据信息在未来对话中是否有用来决定什么值得记住。

327 365 


329 自动记忆需要 Claude Code v2.1.59 或更高版本。使用 `claude --version` 检查你的版本。367 自动记忆需要 Claude Code v2.1.59 或更高版本。使用 `claude --version` 检查你的版本。

330</Note>368</Note>

331 369 

332### 启用或禁用自动记忆370<h3 id="enable-or-disable-auto-memory">

371 启用或禁用自动记忆

372</h3>

333 373 

334自动记忆默认开启。要切换它,在会话中打开 `/memory` 并使用自动记忆切换,或在你的项目设置中设置 `autoMemoryEnabled`:374自动记忆默认开启。要切换它,在会话中打开 `/memory` 并使用自动记忆切换,或在你的项目设置中设置 `autoMemoryEnabled`:

335 375 


341 381 

342要通过环境变量禁用自动记忆,设置 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`。382要通过环境变量禁用自动记忆,设置 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`。

343 383 

344### 存储位置384<h3 id="storage-location">

385 存储位置

386</h3>

345 387 

346每个项目在 `~/.claude/projects/<project>/memory/` 获得自己的记忆目录。`<project>` 路径来自 git 存储库,因此同一存储库中的所有 worktrees 和子目录共享一个自动记忆目录。在 git 存储库外,改用项目根目录。388每个项目在 `~/.claude/projects/<project>/memory/` 获得自己的记忆目录。`<project>` 路径来自 git 存储库,因此同一存储库中的所有 worktrees 和子目录共享一个自动记忆目录。在 git 存储库外,改用项目根目录。

347 389 


369 411 

370自动记忆是机器本地的。同一 git 存储库中的所有 worktrees 和子目录共享一个自动记忆目录。文件不在机器或云环境之间共享。412自动记忆是机器本地的。同一 git 存储库中的所有 worktrees 和子目录共享一个自动记忆目录。文件不在机器或云环境之间共享。

371 413 

372### 它如何工作414<h3 id="how-it-works">

415 它如何工作

416</h3>

373 417 

374`MEMORY.md` 的前 200 行或前 25KB(以先到者为准)在每次对话开始时加载。超过该阈值的内容在会话开始时不加载。Claude 通过将详细笔记移到单独的主题文件中来保持 `MEMORY.md` 简洁。418`MEMORY.md` 的前 200 行或前 25KB(以先到者为准)在每次对话开始时加载。超过该阈值的内容在会话开始时不加载。Claude 通过将详细笔记移到单独的主题文件中来保持 `MEMORY.md` 简洁。

375 419 


379 423 

380Claude 在你的会话中读取和写入记忆文件。当你在 Claude Code 界面中看到"Writing memory"或"Recalled memory"时,Claude 正在主动更新或读取 `~/.claude/projects/<project>/memory/`。424Claude 在你的会话中读取和写入记忆文件。当你在 Claude Code 界面中看到"Writing memory"或"Recalled memory"时,Claude 正在主动更新或读取 `~/.claude/projects/<project>/memory/`。

381 425 

382### 审计和编辑你的记忆426<h3 id="audit-and-edit-your-memory">

427 审计和编辑你的记忆

428</h3>

383 429 

384自动记忆文件是纯 markdown,你可以随时编辑或删除。运行 [`/memory`](#view-and-edit-with-memory) 从会话中浏览和打开记忆文件。430自动记忆文件是纯 markdown,你可以随时编辑或删除。运行 [`/memory`](#view-and-edit-with-%2Fmemory) 从会话中浏览和打开记忆文件。

385 431 

386## 使用 `/memory` 查看和编辑432<h2 id="view-and-edit-with-/memory">

433 使用 `/memory` 查看和编辑

434</h2>

387 435 

388`/memory` 命令列出在你当前会话中加载的所有 CLAUDE.md、CLAUDE.local.md 和规则文件,让你切换自动记忆开或关,并提供打开自动记忆文件夹的链接。选择任何文件在你的编辑器中打开它。436`/memory` 命令列出在你当前会话中加载的所有 CLAUDE.md、CLAUDE.local.md 和规则文件,让你切换自动记忆开或关,并提供打开自动记忆文件夹的链接。选择任何文件在你的编辑器中打开它。

389 437 

390当你要求 Claude 记住某些内容时,如"总是使用 pnpm,而不是 npm"或"记住 API 测试需要本地 Redis 实例",Claude 将其保存到自动记忆。要改为添加指令到 CLAUDE.md,直接要求 Claude,如"将其添加到 CLAUDE.md",或通过 `/memory` 自己编辑文件。438当你要求 Claude 记住某些内容时,如"总是使用 pnpm,而不是 npm"或"记住 API 测试需要本地 Redis 实例",Claude 将其保存到自动记忆。要改为添加指令到 CLAUDE.md,直接要求 Claude,如"将其添加到 CLAUDE.md",或通过 `/memory` 自己编辑文件。

391 439 

392## 故障排除记忆问题440<h2 id="troubleshoot-memory-issues">

441 故障排除记忆问题

442</h2>

393 443 

394这些是 CLAUDE.md 和自动记忆最常见的问题,以及调试步骤。444这些是 CLAUDE.md 和自动记忆最常见的问题,以及调试步骤。

395 445 

396### Claude 不遵循我的 CLAUDE.md446<h3 id="claude-isn’t-following-my-claude-md">

447 Claude 不遵循我的 CLAUDE.md

448</h3>

397 449 

398CLAUDE.md 内容作为用户消息在系统提示之后传递,而不是系统提示本身的一部分。Claude 读取它并尝试遵循它,但没有严格遵守的保证,特别是对于模糊或冲突的指令。450CLAUDE.md 内容作为用户消息在系统提示之后传递,而不是系统提示本身的一部分。Claude 读取它并尝试遵循它,但没有严格遵守的保证,特别是对于模糊或冲突的指令。

399 451 


412 使用 [`InstructionsLoaded` hook](/zh-CN/hooks#instructionsloaded) 记录确切加载了哪些指令文件、何时加载以及为什么。这对于调试特定路径规则或子目录中的延迟加载文件很有用。464 使用 [`InstructionsLoaded` hook](/zh-CN/hooks#instructionsloaded) 记录确切加载了哪些指令文件、何时加载以及为什么。这对于调试特定路径规则或子目录中的延迟加载文件很有用。

413</Tip>465</Tip>

414 466 

415### 我不知道自动记忆保存了什么467<h3 id="i-don’t-know-what-auto-memory-saved">

468 我不知道自动记忆保存了什么

469</h3>

416 470 

417运行 `/memory` 并选择自动记忆文件夹来浏览 Claude 保存的内容。一切都是纯 markdown,你可以读取、编辑或删除。471运行 `/memory` 并选择自动记忆文件夹来浏览 Claude 保存的内容。一切都是纯 markdown,你可以读取、编辑或删除。

418 472 

419### 我的 CLAUDE.md 太大了473<h3 id="my-claude-md-is-too-large">

474 我的 CLAUDE.md 太大了

475</h3>

420 476 

421超过 200 行的文件消耗更多上下文并可能降低遵守度。使用 [路径范围规则](#path-specific-rules) 仅在 Claude 处理匹配文件时加载指令,或修剪不是每个会话都需要的内容。分割到 [`@path` 导入](#import-additional-files) 有助于组织,但不会减少上下文,因为导入的文件在启动时加载。477超过 200 行的文件消耗更多上下文并可能降低遵守度。使用 [路径范围规则](#path-specific-rules) 仅在 Claude 处理匹配文件时加载指令,或修剪不是每个会话都需要的内容。分割到 [`@path` 导入](#import-additional-files) 有助于组织,但不会减少上下文,因为导入的文件在启动时加载。

422 478 

423### 在 `/compact` 后指令似乎丢失了479<h3 id="instructions-seem-lost-after-/compact">

480 在 `/compact` 后指令似乎丢失了

481</h3>

424 482 

425项目根 CLAUDE.md 在压缩中存活:在 `/compact` 之后,Claude 从磁盘重新读取它并将其重新注入到会话中。子目录中的嵌套 CLAUDE.md 文件不会自动重新注入;它们在 Claude 下次读取该子目录中的文件时重新加载。483项目根 CLAUDE.md 在压缩中存活:在 `/compact` 之后,Claude 从磁盘重新读取它并将其重新注入到会话中。子目录中的嵌套 CLAUDE.md 文件不会自动重新注入;它们在 Claude 下次读取该子目录中的文件时重新加载。

426 484 


428 486 

429有关大小、结构和具体性的指导,请参阅 [编写有效的指令](#write-effective-instructions)。487有关大小、结构和具体性的指导,请参阅 [编写有效的指令](#write-effective-instructions)。

430 488 

431## 相关资源489<h2 id="related-resources">

490 相关资源

491</h2>

432 492 

433* [调试你的配置](/zh-CN/debug-your-config):诊断为什么 CLAUDE.md 或设置未生效493* [调试你的配置](/zh-CN/debug-your-config):诊断为什么 CLAUDE.md 或设置未生效

434* [Skills](/zh-CN/skills):打包按需加载的可重复工作流494* [Skills](/zh-CN/skills):打包按需加载的可重复工作流

Details

6 6 

7> 了解如何通过 Microsoft Foundry 配置 Claude Code,包括设置、配置和故障排除。7> 了解如何通过 Microsoft Foundry 配置 Claude Code,包括设置、配置和故障排除。

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79<ContactSalesCard surface="foundry" />

80 

9<h2 id="prerequisites">81<h2 id="prerequisites">

10 前置条件82 前置条件

11</h2>83</h2>


90</h3>162</h3>

91 163 

92<Warning>164<Warning>

93 为每个部署固定特定的模型版本。如果您使用模型别名(`sonnet``opus`、`haiku`而不固定版本,Claude Code 可能会尝试使用您的 Foundry 账户中不可用的较新模型版本当 Anthropic 发布更新时会破坏现有用户。创建 Azure 部署时,请选择特定的模型版本而不是"自动更新到最新版本"。165 为每个部署固定特定的模型版本。如果不固定版本,模型别名`sonnet``opus`)会解析为 Claude Code Foundry 内置的默认值这可能滞后于最新版本,并且可能在您的账户中尚不可用。Foundry 没有启动模型检查,因此当默认值不可用时请求会失败。创建 Azure 部署时,请选择特定的模型版本而不是"自动更新到最新版本"。

94</Warning>166</Warning>

95 167 

96设置模型变量以匹配您在第 1 步中创建的部署名称。168设置模型变量以匹配您在第 1 步中创建的部署名称。

model-config.md +149 −27

Details

32| 模型别名 | 行为 |32| 模型别名 | 行为 |

33| ---------------- | -------------------------------------------------------------------------------------------------------------------------------- |33| ---------------- | -------------------------------------------------------------------------------------------------------------------------------- |

34| **`default`** | 特殊值,清除任何模型覆盖并恢复到您的账户类型推荐的模型。本身不是模型别名 |34| **`default`** | 特殊值,清除任何模型覆盖并恢复到您的账户类型推荐的模型。本身不是模型别名 |

35| **`best`** | 使用最强大的可用模型当前等同于 `opus` |35| **`best`** | 在您的组织有权限的地方使用 Fable 5否则使用最新的 Opus 模型 |

36| **`fable`** | 使用 Claude Fable 5 处理您最困难和耗时最长的任务 |

36| **`sonnet`** | 使用最新的 Sonnet 模型用于日常编码任务 |37| **`sonnet`** | 使用最新的 Sonnet 模型用于日常编码任务 |

37| **`opus`** | 使用最新的 Opus 模型用于复杂推理任务 |38| **`opus`** | 使用最新的 Opus 模型用于复杂推理任务 |

38| **`haiku`** | 使用快速高效的 Haiku 模型用于简单任务 |39| **`haiku`** | 使用快速高效的 Haiku 模型用于简单任务 |


48 Opus 4.8 需要 Claude Code v2.1.154 或更高版本。运行 `claude update` 进行升级。49 Opus 4.8 需要 Claude Code v2.1.154 或更高版本。运行 `claude update` 进行升级。

49</Note>50</Note>

50 51 

52<h3 id="work-with-fable-5">

53 使用 Fable 5

54</h3>

55 

56[Claude Fable 5](https://platform.claude.com/docs/zh-CN/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5) 是 Claude Code 中最强大的模型,适合于超过单个会话的任务。它能够维持长时间的自主会话,在采取行动前进行调查,并比较小的模型更频繁地验证其工作。

57 

58Fable 5 不是默认模型。使用 `/model fable` 选择它。其安全分类器标记的请求,最常见于网络安全和生物学领域,会触发[自动模型回退](#automatic-model-fallback)。

59 

60要充分利用 Fable 5:

61 

62* **描述结果,而不是步骤**:给它您想要的结果,让它规划路径。要让它继续工作直到该结果成立,[设置一个目标](/zh-CN/goal)。

63* **交给它模糊的问题**:根本原因调查、故障排除和架构决策是额外调查和验证发挥作用的地方。

64* **跳过验证提醒**:它以更少的提示验证自己的工作,所以测试或检查的提醒通常是不必要的。

65* **规划更大的任务**:给它您通常会分成几部分的工作。它能够维持长会话而不失去思路。

66 

67<Note>

68 Fable 5 需要 Claude Code v2.1.170 或更高版本。较旧的版本在模型选择器中不显示 Fable 5,无法选择它。运行 `claude update` 进行升级。Fable 5 在[零数据保留](/zh-CN/zero-data-retention)下不可用,其中 `/model` 选择器要么省略它,要么将其显示为禁用。

69</Note>

70 

51<h3 id="setting-your-model">71<h3 id="setting-your-model">

52 设置您的模型72 设置您的模型

53</h3>73</h3>


101 121 

102企业管理员可以在[托管或策略设置](/zh-CN/settings#settings-files)中使用 `availableModels` 来限制用户可以选择的模型。122企业管理员可以在[托管或策略设置](/zh-CN/settings#settings-files)中使用 `availableModels` 来限制用户可以选择的模型。

103 123 

104设置 `availableModels` 后,用户无法通过 `/model`、`--model` 标志或 `ANTHROPIC_MODEL` 环境变量切换到列表中不包含的模型。124设置 `availableModels` 后,允许列表适用于用户可以指定模型的每个位置:

125 

126* **主会话模型**:`/model`、`--model` 标志和 `ANTHROPIC_MODEL` 环境变量

127* **别名解析**:{/* min-version: 2.1.176 */}`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_HAIKU_MODEL` 和 `ANTHROPIC_DEFAULT_FABLE_MODEL` 环境变量无法将允许的别名重定向到列表外的模型

128* **快速模式**:{/* min-version: 2.1.176 */}`/fast` 在隐式切换到列表外的 Opus 模型时拒绝切换,显示消息"不在您的组织允许的模型中"

129* **子代理模型**:[子代理](/zh-CN/sub-agents#choose-a-model) frontmatter 中的 `model` 字段、Agent 工具的 `model` 参数、`/agents` 中的模型选择器和 `CLAUDE_CODE_SUBAGENT_MODEL`

130* **顾问模型**:配置的 [`advisorModel`](/zh-CN/advisor) 设置

131* **回退链**:[回退模型链](#fallback-model-chains)中列表外的元素会被删除

132 

133使用 `/model` 切换到被阻止的模型会被拒绝并显示错误,而被阻止的 `--model` 标志或 `ANTHROPIC_MODEL` 值在启动时会被替换为警告,命名请求的和替换的模型,会话会在默认模型上启动。被阻止的子代理或顾问覆盖会回退到继承或默认模型,而不是导致请求失败。

105 134 

106```json theme={null}135```json theme={null}

107{136{


113 默认模型行为142 默认模型行为

114</h3>143</h3>

115 144 

116模型选择器中的"默认"选项不受 `availableModels` 影响。它始终保持可用,并代表系统的运行时默认值[基于用户的订阅层级](#default-model-setting)。145默认情况下,模型选择器中的"默认"选项不受 `availableModels` 影响。它始终保持可用,并代表系统的运行时默认值[基于用户的订阅层级](#default-model-setting)。

117 146 

118即使使用 `availableModels: []`,用户仍然可以使用其层级的默认模型来使用 Claude Code。147要将允许列表扩展到"默认"选项,请在托管或策略设置中将 `enforceAvailableModels` 设置为 `true`同时设置非空的 `availableModels` 列表。当层级默认值不在允许列表中时,"默认"会解析为第一个允许的条目,而不是层级默认值。这需要 Claude Code v2.1.175 或更高版本

148 

149空的 `availableModels` 数组永远不会启用强制执行。即使使用 `availableModels: []`,用户仍然可以使用其层级的默认模型来使用 Claude Code,无论 `enforceAvailableModels` 如何设置。

119 150 

120<h3 id="control-the-model-users-run-on">151<h3 id="control-the-model-users-run-on">

121 控制用户运行的模型152 控制用户运行的模型


123 154 

124`model` 设置是初始选择,而不是强制执行。它设置会话启动时哪个模型处于活跃状态,但用户仍然可以打开 `/model` 并选择"默认",这会解析为其层级的系统默认值,无论 `model` 设置为什么。155`model` 设置是初始选择,而不是强制执行。它设置会话启动时哪个模型处于活跃状态,但用户仍然可以打开 `/model` 并选择"默认",这会解析为其层级的系统默认值,无论 `model` 设置为什么。

125 156 

126要完全控制模型体验,请结合三个设置157要完全控制模型体验,请结合这些设置

127 158 

128* **`availableModels`**:限制用户可以切换到的命名模型159* **`availableModels`**:限制用户可以切换到的命名模型

160* **`enforceAvailableModels`**:将 `availableModels` 允许列表扩展到"默认"选项,因此"默认"无法解析为列表外的模型

129* **`model`**:设置会话启动时的初始模型选择161* **`model`**:设置会话启动时的初始模型选择

130* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`**:控制"默认"选项和 `sonnet`、`opus` 和 `haiku` 别名解析为什么162* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`** / **`ANTHROPIC_DEFAULT_FABLE_MODEL`**:控制"默认"选项和 `sonnet`、`opus`、`haiku` 和 `fable` 别名解析为什么

131 163 

132此示例在 Sonnet 4.5 上启动用户,将选择器限制为 Sonnet 和 Haiku,并将"默认"固定为解析为 Sonnet 4.5 而不是最新版本164此示例在 Sonnet 4.5 上启动用户,将选择器限制为 Sonnet 和 Haiku,并确保"默认"解析为允许列表上的模型,而不是层级默认值

133 165 

134```json theme={null}166```json theme={null}

135{167{

136 "model": "claude-sonnet-4-5",168 "model": "claude-sonnet-4-5",

137 "availableModels": ["claude-sonnet-4-5", "haiku"],169 "availableModels": ["claude-sonnet-4-5", "haiku"],

170 "enforceAvailableModels": true,

138 "env": {171 "env": {

139 "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"172 "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"

140 }173 }

141}174}

142```175```

143 176 

144没有 `env` 块,在选择器中选择"默认"的用户会获得最新的 Sonnet 版本,绕过 `model` 和 `availableModels` 中的版本固定。177没有 `enforceAvailableModels` 或 `env` 块,在选择器中选择"默认"的用户会获得其层级的最新版本,绕过 `model` 和 `availableModels` 中的版本固定。这两个设置涵盖不同的范围:`enforceAvailableModels` 使"默认"遵守允许列表,而 `env` 块固定允许的别名(如 `sonnet`)解析为哪个版本。当限制模型系列就足够时,单独使用 `enforceAvailableModels`;当您还需要固定特定版本时,添加 `env` 块。

145 178 

146<h3 id="merge-behavior">179<h3 id="merge-behavior">

147 合并行为180 合并行为

148</h3>181</h3>

149 182 

150当 `availableModels` 在多个级别设置时,例如用户设置和项目设置,数组会被合并并去重。要强制执行严格的允许列表,请在托管或策略设置中设置 `availableModels`这具有最高优先级183当 `availableModels` 仅在用户、项目和本地设置中设置时数组会在这些级别上合并并去重

184 

185当 `availableModels` 在托管或策略设置中设置时,托管或策略值完全替换合并结果:在用户或项目设置中添加的条目无法扩展它。托管和策略设置以相同方式替换 `enforceAvailableModels` 的较低优先级值。从 Claude Code v2.1.175 开始,这是强制执行严格允许列表的唯一方式;早期版本会将托管列表与较低优先级条目合并。

151 186 

152<h3 id="mantle-model-ids">187<h3 id="mantle-model-ids">

153 Mantle 模型 ID188 Mantle 模型 ID

154</h3>189</h3>

155 190 

156当启用[Bedrock Mantle 端点](/zh-CN/amazon-bedrock#use-the-mantle-endpoint)时,`availableModels` 中以 `anthropic.` 开头的条目会作为自定义选项添加到 `/model` 选择器,并路由到 Mantle 端点。这是对[为第三方部署固定模型](#pin-models-for-third-party-deployments)中描述的仅别名匹配的例外。该设置仍然将选择器限制为列出的条目,因此请在任何 Mantle ID 旁边包含标准别名。191当启用[Bedrock Mantle 端点](/zh-CN/amazon-bedrock#use-the-mantle-endpoint)时,`availableModels` 中以 `anthropic.` 开头的条目会作为自定义选项添加到 `/model` 选择器,并路由到 Mantle 端点。该设置仍然将选择器限制为列出的条目,因此请在任何 Mantle ID 旁边包含标准别名。

157 192 

158<h2 id="special-model-behavior">193<h2 id="special-model-behavior">

159 特殊模型行为194 特殊模型行为


172 207 

173Enterprise 按使用量付费是指按使用量而非按订阅席位计费的 Enterprise 组织。208Enterprise 按使用量付费是指按使用量而非按订阅席位计费的 Enterprise 组织。

174 209 

175Claude Code 在您达到 Opus 使用阈值时可能会自动回退到 Sonnet210Fable 5 不是任何账户类型的默认模型。会话仅在您选择 Fable 5 后才使用它,通过 `/model fable`、`model` 设置或 Fable 5 可用的 `best` 别名使用 `/model` 选择它会将其保存为用户设置中的选定模型,因此后续会话将从 Fable 5 开始,直到您更改模型。

176 211 

177<h3 id="opusplan-model-setting">212<h3 id="opusplan-model-setting">

178 `opusplan` 模型设置213 `opusplan` 模型设置


185 220 

186这为您提供了两全其美的方案:Opus 的卓越推理能力用于规划,Sonnet 的效率用于执行。221这为您提供了两全其美的方案:Opus 的卓越推理能力用于规划,Sonnet 的效率用于执行。

187 222 

188Plan Mode 中的 Opus 阶段使用标准的 200K 上下文窗口运行。[扩展上下文](#extended-context)中描述的自动 1M 升级适用于 `opus` 模型设置不适用于 `opusplan`。223Plan Mode 中的 Opus 阶段使用与 `opus` 模型设置相同的上下文窗口[自动升级到 1M 上下文](#extended-context)的订阅层上,`opusplan` Plan Mode 中也会获得升级。要在您不在自动升级层上时为两个阶段强制使用 1M 上下文请将模型设置为 `opusplan[1m]`。

224 

225当 [`availableModels`](#restrict-model-selection) 排除 Opus 时,`opusplan` 在 Plan Mode 中保持在 Sonnet 上,而不是切换。当 Sonnet 被排除时,隐含的 Haiku 到 Sonnet Plan Mode 升级也是如此。

226 

227有关 Claude 在任务中途决定何时咨询第二个模型而不是在 Plan 边界处切换的混合方法,请参阅 [advisor tool](/zh-CN/advisor)。

228 

229<h3 id="fallback-model-chains">

230 回退模型链

231</h3>

232 

233当主模型过载、不可用或返回另一个不可重试的服务器错误时,Claude Code 可以切换到回退模型,而不是使请求失败。身份验证、计费、速率限制、请求大小和传输错误永远不会触发切换;这些遵循其正常的重试和错误处理。

234 

235配置一个或多个回退模型,Claude Code 会按顺序尝试它们,在切换时显示通知。切换仅持续当前轮次,因此您的下一条消息会再次首先尝试主模型。链在去重后限制为三个模型,额外条目被忽略。

236 

237使用 `--fallback-model` 标志为一个会话设置链,该标志接受逗号分隔的列表:

238 

239```bash theme={null}

240claude --fallback-model sonnet,haiku

241```

242 

243要在会话间持久化链,请在 [settings](/zh-CN/settings) 中将 `fallbackModel` 设置为数组:

244 

245```json theme={null}

246{

247 "fallbackModel": ["claude-sonnet-4-6", "claude-haiku-4-5"]

248}

249```

250 

251`--fallback-model` 标志优先于 `fallbackModel` 设置。每个元素接受模型名称或别名,`"default"` 扩展为默认模型。

252 

253两种情况会导致元素被跳过:

254 

255* **不可用的模型**:无法访问的模型,例如在设置中固定的已停用模型,会被跳过,Claude Code 继续到下一个元素。

256* **超出允许列表**:不被 [`availableModels`](#restrict-model-selection) 允许的元素在读取链时被删除,永远不会被尝试。

257 

258<h3 id="automatic-model-fallback">

259 自动模型回退

260</h3>

261 

262本部分涵盖来自 Fable 5 的基于内容的回退。有关模型过载或不可用时的基于可用性的回退,请参阅 [Fallback model chains](#fallback-model-chains)。

263 

264Fable 5 运行时具有网络安全和生物学内容的安全分类器。当分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行该请求,并在记录中显示通知:Anthropic API 和 [LLM gateway](/zh-CN/llm-gateway) 部署上的 Opus 4.8,或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 上的 Opus 4.7。

265 

266会话随后在该 Opus 模型上继续。要返回 Fable 5,请运行 `/model fable`。

267 

268<h4 id="check-what-triggered-fallback">

269 检查触发回退的原因

270</h4>

271 

272回退可以在会话的第一个请求上触发,在您发送任何不寻常的内容之前,因为第一个请求携带工作区上下文,例如您的 CLAUDE.md 内容和 git 状态。包含安全或生物学材料的存储库可以仅在该上下文上触发分类器。

273 

274要检查自定义是否是触发器,请使用 `claude --safe-mode` 启动会话,这会禁用自定义,例如 CLAUDE.md、skills、MCP servers 和 hooks。Git 状态和目录名称不是自定义,仍然包括在内。

275 

276<h4 id="ask-before-switching">

277 切换前询问

278</h4>

279 

280要决定每次请求被标记时发生什么,而不是自动切换,请运行 `/config` 并关闭"在消息被标记时切换模型"。标记的请求随后暂停会话,有两个选项:切换到 Opus 模型,或编辑提示并在 Fable 5 上重试。

281 

282某些情况的行为不同:

283 

284* 如果两个模型都标记相同的请求,您可以编辑提示并重试,或启动新会话。

285* 在移动 [Claude Code on the web](/zh-CN/claude-code-on-the-web) 会话上,不支持编辑和重试。切换模型,或从桌面浏览器或桌面应用继续会话。

286* 在 [non-interactive mode](/zh-CN/cli-reference#cli-flags) 和无法显示提示的 SDK 集成中,标记的请求以拒绝结束轮次。

287 

288<h4 id="enable-fallback-on-bedrock-vertex-ai-and-foundry">

289 在 Bedrock、Vertex AI 和 Foundry 上启用回退

290</h4>

291 

292在 [Amazon Bedrock](/zh-CN/amazon-bedrock)、[Google Vertex AI](/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/zh-CN/microsoft-foundry) 上,模型 ID 是特定于提供商的,因此自动回退仅在 Claude Code 可以识别两个涉及的模型时运行:

293 

294* Claude Code 必须将当前模型识别为 Fable 5:模型 ID 包含 `claude-fable-5`,匹配 `ANTHROPIC_DEFAULT_FABLE_MODEL` 的值,或使用 [`modelOverrides`](#override-model-ids-per-version) 映射。

295* 回退目标必须解析为 Opus 模型:`ANTHROPIC_DEFAULT_OPUS_MODEL` 的值(如果设置),否则提供商模型列表中的 Opus 4.8 条目。

296 

297如果任一模型无法识别,Claude Code 不会自动切换。标记的请求以拒绝消息结束,您可以使用 [`/model`](#setting-your-model) 切换模型并重试。要在这些提供商上启用自动回退,请将 `ANTHROPIC_DEFAULT_FABLE_MODEL` 设置为您的 Fable 5 模型 ID,将 `ANTHROPIC_DEFAULT_OPUS_MODEL` 设置为您的 Opus 4.8 模型 ID。

298 

299<h4 id="security-research-and-biology-workloads">

300 安全研究和生物学工作负载

301</h4>

302 

303进攻性安全或生物学中的工作负载,包括渗透测试、Capture the Flag (CTF) 练习和生物学相邻代码库,经常触发回退,通常在第一个请求上。对于实质性生物学工作,预期几乎所有请求都会重新路由。

304 

305这是这些领域的预期路由,不是账户标记。如果您的组织需要 Fable 级别的功能来完成此工作,请向您的 Anthropic 账户团队询问受信任访问计划。

189 306 

190<h3 id="adjust-effort-level">307<h3 id="adjust-effort-level">

191 调整工作量级别308 调整工作量级别


197 314 

198| 模型 | 级别 |315| 模型 | 级别 |

199| :-------------------- | :---------------------------------- |316| :-------------------- | :---------------------------------- |

317| Fable 5 | `low`、`medium`、`high`、`xhigh`、`max` |

200| Opus 4.8 和 Opus 4.7 | `low`、`medium`、`high`、`xhigh`、`max` |318| Opus 4.8 和 Opus 4.7 | `low`、`medium`、`high`、`xhigh`、`max` |

201| Opus 4.6 和 Sonnet 4.6 | `low`、`medium`、`high`、`max` |319| Opus 4.6 和 Sonnet 4.6 | `low`、`medium`、`high`、`max` |

202 320 

203如果您设置活跃模型不支持的级别,Claude Code 会回退到您设置的级别或以下的最高支持级别。例如,`xhigh` 在 Opus 4.6 上运行为 `high`。321如果您设置活跃模型不支持的级别,Claude Code 会回退到您设置的级别或以下的最高支持级别。例如,`xhigh` 在 Opus 4.6 上运行为 `high`。

204 322 

205Opus 4.8、Opus 4.6 和 Sonnet 4.6 上的默认工作量是 `high`,Opus 4.7 上的默认工作量是 `xhigh`。323Fable 5、Opus 4.8、Opus 4.6 和 Sonnet 4.6 上的默认工作量是 `high`,Opus 4.7 上的默认工作量是 `xhigh`。

206 324 

207当您首次运行 Opus 4.8 或 Opus 4.7 时,Claude Code 会应用该模型的默认工作量,即使您之前为另一个模型设置了不同的级别:Opus 4.8 上的 `high`Opus 4.7 上的 `xhigh`。切换后再次运行 `/effort` 以选择不同的级别。325当您首次运行 Fable 5、Opus 4.8 或 Opus 4.7 时,Claude Code 会应用该模型的默认工作量,即使您之前为另一个模型设置了不同的级别:Fable 5 和 Opus 4.8 上的 `high`Opus 4.7 上的 `xhigh`。切换后再次运行 `/effort` 以选择不同的级别。

208 326 

209`low`、`medium`、`high` 和 `xhigh` 在会话间持续存在。`max` 提供最深入的推理,对令牌支出没有限制,仅适用于当前会话,除非通过 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量设置。327`low`、`medium`、`high` 和 `xhigh` 在会话间持续存在。`max` 提供最深入的推理,对令牌支出没有限制,仅适用于当前会话,除非通过 `CLAUDE_CODE_EFFORT_LEVEL` 环境变量设置。

210 328 


220| :---------- | :----------------------------------------------------------------------------- |338| :---------- | :----------------------------------------------------------------------------- |

221| `low` | 保留用于短期、范围有限、延迟敏感且不需要高智能的任务 |339| `low` | 保留用于短期、范围有限、延迟敏感且不需要高智能的任务 |

222| `medium` | 减少成本敏感工作的令牌使用,可以权衡一些智能 |340| `medium` | 减少成本敏感工作的令牌使用,可以权衡一些智能 |

223| `high` | 平衡令牌使用和智能。Opus 4.8、Opus 4.6 和 Sonnet 4.6 上的默认值 |341| `high` | 平衡令牌使用和智能。Fable 5、Opus 4.8、Opus 4.6 和 Sonnet 4.6 上的默认值 |

224| `xhigh` | 更深入的推理,令牌支出更高。Opus 4.7 上的默认值 |342| `xhigh` | 更深入的推理,令牌支出更高。Opus 4.7 上的默认值 |

225| `max` | 可以改进困难任务的性能,但可能显示收益递减,容易过度思考。在广泛采用前进行测试 |343| `max` | 可以改进困难任务的性能,但可能显示收益递减,容易过度思考。在广泛采用前进行测试 |

226| `ultracode` | 一个 Claude Code 设置,为每个实质性任务规划一个[动态工作流](/zh-CN/workflows),每条消息进行 `xhigh` 推理。仅限会话 |344| `ultracode` | 一个 Claude Code 设置,为每个实质性任务规划一个[动态工作流](/zh-CN/workflows),每条消息进行 `xhigh` 推理。仅限会话 |


256 374 

257自适应推理使思考在每一步都是可选的,因此 Claude 可以更快地响应常规提示,并为受益于思考的步骤保留更深入的思考。如果您希望 Claude 比当前级别产生的思考更多或更少,您可以直接在您的提示或 `CLAUDE.md` 中说明;模型会在其工作量设置范围内响应该指导。375自适应推理使思考在每一步都是可选的,因此 Claude 可以更快地响应常规提示,并为受益于思考的步骤保留更深入的思考。如果您希望 Claude 比当前级别产生的思考更多或更少,您可以直接在您的提示或 `CLAUDE.md` 中说明;模型会在其工作量设置范围内响应该指导。

258 376 

259Opus 4.7 及更高版本始终使用自适应推理。固定思考预算模式和 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 不适用于它们。377Opus 4.7 及更高版本始终使用自适应推理,Fable 5 也是如此。固定思考预算模式和 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 不适用于它们。

260 378 

261在 Opus 4.6 和 Sonnet 4.6 上,您可以设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` 以恢复到由 `MAX_THINKING_TOKENS` 控制的先前固定思考预算。请参阅[环境变量](/zh-CN/env-vars)。379在 Opus 4.6 和 Sonnet 4.6 上,您可以设置 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` 以恢复到由 `MAX_THINKING_TOKENS` 控制的先前固定思考预算。请参阅[环境变量](/zh-CN/env-vars)。

262 380 


267扩展思考是 Claude 在响应前发出的推理。在支持[自适应推理](#adjust-effort-level)的模型上,工作量级别是控制发生多少思考的主要方式;下面的设置打开或关闭思考并控制其显示方式。385扩展思考是 Claude 在响应前发出的推理。在支持[自适应推理](#adjust-effort-level)的模型上,工作量级别是控制发生多少思考的主要方式;下面的设置打开或关闭思考并控制其显示方式。

268 386 

269| 控制 | 如何设置 |387| 控制 | 如何设置 |

270| :-------- | :------------------------------------------------------------------------------------------------------------ |388| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

271| 当前会话的切换 | 在 macOS 上按 `Option+T` 或在 Windows 和 Linux 上按 `Alt+T` |389| 当前会话的切换 | 在 macOS 上按 `Option+T` 或在 Windows 和 Linux 上按 `Alt+T` |

272| 设置全局默认值 | 运行 `/config` 并切换思考模式。保存为 `~/.claude/settings.json` 中的 `alwaysThinkingEnabled` |390| 设置全局默认值 | 运行 `/config` 并切换思考模式。保存为 `~/.claude/settings.json` 中的 `alwaysThinkingEnabled` |

273| 无论工作量如何禁用 | 设置 [`MAX_THINKING_TOKENS=0`](/zh-CN/env-vars)。其他值仅适用于[固定思考预算](#adaptive-reasoning-and-fixed-thinking-budgets) |391| 无论工作量如何禁用 | 设置 [`MAX_THINKING_TOKENS=0`](/zh-CN/env-vars),这会在 Anthropic API 上关闭思考,除了 Fable 5在[第三方提供商](/zh-CN/third-party-integrations)上,这会改为省略 `thinking` 参数,自适应推理模型可能仍然思考。其他值仅适用于[固定思考预算](#adaptive-reasoning-and-fixed-thinking-budgets) |

392 

393思考无法在 Fable 5 上关闭。会话切换、`alwaysThinkingEnabled` 和 `MAX_THINKING_TOKENS=0` 在那里无效,Fable 5 根据工作量级别决定每一步思考多少。

274 394 

275思考输出默认折叠。按 `Ctrl+O` 切换详细模式并将推理显示为灰色斜体文本。Anthropic API 上的交互式会话默认接收编辑后的思考块,因此如果您想在展开时获得完整摘要,请在[设置](/zh-CN/settings)中设置 `showThinkingSummaries: true`。您需要为所有生成的思考令牌付费,即使它们被折叠或编辑。395思考输出默认折叠。按 `Ctrl+O` 切换详细模式并将推理显示为灰色斜体文本。Anthropic API 上的交互式会话默认接收编辑后的思考块,因此如果您想在展开时获得完整摘要,请在[设置](/zh-CN/settings)中设置 `showThinkingSummaries: true`。您需要为所有生成的思考令牌付费,即使它们被折叠或编辑。

276 396 


278 扩展上下文398 扩展上下文

279</h3>399</h3>

280 400 

281Opus 4.6 及更高版本和 Sonnet 4.6 支持[100 万令牌上下文窗口](https://platform.claude.com/docs/zh-CN/build-with-claude/context-windows#1m-token-context-window)用于包含大型代码库的长会话。401Fable 5、Opus 4.6 及更高版本和 Sonnet 4.6 支持[100 万令牌上下文窗口](https://platform.claude.com/docs/zh-CN/build-with-claude/context-windows#1m-token-context-window)用于包含大型代码库的长会话。

282 402 

283可用性因模型和计划而异。在 Max、Team 和 Enterprise 计划上,Opus 会自动升级到 1M 上下文,无需额外配置。这适用于 Team Standard 和 Team Premium 席位。Sonnet with 1M context 不是自动升级的一部分,需要在每个订阅计划上[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),包括 Max。403可用性因模型和计划而异。在 Max、Team 和 Enterprise 计划上,Opus 会自动升级到 1M 上下文,无需额外配置。这适用于 Team Standard 和 Team Premium 席位。在 Anthropic API 上,Fable 5、Opus 4.8 和 Opus 4.7 始终使用 1M 窗口运行。Sonnet with 1M context 不是自动升级的一部分,需要在每个订阅计划上[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),包括 Max。

284 404 

285| 计划 | Opus with 1M context | Sonnet with 1M context |405| 计划 | Opus with 1M context | Sonnet with 1M context |

286| --------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |406| --------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |


340 460 

341| 环境变量 | 描述 |461| 环境变量 | 描述 |

342| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |462| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

463| `ANTHROPIC_DEFAULT_FABLE_MODEL` | 用于 `fable` 的模型,以及 Claude Code 识别为 Fable 5 的模型 ID,用于第三方提供商上的[自动模型回退](#automatic-model-fallback) |

343| `ANTHROPIC_DEFAULT_OPUS_MODEL` | 用于 `opus` 的模型,或在 Plan Mode 活跃时用于 `opusplan` 的模型。 |464| `ANTHROPIC_DEFAULT_OPUS_MODEL` | 用于 `opus` 的模型,或在 Plan Mode 活跃时用于 `opusplan` 的模型。 |

344| `ANTHROPIC_DEFAULT_SONNET_MODEL` | 用于 `sonnet` 的模型,或在 Plan Mode 不活跃时用于 `opusplan` 的模型。 |465| `ANTHROPIC_DEFAULT_SONNET_MODEL` | 用于 `sonnet` 的模型,或在 Plan Mode 不活跃时用于 `opusplan` 的模型。 |

345| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | 用于 `haiku` 的模型,或[后台功能](/zh-CN/costs#background-token-usage) |466| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | 用于 `haiku` 的模型,或[后台功能](/zh-CN/costs#background-token-usage) |


351 为第三方部署固定模型472 为第三方部署固定模型

352</h3>473</h3>

353 474 

354通过 [Bedrock](/zh-CN/amazon-bedrock)、[Vertex AI](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 部署 Claude Code 时,在向用户推出前固定模型版本。475当通过 [Bedrock](/zh-CN/amazon-bedrock)、[Vertex AI](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 部署 Claude Code 时,在向用户推出前固定模型版本。

355 476 

356不固定模型,Claude Code 会使用模型别名(`sonnet`、`opus`、`haiku`),这些别名会解析为最新版本 Anthropic 发布新模型时如果用户账户未启用新版本,Bedrock 和 Vertex AI 用户会看到通知并回退到该会话的先前版本,而 Foundry 用户会看到错误,因为 Foundry 没有等效的启动检查。477不固定模型,Claude Code 会使用模型别名(`fable`、`opus`、`sonnet` 和 `haiku`),这些别名会解析为每个提供商的内置默认模型 ID该默认值可能滞后于最新的 Anthropic 版本并且它指向的模型可能尚未在用户账户中启用。当默认值不可用时,Bedrock 和 Vertex AI 用户会看到通知并回退到该会话的先前版本,而 Foundry 用户会看到错误,因为 Foundry 没有等效的启动检查。

357 478 

358<Warning>479<Warning>

359 在初始设置中将所有三个模型环境变量设置为特定版本 ID。固定让您控制用户何时迁移到新模型。480 在初始设置中将模型环境变量设置为特定版本 ID。固定让您控制用户何时迁移到新模型。

360</Warning>481</Warning>

361 482 

362对您的提供商使用以下环境变量和特定版本的模型 ID:483对您的提供商使用以下环境变量和特定版本的模型 ID:


367| Vertex AI | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8'` |488| Vertex AI | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8'` |

368| Foundry | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8'` |489| Foundry | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8'` |

369 490 

370对 `ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 应用相同的模式。有关所有提供商的当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。要将用户升级到新模型版本,请更新这些环境变量并重新部署。491对 `ANTHROPIC_DEFAULT_FABLE_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 应用相同的模式。有关所有提供商的当前和旧版模型 ID,请参阅[模型概览](https://platform.claude.com/docs/en/about-claude/models/overview)。要将用户升级到新模型版本,请更新这些环境变量并重新部署。

371 492 

372要为固定模型启用[扩展上下文](#extended-context),请在 `ANTHROPIC_DEFAULT_OPUS_MODEL` 或 `ANTHROPIC_DEFAULT_SONNET_MODEL` 中的模型 ID 后附加 `[1m]`:493要为固定模型启用[扩展上下文](#extended-context),请在 `ANTHROPIC_DEFAULT_OPUS_MODEL` 或 `ANTHROPIC_DEFAULT_SONNET_MODEL` 中的模型 ID 后附加 `[1m]`:

373 494 


375export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8[1m]'496export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-8[1m]'

376```497```

377 498 

378`[1m]` 后缀将 1M 上下文窗口应用于 `opus` 和 `sonnet` 别名的所有使用。它不会扩展 `opusplan` 的 plan-mode Opus 阶段,该阶段[仍然限制在 200K](#opusplan-model-setting)499`[1m]` 后缀将 1M 上下文窗口应用于 `opus` 和 `sonnet` 别名的所有使用,包括 [`opusplan`](#opusplan-model-setting) 的 plan-mode Opus 阶段。

379 500 

380* Claude Code 在将模型 ID 发送到您的提供商之前会删除该后缀。501* Claude Code 在将模型 ID 发送到您的提供商之前会删除该后缀。

381* 仅当底层模型[支持 1M 上下文](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window)时才附加 `[1m]`。502* 仅当底层模型[支持 1M 上下文](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window)时才附加 `[1m]`。

382* 该后缀按变量读取,而不是按模型读取。在 Bedrock、Vertex 和 Foundry 上,一个变量中没有 `[1m]` 的模型 ID 使用 200K 上下文,即使另一个变量使用相同的模型和后缀。503* 该后缀按变量读取,而不是按模型读取。在 Bedrock、Vertex 和 Foundry 上,一个变量中没有 `[1m]` 的模型 ID 使用 200K 上下文,即使另一个变量使用相同的模型和后缀。

383 504 

384<Note>505<Note>

385 使用第三方提供商时,`settings.availableModels` 允许列表仍然适用。过滤与模型别名(`opus`、`sonnet``haiku`)匹配而不是提供商特定的模型 ID506 使用第三方提供商时,`settings.availableModels` 允许列表仍然适用。过滤与模型别名(`opus`版本前缀(如 `claude-opus-4-8`)或完整模型 ID 匹配。任何 `[1m]` 后缀在匹配前都会从允许列表条目和请求的模型中删除,因此 `claude-opus-4-8` 条目允许标准和 1M 上下文 Opus 行。提供商特定的前缀(如 `us.anthropic.`不会被删除:在 `availableModels` 中列出选择器显示的相同形式或通过 [`modelOverrides`](#override-model-ids-per-version) 映射它

386</Note>507</Note>

387 508 

388<h3 id="customize-pinned-model-display-and-capabilities">509<h3 id="customize-pinned-model-display-and-capabilities">


399| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | 固定 Opus 模型在 `/model` 选择器中的显示描述。未设置时默认为 `Custom Opus model` |520| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | 固定 Opus 模型在 `/model` 选择器中的显示描述。未设置时默认为 `Custom Opus model` |

400| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | 固定 Opus 模型支持的功能的逗号分隔列表 |521| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | 固定 Opus 模型支持的功能的逗号分隔列表 |

401 522 

402相同的 `_NAME`、`_DESCRIPTION` 和 `_SUPPORTED_CAPABILITIES` 后缀可用于 `ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_HAIKU_MODEL` 和 `ANTHROPIC_CUSTOM_MODEL_OPTION`。523相同的 `_NAME`、`_DESCRIPTION` 和 `_SUPPORTED_CAPABILITIES` 后缀可用于 `ANTHROPIC_DEFAULT_SONNET_MODEL`、`ANTHROPIC_DEFAULT_HAIKU_MODEL`、`ANTHROPIC_DEFAULT_FABLE_MODEL` 和 `ANTHROPIC_CUSTOM_MODEL_OPTION`。

403 524 

404Claude Code 通过将模型 ID 与已知模式匹配来启用[工作量级别](#adjust-effort-level)和[扩展思考](#extended-thinking)等功能。提供商特定的 ID(如 Bedrock ARN 或自定义部署名称)通常与这些模式不匹配,导致支持的功能被禁用。设置 `_SUPPORTED_CAPABILITIES` 以告诉 Claude Code 模型实际支持的功能:525Claude Code 通过将模型 ID 与已知模式匹配来启用[工作量级别](#adjust-effort-level)和[扩展思考](#extended-thinking)等功能。提供商特定的 ID(如 Bedrock ARN 或自定义部署名称)通常与这些模式不匹配,导致支持的功能被禁用。设置 `_SUPPORTED_CAPABILITIES` 以告诉 Claude Code 模型实际支持的功能:

405 526 


463| `DISABLE_PROMPT_CACHING_HAIKU` | 设置为 `1` 以仅禁用 Haiku 模型的 prompt caching |584| `DISABLE_PROMPT_CACHING_HAIKU` | 设置为 `1` 以仅禁用 Haiku 模型的 prompt caching |

464| `DISABLE_PROMPT_CACHING_SONNET` | 设置为 `1` 以仅禁用 Sonnet 模型的 prompt caching |585| `DISABLE_PROMPT_CACHING_SONNET` | 设置为 `1` 以仅禁用 Sonnet 模型的 prompt caching |

465| `DISABLE_PROMPT_CACHING_OPUS` | 设置为 `1` 以仅禁用 Opus 模型的 prompt caching |586| `DISABLE_PROMPT_CACHING_OPUS` | 设置为 `1` 以仅禁用 Opus 模型的 prompt caching |

587| `DISABLE_PROMPT_CACHING_FABLE` | 设置为 `1` 以仅禁用 Fable 模型的 prompt caching |

466 588 

467要更改缓存 TTL 或了解什么会触发缓存未命中,请参阅 [Claude Code 如何使用 prompt caching](/zh-CN/prompt-caching)。589要更改缓存 TTL 或了解什么会触发缓存未命中,请参阅 [Claude Code 如何使用 prompt caching](/zh-CN/prompt-caching)。

Details

221**`claude_code.tool`**221**`claude_code.tool`**

222 222 

223| 属性 | 描述 | 门控条件 |223| 属性 | 描述 | 门控条件 |

224| ----------------- | ------------------------------- | ----------------------- |224| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |

225| `tool_name` | 工具名称 | |225| `tool_name` | 工具名称 | |

226| `duration_ms` | 包括权限等待和执行的实际时钟持续时间 | |226| `duration_ms` | 包括权限等待和执行的实际时钟持续时间 | |

227| `result_tokens` | 工具结果的近似令牌大小 | |227| `result_tokens` | 工具结果的近似令牌大小 | |

228| `agent_id` | 运行工具的子代理或队友的标识符。在主会话中不存在 | |228| `agent_id` | 运行工具的子代理或队友的标识符。在主会话中不存在 | |

229| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |229| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |

230| `tool_use_id` | 此调用的模型 `tool_use` 块 id。与 [tool\_result](#tool-result-event) 和 [tool\_decision](#tool-decision-event) 事件以及 hook 有效负载中的 `tool_use_id` 匹配,因此您可以将 span 连接到这些记录 | |

231| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |

230| `file_path` | Read、Edit 和 Write 工具的目标文件路径 | `OTEL_LOG_TOOL_DETAILS` |232| `file_path` | Read、Edit 和 Write 工具的目标文件路径 | `OTEL_LOG_TOOL_DETAILS` |

231| `full_command` | Bash 工具的命令字符串 | `OTEL_LOG_TOOL_DETAILS` |233| `full_command` | Bash 工具的命令字符串 | `OTEL_LOG_TOOL_DETAILS` |

232| `skill_name` | Skill 工具的技能名称 | `OTEL_LOG_TOOL_DETAILS` |234| `skill_name` | Skill 工具的技能名称 | `OTEL_LOG_TOOL_DETAILS` |


245**`claude_code.tool.execution`**247**`claude_code.tool.execution`**

246 248 

247| 属性 | 描述 | 门控条件 |249| 属性 | 描述 | 门控条件 |

248| ------------- | ---------------------------------------------------------------- | ----------------------- |250| --------------------- | ---------------------------------------------------------------- | ----------------------- |

249| `duration_ms` | 运行工具主体所花费的时间 | |251| `duration_ms` | 运行工具主体所花费的时间 | |

252| `tool_use_id` | 与父 `claude_code.tool` span 上的值相同 | |

253| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |

250| `success` | `true` 或 `false` | |254| `success` | `true` 或 `false` | |

251| `error` | 执行失败时的错误类别字符串,例如 `Error:ENOENT` 或 `ShellError`。当设置了门控条件时包含完整错误消息 | `OTEL_LOG_TOOL_DETAILS` |255| `error` | 执行失败时的错误类别字符串,例如 `Error:ENOENT` 或 `ShellError`。当设置了门控条件时包含完整错误消息 | `OTEL_LOG_TOOL_DETAILS` |

252 256 


423所有指标和事件共享这些标准属性:427所有指标和事件共享这些标准属性:

424 428 

425| 属性 | 描述 | 控制方式 |429| 属性 | 描述 | 控制方式 |

426| ------------------------------ | ------------------------------------------------------------------------------------- | --------------------------------------------------- |430| ------------------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------- |

427| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认:true) |431| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认:true) |

428| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认:false) |432| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认:false) |

429| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py` 或 `claude-vscode` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认:false) |433| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py` 或 `claude-vscode` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认:false) |

430| `organization.id` | 组织 UUID(已认证时) | 可用时始终包含 |434| `organization.id` | 组织 UUID(已认证时) | 可用时始终包含 |

431| `user.account_uuid` | 账户 UUID(已认证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认:true) |435| `user.account_uuid` | 账户 UUID(已认证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认:true) |

432| `user.account_id` | 账户 ID,采用与 Anthropic 管理 API 匹配的标记格式(已认证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认:true) |436| `user.account_id` | 账户 ID,采用与 Anthropic 管理 API 匹配的标记格式(已认证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认:true) |

433| `user.id` | 匿名设备/安装标识符 Claude Code 安装生成 | 始终包含 |437| `user.id` | 在首次运行时生成并保存在 `~/.claude.json` 中的随机匿名标识符。它不包含任何个人信息也不是从您的 Claude 账户派生的。删除该文件会在下次运行时生成新的无关值。 | 始终包含 |

434| `user.email` | 用户电子邮件地址(通过 OAuth 认证时) | 可用时始终包含 |438| `user.email` | 用户电子邮件地址(通过 OAuth 认证时) | 可用时始终包含 |

435| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |439| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |

436| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅 [多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认:true) |440| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅 [多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认:true) |


484 488 

485* 所有 [标准属性](#standard-attributes)489* 所有 [标准属性](#standard-attributes)

486* `type`:(`"added"`、`"removed"`)490* `type`:(`"added"`、`"removed"`)

491* `model`:进行更改的模型的模型标识符(例如,"claude-sonnet-4-6")。{/* min-version: 2.1.172 */}需要 Claude Code v2.1.172 或更高版本

487 492 

488<h4 id="pull-request-counter">493<h4 id="pull-request-counter">

489 拉取请求计数器494 拉取请求计数器

490</h4>495</h4>

491 496 

492通过 Claude Code 创建拉取请求或合并请求时递增。497通过 shell 命令或 MCP 工具通过 Claude Code 创建拉取请求或合并请求时递增。

493 498 

494**属性**:499**属性**:

495 500 


692* `effort`:应用于请求的 [努力级别](/zh-CN/model-config#adjust-effort-level)。当模型不支持努力时不存在。697* `effort`:应用于请求的 [努力级别](/zh-CN/model-config#adjust-effort-level)。当模型不支持努力时不存在。

693* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 归属。有关定义和编辑行为,请参阅 [成本计数器](#cost-counter)。698* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 归属。有关定义和编辑行为,请参阅 [成本计数器](#cost-counter)。

694 699 

700<h4 id="api-refusal-event">

701 API 拒绝事件

702</h4>

703 

704当 API 请求返回 `stop_reason: "refusal"` 时记录。拒绝在成功响应流上到达,而不是作为 HTTP 错误,因此 `api_error` 事件不会为它们触发。此事件让您跟踪拒绝频率。

705 

706**事件名称**:`claude_code.api_refusal`

707 

708**属性**:

709 

710* 所有 [标准属性](#standard-attributes)

711* `event.name`:`"api_refusal"`

712* `event.timestamp`:ISO 8601 时间戳

713* `event.sequence`:单调递增的计数器,用于在会话内排序事件

714* `model`:来自请求的模型标识符

715* `request_id`:来自响应的 `request-id` 标头的 Anthropic API 请求 ID,例如 `"req_011..."`。仅当 API 返回时存在。

716 

695<h4 id="api-request-body-event">717<h4 id="api-request-body-event">

696 API 请求主体事件718 API 请求主体事件

697</h4>719</h4>


823* `server_scope`:服务器配置的范围,例如 `"user"`、`"project"` 或 `"local"`845* `server_scope`:服务器配置的范围,例如 `"user"`、`"project"` 或 `"local"`

824* `duration_ms`:连接尝试持续时间(毫秒)846* `duration_ms`:连接尝试持续时间(毫秒)

825* `error_code`:连接失败时的错误代码847* `error_code`:连接失败时的错误代码

848* `is_plugin`:当服务器由插件提供时为 `true`,否则为 `false`

849* `plugin_id_hash`(当 `is_plugin` 为 `true` 时):插件名称和市场的稳定哈希,用于按插件分组事件而不暴露名称

850* `plugin.name`(当 `is_plugin` 为 `true` 时):提供服务器的插件的名称。对于第三方插件,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则这是字面字符串 `"third-party"`;这可以保护第三方插件名称默认不出现在日志中。来自官方 Anthropic 来源的插件始终按名称标识。`plugin_id_hash` 和 `plugin.name` 属性流向您自己的监控后端,不会发送给 Anthropic

826* `server_name`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):配置的服务器名称851* `server_name`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):配置的服务器名称

827* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):连接失败时的完整错误消息852* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):连接失败时的完整错误消息

828 853 


885* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算整个队伍中加载了多少个不同的第三方插件,而无需记录其名称910* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算整个队伍中加载了多少个不同的第三方插件,而无需记录其名称

886* `has_hooks`:插件是否贡献 hooks911* `has_hooks`:插件是否贡献 hooks

887* `has_mcp`:插件是否贡献 MCP 服务器912* `has_mcp`:插件是否贡献 MCP 服务器

913* `host_owned_mcp`:当 SDK 主机管理此插件的 MCP 连接且 Claude Code 跳过读取插件的 MCP 服务器配置时为 `true`,否则为 `false`。{/* min-version: 2.1.172 */}需要 Claude Code v2.1.172 或更高版本

888* `skill_path_count`:插件声明的技能目录数914* `skill_path_count`:插件声明的技能目录数

889* `command_path_count`:插件声明的命令目录数915* `command_path_count`:插件声明的命令目录数

890* `agent_path_count`:插件声明的代理目录数916* `agent_path_count`:插件声明的代理目录数

917* `safe_mode`:当会话使用 [`--safe-mode`](/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。在安全模式下,此事件仅报告配置的清单;插件的命令、技能、hooks 和 MCP 服务器不加载。{/* min-version: 2.1.169 */}需要 Claude Code v2.1.169 或更高版本

891 918 

892<h4 id="skill-activated-event">919<h4 id="skill-activated-event">

893 技能激活事件920 技能激活事件


906* `skill.name`:技能的名称。对于用户定义和第三方插件技能,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`933* `skill.name`:技能的名称。对于用户定义和第三方插件技能,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`

907* `invocation_trigger`:技能的触发方式(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)934* `invocation_trigger`:技能的触发方式(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)

908* `skill.source`:技能加载的位置(例如,`"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)935* `skill.source`:技能加载的位置(例如,`"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)

936* `skill.kind`:当技能是工作流技能时为 `"workflow"`。否则不存在

909* `plugin.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时的拥有插件的名称937* `plugin.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时的拥有插件的名称

910* `marketplace.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时,拥有插件安装来源的市场938* `marketplace.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时,拥有插件安装来源的市场

911 939 


964* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`992* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`

965* `hook_type`:hook 实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`993* `hook_type`:hook 实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`

966* `hook_source`:hook 定义的位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`994* `hook_source`:hook 定义的位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`

995* `safe_mode`:当会话使用 [`--safe-mode`](/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。{/* min-version: 2.1.169 */}需要 Claude Code v2.1.169 或更高版本

967* `hook_matcher`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):hook 配置中的匹配器字符串(设置时)996* `hook_matcher`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):hook 配置中的匹配器字符串(设置时)

968* `plugin.name`(当 `hook_source` 是 `"pluginHook"` 时):贡献插件的名称。对于官方市场外和内置捆绑的插件,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`997* `plugin.name`(当 `hook_source` 是 `"pluginHook"` 时):贡献插件的名称。对于官方市场外和内置捆绑的插件,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`

969* `plugin_id_hash`(当 `hook_source` 是 `"pluginHook"` 时):插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算不同的贡献插件数而无需记录其名称998* `plugin_id_hash`(当 `hook_source` 是 `"pluginHook"` 时):插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算不同的贡献插件数而无需记录其名称


987* `num_hooks`:匹配 hook 命令的数量1016* `num_hooks`:匹配 hook 命令的数量

988* `managed_only`:当仅允许托管策略 hooks 时为 `"true"`1017* `managed_only`:当仅允许托管策略 hooks 时为 `"true"`

989* `hook_source`:`"policySettings"` 或 `"merged"`1018* `hook_source`:`"policySettings"` 或 `"merged"`

1019* `safe_mode`:当会话使用 [`--safe-mode`](/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。{/* min-version: 2.1.169 */}需要 Claude Code v2.1.169 或更高版本

990* `hook_definitions`:JSON 序列化的 hook 配置。仅当启用了详细的测试版跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1020* `hook_definitions`:JSON 序列化的 hook 配置。仅当启用了详细的测试版跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含

991 1021 

992<h4 id="hook-execution-complete-event">1022<h4 id="hook-execution-complete-event">


1013* `total_duration_ms`:所有匹配 hooks 的实际时钟持续时间1043* `total_duration_ms`:所有匹配 hooks 的实际时钟持续时间

1014* `managed_only`:当仅允许托管策略 hooks 时为 `"true"`1044* `managed_only`:当仅允许托管策略 hooks 时为 `"true"`

1015* `hook_source`:`"policySettings"` 或 `"merged"`1045* `hook_source`:`"policySettings"` 或 `"merged"`

1046* `safe_mode`:当会话使用 [`--safe-mode`](/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。{/* min-version: 2.1.169 */}需要 Claude Code v2.1.169 或更高版本

1016* `hook_definitions`:JSON 序列化的 hook 配置。仅当启用了详细的测试版跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1047* `hook_definitions`:JSON 序列化的 hook 配置。仅当启用了详细的测试版跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含

1017 1048 

1018<h4 id="hook-plugin-metrics-event">1049<h4 id="hook-plugin-metrics-event">


1089| ------------------------------------------------------------- | --------------------------------------------------------------------- |1120| ------------------------------------------------------------- | --------------------------------------------------------------------- |

1090| `claude_code.token.usage` | 按 `type`(输入/输出)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |1121| `claude_code.token.usage` | 按 `type`(输入/输出)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |

1091| `claude_code.session.count` | 跟踪随时间推移的采用和参与度 |1122| `claude_code.session.count` | 跟踪随时间推移的采用和参与度 |

1092| `claude_code.lines_of_code.count` | 通过跟踪代码添加/删除来衡量生产力 |1123| `claude_code.lines_of_code.count` | 通过跟踪代码添加和删除来衡量生产力,按模型分解 |

1093| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |1124| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |

1094 1125 

1095<h3 id="cost-monitoring">1126<h3 id="cost-monitoring">


1116* 异常的令牌消耗1147* 异常的令牌消耗

1117* 来自特定用户的高会话量1148* 来自特定用户的高会话量

1118 1149 

1119所有指标都可以按 `user.account_uuid``user.account_id`、`organization.id`、`session.id``model` `app.version` 进行分段1150所有指标都可以按[标准属性](#standard-attributes)进行分段。`model` 属性在 `claude_code.token.usage`、`claude_code.cost.usage` 上可用,以及从 v2.1.172 开始,`claude_code.lines_of_code.count` 上也可用。代码行数或提交的按模型分解只能通过在 `session.id` 上与令牌或成本指标进行联接来近似,因为一个会话可以跨越多个模型

1120 1151 

1121<h3 id="detect-retry-exhaustion">1152<h3 id="detect-retry-exhaustion">

1122 检测重试耗尽1153 检测重试耗尽


1179 1210 

1180* `tool_result`:保留 `tool_name` 和 `mcp_server_scope`,省略 `mcp_server_name`、`mcp_tool_name` 和参数1211* `tool_result`:保留 `tool_name` 和 `mcp_server_scope`,省略 `mcp_server_name`、`mcp_tool_name` 和参数

1181* `tool_decision`:保留 `tool_name`,省略 `tool_parameters`1212* `tool_decision`:保留 `tool_name`,省略 `tool_parameters`

1182* `mcp_server_connection`:省略 `server_name` 和错误消息1213* `mcp_server_connection`:省略 `server_name` 和错误消息,但保留 `is_plugin`、`plugin_id_hash` 和 `plugin.name`,非 Anthropic 插件名称被编辑为字面值 `"third-party"`,因此插件提供的服务器在没有详细日志的情况下仍然可以区分

1183 1214 

1184<h3 id="map-security-questions-to-events">1215<h3 id="map-security-questions-to-events">

1185 将安全问题映射到事件1216 将安全问题映射到事件


1193| 权限模式升级 | `permission_mode_changed` | `from_mode`、`to_mode`、`trigger` |1224| 权限模式升级 | `permission_mode_changed` | `from_mode`、`to_mode`、`trigger` |

1194| 策略 hook 阻止了操作 | `hook_execution_complete` | `hook_event`、`num_blocking` |1225| 策略 hook 阻止了操作 | `hook_execution_complete` | `hook_event`、`num_blocking` |

1195| 登录、登出和身份验证失败 | `auth` | `action`、`success`、`error_category` |1226| 登录、登出和身份验证失败 | `auth` | `action`、`success`、`error_category` |

1196| MCP 服务器连接或失败 | `mcp_server_connection` | `status`、`server_name`、`error_code` |1227| MCP 服务器连接或失败 | `mcp_server_connection` | `status`、`server_name`、`is_plugin`、`error_code` |

1197| 插件已安装及其来源 | `plugin_installed` | `plugin.name`、`marketplace.name`、`marketplace.is_official` |1228| 插件已安装及其来源 | `plugin_installed` | `plugin.name`、`marketplace.name`、`marketplace.is_official` |

1198| 运行的命令和触及的文件 | `tool_result`(已执行)或 `tool_decision`(已拒绝),带有 `OTEL_LOG_TOOL_DETAILS=1` | `tool_parameters`;`tool_input`(仅 `tool_result`) |1229| 运行的命令和触及的文件 | `tool_result`(已执行)或 `tool_decision`(已拒绝),带有 `OTEL_LOG_TOOL_DETAILS=1` | `tool_parameters`;`tool_input`(仅 `tool_result`) |

1199 1230 


1230 1261 

1231* **时间序列数据库(例如,Prometheus)**:速率计算、聚合指标1262* **时间序列数据库(例如,Prometheus)**:速率计算、聚合指标

1232* **列式存储(例如,ClickHouse)**:复杂查询、唯一用户分析1263* **列式存储(例如,ClickHouse)**:复杂查询、唯一用户分析

1233* **全功能可观测性平台(例如,Honeycomb、Datadog)**:高级查询、可视化、警报1264* **全功能可观测性平台(例如,Honeycomb、Datadog、Grafana Cloud)**:高级查询、可视化、警报

1234 1265 

1235<h3 id="for-events/logs">1266<h3 id="for-events/logs">

1236 对于事件/日志1267 对于事件/日志


1238 1269 

1239* **日志聚合系统(例如,Elasticsearch、Loki)**:全文搜索、日志分析1270* **日志聚合系统(例如,Elasticsearch、Loki)**:全文搜索、日志分析

1240* **列式存储(例如,ClickHouse)**:结构化事件分析1271* **列式存储(例如,ClickHouse)**:结构化事件分析

1241* **全功能可观测性平台(例如,Honeycomb、Datadog)**:指标和事件之间的关联1272* **全功能可观测性平台(例如,Honeycomb、Datadog、Grafana Cloud)**:指标和事件之间的关联

1242 1273 

1243<h3 id="for-traces">1274<h3 id="for-traces">

1244 对于跟踪1275 对于跟踪


1247选择支持分布式跟踪存储和 span 关联的后端:1278选择支持分布式跟踪存储和 span 关联的后端:

1248 1279 

1249* **分布式跟踪系统(例如,Jaeger、Zipkin、Grafana Tempo)**:Span 可视化、请求瀑布、延迟分析1280* **分布式跟踪系统(例如,Jaeger、Zipkin、Grafana Tempo)**:Span 可视化、请求瀑布、延迟分析

1250* **全功能可观测性平台(例如,Honeycomb、Datadog)**:跟踪搜索和与指标和日志的关联1281* **全功能可观测性平台(例如,Honeycomb、Datadog、Grafana Cloud)**:跟踪搜索和与指标和日志的关联

1251 1282 

1252对于需要日活跃用户/周活跃用户/月活跃用户 (DAU/WAU/MAU) 指标的组织,请考虑支持高效唯一值查询的后端。1283对于需要日活跃用户/周活跃用户/月活跃用户 (DAU/WAU/MAU) 指标的组织,请考虑支持高效唯一值查询的后端。

1253 1284 

Details

57 * 用户:`~/.claude/output-styles`57 * 用户:`~/.claude/output-styles`

58 * 项目:`.claude/output-styles`58 * 项目:`.claude/output-styles`

59 * 托管策略:[托管设置目录](/zh-CN/settings#settings-files)内的 `.claude/output-styles`59 * 托管策略:[托管设置目录](/zh-CN/settings#settings-files)内的 `.claude/output-styles`

60 

61 项目输出样式从工作目录和仓库根目录之间的每个 `.claude/output-styles/` 加载。{/* min-version: 2.1.178 */}从 v2.1.178 开始,当多个这样的嵌套目录定义了同名样式时,Claude Code 使用最接近工作目录的那个。

60 </Step>62 </Step>

61 63 

62 <Step title="添加 frontmatter 和说明">64 <Step title="添加 frontmatter 和说明">

overview.md +2 −2

Details

124 <Tab title="JetBrains">124 <Tab title="JetBrains">

125 一个用于 IntelliJ IDEA、PyCharm、WebStorm 和其他 JetBrains IDE 的插件,具有交互式差异查看和选择上下文共享。125 一个用于 IntelliJ IDEA、PyCharm、WebStorm 和其他 JetBrains IDE 的插件,具有交互式差异查看和选择上下文共享。

126 126 

127 从 JetBrains Marketplace 安装 [Claude Code 插件](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-),然后重启你的 IDE。127 从 JetBrains Marketplace 安装 [Claude Code 插件](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-),然后重启你的 IDE。该插件需要单独安装 Claude Code CLI;请参阅 [JetBrains 设置步骤](/zh-CN/jetbrains#installation)。

128 128 

129 [开始使用 JetBrains →](/zh-CN/jetbrains)129 [开始使用 JetBrains →](/zh-CN/jetbrains)

130 </Tab>130 </Tab>


209 209 

210 * 离开你的办公桌,使用[远程控制](/zh-CN/remote-control)从你的手机或任何浏览器继续工作210 * 离开你的办公桌,使用[远程控制](/zh-CN/remote-control)从你的手机或任何浏览器继续工作

211 * 向 [Dispatch](/zh-CN/desktop#sessions-from-dispatch) 发送来自你手机的任务,并打开它创建的桌面会话211 * 向 [Dispatch](/zh-CN/desktop#sessions-from-dispatch) 发送来自你手机的任务,并打开它创建的桌面会话

212 * 在[网络](/zh-CN/claude-code-on-the-web)或 [iOS 应用](https://apps.apple.com/app/claude-by-anthropic/id6473753684)上启动长时间运行的任务,然后使用 `claude --teleport` 将其拉入你的终端212 * 在[网络](/zh-CN/claude-code-on-the-web)或 [iOS 应用](https://apps.apple.com/app/claude-by-anthropic/id6473753684)上启动长时间运行的任务,然后使用 `claude --teleport` 将其拉入你的终端。Teleport 需要 claude.ai 订阅。

213 * 使用 `/desktop` 将终端会话交给[桌面应用](/zh-CN/desktop)进行视觉差异审查213 * 使用 `/desktop` 将终端会话交给[桌面应用](/zh-CN/desktop)进行视觉差异审查

214 * 从团队聊天路由任务:在 [Slack](/zh-CN/slack) 中提及 `@Claude` 并附上错误报告,获得拉取请求214 * 从团队聊天路由任务:在 [Slack](/zh-CN/slack) 中提及 `@Claude` 并附上错误报告,获得拉取请求

215 </Accordion>215 </Accordion>

Details

21| [`plan`](#analyze-before-you-edit-with-plan-mode) | 仅读取 | 在更改代码库前进行探索 |21| [`plan`](#analyze-before-you-edit-with-plan-mode) | 仅读取 | 在更改代码库前进行探索 |

22| [`auto`](#eliminate-prompts-with-auto-mode) | 所有操作,带后台安全检查 | 长时间任务、减少提示疲劳 |22| [`auto`](#eliminate-prompts-with-auto-mode) | 所有操作,带后台安全检查 | 长时间任务、减少提示疲劳 |

23| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | 仅预先批准的工具 | 锁定的 CI 和脚本 |23| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | 仅预先批准的工具 | 锁定的 CI 和脚本 |

24| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | 所有操作,带后台安全检查 | 仅隔离容器和 VM |24| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | 所有操作 | 仅隔离容器和 VM |

25 25 

26在除 `bypassPermissions` 外的每种模式中,对[受保护路径](#protected-paths)的写入永远不会自动批准,保护仓库状态和 Claude 自己的配置免受意外破坏。26在除 `bypassPermissions` 外的每种模式中,对[受保护路径](#protected-paths)的写入永远不会自动批准,保护仓库状态和 Claude 自己的配置免受意外破坏。

27 27 

28模式设置基线。在顶部分层[权限规则](/zh-CN/permissions#manage-permissions)以在除 `bypassPermissions` 外的任何模式中预先批准或阻止特定工具`bypassPermissions` 完全跳过权限层28模式设置基线。在顶部分层[权限规则](/zh-CN/permissions#manage-permissions)以预先批准或阻止特定工具。拒绝规则和显式询问规则适用于每种模式,包括 `bypassPermissions`。允许规则在该模式中无效因为其他所有操作都已被批准

29 29 

30<h2 id="switch-permission-modes">30<h2 id="switch-permission-modes">

31 切换权限模式31 切换权限模式


95 <Tab title="Web and mobile">95 <Tab title="Web and mobile">

96 在 [claude.ai/code](https://claude.ai/code) 或移动应用中使用提示框旁边的模式下拉菜单。权限提示出现在 claude.ai 中以供批准。哪些模式出现取决于会话在哪里运行:96 在 [claude.ai/code](https://claude.ai/code) 或移动应用中使用提示框旁边的模式下拉菜单。权限提示出现在 claude.ai 中以供批准。哪些模式出现取决于会话在哪里运行:

97 97 

98 * **云会话**在 [Claude Code on the web](/zh-CN/claude-code-on-the-web):Auto accept edits 和 Plan mode。Ask permissionsAuto Bypass permissions 不可用。98 * **云会话**在 [Claude Code on the web](/zh-CN/claude-code-on-the-web):Accept edits、Plan mode Auto mode。Accept edits 对应于 `default` 模式:云环境预先批准文件编辑,无论模式如何,因此下拉菜单显示 Accept edits 而不是 Ask permissions。来自设置的 `defaultMode: "acceptEdits"` 仍然被遵守。Auto mode 仅在您的组织允许且所选模型支持时出现。Bypass permissions 不可用。

99 * **[Remote Control](/zh-CN/remote-control) 会话**在您的本地机器上:Ask permissions、Auto accept edits 和 Plan mode。Auto 和 Bypass permissions 不可用。99 * **[Remote Control](/zh-CN/remote-control) 会话**在您的本地机器上:Ask permissions、Auto accept edits 和 Plan mode。Auto 和 Bypass permissions 不可用。

100 100 

101 对于 Remote Control,您也可以在启动主机时设置起始模式:101 对于 Remote Control,您也可以在启动主机时设置起始模式:


176 Auto mode 需要 Claude Code v2.1.83 或更高版本。176 Auto mode 需要 Claude Code v2.1.83 或更高版本。

177</Note>177</Note>

178 178 

179Auto mode 让 Claude 执行而无需权限提示。一个单独的分类器模型在操作运行前审查操作,阻止任何超出您请求范围的操作、针对无法识别的基础设施的操作,或似乎由 Claude 读到的恶意内容驱动的操作。179Auto mode 让 Claude 执行而无需例行权限提示。一个单独的分类器模型在操作运行前审查操作,阻止任何超出您请求范围的操作、针对无法识别的基础设施的操作,或似乎由 Claude 读到的恶意内容驱动的操作。显式[询问规则](/zh-CN/permissions#manage-permissions)仍然会强制提示。

180 180 

181Auto mode 还指示 Claude 继续工作而无需停止以提出澄清问题,尽管当您的提示或技能明确依赖它时 Claude 仍然会提问。要在保持权限提示的同时获得更强的自主行为,请改为设置[主动输出风格](/zh-CN/output-styles)。181Auto mode 还指示 Claude 继续工作而无需停止以提出澄清问题,尽管当您的提示或技能明确依赖它时 Claude 仍然会提问。要在保持权限提示的同时获得更强的自主行为,请改为设置[主动输出风格](/zh-CN/output-styles)。

182 182 


193 193 

194如果 Claude Code 报告 auto mode 不可用,其中一个要求未满足;这不是暂时中断。一个单独的消息命名一个模型并说 auto mode "cannot determine the safety" 的操作是暂时分类器中断;请参阅[错误参考](/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。194如果 Claude Code 报告 auto mode 不可用,其中一个要求未满足;这不是暂时中断。一个单独的消息命名一个模型并说 auto mode "cannot determine the safety" 的操作是暂时分类器中断;请参阅[错误参考](/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)。

195 195 

196如果您在[设置](/zh-CN/settings#available-settings)中设置 `defaultMode: "auto"` 并且会话以 `default` 模式启动且没有错误,该设置可能在 `.claude/settings.json` 或 `.claude/settings.local.json` 中。Claude Code 忽略来自这些文件的 `auto`,因此仓库无法授予自己 auto mode。将其移动到 `~/.claude/settings.json`。196如果您在[设置](/zh-CN/settings#available-settings)中设置 `defaultMode: "auto"` 并且会话以 `default` 模式启动且没有错误,该设置可能在 `.claude/settings.json` 或 `.claude/settings.local.json` 中。Claude Code v2.1.142 及更高版本忽略来自这些文件的 `auto`,因此仓库无法授予自己 auto mode。将其移动到 `~/.claude/settings.json`。

197 197 

198<h3 id="enable-auto-mode-on-bedrock-vertex-ai-or-foundry">198<h3 id="enable-auto-mode-on-bedrock-vertex-ai-or-foundry">

199 在 Bedrock、Vertex AI 或 Foundry 上启用 auto mode199 在 Bedrock、Vertex AI 或 Foundry 上启用 auto mode

200</h3>200</h3>

201 201 

202在 [Amazon Bedrock](/zh-CN/amazon-bedrock)、[Google Cloud Vertex AI](/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/zh-CN/microsoft-foundry) 上,auto mode 不会出现在 `Shift+Tab` 循环中,直到 `CLAUDE_CODE_ENABLE_AUTO_MODE` 被设置为 `1`。仅在这些提供商上支持 Claude Opus 4.7 和 Opus 4.8。202在 [Amazon Bedrock](/zh-CN/amazon-bedrock)、[Google Cloud Vertex AI](/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/zh-CN/microsoft-foundry) 上,auto mode 不会出现在 `Shift+Tab` 循环中,直到 `CLAUDE_CODE_ENABLE_AUTO_MODE` 被设置为 `1`。该变量在 Claude Code v2.1.158 及更高版本中有效。仅在这些提供商上支持 Claude Opus 4.7 和 Opus 4.8。

203 203 

204要为一个开发者启用它,请将变量添加到 `~/.claude/settings.json` 中的 `env` 块:204要为一个开发者启用它,请将变量添加到 `~/.claude/settings.json` 中的 `env` 块:

205 205 


293 1. 在子代理启动前,委派的任务描述被评估,因此看起来危险的任务在生成时被阻止。293 1. 在子代理启动前,委派的任务描述被评估,因此看起来危险的任务在生成时被阻止。

294 2. 当子代理运行时,它的每个操作都通过分类器,使用与父会话相同的规则,子代理前言中的任何 `permissionMode` 都被忽略。294 2. 当子代理运行时,它的每个操作都通过分类器,使用与父会话相同的规则,子代理前言中的任何 `permissionMode` 都被忽略。

295 3. 当子代理完成时,分类器审查其完整的操作历史;如果该返回检查标记了一个问题,安全警告被添加到子代理的结果前面。295 3. 当子代理完成时,分类器审查其完整的操作历史;如果该返回检查标记了一个问题,安全警告被添加到子代理的结果前面。

296 

297 第 1 步需要 Claude Code v2.1.178 或更高版本。早期版本在第 2 和 3 步应用分类器,但在子代理启动前没有评估任务描述。

296 </Accordion>298 </Accordion>

297 299 

298 <Accordion title="成本和延迟">300 <Accordion title="成本和延迟">


304 仅使用 dontAsk mode 允许预先批准的工具306 仅使用 dontAsk mode 允许预先批准的工具

305</h2>307</h2>

306 308 

307`dontAsk` mode 自动拒绝每个会提示的工具调用。仅与您的 `permissions.allow` 规则和[只读 Bash 命令](/zh-CN/permissions#read-only-commands)匹配的操作可以执行;显式 `ask` 规则被拒绝而不是提示。这使模式完全非交互式,适合 CI 管道或受限环境,其中您预先定义 Claude 可能执行的确切操作。309`dontAsk` mode 自动拒绝每个会提示的工具调用。仅与您的 `permissions.allow` 规则和[只读 Bash 命令](/zh-CN/permissions#read-only-commands)匹配的操作可以执行;显式 [`ask` 规则](/zh-CN/permissions#manage-permissions)被拒绝而不是提示。这使模式完全非交互式,适合 CI 管道或受限环境,其中您预先定义 Claude 可能执行的确切操作。[Claude Code on the web](/zh-CN/claude-code-on-the-web) 上的云会话忽略 `defaultMode: "dontAsk"`;有关详细信息,请参阅 [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode)。

308 310 

309在启动时使用标志设置它:311在启动时使用标志设置它:

310 312 


316 使用 bypassPermissions mode 跳过所有检查318 使用 bypassPermissions mode 跳过所有检查

317</h2>319</h2>

318 320 

319`bypassPermissions` mode 禁用权限提示和安全检查,因此工具调用立即执行。从 v2.1.126 开始,这包括对[受保护路径](#protected-paths)的写入,早期版本仍然会提示。针对文件系统根目录或主目录的删除操作,例如 `rm -rf /` 和 `rm -rf ~`,仍然会提示作为防止模型错误的断路器。仅在隔离环境(如容器、VM 或没有互联网访问的 dev containers)中使用此模式,其中 Claude Code 无法对您的主机系统造成损害。321`bypassPermissions` mode 禁用权限提示和安全检查,因此工具调用立即执行。从 v2.1.126 开始,这包括对[受保护路径](#protected-paths)的写入,早期版本仍然会提示。显式[询问规则](/zh-CN/permissions#manage-permissions)仍然会在此模式下强制提示,针对文件系统根目录或主目录的删除操作,例如 `rm -rf /` 和 `rm -rf ~`,仍然会提示作为防止模型错误的断路器。仅在隔离环境(如容器、VM 或没有互联网访问的 dev containers)中使用此模式,其中 Claude Code 无法对您的主机系统造成损害。

320 322 

321您无法从没有启用标志之一启动的会话进入 `bypassPermissions`;使用其中一个重新启动以启用它:323您无法从没有启用标志之一启动的会话进入 `bypassPermissions`;使用其中一个重新启动以启用它:

322 324 


334 336 

335在识别的沙箱内自动跳过该检查。要在容器中自主运行,请使用 [dev container](/zh-CN/devcontainer) 配置,该配置以非 root 用户身份运行 Claude Code。337在识别的沙箱内自动跳过该检查。要在容器中自主运行,请使用 [dev container](/zh-CN/devcontainer) 配置,该配置以非 root 用户身份运行 Claude Code。

336 338 

339[Claude Code on the web](/zh-CN/claude-code-on-the-web) 不遵守来自您的设置文件的 `defaultMode: "bypassPermissions"` 或 `"dontAsk"`,因此存储库的签入设置无法在绕过权限模式下启动云会话。该设置被静默忽略,会话改为以模式下拉菜单中显示的模式启动。有关云会话提供的模式,请参阅[切换权限模式](#switch-permission-modes)。

340 

337<Warning>341<Warning>

338 `bypassPermissions` 不提供针对提示注入或意外操作的保护。对于没有提示的后台安全检查,请改为使用 [auto mode](#eliminate-prompts-with-auto-mode)。管理员可以通过在[托管设置](/zh-CN/permissions#managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来阻止此模式。342 `bypassPermissions` 不提供针对提示注入或意外操作的保护。对于没有提示的后台安全检查,请改为使用 [auto mode](#eliminate-prompts-with-auto-mode)。管理员可以通过在[托管设置](/zh-CN/permissions#managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来阻止此模式。

339</Warning>343</Warning>


351| `dontAsk` | 拒绝 |355| `dontAsk` | 拒绝 |

352| `bypassPermissions` | 允许 |356| `bypassPermissions` | 允许 |

353 357 

358[`permissions.allow`](/zh-CN/permissions#manage-permissions) 设置文件中的规则不会预先批准受保护路径的写入。安全检查在 Claude Code 评估设置中的允许规则之前运行,因此 `~/.claude/settings.json` 或 `.claude/settings.json` 中的条目(如 `Edit(.claude/**)`)不会改变上表中的每种模式的结果。在提示的模式中,对 `.claude/` 写入的提示会提供**是的,并允许 Claude 在此会话中编辑其自己的设置**,这会在该会话中批准后续的 `.claude/` 写入而无需再次提示。

359 

354受保护的目录:360受保护的目录:

355 361 

356* `.git`362* `.git`


362* `.devcontainer`368* `.devcontainer`

363* `.yarn`369* `.yarn`

364* `.mvn`370* `.mvn`

365* `.claude`,除了 `.claude/commands`、`.claude/agents`、`.claude/skills` 和 `.claude/worktrees`,其中 Claude 经常创建内容371* `.claude`,除了 `.claude/worktrees`,Claude 在其中存储其自己的 git worktrees

366 372 

367受保护的文件:373受保护的文件:

368 374 

permissions.md +79 −7

Details

30* **Ask** 规则在 Claude Code 尝试使用指定工具时提示确认。30* **Ask** 规则在 Claude Code 尝试使用指定工具时提示确认。

31* **Deny** 规则防止 Claude Code 使用指定的工具。31* **Deny** 规则防止 Claude Code 使用指定的工具。

32 32 

33规则按顺序评估:**deny -> ask -> allow**。第一个匹配的规则获胜,因此 deny 规则始终优先33规则按顺序评估:deny、ask,然后 allow。该顺序中的第一个匹配项决定结果,规则特异性不会改变顺序。匹配的 deny 规则(如 `Bash(aws *)`)会阻止每个匹配的调用包括也匹配更具体的 allow 规则(如 `Bash(aws s3 ls)`)的调用,因此 deny 规则不能包含允许列表例外ask 和 allow 之间也适用相同的优先级:匹配的 ask 规则即使更具体的 allow 规则也匹配同一调用,也会提示。

34 34 

35Deny 规则的行为取决于它们是命名工具还是在工具内范围化模式。像 `Bash` 这样的裸工具名称会将工具从 Claude 的上下文中完全移除,因此 Claude 永远看不到它。像 `Bash(rm *)` 这样的范围化规则会保留工具的可用性,并在 Claude 尝试时阻止匹配的调用。35Deny 规则的行为取决于它们是命名工具还是在工具内范围化模式。像 `Bash` 这样的裸工具名称会将工具从 Claude 的上下文中完全移除,因此 Claude 永远看不到它。像 `Bash(rm *)` 这样的范围化规则会保留工具的可用性,并在 Claude 尝试时阻止匹配的调用。

36 36 


51| `plan` | Plan Mode:Claude 读取文件并运行只读 shell 命令来探索,但不编辑您的源文件 |51| `plan` | Plan Mode:Claude 读取文件并运行只读 shell 命令来探索,但不编辑您的源文件 |

52| `auto` | 自动批准工具调用,并进行后台安全检查以验证操作与您的请求一致。目前处于研究预览阶段 |52| `auto` | 自动批准工具调用,并进行后台安全检查以验证操作与您的请求一致。目前处于研究预览阶段 |

53| `dontAsk` | 自动拒绝工具,除非通过 `/permissions` 或 `permissions.allow` 规则预先批准 |53| `dontAsk` | 自动拒绝工具,除非通过 `/permissions` 或 `permissions.allow` 规则预先批准 |

54| `bypassPermissions` | 跳过所有权限提示。根目录和主目录删除操作(如 `rm -rf /`)仍会作为断路器提示 |54| `bypassPermissions` | 跳过权限提示,除了由显式 `ask` 规则强制的提示。根目录和主目录删除操作(如 `rm -rf /`)仍会作为断路器提示 |

55 55 

56<Warning>56<Warning>

57 `bypassPermissions` 模式跳过所有权限提示,包括对 `.git`、`.config/git`、`.claude`、`.vscode`、`.idea`、`.husky`、`.cargo`、`.devcontainer`、`.yarn` 和 `.mvn` 的写入。针对文件系统根目录或主目录的删除操作(如 `rm -rf /` 和 `rm -rf ~`)仍会作为断路器提示以防止模型错误。仅在隔离环境(如容器或虚拟机)中使用此模式,其中 Claude Code 无法造成损害。管理员可以通过在[托管设置](#managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来防止此模式。57 `bypassPermissions` 模式跳过权限提示,包括对 `.git`、`.config/git`、`.claude`、`.vscode`、`.idea`、`.husky`、`.cargo`、`.devcontainer`、`.yarn` 和 `.mvn` 的写入。显式 `ask` 规则仍会强制提示,针对文件系统根目录或主目录的删除操作(如 `rm -rf /` 和 `rm -rf ~`)仍会作为断路器提示以防止模型错误。仅在隔离环境(如容器或虚拟机)中使用此模式,其中 Claude Code 无法造成损害。管理员可以通过在[托管设置](#managed-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"` 来防止此模式。

58</Warning>58</Warning>

59 59 

60为了防止使用 `bypassPermissions` 或 `auto` 模式,在任何[设置文件](/zh-CN/settings#settings-files)中将 `permissions.disableBypassPermissionsMode` 或 `permissions.disableAutoMode` 设置为 `"disable"`。这些在[托管设置](#managed-settings)中最有用,因为它们无法被覆盖。60为了防止使用 `bypassPermissions` 或 `auto` 模式,在任何[设置文件](/zh-CN/settings#settings-files)中将 `permissions.disableBypassPermissionsMode` 或 `permissions.disableAutoMode` 设置为 `"disable"`。这些在[托管设置](#managed-settings)中最有用,因为它们无法被覆盖。


91| `Read(./.env)` | 匹配读取当前目录中的 `.env` 文件 |91| `Read(./.env)` | 匹配读取当前目录中的 `.env` 文件 |

92| `WebFetch(domain:example.com)` | 匹配对 example.com 的获取请求 |92| `WebFetch(domain:example.com)` | 匹配对 example.com 的获取请求 |

93 93 

94<h3 id="match-by-input-parameter">

95 按输入参数匹配

96</h3>

97 

98拒绝和询问规则可以使用 `Tool(param:value)` 匹配任何工具上的顶级输入参数。当 Claude 调用该工具且该参数设置为该确切值时,规则匹配。此语法适用于拒绝和询问规则;一个参数值的允许规则不会确立该调用总体上是安全的,因此允许规则继续使用每个工具自己的说明符语法。这适用于工具接受的任何标量参数:

99 

100| 规则 | 匹配 |

101| :----------------------------- | :------------------------- |

102| `Agent(model:opus)` | 请求 Opus 模型层级的 Agent 调用 |

103| `Agent(isolation:worktree)` | 请求 git worktree 的 Agent 调用 |

104| `Bash(run_in_background:true)` | 在后台运行的 Bash 调用 |

105 

106参数匹配遵循以下规则:

107 

108* 参数名称必须是工具输入的直接字段,例如 Agent 工具上的 `model`。嵌套在对象或数组内的字段不可匹配

109* 每个规则命名一个参数。要对 `model` 和 `isolation` 进行门控,请编写两个规则 `Agent(model:opus)` 和 `Agent(isolation:worktree)`,而不是在一个规则中组合它们

110* 该值支持 `*` 作为通配符,匹配任何字符序列,因此 `Agent(isolation:*)` 匹配任何显式隔离值。没有 `*` 时匹配是精确的

111* 模型省略的参数永远不会被匹配,因此 `Agent(model:*)` 不匹配留下 `model` 未设置的调用

112* 该值与 Claude 发送的文字输入进行比较,在任何规范化之前。`Agent(model:opus)` 匹配别名 `opus` 但不匹配完整模型 ID。使用 [`--verbose`](/zh-CN/cli-reference) 运行以查看每个工具调用中的确切参数名称和值

113* 冒号周围的空格被忽略

114 

115工具已经用自己的规范化规则匹配的字段不能以这种方式匹配:Bash 和 PowerShell 的 `command`、Read、Edit 和 Write 的 `file_path`、Grep 和 Glob 的 `path`、NotebookEdit 的 `notebook_path` 和 WebFetch 的 `url`。像 `Bash(command:rm *)` 这样的规则可以通过复合命令绕过,因此 Claude Code 会忽略它并在启动时发出警告。改用 `Bash(rm *)`、`Read(./path)` 或 `WebFetch(domain:host)`。

116 

94<h3 id="wildcard-patterns">117<h3 id="wildcard-patterns">

95 通配符模式118 通配符模式

96</h3>119</h3>


118 141 

119当您为命令前缀选择"是,不再询问"时,权限对话框会写入空格分隔的形式。`:*` 形式仅在模式末尾被识别。在像 `Bash(git:* push)` 这样的模式中,冒号被视为文字字符,不会匹配 git 命令。142当您为命令前缀选择"是,不再询问"时,权限对话框会写入空格分隔的形式。`:*` 形式仅在模式末尾被识别。在像 `Bash(git:* push)` 这样的模式中,冒号被视为文字字符,不会匹配 git 命令。

120 143 

144<h3 id="tool-name-wildcards">

145 工具名称通配符

146</h3>

147 

148拒绝和询问规则也接受工具名称位置中的 glob 模式。该模式必须匹配完整的工具名称:`"*"` 匹配每个工具,`"mcp__*"` 匹配所有服务器中的每个 MCP 工具。由裸名称 glob 拒绝规则匹配的工具会从 Claude 的上下文中移除,与裸工具名称相同。此配置拒绝每个 MCP 工具:

149 

150```json theme={null}

151{

152 "permissions": {

153 "deny": [

154 "mcp__*"

155 ]

156 }

157}

158```

159 

160允许规则仅在文字 `mcp__<server>__` 前缀之后接受工具名称 glob。服务器段必须不含 glob,以便规则命名您配置的特定服务器。`mcp__puppeteer__*` 匹配来自 `puppeteer` 服务器的每个工具,`mcp__github__get_*` 匹配其 `get_` 工具。未锚定的允许 glob(如 `"*"`、`"B*"` 或 `"mcp__*"`)会被跳过并显示警告,不会自动批准任何内容。

161 

162工具名称不匹配任何已知工具的拒绝或询问规则会在启动时产生警告以捕获拼写错误。包含 `_` 或 `*` 的工具名称不受此检查的约束。

163 

164转录本和权限对话框中为工具显示的标签可能与其规范名称不同。例如,转录本中标记为 `Stop Task` 的工具具有规范名称 `TaskStop`。权限规则和 [hook 匹配器](/zh-CN/hooks) 仅匹配规范名称,因此写作为 `Stop Task` 的规则不匹配。对于拒绝和询问规则,上面的启动警告会捕获不匹配。使用 [工具参考](/zh-CN/tools-reference) 中列出的规范名称。

165 

121<h2 id="tool-specific-permission-rules">166<h2 id="tool-specific-permission-rules">

122 工具特定的权限规则167 工具特定的权限规则

123</h2>168</h2>


266 WebFetch311 WebFetch

267</h3>312</h3>

268 313 

269* `WebFetch(domain:example.com)` 匹配对 example.com 的获取请求314WebFetch 规则使用 `domain:` 前缀并针对请求的 URL 的主机名进行匹配。匹配不区分大小写,支持 `*` 通配符,并从规则和主机名中剥离尾部 `.`,因此 `example.com.` `example.com` 被视为相同。

315 

316* `WebFetch(domain:example.com)` 匹配对 `example.com` 的请求

317* `WebFetch(domain:*.example.com)` 匹配任何深度的任何子域,如 `api.example.com` 或 `a.b.example.com`,但不匹配 `example.com` 本身

318* `WebFetch(domain:*)` 匹配每个域,等同于裸 `WebFetch` 规则

319 

320在前导 `*.` 或裸 `*` 以外的任何位置,通配符仅匹配两个点之间的文本。`WebFetch(domain:example.*)` 匹配 `example.org`,其中 `*` 变成 `org`,但不匹配 `example.evil.com`,其中 `*` 必须变成 `evil.com` 并跨越一个点。这防止尾部通配符匹配攻击者可以注册的域。

270 321 

271<h3 id="mcp">322<h3 id="mcp">

272 MCP323 MCP


296}347}

297```348```

298 349 

350<h3 id="cd">

351 Cd

352</h3>

353 

354`Cd` 规则控制 [`/cd` 命令](/zh-CN/commands)可以将会话移动到哪些目录。`Cd` 不是模型可调用的工具:Claude 无法调用它,规则仅在您自己运行 `/cd` 时适用。

355 

356裸 `Cd` deny 规则完全禁用 `/cd`。`Cd(<path-pattern>)` deny 规则阻止匹配的目标。Deny 规则检查目标的每个拼写,包括它解析的每个符号链接跳跃,因此为一个路径编写的规则也会阻止解析到它的目标。

357 

358添加任何 `Cd` allow 规则会将 `/cd` 切换到允许列表模式:解析的目标目录必须匹配您的一个 allow 规则,否则 `/cd` 拒绝。如果没有配置 `Cd` 规则,`/cd` 保持其默认行为并提示您信任不熟悉的目录。

359 

360路径模式共享来自 [Read 和 Edit 规则](#read-and-edit)的 `//`、`~/` 和 `/` 锚点,但匹配锚定到整个目录路径而不是 gitignore 风格。`*` 匹配恰好一个路径段,`**` 匹配跨段。尾部 `/**` 也匹配其命名的根。

361 

362| 规则 | 匹配 | 不匹配 |

363| --------------------- | ------------------------- | ------------------------- |

364| `Cd(~/code/*)` | `~/code/app` | `~/code/app/src`、`~/code` |

365| `Cd(~/code/**)` | `~/code` 和其下的任何目录 | `~/code` 外的目录 |

366| `Cd(**/node_modules)` | 任何深度的任何 `node_modules` 目录 | `node_modules/pkg` |

367 

299<h2 id="extend-permissions-with-hooks">368<h2 id="extend-permissions-with-hooks">

300 使用 hooks 扩展权限369 使用 hooks 扩展权限

301</h2>370</h2>

302 371 

303[Claude Code hooks](/zh-CN/hooks-guide)提供了一种方法来注册自定义 shell 命令以在运行时执行权限评估。当 Claude Code 进行工具调用时,PreToolUse hooks 在权限提示之前运行。hook 输出可以拒绝工具调用、强制提示或跳过提示以让调用继续。372[Claude Code hooks](/zh-CN/hooks-guide) 提供了一种方法来注册自定义 shell 命令以在运行时执行权限评估。当 Claude Code 进行工具调用时,PreToolUse hooks 在权限提示之前运行。hook 输出可以拒绝工具调用、强制提示或跳过提示以让调用继续。

304 373 

305Hook 决定不会绕过权限规则。Deny 和 ask 规则在 hook 返回 `"allow"` 或 `"ask"` 后仍然被评估,因此匹配的 deny 规则仍然会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。374Hook 决定不会绕过权限规则。Deny 和 ask 规则在 hook 返回 `"allow"` 或 `"ask"` 后仍然被评估,因此匹配的 deny 规则仍然会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。

306 375 


318 387 

319其他目录中的文件遵循与原始工作目录相同的权限规则:它们变为可读的而无需提示,文件编辑权限遵循当前权限模式。388其他目录中的文件遵循与原始工作目录相同的权限规则:它们变为可读的而无需提示,文件编辑权限遵循当前权限模式。

320 389 

390要改变会话的主工作目录而不是添加另一个目录,请使用 [`/cd`](/zh-CN/commands)。`/cd` 命令需要 Claude Code v2.1.169 或更高版本。与 `/add-dir` 不同,它重新定位会话:新目录的 `CLAUDE.md` 被加载,`--resume` 从那里找到会话。

391 

321<h3 id="additional-directories-grant-file-access-not-configuration">392<h3 id="additional-directories-grant-file-access-not-configuration">

322 其他目录授予文件访问权限,而不是配置393 其他目录授予文件访问权限,而不是配置

323</h3>394</h3>


331| 配置 | 从 `--add-dir` 加载 |402| 配置 | 从 `--add-dir` 加载 |

332| :----------------------------------------------------------------- | :---------------------------------------------------------------------------------------------- |403| :----------------------------------------------------------------- | :---------------------------------------------------------------------------------------------- |

333| `.claude/skills/` 中的 [Skills](/zh-CN/skills) | 是,带有实时重新加载 |404| `.claude/skills/` 中的 [Skills](/zh-CN/skills) | 是,带有实时重新加载 |

405| `.claude/agents/` 中的 [Subagents](/zh-CN/sub-agents) | 是 |

334| `.claude/settings.json` 中的插件设置 | 仅 `enabledPlugins` 和 `extraKnownMarketplaces` |406| `.claude/settings.json` 中的插件设置 | 仅 `enabledPlugins` 和 `extraKnownMarketplaces` |

335| [CLAUDE.md](/zh-CN/memory) 文件、`.claude/rules/` 和 `CLAUDE.local.md` | 仅当设置 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` 时。`CLAUDE.local.md` 另外需要 `local` 设置源,默认启用 |407| [CLAUDE.md](/zh-CN/memory) 文件、`.claude/rules/` 和 `CLAUDE.local.md` | 仅当设置 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` 时。`CLAUDE.local.md` 另外需要 `local` 设置源,默认启用 |

336 408 

337子代理、命令和输出样式从当前工作目录及其父目录、您在 `~/.claude/` 的用户目录和托管设置中发现。Hooks 和其他 `settings.json` 键从当前工作目录的 `.claude/` 文件夹加载,没有父目录回退,同时从您的用户 `~/.claude/settings.json` 和托管设置加载。要在项目间共享该配置,请使用以下方法之一:409命令和输出样式从当前工作目录及其父目录、您在 `~/.claude/` 的用户目录和托管设置中发现。Hooks 和其他 `settings.json` 键从当前工作目录的 `.claude/` 文件夹加载,没有父目录回退,同时从您的用户 `~/.claude/settings.json` 和托管设置加载。要在项目间共享该配置,请使用以下方法之一:

338 410 

339* **用户级配置**:将文件放在 `~/.claude/agents/`、`~/.claude/output-styles/` 或 `~/.claude/settings.json` 中,使其在每个项目中可用411* **用户级配置**:将文件放在 `~/.claude/agents/`、`~/.claude/output-styles/` 或 `~/.claude/settings.json` 中,使其在每个项目中可用

340* **插件**:将配置打包并分发为[插件](/zh-CN/plugins),团队可以安装412* **插件**:将配置打包并分发为[插件](/zh-CN/plugins),团队可以安装


356* 沙箱中的文件系统限制结合 [`sandbox.filesystem`](/zh-CN/sandboxing) 设置与 Read 和 Edit deny 规则;两者都合并到最终的沙箱边界中428* 沙箱中的文件系统限制结合 [`sandbox.filesystem`](/zh-CN/sandboxing) 设置与 Read 和 Edit deny 规则;两者都合并到最终的沙箱边界中

357* 网络限制结合 WebFetch 权限规则与沙箱的 `allowedDomains` 和 `deniedDomains` 列表429* 网络限制结合 WebFetch 权限规则与沙箱的 `allowedDomains` 和 `deniedDomains` 列表

358 430 

359当沙箱启用 `autoAllowBashIfSandboxed: true`(这是默认值)时,沙箱化的 Bash 命令无需提示即可运行,即使您的权限包括 `ask: Bash(*)`。沙箱边界替代了每个命令的提示。显式 deny 规则仍然适用,针对 `/`、您的主目录或其他关键系统路径的 `rm` 或 `rmdir` 命令仍然会触发提示。请参见[沙箱模式](/zh-CN/sandboxing#sandbox-modes)以更改此行为。431当沙箱启用 `autoAllowBashIfSandboxed: true`(这是默认值)时,沙箱化的 Bash 命令无需提示即可运行,即使您的权限包括裸 `Bash` ask 规则,或[等效的 `Bash(*)` 形式](#match-all-uses-of-a-tool):沙箱边界替代了该整体工具提示内容范围的 ask 规则(如 `Bash(git push *)`)仍然强制提示,显式 deny 规则仍然适用,针对 `/`、您的主目录或其他关键系统路径的 `rm` 或 `rmdir` 命令仍然会触发提示。不会在沙箱中运行的命令(如排除的命令)按照通常的方式遵守裸 `Bash` ask 规则。请参见[沙箱模式](/zh-CN/sandboxing#sandbox-modes)以更改此行为。

360 432 

361<h2 id="managed-settings">433<h2 id="managed-settings">

362 托管设置434 托管设置

platforms.md +1 −1

Details

23| [Web](/zh-CN/claude-code-on-the-web) | 不需要太多操作的长时间运行任务,或应该在您离线时继续的工作 | Anthropic 托管云、断开连接后继续运行 |23| [Web](/zh-CN/claude-code-on-the-web) | 不需要太多操作的长时间运行任务,或应该在您离线时继续的工作 | Anthropic 托管云、断开连接后继续运行 |

24| Mobile | 在远离计算机时启动和监控任务 | 来自 iOS 和 Android 版 Claude 应用的云会话、用于本地会话的 [Remote Control](/zh-CN/remote-control)、Pro 和 Max 上的 [Dispatch](/zh-CN/desktop#sessions-from-dispatch) 到 Desktop |24| Mobile | 在远离计算机时启动和监控任务 | 来自 iOS 和 Android 版 Claude 应用的云会话、用于本地会话的 [Remote Control](/zh-CN/remote-control)、Pro 和 Max 上的 [Dispatch](/zh-CN/desktop#sessions-from-dispatch) 到 Desktop |

25 25 

26CLI 是终端原生工作的最完整界面:脚本编写和 Agent SDK 仅限 CLI。第三方提供商也可在 [VS Code](/zh-CN/vs-code#use-third-party-providers) 中使用。企业 [Desktop](/zh-CN/desktop) 部署支持 Vertex AI 和网关提供商;对于 Bedrock 或 Foundry,请使用 CLI 或 VS Code 而不是 Desktop。Desktop 和 IDE 扩展为了视觉审查和更紧密的编辑器集成而放弃了一些仅限 CLI 的功能。Web 在 Anthropic 的云中运行,因此任务在您断开连接后继续进行。Mobile 是这些相同云会话的瘦客户端,或通过 Remote Control 进入本地会话,并可以使用 Dispatch 向 Desktop 发送任务。26CLI 是终端原生工作的最完整界面:脚本编写和 Agent SDK 仅限 CLI。第三方提供商也可在 [VS Code](/zh-CN/vs-code#use-third-party-providers) 中使用。企业 [Desktop](/zh-CN/desktop) 部署支持 Vertex AI 和网关提供商;对于 Bedrock 或 Foundry,请使用 CLI 或 VS Code,或 [Cowork on 3P research preview](https://claude.com/docs/cowork/3p/overview),它在这些提供商上运行 Code 选项卡。Desktop 和 IDE 扩展为了视觉审查和更紧密的编辑器集成而放弃了一些仅限 CLI 的功能。Web 在 Anthropic 的云中运行,因此任务在您断开连接后继续进行。Mobile 是这些相同云会话的瘦客户端,或通过 Remote Control 进入本地会话,并可以使用 Dispatch 向 Desktop 发送任务。

27 27 

28您可以在同一项目上混合使用多个界面。配置、项目内存和 MCP 服务器在本地界面之间共享。28您可以在同一项目上混合使用多个界面。配置、项目内存和 MCP 服务器在本地界面之间共享。

29 29 

plugin-hints.md +8 −5

Details

16 工作原理16 工作原理

17</h2>17</h2>

18 18 

19Claude Code 为通过 Bash 和 PowerShell 工具运行的每个命令以及 [hook](/zh-CN/hooks) 命令设置 [`CLAUDECODE`](/zh-CN/env-vars) 环境变量为 `1`。当您的 CLI 看到该变量时,它会向 stderr 写入一个自闭合的 `<claude-code-hint />` 标签。在 hook 命令中,提示标签会被剥离并忽略。只有 Bash 和 PowerShell 工具输出会触发安装提示。19Claude Code 为通过 Bash 和 PowerShell 工具运行的每个命令以及 [hook](/zh-CN/hooks) 命令设置 [`CLAUDECODE`](/zh-CN/env-vars) 环境变量为 `1`。{/* min-version: 2.1.172 */}从 v2.1.172 开始,它还在这些相同的子进程中将 [`CLAUDE_CODE_CHILD_SESSION`](/zh-CN/env-vars) 设置为 `1`。当您的 CLI 看到这些变量之一时,它会向 stderr 写入一个自闭合的 `<claude-code-hint />` 标签。在 hook 命令中,提示标签会被剥离并忽略。只有 Bash 和 PowerShell 工具输出会触发安装提示。

20 20 

21当 Claude Code 接收到命令输出时,它会:21当 Claude Code 接收到命令输出时,它会:

22 22 


31 发出提示31 发出提示

32</h2>32</h2>

33 33 

34 `CLAUDECODE` 环境变量上进行门控以便标记永远不会出现在人类用户的终端中。然后将标签写入 stderr,单独占一行。34在环境变量上进行门控以发出提示,使标记不太可能在人类直接运行您的 CLI 时出现,然后将标签写入 stderr,单独占一行。选择要检查的变量:

35 35 

36以下示例为官方市场中名为 `example-cli` 的插件发出提示36* `CLAUDECODE`:在每个 Claude Code 版本上设置,因此可以到达最多的会话。它也在 tmux 会话和 Claude Code 启动的 stdio MCP 服务器子进程中设置,IDE 扩展在其集成终端中设置它,人类可能在那里直接运行您的 CLI。

37* {/* min-version: 2.1.172 */}`CLAUDE_CODE_CHILD_SESSION`:仅在 Claude Code 本身生成的子进程中设置,例如工具调用、hook 命令和[状态行](/zh-CN/statusline)命令,因此标签通常不会到达人类终端。在会话内启动的长期进程(例如 tmux 服务器)会捕获该变量,因此从该进程启动的后续 shell 仍然显示原始标签。需要 Claude Code v2.1.172 或更高版本,因此较旧版本上的会话会错过提示。

38 

39以下示例在 `CLAUDECODE` 上进行门控以获得最大覆盖范围,并为官方市场中名为 `example-cli` 的插件发出提示:

37 40 

38<CodeGroup>41<CodeGroup>

39 ```javascript Node.js theme={null}42 ```javascript Node.js theme={null}


90 93 

91```text theme={null}94```text theme={null}

92─────────────────────────────────────────────────────────────95─────────────────────────────────────────────────────────────

93 Plugin Recommendation96 Plugin recommendation

94 97 

95 The example-cli command suggests installing a plugin.98 The example-cli command suggests installing a plugin.

96 99 


147其余指导是推荐的但不强制的。Claude Code 无法观察您的 CLI 是否遵循它:150其余指导是推荐的但不强制的。Claude Code 无法观察您的 CLI 是否遵循它:

148 151 

149* **写入 stderr**:stderr 将标签保留在 shell 管道之外,例如 `example-cli deploy | jq`。Claude Code 扫描两个流,因此 stdout 也可以工作。152* **写入 stderr**:stderr 将标签保留在 shell 管道之外,例如 `example-cli deploy | jq`。Claude Code 扫描两个流,因此 stdout 也可以工作。

150* **在 `CLAUDECODE` 上进行门控**:仅在设置 `CLAUDECODE` 环境变量时发出。这可以防止标记出现在直接运行您的 CLI 的用户面前153* **在环境变量上进行门控**:仅在设置 `CLAUDECODE` `CLAUDE_CODE_CHILD_SESSION` 时发出请参阅[发出提示](#emit-the-hint)了解这两个变量的区别。

151 154 

152<h2 id="get-your-plugin-into-the-official-marketplace">155<h2 id="get-your-plugin-into-the-official-marketplace">

153 将您的插件放入官方市场156 将您的插件放入官方市场

Details

171| `plugins` | array | 可用 plugins 列表 | 见下文 |171| `plugins` | array | 可用 plugins 列表 | 见下文 |

172 172 

173<Note>173<Note>

174 **保留名称**:以下 marketplace 名称为 Anthropic 官方使用保留,第三方 marketplaces 无法使用:`claude-code-marketplace`、`claude-code-plugins`、`claude-plugins-official`、`anthropic-marketplace`、`anthropic-plugins`、`agent-skills`、`anthropic-agent-skills`、`knowledge-work-plugins`、`life-sciences`、`claude-for-legal`、`claude-for-financial-services`、`financial-services-plugins`。冒充官方 marketplaces 的名称(如 `official-claude-plugins` 或 `anthropic-tools-v2`)也被阻止。174 **保留名称**:以下 marketplace 名称为 Anthropic 官方使用保留,第三方 marketplaces 无法使用:`claude-code-marketplace`、`claude-code-plugins`、`claude-plugins-official`、`claude-plugins-community`、`claude-community`、`anthropic-marketplace`、`anthropic-plugins`、`agent-skills`、`anthropic-agent-skills`、`knowledge-work-plugins`、`life-sciences`、`claude-for-legal`、`claude-for-financial-services`、`financial-services-plugins`。冒充官方 marketplaces 的名称(如 `official-claude-plugins` 或 `anthropic-tools-v2`)也被阻止。

175</Note>175</Note>

176 176 

177<h3 id="owner-fields">177<h3 id="owner-fields">


203 203 

204`plugins` 数组中的每个 plugin 条目描述一个 plugin 及其位置。你可以包含 [plugin manifest 架构](/zh-CN/plugins-reference#plugin-manifest-schema)中的任何字段(如 `description`、`version`、`author`、`commands`、`hooks` 等),加上这些 marketplace 特定的字段:`source`、`category`、`tags` 和 `strict`。204`plugins` 数组中的每个 plugin 条目描述一个 plugin 及其位置。你可以包含 [plugin manifest 架构](/zh-CN/plugins-reference#plugin-manifest-schema)中的任何字段(如 `description`、`version`、`author`、`commands`、`hooks` 等),加上这些 marketplace 特定的字段:`source`、`category`、`tags` 和 `strict`。

205 205 

206<h3 id="required-fields">206<h3 id="required-fields-1">

207 必需字段207 必需字段

208</h3>208</h3>

209 209 


269 例如,托管在 `acme-corp/plugin-catalog` 的 marketplace(marketplace 源)可以列出从 `acme-corp/code-formatter` 获取的 plugin(plugin 源)。marketplace 源和 plugin 源指向不同的存储库,并独立固定。269 例如,托管在 `acme-corp/plugin-catalog` 的 marketplace(marketplace 源)可以列出从 `acme-corp/code-formatter` 获取的 plugin(plugin 源)。marketplace 源和 plugin 源指向不同的存储库,并独立固定。

270</Note>270</Note>

271 271 

272基于 git 的源类型如下所示为 `github`、`url` 和 `git-subdir`。当在其中任何一个上同时设置 `ref` 和 `sha` 时,`sha` 是有效的固定。Claude Code 直接获取并检出固定的提交,所以即使上游的 `ref` 命名的分支或标签已被删除,只要提交仍然可从存储库到达,安装也会成功。

273 

272<h3 id="relative-paths">274<h3 id="relative-paths">

273 相对路径275 相对路径

274</h3>276</h3>


505* **`${CLAUDE_PLUGIN_ROOT}`**:在 hooks 和 MCP server 配置中使用此变量来引用 plugin 安装目录中的文件。这是必要的,因为 plugins 在安装时被复制到缓存位置。对于应该在 plugin 更新后保留的依赖项或状态,请改用 [`${CLAUDE_PLUGIN_DATA}`](/zh-CN/plugins-reference#persistent-data-directory)。507* **`${CLAUDE_PLUGIN_ROOT}`**:在 hooks 和 MCP server 配置中使用此变量来引用 plugin 安装目录中的文件。这是必要的,因为 plugins 在安装时被复制到缓存位置。对于应该在 plugin 更新后保留的依赖项或状态,请改用 [`${CLAUDE_PLUGIN_DATA}`](/zh-CN/plugins-reference#persistent-data-directory)。

506* **`strict: false`**:由于这设置为 false,plugin 不需要自己的 `plugin.json`。marketplace 条目定义了一切。见下面的 [Strict 模式](#strict-mode)。508* **`strict: false`**:由于这设置为 false,plugin 不需要自己的 `plugin.json`。marketplace 条目定义了一切。见下面的 [Strict 模式](#strict-mode)。

507 509 

510默认情况下,plugin 的 skills 从其 `source` 下的 `skills/` 目录加载,`skills` 下列出的任何路径都会添加到该扫描中。例外是 marketplace 根源,例如 `source: "./"` 的情况,其中多个 plugin 条目共享一个 `skills/` 文件夹。在这种情况下,在 `skills` 下列出特定子目录会使该列表成为该条目的完整集合,`skills/` 下的其他目录不会加载。列出 `skills/` 目录本身或 plugin 根目录会保持完整扫描。如果列出的路径都不存在,则改为运行默认扫描。

511 

508<h3 id="strict-mode">512<h3 id="strict-mode">

509 Strict 模式513 Strict 模式

510</h3>514</h3>


1074* 检查 plugin 目录是否包含必需的文件1078* 检查 plugin 目录是否包含必需的文件

1075* 对于 GitHub 源,确保存储库是公开的或你有访问权限1079* 对于 GitHub 源,确保存储库是公开的或你有访问权限

1076* 通过手动克隆/下载来测试 plugin 源1080* 通过手动克隆/下载来测试 plugin 源

1081* 如果源同时固定了 `ref` 和 `sha`,删除的上游分支或标签不会阻止安装。如果安装仍然失败,请确认固定的提交仍然存在于存储库中

1077 1082 

1078<h3 id="private-repository-authentication-fails">1083<h3 id="private-repository-authentication-fails">

1079 私有存储库身份验证失败1084 私有存储库身份验证失败

plugins.md +7 −3

Details

216| `bin/` | 插件根 | 在启用插件时添加到 Bash tool 的 `PATH` 的可执行文件 |216| `bin/` | 插件根 | 在启用插件时添加到 Bash tool 的 `PATH` 的可执行文件 |

217| `settings.json` | 插件根 | 启用插件时应用的默认[设置](/zh-CN/settings) |217| `settings.json` | 插件根 | 启用插件时应用的默认[设置](/zh-CN/settings) |

218 218 

219恰好包含一个 skill 的插件可以直接在插件根目录放置 `SKILL.md`,而不是创建 `skills/` 目录。Claude Code 会将其作为单个 skill 加载,并使用 frontmatter 中的 `name` 字段作为调用名称。对于可能增长到多个 skill 的插件,请使用 `skills/` 布局。

220 

219<Note>221<Note>

220 **后续步骤**:准备好添加更多功能了吗?跳转到[开发更复杂的插件](#develop-more-complex-plugins)以添加 agents、hooks、MCP servers 和 LSP servers。有关所有插件组件的完整技术规范,请参阅[插件参考](/zh-CN/plugins-reference)。222 **后续步骤**:准备好添加更多功能了吗?跳转到[开发更复杂的插件](#develop-more-complex-plugins)以添加 agents、hooks、MCP servers 和 LSP servers。有关所有插件组件的完整技术规范,请参阅[插件参考](/zh-CN/plugins-reference)。

221</Note>223</Note>


402 404 

403Anthropic 为 Claude Code 插件维护两个公共市场:405Anthropic 为 Claude Code 插件维护两个公共市场:

404 406 

405* **`claude-plugins-official`**:由 Anthropic 维护的精选插件集。在每个 Claude Code 安装中自动可用407* **`claude-plugins-official`**:由 Anthropic 维护的精选插件集。在你首次以交互方式启动 Claude Code 时自动注册在该首次启动之前运行的非交互式脚本必须使用 `claude plugin marketplace add anthropics/claude-plugins-official` 显式添加它。

406* **`claude-community`**:公共社区市场,第三方提交在审查后进入。用户使用 `/plugin marketplace add anthropics/claude-plugins-community` 添加它,并从中安装为 `@claude-community`。408* **`claude-community`**:公共社区市场,第三方提交在审查后进入。用户使用 `/plugin marketplace add anthropics/claude-plugins-community` 添加它,并从中安装为 `@claude-community`。

407 409 

408要提交你的插件以供社区市场审查,请使用以下应用内表单之一:410要提交你的插件以供社区市场审查,请使用以下应用内表单之一:

409 411 

410* **Claude.ai**:[claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)412* **claude.ai**:[claude.ai/admin-settings/directory/submissions/plugins/new](https://claude.ai/admin-settings/directory/submissions/plugins/new)

411* **Console**:[platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)413* **Console**:[platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

412 414 

415claude.ai 表单需要 Team 或 Enterprise 组织和目录管理访问权限;组织所有者默认具有此访问权限。不属于 Team 或 Enterprise 组织的个人作者可以改用 Console 表单。

416 

413在提交之前,在本地运行 `claude plugin validate`。审查管道对每个提交运行相同的检查,以及自动安全筛选。417在提交之前,在本地运行 `claude plugin validate`。审查管道对每个提交运行相同的检查,以及自动安全筛选。

414 418 

415批准的插件被固定到 [`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) 目录中的特定提交 SHA,当你向你的存储库推送新提交时,CI 会自动提升该固定。公共目录每晚从审查管道同步,因此批准和你的插件出现在 `marketplace.json` 中之间可能会有延迟。要检查你的插件是否已可安装,请在[社区目录](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json)中搜索其名称。419批准的插件被固定到 [`anthropics/claude-plugins-community`](https://github.com/anthropics/claude-plugins-community) 目录中的特定提交 SHA,当你向你的存储库推送新提交时,CI 会自动提升该固定。公共目录每晚从审查管道同步,因此批准和你的插件出现在 `marketplace.json` 中之间可能会有延迟。要检查你的插件是否已可安装,请在[社区目录](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json)中搜索其名称。


512| 必须手动复制以共享 | 使用 `/plugin install` 安装 |516| 必须手动复制以共享 | 使用 `/plugin install` 安装 |

513 517 

514<Note>518<Note>

515 迁移后,你可以从 `.claude/` 中删除原始文件以避免重复。加载时插件版本将优先519 迁移后, `.claude/` 中删除原始文件以避免重复。项目和用户 `.claude/agents/` 定义会覆盖同名的插件 agents,因此插件版本仅在删除原始文件后才会生效

516</Note>520</Note>

517 521 

518<h2 id="next-steps">522<h2 id="next-steps">

Details

46* Claude 可以根据任务上下文自动调用它们46* Claude 可以根据任务上下文自动调用它们

47* Skills 可以在 SKILL.md 旁边包含支持文件47* Skills 可以在 SKILL.md 旁边包含支持文件

48 48 

49如果插件没有 `skills/` 目录且没有 `skills` manifest 字段,则插件根目录中的 `SKILL.md` 会作为单个 skill 加载。设置 frontmatter `name` 字段以控制 skill 的调用名称。如果没有设置,Claude Code 会回退到安装目录名称,对于从市场安装的插件,这是一个在每次更新时都会改变的版本字符串。对于提供多个 skill 的插件,请使用上面所示的 `skills/` 目录布局。

50 

49有关完整详情,请参阅 [Skills](/zh-CN/skills)。51有关完整详情,请参阅 [Skills](/zh-CN/skills)。

50 52 

51<h3 id="agents">53<h3 id="agents">


256**可选字段:**258**可选字段:**

257 259 

258| 字段 | 描述 |260| 字段 | 描述 |

259| :---------------------- | :------------------------------------------ |261| :---------------------- | :----------------------------------------------------------------- |

260| `args` | LSP server 的命令行参数 |262| `args` | LSP server 的命令行参数 |

261| `transport` | 通信传输:`stdio`(默认)或 `socket` |263| `transport` | 通信传输:`stdio`(默认)或 `socket` |

262| `env` | 启动 server 时要设置的环境变量 |264| `env` | 启动 server 时要设置的环境变量 |


265| `workspaceFolder` | server 的工作区文件夹路径 |267| `workspaceFolder` | server 的工作区文件夹路径 |

266| `startupTimeout` | 等待 server 启动的最长时间(毫秒) |268| `startupTimeout` | 等待 server 启动的最长时间(毫秒) |

267| `maxRestarts` | 放弃前的最大重启尝试次数 |269| `maxRestarts` | 放弃前的最大重启尝试次数 |

270| `diagnostics` | 是否在编辑后将诊断推送到 Claude 的上下文中(默认 `true`)。设置为 `false` 以保持代码导航但禁止自动诊断注入。 |

268 271 

269<Warning>272<Warning>

270 **您必须单独安装语言服务器二进制文件。** LSP plugins 配置 Claude Code 如何连接到语言服务器,但它们不包括服务器本身。如果在 `/plugin` Errors 选项卡中看到 `Executable not found in $PATH`,请为您的语言安装所需的二进制文件。273 **您必须单独安装语言服务器二进制文件。** LSP plugins 配置 Claude Code 如何连接到语言服务器,但它们不包括服务器本身。如果在 `/plugin` Errors 选项卡中看到 `Executable not found in $PATH`,请为您的语言安装所需的二进制文件。


531 534 

532| 字段 | 类型 | 描述 | 示例 |535| 字段 | 类型 | 描述 | 示例 |

533| :---------------------- | :-------------------- | :----------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |536| :---------------------- | :-------------------- | :----------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

534| `skills` | string\|array | 包含 `<name>/SKILL.md` 的自定义 skill 目录(除了默认 `skills/`| `"./custom/skills/"` |537| `skills` | string\|array | 包含 `<name>/SKILL.md` 的自定义 skill 目录。添加到默认 `skills/` 扫描。请参阅[路径行为规则](#path-behavior-rules)了解市场根异常 | `"./custom/skills/"` |

535| `commands` | string\|array | 自定义平面 `.md` skill 文件或目录(替换默认 `commands/`) | `"./custom/cmd.md"` 或 `["./cmd1.md"]` |538| `commands` | string\|array | 自定义平面 `.md` skill 文件或目录(替换默认 `commands/`) | `"./custom/cmd.md"` 或 `["./cmd1.md"]` |

536| `agents` | string\|array | 自定义 agent 文件(替换默认 `agents/`) | `"./custom/agents/reviewer.md"` |539| `agents` | string\|array | 自定义 agent 文件(替换默认 `agents/`) | `"./custom/agents/reviewer.md"` |

537| `hooks` | string\|array\|object | Hook 配置路径或内联配置 | `"./my-extra-hooks.json"` |540| `hooks` | string\|array\|object | Hook 配置路径或内联配置 | `"./my-extra-hooks.json"` |


629自定义路径是否替换或扩展 plugin 的默认目录取决于该字段:632自定义路径是否替换或扩展 plugin 的默认目录取决于该字段:

630 633 

631* **替换默认值**:`commands`、`agents`、`outputStyles`、`experimental.themes`、`experimental.monitors`。例如,当清单指定 `commands` 时,不会扫描默认 `commands/` 目录。要保留默认值并添加更多,请明确列出它:`"commands": ["./commands/", "./extras/"]`634* **替换默认值**:`commands`、`agents`、`outputStyles`、`experimental.themes`、`experimental.monitors`。例如,当清单指定 `commands` 时,不会扫描默认 `commands/` 目录。要保留默认值并添加更多,请明确列出它:`"commands": ["./commands/", "./extras/"]`

632* **添加到默认值**:`skills`。默认 `skills/` 目录始终被扫描,`skills` 中列出的目录与其一起加载635* **添加到默认值**:`skills`。默认 `skills/` 目录始终被扫描,`skills` 中列出的目录与其一起加载。异常:对于[其 `source` 解析为市场根的市场条目](/zh-CN/plugin-marketplaces#advanced-plugin-entries),声明特定子目录会替换扫描

633* **自己的合并规则**:[hooks](#hooks)、[MCP servers](#mcp-servers) 和 [LSP servers](#lsp-servers)。请参阅每个部分了解多个源如何组合636* **自己的合并规则**:[hooks](#hooks)、[MCP servers](#mcp-servers) 和 [LSP servers](#lsp-servers)。请参阅每个部分了解多个源如何组合

634 637 

635当 plugin 同时具有默认文件夹和匹配的清单键时,Claude Code v2.1.140 及更高版本在 `/doctor`、`claude plugin list` 和 `/plugin` 详细视图中标记被忽略的文件夹。plugin 仍然使用清单路径加载。当清单键指向默认文件夹时不显示警告,例如 `"commands": ["./commands/deploy.md"]`,因为在这种情况下文件夹被明确寻址。638当 plugin 同时具有默认文件夹和匹配的清单键时,Claude Code v2.1.140 及更高版本在 `/doctor`、`claude plugin list` 和 `/plugin` 详细视图中标记被忽略的文件夹。plugin 仍然使用清单路径加载。当清单键指向默认文件夹时不显示警告,例如 `"commands": ["./commands/deploy.md"]`,因为在这种情况下文件夹被明确寻址。


1093| `--available` | 包括来自市场的可用 plugins。需要 `--json` | |1096| `--available` | 包括来自市场的可用 plugins。需要 `--json` | |

1094| `-h, --help` | 显示命令帮助 | |1097| `-h, --help` | 显示命令帮助 | |

1095 1098 

1099在交互式会话中,`/plugin list` 打印相同的列表内联。交互式形式接受 `--enabled` 或 `--disabled` 以仅显示处于该状态的 plugins,以及 `ls` 作为 `list` 的简写。

1100 

1096<h3 id="plugin-details">1101<h3 id="plugin-details">

1097 plugin details1102 plugin details

1098</h3>1103</h3>

Details

79 79 

80[`opusplan` 模型设置](/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。80[`opusplan` 模型设置](/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。

81 81 

82[Fable 5 上的自动模型回退](/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。

83 

82<h3 id="changing-effort-level">84<h3 id="changing-effort-level">

83 更改工作量级别85 更改工作量级别

84</h3>86</h3>


101 连接或断开 MCP 服务器103 连接或断开 MCP 服务器

102</h3>104</h3>

103 105 

104工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。[MCP 服务器](/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:106工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:

105 107 

106* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。108* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。

107* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/zh-CN/mcp#configure-tool-search)时,例如在 Haiku 模型上、在 Vertex AI 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/zh-CN/mcp#configure-tool-search)保持在前面的定义上。109* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/zh-CN/mcp#configure-tool-search)时,例如在 Haiku 模型上、在 Vertex AI 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/zh-CN/mcp#configure-tool-search)保持在前面的定义上。


118 120 

119例外是提供 [MCP 服务器](/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。121例外是提供 [MCP 服务器](/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。

120 122 

121插件更改在您运行 [`/reload-plugins`](/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。123插件更改在您运行 [`/reload-plugins`](/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。{/* min-version: 2.1.163 */}从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。

122 124 

123禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。125禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。

124 126 


128 130 

129添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。131添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。

130 132 

131只有裸工具名称或等效的 `Bash(*)` 形式才有这种效果。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。133只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/zh-CN/permissions#tool-name-wildcards)如 `"*"`匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。

132 134 

133<h3 id="compacting-the-conversation">135<h3 id="compacting-the-conversation">

134 压缩对话136 压缩对话


251 253 

252您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。254您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。

253 255 

254底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。256底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。

255 257 

256<h2 id="check-cache-performance">258<h2 id="check-cache-performance">

257 检查缓存性能259 检查缓存性能


290| `DISABLE_PROMPT_CACHING_HAIKU` | 仅对 Haiku 禁用 |292| `DISABLE_PROMPT_CACHING_HAIKU` | 仅对 Haiku 禁用 |

291| `DISABLE_PROMPT_CACHING_SONNET` | 仅对 Sonnet 禁用 |293| `DISABLE_PROMPT_CACHING_SONNET` | 仅对 Sonnet 禁用 |

292| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |294| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |

295| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |

293 296 

294要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。297要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。

295 298 

prompt-library.md +1320 −1

Details

6 6 

7> 复制粘贴提示词到 Claude Code,按任务和角色标记。7> 复制粘贴提示词到 Claude Code,按任务和角色标记。

8 8 

9export const PromptLibrary = ({text = {}, labels = {}, tagLabels = {}, phaseLabels = {}, sourceLabels = {}, catLabels = {}}) => {

10 const RAW = useMemo(() => [{

11 id: 'get-oriented-in-a',

12 sdlc: 'discover',

13 cat: 'Onboard',

14 startN: 1,

15 roles: [],

16 prompt: 'give me an overview of this codebase: architecture, key directories, and how the pieces connect',

17 nextHref: '/en/memory',

18 src: 'workflows'

19 }, {

20 id: 'explain-unfamiliar-code',

21 sdlc: 'discover',

22 cat: 'Understand',

23 roles: [],

24 prompt: 'explain what {path} does and how data flows through it. write it up as {format}',

25 slots: {

26 path: 'src/scheduler/queue.ts',

27 format: 'an HTML page with a diagram, then open it in my browser'

28 },

29 nextHref: '/en/output-styles',

30 src: 'workflows'

31 }, {

32 id: 'find-where-something-happens',

33 sdlc: 'discover',

34 cat: 'Understand',

35 startN: 2,

36 roles: [],

37 prompt: 'where do we {behavior}?',

38 slots: {

39 behavior: 'validate uploaded file types'

40 },

41 src: 'workflows'

42 }, {

43 id: 'see-what-depends-on',

44 sdlc: 'discover',

45 cat: 'Understand',

46 roles: [],

47 prompt: 'what would break if I deleted {target}?',

48 slots: {

49 target: 'the retryWithBackoff helper'

50 },

51 src: 'workflows'

52 }, {

53 id: 'trace-how-code-evolved',

54 sdlc: 'discover',

55 cat: 'Understand',

56 roles: [],

57 prompt: 'look through the commit history of {path} and summarize how it evolved and why',

58 slots: {

59 path: 'internal/auth/session.go'

60 },

61 src: 'best-practices'

62 }, {

63 id: 'scope-a-change-before',

64 sdlc: 'discover',

65 cat: 'Understand',

66 roles: ['pm', 'design'],

67 prompt: 'which files would I need to touch to {change}?',

68 slots: {

69 change: 'add a dark mode toggle to settings'

70 },

71 src: 'teams'

72 }, {

73 id: 'ask-the-codebase-a',

74 sdlc: 'discover',

75 cat: 'Understand',

76 roles: ['pm'],

77 prompt: 'I am a {role}. walk me through what happens when a user {action}, from the UI down to the result',

78 slots: {

79 role: 'PM',

80 action: 'clicks Export to PDF'

81 },

82 nextHref: '/en/output-styles',

83 src: 'teams'

84 }, {

85 id: 'plan-a-multi-file',

86 sdlc: 'design',

87 cat: 'Plan',

88 roles: ['pm', 'design'],

89 prompt: 'plan how to refactor the {target} to {goal}. list the files you would change, but don\'t edit anything yet',

90 slots: {

91 target: 'payment module',

92 goal: 'support multiple currencies'

93 },

94 src: 'workflows'

95 }, {

96 id: 'draft-a-spec-by',

97 sdlc: 'design',

98 cat: 'Plan',

99 roles: ['pm'],

100 prompt: 'I want to build {feature}. interview me about implementation, UX, edge cases, and tradeoffs until we have covered everything, then write the spec to SPEC.md',

101 slots: {

102 feature: 'per-workspace rate limits'

103 },

104 nextHref: '/en/skills',

105 src: 'best-practices'

106 }, {

107 id: 'turn-a-meeting-into',

108 sdlc: 'design',

109 cat: 'Plan',

110 roles: ['pm'],

111 prompt: 'read {input} and write up the action items, then create a {tracker} ticket for each with acceptance criteria',

112 slots: {

113 input: '@meeting-notes.md',

114 tracker: 'Linear'

115 },

116 needs: 'tracker',

117 nextHref: '/en/skills',

118 src: 'teams'

119 }, {

120 id: 'map-edge-cases-before',

121 sdlc: 'design',

122 cat: 'Plan',

123 roles: ['design', 'pm'],

124 prompt: 'list the error states, empty states, and edge cases for {feature} that the design needs to cover',

125 slots: {

126 feature: 'the file upload flow'

127 },

128 src: 'teams'

129 }, {

130 id: 'turn-a-mockup-into',

131 sdlc: 'design',

132 cat: 'Prototype',

133 roles: ['design', 'pm', 'marketing'],

134 paste: 'mockup',

135 prompt: 'here is a mockup. build a working prototype I can click through, matching the layout and states shown',

136 src: 'teams'

137 }, {

138 id: 'implement-from-a-screenshot',

139 sdlc: 'design',

140 cat: 'Prototype',

141 roles: ['design'],

142 paste: 'design',

143 needs: 'browser',

144 prompt: 'implement this design, then take a screenshot of the result, compare it to the original, and fix any differences',

145 nextHref: '/en/goal',

146 src: 'best-practices'

147 }, {

148 id: 'follow-an-existing-pattern',

149 sdlc: 'build',

150 cat: 'Implement',

151 roles: [],

152 prompt: 'look at how {example} is implemented to understand the pattern, then build {new} the same way',

153 slots: {

154 example: 'the GitHub webhook handler',

155 new: 'a Stripe webhook handler'

156 },

157 nextHref: '/en/memory',

158 src: 'best-practices'

159 }, {

160 id: 'generate-docs-for-code',

161 sdlc: 'build',

162 cat: 'Implement',

163 roles: ['docs'],

164 prompt: 'find {scope} without {format} comments and add them, matching the style already used in the file',

165 slots: {

166 scope: 'the public functions in src/auth/',

167 format: 'JSDoc'

168 },

169 src: 'workflows'

170 }, {

171 id: 'add-a-small-well',

172 sdlc: 'build',

173 cat: 'Implement',

174 roles: [],

175 prompt: 'add a {endpoint} endpoint that returns {payload}',

176 slots: {

177 endpoint: '/health',

178 payload: 'the app version and uptime'

179 },

180 src: 'workflows'

181 }, {

182 id: 'build-a-small-internal',

183 sdlc: 'build',

184 cat: 'Implement',

185 roles: ['pm', 'design', 'marketing', 'docs'],

186 prompt: 'create a {tool} using HTML, CSS, and vanilla JavaScript, then open it in my browser',

187 slots: {

188 tool: 'drag-and-drop Kanban board with three columns'

189 },

190 src: 'teams'

191 }, {

192 id: 'work-an-issue-end',

193 sdlc: 'build',

194 cat: 'Implement',

195 roles: [],

196 prompt: 'read issue #{issue}, implement the fix, and run the tests',

197 slots: {

198 issue: '312'

199 },

200 needs: 'gh',

201 src: 'workflows'

202 }, {

203 id: 'find-and-update-copy',

204 sdlc: 'build',

205 cat: 'Implement',

206 roles: ['design', 'docs', 'marketing'],

207 prompt: 'find every place we say "{copy}" or a close variant, show me each one in context, then update them all to "{new}". leave tests and the changelog alone',

208 slots: {

209 copy: 'Sign up free',

210 new: 'Start free trial'

211 },

212 src: 'teams'

213 }, {

214 id: 'draft-from-past-examples',

215 sdlc: 'build',

216 cat: 'Implement',

217 roles: ['docs', 'marketing', 'pm'],

218 prompt: 'read the {examples} in {folder} to learn the structure and voice, then draft a new one for {topic}',

219 slots: {

220 examples: 'privacy impact assessments',

221 folder: 'legal/pia/',

222 topic: 'the new analytics integration'

223 },

224 nextHref: '/en/skills',

225 src: 'legal'

226 }, {

227 id: 'write-tests-run-them',

228 sdlc: 'build',

229 cat: 'Test',

230 startN: 4,

231 roles: [],

232 prompt: 'write tests for {path}, run them, and fix any failures',

233 slots: {

234 path: 'app/parsers/feed.py'

235 },

236 nextHref: '/en/memory',

237 src: 'workflows'

238 }, {

239 id: 'drive-implementation-from-tests',

240 sdlc: 'build',

241 cat: 'Test',

242 roles: [],

243 prompt: 'write tests for {feature} first, then implement it until they pass',

244 slots: {

245 feature: 'the password reset flow'

246 },

247 src: 'ebook'

248 }, {

249 id: 'fill-gaps-from-a',

250 sdlc: 'build',

251 cat: 'Test',

252 roles: [],

253 prompt: 'read {report} and add tests for the lowest-covered files until each is above {target}%',

254 slots: {

255 report: 'coverage/coverage-summary.json',

256 target: '80'

257 },

258 nextHref: '/en/goal',

259 src: 'workflows'

260 }, {

261 id: 'migrate-a-pattern-across',

262 sdlc: 'build',

263 cat: 'Refactor',

264 roles: [],

265 prompt: 'migrate everything from {from} to {to}: identify every place that needs to change, then make the changes',

266 slots: {

267 from: 'the old logging API',

268 to: 'the structured logger'

269 },

270 src: 'workflows'

271 }, {

272 id: 'port-code-between-languages',

273 sdlc: 'build',

274 cat: 'Refactor',

275 roles: [],

276 prompt: 'port {source} to {target}, keeping the same {keep}',

277 slots: {

278 source: 'this Python module',

279 target: 'Rust',

280 keep: 'public API and test behavior'

281 },

282 src: 'teams'

283 }, {

284 id: 'optimize-against-a-measurable',

285 sdlc: 'build',

286 cat: 'Refactor',

287 roles: ['data'],

288 prompt: 'optimize {target} to bring {metric} from {current} down to under {goal}',

289 slots: {

290 target: 'the search query',

291 metric: 'p95 latency',

292 current: '2s',

293 goal: '500ms'

294 },

295 nextHref: '/en/goal',

296 src: 'ebook'

297 }, {

298 id: 'fix-a-precise-visual',

299 sdlc: 'build',

300 cat: 'Refactor',

301 roles: ['design'],

302 prompt: 'the {element} extends {amount} beyond the {container} on {viewport}. fix it.',

303 slots: {

304 element: 'login button',

305 amount: '20px',

306 container: 'card border',

307 viewport: 'mobile'

308 },

309 nextHref: '/en/desktop#preview-your-app',

310 src: 'ebook'

311 }, {

312 id: 'review-your-changes-before',

313 sdlc: 'build',

314 cat: 'Review',

315 startN: 5,

316 roles: [],

317 prompt: 'review my uncommitted changes and flag anything that looks risky before I commit',

318 nextHref: '/en/commands',

319 src: 'workflows'

320 }, {

321 id: 'review-a-pull-request',

322 sdlc: 'build',

323 cat: 'Review',

324 roles: [],

325 prompt: 'review PR #{pr} and summarize what changed, then list any concerns',

326 slots: {

327 pr: '247'

328 },

329 needs: 'gh',

330 nextHref: '/en/code-review',

331 src: 'workflows'

332 }, {

333 id: 'review-infrastructure-changes-before',

334 sdlc: 'build',

335 cat: 'Review',

336 roles: ['security', 'ops'],

337 paste: 'plan',

338 prompt: 'here is my Terraform plan output. what is this going to do, and is anything here going to cause problems?',

339 src: 'teams'

340 }, {

341 id: 'run-a-security-review',

342 sdlc: 'build',

343 cat: 'Review',

344 roles: ['security'],

345 prompt: 'use a subagent to review {path} for security issues and report what it finds',

346 slots: {

347 path: 'src/api/'

348 },

349 nextHref: '/en/sub-agents',

350 src: 'best-practices'

351 }, {

352 id: 'review-content-before-sending',

353 sdlc: 'build',

354 cat: 'Review',

355 roles: ['marketing', 'docs'],

356 prompt: 'review {file} for {concerns} and list anything I should fix before it goes to {reviewer}',

357 slots: {

358 file: 'launch-post.md',

359 concerns: 'unsupported claims, missing attributions, and brand-guideline issues',

360 reviewer: 'legal'

361 },

362 nextHref: '/en/skills',

363 src: 'legal'

364 }, {

365 id: 'course-correct-a-wrong',

366 sdlc: 'build',

367 cat: 'Steer',

368 roles: [],

369 prompt: 'that is not right: {feedback}. try a different approach',

370 slots: {

371 feedback: 'the function signature needs to stay backward-compatible'

372 },

373 nextHref: '/en/checkpointing',

374 src: 'best-practices'

375 }, {

376 id: 'narrow-the-scope-of',

377 sdlc: 'build',

378 cat: 'Steer',

379 roles: [],

380 prompt: 'that is too much. keep only the changes to {scope} and undo your other edits',

381 slots: {

382 scope: 'the validation logic in src/forms/'

383 },

384 src: 'best-practices'

385 }, {

386 id: 'turn-a-correction-into',

387 sdlc: 'build',

388 cat: 'Steer',

389 roles: [],

390 prompt: 'you keep {mistake}. add a rule to CLAUDE.md so this stops happening',

391 slots: {

392 mistake: 'using default exports when this project uses named exports'

393 },

394 nextHref: '/en/memory',

395 src: 'best-practices'

396 }, {

397 id: 'resolve-merge-conflicts',

398 sdlc: 'ship',

399 cat: 'Git',

400 roles: [],

401 prompt: 'resolve the merge conflicts in this branch and explain what you kept from each side',

402 src: 'workflows'

403 }, {

404 id: 'commit-with-a-generated',

405 sdlc: 'ship',

406 cat: 'Git',

407 roles: [],

408 prompt: 'commit these changes with a message that summarizes what I did',

409 src: 'workflows'

410 }, {

411 id: 'open-a-pull-request',

412 sdlc: 'ship',

413 cat: 'Git',

414 roles: [],

415 prompt: 'find the {tracker} ticket about {topic} and open a PR that implements it',

416 slots: {

417 tracker: 'Linear',

418 topic: 'the login timeout'

419 },

420 needs: 'tracker',

421 src: 'workflows'

422 }, {

423 id: 'draft-release-notes-from',

424 sdlc: 'ship',

425 cat: 'Release',

426 roles: ['pm', 'docs', 'marketing'],

427 prompt: 'compare {from} to {to} and draft release notes grouped by feature, fix, and breaking change',

428 slots: {

429 from: 'v2.3.0',

430 to: 'v2.4.0'

431 },

432 nextHref: '/en/skills',

433 src: 'workflows'

434 }, {

435 id: 'write-a-ci-workflow',

436 sdlc: 'ship',

437 cat: 'Release',

438 roles: ['ops'],

439 prompt: 'write a GitHub Actions workflow that {steps} on every push to {branch}',

440 slots: {

441 steps: 'runs the tests and deploys to staging',

442 branch: 'main'

443 },

444 src: 'workflows'

445 }, {

446 id: 'find-and-fix-a',

447 sdlc: 'operate',

448 cat: 'Debug',

449 startN: 3,

450 roles: [],

451 prompt: 'the {test} test is failing, find out why and fix it',

452 slots: {

453 test: 'UserAuth'

454 },

455 src: 'workflows'

456 }, {

457 id: 'investigate-a-reported-error',

458 sdlc: 'operate',

459 cat: 'Debug',

460 roles: ['ops'],

461 prompt: 'users are seeing {symptom} on {where}. investigate and tell me what is going on',

462 slots: {

463 symptom: '500 errors',

464 where: '/api/settings'

465 },

466 nextHref: '/en/web-quickstart#pre-fill-sessions',

467 src: 'workflows'

468 }, {

469 id: 'fix-a-build-error',

470 sdlc: 'operate',

471 cat: 'Debug',

472 roles: ['ops'],

473 paste: 'error',

474 prompt: 'here is a build error. fix the root cause and verify the build succeeds',

475 src: 'best-practices'

476 }, {

477 id: 'investigate-a-production-incident',

478 sdlc: 'operate',

479 cat: 'Incident',

480 roles: ['ops', 'security'],

481 prompt: '{symptom}. check the logs, recent deploys, and config changes, then tell me the most likely cause',

482 slots: {

483 symptom: 'the checkout endpoint started returning 500s an hour ago'

484 },

485 nextHref: '/en/mcp',

486 src: 'workflows'

487 }, {

488 id: 'diagnose-from-a-console',

489 sdlc: 'operate',

490 cat: 'Incident',

491 roles: ['ops', 'data'],

492 paste: 'screenshot',

493 prompt: 'here is a screenshot of {console}. walk me through why {resource} is failing and give me the exact commands to fix it',

494 slots: {

495 console: 'the GCP Kubernetes dashboard',

496 resource: 'this pod'

497 },

498 src: 'teams'

499 }, {

500 id: 'query-logs-in-plain',

501 sdlc: 'operate',

502 cat: 'Incident',

503 roles: ['security', 'ops', 'data'],

504 prompt: 'show me all {events} for {scope} over {timeframe}. write the query, run it, and tell me what stands out',

505 slots: {

506 events: 'failed logins',

507 scope: 'the auth service',

508 timeframe: 'the past 24 hours'

509 },

510 needs: 'db',

511 src: 'cybersecurity'

512 }, {

513 id: 'analyze-a-data-file',

514 sdlc: 'operate',

515 cat: 'Data',

516 roles: ['data', 'pm', 'marketing'],

517 paste: 'csv',

518 prompt: 'read {file}, summarize the key patterns, and write the results to {output}',

519 slots: {

520 file: '@reports/q1-signups.csv',

521 output: 'an HTML page with charts, then open it in my browser'

522 },

523 nextHref: '/en/mcp',

524 src: 'teams'

525 }, {

526 id: 'generate-variations-from-performance',

527 sdlc: 'operate',

528 cat: 'Data',

529 roles: ['marketing', 'data'],

530 paste: 'csv',

531 prompt: 'read {file}, find the underperforming {items}, and generate {n} new variations that stay under {limit} characters',

532 slots: {

533 file: '@ads-performance.csv',

534 items: 'headlines',

535 n: '20',

536 limit: '90'

537 },

538 nextHref: '/en/mcp',

539 src: 'teams'

540 }, {

541 id: 'turn-a-recurring-task',

542 sdlc: 'operate',

543 cat: 'Automate',

544 roles: [],

545 prompt: 'create a /{name} skill for this project that {steps}',

546 slots: {

547 name: 'ship',

548 steps: 'runs the linter and tests, then drafts a commit message'

549 },

550 src: 'workflows'

551 }, {

552 id: 'add-a-hook-for',

553 sdlc: 'operate',

554 cat: 'Automate',

555 roles: [],

556 prompt: 'write a hook that {action} after every {event}',

557 slots: {

558 action: 'runs prettier',

559 event: 'edit to a .ts or .tsx file'

560 },

561 src: 'best-practices'

562 }, {

563 id: 'connect-a-tool-with',

564 sdlc: 'operate',

565 cat: 'Automate',

566 roles: [],

567 prompt: 'set up the {server} MCP server so you can read my {data} directly',

568 slots: {

569 server: 'Sentry',

570 data: 'error reports'

571 },

572 src: 'workflows'

573 }, {

574 id: 'capture-what-to-remember',

575 sdlc: 'operate',

576 cat: 'Automate',

577 roles: ['pm', 'docs'],

578 prompt: 'summarize what we did this session and suggest what to add to CLAUDE.md',

579 src: 'teams'

580 }], []);

581 const PROMPTS = useMemo(() => {

582 if (typeof window !== 'undefined') {

583 const rawIds = new Set(RAW.map(p => p.id));

584 RAW.forEach(p => {

585 if (!text[p.id]) console.warn('[prompt-library] no text[] entry for id:', p.id);

586 });

587 Object.keys(text).forEach(k => {

588 if (!rawIds.has(k)) console.warn('[prompt-library] orphaned text[] key:', k);

589 });

590 }

591 return RAW.map(p => ({

592 ...p,

593 title: p.id,

594 teaches: '',

595 ...text[p.id] || ({})

596 }));

597 }, [RAW, text]);

598 const L = labels;

599 const TL = k => tagLabels[k] || k;

600 const CAT_TAG = useMemo(() => ({

601 Onboard: 'understand',

602 Understand: 'understand',

603 Plan: 'plan',

604 Prototype: 'prototype',

605 Implement: 'build',

606 Test: 'test',

607 Refactor: 'refactor',

608 Review: 'review',

609 Steer: 'steer',

610 Git: 'git',

611 Release: 'release',

612 Debug: 'debug',

613 Incident: 'debug',

614 Data: 'data',

615 Automate: 'automate'

616 }), []);

617 const TAGS = useMemo(() => ['understand', 'plan', 'prototype', 'build', 'test', 'refactor', 'review', 'steer', 'debug', 'git', 'release', 'data', 'automate', 'pm', 'design', 'docs', 'marketing', 'security', 'ops'], []);

618 const tagsOf = p => [CAT_TAG[p.cat], ...p.roles || []];

619 const doc = useMemo(() => {

620 const p = typeof window !== 'undefined' ? window.location.pathname : '';

621 const base = p.startsWith('/docs/') ? '/docs' : '';

622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);

623 const locale = m ? m[1] : 'en';

624 return href => {

625 if (!href || href[0] !== '/' || href[1] === '/') return href;

626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);

627 };

628 }, []);

629 const linkify = s => {

630 const out = [];

631 let last = 0;

632 const re = /\[([^\]]+)\]\(([^)]+)\)/g;

633 for (let m; m = re.exec(s); ) {

634 if (m.index > last) out.push(s.slice(last, m.index));

635 out.push(<a key={m.index} href={doc(m[2])}>{m[1]}</a>);

636 last = re.lastIndex;

637 }

638 if (last < s.length) out.push(s.slice(last));

639 return out;

640 };

641 const codeify = s => s.split(/(`[^`]+`)/g).map((part, i) => part[0] === '`' ? <code key={i}>{part.slice(1, -1)}</code> : part);

642 const SOURCES = useMemo(() => ({

643 'workflows': '/en/common-workflows',

644 'teams': 'https://claude.com/blog/how-anthropic-teams-use-claude-code',

645 'legal': 'https://claude.com/blog/how-anthropic-uses-claude-legal',

646 'cybersecurity': 'https://claude.com/blog/how-anthropic-uses-claude-cybersecurity',

647 'best-practices': '/en/best-practices',

648 'ebook': 'https://resources.anthropic.com/hubfs/Scaling%20agentic%20coding%20across%20your%20organization.pdf'

649 }), []);

650 const [mounted, setMounted] = useState(false);

651 const [q, setQ] = useState('');

652 const [start, setStart] = useState(true);

653 const [sel, setSel] = useState(null);

654 const [openId, setOpenId] = useState(null);

655 const [copied, setCopied] = useState(null);

656 const [fills, setFills] = useState({});

657 const copyTimer = useRef(null);

658 useEffect(() => {

659 setMounted(true);

660 return () => clearTimeout(copyTimer.current);

661 }, []);

662 const setFill = (id, key, val) => setFills(f => ({

663 ...f,

664 [id + '.' + key]: val

665 }));

666 const fillOf = (p, key) => {

667 const v = fills[p.id + '.' + key];

668 return v !== undefined ? v : p.slots && p.slots[key] !== undefined ? p.slots[key] : '';

669 };

670 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);

671 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);

672 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');

673 const widthFor = s => (s || '').length + 3 + 'ch';

674 const ql = q.trim().toLowerCase();

675 const toggleTag = k => {

676 setStart(false);

677 setSel(s => !ql && s === k ? null : k);

678 };

679 const clear = () => {

680 setStart(false);

681 setSel(null);

682 setQ('');

683 };

684 const results = useMemo(() => {

685 const list = PROMPTS.filter(p => {

686 if (ql) return p.title.toLowerCase().includes(ql) || bodyText(p).toLowerCase().includes(ql);

687 if (start) return !!p.startN;

688 if (sel) return tagsOf(p).includes(sel);

689 return true;

690 });

691 if (ql) return list;

692 if (start) return list.sort((a, b) => a.startN - b.startN);

693 if (sel) return list.sort((a, b) => (a.roles || []).length - (b.roles || []).length || (b.sdlc === 'operate') - (a.sdlc === 'operate'));

694 return list;

695 }, [PROMPTS, ql, start, sel]);

696 const matchSnippet = p => {

697 if (!ql || p.title.toLowerCase().includes(ql)) return null;

698 const txt = bodyText(p);

699 const at = txt.toLowerCase().indexOf(ql);

700 if (at < 0) return null;

701 const lo = Math.max(0, at - 30), hi = Math.min(txt.length, at + ql.length + 50);

702 return [lo > 0 ? '…' : '', txt.slice(lo, at), <mark key="m">{txt.slice(at, at + ql.length)}</mark>, txt.slice(at + ql.length, hi), hi < txt.length ? '…' : ''];

703 };

704 const grouped = useMemo(() => {

705 if (start && !q.trim()) return [];

706 const g = {};

707 for (const p of results) {

708 const key = p.sdlc + '|' + p.cat;

709 (g[key] = g[key] || ({

710 sdlc: p.sdlc,

711 cat: p.cat,

712 items: []

713 })).items.push(p);

714 }

715 return Object.values(g);

716 }, [results, start, q]);

717 const copy = async (str, id) => {

718 try {

719 await navigator.clipboard.writeText(str);

720 } catch {

721 const ta = document.createElement('textarea');

722 ta.value = str;

723 ta.setAttribute('readonly', '');

724 ta.style.position = 'fixed';

725 ta.style.opacity = '0';

726 document.body.appendChild(ta);

727 ta.select();

728 document.execCommand('copy');

729 document.body.removeChild(ta);

730 }

731 clearTimeout(copyTimer.current);

732 setCopied(id);

733 copyTimer.current = setTimeout(() => setCopied(null), 1600);

734 };

735 const promptBody = p => {

736 if (!p.slots) return <code>{p.prompt}</code>;

737 const parts = p.prompt.split(/(\{\w+\})/g);

738 return <code>

739 {parts.map((part, idx) => {

740 const m = part.match(/^\{(\w+)\}$/);

741 if (!m) return <span key={idx}>{part}</span>;

742 const k = m[1];

743 const val = fillOf(p, k);

744 return <input key={idx} type="text" className="pl-slot" value={val} placeholder={p.slots[k] || k} aria-label={k} style={{

745 width: widthFor(val || p.slots[k])

746 }} onChange={e => setFill(p.id, k, e.target.value)} onFocus={e => e.target.select()} onClick={e => e.stopPropagation()} />;

747 })}

748 </code>;

749 };

750 const card = p => {

751 const open = openId === p.id;

752 const srcHref = SOURCES[p.src];

753 const srcLabel = sourceLabels[p.src];

754 const snip = matchSnippet(p);

755 return <div key={p.id} className={'pl-card' + (open ? ' pl-open' : '')}>

756 <button type="button" className="pl-head" onClick={() => setOpenId(open ? null : p.id)} aria-expanded={open}>

757 <span className="pl-title">{p.title}</span>

758 {!!p.startN && <span className="pl-chip">{L.startHere} · {p.startN}</span>}

759 </button>

760 {snip ? <div className="pl-match">{snip}</div> : <code className="pl-prompt-preview">{preview(p)}</code>}

761 {open && <div className="pl-body">

762 <div className="pl-label">{p.slots ? L.fillAndCopy : L.copyThis}</div>

763 {p.needs && L.needs && L.needs[p.needs] && <div className="pl-hint pl-needs">

764 <span className="pl-needs-label">{L.needsLabel}</span> {linkify(L.needs[p.needs])}

765 </div>}

766 {p.paste && L.paste && L.paste[p.paste] && <div className="pl-hint pl-paste">{L.paste[p.paste]}</div>}

767 {p.slots && <div className="pl-hint">

768 {L.hintBefore} <span className="pl-hint-chip">{L.hintChip}</span> {L.hintAfter}

769 </div>}

770 <div className="pl-prompt-box">

771 <span className="pl-caret">{'❯'}</span>

772 {promptBody(p)}

773 <button type="button" className="pl-copy" onClick={() => copy(assemble(p), p.id)}>

774 {copied === p.id ? L.copied : L.copy}

775 </button>

776 </div>

777 <div className="pl-label">{L.whyWorks}</div>

778 <div className="pl-teaches">{linkify(p.teaches)}</div>

779 {p.nextHref && p.next && <div className="pl-next">

780 <span className="pl-next-label">{L.makeItStick}</span>

781 <a href={doc(p.nextHref)}>{codeify(p.next)} →</a>

782 </div>}

783 {srcLabel && <div className="pl-src">{L.from} {srcHref ? <a href={doc(srcHref)}>{srcLabel}</a> : srcLabel}</div>}

784 </div>}

785 </div>;

786 };

787 const STYLES = useMemo(() => `

788.pl {

789 --pl-accent: #D97757;

790 --pl-accent-bg: rgba(217,119,87,0.07);

791 --pl-bg: #fff;

792 --pl-surface: #FAFAF7;

793 --pl-border: #E8E6DC;

794 --pl-border-subtle: rgba(31,30,29,0.08);

795 --pl-text: #141413;

796 --pl-text-2: #5E5D59;

797 --pl-text-3: #73726C;

798 --pl-text-4: #9C9A92;

799 --pl-mono: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);

800 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, sans-serif;

801 font-size: 16px; color: var(--pl-text); margin: 8px 0 32px;

802}

803.dark .pl {

804 --pl-bg: #1f1e1d;

805 --pl-surface: #262624;

806 --pl-border: #3d3d3a;

807 --pl-border-subtle: rgba(240,238,230,0.08);

808 --pl-text: #f0eee6;

809 --pl-text-2: #bfbdb4;

810 --pl-text-3: #91908a;

811 --pl-text-4: #73726c;

812}

813.pl *, .pl *::before, .pl *::after { box-sizing: border-box; }

814.pl button { font-family: inherit; cursor: pointer; }

815.pl a { color: var(--pl-accent); text-decoration: none; }

816.pl a:hover { text-decoration: underline; }

817 

818.pl-search {

819 display: flex; align-items: center; gap: 10px;

820 padding: 14px 18px; background: var(--pl-surface);

821 border: 1px solid var(--pl-border); border-radius: 12px;

822 margin-bottom: 14px;

823}

824.pl-search input {

825 flex: 1; border: none; outline: none; background: transparent;

826 font-size: 16px; color: var(--pl-text);

827}

828.pl-search input::placeholder { color: var(--pl-text-4); }

829 

830.pl-tags { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 18px; }

831.pl-tag {

832 padding: 7px 14px; border: 1px solid var(--pl-border); background: var(--pl-bg);

833 font-size: 14px; color: var(--pl-text-2); border-radius: 999px;

834}

835.pl-tag:hover { background: var(--pl-surface); }

836.pl-tag.pl-on { background: var(--pl-text); border-color: var(--pl-text); color: var(--pl-bg); }

837.pl-tag.pl-start { color: var(--pl-accent); font-weight: 500; }

838.pl-tag.pl-start.pl-on { background: var(--pl-accent); border-color: var(--pl-accent); color: #fff; }

839.pl-tags.pl-dim .pl-tag { opacity: 0.5; }

840.pl-tags.pl-dim .pl-tag:hover { opacity: 1; }

841.pl-sep { width: 1px; height: 22px; background: var(--pl-border); margin: 0 4px; }

842.pl-clear { border: none; background: none; font-size: 13px; color: var(--pl-text-4); padding: 4px 6px; }

843.pl-clear:hover { color: var(--pl-text-2); }

844.pl-count { margin-left: auto; font-size: 14px; color: var(--pl-text-4); }

845 

846.pl-group-h {

847 font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;

848 color: var(--pl-text-4); margin: 24px 0 12px;

849}

850.pl-group-h .pl-phase { color: var(--pl-text-3); }

851.pl-card {

852 border: 1px solid var(--pl-border-subtle); border-radius: 10px;

853 margin-bottom: 12px; background: var(--pl-bg); overflow: hidden;

854 padding: 14px 18px;

855}

856.pl-card.pl-open { border-color: var(--pl-border); background: var(--pl-surface); }

857.pl-head {

858 width: 100%; display: flex; align-items: baseline; gap: 12px;

859 border: none; background: transparent; text-align: left; padding: 0;

860}

861.pl-head:focus-visible { outline: 2px solid var(--pl-accent); outline-offset: 2px; border-radius: 6px; }

862.pl-title {

863 flex: 1; font-size: 17px; font-weight: 500; color: var(--pl-text);

864 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;

865}

866.pl-prompt-preview {

867 display: block; font-family: var(--pl-mono); font-size: 13.5px; color: var(--pl-text-3);

868 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;

869}

870.pl-chip {

871 font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;

872 padding: 3px 9px; border-radius: 999px; flex-shrink: 0;

873 background: var(--pl-accent-bg); color: var(--pl-accent);

874}

875 

876.pl-body { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--pl-border-subtle); }

877.pl-label {

878 font-size: 11.5px; letter-spacing: 0.08em; text-transform: uppercase;

879 color: var(--pl-text-4); margin: 12px 0 8px;

880}

881.pl-prompt-box {

882 display: flex; align-items: center; gap: 10px;

883 padding: 14px 16px; background: #141413; color: #f0eee6;

884 border-radius: 8px; font-family: var(--pl-mono); font-size: 15px;

885}

886.pl-caret { color: var(--pl-accent); flex-shrink: 0; }

887.pl-prompt-box code { flex: 1; background: none; padding: 0; color: inherit; white-space: pre-wrap; line-height: 1.9; }

888.pl-slot {

889 font-family: var(--pl-mono); font-size: inherit;

890 background: rgba(217,119,87,0.15); color: #f0eee6;

891 border: none; border-bottom: 1.5px dashed var(--pl-accent);

892 border-radius: 4px 4px 0 0; padding: 2px 6px; margin: 0 1px;

893 outline: none; min-width: 6ch; max-width: 100%;

894 box-sizing: content-box; cursor: text;

895}

896.pl-slot:hover { background: rgba(217,119,87,0.22); }

897.pl-slot:focus { background: rgba(217,119,87,0.28); border-bottom-style: solid; }

898.pl-slot::placeholder { color: rgba(240,238,230,0.4); font-style: italic; }

899.pl-hint { font-size: 14px; color: var(--pl-text-3); margin: 0 0 10px; }

900.pl-paste { color: var(--pl-text-2); }

901.pl-needs { color: var(--pl-text-2); }

902.pl-needs-label {

903 display: inline-block; font-size: 10.5px; letter-spacing: 0.06em;

904 text-transform: uppercase; padding: 2px 7px; margin-right: 6px;

905 border-radius: 4px; background: var(--pl-accent-bg); color: var(--pl-accent);

906}

907.pl-hint-chip {

908 font-family: var(--pl-mono); font-size: 0.92em;

909 background: var(--pl-accent-bg); color: var(--pl-accent);

910 border-bottom: 1.5px dashed var(--pl-accent);

911 border-radius: 3px 3px 0 0; padding: 1px 5px;

912}

913.pl-copy {

914 font-size: 12.5px; padding: 6px 12px; border-radius: 6px;

915 background: var(--pl-accent); color: #fff; border: none; flex-shrink: 0;

916}

917.pl-teaches { display: block; font-size: 15.5px; color: var(--pl-text-2); margin: 4px 0 0; line-height: 1.6; }

918.pl-match {

919 display: block; font-size: 13.5px; color: var(--pl-text-3);

920 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;

921}

922.pl-match mark { background: var(--pl-accent-bg); color: var(--pl-text); padding: 1px 2px; border-radius: 3px; }

923.pl-next {

924 display: flex; align-items: baseline; gap: 10px;

925 margin: 14px 0 0; padding: 10px 12px;

926 background: var(--pl-accent-bg); border-radius: 8px; font-size: 14.5px;

927}

928.pl-next-label {

929 font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase;

930 color: var(--pl-accent); font-weight: 600; flex-shrink: 0;

931}

932.pl-src { display: block; font-size: 14px; color: var(--pl-text-4); margin: 14px 0 0; }

933 

934.pl-show-all {

935 display: block; width: 100%; padding: 14px; margin-top: 4px;

936 border: 1px dashed var(--pl-border); border-radius: 10px;

937 background: transparent; font-size: 15px; color: var(--pl-accent);

938 text-align: center;

939}

940.pl-show-all:hover { background: var(--pl-accent-bg); border-style: solid; }

941 

942.pl-empty {

943 padding: 32px; text-align: center; color: var(--pl-text-4);

944 border: 1px dashed var(--pl-border); border-radius: 10px;

945}

946`, []);

947 if (!mounted) return <div className="pl" style={{

948 minHeight: 480

949 }} />;

950 return <div className="pl">

951 <style>{STYLES}</style>

952 

953 <div className="pl-search">

954 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" style={{

955 color: 'var(--pl-text-4)'

956 }}>

957 <circle cx="11" cy="11" r="7" /><line x1="21" y1="21" x2="16.65" y2="16.65" />

958 </svg>

959 <input type="text" placeholder={L.search} value={q} onChange={e => {

960 setQ(e.target.value);

961 if (e.target.value) setStart(false);

962 }} aria-label={L.search} />

963 </div>

964 

965 <div className={'pl-tags' + (ql ? ' pl-dim' : '')}>

966 <button type="button" className={'pl-tag pl-start' + (!ql && start ? ' pl-on' : '')} onClick={() => {

967 setQ('');

968 setStart(!start);

969 if (!start) setSel(null);

970 }}>

971 ★ {L.startHere}

972 </button>

973 <span className="pl-sep" />

974 {TAGS.map(k => <button key={k} type="button" aria-pressed={!ql && sel === k} className={'pl-tag' + (!ql && sel === k ? ' pl-on' : '')} onClick={() => {

975 setQ('');

976 toggleTag(k);

977 }}>

978 {TL(k)}

979 </button>)}

980 {(start || sel || q) && <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>}

981 <span className="pl-count">{results.length} {results.length === 1 ? L.prompt : L.prompts}</span>

982 </div>

983 

984 {results.length === 0 ? <div className="pl-empty">

985 {L.noMatch} {ql ? <code>{q}</code> : null} <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>

986 </div> : !ql && start ? <div>

987 <div className="pl-group-h">{L.startHereHeader}</div>

988 {results.map(card)}

989 <button type="button" className="pl-show-all" onClick={clear}>

990 {L.showAll && L.showAll.replace('{n}', PROMPTS.length)} →

991 </button>

992 </div> : grouped.map(g => <div key={g.sdlc + '|' + g.cat}>

993 <div className="pl-group-h"><span className="pl-phase">{phaseLabels[g.sdlc] || g.sdlc}</span> · {catLabels[g.cat] || g.cat}</div>

994 {g.items.map(card)}

995 </div>)}

996 </div>;

997};

998 

9这是一个提示词库,可以复制到 Claude Code 中使用。使用它来探索你还没有尝试过的工作方式,或者当你不确定从哪里开始时。999这是一个提示词库,可以复制到 Claude Code 中使用。使用它来探索你还没有尝试过的工作方式,或者当你不确定从哪里开始时。

10 1000 

11这些提示词来自各种 Anthropic 指南,包括[常见工作流](/zh-CN/common-workflows)、[最佳实践](/zh-CN/best-practices)和[Anthropic 团队如何使用 Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code)。它们是起点而不是脚本。打开任何提示词下的**为什么这样做有效**来查看其背后的模式,这样你可以编写自己的提示词。1001这些提示词来自各种 Anthropic 指南,包括[常见工作流](/zh-CN/common-workflows)、[最佳实践](/zh-CN/best-practices)和[Anthropic 团队如何使用 Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code)。它们是起点而不是脚本。打开任何提示词下的**为什么这样做有效**来查看其背后的模式,这样你可以编写自己的提示词。

12 1002 

1003export const labels = {

1004 startHere: "从这里开始",

1005 startHereHeader: "五个首先尝试的提示词",

1006 showAll: "显示全部 {n} 个提示词",

1007 search: "搜索提示词…",

1008 clear: "清除",

1009 prompt: "提示词",

1010 prompts: "提示词",

1011 noMatch: "没有匹配的提示词",

1012 fillAndCopy: "填写并复制",

1013 copyThis: "复制此提示词",

1014 hintBefore: "在",

1015 hintChip: "高亮显示的",

1016 hintAfter: "字段中输入以自定义,然后复制。",

1017 copy: "复制",

1018 copied: "已复制",

1019 whyWorks: "为什么这样做有效",

1020 makeItStick: "使其坚持",

1021 from: "来自",

1022 paste: {

1023 mockup: "粘贴、拖动或 @-提及你的模型图像,然后发送此内容:",

1024 design: "粘贴、拖动或 @-提及你的设计图像,然后发送此内容:",

1025 screenshot: "粘贴、拖动或 @-提及你的屏幕截图,然后发送此内容:",

1026 plan: "首先将你的计划输出粘贴到提示词中,然后发送此内容:",

1027 error: "首先将错误输出粘贴到提示词中,然后发送此内容:",

1028 csv: "将你的文件拖到提示词中,或将下面的路径替换为你自己的 @-提及:"

1029 },

1030 needsLabel: "需要",

1031 needs: {

1032 tracker: "你的问题跟踪器添加为 [claude.ai 连接器](/zh-CN/mcp#use-mcp-servers-from-claude-ai) 或 [MCP 服务器](/zh-CN/mcp)。",

1033 gh: "[gh CLI](https://cli.github.com) 已认证,或 GitHub 添加为 [claude.ai 连接器](/zh-CN/mcp#use-mcp-servers-from-claude-ai)。",

1034 browser: "Claude 能够呈现和截图结果的方式。[桌面应用](/zh-CN/desktop#preview-your-app)内置了此功能。在终端中,安装 [Chrome 扩展](/zh-CN/chrome)或 Playwright [MCP](/zh-CN/mcp) 服务器。",

1035 db: "你的数据仓库或日志存储添加为 [claude.ai 连接器](/zh-CN/mcp#use-mcp-servers-from-claude-ai) 或 [MCP 服务器](/zh-CN/mcp)。"

1036 }

1037};

1038 

1039export const tagLabels = {

1040 understand: "理解",

1041 plan: "计划",

1042 prototype: "原型",

1043 build: "构建",

1044 test: "测试",

1045 refactor: "重构",

1046 review: "审查",

1047 steer: "引导",

1048 debug: "调试",

1049 git: "Git",

1050 release: "发布",

1051 data: "数据",

1052 automate: "自动化",

1053 pm: "产品",

1054 design: "设计",

1055 docs: "文档",

1056 marketing: "营销",

1057 security: "安全",

1058 ops: "值班"

1059};

1060 

1061export const phaseLabels = {

1062 discover: "发现",

1063 design: "设计",

1064 build: "构建",

1065 ship: "发布",

1066 operate: "运营"

1067};

1068 

1069export const sourceLabels = {

1070 workflows: "常见工作流",

1071 teams: "Anthropic 团队如何使用 Claude Code",

1072 legal: "Anthropic 如何在法律中使用 Claude",

1073 cybersecurity: "Anthropic 如何在网络安全中使用 Claude",

1074 "best-practices": "最佳实践",

1075 ebook: "扩展代理编码指南"

1076};

1077 

1078export const catLabels = {

1079 Onboard: "入职",

1080 Understand: "理解",

1081 Plan: "计划",

1082 Prototype: "原型",

1083 Implement: "实现",

1084 Test: "测试",

1085 Refactor: "重构",

1086 Review: "审查",

1087 Steer: "引导",

1088 Git: "Git",

1089 Release: "发布",

1090 Debug: "调试",

1091 Incident: "事件",

1092 Data: "数据",

1093 Automate: "自动化"

1094};

1095 

1096export const text = {

1097 "get-oriented-in-a": {

1098 title: "在新存储库中定位",

1099 teaches: "描述你想了解的内容,而不是要读哪些文件。Claude 自己探索项目并返回它如何组合在一起的摘要。",

1100 next: "运行 `/init` 来设置 `CLAUDE.md`,以便 Claude 在每个会话中记住这一点"

1101 },

1102 "explain-unfamiliar-code": {

1103 title: "解释不熟悉的代码",

1104 teaches: "命名文件并说出你想要答案的格式。将 HTML 页面交换为图表、项目符号或任何适合你学习方式的内容。",

1105 next: "设置输出样式,以便 Claude 始终以你喜欢的格式进行解释"

1106 },

1107 "find-where-something-happens": {

1108 title: "找到某事发生的地方",

1109 teaches: "按行为而不是按文件名搜索。即使你不知道文件叫什么或它位于哪个目录,搜索也能工作。"

1110 },

1111 "see-what-depends-on": {

1112 title: "在删除前检查什么会破坏",

1113 teaches: "在删除任何内容之前询问。调用者列表和下游影响告诉你是在看一行清理还是需要协调的更改。"

1114 },

1115 "trace-how-code-evolved": {

1116 title: "追踪代码如何演变",

1117 teaches: "当问题是为什么而不是什么时,指向提交历史。Claude 读取你使用的任何版本控制的日志和责备,并解释当前实现背后的决策。"

1118 },

1119 "scope-a-change-before": {

1120 title: "在开始前确定更改的范围",

1121 teaches: "在将工作提交到路线图之前调整其大小。文件列表告诉你是在看一个组件还是跨越式更改。"

1122 },

1123 "ask-the-codebase-a": {

1124 title: "向代码库提出产品问题",

1125 teaches: "说出你的角色,以便答案在正确的级别上。Claude 从源代码解释产品实际做什么,无需你阅读它。",

1126 next: "设置输出样式,以便 Claude 始终在此级别上提出答案"

1127 },

1128 "plan-a-multi-file": {

1129 title: "在触及代码前计划多文件更改",

1130 teaches: "添加\"不要编辑\"将探索与更改分开,所以你在任何代码移动前看到方法。要使计划优先成为每个提示词的默认值,按 Shift+Tab 进入[计划模式](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)。"

1131 },

1132 "draft-a-spec-by": {

1133 title: "通过采访起草规范",

1134 teaches: "要求被采访而不是自己编写规范。Claude 提出结构化问题,直到需求完成,然后将结果写入文件。",

1135 next: "将你的采访问题保存为 `/spec` 技能,以便每个规范都以相同的方式开始"

1136 },

1137 "turn-a-meeting-into": {

1138 title: "将会议转变为工单",

1139 teaches: "跳过转录步骤。Claude 从非结构化输入中提取行动项,并通过 [MCP](/zh-CN/mcp) 直接将其写入你的跟踪器,所以你审查工单,而不是转录。",

1140 next: "将此保存为 `/tickets` 技能"

1141 },

1142 "map-edge-cases-before": {

1143 title: "在构建前映射边界情况",

1144 teaches: "要求缺少什么,而不是有什么。Claude 列出快乐路径设计倾向于跳过的错误状态、空状态和边界情况。"

1145 },

1146 "turn-a-mockup-into": {

1147 title: "将模型转变为工作原型",

1148 teaches: "可点击的原型回答静态模型无法回答的问题。将工作代码交给工程部门,而不是在文档中解释交互。"

1149 },

1150 "implement-from-a-screenshot": {

1151 title: "从屏幕截图实现并自检",

1152 teaches: "这给 Claude 一个验证循环:它呈现、与源图像比较,并迭代,无需你指出每个差距。",

1153 next: "使用 `/goal` 让 Claude 继续迭代,直到屏幕截图匹配"

1154 },

1155 "follow-an-existing-pattern": {

1156 title: "遵循现有模式",

1157 teaches: "指向你已经喜欢的代码。没有参考,Claude 默认为一般最佳实践。有了参考,它匹配你的代码库实际使用的约定。",

1158 next: "要求 Claude 将其遵循的模式写入 `CLAUDE.md`,以便未来会话无需参考即可匹配它"

1159 },

1160 "add-a-small-well": {

1161 title: "添加一个小的、定义明确的功能",

1162 teaches: "说明输入和输出,而不是如何构建它。Claude 找到类似代码的位置并在其旁边添加你的代码。"

1163 },

1164 "build-a-small-internal": {

1165 title: "从头开始构建一个小的内部工具",

1166 teaches: "你不需要项目、框架或构建步骤。描述工具并要求 Claude 打开它,以便你立即看到它工作。"

1167 },

1168 "work-an-issue-end": {

1169 title: "端到端处理问题",

1170 teaches: "给出问题编号,而不是摘要。Claude 自己读取完整工单,所以你会忘记提及的需求会通过,它在报告前验证更改。"

1171 },

1172 "find-and-update-copy": {

1173 title: "在代码库中查找和更新副本",

1174 teaches: "要求变体并说出要跳过的内容。Claude 找到字面搜索会遗漏的措辞,并保持测试夹具和历史不变,所以你只审查用户实际看到的副本。"

1175 },

1176 "draft-from-past-examples": {

1177 title: "从过去的例子起草文档",

1178 teaches: "指向已完成工作的文件夹,而不是描述你的风格。Claude 从你已经发布的内容学习结构和声音,所以第一稿读起来像你的。",

1179 next: "将声音保存为技能,以便每个草稿都从那里开始"

1180 },

1181 "write-tests-run-them": {

1182 title: "编写测试、运行它们、修复失败",

1183 teaches: "一起要求编写、运行和修复,以便 Claude 迭代而无需停止以获取说明。",

1184 next: "运行 `/init` 以便 Claude 自动学习你的测试命令"

1185 },

1186 "drive-implementation-from-tests": {

1187 title: "从测试驱动实现",

1188 teaches: "测试驱动开发:测试定义工作何时完成,Claude 迭代实现直到它们通过。"

1189 },

1190 "fill-gaps-from-a": {

1191 title: "从覆盖率报告填补空白",

1192 teaches: "指向覆盖率报告而不是猜测什么是未测试的。Claude 读取实际数字并为最需要的文件编写测试。",

1193 next: "将此设置为 `/goal`,以便 Claude 继续编写测试,直到覆盖率达到目标"

1194 },

1195 "port-code-between-languages": {

1196 title: "将代码移植到另一种语言",

1197 teaches: "说出要保留的内容,而不仅仅是目标语言。命名必须保持相同的 API 或行为给 Claude 一个合同来检查端口。"

1198 },

1199 "generate-docs-for-code": {

1200 title: "为未记录的代码生成文档",

1201 teaches: "命名范围和格式。Claude 找到缺少的内容并匹配文件中已有的注释风格,所以新文档读起来像其余部分。"

1202 },

1203 "migrate-a-pattern-across": {

1204 title: "在代码库中迁移模式",

1205 teaches: "描述旧模式和新模式。要求 Claude 首先识别每个地方意味着调用站点在响应中列出,所以你可以检查没有遗漏。"

1206 },

1207 "optimize-against-a-measurable": {

1208 title: "针对可测量目标进行优化",

1209 teaches: "说明指标和目标给 Claude 一个明确的完成定义。",

1210 next: "将此设置为 `/goal`,以便 Claude 继续测量和迭代,直到达到数字"

1211 },

1212 "fix-a-precise-visual": {

1213 title: "修复精确的视觉错误",

1214 teaches: "精确的视觉反馈得到精确的修复。说明确切的元素、测量和视口。",

1215 next: "添加预览工具,以便 Claude 自己截图并验证修复"

1216 },

1217 "review-your-changes-before": {

1218 title: "在提交前审查你的更改",

1219 teaches: "在问题仍然便宜时捕获它们。Claude 完整读取更改的文件,而不仅仅是差异行,所以它发现快速自审会遗漏的问题。",

1220 next: "运行 `/review` 以在一个命令中进行相同的检查"

1221 },

1222 "review-a-pull-request": {

1223 title: "审查拉取请求",

1224 teaches: "Claude 在整个代码库的背景下审查,而不仅仅是差异。它读取更改的代码和它调用的内容,所以它捕获仅差异审查会遗漏的问题。",

1225 next: "使用代码审查为每个 PR 打开此功能"

1226 },

1227 "review-infrastructure-changes-before": {

1228 title: "在应用前审查基础设施更改",

1229 teaches: "计划输出密集且难以扫描。粘贴它会得到一个关于实际将要更改的内容的纯文本摘要,然后再应用它。"

1230 },

1231 "run-a-security-review": {

1232 title: "使用子代理运行安全审查",

1233 teaches: "[子代理](/zh-CN/sub-agents)在其自己的上下文窗口中运行审计并报告回摘要,所以长安全审查不会填满你的主会话。内置的通用子代理无需额外设置即可处理此问题。",

1234 next: "设置一个专用的安全审查子代理,你的整个团队都可以使用"

1235 },

1236 "review-content-before-sending": {

1237 title: "在正式审查前捕获问题",

1238 teaches: "在人类花时间之前获得第一遍。命名你想检查的关注点,以便审查是有针对性的,然后修复它找到的内容并发送更清洁的草稿。",

1239 next: "将你的审查清单捕获为你的整个团队可以运行的技能"

1240 },

1241 "course-correct-a-wrong": {

1242 title: "纠正错误的方法",

1243 teaches: "命名 Claude 遗漏的约束,而不仅仅是它是错误的。具体的原因给 Claude 一个具体的约束来满足重试,而不是再次猜测。",

1244 next: "按 `Esc` 两次打开倒带菜单并恢复代码和对话,以便重试从干净开始"

1245 },

1246 "narrow-the-scope-of": {

1247 title: "缩小更改的范围",

1248 teaches: "当方向正确但更改过于宽泛时,要求 Claude 保留其中一部分而不是倒带所有内容。说明的边界使小修复不会变成重构。"

1249 },

1250 "turn-a-correction-into": {

1251 title: "将更正转变为规则",

1252 teaches: "聊天中的更正不与你的团队共享。项目的 [CLAUDE.md](/zh-CN/memory) 中的规则在你提交后共享,Claude 在每个会话开始时读取它。",

1253 next: "打开 `/memory` 来审查 Claude 写了什么"

1254 },

1255 "resolve-merge-conflicts": {

1256 title: "解决合并冲突",

1257 teaches: "说出你想要的状态,而不是要保留哪些标记。要求推理使合并可审查,而不是黑盒。"

1258 },

1259 "commit-with-a-generated": {

1260 title: "使用生成的消息提交",

1261 teaches: "让 Claude 从差异中推导消息。它匹配你的存储库的现有提交风格。"

1262 },

1263 "open-a-pull-request": {

1264 title: "从工单打开拉取请求",

1265 teaches: "跳过跟踪器、编辑器和 GitHub 之间的上下文切换。一个提示词读取规范、进行更改并打开 PR。"

1266 },

1267 "draft-release-notes-from": {

1268 title: "从 git 历史起草发布说明",

1269 teaches: "给出两个参考点和你想要的结构。Claude 读取它们之间的提交日志并起草你可以编辑的更改日志。",

1270 next: "将此保存为 `/changelog` 技能"

1271 },

1272 "write-a-ci-workflow": {

1273 title: "编写 CI 工作流",

1274 teaches: "描述它应该何时运行以及它应该做什么;YAML 为你生成,与你的项目的构建和测试命令匹配。"

1275 },

1276 "find-and-fix-a": {

1277 title: "找到并修复失败的测试",

1278 teaches: "描述症状;你不需要知道哪个文件被破坏。Claude 运行测试以查看失败,将其追踪到源中,并修复它。"

1279 },

1280 "investigate-a-reported-error": {

1281 title: "调查报告的错误",

1282 teaches: "描述症状和位置;Claude 读取相关代码路径并追踪可能的原因。如果你有堆栈跟踪或日志,请粘贴它们。",

1283 next: "在你的运行手册中放置一个深层链接,用此提示词预填打开 Claude"

1284 },

1285 "fix-a-build-error": {

1286 title: "在根处修复构建错误",

1287 teaches: "要求根本原因和验证可防止表面级补丁抑制错误而不修复它。"

1288 },

1289 "investigate-a-production-incident": {

1290 title: "调查生产事件",

1291 teaches: "列出要关联的证据来源,而不是要采取的步骤。Claude 一起读取日志、git 历史和配置以缩小原因。",

1292 next: "通过 MCP 连接 Sentry 或你的日志存储"

1293 },

1294 "query-logs-in-plain": {

1295 title: "用纯英文查询日志",

1296 teaches: "问问题而不是编写 SQL。Claude 构建查询,针对你连接的日志运行它,并显示查询和结果,以便你可以检查运行了什么。"

1297 },

1298 "diagnose-from-a-console": {

1299 title: "从控制台屏幕截图诊断",

1300 teaches: "云控制台向你显示问题,但不显示修复它的命令。Claude 读取屏幕截图并将仪表板转换为要运行的 kubectl、gcloud 或 aws 命令。"

1301 },

1302 "analyze-a-data-file": {

1303 title: "分析数据文件",

1304 teaches: "一次性问题不需要一次性脚本。指向项目文件夹中的文件,Claude 直接读取它,找到模式,并将输出写入你要求的位置。",

1305 next: "通过 MCP 连接数据源,而不是导出文件"

1306 },

1307 "generate-variations-from-performance": {

1308 title: "从性能数据生成变体",

1309 teaches: "在开始时说明约束,以便生成保持在限制内。Claude 读取指标,选择要替换的内容,并生成适合的替代方案。",

1310 next: "通过 MCP 连接广告平台,而不是导出文件"

1311 },

1312 "turn-a-recurring-task": {

1313 title: "将重复任务转变为技能",

1314 teaches: "命名步骤一次;将其重用为命令。Claude 编写任何团队成员都可以运行的 [技能](/zh-CN/skills)。"

1315 },

1316 "add-a-hook-for": {

1317 title: "为重复行为添加钩子",

1318 teaches: "钩子使行为自动化,而不是你必须记住要求的东西。描述触发器和操作,Claude 编写 [钩子](/zh-CN/hooks) 配置。"

1319 },

1320 "connect-a-tool-with": {

1321 title: "使用 MCP 连接工具",

1322 teaches: "连接源一次,而不是每个会话粘贴数据。在 [MCP](/zh-CN/mcp) 设置后,当你询问它时,Claude 直接从工具读取。"

1323 },

1324 "capture-what-to-remember": {

1325 title: "捕获下次要记住的内容",

1326 teaches: "在你忘记之前询问。Claude 知道它在这个会话中必须弄清楚什么,并提议 [CLAUDE.md](/zh-CN/memory) 条目,以便下一个会话以该上下文开始。"

1327 }

1328};

1329 

1330<PromptLibrary text={text} labels={labels} tagLabels={tagLabels} phaseLabels={phaseLabels} sourceLabels={sourceLabels} catLabels={catLabels} />

1331 

13<h2 id="what-makes-these-prompts-work">1332<h2 id="what-makes-these-prompts-work">

14 这些提示词为什么有效1333 这些提示词为什么有效

15</h2>1334</h2>


71 相关资源1390 相关资源

72</h2>1391</h2>

73 1392 

74此页面上的提示词是起点。一旦一个对你的项目有效,下一步是使其可重复:将其保存为 [技能](/zh-CN/skills),以便团队中的任何人都可以将其作为 `/command` 运行,并在 [CLAUDE.md](/zh-CN/memory) 中记录 Claude 学到的约定,以便每个会话都以该上下文开始,而不是 Claude 重新学习它。对于更大或更危险的更改,[计划模式](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)在任何编辑发生前显示文件列表。1393此页面上的提示词是起点。一旦一个对你的项目有效,下一步是使其可重复:将其保存为 [技能](/zh-CN/skills),以便团队中的任何人都可以将其作为 `/command` 运行,并在 [CLAUDE.md](/zh-CN/memory) 中记录 Claude 学到的约定,以便每个会话都以该上下文开始,而不是 Claude 重新学习它。对于更大或更危险的更改,[Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 在任何编辑发生前显示文件列表。

75 1394 

76如果你在团队中引入 Claude Code,请参阅[管理](/zh-CN/admin-setup)以获取托管设置和策略,以及[成本和使用](/zh-CN/costs)以了解此工作如何在你的计划上计费。1395如果你在团队中引入 Claude Code,请参阅[管理](/zh-CN/admin-setup)以获取托管设置和策略,以及[成本和使用](/zh-CN/costs)以了解此工作如何在你的计划上计费。

quickstart.md +24 −17

Details

118claude118claude

119```119```

120 120 

121您将看到 Claude Code 欢迎屏幕其中包含您的会话信息最近的对话和最新更新。输入 `/help` 查看可用命令,或输入 `/resume` 继续之前的对话。121您将看到 Claude Code 提示符其中显示版本当前模型和上方显示的工作目录。输入 `/help` 查看可用命令,或输入 `/resume` 继续之前的对话。

122 122 

123<Tip>123<Tip>

124 登录后(步骤 2),您的凭证将存储在您的系统上。在[凭证管理](/zh-CN/authentication#credential-management)中了解更多信息。124 登录后(步骤 2),您的凭证将存储在您的系统上。在[凭证管理](/zh-CN/authentication#credential-management)中了解更多信息。


131让我们从理解您的代码库开始。尝试以下命令之一:131让我们从理解您的代码库开始。尝试以下命令之一:

132 132 

133```text theme={null}133```text theme={null}

134这个项目做什么?134what does this project do?

135```135```

136 136 

137Claude 将分析您的文件并提供摘要。您也可以提出更具体的问题:137Claude 将分析您的文件并提供摘要。您也可以提出更具体的问题:

138 138 

139```text theme={null}139```text theme={null}

140这个项目使用什么技术?140what technologies does this project use?

141```141```

142 142 

143```text theme={null}143```text theme={null}

144主入口点在哪里?144where is the main entry point?

145```145```

146 146 

147```text theme={null}147```text theme={null}

148解释文件夹结构148explain the folder structure

149```149```

150 150 

151您也可以询问 Claude 关于其自身功能的问题:151您也可以询问 Claude 关于其自身功能的问题:

152 152 

153```text theme={null}153```text theme={null}

154Claude Code 能做什么?154what can Claude Code do?

155```155```

156 156 

157```text theme={null}157```text theme={null}

158我如何在 Claude Code 中创建自定义 skills158how do I create custom skills in Claude Code?

159```159```

160 160 

161```text theme={null}161```text theme={null}

162Claude Code 可以与 Docker 一起工作吗?162can Claude Code work with Docker?

163```163```

164 164 

165<Note>165<Note>


249**重构代码**249**重构代码**

250 250 

251```text theme={null}251```text theme={null}

252重构身份验证模块以使用 async/await 而不是回调252refactor the authentication module to use async/await instead of callbacks

253```253```

254 254 

255**编写测试**255**编写测试**

256 256 

257```text theme={null}257```text theme={null}

258为计算器函数编写单元测试258write unit tests for the calculator functions

259```259```

260 260 

261**更新文档**261**更新文档**

262 262 

263```text theme={null}263```text theme={null}

264使用安装说明更新 README264update the README with installation instructions

265```265```

266 266 

267**代码审查**267**代码审查**

268 268 

269```text theme={null}269```text theme={null}

270审查我的更改并建议改进270review my changes and suggest improvements

271```271```

272 272 

273<Tip>273<Tip>


278 基本命令278 基本命令

279</h2>279</h2>

280 280 

281以下是日常使用中最重要的命令281以下是日常使用中最重要的命令。Shell 命令从您的终端运行以启动或恢复 Claude Code。会话命令在 Claude Code 启动后在其内部运行。

282 

283**Shell 命令**

282 284 

283| 命令 | 功能 | 示例 |285| 命令 | 功能 | 示例 |

284| ------------------- | -------------- | ----------------------------------- |286| ------------------- | ------------- | ----------------------------------- |

285| `claude` | 启动交互模式 | `claude` |287| `claude` | 启动交互模式 | `claude` |

286| `claude "task"` | 运行一次性任务 | `claude "fix the build error"` |288| `claude "task"` | 运行一次性任务 | `claude "fix the build error"` |

287| `claude -p "query"` | 运行一次性查询,然后退出 | `claude -p "explain this function"` |289| `claude -p "query"` | 运行一次性查询,然后退出 | `claude -p "explain this function"` |

288| `claude -c` | 在当前目录中继续最近的对话 | `claude -c` |290| `claude -c` | 在当前目录中继续最近的对话 | `claude -c` |

289| `claude -r` | 恢复之前的对话 | `claude -r` |291| `claude -r` | 恢复之前的对话 | `claude -r` |

292 

293**会话命令**

294 

295| 命令 | 功能 | 示例 |

296| ---------------- | -------------- | -------- |

290| `/clear` | 清除对话历史 | `/clear` |297| `/clear` | 清除对话历史 | `/clear` |

291| `/help` | 显示可用命令 | `/help` |298| `/help` | 显示可用命令 | `/help` |

292| `exit` 或 Ctrl+D | 退出 Claude Code | `exit` |299| `/exit` 或 Ctrl+D | 退出 Claude Code | `/exit` |

293 300 

294有关完整的命令列表,请参阅 [CLI 参考](/zh-CN/cli-reference)。301有关完整的 shell 命令列表,请参阅 [CLI 参考](/zh-CN/cli-reference),有关完整的会话命令列表,请参阅 [命令参考](/zh-CN/commands)

295 302 

296<h2 id="pro-tips-for-beginners">303<h2 id="pro-tips-for-beginners">

297 初学者专业提示304 初学者专业提示


336 </Accordion>343 </Accordion>

337</AccordionGroup>344</AccordionGroup>

338 345 

339<h2 id="what-s-next">346<h2 id="whats-next">

340 接下来呢?347 接下来呢?

341</h2>348</h2>

342 349 

remote-control.md +21 −10

Details

93 /remote-control My Project93 /remote-control My Project

94 ```94 ```

95 95 

96 这启动一个 Remote Control 会话,该会话继承您当前的对话历史记录,并显示一个会话 URL 和 QR 码,您可以使用它从[另一个设备连接](#connect-from-another-device)`--verbose`、`--sandbox` 和 `--no-sandbox` 标志不适用于此命令。96 这启动一个 Remote Control 会话,该会话继承您当前的对话历史记录。

97 

98 此命令不支持 `--verbose`、`--sandbox` 和 `--no-sandbox` 标志。

97 </Tab>99 </Tab>

98 100 

99 <Tab title="VS Code">101 <Tab title="VS Code">


111 </Tab>113 </Tab>

112</Tabs>114</Tabs>

113 115 

116<h3 id="check-connection-status">

117 检查连接状态

118</h3>

119 

120在交互式终端会话中,当连接处于活动状态时,`/rc active` 指示器位于输入框下方的页脚中,如果终端太窄无法容纳它,则隐藏。指示器文本是指向 claude.ai 上会话的链接。使用向下箭头键选择它并按 Enter,或再次运行 `/remote-control`,打开状态面板,其中包含会话 URL 和 QR 码,您可以使用它从[另一个设备连接](#connect-from-another-device)。

121 

122如果连接失败,指示器变为红色并显示 `/rc failed`。使用向下箭头键选择它并按 Enter 查看失败原因和关闭选项,或再次运行 `/remote-control` 以重试。

123 

114<h3 id="connect-from-another-device">124<h3 id="connect-from-another-device">

115 从另一个设备连接125 从另一个设备连接

116</h3>126</h3>


1283. 现有对话历史记录中的最后一条有意义的消息1383. 现有对话历史记录中的最后一条有意义的消息

1294. 自动生成的名称,如 `myhost-graceful-unicorn`,其中 `myhost` 是您的机器的主机名或您使用 `--remote-control-session-name-prefix` 设置的前缀1394. 自动生成的名称,如 `myhost-graceful-unicorn`,其中 `myhost` 是您的机器的主机名或您使用 `--remote-control-session-name-prefix` 设置的前缀

130 140 

131如果您没有设置显式名称,一旦您发送提示,标题会更新以反映您的提示。从 claude.ai 或 Claude 应用重命名会话也会更新在 `claude --resume` 中显示的本地标题。141如果您没有设置显式名称,一旦您发送提示,标题会更新以反映您的提示。{/* min-version: 2.1.176 */}Claude Code v2.1.176 开始,自动生成的标题与您的对话语言相匹配,或与配置的 [`language`](/zh-CN/settings#available-settings) 设置相匹配。从 claude.ai 或 Claude 应用重命名会话也会更新在 `claude --resume` 中显示的本地标题。

132 142 

133如果环境已经有活动会话,您将被询问是否继续它或启动新会话。143如果环境已经有活动会话,您将被询问是否继续它或启动新会话。

134 144 


164 174 

165当 Remote Control 处于活动状态时,Claude 可以向您的手机发送推送通知。175当 Remote Control 处于活动状态时,Claude 可以向您的手机发送推送通知。

166 176 

167Claude 决定何时推送。它通常在长时间运行的任务完成或需要您的决定来继续时发送一个。您也可以在提示中请求推送,例如 `notify me when the tests finish`。除了下面的开/关切换外,没有按事件配置。177Claude 决定何时推送。它通常在长时间运行的任务完成或需要您的决定来继续时发送一个。您也可以在提示中请求推送,例如 `notify me when the tests finish`。除了下面的两个开/关切换外,没有按事件配置。

168 178 

169<Note>179<Note>

170 移动推送通知需要 Claude Code v2.1.110 或更高版本。180 移动推送通知需要 Claude Code v2.1.110 或更高版本。


186 </Step>196 </Step>

187 197 

188 <Step title="在 Claude Code 中启用推送">198 <Step title="在 Claude Code 中启用推送">

189 在您的终端中,运行 `/config` 并启用**当 Claude 决定时推送**。199 在您的终端中,运行 `/config` 并启用**当 Claude 决定时推送**以获取主动通知,启用**当需要操作时推送**以获取权限提示和问题,或两者都启用

190 </Step>200 </Step>

191</Steps>201</Steps>

192 202 


204* **本地进程必须保持运行**:Remote Control 作为本地进程运行。如果您关闭终端、退出 VS Code 或以其他方式停止 `claude` 进程,会话结束。214* **本地进程必须保持运行**:Remote Control 作为本地进程运行。如果您关闭终端、退出 VS Code 或以其他方式停止 `claude` 进程,会话结束。

205* **扩展网络中断**:如果您的机器处于唤醒状态但无法在大约 10 分钟以上的时间内到达网络,会话超时并且进程退出。再次运行 `claude remote-control` 以启动新会话。215* **扩展网络中断**:如果您的机器处于唤醒状态但无法在大约 10 分钟以上的时间内到达网络,会话超时并且进程退出。再次运行 `claude remote-control` 以启动新会话。

206* **Ultraplan 断开 Remote Control**:启动 [ultraplan](/zh-CN/ultraplan) 会话会断开任何活动的 Remote Control 会话,因为两个功能都占据 claude.ai/code 界面,一次只能连接一个。216* **Ultraplan 断开 Remote Control**:启动 [ultraplan](/zh-CN/ultraplan) 会话会断开任何活动的 Remote Control 会话,因为两个功能都占据 claude.ai/code 界面,一次只能连接一个。

207* **某些命令仅限本地**:在终端中打开交互式选择器的命令,例如 `/mcp`、`/plugin` 或 `/resume`,仅从本地 CLI 工作。生成文本输出的命令,包括 `/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`,可从移动和网络工作。217* **某些命令仅限本地**:在终端中打开交互式选择器的命令,例如 `/plugin` 或 `/resume`,仅从本地 CLI 工作。生成文本输出的命令,包括 `/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`,可从移动和网络工作。{/* min-version: 2.1.166 */}从 v2.1.166 开始,`/mcp` 也可从移动和网络工作:它返回服务器状态的文本摘要而不是打开选择器,并接受与本地 CLI 相同的 `reconnect`、`enable` 和 `disable` [子命令](/zh-CN/commands#all-commands),但有一个区别:从移动和网络,`/mcp reconnect` 不带服务器名称会重新连接每个已失败或需要身份验证的服务器,而本地 CLI 需要为 `reconnect` 指定服务器名称。

208 218 

209<h2 id="troubleshooting">219<h2 id="troubleshooting">

210 故障排除220 故障排除


232 "Remote Control 尚未为您的账户启用"242 "Remote Control 尚未为您的账户启用"

233</h3>243</h3>

234 244 

235在存在某些环境变量的情况下资格检查可能会失败:245Remote Control 推出尚未到达您的账户或您的缓存权利已过期。如果您最近更改了计划,请运行 `claude auth logout` 然后 `claude auth login` 以刷新它们。运行 `claude doctor` 以查看哪个单独的资格检查失败。环境变量冲突、无法到达的检查和组织策略各自产生自己的消息,因此此错误意味着推出门本身。

236 246 

237* `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 或 `DISABLE_TELEMETRY`:取消设置它们并重试。247<h3 id="couldn’t-verify-remote-control-eligibility">

238* `CLAUDE_CODE_USE_BEDROCK`、`CLAUDE_CODE_USE_VERTEX` 或 `CLAUDE_CODE_USE_FOUNDRY`:Remote Control 需要 claude.ai 身份验证,不适用于第三方提供商。248 "无法验证 Remote Control 资格"

249</h3>

239 250 

240如果这些都没有设置请运行 `/logout` 然后 `/login` 以刷新251Claude Code 无法到达功能标志服务以检查是否为您的账户启用了 Remote Control通常是因为您离线或代理阻止了请求。一旦您有网络访问权限,请重试,或运行 `claude doctor` 以获取详细信息。相关消息"无法验证您的组织的 Remote Control 策略"具有相同的原因和相同的修复这两条消息都在 v2.1.178 中添加。

241 252 

242<h3 id="remote-control-is-disabled-by-your-organization-s-policy">253<h3 id="remote-control-is-disabled-by-your-organizations-policy">

243 "Remote Control 被您的组织的策略禁用"254 "Remote Control 被您的组织的策略禁用"

244</h3>255</h3>

245 256 

routines.md +1 −1

Details

423 423 

424无论 CLI 如何配置,您始终可以在 [claude.ai/code/routines](https://claude.ai/code/routines) 处创建和管理例程。424无论 CLI 如何配置,您始终可以在 [claude.ai/code/routines](https://claude.ai/code/routines) 处创建和管理例程。

425 425 

426<h3 id="routines-are-disabled-by-your-organization-s-policy">426<h3 id="routines-are-disabled-by-your-organizations-policy">

427 "Routines 被您的组织的策略禁用"427 "Routines 被您的组织的策略禁用"

428</h3>428</h3>

429 429 

Details

50 50 

51| 您想要 | 开始使用 |51| 您想要 | 开始使用 |

52| :------------------------------------------------------- | :-------------------------------------------------------------------------------------------- |52| :------------------------------------------------------- | :-------------------------------------------------------------------------------------------- |

53| 在您自己的机器上日常工作期间减少权限提示 | [Sandboxed Bash tool](/zh-CN/sandboxing),使用 `/sandbox` 启用 |53| 在您自己的机器上日常工作期间减少权限提示 | [sandboxed Bash tool](/zh-CN/sandboxing),使用 `/sandbox` 启用 |

54| 让 Claude 使用 `--dangerously-skip-permissions` 或自动模式无人值守工作 | 预配置的 [dev container](/zh-CN/devcontainer)、任何容器或虚拟机,或 [sandbox runtime](#sandbox-runtime) |54| 让 Claude 使用 `--dangerously-skip-permissions` 或自动模式无人值守工作 | 预配置的 [dev container](/zh-CN/devcontainer)、任何容器或虚拟机,或 [sandbox runtime](#sandbox-runtime) |

55| 隔离 MCP 服务器和 hooks 以及 Bash,不使用 Docker | Sandbox runtime |55| 隔离 MCP 服务器和 hooks 以及 Bash,不使用 Docker | sandbox runtime |

56| 在不受信任的存储库上工作 | 专用虚拟机,或 [Claude Code on the web](/zh-CN/claude-code-on-the-web)(如果您有 Claude 订阅和连接的 GitHub 账户) |56| 在不受信任的存储库上工作 | 专用虚拟机,或 [Claude Code on the web](/zh-CN/claude-code-on-the-web)(如果您有 Claude 订阅和连接的 GitHub 账户) |

57| 在团队中标准化沙箱环境 | 预配置的 [dev container](/zh-CN/devcontainer),复制到您的存储库中 |57| 在团队中标准化沙箱环境 | 预配置的 [dev container](/zh-CN/devcontainer),复制到您的存储库中 |

58| 从没有本地设置的设备使用 Claude Code | [Claude Code on the web](/zh-CN/claude-code-on-the-web),需要 Claude 订阅和连接的 GitHub 账户 |58| 从没有本地设置的设备使用 Claude Code | [Claude Code on the web](/zh-CN/claude-code-on-the-web),需要 Claude 订阅和连接的 GitHub 账户 |


65 65 

66[Permission modes](/zh-CN/permission-modes) 决定工具调用是否运行以及是否首先提示您。隔离限制命令运行后可以访问的内容。两者协同工作:当权限模式允许操作在不询问您的情况下运行时,隔离边界限制这些操作可以到达的内容。66[Permission modes](/zh-CN/permission-modes) 决定工具调用是否运行以及是否首先提示您。隔离限制命令运行后可以访问的内容。两者协同工作:当权限模式允许操作在不询问您的情况下运行时,隔离边界限制这些操作可以到达的内容。

67 67 

68`--dangerously-skip-permissions` 完全删除按操作审查,因此隔离边界是唯一限制 Claude 可以做什么的东西。始终在容器、虚拟机或 [sandbox runtime](#sandbox-runtime) 内运行它,以便文件工具、MCP 服务器和 hooks 也在边界内。68`--dangerously-skip-permissions` 删除除了显式 [ask rules](/zh-CN/permissions#manage-permissions) 之外的按操作审查,因此隔离边界是唯一限制 Claude 可以做什么的东西。始终在容器、虚拟机或 [sandbox runtime](#sandbox-runtime) 内运行它,以便文件工具、MCP 服务器和 hooks 也在边界内。

69 69 

70[Auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 用审查操作的分类器替换提示,并阻止超出请求范围、针对无法识别的基础设施或似乎由 Claude 读取的恶意内容驱动的操作。分类器是按操作控制,而不是隔离边界,因此隔离边界仍然为无人值守运行添加纵深防御,并且不像 `--dangerously-skip-permissions` 那样是必需的。70[Auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 用审查操作的分类器替换提示,并阻止超出请求范围、针对无法识别的基础设施或似乎由 Claude 读取的恶意内容驱动的操作。分类器是按操作控制,而不是隔离边界,因此隔离边界仍然为无人值守运行添加纵深防御,并且不像 `--dangerously-skip-permissions` 那样是必需的。

71 71 

72[Sandboxed Bash tool](#sandboxed-bash-tool) 本身仅限制 Bash,因此对于任一模式的完全无人值守运行都不足够。您可以分层方法:在容器或虚拟机内运行沙箱化 Bash 工具可在外部环境边界之上为您提供操作系统级命令限制。有关 Bash 沙箱本身如何与权限规则和模式交互的信息,请参阅 [How sandboxing relates to permissions and permission modes](/zh-CN/sandboxing#how-sandboxing-relates-to-permissions-and-permission-modes)。72[sandboxed Bash tool](#sandboxed-bash-tool) 本身仅限制 Bash,因此对于任一模式的完全无人值守运行都不足够。您可以分层方法:在容器或虚拟机内运行沙箱化 Bash 工具可在外部环境边界之上为您提供操作系统级命令限制。有关 Bash 沙箱本身如何与权限规则和模式交互的信息,请参阅 [How sandboxing relates to permissions and permission modes](/zh-CN/sandboxing#how-sandboxing-relates-to-permissions-and-permission-modes)。

73 73 

74<h2 id="sandboxed-bash-tool">74<h2 id="sandboxed-bash-tool">

75 Sandboxed Bash tool75 Sandboxed Bash tool

sandboxing.md +18 −15

Details

25 25 

26沙箱内置于 Claude Code 中,在 macOS、Linux 和 WSL2 上运行。不支持原生 Windows。在 Windows 上,在 WSL2 发行版内运行 Claude Code。26沙箱内置于 Claude Code 中,在 macOS、Linux 和 WSL2 上运行。不支持原生 Windows。在 Windows 上,在 WSL2 发行版内运行 Claude Code。

27 27 

28在 macOS 上,无需安装任何内容:沙箱使用内置的 Seatbelt 框架。在 Linux 和 WSL2 上,沙箱依赖两个包,详见 [Set up Linux and WSL2](#set-up-linux-and-wsl2)。即使你还没有安装它们,你也可以从 `/sandbox` 开始,因为它的面板显示是否缺少任何内容。28在 macOS 上,无需安装任何内容:沙箱使用内置的 Seatbelt 框架。在 Linux 和 WSL2 上,沙箱依赖两个包,详见 [设置 Linux WSL2](#set-up-linux-and-wsl2)。即使你还没有安装它们,你也可以从 `/sandbox` 开始,因为它的面板显示是否缺少任何内容。

29 29 

30<Steps>30<Steps>

31 <Step title="运行 /sandbox">31 <Step title="运行 /sandbox">


41 * **Overrides**:选择在沙箱下失败的命令是否可以回退到运行非沙箱化。这是 [`allowUnsandboxedCommands`](/zh-CN/settings#sandbox-settings) 设置41 * **Overrides**:选择在沙箱下失败的命令是否可以回退到运行非沙箱化。这是 [`allowUnsandboxedCommands`](/zh-CN/settings#sandbox-settings) 设置

42 * **Config**:查看已解析的沙箱设置42 * **Config**:查看已解析的沙箱设置

43 43 

44 如果面板仅显示 Dependencies 选项卡,则缺少必需的包。按照 [Set up Linux and WSL2](#set-up-linux-and-wsl2) 中的说明安装它,重启 Claude Code,然后再次运行 `/sandbox`。44 如果面板仅显示 Dependencies 选项卡,则缺少必需的包。按照 [设置 Linux WSL2](#set-up-linux-and-wsl2) 中的说明安装它,重启 Claude Code,然后再次运行 `/sandbox`。

45 </Step>45 </Step>

46 46 

47 <Step title="选择一个模式">47 <Step title="选择一个模式">

48 在 Mode 选项卡上,选择自动允许或常规权限。自动允许在不提示的情况下运行沙箱化命令,常规权限即使在命令沙箱化时也保持常规权限提示。有关在自动允许模式下仍会提示哪些命令,请参阅 [Sandbox modes](#sandbox-modes)。48 在 Mode 选项卡上,选择自动允许或常规权限。自动允许在不提示的情况下运行沙箱化命令,常规权限即使在命令沙箱化时也保持常规权限提示。有关在自动允许模式下仍会提示哪些命令,请参阅 [沙箱模式](#sandbox-modes)。

49 </Step>49 </Step>

50 50 

51 <Step title="运行 Bash 命令">51 <Step title="运行 Bash 命令">

52 要求 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令只能写入工作目录。命令第一次需要新的网络域时,Claude Code 会提示批准。52 要求 Claude 运行一个命令,例如构建或测试套件。默认情况下,沙箱内的命令只能写入工作目录和会话临时目录。命令第一次需要新的网络域时,Claude Code 会提示批准。

53 53 

54 无法沙箱化运行的命令会回退到常规权限流程。要扩大或缩小这些边界,请参阅 [Configure sandboxing](#configure-sandboxing)。54 无法沙箱化运行的命令会回退到常规权限流程。要扩大或缩小这些边界,请参阅 [配置沙箱](#configure-sandboxing)。

55 </Step>55 </Step>

56</Steps>56</Steps>

57 57 

58在面板中选择一个模式会写入你的项目的本地设置 `.claude/settings.local.json`,这些设置适用于当前项目,不会检入 git。要在所有项目中启用沙箱,请在 `~/.claude/settings.json` 的用户设置中将 [`sandbox.enabled`](/zh-CN/settings#sandbox-settings) 设置为 `true`。要为组织中的每个开发者强制执行沙箱,请使用 [managed settings](#enforce-sandboxing-with-managed-settings)。58在面板中选择一个模式会写入你的项目的本地设置 `.claude/settings.local.json`,这些设置适用于当前项目,不会检入 git。要在所有项目中启用沙箱,请在 `~/.claude/settings.json` 的用户设置中将 [`sandbox.enabled`](/zh-CN/settings#sandbox-settings) 设置为 `true`。要为组织中的每个开发者强制执行沙箱,请使用 [托管设置](#enforce-sandboxing-with-managed-settings)。

59 59 

60<Warning>60<Warning>

61 默认情况下,如果沙箱因缺少依赖项或不支持的平台而无法启动,Claude Code 会显示警告并在没有沙箱的情况下运行命令。要使其成为硬失败,请将 [`sandbox.failIfUnavailable`](/zh-CN/settings#sandbox-settings) 设置为 `true`。这适用于需要沙箱作为安全门的托管部署。61 默认情况下,如果沙箱因缺少依赖项或不支持的平台而无法启动,Claude Code 会显示警告并在没有沙箱的情况下运行命令。要使其成为硬失败,请将 [`sandbox.failIfUnavailable`](/zh-CN/settings#sandbox-settings) 设置为 `true`。这适用于需要沙箱作为安全门的托管部署。


128 128 

129Claude Code 提供两种沙箱模式:129Claude Code 提供两种沙箱模式:

130 130 

131**自动允许模式**:Bash 命令将尝试在沙箱内运行,并自动允许而无需权限。无法沙箱化的命令(例如需要访问非允许主机的网络访问的命令)会回退到常规权限流程,其中 Claude Code 检查你的 [permission rules](/zh-CN/permissions) 并为这些规则不允许的任何命令提示你。131**自动允许模式**:Bash 命令将尝试在沙箱内运行,并自动允许而无需权限。无法沙箱化的命令(例如需要访问非允许主机的网络访问的命令)会回退到常规权限流程,其中 Claude Code 检查你的 [权限规则](/zh-CN/permissions) 并为这些规则不允许的任何命令提示你。

132 132 

133即使在自动允许模式下,以下仍然适用:133即使在自动允许模式下,以下仍然适用:

134 134 

135* 显式 [deny rules](/zh-CN/permissions) 始终被尊重135* 显式 [拒绝规则](/zh-CN/permissions) 始终被尊重

136* 针对 `/`、你的主目录或其他关键系统路径的 `rm` 或 `rmdir` 命令仍会触发权限提示136* 针对 `/`、你的主目录或其他关键系统路径的 `rm` 或 `rmdir` 命令仍会触发权限提示

137* [Ask rules](/zh-CN/permissions) 适用于回退到常规权限流程的命令137* 内容范围的 [询问规则](/zh-CN/permissions)(如 `Bash(git push *)`)仍会强制提示,即使对于沙箱化命令

138* 裸 `Bash` 询问规则,或等效的 `Bash(*)` 形式,对于运行沙箱化的命令会被跳过;它仍然适用于回退到常规权限流程的命令

138 139 

139**常规权限模式**:所有 Bash 命令都通过常规权限流程,即使沙箱化也是如此。这提供了更多控制,但需要更多批准。140**常规权限模式**:所有 Bash 命令都通过常规权限流程,即使沙箱化也是如此。这提供了更多控制,但需要更多批准。

140 141 

141在两种模式中,沙箱都强制执行相同的文件系统和网络限制。区别仅在于沙箱化命令是自动批准还是需要明确权限。142在两种模式中,沙箱都强制执行相同的文件系统和网络限制。区别仅在于沙箱化命令是自动批准还是需要明确权限。

142 143 

144会话临时目录在沙箱内默认可写,与工作目录一起。Claude Code 为沙箱化命令设置 `$TMPDIR` 为此目录,因此写入临时文件的工具无需额外配置即可工作。非沙箱化命令继承你的 shell 的 `$TMPDIR` 不变,这意味着沙箱化和非沙箱化命令将 `$TMPDIR` 解析为不同的目录。要在两者之间传递临时文件,请改为在工作目录下写入它们。

145 

143某些命令根本无法在沙箱内运行,例如与其不兼容的工具或需要你未允许的主机的工具。与其让任务失败或要求你关闭沙箱,Claude Code 包括一个逃生舱:当命令因沙箱限制而失败时,Claude 分析失败,可能使用 `dangerouslyDisableSandbox` 参数重试命令。重试的命令在沙箱外运行,因此它通过常规权限流程进行,需要你的批准。146某些命令根本无法在沙箱内运行,例如与其不兼容的工具或需要你未允许的主机的工具。与其让任务失败或要求你关闭沙箱,Claude Code 包括一个逃生舱:当命令因沙箱限制而失败时,Claude 分析失败,可能使用 `dangerouslyDisableSandbox` 参数重试命令。重试的命令在沙箱外运行,因此它通过常规权限流程进行,需要你的批准。

144 147 

145你可以通过在 [sandbox settings](/zh-CN/settings#sandbox-settings) 中设置 `"allowUnsandboxedCommands": false` 来禁用此逃生舱。禁用时,`/sandbox` Overrides 选项卡显示为 **Strict sandbox mode**,`dangerouslyDisableSandbox` 参数被完全忽略,所有命令必须沙箱化运行或在 `excludedCommands` 中明确列出。148你可以通过在 [沙箱设置](/zh-CN/settings#sandbox-settings) 中设置 `"allowUnsandboxedCommands": false` 来禁用此逃生舱。禁用时,`/sandbox` Overrides 选项卡显示为 **严格沙箱模式**,`dangerouslyDisableSandbox` 参数被完全忽略,所有命令必须沙箱化运行或在 `excludedCommands` 中明确列出。

146 149 

147<Info>150<Info>

148 自动允许模式独立于你的权限模式设置工作。即使你不在"接受编辑"模式中,启用自动允许时沙箱化的 Bash 命令也会自动运行。这意味着在沙箱边界内修改文件的 Bash 命令将执行而不提示,即使文件编辑工具通常需要批准。151 自动允许模式独立于你的权限模式设置工作。即使你不在"接受编辑"模式中,启用自动允许时沙箱化的 Bash 命令也会自动运行。这意味着在沙箱边界内修改文件的 Bash 命令将执行而不提示,即使文件编辑工具通常需要批准。


154 157 

155通过 `settings.json` 文件自定义沙箱行为。有关完整的配置参考,请参阅 [Settings](/zh-CN/settings#sandbox-settings)。158通过 `settings.json` 文件自定义沙箱行为。有关完整的配置参考,请参阅 [Settings](/zh-CN/settings#sandbox-settings)。

156 159 

157默认情况下,沙箱化命令只能写入当前工作目录。如果子进程命令(如 `kubectl`、`terraform` 或 `npm`)需要在项目目录外写入,请使用 `sandbox.filesystem.allowWrite` 向特定路径授予访问权限:160默认情况下,沙箱化命令只能写入当前工作目录和会话临时目录。如果子进程命令(如 `kubectl`、`terraform` 或 `npm`)需要在这些目录外写入,请使用 `sandbox.filesystem.allowWrite` 向特定路径授予访问权限:

158 161 

159```json theme={null}162```json theme={null}

160{163{


209 212 

210沙箱化 Bash 工具将文件系统访问限制在特定目录:213沙箱化 Bash 工具将文件系统访问限制在特定目录:

211 214 

212* **默认写入行为**:对当前工作目录及其子目录的读写访问215* **默认写入行为**:对当前工作目录及其子目录的读写访问,加上 `$TMPDIR` 指向的会话临时目录

213* **默认读取行为**:对整个计算机的读取访问,除了某些被拒绝的目录。注意此默认仍允许读取凭证文件,例如 `~/.aws/credentials` 和 `~/.ssh/`。将它们添加到 `denyRead` 以阻止它们。216* **默认读取行为**:对整个计算机的读取访问,除了某些被拒绝的目录。注意此默认仍允许读取凭证文件,例如 `~/.aws/credentials` 和 `~/.ssh/`。将它们添加到 `denyRead` 以阻止它们。

214* **被阻止的访问**:无法在没有明确权限的情况下修改当前工作目录外的文件,包括 shell 配置文件(例如 `~/.bashrc`)和 `/bin/` 中的系统二进制文件217* **被阻止的访问**:无法在没有明确权限的情况下修改当前工作目录和会话临时目录外的文件,包括 shell 配置文件(例如 `~/.bashrc`)和 `/bin/` 中的系统二进制文件

215* **Git worktrees**:当工作目录是[链接的 git worktree](/zh-CN/worktrees) 时,沙箱还允许写入主存储库的共享 `.git` 目录,以便 `git commit` 等命令可以更新引用和索引。对该目录内的 `hooks/` 和 `config` 的写入仍然被拒绝。218* **Git worktrees**:当工作目录是[链接的 git worktree](/zh-CN/worktrees)时,沙箱还允许写入主存储库的共享 `.git` 目录,以便 `git commit` 等命令可以更新引用和索引。对该目录内的 `hooks/` 和 `config` 的写入仍然被拒绝。

216* **可配置**:通过设置定义自定义允许和拒绝的路径219* **可配置**:通过设置定义自定义允许和拒绝的路径

217 220 

218你可以使用设置中的 `sandbox.filesystem.allowWrite` 向其他路径授予写入访问权限。这些限制在操作系统级别强制执行,因此它们适用于所有子进程命令,包括 `kubectl`、`terraform` 和 `npm` 等工具,而不仅仅是 Claude 的文件工具。221你可以使用设置中的 `sandbox.filesystem.allowWrite` 向其他路径授予写入访问权限。这些限制在操作系统级别强制执行,因此它们适用于所有子进程命令,包括 `kubectl`、`terraform` 和 `npm` 等工具,而不仅仅是 Claude 的文件工具。


416* **子代理**:[subagents](/zh-CN/sub-agents) 在与父会话相同的进程中运行,并使用相同的沙箱配置。当在父会话中启用沙箱时,子代理内的 Bash 命令被沙箱化。419* **子代理**:[subagents](/zh-CN/sub-agents) 在与父会话相同的进程中运行,并使用相同的沙箱配置。当在父会话中启用沙箱时,子代理内的 Bash 命令被沙箱化。

417 420 

418<Warning>421<Warning>

419 有效的沙箱需要**同时**进行文件系统和网络隔离。没有网络隔离,被破坏的代理可能会泄露敏感文件,如 SSH 密钥。没有文件系统隔离,被破坏的代理可能会后门系统资源以获得网络访问权限。当你扩大默认值时,检查 `allowWrite` 路径、广泛的 `allowedDomains` 条目或 `excludedCommands` 异常是否不会撤销另一侧的限制。422 有效的沙箱需要同时进行文件系统和网络隔离。没有网络隔离,被破坏的代理可能会泄露敏感文件,如 SSH 密钥。没有文件系统隔离,被破坏的代理可能会后门系统资源以获得网络访问权限。当你扩大默认值时,检查 `allowWrite` 路径、广泛的 `allowedDomains` 条目或 `excludedCommands` 异常是否不会撤销另一侧的限制。

420</Warning>423</Warning>

421 424 

422<h2 id="see-also">425<h2 id="see-also">

security.md +4 −4

Details

22 22 

23Claude Code 默认使用严格的只读权限。当需要额外操作时(编辑文件、运行测试、执行命令),Claude Code 会请求明确的权限。用户可以控制是否批准一次性操作或自动允许操作。23Claude Code 默认使用严格的只读权限。当需要额外操作时(编辑文件、运行测试、执行命令),Claude Code 会请求明确的权限。用户可以控制是否批准一次性操作或自动允许操作。

24 24 

25我们设计 Claude Code 是为了透明和安全例如我们要求在执行 bash 命令前获得批准让您拥有直接控制权。这种方法使用户和组织能够直接配置权限。25Claude Code 在运行可以修改您的系统的 Bash 命令之前需要获得批准一组内置的只读命令 `ls`、`cat` 和 `git status`无需提示即可运行。这种方法使用户和组织能够直接配置权限。

26 26 

27有关详细的权限配置,请参阅 [Permissions](/zh-CN/permissions)。27有关详细的权限配置,请参阅 [Permissions](/zh-CN/permissions)。

28 28 


56* **权限系统**:敏感操作需要明确批准56* **权限系统**:敏感操作需要明确批准

57* **上下文感知分析**:通过分析完整请求来检测潜在有害指令57* **上下文感知分析**:通过分析完整请求来检测潜在有害指令

58* **输入清理**:通过处理用户输入来防止命令注入58* **输入清理**:通过处理用户输入来防止命令注入

59* **命令黑名单**:默认阻止从网络获取任意内容的风险命令,如 `curl` 和 `wget`。显式允许时请注意 [权限模式限制](/zh-CN/permissions#tool-specific-permission-rules)59* **网络命令批准**:从网络获取内容的命令,如 `curl` 和 `wget`,默认不会自动批准它们会像任何其他非只读 Bash 命令一样提示因此您仍然可以批准一次或添加显式允许规则,如 `Bash(curl *)`。要完全阻止它们,请将其添加到 [`permissions.deny`](/zh-CN/permissions#tool-specific-permission-rules)

60 60 

61<h3 id="privacy-safeguards">61<h3 id="privacy-safeguards">

62 隐私保护62 隐私保护


77* **网络请求批准**:进行网络请求的工具默认需要用户批准77* **网络请求批准**:进行网络请求的工具默认需要用户批准

78* **隔离的上下文窗口**:Web fetch 使用单独的上下文窗口以避免注入潜在恶意提示78* **隔离的上下文窗口**:Web fetch 使用单独的上下文窗口以避免注入潜在恶意提示

79* **信任验证**:首次代码库运行和新 MCP servers 需要信任验证79* **信任验证**:首次代码库运行和新 MCP servers 需要信任验证

80 * 注意:使用 `-p` 标志以非交互方式运行时,信任验证被禁用。例外是 [`--worktree`](/zh-CN/worktrees),它仍然要求已接受该目录的信任80 * 注意:使用 `-p` 标志以非交互方式运行时,信任验证被禁用

81 * 注意:当您直接在主目录中启动 Claude Code 时,信任接受仅在当前会话期间保持,不会写入磁盘,因此提示在每次启动时都会重新出现。没有设置可以持久化它。请从项目子目录启动 Claude Code,其中信任接受按目录保存81 * 注意:当您直接在主目录中启动 Claude Code 时,信任接受仅在当前会话期间保持,不会写入磁盘,因此提示在每次启动时都会重新出现。没有设置可以持久化它。请从项目子目录启动 Claude Code,其中信任接受按目录保存

82* **命令注入检测**:即使之前已白名单,可疑的 bash 命令也需要手动批准82* **命令注入检测**:即使之前已白名单,可疑的 bash 命令也需要手动批准

83* **故障关闭匹配**:不匹配的命令默认需要手动批准83* **故障关闭匹配**:不匹配的命令默认需要手动批准

84* **自然语言描述**:复杂的 bash 命令包括用户理解的说明84* **自然语言描述**:复杂的 bash 命令包括用户理解的说明

85* **安全凭证存储**:API 密钥和令牌已加密。请参阅 [Credential Management](/zh-CN/authentication#credential-management)85* **安全凭证存储**:API 密钥和令牌存储在可用时的 macOS Keychain 中,在 Windows 和 Linux 上受文件权限保护。请参阅 [Credential Management](/zh-CN/authentication#credential-management)

86 86 

87<Warning>87<Warning>

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 触发对远程主机的网络请求,绕过权限系统。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 触发对远程主机的网络请求,绕过权限系统。

Details

10 10 

11安装后,该插件会自动运行。无需调用任何内容,也无需记住单独的命令。11安装后,该插件会自动运行。无需调用任何内容,也无需记住单独的命令。

12 12 

13该插件是 [Code Review](/zh-CN/code-review) 的会话内伴侣,Code Review 在拉取请求上运行。该插件减少了进入 PR 的内容。Code Review 捕获遗漏的内容。有关该插件如何与按需审查和 CI 扫描配合使用的信息,请参阅 [此插件如何与其他安全工具配合](#此插件如何与其他安全工具配合)。13该插件是 [Code Review](/zh-CN/code-review) 的会话内伴侣,Code Review 在拉取请求上运行。该插件减少了进入 PR 的内容。Code Review 捕获遗漏的内容。有关该插件如何与按需审查和 CI 扫描配合使用的信息,请参阅 [此插件如何与其他安全工具配合](#how-this-fits-with-other-security-tools)。

14 14 

15## 前置条件15<h2 id="prerequisites">

16 前置条件

17</h2>

16 18 

17* Claude Code CLI 版本 2.1.144 或更高版本19* Claude Code CLI 版本 2.1.144 或更高版本

18* Python 3.8 或更高版本在您的 `PATH` 中。该插件按顺序尝试 `python3`、`python` 和 `py -3`20* Python 3.8 或更高版本在您的 `PATH` 中。该插件按顺序尝试 `python3`、`python` 和 `py -3`


20 22 

21首次运行时,该插件在 `~/.claude/security/` 下创建虚拟环境,并将 Claude Agent SDK 安装到其中,这需要 `pip` 和网络访问。如果该安装失败,提交审查会回退到单次审查而不是代理审查。在 Windows 上,虚拟环境步骤被跳过,因此代理提交审查仅在 `claude-agent-sdk` 已经可导入时运行,否则以相同方式回退。23首次运行时,该插件在 `~/.claude/security/` 下创建虚拟环境,并将 Claude Agent SDK 安装到其中,这需要 `pip` 和网络访问。如果该安装失败,提交审查会回退到单次审查而不是代理审查。在 Windows 上,虚拟环境步骤被跳过,因此代理提交审查仅在 `claude-agent-sdk` 已经可导入时运行,否则以相同方式回退。

22 24 

23## 安装插件25<h2 id="install-the-plugin">

26 安装插件

27</h2>

24 28 

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

26 30 


36/reload-plugins40/reload-plugins

37```41```

38 42 

39### 在云会话和共享存储库中启用43<h3 id="enable-in-cloud-sessions-and-shared-repositories">

44 在云会话和共享存储库中启用

45</h3>

40 46 

41用户范围的插件不会进入 [网络上的 Claude Code](/zh-CN/claude-code-on-the-web),因为这些会话在 Anthropic 基础设施上运行,而不是在您的计算机上。要在那里启用该插件,或为克隆存储库的所有人打开它,请在项目的已检入设置中声明它:47用户范围的插件不会进入 [网络上的 Claude Code](/zh-CN/claude-code-on-the-web),因为这些会话在 Anthropic 基础设施上运行,而不是在您的计算机上。要在那里启用该插件,或为克隆存储库的所有人打开它,请在项目的已检入设置中声明它:

42 48 


50 56 

51管理员可以通过在 [托管设置](/zh-CN/admin-setup) 中设置 [`enabledPlugins`](/zh-CN/settings#plugin-settings) 来在组织范围内启用该插件。57管理员可以通过在 [托管设置](/zh-CN/admin-setup) 中设置 [`enabledPlugins`](/zh-CN/settings#plugin-settings) 来在组织范围内启用该插件。

52 58 

53## 插件检查的内容59<h2 id="what-the-plugin-checks">

60 插件检查的内容

61</h2>

54 62 

55该插件在三个点审查 Claude 的工作,每个点的深度不同:63该插件在三个点审查 Claude 的工作,每个点的深度不同:

56 64 

57* [在每次文件编辑时](#在每次文件编辑时):对危险调用的快速模式匹配,无需模型调用65* [在每次文件编辑时](#on-each-file-edit):对危险调用的快速模式匹配,无需模型调用

58* [在每个回合结束时](#在每个回合结束时):对该回合更改的所有内容进行后台模型审查66* [在每个回合结束时](#at-the-end-of-each-turn):对该回合更改的所有内容进行后台模型审查

59* [在 Claude 进行的每次提交或推送时](#-claude-进行的每次提交或推送时):读取周围代码的更深层代理审查67* [在 Claude 进行的每次提交或推送时](#on-each-commit-or-push-claude-makes):读取周围代码的更深层代理审查

60 68 

61您可以通过 [添加自己的规则](#添加您自己的规则) 来扩展每一层。内置检查无法单独删除,但您可以 [独立禁用每一层](#禁用或卸载)。69您可以通过 [添加自己的规则](#add-your-own-rules) 来扩展每一层。内置检查无法单独删除,但您可以 [独立禁用每一层](#disable-or-uninstall)。

62 70 

63### 在每次文件编辑时71<h3 id="on-each-file-edit">

72 在每次文件编辑时

73</h3>

64 74 

65当 Claude 写入文件时,该插件会扫描新内容中的已知危险模式。这是一个没有模型调用的模式匹配,因此不会增加使用成本。75当 Claude 写入文件时,该插件会扫描新内容中的已知危险模式。这是一个没有模型调用的模式匹配,因此不会增加使用成本。

66 76 


73 83 

74检查在编辑完成后运行,并将警告附加到 Claude 的下一步上下文中。每个警告在每个会话中每个文件每个模式触发一次,因此同一文件中的重复匹配不会淹没对话。84检查在编辑完成后运行,并将警告附加到 Claude 的下一步上下文中。每个警告在每个会话中每个文件每个模式触发一次,因此同一文件中的重复匹配不会淹没对话。

75 85 

76您可以使用 `security-patterns.yaml` 文件 [向此层添加自己的模式](#添加自定义的每次编辑模式)。86您可以使用 `security-patterns.yaml` 文件 [向此层添加自己的模式](#add-custom-per-edit-patterns)。

77 87 

78### 在每个回合结束时88<h3 id="at-the-end-of-each-turn">

89 在每个回合结束时

90</h3>

79 91 

80一个回合是 Claude 响应的一轮:您发送消息,Claude 工作并回复,回合结束。在每个回合之后,该插件计算工作树中在回合期间更改的所有内容的 git diff,包括来自 Claude 的编辑工具、Bash 命令和子代理的更改,并将其发送到专注于安全的单独 Claude 审查。审查在后台运行,因此 Claude 的回复不会延迟。如果审查发现问题,Claude 会被重新提示发现的问题并作为后续行动解决它们。92一个回合是 Claude 响应的一轮:您发送消息,Claude 工作并回复,回合结束。在每个回合之后,该插件计算工作树中在回合期间更改的所有内容的 git diff,包括来自 Claude 的编辑工具、Bash 命令和子代理的更改,并将其发送到专注于安全的单独 Claude 审查。审查在后台运行,因此 Claude 的回复不会延迟。如果审查发现问题,Claude 会被重新提示发现的问题并作为后续行动解决它们。

81 93 


89 101 

90您可以在会话中直接看到发现和 Claude 的解决方案。审查涵盖每个回合最多 30 个更改的文件,在最多连续三次后才会让步给您。102您可以在会话中直接看到发现和 Claude 的解决方案。审查涵盖每个回合最多 30 个更改的文件,在最多连续三次后才会让步给您。

91 103 

92### 在 Claude 进行的每次提交或推送时104<h3 id="on-each-commit-or-push-claude-makes">

105 在 Claude 进行的每次提交或推送时

106</h3>

93 107 

94当 Claude 通过其 Bash 工具运行 `git commit` 或 `git push` 时,该插件在后台运行对更改的更深层代理审查。此审查读取周围代码,包括调用者、清理程序和相关文件,以决定发现是否真实,然后再报告它。额外的上下文可以降低在隔离时看起来危险但在您的代码库中是安全的模式上的误报。108当 Claude 通过其 Bash 工具运行 `git commit` 或 `git push` 时,该插件在后台运行对更改的更深层代理审查。此审查读取周围代码,包括调用者、清理程序和相关文件,以决定发现是否真实,然后再报告它。额外的上下文可以降低在隔离时看起来危险但在您的代码库中是安全的模式上的误报。

95 109 

96此层仅在 Claude 通过其 Bash 工具进行的提交和推送时触发。您从自己的 shell 运行的提交,包括会话内的 `!` shell 转义,不会被审查。提交和推送审查的上限为每滚动小时 20 次。如果提交审查的发现重复了回合结束审查已经报告的内容,Claude 不会被重新提示,因此干净的提交不会从此层产生可见的输出。110此层仅在 Claude 通过其 Bash 工具进行的提交和推送时触发。您从自己的 shell 运行的提交,包括会话内的 `!` shell 转义,不会被审查。提交和推送审查的上限为每滚动小时 20 次。如果提交审查的发现重复了回合结束审查已经报告的内容,Claude 不会被重新提示,因此干净的提交不会从此层产生可见的输出。

97 111 

98### 审查独立性和限制112<h3 id="review-independence-and-limits">

113 审查独立性和限制

114</h3>

99 115 

100该插件不会要求编写代码的同一 Claude 实例对自己进行评分。每次编辑检查是一个确定性的字符串匹配,不涉及模型。回合结束和提交审查作为单独的 Claude 调用运行,具有新鲜的上下文和以安全为重点的提示:审查者从 diff 开始,对原始方法没有投入,仅被指示查找问题。116该插件不会要求编写代码的同一 Claude 实例对自己进行评分。每次编辑检查是一个确定性的字符串匹配,不涉及模型。回合结束和提交审查作为单独的 Claude 调用运行,具有新鲜的上下文和以安全为重点的提示:审查者从 diff 开始,对原始方法没有投入,仅被指示查找问题。

101 117 

102这些层都不会阻止写入或提交。发现作为指令到达编写 Claude,Claude 在对话中解决它们,审查模型可能会遗漏问题。将该插件视为深度防御的一层,而不是完整的安全解决方案。请参阅 [此插件如何与其他安全工具配合](#此插件如何与其他安全工具配合)。118这些层都不会阻止写入或提交。发现作为指令到达编写 Claude,Claude 在对话中解决它们,审查模型可能会遗漏问题。将该插件视为深度防御的一层,而不是完整的安全解决方案。请参阅 [此插件如何与其他安全工具配合](#how-this-fits-with-other-security-tools)。

103 119 

104## 添加您自己的规则120<h2 id="add-your-own-rules">

121 添加您自己的规则

122</h2>

105 123 

106该插件有两个扩展点:用于模型支持的审查的 Markdown 指导文件,以及用于每次编辑字符串匹配的 YAML 或 JSON 模式文件。两者都是附加的。您可以添加检查,但无法从这些文件中禁用内置检查。124该插件有两个扩展点:用于模型支持的审查的 Markdown 指导文件,以及用于每次编辑字符串匹配的 YAML 或 JSON 模式文件。两者都是附加的。您可以添加检查,但无法从这些文件中禁用内置检查。

107 125 

108### 为模型支持的审查添加指导126<h3 id="add-guidance-for-the-model-backed-reviews">

127 为模型支持的审查添加指导

128</h3>

109 129 

110在您的项目中创建 `.claude/claude-security-guidance.md`,并用纯语言描述您的威胁模型和审查清单。模型支持的审查将其作为附加上下文加载,与内置漏洞清单一起。130在您的项目中创建 `.claude/claude-security-guidance.md`,并用纯语言描述您的威胁模型和审查清单。模型支持的审查将其作为附加上下文加载,与内置漏洞清单一起。

111 131 


121 141 

122这些规则是审查者的指导,而不是确定性的护栏。该插件将违规作为发现呈现给 Claude 以修复,但它不会阻止写入或保证捕获每个违规。指导仅是附加的:说要忽略漏洞类别的规则不会抑制这些发现。对于硬执行,将该插件与 [阻止编辑受保护文件的钩子](/zh-CN/hooks-guide#block-edits-to-protected-files) 或 CI 检查配对。142这些规则是审查者的指导,而不是确定性的护栏。该插件将违规作为发现呈现给 Claude 以修复,但它不会阻止写入或保证捕获每个违规。指导仅是附加的:说要忽略漏洞类别的规则不会抑制这些发现。对于硬执行,将该插件与 [阻止编辑受保护文件的钩子](/zh-CN/hooks-guide#block-edits-to-protected-files) 或 CI 检查配对。

123 143 

124### 添加自定义的每次编辑模式144<h3 id="add-custom-per-edit-patterns">

145 添加自定义的每次编辑模式

146</h3>

125 147 

126创建 `.claude/security-patterns.yaml` 以向 [每次编辑模式检查](#在每次文件编辑时) 添加正则表达式或子字符串规则。这些作为确定性字符串匹配与内置模式一起运行:148创建 `.claude/security-patterns.yaml` 以向 [每次编辑模式检查](#on-each-file-edit) 添加正则表达式或子字符串规则。这些作为确定性字符串匹配与内置模式一起运行:

127 149 

128```yaml .claude/security-patterns.yaml theme={null}150```yaml .claude/security-patterns.yaml theme={null}

129patterns:151patterns:


147 169 

148该插件还读取 `.claude/security-patterns.yml` 和 `.claude/security-patterns.json`,具有相同的架构。JSON 适用于任何 Python 安装。YAML 形式需要 PyYAML 可导入,该插件不会为您安装。该插件加载最多 50 个自定义规则,并跳过看起来容易发生灾难性回溯的正则表达式。170该插件还读取 `.claude/security-patterns.yml` 和 `.claude/security-patterns.json`,具有相同的架构。JSON 适用于任何 Python 安装。YAML 形式需要 PyYAML 可导入,该插件不会为您安装。该插件加载最多 50 个自定义规则,并跳过看起来容易发生灾难性回溯的正则表达式。

149 171 

150### 规则文件查找位置172<h3 id="rule-file-lookup-locations">

173 规则文件查找位置

174</h3>

151 175 

152该插件在相同位置查找 `claude-security-guidance.md` 和 `security-patterns.yaml`,与插件的启用方式无关:176该插件在相同位置查找 `claude-security-guidance.md` 和 `security-patterns.yaml`,与插件的启用方式无关:

153 177 


159 183 

160该插件加载所有存在的位置并连接它们,指导文件的组合上限为 8 KB。管理员可以通过设备管理将用户范围文件推送到 `~/.claude/` 来分发组织范围的规则。相同的路径适用于 `security-patterns.yaml`。184该插件加载所有存在的位置并连接它们,指导文件的组合上限为 8 KB。管理员可以通过设备管理将用户范围文件推送到 `~/.claude/` 来分发组织范围的规则。相同的路径适用于 `security-patterns.yaml`。

161 185 

162## 使用成本186<h2 id="usage-cost">

187 使用成本

188</h2>

163 189 

164[每次编辑模式检查](#在每次文件编辑时) 不进行模型调用,不增加成本。[回合结束](#在每个回合结束时) 和 [提交](#-claude-进行的每次提交或推送时) 审查各自花费额外的模型使用,计入您的 [使用](/zh-CN/costs),就像任何其他 Claude 请求一样。提交审查是代理性的,每次提交可能需要多个模型回合,上限为每滚动小时 20 次审查。预期大约每个更改文件的回合有一次审查调用,每次提交有一次更深层审查,两者都受上述上限的约束。190[每次编辑模式检查](#on-each-file-edit) 不进行模型调用,不增加成本。[回合结束](#at-the-end-of-each-turn) 和 [提交](#on-each-commit-or-push-claude-makes) 审查各自花费额外的模型使用,计入您的 [使用](/zh-CN/costs),就像任何其他 Claude 请求一样。提交审查是代理性的,每次提交可能需要多个模型回合,上限为每滚动小时 20 次审查。预期大约每个更改文件的回合有一次审查调用,每次提交有一次更深层审查,两者都受上述上限的约束。

165 191 

166两个模型支持的审查默认使用 Claude Opus 4.7。设置 `SECURITY_REVIEW_MODEL` 为回合结束审查选择不同的模型,设置 `SG_AGENTIC_MODEL` 为提交审查。192两个模型支持的审查默认使用 Claude Opus 4.7。设置 `SECURITY_REVIEW_MODEL` 为回合结束审查选择不同的模型,设置 `SG_AGENTIC_MODEL` 为提交审查。

167 193 

168该插件在所有计划上都可用。194该插件在所有计划上都可用。

169 195 

170## 禁用或卸载196<h2 id="disable-or-uninstall">

197 禁用或卸载

198</h2>

171 199 

172要关闭单个层同时保持其余部分,请设置匹配的环境变量:200要关闭单个层同时保持其余部分,请设置匹配的环境变量:

173 201 

174| 变量 | 效果 |202| 变量 | 效果 |

175| :------------------------------ | :---------------------------------- |203| :------------------------------ | :------------------------------------------------- |

176| `ENABLE_PATTERN_RULES=0` | 禁用 [每次编辑模式检查](#在每次文件编辑时) |204| `ENABLE_PATTERN_RULES=0` | 禁用 [每次编辑模式检查](#on-each-file-edit) |

177| `ENABLE_STOP_REVIEW=0` | 禁用 [回合结束 diff 审查](#在每个回合结束时) |205| `ENABLE_STOP_REVIEW=0` | 禁用 [回合结束 diff 审查](#at-the-end-of-each-turn) |

178| `ENABLE_COMMIT_REVIEW=0` | 禁用 [提交和推送审查](#-claude-进行的每次提交或推送时) |206| `ENABLE_COMMIT_REVIEW=0` | 禁用 [提交和推送审查](#on-each-commit-or-push-claude-makes) |

179| `ENABLE_CODE_SECURITY_REVIEW=0` | 一次禁用所有模型支持的审查 |207| `ENABLE_CODE_SECURITY_REVIEW=0` | 一次禁用所有模型支持的审查 |

180| `SECURITY_GUIDANCE_DISABLE=1` | 禁用插件而不卸载 |208| `SECURITY_GUIDANCE_DISABLE=1` | 禁用插件而不卸载 |

181 209 


193 221 

194如果插件通过项目的 `.claude/settings.json` 启用,从 `/plugin` 禁用它会将覆盖写入您的 `.claude/settings.local.json`,而不是编辑已检入的文件,因此该插件对您保持关闭,而不影响队友。如果它通过 [托管设置](/zh-CN/admin-setup) 启用,只有管理员可以禁用它。222如果插件通过项目的 `.claude/settings.json` 启用,从 `/plugin` 禁用它会将覆盖写入您的 `.claude/settings.local.json`,而不是编辑已检入的文件,因此该插件对您保持关闭,而不影响队友。如果它通过 [托管设置](/zh-CN/admin-setup) 启用,只有管理员可以禁用它。

195 223 

196## 插件如何与 Claude Code 集成224<h2 id="how-the-plugin-integrates-with-claude-code">

225 插件如何与 Claude Code 集成

226</h2>

197 227 

198该插件完全基于 [hooks](/zh-CN/hooks),这是在 Claude 循环中的特定点运行您自己的代码的机制。它注册:228该插件完全基于 [hooks](/zh-CN/hooks),这是在 Claude 循环中的特定点运行您自己的代码的机制。它注册:

199 229 


207 237 

208如果您构建自己的 hooks,[插件的源代码](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/security-guidance) 是从 hook 运行单独模型调用并将结果反馈给会话的工作示例。238如果您构建自己的 hooks,[插件的源代码](https://github.com/anthropics/claude-plugins-official/tree/main/plugins/security-guidance) 是从 hook 运行单独模型调用并将结果反馈给会话的工作示例。

209 239 

210## 此插件如何与其他安全工具配合240<h2 id="how-this-fits-with-other-security-tools">

241 此插件如何与其他安全工具配合

242</h2>

211 243 

212该插件是深度防御方法中的一层。它最早捕获问题,当代码仍在编辑器中时,但它不是保证,也不能替代后来的检查。典型的堆栈:244该插件是深度防御方法中的一层。它最早捕获问题,当代码仍在编辑器中时,但它不是保证,也不能替代后来的检查。典型的堆栈:

213 245 


220 252 

221每个后来的阶段捕获早期阶段遗漏的内容。该插件的价值在于减少到达它们的数量,而不是消除对它们的需求。253每个后来的阶段捕获早期阶段遗漏的内容。该插件的价值在于减少到达它们的数量,而不是消除对它们的需求。

222 254 

223## 故障排除255<h2 id="troubleshooting">

256 故障排除

257</h2>

224 258 

225该插件将运行时诊断写入 `~/.claude/security/log.txt`。如果审查未出现,请先检查那里。259该插件将运行时诊断写入 `~/.claude/security/log.txt`。如果审查未出现,请先检查那里。

226 260 


230* 会话没有 Anthropic 身份验证:模型支持的审查跳过,仅每次编辑模式检查运行264* 会话没有 Anthropic 身份验证:模型支持的审查跳过,仅每次编辑模式检查运行

231* `security-patterns.yaml` 文件存在但 PyYAML 不可导入:文件被忽略。改用 `security-patterns.json`265* `security-patterns.yaml` 文件存在但 PyYAML 不可导入:文件被忽略。改用 `security-patterns.json`

232 266 

233## 相关资源267<h2 id="related-resources">

268 相关资源

269</h2>

234 270 

235要深入了解此页面涉及的部分:271要深入了解此页面涉及的部分:

236 272 

Details

174 174 

175Claude Code 自动应用设置更新而无需重新启动,除了高级设置(如 OpenTelemetry 配置)需要完全重新启动才能生效。175Claude Code 自动应用设置更新而无需重新启动,除了高级设置(如 OpenTelemetry 配置)需要完全重新启动才能生效。

176 176 

177<h3 id="invalid-entries-in-delivered-settings">

178 已传递设置中的无效条目

179</h3>

180 

181已传递的有效负载使用与其他托管源相同的规则进行容错解析。当有效负载包含未通过架构验证的条目时,Claude Code 会删除该条目、显示验证错误,并应用每个剩余的有效设置。有关字段级行为的详细信息,请参阅[托管设置中的无效条目](/zh-CN/settings#invalid-entries-in-managed-settings),包括如何处理安全强制字段。需要 Claude Code v2.1.169 或更高版本。

182 

183服务器管理的传递添加了这些行为:

184 

185* 位于 `~/.claude/remote-settings.json` 的缓存存储已删除无效条目的已保存有效负载。原始无效有效负载永远不会被持久化。

186* 当有效负载中没有字段可以被保存时,Claude Code 保留最后接受的缓存设置并记录致命错误。

187* [安全批准对话框](#security-approval-dialogs)评估已保存的有效负载,因此被删除的无效条目永远不会被呈现以供批准,也永远不会执行。

188 

189要调试传递问题,请运行 `claude --debug-file <path>` 并在日志中搜索 `Remote settings`。在向组织推出有效负载更改之前,使用 `claude doctor` 在测试机器上验证有效负载更改。

190 

177<h3 id="enforce-fail-closed-startup">191<h3 id="enforce-fail-closed-startup">

178 强制执行故障关闭启动192 强制执行故障关闭启动

179</h3>193</h3>

sessions.md +5 −5

Details

30| `claude --from-pr <number>` | 恢复链接到该拉取请求的会话 |30| `claude --from-pr <number>` | 恢复链接到该拉取请求的会话 |

31| `/resume` | 从活跃会话内切换到不同的对话 |31| `/resume` | 从活跃会话内切换到不同的对话 |

32 32 

33使用 [`claude -p`](/zh-CN/headless) 或 [Agent SDK](/zh-CN/agent-sdk/overview) 创建的会话不会出现在会话选择器中,但您仍然可以通过将其会话 ID 传递给 `claude --resume <session-id>` 来恢复它。33使用 [`claude -p`](/zh-CN/headless) 或 [Agent SDK](/zh-CN/agent-sdk/overview) 创建的会话不会出现在会话选择器中,但您仍然可以通过将其会话 ID 传递给 `claude --resume <session-id>` 来恢复它。从会话启动所在的目录运行此命令:会话 ID 查找的范围限于当前项目目录及其 git worktrees,因此在其他地方创建的会话会报告 `No conversation found with session ID: <session-id>`。

34 34 

35<h3 id="where-the-session-picker-looks">35<h3 id="where-the-session-picker-looks">

36 会话选择器查看的位置36 会话选择器查看的位置

37</h3>37</h3>

38 38 

39会话按项目目录存储。默认情况下,会话选择器显示来自当前 worktree 的交互式会话,以及在其他地方启动但使用 `/add-dir` 添加了当前目录的会话。使用 `Ctrl+W` 扩展到存储库的所有 worktree,或使用 `Ctrl+A` 扩展到此计算机上的每个项目。39会话按项目目录存储。默认情况下,会话选择器显示来自当前 worktree 的交互式会话,以及在其他地方启动但使用 `/add-dir` 添加了当前目录的会话。从 v2.1.169 开始,使用 [`/cd`](/zh-CN/commands) 移动会话会将其重新定位到新目录的项目存储中,因此之后它会出现在该目录的选择器中。使用 `Ctrl+W` 扩展到存储库的所有 worktree,或使用 `Ctrl+A` 扩展到此计算机上的每个项目。

40 40 

41从同一存储库的另一个 worktree 选择会话会在原地恢复它。从不相关项目选择会话会将 `cd` 和恢复命令复制到您的剪贴板。41从同一存储库的另一个 worktree 选择会话会在原地恢复它。从不相关项目选择会话会将 `cd` 和恢复命令复制到您的剪贴板。

42 42 


60| 从会话选择器 | 突出显示会话并按 `Ctrl+R` |60| 从会话选择器 | 突出显示会话并按 `Ctrl+R` |

61| 在计划接受时 | 在 [Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中接受计划会从计划内容命名会话,除非您已经设置了一个 |61| 在计划接受时 | 在 [Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中接受计划会从计划内容命名会话,除非您已经设置了一个 |

62 62 

63会话命名后,使用 `claude --resume <name>` 或 `/resume <name>` 返回到它。有关名称解析如何跨 worktree 工作的信息,请参阅[恢复会话](#resume-a-session)。63会话命名后,使用 `claude --resume <name>` 或 `/resume <name>` 返回到它。有关名称解析如何跨 worktrees 工作的信息,请参阅[恢复会话](#resume-a-session)。

64 64 

65<h2 id="use-the-session-picker">65<h2 id="use-the-session-picker">

66 使用会话选择器66 使用会话选择器


77| `Ctrl+R` | 重命名突出显示的会话 |77| `Ctrl+R` | 重命名突出显示的会话 |

78| `/` 或除 `Space` 外的任何可打印字符 | 进入搜索模式并过滤会话。粘贴 GitHub、GitHub Enterprise、GitLab 或 Bitbucket 拉取或合并请求 URL 以查找创建它的会话 |78| `/` 或除 `Space` 外的任何可打印字符 | 进入搜索模式并过滤会话。粘贴 GitHub、GitHub Enterprise、GitLab 或 Bitbucket 拉取或合并请求 URL 以查找创建它的会话 |

79| `Ctrl+A` | 显示此计算机上所有项目的会话。再次按下以返回到当前存储库 |79| `Ctrl+A` | 显示此计算机上所有项目的会话。再次按下以返回到当前存储库 |

80| `Ctrl+W` | 显示当前存储库所有 worktree 的会话。再次按下以返回到当前 worktree。仅在多 worktree 存储库中显示 |80| `Ctrl+W` | 显示当前存储库所有 worktrees 的会话。再次按下以返回到当前 worktree。仅在多 worktree 存储库中显示 |

81| `Ctrl+B` | 过滤到当前 git 分支的会话。再次按下以显示所有分支 |81| `Ctrl+B` | 过滤到当前 git 分支的会话。再次按下以显示所有分支 |

82| `Esc` | 退出会话选择器或搜索模式 |82| `Esc` | 退出会话选择器或搜索模式 |

83 83 


105 105 

106原始会话保持不变,并在会话选择器中保持可用。`/branch` 确认打印两个会话 ID:您现在所在的新分支和原始分支。要返回到原始分支,将其 ID 传递给 `/resume`、使用会话选择器或运行 `/resume <original-name>`。您使用"允许此会话"批准的权限不会转移到新分支。如果您在两个终端中恢复同一会话而不分叉,来自两者的消息会交错到一个文本记录中。106原始会话保持不变,并在会话选择器中保持可用。`/branch` 确认打印两个会话 ID:您现在所在的新分支和原始分支。要返回到原始分支,将其 ID 传递给 `/resume`、使用会话选择器或运行 `/resume <original-name>`。您使用"允许此会话"批准的权限不会转移到新分支。如果您在两个终端中恢复同一会话而不分叉,来自两者的消息会交错到一个文本记录中。

107 107 

108对于单个会话内基于检查点的回退,请参阅 [Checkpointing](/zh-CN/checkpointing)。108对于单个会话内基于 checkpoint 的回退,请参阅 [Checkpointing](/zh-CN/checkpointing)。

109 109 

110<h2 id="manage-context-within-a-session">110<h2 id="manage-context-within-a-session">

111 管理会话内的上下文111 管理会话内的上下文

settings.md +111 −23

Details

94* **用户设置**在 `~/.claude/settings.json` 中定义,适用于所有项目。94* **用户设置**在 `~/.claude/settings.json` 中定义,适用于所有项目。

95* **项目设置**保存在您的项目目录中:95* **项目设置**保存在您的项目目录中:

96 * `.claude/settings.json` 用于检入源代码管理并与您的团队共享的设置96 * `.claude/settings.json` 用于检入源代码管理并与您的团队共享的设置

97 * `.claude/settings.local.json` 用于未检入的设置,适用于个人偏好和实验。Claude Code 将在创建 `.claude/settings.local.json` 时配置 git 以忽略它97 * `.claude/settings.local.json` 用于未检入的设置,适用于个人偏好和实验。Claude Code 创建 `.claude/settings.local.json` 时,会配置 git 以忽略该文件如果您自己创建该文件,请手动将其添加到 gitignore。

98* **Managed 设置**:对于需要集中控制的组织,Claude Code 支持多种 managed 设置的交付机制。所有机制都使用相同的 JSON 格式,无法被用户或项目设置覆盖:98* **Managed 设置**:对于需要集中控制的组织,Claude Code 支持多种 managed 设置的交付机制。所有机制都使用相同的 JSON 格式,无法被用户或项目设置覆盖:

99 99 

100 * **服务器管理的设置**:通过 Claude.ai 管理员控制台从 Anthropic 的服务器交付。请参阅[服务器管理的设置](/zh-CN/server-managed-settings)。100 * **服务器管理的设置**:通过 Claude.ai 管理员控制台从 Anthropic 的服务器交付。请参阅[服务器管理的设置](/zh-CN/server-managed-settings)。


174* `model`:使用 [`/model`](/zh-CN/model-config#setting-your-model) 在会话中切换174* `model`:使用 [`/model`](/zh-CN/model-config#setting-your-model) 在会话中切换

175* [`outputStyle`](/zh-CN/output-styles):系统提示的一部分,在 `/clear` 或重启时重建175* [`outputStyle`](/zh-CN/output-styles):系统提示的一部分,在 `/clear` 或重启时重建

176 176 

177<h3 id="invalid-entries-in-managed-settings">

178 Managed 设置中的无效条目

179</h3>

180 

181Managed 设置宽容地解析。当 managed 配置包含验证架构失败的条目时,Claude Code 会删除该条目,记录警告,并强制执行所有剩余的有效策略。单个拼写错误无法禁用组织的其余策略。此行为在所有三种交付机制中一致:[服务器管理的设置](/zh-CN/server-managed-settings)、通过 MDM 部署的 plist 和注册表策略,以及 `managed-settings.json` 文件。需要 Claude Code v2.1.169 或更高版本。

182 

183安全强制字段按字段处理,而不是在存在但无效时被整体删除:

184 

185| 字段 | 存在但无效时的行为 |

186| :--------------------------- | :------------------------------------------------------------------------------------------------ |

187| `allowedMcpServers` | 作为空允许列表强制执行,因此在修复值之前不允许任何 MCP servers。单个无效条目被删除,有效子集被强制执行。 |

188| `allowManagedMcpServersOnly` | 视为 `true`。 |

189| `availableModels` | {/* min-version: 2.1.175 */}作为空允许列表强制执行,因此在修复值之前仅默认模型可用。单个非字符串条目被删除,有效子集被强制执行。适用于 v2.1.175 及更高版本。 |

190| `enforceAvailableModels` | {/* min-version: 2.1.175 */}视为 `true`。适用于 v2.1.175 及更高版本。 |

191| `forceLoginOrgUUID` | 在修复值之前不允许任何组织登录。 |

192| `deniedMcpServers` | 单个无效条目被删除,有效子集被强制执行。完全无效的值被丢弃并显示警告,因为拒绝每个 server 会阻止策略从未命名的 servers。 |

193 

194`requiredMinimumVersion` 和 `requiredMaximumVersion` 通过设计失败开放:无效值被删除而不是强制执行,因此坏策略推送无法阻止 Claude Code 启动。

195 

196验证错误出现在三个地方:

197 

198* 交互式会话在启动时显示列出无效条目的对话框。

199* 使用 `-p` 的无头运行将摘要打印到 stderr。

200* [`claude doctor`](/zh-CN/debug-your-config) 列出每个无效条目及其源和字段。

201 

202在将策略更改部署到整个机队之前,在测试机器上运行 `claude doctor` 来验证策略更改。

203 

204此容限仅适用于 managed 设置。用户、项目和本地设置文件保持严格:验证失败的文件被整体拒绝并报告。

205 

177<h3 id="available-settings">206<h3 id="available-settings">

178 可用设置207 可用设置

179</h3>208</h3>


181`settings.json` 支持多个选项:210`settings.json` 支持多个选项:

182 211 

183| 键 | 描述 | 示例 |212| 键 | 描述 | 示例 |

184| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- |213| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |

214| `advisorModel` | {/* min-version: 2.1.98 */}服务器端[advisor tool](/zh-CN/advisor)的模型。接受模型别名,如 `"opus"`、`"sonnet"` 或 `"fable"`({/* min-version: 2.1.170 */}v2.1.170+),或完整模型 ID。当您运行 `/advisor` 时自动写入。取消设置以禁用 advisor。需要 Claude Code v2.1.98 或更高版本 | `"opus"` |

185| `agent` | 将主线程作为命名 subagent 运行,并为从 `claude agents` 分派的会话设置默认 agent。应用该 subagent 的系统提示、工具限制和模型。请参阅[显式调用 subagents](/zh-CN/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |215| `agent` | 将主线程作为命名 subagent 运行,并为从 `claude agents` 分派的会话设置默认 agent。应用该 subagent 的系统提示、工具限制和模型。请参阅[显式调用 subagents](/zh-CN/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

216| `agentPushNotifEnabled` | {/* min-version: 2.1.119 */}当[远程控制](/zh-CN/remote-control)已连接时,允许 Claude 向您的手机发送主动推送通知,例如当长任务完成时。默认:`false`。在 `/config` 中显示为**Claude 决定时推送**。请参阅[移动推送通知](/zh-CN/remote-control#mobile-push-notifications)。需要 Claude Code v2.1.119 或更高版本 | `true` |

186| `allowAllClaudeAiMcps` | (仅 Managed 设置)加载 claude.ai connectors 与部署的 `managed-mcp.json` 一起,否则后者会获得独占控制并抑制它们。请参阅 [Managed MCP 配置](/zh-CN/managed-mcp) | `true` |217| `allowAllClaudeAiMcps` | (仅 Managed 设置)加载 claude.ai connectors 与部署的 `managed-mcp.json` 一起,否则后者会获得独占控制并抑制它们。请参阅 [Managed MCP 配置](/zh-CN/managed-mcp) | `true` |

187| `allowedChannelPlugins` | (仅 Managed 设置)可能推送消息的频道插件的允许列表。设置后替换默认 Anthropic 允许列表。未定义 = 回退到默认值,空数组 = 阻止所有频道插件。需要 `channelsEnabled: true`。请参阅[限制哪些频道插件可以运行](/zh-CN/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |218| `allowedChannelPlugins` | (仅 Managed 设置)可能推送消息的频道插件的允许列表。设置后替换默认 Anthropic 允许列表。未定义 = 回退到默认值,空数组 = 阻止所有频道插件。需要 `channelsEnabled: true`。请参阅[限制哪些频道插件可以运行](/zh-CN/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

188| `allowedHttpHookUrls` | HTTP hooks 可能针对的 URL 模式的允许列表。支持 `*` 作为通配符。设置后,具有不匹配 URL 的 hooks 被阻止。未定义 = 无限制,空数组 = 阻止所有 HTTP hooks。数组跨设置源合并。请参阅 [Hook 配置](#hook-configuration) | `["https://hooks.example.com/*"]` |219| `allowedHttpHookUrls` | HTTP hooks 可能针对的 URL 模式的允许列表。支持 `*` 作为通配符。设置后,具有不匹配 URL 的 hooks 被阻止。未定义 = 无限制,空数组 = 阻止所有 HTTP hooks。数组跨设置源合并。请参阅 [Hook 配置](#hook-configuration) | `["https://hooks.example.com/*"]` |


190| `allowManagedHooksOnly` | (仅 Managed 设置)仅加载 managed hooks、SDK hooks 和在 managed 设置 `enabledPlugins` 中强制启用的插件中的 hooks。用户、项目和所有其他插件 hooks 被阻止。请参阅 [Hook 配置](#hook-configuration) | `true` |221| `allowManagedHooksOnly` | (仅 Managed 设置)仅加载 managed hooks、SDK hooks 和在 managed 设置 `enabledPlugins` 中强制启用的插件中的 hooks。用户、项目和所有其他插件 hooks 被阻止。请参阅 [Hook 配置](#hook-configuration) | `true` |

191| `allowManagedMcpServersOnly` | (仅 Managed 设置)仅尊重来自 managed 设置的 `allowedMcpServers`。`deniedMcpServers` 仍从所有源合并。用户仍可以添加 MCP servers,但仅应用管理员定义的允许列表。请参阅 [Managed MCP 配置](/zh-CN/managed-mcp) | `true` |222| `allowManagedMcpServersOnly` | (仅 Managed 设置)仅尊重来自 managed 设置的 `allowedMcpServers`。`deniedMcpServers` 仍从所有源合并。用户仍可以添加 MCP servers,但仅应用管理员定义的允许列表。请参阅 [Managed MCP 配置](/zh-CN/managed-mcp) | `true` |

192| `allowManagedPermissionRulesOnly` | (仅 Managed 设置)防止用户和项目设置定义 `allow`、`ask` 或 `deny` 权限规则。仅应用 managed 设置中的规则。请参阅 [Managed 专用设置](/zh-CN/permissions#managed-only-settings) | `true` |223| `allowManagedPermissionRulesOnly` | (仅 Managed 设置)防止用户和项目设置定义 `allow`、`ask` 或 `deny` 权限规则。仅应用 managed 设置中的规则。请参阅 [Managed 专用设置](/zh-CN/permissions#managed-only-settings) | `true` |

193| `alwaysThinkingEnabled` | 为所有会话默认启用[扩展思考](/zh-CN/model-config#extended-thinking)。通常通过 `/config` 命令而不是直接编辑来配置。要强制禁用思考,无论此设置如何,请在 `env` 中设置 [`CLAUDE_CODE_DISABLE_THINKING`](/zh-CN/env-vars) | `true` |224| `alwaysThinkingEnabled` | 为所有会话默认启用[扩展思考](/zh-CN/model-config#extended-thinking)。通常通过 `/config` 命令而不是直接编辑来配置。要强制禁用思考,无论此设置如何,请在 `env` 中设置 [`MAX_THINKING_TOKENS=0`](/zh-CN/env-vars),这会禁用 Anthropic API 上的思考,除了 Fable 5,它无法关闭思考。在[第三方提供商](/zh-CN/third-party-integrations)上,这会省略 `thinking` 参数,自适应推理模型仍可能思考 | `true` |

194| `apiKeyHelper` | 自定义脚本,在 `/bin/sh` 中执行,以生成身份验证值。此值将作为 `X-Api-Key` 和 `Authorization: Bearer` 标头发送用于模型请求。使用 [`CLAUDE_CODE_API_KEY_HELPER_TTL_MS`](/zh-CN/env-vars) 设置刷新间隔 | `/bin/generate_temp_api_key.sh` |225| `apiKeyHelper` | 自定义脚本,在 `/bin/sh` 中执行,以生成身份验证值。此值将作为 `X-Api-Key` 和 `Authorization: Bearer` 标头发送用于模型请求。使用 [`CLAUDE_CODE_API_KEY_HELPER_TTL_MS`](/zh-CN/env-vars) 设置刷新间隔 | `/bin/generate_temp_api_key.sh` |

195| `attribution` | 自定义 git 提交和拉取请求的归属。请参阅[归属设置](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |226| `attribution` | 自定义 git 提交和拉取请求的归属。请参阅[归属设置](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

227| `autoCompactEnabled` | {/* min-version: 2.1.119 */}当上下文接近限制时自动压缩对话。默认:`true`。在 `/config` 中显示为**自动压缩**。要通过环境变量禁用,请在 `env` 中设置 [`DISABLE_AUTO_COMPACT`](/zh-CN/env-vars) | `false` |

196| `autoMemoryDirectory` | [自动内存](/zh-CN/memory#storage-location)存储的自定义目录。接受绝对路径或 `~/` 前缀的路径。从项目或本地设置接受,仅在您接受工作区信任对话框后,因为克隆的存储库可能提供此文件 | `"~/my-memory-dir"` |228| `autoMemoryDirectory` | [自动内存](/zh-CN/memory#storage-location)存储的自定义目录。接受绝对路径或 `~/` 前缀的路径。从项目或本地设置接受,仅在您接受工作区信任对话框后,因为克隆的存储库可能提供此文件 | `"~/my-memory-dir"` |

197| `autoMemoryEnabled` | 启用[自动内存](/zh-CN/memory#enable-or-disable-auto-memory)。当为 `false` 时,Claude 不从自动内存目录读取或写入。默认:`true`。您也可以在会话期间使用 `/memory` 切换此选项。要通过环境变量禁用,请在 `env` 中设置 [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/zh-CN/env-vars) | `false` |229| `autoMemoryEnabled` | 启用[自动内存](/zh-CN/memory#enable-or-disable-auto-memory)。当为 `false` 时,Claude 不从自动内存目录读取或写入。默认:`true`。您也可以在会话期间使用 `/memory` 切换此选项。要通过环境变量禁用,请在 `env` 中设置 [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/zh-CN/env-vars) | `false` |

198| `autoMode` | 自定义[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器阻止和允许的内容。包含 `environment`、`allow`、`soft_deny` 和 `hard_deny` 散文规则数组。在数组中包含字面字符串 `"$defaults"` 以在该位置继承内置规则。请参阅[配置自动模式](/zh-CN/auto-mode-config)。不从共享项目设置读取 | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |230| `autoMode` | 自定义[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器阻止和允许的内容。包含 `environment`、`allow`、`soft_deny` 和 `hard_deny` 散文规则数组。在数组中包含字面字符串 `"$defaults"` 以在该位置继承内置规则。请参阅[配置自动模式](/zh-CN/auto-mode-config)。不从共享项目设置读取 | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

199| `autoScrollEnabled` | 在[全屏渲染](/zh-CN/fullscreen)中,跟随新输出到对话的底部。默认:`true`。在 `/config` 中显示为**自动滚动**。权限提示仍在此关闭时滚动到视图中 | `false` |231| `autoScrollEnabled` | 在[全屏渲染](/zh-CN/fullscreen)中,跟随新输出到对话的底部。默认:`true`。在 `/config` 中显示为**自动滚动**。权限提示仍在此关闭时滚动到视图中 | `false` |

200| `autoUpdatesChannel` | 遵循更新的发布渠道。使用 `"stable"` 获取通常约一周前的版本并跳过有主要回归的版本,或使用 `"latest"`(默认)获取最新版本。要完全禁用自动更新,请在 `env` 中设置 [`DISABLE_AUTOUPDATER`](/zh-CN/setup#disable-auto-updates) | `"stable"` |232| `autoUpdatesChannel` | 遵循更新的发布渠道。使用 `"stable"` 获取通常约一周前的版本并跳过有主要回归的版本,或使用 `"latest"`(默认)获取最新版本。要完全禁用自动更新,请在 `env` 中设置 [`DISABLE_AUTOUPDATER`](/zh-CN/setup#disable-auto-updates) | `"stable"` |

201| `availableModels` | 限制用户可以通过 `/model``--model` `ANTHROPIC_MODEL` 选择的模型。不影响默认选项。请参阅[限制模型选择](/zh-CN/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |233| `availableModels` | 限制用户可以为主会话[subagents](/zh-CN/sub-agents) [advisor](/zh-CN/advisor) 选择的模型。请参阅[限制模型选择](/zh-CN/model-config#restrict-model-selection)。另请参阅 `enforceAvailableModels` 以同时限制默认模型 | `["sonnet", "haiku"]` |

202| `awaySummaryEnabled` | 在您离开终端几分钟后返回时显示单行会话回顾。设置为 `false` 或在 `/config` 中关闭会话回顾以禁用。与 [`CLAUDE_CODE_ENABLE_AWAY_SUMMARY`](/zh-CN/env-vars) 相同 | `true` |234| `awaySummaryEnabled` | 在您离开终端几分钟后返回时显示单行会话回顾。设置为 `false` 或在 `/config` 中关闭会话回顾以禁用。与 [`CLAUDE_CODE_ENABLE_AWAY_SUMMARY`](/zh-CN/env-vars) 相同 | `true` |

203| `awsAuthRefresh` | 修改 `.aws` 目录的自定义脚本(请参阅[高级凭证配置](/zh-CN/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |235| `awsAuthRefresh` | 修改 `.aws` 目录的自定义脚本(请参阅[高级凭证配置](/zh-CN/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |

204| `awsCredentialExport` | 输出包含 AWS 凭证的 JSON 的自定义脚本(请参阅[高级凭证配置](/zh-CN/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |236| `awsCredentialExport` | 输出包含 AWS 凭证的 JSON 的自定义脚本(请参阅[高级凭证配置](/zh-CN/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |


213| `disableAgentView` | 设置为 `true` 以关闭[后台代理和代理视图](/zh-CN/agent-view):`claude agents`、`--bg`、`/background` 和按需主管。通常在 [managed 设置](/zh-CN/permissions#managed-settings)中设置。等同于将 `CLAUDE_CODE_DISABLE_AGENT_VIEW` 设置为 `1` | `true` |245| `disableAgentView` | 设置为 `true` 以关闭[后台代理和代理视图](/zh-CN/agent-view):`claude agents`、`--bg`、`/background` 和按需主管。通常在 [managed 设置](/zh-CN/permissions#managed-settings)中设置。等同于将 `CLAUDE_CODE_DISABLE_AGENT_VIEW` 设置为 `1` | `true` |

214| `disableAllHooks` | 禁用所有 [hooks](/zh-CN/hooks) 和任何自定义[状态行](/zh-CN/statusline) | `true` |246| `disableAllHooks` | 禁用所有 [hooks](/zh-CN/hooks) 和任何自定义[状态行](/zh-CN/statusline) | `true` |

215| `disableAutoMode` | 设置为 `"disable"` 以防止[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)被激活。从 `Shift+Tab` 循环中删除 `auto` 并在启动时拒绝 `--permission-mode auto`。在[managed 设置](/zh-CN/permissions#managed-settings)中最有用,用户无法覆盖它 | `"disable"` |247| `disableAutoMode` | 设置为 `"disable"` 以防止[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)被激活。从 `Shift+Tab` 循环中删除 `auto` 并在启动时拒绝 `--permission-mode auto`。在[managed 设置](/zh-CN/permissions#managed-settings)中最有用,用户无法覆盖它 | `"disable"` |

248| `disableBundledSkills` | 设置为 `true` 以禁用 Claude Code 附带的 [skills](/zh-CN/skills) 和工作流:捆绑的 skills 和工作流被完全删除,而内置斜杠命令(如 `/init`)保持可键入但对模型隐藏。来自插件、`.claude/skills/` 和 `.claude/commands/` 的 skills 不受影响。等同于将 `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` 设置为 `1` | `true` |

216| `disableDeepLinkRegistration` | 设置为 `"disable"` 以防止 Claude Code 在启动时向操作系统注册 `claude-cli://` 协议处理程序。[深链接](/zh-CN/deep-links)让外部工具通过预填充的提示打开 Claude Code 会话。在协议处理程序注册受限或单独管理的环境中很有用 | `"disable"` |249| `disableDeepLinkRegistration` | 设置为 `"disable"` 以防止 Claude Code 在启动时向操作系统注册 `claude-cli://` 协议处理程序。[深链接](/zh-CN/deep-links)让外部工具通过预填充的提示打开 Claude Code 会话。在协议处理程序注册受限或单独管理的环境中很有用 | `"disable"` |

217| `disabledMcpjsonServers` | 要拒绝的 `.mcp.json` 文件中特定 MCP servers 的列表 | `["filesystem"]` |250| `disabledMcpjsonServers` | 要拒绝的 `.mcp.json` 文件中特定 MCP servers 的列表 | `["filesystem"]` |

218| `disableRemoteControl` | {/* min-version: 2.1.128 */}禁用[远程控制](/zh-CN/remote-control):阻止 `claude remote-control`、`--remote-control` 标志、自动启动和会话内切换。通常放在[managed 设置](/zh-CN/permissions#managed-settings)中用于每设备 MDM 强制执行,但适用于任何作用域。需要 Claude Code v2.1.128 或更高版本 | `true` |251| `disableRemoteControl` | {/* min-version: 2.1.128 */}禁用[远程控制](/zh-CN/remote-control):阻止 `claude remote-control`、`--remote-control` 标志、自动启动和会话内切换。通常放在[managed 设置](/zh-CN/permissions#managed-settings)中用于每设备 MDM 强制执行,但适用于任何作用域。需要 Claude Code v2.1.128 或更高版本 | `true` |


222| `effortLevel` | 跨会话持久化[努力级别](/zh-CN/model-config#adjust-effort-level)。接受 `"low"`、`"medium"`、`"high"` 或 `"xhigh"`。当您运行 `/effort` 时自动写入,带有这些值之一。`--effort` 和 [`CLAUDE_CODE_EFFORT_LEVEL`](/zh-CN/env-vars) 覆盖此用于一个会话。请参阅[调整努力级别](/zh-CN/model-config#adjust-effort-level)了解支持的模型 | `"xhigh"` |255| `effortLevel` | 跨会话持久化[努力级别](/zh-CN/model-config#adjust-effort-level)。接受 `"low"`、`"medium"`、`"high"` 或 `"xhigh"`。当您运行 `/effort` 时自动写入,带有这些值之一。`--effort` 和 [`CLAUDE_CODE_EFFORT_LEVEL`](/zh-CN/env-vars) 覆盖此用于一个会话。请参阅[调整努力级别](/zh-CN/model-config#adjust-effort-level)了解支持的模型 | `"xhigh"` |

223| `enableAllProjectMcpServers` | 自动批准项目 `.mcp.json` 文件中定义的所有 MCP servers | `true` |256| `enableAllProjectMcpServers` | 自动批准项目 `.mcp.json` 文件中定义的所有 MCP servers | `true` |

224| `enabledMcpjsonServers` | 要批准的 `.mcp.json` 文件中特定 MCP servers 的列表 | `["memory", "github"]` |257| `enabledMcpjsonServers` | 要批准的 `.mcp.json` 文件中特定 MCP servers 的列表 | `["memory", "github"]` |

258| `enforceAvailableModels` | {/* min-version: 2.1.175 */}当为 `true` 且 `availableModels` 是 managed 或策略设置中的非空列表时,默认模型也被限制在允许列表中。请参阅[限制模型选择](/zh-CN/model-config#restrict-model-selection)了解详情和[合并行为](/zh-CN/model-config#merge-behavior)当 `availableModels` 在多个级别设置时。需要 Claude Code v2.1.175 或更高版本 | `true` |

225| `env` | 应用于每个会话和 Claude Code 从其生成的子进程的环境变量。{/* min-version: 2.1.143 */}从 v2.1.143 开始,此处设置的 `NO_COLOR` 和 `FORCE_COLOR` 被传递到子进程,但不改变 Claude Code 自己的界面颜色。在启动 `claude` 前在您的 shell 中设置这些以改变界面颜色 | `{"FOO": "bar"}` |259| `env` | 应用于每个会话和 Claude Code 从其生成的子进程的环境变量。{/* min-version: 2.1.143 */}从 v2.1.143 开始,此处设置的 `NO_COLOR` 和 `FORCE_COLOR` 被传递到子进程,但不改变 Claude Code 自己的界面颜色。在启动 `claude` 前在您的 shell 中设置这些以改变界面颜色 | `{"FOO": "bar"}` |

260| `fallbackModel` | 当主模型过载或不可用时按顺序尝试的备用模型。Claude Code 为该轮的其余部分切换到链中的下一个可用模型并显示通知。`"default"` 扩展为默认模型。链限制为三个模型;额外条目被忽略。与大多数数组设置不同,此键不跨设置文件合并:定义它的最高优先级文件提供整个链。[`--fallback-model`](/zh-CN/cli-reference#cli-flags) 标志覆盖此用于一个会话。请参阅[备用模型链](/zh-CN/model-config#fallback-model-chains) | `["claude-sonnet-4-6", "claude-haiku-4-5"]` |

226| `fastModePerSessionOptIn` | 当为 `true` 时,快速模式不会跨会话持久化。每个会话都以快速模式关闭开始,需要用户使用 `/fast` 启用它。用户的快速模式偏好仍被保存。请参阅[需要每个会话的选择加入](/zh-CN/fast-mode#require-per-session-opt-in) | `true` |261| `fastModePerSessionOptIn` | 当为 `true` 时,快速模式不会跨会话持久化。每个会话都以快速模式关闭开始,需要用户使用 `/fast` 启用它。用户的快速模式偏好仍被保存。请参阅[需要每个会话的选择加入](/zh-CN/fast-mode#require-per-session-opt-in) | `true` |

227| `feedbackSurveyRate` | 概率(0–1)[会话质量调查](/zh-CN/data-usage#session-quality-surveys)在符合条件时出现。设置为 `0` 以完全抑制,或在 `env` 中设置 [`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY`](/zh-CN/env-vars)。在使用 Bedrock、Vertex 或 Foundry 时很有用,其中默认采样率不适用 | `0.05` |262| `feedbackSurveyRate` | 概率(0–1)[会话质量调查](/zh-CN/data-usage#session-quality-surveys)在符合条件时出现。设置为 `0` 以完全抑制,或在 `env` 中设置 [`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY`](/zh-CN/env-vars)。在使用 Bedrock、Vertex 或 Foundry 时很有用,其中默认采样率不适用 | `0.05` |

263| `fileCheckpointingEnabled` | {/* min-version: 2.1.119 */}在每次编辑前快照文件,以便 [`/rewind`](/zh-CN/checkpointing) 可以恢复它们。默认:`true`。在 `/config` 中显示为**回退代码(checkpoints)**。要通过环境变量禁用,请在 `env` 中设置 [`CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING`](/zh-CN/env-vars) | `false` |

228| `fileSuggestion` | 为 `@` 文件自动完成配置自定义脚本。请参阅[文件建议设置](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |264| `fileSuggestion` | 为 `@` 文件自动完成配置自定义脚本。请参阅[文件建议设置](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |

265| `footerLinksRegexes` | {/* min-version: 2.1.176 */}当正则表达式匹配轮次输出时渲染额外的可点击徽章在页脚中。每个条目有一个 `pattern`、一个 URL 模板,其中 `{name}` 占位符从命名捕获组填充,以及一个可选的 `label`。仅从用户、`--settings` 标志和 managed 设置读取。请参阅[页脚链接徽章](#footer-link-badges)了解 URL 约束、方案允许列表和限制。需要 Claude Code v2.1.176 或更高版本 | `[{"type": "regex", "pattern": "\\b(?<key>PROJ-\\d+)\\b", "url": "https://issues.example.com/browse/{key}", "label": "{key}"}]` |

229| `forceLoginMethod` | 使用 `claudeai` 限制登录到 Claude.ai 账户,`console` 限制登录到 Claude Console 账户。在 managed 设置中设置时,由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止,因为两个值都无法在没有第一方 OAuth 的情况下满足。第三方提供商会话(如 Bedrock、Vertex 和 Foundry)不被阻止:它们针对您的云提供商而不是 Anthropic 进行身份验证 | `claudeai` |266| `forceLoginMethod` | 使用 `claudeai` 限制登录到 Claude.ai 账户,`console` 限制登录到 Claude Console 账户。在 managed 设置中设置时,由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止,因为两个值都无法在没有第一方 OAuth 的情况下满足。第三方提供商会话(如 Bedrock、Vertex 和 Foundry)不被阻止:它们针对您的云提供商而不是 Anthropic 进行身份验证 | `claudeai` |

230| `forceLoginOrgUUID` | 要求登录属于特定 Anthropic 组织。接受单个 UUID 字符串(也在登录期间预选该组织)或 UUID 数组,其中任何列出的组织都被接受而无需预选。在 managed 设置中设置时,如果经过身份验证的账户不属于列出的组织,登录失败;由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止,因为无法为它们验证组织成员身份。第三方提供商会话(如 Bedrock、Vertex 和 Foundry)不被阻止:使用您的云 IAM 限制哪些云账户可以被使用。空数组失败关闭并使用配置错误消息阻止登录 | `"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"` 或 `["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]` |267| `forceLoginOrgUUID` | 要求登录属于特定 Anthropic 组织。接受单个 UUID 字符串(也在登录期间预选该组织)或 UUID 数组,其中任何列出的组织都被接受而无需预选。在 managed 设置中设置时,如果经过身份验证的账户不属于列出的组织,登录失败;由 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 进行身份验证的会话在启动时被阻止,因为无法为它们验证组织成员身份。第三方提供商会话(如 Bedrock、Vertex 和 Foundry)不被阻止:使用您的云 IAM 限制哪些云账户可以被使用。空数组失败关闭并使用配置错误消息阻止登录 | `"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"` 或 `["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]` |

231| `forceRemoteSettingsRefresh` | (仅 Managed 设置)阻止 CLI 启动,直到从服务器新鲜获取远程 managed 设置。如果获取失败,CLI 退出而不是继续使用缓存或无设置。未设置时,启动继续而不等待远程设置。请参阅[失败关闭强制执行](/zh-CN/server-managed-settings#enforce-fail-closed-startup) | `true` |268| `forceRemoteSettingsRefresh` | (仅 Managed 设置)阻止 CLI 启动,直到从服务器新鲜获取远程 managed 设置。如果获取失败,CLI 退出而不是继续使用缓存或无设置。未设置时,启动继续而不等待远程设置。请参阅[失败关闭强制执行](/zh-CN/server-managed-settings#enforce-fail-closed-startup) | `true` |


234| `httpHookAllowedEnvVars` | HTTP hooks 可能插入到标头中的环境变量名称的允许列表。设置后,每个 hook 的有效 `allowedEnvVars` 是与此列表的交集。未定义 = 无限制。数组跨设置源合并。请参阅 [Hook 配置](#hook-configuration) | `["MY_TOKEN", "HOOK_SECRET"]` |271| `httpHookAllowedEnvVars` | HTTP hooks 可能插入到标头中的环境变量名称的允许列表。设置后,每个 hook 的有效 `allowedEnvVars` 是与此列表的交集。未定义 = 无限制。数组跨设置源合并。请参阅 [Hook 配置](#hook-configuration) | `["MY_TOKEN", "HOOK_SECRET"]` |

235| `includeCoAuthoredBy` | **已弃用**:改用 `attribution`。是否在 git 提交和拉取请求中包含 `co-authored-by Claude` 署名(默认:`true`) | `false` |272| `includeCoAuthoredBy` | **已弃用**:改用 `attribution`。是否在 git 提交和拉取请求中包含 `co-authored-by Claude` 署名(默认:`true`) | `false` |

236| `includeGitInstructions` | 在 Claude 的系统提示中包含内置提交和 PR 工作流说明和 git 状态快照(默认:`true`)。设置为 `false` 以删除这两者,例如在使用您自己的 git 工作流 skills 时。`CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` 环境变量在设置时优先于此设置 | `false` |273| `includeGitInstructions` | 在 Claude 的系统提示中包含内置提交和 PR 工作流说明和 git 状态快照(默认:`true`)。设置为 `false` 以删除这两者,例如在使用您自己的 git 工作流 skills 时。`CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` 环境变量在设置时优先于此设置 | `false` |

237| `language` | 配置 Claude 的首选响应语言(例如 `"japanese"`、`"spanish"``"french"`)。Claude 将默认以此语言响应也设置[语音听写](/zh-CN/voice-dictation#change-the-dictation-language)语言 | `"japanese"` |274| `inputNeededNotifEnabled` | {/* min-version: 2.1.119 */}当[远程控制](/zh-CN/remote-control)已连接时,当权限提示或问题等待您的输入时向您的手机发送推送通知。默认:`false`。在 `/config` 中显示为**需要操作时推送**请参阅[移动推送通知](/zh-CN/remote-control#mobile-push-notifications)。需要 Claude Code v2.1.119 或更高版本 | `true` |

275| `language` | 配置 Claude 的首选响应语言(例如 `"japanese"`、`"spanish"`、`"french"`)。Claude 将默认以此语言响应。也设置[语音听写](/zh-CN/voice-dictation#change-the-dictation-language)语言和自动生成的会话标题。{/* min-version: 2.1.176 */}从 v2.1.176 开始,未设置时,会话标题与您的对话语言匹配 | `"japanese"` |

238| `maxSkillDescriptionChars` | {/* min-version: 2.1.105 */}[skill 列表](/zh-CN/skills#skill-descriptions-are-cut-short)中每个 skill 的 `description` 和 `when_to_use` 文本组合的字符上限(默认:`1536`)。超过此长度的文本被截断。提高以保持长描述完整,代价是每轮更多上下文;降低以在 [`skillListingBudgetFraction`](#available-settings) 下适应更多 skills。需要 Claude Code v2.1.105 或更高版本 | `2048` |276| `maxSkillDescriptionChars` | {/* min-version: 2.1.105 */}[skill 列表](/zh-CN/skills#skill-descriptions-are-cut-short)中每个 skill 的 `description` 和 `when_to_use` 文本组合的字符上限(默认:`1536`)。超过此长度的文本被截断。提高以保持长描述完整,代价是每轮更多上下文;降低以在 [`skillListingBudgetFraction`](#available-settings) 下适应更多 skills。需要 Claude Code v2.1.105 或更高版本 | `2048` |

239| `minimumVersion` | 防止后台自动更新和 `claude update` 安装低于此版本的版本。从 `"latest"` 渠道切换到 `"stable"` 时通过 `/config` 提示您保持在当前版本或允许降级。选择保持设置此值。也在[managed 设置](/zh-CN/permissions#managed-settings)中有用,以固定组织范围的最低版本 | `"2.1.100"` |277| `minimumVersion` | 防止后台自动更新和 `claude update` 安装低于此版本的版本。从 `"latest"` 渠道切换到 `"stable"` 时通过 `/config` 提示您保持在当前版本或允许降级。选择保持设置此值。也在[managed 设置](/zh-CN/permissions#managed-settings)中有用,以固定组织范围的最低版本。对于阻止启动的硬下限,请参阅 `requiredMinimumVersion` | `"2.1.100"` |

240| `model` | 覆盖用于 Claude Code 的默认模型。`--model` 和 [`ANTHROPIC_MODEL`](/zh-CN/model-config#environment-variables) 覆盖此用于一个会话 | `"claude-sonnet-4-6"` |278| `model` | 覆盖用于 Claude Code 的默认模型。`--model` 和 [`ANTHROPIC_MODEL`](/zh-CN/model-config#environment-variables) 覆盖此用于一个会话 | `"claude-sonnet-4-6"` |

241| `modelOverrides` | 将 Anthropic 模型 ID 映射到特定于提供商的模型 ID,例如 Bedrock 推理配置文件 ARN。每个模型选择器条目在调用提供商 API 时使用其映射值。请参阅[按版本覆盖模型 ID](/zh-CN/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |279| `modelOverrides` | 将 Anthropic 模型 ID 映射到特定于提供商的模型 ID,例如 Bedrock 推理配置文件 ARN。每个模型选择器条目在调用提供商 API 时使用其映射值。请参阅[按版本覆盖模型 ID](/zh-CN/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

242| `otelHeadersHelper` | 生成动态 OpenTelemetry 标头的脚本。在启动时和定期运行。使用 [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/zh-CN/env-vars) 设置刷新间隔。请参阅[动态标头](/zh-CN/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |280| `otelHeadersHelper` | 生成动态 OpenTelemetry 标头的脚本。在启动时和定期运行。使用 [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/zh-CN/env-vars) 设置刷新间隔。请参阅[动态标头](/zh-CN/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |


244| `parentSettingsBehavior` | {/* min-version: 2.1.133 */}(仅 Managed 设置)控制由嵌入主机进程(例如 Agent SDK 或 IDE 扩展)以编程方式提供的 managed 设置在同时存在管理员部署的 managed 层时是否应用。`"first-wins"`:父级提供的设置被丢弃,仅应用管理员层。`"merge"`:父级提供的设置在管理员层下应用,经过筛选以便它们可以收紧策略但不能放松策略。当未部署管理员层时无效。默认:`"first-wins"`。需要 Claude Code v2.1.133 或更高版本 | `"merge"` |282| `parentSettingsBehavior` | {/* min-version: 2.1.133 */}(仅 Managed 设置)控制由嵌入主机进程(例如 Agent SDK 或 IDE 扩展)以编程方式提供的 managed 设置在同时存在管理员部署的 managed 层时是否应用。`"first-wins"`:父级提供的设置被丢弃,仅应用管理员层。`"merge"`:父级提供的设置在管理员层下应用,经过筛选以便它们可以收紧策略但不能放松策略。当未部署管理员层时无效。默认:`"first-wins"`。需要 Claude Code v2.1.133 或更高版本 | `"merge"` |

245| `permissions` | 请参阅下表了解权限的结构。 | |283| `permissions` | 请参阅下表了解权限的结构。 | |

246| `plansDirectory` | 自定义 Plan Mode 文件的存储位置。路径相对于项目根目录。默认:`~/.claude/plans` | `"./plans"` |284| `plansDirectory` | 自定义 Plan Mode 文件的存储位置。路径相对于项目根目录。默认:`~/.claude/plans` | `"./plans"` |

247| `pluginSuggestionMarketplaces` | (仅 Managed 设置)其插件可以显示为上下文安装建议的市场名称,除了官方市场。建议来自每个插件在其市场条目中的 `relevance` 声明。名称仅在市场在机器上注册且其注册源也在 managed 设置中声明时才生效,作为该名称的 `extraKnownMarketplaces` 条目或 `strictKnownMarketplaces` 的条目。从不同源注册的市场在允许列表名称下被忽略。 | `["acme-corp-plugins"]` |285| `pluginSuggestionMarketplaces` | (仅 Managed 设置)其插件可以显示为上下文安装建议的市场名称。建议来自每个插件在其市场条目中的 `relevance` 声明。名称仅在市场在机器上注册且其注册源也在 managed 设置中声明时才生效,作为该名称的 `extraKnownMarketplaces` 条目或 `strictKnownMarketplaces` 的条目。从不同源注册的市场在允许列表名称下被忽略。官方市场豁免于源要求:仅允许列表其名称就足够了,因为该名称只能从官方 Anthropic 源注册。 | `["acme-corp-plugins"]` |

248| `pluginTrustMessage` | (仅 Managed 设置)在安装前显示的插件信任警告中附加的自定义消息。使用此添加组织特定的上下文,例如确认来自您内部市场的插件已获批准。 | `"All plugins from our marketplace are approved by IT"` |286| `pluginTrustMessage` | (仅 Managed 设置)在安装前显示的插件信任警告中附加的自定义消息。使用此添加组织特定的上下文,例如确认来自您内部市场的插件已获批准。 | `"All plugins from our marketplace are approved by IT"` |

249| `policyHelper` | {/* min-version: 2.1.136 */}管理员部署的可执行文件,在启动时动态计算 managed 设置。仅从 MDM 或系统 `managed-settings.json` 文件受尊重。请参阅[使用策略助手计算 managed 设置](#compute-managed-settings-with-a-policy-helper)。需要 Claude Code v2.1.136 或更高版本 | `{"path": "/usr/local/bin/claude-policy"}` |287| `policyHelper` | {/* min-version: 2.1.136 */}管理员部署的可执行文件,在启动时动态计算 managed 设置。仅从 MDM 或系统 `managed-settings.json` 文件受尊重。请参阅[使用策略助手计算 managed 设置](#compute-managed-settings-with-a-policy-helper)。需要 Claude Code v2.1.136 或更高版本 | `{"path": "/usr/local/bin/claude-policy"}` |

250| `preferredNotifChannel` | 任务完成和权限提示通知的方法:`"auto"`、`"terminal_bell"`、`"iterm2"`、`"iterm2_with_bell"`、`"kitty"`、`"ghostty"` 或 `"notifications_disabled"`。默认:`"auto"`,在 iTerm2、Ghostty 和 Kitty 中发送桌面通知,在其他终端中不执行任何操作。设置 `"terminal_bell"` 以在任何终端中响铃。在 `/config` 中显示为**通知**。请参阅[获取终端铃声或通知](/zh-CN/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |288| `preferredNotifChannel` | 任务完成和权限提示通知的方法:`"auto"`、`"terminal_bell"`、`"iterm2"`、`"iterm2_with_bell"`、`"kitty"`、`"ghostty"` 或 `"notifications_disabled"`。默认:`"auto"`,在 iTerm2、Ghostty 和 Kitty 中发送桌面通知,在其他终端中不执行任何操作。设置 `"terminal_bell"` 以在任何终端中响铃。在 `/config` 中显示为**通知**。请参阅[获取终端铃声或通知](/zh-CN/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

251| `prefersReducedMotion` | 减少或禁用 UI 动画(微调器、闪烁、闪光效果)以实现可访问性 | `true` |289| `prefersReducedMotion` | 减少或禁用 UI 动画(微调器、闪烁、闪光效果)以实现可访问性 | `true` |

252| `prUrlTemplate` | PR 徽章的 URL 模板,显示在页脚和工具结果摘要中。替换来自 `gh` 报告的 PR URL 中的 `{host}`、`{owner}`、`{repo}`、`{number}` 和 `{url}`。使用指向内部代码审查工具而不是 `github.com` 的 PR 链接。不影响 Claude 散文中的 `#123` 自动链接 | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |290| `prUrlTemplate` | PR 徽章的 URL 模板,显示在页脚和工具结果摘要中。替换来自 `gh` 报告的 PR URL 中的 `{host}`、`{owner}`、`{repo}`、`{number}` 和 `{url}`。使用指向内部代码审查工具而不是 `github.com` 的 PR 链接。不影响 Claude 散文中的 `#123` 自动链接 | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |

291| `requiredMaximumVersion` | 仅 Managed 设置。允许启动的最大 Claude Code 版本。如果运行版本较新,Claude Code 在启动时退出并指示用户通过组织的批准方法安装批准的版本;`claude install <version>` 也可能有效。后台自动更新和 `claude update` 跳过高于上限的版本,因此在范围内的安装保持在范围内。`claude update`、`claude install` 和 `claude doctor` 在上限以上保持工作,以便用户可以恢复。早于此设置的版本忽略它 | `"2.1.150"` |

292| `requiredMinimumVersion` | 仅 Managed 设置。启动所需的最小 Claude Code 版本。如果运行版本较旧,Claude Code 在启动时退出并指示用户通过组织的批准方法更新。`claude update`、`claude install` 和 `claude doctor` 在下限以下保持工作,以便用户可以恢复。与 `minimumVersion` 不同,后者防止降级但从不阻止启动。早于此设置的版本忽略它 | `"2.1.150"` |

253| `respectGitignore` | 控制 `@` 文件选择器是否尊重 `.gitignore` 模式。当为 `true`(默认)时,匹配 `.gitignore` 模式的文件被排除在建议之外 | `false` |293| `respectGitignore` | 控制 `@` 文件选择器是否尊重 `.gitignore` 模式。当为 `true`(默认)时,匹配 `.gitignore` 模式的文件被排除在建议之外 | `false` |

254| `showClearContextOnPlanAccept` | 在 Plan Mode 接受屏幕上显示"清除上下文"选项。默认为 `false`。设置为 `true` 以恢复该选项 | `true` |294| `showClearContextOnPlanAccept` | 在 Plan Mode 接受屏幕上显示"清除上下文"选项。默认为 `false`。设置为 `true` 以恢复该选项 | `true` |

255| `showThinkingSummaries` | 在交互式会话中显示[扩展思考](/zh-CN/model-config#extended-thinking)摘要。未设置或 `false`(交互模式中的默认值)时,思考块由 API 编辑并显示为折叠的存根。编辑仅改变您看到的内容,而不是模型生成的内容:要减少思考支出,[降低预算或禁用思考](/zh-CN/model-config#extended-thinking)。此设置在非交互模式(`-p`)、Agent SDK 或 IDE 扩展(如 VS Code)中无效 | `true` |295| `showThinkingSummaries` | 在交互式会话中显示[扩展思考](/zh-CN/model-config#extended-thinking)摘要。未设置或 `false`(交互模式中的默认值)时,思考块由 API 编辑并显示为折叠的存根。编辑仅改变您看到的内容,而不是模型生成的内容:要减少思考支出,[降低预算或禁用思考](/zh-CN/model-config#extended-thinking)。此设置在非交互模式(`-p`)、Agent SDK 或 IDE 扩展(如 VS Code)中无效 | `true` |


265| `strictKnownMarketplaces` | (仅 Managed 设置)插件市场源的允许列表。未定义 = 无限制,空数组 = 锁定。在市场添加和插件安装、更新、刷新和自动更新时强制执行,因此在设置策略之前添加的市场无法用于获取插件。请参阅 [Managed 市场限制](/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "acme-corp/plugins" }]` |305| `strictKnownMarketplaces` | (仅 Managed 设置)插件市场源的允许列表。未定义 = 无限制,空数组 = 锁定。在市场添加和插件安装、更新、刷新和自动更新时强制执行,因此在设置策略之前添加的市场无法用于获取插件。请参阅 [Managed 市场限制](/zh-CN/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "acme-corp/plugins" }]` |

266| `strictPluginOnlyCustomization` | (仅 Managed 设置)阻止 skills、agents、hooks 和 MCP servers 来自用户和项目源,因此它们只能来自插件或 managed 设置。`true` 锁定所有四个表面;数组仅锁定命名的表面。请参阅 [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) | `["skills", "hooks"]` |306| `strictPluginOnlyCustomization` | (仅 Managed 设置)阻止 skills、agents、hooks 和 MCP servers 来自用户和项目源,因此它们只能来自插件或 managed 设置。`true` 锁定所有四个表面;数组仅锁定命名的表面。请参阅 [`strictPluginOnlyCustomization`](#strictpluginonlycustomization) | `["skills", "hooks"]` |

267| `syntaxHighlightingDisabled` | 禁用 diffs、代码块和文件预览中的语法高亮 | `true` |307| `syntaxHighlightingDisabled` | 禁用 diffs、代码块和文件预览中的语法高亮 | `true` |

268| `teammateMode` | [agent team](/zh-CN/agent-teams) 队友的显示方式:`auto`(在 tmux 或 iTerm2 中选择分割窗格,否则进程内)、`in-process` 或 `tmux`。`--teammate-mode` 覆盖此用于一个会话。请参阅[选择显示模式](/zh-CN/agent-teams#choose-a-display-mode) | `"in-process"` |308| `teammateMode` | [agent team](/zh-CN/agent-teams) 队友的显示方式:`auto`(在 tmux 或 iTerm2 中选择分割窗格,否则进程内)、`in-process` 或 `tmux`(使用 tmux 或 iTerm2 选择分割窗格,从您的终端检测)。`--teammate-mode` 覆盖此用于一个会话。请参阅[选择显示模式](/zh-CN/agent-teams#choose-a-display-mode) | `"in-process"` |

269| `terminalProgressBarEnabled` | 在支持的终端中显示终端进度条:ConEmu、Ghostty 1.2.0+ 和 iTerm2 3.6.6+。默认:`true`。在 `/config` 中显示为**终端进度条** | `false` |309| `terminalProgressBarEnabled` | 在支持的终端中显示终端进度条:ConEmu、Ghostty 1.2.0+ 和 iTerm2 3.6.6+。默认:`true`。在 `/config` 中显示为**终端进度条** | `false` |

270| `tui` | 终端 UI 渲染器。使用 `"fullscreen"` 获取无闪烁的[替代屏幕渲染器](/zh-CN/fullscreen)具有虚拟化滚动条。使用 `"default"` 获取经典主屏幕渲染器。通过 `/tui` 设置您也可以设置 [`CLAUDE_CODE_NO_FLICKER`](/zh-CN/env-vars) 环境变量 | `"fullscreen"` |310| `theme` | {/* min-version: 2.1.119 */}界面的颜色主题:`"auto"`、`"dark"`、`"light"`、`"dark-daltonized"`、`"light-daltonized"`、`"dark-ansi"`、`"light-ansi"` 或自定义主题参考 `"custom:<slug>"` `"custom:<plugin-name>:<slug>"`。默认:`"dark"`。请参阅[创建自定义主题](/zh-CN/terminal-config#create-a-custom-theme)。在 `/config` 中显示为**主题** | `"dark"` |

311| `tui` | 终端 UI 渲染器。使用 `"fullscreen"` 获取无闪烁的[替代屏幕渲染器](/zh-CN/fullscreen),具有虚拟化滚动条。使用 `"default"` 获取经典主屏幕渲染器。通过 `/tui` 设置。您也可以设置 [`CLAUDE_CODE_NO_FLICKER`](/zh-CN/env-vars) 环境变量。后台会话从[代理视图](/zh-CN/agent-view)打开始终使用全屏渲染器,无论此设置如何 | `"fullscreen"` |

271| `ultracode` | 为会话打开 [ultracode](/zh-CN/workflows#let-claude-decide-with-ultracode)。仅限会话,不从 `settings.json` 读取。通过 `/effort ultracode`、`--settings` 或 Agent SDK 控制请求设置 | `true` |312| `ultracode` | 为会话打开 [ultracode](/zh-CN/workflows#let-claude-decide-with-ultracode)。仅限会话,不从 `settings.json` 读取。通过 `/effort ultracode`、`--settings` 或 Agent SDK 控制请求设置 | `true` |

272| `useAutoModeDuringPlan` | Plan Mode 在自动模式可用时是否使用自动模式语义。默认:`true`。不从共享项目设置读取。在 `/config` 中显示为"在计划期间使用自动模式" | `false` |313| `useAutoModeDuringPlan` | Plan Mode 在自动模式可用时是否使用自动模式语义。默认:`true`。不从共享项目设置读取。在 `/config` 中显示为"在计划期间使用自动模式" | `false` |

314| `verbose` | {/* min-version: 2.1.119 */}显示完整工具输出而不是截断的摘要。默认:`false`。在 `/config` 中显示为**详细输出**。`--verbose` 标志覆盖此用于一个会话 | `true` |

273| `viewMode` | 启动时的默认记录视图模式:`"default"`、`"verbose"` 或 `"focus"`。设置时覆盖粘性 `/focus` 选择。`--verbose` 标志覆盖此用于一个会话 | `"verbose"` |315| `viewMode` | 启动时的默认记录视图模式:`"default"`、`"verbose"` 或 `"focus"`。设置时覆盖粘性 `/focus` 选择。`--verbose` 标志覆盖此用于一个会话 | `"verbose"` |

274| `voice` | [语音听写](/zh-CN/voice-dictation)设置:`enabled` 打开听写,`mode` 选择 `"hold"` 或 `"tap"`,`autoSubmit` 在保持模式下按键释放时发送提示。当您运行 `/voice` 时自动写入。需要 Claude.ai 账户 | `{ "enabled": true, "mode": "tap" }` |316| `voice` | [语音听写](/zh-CN/voice-dictation)设置:`enabled` 打开听写,`mode` 选择 `"hold"` 或 `"tap"`,`autoSubmit` 在保持模式下按键释放时发送提示。当您运行 `/voice` 时自动写入。需要 Claude.ai 账户 | `{ "enabled": true, "mode": "tap" }` |

275| `voiceEnabled` | `voice.enabled` 的旧别名。优先使用 `voice` 对象 | `true` |317| `voiceEnabled` | `voice.enabled` 的旧别名。优先使用 `voice` 对象 | `true` |

318| `wheelScrollAccelerationEnabled` | {/* min-version: 2.1.174 */}在[全屏渲染](/zh-CN/fullscreen#mouse-wheel-scrolling)中,加速鼠标滚轮滚动速度在快速滚动期间。默认:`true`。设置为 `false` 以获得每个滚轮缺口的恒定滚动速率。需要 Claude Code v2.1.174 或更高版本 | `false` |

276| `workflowKeywordTriggerEnabled` | {/* min-version: 2.1.157 */}提示中的单词 `ultracode` 是否触发[动态工作流](/zh-CN/workflows#ask-for-a-workflow-in-your-prompt)。设置为 `false` 以键入单词而不触发一个。Ultracode 努力设置、`/workflows` 和保存的工作流命令不受影响。默认:`true`。在 `/config` 中显示为**Ultracode 关键字触发**。在 v2.1.157 中添加;在 v2.1.160 之前触发关键字是 `workflow` | `false` |319| `workflowKeywordTriggerEnabled` | {/* min-version: 2.1.157 */}提示中的单词 `ultracode` 是否触发[动态工作流](/zh-CN/workflows#ask-for-a-workflow-in-your-prompt)。设置为 `false` 以键入单词而不触发一个。Ultracode 努力设置、`/workflows` 和保存的工作流命令不受影响。默认:`true`。在 `/config` 中显示为**Ultracode 关键字触发**。在 v2.1.157 中添加;在 v2.1.160 之前触发关键字是 `workflow` | `false` |

277| `wslInheritsWindowsSettings` | (仅 Windows managed 设置)当为 `true` 时,WSL 上的 Claude Code 除了 `/etc/claude-code` 外还从 Windows 策略链读取 managed 设置,Windows 源优先。仅在 HKLM 注册表项或 `C:\Program Files\ClaudeCode\managed-settings.json` 中设置时被尊重,两者都需要 Windows 管理员权限才能写入。为了让 HKCU 策略也在 WSL 上应用,该标志还必须在 HKCU 本身中设置。对本机 Windows 无效 | `true` |320| `wslInheritsWindowsSettings` | (仅 Windows managed 设置)当为 `true` 时,WSL 上的 Claude Code 除了 `/etc/claude-code` 外还从 Windows 策略链读取 managed 设置,Windows 源优先。仅在 HKLM 注册表项或 `C:\Program Files\ClaudeCode\managed-settings.json` 中设置时被尊重,两者都需要 Windows 管理员权限才能写入。为了让 HKCU 策略也在 WSL 上应用,该标志还必须在 HKCU 本身中设置。对本机 Windows 无效 | `true` |

278 321 


283这些设置存储在 `~/.claude.json` 中,而不是 `settings.json`。将它们添加到 `settings.json` 将触发架构验证错误。326这些设置存储在 `~/.claude.json` 中,而不是 `settings.json`。将它们添加到 `settings.json` 将触发架构验证错误。

284 327 

285<Note>328<Note>

286 v2.1.119 之前的版本也在此处而不是在 `settings.json` 中存储 `autoScrollEnabled`、`editorMode`、`showTurnDuration`、`teammateMode` 和 `terminalProgressBarEnabled`。329 v2.1.119 之前的版本也在此处而不是在 `settings.json` 中存储 `theme`、`verbose`、`editorMode`、`autoCompactEnabled` 和 `preferredNotifChannel`。

287</Note>330</Note>

288 331 

289| 键 | 描述 | 示例 |332| 键 | 描述 | 示例 |

290| :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------- |333| :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------- |

291| `autoConnectIde` | 当 Claude Code 从外部终端启动时自动连接到运行的 IDE。默认:`false`。在 VS Code 或 JetBrains 终端外运行时在 `/config` 中显示为**自动连接到 IDE(外部终端)** | `true` |334| `autoConnectIde` | 当 Claude Code 从外部终端启动时自动连接到运行的 IDE。默认:`false`。在 VS Code 或 JetBrains 终端外运行时在 `/config` 中显示为**自动连接到 IDE(外部终端)**。[`CLAUDE_CODE_AUTO_CONNECT_IDE`](/zh-CN/env-vars) 环境变量在设置时覆盖此 | `true` |

292| `autoInstallIdeExtension` | 从 VS Code 终端运行时自动安装 Claude Code IDE 扩展。默认:`true`。在 VS Code 或 JetBrains 终端内运行时在 `/config` 中显示为**自动安装 IDE 扩展**。您也可以设置 [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/zh-CN/env-vars) 环境变量 | `false` |335| `autoInstallIdeExtension` | 从 VS Code 终端运行时自动安装 Claude Code IDE 扩展。默认:`true`。在 VS Code 或 JetBrains 终端内运行时在 `/config` 中显示为**自动安装 IDE 扩展**。您也可以设置 [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/zh-CN/env-vars) 环境变量 | `false` |

293| `externalEditorContext` | 当您使用 `Ctrl+G` 打开外部编辑器时,将 Claude 的上一个响应作为 `#` 注释上下文前置。默认:`false`。在 `/config` 中显示为**在外部编辑器中显示最后响应** | `true` |336| `externalEditorContext` | 当您使用 `Ctrl+G` 打开外部编辑器时,将 Claude 的上一个响应作为 `#` 注释上下文前置。默认:`false`。在 `/config` 中显示为**在外部编辑器中显示最后响应** | `true` |

294| `teammateDefaultModel` | [agent team](/zh-CN/agent-teams) 队友的默认模型,当生成提示未指定时。设置为模型别名(如 `"sonnet"`),或 `null` 以继承主导的当前 `/model` 选择。在 `/config` 中显示为**默认队友模型** | `"sonnet"` |337| `teammateDefaultModel` | [agent team](/zh-CN/agent-teams) 队友的默认模型,当生成提示未指定时。设置为模型别名(如 `"sonnet"`),或 `null` 以继承主导的当前 `/model` 选择。在 `/config` 中显示为**默认队友模型** | `"sonnet"` |


314 357 

315| 键 | 描述 | 示例 |358| 键 | 描述 | 示例 |

316| :---------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |359| :---------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |

317| `allow` | 允许工具使用的权限规则数组。请参阅下面的[权限规则语法](#permission-rule-syntax)了解模式匹配详情 | `[ "Bash(git diff *)" ]` |360| `allow` | 允许工具使用的权限规则数组。工具名称 globs 仅在字面 `mcp__<server>__` 前缀后的工具位置支持,例如 `mcp__github__get_*`;server 段必须无 glob。请参阅下面的[权限规则语法](#permission-rule-syntax)了解模式匹配详情 | `[ "Bash(git diff *)" ]` |

318| `ask` | 在工具使用时要求确认的权限规则数组。请参阅下面的[权限规则语法](#permission-rule-syntax) | `[ "Bash(git push *)" ]` |361| `ask` | 在工具使用时要求确认的权限规则数组。请参阅下面的[权限规则语法](#permission-rule-syntax) | `[ "Bash(git push *)" ]` |

319| `deny` | 拒绝工具使用的权限规则数组。使用此排除敏感文件不被 Claude Code 访问。请参阅[权限规则语法](#permission-rule-syntax)和 [Bash 权限限制](/zh-CN/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |362| `deny` | 拒绝工具使用的权限规则数组。使用此排除敏感文件不被 Claude Code 访问。工具名称接受 glob 模式:`"*"` 拒绝每个工具,`"mcp__*"` 拒绝所有 MCP 工具。请参阅[权限规则语法](#permission-rule-syntax)和 [Bash 权限限制](/zh-CN/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |

320| `additionalDirectories` | Claude 有权访问的额外[工作目录](/zh-CN/permissions#working-directories)。大多数 `.claude/` 配置[未从这些目录发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) | `[ "../docs/" ]` |363| `additionalDirectories` | Claude 有权访问的额外[工作目录](/zh-CN/permissions#working-directories)。大多数 `.claude/` 配置[未从这些目录发现](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) | `[ "../docs/" ]` |

321| `defaultMode` | 打开 Claude Code 时的默认[权限模式](/zh-CN/permission-modes)。有效值:`default`、`acceptEdits`、`plan`、`auto`、`dontAsk`、`bypassPermissions`。{/* min-version: 2.1.142 */}从 Claude Code v2.1.142 开始,当在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中设置时,`auto` 被忽略,因此存储库无法授予自己自动模式。改为在 `~/.claude/settings.json` 中设置它。`--permission-mode` CLI 标志覆盖此设置用于单个会话 | `"acceptEdits"` |364| `defaultMode` | 打开 Claude Code 时的默认[权限模式](/zh-CN/permission-modes)。有效值:`default`、`acceptEdits`、`plan`、`auto`、`dontAsk`、`bypassPermissions`。{/* min-version: 2.1.142 */}从 Claude Code v2.1.142 开始,当在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中设置时,`auto` 被忽略,因此存储库无法授予自己自动模式。改为在 `~/.claude/settings.json` 中设置它。`--permission-mode` CLI 标志覆盖此设置用于单个会话 | `"acceptEdits"` |

322| `disableBypassPermissionsMode` | 设置为 `"disable"` 以防止激活 `bypassPermissions` 模式。禁用 `--dangerously-skip-permissions` 标志。在[managed 设置](/zh-CN/permissions#managed-settings)中最有用,用户无法覆盖它 | `"disable"` |365| `disableBypassPermissionsMode` | 设置为 `"disable"` 以防止激活 `bypassPermissions` 模式。禁用 `--dangerously-skip-permissions` 标志。在[managed 设置](/zh-CN/permissions#managed-settings)中最有用,用户无法覆盖它 | `"disable"` |


326 权限规则语法369 权限规则语法

327</h3>370</h3>

328 371 

329权限规则遵循 `Tool` 或 `Tool(specifier)` 的格式。规则按顺序评估:首先是拒绝规则,然后是询问,最后是允许。第一个匹配的规则获胜372权限规则遵循 `Tool` 或 `Tool(specifier)` 的格式。规则按顺序评估:首先是拒绝规则,然后是询问,最后是允许。第一个匹配的规则确定结果,无论规则特异性如何请参阅[权限规则评估顺序](/zh-CN/permissions#manage-permissions)了解详情。

330 373 

331快速示例:374快速示例:

332 375 


431**默认提交归属:**474**默认提交归属:**

432 475 

433```text theme={null}476```text theme={null}

434🤖 Generated with [Claude Code](https://claude.com/claude-code)477Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

435 

436 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

437```478```

438 479 

480会话的活跃模型在 trailer 中反映。

481 

439**默认拉取请求归属:**482**默认拉取请求归属:**

440 483 

441```text theme={null}484```text theme={null}


491```bash theme={null}534```bash theme={null}

492#!/bin/bash535#!/bin/bash

493query=$(cat | jq -r '.query')536query=$(cat | jq -r '.query')

537# 用您自己的文件搜索命令替换 your-repo-file-index

494your-repo-file-index --query "$query" | head -20538your-repo-file-index --query "$query" | head -20

495```539```

496 540 

541<h3 id="footer-link-badges">

542 页脚链接徽章

543</h3>

544 

545`footerLinksRegexes` 设置在输入框下方的页脚中渲染额外的可点击徽章。使用它将项目 CLI 打印的 ID(如审查工具和问题跟踪器)转换为会话链接。

546 

547每个条目的 `pattern` 正则表达式与轮次输出匹配:工具结果,包括文件内容和获取的页面,以及 Claude 自己的响应。`url` 和 `label` 中的 `{name}` 占位符从模式中的命名捕获组填充。

548 

549以下示例在问题键(如 `PROJ-1234`)出现在轮次输出中时渲染徽章。`(?<key>...)` 命名组捕获键,`{key}` 将其替换到 URL 和标签中:

550 

551```json ~/.claude/settings.json theme={null}

552{

553 "footerLinksRegexes": [

554 {

555 "type": "regex",

556 "pattern": "\\b(?<key>PROJ-\\d+)\\b",

557 "url": "https://issues.example.com/browse/{key}",

558 "label": "{key}"

559 }

560 ]

561}

562```

563 

564配置此后,当 `PROJ-1234` 出现在工具结果或 Claude 的回复中时,一个 `PROJ-1234` 芯片出现在页脚中,链接到 `https://issues.example.com/browse/PROJ-1234`。

565 

566以下约束适用于每个条目:

567 

568| 约束 | 行为 |

569| :----- | :-------------------------------------------------------------------------------------------------------------------------------------------- |

570| URL 源 | 捕获的值是 URL 编码的,构造的 URL 必须与模板的字面源共享。捕获可以填充路径段或查询值,但无法改变链接指向的位置 |

571| URL 长度 | 超过 2048 字符的构造 URL 被丢弃 |

572| URL 方案 | 必须是 `https`、`http` 或公认的编辑器或工作区深链接方案:`vscode`、`vscode-insiders`、`cursor`、`windsurf`、`zed`、`jetbrains`、`idea`、`slack`、`linear`、`notion`、`figma` |

573| 标签 | 默认为匹配的文本,截断为 28 个显示列 |

574| 徽章计数 | 最多 5 个徽章渲染。最旧的被较新的匹配替换,`/clear` 删除它们 |

575| 设置作用域 | 仅从用户设置、`--settings` 标志和 managed 设置读取。在项目 `.claude/settings.json` 和本地 `.claude/settings.local.json` 中被忽略 |

576 

577当轮次完成时,Claude Code 在主线程上将每个条目的 `pattern` 正则表达式与轮次输出匹配,因此缓慢的正则表达式会阻止 UI,直到完成。嵌套量词(如 `(a+)+$`)可能对某些输入花费指数级长时间并冻结会话,因此保持每个 `pattern` 线性并避免嵌套 `+` 或 `*`。

578 

579页脚徽章与[自定义状态行](/zh-CN/statusline)一起渲染,当配置了一个时;两者都不替换另一个。使用状态行用于从会话数据计算自己内容的脚本驱动行,使用页脚徽章将对话中的 ID 转换为链接,无需脚本。

580 

497<h3 id="hook-configuration">581<h3 id="hook-configuration">

498 Hook 配置582 Hook 配置

499</h3>583</h3>


580 664 

581此层次结构确保组织策略始终被强制执行,同时仍允许团队和个人自定义其体验。无论您从 CLI、[VS Code 扩展](/zh-CN/vs-code) 还是 [JetBrains IDE](/zh-CN/jetbrains) 运行 Claude Code,相同的优先级都适用。665此层次结构确保组织策略始终被强制执行,同时仍允许团队和个人自定义其体验。无论您从 CLI、[VS Code 扩展](/zh-CN/vs-code) 还是 [JetBrains IDE](/zh-CN/jetbrains) 运行 Claude Code,相同的优先级都适用。

582 666 

583例如,如果您的用户设置允许 `Bash(npm run *)`,但项目的共享设置拒绝它则项目设置优先命令被阻止667例如,如果您的用户设置将 `permissions.defaultMode` 设置为 `acceptEdits`而项目的共享设置将其设置为 `default`则项目值适用下面的示例涵盖了数组值设置(如权限规则)如何组合的方式。

584 668 

585<Note>669<Note>

586 **数组设置跨作用域合并。** 当相同的数组值设置(例如 `sandbox.filesystem.allowWrite` 或 `permissions.allow`)出现在多个作用域中时,数组被**连接和去重**,而不是替换。这意味着较低优先级的作用域可以添加条目而不覆盖由较高优先级作用域设置的条目,反之亦然。例如,如果 managed 设置将 `allowWrite` 设置为 `["/opt/company-tools"]`,用户添加 `["~/.kube"]`,则最终配置中包含两个路径。670 **数组设置跨作用域合并。** 当相同的数组值设置(例如 `sandbox.filesystem.allowWrite` 或 `permissions.allow`)出现在多个作用域中时,数组被**连接和去重**,而不是替换。这意味着较低优先级的作用域可以添加条目而不覆盖由较高优先级作用域设置的条目,反之亦然。例如,如果 managed 设置将 `allowWrite` 设置为 `["/opt/company-tools"]`,用户添加 `["~/.kube"]`,则最终配置中包含两个路径。唯一的例外是 [`fallbackModel`](#available-settings),一个有序链,其中位置具有意义:定义它的最高优先级文件提供整个值,以及 {/* min-version: 2.1.175 */}从 v2.1.175 开始,[`availableModels`](#available-settings),其中 managed 或策略值完全替换较低优先级条目。请参阅[合并行为](/zh-CN/model-config#merge-behavior)。

587</Note>671</Note>

588 672 

589<h3 id="verify-active-settings">673<h3 id="verify-active-settings">

590 验证活跃设置674 验证活跃设置

591</h3>675</h3>

592 676 

593在 Claude Code 中运行 `/status` 以查看哪些设置源处于活跃状态。状态选项卡包含一条 `Setting sources` 行,列出 Claude Code 为当前会话加载的每一层,例如 `User settings` 或 `Project local settings`。当[managed 设置](/zh-CN/managed-settings)生效时,该条目在括号中显示交付渠道,例如 `Enterprise managed settings (remote)`、`(plist)`、`(HKLM)`、`(HKCU)` 或 `(file)`。仅当该源至少加载一个键时该层才出现在列表中因此空列表意味着未找到任何设置源677在 Claude Code 中运行 `/status` 以查看哪些设置源处于活跃状态。在菜单中,**状态**选项卡包含一个 `Setting sources` 行,列出 Claude Code 为当前会话加载的每个层,例如 `User settings` 或 `Project local settings`。当[managed 设置](/zh-CN/admin-setup#decide-how-settings-reach-devices)生效时,该条目在括号中显示交付渠道,例如 `Enterprise managed settings (remote)`、`(plist)`、`(HKLM)`、`(HKCU)` 或 `(file)`。仅当该源被加载且至少有一个键时层才出现在列表中因此空列表意味着未找到设置源

594 678 

595`Setting sources` 行确认正在读取哪些源。它不显示哪一层提供了每个单独的键。同一对话框中的 Config 选项卡是一个固定的切换集合(如主题和详细输出)的编辑器,而不是您的 `settings.json` 内容的视图。如果设置文件包含错误,例如无效的 JSON 或验证失败的值,`/status` 会报告问题,以便您可以修复它。679`Setting sources` 行确认正在读取哪些源。它不显示哪一层提供了每个单独的键。同一对话框中的**配置**选项卡是一个编辑器用于一组固定的切换,例如主题和详细输出,而不是您的 `settings.json` 内容的视图。

680 

681如果设置文件包含错误,例如无效的 JSON 或验证失败的值,Claude Code 在启动时显示设置问题通知,`/status` 列出受影响的文件。运行 `/doctor` 以查看每个错误的详情。

596 682 

597<h3 id="key-points-about-the-configuration-system">683<h3 id="key-points-about-the-configuration-system">

598 配置系统的关键点684 配置系统的关键点


603* **Skills**:可以使用 `/skill-name` 调用或由 Claude 自动加载的自定义提示689* **Skills**:可以使用 `/skill-name` 调用或由 Claude 自动加载的自定义提示

604* **MCP servers**:使用额外的工具和集成扩展 Claude Code690* **MCP servers**:使用额外的工具和集成扩展 Claude Code

605* **优先级**:更高级别的配置(Managed)覆盖较低级别的配置(User/Project)691* **优先级**:更高级别的配置(Managed)覆盖较低级别的配置(User/Project)

606* **继承**:设置被合并更具体的设置添加到或覆盖更广泛的设置692* **继承**:设置被合并跨作用域;来自较高优先级作用域的标量值覆盖数组连接。例外:`fallbackModel`,其中最高优先级作用域提供整个链,以及 `availableModels`,其中 managed 或策略值完全替换较低优先级条目

607 693 

608<h3 id="system-prompt">694<h3 id="system-prompt">

609 系统提示695 系统提示


684 770 

685* **用户设置**(`~/.claude/settings.json`):个人插件偏好771* **用户设置**(`~/.claude/settings.json`):个人插件偏好

686* **项目设置**(`.claude/settings.json`):与团队共享的项目特定插件772* **项目设置**(`.claude/settings.json`):与团队共享的项目特定插件

687* **本地设置**(`.claude/settings.local.json`):每台机器的覆盖(未提交)773* **本地设置**(`.claude/settings.local.json`):每台机器的覆盖,Claude Code 创建时被 gitignored

688* **Managed 设置**(`managed-settings.json`):组织范围的策略覆盖,在所有作用域中阻止安装并从市场隐藏插件774* **Managed 设置**(`managed-settings.json`):组织范围的策略覆盖,在所有作用域中阻止安装并从市场隐藏插件

689 775 

690<Note>776<Note>


747* `hostPattern`:正则表达式模式以匹配市场主机(使用 `hostPattern`)833* `hostPattern`:正则表达式模式以匹配市场主机(使用 `hostPattern`)

748* `settings`:直接在 settings.json 中声明的内联市场,无需单独的托管存储库(使用 `name` 和 `plugins`)834* `settings`:直接在 settings.json 中声明的内联市场,无需单独的托管存储库(使用 `name` 和 `plugins`)

749 835 

836`git` 源类型适用于任何 git 托管服务,包括自托管的 GitLab 和 Bitbucket。Claude Code 使用与该机器上 `git clone` 相同的身份验证克隆存储库:配置的凭证助手、SSH 密钥或特定主机的令牌环境变量。有关设置详情,请参阅[私有存储库](/zh-CN/plugin-marketplaces#private-repositories)。

837 

750对于 `github` 和 `git` 源,在 `source` 对象内设置 `"skipLfs": true`(与 `repo` 或 `url` 一起)以在 Claude Code 克隆或更新市场存储库时跳过 Git LFS 下载。LFS 指针文件保持为指针而不是下载其内容。当存储库包含与插件内容无关的大型 LFS 对象时,使用此选项。{/* min-version: 2.1.153 */}需要 Claude Code v2.1.153 或更高版本。838对于 `github` 和 `git` 源,在 `source` 对象内设置 `"skipLfs": true`(与 `repo` 或 `url` 一起)以在 Claude Code 克隆或更新市场存储库时跳过 Git LFS 下载。LFS 指针文件保持为指针而不是下载其内容。当存储库包含与插件内容无关的大型 LFS 对象时,使用此选项。{/* min-version: 2.1.153 */}需要 Claude Code v2.1.153 或更高版本。

751 839 

752每个市场条目还接受可选的 `autoUpdate` 布尔值。在 `source` 旁边设置 `"autoUpdate": true` 以使 Claude Code 在启动时刷新该市场并更新其已安装的插件。省略时,官方 Anthropic 市场默认为 `true`,所有其他市场默认为 `false`。请参阅[配置自动更新](/zh-CN/discover-plugins#configure-auto-updates)。840每个市场条目还接受可选的 `autoUpdate` 布尔值。在 `source` 旁边设置 `"autoUpdate": true` 以使 Claude Code 在启动时刷新该市场并更新其已安装的插件。省略时,官方 Anthropic 市场默认为 `true`,所有其他市场默认为 `false`。请参阅[配置自动更新](/zh-CN/discover-plugins#configure-auto-updates)。

setup.md +27 −5

Details

146 Alpine Linux 和基于 musl 的发行版146 Alpine Linux 和基于 musl 的发行版

147</h3>147</h3>

148 148 

149Alpine 和其他基于 musl/uClibc 的发行版上的原生安装程序需要 `libgcc`、`libstdc++` 和 `ripgrep`。使用您的发行版的包管理器安装这些,然后设置 `USE_BUILTIN_RIPGREP=0`。149原生安装程序在 Alpine 和其他基于 musl/uClibc 的发行版上需要 `libgcc`、`libstdc++` 和 `ripgrep`。使用您的发行版的包管理器安装这些,然后设置 `USE_BUILTIN_RIPGREP=0`。

150 150 

151此示例在 Alpine 上安装所需的包:151此示例在 Alpine 上安装所需的包:

152 152 


258 258 

259在[托管设置](/zh-CN/permissions#managed-settings)中,这会强制执行用户和项目设置无法覆盖的组织范围最低版本。259在[托管设置](/zh-CN/permissions#managed-settings)中,这会强制执行用户和项目设置无法覆盖的组织范围最低版本。

260 260 

261`minimumVersion` 固定仅约束更新。要使 Claude Code 拒绝在版本范围外启动,请改为使用托管设置 `requiredMinimumVersion` 和 `requiredMaximumVersion`。更新也会遵守 `requiredMaximumVersion` 上限。请参阅[可用设置](/zh-CN/settings#available-settings)。

262 

261<h3 id="disable-auto-updates">263<h3 id="disable-auto-updates">

262 禁用自动更新264 禁用自动更新

263</h3>265</h3>


366 使用 Linux 包管理器安装368 使用 Linux 包管理器安装

367</h3>369</h3>

368 370 

369Claude Code 发布已签名的 apt、dnf 和 apk 存储库。 `stable` 替换为 `latest` 以使用滚动渠道。包管理器安装不会通过 Claude Code 自动更新;更新通过您的正常系统升级工作流程进行。371Claude Code 发布已签名的 apt、dnf 和 apk 存储库。每个存储库提供两个渠道:`stable` 提供通常约一周前的版本,跳过有重大回归的发布,`latest` 在每个发布发布时立即提供。以下命令配置 `stable` 渠道,适合大多数用户;每个选项卡还显示 `latest` 存储库 URL。包管理器安装不会通过 Claude Code 自动更新;更新通过您的正常系统升级工作流程进行。

370 372 

371所有存储库都使用 [Claude Code 发布签名密钥](#binary-integrity-and-code-signing)进行签名。在信任密钥之前,请按照每个选项卡中的说明验证它。373所有存储库都使用 [Claude Code 发布签名密钥](#binary-integrity-and-code-signing)进行签名。在信任密钥之前,请按照每个选项卡中的说明验证它。

372 374 

373<Tabs>375<Tabs>

374 <Tab title="apt">376 <Tab title="apt">

375 适用于 Debian 和 Ubuntu。要使用滚动渠道,请更改 `deb` 行中的两个 `stable` 出现URL 路径和套件名称。377 适用于 Debian 和 Ubuntu。以下命令配置 `stable` 渠道

376 378 

377 ```bash theme={null}379 ```bash theme={null}

378 sudo install -d -m 0755 /etc/apt/keyrings380 sudo install -d -m 0755 /etc/apt/keyrings


384 sudo apt install claude-code386 sudo apt install claude-code

385 ```387 ```

386 388 

389 要改用 `latest` 渠道,URL 路径和套件名称都会改变。使用此 `deb` 行:

390 

391 ```bash theme={null}

392 echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/latest latest main" \

393 | sudo tee /etc/apt/sources.list.d/claude-code.list

394 ```

395 

387 在信任之前验证 GPG 密钥指纹:`gpg --show-keys /etc/apt/keyrings/claude-code.asc` 应该报告 `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`。396 在信任之前验证 GPG 密钥指纹:`gpg --show-keys /etc/apt/keyrings/claude-code.asc` 应该报告 `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`。

388 397 

389 要稍后升级,请运行 `sudo apt update && sudo apt upgrade claude-code`。398 要稍后升级,请运行 `sudo apt update && sudo apt upgrade claude-code`。

390 </Tab>399 </Tab>

391 400 

392 <Tab title="dnf">401 <Tab title="dnf">

393 适用于 Fedora 和 RHEL:402 适用于 Fedora 和 RHEL。以下命令配置 `stable` 渠道

394 403 

395 ```bash theme={null}404 ```bash theme={null}

396 sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'405 sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'


404 sudo dnf install claude-code413 sudo dnf install claude-code

405 ```414 ```

406 415 

416 要改用 `latest` 渠道,将 `baseurl` 设置为 `latest` 存储库:

417 

418 ```ini theme={null}

419 baseurl=https://downloads.claude.ai/claude-code/rpm/latest

420 ```

421 

407 dnf 在首次安装时下载密钥并提示您确认指纹。在接受之前验证它与 `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE` 匹配。422 dnf 在首次安装时下载密钥并提示您确认指纹。在接受之前验证它与 `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE` 匹配。

408 423 

409 要稍后升级,请运行 `sudo dnf upgrade claude-code`。424 要稍后升级,请运行 `sudo dnf upgrade claude-code`。

410 </Tab>425 </Tab>

411 426 

412 <Tab title="apk">427 <Tab title="apk">

413 适用于 Alpine Linux:428 适用于 Alpine Linux。以下命令配置 `stable` 渠道

414 429 

415 ```sh theme={null}430 ```sh theme={null}

416 wget -O /etc/apk/keys/claude-code.rsa.pub \431 wget -O /etc/apk/keys/claude-code.rsa.pub \


419 apk add claude-code434 apk add claude-code

420 ```435 ```

421 436 

437 要切换到 `latest` 渠道,删除 `stable` 存储库行并添加 `latest` 存储库:

438 

439 ```sh theme={null}

440 sed -i '\|downloads.claude.ai/claude-code/apk/stable|d' /etc/apk/repositories

441 echo "https://downloads.claude.ai/claude-code/apk/latest" >> /etc/apk/repositories

442 ```

443 

422 使用 `sha256sum /etc/apk/keys/claude-code.rsa.pub` 验证下载的密钥,应该报告 `395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6`。444 使用 `sha256sum /etc/apk/keys/claude-code.rsa.pub` 验证下载的密钥,应该报告 `395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6`。

423 445 

424 要稍后升级,请运行 `apk update && apk upgrade claude-code`。446 要稍后升级,请运行 `apk update && apk upgrade claude-code`。

skills.md +19 −6

Details

22 捆绑 skills22 捆绑 skills

23</h2>23</h2>

24 24 

25Claude Code 包括一组捆绑 skills,在每个会话中都可用,包括 `/code-review`、`/batch`、`/debug`、`/loop` 和 `/claude-api`。与大多数内置命令不同,内置命令直接执行固定逻辑,捆绑 skills 是基于提示的:它们为 Claude 提供详细的说明,让它使用其工具来编排工作。你调用捆绑 skills 的方式与调用任何其他 skill 相同,输入 `/` 后跟 skill 名称。25Claude Code 包括一组捆绑 skills,在每个会话中都可用,除非通过 [`disableBundledSkills`](/zh-CN/settings#available-settings) 设置禁用,包括 `/code-review`、`/batch`、`/debug`、`/loop` 和 `/claude-api`。与大多数内置命令不同,内置命令直接执行固定逻辑,捆绑 skills 是基于提示的:它们为 Claude 提供详细的说明,让它使用其工具来编排工作。你调用捆绑 skills 的方式与调用任何其他 skill 相同,输入 `/` 后跟 skill 名称。

26 26 

27捆绑 skills 在[命令参考](/zh-CN/commands)中与内置命令一起列出,在"目的"列中标记为 **Skill**。27捆绑 skills 在[命令参考](/zh-CN/commands)中与内置命令一起列出,在"目的"列中标记为 **Skill**。

28 28 


117| 项目 | `.claude/skills/<skill-name>/SKILL.md` | 仅此项目 |117| 项目 | `.claude/skills/<skill-name>/SKILL.md` | 仅此项目 |

118| 插件 | `<plugin>/skills/<skill-name>/SKILL.md` | 启用插件的位置 |118| 插件 | `<plugin>/skills/<skill-name>/SKILL.md` | 启用插件的位置 |

119 119 

120当 skills 在各个级别共享相同的名称时,企业覆盖个人,个人覆盖项目。插件 skills 使用 `plugin-name:skill-name` 命名空间,因此它们不能与其他级别冲突。如果你在 `.claude/commands/` 中有文件,它们的工作方式相同,但如果 skill 和命令共享相同的名称,skill 优先。120当 skills 在各个级别共享相同的名称时,企业覆盖个人,个人覆盖项目。一个任何级别的 skill 也会覆盖具有相同名称的捆绑 skill。例如,你的项目的 `.claude/skills/` 中的 `code-review` skill 会替换捆绑的 `/code-review`。插件 skills 使用 `plugin-name:skill-name` 命名空间,因此它们不能与其他级别冲突。如果你在 `.claude/commands/` 中有文件,它们的工作方式相同,但如果 skill 和命令共享相同的名称,skill 优先。

121 

122Skills 也从你的工作目录下方的嵌套 `.claude/skills/` 目录加载。当 Claude 读取或编辑子目录中的文件时,该子目录的 `.claude/skills/` 中的 skills 变得可用。这让 monorepo 包提供自己的 skills,这些 skills 在处理该包时适用,即使会话从仓库根目录开始。

123 

124如果嵌套 skill 与另一个 skill 共享名称,两者都保持可用。例如,在项目根目录和 `apps/web/.claude/skills/` 中都有一个 `deploy` skill:

125 

126* 嵌套的一个出现在目录限定的名称下,`apps/web:deploy`。

127* 其描述说明它适用于哪个目录。

128* Claude 选择与它正在处理的文件匹配的变体。

129 

130输入 `/deploy` 运行项目根目录 skill。输入限定名称 `/apps/web:deploy` 来显式运行嵌套变体。

121 131 

122<Note>132<Note>

123 将 `.claude-plugin/plugin.json` 添加到 skill 文件夹中,它会作为[插件](/zh-CN/plugins-reference#skills-directory-plugins)加载,名称为 `<name>@skills-dir`,因此它可以捆绑 agents、hooks 和 MCP servers。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。133 将 `.claude-plugin/plugin.json` 添加到 skill 文件夹中,它会作为[插件](/zh-CN/plugins-reference#skills-directory-plugins)加载,名称为 `<name>@skills-dir`,因此它可以捆绑 agents、hooks 和 MCP servers。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。


262下表显示了每种布局的命令名称来自何处:272下表显示了每种布局的命令名称来自何处:

263 273 

264| Skill 位置 | 命令名称来源 | 示例 |274| Skill 位置 | 命令名称来源 | 示例 |

265| :-------------------------------------------------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- |275| :-------------------------------------------------------------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- |

266| `~/.claude/skills/` 或 `.claude/skills/` 下的 Skill 目录 | 目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging` |276| `~/.claude/skills/` 或 `.claude/skills/` 下的 Skill 目录 | 目录名称 | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging` |

277| [嵌套](#where-skills-live) `.claude/skills/` 目录,当名称与另一个 skill 冲突时 | 相对于工作目录的子目录路径,然后是 skill 目录名称 | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |

267| `.claude/commands/` 下的文件 | 文件名称(不含扩展名) | `.claude/commands/deploy.md` → `/deploy` |278| `.claude/commands/` 下的文件 | 文件名称(不含扩展名) | `.claude/commands/deploy.md` → `/deploy` |

268| 插件 `skills/` 子目录 | 目录名称,由插件命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review` |279| 插件 `skills/` 子目录 | 目录名称,由插件命名空间 | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review` |

269| 插件根 `SKILL.md` | Frontmatter `name`,以插件目录名称作为后备 | `my-plugin/SKILL.md` 带有 `name: review` → `/my-plugin:review`。请参阅[路径行为规则](/zh-CN/plugins-reference#path-behavior-rules) |280| 插件根 `SKILL.md` | Frontmatter `name`,以插件目录名称作为后备 | `my-plugin/SKILL.md` 带有 `name: review` → `/my-plugin:review`。请参阅[路径行为规则](/zh-CN/plugins-reference#path-behavior-rules) |


288 299 

289索引参数使用 shell 风格的引用,因此用引号包装多词值以将其作为单个参数传递。例如,`/my-skill "hello world" second` 使 `$0` 扩展为 `hello world`,`$1` 扩展为 `second`。`$ARGUMENTS` 占位符始终扩展为完整的参数字符串,如输入的那样。300索引参数使用 shell 风格的引用,因此用引号包装多词值以将其作为单个参数传递。例如,`/my-skill "hello world" second` 使 `$0` 扩展为 `hello world`,`$1` 扩展为 `second`。`$ARGUMENTS` 占位符始终扩展为完整的参数字符串,如输入的那样。

290 301 

302要包含文字 `$` 在数字、`ARGUMENTS` 或声明的参数名称之前,例如散文中的 `$1.00`,用反斜杠转义它:`\$1.00`。反斜杠在任何其他 `$` 之前保持不变。只有直接在令牌之前的单个反斜杠才能转义它。双反斜杠(如 `\\$1`)保留两个反斜杠,`$1` 仍然扩展为参数值。

303 

291**使用替换的示例:**304**使用替换的示例:**

292 305 

293```yaml theme={null}306```yaml theme={null}


395---408---

396```409```

397 410 

398要阻止 skill 使用某些工具,请在你的[权限设置](/zh-CN/permissions)中添加拒绝规则。411要在 skill 处于活动状态时从 Claude 的可用工具池中移除某些工具请在 skill 的 frontmatter 中的 `disallowed-tools` 中列出它们。当你发送下一条消息时,限制会清除。要在所有 skills 和提示中阻止工具,请在你的[权限设置](/zh-CN/permissions)中添加拒绝规则。

399 412 

400<h3 id="pass-arguments-to-skills">413<h3 id="pass-arguments-to-skills">

401 将参数传递给 skills414 将参数传递给 skills


557 570 

558`agent` 字段指定要使用的 subagent 配置。选项包括内置代理(`Explore`、`Plan`、`general-purpose`)或来自 `.claude/agents/` 的任何自定义 subagent。如果省略,使用 `general-purpose`。571`agent` 字段指定要使用的 subagent 配置。选项包括内置代理(`Explore`、`Plan`、`general-purpose`)或来自 `.claude/agents/` 的任何自定义 subagent。如果省略,使用 `general-purpose`。

559 572 

560<h3 id="restrict-claude-s-skill-access">573<h3 id="restrict-claudes-skill-access">

561 限制 Claude 的 skill 访问574 限制 Claude 的 skill 访问

562</h3>575</h3>

563 576 


850 Skill 描述被截断863 Skill 描述被截断

851</h3>864</h3>

852 865 

853Skill 描述被加载到上下文中,以便 Claude 知道什么可用。所有 skill 名称始终包括,但如果你有许多 skills,描述会被缩短以适应字符预算,这可能会删除 Claude 需要匹配你的请求的关键字。预算按模型上下文窗口的 1% 进行扩展。当预算溢出时,你调用最少的 skills 的描述会首先被删除,因此你实际使用的 skills 会保留其完整文本。运行 `/doctor` 以查看预算是否溢出以及哪些 skills 受到影响。866Skill 描述被加载到上下文中,以便 Claude 知道什么可用。所有 skill 名称始终包括,但如果你有许多 skills,描述会被缩短以适应字符预算,这可能会删除 Claude 需要匹配你的请求的关键字。预算按模型上下文窗口的 1% 进行扩展。当预算溢出时,你调用最少的 skills 的描述会首先被删除,因此你实际使用的 skills 会保留其完整文本。运行 `/doctor` 以查看有多少 skill 描述被缩短或删除以及哪些 skills 受到影响。

854 867 

855要提高预算,设置 [`skillListingBudgetFraction`](/zh-CN/settings#available-settings) 设置(例如 `0.02` = 2%)或 `SLASH_COMMAND_TOOL_CHAR_BUDGET` 环境变量为固定字符数。要为其他 skills 释放预算,在 [`skillOverrides`](#override-skill-visibility-from-settings) 中将低优先级条目设置为 `"name-only"`,以便它们列出而不显示描述。你也可以在源处修剪 `description` 和 `when_to_use` 文本:前置关键用例,因为每个条目的组合文本被限制为 1,536 个字符,无论预算如何。该限制可通过 [`maxSkillDescriptionChars`](/zh-CN/settings#available-settings) 进行配置。868要提高预算,设置 [`skillListingBudgetFraction`](/zh-CN/settings#available-settings) 设置(例如 `0.02` = 2%)或 `SLASH_COMMAND_TOOL_CHAR_BUDGET` 环境变量为固定字符数。要为其他 skills 释放预算,在 [`skillOverrides`](#override-skill-visibility-from-settings) 中将低优先级条目设置为 `"name-only"`,以便它们列出而不显示描述。你也可以在源处修剪 `description` 和 `when_to_use` 文本:前置关键用例,因为每个条目的组合文本被限制为 1,536 个字符,无论预算如何。该限制可通过 [`maxSkillDescriptionChars`](/zh-CN/settings#available-settings) 进行配置。

856 869 

slack.md +1 −1

Details

182 182 

183这种基于频道的模型允许团队将 Claude Code 使用限制在特定频道,提供了超越工作区级权限的额外访问控制层。183这种基于频道的模型允许团队将 Claude Code 使用限制在特定频道,提供了超越工作区级权限的额外访问控制层。

184 184 

185<h2 id="what-s-accessible-where">185<h2 id="whats-accessible-where">

186 什么可以在哪里访问186 什么可以在哪里访问

187</h2>187</h2>

188 188 

statusline.md +65 −23

Details

15* 你在多个会话中工作,需要区分它们15* 你在多个会话中工作,需要区分它们

16* 你希望 git 分支和状态始终可见16* 你希望 git 分支和状态始终可见

17 17 

18Claude Code 还可以呈现[页脚链接徽章](/zh-CN/settings#footer-link-badges):当配置的正则表达式与对话中的文本匹配时出现的可点击芯片。这些独立于状态行,不与你的脚本交互;请改用 [`footerLinksRegexes`](/zh-CN/settings#footer-link-badges) 设置来配置它们。

19 

18这是一个[多行状态行](#display-multiple-lines)的示例,它在第一行显示 git 信息,在第二行显示颜色编码的上下文栏。20这是一个[多行状态行](#display-multiple-lines)的示例,它在第一行显示 git 信息,在第二行显示颜色编码的上下文栏。

19 21 

20<Frame>22<Frame>


23 25 

24本页面介绍了[设置基本状态行](#set-up-a-status-line),解释了[数据如何从 Claude Code 流向你的脚本](#how-status-lines-work),列出了[你可以显示的所有字段](#available-data),并提供了[常见模式的现成示例](#examples),如 git 状态、成本跟踪和进度条。26本页面介绍了[设置基本状态行](#set-up-a-status-line),解释了[数据如何从 Claude Code 流向你的脚本](#how-status-lines-work),列出了[你可以显示的所有字段](#available-data),并提供了[常见模式的现成示例](#examples),如 git 状态、成本跟踪和进度条。

25 27 

26## 设置状态行28<h2 id="set-up-a-status-line">

29 设置状态行

30</h2>

27 31 

28使用[`/statusline` 命令](#use-the-statusline-command)让 Claude Code 为你生成脚本,或[手动创建脚本](#manually-configure-a-status-line)并将其添加到你的设置中。32使用[`/statusline` 命令](#use-the-%2Fstatusline-command)让 Claude Code 为你生成脚本,或[手动创建脚本](#manually-configure-a-status-line)并将其添加到你的设置中。

29 33 

30### 使用 /statusline 命令34<h3 id="use-the-/statusline-command">

35 使用 /statusline 命令

36</h3>

31 37 

32`/statusline` 命令接受描述你想显示的内容的自然语言指令。Claude Code 在 `~/.claude/` 中生成脚本文件并自动更新你的设置:38`/statusline` 命令接受描述你想显示的内容的自然语言指令。Claude Code 在 `~/.claude/` 中生成脚本文件并自动更新你的设置:

33 39 


35/statusline show model name and context percentage with a progress bar41/statusline show model name and context percentage with a progress bar

36```42```

37 43 

38### 手动配置状态行44<h3 id="manually-configure-a-status-line">

45 手动配置状态行

46</h3>

39 47 

40将 `statusLine` 字段添加到你的用户设置(`~/.claude/settings.json`,其中 `~` 是你的主目录)或[项目设置](/zh-CN/settings#settings-files)。将 `type` 设置为 `"command"` 并将 `command` 指向脚本路径或内联 shell 命令。有关创建脚本的完整演练,请参阅[逐步构建状态行](#build-a-status-line-step-by-step)。48将 `statusLine` 字段添加到你的用户设置(`~/.claude/settings.json`,其中 `~` 是你的主目录)或[项目设置](/zh-CN/settings#settings-files)。将 `type` 设置为 `"command"` 并将 `command` 指向脚本路径或内联 shell 命令。有关创建脚本的完整演练,请参阅[逐步构建状态行](#build-a-status-line-step-by-step)。

41 49 


66 74 

67可选的 `hideVimModeIndicator` 字段会抑制提示符下方的内置 `-- INSERT --` 文本。当你的脚本自己呈现 [`vim.mode`](#available-data) 时,将此设置为 `true`,这样模式就不会显示两次。75可选的 `hideVimModeIndicator` 字段会抑制提示符下方的内置 `-- INSERT --` 文本。当你的脚本自己呈现 [`vim.mode`](#available-data) 时,将此设置为 `true`,这样模式就不会显示两次。

68 76 

69### 禁用状态行77<h3 id="disable-the-status-line">

78 禁用状态行

79</h3>

70 80 

71运行 `/statusline` 并要求它删除或清除你的状态行(例如,`/statusline delete`、`/statusline clear`、`/statusline remove it`)。你也可以手动从 settings.json 中删除 `statusLine` 字段。81运行 `/statusline` 并要求它删除或清除你的状态行(例如,`/statusline delete`、`/statusline clear`、`/statusline remove it`)。你也可以手动从 settings.json 中删除 `statusLine` 字段。

72 82 

73## 逐步构建状态行83<h2 id="build-a-status-line-step-by-step">

84 逐步构建状态行

85</h2>

74 86 

75本演练展示了通过手动创建显示当前模型、工作目录和上下文窗口使用百分比的状态行来了解幕后发生的情况。87本演练展示了通过手动创建显示当前模型、工作目录和上下文窗口使用百分比的状态行来了解幕后发生的情况。

76 88 

77<Note>使用[`/statusline`](#use-the-statusline-command)和你想要的内容的描述会自动为你配置所有这些。</Note>89<Note>使用[`/statusline`](#use-the-%2Fstatusline-command)和你想要的内容的描述会自动为你配置所有这些。</Note>

78 90 

79这些示例使用 Bash 脚本,在 macOS 和 Linux 上工作。在 Windows 上,请参阅[Windows 配置](#windows-configuration)了解 PowerShell 和 Git Bash 示例。91这些示例使用 Bash 脚本,在 macOS 和 Linux 上工作。在 Windows 上,请参阅[Windows 配置](#windows-configuration)了解 PowerShell 和 Git Bash 示例。

80 92 


128 </Step>140 </Step>

129</Steps>141</Steps>

130 142 

131## 状态行如何工作143<h2 id="how-status-lines-work">

144 状态行如何工作

145</h2>

132 146 

133Claude Code 运行你的脚本并通过 stdin 向其传输 [JSON 会话数据](#available-data)。你的脚本读取 JSON,提取它需要的内容,并将文本打印到 stdout。Claude Code 显示你的脚本打印的任何内容。147Claude Code 运行你的脚本并通过 stdin 向其传输 [JSON 会话数据](#available-data)。你的脚本读取 JSON,提取它需要的内容,并将文本打印到 stdout。Claude Code 显示你的脚本打印的任何内容。

134 148 


150 164 

151<Note>状态行在本地运行,不消耗 API 令牌。在某些 UI 交互期间,它会临时隐藏,包括自动完成建议、帮助菜单和权限提示。</Note>165<Note>状态行在本地运行,不消耗 API 令牌。在某些 UI 交互期间,它会临时隐藏,包括自动完成建议、帮助菜单和权限提示。</Note>

152 166 

153## 可用数据167<h2 id="available-data">

168 可用数据

169</h2>

154 170 

155Claude Code 通过 stdin 向你的脚本发送以下 JSON 字段:171Claude Code 通过 stdin 向你的脚本发送以下 JSON 字段:

156 172 


166| `cost.total_duration_ms` | 自会话开始以来的总挂钟时间(毫秒) |182| `cost.total_duration_ms` | 自会话开始以来的总挂钟时间(毫秒) |

167| `cost.total_api_duration_ms` | 等待 API 响应的总时间(毫秒) |183| `cost.total_api_duration_ms` | 等待 API 响应的总时间(毫秒) |

168| `cost.total_lines_added`, `cost.total_lines_removed` | 更改的代码行数 |184| `cost.total_lines_added`, `cost.total_lines_removed` | 更改的代码行数 |

169| `context_window.total_input_tokens`, `context_window.total_output_tokens` | 当前在上下文窗口中的令牌计数,来自最近的 API 响应。输入包括缓存读取和写入。在 v2.1.132 之前,这些是累积的会话总计 |185| `context_window.total_input_tokens`, `context_window.total_output_tokens` | 当前在上下文窗口中的令牌计数,来自最近的 API 响应。输入包括缓存读取和写入。{/* min-version: 2.1.132 */}在 v2.1.132 之前,这些是累积的会话总计 |

170| `context_window.context_window_size` | 最大上下文窗口大小(令牌)。默认为 200000,或对于具有扩展上下文的模型为 1000000。 |186| `context_window.context_window_size` | 最大上下文窗口大小(令牌)。默认为 200000,或对于具有扩展上下文的模型为 1000000。 |

171| `context_window.used_percentage` | 预计算的已使用上下文窗口百分比 |187| `context_window.used_percentage` | 预计算的已使用上下文窗口百分比 |

172| `context_window.remaining_percentage` | 预计算的剩余上下文窗口百分比 |188| `context_window.remaining_percentage` | 预计算的剩余上下文窗口百分比 |


297 在你的脚本中使用条件访问处理缺失字段,使用回退默认值处理 null 值。313 在你的脚本中使用条件访问处理缺失字段,使用回退默认值处理 null 值。

298</Accordion>314</Accordion>

299 315 

300### 上下文窗口字段316<h3 id="context-window-fields">

317 上下文窗口字段

318</h3>

301 319 

302`context_window` 对象描述来自最近一次 API 响应的实时上下文窗口。从 v2.1.132 开始,`total_input_tokens` 和 `total_output_tokens` 反映当前上下文使用情况,而不是累积的会话总计。320`context_window` 对象描述来自最近一次 API 响应的实时上下文窗口。从 v2.1.132 开始,`total_input_tokens` 和 `total_output_tokens` 反映当前上下文使用情况,而不是累积的会话总计。

303 321 


319 337 

320`current_usage` 对象在会话中第一次 API 调用之前为 `null`,以及在 `/compact` 之后直到下一次 API 调用重新填充它为止再次为 `null`。338`current_usage` 对象在会话中第一次 API 调用之前为 `null`,以及在 `/compact` 之后直到下一次 API 调用重新填充它为止再次为 `null`。

321 339 

322## 示例340<h2 id="examples">

341 示例

342</h2>

323 343 

324这些示例展示了常见的状态行模式。要使用任何示例:344这些示例展示了常见的状态行模式。要使用任何示例:

325 345 


329 349 

330Bash 示例使用 [`jq`](https://jqlang.github.io/jq/) 来解析 JSON。Python 和 Node.js 具有内置的 JSON 解析。350Bash 示例使用 [`jq`](https://jqlang.github.io/jq/) 来解析 JSON。Python 和 Node.js 具有内置的 JSON 解析。

331 351 

332### 上下文窗口使用情况352<h3 id="context-window-usage">

353 上下文窗口使用情况

354</h3>

333 355 

334显示当前模型和上下文窗口使用情况,带有可视进度条。每个脚本从 stdin 读取 JSON,提取 `used_percentage` 字段,并构建一个 10 字符的栏,其中填充的块(▓)代表使用情况:356显示当前模型和上下文窗口使用情况,带有可视进度条。每个脚本从 stdin 读取 JSON,提取 `used_percentage` 字段,并构建一个 10 字符的栏,其中填充的块(▓)代表使用情况:

335 357 


396 ```418 ```

397</CodeGroup>419</CodeGroup>

398 420 

399### Git 状态与颜色421<h3 id="git-status-with-colors">

422 Git 状态与颜色

423</h3>

400 424 

401显示 git 分支,带有暂存和修改文件的颜色编码指示器。此脚本使用[ANSI 转义码](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)表示终端颜色:`\033[32m` 是绿色,`\033[33m` 是黄色,`\033[0m` 重置为默认值。425显示 git 分支,带有暂存和修改文件的颜色编码指示器。此脚本使用[ANSI 转义码](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)表示终端颜色:`\033[32m` 是绿色,`\033[33m` 是黄色,`\033[0m` 重置为默认值。

402 426 


490 ```514 ```

491</CodeGroup>515</CodeGroup>

492 516 

493### 成本和持续时间跟踪517<h3 id="cost-and-duration-tracking">

518 成本和持续时间跟踪

519</h3>

494 520 

495跟踪你的会话的 API 成本和经过的时间。`cost.total_cost_usd` 字段累积当前会话中所有 API 调用的估计成本。`cost.total_duration_ms` 字段测量自会话开始以来的总经过时间,而 `cost.total_api_duration_ms` 仅跟踪等待 API 响应的时间。521跟踪你的会话的 API 成本和经过的时间。`cost.total_cost_usd` 字段累积当前会话中所有 API 调用的估计成本。`cost.total_duration_ms` 字段测量自会话开始以来的总经过时间,而 `cost.total_api_duration_ms` 仅跟踪等待 API 响应的时间。

496 522 


551 ```577 ```

552</CodeGroup>578</CodeGroup>

553 579 

554### 显示多行580<h3 id="display-multiple-lines">

581 显示多行

582</h3>

555 583 

556你的脚本可以输出多行来创建更丰富的显示。每个 `echo` 语句在状态区域中产生单独的行。584你的脚本可以输出多行来创建更丰富的显示。每个 `echo` 语句在状态区域中产生单独的行。

557 585 


658 ```686 ```

659</CodeGroup>687</CodeGroup>

660 688 

661### 可点击链接689<h3 id="clickable-links">

690 可点击链接

691</h3>

662 692 

663此示例创建指向你的 GitHub 存储库的可点击链接。它读取 git 远程 URL,使用 `sed` 将 SSH 格式转换为 HTTPS,并将存储库名称包装在 OSC 8 转义码中。按住 Cmd(macOS)或 Ctrl(Windows/Linux)并单击以在浏览器中打开链接。693此示例创建指向你的 GitHub 存储库的可点击链接。它读取 git 远程 URL,使用 `sed` 将 SSH 格式转换为 HTTPS,并将存储库名称包装在 OSC 8 转义码中。按住 Cmd(macOS)或 Ctrl(Windows/Linux)并单击以在浏览器中打开链接。

664 694 


738 ```768 ```

739</CodeGroup>769</CodeGroup>

740 770 

741### 速率限制使用情况771<h3 id="rate-limit-usage">

772 速率限制使用情况

773</h3>

742 774 

743在状态行中显示 Claude.ai 订阅速率限制使用情况。`rate_limits` 对象包含 `five_hour`(5 小时滚动窗口)和 `seven_day`(每周)窗口。每个窗口提供 `used_percentage`(0-100)和 `resets_at`(Unix 纪元秒,当窗口重置时)。775在状态行中显示 Claude.ai 订阅速率限制使用情况。`rate_limits` 对象包含 `five_hour`(5 小时滚动窗口)和 `seven_day`(每周)窗口。每个窗口提供 `used_percentage`(0-100)和 `resets_at`(Unix 纪元秒,当窗口重置时)。

744 776 


804 ```836 ```

805</CodeGroup>837</CodeGroup>

806 838 

807### 缓存昂贵的操作839<h3 id="cache-expensive-operations">

840 缓存昂贵的操作

841</h3>

808 842 

809你的状态行脚本在活跃会话期间频繁运行。像 `git status` 或 `git diff` 这样的命令可能很慢,特别是在大型存储库中。此示例将 git 信息缓存到临时文件,并仅每 5 秒刷新一次。843你的状态行脚本在活跃会话期间频繁运行。像 `git status` 或 `git diff` 这样的命令可能很慢,特别是在大型存储库中。此示例将 git 信息缓存到临时文件,并仅每 5 秒刷新一次。

810 844 


935 ```969 ```

936</CodeGroup>970</CodeGroup>

937 971 

938### Windows 配置972<h3 id="windows-configuration">

973 Windows 配置

974</h3>

939 975 

940在 Windows 上,Claude Code 通过 Git Bash 运行状态行命令(如果已安装 Git Bash),或在没有 Git Bash 时通过 PowerShell 运行。976在 Windows 上,Claude Code 通过 Git Bash 运行状态行命令(如果已安装 Git Bash),或在没有 Git Bash 时通过 PowerShell 运行。

941 977 


990 ```1026 ```

991</CodeGroup>1027</CodeGroup>

992 1028 

993## 子代理状态行1029<h2 id="subagent-status-lines">

1030 子代理状态行

1031</h2>

994 1032 

995`subagentStatusLine` 设置为代理面板中显示的每个[子代理](/zh-CN/sub-agents)呈现自定义行体。使用它来替换默认的 `name · description · token count` 行为你自己的格式。1033`subagentStatusLine` 设置为代理面板中显示的每个[子代理](/zh-CN/sub-agents)呈现自定义行体。使用它来替换默认的 `name · description · token count` 行为你自己的格式。

996 1034 


1009 1047 

1010适用于 `statusLine` 的相同信任和 `disableAllHooks` 门控也适用于此处。插件可以在其[`settings.json`](/zh-CN/plugins-reference#standard-plugin-layout)中提供默认的 `subagentStatusLine`。1048适用于 `statusLine` 的相同信任和 `disableAllHooks` 门控也适用于此处。插件可以在其[`settings.json`](/zh-CN/plugins-reference#standard-plugin-layout)中提供默认的 `subagentStatusLine`。

1011 1049 

1012## 提示1050<h2 id="tips">

1051 提示

1052</h2>

1013 1053 

1014* **使用模拟输入测试**:`echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`1054* **使用模拟输入测试**:`echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`

1015* **保持输出简短**:状态栏的宽度有限,所以长输出可能会被截断或换行不当1055* **保持输出简短**:状态栏的宽度有限,所以长输出可能会被截断或换行不当


1017 1057 

1018社区项目如 [ccstatusline](https://github.com/sirmalloc/ccstatusline) 和 [starship-claude](https://github.com/martinemde/starship-claude) 提供带有主题和其他功能的预构建配置。1058社区项目如 [ccstatusline](https://github.com/sirmalloc/ccstatusline) 和 [starship-claude](https://github.com/martinemde/starship-claude) 提供带有主题和其他功能的预构建配置。

1019 1059 

1020## 故障排除1060<h2 id="troubleshooting">

1061 故障排除

1062</h2>

1021 1063 

1022**状态行未出现**1064**状态行未出现**

1023 1065 

sub-agents.md +48 −18

Details

61 * **Tools**: 只读工具(拒绝访问 Write 和 Edit 工具)61 * **Tools**: 只读工具(拒绝访问 Write 和 Edit 工具)

62 * **Purpose**: 用于规划的代码库研究62 * **Purpose**: 用于规划的代码库研究

63 63 

64 当您处于 plan mode 并且 Claude 需要理解您的代码库时,它会将研究委托给 Plan subagent。这可以防止无限嵌套(subagents 无法生成其他 subagents)同时仍然收集必要的上下文64 当您处于 plan mode 并且 Claude 需要理解您的代码库时,它会将研究委托给 Plan subagent,以便探索输出保持在单独的上下文窗口中,而主对话保持只读

65 </Tab>65 </Tab>

66 66 

67 <Tab title="General-purpose">67 <Tab title="General-purpose">


84 </Tab>84 </Tab>

85</Tabs>85</Tabs>

86 86 

87内置 subagents 在交互式会话中始终被注册。要阻止特定的内置类型,请将其添加到 `permissions.deny`,如[禁用特定 subagents](#disable-specific-subagents) 中所示。要防止 Claude 委托给任何 subagent,请使用 [`permissions.deny`](/zh-CN/permissions#tool-specific-permission-rules) 拒绝 `Agent` 工具本身。在[非交互模式](/zh-CN/headless) 和 [Agent SDK](/zh-CN/agent-sdk/overview) 中,设置 [`CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1`](/zh-CN/env-vars) 以移除所有内置类型并仅提供您自己的。

88 

87除了这些内置 subagents,您可以创建自己的,具有自定义提示、工具限制、权限模式、hooks 和 skills。以下部分展示了如何开始和自定义 subagents。89除了这些内置 subagents,您可以创建自己的,具有自定义提示、工具限制、权限模式、hooks 和 skills。以下部分展示了如何开始和自定义 subagents。

88 90 

89<h2 id="quickstart-create-your-first-subagent">91<h2 id="quickstart-create-your-first-subagent">


158 使用 /agents 命令160 使用 /agents 命令

159</h3>161</h3>

160 162 

161`/agents` 命令打开一个选项卡式界面来管理 subagents。**Running** 选项卡显示实时 subagents,让您打开或停止它们。**Library** 选项卡让您:163`/agents` 命令打开一个选项卡式界面来管理 subagents。**Running** 选项卡列出实时和最近完成的 subagents,让您打开或停止它们。**Library** 选项卡让您:

162 164 

163* 查看所有可用的 subagents(内置、用户、项目和 plugin)165* 查看所有可用的 subagents(内置、用户、项目和 plugin)

164* 使用引导式设置或 Claude 生成创建新的 subagents166* 使用引导式设置或 Claude 生成创建新的 subagents


184 186 

185**项目 subagents**(`.claude/agents/`)非常适合特定于代码库的 subagents。将它们检入版本控制,以便您的团队可以协作使用和改进它们。187**项目 subagents**(`.claude/agents/`)非常适合特定于代码库的 subagents。将它们检入版本控制,以便您的团队可以协作使用和改进它们。

186 188 

187项目 subagents 通过从当前工作目录向上遍历来发现。使用 `--add-dir` 添加的目录 [仅授予文件访问权限](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration),不会扫描 subagents。要在项目间共享 subagents请使用 `~/.claude/agents/` [plugin](/zh-CN/plugins)189项目 subagents 通过从当前工作目录向上遍历来发现,因此会扫描那里和存储库根目录之间的每个 `.claude/agents/`。{/* min-version: 2.1.178 */}从 v2.1.178 开始当这些嵌套目录中的多个目录定义相同的 `name` 时,Claude Code 使用最接近工作目录的定义

190 

191使用 `--add-dir` 添加的目录也会被扫描:添加目录内的 `.claude/agents/` 文件夹与项目 subagents 一起加载。有关哪些其他配置类型从 `--add-dir` 加载,请参阅 [Additional directories](/zh-CN/permissions#additional-directories-grant-file-access-not-configuration)。要在没有 `--add-dir` 的情况下跨项目共享 subagents,请使用 `~/.claude/agents/` 或 [plugin](/zh-CN/plugins)。

188 192 

189**用户 subagents**(`~/.claude/agents/`)是在所有项目中可用的个人 subagents。193**用户 subagents**(`~/.claude/agents/`)是在所有项目中可用的个人 subagents。

190 194 


282| `description` | 是 | Claude 何时应该委托给此 subagent |286| `description` | 是 | Claude 何时应该委托给此 subagent |

283| `tools` | 否 | [Tools](#available-tools) subagent 可以使用。如果省略,继承所有工具。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |287| `tools` | 否 | [Tools](#available-tools) subagent 可以使用。如果省略,继承所有工具。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |

284| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除 |288| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除 |

285| `model` | 否 | [Model](#choose-a-model) 使用:`sonnet`、`opus`、`haiku`、完整模型 ID(例如,`claude-opus-4-8`)或 `inherit`。默认为 `inherit` |289| `model` | 否 | [Model](#choose-a-model) 使用:`sonnet`、`opus`、`haiku`、`fable`、完整模型 ID(例如,`claude-opus-4-8`)或 `inherit`。默认为 `inherit` |

286| `permissionMode` | 否 | [Permission mode](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions` 或 `plan`。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |290| `permissionMode` | 否 | [Permission mode](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions` 或 `plan`。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |

287| `maxTurns` | 否 | subagent 停止前的最大代理轮数 |291| `maxTurns` | 否 | subagent 停止前的最大代理轮数 |

288| `skills` | 否 | [Skills](/zh-CN/skills) 在启动时加载到 subagent 的上下文中。注入完整的技能内容,而不仅仅是描述。Subagents 仍然可以通过 Skill 工具调用未列出的项目、用户和 plugin 技能 |292| `skills` | 否 | [Skills](/zh-CN/skills) 在启动时加载到 subagent 的上下文中。注入完整的技能内容,而不仅仅是描述。Subagents 仍然可以通过 Skill 工具调用未列出的项目、用户和 plugin 技能 |


301 305 

302`model` 字段控制 subagent 使用的 [AI model](/zh-CN/model-config):306`model` 字段控制 subagent 使用的 [AI model](/zh-CN/model-config):

303 307 

304* **Model alias**: 使用可用的别名之一:`sonnet`、`opus` 或 `haiku`308* **Model alias**: 使用可用的别名之一:`sonnet`、`opus`、`haiku` 或 `fable`

305* **Full model ID**: 使用完整的模型 ID,如 `claude-opus-4-8` 或 `claude-sonnet-4-6`。接受与 `--model` 标志相同的值309* **Full model ID**: 使用完整的模型 ID,如 `claude-opus-4-8` 或 `claude-sonnet-4-6`。接受与 `--model` 标志相同的值

306* **inherit**: 使用与主对话相同的模型310* **inherit**: 使用与主对话相同的模型

307* **Omitted**: 如果未指定,默认为 `inherit`(使用与主对话相同的模型)311* **Omitted**: 如果未指定,默认为 `inherit`(使用与主对话相同的模型)


325 329 

326Subagents 默认继承主对话中可用的 [internal tools](/zh-CN/tools-reference) 和 MCP 工具。以下工具取决于主对话的 UI 或会话状态,即使在 `tools` 字段中列出也不可用于 subagents:330Subagents 默认继承主对话中可用的 [internal tools](/zh-CN/tools-reference) 和 MCP 工具。以下工具取决于主对话的 UI 或会话状态,即使在 `tools` 字段中列出也不可用于 subagents:

327 331 

328* `Agent`

329* `AskUserQuestion`332* `AskUserQuestion`

330* `EnterPlanMode`333* `EnterPlanMode`

331* `ExitPlanMode`,除非 subagent 的 [`permissionMode`](#permission-modes) 是 `plan`334* `ExitPlanMode`,除非 subagent 的 [`permissionMode`](#permission-modes) 是 `plan`


354 357 

355如果两者都设置,`disallowedTools` 首先应用,然后 `tools` 针对剩余的池进行解析。同时列在两者中的工具被删除。358如果两者都设置,`disallowedTools` 首先应用,然后 `tools` 针对剩余的池进行解析。同时列在两者中的工具被删除。

356 359 

360两个字段都接受 MCP 服务器级别的模式,除了精确的工具名称:`mcp__<server>` 或 `mcp__<server>__*` 授予或删除来自命名服务器的每个工具。在 `disallowedTools` 中,`mcp__*` 也删除来自任何服务器的每个 MCP 工具。此示例删除来自 `github` MCP 服务器的每个工具,同时保留来自其他服务器的工具和每个内置工具:

361 

362```yaml theme={null}

363---

364name: local-only

365description: Inherits every tool except those from the github MCP server

366disallowedTools: mcp__github

367---

368```

369 

357<h4 id="restrict-which-subagents-can-be-spawned">370<h4 id="restrict-which-subagents-can-be-spawned">

358 限制可以生成哪些 subagents371 限制可以生成哪些 subagents

359</h4>372</h4>


378tools: Agent, Read, Bash391tools: Agent, Read, Bash

379```392```

380 393 

381如果 `Agent` 完全从 `tools` 列表中省略,代理无法生成任何 subagents。此限制仅适用于作为主线程运行的代理,使用 `claude --agent`。Subagents 无法生成其他 subagents,因此 `Agent(agent_type)` 在 subagent 定义中无效。394如果 `Agent` 完全从 `tools` 列表中省略,代理无法生成任何 subagents。

395 

396`Agent(agent_type)` 允许列表语法仅适用于作为主线程运行的代理,使用 `claude --agent`。在 subagent 定义中,在 `tools` 中列出 `Agent` 让该 subagent [生成嵌套 subagents](#spawn-nested-subagents),但括号内的任何类型列表都被忽略。

382 397 

383<h4 id="scope-mcp-servers-to-a-subagent">398<h4 id="scope-mcp-servers-to-a-subagent">

384 将 MCP 服务器限定于 subagent399 将 MCP 服务器限定于 subagent


444| `plan` | Plan mode(只读探索) |459| `plan` | Plan mode(只读探索) |

445 460 

446<Warning>461<Warning>

447 谨慎使用 `bypassPermissions`。它跳过权限提示,允许 subagent 在没有批准的情况下执行操作,包括对 `.git`、`.config/git`、`.claude`、`.vscode`、`.idea`、`.husky`、`.cargo`、`.devcontainer`、`.yarn` 和 `.mvn` 的写入。根目录和主目录删除(如 `rm -rf /`)仍然会作为断路器提示。有关详细信息,请参阅 [permission modes](/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)。462 谨慎使用 `bypassPermissions`。它跳过权限提示,允许 subagent 在没有批准的情况下执行操作,包括对 `.git`、`.config/git`、`.claude`、`.vscode`、`.idea`、`.husky`、`.cargo`、`.devcontainer`、`.yarn` 和 `.mvn` 的写入。显式 [`ask` 规则](/zh-CN/permissions#manage-permissions) 和根目录和主目录删除(如 `rm -rf /`)仍然会提示。有关详细信息,请参阅 [permission modes](/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)。

448</Warning>463</Warning>

449 464 

450如果父级使用 `bypassPermissions` 或 `acceptEdits`,这优先并且无法被覆盖。如果父级使用 [auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),subagent 继承 auto mode,其 frontmatter 中的任何 `permissionMode` 被忽略:分类器使用与父会话相同的块和允许规则评估 subagent 的工具调用。465如果父级使用 `bypassPermissions` 或 `acceptEdits`,这优先并且无法被覆盖。如果父级使用 [auto mode](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),subagent 继承 auto mode,其 frontmatter 中的任何 `permissionMode` 被忽略:分类器使用与父会话相同的块和允许规则评估 subagent 的工具调用。


761 776 

762要禁用所有后台任务功能,请将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 环境变量设置为 `1`。请参阅 [Environment variables](/zh-CN/env-vars)。777要禁用所有后台任务功能,请将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 环境变量设置为 `1`。请参阅 [Environment variables](/zh-CN/env-vars)。

763 778 

764当 [`CLAUDE_CODE_FORK_SUBAGENT`](#fork-the-current-conversation) 设置时,每个 subagent 生成都在后台运行,无论 `background` 字段如何。分叉仍然在您的终端中出现权限提示;命名 subagents 自动拒绝任何会提示的内容,如上所述。779当 [`CLAUDE_CODE_FORK_SUBAGENT`](#fork-the-current-conversation) 设置为 `1` 时,每个 subagent 生成都在后台运行,无论 `background` 字段如何。分叉仍然在您的终端中出现权限提示;命名 subagents 自动拒绝任何会提示的内容,如上所述。

765 780 

766<h3 id="common-patterns">781<h3 id="common-patterns">

767 常见模式782 常见模式


826 841 

827对于关于对话中已有内容的快速问题,使用 [`/btw`](/zh-CN/interactive-mode#side-questions-with-%2Fbtw) 而不是 subagent。它看到您的完整上下文但没有工具访问,答案被丢弃而不是添加到历史记录。842对于关于对话中已有内容的快速问题,使用 [`/btw`](/zh-CN/interactive-mode#side-questions-with-%2Fbtw) 而不是 subagent。它看到您的完整上下文但没有工具访问,答案被丢弃而不是添加到历史记录。

828 843 

829<Note>844<h3 id="spawn-nested-subagents">

830 Subagents 无法生成其他 subagents。如果您的工作流需要嵌套委托,请使用 [Skills](/zh-CN/skills) 或从主对话 [链接 subagents](#chain-subagents)。845 生成嵌套 subagents

831</Note>846</h3>

847 

848{/* min-version: 2.1.172 */}从 Claude Code v2.1.172 开始,subagent 可以生成自己的 subagents。当委托的任务本身分裂成并行子任务时使用这个,例如审查者 subagent 为每个发现分派一个验证者,所以中间输出永远不会到达您的主对话。只有顶级 subagent 的摘要返回给您。

849 

850嵌套 subagent 的配置方式与顶级 subagent 相同,并从相同的 [scopes](#choose-the-subagent-scope) 解析。提示输入下方的 subagent 面板显示完整的树:每行显示后代的 `(+N)` 计数,打开一行显示该 subagent 的直接子代,带有返回到 `main` 的路径。[`/agents`](#use-the-%2Fagents-command) 中的 Running 选项卡将运行中的 subagents 列为平面列表。

851 

852深度计算为主对话下方的 subagent 级别数,无论每个级别是否在 [前台或后台](#run-subagents-in-foreground-or-background) 运行:

853 

854* **前台 subagents**:可以在任何深度生成。每个级别阻塞其父级直到返回,所以链是自限制的:主对话等待整个链。

855* **后台 subagents**:深度为五的后台 subagent 不接收 Agent 工具,无法进一步生成。限制是固定的且不可配置,存在是为了防止失控的并发树。

856 

857要防止特定 subagent 生成其他 subagents,从其 [`tools`](#available-tools) 列表中省略 `Agent` 或将其添加到 `disallowedTools`。

858 

859[fork](#fork-the-current-conversation) 仍然无法生成另一个 fork。它可以生成其他 subagent 类型,这些计入深度限制。

832 860 

833<h3 id="manage-subagent-context">861<h3 id="manage-subagent-context">

834 管理 subagent 上下文862 管理 subagent 上下文


860 888 

861恢复的 subagents 保留其完整的对话历史,包括所有以前的工具调用、结果和推理。Subagent 从它停止的地方继续,而不是从头开始。889恢复的 subagents 保留其完整的对话历史,包括所有以前的工具调用、结果和推理。Subagent 从它停止的地方继续,而不是从头开始。

862 890 

863当 subagent 完成时,Claude 接收其代理 ID。Claude 使用 `SendMessage` 工具,将代理的 ID 作为 `to` 字段来恢复它。`SendMessage` 工具仅在通过 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 启用 [agent teams](/zh-CN/agent-teams) 时可用。891当 subagent 完成时,Claude 接收其代理 ID。内置的 Explore 和 Plan 代理是一次性的,不返回代理 ID,所以它们无法恢复;当您需要继续工作时,使用 `general-purpose` 或自定义 subagent。Claude 使用 `SendMessage` 工具,将代理的 ID 作为 `to` 字段来恢复它。`SendMessage` 工具仅在通过 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 启用 [agent teams](/zh-CN/agent-teams) 时可用。

864 892 

865要恢复 subagent,要求 Claude 继续之前的工作:893要恢复 subagent,要求 Claude 继续之前的工作:

866 894 


886 自动压缩914 自动压缩

887</h4>915</h4>

888 916 

889Subagents 支持使用与主对话相同的逻辑进行自动压缩。默认情况下,自动压缩在大约 95% 容量时触发。要更早触发压缩请将 `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 设置为较低的百分比(例如,`50`)有关详细信息,请参阅 [environment variables](/zh-CN/env-vars)。917Subagents 支持使用与主对话相同的逻辑进行自动压缩。压缩在相同条件下触发,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 也适用于 subagents有关何时覆盖生效的信息,请参阅 [environment variables](/zh-CN/env-vars)。

890 918 

891压缩事件记录在 subagent 转录文件中:919压缩事件记录在 subagent 转录文件中:

892 920 


908</h2>936</h2>

909 937 

910<Note>938<Note>

911 分叉 subagents 需要 Claude Code v2.1.117 或更高版本。{/* min-version: 2.1.161 */}从 v2.1.161 开始,`/fork` 命令默认启用;在早期版本中,它需要将 [`CLAUDE_CODE_FORK_SUBAGENT`](/zh-CN/env-vars) 环境变量设置为 `1`。使分叉成为模型的*默认*生成行为是实验性的,可能在未来版本中更改;通过设置相同的变量来启用它该变量在交互模式以及通过 SDK 或 `claude -p` 中被遵守939 分叉 subagents 需要 Claude Code v2.1.117 或更高版本。{/* min-version: 2.1.161 */}从 v2.1.161 开始,`/fork` 命令默认启用;在早期版本中,它需要将 [`CLAUDE_CODE_FORK_SUBAGENT`](/zh-CN/env-vars) 环境变量设置为 `1`。让 Claude 本身生成分叉是实验性的,可能在未来版本中更改。此功能也可以在交互式会话中启用,作为分阶段推出的一部分

912</Note>940</Note>

913 941 

914分叉是一个 subagent,它继承到目前为止的整个对话,而不是从头开始。这消除了 subagents 通常提供的输入隔离:分叉看到与主会话相同的系统提示、工具、模型和消息历史,因此您可以将其交给一个辅助任务而无需重新解释情况。分叉自己的工具调用仍然保持在您的对话之外,只有其最终结果返回,因此您的主 context window 保持干净。当命名 subagent 需要太多背景才能有用时,或当您想从相同的起点并行尝试多种方法时,使用分叉。942分叉是一个 subagent,它继承到目前为止的整个对话,而不是从头开始。这消除了 subagents 通常提供的输入隔离:分叉看到与主会话相同的系统提示、工具、模型和消息历史,因此您可以将其交给一个辅助任务而无需重新解释情况。分叉自己的工具调用仍然保持在您的对话之外,只有其最终结果返回,因此您的主 context window 保持干净。当命名 subagent 需要太多背景才能有用时,或当您想从相同的起点并行尝试多种方法时,使用分叉。

915 943 

916设置 `CLAUDE_CODE_FORK_SUBAGENT` 以两种方式改变 Claude Code:944要控制分叉模式而不管分阶段推出,将 [`CLAUDE_CODE_FORK_SUBAGENT`](/zh-CN/env-vars) 设置为 `1` 以显式启用它,或设置为 `0` 以禁用它。该变量在交互模式以及通过 SDK 或 `claude -p` 中被遵守。

945 

946启用分叉模式以两种方式改变 Claude Code:

917 947 

918* Claude 在它会使用 [general-purpose](#built-in-subagents) subagent 时生成分叉。命名 subagents 如 Explore 仍然像以前一样生成。948* Claude 可以通过显式请求 `fork` subagent 类型来生成分叉。没有 subagent 类型的生成仍然使用 [general-purpose](#built-in-subagents) subagent命名 subagents 如 Explore 仍然像以前一样生成。

919* 每个 subagent 生成都在 [background](#run-subagents-in-foreground-or-background) 中运行,无论它是分叉还是命名 subagent。设置 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 为 `1` 以保持生成同步。949* 每个 subagent 生成都在 [background](#run-subagents-in-foreground-or-background) 中运行,无论它是分叉还是命名 subagent。设置 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 为 `1` 以保持生成同步。

920 950 

921您可以使用 `/fork` 后跟指令自己启动分叉,无论是否设置了变量。Claude Code 从指令的前几个单词命名分叉。以下示例分叉对话以在您继续主会话中的实现时草拟测试用例:951您可以使用 `/fork` 后跟指令自己启动分叉,无论是否设置了变量。Claude Code 从指令的前几个单词命名分叉。以下示例分叉对话以在您继续主会话中的实现时草拟测试用例:


961 限制991 限制

962</h3>992</h3>

963 993 

964设置 `CLAUDE_CODE_FORK_SUBAGENT=1` 在交互式会话、[non-interactive mode](/zh-CN/headless) 和 Agent SDK 中启用分叉模式。分叉无法生成进一步的分叉。994设置 `CLAUDE_CODE_FORK_SUBAGENT=1` 在交互式会话、[non-interactive mode](/zh-CN/headless) 和 Agent SDK 中启用分叉模式;将其设置为 `0` 会在所有地方禁用分叉模式,包括任何服务器端推出。分叉无法生成进一步的分叉。

965 995 

966<h2 id="example-subagents">996<h2 id="example-subagents">

967 示例 subagents997 示例 subagents

Details

6 6 

7> 了解 Claude Code 如何与各种第三方服务和基础设施集成,以满足企业部署需求。7> 了解 Claude Code 如何与各种第三方服务和基础设施集成,以满足企业部署需求。

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

9组织可以直接通过 Anthropic 或通过云提供商部署 Claude Code。本页面帮助您选择正确的配置。79组织可以直接通过 Anthropic 或通过云提供商部署 Claude Code。本页面帮助您选择正确的配置。

10 80 

81<ContactSalesCard surface="third_party_overview" />

82 

11<h2 id="compare-deployment-options">83<h2 id="compare-deployment-options">

12 比较部署选项84 比较部署选项

13</h2>85</h2>


271 为云提供商固定模型版本343 为云提供商固定模型版本

272</h3>344</h3>

273 345 

274如果您通过 [Bedrock](/zh-CN/amazon-bedrock)、[Vertex AI](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 部署,请使用 `ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 固定特定模型版本。如果不固定,模型别名会解析为最新版本,当 Anthropic 发布您的账户中尚未启用的新模型时可能会破坏用户有关每个提供商在最新版本不可用时的行为,请参阅[模型配置](/zh-CN/model-config#pin-models-for-third-party-deployments)。346如果您通过 [Bedrock](/zh-CN/amazon-bedrock)、[Vertex AI](/zh-CN/google-vertex-ai)、[Foundry](/zh-CN/microsoft-foundry) 或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws) 部署,请使用 `ANTHROPIC_DEFAULT_FABLE_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 固定特定模型版本。如果不固定,模型别名会解析为 Claude Code 为该提供商内置的默认值这可能滞后于最新版本,并且可能尚未在您的账户中启用固定让您可以控制用户何时迁移到新模型。有关每个提供商在默认值不可用时的行为,请参阅[模型配置](/zh-CN/model-config#pin-models-for-third-party-deployments)。

275 347 

276<h3 id="configure-security-policies">348<h3 id="configure-security-policies">

277 配置安全策略349 配置安全策略

Details

44| `TaskOutput` | (已弃用)检索后台任务的输出。优先使用 `Read` 读取任务的输出文件路径 | 否 |44| `TaskOutput` | (已弃用)检索后台任务的输出。优先使用 `Read` 读取任务的输出文件路径 | 否 |

45| `TaskStop` | 按 ID 终止运行中的后台任务 | 否 |45| `TaskStop` | 按 ID 终止运行中的后台任务 | 否 |

46| `TaskUpdate` | 更新任务状态、依赖项、详细信息或删除任务 | 否 |46| `TaskUpdate` | 更新任务状态、依赖项、详细信息或删除任务 | 否 |

47| `TeamCreate` | 创建一个具有多个队友的 [agent team](/zh-CN/agent-teams)。仅当设置了 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 时可用 | 否 |

48| `TeamDelete` | 解散 agent team 并清理队友进程。仅当设置了 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 时可用 | 否 |

49| `TodoWrite` | {/* min-version: 2.1.142 */}管理会话任务清单。在 v2.1.142 起默认禁用,改用 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以重新启用 | 否 |47| `TodoWrite` | {/* min-version: 2.1.142 */}管理会话任务清单。在 v2.1.142 起默认禁用,改用 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以重新启用 | 否 |

50| `ToolSearch` | 当启用 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 时搜索并加载延迟工具 | 否 |48| `ToolSearch` | 当启用 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 时搜索并加载延迟工具 | 否 |

51| `WaitForMcpServers` | {/* min-version: 2.1.142 */}等待一个或多个仍在后台连接的 [MCP servers](/zh-CN/mcp),以便请求可以使用它们的工具而无需重启会话。当所需的服务器尚未连接时,Claude 会调用它。仅当禁用 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 时出现,因为启用时 `ToolSearch` 会处理等待 | 否 |49| `WaitForMcpServers` | {/* min-version: 2.1.142 */}等待一个或多个仍在后台连接的 [MCP servers](/zh-CN/mcp),以便请求可以使用它们的工具而无需重启会话。当所需的服务器尚未连接时,Claude 会调用它。仅当禁用 [tool search](/zh-CN/mcp#scale-with-mcp-tool-search) 时出现,因为启用时 `ToolSearch` 会处理等待 | 否 |


70所有这些都接受相同的规则格式,`ToolName(specifier)`。specifier 取决于工具,几个工具共享一种格式:68所有这些都接受相同的规则格式,`ToolName(specifier)`。specifier 取决于工具,几个工具共享一种格式:

71 69 

72| 规则格式 | 适用于 | 详情 |70| 规则格式 | 适用于 | 详情 |

73| :----------------------------- | :---------------------- | :--------------------------------------------------------- |71| :----------------------------- | :---------------------- | :----------------------------------------------------------------- |

74| `Bash(npm run *)` | Bash、Monitor | [命令模式匹配](/zh-CN/permissions#bash) |72| `Bash(npm run *)` | Bash、Monitor | [命令模式匹配](/zh-CN/permissions#bash) |

75| `PowerShell(Get-ChildItem *)` | PowerShell | [命令模式匹配](/zh-CN/permissions#powershell) |73| `PowerShell(Get-ChildItem *)` | PowerShell | [命令模式匹配](/zh-CN/permissions#powershell) |

76| `Read(~/secrets/**)` | Read、Grep、Glob、LSP | [路径模式匹配](/zh-CN/permissions#read-and-edit) |74| `Read(~/secrets/**)` | Read、Grep、Glob、LSP | [路径模式匹配](/zh-CN/permissions#read-and-edit) |

77| `Edit(/src/**)` | Edit、Write、NotebookEdit | [路径模式匹配](/zh-CN/permissions#read-and-edit) |75| `Edit(/src/**)` | Edit、Write、NotebookEdit | [路径模式匹配](/zh-CN/permissions#read-and-edit) |

78| `Skill(deploy *)` | Skill | [Skill 名称匹配](/zh-CN/skills#restrict-claude's-skill-access) |76| `Skill(deploy *)` | Skill | [Skill 名称匹配](/zh-CN/skills#restrict-claude%E2%80%99s-skill-access) |

79| `Agent(Explore)` | Agent | [Subagent 类型匹配](/zh-CN/permissions#agent-subagents) |77| `Agent(Explore)` | Agent | [Subagent 类型匹配](/zh-CN/permissions#agent-subagents) |

80| `WebFetch(domain:example.com)` | WebFetch | [域名匹配](/zh-CN/permissions#webfetch) |78| `WebFetch(domain:example.com)` | WebFetch | [域名匹配](/zh-CN/permissions#webfetch) |

81| `WebSearch` | WebSearch | 无 specifier;允许或拒绝整个工具 |79| `WebSearch` | WebSearch | 无 specifier;允许或拒绝整个工具 |


157 155 

158结果按修改时间排序,并限制为 100 个文件。如果达到上限,Claude 会在结果中看到截断标志,并可以缩小模式。156结果按修改时间排序,并限制为 100 个文件。如果达到上限,Claude 会在结果中看到截断标志,并可以缩小模式。

159 157 

160Glob 默认不尊重 `.gitignore`,因此它找到被 gitignore 的文件以及跟踪的文件。这与[Grep](#grep-tool-behavior) 不同,后者跳过被 gitignore 的文件。要使 Glob 尊重 `.gitignore`,请在启动 Claude Code 之前设置 `CLAUDE_CODE_GLOB_NO_IGNORE=false`。158Glob 默认不尊重 `.gitignore`,因此它找到被 gitignore 的文件以及跟踪的文件。这与 [Grep](#grep-tool-behavior) 不同,后者跳过被 gitignore 的文件。要使 Glob 尊重 `.gitignore`,请在启动 Claude Code 之前设置 `CLAUDE_CODE_GLOB_NO_IGNORE=false`。

161 159 

162<h2 id="grep-tool-behavior">160<h2 id="grep-tool-behavior">

163 Grep 工具行为161 Grep 工具行为


186* 跳转到符号的定义184* 跳转到符号的定义

187* 查找对符号的所有引用185* 查找对符号的所有引用

188* 获取位置处的类型信息186* 获取位置处的类型信息

189* 列出文件或工作区中的符号187* 列出文件中的符号

188* 按名称在工作区中搜索符号

190* 查找接口的实现189* 查找接口的实现

191* 追踪调用层次结构190* 追踪调用层次结构

192 191 


305* 响应缓存 15 分钟,因此相同 URL 的重复获取快速返回。304* 响应缓存 15 分钟,因此相同 URL 的重复获取快速返回。

306* 当 URL 重定向到不同的主机时,WebFetch 返回一个文本结果,命名原始 URL 和重定向目标,而不是跟随它。Claude 然后使用第二个 WebFetch 调用获取新 URL。305* 当 URL 重定向到不同的主机时,WebFetch 返回一个文本结果,命名原始 URL 和重定向目标,而不是跟随它。Claude 然后使用第二个 WebFetch 调用获取新 URL。

307 306 

308在默认和 `acceptEdits` 权限模式中,WebFetch 在首次到达新域时提示。要提前允许域而不提示,请添加像 `WebFetch(domain:example.com)` 这样的权限规则。`auto` 和 `bypassPermissions` [权限模式](/zh-CN/permissions#permission-modes)完全跳过提示。307在默认和 `acceptEdits` 权限模式中,WebFetch 在首次到达新域时提示,除了一组内置的预批准文档域可以无需提示地获取要提前允许另一个域而不提示,请添加像 `WebFetch(domain:example.com)` 这样的权限规则。`auto` 和 `bypassPermissions` [权限模式](/zh-CN/permissions#permission-modes)完全跳过提示。

308 

309`deny`、`ask` 或 `allow` 中的显式 `WebFetch(domain:...)` 规则优先于预批准集合,因此您可以阻止预批准域或要求对其进行提示。

309 310 

310WebFetch 设置以 `Claude-User` 开头的 `User-Agent` 标头,以及优先 Markdown 而不是 HTML 的 `Accept` 标头,以便支持内容协商的服务器可以直接返回 Markdown。[Sandbox](/zh-CN/sandboxing) 网络规则单独配置,因此您希望沙箱进程到达的域仍然需要显式沙箱权限规则。311WebFetch 设置以 `Claude-User` 开头的 `User-Agent` 标头,以及优先 Markdown 而不是 HTML 的 `Accept` 标头,以便支持内容协商的服务器可以直接返回 Markdown。[Sandbox](/zh-CN/sandboxing) 网络规则单独配置,因此您希望沙箱进程到达的域仍然需要显式沙箱权限规则。

311 312 


349 350 

350Claude 提供对话摘要。对于确切的 MCP 工具名称,请运行 `/mcp`。351Claude 提供对话摘要。对于确切的 MCP 工具名称,请运行 `/mcp`。

351 352 

353<Note>

354 [advisor tool](/zh-CN/advisor) 是一个 [server tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool),由 API 运行,而不是 Claude Code 实现的工具。它没有您可以在权限规则或 hook 匹配器中引用的名称。

355</Note>

356 

352<h2 id="see-also">357<h2 id="see-also">

353 另请参阅358 另请参阅

354</h2>359</h2>

Details

15将您看到的错误消息或症状与解决方案相匹配:15将您看到的错误消息或症状与解决方案相匹配:

16 16 

17| 您看到的内容 | 解决方案 |17| 您看到的内容 | 解决方案 |

18| :----------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------ |18| :----------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- |

19| `command not found: claude` 或 `'claude' is not recognized` | [修复您的 PATH](#command-not-found-claude-after-installation) |19| `command not found: claude` 或 `'claude' is not recognized` | [修复您的 PATH](#command-not-found-claude-after-installation) |

20| `syntax error near unexpected token '<'` | [安装脚本返回 HTML](#install-script-returns-html-instead-of-a-shell-script) |20| `syntax error near unexpected token '<'` | [安装脚本返回 HTML](#install-script-returns-html-instead-of-a-shell-script) |

21| `curl: (22) The requested URL returned error: 403` | [安装脚本返回 403](#install-script-returns-html-instead-of-a-shell-script) |21| `curl: (22) The requested URL returned error: 403` | [安装脚本返回 403](#install-script-returns-html-instead-of-a-shell-script) |


24| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |24| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |

25| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity) |25| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity) |

26| `irm is not recognized` 或 `&& is not valid` | [对您的 shell 使用正确的命令](#wrong-install-command-on-windows) |26| `irm is not recognized` 或 `&& is not valid` | [对您的 shell 使用正确的命令](#wrong-install-command-on-windows) |

27| `Cask 'claude-code' is unavailable: No Cask with this name exists` | [更新 Homebrew](#homebrew-cask-unavailable-or-outdated) |

27| `'bash' is not recognized as the name of a cmdlet` | [使用 Windows 安装程序命令](#wrong-install-command-on-windows) |28| `'bash' is not recognized as the name of a cmdlet` | [使用 Windows 安装程序命令](#wrong-install-command-on-windows) |

28| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [安装 shell](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |29| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [安装 shell](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |

29| `Claude Code does not support 32-bit Windows` | [打开 Windows PowerShell,而不是 x86 条目](#claude-code-does-not-support-32-bit-windows) |30| `Claude Code does not support 32-bit Windows` | [打开 Windows PowerShell,而不是 x86 条目](#claude-code-does-not-support-32-bit-windows) |


34| PowerShell 安装程序完成但 `claude` 未找到或显示旧版本 | [重启您的终端并验证 PATH](#verify-your-path) |35| PowerShell 安装程序完成但 `claude` 未找到或显示旧版本 | [重启您的终端并验证 PATH](#verify-your-path) |

35| macOS 上 `dyld: cannot load`、`dyld: Symbol not found` 或 `Abort trap` | [二进制不兼容](#dyld-cannot-load-on-macos) |36| macOS 上 `dyld: cannot load`、`dyld: Symbol not found` 或 `Abort trap` | [二进制不兼容](#dyld-cannot-load-on-macos) |

36| `Invoke-Expression: Missing argument in parameter list` | [安装脚本返回 HTML](#install-script-returns-html-instead-of-a-shell-script) |37| `Invoke-Expression: Missing argument in parameter list` | [安装脚本返回 HTML](#install-script-returns-html-instead-of-a-shell-script) |

37| `App unavailable in region` | Claude Code 在您的国家/地区不可用。请参阅 [supported countries](https://www.anthropic.com/supported-countries)。 |38| `App unavailable in region` | Claude Code 在您的国家/地区不可用。请参阅[支持的国家/地区](https://www.anthropic.com/supported-countries)。 |

38| `unable to get local issuer certificate` | [配置企业 CA 证书](#tls-or-ssl-connection-errors) |39| `unable to get local issuer certificate` | [配置企业 CA 证书](#tls-or-ssl-connection-errors) |

39| `OAuth error` 或 `403 Forbidden` | [修复身份验证](#login-and-authentication) |40| `OAuth error` 或 `403 Forbidden` | [修复身份验证](#login-and-authentication) |

40| `Could not load the default credentials` 或 `Could not load credentials from any providers` | [Bedrock、Vertex 或 Foundry 凭证](#bedrock-vertex-or-foundry-credentials-not-loading) |41| `Could not load the default credentials` 或 `Could not load credentials from any providers` | [Bedrock、Vertex 或 Foundry 凭证](#bedrock-vertex-or-foundry-credentials-not-loading) |

41| `ChainedTokenCredential authentication failed` 或 `CredentialUnavailableError` | [Bedrock、Vertex 或 Foundry 凭证](#bedrock-vertex-or-foundry-credentials-not-loading) |42| `ChainedTokenCredential authentication failed` 或 `CredentialUnavailableError` | [Bedrock、Vertex 或 Foundry 凭证](#bedrock-vertex-or-foundry-credentials-not-loading) |

42| `API Error: 500`、`529 Overloaded`、`429` 或上面未列出的其他 4xx 和 5xx 错误 | 请参阅 [Error reference](/zh-CN/errors) |43| `API Error: 500`、`529 Overloaded`、`429` 或上面未列出的其他 4xx 和 5xx 错误 | 请参阅[错误参考](/zh-CN/errors) |

43 44 

44如果您的问题未列出,请按照下面的诊断检查来缩小原因范围。45如果您的问题未列出,请按照下面的诊断检查来缩小原因范围。

45 46 


61curl -sI https://downloads.claude.ai/claude-code-releases/latest62curl -sI https://downloads.claude.ai/claude-code-releases/latest

62```63```

63 64 

65在 PowerShell 中,改为运行 `curl.exe -sI`。PowerShell 将 `curl` 别名为 `Invoke-WebRequest`,它拒绝 `-sI` 标志。

66 

64`HTTP/2 200` 行表示您已到达服务器。如果您看不到任何输出、`Could not resolve host` 或连接超时,您的网络正在阻止连接。常见原因:67`HTTP/2 200` 行表示您已到达服务器。如果您看不到任何输出、`Could not resolve host` 或连接超时,您的网络正在阻止连接。常见原因:

65 68 

66* 企业防火墙或代理阻止 `downloads.claude.ai`69* 企业防火墙或代理阻止 `downloads.claude.ai`


95 98 

96如果安装成功但运行 `claude` 时出现 `command not found` 或 `not recognized` 错误,安装目录不在您的 PATH 中。您的 shell 在 PATH 中列出的目录中搜索程序,安装程序在 macOS/Linux 上将 `claude` 放在 `~/.local/bin/claude`,或在 Windows 上放在 `%USERPROFILE%\.local\bin\claude.exe`。99如果安装成功但运行 `claude` 时出现 `command not found` 或 `not recognized` 错误,安装目录不在您的 PATH 中。您的 shell 在 PATH 中列出的目录中搜索程序,安装程序在 macOS/Linux 上将 `claude` 放在 `~/.local/bin/claude`,或在 Windows 上放在 `%USERPROFILE%\.local\bin\claude.exe`。

97 100 

101<Note>

102 [VS Code 扩展](/zh-CN/vs-code)不会将 `claude` 放在此位置。它在扩展目录内捆绑了一个私有的 CLI 副本,用于其自己的聊天面板,不会将其添加到 PATH。如果您仅安装了扩展,`~/.local/bin/claude` 将不存在。运行[独立安装](/zh-CN/setup)以从终端使用 `claude`,然后继续下面的步骤。

103</Note>

104 

98通过列出您的 PATH 条目并过滤 `local/bin` 来检查安装目录是否在您的 PATH 中:105通过列出您的 PATH 条目并过滤 `local/bin` 来检查安装目录是否在您的 PATH 中:

99 106 

100<Tabs>107<Tabs>


103 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"110 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

104 ```111 ```

105 112 

106 如果这打印 `/Users/you/.local/bin` 或 `/home/you/.local/bin`,该目录在您的 PATH 中,您可以跳到 [检查冲突的安装](#check-for-conflicting-installations)。如果没有输出,请将其添加到您的 shell 配置。113 如果这打印 `/Users/you/.local/bin` 或 `/home/you/.local/bin`,该目录在您的 PATH 中,您可以跳到[检查冲突的安装](#check-for-conflicting-installations)。如果没有输出,请将其添加到您的 shell 配置。

107 114 

108 对于 Zsh(macOS 上的默认值):115 对于 Zsh(macOS 上的默认值):

109 116 


180 which -a claude187 which -a claude

181 ```188 ```

182 189 

183 如果这不打印任何内容,您的 PATH 上还没有 `claude`。返回到 [验证您的 PATH](#verify-your-path)。190 如果这不打印任何内容,您的 PATH 上还没有 `claude`。返回到[验证您的 PATH](#verify-your-path)。

184 191 

185 检查 `claude` 二进制文件可以来自的三个位置。`~/.local/bin/claude` 是本机安装程序,`~/.claude/local/` 是由较旧版本的 Claude Code 创建的旧版本本地 npm 安装,npm 全局列表显示 `-g` 安装:192 检查 `claude` 二进制文件可以来自的三个位置。`~/.local/bin/claude` 是本机安装程序,`~/.claude/local/` 是由较旧版本的 Claude Code 创建的旧版本本地 npm 安装,npm 全局列表显示 `-g` 安装:

186 193 


188 ls -la ~/.local/bin/claude195 ls -la ~/.local/bin/claude

189 ```196 ```

190 197 

198 如果任一 `ls` 命令打印 `No such file or directory`,这不是错误。这意味着该位置没有安装任何内容,因此继续进行下一个检查。

199 

191 ```bash theme={null}200 ```bash theme={null}

192 ls -la ~/.claude/local/201 ls -la ~/.claude/local/

193 ```202 ```


268 验证二进制文件是否有效277 验证二进制文件是否有效

269</h3>278</h3>

270 279 

271如果 `claude --version` 打印版本但 `claude` 在启动时崩溃或挂起,请运行这些检查来缩小原因范围。如果 `claude --version` 说命令未找到,请先转到 [验证您的 PATH](#verify-your-path);下面的命令假设 `claude` 在您的 PATH 上。280如果 `claude --version` 打印版本但 `claude` 在启动时崩溃或挂起,请运行这些检查来缩小原因范围。如果 `claude --version` 说命令未找到,请先转到[验证您的 PATH](#verify-your-path);下面的命令假设 `claude` 在您的 PATH 上。

272 281 

273确认二进制文件存在且可执行:282确认二进制文件存在且可执行:

274 283 


390 winget install Anthropic.ClaudeCode399 winget install Anthropic.ClaudeCode

391 ```400 ```

392 401 

402<h3 id="homebrew-cask-unavailable-or-outdated">

403 Homebrew cask 不可用或过时

404</h3>

405 

406Homebrew 报告 `Error: Cask 'claude-code' is unavailable: No Cask with this name exists` 当您的 Homebrew cask 索引本地副本早于 cask 的发布时间。刷新索引并重试:

407 

408```bash theme={null}

409brew update

410brew install --cask claude-code

411```

412 

413如果 Homebrew 安装的 Claude Code 版本比您预期的要旧,通常是相同的过时索引导致的。`claude-code` cask 跟踪稳定频道,通常比最新版本晚约一周;对于最新版本,请改为运行 `brew install --cask claude-code@latest`。请参阅 [Configure release channel](/zh-CN/setup#configure-release-channel) 了解两个 cask 之间的区别。

414 

393<h3 id="tls-or-ssl-connection-errors">415<h3 id="tls-or-ssl-connection-errors">

394 TLS 或 SSL 连接错误416 TLS 或 SSL 连接错误

395</h3>417</h3>


592 614 

593如果您的 Git 安装在其他地方,通过在 PowerShell 中运行 `where.exe git` 找到路径,并使用该目录中的 `bin\bash.exe` 路径。615如果您的 Git 安装在其他地方,通过在 PowerShell 中运行 `where.exe git` 找到路径,并使用该目录中的 `bin\bash.exe` 路径。

594 616 

617**如果路径正确且文件存在**但 Claude Code 仍然报告找不到它,端点安全软件(如 AppLocker、Group Policy 软件限制策略或 EDR 代理)可能会干扰。在 v2.1.116 之前的版本中,Claude Code 生成了一个子进程 (`cmd.exe`) 来验证路径,这些策略可能会阻止 — 一个常见的信号是 `cmd.exe /c dir "C:\Program Files\Git\bin\bash.exe"` 在您直接在 PowerShell 中运行时有效,但在由 `claude.exe` 启动时无声地失败。

618 

619Claude Code v2.1.116 及更高版本直接检查文件系统,因此请先更新。如果错误在当前版本上仍然存在,请要求您的 IT 团队在您的端点保护策略中将 `claude.exe` 及其生成的进程(包括 `cmd.exe` 和 `bash.exe`)列入白名单。

620 

595<h3 id="claude-code-does-not-support-32-bit-windows">621<h3 id="claude-code-does-not-support-32-bit-windows">

596 Claude Code 不支持 32 位 Windows622 Claude Code 不支持 32 位 Windows

597</h3>623</h3>

Details

361. 定期使用 `/compact` 以减少上下文大小361. 定期使用 `/compact` 以减少上下文大小

372. 在主要任务之间关闭并重启 Claude Code372. 在主要任务之间关闭并重启 Claude Code

383. 考虑将大型构建目录添加到您的 `.gitignore` 文件383. 考虑将大型构建目录添加到您的 `.gitignore` 文件

394. 使用 [`claude --safe-mode`](/zh-CN/cli-reference#cli-flags) 重启以检查插件、MCP 服务器或 hook 是否是源头。它禁用会话的所有自定义;如果使用量下降,请参阅[调试您的配置](/zh-CN/debug-your-config#test-against-a-clean-configuration)以找出是哪一个

39 40 

40如果内存使用在这些步骤后仍然很高,请运行 `/heapdump` 以将 JavaScript 堆快照和内存分解写入 `~/Desktop`。在 Linux 上没有 Desktop 文件夹的情况下,文件被写入您的主目录。41如果内存使用在这些步骤后仍然很高,请运行 `/heapdump` 以将 JavaScript 堆快照和内存分解写入 `~/Desktop`。在 Linux 上没有 Desktop 文件夹的情况下,文件被写入您的主目录。

41 42 


65 66 

66重新启动不会丢失您的对话。在同一目录中运行 `claude --resume` 以继续会话。67重新启动不会丢失您的对话。在同一目录中运行 `claude --resume` 以继续会话。

67 68 

68<h3 id="garbled-or-corrupted-text-in-an-editor-s-integrated-terminal">69<h3 id="garbled-or-corrupted-text-in-an-editors-integrated-terminal">

69 编辑器集成终端中的文本乱码或损坏70 编辑器集成终端中的文本乱码或损坏

70</h3>71</h3>

71 72 

ultraplan.md +1 −1

Details

38 38 

39命令和关键字路径在启动前打开确认对话框。本地计划路径跳过此对话框,因为该选择已作为确认。如果 [Remote Control](/zh-CN/remote-control) 处于活动状态,当 ultraplan 启动时它会断开连接,因为两个功能都占用 claude.ai/code 界面,一次只能连接一个。39命令和关键字路径在启动前打开确认对话框。本地计划路径跳过此对话框,因为该选择已作为确认。如果 [Remote Control](/zh-CN/remote-control) 处于活动状态,当 ultraplan 启动时它会断开连接,因为两个功能都占用 claude.ai/code 界面,一次只能连接一个。

40 40 

41云会话启动后,CLI 的提示输入显示状态指示器,同时远程会话工作41云会话启动后,CLI 的提示输入显示状态指示器,同时云会话工作

42 42 

43| 状态 | 含义 |43| 状态 | 含义 |

44| :----------------------------- | :--------------------- |44| :----------------------------- | :--------------------- |

vs-code.md +35 −9

Details

19安装前,请确保您拥有:19安装前,请确保您拥有:

20 20 

21* VS Code 1.98.0 或更高版本21* VS Code 1.98.0 或更高版本

22* Anthropic 账户(首次打开扩展时您将登录)。如果您使用第三方提供商(如 Amazon Bedrock 或 Google Vertex AI),请参阅[使用第三方提供商](#use-third-party-providers)。22* Anthropic 账户:任何付费 Claude 订阅Pro、Max、Team 或 Enterprise或 Claude Console 账户都可以使用,无需 API 密钥首次打开扩展时,您将[使用此账户登录](/zh-CN/authentication#log-in-to-claude-code)。如果您通过第三方提供商(如 Amazon Bedrock 或 Google Vertex AI)访问 Claude,请参阅[使用第三方提供商](#use-third-party-providers)了解设置说明

23 23 

24<Tip>24<Tip>

25 该扩展包括 CLI(命令行界面),您可以从 VS Code 的集成终端访问它以获得高级功能。有关详细信息,请参阅 [VS Code 扩展与 Claude Code CLI](#vs-code-extension-vs-claude-code-cli)。25 该扩展包含其自己的 CLI(命令行界面)副本用于聊天面板。要在 VS Code 的集成终端中运行 `claude`,您还需要[独立 CLI 安装](/zh-CN/setup)。有关详细信息,请参阅 [VS Code 扩展与 Claude Code CLI](#vs-code-extension-vs-claude-code-cli)。

26</Tip>26</Tip>

27 27 

28<h2 id="install-the-extension">28<h2 id="install-the-extension">


36 36 

37或在 VS Code 中,按 `Cmd+Shift+X`(Mac)或 `Ctrl+Shift+X`(Windows/Linux)打开扩展视图,搜索"Claude Code",然后点击**安装**。37或在 VS Code 中,按 `Cmd+Shift+X`(Mac)或 `Ctrl+Shift+X`(Windows/Linux)打开扩展视图,搜索"Claude Code",然后点击**安装**。

38 38 

39该扩展也可以安装在其他 VS Code 分支中,如 Devin Desktop 或 Kiro。在编辑器的扩展视图中搜索"Claude Code",或从 [Open VSX 注册表](https://open-vsx.org/extension/Anthropic/claude-code) 安装。如果您的编辑器无法安装该扩展,请在其集成终端中运行 `claude`。[CLI](/zh-CN/quickstart) 可在任何终端中使用。39该扩展也可以安装在其他 VS Code 分支中,如 Devin Desktop 或 Kiro。在编辑器的扩展视图中搜索"Claude Code",或从 [Open VSX 注册表](https://open-vsx.org/extension/Anthropic/claude-code) 安装。如果您的编辑器无法安装该扩展,[安装 CLI](/zh-CN/quickstart) 并在其集成终端中运行 `claude`。CLI 可在任何终端中使用。

40 40 

41<Note>如果安装后扩展没有出现,请重启 VS Code 或从命令面板运行"Developer: Reload Window"。</Note>41<Note>如果安装后扩展没有出现,请重启 VS Code 或从命令面板运行"Developer: Reload Window"。</Note>

42 42 


131 131 

132点击 Claude Code 面板顶部的**会话历史**按钮以访问您的对话历史记录。您可以按关键字搜索或按时间浏览(今天、昨天、过去 7 天等)。点击任何对话以使用完整的消息历史记录恢复它。新会话根据您的第一条消息接收 AI 生成的标题。将鼠标悬停在会话上以显示重命名和删除操作:重命名以给它一个描述性标题,或删除以将其从列表中删除。有关恢复会话的更多信息,请参阅[管理会话](/zh-CN/sessions)。132点击 Claude Code 面板顶部的**会话历史**按钮以访问您的对话历史记录。您可以按关键字搜索或按时间浏览(今天、昨天、过去 7 天等)。点击任何对话以使用完整的消息历史记录恢复它。新会话根据您的第一条消息接收 AI 生成的标题。将鼠标悬停在会话上以显示重命名和删除操作:重命名以给它一个描述性标题,或删除以将其从列表中删除。有关恢复会话的更多信息,请参阅[管理会话](/zh-CN/sessions)。

133 133 

134<h3 id="resume-remote-sessions-from-claude-ai">134<h3 id="resume-cloud-sessions-from-claude-ai">

135 从 Claude.ai 恢复远程会话135 从 Claude.ai 恢复远程会话

136</h3>136</h3>

137 137 


155 只有使用 GitHub 存储库启动的网络会话才会出现在远程选项卡中。恢复会在本地加载对话历史记录;更改不会同步回 claude.ai。155 只有使用 GitHub 存储库启动的网络会话才会出现在远程选项卡中。恢复会在本地加载对话历史记录;更改不会同步回 claude.ai。

156</Note>156</Note>

157 157 

158<h3 id="check-account-and-usage">

159 检查账户和使用情况

160</h3>

161 

162从命令菜单运行 `/usage` 以打开账户和使用情况对话框。它显示您登录的账户、计划以及当前会话和周的使用情况条形图,以及每个限制重置的时间。

163 

164该对话框还分解了对您的计划限制有贡献的内容。它标记了占最近使用情况 10% 或更多的行为,例如缓存未命中、长上下文和子代理密集或高度并行的会话,每个都有减少它的提示。属性表显示了每个 skill、subagent、plugin 和 MCP server 贡献了多少使用情况。需要 Claude Code v2.1.174 或更高版本。

165 

166使用日期和周切换以在过去 24 小时和过去 7 天之间切换。这些数字是近似的,从这台机器上的本地会话计算,因此不包括来自其他设备或 claude.ai 的使用情况。有关跟踪和减少使用情况的更多信息,请参阅[跟踪您的成本](/zh-CN/costs#track-your-costs)。

167 

158<h2 id="customize-your-workflow">168<h2 id="customize-your-workflow">

159 自定义您的工作流169 自定义您的工作流

160</h2>170</h2>


366 VS Code 扩展与 Claude Code CLI376 VS Code 扩展与 Claude Code CLI

367</h2>377</h2>

368 378 

369Claude Code 既可作为 VS Code 扩展(图形面板)也可作为 CLI(终端中的命令行界面)使用。某些功能仅在 CLI 中可用。如果您需要仅限 CLI 的功能,请在 VS Code 的集成终端中运行 `claude`。379Claude Code 既可作为 VS Code 扩展(图形面板)也可作为 CLI(终端中的命令行界面)使用。某些功能仅在 CLI 中可用。如果您需要仅限 CLI 的功能,请在 VS Code 的集成终端中运行 `claude`。这需要[独立 CLI 安装](/zh-CN/setup):扩展不会将 `claude` 添加到您的 PATH。请参阅[在 VS Code 中运行 CLI](#run-cli-in-vs-code)。

370 380 

371| 功能 | CLI | VS Code 扩展 |381| 功能 | CLI | VS Code 扩展 |

372| ------------- | --------------------- | ---------------------------------------- |382| ------------- | --------------------- | ---------------------------------------- |


392 在 VS Code 中运行 CLI402 在 VS Code 中运行 CLI

393</h3>403</h3>

394 404 

395要在 VS Code 中使用 CLI,请打开集成终端(Windows/Linux 上为 `` Ctrl+` `` 或 Mac 上为 `` Cmd+` ``)并运行 `claude`。CLI 会自动与您的 IDE 集成,以获得差异查看和诊断共享等功能。405要在 VS Code 中使用 CLI 同时保持在 VS Code 中,请打开集成终端(Windows/Linux 上为 `` Ctrl+` `` 或 Mac 上为 `` Cmd+` ``)并运行 `claude`。CLI 会自动与您的 IDE 集成,以获得差异查看和诊断共享等功能。

406 

407安装扩展不会将 `claude` 放在您的 shell PATH 上。扩展为其聊天面板捆绑了 CLI 的私有副本,但在终端中输入 `claude` 需要[独立 CLI 安装](/zh-CN/setup)。运行一次安装,此页面上的命令(包括 `claude mcp add` 和 `claude --resume`)在任何终端中都可以工作。如果安装后仍未找到 `claude`,请[验证您的 PATH](/zh-CN/troubleshoot-install#verify-your-path)。

396 408 

397如果使用外部终端,请在 Claude Code 中运行 `/ide` 以将其连接到 VS Code。409如果使用外部终端,请在 Claude Code 中运行 `/ide` 以将其连接到 VS Code。

398 410 


530 修复常见问题542 修复常见问题

531</h2>543</h2>

532 544 

533<h3 id="extension-won-t-install">545<h3 id="extension-wont-install">

534 扩展无法安装546 扩展无法安装

535</h3>547</h3>

536 548 


5862. 搜索"Claude Code"5982. 搜索"Claude Code"

5873. 点击**卸载**5993. 点击**卸载**

588 600 

589要也删除扩展数据并重置所有设置601要也删除扩展数据并重置所有设置,请删除您平台的扩展存储目录。

602 

603在 macOS 上:

590 604 

591```bash theme={null}605```bash theme={null}

592rm -rf ~/.vscode/globalStorage/anthropic.claude-code606rm -rf ~/Library/"Application Support"/Code/User/globalStorage/anthropic.claude-code

607```

608 

609在 Linux 上:

610 

611```bash theme={null}

612rm -rf ~/.config/Code/User/globalStorage/anthropic.claude-code

613```

614 

615在 Windows 上,在 PowerShell 中:

616 

617```powershell theme={null}

618Remove-Item -Recurse -Force "$env:APPDATA\Code\User\globalStorage\anthropic.claude-code"

593```619```

594 620 

595如需更多帮助,请参阅[故障排除指南](/zh-CN/troubleshooting)。621如需更多帮助,请参阅[故障排除指南](/zh-CN/troubleshooting)。

Details

129 </Step>129 </Step>

130 130 

131 <Step title="选择权限模式">131 <Step title="选择权限模式">

132 输入旁边的模式下拉菜单默认为**Auto accept edits**,其中 Claude 进行更改并推送分支而无需停止以获得批准。如果您希望 Claude 提出方法并在编辑文件前等待您的同意,请切换到**Plan mode**。云会话不提供 Ask 权限、Auto 模式或 Bypass 权限。请参阅[权限模式](/zh-CN/permission-modes)了解完整列表。132 输入旁边的模式下拉菜单默认为**Accept edits**,其中 Claude 进行更改并推送分支而无需停止以获得批准。如果您希望 Claude 提出方法并在编辑文件前等待您的同意,请切换到**Plan Mode**。云会话不提供 Ask 权限或 Bypass 权限。请参阅[权限模式](/zh-CN/permission-modes)了解完整列表。

133 </Step>133 </Step>

134 134 

135 <Step title="描述任务并提交">135 <Step title="描述任务并提交">

whats-new.md +16 −0

Details

8 8 

9每周开发摘要突出了最有可能改变您工作方式的功能。每个条目都包括可运行的代码、简短的演示和完整文档的链接。有关每个错误修复和次要改进,请参阅[更新日志](/zh-CN/changelog)。9每周开发摘要突出了最有可能改变您工作方式的功能。每个条目都包括可运行的代码、简短的演示和完整文档的链接。有关每个错误修复和次要改进,请参阅[更新日志](/zh-CN/changelog)。

10 10 

11<Update label="Week 24" description="June 8–12, 2026" tags={["v2.1.166–v2.1.176"]}>

12 **`/cd`**:在对话中途将当前会话移动到新的工作目录,无需重建提示缓存。

13 

14 本周还有:**子代理可以生成自己的子代理**(后台链最多五层深);**`--safe-mode`** 启动 Claude Code 时禁用所有自定义以进行故障排除;**`fallbackModel`** 配置最多三个按顺序尝试的备用模型。

15 

16 [阅读 Week 24 摘要 →](/zh-CN/whats-new/2026-w24)

17</Update>

18 

19<Update label="Week 23" description="June 1–5, 2026" tags={["v2.1.158–v2.1.165"]}>

20 **Bedrock、Vertex 和 Foundry 上的 Auto mode**:auto mode 现在在第三方提供商上可用,支持 Opus 4.7 和 Opus 4.8,用后台安全检查替换权限提示。

21 

22 本周还有:**更安全的自动编辑**在 `acceptEdits` 模式下写入可以运行代码的文件前提示;**`/plugin list`** 内联打印您安装的插件;**版本要求**让托管部署要求批准的 Claude Code 版本范围。

23 

24 [阅读 Week 23 摘要 →](/zh-CN/whats-new/2026-w23)

25</Update>

26 

11<Update label="Week 22" description="May 25–29, 2026" tags={["v2.1.150–v2.1.157"]}>27<Update label="Week 22" description="May 25–29, 2026" tags={["v2.1.150–v2.1.157"]}>

12 **Claude Opus 4.8**:Max、Team Premium、Enterprise 按需付费和 Anthropic API 账户的新默认模型,默认情况下高努力级别,对于最困难的任务使用 `/effort xhigh`。28 **Claude Opus 4.8**:Max、Team Premium、Enterprise 按需付费和 Anthropic API 账户的新默认模型,默认情况下高努力级别,对于最困难的任务使用 `/effort xhigh`。

13 29 

whats-new/2026-w23.md +100 −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# 第 23 周 · 2026 年 6 月 1–5 日

6 

7> 在 Bedrock、Vertex 和 Foundry 上运行自动模式,在 acceptEdits 模式下提示写入可运行代码的文件,使用 /plugin list 列出已安装的插件,以及为托管部署要求批准的版本范围。

8 

9<div className="digest-meta">

10 <span>发布版本 <a href="/zh-CN/docs/changelog#2-1-158">v2.1.158 → v2.1.165</a></span>

11 <span>4 项功能 · 6 月 1–5 日</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Bedrock、Vertex 和 Foundry 上的自动模式</span>

17 <span className="digest-feature-pill">v2.1.158</span>

18 </div>

19 

20 <p className="digest-feature-lede">自动模式现已在 Bedrock、Vertex 和 Foundry 上可用,支持 Opus 4.7 和 Opus 4.8,用第三方提供商的后台安全检查替代权限提示。通过设置 <code>CLAUDE\_CODE\_ENABLE\_AUTO\_MODE=1</code> 来选择加入。</p>

21 

22 <p className="digest-feature-try">在第三方提供商上选择加入,然后使用 Shift+Tab 切换到自动模式:</p>

23 

24 ```bash terminal theme={null}

25 export CLAUDE_CODE_ENABLE_AUTO_MODE=1

26 ```

27 

28 <a className="digest-feature-link" href="/zh-CN/docs/permission-modes#enable-auto-mode-on-bedrock-vertex-ai-or-foundry">在第三方提供商上启用自动模式</a>

29</div>

30 

31<div className="digest-feature">

32 <div className="digest-feature-header">

33 <span className="digest-feature-title">更安全的自动编辑</span>

34 <span className="digest-feature-pill">v2.1.160</span>

35 </div>

36 

37 <p className="digest-feature-lede">Claude Code 现在在写入可运行代码的文件之前进行提示,即使在 <code>acceptEdits</code> 模式下也是如此。受保护的集合包括 shell 启动文件,如 <code>.zshenv</code> 和 <code>.bash\_login</code>、<code>\~/.config/git/</code> 下的 git 配置,以及构建工具配置,如 <code>.npmrc</code>、<code>.bazelrc</code> 和 <code>.pre-commit-config.yaml</code>。除了 <code>bypassPermissions</code> 模式外,这些写入在任何模式下都不会自动批准。</p>

38 

39 <p className="digest-feature-try">在 acceptEdits 模式下工作;Claude 现在在写入这些文件之前暂停:</p>

40 

41 ```bash terminal theme={null}

42 claude --permission-mode acceptEdits

43 ```

44 

45 <a className="digest-feature-link" href="/zh-CN/docs/permission-modes#protected-paths">受保护的路径</a>

46</div>

47 

48<div className="digest-feature">

49 <div className="digest-feature-header">

50 <span className="digest-feature-title">使用 /plugin list 列出已安装的插件</span>

51 <span className="digest-feature-pill">v2.1.163</span>

52 </div>

53 

54 <p className="digest-feature-lede">新的 <code>/plugin list</code> 命令内联打印已安装的插件,无需打开 <code>/plugin</code> 菜单,也可从 shell 中作为 <code>claude plugin list</code> 使用。在交互形式中,添加 `--enabled` 或 `--disabled` 以仅显示处于该状态的插件。</p>

55 

56 <p className="digest-feature-try">列出当前打开的插件:</p>

57 

58 ```text Claude Code theme={null}

59 > /plugin list --enabled

60 ```

61 

62 <a className="digest-feature-link" href="/zh-CN/docs/plugins-reference#plugin-list">插件命令</a>

63</div>

64 

65<div className="digest-feature">

66 <div className="digest-feature-header">

67 <span className="digest-feature-title">托管部署的版本要求</span>

68 <span className="digest-feature-pill">v2.1.163</span>

69 </div>

70 

71 <p className="digest-feature-lede">两个托管设置 <code>requiredMinimumVersion</code> 和 <code>requiredMaximumVersion</code> 允许您的组织要求批准的 Claude Code 版本范围。超出范围的客户端在启动时退出,并告诉用户通过组织的方法进行更新。<code>claude update</code>、<code>claude install</code> 和 <code>claude doctor</code> 继续工作,以便用户仍然可以恢复。</p>

72 

73 <p className="digest-feature-try">向托管设置添加下限,以便较旧的客户端拒绝启动:</p>

74 

75 ```json managed-settings.json theme={null}

76 "requiredMinimumVersion": "2.1.163"

77 ```

78 

79 <a className="digest-feature-link" href="/zh-CN/docs/admin-setup#decide-what-to-enforce">决定要强制执行的内容</a>

80</div>

81 

82<div className="digest-wins">

83 <p className="digest-wins-title">其他改进</p>

84 

85 <div className="digest-wins-grid">

86 <div><a href="/zh-CN/docs/workflows">动态工作流</a>的触发关键字从 <code>workflow</code> 更改为 <code>ultracode</code>;用您自己的话要求工作流仍然有效,关键字在提示中以紫色突出显示</div>

87 <div><a href="/zh-CN/docs/hooks">Stop 和 SubagentStop hooks</a> 可以返回 <code>hookSpecificOutput.additionalContext</code> 以向 Claude 提供反馈并继续轮次,而不是被视为错误</div>

88 <div><code>claude mcp</code> list、get 和 add 不再打印机密:环境变量引用不会展开,凭证标头和 URL 机密会被编辑</div>

89 <div>并行工具批处理中失败的 Bash 命令不再取消其他命令;每个工具独立返回自己的结果</div>

90 <div>当您使用单文件 <code>grep</code>、<code>egrep</code> 或 <code>fgrep</code> 查看文件时,编辑文件不再需要单独的 Read</div>

91 <div>单击自动完成菜单中的命令现在会将其填充到您的提示中,而不是立即运行;按 Enter 键运行</div>

92 <div>在 `--tools` 中列出 <code>Grep</code> 或 <code>Glob</code> 现在在具有嵌入式搜索的本机构建上提供专用搜索工具,而不是静默忽略这些名称</div>

93 <div><code>/effort</code> 现在确认您选择的级别将作为新会话的默认值持久化</div>

94 <div><code>OTEL\_RESOURCE\_ATTRIBUTES</code> 值现在作为标签附加到指标数据点,因此您可以按自定义维度(如团队或存储库)对使用指标进行切片</div>

95 <div>Windsurf 在 <code>/ide</code>、<code>/terminal-setup</code> 和 <code>/scroll-speed</code> 中重命名为 Devin Desktop,遵循编辑器的品牌重塑</div>

96 <div><code>/btw</code> 获得了 <code>c to copy</code> 快捷键,可将原始 markdown 答案复制到剪贴板</div>

97 </div>

98</div>

99 

100[v2.1.158–v2.1.165 的完整更新日志 →](/zh-CN/changelog#2-1-158)

whats-new/2026-w24.md +84 −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# 第24周 · 2026年6月8日–12日

6 

7> 使用 /cd 将会话移动到新目录,让子代理生成自己的子代理,并使用安全模式排查损坏的配置。

8 

9<div className="digest-meta">

10 <span>发布版本 <a href="/zh-CN/docs/changelog#2-1-166">v2.1.166 → v2.1.176</a></span>

11 <span>3 项功能 · 6月8日–12日</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">使用 /cd 移动会话</span>

17 <span className="digest-feature-pill">v2.1.169</span>

18 </div>

19 

20 <p className="digest-feature-lede">新的 <code>/cd</code> 命令将当前会话移动到不同的工作目录,而无需重建提示缓存:新目录的 <code>CLAUDE.md</code> 作为消息附加,而不是替换系统提示。会话重新定位到新目录的项目存储,因此 `--resume` 和 `--continue` 会在那里找到它。如果您之前未在该目录中工作过,Claude 会提示您信任该目录。</p>

21 

22 <p className="digest-feature-try">将会话移动到另一个项目而无需重新启动:</p>

23 

24 ```text Claude Code theme={null}

25 > /cd ../other-project

26 ```

27 

28 <a className="digest-feature-link" href="/zh-CN/docs/commands#all-commands">命令参考</a>

29</div>

30 

31<div className="digest-feature">

32 <div className="digest-feature-header">

33 <span className="digest-feature-title">子代理可以生成子代理</span>

34 <span className="digest-feature-pill">v2.1.172</span>

35 </div>

36 

37 <p className="digest-feature-lede">子代理现在可以生成自己的子代理。提示下方的子代理面板显示完整的树:每一行都包含其后代的计数和返回到 <code>main</code> 的路径。后台子代理的深度限制为五级,以防止失控的并发树;前台链可以在任何深度生成,并且是自限制的。</p>

38 

39 <p className="digest-feature-try">打开代理视图以观看嵌套树的工作展开:</p>

40 

41 ```text Claude Code theme={null}

42 > /agents

43 ```

44 

45 <a className="digest-feature-link" href="/zh-CN/docs/sub-agents#spawn-nested-subagents">生成嵌套子代理</a>

46</div>

47 

48<div className="digest-feature">

49 <div className="digest-feature-header">

50 <span className="digest-feature-title">使用安全模式排查问题</span>

51 <span className="digest-feature-pill">v2.1.169</span>

52 </div>

53 

54 <p className="digest-feature-lede">使用 `--safe-mode` 启动 Claude Code,或设置 <code>CLAUDE\_CODE\_SAFE\_MODE</code>,以禁用所有自定义项启动:<code>CLAUDE.md</code>、skills、plugins、hooks、MCP 服务器以及自定义命令和代理不会加载。身份验证、模型选择、内置工具和权限仍然有效。如果问题在安全模式下消失,则其中一个表面是原因。</p>

55 

56 <p className="digest-feature-try">启动干净会话以隔离损坏的配置:</p>

57 

58 ```bash terminal theme={null}

59 claude --safe-mode

60 ```

61 

62 <a className="digest-feature-link" href="/zh-CN/docs/debug-your-config#test-against-a-clean-configuration">针对干净配置进行测试</a>

63</div>

64 

65<div className="digest-wins">

66 <p className="digest-wins-title">其他改进</p>

67 

68 <div className="digest-wins-grid">

69 <div><a href="/zh-CN/docs/model-config#fallback-model-chains"><code>fallbackModel</code></a> 配置最多三个备用模型,在主模型过载或不可用时按顺序尝试,`--fallback-model` 现在也适用于交互式会话</div>

70 <div>会话标题现在以您的对话语言生成;使用 <code>language</code> 设置固定特定的标题</div>

71 <div>`claude agents --json` 添加 `--all` 以包含已完成的会话以及新的 <code>id</code> 和 <code>state</code> 字段,不再省略被阻止或新分派的会话</div>

72 <div>在 <code>/plugin</code> 中浏览市场的插件现在有搜索栏</div>

73 <div>新的 <code>disableBundledSkills</code> 设置和 <code>CLAUDE\_CODE\_DISABLE\_BUNDLED\_SKILLS</code> 隐藏捆绑的 skills、工作流和内置命令不让模型看到</div>

74 <div>拒绝规则在工具名称位置接受 glob,因此 <code>"\*"</code> 拒绝所有工具,拒绝规则中的未知工具名称现在在启动时发出警告</div>

75 <div>跨会话消息传递得到加强:通过 <code>SendMessage</code> 从其他会话中继的消息不再携带用户权限,自动模式会阻止它们</div>

76 <div>Amazon Bedrock 在 <code>AWS\_REGION</code> 未设置时从 <code>\~/.aws</code> 配置文件读取 AWS 区域,<code>/status</code> 显示区域来自何处</div>

77 <div>新的 <code>enforceAvailableModels</code> 托管设置使 <code>availableModels</code> 允许列表也约束默认模型</div>

78 <div>Chrome 浏览器工具中的 Claude 现在在单个批处理调用中加载,而不是每个工具一个</div>

79 <div><code>claude update</code> 在下载前宣布目标版本,而不是保持沉默</div>

80 <div>新的 <code>footerLinksRegexes</code> 设置将正则表达式匹配的链接徽章添加到页脚行</div>

81 </div>

82</div>

83 

84[v2.1.166–v2.1.176 的完整更新日志 →](/zh-CN/changelog#2-1-166)

workflows.md +3 −1

Details

9{/* plan-availability: feature=workflows plans=pro,max,team,enterprise providers=all */}9{/* plan-availability: feature=workflows plans=pro,max,team,enterprise providers=all */}

10 10 

11<Note>11<Note>

12 动态工作流处于研究预览阶段。它们需要 Claude Code v2.1.154 或更高版本,在所有付费计划上可用,具有 Anthropic API 访问权限,以及在 Amazon Bedrock、Google Cloud Vertex AI 和 Microsoft Foundry 上可用。在 Pro 上,从 `/config` 中的"Dynamic workflows"行启用它们。12 动态工作流需要 Claude Code v2.1.154 或更高版本,在所有付费计划上可用,具有 Anthropic API 访问权限,以及在 Amazon Bedrock、Google Cloud Vertex AI 和 Microsoft Foundry 上可用。在 Pro 上,从 `/config` 中的"Dynamic workflows"行启用它们。

13</Note>13</Note>

14 14 

15动态工作流是一个 JavaScript 脚本,可大规模编排[子代理](/zh-CN/sub-agents)。Claude 为您描述的任务编写脚本,运行时在后台执行它,同时您的会话保持响应。15动态工作流是一个 JavaScript 脚本,可大规模编排[子代理](/zh-CN/sub-agents)。Claude 为您描述的任务编写脚本,运行时在后台执行它,同时您的会话保持响应。


198 198 

199按 Enter 保存。工作流在未来会话中从任一位置作为 `/<name>` 运行。199按 Enter 保存。工作流在未来会话中从任一位置作为 `/<name>` 运行。

200 200 

201{/* min-version: 2.1.178 */}截至 v2.1.178,保存到项目位置会写入您的工作目录和仓库根之间已存在的最近的 `.claude/workflows/` 目录,或如果尚不存在则写入仓库根。项目工作流也从该路径上的每个 `.claude/workflows/` 加载,当多个定义相同名称时 Claude Code 运行最接近工作目录的那个。

202 

201如果项目工作流和个人工作流共享名称,项目工作流运行。203如果项目工作流和个人工作流共享名称,项目工作流运行。

202 204 

203<h3 id="pass-input-to-a-saved-workflow">205<h3 id="pass-input-to-a-saved-workflow">

worktrees.md +3 −1

Details

36 36 

37您也可以在会话期间要求 Claude "在 worktree 中工作",它将使用 [`EnterWorktree`](/zh-CN/tools-reference) 工具创建一个。一旦进入 worktree,Claude 可以通过调用 `EnterWorktree` 并指定目标路径,直接切换到 `.claude/worktrees/` 下的另一个 worktree。之前的 worktree 保留在磁盘上不变。37您也可以在会话期间要求 Claude "在 worktree 中工作",它将使用 [`EnterWorktree`](/zh-CN/tools-reference) 工具创建一个。一旦进入 worktree,Claude 可以通过调用 `EnterWorktree` 并指定目标路径,直接切换到 `.claude/worktrees/` 下的另一个 worktree。之前的 worktree 保留在磁盘上不变。

38 38 

39在首次在目录中使用 `--worktree` 之前,请通过在该目录中运行一次 `claude` 来接受工作区信任对话框。如果尚未接受信任,`--worktree` 将以错误退出并提示您首先在目录中运行 `claude`,包括与 `-p` 结合使用时39在首次在目录中使用 `--worktree` 之前,请通过在该目录中运行一次 `claude` 来接受工作区信任对话框。如果尚未接受信任,`--worktree` 将以错误退出并提示您首先在目录中运行 `claude`。使用 `-p` 的非交互式运行会跳过[信任检查](/zh-CN/security)因此 `claude -p --worktree` 会在没有信任检查的情况下进行

40 40 

41<Tip>41<Tip>

42 将 `.claude/worktrees/` 添加到您的 `.gitignore`,以便 worktree 内容不会在您的主检出中显示为未跟踪的文件。42 将 `.claude/worktrees/` 添加到您的 `.gitignore`,以便 worktree 内容不会在您的主检出中显示为未跟踪的文件。


102 102 

103Claude 为子代理和[后台会话](/zh-CN/agent-view#how-file-edits-are-isolated)创建的 worktrees 一旦超过您的 [`cleanupPeriodDays`](/zh-CN/settings#available-settings) 设置,就会自动删除,前提是它们没有未提交的更改、没有未跟踪的文件和没有未推送的提交。使用 `--worktree` 创建的 Worktrees 永远不会被此扫描删除。103Claude 为子代理和[后台会话](/zh-CN/agent-view#how-file-edits-are-isolated)创建的 worktrees 一旦超过您的 [`cleanupPeriodDays`](/zh-CN/settings#available-settings) 设置,就会自动删除,前提是它们没有未提交的更改、没有未跟踪的文件和没有未推送的提交。使用 `--worktree` 创建的 Worktrees 永远不会被此扫描删除。

104 104 

105当代理运行时,Claude 在其 worktree 上运行 `git worktree lock`,以便并发清理无法将其删除。当代理完成时,锁会被释放。要清理扫描保留的 worktree,请运行 `git worktree remove`,如果 worktree 有未提交的更改或未跟踪的文件,请添加 `--force`。

106 

105<h2 id="manage-worktrees-manually">107<h2 id="manage-worktrees-manually">

106 手动管理 worktrees108 手动管理 worktrees

107</h2>109</h2>

Details

8 8 

9零数据保留 (ZDR) 在通过 Claude for Enterprise 使用 Claude Code 时可用。启用 ZDR 后,Claude Code 会话期间生成的提示和模型响应会实时处理,在返回响应后不会由 Anthropic 存储,除非需要遵守法律或防止滥用。9零数据保留 (ZDR) 在通过 Claude for Enterprise 使用 Claude Code 时可用。启用 ZDR 后,Claude Code 会话期间生成的提示和模型响应会实时处理,在返回响应后不会由 Anthropic 存储,除非需要遵守法律或防止滥用。

10 10 

11<Note>

12 ZDR 不包含在标准 Claude for Enterprise 计划中,也无法从您的管理员设置中启用。它仅适用于符合条件的账户,需要由 Anthropic 单独启用。如果您的组织需要 ZDR,请[联系销售](https://www.anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=zero_data_retention_request)或您的 Anthropic 账户团队以确认资格。

13</Note>

14 

11Claude for Enterprise 上的 ZDR 为企业客户提供了使用 Claude Code 并实现零数据保留的能力,同时可以访问管理功能:15Claude for Enterprise 上的 ZDR 为企业客户提供了使用 Claude Code 并实现零数据保留的能力,同时可以访问管理功能:

12 16 

13* 按用户的成本控制17* 按用户的成本控制


31 ZDR 涵盖的内容35 ZDR 涵盖的内容

32</h3>36</h3>

33 37 

34ZDR 涵盖通过 Claude for Enterprise 上的 Claude Code 进行的模型推理调用。当您在终端中使用 Claude Code 时,您发送的提示和 Claude 生成的响应不会由 Anthropic 保留。这适用于无论使用哪个 Claude 模型38ZDR 涵盖通过 Claude for Enterprise 上的 Claude Code 进行的模型推理调用。当您在终端中使用 Claude Code 时,您发送的提示和 Claude 生成的响应不会由 Anthropic 保留。这适用于 ZDR 组织可用的每个模型某些模型需要数据保留,在 ZDR 下不可用;请参阅 [ZDR 下的模型可用性](#model-availability-under-zdr)。

35 39 

36<h3 id="what-zdr-does-not-cover">40<h3 id="what-zdr-does-not-cover">

37 ZDR 不涵盖的内容41 ZDR 不涵盖的内容


54当为 Claude for Enterprise 上的 Claude Code 组织启用 ZDR 时,某些需要存储提示或完成的功能会在后端级别自动禁用:58当为 Claude for Enterprise 上的 Claude Code 组织启用 ZDR 时,某些需要存储提示或完成的功能会在后端级别自动禁用:

55 59 

56| 功能 | 原因 |60| 功能 | 原因 |

57| ---------------------------------------------------- | ------------------------ |61| -------------------------------------------------- | ------------------------ |

58| [网络上的 Claude Code](/zh-CN/claude-code-on-the-web) | 需要服务器端存储对话历史。 |62| [网络上的 Claude Code](/zh-CN/claude-code-on-the-web) | 需要服务器端存储对话历史。 |

59| 来自 Desktop 应用的[远程会话](/zh-CN/desktop#remote-sessions) | 需要包含提示和完成的持久会话数据。 |63| 来自 Desktop 应用的[云会话](/zh-CN/desktop#cloud-sessions) | 需要包含提示和完成的持久会话数据。 |

60| 反馈提交 (`/feedback`) | 提交反馈会将对话数据发送给 Anthropic。 |64| 反馈提交 (`/feedback`) | 提交反馈会将对话数据发送给 Anthropic。 |

61 65 

62这些功能在后端被阻止,无论客户端显示如何。如果您在启动期间在 Claude Code 终端中看到禁用的功能,尝试使用它会返回一个错误,指示组织的政策不允许该操作。66这些功能在后端被阻止,无论客户端显示如何。如果您在启动期间在 Claude Code 终端中看到禁用的功能,尝试使用它会返回一个错误,指示组织的政策不允许该操作。

63 67 

64如果未来的功能需要存储提示或完成,它们也可能被禁用。68如果未来的功能需要存储提示或完成,它们也可能被禁用。

65 69 

70<h3 id="model-availability-under-zdr">

71 ZDR 下的模型可用性

72</h3>

73 

74Claude Fable 5 不适用于启用了零数据保留的组织。此模型类别[需要数据保留](https://platform.claude.com/docs/en/manage-claude/api-and-data-retention#model-specific-data-retention-requirements),因此来自 ZDR 组织的请求无法由其提供。该模型在 ZDR 组织的 `/model` 选择器中要么不存在,要么显示为禁用,并附带需要禁用 ZDR 的通知,服务器无论客户端配置如何都会拒绝对其的请求。

75 

76其他模型在 ZDR 下仍然可用。Fable 5 不是默认模型,`best` 别名在可用的地方解析为 Fable 5,在不可用的地方(包括 ZDR 组织)解析为 Opus。

77 

66<h2 id="data-retention-for-policy-violations">78<h2 id="data-retention-for-policy-violations">

67 政策违规的数据保留79 政策违规的数据保留

68</h2>80</h2>