SpyBara
Go Premium

Documentation 2026-11-09 23:02 UTC to 2026-11-10 21:57 UTC

79 files changed +1,204 −899. View all changes and history on the product overview
2026
Fri 13 02:00 Thu 12 23:02 Wed 11 22:59 Tue 10 21:57 Mon 9 23:02 Sun 8 22:58 Sat 7 23:58 Fri 6 23:01 Thu 5 23:03 Wed 4 23:59 Tue 3 23:58 Mon 2 23:57 Sun 1 23:57

advisor.md +1 −1

Details

160* **API 计费**:您需要按顾问模型的输入和输出费率为顾问令牌付费160* **API 计费**:您需要按顾问模型的输入和输出费率为顾问令牌付费

161* **订阅计划**:顾问使用计入您的计划使用限制,但 Fable 顾问在支持 Fable 使用的计划上计入[使用额度](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits)161* **订阅计划**:顾问使用计入您的计划使用限制,但 Fable 顾问在支持 Fable 使用的计划上计入[使用额度](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits)

162 162 

163如果您的账户需要使用额度同意,Fable 顾问在您给予同意之前不会产生任何费用,因为 Claude Code [在那之前不会应用该选择](#fable-advisor-and-usage-credits)。163有关 Fable 顾问如何与使用额度配合使用,请参阅[Fable 顾问和使用额度](#fable-advisor-and-usage-credits)。

164 164 

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

166 166 

Details

79 )79 )

80 80 

81 async with ClaudeSDKClient(options=options) as client:81 async with ClaudeSDKClient(options=options) as client:

82 await client.query("使用标准本地开发数据库配置创建 .env 文件")82 await client.query("Create a .env file with the standard local development database configuration")

83 async for message in client.receive_response():83 async for message in client.receive_response():

84 # 过滤助手和结果消息84 # 过滤助手和结果消息

85 if isinstance(message, (AssistantMessage, ResultMessage)):85 if isinstance(message, (AssistantMessage, ResultMessage)):


118};118};

119 119 

120for await (const message of query({120for await (const message of query({

121 prompt: "使用标准本地开发数据库配置创建 .env 文件",121 prompt: "Create a .env file with the standard local development database configuration",

122 options: {122 options: {

123 hooks: {123 hooks: {

124 // 为 PreToolUse 事件注册 hook124 // 为 PreToolUse 事件注册 hook


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

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

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

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

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

252 252 

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


605 605 

606 606 

607def _send_webhook(tool_name):607def _send_webhook(tool_name):

608 """同步辅助函数,将工具使用数据 POST 到外部 webhook。"""608 """Synchronous helper that POSTs tool usage data to an external webhook."""

609 data = json.dumps(609 data = json.dumps(

610 {610 {

611 "tool": tool_name,611 "tool": tool_name,


703 703 

704 704 

705def _send_slack_notification(message):705def _send_slack_notification(message):

706 """同步辅助函数,通过传入 webhook 向 Slack 发送消息。"""706 """Synchronous helper that sends a message to Slack via incoming webhook."""

707 data = json.dumps({"text": f"Agent status: {message}"}).encode()707 data = json.dumps({"text": f"Agent status: {message}"}).encode()

708 req = urllib.request.Request(708 req = urllib.request.Request(

709 "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",709 "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",

Details

1858 1858 

1859### `TaskStartedMessage`1859### `TaskStartedMessage`

1860 1860 

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

1862 1862 

1863```python theme={null}1863```python theme={null}

1864@dataclass1864@dataclass


1878| `uuid` | `str` | 唯一消息标识符 |1878| `uuid` | `str` | 唯一消息标识符 |

1879| `session_id` | `str` | 会话标识符 |1879| `session_id` | `str` | 会话标识符 |

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

1881| `task_type` | `str \| None` | 哪种后台任务:`"local_bash"` 用于后台 Bash 和 Monitor 监视,`"local_agent"` 或 `"remote_agent"` |1881| `task_type` | `str \| None` | 哪种后台任务,例如 `"local_bash"` 用于后台 Bash 和 Monitor 监视,`"local_agent"` 用于子代理,`"mcp_task"` 用于[后台 MCP 工具调用](https://code.claude.com/docs/zh-CN/mcp.md#automatic-backgrounding-of-long-tool-calls),或 `"remote_agent"` |

1882 1882 

1883### `TaskUsage`1883### `TaskUsage`

1884 1884 

Details

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

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

61 61 

62// 定义你想要返回的数据形状62// 定义您想要返回的数据形状

63const schema = {63const schema = {

64 type: "object",64 type: "object",

65 properties: {65 properties: {


81 }81 }

82 })) {82 })) {

83 // 结果消息包含带有验证数据的 structured_output83 // 结果消息包含带有验证数据的 structured_output

84 if (message.type === "result" && message.subtype === "success" && message.structured_output) {84 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

85 console.log(message.structured_output);85 console.log(message.structured_output);

86 // { company_name: "Anthropic", founded_year: 2021, headquarters: "San Francisco, CA" }86 // { company_name: "Anthropic", founded_year: 2021, headquarters: "San Francisco, CA" }

87 }87 }


97import asyncio97import asyncio

98from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage98from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

99 99 

100# 定义你想要返回的数据形状100# 定义您想要返回的数据形状

101schema = {101schema = {

102 "type": "object",102 "type": "object",

103 "properties": {103 "properties": {


118 ),118 ),

119 ):119 ):

120 # 结果消息包含带有验证数据的 structured_output120 # 结果消息包含带有验证数据的 structured_output

121 if isinstance(message, ResultMessage) and message.structured_output:121 if (

122 isinstance(message, ResultMessage)

123 and not message.is_error

124 and message.structured_output

125 ):

122 print(message.structured_output)126 print(message.structured_output)

123 # {'company_name': 'Anthropic', 'founded_year': 2021, 'headquarters': 'San Francisco, CA'}127 # {'company_name': 'Anthropic', 'founded_year': 2021, 'headquarters': 'San Francisco, CA'}

124 except Exception as error:128 except Exception as error:


173 }177 }

174 }178 }

175 })) {179 })) {

176 if (message.type === "result" && message.subtype === "success" && message.structured_output) {180 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

177 // 验证并获取完全类型化的结果181 // 验证并获取完全类型化的结果

178 const parsed = FeaturePlan.safeParse(message.structured_output);182 const parsed = FeaturePlan.safeParse(message.structured_output);

179 if (parsed.success) {183 if (parsed.success) {


223 }227 }

224 ),228 ),

225 ):229 ):

226 if isinstance(message, ResultMessage) and message.structured_output:230 if (

231 isinstance(message, ResultMessage)

232 and not message.is_error

233 and message.structured_output

234 ):

227 # 验证并获取完全类型化的结果235 # 验证并获取完全类型化的结果

228 plan = FeaturePlan.model_validate(message.structured_output)236 plan = FeaturePlan.model_validate(message.structured_output)

229 print(f"Feature: {plan.feature_name}")237 print(f"Feature: {plan.feature_name}")


286 required: ["todos", "total_count"]294 required: ["todos", "total_count"]

287};295};

288 296 

289// 代理使用 Grep 查找 TODO,使用 Bash 获取 git blame 信息297// Agent 使用 Grep 查找 TODO,使用 Bash 获取 git blame 信息

290try {298try {

291 for await (const message of query({299 for await (const message of query({

292 prompt: "Find all TODO comments in this codebase and identify who added them",300 prompt: "Find all TODO comments in this codebase and identify who added them",


297 }305 }

298 }306 }

299 })) {307 })) {

300 if (message.type === "result" && message.subtype === "success" && message.structured_output) {308 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

301 const data = message.structured_output as { total_count: number; todos: Array<{ file: string; line: number; text: string; author?: string; date?: string }> };309 const data = message.structured_output as { total_count: number; todos: Array<{ file: string; line: number; text: string; author?: string; date?: string }> };

302 console.log(`Found ${data.total_count} TODOs`);310 console.log(`Found ${data.total_count} TODOs`);

303 data.todos.forEach((todo) => {311 data.todos.forEach((todo) => {


344 352 

345 353 

346async def main():354async def main():

347 # 代理使用 Grep 查找 TODO,使用 Bash 获取 git blame 信息355 # Agent 使用 Grep 查找 TODO,使用 Bash 获取 git blame 信息

348 try:356 try:

349 async for message in query(357 async for message in query(

350 prompt="Find all TODO comments in this codebase and identify who added them",358 prompt="Find all TODO comments in this codebase and identify who added them",


352 output_format={"type": "json_schema", "schema": todo_schema}360 output_format={"type": "json_schema", "schema": todo_schema}

353 ),361 ),

354 ):362 ):

355 if isinstance(message, ResultMessage) and message.structured_output:363 if (

364 isinstance(message, ResultMessage)

365 and not message.is_error

366 and message.structured_output

367 ):

356 data = message.structured_output368 data = message.structured_output

357 print(f"Found {data['total_count']} TODOs")369 print(f"Found {data['total_count']} TODOs")

358 for todo in data["todos"]:370 for todo in data["todos"]:


383 395 

384结构化输出生成可能会失败,当 Agent 无法生成与您的 schema 匹配的有效 JSON 时。这通常发生在 schema 对于任务来说太复杂、任务本身不明确或 Agent 在尝试修复验证错误时达到重试限制时。它也可能在没有任何验证失败的情况下发生:[模型回退](https://code.claude.com/docs/zh-CN/model-config.md#automatic-model-fallback)可以在流中途收回已完成的输出,如果没有重试替换它,运行将以相同的错误结束。在调试您的 schema 之前,检查错误结果消息上的 `errors` 列表以区分这两个原因。396结构化输出生成可能会失败,当 Agent 无法生成与您的 schema 匹配的有效 JSON 时。这通常发生在 schema 对于任务来说太复杂、任务本身不明确或 Agent 在尝试修复验证错误时达到重试限制时。它也可能在没有任何验证失败的情况下发生:[模型回退](https://code.claude.com/docs/zh-CN/model-config.md#automatic-model-fallback)可以在流中途收回已完成的输出,如果没有重试替换它,运行将以相同的错误结束。在调试您的 schema 之前,检查错误结果消息上的 `errors` 列表以区分这两个原因。

385 397 

386发生错误时,结果消息有一个 `subtype` 指示出了什么问题:398检查结果消息的 `subtype`:

387 399 

388| Subtype | 含义 |400| Subtype | 含义 |

389| - | - |401| - | - |

390| `success` | 输出已成功生成并验证 |402| `success` | 运行结束时没有错误 subtype |

391| `error_max_structured_output_retries` | 多次尝试后没有有效输出存活(验证失败,或模型回退收回且没有成功重试) |403| `error_max_structured_output_retries` | 多次尝试后没有有效输出存活(验证失败,或模型回退收回且没有成功重试) |

392 404 

393结果也可以以 `success` 的 subtype 结束,但没有 `structured_output` 值,例如当运行完成而代理没有生成结构化输出时。将该情况也视为失败。故障排除条目[structured\_output 为 None 但结果显示 success](https://code.claude.com/docs/zh-CN/agent-sdk/troubleshooting.md#structured_output-is-none-but-the-result-says-success)涵盖了这种情况。下面的示例仅当 `subtype` 为 `success` 且 `structured_output` 存在时才将结果视为成功,并将所有其他结果作为失败处理:405`success` subtype 本身并不意味着运行生成了答案。当结果的 `is_error` 为 `true` 或 `structured_output` 不存在时,应将该结果视为失败:

406 

407* **结果上的 `is_error` 为 `true`**:例如,最后一次模型请求以 API 错误或拒绝结束。不要使用此类结果上的 `structured_output` 值。

408* **`structured_output` 不存在**:要查找原因,请参阅[structured\_output 为 None 但结果显示 success](https://code.claude.com/docs/zh-CN/agent-sdk/troubleshooting.md#structured_output-is-none-but-the-result-says-success)

409 

410下面的示例应用了这些检查:

394 411 

395```typescript TypeScript theme={null}412```typescript TypeScript theme={null}

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


415 }432 }

416 })) {433 })) {

417 if (msg.type === "result") {434 if (msg.type === "result") {

418 if (msg.subtype === "success" && msg.structured_output) {435 if (msg.subtype === "success" && !msg.is_error && msg.structured_output) {

419 // 使用验证的输出436 // 使用验证的输出

420 console.log(msg.structured_output);437 console.log(msg.structured_output);

421 } else if (msg.subtype === "error_max_structured_output_retries") {438 } else if (msg.subtype === "error_max_structured_output_retries") {

422 console.error("Could not produce valid output");439 console.error("Could not produce valid output");

423 } else {440 } else {

424 console.error("Run ended without a structured output");441 console.error("Run ended with an error or without a structured output");

425 }442 }

426 }443 }

427 }444 }


455 ),472 ),

456 ):473 ):

457 if isinstance(message, ResultMessage):474 if isinstance(message, ResultMessage):

458 if message.subtype == "success" and message.structured_output:475 if (

476 message.subtype == "success"

477 and not message.is_error

478 and message.structured_output

479 ):

459 # 使用验证的输出480 # 使用验证的输出

460 print(message.structured_output)481 print(message.structured_output)

461 elif message.subtype == "error_max_structured_output_retries":482 elif message.subtype == "error_max_structured_output_retries":

462 print("Could not produce valid output")483 print("Could not produce valid output")

463 else:484 else:

464 print("Run ended without a structured output")485 print("Run ended with an error or without a structured output")

465 except Exception as error:486 except Exception as error:

466 # 单次 query() 在产生错误结果后抛出。如果失败是错误结果,487 # 单次 query() 在产生错误结果后抛出。如果失败是错误结果,

467 # 上面的错误 subtype 分支已经运行;连接或进程失败不会产生结果消息。488 # 上面的错误 subtype 分支已经运行;连接或进程失败不会产生结果消息。

Details

142 142 

143结果消息可以以 `subtype: "success"` 结尾,而在 Python 中 `structured_output` 是 `None` 或在 TypeScript 中是 `undefined`。运行完成,但不存在经过验证的输出。143结果消息可以以 `subtype: "success"` 结尾,而在 Python 中 `structured_output` 是 `None` 或在 TypeScript 中是 `undefined`。运行完成,但不存在经过验证的输出。

144 144 

145在应用程序代码中将此结果视为失败。在使用 `structured_output` 之前,检查 `subtype` 是否为 `success` 以及 `structured_output` 是否存在。[错误处理](https://code.claude.com/docs/zh-CN/agent-sdk/structured-outputs.md#error-handling) 部分为两个 SDK 显示了此模式。然后检查以下原因:145在应用程序代码中将此结果视为失败。[错误处理](https://code.claude.com/docs/zh-CN/agent-sdk/structured-outputs.md#error-handling) 部分为两个 SDK 显示了此模式。然后检查以下原因:

146 146 

147* **Claude 拒绝的请求**:要在代码中检测这种情况,请检查结果消息的 `stop_reason` 是否为 `"refusal"`。有关接下来可以尝试的操作,请参阅[使用政策拒绝](https://code.claude.com/docs/zh-CN/errors.md#usage-policy-refusal)。147* **Claude 拒绝的请求**:要在代码中检测这种情况,请检查结果消息的 `stop_reason` 是否为 `"refusal"`。有关接下来可以尝试的操作,请参阅[使用政策拒绝](https://code.claude.com/docs/zh-CN/errors.md#usage-policy-refusal)。

148* **任何输出都无法满足的 schema**:例如,一个 `minLength` 大于其 `maxLength` 的字符串。如果在使用您认为正确的 schema 时 `structured_output` 反复缺失,请查找相互矛盾的约束。如果没有找到,请简化 schema 直到输出通过验证,然后一次重新引入一个约束。148* **任何输出都无法满足的 schema**:例如,一个 `minLength` 大于其 `maxLength` 的字符串。如果在使用您认为正确的 schema 时 `structured_output` 反复缺失,请查找相互矛盾的约束。如果没有找到,请简化 schema 直到输出通过验证,然后一次重新引入一个约束。

Details

1923| `extra_usage_disabled` | 账户的使用额度已关闭 |1923| `extra_usage_disabled` | 账户的使用额度已关闭 |

1924| `network_error` | [可用性检查](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)无法到达 `api.anthropic.com` |1924| `network_error` | [可用性检查](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)无法到达 `api.anthropic.com` |

1925| `unknown` | Claude Code 无法确定可用性 |1925| `unknown` | Claude Code 无法确定可用性 |

1926| `not_first_party` | 会话使用 Anthropic API 以外的提供商 |1926| `not_first_party` | 会话使用的提供商不提供快速模式 |

1927| `disabled_by_env` | [`CLAUDE_CODE_DISABLE_FAST_MODE`](https://code.claude.com/docs/zh-CN/env-vars) 已设置 |1927| `disabled_by_env` | 已设置 [`CLAUDE_CODE_DISABLE_FAST_MODE`](https://code.claude.com/docs/zh-CN/env-vars),或模型在 [Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-on-agent-platform) 上所在的区域不提供快速模式 |

1928| `model_not_allowed` | 快速模式 Opus 模型不在组织的 [`availableModels`](https://code.claude.com/docs/zh-CN/model-config#restrict-model-selection) 允许列表中 |1928| `model_not_allowed` | 快速模式模型不在组织的 [`availableModels`](https://code.claude.com/docs/zh-CN/model-config#restrict-model-selection) 允许列表中,或提供商拒绝为会话的模型启用快速模式 |

1929| `sdk_opt_in_required` | 会话未选择加入快速模式:在 [`settings`](#options) 选项中或通过 [`applyFlagSettings()`](#applyflagsettings) 传递 `fastMode: true` |1929| `sdk_opt_in_required` | 会话未选择加入快速模式:在 [`settings`](#options) 选项中或通过 [`applyFlagSettings()`](#applyflagsettings) 传递 `fastMode: true` |

1930| `pending` | 可用性检查尚未完成 |1930| `pending` | 可用性检查尚未完成 |

1931 1931 


2007 2007 

2008#### `startup_failure_reason`2008#### `startup_failure_reason`

2009 2009 

2010Claude Code 拒绝启动的原因,以便您的应用程序可以提供修复而不是重试。Claude Code 在它在已知启动失败时退出前写入的 `error_during_execution` 结果上设置它。该结果携带零化总计,其 `errors` 数组携带与 stderr 相同的文本。该字段在所有其他结果上不存在。需要 Agent SDK v0.3.274 或更高版本。2010Claude Code 拒绝启动的原因,以便您的应用提供修复方法而不是重试。Claude Code 在因已知启动失败而退出之前写入的 `error_during_execution` 结果上设置该字段。该结果携带归零的汇总,其 `errors` 数组携带失败消息。在其他所有结果上该字段都不存在。需要 Agent SDK v0.3.274 或更高版本。

2011 2011 

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

2013 2013 


5709 5709 

5710### `SDKTaskStartedMessage`5710### `SDKTaskStartedMessage`

5711 5711 

5712在任务开始时发出。对于 Bash 命令和 [Monitor](#monitor) 监视,`task_type` 字段为 `"local_bash"`;对于子代理为 `"local_agent"`;否则为 `"remote_agent"`。5712在任务开始时发出。`task_type` 指明任务的类型,例如 Bash 命令和 [Monitor](#monitor) 监视为 `"local_bash"`,子代理为 `"local_agent"`,[后台 MCP 工具调用](https://code.claude.com/docs/zh-CN/mcp.md#automatic-backgrounding-of-long-tool-calls)为 `"mcp_task"`,或者为 `"remote_agent"`。

5713 5713 

5714```typescript theme={null}5714```typescript theme={null}

5715type SDKTaskStartedMessage = {5715type SDKTaskStartedMessage = {


5918 errorCode?: "credits_required";5918 errorCode?: "credits_required";

5919 canUserPurchaseCredits?: boolean;5919 canUserPurchaseCredits?: boolean;

5920 hasChargeableSavedPaymentMethod?: boolean;5920 hasChargeableSavedPaymentMethod?: boolean;

5921 overageEnabled?: boolean;

5921 };5922 };

5922 uuid: UUID;5923 uuid: UUID;

5923 session_id: string;5924 session_id: string;


5926 5927 

5927当 `errorCode` 为 `"credits_required"` 时,表示拒绝来自已用尽所含用量的 claude.ai 订阅,在用户购买使用额度之前,会话无法继续。`canUserPurchaseCredits` 表示已通过身份验证的用户是否可以为该账户购买额度,`hasChargeableSavedPaymentMethod` 表示是否存有已保存的付款方式。在不属于 credits-required 拒绝的速率限制事件上,这三个字段都不存在。需要 Claude Code v2.1.181 或更高版本。5928当 `errorCode` 为 `"credits_required"` 时,表示拒绝来自已用尽所含用量的 claude.ai 订阅,在用户购买使用额度之前,会话无法继续。`canUserPurchaseCredits` 表示已通过身份验证的用户是否可以为该账户购买额度,`hasChargeableSavedPaymentMethod` 表示是否存有已保存的付款方式。在不属于 credits-required 拒绝的速率限制事件上,这三个字段都不存在。需要 Claude Code v2.1.181 或更高版本。

5928 5929 

5930在关于套餐用量限制的警告上(即 `status` 为 `"allowed_warning"` 时),`overageEnabled` 报告该账户是否已启用[使用额度](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。需要 Claude Code v2.1.295 或更高版本。

5931 

5929### `SDKLocalCommandOutputMessage`5932### `SDKLocalCommandOutputMessage`

5930 5933 

5931Claude Code 不会发出此消息类型。当您将 `/context` 或 `/usage` 等命令作为提示词发送时,其输出会以 [`SDKAssistantMessage`](#sdkassistantmessage) 的形式到达。5934Claude Code 不会发出此消息类型。当您将 `/context` 或 `/usage` 等命令作为提示词发送时,其输出会以 [`SDKAssistantMessage`](#sdkassistantmessage) 的形式到达。

Details

647 647 

648 648 

649def parse_response(response: str, options: list) -> str:649def parse_response(response: str, options: list) -> str:

650 """将用户输入解析为选项编号或自由文本。"""650 """Parse user input as option number(s) or free text."""

651 try:651 try:

652 indices = [int(s.strip()) - 1 for s in response.split(",")]652 indices = [int(s.strip()) - 1 for s in response.split(",")]

653 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]653 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]


657 657 

658 658 

659async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:659async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:

660 """显示 Claude 的问题并收集用户答案。"""660 """Display Claude's questions and collect user answers."""

661 answers = {}661 answers = {}

662 662 

663 for q in input_data.get("questions", []):663 for q in input_data.get("questions", []):

agent-teams.md +45 −45

Details

8 8 

9> [!WARNING]9> [!WARNING]

10>10>

11> Agent teams 是实验性功能,默认禁用。通过在你的 [settings.json](https://code.claude.com/docs/zh-CN/settings.md) 或环境中设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 来启用它们。如果没有该变量,会话启动时不会设置任何团队,不会写入团队目录,Claude 也不会生成或提议队友。Agent teams 在 [已知限制](#limitations) 中存在关于会话恢复、任务协调和关闭行为的问题。11> Agent teams 是实验性功能,默认禁用。通过在您的 [settings.json](https://code.claude.com/docs/zh-CN/settings.md) 或环境中设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 来启用它们。Agent teams 在会话恢复、任务协调和关闭行为方面存在[已知限制](#limitations)。

12 12 

13Agent teams 让你协调多个 Claude Code 实例一起工作。一个会话充当团队负责人,协调工作、分配任务和综合结果。队友独立工作,每个都在自己的 context window 中,并直接相互通信。你也可以直接与任何队友互动,无需通过负责人。13Agent teams 让你协调多个 Claude Code 实例一起工作。一个会话充当团队负责人,协调工作、分配任务和综合结果。队友独立工作,每个都在自己的 context window 中,并直接相互通信。你也可以直接与任何队友互动,无需通过负责人。

14 14 


221 221 

222## Agent teams 如何工作222## Agent teams 如何工作

223 223 

224本部分涵盖 agent teams 背后的架构和机制。如果你想开始使用它们,请参阅上面的 [控制你的 agent team](#control-your-agent-team)。224本部分介绍 agent teams 背后的架构和机制。如果您想开始使用它们,请参阅上面的[控制您的 agent team](#control-your-agent-team)。

225 225 

226### Claude 如何启动 agent teams226### Claude 如何启动 agent teams

227 227 

228要启动一个团队,请向 Claude 请求队友。当 Claude 在启用 agent teams 的情况下调用 [Agent tool](https://code.claude.com/docs/zh-CN/tools-reference.md) 并使用 [`name`](https://code.claude.com/docs/zh-CN/sub-agents#subagent-names) 时,除非该调用是一个 [fork](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation) 或在调用本身上传递 `isolation`,否则 Claude 会启动一个队友。Claude Code 不会要求你确认启动。228要启动一个团队,请向 Claude 请求队友。在启用 agent teams 的情况下,当 Claude 使用 [`name`](https://code.claude.com/docs/zh-CN/sub-agents#subagent-names) 调用 [Agent 工具](https://code.claude.com/docs/zh-CN/tools-reference.md)时,它会启动一个队友,除非该调用是一个 [fork](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation) 或在调用本身上传递了 `isolation`。Claude Code 不会要求您确认启动。

229 229 

230Claude 也会自动为普通 subagents 命名,以便稍后可以向它们发送消息。这些调用遵循相同的规则,所以即使你没有请求,团队也可能形成。如果你想要 subagents 而不是 agent teams,请 [关闭 agent teams](#claude-spawns-teammates-instead-of-subagents)。230Claude 也会自行为普通子代理命名,以便稍后向它们发送消息。这些调用遵循相同的规则,因此即使您没有请求,团队也可能形成。如果您想要子代理,请[关闭 agent teams](#claude-spawns-teammates-instead-of-subagents)。

231 231 

232### 架构232### 架构

233 233 


238| **Team lead** | 生成队友并协调工作的主 Claude Code 会话 |238| **Team lead** | 生成队友并协调工作的主 Claude Code 会话 |

239| **Teammates** | 各自处理分配任务的独立 Claude Code 实例 |239| **Teammates** | 各自处理分配任务的独立 Claude Code 实例 |

240| **Task list** | 队友认领和完成的共享工作项列表 |240| **Task list** | 队友认领和完成的共享工作项列表 |

241| **Mailbox** | 代理之间通信的消息系统 |241| **Mailbox** | 用于 Agent 之间通信的消息系统 |

242 242 

243每个 Agent 的邮箱是位于 `~/.claude/teams/{team-name}/inboxes/{agent-name}.json` 的 JSON 文件。Claude Code 在读取邮箱文件时会验证每个条目。不匹配消息格式的条目会被报告为错误并从文件中删除;有效的消息仍然会被传递。243每个 Agent 的邮箱是位于 `~/.claude/teams/{team-name}/inboxes/{agent-name}.json` 的 JSON 文件。Claude Code 在读取邮箱文件时会验证每个条目。不匹配消息格式的条目会被报告为错误并从文件中删除;有效的消息仍然会被传递。

244 244 

245Claude Code 仅在写入收件人邮箱文件成功时才报告消息已发送,无论消息是纯文本还是结构化协议消息(如计划批准或关闭请求)。当写入失败时,例如因为磁盘已满或邮箱目录不可写,发送代理会收到错误,什么都不会被发送。有关错误消息和恢复步骤,请参阅 [Failed to write to a teammate's inbox](https://code.claude.com/docs/zh-CN/errors.md#failed-to-write-to-a-teammate-inbox)。245Claude Code 仅在写入收件人邮箱文件成功时才报告消息已发送,无论消息是纯文本还是结构化协议消息(如计划批准或关闭请求)。当写入失败时,例如因为磁盘已满或邮箱目录不可写,发送方 Agent 会收到错误,并且不会发送任何内容。有关错误消息和恢复步骤,请参阅 [Failed to write to a teammate's inbox](https://code.claude.com/docs/zh-CN/errors.md#failed-to-write-to-a-teammate-inbox)。

246 246 

247Claude Code 自动管理任务依赖关系:当队友完成其他任务依赖的任务时,被阻止的任务会自动解除阻止,无需你采取任何行动。247Claude Code 自动管理任务依赖:当队友完成其他任务所依赖的任务时,它会解除对这些依赖任务的阻止,无需您采取任何操作。

248 248 

249团队和任务存储在本地,名称来自会话派生的名称。名称是 `session-` 后跟会话 ID 的前八个字符:249团队和任务以会话派生的名称存储在本地。名称是 `session-` 后跟会话 ID 的前八个字符:

250 250 

251* **Team config**:`~/.claude/teams/{team-name}/config.json`。Claude Code 会在会话结束时删除团队配置目录。251* **Team config**:`~/.claude/teams/{team-name}/config.json`。Claude Code 会在会话结束时删除团队配置目录。

252* **Task list**:`~/.claude/tasks/{team-name}/`。此目录在会话结束后仍保留在磁盘上。要更改 [Claude Code 保留它的时长](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically),请设置 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#cleanupperioddays)。252* **Task list**:`~/.claude/tasks/{team-name}/`。此目录在会话结束后仍保留在磁盘上。要更改 [Claude Code 保留它的时长](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically),请设置 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#cleanupperioddays)。

253 253 

254Claude Code 在会话启动时自动生成这两项,并在队友加入、空闲或离开时更新它们。254Claude Code 在会话启动时自动生成这两项,并在队友加入、空闲或离开时更新它们。

255 255 

256团队配置保存运行时状态,例如会话 ID 和 tmux 窗格 ID,所以不要手动编辑它或预先编写它:你的更改会在下一次状态更新时被覆盖。256团队配置保存运行时状态,例如会话 ID 和 tmux 窗格 ID,因此请勿手动编辑或预先编写它:您的更改会在下一次状态更新时被覆盖。

257 257 

258要定义可重用的队友角色,请改用 [subagent 定义](#use-subagent-definitions-for-teammates)。258要定义可重用的队友角色,请改用[子代理定义](#use-subagent-definitions-for-teammates)。

259 259 

260团队配置包含一个 `members` 数组,其中包含每个成员的名称和代理 ID。负责人的条目始终携带代理类型 `team-lead`。队友的条目携带负责人在生成它时命名的任何代理类型,无论是 [built-in type](https://code.claude.com/docs/zh-CN/sub-agents.md#built-in-subagents) 还是 [subagent definition](#use-subagent-definitions-for-teammates),当负责人没有命名任何类型时省略该字段。队友可以读取此文件以发现其他团队成员。260团队配置包含一个 `members` 数组,其中包含每个成员的名称和 Agent ID。负责人的条目始终带有 Agent 类型 `team-lead`。队友的条目带有负责人在生成它时指定的 Agent 类型,无论是[内置类型](https://code.claude.com/docs/zh-CN/sub-agents.md#built-in-subagents)还是[子代理定义](#use-subagent-definitions-for-teammates);当负责人未指定任何类型时,则省略该字段。队友可以读取此文件以发现其他团队成员。

261 261 

262没有项目级别的团队配置等效项。项目目录中的 `.claude/teams/teams.json` 之类的文件不被识别为配置;Claude 将其视为普通文件。262团队配置没有项目级别的等效项。项目目录中类似 `.claude/teams/teams.json` 的文件不会被识别为配置;Claude 会将其视为普通文件。

263 263 

264### 为队友使用 subagent 定义264### 为队友使用子代理定义

265 265 

266当在任一显示模式中生成队友时,您可以引用来自项目、用户、托管或插件 [子代理作用域](https://code.claude.com/docs/zh-CN/sub-agents.md#choose-the-subagent-scope) 的 [子代理](https://code.claude.com/docs/zh-CN/sub-agents.md) 类型。这让您只需定义一次角色,例如安全审查员或测试运行器,并将其同时重用为委派的子代理和 agent team 队友。266在任一显示模式中生成队友时,您可以引用来自项目、用户、托管或插件[子代理作用域](https://code.claude.com/docs/zh-CN/sub-agents.md#choose-the-subagent-scope)的[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)类型。这让您只需定义一次角色,例如安全审查员或测试运行器,并将其同时重用为委派的子代理和 agent team 队友。

267 267 

268要使用 subagent 定义,在要求 Claude 生成队友时按名称提及它:268要使用子代理定义,请在要求 Claude 生成队友时指明其名称:

269 269 

270```text wrap theme={null}270```text wrap theme={null}

271Spawn a teammate using the security-reviewer agent type to audit the auth module.271Spawn a teammate using the security-reviewer agent type to audit the auth module.

272```272```

273 273 

274Claude Code 读取你命名的 subagent 定义,并将其以下部分应用于队友。当一个部分取决于队友的 [display mode](#choose-a-display-mode) 时,条目会说明:274Claude Code 读取您指定的子代理定义,并将其以下部分应用于队友。当某一部分取决于队友的[显示模式](#choose-a-display-mode)时,条目中会加以说明:

275 275 

276* **`tools`**:Claude Code 将队友限制为定义的 `tools` 列表中的工具。对于进程内队友,Claude Code 将 `SendMessage` 添加到该列表,在 [具有 Task tools 的会话](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability) 中,它还添加 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。276* **`tools`**:Claude Code 将队友限制为定义的 `tools` 列表中的工具。对于进程内队友,Claude Code 会将 `SendMessage` 添加到该列表;在[具有 Task 工具的会话](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability)中,它还会添加 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。

277* **`model`**:当你的生成提示没有命名模型时,Claude Code 在任一显示模式中使用定义的 `model`。请参阅 [Claude Code 如何选择队友的模型](#specify-teammates-and-models)。277* **`model`**:当您的生成提示词未指定模型时,Claude Code 在任一显示模式中都会使用定义的 `model`。请参阅 [Claude Code 如何选择队友的模型](#specify-teammates-and-models)。

278* **`disallowedTools`**:对于进程内队友,Claude Code 会从队友的工具集中移除定义的 `disallowedTools` 中的工具。即使该列表中列出了 `SendMessage` 以及 Claude Code 添加的 Task 工具,它们仍然可用。278* **`disallowedTools`**:对于进程内队友,Claude Code 会从队友的工具集中移除定义的 `disallowedTools` 中的工具。即使该列表中列出了 `SendMessage` 以及 Claude Code 添加的 Task 工具,它们仍然可用。

279* **`effort`**:对于进程内队友,Claude Code 按照 [frontmatter effort 规则](https://code.claude.com/docs/zh-CN/model-config.md#set-the-effort-level) 应用定义的 [`effort`](https://code.claude.com/docs/zh-CN/sub-agents#supported-frontmatter-fields)。279* **`effort`**:对于进程内队友,Claude Code 按照 [frontmatter effort 规则](https://code.claude.com/docs/zh-CN/model-config.md#set-the-effort-level)应用定义的 [`effort`](https://code.claude.com/docs/zh-CN/sub-agents#supported-frontmatter-fields)。

280* **`autoCompactWindow`**:对于进程内队友,Claude Code 按照 [该字段的规则](https://code.claude.com/docs/zh-CN/sub-agents.md#subagent-auto-compact-window) 应用定义的 [`autoCompactWindow`](https://code.claude.com/docs/zh-CN/sub-agents#supported-frontmatter-fields)。分割窗格队友会忽略该字段。需要 Claude Code v2.1.296 或更高版本。280* **`autoCompactWindow`**:对于进程内队友,Claude Code 按照[该字段的规则](https://code.claude.com/docs/zh-CN/sub-agents.md#subagent-auto-compact-window)应用定义的 [`autoCompactWindow`](https://code.claude.com/docs/zh-CN/sub-agents#supported-frontmatter-fields)。分割窗格队友会忽略该字段。需要 Claude Code v2.1.296 或更高版本。

281* **Body**:对于进程内队友,Claude Code 将定义的主体附加到其默认系统提示作为额外指示。对于分割窗格队友,Claude Code 使用主体代替其默认系统提示。281* **Body**:对于进程内队友,Claude Code 会将定义的正文作为额外指示附加到其默认系统提示词之后。对于分割窗格队友,Claude Code 使用该正文代替其默认系统提示词。

282* **`skills`**:Claude Code 在任一显示模式中都不将定义的 `skills` 应用于队友。队友从你的项目和用户设置加载 skills。282* **`skills`**:在任一显示模式中,Claude Code 都不会将定义的 `skills` 应用于队友。队友从您的项目和用户设置加载 skill。

283* **`mcpServers`**:对于分割窗格队友,Claude Code 在 [该字段的规则](https://code.claude.com/docs/zh-CN/sub-agents.md#scope-mcp-servers-to-a-subagent) 下应用定义的 `mcpServers`,这些规则涵盖使用 `--agent` 启动的会话。进程内队友忽略该字段,从你的项目和用户设置加载 MCP servers。283* **`mcpServers`**:对于分割窗格队友,Claude Code 按照[该字段的规则](https://code.claude.com/docs/zh-CN/sub-agents.md#scope-mcp-servers-to-a-subagent)应用定义的 `mcpServers`,这些规则同样涵盖使用 `--agent` 启动的会话。进程内队友会忽略该字段,并从您的项目和用户设置加载 MCP 服务器。

284 284 

285当 Claude 向一个不再运行的进程内队友发送消息时,Claude Code 会在同一会话中将其恢复,恢复为其保存的任何对话,并将消息作为其下一个提示给予它。在你恢复一个会话后,队友不会以这种方式被恢复,根据 [恢复限制](#limitations)。285当 Claude 向一个已不再运行的进程内队友发送消息时,Claude Code 会在同一会话中将其恢复,恢复为其保存的任何对话,并将该消息作为其下一个提示词交给它。根据[恢复限制](#limitations),在您恢复会话后,队友不会以这种方式被恢复。

286 286 

287对于它恢复的队友,Claude Code 重新应用来自项目的 `.claude/agents/` 目录或 `--add-dir` 目录的定义,仅当你 [信任了代理文件所在的文件夹](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder) 时。信任父文件夹不算数。在那之前,队友会恢复时不带定义的任何工具或指示,仅保留 Claude Code 添加到每个进程内队友的工具。请参阅 [the teammate's agent definition was not restored](https://code.claude.com/docs/zh-CN/errors.md#teammate-agent-definition-not-restored) 了解通知文本。287对于它恢复的队友,仅当您已[信任代理文件所在的文件夹](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)时,Claude Code 才会重新应用来自项目的 `.claude/agents/` 目录或 `--add-dir` 目录的定义。信任父文件夹不算数。在此之前,队友恢复时不会带有定义中的任何工具或指示,仅保留 Claude Code 添加到每个进程内队友的工具。有关通知文本,请参阅 [the teammate's agent definition was not restored](https://code.claude.com/docs/zh-CN/errors.md#teammate-agent-definition-not-restored)。

288 288 

289### 权限289### 权限

290 290 

291要循环切换正在运行的队友的权限模式,请按 [`Shift+Tab`](https://code.claude.com/docs/zh-CN/permission-modes#switch-permission-modes),不过进程内队友可能会改为以负责人的模式运行。对于分割窗格队友,请在其窗格中按该键。对于 [进程内](#choose-a-display-mode) 队友,请在 [查看其会话](#talk-to-teammates-directly) 时按该键,队友会在开始下一轮次时检查其模式。291要循环切换正在运行的队友的权限模式,请按 [`Shift+Tab`](https://code.claude.com/docs/zh-CN/permission-modes#switch-permission-modes),不过进程内队友可能会改为以负责人的模式运行。对于分割窗格队友,请在其窗格中按该键。对于[进程内](#choose-a-display-mode)队友,请在[查看其会话](#talk-to-teammates-directly)时按该键,队友会在开始下一轮次时检查其模式。

292 292 

293> [!NOTE]293> [!NOTE]

294>294>

295> 不处于 [计划模式](#have-teammates-plan-before-implementing) 的进程内队友,在负责人处于 [`acceptEdits`](https://code.claude.com/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)、[`auto`](https://code.claude.com/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 或 [`bypassPermissions`](https://code.claude.com/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) 模式时,会以负责人的模式运行。将该队友切换到 Manual 不会改变这一点,即使其状态栏显示 Manual。295> 不处于[计划模式](#have-teammates-plan-before-implementing)的进程内队友,在负责人处于 [`acceptEdits`](https://code.claude.com/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)、[`auto`](https://code.claude.com/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 或 [`bypassPermissions`](https://code.claude.com/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode) 模式时,会以负责人的模式运行。将该队友切换到 Manual 不会改变这一点,即使其状态栏显示 Manual。

296>296>

297> 要让它在编辑前询问,请在 Agent 面板中的 `main` 行上按 Enter,并将负责人也切换到 Manual 模式。之后负责人也会询问,任何其他处于 Manual 模式的队友同样如此。297> 要让它在编辑前询问,请在 Agent 面板中的 `main` 行上按 Enter,并将负责人也切换到 Manual 模式。之后负责人也会询问,任何其他处于 Manual 模式的队友同样如此。

298 298 

299您无法在生成时设置每个队友的权限模式。新队友以负责人的模式启动,包括由 `--dangerously-skip-permissions` 开启的 `bypassPermissions` 模式。如果负责人处于 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode),队友则改为以 [Manual 模式](https://code.claude.com/docs/zh-CN/permission-modes.md#available-modes) 启动。对于负责人处于 Manual 或 `dontAsk` 模式的分割窗格队友,这需要 Claude Code v2.1.317 或更高版本。299您无法在生成时设置每个队友的权限模式。新队友以负责人的模式启动,包括由 `--dangerously-skip-permissions` 开启的 `bypassPermissions` 模式。如果负责人处于 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode),队友则改为以 [Manual 模式](https://code.claude.com/docs/zh-CN/permission-modes.md#available-modes)启动。对于负责人处于 Manual 或 `dontAsk` 模式的分割窗格队友,这需要 Claude Code v2.1.317 或更高版本。

300 300 

301[进程内](#choose-a-display-mode)队友在负责人实时的允许和拒绝规则下运行,因此 [`--disallowedTools`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags)、`--tools` 和 `--allowedTools` 都适用于它。对于分割窗格队友,请逐一检查各个标志:301[进程内](#choose-a-display-mode)队友在负责人实时的允许和拒绝规则下运行,因此 [`--disallowedTools`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags)、`--tools` 和 `--allowedTools` 都适用于它。对于分割窗格队友,请逐一检查各个标志:

302 302 

303* **`--disallowedTools` 和 `--tools`**:队友以负责人的命令行拒绝规则和工具列表启动。需要 Claude Code v2.1.309 或更高版本。303* **`--disallowedTools` 和 `--tools`**:队友以负责人的命令行拒绝规则和工具列表启动。需要 Claude Code v2.1.309 或更高版本。

304* **`--allowedTools`**:Claude Code 不会将此标志传递给分割窗格队友,因此仅通过该标志允许的操作在那里不会被预先批准。要提前批准这些操作,请在启动负责人时将规则放在 [`--settings`](https://code.claude.com/docs/zh-CN/settings#change-a-setting-for-one-session) 的 `permissions.allow` 下。例如,在您的 shell 中运行 `claude --settings '{"permissions":{"allow":["Bash(npm *)"]}}'`。这些规则在该会话中适用于负责人和每个分割窗格队友。304* **`--allowedTools`**:Claude Code 不会将此标志传递给分割窗格队友,因此仅通过该标志允许的操作在那里不会被预先批准。要提前批准这些操作,请在启动负责人时将规则放在 [`--settings`](https://code.claude.com/docs/zh-CN/settings#change-a-setting-for-one-session) 的 `permissions.allow` 下。例如,在您的 shell 中运行 `claude --settings '{"permissions":{"allow":["Bash(npm *)"]}}'`。这些规则在该会话中适用于负责人和每个分割窗格队友。

305 305 

306队友权限提示出现在负责人会话中,所以请在那里亲自批准它们。您无需批准 [队友的计划](#have-teammates-plan-before-implementing)。306队友权限提示出现在负责人会话中,所以请在那里亲自批准它们。您无需批准[队友的计划](#have-teammates-plan-before-implementing)。

307 307 

308#### 代理之间的消息308#### Agent 之间的消息

309 309 

310当一个代理通过 `SendMessage` 向另一个代理发送消息时,Claude Code 告诉接收代理消息来自另一个 Claude 会话,而不是来自你。队友无法批准权限提示或代表你提供同意,被拒绝某项操作的队友无法将其转发给另一个队友以绕过检查。相同的规则适用于来自 [你的其他 Claude Code 会话](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#how-a-session-treats-an-incoming-message) 的消息,完全在团队之外。310当一个 Agent 通过 `SendMessage` 向另一个 Agent 发送消息时,Claude Code 会告知接收方 Agent 该消息来自另一个 Claude 会话,而不是来自您。队友无法批准权限提示或代表您表示同意,被拒绝某项操作的队友也无法将其转交给另一个队友以绕过检查。相同的规则也适用于来自[您的其他 Claude Code 会话](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#how-a-session-treats-an-incoming-message)的消息,即完全来自团队之外的消息。

311 311 

312在 [auto mode](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode) 中,分类器对代理之间的消息应用两项检查:312在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中,分类器对 Agent 之间的消息应用两项检查:

313 313 

314* 它将从另一个代理转发的批准声明视为不受信任的输入,而不是来自你的确认。314* 它将从另一个 Agent 转交的批准声明视为不受信任的输入,而不是来自您的确认。

315* 它在 Claude Code 传递消息之前审查每条消息,无论是纯消息还是结构化协议消息(如关闭请求或计划批准响应)。它阻止的消息永远不会到达收件人。315* 它在 Claude Code 传递每条消息之前对其进行审查,无论是普通消息还是结构化协议消息(如关闭请求或计划批准响应)。被它阻止的消息永远不会到达收件人。

316 316 

317### Context 和通信317### 上下文和通信

318 318 

319每个队友都有自己的 context window。生成时,队友加载与常规会话相同的项目 context:CLAUDE.md、MCP servers 和 skills。如果你使用 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 启动负责人,队友会从相同的受限源列表加载。在 v2.1.281 之前,[split-pane](#choose-a-display-mode) 队友加载每个设置源。319每个队友都有自己的上下文窗口。生成时,队友加载与常规会话相同的项目上下文:CLAUDE.md、MCP 服务器和 skill。如果您使用 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 启动负责人,队友会从相同的受限来源列表加载。在 v2.1.281 之前,[分割窗格](#choose-a-display-mode)队友会加载所有设置来源。

320 320 

321队友也接收来自负责人的生成提示。负责人的对话历史不会继承。321队友还会接收来自负责人的生成提示词。负责人的对话历史不会延续。

322 322 

323**队友如何共享信息:**323**队友如何共享信息:**

324 324 

325* **自动消息传递**:当队友发送消息时,它们会自动传递给收件人。负责人不需要轮询更新。325* **自动消息传递**:当队友发送消息时,消息会自动传递给收件人。负责人无需轮询更新。

326* **空闲通知**:当队友完成并停止时,它会自动通知负责人并在通知中包含其最终答案。其轮次因 API 错误而结束的队友会通知负责人它失败了并包含错误文本。326* **空闲通知**:当队友完成并停止时,它会自动通知负责人,并在通知中包含其最终答案。轮次因 API 错误而结束的队友会通知负责人其已失败,并包含错误文本。

327* **共享任务列表**:[具有 Task tools 的代理](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability) 可以看到任务状态并认领可用工作。327* **共享任务列表**:[具有 Task 工具的 Agent](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability) 可以查看任务状态并认领可用工作。

328* **队友消息传递**:按名称向一个特定的队友发送消息。要联系所有人,请为每个收件人发送一条消息。328* **队友消息传递**:按名称向某个特定队友发送消息。要联系所有人,请为每个收件人各发送一条消息。

329 329 

330负责人在生成队友时为其分配一个名称,任何队友都可以按该名称向任何其他队友发送消息。要获得可预测的名称,你可以在后续提示中引用,在你的生成指令中告诉负责人如何称呼每个队友。330负责人在生成每个队友时为其分配一个名称,任何队友都可以按该名称向其他任何队友发送消息。要获得可在后续提示词中引用的可预测名称,请在生成指令中告诉负责人如何称呼每个队友。

331 331 

332### 令牌使用332### token 使用

333 333 

334Agent teams 使用的令牌数量明显多于单个会话。每个队友都有自己的 context window,令牌使用量随活跃队友数量而增加。对于研究、审查和新功能工作,额外的令牌通常是值得的。对于日常任务,单个会话更具成本效益。有关使用指导,请参阅 [agent team 令牌成本](https://code.claude.com/docs/zh-CN/costs.md#agent-team-token-costs)。334Agent teams 使用的 token 明显多于单个会话。每个队友都有自己的上下文窗口,token 使用量随活跃队友的数量而增加。对于研究、审查和新功能工作,额外的 token 通常是值得的。对于日常任务,单个会话更具成本效益。有关使用指导,请参阅 [agent team token 成本](https://code.claude.com/docs/zh-CN/costs.md#agent-team-token-costs)。

335 335 

336进程内队友的请求落在主对话的 [cache TTL bucket](https://code.claude.com/docs/zh-CN/prompt-caching.md#which-ttl-each-request-gets) 之外,所以其缓存默认保持五分钟,包括在 Claude 订阅上。要将其保持一小时,请将 [`subagentPromptCacheTtl`](https://code.claude.com/docs/zh-CN/settings-reference#subagentpromptcachettl) 设置为 `1h`。API 以更高的速率计费 1 小时缓存写入。336进程内队友的请求不属于主对话的 [cache TTL bucket](https://code.claude.com/docs/zh-CN/prompt-caching.md#which-ttl-each-request-gets),因此其缓存默认保留五分钟,在 Claude 订阅上也是如此。要将其保留一小时,请将 [`subagentPromptCacheTtl`](https://code.claude.com/docs/zh-CN/settings-reference#subagentpromptcachettl) 设置为 `1h`。API 对 1 小时缓存写入按更高的费率计费。

337 337 

338## 用例示例338## 用例示例

339 339 

agent-view.md +0 −2

Details

892 892 

893该命令还会在运行的监督进程版本与您调用的 `claude` 版本不同时发出警告,这发生在监督进程尚未重新启动到新版本的更新之后。警告显示两个版本,并告诉您运行 `claude daemon stop --any` 以获取新版本。893该命令还会在运行的监督进程版本与您调用的 `claude` 版本不同时发出警告,这发生在监督进程尚未重新启动到新版本的更新之后。警告显示两个版本,并告诉您运行 `claude daemon stop --any` 以获取新版本。

894 894 

895会话在该版本不匹配时完好无损:更新会话 `state.json` 的较旧 Claude Code 版本会保留它不识别的字段并保持会话列出。`roster.json` 中的会话列表遵循相同的规则,因此由较新版本启动的会话保持可达并在监督进程重新启动后继续接受输入。

896 

897### 关闭 agent view895### 关闭 agent view

898 896 

899要完全关闭后台 Agent 和 agent view,请将 `disableAgentView` [设置](https://code.claude.com/docs/zh-CN/settings.md)设为 `true` 或设置 `CLAUDE_CODE_DISABLE_AGENT_VIEW` 环境变量。管理员可以通过[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)强制执行此项。897要完全关闭后台 Agent 和 agent view,请将 `disableAgentView` [设置](https://code.claude.com/docs/zh-CN/settings.md)设为 `true` 或设置 `CLAUDE_CODE_DISABLE_AGENT_VIEW` 环境变量。管理员可以通过[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)强制执行此项。

Details

367| `ap-*` | `apac.` |367| `ap-*` | `apac.` |

368| 所有其他区域 | `global.` |368| 所有其他区域 | `global.` |

369 369 

370设置 `ANTHROPIC_BEDROCK_REGION_PREFIX` 以选择 Claude Code 首先尝试的前缀;当 Claude Code 可以检查配置文件可用性并且找不到模型的匹配配置文件时,它会按照下面的解析顺序进行回退。有效值为 `us`、`eu`、`apac`、`jp`、`au` 和 `global`。例如,当您的账户启用了 `global.` 配置文件但 Claude Code 会从您的 AWS 区域派生地理位置特定的配置文件时,将其设置为 `global`。需要 Claude Code v2.1.224 或更高版本。370设置 `ANTHROPIC_BEDROCK_REGION_PREFIX` 以选择 Claude Code 首先尝试的前缀。有效值为 `us`、`eu`、`apac`、`jp`、`au` 和 `global`。例如,当您的账户启用了 `global.` 配置文件但 Claude Code 会从您的 AWS 区域派生地理位置特定的配置文件时,将其设置为 `global`。

371 371 

372此示例通过 `global.` 配置文件路由默认模型:372此示例通过 `global.` 配置文件路由默认模型:

373 373 

artifacts.md +19 −2

Details

64| :- | :- |64| :- | :- |

65| 会话处于[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode) | 在每个 Artifact 首次发布前询问 |65| 会话处于[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode) | 在每个 Artifact 首次发布前询问 |

66| 该发布声明了页面的运行时功能,例如[连接器调用](#pull-live-data-with-mcp-connectors)或[文件下载](#offer-a-file-download) | 在该次发布前询问 |66| 该发布声明了页面的运行时功能,例如[连接器调用](#pull-live-data-with-mcp-connectors)或[文件下载](#offer-a-file-download) | 在该次发布前询问 |

67| 您已公开共享该 Artifact | 每个对话中在更改它之前询问一次 |67| 您已公开共享该 Artifact | 每个对话中在更改它之前询问一次,并在每次回复其上的评论之前询问 |

68| Claude 在由您会话中触发的[会话级定时任务](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)(而非您输入的提示词)启动的轮次中发布 | 在每个 Artifact 首次发布前询问 |68| Claude 在由您会话中触发的[会话级定时任务](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)(而非您输入的提示词)启动的轮次中发布 | 在每个 Artifact 首次发布前询问 |

69| Claude 未经您批准无法读取该文件 | 在发布前询问。针对 `Artifact` 工具的允许规则不会跳过此提示 |69| Claude 未经您批准无法读取该文件 | 在发布前询问。针对 `Artifact` 工具的允许规则不会跳过此提示 |

70| 在 [Manual](https://code.claude.com/docs/zh-CN/permission-modes.md) 或 `acceptEdits` 模式下,Claude 对某个未经您批准无法编辑的 Artifact 文件进行小幅更改,例如 Manual 模式下的项目文件 | 在发布该更改前询问。即使有允许规则涵盖 `Artifact` 工具,也会询问您,因为对该文件的编辑需要您的批准 |70| 在 [Manual](https://code.claude.com/docs/zh-CN/permission-modes.md) 或 `acceptEdits` 模式下,Claude 对某个未经您批准无法编辑的 Artifact 文件进行小幅更改,例如 Manual 模式下的项目文件 | 在发布该更改前询问。即使有允许规则涵盖 `Artifact` 工具,也会询问您,因为对该文件的编辑需要您的批准 |


89使用今天的数字更新 https://claude.ai/code/artifact/5fbea6f3-...89使用今天的数字更新 https://claude.ai/code/artifact/5fbea6f3-...

90```90```

91 91 

92### 关闭一步式 Artifact 更新

93 

94一步式更新是指 Claude 在发布过程中对 Artifact 文件所做的小幅更改,而不是通过 `Edit` 或 `Write` 调用进行的更改。

95 

96要关闭一步式更新,请将 [`CLAUDE_CODE_ARTIFACT_PUBLISH_EDITS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `0`。以下示例将该变量添加到 `~/.claude/settings.json` 中的 `env` 块:

97 

98```json theme={null}

99{

100 "env": {

101 "CLAUDE_CODE_ARTIFACT_PUBLISH_EDITS": "0"

102 }

103}

104```

105 

106然后退出并重新启动 Claude Code,因为正在运行的会话不会重新读取该变量。

107 

92## 再次查找一个artifact108## 再次查找一个artifact

93 109 

94在Claude Code中运行`/artifacts`,以列出您拥有的Artifact以及与您共享的Artifact。当前会话的Artifact排在最前面,位于**This session**下。110在Claude Code中运行`/artifacts`,以列出您拥有的Artifact以及与您共享的Artifact。当前会话的Artifact排在最前面,位于**This session**下。


111你可以与谁分享取决于你的计划:127你可以与谁分享取决于你的计划:

112 128 

113* **在你的组织内**:在Team和Enterprise计划上,向组织中的特定人员或所有人授予访问权限。查看者以组织成员身份登录claude.ai以查看该页面。129* **在你的组织内**:在Team和Enterprise计划上,向组织中的特定人员或所有人授予访问权限。查看者以组织成员身份登录claude.ai以查看该页面。

130* **有权访问共享文件夹的人员**:在 Team 和 Enterprise 计划上,将该 Artifact 移动到您拥有或担任编辑者的文件夹中。请从 [Artifacts 页面](https://claude.ai/artifacts)进行移动,如果您可以使用 claude.ai 聊天,即可使用该页面。之后,有权访问该文件夹的每个人都可以打开它,并且该文件夹的所有者和编辑者可以更改它。

114* **公开**:分享一个链接,互联网上的任何人都可以打开,无需claude.ai登录。在Team和Enterprise计划上,公开分享处于关闭状态,直到所有者[为组织启用它](#control-public-sharing)。131* **公开**:分享一个链接,互联网上的任何人都可以打开,无需claude.ai登录。在Team和Enterprise计划上,公开分享处于关闭状态,直到所有者[为组织启用它](#control-public-sharing)。

115 132 

116### 链接到特定视图133### 链接到特定视图


178您的[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)决定了当发送的评论到达时 Claude 的行为:195您的[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)决定了当发送的评论到达时 Claude 的行为:

179 196 

180* **Claude 自动回复**:如果您所处的权限模式允许 Claude 在不询问您的情况下发布回复,Claude 会读取线程并回复。您会看到 `Auto-replied to comment thread on Artifact: <name>`。197* **Claude 自动回复**:如果您所处的权限模式允许 Claude 在不询问您的情况下发布回复,Claude 会读取线程并回复。您会看到 `Auto-replied to comment thread on Artifact: <name>`。

181* **Claude 等待您**:在计划模式之外,当发布回复需要您的批准时,您会看到 `Comments are waiting on Artifact: <name>`。Claude 然后要求您批准读取线程,再次批准发布回复。198* **Claude 等待您**:在计划模式之外,当发布回复[需要您的批准](#when-claude-code-asks-before-publishing)时,您会看到 `Comments are waiting on Artifact: <name>`。Claude 然后要求您批准读取线程,再次批准发布回复。

182* **Claude 在计划模式中暂停**:您会看到 `Comments are waiting on Artifact: <name>`,Claude 不会回复,直到您离开计划模式并要求它读取和回复。199* **Claude 在计划模式中暂停**:您会看到 `Comments are waiting on Artifact: <name>`,Claude 不会回复,直到您离开计划模式并要求它读取和回复。

183 200 

184如果 Claude 在一小时内处理了某个 Artifact 上的 60 条已发送评论或线程激活,它也会停止自动回复该 Artifact。您会看到一次 `Comments are waiting on Artifact: <name>`,当该小时内的评论过期后,Claude 会重新开始。201如果 Claude 在一小时内处理了某个 Artifact 上的 60 条已发送评论或线程激活,它也会停止自动回复该 Artifact。您会看到一次 `Comments are waiting on Artifact: <name>`,当该小时内的评论过期后,Claude 会重新开始。

Details

34* **请求**:为了让检查通过,网关需原封不动地转发 `anthropic-beta` 请求头和 `safeguards` 正文字段,因为[两者是成对传递的](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#beta-header-and-body-field-pairs)。在 [Amazon Bedrock InvokeModel 格式](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#api-formats)上,网关转发 `anthropic_beta` 正文字段来代替该请求头。34* **请求**:为了让检查通过,网关需原封不动地转发 `anthropic-beta` 请求头和 `safeguards` 正文字段,因为[两者是成对传递的](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#beta-header-and-body-field-pairs)。在 [Amazon Bedrock InvokeModel 格式](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#api-formats)上,网关转发 `anthropic_beta` 正文字段来代替该请求头。

35* **响应**:网关返回响应和流式事件时,不得删除字段或重写工具使用 ID。为了让检查结果通过,网关需保留 `safeguard_results` 字段。35* **响应**:网关返回响应和流式事件时,不得删除字段或重写工具使用 ID。为了让检查结果通过,网关需保留 `safeguard_results` 字段。

36 36 

37以这种方式传递流量的网关可继续与此功能和未来功能配合使用。新会话随后再次使用服务器的检查。37网关完成上述处理后,新会话将再次使用服务器的检查。

38 38 

39如果您已经知道您的网关无法提供服务器的检查,请在启动会话之前通过在 shell 中或在 [`env` 设置键](https://code.claude.com/docs/zh-CN/settings-reference#env)中将 `CLAUDE_CODE_AUTO_MODE_SERVER` 设置为 `0` 来告诉 Claude Code 不要在那里请求它们:39如果您已经知道您的网关无法提供服务器的检查,请在启动会话之前通过在 shell 中或在 [`env` 设置键](https://code.claude.com/docs/zh-CN/settings-reference#env)中将 `CLAUDE_CODE_AUTO_MODE_SERVER` 设置为 `0` 来告诉 Claude Code 不要在那里请求它们:

40 40 

Details

180 180 

181Claude Code 在后台进行扫描,然后向您展示草稿。您只能整体接受或放弃该草稿,因此如需调整单个条目,请在之后编辑 `~/.claude/settings.json`。当您接受时,Claude Code 会写入草稿,并将其与您已有的设置进行协调:181Claude Code 在后台进行扫描,然后向您展示草稿。您只能整体接受或放弃该草稿,因此如需调整单个条目,请在之后编辑 `~/.claude/settings.json`。当您接受时,Claude Code 会写入草稿,并将其与您已有的设置进行协调:

182 182 

183* Claude Code 写入的 `environment` 列表不包含 `"$defaults"`,因为草稿已逐一列出其未更改的内置条目183* 如果您选择添加到 `~/.claude/settings.json` 中的 `environment` 列表,该列表中的任何 `"$defaults"` 条目都会保留。如果您选择替换该列表,则会失去该条目,因此如果您需要默认条目,请重新添加 `"$defaults"`

184* 对于草稿添加了条目的 `allow`、`soft_deny` 和 `hard_deny` 列表,Claude Code 会在每个列表中包含 `"$defaults"`,除非您已经编写了不含它的 `allow` 列表,这样您未替换的[内置规则](#override-the-block-and-allow-rules)将继续生效184* 对于草稿添加了条目的 `allow`、`soft_deny` 和 `hard_deny` 列表,Claude Code 会在每个列表中包含 `"$defaults"`,除非您已经编写了不含它的 `allow` 列表,这样您未替换的[内置规则](#override-the-block-and-allow-rules)将继续生效

185* 保存后,Claude Code 会提议删除 `~/.claude/settings.json` 中被自动模式忽略的 `permissions.allow` 规则(例如 `Bash(*)`),或会自动批准破坏性命令的规则185* 保存后,Claude Code 会提议删除 `~/.claude/settings.json` 中被自动模式忽略的 `permissions.allow` 规则(例如 `Bash(*)`),或会自动批准破坏性命令的规则

186 186 


216 216 

217三个额外的字段让您替换分类器的内置规则列表:217三个额外的字段让您替换分类器的内置规则列表:

218 218 

219* `autoMode.hard_deny`:无条件安全边界219* `autoMode.hard_deny`:即使用户要求也要阻止的操作

220* `autoMode.soft_deny`:用户意图可以清除的破坏性操作220* `autoMode.soft_deny`:用户意图可以清除的破坏性操作

221* `autoMode.allow`:软阻止规则的例外221* `autoMode.allow`:软阻止规则的例外

222 222 


229* `allow` 规则然后覆盖匹配的 `soft_deny` 规则作为例外。229* `allow` 规则然后覆盖匹配的 `soft_deny` 规则作为例外。

230* 明确的用户意图覆盖剩余的软阻止:如果用户的消息直接且具体地描述 Claude 即将采取的确切操作,分类器允许它,即使 `soft_deny` 规则匹配。230* 明确的用户意图覆盖剩余的软阻止:如果用户的消息直接且具体地描述 Claude 即将采取的确切操作,分类器允许它,即使 `soft_deny` 规则匹配。

231 231 

232一般请求不算作明确意图。要求 Claude"清理代码库"不授权强制推送,但要求 Claude"强制推送此分支"则授权。232一般请求不算作明确意图。要求 Claude“清理仓库”不授权强制推送,但要求 Claude“强制推送此分支”则授权。

233 233 

234要放松,当分类器重复标记默认例外不涵盖的常规模式时,添加到 `allow`。要收紧,为您的环境特定的破坏性风险添加到 `soft_deny`(默认值会遗漏),或为必须永远不能跨越的安全边界添加到 `hard_deny`。要保持内置规则同时添加您自己的规则,请在数组中包含字面字符串 `"$defaults"`。默认规则会在该位置拼接,因此您的自定义规则可以在它们之前或之后,并且当内置列表在版本发布中更改时,您继续继承更新。234要放松,当分类器重复标记默认例外不涵盖的常规模式时,添加到 `allow`。要收紧,为您的环境特定的破坏性风险添加到 `soft_deny`(默认值会遗漏),或为即使用户要求也要阻止的操作添加到 `hard_deny`。

235 

236要保持内置规则同时添加您自己的规则,请在数组中包含字面字符串 `"$defaults"`。默认规则会在该位置拼接,因此您的自定义规则可以在它们之前或之后,并且当内置列表在版本发布中更改时,您继续继承更新。

235 237 

236以下示例在所有四个列表中保持默认值,并向每个列表添加特定于组织的规则。238以下示例在所有四个列表中保持默认值,并向每个列表添加特定于组织的规则。

237 239 


250 "soft_deny": [252 "soft_deny": [

251 "$defaults",253 "$defaults",

252 "Never run database migrations outside the migrations CLI, even against dev databases",254 "Never run database migrations outside the migrations CLI, even against dev databases",

253 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"255 "Running terraform apply in infra/terraform/prod/ needs an explicit request: production infrastructure changes go through the review workflow"

254 ],256 ],

255 "hard_deny": [257 "hard_deny": [

256 "$defaults",258 "$defaults",


267> * `soft_deny`:每个内置软阻止规则,包括强制推送、`curl | bash`、生产部署和自动模式绕过269> * `soft_deny`:每个内置软阻止规则,包括强制推送、`curl | bash`、生产部署和自动模式绕过

268> * `hard_deny`:内置的数据泄露规则270> * `hard_deny`:内置的数据泄露规则

269 271 

270每个部分独立评估,因此单独设置 `environment` 会保持默认 `allow`、`soft_deny` 和 `hard_deny` 列表完整。仅在您打算完全拥有该列表时才省略 `"$defaults"`。要安全地执行此操作,请运行 `claude auto-mode defaults` 打印内置规则,将它们复制到您的设置文件中,然后根据您自己的管道和风险容限审查每条规则。272每个部分独立评估,因此单独设置 `environment` 会保持默认 `allow`、`soft_deny` 和 `hard_deny` 列表完整。

273 

274仅在您打算完全拥有该列表时才省略 `"$defaults"`。要安全地执行此操作,请运行 `claude auto-mode defaults` 打印内置规则,将它们复制到您的设置文件中,然后根据您自己的管道和风险容限审查每条规则。

271 275 

272## 从 `/permissions` 编辑规则276## 从 `/permissions` 编辑规则

273 277 

Details

763. 你映射到该上游 ID 的 [`models[].id`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#models) 的列表价格,对于不包含模型名称的上游字符串,例如 Amazon Bedrock 应用推理配置文件 ARN 或 Microsoft Foundry 部署名称。需要 v2.1.218 或更高版本。763. 你映射到该上游 ID 的 [`models[].id`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#models) 的列表价格,对于不包含模型名称的上游字符串,例如 Amazon Bedrock 应用推理配置文件 ARN 或 Microsoft Foundry 部署名称。需要 v2.1.218 或更高版本。

774. 未知模型层级 \$5/\$25 每百万输入/输出令牌,因此计量器无法识别的 ID 永远不会免费。网关在启动时和运行时每个 ID 一次警告何时使用此层级。774. 未知模型层级 \$5/\$25 每百万输入/输出令牌,因此计量器无法识别的 ID 永远不会免费。网关在启动时和运行时每个 ID 一次警告何时使用此层级。

78 78 

79无论应用哪种费率,计量器然后将金额乘以 [`pricing.multiplier`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#pricing),默认为 `1`。79无论应用哪种费率,计量器然后将金额乘以 [`pricing.multiplier`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#pricing),默认为 `1`。需要运行 Claude Code v2.1.227 或更高版本的网关服务器。

80 80 

81客户端中止也被计费。当流在没有上游最终使用帧的情况下结束时,计量器为已发送给客户端的文本计费约每输出令牌四个字符的下限估计,因此提前中止请求不会规避上限。81客户端中止也被计费。当流在没有上游最终使用帧的情况下结束时,计量器为已发送给客户端的文本计费约每输出令牌四个字符的下限估计,因此提前中止请求不会规避上限。

82 82 

Details

205* **使用 `/teleport`**:在现有 CLI 会话内,运行 `/teleport` 或 `/tp` 以打开相同的会话选择器,无需重启 Claude Code。205* **使用 `/teleport`**:在现有 CLI 会话内,运行 `/teleport` 或 `/tp` 以打开相同的会话选择器,无需重启 Claude Code。

206* **从 `/tasks`**:运行 `/tasks` 以查看您的后台会话,然后按 `t` 以 teleport 到其中一个。206* **从 `/tasks`**:运行 `/tasks` 以查看您的后台会话,然后按 `t` 以 teleport 到其中一个。

207* **从 claude.ai/code**:从会话菜单中选择 **Open in > Terminal** 以复制可以粘贴到终端的命令。207* **从 claude.ai/code**:从会话菜单中选择 **Open in > Terminal** 以复制可以粘贴到终端的命令。

208* **从云会话内部**:键入 `/teleport`,Claude Code 会回复该会话的确切 `claude --teleport <session-id>` 命令,准备从存储库的检出运行。需要会话环境中的 Claude Code v2.1.223 或更高版本。208* **从云端会话内部**:键入 `/teleport`,Claude Code 会回复该会话的确切 `claude --teleport <session-id>` 命令,可直接从仓库的检出运行。

209 209 

210当您 teleport 会话时,Claude 验证您在正确的仓库中,从云端会话获取并检出分支,并将对话加载到您的终端。210当您 teleport 会话时,Claude 验证您在正确的仓库中,从云端会话获取并检出分支,并将对话加载到您的终端。

211 211 


499* **存储库身份验证**:你只能在认证到相同账户时将云会话拉入你的终端499* **存储库身份验证**:你只能在认证到相同账户时将云会话拉入你的终端

500* **平台限制**:在 Anthropic 托管环境中克隆仓库以及创建 Pull Request 需要 GitHub。Team 和 Enterprise 计划支持自托管的 [GitHub Enterprise Server](https://code.claude.com/docs/zh-CN/github-enterprise-server.md) 实例。您可以通过设置 `CCR_FORCE_BUNDLE=1` 将 GitLab、Bitbucket 或其他非 GitHub 仓库作为[本地捆绑](#send-local-repositories-without-github)发送到云端会话,但会话无法将结果推送回该远程500* **平台限制**:在 Anthropic 托管环境中克隆仓库以及创建 Pull Request 需要 GitHub。Team 和 Enterprise 计划支持自托管的 [GitHub Enterprise Server](https://code.claude.com/docs/zh-CN/github-enterprise-server.md) 实例。您可以通过设置 `CCR_FORCE_BUNDLE=1` 将 GitLab、Bitbucket 或其他非 GitHub 仓库作为[本地捆绑](#send-local-repositories-without-github)发送到云端会话,但会话无法将结果推送回该远程

501 * **自托管环境**:对于托管在其他 git 平台上的仓库,请参阅[使用 `--environment` 启动会话的要求](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy#start-a-session-on-a-repository-outside-github)。501 * **自托管环境**:对于托管在其他 git 平台上的仓库,请参阅[使用 `--environment` 启动会话的要求](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy#start-a-session-on-a-repository-outside-github)。

502* **组织 IP 允许列表**:云端会话从 Anthropic 管理的基础设施(而非您的网络)调用 Anthropic API,而[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)中的会话则从您自己的网络调用它。如果您的组织启用了 [IP 允许列表](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting),每个 Anthropic 托管的云端会话都会因身份验证错误而失败。

503 * **Code Review 和定时任务**:这同样适用于 [Code Review](https://code.claude.com/docs/zh-CN/code-review.md) 以及在 Anthropic 托管环境中运行的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)。路由到自托管环境的定时任务会从您自己的网络调用 API。

504 * **获取豁免**:请联系 [Anthropic 支持](https://support.claude.com/),将 Anthropic 托管的服务从您组织的 IP 允许列表中豁免。

505 502 

506## 相关资源503## 相关资源

507 504 

Details

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

143 143 

144* **`sessions/`**:为每个运行的会话保存一个小文件,用于检测并发会话和崩溃。它不是基于年龄的扫描的一部分:Claude Code 在其会话退出时删除每个文件,并在下次启动时清理崩溃遗留物。144* **`sessions/`**:为每个运行的会话保存一个小文件,用于检测并发会话和崩溃。它不是基于年龄的扫描的一部分:Claude Code 在其会话退出时删除每个文件,并在下次启动时清理崩溃遗留物。

145* **`seed-admin/`**:Claude Code 在为 [ultrareview](https://code.claude.com/docs/zh-CN/ultrareview.md) 或[云端会话上传](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#send-local-repositories-without-github)打包您的仓库时创建的临时 git 目录。当上传结束时(如果上传被中断,则在之后的某个会话中),Claude Code 会删除该上传的目录,并保留 `seed-admin/` 本身。

145* **自动内存**:扫描不删除项目 [自动内存](https://code.claude.com/docs/zh-CN/memory.md#auto-memory) 目录中的内存文件,`projects/<project>/memory/`。Claude Code 仅在整个保留期内该目录为空时才删除该目录。在 v2.1.228 之前,扫描将内存目录内的文件夹视为会话数据,可能删除其下的旧文件。146* **自动内存**:扫描不删除项目 [自动内存](https://code.claude.com/docs/zh-CN/memory.md#auto-memory) 目录中的内存文件,`projects/<project>/memory/`。Claude Code 仅在整个保留期内该目录为空时才删除该目录。在 v2.1.228 之前,扫描将内存目录内的文件夹视为会话数据,可能删除其下的旧文件。

146* **Claude Desktop 和 Cowork 会话记录**:Claude Code 保留您在 Claude Desktop 或 Cowork 中启动或最近继续的会话的会话记录,无论其年龄如何。要给这些会话记录设置年龄限制,请设置 [`desktopSessionCleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#desktopsessioncleanupperioddays)。需要 Claude Code v2.1.248 或更高版本;早期版本在 `cleanupPeriodDays` 后删除它们。147* **Claude Desktop 和 Cowork 会话记录**:Claude Code 保留您在 Claude Desktop 或 Cowork 中启动或最近继续的会话的会话记录,无论其年龄如何。要给这些会话记录设置年龄限制,请设置 [`desktopSessionCleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#desktopsessioncleanupperioddays)。需要 Claude Code v2.1.248 或更高版本;早期版本在 `cleanupPeriodDays` 后删除它们。

147 148 


153Claude Code 在这些情况下跳过基于年龄的扫描:154Claude Code 在这些情况下跳过基于年龄的扫描:

154 155 

155* **Bare mode**:当您使用 [`--bare`](https://code.claude.com/docs/zh-CN/headless#start-faster-with-bare-mode) 运行 `claude -p` 时,Claude Code 不会在该会话中运行扫描。156* **Bare mode**:当您使用 [`--bare`](https://code.claude.com/docs/zh-CN/headless#start-faster-with-bare-mode) 运行 `claude -p` 时,Claude Code 不会在该会话中运行扫描。

156* **暂停扫描**:如果 Claude Code 无法安全地确定保留期,它会暂停保留清理扫描;[`retention_sweep` 事件](https://code.claude.com/docs/zh-CN/monitoring-usage#retention-sweep-event)列出每个暂停它的配置。当原因是无法读取或解析的设置文件,或 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 明确设置的设置错误时,Claude Code 也会在 `/status` 中显示警告,直到您修复设置错误。当 [managed settings](https://code.claude.com/docs/zh-CN/server-managed-settings.md) 提供 `cleanupPeriodDays` 时,Claude Code 在任何情况下都以 managed 值运行扫描。157* **暂停扫描**:如果 Claude Code 无法安全地确定保留期,它会暂停扫描;[`retention_sweep` 事件](https://code.claude.com/docs/zh-CN/monitoring-usage#retention-sweep-event)列出每个暂停它的配置。当原因是无法读取或解析的设置文件,或者在设置了 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 的情况下存在设置错误时,`/status` 会显示警告,直到您修复该原因。

158 

159当[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)提供 `cleanupPeriodDays` 时,即使较低优先级的设置文件存在错误,Claude Code 也会以托管值运行扫描。

157 160 

158要检查您组织中的机器是否按您设置的保留期运行扫描,请参阅[检查保留扫描](https://code.claude.com/docs/zh-CN/monitoring-usage.md#check-the-retention-sweep)。161要检查您组织中的机器是否按您设置的保留期运行扫描,请参阅[检查保留扫描](https://code.claude.com/docs/zh-CN/monitoring-usage.md#check-the-retention-sweep)。

159 162 

claude-projects.md +24 −26

Details

20 20 

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

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

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

24 24 

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

26 26 


28 28 

29当工作有一个超越单个会话的目标并不断产生任务时,创建项目是值得的。这些类型的工作非常适合项目:29当工作有一个超越单个会话的目标并不断产生任务时,创建项目是值得的。这些类型的工作非常适合项目:

30 30 

31* **跨多个代码库的一个目标**:"将每个服务升级到新的 lint 配置。"Claude 可以为每个代码库运行一个线程,每个都有自己的拉取请求,[**Overview** 窗格](#see-what-needs-you-in-overview)显示哪些已准备好审查。31* **跨多个仓库的一个目标**:"将每个服务升级到新的 lint 配置。"Claude 可以为每个仓库运行一个线程,每个都有自己的拉取请求,[Overview 窗格](#see-what-needs-you-in-overview)显示哪些已准备好审查。

32* **您不断提供的一个领域**:一个服务的错误、堆栈跟踪和审查请求,当它们到达您时粘贴到对话中。您在一次修复后告诉 Claude 记住的陷阱在[项目记忆](#give-a-project-standing-context)中供下一次使用。32* **您不断提供的一个领域**:一个服务的错误、堆栈跟踪和审查请求,当它们到达您时粘贴到对话中。您在一次修复后告诉 Claude 记住的陷阱在[项目记忆](#give-a-project-standing-context)中供下一次使用。

33* **比一个会话更大的构建或迁移**:"构建 `docs/spec.md` 描述的内容"或"将应用从已弃用的 ORM 迁移出去。"工作分成线程,每个处理一部分,您要求 Claude 记住的早期决定会到达后续线程,您在构建期间发现的规范更改和错误进入同一对话。33* **比一个会话更大的构建或迁移**:"构建 `docs/spec.md` 描述的内容"或"将应用从已弃用的 ORM 迁移出去。"工作分成线程,每个处理一部分,您要求 Claude 记住的早期决定会到达后续线程,您在构建期间发现的规范更改和错误进入同一对话。

34* **非代码工作**:一个合同文件夹或支持工单导出,您不断回来提出新问题,例如"在这些工单中找到十个最常见的集成错误。"上传文档而不是添加代码库,线程将每个写作作为文件提交到项目的[**Library** 标签页](#see-what-needs-you-in-overview)。34* **非代码工作**:一个合同文件夹或支持工单导出,您不断回来提出新问题,例如"在这些工单中找到十个最常见的集成错误。"上传文档而不是添加仓库,线程将每个写作作为文件提交到项目的[**Library**](#see-what-needs-you-in-overview)。

35 35 

36在任何情况下,您都可以发送一批任务,告诉 Claude 直接开始而无需您确认,然后离开。回来后,您可以在[**Waiting on you**](#see-what-needs-you-in-overview)下找到需要您处理的线程。您还可以要求 Claude 将部分工作作为[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)按计划运行。如果您属于其中一种情况,请[创建项目](#create-a-project)。36在任何情况下,您都可以发送一批任务,告诉 Claude 直接开始而无需您确认,然后离开。回来后,您可以在[**Waiting on you**](#see-what-needs-you-in-overview)下找到需要您处理的线程。您还可以要求 Claude 将部分工作作为[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)按计划运行。如果您属于其中一种情况,请[创建项目](#create-a-project)。

37 37 


57 * [项目每个仓库](#what-threads-pick-up-from-your-repositories)中的 `CLAUDE.md`,但不包括这些仓库的 skill、`.claude/settings.json` 或 `.mcp.json`57 * [项目每个仓库](#what-threads-pick-up-from-your-repositories)中的 `CLAUDE.md`,但不包括这些仓库的 skill、`.claude/settings.json` 或 `.mcp.json`

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

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

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

61 61 

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

63 63 

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

65 65 

66![项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个云线程在自己的分支和拉取请求上工作。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。](https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max\&auto=format\&n=e8CLbxM17eD7cAiv\&q=85\&s=dbf446f69f0bbdb9961d21af207cb93b)66![项目的图表。您在项目对话中写入,Claude 回答或启动线程。每个云线程在自己的分支和拉取请求上工作。Overview 窗格按状态列出线程,例如准备好审查、等待您和工作中。](https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max\&auto=format\&n=e8CLbxM17eD7cAiv\&q=85\&s=dbf446f69f0bbdb9961d21af207cb93b)

67 67 


96 96 

97* **Name**:项目在 **Projects** 列表中的显示方式。97* **Name**:项目在 **Projects** 列表中的显示方式。

98* **What do you want to work on?**(可选):成为项目目标的一行内容,例如"将 p95 API 延迟保持在 200 毫秒以下"。对话中的 Claude 朝着它工作。没有目标的情况下,Claude 从您发送的任务工作,您可以稍后在 **Project settings > General** 中添加目标。98* **What do you want to work on?**(可选):成为项目目标的一行内容,例如"将 p95 API 延迟保持在 200 毫秒以下"。对话中的 Claude 朝着它工作。没有目标的情况下,Claude 从您发送的任务工作,您可以稍后在 **Project settings > General** 中添加目标。

99* **Context**(可选):此项目处理的 GitHub 仓库,加上任何线程应该读取的文件、文件夹或 Google Drive 文件夹。为每个点击 **Add**。添加大多数任务需要的仓库而不是工作可能涉及的每一个;[决定要添加哪些仓库](#decide-which-repositories-to-add)涵盖了选择,您可以稍后在 **Project settings > Environment** 中添加更多。99* **Context**(可选):此项目处理的 GitHub 仓库,加上任何线程应该读取的文件、文件夹或 Google Drive 文件夹。为每个点击 **+**。添加大多数任务需要的仓库而不是工作可能涉及的每一个;[决定要添加哪些仓库](#decide-which-repositories-to-add)涵盖了选择,您可以稍后在 **Project settings > Environment** 中添加更多。

100 100 

101关于线程应该如何工作的常规规则在[项目说明](#give-a-project-standing-context)中,您在项目存在后设置。101关于线程应该如何工作的常规规则在[项目说明](#give-a-project-standing-context)中,您在项目存在后设置。

102 102 


109* 如果项目有它可以读取的仓库,启动一个线程来探索该仓库而不更改任何内容,并提议后续步骤。109* 如果项目有它可以读取的仓库,启动一个线程来探索该仓库而不更改任何内容,并提议后续步骤。

110* 发布从您最近的云端会话中提取的 **Setup recommendations**:要添加的仓库、要创建的定时任务和它可以启动的线程。每个推荐的仓库和定时任务都默认打开。关闭您不想要的,然后点击 **Update setup** 添加其余的,或忽略建议并自己描述工作。110* 发布从您最近的云端会话中提取的 **Setup recommendations**:要添加的仓库、要创建的定时任务和它可以启动的线程。每个推荐的仓库和定时任务都默认打开。关闭您不想要的,然后点击 **Update setup** 添加其余的,或忽略建议并自己描述工作。

111 111 

112项目现在在侧边栏的 **Projects** 下列出,其对话已打开。[您的第一批](#your-first-batch)涵盖了在您向其发送工作之前要设置的内容。112项目现在位于侧边栏中,其对话已打开。[您的第一批](#your-first-batch)涵盖了在您向其发送工作之前要设置的内容。

113 113 

114### 从现有会话启动114### 从现有会话启动

115 115 


168 168 

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

170 170 

171线程的完整结果保留在线程中,你打开对话中的其卡片来读取它们。线程生成的文件也在**概览**中的**库**选项卡上。171线程的完整结果保留在线程中,您可以打开对话中的线程卡片来阅读它们。线程生成的文件也位于项目的[**库**](#see-what-needs-you-in-overview)中。

172 172 

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

174 174 


190 190 

191### 在概览中查看需要你的内容191### 在概览中查看需要你的内容

192 192 

193对话旁边的**概览**窗格跟踪项目的线程。当你第一次打开新项目时,它已经打开。项目标题中的**概览**按钮关闭并重新打开它,并在线程等待你时显示一个点。193对话旁边的概览窗格跟踪项目的线程。首次打开新项目时,它已处于打开状态。关闭后若要重新打开,请点击项目标题中的**线程**按钮。当有线程在等待您时,该按钮会显示一个圆点。

194 194 

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

196 196 

197窗格的**线程**选项卡按状态对线程进行分组:197窗格的**线程**视图按状态对线程进行分组:

198 198 

199| 组 | 其中的内容 |199| 组 | 其中的内容 |

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


205| **空闲** | 已完成且不等待任何内容的线程 |205| **空闲** | 已完成且不等待任何内容的线程 |

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

207 207 

208窗格的其他选项卡包括:208从项目标题可以在窗格中打开项目的文件和定时任务:

209 209 

210* **库**:您添加的文件和文件夹,以及线程生成的文件210* **库**:您添加的文件和文件夹,以及线程生成的文件。点击**线程**旁边的**库**按钮。

211* **Pull Request**:在线程创建了 Pull Request 后显示211* **定时任务**:Claude 从此项目设置的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)。在标题的 **⋯** 菜单中选择它。

212* **定时任务**:Claude 从此项目设置的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)

213 212 

214### 当你需要控制时打开线程213### 当你需要控制时打开线程

215 214 

216点击对话中线程的卡片或**概览**中的其行来在概览窗格中打开其记录。从那里你可以:215点击对话中线程的卡片或概览中的对应行,即可在概览窗格中打开其会话记录。在那里您可以:

217 216 

218* 逐步阅读 Claude 所做的事情。217* 逐步阅读 Claude 所做的事情。

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


290| :- | :- | :- |289| :- | :- | :- |

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

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

293| 仓库、文件和环境 | 每个云线程克隆的仓库、它可以在 `/mnt/project-files` 下读取的文件夹和文件,以及它运行的云环境 | 仓库和环境在 **Project settings > Environment** 中设置,或在对话中要求 Claude 将仓库添加到项目。[文件和文件夹](#add-files-and-folders)通过 **Overview** 中 **Library** 标签页上的 **Add** 添加 |292| 仓库、文件和环境 | 每个云线程克隆的仓库、它可以在 `/mnt/project-files` 下读取的文件夹和文件,以及它运行的云环境 | 仓库和环境在 **Project settings > Environment** 中设置,或在对话中要求 Claude 将仓库添加到项目。[文件和文件夹](#add-files-and-folders)通过项目 [**Library**](#see-what-needs-you-in-overview) 中的 **Add** 添加 |

294 293 

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

296 295 

297### 编写项目说明296### 编写项目说明

298 297 

299项目说明是每个新线程开始时的简报。点击项目标题中的齿轮图标打开 **Project settings**,然后转到 **Memory > Project instructions**。有用的简报涵盖:298项目说明是每个新线程开始时的简报。在项目标题中的 **⋯** 菜单里选择 **Settings** 打开 **Project settings**,然后转到 **Memory > Project instructions**。有用的简报涵盖:

300 299 

301* 项目的目的300* 项目的目的

302* 工作发生的地方:哪些仓库、从哪个分支开始、如何命名 Pull Request301* 工作发生的地方:哪些仓库、从哪个分支开始、如何命名 Pull Request


324* **将其添加到项目**,可在 **New project** 对话框中、**Project settings > Environment** 中,或在对话中要求 Claude 将其添加到项目。从那时起,每个云线程都会克隆它,并在启动时加载其 `CLAUDE.md`,无论任务是否涉及它。323* **将其添加到项目**,可在 **New project** 对话框中、**Project settings > Environment** 中,或在对话中要求 Claude 将其添加到项目。从那时起,每个云线程都会克隆它,并在启动时加载其 `CLAUDE.md`,无论任务是否涉及它。

325* **不添加,让线程在需要时自行添加。** 如果云线程的任务需要项目中没有的仓库,它可以将其添加到自身,线程中会有一条说明,表明该仓库仅被添加到此线程。克隆发生在任务中途,因此线程启动时该仓库的 `CLAUDE.md` 并不存在。下一个线程启动时不会有它。以这种方式添加的仓库需要与项目仓库相同的[前提条件](#check-the-prerequisites):在其上安装 Claude GitHub App,并且您的 GitHub 账户具有推送权限。324* **不添加,让线程在需要时自行添加。** 如果云线程的任务需要项目中没有的仓库,它可以将其添加到自身,线程中会有一条说明,表明该仓库仅被添加到此线程。克隆发生在任务中途,因此线程启动时该仓库的 `CLAUDE.md` 并不存在。下一个线程启动时不会有它。以这种方式添加的仓库需要与项目仓库相同的[前提条件](#check-the-prerequisites):在其上安装 Claude GitHub App,并且您的 GitHub 账户具有推送权限。

326 325 

327项目完全可以不包含仓库。其云线程仍然可以进行研究、编写文档,以及在自己的沙箱中编写和运行代码,并将文件交付到 **Library** 标签页。当任务需要时,它的任何云线程仍然可以将仓库添加到自身。326项目完全可以不包含仓库。其云线程仍然可以进行研究、编写文档,以及在自己的沙箱中编写和运行代码。它们会将文件交付到项目的 **Library**。当任务需要时,它的任何云线程仍然可以将仓库添加到自身。

328 327 

329一旦项目有了仓库,无论是将仓库添加到项目还是线程将仓库添加到自身,Claude 都只能添加项目已使用的 GitHub 所有者下的仓库。要引入来自不同所有者的仓库,请自己在 **Project settings > Environment** 中将其添加到项目。328一旦项目有了仓库,无论是将仓库添加到项目还是线程将仓库添加到自身,Claude 都只能添加项目已使用的 GitHub 所有者下的仓库。要引入来自不同所有者的仓库,请自己在 **Project settings > Environment** 中将其添加到项目。

330 329 


332 331 

333### 添加文件和文件夹332### 添加文件和文件夹

334 333 

335在 **New project** 对话框的 **Context** 字段中添加您希望线程读取的文件和文件夹,或之后使用 **Overview** 中 **Library** 标签页上的 **Add**。以下限制适用于您添加的内容:334在 **New project** 对话框的 **Context** 字段中添加您希望线程读取的文件和文件夹,或之后使用项目 [**Library**](#see-what-needs-you-in-overview) 中的 **Add**。以下限制适用于您添加的内容:

336 335 

337* **Library 标签页**:一次选择最多 100 个文件和 2 GB,单个文件最多 480 MB。336* **您在 claude.ai/code 或桌面应用中上传的文件**:一次最多 1,000 个文件和 2 GB,单个文件最多 480 MB。

338* **New project 对话框**:超过 30 MB 的文件会被跳过,因此请在创建项目后从 **Library** 标签页添加较大的文件。337* **您上传的文件夹**:隐藏文件和 `node_modules` 不会被添加。一个项目最多可容纳 10 个文件夹和 Google Drive 文件夹(合计),单个文件不计入该限制。

339* **文件夹**:当您从任一位置添加文件夹时,项目会收到其前 100 个文件的副本,最多 200 MB,不包括任何超过 30 MB 的文件、隐藏文件或 `node_modules`。一个项目最多可容纳 10 个文件夹和 Google Drive 文件夹(合计),单个文件不计入该限制。

340* **上传后的更改**:上传的是副本,因此您之后在计算机上所做的更改不会同步到项目,直到您再次上传该文件并在询问现有名称时选择 **Replace**。338* **上传后的更改**:上传的是副本,因此您之后在计算机上所做的更改不会同步到项目,直到您再次上传该文件并在询问现有名称时选择 **Replace**。

341 339 

342### 线程从您的仓库中获取什么340### 线程从您的仓库中获取什么


373 371 

374## 项目设置参考372## 项目设置参考

375 373 

376您在 claude.ai/code 或桌面应用中更改项目设置,而不是在 `settings.json` 中。从项目侧边栏菜单中的 **Settings** 或项目标题中的齿轮图标打开 **Project settings**。374您在 claude.ai/code 或桌面应用中更改项目设置,而不是在 `settings.json` 中。从项目侧边栏菜单中的 **Settings** 或项目标题中的 **⋯** 菜单打开 **Project settings**。

377 375 

378设置在您更改时保存;您正在编辑的文本字段,例如目标或说明,显示 **Save changes** 和 **Discard**,直到您离开它。对说明、代码库、plugins 和 **Project settings** 中的环境的更改到达新线程,而不是已经运行的线程。376设置在您更改时保存;您正在编辑的文本字段,例如目标或说明,显示 **Save changes** 和 **Discard**,直到您离开它。对说明、代码库、plugins 和 **Project settings** 中的环境的更改到达新线程,而不是已经运行的线程。

379 377 


434 432 

435 项目在 Pro、Max 和 Ultra 上提供。项目仅属于您一人:您是唯一给它分配工作或看到其线程的人,它使用您自己的 GitHub 访问权限和连接器。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。433 项目在 Pro、Max 和 Ultra 上提供。项目仅属于您一人:您是唯一给它分配工作或看到其线程的人,它使用您自己的 GitHub 访问权限和连接器。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。

436* **云端会话**:每个线程都是一个[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),除非您要求 Claude 在您的机器上运行它。无论哪种方式,Claude 启动和跟踪它而不是您。您还可以将自己启动的云端会话的工作带入项目:在该会话的侧边栏菜单中选择 [**Continue in project**](#start-from-an-existing-cloud-session)。434* **云端会话**:每个线程都是一个[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),除非您要求 Claude 在您的机器上运行它。无论哪种方式,Claude 启动和跟踪它而不是您。您还可以将自己启动的云端会话的工作带入项目:在该会话的侧边栏菜单中选择 [**Continue in project**](#start-from-an-existing-cloud-session)。

437* **定时任务**:当您在项目中请求定时工作时,Claude 会创建一个[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md),它作为该项目中的线程运行,并显示在项目的 **Scheduled tasks** 标签页上。您在项目之外创建的定时任务会继续独立运行。435* **定时任务**:当您在项目中请求定时工作时,Claude 会创建一个[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md),它作为该项目中的线程运行,并显示在项目的 **Scheduled tasks** 视图中。您在项目之外创建的定时任务会继续独立运行。

438* **Remote Control**:[Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接 claude.ai 到在您的机器上运行的 Claude Code 会话。当您在项目中要求 Claude 在您的计算机上运行线程时,项目[使用 Remote Control 来执行](#run-a-thread-on-your-own-computer)。436* **Remote Control**:[Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接 claude.ai 到在您的机器上运行的 Claude Code 会话。当您在项目中要求 Claude 在您的计算机上运行线程时,项目[使用 Remote Control 来执行](#run-a-thread-on-your-own-computer)。

439* **本地会话和 Agent 视图**:您自己在终端、IDE 或桌面应用的本地环境中启动的会话不属于您的项目,但您可以[将其工作带入某个项目](#start-from-an-existing-cloud-session)。[Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md)是用于并排跟踪多个本地会话的屏幕,您仍然需要自己启动每个会话并为其分配任务。437* **本地会话和 Agent 视图**:您自己在终端、IDE 或桌面应用的本地环境中启动的会话不属于您的项目,但您可以[将其工作带入某个项目](#start-from-an-existing-cloud-session)。[Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md)是用于并排跟踪多个本地会话的屏幕,您仍然需要自己启动每个会话并为其分配任务。

440* **Worktrees**:一个 [worktree](https://code.claude.com/docs/zh-CN/worktrees.md) 为每个本地会话提供其自己的仓库工作副本。云线程不需要它们:每个线程将其仓库克隆到其自己的云沙箱中,并在其自己的分支上工作。438* **Worktrees**:一个 [worktree](https://code.claude.com/docs/zh-CN/worktrees.md) 为每个本地会话提供其自己的仓库工作副本。云线程不需要它们:每个线程将其仓库克隆到其自己的云沙箱中,并在其自己的分支上工作。


466当多个线程回来时假设了错误的东西、解决了缺失的访问或停止了"被阻止",原因通常是项目设置中的相同间隙,而不是每个任务的问题。在修复任何东西之前排序哪些线程是合理的:464当多个线程回来时假设了错误的东西、解决了缺失的访问或停止了"被阻止",原因通常是项目设置中的相同间隙,而不是每个任务的问题。在修复任何东西之前排序哪些线程是合理的:

467 465 

4681. 在对话中要求 Claude:"对于每个打开的线程,列出您要求它做什么、它假设或无法到达什么,以及它在等待什么。"Claude 读取每个线程并在对话中回答。4661. 在对话中要求 Claude:"对于每个打开的线程,列出您要求它做什么、它假设或无法到达什么,以及它在等待什么。"Claude 读取每个线程并在对话中回答。

4692. 对于从错误假设开始的线程,从 **Overview** 打开线程并从其菜单标记为已解决,或在其消息框中告诉它做什么。其分支和任何拉取请求保留在 GitHub 上,直到您删除它们。4672. 对于从错误假设开始的线程,从 Overview 打开该线程并从其菜单将其标记为已解决,或告诉它改为做什么。其分支和任何 Pull Request 会保留在 GitHub 上,直到您删除它们。

4703. 一次修复间隙,在[项目说明](#give-a-project-standing-context)或[环境](#choose-an-environment-for-threads)中,然后在再次发送其余工作作为新线程之前发送一个线程。4683. 一次修复间隙,在[项目说明](#give-a-project-standing-context)或[环境](#choose-an-environment-for-threads)中,然后在再次发送其余工作作为新线程之前发送一个线程。

471 469 

472### Claude 没有响应470### Claude 没有响应

Details

71 71 

72**2. 选择要扫描的内容**72**2. 选择要扫描的内容**

73 73 

74该插件首先读取您的存储库,然后提供整个存储库或聚焦区域,每个选项都说明了文件计数和相对成本。选择整个存储库,或回答"我不知道",插件会为您的存储库大小选择一个合理的默认值。74该插件首先读取您的仓库,然后提供整个仓库或聚焦区域供您选择。选择整个仓库,或回答"我不知道",插件会根据您的仓库大小选择一个合理的默认值。

75 75 

76**3. 确认运行**76**3. 确认运行**

77 77 

78扫描可能需要一段时间,可能使用大量令牌,并需要在完成期间保持 Claude Code 打开。在您确认之前,不会运行任何内容。78扫描可能需要一段时间,可能使用大量 token,并需要在完成期间保持 Claude Code 打开。在您确认之前,不会运行任何内容。

79 79 

80**4. 阅读报告**80**4. 阅读报告**

81 81 

82扫描运行时,它会在每个阶段开始时报告,详细信息可在 [`/workflows`](https://code.claude.com/docs/zh-CN/workflows) 下获得。结果进入您的存储库中的时间戳目录,在[阅读扫描结果](#read-the-scan-results)中描述。82扫描运行时,它会在每个阶段开始时报告,详细信息可在 [`/workflows`](https://code.claude.com/docs/zh-CN/workflows) 下获得。结果会写入您的仓库中的时间戳目录,在[阅读扫描结果](#read-the-scan-results)中描述。

83 83 

84**5. 将发现转化为补丁**84**5. 将发现转化为补丁**

85 85 

86再次运行 `/claude-security` 并选择 **Suggest patches**,然后选择要解决的发现。审查过的补丁进入报告的 `patches/` 文件夹;[修复发现](#fix-findings)涵盖了每个补丁如何构建和审查。86再次运行 `/claude-security` 并选择 **Suggest patches**,然后选择要解决的发现。审查过的补丁会写入报告的 `patches/` 文件夹;[修复发现](#fix-findings)涵盖了每个补丁如何构建和审查。

87 87 

88**6. 应用您接受的补丁**88**6. 应用您接受的补丁**

89 89 

90从您的 shell 中使用 `git apply` 应用每个补丁,在其自己的拉取请求中。补丁永远不会自动应用。90从您的 shell 中使用 `git apply` 应用每个补丁,每个补丁放在各自的 Pull Request 中。补丁永远不会自动应用。

91 91 

92您不必从菜单开始:直接要求一个任务,作为命令的参数,例如 `/claude-security scan my branch`,或用纯语言,例如"scan commit abc1234"。该插件在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md)中效果最佳,这允许扫描的代理在每一步都无需权限提示地进行。92您不必从菜单开始:直接要求一个任务,作为命令的参数,例如 `/claude-security scan my branch`,或用纯语言,例如"scan commit abc1234"。该插件在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md)中效果最佳,这允许扫描的代理在每一步都无需权限提示地进行。

93 93 


95 95 

96当您的分支有其基础没有的提交时,`/claude-security` 菜单会提供仅扫描该差异的选项,以便您可以在合并前检查分支。您也可以扫描您的一个开放拉取请求,或通过要求它来扫描单个提交,例如"scan commit abc1234"。仅扫描已提交的更改:首先提交或 stash 进行中的编辑,或运行完整扫描,它读取工作树。96当您的分支有其基础没有的提交时,`/claude-security` 菜单会提供仅扫描该差异的选项,以便您可以在合并前检查分支。您也可以扫描您的一个开放拉取请求,或通过要求它来扫描单个提交,例如"scan commit abc1234"。仅扫描已提交的更改:首先提交或 stash 进行中的编辑,或运行完整扫描,它读取工作树。

97 97 

98更改扫描需要 git 存储库;未版本化目录的完整扫描仍然有效。查找您的开放拉取请求是唯一到达网络的步骤,仅当您的会话已有权限运行 GitHub CLI 且 `gh` 已登录时才提供。98更改扫描需要 git 仓库;未版本化目录的完整扫描仍然有效。仅当您的会话已有权限运行 GitHub CLI 且 `gh` 已登录时,才会提供查找您的开放 Pull Request 的选项。

99 99 

100### 限制大型存储库的范围100### 限制大型存储库的范围

101 101 


120* **`CLAUDE-SECURITY-RESULTS.md`**:报告,包含每个发现的 ID,例如 `F1`,加上其影响、利用场景、严重性、置信度和建议120* **`CLAUDE-SECURITY-RESULTS.md`**:报告,包含每个发现的 ID,例如 `F1`,加上其影响、利用场景、严重性、置信度和建议

121* **`CLAUDE-SECURITY-RESULTS.jsonl`**:相同的发现以机器可读的形式,每行一个 JSON 对象121* **`CLAUDE-SECURITY-RESULTS.jsonl`**:相同的发现以机器可读的形式,每行一个 JSON 对象

122* **`CLAUDE-SECURITY-RESULTS.sarif`**:相同的发现作为 [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) 日志,用于 GitHub 代码扫描和任何其他读取该标准的工具。扫描将发现分类在其 [CWE](https://cwe.mitre.org/) 弱点类别下122* **`CLAUDE-SECURITY-RESULTS.sarif`**:相同的发现作为 [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) 日志,用于 GitHub 代码扫描和任何其他读取该标准的工具。扫描将发现分类在其 [CWE](https://cwe.mitre.org/) 弱点类别下

123* **`CLAUDE-SECURITY-REVISION-<commit>.json`**:修订戳,记录扫描了哪个提交、以什么[扫描工作量](#choose-a-scan-effort)、未提交的更改是否是扫描树的一部分,以及运行的验证程度如何,因此报告始终与它描述的代码相关联。版本控制外的扫描在提交位置戳上 `UNVERSIONED`123* **`CLAUDE-SECURITY-REVISION-<commit>.json`**:修订戳,记录扫描了哪个提交、以什么[扫描工作量](#choose-a-scan-effort)、未提交的更改是否是扫描树的一部分,以及运行的验证程度如何。版本控制外的扫描在提交位置戳上 `UNVERSIONED`

124 124 

125该目录是扫描对您的检出所做的唯一更改,它有自己的 `.gitignore`,因此随意的 `git add` 永远不会将报告扫入提交。要在历史中保留报告以供审计跟踪,删除那一个 `.gitignore` 文件并像任何其他文件一样提交目录。125该目录是扫描对您的检出所做的唯一更改,它有自己的 `.gitignore`,因此随意的 `git add` 永远不会将报告扫入提交。要在历史中保留报告以供审计跟踪,删除那一个 `.gitignore` 文件并像任何其他文件一样提交目录。

126 126 

127发现仅在独立验证代理分析它们后才出现在报告中,这使报告简短且值得阅读。扫描是非确定性的:同一代码的两次扫描可能会发现不同的发现。定期运行扫描,并使用修订戳将每个报告归属于它覆盖的确切代码和设置。127发现仅在独立验证 Agent 分析它们后才出现在报告中,这使报告简短且值得阅读。扫描是非确定性的:同一代码的两次扫描可能会发现不同的发现。请定期运行扫描。

128 128 

129## 修复发现129## 修复发现

130 130 

Details

102* **Role**:在所有计划上,无论您的角色如何,您都可以在自己的环境中添加和删除机密。在 Team 和 Enterprise 上,所有者在您的 claude.ai 组织中持有组织管理员角色,管理员(Admin)不持有,这会改变您在以下情况下看到的内容:102* **Role**:在所有计划上,无论您的角色如何,您都可以在自己的环境中添加和删除机密。在 Team 和 Enterprise 上,所有者在您的 claude.ai 组织中持有组织管理员角色,管理员(Admin)不持有,这会改变您在以下情况下看到的内容:

103 * **您自己的环境**:没有组织管理员角色时,**Add secret** 会打开一个[简化表单](#add-a-secret-without-the-role)103 * **您自己的环境**:没有组织管理员角色时,**Add secret** 会打开一个[简化表单](#add-a-secret-without-the-role)

104 * **共享环境**:所有者从管理设置中[添加和删除其机密](#add-a-credential)。没有组织管理员角色时,请让所有者添加机密,因为该环境的对话框中没有 **Network secrets** 部分104 * **共享环境**:所有者从管理设置中[添加和删除其机密](#add-a-credential)。没有组织管理员角色时,请让所有者添加机密,因为该环境的对话框中没有 **Network secrets** 部分

105* **Environment type**:一个已存在的 Anthropic 托管云环境。[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)没有网络机密105* **Environment type**:Anthropic 托管的云环境。[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)没有网络机密

106* **API reachability**:API 接受来自互联网的连接,因为请求从 Anthropic 的网络发出106* **API reachability**:API 接受来自互联网的连接,因为请求从 Anthropic 的网络发出

107* **Encryption keys**:如果您的组织使用客户管理的加密密钥,则无法保存网络机密107* **Encryption keys**:如果您的组织使用客户管理的加密密钥,则无法保存网络机密

108 108 

Details

14>14>

15> 如需在 GitHub 上自动审查仓库中的每个 Pull Request,请参阅 [Code Review](https://code.claude.com/docs/zh-CN/code-review.md),这是一项由 Owner 为您的组织启用的托管服务。15> 如需在 GitHub 上自动审查仓库中的每个 Pull Request,请参阅 [Code Review](https://code.claude.com/docs/zh-CN/code-review.md),这是一项由 Owner 为您的组织启用的托管服务。

16 16 

17`/review` 是 `/code-review` 的别名。在 v2.1.223 之前,`/review` 是一个单独的命令,对 GitHub Pull Request 执行单次、只读的审查。17`/review` 是 `/code-review` 的别名。

18 18 

19**1. 运行 /code-review**19**1. 运行 /code-review**

20 20 


91* **`ultra`**:审查既不使用也不更新记住的级别91* **`ultra`**:审查既不使用也不更新记住的级别

92* **从未输入过级别**:审查使用会话当前的 effort92* **从未输入过级别**:审查使用会话当前的 effort

93 93 

94在 v2.1.223 之前,不带级别的 `/code-review` 始终使用会话当前的 effort。

95 

96### 将发现的问题发布到 GitLab 合并请求94### 将发现的问题发布到 GitLab 合并请求

97 95 

98当您为 GitLab 合并请求传入 `--comment` 时,Claude Code 会通过 GitLab 的 `glab` CLI 发布发现的问题。需要 Claude Code v2.1.257 或更高版本。如果未安装 `glab`,Claude 会改为在终端中打印发现的问题。96当您为 GitLab 合并请求传入 `--comment` 时,Claude Code 会通过 GitLab 的 `glab` CLI 发布发现的问题。需要 Claude Code v2.1.257 或更高版本。如果未安装 `glab`,Claude 会改为在终端中打印发现的问题。

commands.md +2 −2

Details

104| `/install-github-app` | 为仓库安装 Claude GitHub App,并可选择设置 [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md) 工作流和密钥。引导您选择仓库并配置集成。仅适用于 github.com 仓库。当您仓库的 git 远程位于 gitlab.com 或 bitbucket.org 上时,该命令会输出一条通知并退出,而不是开始设置。要从 GitLab 流水线运行 Claude Code,请参阅 [GitLab CI/CD](https://code.claude.com/docs/zh-CN/gitlab-ci-cd.md) |104| `/install-github-app` | 为仓库安装 Claude GitHub App,并可选择设置 [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md) 工作流和密钥。引导您选择仓库并配置集成。仅适用于 github.com 仓库。当您仓库的 git 远程位于 gitlab.com 或 bitbucket.org 上时,该命令会输出一条通知并退出,而不是开始设置。要从 GitLab 流水线运行 Claude Code,请参阅 [GitLab CI/CD](https://code.claude.com/docs/zh-CN/gitlab-ci-cd.md) |

105| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |105| `/install-slack-app` | 安装 Claude Slack 应用。打开浏览器以完成 OAuth 流程 |

106| `/keybindings` | 打开您的[快捷键](https://code.claude.com/docs/zh-CN/keybindings.md)文件 |106| `/keybindings` | 打开您的[快捷键](https://code.claude.com/docs/zh-CN/keybindings.md)文件 |

107| `/list-agents` | 列出 Claude 可以向其发送消息的子代理、[agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 队友以及其他 Claude Code 会话,并显示每一项应使用的名称。请参阅[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)。也可作为 `/peers` 使用。需要 Claude Code v2.1.224 或更高版本;更早版本会报告 `Unknown command: /list-agents`。队友行以及显示此会话自身名称的第一行需要 v2.1.239 或更高版本。仅在[已启用跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#availability)的会话中可用 |107| `/list-agents` | 列出 Claude 可以向其发送消息的子代理、[agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 队友以及其他 Claude Code 会话,并显示每一项应使用的名称。请参阅[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)。也可作为 `/peers` 使用。队友行以及显示此会话自身名称的第一行需要 v2.1.239 或更高版本。仅在[已启用跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#availability)的会话中可用 |

108| `/login` | 登录您的 Anthropic 账户 |108| `/login` | 登录您的 Anthropic 账户 |

109| `/logout` | 从您的 Anthropic 账户注销 |109| `/logout` | 从您的 Anthropic 账户注销 |

110| `/loop [interval] [prompt]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 在会话保持打开期间重复运行提示词。省略间隔时,Claude 会[自行决定迭代之间的节奏](https://code.claude.com/docs/zh-CN/scheduled-tasks.md#let-claude-choose-the-interval)。省略提示词时,Claude 会运行[内置维护提示词](https://code.claude.com/docs/zh-CN/scheduled-tasks.md#run-the-built-in-maintenance-prompt)或您的 [`loop.md`](https://code.claude.com/docs/zh-CN/scheduled-tasks#customize-the-default-prompt-with-loop-md)。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示词](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)。别名:`/proactive` |110| `/loop [interval] [prompt]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 在会话保持打开期间重复运行提示词。省略间隔时,Claude 会[自行决定迭代之间的节奏](https://code.claude.com/docs/zh-CN/scheduled-tasks.md#let-claude-choose-the-interval)。省略提示词时,Claude 会运行[内置维护提示词](https://code.claude.com/docs/zh-CN/scheduled-tasks.md#run-the-built-in-maintenance-prompt)或您的 [`loop.md`](https://code.claude.com/docs/zh-CN/scheduled-tasks#customize-the-default-prompt-with-loop-md)。示例:`/loop 5m check if the deploy finished`。请参阅[按计划运行提示词](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)。别名:`/proactive` |


132| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。不提供名称时,根据对话历史自动生成一个名称。也可在非交互模式(`-p`)中使用。在所有重命名入口(包括 claude.ai 和桌面应用)中,Claude Code 都会将新名称中的控制字符和不可见字符替换为空格,并将名称长度上限设为 200 个字符。如果移除不可见字符后名称为空,Claude Code 会拒绝该名称并显示 `That name is empty once invisible characters are removed. Usage: /rename <name>`。字符替换和长度上限需要 Claude Code v2.1.221 或更高版本 |132| `/rename [name]` | 重命名当前会话并在提示栏上显示名称。不提供名称时,根据对话历史自动生成一个名称。也可在非交互模式(`-p`)中使用。在所有重命名入口(包括 claude.ai 和桌面应用)中,Claude Code 都会将新名称中的控制字符和不可见字符替换为空格,并将名称长度上限设为 200 个字符。如果移除不可见字符后名称为空,Claude Code 会拒绝该名称并显示 `That name is empty once invisible characters are removed. Usage: /rename <name>`。字符替换和长度上限需要 Claude Code v2.1.221 或更高版本 |

133| `/restart` | 重启 Claude Code 并恢复此会话,从而应用已安装的更新。在更新安装后页脚提供此选项时运行它。需要 Pro、Max 或 Ultra 套餐,以及在 macOS 或 Linux(非 WSL)上的原生安装。需要 Claude Code v2.1.288 或更高版本。别名:`/update` |133| `/restart` | 重启 Claude Code 并恢复此会话,从而应用已安装的更新。在更新安装后页脚提供此选项时运行它。需要 Pro、Max 或 Ultra 套餐,以及在 macOS 或 Linux(非 WSL)上的原生安装。需要 Claude Code v2.1.288 或更高版本。别名:`/update` |

134| `/resume [session]` | 通过 ID 或名称恢复对话,或打开会话选择器。[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)在选择器中以 `bg` 标记显示。恢复仍在运行的后台会话时(无论是从选择器还是通过 ID 或名称),会[打开该会话](https://code.claude.com/docs/zh-CN/sessions.md#resume-a-running-background-session):您当前的对话会移到后台,此终端会附加到正在运行的会话。在空输入框中按 `←` 可返回 Agent 视图,其中也会列出您离开的对话。在 v2.1.285 之前,Claude Code 会拒绝并告诉您使用 `claude attach` 打开该会话,或先停止它。别名:`/continue` |134| `/resume [session]` | 通过 ID 或名称恢复对话,或打开会话选择器。[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)在选择器中以 `bg` 标记显示。恢复仍在运行的后台会话时(无论是从选择器还是通过 ID 或名称),会[打开该会话](https://code.claude.com/docs/zh-CN/sessions.md#resume-a-running-background-session):您当前的对话会移到后台,此终端会附加到正在运行的会话。在空输入框中按 `←` 可返回 Agent 视图,其中也会列出您离开的对话。在 v2.1.285 之前,Claude Code 会拒绝并告诉您使用 `claude attach` 打开该会话,或先停止它。别名:`/continue` |

135| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | [`/code-review`](https://code.claude.com/docs/zh-CN/code-review-local) 的别名:审查当前 diff,或您传递的 PR 编号、分支或路径(例如 `/review 1234`),并接受相同的 effort 级别和标志。未指定级别时,审查会沿用您上次输入的 `low` 到 `max` 级别;有关确切规则,请参阅[使用 `/code-review` 在本地审查](https://code.claude.com/docs/zh-CN/code-review-local)。要进行深度云端审查,请使用 [`/code-review ultra`](https://code.claude.com/docs/zh-CN/ultrareview)。在 v2.1.223 之前,`/review` 是一个单独的命令,按编号对 GitHub Pull Request 运行单次只读审查,不带参数运行时会列出打开的 PR 供选择;从 v2.1.186 到 v2.1.201,它运行与 `/code-review medium` 相同的多 Agent 引擎 |135| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | [`/code-review`](https://code.claude.com/docs/zh-CN/code-review-local) 的别名:审查当前 diff,或您传递的 PR 编号、分支或路径(例如 `/review 1234`),并接受相同的 effort 级别和标志。未指定级别时,审查会沿用您上次输入的 `low` 到 `max` 级别;有关确切规则,请参阅[使用 `/code-review` 在本地审查](https://code.claude.com/docs/zh-CN/code-review-local)。要进行深度云端审查,请使用 [`/code-review ultra`](https://code.claude.com/docs/zh-CN/ultrareview) |

136| `/rewind` | 将对话和/或代码回退到之前的某个时间点,或从选定的消息开始总结。请参阅[检查点功能](https://code.claude.com/docs/zh-CN/checkpointing.md)。别名:`/checkpoint`、`/undo` |136| `/rewind` | 将对话和/或代码回退到之前的某个时间点,或从选定的消息开始总结。请参阅[检查点功能](https://code.claude.com/docs/zh-CN/checkpointing.md)。别名:`/checkpoint`、`/undo` |

137| `/run` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 启动并操作您项目的应用,以查看更改是否实际生效,而不仅仅是通过测试。请参阅[运行并验证您的应用](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app) |137| `/run` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 启动并操作您项目的应用,以查看更改是否实际生效,而不仅仅是通过测试。请参阅[运行并验证您的应用](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app) |

138| `/run-skill-generator` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 通过编写一个项目专属的 [skill](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app),教会 `/run` 和 `/verify` 如何在干净的环境中构建、启动和操作您项目的应用 |138| `/run-skill-generator` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 通过编写一个项目专属的 [skill](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app),教会 `/run` 和 `/verify` 如何在干净的环境中构建、启动和操作您项目的应用 |

costs.md +6 −6

Details

292 292 

293自定义 [hook](https://code.claude.com/docs/zh-CN/hooks.md) 可以在 Claude 看到数据之前对其进行预处理。Claude 不是读取 10,000 行日志文件来查找错误,hook 可以 grep `ERROR` 并仅返回匹配的行,将上下文从数万个 token 减少到数百个。293自定义 [hook](https://code.claude.com/docs/zh-CN/hooks.md) 可以在 Claude 看到数据之前对其进行预处理。Claude 不是读取 10,000 行日志文件来查找错误,hook 可以 grep `ERROR` 并仅返回匹配的行,将上下文从数万个 token 减少到数百个。

294 294 

295[skill](https://code.claude.com/docs/zh-CN/skills.md) 可以为 Claude 提供领域知识,这样它就不必进行探索。例如,"codebase-overview" skill 可以描述您的项目架构、关键目录和命名约定。当 Claude 调用该 skill 时,它会立即获得此上下文,而不是花费 token 读取多个文件来理解结构。295此 PreToolUse hook 将测试输出截取为最后 100 行:

296 

297例如,此 PreToolUse hook 过滤测试输出以仅显示失败:

298 296 

299> [tab] settings.json297> [tab] settings.json

300>298>


320 318 

321> [tab] filter-test-output.sh319> [tab] filter-test-output.sh

322>320>

323> hook 调用此脚本。使用 `mkdir -p ~/.claude/hooks` 创建文件夹,将下面的脚本保存为 `~/.claude/hooks/filter-test-output.sh`,并使用 `chmod +x ~/.claude/hooks/filter-test-output.sh` 使其可执行。它检查命令是否为测试运行器并修改它以仅显示失败:321> hook 调用此脚本。使用 `mkdir -p ~/.claude/hooks` 创建文件夹,将下面的脚本保存为 `~/.claude/hooks/filter-test-output.sh`,并使用 `chmod +x ~/.claude/hooks/filter-test-output.sh` 使其可执行。它检查命令是否为测试运行器,如果是,则仅保留其输出的最后 100 行:

324>322>

325> ```bash theme={null}323> ```bash theme={null}

326> #!/bin/bash324> #!/bin/bash

327> input=$(cat)325> input=$(cat)

328> cmd=$(echo "$input" | jq -r '.tool_input.command')326> cmd=$(echo "$input" | jq -r '.tool_input.command')

329>327>

330> # If running tests, filter to show only failures328> # If running tests, keep only the last 100 lines

331> pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'329> pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'

332> if [[ "$cmd" =~ $pattern ]]; then330> if [[ "$cmd" =~ $pattern ]]; then

333> filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"331> filtered_cmd="$cmd 2>&1 | tail -n 100"

334> echo "$input" | jq --arg filtered "$filtered_cmd" \332> echo "$input" | jq --arg filtered "$filtered_cmd" \

335> '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'333> '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'

336> else334> else


340 338 

341要验证设置,运行 `/hooks` 并检查 hook 是否出现在 PreToolUse 下。您也可以使用 `claude --debug-file ./claude-debug.txt` 启动 Claude Code 并要求 Claude 运行 `npm test`。当 hook 重写命令时,该日志文件包含一个 `modified tool input keys` 行,列出 `command` 和其他 Bash 输入字段。339要验证设置,运行 `/hooks` 并检查 hook 是否出现在 PreToolUse 下。您也可以使用 `claude --debug-file ./claude-debug.txt` 启动 Claude Code 并要求 Claude 运行 `npm test`。当 hook 重写命令时,该日志文件包含一个 `modified tool input keys` 行,列出 `command` 和其他 Bash 输入字段。

342 340 

341[skill](https://code.claude.com/docs/zh-CN/skills.md) 可以为 Claude 提供领域知识,这样它就不必进行探索。例如,"codebase-overview" skill 可以描述您的项目架构、关键目录和命名约定。当 Claude 调用该 skill 时,它会立即获得此上下文,而不是花费 token 读取多个文件来理解结构。

342 

343### 将指令从 CLAUDE.md 移动到 skill343### 将指令从 CLAUDE.md 移动到 skill

344 344 

345您的 [CLAUDE.md](https://code.claude.com/docs/zh-CN/memory.md) 文件在会话开始时加载到上下文中。如果它包含特定工作流的详细指令(如 PR 审查或数据库迁移),即使您在做不相关的工作时,这些 token 也会存在。[Skills](https://code.claude.com/docs/zh-CN/skills.md) 仅在调用时按需加载,因此将专门指令移动到 skill 中可以保持您的基础上下文较小。目标是通过仅包含必要内容来将 CLAUDE.md 保持在 200 行以下。345您的 [CLAUDE.md](https://code.claude.com/docs/zh-CN/memory.md) 文件在会话开始时加载到上下文中。如果它包含特定工作流的详细指令(如 PR 审查或数据库迁移),即使您在做不相关的工作时,这些 token 也会存在。[Skills](https://code.claude.com/docs/zh-CN/skills.md) 仅在调用时按需加载,因此将专门指令移动到 skill 中可以保持您的基础上下文较小。目标是通过仅包含必要内容来将 CLAUDE.md 保持在 200 行以下。

Details

56 56 

57### 消息传递57### 消息传递

58 58 

59接收 Claude 在活跃轮次中的工具调用之间读取消息,所以运行中的工具永远不会被中断。当接收会话处于空闲状态时,Claude Code 会用消息启动新的轮次。59接收方 Claude 会在活跃轮次中的工具调用之间读取消息。当接收会话处于空闲状态时,Claude Code 会以该消息启动一个新的轮次。

60 60 

61来自另一个会话的消息以纯文本形式到达。如果它用 `@` 提及文件或 [MCP 资源](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-resources),Claude 会看到按原样写的提及,Claude Code 不会附加任何内容,无论消息是启动新轮次还是在现有轮次中到达。Claude 仍然可以用自己的工具在接收机器上打开提及的路径,受该会话的权限限制。61来自另一个会话的消息以纯文本形式到达。如果它用 `@` 提及文件或 [MCP 资源](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-resources),Claude 会看到按原样写的提及,Claude Code 不会附加任何内容,无论消息是启动新轮次还是在现有轮次中到达。Claude 仍然可以用自己的工具在接收机器上打开提及的路径,受该会话的权限限制。

62 62 

desktop.md +3 −3

Details

256 256 

257### 最小化窗格257### 最小化窗格

258 258 

259要让终端、浏览器或 [iOS Simulator](https://code.claude.com/docs/zh-CN/desktop-ios-simulator.md) 以较小尺寸保持在视野中,请点击窗格标题中的 **Minimize**。该按钮需要 Claude Desktop v4.0.0 或更高版本,并且需要使用 Claude 账户而非[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md)。浏览器窗格仅在本地会话中提供该按钮。259要让终端、浏览器、[iOS Simulator](https://code.claude.com/docs/zh-CN/desktop-ios-simulator.md) 或[侧边聊天](#ask-a-side-question-without-derailing-the-session)以较小尺寸保持在视野中,请点击窗格标题中的 **Minimize**。该按钮需要 Claude Desktop v4.0.0 或更高版本,并且需要使用 Claude 账户而非[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md)。浏览器窗格仅在本地会话中提供该按钮。

260 260 

261当[会话详细信息面板](#see-session-details)显示在屏幕上时,最小化的窗格位于该面板中;否则,它会悬浮在聊天区域的一角:261当[会话详细信息面板](#see-session-details)显示在屏幕上时,最小化的窗格位于该面板中;否则,它会悬浮在聊天区域的一角:

262 262 


1382 1382 

1383> [accordion] worktree 中的编辑何时可以继续工作1383> [accordion] worktree 中的编辑何时可以继续工作

1384>1384>

1385> 在 Linux 或 macOS 远程计算机上,该检查不经过 Desktop,因此在 Desktop 断开连接期间,worktree 内的编辑可以继续工作。在 Claude Desktop v2.37337.0 之前,这仅适用于 Linux 远程计算机。1385> 在 Linux 或 macOS 远程计算机上,worktree 内的编辑可以在 Desktop 断开连接时继续工作,因为对每次编辑的检查可以在没有 Desktop 的情况下运行。在 [Claude Desktop v2.37337.0](#check-your-version) 之前,这仅适用于 Linux 远程计算机。

1386>1386>

1387> 在某些情况下编辑仍会失败,包括以下情况:1387> 在某些情况下编辑仍会失败,包括以下情况:

1388>1388>


2050 2050 

2051* **此机器上的本地会话**:部署到磁盘的托管设置文件适用。通过管理员控制台远程推送的托管设置也在会话使用[符合条件的登录](https://code.claude.com/docs/zh-CN/server-managed-settings.md#platform-availability)向 Anthropic 的 API 进行身份验证时到达这些会话,遵循与终端 CLI 相同的[设置优先级](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)。2051* **此机器上的本地会话**:部署到磁盘的托管设置文件适用。通过管理员控制台远程推送的托管设置也在会话使用[符合条件的登录](https://code.claude.com/docs/zh-CN/server-managed-settings.md#platform-availability)向 Anthropic 的 API 进行身份验证时到达这些会话,遵循与终端 CLI 相同的[设置优先级](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)。

2052* **[云端会话](#cloud-sessions)**:接收[服务器管理的设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md);设备部署的文件无法到达它们,因为它们在 Anthropic 管理的虚拟机上运行。路由到[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)的会话也读取运行程序镜像中的托管设置文件。[Claude Code 如何组合托管源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)说明该文件何时适用。2052* **[云端会话](#cloud-sessions)**:接收[服务器管理的设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md);设备部署的文件无法到达它们,因为它们在 Anthropic 管理的虚拟机上运行。路由到[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)的会话也读取运行程序镜像中的托管设置文件。[Claude Code 如何组合托管源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)说明该文件何时适用。

2053* **[SSH 会话](#ssh-sessions)**:会话从远程主机读取托管设置文件。Desktop 本身在本地机器上读取 `sshConfigs`、`sshHostAllowlist`、`disableSshSavedPasswords` 和 `disableDesktopLocalSessions`。如果您提供多个托管源,它[默认只从其中一个](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)读取。2053* **[SSH 会话](#ssh-sessions)**:会话从远程主机读取托管设置文件。Desktop 本身在本地机器上读取 `sshConfigs`、`sshHostAllowlist`、`disableSshSavedPasswords` 和 `disableDesktopLocalSessions`。如果您提供多个托管源,它[默认只从其中一个](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)读取。如果您在本地机器上生效的托管设置中设置了 `permissions.disableBypassPermissionsMode` 或 `disableAutoMode`,则无论远程主机如何设置,SSH 会话的模式选择器都不会提供该模式。

2054* **[Cowork](https://claude.com/docs/cowork/overview) 会话**:在此机器上的 Cowork 会话中,Claude Code 永远不会获取管理员控制台设置,即使用户使用 Team 或 Enterprise 帐户登录,并读取部署到机器的策略,除非您的 Claude Desktop 配置设置了 `requireCoworkFullVmSandbox`。远程 Cowork 会话两者都不接收。请参阅[策略应用的位置和时间](https://code.claude.com/docs/zh-CN/managed-settings.md#where-and-when-a-policy-applies)了解哪些设备文件到达 Cowork,以及[MCP 权限规则](https://code.claude.com/docs/zh-CN/permissions.md#mcp)了解 `Bash` 和 `WebFetch` 规则如何应用于 Cowork 的工具。2054* **[Cowork](https://claude.com/docs/cowork/overview) 会话**:在此机器上的 Cowork 会话中,Claude Code 永远不会获取管理员控制台设置,即使用户使用 Team 或 Enterprise 帐户登录,并读取部署到机器的策略,除非您的 Claude Desktop 配置设置了 `requireCoworkFullVmSandbox`。远程 Cowork 会话两者都不接收。请参阅[策略应用的位置和时间](https://code.claude.com/docs/zh-CN/managed-settings.md#where-and-when-a-policy-applies)了解哪些设备文件到达 Cowork,以及[MCP 权限规则](https://code.claude.com/docs/zh-CN/permissions.md#mcp)了解 `Bash` 和 `WebFetch` 规则如何应用于 Cowork 的工具。

2055 2055 

2056在本地和 SSH 会话中,桌面应用直接将每个用户连接的 claude.ai 连接器传递给 Claude Code。无论您使用哪个设置源或文件位置,都没有 MCP 设置或 `managed-mcp.json` 到达这些连接器。要在这些会话中阻止连接器的工具,请使用您的组织的[连接器工具控制](https://code.claude.com/docs/zh-CN/mcp.md#organization-controls-on-connector-tools)。[连接器如何到达 Claude Code](https://code.claude.com/docs/zh-CN/mcp.md#how-connectors-reach-claude-code)显示在每种会话中哪些设置管理连接器。2056在本地和 SSH 会话中,桌面应用直接将每个用户连接的 claude.ai 连接器传递给 Claude Code。无论您使用哪个设置源或文件位置,都没有 MCP 设置或 `managed-mcp.json` 到达这些连接器。要在这些会话中阻止连接器的工具,请使用您的组织的[连接器工具控制](https://code.claude.com/docs/zh-CN/mcp.md#organization-controls-on-connector-tools)。[连接器如何到达 Claude Code](https://code.claude.com/docs/zh-CN/mcp.md#how-connectors-reach-claude-code)显示在每种会话中哪些设置管理连接器。

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> iOS Simulator 窗格在 macOS 上的 Claude Code Desktop 中处于公开测试版。它在 Pro、Max、Ultra、Team 和 Enterprise 计划中可用,但在启用了 HIPAA 配置的 Enterprise 组织中不可用。11> iOS Simulator 窗格在 macOS 上的 Claude Code Desktop 中处于公开测试版。它在 Pro、Max、Ultra、Team 和 Enterprise 计划中可用,但在启用了 HIPAA 配置的 Enterprise 组织中不可用。如果您使用[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md),则无法使用此功能。

12 12 

13iOS Simulator 窗格在 Claude Code Desktop 中的对话旁边显示你的应用在 Apple 的 iOS Simulator 中运行。当 Claude 在模拟器中构建、安装、启动或检查你的应用时,该窗格会自动打开并实时流式传输设备屏幕。使用它来观看 Claude 运行和测试你的应用,或者在 Claude 继续工作时自己点击浏览应用。13iOS Simulator 窗格在 Claude Code Desktop 中的对话旁边显示你的应用在 Apple 的 iOS Simulator 中运行。当 Claude 在模拟器中构建、安装、启动或检查你的应用时,该窗格会自动打开并实时流式传输设备屏幕。使用它来观看 Claude 运行和测试你的应用,或者在 Claude 继续工作时自己点击浏览应用。

14 14 


147* 明确说明目标,例如"在 iOS Simulator 中运行应用并点击浏览注册流程"。147* 明确说明目标,例如"在 iOS Simulator 中运行应用并点击浏览注册流程"。

148* 确认 Xcode 和 iOS 模拟器已安装,并且你的 Xcode 版本符合[要求](#requirements)。148* 确认 Xcode 和 iOS 模拟器已安装,并且你的 Xcode 版本符合[要求](#requirements)。

149* 如果你的组织管理 Claude Code,[模拟器工具可能被策略禁用](#turn-off-simulator-access)。149* 如果你的组织管理 Claude Code,[模拟器工具可能被策略禁用](#turn-off-simulator-access)。

150* 如果你在启用了 HIPAA 配置的 Enterprise 组织中,模拟器窗格对你不可用。150* 如果您在启用了 HIPAA 配置的 Enterprise 组织中,或者您使用的是[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md),模拟器窗格对您不可用。

151* 模拟器窗格需要 Claude Desktop v1.24012.0 或更高版本。打开 **Claude > Check for Updates…**,然后重启应用。151* 模拟器窗格需要 Claude Desktop v1.24012.0 或更高版本。打开 **Claude > Check for Updates…**,然后重启应用。

152 152 

153### 模拟器窗格显示未找到模拟器153### 模拟器窗格显示未找到模拟器

env-vars.md +5 −5

Details

204| `CLAUDE_CODE_ARTIFACT_AUTO_OPEN` | 设置为 `0` 可阻止 Claude Code 在发布新的 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#create-an-artifact) 时自动打开浏览器 |204| `CLAUDE_CODE_ARTIFACT_AUTO_OPEN` | 设置为 `0` 可阻止 Claude Code 在发布新的 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#create-an-artifact) 时自动打开浏览器 |

205| `CLAUDE_CODE_ARTIFACT_COMMENTS` | 设置为 `0` 可阻止 Claude 读取和回复 [Artifact 上的评论](https://code.claude.com/docs/zh-CN/artifacts.md#collect-comments-on-an-artifact)。当 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 已[关闭 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#availability) 时不起作用。需要 Claude Code v2.1.221 或更高版本 |205| `CLAUDE_CODE_ARTIFACT_COMMENTS` | 设置为 `0` 可阻止 Claude 读取和回复 [Artifact 上的评论](https://code.claude.com/docs/zh-CN/artifacts.md#collect-comments-on-an-artifact)。当 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 已[关闭 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#availability) 时不起作用。需要 Claude Code v2.1.221 或更高版本 |

206| `CLAUDE_CODE_ARTIFACT_COMMENTS_AUTOREACT` | 设置为 `0` 可阻止 Claude [自行回复发送给它的评论](https://code.claude.com/docs/zh-CN/artifacts.md#let-claude-reply-to-comments-on-its-own)。需要 Claude Code v2.1.228 或更高版本 |206| `CLAUDE_CODE_ARTIFACT_COMMENTS_AUTOREACT` | 设置为 `0` 可阻止 Claude [自行回复发送给它的评论](https://code.claude.com/docs/zh-CN/artifacts.md#let-claude-reply-to-comments-on-its-own)。需要 Claude Code v2.1.228 或更高版本 |

207| `CLAUDE_CODE_ARTIFACT_PUBLISH_EDITS` | 设置为 `0` 可阻止 Claude 在发布 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#update-an-artifact) 时对其文件应用小的更改。Claude 随后会使用其文件编辑工具编辑文件,并作为单独的步骤发布。需要 Claude Code v2.1.300 或更高版本 |207| `CLAUDE_CODE_ARTIFACT_PUBLISH_EDITS` | 设为 `0` 可阻止 Claude 在发布 Artifact 的过程中对其文件[应用小的更改](https://code.claude.com/docs/zh-CN/artifacts.md#turn-off-one-step-artifact-updates)。Claude 随后会使用其文件编辑工具编辑该文件,并作为单独的步骤发布。需要 Claude Code v2.1.300 或更高版本 |

208| `CLAUDE_CODE_ATTRIBUTION_HEADER` | 设置为 `0` 可从系统提示词开头省略[归属块](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#system-prompt-attribution-block),该块包含客户端版本和提示词指纹。无论哪种方式,直接连接到 Anthropic API 时的缓存都不受影响。在某些直接连接设置中,即使您设置了 `0`,Claude Code 也会在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器请求中保留该块。请在[系统提示词归属块](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#system-prompt-attribution-block)中查看此情况涵盖哪些连接和凭据。在 v2.1.181 之前,该块在自定义基础 URL 和 Microsoft Foundry 连接上包含一个按请求变化的 token,因此在这些版本上,当您的 LLM 网关基于请求体进行缓存或将请求转发给第三方提供商时,或者当您直接连接到 Microsoft Foundry 时,请将其设置为 `0` |208| `CLAUDE_CODE_ATTRIBUTION_HEADER` | 设置为 `0` 可从系统提示词开头省略[归属块](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#system-prompt-attribution-block),该块包含客户端版本和提示词指纹。无论哪种方式,直接连接到 Anthropic API 时的缓存都不受影响。在某些直接连接设置中,即使您设置了 `0`,Claude Code 也会在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器请求中保留该块。请在[系统提示词归属块](https://code.claude.com/docs/zh-CN/llm-gateway-protocol.md#system-prompt-attribution-block)中查看此情况涵盖哪些连接和凭据。在 v2.1.181 之前,该块在自定义基础 URL 和 Microsoft Foundry 连接上包含一个按请求变化的 token,因此在这些版本上,当您的 LLM 网关基于请求体进行缓存或将请求转发给第三方提供商时,或者当您直接连接到 Microsoft Foundry 时,请将其设置为 `0` |

209| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | 已在 v2.1.283 中移除。请改用 `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` |209| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | 已在 v2.1.283 中移除。请改用 `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` |

210| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置自动压缩窗口,即上下文填充到多满时进行压缩,范围为 `100000` 到 `1000000` 个 token。带后缀的值(如 `200k`)需要 v2.1.304 或更高版本。关于它与设置该窗口的其他方式之间的优先级,以及它对状态栏 `used_percentage` 的影响,请参阅[设置自动压缩窗口](https://code.claude.com/docs/zh-CN/model-config.md#set-the-auto-compact-window) |210| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 设置自动压缩窗口,即上下文填充到多满时进行压缩,范围为 `100000` 到 `1000000` 个 token。带后缀的值(如 `200k`)需要 v2.1.304 或更高版本。关于它与设置该窗口的其他方式之间的优先级,以及它对状态栏 `used_percentage` 的影响,请参阅[设置自动压缩窗口](https://code.claude.com/docs/zh-CN/model-config.md#set-the-auto-compact-window) |


502| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 可在 `tool.output` OpenTelemetry span 事件中包含工具内容。span 属性在[各自的开关](https://code.claude.com/docs/zh-CN/monitoring-usage.md#new-context-gates)下携带工具内容。需要[追踪](https://code.claude.com/docs/zh-CN/monitoring-usage.md#traces-beta)。默认禁用以保护敏感数据。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md#tool-output-span-event) |502| `OTEL_LOG_TOOL_CONTENT` | 设置为 `1` 可在 `tool.output` OpenTelemetry span 事件中包含工具内容。span 属性在[各自的开关](https://code.claude.com/docs/zh-CN/monitoring-usage.md#new-context-gates)下携带工具内容。需要[追踪](https://code.claude.com/docs/zh-CN/monitoring-usage.md#traces-beta)。默认禁用以保护敏感数据。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md#tool-output-span-event) |

503| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 可在 OpenTelemetry 指标、追踪和日志中包含工具输入参数;MCP 服务器名称;用户编写的工作流名称;工具失败时的原始错误字符串;`api_refusal` 事件上的拒绝 `category`;[费用和 token 指标](https://code.claude.com/docs/zh-CN/monitoring-usage.md#cost-counter)上真实的 Agent、skill、插件和 MCP 服务器名称;以及其他工具详细信息。默认禁用以保护 PII。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |503| `OTEL_LOG_TOOL_DETAILS` | 设置为 `1` 可在 OpenTelemetry 指标、追踪和日志中包含工具输入参数;MCP 服务器名称;用户编写的工作流名称;工具失败时的原始错误字符串;`api_refusal` 事件上的拒绝 `category`;[费用和 token 指标](https://code.claude.com/docs/zh-CN/monitoring-usage.md#cost-counter)上真实的 Agent、skill、插件和 MCP 服务器名称;以及其他工具详细信息。默认禁用以保护 PII。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

504| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 可在 OpenTelemetry 追踪和日志中包含用户提示词文本。默认禁用(提示词会被遮盖)。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |504| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 可在 OpenTelemetry 追踪和日志中包含用户提示词文本。默认禁用(提示词会被遮盖)。请在 shell、用户设置或托管设置中设置它。在[项目和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中被忽略,但该部分所述的关闭值除外。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

505| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 可从指标属性中排除账户 UUID(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |505| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 可从指标和事件属性中排除账户 UUID(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

506| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 可在指标属性中包含会话入口点(默认:排除)。在 v2.1.152 中添加。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |506| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 可在指标和事件属性中包含会话入口点(默认:排除)。在 v2.1.152 中添加。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

507| `OTEL_METRICS_INCLUDE_REPOSITORY` | 设置为 `true` 可为 OpenTelemetry 指标和事件添加标识会话所在仓库的 `vcs.*` 属性(默认:排除)。需要 Claude Code v2.1.269 或更高版本。请参阅[仓库属性](https://code.claude.com/docs/zh-CN/monitoring-usage.md#repository-attributes) |507| `OTEL_METRICS_INCLUDE_REPOSITORY` | 设置为 `true` 可为 OpenTelemetry 指标和事件添加标识会话所在仓库的 `vcs.*` 属性(默认:排除)。需要 Claude Code v2.1.269 或更高版本。请参阅[仓库属性](https://code.claude.com/docs/zh-CN/monitoring-usage.md#repository-attributes) |

508| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 自 v2.1.161 起,Claude Code 会将 `OTEL_RESOURCE_ATTRIBUTES` 键附加到指标数据点标签上。设置为 `false` 可排除它们(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md#multi-team-organization-support) |508| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 自 v2.1.161 起,Claude Code 会将 `OTEL_RESOURCE_ATTRIBUTES` 键附加到指标数据点标签上。设置为 `false` 可排除它们(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md#multi-team-organization-support) |

509| `OTEL_METRICS_INCLUDE_SESSION_ID` | 设置为 `false` 可从指标属性中排除会话 ID(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |509| `OTEL_METRICS_INCLUDE_SESSION_ID` | 设置为 `false` 可从指标和事件属性中排除会话 ID(默认:包含)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

510| `OTEL_METRICS_INCLUDE_VERSION` | 设置为 `true` 可在指标属性中包含 Claude Code 版本(默认:排除)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |510| `OTEL_METRICS_INCLUDE_VERSION` | 设置为 `true` 可在指标和事件属性中包含 Claude Code 版本(默认:排除)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

511| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | 覆盖向 [Skill 工具](https://code.claude.com/docs/zh-CN/skills.md#control-who-invokes-a-skill)显示的 skill 元数据的字符预算。该预算按上下文窗口的 1% 动态调整,回退值为 8,000 个字符。保留旧名称以实现向后兼容 |511| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | 覆盖向 [Skill 工具](https://code.claude.com/docs/zh-CN/skills.md#control-who-invokes-a-skill)显示的 skill 元数据的字符预算。该预算按上下文窗口的 1% 动态调整,回退值为 8,000 个字符。保留旧名称以实现向后兼容 |

512| `TASK_MAX_OUTPUT_LENGTH` | 已在 v2.1.277 中与其所限定大小的 `TaskOutput` 工具一同移除,现在不起任何作用。此前用于设置 `TaskOutput` 工具保留的[后台任务](https://code.claude.com/docs/zh-CN/tools-reference.md#background-commands)输出的最大字符数。Claude 现在改用 `Read` 读取后台任务的输出文件 |512| `TASK_MAX_OUTPUT_LENGTH` | 已在 v2.1.277 中与其所限定大小的 `TaskOutput` 工具一同移除,现在不起任何作用。此前用于设置 `TaskOutput` 工具保留的[后台任务](https://code.claude.com/docs/zh-CN/tools-reference.md#background-commands)输出的最大字符数。Claude 现在改用 `Read` 读取后台任务的输出文件 |

513| `USE_BUILTIN_RIPGREP` | 设置为 `0` 可使用系统安装的 `rg`,而不是 Claude Code 自带的 `rg` |513| `USE_BUILTIN_RIPGREP` | 设置为 `0` 可使用系统安装的 `rg`,而不是 Claude Code 自带的 `rg` |

errors.md +137 −15

Details

104| `Failed to authenticate: OAuth session expired and could not be refreshed` | [身份验证](#login-expired) |104| `Failed to authenticate: OAuth session expired and could not be refreshed` | [身份验证](#login-expired) |

105| `Could not refresh your login because another Claude Code process is refreshing it` | [身份验证](#could-not-refresh-your-login) |105| `Could not refresh your login because another Claude Code process is refreshing it` | [身份验证](#could-not-refresh-your-login) |

106| `Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh` | [身份验证](#could-not-refresh-your-login) |106| `Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh` | [身份验证](#could-not-refresh-your-login) |

107| `Could not refresh your login: the disk that holds the Claude Code config directory (~/.claude by default), or your disk quota on it, is full` | [身份验证](#could-not-refresh-your-login-disk-full) |

108| `Failed to refresh OAuth token: the disk that holds the Claude Code config directory (~/.claude by default), or your disk quota on it, is full` | [身份验证](#could-not-refresh-your-login-disk-full) |

107| `Your account is on hold and can't use Claude Code. View details or appeal: https://claude.ai/restricted` | [身份验证](#your-account-is-on-hold) |109| `Your account is on hold and can't use Claude Code. View details or appeal: https://claude.ai/restricted` | [身份验证](#your-account-is-on-hold) |

108| `Your account is on hold and can't sign in to Claude Code. View details or appeal: https://claude.ai/restricted` | [身份验证](#your-account-is-on-hold) |110| `Your account is on hold and can't sign in to Claude Code. View details or appeal: https://claude.ai/restricted` | [身份验证](#your-account-is-on-hold) |

109| `Anthropic profile login expired · Re-authenticate your Anthropic profile` | [身份验证](#anthropic-profile-login-expired) |111| `Anthropic profile login expired · Re-authenticate your Anthropic profile` | [身份验证](#anthropic-profile-login-expired) |


242| `The current directory no longer exists (it was deleted or moved)` / `Can't read the current directory` | [命令行错误](#the-current-directory-no-longer-exists) |244| `The current directory no longer exists (it was deleted or moved)` / `Can't read the current directory` | [命令行错误](#the-current-directory-no-longer-exists) |

243| `Temp directory <dir> ... Refusing to use it` / `Claude Code's temporary directory <dir> could not be created` | [命令行错误](#temp-directory-refused-or-cannot-be-created) |245| `Temp directory <dir> ... Refusing to use it` / `Claude Code's temporary directory <dir> could not be created` | [命令行错误](#temp-directory-refused-or-cannot-be-created) |

244| `ENOSPC: no space left on device, mkdir '<dir>'` | [命令行错误](#temp-directory-refused-or-cannot-be-created) |246| `ENOSPC: no space left on device, mkdir '<dir>'` | [命令行错误](#temp-directory-refused-or-cannot-be-created) |

247| `Error: Claude Code could not save ... because the disk is full (ENOSPC)` / `because your disk quota is used up (EDQUOT)` | [命令行错误](#could-not-save-because-the-disk-is-full) |

245| `couldn't be resolved to a real location, so its skills, commands, and agents weren't loaded` | [命令行错误](#directory-couldnt-be-resolved-to-a-real-location) |248| `couldn't be resolved to a real location, so its skills, commands, and agents weren't loaded` | [命令行错误](#directory-couldnt-be-resolved-to-a-real-location) |

246| `Error: Workspace not trusted` when starting Remote Control | [命令行错误](#workspace-not-trusted-when-starting-remote-control) |249| `Error: Workspace not trusted` when starting Remote Control | [命令行错误](#workspace-not-trusted-when-starting-remote-control) |

247| `Error: Workspace not trusted`,在运行 `claude ultrareview` 时出现 | [命令行错误](#workspace-not-trusted-when-running-claude-ultrareview) |250| `Error: Workspace not trusted`,在运行 `claude ultrareview` 时出现 | [命令行错误](#workspace-not-trusted-when-running-claude-ultrareview) |

248| `Ultrareview did not start` | [命令行错误](#ultrareview-did-not-start) |251| `Ultrareview did not start` | [命令行错误](#ultrareview-did-not-start) |

252| `Remote Control did not start: "<question>" got no answer` | [命令行错误](#remote-control-did-not-start-got-no-answer) |

249| `` `<flag>` before `remote-control` is not carried over to the sessions Remote Control starts `` | [命令行错误](#not-carried-over-to-the-sessions-remote-control-starts) |253| `` `<flag>` before `remote-control` is not carried over to the sessions Remote Control starts `` | [命令行错误](#not-carried-over-to-the-sessions-remote-control-starts) |

250| `--sandbox is not supported by claude remote-control` / `--no-sandbox is not supported by claude remote-control` | [命令行错误](#sandbox-is-not-supported-by-claude-remote-control) |254| `--sandbox is not supported by claude remote-control` / `--no-sandbox is not supported by claude remote-control` | [命令行错误](#sandbox-is-not-supported-by-claude-remote-control) |

251| `` `claude import` is not yet available in this build `` | [命令行错误](#claude-import-is-not-yet-available-in-this-build) |255| `` `claude import` is not yet available in this build `` | [命令行错误](#claude-import-is-not-yet-available-in-this-build) |


320| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin 故障排除](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#the-packages-it-lists-are-not-installed) |324| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin 故障排除](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#the-packages-it-lists-are-not-installed) |

321| `does not load (...), so Claude Code ignores the whole file` | [Plugin 故障排除](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#does-not-load-so-claude-code-ignores-the-whole-file) |325| `does not load (...), so Claude Code ignores the whole file` | [Plugin 故障排除](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#does-not-load-so-claude-code-ignores-the-whole-file) |

322| `path escapes plugin directory` | [Plugin 错误](#path-escapes-plugin-directory) |326| `path escapes plugin directory` | [Plugin 错误](#path-escapes-plugin-directory) |

327| `path not read: <path> is absolute or has a ".." part` | [插件错误](#server-file-path-not-read) |

323| `Plugin not loaded: its manifest <path> was not read` | [Plugin 错误](#plugin-not-loaded-its-manifest-was-not-read) |328| `Plugin not loaded: its manifest <path> was not read` | [Plugin 错误](#plugin-not-loaded-its-manifest-was-not-read) |

324| `path could not be checked` | [Plugin 错误](#path-could-not-be-checked) |329| `path could not be checked` | [Plugin 错误](#path-could-not-be-checked) |

325| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin 错误](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |330| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin 错误](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |


368| `Refusing to write <path>: where it leads on disk could not be determined` / `Refusing to read <path>: where it leads on disk could not be determined` | [工具错误](#refusing-after-a-symlink-changed) |373| `Refusing to write <path>: where it leads on disk could not be determined` / `Refusing to read <path>: where it leads on disk could not be determined` | [工具错误](#refusing-after-a-symlink-changed) |

369| `Refusing to search <path>: a path one of its Read deny rules is written through changed while the search was being prepared` / `Refusing to search <path>: it could not be opened` | [工具错误](#refusing-after-a-symlink-changed) |374| `Refusing to search <path>: a path one of its Read deny rules is written through changed while the search was being prepared` / `Refusing to search <path>: it could not be opened` | [工具错误](#refusing-after-a-symlink-changed) |

370| `its permission check expired before it ran (too many concurrent file operations)` / `ripgrep was found only by name on PATH` | [工具错误](#refusing-after-a-symlink-changed) |375| `its permission check expired before it ran (too many concurrent file operations)` / `ripgrep was found only by name on PATH` | [工具错误](#refusing-after-a-symlink-changed) |

376| `The search failed, so this is not a "no matches" result: matches may exist` | [工具错误](#the-search-failed) |

371| `task output swap refused (tasks dir moved or linked)` | [工具错误](#task-output-swap-refused) |377| `task output swap refused (tasks dir moved or linked)` | [工具错误](#task-output-swap-refused) |

372| `Command killed: its output file was replaced or could no longer be verified` | [工具错误](#task-output-swap-refused) |378| `Command killed: its output file was replaced or could no longer be verified` | [工具错误](#task-output-swap-refused) |

373| `Disk full: this computer's volume holding <dir> (Claude Code's temporary directory) has <n> MB free` / `Nearly out of inodes: this computer's volume holding <dir>` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |379| `Disk full: this computer's volume holding <dir> (Claude Code's temporary directory) has <n> MB free` / `Nearly out of inodes: this computer's volume holding <dir>` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |


377| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |383| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [工具错误](#disk-quota-or-temp-filesystem-is-full) |

378| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [工具错误](#file-is-not-valid-utf-8) |384| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [工具错误](#file-is-not-valid-utf-8) |

379| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [工具错误](#git-is-not-installed-on-this-mac) |385| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [工具错误](#git-is-not-installed-on-this-mac) |

386| `Refusing to apply edits to <path>: a hook is configured for file edits in this session` | [工具错误](#a-hook-is-configured-for-file-edits) |

380| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |387| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |

381| `the source file has the replacement character U+FFFD` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |388| `the source file has the replacement character U+FFFD` | [工具错误](#the-source-file-is-not-valid-utf-8-text) |

382| `Not published: that file is on a network share` | [工具错误](#not-published-that-file-is-on-a-network-share) |389| `Not published: that file is on a network share` | [工具错误](#not-published-that-file-is-on-a-network-share) |


387| `The safety check for domain ... is rate-limited` | [工具错误](#webfetch-domain-safety-check-failed) |394| `The safety check for domain ... is rate-limited` | [工具错误](#webfetch-domain-safety-check-failed) |

388| `The safety check for domain ... is temporarily rate-limited` | [工具错误](#webfetch-domain-safety-check-failed) |395| `The safety check for domain ... is temporarily rate-limited` | [工具错误](#webfetch-domain-safety-check-failed) |

389| `Unable to verify if domain ... is safe to fetch` | [工具错误](#webfetch-domain-safety-check-failed) |396| `Unable to verify if domain ... is safe to fetch` | [工具错误](#webfetch-domain-safety-check-failed) |

397| `MCP tool "<tool>" on server "<server>" gave no answer that could be read` / `answered without its text` | [如何读取 MCP 工具 hook 的结果](https://code.claude.com/docs/zh-CN/hooks.md#how-the-tools-result-is-read) |

390| `Can't open MCP settings while no terminal is attached to this background session` | [后台会话错误](#commands-refused-in-a-background-session) |398| `Can't open MCP settings while no terminal is attached to this background session` | [后台会话错误](#commands-refused-in-a-background-session) |

391| `Can't open MCP settings in a background session` | [后台会话错误](#commands-refused-in-a-background-session) |399| `Can't open MCP settings in a background session` | [后台会话错误](#commands-refused-in-a-background-session) |

392| `blocked because the path is spelled in a form that cannot be safely resolved` | [后台会话错误](#write-or-command-blocked-because-the-path-cannot-be-safely-resolved) |400| `blocked because the path is spelled in a form that cannot be safely resolved` | [后台会话错误](#write-or-command-blocked-because-the-path-cannot-be-safely-resolved) |


397| `Can't open — this session is running in another terminal` | [后台会话错误](#this-session-is-running-in-another-terminal) |405| `Can't open — this session is running in another terminal` | [后台会话错误](#this-session-is-running-in-another-terminal) |

398| `This conversation is already open in another running Claude session` | [后台会话错误](#this-session-is-running-in-another-terminal) |406| `This conversation is already open in another running Claude session` | [后台会话错误](#this-session-is-running-in-another-terminal) |

399| `This session's saved conversation is no longer on disk` | [后台会话错误](#this-sessions-saved-conversation-is-no-longer-on-disk) |407| `This session's saved conversation is no longer on disk` | [后台会话错误](#this-sessions-saved-conversation-is-no-longer-on-disk) |

408| `This forked session could not be started. Fork the conversation again to retry.` | [后台会话错误](#this-forked-session-could-not-be-started) |

400| `Bypass permissions was requested at launch and ignored` | [后台会话中忽略了 Bypass permissions](https://code.claude.com/docs/zh-CN/permission-modes.md#bypass-permissions-ignored-in-a-background-session) |409| `Bypass permissions was requested at launch and ignored` | [后台会话中忽略了 Bypass permissions](https://code.claude.com/docs/zh-CN/permission-modes.md#bypass-permissions-ignored-in-a-background-session) |

401| `kept <id> — its worktree is still at <path>` | 如果消息的下一行提到未推送的提交,请参阅 [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere),否则请参阅 [删除会话会移除哪些内容](https://code.claude.com/docs/zh-CN/agent-view.md#what-deleting-a-session-removes) |410| `kept <id> — its worktree is still at <path>` | 如果消息的下一行提到未推送的提交,请参阅 [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere),否则请参阅 [删除会话会移除哪些内容](https://code.claude.com/docs/zh-CN/agent-view.md#what-deleting-a-session-removes) |

402| `kept <id> — <n> unpushed commits on <branch>` | [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere) |411| `kept <id> — <n> unpushed commits on <branch>` | [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere) |


548| [`CLAUDE_CODE_MAX_RETRIES`](https://code.claude.com/docs/zh-CN/env-vars) | 10 | 重试尝试次数。从 v2.1.186 开始上限为 15;从 v2.1.199 开始 `CLAUDE_CODE_RETRY_WATCHDOG` 提高默认值并移除上限。降低它以在脚本中更快地显示故障。 |557| [`CLAUDE_CODE_MAX_RETRIES`](https://code.claude.com/docs/zh-CN/env-vars) | 10 | 重试尝试次数。从 v2.1.186 开始上限为 15;从 v2.1.199 开始 `CLAUDE_CODE_RETRY_WATCHDOG` 提高默认值并移除上限。降低它以在脚本中更快地显示故障。 |

549| [`CLAUDE_CODE_RETRY_WATCHDOG`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 在 CI 作业等无人值守会话中设置为 `1`,以无限期重试 `429` 和 `529` 容量错误,而不是在 `CLAUDE_CODE_MAX_RETRIES` 尝试后失败。当标准速度请求获得报告支出限制或耗尽使用额度的 `429` 时,Claude Code 立即失败,即使来自 [gateway spend cap](#spend-limit-reached) 的也是如此,该上限按计划重置。在 v2.1.239 之前,看门狗无限期重试这些。对于快速模式请求,请参阅 [Handle rate limits](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)。在 v2.1.199 或更高版本上,它还为其他瞬时错误(例如服务器错误、超时和断开连接)提高默认重试计数至 300,大约三小时的退避,如果您明确设置该变量,则移除 `CLAUDE_CODE_MAX_RETRIES` 的 15 上限。 |558| [`CLAUDE_CODE_RETRY_WATCHDOG`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 在 CI 作业等无人值守会话中设置为 `1`,以无限期重试 `429` 和 `529` 容量错误,而不是在 `CLAUDE_CODE_MAX_RETRIES` 尝试后失败。当标准速度请求获得报告支出限制或耗尽使用额度的 `429` 时,Claude Code 立即失败,即使来自 [gateway spend cap](#spend-limit-reached) 的也是如此,该上限按计划重置。在 v2.1.239 之前,看门狗无限期重试这些。对于快速模式请求,请参阅 [Handle rate limits](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)。在 v2.1.199 或更高版本上,它还为其他瞬时错误(例如服务器错误、超时和断开连接)提高默认重试计数至 300,大约三小时的退避,如果您明确设置该变量,则移除 `CLAUDE_CODE_MAX_RETRIES` 的 15 上限。 |

550| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,每个 API 请求在等待 `429` 和 `529` 错误上所花费的最长时间(毫秒)。未设置时,等待时间没有限制。需要 Claude Code v2.1.295 或更高版本。 |559| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,每个 API 请求在等待 `429` 和 `529` 错误上所花费的最长时间(毫秒)。未设置时,等待时间没有限制。需要 Claude Code v2.1.295 或更高版本。 |

560| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS` | 无上限 | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 后,单个请求等待您套餐的[用量限制](#youve-hit-your-session-limit)(例如会话限制或每周限制)重置的最长时间(毫秒)。当重置时间晚于此上限时,请求会立即失败,除非使用额度仍有余量或 API 无法检查使用额度。在这些情况下,请求会被重试,如果在成功之前超过该上限,则请求失败。需要 Claude Code v2.1.301 或更高版本。 |

551| [`CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 后,当请求等待[用量限制](#youve-hit-your-session-limit)重置时,检查该限制是否已提前解除的最短间隔(毫秒)。当检查发现限制已解除时,请求会立即发出。请提供 `60000` 到 `10800000` 之间的纯数字。未设置或超出该范围时,不进行检查。关于 Claude Code 何时跳过这些检查,请参阅[环境变量参考](https://code.claude.com/docs/zh-CN/env-vars.md)。需要 Claude Code v2.1.305 或更高版本。 |561| [`CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 后,当请求等待[用量限制](#youve-hit-your-session-limit)重置时,检查该限制是否已提前解除的最短间隔(毫秒)。当检查发现限制已解除时,请求会立即发出。请提供 `60000` 到 `10800000` 之间的纯数字。未设置或超出该范围时,不进行检查。关于 Claude Code 何时跳过这些检查,请参阅[环境变量参考](https://code.claude.com/docs/zh-CN/env-vars.md)。需要 Claude Code v2.1.305 或更高版本。 |

552| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 500 | 当 API 以 `529` 过载错误拒绝请求时,该请求各次重试之间退避的起始延迟(毫秒)。当 API 容量已满时,可将其提高(最高 32000),以便在更长的时间窗口内分散重试。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1`,或被拒绝的请求是在[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)下发送时,此变量无效。需要 Claude Code v2.1.292 或更高版本。 |562| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 500 | 当 API 以 `529` 过载错误拒绝请求时,该请求各次重试之间退避的起始延迟(毫秒)。当 API 容量已满时,可将其提高(最高 32000),以便在更长的时间窗口内分散重试。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1`,或被拒绝的请求是在[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)下发送时,此变量无效。需要 Claude Code v2.1.292 或更高版本。 |

553| [`CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 32000 | 当 API 以 `529` 过载错误拒绝请求时,该请求各次重试之间退避的上限(毫秒)。当 API 容量已满时,可将其提高(最高 64000),使后续重试之间的间隔持续拉大。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1`,或被拒绝的请求是在[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)下发送时,此变量无效。需要 Claude Code v2.1.296 或更高版本。 |563| [`CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 32000 | 当 API 以 `529` 过载错误拒绝请求时,该请求各次重试之间退避的上限(毫秒)。当 API 容量已满时,可将其提高(最高 64000),使后续重试之间的间隔持续拉大。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1`,或被拒绝的请求是在[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)下发送时,此变量无效。需要 Claude Code v2.1.296 或更高版本。 |


1436 1446 

1437这与 [OAuth 令牌已撤销或已过期](#oauth-token-revoked-or-expired)并非同一状态。那些消息报告的是 API 返回的拒绝。而 `Login expired` 是 Claude Code 针对已续期失败的登录自行生成的,因此它不会发送任何请求。当续期失败是因为账户本身被暂停而不是登录过时,Claude Code 会改为显示[您的账户已被暂停](#your-account-is-on-hold)。1447这与 [OAuth 令牌已撤销或已过期](#oauth-token-revoked-or-expired)并非同一状态。那些消息报告的是 API 返回的拒绝。而 `Login expired` 是 Claude Code 针对已续期失败的登录自行生成的,因此它不会发送任何请求。当续期失败是因为账户本身被暂停而不是登录过时,Claude Code 会改为显示[您的账户已被暂停](#your-account-is-on-hold)。

1438 1448 

1439使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用已保存的登录,永远不会看到此消息。

1440 

1441您可以在请求失败之前检查是否处于此状态:[`/status`](https://code.claude.com/docs/zh-CN/commands) 会显示一个 `Login` 行,内容为 `Expired — log in again`,以及它为该过期登录保存的组织和电子邮件。只有当已保存的登录是您当前生效的凭据且无法再刷新时,才会显示该行。以其他方式进行身份验证的会话不会显示该行,即使仍保存着已过期的登录。在 v2.1.210 之前,`/status` 在此状态下不会提供任何曾存在登录的迹象,因为凭据已被清除,没有可报告的内容。1449您可以在请求失败之前检查是否处于此状态:[`/status`](https://code.claude.com/docs/zh-CN/commands) 会显示一个 `Login` 行,内容为 `Expired — log in again`,以及它为该过期登录保存的组织和电子邮件。只有当已保存的登录是您当前生效的凭据且无法再刷新时,才会显示该行。以其他方式进行身份验证的会话不会显示该行,即使仍保存着已过期的登录。在 v2.1.210 之前,`/status` 在此状态下不会提供任何曾存在登录的迹象,因为凭据已被清除,没有可报告的内容。

1442 1450 

1443**解决方法:**1451**解决方法:**


1461Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh. This is usually transient; retry in a minute, and if it persists close other Claude Code processes or sign in again1469Failed to refresh OAuth token: another Claude Code process is refreshing it or exited mid-refresh. This is usually transient; retry in a minute, and if it persists close other Claude Code processes or sign in again

1462```1470```

1463 1471 

1464使用 API 密钥、[`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/env-vars) 或第三方提供商进行身份验证的会话不使用已保存的登录,永远不会看到此消息。

1465 

1466**解决方法:**1472**解决方法:**

1467 1473 

1468* 一分钟后重试。如果另一个进程先完成了刷新,此会话会使用续期后的登录。1474* 一分钟后重试。如果另一个进程先完成了刷新,此会话会使用续期后的登录。

1469* 如果消息反复出现,请关闭其他 Claude Code 窗口和进程,然后重试。1475* 如果消息反复出现,请关闭其他 Claude Code 窗口和进程,然后重试。

1470* 如果在没有其他 Claude Code 进程运行的情况下仍出现该消息,请运行 `/login`。重新登录不会等待刷新锁。1476* 如果在没有其他 Claude Code 进程运行的情况下仍出现该消息,请运行 `/login`。重新登录不会等待刷新锁。

1471 1477 

1478### Could not refresh your login: the disk that holds the Claude Code config directory is full

1479 

1480请释放存放 Claude Code 配置目录的磁盘上的空间,然后再次发送您的消息。磁盘已满时重新登录没有帮助,因为新的登录无法被保存。除非您设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),否则配置目录为您主目录中的 `~/.claude`。

1481 

1482```text wrap theme={null}

1483Could not refresh your login: the disk that holds the Claude Code config directory (~/.claude by default), or your disk quota on it, is full · Delete files you no longer need on that disk, then try again · Signing in again won't help

1484```

1485 

1486在[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)(`-p`)和 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 中,消息如下:

1487 

1488```text wrap theme={null}

1489Failed to refresh OAuth token: the disk that holds the Claude Code config directory (~/.claude by default), or your disk quota on it, is full. Delete files you no longer need on that disk and retry; signing in again won't help

1490```

1491 

1492**解决方法:**

1493 

1494* 对于脚本,请重新运行其 `claude -p` 命令

1495* 如果磁盘已显示有可用空间,磁盘配额或 inode 耗尽也会产生相同的消息。请删除您自己在该磁盘上的文件。如果消息再次出现,请删除大量小文件而不是少数几个大文件,因为无论文件大小如何,每个文件都占用一个 inode。

1496 

1472### 无法保存您的登录1497### 无法保存您的登录

1473 1498 

1474您已使用 claude.ai 登录,但 Claude Code 无法将登录保存到其凭据存储中,因此登录未完成。在 macOS 上,如果 Claude Code 在同一会话中已经读取或保存过登录钥匙串中的凭据,之后钥匙串被锁定(例如在睡眠或空闲时),就可能发生这种情况。1499您已使用 claude.ai 登录,但 Claude Code 无法将登录保存到其凭据存储中,因此登录未完成。在 macOS 上,如果 Claude Code 在同一会话中已经读取或保存过登录钥匙串中的凭据,之后钥匙串被锁定(例如在睡眠或空闲时),就可能发生这种情况。


2442 2467 

2443### 上下文超过 token 限制2468### 上下文超过 token 限制

2444 2469 

2445当对话超过模型的上下文窗口时,`/context` 在其输出顶部显示此警告。在您释放空间之前,请求会失败并显示 [`Prompt is too long`](#prompt-is-too-long)。交互式会话将该错误显示为 `Context limit reached` 行。2470当对话增长到超出模型的上下文窗口时,`/context` 会在其输出顶部显示以下警告:

2446 2471 

2447```text theme={null}2472```text theme={null}

2448Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.2473Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.

2449```2474```

2450 2475 

2476出现 `Context exceeds` 警告后,只要[自动压缩](https://code.claude.com/docs/zh-CN/settings-reference.md#autocompactenabled)处于开启状态(这是默认设置),您就无需运行这两个命令中的任何一个:

2477 

2478* **自动压缩开启**:发送您的下一条消息。如果仍然因 [`Prompt is too long`](#prompt-is-too-long) 失败,请参阅该条目。

2479* **自动压缩关闭**:在会话中,如果警告中提及 `/compact` 则运行它,或运行 `/clear` 重新开始。在您运行其中之一之前,消息会因 `Context limit reached` 失败,在 `-p` 输出中则为 `Prompt is too long`。

2480 

2451当您超过的限制是压缩窗口(如 1M 上下文模型上的 200K 边界)时,警告的读取方式不同。压缩窗口可以位于模型的上下文窗口下方,因此超过它的请求仍然可以成功。2481当您超过的限制是压缩窗口(如 1M 上下文模型上的 200K 边界)时,警告的读取方式不同。压缩窗口可以位于模型的上下文窗口下方,因此超过它的请求仍然可以成功。

2452 2482 

2453```text theme={null}2483```text theme={null}


2458 2488 

2459**要做什么:**2489**要做什么:**

2460 2490 

2461* 在多轮对话中,运行 `/compact` 以总结较早的轮次并释放空间。要重新开始,请运行 `/clear`2491* **出现压缩窗口警告后**:在多轮对话中,运行 `/compact` 总结较早的轮次并释放空间。如需重新开始,请运行 `/clear`。

2462* 有关减少使用的更多方法,请参阅 [Prompt is too long](#prompt-is-too-long)2492* 有关减少使用的更多方法,请参阅 [Prompt is too long](#prompt-is-too-long)

2463 2493 

2464在 v2.1.216 之前,`/context` 显示超过 100% 的使用情况,没有警告行解释这意味着什么或如何恢复。2494在 v2.1.216 之前,`/context` 显示超过 100% 的使用情况,没有警告行解释这意味着什么或如何恢复。


3302 3332 

3303### Configuration error in \~/.claude.json3333### Configuration error in \~/.claude.json

3304 3334 

3305Claude Code 无法解析 `~/.claude.json`,该文件保存您的账户详细信息、MCP 服务器和每个项目的状态。您的文件未被更改。在您修复该文件之前,每次[非交互式](https://code.claude.com/docs/zh-CN/headless.md)启动(例如 `claude -p`)都会以退出码 1 退出。3335Claude Code 无法解析 `~/.claude.json`,该文件保存您的账户详情、MCP 服务器和每个项目的状态。[非交互式](https://code.claude.com/docs/zh-CN/headless.md)启动(例如 `claude -p`)会以退出码 1 退出。

3306 3336 

3307当 Claude Code 找到[备份](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically)时,输出会指出该备份,并打印一行用于将其复制回来的 `cp` 命令:3337当 Claude Code 找到[备份](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically)时,输出会指出该备份,并打印一行用于将其复制回来的 `cp` 命令:

3308 3338 


3317 3347 

3318**解决方法:**3348**解决方法:**

3319 3349 

3320* **输出中有 `cp` 行**:在终端中运行该行。在 Windows 上,请在 PowerShell 中运行。它会用备份(`~/.claude.json` 的较早版本)替换损坏的文件。3350* **输出中有 `cp` 行**:在终端中运行该行。在 Windows 上,请在 PowerShell 中运行。

3321* **输出中没有 `cp` 行,或运行后错误再次出现**:修复 `~/.claude.json` 中的 JSON;如果 [`~/.claude/backups/`](https://code.claude.com/docs/zh-CN/claude-directory#cleaned-up-automatically) 中有另一个 `.claude.json.backup.<timestamp>` 文件,可将其复制覆盖该文件;或者将该文件重命名。当 `~/.claude.json` 处没有文件时,Claude Code 会以默认设置启动,该文件中保存的内容都将不存在。3351* **输出中没有 `cp` 行,或运行后错误再次出现**:如果 `~/.claude.json` 中仍有您的配置,请修复其 JSON。如果无法修复,若 [`~/.claude/backups/`](https://code.claude.com/docs/zh-CN/claude-directory#cleaned-up-automatically) 中有其他 `.claude.json.backup.<timestamp>` 文件,请将其复制覆盖该文件,或将该文件重命名。当 `~/.claude.json` 不存在时,Claude Code 会以默认设置启动,原文件中保存的内容全部不会保留。

3322 3352* **`~/.claude.json` 中已没有您的配置**:在 [`~/.claude/backups/`](https://code.claude.com/docs/zh-CN/claude-directory#cleaned-up-automatically) 或您的主目录中,找到仍包含您配置的 `.claude.json.corrupted.<timestamp>` 文件。修复其 JSON,然后将其复制覆盖 `~/.claude.json`。如果找不到或无法修复,请对包含您配置的 `.claude.json.backup.<timestamp>` 文件尝试相同的步骤。如果都没有,请重命名 `~/.claude.json`,并使用 [`claude mcp add`](https://code.claude.com/docs/zh-CN/mcp#installing-mcp-servers) 重新添加您的 MCP 服务器。

3323在 v2.1.318 之前,非交互式启动打印此错误后,`~/.claude.json` 中会只剩下默认值,因此下一次启动将在没有您配置的情况下运行。

3324 3353 

3325### Claude configuration file was empty and no backup holds anything3354### Claude configuration file was empty and no backup holds anything

3326 3355 


3381 3410 

3382在 v2.1.309 之前,当卷已满或配额已用尽时,Claude Code 只打印操作系统的错误文本。例如 `ENOSPC: no space left on device, mkdir '/tmp/claude-501'`,同样适用上述步骤。3411在 v2.1.309 之前,当卷已满或配额已用尽时,Claude Code 只打印操作系统的错误文本。例如 `ENOSPC: no space left on device, mkdir '/tmp/claude-501'`,同样适用上述步骤。

3383 3412 

3413### Claude Code could not save because the disk is full

3414 

3415在 [`claude -p`](https://code.claude.com/docs/zh-CN/headless) 运行后,stderr 上出现这一行表示磁盘已满或您的磁盘配额已用尽,因此 Claude Code 无法保存本次运行的全部内容:

3416 

3417```text wrap theme={null}

3418Error: Claude Code could not save all of this session's transcript under /Users/you/.claude because the disk is full (ENOSPC). If you resume this session, part of the conversation may be missing. Free up space on that disk before the next run.

3419```

3420 

3421使用文本或 `json` 输出时,运行以退出码 1 退出,且答案已经打印出来。使用 `stream-json` 输出时,运行保持其通常的退出码,答案仍会送达。

3422 

3423**解决方法:**

3424 

3425* **`the disk is full (ENOSPC)`**:在下一次运行之前,释放消息中路径所在磁盘的空间

3426* **`your disk quota is used up (EDQUOT)`**:在下一次运行之前,释放空间或申请更大的配额

3427 

3384### 无法将目录解析为真实位置3428### 无法将目录解析为真实位置

3385 3429 

3386您对工作目录的某个子目录运行了 `/add-dir`,而 Claude Code 无法将该目录解析为其真实位置。3430您对工作目录的某个子目录运行了 `/add-dir`,而 Claude Code 无法将该目录解析为其真实位置。


3448* **`Error: Workspace not trusted. <folder> is your home directory`**:由于主目录的信任从不保存,先在那里运行 `claude` 也无济于事。请改为在项目目录中运行 `claude ultrareview`(先在那里运行一次 `claude` 以接受信任对话框),或追加 `--trust-workspace`。3492* **`Error: Workspace not trusted. <folder> is your home directory`**:由于主目录的信任从不保存,先在那里运行 `claude` 也无济于事。请改为在项目目录中运行 `claude ultrareview`(先在那里运行一次 `claude` 以接受信任对话框),或追加 `--trust-workspace`。

3449* **`No answer in time.` 后跟 `Error: Workspace not trusted`**:`Trust <folder>? [y/N]` 问题在 5 分钟内未得到回答。再次运行 `claude ultrareview` 并回答该问题。3493* **`No answer in time.` 后跟 `Error: Workspace not trusted`**:`Trust <folder>? [y/N]` 问题在 5 分钟内未得到回答。再次运行 `claude ultrareview` 并回答该问题。

3450* **`Ultrareview did not start: <folder> is not trusted`**:您在 `Trust <folder>? [y/N]` 问题处拒绝了,例如回答 `n` 或按 Enter。若要开始审查,请再次运行 `claude ultrareview` 并回答 `y`。3494* **`Ultrareview did not start: <folder> is not trusted`**:您在 `Trust <folder>? [y/N]` 问题处拒绝了,例如回答 `n` 或按 Enter。若要开始审查,请再次运行 `claude ultrareview` 并回答 `y`。

3451* **``Ultrareview did not start: `--trust-workspace` takes no value``**:`--trust-workspace` 后面跟着的不是标志,例如 PR 编号或 `false`。如果您不信任该文件夹,请不要使用该标志。要在本次运行中信任它,请将 PR 编号或基础分支放在该标志之前:`claude ultrareview 1234 --trust-workspace`。3495* **``Ultrareview did not start: `--trust-workspace` takes no value``**:`--trust-workspace` 后面跟着的不是标志,例如 PR 编号或 `false`。如果您不信任该文件夹,请省略该标志。要在本次运行中信任它,请将 PR 编号或基准分支放在该标志之前:`claude ultrareview 1234 --trust-workspace`。

3452 3496 

3453在 v2.1.309 之前,`claude ultrareview` 不接受 `--trust-workspace`。3497在 v2.1.309 之前,`claude ultrareview` 不接受 `--trust-workspace`。

3454 3498 

3499### Remote Control did not start because a question got no answer

3500 

3501此消息表示 [`claude remote-control`](https://code.claude.com/docs/zh-CN/remote-control) 提出了消息中引用的首次运行问题,但没有得到回答:

3502 

3503```text theme={null}

3504Remote Control did not start: "Enable Remote Control?" got no answer. Run `claude remote-control` at a terminal and answer y once; it won't ask again.

3505Remote Control did not start: "Choose [1/2] (default: 1):" got no answer. You can run `claude remote-control` and choose, or pass --spawn=same-dir or --spawn=worktree.

3506```

3507 

3508**解决方法:**

3509 

3510* **`Enable Remote Control?`**:在脚本或服务中,标准输入会在任何人能够回答之前结束。请以运行脚本或服务的用户身份,在终端中运行一次 `claude remote-control` 并回答 `y`。

3511* **`Choose [1/2] (default: 1):`**:重新运行 `claude remote-control` 并[选择生成模式](https://code.claude.com/docs/zh-CN/remote-control.md#set-the-default-spawn-mode-for-a-project),或传入 [`--spawn=same-dir` 或 `--spawn=worktree`](https://code.claude.com/docs/zh-CN/remote-control#start-a-remote-control-session) 以跳过该问题

3512 

3455### 不会传递到 Remote Control 启动的会话3513### 不会传递到 Remote Control 启动的会话

3456 3514 

3457您在 `remote-control` 动词之前使用了一个全局 `claude` 标志来启动 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md),而该标志会限制或配置 Remote Control 启动的会话,例如 `--settings`、`--setting-sources`、`--permission-mode`、`--disallowed-tools` 或 `--mcp-config`。放在动词之前的标志永远不会传递到这些会话。Claude Code 会拒绝启动,并指出该标志:3515您在 `remote-control` 动词之前使用了一个全局 `claude` 标志来启动 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md),而该标志会限制或配置 Remote Control 启动的会话,例如 `--settings`、`--setting-sources`、`--permission-mode`、`--disallowed-tools` 或 `--mcp-config`。放在动词之前的标志永远不会传递到这些会话。Claude Code 会拒绝启动,并指出该标志:


3741 3799 

3742以下相关消息会在命令运行之前就出现:3800以下相关消息会在命令运行之前就出现:

3743 3801 

3744* `Shell command permission check failed for pattern "..."`:该命令的权限检查未允许它。[注入命令的权限检查](https://code.claude.com/docs/zh-CN/skills.md#permission-checks-on-injected-commands)介绍了在每种权限模式下哪些结果会导致中止,以及如何使用 `allowed-tools` 预先批准命令3802* `Shell command permission check failed for pattern "..."`:该命令的权限检查未允许它运行。[注入命令的权限检查](https://code.claude.com/docs/zh-CN/skills.md#permission-checks-on-injected-commands)介绍了在各种权限模式下哪些结果会导致中止,以及如何使用 `allowed-tools` 预先批准命令

3745* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``:该 skill 的 frontmatter 要求使用 bash,但机器上没有 bash。请安装 Git for Windows,或将 frontmatter 改为 `shell: powershell`。请参阅[注入命令的运行方式](https://code.claude.com/docs/zh-CN/skills.md#how-injected-commands-run)3803* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``:该 skill 的 frontmatter 要求 bash,而机器上没有 bash。请安装 Git for Windows,或将 frontmatter 改为 `shell: powershell`。请参阅[注入命令的运行方式](https://code.claude.com/docs/zh-CN/skills.md#how-injected-commands-run)

3746 3804 

3747**解决方法:**3805**解决方法:**

3748 3806 


3895 3953 

3896* **您没有传入基础分支**:Claude Code 与仓库的默认分支进行了比较,并建议您显式传入基础分支,如上例所示3954* **您没有传入基础分支**:Claude Code 与仓库的默认分支进行了比较,并建议您显式传入基础分支,如上例所示

3897* **您传入的基础分支已存在于您的克隆中**:提示为 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3955* **您传入的基础分支已存在于您的克隆中**:提示为 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3898* **您传入的基础分支不在克隆中**:Claude Code 在比较之前从 origin 获取了该分支。提示内容为 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``;当 Claude Code 无法判断您的克隆是否为浅克隆时,它会改为建议运行 `git fetch --unshallow origin`。在 v2.1.221 之前,对于每个获取的基础分支,提示都会建议运行 `git fetch --unshallow origin`,而在完整克隆上该命令会失败并显示 `fatal: --unshallow on a complete repository does not make sense`。3956* **您传入的基础分支不在您的克隆中**:Claude Code 在比较之前从 origin 获取了该分支。提示为 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``;当 Claude Code 无法判断您的克隆是否为浅克隆时,会改为建议 `git fetch --unshallow origin`。在 v2.1.221 之前,对于每个获取的基础分支,提示都会建议 `git fetch --unshallow origin`,而在完整克隆上,该命令会失败并显示 `fatal: --unshallow on a complete repository does not make sense`。

3899 3957 

3900**解决方法:**3958**解决方法:**

3901 3959 


4457* 如果消息以 `EACCES` 结尾,请恢复您对通往该路径所指文件或文件夹的每个目录的执行权限。检查该路径上方的各个目录,然后跟随遇到的每个符号链接,并检查通往其指向位置的各个目录。对于任何其他错误代码,请在[无法检查路径的原因和处理步骤](#path-could-not-be-checked)中查找。4515* 如果消息以 `EACCES` 结尾,请恢复您对通往该路径所指文件或文件夹的每个目录的执行权限。检查该路径上方的各个目录,然后跟随遇到的每个符号链接,并检查通往其指向位置的各个目录。对于任何其他错误代码,请在[无法检查路径的原因和处理步骤](#path-could-not-be-checked)中查找。

4458* 如果要与同一市场中的其他插件共享文件,请按照[符号链接规则](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks),在插件目录内使用符号链接链接这些文件4516* 如果要与同一市场中的其他插件共享文件,请按照[符号链接规则](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks),在插件目录内使用符号链接链接这些文件

4459 4517 

4518### 未读取服务器文件路径

4519 

4520`path not read` 消息表示 Claude Code 由于文件路径的原因,没有读取插件所指定的 MCP 或 LSP 服务器文件。插件的其余部分会加载,但不包含该文件定义的服务器。

4521 

4522即使路径仍在插件之内,`..` 部分也会被计入,如下例所示:

4523 

4524```text theme={null}

4525mcp-servers path not read: ./sub/../x.json is absolute or has a ".." part

4526```

4527 

4528**解决方法:**

4529 

4530* 如果您只是安装了该插件而不负责维护它,请将该消息报告给插件作者

4531* 如果您是该插件的维护者,请将服务器文件保留在插件目录内。在清单或市场条目中使用以 `./` 开头且不含 `..` 的路径指定它,例如 `./servers/x.json`

4532* 如果要在同一市场的多个插件之间共享一个服务器文件,请按照[符号链接规则](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks),使用符号链接将该文件链接到每个插件中

4533 

4460### Plugin not loaded: its manifest was not read4534### Plugin not loaded: its manifest was not read

4461 4535 

4462Claude Code 无法确认某个市场插件位于 `.claude-plugin/plugin.json` 的[清单](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md)是否在插件之内,因此不会从该插件加载任何内容。对于[本地市场](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)中的插件,Claude Code 同样无法确认该清单位于该市场之内。该消息出现在 `/plugin` 的 **Errors** 选项卡中,消息末尾的原因说明了 Claude Code 发现的情况。4536Claude Code 无法确认某个市场插件位于 `.claude-plugin/plugin.json` 的[清单](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md)是否在插件之内,因此不会从该插件加载任何内容。对于[本地市场](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)中的插件,Claude Code 同样无法确认该清单位于该市场之内。该消息出现在 `/plugin` 的 **Errors** 选项卡中,消息末尾的原因说明了 Claude Code 发现的情况。


5065 5139 

5066在 v2.1.280 之前,不会出现 `where it leads on disk could not be determined` 拒绝。5140在 v2.1.280 之前,不会出现 `where it leads on disk could not be determined` 拒绝。

5067 5141 

5142### The search failed, so this is not a "no matches" result

5143 

5144Claude 运行的 [Grep](https://code.claude.com/docs/zh-CN/tools-reference.md#grep-tool-behavior) 或 [Glob](https://code.claude.com/docs/zh-CN/tools-reference.md#glob-tool-behavior) 搜索在返回任何结果之前就失败了,因此无法确定是否存在匹配项。Claude 收到的代替结果的消息以如下内容开头:

5145 

5146```text wrap theme={null}

5147The search failed, so this is not a "no matches" result: matches may exist. What happened to the search program (ripgrep) is not known, and no results were read. Run the search once more. If it fails again, tell the user that searches are failing.

5148```

5149 

5150**处理方法:**

5151 

5152* **首次出现时**:无需任何操作。该消息会要求 Claude 先再次搜索。

5153* **如果 Claude 表示搜索持续失败**:捕获 ripgrep 的错误以用于错误报告:

5154 1. 在 shell 中,使用与搜索失败的会话相同的标志启动一个会话,并加上 [`--debug-file claude-debug.log`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags)

5155 2. 向 Claude 发送导致搜索失败的请求

5156 3. 如果搜索再次失败,在 `claude-debug.log` 中找到包含 `rg error (signal=` 的行

5157 4. 在[报告问题](#report-an-error)时附上该行

5158 

5068### Task output swap refused5159### Task output swap refused

5069 5160 

5070Claude Code 会将每个 Bash 命令的输出保存到其临时目录下的一个文件中。每次打开这些文件之一时,它都会检查该路径是否仍然指向它创建的文件,没有符号链接、额外的硬链接或被移动的目录将其重定向。此消息表示该检查失败,因此 Claude Code 拒绝了该操作,而不是通过该路径写入或读取输出。该消息出现在 Bash 工具结果中:5161Claude Code 会将每个 Bash 命令的输出保存到其临时目录下的一个文件中。每次打开这些文件之一时,它都会检查该路径是否仍然指向它创建的文件,没有符号链接、额外的硬链接或被移动的目录将其重定向。此消息表示该检查失败,因此 Claude Code 拒绝了该操作,而不是通过该路径写入或读取输出。该消息出现在 Bash 工具结果中:


5153 5244 

5154在 v2.1.296 之前,Edit 和 NotebookEdit 会应用此类编辑,并将它们无法解码的每个字节保存为 `U+FFFD`。在这些版本上,请更新 Claude Code。5245在 v2.1.296 之前,Edit 和 NotebookEdit 会应用此类编辑,并将它们无法解码的每个字节保存为 `U+FFFD`。在这些版本上,请更新 Claude Code。

5155 5246 

5247### Refusing to apply edits: a hook is configured for file edits in this session

5248 

5249Claude 尝试通过[一步更新](https://code.claude.com/docs/zh-CN/artifacts.md#turn-off-one-step-artifact-updates)发布 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md),即在发布中包含对该 Artifact 文件的一处小改动,但 Claude Code 拒绝了。没有发布任何内容,文件也保持不变。该消息出现在 Artifact 工具结果中:

5250 

5251```text wrap theme={null}

5252Refusing to apply edits to <path>: a hook is configured for file edits in this session, so a publish can't apply edits here. Edit the file, then publish it without edits. Nothing was published.

5253```

5254 

5255当您的会话中存在针对 `Edit` 或 `Write` 的 [`PreToolUse` hook](https://code.claude.com/docs/zh-CN/hooks#pretooluse) 或 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 时,Claude Code 不允许一步更新。

5256 

5257**处理方法:**

5258 

5259* 如果 Claude 随后编辑了该文件并将其发布,则无需任何操作

5260* 如果 Claude 在该消息处停止,请让 Claude 编辑该文件并发布

5261* 如果该消息反复出现,请退出并重新启动 Claude Code

5262* 如果重新启动后该消息仍然出现,请[关闭一步更新](https://code.claude.com/docs/zh-CN/artifacts.md#turn-off-one-step-artifact-updates)

5263 

5156### The source file is not valid UTF-8 text5264### The source file is not valid UTF-8 text

5157 5265 

5158Claude 尝试从一个字节无法解码为文本、或其文本已包含替换字符 `U+FFFD` 的文件发布 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md),因此 Claude Code 在上传任何内容之前拒绝了该发布。该消息出现在 Artifact 工具结果中,并指出需要修复的第一个位置:5266Claude 尝试从一个字节无法解码为文本、或其文本已包含替换字符 `U+FFFD` 的文件发布 [Artifact](https://code.claude.com/docs/zh-CN/artifacts.md),因此 Claude Code 在上传任何内容之前拒绝了该发布。该消息出现在 Artifact 工具结果中,并指出需要修复的第一个位置:


5623 5731 

5624* 重新创建消息命名的目录,或从存在的目录分派,然后重试5732* 重新创建消息命名的目录,或从存在的目录分派,然后重试

5625 5733 

5734### This forked session could not be started

5735 

5736您从 claude.ai [分叉了一个 Remote Control 会话](https://code.claude.com/docs/zh-CN/remote-control.md#fork-a-session-from-your-browser),而 Claude Code 无法完成启动在您的机器上运行该分叉的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)。此通知出现在分叉会话的会话记录中:

5737 

5738```text theme={null}

5739This forked session could not be started. Fork the conversation again to retry.

5740```

5741 

5742您分叉的那个会话会继续运行。

5743 

5744**要做什么:**

5745 

5746* 返回您分叉的那个会话,并在该会话空闲后再次分叉

5747 

5626### 分派后台会话时工作区不受信任5748### 分派后台会话时工作区不受信任

5627 5749 

5628您在未[信任](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)的目录中启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),工作区信任对话框无法出现以询问您。Claude Code 不启动会话:5750您在未[信任](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)的目录中启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),工作区信任对话框无法出现以询问您。Claude Code 不启动会话:

fast-mode.md +40 −18

Details

12 12 

13快速模式是受支持模型的高速配置,使模型速度提高最多 2.5 倍,但每个 token 的成本更高。当您需要速度进行交互式工作(如快速迭代或实时调试)时,使用 `/fast` 将其打开,当成本比延迟更重要时,将其关闭。13快速模式是受支持模型的高速配置,使模型速度提高最多 2.5 倍,但每个 token 的成本更高。当您需要速度进行交互式工作(如快速迭代或实时调试)时,使用 `/fast` 将其打开,当成本比延迟更重要时,将其关闭。

14 14 

15快速模式使用相同的模型,但采用不同的 API 配置,优先考虑速度而不是成本效率,因此质量和功能保持不变。快速模式在 Fable 5.2、Opus 5.5、Opus 5 和 Opus 4.8 上受支持。它在 Sonnet、Haiku 或其他模型上不可用。15快速模式使用相同的模型,但采用不同的 API 配置,优先考虑速度而不是成本效率,因此质量和功能保持不变。在 Anthropic API 上,快速模式在 Fable 5.2、Opus 5.5、Opus 5 和 Opus 4.8 上受支持,但在 Sonnet、Haiku 或其他模型上不受支持。有关 Google Cloud 的 Agent Platform 上的模型,请参阅[在 Agent Platform 上使用快速模式](#use-fast-mode-on-agent-platform)。

16 16 

17> [!WARNING]17> [!WARNING]

18>18>


25 25 

26需要了解的内容:26需要了解的内容:

27 27 

28* 使用 `/fast` 在 Claude Code CLI 中切换快速模式。[VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)在选定的模型支持快速模式时提供**切换快速模式**命令。Claude Code 将该切换保存到您的 [`fastMode` 设置](#toggle-fast-mode)。28* 使用 `/fast` 在 Claude Code CLI 中切换快速模式。[VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)在选定的模型支持快速模式时提供**切换快速模式**命令。在 Anthropic API 上,Claude Code 将该切换保存到您的 [`fastMode` 设置](#toggle-fast-mode)。

29* 快速模式定价(每 MTok 输入/输出)在 Fable 5.2 上为 \$16/\$80,在 Opus 5.5 上为 \$8/\$40,在 Opus 5 和 Opus 4.8 上为 \$10/\$50。29* Anthropic 的快速模式定价(每 MTok 输入/输出)在 Fable 5.2 上为 \$16/\$80,在 Opus 5.5 上为 \$8/\$40,在 Opus 5 和 Opus 4.8 上为 \$10/\$50。

30* 可供订阅套餐(Pro/Max/Ultra/Team/Enterprise)上的 Claude Code 用户和 Claude 控制台使用。Team 和 Enterprise 组织需要所有者先启用它,Console 组织需要先配置访问权限才能在 Opus 5 或 Opus 4.8 上使用它。[要求](#requirements)对这两者进行了说明。30* 可供订阅套餐(Pro/Max/Ultra/Team/Enterprise)上的 Claude Code 用户、Claude 控制台使用,并可[在满足条件时](#use-fast-mode-on-agent-platform)在 Google Cloud 的 Agent Platform 上使用。Team 和 Enterprise 组织需要所有者先启用它,Console 组织需要先配置访问权限才能在 Opus 5 或 Opus 4.8 上使用它。[要求](#requirements)对这两者进行了说明。

31* 对于订阅套餐(Pro/Max/Ultra/Team/Enterprise)上的 Claude Code 用户,快速模式仅通过使用额度提供,不包含在订阅速率限制中。31* 对于订阅套餐(Pro/Max/Ultra/Team/Enterprise)上的 Claude Code 用户,快速模式仅通过使用额度提供,不包含在订阅速率限制中。

32 32 

33## 切换快速模式33## 切换快速模式

34 34 

35在 Agent Platform 上,`/fast` 和 `fastMode` 设置的工作方式有所不同,因此请改为参阅[在 Agent Platform 上使用快速模式](#use-fast-mode-on-agent-platform)。

36 

35在 CLI 中,可以通过以下任一方式切换快速模式:37在 CLI 中,可以通过以下任一方式切换快速模式:

36 38 

37* 运行 `/fast`,按 Space 切换开启或关闭,然后按 Enter 确认39* 运行 `/fast`,按 Space 切换开启或关闭,然后按 Enter 确认

38* 在支持快速模式的模型上,在[用户设置文件](https://code.claude.com/docs/zh-CN/settings.md)中设置 `"fastMode": true`。如果您在其他任何模型上设置此项,您将继续使用该模型,且快速模式保持关闭。在 Fable 5.2 上,仅设置此项不会生效,直到您在使用 Fable 5.2 时运行 `/fast`。40* 在支持快速模式的模型上,在[用户设置文件](https://code.claude.com/docs/zh-CN/settings.md)中设置 `"fastMode": true`。如果您在其他任何模型上设置此项,您将继续使用该模型,且快速模式保持关闭。在 Fable 5.2 上,仅设置此项不会生效,直到您在使用 Fable 5.2 时运行 `/fast`。

39 41 

40默认情况下,在受支持的模型上,在交互式会话中开启的快速模式会跨会话保留。在 Fable 5.2 上,仅当您[在使用 Fable 5.2 时开启](#switch-models-while-fast-mode-is-on)快速模式,它才会保留。您可以将快速模式配置为每个会话重置。有关详细信息,请参阅[要求按会话选择启用](#require-per-session-opt-in)。42默认情况下,在 Anthropic API 上,在受支持的模型上于交互式会话中开启的快速模式会跨会话保留。在 Fable 5.2 上,仅当您[在使用 Fable 5.2 时开启](#switch-models-while-fast-mode-is-on)快速模式,它才会保留。您可以将快速模式配置为每个会话重置。有关详细信息,请参阅[要求按会话选择启用](#require-per-session-opt-in)。

41 43 

42在[云端会话](#use-fast-mode-in-cloud-sessions)之外,在使用 `-p` 标志的[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)下,`/fast` 仅在其 [`--settings`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 值中包含快速模式的会话中有效,例如 `claude -p --settings '{"fastMode": true}'`;此时切换仅适用于该会话,不会保存为您的默认设置。`-p` 形式需要 Claude Code v2.1.205 或更高版本。在非交互模式的其他情况下,该命令会报告快速模式不可用。44在[云端会话](#use-fast-mode-in-cloud-sessions)之外,在使用 `-p` 标志的[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)下,`/fast` 仅在其 [`--settings`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 值中包含快速模式的会话中有效,例如 `claude -p --settings '{"fastMode": true}'`;此时切换仅适用于该会话,不会保存为您的默认设置。`-p` 形式需要 Claude Code v2.1.205 或更高版本。在非交互模式的其他情况下,该命令会报告快速模式不可用。

43 45 


47 49 

48使用 `/fast` 启用快速模式时:50使用 `/fast` 启用快速模式时:

49 51 

50* 如果您当前的模型不支持快速模式,Claude Code 会切换到 Opus52* 在 Anthropic API 上,如果您当前的模型不支持快速模式,Claude Code 会切换到 Opus

51* 在 Fable 5.2 上使用快速模式需要 Claude Code v2.1.321 或更高版本53* 在 Fable 5.2 上使用快速模式需要 Claude Code v2.1.321 或更高版本

52* 您将看到一条确认消息:"Fast mode ON"54* 您将看到一条确认消息:"Fast mode ON"

53* 快速模式处于活动状态时,提示词旁边会出现一个小的 `↯` 图标55* 快速模式处于活动状态时,提示词旁边会出现一个小的 `↯` 图标

54* 随时再次运行 `/fast` 可检查快速模式是开启还是关闭56* 随时再次运行 `/fast` 可检查快速模式是开启还是关闭

55 57 

56在 Claude Code v2.1.280 及更高版本中,Opus 5.5 是快速模式的默认模型。在 v2.1.280 之前,从 v2.1.219 起快速模式默认使用 Opus 5。58在 Anthropic API 上,在 Claude Code v2.1.280 及更高版本中,Opus 5.5 是快速模式的默认模型。在 v2.1.280 之前,从 v2.1.219 起快速模式默认使用 Opus 5。

57 59 

58当您再次使用 `/fast` 禁用快速模式时,您仍将使用当前模型。要切换到其他模型,请使用 `/model`。60当您再次使用 `/fast` 禁用快速模式时,您仍将使用当前模型。要切换到其他模型,请使用 `/model`。

59 61 


63 65 

64* **切换离开**:当您切换到不支持快速模式的模型时,Claude Code 会关闭快速模式。这包括 Opus 4.7;在 v2.1.221 之前,切换到 Opus 4.7 后快速模式仍保持开启,API 会拒绝这些请求。66* **切换离开**:当您切换到不支持快速模式的模型时,Claude Code 会关闭快速模式。这包括 Opus 4.7;在 v2.1.221 之前,切换到 Opus 4.7 后快速模式仍保持开启,API 会拒绝这些请求。

65* **切换回来**:当您保存的偏好为开启时,切换回受支持的 Opus 模型会再次开启快速模式。如果使用[按会话选择启用](#require-per-session-opt-in),请改为运行 `/fast`。67* **切换回来**:当您保存的偏好为开启时,切换回受支持的 Opus 模型会再次开启快速模式。如果使用[按会话选择启用](#require-per-session-opt-in),请改为运行 `/fast`。

66* **切换到 Fable 5.2**:除非您在使用 Fable 5.2 时开启了快速模式,否则快速模式会关闭。要开启快速模式,请在 Fable 5.2 上运行 `/fast`。除非您设置了[按会话选择启用](#require-per-session-opt-in),否则此设置会跨会话保留,直到您将其关闭或在其他模型上开启快速模式。68* **切换到 Fable 5.2**:除非您在使用 Fable 5.2 时开启了快速模式,否则快速模式会关闭。要开启快速模式,请在 Fable 5.2 上运行 `/fast`。除非您设置了[按会话选择启用](#require-per-session-opt-in),否则在 Anthropic API 上此选择会跨会话保留,直到您关闭快速模式或在其他模型上开启快速模式。

67 69 

68每当模型切换开启或关闭快速模式时,Claude Code 都会显示 `Fast mode ON` 或 `Fast mode OFF` 确认消息,并且在快速模式开启时会出现 `↯` 图标。无论您是使用 `/model`、使用 [`/config model=<model>`](https://code.claude.com/docs/zh-CN/settings) 还是从通过 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接的设备进行切换,都是如此。70每当模型切换开启或关闭快速模式时,Claude Code 都会显示 `Fast mode ON` 或 `Fast mode OFF` 确认消息,并且在快速模式开启时会出现 `↯` 图标。无论您是使用 `/model`、使用 [`/config model=<model>`](https://code.claude.com/docs/zh-CN/settings) 还是从通过 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接的设备进行切换,都是如此。

69 71 

70在模型切换、重新连接或[可用性检查](#use-fast-mode-behind-proxies-and-llm-gateways)失败后,Claude Code 会将会话的快速模式状态重新发送到通过 Remote Control 连接的设备。

71 

72### 在云端会话中使用快速模式72### 在云端会话中使用快速模式

73 73 

74当您的账户可以使用快速模式时,快速模式可在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)中使用,无论会话是在 Anthropic 托管的基础设施上运行还是在[自托管运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments)上运行。需要会话环境中的 Claude Code 为 v2.1.271 或更高版本。74当您的账户可以使用快速模式时,快速模式可在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)中使用,无论会话是在 Anthropic 托管的基础设施上运行,还是在 Anthropic API 上的[自托管运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments)上运行。需要会话环境中的 Claude Code 为 v2.1.271 或更高版本。

75 75 

76在会话中输入 `/fast on` 以开启快速模式。它仅对该会话保持开启,不会保存为您的默认设置。[要求](#requirements)同样适用于云端会话。76在会话中输入 `/fast on` 以开启快速模式。它仅对该会话保持开启,不会保存为您的默认设置。[要求](#requirements)同样适用于云端会话。

77 77 


79 79 

80## 了解成本权衡80## 了解成本权衡

81 81 

82快速模式的每 token 定价高于标准速度:82快速模式的每 token 定价高于标准速度。以下是 Anthropic 的费率:

83 83 

84| 模型 | 输入 (MTok) | 输出 (MTok) |84| 模型 | 输入 (MTok) | 输出 (MTok) |

85| - | - | - |85| - | - | - |


129 129 

130快速模式需要以下所有条件:130快速模式需要以下所有条件:

131 131 

132* **仅限 Anthropic API 或订阅**:快速模式可通过 Anthropic 控制台 API 和使用使用额度的 Claude 订阅套餐获得。它在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用。控制台组织还必须[配置快速模式访问权限](#enable-fast-mode-for-your-organization),才能在 Opus 5 或 Opus 4.8 上使用快速模式。132* **受支持的提供商**:快速模式可通过 Anthropic 控制台 API、使用使用额度的 Claude 订阅套餐获得,也可[在满足条件时](#use-fast-mode-on-agent-platform)在 Google Cloud 的 Agent Platform 上使用。它在 Amazon Bedrock、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用,在这些平台上 `/fast` 会显示"Fast mode is not available on this provider"。控制台组织还必须[配置快速模式访问权限](#enable-fast-mode-for-your-organization),才能在 Opus 5 或 Opus 4.8 上使用快速模式。

133* **为订阅套餐启用使用额度**:在 Pro、Max、Ultra、Team 或 Enterprise 套餐上,您的账户必须[启用使用额度](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription),这允许在您的套餐包含的使用量之外进行计费。在启用之前,`/fast` 显示"Fast mode requires usage credits"。要启用它们,请按照适用于您套餐的步骤操作:133* **为订阅套餐启用使用额度**:在 Pro、Max、Ultra、Team 或 Enterprise 套餐上,您的账户必须[启用使用额度](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription),这允许在您的套餐包含的使用量之外进行计费。在启用之前,`/fast` 显示"Fast mode requires usage credits"。要启用它们,请按照适用于您套餐的步骤操作:

134 * 在 Pro、Max 和 Ultra 上,在 claude.ai 上的[**Settings > Usage**](https://claude.ai/settings/usage)的**Usage credits**部分中启用它们,或运行 `/usage-credits` 来打开该页面。134 * 在 Pro、Max 和 Ultra 上,在 claude.ai 上的[**Settings > Usage**](https://claude.ai/settings/usage)的**Usage credits**部分中启用它们,或运行 `/usage-credits` 来打开该页面。

135 * 在 Team 和 Enterprise 上,具有计费访问权限的成员在[**Organization settings > Usage**](https://claude.ai/admin-settings/usage)处为组织启用它们,没有访问权限的成员运行 `/usage-credits` 向组织的管理员发送请求。135 * 在 Team 和 Enterprise 上,具有计费访问权限的成员在[**Organization settings > Usage**](https://claude.ai/admin-settings/usage)处为组织启用它们,没有访问权限的成员运行 `/usage-credits` 向组织的管理员发送请求。


150> * **快速模式未启用**:如果您的组织尚未启用快速模式,使用 `/fast` 启用快速模式会显示"Fast mode has been disabled by your organization."。150> * **快速模式未启用**:如果您的组织尚未启用快速模式,使用 `/fast` 启用快速模式会显示"Fast mode has been disabled by your organization."。

151> * **快速模式被托管设置关闭**:如果您的组织部署[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md),设置 [`fastMode: false`](https://code.claude.com/docs/zh-CN/settings-reference#fastmode),使用 `/fast` 启用快速模式会显示相同的"Fast mode has been disabled by your organization"消息。151> * **快速模式被托管设置关闭**:如果您的组织部署[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md),设置 [`fastMode: false`](https://code.claude.com/docs/zh-CN/settings-reference#fastmode),使用 `/fast` 启用快速模式会显示相同的"Fast mode has been disabled by your organization"消息。

152> * **需要每个会话选择加入**:托管设置设置 [`fastModePerSessionOptIn: true`](#require-per-session-opt-in) 在除交互式终端会话外的任何地方都拒绝 `/fast on`,显示相同的消息。152> * **需要每个会话选择加入**:托管设置设置 [`fastModePerSessionOptIn: true`](#require-per-session-opt-in) 在除交互式终端会话外的任何地方都拒绝 `/fast on`,显示相同的消息。

153> * **快速模式模型不允许**:如果您的组织的 [`availableModels`](https://code.claude.com/docs/zh-CN/model-config#restrict-model-selection) 允许列表排除了快速模式 Opus 模型,启用它会被拒绝,显示"is not in your organization's allowed models"。在已在支持快速模式的允许模型上运行的会话中,`/fast` 改为在您当前的模型上启用快速模式,而不是切换模型。153> * **快速模式模型不允许**:如果您的组织的 [`availableModels`](https://code.claude.com/docs/zh-CN/model-config#restrict-model-selection) 允许列表排除了 `/fast` 要切换到的模型,启用它会被拒绝,显示"is not in your organization's allowed models"。在已在支持快速模式的允许模型上运行的会话中,`/fast` 改为在您当前的模型上启用快速模式,而不是切换模型。

154 154 

155### 为您的组织启用快速模式155### 为您的组织启用快速模式

156 156 


163 163 

164另一个完全禁用快速模式的选项是设置 `CLAUDE_CODE_DISABLE_FAST_MODE=1`。请参阅[环境变量](https://code.claude.com/docs/zh-CN/env-vars.md)。164另一个完全禁用快速模式的选项是设置 `CLAUDE_CODE_DISABLE_FAST_MODE=1`。请参阅[环境变量](https://code.claude.com/docs/zh-CN/env-vars.md)。

165 165 

166### 在 Agent Platform 上使用快速模式

167 

168在 [Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/google-vertex-ai.md) 上,您可以为 Fable 5.2 启用快速模式,方法是在交互式会话中使用 `/fast`,或在[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)中使用启动标志。需要 Claude Code v2.1.322 或更高版本。

169 

170快速模式要求 Fable 5.2 的[区域](https://code.claude.com/docs/zh-CN/google-vertex-ai.md#region-configuration)为 `global`、`us` 或 `eu`。在其他区域中,`/fast` 会显示 `Fast mode needs Vertex region global, us or eu`,而 `claude -p` 以标准速度运行。请在启动 Claude Code 之前在 shell 中设置区域,例如设置为 `global`:

171 

172```bash theme={null}

173export VERTEX_REGION_CLAUDE_FABLE_5_2=global

174```

175 

176然后启用快速模式:

177 

178* **在交互式会话中**:运行 `/fast`。它会将您从 Opus 模型或 Agent Platform 上其他不支持快速模式的模型切换到 Fable 5.2。快速模式不会保存为您的默认设置。

179* **在非交互模式中**:将 Fable 5.2 作为 [`--model`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 传入,并在 [`--settings`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 中传入快速模式,例如 `claude -p "Summarize this project" --model claude-fable-5-2 --settings '{"fastMode": true}'`

180 

181在 Agent Platform 上,用户、项目、本地或托管设置中的 `"fastMode": true` 不起作用。

182 

183如果 Agent Platform 拒绝快速模式,Claude Code 会回退到标准速度。此时交互式会话会显示以下终端消息之一:

184 

185* `Using standard speed on Fable 5.2 · fast mode wasn't available`:运行 `/fast on` 以再次尝试快速模式

186* `Fast mode was refused for this project · trying again in 30m`:Agent Platform 对快速模式请求返回了 403 或 404 错误。要更早重试,请运行 `/fast on`。

187 

166### 在代理和 LLM 网关后面使用快速模式188### 在代理和 LLM 网关后面使用快速模式

167 189 

168在提供快速模式之前,Claude Code 会通过直接请求 `api.anthropic.com` 来检查您的组织的快速模式可用性。该检查不遵循 [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/zh-CN/llm-gateway-connect#set-the-base-url-and-credential),因此在通过 [LLM 网关](https://code.claude.com/docs/zh-CN/llm-gateway)路由 Claude 流量并阻止直接出站到 `api.anthropic.com` 的网络上,即使推理请求有效,检查也会失败。该检查确实使用配置的 [HTTP 代理](https://code.claude.com/docs/zh-CN/network-config.md#proxy-configuration),因此网络块仅在 `api.anthropic.com` 即使通过代理也无法到达的地方才会导致检查失败。190在 Anthropic API 上提供快速模式之前,Claude Code 会通过直接请求 `api.anthropic.com` 来检查您的组织的快速模式可用性。该检查不遵循 [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/zh-CN/llm-gateway-connect#set-the-base-url-and-credential),因此在通过 [LLM 网关](https://code.claude.com/docs/zh-CN/llm-gateway)路由 Claude 流量并阻止直接出站到 `api.anthropic.com` 的网络上,即使推理请求有效,检查也会失败。

169 191 

170如果您的组织已启用快速模式,而 `/fast` 显示的结果与之不符,请在以下情况中查找它显示的消息。192该检查确实使用配置的 [HTTP 代理](https://code.claude.com/docs/zh-CN/network-config.md#proxy-configuration),因此网络阻止仅在 `api.anthropic.com` 即使通过代理也无法到达的地方才会导致检查失败。如果您的组织已启用快速模式,而 `/fast` 显示的结果与之不符,请在以下情况中查找它显示的消息。

171 193 

172#### Fast mode unavailable due to network connectivity issues194#### Fast mode unavailable due to network connectivity issues

173 195 


199 221 

200### 要求每个会话选择加入222### 要求每个会话选择加入

201 223 

202默认情况下,用户在交互式会话中启用的快速模式会在支持的模型上跨会话保持。在 Fable 5.2 上,仅当用户[在使用 Fable 5.2 时启用了快速模式](#switch-models-while-fast-mode-is-on)时,它才会保持。224在 Anthropic API 上,默认情况下,用户在交互式会话中启用的快速模式会在支持的模型上跨会话保持。在 Fable 5.2 上,仅当用户[在使用 Fable 5.2 时启用了快速模式](#switch-models-while-fast-mode-is-on)时,它才会保持。

203 225 

204要让每个会话都以快速模式关闭的状态开始,请在任何[设置文件](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)中将 `fastModePerSessionOptIn` 设置为 `true`。之后,用户需要在每个会话中使用 `/fast` 启用它。[Team](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_teams#team-&-enterprise) 或 [Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_enterprise) 套餐上的所有者可以通过[服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)在组织范围内部署它。226要让每个会话都以快速模式关闭的状态开始,请在任何[设置文件](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)中将 `fastModePerSessionOptIn` 设置为 `true`。之后,用户需要在每个会话中使用 `/fast` 启用它。[Team](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_teams#team-&-enterprise) 或 [Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_enterprise) 套餐上的所有者可以通过[服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)在组织范围内部署它。

205 227 


227如果您在会话中途用完使用额度,Claude Code 会在标准速度和定价下重试每个被拒绝的快速模式请求,因此您可以继续工作,没有冷却。您看到拒绝的方式取决于会话类型:249如果您在会话中途用完使用额度,Claude Code 会在标准速度和定价下重试每个被拒绝的快速模式请求,因此您可以继续工作,没有冷却。您看到拒绝的方式取决于会话类型:

228 250 

229* 在交互式会话中,Claude Code 显示"快速模式已禁用 · 使用额度已耗尽"通知,并关闭快速模式。您保存的快速模式偏好设置不会改变;运行 `/fast` 以重新打开快速模式。251* 在交互式会话中,Claude Code 显示"快速模式已禁用 · 使用额度已耗尽"通知,并关闭快速模式。您保存的快速模式偏好设置不会改变;运行 `/fast` 以重新打开快速模式。

230* 在[非交互式模式](https://code.claude.com/docs/zh-CN/headless.md)中使用 `--output-format stream-json`,以及通过 Agent SDK,Claude Code 在消息流上作为 `system` 消息发出相同的文本,子类型为 `notification`,在您用完使用额度时每轮一次。快速模式保持打开。需要 Claude Code v2.1.221 或更高版本。252* 在[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)中使用 `--output-format stream-json` 时,以及通过 Agent SDK 时,Claude Code 会在消息流上以子类型为 `notification` 的 `system` 消息发出相同的文本。在您用完使用额度期间,该消息每个轮次出现一次。快速模式保持打开。

231 253 

232## 研究预览254## 研究预览

233 255 

Details

93 <td>✓(Opus 5 和 4.8 需要预配置)</td>93 <td>✓(Opus 5 和 4.8 需要预配置)</td>

94 <td>✗</td>94 <td>✗</td>

95 <td>✗</td>95 <td>✗</td>

96 <td>✗</td>96 <td>✓([Fable 5.2,有条件](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-on-agent-platform))</td>

97 <td>✗</td>97 <td>✗</td>

98 </tr>98 </tr>

99 99 


256 256 

257> [tab] Google Cloud's Agent Platform257> [tab] Google Cloud's Agent Platform

258>258>

259> **不可用:** 所有[需要 Claude 订阅的功能](#features-that-require-a-claude-subscription),加上 [fast mode](https://code.claude.com/docs/zh-CN/fast-mode.md)、[Advisor](https://code.claude.com/docs/zh-CN/advisor.md)、[Channels](https://code.claude.com/docs/zh-CN/channels.md)、[analytics dashboard](https://code.claude.com/docs/zh-CN/analytics.md)、[server-managed settings](https://code.claude.com/docs/zh-CN/server-managed-settings.md) 和 [`/design-sync` 和 `/import` 命令](https://code.claude.com/docs/zh-CN/commands#all-commands)。259> **不可用:** 所有[需要 Claude 订阅的功能](#features-that-require-a-claude-subscription),加上 [Advisor](https://code.claude.com/docs/zh-CN/advisor.md)、[Channels](https://code.claude.com/docs/zh-CN/channels.md)、[analytics dashboard](https://code.claude.com/docs/zh-CN/analytics.md)、[server-managed settings](https://code.claude.com/docs/zh-CN/server-managed-settings.md) 和 [`/design-sync` 和 `/import` 命令](https://code.claude.com/docs/zh-CN/commands#all-commands)。

260>260>

261> **部分支持:**261> **部分支持:**

262>262>

263> * [Desktop](https://code.claude.com/docs/zh-CN/desktop.md):通过[托管设置](https://claude.com/docs/third-party/claude-desktop/configuration)或 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)263> * [Desktop](https://code.claude.com/docs/zh-CN/desktop.md):通过[托管设置](https://claude.com/docs/third-party/claude-desktop/configuration)或 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)

264> * [Web search](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior):Opus 4、Sonnet 4、Haiku 4.5 及更高版本的模型264> * [Web search](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior):Opus 4、Sonnet 4、Haiku 4.5 及更高版本的模型

265> * [Fast mode](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-on-agent-platform):`global`、`us` 和 `eu` 区域中的 Fable 5.2;如果 Agent Platform 拒绝快速模式,则使用标准速度

265> * [Auto mode](https://code.claude.com/docs/zh-CN/auto-mode-config.md):仅 Sonnet 5 或更高版本、Opus 4.7 或更高版本、Haiku 5.5 以及 Fable 模型266> * [Auto mode](https://code.claude.com/docs/zh-CN/auto-mode-config.md):仅 Sonnet 5 或更高版本、Opus 4.7 或更高版本、Haiku 5.5 以及 Fable 模型

266> * [Cross-session messaging](https://code.claude.com/docs/zh-CN/cross-session-messaging.md):仅在此机器上的您的会话之间 <sup>[5](#fn5)</sup>267> * [Cross-session messaging](https://code.claude.com/docs/zh-CN/cross-session-messaging.md):仅在此机器上的您的会话之间 <sup>[5](#fn5)</sup>

267> * [Zero Data Retention](https://code.claude.com/docs/zh-CN/zero-data-retention.md):受您的 Google Cloud 协议约束268> * [Zero Data Retention](https://code.claude.com/docs/zh-CN/zero-data-retention.md):受您的 Google Cloud 协议约束

gateways.md +1 −1

Details

50 50 

51## Subscriptions and gateways51## Subscriptions and gateways

52 52 

53当开发人员通过具有网关凭证的网关连接时,使用情况按 API 费率计费到您的组织的提供商账户,他们的 claude.ai 订阅不被使用或收费。为您运行的网关设置 [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/zh-CN/env-vars),或使用 `/login` 登录到 Claude 应用网关,会关闭该会话的订阅登录。在该凭证下转发的每个请求都计费到网关提供商凭证后面的账户。53当开发人员通过具有网关凭据的网关连接时,使用情况按 API 费率计费到您的组织的提供商账户,他们的 claude.ai 订阅不被使用或收费。在该凭据下转发的每个请求都计费到网关提供商凭据后面的账户。

54 54 

55例外是仅设置 `ANTHROPIC_BASE_URL`,没有网关凭证。请求仍然通过网关路由,但保存的 claude.ai 登录保持活跃凭证,因此订阅的使用限制和计费适用。[其他 LLM 网关](https://code.claude.com/docs/zh-CN/llm-gateway#subscriptions-and-gateways) 涵盖该配置以及网关必须转发的内容才能使其工作。55例外是仅设置 `ANTHROPIC_BASE_URL`,没有网关凭证。请求仍然通过网关路由,但保存的 claude.ai 登录保持活跃凭证,因此订阅的使用限制和计费适用。[其他 LLM 网关](https://code.claude.com/docs/zh-CN/llm-gateway#subscriptions-and-gateways) 涵盖该配置以及网关必须转发的内容才能使其工作。

56 56 

Details

135| Merge queues | 读取 |135| Merge queues | 读取 |

136| Metadata | 读取 |136| Metadata | 读取 |

137| Pull requests | 读写 |137| Pull requests | 读写 |

138| Repository creation | 读写 |

138| Repository hooks | 读写 |139| Repository hooks | 读写 |

139| Statuses | 读取 |140| Statuses | 读取 |

140| Workflows | 读写 |141| Workflows | 读写 |

Details

190一些功能在 GHES 上的行为与 github.com 上不同。[功能表](#what-works-with-github-enterprise-server) 总结了支持;本部分涵盖了解决方法。190一些功能在 GHES 上的行为与 github.com 上不同。[功能表](#what-works-with-github-enterprise-server) 总结了支持;本部分涵盖了解决方法。

191 191 

192* **`/install-github-app` 命令**:改为在 claude.ai 上遵循 [管理员设置](#admin-setup) 流程。如果您还想在 GHES 上使用 GitHub Actions 工作流,请手动调整 [示例工作流](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml)。192* **`/install-github-app` 命令**:改为在 claude.ai 上遵循 [管理员设置](#admin-setup) 流程。如果您还想在 GHES 上使用 GitHub Actions 工作流,请手动调整 [示例工作流](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml)。

193* **GitHub MCP server**:改为使用为您的 GHES 主机配置的 `gh` CLI。运行 `gh auth login --hostname github.example.com` 进行身份验证,然后 Claude 可以在会话中使用 `gh` 命令。193* **GitHub MCP 服务器**:在您自己机器上的会话中,改为使用为您的 GHES 主机配置的 `gh` CLI。运行 `gh auth login --hostname github.example.com` 进行身份验证,然后 Claude 即可在该会话中使用 `gh` 命令。

194 194 

195## 故障排除195## 故障排除

196 196 

goal.md +3 −2

Details

131 131 

132#### 你必须修复的错误会清除目标132#### 你必须修复的错误会清除目标

133 133 

134如果一个回合因为一个在你修复之前不会清除的错误而失败,Claude Code 会清除目标并打印一个警告,说明原因。警告以 `Goal cleared after an unrecoverable error` 开头,以 `Run /goal again to continue` 结尾。修复原因,然后使用 `/goal <condition>` [再次设置目标](#set-a-goal)。四种失败会清除目标:134如果一个轮次因为一个在您修复之前不会清除的错误而失败,Claude Code 会清除目标并打印一个警告,说明原因。警告以 `Goal cleared after an unrecoverable error` 开头,以 `Run /goal again to continue` 结尾。修复原因,然后使用 `/goal <condition>` [再次设置目标](#set-a-goal)。会清除目标的失败包括:

135 135 

136* 身份验证失败,当 Claude Code 管理自己的凭证时。当主机为你管理凭证时,例如桌面应用或[云会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),Claude Code 会保持目标活跃,因为主机会自动恢复访问权限。136* 身份验证失败,当 Claude Code 管理自己的凭证时。当主机为你管理凭证时,例如桌面应用或[云会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),Claude Code 会保持目标活跃,因为主机会自动恢复访问权限。

137* 磁盘空间已满,导致 Claude Code 无法续期您的 claude.ai 登录,当 Claude Code 管理自己的凭据时。警告会显示 `(disk full)`。[释放存放 Claude Code 配置目录的磁盘上的空间](https://code.claude.com/docs/zh-CN/errors.md#could-not-refresh-your-login-disk-full)。

137* 信用余额耗尽138* 信用余额耗尽

138* 一个[自动压缩](https://code.claude.com/docs/zh-CN/model-config.md#set-the-auto-compact-window)无法清除的上下文溢出139* 一个[自动压缩](https://code.claude.com/docs/zh-CN/model-config.md#set-the-auto-compact-window)无法清除的上下文溢出

139* 一个不可用的模型140* 一个不可用的模型


178 179 

179## 要求180## 要求

180 181 

181Claude Code 在与 [设置文件中的 hooks 相同的工作区信任规则](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)下提供 `/goal`,因为评估器是 hooks 系统的一部分。当 [`disableAllHooks`](https://code.claude.com/docs/zh-CN/hooks#disable-or-remove-hooks) 为 `true`(在应用设置优先级后)或当在托管设置中设置了 [`allowManagedHooksOnly`](https://code.claude.com/docs/zh-CN/settings-reference#allowmanagedhooksonly) 时,`/goal` 也不可用。在每种情况下,该命令会告诉你原因,而不是默默地什么都不做。182Claude Code 在与 [设置文件中的 hooks 相同的工作区信任规则](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)下提供 `/goal`,因为评估器是 hooks 系统的一部分。当 [`disableAllHooks`](https://code.claude.com/docs/zh-CN/hooks#disable-or-remove-hooks) 为 `true`(在应用设置优先级后)或当在托管设置中设置了 [`allowManagedHooksOnly`](https://code.claude.com/docs/zh-CN/settings-reference#allowmanagedhooksonly) 时,`/goal` 也不可用。

182 183 

183## 另请参阅184## 另请参阅

184 185 

Details

134 134 

135要提高您的速率限制,请联系 Google Cloud 支持。使用 Google Cloud 的 Agent Platform 时,`/logout` 命令不可用,因为身份验证通过 Google Cloud 凭证处理。135要提高您的速率限制,请联系 Google Cloud 支持。使用 Google Cloud 的 Agent Platform 时,`/logout` 命令不可用,因为身份验证通过 Google Cloud 凭证处理。

136 136 

137Claude Code 在 [MCP tool search](https://code.claude.com/docs/zh-CN/mcp.md#scale-with-mcp-tool-search) 和预先加载之间进行决策,具体取决于模型生成:137Claude Code 根据模型代际在 [MCP 工具搜索](https://code.claude.com/docs/zh-CN/mcp.md#scale-with-mcp-tool-search)和预先加载之间进行选择:

138 138 

139* **Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本**:Claude Code 默认启用工具搜索。139* **Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本**:Claude Code 默认启用工具搜索。

140* **早期模型**:Claude Code 预先加载 MCP 工具定义,因为它们的 Agent Platform 服务堆栈拒绝所需的 beta 标头。设置 `ENABLE_TOOL_SEARCH=true` 不会覆盖此行为。140* **早期模型**:Claude Code 预先加载 MCP 工具定义,因为它们的 Agent Platform 服务堆栈拒绝所需的 beta 标头。设置 `ENABLE_TOOL_SEARCH=true` 不会覆盖此行为。

141 141 

142设置 `ENABLE_TOOL_SEARCH=false` 以在每个模型上禁用工具搜索。在 v2.1.221 之前,Claude Code 在 Google Cloud 的 Agent Platform 上为所有模型禁用工具搜索,除非您设置 `ENABLE_TOOL_SEARCH=true`。142设置 `ENABLE_TOOL_SEARCH=false` 以在每个模型上禁用工具搜索。

143 143 

144### 固定模型版本144### 固定模型版本

145 145 

hooks.md +28 −4

Details

572 572 

573Claude Code 读取工具的文本内容的方式与读取命令 hook stdout 的方式相同,遵循 [退出代码 0 下的解析规则](#exit-code-0)。如果工具返回 `isError: true`,hook 产生非阻止错误,执行继续。573Claude Code 读取工具的文本内容的方式与读取命令 hook stdout 的方式相同,遵循 [退出代码 0 下的解析规则](#exit-code-0)。如果工具返回 `isError: true`,hook 产生非阻止错误,执行继续。

574 574 

575如果 hook 错误包含以下消息之一,说明 Claude Code 无法读取该工具的回答,因此该 hook 没有给出判定:

576 

577```text theme={null}

578MCP tool "security_scan" on server "my_server" gave no answer that could be read, because a message from the server was too large, so this hook gave no verdict. If this keeps happening, the tool must send a smaller answer.

579MCP tool "security_scan" on server "my_server" answered without its text, which happens when a result is too large, so this hook gave no verdict. If this keeps happening, the tool must send a smaller answer.

580```

581 

582在 `PreToolUse` 上,Claude Code 会拒绝该 hook 正在检查的工具调用。在 `UserPromptSubmit`、`PostToolUse` 和 `Stop` 等其他事件上,该错误是非阻止的。

583 

584如果该错误持续出现,请让工具返回更少的数据,或更改 hook 的 [`tool` 或 `input`](#mcp-tool-hook-fields),使回答更小。

585 

575##### 当服务器仍在连接时586##### 当服务器仍在连接时

576 587 

577在 hook 可以阻止或改变结果的事件上,如 `PreToolUse` 或 `Stop`,Claude Code 在调用工具前等待连接的服务器,最多 [`MCP_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars),在 hook 自己的 [`timeout`](#common-fields) 内。在观察事件上,如 `Notification` 或 `SessionEnd`,它不等待。588在 hook 可以阻止或改变结果的事件上,如 `PreToolUse` 或 `Stop`,Claude Code 在调用工具前等待连接的服务器,最多 [`MCP_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars),在 hook 自己的 [`timeout`](#common-fields) 内。在观察事件上,如 `Notification` 或 `SessionEnd`,它不等待。


892 903 

893#### 启动后台进程的 hook904#### 启动后台进程的 hook

894 905 

906hook 可以启动一个长时间运行的程序(例如开发服务器),并在会话继续期间让其保持运行。在 hook 的脚本或 [shell 形式](#exec-form-and-shell-form)命令中:

907 

908* 在后台运行该程序

909* 重定向其 stdout 和 stderr。例如,Bash 命令 `npm run dev > dev-server.log 2>&1 &` 会将两者都发送到文件。如果您不重定向它们,非[异步](#run-hooks-in-the-background)的 hook 在其自身进程退出后最多需要 10 秒才能完成。

910 

895如果您的命令 hook 在后台进程中做出决策然后退出,那么该进程在 Claude Code 停止读取之后打印的拒绝决策不会阻止工具调用。对于非[异步](#run-hooks-in-the-background)的 hook,Claude Code 会在 hook 自身进程退出后不久完成对 hook 输出的读取。911如果您的命令 hook 在后台进程中做出决策然后退出,那么该进程在 Claude Code 停止读取之后打印的拒绝决策不会阻止工具调用。对于非[异步](#run-hooks-in-the-background)的 hook,Claude Code 会在 hook 自身进程退出后不久完成对 hook 输出的读取。

896 912 

897请在启动后台进程之前打印决策,并重定向该进程的 stdout 和 stderr。如果您的脚本打印了允许决策,然后启动后台进程且未重定向该进程的 stdout 和 stderr,Claude Code 会阻止该工具调用。hook 错误中包含 `refusing to honor the suspect capture`。913请在启动后台进程之前打印决策,并重定向该进程的 stdout 和 stderr。如果您的脚本打印了允许决策,然后启动后台进程且未重定向该进程的 stdout 和 stderr,Claude Code 会阻止该工具调用。hook 错误中包含 `stdio went quiet` 和 `refusing to honor the suspect capture`。

898 914 

899此 `PreToolUse` hook 脚本通过 `policy-check.sh` 打印决策,然后在后台上传指标:915此 `PreToolUse` hook 脚本通过 `policy-check.sh` 打印决策,然后在后台上传指标:

900 916 


1193 1209 

1194* `PreToolUse`:直接位于 `hookSpecificOutput` 下的 `updatedInput` 会在工具运行前替换其参数。请参阅 [PreToolUse 决策控制](#pretooluse-decision-control)1210* `PreToolUse`:直接位于 `hookSpecificOutput` 下的 `updatedInput` 会在工具运行前替换其参数。请参阅 [PreToolUse 决策控制](#pretooluse-decision-control)

1195* `PermissionRequest`:`updatedInput` 位于 `decision` 对象内。请参阅 [PermissionRequest 决策控制](#permissionrequest-decision-control)1211* `PermissionRequest`:`updatedInput` 位于 `decision` 对象内。请参阅 [PermissionRequest 决策控制](#permissionrequest-decision-control)

1196* `PostToolUse`:`updatedToolOutput` 替换工具的结果。请参阅 [PostToolUse 决策控制](#posttooluse-decision-control)1212* `PostToolUse`:`updatedToolOutput` 替换工具的结果。在 [Cowork](https://claude.com/docs/cowork/overview) 云端会话中,当工具为 `AskUserQuestion` 或 `ExitPlanMode` 时,Claude Code 会忽略 `updatedToolOutput`,Claude 读取的是原始回答或计划。请参阅 [PostToolUse 决策控制](#posttooluse-decision-control)

1197* `UserPromptSubmit`:无法替换提示词;它仅在其旁边注入 `additionalContext`1213* `UserPromptSubmit`:无法替换提示词;它仅在其旁边注入 `additionalContext`

1198 1214 

1199对于脱敏或转换用例,请在 `PreToolUse` 处拦截出站工具输入,在 `PostToolUse` 处拦截入站工具结果。1215对于脱敏或转换用例,请在 `PreToolUse` 处拦截出站工具输入,在 `PostToolUse` 处拦截入站工具结果。


2210| `addDirectories` | `directories`、`destination` | 添加工作目录。`directories` 是一个路径字符串数组 |2226| `addDirectories` | `directories`、`destination` | 添加工作目录。`directories` 是一个路径字符串数组 |

2211| `removeDirectories` | `directories`、`destination` | 删除工作目录 |2227| `removeDirectories` | `directories`、`destination` | 删除工作目录 |

2212 2228 

2229在 `rules` 中,对于写作 `Tool(specifier)` 的[权限规则](https://code.claude.com/docs/zh-CN/permissions.md#permission-rule-syntax),`toolName` 是工具名称,`ruleContent` 是说明符:

2230 

2231* `Bash(npm test)`:`{ "toolName": "Bash", "ruleContent": "npm test" }`

2232* `Bash` 或 `Bash(*)`:`{ "toolName": "Bash" }`,因为两者都匹配整个工具

2233* `mcp__github__get_issue`:`{ "toolName": "mcp__github__get_issue" }`

2234 

2235为 [MCP 工具](https://code.claude.com/docs/zh-CN/permissions.md#mcp)编写允许规则时请省略 `ruleContent`。如果添加了它,该规则将不会匹配任何调用。

2236 

2213> [!NOTE]2237> [!NOTE]

2214>2238>

2215> 仅当您启动会话时 bypass 模式已可用,带有 `bypassPermissions` 的 `setMode` 才会生效:即使用了 `--dangerously-skip-permissions`、`--permission-mode bypassPermissions`、`--allow-dangerously-skip-permissions`,或在[用户设置、`--settings` 或托管设置](https://code.claude.com/docs/zh-CN/settings-reference#permissions-defaultmode)中设置了 `permissions.defaultMode: "bypassPermissions"`。否则该更新不会产生任何效果。当 [`permissions.disableBypassPermissionsMode`](https://code.claude.com/docs/zh-CN/permissions#managed-settings) 禁用该模式,或会话以[受限模式](https://code.claude.com/docs/zh-CN/cli-reference.md#cli-flags)启动时,该更新同样不会产生任何效果。2239> 仅当您启动会话时 bypass 模式已可用,带有 `bypassPermissions` 的 `setMode` 才会生效:即使用了 `--dangerously-skip-permissions`、`--permission-mode bypassPermissions`、`--allow-dangerously-skip-permissions`,或在[用户设置、`--settings` 或托管设置](https://code.claude.com/docs/zh-CN/settings-reference#permissions-defaultmode)中设置了 `permissions.defaultMode: "bypassPermissions"`。否则该更新不会产生任何效果。当 [`permissions.disableBypassPermissionsMode`](https://code.claude.com/docs/zh-CN/permissions#managed-settings) 禁用该模式,或会话以[受限模式](https://code.claude.com/docs/zh-CN/cli-reference.md#cli-flags)启动时,该更新同样不会产生任何效果。


2289| `reason` | 当 `decision` 为 `"block"` 时向 Claude 显示的说明 |2313| `reason` | 当 `decision` 为 `"block"` 时向 Claude 显示的说明 |

2290| `additionalContext` | 与工具结果一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |2314| `additionalContext` | 与工具结果一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

2291| `classifierContext` | 关于此调用结果的简短说明,供[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器而非 Claude 使用。请参阅[为自动模式分类器注释结果](#annotate-a-result-for-the-auto-mode-classifier)。需要 Claude Code v2.1.236 或更高版本 |2315| `classifierContext` | 关于此调用结果的简短说明,供[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器而非 Claude 使用。请参阅[为自动模式分类器注释结果](#annotate-a-result-for-the-auto-mode-classifier)。需要 Claude Code v2.1.236 或更高版本 |

2292| `updatedToolOutput` | 在工具输出发送给 Claude 之前,用提供的值替换它。该值必须与工具的输出结构相匹配 |2316| `updatedToolOutput` | 在发送给 Claude 之前,用提供的值替换工具的输出。该值必须与工具的输出结构匹配。在 [Cowork](https://claude.com/docs/cowork/overview) 云端会话中,当工具为 `AskUserQuestion` 或 `ExitPlanMode` 时,Claude Code 会忽略此字段,Claude 会读取原始回答或计划 |

2293| `updatedMCPToolOutput` | 仅替换 [MCP 工具](#match-mcp-tools)的输出。建议优先使用适用于所有工具的 `updatedToolOutput` |2317| `updatedMCPToolOutput` | 仅替换 [MCP 工具](#match-mcp-tools)的输出。建议优先使用 `updatedToolOutput`,它也适用于内置工具 |

2294 2318 

2295下面的示例替换了一次 `Bash` 调用的输出。替换值与 `Bash` 工具的输出结构相匹配:2319下面的示例替换了一次 `Bash` 调用的输出。替换值与 `Bash` 工具的输出结构相匹配:

2296 2320 

hooks-guide.md +1 −1

Details

964 964 

965> [!NOTE]965> [!NOTE]

966>966>

967> 如果您的机器上没有[托管设置](https://code.claude.com/docs/zh-CN/settings.md#check-what-your-organization-enforces),并且您的会话未使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence),那么 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 可以批准被您的 `PreToolUse` hook 阻止的调用。改为使用 API 密钥或长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话并未使用该登录,即使该登录已存储。967> 您的机器上可能没有[托管设置](https://code.claude.com/docs/zh-CN/settings.md#check-what-your-organization-enforces)和 [`managed-mcp.json` 文件](https://code.claude.com/docs/zh-CN/managed-mcp#deploy-managed-mcp-json),并且您的会话可能未使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence)。在这种情况下,[mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 可以批准被您的 `PreToolUse` hook 阻止的调用。改为使用 API 密钥或长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话并未使用该登录,即使该登录已存储。

968>968>

969> 在计划模式中,仅当此类被阻止的调用为只读(因此不是文件编辑)时,mod 才能批准它。有关 mod 的批准无法越过您的规则和 hook 的情况,请参阅[使用 hook 扩展权限](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。969> 在计划模式中,仅当此类被阻止的调用为只读(因此不是文件编辑)时,mod 才能批准它。有关 mod 的批准无法越过您的规则和 hook 的情况,请参阅[使用 hook 扩展权限](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。

970 970 

Details

251| `d`/`x` | 删除选择 |251| `d`/`x` | 删除选择 |

252| `y` | 复制选择 |252| `y` | 复制选择 |

253| `c`/`s` | 更改选择 |253| `c`/`s` | 更改选择 |

254| `p` | 用寄存器内容替换选择 |254| `p`/`P` | 用寄存器内容替换选择 |

255| `r{char}` | 将每个选定的字符替换为 `{char}` |255| `r{char}` | 将每个选定的字符替换为 `{char}` |

256| `~`/`u`/`U` | 切换、小写或大写选择 |256| `~`/`u`/`U` | 切换、小写或大写选择 |

257| `>`/`<` | 缩进或取消缩进选定的行 |257| `>`/`<` | 缩进或取消缩进选定的行 |


275* 输入历史按工作目录存储275* 输入历史按工作目录存储

276* 运行 `/clear` 开始新会话:回调时会首先列出新会话的提示词,然后是较早会话的提示词。前一个会话的对话被保留,可以恢复。276* 运行 `/clear` 开始新会话:回调时会首先列出新会话的提示词,然后是较早会话的提示词。前一个会话的对话被保留,可以恢复。

277* 连续两次提交相同的提示词只记录一个历史条目,因此按上箭头会跳到前一个不同的提示词277* 连续两次提交相同的提示词只记录一个历史条目,因此按上箭头会跳到前一个不同的提示词

278* 当你回调包含粘贴文本的提示词时,Claude Code 在你重新提交时会再次发送完整的粘贴内容。如果内容已被[自动清理](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically),Claude Code 不会发送字面上的 `[Pasted text #N]` 字符串;有关提示词发生的情况,请参阅[粘贴大型内容](https://code.claude.com/docs/zh-CN/terminal-config.md#paste-large-content)278* 当您回调包含粘贴文本的提示词时,Claude Code 在您重新提交时会再次发送完整的粘贴内容。如果内容已被[自动清理](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically),Claude Code 不会发送字面上的 `[Pasted text #N]` 字符串;有关提示词发生的情况,请参阅[粘贴大型内容](https://code.claude.com/docs/zh-CN/terminal-config.md#paste-large-content)

279* 使用 `!` 的历史扩展默认被禁用279* 使用 `!` 的历史扩展默认被禁用

280 280 

281### 找回已清除的草稿281### 找回已清除的草稿


304 304 

305接受匹配项或取消搜索立即生效,即使 Claude Code 仍在加载历史记录。305接受匹配项或取消搜索立即生效,即使 Claude Code 仍在加载历史记录。

306 306 

307如果您只记得之前某个提示词中粘贴过的一段较长内容(例如错误日志),要找到该提示词,请按 `Ctrl+R` 并输入该粘贴内容中的某个词。需要 Claude Code v2.1.314 或更高版本。

308 

307## 后台 Bash 命令309## 后台 Bash 命令

308 310 

309Claude Code 支持在后台运行 Bash 命令,允许你在长时间运行的进程执行时继续工作。311Claude Code 支持在后台运行 Bash 命令,允许你在长时间运行的进程执行时继续工作。

keybindings.md +1 −1

Details

305 305 

306### Diff 操作306### Diff 操作

307 307 

308这些操作仅作用于 Claude Code 早期的 diff 查看器,当您在 `/plugin` 中禁用 [`cc-plugin-diff` mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 后,`/diff` 会在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md)之外打开该查看器。启用该 mod 时,`/diff` 会改为打开 [diff 对话框](https://code.claude.com/docs/zh-CN/interactive-mode.md#diff-dialog)。无论哪种情况,引用这些操作的 `keybindings.json` 都能正常加载而不会报错。308这些操作仅作用于 Claude Code 早期的 diff 查看器,当您在 `/plugin` 中禁用 [`cc-plugin-diff` mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 后,`/diff` 会在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md)之外打开该查看器。启用该 mod 时,`/diff` 会改为打开 [diff 对话框](https://code.claude.com/docs/zh-CN/interactive-mode.md#diff-dialog)。

309 309 

310`DiffDialog` 上下文中可用的操作:310`DiffDialog` 上下文中可用的操作:

311 311 

Details

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

198* `Plugin "<name>" not found in marketplace "claude-plugins-official"`:您本地的市场目录副本可能已过期。使用 `/plugin marketplace update claude-plugins-official` 刷新它,然后重试安装。如果重试后仍显示相同的消息,请参阅[在市场中找不到插件](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#plugin-not-found-in-marketplace)。198* `Plugin "<name>" not found in marketplace "claude-plugins-official"`:您本地的市场目录副本可能已过期。使用 `/plugin marketplace update claude-plugins-official` 刷新它,然后重试安装。如果重试后仍显示相同的消息,请参阅[在市场中找不到插件](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#plugin-not-found-in-marketplace)。

199 199 

200要为存储库中的每个人启用插件而不是自己安装,请将其添加到 [`enabledPlugins` 项目设置](https://code.claude.com/docs/zh-CN/settings-reference#plugin-settings)。200要为仓库中的每个人启用插件,请将其添加到 [`enabledPlugins` 项目设置](https://code.claude.com/docs/zh-CN/settings-reference#plugin-settings)。每个人仍需[自行安装](https://code.claude.com/docs/zh-CN/plugins/loading.md#enabled-in-project-settings-but-not-installed)。

201 201 

202代码智能插件需要每个开发者机器上的语言的语言服务器二进制文件。查看[每种语言需要哪个二进制文件](https://code.claude.com/docs/zh-CN/plugins/code-intelligence.md)。从官方市场安装需要网络访问 GitHub,市场在那里托管。在受限网络上,[从内部 Git 主机或本地路径添加市场](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace)。202代码智能插件需要每个开发者机器上的语言的语言服务器二进制文件。查看[每种语言需要哪个二进制文件](https://code.claude.com/docs/zh-CN/plugins/code-intelligence.md)。从官方市场安装需要网络访问 GitHub,市场在那里托管。在受限网络上,[从内部 Git 主机或本地路径添加市场](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace)。

203 203 


235 235 

236在 `sparsePaths` 中列出目录,而不是单个文件。根级文件如 `package.json`、`tsconfig.base.json` 和锁文件始终与你列出的目录一起检出。根级目录不是,所以如果你想要存储库根目录的 `.claude/settings.json` 或 `.claude/rules/` 在 worktree 内可用,请在列表中包含 `.claude`。对于项目 skills、代理和命令,请参阅[worktrees 与主检出共享的内容](https://code.claude.com/docs/zh-CN/worktrees.md#what-worktrees-share-with-the-main-checkout)。236在 `sparsePaths` 中列出目录,而不是单个文件。根级文件如 `package.json`、`tsconfig.base.json` 和锁文件始终与你列出的目录一起检出。根级目录不是,所以如果你想要存储库根目录的 `.claude/settings.json` 或 `.claude/rules/` 在 worktree 内可用,请在列表中包含 `.claude`。对于项目 skills、代理和命令,请参阅[worktrees 与主检出共享的内容](https://code.claude.com/docs/zh-CN/worktrees.md#what-worktrees-share-with-the-main-checkout)。

237 237 

238Sparse checkout 需要 git 在存在 sparse worktree 时在仓库的共享 `.git/config` 中启用 `extensions.worktreeConfig`。Claude Code 在删除最后一个 worktree 后会删除该条目,但仅当 Claude Code 添加了它时。它永远不会删除您自己设置的值。238> [!NOTE]

239>

240> Sparse checkout 需要 git 在存在 sparse worktree 时在仓库的共享 `.git/config` 中启用 `extensions.worktreeConfig`。Claude Code 在删除最后一个 worktree 后会删除该条目,但仅当该条目是 Claude Code 添加的时。

239 241 

240要避免在 worktrees 中复制大型目录如 `node_modules`,将 `sparsePaths` 与同一 `.claude/settings.json` 中的 `symlinkDirectories` 配对:242要避免在 worktrees 中复制大型目录如 `node_modules`,将 `sparsePaths` 与同一 `.claude/settings.json` 中的 `symlinkDirectories` 配对:

241 243 

Details

156 156 

157### 与现有登录的冲突157### 与现有登录的冲突

158 158 

159网关凭证变量优先于保存的 claude.ai 登录或 Console 密钥。您的 claude.ai 登录在设置变量时保持保存和未使用;取消设置变量,Claude Code 返回到它。使用 `ANTHROPIC_AUTH_TOKEN`,变量立即优先。使用 `ANTHROPIC_API_KEY`,在交互模式下提示您一次以批准密钥,然后它接管。159网关凭据变量优先于保存的 claude.ai 登录或 Console 密钥。使用 `ANTHROPIC_AUTH_TOKEN`,变量立即优先。使用 `ANTHROPIC_API_KEY`,在交互模式下提示您一次以批准密钥,然后它接管。

160 160 

161运行 `/status` 以确认哪个凭证源处于活动状态。如果启动显示命名两个源的身份验证冲突警告,请参阅[故障排除表](#troubleshoot-gateway-errors)的第一行,了解要删除哪一个。要清除保存的登录,以便仅保留网关凭证,请运行 `/logout`。161运行 `/status` 以确认哪个凭证源处于活动状态。如果启动显示命名两个源的身份验证冲突警告,请参阅[故障排除表](#troubleshoot-gateway-errors)的第一行,了解要删除哪一个。要清除保存的登录,以便仅保留网关凭证,请运行 `/logout`。

162 162 


378设置该变量具有以下效果和限制:378设置该变量具有以下效果和限制:

379 379 

380* 它禁用自动更新,因此请为另一个更新路径做计划,例如您的包管理器或托管分发。380* 它禁用自动更新,因此请为另一个更新路径做计划,例如您的包管理器或托管分发。

381* 它抑制 [fast mode](https://code.claude.com/docs/zh-CN/fast-mode.md) 可用性检查。除非之前的检查已在机器上启用了 fast mode,否则 `/fast` 报告 fast mode 不可用。381* 它抑制[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)可用性检查。在 Anthropic API 上,如果 `/fast` 随后报告快速模式不可用,请参阅[在代理和 LLM 网关后使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)以恢复快速模式。

382* 它不影响[网关模型发现](#add-gateway-models-to-the-model-picker),它仅查询您的网关。在 v2.1.257 之前,该变量也停止了发现刷新,因此选择器保留了之前缓存的列表。382* 它不影响[网关模型发现](#add-gateway-models-to-the-model-picker),它仅查询您的网关。在 v2.1.257 之前,该变量也停止了发现刷新,因此选择器保留了之前缓存的列表。

383* WebFetch 工具的[域安全检查](https://code.claude.com/docs/zh-CN/data-usage.md#webfetch-domain-safety-check)不受影响,仍然调用 `api.anthropic.com`。如果您的网络阻止该主机,请在[设置](https://code.claude.com/docs/zh-CN/settings.md)中使用 `skipWebFetchPreflight: true` 单独关闭它。383* WebFetch 工具的[域安全检查](https://code.claude.com/docs/zh-CN/data-usage.md#webfetch-domain-safety-check)不受影响,仍然调用 `api.anthropic.com`。如果您的网络阻止该主机,请在[设置](https://code.claude.com/docs/zh-CN/settings.md)中使用 `skipWebFetchPreflight: true` 单独关闭它。

384* 对于每个遥测流及控制它的变量,请参阅[遥测服务](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)。384* 对于每个遥测流及控制它的变量,请参阅[遥测服务](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)。

Details

251 251 

252* 登录提示意味着凭证缺口。运行 `/status` 并打开**状态**选项卡:当 `Setting sources` 行不包括托管设置时,分发没有到达机器;当它包括时,开发者凭证没有被交付,因此设置 `ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper`252* 登录提示意味着凭证缺口。运行 `/status` 并打开**状态**选项卡:当 `Setting sources` 行不包括托管设置时,分发没有到达机器;当它包括时,开发者凭证没有被交付,因此设置 `ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper`

253* `Failed to authenticate` 错误意味着网关拒绝请求;其日志说明了哪个凭证失败。网关自己记录的拒绝命名开发者密钥,而来自 `api.anthropic.com` 或您的提供商端点的 `401` 意味着网关持有的提供商凭证被拒绝253* `Failed to authenticate` 错误意味着网关拒绝请求;其日志说明了哪个凭证失败。网关自己记录的拒绝命名开发者密钥,而来自 `api.anthropic.com` 或您的提供商端点的 `401` 意味着网关持有的提供商凭证被拒绝

254* 当网关期望密钥在 `x-api-key` 标头中时,在首次使用时出现一次性批准提示是预期的,设置为 `ANTHROPIC_API_KEY`。使用 `ANTHROPIC_AUTH_TOKEN`,不会出现提示,变量会无声地接管;以前保存的 claude.ai 登录对该会话无效254* 当网关期望密钥在 `x-api-key` 标头中(设置为 `ANTHROPIC_API_KEY`)时,首次使用时出现针对该密钥的一次性批准提示是预期行为

255 255 

256如果您的组织使用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md),也在这里运行 `/fast`:可用性检查直接调用 `api.anthropic.com` 而不是遵循网关基础 URL,因此网关路由的会话可以报告快速模式不可用或禁用,即使推理有效。[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)将每条消息映射到恢复它的变量,与[配置的其余部分](#distribute-the-configuration)一起分发。256如果您的组织使用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md),也在这里运行 `/fast`:可用性检查直接调用 `api.anthropic.com` 而不是遵循网关基础 URL,因此网关路由的会话可以报告快速模式不可用或禁用,即使推理有效。[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)将每条消息映射到恢复它的变量,与[配置的其余部分](#distribute-the-configuration)一起分发。

257 257 

managed-mcp.md +39 −39

Details

157 157 

158## 通过托管设置提供服务器158## 通过托管设置提供服务器

159 159 

160要为每个用户提供一组远程 MCP 服务器而不独占 MCP 的控制权,请在[托管设置源](https://code.claude.com/docs/zh-CN/admin-setup.md#decide-how-settings-reach-devices)中的 `managedMcpServers` 下列出它们:服务器托管设置、[Claude 应用网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#what-goes-in-cli)策略、MDM 配置文件或注册表策略,或 `managed-settings.json`。用户保留他们自己添加的服务器,并额外接收您的服务器。需要 Claude Code v2.1.259 或更高版本。早期客户端会忽略此密钥。160若要为每位用户提供一组远程 MCP 服务器,同时又不独占对 MCP 的控制,请在[托管设置来源](https://code.claude.com/docs/zh-CN/admin-setup.md#decide-how-settings-reach-devices)中将它们列在 `managedMcpServers` 下:服务器托管设置、[Claude apps 网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#what-goes-in-cli)策略、MDM 配置文件或注册表策略,或 `managed-settings.json`。用户会保留自己添加的服务器,并额外获得您提供的服务器。需要 Claude Code v2.1.259 或更高版本。较早的客户端会忽略此键。

161 161 

162该值是一个以服务器名称为键的对象。每个条目的形状与项目 [`.mcp.json`](https://code.claude.com/docs/zh-CN/mcp#project-scope) 文件中的 HTTP 或 SSE 服务器相同,包括[使用远程 MCP 服务器进行身份验证](https://code.claude.com/docs/zh-CN/mcp.md#authenticate-with-remote-mcp-servers)中描述的可选 `headers` 和 `oauth` 成员。此示例提供了一个搜索服务器,每个用户使用 OAuth 登录,以及一个记录服务器,它发送您的组织颁发的标头:162该值是一个以服务器名称为键的对象。每个条目的结构与项目 [`.mcp.json`](https://code.claude.com/docs/zh-CN/mcp#project-scope) 文件中的 HTTP 或 SSE 服务器相同,包括[向远程 MCP 服务器进行身份验证](https://code.claude.com/docs/zh-CN/mcp.md#authenticate-with-remote-mcp-servers)中所述的可选 `headers` 和 `oauth` 成员。以下示例提供了一个每位用户通过 OAuth 登录的搜索服务器,以及一个发送由您的组织签发的标头的记录服务器:

163 163 

164```json theme={null}164```json theme={null}

165{165{


179}179}

180```180```

181 181 

182任何能够读取机器上托管设置的人(包括用户)都可以读取您在此处设置的标头值。使用为整个受众颁发的凭证,或省略 `headers` 并让每个用户使用 OAuth 登录。182任何能够读取某台机器上托管设置的人(包括该用户)都可以读取您在此处设置的标头值。请使用为该全体受众签发的凭据,或省略 `headers`,让每位用户通过 OAuth 登录。

183 183 

184### 条目可以包含的内容184### 条目可以包含的内容

185 185 

186Claude Code 仅在通过以下每项检查时才加载条目。它会丢弃失败的条目,记录您可以使用 `/status` 读取的通知,并仍然加载其他条目:186只有当条目通过以下所有检查时,Claude Code 才会加载该条目。对于未通过某项检查的条目,Claude Code 会将其丢弃,记录一条可通过 `/status` 查看的通知,并仍然加载其他条目:

187 187 

188* `type` 是 `http` 或 `sse`。与 `.mcp.json` 中一样,`streamable-http` 被接受为 `http` 的别名。188* `type` 为 `http` 或 `sse`。与 `.mcp.json` 中一样,`streamable-http` 被接受为 `http` 的别名。

189* `url` 是 `https://` URL。Claude Code 拒绝纯 `http://` URL,包括指向 `localhost` 的 URL。189* `url` 是 `https://` URL。Claude Code 会拒绝普通的 `http://` URL,包括指向 `localhost` 的 URL。

190* 该条目没有 `command`、`args`、`env` 或 `headersHelper` 成员,因此托管设置文档永远不会命名要在用户机器上运行的程序。190* 条目不包含 `command`、`args`、`env` 或 `headersHelper` 成员。

191* 没有值包含 `${VAR}` 引用。Claude Code 不会在这些条目中展开环境变量,因此请写入字面值。191* 任何值都不包含 `${VAR}` 引用。Claude Code 不会在这些条目中展开环境变量,因此请填写字面值。

192* 服务器名称仅包含字母、数字、连字符和下划线,没有键或值包含控制或不可见的格式字符。192* 服务器名称仅包含字母、数字、连字符和下划线,且任何键或值都不包含控制字符或不可见的格式字符。

193 193 

194Claude Desktop 有一个同名的托管设置,其值是不同条目形状的数组,因此不要将一个复制到另一个。Claude Code 不接受数组形式,而是记录通知而不是加载它。194Claude Desktop 有一个同名的托管设置,其值是一个条目结构不同的数组,因此请勿将其中一个复制到另一个中。Claude Code 不接受数组形式,会记录一条通知而不是加载它。

195 195 

196Claude 应用网关在启动时运行相同的检查;请参阅[策略中的 MCP 服务器](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#mcp-servers-in-a-policy)。196Claude apps 网关在启动时会执行相同的检查;请参阅[策略中的 MCP 服务器](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#mcp-servers-in-a-policy)。

197 197 

198### 提供的服务器如何加载198### 所提供服务器的加载方式

199 199 

200这些规则决定当提供的服务器与另一个服务器定义或此页面上的另一个设置重叠时会加载什么:200当所提供的服务器与其他服务器定义或本页上的其他设置重叠时,以下规则决定加载哪些内容:

201 201 

202* 提供的服务器优先于本地、项目或用户范围内同名的服务器,以及指向相同 URL 的插件服务器或 claude.ai 连接器。202* 所提供的服务器优先于本地、项目或用户作用域中的同名服务器,也优先于指向相同 URL 的插件服务器或 claude.ai 连接器。

203* 如果您还部署 `managed-mcp.json`,Claude Code 会加载其服务器和提供的服务器,当两者都定义一个名称时,该文件的条目优先。203* 如果您同时部署了 `managed-mcp.json`,Claude Code 会同时加载其中的服务器和所提供的服务器;当两者定义了相同名称时,以该文件中的条目为准。

204* 当 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/zh-CN/settings-reference#strictpluginonlycustomization) 锁定 `mcp` 表面时,提供的服务器继续加载。204* 当 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/zh-CN/settings-reference#strictpluginonlycustomization) 锁定 `mcp` 使用入口时,所提供的服务器仍会继续加载。

205* `deniedMcpServers` 适用于提供的服务器,包括来自用户自己设置的条目,因此用户可以为自己阻止一个。提供的服务器不需要 `allowedMcpServers` 条目。205* `deniedMcpServers` 适用于所提供的服务器,包括来自用户自身设置的条目,因此用户可以为自己屏蔽某个服务器。所提供的服务器无需 `allowedMcpServers` 条目。

206 206 

207当您还没有部署 `managed-mcp.json` 时,每次运行的标志保持其含义:207当您未同时部署 `managed-mcp.json` 时,单次运行的标志保持其原有含义:

208 208 

209* 用户使用同一名称下的 `--mcp-config` 传递的服务器替换该运行的提供的服务器,并针对 `allowedMcpServers` 进行检查。209* 用户通过 `--mcp-config` 传入的同名服务器会在该次运行中替换所提供的服务器,并会根据 `allowedMcpServers` 进行检查。

210* `--strict-mcp-config` 将提供的服务器与所有其他配置的服务器一起排除。210* `--strict-mcp-config` 会将所提供的服务器与所有其他已配置的服务器一并排除。

211 211 

212部署 `managed-mcp.json` 后,两个标志的行为如[使用 managed-mcp.json 的独占控制](#exclusive-control-with-managed-mcp-json)所述。212部署了 `managed-mcp.json` 时,这两个标志的行为如[使用 managed-mcp.json 进行独占控制](#exclusive-control-with-managed-mcp-json)中所述。

213 213 

214### 用户可以看到和更改的内容214### 用户可以查看和更改的内容

215 215 

216用户无法编辑或删除提供的服务器:216用户无法编辑或删除所提供的服务器:

217 217 

218* `claude mcp remove` 报告服务器由组织提供。218* `claude mcp remove` 会报告该服务器由组织提供。

219* 当您还没有部署 `managed-mcp.json` 时,用户在同一名称下添加的条目会被保存但在您的条目存在时不会被使用。219* 当您未同时部署 `managed-mcp.json` 时,用户以相同名称添加的条目会被保存,但在您的条目存在期间不会被使用。

220* 用户仍然可以在 [`/mcp`](https://code.claude.com/docs/zh-CN/mcp#disable-a-server-without-removing-it) 中为自己关闭提供的服务器,该服务器在**托管 MCPs** 下列出提供的服务器。220* 用户仍可以在 [`/mcp`](https://code.claude.com/docs/zh-CN/mcp#disable-a-server-without-removing-it) 中为自己关闭所提供的服务器,该处会将所提供的服务器列在 **Managed MCPs** 下。

221 221 

222`claude mcp get` 和 `/mcp` 将提供的服务器的 URL 仅显示为其主机,例如 `https://mcp.example.com/…`,`claude mcp get` 显示其标头名称而不显示其值。222`claude mcp get` 和 `/mcp` 仅显示所提供服务器 URL 的主机部分,例如 `https://mcp.example.com/…`,并且 `claude mcp get` 会显示其标头名称而不显示其值。

223 223 

224### `managedMcpServers` 适用的位置224### `managedMcpServers` 的适用范围

225 225 

226Claude Code 从它在[Claude Code 如何组合托管源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)下选择的托管源读取 `managedMcpServers`。当该源将 [`managedSourcesBehavior`](https://code.claude.com/docs/zh-CN/settings-reference#managedsourcesbehavior) 设置为 `"merge"` 时,Claude Code 改为提供来自每个管理员源的服务器,当两个源定义相同的名称时,排名较高的源的条目整体适用。它永远不会从用户可写的 HKCU 注册表、从[嵌入主机提供的父设置](https://code.claude.com/docs/zh-CN/managed-settings.md#parent-settings-from-embedding-hosts)或从用户、项目或本地设置文件中读取密钥,它会在那里使用警告丢弃密钥。226Claude Code 从其根据 [Claude Code 如何组合托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)所选定的托管来源中读取 `managedMcpServers`。当该来源将 [`managedSourcesBehavior`](https://code.claude.com/docs/zh-CN/settings-reference#managedsourcesbehavior) 设置为 `"merge"` 时,Claude Code 会改为提供来自每个管理员来源的服务器;当两个来源定义了相同名称时,以排名较高的来源的条目整体为准。Claude Code 从不从用户可写的 HKCU 注册表、[嵌入宿主提供的父级设置](https://code.claude.com/docs/zh-CN/managed-settings.md#parent-settings-from-embedding-hosts),或用户、项目、本地设置文件中读取此键;在这些位置,它会丢弃该键并发出警告。

227 227 

228Claude Code 不会在第三方部署中的 Claude Desktop 应用的 Code 选项卡中或在应用的 Cowork 会话中读取密钥,因为 Claude Desktop 自己提供并锁定这些会话的 MCP 服务器。当您的托管设置在那里携带密钥时,`/status` 和 `claude doctor` 会说明这一点。228在第三方部署上的 Claude Desktop 应用的 Code 标签页中,或在该应用的 Cowork 会话中,Claude Code 不会读取此键,因为 Claude Desktop 会自行提供并锁定这些会话的 MCP 服务器。当您的托管设置在这些场景中包含此键时,`/status` 和 `claude doctor` 会予以说明。

229 229 

230### 提供的服务器何时连接230### 所提供服务器的连接时机

231 231 

232当 `managedMcpServers` 通过服务器托管设置到达时,其时序遵循[获取和缓存行为](https://code.claude.com/docs/zh-CN/server-managed-settings.md#fetch-and-caching-behavior):232当 `managedMcpServers` 通过服务器托管设置下发时,其时机遵循[获取和缓存行为](https://code.claude.com/docs/zh-CN/server-managed-settings.md#fetch-and-caching-behavior):

233 233 

234* 在具有缓存设置的机器上,Claude Code 会保留此密钥的缓存副本,直到服务器确认会话的设置,并等待该确认后再加载 MCP 服务器。如果确认失败,会话将继续而不使用提供的服务器,`/status` 会说它们被保留。234* 在已有缓存设置的机器上,Claude Code 会暂不应用此键的缓存副本,直到服务器确认该会话的设置为止,并在加载 MCP 服务器之前等待该确认。如果确认失败,会话将在没有所提供服务器的情况下继续,`/status` 会说明这些服务器已被暂扣、未予加载。

235* 在机器的首次启动时,还没有缓存任何内容,在设置到达之前启动的交互式会话会在它们到达时立即连接提供的服务器,而已经启动的 `claude -p` 运行可以在没有它们的情况下完成。235* 在机器首次启动、尚无任何缓存时,在设置到达之前启动的交互式会话会在设置到达后立即连接所提供的服务器,而已经开始的 `claude -p` 运行可能会在没有这些服务器的情况下完成。

236 236 

237使用[网关登录](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#precedence-with-other-managed-sources),Claude Code 在会话启动前加载策略,因此两种情况都不会延迟或跳过提供的服务器。237使用[网关登录](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#precedence-with-other-managed-sources)时,Claude Code 会在会话开始之前加载策略,因此以上两种情况都不会延迟或跳过所提供的服务器。

238 238 

239已在运行的交互式会话应用您对密钥的编辑:239已在运行的交互式会话会应用您对此键所做的修改:

240 240 

241* **添加服务器**:Claude Code 在更新的设置到达时连接它,无需重启。241* **添加服务器**:更新后的设置到达时,Claude Code 会连接该服务器,无需重启。

242* **更改服务器的条目**:这些会话使用新定义重新连接到它。242* **更改服务器的条目**:这些会话会使用新的定义重新连接到该服务器。

243* **删除服务器**:运行中的交互式会话在读取更改的设置后断开连接。非交互式(`-p`)运行会保留它直到结束。243* **删除服务器**:正在运行的交互式会话在读取到更改后的设置后会断开该服务器。非交互式(`-p`)运行会保留该服务器,直到运行结束。

244 244 

245## 使用允许列表和拒绝列表进行基于策略的控制245## 使用允许列表和拒绝列表进行基于策略的控制

246 246 

mcp.md +248 −250

Details

60 60 

61## 安装 MCP 服务器61## 安装 MCP 服务器

62 62 

63MCP 服务器可以根据您的需求以多种方式进行配置:63MCP 服务器可以根据您的需求通过多种方式进行配置:

64 64 

65### 选项 1:添加远程 HTTP 服务器65### 选项 1:添加远程 HTTP 服务器

66 66 

67HTTP 服务器是连接到远程 MCP 服务器的推荐选项。这是云服务最广泛支持的传输方式。67HTTP 服务器是连接远程 MCP 服务器的推荐选项。这是基于云的服务中支持最广泛的传输方式。

68 68 

69```bash theme={null}69```bash theme={null}

70# 基本语法70# Basic syntax

71claude mcp add --transport http <name> <url>71claude mcp add --transport http <name> <url>

72 72 

73# 真实示例:连接到 Notion73# Real example: Connect to Notion

74claude mcp add --transport http notion https://mcp.notion.com/mcp74claude mcp add --transport http notion https://mcp.notion.com/mcp

75 75 

76# 带有 Bearer 令牌的示例76# Example with Bearer token

77claude mcp add --transport http secure-api https://api.example.com/mcp \77claude mcp add --transport http secure-api https://api.example.com/mcp \

78 --header "Authorization: Bearer your-token"78 --header "Authorization: Bearer your-token"

79```79```

80 80 

81通过 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中的 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范对此传输使用名称 `streamable-http`,因此从服务器文档复制的配置无需修改即可工作。81在 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中通过 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范将此传输方式命名为 `streamable-http`,因此从服务器文档中复制的配置无需修改即可使用。

82 82 

83具有 `url` 但没有 `type` 的 JSON 条目是配置错误,因为 Claude Code 将没有 `type` 的条目读取为 stdio 服务器。Claude Code 跳过该服务器并报告 `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`。83包含 `url` 但没有 `type` 的 JSON 条目属于配置错误,因为 Claude Code 会将没有 `type` 的条目读取为 stdio 服务器。Claude Code 会跳过该服务器并报告 `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`。

84 84 

85只有 SDK 主机应用程序(例如 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md) 应用程序或 [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))可以注册进程内 `"type": "sdk"` 服务器。Claude Code 跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。85只有 SDK 宿主应用程序(例如 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md) 应用程序或[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))才能注册进程内的 `"type": "sdk"` 服务器。Claude Code 会跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。

86 86 

87> [!NOTE]87> [!NOTE]

88>88>

89> 在 `--output-format stream-json` 运行中,Claude Code 还会在 `system/init` 事件的 [`mcp_server_errors` 字段](https://code.claude.com/docs/zh-CN/headless#stream-responses)中报告被跳过的 `--mcp-config` 条目,以便脚本检测到该服务器从未加载。89> 在 `--output-format stream-json` 运行中,Claude Code 还会在 `system/init` 事件的 [`mcp_server_errors` 字段](https://code.claude.com/docs/zh-CN/headless#stream-responses)中报告被跳过的 `--mcp-config` 条目,以便脚本能够检测到该服务器从未加载。

90 90 

91### 选项 2:添加远程 SSE 服务器91### 选项 2:添加远程 SSE 服务器

92 92 

93> [!WARNING]93> [!WARNING]

94>94>

95> SSE(Server-Sent Events)传输已弃用。请在可用的地方使用 HTTP 服务器。95> SSE(Server-Sent Events)传输方式已弃用。请在可用时改用 HTTP 服务器。

96 96 

97某些服务仍然仅公开 SSE 端点。使用与 [HTTP 服务器](#option-1-add-a-remote-http-server) 相同的 `claude mcp add --transport http <name> <url>` 命令添加这些。Claude Code 首先尝试 HTTP 传输,当服务器不接受时切换到 SSE。自动切换需要 Claude Code v2.1.265 或更高版本。97某些服务仍然只提供 SSE 端点。使用与 [HTTP 服务器](#option-1-add-a-remote-http-server)相同的 `claude mcp add --transport http <name> <url>` 命令添加这些服务。Claude Code 会先尝试 HTTP 传输方式,当服务器不接受时切换到 SSE。自动切换需要 Claude Code v2.1.265 或更高版本。

98 98 

99在较早的版本上,或直接通过 SSE 连接,请改为传递 `--transport sse`:99在更早的版本上,或者要直接通过 SSE 连接,请改为传递 `--transport sse`:

100 100 

101```bash theme={null}101```bash theme={null}

102# 基本语法102# Basic syntax

103claude mcp add --transport sse <name> <url>103claude mcp add --transport sse <name> <url>

104 104 

105# 真实示例:连接到 Asana105# Real example: Connect to Asana

106claude mcp add --transport sse asana https://mcp.asana.com/sse106claude mcp add --transport sse asana https://mcp.asana.com/sse

107 107 

108# 带有身份验证标头的示例108# Example with authentication header

109claude mcp add --transport sse private-api https://api.company.com/sse \109claude mcp add --transport sse private-api https://api.company.com/sse \

110 --header "X-API-Key: your-key-here"110 --header "X-API-Key: your-key-here"

111```111```

112 112 

113### 选项 3:添加本地 stdio 服务器113### 选项 3:添加本地 stdio 服务器

114 114 

115Stdio 服务器作为本地进程在您的机器上运行。它们非常适合需要直接系统访问或自定义脚本的工具。115Stdio 服务器以本地进程的形式在您的机器上运行。它们非常适合需要直接访问系统的工具或自定义脚本。

116 116 

117Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,以便您的服务器可以解析项目相对路径,而不依赖于工作目录。这与 hook 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。117Claude Code 会在所启动服务器的环境中将 `CLAUDE_PROJECT_DIR` 设置为项目根目录,这样您的服务器就可以解析相对于项目的路径,而无需依赖工作目录。这与 hook 在其 `CLAUDE_PROJECT_DIR` 变量中接收到的目录相同。请在服务器进程内部读取它,例如在 Node 中使用 `process.env.CLAUDE_PROJECT_DIR`,在 Python 中使用 `os.environ["CLAUDE_PROJECT_DIR"]`。

118 118 

119`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](https://code.claude.com/docs/zh-CN/permissions.md#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。119`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中途添加或移除工作目录时不会改变。如果服务器要将自身的文件系统访问限制在一组允许的目录内,则应改为实现 MCP `roots/list` 请求。Claude Code 对 `roots/list` 的响应包含会话的启动目录,以及您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个[额外工作目录](https://code.claude.com/docs/zh-CN/permissions.md#working-directories)。当该集合发生变化时,Claude Code 会发送 `notifications/roots/list_changed`。

120 120 

121此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目作用域的 `.mcp.json` 条目或 `~/.claude.json` 中的本地或用户作用域服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。121此变量设置在服务器的环境中,而不是 Claude Code 自身的环境中,因此在项目作用域 `.mcp.json` 条目或 `~/.claude.json` 中本地或用户作用域服务器条目的 `command` 或 `args` 中通过 `${VAR}` 展开引用它时,需要提供默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置会直接替换 `${CLAUDE_PROJECT_DIR}`,不需要默认值。

122 122 

123```bash theme={null}123```bash theme={null}

124# 基本语法124# Basic syntax

125claude mcp add [options] <name> -- <command> [args...]125claude mcp add [options] <name> -- <command> [args...]

126 126 

127# 真实示例:添加 Airtable 服务器127# Real example: Add Airtable server

128claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \128claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \

129 -- npx -y airtable-mcp-server129 -- npx -y airtable-mcp-server

130```130```

131 131 

132> [!NOTE]132> [!NOTE]

133>133>

134> 对于 stdio 服务器,`--`(双破折号)将 Claude 自己的选项(例如 `--transport`、`--env` 和 `--scope`)与运行服务器的命令和参数分开。`--` 之后的所有内容都原封不动地传递给服务器。134> 对于 stdio 服务器,`--`(双破折号)将 Claude 自身的选项(例如 `--transport`、`--env` 和 `--scope`)与运行服务器的命令和参数分隔开。`--` 之后的所有内容都会原样传递给服务器。

135>135>

136> 例如:136> 例如:

137>137>

138> * `claude mcp add --transport stdio myserver -- npx server` → 运行 `npx server`138> * `claude mcp add --transport stdio myserver -- npx server` → 运行 `npx server`

139> * `claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080` → 使用环境中的 `KEY=value` 运行 `python server.py --port 8080`139> * `claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080` → 在环境中带有 `KEY=value` 的情况下运行 `python server.py --port 8080`

140>140>

141> 没有 `--`,Claude Code 会尝试将服务器的标志(如上面的 `--port`)解析为自己的选项。141> 如果没有 `--`,Claude Code 会尝试将服务器的标志(例如上面的 `--port`)解析为其自身的选项。

142>142>

143> `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将该名称读取为另一对并拒绝它,因此在 `--env` 和服务器名称之间至少放置一个其他选项,例如 `--transport stdio`。143> `--env` 接受多个 `KEY=value` 对。如果服务器名称紧跟在 `--env` 之后,CLI 会将该名称读取为另一个键值对并拒绝它,因此请在 `--env` 和服务器名称之间至少放置一个其他选项,例如 `--transport stdio`。

144 144 

145#### Claude Code 如何停止 stdio 服务器145#### Claude Code 如何停止 stdio 服务器

146 146 

147当 Claude Code 断开 stdio 服务器时(例如您的会话结束时),它会向服务器进程发送信号,并短暂等待其退出,然后再强制停止它。如果您的服务器在关闭时保存状态或删除锁文件,请针对您的平台处理该信号,并在该时间内完成:147当 Claude Code 断开 stdio 服务器的连接时(例如会话结束时),它会向服务器进程发送信号,并短暂等待其退出,然后再强制停止。如果您的服务器在关闭时保存状态或删除锁文件,请处理您所在平台的信号,并在该时间内完成:

148 148 

149* **在 macOS 和 Linux 上**:Claude Code 发送 `SIGINT`,如果进程在 100 毫秒后仍在运行,则发送 `SIGTERM`,再过 400 毫秒后发送 `SIGKILL`。149* **在 macOS 和 Linux 上**:Claude Code 发送 `SIGINT`,如果 100 毫秒后进程仍在运行,则发送 `SIGTERM`,再过 400 毫秒后发送 `SIGKILL`。

150* **在 Windows 上**:Claude Code 关闭服务器的 stdin,如果进程在 300 毫秒后仍在运行,则结束服务器的进程树。150* **在 Windows 上**:Claude Code 关闭服务器的 stdin,如果 300 毫秒后进程仍在运行,则结束服务器的进程树。

151 151 

152在 v2.1.296 之前,Windows 上的 Claude Code 会立即结束服务器的进程树,而不先关闭 stdin 或等待。152在 v2.1.296 之前,Windows 上的 Claude Code 会立即结束服务器的进程树,既不先关闭 stdin,也不等待。

153 153 

154### 选项 4:添加远程 WebSocket 服务器154### 选项 4:添加远程 WebSocket 服务器

155 155 

156WebSocket 服务器保持持久的双向连接,适合主动向 Claude 推送事件的远程 MCP 服务器。当您的服务器仅响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 都不支持。156WebSocket 服务器保持持久的双向连接,适合主动向 Claude 推送事件的远程 MCP 服务器。当您的服务器只响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 两者都不支持。

157 157 

158在 `.mcp.json` 中或使用 `claude mcp add-json` 配置 WebSocket 服务器:158在 `.mcp.json` 中或使用 `claude mcp add-json` 配置 WebSocket 服务器:

159 159 


162 '{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'162 '{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'

163```163```

164 164 

165`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅限标头,因此在 `headers` 中传递静态令牌或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成一个。`claude mcp add --transport` 标志不接受 `ws`。165`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅通过请求头进行,因此请在 `headers` 中传递静态令牌,或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成令牌。`claude mcp add --transport` 标志不接受 `ws`。

166 166 

167### 从为另一个客户端编写的设置说明添加服务器167### 根据为其他客户端编写的设置说明添加服务器

168 168 

169MCP 服务器不特定于 Claude Code,因此服务器的设置说明可能是为 Claude Desktop、Cursor 或另一个 MCP 客户端编写的,并且不提供 `claude mcp add` 命令。要添加服务器,请在这些说明中查找 URL、启动命令或 JSON 块:169MCP 服务器并非 Claude Code 专用,因此服务器的设置说明可能是为 Claude Desktop、Cursor 或其他 MCP 客户端编写的,并未提供 `claude mcp add` 命令。若仍要添加该服务器,请在这些说明中查找 URL、启动命令或 JSON 块:

170 170 

171* **URL**,例如 `https://mcp.example.com/mcp`:服务器是远程的。171* **URL**,例如 `https://mcp.example.com/mcp`:该服务器是远程服务器。

172* **启动命令**,例如 `npx -y @example/mcp-server`:服务器在您的机器上运行。172* **启动命令**,例如 `npx -y @example/mcp-server`:该服务器在您的机器上运行。

173* **`mcpServers` JSON 块**:为另一个客户端的设置文件编写的配置。173* **`mcpServers` JSON 块**:为其他客户端的设置文件编写的配置。

174 174 

175每一个都是 [安装 MCP 服务器](#installing-mcp-servers) 中四个选项之一接受的输入。找到您下面拥有的形状,将其转换为 Claude Code 接受的命令。除非您添加 `--scope project` 或 `--scope user`,否则每个命令都写入 [本地作用域](#local-scope)。175每一种都是[安装 MCP 服务器](#installing-mcp-servers)中四个选项所接受的输入之一。请在下方找到您所拥有的形式,将其转换为 Claude Code 接受的命令。除非您添加 `--scope project` 或 `--scope user`,否则每条命令都会写入[本地作用域](#local-scope)。

176 176 

177#### 从 URL 添加服务器177#### 根据 URL 添加服务器

178 178 

179URL 表示服务器是远程的。对于 `https://` 端点,使用 `--transport http` 添加它,或在说明说端点使用 SSE 时遵循 [选项 2](#option-2-add-a-remote-sse-server)。对于 `wss://` 端点,改为使用 [选项 4](#option-4-add-a-remote-websocket-server),因为 `--transport` 不接受 `ws`:179URL 意味着该服务器是远程服务器。对于 `https://` 端点,使用 `--transport http` 添加;如果说明中指出该端点使用 SSE,请按照[选项 2](#option-2-add-a-remote-sse-server) 操作。对于 `wss://` 端点,请改用[选项 4](#option-4-add-a-remote-websocket-server),因为 `--transport` 不接受 `ws`:

180 180 

181```bash theme={null}181```bash theme={null}

182claude mcp add --transport http example https://mcp.example.com/mcp182claude mcp add --transport http example https://mcp.example.com/mcp

183```183```

184 184 

185如果说明还提供 API 密钥或令牌标头,请使用 `--header` 传递它,如 [选项 1](#option-1-add-a-remote-http-server) 所示。185如果说明中还提供了 API 密钥或令牌请求头,请按照[选项 1](#option-1-add-a-remote-http-server) 中所示,使用 `--header` 传递。

186 186 

187#### 从 `npx`、`uvx` 或二进制命令添加服务器187#### 根据 `npx`、`uvx` 或二进制命令添加服务器

188 188 

189启动命令表示服务器作为本地 stdio 进程运行。将整个命令放在 `--` 之后,以便 Claude Code 将标志(如 `-y`)传递给启动服务器的命令,而不是将它们读取为自己的选项。使用 `--env` 传递说明要求的任何环境变量,在服务器名称之后和 `--` 之前:189启动命令意味着该服务器作为本地 stdio 进程运行。将整个命令放在 `--` 之后,这样 Claude Code 会将 `-y` 等标志传递给启动服务器的命令,而不是将其读取为自身的选项。使用 `--env` 传递说明中要求的任何环境变量,放在服务器名称之后、`--` 之前:

190 190 

191```bash theme={null}191```bash theme={null}

192claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server192claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server

193```193```

194 194 

195[选项 3](#option-3-add-a-local-stdio-server) 完整涵盖 `--` 分隔符。195[选项 3](#option-3-add-a-local-stdio-server) 完整介绍了 `--` 分隔符。

196 196 

197#### 从 `mcpServers` JSON 块添加服务器197#### 根据 `mcpServers` JSON 块添加服务器

198 198 

199为另一个 MCP 客户端(例如 Claude Desktop)编写的 `mcpServers` 块使用 Claude Code 读取的包装器键和条目形状。将 `mcpServers` 内的对象(而不是包装器)传递给 `claude mcp add-json`。两种条目需要先修复:199为其他 MCP 客户端(例如 Claude Desktop)编写的 `mcpServers` 块,使用的包装键和条目结构与 Claude Code 读取的相同。向 `claude mcp add-json` 传递 `mcpServers` 内部的对象,而不是包装层。有两种条目需要先修复:

200 200 

201* **`url` 没有 `type`**:添加 `"type": "http"`、`"type": "sse"` 或 `"type": "ws"` 以匹配端点。Claude Code 将没有 `type` 的条目读取为 stdio 服务器,因此没有 `type` 的 `url` 条目会失败。201* **有 `url` 但没有 `type`**:添加 `"type": "http"`、`"type": "sse"` 或 `"type": "ws"` 以匹配端点。Claude Code 会将没有 `type` 的条目读取为 stdio 服务器,因此没有 `type` 的 `url` 条目会失败。

202* **键包含除字母、数字、连字符和下划线以外的字符**:选择仅使用这些字符的服务器名称。否则键就是服务器名称。202* **键包含字母、数字、连字符和下划线以外的字符**:选择仅使用这些字符的服务器名称。否则,键即为服务器名称。

203 203 

204例如,此块:204例如,这个块:

205 205 

206```json theme={null}206```json theme={null}

207{207{


214}214}

215```215```

216 216 

217变成此命令:217会变成这条命令:

218 218 

219```bash theme={null}219```bash theme={null}

220claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'220claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'

221```221```

222 222 

223[从 JSON 配置添加 MCP 服务器](#add-mcp-servers-from-json-configuration) 涵盖 `add-json` 的 shell 转义和 `--scope` 标志。要与您的团队共享服务器,请改为添加 `--scope project`,或在项目根目录的 `.mcp.json` 中的 `mcpServers` 下添加条目并提交它。[项目作用域](#project-scope) 涵盖 Claude Code 如何加载和批准该文件。223[从 JSON 配置添加 MCP 服务器](#add-mcp-servers-from-json-configuration)介绍了 shell 转义以及 `add-json` 的 `--scope` 标志。若要改为与团队共享该服务器,请添加 `--scope project`,或者在项目根目录的 `.mcp.json` 中的 `mcpServers` 下添加该条目并提交。[项目作用域](#project-scope)介绍了 Claude Code 如何加载和批准该文件。

224 224 

225每个 `claude mcp add` 和 `claude mcp add-json` 命令在成功时打印 `Added ...` 行。要检查 Claude Code 是否已连接,请运行 `claude mcp get <name>`;[服务器状态](#server-status) 涵盖它显示的状态和 `.mcp.json` 服务器的批准步骤。225每条 `claude mcp add` 和 `claude mcp add-json` 命令在成功时都会打印一行 `Added ...`。要检查 Claude Code 是否已连接,请运行 `claude mcp get <name>`;[服务器状态](#server-status)介绍了其显示的状态以及 `.mcp.json` 服务器的批准步骤。

226 226 

227### 管理您的服务器227### 管理您的服务器

228 228 

229配置后,您可以使用这些命令管理您的 MCP 服务器:229配置完成后,您可以使用以下命令管理 MCP 服务器:

230 230 

231```bash theme={null}231```bash theme={null}

232# 列出所有配置的服务器232# List all configured servers

233claude mcp list233claude mcp list

234 234 

235# 获取特定服务器的详细信息235# Get details for a specific server

236claude mcp get notion236claude mcp get notion

237 237 

238# 删除服务器238# Remove a server

239claude mcp remove notion239claude mcp remove notion

240 240 

241# (在 Claude Code 中)检查服务器状态241# (within Claude Code) Check server status

242/mcp242/mcp

243```243```

244 244 

245移除远程服务器时,Claude Code 还会删除它为该服务器存储的 OAuth 令牌和客户端注册信息。Claude Code 不会在签发这些令牌的授权服务器上撤销令牌。如果授权服务器支持撤销,要撤销令牌,请在运行 `claude mcp remove <name>` 之前,先在 shell 中运行 [`claude mcp logout <name>`](#authenticate-from-the-command-line)。245当您移除远程服务器时,Claude Code 还会删除它为该服务器存储的 OAuth 令牌和客户端注册信息。Claude Code 不会在签发这些令牌的授权服务器上撤销令牌。若要在授权服务器支持撤销的情况下撤销令牌,请在 `claude mcp remove <name>` 之前,在 shell 中运行 [`claude mcp logout <name>`](#authenticate-from-the-command-line)。

246 246 

247#### 服务器状态247#### 服务器状态

248 248 

249`claude mcp add` 通过打印 `Added ...` 行确认成功添加,这意味着配置已写入。如果命令改为打印 `was not saved` 消息,请参阅 [MCP 服务器未保存或删除](https://code.claude.com/docs/zh-CN/errors.md#mcp-server-was-not-saved-or-removed);对于 `may not have been saved` 消息,请参阅 [MCP 服务器可能未保存或删除](https://code.claude.com/docs/zh-CN/errors.md#mcp-server-may-not-have-been-saved-or-removed)。249`claude mcp add` 通过打印一行 `Added ...` 来确认添加成功,这表示配置已写入。如果该命令改为打印 `was not saved` 消息,请参阅 [MCP 服务器未被保存或移除](https://code.claude.com/docs/zh-CN/errors.md#mcp-server-was-not-saved-or-removed);对于 `may not have been saved` 消息,请参阅 [MCP 服务器可能未被保存或移除](https://code.claude.com/docs/zh-CN/errors.md#mcp-server-may-not-have-been-saved-or-removed)。

250 250 

251`claude mcp list` 在它列出的每个服务器旁边显示健康状态,例如 `✔ Connected`、`! Needs authentication` 或 `✘ Failed to connect`。失败状态意味着 Claude Code 无法连接到该服务器,而不是列表命令失败。251`claude mcp list` 会在列出的每个服务器旁显示健康状态,例如 `✔ Connected`、`! Needs authentication` 或 `✘ Failed to connect`。失败状态表示 Claude Code 无法连接到该服务器,而不是 list 命令执行失败。

252 252 

253此列表中的状态报告配置决策而不是连接尝试,因此 Claude Code 在不连接到服务器的情况下打印它们:253此列表中的状态反映的是配置决定,而非连接尝试,因此 Claude Code 会在不连接服务器的情况下打印它们:

254 254 

255* ``⏸ Pending approval (run `claude` to approve)``:来自 `.mcp.json`、您尚未批准的项目作用域服务器。Claude Code 会在 `claude mcp list` 和 `claude mcp get <name>` 中都显示此状态。以交互方式运行 `claude` 以审查并批准它。255* ``⏸ Pending approval (run `claude` to approve)``:来自 `.mcp.json`、您尚未批准的项目作用域服务器。Claude Code 会在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。以交互方式运行 `claude` 来审查并批准它。

256* `✘ Rejected (see disabledMcpjsonServers in settings)`:由 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目拒绝的 `.mcp.json` 服务器。Claude Code 仅在 `claude mcp get <name>` 中显示它。256* `✘ Rejected (see disabledMcpjsonServers in settings)`:被 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目拒绝的 `.mcp.json` 服务器。Claude Code 仅在 `claude mcp get <name>` 中显示它。

257* `⊘ Disabled for this project (re-enable via /mcp)`:项目的 [`disabledMcpServers`](#disable-a-server-without-removing-it) 列表命名的服务器。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。从 `/mcp` 面板重新打开服务器。257* `⊘ Disabled for this project (re-enable via /mcp)`:项目的 [`disabledMcpServers`](#disable-a-server-without-removing-it) 列表中指明的服务器。Claude Code 会在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。从 `/mcp` 面板重新启用该服务器。

258* `✘ Blocked by enterprise managed policy`:被您组织的某项策略拒绝的服务器。Claude Code 会在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。被[托管 MCP 配置](https://code.claude.com/docs/zh-CN/managed-mcp.md#how-restrictions-appear-to-users)中的允许列表、拒绝列表或其他限制阻止的服务器,会在这两个命令中都被隐藏,而不是以此状态显示。请询问您的管理员是哪项策略阻止了该服务器。258* `✘ Blocked by enterprise managed policy`:被您组织的某项策略拒绝的服务器。Claude Code 会在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。被[托管 MCP 配置](https://code.claude.com/docs/zh-CN/managed-mcp.md#how-restrictions-appear-to-users)中的允许列表、拒绝列表或其他限制阻止的服务器会在这两个命令中被隐藏,而不是以此状态显示。请询问您的管理员是哪项策略阻止了该服务器。

259 259 

260#### 项目服务器批准和工作区信任260#### 项目服务器批准与工作区信任

261 261 

262`claude mcp list` 和 `claude mcp get` 仅从未签入仓库的设置文件中读取 `.mcp.json` 批准,直到您通过在其中运行 `claude` 并接受工作区信任对话框来信任工作区。克隆的仓库无法批准自己的服务器:提交到项目的 `.claude/settings.json` 的 [`enableAllProjectMcpServers`](https://code.claude.com/docs/zh-CN/settings-reference#enableallprojectmcpservers) 或 [`enabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#enabledmcpjsonservers) 在不受信任的文件夹中被忽略,服务器保持在 `⏸ Pending approval` 而不是被连接和健康检查。262在您通过在工作区中运行 `claude` 并接受工作区信任对话框来信任该工作区之前,`claude mcp list` 和 `claude mcp get` 只会从未签入仓库的设置文件中读取 `.mcp.json` 批准。克隆的仓库无法批准其自身的服务器:在不受信任的文件夹中,提交到项目 `.claude/settings.json` 中的 [`enableAllProjectMcpServers`](https://code.claude.com/docs/zh-CN/settings-reference#enableallprojectmcpservers) 或 [`enabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#enabledmcpjsonservers) 会被忽略,服务器将保持 `⏸ Pending approval` 状态,而不会被连接和进行健康检查。

263 263 

264这些来源的批准仍然适用于不受信任的文件夹:264来自以下来源的批准在不受信任的文件夹中仍然有效:

265 265 

266* 您的用户 `~/.claude/settings.json`266* 您的用户 `~/.claude/settings.json`

267* 托管设置267* 托管设置

268* 使用 `--settings` 传递的设置268* 通过 `--settings` 传递的设置

269 269 

270Claude Code 也应用来自未跟踪的 `.claude/settings.local.json` 的批准,但它运行 git 来检查文件是否被跟踪,并且仅在 [受信任的文件夹](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust) 中运行该检查。在您从未信任的文件夹中,Claude Code 等待信任对话框后才应用文件的批准,除非该文件夹是您自己的配置主目录:您的主目录,或其 `.claude` 您已设置为 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars) 的目录。在 v2.1.207 之前,Claude Code 即使在您从未信任的文件夹中也应用来自未跟踪的 `.claude/settings.local.json` 的批准。270Claude Code 也会应用来自未跟踪的 `.claude/settings.local.json` 的批准,但它会运行 git 来检查该文件是否被跟踪,并且只在[受信任的文件夹](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)中运行该检查。在您从未信任过的文件夹中,Claude Code 会等待信任对话框之后再应用该文件的批准,除非该文件夹是您自己的配置主目录:您的主目录,或者其 `.claude` 被您设置为 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars) 的目录。在 v2.1.207 之前,即使在您从未信任过的文件夹中,Claude Code 也会应用来自未跟踪的 `.claude/settings.local.json` 的批准。

271 271 

272任何设置文件中的 `disabledMcpjsonServers` 条目仍然拒绝服务器。272任何设置文件中的 `disabledMcpjsonServers` 条目仍会拒绝该服务器。

273 273 

274#### 服务器状态详情274#### 服务器状态详情

275 275 

276在 `/mcp` 中(包括服务器的菜单)和 [`/plugin`](https://code.claude.com/docs/zh-CN/plugins/install) 管理器中,您之前使用过的远程 HTTP 或 SSE 服务器可以显示 `cached` 状态,例如 `cached 2h ago · connects on first use · 5 tools`。Claude Code 从发现缓存加载了服务器的工具列表,该缓存保存在上一个会话中,而不是在启动时连接,Claude Code 在 Claude 首次调用服务器的工具之一时连接服务器。工具从您的第一条消息开始可用,因此您无需执行任何操作。发现缓存及其 `cached` 状态需要 Claude Code v2.1.221 或更高版本。276在 `/mcp`(包括其中的服务器菜单)以及 [`/plugin`](https://code.claude.com/docs/zh-CN/plugins/install) 管理器中,您以前使用过的远程 HTTP 或 SSE 服务器可能显示 `cached` 状态,例如 `cached 2h ago · connects on first use · 5 tools`。Claude Code 从其发现缓存(保存于之前的会话中)加载了该服务器的工具列表,而不是在启动时连接,并且 Claude Code 会在 Claude 首次调用该服务器的某个工具时连接该服务器。这些工具从您的第一条消息起即可使用,因此您无需执行任何操作。发现缓存及其 `cached` 状态需要 Claude Code v2.1.221 或更高版本。

277 277 

278发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](https://code.claude.com/docs/zh-CN/env-vars) 打开它,或设置为 `0` 即使推出已启用它也保持关闭。在 v2.1.238 之前,缓存默认打开。278除非逐步推出已为您的账户启用发现缓存,否则它默认处于关闭状态。设置 [`MCP_DISCOVERY_CACHE=1`](https://code.claude.com/docs/zh-CN/env-vars) 以启用它,或设置为 `0` 以在推出已启用它的情况下仍保持关闭。在 v2.1.238 之前,该缓存默认开启。

279 279 

280当您从 `/mcp` 中的服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。**Reconnect** 在已连接或失败的服务器上也会丢弃它;在 `cached` 服务器上,**Reconnect** 会立即连接服务器并保留条目。丢弃条目后,Claude Code 下次连接到服务器时,会从服务器而不是从缓存获取工具列表。280当您在 `/mcp` 中从服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。对于已连接或失败的服务器,**Reconnect** 同样会丢弃它;对于 `cached` 服务器,**Reconnect** 会立即连接服务器并保留该条目。丢弃条目后,Claude Code 下次连接该服务器时,会从服务器而不是缓存获取工具列表。

281 281 

282##### 连接失败与未配置的服务器282##### 连接失败与未配置的服务器

283 283 

284当服务器状态为 `✘ Failed to connect` 时,`claude mcp list` 会在该状态行后附加失败详情,而 `claude mcp get <name>` 会在 `Issue:` 行中显示它。详情包括 HTTP 状态或错误代码,以及服务器返回的任何错误文本。`/mcp` 中服务器的详情视图会在其 `Issue:` 行中包含同样由服务器报告的文本。284当服务器状态为 `✘ Failed to connect` 时,`claude mcp list` 会将失败详情附加到该状态行,`claude mcp get <name>` 会在 `Issue:` 行中显示它。详情包括 HTTP 状态或错误代码,以及服务器返回的任何错误文本。`/mcp` 中该服务器的详情视图在其 `Issue:` 行中包含相同的服务器报告文本。

285 285 

286Claude Code 会从这些详情中删除类似凭据的文本,并且绝不包含展开后的服务器 URL,因为它可能携带机密信息。Claude Code 不会在 `✘ Connection error` 状态后附加任何详情,因为它在那里打印的异常文本可能嵌入该 URL。286Claude Code 会从此详情中删去类似凭据的文本,并且从不包含展开后的服务器 URL,因为其中可能携带机密信息。Claude Code 不会在 `✘ Connection error` 状态后附加详情,因为它在那里打印的异常文本可能嵌入该 URL。

287 287 

288当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如果有),例如 `https://mcp.example.com`。288当您从 `/mcp` 完成身份验证后,连接仍因 HTTP 状态或传输错误代码而失败时,Claude Code 会将该代码和服务器 URL 的源添加到尝试后打印的消息中。源是协议和主机,如果 URL 中指定了端口则还包括端口,例如 `https://mcp.example.com`。

289 289 

290* 路径和查询永远不会出现在该消息中。290* 路径和查询字符串永远不会出现在该消息中。

291* 对于本地、项目或用户 [作用域](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。291* 对于本地、项目或用户[作用域](#mcp-installation-scopes)中的服务器,或托管 MCP 配置中的服务器,源显示的是该配置中所写的主机,因此主机中的 `${VAR}` 引用不会在消息中展开。

292* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。292* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示源。

293 293 

294配置为空 `url` 的远程服务器在 `/mcp`、`claude mcp list` 和 [`/plugin`](https://code.claude.com/docs/zh-CN/plugins/install) 管理器中显示为 `not configured`,Claude Code 不尝试连接到它。插件可以包含这样的占位符条目,用于您稍后配置的连接器,因此 Claude Code 不将其报告为错误或设置问题。`/mcp` 中的服务器详情视图显示 `No URL configured for this server`;设置条目的 `url` 以连接它。294配置中 `url` 为空的远程服务器会在 `/mcp`、`claude mcp list` 和 [`/plugin`](https://code.claude.com/docs/zh-CN/plugins/install) 管理器中显示为 `not configured`,并且 Claude Code 不会尝试连接它。插件可以为您稍后配置的连接器包含此类占位条目,因此 Claude Code 不会将其报告为错误或设置问题。`/mcp` 中该服务器的详情视图显示 `No URL configured for this server`;设置该条目的 `url` 即可连接它。

295 295 

296#### 配置警告296#### 配置警告

297 297 

298Claude Code 警告以下配置问题。每个条目说明 Claude Code 检查什么以及如何清除警告:298Claude Code 会对以下配置问题发出警告。每个条目都说明了 Claude Code 检查的内容以及如何消除警告:

299 299 

300* **隐藏的空格**:当 MCP 配置值携带隐藏的前导或尾随空格时,Claude Code 发出警告,这通常来自粘贴带有尾随换行符的令牌。Claude Code 检查 `command`、`url`、每个 `args` 条目以及 `env` 和 `headers` 下的值和键名称。Claude Code 在 `claude mcp list` 输出和 `/mcp` 中显示警告,命名受影响的字段而不回显其值,例如 `Leading or trailing whitespace in: headers.Authorization`。Claude Code 不修剪空格并完全按照写入的方式使用值,因此请编辑配置以删除它。300* **隐藏的空白字符**:当 MCP 配置值带有隐藏的前导或尾随空白字符时,Claude Code 会发出警告,这通常来自粘贴带有尾随换行符的令牌。Claude Code 会检查 `command`、`url`、每个 `args` 条目,以及 `env` 和 `headers` 下的值和键名。Claude Code 会在 `claude mcp list` 输出和 `/mcp` 中显示警告,指明受影响的字段而不回显其值,例如 `Leading or trailing whitespace in: headers.Authorization`。Claude Code 不会修剪空白字符,而是完全按原样使用这些值,因此请编辑配置以删除它们。

301* **在多个作用域中使用相同名称**:如果您在多个 [作用域](#mcp-installation-scopes) 中定义相同的服务器名称,具有不同的端点,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告冲突。Claude Code 按端点存储 OAuth 登录,因此当您在一个项目中对加载的定义进行身份验证时,您仍然需要在加载不同定义的项目中单独登录。保留您想要的端点并使用 `claude mcp remove <name> --scope <scope>` 删除其他端点。在警告中,Claude Code 按您的配置中所写的形式引用每个作用域的端点,[`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 保持未展开,因此它永远不显示已解析的值,例如 API 密钥。301* **多个作用域中的同名服务器**:如果您在多个[作用域](#mcp-installation-scopes)中定义了同名但端点不同的服务器,Claude Code 会在 `claude mcp list` 输出和 `/mcp` 中警告该冲突。Claude Code 按端点存储 OAuth 登录信息,因此当您对在某个项目中加载的定义进行身份验证后,在加载不同定义的项目中仍需单独登录。保留您需要的端点,并使用 `claude mcp remove <name> --scope <scope>` 移除其他端点。在警告中,Claude Code 按配置中所写的内容引用每个作用域的端点,[`${VAR}` 引用](#environment-variable-expansion-in-mcp-json)不会展开,因此绝不会显示诸如 API 密钥之类的解析值。

302* **保留名称**:Claude Code 保留其内置服务器的名称,包括 `workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义具有保留名称的服务器,Claude Code 在加载时跳过它并显示警告,要求您重命名它。`claude mcp add` 拒绝保留名称并出现错误。`Claude Preview` 和 `Claude Browser` 都命名 [Claude Code 桌面应用的预览窗格](https://code.claude.com/docs/zh-CN/desktop.md#preview-your-app) 使用的内置服务器。302* **保留名称**:Claude Code 保留其内置服务器的名称,包括 `workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义了使用保留名称的服务器,Claude Code 会在加载时跳过它,并显示一条要求您重命名的警告。`claude mcp add` 会以错误拒绝保留名称。`Claude Preview` 和 `Claude Browser` 都指代 [Claude Code 桌面应用的预览窗格](https://code.claude.com/docs/zh-CN/desktop.md#preview-your-app)所使用的内置服务器。

303* **缺少环境变量**:如果服务器配置中的 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 命名未设置且没有 `:-default` 的变量,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告,命名变量,并仍然使用 `${VAR}` 文本未展开加载服务器。设置变量或添加 `${VAR:-default}` 备用值。在远程服务器的 `url` 和 `headers` 中,某些凭据变量 [读取为空](#credential-variables-that-read-as-empty) 而不显示警告。303* **缺少环境变量**:如果服务器配置中的 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json)指向一个未设置且没有 `:-default` 的变量,Claude Code 会在 `claude mcp list` 输出和 `/mcp` 中发出警告并指明该变量,同时仍以未展开的 `${VAR}` 文本加载该服务器。请设置该变量或添加 `${VAR:-default}` 备用值。在远程服务器的 `url` 和 `headers` 中,某些凭据变量则会[读取为空](#credential-variables-that-read-as-empty),且不发出警告。

304 304 

305#### 工具可用性305#### 工具可用性

306 306 

307`/mcp` 面板在每个连接的服务器旁边显示工具计数,并标记声称工具能力但不公开工具的服务器。307`/mcp` 面板会在每个已连接服务器旁显示工具数量,并标记那些声明了工具能力但未公开任何工具的服务器。

308 308 

309##### 云端会话中的工具数量309##### 云端会话中的工具数量

310 310 

311在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)中,诸如 `3 of 13 tools available` 之类的计数表示 Claude 无法使用另外 10 个工具。请检查以下原因(以及其他可能的原因):311在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)中,诸如 `3 of 13 tools available` 的计数意味着 Claude 无法使用其余 10 个工具。请检查以下原因(包括但不限于):

312 312 

313* **仓库 `.claude/settings.json` 中的拒绝规则指定了该工具或其整个服务器**:如果[您的会话会读取该文件](https://code.claude.com/docs/zh-CN/settings.md#settings-in-cloud-sessions),请移除该[规则](https://code.claude.com/docs/zh-CN/permissions.md#mcp)313* **仓库 `.claude/settings.json` 中的拒绝规则指明了该工具或其整个服务器**:如果[您的会话读取该文件](https://code.claude.com/docs/zh-CN/settings.md#settings-in-cloud-sessions),请移除该[规则](https://code.claude.com/docs/zh-CN/permissions.md#mcp)

314* **工具的完整名称超过 128 个字符**:按照[名称过长的处理步骤](https://code.claude.com/docs/zh-CN/errors.md#mcp-tool-name-over-128-characters)操作314* **工具的完整名称超过 128 个字符**:请按照[名称过长的处理步骤](https://code.claude.com/docs/zh-CN/errors.md#mcp-tool-name-over-128-characters)操作

315* **服务器是为其自身界面而非为 Claude 列出该工具**:如果您维护该服务器,请将 `model` 添加到该工具的 `_meta.ui.visibility` 中,以便将该工具提供给 Claude。否则,无需修复任何内容。315* **服务器为其自身界面而非为 Claude 列出该工具**:如果您维护该服务器,请将 `model` 添加到该工具的 `_meta.ui.visibility` 中,以便将该工具提供给 Claude。否则,无需修复任何内容。

316 316 

317##### 来自仍在连接中的服务器的工具317##### 来自仍在连接中的服务器的工具

318 318 

319如果您的请求需要来自仍在后台连接的服务器的工具,Claude 会在继续之前等待该服务器。等待的方式取决于您的配置:319如果您的请求需要来自仍在后台连接的服务器的工具,Claude 会等待该服务器后再继续。等待的方式取决于您的配置:

320 320 

321* **使用 [工具搜索](#scale-with-mcp-tool-search)(默认)**:等待发生在 `ToolSearch` 调用内。321* **使用[工具搜索](#scale-with-mcp-tool-search)(默认)时**:等待发生在 `ToolSearch` 调用内部。

322* **不使用工具搜索**:Claude 改为使用 `WaitForMcpServers` 工具。不使用工具搜索的配置包括 `ENABLE_TOOL_SEARCH=false`,以及 Google Cloud 的 Agent Platform 上早于 Claude Opus 4.5、Claude Sonnet 4.5 和 Claude Haiku 4.5 的模型。对于 `ANTHROPIC_BASE_URL` 网关,请参阅 [通过 LLM 网关使用工具搜索](#tool-search-through-a-gateway)。322* **不使用工具搜索时**:Claude 改用 `WaitForMcpServers` 工具。不使用工具搜索的配置包括 `ENABLE_TOOL_SEARCH=false`,以及在 Google Cloud 的 Agent Platform 上使用早于 Claude Opus 4.5、Claude Sonnet 4.5 和 Claude Haiku 4.5 的模型。对于 `ANTHROPIC_BASE_URL` 网关,请参阅[通过 LLM 网关使用工具搜索](#tool-search-through-a-gateway)。

323* **在 Microsoft Foundry [部署托管在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)**:Claude 在工具搜索路径上启动而不是使用 `WaitForMcpServers`,因为 Claude Code 仅从 API 发现部署的服务器端拒绝。Claude Code 将该部署切换到 [前期加载](#scale-with-mcp-tool-search) 后,来自完成连接的服务器的工具在 Claude 的下一个请求中变为可用。323* **在 Microsoft Foundry [托管于 Azure 的部署](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)上**:Claude 从工具搜索路径开始,而不是使用 `WaitForMcpServers`,因为 Claude Code 只能从 API 发现该部署在服务器端的拒绝。在 Claude Code 将该部署切换为[预先加载](#scale-with-mcp-tool-search)后,来自完成连接的服务器的工具会在 Claude 的下一次请求中可用。

324 324 

325启用工具搜索后,当服务器在 Claude 工作时完成连接时,Claude Code 在同一轮次的下一个请求中将服务器的工具名称列出给 Claude。Claude 然后可以搜索和调用这些工具,而无需等待您的下一条消息。325启用工具搜索后,当某个服务器在 Claude 工作期间完成连接时,Claude Code 会在同一轮次中 Claude 的下一次请求里向 Claude 列出该服务器的工具名称。Claude 随后无需等待您的下一条消息,即可搜索并调用这些工具。

326 326 

327恢复会话后,Claude 可以在工具的 MCP 服务器仍在连接时调用已保存对话中的工具。当服务器处于首次连接尝试时,Claude Code 会将该调用保留最多 10 秒,并在工具可用后运行它。如果服务器未能及时连接,或者已在 [失败尝试后重试](#automatic-reconnection),调用会失败并返回 `No such tool available` [工具错误](https://code.claude.com/docs/zh-CN/errors.md#no-such-tool-available)。327恢复会话后,Claude 可能会在某个工具的 MCP 服务器仍在连接时调用已保存对话中的该工具。当服务器处于首次连接尝试期间,Claude Code 会将该调用保持最多 10 秒,并在工具可用后运行它。如果服务器未能及时连接,或者它已经在[失败尝试后重试](#automatic-reconnection),该调用会以 `No such tool available` [工具错误](https://code.claude.com/docs/zh-CN/errors.md#no-such-tool-available)失败。

328 328 

329### 禁用服务器而不删除它329### 禁用服务器而不移除它

330 330 

331在 `/mcp` 面板中切换服务器关闭,以停止 Claude Code 连接到它,而不丢失其配置。Claude Code 仍然在 `/mcp` 中列出服务器,标记为禁用。331在 `/mcp` 面板中关闭某个服务器,即可阻止 Claude Code 连接它,同时不丢失其配置。Claude Code 仍会在 `/mcp` 中列出该服务器,并标记为已禁用。

332 332 

333当您切换服务器时,Claude Code 在 `~/.claude.json` 中按项目记录您的选择,在两个涵盖不相交服务器集的列表之一中:333当您切换服务器时,Claude Code 会按项目将您的选择记录在 `~/.claude.json` 中两个列表之一里,这两个列表涵盖互不相交的服务器集合:

334 334 

335* `disabledMcpServers`:用户配置的服务器、插件服务器、您的组织 [通过托管设置提供](https://code.claude.com/docs/zh-CN/managed-mcp.md#provide-servers-through-managed-settings) 的服务器、Claude Code [自己获取](#how-connectors-reach-claude-code) 的 claude.ai 连接器以及默认打开的内置服务器的选择退出列表。Claude Code 不连接您在此处列出的服务器。当您使用 [禁用 claude.ai 连接器](#disable-claude-ai-connectors) 中描述的按项目 `/mcp` 切换禁用 claude.ai 连接器时,Claude Code 在此列表下使用其显示名称(例如 `claude.ai Slack`)写入它。335* `disabledMcpServers`:一个选择退出列表,适用于用户配置的服务器、插件服务器、您的组织[通过托管设置提供的服务器](https://code.claude.com/docs/zh-CN/managed-mcp.md#provide-servers-through-managed-settings)、Claude Code [自行获取的](#how-connectors-reach-claude-code) claude.ai 连接器,以及默认开启的内置服务器。Claude Code 不会连接您在此处列出的服务器。当您使用[禁用 claude.ai 连接器](#disable-claude-ai-connectors)中所述的按项目 `/mcp` 开关禁用某个 claude.ai 连接器时,Claude Code 会以其显示名称将其写入此列表,例如 `claude.ai Slack`。

336* `enabledMcpServers`:默认关闭的内置服务器(例如 `computer-use`)的选择加入列表。Claude Code 仅当您在此处列出它时才连接默认关闭的服务器。336* `enabledMcpServers`:一个选择加入列表,适用于默认关闭的内置服务器,例如 `computer-use`。只有当您在此处列出默认关闭的服务器时,Claude Code 才会连接它。

337 337 

338Claude Code 为每个服务器查询恰好两个列表之一,因此两个列表都不会覆盖另一个。如果您将常规服务器添加到 `enabledMcpServers`,或将默认关闭的内置服务器添加到 `disabledMcpServers`,Claude Code 会忽略该条目。338Claude Code 对每个服务器只参考这两个列表中的一个,因此两个列表都不会覆盖另一个。如果您将常规服务器添加到 `enabledMcpServers`,或将默认关闭的内置服务器添加到 `disabledMcpServers`,Claude Code 会忽略该条目。

339 339 

340`disabledMcpServers` 和 `enabledMcpServers` 与 [`enabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#enabledmcpjsonservers) 和 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 无关,后者控制项目的 `.mcp.json` 文件中定义的服务器的批准。340`disabledMcpServers` 和 `enabledMcpServers` 与 [`enabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#enabledmcpjsonservers) 和 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 无关,后两者控制对项目 `.mcp.json` 文件中所定义服务器的批准。

341 341 

342### MCP 客户端运行时342### MCP 客户端运行时

343 343 

344Claude Code 通过两个客户端运行时之一连接到 MCP 服务器。v1 运行时基于 MCP TypeScript SDK 1.x。v2 运行时是 [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/) 上的相同代码,它添加了 MCP 协议修订版 2026-07-28。本页的其余部分适用于两个运行时,除非某个部分指明 v2 运行时。344Claude Code 通过两种客户端运行时之一连接到 MCP 服务器。v1 运行时基于 MCP TypeScript SDK 1.x 构建。v2 运行时是基于 [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/) 的相同代码,增加了 MCP 协议修订版 2026-07-28。除非某个章节明确指出 v2 运行时,否则本页其余内容同时适用于两种运行时。

345 345 

346Claude Code 在每次启动时选择一个运行时,并在您退出前保持它。在 [获取功能标志](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching) 的会话中,它在 Claude Code v2.1.232 或更高版本上使用 v2 运行时。346Claude Code 每次启动时选择一种运行时,并在退出前一直使用它。在[获取功能标志](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching)的会话中,Claude Code v2.1.232 或更高版本使用 v2 运行时。

347 347 

348在不获取功能标志的会话中,Claude Code 在 Claude Code v2.1.274 或更高版本上默认使用 v2 运行时:348在不获取功能标志的会话中,Claude Code v2.1.274 或更高版本默认使用 v2 运行时:

349 349 

350* Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上的会话,除非嵌入 Claude Code 的主机平台设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars)350* 在 Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上的会话,除非嵌入 Claude Code 的宿主平台设置了 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars)

351* 通过 [Claude 应用网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway) 登录的会话351* 通过 [Claude 应用网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway)登录的会话

352* 您关闭遥测或功能标志获取的会话,例如使用 `DISABLE_TELEMETRY`352* 您关闭了遥测或功能标志获取的会话,例如使用 `DISABLE_TELEMETRY`

353 353 

354在 v2 上,Claude Code 还会:354在 v2 上,Claude Code 还会:

355 355 

356* 询问 HTTP、stdio 和 claude.ai 连接器服务器是否支持较新的修订版,并与支持的服务器一起使用它。这包括云端会话和 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 会话的连接器。Claude Code 与 v1 一样连接到其他所有服务器。356* 询问 HTTP、stdio 和 claude.ai 连接器服务器是否支持较新的修订版,并对支持的服务器使用该修订版。这包括云端会话和 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 会话的连接器。Claude Code 以与 v1 相同的方式连接所有其他服务器。

357* 通过 [它保持打开的流](#notification-streams-on-the-v2-runtime) 从使用较新修订版的服务器接收 `list_changed` 通知。357* 通过[其保持打开的流](#notification-streams-on-the-v2-runtime)接收来自使用较新修订版的服务器的 `list_changed` 通知。

358* 不注册在较新修订版上连接的 [频道](#push-messages-with-channels) 服务器,因为该修订版无法携带频道消息。358* 不注册以较新修订版连接的[频道](#push-messages-with-channels)服务器,因为该修订版无法传递频道消息。

359* 当授权响应指明意外的发行者时,使 [MCP OAuth 登录](#authenticate-with-remote-mcp-servers) 失败。359* 当授权响应指明了意外的颁发者时,使 [MCP OAuth 登录](#authenticate-with-remote-mcp-servers)失败。

360* 仅将 [MCP OAuth](#authenticate-with-remote-mcp-servers) 凭据发送到通过 HTTPS 或在 `localhost`、`127.0.0.1` 或 `::1` 上提供的令牌端点。对于令牌端点在其他任何地方为纯 `http://` 的服务器(例如本地网络上的设备),登录失败。请参阅 [拒绝向非 https 令牌端点发送凭据](https://code.claude.com/docs/zh-CN/errors.md#refusing-to-send-credentials-to-non-https-token-endpoint)。360* 仅将 [MCP OAuth](#authenticate-with-remote-mcp-servers) 凭据发送到通过 HTTPS 提供服务的令牌端点,或位于 `localhost`、`127.0.0.1` 或 `::1` 的令牌端点。对于令牌端点在其他任何位置使用纯 `http://` 的服务器(例如您本地网络上的设备),登录会失败。请参阅 [Refusing to send credentials to non-https token endpoint](https://code.claude.com/docs/zh-CN/errors.md#refusing-to-send-credentials-to-non-https-token-endpoint)。

361 361 

362Anthropic 可以通过 Claude Code 获取的功能标志,让特定服务器保持使用较早的协议,或不使用该流。要自行选择运行时,请将 [`MCP_SDK_GENERATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `v1` 或 `v2`。362Anthropic 可以通过 Claude Code 获取的功能标志,让特定服务器保持使用较早的协议,或不使用该流。若要自行选择运行时,请将 [`MCP_SDK_GENERATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `v1` 或 `v2`。

363 363 

364要决定 Claude Code 是否向服务器询问较新的修订版,请将 [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `auto` 或 `legacy`。如果未设置该变量,Claude Code 可能会在 7 天内跳过对某个 stdio 服务器的询问,例如在服务器被询问时退出之后。要让已升级的服务器更早被询问,请设置 `auto`。364若要决定 Claude Code 是否向服务器询问较新的修订版,请将 [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `auto` 或 `legacy`。未设置该变量时,Claude Code 可能会在 7 天内跳过询问某个 stdio 服务器,例如在该服务器被询问时退出之后。若要让已升级的服务器更早被询问,请设置为 `auto`。

365 365 

366### 动态工具更新366### 动态工具更新

367 367 

368MCP 服务器可以在连接期间更改其提供的工具、提示词或资源,并发送 `list_changed` 通知。收到通知时:368MCP 服务器可以在连接期间更改其提供的工具、提示词或资源,并发送 `list_changed` 通知。当收到通知时:

369 369 

370* **在交互式终端会话中**,Claude Code 从该服务器获取更新后的列表,因此您无需重新连接它。370* **在交互式终端会话中**,Claude Code 会从该服务器获取更新后的列表,因此您无需重新连接它。

371* **在使用 `-p` 标志的 [非交互模式](https://code.claude.com/docs/zh-CN/headless.md) 和 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 中**,Claude Code 在收到这些通知时仅刷新工具列表。371* **在使用 `-p` 标志的[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)以及 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 中**,Claude Code 收到这些通知时只刷新工具列表。

372 372 

373如果刷新请求失败,Claude Code 保留服务器之前发现的工具、提示词和资源,直到稍后的刷新成功。373如果刷新请求失败,Claude Code 会保留该服务器先前发现的工具、提示词和资源,直到后续刷新成功。

374 374 

375#### v2 运行时上的通知流375#### v2 运行时上的通知流

376 376 

377在 [v2 运行时](#mcp-client-runtimes) 上,Claude Code 通过它保持打开的流从使用较新协议修订版的服务器接收 `list_changed` 通知。当流关闭时,Claude Code 重新打开它,有两个限制:377在 [v2 运行时](#mcp-client-runtimes)上,Claude Code 通过其保持打开的流,接收来自使用较新协议修订版的服务器的 `list_changed` 通知。当流关闭时,Claude Code 会重新打开它,但有两个限制:

378 378 

379* **流在 10 秒内再次关闭**:Claude Code 最多重新打开三次,然后停止该连接。379* **流在 10 秒内再次关闭**:Claude Code 最多重新打开三次,然后对该连接停止重新打开。

380* **流保持打开超过 10 秒,然后关闭**,连接到无服务器主机的流通常如此:在一小时内五次重新打开后,Claude Code 在下一次之前等待约六小时。380* **流保持打开超过 10 秒后关闭**(连接到无服务器主机的流通常如此):在一小时内重新打开五次后,Claude Code 会等待约六小时再进行下一次。

381 381 

382在流重新打开之前,您保留服务器最后获取的工具、提示词和资源。要更快地获取其更改,请从 `/mcp` 重新连接服务器。382在流重新打开之前,您将保留该服务器最后获取的工具、提示词和资源。若要更快获取其更改,请从 `/mcp` 重新连接该服务器。

383 383 

384### 自动重新连接384### 自动重新连接

385 385 

386Claude Code 重新连接在会话中途断开的远程服务器,并在瞬时错误后重试 HTTP 或 SSE 服务器的首次连接。对于 stdio 服务器,请参阅 [退出或无法启动的 stdio 服务器](#stdio-servers-that-exit-or-fail-to-start)。386Claude Code 会重新连接在会话中途断开的远程服务器,并在出现暂时性错误后重试 HTTP 或 SSE 服务器的首次连接。对于 stdio 服务器,请参阅[退出或启动失败的 stdio 服务器](#stdio-servers-that-exit-or-fail-to-start)。

387 387 

388#### 远程服务器的会话中途断开388#### 远程服务器在会话中途断开

389 389 

390Claude Code 首先使用指数退避尝试重新连接断开的远程服务器,最多五次,从一秒延迟开始,每次加倍:390Claude Code 首先会以指数退避方式尝试重新连接断开的远程服务器,最多五次,初始延迟为一秒,每次加倍:

391 391 

392* **在交互式会话中**:`/mcp` 在 Claude Code 重新连接时显示服务器为待处理。在五次失败尝试后,Claude Code 将服务器标记为失败,或在服务器需要再次授权时标记为需要身份验证。当它将服务器标记为失败时,您会看到 `MCP server "<name>" disconnected · open /mcp to reconnect` 通知。您可以从 `/mcp` 手动重试。392* **在交互式会话中**:Claude Code 重新连接期间,`/mcp` 会将该服务器显示为待定状态。五次尝试失败后,Claude Code 会将该服务器标记为失败,或在服务器需要重新授权时标记为需要身份验证。当它将服务器标记为失败时,您会看到 `MCP server "<name>" disconnected · open /mcp to reconnect` 通知。您可以从 `/mcp` 手动重试。

393* **在 [`claude -p`](https://code.claude.com/docs/zh-CN/headless) 运行和 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话中**:Claude Code 进行相同的五次尝试,没有 `/mcp` 面板显示这些尝试。如果五次尝试全部失败,运行会在没有该服务器工具的情况下继续:393* **在 [`claude -p`](https://code.claude.com/docs/zh-CN/headless) 运行和 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话中**:Claude Code 进行同样的五次尝试,但没有 `/mcp` 面板来显示它们。如果五次都失败,运行会在没有该服务器工具的情况下继续:

394 * **在瞬时错误(例如 5xx 响应或超时)之后**:Claude Code 在后台继续重试 HTTP 或 SSE 服务器。重试最多持续约半小时,当某次重试连接成功时,服务器的工具会再次可用。在此之前,Agent SDK 会话报告 [状态](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling) `failed`,您的代码可以 [重新连接服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling)。要在 `claude -p` 中重新连接它,请重新开始运行。394 * **在暂时性错误(例如 5xx 响应或超时)之后**:Claude Code 会在后台持续重试 HTTP 或 SSE 服务器。重试最多持续约半小时,当某次连接成功时,该服务器的工具会重新可用。在此之前,Agent SDK 会话会报告[状态](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling) `failed`,您的代码可以[重新连接该服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling)。若要在 `claude -p` 中重新连接它,请重新开始运行。

395 * **当服务器 [需要您重新登录](#authenticate-with-remote-mcp-servers) 时**:Claude Code 停止重试,Agent SDK 会话将服务器的状态报告为 `needs-auth`。在您的 shell 中使用 [`claude mcp login <name>`](#authenticate-from-the-command-line) 登录。然后重新开始运行,或者在 Agent SDK 会话中改为 [重新连接服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling)。395 * **当服务器[需要您重新登录](#authenticate-with-remote-mcp-servers)时**:Claude Code 停止重试,Agent SDK 会话会将该服务器的状态报告为 `needs-auth`。在 shell 中使用 [`claude mcp login <name>`](#authenticate-from-the-command-line) 登录。然后重新开始运行,或者在 Agent SDK 会话中改为[重新连接该服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling)。

396 396 

397#### 失败的首次连接397#### 首次连接失败

398 398 

399当 HTTP 或 SSE 服务器的首次连接因瞬时错误(例如 5xx 响应、连接被拒绝或超时)失败时,Claude Code 最多重试三次。如果连接仍然失败,Claude Code 将服务器标记为失败。399当 HTTP 或 SSE 服务器的首次连接因暂时性错误(例如 5xx 响应、连接被拒绝或超时)而失败时,Claude Code 最多重试三次。如果连接仍然失败,Claude Code 会将该服务器标记为失败。

400 400 

401这些重试在以下情况下不适用:401在以下情况下不会进行这些重试:

402 402 

403* stdio 服务器的首次连接。要再次尝试,请参阅 [退出或无法启动的 stdio 服务器](#stdio-servers-that-exit-or-fail-to-start)403* stdio 服务器的首次连接。若要再次尝试,请参阅[退出或启动失败的 stdio 服务器](#stdio-servers-that-exit-or-fail-to-start)

404* WebSocket 服务器的首次连接。要在交互式终端会话中再次尝试,请从 `/mcp` 中该服务器的菜单选择 **Reconnect**404* WebSocket 服务器的首次连接。若要在交互式终端会话中再次尝试,请在 `/mcp` 中从该服务器的菜单选择 **Reconnect**

405* 身份验证或未找到错误,因为它需要配置更改来解决。当 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 是服务器唯一的 `Authorization` 标头来源时,Claude Code 仍然重试身份验证错误,因为它在每次尝试时重新运行助手并可以获取新凭据405* 身份验证错误或未找到错误,因为需要更改配置才能解决。当 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 是该服务器 `Authorization` 请求头的唯一来源时,Claude Code 仍会重试身份验证错误,因为它在每次尝试时都会重新运行该 helper,并可能获取到新的凭据

406 406 

407#### 退出或无法启动的 stdio 服务器407#### 退出或启动失败的 stdio 服务器

408 408 

409要重新启动 stdio 服务器,请阅读与其所发生情况相符的列。根据您运行 Claude Code 的方式找到对应的行:交互式会话、`claude -p` 运行或 Agent SDK 会话。409若要重新启动 stdio 服务器,请阅读与其遭遇情况相对应的列。根据您运行 Claude Code 的方式找到对应的行:交互式会话、`claude -p` 运行或 Agent SDK 会话。

410 410 

411| 您运行 Claude Code 的方式 | 服务器进程在会话中途退出 | 服务器的首次连接失败 |411| 您运行 Claude Code 的方式 | 服务器进程在会话中途退出 | 服务器首次连接失败 |

412| - | - | - |412| - | - | - |

413| 交互式会话 | Claude Code 将服务器标记为失败。要重新启动它,请从 `/mcp` 中该服务器的菜单选择 **Reconnect** | Claude Code 将服务器标记为失败。要重新启动它,请从 `/mcp` 中该服务器的菜单选择 **Reconnect** |413| 交互式会话 | Claude Code 将该服务器标记为失败。若要重新启动它,请在 `/mcp` 中从该服务器的菜单选择 **Reconnect** | Claude Code 将该服务器标记为失败。若要重新启动它,请在 `/mcp` 中从该服务器的菜单选择 **Reconnect** |

414| `claude -p` 运行 | Claude Code 在 Claude 下次调用该服务器的某个工具时重新启动服务器,调用会在服务器连接后运行 | 运行会在没有该服务器工具的情况下继续。要让 Claude Code 再次尝试连接,请重新开始运行。当插件提供该服务器时,新的运行会在失败后 15 分钟内跳过连接,因此请先等待这段时间,或 [更早重试](https://code.claude.com/docs/zh-CN/errors.md#skipping-connection-recent-failure-cached) |414| `claude -p` 运行 | Claude Code 会在 Claude 下次调用该服务器的某个工具时重新启动该服务器,并在服务器连接后运行该调用 | 运行会在没有该服务器工具的情况下继续。若要让 Claude Code 再次尝试连接,请重新开始运行。当服务器由插件提供时,新的运行会在失败后 15 分钟内跳过连接,因此请先等待这段时间,或[更早重试](https://code.claude.com/docs/zh-CN/errors.md#skipping-connection-recent-failure-cached) |

415| Agent SDK 会话 | Claude Code 在 Claude 下次调用该服务器的某个工具时重新启动服务器,调用会在服务器连接后运行 | 会话会在没有该服务器工具的情况下继续。您的代码可以 [重新连接服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling) |415| Agent SDK 会话 | Claude Code 会在 Claude 下次调用该服务器的某个工具时重新启动该服务器,并在服务器连接后运行该调用 | 会话会在没有该服务器工具的情况下继续。您的代码可以[重新连接该服务器](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md#error-handling) |

416 416 

417#### 失败的发现请求417#### 发现请求失败

418 418 

419服务器连接后,Claude Code 向其发送能力发现请求,例如 `tools/list`、`prompts/list` 和 `resources/list`。Claude Code 在瞬时网络或服务器错误后最多重试这些请求三次,短退避。它不重试身份验证错误、4xx 响应或请求超时。419服务器连接后,Claude Code 会向其发送能力发现请求,例如 `tools/list`、`prompts/list` 和 `resources/list`。在出现暂时性网络或服务器错误后,Claude Code 会以短暂退避方式重试这些请求,最多三次。它不会重试身份验证错误、4xx 响应或请求超时。

420 420 

421#### 自行重试失败的服务器421#### 自行重试失败的服务器

422 422 

423要重试每个失败或需要身份验证的服务器,请在交互式终端会话中的 Claude Code 输入框运行 `/mcp reconnect all`。这需要 Claude Code v2.1.284 或更高版本。较早的版本会打印 `MCP server "all" not found`。423若要重试所有失败或需要身份验证的服务器,请在交互式终端会话中于 Claude Code 提示符处运行 `/mcp reconnect all`。这需要 Claude Code v2.1.284 或更高版本。更早的版本会打印 `MCP server "all" not found`。

424 424 

425#### Claude 如何了解服务器失败425#### Claude 如何得知服务器失败

426 426 

427Claude Code 是否告诉 Claude 配置的服务器未能连接取决于 [工具搜索](#scale-with-mcp-tool-search),默认打开:427Claude Code 是否将连接失败的已配置服务器告知 Claude,取决于默认开启的[工具搜索](#scale-with-mcp-tool-search):

428 428 

429* 使用工具搜索,Claude Code 告诉 Claude 哪个服务器失败及其连接错误,因此 Claude 在其回复中报告连接失败。Claude Code 在找不到匹配工具的 `ToolSearch` 结果中包含相同的信息。429* 使用工具搜索时,Claude Code 会告诉 Claude 哪个服务器失败及其连接错误,因此 Claude 会在其回复中报告连接失败。Claude Code 还会在未找到匹配工具的 `ToolSearch` 结果中包含相同的信息。

430* 在任何 [不使用工具搜索的配置](#configure-tool-search) 中,Claude Code 不向 Claude 报告失败的服务器连接。430* 在任何[不使用工具搜索的配置](#configure-tool-search)中,Claude Code 不会向 Claude 报告失败的服务器连接。

431 431 

432### 使用频道推送消息432### 使用频道推送消息

433 433 

434MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 能力,您在启动时使用 `--channels` 标志选择加入。请参阅 [频道](https://code.claude.com/docs/zh-CN/channels.md) 以使用官方支持的频道,或 [频道参考](https://code.claude.com/docs/zh-CN/channels-reference.md) 以构建您自己的。434MCP 服务器还可以将消息直接推送到您的会话中,以便 Claude 能够对 CI 结果、监控告警或聊天消息等外部事件做出反应。要启用此功能,您的服务器需声明 `claude/channel` 能力,并且您需要在启动时使用 `--channels` 标志选择加入。请参阅[频道](https://code.claude.com/docs/zh-CN/channels.md)以使用官方支持的频道,或参阅[频道参考](https://code.claude.com/docs/zh-CN/channels-reference.md)以构建您自己的频道。

435 435 

436在 [v2 运行时](#mcp-client-runtimes) 上,协商 MCP 协议修订版 2026-07-28 的频道服务器无法传递频道消息,因此 Claude Code 不将其注册为频道。不支持该修订版的频道服务器会在较早的握手上连接,并像以前一样注册。436在 [v2 运行时](#mcp-client-runtimes)上,协商使用 MCP 协议修订版 2026-07-28 的频道服务器无法传递频道消息,因此 Claude Code 不会将其注册为频道。不支持该修订版的频道服务器会使用较早的握手方式连接,并像以前一样注册。

437 437 

438Claude Code 默认会向 stdio 服务器询问该修订版。要将 stdio 频道服务器保持在较早的握手上,请将 [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `legacy`,这会将所有服务器都保持在较早的握手上。438Claude Code 默认会向 stdio 服务器询问该修订版。若要让 stdio 频道服务器保持使用较早的握手方式,请将 [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `legacy`,这会让所有服务器都保持使用较早的握手方式。

439 439 

440> [!TIP]440> [!TIP]

441>441>


443>443>

444> * 使用 `-s` 或 `--scope` 标志指定配置的存储位置:444> * 使用 `-s` 或 `--scope` 标志指定配置的存储位置:

445> * `local`(默认):仅在当前项目中对您可用445> * `local`(默认):仅在当前项目中对您可用

446> * `project`:通过 `.mcp.json` 文件与项目中的每个人共享446> * `project`:通过 `.mcp.json` 文件与项目中的所有人共享

447> * `user`:在所有项目中对您可用447> * `user`:在所有项目中对您可用

448> * 使用 `-e` 或 `--env` 标志设置环境变量(例如 `-e KEY=value`)448> * 使用 `-e` 或 `--env` 标志设置环境变量(例如 `-e KEY=value`)

449> * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 短形式449> * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 简写形式

450> * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时(例如 `MCP_TIMEOUT=10000 claude` 设置 10 秒超时)450> * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时时间(例如,`MCP_TIMEOUT=10000 claude` 设置 10 秒的超时时间)

451> * 通过在该服务器的 `.mcp.json` 条目中添加 `timeout` 字段(以毫秒为单位)来设置按服务器工具执行超时,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量451> * 通过在服务器的 `.mcp.json` 条目中添加以毫秒为单位的 `timeout` 字段来设置单个服务器的工具执行超时时间,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量

452> * 当 MCP 工具输出超过 10,000 个 token 时,Claude Code 显示警告,默认限制输出为 25,000 个 token。要更改 token 限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量,例如 `MAX_MCP_OUTPUT_TOKENS=50000`。警告阈值是固定的。除非服务器提高了某个工具自身的限制,否则超过 50,000 个字符的成功文本结果会被保存到文件中,不受此变量影响。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)452> * 当 MCP 工具输出超过 10,000 个 token 时,Claude Code 会显示警告,并默认将输出限制为 25,000 个 token。若要更改 token 限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量,例如 `MAX_MCP_OUTPUT_TOKENS=50000`。警告阈值是固定的。除非服务器提高了某个工具自身的限制,否则超过 50,000 个字符的成功文本结果会保存到文件中,不受此变量影响。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)

453> * 使用 `/mcp` 与需要 OAuth 2.0 身份验证的远程服务器进行身份验证453> * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证

454 454 

455### MCP 工具调用的时间限制455### MCP 工具调用的时间限制

456 456 

457要限制 MCP 工具调用可以运行的时长:457若要限制 MCP 工具调用可以运行的时长:

458 458 

459* **按服务器**:在该服务器的配置条目中添加以毫秒为单位的 `timeout` 字段459* **按服务器**:在该服务器的配置条目中添加以毫秒为单位的 `timeout` 字段

460* **跨服务器**:设置 [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars)460* **跨服务器**:设置 [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars)

461 461 

462按服务器的 `timeout` 是每个工具调用的硬性墙钟时间限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai) 服务器,还有第二个按请求计时器,覆盖每个请求直到服务器的第一个响应字节。Claude Code 将该计时器设置为三个值中最大的:60 秒、适用于服务器的工具超时和 `MCP_TIMEOUT`。未设置的 `MCP_TOOL_TIMEOUT` 的 28 小时默认值不参与该比较,低于 60 秒的值不会缩短计时器。Stdio 和 WebSocket 服务器没有按请求计时器。462按服务器设置的 `timeout` 是每次工具调用的硬性挂钟时间限制,服务器发送的进度通知不会延长它。低于 1000 的值会被忽略,并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai)服务器,还有第二个按请求计时的计时器,覆盖每个请求直到服务器的第一个响应字节。Claude Code 将该计时器设置为以下三个值中的最大值:60 秒、适用于该服务器的工具超时时间,以及 `MCP_TIMEOUT`。未设置 `MCP_TOOL_TIMEOUT` 时的 28 小时默认值不参与该比较,低于 60 秒的值也不会缩短该计时器。Stdio 和 WebSocket 服务器没有按请求计时的计时器。

463 463 

464至少 1000 的按服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会早于按服务器 `timeout` 因空闲而中止该服务器的工具调用。464至少为 1000 的按服务器 `timeout` 还会作为下文所述空闲超时的下限:Claude Code 绝不会在早于按服务器 `timeout` 的时间因空闲而中止该服务器的工具调用。

465 465 

466对 MCP 服务器的工具调用,如果在空闲窗口内既没有响应也没有进度通知,会以错误中止,而不是等待墙钟时间限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器外的每种服务器类型。空闲窗口对 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对 stdio 服务器默认为 30 分钟。466如果对 MCP 服务器的工具调用在空闲窗口期内没有发送任何响应和进度通知,则会以错误中止,而不是等待挂钟时间限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器之外的所有服务器类型。对于 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai)服务器,空闲窗口默认为五分钟;对于 stdio 服务器,默认为 30 分钟。

467 467 

468设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改空闲窗口,或将其设置为 `0` 以禁用检查。468以毫秒为单位设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 环境变量以更改空闲窗口,或将其设置为 `0` 以禁用该检查。

469 469 

470这些超时限制调用可以运行多长时间,但不一定是它阻塞会话多长时间:运行超过两分钟的主对话调用会先移到后台任务。请参阅 [长工具调用的自动后台处理](#automatic-backgrounding-of-long-tool-calls)。470这些超时限制的是调用可以运行的时长,而不一定是它阻塞会话的时长:运行超过两分钟的主对话调用会先转为后台任务。请参阅[长时间工具调用的自动后台化](#automatic-backgrounding-of-long-tool-calls)。

471 471 

472### 长工具调用的自动后台处理472### 长时间工具调用的自动后台化

473 473 

474如果某个后台调用在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中的详情视图显示 `runs on the server; survives exiting this session`,请参阅[在服务器上运行的 MCP 任务](#mcp-tasks-that-run-on-the-server)。474如果后台调用在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中的详情视图显示 `runs on the server; survives exiting this session`,请参阅[在服务器上运行的 MCP 任务](#mcp-tasks-that-run-on-the-server)。

475 475 

476主对话中的 MCP 工具调用在两分钟后仍在运行时会移到后台任务,而不是阻塞会话。Claude 立即收到任务 ID 并继续工作,结果在调用完成时作为任务通知到达。476主对话中的 MCP 工具调用如果在两分钟后仍在运行,会转为后台任务,而不是阻塞会话。Claude 会立即收到任务 ID 并继续工作,调用结束时结果会以任务通知的形式到达。

477 477 

478任务出现在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,退出会话后它不会保留。任务的条目显示服务器报告的最新进度。如果您停止任务,Claude Code 会取消调用并告知 Claude 不会有结果返回。停止并不保证服务器停止:服务器可能已经完成了部分工作,或者仍可能完成它。478该任务会出现在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中,您也可以在那里停止它,并且它不会在退出会话后保留。任务条目显示服务器报告的最新进度。如果您停止该任务,Claude Code 会取消调用并告知 Claude 不会有结果。停止并不保证服务器会停止:它可能已经完成了部分工作,或者仍可能完成它。

479 479 

480调用在后台运行时,每次调用的限制仍然适用:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 设置的墙钟时间限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 设置的空闲超时。480调用在后台运行期间,每次调用的限制仍然适用:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 设置的挂钟时间限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 设置的空闲超时。

481 481 

482要更改或关闭自动后台化:482若要更改或关闭自动后台化:

483 483 

484* 设置以毫秒为单位的 [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/zh-CN/env-vars) 环境变量以更改阈值,或设置为 `0` 以关闭自动后台化。设置为 `0` 时,Claude 在交互式会话中也会[等待 MCP 任务](#make-claude-wait-for-the-result-of-an-mcp-task)484* 以毫秒为单位设置 [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/zh-CN/env-vars) 环境变量以更改阈值,或将其设置为 `0` 以关闭自动后台化。设置为 `0` 时,Claude 在交互式会话中还会[等待 MCP 任务](#make-claude-wait-for-the-result-of-an-mcp-task)

485* 将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1`,以关闭自动后台化和[后台命令](https://code.claude.com/docs/zh-CN/tools-reference.md#background-commands)485* 将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1` 以关闭自动后台化和[后台命令](https://code.claude.com/docs/zh-CN/tools-reference.md#background-commands)

486 486 

487某些调用永远不会移到后台:487某些调用永远不会转入后台:

488 488 

489* 来自 [子代理](https://code.claude.com/docs/zh-CN/sub-agents.md) 的调用;Claude Code 仅后台处理主对话调用489* 来自[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)的调用;Claude Code 只将主对话调用转入后台

490* 对 IDE 服务器的调用490* 对 IDE 服务器的调用

491* [非交互模式](https://code.claude.com/docs/zh-CN/headless.md) 中的调用,除非 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1`,因为一次性运行可能在结果到达前结束491* [非交互模式](https://code.claude.com/docs/zh-CN/headless.md)中的调用,除非 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1`,因为一次性运行可能在结果到达之前就结束

492 492 

493等待已打开的 [引出对话框](#respond-to-mcp-elicitation-requests) 的调用在对话框打开期间不会后台处理;服务器是在等待您的输入,而不是运行缓慢,因此 Claude Code 将移动推迟到对话框关闭。493在打开的[引导对话框](#respond-to-mcp-elicitation-requests)上等待的调用在对话框打开期间不会转入后台;服务器是在等待您的输入,而不是运行缓慢,因此 Claude Code 会将转移推迟到对话框关闭之后。

494 494 

495### 在服务器上运行的 MCP 任务495### 在服务器上运行的 MCP 任务

496 496 

497MCP 任务是指 MCP 服务器使用 [MCP tasks 扩展](https://modelcontextprotocol.io/extensions/tasks/overview)自行运行的长时间作业,例如报告导出或构建。服务器接受该作业后,Claude 的工具调用即返回,因此 Claude 会继续工作,除非您[让 Claude 等待](#make-claude-wait-for-the-result-of-an-mcp-task)。作业结束时,会话记录中会注明这一点,Claude 会获得结果。您可以向 Claude 询问结果。497MCP 任务是由 MCP 服务器使用 [MCP tasks 扩展](https://modelcontextprotocol.io/extensions/tasks/overview)自行运行的长时间作业,例如报告导出或构建。服务器接受作业后,Claude 的工具调用即返回,因此除非您[让 Claude 等待](#make-claude-wait-for-the-result-of-an-mcp-task),否则 Claude 会继续工作。作业结束时,会话记录中会说明这一点,并且 Claude 会获得结果。您可以向 Claude 询问结果。

498 498 

499在此期间,页脚会显示诸如 `1 MCP task` 的计数,Claude Code 会通过向服务器检查任务状态来跟踪该任务。远程服务器上的任务在您退出后会继续运行。要再次跟踪它,请[恢复同一会话](#exit-clear-or-resume-while-an-mcp-task-runs)。499与此同时,底部栏会显示诸如 `1 MCP task` 的计数,Claude Code 通过向服务器检查状态来跟踪该任务。远程服务器上的任务在您退出后仍会继续运行。若要再次跟踪它,请[恢复同一会话](#exit-clear-or-resume-while-an-mcp-task-runs)。

500 500 

501> [!NOTE]501> [!NOTE]

502>502>

503> MCP 任务在 Claude Code CLI 中处于公开测试版阶段,需要 Claude Code v2.1.304 或更高版本。[调用成为 MCP 任务的条件](#requirements-for-mcp-tasks)列出了可以使用该功能的会话和服务器。503> MCP 任务在 Claude Code CLI 中处于公开测试版阶段,需要 Claude Code v2.1.304 或更高版本。[调用成为 MCP 任务的条件](#requirements-for-mcp-tasks)列出了支持它的会话和服务器。

504 504 

505#### 停止 MCP 任务或获取其结果505#### 停止 MCP 任务或获取其结果

506 506 

507要停止正在运行的任务,请在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中选择它并按 `x`,或者让 Claude 停止它。Claude Code 会停止跟踪该任务并请求服务器取消它,但服务器仍可能完成它。请先从 `/mcp` 重新连接已断开的服务器,否则不会发出取消请求,Claude Code 会忘记该任务且无法再次跟踪它。按 `Esc` 不会停止后台任务。507若要停止正在运行的任务,请在 [`/tasks`](https://code.claude.com/docs/zh-CN/commands#all-commands) 中选择它并按 `x`,或者让 Claude 来停止。Claude Code 会停止跟踪该任务并请求服务器取消它,但服务器仍可能完成它。请先从 `/mcp` 重新连接已断开的服务器,否则取消请求不会发出,Claude Code 会遗忘该任务且无法再次跟踪它。按 `Esc` 不会停止后台任务。

508 508 

509任务结束时,会话记录中会出现类似这样的一行:509任务结束时,会话记录中会出现如下一行:

510 510 

511```text theme={null}511```text theme={null}

512MCP task <server task id> (<server>/<tool>) completed.512MCP task <server task id> (<server>/<tool>) completed.

513```513```

514 514 

515结果会发送给 Claude,而不是写入会话记录,因此请向 Claude 询问结果。如果结果到达时 Claude 处于空闲状态,Claude 会主动开始处理它。515结果会发送给 Claude,而不会进入会话记录,因此请向 Claude 询问结果。如果结果到达时 Claude 处于空闲状态,Claude 会主动开始处理它。

516 516 

517#### 回答来自 MCP 任务的问题517#### 回答来自 MCP 任务的问题

518 518 

519正在运行的任务可以打开 [elicitation 对话框](#respond-to-mcp-elicitation-requests)向您请求输入。在 `/tasks` 打开期间,该对话框会保持隐藏,因此请关闭 `/tasks` 以作答。拒绝或按 `Esc` 也是对服务器的一种回答,服务器随后会决定任务是否继续。519正在运行的任务可以打开[引导对话框](#respond-to-mcp-elicitation-requests)来请求您输入。`/tasks` 打开期间,该对话框保持隐藏,因此请关闭 `/tasks` 以进行回答。拒绝或按 `Esc` 也是对服务器的一种回答,服务器随后决定任务是否继续。

520 520 

521在[非交互](https://code.claude.com/docs/zh-CN/headless.md)会话中,对于请求输入的任务,Claude Code 会请求服务器取消它,而不会运行您的 [`Elicitation` hook](https://code.claude.com/docs/zh-CN/hooks#elicitation),也不会调用 Agent SDK 的 `onElicitation` 回调。521在[非交互](https://code.claude.com/docs/zh-CN/headless.md)会话中,Claude Code 会请求服务器取消请求输入的任务,而不会运行您的 [`Elicitation` hook](https://code.claude.com/docs/zh-CN/hooks#elicitation),也不会调用 Agent SDK 的 `onElicitation` 回调。

522 522 

523#### 在 MCP 任务运行时退出、清除或恢复523#### MCP 任务运行期间退出、清除或恢复

524 524 

525远程服务器上的任务在您退出后会继续运行。stdio 服务器的进程会在 Claude Code 退出时停止,尽管其任务在 `/tasks` 中显示 `runs on the server; survives exiting this session`。除非该服务器的文档说明工作会在进程结束后继续,否则请先让这些任务完成,或在 `/tasks` 中停止它们。525远程服务器上的任务在您退出后仍会继续运行。stdio 服务器的进程会在 Claude Code 退出时停止,尽管其任务在 `/tasks` 中显示 `runs on the server; survives exiting this session`。除非该服务器的文档说明工作会在进程结束后继续,否则请先让这些任务完成,或在 `/tasks` 中停止它们。

526 526 

527| 情况 | 任务会怎样 | 您可以做什么 |527| 情况 | 任务会怎样 | 您可以做什么 |

528| - | - | - |528| - | - | - |

529| 您运行 `/clear` 或 `/branch`,或 `/resume` 另一个会话 | 在 Claude Code 保持打开期间,结果会送达您当前的对话 | 退出后,使用 `claude --resume` 恢复任务启动时所在的会话 |529| 您运行 `/clear` 或 `/branch`,或 `/resume` 到另一个会话 | 只要 Claude Code 保持打开,结果就会到达您当前的对话中 | 退出后,使用 `claude --resume` 恢复任务启动时所在的会话 |

530| 您退出 Claude Code | 任何退出选项都不会取消远程服务器的任务,即使退出对话框将其列在 `The following will stop when you exit:` 下 | 先在 `/tasks` 中停止它,或稍后恢复同一会话 |530| 您退出 Claude Code | 没有任何退出选项会取消远程服务器的任务,即使退出对话框将其列在 `The following will stop when you exit:` 下 | 先在 `/tasks` 中停止它,或稍后恢复同一会话 |

531| 您以交互方式返回任务所在的会话:`claude --resume`、`claude --continue` 或 `/resume` | 服务器连接后,Claude Code 会再次跟踪该任务;如果任务在此期间已完成且服务器仍知道它,Claude 会获得结果 | 保持服务器的名称和连接设置不变 |531| 您以交互方式返回任务所在的会话:`claude --resume`、`claude --continue` 或 `/resume` | 服务器连接后,Claude Code 会再次跟踪该任务;如果任务在此期间已完成且服务器仍记得它,Claude 会获得结果 | 保持服务器的名称和连接设置不变 |

532| 您在一次性 `claude -p "<prompt>"` 运行中使用 `--resume` 或 `--continue` 恢复任务所在的会话 | 该运行不会跟踪该任务 | 以交互方式恢复,或使用 `--input-format stream-json` 恢复 |532| 您在一次性 `claude -p "<prompt>"` 运行中使用 `--resume` 或 `--continue` 恢复任务所在的会话 | 该运行不会跟踪该任务 | 以交互方式恢复,或使用 `--input-format stream-json` 恢复 |

533| 您启动新会话或使用 `--fork-session` | 新会话不会跟踪该任务 | 恢复启动该任务的会话 |533| 您启动新会话或使用 `--fork-session` | 新会话不会跟踪该任务 | 恢复启动该任务的会话 |

534 534 


537只有当以下所有条件都满足时,工具调用才会成为 MCP 任务:537只有当以下所有条件都满足时,工具调用才会成为 MCP 任务:

538 538 

539* 服务器支持任务539* 服务器支持任务

540* 服务器是以[协议修订版 2026-07-28](#mcp-client-runtimes) 连接的 HTTP、stdio 或 claude.ai 连接器服务器。设置 [`MCP_SDK_GENERATION=v1` 或 `MCP_PROTOCOL_NEGOTIATION=legacy`](https://code.claude.com/docs/zh-CN/env-vars) 会排除这一情况540* 服务器是以[协议修订版 2026-07-28](#mcp-client-runtimes) 连接的 HTTP、stdio 或 claude.ai 连接器服务器。设置 [`MCP_SDK_GENERATION=v1` 或 `MCP_PROTOCOL_NEGOTIATION=legacy`](https://code.claude.com/docs/zh-CN/env-vars) 会排除这种情况

541* 会话会[获取功能标志](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching),因此不能在 Amazon Bedrock 等第三方提供商上,也不能关闭遥测或标志获取541* 会话[获取功能标志](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching),因此不能是 Amazon Bedrock 等第三方提供商,也不能关闭遥测或标志获取

542* Anthropic 已为您的会话类型启用了 MCP 任务。在 v2.1.304 或更高版本上,这包括终端 CLI 会话、[Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话和 [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md) 运行。其他使用入口(例如 [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)和[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))没有 MCP 任务542* Anthropic 已为您这类会话启用 MCP 任务。在 v2.1.304 或更高版本上,这涵盖终端 CLI 会话、[Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话和 [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md) 运行。其他使用入口(例如 [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)和[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))没有 MCP 任务

543* 调用来自主对话,而不是来自[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)543* 调用来自主对话,而不是来自[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)

544* 会话是交互式的,或者 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话或读取 `--input-format stream-json` 的 `claude -p` 运行满足:544* 会话是交互式的,或者 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 会话或读取 `--input-format stream-json` 的 `claude -p` 运行满足:

545 * [`CLAUDE_AUTO_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 为 `1`545 * [`CLAUDE_AUTO_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 为 `1`


552 552 

553#### MCP 任务的状态消息553#### MCP 任务的状态消息

554 554 

555这些消息出现在任务的 `/tasks` 条目或其结束时的会话记录行中,表示 Claude Code 无法连接到服务器或任务。当 `/tasks` 中显示其中一条消息时,作业可能仍在运行:Claude Code 不会干预它并会继续检查。`300s` 消息和配置相关消息即使在恢复联系后也会保留在条目上。555这些消息出现在任务的 `/tasks` 条目或其结束时的会话记录行中,表示 Claude Code 无法联系到服务器或该任务。当其中某条消息显示在 `/tasks` 中时,作业可能仍在运行:Claude Code 不会干预它,并会持续检查。`300s` 消息和配置相关消息即使在恢复联系后也会保留在条目上。

556 556 

557| 消息 | 发生了什么 | 您可以做什么 |557| 消息 | 发生了什么 | 您可以做什么 |

558| - | - | - |558| - | - | - |

559| `reconnecting…` | 自恢复以来服务器尚未应答,或状态检查没有得到应答 | 如果一直显示,请从 `/mcp` 重新连接 |559| `reconnecting…` | 自恢复以来服务器尚未应答,或状态检查没有得到应答 | 如果一直显示,请从 `/mcp` 重新连接 |

560| `needs a sign-in to <server>` | 服务器拒绝了状态检查 | 从 `/mcp` 登录 |560| `needs a sign-in to <server>` | 服务器拒绝了状态检查 | 从 `/mcp` 登录 |

561| `status requests come back with errors; retrying…` | 服务器或其前面的代理以错误应答状态检查 | 等待 Claude Code 重试 |561| `status requests come back with errors; retrying…` | 服务器或其前面的代理以错误应答状态检查 | 在 Claude Code 重试期间等待 |

562| `server '<name>' did not reconnect within 300s` | 五分钟内没有得到应答的检查,例如连接中断或服务器被禁用 | 从 `/mcp` 重新连接 |562| `server '<name>' did not reconnect within 300s` | 五分钟内没有得到应答的检查,例如连接中断或服务器被禁用 | 从 `/mcp` 重新连接 |

563| `server '<name>' asked for a sign-in, and none was accepted within 300s` | 五分钟后服务器仍要求登录 | 从 `/mcp` 登录 |563| `server '<name>' asked for a sign-in, and none was accepted within 300s` | 五分钟后服务器仍要求登录 | 从 `/mcp` 登录 |

564| `status requests to server '<name>' came back with errors, and none succeeded in 300s` | 五分钟内都是错误应答 | 检查服务器自身的健康状况或日志 |564| `status requests to server '<name>' came back with errors, and none succeeded in 300s` | 五分钟内都是错误应答 | 检查服务器自身的健康状况或日志 |

565| `server '<name>' is not configured in this session; the task may still be running on it` | 会话中没有该名称的服务器,例如它已被移除、重命名或未包含在 `--mcp-config` 中,或者某个 claude.ai 连接器仍在加载 | 以相同名称恢复该服务器,然后再次恢复会话。对于正在加载的连接器,无需操作:连接器出现后 Claude Code 会跟踪该任务 |565| `server '<name>' is not configured in this session; the task may still be running on it` | 会话中没有该名称的服务器,例如它被移除、重命名或未包含在 `--mcp-config` 中,或者某个 claude.ai 连接器仍在加载 | 以相同名称恢复该服务器,然后再次恢复会话。对于正在加载的连接器,无需操作:它出现后 Claude Code 会跟踪该任务 |

566| 以 `server '<name>' was reconfigured to a different transport since this task was created` 开头的消息 | 存在该名称的服务器,但其连接设置自任务开始后已更改,例如 URL、command、args、env、headers 或 timeout | 恢复之前的设置,然后再次恢复会话 |566| 以 `server '<name>' was reconfigured to a different transport since this task was created` 开头的消息 | 存在该名称的服务器,但其连接设置自任务开始以来已更改,例如其 URL、command、args、env、headers 或 timeout | 恢复先前的设置,然后再次恢复会话 |

567| `the server rejected this task's id; asking again…` | 服务器表示不认识该任务 ID。Claude Code 会继续询问最多五分钟 | 等待:如果服务器再次识别该 ID,消息会消失,否则会出现 `outcome unknown.` 行 |567| `the server rejected this task's id; asking again…` | 服务器表示不认识该任务 ID。Claude Code 会持续询问最多五分钟 | 等待:如果服务器再次识别该 ID,消息会清除;否则随后会出现 `outcome unknown.` 行 |

568| 以 `outcome unknown.` 结尾的会话记录行,其中一种形式为 `expired on the server: outcome unknown.` | 服务器拒绝了该 ID 或以其他永久性错误拒绝,Claude Code 已停止跟踪该任务 | 第二次调用可能会重复执行该工作。再次调用该工具之前,请从服务器了解已完成的内容,例如让 Claude 使用该服务器的其他工具 |568| 以 `outcome unknown.` 结尾的会话记录行,其中一种形式为 `expired on the server: outcome unknown.` | 服务器拒绝了该 ID 或以其他永久性错误拒绝,Claude Code 已停止跟踪该任务 | 第二次调用可能会重复执行工作。在再次调用该工具之前,请从服务器了解已完成了什么,例如让 Claude 使用该服务器的其他工具 |

569 569 

570#### MCP 任务的时间限制570#### MCP 任务的时间限制

571 571 

572默认情况下,后台任务没有 Claude Code 时间限制。[工具调用时间限制](#time-limits-on-mcp-tool-calls)(包括挂钟时间限制和空闲超时)在服务器以任务应答该调用之前适用。如果您[让 Claude 等待](#make-claude-wait-for-the-result-of-an-mcp-task),这些限制会在整个任务期间适用。得到应答的状态检查会计为空闲超时中的活动。572默认情况下,后台任务没有 Claude Code 时间限制。[工具调用时间限制](#time-limits-on-mcp-tool-calls)(包括挂钟时间限制和空闲超时)在服务器以任务应答调用之前适用。如果您[让 Claude 等待](#make-claude-wait-for-the-result-of-an-mcp-task),这些限制会适用于整个任务。得到应答的状态检查会计为空闲超时的活动。

573 573 

574#### 让 Claude 等待 MCP 任务的结果574#### 让 Claude 等待 MCP 任务的结果

575 575 

576要在交互式会话中让 Claude 等待任务的结果,请设置以下两个环境变量之一,例如在 [`settings.json`](https://code.claude.com/docs/zh-CN/settings) 的 `env` 块中:576若要让 Claude 在交互式会话中等待任务结果,请设置以下两个环境变量之一,例如在 [`settings.json`](https://code.claude.com/docs/zh-CN/settings) 的 `env` 块中设置:

577 577 

578* **[`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `0`**:Claude 会等待每个 MCP 工具调用直到调用结束578* **[`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `0`**:Claude 会等待每个 MCP 工具调用直到调用结束

579* **[`CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1`**:Claude 会等待任务的结果。当[自动后台化](#automatic-backgrounding-of-long-tool-calls)开启时,它默认会在两分钟后转移该调用,因此短任务会就地完成,长任务不会阻塞您。被转移的调用是普通后台调用,而不是 MCP 任务。它不会在退出会话后保留579* **[`CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1`**:Claude 会等待任务的结果。当[自动后台化](#automatic-backgrounding-of-long-tool-calls)开启时,默认会在两分钟后转移该调用,因此短任务会就地完成,而长任务不会阻塞您。被转移的调用是普通后台调用,而不是 MCP 任务。它不会在退出会话后保留

580 580 

581Claude 等待期间,按 `Esc` 或达到[挂钟时间限制或空闲超时](#time-limits-on-mcp-tasks)会结束该调用,Claude Code 会请求服务器取消该任务。581在 Claude 等待期间,按 `Esc` 或达到[挂钟时间限制或空闲超时](#time-limits-on-mcp-tasks)会结束调用,并且 Claude Code 会请求服务器取消该任务。

582 582 

583如果您将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 设置为 `1` 或以 [bare 模式](https://code.claude.com/docs/zh-CN/headless.md#start-faster-with-bare-mode)启动,仅凭这一点并不会让 Claude 等待 MCP 任务。以下示例将 `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` 设置为 `0`,因此 Claude 会等待每个 MCP 工具调用:583如果您将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 设置为 `1` 或以 [bare 模式](https://code.claude.com/docs/zh-CN/headless.md#start-faster-with-bare-mode)启动,仅凭这一点并不会让 Claude 等待 MCP 任务。以下示例将 `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` 设置为 `0`,因此 Claude 会等待每个 MCP 工具调用:

584 584 


590}590}

591```591```

592 592 

593### 面向服务器开发者的 MCP 任务593### 面向服务器作者的 MCP 任务

594 594 

595如果您构建 MCP 服务器,可以用任务来应答长时间运行的 `tools/call`。[MCP tasks 扩展](https://modelcontextprotocol.io/extensions/tasks/overview)定义了您要发送的消息。在[协议修订版 2026-07-28](#mcp-client-runtimes) 连接上,每个请求都会在 `params._meta["io.modelcontextprotocol/clientCapabilities"]` 中携带 Claude Code 的客户端能力,其中 `extensions` 下包含 `"io.modelcontextprotocol/tasks": {}`。[无法成为任务](#requirements-for-mcp-tasks)的 `tools/call` 请求会省略该扩展。595如果您构建 MCP 服务器,可以用任务来应答长时间运行的 `tools/call`。[MCP tasks 扩展](https://modelcontextprotocol.io/extensions/tasks/overview)定义了您需要发送的消息。在[协议修订版 2026-07-28](#mcp-client-runtimes) 连接上,每个请求都会在 `params._meta["io.modelcontextprotocol/clientCapabilities"]` 处携带 Claude Code 的客户端能力,其中 `extensions` 下包含 `"io.modelcontextprotocol/tasks": {}`。[无法成为任务](#requirements-for-mcp-tasks)的 `tools/call` 请求会省略该扩展。

596 596 

597#### 以任务应答调用597#### 以任务应答调用

598 598 

599只有在请求携带该扩展时才用任务应答,否则调用会以工具错误 `Unsupported result type 'task' for tools/call` 失败。如果您的应答没有 `taskId` 或没有有效的 `status`,调用也会以同样的方式失败。任务对象是您的 `tools/call` 响应的 JSON-RPC `result`,不需要 `content` 数组,此处还包含可选的 `statusMessage` 和 `pollIntervalMs`:599仅当请求携带该扩展时才以任务应答,否则调用会以工具错误 `Unsupported result type 'task' for tools/call` 失败。如果您的应答没有 `taskId` 或没有有效的 `status`,调用也会以同样方式失败。任务对象是您 `tools/call` 响应的 JSON-RPC `result`,不需要 `content` 数组,此处还包含可选的 `statusMessage` 和 `pollIntervalMs`:

600 600 

601```json theme={null}601```json theme={null}

602{602{


613 613 

614| 字段 | Claude Code 如何处理 |614| 字段 | Claude Code 如何处理 |

615| - | - |615| - | - |

616| `resultType` | 设置为 `"task"` 以将该应答标记为任务。如果没有它,Claude Code 会将该应答视为普通结果 |616| `resultType` | 将其设置为 `"task"` 以将应答标记为任务。缺少它时,Claude Code 会将应答读取为普通结果 |

617| `taskId` | 必需。最多 128 个不含空格的可打印 ASCII 字符,否则 Claude 会收到以 `MCP server "<name>" returned a malformed task handle for tool "<tool>"` 开头的工具错误。请确保该 ID 在不同连接间都能被应答,因为恢复后 Claude Code 会在新连接上询问它 |617| `taskId` | 必需。最多 128 个不含空格的可打印 ASCII 字符,否则 Claude 会收到以 `MCP server "<name>" returned a malformed task handle for tool "<tool>"` 开头的工具错误。请确保该 ID 可以跨连接应答,因为恢复后 Claude Code 会在新连接上询问它 |

618| `status` | 必需。取值为 `working`、`input_required`、`completed`、`failed` 或 `cancelled` 之一。其他值会产生 `Unsupported result type` 错误 |618| `status` | 必需。取值为 `working`、`input_required`、`completed`、`failed` 或 `cancelled` 之一。其他值会导致 `Unsupported result type` 错误 |

619| `createdAt`、`lastUpdatedAt`、`ttlMs` | 任务扩展要求提供,`ttlMs` 可以为 `null`。Claude Code 不会因为任务的 `ttlMs` 已过而丢弃该任务 |619| `createdAt`、`lastUpdatedAt`、`ttlMs` | tasks 扩展要求提供,`ttlMs` 可以为 `null`。Claude Code 不会因为任务的 `ttlMs` 已过而丢弃该任务 |

620| `pollIntervalMs` | 可选。`tasks/get` 请求之间的毫秒数,限制在 250 到 30000 之间。当该字段缺失或为 `null` 时,Claude Code 使用 2000,并会从每个 `tasks/get` 响应中重新读取该值 |620| `pollIntervalMs` | 可选。`tasks/get` 请求之间的毫秒数,限制在 250 到 30000 之间。字段缺失或为 `null` 时,Claude Code 使用 2000,并从每个 `tasks/get` 响应中重新读取该值 |

621| `statusMessage` | 可选。`/tasks` 显示的是您最新的 `tasks/get` 响应中的值,而不是这第一个应答中的值,省略该字段的响应会清除它。[来自 Claude Code 的状态消息](#status-messages-on-an-mcp-task)可能会取代它 |621| `statusMessage` | 可选。`/tasks` 显示的是您最新 `tasks/get` 响应中的值,而不是这第一个值,省略该字段的响应会清除它。[来自 Claude Code 的状态消息](#status-messages-on-an-mcp-task)可能会取代它 |

622 622 

623Claude Code 接受省略 `createdAt`、`lastUpdatedAt` 或 `ttlMs`,或将 `pollIntervalMs` 设置为 `null` 的任务应答。在 v2.1.317 之前,调用会改为以 `Unsupported result type` 错误失败。要同时兼容这些版本,请发送任务扩展要求的三个字段,并将 `pollIntervalMs` 作为数字发送或完全不发送。623Claude Code 接受省略 `createdAt`、`lastUpdatedAt` 或 `ttlMs`,或将 `pollIntervalMs` 设置为 `null` 的任务应答。在 v2.1.317 之前,此类调用会以 `Unsupported result type` 错误失败。若要同时兼容这些版本,请发送 tasks 扩展要求的三个字段,并将 `pollIntervalMs` 作为数字发送或完全不发送。

624 624 

625在 HTTP 或 claude.ai 连接器服务器上,任务应答必须在[按请求的计时器](#time-limits-on-mcp-tool-calls)内开始,因此请先接受作业并应答,然后再执行工作。625在 HTTP 或 claude.ai 连接器服务器上,任务应答必须在[按请求计时的计时器](#time-limits-on-mcp-tool-calls)内开始,因此请先接受作业并应答,然后再执行工作。

626 626 

627#### 报告状态、结果和问题627#### 报告状态、结果和问题

628 628 

629在任务应答之后,Claude Code 会立即发送带有 `{ "taskId": ... }` 的 `tasks/get`,然后每个轮询间隔重复一次。tasks 扩展要求您的响应携带 `"resultType": "complete"`,以及 `taskId`、`status`、`createdAt`、`lastUpdatedAt` 和 `ttlMs`。`ttlMs` 可以为 `null`,`statusMessage` 和 `pollIntervalMs` 是可选的。以下示例报告构建已完成:629任务应答之后,Claude Code 会立即发送带有 `{ "taskId": ... }` 的 `tasks/get`,然后每个轮询间隔重复一次。tasks 扩展要求您的响应携带 `"resultType": "complete"` 以及 `taskId`、`status`、`createdAt`、`lastUpdatedAt` 和 `ttlMs`。`ttlMs` 可以为 `null`,`statusMessage` 和 `pollIntervalMs` 是可选的。以下示例报告构建已完成:

630 630 

631```json theme={null}631```json theme={null}

632{632{


645| 状态、方法或响应 | Claude Code 如何处理 |645| 状态、方法或响应 | Claude Code 如何处理 |

646| - | - |646| - | - |

647| `working` | 继续轮询 |647| `working` | 继续轮询 |

648| `completed` | 将顶层 `result` 对象中的普通 `tools/call` 结果交给 Claude。其中的 `isError: true` 会被报告为失败 |648| `completed` | 将顶层 `result` 对象中的常规 `tools/call` 结果提供给 Claude。其中的 `isError: true` 会被报告为失败 |

649| `failed` | 将顶层 `error` 对象 `{ code, message, data }` 的 `message` 告知 Claude,tasks 扩展要求失败的任务包含该对象。如果没有该 `message`,Claude 会改为收到 `statusMessage`,否则收到 `Task failed` |649| `failed` | 将顶层 `error` 对象 `{ code, message, data }` 的 `message` 告知 Claude,tasks 扩展要求失败的任务提供该对象。如果缺少该 `message`,Claude 会收到 `statusMessage`,否则收到 `Task failed` |

650| `cancelled` | 将 `statusMessage` 告知 Claude,否则告知 `Task was cancelled by the server` |650| `cancelled` | 将 `statusMessage` 告知 Claude,否则告知 `Task was cancelled by the server` |

651| `input_required` | 读取 `inputRequests`,这是一个将您选择的键映射到 `{ method, params }` 的对象。Claude Code 会通过带有 `{ taskId, inputResponses }` 的 `tasks/update` 对每个键应答一次,其中 `inputResponses` 将相同的键映射到该请求的结果。每个任务超过 16 个的键会被忽略 |651| `input_required` | 读取 `inputRequests`,这是一个将您选择的键映射到 `{ method, params }` 的对象。Claude Code 通过带有 `{ taskId, inputResponses }` 的 `tasks/update` 对每个键应答一次,其中 `inputResponses` 将相同的键映射到该请求的结果。每个任务超过 16 个的键会被忽略 |

652| `inputRequests` 中的方法 | `elicitation/create` 仅在交互式终端会话中处理,`roots/list` 在所有地方都会处理。当 Claude Code 无法处理某个请求时,它会请求服务器取消该任务 |652| `inputRequests` 中的方法 | `elicitation/create` 仅在交互式终端会话中提供,`roots/list` 在所有场景中提供。当 Claude Code 无法处理某个请求时,它会请求服务器取消该任务 |

653| 其他 `status` 值 | Claude Code 会请求服务器取消该任务,并将其作为失败报告给 Claude |653| 其他 `status` 值 | Claude Code 请求服务器取消该任务,并将其作为失败报告给 Claude |

654| JSON-RPC 错误 `-32602` | 视为未知的任务 ID。对于后台任务,Claude Code 会继续询问最多五分钟,然后将结果作为未知报告给 Claude |654| JSON-RPC 错误 `-32602` | 被读取为未知任务 ID。对于后台任务,Claude Code 会持续询问最多五分钟,然后将结果作为未知报告给 Claude |

655| `tasks/cancel` | 例如,在服务器已连接时 Claude 或用户停止该任务时发送。退出时不发送 |655| `tasks/cancel` | 例如在服务器已连接时 Claude 或用户停止任务时发送。退出时不发送 |

656| `tasks/result`、`tasks/list`、`notifications/tasks` | 不使用,因此请将结果放在您的 `tasks/get` 响应中 |656| `tasks/result`、`tasks/list`、`notifications/tasks` | 不使用,因此请将结果放在您的 `tasks/get` 响应中 |

657 657 

658### 插件提供的 MCP 服务器658### 插件提供的 MCP 服务器

659 659 

660[插件](https://code.claude.com/docs/zh-CN/plugins/overview.md) 可以捆绑 MCP 服务器,在您启用插件时提供工具和集成。660[插件](https://code.claude.com/docs/zh-CN/plugins/overview.md)可以捆绑 MCP 服务器,在您启用插件时提供工具和集成。

661 661 

662**插件 MCP 服务器如何工作**:662**插件 MCP 服务器的工作原理**:

663 663 

664* 插件在插件根目录的 `.mcp.json` 中或内联在 `plugin.json` 中定义 MCP 服务器664* 插件在插件根目录的 `.mcp.json` 中定义 MCP 服务器,或在 `plugin.json` 中内联定义

665* 当您启用插件时,Claude Code 自动启动其 MCP 服务器665* 启用插件时,Claude Code 会自动启动其 MCP 服务器

666* Claude Code 将插件 MCP 工具与手动配置的 MCP 工具一起提供666* Claude Code 会将插件 MCP 工具与手动配置的 MCP 工具一并提供

667* 您通过安装或卸载插件来添加和删除插件服务器,而不是使用 `/mcp` 命令。您仍然可以在 `/mcp` 中 [切换已安装的插件服务器关闭](#disable-a-server-without-removing-it),这会停止 Claude Code 连接到它而不删除插件667* 插件服务器通过安装或卸载插件来添加和移除,而不是通过 `/mcp` 命令。您仍然可以在 `/mcp` 中[关闭已安装的插件服务器](#disable-a-server-without-removing-it),这会让 Claude Code 停止连接该服务器,而不会移除插件

668 668 

669**示例插件 MCP 配置**:669**插件 MCP 配置示例**:

670 670 

671在插件根目录的 `.mcp.json` 中:671在插件根目录的 `.mcp.json` 中:

672 672 


684}684}

685```685```

686 686 

687或内联在 `plugin.json` 中:687或在 `plugin.json` 中内联:

688 688 

689```json theme={null}689```json theme={null}

690{690{


700 700 

701**插件 MCP 功能**:701**插件 MCP 功能**:

702 702 

703* **自动生命周期**:服务器在这些时间点连接和断开:703* **自动生命周期**:服务器在以下时间点连接和断开:

704 * 在会话启动时,Claude Code 自动连接已启用插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可能改为显示 [`cached` 状态](#server-status-detail);Claude Code 在 Claude 首次调用其工具之一时连接它。当 stdio 插件服务器的连接在不到 15 分钟前失败时,Claude Code 会 [跳过该连接](https://code.claude.com/docs/zh-CN/errors.md#skipping-connection-recent-failure-cached)704 * 会话启动时,Claude Code 会自动连接已启用插件的服务器。在 `/mcp` 中,您以前使用过的远程(HTTP 或 SSE)插件服务器可能会显示 [`cached` 状态](#server-status-detail);Claude Code 会在 Claude 首次调用其某个工具时连接它。如果 stdio 插件服务器的连接在不到 15 分钟前失败过,Claude Code 会[跳过该连接](https://code.claude.com/docs/zh-CN/errors.md#skipping-connection-recent-failure-cached)

705 * 如果您在会话期间启用或禁用插件,Claude Code 在更改生效时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](https://code.claude.com/docs/zh-CN/plugins/cli-reference.md#reload-plugins) 说明了生效时间。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效705 * 如果您在会话期间启用或禁用插件,Claude Code 会在更改生效时连接或断开其 MCP 服务器。[无需重启即可应用插件更改](https://code.claude.com/docs/zh-CN/plugins/cli-reference.md#reload-plugins)说明了更改何时生效。在没有交互式终端的会话中,`/reload-plugins` 不会连接或断开插件 MCP 服务器;这些更改将在您的下一个会话中生效

706 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,当您从 Agent SDK [替换会话的 MCP 服务器列表](https://code.claude.com/docs/zh-CN/agent-sdk/typescript.md#mcpsetserversresult) 而未列出它们时也是如此706 * 重新加载时,Claude Code 会保留配置未更改的插件服务器的活动连接;当您从 Agent SDK [替换会话的 MCP 服务器列表](https://code.claude.com/docs/zh-CN/agent-sdk/typescript.md#mcpsetserversresult)而未指明这些服务器时,也会这样处理

707 * 当您在 v2.1.246 或更高版本上 [使用 `/cd` 移动会话](https://code.claude.com/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置所启用插件的服务器,并断开不再启用的插件的服务器,因此您无需在移动后运行 `/reload-plugins`707 * 在 v2.1.246 或更高版本中,当您[使用 `/cd` 移动会话](https://code.claude.com/docs/zh-CN/permissions#move-the-session-to-another-directory)时,Claude Code 会连接新目录的设置所启用的插件的服务器,并断开不再启用的插件的服务器,因此移动后无需运行 `/reload-plugins`

708 * 在 [云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md) 中,对尚未连接的插件服务器的 MCP 调用(例如空闲会话唤醒后)会按需启动服务器并等待它连接708 * 在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)中,对尚未连接的插件服务器发起的 MCP 调用(例如在空闲会话刚唤醒后)会按需启动该服务器并等待其连接

709* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](https://code.claude.com/docs/zh-CN/plugins/components.md#path-variables-and-persistent-data) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:709* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其[持久状态](https://code.claude.com/docs/zh-CN/plugins/components.md#path-variables-and-persistent-data)目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:

710 * `stdio` 服务器:`command`、`args`、`env`710 * `stdio` 服务器:`command`、`args`、`env`

711 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`711 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`

712* **用户环境访问**:访问与手动配置的服务器相同的环境变量712* **用户环境访问**:可访问与手动配置的服务器相同的环境变量

713* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,尽管传输支持可能因服务器而异713* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,但传输支持可能因服务器而异

714 714 

715插件服务器在 `/mcp` 中出现,并带有表明它们来自插件的指示器。715插件服务器会在 `/mcp` 中显示,并带有表明其来自插件的标识。

716 716 

717`claude mcp get` 会隐藏为插件的 stdio 或 WebSocket 服务器配置的值,因为这些值可能携带凭据:717`claude mcp get` 会隐藏为插件的 stdio 或 WebSocket 服务器配置的值,因为这些值可能包含凭据:

718 718 

719* **stdio 服务器**:它打印 `Command: stdio`、空的 `Args:` 行,并将每个环境变量显示为 `NAME=[REDACTED]`719* **stdio 服务器**:输出 `Command: stdio`、一个空的 `Args:` 行,并将每个环境变量显示为 `NAME=[REDACTED]`

720* **WebSocket 服务器**:它打印 `URL: ws`,并将每个标头显示为 `<name>: [REDACTED]`,`claude mcp list` 则显示 `ws` 来代替 URL720* **WebSocket 服务器**:输出 `URL: ws`,并将每个标头显示为 `<name>: [REDACTED]`,而 `claude mcp list` 会显示 `ws` 来代替 URL

721 721 

722要查看插件配置了什么,请 [在磁盘上找到插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-plugins-on-disk) 并阅读其 `.mcp.json` 或 `plugin.json`。722要查看插件配置的内容,请[在磁盘上找到插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-plugins-on-disk)并阅读其 `.mcp.json` 或 `plugin.json`。

723 723 

724**插件 MCP 工具名称**:724**插件 MCP 工具名称**:

725 725 

726来自插件捆绑的 MCP 服务器的工具在其可调用名称中包含插件名称和服务器键。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具的可调用名称为:726来自插件捆绑的 MCP 服务器的工具,其可调用名称中同时包含插件名称和服务器键。完整形式为 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都会被替换为 `_`。对于捆绑在名为 `my-plugin` 的插件中的 `database-tools` 服务器,`query` 工具的可调用名称为:

727 727 

728```728```

729mcp__plugin_my-plugin_database-tools__query729mcp__plugin_my-plugin_database-tools__query

730```730```

731 731 

732在 [权限规则](https://code.claude.com/docs/zh-CN/permissions.md)、skill 的 `allowed-tools` 列表、[子代理的 `tools` 字段](https://code.claude.com/docs/zh-CN/sub-agents#available-tools) 或 [hook 匹配器](https://code.claude.com/docs/zh-CN/hooks.md#match-mcp-tools) 中引用工具时使用此完整名称。针对裸服务器键编写的 hook 匹配器(例如 `mcp__database-tools__.*`)永远不会为插件捆绑的服务器触发。732在[权限规则](https://code.claude.com/docs/zh-CN/permissions.md)、skill 的 `allowed-tools` 列表、[子代理的 `tools` 字段](https://code.claude.com/docs/zh-CN/sub-agents#available-tools)或 [hook 匹配器](https://code.claude.com/docs/zh-CN/hooks.md#match-mcp-tools)中引用该工具时,请使用此完整名称。针对裸服务器键编写的 hook 匹配器(例如 `mcp__database-tools__.*`)永远不会对插件捆绑的服务器触发。

733 733 

734服务器本身以限定名称 `plugin:<plugin-name>:<server-name>` 注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](https://code.claude.com/docs/zh-CN/hooks#mcp-tool-hook-fields)。734服务器本身以限定名称 `plugin:<plugin-name>:<server-name>` 注册,例如 `plugin:my-plugin:database-tools`。在需要已配置服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](https://code.claude.com/docs/zh-CN/hooks#mcp-tool-hook-fields)。

735 735 

736有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](https://code.claude.com/docs/zh-CN/plugins/components.md#mcp-servers)。736有关在插件中捆绑 MCP 服务器的详细信息,请参阅[插件组件参考](https://code.claude.com/docs/zh-CN/plugins/components.md#mcp-servers)。

737 737 

738## MCP 安装作用域738## MCP 安装作用域

739 739 


1800* **Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本**:工具搜索默认开启,与 Anthropic API 上相同。1800* **Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本**:工具搜索默认开启,与 Anthropic API 上相同。

1801* **早期 Agent Platform 模型**:Claude Code 预先加载所有 MCP 工具,因为它们的服务堆栈拒绝所需的 beta 标头。`ENABLE_TOOL_SEARCH=true` 不会覆盖此设置。1801* **早期 Agent Platform 模型**:Claude Code 预先加载所有 MCP 工具,因为它们的服务堆栈拒绝所需的 beta 标头。`ENABLE_TOOL_SEARCH=true` 不会覆盖此设置。

1802 1802 

1803在 v2.1.221 之前,Claude Code 在 Google Cloud 的 Agent Platform 上为所有模型禁用工具搜索,除非您设置 `ENABLE_TOOL_SEARCH=true`。

1804 

1805使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:1803使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:

1806 1804 

1807| 值 | 行为 |1805| 值 | 行为 |

model-config.md +4 −4

Details

71* **Fable 5.2**:运行 `/model fable`,或使用 `claude --model fable` 启动。在 [Claude apps gateway](https://code.claude.com/docs/zh-CN/claude-apps-gateway) 会话中,请改为运行 `/model claude-fable-5-2`。71* **Fable 5.2**:运行 `/model fable`,或使用 `claude --model fable` 启动。在 [Claude apps gateway](https://code.claude.com/docs/zh-CN/claude-apps-gateway) 会话中,请改为运行 `/model claude-fable-5-2`。

72* **Fable 5.1 或 Fable 5**:按模型 ID 选择它。在 Anthropic API 上,运行 `/model claude-fable-5-1` 或 `/model claude-fable-5`,或使用 `claude --model claude-fable-5-1` 启动。在其他提供商上,使用您的提供商的模型 ID,或使用 `ANTHROPIC_DEFAULT_FABLE_MODEL` [固定它](#pin-models-for-third-party-deployments)。72* **Fable 5.1 或 Fable 5**:按模型 ID 选择它。在 Anthropic API 上,运行 `/model claude-fable-5-1` 或 `/model claude-fable-5`,或使用 `claude --model claude-fable-5-1` 启动。在其他提供商上,使用您的提供商的模型 ID,或使用 `ANTHROPIC_DEFAULT_FABLE_MODEL` [固定它](#pin-models-for-third-party-deployments)。

73 73 

74在 Pro、Max、Team 和 Enterprise 套餐上,保存在您用户设置中的 `claude-fable-5-1` 模型会迁移到 `fable` 别名:74在 Pro、Max、Ultra、Team 和 Enterprise 套餐上,保存在您用户设置中的 `claude-fable-5-1` 模型会迁移到 `fable` 别名:

75 75 

76* **Pro 或 Max 套餐**:迁移会在您首次运行 v2.1.321 或更高版本时进行。在终端中,启动模型行可能会显示一次 `(auto-updated)`。76* **Pro、Max 或 Ultra 套餐**:迁移会在您首次运行 v2.1.321 或更高版本时进行。在终端中,启动模型行可能会显示一次 `(auto-updated)`。

77* **Team 或 Enterprise 套餐**:迁移会等待您组织的设置,因此可能在之后的某次启动时进行,也可能根本不会进行。迁移从下一个会话开始生效,不会显示 `(auto-updated)` 行。要检查您的模型,请运行 `/model`。77* **Team 或 Enterprise 套餐**:迁移会等待您组织的设置,因此可能在之后的某次启动时进行,也可能根本不会进行。迁移从下一个会话开始生效,不会显示 `(auto-updated)` 行。要检查您的模型,请运行 `/model`。

78 78 

79迁移后,除非您已为 Fable 5.2 [设置了级别](#adjust-effort-level),否则会话会以 Fable 5.2 的默认 effort 启动。Console 账户、第三方提供商以及项目、本地或托管设置会保留 `claude-fable-5-1`。79迁移后,除非您已为 Fable 5.2 [设置了级别](#adjust-effort-level),否则会话会以 Fable 5.2 的默认 effort 启动。Console 账户、第三方提供商以及项目、本地或托管设置会保留 `claude-fable-5-1`。


97 97 

98根据您的套餐和席位等级,Fable 的使用可能计入[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),而不是从您套餐包含的限额中扣除。在这种情况下,`/model` 选择器会在 Fable 行上显示"Requires usage credits"。要管理使用额度,请参阅 [Add usage credits to your subscription](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。98根据您的套餐和席位等级,Fable 的使用可能计入[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),而不是从您套餐包含的限额中扣除。在这种情况下,`/model` 选择器会在 Fable 行上显示"Requires usage credits"。要管理使用额度,请参阅 [Add usage credits to your subscription](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。

99 99 

100在交互式会话中,Claude Code 可能会显示 Fable 使用额度同意提示。使用组织计费的企业套餐成员不会看到该提示。您可以选择使用使用额度继续使用 Fable,或切换到您的默认模型。您也可以关闭提示:100在交互式会话中,Claude Code 可能会显示 Fable 使用额度同意提示。您可以选择使用使用额度继续使用 Fable,或切换到您的默认模型。您也可以关闭提示:

101 101 

102* 当您使用 `/model` 选择 Fable 模型时,将保持当前模型。102* 当您使用 `/model` 选择 Fable 模型时,将保持当前模型。

103* 在会话中途,Claude Code 会在您的默认模型上继续该轮次。103* 在会话中途,Claude Code 会在您的默认模型上继续该轮次。


225 225 

226* **您只为一个会话选择了它。** 在选择器中按 `s`、使用 `--model` 启动以及在非交互模式中运行 `/model` 都仅适用于当前会话,不会改变已保存的默认值。226* **您只为一个会话选择了它。** 在选择器中按 `s`、使用 `--model` 启动以及在非交互模式中运行 `/model` 都仅适用于当前会话,不会改变已保存的默认值。

227* **优先级更高的项设置了模型。** 项目或托管设置中的 `model` 值、shell 中的 `ANTHROPIC_MODEL`,或管理员设置为覆盖用户选择的[组织默认值](#organization-default-model),会在每次启动时再次生效。您的 `/model` 选择仍然已保存,只是优先级较低。当项目或托管设置设置了模型时,启动标题会指明该文件。227* **优先级更高的项设置了模型。** 项目或托管设置中的 `model` 值、shell 中的 `ANTHROPIC_MODEL`,或管理员设置为覆盖用户选择的[组织默认值](#organization-default-model),会在每次启动时再次生效。您的 `/model` 选择仍然已保存,只是优先级较低。当项目或托管设置设置了模型时,启动标题会指明该文件。

228* **Claude Code 无法保存您的选择。** `/model` 会将 `model` 写入 `~/.claude/settings.json`。如果您无法写入该文件(例如因为另一个工具生成了该文件,或将其链接到只读副本),您所选的模型仅在当前会话中有效,下次启动时会读取旧值。请在生成该文件的工具中设置 `model`,或使该文件可写。参阅 [A change you made in Claude Code is lost in new sessions](https://code.claude.com/docs/zh-CN/settings.md#a-change-you-made-in-claude-code-is-lost-in-new-sessions)。228* **Claude Code 无法保存您的选择。** `/model` 会将 `model` 写入 `~/.claude/settings.json`。如果您无法写入该文件(例如因为另一个工具生成了该文件,或将其链接到只读副本),您所选的模型仅在当前会话中有效,下次启动时会读取旧值。请在生成该文件的工具中设置 `model`,或使该文件可写。参阅 [您在 Claude Code 中所做的更改在新会话中丢失](https://code.claude.com/docs/zh-CN/settings.md#a-change-you-made-in-claude-code-is-lost-in-new-sessions)。

229* **您恢复了一个会话。** 使用 `claude --resume` 或 `--continue` 恢复的会话通常会[保持其原先使用的模型](#setting-your-model),而不是当前的默认值。229* **您恢复了一个会话。** 使用 `claude --resume` 或 `--continue` 恢复的会话通常会[保持其原先使用的模型](#setting-your-model),而不是当前的默认值。

230 230 

231## 限制模型选择231## 限制模型选择

Details

146 146 

147### 指标基数控制147### 指标基数控制

148 148 

149以下环境变量控制指标中包含哪些属性以管理基数:149以下环境变量控制指标和事件中包含哪些属性以管理基数:

150 150 

151| 环境变量 | 描述 | 默认值 | 禁用示例 |151| 环境变量 | 描述 | 默认值 | 禁用示例 |

152| - | - | - | - |152| - | - | - | - |

153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指标中包含 session.id 和云会话上的 ccr.session.id 属性 | `true` | `false` |153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指标和事件中包含 session.id 和云端会话的 ccr.session.id 属性 | `true` | `false` |

154| `OTEL_METRICS_INCLUDE_VERSION` | 在指标中包含 app.version 属性 | `false` | `true` |154| `OTEL_METRICS_INCLUDE_VERSION` | 在指标和事件中包含 app.version 属性 | `false` | `true` |

155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指标中包含 user.account\_uuid 和 user.account\_id 属性 | `true` | `false` |155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指标和事件中包含 user.account\_uuid 和 user.account\_id 属性 | `true` | `false` |

156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指标中包含 app.entrypoint 属性 | `false` | `true` |156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指标和事件中包含 app.entrypoint 属性 | `false` | `true` |

157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 将 `OTEL_RESOURCE_ATTRIBUTES` 中的键作为属性包含在指标数据点上 | `true` | `false` |157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 将 `OTEL_RESOURCE_ATTRIBUTES` 中的键作为属性包含在指标数据点和事件上 | `true` | `false` |

158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 在指标和事件上包含 `vcs.*` [存储库身份属性](#repository-attributes)。需要 Claude Code v2.1.269 或更高版本 | `false` | `true` |158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 在指标和事件上包含 `vcs.*` [存储库身份属性](#repository-attributes)。需要 Claude Code v2.1.269 或更高版本 | `false` | `true` |

159 159 

160较低的基数通常意味着更好的性能和更低的存储成本,但分析的数据粒度较低。160较低的基数通常意味着更好的性能和更低的存储成本,但分析的数据粒度较低。


523export OTEL_METRICS_EXPORTER=otlp523export OTEL_METRICS_EXPORTER=otlp

524export OTEL_LOGS_EXPORTER=otlp524export OTEL_LOGS_EXPORTER=otlp

525export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf525export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf

526export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318526export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318/v1/metrics

527export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc527export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc

528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

529```529```


571 571 

572要更详细地属性化遥测,请使用这些选项:572要更详细地属性化遥测,请使用这些选项:

573 573 

574* **识别 Claude Tag 会话**:设置 `OTEL_METRICS_INCLUDE_ENTRYPOINT=true`,如[指标基数控制](#metrics-cardinality-control)下所述。指标随后会携带 `app.entrypoint`,其值对于 Claude Tag 会话为 `claude-in-slack`。574* **识别 Claude Tag 会话**:设置 `OTEL_METRICS_INCLUDE_ENTRYPOINT=true`,如[指标基数控制](#metrics-cardinality-control)下所述。指标和事件随后会携带 `app.entrypoint`,其值对于 Claude Tag 会话为 `claude-in-slack`。

575* **添加自定义属性**:在设置这些会话的其他 `OTEL_*` 变量的同一位置设置 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support)。如果您改为在环境的[设置脚本](https://code.claude.com/docs/zh-CN/cloud-environments.md#setup-scripts)中 `export` 它,该值不会到达 Claude Code:设置脚本是在 Claude Code 启动前运行的单独 Bash 脚本,它导出的变量随之结束。575* **添加自定义属性**:在设置这些会话的其他 `OTEL_*` 变量的同一位置设置 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support)。如果您改为在环境的[设置脚本](https://code.claude.com/docs/zh-CN/cloud-environments.md#setup-scripts)中 `export` 它,该值不会到达 Claude Code:设置脚本是在 Claude Code 启动前运行的单独 Bash 脚本,它导出的变量随之结束。

576 576 

577在 Claude Tag 频道会话中,Claude 作为您组织的[共享身份](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses)工作,而不是作为任何成员,因此不要依赖 `user.*` 属性来识别谁标记了 Claude。577在 Claude Tag 频道会话中,Claude 作为您组织的[共享身份](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses)工作,而不是作为任何成员,因此不要依赖 `user.*` 属性来识别谁标记了 Claude。


587| `session.id` | Claude Code 自身的会话 ID,`/clear` 会替换它 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |587| `session.id` | Claude Code 自身的会话 ID,`/clear` 会替换它 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |

588| `ccr.session.id` | 云端会话标识符,即 `CLAUDE_CODE_REMOTE_SESSION_ID` 的值,仅出现在运行于[云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md)中的会话上 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |588| `ccr.session.id` | 云端会话标识符,即 `CLAUDE_CODE_REMOTE_SESSION_ID` 的值,仅出现在运行于[云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md)中的会话上 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |

589| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认值:false) |589| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认值:false) |

590| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py`、`claude-vscode`,或用于 Claude Tag 会话的 `claude-in-slack` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认值:false) |590| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py`、`claude-vscode`;云端之外的 Claude Desktop Code 标签页会话为 `claude-desktop`,[第三方部署](https://claude.com/docs/third-party/claude-desktop/overview)上的同类会话为 `claude-desktop-3p`,Claude Tag 会话为 `claude-in-slack`。云端会话的值包括 `remote`,以及从 Claude Desktop 或移动应用启动的会话对应的 `remote_desktop` 和 `remote_mobile` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认值:false) |

591| `organization.id` | 组织 UUID(已进行身份验证时) | 可用时始终包含 |591| `organization.id` | 组织 UUID(已进行身份验证时) | 可用时始终包含 |

592| `user.account_uuid` | 账户 UUID(已进行身份验证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |592| `user.account_uuid` | 账户 UUID(已进行身份验证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |

593| `user.account_id` | 与 Anthropic 管理 API 匹配的带标签格式账户 ID(已进行身份验证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |593| `user.account_id` | 与 Anthropic 管理 API 匹配的带标签格式账户 ID(已进行身份验证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |


643 643 

644| 指标名称 | 描述 | 单位 |644| 指标名称 | 描述 | 单位 |

645| - | - | - |645| - | - | - |

646| `claude_code.session.count` | 已启动的 CLI 会话计数 | 无 |646| `claude_code.session.count` | 启动的会话数 | 无 |

647| `claude_code.lines_of_code.count` | 已修改的代码行数计数 | 无 |647| `claude_code.lines_of_code.count` | 已修改的代码行数计数 | 无 |

648| `claude_code.pull_request.count` | 已创建的 Pull Request 数量 | 无 |648| `claude_code.pull_request.count` | 已创建的 Pull Request 数量 | 无 |

649| `claude_code.commit.count` | 已创建的 git 提交数量 | 无 |649| `claude_code.commit.count` | 已创建的 git 提交数量 | 无 |


660 660 

661#### 会话计数器661#### 会话计数器

662 662 

663在每个会话开始时递增。663在每个会话开始时递增。要统计人数,请参阅[用量监控](#usage-monitoring)。

664 664 

665**属性**:665**属性**:

666 666 


1458 1458 

1459与本页上的所有 OTel 事件一样,该事件仅发送到您配置的遥测后端。需要 Claude Code v2.1.227 或更高版本。1459与本页上的所有 OTel 事件一样,该事件仅发送到您配置的遥测后端。需要 Claude Code v2.1.227 或更高版本。

1460 1460 

1461当 Claude Code 无法安全地确定保留期限时,会暂停清理,并发出 `result` 设置为 `"skipped"` 且带有 `skip_reason` 的事件。当[托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)设置了 `cleanupPeriodDays` 时,托管值会固定保留期限,即使较低优先级作用域中的设置文件损坏或无效,清理也会运行。当 `managed-settings.json` 本身无法读取时,Claude Code 仍会暂停清理,除非[托管层级](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)从其他位置提供了 `cleanupPeriodDays`,例如服务器托管设置,或位于损坏文件旁的 `managed-settings.d/` 附加文件。删除计数器属性仅在 `result` 为 `"complete"` 时存在。1461读取 `result` 以了解扫描是否已运行:

1462 

1463* `"complete"`:扫描已运行,事件包含其计数

1464* `"skipped"`:Claude Code 无法安全地确定保留期,因此暂停了扫描,事件不包含计数。如果 `skip_reason` 为 `"settings_unknowable"` 或 `"settings_invalid_key_set"`,请修复该机器上 `/status` 报告的设置错误,以便之后的会话可以运行扫描

1465 

1466当[托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)设置了 `cleanupPeriodDays` 时,托管值会固定保留期,即使较低优先级作用域中的设置文件损坏或无效,扫描也会运行。

1462 1467 

1463**事件名称**:`claude_code.retention_sweep`1468**事件名称**:`claude_code.retention_sweep`

1464 1469 


1469* `event.timestamp`:ISO 8601 时间戳1474* `event.timestamp`:ISO 8601 时间戳

1470* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)1475* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1471* `result`:清理已运行时为 `"complete"`,Claude Code 暂停清理时为 `"skipped"`1476* `result`:清理已运行时为 `"complete"`,Claude Code 暂停清理时为 `"skipped"`

1472* `period_days`:合并后设置中的 `cleanupPeriodDays` 值(以天为单位),如果没有任何来源设置该值,则为 `30`。在 skipped 事件中,为清理本应使用的值,根据 Claude Code 能够读取的设置来源计算得出1477* `period_days`:扫描开始时使用的保留期(以天为单位):合并设置中的 `cleanupPeriodDays`,并应用 [`settings.read` hook](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook) 所做的任何更改。如果这使该键未设置,则为 `30`。在 skipped 事件中,为扫描本应使用的值,根据 Claude Code 能够读取的设置来源计算得出

1473* `used_default`:没有可读取的设置来源设置 `cleanupPeriodDays` 时为 `"true"`,否则为 `"false"`。在 complete 事件中,`"true"` 表示应用了 30 天的默认值1478* `used_default`:当 `period_days` 回退到 `30` 时为 `"true"`,否则为 `"false"`。在 complete 事件中,`"true"` 表示应用了 30 天默认值

1474* `skip_reason`:Claude Code 暂停清理的原因。仅当 `result` 为 `"skipped"` 时存在:1479* `skip_reason`:Claude Code 暂停清理的原因。仅当 `result` 为 `"skipped"` 时存在:

1475 * `"user_source_disabled"`:用户设置被排除(例如通过 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 标志或 SDK 的 [`settingSources`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options) 选项),且没有启用的来源提供 `cleanupPeriodDays`1480 * `"user_source_disabled"`:用户设置被排除(例如通过 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 标志或 SDK 的 [`settingSources`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options) 选项),且没有启用的来源提供 `cleanupPeriodDays`

1476 * `"settings_unknowable"`:某个设置文件无法读取或解析,因此 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 可能被设置为 Claude Code 看不到的值1481 * `"settings_unknowable"`:某个设置文件无法读取或解析,因此 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 可能被设置为 Claude Code 看不到的值


1549| 指标 | 分析机会 |1554| 指标 | 分析机会 |

1550| - | - |1555| - | - |

1551| `claude_code.token.usage` | 按 token [`type`](#token-counter)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |1556| `claude_code.token.usage` | 按 token [`type`](#token-counter)、用户、团队、模型、`skill.name`、`plugin.name` 或 `agent.name` 分解 |

1552| `claude_code.session.count` | 跟踪随时间推移的采用和参与度 |

1553| `claude_code.lines_of_code.count` | 通过跟踪代码添加和删除来衡量生产力,按模型分解 |1557| `claude_code.lines_of_code.count` | 通过跟踪代码添加和删除来衡量生产力,按模型分解 |

1554| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |1558| `claude_code.commit.count` & `claude_code.pull_request.count` | 了解对开发工作流的影响 |

1555 1559 

1560要比较不同使用入口的活跃用户,请设置 `OTEL_METRICS_INCLUDE_ENTRYPOINT=true`,以将 [`app.entrypoint`](#standard-attributes) 添加到指标和事件中。然后在 [`claude_code.user_prompt`](#user-prompt-event) 事件上按入口点统计不同的 `user.account_uuid` 值;如果仅导出指标,则在 `claude_code.token.usage` 上统计。例如,使用 `cli` 表示交互式 CLI 会话,并将 `claude-desktop`、`claude-desktop-3p` 和 `remote_desktop` 归为一组,表示 Claude Desktop 的 Code 选项卡。

1561 

1562`user.account_uuid` 无法识别 Claude Tag 频道会话中的人员,并且在没有 Claude 账户的会话中缺失:请参阅[将操作归属于用户](#attribute-actions-to-users)。当一个人启动多个会话,或某个会话未收到任何提示词时,[`claude_code.session.count`](#session-counter) 会增加,但不会增加活跃用户数。

1563 

1556### 成本监控1564### 成本监控

1557 1565 

1558`claude_code.cost.usage` 指标有助于:1566`claude_code.cost.usage` 指标有助于:


1783## 安全和隐私1791## 安全和隐私

1784 1792 

1785* OpenTelemetry 导出到您的后端是可选的,需要显式配置。有关 Anthropic 的单独操作遥测以及如何禁用它,请参阅 [数据使用](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)1793* OpenTelemetry 导出到您的后端是可选的,需要显式配置。有关 Anthropic 的单独操作遥测以及如何禁用它,请参阅 [数据使用](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)

1786* 原始文件内容和代码片段不包含在指标或事件中。Trace spans 是一个单独的数据路径:请参阅下面的 `OTEL_LOG_TOOL_CONTENT` 项目符号1794* 默认情况下,原始文件内容和代码片段不包含在指标或事件中。如果您设置了 `OTEL_LOG_TOOL_DETAILS` 或 `OTEL_LOG_RAW_API_BODIES` 等变量,事件可能会包含它们。Trace spans 是一个单独的数据路径:请参阅下面的 `OTEL_LOG_TOOL_CONTENT` 项目符号

1787* 通过 OAuth 认证时,`user.email` 包含在遥测属性中,仅发送到您配置的 OTel 端点,永远不会发送到 Anthropic。如果这对您的组织是一个问题,请与您的遥测后端合作以过滤或编辑此字段1795* 通过 OAuth 认证时,`user.email` 包含在遥测属性中,仅发送到您配置的 OTel 端点,永远不会发送到 Anthropic。如果这对您的组织是一个问题,请与您的遥测后端合作以过滤或编辑此字段

1788* 默认情况下不收集用户提示词内容。仅记录提示词长度。要包含提示词内容,请设置 `OTEL_LOG_USER_PROMPTS=1`。启用后:1796* 默认情况下不收集用户提示词内容。仅记录提示词长度。要包含提示词内容,请设置 `OTEL_LOG_USER_PROMPTS=1`。启用后:

1789 * `user_prompt` 事件在两个属性中携带提示词文本:`prompt` 和 [`prompt_text`](#user-prompt-event)。如果您在收集器中按属性名称删除或屏蔽该事件的提示词文本,请在规则中同时指定这两个属性1797 * `user_prompt` 事件在两个属性中携带提示词文本:`prompt` 和 [`prompt_text`](#user-prompt-event)。如果您在收集器中按属性名称删除或屏蔽该事件的提示词文本,请在规则中同时指定这两个属性

Details

686* **如果您接受**:Claude Code 在 `~/.claude/settings.json` 中将 `skipDangerousModePermissionPrompt` 设置为 `true`,因此后续会话会跳过对话框。要再次看到对话框,请从该文件中删除该键或将其设置为 `false`。[`skipDangerousModePermissionPrompt` 参考](https://code.claude.com/docs/zh-CN/settings-reference#skipdangerousmodepermissionprompt)列出了您或您的组织可以设置它的其他设置文件。686* **如果您接受**:Claude Code 在 `~/.claude/settings.json` 中将 `skipDangerousModePermissionPrompt` 设置为 `true`,因此后续会话会跳过对话框。要再次看到对话框,请从该文件中删除该键或将其设置为 `false`。[`skipDangerousModePermissionPrompt` 参考](https://code.claude.com/docs/zh-CN/settings-reference#skipdangerousmodepermissionprompt)列出了您或您的组织可以设置它的其他设置文件。

687* **如果您拒绝**:Claude Code 退出。687* **如果您拒绝**:Claude Code 退出。

688 688 

689如果您传递的 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 不包含 `user`,即使您之前已接受,对话框也可能再次出现。要跳过它,请添加 `user`,例如 `--setting-sources user,project`。

690 

689在[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)中不显示对话框。691在[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)中不显示对话框。

690 692 

691当您的接受记录在用户设置或托管设置中时,[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)会遵循该接受:693当您的接受记录在用户设置或托管设置中时,[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)会遵循该接受:

permissions.md +6 −4

Details

506* **解析到工作目录外**:当请求的路径在您的工作目录内,而它解析到的文件不在时,在[`acceptEdits` 模式](https://code.claude.com/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)中写入不会自动批准。在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中,除非 allow 规则批准写入,否则您会被提示而不是分类器决定。提示命名写入解析到的路径。506* **解析到工作目录外**:当请求的路径在您的工作目录内,而它解析到的文件不在时,在[`acceptEdits` 模式](https://code.claude.com/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)中写入不会自动批准。在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中,除非 allow 规则批准写入,否则您会被提示而不是分类器决定。提示命名写入解析到的路径。

507* **解析到请求的路径不命名的受保护路径**:[受保护的路径表](https://code.claude.com/docs/zh-CN/permission-modes.md#protected-paths)给出每个权限模式的结果,除了表将写入路由到分类器的地方,此写入改为提示您。507* **解析到请求的路径不命名的受保护路径**:[受保护的路径表](https://code.claude.com/docs/zh-CN/permission-modes.md#protected-paths)给出每个权限模式的结果,除了表将写入路由到分类器的地方,此写入改为提示您。

508 508 

509##### 无法解析或改变的路径509##### 无法解析或会发生变化的路径

510 510 

511当 Claude Code 无法确定路径在磁盘上的位置时,例如因为路径上的符号链接形成循环,Read、Edit 和 Write 工具[拒绝操作](https://code.claude.com/docs/zh-CN/errors.md#refusing-after-a-symlink-changed)。511当 Claude Code 无法确定路径在磁盘上的位置时,例如因为路径上的符号链接形成循环,Read、Edit 和 Write 工具[拒绝操作](https://code.claude.com/docs/zh-CN/errors.md#refusing-after-a-symlink-changed)。

512 512 


578* `mcp__puppeteer__*` 使用通配符语法,也匹配来自 `puppeteer` 服务器的所有工具578* `mcp__puppeteer__*` 使用通配符语法,也匹配来自 `puppeteer` 服务器的所有工具

579* `mcp__puppeteer__puppeteer_navigate` 匹配由 `puppeteer` 服务器提供的 `puppeteer_navigate` 工具579* `mcp__puppeteer__puppeteer_navigate` 匹配由 `puppeteer` 服务器提供的 `puppeteer_navigate` 工具

580 580 

581为 MCP 工具编写 allow 规则时不要带[说明符](#use-specifiers-for-fine-grained-control)([权限更新](https://code.claude.com/docs/zh-CN/hooks.md#permission-update-entries)中称之为 `ruleContent`)。如果您添加说明符以仅允许某个工具的部分调用,该规则不会匹配任何调用。如需改为阻止部分调用,请参阅[按输入参数匹配](#match-by-input-parameter)。

582 

581对于 `<server>`,请按照服务器名称在该服务器工具名称中出现的形式编写。以下示例展示了对于包含特殊字符的名称、来自插件的服务器,以及包含 `__` 或以 `_` 结尾的名称应编写的规则:583对于 `<server>`,请按照服务器名称在该服务器工具名称中出现的形式编写。以下示例展示了对于包含特殊字符的名称、来自插件的服务器,以及包含 `__` 或以 `_` 结尾的名称应编写的规则:

582 584 

583* **包含 `.` 或空格等字符的名称**:这些字符会变为 `_`,因此对于您配置为 `my.server` 的服务器,请编写 `mcp__my_server__*`585* **包含 `.` 或空格等字符的名称**:这些字符会变为 `_`,因此对于您配置为 `my.server` 的服务器,请编写 `mcp__my_server__*`


632 634 

633PreToolUse hook 决定不会绕过权限规则。Claude Code 评估 deny 和 ask 规则,无论 PreToolUse hook 返回什么:匹配的 deny 规则会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然会提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。635PreToolUse hook 决定不会绕过权限规则。Claude Code 评估 deny 和 ask 规则,无论 PreToolUse hook 返回什么:匹配的 deny 规则会阻止调用,匹配的 ask 规则即使在 hook 返回 `"allow"` 或 `"ask"` 时仍然会提示。这保留了[管理权限](#manage-permissions)中描述的 deny 优先级,包括在托管设置中设置的 deny 规则。

634 636 

635该优先级涵盖设置文件中的 hook 和插件的 `hooks/hooks.json` 中的 hook。您安装的处理 [`tool.check`](https://code.claude.com/docs/zh-CN/plugins/mods/events#approve-or-refuse-a-tool-call-before-the-user-is-asked) 事件的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 会在 `PreToolUse` hook 运行之后给出其答案。当机器上存在[托管设置](https://code.claude.com/docs/zh-CN/settings.md#check-what-your-organization-enforces),或会话的凭据是团队或企业 [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 时,在 mod 批准调用的情况下,以下结果默认保持不变:637该优先级涵盖设置文件中的 hook 和插件的 `hooks/hooks.json` 中的 hook。您安装的处理 [`tool.check`](https://code.claude.com/docs/zh-CN/plugins/mods/events#approve-or-refuse-a-tool-call-before-the-user-is-asked) 事件的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 会在 `PreToolUse` hook 运行之后给出其答案。当存在[托管设置](https://code.claude.com/docs/zh-CN/settings.md#check-what-your-organization-enforces)或 [`managed-mcp.json` 文件](https://code.claude.com/docs/zh-CN/managed-mcp#deploy-managed-mcp-json),或会话的凭据是团队或企业 [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 时,在 mod 批准调用的情况下,以下结果默认保持不变:

636 638 

637* deny 规则拒绝的调用仍会被拒绝,您的组织可以更改这一点。639* deny 规则拒绝的调用仍会被拒绝。

638* ask 规则会提示的调用仍会提示您。640* ask 规则会提示的调用仍会提示您。

639* `PreToolUse` hook 或 [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 会提示的调用仍会提示您。641* `PreToolUse` hook 或 [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 会提示的调用仍会提示您。

640* `PreToolUse` hook 阻止的调用仍会被阻止,无论该 hook 来自哪个设置文件。642* `PreToolUse` hook 阻止的调用仍会被阻止,无论该 hook 来自哪个设置文件。

641* 您的 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 或 Agent SDK [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input#handle-tool-approval-requests)会被询问的调用,仍会交由该工具或回调处理。643* 您的 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 或 Agent SDK [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input#handle-tool-approval-requests)会被询问的调用,仍会交由该工具或回调处理。

642 644 

643如果既没有托管设置,会话的凭据也不是团队或企业 `/login`,mod 就可以批准 deny 规则拒绝的调用或 `PreToolUse` hook 阻止的调用。改用 API 密钥或长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话并未使用该登录,即使该登录已被存储。645您的环境可能既没有托管设置,也没有 `managed-mcp.json` 文件,会话的凭据也不是团队或企业 `/login`。在这种环境下,mod 可以批准 deny 规则拒绝的调用或 `PreToolUse` hook 阻止的调用。改用 API 密钥或长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话并未使用该登录,即使该登录已被存储。

644 646 

645在这种配置下,当 mod 批准 ask 规则、`PreToolUse` hook 或 `permissions.blockReadsOutsideWorkingDirectories` 会提示的调用时,您不会收到提示。对于 mod 批准的调用,您的 `--permission-prompt-tool` 或 `canUseTool` 回调也不会被询问。在所有配置下,自动模式、计划模式和 `dontAsk` 模式各自还会带来其特有的结果:647在这种配置下,当 mod 批准 ask 规则、`PreToolUse` hook 或 `permissions.blockReadsOutsideWorkingDirectories` 会提示的调用时,您不会收到提示。对于 mod 批准的调用,您的 `--permission-prompt-tool` 或 `canUseTool` 回调也不会被询问。在所有配置下,自动模式、计划模式和 `dontAsk` 模式各自还会带来其特有的结果:

646 648 

Details

24 24 

25`claude plugins` 是 `claude plugin` 的别名。25`claude plugins` 是 `claude plugin` 的别名。

26 26 

27所有子命令共享以下退出码、插件参数和作用域值:27所有子命令共用以下退出码、插件参数和作用域值:

28 28 

29* **退出码**:成功时为 `0`,失败时为 `1`。`validate` 额外使用退出码 `2` 表示意外错误,`eval` 额外使用[其章节](#plugin-eval)中列出的退出码。29* **退出码**:成功时为 `0`,失败时为 `1`。`validate` 额外使用退出码 `2` 表示意外错误,`eval` 额外使用[其章节](#plugin-eval)中列出的退出码。

30* **插件参数**:`<plugin>` 参数是插件的 `name` 或 `name@marketplace`。当两个市场提供同名插件时,请使用限定形式。`configure` 只接受限定形式。30* **插件参数**:`<plugin>` 参数是插件的 `name` 或 `name@marketplace`。当两个市场提供同名插件时,请使用限定形式。`configure` 只接受限定形式。


32 32 

33### plugin init33### plugin init

34 34 

35在 `~/.claude/skills/<name>/` 创建新插件的脚手架。除非您的管理员已[阻止 skills 目录插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#skills-directory-plugins-blocked-by-managed-settings),否则它会在您的下一个会话中以 `<name>@skills-dir` 的形式加载,无需安装步骤。35在 `~/.claude/skills/<name>/` 下生成一个新插件的脚手架。除非您的管理员已[阻止 skills 目录插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#skills-directory-plugins-blocked-by-managed-settings),否则它会在您的下一个会话中以 `<name>@skills-dir` 的形式加载,无需安装步骤。

36 36 

37`new` 是 `init` 的别名。37`new` 是 `init` 的别名。

38 38 


44 44 

45`<name>` 会成为 `~/.claude/skills/` 下的目录名,以及插件清单中的 `name`。45`<name>` 会成为 `~/.claude/skills/` 下的目录名,以及插件清单中的 `name`。

46 46 

47该命令没有用于指定其他位置的标志。如需改为在项目内创建脚手架,请参阅[创建插件](https://code.claude.com/docs/zh-CN/plugins/create.md)。47该命令没有用于指定其他位置的标志。如需改为在项目内生成脚手架,请参阅[创建插件](https://code.claude.com/docs/zh-CN/plugins/create.md)。

48 48 

49| 标志 | 说明 |49| 标志 | 描述 |

50| :- | :- |50| :- | :- |

51| `--description <text>` | 清单描述 |51| `--description <text>` | 清单描述 |

52| `--author <name>` | 作者名称。默认为 `git config user.name` |52| `--author <name>` | 作者姓名。默认为 `git config user.name` |

53| `--author-email <email>` | 作者邮箱。默认为 `git config user.email` |53| `--author-email <email>` | 作者邮箱。默认为 `git config user.email` |

54| `--with <components...>` | 同时为 `skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style` 或 `channel` 创建初始文件 |54| `--with <components...>` | 同时为 `skills`、`agents`、`hooks`、`mcp`、`lsp`、`output-style` 或 `channel` 生成起始文件 |

55| `-f, --force` | 覆盖目标位置已有的 `.claude-plugin/` |55| `-f, --force` | 覆盖目标位置已有的 `.claude-plugin/` |

56 56 

57创建带有初始 skill 和 hook 文件的插件脚手架:57生成一个带有起始 skill 和 hook 文件的插件:

58 58 

59```bash theme={null}59```bash theme={null}

60claude plugin init my-helper --with skills hooks60claude plugin init my-helper --with skills hooks

61```61```

62 62 

63Claude Code 会验证其写入的内容并打印 `Created plugin "my-helper" at ~/.claude/skills/my-helper`,随后显示该插件加载时使用的 id,以及用于关闭它的 `claude plugin disable` 命令。63Claude Code 会验证它写入的内容,并打印 `Created plugin "my-helper" at ~/.claude/skills/my-helper`,随后显示该插件加载时使用的 id,以及用于关闭它的 `claude plugin disable` 命令。

64 64 

65当 Claude Code 无法安全地创建脚手架时,它会以 `1` 退出且不写入任何内容,消息中会说明原因。常见原因如下:65当 Claude Code 无法安全地生成脚手架时,它会以 `1` 退出且不写入任何内容,消息中会说明原因。常见原因如下:

66 66 

67* 未知的 `--with` 值67* 未知的 `--with` 值

68* 目标位置已有脚手架,且未指定 `--force`68* 目标位置已有脚手架但未使用 `--force`

69* 托管的市场允许列表不包含 `skills-dir` 来源,或拒绝列表中列出了该来源。消息为 [`Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`](https://code.claude.com/docs/zh-CN/plugins/troubleshooting#plugins-from-claude-skills-are-blocked-by-your-organizations-managed-s)。69* 托管的市场允许列表中不包含 `skills-dir` 来源,或拒绝列表中列出了它。此时的消息为 [`Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`](https://code.claude.com/docs/zh-CN/plugins/troubleshooting#plugins-from-claude-skills-are-blocked-by-your-organizations-managed-s)。

70 70 

71### plugin install71### plugin install

72 72 


76claude plugin install <plugin> [options]76claude plugin install <plugin> [options]

77```77```

78 78 

79大多数插件在安装时不会出现提示。对于其市场条目[通过运行命令来安装](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md)或[为下载设置了 `headersHelper`](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 的插件,Claude Code 会先打印该命令并询问 `Run this command now? [y/N]`。79大多数插件安装时不会弹出提示。对于市场条目[通过运行命令来安装](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md)或[为下载设置了 `headersHelper`](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#how-users-accept-a-headershelper-command) 的插件,Claude Code 会先打印该命令并询问 `Run this command now? [y/N]`。

80 80 

81| 标志 | 说明 |81| 标志 | 描述 |

82| :- | :- |82| :- | :- |

83| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local`。默认为 `user` |83| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local`。默认为 `user` |

84| `--config <key=value>` | 设置插件清单中声明的 [`userConfig`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference) 选项。每个选项重复使用一次该标志。写作 `<server>.<key>` 的键会改为设置[捆绑的 MCP 服务器](https://code.claude.com/docs/zh-CN/plugins/components.md#include-a-packaged-mcpb-server)在其自身 `user_config` 中声明的设置项,适用于随插件一起提供的 bundle 文件。`<server>.<key>` 形式需要 Claude Code v2.1.285 或更高版本 |84| `--config <key=value>` | 设置插件清单中声明的 [`userConfig`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference) 选项。每个选项重复使用一次该标志。写作 `<server>.<key>` 的键则改为设置[捆绑的 MCP 服务器](https://code.claude.com/docs/zh-CN/plugins/components.md#include-a-packaged-mcpb-server)在其自身 `user_config` 中声明的设置,适用于随插件一起提供的捆绑文件。`<server>.<key>` 形式需要 Claude Code v2.1.285 或更高版本 |

85| `-y, --yes` | 接受所显示的安装命令,不出现 `Run this command now?` 提示。当命令在 Claude Code 会话内运行时(例如通过 Bash 工具或 hook 运行)会被忽略。需要 Claude Code v2.1.229 或更高版本 |85| `-y, --yes` | 接受显示的安装命令,不弹出 `Run this command now?` 提示。当命令在 Claude Code 会话内运行时(例如从 Bash 工具或 hook 中运行)会被忽略。需要 Claude Code v2.1.229 或更高版本 |

86| `--accept-command <sha256>` | 代替 `-y`,接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的已显示安装命令。不能与 `-y` 同时使用。请参阅[接受已显示的安装命令](#accept-a-displayed-install-command)。需要 Claude Code v2.1.271 或更高版本 |86| `--accept-command <sha256>` | 接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的已显示安装命令,用于替代 `-y`。不能与 `-y` 组合使用。请参阅[接受已显示的安装命令](#accept-a-displayed-install-command)。需要 Claude Code v2.1.271 或更高版本 |

87| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,而不是人类可读的消息,便于在脚本中使用。请参阅 [JSON 结果格式](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |87| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,而不是人类可读的消息,便于在脚本中使用。请参阅 [JSON 结果格式](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

88| `--marketplace <source>` | 从位于 `<source>` 的市场安装以裸名称指定的 `<plugin>`,如果您尚未添加该市场,则会先添加它。请参阅[用一条命令添加市场并安装](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace-and-install-in-one-command)。需要 Claude Code v2.1.292 或更高版本 |88| `--marketplace <source>` | 从位于 `<source>` 的市场安装以裸名称给出的 `<plugin>`,如果您尚未添加该市场,则先添加它。请参阅[用一条命令添加市场并安装](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace-and-install-in-one-command)。需要 Claude Code v2.1.292 或更高版本 |

89 89 

90在 shell 中运行 `claude plugin install --help` 可查看您的版本支持的所有选项。90在 shell 中运行 `claude plugin install --help`,查看您的版本支持的所有选项。

91 91 

92从您自己的终端传入 `-y`,即可接受所显示的命令而不出现提示。以下是在没有 TTY 时以及由 Claude 运行该命令时的情况:92从您自己的终端传入 `-y`,即可接受显示的命令而不弹出提示。以下是没有 TTY 时以及由 Claude 运行该命令时的情况:

93 93 

94* **stdin 或 stdout 不是 TTY,且您既未传入 `-y` 也未传入 `--accept-command`**:安装会被拒绝。输出会说明该命令仅被显示,退出码为 `1`94* **stdin 或 stdout 不是 TTY,且您既未传入 `-y` 也未传入 `--accept-command`**:安装被拒绝。输出会说明该命令仅被显示,退出码为 `1`

95* **Claude 通过其 Bash 工具运行该命令**:`-y` 会被忽略。请改为从您自己的终端运行该命令95* **Claude 通过其 Bash 工具运行该命令**:`-y` 被忽略。请改为从您自己的终端运行该命令

96 96 

97为克隆该项目的所有人安装插件:97如需与克隆该项目的所有人共享插件,请使用 `--scope project` 运行 `claude plugin install` 并提交 `.claude/settings.json`。然后让每个人在自己的克隆中[添加该市场](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace)并[运行相同的命令](https://code.claude.com/docs/zh-CN/plugins/loading.md#enabled-in-project-settings-but-not-installed):

98 98 

99```bash theme={null}99```bash theme={null}

100claude plugin install formatter@my-marketplace --scope project100claude plugin install formatter@my-marketplace --scope project


103Claude Code 会打印 `Successfully installed plugin: formatter@my-marketplace (scope: project)`。当没有安装任何新内容时,输出会说明原因:103Claude Code 会打印 `Successfully installed plugin: formatter@my-marketplace (scope: project)`。当没有安装任何新内容时,输出会说明原因:

104 104 

105* **已在该作用域安装**:输出为 `Plugin "formatter@my-marketplace" is already installed (scope: project)`,退出码为 `0`105* **已在该作用域安装**:输出为 `Plugin "formatter@my-marketplace" is already installed (scope: project)`,退出码为 `0`

106* **您拒绝了命令来源的提示**:输出为 `Aborted.`,退出码为 `1`106* **您拒绝了命令来源提示**:输出为 `Aborted.`,退出码为 `1`

107* **您拒绝了 `headersHelper` 提示,或在没有 TTY 时无法确认**:输出为 `Aborted — the command was not run.`,退出码为 `1`107* **您拒绝了 `headersHelper` 提示,或在没有 TTY 的情况下无法确认**:输出为 `Aborted — the command was not run.`,退出码为 `1`

108 108 

109#### JSON 结果格式109#### JSON 结果格式

110 110 

111当您向 `plugin install` 传入 `--json` 时,stdout 的最后一行是一个 JSON 对象。请只解析这一行,因为 Claude Code 会在其之前打印市场声明的任何命令。111当您向 `plugin install` 传入 `--json` 时,stdout 的最后一行是一个 JSON 对象。请只解析这一行,因为 Claude Code 会在它之前打印市场声明的任何命令。

112 112 

113以下三个字段始终存在:113以下三个字段始终存在:

114 114 


118 118 

119其他字段(例如 `pluginId`、`scope` 和 `failureCode`)仅在适用时出现。119其他字段(例如 `pluginId`、`scope` 和 `failureCode`)仅在适用时出现。

120 120 

121`plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上的 `--json` 选项会打印相同的对象,并带有该子命令自身的字段。121`plugin uninstall`、`plugin update`、`plugin enable` 和 `plugin disable` 上的 `--json` 选项会打印相同的对象,并带有该子命令自己的字段。

122 122 

123用法错误(例如无效的 `--scope`)不会打印结果行,并以 `1` 退出,原因输出到 stderr。123用法错误(例如无效的 `--scope`)不会打印结果行,而是以 `1` 退出,并在 stderr 上输出原因。

124 124 

125#### 市场命令的 JSON 结果125#### 市场命令的 JSON 结果

126 126 

127在 `plugin marketplace add`、`plugin marketplace remove` 和 `plugin marketplace update` 上,`--json` 会在 stdout 的最后一行打印一个 JSON 对象,包含 `command`、`outcome` 和 `message` 字段。以下是 `claude plugin marketplace remove your-marketplace --json` 的结果:127在 `plugin marketplace add`、`plugin marketplace remove` 和 `plugin marketplace update` 上,`--json` 会在 stdout 的最后一行打印一个 JSON 对象,其中包含 `command`、`outcome` 和 `message` 字段。以下是 `claude plugin marketplace remove your-marketplace --json` 的结果:

128 128 

129```json theme={null}129```json theme={null}

130{"command":"marketplace-remove","outcome":"ok","marketplace":"your-marketplace","message":"Successfully removed marketplace: your-marketplace"}130{"command":"marketplace-remove","outcome":"ok","marketplace":"your-marketplace","message":"Successfully removed marketplace: your-marketplace"}


135* `marketplace`:命令所作用的市场名称135* `marketplace`:命令所作用的市场名称

136* `failureCode`:表示命令失败原因的代码,例如 `invalid_source`136* `failureCode`:表示命令失败原因的代码,例如 `invalid_source`

137 137 

138当参数为[保留名称](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md#reserved-names) `anthropic-plugin-directory` 时,`plugin marketplace add` 和 `plugin marketplace remove` 可能不打印结果行,因此对于该名称请检查退出码。138当参数是[保留名称](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md#reserved-names) `anthropic-plugin-directory` 时,`plugin marketplace add` 和 `plugin marketplace remove` 可能不打印结果行,因此对于该名称请检查退出码。

139 139 

140#### 接受已显示的安装命令140#### 接受已显示的安装命令

141 141 

142当某次 `--json` 运行显示了市场声明的命令但未运行它时,`failed` 结果还会带有一个 `shownCommand` 对象。其字段包括所显示的命令、该命令所属的插件,以及该命令的 `sha256`。142当某次 `--json` 运行显示了市场声明的命令但没有运行它时,`failed` 结果中还会带有一个 `shownCommand` 对象。它的字段包括所显示的命令、该命令所属的插件,以及该命令的 `sha256`。

143 143 

144要精确接受该命令,请从您自己的终端以该 `sha256` 作为 `--accept-command` 重新运行,因为该标志在 Claude Code 会话内无效。需要 Claude Code v2.1.271 或更高版本。144如需准确接受该命令,请从您自己的终端重新运行,并将该 `sha256` 作为 `--accept-command` 传入,因为该标志在 Claude Code 会话内不起作用。需要 Claude Code v2.1.271 或更高版本。

145 145 

146该 `sha256` 仅对完全相同的命令、插件和市场目录视为接受。如果自命令显示以来其中任何一项发生了变化,Claude Code 不会接受该 `sha256`,而是再次显示该命令。本次运行自身的市场刷新所获取到的变化也算作此类变化。146该 `sha256` 仅对完全相同的命令、插件和市场目录视为接受。如果自命令显示以来其中任何一项发生了变化,Claude Code 将不接受该 `sha256`,并再次显示该命令。本次运行自身的市场刷新所获取到的变化也算作此类变化。

147 147 

148如果 `shownCommand.acceptCommandMatched` 为 `false`,则您传入的 `sha256` 与当前显示的命令不匹配。请先检查该命令,再以其 `sha256` 重新运行。148如果 `shownCommand.acceptCommandMatched` 为 `false`,说明您传入的 `sha256` 与当前显示的命令不匹配。请先审查该命令,再使用其 `sha256` 重新运行。

149 149 

150### plugin uninstall150### plugin uninstall

151 151 

152从某个作用域移除已安装的插件。`remove` 和 `rm` 是 `uninstall` 的别名。152从某个作用域中移除已安装的插件。`remove` 和 `rm` 是 `uninstall` 的别名。

153 153 

154```bash theme={null}154```bash theme={null}

155claude plugin uninstall <plugin> [options]155claude plugin uninstall <plugin> [options]

156```156```

157 157 

158| 标志 | 说明 |158| 标志 | 描述 |

159| :- | :- |159| :- | :- |

160| `-s, --scope <scope>` | 从以下作用域卸载:`user`、`project` 或 `local`。默认为 `user` |160| `-s, --scope <scope>` | 从指定作用域卸载:`user`、`project` 或 `local`。默认为 `user` |

161| `--keep-data` | 保留插件的持久数据目录 `~/.claude/plugins/data/<id>/` |161| `--keep-data` | 保留插件的持久数据目录 `~/.claude/plugins/data/<id>/` |

162| `--prune` | 同时移除剩余插件都不再需要的自动安装的[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md) |162| `--prune` | 同时移除不再被任何剩余插件需要的自动安装的[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md) |

163| `-y, --yes` | 跳过 `--prune` 的确认提示。当 stdin 或 stdout 不是 TTY 时,与 `--prune` 一起使用是必需的 |163| `-y, --yes` | 跳过 `--prune` 的确认提示。当 stdin 或 stdout 不是 TTY 时,与 `--prune` 一起使用是必需的 |

164| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。不能与 `--prune` 同时使用。需要 Claude Code v2.1.268 或更高版本 |164| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。不能与 `--prune` 组合使用。需要 Claude Code v2.1.268 或更高版本 |

165 165 

166从项目作用域卸载插件:166从项目作用域卸载插件:

167 167 


169claude plugin uninstall formatter@my-marketplace --scope project169claude plugin uninstall formatter@my-marketplace --scope project

170```170```

171 171 

172Claude Code 会打印 `Successfully uninstalled plugin: formatter (scope: project)`。当插件未在该作用域安装时,命令会打印以 `Failed to uninstall plugin "formatter@my-marketplace":` 开头的一行,并以 `1` 退出。172Claude Code 会打印 `Successfully uninstalled plugin: formatter (scope: project)`。当插件未在该作用域安装时,命令会打印一行以 `Failed to uninstall plugin "formatter@my-marketplace":` 开头的内容,并以 `1` 退出。

173 173 

174如果失败行后续为 `"formatter" was not uninstalled:` 并指出某个设置文件,说明 Claude Code 无法确认该作用域的设置不再启用该插件,因此插件及其保存的所有内容都保持安装状态。使用 `--json` 时,结果会带有 `failureCode: "settings_still_on"`。此设置检查需要 Claude Code v2.1.282 或更高版本。174如果失败行后面接着 `"formatter" was not uninstalled:` 并指出某个设置文件,说明 Claude Code 无法确认该作用域的设置不再启用该插件,因此该插件及其保存的所有内容仍保持安装状态。使用 `--json` 时,结果中带有 `failureCode: "settings_still_on"`。此设置检查需要 Claude Code v2.1.282 或更高版本。

175 175 

176#### 卸载会删除和保留的内容176#### 卸载会删除和保留的内容

177 177 

178当您从插件安装所在的最后一个作用域卸载该插件时,Claude Code 还会删除插件存储的[选项和密钥](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#user-configuration)及其数据目录 `~/.claude/plugins/data/<id>/`。有三种例外情况:178当您从插件安装的最后一个作用域卸载该插件时,Claude Code 还会删除该插件存储的[选项和密钥](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#user-configuration)以及其数据目录 `~/.claude/plugins/data/<id>/`。有三种例外情况:

179 179 

180* 使用 `--keep-data` 时,数据目录会保留180* 使用 `--keep-data` 时,数据目录会保留

181* 当另一个已安装的插件使用同一文件夹时(例如其 ID 与此插件仅在字母大小写上不同),数据目录会保留181* 当另一个已安装的插件使用同一文件夹时(例如 ID 与此插件仅在字母大小写上不同的插件),数据目录会保留

182* 当 Claude Code 从该作用域移除插件后无法重新读取已安装插件列表时,选项、密钥和数据目录都会保留,因为该插件可能仍安装在其他作用域。卸载仍会成功。消息会列出保留的内容以及删除方法,使用 `--json` 时结果会带有 `savedKept: "install_records_unreadable"`182* 当 Claude Code 从该作用域移除插件后无法读回已安装插件列表时,选项、密钥和数据目录都会保留,因为该插件可能仍安装在另一个作用域。卸载仍然成功。消息会列出保留了哪些内容以及如何删除它们,使用 `--json` 时,结果中带有 `savedKept: "install_records_unreadable"`

183 183 

184使用 `--json` 时,`keptData` 会报告目录是否被保留;若被保留,`/plugin` 会显示 `· data preserved`。对于未使用 `--keep-data` 而被保留的目录,此报告需要 Claude Code v2.1.281 或更高版本。`savedKept` 字段需要 Claude Code v2.1.282 或更高版本。184使用 `--json` 时,`keptData` 会报告目录是否保留,保留时 `/plugin` 会显示 `· data preserved`。对于未使用 `--keep-data` 却被保留的目录,此报告需要 Claude Code v2.1.281 或更高版本。`savedKept` 字段需要 Claude Code v2.1.282 或更高版本。

185 185 

186### plugin enable186### plugin enable

187 187 


191claude plugin enable <plugin> [options]191claude plugin enable <plugin> [options]

192```192```

193 193 

194| 标志 | 说明 |194| 标志 | 描述 |

195| :- | :- |195| :- | :- |

196| `-s, --scope <scope>` | 启用所在的作用域:`user`、`project` 或 `local`。省略时自动检测 |196| `-s, --scope <scope>` | 要启用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

197| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |197| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

198 198 

199未指定 `--scope` 时,命令会按 local、project、user 的顺序检查您的设置文件,并使用第一个提及该插件的作用域。199不带 `--scope` 时,命令会按 local、project、user 的顺序检查您的设置文件,并使用第一个提及该插件的作用域。

200 200 

201如果您传入的 `--scope` 中未声明该插件,命令会写入覆盖或失败:201如果您传入的 `--scope` 中未声明该插件,命令要么写入一个覆盖,要么失败:

202 202 

203* **[优先于](https://code.claude.com/docs/zh-CN/plugins/loading.md)声明所在作用域的作用域**:Claude Code 会在您传入的作用域写入覆盖。例如,`claude plugin disable formatter --scope local` 仅为您自己关闭在项目中启用的插件203* **[优先级高于](https://code.claude.com/docs/zh-CN/plugins/loading.md)声明所在作用域的作用域**:Claude Code 在您传入的作用域写入覆盖。例如,`claude plugin disable formatter --scope local` 仅为您自己关闭一个在项目中启用的插件

204* **任何其他作用域**:命令失败并显示 `Plugin "formatter" is installed at project scope, not user. Use --scope project or omit --scope to auto-detect.`204* **任何其他作用域**:命令失败,并输出 `Plugin "formatter" is installed at project scope, not user. Use --scope project or omit --scope to auto-detect.`

205 205 

206如果插件在解析出的作用域中已启用,命令会打印 `Plugin "formatter" is already enabled` 并以 `1` 退出。使用 `--json` 时,结果带有 `"failureCode": "already_in_goal_state"` 和 `"alreadyInGoalState": true`,因此脚本可以将这种情况视为成功。206如果插件在解析出的作用域中已启用,命令会打印 `Plugin "formatter" is already enabled` 并以 `1` 退出。使用 `--json` 时,结果中带有 `"failureCode": "already_in_goal_state"` 和 `"alreadyInGoalState": true`,因此脚本可以将这种情况视为成功。

207 207 

208当插件声明了[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)时,Claude Code 也会启用它们。在以下情况下命令会失败:208当插件声明了[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)时,Claude Code 也会启用它们。以下情况命令会失败:

209 209 

210* **某个依赖未安装**:启用失败,并为每个缺失的依赖打印 `claude plugin install` 命令210* **某个依赖未安装**:启用失败,并为每个缺失的依赖打印 `claude plugin install` 命令

211* **某个依赖被您组织的插件策略阻止**:启用失败,并指出被阻止的依赖211* **某个依赖被您组织的插件策略阻止**:启用失败,并指出被阻止的依赖

212* **某个依赖在优先级高于目标作用域的作用域中被设为 `false`**:启用失败。请在该作用域启用该依赖,或传入 `--scope` 写入该作用域212* **某个依赖在优先级高于目标作用域的作用域中被设为 `false`**:启用失败。请在该作用域启用该依赖,或传入 `--scope` 写入该作用域

213 213 

214在插件声明所在的任何位置重新启用插件:214在插件声明所在的位置重新启用它:

215 215 

216```bash theme={null}216```bash theme={null}

217claude plugin enable formatter217claude plugin enable formatter

218```218```

219 219 

220Claude Code 会打印 `Successfully enabled plugin: formatter (scope: project)`,并指出其检测到的作用域。220Claude Code 会打印 `Successfully enabled plugin: formatter (scope: project)`,其中指出它检测到的作用域。

221 221 

222### plugin disable222### plugin disable

223 223 

224禁用插件但不卸载。对于[从 claude.ai 同步的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins),请传入 `<name>@synced` 作为插件。224禁用插件而不卸载它。对于[从 claude.ai 同步的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins),请传入 `<name>@synced` 作为插件。

225 225 

226```bash theme={null}226```bash theme={null}

227claude plugin disable [plugin] [options]227claude plugin disable [plugin] [options]

228```228```

229 229 

230| 标志 | 说明 |230| 标志 | 描述 |

231| :- | :- |231| :- | :- |

232| `-a, --all` | 禁用所有已启用的插件。不能与插件名称或 `--scope` 同时使用 |232| `-a, --all` | 禁用所有已启用的插件。不能与插件名称或 `--scope` 组合使用 |

233| `-s, --scope <scope>` | 禁用所在的作用域:`user`、`project` 或 `local`。省略时自动检测 |233| `-s, --scope <scope>` | 要禁用的作用域:`user`、`project` 或 `local`。省略时自动检测 |

234| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |234| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

235 235 

236未指定 `--scope` 时,作用域会按与 [`plugin enable`](#plugin-enable) 相同的 local、project、user 顺序自动检测。236不带 `--scope` 时,作用域按照与 [`plugin enable`](#plugin-enable) 相同的 local、project、user 顺序自动检测。

237 237 

238如果您既未传入插件名称也未传入 `--all`,Claude Code 会打印 `Please specify a plugin name or use --all to disable all plugins` 并以 `1` 退出。禁用已禁用的插件会打印 `Plugin "formatter" is already disabled` 并以 `1` 退出,这与 [`plugin enable`](#plugin-enable) 对已启用插件的处理方式相同。238如果您既未传入插件名称也未传入 `--all`,Claude Code 会打印 `Please specify a plugin name or use --all to disable all plugins` 并以 `1` 退出。禁用一个已禁用的插件会打印 `Plugin "formatter" is already disabled` 并以 `1` 退出,这与 [`plugin enable`](#plugin-enable) 对已启用插件的处理方式相同。

239 239 

240对于仍被需要的插件,命令会失败:240对于仍被需要的插件,命令会失败:

241 241 

242* **另一个已启用的插件[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)它**:命令失败,并指出需要先禁用的依赖方242* **另一个已启用的插件[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)它**:命令失败,并指出需要先禁用的依赖方

243* **您的组织要求将其作为同步插件**:命令失败且不保存任何内容243* **您的组织要求将其作为同步插件**:命令失败,且不保存任何内容

244 244 

245禁用一个插件:245禁用一个插件:

246 246 


258claude plugin update <plugin> [options]258claude plugin update <plugin> [options]

259```259```

260 260 

261| 标志 | 说明 |261| 标志 | 描述 |

262| :- | :- |262| :- | :- |

263| `-s, --scope <scope>` | 要更新的作用域:`user`、`project`、`local` 或 `managed`。省略时自动检测 |263| `-s, --scope <scope>` | 要更新的作用域:`user`、`project`、`local` 或 `managed`。省略时自动检测 |

264| `-y, --yes` | 接受[命令来源](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md)插件已更改的安装命令,不出现提示。当 stdin 或 stdout 不是 TTY 时为必需,除非您传入 `--accept-command`。需要 Claude Code v2.1.229 或更高版本 |264| `-y, --yes` | 接受[命令来源](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md)插件已变更的安装命令,不弹出提示。当 stdin 或 stdout 不是 TTY 时必需,除非您传入 `--accept-command`。需要 Claude Code v2.1.229 或更高版本 |

265| `--accept-command <sha256>` | 代替 `-y`,接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的市场声明命令。不能与 `-y` 同时使用。需要 Claude Code v2.1.271 或更高版本 |265| `--accept-command <sha256>` | 接受之前某次 [`--json` 运行](#plugin-json-result)在 `shownCommand` 中报告了其 `sha256` 的市场声明命令,用于替代 `-y`。不能与 `-y` 组合使用。需要 Claude Code v2.1.271 或更高版本 |

266| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |266| `--json` | 在 stdout 的最后一行以一个 JSON 对象打印结果,格式[与 `plugin install --json` 相同](#plugin-json-result)。需要 Claude Code v2.1.268 或更高版本 |

267 267 

268更新插件:268更新插件:


271claude plugin update formatter@my-marketplace271claude plugin update formatter@my-marketplace

272```272```

273 273 

274Claude Code 会打印 `Checking for updates for plugin "formatter@my-marketplace"…`,然后显示结果。当没有更新的版本时,它会打印 `formatter is already at the latest version (1.0.0).` 并以 `0` 退出,除非它[重试了插件的依赖安装](#retry-an-unfinished-dependency-install)且该安装失败。274Claude Code 会打印 `Checking for updates for plugin "formatter@my-marketplace"…`,然后打印结果。当没有更新的版本时,它会打印 `formatter is already at the latest version (1.0.0).` 并以 `0` 退出,除非它[重试该插件的依赖安装](#retry-an-unfinished-dependency-install)且该安装失败。

275 275 

276#### 命令更新哪个作用域276#### 命令更新哪个作用域

277 277 

278如果您省略 `--scope`,命令会在当前项目中该插件安装所在的最具体作用域更新插件,依次检查 local、project、user,然后是 managed。278如果您省略 `--scope`,命令会按 local、project、user、managed 的顺序检查,在当前项目中该插件安装所在的最具体作用域进行更新。

279 279 

280在 v2.1.281 之前,省略 `--scope` 时命令使用 `user`,因此更新仅安装在 project 或 local 作用域的插件会失败并显示 `Plugin "<name>" is not installed at scope user`。在这些版本上,请传入 `--scope`。280在 v2.1.281 之前,省略 `--scope` 时命令使用 `user`,因此更新仅安装在项目或本地作用域的插件会失败,并输出 `Plugin "<name>" is not installed at scope user`。在这些版本上,请传入 `--scope`。

281 281 

282`managed` 是唯一一个可以更新但不能安装到的作用域。对于管理员安装的插件,请参阅[为您的组织管理插件](https://code.claude.com/docs/zh-CN/plugins/org.md)。282`managed` 是唯一可以更新但不能安装到的作用域。有关管理员安装的插件,请参阅[为您的组织管理插件](https://code.claude.com/docs/zh-CN/plugins/org.md)。

283 283 

284#### 按裸名称更新284#### 按裸名称更新

285 285 


287 287 

288#### 重试未完成的依赖安装288#### 重试未完成的依赖安装

289 289 

290当插件已是最新版本时,命令还可以在其缓存副本中重试未完成的依赖安装。有关该重试何时运行或被跳过,请参阅[其列出的软件包未安装](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#the-packages-it-lists-are-not-installed)。如果重试失败,输出为带有原因的 `Failed to update plugin "formatter@my-marketplace"`,退出码为 `1`。在 v2.1.287 之前,命令会报告插件已是最新版本,而不重试安装。290当插件已是最新版本时,命令还可以在其缓存副本中重试未完成的依赖安装。有关该重试何时运行或被跳过,请参阅[它列出的包未安装](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#the-packages-it-lists-are-not-installed)。如果重试失败,输出为 `Failed to update plugin "formatter@my-marketplace"` 及原因,退出码为 `1`。在 v2.1.287 之前,命令会报告插件已是最新版本,而不会重试安装。

291 291 

292### plugin list292### plugin list

293 293 


297claude plugin list [options]297claude plugin list [options]

298```298```

299 299 

300| 标志 | 说明 |300| 标志 | 描述 |

301| :- | :- |301| :- | :- |

302| `--json` | 以 JSON 格式打印列表 |302| `--json` | 以 JSON 格式打印列表 |

303| `--available` | 同时列出您的市场提供但您尚未安装的插件。不使用 `--json` 时无效 |303| `--available` | 同时列出您的市场提供但您尚未安装的插件。不带 `--json` 时无效 |

304| `--data-size [plugin]` | 测量每个已安装插件的[已保存数据目录](#what-an-uninstall-deletes-and-keeps),或仅测量以 `name@marketplace` 指定的插件。不使用 `--json` 时无效。如果该名称没有安装记录,命令会打印 `--data-size names a plugin that is not installed` 并以 `1` 退出,而不打印列表。需要 Claude Code v2.1.285 或更高版本 |304| `--data-size [plugin]` | 测量每个已安装插件的[已保存数据目录](#what-an-uninstall-deletes-and-keeps),或仅测量以 `name@marketplace` 形式给出的指定插件。不带 `--json` 时无效。如果该名称没有安装记录,命令会打印 `--data-size names a plugin that is not installed` 并以 `1` 退出,而不打印列表。需要 Claude Code v2.1.285 或更高版本 |

305 305 

306Claude Code 按每个插件的加载方式对人类可读输出进行分组:306Claude Code 会按每个插件的加载方式对人类可读输出进行分组:

307 307 

308* **`Installed plugins:`**:您从市场安装的插件308* **`Installed plugins:`**:您从市场安装的插件

309* **`Session-only plugins (--plugin-dir / --plugin-url):`**:在同一命令中通过这些标志加载的插件,例如 `claude --plugin-dir ./my-plugin plugin list`309* **`Session-only plugins (--plugin-dir / --plugin-url):`**:由同一命令中的这些标志加载的插件,例如 `claude --plugin-dir ./my-plugin plugin list`

310* **`Skills-directory plugins (.claude/skills/*):`**:Claude Code 在 skills 目录中发现的插件310* **`Skills-directory plugins (.claude/skills/*):`**:Claude Code 在 skills 目录中找到的插件

311* **`Synced from claude.ai`**:[从您的 claude.ai 账户同步的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins)311* **`Synced from claude.ai`**:[从您的 claude.ai 账户同步的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins)

312 312 

313当所有分组都为空时,Claude Code 会打印 ``No plugins installed. Use `claude plugin install` to install a plugin.``313当所有分组都为空时,Claude Code 会打印 ``No plugins installed. Use `claude plugin install` to install a plugin.``

314 314 

315#### JSON 输出315#### JSON 输出

316 316 

317使用 `--json` 时,Claude Code 会打印一个数组,每个安装对应一个对象。每个对象带有以下字段。`id`、`version`、`scope`、`enabled` 和 `installPath` 始终存在,其他字段仅在适用时出现。317使用 `--json` 时,Claude Code 会打印一个数组,每次安装对应一个对象。每个对象带有以下字段。`id`、`version`、`scope`、`enabled` 和 `installPath` 始终存在,其他字段仅在适用时出现。

318 318 

319| 字段 | 类型 | 说明 |319| 字段 | 类型 | 描述 |

320| :- | :- | :- |320| :- | :- | :- |

321| `id` | string | 安装的插件为 `name@marketplace`,仅限会话的插件为 `name@inline`,skills 目录插件为 `name@skills-dir`,从 claude.ai 同步的插件为 `name@synced` |321| `id` | string | 安装的插件为 `name@marketplace`,仅会话插件为 `name@inline`,skills 目录插件为 `name@skills-dir`,从 claude.ai 同步的插件为 `name@synced` |

322| `version` | string | 对于市场安装,为安装时 [Claude Code 计算出的版本](https://code.claude.com/docs/zh-CN/plugins/loading.md#versions-and-updates)。对于仅限会话、skills 目录或同步的插件,为清单中的 `version`,未声明时为 `unknown` |322| `version` | string | 对于市场安装,为安装时 [Claude Code 计算出的版本](https://code.claude.com/docs/zh-CN/plugins/loading.md#versions-and-updates)。对于仅会话插件、skills 目录插件或同步插件,为清单中的 `version`,未声明时为 `unknown` |

323| `scope` | string | 安装的插件为 `user`、`project`、`local` 或 `managed`;skills 目录插件为 `user` 或 `project`;仅限会话的插件为 `session`;从 claude.ai 同步的插件为 `synced` |323| `scope` | string | 安装的插件为 `user`、`project`、`local` 或 `managed`;skills 目录插件为 `user` 或 `project`;仅会话插件为 `session`;从 claude.ai 同步的插件为 `synced` |

324| `enabled` | boolean | 插件在您合并后的设置中是否已启用 |324| `enabled` | boolean | 插件在您合并后的设置中是否已启用 |

325| `installPath` | string | 插件加载所在的目录,但会话从其市场文件夹[就地加载](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)的插件除外 |325| `installPath` | string | 插件加载所在的目录,但会话从其市场文件夹中[就地加载](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)的插件除外 |

326| `readFromFolder` | string | 对于会话从其市场文件夹[就地加载](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)的插件,为该插件在该文件夹内的源目录。需要 Claude Code v2.1.289 或更高版本 |326| `readFromFolder` | string | 对于会话从其市场文件夹中[就地加载](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)的插件,为该文件夹内插件的源目录。需要 Claude Code v2.1.289 或更高版本 |

327| `folderVersion` | string | 与 `readFromFolder` 一起出现,为 Claude Code 从该文件夹加载的插件 `version`,可能与上面的 `version` 字段不同。当插件未加载或未声明版本时不存在。需要 Claude Code v2.1.289 或更高版本 |327| `folderVersion` | string | 与 `readFromFolder` 一起出现,为 Claude Code 从该文件夹加载时插件的 `version`,可能与上面的 `version` 字段不同。当插件未加载或未声明版本时不存在。需要 Claude Code v2.1.289 或更高版本 |

328| `installedAt` | string | 安装的 ISO 时间戳。仅限市场安装 |328| `installedAt` | string | 安装的 ISO 时间戳。仅限市场安装 |

329| `lastUpdated` | string | 上次更新的 ISO 时间戳。仅限市场安装 |329| `lastUpdated` | string | 最后一次更新的 ISO 时间戳。仅限市场安装 |

330| `projectPath` | string | 安装所属的项目。仅限 `project` 和 `local` 作用域 |330| `projectPath` | string | 该安装所属的项目。仅限 `project` 和 `local` 作用域 |

331| `mcpServers` | object | 插件的 MCP 服务器定义,当从市场安装的插件有定义时出现 |331| `mcpServers` | object | 插件的 MCP 服务器定义,当市场安装的插件有此定义时出现 |

332| `errors` | array of strings | 加载错误,当插件加载失败时出现 |332| `errors` | array of strings | 加载错误,当插件加载失败时出现 |

333| `notes` | array of strings | 非加载错误的警告,例如编写问题或[未安装的软件包](https://code.claude.com/docs/zh-CN/plugins/loading.md#when-the-dependency-install-fails-or-is-skipped) |333| `notes` | array of strings | 非加载错误的警告,例如编写问题或[未安装的包](https://code.claude.com/docs/zh-CN/plugins/loading.md#when-the-dependency-install-fails-or-is-skipped) |

334| `errorDetails` | array of objects | 每个 `errors` 条目对应一个对象,给出其诊断 `type` 及其引用的名称,例如插件、市场、服务器或文件。需要 Claude Code v2.1.268 或更高版本 |334| `errorDetails` | array of objects | 每个 `errors` 条目对应一个对象,给出其诊断 `type` 以及它所涉及的名称,例如插件、市场、服务器或文件。需要 Claude Code v2.1.268 或更高版本 |

335| `noteDetails` | array of objects | 每个 `notes` 条目对应的相同详情对象。需要 Claude Code v2.1.268 或更高版本 |335| `noteDetails` | array of objects | 每个 `notes` 条目对应的相同详情对象。需要 Claude Code v2.1.268 或更高版本 |

336| `hasUserConfig` | boolean | 当插件已加载且其清单声明了 [`userConfig` 选项](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#user-configuration)时存在且为 `true`。对于加载失败的插件,无论其清单声明了什么都不存在。从不包含已保存的值。需要 Claude Code v2.1.285 或更高版本 |336| `hasUserConfig` | boolean | 当插件已加载且其清单声明了 [`userConfig` 选项](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#user-configuration)时存在且为 `true`。对于加载失败的插件,无论其清单声明了什么,此字段都不存在。需要 Claude Code v2.1.285 或更高版本 |

337| `projectEnabled` | boolean | 项目共享的 `.claude/settings.json` 是否启用该插件。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |337| `projectEnabled` | boolean | 项目共享的 `.claude/settings.json` 是否启用了该插件。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

338| `dataDirSize` | object | 使用 `--data-size` 时,插件[已保存数据目录](#what-an-uninstall-deletes-and-keeps)的大小,以 `bytes` 和 `human` 表示;当目录缺失或为空时不存在。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |338| `dataDirSize` | object | 与 `--data-size` 一起使用时,以 `bytes` 和 `human` 表示插件[已保存数据目录](#what-an-uninstall-deletes-and-keeps)的大小;目录缺失或为空时不存在。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

339| `dataDirUnreadable` | boolean | 使用 `--data-size` 时,如果已保存数据目录存在但无法测量,则为 `true`。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |339| `dataDirUnreadable` | boolean | 与 `--data-size` 一起使用时,当已保存数据目录存在但无法测量时为 `true`。仅限市场安装。需要 Claude Code v2.1.285 或更高版本 |

340 340 

341使用 `--json --available` 时,Claude Code 会打印一个对象而不是数组。其 `installed` 字段包含已安装插件对象的数组,其 `available` 字段为每个未安装的市场插件包含一个对象,带有以下字段。341使用 `--json --available` 时,Claude Code 会打印一个对象而不是数组。其 `installed` 字段包含已安装插件对象的数组,其 `available` 字段为每个未安装的市场插件包含一个对象,带有以下字段。

342 342 

343| 字段 | 类型 | 说明 |343| 字段 | 类型 | 描述 |

344| :- | :- | :- |344| :- | :- | :- |

345| `pluginId` | string | `name@marketplace` |345| `pluginId` | string | `name@marketplace` |

346| `name` | string | 插件在市场中的名称 |346| `name` | string | 插件在市场中的名称 |

347| `marketplaceName` | string | 提供该插件的市场 |347| `marketplaceName` | string | 提供该插件的市场 |

348| `source` | string or object | 市场条目的[来源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md):相对路径为字符串,否则为对象 |348| `source` | string or object | 市场条目的[来源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md):相对路径时为字符串,否则为对象 |

349| `description` | string | 条目的描述(如有) |349| `description` | string | 条目的描述(如果有) |

350| `version` | string | 条目的版本(如有声明) |350| `version` | string | 条目的版本(如果有声明) |

351| `installCount` | number | 安装次数(当 Claude Code 有该插件的数据时) |351| `installCount` | number | 安装次数(当 Claude Code 拥有该插件的此数据时) |

352 352 

353### plugin details353### plugin details

354 354 

355显示插件的组件清单及其预估 token 开销。355显示插件的组件清单及其预计 token 开销。

356 356 

357插件必须已加载:已安装、在 skills 目录中被发现,或在同一命令中通过 `--plugin-dir` 或 `--plugin-url` 传入。`<name>` 是插件的 `name` 或 `name@marketplace`。357插件必须已加载:已安装、在 skills 目录中找到,或在同一命令中通过 `--plugin-dir` 或 `--plugin-url` 传入。`<name>` 是插件的 `name` 或 `name@marketplace`。

358 358 

359```bash theme={null}359```bash theme={null}

360claude plugin details <name>360claude plugin details <name>

361```361```

362 362 

363该命令除 `--help` 外不接受任何标志。363该命令除 `--help` 外不接受其他标志。

364 364 

365显示已安装插件所提供的内容:365显示已安装插件提供的内容:

366 366 

367```bash theme={null}367```bash theme={null}

368claude plugin details formatter368claude plugin details formatter

369```369```

370 370 

371Claude Code 会打印插件的名称、版本、描述和来源,然后显示以下部分:371Claude Code 会打印插件的名称、版本、描述和来源,然后是以下部分:

372 372 

373* **`Component inventory`**:插件的 skill、Agent、hook、MCP 服务器和 LSP 服务器373* **`Component inventory`**:插件的 skill、Agent、hook、MCP 服务器和 LSP 服务器

374* **`Projected token cost`**:插件在每个会话中添加的常驻 token374* **`Projected token cost`**:插件为每个会话增加的常驻 token

375* **`Per-component (rounded)`**:每个 skill、Agent 和命令的常驻及调用时估算值。插件没有这些组件时省略375* **`Per-component (rounded)`**:每个 skill、Agent 和命令的常驻和调用时估算值。插件没有这些组件时省略

376 376 

377有关这两个开销数字的含义,请参阅[衡量插件开销和使用情况](https://code.claude.com/docs/zh-CN/plugins/measure.md)。377有关这两个开销数值的含义,请参阅[衡量插件开销和使用情况](https://code.claude.com/docs/zh-CN/plugins/measure.md)。

378 378 

379对于未加载的插件,Claude Code 会打印以下消息并以 `1` 退出:379对于未加载的插件,Claude Code 会打印以下消息并以 `1` 退出:

380 380 


382Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.382Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.

383```383```

384 384 

385以 `@builtin` 结尾的 ID 指向某个 [Claude Code 内置插件](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#mods-built-into-claude-code)。如果您传入这样的 ID 而 Claude Code 未找到该插件,消息会改为:385以 `@builtin` 结尾的 ID 指向某个 [Claude Code 内置插件](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#mods-built-into-claude-code)。如果您传入这样的 ID 而 Claude Code 找不到该插件,消息会改为:

386 386 

387```text theme={null}387```text theme={null}

388Plugin "<name>@builtin" not found. Built-in plugins don't appear in `claude plugin list`. To see the ones available in a session, run /plugin in Claude Code and open the Installed tab.388Plugin "<name>@builtin" not found. Built-in plugins don't appear in `claude plugin list`. To see the ones available in a session, run /plugin in Claude Code and open the Installed tab.


390 390 

391### plugin configure391### plugin configure

392 392 

393显示已安装插件的 [`userConfig`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#user-configuration) 选项及其中哪些已设置,或保存通过 stdin 传入的值。需要 Claude Code v2.1.285 或更高版本。393显示已安装插件的 [`userConfig`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#user-configuration) 选项以及哪些已设置,或保存通过 stdin 传入的值。需要 Claude Code v2.1.285 或更高版本。

394 394 

395```bash theme={null}395```bash theme={null}

396claude plugin configure <plugin>396claude plugin configure <plugin>

397```397```

398 398 

399| 标志 | 说明 |399| 标志 | 描述 |

400| :- | :- |400| :- | :- |

401| `--values-stdin` | 从 stdin 读取选项值(一个由单行字符串组成的 JSON 对象)并保存。您未提供的选项会保留其已保存的值 |401| `--values-stdin` | 从 stdin 读取选项值(由单行字符串组成的 JSON 对象)并保存。您未提供的选项保留其已保存的值 |

402| `--json` | 在 stdout 上以一个 JSON 对象打印结果。不使用 `--values-stdin` 时,该对象带有选项的 `schema` 和 `choices`、其初始 `inputs`,以及 `configured` 和 `unconfigured` 选项名称。使用 `--values-stdin` 时,它带有 `saved` 选项名称,以及(在能够读回时)`unconfigured` 选项名称 |402| `--json` | 在 stdout 上以一个 JSON 对象打印结果。不带 `--values-stdin` 时,该对象带有选项的 `schema` 和 `choices`、它们的初始 `inputs`,以及 `configured` 和 `unconfigured` 选项名称。带 `--values-stdin` 时,它带有 `saved` 选项名称,以及在能够读回时的 `unconfigured` 选项名称 |

403 403 

404不带标志时,命令会列出每个选项,并最多带有三个标签:先是 `required` 或 `optional`,然后对于清单声明为敏感的选项显示 `sensitive`,最后是 `set` 或 `not set`。它不会打印已保存的值。使用 `--json` 时,输出包含非敏感选项的已保存值,但从不包含敏感选项的文本。404不带标志时,命令会列出每个选项,最多附带三个标签:`required` 或 `optional`,然后是清单声明为敏感的选项的 `sensitive`,然后是 `set` 或 `not set`。它不打印任何已保存的值。使用 `--json` 时,输出包含非敏感选项的已保存值,但绝不包含敏感选项的文本。

405 405 

406要保存值,请将其写入一个文件,内容为将选项键映射到字符串值的 JSON 对象,然后通过 stdin 传入该文件。将 `formatter@my-marketplace` 替换为 `claude plugin list` 所显示的您自己插件的 id。此示例从包含 `{"api_url": "https://example.com"}` 的文件 `values.json` 设置一个名为 `api_url` 的选项:406如需保存值,请将它们写入一个文件,内容为将选项键映射到字符串值的 JSON 对象,然后通过 stdin 传入该文件。请将 `formatter@my-marketplace` 替换为 `claude plugin list` 所显示的您自己插件的 id。以下示例从内容为 `{"api_url": "https://example.com"}` 的文件 `values.json` 中设置一个名为 `api_url` 的选项:

407 407 

408```bash theme={null}408```bash theme={null}

409claude plugin configure formatter@my-marketplace --values-stdin < values.json409claude plugin configure formatter@my-marketplace --values-stdin < values.json

410```410```

411 411 

412Claude Code 会根据选项声明的类型验证每个值,并打印 `Configuration saved. Restart Claude Code to apply it.` 如果您传入了清单未声明的键,或者某个值未通过验证,命令不会保存任何内容,会打印带有原因的 `Failed to save configuration:`,并以 `1` 退出。使用 `--json` 时,被拒绝的值还会在 stdout 上打印一个对象,其 `refused` 字段带有 `message`,以及(当问题出在某一个选项时)该选项的 `option` 键。412Claude Code 会根据选项声明的类型验证每个值,并打印 `Configuration saved. Restart Claude Code to apply it.`。如果您传入了清单未声明的键,或者某个值未通过验证,命令将不保存任何内容,打印 `Failed to save configuration:` 及原因,并以 `1` 退出。使用 `--json` 时,被拒绝的值还会在 stdout 上打印一个对象,其 `refused` 字段带有 `message`,以及当某一个选项出错时该选项的 `option` 键。

413 413 

414请按照 `claude plugin list` 显示的那样传入插件完整的 `name@marketplace` id。`configure` 不接受裸 `name`。当没有已加载的插件具有该 id 时,命令会打印 `No installed plugin has the id "<plugin>".` 并以 `1` 退出。414请传入插件完整的 `name@marketplace` id,即 `claude plugin list` 所显示的形式。`configure` 不接受裸 `name`。当没有已加载的插件具有该 id 时,命令会打印 `No installed plugin has the id "<plugin>".` 并以 `1` 退出。

415 415 

416有关捆绑的 MCP 服务器的设置,请参阅 [`plugin install --config`](#plugin-install) 或 `/plugin` 中的 **Configure** 项。416有关捆绑 MCP 服务器的设置,请参阅 [`plugin install --config`](#plugin-install) 或 `/plugin` 中的 **Configure** 项。

417 417 

418### plugin prune418### plugin prune

419 419 

420移除已没有任何已安装插件需要的自动安装的[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)。该命令绝不会移除您自己安装的插件。`autoremove` 是 `prune` 的别名。420移除不再被任何已安装插件需要的自动安装的[依赖](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)。该命令绝不会移除您自己安装的插件。`autoremove` 是 `prune` 的别名。

421 421 

422```bash theme={null}422```bash theme={null}

423claude plugin prune [options]423claude plugin prune [options]

424```424```

425 425 

426| 标志 | 说明 |426| 标志 | 描述 |

427| :- | :- |427| :- | :- |

428| `-s, --scope <scope>` | 在以下作用域清理:`user`、`project` 或 `local`。默认为 `user` |428| `-s, --scope <scope>` | 在指定作用域清理:`user`、`project` 或 `local`。默认为 `user` |

429| `--dry-run` | 列出将被移除的内容,但不实际移除 |429| `--dry-run` | 列出将被移除的内容但不实际移除 |

430| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时为必需 |430| `-y, --yes` | 跳过确认提示。当 stdin 或 stdout 不是 TTY 时必需 |

431 431 

432预览清理将移除的内容:432预览清理将移除的内容:

433 433 


435claude plugin prune --dry-run435claude plugin prune --dry-run

436```436```

437 437 

438Claude Code 会列出孤立的依赖,并以 `(dry run — nothing removed)` 结尾。如果没有可移除的内容,它会打印以 `Nothing to prune` 开头的一行。438Claude Code 会列出孤立的依赖,并以 `(dry run — nothing removed)` 结尾。没有需要移除的内容时,它会打印一行以 `Nothing to prune` 开头的内容。

439 439 

440不使用 `--dry-run` 时,命令仅在您在提示中确认或传入 `-y` 后才移除孤立的依赖。440不带 `--dry-run` 时,命令仅在您于提示处确认或传入 `-y` 后才移除孤立的依赖。

441 441 

442无论您在提示中如何回答,退出码都是 `0`。442无论您在提示处如何回答,退出码都是 `0`。

443 443 

444`prune` 的行为取决于是否连接了终端以及您是否传入 `-y`:444`prune` 的行为取决于是否连接了终端以及您是否传入 `-y`:

445 445 

446| 终端和标志 | 结果 |446| 终端和标志 | 发生的情况 |

447| :- | :- |447| :- | :- |

448| 交互式终端,未传入 `-y` | 列出孤立的依赖并询问 `Remove? [y/N]` |448| 交互式终端,无 `-y` | 列出孤立的依赖并询问 `Remove? [y/N]` |

449| 任意终端,传入 `-y` | 移除它们并打印 `Removed N auto-installed plugins: <names>` |449| 任意终端,有 `-y` | 移除它们并打印 `Removed N auto-installed plugins: <names>` |

450| stdin 或 stdout 不是 TTY,未传入 `-y` | 打印列表和 ``Not a TTY — run `claude plugin prune -y` to remove.``,不移除任何内容 |450| 非 TTY 的 stdin 或 stdout,无 `-y` | 打印列表和 ``Not a TTY — run `claude plugin prune -y` to remove.``,不移除任何内容 |

451 451 

452### plugin eval452### plugin eval

453 453 

454运行插件的 [eval 用例](https://code.claude.com/docs/zh-CN/plugin-evals.md)并报告评分结果。需要 Claude Code v2.1.269 或更高版本。454运行插件的 [eval 用例](https://code.claude.com/docs/zh-CN/plugin-evals.md)并报告评分结果。需要 Claude Code v2.1.269 或更高版本。

455 455 

456每个用例由一个提示词加上评分器组成。Claude Code 会在仅加载目标插件的隔离会话中多次运行它,并且默认还会在不加载该插件的情况下运行,以便报告显示差异。456每个用例由一个提示词加若干评分器组成。Claude Code 会在仅加载目标插件的隔离会话中多次运行它,默认还会在不加载该插件的情况下运行,以便报告显示两者的差异。

457 457 

458有关用例格式、评分器、结果和 CI 用法,请参阅[使用 eval 测试插件](https://code.claude.com/docs/zh-CN/plugin-evals.md)。458有关用例格式、评分器、结果和 CI 用法,请参阅[使用 eval 测试插件](https://code.claude.com/docs/zh-CN/plugin-evals.md)。

459 459 


465 465 

466* 插件目录466* 插件目录

467* 单个 `prompt.md` 或 `case.yaml` 文件467* 单个 `prompt.md` 或 `case.yaml` 文件

468* 以 `name` 或 `name@marketplace` 表示的已安装插件468* 以 `name` 或 `name@marketplace` 形式给出的已安装插件

469* `name@skills-dir`469* `name@skills-dir`

470 470 

471请将目标放在 `--tag`、`--allow-tools` 和 `--json` 之前。这些选项中的每一个都会把其后的词作为自己的值,因此写在其中某个选项之后的目标会被读作标签、工具名称或 JSON 输出路径,而不是目标。471请将 target 放在 `--tag`、`--allow-tools` 和 `--json` 之前。这些选项都会把其后的单词作为自己的值,因此写在它们之一之后的 target 会被当作标签、工具名称或 JSON 输出路径,而不是 target。

472 472 

473下表列出了大多数运行会用到的选项。运行 `claude plugin eval --help` 可查看完整的选项集,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。473下表列出了大多数运行所使用的选项。运行 `claude plugin eval --help` 查看完整选项集,包括 `--case`、`--tag`、`--output-dir`、`--report`、`--allow-real-servers`、`--keep-temp` 和 `--verbose`。

474 474 

475| 选项 | 说明 | 默认值 |475| 选项 | 描述 | 默认值 |

476| :- | :- | :- |476| :- | :- | :- |

477| `--runs <n>` | 每个[分组](https://code.claude.com/docs/zh-CN/plugin-evals.md#compare-against-a-no-plugin-baseline)中每个用例的运行次数 | 每个用例的 `runs`,否则为 3 |477| `--runs <n>` | 每个[分组](https://code.claude.com/docs/zh-CN/plugin-evals.md#compare-against-a-no-plugin-baseline)中每个用例的运行次数 | 各用例的 `runs`,否则为 3 |

478| `-j, --concurrency <n>` | 同时运行的 Agent 会话数,1 到 8。它们共享您的速率限制 | `1` |478| `-j, --concurrency <n>` | 同时运行的 Agent 会话数,1 到 8。它们共享您的速率限制 | `1` |

479| `--model <model>` | 被测 Agent 使用的模型 | 每个用例的 `model`,否则为 `ANTHROPIC_MODEL`(如已设置),否则为 Claude Code 的默认模型 |479| `--model <model>` | 被测 Agent 使用的模型 | 各用例的 `model`,否则为已设置的 `ANTHROPIC_MODEL`,否则为 Claude Code 的默认值 |

480| `--judge-model <model>` | `llm` 和 `baseline` 评分器使用的模型 | 用于[后台任务](https://code.claude.com/docs/zh-CN/plugin-evals.md#grade-the-result)的模型 |480| `--judge-model <model>` | `llm` 和 `baseline` 评分器使用的模型 | 用于[后台任务](https://code.claude.com/docs/zh-CN/plugin-evals.md#grade-the-result)的模型 |

481| `--ablation <mode>` | `none` 或 `with-without`。请参阅[与无插件基线进行对比评分](https://code.claude.com/docs/zh-CN/plugin-evals.md#compare-against-a-no-plugin-baseline) | 按用例决定,如该章节所述 |481| `--ablation <mode>` | `none` 或 `with-without`。请参阅[与无插件基线对比评分](https://code.claude.com/docs/zh-CN/plugin-evals.md#compare-against-a-no-plugin-baseline) | 按用例决定,如该章节所述 |

482| `--threshold <0..1>` | 如果任何用例的得分低于此值,则以 1 退出 | `1.0` |482| `--threshold <0..1>` | 如果有任何用例得分低于此值,以 1 退出 | `1.0` |

483| `--max-cost-usd <usd>` | 当花费达到此值时,在下一次运行前停止,以 2 退出,并报告部分结果 | 无限制 |483| `--max-cost-usd <usd>` | 一旦花费达到此值,在下一次运行前停止,以 2 退出,并报告部分结果 | 无限制 |

484| `--allow-tools <tools...>` | 授予只读集合之外的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅[授予工具](https://code.claude.com/docs/zh-CN/plugin-evals.md#grant-tools) | |484| `--allow-tools <tools...>` | 授予只读工具集之外的工具,例如 `Bash`、`Write`、`Edit` 或 `"mcp__plugin_<plugin>_<server>__*"`。请参阅[授予工具](https://code.claude.com/docs/zh-CN/plugin-evals.md#grant-tools) | |

485| `--scaffold` | 运行每个用例的 [`scaffold_script`](https://code.claude.com/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |485| `--scaffold` | 运行每个用例的 [`scaffold_script`](https://code.claude.com/docs/zh-CN/plugin-evals#add-setup-or-history-with-case-yaml) | 关闭 |

486| `--trust-plugin` | 跳过首次运行的信任提示,适用于 CI。请参阅[运行可以访问的内容](https://code.claude.com/docs/zh-CN/plugin-evals.md#security) | 关闭 |486| `--trust-plugin` | 跳过首次运行的信任提示,用于 CI。请参阅[运行可以访问的内容](https://code.claude.com/docs/zh-CN/plugin-evals.md#security) | 关闭 |

487| `--mocks <mode>` | `record` 或 `off`。请参阅[模拟 MCP 服务器](https://code.claude.com/docs/zh-CN/plugin-evals.md#mock-mcp-servers) | `record` |487| `--mocks <mode>` | `record` 或 `off`。请参阅[模拟 MCP 服务器](https://code.claude.com/docs/zh-CN/plugin-evals.md#mock-mcp-servers) | `record` |

488| `--eval-dir <dir>` | 插件下存放用例的目录 | 清单中的 `experimental.evals`,否则为 `evals` |488| `--eval-dir <dir>` | 插件下存放用例的目录 | 清单中的 `experimental.evals`,否则为 `evals` |

489| `--json [path]` | 将[结果文档](https://code.claude.com/docs/zh-CN/plugin-evals.md#json-result)打印到 stdout,或写入某个 `.json` 路径 | |489| `--json [path]` | 将[结果文档](https://code.claude.com/docs/zh-CN/plugin-evals.md#json-result)打印到 stdout,或写入 `.json` 路径 | |

490| `--no-publish` | 将 HTML 报告保留在本地 | |490| `--no-publish` | 将 HTML 报告保留在本地 | |

491 491 

492退出码报告运行的结束方式。要在流水线中据此采取行动,请参阅[在 CI 中运行 eval](https://code.claude.com/docs/zh-CN/plugin-evals.md#run-evals-in-ci)。492退出码报告运行的结束方式。如需在流水线中据此采取行动,请参阅[在 CI 中运行 eval](https://code.claude.com/docs/zh-CN/plugin-evals.md#run-evals-in-ci)。

493 493 

494| 退出码 | 含义 |494| 退出码 | 含义 |

495| :- | :- |495| :- | :- |

496| `0` | 套件通过:每个用例都达到阈值,且没有其他原因导致运行失败 |496| `0` | 套件通过:每个用例都达到阈值,且没有其他因素导致运行失败 |

497| `1` | 存在失败的用例、加载错误、不受信任的插件目录、[因 API 错误结束](https://code.claude.com/docs/zh-CN/plugin-evals.md#runs-ended-on-an-api-error)的运行,或[在 CI 中运行 eval](https://code.claude.com/docs/zh-CN/plugin-evals.md#run-evals-in-ci) 下列出的其他原因 |497| `1` | 用例失败、加载错误、插件目录不受信任、运行[因 API 错误而结束](https://code.claude.com/docs/zh-CN/plugin-evals.md#runs-ended-on-an-api-error),或[在 CI 中运行 eval](https://code.claude.com/docs/zh-CN/plugin-evals.md#run-evals-in-ci) 中列出的其他原因 |

498| `2` | 部分运行 |498| `2` | 部分运行 |

499| `130` | 被中断 |499| `130` | 被中断 |

500| `143` | 被终止 |500| `143` | 被终止 |


507claude plugin eval init [name] [options]507claude plugin eval init [name] [options]

508```508```

509 509 

510请从插件的根文件夹运行该命令,即包含 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录。如需有意在其他目录中创建套件脚手架,请传入 `--eval-dir`。510请从插件的根文件夹运行该命令,即包含 `.claude-plugin/plugin.json` 或 skill 的 `SKILL.md` 的目录。如需有意在另一个目录中生成套件,请传入 `--eval-dir`。

511 511 

512在终端中,该命令会打开一个交互式 Claude Code 会话进行编写访谈。在访谈中,Claude 会执行以下操作:512在终端中,该命令会打开一个交互式 Claude Code 会话进行编写访谈。在访谈中,Claude 会执行以下操作:

513 513 

5141. 读取插件5141. 阅读插件

5152. 询问您它应该擅长做什么5152. 询问您它应该擅长什么

5163. 提出用例和评分器5163. 提出用例和评分器

5174. 编写用例文件5174. 编写用例文件

5185. 运行用例并与您一起审查评分,以检查评分器的打分方式是否与您一致5185. 运行用例并与您一起审查评分,以检查评分器的评分方式是否与您一致

519 519 

520使用 `--bare` 或没有终端时,命令会改为写入一个空白的单用例模板。当 Claude 在 Claude Code 会话内运行该命令时,命令会打印访谈说明供该会话遵循,而不是写入模板。520使用 `--bare` 或没有终端时,该命令会改为写入一个空白的单用例模板。当 Claude 在 Claude Code 会话内运行该命令时,命令会打印供该会话遵循的访谈说明,而不是写入模板。

521 521 

522可选的 `name` 是用例名称。使用 `--bare` 或没有终端时它是必需的,因为命令会为该用例写入空白模板。用例名称以字母或数字开头,且仅包含字母、数字、`.`、`_` 和 `-`。在所有平台上,命令还会拒绝 Windows 无法存储的名称,例如 `con` 或以 `.` 结尾的名称。522可选的 `name` 是用例名称。使用 `--bare` 或没有终端时它是必需的,因为命令会为该用例写入空白模板。用例名称以字母或数字开头,且只能包含字母、数字、`.`、`_` 和 `-`。在所有平台上,命令还会拒绝 Windows 无法存储的名称,例如 `con` 或以 `.` 结尾的名称。

523 523 

524该命令接受以下选项:524该命令接受以下选项:

525 525 

526| 选项 | 说明 | 默认值 |526| 选项 | 描述 | 默认值 |

527| :- | :- | :- |527| :- | :- | :- |

528| `--bare` | 为 `<name>` 写入空白的 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |528| `--bare` | 为 `<name>` 写入空白的 `prompt.md` 和 `graders/criteria.md`,而不是运行访谈 | |

529| `-i, --interactive` | 要求进行访谈。没有终端时会失败,而不是写入模板 | |529| `-i, --interactive` | 要求进行访谈。没有终端时失败,而不是写入模板 | |

530| `--eval-dir <dir>` | 当前目录下用于写入用例的目录 | 清单中的 `experimental.evals`,否则为 `evals` |530| `--eval-dir <dir>` | 当前目录下用于写入用例的目录 | 清单中的 `experimental.evals`,否则为 `evals` |

531 531 

532### plugin tag532### plugin tag

533 533 

534为插件发布创建名为 `<name>--v<version>` 的附注 git 标签。在打标签之前,命令会检查插件的 `plugin.json` 与列出该插件的任何市场条目在版本上是否一致。534为插件发布创建一个名为 `<name>--v<version>` 的附注 git 标签。在打标签之前,命令会检查插件的 `plugin.json` 与列出它的任何市场条目在版本上是否一致。

535 535 

536有关何时为发布打标签,请参阅[发布插件](https://code.claude.com/docs/zh-CN/plugins/publish.md)。536有关何时为发布打标签,请参阅[发布插件](https://code.claude.com/docs/zh-CN/plugins/publish.md)。

537 537 


539claude plugin tag [path] [options]539claude plugin tag [path] [options]

540```540```

541 541 

542`[path]` 是插件目录,默认为当前目录。命令从该目录向上查找列出该插件的 `.claude-plugin/marketplace.json`,以找到市场条目。542`[path]` 是插件目录,默认为当前目录。命令会从该目录向上查找列出该插件的 `.claude-plugin/marketplace.json`,以找到市场条目。

543 543 

544| 标志 | 说明 |544| 标志 | 描述 |

545| :- | :- |545| :- | :- |

546| `--push` | 创建标签后将其推送到 `--remote` |546| `--push` | 创建标签后将其推送到 `--remote` |

547| `--dry-run` | 打印将要打的标签,但不创建标签 |547| `--dry-run` | 打印将要打的标签而不实际创建 |

548| `-f, --force` | 跳过工作树不干净和标签已存在的检查 |548| `-f, --force` | 跳过工作树有未提交更改和标签已存在的检查 |

549| `-m, --message <msg>` | 标签附注消息。`%s` 代表版本。默认为 `<name> <version>` |549| `-m, --message <msg>` | 标签附注消息。`%s` 代表版本。默认为 `<name> <version>` |

550| `--remote <name>` | 使用 `--push` 时推送到的远程。默认为 `origin` |550| `--remote <name>` | 使用 `--push` 时推送到的远程。默认为 `origin` |

551 551 


559 559 

560* 插件名称560* 插件名称

561* 版本及其来源文件561* 版本及其来源文件

562* 匹配的市场条目(如有)562* 匹配的市场条目(如果有)

563* 标签名称563* 标签名称

564* 它将运行的 `git tag` 和 `git push` 命令564* 它将运行的 `git tag` 和 `git push` 命令

565 565 

566不使用 `--dry-run` 时,Claude Code 会打印 `Created tag formatter--v1.0.0`,以及 `Pushed to origin` 或需要您自行运行的推送命令。如果推送失败,标签仍会在本地创建,命令会以错误退出。566不带 `--dry-run` 时,Claude Code 会打印 `Created tag formatter--v1.0.0`,以及 `Pushed to origin` 或需要您自己运行的推送命令。如果推送失败,标签仍会在本地创建,命令会以错误退出。

567 567 

568当无法安全地打标签时,命令会以 `1` 退出并打印原因。常见原因有:568当无法安全地打标签时,命令会以 `1` 退出并打印原因。常见原因如下:

569 569 

570* `plugin.json` 或市场条目中没有 `version`570* `plugin.json` 或市场条目中没有 `version`

571* 标签已存在571* 标签已存在

572* 工作树不干净572* 工作树有未提交的更改

573 573 

574### plugin test574### plugin test

575 575 

576运行 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md)(即其代码会注册事件处理程序的插件)的测试。该命令不需要会话、登录或网络。有关如何编写测试,请参阅[测试 mod](https://code.claude.com/docs/zh-CN/plugins/mods/test.md)。576运行 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md)(一种其代码会注册事件处理程序的插件)的测试。该命令不需要会话、登录或网络。有关如何编写测试,请参阅[测试 mod](https://code.claude.com/docs/zh-CN/plugins/mods/test.md)。

577 577 

578```bash theme={null}578```bash theme={null}

579claude plugin test [directory]579claude plugin test [directory]

580```580```

581 581 

582`[directory]` 是 mod 的目录,默认为当前目录。命令会运行其下名称以 `.test.ts` 或 `.test.tsx` 结尾的每个文件,并在测试失败时以状态 1 退出。582`[directory]` 是 mod 的目录,默认为当前目录。命令会运行该目录下所有名称以 `.test.ts` 或 `.test.tsx` 结尾的文件,当有测试失败时以状态 1 退出。

583 583 

584运行 `./first-mod` 中 mod 的测试:584运行 `./first-mod` 中 mod 的测试:

585 585 


589 589 

590### plugin validate590### plugin validate

591 591 

592验证插件清单、市场清单或某个目录中的 skill、Agent 和命令,并以 CI 作业可据以操作的退出码退出。有关创建、测试和编辑工作流,请参阅[创建插件](https://code.claude.com/docs/zh-CN/plugins/create.md)。有关验证器在每种清单中检查的内容,请参阅[插件清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md)和[市场参考](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md)。592验证插件清单、市场清单,或某个目录中的 skill、Agent 和命令,并以 CI 作业可据以行动的退出码退出。有关创建、测试和编辑工作流,请参阅[创建插件](https://code.claude.com/docs/zh-CN/plugins/create.md)。有关验证器在每种清单中检查的内容,请参阅[插件清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md)和[市场参考](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md)。

593 593 

594```bash theme={null}594```bash theme={null}

595claude plugin validate <path> [options]595claude plugin validate <path> [options]

596```596```

597 597 

598| 标志 | 说明 |598| 标志 | 描述 |

599| :- | :- |599| :- | :- |

600| `--strict` | 将警告视为错误,使运行时可容忍的无法识别字段和缺失元数据导致运行失败 |600| `--strict` | 将警告视为错误,因此运行时可容忍的未识别字段和缺失元数据会导致运行失败 |

601| `--json` | 将验证报告输出为一个 JSON 对象,退出码相同。需要 Claude Code v2.1.259 或更高版本 |601| `--json` | 以一个 JSON 对象输出验证报告,退出码相同。需要 Claude Code v2.1.259 或更高版本 |

602 602 

603在提交前验证插件:603在提交插件之前验证它:

604 604 

605```bash theme={null}605```bash theme={null}

606claude plugin validate ./my-plugin --strict606claude plugin validate ./my-plugin --strict


608 608 

609#### 验证目录609#### 验证目录

610 610 

611`<path>` 是一个[清单文件](#validate-a-manifest-file)或目录。给定目录时,Claude Code 根据在其中找到的内容决定要验证什么:611`<path>` 是[清单文件](#validate-a-manifest-file)或目录。给定目录时,Claude Code 会根据在其中找到的内容选择要验证的对象:

612 612 

613* `.claude-plugin/marketplace.json`(如果存在)613* `.claude-plugin/marketplace.json`(如果存在)

614* 否则为 `.claude-plugin/plugin.json`614* 否则为 `.claude-plugin/plugin.json`


619 619 

620当目录同时包含 `.claude-plugin/marketplace.json` 和 `.claude-plugin/plugin.json` 时,Claude Code 会验证市场,同时也验证插件的清单和组件文件。这需要 Claude Code v2.1.289 或更高版本。620当目录同时包含 `.claude-plugin/marketplace.json` 和 `.claude-plugin/plugin.json` 时,Claude Code 会验证市场,同时也验证插件的清单和组件文件。这需要 Claude Code v2.1.289 或更高版本。

621 621 

622Claude Code 不会跟随您所指定目录内的符号链接。其行为取决于链接所在的位置:622Claude Code 不会跟随您指定的目录内的符号链接。其行为取决于链接所在的位置:

623 623 

624* **插件或 `.claude` 根目录下的 `skills`、`agents` 或 `commands` 目录是链接**:Claude Code 会警告其中的任何内容都未被读取。624* **插件或 `.claude` 根目录下链接的 `skills`、`agents` 或 `commands` 目录**:Claude Code 会警告其中的内容均未被读取。

625* **`skills`、`agents` 或 `commands` 目录内的某个条目是链接**:Claude Code 会跳过它,并按目录警告跳过了多少个会话本会加载的条目。625* **`skills`、`agents` 或 `commands` 目录内的链接条目**:Claude Code 会跳过它,并按目录警告跳过了多少个会话本会加载的条目。

626* **您指定的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父目录 `.claude` 是符号链接**:Claude Code 会报告错误,且不检查其中任何内容。请改为指定真实目录。626* **您指定的 `skills`、`agents` 或 `commands` 目录本身是符号链接,或其父级 `.claude` 目录是符号链接**:Claude Code 会报告错误且不检查其中任何内容。请改为指定真实目录。

627 627 

628验证运行不会读取以下几类文件:628有几类文件不会被验证运行读取:

629 629 

630* **插件根目录下的 `SKILL.md`**:当您针对插件目录运行 `claude plugin validate` 时,Claude Code 不会检查插件根目录下的 `SKILL.md`630* **插件根目录下的 `SKILL.md`**:当您针对插件目录运行 `claude plugin validate` 时,Claude Code 不会检查插件根目录下的 `SKILL.md`

631* **插件根目录下的 `CLAUDE.md`**:在插件运行中,Claude Code 还会对插件根目录下的 `CLAUDE.md` 发出警告631* **插件根目录下的 `CLAUDE.md`**:在插件运行中,Claude Code 还会对插件根目录下的 `CLAUDE.md` 发出警告

632* **市场运行中的插件文件**:从市场目录运行时,Claude Code 不会打开该市场在其他目录中列出的插件的 skill、Agent、命令或 hook 文件,也不会打开它们捆绑的 MCP 服务器文件。要查找这些文件中的错误,请逐一验证每个插件目录632* **市场运行中的插件文件**:从市场目录运行时,Claude Code 不会打开市场所列出的、位于其他目录中的插件的 skill、Agent、命令或 hook 文件,也不会打开它们捆绑的 MCP 服务器文件。如需查找这些文件中的错误,请验证每个插件目录

633 633 

634#### 验证清单文件634#### 验证清单文件

635 635 

636当文件既不名为 `plugin.json` 或 `marketplace.json`,也不在 `.claude-plugin` 目录中时,Claude Code 会根据其字段判断它是什么。在以下情况下,它会将文件作为市场进行验证,否则作为插件清单进行验证:636当文件名不是 `plugin.json` 或 `marketplace.json` 且不在 `.claude-plugin` 目录中时,Claude Code 会根据其字段判断它是什么。在以下情况下,它将该文件作为市场验证,否则作为插件清单验证:

637 637 

638* `plugins` 是一个数组638* `plugins` 是数组

639* `plugins` 和 `owner` 同时存在639* `plugins` 和 `owner` 同时存在

640* 文件具有仅 `marketplace.json` 定义的字段(例如 `owner`),且没有仅 `plugin.json` 定义的字段(例如 `author`)640* 文件包含仅 `marketplace.json` 定义的字段(例如 `owner`),且不包含仅 `plugin.json` 定义的字段(例如 `author`)

641 641 

642要自行选择检查类型,请将文件命名为 `plugin.json` 或 `marketplace.json`。Claude Code 会将 `.claude-plugin` 目录中的任何其他文件作为插件清单进行验证。642如需自行选择检查类型,请将文件命名为 `plugin.json` 或 `marketplace.json`。Claude Code 会将 `.claude-plugin` 目录中的任何其他文件作为插件清单验证。

643 643 

644#### 输出和退出码644#### 输出和退出码

645 645 

646Claude Code 会打印其验证的文件、带有路径的所有错误和警告,以及一行结论。退出码与结论一致:646Claude Code 会打印它验证的文件、所有错误和警告及其路径,以及一行结论。退出码与结论一致:

647 647 

648| 退出码 | 结论行 | 含义 |648| 退出码 | 结论行 | 含义 |

649| :- | :- | :- |649| :- | :- | :- |

650| `0` | `Validation passed` 或 `Validation passed with warnings` | 清单可以加载。使用 `--strict` 时,也没有警告 |650| `0` | `Validation passed` 或 `Validation passed with warnings` | 清单可以加载。使用 `--strict` 时,也没有警告 |

651| `1` | `Validation failed` 或 `Validation failed (--strict treats warnings as errors)` | 存在错误,或在 `--strict` 下存在警告。无论是否使用 `--strict`,[建议](#advice-on-the-readme)都不计入 |651| `1` | `Validation failed` 或 `Validation failed (--strict treats warnings as errors)` | 存在错误,或在 `--strict` 下存在警告。无论是否使用 `--strict`,[建议](#advice-on-the-readme)都不计入 |

652| `2` | `Unexpected error during validation: <reason>` | 验证器本身失败,例如遇到无法读取的路径 |652| `2` | `Unexpected error during validation: <reason>` | 验证器本身失败,例如路径不可读 |

653 653 

654使用 `--json` 时,Claude Code 会将报告以一个 JSON 对象写入 stdout,包含以下顶层字段:654使用 `--json` 时,Claude Code 会将报告以一个 JSON 对象写入 stdout,包含以下顶层字段:

655 655 

656* `success`:与退出码相同的结论656* `success`:与退出码给出的结论相同

657* `strict`:本次运行是否将警告视为错误657* `strict`:本次运行是否将警告视为错误

658* `target`:Claude Code 验证的已解析路径658* `target`:Claude Code 验证的解析后路径

659* `manifest`:清单自身的结果,对于没有清单的运行为 `null`659* `manifest`:清单自身的结果,对于没有清单的运行为 `null`

660* `contents`:按文件的结果,每项指明其 `file`,并带有 `errors`、`warnings` 和 `notes` 数组。没有错误、警告或说明的文件没有条目,因此当没有可报告的内容时 `contents` 为空。对于[同时含有 `marketplace.json` 和 `plugin.json` 的目录](#validate-a-directory),`manifest` 是 `marketplace.json` 的结果,`plugin.json` 的结果放在 `contents` 中660* `contents`:每个文件的结果,每项指出其 `file`,并带有 `errors`、`warnings` 和 `notes` 数组。没有错误、警告或备注的文件不会有条目,因此没有可报告内容时 `contents` 为空。对于[同时包含 `marketplace.json` 和 `plugin.json` 的目录](#validate-a-directory),`manifest` 是 `marketplace.json` 的结果,`plugin.json` 的结果放在 `contents` 中

661 * `gatingHooks`:每个可以拒绝操作的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) hook(例如 `tool.call` hook)是否具有 [`.catch` 处理程序](https://code.claude.com/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。每项给出 `module`、`pattern`、`hook` 和 `hasCatch`。需要 Claude Code v2.1.290 或更高版本661 * `gatingHooks`:每个可以拒绝操作的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) hook(例如 `tool.call` hook)是否有 [`.catch` 处理程序](https://code.claude.com/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。每项给出 `module`、`pattern`、`hook` 和 `hasCatch`。需要 Claude Code v2.1.290 或更高版本

662* `advice`:本次运行的[建议](#advice-on-the-readme),每个条目以 `file` 指明 README,并带有 `message` 和可粘贴的 `installLine`。没有建议时为空。需要 Claude Code v2.1.295 或更高版本662* `advice`:本次运行的[建议](#advice-on-the-readme),每个条目以 `file` 指出 README,并带有 `message` 和可粘贴的 `installLine`。没有建议时为空。需要 Claude Code v2.1.295 或更高版本

663 663 

664以 `2` 退出时,命令不会向 stdout 写入任何内容。错误消息输出到 stderr。664以 `2` 退出时,命令不会向 stdout 写入任何内容。错误消息输出到 stderr。

665 665 

666#### 关于 README 的建议666#### 关于 README 的建议

667 667 

668`claude plugin validate` 输出中的 `Advice` 块表示插件的 README 中没有从市场安装该插件的行,并会给出一行供您添加。建议既不是错误也不是警告。无论是否使用 `--strict`,它都不会改变结论行或退出码。它需要 Claude Code v2.1.295 或更高版本。668`claude plugin validate` 输出中的 `Advice` 块表示插件的 README 中没有从市场安装该插件的行,并会给出一行供您添加。建议不是错误也不是警告。无论是否使用 `--strict`,它都不会改变结论行或退出码。它需要 Claude Code v2.1.295 或更高版本。

669 669 

670例如,验证 `acme-tools` 市场的目录时,会为其 `deploy-helper` 插件打印以下建议:670例如,验证 `acme-tools` 市场的目录时,会为其 `deploy-helper` 插件打印以下建议:

671 671 


680✔ Validation passed680✔ Validation passed

681```681```

682 682 

683要清除该建议,请将建议的行粘贴到其指出的 README 中,然后在 shell 中再次运行 `claude plugin validate`。`Advice` 块就会消失。683如需清除该建议,请将建议的行粘贴到它所指出的 README 中,然后在 shell 中再次运行 `claude plugin validate`。`Advice` 块就会消失。

684 684 

685如果建议的行包含占位符 `<owner>/<repo>`,原样粘贴不会清除该建议。请先获取真实来源:685如果建议的行包含占位符 `<owner>/<repo>`,原样粘贴并不能清除建议。请先获取真实来源:

686 686 

687* **您验证的是插件自身的目录**:当市场从其自身目录内的某个目录列出该插件时,请改为验证市场自身目录内的那个目录。当市场从其他位置(例如 GitHub 仓库)列出该插件时,请自行填写 `<owner>/<repo>`687* **您验证的是插件自身的目录**:当市场从其自身目录内的某个目录列出该插件时,请改为验证该目录。当市场从其他位置(例如 GitHub 仓库)列出该插件时,请自行填写 `<owner>/<repo>`

688* **您验证的是市场的目录**:Claude Code 会根据该目录顶层 `.git` 目录的 `origin` 远程填写来源。当它无法使用该远程时(例如不存在远程),请自行将 `<owner>/<repo>` 替换为您市场的来源688* **您验证的是市场的目录**:Claude Code 会根据该目录顶层 `.git` 目录的 `origin` 远程填入来源。当它无法使用该远程时(例如不存在该远程),请自行将 `<owner>/<repo>` 替换为您市场的来源

689 689 

690当您已写的安装行中,`plugin install` 或其简写 `plugin i` 在同一行后跟以下任一内容时,该行即被计入。`/plugin` 和 `claude plugin` 两种写法均可:690当 `plugin install` 或其简写形式 `plugin i` 在同一行后面跟着以下任一内容时,您已经编写的安装行即被视为有效。`/plugin` 和 `claude plugin` 两种写法都有效:

691 691 

692* `<plugin>@<marketplace>`,例如 `/plugin install deploy-helper@acme-tools`692* `<plugin>@<marketplace>`,例如 `/plugin install deploy-helper@acme-tools`

693* 插件名称加 `--marketplace <source>`,例如 `/plugin install deploy-helper --marketplace acme/tools`693* 插件名称和 `--marketplace <source>`,例如 `/plugin install deploy-helper --marketplace acme/tools`

694 694 

695## claude plugin marketplace 命令695## claude plugin marketplace 命令

696 696 

Details

169 169 

170### 为一个会话加载插件170### 为一个会话加载插件

171 171 

172您可以通过三种方式为单个会话加载插件:使用 `--plugin-dir` 从磁盘上的目录或 `.zip` 存档,使用 `--plugin-url` 从 URL,或从环境变量(当您无法添加标志时)。每个插件仅为该会话加载,不会为其写入任何内容到您的设置中。当您在会话期间编辑插件的文件时,运行 `/reload-plugins` 以加载更改。172您可以通过三种方式为单个会话加载插件:

173 

174* 使用 `--plugin-dir` 从磁盘上的目录或 `.zip` 存档加载

175* 使用 `--plugin-url` 从 URL 加载

176* 当您无法添加标志时,从环境变量加载

177 

178当您在会话期间编辑插件的文件时,运行 `/reload-plugins` 以加载更改。

173 179 

174#### 从目录或 `.zip` 加载插件180#### 从目录或 `.zip` 加载插件

175 181 

Details

123 123 

124这些条目源不需要 git 账户:124这些条目源不需要 git 账户:

125 125 

126* **`archive`**:通过 HTTPS 下载的 zip。用户既不需要 `git` 也不需要账户,只需要对 URL 的网络访问。需要 Claude Code v2.1.224 或更高版本。用 `sha256` 固定每个存档,以便 Claude Code 拒绝更改的下载。要随下载发送凭证,请参阅 [认证存档下载](#authenticate-archive-downloads)。126* **`archive`**:通过 HTTPS 下载的 zip。用户既不需要 `git` 也不需要账户,只需能够通过网络访问该 URL。请使用 `sha256` 固定每个存档,以便 Claude Code 拒绝被更改的下载内容。要在下载时发送凭据,请参阅[对存档下载进行身份验证](#authenticate-archive-downloads)。

127* **公共 git 仓库**:当条目给出 `https://` URL 时,Claude Code 会通过 HTTPS 克隆公共 `url` 或 `git-subdir` 源,无需凭据。对于 `github` 源,或写成 `owner/repo` 形式的 `git-subdir` 源,请告知没有 GitHub SSH 密钥的用户设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。127* **公共 git 仓库**:当条目给出 `https://` URL 时,Claude Code 会通过 HTTPS 克隆公共 `url` 或 `git-subdir` 源,无需凭据。对于 `github` 源,或写成 `owner/repo` 形式的 `git-subdir` 源,请告知没有 GitHub SSH 密钥的用户设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。

128 128 

129即使在没有 SSH 密钥的机器上从 shell 运行 `claude plugin install` 不设置该变量也能成功,也请在您的说明中保留 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。对于 `github` 源,该命令可能会自行回退到 HTTPS,并输出 `SSH not configured, cloning via HTTPS`。在会话内通过 `/plugin` 进行的安装以及插件更新不会回退,因此如果不设置该变量,没有 GitHub SSH 密钥的用户会遇到失败。129即使在没有 SSH 密钥的机器上从 shell 运行 `claude plugin install` 不设置该变量也能成功,也请在您的说明中保留 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。对于 `github` 源,该命令可能会自行回退到 HTTPS,并输出 `SSH not configured, cloning via HTTPS`。在会话内通过 `/plugin` 进行的安装以及插件更新不会回退,因此如果不设置该变量,没有 GitHub SSH 密钥的用户会遇到失败。

Details

132插件的安装范围决定了谁获得该插件以及哪个设置文件将其记录为已启用:132插件的安装范围决定了谁获得该插件以及哪个设置文件将其记录为已启用:

133 133 

134* **User scope**:该插件在此机器上的每个项目中为您启用。条目进入 `~/.claude/settings.json` 中的 `enabledPlugins`。134* **User scope**:该插件在此机器上的每个项目中为您启用。条目进入 `~/.claude/settings.json` 中的 `enabledPlugins`。

135* **Project scope**:该插件为在此存储库中工作的每个人启用。条目进入 `.claude/settings.json`,您提交它。提交该条目会为您的协作者打开插件,但不会将其下载到他们的机器上,因此每个协作者也需要运行一次 `claude plugin install <name>@<marketplace> --scope project`;请参阅 [在项目设置中启用但未安装](https://code.claude.com/docs/zh-CN/plugins/loading.md#enabled-in-project-settings-but-not-installed)。135* **Project scope**:该插件为在此仓库中工作的每个人启用。条目进入 `.claude/settings.json`,由您提交。提交该条目会为您的协作者打开插件,但不会将其下载到他们的机器上。每个协作者还需在每个克隆中运行一次 `claude plugin install <name>@<marketplace> --scope project`;请参阅[在项目设置中启用但未安装](https://code.claude.com/docs/zh-CN/plugins/loading.md#enabled-in-project-settings-but-not-installed)。

136* **Local scope**:该插件仅在此存储库中为您启用。条目进入 `.claude/settings.local.json`。136* **Local scope**:该插件仅在此存储库中为您启用。条目进入 `.claude/settings.local.json`。

137 137 

138某些插件由其作者通过 [`defaultEnabled`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#defaultenabled) 字段设置为默认关闭。这样的插件已安装但保持关闭,直到您在 shell 中使用 `claude plugin enable <name>` 或从会话中 `/plugin` 的 **Installed** 选项卡打开它。138某些插件由其作者通过 [`defaultEnabled`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#defaultenabled) 字段设置为默认关闭。这样的插件已安装但保持关闭,直到您在 shell 中使用 `claude plugin enable <name>` 或从会话中 `/plugin` 的 **Installed** 选项卡打开它。

Details

173 173 

174要在您的机器上选择退出项目启用的插件,请在 `.claude/settings.local.json` 中将 id 设置为 `false`,它的优先级高于项目文件。174要在您的机器上选择退出项目启用的插件,请在 `.claude/settings.local.json` 中将 id 设置为 `false`,它的优先级高于项目文件。

175 175 

176### 在 `--add-dir` 目录中启用但未加载

177 

178仅当已添加目录中某个文件对应的设置源处于开启状态时,Claude Code 才会读取该文件中值为 `true` 的 `enabledPlugins` 条目:

179 

180* **`.claude/settings.json`**:`project`

181* **`.claude/settings.local.json`**:`project` 和 `local`

182 

183请检查会话加载了哪些设置源。您可以使用 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 设置它们。在 CLI 中,`user`、`project` 和 `local` 默认全部开启。

184 

185例如,如果您在 shell 中运行 `claude --setting-sources user --add-dir ./shared`,Claude Code 不会读取 `./shared` 中的任何一个文件。请针对包含 `true` 的文件传递相应的标志:

186 

187* **`settings.json`**:`--setting-sources user,project`

188* **`settings.local.json`**:`--setting-sources user,project,local`

189 

176### 在项目设置中启用但未安装190### 在项目设置中启用但未安装

177 191 

178当插件的唯一 `true` 在项目的 `.claude/settings.json` 中时,Claude Code 不会在未安装它的机器上获取它,除非其市场条目具有[相对路径源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md#plugin-sources)或[种子目录](https://code.claude.com/docs/zh-CN/plugins/org.md#seed-containers-and-ci)已经保存它。相反,`/plugin` **Errors** 选项卡显示 `Plugin "<name>" is enabled in project settings but isn't installed here`。192默认情况下,仅在项目的 `.claude/settings.json` 中启用的插件在您将其安装到您的机器上之前,不会在会话启动时加载。当市场位于您的机器上时,`/plugin` **Errors** 选项卡会显示 [`Plugin "<name>" is enabled in project settings but isn't installed here`](https://code.claude.com/docs/zh-CN/plugins/troubleshooting#plugin-is-enabled-in-project-settings-but-isnt-installed-here) 或 [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/zh-CN/plugins/troubleshooting#plugin-not-cached-at)。

193 

194> [!NOTE]

195>

196> 如果该选项卡未显示上述任一消息,请在安装之前[添加市场](https://code.claude.com/docs/zh-CN/plugins/install.md#add-a-marketplace)。您可以在 `.claude/settings.json` 的 `extraKnownMarketplaces` 设置中找到其源,或询问您的维护者。

197 

198要进行安装,请在项目中的 shell 里运行以下命令,并使用该插件在 `enabledPlugins` 中的键:

199 

200```shell theme={null}

201claude plugin install <name>@<marketplace> --scope project

202```

203 

204要加载插件,请在会话中运行 `/reload-plugins` 或启动新会话。在您的每个克隆中重复安装,或使用 `--scope user` 覆盖您的所有项目。

205 

206在以下情况下,您无需安装即可加载插件:

179 207 

180相对路径插件不需要安装记录,因为它从市场本身加载。208* **位于[种子目录](https://code.claude.com/docs/zh-CN/plugins/org.md#seed-containers-and-ci)中**:您无需运行任何命令

209* **在您从本地路径添加的市场中通过[相对路径](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference.md#plugin-sources)列出**:您无需运行任何命令,因为插件会在会话启动时加载

210* **在您已添加的 git 市场的 `marketplace.json` 中通过相对路径(例如 `./plugins/formatter`)列出**:运行 `/reload-plugins` 以仅为当前会话加载它。要为单次[非交互式 `-p` 运行](https://code.claude.com/docs/zh-CN/headless)加载它,请设置 [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL=1`](https://code.claude.com/docs/zh-CN/env-vars)。

181 211 

182Claude Code 仅当以下源之一将其设置为 `true` 时才获取具有外部源的插件:212Claude Code 仅当以下源之一将其设置为 `true` 时才获取具有外部源的插件:

183 213 

Details

189 189 

190### `metadata`190### `metadata`

191 191 

192用于您自己数据的自由形式对象,例如目录或权利字段。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本。192用于您自己数据的自由形式对象,例如目录或权利字段。Claude Code 不读取它。

193 193 

194### 目录列表字段194### 目录列表字段

195 195 


394 394 

395manifest 中的每个组件路径相对于 plugin 根目录,必须以 `./` 开头。路径如 `commands/foo.md` 验证失败。`skills` 和 `mcpServers` 各接受该规则之外的一种形式:395manifest 中的每个组件路径相对于 plugin 根目录,必须以 `./` 开头。路径如 `commands/foo.md` 验证失败。`skills` 和 `mcpServers` 各接受该规则之外的一种形式:

396 396 

397* **`skills`**:也接受 `"."`。`"."` 和 `"./"` 都表示 plugin 根目录。在 v2.1.221 之前,`"."` 验证失败,因此当 plugin 必须在较早版本上加载时使用 `"./"`397* **`skills`**:也接受 `"."`。`"."` 和 `"./"` 都表示插件根目录

398* **`mcpServers`**:也接受 `https://` 包 URL398* **`mcpServers`**:也接受 `https://` 包 URL

399 399 

400`experimental.evals` 不是组件路径,因此本节中的规则不适用于它,而是由 `claude plugin eval` 在运行时检查该值。它指定插件根目录下的一个目录,例如 `"quality/evals"`,可以带或不带 `./` 前缀。如果是数组,则仅使用第一个条目。有关该值接受的内容以及值不可用时会发生什么,请参阅[使用不同的 eval 目录](https://code.claude.com/docs/zh-CN/plugin-evals.md#use-a-different-eval-directory)。400`experimental.evals` 不是组件路径,因此本节中的规则不适用于它,而是由 `claude plugin eval` 在运行时检查该值。它指定插件根目录下的一个目录,例如 `"quality/evals"`,可以带或不带 `./` 前缀。如果是数组,则仅使用第一个条目。有关该值接受的内容以及值不可用时会发生什么,请参阅[使用不同的 eval 目录](https://code.claude.com/docs/zh-CN/plugin-evals.md#use-a-different-eval-directory)。


403 403 

404每个组件路径必须在 plugin 根目录内解析并且必须存在。`claude plugin validate` 检查每个组件键下的路径:404每个组件路径必须在 plugin 根目录内解析并且必须存在。`claude plugin validate` 检查每个组件键下的路径:

405 405 

406* **包含**:在 plugin 根目录外解析的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path escapes plugin directory: <path>`。包含 `..` 的路径是常见情况,`claude plugin validate` 将其报告为 `Path contains ".." which could be a path traversal attempt`406* **包含**:在插件根目录外解析的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path escapes plugin directory: <path>`。包含 `..` 的路径是常见情况,`claude plugin validate` 报告错误 `Path contains ".." which could be a path traversal attempt`。对于 `mcpServers` 或 `lspServers` 文件,[`path not read`](https://code.claude.com/docs/zh-CN/errors#server-file-path-not-read) 消息表示该路径是绝对路径或包含 `..`

407* **存在**:不存在的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path not found: <path>`。`claude plugin validate` 将其报告为 `Path not found`407* **存在**:不存在的路径不加载,`/plugin` **Errors** 选项卡显示 `<component> path not found: <path>`。`claude plugin validate` 将其报告为 `Path not found`

408 408 

409对于 `outputStyles`、`lspServers`、`monitors` 和 `themes` 路径,`claude plugin validate` 检查需要 Claude Code v2.1.283 或更高版本。409对于 `outputStyles`、`lspServers`、`monitors` 和 `themes` 路径,`claude plugin validate` 检查需要 Claude Code v2.1.283 或更高版本。

Details

94| `dependencies` | array | 必须为此插件启用的插件。每个项是 `"name"`、`"name@marketplace"` 或对象。请参阅 [插件依赖项](https://code.claude.com/docs/zh-CN/plugins/dependencies.md) |94| `dependencies` | array | 必须为此插件启用的插件。每个项是 `"name"`、`"name@marketplace"` 或对象。请参阅 [插件依赖项](https://code.claude.com/docs/zh-CN/plugins/dependencies.md) |

95| `defaultEnabled` | boolean | 默认 `true`。当用户未在 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 中设置时,插件是否启动时启用。条目值优先于 `plugin.json` |95| `defaultEnabled` | boolean | 默认 `true`。当用户未在 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 中设置时,插件是否启动时启用。条目值优先于 `plugin.json` |

96| `displayName` | string | 在 UI 中显示的人类可读名称。当条目和插件的 `plugin.json` 都未设置时,用户看到插件的 `name` |96| `displayName` | string | 在 UI 中显示的人类可读名称。当条目和插件的 `plugin.json` 都未设置时,用户看到插件的 `name` |

97| `metadata` | object | 用于您自己字段的自由格式对象。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本 |97| `metadata` | object | 用于您自己字段的自由格式对象。Claude Code 不读取它 |

98| `headers` | object | Claude Code 在下载此条目的 [archive](#archive-plugin-source) 时发送的 HTTP 标头。此处设置的标头替换市场源的 [`headers`](#fields-by-type) 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |98| `headers` | object | Claude Code 在下载此条目的 [archive](#archive-plugin-source) 时发送的 HTTP 标头。此处设置的标头替换市场源的 [`headers`](#fields-by-type) 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |

99| `headersHelper` | string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于会过期的凭据。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#authenticate-archive-downloads) |99| `headersHelper` | string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于会过期的凭据。条目还必须设置 [`"strict": false`](#strict-mode)。需要 Claude Code v2.1.238 或更高版本。请参阅 [验证 archive 下载](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#authenticate-archive-downloads) |

100 100 


142| `url` | `url`, `ref`, `sha` | 任何 git 仓库的 URL |142| `url` | `url`, `ref`, `sha` | 任何 git 仓库的 URL |

143| `git-subdir` | `url`, `path`, `ref`, `sha` | git 仓库的一个子目录,使用稀疏检出获取 |143| `git-subdir` | `url`, `path`, `ref`, `sha` | git 仓库的一个子目录,使用稀疏检出获取 |

144| `npm` | `package`, `version`, `registry` | npm registry 包或 tarball 链接,使用您的 npm 客户端获取并解包,不运行安装脚本 |144| `npm` | `package`, `version`, `registry` | npm registry 包或 tarball 链接,使用您的 npm 客户端获取并解包,不运行安装脚本 |

145| `archive` | `url`, `sha256` | HTTPS 上的 Zip 存档。需要 Claude Code v2.1.224 或更高版本 |145| `archive` | `url`, `sha256` | HTTPS 上的 Zip 存档 |

146| `command` | `command`, `timeout`, `mode` | 由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |146| `command` | `command`, `timeout`, `mode` | 由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |

147 147 

148名称 `url` 和 `github` 也是[marketplace 源](#marketplace-sources)类型,其中 `url` 表示直接链接到 `marketplace.json` 文件而不是 git 仓库。`git` 仅作为 marketplace 源存在,`npm` 既作为 marketplace 源也作为插件源存在。`git-subdir`、`archive` 和 `command` 仅作为插件源存在。148名称 `url` 和 `github` 也是[marketplace 源](#marketplace-sources)类型,其中 `url` 表示直接链接到 `marketplace.json` 文件而不是 git 仓库。`git` 仅作为 marketplace 源存在,`npm` 既作为 marketplace 源也作为插件源存在。`git-subdir`、`archive` 和 `command` 仅作为插件源存在。

Details

57* **Mods 处于开启状态。** 用户可以安装包含来自您的插件设置允许的任何市场的 mod 的插件,或使用 `--plugin-dir` 从目录加载一个。57* **Mods 处于开启状态。** 用户可以安装包含来自您的插件设置允许的任何市场的 mod 的插件,或使用 `--plugin-dir` 从目录加载一个。

58* **内置守卫首先运行。** Claude Code 在用户安装的每个 mod 之前加载一个名为 `sec-default@builtin` 的内置 mod。用户无法将其关闭。`/plugin` 和调试日志将其列为 `cc-plugin-sec-default`。内置守卫在以下任一情况为真时加载:58* **内置守卫首先运行。** Claude Code 在用户安装的每个 mod 之前加载一个名为 `sec-default@builtin` 的内置 mod。用户无法将其关闭。`/plugin` 和调试日志将其列为 `cc-plugin-sec-default`。内置守卫在以下任一情况为真时加载:

59 59 

60 * 机器有托管设置60 * 机器有托管设置或 [`managed-mcp.json`](https://code.claude.com/docs/zh-CN/managed-mcp#deploy-managed-mcp-json) 文件

61 * 会话使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence)运行61 * 会话使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence)运行

62 62 

63 使用 API 密钥进行身份验证的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 进行身份验证的用户,仅在具有托管设置的机器上获得内置守卫。使用长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话也不算作上述登录,即使机器上存储了 Team 或 Enterprise 登录信息。63 使用 API 密钥的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 的用户,仅在具有托管设置或 `managed-mcp.json` 的机器上获得内置守卫。使用长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话也不算作上述登录,即使机器上存储了 Team 或 Enterprise 登录信息。

64* **保护程序保护您管理的内容。** 用户的 mod 无法更改您的托管 hooks 接收或决定的内容、系统提示、您的托管 `CLAUDE.md` 和其他托管说明、任何 mod 读取的设置内容,或您的托管 MCP 服务器的工具和描述。64* **保护程序保护您管理的内容。** 用户的 mod 无法更改您的托管 hooks 接收或决定的内容、系统提示、您的托管 `CLAUDE.md` 和其他托管说明、任何 mod 读取的设置内容,或您的托管 MCP 服务器的工具和描述。

65* **在您管理的内容之外,用户的 mod 以该用户身份行事。** mod 保留该用户的权限:它仍然可以读写文件、启动进程和发出网络请求。它还可以重写工具调用和提示词、拒绝工具调用,以及在界面中绘制。65* **在您管理的内容之外,用户的 mod 以该用户身份行事。** mod 保留该用户的权限:它仍然可以读写文件、启动进程和发出网络请求。它还可以重写工具调用和提示词、拒绝工具调用,以及在界面中绘制。

66* **权限规则和 `PreToolUse` hook 优先于用户的 mod。** 加载内置守卫后,默认情况下,用户的 mod 无法批准 `deny` 规则拒绝的调用或 `ask` 规则会提示的调用,无论哪个设置文件持有该规则。mod 也无法批准任何 `PreToolUse` hook 阻止的调用。66* **权限规则和 `PreToolUse` hook 优先于用户的 mod。** 加载内置守卫后,默认情况下,用户的 mod 无法批准 `deny` 规则拒绝的调用或 `ask` 规则会提示的调用,无论哪个设置文件持有该规则。mod 也无法批准任何 `PreToolUse` hook 阻止的调用。


76 76 

77* **设置 hook 继续工作。** 设置文件和插件的 `hooks/hooks.json` 中的命令、HTTP、提示词和 Agent hook 照常运行,与 mod 一起。77* **设置 hook 继续工作。** 设置文件和插件的 `hooks/hooks.json` 中的命令、HTTP、提示词和 Agent hook 照常运行,与 mod 一起。

78* **拒绝规则在保护程序加载的地方优先。** 用户的 mod 无法批准 `deny` 规则拒绝的调用,除非您设置 [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard)。78* **拒绝规则在保护程序加载的地方优先。** 用户的 mod 无法批准 `deny` 规则拒绝的调用,除非您设置 [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard)。

79* **托管 hook 首先运行。** 托管设置中的 `PreToolUse` hook 在任何 mod 的 [`tool.call`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#tools) hook 之前运行,当该托管 hook 阻止某个工具调用时,不会有任何 mod 的 `tool.call` hook 针对该调用运行。如果调用继续进行且 mod 重写了它,您的托管 hook 会在重写后的调用上再次运行,因此仍然可以阻止它。79* **托管 hook 首先运行。** 托管设置中的 `PreToolUse` hook 在任何 mod 的 [`tool.call`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#tools) hook 之前运行,当该托管 hook 阻止某个工具调用时,不会有任何 mod 的 `tool.call` hook 针对该调用运行。如果调用继续进行且 mod 重写了它,您的托管 hook 会在重写后的调用上再次运行,因此默认情况下仍然可以阻止它。

80 80 

81 来自其他设置文件和插件的 `PreToolUse` hook 在最后一个 mod 之后运行。如果 mod 自行应答工具调用,该工具永远不会运行,这些 hook 也不会运行。请参阅[mod 运行的顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)。81 来自其他设置文件和插件的 `PreToolUse` hook 在最后一个 mod 之后运行。如果 mod 自行应答工具调用,该工具永远不会运行,这些 hook 也不会运行。请参阅[mod 运行的顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)。

82* **网络策略涵盖 `$.http.fetch`。**82* **网络策略涵盖 `$.http.fetch`。**


260| 选项 | 未设置 | `true` |260| 选项 | 未设置 | `true` |

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

262| `allowManagedModsOnly` | 用户自己的 mod 会运行 | 仅[您组织的 mod](#install-your-organizations-mods) 和内置于 Claude Code 的 mod 会运行其 hook。Claude Code 会拒绝所有其他 mod,包括用户安装的或使用 `--plugin-dir` 指定的 mod。 |262| `allowManagedModsOnly` | 用户自己的 mod 会运行 | 仅[您组织的 mod](#install-your-organizations-mods) 和内置于 Claude Code 的 mod 会运行其 hook。Claude Code 会拒绝所有其他 mod,包括用户安装的或使用 `--plugin-dir` 指定的 mod。 |

263| `allowModsToOverrideDenyRules` | 拒绝规则优先于用户的 mod | 批准工具调用的用户 mod 可以批准 `deny` 规则拒绝的调用 |263| `allowModsToOverrideDenyRules` | 拒绝规则优先于用户的 mod | 批准工具调用的用户 mod 可以越过大多数[默认保持生效的结果](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)来批准调用,包括 `deny` 规则 |

264 264 

265这些规则决定选项是否生效:265这些规则决定选项是否生效:

266 266 


350 350 

351* **列表替换默认值**:当您在托管设置中设置 `prependPlugins` 时,请在其中列出 `sec-default@builtin` 以保留内置守卫。该守卫是内置的,不需要 `enabledPlugins` 条目。351* **列表替换默认值**:当您在托管设置中设置 `prependPlugins` 时,请在其中列出 `sec-default@builtin` 以保留内置守卫。该守卫是内置的,不需要 `enabledPlugins` 条目。

352* **您自己的 id 必须计为您的**:在托管设置中,Claude Code 会跳过其插件不满足组织 mod 条件的 id352* **您自己的 id 必须计为您的**:在托管设置中,Claude Code 会跳过其插件不满足组织 mod 条件的 id

353* **仓库无法设置它们**:Claude Code 从托管设置读取这两个设置,从不从仓库的设置文件读取。用户可以在 `~/.claude/settings.json` 中设置它们来对自己的 mod 排序,但仅限于没有托管设置的机器,并且仅当会话的凭据不是 Team 或 Enterprise `/login` 时。在其他任何情况下,Claude Code 都会忽略用户设置中的这两个键。那里的列表既不添加也不删除内置守卫。353* **仓库无法设置这两个列表**:Claude Code 会忽略仓库设置文件中的这两个设置,因此请在托管设置中设置它们。

354* **用户可以设置它们来对自己的 mod 排序**:在 `~/.claude/settings.json` 中设置,但仅限于没有托管设置或 `managed-mcp.json` 文件的机器,并且仅当会话的凭据不是 Team 或 Enterprise `/login` 时。在其他任何情况下,Claude Code 都会忽略用户设置中的这两个键。那里的列表既不添加也不删除内置守卫。

354 355 

355### 使用您自己的 mod 强制执行策略356### 使用您自己的 mod 强制执行策略

356 357 

Details

21 21 

22在交互式 Claude Code 会话中描述你想要的 mod,Claude 会编写它。Claude 使用一个名为 `plugin-authoring` 的内置[技能](https://code.claude.com/docs/zh-CN/skills.md),它告诉 Claude 在哪里编写 mod、你的版本有哪些事件和方法,以及 mod 如何被加载。当你请求一个 mod 时,Claude 可以加载该技能,或者你可以通过在 Claude Code 提示符处运行 `/plugin-authoring` 来自己加载它。22在交互式 Claude Code 会话中描述你想要的 mod,Claude 会编写它。Claude 使用一个名为 `plugin-authoring` 的内置[技能](https://code.claude.com/docs/zh-CN/skills.md),它告诉 Claude 在哪里编写 mod、你的版本有哪些事件和方法,以及 mod 如何被加载。当你请求一个 mod 时,Claude 可以加载该技能,或者你可以通过在 Claude Code 提示符处运行 `/plugin-authoring` 来自己加载它。

23 23 

24一旦你批准了 mod,它就会运行,除了在[某些会话中 Claude 编写的 mod 无法加载](#sessions-that-skip-the-approval)的情况。24在 `auto` 和 `bypassPermissions` [权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)下,mod 可以在轮次结束时运行。在其他模式下,mod 会在您批准后运行,但[Claude 编写的 mod 无法加载的会话](#sessions-that-skip-the-approval)除外。

25 25 

26**1. 描述 mod**26**1. 描述 mod**

27 27 


33 33 

34**2. 批准 mod**34**2. 批准 mod**

35 35 

36当 Claude 保存第一个文件时,Claude Code 会询问是否为会话启用热重新加载。热重新加载运行此会话中 Claude 编写的 mod,并在每个后续更改它们的转折处选择每个更改。36当 Claude 保存第一个文件时,Claude Code 会询问是否为会话启用热重新加载。热重新加载会运行此会话中 Claude 编写的 mod,并应用之后的每次更改。如果没有出现该询问,请跳过此步骤。

37 37 

38选择以下答案之一:38选择以下答案之一:

39 39 

40* **为此会话启用**:会话的 mods 文件夹中的 mod 在转折结束时加载,并在每个更改它们的转折结束时重新加载。你的答案在整个会话中持续,包括在你恢复它之后。40* **Turn them on**:会话的 mods 文件夹中的 mod 会在轮次结束时加载,并在每个更改它们的轮次结束时重新加载。您的答案在整个会话中有效,包括在您恢复会话之后。

41* **暂时不**:现在什么都不加载。文件保留在 Claude 编写的位置,mod 在该会话下次启动时加载。要防止 mod 加载,请删除其目录。41* **Not now**:暂时不加载任何内容。文件保留在 Claude 编写的位置,mod 会在该会话下次启动时加载。要让 mod 永远不加载,请删除其目录。

42 42 

43**3. 检查 mod 是否已加载**43**3. 检查 mod 是否已加载**

44 44 


59 59 

60### Claude 编写的 mod 无法加载的会话60### Claude 编写的 mod 无法加载的会话

61 61 

62Claude 编写的 mod 仅在你批准它后加载,在允许 mod 运行的受信任工作区中。在这些会话中它不会加载:62Claude 编写的 mod 会在允许 mod 运行的受信任工作区中加载;在需要询问的模式下,须经您批准后才会加载。在以下会话中它不会加载:

63 63 

64* **没有人在那里批准**:会话无法向你显示提示,如在 `claude -p` 运行或 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes)中64* **没有人可以批准**:会话无法向您显示提示,例如在 `auto` 和 `bypassPermissions` 模式之外的 `claude -p` 运行中,或在 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes)中

65* **工作区不受信任**:你还没有接受目录的信任提示65* **工作区不受信任**:你还没有接受目录的信任提示

66* **mod 已被禁用**:您使用 `--safe-mode` 或 `--bare` 启动,您设置了 `disableAllHooks`,或者您组织的[托管设置阻止了它](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#choose-how-much-to-allow)66* **mod 已被禁用**:您使用 `--safe-mode` 或 `--bare` 启动,您设置了 `disableAllHooks`,或者您组织的[托管设置阻止了它](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#choose-how-much-to-allow)

67 67 

Details

328 328 

329请检查哪些 mod 会收到此事件以及您的 Claude Code 版本:329请检查哪些 mod 会收到此事件以及您的 Claude Code 版本:

330 330 

331* **内置守卫**:存在托管设置时,或者以 Team 或 Enterprise [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 作为会话的凭据时,[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)可能会跳过您安装或通过 `--plugin-dir` 加载的 mod 中的此 hook。要进行检查,请在[调试日志](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#read-the-debug-log)中搜索 `settings.read bypassed by cc-plugin-sec-default`。如果包含该文本的行指明了您的 mod,请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。331* **内置守卫**:在加载了[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)的环境中,它可能会跳过您安装或通过 `--plugin-dir` 加载的 mod 中的此 hook。要进行检查,请在[调试日志](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#read-the-debug-log)中搜索 `settings.read bypassed by cc-plugin-sec-default`。如果包含该文本的行指明了您的 mod,请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。

332* **版本**:该事件在 Claude Code 自身的读取上触发,以及 `e.layers` 字段,都需要 Claude Code v2.1.304 或更高版本。332* **版本**:该事件在 Claude Code 自身的读取上触发,以及 `e.layers` 字段,都需要 Claude Code v2.1.304 或更高版本。

333 333 

334#### `settings.read` hook 接收的内容334#### `settings.read` hook 接收的内容

Details

78 78 

79Mod 不在沙箱中运行。如果您启用[沙箱隔离](https://code.claude.com/docs/zh-CN/sandboxing.md),沙箱会隔离 Claude 运行的 Bash 命令,而 mod 启动的进程在沙箱之外运行。79Mod 不在沙箱中运行。如果您启用[沙箱隔离](https://code.claude.com/docs/zh-CN/sandboxing.md),沙箱会隔离 Claude 运行的 Bash 命令,而 mod 启动的进程在沙箱之外运行。

80 80 

81当存在[托管设置](https://code.claude.com/docs/zh-CN/settings.md#check-what-your-organization-enforces),或以 Team 或 Enterprise [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 作为会话凭据时,默认情况下 mod 的批准无法让调用绕过您的 `ask` 规则或 `PreToolUse` hook。如果两者都不存在,mod 可以批准 `ask` 规则会提示确认的调用,或您的 `PreToolUse` hook 已阻止的调用。要了解 mod 何时还可以批准 `deny` 规则拒绝的调用,请参阅[使用 hook 扩展权限](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。81Mod 可以批准[许多工具调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods),而这些调用原本会被您的 `deny` 或 `ask` 规则或您的 `PreToolUse` hook 拦截,除非[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)阻止这样做。加载守卫后,默认情况下用户的 mod 无法这样做。在本地终端会话中,如果 `/plugin` 的 **Installed** 选项卡上显示 `cc-plugin-sec-default`,则表示守卫已加载。

82 82 

83Mod 可以重新设置 Claude Code 界面的大部分样式,但不能重新设置权限提示。它无法改变权限提示向您显示的内容。83Mod 可以重新设置 Claude Code 界面的大部分样式,但不能重新设置权限提示。它无法改变权限提示向您显示的内容。

84 84 

Details

39| `next.origin` | 触发该事件者的 `{ plugin, tier }`。Claude Code 自身为 `{ plugin: 'engine', tier: 'core' }`。mod 的 `tier` 是它在 [mod 运行顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)中的优先级组:`prepend`、`user`、`append` 或 `builtin`。 |39| `next.origin` | 触发该事件者的 `{ plugin, tier }`。Claude Code 自身为 `{ plugin: 'engine', tier: 'core' }`。mod 的 `tier` 是它在 [mod 运行顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)中的优先级组:`prepend`、`user`、`append` 或 `builtin`。 |

40| `next.budget` | hook 的时间限制(以毫秒为单位):`next.budget.ms` 是总限制,`next.budget.remainingMs` 是当前剩余时间 |40| `next.budget` | hook 的时间限制(以毫秒为单位):`next.budget.ms` 是总限制,`next.budget.remainingMs` 是当前剩余时间 |

41| `next.to(e, tier)` | 跳到后面的层级,即 `append`、`builtin` 或 `core`。`next.to(e, 'append')` 会跳过用户安装的 mod。只有 `prependPlugins` 或 `appendPlugins` 中的 mod 才能调用它。 |41| `next.to(e, tier)` | 跳到后面的层级,即 `append`、`builtin` 或 `core`。`next.to(e, 'append')` 会跳过用户安装的 mod。只有 `prependPlugins` 或 `appendPlugins` 中的 mod 才能调用它。 |

42| `next.error` | 仅在 `.catch` 处理程序中可用。hook 失败时,`kind` 为 `throw` 或 `timeout`,`message` 是错误文本。当 hook 因事件来自该 hook 或您的 mod 在其 hook 之外的代码所发起的 mods API 调用内部而被跳过时,`kind` 为 `re-entry`。`re-entry` 需要 Claude Code v2.1.292 或更高版本。 |42| `next.error` | 仅在 `.catch` 处理程序中可用。`kind` 为 `throw` 或 `timeout`,`message` 是错误文本。 |

43| `next.error.cause` | 仅当 `kind` 为 `re-entry` 时设置。如果 `tool.call` 或 [`PreToolUse`](https://code.claude.com/docs/zh-CN/hooks#pretooluse) hook 更改了该事件所来自的 mods API 调用,或者 `agent.spawn` hook 更改了由该调用启动的 Agent,则为 `rewritten`。当触发该事件的是另一个 mod 添加到 mods API 的方法时,为 `lent`,除非同时适用 `rewritten`。`lent` 需要 Claude Code v2.1.292 或更高版本,`rewritten` 需要 v2.1.300 或更高版本。 |

44| `next.called` | 仅在 `.catch` 处理程序中可用。当 hook 已调用 `next` 时为 `true`。 |43| `next.called` | 仅在 `.catch` 处理程序中可用。当 hook 已调用 `next` 时为 `true`。 |

45 44 

46## 事件45## 事件


252| [`AbovePrompt`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |251| [`AbovePrompt`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |

253| [`Placed`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#place-a-row-in-the-transcript) | `id`、`plugin`、`onScreen` | `$.ui.place` 返回的 `requestId` | 终端 |252| [`Placed`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#place-a-row-in-the-transcript) | `id`、`plugin`、`onScreen` | `$.ui.place` 返回的 `requestId` | 终端 |

254| [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `id`、`plugin`、`glass`、`colorScheme` | `backdrop` | `desktop` 和 `mobile` 使用入口。当 Desktop 或移动应用请求绘制背景时,您的 hook 会运行。 |253| [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `id`、`plugin`、`glass`、`colorScheme` | `backdrop` | `desktop` 和 `mobile` 使用入口。当 Desktop 或移动应用请求绘制背景时,您的 hook 会运行。 |

255| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 消息 id | 终端、Desktop、VS Code |254| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 所绘制行的 id | 终端、Desktop、VS Code |

256| `AssistantMessage` | 回复的文本 | 消息 id | 终端、Desktop、VS Code |255| `AssistantMessage` | 回复的文本 | 所绘制行的 id | 终端、Desktop、VS Code |

257| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop、VS Code |256| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop、VS Code |

258| `CommandOutput` | `command`、`text` | 消息 id | 终端、Desktop |257| `CommandOutput` | `command`、`text` | 所绘制行的 id | 终端、Desktop |

259| [`AskUserQuestion`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | 问题和选项 | 工具调用 id | 终端、Desktop、VS Code |258| [`AskUserQuestion`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | 问题和选项 | 工具调用 id | 终端、Desktop、VS Code |

260| `ToolProgress` | `kind` | 工具调用 id | 终端 |259| `ToolProgress` | `kind` | 工具调用 id | 终端 |

261| [`Spinner`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | Agent id | 终端、Desktop、VS Code |260| [`Spinner`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | Agent id | 终端、Desktop、VS Code |

262| `TurnDuration` | `word`、`durationMs` | 消息 id | 终端 |261| `TurnDuration` | `word`、`durationMs` | 所绘制行的 id | 终端 |

263| `InfoNotice` | `text`、`command` | 消息 id | 终端 |262| `InfoNotice` | `text`、`command` | 以 `notice:` 为前缀的通知 `text` | 终端 |

264| `SessionMode` | `modes` | 单一实例 | 终端、Desktop |263| `SessionMode` | `modes` | 单一实例 | 终端、Desktop |

265| `PromptHint` | `isDraft`、`isWorking`、`hint` | 单一实例 | 终端、Desktop |264| `PromptHint` | `isDraft`、`isWorking`、`hint` | 单一实例 | 终端、Desktop |

266 265 


424| :- | :- | :- |423| :- | :- | :- |

425| `CLAUDE_CODE_PLUGIN_DIRS` | 环境变量,或 `~/.claude/settings.json` 中的 `env` | 要像 `--plugin-dir` 那样加载的插件目录,用于无法传递标志的应用。以 `:` 分隔的绝对路径,在 Windows 上以 `;` 分隔。 |424| `CLAUDE_CODE_PLUGIN_DIRS` | 环境变量,或 `~/.claude/settings.json` 中的 `env` | 要像 `--plugin-dir` 那样加载的插件目录,用于无法传递标志的应用。以 `:` 分隔的绝对路径,在 Windows 上以 `;` 分隔。 |

426| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 环境变量 | `1` 使长时间运行的非交互式会话在保存时重新加载 `--plugin-dir` mod |425| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 环境变量 | `1` 使长时间运行的非交互式会话在保存时重新加载 `--plugin-dir` mod |

427| `prependPlugins`, `appendPlugins` | 托管设置。仅在没有托管设置的机器上、且会话的凭据不是 Team 或 Enterprise `/login` 时,才可在用户设置中使用。 | 插件 id 列表,例如 `acme-guard@acme-tools`。`prependPlugins` 中的 mod 在用户安装的每个 mod 之前运行,`appendPlugins` 中的 mod 在之后运行,均按列出的顺序。请参阅 [mod 运行顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)。 |426| `prependPlugins`, `appendPlugins` | 托管设置。仅在没有托管设置或 [`managed-mcp.json`](https://code.claude.com/docs/zh-CN/managed-mcp#deploy-managed-mcp-json) 文件的机器上、且会话的凭据不是 Team 或 Enterprise `/login` 时,才可在用户设置中使用。 | 插件 id 列表,例如 `acme-guard@acme-tools`。`prependPlugins` 中的 mod 在用户安装的每个 mod 之前运行,`appendPlugins` 中的 mod 在之后运行,均按列出的顺序。请参阅 [mod 运行顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)。 |

428| `allowManagedModsOnly` | 托管设置,作为[内置守卫的选项](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#set-options-on-the-built-in-guard) | 只有[算作您组织的](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods) mod 以及 Claude Code 内置的 mod 会运行其 hook。用户的设置 hook 会继续运行。 |427| `allowManagedModsOnly` | 托管设置,作为[内置守卫的选项](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#set-options-on-the-built-in-guard) | 只有[算作您组织的](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods) mod 以及 Claude Code 内置的 mod 会运行其 hook。用户的设置 hook 会继续运行。 |

429| `allowModsToOverrideDenyRules` | 托管设置,作为[内置守卫的选项](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#set-options-on-the-built-in-guard) | 允许用户安装的 mod 批准被 `deny` 规则拒绝的工具调用 |428| `allowModsToOverrideDenyRules` | 托管设置,作为[内置守卫的选项](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#set-options-on-the-built-in-guard) | 允许用户安装的 mod 批准工具调用,越过大多数[默认保持有效的结果](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods),包括 `deny` 规则 |

430| `allowManagedHooksOnly` | 托管设置 | 阻止不属于您组织的 hook 和已安装的 mod。请参阅[哪些会继续运行](https://code.claude.com/docs/zh-CN/settings-reference.md#what-runs-under-allowmanagedhooksonly)。 |429| `allowManagedHooksOnly` | 托管设置 | 阻止不属于您组织的 hook 和已安装的 mod。请参阅[哪些会继续运行](https://code.claude.com/docs/zh-CN/settings-reference.md#what-runs-under-allowmanagedhooksonly)。 |

431| `disableAllHooks` | 任何设置文件 | 在托管设置中,来自已安装插件的任何 mod 或 hook 都不会运行。在您自己的设置中,您组织管理的内容会继续运行。请参阅 [`disableAllHooks`](https://code.claude.com/docs/zh-CN/settings-reference#disableallhooks)。 |430| `disableAllHooks` | 任何设置文件 | 在托管设置中,来自已安装插件的任何 mod 或 hook 都不会运行。在您自己的设置中,您组织管理的内容会继续运行。请参阅 [`disableAllHooks`](https://code.claude.com/docs/zh-CN/settings-reference#disableallhooks)。 |

432| `disableSideloadFlags` | 托管设置 | 在启动时拒绝 `--plugin-dir` 和 `--plugin-url` |431| `disableSideloadFlags` | 托管设置 | 在启动时拒绝 `--plugin-dir` 和 `--plugin-url` |

433| `pluginConfigs` | 用户设置或托管设置 | 保存 mod 的 `userConfig` 值,以插件 id 为键,例如 `acme-guard@acme-tools`;对于使用 `--plugin-dir` 加载的 mod,则以其名称加 `@inline` 为键,例如 `first-mod@inline` |432| `pluginConfigs` | 用户设置或托管设置 | 保存 mod 的 `userConfig` 值,以插件 id 为键,例如 `acme-guard@acme-tools`;对于使用 `--plugin-dir` 加载的 mod,则以其名称加 `@inline` 为键,例如 `first-mod@inline` |

434 433 

435`sec-default@builtin` 是 Claude Code 内置的守卫,在 `/plugin` 和调试日志中显示为 `cc-plugin-sec-default`。在有托管设置的机器上,或在凭据为 Team 或 Enterprise [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 的会话中,它会在用户安装的每个 mod 之前加载。如果设置了托管的 `prependPlugins`,则只有当该列表指定了该守卫时它才会加载,并位于列出的位置。434`sec-default@builtin` 是 Claude Code 内置的守卫,在 `/plugin` 和调试日志中显示为 `cc-plugin-sec-default`。在[它会加载的情况下](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default),它会在用户安装的每个 mod 之前运行。如果设置了托管的 `prependPlugins`,则只有当该列表指定了该守卫时它才会加载,并位于列出的位置。

436 435 

437其源代码位于 [Claude Code 仓库的 `mods/sec-default` 目录](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)中。436其源代码位于 [Claude Code 仓库的 `mods/sec-default` 目录](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)中。

438 437 

Details

14 14 

15当模块未加载、hook 被跳过或另一个 mod 拒绝您的 mod 时,Claude Code 会写入一行,其中命名您的 mod。您读取该行的位置取决于会话:15当模块未加载、hook 被跳过或另一个 mod 拒绝您的 mod 时,Claude Code 会写入一行,其中命名您的 mod。您读取该行的位置取决于会话:

16 16 

17* **热重新加载插件目录的会话**:成绩单中的暗行。这是您使用 `--plugin-dir` 启动的交互式会话,或者是您为 Claude 编写的 mod [启用热重新加载](https://code.claude.com/docs/zh-CN/plugins/mods/create.md#ask-claude-for-a-mod) 的会话。17* **热重新加载插件目录的会话**:会话记录中的一行暗色文本。这是您使用 `--plugin-dir` 启动的交互式会话,或者是针对 Claude 编写的 mod [启用了热重新加载](https://code.claude.com/docs/zh-CN/plugins/mods/create.md#ask-claude-for-a-mod)的会话。

18* **任何其他交互式会话,例如运行您从市场安装的 mod 的会话**:[调试日志](#read-the-debug-log) 仅。要获取一个,请使用 `claude --debug` 启动会话。18* **任何其他交互式会话,例如运行您从市场安装的 mod 的会话**:[调试日志](#read-the-debug-log) 仅。要获取一个,请使用 `claude --debug` 启动会话。

19* **带有 `--plugin-dir` 的 `claude -p` 运行**:stderr,采用默认文本输出格式。另一个 mod 的拒绝仅进入调试日志。19* **带有 `--plugin-dir` 的 `claude -p` 运行**:stderr,采用默认文本输出格式。另一个 mod 的拒绝仅进入调试日志。

20 20 


68 68 

69### 来自内置保护的消息69### 来自内置保护的消息

70 70 

71在具有托管设置的机器上,或在凭据为 Team 或 Enterprise `/login` 的会话中,[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default) 可以拒绝 mod 或其答案之一。每条消息都会指明您的组织管理员为更改该规则而设置的选项。71在[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)加载的地方,它可以拒绝 mod 或其答案之一。每条消息都会指明您的组织管理员为更改该规则而设置的选项。

72 72 

73| 消息包含 | 这意味着什么 | 它出现在哪里 |73| 消息包含 | 这意味着什么 | 它出现在哪里 |

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

plugins/org.md +1 −1

Details

89* **交互式会话**:Claude Code 仅在贡献者接受该文件夹的[工作区信任对话](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)后注册市场。89* **交互式会话**:Claude Code 仅在贡献者接受该文件夹的[工作区信任对话](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)后注册市场。

90* **[非交互式 `-p` 运行](https://code.claude.com/docs/zh-CN/headless)** :条目仅在贡献者已交互式接受其信任的文件夹中应用,或您在 `~/.claude.json` 中设置其 `hasTrustDialogAccepted` 标志的文件夹中应用。90* **[非交互式 `-p` 运行](https://code.claude.com/docs/zh-CN/headless)** :条目仅在贡献者已交互式接受其信任的文件夹中应用,或您在 `~/.claude.json` 中设置其 `hasTrustDialogAccepted` 标志的文件夹中应用。

91 91 

92市场按相对路径列出的插件在存储库的 `extraKnownMarketplaces` 条目应用后从市场副本加载。市场条目指向外部源(例如插件自己的 GitHub 存储库)的插件不会仅从存储库的设置安装。每个贡献者看到 `Plugin "<name>" is enabled in project settings but isn't installed`,直到他们运行 `claude plugin install <name>@<marketplace> --scope project`,如[安装插件](https://code.claude.com/docs/zh-CN/plugins/install.md)所述。92在仓库中设置 `enabledPlugins` 不会安装插件。市场注册后,请让每位贡献者运行 `claude plugin install <name>@<marketplace> --scope project`。在他们运行之前,`/plugin` 的 **Errors** 选项卡可能会显示 `Plugin "<name>" is enabled in project settings but isn't installed here` 或 [`not cached`](https://code.claude.com/docs/zh-CN/plugins/troubleshooting#plugin-not-cached-at)。当本地 `directory` 或 `file` 市场使用[相对路径 `source`](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference#plugin-sources) 列出该插件时,贡献者无需执行安装。

93 93 

94如果您使用带有相对路径的本地 `directory` 或 `file` 源,路径相对于您的存储库的主检出解析。当您从 git worktree 运行 Claude Code 时,路径仍指向主检出,因此所有 worktree 共享相同的市场位置。94如果您使用带有相对路径的本地 `directory` 或 `file` 源,路径相对于您的存储库的主检出解析。当您从 git worktree 运行 Claude Code 时,路径仍指向主检出,因此所有 worktree 共享相同的市场位置。

95 95 

Details

322 322 

323### 市场更新在离线时持续失败323### 市场更新在离线时持续失败

324 324 

325您在市场的 git 主机无法访问的环境中工作,每个会话都在后台重复失败的刷新。您现有的市场检出保持原位,启动不会延迟。325您在市场的 git 主机无法访问的环境中工作,每个会话都在后台重复失败的刷新。您现有的市场检出保持原位。

326 326 

327每个会话,对于 [启用自动更新](https://code.claude.com/docs/zh-CN/plugins/loading.md#which-marketplaces-and-plugins-auto-update) 的市场,Claude Code 在后台检查市场的 git 主机是否有新提交。当该检查无法到达主机时,它尝试再次克隆市场,离线时该克隆也失败。327每个会话,对于 [启用自动更新](https://code.claude.com/docs/zh-CN/plugins/loading.md#which-marketplaces-and-plugins-auto-update) 的市场,Claude Code 在后台检查市场的 git 主机是否有新提交。当该检查无法到达主机时,它尝试再次克隆市场,离线时该克隆也失败。

328 328 


675 675 

676### `Plugin "<name>" not cached at <path>`676### `Plugin "<name>" not cached at <path>`

677 677 

678**Errors** 选项卡显示此行,指导为 `Run /plugin to refresh the plugin cache`。Claude Code 有插件的安装记录,但记录指向的目录缺失,例如在您清除缓存后。678**Errors** 选项卡显示此行,指导为 `Run /plugin to refresh the plugin cache`。这表示 Claude Code 没有找到该插件的可用副本。例如,您清除了缓存,因此其安装记录指向的目录缺失。或者,您打开了一个其设置启用该插件的仓库,但您尚未安装该插件。

679 679 

680从您的 shell 重新安装插件。`claude plugin install <name>@<marketplace>` 重新下载安装目录缺失的插件,即使其记录存在:680从您的 shell 安装插件。如果您打开的仓库的 `.claude/settings.json` 启用了该插件,请按照 [在项目设置中启用但未安装](https://code.claude.com/docs/zh-CN/plugins/loading.md#enabled-in-project-settings-but-not-installed) 中的说明,在项目中使用 `enabledPlugins` 中该插件的键运行以下命令:

681 

682```shell theme={null}

683claude plugin install <name>@<marketplace> --scope project

684```

685 

686否则,请运行以下命令,它会重新下载安装目录缺失的插件,即使其记录存在:

681 687 

682```shell theme={null}688```shell theme={null}

683claude plugin install <name>@<marketplace>689claude plugin install <name>@<marketplace>

684```690```

685 691 

686然后在您的会话中运行 `/reload-plugins`。**Errors** 选项卡条目消失,插件回到 **Installed** 下。692然后在您的会话中运行 `/reload-plugins`。**Errors** 选项卡条目消失,插件列在 **Installed** 下。

687 693 

688### `installed_plugins.json holds a record under "<id>" that this version of Claude Code cannot read`694### `installed_plugins.json holds a record under "<id>" that this version of Claude Code cannot read`

689 695 

Details

103[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)和标准速度各自保留独立的缓存,因此在您启用或关闭快速模式后,下一个请求无法使用另一种速度所缓存的内容。在一个对话中第一次启用快速模式时,下一个请求会以未缓存的方式读取到目前为止的整个对话,并按[快速模式费率](https://code.claude.com/docs/zh-CN/fast-mode.md#understand-the-cost-tradeoff)计费。为了使该成本保持较小,请在会话开始时启用它。103[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)和标准速度各自保留独立的缓存,因此在您启用或关闭快速模式后,下一个请求无法使用另一种速度所缓存的内容。在一个对话中第一次启用快速模式时,下一个请求会以未缓存的方式读取到目前为止的整个对话,并按[快速模式费率](https://code.claude.com/docs/zh-CN/fast-mode.md#understand-the-cost-tradeoff)计费。为了使该成本保持较小,请在会话开始时启用它。

104 104 

105* 如果您在 Claude 工作时启用它,该轮次会以标准速度完成,任何未缓存读取的费用会在您下一轮次的第一个请求上产生。105* 如果您在 Claude 工作时启用它,该轮次会以标准速度完成,任何未缓存读取的费用会在您下一轮次的第一个请求上产生。

106* 如果您当前的模型不支持快速模式,运行 `/fast` 也会[将您切换到 Opus](https://code.claude.com/docs/zh-CN/fast-mode.md#toggle-fast-mode)。该[模型切换](#switching-models)本身会从当前运行轮次中的下一个请求开始启动新的缓存。106* 如果您当前的模型不支持快速模式,运行 `/fast` 也会[切换您的模型](https://code.claude.com/docs/zh-CN/fast-mode.md#toggle-fast-mode)。该[模型切换](#switching-models)本身会从当前运行轮次中的下一个请求开始启动新的缓存。

107 107 

108之后的每次切换都会以未缓存的方式读取您所切换到的速度尚未缓存的内容。Claude Code 自行进行的速度更改,例如[速率限制后回退到标准速度](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)以及稍后返回快速模式,也算作切换。108之后的每次切换都会以未缓存的方式读取您所切换到的速度尚未缓存的内容。Claude Code 自行进行的速度更改,例如[速率限制后回退到标准速度](https://code.claude.com/docs/zh-CN/fast-mode.md#handle-rate-limits)以及稍后返回快速模式,也算作切换。

109 109 

Details

185* **Effort 级别**:当您从已连接的设备使用 `/effort` 或设备的 effort 控件设置 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)时,Claude Code 会将其应用到您机器上的会话。如果您已使用 `CLAUDE_CODE_EFFORT_LEVEL` 固定了级别,会话将保持该级别,Claude Code 会拒绝从 effort 控件中选择的其他级别。从 effort 控件中选择级别需要您机器上的 Claude Code 为 v2.1.234 或更高版本。185* **Effort 级别**:当您从已连接的设备使用 `/effort` 或设备的 effort 控件设置 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)时,Claude Code 会将其应用到您机器上的会话。如果您已使用 `CLAUDE_CODE_EFFORT_LEVEL` 固定了级别,会话将保持该级别,Claude Code 会拒绝从 effort 控件中选择的其他级别。从 effort 控件中选择级别需要您机器上的 Claude Code 为 v2.1.234 或更高版本。

186* **连接失败后重新连接**:运行 `/remote-control` 即可重新连接。如果在此期间压缩重写了对话,或者您使用 `/resume` 切换了对话,Claude Code 会归档它一直在使用的服务器会话,而不是将其留在会话列表中。您仍然可以在 claude.ai/code 的[已归档会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#find-an-archived-session)中找到该会话。在设备仍处于连接状态时切换对话不会归档该会话。186* **连接失败后重新连接**:运行 `/remote-control` 即可重新连接。如果在此期间压缩重写了对话,或者您使用 `/resume` 切换了对话,Claude Code 会归档它一直在使用的服务器会话,而不是将其留在会话列表中。您仍然可以在 claude.ai/code 的[已归档会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#find-an-archived-session)中找到该会话。在设备仍处于连接状态时切换对话不会归档该会话。

187 187 

188### 从浏览器分叉会话

189 

190要在不中断会话的情况下尝试不同的方向,请在 [claude.ai/code](https://claude.ai/code) 中打开该会话,并在会话菜单中选择 **Fork**,或从会话记录中较早的某条消息处分叉。分叉会作为新会话出现在您的会话列表中,并从该位置继续对话,同时原会话保持运行。分叉需要您机器上的 Claude Code 为 v2.1.277 或更高版本。

191 

192使用 `--spawn session` 启动的 `claude remote-control` 服务器只能容纳其唯一的一个会话,因此无法运行分叉。

193 

194在以下情况下,Claude Code 会拒绝分叉:

195 

196* 会话正忙。请在其空闲时再分叉。

197* 会话由 VS Code 扩展或其他基于 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 构建的应用托管。

198 

188### 为所有会话启用 Remote Control199### 为所有会话启用 Remote Control

189 200 

190除非开启了自动连接,否则只有在您显式运行 `claude remote-control`、`claude --remote-control` 或 `/remote-control` 时,Remote Control 才会激活。要为每个交互式会话开启自动连接,请在 Claude Code 中运行 `/config` 并设置 **Enable Remote Control for all sessions**。该开关有三个值:201除非开启了自动连接,否则只有在您显式运行 `claude remote-control`、`claude --remote-control` 或 `/remote-control` 时,Remote Control 才会激活。要为每个交互式会话开启自动连接,请在 Claude Code 中运行 `/config` 并设置 **Enable Remote Control for all sessions**。该开关有三个值:


198* **VS Code 扩展**:[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box) Settings 部分中的 **Enable Remote Control for all sessions**。209* **VS Code 扩展**:[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box) Settings 部分中的 **Enable Remote Control for all sessions**。

199* **Desktop 应用**:**Settings > Code** 或 **Settings > Claude Code** 中的 **Connect new sessions to Remote Control**。请参阅[控制哪些会话显示在您的其他设备上](https://code.claude.com/docs/zh-CN/desktop.md#control-which-sessions-appear-on-your-other-devices)。210* **Desktop 应用**:**Settings > Code** 或 **Settings > Claude Code** 中的 **Connect new sessions to Remote Control**。请参阅[控制哪些会话显示在您的其他设备上](https://code.claude.com/docs/zh-CN/desktop.md#control-which-sessions-appear-on-your-other-devices)。

200 211 

201如果要改为通过设置文件开启自动连接,请在您的用户 `~/.claude/settings.json` 或[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中将 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup) 设为 `true`。在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中,Claude Code 会遵循 `false` 并为该仓库关闭自动连接,但会忽略 `true`,因此签入仓库的文件无法为每个打开该仓库的人开启 Remote Control。212如果要改为通过设置文件开启自动连接,请在您的用户 `~/.claude/settings.json` 或[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中将 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup) 设为 `true`。在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中,Claude Code 会遵循 `false` 并为该仓库关闭自动连接。它会忽略 `true`,因此签入仓库的文件无法为每个打开该仓库的人开启 Remote Control。

202 213 

203自动连接使用您自己的 claude.ai 账户登录,因此它启动的会话仅显示在您自己账户的 Claude 应用中,不会向任何其他人授予访问权限。214自动连接使用您自己的 claude.ai 账户登录,因此它启动的会话仅显示在您自己账户的 Claude 应用中,不会向任何其他人授予访问权限。

204 215 

routines.md +1 −1

Details

528* [`/loop` 和会话内调度](https://code.claude.com/docs/zh-CN/scheduled-tasks):在打开的 CLI 会话中安排本地任务528* [`/loop` 和会话内调度](https://code.claude.com/docs/zh-CN/scheduled-tasks):在打开的 CLI 会话中安排本地任务

529* [Desktop 定时任务](https://code.claude.com/docs/zh-CN/desktop-scheduled-tasks.md):在您的计算机上运行、可访问本地文件的本地定时任务529* [Desktop 定时任务](https://code.claude.com/docs/zh-CN/desktop-scheduled-tasks.md):在您的计算机上运行、可访问本地文件的本地定时任务

530* [云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md):为云端会话配置网络访问、环境变量和设置脚本530* [云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md):为云端会话配置网络访问、环境变量和设置脚本

531* [Projects](https://code.claude.com/docs/zh-CN/claude-projects.md):Claude 跨并行云端会话协调的持续性工作;从项目创建的定时任务会显示在其 **Scheduled tasks** 标签页上531* [Projects](https://code.claude.com/docs/zh-CN/claude-projects.md):Claude 跨并行云端会话协调的持续性工作;从项目创建的定时任务会显示在其 **Scheduled tasks** 视图中

532* [MCP 连接器](https://code.claude.com/docs/zh-CN/mcp.md):连接 Slack、Linear 和 Google Drive 等外部服务532* [MCP 连接器](https://code.claude.com/docs/zh-CN/mcp.md):连接 Slack、Linear 和 Google Drive 等外部服务

533* [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md):在 CI 流水线中针对仓库事件运行 Claude533* [GitHub Actions](https://code.claude.com/docs/zh-CN/github-actions.md):在 CI 流水线中针对仓库事件运行 Claude

sandboxing.md +4 −0

Details

903 903 

904失败后,Claude 可能会[提议在沙箱外重新运行该命令](#the-unsandboxed-retry-escape-hatch)。批准该重试,或在另一个终端中自行运行该 git 命令。如果您已将 `allowUnsandboxedCommands` 设置为 `false`,Claude 无法提供重试,因此请自行运行该命令。904失败后,Claude 可能会[提议在沙箱外重新运行该命令](#the-unsandboxed-retry-escape-hatch)。批准该重试,或在另一个终端中自行运行该 git 命令。如果您已将 `allowUnsandboxedCommands` 设置为 `false`,Claude 无法提供重试,因此请自行运行该命令。

905 905 

906### git 命令因 `Unable to create '…/index.lock'` 失败

907 

908如果您在仓库的子目录中启动了 Claude Code,此错误可能意味着 `.git` 位于[沙箱化命令可以写入的范围](#filesystem-isolation)之外。请改为从仓库根目录启动 Claude Code;如果位于[链接的 worktree](https://code.claude.com/docs/zh-CN/worktrees.md) 中,则从该 worktree 的根目录启动。

909 

906### 名为 `objects` 或 `refs` 的文件夹在命令执行后消失910### 名为 `objects` 或 `refs` 的文件夹在命令执行后消失

907 911 

908会话期间出现的顶层 `objects` 或 `refs` 文件夹可能会[在沙箱化命令结束后被删除](#when-the-sandbox-deletes-head-objects-or-refs)。无论它是由命令、Claude 还是您创建的,都是如此。要保留某个文件夹,请在其中放入一些内容。如果会话期间顶层曾存在 `HEAD` 文件或符号链接,请将其移走,然后重新启动在该位置打开的每个 Claude Code 会话。912会话期间出现的顶层 `objects` 或 `refs` 文件夹可能会[在沙箱化命令结束后被删除](#when-the-sandbox-deletes-head-objects-or-refs)。无论它是由命令、Claude 还是您创建的,都是如此。要保留某个文件夹,请在其中放入一些内容。如果会话期间顶层曾存在 `HEAD` 文件或符号链接,请将其移走,然后重新启动在该位置打开的每个 Claude Code 会话。

Details

54}54}

55```55```

56 56 

57每位团队成员还需要在每次克隆后[运行一次 `claude plugin install security-guidance@claude-plugins-official --scope project`](https://code.claude.com/docs/zh-CN/plugins/loading#enabled-in-project-settings-but-not-installed)。

58 

57管理员可以通过在[托管设置](https://code.claude.com/docs/zh-CN/admin-setup.md)中设置 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 来在整个组织范围内启用插件。59管理员可以通过在[托管设置](https://code.claude.com/docs/zh-CN/admin-setup.md)中设置 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 来在整个组织范围内启用插件。

58 60 

59## 插件检查的内容61## 插件检查的内容


135patterns:137patterns:

136 - rule_name: internal_api_key138 - rule_name: internal_api_key

137 substrings: ["sk_live_", "AKIA"]139 substrings: ["sk_live_", "AKIA"]

138 reminder: "硬编码的 API 密钥前缀。从密钥管理器加载凭证。"140 reminder: "Hardcoded API key prefix. Load credentials from the secret manager."

139 - rule_name: tenant_unfiltered_query141 - rule_name: tenant_unfiltered_query

140 regex: "\\.objects\\.all\\(\\)"142 regex: "\\.objects\\.all\\(\\)"

141 paths: ["**/src/tenants/**"]143 paths: ["**/src/tenants/**"]

142 reminder: "多租户代码必须按 org_id 过滤。"144 reminder: "Multi-tenant code must filter by org_id."

143```145```

144 146 

145| 字段 | 类型 | 描述 |147| 字段 | 类型 | 描述 |

Details

235set -u235set -u

236export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}236export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

237IFS=':'237IFS=':'

238rc=0 # becomes 1 when a step fails; a non-zero exit makes the runner log it

238# -c overrides beat repo-local settings, blocking session-written fsmonitor,239# -c overrides beat repo-local settings, blocking session-written fsmonitor,

239# hook-path, and gpg-program config from executing code with the hook's240# hook-path, and gpg-program config from executing code with the hook's

240# privileges. -c commit.gpgsign=false also leaves these rescue commits241# privileges. -c commit.gpgsign=false also leaves these rescue commits


245g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \246g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

246 -c commit.gpgsign=false "$@"; }247 -c commit.gpgsign=false "$@"; }

247for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do248for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do

248 cd "$ws" 2>/dev/null || continue249 cd "$ws" || { rc=1; continue; }

249 [ -z "$(g status --porcelain 2>/dev/null)" ] && continue250 g add -A || rc=1

250 g add -A251 g diff-index --cached --quiet HEAD && continue # nothing to save

251 g commit -q -m "runner snapshot: $CLAUDE_RUNNER_SESSION_ID ($CLAUDE_RUNNER_EXIT_REASON)" || continue252 g commit -q -m "runner snapshot: $CLAUDE_RUNNER_SESSION_ID ($CLAUDE_RUNNER_EXIT_REASON)" || { rc=1; continue; }

252 g push -q origin "HEAD:refs/heads/rescue/$CLAUDE_RUNNER_SESSION_ID" || true253 g push -q origin "HEAD:refs/heads/rescue/$CLAUDE_RUNNER_SESSION_ID" || rc=1

253done254done

255exit "$rc"

254```256```

255 257 

256脚本中的 `GIT_ALLOW_PROTOCOL` 行将 git 限制为 HTTPS、HTTP 和 SSH 远程。如果运行器的环境已经设置了自己的非空 `GIT_ALLOW_PROTOCOL` 列表,脚本会保留该列表。258脚本中的 `GIT_ALLOW_PROTOCOL` 行将 git 限制为 HTTPS、HTTP 和 SSH 远程。如果运行器的环境已经设置了自己的非空 `GIT_ALLOW_PROTOCOL` 列表,脚本会保留该列表。

Details

23 * **使用 [Anthropic 托管的 git](#use-the-anthropic-git-proxy) 时**:有了此类凭据,Claude 会直接访问 GitHub,而不是通过 Anthropic 托管的 git。23 * **使用 [Anthropic 托管的 git](#use-the-anthropic-git-proxy) 时**:有了此类凭据,Claude 会直接访问 GitHub,而不是通过 Anthropic 托管的 git。

24 * **不使用 Anthropic 托管的 git 时**:如果您按照[在镜像中附带 git 配置](#ship-git-config-in-your-image)所述严格限定克隆凭据的范围,则该凭据可以保留在镜像中。24 * **不使用 Anthropic 托管的 git 时**:如果您按照[在镜像中附带 git 配置](#ship-git-config-in-your-image)所述严格限定克隆凭据的范围,则该凭据可以保留在镜像中。

25* **将环境密钥保持在运行会话的主机之外**:环境密钥可以注册运行器并获取在环境上排队的任何会话。在固定队列上,它存在于每个运行器主机上,任何会话的代码都可以读取密钥文件。优先使用[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners),其中密钥保留在编排器主机上,该主机从不运行用户代码,每个运行器接收单次使用的工作单,恰好注册一个运行器。在固定队列上,将环境密钥文件视为可由每个会话读取,并在任何可疑会话泄露后轮换密钥。25* **将环境密钥保持在运行会话的主机之外**:环境密钥可以注册运行器并获取在环境上排队的任何会话。在固定队列上,它存在于每个运行器主机上,任何会话的代码都可以读取密钥文件。优先使用[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners),其中密钥保留在编排器主机上,该主机从不运行用户代码,每个运行器接收单次使用的工作单,恰好注册一个运行器。在固定队列上,将环境密钥文件视为可由每个会话读取,并在任何可疑会话泄露后轮换密钥。

26 * **发生可疑泄露后**:请[所有者](https://code.claude.com/docs/zh-CN/cloud-environments.md#organization-shared-environments)在环境的 **Configuration** 选项卡中创建新密钥并撤销旧密钥,然后推出新密钥。Anthropic 会拒绝所有使用旧密钥的编排器和运行器,包括来自其工作单的按需运行器。您的运行器将退出,从而中断其会话。26 * **发生可疑泄露后,首先撤销可疑会话**:在停止其运行器或撤销密钥之前,在 **Activity** 选项卡上该会话的菜单中选择 **Revoke token**。此后任何运行器都无法恢复该会话。

27 * **然后替换密钥**:请[所有者](https://code.claude.com/docs/zh-CN/cloud-environments.md#organization-shared-environments)在环境的 **Configuration** 选项卡中创建新密钥并撤销旧密钥,然后推出新密钥。Anthropic 会拒绝所有使用旧密钥的编排器和运行器,包括来自其工作单的按需运行器。您的运行器将退出,从而中断其会话。

27* **默认拒绝网络出站流量**:在每个环境上限制运行器和会话容器的出站流量在您自己的网络边界;[默认拒绝出站流量](#default-deny-egress)涵盖允许什么以及原因。28* **默认拒绝网络出站流量**:在每个环境上限制运行器和会话容器的出站流量在您自己的网络边界;[默认拒绝出站流量](#default-deny-egress)涵盖允许什么以及原因。

28* **最小权限主机 IAM**:附加到运行器主机的计算身份(例如实例配置文件或节点服务帐户)应仅授予运行器本身需要的内容。会话应通过您的包装脚本而不是继承主机的身份获取自己的凭证。29* **最小权限主机 IAM**:附加到运行器主机的计算身份(例如实例配置文件或节点服务帐户)应仅授予运行器本身需要的内容。会话应通过您的包装脚本而不是继承主机的身份获取自己的凭证。

29* **阻止会话访问云元数据端点**:保持会话不访问主机身份需要阻止它们访问云元数据端点,子网级出站策略不会拦截链接本地元数据流量,因此在容器本身中阻止它:30* **阻止会话访问云元数据端点**:保持会话不访问主机身份需要阻止它们访问云元数据端点,子网级出站策略不会拦截链接本地元数据流量,因此在容器本身中阻止它:


243 244 

244对于每个会话,Claude Code v2.1.267 或更高版本的运行器还会记录以下两者之一:当 Anthropic 为会话提供 git 服务时,记录一行包含 `governed git ACTIVE` 的 `[runner:session]` 日志;当不提供服务时,记录一行包含 `the server withheld Anthropic-managed git for this session` 的 `[runner:warn]` 日志。在以下情况中找到您看到的行:245对于每个会话,Claude Code v2.1.267 或更高版本的运行器还会记录以下两者之一:当 Anthropic 为会话提供 git 服务时,记录一行包含 `governed git ACTIVE` 的 `[runner:session]` 日志;当不提供服务时,记录一行包含 `the server withheld Anthropic-managed git for this session` 的 `[runner:warn]` 日志。在以下情况中找到您看到的行:

245 246 

246* **既没有 `governed git ACTIVE` 也没有 `withheld` 行**:早于 Claude Code v2.1.267 的运行器不会记录这两行中的任何一行,Anthropic 也不会为其会话提供服务。请按照[固定版本](#pin-the-version)将运行器更新到 v2.1.267 或更高版本。247* **既没有 `governed git ACTIVE` 也没有 `withheld` 行**:如果运行器早于 Claude Code v2.1.267,Anthropic 不会为其会话提供服务。请按照[固定版本](#pin-the-version)将运行器更新到 v2.1.267 或更高版本。

247* **`withheld` 行**:Anthropic 未为该会话提供服务。之前可以正常使用 git 代理的运行器,即使您这边没有任何更改,也可能以这种方式失败。248* **`withheld` 行**:Anthropic 未为该会话提供服务。之前可以正常使用 git 代理的运行器,即使您这边没有任何更改,也可能以这种方式失败。

248 * **某个仓库不在 github.com 上**:只要会话中有一个仓库位于其他 git 主机(例如 GitHub Enterprise Server)上,该会话就不会获得服务,其 github.com 仓库也不例外。请为该环境的运行器[关闭 Anthropic git 代理](#turn-the-anthropic-git-proxy-off)。249 * **某个仓库不在 github.com 上**:只要会话中有一个仓库位于其他 git 主机(例如 GitHub Enterprise Server)上,该会话就不会获得服务,其 github.com 仓库也不例外。请为该环境的运行器[关闭 Anthropic git 代理](#turn-the-anthropic-git-proxy-off)。

249 * **所有仓库都在 github.com 上**:请将此失败连同 `withheld` 行中的会话 ID 一起报告给[您的 Anthropic 客户团队](#report-an-issue)。Anthropic 会在其一端记录原因。250 * **所有仓库都在 github.com 上**:请将此失败连同 `withheld` 行中的会话 ID 一起报告给[您的 Anthropic 客户团队](#report-an-issue)。Anthropic 会在其一端记录原因。


396如果您的节点是 ARM,将 `linux-x64` 交换为 `linux-arm64`,或在 Alpine 等 musl 基础镜像上交换为 `linux-x64-musl` 或 `linux-arm64-musl`;请参阅 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)了解 musl 镜像需要的额外包。URL 是标准 Claude Code 发布位置,因此您可以根据[二进制完整性和代码签名](https://code.claude.com/docs/zh-CN/setup.md#binary-integrity-and-code-signing)中描述的发布的已签名清单验证下载的二进制文件。运行器需要 Claude Code 版本 2.1.224 或更高版本;若要为 Claude Tag 会话提供服务,则需要 2.1.229 或更高版本。构建镜像,然后将其推送到您的注册表并在下面的配方中引用它:397如果您的节点是 ARM,将 `linux-x64` 交换为 `linux-arm64`,或在 Alpine 等 musl 基础镜像上交换为 `linux-x64-musl` 或 `linux-arm64-musl`;请参阅 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)了解 musl 镜像需要的额外包。URL 是标准 Claude Code 发布位置,因此您可以根据[二进制完整性和代码签名](https://code.claude.com/docs/zh-CN/setup.md#binary-integrity-and-code-signing)中描述的发布的已签名清单验证下载的二进制文件。运行器需要 Claude Code 版本 2.1.224 或更高版本;若要为 Claude Tag 会话提供服务,则需要 2.1.229 或更高版本。构建镜像,然后将其推送到您的注册表并在下面的配方中引用它:

397 398 

398```bash theme={null}399```bash theme={null}

400# If your model needs a newer release, change stable to latest in the URL

399docker build \401docker build \

400 --build-arg CLAUDE_CODE_VERSION="$(curl -fsSL https://downloads.claude.ai/claude-code-releases/stable)" \402 --build-arg CLAUDE_CODE_VERSION="$(curl -fsSL https://downloads.claude.ai/claude-code-releases/stable)" \

401 -t <your-registry>/claude-runner:latest .403 -t <your-registry>/claude-runner:latest .


429运行器使用 `--capacity` 来限制它一次运行多少个会话。它不在它们之间分割 CPU 或内存,所以运行器上的会话共享容器的 CPU 和内存。为防止一个会话的内存使用导致其他会话结束,请每个运行器运行一个会话,并为其设置[独立的内存限制](#give-each-session-its-own-memory-limit)。431运行器使用 `--capacity` 来限制它一次运行多少个会话。它不在它们之间分割 CPU 或内存,所以运行器上的会话共享容器的 CPU 和内存。为防止一个会话的内存使用导致其他会话结束,请每个运行器运行一个会话,并为其设置[独立的内存限制](#give-each-session-its-own-memory-limit)。

430 432 

431* **每个运行器一个会话**:给每个容器一个会话的值。在 `--capacity 1` 使用此大小,[加固部分](#harden-your-deployment)推荐,以及对于[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners),您在您的 [`spawn-runner` 钩子](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#the-spawn-runner-hook)提交的工作负载上设置值,例如 Kubernetes Job 的 pod 模板。433* **每个运行器一个会话**:给每个容器一个会话的值。在 `--capacity 1` 使用此大小,[加固部分](#harden-your-deployment)推荐,以及对于[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners),您在您的 [`spawn-runner` 钩子](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#the-spawn-runner-hook)提交的工作负载上设置值,例如 Kubernetes Job 的 pod 模板。

432* **每个运行器多个会话**:在 `--capacity` 高于 1 时,将一个会话的值乘以容量,因为最多那么多会话可以在容器中同时运行。[Kubernetes](#kubernetes) 和 [Docker Compose](#docker-compose) 配方以 `--capacity 4` 运行,没有 CPU 或内存限制,因此添加为您运行的容量调整大小的限制。434* **每个运行器多个会话**:在 `--capacity` 高于 1 时,将一个会话的值乘以容量,因为最多那么多会话可以在容器中同时运行,[包括空闲会话](#release-idle-sessions-on-a-fixed-fleet)。[Kubernetes](#kubernetes) 和 [Docker Compose](#docker-compose) 配方以 `--capacity 4` 运行,没有 CPU 或内存限制,因此添加为您运行的容量调整大小的限制。

433* **一台主机上多个运行器容器**:按各运行器容量之和调整主机大小,因为每个运行器只将自己的会话计入 `--capacity`:435* **一台主机上多个运行器容器**:按各运行器容量之和调整主机大小,因为每个运行器只将自己的会话计入 `--capacity`:

434 436 

435 * **内存**:将一个会话的内存乘以该总和,再加上主机自身进程使用的内存437 * **内存**:将一个会话的内存乘以该总和,再加上主机自身进程使用的内存

Details

56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 会话结束后,在强制终止 Claude 进程之前等待其正常退出的时长。如果子进程自身的 `SessionEnd` hook 需要更多时间,请调高此值。 |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 会话结束后,在强制终止 Claude 进程之前等待其正常退出的时长。如果子进程自身的 `SessionEnd` hook 需要更多时间,请调高此值。 |

57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 在释放会话槽位之前,等待尚未初始化的子进程的时长。有关计时从何处开始以及哪些会话会继续运行,请参阅[会话启动超时](#session-startup-timeout)。`0` 表示禁用超时。 |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 在释放会话槽位之前,等待尚未初始化的子进程的时长。有关计时从何处开始以及哪些会话会继续运行,请参阅[会话启动超时](#session-startup-timeout)。`0` 表示禁用超时。 |

58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 开启 | 为每个会话的仓库路径预置持久化信任,以便遵循仓库中已提交的 `permissions.allow` 和 `additionalDirectories`。设置为 `false` 可丢弃仓库中已提交的权限授予,并改为在主机配置的 `settings.json` 中配置允许规则;无论哪种方式,仓库中已提交的 `sandbox.*` 设置仍然适用,这也是[仓库设置防护机制](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#harden-your-deployment)无论此标志如何都会扫描它们的原因。 |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 开启 | 为每个会话的仓库路径预置持久化信任,以便遵循仓库中已提交的 `permissions.allow` 和 `additionalDirectories`。设置为 `false` 可丢弃仓库中已提交的权限授予,并改为在主机配置的 `settings.json` 中配置允许规则;无论哪种方式,仓库中已提交的 `sandbox.*` 设置仍然适用,这也是[仓库设置防护机制](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#harden-your-deployment)无论此标志如何都会扫描它们的原因。 |

59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 关闭 | 通过 [Anthropic git 代理](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy)克隆 github.com 上的仓库,而不是使用客户自管的 git 身份验证。需要 `--capacity 1` 和 git 2.32 或更高版本,否则 runner 会拒绝启动。此标志取代改写类标志。 |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 关闭 | 通过 [Anthropic git 代理](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy)克隆 github.com 上的仓库,而不是使用客户自管的 git 身份验证。需要 `--capacity 1` 和 git 2.32 或更高版本,否则 runner 会拒绝启动。还需要 Claude Code v2.1.267 或更高版本。此标志取代改写类标志。 |

60 60 

61大多数时长类标志都有上限,其选择是为了使每个超时都保持在运行时约 24.85 天的 32 位计时器上限之内。`--*-min` 标志的上限为 10080 分钟,即 7 天;`--drain-grace-sec` 为 604800 秒,同样是 7 天;`--drain-wait-sec` 为 86400 秒,即 24 小时。`--session-stop-grace-sec` 和 `--post-session-hook-timeout-sec` 没有上限。超出上限时,不同使用方式的行为有所不同:61大多数时长类标志都有上限,其选择是为了使每个超时都保持在运行时约 24.85 天的 32 位计时器上限之内。`--*-min` 标志的上限为 10080 分钟,即 7 天;`--drain-grace-sec` 为 604800 秒,同样是 7 天;`--drain-wait-sec` 为 86400 秒,即 24 小时。`--session-stop-grace-sec` 和 `--post-session-hook-timeout-sec` 没有上限。超出上限时,不同使用方式的行为有所不同:

62 62 


161 161 

162## Prometheus 指标162## Prometheus 指标

163 163 

164每个运行器在与 `/healthz` 相同的端口上的 `GET /metrics` 处提供 Prometheus 指标。关键系列:164每个运行器都在与 `/healthz` 相同的端口上通过 `GET /metrics` 提供 Prometheus 指标。主要序列:

165 165 

166| 系列 | 注释 |166| 序列 | 说明 |

167| :- | :- |167| :- | :- |

168| `claude_code_self_hosted_runner_info{runner_id,version,client_label}` | 始终为 `1`;对舰队库存和版本漂移检测有用 |168| `claude_code_self_hosted_runner_info{runner_id,version,client_label}` | 始终为 `1`;可用于机群清单和版本漂移检测 |

169| `claude_code_self_hosted_runner_capacity` | 配置的 `--capacity` |169| `claude_code_self_hosted_runner_capacity` | 配置的 `--capacity` |

170| `claude_code_self_hosted_runner_active_sessions` | 当前运行的会话 |170| `claude_code_self_hosted_runner_active_sessions` | 当前正在运行的会话 |

171| `claude_code_self_hosted_runner_locked_account{email}` | 一旦运行器锁定到用户并发出携带 `act.email` 声明的会话令牌,就存在。该系列在锁定到 Claude Tag 代理的运行器上不存在,其会话令牌不携带 `act.email`。标签值是帐户电子邮件;如果您的指标存储被广泛读取,在抓取时删除或哈希标签,例如使用 Prometheus `metric_relabel_configs`。 |171| `claude_code_self_hosted_runner_locked_account{email}` | 当运行器已锁定到某个用户,并且已签发携带 `act.email` 声明的会话令牌后出现。对于锁定到 Claude Tag Agent 的运行器,该序列不存在,因为其会话令牌不携带 `act.email`。标签值为账户电子邮件;如果您的指标存储可被广泛读取,请在抓取时删除该标签或对其进行哈希处理,例如使用 Prometheus `metric_relabel_configs`。 |

172| `claude_code_self_hosted_runner_last_poll_age_seconds` | 自上次成功轮询以来的秒数。如果超过 60,则发出警报。 |172| `claude_code_self_hosted_runner_last_poll_age_seconds` | 距上次成功轮询的秒数。超过 60 时告警。 |

173| `claude_code_self_hosted_runner_poll_errors_total{error_kind}` | 按类型累积 PollWork 失败:`transport`、`timeout`、`5xx`、`429` 或 `4xx`。所有五个系列从进程启动时存在;在 `rate(...[5m]) > 0` 时发出警报。 |173| `claude_code_self_hosted_runner_poll_errors_total{error_kind}` | 按类型累计的 PollWork 失败次数:`transport`、`timeout`、`5xx`、`429` 或 `4xx`。这五个序列从进程启动时即存在;在 `rate(...[5m]) > 0` 时告警。 |

174| `claude_code_self_hosted_runner_sessions_started_total{client_platform}` | 在运行器的生命周期内生成的会话子进程,每个会话来源一个系列,例如 `web_claude_ai`、`ios`、`android`、`desktop_app` 或 `claude_code_cli`,或当服务器未发送时为 `unknown`。Slack 会话根据哪个 Slack 集成创建它们,携带 `claude_in_slack` 或 `claude-in-slack`,因此使用正则表达式选择器(例如 `{client_platform=~"claude[-_]in[-_]slack"}` 匹配两者。对舰队总数使用 `sum()`。 |174| `claude_code_self_hosted_runner_sessions_started_total{client_platform}` | 运行器生命周期内生成的会话子进程数,每个会话来源一个序列,例如 `web_claude_ai`、`ios`、`android`、`desktop_app` 或 `claude_code_cli`,服务器未发送来源时为 `unknown`。Slack 会话根据创建它们的 Slack 集成不同,携带 `claude_in_slack` 或 `claude-in-slack`,因此请使用正则选择器同时匹配两者,例如 `{client_platform=~"claude[-_]in[-_]slack"}`。使用 `sum()` 获取整个机群的总数。 |

175| `claude_code_self_hosted_runner_sessions_completed_total{client_platform}` | 干净结束的会话,标签方式相同。比普通干净退出更广泛:请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)了解计数内容。 |175| `claude_code_self_hosted_runner_sessions_completed_total{client_platform}` | 正常结束的会话,标签方式相同。其范围比单纯的正常退出更广:哪些情况计入,请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)。 |

176| `claude_code_self_hosted_runner_sessions_failed_total{client_platform}` | 以失败结束的会话,标签方式相同。相同的注意事项:请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)。 |176| `claude_code_self_hosted_runner_sessions_failed_total{client_platform}` | 以失败结束的会话,标签方式相同。同样需注意:请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)。 |

177| `claude_code_self_hosted_runner_sessions_interrupted_total{client_platform}` | 运行器因操作原因而不是会话结果终止的会话,标签方式相同。请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)。 |177| `claude_code_self_hosted_runner_sessions_interrupted_total{client_platform}` | 运行器出于运维原因而非会话结果终止的会话,标签方式相同。请参阅[会话生命周期计数器语义](#session-lifecycle-counter-semantics)。 |

178| `claude_code_self_hosted_runner_initializing_sessions` | 当前处于初始化阶段的会话,从分配到子进程的初始化事件 |178| `claude_code_self_hosted_runner_initializing_sessions` | 当前处于初始化阶段的会话,从分配开始直到子进程的 init 事件 |

179| `claude_code_self_hosted_runner_session_init_duration_seconds` | 会话初始化持续时间的直方图 |179| `claude_code_self_hosted_runner_session_init_duration_seconds` | 会话初始化时长的直方图 |

180| `claude_code_self_hosted_runner_session_init_errors_total` | 在达到初始化前失败的会话:checkout 钩子失败、git 准备、令牌问题或初始化前子进程崩溃 |180| `claude_code_self_hosted_runner_session_init_errors_total` | 在到达 init 之前失败的会话:checkout hook 失败、git 准备、令牌问题或 init 前子进程崩溃 |

181| `claude_code_self_hosted_runner_session_start_hook_errors_total` | 报告错误结果的 `SessionStart` 钩子,每个失败的钩子执行一个 |181| `claude_code_self_hosted_runner_session_start_hook_errors_total` | 报告错误结果的 `SessionStart` hook,每次失败的 hook 执行计一次 |

182| `claude_code_self_hosted_runner_session_idle_seconds{session_id,client_platform}` | 每个会话的仪表,显示会话空闲以来的秒数。对于终止卡在未回答权限提示上的会话很有用。 |182| `claude_code_self_hosted_runner_session_idle_seconds{session_id,client_platform}` | 每个会话的仪表,表示会话进入空闲状态后的秒数。可用于终止卡在未应答权限提示上的会话。 |

183 183 

184编排器在与其 `/healthz` 相同的端口上的 `GET /metrics` 处提供自己的系列:184编排器在与其 `/healthz` 相同的端口上通过 `GET /metrics` 提供自己的序列:

185 185 

186| 系列 | 注释 |186| 序列 | 说明 |

187| :- | :- |187| :- | :- |

188| `claude_code_self_hosted_orchestrator_info{version,pool_id,orchestrator_uuid,hostname}` | 始终为 `1` |188| `claude_code_self_hosted_orchestrator_info{version,pool_id,orchestrator_uuid,hostname}` | 始终为 `1` |

189| `claude_code_self_hosted_orchestrator_connected` | 当最近一次轮询成功时为 `1`;在任何失败的轮询后下降到 `0`,无论失败类型如何 |189| `claude_code_self_hosted_orchestrator_connected` | 最近一次轮询成功时为 `1`;任何轮询失败后降为 `0`,无论失败类型如何 |

190| `claude_code_self_hosted_orchestrator_last_poll_age_seconds` | 自上次轮询尝试以来的秒数,成功或失败,与运行器的同名指标不同,后者测量自上次成功以来;与 `connected` 配对以捕获失败的轮询。编排器的轮询循环等待钩子执行,因此在 `--hook-timeout` 加边距(默认值约 90 秒)之上发出警报,而不是固定的 60。 |190| `claude_code_self_hosted_orchestrator_last_poll_age_seconds` | 距上次轮询尝试(无论成功或失败)的秒数,这与运行器的同名指标不同,后者衡量的是距上次成功的时间;请与 `connected` 搭配使用以捕获失败的轮询。编排器的轮询循环会等待 hook 执行,因此告警阈值应设为 `--hook-timeout` 加上一定余量(默认情况下约 90 秒),而不是固定的 60。 |

191| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | 按类型累积 PollSpawnHints 失败:`transport`、`timeout`、`5xx`、`429` 或 `4xx`。所有五个系列从进程启动时存在;在 `rate(...[5m]) > 0` 时发出警报。 |191| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | 按类型累计的 PollSpawnHints 失败次数:`transport`、`timeout`、`5xx`、`429` 或 `4xx`。这五个序列从进程启动时即存在;在 `rate(...[5m]) > 0` 时告警。 |

192| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | 现在可声称的生成请求 |192| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | 当前可认领的生成请求 |

193| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | 在可重试钩子失败后处于重试退避中的生成请求 |193| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | 在可重试的 hook 失败后处于重试退避中的生成请求 |

194| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | 被阻止生成的会话。每个会话都保持阻止状态,直到用户向其发送新消息,或所有者从环境的**活动**选项卡重试它。修复原因后,该计数可能仍保持在零以上。如果高于零则发出警报。 |194| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | 被阻止生成的会话。每个会话会一直被阻止,直到用户向其发送新消息,或 Owner 从环境的 **Activity** 选项卡重试它。修复原因后,该计数可能仍保持在零以上。高于零时告警。 |

195| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | 等待此环境中的运行器的总会话。环境范围的聚合,在每个编排器实例上相同:在实例间使用 `MAX` 而不是 `SUM`。 |195| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | 该环境中等待运行器的会话总数。这是环境范围的聚合值,在每个编排器实例上都相同:跨实例时请使用 `MAX` 而不是 `SUM`。 |

196| `claude_code_self_hosted_orchestrator_pool_active_sessions` | 当前分配给此环境中活跃运行器的会话。环境范围的聚合,在每个编排器实例上相同:在实例间使用 `MAX` 而不是 `SUM`。 |196| `claude_code_self_hosted_orchestrator_pool_active_sessions` | 当前分配给该环境中存活运行器的会话数。这是环境范围的聚合值,在每个编排器实例上都相同:跨实例时请使用 `MAX` 而不是 `SUM`。 |

197| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | 累积 `spawn-runner` 钩子结果:`ok`、`retryable`、`non_retryable`。计数编排器钩子调用,而不是运行器生成的会话子进程:与 `sessions_started_total` 不可比,因为容量高于 1、热池和为同一会话再次生成的运行器都使两者分散。 |197| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | 累计的 `spawn-runner` hook 结果:`ok`、`retryable`、`non_retryable`。统计的是编排器的 hook 调用次数,而不是运行器生成的会话子进程数:它与 `sessions_started_total` 不可比较,因为大于 1 的容量、预热池以及为同一会话再次生成的运行器都会使两者产生偏差。 |

198| `claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds` | 钩子持续时间的直方图 |198| `claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds` | hook 时长的直方图 |

199| `claude_code_self_hosted_orchestrator_warm_hints_dispatched_total` | 自进程启动以来分派的待命生成请求 |199| `claude_code_self_hosted_orchestrator_warm_hints_dispatched_total` | 自进程启动以来分派的待机生成请求数 |

200| `claude_code_self_hosted_orchestrator_session_queue_wait_seconds` | 每个会话在队列中等待的秒数的直方图,然后编排器声称它用于生成,从控制平面与每个会话的生成请求一起发送的队列等待时间戳记录。用于 p50/p99 队列时间警报。预热生成不被采样。 |200| `claude_code_self_hosted_orchestrator_session_queue_wait_seconds` | 每个会话在编排器认领其进行生成之前在队列中等待的秒数的直方图,根据控制平面随每个会话的生成请求发送的队列等待时间戳记录。用于 p50/p99 队列时间告警。预热生成不会被采样。 |

201| `claude_code_self_hosted_orchestrator_clock_skew_seconds` | 本地减去服务器时钟偏差;诊断,一旦测量就存在 |201| `claude_code_self_hosted_orchestrator_clock_skew_seconds` | 本地减去服务器的时钟偏差;诊断用,测量后出现 |

202| `claude_code_self_hosted_orchestrator_scm_connector_connected` | 当 [SCM 连接器](#scm-connector-flags) 的 WebSocket 打开时为 `1`;在拨号或退避时为 `0`。当未设置 `--scm-connector-host` 时不存在。 |202| `claude_code_self_hosted_orchestrator_scm_connector_connected` | [SCM 连接器](#scm-connector-flags)的 WebSocket 打开时为 `1`;拨号或退避期间为 `0`。未设置 `--scm-connector-host` 时不存在。 |

203| `claude_code_self_hosted_orchestrator_scm_connector_requests_forwarded_total` | 自进程启动以来代理到配置的 SCM 主机的累积 HTTP 请求。当未设置 `--scm-connector-host` 时不存在。 |203| `claude_code_self_hosted_orchestrator_scm_connector_requests_forwarded_total` | 自进程启动以来代理到所配置 SCM 主机的累计 HTTP 请求数。未设置 `--scm-connector-host` 时不存在。 |

204 204 

205对于自动扩展,选择与您的扩展风格匹配的系列,并在将其馈送到扩展器之前对其进行门控:205对于自动扩缩,请选择与您的扩缩方式相匹配的序列,并在其输入扩缩器之前对其进行门控:

206 206 

207* **队列深度扩展**:将 `claude_code_self_hosted_orchestrator_pool_pending_sessions` 馈送到您的 HPA 或 KEDA 扩展器,而不是 `queue_pending_sessions`。207* **基于队列深度扩缩**:将 `claude_code_self_hosted_orchestrator_pool_pending_sessions` 输入您的 HPA 或 KEDA 扩缩器,而不是 `queue_pending_sessions`。

208* **容量扩展**:按运行器的 `active_sessions` 与 `capacity` 的比率进行扩展。208* **基于容量扩缩**:根据运行器的 `active_sessions` 与 `capacity` 之比进行扩缩。

209* **在 `connected` 上门控**:使用 `claude_code_self_hosted_orchestrator_connected == 1` 按实例过滤查询,以便断开连接的副本的陈旧值不会馈送到扩展器。209* **按 `connected` 门控**:按实例使用 `claude_code_self_hosted_orchestrator_connected == 1` 过滤查询,这样已断开连接的副本的陈旧值就不会输入扩缩器。

210 210 

211在完整轮询中断期间,每个副本都断开连接,门控查询返回无数据。HPA 在缺少指标时保持当前副本计数,但 KEDA 的 Prometheus 扩展器在其默认 `ignoreNullValues: "true"` 处将空结果读取为零并缩小;在 ScaledObject 上设置 `ignoreNullValues: "false"`,可选择使用 `fallback` 副本下限。211在轮询完全中断、所有副本都断开连接期间,门控查询不返回任何数据。HPA 在指标缺失时会保持当前副本数,但 KEDA 的 Prometheus 扩缩器在默认 `ignoreNullValues: "true"` 下会将空结果读取为零并缩容;请在 ScaledObject 上设置 `ignoreNullValues: "false"`,并可选择设置 `fallback` 副本下限。

212 212 

213以下 Prometheus Operator `PodMonitor` 涵盖两个进程。它通过 `app.kubernetes.io/part-of: claude-code-self-hosted-runner` 标签和[Kubernetes 配方](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#kubernetes)设置的命名 `health` 端口选择 pod;调整命名空间以匹配您的部署:213以下 Prometheus Operator `PodMonitor` 涵盖这两个进程。它通过 `app.kubernetes.io/part-of: claude-code-self-hosted-runner` 标签以及 [Kubernetes 方案](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#kubernetes)所设置的命名 `health` 端口来选择 Pod;请调整命名空间以匹配您的部署:

214 214 

215```yaml theme={null}215```yaml theme={null}

216# Claude Code 自托管运行器 + 编排器的示例 Prometheus Operator PodMonitor。216# 适用于 Claude Code 自托管运行器 + 编排器的

217# 调整命名空间和标签选择器以匹配您的部署。运行器和编排器都在其217# Prometheus Operator PodMonitor 示例。请调整命名空间和标签选择器以匹配

218# --health-port(默认 8080)上提供 /metrics。218# 您的部署。运行器和编排器都在其 --health-port(默认 8080)

219# 上提供 /metrics。

219apiVersion: monitoring.coreos.com/v1220apiVersion: monitoring.coreos.com/v1

220kind: PodMonitor221kind: PodMonitor

221metadata:222metadata:


227 - claude-runners228 - claude-runners

228 selector:229 selector:

229 matchExpressions:230 matchExpressions:

230 # 匹配 Kubernetes 配方中的运行器部署,加上您标记相同方式的任何231 # 匹配 Kubernetes 方案中的运行器 Deployment,以及您以相同方式

231 # 按需运行器作业和编排器 pod,并给予命名的"health"containerPort。232 # 添加标签并指定了命名 'health' containerPort 的

233 # 按需运行器 Job 和编排器 Pod。

232 - key: app.kubernetes.io/part-of234 - key: app.kubernetes.io/part-of

233 operator: In235 operator: In

234 values: [claude-code-self-hosted-runner]236 values: [claude-code-self-hosted-runner]


238 interval: 30s240 interval: 30s

239```241```

240 242 

241### 示例警报规则243### 示例告警规则

242 244 

243这些示例警报规则是一个起点;为您的舰队大小调整阈值:245这些示例告警规则只是一个起点;请根据您的机群规模调整阈值:

244 246 

245```yaml theme={null}247```yaml theme={null}

246# Claude Code 自托管运行器 + 编排器的示例 Prometheus 警报规则。248# 适用于 Claude Code 自托管运行器 + 编排器的

247# 为您的舰队大小和 SLO 调整阈值。249# Prometheus 告警规则示例。请根据您的机群规模和 SLO 调整阈值。

248groups:250groups:

249 - name: claude-code-self-hosted-runner251 - name: claude-code-self-hosted-runner

250 rules:252 rules:


253 for: 2m255 for: 2m

254 labels: {severity: warning}256 labels: {severity: warning}

255 annotations:257 annotations:

256 summary: "运行器 {{ $labels.pod }} 已超过 60 秒未轮询"258 summary: "Runner {{ $labels.pod }} has not polled in >60s"

257 - alert: ClaudeRunnerVersionDrift259 - alert: ClaudeRunnerVersionDrift

258 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1260 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1

259 for: 30m261 for: 30m

260 labels: {severity: info}262 labels: {severity: info}

261 annotations:263 annotations:

262 summary: "运行器正在运行混合版本"264 summary: "Runners are running mixed versions"

263 - alert: ClaudeRunnerInitErrorsHigh265 - alert: ClaudeRunnerInitErrorsHigh

264 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3266 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

265 for: 5m267 for: 5m

266 labels: {severity: warning}268 labels: {severity: warning}

267 annotations:269 annotations:

268 summary: "会话在初始化前失败(checkout hook / git / 令牌 / 初始化前崩溃)"270 summary: "Sessions are failing before init (checkout hook / git / token / pre-init crash)"

269 - alert: ClaudeRunnerPollErrors271 - alert: ClaudeRunnerPollErrors

270 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0272 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

271 for: 2m273 for: 2m

272 labels: {severity: warning}274 labels: {severity: warning}

273 annotations:275 annotations:

274 summary: "运行器 {{ $labels.pod }}:PollWork 失败({{ $value | humanize }}/s 超过 5m)"276 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

275 - alert: ClaudeRunnerSessionStartHookErrors277 - alert: ClaudeRunnerSessionStartHookErrors

276 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3278 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

277 for: 5m279 for: 5m

278 labels: {severity: warning}280 labels: {severity: warning}

279 annotations:281 annotations:

280 summary: "SessionStart hook 正在失败"282 summary: "SessionStart hooks are failing"

281 283 

282 - name: claude-code-self-hosted-orchestrator284 - name: claude-code-self-hosted-orchestrator

283 rules:285 rules:


286 for: 2m288 for: 2m

287 labels: {severity: critical}289 labels: {severity: critical}

288 annotations:290 annotations:

289 summary: "编排器 {{ $labels.pod }} 无法到达 Anthropic 控制平面"291 summary: "Orchestrator {{ $labels.pod }} cannot reach the Anthropic control plane"

290 - alert: ClaudeOrchestratorPollStale292 - alert: ClaudeOrchestratorPollStale

291 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90293 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90

292 for: 2m294 for: 2m

293 labels: {severity: warning}295 labels: {severity: warning}

294 annotations:296 annotations:

295 summary: "编排器 {{ $labels.pod }} 已超过 90 秒未轮询(轮询循环等待 hook 执行)"297 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

296 - alert: ClaudeOrchestratorCircuitBroken298 - alert: ClaudeOrchestratorCircuitBroken

297 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0299 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

298 for: 1m300 for: 1m

299 labels: {severity: critical}301 labels: {severity: critical}

300 annotations:302 annotations:

301 summary: "被阻止生成的会话:{{ $value }}。在 Activity 选项卡中查看每个会话的错误,修复原因,然后选择 Retry"303 summary: "Sessions blocked from spawning: {{ $value }}. Read each one's error in the Activity tab, fix the cause, then select Retry"

302 - alert: ClaudeOrchestratorPollErrors304 - alert: ClaudeOrchestratorPollErrors

303 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0305 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

304 for: 2m306 for: 2m

305 labels: {severity: warning}307 labels: {severity: warning}

306 annotations:308 annotations:

307 summary: "编排器 {{ $labels.pod }}:PollSpawnHints 失败({{ $value | humanize }}/s 超过 5m)"309 summary: "Orchestrator {{ $labels.pod }}: PollSpawnHints failing ({{ $value | humanize }}/s over 5m)"

308 - alert: ClaudeOrchestratorSpawnHookFailing310 - alert: ClaudeOrchestratorSpawnHookFailing

309 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3311 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3

310 for: 5m312 for: 5m

311 labels: {severity: warning}313 labels: {severity: warning}

312 annotations:314 annotations:

313 summary: "编排器 {{ $labels.pod }}:5 分钟内 >3 个 spawn-runner hook 失败"315 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

314```316```

315 317 

316### 针对丢失的运行器和等待中的会话发出警报318### 针对运行器丢失和会话等待进行告警

317 319 

318要在运行器丢失、会话等待或编排器停机时收到警报,请在[示例警报规则](#sample-alert-rules)之外加载以下 Prometheus 警报规则:320若要在运行器丢失、会话等待或编排器停机时收到告警,请在[示例告警规则](#sample-alert-rules)之外加载以下 Prometheus 告警规则:

319 321 

320* **[固定舰队](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#scale-the-fleet)**:`ClaudeRunnersBelowFloor`322* **[固定机群](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#scale-the-fleet)**:`ClaudeRunnersBelowFloor`

321* **[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)**:`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 和 `ClaudeOrchestratorAbsent`323* **[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)**:`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 和 `ClaudeOrchestratorAbsent`

322 324 

323#### 固定舰队丢失运行器时发出警报325#### 固定机群丢失运行器时告警

324 326 

325当剩余的已注册且已被抓取的运行器数量低于下限并持续 10 分钟时,`ClaudeRunnersBelowFloor` 会触发:327当已注册且被抓取的运行器数量低于下限并持续 10 分钟时,`ClaudeRunnersBelowFloor` 会触发:

326 328 

327```yaml theme={null}329```yaml theme={null}

328groups:330groups:

329 # 仅适用于固定舰队。使用按需运行器时,计数随需求变化,331 # 仅适用于固定机群。对于按需运行器,数量随需求变化,

330 # 因此 ClaudeRunnersBelowFloor 会在需求较低时触发。332 # 因此每当需求较低时 ClaudeRunnersBelowFloor 都会触发。

331 - name: claude-code-self-hosted-fixed-fleet-capacity333 - name: claude-code-self-hosted-fixed-fleet-capacity

332 rules:334 rules:

333 - alert: ClaudeRunnersBelowFloor335 - alert: ClaudeRunnersBelowFloor


335 for: 10m337 for: 10m

336 labels: {severity: critical, namespace: claude-runners}338 labels: {severity: critical, namespace: claude-runners}

337 annotations:339 annotations:

338 summary: "已注册并被抓取的运行器:{{ $value }},低于下限。请先检查运行器工作负载,如果全部在运行,再检查抓取目标。"340 summary: "Runners registered and scraped: {{ $value }}, below the floor. Check the runner workloads first, then the scrape targets if all are running."

339```341```

340 342 

341* **下限**:将 `expr` 中的 `2` 设置为副本数的一半左右,向上取整。有三个副本时保留 `2`,当只剩一个运行器或没有运行器时警报会触发。343* **下限**:将 `expr` 中的 `2` 设置为副本数的一半左右,向上取整。如果有三个副本,则保留 `2`,当只剩一个运行器或没有运行器时告警会触发。

342* **命名空间**:替换匹配器中和 `labels` 中的 `claude-runners`,并为每个其他命名空间复制该警报。如果您的目标没有 `namespace` 标签,请删除该匹配器和该标签,否则警报读数为 0 并触发。344* **命名空间**:替换匹配器和 `labels` 中的 `claude-runners`,并为每个其他命名空间复制该告警。如果您的目标没有 `namespace` 标签,请删除该匹配器和该标签,否则告警会读取到 0 并触发。

343* **`ClaudeRunnerPollStale` 和 `ClaudeRunnerPollErrors`**:保持从[示例警报规则](#sample-alert-rules)中加载它们,因为 `ClaudeRunnersBelowFloor` 仍会计入无法轮询的运行器345* **`ClaudeRunnerPollStale` 和 `ClaudeRunnerPollErrors`**:请保持从[示例告警规则](#sample-alert-rules)中加载它们,因为 `ClaudeRunnersBelowFloor` 仍会将无法轮询的运行器计入在内

344 346 

345#### 会话等待按需运行器时发出警报347#### 会话等待按需运行器时告警

346 348 

347当等待运行器的会话数持续 10 分钟高于 0 时,`ClaudeOrchestratorSessionsWaiting` 会触发。当过去 10 分钟内超过 1% 的队列等待超过 160 秒,且该情况持续 5 分钟时,`ClaudeOrchestratorQueueWaitHigh` 会触发:349当等待运行器的会话数保持在 0 以上并持续 10 分钟时,`ClaudeOrchestratorSessionsWaiting` 会触发。当过去 10 分钟内超过 1% 的队列等待超过 160 秒,并且该情况持续 5 分钟时,`ClaudeOrchestratorQueueWaitHigh` 会触发:

348 350 

349```yaml theme={null}351```yaml theme={null}

350groups:352groups:


361 for: 10m363 for: 10m

362 labels: {severity: warning}364 labels: {severity: warning}

363 annotations:365 annotations:

364 summary: "等待运行器的会话:{{ $value }},已连续 10 分钟高于阈值。请按 result 检查 claude_code_self_hosted_orchestrator_spawn_hooks_total,然后检查未能启动的运行器工作负载。"366 summary: "Sessions waiting for a runner: {{ $value }}, above the threshold for 10 minutes. Check claude_code_self_hosted_orchestrator_spawn_hooks_total by result, then runner workloads that don't start."

365 - alert: ClaudeOrchestratorQueueWaitHigh367 - alert: ClaudeOrchestratorQueueWaitHigh

366 expr: |368 expr: |

367 histogram_quantile(0.99, sum by (namespace, le) (369 histogram_quantile(0.99, sum by (namespace, le) (


370 for: 5m372 for: 5m

371 labels: {severity: warning}373 labels: {severity: warning}

372 annotations:374 annotations:

373 summary: "过去 10 分钟内超过 1% 的队列等待超过 160 秒。请检查 ClaudeOrchestratorDisconnected 是否正在触发,然后按 result 检查 claude_code_self_hosted_orchestrator_spawn_hooks_total 以及 claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds。"375 summary: "Over 1% of queue waits in the last 10 minutes exceeded 160 seconds. Check whether ClaudeOrchestratorDisconnected is firing, then claude_code_self_hosted_orchestrator_spawn_hooks_total by result and claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

374```376```

375 377 

376* **阈值**:如果始终有会话在等待,请将 `ClaudeOrchestratorSessionsWaiting` 中的 `> 0` 提高到您通常看到的数值之上378* **阈值**:如果始终有某个会话在等待,请将 `ClaudeOrchestratorSessionsWaiting` 中的 `> 0` 提高到您通常看到的数量以上

377* **`ClaudeOrchestratorDisconnected`**:保持从[示例警报规则](#sample-alert-rules)中加载它,因为在命名空间中最后一个编排器断开连接约 2 分钟后,`ClaudeOrchestratorSessionsWaiting` 会停止触发379* **`ClaudeOrchestratorDisconnected`**:请保持从[示例告警规则](#sample-alert-rules)中加载它,因为在命名空间中最后一个编排器断开连接约 2 分钟后,`ClaudeOrchestratorSessionsWaiting` 就会停止触发

378 380 

379#### 编排器停机时发出警报381#### 编排器停机时告警

380 382 

381要获知[编排器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)本身已停机,请加载 `ClaudeOrchestratorAbsent`。当命名空间中没有任何编排器被抓取并持续 5 分钟时,它会触发:383若要得知[编排器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)本身已停机,请加载 `ClaudeOrchestratorAbsent`。当命名空间中没有任何编排器被抓取并持续 5 分钟时,它会触发:

382 384 

383```yaml theme={null}385```yaml theme={null}

384groups:386groups:

385 # 仅适用于按需运行器。请将 claude-runners 替换为编排器所在的命名空间。387 # 仅适用于按需运行器。请将 claude-runners 替换为编排器的命名空间。

386 - name: claude-code-self-hosted-on-demand-orchestrator388 - name: claude-code-self-hosted-on-demand-orchestrator

387 rules:389 rules:

388 - alert: ClaudeOrchestratorAbsent390 - alert: ClaudeOrchestratorAbsent


390 for: 5m392 for: 5m

391 labels: {severity: critical}393 labels: {severity: critical}

392 annotations:394 annotations:

393 summary: "已有 5 分钟没有抓取到任何编排器。如果它已停机,则不会启动任何按需运行器,会话将处于等待状态。请先检查编排器工作负载,如果它在运行,再检查其抓取目标。"395 summary: "No orchestrator has been scraped for 5 minutes. If it's down, no on-demand runner starts, and sessions wait. Check the orchestrator workload first, then its scrape target if it's running."

394```396```

395 397 

396* **命名空间**:将 `claude-runners` 替换为编排器所在的命名空间,并为每个其他运行编排器的命名空间复制该警报。如果您的目标没有 `namespace` 标签,请删除该匹配器,否则警报会在 5 分钟后触发并持续保持。398* **命名空间**:将 `claude-runners` 替换为编排器的命名空间,并为每个运行编排器的其他命名空间复制该告警。如果您的目标没有 `namespace` 标签,请删除该匹配器,否则告警会在 5 分钟后触发并一直保持。

397* **不抓取编排器的 Prometheus 服务器**:请勿将该警报放入这些服务器的规则文件中,因为在此类服务器上它会在 5 分钟后触发并持续保持399* **不抓取编排器的 Prometheus 服务器**:请不要将该告警放入它们的规则文件中,因为在这类服务器上它会在 5 分钟后触发并一直保持

398* **不要依赖编排器的其他警报**:它们读取的是编排器自身提供的指标。在编排器停机后约 10 分钟内,`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 以及编排器的[示例警报规则](#sample-alert-rules)都会停止触发。400* **不要依赖编排器的其他告警**:它们读取的是编排器自身提供的指标。在编排器停机后约 10 分钟内,`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 以及编排器的[示例告警规则](#sample-alert-rules)都会停止触发。

399 401 

400### 传递会话子进程指标402### 透传会话子进程指标

401 403 

402每个会话在其自己的子进程中运行,具有自己的 OpenTelemetry 指标;在 `--capacity` 高于 1 时,运行器重写这些子指标的公开方式。在运行器主机上设置 `OTEL_METRICS_EXPORTER=prometheus` 和会话环境中的 `CLAUDE_CODE_ENABLE_TELEMETRY=1`(例如从您的[包装脚本](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#wrapper-scripts)或运行器自己的环境,会话继承),重新公开每个子进程的计数器和仪表工具在运行器自己的 `/metrics` 端点上,与运行器的系列一起。运行器将子进程的导出器重写为通过 OTLP 推送到健康端口上的仅环回接收器,用 `session_id` 和 `client_platform` 标签标记每个系列,并在该会话结束时驱逐会话的系列。直方图不通过,子指标名称与运行器自己的前缀冲突的会被删除。404每个会话都在其自己的子进程中运行,并拥有自己的 OpenTelemetry 指标;当 `--capacity` 大于 1 时,运行器会改写这些子进程指标的暴露方式。在运行器主机上设置 `OTEL_METRICS_EXPORTER=prometheus`,并在会话的环境中设置 `CLAUDE_CODE_ENABLE_TELEMETRY=1`(例如通过您的[包装脚本](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#wrapper-scripts)或运行器自身的环境,会话会继承该环境),即可在运行器自身的 `/metrics` 端点上与运行器的序列一起重新暴露每个子进程的计数器和仪表类指标。运行器会改写子进程的导出器,使其通过 OTLP 推送到健康端口上仅限环回的接收器,为每个序列添加 `session_id` 和 `client_platform` 标签,并在会话结束时清除该会话的序列。直方图不会透传,名称会与运行器自身前缀冲突的子进程指标将被丢弃。

403 405 

404在默认 `--capacity 1` 处,重写不适用:会话的子进程照常在端口 9464 上绑定自己的 Prometheus 端点。406在默认的 `--capacity 1` 下,不会进行这种改写:会话的子进程照常在端口 9464 上绑定自己的 Prometheus 端点。

405 407 

406#### 将会话的指标与运行器的指标关联408#### 将会话指标与运行器指标关联

407 409 

408要查看空闲会话产生了多少成本,请基于 `ccr_session_id` 将运行器的 `claude_code_self_hosted_runner_session_idle_seconds` 与 Claude Code 的成本指标关联。运行器的指标不携带该标签,因此请使用 `label_replace` 为其添加一个,如以下查询所示:410若要查看空闲会话产生的成本,请在 `ccr_session_id` 上将运行器的 `claude_code_self_hosted_runner_session_idle_seconds` 与 Claude Code 的成本指标关联。运行器的指标不带该标签,因此请使用 `label_replace` 为其添加一个,如以下查询所示:

409 411 

410```text theme={null}412```text theme={null}

411sum by (ccr_session_id) (claude_code_cost_usage_total)413sum by (ccr_session_id) (claude_code_cost_usage_total)


416)418)

417```419```

418 420 

419该查询为每个空闲超过十分钟的会话返回一个结果:即其 Claude Code 进程迄今为止统计的以美元计的成本。要关联其他 Claude Code 指标,请替换查询中的 `claude_code_cost_usage_total`。该查询在任何 `--capacity` 下都有效。421该查询为每个空闲超过十分钟的会话返回一个结果:其 Claude Code 进程迄今为止统计的以美元计的成本。若要关联其他 Claude Code 指标,请替换查询中的 `claude_code_cost_usage_total`。该查询适用于任何 `--capacity`。

420 422 

421* **`session_id`**:在端口 9464 上,Claude Code 指标上的该标签保存的是 Claude Code 自己的 [`session.id`](https://code.claude.com/docs/zh-CN/monitoring-usage#standard-attributes),它不与任何运行器系列匹配。基于它进行关联不会返回任何结果,因此请基于 `ccr_session_id` 进行关联。423* **`session_id`**:在端口 9464 上,Claude Code 指标中的该标签保存的是 Claude Code 自己的 [`session.id`](https://code.claude.com/docs/zh-CN/monitoring-usage#standard-attributes),它不与任何运行器序列匹配。基于它进行关联不会返回任何结果,因此请基于 `ccr_session_id` 进行关联。

422* **Claude Code 指标没有 `ccr_session_id`**:请检查 [`OTEL_METRICS_INCLUDE_SESSION_ID`](https://code.claude.com/docs/zh-CN/monitoring-usage#metrics-cardinality-control) 是否被设置为 `false`424* **Claude Code 指标没有 `ccr_session_id`**:请检查 [`OTEL_METRICS_INCLUDE_SESSION_ID`](https://code.claude.com/docs/zh-CN/monitoring-usage#metrics-cardinality-control) 是否未设置为 `false`

423 425 

424### 会话生命周期计数器语义426### 会话生命周期计数器语义

425 427 

426`sessions_started_total`、`sessions_completed_total`、`sessions_failed_total` 和 `sessions_interrupted_total` 计数器按会话如何结束对其进行分类。每个生成的会话子进程在生成时增加 `sessions_started_total`,并且在退出时恰好增加其他三个中的一个,因此 `sessions_started_total` 减去其他三个的总和等于当前运行的会话子进程数。428`sessions_started_total`、`sessions_completed_total`、`sessions_failed_total` 和 `sessions_interrupted_total` 计数器根据每个会话的结束方式对其进行分类。每个生成的会话子进程都会在生成时递增 `sessions_started_total`,并在退出时恰好递增其他三个计数器中的一个,因此 `sessions_started_total` 减去其他三个计数器之和即等于当前正在运行的会话子进程数。

427 429 

428* `completed`:会话干净结束。这涵盖子进程以代码 `0` 自行退出、会话在子进程仍连接时被存档或删除,以及运行器干净地交还槽:在空闲超时、退休时间或 `--kill-session-after-min` 限制处释放会话;启动超时;或轮询循环在子进程退出前注意到的服务器端取消分配。增加 `sessions_completed_total`。430* `completed`:会话正常结束。这包括子进程以代码 `0` 自行退出、会话在子进程仍处于连接状态时被归档或删除,以及运行器正常交还槽位:在空闲超时、退役时间或 `--kill-session-after-min` 限制时释放会话;启动超时;或轮询循环在子进程退出前注意到服务器端取消分配。递增 `sessions_completed_total`。

429* `failed`:子进程以非零代码自行退出,要么是崩溃,要么是生成后的设置失败。增加 `sessions_failed_total`。431* `failed`:子进程以非零代码自行退出,可能是崩溃,也可能是生成后的设置失败。递增 `sessions_failed_total`。

430* `interrupted`:运行器因既不是会话成功也不是运行器故障的操作原因终止子进程,例如排空,或终止在 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 宽限期结束时仍在运行器上的会话,在其 `--kill-session-after-min` 限制之后。Kubernetes 滚动重启发送 `SIGTERM` 是排空的一个示例。增加 `sessions_interrupted_total`。432* `interrupted`:运行器出于既非会话成功也非运行器故障的运维原因终止了子进程,例如排空,或者在会话的 `--kill-session-after-min` 限制之后的 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 宽限期结束时,终止仍在运行器上的会话。Kubernetes 滚动重启发送 `SIGTERM` 就是排空的一个例子。递增 `sessions_interrupted_total`。

431 433 

432在 v2.1.260 之前,运行器终止达到其 `--kill-session-after-min` 限制的每个会话,并在 `sessions_interrupted_total` 中计数。434在 v2.1.260 之前,运行器会终止每个达到其 `--kill-session-after-min` 限制的会话,并将其计入 `sessions_interrupted_total`。

433 435 

434[`post-session` 钩子](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session)的 `CLAUDE_RUNNER_EXIT_REASON` 以不同方式分类干净交接。钩子将以下情况报告为 `interrupted`,因为运行器停止了子进程:释放、启动超时、服务器取消分配,以及轮询先注意到的存档或删除。这些计数器记录与 `completed` 相同的事件,因为槽被干净地交还。436[`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session) 的 `CLAUDE_RUNNER_EXIT_REASON` 对正常交接的分类方式不同。该 hook 将以下情况报告为 `interrupted`,因为是运行器停止了子进程:释放、启动超时、服务器取消分配,以及轮询先注意到的归档或删除。这些计数器则将相同的事件记录为 `completed`,因为槽位已被正常交还。

435 437 

436如果您直接根据 `sessions_completed_total` 协调钩子收据,您会低估完成。对每个会话保证使用钩子,对聚合速率使用计数器。438如果您直接将 hook 回执与 `sessions_completed_total` 进行核对,会少计完成数。请使用 hook 获取针对每个会话的保证,使用计数器获取聚合速率。

437 439 

438在一次性环境中,`--capacity 1` 与默认 `--drain-grace-sec 0`,每个运行器进程在其一个会话结束后片刻退出。`sessions_completed_total`、`sessions_failed_total` 和 `sessions_interrupted_total` 仅在会话结束时增加,在该退出之前,因此每 15 到 60 秒轮询一次 Prometheus 很少在运行器的系列消失前捕获增加;这三个会话结束计数器是本节其余部分所指的终端计数器。`sessions_started_total` 在生成时增加并在会话的生命周期内保持可见,因此它可靠地显示,但在一次性环境中它读取更接近"当前运行的会话"而不是累积计数。440在一次性环境中,即 `--capacity 1` 并使用默认的 `--drain-grace-sec 0`,每个运行器进程会在其唯一的会话结束后片刻退出。`sessions_completed_total`、`sessions_failed_total` 和 `sessions_interrupted_total` 仅在会话结束时(即该退出之前)递增,因此每 15 到 60 秒一次的 Prometheus 抓取很少能在运行器的序列消失之前捕获到该递增;这三个会话结束计数器就是本节其余部分所说的终结计数器。`sessions_started_total` 在生成时递增,并在会话的整个生命周期内保持可见,因此能可靠地出现,但在一次性环境中,它的含义更接近"当前正在运行的会话",而不是累计计数。

439 441 

440对应目标使用此表中的系列而不是终端计数器:442请针对相应的目标使用此表中的序列,而不是终结计数器:

441 443 

442| 目标 | 使用 |444| 目标 | 使用 |

443| :- | :- |445| :- | :- |

444| 吞吐量 | `claude_code_self_hosted_orchestrator_spawn_hooks_total{result="ok"}`,长期编排器上的计数器,每个成功的 `spawn-runner` 钩子增加一次,在 `rate()` 下保持有意义。它计数钩子调用而不是会话,因此预热和为同一会话重复生成使其与会话计数分散。 |446| 吞吐量 | `claude_code_self_hosted_orchestrator_spawn_hooks_total{result="ok"}`,这是长期运行的编排器上的计数器,每次 `spawn-runner` hook 成功时递增一次,在 `rate()` 下仍保持有意义。它统计的是 hook 调用次数而不是会话数,因此预热和为同一会话重复生成会使其与会话计数产生偏差。 |

445| 利用率 | `sum(claude_code_self_hosted_runner_active_sessions)` 对 `sum(claude_code_self_hosted_runner_capacity)`,两个仪表在每次抓取时有效,无论运行器生命周期如何 |447| 利用率 | `sum(claude_code_self_hosted_runner_active_sessions)` 与 `sum(claude_code_self_hosted_runner_capacity)` 之比,两者都是仪表,无论运行器生命周期如何,在每次抓取时都有效 |

446| 积压 | `claude_code_self_hosted_orchestrator_pool_pending_sessions` 用于队列深度,以及 `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions`,如果高于零则发出警报 |448| 积压 | `claude_code_self_hosted_orchestrator_pool_pending_sessions` 用于队列深度,以及 `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions`,高于零时告警 |

447| 失败 | `claude_code_self_hosted_runner_sessions_failed_total`,尽力而为:生成后的真实崩溃确实增加它,`rate()` 在运行器上有意义,这些运行器以 `--drain-grace-sec` 高于 `0` 的方式超过其会话。一次性环境与其他终端计数器具有相同的抓取窗口问题,因此将您看到的任何非零值视为值得调查。生成前的失败,例如 checkout 钩子失败、git 准备或令牌问题,仅出现在 `session_init_errors_total` 中。 |449| 失败 | `claude_code_self_hosted_runner_sessions_failed_total`,尽力而为:生成后的真实崩溃确实会使其递增,并且在 `--drain-grace-sec` 大于 `0`、运行器比其会话存活更久的情况下,`rate()` 是有意义的。一次性环境存在与其他终结计数器相同的抓取窗口问题,因此您看到的任何非零值都值得调查。生成之前的失败,例如 checkout hook 失败、git 准备或令牌问题,仅出现在 `session_init_errors_total` 中。 |

448 450 

449`orchestrator_*` 行仅存在于运行[按需编排器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)的环境中。在固定舰队上,其运行器以 `--drain-grace-sec` 高于 `0` 的方式超过其会话,对吞吐量使用 `sum(rate(claude_code_self_hosted_runner_sessions_started_total[5m]))`;在一次性舰队上,该系列与终端计数器具有相同的抓取窗口问题,因此依赖排队会话计数。在环境的**活动**选项卡上检查积压,在[**云环境**管理页面](https://claude.ai/admin-settings/cloud-environments)上:运行器不导出队列深度系列。451`orchestrator_*` 行仅存在于运行[按需编排器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)的环境中。在运行器比其会话存活更久的固定机群上(`--drain-grace-sec` 大于 `0`),请使用 `sum(rate(claude_code_self_hosted_runner_sessions_started_total[5m]))` 衡量吞吐量;在一次性机群上,该序列存在与终结计数器相同的抓取窗口问题,因此请改为依赖排队会话计数。请在 [**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上该环境的 **Activity** 选项卡中检查积压情况:运行器不导出队列深度序列。

450 452 

451对于每个会话结果报告,改为使用 [`post-session` 钩子](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session):它在每个会话结束处触发,其中生成了子进程,除了突然的运行器终止(例如 VM 抢占),根据[钩子自己的合同](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#post-session)。453如需按会话报告结果,请改用 [`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session):根据 [hook 自身的约定](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#post-session),除了运行器被突然终止(例如 VM 抢占)之外,它会在每个生成了子进程的会话结束时触发。

452 454 

453## 接下来455## 接下来

454 456 

Details

12 12 

13在[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)中,Claude Code [云会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)在您构建和维护的运行器镜像上运行。在将新镜像推送到生产环境之前,从脚本对测试环境驱动完整会话:创建会话、读取 Claude 的回复、发送后续问题,并读取该回复。这是 CI 烟雾测试的形式,用于验证您的运行器镜像、git 访问和任何自定义工具,然后再推广更改。13在[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)中,Claude Code [云会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)在您构建和维护的运行器镜像上运行。在将新镜像推送到生产环境之前,从脚本对测试环境驱动完整会话:创建会话、读取 Claude 的回复、发送后续问题,并读取该回复。这是 CI 烟雾测试的形式,用于验证您的运行器镜像、git 访问和任何自定义工具,然后再推广更改。

14 14 

15此方案假设您已经[设置了环境和运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-quickstart.md#set-up-an-environment-and-runner),并且您的 CI 作业在与测试脚本相同的主机上启动运行器进程,这是测试新运行器镜像的自然设置。您在运行器上安装的 Stop hook 将每个回合的最终回复写入本地文件,脚本从那里读取它,因此对 Anthropic API 的唯一调用是两个分派本身。如果您的测试运行器在单独的基础设施上,请参阅[远程测试运行器](#remote-test-runners)。15此方案假设您已经[设置了环境和运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-quickstart.md#set-up-an-environment-and-runner),并且您的 CI 作业在与测试脚本相同的主机上启动运行器进程。您在运行器上安装的 Stop hook 将每个轮次的最终回复写入本地文件,脚本从那里读取它。如果您的测试运行器在单独的基础设施上,请参阅[远程测试运行器](#remote-test-runners)。

16 16 

17## 在测试运行器上安装捕获 hook17## 在测试运行器上安装捕获 hook

18 18 

Details

62 62 

63Hooks 使用与 `settings.json` 中相同的格式。63Hooks 使用与 `settings.json` 中相同的格式。

64 64 

65此示例在整个组织中每次文件编辑后运行审计脚本:65此示例在整个组织中每次 `Edit` 和 `Write` 工具调用后运行审计脚本:

66 66 

67```json theme={null}67```json theme={null}

68{68{


95 95 

96要确认设置正在被应用,请要求用户重新启动 Claude Code。如果配置包含触发[安全批准对话框](#security-approval-dialogs)的设置,用户会在 Claude Code 下次获取它们时看到描述托管设置的提示:在下次启动时,或在运行的交互式会话中的一小时内。您还可以通过让用户运行 `/permissions` 来验证托管权限规则是否处于活动状态,以查看其有效的权限规则。96要确认设置正在被应用,请要求用户重新启动 Claude Code。如果配置包含触发[安全批准对话框](#security-approval-dialogs)的设置,用户会在 Claude Code 下次获取它们时看到描述托管设置的提示:在下次启动时,或在运行的交互式会话中的一小时内。您还可以通过让用户运行 `/permissions` 来验证托管权限规则是否处于活动状态,以查看其有效的权限规则。

97 97 

98在会话中,请让用户运行 `/status`。当服务器管理的设置生效时,[`Setting sources` 行](https://code.claude.com/docs/zh-CN/managed-settings#read-the-source-in-/status)会列出 `Enterprise managed settings`,并在括号中注明 `remote`。

99 

98要检查特定机器上的获取结果,请让用户运行 `claude doctor` 并读取 `Managed settings (remote)` 行。需要 Claude Code v2.1.248 或更高版本。该行报告以下四种结果之一:100要检查特定机器上的获取结果,请让用户运行 `claude doctor` 并读取 `Managed settings (remote)` 行。需要 Claude Code v2.1.248 或更高版本。该行报告以下四种结果之一:

99 101 

100* 传递的设置已加载102* 传递的设置已加载


247* 如果网关对有人值守的交互式启动返回 `401`,且此设置处于关闭状态,则表示网关已结束该登录。Claude Code 会打印 [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/zh-CN/errors#cloud-gateway-session-expired),并在用户运行 `/login` 之前以未登录网关的状态打开会话。249* 如果网关对有人值守的交互式启动返回 `401`,且此设置处于关闭状态,则表示网关已结束该登录。Claude Code 会打印 [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/zh-CN/errors#cloud-gateway-session-expired),并在用户运行 `/login` 之前以未登录网关的状态打开会话。

248* 当获取以任何其他方式失败时,或在除 `claude auth` 子命令之外的任何其他类型的启动中,客户端会报错退出。250* 当获取以任何其他方式失败时,或在除 `claude auth` 子命令之外的任何其他类型的启动中,客户端会报错退出。

249 251 

250当此设置在获取服务器托管设置的会话中生效时,CLI 会在启动时阻塞,直到重新获取远程设置。如果获取失败,CLI 会退出,而不是在没有策略的情况下继续。此设置具有自我延续性:一旦从服务器下发,它也会被缓存到本地,这样后续启动即使在新会话首次成功获取之前也会执行相同的行为。[不获取服务器托管设置](#platform-availability)的会话会直接启动,无需等待。252当此设置在获取服务器托管设置的会话中生效时,CLI 会在启动时阻塞,直到重新获取远程设置。如果获取失败,CLI 会退出,而不是在没有策略的情况下继续。[不获取服务器托管设置](#platform-availability)的会话会直接启动,无需等待。

251 253 

252要启用此功能,请将该键添加到您的托管设置配置中:254要启用此功能,请将该键添加到您的托管设置配置中:

253 255 


259 261 

260您也可以在[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)的 MDM 配置描述文件或系统 `managed-settings.json` 文件中设置此键,以便在任何服务器负载到达之前、在首次启动时就执行失败即关闭的行为。此标志是上述[优先级规则](#settings-precedence)的一个例外:当任何由管理员控制的托管来源设置了它时,即使同时存在缓存的服务器托管负载,Claude Code 也会遵循它,因此当存在服务器托管设置时,它不会忽略通过 MDM 下发的值。262您也可以在[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)的 MDM 配置描述文件或系统 `managed-settings.json` 文件中设置此键,以便在任何服务器负载到达之前、在首次启动时就执行失败即关闭的行为。此标志是上述[优先级规则](#settings-precedence)的一个例外:当任何由管理员控制的托管来源设置了它时,即使同时存在缓存的服务器托管负载,Claude Code 也会遵循它,因此当存在服务器托管设置时,它不会忽略通过 MDM 下发的值。

261 263 

264在后续启动时,Claude Code 会从缓存的设置中读取服务器下发的值,因此该设置在新会话首次获取之前就已生效。要在不依赖缓存副本的情况下保持该设置生效,请同时在端点托管来源中设置此键。

265 

262当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,对于 Claude Code 在启动后读取的键,其输出会取代所有其他托管来源。有关 Claude Code 从哪些来源读取此键,请参阅[其设置条目](https://code.claude.com/docs/zh-CN/settings-reference.md#forceremotesettingsrefresh)。`policyHelper` 条目说明了 Claude Code 从哪些来源读取该 helper 以及它何时运行。266当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,对于 Claude Code 在启动后读取的键,其输出会取代所有其他托管来源。有关 Claude Code 从哪些来源读取此键,请参阅[其设置条目](https://code.claude.com/docs/zh-CN/settings-reference.md#forceremotesettingsrefresh)。`policyHelper` 条目说明了 Claude Code 从哪些来源读取该 helper 以及它何时运行。

263 267 

264设置获取还会发送 `Cache-Control: no-cache` 标头,以防止中间 HTTP 代理返回过期的响应。268设置获取还会发送 `Cache-Control: no-cache` 标头,以防止中间 HTTP 代理返回过期的响应。

settings.md +2 −2

Details

66 66 

67### 与团队共享设置67### 与团队共享设置

68 68 

69提交 `.claude/settings.json`,以便克隆仓库的每个人都获得相同的权限、hook 和插件。每位队友仍可以在自己的 `.claude/settings.local.json` 中为自己覆盖它,因此个人例外无需提交。有关完整的团队文件,请参阅[团队的共享设置](https://code.claude.com/docs/zh-CN/settings-example.md#a-teams-shared-settings)。69提交 `.claude/settings.json`,以便克隆仓库的每个人都获得相同的权限、hook 和插件设置。每位队友仍可以在自己的 `.claude/settings.local.json` 中为自己覆盖它,因此个人例外无需提交。有关完整的团队文件,请参阅[团队的共享设置](https://code.claude.com/docs/zh-CN/settings-example.md#a-teams-shared-settings)。

70 70 

71您提交的部分内容要等到每位队友[信任该文件夹](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)后才会生效,还有少数键永远不会从仓库文件中生效;[排查不生效的设置](#common-cases)涵盖了这两种情况。71您提交的部分内容要等到每位队友[信任该文件夹](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)后才会生效,还有少数键永远不会从仓库文件中生效;[排查不生效的设置](#common-cases)涵盖了这两种情况。

72 72 


199* **设置错误**:用户、项目或本地文件有无效的 JSON 或架构拒绝的值。在交互式会话启动时,Claude Code 显示一个对话框,让您在 Claude 的帮助下修复文件、退出,或在不加载这些损坏设置的情况下继续。199* **设置错误**:用户、项目或本地文件有无效的 JSON 或架构拒绝的值。在交互式会话启动时,Claude Code 显示一个对话框,让您在 Claude 的帮助下修复文件、退出,或在不加载这些损坏设置的情况下继续。

200* **设置警告**:仅单个条目失败,如格式错误的权限规则或未知的 hook 事件名称。Claude Code 跳过这些值并保持文件的其余部分生效。200* **设置警告**:仅单个条目失败,如格式错误的权限规则或未知的 hook 事件名称。Claude Code 跳过这些值并保持文件的其余部分生效。

201* **托管设置**:Claude Code 继续强制执行文件的其余部分。[托管设置中的无效条目](https://code.claude.com/docs/zh-CN/managed-settings.md#invalid-entries-in-managed-settings)说明它删除什么以及哪些键回退到更严格的值,直到您修复它们。对于不是有效 JSON 的托管设置文档,请参阅[托管设置文档无法解析](https://code.claude.com/docs/zh-CN/errors.md#managed-settings-document-could-not-be-parsed)。201* **托管设置**:Claude Code 继续强制执行文件的其余部分。[托管设置中的无效条目](https://code.claude.com/docs/zh-CN/managed-settings.md#invalid-entries-in-managed-settings)说明它删除什么以及哪些键回退到更严格的值,直到您修复它们。对于不是有效 JSON 的托管设置文档,请参阅[托管设置文档无法解析](https://code.claude.com/docs/zh-CN/errors.md#managed-settings-document-could-not-be-parsed)。

202* **配置错误**:[`~/.claude.json`](https://code.claude.com/docs/zh-CN/claude-directory#ce-claude-json) 无法解析。`claude -p` 运行会退出,您的文件保持不变。请参阅 [Configuration error in \~/.claude.json](https://code.claude.com/docs/zh-CN/errors.md#configuration-error-in-claude-json) 以恢复较早的副本。Claude Code 将损坏的文件复制到 `~/.claude/backups/.claude.json.corrupted.<timestamp>`,并在交互式会话中询问是退出并修复它,还是重置为默认配置。当文件为空且没有可恢复的备份时,Claude Code 以默认设置启动。202* **配置错误**:[`~/.claude.json`](https://code.claude.com/docs/zh-CN/claude-directory#ce-claude-json) 无法解析。`claude -p` 运行会退出。请参阅 [Configuration error in \~/.claude.json](https://code.claude.com/docs/zh-CN/errors.md#configuration-error-in-claude-json) 以恢复较早的副本。Claude Code 将损坏的文件复制到 `~/.claude/backups/.claude.json.corrupted.<timestamp>`,并在交互式会话中询问是退出并修复它,还是重置为默认配置。当文件为空且没有可恢复的备份时,Claude Code 以默认设置启动。

203 203 

204在您继续后,运行 `/status` 以查看受影响的文件,`claude doctor` 以查看每个错误的详情。204在您继续后,运行 `/status` 以查看受影响的文件,`claude doctor` 以查看每个错误的详情。

205 205 

skills.md +1 −1

Details

22 22 

23Claude Code 包含一组捆绑技能,例如 `/doctor`、`/code-review`、`/batch`、`/debug`、`/loop` 和 `/claude-api`。捆绑技能是基于提示的:它们为 Claude 提供详细的指令,让它使用其工具来协调工作。大多数内置命令则直接执行固定逻辑。23Claude Code 包含一组捆绑技能,例如 `/doctor`、`/code-review`、`/batch`、`/debug`、`/loop` 和 `/claude-api`。捆绑技能是基于提示的:它们为 Claude 提供详细的指令,让它使用其工具来协调工作。大多数内置命令则直接执行固定逻辑。

24 24 

25您调用捆绑技能的方式与调用任何其他技能相同,即输入 `/` 后跟技能名称。Claude 在相关时会自动调用某些捆绑技能;其他技能(包括 `/verify`)仅在您调用它们时运行,这样可以让您控制这些耗时较长的检查何时花费时间和令牌。25输入 `/` 后跟 skill 名称即可调用随附 skill。Claude 在相关时会自动调用某些随附 skill;其他 skill(包括 [`/verify`](#run-and-verify-your-app))仅在您调用它们时运行。

26 26 

27大多数捆绑技能在每个会话中都可用。少数技能取决于特定功能:例如,`/workflow-authoring` 仅在[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md)启用时可用。27大多数捆绑技能在每个会话中都可用。少数技能取决于特定功能:例如,`/workflow-authoring` 仅在[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md)启用时可用。

28 28 

Details

346 346 

347Claude Code 将每个 `[Pasted text #N]` 占位符后面的内容保存在 `~/.claude/paste-cache/` 下,因此当您从[命令历史](https://code.claude.com/docs/zh-CN/interactive-mode.md#command-history)中调用提示并重新提交时,完整的粘贴内容会再次发送,包括在后续会话中。347Claude Code 将每个 `[Pasted text #N]` 占位符后面的内容保存在 `~/.claude/paste-cache/` 下,因此当您从[命令历史](https://code.claude.com/docs/zh-CN/interactive-mode.md#command-history)中调用提示并重新提交时,完整的粘贴内容会再次发送,包括在后续会话中。

348 348 

349早于 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#cleanupperioddays) 的缓存文件会根据[保留扫描规则](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically)被删除,因此调用的提示可能引用不再存在的粘贴文本。当您提交这样的提示时,Claude Code 永远不会发送字面上的 `[Pasted text #N]` 字符串,而是显示一个通知,命名缺失的粘贴:349早于 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-CN/settings-reference#cleanupperioddays) 的缓存文件会根据[保留扫描规则](https://code.claude.com/docs/zh-CN/claude-directory.md#cleaned-up-automatically)被删除,因此调出的提示词可能引用不再存在的粘贴文本。当您提交这样的提示词时,Claude Code 不会发送字面上的 `[Pasted text #N]` 字符串,而是显示一个通知,指明缺失的粘贴:

350 350 

351* 在包含剩余文本的纯提示中,Claude Code 移除占位符并发送剩余文本。351* 在包含剩余文本的纯提示中,Claude Code 移除占位符并发送剩余文本。

352* 在[shell 模式](https://code.claude.com/docs/zh-CN/interactive-mode.md#shell-mode-with-prefix)命令或 `/` 命令中,其中移除会改变运行内容,以及在任何移除会留下空白的提示中,Claude Code 取消提交并在输入中保留原始文本,占位符仍在其中。删除占位符或编辑命令,然后重新提交。352* 在[shell 模式](https://code.claude.com/docs/zh-CN/interactive-mode.md#shell-mode-with-prefix)命令或 `/` 命令中,其中移除会改变运行内容,以及在任何移除会留下空白的提示中,Claude Code 取消提交并在输入中保留原始文本,占位符仍在其中。删除占位符或编辑命令,然后重新提交。

Details

29| 安装期间 `EACCES: permission denied` | [修复安装目录的权限](#permission-errors-during-installation) |29| 安装期间 `EACCES: permission denied` | [修复安装目录的权限](#permission-errors-during-installation) |

30| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |30| `TLS connect error` 或 `SSL/TLS secure channel` | [更新 CA 证书](#tls-or-ssl-connection-errors) |

31| `CRYPT_E_NO_REVOCATION_CHECK` 或 `CRYPT_E_REVOCATION_OFFLINE` | [绕过被阻止的吊销检查](#tls-or-ssl-connection-errors) |31| `CRYPT_E_NO_REVOCATION_CHECK` 或 `CRYPT_E_REVOCATION_OFFLINE` | [绕过被阻止的吊销检查](#tls-or-ssl-connection-errors) |

32| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity) |32| `Failed to fetch version` 或无法访问下载服务器 | [检查网络和代理设置](#check-network-connectivity),如果是证书错误,请[配置企业 CA 证书](#tls-or-ssl-connection-errors) |

33| `The connection dropped while downloading the update` 或 `Download timed out: exceeded the total deadline` | [再次运行更新或设置您的代理](#the-connection-dropped-while-downloading-the-update) |33| `The connection dropped while downloading the update` 或 `Download timed out: exceeded the total deadline` | [再次运行更新或设置您的代理](#the-connection-dropped-while-downloading-the-update) |

34| `Release verification failed for Claude Code` | [再次运行 `claude update` 或 `claude install`](#release-verification-failed) |34| `Release verification failed for Claude Code` | [再次运行 `claude update` 或 `claude install`](#release-verification-failed) |

35| 会话页脚中以红色显示 `Auto-update failed · Run claude doctor` | [从您的 shell 运行 `claude update`](#auto-update-failed) |35| 会话页脚中以红色显示 `Auto-update failed · Run claude doctor` | [从您的 shell 运行 `claude update`](#auto-update-failed) |


94* `403`:通常是代理或网络过滤器阻止该主机,或 Claude Code [在您的地区不可用](https://www.anthropic.com/supported-countries)94* `403`:通常是代理或网络过滤器阻止该主机,或 Claude Code [在您的地区不可用](https://www.anthropic.com/supported-countries)

95* `5xx`:通常是临时服务问题;等待几分钟后重试95* `5xx`:通常是临时服务问题;等待几分钟后重试

96 96 

97如果您看不到任何输出、`Could not resolve host` 或连接超时,您的网络正在阻止连接。常见原因:97如果您看不到任何输出,或者安装程序显示 `Could not resolve host` 或连接超时,则表示连接失败,请检查以下原因:

98 98 

99* 企业防火墙或代理阻止 `downloads.claude.ai`99* 企业防火墙或代理阻止 `downloads.claude.ai`

100* 区域网络限制:尝试 VPN 或替代网络100* 区域网络限制:尝试 VPN 或替代网络

101* TLS/SSL 问题:更新您系统的 CA 证书,或检查是否配置了 `HTTPS_PROXY`101* TLS/SSL 问题:请参阅 [TLS 或 SSL 连接错误](#tls-or-ssl-connection-errors)

102 102 

103如果您在企业代理后面,在安装前设置 `HTTPS_PROXY` 和 `HTTP_PROXY` 为您的代理地址。如果您不知道代理 URL,请向您的 IT 团队询问,或检查您的浏览器代理设置。103如果您在企业代理后面,在安装前设置 `HTTPS_PROXY` 和 `HTTP_PROXY` 为您的代理地址。如果您不知道代理 URL,请向您的 IT 团队询问,或检查您的浏览器代理设置。

104 104 


566 irm https://claude.ai/install.ps1 | iex566 irm https://claude.ai/install.ps1 | iex

567 ```567 ```

568 568 

5693. **检查代理或防火墙干扰**:执行 TLS 检查的公司代理可能会导致这些错误,包括 `unable to get local issuer certificate` 和 `SELF_SIGNED_CERT_IN_CHAIN`。对于安装步骤,使安装下载信任您的公司代理的 CA:5693. **检查代理或防火墙干扰**:执行 TLS 检查的公司代理可能会导致这些错误,包括 `unable to get local issuer certificate`、`unable to verify the first certificate` 和 `SELF_SIGNED_CERT_IN_CHAIN`。使安装下载信任您的公司代理的 CA:

570 570 

571 > [tab] macOS/Linux571 > [tab] macOS/Linux

572 >572 >

573 > 为安装脚本的 `curl` 下载设置 `CURL_CA_BUNDLE`,并为脚本随后运行的 `claude install` 命令设置 [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/zh-CN/network-config#custom-ca-certificates)。如果您没有包含代理根 CA 证书的 PEM 文件,请向您的 IT 团队索取。此示例将两者都设置为您的代理的 CA 文件,并在同一终端中运行脚本:

574 >

573 > ```bash theme={null}575 > ```bash theme={null}

574 > curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash576 > export CURL_CA_BUNDLE=/path/to/corporate-ca.pem

577 > export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

578 > curl -fsSL https://claude.ai/install.sh | bash

575 > ```579 > ```

580 >

581 > 如果安装仍因上述证书错误之一而失败,请向您的 IT 团队索取同时包含公共根证书和代理完整 CA 链的文件。然后将这两个变量都设置为该文件。

576 582 

577 > [tab] Windows PowerShell583 > [tab] Windows PowerShell

578 >584 >


596 > $env:NODE_EXTRA_CA_CERTS = 'C:\path\to\corporate-ca.pem'602 > $env:NODE_EXTRA_CA_CERTS = 'C:\path\to\corporate-ca.pem'

597 > ```603 > ```

598 604 

599 如果您没有证书文件,请向您的 IT 团队索取。您也可以尝试直接连接来确认代理是原因。

600 

6014. **在 Windows 上,解决被阻止的撤销检查**。错误 `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` 和 `CRYPT_E_REVOCATION_OFFLINE (0x80092013)` 意味着 curl 到达了服务器,但您的网络阻止了证书撤销查询,这在公司防火墙后很常见。如果失败的命令是下载 `install.cmd` 的 `curl`,请从命令提示符重新运行它,添加 `--ssl-revoke-best-effort`:6054. **在 Windows 上,解决被阻止的撤销检查**。错误 `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` 和 `CRYPT_E_REVOCATION_OFFLINE (0x80092013)` 意味着 curl 到达了服务器,但您的网络阻止了证书撤销查询,这在公司防火墙后很常见。如果失败的命令是下载 `install.cmd` 的 `curl`,请从命令提示符重新运行它,添加 `--ssl-revoke-best-effort`:

602 ```batch theme={null}606 ```batch theme={null}

603 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd607 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd


610 614 

611### `Failed to fetch version from downloads.claude.ai`615### `Failed to fetch version from downloads.claude.ai`

612 616 

613安装程序无法访问下载服务器。这通常意味着 `downloads.claude.ai` 在您的网络上被阻止。请参阅[检查网络连接](#check-network-connectivity)。617消息末尾给出了原因。如果是证书错误,例如 `unable to verify the first certificate`,请参阅 [TLS 或 SSL 连接错误](#tls-or-ssl-connection-errors)。对于任何其他原因,请参阅[检查网络连接](#check-network-connectivity)。

614 618 

615### The connection dropped while downloading the update619### The connection dropped while downloading the update

616 620 

workflows.md +10 −4

Details

375 375 

376 在 v2.1.305 之前,如果您重新启动一个未经编辑的脚本,而该脚本的 `pipeline()` 项或 `parallel()` 任务各自运行了多个 Agent,已完成的 Agent 也可能再次运行。要让新的运行不再出现这类重复运行,请更新 Claude Code。376 在 v2.1.305 之前,如果您重新启动一个未经编辑的脚本,而该脚本的 `pipeline()` 项或 `parallel()` 任务各自运行了多个 Agent,已完成的 Agent 也可能再次运行。要让新的运行不再出现这类重复运行,请更新 Claude Code。

377* **停止时仍在运行**:从头开始。停止整个运行不会将任何 Agent 计为失败。377* **停止时仍在运行**:从头开始。停止整个运行不会将任何 Agent 计为失败。

378* **[在 v2.1.318 或更高版本上因达到用量限制而失败](#when-a-run-hits-your-usage-limit)**:再次运行,已完成的 Agent 会返回其保存的结果。如果您的脚本在失败之后调用了另一个 Agent,且该 Agent 返回了结果,那么脚本在失败的 Agent 之后启动的每个 Agent 也会再次运行。

378* **失败**:再次运行,脚本在其之后启动的每个 Agent 也会再次运行,即使它们已经完成。单独停止某一个 Agent(在 [`/workflows`](#watch-the-run) 中选中它并按 `x`)会被计为失败。379* **失败**:再次运行,脚本在其之后启动的每个 Agent 也会再次运行,即使它们已经完成。单独停止某一个 Agent(在 [`/workflows`](#watch-the-run) 中选中它并按 `x`)会被计为失败。

379 380 

380最后一种情况意味着,扇出过程中途的失败会导致已完成的工作重新运行。如果一个脚本按顺序启动 A、B、C 和 D,而 B 失败了,重新启动时会从缓存返回 A,并再次运行 B、C 和 D。381最后一种情况意味着,扇出过程中途的某个**失败** Agent 会导致已完成的工作重新运行。如果一个脚本按顺序启动 A、B、C 和 D,而 B 处于**失败**状态,重新启动时会从缓存返回 A,并再次运行 B、C 和 D。

381 382 

382如果您编辑一个原本启动 A、B、C 和 D 的脚本,使其改为启动 A、C、B 和 D,那么第二个启动的 Agent 现在是 C,而上一次运行中是 B。重新启动时会从缓存返回 A,并再次运行 C、B 和 D。383如果您编辑一个原本启动 A、B、C 和 D 的脚本,使其改为启动 A、C、B 和 D,那么第二个启动的 Agent 现在是 C,而上一次运行中是 B。重新启动时会从缓存返回 A,并再次运行 C、B 和 D。

383 384 


395 396 

396### 运行达到用量限制时397### 运行达到用量限制时

397 398 

398当某个 Agent 达到您的 claude.ai [用量限制](https://code.claude.com/docs/zh-CN/interactive-mode.md#wait-for-a-usage-limit-to-reset)时,运行会暂停,而不是让该 Agent 失败:达到限制的 Agent 会等待重置,并且不会启动新的 Agent。限制重置后不久,等待中的 Agent 会再次运行,运行会自行继续。需要 Claude Code v2.1.271 或更高版本;在更早的版本中,受影响的 Agent 会失败。399当某个 Agent 达到您的 claude.ai [用量限制](https://code.claude.com/docs/zh-CN/interactive-mode.md#wait-for-a-usage-limit-to-reset)时,运行会暂停,而不是让该 Agent 失败。达到限制的 Agent 会等待重置,并且不会启动新的 Agent。限制重置后不久,等待中的 Agent 会再次运行,运行会自行继续。需要 Claude Code v2.1.271 或更高版本,在 Desktop [Code 标签页](https://code.claude.com/docs/zh-CN/desktop.md)中则需要 [v2.1.319 或更高版本](https://code.claude.com/docs/zh-CN/desktop.md#claude-code-version-in-the-code-tab)。在更早的版本中,受影响的 Agent 会失败。

399 400 

400运行等待期间,任务面板中的进度行和 [`/workflows`](#watch-the-run) 标题会显示限制的重置时间。401运行等待期间,任务面板中的进度行和 [`/workflows`](#watch-the-run) 标题会显示限制的重置时间。在 Code 标签页中,运行会显示类似 `Paused at usage limit · continues after 3:45 PM if the app stays open` 的一行。请保持应用打开。

401 402 

402只有当以下所有条件都满足时,运行才会暂停;任一条件不满足时,受影响的 Agent 会失败:403只有当以下所有条件都满足时,运行才会暂停;任一条件不满足时,受影响的 Agent 会失败:

403 404 

404* 会话是交互式的,并且已使用 claude.ai 订阅登录。在使用 `claude -p` 的[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)或 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 中、在[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)中,或在 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 或 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 队友会话中,运行不会暂停。405* 会话已使用未启用[按用量计费](https://code.claude.com/docs/zh-CN/interactive-mode.md#start-a-wait-yourself)的 claude.ai 订阅登录,并且属于以下会话类型之一:

406 * 交互式终端会话。在使用 `claude -p` 的[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)或 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 中、在[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)中,或在 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 或 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 队友会话中,运行不会暂停。

407 * 您在 Code 标签页中启动的本地会话。在 SSH、WSL、[Dispatch](https://code.claude.com/docs/zh-CN/desktop.md#sessions-from-dispatch) 或[定时任务](https://code.claude.com/docs/zh-CN/desktop-scheduled-tasks.md)会话中,在从 Remote Control 启动或通过[企业启动器](https://code.claude.com/docs/zh-CN/corporate-launcher.md)启动的会话中,或在设置了 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/zh-CN/env-vars#variables) 时,运行不会暂停。

405* [`autoContinueAtUsageLimit`](https://code.claude.com/docs/zh-CN/settings-reference#autocontinueatusagelimit) 已开启,这也是让会话本身能够[等待用量限制重置](https://code.claude.com/docs/zh-CN/interactive-mode.md#wait-for-a-usage-limit-to-reset)的同一设置。如果您在等待期间将其关闭,等待会结束,等待中的 Agent 会失败。408* [`autoContinueAtUsageLimit`](https://code.claude.com/docs/zh-CN/settings-reference#autocontinueatusagelimit) 已开启,这也是让会话本身能够[等待用量限制重置](https://code.claude.com/docs/zh-CN/interactive-mode.md#wait-for-a-usage-limit-to-reset)的同一设置。如果您在等待期间将其关闭,等待会结束,等待中的 Agent 会失败。

409* 在 Code 标签页中,[会话限制卡片](https://code.claude.com/docs/zh-CN/errors.md#youve-hit-your-session-limit)上的 **Auto-continue when limits reset** 复选框处于选中状态(默认即为选中)。如果您取消选中,您的 Code 标签页会话中的运行将不再暂停,除非托管设置将 `autoContinueAtUsageLimit` 设为 `true`。

406* 限制在 24 小时内重置。每周限制的重置时间可能更远。410* 限制在 24 小时内重置。每周限制的重置时间可能更远。

407* 运行尚未等待过两次。当第三次达到限制时,该 Agent 会失败。411* 运行尚未等待过两次。当第三次达到限制时,该 Agent 会失败。

408 412 

413要完成其 Agent 因达到限制而失败的运行,请在限制重置后让 Claude [重新启动工作流](#which-agents-run-again)。

414 

409### Agent 停滞并重新启动时415### Agent 停滞并重新启动时

410 416 

411如果某个 Agent 的输出停止到达的时间足够长,它会使用相同的提示词从头开始。在 [`/workflows`](#watch-the-run) 中,其名称会加上 `(retry 1)` 后缀,详情中显示 `attempt 2 (stalled)`。重新启动是自动的,您无需进行任何操作。417如果某个 Agent 的输出停止到达的时间足够长,它会使用相同的提示词从头开始。在 [`/workflows`](#watch-the-run) 中,其名称会加上 `(retry 1)` 后缀,详情中显示 `attempt 2 (stalled)`。重新启动是自动的,您无需进行任何操作。

worktrees.md +1 −1

Details

253 253 

254Worktree 获得自己的文件和分支,但它与主检出共享以下内容:254Worktree 获得自己的文件和分支,但它与主检出共享以下内容:

255 255 

256* **存储库的 `.git` 目录**:worktree 中的 git 命令写入主存储库的共享 `.git` 目录,[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md#filesystem-isolation)允许这些写入,因此 `git commit` 等命令可以从启用沙箱的 worktree 内部工作。256* **仓库的 `.git` 目录**:worktree 中的 git 命令会写入主仓库共享的 `.git` 目录。启用[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md#filesystem-isolation)后,`git commit` 等命令可以在位于 worktree 根目录的会话中正常工作,而 `--worktree` 正是在该位置启动会话。默认情况下,[如果您在 worktree 的子目录中运行 `claude`,这些命令会因 `index.lock` 错误而失败](https://code.claude.com/docs/zh-CN/sandboxing#git-index-lock)。

257* **插件**:从主检出在[项目作用域](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-where-a-plugin-is-enabled)安装的插件也会在同一仓库的 worktree 中加载,因此您无需为每个 worktree 重新安装它们。257* **插件**:从主检出在[项目作用域](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-where-a-plugin-is-enabled)安装的插件也会在同一仓库的 worktree 中加载,因此您无需为每个 worktree 重新安装它们。

258* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`。该规则适用于主检出和仓库的每个其他 worktree,并且在 worktree 被删除后仍会保留。258* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`。该规则适用于主检出和仓库的每个其他 worktree,并且在 worktree 被删除后仍会保留。

259 259 

Details

41 41 

42### ZDR 不涵盖的内容42### ZDR 不涵盖的内容

43 43 

44ZDR 不适用于以下内容,即使对于启用了 ZDR 的组织也是如此。这些功能遵循[标准数据保留政策](https://code.claude.com/docs/zh-CN/data-usage.md#data-retention):44ZDR 不适用于以下内容,即使对于启用了 ZDR 的组织也是如此。除非某行另有说明,否则这些功能遵循[标准数据保留政策](https://code.claude.com/docs/zh-CN/data-usage.md#data-retention):

45 45 

46| 功能 | 详情 |46| 功能 | 详情 |

47| - | - |47| - | - |

48| claude.ai 上的聊天 | 通过 Claude for Enterprise 网络界面的聊天对话不受 ZDR 保护。 |48| claude.ai 上的聊天 | 通过 Claude for Enterprise 网络界面的聊天对话不受 ZDR 保护。 |

49| Cowork | Cowork 会话不受 ZDR 保护。 |49| Cowork | Cowork 会话不受 ZDR 保护。 |

50| Artifact | 聊天对话和 Cowork 会话中的 Artifact 不受 ZDR 保护;除非您的组织为其设置了保留期限,否则它们会一直保留直至被删除。启用 ZDR 时,Claude Code 中不提供 Artifact。 |

50| Claude Code 分析 | 不存储提示或模型响应,但收集生产力元数据,如账户电子邮件和使用统计。对于 ZDR 组织,贡献指标不可用;[分析仪表板](https://code.claude.com/docs/zh-CN/analytics.md)仅显示使用指标。 |51| Claude Code 分析 | 不存储提示或模型响应,但收集生产力元数据,如账户电子邮件和使用统计。对于 ZDR 组织,贡献指标不可用;[分析仪表板](https://code.claude.com/docs/zh-CN/analytics.md)仅显示使用指标。 |

51| 用户和席位管理 | 管理数据,如账户电子邮件和席位分配,根据标准政策保留。 |52| 用户和席位管理 | 管理数据,如账户电子邮件和席位分配,根据标准政策保留。 |

52| 第三方集成 | 由第三方工具、MCP servers 或其他外部集成处理的数据不受 ZDR 保护。请独立审查这些服务的数据处理实践。 |53| 第三方集成 | 由第三方工具、MCP servers 或其他外部集成处理的数据不受 ZDR 保护。请独立审查这些服务的数据处理实践。 |


60| [网络上的 Claude Code](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),包括从 [Desktop 应用](https://code.claude.com/docs/zh-CN/desktop.md#cloud-sessions)启动的应用 | 需要服务器端存储会话数据,包括包含提示和完成的对话历史。 |61| [网络上的 Claude Code](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),包括从 [Desktop 应用](https://code.claude.com/docs/zh-CN/desktop.md#cloud-sessions)启动的应用 | 需要服务器端存储会话数据,包括包含提示和完成的对话历史。 |

61| [Chat 和 Cowork 统一体验](https://support.claude.com/en/articles/17444462-set-up-and-manage-the-new-unified-claude-experience-for-your-enterprise-organization) | 需要云端会话。 |62| [Chat 和 Cowork 统一体验](https://support.claude.com/en/articles/17444462-set-up-and-manage-the-new-unified-claude-experience-for-your-enterprise-organization) | 需要云端会话。 |

62| [Claude Tag](https://claude.com/docs/claude-tag) | 保留频道内存和会话记录。 |63| [Claude Tag](https://claude.com/docs/claude-tag) | 保留频道内存和会话记录。 |

63| [Artifacts](https://code.claude.com/docs/zh-CN/artifacts.md) | 需要在 Anthropic 运营的基础设施上存储已发布的页面内容。 |64| Claude Code 中的 [Artifacts](https://code.claude.com/docs/zh-CN/artifacts.md) | 需要在 Anthropic 运营的基础设施上存储已发布的页面内容。 |

65| [Claude Docs](https://support.claude.com/en/articles/16923645-get-started-with-claude-docs) | 需要在 Anthropic 运营的基础设施上存储文档内容。 |

64| 反馈提交(`/feedback`、`/bug`、`/share`) | 提交反馈会将对话数据发送给 Anthropic。 |66| 反馈提交(`/feedback`、`/bug`、`/share`) | 提交反馈会将对话数据发送给 Anthropic。 |

65| [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) | 在 Anthropic 服务器上存储会话记录以跨设备同步对话。 |67| [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) | 在 Anthropic 服务器上存储会话记录以跨设备同步对话。 |

66 68