SpyBara
Go Premium

Documentation 2026-09-13 21:00 UTC to 2026-09-14 22:58 UTC

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

admin-setup.md +1 −3

Details

83启用 WSL 会话后,将您的托管设置扩展到它们:83启用 WSL 会话后,将您的托管设置扩展到它们:

84 84 

85* 通过 HKLM 注册表或 `C:\Program Files\ClaudeCode` 文件部署 `wslInheritsWindowsSettings: true`,以便 WSL 会话继承与主机会话相同的策略。85* 通过 HKLM 注册表或 `C:\Program Files\ClaudeCode` 文件部署 `wslInheritsWindowsSettings: true`,以便 WSL 会话继承与主机会话相同的策略。

86* 通过在 WSL 会话内运行 `/status` 进行验证,并读取 `Setting sources` 行。Claude Code 仅命名[它选择的托管来源](/docs/zh-CN/server-managed-settings#settings-precedence),因此该行告诉您的内容取决于会话:86* 通过在 WSL 会话内运行 `/status` 进行验证,并读取 `Setting sources` 行。要解释它列出的内容,请参阅[在 /status 中读取来源](/docs/zh-CN/managed-settings#read-the-source-in-/status)。

87 * **在[获取 server-managed 设置](/docs/zh-CN/server-managed-settings#platform-availability)并接收任何键的会话中**:`Enterprise managed settings (remote)`,因为 Claude Code 在 Windows 来源之前选择它们,所以该行不显示标志是否到达。

88 * **在任何其他会话中**:`Enterprise managed settings (HKLM)` 确认注册表部署。`(file)` 命名 Windows 文件或发行版自己的 `/etc/claude-code/managed-settings.json`,因此仅当发行版没有自己的托管文件时才确认 Windows 文件部署。

89 87 

90WSL 2 实用程序 VM 内的进程对 Windows 端端点检测传感器不可见。要观察发行版内的进程和文件活动,请查看您的端点检测供应商的 WSL 指南,了解您可以在发行版内运行的 Linux 传感器及其需要的排除项。Claude Code 的 [OpenTelemetry 工具执行遥测](/docs/zh-CN/monitoring-usage) 对 WSL 和本机会话的发出方式相同。88WSL 2 实用程序 VM 内的进程对 Windows 端端点检测传感器不可见。要观察发行版内的进程和文件活动,请查看您的端点检测供应商的 WSL 指南,了解您可以在发行版内运行的 Linux 传感器及其需要的排除项。Claude Code 的 [OpenTelemetry 工具执行遥测](/docs/zh-CN/monitoring-usage) 对 WSL 和本机会话的发出方式相同。

91 89 

advisor.md +10 −7

Details

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

99 99 

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

101| ------------------- | -------------------- | ----------------------------------------------------------------------------------------- |101| ------------------- | ----------------------------- | ----------------------------------------------------------------- |

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

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

104| Sonnet 5 | Fable、Opus、Sonnet 5 | Sonnet 4.6 顾问被拒绝 |104| Sonnet 5 | Fable、Opus 4.7 或更高版本、Sonnet 5 | Sonnet 4.6 顾问被拒绝,使用 Opus 4.6 顾问的请求会失败并显示 API 错误 |

105| Opus 4.6 | Fable、Opus、Sonnet 5 | Sonnet 5 和 Opus 4.6 的能力排名相同,因此 Opus 4.6 主模型接受 Sonnet 5 顾问 |105| Opus 4.6 | Fable、Opus、Sonnet 5 | Sonnet 4.6 顾问被拒绝 |

106| Opus 4.7 或更高版本 | Fable、Opus 4.7 或更高版本 | Opus 4.7 和更高版本的 Opus 模型的能力排名相同,因此任何一个都可以接受另一个作为顾问。Opus 4.7 主模型与 Opus 4.6 或 Sonnet 5 顾问被拒绝 |106| Opus 4.7 或 Opus 4.8 | Fable 和 Opus 4.7 或更高版本 | Opus 4.6 或 Sonnet 顾问被拒绝 |

107| Fable 5.1 或 Fable 5 | Fable 5.1 或 Fable 5 | Opus 或 Sonnet 顾问被拒绝 |107| Opus 5 | Fable、Opus 5 | Opus 4.6 或 Sonnet 顾问被拒绝,使用 Opus 4.7 或 Opus 4.8 顾问的请求会失败并显示 API 错误 |

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

109| Fable 5.1 | Fable 5.1 | Opus 或 Sonnet 顾问被拒绝,使用 Fable 5 顾问的请求会失败并显示 API 错误 |

108 110 

109Fable 5.1 需要 Claude Code v2.1.257 或更高版本。两个 Fable 模型都需要 [Fable 访问权限](/docs/zh-CN/model-config#work-with-fable)。111Fable 5.1 需要 Claude Code v2.1.257 或更高版本。两个 Fable 模型都需要 [Fable 访问权限](/docs/zh-CN/model-config#work-with-fable)。

110 112 


112 114 

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

114 116 

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

116 118 

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

120* 对于表中列为因 API 错误而失败的顾问,Claude Code 会附加它,API 会拒绝它。每个请求都会失败并显示 `'<advisor model>' cannot be used as an advisor when the request model is '<main model>'`,直到您使用 `/advisor` 更改顾问或将其关闭。

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

119 122 

120<h3 id="fable-advisor-and-usage-credits">123<h3 id="fable-advisor-and-usage-credits">

Details

62 * `"init"`:运行的会话元数据。当 `SessionStart` 或 `Setup` hook 在会话启动期间运行时,其 [hook 生命周期消息](/docs/zh-CN/agent-sdk/typescript#sdkhookstartedmessage) 在 `init` 消息之前到达62 * `"init"`:运行的会话元数据。当 `SessionStart` 或 `Setup` hook 在会话启动期间运行时,其 [hook 生命周期消息](/docs/zh-CN/agent-sdk/typescript#sdkhookstartedmessage) 在 `init` 消息之前到达

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

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

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

66 66 

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

68* **`AssistantMessage`:** 为 Claude 响应中的每个内容块发出,包括最终仅包含文本的块。每个块都包含单个内容块,例如文本或工具调用,来自一个响应的消息共享一个消息 ID。68* **`AssistantMessage`:** 为 Claude 响应中的每个内容块发出,包括最终仅包含文本的块。每个块都包含单个内容块,例如文本或工具调用,来自一个响应的消息共享一个消息 ID。


238| `"xhigh"` | 扩展推理深度 | 编码和代理任务,在 [支持它的模型](/docs/zh-CN/model-config#adjust-effort-level) 上 |238| `"xhigh"` | 扩展推理深度 | 编码和代理任务,在 [支持它的模型](/docs/zh-CN/model-config#adjust-effort-level) 上 |

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

240 240 

241如果你不设置 `effort`,两个 SDK 都会将参数保留未设置,并遵从模型的默认行为。241如果你不设置 `effort`,Claude Code 会自行解析努力级别,按照 [调整努力级别](/docs/zh-CN/model-config#adjust-effort-level) 所述的顺序。

242 242 

243<Note>243<Note>

244 `effort` 在每个响应内交换延迟和令牌成本以获得推理深度。[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 是一个单独的功能,在输出中产生 `thinking` 块,[Python](/docs/zh-CN/agent-sdk/python#thinkingconfig) 或 [TypeScript](/docs/zh-CN/agent-sdk/typescript#thinkingconfig) 上 `ThinkingConfig` 的 `display` 字段控制你是否接收它们的文本。它们是独立的:你可以设置 `effort: "low"` 并启用扩展思考,或 `effort: "max"` 而不启用它。244 `effort` 在每个响应内交换延迟和令牌成本以获得推理深度。[扩展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 是一个单独的功能,在输出中产生 `thinking` 块,[Python](/docs/zh-CN/agent-sdk/python#thinkingconfig) 或 [TypeScript](/docs/zh-CN/agent-sdk/typescript#thinkingconfig) 上 `ThinkingConfig` 的 `display` 字段控制你是否接收它们的文本。它们是独立的:你可以设置 `effort: "low"` 并启用扩展思考,或 `effort: "max"` 而不启用它。


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

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

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

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

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

362 362 

363`result` 字段保存最终文本输出,仅在 `success` 变体上存在,因此在读取它之前始终检查子类型。363`result` 字段保存最终文本输出,仅在 `success` 变体上存在,因此在读取它之前始终检查子类型。

Details

196* **文件系统 hooks:** 在 `settings.json` 中定义的 shell 命令,当 `settingSources` 包含相关源时加载。这些与您为 [交互式 Claude Code 会话](/docs/zh-CN/hooks-guide) 配置的 hooks 相同。196* **文件系统 hooks:** 在 `settings.json` 中定义的 shell 命令,当 `settingSources` 包含相关源时加载。这些与您为 [交互式 Claude Code 会话](/docs/zh-CN/hooks-guide) 配置的 hooks 相同。

197* **编程 hooks:** 直接传递给 `query()` 的回调函数。这些在您的应用程序进程中运行,可以返回结构化决策。请参阅 [使用 hooks 控制执行](/docs/zh-CN/agent-sdk/hooks)。197* **编程 hooks:** 直接传递给 `query()` 的回调函数。这些在您的应用程序进程中运行,可以返回结构化决策。请参阅 [使用 hooks 控制执行](/docs/zh-CN/agent-sdk/hooks)。

198 198 

199两种类型在相同的 hook 生命周期中执行。如果您已经在项目的 `.claude/settings.json` 中有 hooks,并且您设置 `settingSources: ["project"]`,那些 hooks 会在 SDK 中自动运行,无需额外配置。

200 

201Hook 回调接收工具输入并返回决策字典。返回 `{}` 意味着允许工具继续。要阻止执行,返回一个 `hookSpecificOutput` 对象,其中包含 `permissionDecision: "deny"` 和 `permissionDecisionReason`。原因会作为工具结果发送给 Claude。请参阅 [hooks 指南](/docs/zh-CN/agent-sdk/hooks) 了解完整的回调签名和返回类型。199Hook 回调接收工具输入并返回决策字典。返回 `{}` 意味着允许工具继续。要阻止执行,返回一个 `hookSpecificOutput` 对象,其中包含 `permissionDecision: "deny"` 和 `permissionDecisionReason`。原因会作为工具结果发送给 Claude。请参阅 [hooks 指南](/docs/zh-CN/agent-sdk/hooks) 了解完整的回调签名和返回类型。

202 200 

203<CodeGroup>201<CodeGroup>

Details

589 从 hooks 发出 HTTP 请求589 从 hooks 发出 HTTP 请求

590</h3>590</h3>

591 591 

592Hooks 可以执行异步操作,如 HTTP 请求。在您的 hook 内捕获错误,而不是让它们传播,因为未处理的异常可能会中断代理。592Hooks 可以执行异步操作,如 HTTP 请求。在您的 hook 内捕获错误,而不是让它们传播。

593 593 

594此示例在每个工具完成后发送 webhook,记录哪个工具运行以及何时运行。hook 捕获错误,以便失败的 webhook 不会中断代理:594此示例在每个工具完成后发送 webhook,记录哪个工具运行以及何时运行。hook 捕获来自失败 webhook 的错误:

595 595 

596<CodeGroup>596<CodeGroup>

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


627 # 在线程中运行阻塞 HTTP 调用以避免阻塞事件循环627 # 在线程中运行阻塞 HTTP 调用以避免阻塞事件循环

628 await asyncio.to_thread(_send_webhook, input_data["tool_name"])628 await asyncio.to_thread(_send_webhook, input_data["tool_name"])

629 except Exception as e:629 except Exception as e:

630 # 记录错误但不抛出。失败的 webhook 不应停止代理630 # 记录错误但不抛出

631 print(f"Webhook request failed: {e}")631 print(f"Webhook request failed: {e}")

632 632 

633 return {}633 return {}


656 if (error instanceof Error && error.name === "AbortError") {656 if (error instanceof Error && error.name === "AbortError") {

657 console.log("Webhook request cancelled");657 console.log("Webhook request cancelled");

658 }658 }

659 // 不重新抛出。失败的 webhook 不应停止代理659 // 不重新抛出

660 }660 }

661 661 

662 return {};662 return {};


901 901 

902生成子代理的 `UserPromptSubmit` hook 如果这些子代理触发相同的 hook,可能会创建无限循环。要防止这种情况:902生成子代理的 `UserPromptSubmit` hook 如果这些子代理触发相同的 hook,可能会创建无限循环。要防止这种情况:

903 903 

904* 在生成子代理前检查 hook 输入中的子代理指示符

905* 使用共享变量或会话状态来跟踪您是否已在子代理内904* 使用共享变量或会话状态来跟踪您是否已在子代理内

906* 将 hooks 范围限制为仅对顶级代理会话运行905* 将 hooks 范围限制为仅对顶级代理会话运行

907 906 

Details

162| :------------------------------------ | :-------------- | :-------------------------------------------------- |162| :------------------------------------ | :-------------- | :-------------------------------------------------- |

163| stdio 服务器,或没有缓存工具列表的 HTTP/SSE 服务器 | 是,直到连接 | [`MCP_TIMEOUT`](/docs/zh-CN/env-vars),默认 30 秒;连接在该截止时间失败 |163| stdio 服务器,或没有缓存工具列表的 HTTP/SSE 服务器 | 是,直到连接 | [`MCP_TIMEOUT`](/docs/zh-CN/env-vars),默认 30 秒;连接在该截止时间失败 |

164| 具有缓存工具列表的远程服务器,由 Claude Code 从之前的连接保存 | 否;缓存的工具从第一轮开始可用 | 无;在其第一次工具调用时连接,该延迟连接有其自己的超时 |164| 具有缓存工具列表的远程服务器,由 Claude Code 从之前的连接保存 | 否;缓存的工具从第一轮开始可用 | 无;在其第一次工具调用时连接,该延迟连接有其自己的超时 |

165| 进程内 [SDK 服务器](#sdk-mcp-servers) | 否;从不延迟第一轮 | 无 |165| 进程内 [SDK 服务器](#sdk-mcp-servers) | 是,直到连接并列出其工具 | 无;连接和工具列表请求各有其自己的超时 |

166 166 

167要在发送 init 消息之前的单独的、更早的阶段阻止启动本身:167要在发送 init 消息之前的单独的、更早的阶段阻止启动本身:

168 168 

Details

160 const options = { settings: { outputStyle: "Explanatory" } };160 const options = { settings: { outputStyle: "Explanatory" } };

161 ```161 ```

162 162 

163Python SDK 没有以编程方式选择输出样式的选项。对于无法写入 `.claude/settings.local.json` 的仅代码部署,请改用 `append` 或自定义提示词字符串。163在 Python SDK 中,通过 `settings` 选项设置 `outputStyle`,该选项接受 JSON 字符串(如 `'{"outputStyle": "Explanatory"}'`)或设置它的设置文件的路径。

164 164 

165**SDK 用户注意:** 当你在选项中包含 `settingSources: ['user']` 或 `settingSources: ['project']`(TypeScript)/ `setting_sources=["user"]` 或 `setting_sources=["project"]`(Python)时,输出样式会被加载。165**SDK 用户注意:** 当你在选项中包含 `settingSources: ['user']` 或 `settingSources: ['project']`(TypeScript)/ `setting_sources=["user"]` 或 `setting_sources=["project"]`(Python)时,输出样式会被加载。

166 166 

Details

16 16 

17| 如果您... | 使用 | 原因 |17| 如果您... | 使用 | 原因 |

18| ----------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------ |18| ----------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------ |

19| 构建代理而不自己实现工具循环 | **Agent SDK** | 一个在您自己的进程中运行代理循环的库,支持 Python 或 TypeScript。 |19| 构建代理而不自己实现工具循环 | **Agent SDK** | 一个为您运行代理循环的 Python 或 TypeScript 库。 |

20| 进行交互式开发或从终端运行一次性任务 | [**Claude Code CLI**](/docs/zh-CN/overview) | 终端界面,为日常交互使用而构建。 |20| 进行交互式开发或从终端运行一次性任务 | [**Claude Code CLI**](/docs/zh-CN/overview) | 终端界面,为日常交互使用而构建。 |

21| 直接调用 API 并自己实现工具循环 | [**Client SDK**](https://platform.claude.com/docs/en/api/client-sdks) | 直接访问 Anthropic API 而不是 Claude Code。您自己实现工具循环。 |21| 直接调用 API 并自己实现工具循环 | [**Client SDK**](https://platform.claude.com/docs/en/api/client-sdks) | 直接访问 Anthropic API 而不是 Claude Code。您自己实现工具循环。 |

22| 运行长期运行或异步代理,无需管理您自己的沙箱或会话基础设施 | [**Managed Agents**](https://platform.claude.com/docs/en/managed-agents/overview) | 托管 REST API,是 Agent SDK 的独立产品。Anthropic 运行代理和沙箱。 |22| 运行长期运行或异步代理,无需管理您自己的沙箱或会话基础设施 | [**Managed Agents**](https://platform.claude.com/docs/en/managed-agents/overview) | 托管 REST API,是 Agent SDK 的独立产品。Anthropic 运行代理和沙箱。 |

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 首先运行 [hooks](/docs/zh-CN/agent-sdk/hooks)。一个 hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。一个 `PreToolUse` hook allow 也不能批准针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 删除。19 首先运行 [hooks](/docs/zh-CN/agent-sdk/hooks)。Hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。`PreToolUse` hook 允许也不能批准针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 删除。

20 </Step>20 </Step>

21 21 

22 <Step title="拒绝规则">22 <Step title="拒绝规则">

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

24 </Step>24 </Step>

25 25 

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

27 检查来自 [settings.json](/docs/zh-CN/settings-reference#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。27 检查来自 [settings.json](/docs/zh-CN/settings-reference#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。

28 28 

29 需要用户交互的工具行为相同:`AskUserQuestion` 和 MCP 工具,其服务器设置 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 总是传递到回调,即使当允许规则匹配时。在 `dontAsk` 模式下,两种情况都被拒绝,因为该模式从不提示。MCP 注解需要 Claude Code v2.1.199 或更高版本。29 需要用户交互的工具行为相同:`AskUserQuestion` 和 MCP 工具,其服务器设置了 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool),总是传递到回调,即使当允许规则匹配时也是如此。在 `dontAsk` 模式下,两种情况都被拒绝,因为该模式从不提示。MCP 注解需要 Claude Code v2.1.199 或更高版本。

30 30 

31 [claude.ai connector](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 工具,您的组织已设置为 `ask` 也会在此步骤离开流程。每个调用都会传递到回调,即使在 `bypassPermissions` 模式下,即使当允许规则匹配时。回调接收原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,调用被拒绝,因为该模式从不提示。31 您的组织设置为 `ask` 的 [claude.ai connector](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 工具也在此步骤离开流程。每个调用都传递到回调,即使在 `bypassPermissions` 模式下,即使当允许规则匹配时也是如此。回调接收原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,调用被拒绝,因为该模式从不提示。

32 </Step>32 </Step>

33 33 

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

35 应用活跃的 [权限模式](#permission-modes):35 应用活跃的 [权限模式](#permission-modes):

36 36 

37 * 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除,这些会传递下去。37 * 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除,这些会传递下去。

38 * 在 `acceptEdits` 模式下,Claude Code 批准 [Accept edits mode](#accept-edits-mode-acceptedits) 下列出的文件操作。38 * 在 `acceptEdits` 模式下,Claude Code 批准 [接受编辑模式](#accept-edits-mode-acceptedits) 下列出的文件操作。

39 * 在 `plan` 模式下,Claude Code 将文件编辑和 shell 写入工具发送到您的 `canUseTool` 回调,无论允许规则如何,因此在规划时写入操作无法自动批准。39 * 在 `plan` 模式下,Claude Code 将文件编辑和 shell 写入工具发送到您的 `canUseTool` 回调,无论允许规则如何,因此在规划时写入操作无法自动批准。

40 * 在其他模式下,请求会传递下去。40 * 在其他模式下,请求传递下去。

41 </Step>41 </Step>

42 42 

43 <Step title="允许规则">43 <Step title="允许规则">

44 检查 `allow` 规则(来自 `allowed_tools` 和 settings.json)。如果规则匹配,工具被批准。调用工具自身批准的是在此步骤解决的,无需规则:例如在您的工作目录内的文件读取或 [只读 Bash 命令](/docs/zh-CN/permissions#read-only-commands)。针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除永远不会被允许规则批准:它们在提示的模式下到达您的回调,在 Claude Code v2.1.218 或更高版本的 `auto` 模式下进入 [分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),并在 `dontAsk` 模式下被拒绝。44 检查 `allow` 规则(来自 `allowed_tools` 和 settings.json)。如果规则匹配,工具被批准。工具自己批准的调用也在此步骤被解决,无需规则:例如在您的工作目录内的文件读取或 [只读 Bash 命令](/docs/zh-CN/permissions#read-only-commands)。针对 [关键路径](/docs/zh-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除永远不会被允许规则批准:它们在提示的模式下到达您的回调,在 Claude Code v2.1.218 或更高版本的 `auto` 模式下转到 [分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),并在 `dontAsk` 模式下被拒绝。

45 </Step>45 </Step>

46 46 

47 <Step title="canUseTool 回调">47 <Step title="canUseTool 回调">

48 如果上述任何步骤都未解决,调用您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝。48 如果上述任何步骤都未解决,调用您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝。

49 49 

50 在 TypeScript SDK 中,如果您设置 [`permissionPrompts: 'none'`](/docs/zh-CN/agent-sdk/typescript#options),您的回调在此步骤不会被调用。一个 [`PermissionRequest` hook](/docs/zh-CN/hooks#permissionrequest) 仍然有机会决定,如果它不决定,Claude Code 拒绝调用。该选项需要 Claude Code v2.1.259 或更高版本。50 在 TypeScript SDK 中,如果您设置了 [`permissionPrompts: 'none'`](/docs/zh-CN/agent-sdk/typescript#options),您的回调在此步骤不会被调用。[`PermissionRequest` hook](/docs/zh-CN/hooks#permissionrequest) 仍然有机会决定,如果它不决定,Claude Code 拒绝调用。该选项需要 Claude Code v2.1.259 或更高版本。

51 </Step>51 </Step>

52</Steps>52</Steps>

53 53 

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

55 55 

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

57 57 

58如果您在 TypeScript SDK 期望评估顺序在咨询回调之前自动批准调用的配置中传递 `canUseTool` 回调,SDK 在构造查询时会发出一次 Node.js 进程警告。警告的代码是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。两种配置会触发它:58如果您在 TypeScript SDK 期望评估顺序在咨询回调之前自动批准调用的配置中传递 `canUseTool` 回调,SDK 在构造查询时会发出一次 Node.js 进程警告。警告的代码是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。两个配置会触发它:

59 59 

60* `permissionMode: 'bypassPermissions'`,它自动批准到达权限模式步骤的每个调用,除了 [任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)60* `permissionMode: 'bypassPermissions'`,它自动批准到达权限模式步骤的每个调用,除了 [任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)

61* 每个裸 `allowedTools` 条目,如 `"Read"`,它在咨询回调之前自动批准整个工具,除了 [任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)61* 每个裸 `allowedTools` 条目,如 `"Read"`,它在回调被咨询之前自动批准整个工具,除了 [任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)

62 62 

63带有说明符的条目(如 `Bash(ls *)`)和 `acceptEdits` 模式不会触发它,来自设置文件的允许规则对检查不可见。63带有说明符的条目,如 `Bash(ls *)` 和 `acceptEdits` 模式不会触发它,来自设置文件的允许规则对检查不可见。

64 64 

65使用 `process.on('warning', ...)` 监听并匹配代码以记录或抑制它。要无论模式和规则如何都控制每个工具调用,请改用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks)。65使用 `process.on('warning', ...)` 监听并匹配代码以记录或抑制它。要对所有工具调用进行门控,无论模式和规则如何,请改用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks)。

66 66 

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

68 68 

69* **Hooks:** 运行自定义代码以允许、拒绝或修改工具请求。请参阅 [使用 hooks 控制执行](/docs/zh-CN/agent-sdk/hooks)。69* **Hooks:** 运行自定义代码以允许、拒绝或修改工具请求。请参阅 [使用 hooks 控制执行](/docs/zh-CN/agent-sdk/hooks)。

70* **canUseTool 回调:** 在运行时提示用户批准,当没有更早的步骤解决调用时。请参阅 [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input)。70* **canUseTool 回调:** 在运行时提示用户批准,当没有更早的步骤解决调用时。请参阅 [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input)。


73 允许和拒绝规则73 允许和拒绝规则

74</h2>74</h2>

75 75 

76`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)向上面评估流程中的允许和拒绝规则列表添加条目。如果您在 `allowed_tools` 中命名[任务跟踪工具](/docs/zh-CN/agent-sdk/todo-tracking#model-availability)之一,Claude Code 也会选择加入会话。任何其他未在 `allowed_tools` 中列出的工具仍然可供 Claude 使用,对其的调用如果需要批准,会继续进行权限模式。拒绝规则的行为取决于它们是命名工具还是在工具内范围化模式。76`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述评估流程中向允许和拒绝规则列表添加条目。如果你在 `allowed_tools` 中命名了某个[任务跟踪工具](/docs/zh-CN/agent-sdk/todo-tracking#model-availability),Claude Code 也会选择加入该会话。任何其他未在 `allowed_tools` 中列出的工具仍然可供 Claude 使用,对其的调用如果需要批准,则会进入权限模式。拒绝规则的行为取决于它们是命名工具还是在工具内限定模式。

77 77 

78| 选项 | 效果 |78| 选项 | 效果 |

79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |79| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |

80| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准。此处未列出的其他工具仍然存在,对其的调用如果需要批准,会继续进行权限模式和 `canUseTool`。 |80| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准。此处未列出的其他工具仍然存在,对它们的调用如果需要批准,则会进入权限模式和 `canUseTool`。 |

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

82| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。与 `rm *` [如所写](/docs/zh-CN/permissions#bash-rule-limits) 匹配的调用在每个权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用,包括 `/bin/rm`,继续进行权限模式。 |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。匹配 `rm *` [如所写](/docs/zh-CN/permissions#bash-rule-limits) 的调用在每种权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用(包括 `/bin/rm`)会进入权限模式。 |

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

84 84 

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

86 86 

87范围化规则用于 `Read` 和 `Edit` 采用路径模式。`Edit(path)` 规则管理所有写入文件的内置工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 规则永远不会被文件权限检查匹配。87`Read` 和 `Edit` 的限定规则采用路径模式。`Edit(path)` 规则管理所有写入文件的内置工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 规则永远不会被文件权限检查匹配。

88 88 

89使用 `//path` 表示绝对文件系统路径:`Edit(//secrets/**)` 的拒绝规则阻止在磁盘上 `/secrets` 下任何位置的写入。使用单个前导斜杠,`Edit(/secrets/**)` 在规则的源处锚定。对于通过 `allowed_tools` 或 `disallowed_tools` 传递的规则,这意味着会话的工作目录,因此规则不会阻止磁盘上的 `/secrets`。请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。89使用 `//path` 表示绝对文件系统路径:`Edit(//secrets/**)` 的拒绝规则会阻止在磁盘上 `/secrets` 下任何位置的写入。使用单个前导斜杠时,`Edit(/secrets/**)` 在规则的源处锚定。对于通过 `allowed_tools` 或 `disallowed_tools` 传递的规则,这意味着会话的工作目录,因此规则不会阻止磁盘上的 `/secrets`。请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。

90 90 

91<Warning>91<Warning>

92 **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过您的 `canUseTool` 回调,因此您在那里放置的权限检查对该工具被静默绕过。`AskUserQuestion`、标记有 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths) 仍然到达回调,即使允许规则匹配。在 `auto` 模式中,关键路径移除转到[分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 而不是回调,而上面列出的其他调用仍然到达它;分类器路由需要 Claude Code v2.1.218 或更高版本。在 `dontAsk` 模式中,这些调用被拒绝,不调用回调。92 **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中被批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过你的 `canUseTool` 回调,因此你在那里放置的权限检查会被该工具无声地绕过。`AskUserQuestion`、标记为 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、连接器工具[你的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools),以及针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除仍然会到达回调,即使允许规则匹配。在 `auto` 模式中,关键路径移除会进入[分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)而不是回调,而上面列出的其他调用仍然会到达它;分类器路由需要 Claude Code v2.1.218 或更高版本。在 `dontAsk` 模式中,这些调用会被拒绝,不会调用回调。

93 93 

94 覆盖范围取决于条目的形式:像 `Read` 或 `mcp__github__get_issue` 这样的裸名称自动批准对该工具的每个调用,除了上面的异常之外,而像 `Bash(npm test *)` 这样的范围化规则仅自动批准匹配的调用,其他需要批准的 `Bash` 调用仍然会继续进行回调。对于必须在每个工具调用上运行的检查,请使用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks):hooks 在每个其他步骤之前运行,hook 拒绝甚至在 `bypassPermissions` 模式中也适用。94 覆盖范围取决于条目的形式:像 `Read` 或 `mcp__github__get_issue` 这样的裸名称会自动批准对该工具的每个调用,除了上面列出的例外,而像 `Bash(npm test *)` 这样的限定规则仅自动批准匹配的调用,其他需要批准的 `Bash` 调用仍然会进入回调。对于必须在每个工具调用上运行的检查,使用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks):hooks 在每个其他步骤之前运行,hook 拒绝即使在 `bypassPermissions` 模式中也适用。

95</Warning>95</Warning>

96 96 

97对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对:97对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对:


103};103};

104```104```

105 105 

106列出的工具被批准,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves),以及每个其他会提示的调用都被拒绝。在 `default` 模式中不需要批准的调用无论您是否列出它们都会运行,例如[只读 Bash 命令](/docs/zh-CN/permissions#read-only-commands)、不在运行前询问的工具如 `Agent`,以及您工作目录内的文件读取。要将工具完全置于 Claude 的范围之外,请将其裸名称添加到 `disallowedTools`。106列出的工具被批准,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves),以及每个其他会提示的调用都被拒绝。在 `default` 模式中不需要批准的调用会运行,无论你是否列出它们,例如[只读 Bash 命令](/docs/zh-CN/permissions#read-only-commands)、不在运行前询问的 `Agent` 等工具,以及工作目录内的文件读取。要使工具完全超出 Claude 的范围,请将其裸名称添加到 `disallowedTools`。

107 107 

108<Warning>108<Warning>

109 **`allowed_tools` 不约束 `bypassPermissions`。** `allowed_tools` 仅预批准您列出的工具。未列出的工具不与任何允许规则匹配,并继续进行权限模式,其中 `bypassPermissions` 批准它们。设置 `allowed_tools=["Read"]` 与 `permission_mode="bypassPermissions"` 一起仍然批准每个工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,请使用 `disallowed_tools`。109 **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 预批准你列出的工具。其他未列出的工具不匹配任何允许规则,会进入权限模式,其中 `bypassPermissions` 批准它们。将 `allowed_tools=["Read"]` 与 `permission_mode="bypassPermissions"` 一起设置仍然会批准每个工具,包括 `Bash`、`Write` 和 `Edit`。如果你需要 `bypassPermissions` 但想要阻止特定工具,请使用 `disallowed_tools`。

110</Warning>110</Warning>

111 111 

112您也可以在 `.claude/settings.json` 中声明式地配置允许、拒绝和询问规则。当启用 `project` 设置源时,这些规则被读取,默认 `query()` 选项就是这样。如果您显式设置 `setting_sources`(TypeScript:`settingSources`),请包含 `"project"` 以使其应用。请参阅 [权限设置](/docs/zh-CN/settings-reference#permission-settings) 了解规则语法。112你也可以在 `.claude/settings.json` 中声明式地配置允许、拒绝和询问规则。当启用 `project` 设置源时会读取这些规则,默认 `query()` 选项就是这样。如果你显式设置 `setting_sources`(TypeScript:`settingSources`),请包含 `"project"` 以使其应用。请参阅[权限设置](/docs/zh-CN/settings-reference#permission-settings)了解规则语法。

113 113 

114<h2 id="permission-modes">114<h2 id="permission-modes">

115 权限模式115 权限模式


121 可用模式121 可用模式

122</h3>122</h3>

123 123 

124SDK 支持这些权限模式:124SDK 支持以下权限模式:

125 125 

126| 模式 | 描述 | 工具行为 |126| 模式 | 描述 | 工具行为 |

127| :------------------ | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |127| :------------------ | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

128| `default` | 标准权限行为 | 无基于模式的自动批准;需要批准且不匹配任何允许规则的调用会触发您的 `canUseTool` 回调 |128| `default` | 标准权限行为 | 无基于模式的自动批准;需要批准且不匹配任何允许规则的调用会触发您的 `canUseTool` 回调 |

129| `dontAsk` | 拒绝而不是提示 | 任何会提示的调用都被拒绝。由 `allowed_tools` 或规则批准的调用会运行,在 `default` 模式下不需要批准的调用也会运行;连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具即使您已预批准它们也被拒绝,`rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)也被拒绝。`canUseTool` 永远不会被调用 |129| `dontAsk` | 拒绝而不是提示 | 任何会提示的调用都被拒绝。由 `allowed_tools` 或规则批准的调用会运行,`default` 模式下不需要批准的调用也会运行;连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具即使您已预先批准也会被拒绝,`rm` 和 `rmdir` 针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)的删除也会被拒绝。`canUseTool` 永远不会被调用 |

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

131| `bypassPermissions` | 绕过权限检查 | 工具运行而无需权限提示,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。谨慎使用 |131| `bypassPermissions` | 绕过权限检查 | 工具运行时无需权限提示,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。请谨慎使用 |

132| `plan` | 规划模式 | Claude 在不编辑源文件的情况下探索和规划;文件编辑永远不会自动批准,并通过您的 `canUseTool` 回调提示 |132| `plan` | 规划模式 | Claude 在不编辑您的源文件的情况下探索和规划;文件编辑永远不会自动批准,而是通过您的 `canUseTool` 回调提示 |

133| `auto` | 模型分类批准 | 模型分类器批准或拒绝权限提示。请参阅[Auto 模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)了解可用性 |133| `auto` | 模型分类批准 | 模型分类器批准或拒绝权限提示。有关可用性,请参阅[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) |

134 134 

135<Warning>135<Warning>

136 **子代理继承:** 子代理在父会话的权限模式下运行,除非您在其[`AgentDefinition`](/docs/zh-CN/agent-sdk/typescript#agentdefinition)上设置 `permissionMode`,且父会话处于 `default`、`dontAsk` 或 `plan` 模式。即使这样,Claude Code 也永远不会应用 `"bypassPermissions"` 值。子代理仅在父会话本身处于 `bypassPermissions` 模式时才在该模式下运行。`bypassPermissions` 异常需要 Claude Code v2.1.267 或更高版本。136 **子代理继承:** 子代理在父会话的权限模式下运行,除非您在其[`AgentDefinition`](/docs/zh-CN/agent-sdk/typescript#agentdefinition)上设置 `permissionMode`,且父会话处于 `default`、`dontAsk` 或 `plan` 模式。即使这样,Claude Code 也永远不会应用 `"bypassPermissions"` 值。子代理仅在父会话本身处于 `bypassPermissions` 模式时才在该模式下运行。 `bypassPermissions` 异常需要 Claude Code v2.1.267 或更高版本。

137 137 

138 子代理可能有不同的系统提示和行为约束较少,比您的主代理,所以继承 `bypassPermissions` 授予它们完整的、自主的系统访问权限。[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)仍然适用。138 子代理可能具有不同的系统提示和比主代理更少受限的行为,因此继承 `bypassPermissions` 会授予它们完整的自主系统访问权限。[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)仍然适用。

139</Warning>139</Warning>

140 140 

141<h3 id="set-permission-mode">141<h3 id="set-permission-mode">

142 设置权限模式142 设置权限模式

143</h3>143</h3>

144 144 

145您可以在启动查询时设置权限模式一次,或在会话活跃时动态更改它。145您可以在启动查询时设置一次权限模式,或在会话活跃时动态更改它。

146 146 

147<Tabs>147<Tabs>

148 <Tab title="在查询时">148 <Tab title="在查询时">

149 在创建查询时传递 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式应用于整个会话,除非动态更改。149 在创建查询时传递 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式适用于整个会话,除非动态更改。

150 150 

151 <CodeGroup>151 <CodeGroup>

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


158 async for message in query(158 async for message in query(

159 prompt="Help me refactor this code",159 prompt="Help me refactor this code",

160 options=ClaudeAgentOptions(160 options=ClaudeAgentOptions(

161 permission_mode="default", # 在此处设置模式161 permission_mode="default", # 在此设置模式

162 ),162 ),

163 ):163 ):

164 if hasattr(message, "result"):164 if hasattr(message, "result"):


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

176 prompt: "Help me refactor this code",176 prompt: "Help me refactor this code",

177 options: {177 options: {

178 permissionMode: "default" // 在此处设置模式178 permissionMode: "default" // 在此设置模式

179 }179 }

180 })) {180 })) {

181 if ("result" in message) {181 if ("result" in message) {


190 </Tab>190 </Tab>

191 191 

192 <Tab title="在流式传输期间">192 <Tab title="在流式传输期间">

193 调用 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在会话中期更改模式。新模式立即对所有后续工具请求生效。这让您可以从限制性开始,随着信任建立而放松权限,例如在审查 Claude 的初始方法后切换到 `acceptEdits`。193 调用 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在会话中途更改模式。新模式立即对所有后续工具请求生效。这让您可以从限制性开始,随着信任建立而放宽权限,例如在审查 Claude 的初始方法后切换到 `acceptEdits`。

194 194 

195 <CodeGroup>195 <CodeGroup>

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


206 ) as client:206 ) as client:

207 await client.query("Help me refactor this code")207 await client.query("Help me refactor this code")

208 208 

209 # 在会话中期动态更改模式209 # 在会话中途动态更改模式

210 await client.set_permission_mode("acceptEdits")210 await client.set_permission_mode("acceptEdits")

211 211 

212 # 使用新权限模式处理消息212 # 使用新权限模式处理消息


229 }229 }

230 });230 });

231 231 

232 // 在会话中期动态更改模式232 // 在会话中途动态更改模式

233 await q.setPermissionMode("acceptEdits");233 await q.setPermissionMode("acceptEdits");

234 234 

235 // 使用新权限模式处理消息235 // 使用新权限模式处理消息


254 接受编辑模式(`acceptEdits`)254 接受编辑模式(`acceptEdits`)

255</h4>255</h4>

256 256 

257自动批准文件操作,以便 Claude 可以编辑代码而无需提示。其他工具(如不是文件系统操作的 Bash 命令)仍然需要正常权限。257自动批准文件操作,以便 Claude 可以编辑代码而无需提示。其他工具(如不是文件系统操作的 Bash 命令)仍需要正常权限。

258 258 

259**自动批准的操作:**259**自动批准的操作:**

260 260 

261* 文件编辑(Edit、Write 工具)261* 文件编辑(Edit、Write 工具)

262* 文件系统命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`262* 文件系统命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`

263 263 

264两者都仅适用于工作目录或 `additionalDirectories` 内的路径。在 `acceptEdits` 模式下,当 Claude 时,Claude Code 不会自动批准请求:264两者都仅适用于工作目录或 `additionalDirectories` 内的路径。在 `acceptEdits` 模式下,当 Claude 执行以下操作时,Claude Code 不会自动批准请求:

265 265 

266* 在该范围之外的路径上工作266* 在该范围之外的路径上工作

267* 写入受保护的路径267* 写入受保护的路径

268* 使用 `rm` 或 `rmdir` 移除[关键路径](/docs/zh-CN/permission-modes#critical-paths)268* 使用 `rm` 或 `rmdir` 删除[关键路径](/docs/zh-CN/permission-modes#critical-paths)

269 269 

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

271 271 

272<h4 id="don’t-ask-mode-dontask">272<h4 id="don’t-ask-mode-dontask">

273 不询问模式(`dontAsk`)273 不要询问模式(`dontAsk`)

274</h4>274</h4>

275 275 

276将任何权限提示转换为拒绝,无需调用 `canUseTool`。由 `allowed_tools`、`settings.json` 允许规则或 hook 预批准的工具正常运行,在 `default` 模式下不需要批准的调用也会运行,例如在您的工作目录内的文件读取和对 `Agent` 的调用。连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)即使允许规则匹配也被拒绝。`PreToolUse` hook 允许也不会清除关键路径移除。276将任何权限提示转换为拒绝,而不调用 `canUseTool`。由 `allowed_tools`、`settings.json` 允许规则或钩子预先批准的工具会正常运行,`default` 模式下不需要批准的调用也会运行,例如在您的工作目录内的文件读取和对 `Agent` 的调用。连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)的删除即使允许规则匹配也会被拒绝。`PreToolUse` 钩子允许也不会清除关键路径删除。

277 277 

278**使用时机:** 您想要为无头代理提供固定的、明确的工具表面,并且更喜欢硬拒绝而不是默默依赖 `canUseTool` 不存在。278**使用场景:** 您希望为无头代理提供固定的、明确的工具表面,并且更喜欢硬拒绝而不是依赖 `canUseTool` 不存在的无声依赖。

279 279 

280<h4 id="bypass-permissions-mode-bypasspermissions">280<h4 id="bypass-permissions-mode-bypasspermissions">

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

282</h4>282</h4>

283 283 

284自动批准工具使用而无需提示,除了下面警告中列出的情况。Hooks 仍然执行,如果需要可以阻止操作。284自动批准工具使用而无需提示,除了下面警告中列出的情况。钩子仍会执行,如果需要可以阻止操作。

285 285 

286<Warning>286<Warning>

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

288 288 

289 `allowed_tools` 不约束此模式。每个工具都被批准,而不仅仅是您列出的工具。这些控制仍然适用:289 `allowed_tools` 不会限制此模式。每个工具都被批准,而不仅仅是您列出的工具。这些控制仍然适用:

290 290 

291 * 拒绝规则、显式 `ask` 规则和 hooks 在模式检查之前被评估,仍然可以阻止工具。291 * 拒绝规则、显式 `ask` 规则和钩子在模式检查之前被评估,仍然可以阻止工具。

292 * 连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)仍然会通过您的 `canUseTool` 回调。292 * 连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)的删除仍然会转到您的 `canUseTool` 回调。

293 * [跨会话消息保护](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然适用。293 * [跨会话消息保护措施](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然适用。

294</Warning>294</Warning>

295 295 

296<h4 id="plan-mode-plan">296<h4 id="plan-mode-plan">

297 规划模式(`plan`)297 规划模式(`plan`)

298</h4>298</h4>

299 299 

300Claude 探索代码库并生成计划而不编辑您的源文件。只读工具在 `default` 权限模式下运行。300Claude 探索代码库并生成计划,而不编辑您的源文件。只读工具的运行方式与 `default` 权限模式相同。

301 301 

302文件编辑在规划模式下永远不会自动批准,即使允许规则匹配。它们通过您的 `canUseTool` 回调提示。在 Claude Code v2.1.212 或更高版本上,修改文件的 shell 命令,如 `touch` 和 `rm`,以相同方式到达您的 `canUseTool` 回调。302在规划模式下,文件编辑永远不会自动批准,即使允许规则匹配。它们会通过您的 `canUseTool` 回调提示。 在 Claude Code v2.1.212 或更高版本上,修改文件的 shell 命令(如 `touch` 和 `rm`)会以相同方式到达您的 `canUseTool` 回调。

303 303 

304Claude 可能使用 `AskUserQuestion` 在最终确定计划之前澄清需求。请参阅[处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input#handle-clarifying-questions)以处理这些提示。304Claude 可能会使用 `AskUserQuestion` 在最终确定计划之前澄清需求。有关处理这些提示的信息,请参阅[处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input#handle-clarifying-questions)。

305 305 

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

307 307 

308<h2 id="related-resources">308<h2 id="related-resources">

309 相关资源309 相关资源

310</h2>310</h2>

311 311 

312对于权限评估流程中的其他步骤:312有关权限评估流程中的其他步骤:

313 313 

314* [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input):交互式批准提示和澄清问题314* [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input):交互式批准提示和澄清问题

315* [Hooks 指南](/docs/zh-CN/agent-sdk/hooks):在代理生命周期中的关键点运行自定义代码315* [Hooks 指南](/docs/zh-CN/agent-sdk/hooks):在代理生命周期中的关键点运行自定义代码

Details

69 69 

70Plugin 路径可以是:70Plugin 路径可以是:

71 71 

72* **相对路径**:相对于你的当前工作目录解析(例如,`"./plugins/my-plugin"`)72* **相对路径**:相对于 `cwd` 选项解析(例如,`"./plugins/my-plugin"`)

73* **绝对路径**:完整文件系统路径(例如,`"/home/user/plugins/my-plugin"`)73* **绝对路径**:完整文件系统路径(例如,`"/home/user/plugins/my-plugin"`)

74 74 

75<Note>75<Note>

Details

513 async def receive_messages(self) -> AsyncIterator[Message]513 async def receive_messages(self) -> AsyncIterator[Message]

514 async def receive_response(self) -> AsyncIterator[Message]514 async def receive_response(self) -> AsyncIterator[Message]

515 async def interrupt(self) -> None515 async def interrupt(self) -> None

516 async def set_permission_mode(self, mode: str) -> None516 async def set_permission_mode(self, mode: PermissionMode) -> None

517 async def set_model(self, model: str | None = None) -> None517 async def set_model(self, model: str | None = None) -> None

518 async def rewind_files(self, user_message_id: str) -> None518 async def rewind_files(self, user_message_id: str) -> None

519 async def get_mcp_status(self) -> McpStatusResponse519 async def get_mcp_status(self) -> McpStatusResponse


543| `reconnect_mcp_server(server_name)` | 重试连接到失败或断开连接的 MCP 服务器 |543| `reconnect_mcp_server(server_name)` | 重试连接到失败或断开连接的 MCP 服务器 |

544| `toggle_mcp_server(server_name, enabled)` | 在会话中启用或禁用 MCP 服务器。禁用会移除其工具 |544| `toggle_mcp_server(server_name, enabled)` | 在会话中启用或禁用 MCP 服务器。禁用会移除其工具 |

545| `stop_task(task_id)` | 停止运行的后台任务。一个状态为 `"stopped"` 的 [`TaskNotificationMessage`](#tasknotificationmessage) 随后在消息流中出现 |545| `stop_task(task_id)` | 停止运行的后台任务。一个状态为 `"stopped"` 的 [`TaskNotificationMessage`](#tasknotificationmessage) 随后在消息流中出现 |

546| `get_server_info()` | 获取服务器信息,包括会话 ID 和功能 |546| `get_server_info()` | 获取服务器的初始化信息,包括可用命令和输出样式 |

547| `disconnect()` | 从 Claude 断开连接 |547| `disconnect()` | 从 Claude 断开连接 |

548 548 

549<h4 id="context-manager-support">549<h4 id="context-manager-support">


2006所有内容块的联合类型。2006所有内容块的联合类型。

2007 2007 

2008```python theme={null}2008```python theme={null}

2009ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock2009ContentBlock = (

2010 TextBlock

2011 | ThinkingBlock

2012 | ToolUseBlock

2013 | ToolResultBlock

2014 | ServerToolUseBlock

2015 | ServerToolResultBlock

2016)

2010```2017```

2011 2018 

2012<h3 id="textblock">2019<h3 id="textblock">


3677| `allowedDomains` | `list[str]` | `[]` | 沙箱化进程可以访问的域名 |3684| `allowedDomains` | `list[str]` | `[]` | 沙箱化进程可以访问的域名 |

3678| `deniedDomains` | `list[str]` | `[]` | 沙箱化进程无法访问的域名。优先于 `allowedDomains` |3685| `deniedDomains` | `list[str]` | `[]` | 沙箱化进程无法访问的域名。优先于 `allowedDomains` |

3679| `allowManagedDomainsOnly` | `bool` | `False` | 仅限托管设置:在托管设置中设置时,忽略 `allowedDomains` 和来自非托管设置源的 `WebFetch(domain:...)` 允许规则。通过 SDK 选项设置时无效 |3686| `allowManagedDomainsOnly` | `bool` | `False` | 仅限托管设置:在托管设置中设置时,忽略 `allowedDomains` 和来自非托管设置源的 `WebFetch(domain:...)` 允许规则。通过 SDK 选项设置时无效 |

3680| `allowUnixSockets` | `list[str]` | `[]` | 进程可以访问的 Unix socket 路径(例如 Docker socket) |3687| `allowUnixSockets` | `list[str]` | `[]` | 仅限 macOS:进程可以访问的 Unix socket 路径,例如 Docker socket。在 Linux 上被忽略 |

3681| `allowAllUnixSockets` | `bool` | `False` | 允许访问所有 Unix sockets |3688| `allowAllUnixSockets` | `bool` | `False` | 允许访问所有 Unix sockets |

3682| `allowLocalBinding` | `bool` | `False` | 允许进程绑定到本地端口(例如开发服务器) |3689| `allowLocalBinding` | `bool` | `False` | 允许进程绑定到本地端口(例如开发服务器) |

3683| `allowMachLookup` | `list[str]` | `[]` | 仅限 macOS:允许的 XPC/Mach 服务名称。支持尾部通配符 |3690| `allowMachLookup` | `list[str]` | `[]` | 仅限 macOS:允许的 XPC/Mach 服务名称。支持尾部通配符 |

Details

105 105 

106在流的开始附近,SDK 产生一个子类型为 `init` 的系统消息。检查其 `skills` 数组以在 Claude 开始工作前确认你的 skills 已加载。该数组包括你定义的用户可调用 skills,以及 [Claude Code 包含的捆绑 skills](/docs/zh-CN/skills#bundled-skills)。106在流的开始附近,SDK 产生一个子类型为 `init` 的系统消息。检查其 `skills` 数组以在 Claude 开始工作前确认你的 skills 已加载。该数组包括你定义的用户可调用 skills,以及 [Claude Code 包含的捆绑 skills](/docs/zh-CN/skills#bundled-skills)。

107 107 

108该数组仅列出用户可调用的 skills。在其 frontmatter 中具有 [`user-invocable: false`](/docs/zh-CN/skills#control-who-invokes-a-skill) 的 skill 会加载并保持对 Claude 可用,但不会出现在数组中。该数组反映会话发现的内容,无论它们是否在你的 `skills` 列表中,都列出相同的 skills。108该数组仅列出用户可调用的 skills。在其 frontmatter 中具有 [`user-invocable: false`](/docs/zh-CN/skills#control-who-invokes-a-skill) 的 skill 会加载并保持对 Claude 可用,但不会出现在数组中。该数组列出相同的 skills,无论它们是否在你的 `skills` 列表中。

109 109 

110<h3 id="allow-only-specific-skills">110<h3 id="allow-only-specific-skills">

111 仅允许特定 skills111 仅允许特定 skills


173Available commands: ["clear", "compact", "context", "usage", "code-review", "verify", "security-check", ...]173Available commands: ["clear", "compact", "context", "usage", "code-review", "verify", "security-check", ...]

174```174```

175 175 

176你的用户可调用 skills 出现在此列表和 [确认 skills 已加载](#confirm-skills-loaded) 中的 `skills` 数组中。`slash_commands` 列表添加会话中可用的其余命令。在其 frontmatter 中具有 [`user-invocable: false`](/docs/zh-CN/skills#control-who-invokes-a-skill) 的 skill 不会出现在任一列表中。配置 [MCP servers](/docs/zh-CN/agent-sdk/mcp) 的会话也可以公开 [MCP prompts 作为命令](/docs/zh-CN/mcp#use-mcp-prompts-as-commands)。176在其 frontmatter 中具有 [`user-invocable: false`](/docs/zh-CN/skills#control-who-invokes-a-skill) 的 skill 不会出现在此列表或 [确认 skills 已加载](#confirm-skills-loaded) 中的 `skills` 数组中。配置 [MCP servers](/docs/zh-CN/agent-sdk/mcp) 的会话也可以公开 [MCP prompts 作为命令](/docs/zh-CN/mcp#use-mcp-prompts-as-commands)。

177 177 

178<h3 id="dispatch-commands-by-name">178<h3 id="dispatch-commands-by-name">

179 按名称分派命令179 按名称分派命令

Details

79 79 

80启用部分消息时,您会收到包装在对象中的原始 Claude API 流事件。该类型在每个 SDK 中有不同的名称:80启用部分消息时,您会收到包装在对象中的原始 Claude API 流事件。该类型在每个 SDK 中有不同的名称:

81 81 

82* **Python**: `StreamEvent`(从 `claude_agent_sdk.types` 导入)82* **Python**: [`StreamEvent`](/docs/zh-CN/agent-sdk/python#streamevent)(从 `claude_agent_sdk.types` 导入)

83* **TypeScript**: `SDKPartialAssistantMessage`,其中 `type: 'stream_event'`83* **TypeScript**: [`SDKPartialAssistantMessage`](/docs/zh-CN/agent-sdk/typescript#sdkpartialassistantmessage),其中 `type: 'stream_event'`

84 84 

85两者都包含原始 Claude API 事件,而不是累积的文本。您需要自己提取和累积文本增量。以下是每种类型的结构:85两者都包含原始 Claude API 事件,而不是累积的文本。您需要自己提取和累积文本增量。

86 

87<CodeGroup>

88 ```python Python theme={null}

89 @dataclass

90 class StreamEvent:

91 uuid: str # Unique identifier for this event

92 session_id: str # Session identifier

93 event: dict[str, Any] # The raw Claude API stream event

94 parent_tool_use_id: str | None # Always None

95 ```

96 

97 ```typescript TypeScript theme={null}

98 type SDKPartialAssistantMessage = {

99 type: "stream_event";

100 event: BetaRawMessageStreamEvent; // From Anthropic SDK

101 parent_tool_use_id: string | null;

102 uuid: UUID;

103 session_id: string;

104 ttft_ms?: number; // Time to first token in ms, present only on message_start events

105 user_message_uuid?: string;

106 };

107 ```

108</CodeGroup>

109 86 

110`parent_tool_use_id` 字段在 Python 中始终为 `None`,在 TypeScript 中始终为 `null`。流事件仅针对主会话发出;来自子代理的令牌级增量不会被转发。要将输出归属于子代理,请使用完整消息,这些消息携带 `parent_tool_use_id`。请参阅[检测子代理调用](/docs/zh-CN/agent-sdk/subagents#detect-subagent-invocation)。87`parent_tool_use_id` 字段在 Python 中始终为 `None`,在 TypeScript 中始终为 `null`。流事件仅针对主会话发出;来自子代理的令牌级增量不会被转发。要将输出归属于子代理,请使用完整消息,这些消息携带 `parent_tool_use_id`。请参阅[检测子代理调用](/docs/zh-CN/agent-sdk/subagents#detect-subagent-invocation)。

111 88 

Details

17```17```

18 18 

19<Note>19<Note>

20 SDK 为您的平台捆绑了一个本地 Claude Code 二进制文件,作为可选依赖项,例如 `@anthropic-ai/claude-agent-sdk-darwin-arm64`。您无需单独安装 Claude Code。如果您的包管理器跳过可选依赖项,SDK 会抛出 `Native CLI binary for <platform> not found`;改为将 [`pathToClaudeCodeExecutable`](#options) 设置为单独安装的 `claude` 二进制文件。20 SDK 为您的平台捆绑了一个本地 Claude Code 二进制文件,作为可选依赖项,例如 `@anthropic-ai/claude-agent-sdk-darwin-arm64`。大多数安装无需单独安装 Claude Code。SDK 版本跟踪捆绑的 Claude Code 版本。SDK v0.3.191 捆绑 Claude Code v2.1.191,因此本页面上需要特定 Claude Code 版本的功能需要具有相同补丁号或更高版本的 SDK 版本。如果您的包管理器跳过可选依赖项,SDK 会抛出 `Native CLI binary for <platform>-<arch> not found`;改为将 [`pathToClaudeCodeExecutable`](#options) 设置为单独安装的 `claude` 二进制文件。

21 

22 如果您的包管理器不应用 npm 的 `libc` 字段(如 Yarn 1.x 不应用),您会在 Linux 上同时获得 glibc 和 musl 平台包,大约使安装大小翻倍。在 Agent SDK v0.2.141 或更高版本上,SDK 仍然会启动正确的变体。要在容器镜像中回收空间,请删除与您的应用运行的 libc 不匹配的平台包;对于 x64 上的 glibc 运行时,即 `rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl`。在开发机器上删除是临时的,因为 Yarn 会在下一次依赖项更改时重新安装该包。

21</Note>23</Note>

22 24 

23<h3 id="compile-to-a-single-executable">25<h3 id="compile-to-a-single-executable">

24 编译为单个可执行文件26 编译为单个可执行文件

25</h3>27</h3>

26 28 

27当您使用 `bun build --compile` 将应用程序编译为单文件可执行文件时,SDK 无法在运行时解析捆绑的 CLI 二进制文件。`require.resolve` 在编译后的可执行文件的 `$bunfs` 虚拟文件系统内不起作用,因此 SDK 会抛出 `Native CLI binary for <platform> not found`。29当您使用 `bun build --compile` 将应用程序编译为单文件可执行文件时,SDK 无法在运行时解析捆绑的 CLI 二进制文件。`require.resolve` 在编译后的可执行文件的 `$bunfs` 虚拟文件系统内不起作用,因此 SDK 会抛出 `Native CLI binary for <platform>-<arch> not found`。

28 30 

29要解决此问题,请将平台二进制文件作为文件资产嵌入,在启动时使用 `extractFromBunfs()` 将其提取到真实路径,然后将该路径传递给 [`pathToClaudeCodeExecutable`](#options)。31要解决此问题,请将平台二进制文件作为文件资产嵌入,在启动时使用 `extractFromBunfs()` 将其提取到真实路径,然后将该路径传递给 [`pathToClaudeCodeExecutable`](#options)。

30 32 


145 description: string,147 description: string,

146 inputSchema: Schema,148 inputSchema: Schema,

147 handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,149 handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,

148 extras?: { annotations?: ToolAnnotations }150 extras?: { annotations?: ToolAnnotations; searchHint?: string; alwaysLoad?: boolean }

149): SdkMcpToolDefinition<Schema>;151): SdkMcpToolDefinition<Schema>;

150```152```

151 153 


154</h4>156</h4>

155 157 

156| 参数 | 类型 | 描述 |158| 参数 | 类型 | 描述 |

157| :------------ | :---------------------------------------------------------------- | :--------------------------------- |159| :------------ | :----------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |

158| `name` | `string` | 工具的名称 |160| `name` | `string` | 工具的名称 |

159| `description` | `string` | 工具功能的描述 |161| `description` | `string` | 工具功能的描述 |

160| `inputSchema` | `Schema extends AnyZodRawShape` | 定义工具输入参数的 Zod 架构(支持 Zod 3 和 Zod 4) |162| `inputSchema` | `Schema extends AnyZodRawShape` | 定义工具输入参数的 Zod 架构(支持 Zod 3 和 Zod 4) |

161| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#calltoolresult)`>` | 执行工具逻辑的异步函数 |163| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#calltoolresult)`>` | 执行工具逻辑的异步函数 |

162| `extras` | `{ annotations?: `[`ToolAnnotations`](#toolannotations)` }` | 可选的 MCP 工具注释,为客户端提供行为提示 |164| `extras` | `{ annotations?: `[`ToolAnnotations`](#toolannotations)`; searchHint?: string; alwaysLoad?: boolean }` | 可选的 extras。`annotations` 为客户端提供 MCP 行为提示。`searchHint` 是当[工具搜索](/docs/zh-CN/agent-sdk/tool-search)处于活动状态时在延迟工具列表中显示的单行功能短语。`alwaysLoad: true` 将此工具的完整架构保留在初始提示中,而不是延迟它 |

163 165 

164<h4 id="toolannotations">166<h4 id="toolannotations">

165 `ToolAnnotations`167 `ToolAnnotations`


200function createSdkMcpServer(options: {202function createSdkMcpServer(options: {

201 name: string;203 name: string;

202 version?: string;204 version?: string;

205 instructions?: string;

203 tools?: Array<SdkMcpToolDefinition<any>>;206 tools?: Array<SdkMcpToolDefinition<any>>;

207 alwaysLoad?: boolean;

208 timeout?: number;

204}): McpSdkServerConfigWithInstance;209}): McpSdkServerConfigWithInstance;

205```210```

206 211 


209</h4>214</h4>

210 215 

211| 参数 | 类型 | 描述 |216| 参数 | 类型 | 描述 |

212| :---------------- | :---------------------------- | :----------------------------- |217| :--------------------- | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- |

213| `options.name` | `string` | MCP 服务器的名称 |218| `options.name` | `string` | MCP 服务器的名称 |

214| `options.version` | `string` | 可选版本字符串 |219| `options.version` | `string` | 可选版本字符串 |

220| `options.instructions` | `string` | 可选服务器说明,从 `initialize` 返回并作为 MCP 说明块呈现给模型 |

215| `options.tools` | `Array<SdkMcpToolDefinition>` | 使用 [`tool()`](#tool) 创建的工具定义数组 |221| `options.tools` | `Array<SdkMcpToolDefinition>` | 使用 [`tool()`](#tool) 创建的工具定义数组 |

222| `options.alwaysLoad` | `boolean` | 当为 `true` 时,来自此服务器的每个工具都保留在初始提示中,永远不会在[工具搜索](/docs/zh-CN/agent-sdk/tool-search)后延迟。与 [`tool()`](#tool) 中的每个工具 `alwaysLoad` 结合 |

223| `options.timeout` | `number` | 此服务器的工具调用超时(毫秒)。Claude Code 将其应用于此服务器以代替 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars)。传递至少 1000 的整数。Claude Code 忽略其他值。需要 TypeScript Agent SDK v0.3.248 或更高版本 |

216 224 

217<h3 id="listsessions">225<h3 id="listsessions">

218 `listSessions()`226 `listSessions()`


296</h4>304</h4>

297 305 

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

299| :------------------- | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |307| :------------------- | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |

300| `type` | `"user" \| "assistant"` | 消息角色 |308| `type` | `"user" \| "assistant"` | 消息角色 |

301| `uuid` | `string` | 唯一消息标识符 |309| `uuid` | `string` | 唯一消息标识符 |

302| `session_id` | `string` | 此消息所属的会话 |310| `session_id` | `string` | 此消息所属的会话 |

303| `message` | `unknown` | 来自记录的原始消息有效负载 |311| `message` | `unknown` | 来自记录的原始消息有效负载 |

304| `parent_tool_use_id` | `string \| null` | 对于子代理消息,生成 `Agent` 工具调用的 `tool_use_id`。对于主会话消息和较旧的会话为 `null` |312| `parent_tool_use_id` | `string \| null` | 对于子代理消息,生成 `Agent` 工具调用的 `tool_use_id`。对于主会话消息和较旧的会话为 `null` |

305| `parent_agent_id` | `string \| null` | 对于来自[嵌套子代理](/docs/zh-CN/sub-agents#spawn-nested-subagents)的消息,生成该消息的子代理的 `agentId`。对于主会话消息、来自顶级子代理的消息和较旧的会话为 `null`。需要 Claude Code v2.1.202 或更高版本 |313| `parent_agent_id` | `string \| null` | 对于来自[嵌套子代理](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)的消息,生成该消息的子代理的 `agentId`。对于主会话消息、来自顶级子代理的消息和较旧的会话为 `null`。需要 Claude Code v2.1.202 或更高版本 |

306 314 

307<h4 id="example-3">315<h4 id="example-3">

308 示例316 示例


404使用与 CLI 相同的合并引擎为给定目录解析有效的 Claude Code 设置,无需生成 Claude CLI。在调用 `query()` 之前使用它来检查 `query()` 调用将看到的配置。412使用与 CLI 相同的合并引擎为给定目录解析有效的 Claude Code 设置,无需生成 Claude CLI。在调用 `query()` 之前使用它来检查 `query()` 调用将看到的配置。

405 413 

406<Note>414<Note>

407 此函数处于 alpha 阶段,其 API 在稳定之前可能会更改。它读取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,以与 CLI 启动保持一致,但不执行管理员配置的 `policyHelper` 子进程。`permissions.defaultMode` 字段从所有层级(包括项目设置)按原样返回。CLI 在遵守升级权限模式之前应用的信任过滤器不被应用。415 此函数处于 alpha 阶段,其 API 在稳定之前可能会更改。

408</Note>416</Note>

409 417 

418快照与实时 `query()` 会话应用的内容不同:

419 

420* **`policyHelper`**:`resolveSettings()` 读取 MDM 源,包括 macOS plist 和 Windows HKLM/HKCU,但不执行管理员配置的 `policyHelper` 子进程。

421* **服务器管理的设置**:`resolveSettings()` 不获取[服务器管理的设置](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)。将它们作为 `options.serverManagedSettings` 传递以包含它们。

422* **`defaultMode`**:快照从每个层级按原样返回 `permissions.defaultMode`,因此它可以包括项目和本地设置中的 `'auto'` 和 `'bypassPermissions'` 值,[实时会话忽略](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)这些值。

423 

410```typescript theme={null}424```typescript theme={null}

411function resolveSettings(425function resolveSettings(

412 options?: ResolveSettingsOptions426 options?: ResolveSettingsOptions


420`resolveSettings()` 接受单个选项对象。所有字段都是可选的。434`resolveSettings()` 接受单个选项对象。所有字段都是可选的。

421 435 

422| 参数 | 类型 | 默认值 | 描述 |436| 参数 | 类型 | 默认值 | 描述 |

423| :------------------------------ | :------------------------------------ | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |437| :------------------------------ | :------------------------------------ | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

424| `options.cwd` | `string` | `process.cwd()` | 用于解析项目和本地设置的相对目录 |438| `options.cwd` | `string` | `process.cwd()` | 用于解析项目和本地设置的相对目录 |

425| `options.settingSources` | [`SettingSource`](#settingsource)`[]` | 所有源 | 要加载的文件系统源。传递 `[]` 以跳过用户、项目和本地设置。[端点管理的策略](/docs/zh-CN/settings#settings-files)在所有情况下都会加载。服务器管理的设置取自主机传递的 `serverManagedSettings`,或从 CLI 的磁盘缓存中读取;快照不会从网络获取它们 |439| `options.settingSources` | [`SettingSource`](#settingsource)`[]` | 所有源 | 要加载的文件系统源。传递 `[]` 以跳过用户、项目和本地设置。[端点管理的策略](/docs/zh-CN/managed-settings#delivery-mechanisms)在所有情况下都会加载。`resolveSettings()` 仅当您传递 `options.serverManagedSettings` 时才包括服务器管理的设置 |

426| `options.managedSettings` | `Settings` | `undefined` | 由嵌入主机提供的限制性策略层设置。当存在管理员部署的托管层时被删除;当 [`parentSettingsBehavior`](/docs/zh-CN/settings#available-settings) 为 `"merge"` 时在该层下合并。非限制性密钥(如 `model`)会被静默删除,以便此选项可以加强托管策略但不能放松它 |440| `options.managedSettings` | `Settings` | `undefined` | 由嵌入主机提供的策略层设置。遵循与 [`managedSettings` in `Options`](#options) 相同的规则,除了 `resolveSettings()` 不执行配置的 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper),因此快照可以包括实时会话删除的设置 |

427| `options.serverManagedSettings` | `Settings` | `undefined` | 来自 `/api/claude_code/settings` 的服务器托管设置有效负载。非限制性密钥不经过滤地通过 |441| `options.serverManagedSettings` | `Settings` | `undefined` | 来自 `/api/claude_code/settings` 的服务器管理设置有效负载。非限制性密钥不经过滤地通过 |

428 442 

429<h4 id="return-type-resolvedsettings">443<h4 id="return-type-resolvedsettings">

430 返回类型:`ResolvedSettings`444 返回类型:`ResolvedSettings`


442 示例456 示例

443</h4>457</h4>

444 458 

445下面的示例为项目目录解析设置,并打印控制清理周期的源。459下面的示例为项目目录解析设置并打印控制清理周期的源。在没有设置文件设置 `cleanupPeriodDays` 的机器上,两条打印的行都显示 `undefined` 作为值,这是预期的输出而不是错误。

446 460 

447```typescript theme={null}461```typescript theme={null}

448import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";462import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";


467`query()` 函数的配置对象。481`query()` 函数的配置对象。

468 482 

469| 属性 | 类型 | 默认值 | 描述 |483| 属性 | 类型 | 默认值 | 描述 |

470| :-------------------------------- | :------------------------------------------------------------------------------------------------------- | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |484| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

471| `abortController` | `AbortController` | `new AbortController()` | 用于取消操作的控制器 |485| `abortController` | `AbortController` | `new AbortController()` | 用于取消操作的控制器 |

472| `additionalDirectories` | `string[]` | `[]` | Claude 可以访问的其他目录 |486| `additionalDirectories` | `string[]` | `[]` | Claude 可以访问的其他目录。SDK 将每个条目作为 `--add-dir` 传递给 Claude Code,因此使用 `project` 设置源时,Claude Code 也会[加载目录的 skills、commands 和 subagents](/docs/zh-CN/permissions#additional-directories-grant-file-access-not-configuration) |

473| `agent` | `string` | `undefined` | 主线程的代理名称。代理必须在 `agents` 选项或设置中定义 |487| `agent` | `string` | `undefined` | 主线程的代理名称。代理必须在 `agents` 选项或设置中定义 |

474| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 以编程方式定义子代理 |488| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 以编程方式定义 subagents |

475| `agentProgressSummaries` | `boolean` | `false` | 当为 `true` 时,为子代理生成单行进度摘要,并通过 `summary` 字段在 [`task_progress`](#sdktaskprogressmessage) 事件上转发它们。适用于前台和后台子代理 |489| `agentProgressSummaries` | `boolean` | `false` | 当为 `true` 时,为 subagents 生成单行进度摘要,并通过 `summary` 字段在 [`task_progress`](#sdktaskprogressmessage) 事件上转发它们。适用于前台和后台 subagents |

476| `allowDangerouslySkipPermissions` | `boolean` | `false` | 启用绕过权限。使用 `permissionMode: 'bypassPermissions'` 时需要 |490| `allowDangerouslySkipPermissions` | `boolean` | `false` | 启用绕过权限。使用 `permissionMode: 'bypassPermissions'` 时需要 |

477| `allowedTools` | `string[]` | `[]` | 无需提示即可自动批准的工具。这不会将 Claude 限制为仅这些工具;未列出的工具会通过 `permissionMode` 和 `canUseTool` 进行处理。使用 `disallowedTools` 阻止工具。请参阅[权限](/docs/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |491| `allowedTools` | `string[]` | `[]` | 无需提示即可自动批准的工具。这不会将 Claude 限制为仅这些工具。如果您在此处命名[任务跟踪工具](/docs/zh-CN/agent-sdk/todo-tracking#model-availability)之一,Claude Code 也会选择加入会话。其他未列出的工具会通过 `permissionMode` 和 `canUseTool` 进行处理。使用 `disallowedTools` 阻止工具。请参阅[权限](/docs/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |

478| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 启用测试功能 |492| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 启用测试功能 |

479| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 自定义权限函数,仅在[权限流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)落到提示时调用。不会为 `allowedTools`、allow 规则或 `permissionMode` 自动批准的调用调用。`AskUserQuestion`、connector 工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)和标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具即使您已允许它们也会到达它;在 `dontAsk` 模式下这些会被拒绝。请参阅 [`CanUseTool`](#canusetool) 了解详情 |493| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 自定义权限函数,仅在[权限流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)落到提示时调用。不会为 `allowedTools`、allow 规则或 `permissionMode` 自动批准的调用调用。allow 规则不会预先批准[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves);请参阅[权限如何被评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)了解哪些到达回调以及在 `dontAsk` 和 `auto` 模式下会发生什么。请参阅 [`CanUseTool`](#canusetool) 了解详情 |

480| `continue` | `boolean` | `false` | 继续最近的对话 |494| `continue` | `boolean` | `false` | 继续最近的对话 |

481| `cwd` | `string` | `process.cwd()` | 当前工作目录 |495| `cwd` | `string` | `process.cwd()` | 当前工作目录 |

482| `debug` | `boolean` | `false` | 为 Claude Code 进程启用调试模式 |496| `debug` | `boolean` | `false` | 为 Claude Code 进程启用调试模式 |

483| `debugFile` | `string` | `undefined` | 将调试日志写入特定文件路径。隐式启用调试模式 |497| `debugFile` | `string` | `undefined` | 将调试日志写入特定文件路径。隐式启用调试模式 |

484| `disallowedTools` | `string[]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 会从 Claude 的上下文中移除该工具。作用域规则如 `"Bash(rm *)"` 会保留该工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用。请参阅[权限](/docs/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |498| `disallowedTools` | `string[]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 会从 Claude 的上下文中移除该工具。作用域规则如 `"Bash(rm *)"` 会保留该工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用,针对[按照书写方式](/docs/zh-CN/permissions#bash-rule-limits)的命令。请参阅[权限](/docs/zh-CN/agent-sdk/permissions#allow-and-deny-rules) |

485| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | 模型默认值 | 控制 Claude 在其响应中投入的努力程度。与自适应思考一起工作以指导思考深度。请参阅[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level) |499| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `undefined` | 控制 Claude 在其响应中投入的努力程度。与自适应思考一起工作以指导思考深度。请参阅[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level) |

486| `enableFileCheckpointing` | `boolean` | `false` | 启用文件更改跟踪以进行回滚。请参阅[文件 checkpointing](/docs/zh-CN/agent-sdk/file-checkpointing) |500| `enableFileCheckpointing` | `boolean` | `false` | 启用文件更改跟踪以进行回滚。请参阅[文件 checkpointing](/docs/zh-CN/agent-sdk/file-checkpointing) |

487| `env` | `Record<string, string \| undefined>` | `process.env` | 环境变量。设置此选项时,这会替换子进程环境而不是与 `process.env` 合并,因此请传递 `{ ...process.env, YOUR_VAR: 'value' }` 以保留继承的变量如 `PATH`。请参阅[处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses)了解此模式的示例,以及[环境变量](/docs/zh-CN/env-vars)了解底层 CLI 读取的变量。设置 `CLAUDE_AGENT_SDK_CLIENT_APP` 以在 User-Agent 标头中标识您的应用 |501| `env` | `Record<string, string \| undefined>` | `process.env` | 环境变量。设置此选项时,这会替换子进程环境而不是与 `process.env` 合并,因此请传递 `{ ...process.env, YOUR_VAR: 'value' }` 以保留继承的变量如 `PATH`。请参阅[处理缓慢或停滞的 API 响应](#handle-slow-or-stalled-api-responses)了解此模式的示例,以及[环境变量](/docs/zh-CN/env-vars)了解底层 CLI 读取的变量。设置 `CLAUDE_AGENT_SDK_CLIENT_APP` 以在 User-Agent 标头中标识您的应用 |

488| `executable` | `'bun' \| 'deno' \| 'node'` | 自动检测 | 要使用的 JavaScript 运行时 |502| `executable` | `'bun' \| 'deno' \| 'node'` | 自动检测 | 要使用的 JavaScript 运行时 |


490| `extraArgs` | `Record<string, string \| null>` | `{}` | 其他参数 |504| `extraArgs` | `Record<string, string \| null>` | `{}` | 其他参数 |

491| `fallbackModel` | `string` | `undefined` | 主模型失败时使用的模型 |505| `fallbackModel` | `string` | `undefined` | 主模型失败时使用的模型 |

492| `forkSession` | `boolean` | `false` | 使用 `resume` 恢复时,分叉到新会话 ID 而不是继续原始会话 |506| `forkSession` | `boolean` | `false` | 使用 `resume` 恢复时,分叉到新会话 ID 而不是继续原始会话 |

493| `forwardSubagentText` | `boolean` | `false` | 转发子代理文本和思考块作为助手和用户消息,并设置 `parent_tool_use_id`,以便消费者可以呈现嵌套记录。默认情况下,仅从子代理发出 `tool_use` 和 `tool_result` 块 |507| `forwardSubagentText` | `boolean` | `false` | 转发 subagent 文本和思考块作为助手和用户消息,并设置 `parent_tool_use_id`,以便消费者可以呈现嵌套记录。没有此选项,Claude Code 会发出 subagent `tool_use` 和 `tool_result` 块,但不会发出文本或思考。来自每个嵌套深度的 subagents 的消息在 Claude Code v2.1.219 及更高版本上转发;在 v2.1.219 之前,仅出现来自深度 1 subagents 的消息 |

494| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | 事件的 Hook 回调 |508| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | 事件的 Hook 回调 |

495| `includeHookEvents` | `boolean` | `false` | 在消息流中包括 hook 生命周期事件,作为 [`SDKHookStartedMessage`](#sdkhookstartedmessage)、[`SDKHookProgressMessage`](#sdkhookprogressmessage) 和 [`SDKHookResponseMessage`](#sdkhookresponsemessage)。`SessionStart` 和 `Setup` hooks 的生命周期事件始终包括在内,不需要此选项 |509| `includeHookEvents` | `boolean` | `false` | 在消息流中包括 hook 生命周期事件,作为 [`SDKHookStartedMessage`](#sdkhookstartedmessage)、[`SDKHookProgressMessage`](#sdkhookprogressmessage) 和 [`SDKHookResponseMessage`](#sdkhookresponsemessage)。`SessionStart` 和 `Setup` hooks 的生命周期事件始终包括在内,不需要此选项。某些 hook 事件,如 `Notification`、`SessionEnd`、`PreCompact` 和 `PostCompact`,即使使用此选项也永远不会产生 `SDKHookStartedMessage`。对于这些事件,Claude Code 仍会在运行超过一秒的命令 hook 产生输出时发出 `SDKHookProgressMessage`,并仅在[在后台运行](/docs/zh-CN/hooks#run-hooks-in-the-background)的 hook 完成时发出 `SDKHookResponseMessage` |

496| `includePartialMessages` | `boolean` | `false` | 包括部分消息事件 |510| `includePartialMessages` | `boolean` | `false` | 包括部分消息事件 |

497| `loadTimeoutMs` | `number` | `60000` | *Alpha.* 每个 `sessionStore.load()` 和 `sessionStore.listSubkeys()` 调用在恢复物化期间的超时时间(以毫秒为单位)。如果适配器未在此窗口内解决,查询将失败而不是挂起。未设置 `sessionStore` 时忽略 |511| `loadTimeoutMs` | `number` | `60000` | *Alpha.* 每个 `sessionStore.load()` 和 `sessionStore.listSubkeys()` 调用在恢复物化期间的超时时间(以毫秒为单位)。如果适配器未在此窗口内解决,查询将失败而不是挂起。未设置 `sessionStore` 时忽略 |

498| `managedSettings` | `Settings` | `undefined` | 由生成的父进程提供的策略层设置。当机器上已存在 IT 控制的托管设置层时删除,除非该管理员选择使用 `parentSettingsBehavior: 'merge'`。无论如何都会过滤为仅限制性键 |512| `managedSettings` | `Settings` | `undefined` | 您的主机进程提供给生成的会话的策略层设置。在具有管理员部署的托管设置的机器上,Claude Code 会忽略这些,除非管理员的最高优先级托管源设置 `parentSettingsBehavior: 'merge'`,并且当 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时永远不会合并它们。合并的值通过仅限制性过滤器;[限制父设置](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)涵盖过滤器允许的内容和 `allowManaged*Only` 锁。设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 的主机有三个键直接从此有效负载读取:其在 Claude Code v2.1.222 或更高版本上的[模型配置](/docs/zh-CN/model-config#restrict-model-selection)、当没有托管源在 v2.1.246 或更高版本上设置它时的 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing),以及其在 v2.1.247 或更高版本上的 `ENABLE_TOOL_SEARCH` env 条目 |

499| `maxBudgetUsd` | `number` | `undefined` | 当客户端成本估计达到此 USD 值时停止查询。与 `total_cost_usd` 的相同估计进行比较;请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)了解准确性注意事项 |513| `maxBudgetUsd` | `number` | `undefined` | 当客户端成本估计达到此 USD 值时停止查询。与 `total_cost_usd` 的相同估计进行比较;请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)了解准确性注意事项 |

500| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 改用 `thinking`。思考过程的最大令牌数 |514| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 改用 `thinking`。思考过程的最大令牌数 |

501| `maxTurns` | `number` | `undefined` | 最大代理轮次(工具使用往返) |515| `maxTurns` | `number` | `undefined` | 最大代理轮次(工具使用往返) |


507| `pathToClaudeCodeExecutable` | `string` | 从捆绑的本地二进制文件自动解析 | Claude Code 可执行文件的路径。仅在安装期间跳过可选依赖项或您的平台不在支持的集合中时需要 |521| `pathToClaudeCodeExecutable` | `string` | 从捆绑的本地二进制文件自动解析 | Claude Code 可执行文件的路径。仅在安装期间跳过可选依赖项或您的平台不在支持的集合中时需要 |

508| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | 会话的权限模式 |522| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | 会话的权限模式 |

509| `permissionPromptToolName` | `string` | `undefined` | 权限提示的 MCP 工具名称 |523| `permissionPromptToolName` | `string` | `undefined` | 权限提示的 MCP 工具名称 |

524| `permissionPrompts` | `'host' \| 'none'` | `'host'` | 谁回答权限提示:`'host'` 将它们路由到您的 [`canUseTool`](#canusetool) 回调或 `permissionPromptToolName` 工具,`'none'` [拒绝会提示的调用](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)。需要 Claude Code v2.1.259 或更高版本 |

510| `persistSession` | `boolean` | `true` | 当为 `false` 时,禁用会话持久化到磁盘。会话之后无法恢复 |525| `persistSession` | `boolean` | `true` | 当为 `false` 时,禁用会话持久化到磁盘。会话之后无法恢复 |

511| `planModeInstructions` | `string` | `undefined` | Plan Mode 的自定义工作流说明。当 `permissionMode` 为 `'plan'` 时,此字符串替换默认 Plan Mode 工作流正文。CLI 仍然使用只读强制前导和 ExitPlanMode 协议页脚包装它 |526| `planModeInstructions` | `string` | `undefined` | Plan Mode 的自定义工作流说明。当 `permissionMode` 为 `'plan'` 时,此字符串替换默认 Plan Mode 工作流正文。CLI 仍然使用只读强制前导和 ExitPlanMode 协议页脚包装它 |

512| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | 从本地路径加载自定义 plugins。请参阅[Plugins](/docs/zh-CN/agent-sdk/plugins)了解详情 |527| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | 从本地路径加载自定义 plugins。请参阅[Plugins](/docs/zh-CN/agent-sdk/plugins)了解详情 |

513| `promptSuggestions` | `boolean` | `false` | 启用提示建议。在每个轮次后发出 `prompt_suggestion` 消息,包含预测的下一个用户提示 |528| `promptSuggestions` | `boolean` | `false` | 启用提示建议。在每个轮次后,Claude Code 发出 `prompt_suggestion` 消息,包含预测的下一个用户提示。Claude Code 不会为某些轮次生成建议,例如当您的帐户接近或达到其使用限制时。请参阅[Claude Code 何时跳过建议](/docs/zh-CN/interactive-mode#when-claude-code-skips-suggestions) |

514| `resume` | `string` | `undefined` | 要恢复的会话 ID |529| `resume` | `string` | `undefined` | 要恢复的会话 ID |

530| `resumeDropsTurn` | `string` | `undefined` | 使用 `resumeSessionAt`:截断恢复打算丢弃的轮次的提示 UUID。当丢弃的范围包含任何不可归因于该轮次的内容(例如吸收的排队消息或任务通知)时,Claude Code 会拒绝恢复,并在拒绝消息中命名 `--resume-drops-turn` 标志。仅 Agent SDK 和打印模式恢复读取该对。需要 Claude Code v2.1.223 或更高版本 |

515| `resumeSessionAt` | `string` | `undefined` | 在特定消息 UUID 处恢复会话 |531| `resumeSessionAt` | `string` | `undefined` | 在特定消息 UUID 处恢复会话 |

516| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | 以编程方式配置 sandbox 行为。请参阅[Sandbox 设置](#sandboxsettings)了解详情 |532| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | 以编程方式配置 sandbox 行为。请参阅[Sandbox 设置](#sandboxsettings)了解详情 |

517| `sessionId` | `string` | 自动生成 | 为会话使用特定的 UUID 而不是自动生成一个 |533| `sessionId` | `string` | 自动生成 | 为会话使用特定的 UUID 而不是自动生成一个 |

518| `sessionStore` | [`SessionStore`](/docs/zh-CN/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | 将会话记录镜像到外部后端,以便任何主机都可以恢复它们。请参阅[将会话持久化到外部存储](/docs/zh-CN/agent-sdk/session-storage) |534| `sessionStore` | [`SessionStore`](/docs/zh-CN/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | 将会话记录镜像到外部后端,以便另一个主机可以恢复它们。请参阅[将会话持久化到外部存储](/docs/zh-CN/agent-sdk/session-storage) |

519| `sessionStoreFlush` | `'batched' \| 'eager'` | `'batched'` | *Alpha.* `sessionStore` 的刷新模式。未设置 `sessionStore` 时忽略 |535| `sessionStoreFlush` | `'batched' \| 'eager'` | `'batched'` | *Alpha.* `sessionStore` 的刷新模式。未设置 `sessionStore` 时忽略 |

520| `settings` | `string \| Settings` | `undefined` | 内联[设置](/docs/zh-CN/settings)对象或设置文件的路径。填充[优先级顺序](/docs/zh-CN/settings#settings-precedence)中的标志设置层。使用 [`applyFlagSettings()`](#applyflagsettings) 在运行时更改 |536| `settings` | `string \| Settings` | `undefined` | 内联[设置](/docs/zh-CN/settings)对象或设置文件的路径。填充[优先级顺序](/docs/zh-CN/settings#settings-precedence)中的标志设置层。使用 [`applyFlagSettings()`](#applyflagsettings) 在运行时更改 |

521| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI 默认值(所有源) | 控制加载哪些文件系统设置。传递 `[]` 以禁用用户、项目和本地设置。[端点管理的策略](/docs/zh-CN/settings#settings-files)无论如何都会加载;当会话使用组织凭证在[符合条件的配置](/docs/zh-CN/server-managed-settings#platform-availability)上进行身份验证时,会获取服务器管理的设置。请参阅[使用 Claude Code 功能](/docs/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control) |537| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI 默认值(所有源) | 控制加载哪些文件系统设置。传递 `[]` 以禁用用户、项目和本地设置。[端点管理的策略](/docs/zh-CN/managed-settings#delivery-mechanisms)无论如何都会加载;当会话使用组织凭证在[符合条件的配置](/docs/zh-CN/server-managed-settings#platform-availability)上进行身份验证时,会获取服务器管理的设置。请参阅[使用 Claude Code 功能](/docs/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

522| `skills` | `string[] \| 'all'` | `undefined` | 会话可用的 skills。传递 `'all'` 以启用每个发现的 skill,或传递 skill 名称列表。设置后,SDK 会自动将 Skill 工具添加到 `allowedTools`。如果您也传递 `tools`,请在该列表中包含 `'Skill'`。请参阅[Skills](/docs/zh-CN/agent-sdk/skills) |538| `skills` | `string[] \| 'all'` | `undefined` | 会话可用的 skills。传递 `'all'` 以启用每个发现的 skill,或传递 skill 名称列表。仅传递确切名称。在 Agent SDK v0.3.221 或更高版本上,SDK 在启动 Claude Code 进程之前会以错误拒绝格式错误和通配符形式的名称。设置后,SDK 会自动将 Skill 工具添加到 `allowedTools`。如果您也传递 `tools`,请在该列表中包含 `'Skill'`。请参阅[Skills](/docs/zh-CN/agent-sdk/skills) |

523| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | 用于生成 Claude Code 进程的自定义函数。用于在 VM、容器或远程环境中运行 Claude Code |539| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | 用于生成 Claude Code 进程的自定义函数。用于在 VM、容器或远程环境中运行 Claude Code |

524| `stderr` | `(data: string) => void` | `undefined` | stderr 输出的回调 |540| `stderr` | `(data: string) => void` | `undefined` | stderr 输出的回调 |

525| `strictMcpConfig` | `boolean` | `false` | 仅使用在 `mcpServers` 中传递的服务器,并忽略项目 `.mcp.json`、用户设置、plugin 提供的 MCP 服务器和[claude.ai connectors](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) |541| `strictMcpConfig` | `boolean` | `false` | 仅使用在 `mcpServers` 中传递的服务器,并忽略项目 `.mcp.json`、用户设置、plugin 提供的 MCP 服务器和[claude.ai connectors](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) |

526| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined`(最小提示) | 系统提示配置。传递字符串以获取自定义提示,或 `{ type: 'preset', preset: 'claude_code' }` 以使用 Claude Code 的系统提示。使用预设对象形式时,添加 `append` 以使用其他说明扩展它,并设置 `excludeDynamicSections: true` 以将每个会话上下文移到第一条用户消息中,以便[更好地跨机器重用提示缓存](/docs/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |542| `systemPrompt` | `string \| string[] \| { type: 'custom'; prompt: string \| string[]; snapshot?: boolean } \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean; snapshot?: boolean }` | `undefined`(最小提示) | 系统提示配置。传递字符串以获取自定义提示,或 `{ type: 'preset', preset: 'claude_code' }` 以使用 Claude Code 的系统提示。传递一个字符串数组,其中包含导出的 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` 常量在静态和每个请求部分之间,以[缓存自定义提示的静态部分](/docs/zh-CN/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt)。使用预设对象形式时,添加 `append` 以使用其他说明扩展它,并设置 `excludeDynamicSections: true` 以将每个会话上下文移到第一条用户消息中,以便[更好地跨机器重用提示缓存](/docs/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)。设置 `snapshot: false` 以在每个请求上重建提示,而不是[重用会话在其第一个请求上记录的提示](/docs/zh-CN/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session)。要在自定义提示上设置 `snapshot`,请传递 `{ type: 'custom', prompt }` 形式。`{ type: 'custom' }` 形式和 `snapshot` 字段需要 TypeScript Agent SDK v0.3.257 或更高版本 |

527| `taskBudget` | `{ total: number }` | `undefined` | *Alpha.* API 端任务预算(以令牌为单位)。设置后,模型会被告知其剩余令牌预算,以便它可以调整工具使用速度并在达到限制前完成 |543| `taskBudget` | `{ total: number }` | `undefined` | *Alpha.* API 端任务预算(以令牌为单位)。设置后,模型会被告知其剩余令牌预算,以便它可以调整工具使用速度并在达到限制前完成 |

528| `thinking` | [`ThinkingConfig`](#thinkingconfig) | 支持的模型为 `{ type: 'adaptive' }` | 控制 Claude 的思考/推理行为。请参阅 [`ThinkingConfig`](#thinkingconfig) 了解选项 |544| `thinking` | [`ThinkingConfig`](#thinkingconfig) | 支持的模型为 `{ type: 'adaptive' }` | 控制 Claude 的思考/推理行为。请参阅 [`ThinkingConfig`](#thinkingconfig) 了解选项 |

529| `title` | `string` | `undefined` | 会话的显示标题。通过 `resume` 或 `continue` 恢复时,恢复的会话的持久化标题优先;使用 [`renameSession()`](#renamesession) 重新标题现有会话 |545| `title` | `string` | `undefined` | 会话的显示标题。通过 `resume` 或 `continue` 恢复时,恢复的会话的持久化标题优先;使用 [`renameSession()`](#renamesession) 重新标题现有会话 |


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

539 555 

540```typescript theme={null}556```typescript theme={null}

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

558 

541const result = query({559const result = query({

542 prompt: "Analyze this code",560 prompt: "Analyze this code",

543 options: {561 options: {


551});569});

552```570```

553 571 

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

555* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`,上限为 `15`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。对于需要等待更长时间中断的无人值守运行,设置 `CLAUDE_CODE_RETRY_WATCHDOG=1`:它无限期重试容量错误,从 Claude Code v2.1.199 开始,为其他瞬时错误提高默认值至 `300` 并移除此变量的上限。573* `CLAUDE_CODE_MAX_RETRIES`:最大 API 重试次数。默认 `10`,上限为 `15`。每次重试都有自己的 `API_TIMEOUT_MS` 窗口,因此最坏情况下的实际时间大约是 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 加上退避。对于需要等待更长时间中断的无人值守运行,设置 [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/zh-CN/errors#tune-retry-behavior):它无限期重试瞬时容量错误,从 Claude Code v2.1.199 开始,为其他瞬时错误提高默认值至 `300` 并移除此变量的上限。

556* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:使用 `run_in_background` 启动的子代理的停滞监视程序。默认 `600000`。在每个流事件上重置;在停滞时中止子代理,将任务标记为失败,并将错误与任何部分结果一起呈现给父级。不适用于同步子代理。574* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`:subagents 的停滞监视程序。当流监视程序打开时,默认值为 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 加 5 分钟,即 `600000`,除非您提高该变量。当流监视程序关闭时,默认值为 `600000`。在 v2.1.257 之前,默认值始终为 `600000`。

557* `CLAUDE_ENABLE_STREAM_WATCHDOG` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应正文停止流式传输时中止请求。监视程序对所有提供商默认启用;设置 `CLAUDE_ENABLE_STREAM_WATCHDOG=0` 以禁用它。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止的请求通过正常重试路径进行。575 

576 计时器在每个流事件上重置。在停滞时,Claude Code 中止 subagent 并向父级报告停滞。对于后台 subagent,它也会将任务标记为失败并附加任何部分结果。

577* `CLAUDE_ENABLE_STREAM_WATCHDOG` 与 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`:当标头已到达但响应正文停止流式传输时中止请求的流监视程序。监视程序对所有提供商默认启用;设置 `CLAUDE_ENABLE_STREAM_WATCHDOG=0` 以禁用它。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 默认为 `300000` 并被限制为该最小值。中止后,[自动重试](/docs/zh-CN/errors#automatic-retries)涵盖 Claude Code 根据响应进度的程度所做的事情。

578 

579 当监视程序等待 `ANTHROPIC_BASE_URL` 后面的网关用保活 ping 保持打开的响应时,设置 `includePartialMessages` 的主机继续接收 `ping` [流事件](#sdkpartialassistantmessage),因此将这些帧读作活跃性而不是在沉默时超时会话。在 v2.1.257 之前,帧在最后一个真实流事件后 5 分钟停止。

558 580 

559<h3 id="query-object">581<h3 id="query-object">

560 `Query` 对象582 `Query` 对象


572 setPermissionMode(mode: PermissionMode): Promise<void>;594 setPermissionMode(mode: PermissionMode): Promise<void>;

573 setModel(model?: string): Promise<void>;595 setModel(model?: string): Promise<void>;

574 setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;596 setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;

575 applyFlagSettings(settings: { [K in keyof Settings]?: Settings[K] | null }): Promise<void>;597 applyFlagSettings(settings: {

598 [K in keyof Settings]?: K extends 'effortLevel'

599 ? 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null

600 : Settings[K] | null;

601 }): Promise<void>;

602 updateSettings(

603 source: 'localSettings',

604 settings: Record<string, unknown>,

605 ): Promise<void>;

576 initializationResult(): Promise<SDKControlInitializeResponse>;606 initializationResult(): Promise<SDKControlInitializeResponse>;

577 reinitialize(): Promise<SDKControlInitializeResponse>;607 reinitialize(): Promise<SDKControlInitializeResponse>;

578 supportedCommands(): Promise<SlashCommand[]>;608 supportedCommands(): Promise<SlashCommand[]>;

579 supportedModels(): Promise<ModelInfo[]>;609 supportedModels(): Promise<ModelInfo[]>;

580 supportedAgents(): Promise<AgentInfo[]>;610 supportedAgents(): Promise<AgentInfo[]>;

581 mcpServerStatus(): Promise<McpServerStatus[]>;611 mcpServerStatus(): Promise<McpServerStatus[]>;

612 getContextUsage(opts?: {

613 detail?: 'summary' | 'full';

614 }): Promise<SDKControlGetContextUsageResponse>;

615 readFile(

616 path: string,

617 options?: { maxBytes?: number; encoding?: 'utf-8' | 'base64' }

618 ): Promise<SDKControlReadFileResponse | null>;

619 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;

582 accountInfo(): Promise<AccountInfo>;620 accountInfo(): Promise<AccountInfo>;

583 reconnectMcpServer(serverName: string): Promise<void>;621 reconnectMcpServer(serverName: string): Promise<void>;

584 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;622 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;


594</h4>632</h4>

595 633 

596| 方法 | 描述 |634| 方法 | 描述 |

597| :------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |635| :------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

598| `interrupt()` | 中断查询。仅在流式输入模式下可用。当 CLI 在 [`SDKSystemMessage.capabilities`](#sdksystemmessage) 中通告 `interrupt_receipt_v1` 功能时,使用列出存活中断的排队消息的 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 进行解决。在 v2.1.205 之前的 CLI 上解决为 `undefined` |636| `interrupt()` | 中断查询。仅在流式输入模式下可用。当 CLI 在 [`SDKSystemMessage.capabilities`](#sdksystemmessage) 中通告 `interrupt_receipt_v1` 功能时,使用列出中断时待处理的消息的 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 进行解决。在 v2.1.205 之前的 CLI 上解决为 `undefined` |

599| `rewindFiles(userMessageId, options?)` | 将文件恢复到指定用户消息时的状态。传递 `{ dryRun: true }` 以预览更改。需要 `enableFileCheckpointing: true`。请参阅[文件 checkpointing](/docs/zh-CN/agent-sdk/file-checkpointing) |637| `rewindFiles(userMessageId, options?)` | 将文件恢复到指定用户消息时的状态。传递 `{ dryRun: true }` 以预览更改。需要 `enableFileCheckpointing: true`。请参阅[文件 checkpointing](/docs/zh-CN/agent-sdk/file-checkpointing) |

600| `setPermissionMode()` | 更改权限模式(仅在流式输入模式下可用) |638| `setPermissionMode()` | 更改权限模式(仅在流式输入模式下可用) |

601| `setModel()` | 更改模型(仅在流式输入模式下可用) |639| `setModel()` | 更改模型(仅在流式输入模式下可用)。传递 `undefined` 或字符串 `"default"` 重置为会话默认模型 |

602| `setMaxThinkingTokens()` | *已弃用:* 改用 `thinking` 选项。更改最大思考令牌数。传递 `null` 会将思考重置为会话默认值:清除中期覆盖,对于禁用思考的会话思考保持关闭 |640| `setMaxThinkingTokens()` | *已弃用:* 改用 `thinking` 选项。更改最大思考令牌数。传递 `null` 会将思考重置为会话默认值:清除中期覆盖,对于禁用思考的会话思考保持关闭 |

603| `applyFlagSettings(settings)` | 在运行时将设置合并到会话的标志设置层中(仅在流式输入模式下可用)。请参阅 [`applyFlagSettings()`](#applyflagsettings) |641| `applyFlagSettings(settings)` | 在运行时将设置合并到会话的标志设置层中(仅在流式输入模式下可用)。请参阅 [`applyFlagSettings()`](#applyflagsettings) |

642| `updateSettings(source, settings)` | 将设置合并到项目的本地设置文件 `.claude/settings.local.json` 中;它们在下一个请求时生效。仅接受 `source: 'localSettings'` 和允许列表键集,目前为 `outputStyle`,带有字符串值;不支持删除键。在远程传输和 [`settingSources`](#options) 排除 `local` 的会话中拒绝。需要 TypeScript SDK v0.3.257 或更高版本,它捆绑 Claude Code v2.1.257 |

604| `initializationResult()` | 返回完整的初始化结果,包括支持的命令、模型、帐户信息和输出样式配置 |643| `initializationResult()` | 返回完整的初始化结果,包括支持的命令、模型、帐户信息和输出样式配置 |

605| `reinitialize()` | 重新发送 `initialize` 控制请求到运行的 CLI,并返回新的结果而不是缓存的首次连接结果。在传输间隙后使用它,例如在断开连接后重新连接到会话,以便待处理的权限请求再次到达您的 `canUseTool` 回调。使回调对每个请求 ID 幂等,因为响应丢失的请求会再次分派。需要 Claude Code v2.1.195 或更高版本 |644| `reinitialize()` | 重新发送 `initialize` 控制请求到运行的 CLI,并返回新的结果而不是缓存的首次连接结果。在传输间隙后使用它,例如在断开连接后重新连接到会话,以便待处理的权限请求再次到达您的 `canUseTool` 回调。使回调对每个请求 ID 幂等,因为响应丢失的请求会再次分派。需要 Claude Code v2.1.195 或更高版本 |

606| `supportedCommands()` | 返回可用的 slash commands |645| `supportedCommands()` | 返回可用的 slash commands。从 Agent SDK v0.3.216 开始,列表反映中期命令更改;请参阅 [`SDKCommandsChangedMessage`](#sdkcommandschangedmessage) |

607| `supportedModels()` | 返回具有显示信息的可用模型 |646| `supportedModels()` | 返回具有显示信息的可用模型 |

608| `supportedAgents()` | 返回可用的子代理作为 [`AgentInfo`](#agentinfo)`[]` |647| `supportedAgents()` | 返回可用的 subagents 作为 [`AgentInfo`](#agentinfo)`[]` |

609| `mcpServerStatus()` | 返回连接的 MCP 服务器的状态 |648| `mcpServerStatus()` | 返回连接的 MCP 服务器的状态 |

649| `getContextUsage(opts?)` | 返回 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse),按类别、skill 和工具分解会话的上下文窗口使用情况。使用默认 `detail`,它与 `/context` 在交互式会话中显示的数据相同。[`detail` 选项](#sdkcontrolgetcontextusageresponse)需要 Agent SDK v0.3.257 或更高版本 |

650| `readFile(path, options?)` | 从会话的文件系统读取文件。Claude Code 根据 `cwd` 解析路径;[`readFile()` 可以读取什么](#what-readfile-can-read)列出它提供的文件。传递 `{ maxBytes }` 以更改读取上限(默认 1 MB,上限 10 MB)和 `{ encoding: 'base64' }` 用于二进制文件,如图像。使用 [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse) 进行解决,或在权限拒绝、文件丢失或传输错误时使用 `null`。需要 TypeScript SDK v0.2.121 或更高版本 |

651| `reloadSkills()` | 从磁盘重新加载 skills,以便您在会话中期添加或编辑的 skills 对运行的会话可用。使用 [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) 进行解决,列出重新加载后可用的 skills。需要 Agent SDK v0.3.163 或更高版本 |

610| `accountInfo()` | 返回帐户信息 |652| `accountInfo()` | 返回帐户信息 |

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

612| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器 |654| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器,名称解析与 `reconnectMcpServer()` 相同。禁用会断开服务器连接 |

613| `setMcpServers(servers)` | 动态替换此会话的 MCP 服务器集。返回有关添加、删除的服务器和任何错误的信息 |655| `setMcpServers(servers)` | 动态替换此会话的 MCP 服务器集。使用 [`McpSetServersResult`](#mcpsetserversresult) 进行解决,命名添加和删除的服务器以及任何错误 |

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

615| `stopTask(taskId)` | 按 ID 停止运行的后台任务 |657| `stopTask(taskId)` | 按 ID 停止运行的后台任务 |

616| `close()` | 关闭查询并终止底层进程。强制结束查询并清理所有资源 |658| `close()` | 关闭查询并终止底层进程。强制结束查询并清理所有资源 |


619 `applyFlagSettings()`661 `applyFlagSettings()`

620</h4>662</h4>

621 663 

622在运行的会话上更改任何[设置](/docs/zh-CN/settings)而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 `permissions`。`setModel()` 和 `setPermissionMode()` 是这两个键的专用设置器;`applyFlagSettings()` 是接受任何设置键子集的通用形式,在此处传递 `model` 的行为与 `setModel()` 相同。664在运行的会话上更改[设置](/docs/zh-CN/settings)而无需重新启动查询。当没有专用设置器的设置需要在会话中期更改时使用它,例如在代理读取不受信任的输入后收紧 `permissions`。`setModel()` 和 `setPermissionMode()` 是这两个键的专用设置器;`applyFlagSettings()` 是接受任何设置键子集的通用形式,在此处传递 `model` 的行为与 `setModel()` 相同。

623 665 

624仅某些键在会话中期生效:666仅某些键在会话中期生效:

625 667 

626* **在下一个轮次应用**:`model`、`effortLevel`、`ultracode`、`permissions`、`hooks`、`skillOverrides`、`fastMode`、`agent`。切换 `agent` 也会在下一个轮次应用该代理的模型覆盖、hooks 和系统提示。668* **在下一个轮次应用**:`effortLevel`、`ultracode`、`permissions`、`hooks`、`skillOverrides`、`fastMode`、`agent`。切换 `agent` 也会在下一个轮次应用该代理的模型覆盖和 hooks。其系统提示在下一个轮次应用,或在[重用记录的系统提示](/docs/zh-CN/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session)的会话中,一旦会话被压缩。

669* **在当前轮次应用**:`model`。如果您在 Claude 处理轮次时切换 `model`,Claude 已在生成的响应在旧模型上完成,轮次的其余部分(从 Claude Code 对模型进行的下一个调用开始)使用新模型。Subagents 保持自己的模型。在 v2.1.212 之前,中期切换等待下一个轮次。

627* **会话中期无效**:系统提示选项。这些在启动时解决一次,因此运行的会话保持原始值,即使调用成功。要更改它们,请启动新会话。670* **会话中期无效**:系统提示选项。这些在启动时解决一次,因此运行的会话保持原始值,即使调用成功。要更改它们,请启动新会话。

628 671 

629`effortLevel` 接受一个[努力级别](/docs/zh-CN/model-config#adjust-effort-level)名称。它也接受 `"ultracode"`,它以 `xhigh` 努力运行会话并打开[ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode)。`Settings` 类型声明 `effortLevel` 不包含该值,因此在 TypeScript 中传递等效的 `{ ultracode: true }`。`ultracode` 值需要 Claude Code v2.1.203 或更高版本,仅由 `applyFlagSettings()` 接受,不由设置文件中的 `effortLevel` 键接受。672`effortLevel` 接受一个[努力级别](/docs/zh-CN/model-config#adjust-effort-level)名称。它也接受 `"ultracode"`,它请求 `xhigh` 努力与[ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode)打开。`applyFlagSettings()` 声明 `effortLevel` 不包含该值,因此在 TypeScript 中传递等效的 `{ ultracode: true }`。`ultracode` 值需要 Claude Code v2.1.203 或更高版本,仅由 `applyFlagSettings()` 接受,不由设置文件中的 `effortLevel` 键接受。

630 673 

631这些值被写入标志设置层,这是内联 `query()` 的 `settings` 选项在启动时填充的同一层。标志设置位于[设置优先级顺序](/docs/zh-CN/settings#settings-precedence)的顶部附近:它们覆盖用户、项目和本地设置,只有托管策略设置可以覆盖它们。这与[优先级部分](#settings-precedence)称为编程选项的层相同。674这些值被写入标志设置层,这是内联 `query()` 的 `settings` 选项在启动时填充的同一层。这与[优先级部分](#settings-precedence)称为编程选项的层相同。

632 675 

633连续调用浅合并顶级键。第二次调用 `{ permissions: {...} }` 会替换先前调用中的整个 `permissions` 对象,而不是深度合并到其中。要从标志层清除键并回退到较低优先级源,请为该键传递 `null`。传递 `undefined` 无效,因为 JSON 序列化会将其删除。676连续调用浅合并顶级键。第二次调用 `{ permissions: {...} }` 会替换先前调用中的整个 `permissions` 对象,而不是深度合并到其中。要从标志层清除键并回退到较低优先级源,请为该键传递 `null`。传递 `undefined` 无效,因为 JSON 序列化会将其删除。

634 677 


637下面的示例在会话中期切换活动模型,然后清除覆盖,以便模型回退到用户或项目设置指定的任何内容。680下面的示例在会话中期切换活动模型,然后清除覆盖,以便模型回退到用户或项目设置指定的任何内容。

638 681 

639```typescript theme={null}682```typescript theme={null}

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

684 

640const q = query({ prompt: messageStream });685const q = query({ prompt: messageStream });

641 686 

642// 覆盖会话其余部分的模型687// 覆盖会话其余部分的模型


689 models: ModelInfo[];734 models: ModelInfo[];

690 account: AccountInfo;735 account: AccountInfo;

691 fast_mode_state?: "off" | "cooldown" | "on";736 fast_mode_state?: "off" | "cooldown" | "on";

737 fast_mode_disabled_reason?: FastModeDisabledReason;

738 hooks_applied?: boolean;

692};739};

693```740```

694 741 

695当客户端向已运行的会话发送 `initialize` 时,控制响应包装器也会携带一个可选的 `pending_permission_requests` 数组。该字段位于响应包装器本身,而不是上面的 `SDKControlInitializeResponse` 有效负载中。每个条目都是一个完整的 `control_request` 消息,具有与会话在运行时为权限请求流式传输的相同 `{ type: "control_request", request_id, request }` 形状。742`hooks_applied` 报告 Claude Code 是否注册了 `initialize` 请求携带的 `hooks`。SDK 在会话启动时发送该请求一次,并在每个 [`reinitialize()`](#query-object) 调用上再次发送。该字段需要 Agent SDK v0.3.238 或更高版本。

743 

744当请求不携带 hooks 时,Claude Code 会省略该字段。当请求携带 hooks 时,该值取决于请求是否是会话的第一个初始化,以及对于重复的请求,它如何到达会话:

745 

746* `true`:Claude Code 注册了 hooks。会话的第一个初始化返回此值。通过 CLI 的 stdin 发送的重复初始化也返回 `true`。在这种情况下,新请求中的 hooks 替换之前注册的 hooks。

747* `false`:Claude Code 忽略了 hooks。发送到远程会话的重复初始化返回此值,因此加入会话的第二个客户端无法替换第一个客户端注册的 hooks。

748 

749在 Agent SDK v0.3.238 之前,响应从不携带该字段,Claude Code 在每个重复初始化上忽略 `hooks`。

696 750 

697这些是在客户端连接之前发出的请求,仍在等待回复。SDK 为您读取数组并将每个条目分派到您的 [`canUseTool`](#canusetool) 回调,这与 [`reinitialize()`](#query-object) 在传输间隙后触发的相同重新发送。使用重复的请求 ID 幂等地处理,因为条目可以重复回调已在连接断开前收到的请求。751响应始终报告 `fast_mode_state`,当某些东西阻止[快速模式](/docs/zh-CN/fast-mode)时,`fast_mode_disabled_reason` 携带原因代码,以便您可以解释阻止的状态而不是重新推导可用性。两种行为都需要 Claude Code v2.1.219 或更高版本。在 v2.1.219 之前,当快速模式不可用时响应会省略 `fast_mode_state`,并且从不携带原因。有关原因代码及其含义,请参阅结果消息上的 [`fast_mode_disabled_reason`](#sdkresultmessage)。

752 

753成功 `initialize` 的控制响应包装器也携带 `pending_permission_requests` 数组。该字段位于响应包装器本身,而不是上面的 `SDKControlInitializeResponse` 有效负载中。每个条目都是一个完整的 `control_request` 消息,具有与会话在运行时为权限请求流式传输的相同 `{ type: "control_request", request_id, request }` 形状。

754 

755该数组列出此 Claude Code 进程已发出且尚未解决的权限请求。SDK 为您读取数组并将每个条目分派到您的 [`canUseTool`](#canusetool) 回调,这与 [`reinitialize()`](#query-object) 在传输间隙后触发的相同重新发送。使用重复的请求 ID 幂等地处理,因为条目可以重复回调已在连接断开前收到的请求。

756 

757该数组在成功 `initialize` 响应上始终存在,当此进程没有未解决的权限请求时为空。需要 Claude Code v2.1.268 或更高版本。较早的版本可能会省略该字段,因此如果您自己解析线路协议,请将缺失的字段视为较旧的 CLI,而不是没有待处理的证明。

698 758 

699<h3 id="sdkcontrolinterruptresponse">759<h3 id="sdkcontrolinterruptresponse">

700 `SDKControlInterruptResponse`760 `SDKControlInterruptResponse`


705```typescript theme={null}765```typescript theme={null}

706type SDKControlInterruptResponse = {766type SDKControlInterruptResponse = {

707 still_queued: string[];767 still_queued: string[];

768 cancelled?: string[];

708};769};

709```770```

710 771 

711`still_queued` 列出存活中断的用户消息的 UUID:仍在队列中的消息,加上已为下一个轮次出队但尚未被中止到达的任何批次。除非您首先取消它,否则每个都作为其自己的轮次在中断后运行。使用收据来决定是否重新发送任何内容;重新发送已列出的消息会产生重复的轮次。772`still_queued` 列出中断时待处理的用户消息的 UUID:仍在队列中的消息,加上 Claude Code 已从队列中取出用于下一个轮次的任何消息。除非您首先取消它,否则每个都在中断后作为其自己的轮次运行。如果您在第一个轮次启动之前中断,Claude Code 会在轮次启动时立即中止该轮次,该轮次中列出的消息不会获得响应。

773 

774使用收据来决定是否重新发送任何内容。列出的消息如果您不取消它会进入对话,因此重新发送它会向 Claude 传递两次。

712 775 

713使用这些注意事项解释列表:776使用这些注意事项解释列表:

714 777 

715* 仅出现已使用 UUID 入队的消息。空数组并不意味着没有其他内容会运行。778* 仅出现已使用 UUID 入队的消息。空数组并不意味着没有其他内容会运行。

716* 仅列出主线程消息。寻址到子代理的消息超出范围。779* 仅列出主线程消息。寻址到 subagent 的消息超出范围。

717* 列表可以包括您的客户端从未发送的 UUID,例如[计划任务](/docs/zh-CN/scheduled-tasks)触发器。忽略您不识别的 UUID,而不是将其视为错误。780* 列表可以包括您的客户端从未发送的 UUID,例如[计划任务](/docs/zh-CN/scheduled-tasks)触发器。忽略您不识别的 UUID,而不是将其视为错误。

718 781 

782直接驱动 CLI 控制协议的客户端(而不是通过 `interrupt()`)可以在 `interrupt` 控制请求上设置 `cancel_queued: true`。Claude Code v2.1.219 及更高版本在 [`SDKSystemMessage.capabilities`](#sdksystemmessage) 中通告 `interrupt_cancel_queued_v1` 功能的支持;较早的 CLI 忽略该字段并让排队的消息照常运行。这样的中断也会取消每条否则会在 `still_queued` 下列出的消息:收据在 `cancelled` 下列出它们,`still_queued` 为空,它们都不运行。

783 

784`cancelled` 列表与 `still_queued` 具有相同的注意事项。`interrupt()` 方法从不发送 `cancel_queued`,因此它解决的收据不携带 `cancelled`。

785 

719收据是在处理中断时拍摄的快照,在干净中断时,它在中断轮次的 [`SDKResultMessage`](#sdkresultmessage) 之前到达。在该结果之后读取收据而不是检查队列:循环立即启动下一个排队的轮次,因此您在结果后检查的队列已经改变。786收据是在处理中断时拍摄的快照,在干净中断时,它在中断轮次的 [`SDKResultMessage`](#sdkresultmessage) 之前到达。在该结果之后读取收据而不是检查队列:循环立即启动下一个排队的轮次,因此您在结果后检查的队列已经改变。

720 787 

788<h3 id="sdkcontrolgetcontextusageresponse">

789 `SDKControlGetContextUsageResponse`

790</h3>

791 

792[`getContextUsage()`](#query-object) 的返回类型。使用默认 `detail`,这是 Claude Code 在交互式会话中为 `/context` 命令呈现的相同有效负载,因此除了令牌计数外,它还携带显示字段,如 `color` 和 `gridRows`,Claude Code 使用这些字段来绘制 `/context` 使用情况网格。

793 

794该方法的可选 `detail` 参数选择 Claude Code 如何计算每个类别。使用默认值 `'full'`,Claude Code 使用令牌计数 API 请求计算每个类别。传递 `{ detail: 'summary' }` 以从最后一个响应的使用情况和本地估计获取答案。没有令牌计数请求出去,每个类别的数字是近似的。`detail` 参数需要 Agent SDK v0.3.257 或更高版本。

795 

796当您发送 `/context` 作为提示而不是调用该方法时,Claude Code 会将 [`SDKContextUsage`](#sdkcontextusage) 有效负载附加到传递结果的助手消息的 `context_usage` 字段。该字段需要 Agent SDK v0.3.232 或更高版本。

797 

798```typescript theme={null}

799type SDKControlGetContextUsageResponse = {

800 categories: {

801 name: string;

802 tokens: number;

803 color: string;

804 isDeferred?: boolean;

805 }[];

806 totalTokens: number;

807 maxTokens: number;

808 rawMaxTokens: number;

809 percentage: number;

810 gridRows: {

811 color: string;

812 isFilled: boolean;

813 categoryName: string;

814 tokens: number;

815 percentage: number;

816 squareFullness: number;

817 }[][];

818 model: string;

819 memoryFiles: {

820 path: string;

821 type: string;

822 tokens: number;

823 }[];

824 mcpTools: {

825 name: string;

826 serverName: string;

827 tokens: number;

828 isLoaded?: boolean;

829 }[];

830 deferredBuiltinTools?: {

831 name: string;

832 tokens: number;

833 isLoaded: boolean;

834 }[];

835 systemTools?: {

836 name: string;

837 tokens: number;

838 }[];

839 systemPromptSections?: {

840 name: string;

841 tokens: number;

842 }[];

843 agents: {

844 agentType: string;

845 source: string;

846 tokens: number;

847 }[];

848 slashCommands?: {

849 totalCommands: number;

850 includedCommands: number;

851 tokens: number;

852 };

853 skills?: {

854 totalSkills: number;

855 includedSkills: number;

856 tokens: number;

857 skillFrontmatter: {

858 name: string;

859 source: string;

860 tokens: number;

861 }[];

862 };

863 autoCompactThreshold?: number;

864 isAutoCompactEnabled: boolean;

865 messageBreakdown?: {

866 toolCallTokens: number;

867 toolResultTokens: number;

868 attachmentTokens: number;

869 assistantMessageTokens: number;

870 userMessageTokens: number;

871 redirectedContextTokens: number;

872 unattributedTokens: number;

873 toolCallsByType: {

874 name: string;

875 callTokens: number;

876 resultTokens: number;

877 }[];

878 attachmentsByType: {

879 name: string;

880 tokens: number;

881 }[];

882 };

883 apiUsage: {

884 input_tokens: number;

885 output_tokens: number;

886 cache_creation_input_tokens: number;

887 cache_read_input_tokens: number;

888 } | null;

889};

890```

891 

892从集合字段读取令牌归属:

893 

894* `categories` 保存每个类别的总计。

895* `mcpTools` 和 `agents` 将令牌归属于各个 MCP 工具和 subagents。

896* `memoryFiles` 列出每个加载的内存文件及其成本。

897* `skills.skillFrontmatter` 将 skill 列表的令牌归属于每个包含的 skill。每个 skill 的计数测量每个 skill 的列表条目,因为 Claude Code 实际发送它,这可能比 skill 的完整 frontmatter 更短。比较 `skills.totalSkills` 与 `skills.includedSkills` 以查看每个发现的 skill 是否进入列表。

898 

899`totalTokens` 是会话的当前上下文使用情况,`maxTokens` 是针对该使用情况测量的窗口。该窗口是模型的上下文窗口,或当应用一个时的较低自动压缩窗口。`rawMaxTokens` 携带与 `maxTokens` 相同的值,`percentage` 是 `totalTokens` 作为该窗口的四舍五入百分比。

900 

901Claude Code 保留可选的 `deferredBuiltinTools`、`systemTools` 和 `systemPromptSections` 诊断未设置,因此即使类型声明它们,也应该期望它们不存在。

902 

903<h3 id="sdkcontrolreadfileresponse">

904 `SDKControlReadFileResponse`

905</h3>

906 

907[`readFile()`](#query-object) 的返回类型。

908 

909```typescript theme={null}

910type SDKControlReadFileResponse = {

911 contents: string;

912 absPath: string;

913 truncated?: boolean;

914 encoding?: 'base64';

915};

916```

917 

918`contents` 保存文件文本,或当您请求 `encoding: 'base64'` 时的 base64 数据;响应的 `encoding` 字段在这种情况下设置为 `'base64'`。`absPath` 是解析的绝对路径。当文件长于 `maxBytes` 上限且内容在该限制处被切割时,`truncated` 被设置。

919 

920<h4 id="what-readfile-can-read">

921 `readFile()` 可以读取什么

922</h4>

923 

924`readFile()` 提供的文件集比 Read 工具更窄:

925 

926* 会话的工作目录之一内的常规文件,如 `cwd` 和 `additionalDirectories`

927* Claude Code 自己的一些文件用于会话,如工具结果

928 

929Read deny 和 ask 规则仍然阻止匹配的路径,广泛的 Read allow 规则不会向 `readFile()` 打开文件系统的其余部分。对于任何其他内容,调用使用 `null` 进行解决。

930 

931<h3 id="sdkcontrolreloadskillsresponse">

932 `SDKControlReloadSkillsResponse`

933</h3>

934 

935[`reloadSkills()`](#query-object) 的返回类型。

936 

937```typescript theme={null}

938type SDKControlReloadSkillsResponse = {

939 skills: SlashCommand[];

940};

941```

942 

943`skills` 列出重新加载后可用的 skills,采用 `supportedCommands()` 返回的相同 [`SlashCommand`](#slashcommand) 形状。

944 

721<h3 id="agentdefinition">945<h3 id="agentdefinition">

722 `AgentDefinition`946 `AgentDefinition`

723</h3>947</h3>

724 948 

725以编程方式定义的子代理的配置。949以编程方式定义的 subagent 的配置。

726 950 

727```typescript theme={null}951```typescript theme={null}

728type AgentDefinition = {952type AgentDefinition = {


744```968```

745 969 

746| 字段 | 必需 | 描述 |970| 字段 | 必需 | 描述 |

747| :------------------------------------ | :- | :-------------------------------------------------------------------------------------------------------- |971| :------------------------------------ | :- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

749| `tools` | 否 | 允许的工具名称数组。如果省略,继承父级的所有工具。要将 Skills 预加载到代理的上下文中,请使用 `skills` 字段而不是在此处列出 `'Skill'` |973| `tools` | 否 | 允许的工具名称数组。如果省略,继承[可用于 subagents 的每个工具](/docs/zh-CN/sub-agents#available-tools)。要将 Skills 预加载到代理的上下文中,请使用 `skills` 字段而不是在此处列出 `'Skill'` |

750| `disallowedTools` | 否 | 要为此代理明确禁止的工具名称数组。也接受 MCP 服务器级别的模式:`mcp__server` 或 `mcp__server__*` 移除该服务器的每个工具,`mcp__*` 移除任何服务器的每个 MCP 工具 |974| `disallowedTools` | 否 | 要为此代理明确禁止的工具名称数组。也接受 MCP 服务器级别的模式:`mcp__server` 或 `mcp__server__*` 移除该服务器的每个工具,`mcp__*` 移除任何服务器的每个 MCP 工具 |

751| `prompt` | 是 | 代理的系统提示 |975| `prompt` | 是 | 代理的系统提示 |

752| `model` | 否 | 此代理的模型覆盖。接受别名,如 `'fable'`、`'opus'`、`'sonnet'`、`'haiku'`、`'inherit'`,或完整的模型 ID。如果省略或 `'inherit'`,使用主模型 |976| `model` | 否 | 此代理的模型覆盖。接受别名,如 `'fable'`、`'opus'`、`'sonnet'`、`'haiku'`、`'inherit'`,或完整的模型 ID。`'inherit'` 使用主模型。当您省略它时,Claude Code 在[subagent 模型顺序](/docs/zh-CN/sub-agents#choose-a-model)中选择模型 |

753| `mcpServers` | 否 | 此代理的 MCP 服务器规范 |977| `mcpServers` | 否 | 此代理的 MCP 服务器规范 |

754| `skills` | 否 | 要预加载到代理上下文中的 skill 名称数组 |978| `skills` | 否 | 要预加载到代理上下文中的 skill 名称数组 |

755| `initialPrompt` | 否 | 当此代理作为主线程代理运行时,自动提交为第一个用户轮次 |979| `initialPrompt` | 否 | 当此代理作为主线程代理运行时,自动提交为第一个用户轮次 |


757| `background` | 否 | 调用时将此代理作为非阻塞后台任务运行 |981| `background` | 否 | 调用时将此代理作为非阻塞后台任务运行 |

758| `memory` | 否 | 此代理的内存源:`'user'`、`'project'` 或 `'local'` |982| `memory` | 否 | 此代理的内存源:`'user'`、`'project'` 或 `'local'` |

759| `effort` | 否 | 此代理的推理努力级别。接受命名级别或整数 |983| `effort` | 否 | 此代理的推理努力级别。接受命名级别或整数 |

760| `permissionMode` | 否 | 此代理内工具执行的权限模式。请参阅 [`PermissionMode`](#permissionmode) |984| `permissionMode` | 否 | 此代理内工具执行的权限模式。[subagent 继承规则](/docs/zh-CN/agent-sdk/permissions#available-modes)决定何时应用。请参阅 [`PermissionMode`](#permissionmode) |

761| `criticalSystemReminder_EXPERIMENTAL` | 否 | 实验性:添加到系统提示的关键提醒 |985| `criticalSystemReminder_EXPERIMENTAL` | 否 | 实验性:添加到系统提示的关键提醒 |

762 986 

763<h3 id="agentmcpserverspec">987<h3 id="agentmcpserverspec">

764 `AgentMcpServerSpec`988 `AgentMcpServerSpec`

765</h3>989</h3>

766 990 

767指定子代理可用的 MCP 服务器。可以是服务器名称(字符串,引用父级 `mcpServers` 配置中的服务器)或内联服务器配置记录,将服务器名称映射到配置。991指定 subagent 可用的 MCP 服务器。可以是服务器名称(字符串,引用父级 `mcpServers` 配置中的服务器)或内联服务器配置记录,将服务器名称映射到配置。

768 992 

769```typescript theme={null}993```typescript theme={null}

770type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;994type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;


783```1007```

784 1008 

785| 值 | 描述 | 位置 |1009| 值 | 描述 | 位置 |

786| :---------- | :------------ | :---------------------------- |1010| :---------- | :----------------------------------------- | :---------------------------- |

787| `'user'` | 全局用户设置 | `~/.claude/settings.json` |1011| `'user'` | 全局用户设置 | `~/.claude/settings.json` |

788| `'project'` | 共享项目设置(版本控制) | `.claude/settings.json` |1012| `'project'` | 共享项目设置(版本控制) | `.claude/settings.json` |

789| `'local'` | 本地项目设置(不版本控制) | `.claude/settings.local.json` |1013| `'local'` | 本地项目设置,当 Claude Code 将设置保存到其中时被 gitignored | `.claude/settings.local.json` |

790 1014 

791<h4 id="default-behavior">1015<h4 id="default-behavior">

792 默认行为1016 默认行为

793</h4>1017</h4>

794 1018 

795当 `settingSources` 被省略或 `undefined` 时,`query()` 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。在所有情况下都会加载[端点管理的策略](/docs/zh-CN/settings#settings-files);当会话使用组织凭证在[符合条件的配置](/docs/zh-CN/server-managed-settings#platform-availability)上进行身份验证时,会获取服务器管理的设置。请参阅[settingSources 不控制的内容](/docs/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control)了解无论此选项如何都会读取的输入,以及如何禁用它们。1019当 `settingSources` 被省略或 `undefined` 时,`query()` 加载与 Claude Code CLI 相同的文件系统设置:用户、项目和本地。请参阅[settingSources 不控制的内容](/docs/zh-CN/agent-sdk/claude-code-features#what-settingsources-does-not-control)了解无论此选项如何都会读取的输入,以及如何禁用它们。

796 1020 

797<h4 id="why-use-settingsources">1021<h4 id="why-use-settingsources">

798 为什么使用 settingSources1022 为什么使用 settingSources


801**禁用文件系统设置:**1025**禁用文件系统设置:**

802 1026 

803```typescript theme={null}1027```typescript theme={null}

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

1029 

804// 不从磁盘加载用户、项目或本地设置1030// 不从磁盘加载用户、项目或本地设置

805const result = query({1031const result = query({

806 prompt: "Analyze this code",1032 prompt: "Analyze this code",


808});1034});

809```1035```

810 1036 

811**显式加载所有文件系统设置:**

812 

813```typescript theme={null}

814const result = query({

815 prompt: "Analyze this code",

816 options: {

817 settingSources: ["user", "project", "local"] // 加载所有设置

818 }

819});

820```

821 

822**仅加载特定设置源:**1037**仅加载特定设置源:**

823 1038 

824```typescript theme={null}1039```typescript theme={null}

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

1041 

825// 仅加载项目设置,忽略用户和本地1042// 仅加载项目设置,忽略用户和本地

826const result = query({1043const result = query({

827 prompt: "Run CI checks",1044 prompt: "Run CI checks",


831});1048});

832```1049```

833 1050 

834**测试和 CI 环境:**1051要加载 CLAUDE.md 项目说明,请在 `settingSources` 中包含 `"project"`。请参阅[修改系统提示](/docs/zh-CN/agent-sdk/modifying-system-prompts#claude-md-files-for-project-level-instructions)了解 CLAUDE.md 加载如何与系统提示选项交互。

835 

836```typescript theme={null}

837// 通过排除本地设置确保 CI 中的一致行为

838const result = query({

839 prompt: "Run tests",

840 options: {

841 settingSources: ["project"], // 仅团队共享设置

842 permissionMode: "bypassPermissions"

843 }

844});

845```

846 

847**仅 SDK 应用程序:**

848 

849```typescript theme={null}

850// 以编程方式定义所有内容。

851// 传递 [] 以选择退出文件系统设置源。

852const result = query({

853 prompt: "Review this PR",

854 options: {

855 settingSources: [],

856 agents: {

857 /* ... */

858 },

859 mcpServers: {

860 /* ... */

861 },

862 allowedTools: ["Read", "Grep", "Glob"]

863 }

864});

865```

866 

867**加载 CLAUDE.md 项目说明:**

868 

869```typescript theme={null}

870// 加载项目设置以包括 CLAUDE.md 文件

871const result = query({

872 prompt: "Add a new feature following project conventions",

873 options: {

874 systemPrompt: {

875 type: "preset",

876 preset: "claude_code" // 使用 Claude Code 的系统提示

877 },

878 settingSources: ["project"], // 从项目目录加载 CLAUDE.md

879 allowedTools: ["Read", "Write", "Edit"]

880 }

881});

882```

883 1052 

884<h4 id="settings-precedence">1053<h4 id="settings-precedence">

885 设置优先级1054 设置优先级


901type PermissionMode =1070type PermissionMode =

902 | "default" // 标准权限行为1071 | "default" // 标准权限行为

903 | "acceptEdits" // 自动接受文件编辑1072 | "acceptEdits" // 自动接受文件编辑

904 | "bypassPermissions" // 绕过权限检查;显式询问规则仍然提示1073 | "bypassPermissions" // 绕过权限检查;显式 ask 规则仍然提示

905 | "plan" // Plan Mode - 仅读取工具1074 | "plan" // Plan Mode - 仅读取工具

906 | "dontAsk" // 不提示权限,如果未预先批准则拒绝1075 | "dontAsk" // 不提示权限,如果未预先批准则拒绝

907 | "auto"; // 使用模型分类器批准或拒绝每个工具调用1076 | "auto"; // 模型分类器批准或拒绝权限提示

908```1077```

909 1078 

910<h3 id="canusetool">1079<h3 id="canusetool">


915 1084 

916该函数是 SDK 替代交互式权限提示:仅当[权限评估流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)解决为提示时才调用它。已由 `allowedTools` 条目、设置 allow 规则或权限模式(如 `acceptEdits` 或 `bypassPermissions`)批准的工具调用永远不会调用它。要限制每个工具调用,请改用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks)。1085该函数是 SDK 替代交互式权限提示:仅当[权限评估流](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)解决为提示时才调用它。已由 `allowedTools` 条目、设置 allow 规则或权限模式(如 `acceptEdits` 或 `bypassPermissions`)批准的工具调用永远不会调用它。要限制每个工具调用,请改用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks)。

917 1086 

918`AskUserQuestion`、标记为 [`requiresUserInteraction`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具和[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的 connector 工具即使 allow 规则匹配也会到达该函数。在 `dontAsk` 模式下这些调用会被拒绝,不调用它。1087[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)不会被 allow 规则预先批准;请参阅[权限如何被评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)了解哪些到达回调以及在 `dontAsk` 和 `auto` 模式下会发生什么。

919 1088 

920```typescript theme={null}1089```typescript theme={null}

921type CanUseTool = (1090type CanUseTool = (


940| `blockedPath` | `string` | 触发权限请求的文件路径(如果适用) |1109| `blockedPath` | `string` | 触发权限请求的文件路径(如果适用) |

941| `decisionReason` | `string` | 解释为什么触发此权限请求 |1110| `decisionReason` | `string` | 解释为什么触发此权限请求 |

942| `toolUseID` | `string` | 此特定工具调用在助手消息中的唯一标识符 |1111| `toolUseID` | `string` | 此特定工具调用在助手消息中的唯一标识符 |

943| `agentID` | `string` | 如果在子代理中运行,子代理的 ID |1112| `agentID` | `string` | 如果在 subagent 中运行,subagent 的 ID |

944| `requestId` | `string` | `control_request` 信封的 `request_id`。您的应用程序在其自己的通道上发送的 `control_response`(例如签名的 HTTP POST)必须回显此值,以便 Claude Code 进程可以将回复与请求匹配 |1113| `requestId` | `string` | `control_request` 信封的 `request_id`。您的应用程序在其自己的通道上发送的 `control_response`(例如签名的 HTTP POST)必须回显此值,以便 Claude Code 进程可以将回复与请求匹配 |

945 1114 

946回调通常通过返回 [`PermissionResult`](#permissionresult) 来解决请求,SDK 将其写回其传输作为 `control_response`。仅当您的应用程序已通过其自己的通道为此请求发送 `control_response`(回显 `requestId`)时才返回 `null`;SDK 然后跳过将响应写入其传输。在任何其他情况下返回 `null` 会使工具调用无限期被阻止,因为永远不会发送 `control_response` 且权限提示不会超时。1115回调通常通过返回 [`PermissionResult`](#permissionresult) 来解决请求,SDK 将其写回其传输作为 `control_response`。仅当您的应用程序已通过其自己的通道为此请求发送 `control_response`(回显 `requestId`)时才返回 `null`;SDK 然后跳过将响应写入其传输。在任何其他情况下返回 `null` 会使工具调用无限期被阻止,因为永远不会发送 `control_response` 且权限提示不会超时。


1046type McpSdkServerConfigWithInstance = {1215type McpSdkServerConfigWithInstance = {

1047 type: "sdk";1216 type: "sdk";

1048 name: string;1217 name: string;

1218 timeout?: number;

1049 instance: McpServer;1219 instance: McpServer;

1050};1220};

1051```1221```


1157 message: BetaMessage; // 来自 Anthropic SDK1327 message: BetaMessage; // 来自 Anthropic SDK

1158 parent_tool_use_id: string | null;1328 parent_tool_use_id: string | null;

1159 error?: SDKAssistantMessageError;1329 error?: SDKAssistantMessageError;

1330 aborted?: true;

1331 timestamp?: string;

1332 context_usage?: SDKContextUsage;

1333 user_message_uuid?: string;

1334 user_message_uuids?: string[];

1160};1335};

1161```1336```

1162 1337 

1163`message` 字段是来自 Anthropic SDK 的 [`BetaMessage`](https://platform.claude.com/docs/zh-CN/api/messages/create)。它包括 `id`、`content`、`model`、`stop_reason` 和 `usage` 等字段。1338`message` 字段是来自 Anthropic SDK 的 [`BetaMessage`](https://platform.claude.com/docs/zh-CN/api/messages/create)。它包括 `id`、`content`、`model`、`stop_reason` 和 `usage` 等字段。

1164 1339 

1165`SDKAssistantMessageError` 是以下之一:`'authentication_failed'`、`'oauth_org_not_allowed'`、`'billing_error'`、`'rate_limit'`、`'overloaded'`、`'invalid_request'`、`'model_not_found'`、`'server_error'`、`'max_output_tokens'` 或 `'unknown'`。`'model_not_found'` 表示所选模型不存在或对您的账户或部署不可用。`'overloaded'` 表示 API 返回了 529 错误,因为服务器处于容量限制,与 `'rate_limit'` 相对,后者是针对您的配额的 429 错误。1340`SDKAssistantMessageError` 是以下之一:`'authentication_failed'`、`'oauth_org_not_allowed'`、`'account_on_hold'`、`'billing_error'`、`'rate_limit'`、`'overloaded'`、`'invalid_request'`、`'model_not_found'`、`'server_error'`、`'max_output_tokens'`、`'cloud_credential_error'` 或 `'unknown'`。其中四个值的含义超出了它们的名称:

1341 

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

1343* `'overloaded'`:API 返回了 529 错误,因为服务器处于容量限制,与 `'rate_limit'` 相对,后者是针对您的配额的 429 错误

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

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

1346 

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

1348 

1349Claude Code 在转轮的第一个助手消息上设置 `user_message_uuid` 和 `user_message_uuids`,条件在 [`user_message_uuid`](#user_message_uuid) 中。

1350 

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

1352 

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

1166 1354 

1167<h3 id="sdkusermessage">1355<h3 id="sdkusermessage">

1168 `SDKUserMessage`1356 `SDKUserMessage`


1190 1378 

1191对于 `Agent` 工具,`tool_use_result` 是 [`AgentOutput`](#agent-2)。在 `completed` 结果上,`content` 保存子代理的报告,不包含 Claude Code 附加到 `tool_result` 文本的代理 ID 和使用情况预告片,因此从 `tool_use_result` 呈现而不是解析该文本。1379对于 `Agent` 工具,`tool_use_result` 是 [`AgentOutput`](#agent-2)。在 `completed` 结果上,`content` 保存子代理的报告,不包含 Claude Code 附加到 `tool_result` 文本的代理 ID 和使用情况预告片,因此从 `tool_use_result` 呈现而不是解析该文本。

1192 1380 

1381对于其结果包含 `resource_link` 块的 MCP 工具,`tool_use_result` 是一个对象,其中包含 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 条目的 `resourceLinks` 数组。Claude 将每个链接作为 `tool_result` 块中的一行文本接收,因此读取 `resourceLinks` 以呈现服务器返回的文件,而不是解析该文本。Claude Code 在结果没有链接时省略 `resourceLinks`,在来自子代理的结果上省略,每个结果最多保留 50 个链接,一旦数组达到 64 KiB 的序列化 JSON 就停止添加链接。`resourceLinks` 需要 Agent SDK v0.3.257 或更高版本。

1382 

1193<h3 id="sdkusermessagereplay">1383<h3 id="sdkusermessagereplay">

1194 `SDKUserMessageReplay`1384 `SDKUserMessageReplay`

1195</h3>1385</h3>


1234 stop_reason: string | null;1424 stop_reason: string | null;

1235 ttft_ms?: number;1425 ttft_ms?: number;

1236 ttft_stream_ms?: number;1426 ttft_stream_ms?: number;

1427 user_message_uuid?: string;

1428 user_message_uuids?: string[];

1429 request_sent_wall_ms?: number;

1430 first_content_frame_ms?: number;

1431 first_stream_post_ms?: number;

1432 first_stream_post_ack_ms?: number;

1433 first_stream_post_wall_ms?: number;

1237 total_cost_usd: number;1434 total_cost_usd: number;

1238 usage: NonNullableUsage;1435 usage: NonNullableUsage;

1239 modelUsage: { [modelName: string]: ModelUsage };1436 modelUsage: { [modelName: string]: ModelUsage };

1240 permission_denials: SDKPermissionDenial[];1437 permission_denials: SDKPermissionDenial[];

1438 queued_turn_count?: number;

1241 structured_output?: unknown;1439 structured_output?: unknown;

1242 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };1440 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };

1243 terminal_reason?: TerminalReason;1441 terminal_reason?: TerminalReason;

1244 fast_mode_state?: FastModeState;1442 fast_mode_state?: FastModeState;

1443 fast_mode_disabled_reason?: FastModeDisabledReason;

1245 origin?: SDKMessageOrigin;1444 origin?: SDKMessageOrigin;

1246 }1445 }

1247 | {1446 | {


1262 usage: NonNullableUsage;1461 usage: NonNullableUsage;

1263 modelUsage: { [modelName: string]: ModelUsage };1462 modelUsage: { [modelName: string]: ModelUsage };

1264 permission_denials: SDKPermissionDenial[];1463 permission_denials: SDKPermissionDenial[];

1464 queued_turn_count?: number;

1265 errors: string[];1465 errors: string[];

1466 user_message_uuid?: string;

1467 user_message_uuids?: string[];

1266 terminal_reason?: TerminalReason;1468 terminal_reason?: TerminalReason;

1267 fast_mode_state?: FastModeState;1469 fast_mode_state?: FastModeState;

1470 fast_mode_disabled_reason?: FastModeDisabledReason;

1268 origin?: SDKMessageOrigin;1471 origin?: SDKMessageOrigin;

1269 };1472 };

1270```1473```


1274* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为 `null`。1477* `api_error_status`:终止对话的 API 错误的 HTTP 状态码。当轮次在没有 API 错误的情况下结束时,该字段不存在或为 `null`。

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

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

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

1481* `user_message_uuids`:Claude Code 在此轮次中回答的您发送的每条消息的 `uuid`。请参阅 [`user_message_uuids`](#user_message_uuids)。

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

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

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

1485* `usage`:仅主代理循环。排除子代理和辅助模型调用,在流式输入会话中按轮次。优先使用 `modelUsage` 进行令牌/成本会计。

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

1487* `total_cost_usd`:此 `query()` 调用的累积估计成本(美元),涵盖与 `modelUsage` 相同的调用并在相同点重置。这是一个估计值,不是账单声明。请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)了解准确性注意事项。

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

1277* `terminal_reason`:循环结束的原因。为 `"completed"`、`"max_turns"`、`"tool_deferred"`、`"aborted_streaming"`、`"aborted_tools"`、`"hook_stopped"`、`"stop_hook_prevented"`、`"background_requested"`、`"blocking_limit"`、`"rapid_refill_breaker"`、`"prompt_too_long"`、`"image_error"`、`"model_error"`、`"api_error"`、`"malformed_tool_use_exhausted"`、`"budget_exhausted"`、`"structured_output_retry_exhausted"`、`"tool_deferred_unavailable"` 或 `"turn_setup_failed"` 之一。1489* `terminal_reason`:循环结束的原因。为 `"completed"`、`"max_turns"`、`"tool_deferred"`、`"aborted_streaming"`、`"aborted_tools"`、`"hook_stopped"`、`"stop_hook_prevented"`、`"background_requested"`、`"blocking_limit"`、`"rapid_refill_breaker"`、`"prompt_too_long"`、`"image_error"`、`"model_error"`、`"api_error"`、`"malformed_tool_use_exhausted"`、`"budget_exhausted"`、`"structured_output_retry_exhausted"`、`"tool_deferred_unavailable"` 或 `"turn_setup_failed"` 之一。

1278* `fast_mode_state`:为 `"on"`、`"off"` 或 `"cooldown"` 之一。1490* `fast_mode_state`:为 `"on"`、`"off"` 或 `"cooldown"` 之一。

1491* `fast_mode_disabled_reason`:为什么[快速模式](/docs/zh-CN/fast-mode)现在不可用。当没有任何东西阻止快速模式时不存在,尽管请求仍可能以标准速度运行。在快速模式速率限制后的冷却期间,Claude Code 报告 `fast_mode_state: "cooldown"` 且没有原因代码,并在冷却期过期时重新启用快速模式。需要 Claude Code v2.1.219 或更高版本。

1492 

1493使用原因代码在您自己的 UI 中解释为什么快速模式关闭,而不是重新推导可用性。每个代码命名阻止快速模式的检查:

1279 1494 

1280`origin` 字段转发触发此结果的用户消息的 [`SDKMessageOrigin`](#sdkmessageorigin)。当后台任务完成且 SDK 注入合成后续轮次时,生成的 `SDKResultMessage` 携带 `origin: { kind: "task-notification" }`。检查此字段以区分回答您的提示的结果与为后台任务后续操作发出的结果,以便您可以路由或抑制后者。对于在任何用户轮次之前发出的结果(例如启动错误),该字段不存在。1495| 原因代码 | 含义 |

1496| ---------------------- | ------------------------------------------------------------------------------------------------------------ |

1497| `free` | 账户没有快速模式所需的付费订阅或使用额度 |

1498| `preference` | 组织已禁用快速模式 |

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

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

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

1502| `not_first_party` | 会话使用 Anthropic API 以外的提供商 |

1503| `disabled_by_env` | [`CLAUDE_CODE_DISABLE_FAST_MODE`](/docs/zh-CN/env-vars) 已设置 |

1504| `model_not_allowed` | 快速模式 Opus 模型不在组织的 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 允许列表中 |

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

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

1281 1507 

1282当 `PreToolUse` hook 返回 `permissionDecision: "defer"` 时,结果具有 `stop_reason: "tool_deferred"` 和 `deferred_tool_use` 携带待处理工具的 `id`、`name` 和 `input`。读取此字段以在您自己的 UI 中显示请求,然后使用相同的 `session_id` 恢复以继续。有关完整的往返过程,请参阅[稍后延迟工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)。1508相同的字段对出现在 [`SDKSystemMessage`](#sdksystemmessage) 和 [`SDKControlInitializeResponse`](#sdkcontrolinitializeresponse) 上,因此您可以在第一个轮次之前读取快速模式状态。

1509 

1510`origin` 字段转发触发此结果的用户消息的 [`SDKMessageOrigin`](#sdkmessageorigin)。当 SDK 注入合成后续轮次(例如对于完成的后台任务)时,生成的 `SDKResultMessage` 携带 `origin: { kind: "task-notification" }`。例程的触发器触发和来自您其他会话的服务器验证消息也会到达此类,每个都带有[任务通知子类型](#task-notification-subkinds)中描述的 `subkind`。检查 `kind` 以区分回答您的提示的结果与注入的后续操作,然后再路由或抑制它们。

1511 

1512对于在任何用户轮次之前发出的结果(例如启动错误),该字段不存在。

1513 

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

1515 

1516<h4 id="user_message_uuid">

1517 `user_message_uuid`

1518</h4>

1519 

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

1521 

1522轮次回答的消息取决于轮次如何启动:

1523 

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

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

1526* **Claude Code 自己生成的提示**,例如在会话重启后继续中断工作的轮次:轮次最初不回答您的任何消息,其帧不携带回显。如果 Claude Code 在工具调用之间拾取您的常规消息,轮次从那时起回答该消息。拾取回显需要 Agent SDK v0.3.265 或更高版本;早期版本在这些轮次上不回显任何内容。

1527 

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

1529 

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

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

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

1533 

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

1535 

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

1537* 子代理帧

1538* 回答没有 `uuid` 的消息的轮次:轮次回答了您发送的没有 uuid 的消息,或 Claude Code 启动了轮次本身并拾取了没有 uuid 的常规消息

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

1540 

1541<h4 id="user_message_uuids">

1542 `user_message_uuids`

1543</h4>

1544 

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

1546 

1547Claude Code 在携带该字段的每个回复帧和结果上与 `user_message_uuid` 一起设置列表。对于携带 `user_message_uuid` 的完整帧集以及每个需要的版本,请参阅 [`user_message_uuid`](#user_message_uuid)。列表始终包含 `user_message_uuid` 并最多包含 64 个条目。

1548 

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

1550 

1551当第一个回复或结果携带 `user_message_uuid` 而没有列表时,它来自较早的 Claude Code 版本,因此回退到单个字段。

1552 

1553<h4 id="queued_turn_count">

1554 `queued_turn_count`

1555</h4>

1556 

1557您发送的带有 [`origin: { kind: "human" }`](#sdkmessageorigin) 的消息数量,在 Claude Code 产生结果时仍在命令队列中等待。需要 Agent SDK v0.3.242 或更高版本。

1558 

1559`0` 和缺失字段告诉您什么:

1560 

1561* **`0`**:Claude Code 不计算您发送的没有该 `origin` 的消息,也不计算任务通知,因此轮次仍可能跟随。

1562* **缺失**:Claude Code 在崩溃或致命启动错误后发出的最终结果省略该字段,并且[可能携带零化总计](/docs/zh-CN/agent-sdk/cost-tracking#recover-totals-after-a-session-crash)。

1283 1563 

1284<h3 id="sdksystemmessage">1564<h3 id="sdksystemmessage">

1285 `SDKSystemMessage`1565 `SDKSystemMessage`


1306 model: string;1586 model: string;

1307 permissionMode: PermissionMode;1587 permissionMode: PermissionMode;

1308 slash_commands: string[];1588 slash_commands: string[];

1589 terminal_slash_commands?: string[];

1309 output_style: string;1590 output_style: string;

1310 skills: string[];1591 skills: string[];

1311 plugins: { name: string; path: string }[];1592 plugins: { name: string; path: string }[];

1593 fast_mode_state?: FastModeState;

1594 fast_mode_disabled_reason?: FastModeDisabledReason;

1595 effort?: "low" | "medium" | "high" | "xhigh" | "max" | null;

1312 capabilities?: string[];1596 capabilities?: string[];

1313};1597};

1314```1598```

1315 1599 

1600`fast_mode_state` 报告会话的[快速模式](/docs/zh-CN/fast-mode)状态。当某些东西阻止快速模式时,`fast_mode_disabled_reason` 命名阻止它的检查;该字段需要 Claude Code v2.1.219 或更高版本。对于原因代码及其含义,请参阅结果消息上的 [`fast_mode_disabled_reason`](#sdkresultmessage)。

1601 

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

1603 

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

1605 

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

1317 1607 

1318| 功能 | 含义 |1608| 功能 | 含义 |

1319| ---------------------- | ------------------------------------------------------------------------------------------------------------------ |1609| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1320| `interrupt_receipt_v1` | [`interrupt()`](#query-object) 使用命名存活中断的排队消息的 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 收据进行解析 |1610| `interrupt_receipt_v1` | [`interrupt()`](#query-object) 使用列出中断到达时待处理消息的 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 收据进行解析 |

1611| `interrupt_cancel_queued_v1` | `interrupt` 控制请求遵守 `cancel_queued: true`,取消收据在 `still_queued` 下列出的消息,并改为在 `cancelled` 下列出它们。请参阅 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)。需要 Claude Code v2.1.219 或更高版本 |

1321 1612 

1322<h3 id="sdkpartialassistantmessage">1613<h3 id="sdkpartialassistantmessage">

1323 `SDKPartialAssistantMessage`1614 `SDKPartialAssistantMessage`


1333 uuid: UUID;1624 uuid: UUID;

1334 session_id: string;1625 session_id: string;

1335 ttft_ms?: number; // 首个令牌的时间(毫秒),仅在 message_start 事件上显示1626 ttft_ms?: number; // 首个令牌的时间(毫秒),仅在 message_start 事件上显示

1627 user_message_uuid?: string;

1628 user_message_uuids?: string[];

1336};1629};

1337```1630```

1338 1631 

1632Claude Code 在轮次的第一个非 ping 流事件上设置 `user_message_uuid` 和 `user_message_uuids`,以及当轮次回答的消息改变时,条件在 [`user_message_uuid`](#user_message_uuid) 中。

1633 

1339<h3 id="sdkcompactboundarymessage">1634<h3 id="sdkcompactboundarymessage">

1340 `SDKCompactBoundaryMessage`1635 `SDKCompactBoundaryMessage`

1341</h3>1636</h3>


1359 `SDKInformationalMessage`1654 `SDKInformationalMessage`

1360</h3>1655</h3>

1361 1656 

1362由循环发出的通用文本横幅。携带非错误状态行、hook 反馈(例如 `UserPromptSubmit` hook 的阻止原因)和命令输出。将 `content` 呈现为给定 `level` 的纯文本。1657由循环发出的通用文本横幅。携带非错误状态行、hook 反馈(例如 `UserPromptSubmit` hook 的阻止原因)和命令输出。在 Claude Code v2.1.227 或更高版本上,hook 的 [`systemMessage`](/docs/zh-CN/hooks#json-output) 可以作为此消息到达,每行前缀为 hook 的名称,例如 `PostToolUse:Bash says:`。hook 的 `systemMessage` 是否作为此消息到达取决于事件。每个[事件的部分](/docs/zh-CN/hooks#hook-events)在 hooks 页面上说明输出如何显示。将 `content` 呈现为给定 `level` 的纯文本。

1363 1658 

1364```typescript theme={null}1659```typescript theme={null}

1365type SDKInformationalMessage = {1660type SDKInformationalMessage = {


1412 `SDKPermissionDeniedMessage`1707 `SDKPermissionDeniedMessage`

1413</h3>1708</h3>

1414 1709 

1415当权限系统自动拒绝工具调用而不显示交互式提示时发出的流事件。使用它在发生时在您的 UI 中呈现拒绝,而不仅仅观察随后的 `is_error` 工具结果。交互式询问路径通过 [`canUseTool`](#canusetool) 回调单独到达您的应用程序。由 `PreToolUse` hook 发出的拒绝不会通过此事件报告。1710当权限系统拒绝工具调用而不显示交互式提示时发出的流事件。使用它在发生时在您的 UI 中呈现拒绝,而不仅仅观察随后的 `is_error` 工具结果。它报告哪些拒绝取决于运行如何处理权限提示:

1416 1711 

1417此事件需要 Claude Code v2.1.136 或更高版本。1712* **使用 [`canUseTool`](#canusetool) 回调**和默认 [`permissionPrompts: 'host'`](#options):权限提示转到您的回调,此事件报告 Claude Code 自己决定的拒绝,而不调用它。

1713* **都没有**:裸 `-p` 运行,或 `query()` 既不设置 `canUseTool` 也不设置 `permissionPromptToolName`,拒绝任何会提示的工具调用,此事件报告这些拒绝以及 Claude Code 自己决定的拒绝。在 v2.1.223 之前,Claude Code 在没有回调的运行中不发出此事件。

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

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

1716 

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

1418 1718 

1419```typescript theme={null}1719```typescript theme={null}

1420type SDKPermissionDeniedMessage = {1720type SDKPermissionDeniedMessage = {


1454};1754};

1455```1755```

1456 1756 

1757<h3 id="sdkcontextusage">

1758 `SDKContextUsage`

1759</h3>

1760 

1761`/context` 报告的结构化形式,作为 `context_usage` 在传递 `/context` 结果的 [`SDKAssistantMessage`](#sdkassistantmessage) 上携带。Agent SDK v0.3.232 及更高版本导出该类型。与 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) 不同,它仅携带呈现使用情况分解所需的数据,不包含 `color` 和 `gridRows` 等显示字段。

1762 

1763```typescript theme={null}

1764type SDKContextUsage = {

1765 model: string;

1766 total_tokens: number;

1767 raw_max_tokens: number;

1768 percentage: number;

1769 over_limit?: {

1770 tokens_over: number;

1771 kind: "hard_limit" | "compaction_window";

1772 };

1773 categories: SDKContextUsageCategory[];

1774 mcp_tools: {

1775 name: string;

1776 server_name: string;

1777 tokens: number;

1778 }[];

1779 memory_files: {

1780 path: string;

1781 type: string;

1782 tokens: number;

1783 }[];

1784 agents: {

1785 agent_type: string;

1786 source: string;

1787 tokens: number;

1788 }[];

1789 skills?: {

1790 name: string;

1791 source: string;

1792 plugin_name?: string;

1793 tokens: number;

1794 }[];

1795};

1796```

1797 

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

1799 

1800| 字段 | 类型 | 描述 |

1801| ---------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

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

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

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

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

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

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

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

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

1812 

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

1814 

1815* `hard_limit`:窗口是 Claude Code 认为是模型自己的限制,超过该限制 API 拒绝请求

1816* `compaction_window`:窗口是压缩策略窗口,可能与模型的限制一致,也可能不一致

1817 

1818Claude Code 以加法方式演进该类型,添加新数据作为可选字段而不是重塑现有字段。读取您知道的字段并忽略您不认识的任何字段。

1819 

1820<h3 id="sdkcontextusagecategory">

1821 `SDKContextUsageCategory`

1822</h3>

1823 

1824`/context` 使用情况按类别分解的一行。

1825 

1826```typescript theme={null}

1827type SDKContextUsageCategory = {

1828 name: string;

1829 tokens: number;

1830 kind: "used" | "free" | "buffer" | "deferred";

1831};

1832```

1833 

1834表格列出了 Claude Code 在行的每个字段中放入的内容。

1835 

1836| 字段 | 类型 | 描述 |

1837| -------- | -------- | ----------------------------------------------------------- |

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

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

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

1841 

1842每个 `kind` 值说明行的令牌是什么:

1843 

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

1845* `free`:剩余窗口

1846* `buffer`:压缩保留

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

1848 

1457<h3 id="sdkmessageorigin">1849<h3 id="sdkmessageorigin">

1458 `SDKMessageOrigin`1850 `SDKMessageOrigin`

1459</h3>1851</h3>


1467 | {1859 | {

1468 kind: "peer";1860 kind: "peer";

1469 from: string;1861 from: string;

1862 fromMode?: "bypass" | "prompting";

1470 name?: string;1863 name?: string;

1864 fromSession?: string;

1471 senderTaskId?: string;1865 senderTaskId?: string;

1472 body?: string;1866 body?: string;

1867 verifiedPeerPid?: number;

1868 }

1869 | {

1870 kind: "task-notification";

1871 subkind?: "scheduled-trigger" | "peer-send-message";

1473 }1872 }

1474 | { kind: "task-notification" }

1475 | { kind: "coordinator" }1873 | { kind: "coordinator" }

1476 | { kind: "auto-continuation" };1874 | { kind: "auto-continuation" }

1875 | { kind: "unclassified" };

1477```1876```

1478 1877 

1479| `kind` | 含义 |1878| `kind` | 含义 |

1480| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1879| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

1483| `peer` | 来自另一个代理的消息。对于通过 `SendMessage` 发送到 `main` 的进程内[队友](/docs/zh-CN/agent-teams),`from` 是队友的名称,`senderTaskId` 是其任务 ID。对于跨会话对等体(例如另一个本地 Claude Code 进程),`from` 是发送者地址,`senderTaskId` 不存在。}`name` 和 `body` 需要 Claude Code v2.1.205 或更高版本。`name` 是发送者的显示名称,由 Claude Code 规范化:它删除 Unicode 控制、格式、代理和行或段落分隔符代码点,然后修剪结果并将其限制为 64 个代码点,并带有省略号。`body` 是解码的消息正文,去除对等信封,与模型看到的字节完全相同。对于队友消息,`body` 始终存在;对于跨会话对等体,仅当轮次恰好是由 Claude Code 形成的一个对等信封时才存在。呈现 `name` 和 `body` 而不是重新解析消息文本。 |1882| `peer` | 来自另一个代理的消息:进程内[队友](/docs/zh-CN/agent-teams)或[跨会话对等体](/docs/zh-CN/cross-session-messaging),您的另一个 Claude Code 会话。请参阅[对等体来源字段](#peer-origin-fields)了解每个字段的语义和信任模型。 |

1484| `task-notification` | 后台任务完成后注入的合成轮次。请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)。 |1883| `task-notification` | 为没有新用户提示的交付注入的合成轮次,例如完成的后台任务;请参阅 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 了解该分支。可选的 `subkind` 标记引发通知的内容。请参阅[任务通知子类型](#task-notification-subkinds)。 |

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

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

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

1887 

1888<h3 id="task-notification-subkinds">

1889 任务通知子类型

1890</h3>

1891 

1892当 Claude Code 将任务通知传递到会话中时,它仅在 Anthropic 服务器验证该通知来自何处时才在通知的 `origin` 上设置 `subkind`。`subkind` 需要 Claude Code v2.1.213 或更高版本,它采用两个值之一:

1893 

1894* `scheduled-trigger`:通知是[例程](/docs/zh-CN/routines)的存储提示,因为例程的触发器之一触发而传递:其计划、其 [API 触发器](/docs/zh-CN/routines#add-an-api-trigger)、其 [GitHub 触发器](/docs/zh-CN/routines#add-a-github-trigger) 或**立即运行**。Claude Code 将这些框架给模型作为会话的分配任务,带有与[其他任务通知携带的通知](#sdktasknotificationmessage)不同的通知。

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

1896 

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

1898 

1899<h3 id="peer-origin-fields">

1900 对等体来源字段

1901</h3>

1902 

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

1904 

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

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

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

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

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

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

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

1487 1912 

1488<h2 id="hook-types">1913<h2 id="hook-types">

1489 Hook 类型1914 Hook 类型


1505 | "PostToolBatch"1930 | "PostToolBatch"

1506 | "Notification"1931 | "Notification"

1507 | "UserPromptSubmit"1932 | "UserPromptSubmit"

1933 | "UserPromptExpansion"

1508 | "SessionStart"1934 | "SessionStart"

1509 | "SessionEnd"1935 | "SessionEnd"

1510 | "Stop"1936 | "Stop"

1937 | "StopFailure"

1511 | "SubagentStart"1938 | "SubagentStart"

1512 | "SubagentStop"1939 | "SubagentStop"

1513 | "PreCompact"1940 | "PreCompact"

1941 | "PostCompact"

1942 | "PreModelSwitch"

1943 | "PostModelSwitch"

1514 | "PermissionRequest"1944 | "PermissionRequest"

1945 | "PermissionDenied"

1515 | "Setup"1946 | "Setup"

1516 | "TeammateIdle"1947 | "TeammateIdle"

1948 | "TaskCreated"

1517 | "TaskCompleted"1949 | "TaskCompleted"

1950 | "Elicitation"

1951 | "ElicitationResult"

1518 | "ConfigChange"1952 | "ConfigChange"

1953 | "DirectoryAdded"

1519 | "WorktreeCreate"1954 | "WorktreeCreate"

1520 | "WorktreeRemove"1955 | "WorktreeRemove"

1956 | "InstructionsLoaded"

1957 | "CwdChanged"

1958 | "FileChanged"

1521 | "MessageDisplay";1959 | "MessageDisplay";

1522```1960```

1523 1961 


1561 | PostToolUseHookInput1999 | PostToolUseHookInput

1562 | PostToolUseFailureHookInput2000 | PostToolUseFailureHookInput

1563 | PostToolBatchHookInput2001 | PostToolBatchHookInput

2002 | PermissionDeniedHookInput

1564 | NotificationHookInput2003 | NotificationHookInput

1565 | UserPromptSubmitHookInput2004 | UserPromptSubmitHookInput

2005 | UserPromptExpansionHookInput

1566 | SessionStartHookInput2006 | SessionStartHookInput

1567 | SessionEndHookInput2007 | SessionEndHookInput

1568 | StopHookInput2008 | StopHookInput

2009 | StopFailureHookInput

1569 | SubagentStartHookInput2010 | SubagentStartHookInput

1570 | SubagentStopHookInput2011 | SubagentStopHookInput

1571 | PreCompactHookInput2012 | PreCompactHookInput

2013 | PostCompactHookInput

2014 | PreModelSwitchHookInput

2015 | PostModelSwitchHookInput

1572 | PermissionRequestHookInput2016 | PermissionRequestHookInput

1573 | SetupHookInput2017 | SetupHookInput

1574 | TeammateIdleHookInput2018 | TeammateIdleHookInput

2019 | TaskCreatedHookInput

1575 | TaskCompletedHookInput2020 | TaskCompletedHookInput

2021 | ElicitationHookInput

2022 | ElicitationResultHookInput

1576 | ConfigChangeHookInput2023 | ConfigChangeHookInput

2024 | InstructionsLoadedHookInput

2025 | DirectoryAddedHookInput

1577 | WorktreeCreateHookInput2026 | WorktreeCreateHookInput

1578 | WorktreeRemoveHookInput2027 | WorktreeRemoveHookInput

2028 | CwdChangedHookInput

2029 | FileChangedHookInput

1579 | MessageDisplayHookInput;2030 | MessageDisplayHookInput;

1580```2031```

1581 2032 


1664};2115};

1665```2116```

1666 2117 

2118<h4 id="permissiondeniedhookinput">

2119 `PermissionDeniedHookInput`

2120</h4>

2121 

2122```typescript theme={null}

2123type PermissionDeniedHookInput = BaseHookInput & {

2124 hook_event_name: "PermissionDenied";

2125 tool_name: string;

2126 tool_input: unknown;

2127 tool_use_id: string;

2128 reason: string;

2129};

2130```

2131 

1667<h4 id="notificationhookinput">2132<h4 id="notificationhookinput">

1668 `NotificationHookInput`2133 `NotificationHookInput`

1669</h4>2134</h4>


1685type UserPromptSubmitHookInput = BaseHookInput & {2150type UserPromptSubmitHookInput = BaseHookInput & {

1686 hook_event_name: "UserPromptSubmit";2151 hook_event_name: "UserPromptSubmit";

1687 prompt: string;2152 prompt: string;

2153 session_title?: string;

2154};

2155```

2156 

2157<h4 id="userpromptexpansionhookinput">

2158 `UserPromptExpansionHookInput`

2159</h4>

2160 

2161```typescript theme={null}

2162type UserPromptExpansionHookInput = BaseHookInput & {

2163 hook_event_name: "UserPromptExpansion";

2164 expansion_type: "slash_command" | "mcp_prompt";

2165 command_name: string;

2166 command_args: string;

2167 command_source?: string;

2168 prompt: string;

1688};2169};

1689```2170```

1690 2171 


1695```typescript theme={null}2176```typescript theme={null}

1696type SessionStartHookInput = BaseHookInput & {2177type SessionStartHookInput = BaseHookInput & {

1697 hook_event_name: "SessionStart";2178 hook_event_name: "SessionStart";

1698 source: "startup" | "resume" | "clear" | "compact";2179 source: "startup" | "resume" | "clear" | "compact" | "fork";

1699 agent_type?: string;2180 agent_type?: string;

1700 model?: string;2181 model?: string;

2182 session_title?: string;

1701};2183};

1702```2184```

1703 2185 


1726};2208};

1727```2209```

1728 2210 

2211<h4 id="stopfailurehookinput">

2212 `StopFailureHookInput`

2213</h4>

2214 

2215```typescript theme={null}

2216type StopFailureHookInput = BaseHookInput & {

2217 hook_event_name: "StopFailure";

2218 error: SDKAssistantMessageError;

2219 error_details?: string;

2220 last_assistant_message?: string;

2221};

2222```

2223 

1729<h4 id="subagentstarthookinput">2224<h4 id="subagentstarthookinput">

1730 `SubagentStartHookInput`2225 `SubagentStartHookInput`

1731</h4>2226</h4>


1786};2281};

1787```2282```

1788 2283 

2284<h4 id="postcompacthookinput">

2285 `PostCompactHookInput`

2286</h4>

2287 

2288```typescript theme={null}

2289type PostCompactHookInput = BaseHookInput & {

2290 hook_event_name: "PostCompact";

2291 trigger: "manual" | "auto";

2292 compact_summary: string;

2293};

2294```

2295 

2296<h4 id="premodelswitchhookinput">

2297 `PreModelSwitchHookInput`

2298</h4>

2299 

2300在请求的模型切换生效之前触发。`context_tokens` 和之后的字段估计向新模型重新发送对话的成本。有关完整的字段描述和阻止语义,请参阅 [PreModelSwitch](/docs/zh-CN/hooks#premodelswitch)。

2301 

2302```typescript theme={null}

2303type PreModelSwitchHookInput = BaseHookInput & {

2304 hook_event_name: "PreModelSwitch";

2305 from_model: string;

2306 to_model: string;

2307 requested_model: string | null;

2308 source: "command" | "picker" | "sdk";

2309 context_tokens: number;

2310 prompt_cache_warm: boolean;

2311 cache_ttl: "5m" | "1h";

2312 estimated_cache_write_usd: number;

2313 pricing: "configured" | "catalog" | "default";

2314};

2315```

2316 

2317<h4 id="postmodelswitchhookinput">

2318 `PostModelSwitchHookInput`

2319</h4>

2320 

2321在会话的模型更改后触发。它携带与 `PreModelSwitchHookInput` 相同的字段,另外还有两个 `source` 值。请参阅 [PostModelSwitch](/docs/zh-CN/hooks#postmodelswitch)。

2322 

2323```typescript theme={null}

2324type PostModelSwitchHookInput = BaseHookInput & {

2325 hook_event_name: "PostModelSwitch";

2326 from_model: string;

2327 to_model: string;

2328 requested_model: string | null;

2329 source: "command" | "picker" | "sdk" | "auto" | "resume";

2330 context_tokens: number;

2331 prompt_cache_warm: boolean;

2332 cache_ttl: "5m" | "1h";

2333 estimated_cache_write_usd: number;

2334 pricing: "configured" | "catalog" | "default";

2335};

2336```

2337 

1789<h4 id="permissionrequesthookinput">2338<h4 id="permissionrequesthookinput">

1790 `PermissionRequestHookInput`2339 `PermissionRequestHookInput`

1791</h4>2340</h4>


1823};2372};

1824```2373```

1825 2374 

1826<h4 id="taskcompletedhookinput">2375<h4 id="taskcreatedhookinput">

1827 `TaskCompletedHookInput`2376 `TaskCreatedHookInput`

1828</h4>2377</h4>

1829 2378 

1830```typescript theme={null}2379```typescript theme={null}

1831type TaskCompletedHookInput = BaseHookInput & {2380type TaskCreatedHookInput = BaseHookInput & {

1832 hook_event_name: "TaskCompleted";2381 hook_event_name: "TaskCreated";

1833 task_id: string;2382 task_id: string;

1834 task_subject: string;2383 task_subject: string;

1835 task_description?: string;2384 task_description?: string;


1839};2388};

1840```2389```

1841 2390 

2391<h4 id="taskcompletedhookinput">

2392 `TaskCompletedHookInput`

2393</h4>

2394 

2395```typescript theme={null}

2396type TaskCompletedHookInput = BaseHookInput & {

2397 hook_event_name: "TaskCompleted";

2398 task_id: string;

2399 task_subject: string;

2400 task_description?: string;

2401 teammate_name?: string;

2402 /** @deprecated 自 v2.1.178 起已弃用。携带会话派生的团队名称;将被移除。 */

2403 team_name?: string;

2404};

2405```

2406 

2407<h4 id="elicitationhookinput">

2408 `ElicitationHookInput`

2409</h4>

2410 

2411```typescript theme={null}

2412type ElicitationHookInput = BaseHookInput & {

2413 hook_event_name: "Elicitation";

2414 mcp_server_name: string;

2415 message: string;

2416 mode?: "form" | "url";

2417 url?: string;

2418 elicitation_id?: string;

2419 requested_schema?: Record<string, unknown>;

2420};

2421```

2422 

2423<h4 id="elicitationresulthookinput">

2424 `ElicitationResultHookInput`

2425</h4>

2426 

2427```typescript theme={null}

2428type ElicitationResultHookInput = BaseHookInput & {

2429 hook_event_name: "ElicitationResult";

2430 mcp_server_name: string;

2431 elicitation_id?: string;

2432 mode?: "form" | "url";

2433 action: "accept" | "decline" | "cancel";

2434 content?: Record<string, unknown>;

2435};

2436```

2437 

1842<h4 id="configchangehookinput">2438<h4 id="configchangehookinput">

1843 `ConfigChangeHookInput`2439 `ConfigChangeHookInput`

1844</h4>2440</h4>


1856};2452};

1857```2453```

1858 2454 

2455<h4 id="instructionsloadedhookinput">

2456 `InstructionsLoadedHookInput`

2457</h4>

2458 

2459```typescript theme={null}

2460type InstructionsLoadedHookInput = BaseHookInput & {

2461 hook_event_name: "InstructionsLoaded";

2462 file_path: string;

2463 memory_type: "User" | "Project" | "Local" | "Managed";

2464 load_reason:

2465 | "session_start"

2466 | "nested_traversal"

2467 | "path_glob_match"

2468 | "include"

2469 | "compact";

2470 globs?: string[];

2471 trigger_file_path?: string;

2472 parent_file_path?: string;

2473};

2474```

2475 

2476<h4 id="directoryaddedhookinput">

2477 `DirectoryAddedHookInput`

2478</h4>

2479 

2480```typescript theme={null}

2481type DirectoryAddedHookInput = BaseHookInput & {

2482 hook_event_name: "DirectoryAdded";

2483 directory: string;

2484 source: "slash_command" | "register_repo_root";

2485};

2486```

2487 

2488`directory` 是被添加的目录的绝对路径。当 `/add-dir` 添加它时,`source` 是 `"slash_command"`,当 SDK 控制请求添加它时,`source` 是 `"register_repo_root"`。

2489 

1859<h4 id="worktreecreatehookinput">2490<h4 id="worktreecreatehookinput">

1860 `WorktreeCreateHookInput`2491 `WorktreeCreateHookInput`

1861</h4>2492</h4>


1878};2509};

1879```2510```

1880 2511 

2512<h4 id="cwdchangedhookinput">

2513 `CwdChangedHookInput`

2514</h4>

2515 

2516```typescript theme={null}

2517type CwdChangedHookInput = BaseHookInput & {

2518 hook_event_name: "CwdChanged";

2519 old_cwd: string;

2520 new_cwd: string;

2521};

2522```

2523 

2524<h4 id="filechangedhookinput">

2525 `FileChangedHookInput`

2526</h4>

2527 

2528```typescript theme={null}

2529type FileChangedHookInput = BaseHookInput & {

2530 hook_event_name: "FileChanged";

2531 file_path: string;

2532 event: "change" | "add" | "unlink";

2533};

2534```

2535 

1881<h4 id="messagedisplayhookinput">2536<h4 id="messagedisplayhookinput">

1882 `MessageDisplayHookInput`2537 `MessageDisplayHookInput`

1883</h4>2538</h4>


1925 stopReason?: string;2580 stopReason?: string;

1926 decision?: "approve" | "block";2581 decision?: "approve" | "block";

1927 systemMessage?: string;2582 systemMessage?: string;

2583 /**

2584 * 一个终端转义序列(例如 OSC 9 / OSC 777 desktop-notification)

2585 * 供 Claude Code 代表您发出。仅允许通知/标题 OSCs

2586 * (0、1、2、9、99、777)和 BEL;包含任何其他内容的值

2587 * 将被整体忽略。仅交互式 CLI 会发出它;SDK 忽略该字段。

2588 */

2589 terminalSequence?: string;

1928 reason?: string;2590 reason?: string;

1929 hookSpecificOutput?:2591 hookSpecificOutput?:

1930 | {2592 | {


1937 | {2599 | {

1938 hookEventName: "UserPromptSubmit";2600 hookEventName: "UserPromptSubmit";

1939 additionalContext?: string;2601 additionalContext?: string;

2602 sessionTitle?: string;

2603 /** 当 decision 为 "block" 时,从阻止消息中省略原始提示。 */

2604 suppressOriginalPrompt?: boolean;

2605 }

2606 | {

2607 hookEventName: "UserPromptExpansion";

2608 additionalContext?: string;

1940 }2609 }

1941 | {2610 | {

1942 hookEventName: "SessionStart";2611 hookEventName: "SessionStart";

1943 additionalContext?: string;2612 additionalContext?: string;

2613 initialUserMessage?: string;

2614 sessionTitle?: string;

2615 watchPaths?: string[];

2616 /**

2617 * SessionStart hooks 完成后重新扫描 skill 和命令目录,

2618 * 以便 hook 安装的 skills 在同一会话中可用。

2619 */

2620 reloadSkills?: boolean;

1944 }2621 }

1945 | {2622 | {

1946 hookEventName: "Setup";2623 hookEventName: "Setup";

1947 additionalContext?: string;2624 additionalContext?: string;

1948 }2625 }

2626 | {

2627 hookEventName: "PreModelSwitch";

2628 /**

2629 * 与 PreToolUse 相同的约定:"allow" 继续,"deny" 取消

2630 * 切换,"ask" 要求用户确认。仅交互式会话中的 /model

2631 * 显示该提示;其他所有表面,包括 set_model 请求,

2632 * 将 "ask" 视为拒绝。

2633 */

2634 permissionDecision?: "allow" | "deny" | "ask";

2635 permissionDecisionReason?: string;

2636 }

2637 | {

2638 hookEventName: "PostModelSwitch";

2639 /** 通过新模型服务的下一个请求到达模型。 */

2640 additionalContext?: string;

2641 }

1949 | {2642 | {

1950 hookEventName: "SubagentStart";2643 hookEventName: "SubagentStart";

1951 additionalContext?: string;2644 additionalContext?: string;


1953 | {2646 | {

1954 hookEventName: "PostToolUse";2647 hookEventName: "PostToolUse";

1955 additionalContext?: string;2648 additionalContext?: string;

2649 /**

2650 * 关于此工具调用结果的简短说明,用于自动模式

2651 * 权限分类器。限制为 2000 个字符,在响应同一调用的

2652 * 所有 hooks 之间共享;仅在同步 hook 响应上被接受。

2653 * 不要将不受信任的工具输出复制到其中。

2654 */

2655 classifierContext?: string;

1956 updatedToolOutput?: unknown;2656 updatedToolOutput?: unknown;

1957 /** @deprecated 使用 `updatedToolOutput`,它适用于所有工具。 */2657 /** @deprecated 使用 `updatedToolOutput`,它适用于所有工具。 */

1958 updatedMCPToolOutput?: unknown;2658 updatedMCPToolOutput?: unknown;


1965 hookEventName: "PostToolBatch";2665 hookEventName: "PostToolBatch";

1966 additionalContext?: string;2666 additionalContext?: string;

1967 }2667 }

2668 | {

2669 hookEventName: "Stop";

2670 additionalContext?: string;

2671 }

2672 | {

2673 hookEventName: "SubagentStop";

2674 additionalContext?: string;

2675 }

2676 | {

2677 hookEventName: "PermissionDenied";

2678 retry?: boolean;

2679 }

1968 | {2680 | {

1969 hookEventName: "Notification";2681 hookEventName: "Notification";

1970 additionalContext?: string;2682 additionalContext?: string;


1982 message?: string;2694 message?: string;

1983 interrupt?: boolean;2695 interrupt?: boolean;

1984 };2696 };

2697 }

2698 | {

2699 hookEventName: "Elicitation";

2700 action?: "accept" | "decline" | "cancel";

2701 content?: Record<string, unknown>;

2702 }

2703 | {

2704 hookEventName: "ElicitationResult";

2705 action?: "accept" | "decline" | "cancel";

2706 content?: Record<string, unknown>;

2707 }

2708 | {

2709 hookEventName: "CwdChanged";

2710 watchPaths?: string[];

2711 }

2712 | {

2713 hookEventName: "FileChanged";

2714 watchPaths?: string[];

2715 }

2716 | {

2717 hookEventName: "WorktreeCreate";

2718 worktreePath: string;

2719 }

2720 | {

2721 hookEventName: "MessageDisplay";

2722 /** 用来代替 delta 显示的文本。省略(或返回 delta 不变)以显示原始内容。 */

2723 displayContent?: string;

1985 };2724 };

1986};2725};

1987```2726```


1996 `ToolInputSchemas`2735 `ToolInputSchemas`

1997</h3>2736</h3>

1998 2737 

1999所有工具输入类型的联合,从 `@anthropic-ai/claude-agent-sdk` 导出。2738从 `@anthropic-ai/claude-agent-sdk` 导出的工具输入类型的联合;成员包括:

2000 2739 

2001```typescript theme={null}2740```typescript theme={null}

2002type ToolInputSchemas =2741type ToolInputSchemas =

2003 | AgentInput2742 | AgentInput

2743 | ArtifactInput

2004 | AskUserQuestionInput2744 | AskUserQuestionInput

2005 | BashInput2745 | BashInput

2006 | TaskOutputInput2746 | CronCreateInput

2747 | CronDeleteInput

2748 | CronListInput

2749 | EnterPlanModeInput

2007 | EnterWorktreeInput2750 | EnterWorktreeInput

2008 | ExitPlanModeInput2751 | ExitPlanModeInput

2752 | ExitWorktreeInput

2009 | FileEditInput2753 | FileEditInput

2010 | FileReadInput2754 | FileReadInput

2011 | FileWriteInput2755 | FileWriteInput


2015 | McpInput2759 | McpInput

2016 | MonitorInput2760 | MonitorInput

2017 | NotebookEditInput2761 | NotebookEditInput

2762 | ProjectsInput

2763 | PushNotificationInput

2764 | ReadMcpResourceDirInput

2018 | ReadMcpResourceInput2765 | ReadMcpResourceInput

2019 | SubscribeMcpResourceInput2766 | RefreshMcpToolsInput

2020 | SubscribePollingInput2767 | RemoteTriggerInput

2768 | REPLInput

2769 | ReportFindingsInput

2770 | ScheduleWakeupInput

2771 | ShowOnboardingRolePickerInput

2021 | TaskCreateInput2772 | TaskCreateInput

2022 | TaskGetInput2773 | TaskGetInput

2023 | TaskListInput2774 | TaskListInput

2775 | TaskOutputInput

2024 | TaskStopInput2776 | TaskStopInput

2025 | TaskUpdateInput2777 | TaskUpdateInput

2026 | TodoWriteInput2778 | TodoWriteInput

2027 | UnsubscribeMcpResourceInput

2028 | UnsubscribePollingInput

2029 | WebFetchInput2779 | WebFetchInput

2030 | WebSearchInput2780 | WebSearchInput

2031 | WorkflowInput;2781 | WorkflowInput;


2035 Agent2785 Agent

2036</h3>2786</h3>

2037 2787 

2038**工具名称:** `Agent`(之前为 `Task`,仍然接受作为别名)2788**工具名称:** `Agent`。之前的名称 `Task` 仍然被接受作为别名,[`SDKSystemMessage`](#sdksystemmessage) 初始化消息中的 `tools` 数组目前为了向后兼容仍将此工具列为 `Task`。

2789 

2790<Note>

2791 `mode` 字段在 Claude Code v2.1.212 或更高版本上已弃用且被忽略。子代理在父会话的权限模式或其定义的 [`permissionMode`](#agentdefinition) 中运行,[子代理继承规则](/docs/zh-CN/agent-sdk/permissions#available-modes)决定使用哪一个。

2792</Note>

2039 2793 

2040```typescript theme={null}2794```typescript theme={null}

2041type AgentInput = {2795type AgentInput = {


2045 model?: "sonnet" | "opus" | "haiku" | "fable";2799 model?: "sonnet" | "opus" | "haiku" | "fable";

2046 run_in_background?: boolean;2800 run_in_background?: boolean;

2047 name?: string;2801 name?: string;

2048 mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan";2802 team_name?: string; // 已弃用;被忽略

2049 isolation?: "worktree";2803 mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan"; // 已弃用;被忽略。子代理继承规则决定子代理的权限模式

2804 isolation?: "worktree" | "remote";

2050};2805};

2051```2806```

2052 2807 


2066 options: Array<{ label: string; description: string; preview?: string }>;2821 options: Array<{ label: string; description: string; preview?: string }>;

2067 multiSelect: boolean;2822 multiSelect: boolean;

2068 }>;2823 }>;

2824 answers?: Record<string, string>;

2825 annotations?: Record<string, { preview?: string; notes?: string }>;

2826 metadata?: { source?: string };

2069};2827};

2070```2828```

2071 2829 


2087};2845};

2088```2846```

2089 2847 

2090在持久 shell 会话中执行 bash 命令,支持可选超时和后台执行。2848执行 Bash 命令,支持可选超时和后台执行。工作目录在命令之间保持不变,包括多轮会话后续轮次中运行的命令;shell 状态(如导出的环境变量)不保持。有关哪些目录更改会保持的限制,请参阅[命令之间保持什么](/docs/zh-CN/tools-reference#what-persists-between-commands)。

2091 2849 

2092<h3 id="monitor">2850<h3 id="monitor">

2093 Monitor2851 Monitor


2103 protocols?: string[];2861 protocols?: string[];

2104 };2862 };

2105 description: string;2863 description: string;

2106 timeout_ms?: number;2864 timeout_ms: number;

2107 persistent?: boolean;2865 persistent: boolean;

2108};2866};

2109```2867```

2110 2868 

2111运行后台源并将每个事件传递给 Claude,以便它可以做出反应而无需轮询:`command` 运行脚本并为每个 stdout 行发出一个事件,`ws` 打开 WebSocket 并为每个文本帧发出一个事件。恰好提供 `command` 或 `ws` 之一。`ws` 源需要 Claude Code v2.1.195 或更高版本。2869运行后台源并将每个事件传递给 Claude,以便它可以做出反应而无需轮询:`command` 运行脚本并为每个 stdout 行发出一个事件,`ws` 打开 WebSocket 并为每个文本帧发出一个事件。恰好提供 `command` 或 `ws` 之一。`ws` 源需要 Claude Code v2.1.195 或更高版本。

2112 2870 

2113为会话长度的监视(如日志尾部)设置 `persistent: true`。当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。请参阅 [Monitor 工具参考](/docs/zh-CN/tools-reference#monitor-tool)了解行为和提供商可用性。2871为会话长度的监视(如日志尾部)设置 `persistent: true`。当 Monitor 运行命令时,它遵循与 Bash 相同的权限规则;WebSocket 监视会单独提示批准。请参阅 [Monitor 工具参考](/docs/zh-CN/tools-reference#monitor-tool)了解行为和提供商可用性。导出的类型将 `timeout_ms` 和 `persistent` 标记为必需,因为架构填充了它们的默认值 300000 和 `false`;省略它们的调用会验证通过。

2114 2872 

2115<h3 id="taskoutput">2873<h3 id="taskoutput">

2116 TaskOutput2874 TaskOutput


2118 2876 

2119**工具名称:** `TaskOutput`2877**工具名称:** `TaskOutput`

2120 2878 

2879<Note>`TaskOutput` 已弃用;改为在任务的输出文件路径上使用 `Read`。以下架构对于遇到该工具的 hooks 和权限处理程序仍然有效。</Note>

2880 

2121```typescript theme={null}2881```typescript theme={null}

2122type TaskOutputInput = {2882type TaskOutputInput = {

2123 task_id: string;2883 task_id: string;


2162 2922 

2163从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 `pages`(例如,`"1-5"`)。2923从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 `pages`(例如,`"1-5"`)。

2164 2924 

2925对于 PDF,Claude 在 Read 调用的 `tool_result` 内容中接收文件的内容。返回 `pdf` [输出](#tool-output-types)的读取操作包含一个摘要 `text` 块,后跟一个 `document` 块。返回 `parts` 输出的读取操作包含摘要 `text` 块,后跟每个提取页面的一个块:一个 `image` 块,或当 Claude Code 无法将其呈现为图像时命名该页面的 `text` 块。在 Agent SDK v0.3.242 之前,Claude Code 在工具结果后作为单独的 `user` 消息传递文件的内容。

2926 

2165<h3 id="write">2927<h3 id="write">

2166 Write2928 Write

2167</h3>2929</h3>


2206 type?: string;2968 type?: string;

2207 output_mode?: "content" | "files_with_matches" | "count";2969 output_mode?: "content" | "files_with_matches" | "count";

2208 "-i"?: boolean;2970 "-i"?: boolean;

2971 "-o"?: boolean; // 仅打印每行的匹配部分;需要 output_mode: "content"

2209 "-n"?: boolean;2972 "-n"?: boolean;

2210 "-B"?: number;2973 "-B"?: number;

2211 "-A"?: number;2974 "-A"?: number;


2294 script?: string;3057 script?: string;

2295 name?: string;3058 name?: string;

2296 scriptPath?: string;3059 scriptPath?: string;

2297 args?: unknown;3060 args?: unknown; // 任何 JSON 值;发布的类型将其呈现为对象映射

2298 resumeFromRunId?: string;3061 resumeFromRunId?: string;

3062 title?: string; // 被忽略;脚本的 meta 块设置标题

3063 description?: string; // 被忽略;脚本的 meta 块设置描述

2299};3064};

2300```3065```

2301 3066 


2305| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3070| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2306| `script` | `string` | 内联工作流脚本。必须以 `export const meta = { name, description }` 作为字面量开头,后跟使用 `agent()`、`parallel()`、`pipeline()` 和 `phase()` 的脚本主体。`meta` 中的可选 `phases` 数组在进度视图中将代理分组到命名阶段下 |3071| `script` | `string` | 内联工作流脚本。必须以 `export const meta = { name, description }` 作为字面量开头,后跟使用 `agent()`、`parallel()`、`pipeline()` 和 `phase()` 的脚本主体。`meta` 中的可选 `phases` 数组在进度视图中将代理分组到命名阶段下 |

2307| `name` | `string` | 内置工作流的名称或保存在 `.claude/workflows/` 中的工作流名称。解析为脚本 |3072| `name` | `string` | 内置工作流的名称或保存在 `.claude/workflows/` 中的工作流名称。解析为脚本 |

2308| `scriptPath` | `string` | 磁盘上工作流脚本文件的路径。优先于 `script` 和 `name`。每次调用都会持久化其脚本并在结果中返回路径,因此您可以编辑该文件并使用相同的 `scriptPath` 重新调用以进行迭代 |3073| `scriptPath` | `string` | 磁盘上工作流脚本文件的路径。优先于 `script` 和 `name`。Claude Code 持久化每次调用的脚本并在结果中返回路径,因此您可以编辑该文件并使用相同的 `scriptPath` 重新调用以进行迭代 |

2309| `args` | `unknown` | 输入值,作为全局 `args` 暴露给脚本,用于参数化的命名工作流,例如研究问题或文件路径列表。将数组和对象作为实际 JSON 值传递,而不是作为 JSON 编码的字符串 |3074| `args` | `unknown` | 输入值,作为全局 `args` 暴露给脚本,用于参数化的命名工作流,例如研究问题或文件路径列表。将数组和对象作为实际 JSON 值传递,而不是作为 JSON 编码的字符串 |

2310| `resumeFromRunId` | `string` | 要恢复的先前 `Workflow` 调用的运行 ID。具有未更改输入的已完成 `agent()` 调用返回缓存的结果;只有更改或新的调用才会实时运行。仅限同一会话 |3075| `resumeFromRunId` | `string` | 要恢复的先前 `Workflow` 调用的运行 ID。具有未更改输入的已完成 `agent()` 调用通常返回缓存的结果;其余的实时运行。[暂停后恢复](/docs/zh-CN/workflows#resume-after-a-pause)涵盖哪些已完成的调用会重新运行。仅限同一会话 |

3076| `title` | `string` | 被忽略;脚本的 `meta` 块设置标题 |

3077| `description` | `string` | 被忽略;脚本的 `meta` 块设置描述 |

2311 3078 

2312<h3 id="todowrite">3079<h3 id="todowrite">

2313 TodoWrite3080 TodoWrite


2328创建和管理结构化任务列表以跟踪进度。3095创建和管理结构化任务列表以跟踪进度。

2329 3096 

2330<Note>3097<Note>

2331 自 TypeScript Agent SDK 0.3.142 起,`TodoWrite` 默认被禁用。改用 `TaskCreate`、`TaskGet`、`TaskUpdate` 和 `TaskList`。请参阅[迁移到 Task 工具](/docs/zh-CN/agent-sdk/todo-tracking#migrate-to-task-tools)以更新您的监视代码,或设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以恢复为 `TodoWrite`。3098 The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn't recognize, they aren't available unless you opt in:

3099 

3100 * `TodoWrite`

3101 * `TaskCreate`

3102 * `TaskGet`

3103 * `TaskUpdate`

3104 * `TaskList`

3105 

3106 Wherever the tools are available, Claude Code provides the four Task tools, or `TodoWrite` instead when you set `CLAUDE_CODE_ENABLE_TASKS=0`.

3107 

3108 This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.

3109 

3110 请参阅[模型可用性](/docs/zh-CN/agent-sdk/todo-tracking#model-availability)以选择加入。

2332</Note>3111</Note>

2333 3112 

2334<h3 id="taskcreate">3113<h3 id="taskcreate">


2409 tool: "Bash";3188 tool: "Bash";

2410 prompt: string;3189 prompt: string;

2411 }>;3190 }>;

3191 [k: string]: unknown;

2412};3192};

2413```3193```

2414 3194 

2415退出规划模式。`allowedPrompts` 字段已弃用且被忽略;Claude Code 仍然接受它,以便现有调用者和记录验证。在 v2.1.205 之前,它请求基于提示的 Bash 权限以实现计划。3195退出 Plan Mode。`allowedPrompts` 字段已弃用且被忽略;Claude Code 仍然接受它,以便现有调用者和记录验证。在 v2.1.205 之前,它请求基于提示的 Bash 权限以实现计划。

2416 3196 

2417<h3 id="listmcpresources">3197<h3 id="listmcpresources">

2418 ListMcpResources3198 ListMcpResources


2458 3238 

2459创建并进入临时 git worktree 以进行隔离工作。传递 `path` 以切换到现有 worktree 而不是创建新的。在首次进入时,目标必须是当前存储库的已注册 worktree,或在多存储库工作区中,必须是嵌套在其中的存储库的已注册 worktree;从 worktree 会话内进入时,必须在会话存储库的 `.claude/worktrees/` 下。`name` 和 `path` 互斥。3239创建并进入临时 git worktree 以进行隔离工作。传递 `path` 以切换到现有 worktree 而不是创建新的。在首次进入时,目标必须是当前存储库的已注册 worktree,或在多存储库工作区中,必须是嵌套在其中的存储库的已注册 worktree;从 worktree 会话内进入时,必须在会话存储库的 `.claude/worktrees/` 下。`name` 和 `path` 互斥。

2460 3240 

3241<h3 id="exitworktree">

3242 ExitWorktree

3243</h3>

3244 

3245**工具名称:** `ExitWorktree`

3246 

3247```typescript theme={null}

3248type ExitWorktreeInput = {

3249 action: "keep" | "remove";

3250 discard_changes?: boolean;

3251};

3252```

3253 

3254退出当前 git worktree 并返回到原始工作目录。`keep` 操作将 worktree 和分支保留在磁盘上,而 `remove` 删除两者。当删除具有未提交文件或未合并提交的 worktree 时,`discard_changes` 必须为 `true`。

3255 

3256<h3 id="enterplanmode">

3257 EnterPlanMode

3258</h3>

3259 

3260**工具名称:** `EnterPlanMode`

3261 

3262```typescript theme={null}

3263type EnterPlanModeInput = {};

3264```

3265 

3266进入 Plan Mode,Claude 在其中研究并呈现计划,然后再进行更改。

3267 

3268<h3 id="croncreate">

3269 CronCreate

3270</h3>

3271 

3272**工具名称:** `CronCreate`

3273 

3274```typescript theme={null}

3275type CronCreateInput = {

3276 cron: string;

3277 prompt: string;

3278 recurring?: boolean;

3279 durable?: boolean;

3280};

3281```

3282 

3283在本地时间的 5 字段 cron 计划上安排提示运行。将 `recurring` 设置为 `false` 以在下一个匹配时仅触发一次。作业默认为会话范围:启动新对话会清除它们,使用 `--resume` 或 `--continue` 恢复会恢复尚未过期的作业。请参阅[计划任务](/docs/zh-CN/scheduled-tasks)。

3284 

3285将 `durable` 设置为 `true` 请求持久化到 `.claude/scheduled_tasks.json`,以便作业在重启后继续存在。持久化调度并非在每个会话中都可用:当不可用时,Claude Code 接受 `durable: true` 但创建仅会话的作业。读取输出的 `durable` 字段以查看作业是否已持久化。

3286 

3287<h3 id="crondelete">

3288 CronDelete

3289</h3>

3290 

3291**工具名称:** `CronDelete`

3292 

3293```typescript theme={null}

3294type CronDeleteInput = {

3295 id: string;

3296};

3297```

3298 

3299按从 `CronCreate` 返回的 ID 删除计划的 cron 作业。

3300 

3301<h3 id="cronlist">

3302 CronList

3303</h3>

3304 

3305**工具名称:** `CronList`

3306 

3307```typescript theme={null}

3308type CronListInput = {};

3309```

3310 

3311列出计划的 cron 作业:来自 `.claude/scheduled_tasks.json` 的持久化作业和来自当前会话的仅会话作业。

3312 

3313<h3 id="schedulewakeup">

3314 ScheduleWakeup

3315</h3>

3316 

3317**工具名称:** `ScheduleWakeup`

3318 

3319```typescript theme={null}

3320type ScheduleWakeupInput = {

3321 delaySeconds?: number;

3322 reason?: string;

3323 prompt?: string;

3324 noop?: boolean;

3325 stop?: boolean;

3326};

3327```

3328 

3329安排一次性唤醒,在延迟后触发给定的提示。此工具支持自定步调的 `/loop` 命令。运行时将 `delaySeconds` 限制在 60 到 3600 秒之间。除非 `stop` 为 true,否则 `delaySeconds`、`reason`、`prompt` 和 `noop` 字段是必需的。`noop: true` 报告没有任何更改的唤醒。设置 `stop: true` 取消待处理的唤醒并结束自定步调的 `/loop`。`stop` 字段需要 Claude Code v2.1.202 或更高版本。请参阅[工具参考中的 ScheduleWakeup 行](/docs/zh-CN/tools-reference)。

3330 

3331<h3 id="remotetrigger">

3332 RemoteTrigger

3333</h3>

3334 

3335**工具名称:** `RemoteTrigger`

3336 

3337```typescript theme={null}

3338type RemoteTriggerInput = {

3339 action:

3340 | "list"

3341 | "get"

3342 | "create"

3343 | "update"

3344 | "run"

3345 | "create_webhook_trigger"

3346 | "list_runs"

3347 | "get_run_log";

3348 trigger_id?: string;

3349 session_id?: string;

3350 cursor?: string;

3351 body?: {

3352 [k: string]: unknown;

3353 };

3354};

3355```

3356 

3357管理[例程](/docs/zh-CN/routines),即在云中托管的计划和触发的 Claude Code 运行。此工具支持 `/schedule` 命令。`trigger_id` 对于 `get`、`update`、`run` 和 `list_runs` 操作是必需的。`body` 对于 `create`、`update` 和 `create_webhook_trigger` 是必需的,对于 `run` 是可选的。

3358 

3359`create_webhook_trigger` 将事件源附加到现有例程,例如触发它的 [GitHub 事件](/docs/zh-CN/routines#add-a-github-trigger)。`body` 命名源、事件和要触发的例程。需要 Claude Code v2.1.225 或更高版本。

3360 

3361`list_runs` 列出例程的最近运行,`get_run_log` 读取一个运行的日志。`session_id` 从 `list_runs` 结果命名要读取的运行,`cursor` 分页浏览任一操作的结果。两个操作都需要 Claude Code v2.1.227 或更高版本。

3362 

3363此工具仅在会话使用启用了例程的计划的 claude.ai 账户进行身份验证时可用,当您的组织的策略禁用[网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web) 时不存在。在 Claude Code v2.1.227 或更高版本上,当所有者为组织[关闭例程](/docs/zh-CN/routines#routines-are-disabled-by-your-organizations-policy)时,该工具也不存在。在 v2.1.227 之前,仅关闭例程切换的会话仍然显示该工具,服务器拒绝其调用。

3364 

3365<h3 id="pushnotification">

3366 PushNotification

3367</h3>

3368 

3369**工具名称:** `PushNotification`

3370 

3371```typescript theme={null}

3372type PushNotificationInput = {

3373 message: string;

3374 status: "proactive";

3375};

3376```

3377 

3378向用户发送主动推送通知。将 `message` 保持在 200 个字符以下,因为移动操作系统会截断较长的文本。请参阅[工具参考中的 PushNotification 行](/docs/zh-CN/tools-reference)了解提供商可用性;推送传递通过 Anthropic 托管的基础设施进行,该基础设施无法从 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 访问。

3379 

3380<h3 id="repl">

3381 REPL

3382</h3>

3383 

3384**工具名称:** `REPL`

3385 

3386```typescript theme={null}

3387type REPLInput = {

3388 code: string;

3389 description?: string;

3390 timeout?: number;

3391};

3392```

3393 

3394在持久 REPL 中执行 JavaScript 代码。状态在调用之间保持,并支持顶级 await。`timeout` 以毫秒为单位,默认为 30000,最大为 600000。

3395 

3396这些类型已导出,但除非您在 [`env` 选项](#options)中设置 `CLAUDE_CODE_REPL=1`,否则该工具在 SDK 会话中处于关闭状态。它还需要本机安装程序提供的基于 Bun 的 `claude` 可执行文件。

3397 

3398<h3 id="reportfindings">

3399 ReportFindings

3400</h3>

3401 

3402**工具名称:** `ReportFindings`

3403 

3404```typescript theme={null}

3405type ReportFindingsInput = {

3406 level?: "low" | "medium" | "high" | "xhigh" | "max";

3407 findings: Array<{

3408 file: string;

3409 line?: number;

3410 summary: string;

3411 failure_scenario: string;

3412 short_summary?: string;

3413 category?: string;

3414 verdict?: "CONFIRMED" | "PLAUSIBLE";

3415 outcome?: "fixed" | "skipped" | "no_change_needed";

3416 }>;

3417};

3418```

3419 

3420将代码审查发现报告为结构化列表,以便 Claude Code 可以呈现它们而不是将其打印为文本。`level` 是审查运行的工作量级别。发现按最严重优先排序,每次调用最多 32 个,当没有发现存活时数组为空。需要 Claude Code v2.1.196 或更高版本。

3421 

3422每个发现包含这些字段:

3423 

3424* `file`:发现所在的存储库相对路径。可选的 `line` 是它锚定到的 1 索引行。

3425* `summary`:缺陷的单句陈述。`failure_scenario` 描述导致错误输出或崩溃的具体输入和状态。

3426* `short_summary`:可选的最多 60 个字符的压缩标签,用于紧凑显示。需要 Claude Code v2.1.212 或更高版本。

3427* `category`:可选的发现类型的短 kebab-case slug,例如 `correctness` 或 `test-coverage`。需要 Claude Code v2.1.199 或更高版本。

3428* `verdict`:在验证通过运行时设置;在仅内联审查中不存在。

3429* `outcome`:仅在应用修复后重新报告时设置。

3430 

3431<h3 id="artifact">

3432 Artifact

3433</h3>

3434 

3435**工具名称:** `Artifact`

3436 

3437```typescript theme={null}

3438type ArtifactInput = {

3439 action?: "publish" | "list";

3440 file_path?: string;

3441 favicon?: string;

3442 limit?: number;

3443 scope?: "mine" | "shared" | "all";

3444 title?: string;

3445 description?: string;

3446 label?: string;

3447 url?: string;

3448 force?: boolean;

3449 capabilities?: Record<string, unknown>;

3450 contract?: "latest" | string;

3451};

3452```

3453 

3454将本地 `.html` 或 `.md` 文件发布为托管的 artifact 页面,或列出用户发布的 artifacts。省略 `action` 或传递 `"publish"` 以发布 `file_path`,这对于发布操作是必需的,以及 `favicon`,一个或两个标记 artifact 在用户库中的表情符号。当 HTML 文件没有 `<title>` 标签时,`title` 在浏览器标签和库中命名发布的页面。`url` 针对现有 artifact 以就地更新,而不是创建新的。

3455 

3456`force` 是最后手段的覆盖,丢弃另一个会话发布的较新版本。在冲突时,失败的发布返回较新的内容;Claude 将其更改合并到该内容上,或重新读取 artifact,然后再次发布。仅当用户明确要求丢弃该版本时才传递 `force`。

3457 

3458传递 `"list"` 以枚举用户发布的 artifacts;仅 `limit` 和 `scope` 可能伴随它。`scope` 默认为 `"mine"`,列出用户拥有的 artifacts;`"shared"` 列出其他人与用户共享的 artifacts,`"all"` 列出两者。

3459 

3460* `capabilities`:发布的页面使用的运行时功能,由功能名称键入,例如[页面可能调用的连接器](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)。artifact 服务验证声明并拒绝命名账户无法使用的功能或给予一个无效配置的发布。传递 `{}` 以清除存储的声明,在重新部署时省略字段以保留它。需要 Agent SDK v0.3.235 或更高版本。

3461* `contract`:发布的页面运行的运行时版本。省略它以保留 artifact 的当前版本,传递 `"latest"` 以升级,或传递特定版本以固定或回滚。需要 Agent SDK v0.3.235 或更高版本。

3462 

3463这些类型已导出,但该工具在 Agent SDK 会话中默认处于关闭状态。发布还需要 [artifacts 可用性表](/docs/zh-CN/artifacts#availability)中的每个条件,使用 API 密钥进行身份验证的会话不满足这些条件。

3464 

3465<h3 id="projects">

3466 Projects

3467</h3>

3468 

3469**工具名称:** `Projects`

3470 

3471```typescript theme={null}

3472type ProjectsInput = {

3473 method:

3474 | "project_info"

3475 | "project_read"

3476 | "project_search"

3477 | "project_write"

3478 | "project_delete";

3479 path?: string;

3480 content?: string;

3481 local_path?: string;

3482 present_to_user?: boolean;

3483 query?: string;

3484 n?: number;

3485};

3486```

3487 

3488读取和写入附加到会话的 claude.ai Project。在 `method` 上分派:

3489 

3490* `project_info`:返回项目元数据和文档列表。

3491* `project_read`:按 `path` 读取一个文档。

3492* `project_search`:使用 `query` 查询项目的知识库。`n` 限制命中数并默认为 5。

3493* `project_write`:从 `content`(包含内联文本)或 `local_path`(命名工作目录内的文件)中的恰好一个在 `path` 处创建或替换文档。`present_to_user: true` 将写入的文档标记为用户需要看到的可交付成果。

3494* `project_delete`:按 `path` 删除文档。

3495 

3496<h3 id="readmcpresourcedir">

3497 ReadMcpResourceDir

3498</h3>

3499 

3500**工具名称:** `ReadMcpResourceDirTool`

3501 

3502```typescript theme={null}

3503type ReadMcpResourceDirInput = {

3504 server: string;

3505 uri: string;

3506};

3507```

3508 

3509列出 MCP 服务器上目录资源的直接子项。仅可用于已声明支持目录列表的服务器;列表不是递归的。目录列表并非在每个会话中都启用:当关闭时,调用返回空的 `resources` 列表,`error` 字段报告目录列表未启用。

3510 

3511<h3 id="refreshmcptools">

3512 RefreshMcpTools

3513</h3>

3514 

3515**工具名称:** `RefreshMcpTools`

3516 

3517```typescript theme={null}

3518type RefreshMcpToolsInput = {

3519 server?: string; // 仅刷新此服务器;省略以刷新所有连接的服务器

3520};

3521```

3522 

3523重新查询连接的 MCP 服务器的工具列表并应用任何更改。这些类型已导出,但 Claude Code 仅在您在 [`env` 选项](#options)中设置 `CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1` 时注册该工具,并且仅在至少有一个 MCP 服务器的会话中。需要 Claude Code v2.1.211 或更高版本。

3524 

3525<h3 id="showonboardingrolepicker">

3526 ShowOnboardingRolePicker

3527</h3>

3528 

3529**工具名称:** `ShowOnboardingRolePicker`

3530 

3531```typescript theme={null}

3532type ShowOnboardingRolePickerInput = {};

3533```

3534 

3535在 Cowork 入职期间呈现可点击的角色选择器芯片行,以便用户可以选择其角色并获得匹配的插件安装。不需要参数;角色列表由客户端定义。调用会阻塞直到用户响应。

3536 

3537<h3 id="mcpinput">

3538 McpInput

3539</h3>

3540 

3541**工具名称:** 形式为 `mcp__<server>__<tool>` 的动态 MCP 工具名称

3542 

3543```typescript theme={null}

3544type McpInput = {

3545 [k: string]: unknown;

3546};

3547```

3548 

3549MCP 工具参数是开放对象:每个服务器定义自己的参数,因此类型对字段名称或值不施加任何约束。请查阅服务器自己的工具架构以了解特定工具接受的字段。

3550 

2461<h2 id="tool-output-types">3551<h2 id="tool-output-types">

2462 工具输出类型3552 工具输出类型

2463</h2>3553</h2>


2468 `ToolOutputSchemas`3558 `ToolOutputSchemas`

2469</h3>3559</h3>

2470 3560 

2471所有工具输出类型的联合。3561从 `@anthropic-ai/claude-agent-sdk` 导出的工具输出类型的联合;成员包括:

2472 3562 

2473```typescript theme={null}3563```typescript theme={null}

2474type ToolOutputSchemas =3564type ToolOutputSchemas =

2475 | AgentOutput3565 | AgentOutput

3566 | ArtifactOutput

2476 | AskUserQuestionOutput3567 | AskUserQuestionOutput

2477 | BashOutput3568 | BashOutput

3569 | CronCreateOutput

3570 | CronDeleteOutput

3571 | CronListOutput

3572 | EnterPlanModeOutput

2478 | EnterWorktreeOutput3573 | EnterWorktreeOutput

2479 | ExitPlanModeOutput3574 | ExitPlanModeOutput

3575 | ExitWorktreeOutput

2480 | FileEditOutput3576 | FileEditOutput

2481 | FileReadOutput3577 | FileReadOutput

2482 | FileWriteOutput3578 | FileWriteOutput

2483 | GlobOutput3579 | GlobOutput

2484 | GrepOutput3580 | GrepOutput

2485 | ListMcpResourcesOutput3581 | ListMcpResourcesOutput

3582 | McpOutput

2486 | MonitorOutput3583 | MonitorOutput

2487 | NotebookEditOutput3584 | NotebookEditOutput

3585 | ProjectsOutput

3586 | PushNotificationOutput

3587 | ReadMcpResourceDirOutput

2488 | ReadMcpResourceOutput3588 | ReadMcpResourceOutput

3589 | RefreshMcpToolsOutput

3590 | RemoteTriggerOutput

3591 | REPLOutput

3592 | ReportFindingsOutput

3593 | ScheduleWakeupOutput

3594 | ShowOnboardingRolePickerOutput

2489 | TaskCreateOutput3595 | TaskCreateOutput

2490 | TaskGetOutput3596 | TaskGetOutput

2491 | TaskListOutput3597 | TaskListOutput


2501 Agent3607 Agent

2502</h3>3608</h3>

2503 3609 

2504**工具名称:** `Agent`(之前为 `Task`,仍然接受作为别名)3610**工具名称:** `Agent`。之前的名称 `Task` 仍然被接受作为别名,[`SDKSystemMessage`](#sdksystemmessage) 初始化消息中的 `tools` 数组目前为了向后兼容仍将此工具列为 `Task`。

2505 3611 

2506```typescript theme={null}3612```typescript theme={null}

2507type AgentOutput =3613type AgentOutput =


2511 agentType?: string;3617 agentType?: string;

2512 content: Array<{ type: "text"; text: string; citations?: unknown[] | null }>;3618 content: Array<{ type: "text"; text: string; citations?: unknown[] | null }>;

2513 resolvedModel?: string;3619 resolvedModel?: string;

3620 modelsUsed?: string[];

2514 totalToolUseCount: number;3621 totalToolUseCount: number;

2515 totalDurationMs: number;3622 totalDurationMs: number;

2516 totalTokens: number;3623 totalTokens: number;


2531 inference_geo?: string | null;3638 inference_geo?: string | null;

2532 speed?: string | null;3639 speed?: string | null;

2533 iterations?: unknown;3640 iterations?: unknown;

3641 output_tokens_details?: {

3642 thinking_tokens?: number | null;

3643 } | null;

2534 };3644 };

2535 toolStats?: {3645 toolStats?: {

2536 readCount: number;3646 readCount: number;


2552 agentId: string;3662 agentId: string;

2553 description: string;3663 description: string;

2554 resolvedModel?: string;3664 resolvedModel?: string;

3665 modelsUsed?: string[];

2555 prompt: string;3666 prompt: string;

2556 outputFile: string;3667 outputFile: string;

2557 canReadOutputFile?: boolean;3668 canReadOutputFile?: boolean;


2568 3679 

2569返回来自子代理的结果。在 `status` 字段上进行区分:`"completed"` 表示已完成的任务,`"async_launched"` 表示后台任务,`"remote_launched"` 表示 Claude Code 分派到远程云会话的任务,其中 `sessionUrl` 链接到该会话,`taskId` 标识它。3680返回来自子代理的结果。在 `status` 字段上进行区分:`"completed"` 表示已完成的任务,`"async_launched"` 表示后台任务,`"remote_launched"` 表示 Claude Code 分派到远程云会话的任务,其中 `sessionUrl` 链接到该会话,`taskId` 标识它。

2570 3681 

2571`completed` 和 `async_launched` 变体上的 `resolvedModel` 字段命名子代理实际运行的模型,当应用 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 或其他覆盖时,该模型可能与请求的 `model` 输入不同。此字段需要 Claude Code v2.1.174 或更高版本。3682在 `completed` 变体上,`resolvedModel` 命名子代理启动时所用的模型,当应用 [`availableModels`](/docs/zh-CN/model-config#restrict-model-selection) 或其他覆盖时,该模型可能与请求的 `model` 输入不同。此字段需要 Claude Code v2.1.174 或更高版本。在 `async_launched` 上,它命名任务移至后台时使用的模型。

3683 

3684`modelsUsed` 列出子代理使用的模型,按顺序。该字段仅在发生中途交换时出现,当运行交换回某个模型时,该模型会再次出现。在 `async_launched` 上,该列表涵盖后台处理前使用的模型。`modelsUsed` 和 `resolvedModel` 的后台处理行为都需要 Claude Code v2.1.212 或更高版本。

3685 

3686如果 Claude Code [保留了子代理的隔离 worktree](/docs/zh-CN/worktrees#isolate-subagents-with-worktrees),`completed` 结果上的 `worktreePath` 是找到它的位置。`worktreeBranch` 是其分支,当 Claude Code 使用 git 创建 worktree 时出现。

2572 3687 

2573在 `completed` 变体上,当子代理在隔离的 git worktree 中运行时,`worktreePath` 被设置,`worktreeBranch` 在 Claude Code 创建该 worktree 时命名其分支。`usage.service_tier` 携带 API 为子代理的请求报告的服务层字符串。3688Claude Code 从子代理的最终 API 请求而不是整个运行中填充 `usage` 和 `totalTokens`,因此 `usage.service_tier` 是 API 在该请求上报告的服务层字符串。当存在时,`usage.output_tokens_details.thinking_tokens` 是该请求的输出令牌中属于思考令牌的数量。`output_tokens_details` 字段需要 TypeScript SDK v0.3.228 或更高版本,该版本包含 Claude Code v2.1.228。

3689 

3690`usage.output_tokens_details` 在含义上与 [`Usage.output_tokens_details`](#usage) 匹配,范围限于该最终请求,但其每个级别都是可选的。保护对象和字段,例如 `usage.output_tokens_details?.thinking_tokens ?? 0`,而不是直接读取它。

2574 3691 

2575在 v2.1.207 之前,发布的类型更窄。它省略了 `worktreePath`、`worktreeBranch`、`citations`、`toolStats.frameCount` 和 `inference_geo`、`speed` 和 `iterations` 使用字段,并将 `service_tier` 类型化为 `"standard" | "priority" | "batch"`。类型标记为可选的字段可能在早期版本记录的结果中不存在。3692在 v2.1.207 之前,发布的类型更窄。它省略了 `worktreePath`、`worktreeBranch`、`citations`、`toolStats.frameCount` 和 `inference_geo`、`speed` 和 `iterations` 使用字段,并将 `service_tier` 类型化为 `"standard" | "priority" | "batch"`。类型标记为可选的字段可能在早期版本记录的结果中不存在。

2576 3693 


2590 }>;3707 }>;

2591 answers: Record<string, string>;3708 answers: Record<string, string>;

2592 response?: string;3709 response?: string;

3710 annotations?: Record<string, { preview?: string; notes?: string }>;

3711 afkTimeoutMs?: number;

2593};3712};

2594```3713```

2595 3714 


2610 isImage?: boolean;3729 isImage?: boolean;

2611 backgroundTaskId?: string;3730 backgroundTaskId?: string;

2612 backgroundedByUser?: boolean;3731 backgroundedByUser?: boolean;

3732 timedOutAfterMs?: number;

3733 backgroundCwdHint?: string;

3734 backgroundEndsWithFinalResponse?: true;

2613 dangerouslyDisableSandbox?: boolean;3735 dangerouslyDisableSandbox?: boolean;

2614 returnCodeInterpretation?: string;3736 returnCodeInterpretation?: string;

3737 noOutputExpected?: boolean;

2615 structuredContent?: unknown[];3738 structuredContent?: unknown[];

2616 persistedOutputPath?: string;3739 persistedOutputPath?: string;

2617 persistedOutputSize?: number;3740 persistedOutputSize?: number;

3741 staleReadFileStateHint?: string;

3742 ghRateLimitHint?: string;

3743 gitOperation?: {

3744 commit?: { sha: string; kind: "committed" | "amended" | "cherry-picked"; branch?: string };

3745 push?: { branch: string };

3746 branch?: { ref: string; action: "merged" | "rebased" };

3747 pr?: {

3748 number: number;

3749 url?: string;

3750 action: "created" | "edited" | "merged" | "commented" | "closed" | "reopened" | "ready" | "draft" | "auto-merge-enabled" | "auto-merge-disabled";

3751 };

3752 };

2618};3753};

2619```3754```

2620 3755 

2621返回命令输出,stdout/stderr 分开。后台命令包括 `backgroundTaskId`。3756`stdout`、`stderr` 和 `backgroundTaskId` 字段携带:

3757 

3758| 字段 | 它携带的内容 |

3759| ------------------ | -------------------------------------- |

3760| `stdout` | 命令的 stdout 和 stderr,合并为一个交错流 |

3761| `stderr` | 工具本身添加的通知,例如 shell 工作目录重置,不是命令的 stderr |

3762| `backgroundTaskId` | 对于后台命令存在 |

3763 

3764`timedOutAfterMs` 是超时时间(以毫秒为单位),当命令达到其超时并移至后台而不是显式启动时设置。`backgroundCwdHint` 在后台命令包含目录更改内置命令(如 `cd`、`pushd`、`popd` 或 `chdir`)时设置,并注意会话工作目录未更改。两个字段都需要 Claude Code v2.1.210 或更高版本。

3765 

3766当在前台运行的子代理拥有后台命令时,Claude Code 在该子代理给出最终响应时终止该命令。Claude Code 在此类命令上将 `backgroundEndsWithFinalResponse` 设置为 `true`,并在命令存活该轮时省略该字段,如主对话或后台子代理启动的命令那样。该字段需要 Claude Code v2.1.227 或更高版本。

3767 

3768Claude Code 将 `gitOperation.commit.branch` 设置为 git 提交摘要行中命名的分支,对于在分离 HEAD 上进行的提交则省略它。该字段需要 Agent SDK v0.3.227 或更高版本。Claude Code 将 `gh pr reopen` 命令报告为 `reopened` PR 操作,这需要 Agent SDK v0.3.234 或更高版本。

2622 3769 

2623<h3 id="monitor-2">3770<h3 id="monitor-2">

2624 Monitor3771 Monitor


2647 filePath: string;3794 filePath: string;

2648 oldString: string;3795 oldString: string;

2649 newString: string;3796 newString: string;

2650 originalFile: string;3797 originalFile: string | null;

2651 structuredPatch: Array<{3798 structuredPatch: Array<{

2652 oldStart: number;3799 oldStart: number;

2653 oldLines: number;3800 oldLines: number;


2664 deletions: number;3811 deletions: number;

2665 changes: number;3812 changes: number;

2666 patch: string;3813 patch: string;

3814 repository?: string | null;

2667 };3815 };

2668};3816};

2669```3817```


2686 numLines: number;3834 numLines: number;

2687 startLine: number;3835 startLine: number;

2688 totalLines: number;3836 totalLines: number;

3837 /** True when a whole-file read was auto-paginated because it exceeded the token cap (the content is a partial first page). */

3838 truncatedByTokenCap?: boolean;

2689 };3839 };

2690 }3840 }

2691 | {3841 | {


2725 count: number;3875 count: number;

2726 outputDir: string;3876 outputDir: string;

2727 };3877 };

3878 /** Document page number of the first extracted page; labels the page images in the tool_result content. */

3879 firstPage?: number;

3880 /** In-process only: the page-image bytes are delivered as image blocks in the tool_result content and aren't retained on the emitted tool_use_result, so this key is absent there. */

3881 pages?: {

3882 base64: string;

3883 mediaType: "image/jpeg" | "image/png" | "image/gif" | "image/webp";

3884 error?: string;

3885 }[];

3886 }

3887 | {

3888 type: "file_unchanged";

3889 file: {

3890 filePath: string;

3891 };

3892 /** Set when the dedup matched a startup-seeded entry (CLAUDE.md / nested memory) rather than a prior Read tool_result. */

3893 source?: "seeded";

2728 };3894 };

2729```3895```

2730 3896 


2756 deletions: number;3922 deletions: number;

2757 changes: number;3923 changes: number;

2758 patch: string;3924 patch: string;

3925 repository?: string | null;

2759 };3926 };

3927 userModified?: boolean;

2760};3928};

2761```3929```

2762 3930 

2763返回写入结果,包含结构化差异信息。3931返回写入结果,包含结构化差异信息。`originalFile` 和 `structuredPatch` 持有的内容取决于写入:

3932 

3933* 对于新创建的文件,`originalFile` 为 null,`structuredPatch` 为空

3934* 在覆盖时,`originalFile` 携带之前的内容,除非该内容大于约 10 MB:Claude Code 则跳过差异并返回 `originalFile` null 和 `structuredPatch` 空

3935* 当写入未更改任何内容或差异超时时,`structuredPatch` 也为空

2764 3936 

2765<h3 id="glob-2">3937<h3 id="glob-2">

2766 Glob3938 Glob


2774 numFiles: number;3946 numFiles: number;

2775 filenames: string[];3947 filenames: string[];

2776 truncated: boolean;3948 truncated: boolean;

3949 totalMatches?: number;

3950 countIsComplete?: boolean;

2777};3951};

2778```3952```

2779 3953 

2780返回与 glob 模式匹配的文件路径,按修改时间排序。3954返回与 glob 模式匹配的文件路径,按修改时间排序。

2781 3955 

3956`totalMatches` 和 `countIsComplete` 需要 Claude Code v2.1.191 或更高版本。`totalMatches` 报告截断前的匹配文件数。当 `countIsComplete` 为 false 时,`totalMatches` 是一个下界,因为底层搜索截断了其自己的输出。

3957 

2782<h3 id="grep-2">3958<h3 id="grep-2">

2783 Grep3959 Grep

2784</h3>3960</h3>


2793 content?: string;3969 content?: string;

2794 numLines?: number;3970 numLines?: number;

2795 numMatches?: number;3971 numMatches?: number;

3972 totalFiles?: number;

3973 totalLines?: number;

2796 appliedLimit?: number;3974 appliedLimit?: number;

2797 appliedOffset?: number;3975 appliedOffset?: number;

2798};3976};

2799```3977```

2800 3978 

2801返回搜索结果。形状因 `mode` 而异:文件列表、带匹配的内容或匹配计数。3979返回搜索结果。形状因 `mode` 而异:文件列表、带匹配的内容或匹配计数。在 `count` 模式下,`numFiles` 和 `numMatches` 是完整结果集上的总计,不是分页切片。在 v2.1.208 之前,截断列出条目的 `head_limit` 或 `offset` 也会截断这些总计。

3980 

3981`totalFiles` 需要 Claude Code v2.1.208 或更高版本,并在 `files_with_matches` 模式下报告 `head_limit` 和 `offset` 分页前的总结果数。`totalLines` 需要 Claude Code v2.1.210 或更高版本,并在 `content` 模式下报告分页前的总行数。

2802 3982 

2803<h3 id="taskstop-2">3983<h3 id="taskstop-2">

2804 TaskStop3984 TaskStop


2826```typescript theme={null}4006```typescript theme={null}

2827type NotebookEditOutput = {4007type NotebookEditOutput = {

2828 new_source: string;4008 new_source: string;

4009 old_source?: string;

2829 cell_id?: string;4010 cell_id?: string;

2830 cell_type: "code" | "markdown";4011 cell_type: "code" | "markdown";

2831 language: string;4012 language: string;


2853 result: string;4034 result: string;

2854 durationMs: number;4035 durationMs: number;

2855 url: string;4036 url: string;

4037 artifactRead?: {

4038 slug: string;

4039 ver?: string;

4040 seeded?: false;

4041 };

2856};4042};

2857```4043```

2858 4044 

2859返回获取的内容,包含 HTTP 状态和元数据。4045返回获取的内容,包含 HTTP 状态和元数据。

2860 4046 

4047`artifactRead` 是 Claude Code 自己的工件读取记录,仅当 Claude 获取会话可以发布的工件时出现。Claude Code 在会话恢复时读取它回来,以便稍后的发布基于正确的版本;您的代码不需要对其采取行动。`slug` 命名工件,`ver` 是读取记录的版本,当它未记录任何内容时不存在,`seeded: false` 标记其完整源未到达 Claude 的读取。`seeded` 字段需要 Agent SDK v0.3.239 或更高版本。

4048 

2861<h3 id="websearch-2">4049<h3 id="websearch-2">

2862 WebSearch4050 WebSearch

2863</h3>4051</h3>


2875 | string4063 | string

2876 >;4064 >;

2877 durationSeconds: number;4065 durationSeconds: number;

4066 searchCount?: number;

2878};4067};

2879```4068```

2880 4069 


2888 4077 

2889```typescript theme={null}4078```typescript theme={null}

2890type WorkflowOutput = {4079type WorkflowOutput = {

2891 status: "async_launched";4080 status: "async_launched" | "remote_launched";

2892 taskId: string;4081 taskId: string;

4082 taskType?: "local_workflow" | "remote_agent";

4083 workflowName?: string;

2893 runId?: string;4084 runId?: string;

2894 summary?: string;4085 summary?: string;

2895 transcriptDir?: string;4086 transcriptDir?: string;

2896 scriptPath?: string;4087 scriptPath?: string;

4088 sessionUrl?: string; // set when the workflow launched as a remote session

4089 warning?: string;

2897 error?: string;4090 error?: string;

2898};4091};

2899```4092```


2901在工具接受调用后立即返回。最终结果稍后作为任务完成到达。在将运行视为已启动之前检查 `error`:脚本如果语法检查失败,会返回 `status: "async_launched"` 并设置 `error`,且永远不会运行。4094在工具接受调用后立即返回。最终结果稍后作为任务完成到达。在将运行视为已启动之前检查 `error`:脚本如果语法检查失败,会返回 `status: "async_launched"` 并设置 `error`,且永远不会运行。

2902 4095 

2903| 字段 | 类型 | 描述 |4096| 字段 | 类型 | 描述 |

2904| --------------- | ------------------ | ---------------------------------------------------- |4097| --------------- | --------------------------------------- | ----------------------------------------------------------------------------------- |

2905| `status` | `"async_launched"` | 工具接受了调用。这是该字段唯一的值 |4098| `status` | `"async_launched" \| "remote_launched"` | 工具接受了调用。`"async_launched"` 用于进程内运行,`"remote_launched"` 用于分派到远程会话而不是在进程内运行的运行 |

2906| `taskId` | `string` | 运行的后台任务标识符 |4099| `taskId` | `string` | 运行的后台任务标识符 |

2907| `runId` | `string` | 工作流运行标识符,用于在后续调用中作为 `resumeFromRunId` 传递 |4100| `taskType` | `"local_workflow" \| "remote_agent"` | 已注册后台任务的任务类型,与 `status` 分支匹配 |

4101| `workflowName` | `string` | 工作流脚本中的 `meta.name` |

4102| `runId` | `string` | 工作流运行标识符,用于在后续调用中作为 `resumeFromRunId` 传递。对于 `remote_launched` 运行不存在,其中云会话 URL 是恢复句柄 |

2908| `summary` | `string` | 工作流功能的单行描述 |4103| `summary` | `string` | 工作流功能的单行描述 |

2909| `transcriptDir` | `string` | 执行期间写入子代理转录的目录 |4104| `transcriptDir` | `string` | 执行期间写入子代理转录的目录 |

2910| `scriptPath` | `string` | 此运行的持久化工作流脚本的路径。编辑它并作为 `scriptPath` 传回以重新运行而无需重新发送脚本 |4105| `scriptPath` | `string` | 此运行的持久化工作流脚本的路径。编辑它并作为 `scriptPath` 传回以重新运行而无需重新发送脚本 |

2911| `error` | `string` | 当脚本语法检查失败时设置。存在时,尽管 `async_launched` 状态,运行未启动 |4106| `sessionUrl` | `string` | 云会话 URL,当 `status` 为 `"remote_launched"` 时设置 |

4107| `warning` | `string` | 非阻塞性提示,例如本地 git 状态与云会话将克隆的推送分支不同 |

4108| `error` | `string` | 当脚本语法检查失败时设置。存在时,尽管启动状态,运行未启动 |

2912 4109 

2913<h3 id="todowrite-2">4110<h3 id="todowrite-2">

2914 TodoWrite4111 TodoWrite


2934返回之前和更新的任务列表。4131返回之前和更新的任务列表。

2935 4132 

2936<Note>4133<Note>

2937 自 TypeScript Agent SDK 0.3.142 起,`TodoWrite` 默认被禁用。改用 `TaskCreate`、`TaskGet`、`TaskUpdate` 和 `TaskList`。请参阅[迁移到 Task 工具](/docs/zh-CN/agent-sdk/todo-tracking#migrate-to-task-tools)更新您的监视代码,或设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以恢复为 `TodoWrite`。4134 The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn't recognize, they aren't available unless you opt in:

4135 

4136 * `TodoWrite`

4137 * `TaskCreate`

4138 * `TaskGet`

4139 * `TaskUpdate`

4140 * `TaskList`

4141 

4142 Wherever the tools are available, Claude Code provides the four Task tools, or `TodoWrite` instead when you set `CLAUDE_CODE_ENABLE_TASKS=0`.

4143 

4144 This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.

4145 

4146 请参阅[模型可用性](/docs/zh-CN/agent-sdk/todo-tracking#model-availability)以选择加入。

2938</Note>4147</Note>

2939 4148 

2940<h3 id="taskcreate-2">4149<h3 id="taskcreate-2">


3028 isAgent: boolean;4237 isAgent: boolean;

3029 filePath?: string;4238 filePath?: string;

3030 hasTaskTool?: boolean;4239 hasTaskTool?: boolean;

4240 planWasEdited?: boolean;

3031 awaitingLeaderApproval?: boolean;4241 awaitingLeaderApproval?: boolean;

3032 requestId?: string;4242 requestId?: string;

3033};4243};


3065 uri: string;4275 uri: string;

3066 mimeType?: string;4276 mimeType?: string;

3067 text?: string;4277 text?: string;

4278 blobSavedTo?: string;

3068 }>;4279 }>;

4280 error?: string;

3069};4281};

3070```4282```

3071 4283 


3087 4299 

3088返回有关 git worktree 的信息。4300返回有关 git worktree 的信息。

3089 4301 

4302<h3 id="exitworktree-2">

4303 ExitWorktree

4304</h3>

4305 

4306**工具名称:** `ExitWorktree`

4307 

4308```typescript theme={null}

4309type ExitWorktreeOutput = {

4310 action: "keep" | "remove";

4311 originalCwd: string;

4312 worktreePath: string;

4313 worktreeBranch?: string;

4314 tmuxSessionName?: string;

4315 discardedFiles?: number;

4316 discardedCommits?: number;

4317 message: string;

4318};

4319```

4320 

4321返回采取的操作和有关退出的 worktree 的详细信息。

4322 

4323<h3 id="enterplanmode-2">

4324 EnterPlanMode

4325</h3>

4326 

4327**工具名称:** `EnterPlanMode`

4328 

4329```typescript theme={null}

4330type EnterPlanModeOutput = {

4331 message: string;

4332};

4333```

4334 

4335返回进入规划模式的确认。

4336 

4337<h3 id="croncreate-2">

4338 CronCreate

4339</h3>

4340 

4341**工具名称:** `CronCreate`

4342 

4343```typescript theme={null}

4344type CronCreateOutput = {

4345 id: string;

4346 humanSchedule: string;

4347 recurring: boolean;

4348 durable?: boolean; // true when persisted to .claude/scheduled_tasks.json; false when session-only

4349};

4350```

4351 

4352返回作业 ID 和计划的人类可读描述。

4353 

4354<h3 id="crondelete-2">

4355 CronDelete

4356</h3>

4357 

4358**工具名称:** `CronDelete`

4359 

4360```typescript theme={null}

4361type CronDeleteOutput = {

4362 id: string;

4363};

4364```

4365 

4366返回已删除作业的 ID。

4367 

4368<h3 id="cronlist-2">

4369 CronList

4370</h3>

4371 

4372**工具名称:** `CronList`

4373 

4374```typescript theme={null}

4375type CronListOutput = {

4376 jobs: {

4377 id: string;

4378 cron: string;

4379 humanSchedule: string;

4380 prompt: string;

4381 recurring?: boolean;

4382 durable?: boolean;

4383 }[];

4384};

4385```

4386 

4387返回计划的 cron 作业:来自 `.claude/scheduled_tasks.json` 的持久作业和来自当前会话的仅会话作业。仅会话作业携带 `durable: false`;从磁盘读取的作业省略该字段。

4388 

4389<h3 id="schedulewakeup-2">

4390 ScheduleWakeup

4391</h3>

4392 

4393**工具名称:** `ScheduleWakeup`

4394 

4395```typescript theme={null}

4396type ScheduleWakeupOutput = {

4397 scheduledFor: number;

4398 clampedDelaySeconds: number;

4399 wasClamped: boolean;

4400 stopped?: boolean;

4401 cancelledWakeups?: number;

4402};

4403```

4404 

4405返回唤醒将触发的时间作为纪元毫秒时间戳、实际使用的延迟以及请求的延迟是否被限制。`stopped` 字段在调用以 `stop: true` 结束循环时为 `true`。它需要 Claude Code v2.1.202 或更高版本。`cancelledWakeups` 字段计算 `stop: true` 调用取消了多少待处理唤醒。值为 0 表示没有待处理,重复 `/loop` cron 不会被 `stop: true` 取消。它需要 Claude Code v2.1.206 或更高版本。

4406 

4407<h3 id="remotetrigger-2">

4408 RemoteTrigger

4409</h3>

4410 

4411**工具名称:** `RemoteTrigger`

4412 

4413```typescript theme={null}

4414type RemoteTriggerOutput = {

4415 status: number;

4416 json: string;

4417 summary?: string;

4418};

4419```

4420 

4421返回触发操作的 API 响应状态和正文。

4422 

4423<h3 id="pushnotification-2">

4424 PushNotification

4425</h3>

4426 

4427**工具名称:** `PushNotification`

4428 

4429```typescript theme={null}

4430type PushNotificationOutput = {

4431 message: string;

4432 pushSent?: boolean;

4433 localSent?: boolean;

4434 disabledReason?: "config_off" | "user_present" | "no_transport";

4435 sentAt?: string;

4436};

4437```

4438 

4439返回传递详细信息,包括是否发送了推送或本地通知以及跳过传递的原因。

4440 

4441<h3 id="repl-2">

4442 REPL

4443</h3>

4444 

4445**工具名称:** `REPL`

4446 

4447```typescript theme={null}

4448type REPLOutput = {

4449 code: string;

4450 result: {

4451 [k: string]: unknown;

4452 };

4453 stdout: string;

4454 stderr: string;

4455 error?: string;

4456 registeredTools?: string[];

4457 images?: {

4458 base64: string;

4459 mediaType: string;

4460 }[];

4461 documents?: {

4462 base64: string;

4463 }[];

4464};

4465```

4466 

4467返回执行结果、捕获的控制台输出以及内部 `Read` 调用显示的任何图像或文档。

4468 

4469<h3 id="reportfindings-2">

4470 ReportFindings

4471</h3>

4472 

4473**工具名称:** `ReportFindings`

4474 

4475```typescript theme={null}

4476type ReportFindingsOutput = {

4477 count: number;

4478 level?: "low" | "medium" | "high" | "xhigh" | "max";

4479 findings: Array<{

4480 file: string;

4481 line?: number;

4482 summary: string;

4483 failure_scenario: string;

4484 short_summary?: string;

4485 category?: string;

4486 verdict?: "CONFIRMED" | "PLAUSIBLE";

4487 outcome?: "fixed" | "skipped" | "no_change_needed";

4488 }>;

4489};

4490```

4491 

4492返回报告的发现数、审查运行的工作量级别以及为结果正文回显的发现。需要 Claude Code v2.1.196 或更高版本。回显的 `short_summary` 字段需要 Claude Code v2.1.212 或更高版本。

4493 

4494<h3 id="artifact-2">

4495 Artifact

4496</h3>

4497 

4498**工具名称:** `Artifact`

4499 

4500```typescript theme={null}

4501type ArtifactOutput =

4502 | {

4503 url: string;

4504 path: string;

4505 title?: string;

4506 version?: string;

4507 capabilities?: unknown;

4508 stored?: {

4509 contract: string;

4510 capabilities?: Record<string, unknown>;

4511 };

4512 warnings?: string[];

4513 contract?: string;

4514 updated?: boolean;

4515 liveSubscription?: string;

4516 }

4517 | {

4518 artifacts: Array<{

4519 title: string;

4520 url: string;

4521 updatedAt?: string;

4522 rel?: "mine" | "shared";

4523 }>;

4524 truncated?: boolean;

4525 scope?: "shared" | "all";

4526 };

4527```

4528 

4529返回已发布页面的 `url` 和为发布操作发布的本地 `path`,当发布重新部署现有工件时 `updated` 设置为 true,`warnings` 携带任何发布时建议。列表操作返回 `artifacts` 行,当存在比请求限制更多的工件时 `truncated` 设置。在范围不是 `"mine"` 的列表上,每行携带 `rel` 标记用户是否拥有工件或与他们共享,输出的 `scope` 记录哪个非默认范围产生了列表;两者在默认列表上不存在。

4530 

4531<h3 id="projects-2">

4532 Projects

4533</h3>

4534 

4535**工具名称:** `Projects`

4536 

4537```typescript theme={null}

4538type ProjectsOutput =

4539 | {

4540 method: "project_info";

4541 notice?: string;

4542 name: string;

4543 description: string;

4544 instructions: string;

4545 docs: Array<{ path: string; created_at: string | null }>;

4546 files?: Array<{

4547 path: string;

4548 file_kind: string;

4549 created_at: string | null;

4550 }>;

4551 sync_sources?: Array<{

4552 type: string | null;

4553 config: Record<string, unknown>;

4554 }>;

4555 knowledge: {

4556 knowledge_size: number;

4557 max_knowledge_size: number;

4558 };

4559 }

4560 | {

4561 method: "project_read";

4562 notice?: string;

4563 path: string;

4564 file_kind?: string;

4565 content?: string;

4566 local_file?: string;

4567 created_at: string | null;

4568 }

4569 | {

4570 method: "project_search";

4571 notice?: string;

4572 rag: boolean;

4573 hits?: Array<{ name?: string; doc_uuid?: string; text?: string }>;

4574 docs?: string[];

4575 }

4576 | {

4577 method: "project_write";

4578 notice?: string;

4579 path: string;

4580 doc_uuid: string;

4581 replaced: boolean;

4582 present_to_user?: boolean;

4583 local_path?: string;

4584 }

4585 | {

4586 method: "project_delete";

4587 notice?: string;

4588 path: string;

4589 deleted: boolean;

4590 };

4591```

4592 

4593在 `method` 字段上进行区分,镜像输入。`project_read` 在 `content` 中内联返回小文本文档,并将较大的文档写入 `local_file` 路径;`project_search` 当项目的索引可用时返回 RAG `hits` 且 `rag: true`,否则回退到 `docs` 路径列表。

4594 

4595<h3 id="readmcpresourcedir-2">

4596 ReadMcpResourceDir

4597</h3>

4598 

4599**工具名称:** `ReadMcpResourceDirTool`

4600 

4601```typescript theme={null}

4602type ReadMcpResourceDirOutput = {

4603 resources: Array<{

4604 uri: string;

4605 name: string;

4606 mimeType?: string;

4607 }>;

4608 error?: string;

4609};

4610```

4611 

4612返回目录资源的直接子项。子目录显示为 mimeType `"inode/directory"`;`error` 在服务器无法列出目录时携带人类可读的消息。

4613 

4614<h3 id="refreshmcptools-2">

4615 RefreshMcpTools

4616</h3>

4617 

4618**工具名称:** `RefreshMcpTools`

4619 

4620```typescript theme={null}

4621type RefreshMcpToolsOutput = Array<{

4622 server: string;

4623 status: "refreshed" | "error" | "not_connected";

4624 toolCount?: number; // tools now available from this server

4625 added?: string[]; // tool names this refresh added

4626 removed?: string[]; // tool names this refresh removed

4627 error?: string; // why the refresh failed or the server was unavailable

4628}>;

4629```

4630 

4631返回每个服务器一个条目:`refreshed` 表示重新查询的工具列表已应用,`error` 表示重新查询失败且保留了之前的工具集,`not_connected` 表示服务器没有实时连接来查询。

4632 

4633<h3 id="showonboardingrolepicker-2">

4634 ShowOnboardingRolePicker

4635</h3>

4636 

4637**工具名称:** `ShowOnboardingRolePicker`

4638 

4639```typescript theme={null}

4640type ShowOnboardingRolePickerOutput = {

4641 role?: string;

4642 dismissed?: boolean;

4643};

4644```

4645 

4646返回用户的选择:当他们选择角色芯片或输入一个时为 `role`,当他们关闭选择器时为 `dismissed: true`。空对象表示用户批准了调用而未选择角色。

4647 

4648<h3 id="mcpoutput">

4649 McpOutput

4650</h3>

4651 

4652**工具名称:** 形式为 `mcp__<server>__<tool>` 的动态 MCP 工具名称

4653 

4654```typescript theme={null}

4655type McpOutput =

4656 | string

4657 | {

4658 type: string;

4659 [k: string]: unknown;

4660 }[]

4661 | {

4662 [k: string]: unknown;

4663 };

4664```

4665 

4666MCP 工具结果作为字符串或内容块数组返回,取决于服务器。导出类型中的尾部纯对象分支是架构生成工件:SDK 不返回裸对象,因为服务器的结构化输出在返回前被序列化为 JSON 字符串。在运行时值也可能是 `undefined`,尽管导出的类型不对此建模。

4667 

3090<h2 id="permission-types">4668<h2 id="permission-types">

3091 权限类型4669 权限类型

3092</h2>4670</h2>


3174 `ApiKeySource`4752 `ApiKeySource`

3175</h3>4753</h3>

3176 4754 

4755会话请求的 API 密钥来源,在 [`SDKSystemMessage`](#sdksystemmessage) 初始化消息上报告为 `apiKeySource`。

4756 

3177```typescript theme={null}4757```typescript theme={null}

3178type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";4758type ApiKeySource =

4759 | "ANTHROPIC_API_KEY"

4760 | "apiKeyHelper"

4761 | "/login managed key"

4762 | "none"

4763 | "user"

4764 | "project"

4765 | "org"

4766 | "temporary"

4767 | "oauth";

3179```4768```

3180 4769 

4770Claude Code 报告以下四个值之一:

4771 

4772| 值 | 使用中的密钥 |

4773| -------------------- | --------------------------------------------------------------------------------------------------- |

4774| `ANTHROPIC_API_KEY` | `ANTHROPIC_API_KEY` 环境变量中的密钥 |

4775| `apiKeyHelper` | 您的 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 命令返回的密钥 |

4776| `/login managed key` | 当您使用 [Claude Console 账户](/docs/zh-CN/authentication#claude-console-authentication) 登录时 Claude Code 存储的密钥 |

4777| `none` | 没有 API 密钥。会话以其他方式进行身份验证,例如 claude.ai 登录、bearer 令牌或云提供商 |

4778 

4779Agent SDK v0.3.234 及更高版本在类型中列出这四个值。该类型还保留 `user`、`project`、`org`、`temporary` 和 `oauth`,以便旧代码仍然可以编译,Claude Code 不报告它们。

4780 

3181<h3 id="sdkbeta">4781<h3 id="sdkbeta">

3182 `SdkBeta`4782 `SdkBeta`

3183</h3>4783</h3>

3184 4784 

3185可通过 `betas` 选项启用的可用测试功能。请参阅 [Beta 标头](https://platform.claude.com/docs/zh-CN/api/beta-headers)了解更多信息。4785可通过 `betas` 选项启用的可用测试功能。请参阅 [Beta 标头](https://platform.claude.com/docs/en/api/beta-headers) 了解更多信息。

3186 4786 

3187```typescript theme={null}4787```typescript theme={null}

3188type SdkBeta = "context-1m-2025-08-07";4788type SdkBeta = "context-1m-2025-08-07";

3189```4789```

3190 4790 

3191<Warning>4791<Warning>

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

3193</Warning>4793</Warning>

3194 4794 

3195<h3 id="slashcommand">4795<h3 id="slashcommand">

3196 `SlashCommand`4796 `SlashCommand`

3197</h3>4797</h3>

3198 4798 

3199有关可用 slash command 的信息。4799有关可用命令的信息。

3200 4800 

3201```typescript theme={null}4801```typescript theme={null}

3202type SlashCommand = {4802type SlashCommand = {


3254```4854```

3255 4855 

3256| 字段 | 类型 | 描述 |4856| 字段 | 类型 | 描述 |

3257| :------------ | :-------------------- | :------------------------------------------ |4857| :------------ | :-------------------- | :----------------------------------------------------------------------------------------------------------------------- |

3258| `name` | `string` | 代理类型标识符(例如,`"Explore"`、`"general-purpose"`) |4858| `name` | `string` | 代理类型标识符(例如,`"Explore"`、`"general-purpose"`) |

3259| `description` | `string` | 何时使用此代理的描述 |4859| `description` | `string` | 何时使用此代理的描述 |

3260| `model` | `string \| undefined` | 此代理使用的模型别名。如果省略,继承父级的模型 |4860| `model` | `string \| undefined` | 此代理使用的模型:别名或模型 ID,或 `'inherit'` 表示父级的模型。当为 `undefined` 时,Claude Code 按照 [子代理模型顺序](/docs/zh-CN/sub-agents#choose-a-model) 选择模型 |

3261 4861 

3262<h3 id="mcpserverstatus">4862<h3 id="mcpserverstatus">

3263 `McpServerStatus`4863 `McpServerStatus`


3303 | McpClaudeAIProxyServerConfig;4903 | McpClaudeAIProxyServerConfig;

3304```4904```

3305 4905 

3306请参阅 [`McpServerConfig`](#mcpserverconfig)了解每种传输类型的详情。4906请参阅 [`McpServerConfig`](#mcpserverconfig) 了解每种传输类型的详情。

3307 4907 

3308<h3 id="accountinfo">4908<h3 id="accountinfo">

3309 `AccountInfo`4909 `AccountInfo`


3331type ModelUsage = {4931type ModelUsage = {

3332 inputTokens: number;4932 inputTokens: number;

3333 outputTokens: number;4933 outputTokens: number;

4934 thinkingTokens?: number;

3334 cacheReadInputTokens: number;4935 cacheReadInputTokens: number;

3335 cacheCreationInputTokens: number;4936 cacheCreationInputTokens: number;

3336 webSearchRequests: number;4937 webSearchRequests: number;

3337 costUSD: number;4938 costUSD: number;

3338 contextWindow: number;4939 contextWindow: number;

3339 maxOutputTokens: number;4940 maxOutputTokens: number;

4941 canonicalModel?: string;

4942 provider?: string;

4943 costBasis?: 'list' | 'managed' | 'unknown';

3340};4944};

3341```4945```

3342 4946 

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

4948 

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

4950 

4951`provider` 命名为模型提供服务的 API 后端,例如 `firstParty`、`bedrock`、`vertex`、`foundry`、`anthropicAws`、`mantle` 或 `gateway`。

4952 

4953`costBasis` 命名为模型最新请求定价的价格表:`list` 表示列表价格,`managed` 表示 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing) 表,或 `unknown` 当两者都不匹配模型 ID 时。该字段需要 Claude Code v2.1.246 或更高版本。

4954 

3343<h3 id="configscope">4955<h3 id="configscope">

3344 `ConfigScope`4956 `ConfigScope`

3345</h3>4957</h3>


3381 speed: "standard" | "fast" | null;4993 speed: "standard" | "fast" | null;

3382 inference_geo: string | null;4994 inference_geo: string | null;

3383 iterations: BetaIterationsUsage | null;4995 iterations: BetaIterationsUsage | null;

4996 output_tokens_details: BetaOutputTokensDetails | null;

3384};4997};

3385```4998```

3386 4999 

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

5001 

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

5003 

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

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

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

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

3388 5008 

3389<h3 id="calltoolresult">5009<h3 id="calltoolresult">

3390 `CallToolResult`5010 `CallToolResult`


3403};5023};

3404```5024```

3405 5025 

5026<h3 id="sdkmcpresourcelink">

5027 `SDKMcpResourceLink`

5028</h3>

5029 

5030MCP 工具按引用返回的一个文件。Claude Code 从工具结果中的 `resource_link` 块构建每个条目,并将列表作为 `resourceLinks` 在 [`SDKUserMessage.tool_use_result`](#sdkusermessage) 上传递,或在调用在后台完成时作为 `resource_links` 在 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 上传递。需要 Agent SDK v0.3.257 或更高版本。

5031 

5032```typescript theme={null}

5033type SDKMcpResourceLink = {

5034 uri: string;

5035 name: string;

5036 title?: string;

5037 description?: string;

5038 mimeType?: string;

5039 size?: number;

5040 annotations?: Record<string, unknown>;

5041};

5042```

5043 

5044Claude Code 删除其 `uri` 或 `name` 不是字符串的块,并省略其值不是列出类型的可选字段。

5045 

5046| 字段 | 类型 | 描述 |

5047| :------------ | :------------------------------------- | :------------------ |

5048| `uri` | `string` | 资源的 URI,如服务器返回的那样 |

5049| `name` | `string` | 服务器给资源的名称 |

5050| `title` | `string \| undefined` | 显示标题,当服务器设置时 |

5051| `description` | `string \| undefined` | 描述,当服务器设置时 |

5052| `mimeType` | `string \| undefined` | MIME 类型,当服务器设置时 |

5053| `size` | `number \| undefined` | 大小(以字节为单位),当服务器设置时 |

5054| `annotations` | `Record<string, unknown> \| undefined` | 块的 MCP 注释对象,当服务器设置时 |

5055 

3406<h3 id="thinkingconfig">5056<h3 id="thinkingconfig">

3407 `ThinkingConfig`5057 `ThinkingConfig`

3408</h3>5058</h3>


3418 | { type: "disabled" }; // 无扩展思考5068 | { type: "disabled" }; // 无扩展思考

3419```5069```

3420 5070 

3421可选的 `display` 字段控制思考文本是否以 `"summarized"` 或 `"omitted"` 形式返回。在 Claude Opus 4.7 及更高版本上,API 默认值为 `"omitted"`,因此设置 `"summarized"` 以在 `thinking` 块中接收思考内容。5071可选的 `display` 字段控制思考文本是否以 `"summarized"` 或 `"omitted"` 形式返回。在 Claude Opus 4.7 及更高版本上,API 默认值为 `"omitted"`,因此设置 `"summarized"` 以在 `thinking` 块中接收思考内容。Claude Code 不会将 `display` 发送到 Amazon Bedrock 或 Google Cloud 的 Agent Platform,因此在这些提供商上,即使您将 `display` 设置为 `"summarized"`,Opus 4.7 及更高版本也会返回空 `thinking` 块。

3422 5072 

3423<h3 id="spawnedprocess">5073<h3 id="spawnedprocess">

3424 `SpawnedProcess`5074 `SpawnedProcess`


3487};5137};

3488```5138```

3489 5139 

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

5141 

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

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

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

5145 

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

5147 

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

5149 

3490<h3 id="rewindfilesresult">5150<h3 id="rewindfilesresult">

3491 `RewindFilesResult`5151 `RewindFilesResult`

3492</h3>5152</h3>


3500 filesChanged?: string[];5160 filesChanged?: string[];

3501 insertions?: number;5161 insertions?: number;

3502 deletions?: number;5162 deletions?: number;

5163 skippedLinks?: number;

3503};5164};

3504```5165```

3505 5166 

5167`skippedLinks` 计算跟踪路径,倒带拒绝恢复或删除以确保链接安全:跟踪路径处的符号链接、硬链接或其他非常规文件,不再解析到检查点时指向的位置的父目录,或无法安全读取的备份。该字段需要 Claude Code v2.1.216 或更高版本。使用 `rewindFiles(userMessageId, { dryRun: true })` 的预览调用永远不会设置它。

5168 

3506<h3 id="sdkstatusmessage">5169<h3 id="sdkstatusmessage">

3507 `SDKStatusMessage`5170 `SDKStatusMessage`

3508</h3>5171</h3>


3524 `SDKTaskNotificationMessage`5187 `SDKTaskNotificationMessage`

3525</h3>5188</h3>

3526 5189 

3527后台任务完成、失败或停止时的通知。后台任务包括 `run_in_background` Bash 命令、[Monitor](#monitor) 监视和后台子代理。5190后台任务完成、失败或停止时的通知。后台任务包括 `run_in_background` Bash 命令、[Monitor](#monitor) 监视和后台子代理。对于 `ambient` 字段,请参阅 [`SDKTaskStartedMessage`](#sdktaskstartedmessage),它定义了它及其版本要求。

3528 5191 

3529```typescript theme={null}5192```typescript theme={null}

3530type SDKTaskNotificationMessage = {5193type SDKTaskNotificationMessage = {


3535 status: "completed" | "failed" | "stopped";5198 status: "completed" | "failed" | "stopped";

3536 output_file: string;5199 output_file: string;

3537 summary: string;5200 summary: string;

5201 ambient?: boolean;

3538 usage?: {5202 usage?: {

3539 total_tokens: number;5203 total_tokens: number;

3540 tool_uses: number;5204 tool_uses: number;

3541 duration_ms: number;5205 duration_ms: number;

3542 };5206 };

5207 resource_links?: SDKMcpResourceLink[];

3543 uuid: UUID;5208 uuid: UUID;

3544 session_id: string;5209 session_id: string;

3545};5210};

3546```5211```

3547 5212 

5213当 Claude Code [将长 MCP 工具调用移到后台](/docs/zh-CN/mcp#automatic-backgrounding-of-long-tool-calls) 时,该调用的 `tool_result` 块仅保存占位符,调用的真实结果在此通知中到达。使用 `tool_use_id` 将通知与调用匹配。在 `completed` 通知上,`resource_links` 列出工具按引用返回的文件作为 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 条目,具有与 [`tool_use_result.resourceLinks`](#sdkusermessage) 相同的 50 链接和 64 KiB 限制。Claude Code 在结果没有链接时省略 `resource_links`,以及在不是 MCP 工具调用的任务的通知上。`resource_links` 需要 Agent SDK v0.3.257 或更高版本。

5214 

5215Claude Code 在发送给模型的每个任务通知前面加上通知,除了带有 [`scheduled-trigger` 子类型](#task-notification-subkinds) 的传递外,它们改为携带分配任务框架。通知说明没有发生人类输入,因此模型不会将通知视为用户指令或批准。

5216 

5217要检测任务通知轮次,请在 [`SDKUserMessage`](#sdkusermessage) 或 [`SDKResultMessage`](#sdkresultmessage) 上检查 `origin.kind === "task-notification"`,而不是匹配通知文本。如果您需要知道是什么引发了它,请从同一字段读取 `subkind`。在 v2.1.205 之前,Claude Code 在会话空闲时到达的通知上省略了通知。

5218 

3548<h3 id="sdktoolusesummarymessage">5219<h3 id="sdktoolusesummarymessage">

3549 `SDKToolUseSummaryMessage`5220 `SDKToolUseSummaryMessage`

3550</h3>5221</h3>


3639 parent_tool_use_id: string | null;5310 parent_tool_use_id: string | null;

3640 elapsed_time_seconds: number;5311 elapsed_time_seconds: number;

3641 task_id?: string;5312 task_id?: string;

5313 heartbeat?: boolean;

5314 subagent_type?: string;

5315 subagent_retry?: {

5316 agent_id: string;

5317 attempt: number;

5318 max_retries: number;

5319 retry_delay_ms: number;

5320 error_status: number | null;

5321 error_category: string;

5322 };

3642 uuid: UUID;5323 uuid: UUID;

3643 session_id: string;5324 session_id: string;

3644};5325};

3645```5326```

3646 5327 

5328当工具调用在主对话中运行时,Claude Code 每 30 秒发出一条 `tool_progress` 消息,其中 `heartbeat: true`。每个心跳都包含工具名称和经过的秒数,因此您可以区分长时间运行的调用和停滞的会话。Claude Code 不为子代理内的工具调用发出心跳。`heartbeat` 字段需要 Agent SDK v0.3.214 或更高版本。在 v2.1.257 之前,Claude Code 也不为前台 Agent 工具调用发出心跳。

5329 

5330在除心跳外的 Agent 工具的 `tool_progress` 消息上,`subagent_type` 命名运行中的子代理类型,例如 `general-purpose`。`subagent_retry` 在该子代理等待 API 错误退避(例如速率限制或过载)时出现,每个重试尝试一条消息。两个字段都需要 Agent SDK v0.3.214 或更高版本。

5331 

5332要从 `subagent_retry` 呈现重试指示器:

5333 

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

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

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

5337 

3647<h3 id="sdkauthstatusmessage">5338<h3 id="sdkauthstatusmessage">

3648 `SDKAuthStatusMessage`5339 `SDKAuthStatusMessage`

3649</h3>5340</h3>


3665 `SDKTaskStartedMessage`5356 `SDKTaskStartedMessage`

3666</h3>5357</h3>

3667 5358 

3668当后台任务开始时发出。`task_type` 字段对于后台 Bash 命令和 [Monitor](#monitor) 监视为 `"local_bash"`,对于子代理为 `"local_agent"`,或 `"remote_agent"`。5359当任务开始时发出。`task_type` 字段对于 Bash 命令和 [Monitor](#monitor) 监视为 `"local_bash"`,对于子代理为 `"local_agent"`,或 `"remote_agent"`。

3669 5360 

3670```typescript theme={null}5361```typescript theme={null}

3671type SDKTaskStartedMessage = {5362type SDKTaskStartedMessage = {


3675 tool_use_id?: string;5366 tool_use_id?: string;

3676 description: string;5367 description: string;

3677 task_type?: string;5368 task_type?: string;

5369 is_backgrounded?: boolean;

5370 spawn_depth?: number;

5371 ambient?: boolean;

3678 uuid: UUID;5372 uuid: UUID;

3679 session_id: string;5373 session_id: string;

3680};5374};

3681```5375```

3682 5376 

5377对于不是会话工作一部分的任务,`ambient` 为 `true`,例如 Claude Code 为其自身操作运行的任务。实时更新监视器也是环境的,包括用户要求的监视器。从活动指示器中排除环境任务。该字段需要 Agent SDK v0.3.247 或更高版本。

5378 

5379`ambient` 也出现在 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 和 [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage) 条目上。

5380 

5381`is_backgrounded` 和 `spawn_depth` 描述 Claude Code 如何启动任务。两个字段都需要 Agent SDK v0.3.238 或更高版本。

5382 

5383* `is_backgrounded`:Claude Code 在 `"local_agent"` 和 `"local_bash"` 任务上设置它。`true` 表示任务在后台运行。`false` 表示任务在前台运行,启动它的工具调用保持阻止,直到任务完成或移到后台。

5384* `spawn_depth`:Claude Code 仅在 `"local_agent"` 任务上设置它。主线程生成的子代理的深度为 `1`。深度 `1` 子代理生成的子代理的深度为 `2`,以此类推。

5385 

5386[已恢复的子代理](/docs/zh-CN/agent-sdk/subagents#resume-subagents) 始终报告 `is_backgrounded: true`,因为 Claude Code 在后台运行每个已恢复的子代理。当前台任务稍后移到后台时,Claude Code 在 [`task_updated`](#sdktaskupdatedmessage) 消息中报告新的 `is_backgrounded` 值,而不是发送第二个 `task_started`。

5387 

3683<h3 id="sdktaskprogressmessage">5388<h3 id="sdktaskprogressmessage">

3684 `SDKTaskProgressMessage`5389 `SDKTaskProgressMessage`

3685</h3>5390</h3>


3734 `SDKBackgroundTasksChangedMessage`5439 `SDKBackgroundTasksChangedMessage`

3735</h3>5440</h3>

3736 5441 

3737每当实时后台任务集发生变化时发出:任务启动、完成、被杀死,或前台代理被后台化。`tasks` 数组是完整的实时集。用每个有效负载替换任何缓存的集,而不是配对 `task_started` 和 `task_notification` 事件,以便下一个成员资格变化纠正您错过的任何事件。5442每当实时后台任务集发生变化时发出:任务启动、完成、被杀死,前台代理被后台化,或任务的 `description` 或 `ambient` 字段发生变化。

5443 

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

3738 5445 

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

3740 5447 

3741启动时不发出任何内容。每当会话的 CLI 进程启动或重新启动时重置为空集,并让下一个成员资格变化重新填充它。5448启动时不发出任何内容。每当会话的 CLI 进程启动或重新启动时重置为空集,并让下一个成员资格变化重新填充它。

3742 5449 

5450当您向运行中的会话发送重复的 `initialize` 控制请求时,例如在传输间隙后使用 [`reinitialize()`](#query-object),Claude Code 在响应后跟随当前实时集的快照,即使它为空。因此,重新连接的主机可以了解正在运行的内容,而无需等待下一个成员资格变化。在 Agent SDK v0.3.239 之前,Claude Code 在重复 `initialize` 后没有发送快照。

5451 

3743需要 Claude Code v2.1.203 或更高版本。5452需要 Claude Code v2.1.203 或更高版本。

3744 5453 

3745```typescript theme={null}5454```typescript theme={null}


3750 task_id: string;5459 task_id: string;

3751 task_type: string;5460 task_type: string;

3752 description: string;5461 description: string;

5462 ambient?: boolean;

3753 }[];5463 }[];

3754 uuid: UUID;5464 uuid: UUID;

3755 session_id: string;5465 session_id: string;


3760 `SDKThinkingTokensMessage`5470 `SDKThinkingTokensMessage`

3761</h3>5471</h3>

3762 5472 

3763在 Claude 生成思考块(包括编辑过的块)时发出,携带迄今为止生成的思考令牌的运行估计。`estimated_tokens` 是当前思考块的运行总计,`estimated_tokens_delta` 是此帧携带的增量。将其用于进度显示。顶级代理循环的最终计数是结果消息的 `usage.output_tokens`,它[不包括子代理令牌](/docs/zh-CN/agent-sdk/cost-tracking#get-the-total-cost-of-a-query);使用 [`modelUsage`](#modelusage) 进行整树会计。5473在 Claude 生成思考块(包括编辑过的块)时发出。`estimated_tokens` 是迄今为止在当前块中生成的思考令牌的运行估计,`estimated_tokens_delta` 是此帧携带的增量。将这些估计用于进度显示。

5474 

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

3764 5476 

3765需要 Claude Code v2.1.153 或更高版本。5477需要 Claude Code v2.1.153 或更高版本。

3766 5478 


3770 subtype: "thinking_tokens";5482 subtype: "thinking_tokens";

3771 estimated_tokens: number;5483 estimated_tokens: number;

3772 estimated_tokens_delta: number;5484 estimated_tokens_delta: number;

5485 user_message_uuid?: string;

3773 uuid: UUID;5486 uuid: UUID;

3774 session_id: string;5487 session_id: string;

3775};5488};


3821 `SDKLocalCommandOutputMessage`5534 `SDKLocalCommandOutputMessage`

3822</h3>5535</h3>

3823 5536 

3824来自本地 slash command 的输出(例如,`/voice` 或 `/usage`)。在记录中显示为助手样式的文本。5537Claude Code 不发出此消息类型。当您发送命令(例如 `/context` 或 `/usage`)作为提示时,其输出作为 [`SDKAssistantMessage`](#sdkassistantmessage) 到达。

3825 5538 

3826```typescript theme={null}5539```typescript theme={null}

3827type SDKLocalCommandOutputMessage = {5540type SDKLocalCommandOutputMessage = {


3837 `SDKCommandsChangedMessage`5550 `SDKCommandsChangedMessage`

3838</h3>5551</h3>

3839 5552 

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

3841 5554 

3842```typescript theme={null}5555```typescript theme={null}

3843type SDKCommandsChangedMessage = {5556type SDKCommandsChangedMessage = {


3853 `SDKPromptSuggestionMessage`5566 `SDKPromptSuggestionMessage`

3854</h3>5567</h3>

3855 5568 

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

3857 5570 

3858```typescript theme={null}5571```typescript theme={null}

3859type SDKPromptSuggestionMessage = {5572type SDKPromptSuggestionMessage = {


3868 `SDKConversationResetMessage`5581 `SDKConversationResetMessage`

3869</h3>5582</h3>

3870 5583 

3871当会话的对话被替换而不结束会话时发出,例如在 `/clear` 之后、在计划模式退出时或当新对话启动时。在 `new_conversation_id` 下挂载空记录,并丢弃任何缓存的会话标题。5584当会话的对话被替换而不结束会话时发出。在 `query()` 调用中,仅 `/clear` 及其别名产生此消息。在 `new_conversation_id` 下挂载空记录,并丢弃任何缓存的会话标题。

3872 5585 

3873```typescript theme={null}5586```typescript theme={null}

3874type SDKConversationResetMessage = {5587type SDKConversationResetMessage = {


3891class AbortError extends Error {}5604class AbortError extends Error {}

3892```5605```

3893 5606 

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

5608 

3894<h2 id="sandbox-configuration">5609<h2 id="sandbox-configuration">

3895 沙箱配置5610 沙箱配置

3896</h2>5611</h2>


3917```5632```

3918 5633 

3919| 属性 | 类型 | 默认值 | 描述 |5634| 属性 | 类型 | 默认值 | 描述 |

3920| :-------------------------- | :---------------------------------------------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------ |5635| :-------------------------- | :---------------------------------------------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ |

3921| `enabled` | `boolean` | `false` | 为命令执行启用沙箱模式 |5636| `enabled` | `boolean` | `false` | 为命令执行启用沙箱模式 |

3922| `failIfUnavailable` | `boolean` | `true` | 如果 `enabled` 为 `true` 但沙箱无法启动,则在启动时停止。设置为 `false` 以回退到沙箱外执行,并在 stderr 上显示警告 |5637| `failIfUnavailable` | `boolean` | `true` | 如果 `enabled` 为 `true` 但沙箱无法启动,则在启动时停止。设置为 `false` 以回退到沙箱外执行,并在 stderr 上显示警告 |

3923| `autoAllowBashIfSandboxed` | `boolean` | `true` | 启用沙箱时自动批准 bash 命令 |5638| `autoAllowBashIfSandboxed` | `boolean` | `true` | 启用沙箱时自动批准 bash 命令 |


3925| `allowUnsandboxedCommands` | `boolean` | `true` | 允许模型请求在沙箱外运行命令。当为 `true` 时,模型可以在工具输入中设置 `dangerouslyDisableSandbox`,这会回退到[权限系统](#permissions-fallback-for-unsandboxed-commands) |5640| `allowUnsandboxedCommands` | `boolean` | `true` | 允许模型请求在沙箱外运行命令。当为 `true` 时,模型可以在工具输入中设置 `dangerouslyDisableSandbox`,这会回退到[权限系统](#permissions-fallback-for-unsandboxed-commands) |

3926| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `undefined` | 网络特定的沙箱配置 |5641| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `undefined` | 网络特定的沙箱配置 |

3927| `filesystem` | [`SandboxFilesystemConfig`](#sandboxfilesystemconfig) | `undefined` | 用于读/写限制的文件系统特定沙箱配置 |5642| `filesystem` | [`SandboxFilesystemConfig`](#sandboxfilesystemconfig) | `undefined` | 用于读/写限制的文件系统特定沙箱配置 |

3928| `ignoreViolations` | `Record<string, string[]>` | `undefined` | 违规类别到要忽略的模式的映射(例如,`{ file: ['/tmp/*'], network: ['localhost'] }`) |5643| `ignoreViolations` | `Record<string, string[]>` | `undefined` | 命令子字符串或 `*` 的映射(用于每个命令)到要忽略的违规文本的子字符串,例如 `{ "*": ['/etc/hosts'] }`;请参阅 [`sandbox.ignoreViolations`](/docs/zh-CN/settings-reference#sandbox-ignoreviolations) |

3929| `enableWeakerNestedSandbox` | `boolean` | `false` | 为兼容性启用较弱的嵌套沙箱 |5644| `enableWeakerNestedSandbox` | `boolean` | `false` | 为兼容性启用较弱的嵌套沙箱 |

3930| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | 沙箱环境中的自定义 ripgrep 二进制配置 |5645| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | 沙箱环境中的自定义 ripgrep 二进制配置 |

3931 5646 


3965```5680```

3966 5681 

3967<Warning>5682<Warning>

3968 **Unix socket 安全性:** `allowUnixSockets` 选项可以授予对强大系统服务的访问权限。例如,允许 `/var/run/docker.sock` 实际上通过 Docker API 授予对主机系统的完全访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets 并了解每个的安全含义。5683 **Unix socket 安全性:** `allowUnixSockets` 选项可以授予对系统服务的访问权限,这些服务可能会到达沙箱外。例如,允许 `/var/run/docker.sock` 实际上通过 Docker API 授予对主机系统的完全访问权限,绕过沙箱隔离。仅允许严格必要的 Unix sockets 并了解每个的安全含义。

3969</Warning>5684</Warning>

3970 5685 

3971<h3 id="sandboxnetworkconfig">5686<h3 id="sandboxnetworkconfig">


3978type SandboxNetworkConfig = {5693type SandboxNetworkConfig = {

3979 allowedDomains?: string[];5694 allowedDomains?: string[];

3980 deniedDomains?: string[];5695 deniedDomains?: string[];

5696 strictAllowlist?: boolean;

3981 allowManagedDomainsOnly?: boolean;5697 allowManagedDomainsOnly?: boolean;

3982 allowLocalBinding?: boolean;5698 allowLocalBinding?: boolean;

3983 allowUnixSockets?: string[];5699 allowUnixSockets?: string[];


3988```5704```

3989 5705 

3990| 属性 | 类型 | 默认值 | 描述 |5706| 属性 | 类型 | 默认值 | 描述 |

3991| :------------------------ | :--------- | :---------- | :----------------------------------------------------------------------------------------------------------------------- |5707| :------------------------ | :--------- | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3992| `allowedDomains` | `string[]` | `[]` | 沙箱进程可以访问的域名 |5708| `allowedDomains` | `string[]` | `[]` | 沙箱进程可以访问的域名 |

3993| `deniedDomains` | `string[]` | `[]` | 沙箱进程无法访问的域名。优先于 `allowedDomains` |5709| `deniedDomains` | `string[]` | `[]` | 沙箱进程无法访问的域名。优先于 `allowedDomains` |

3994| `allowManagedDomainsOnly` | `boolean` | `false` | 仅限管理设置。在[管理设置](/docs/zh-CN/permissions#managed-settings)中设置时,仅遵守来自管理设置的 `allowedDomains` 条目,来自用户、项目或本地设置的条目被忽略。通过 SDK 选项设置时无效 |5710| `strictAllowlist` | `boolean` | `false` | 拒绝沙箱化命令访问[网络允许列表](/docs/zh-CN/sandboxing#network-isolation)之外的主机,而不是提示。仅对沙箱化命令强制执行;WebFetch 等进程内工具不受其限制。仅从用户、托管或 CLI `--settings` 设置中遵守;项目设置被忽略。需要 Claude Code v2.1.219 或更高版本 |

5711| `allowManagedDomainsOnly` | `boolean` | `false` | 仅限管理设置。在[管理设置](/docs/zh-CN/managed-settings)中设置时,仅遵守来自管理设置的 `allowedDomains` 条目和来自管理设置的 `WebFetch(domain:...)` 允许规则,来自用户、项目或本地设置的允许条目被忽略。通过 SDK 选项设置时无效 |

3995| `allowLocalBinding` | `boolean` | `false` | 允许进程绑定到本地端口(例如,用于开发服务器) |5712| `allowLocalBinding` | `boolean` | `false` | 允许进程绑定到本地端口(例如,用于开发服务器) |

3996| `allowUnixSockets` | `string[]` | `[]` | 进程可以访问的 Unix socket 路径(例如,Docker socket) |5713| `allowUnixSockets` | `string[]` | `[]` | 进程可以访问的 Unix socket 路径(例如,Docker socket) |

3997| `allowAllUnixSockets` | `boolean` | `false` | 允许访问所有 Unix sockets |5714| `allowAllUnixSockets` | `boolean` | `false` | 允许访问所有 Unix sockets |


4026 沙箱外命令的权限回退5743 沙箱外命令的权限回退

4027</h3>5744</h3>

4028 5745 

4029启用 `allowUnsandboxedCommands` 时,模型可以通过在工具输入中设置 `dangerouslyDisableSandbox: true` 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着您的 `canUseTool` 处理程序被调用,允许您实现自定义授权逻辑。在下面的示例中,`isCommandAuthorized` 代表您定义的授权检查。5746当 `allowUnsandboxedCommands` 启用时,模型可以通过在工具输入中设置 `dangerouslyDisableSandbox: true` 来请求在沙箱外运行命令。这些请求回退到现有权限系统,意味着您的 `canUseTool` 处理程序被调用,允许您实现自定义授权逻辑。在下面的示例中,`isCommandAuthorized` 代表您定义的授权检查。

4030 

4031<Note>

4032 **`excludedCommands` vs `allowUnsandboxedCommands`:**

4033 

4034 * `excludedCommands`:始终自动绕过沙箱的命令的静态列表(例如,`['docker']`)。模型对此无法控制。

4035 * `allowUnsandboxedCommands`:让模型在运行时通过在工具输入中设置 `dangerouslyDisableSandbox: true` 来决定是否请求沙箱外执行。

4036</Note>

4037 5747 

4038```typescript theme={null}5748```typescript theme={null}

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


4068}5778}

4069```5779```

4070 5780 

4071此模式使您能够:

4072 

4073* **审计模型请求:** 记录模型何时请求沙箱外执行

4074* **实现允许列表:** 仅允许特定命令在沙箱外运行

4075* **添加批准工作流:** 需要对特权操作进行明确授权

4076 

4077<Warning>5781<Warning>

4078 使用 `dangerouslyDisableSandbox: true` 运行的命令具有完整的系统访问权限。确保您的 `canUseTool` 处理程序仔细验证这些请求。5782 使用 `dangerouslyDisableSandbox: true` 运行的命令具有完整的系统访问权限。确保您的 `canUseTool` 处理程序仔细验证这些请求。

4079 5783 

4080 如果 `permissionMode` 设置为 `bypassPermissions` 且 `allowUnsandboxedCommands` 启用,模型可以自主执行沙箱外的命令,无需任何批准提示(显式的 [`ask` 规则](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)仍会强制执行一个)。此组合实际上允许模型以静默方式逃离沙箱隔离。5784 如果 `permissionMode` 设置为 `bypassPermissions` 且 `allowUnsandboxedCommands` 启用,模型可以自主执行沙箱外的命令,无需批准提示,除了[操作无模式自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。此组合实际上允许模型以静默方式逃离沙箱隔离。

4081</Warning>5785</Warning>

4082 5786 

4083<h2 id="see-also">5787<h2 id="see-also">

Details

12 12 

13对于澄清问题,Claude 生成问题和选项。您的角色是向用户呈现这些问题,并返回他们的选择。您不能向此流程添加自己的问题;如果您需要自己询问用户某些内容,请在应用程序逻辑中单独进行。13对于澄清问题,Claude 生成问题和选项。您的角色是向用户呈现这些问题,并返回他们的选择。您不能向此流程添加自己的问题;如果您需要自己询问用户某些内容,请在应用程序逻辑中单独进行。

14 14 

15回调可以无限期地保持待处理状态。执行保持暂停状态,直到您的回调返回,SDK 仅在查询本身被取消时才取消等待。如果用户可能需要比您的进程能够合理保持运行的时间更长的时间来响应,请注册一个 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks),它返回 [`defer` 决定](/docs/zh-CN/hooks#defer-a-tool-call-for-later),而不是在回调中等待,以便进程可以退出并稍后从持久化会话恢复。15回调可以无限期地保持待处理状态。执行保持暂停状态,直到您的回调返回。如果用户可能需要比您的进程能够合理保持运行的时间更长的时间来响应,请注册一个 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks),它返回 [`defer` 决定](/docs/zh-CN/hooks#defer-a-tool-call-for-later),而不是在回调中等待,以便进程可以退出并稍后从持久化会话恢复。

16 16 

17本指南向您展示如何检测每种类型的请求并做出适当的响应。17本指南向您展示如何检测每种类型的请求并做出适当的响应。

18 18 


204 ```204 ```

205</CodeGroup>205</CodeGroup>

206 206 

207<Note>

208 在 Python 中,`can_use_tool` 需要[流模式](/docs/zh-CN/agent-sdk/streaming-vs-single-mode)。当您通过 `query(prompt=generator)` 或 `ClaudeSDKClient.connect(prompt=async_iterable)` 传递有限的消息流时,SDK 会在最后一条消息后关闭输入流,在权限回调被调用之前,除非已注册的 hook 或进程内 MCP 服务器保持其打开。上面的示例使用返回 `{"continue_": True}` 的 `PreToolUse` hook 保持其打开。不带提示连接并通过 `ClaudeSDKClient.query()` 发送消息会自动保持流打开,不需要 hook。

209</Note>

210 

211此示例使用 y/n 流,其中除 `y` 之外的任何输入都被视为拒绝。在实践中,您可能会构建一个更丰富的 UI,让用户修改请求、提供反馈或完全重定向 Claude。有关所有响应方式,请参阅[响应工具请求](#respond-to-tool-requests)。207此示例使用 y/n 流,其中除 `y` 之外的任何输入都被视为拒绝。在实践中,您可能会构建一个更丰富的 UI,让用户修改请求、提供反馈或完全重定向 Claude。有关所有响应方式,请参阅[响应工具请求](#respond-to-tool-requests)。

212 208 

213<h3 id="respond-to-tool-requests">209<h3 id="respond-to-tool-requests">

Details

239 239 

240从 Claude Code v2.1.181 开始,也接受来自 `aws configure export-credentials --format process` 的平面输出,在顶级而不是嵌套在 `Credentials` 下具有相同的密钥。240从 Claude Code v2.1.181 开始,也接受来自 `aws configure export-credentials --format process` 的平面输出,在顶级而不是嵌套在 `Credentials` 下具有相同的密钥。

241 241 

242`Expiration` 是可选的。从 Claude Code v2.1.176 开始,当命令返回有效的 ISO 8601 `Expiration` 时,Claude Code 会缓存凭证直到该时间前五分钟。没有它,或在早期版本上,凭证被缓存一小时。242`Expiration` 是可选的。当命令返回有效的 ISO 8601 `Expiration` 时,Claude Code 会缓存凭证直到该时间前五分钟。没有它,凭证被缓存一小时。

243 243 

244当您配置 `awsCredentialExport` 而不配置 `awsAuthRefresh` 时,Claude Code 直接使用导出的凭证,不在启动时重新解析 AWS 默认凭证提供程序链。需要 Claude Code v2.1.206 或更高版本。244当您配置 `awsCredentialExport` 而不配置 `awsAuthRefresh` 时,Claude Code 直接使用导出的凭证,不在启动时重新解析 AWS 默认凭证提供程序链。需要 Claude Code v2.1.206 或更高版本。

245 245 

Details

170* **`claude setup-token` 和 `/install-github-app`**:仅强制执行 `forceLoginMethod`,因此它们可以在不同的组织中铸造令牌170* **`claude setup-token` 和 `/install-github-app`**:仅强制执行 `forceLoginMethod`,因此它们可以在不同的组织中铸造令牌

171* **[网关](/docs/zh-CN/claude-apps-gateway) 登录**:由 `forceLoginMethod: "gateway"` 选择而不是受其限制,并且不针对 Anthropic 组织进行身份验证,因此 `forceLoginOrgUUID` 不适用;使用您的网关身份提供商来限制访问171* **[网关](/docs/zh-CN/claude-apps-gateway) 登录**:由 `forceLoginMethod: "gateway"` 选择而不是受其限制,并且不针对 Anthropic 组织进行身份验证,因此 `forceLoginOrgUUID` 不适用;使用您的网关身份提供商来限制访问

172 172 

173通过您的设备管理工具部署密钥。[服务器托管设置](/docs/zh-CN/server-managed-settings) 仅到达已经通过您的组织身份验证的账户,因此它们无法重定向开发人员的首次登录。如果您的组织也分发服务器托管设置,请在两个地方设置密钥:托管设置源 [不合并](/docs/zh-CN/server-managed-settings#settings-precedence),缓存的服务器托管设置替换设备托管文件,除了两种密钥仍然从失败的源填充:173通过您的设备管理工具部署密钥。[服务器托管设置](/docs/zh-CN/server-managed-settings) 仅到达已经通过您的组织身份验证的账户,因此它们无法重定向开发人员的首次登录。如果您的组织也分发服务器托管设置,请在两个地方设置密钥:托管设置源 [不合并](/docs/zh-CN/server-managed-settings#settings-precedence),缓存的服务器托管设置替换设备托管文件,除了几个 [按密钥例外](/docs/zh-CN/server-managed-settings#per-key-exceptions-across-managed-sources)。`forceLoginOrgUUID` 和 `forceLoginMethod` 的 `"claudeai"` 和 `"console"` 值不在这些例外中,因此在两个地方都保留它们。

174 

175* **`env` 块**:在 Claude Code v2.1.223 或更高版本中 [按密钥合并](/docs/zh-CN/server-managed-settings#per-key-exceptions-across-managed-sources)

176* **[跨源锁定密钥](/docs/zh-CN/server-managed-settings#per-key-exceptions-across-managed-sources)**:从任何管理员源获得认可

177 

178`forceLoginMethod` 和 `forceLoginOrgUUID` 都不是,所以在两个地方都保留它们。

179 174 

180这些密钥还决定不使用登录凭证的会话是否可以启动。有关完整行为,请参阅设置参考中的 [`forceLoginOrgUUID`](/docs/zh-CN/settings-reference#forceloginorguuid)。175这些密钥还决定不使用登录凭证的会话是否可以启动。有关完整行为,请参阅设置参考中的 [`forceLoginOrgUUID`](/docs/zh-CN/settings-reference#forceloginorguuid)。

181 176 

Details

568claude -p "<your prompt>" --output-format json | your_command568claude -p "<your prompt>" --output-format json | your_command

569```569```

570 570 

571在开发期间使用 `--verbose` 进行调试,在生产中关闭它。

572 

573<h3 id="run-autonomously-with-auto-mode">571<h3 id="run-autonomously-with-auto-mode">

574 使用 auto mode 自主运行572 使用 auto mode 自主运行

575</h3>573</h3>

chrome.md +92 −33

Details

6 6 

7> 将 Claude Code 连接到 Chrome 浏览器,以测试网络应用、使用控制台日志进行调试、自动填充表单以及从网页中提取数据。7> 将 Claude Code 连接到 Chrome 浏览器,以测试网络应用、使用控制台日志进行调试、自动填充表单以及从网页中提取数据。

8 8 

9Claude Code 与 [Claude in Chrome 浏览器扩展程序](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 集成,为您提供从 CLI 或 [VS Code 扩展程序](/zh-CN/vs-code#automate-browser-tasks-with-chrome) 进行浏览器自动化的功能。构建您的代码,然后在浏览器中测试和调试,无需切换上下文。9Claude Code 与 [Claude in Chrome 浏览器扩展程序](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 集成,为您提供从 CLI 或 [VS Code 扩展程序](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome) 进行浏览器自动化的功能。构建您的代码,然后在浏览器中测试和调试,无需切换上下文。

10 10 

11Claude 为浏览器任务打开新标签页,并共享您浏览器的登录状态,因此它可以访问您已登录的任何网站。浏览器操作在实时可见的 Chrome 窗口中运行。当 Claude 遇到登录页面或 CAPTCHA 时,它会暂停并要求您手动处理。11Claude 为浏览器任务打开新标签页,并共享您浏览器的登录状态,因此它可以访问您已登录的任何网站。浏览器操作在实时可见的 Chrome 窗口中运行。当 Claude 遇到登录页面或 CAPTCHA 时,它会暂停并要求您手动处理。

12 12 

13扩展程序将 Claude 打开的标签页收集到与您的会话相关联的 Chrome 标签页组中。在本地会话中,Claude Code 是否在会话结束时关闭该组取决于会话如何结束:

14 

15* 当您输入 `/clear` 时,Claude Code 会关闭该组(包括打开的页面),除非仍在运行的工作在清除后仍然存在

16* 当您使用 `/resume` 等命令切换会话、退出 Claude Code 或在仍在运行的工作中运行 `/clear` 时,Claude Code 仅在该组仅包含空的新标签页时才关闭该组,因此您可能仍在阅读的页面保持打开状态

17 

13<Note>18<Note>

14 Chrome 集成适用于 Google Chrome 和 Microsoft Edge。尚不支持 Brave、Arc 或其他基于 Chromium 的浏览器。也不支持 Windows 子系统 for Linux (WSL)。19 Chrome 集成适用于 Google Chrome 和 Microsoft Edge。Claude Code 还会检测扩展程序并在其他基于 Chromium 的浏览器中设置连接,包括 Brave、Arc、Vivaldi 和 Opera。Windows 子系统 for Linux (WSL) 不支持 Chrome 集成。

15</Note>20</Note>

16 21 

17<h2 id="capabilities">22<h2 id="capabilities">


26* **已认证的网络应用**:与 Google Docs、Gmail、Notion 或您已登录的任何应用交互,无需 API 连接器31* **已认证的网络应用**:与 Google Docs、Gmail、Notion 或您已登录的任何应用交互,无需 API 连接器

27* **数据提取**:从网页中提取结构化信息并将其保存到本地32* **数据提取**:从网页中提取结构化信息并将其保存到本地

28* **任务自动化**:自动化重复的浏览器任务,如数据输入、表单填充或多站点工作流33* **任务自动化**:自动化重复的浏览器任务,如数据输入、表单填充或多站点工作流

34* **文件上传**:将您计算机中的文件附加到网页上的上传字段

29* **会话录制**:将浏览器交互录制为 GIF,以记录或分享发生的情况35* **会话录制**:将浏览器交互录制为 GIF,以记录或分享发生的情况

30 36 

31<h2 id="prerequisites">37<h2 id="prerequisites">


34 40 

35在使用 Claude Code 与 Chrome 之前,您需要:41在使用 Claude Code 与 Chrome 之前,您需要:

36 42 

37* [Google Chrome](https://www.google.com/chrome/) 或 [Microsoft Edge](https://www.microsoft.com/edge) 浏览器43* [Google Chrome](https://www.google.com/chrome/)、[Microsoft Edge](https://www.microsoft.com/edge) 或其他基于 Chromium 的浏览器,如 Brave、Arc、Vivaldi 或 Opera

38* [Claude in Chrome 扩展程序](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 版本 1.0.36 或更高版本,可在 Chrome Web Store 中为两个浏览器获得44* [Claude in Chrome 扩展程序](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 版本 1.0.36 或更高版本,可在 Chrome Web Store 中获得

39* [Claude Code](/zh-CN/quickstart#step-1-install-claude-code)45* [Claude Code](/docs/zh-CN/quickstart#step-1-install-claude-code)

40* 直接 Anthropic 计划(Pro、Max、Team 或 Enterprise)46* 直接 Anthropic 计划(Pro、Max、Team 或 Enterprise)

41 47 

48Chrome 集成还需要使用 `/login` 登录。如果您使用 API 密钥或来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的长期令牌进行身份验证,Claude Code 会关闭 Chrome 集成,即使您传递 `--chrome`,因为浏览器扩展程序无法使用这些凭据进行身份验证。在 v2.1.216 之前,这些会话可以启用 Chrome 集成,但每次尝试连接到浏览器扩展程序都会失败,并显示 403 错误。

49 

42<Note>50<Note>

43 Chrome 集成不可通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 等第三方提供商获得。如果您仅通过第三方提供商访问 Claude,则需要单独的 claude.ai 账户来使用此功能。51 Chrome 集成不可通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 等第三方提供商获得。如果您仅通过第三方提供商访问 Claude,则需要单独的 claude.ai 账户来使用此功能。

44</Note>52</Note>


55 claude --chrome63 claude --chrome

56 ```64 ```

57 65 

58 您也可以通过在现有会话中运行 `/chrome` 来启用 Chrome。66 首次使用 Chrome 启动时,Claude Code 会显示一个一次性对话框,介绍该集成并解释网站权限的工作原理。按 Enter 继续。

67 

68 要在未来的会话中启用 Chrome 而无需该标志,请参阅[默认启用 Chrome](#enable-chrome-by-default)。

59 </Step>69 </Step>

60 70 

61 <Step title="要求 Claude 使用浏览器">71 <Step title="要求 Claude 使用浏览器">

62 此示例导航到页面、与其交互并报告其发现,全部来自您的终端或编辑器:72 此示例导航到页面、与其交互并报告其发现,全部来自您的终端或编辑器:

63 73 

64 ```text theme={null}74 ```text wrap theme={null}

65 Go to code.claude.com/docs, click on the search box,75 Go to code.claude.com/docs, click on the search box,

66 type "hooks", and tell me what results appear76 type "hooks", and tell me what results appear

67 ```77 ```

68 78 

69 第一个浏览器操作要求获得使用 `claude-in-chrome` skill 的权限。批准它,Claude 将打开一个新标签页并开始任务。79 如果 Claude Code 在浏览器操作前要求权限,请批准它。对话框以 `Claude in Chrome wants to` 开头,并提供在该会话中允许该网站上所有操作的选项。Claude 打开一个新标签页并开始任务。

70 </Step>80 </Step>

71</Steps>81</Steps>

72 82 

73随时运行 `/chrome` 以检查连接状态、管理权限、重新连接扩展程序或选择要使用的已连接浏览器。如果在浏览器操作开始时连接了多个浏览器,Claude 会提示您选择一个。83随时运行 `/chrome` 以检查连接状态、管理权限、重新连接扩展程序或选择要使用的已连接浏览器。当状态面板显示"Status: 已启用"和"Extension: 已安装"时,集成正在工作。

84 

85如果连接了多个浏览器,您可以选择 Claude 使用哪一个。当浏览器操作在您选择之前开始时,Claude 会提示您选择一个。要稍后切换浏览器,运行 `/chrome` 并选择**选择浏览器…**。即使另一个浏览器连接,Claude 也会继续使用您的选择。

86 

87对于 VS Code,请参阅[在 VS Code 中使用 Chrome 自动化浏览器任务](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)。

88 

89<h3 id="install-the-extension-when-claude-asks">

90 当 Claude 要求时安装扩展程序

91</h3>

92 

93当 Claude 在交互式会话中需要您的浏览器,而 Claude Code 未检测到扩展程序时,Claude Code 会显示标题为"Claude wants to use your browser"的安装提示。Claude Code 每个会话最多询问一次。

94 

95该提示提供三个选择:

96 

97* **安装扩展程序**:在您的浏览器中打开扩展程序安装页面并启动引导式设置。Claude Code 等待安装、连接扩展程序,并在同一会话中启用浏览器工具。当连接准备好时,选择"Continue with browser tools",Claude 在您的浏览器中恢复任务。您可以通过选择"Continue without browser tools"离开设置,稍后使用 `/chrome` 完成。

98* **暂不**:继续执行任务而不使用浏览器工具。Claude Code 可以在稍后的会话中再次询问。

99* **不再询问**:在未来的会话中停止该提示。您仍然可以随时使用 `/chrome` 设置集成。

74 100 

75对于 VS Code,请参阅 [VS Code 中的浏览器自动化](/zh-CN/vs-code#automate-browser-tasks-with-chrome)。101如果您的组织使用 [`deniedMcpServers` 托管设置](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists)阻止 `claude-in-chrome` MCP 服务器,Claude Code 不会显示安装提示。

76 102 

77<h3 id="enable-chrome-by-default">103<h3 id="enable-chrome-by-default">

78 默认启用 Chrome104 默认启用 Chrome


80 106 

81为了避免每个会话都传递 `--chrome`,运行 `/chrome` 并选择"默认启用"。107为了避免每个会话都传递 `--chrome`,运行 `/chrome` 并选择"默认启用"。

82 108 

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

110 

111在 [VS Code 扩展程序](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome)中,只要安装了 Chrome 扩展程序,Chrome 就可用。无需额外标志。

84 112 

85<Note>113<Note>

86 在 CLI 中默认启用 Chrome 会增加上下文使用,因为浏览器工具始终被加载。如果您注意到上下文消耗增加,请禁用此设置,仅在需要时使用 `--chrome`。114 在 CLI 中默认启用 Chrome 会增加上下文使用,因为浏览器工具始终被加载。如果您注意到上下文消耗增加,请禁用此设置,仅在需要时使用 `--chrome`。


96 Plan Mode 中的浏览器工具124 Plan Mode 中的浏览器工具

97</h3>125</h3>

98 126 

99在 [plan mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 中,仅读取页面或浏览器状态的浏览器工具调用无需权限提示即可运行,而改变状态的调用会提示批准。127在 [plan mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)中,在 Claude 记录 GIF、打开新标签页或运行快捷方式之前会出现权限提示。如果您的会话中[可用绕过权限模式](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode)且[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)已关闭,这些调用将在没有提示的情况下运行。

100 

101* **仅读取调用**:`read_page`、`get_page_text`、`find`、读取控制台消息或网络请求,以及截图

102* **改变状态的调用**:点击、输入、导航、标签页和窗口管理,以及录制 GIF

103 128 

104从 v2.1.199 开始,设置状态改变输入标志的仅读取调用(例如 `tabs_context_mcp` 上的 `createIfEmpty`、控制台和网络读取器上的 `clear`,或截图上的 `save_to_disk`)也会提示批准。`browser_batch` 调用仅在其中的每个操作都是仅读取时才无需提示即可运行。129当 `tabs_context_mcp` 调用设置 `createIfEmpty` 时也会提示,包含任何这些操作的 `browser_batch` 调用也是如此。

105 130 

106<h2 id="example-workflows">131<h2 id="example-workflows">

107 示例工作流132 示例工作流


115 140 

116在开发网络应用时,要求 Claude 验证您的更改是否正常工作:141在开发网络应用时,要求 Claude 验证您的更改是否正常工作:

117 142 

118```text theme={null}143```text wrap theme={null}

119I just updated the login form validation. Can you open localhost:3000,144I just updated the login form validation. Can you open localhost:3000,

120try submitting the form with invalid data, and check if the error145try submitting the form with invalid data, and check if the error

121messages appear correctly?146messages appear correctly?


129 154 

130Claude 可以读取控制台输出以帮助诊断问题。告诉 Claude 要查找的模式,而不是要求所有控制台输出,因为日志可能很冗长:155Claude 可以读取控制台输出以帮助诊断问题。告诉 Claude 要查找的模式,而不是要求所有控制台输出,因为日志可能很冗长:

131 156 

132```text theme={null}157```text wrap theme={null}

133Open the dashboard page and check the console for any errors when158Open the dashboard page and check the console for any errors when

134the page loads.159the page loads.

135```160```


142 167 

143加快重复数据输入任务的速度:168加快重复数据输入任务的速度:

144 169 

145```text theme={null}170```text wrap theme={null}

146I have a spreadsheet of customer contacts in contacts.csv. For each row,171I have a spreadsheet of customer contacts in contacts.csv. For each row,

147go to the CRM at crm.example.com, click "Add Contact", and fill in the172go to the CRM at crm.example.com, click "Add Contact", and fill in the

148name, email, and phone fields.173name, email, and phone fields.


150 175 

151Claude 读取您的本地文件、导航网络界面并为每条记录输入数据。176Claude 读取您的本地文件、导航网络界面并为每条记录输入数据。

152 177 

178<h3 id="upload-files-to-web-pages">

179 将文件上传到网页

180</h3>

181 

182Claude 可以将您计算机中的文件附加到页面上的上传字段。Claude Code 读取文件并将其内容发送到浏览器,因此上传在本地和远程会话中都有效。需要 Claude Code v2.1.211 或更高版本。

183 

184此示例将日志文件附加到表单:

185 

186```text wrap theme={null}

187Open the bug tracker at bugs.example.com, create a new issue,

188and attach logs/session.log to it

189```

190 

191上传有三个限制:

192 

193* **权限**:Claude 只能在会话被允许读取文件时上传文件,因此[权限规则](/docs/zh-CN/settings-reference#permission-settings)拒绝对文件的 `Read` 访问也会阻止上传。

194* **大小**:单次上传最多可包含 10 MB 的文件。

195* **硬链接**:Claude 拒绝具有多个硬链接的文件,这在 `node_modules` 等包管理器存储中很常见。复制文件并上传副本。

196 

153<h3 id="draft-content-in-google-docs">197<h3 id="draft-content-in-google-docs">

154 在 Google Docs 中起草内容198 在 Google Docs 中起草内容

155</h3>199</h3>

156 200 

157使用 Claude 直接在您的文档中写入,无需 API 设置:201使用 Claude 直接在您的文档中写入,无需 API 设置:

158 202 

159```text theme={null}203```text wrap theme={null}

160Draft a project update based on the recent commits and add it to my204Draft a project update based on the recent commits and add it to my

161Google Doc at docs.google.com/document/d/abc123205Google Doc at docs.google.com/document/d/abc123

162```206```


169 213 

170从网站中提取结构化信息:214从网站中提取结构化信息:

171 215 

172```text theme={null}216```text wrap theme={null}

173Go to the product listings page and extract the name, price, and217Go to the product listings page and extract the name, price, and

174availability for each item. Save the results as a CSV file.218availability for each item. Save the results as a CSV file.

175```219```


182 226 

183协调多个网站之间的任务:227协调多个网站之间的任务:

184 228 

185```text theme={null}229```text wrap theme={null}

186Check my calendar for meetings tomorrow, then for each meeting with230Check my calendar for meetings tomorrow, then for each meeting with

187an external attendee, look up their company website and add a note231an external attendee, look up their company website and add a note

188about what they do.232about what they do.


196 240 

197创建浏览器交互的可共享录制:241创建浏览器交互的可共享录制:

198 242 

199```text theme={null}243```text wrap theme={null}

200Record a GIF showing how to complete the checkout flow, from adding244Record a GIF showing how to complete the checkout flow, from adding

201an item to the cart through to the confirmation page.245an item to the cart through to the confirmation page.

202```246```

203 247 

204Claude 录制交互序列并将其保存为 GIF 文件。248Claude 录制交互序列并将其保存为 GIF 文件。录制捕获浏览器中可见的所有内容,包括已登录页面上的帐户详细信息,因此在与团队外部共享之前请查看。

249 

250<h3 id="save-screenshots-to-disk">

251 将屏幕截图保存到磁盘

252</h3>

253 

254要求 Claude 将屏幕截图保存为文件:

255 

256```text wrap theme={null}

257Take a screenshot of the checkout page and save it to disk

258```

259 

260Claude 将图像保存到磁盘并报告文件路径。在 v2.1.211 之前,屏幕截图工具的 `save_to_disk` 选项没有写入文件。

205 261 

206<h2 id="troubleshooting">262<h2 id="troubleshooting">

207 故障排除263 故障排除


221 277 

222第一次启用 Chrome 集成时,Claude Code 会安装本机消息传递主机配置文件。Chrome 在启动时读取此文件,因此如果扩展程序在您的第一次尝试中未被检测到,请重新启动 Chrome 以获取新配置。278第一次启用 Chrome 集成时,Claude Code 会安装本机消息传递主机配置文件。Chrome 在启动时读取此文件,因此如果扩展程序在您的第一次尝试中未被检测到,请重新启动 Chrome 以获取新配置。

223 279 

224从 v2.1.199 开始,Claude Code 在首次安装时会打开一个浏览器标签页,提示您连接扩展程序。稍后重写配置文件的会话(例如在切换 Claude Code 构建或配置目录后)不会重新打开它。280Claude Code 在首次安装时会打开一个浏览器标签页,提示您连接扩展程序。稍后重写配置文件的会话(例如在切换构建或配置目录后)不会重新打开它。

225 281 

226如果连接仍然失败,请验证主机配置文件是否存在于:282如果连接仍然失败,请验证主机配置文件是否存在于:

227 283 


237* **Linux**:`~/.config/microsoft-edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`293* **Linux**:`~/.config/microsoft-edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

238* **Windows**:检查 Windows 注册表中的 `HKCU\Software\Microsoft\Edge\NativeMessagingHosts\`294* **Windows**:检查 Windows 注册表中的 `HKCU\Software\Microsoft\Edge\NativeMessagingHosts\`

239 295 

296其他基于 Chromium 的浏览器从其自己的配置目录读取相同的文件,该目录以浏览器命名。例如,macOS 上的 Brave 使用 `~/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts/`,在 Windows 上每个浏览器都有自己的注册表项,例如 `HKCU\Software\BraveSoftware\Brave-Browser\NativeMessagingHosts\`。

297 

240<h3 id="browser-not-responding">298<h3 id="browser-not-responding">

241 浏览器无响应299 浏览器无响应

242</h3>300</h3>


261 319 

262* **命名管道冲突 (EADDRINUSE)**:如果另一个进程正在使用相同的命名管道,请重新启动 Claude Code。关闭任何可能使用 Chrome 的其他 Claude Code 会话。320* **命名管道冲突 (EADDRINUSE)**:如果另一个进程正在使用相同的命名管道,请重新启动 Claude Code。关闭任何可能使用 Chrome 的其他 Claude Code 会话。

263* **本机消息传递主机错误**:如果本机消息传递主机在启动时崩溃,请尝试重新安装 Claude Code 以重新生成主机配置。321* **本机消息传递主机错误**:如果本机消息传递主机在启动时崩溃,请尝试重新安装 Claude Code 以重新生成主机配置。

322* **设置页面无法打开**:更新 Claude Code。在 v2.1.211 之前,提示您连接扩展程序的浏览器标签页在 Windows 上可能无法打开。

264 323 

265<h3 id="common-error-messages">324<h3 id="common-error-messages">

266 常见错误消息325 常见错误消息


269这些是最常见的错误及其解决方法:328这些是最常见的错误及其解决方法:

270 329 

271| 错误 | 原因 | 修复 |330| 错误 | 原因 | 修复 |

272| ------------ | -------------------------- | ---------------------------------------------- |331| ------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |

273| "浏览器扩展程序未连接" | 本机消息传递主机无法到达扩展程序 | 重新启动 Chrome 和 Claude Code,然后运行 `/chrome` 以重新连接 |332| "浏览器扩展程序未连接" | 本机消息传递主机无法到达扩展程序,或您的组织的 IP 允许列表拒绝了到 `bridge.claudeusercontent.com` 的连接 | 重新启动 Chrome 和 Claude Code,然后运行 `/chrome` 以重新连接。如果您的组织使用 IP 允许列表且错误仍然存在,请参阅[组织 IP 允许列表和代理出口](/docs/zh-CN/network-config#organization-ip-allowlists-and-proxy-egress) |

274| "未检测到扩展程序" | Chrome 扩展程序未安装或已禁用 | 在 `chrome://extensions` 中安装或启用扩展程序 |333| 扩展程序在 `/chrome` 中显示"未检测到" | Chrome 扩展程序未安装或已禁用 | 在 `chrome://extensions` 中安装或启用扩展程序 |

275| "没有可用的标签页" | Claude 在标签页准备好之前尝试操作 | 要求 Claude 创建新标签页并重试 |334| "没有可用的标签页" | Claude 在标签页准备好之前尝试操作 | 要求 Claude 创建新标签页并重试 |

276| "接收端不存在" | 扩展程序 service worker 进入空闲状态 | 运行 `/chrome` 并选择"重新连接扩展程序" |335| "接收端不存在" | 扩展程序 service worker 进入空闲状态 | 运行 `/chrome` 并选择"重新连接扩展程序" |

277 336 


279 另请参阅338 另请参阅

280</h2>339</h2>

281 340 

282* [计算机使用](/zh-CN/computer-use):当任务无法在浏览器中完成时控制本机 macOS 应用341* [计算机使用](/docs/zh-CN/computer-use):当任务无法在浏览器中完成时控制本机 macOS 应用

283* [在 VS Code 中使用 Claude Code](/zh-CN/vs-code#automate-browser-tasks-with-chrome):VS Code 扩展程序中的浏览器自动化342* [在 VS Code 中使用 Claude Code](/docs/zh-CN/vs-code#automate-browser-tasks-with-chrome):VS Code 扩展程序中的浏览器自动化

284* [CLI 参考](/zh-CN/cli-reference):命令行标志,包括 `--chrome`343* [CLI 参考](/docs/zh-CN/cli-reference):命令行标志,包括 `--chrome`

285* [常见工作流](/zh-CN/common-workflows):更多使用 Claude Code 的方式344* [常见工作流](/docs/zh-CN/common-workflows):更多使用 Claude Code 的方式

286* [数据和隐私](/zh-CN/data-usage):Claude Code 如何处理您的数据345* [数据和隐私](/docs/zh-CN/data-usage):Claude Code 如何处理您的数据

287* [Claude in Chrome 入门](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome):Chrome 扩展程序的完整文档,包括快捷键、计划和权限346* [Claude in Chrome 入门](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome):Chrome 扩展程序的完整文档,包括快捷键、计划和权限

Details

18 文件结构18 文件结构

19</h2>19</h2>

20 20 

21五个部分是[必需的](#required-sections)。所有其他部分都是[可选的](#optional-sections),省略的部分采用其默认值。未知的键会导致启动失败,因此拼写错误会显示为命名错误,而不是被静默忽略的设置。21五个部分是[必需的](#required-sections)。其他所有部分都是[可选的](#optional-sections),省略的部分采用其默认值。未知的键会导致启动失败,因此拼写错误会显示为命名错误,而不是被静默忽略的设置。

22 22 

23**必需部分:**23**必需部分:**

24 24 

25* [`listen`](#listen):绑定地址、公共 URL、TLS 终止25* [`listen`](#listen):绑定地址、公共 URL、TLS 终止

26* [`oidc`](#oidc):你的身份提供者 (IdP),包括发行者、客户端、声明映射和谁可以登录26* [`oidc`](#oidc):您的身份提供商 (IdP),包括颁发者、客户端、声明映射以及谁可以登录

27* [`session`](#session):网关铸造的持有者令牌,包括密钥和生命周期27* [`session`](#session):网关铸造的持有者令牌,包括密钥和生命周期

28* [`store`](#store):PostgreSQL,用于设备授权和速率限制计数器28* [`store`](#store):PostgreSQL,用于设备授权和速率限制计数器

29* [`upstreams`](#upstreams):推理去往何处,无论是 Anthropic、Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 还是 Microsoft Foundry29* [`upstreams`](#upstreams):推理的去向,无论是 Anthropic、Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 还是 Microsoft Foundry

30 30 

31**可选部分:**31**可选部分:**

32 32 

33* [`admin`](#admin):Admin API 身份验证和支出限制的保留33* [`admin`](#admin):Admin API 身份验证和支出限制的保留

34* [`enforcement`](#enforcement):支出限制故障开放或故障关闭行为34* [`enforcement`](#enforcement):支出限制故障开放或故障关闭行为

35* [`pricing`](#pricing):合同费率和支出计量的折扣乘数35* [`pricing`](#pricing):合同费率和支出计量器的折扣乘数以及开发人员看到的成本数字的折扣乘数

36* [`models`](#models) 和 `auto_include_builtin_models`:管理员策划的模型列表和每个上游的 ID36* [`models`](#models) 和 `auto_include_builtin_models`:管理员策划的模型列表和每个上游 ID

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

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

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

40 40 

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


136 `upstreams`136 `upstreams`

137</h3>137</h3>

138 138 

139`upstreams` 是一个有序列表。网关将推理转发到解析请求的模型的第一个上游。在 `5xx`、`429`、`401`、`403`、`404` 或超时时,它故障转移到下一个;其他 `4xx` 不会,因为这些错误归因于请求而不是上游。`401` 或 `403` 意味着网关自己的凭证对该上游失败,`404` 意味着该上游不服务请求的模型,因此列表中的后续上游仍然可以。139`upstreams` 是一个有序列表。网关将推理转发到解析请求的模型的第一个上游。

140 

141在 `5xx`、`429`、`401`、`403`、`404` 或超时时,网关故障转移到下一个上游;其他 `4xx` 不会,因为这些错误归因于请求而不是上游。`401` 或 `403` 意味着网关自己的凭证对该上游失败。`404` 意味着该上游不服务请求的模型,因此列表中的后续上游仍然可以。

142 

143如果你在上游上设置 `forward_user_identity: true`,它返回给携带开发者电子邮件的请求的 `429` 不会故障转移。请参阅[如何每用户限制拒绝到达开发者](#per-user-identity-headers-for-a-proxy-you-run)。

140 144 

141在 `404` 上故障转移需要网关 v2.1.198 或更高版本。早期版本即使列表中的后续上游服务该模型,也会将第一个 `404` 返回给客户端。145在 `404` 上故障转移需要网关 v2.1.198 或更高版本。早期版本即使列表中的后续上游服务该模型,也会将第一个 `404` 返回给客户端。

142 146 


228 232 

229当 IdP 令牌不携带电子邮件时,网关仅发送 `x-claude-gateway-user-id` 并省略两个电子邮件头。如果你的 IdP 将电子邮件放在不同的声明中,将 [`oidc.email_claim`](#oidc) 设置为该声明。233当 IdP 令牌不携带电子邮件时,网关仅发送 `x-claude-gateway-user-id` 并省略两个电子邮件头。如果你的 IdP 将电子邮件放在不同的声明中,将 [`oidc.email_claim`](#oidc) 设置为该声明。

230 234 

235当你的代理答复 `429` 给携带开发者电子邮件的请求时,网关将该响应按原样返回给开发者,而不是故障转移到下一个上游,因此你的代理的每用户预算或速率限制保持。代理的其他响应遵循普通[故障转移规则](#upstreams)。如果开发者的 IdP 令牌不携带电子邮件,网关转发他们的请求而不带电子邮件头,因此对其中一个请求的 `429` 计为上游容量并故障转移。在网关服务器上的 v2.1.267 之前,每个 `429` 都故障转移。

236 

231仅在 `base_url` 是你操作的代理的上游上设置 `forward_user_identity`。网关将开发者电子邮件发送到该 `base_url` 命名的任何服务器。如果 `base_url` 是 Anthropic API(这是默认值),网关拒绝启动。237仅在 `base_url` 是你操作的代理的上游上设置 `forward_user_identity`。网关将开发者电子邮件发送到该 `base_url` 命名的任何服务器。如果 `base_url` 是 Anthropic API(这是默认值),网关拒绝启动。

232 238 

233<h4 id="amazon-bedrock">239<h4 id="amazon-bedrock">


367 373 

368网关按顺序尝试上游。`5xx`、`429`、`401`、`403`、`404`、超时和缺失端点(`501`)故障转移;其他 `4xx` 不会。374网关按顺序尝试上游。`5xx`、`429`、`401`、`403`、`404`、超时和缺失端点(`501`)故障转移;其他 `4xx` 不会。

369 375 

370`429` 是每上游容量,因此预配吞吐量 (PT) 耗尽故障转移到按需。`404` 是每上游模型可用性,因此未启用模型的上游不会阻止服务它的后续上游。无法解析请求的模型的上游被跳过,无需网络往返。376`429` 是每上游容量,因此预配吞吐量 (PT) 耗尽故障转移到按需。如果你在上游上设置 [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run),对携带开发者电子邮件的请求的 `429` 是每用户拒绝而不是故障转移。

377 

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

371 379 

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

373 381 


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

474 482 

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

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

477 485 

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

479pricing:487pricing:


488```496```

489 497 

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

491| ------------ | -- | ------------------------------------------------------------------------------------------- |499| ------------ | -- | ---------------------------------------------------------------------------------------------------------- |

492| `multiplier` | 否 | 默认 `1`。计量器将每个计量金额乘以此值,无论是列表价格还是覆盖,因此 `0.85` 按价格的 85% 计费。必须大于 0 且最多为 1。 |500| `multiplier` | 否 | 默认 `1`。计量器将每个计量金额乘以此值,无论是列表价格还是覆盖,因此 `0.85` 按价格的 85% 计费。必须大于 0 且最多为 1。 |

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

494 502 

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

496 504 


502 510 

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

504 512 

513<h4 id="send-the-rates-to-signed-in-clients">

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

515</h4>

516 

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

518 

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

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

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

522 

505<h3 id="models">523<h3 id="models">

506 `models`524 `models`

507</h3>525</h3>


696* 模型列表,来自 `availableModels`714* 模型列表,来自 `availableModels`

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

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

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

700 718 

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

702 720 


754 `telemetry`772 `telemetry`

755</h3>773</h3>

756 774 

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

758 776 

759CLI 使用从网关发出的 JWT 读取的已认证用户的身份戳记每个导出:`user.id`、`user.email` 和 `user.groups` 属性。每开发者成本和使用归因因此在没有开发者端配置的情况下工作。777CLI 使用从网关发出的 JWT 读取的已认证用户的身份戳记每个导出:`user.id`、`user.email` 和 `user.groups` 属性。每开发者成本和使用归因因此在没有开发者端配置的情况下工作。

760 778 

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

780 

781像来自 Claude Code 的所有 OpenTelemetry 数据一样,这些属性仅去往你的组织配置的目标,从不去往 Anthropic。

782 

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

784 

785你需要网关服务器上的 Claude Code v2.1.265 或更高版本用于 Desktop 和 Cowork 遥测上的 `user.email` 和 `user.groups`,以及每个开发者机器上的 Claude Desktop 1.24012 或更高版本用于 `user.groups`。

786 

761```yaml theme={null}787```yaml theme={null}

762telemetry:788telemetry:

763 forward_to:789 forward_to:


789 815 

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

791 817 

792遥测在 CLI 中默认关闭。将 `telemetry.forward_to` 与 `listen.public_url` 一起配置会打开它。网关通过 `/managed/settings` 推送六个环境变量到每个连接的客户端:818遥测在 CLI 中默认关闭。当你同时设置 `telemetry.forward_to` 和 `listen.public_url` 时,网关通过 `/managed/settings` 为连接的客户端打开它,推送六个环境变量:

793 819 

794* `CLAUDE_CODE_ENABLE_TELEMETRY=1`820* `CLAUDE_CODE_ENABLE_TELEMETRY=1`

795* `OTEL_METRICS_EXPORTER=otlp`821* `OTEL_METRICS_EXPORTER`、`OTEL_LOGS_EXPORTER` 和 `OTEL_TRACES_EXPORTER`,如果至少一个 `forward_to` 目标启用该信号,每个设置为 `otlp`,否则设置为 `none`

796* `OTEL_LOGS_EXPORTER=otlp`

797* `OTEL_TRACES_EXPORTER=otlp`

798* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`822* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`

799* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`823* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`

800 824 

801推送的端点从公共 URL 构建,因此指标和日志不需要来自开发者或策略的 OTEL 配置。推送的配置在托管层应用,覆盖开发者在本地设置的 `OTEL_*` 变量。无论网关是否推送这些变量,通过 `/login` 登录的 CLI 启用了 OTLP/HTTP 导出会将其导出发送到网关而不是本地配置的端点,没有信号的 `forward_to` 目标网关接受并丢弃它;如果你已经直接收集 Claude Code 遥测,添加你的收集器作为 `forward_to` 目标。825在网关服务器上的 Claude Code v2.1.265 之前,网关将所有三个导出器选择器推送为 `otlp`,包括对于没有目标选择加入的信号。

826 

827推送的端点从公共 URL 构建,因此指标和日志不需要来自开发者或策略的 OTEL 配置。

828 

829通过 `/login` 登录的开发者无法使用自己的 OTEL 配置重定向导出:

830 

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

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

833 

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

835 

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

802 837 

803[跟踪](/docs/zh-CN/monitoring-usage#traces-beta)另外需要每个客户端上的 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`。网关不推送该变量,因此通过托管策略的 `env` 块设置它。它不在 Claude Code 应用而不需要开发者批准的变量中,因此通过策略交付它由推送的 OTLP 端点已经触发的相同[安全批准对话](#managed)覆盖。838仅在你想要跟踪的组的策略中将其设置为 `1`。不设置它的策略从你的 `match: {}` 捕获所有策略继承值,如果该策略设置一个,根据[合并规则](#managed)。要防止组的客户端发送跟踪,即使开发者在本地设置变量,在该组的策略中将其设置为 `0`。

804 839 

805protobuf 和 JSON OTLP 编码都被中继,任何 OpenTelemetry 兼容的后端都可以作为目标。840protobuf 和 JSON OTLP 编码都被中继,任何 OpenTelemetry 兼容的后端都可以作为目标。

806 841 

842<h4 id="export-directly-to-your-collector">

843 直接导出到你的收集器

844</h4>

845 

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

847 

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

849 

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

851 

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

853 

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

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

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

857* URL 不是网关自己的主机。寻址到网关的端点保持中继路径和其会话令牌。

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

859 

860你命名的端点仅改变导出去往何处。你仍然使用 `OTEL_*_EXPORTER` 选择器选择哪些信号导出。

861 

862端点单独不打开导出,因此也设置做的变量,除非网关已经推送它们:

863 

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

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

866 

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

868 

869<h4 id="when-a-destination-fails">

870 当目标失败时

871</h4>

872 

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

874 

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

876 

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

878 

807<h3 id="http-tuning">879<h3 id="http-tuning">

808 HTTP 调整880 HTTP 调整

809</h3>881</h3>


984 1056 

985`parentSettingsBehavior: "merge"` 保持 Claude Desktop 向其嵌入式 Claude Code 会话传递出站允许列表的功能;[向 Claude Desktop 会话传递策略](/docs/zh-CN/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions)解释了该机制以及选择加入必须位于的位置。1057`parentSettingsBehavior: "merge"` 保持 Claude Desktop 向其嵌入式 Claude Code 会话传递出站允许列表的功能;[向 Claude Desktop 会话传递策略](/docs/zh-CN/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions)解释了该机制以及选择加入必须位于的位置。

986 1058 

987将 `managed-settings.json` 文件部署到每个设备,通常通过你的 MDM 平台。文件路径因平台而异:1059将 `managed-settings.json` 文件部署到每个设备,通常通过你的 MDM 平台。文件路径因平台而异。请参阅[每个机制存储策略的位置](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)。

988 

989| 平台 | 路径 |

990| ----------- | --------------------------------------------------------------------------------------------------- |

991| macOS | `/Library/Application Support/ClaudeCode/managed-settings.json`,或 `com.anthropic.claudecode` 托管首选项域 |

992| Linux 和 WSL | `/etc/claude-code/managed-settings.json` |

993| Windows | `C:\Program Files\ClaudeCode\managed-settings.json`,或通过 HKLM 注册表的组策略 |

994 1060 

995默认情况下,Windows 上的注册表策略或 macOS 上的托管首选项 plist 会替换 `managed-settings.json` 文件而不是与其合并,除了[上面的例外密钥和跨源检查](#precedence-with-other-managed-sources)。此代码片段中的所有三个密钥都遵循最高优先级源规则,因此通过组策略或配置文件传递策略的团队必须改为将所有三个密钥放在该机制中。1061默认情况下,Windows 上的注册表策略或 macOS 上的托管首选项 plist 会替换 `managed-settings.json` 文件而不是与其合并,除了[上面的例外密钥和跨源检查](#precedence-with-other-managed-sources)。此代码片段中的所有三个密钥都遵循最高优先级源规则,因此通过组策略或配置文件传递策略的团队必须改为将所有三个密钥放在该机制中。

996 1062 

Details

58</Note>58</Note>

59 59 

60<h2 id="move-tasks-between-web-and-terminal">60<h2 id="move-tasks-between-web-and-terminal">

61 在网络和终端之间移动任务61 在网页和终端之间移动任务

62</h2>62</h2>

63 63 

64这些工作流需要[Claude Code CLI](/docs/zh-CN/quickstart)登录到相同的 claude.ai 账户。你可以从终端启动新的云会话,或将云会话拉入终端以在本地继续。云会话即使在关闭笔记本电脑后也会持续,你可以从任何地方(包括 Claude 移动应用)监控它们。64这些工作流需要 [Claude Code CLI](/docs/zh-CN/quickstart) 登录到同一个 claude.ai 账户。您可以从终端启动新的云会话,或将云会话拉入终端以继续本地工作。云会话即使在您关闭笔记本电脑后也会持续存在,您可以从任何地方(包括 Claude 移动应用)监控它们。

65 65 

66<Note>66<Note>

67 从 CLI,会话切换是单向的:你可以使用 `--teleport` 将云会话拉入终端,但不能将现有的终端会话推送到网络。带有任务描述的 `--cloud` 标志为你的当前存储库创建一个新的云会话;带有 `-p` 和会话 ID 或 claude.ai/code URL 时,它改为[将消息排队到该现有会话](/docs/zh-CN/claude-code-on-the-web#send-follow-ups-from-the-cli)。[Desktop 应用](/docs/zh-CN/desktop#continue-in-another-surface)提供了一个"在...中继续"菜单,可以将本地会话发送到网络。67 从 CLI 来看,会话切换是单向的:您可以使用 `--teleport` 将云会话拉入终端,但无法将现有的终端会话推送到网页。带有任务描述的 `--cloud` 标志为您当前的存储库创建新的云会话;带有 `-p` 和会话 ID 或 claude.ai/code URL 时,它会改为 [将消息排队到该现有会话](/docs/zh-CN/claude-code-on-the-web#send-follow-ups-from-the-cli)。[Desktop 应用](/docs/zh-CN/desktop#continue-in-another-surface) 提供了一个"继续在"菜单,可以将本地会话发送到网页。

68</Note>68</Note>

69 69 

70<h3 id="from-terminal-to-web">70<h3 id="from-terminal-to-web">

71 从终端到网络71 从终端到网页

72</h3>72</h3>

73 73 

74使用 `--cloud` 标志从命令行启动云会话:74使用 `--cloud` 标志从命令行启动云会话:


77claude --cloud "Fix the authentication bug in src/auth/login.ts"77claude --cloud "Fix the authentication bug in src/auth/login.ts"

78```78```

79 79 

80这在 claude.ai 上创建一个新的云会话。云 VM 在你的当前分支处克隆你当前目录的 GitHub 远程,而不是你的本地检出,所以如果你有本地提交,请先推送。有关 Claude Code 上传本地存储库而不是克隆的情况,请参阅[发送没有 GitHub 的本地存储库](#send-local-repositories-without-github)。80这会在 claude.ai 上创建新的云会话。云 VM 会在您当前分支克隆您当前目录的 GitHub 远程,而不是您的本地检出,因此如果您有本地提交,请先推送。有关 Claude Code 上传本地存储库而不是克隆的情况,请参阅 [发送没有 GitHub 的本地存储库](#send-local-repositories-without-github)。

81 81 

82`--cloud` 一次只能处理单个存储库。任务在云中运行,而你继续在本地工作。较旧的 `--remote` 拼写仍然作为 `--cloud` 的已弃用别名工作。82`--cloud` 一次只能与单个存储库配合使用。任务在云中运行,而您继续在本地工作。较旧的 `--remote` 拼写仍然可以作为 `--cloud` 的已弃用别名使用。

83 83 

84当云容器启动时,CLI 显示设置步骤的实时清单,例如克隆存储库和运行你的[设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)。它排队你在配置期间输入的消息,并在会话准备好后发送它们。84当云容器启动时,CLI 显示设置步骤的实时清单,例如克隆存储库和运行您的 [设置脚本](/docs/zh-CN/cloud-environments#setup-scripts)。它会将您在配置期间键入的消息排队,并在会话准备好后发送它们。

85 85 

86<Note>86<Note>

87 `--cloud` 创建云会话。`--remote-control` 无关:它公开本地 CLI 会话以从网络进行监控。请参阅[Remote Control](/docs/zh-CN/remote-control)。87 `--cloud` 创建云会话。`--remote-control` 无关:它公开本地 CLI 会话以便从网页进行监控。请参阅 [Remote Control](/docs/zh-CN/remote-control)。

88</Note>88</Note>

89 89 

90在 Claude Code CLI 中使用 `/tasks` 检查进度,或在 claude.ai 或 Claude 移动应用上打开会话以直接交互。从那里你可以引导 Claude、提供反馈或回答问题,就像任何其他对话一样。90在 claude.ai 或 Claude 移动应用上打开会话以检查进度或直接交互。从那里您可以引导 Claude、提供反馈或像在任何其他对话中一样回答问题。

91 91 

92如果 Claude 提出问题且会话处于空闲状态,你仍然可以在返回时回答,直到[环境过期](#environment-expired),会话从你的答案继续。92如果 Claude 提出问题且会话处于空闲状态,您仍然可以在返回时回答,直到 [环境过期](#environment-expired),会话会从您的答案继续。

93 93 

94<h4 id="tips-for-cloud-tasks">94<h4 id="tips-for-cloud-tasks">

95 云任务的提示95 云任务提示

96</h4>96</h4>

97 97 

98**在本地规划,远程执行**:对于复杂的任务,在 plan mode 中启动 Claude 以协作制定方法,然后将工作发送到云:98**在本地规划,远程执行**:对于复杂任务,启动 Claude 处于规划模式以协作制定方法,然后将工作发送到云:

99 99 

100```bash theme={null}100```bash theme={null}

101claude --permission-mode plan101claude --permission-mode plan

102```102```

103 103 

104在 plan mode 中,Claude 读取文件、运行命令来探索并提出计划,而不编辑源代码。一旦你满意,将计划保存到存储库、提交和推送,以便云 VM 可以克隆它。然后为自主执行启动云会话:104在规划模式下,Claude 读取文件、运行命令进行探索,并提出计划而不编辑源代码。一旦您满意,将计划保存到存储库、提交并推送,以便云 VM 可以克隆它。然后启动云会话以进行自主执行:

105 105 

106```bash theme={null}106```bash theme={null}

107claude --cloud "Execute the migration plan in docs/migration-plan.md"107claude --cloud "Execute the migration plan in docs/migration-plan.md"

108```108```

109 109 

110**并行运行任务**:每个 `--cloud` 命令创建自己的云会话,独立运行。你可以启动多个任务,它们都将在单独的会话中同时运行:110**并行运行任务**:每个 `--cloud` 命令创建自己的云会话,独立运行。您可以启动多个任务,它们都会在单独的会话中同时运行:

111 111 

112```bash theme={null}112```bash theme={null}

113claude --cloud "Fix the flaky test in auth.spec.ts"113claude --cloud "Fix the flaky test in auth.spec.ts"


115claude --cloud "Refactor the logger to use structured output"115claude --cloud "Refactor the logger to use structured output"

116```116```

117 117 

118使用 Claude Code CLI 中的 `/tasks` 监控所有会话。当会话完成时,你可以从网络界面创建 PR 或[teleport](#from-web-to-terminal) 会话到终端以继续工作。118当会话完成时,您可以从网页界面创建 PR,或 [teleport](#from-web-to-terminal) 会话到您的终端以继续工作。

119 119 

120<h4 id="send-local-repositories-without-github">120<h4 id="send-local-repositories-without-github">

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

122</h4>122</h4>

123 123 

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

125 125 

126在 macOS、Linux 和 WSL 上,Claude Code 会将名称类似于凭证或密钥的文件的未提交更改排除在上传之外,并列出它排除的文件的名称。这涵盖 `.env` 文件、Terraform `*.tfvars` 文件和密钥文件,如 `id_rsa` 和 `*.pem`。会话以每个的已提交版本开始,或如果没有提交则没有文件。在链接的 worktree、submodule 或类似布局中,Claude Code 将这些更改与其余部分一起上传,并列出它上传的文件的名称。126在 macOS、Linux 和 WSL 上,Claude Code 将未提交的更改排除在上传之外,这些更改涉及名称类似于凭据或密钥的文件,并命名它排除的文件。这涵盖 `.env` 文件、Terraform `*.tfvars` 文件和密钥文件,例如 `id_rsa` 和 `*.pem`。会话以每个文件的已提交版本启动,或如果未提交任何内容,则不包含该文件。在链接的 worktree、子模块或类似布局中,Claude Code 会与其余部分一起上传这些更改并命名它上传的文件。

127 127 

128要即使在 Claude Code 会克隆远程时也强制上传捆绑,请设置 `CCR_FORCE_BUNDLE=1`:128要在 Claude Code 会克隆远程时上传捆绑包,请设置 `CCR_FORCE_BUNDLE=1`:

129 129 

130```bash theme={null}130```bash theme={null}

131CCR_FORCE_BUNDLE=1 claude --cloud "Run the test suite and fix any failures"131CCR_FORCE_BUNDLE=1 claude --cloud "Run the test suite and fix any failures"


134捆绑的存储库必须满足这些限制:134捆绑的存储库必须满足这些限制:

135 135 

136* 目录必须是具有至少一个提交的 git 存储库136* 目录必须是具有至少一个提交的 git 存储库

137* 捆绑的存储库必须在 100 MB 以下。较大的存储库回退到仅捆绑当前分支,然后回退到工作树的单个压缩快照,仅在快照仍然太大时失败137* 捆绑的存储库必须小于 100 MB。较大的存储库会回退到仅捆绑当前分支,然后回退到工作树的单个压缩快照,如果快照仍然太大则失败

138* 未跟踪的文件不包括;在你想要云会话看到的文件上运行 `git add`138* 未跟踪的文件不包括在内;对您希望云会话看到的文件运行 `git add`

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

140 140 

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

142 从 CLI 发送后续消息142 从 CLI 发送后续消息

143</h3>143</h3>

144 144 

145一旦云会话运行,无论它在哪里执行,从任何你使用 `claude auth login` 登录的机器上的 `claude` CLI 向它发送后续消息。CLI 使用你的 Anthropic 账户凭证进行身份验证,不发送本地会话状态,所以命令不需要从启动会话的机器运行,在每个 shell 中都是相同的,包括 PowerShell。145一旦云会话运行,无论它在哪里执行,都可以从任何您使用 `claude auth login` 登录的机器上的 `claude` CLI 向它发送后续消息。CLI 使用您的 Anthropic 账户凭据进行身份验证,不发送任何本地会话状态,因此该命令不需要从启动会话的机器运行,并且在每个 shell 中都是相同的,包括 PowerShell。

146 146 

147该命令发布一条消息并退出:147该命令发布一条消息并退出:

148 148 


150claude -p "your message" --cloud <session-id>150claude -p "your message" --cloud <session-id>

151```151```

152 152 

153CLI 将消息排队到会话中并退出,不等待回复。使用它来引导长时间运行的会话、在当前步骤仍在完成时排队下一步,或从[CI 脚本](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop)发送后续消息。你也可以在 stdin 上管道消息,而不是作为参数传递:`echo "your message" | claude -p --cloud <session-id>`。153CLI 将消息排队到会话中并退出,无需等待回复。使用它来引导长时间运行的会话、在当前步骤仍在完成时排队下一步,或从 [CI 脚本](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop) 发送后续消息。您也可以在 stdin 上管道消息,而不是将其作为参数传递:`echo "your message" | claude -p --cloud <session-id>`。

154 154 

155对于 `<session-id>`,传递裸 ID,如 `session_...` 或 `cse_...`,或会话的 `claude.ai/code/<id>` URL,带或不带方案或查询字符串。在 claude.ai/code 的会话列表中找到 ID。155对于 `<session-id>`,传递裸 ID,例如 `session_...` 或 `cse_...`,或会话的 `claude.ai/code/<id>` URL,带或不带方案或查询字符串。在 claude.ai/code 的会话列表中找到 ID。

156 156 

157<Note>157<Note>

158 `--cloud` 需要 Anthropic 账户。当 Claude Code 配置为 Amazon Bedrock、Google Cloud 的 Agent Platform 或其他第三方提供商时,它不可用。仅通过 `ANTHROPIC_BASE_URL` 配置的[LLM gateway](/docs/zh-CN/llm-gateway)不算作第三方提供商进行此检查,但你仍然需要使用 `claude auth login` 登录。你的组织的 `allow_remote_sessions` 策略也必须启用。所有者可以在 claude.ai/admin-settings/claude-code 处的 Claude Code 管理设置中打开它。158 `--cloud` 需要 Anthropic 账户。当 Claude Code 为 Amazon Bedrock、Google Cloud 的 Agent Platform 或其他第三方提供商配置时,它不可用。仅通过 `ANTHROPIC_BASE_URL` 配置的 [LLM 网关](/docs/zh-CN/llm-gateway) 不算作此检查的第三方提供商,但您仍需要使用 `claude auth login` 登录。您组织的 `allow_remote_sessions` 策略也必须启用。所有者可以在 claude.ai/admin-settings/claude-code 的 Claude Code 管理设置中打开它。

159</Note>159</Note>

160 160 

161<h4 id="output-and-errors">161<h4 id="output-and-errors">

162 输出和错误162 输出和错误

163</h4>163</h4>

164 164 

165成功时,命令打印会话 ID 和查看会话的链接:165成功时,该命令打印会话 ID 和查看会话的链接:

166 166 

167```167```

168Sent to cloud session.168Sent to cloud session.


170View: https://claude.ai/code/session_01DiUkqY2kzbUbDmW1w96rfi?from=cli&m=0170View: https://claude.ai/code/session_01DiUkqY2kzbUbDmW1w96rfi?from=cli&m=0

171```171```

172 172 

173传递 `--output-format json` 以获得机器可读的结果:成功时为 `{ok, session_id, url}`,或发送失败时为 `{ok: false, session_id, error}`,例如当会话丢失或已归档时。配置错误,如不支持的提供商或禁用的组织策略,打印到 stderr 而不是 JSON。`--output-format stream-json` 不支持 `--cloud <session-id>`。173传递 `--output-format json` 以获得机器可读的结果:成功时为 `{ok, session_id, url}`,或发送失败时为 `{ok: false, session_id, error}`,例如当会话缺失或已存档时。配置错误(例如不支持的提供商或禁用的组织策略)打印到 stderr,不带 JSON。`--output-format stream-json` 不支持 `--cloud <session-id>`。

174 174 

175CLI 使用 `Error: ` 前缀错误。失败的交付被包装为 `failed to send message to cloud session <id>: <reason>`。175CLI 在错误前加上 `Error: ` 前缀。失败的传递被包装为 `failed to send message to cloud session <id>: <reason>`。

176 176 

177| 消息 | 含义 |177| 消息 | 含义 |

178| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |178| --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

179| `Cloud sessions aren't available with <provider>. They run on Anthropic's infrastructure and require an Anthropic account.` | Claude Code 配置为第三方提供商。消息使用你的配置使用的标签命名提供商,如 `Amazon Bedrock` 或 `Google Vertex AI`。删除该提供商的配置,例如通过取消设置 `CLAUDE_CODE_USE_BEDROCK`,并使用 Anthropic 账户登录(`claude auth login`)。 |179| `Cloud sessions aren't available with <provider>. They run on Anthropic's infrastructure and require an Anthropic account.` | Claude Code 为第三方提供商配置。该消息使用您的配置使用的标签命名提供商,例如 `Amazon Bedrock` 或 `Google Vertex AI`。删除该提供商的配置,例如通过取消设置 `CLAUDE_CODE_USE_BEDROCK`,并使用 Anthropic 账户登录(`claude auth login`)。 |

180| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | `allow_remote_sessions` 组织策略已关闭。 |180| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | `allow_remote_sessions` 组织策略已关闭。 |

181| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code 无法获取你的组织的策略,所以它拒绝发送而不是假设云会话被允许。检查你的网络连接并重试。 |181| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code 无法获取您的组织策略,因此它拒绝发送而不是假设云会话被允许。检查您的网络连接并重试。 |

182| `Attaching to an existing cloud session is not enabled for your account.` | 你运行了 `--cloud <session-id>` 而没有 `-p`。使用 `claude -p "your message" --cloud <session-id>` 发送消息。 |182| `Attaching to an existing cloud session is not enabled for your account.` | 您运行了 `--cloud <session-id>` 而没有 `-p`。使用 `claude -p "your message" --cloud <session-id>` 发送消息。 |

183| `Session not found: <id>` | ID 或 URL 与你可以访问的会话不匹配。根据会话的 claude.ai/code URL 检查它。 |183| `Session not found: <id>` | ID 或 URL 与您可以访问的会话不匹配。根据会话的 claude.ai/code URL 检查它。 |

184| `cloud session <id> is archived and cannot accept new messages` | 会话已被归档。改为启动新会话。 |184| `cloud session <id> is archived and cannot accept new messages` | 会话已被存档。改为启动新会话。 |

185 185 

186<h3 id="from-web-to-terminal">186<h3 id="from-web-to-terminal">

187 从网络到终端187 从网页到终端

188</h3>188</h3>

189 189 

190使用以下任何方式将云会话拉入终端:190使用以下任何方法将云会话拉入您的终端:

191 191 

192* **使用 `--teleport`**:从命令行,运行 `claude --teleport` 以获得交互式会话选择器,或 `claude --teleport <session-id>` 以直接恢复特定会话。如果你有未提交的更改,系统会提示你先隐藏它们。192* **使用 `--teleport`**:从命令行运行 `claude --teleport` 以获得交互式会话选择器,或 `claude --teleport <session-id>` 以直接恢复特定会话。如果您有未提交的更改,系统会提示您先隐藏它们。

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

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

195* **从网络界面**:从会话菜单中选择**在终端中打开**以复制可以粘贴到终端中的命令。195* **从网页界面**:从会话菜单中选择 **Open in > Terminal** 以复制可以粘贴到终端的命令。

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

197 197 

198当你 teleport 一个会话时,Claude 验证你在正确的存储库中,从云会话获取并检出分支,并将完整的对话历史加载到终端中。终端获得会话的自己的副本:那里的新工作保持本地,不会出现在 claude.ai 上的云会话或 Claude 移动应用中。要在 teleport 后继续从你的手机引导,在本地会话中启动[`/remote-control`](/docs/zh-CN/remote-control)。198当您 teleport 会话时,Claude 验证您在正确的存储库中,从云会话获取并检出分支,并将完整的对话历史记录加载到您的终端。终端获得会话的自己的副本:那里的新工作保持本地,不会出现在 claude.ai 上的云会话或 Claude 移动应用中。在 teleport 后继续从您的手机引导,在本地会话中启动 [`/remote-control`](/docs/zh-CN/remote-control)。

199 199 

200`--teleport` 不同于 `--resume`。`--resume` 从此机器的本地历史重新打开对话,不列出云会话;`--teleport` 拉取云会话及其分支。200`--teleport` 与 `--resume` 不同。`--resume` 从此机器的本地历史记录重新打开对话,不列出云会话;`--teleport` 拉取云会话及其分支。

201 201 

202<h4 id="teleport-requirements">202<h4 id="teleport-requirements">

203 Teleport 要求203 Teleport 要求

204</h4>204</h4>

205 205 

206Teleport 在恢复会话之前检查这些要求。如果任何要求未满足,你会看到错误或被提示解决问题。206Teleport 在恢复会话前检查这些要求。如果任何要求未满足,您会看到错误或被提示解决问题。

207 207 

208| 要求 | 详情 |208| 要求 | 详情 |

209| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |209| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

210| 干净的 git 状态 | 你的工作目录必须没有未提交的更改。Teleport 会在需要时提示你隐藏更改。 |210| 干净的 git 状态 | 您的工作目录必须没有未提交的更改。如果需要,Teleport 会提示您隐藏更改。 |

211| 正确的存储库 | 你必须从同一存储库的检出运行 `--teleport`,而不是从分叉运行。如果你从不同存储库的检出运行它,Claude Code 会显示一个错误,命名会话的存储库和你的检出的。如果 Claude Code 无法将你的远程解析为主机名,例如 SSH 主机别名如 `git@work:owner/repo.git`,它会要求你确认,并在远程的所有者和存储库名称与会话的存储库匹配时接受检出。 |211| 正确的存储库 | 您必须从同一存储库的检出运行 `--teleport`,而不是 fork。如果您从不同存储库的检出运行它,Claude Code 会显示一个错误,命名会话的存储库和您的检出的存储库。在 v2.1.219 之前,错误没有命名您的检出的存储库。如果 Claude Code 无法将您的远程解析为主机名,例如 SSH 主机别名如 `git@work:owner/repo.git`,它会要求您确认,并在远程的所有者和存储库名称与会话的存储库匹配时接受检出。 |

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

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

214 214 

215<h4 id="teleport-is-unavailable">215<h4 id="teleport-is-unavailable">

216 `--teleport` 不可用216 `--teleport` 不可用

217</h4>217</h4>

218 218 

219Teleport 需要 claude.ai 订阅身份验证。如果你通过 API 密钥进行身份验证,运行 `/login` 以改为使用你的 claude.ai 账户登录。如果错误命名你的提供商,云会话不通过第三方提供商可用;请参阅[错误表](#output-and-errors)。如果你已通过 claude.ai 登录且 `--teleport` 仍不可用,你的组织可能已禁用云会话。219Teleport 需要 claude.ai 订阅身份验证。如果您通过 API 密钥进行身份验证,请运行 `/login` 以改为使用您的 claude.ai 账户登录。如果错误命名您的提供商,云会话不可通过第三方提供商获得;请参阅 [错误表](#output-and-errors)。如果您已通过 claude.ai 登录且 `--teleport` 仍不可用,您的组织可能已禁用云会话。

220 220 

221<h2 id="work-with-sessions">221<h2 id="work-with-sessions">

222 处理会话222 处理会话

Details

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

1452 1452 

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

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

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

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

1457| 已安装的 plugins | `~/.claude/plugins` | 克隆的市场、已安装的 plugin 版本和每个 plugin 的数据,由 `claude plugin` 命令管理。对于从市场[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)以链接模式安装的 plugin,Claude Code 在此处存储链接而不是副本,plugin 的文件保留在命令打印的目录中。请参阅 [plugin 缓存](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)了解孤立版本如何被清理。 |1457| 已安装的 plugins | `~/.claude/plugins` | 克隆的市场、已安装的 plugin 版本和每个 plugin 的数据,由 `claude plugin` 命令管理。对于从市场[`command` 源](/docs/zh-CN/plugin-marketplaces#command-sources)以链接模式安装的 plugin,Claude Code 在此处存储链接而不是副本,plugin 的文件保留在命令打印的目录中。`command` 源需要 Claude Code v2.1.229 或更高版本。请参阅 [plugin 缓存](/docs/zh-CN/plugins-reference#plugin-caching-and-file-resolution)了解孤立版本如何被清理。 |

1458 1458 

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

1460 1460 


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

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

1561 1561 

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

1563 1563 

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

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

Details

540<AccordionGroup>540<AccordionGroup>

541 <Accordion title="Anthropic 服务">541 <Accordion title="Anthropic 服务">

542 * api.anthropic.com542 * api.anthropic.com

543 * statsig.anthropic.com

544 * docs.claude.com543 * docs.claude.com

545 * platform.claude.com544 * platform.claude.com

546 * code.claude.com545 * code.claude.com


612 * [www.java.net](http://www.java.net)611 * [www.java.net](http://www.java.net)

613 * download.oracle.com612 * download.oracle.com

614 * yum.oracle.com613 * yum.oracle.com

614 * \*.r2.cloudflarestorage.com

615 </Accordion>615 </Accordion>

616 616 

617 <Accordion title="JavaScript 和 Node 包管理器">617 <Accordion title="JavaScript 和 Node 包管理器">


622 * npmjs.org622 * npmjs.org

623 * yarnpkg.com623 * yarnpkg.com

624 * registry.yarnpkg.com624 * registry.yarnpkg.com

625 * jsr.io

626 * npm.jsr.io

625 </Accordion>627 </Accordion>

626 628 

627 <Accordion title="Python 包管理器">629 <Accordion title="Python 包管理器">


676 * central.maven.org678 * central.maven.org

677 * repo1.maven.org679 * repo1.maven.org

678 * repo.maven.apache.org680 * repo.maven.apache.org

681 * maven.google.com

679 * jcenter.bintray.com682 * jcenter.bintray.com

680 * gradle.org683 * gradle.org

681 * [www.gradle.org](http://www.gradle.org)684 * [www.gradle.org](http://www.gradle.org)

682 * services.gradle.org685 * services.gradle.org

683 * plugins.gradle.org686 * plugins.gradle.org

687 * plugins-artifacts.gradle.org

684 * kotlinlang.org688 * kotlinlang.org

685 * [www.kotlinlang.org](http://www.kotlinlang.org)689 * [www.kotlinlang.org](http://www.kotlinlang.org)

686 * spring.io690 * spring.io


758 </Accordion>762 </Accordion>

759 763 

760 <Accordion title="云服务和监控">764 <Accordion title="云服务和监控">

761 * statsig.com

762 * [www.statsig.com](http://www.statsig.com)

763 * api.statsig.com

764 * sentry.io

765 * \*.sentry.io

766 * downloads.sentry-cdn.com

767 * http-intake.logs.datadoghq.com765 * http-intake.logs.datadoghq.com

768 * browser-intake-us5-datadoghq.com

769 * \*.datadoghq.com766 * \*.datadoghq.com

770 * \*.datadoghq.eu767 * \*.datadoghq.eu

771 * api.honeycomb.io768 * api.honeycomb.io

Details

434| [Routines](/docs/zh-CN/routines) | 云端,默认由 Anthropic 管理 | 即使您的计算机关闭也应该运行的任务。也可以在 API 调用或 GitHub 事件上触发,除了计划。在 [claude.ai/code/routines](https://claude.ai/code/routines) 配置。 |434| [Routines](/docs/zh-CN/routines) | 云端,默认由 Anthropic 管理 | 即使您的计算机关闭也应该运行的任务。也可以在 API 调用或 GitHub 事件上触发,除了计划。在 [claude.ai/code/routines](https://claude.ai/code/routines) 配置。 |

435| [桌面计划任务](/docs/zh-CN/desktop-scheduled-tasks) | 您的机器,通过桌面应用 | 需要直接访问本地文件、工具或未提交更改的任务。 |435| [桌面计划任务](/docs/zh-CN/desktop-scheduled-tasks) | 您的机器,通过桌面应用 | 需要直接访问本地文件、工具或未提交更改的任务。 |

436| [GitHub Actions](/docs/zh-CN/github-actions) | 您的 CI 管道 | 与存储库事件(如打开的 PR)相关的任务,或应该与工作流配置一起存在的 cron 计划。 |436| [GitHub Actions](/docs/zh-CN/github-actions) | 您的 CI 管道 | 与存储库事件(如打开的 PR)相关的任务,或应该与工作流配置一起存在的 cron 计划。 |

437| [`/loop`](/docs/zh-CN/scheduled-tasks) | 当前 CLI 会话 | 会话打开时的快速轮询。任务在您开始新对话时停止;`--resume` 和 `--continue` 恢复未过期的任务。 |437| [`/loop`](/docs/zh-CN/scheduled-tasks) | 当前 CLI 会话 | 会话打开时的快速轮询。`--resume` 和 `--continue` 恢复未过期的固定间隔循环。 |

438 438 

439<Tip>439<Tip>

440 为计划任务编写提示时,明确说明成功是什么样的以及如何处理结果。任务自主运行,所以它不能提出澄清问题。例如:"审查标记为 `needs-review` 的开放 PR,对任何问题留下内联评论,并在 `#eng-reviews` Slack 频道中发布摘要。"440 为计划任务编写提示时,明确说明成功是什么样的以及如何处理结果。任务自主运行,所以它不能提出澄清问题。例如:"审查标记为 `needs-review` 的开放 PR,对任何问题留下内联评论,并在 `#eng-reviews` Slack 频道中发布摘要。"

computer-use.md +2 −2

Details

112 一次一个会话112 一次一个会话

113</h3>113</h3>

114 114 

115一次只有一个会话可以使用您的计算机。会话在其第一个计算机使用操作时获取机器范围的锁,并在会话退出时释放它,而不是在任务完成时释放。第二个会话的计算机使用会失败并显示一条错误消息,说明哪个会话持有该锁。首先退出该会话。115一次只有一个会话可以使用您的计算机。会话在其第一个计算机使用操作时获取锁,并在会话退出时释放它,而不是在任务完成时释放。第二个会话的计算机使用会失败并显示一条错误消息,说明哪个会话持有该锁。首先退出该会话。

116 116 

117<h3 id="apps-are-hidden-while-claude-works">117<h3 id="apps-are-hidden-while-claude-works">

118 Claude 工作时应用被隐藏118 Claude 工作时应用被隐藏


134 随时停止134 随时停止

135</h3>135</h3>

136 136 

137当 Claude 获取锁时,会出现 macOS 通知:"Claude is using your computer · press Esc to stop"。在任何地方按 `Esc` 立即中止当前操作,或在终端中按 `Ctrl+C`。无论哪种方式,Claude 都会停止、取消隐藏您的应用,并将控制权返回给您。会话保持 [computer use 锁](#one-session-at-a-time),直到它退出。137Claude 在每个轮次中首次使用您的计算机时,会出现 macOS 通知:"Claude is using your computer · press Esc to stop"。在任何地方按 `Esc` 立即中止当前操作,或在终端中按 `Ctrl+C`。无论哪种方式,Claude 都会停止、取消隐藏您的应用,并将控制权返回给您。会话保持 [computer use 锁](#one-session-at-a-time),直到它退出。

138 138 

139当 Claude 完成时,会出现第二个通知。139当 Claude 完成时,会出现第二个通知。

140 140 

costs.md +3 −2

Details

71 71 

72按 `d` 或 `w` 在过去 24 小时和过去 7 天之间切换。这些数据是近似值,从此机器上的本地会话历史记录计算,因此不包括来自其他设备或 claude.ai 的使用情况。72按 `d` 或 `w` 在过去 24 小时和过去 7 天之间切换。这些数据是近似值,从此机器上的本地会话历史记录计算,因此不包括来自其他设备或 claude.ai 的使用情况。

73 73 

74在 [VS Code 扩展](/docs/zh-CN/vs-code#check-account-and-usage)中,归属份额和行为标志显示在"账户和使用情况"对话框中,带有"日"和"周"切换,不包括"循环"行。需要 Claude Code v2.1.174 或更高版本。74在 [VS Code 扩展](/docs/zh-CN/vs-code#check-account-and-usage)中,归属份额和行为标志显示在"账户和使用情况"对话框中,带有"日"和"周"切换,不包括"循环"行。

75 75 

76<h4 id="check-your-usage-credits-spend">76<h4 id="check-your-usage-credits-spend">

77 检查您的使用额度支出77 检查您的使用额度支出


222 当开发者询问限制时222 当开发者询问限制时

223</h3>223</h3>

224 224 

225开发者通常会向他们的管理员提出限制问题,因此了解他们遇到的上限会很有帮助。这四种情况意味着不同的事情:225开发者通常会向他们的管理员提出限制问题,因此了解他们遇到的上限会很有帮助。这些情况意味着不同的事情:

226 226 

227* **"您已达到会话限制"或"您已达到每周限制"**:订阅计划上基于座位的使用窗口,在所有模型中共享,因此开发者无法通过使用 `/model` 切换模型来恢复访问权限。该消息显示窗口何时重置。在模型特定的"您已达到 Opus 限制"或"您已达到 Sonnet 限制"消息之后,使用 `/model` 切换到该系列之外的模型确实会让开发者继续工作。请参阅[使用限制错误](/docs/zh-CN/errors#youve-hit-your-session-limit)。开发者在此期间可以做什么:227* **"您已达到会话限制"或"您已达到每周限制"**:订阅计划上基于座位的使用窗口,在所有模型中共享,因此开发者无法通过使用 `/model` 切换模型来恢复访问权限。该消息显示窗口何时重置。在模型特定的"您已达到 Opus 限制"或"您已达到 Sonnet 限制"消息之后,使用 `/model` 切换到该系列之外的模型确实会让开发者继续工作。请参阅[使用限制错误](/docs/zh-CN/errors#youve-hit-your-session-limit)。开发者在此期间可以做什么:

228 * 运行 `/usage-credits` 以请求超过额度的使用情况,如果您已启用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)。228 * 运行 `/usage-credits` 以请求超过额度的使用情况,如果您已启用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)。

229 * 在 Claude Code v2.1.234 或更高版本上,[在重置后自动等待并继续中断的任务](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset);该部分列出了 Claude Code 何时自动启动等待以及开发者何时从 `/rate-limit-options` 中选择它。要控制您的车队 Claude Code 是否自动启动该等待,请在[托管设置](/docs/zh-CN/settings#settings-precedence)中设置 [`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit)。229 * 在 Claude Code v2.1.234 或更高版本上,[在重置后自动等待并继续中断的任务](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset);该部分列出了 Claude Code 何时自动启动等待以及开发者何时从 `/rate-limit-options` 中选择它。要控制您的车队 Claude Code 是否自动启动该等待,请在[托管设置](/docs/zh-CN/settings#settings-precedence)中设置 [`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit)。

230* **"您已达到个人支出限制"、"组织的月度支出限制"或"团队的共享预算"**:开发者的请求将被计费到使用额度,这些额度已达到您设置的支出限制。要让开发者继续,请转到[**管理员设置 > 使用**](https://claude.ai/admin-settings/usage)并增加消息命名的限制。当消息还命名计划重置时间时,开发者可以改为等待直到那时。请参阅[错误参考](/docs/zh-CN/errors#youve-hit-your-monthly-spend-limit)了解每个变体。

230* **来自 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 的支出限制消息**:开发者超过了您在自托管网关上设置的支出上限,网关会阻止他们的请求,直到该期间重置或您提高上限。请参阅[网关支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits)以了解上限、重置计划和开发者看到的消息。231* **来自 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 的支出限制消息**:开发者超过了您在自托管网关上设置的支出上限,网关会阻止他们的请求,直到该期间重置或您提高上限。请参阅[网关支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits)以了解上限、重置计划和开发者看到的消息。

231* **上下文或自动压缩警告**:不是使用限制。对话已接近会话的[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window),这是 Claude Code 总结较早历史以释放空间的阈值。将开发者指向[减少令牌使用](#reduce-token-usage)。232* **上下文或自动压缩警告**:不是使用限制。对话已接近会话的[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window),这是 Claude Code 总结较早历史以释放空间的阈值。将开发者指向[减少令牌使用](#reduce-token-usage)。

232* **API 或云提供商计划上的意外高支出**:通常可以追溯到从未清除的长会话或将 Opus 作为默认模型。要分享的最高影响习惯是在不相关的任务之间清除和将模型与工作相匹配,两者都在[减少令牌使用](#reduce-token-usage)中涵盖。233* **API 或云提供商计划上的意外高支出**:通常可以追溯到从未清除的长会话或将 Opus 作为默认模型。要分享的最高影响习惯是在不相关的任务之间清除和将模型与工作相匹配,两者都在[减少令牌使用](#reduce-token-usage)中涵盖。

Details

65 选择**本地**以在您的机器上运行 Claude,直接使用您的文件。点击**选择文件夹**并选择您的项目目录。65 选择**本地**以在您的机器上运行 Claude,直接使用您的文件。点击**选择文件夹**并选择您的项目目录。

66 66 

67 <Tip>67 <Tip>

68 从一个您熟悉的小项目开始。这是查看 Claude Code 能做什么的最快方式。在 Windows 上,必须安装 [Git](https://git-scm.com/downloads/win) 才能使本地会话正常工作。大多数 Mac 默认包含 Git。68 从一个您熟悉的小项目开始。这是查看 Claude Code 能做什么的最快方式。

69 </Tip>69 </Tip>

70 70 

71 您也可以选择:71 您也可以选择:


86 * `为主函数添加测试`86 * `为主函数添加测试`

87 * `为此代码库创建一个 CLAUDE.md 文件,包含说明`87 * `为此代码库创建一个 CLAUDE.md 文件,包含说明`

88 88 

89 [会话](/docs/zh-CN/desktop#work-in-parallel-with-sessions) 是与 Claude 关于您的代码的对话。每个会话跟踪自己的上下文和更改,因此您可以处理多个任务而不会相互干扰。89 [会话](/docs/zh-CN/desktop#work-in-parallel-with-sessions) 是与 Claude 关于您的代码的对话。每个会话跟踪自己的上下文和更改。

90 </Step>90 </Step>

91 91 

92 <Step title="审查并接受更改">92 <Step title="审查并接受更改">


107 接下来呢?107 接下来呢?

108</h2>108</h2>

109 109 

110你已经完成了第一次编辑。如需了解 Desktop 的完整功能参考,请查看 [使用 Claude Code Desktop](/docs/zh-CN/desktop)。以下是一些可以尝试的后续操作。110您已经进行了第一次编辑。有关 Desktop 可以执行的所有操作的完整参考,请参阅 [使用 Claude Code Desktop](/docs/zh-CN/desktop)。以下是一些可以尝试的操作。

111 111 

112**中断并调整方向。** 你可以随时重定向 Claude。点击停止按钮立即中断,或输入更正内容并按 **Enter** 发送,无需停止正在运行的操作。无论哪种方式,你都不必等待它完成或重新开始。112**中断并调整方向。** 您可以随时重定向 Claude。点击停止按钮立即中断,或输入更正并按 **Enter** 发送,无需停止正在运行的操作。无论哪种方式,您都不必等待它完成或重新开始。

113 113 

114**为 Claude 提供更多上下文。** 在提示框中输入 `@filename` 以将特定文件拉入对话,使用附件按钮附加图像和 PDF,或直接将文件拖放到提示框中。Claude 拥有的上下文越多,结果就越好。请参阅 [添加文件和上下文](/docs/zh-CN/desktop#add-files-and-context-to-prompts)。114**为 Claude 提供更多上下文。** 在提示框中输入 `@filename` 以将特定文件拉入对话,使用附件按钮附加图像和 PDF,或直接将文件拖放到提示框中。Claude 拥有的上下文越多,结果就越好。请参阅 [添加文件和上下文](/docs/zh-CN/desktop#add-files-and-context-to-prompts)。

115 115 

116**使用 skills 处理可重复的任务。** 输入 `/` 或点击 **+** → **Slash commands** 以浏览 [内置命令](/docs/zh-CN/commands)、[自定义 skills](/docs/zh-CN/skills) 和插件 skills。Skills 是可重用的提示,你可以在需要时随时调用,例如代码审查清单或部署步骤。116**使用 skills 处理可重复的任务。** 输入 `/` 或点击 **+** → **Slash commands** 以浏览 [内置命令](/docs/zh-CN/commands)、[自定义 skills](/docs/zh-CN/skills) 和插件 skills。Skills 是可重用的提示,您可以在需要时调用它们,例如代码审查清单或部署步骤。

117 117 

118**在提交前审查更改。** Claude 编辑文件后,会出现 `+12 -1` 指示符。点击它打开 [diff 视图](/docs/zh-CN/desktop#review-changes-with-diff-view),逐个文件审查修改,并对特定行进行评论。Claude 会读取你的评论并进行修订。点击 **Review code** 让 Claude 自己评估 diffs 并留下内联建议。118**在提交前审查更改。** Claude 编辑文件后,会出现 `+12 -1` 指示符。点击它以打开 [diff 视图](/docs/zh-CN/desktop#review-changes-with-diff-view),逐个文件审查修改,并对特定行进行评论。Claude 会读取您的评论并进行修订。点击 **Review code** 让 Claude 自己评估 diffs 并留下内联建议。

119 119 

120**调整你拥有的控制权。** 你的 [permission mode](/docs/zh-CN/desktop#choose-a-permission-mode) 设置了 Claude 在不请求批准的情况下可以做多少事情:120**调整您拥有的控制权。** 您的 [permission mode](/docs/zh-CN/desktop#choose-a-permission-mode) 设置了 Claude 在不请求批准的情况下可以执行的操作:

121 121 

122* **Auto**:分类器在后台审查操作,阻止风险操作而不是询问你。122* **Auto**:分类器在后台审查操作,并阻止风险操作,而不是询问您。

123* **Manual**:Claude 在编辑文件或运行命令前询问。123* **Manual**:Claude 在编辑文件或运行命令前询问。

124* **Accept edits**:Claude 自动接受文件编辑以加快迭代。124* **Accept edits**:Claude 自动接受文件编辑以加快迭代。

125* **Plan**:Claude 提出方法而不编辑任何文件,这在大型重构前很有用。125* **Plan**:Claude 提出一种方法而不编辑任何文件,这在大型重构前很有用。

126 126 

127**添加插件以获得更多功能。** 点击提示框旁的 **+** 按钮并选择 **Plugins** 以浏览和安装 [插件](/docs/zh-CN/desktop#install-plugins),这些插件添加 skills、agents、MCP servers 等。127**添加插件以获得更多功能。** 点击提示框旁边的 **+** 按钮并选择 **Plugins** 以浏览和安装 [plugins](/docs/zh-CN/desktop#install-plugins),这些插件添加 skills、agents、MCP servers 等。

128 128 

129**整理你的工作区。** 将聊天、diff、终端、文件和浏览器窗格拖放到你想要的任何布局中。使用 **Ctrl+\`** 打开终端以在会话旁运行命令,或点击文件路径在文件窗格中打开它。请参阅 [整理你的工作区](/docs/zh-CN/desktop#arrange-your-workspace)。129**整理您的工作区。** 将聊天、diff、终端、文件和浏览器窗格拖动到您想要的任何布局中。使用 **Ctrl+\`** 打开终端以在您的会话旁边运行命令,或点击文件路径以在文件窗格中打开它。请参阅 [整理您的工作区](/docs/zh-CN/desktop#arrange-your-workspace)。

130 130 

131**预览你的应用。** 当你在 desktop 中运行开发服务器时,你的应用会在浏览器窗格中打开,该窗格也可以 [打开外部网站](/docs/zh-CN/desktop#browse-external-sites)。Claude 可以查看正在运行的应用、测试端点、检查日志并对所看到的内容进行迭代。请参阅 [预览你的应用](/docs/zh-CN/desktop#preview-your-app)。131**预览您的应用。** 当您在 desktop 中运行开发服务器时,您的应用会在浏览器窗格中打开,该窗格也可以 [打开外部网站](/docs/zh-CN/desktop#browse-external-sites)。Claude 可以查看正在运行的应用、测试端点、检查日志并对其看到的内容进行迭代。请参阅 [预览您的应用](/docs/zh-CN/desktop#preview-your-app)。

132 132 

133**跟踪你的拉取请求。** 打开 PR 后,Claude Code 会监控 CI 检查结果,并可以在所有检查通过后自动修复失败或合并 PR。请参阅 [监控拉取请求状态](/docs/zh-CN/desktop#monitor-pull-request-status)。133**跟踪您的拉取请求。** 打开 PR 后,Claude Code 会监控 CI 检查结果,并可以自动修复失败,或在所有检查通过后合并 PR。请参阅 [监控拉取请求状态](/docs/zh-CN/desktop#monitor-pull-request-status)。

134 134 

135**将 Claude 放在日程上。** 设置 [scheduled tasks](/docs/zh-CN/desktop-scheduled-tasks) 以定期自动运行 Claude:每天早上进行代码审查、每周进行依赖审计,或从你连接的工具中提取信息的简报。135**将 Claude 放在日程上。** 设置 [scheduled tasks](/docs/zh-CN/desktop-scheduled-tasks) 以定期自动运行 Claude:每天早上进行代码审查、每周进行依赖项审计,或从您连接的工具中提取信息的简报。

136 136 

137**准备好时扩展。** 从侧边栏打开 [parallel sessions](/docs/zh-CN/desktop#work-in-parallel-with-sessions) 以同时处理多个任务,每个任务都在自己的 Git worktree 中,并打开 [tasks pane](/docs/zh-CN/desktop#watch-background-tasks) 以观看会话正在运行的子代理和后台命令。打开 [side chat](/docs/zh-CN/desktop#ask-a-side-question-without-derailing-the-session) 以提出问题而不偏离主线程。将 [long-running work 发送到云](/docs/zh-CN/desktop#run-long-running-tasks-remotely) 以便即使关闭应用也能继续,或 [在 web 或 IDE 中继续会话](/docs/zh-CN/desktop#continue-in-another-surface)(如果任务花费的时间比预期长)。[连接外部工具](/docs/zh-CN/desktop#extend-claude-code)(如 GitHub、Slack 和 Linear)以整合你的工作流。137**准备好时扩展。** 从侧边栏打开 [parallel sessions](/docs/zh-CN/desktop#work-in-parallel-with-sessions) 以同时处理多个任务,可选择每个任务都在其自己的 Git worktree 中,并打开 [tasks pane](/docs/zh-CN/desktop#watch-background-tasks) 以观看会话正在运行的子代理和后台命令。打开 [side chat](/docs/zh-CN/desktop#ask-a-side-question-without-derailing-the-session) 以提出问题而不偏离主线程。将 [long-running work 发送到云](/docs/zh-CN/desktop#run-long-running-tasks-remotely) 以便即使关闭应用也能继续,或 [在 web 或 IDE 中继续会话](/docs/zh-CN/desktop#continue-in-another-surface)(如果任务花费的时间比预期长)。[连接外部工具](/docs/zh-CN/desktop#extend-claude-code)(如 GitHub、Slack 和 Linear)以整合您的工作流。

138 138 

139<h2 id="what’s-next">139<h2 id="what’s-next">

140 接下来140 接下来

env-vars.md +1 −0

Details

475| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |475| `OTEL_LOG_USER_PROMPTS` | 设置为 `1` 以在 OpenTelemetry 跟踪和日志中包含用户提示文本。默认禁用(提示被编辑)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

476| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 以从指标属性中排除帐户 UUID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |476| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 设置为 `false` 以从指标属性中排除帐户 UUID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

477| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 以在指标属性中包含会话入口点(默认值:排除)。在 v2.1.152 中添加。请参阅 [监控](/docs/zh-CN/monitoring-usage) |477| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 设置为 `true` 以在指标属性中包含会话入口点(默认值:排除)。在 v2.1.152 中添加。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

478| `OTEL_METRICS_INCLUDE_REPOSITORY` | 设置为 `true` 以使用 `vcs.*` 属性标记 OpenTelemetry 指标和事件,识别会话的存储库(默认值:排除)。需要 Claude Code v2.1.269 或更高版本。请参阅 [存储库属性](/docs/zh-CN/monitoring-usage#repository-attributes) |

478| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 从 v2.1.161 开始,Claude Code 将 `OTEL_RESOURCE_ATTRIBUTES` 键附加到指标数据点标签。设置为 `false` 以排除它们(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage#multi-team-organization-support) |479| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 从 v2.1.161 开始,Claude Code 将 `OTEL_RESOURCE_ATTRIBUTES` 键附加到指标数据点标签。设置为 `false` 以排除它们(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage#multi-team-organization-support) |

479| `OTEL_METRICS_INCLUDE_SESSION_ID` | 设置为 `false` 以从指标属性中排除会话 ID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |480| `OTEL_METRICS_INCLUDE_SESSION_ID` | 设置为 `false` 以从指标属性中排除会话 ID(默认值:包含)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

480| `OTEL_METRICS_INCLUDE_VERSION` | 设置为 `true` 以在指标属性中包含 Claude Code 版本(默认值:排除)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |481| `OTEL_METRICS_INCLUDE_VERSION` | 设置为 `true` 以在指标属性中包含 Claude Code 版本(默认值:排除)。请参阅 [监控](/docs/zh-CN/monitoring-usage) |

fast-mode.md +1 −1

Details

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

124 124 

125* **仅限 Anthropic API 或订阅**:快速模式可通过 Anthropic 控制台 API 和使用使用额度的 Claude 订阅计划获得。它在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用。控制台组织还必须[为您的组织配置快速模式访问权限](#enable-fast-mode-for-your-organization)。125* **仅限 Anthropic API 或订阅**:快速模式可通过 Anthropic 控制台 API 和使用使用额度的 Claude 订阅计划获得。它在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 AWS 上的 Claude Platform 上不可用。控制台组织还必须[为您的组织配置快速模式访问权限](#enable-fast-mode-for-your-organization)。

126* **为订阅计划启用使用额度**:在 Pro、Max、Team 或 Enterprise 计划上,您的账户必须[启用使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription),这允许在您的计划包含的使用量之外进行计费。在启用之前,`/fast` 显示"Fast mode requires usage credits · /usage-credits to turn them on"。您启用它们的方式取决于您的计划:126* **为订阅计划启用使用额度**:在 Pro、Max、Team 或 Enterprise 计划上,您的账户必须[启用使用额度](/docs/zh-CN/costs#add-usage-credits-to-your-subscription),这允许在您的计划包含的使用量之外进行计费。在启用之前,`/fast` 显示"Fast mode requires usage credits"。您启用它们的方式取决于您的计划:

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

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

129 129 

Details

116claude --cloud "Add retry logic to the payment webhook handler"116claude --cloud "Add retry logic to the payment webhook handler"

117```117```

118 118 

119会话从 GHES 克隆您的存储库,并将更改推送回分支。使用 `/tasks` 或在 [claude.ai/code](https://claude.ai/code) 监控进度。有关完整的云会话工作流(包括差异审查、自动修复和例程),请参阅 [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web)。119会话从 GHES 克隆您的存储库,并将更改推送回分支。在 [claude.ai/code](https://claude.ai/code) 监控进度。有关完整的云会话工作流(包括差异审查、自动修复和例程),请参阅 [网络上的 Claude Code](/docs/zh-CN/claude-code-on-the-web)。

120 120 

121<h3 id="teleport-sessions-to-your-terminal">121<h3 id="teleport-sessions-to-your-terminal">

122 将会话 Teleport 到您的终端122 将会话 Teleport 到您的终端

goal.md +23 −6

Details

22三种方法可以在提示之间保持当前会话运行。根据应该启动下一个回合的内容进行选择:22三种方法可以在提示之间保持当前会话运行。根据应该启动下一个回合的内容进行选择:

23 23 

24| 方法 | 下一个回合何时开始 | 停止条件 |24| 方法 | 下一个回合何时开始 | 停止条件 |

25| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ |25| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------ |

26| `/goal` | 前一个回合完成时,或当后台工作使目标处于等待状态时,[空闲检查](#background-work-defers-evaluation)到期,每个目标在你的提示之间最多三次 | 模型确认条件已满足或判断其不可能,或回合因[你必须修复的错误](#errors-you-have-to-fix-clear-the-goal)而失败,或你运行[`/goal clear`](#clear-a-goal) |26| `/goal` | 前一个回合完成时,或在交互式会话中,[空闲检查](#background-work-defers-evaluation)或[自动重试](#other-errors-retry-or-pause-the-goal)到期时 | 模型确认条件已满足或判断其不可能,或回合因[你必须修复的错误](#errors-you-have-to-fix-clear-the-goal)而失败,或你运行[`/goal clear`](#clear-a-goal) |

27| [`/loop`](/docs/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) | 时间间隔过去时 | 你停止它,或 Claude 决定工作完成 |27| [`/loop`](/docs/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) | 时间间隔过去时 | 你停止它,或 Claude 决定工作完成 |

28| [Stop hook](/docs/zh-CN/hooks-guide#prompt-based-hooks) | 前一个回合完成时 | 你自己的脚本或提示决定 |28| [Stop hook](/docs/zh-CN/hooks-guide#prompt-based-hooks) | 前一个回合完成时 | 你自己的脚本或提示决定 |

29 29 


143 143 

144如果 Claude 持续回答评估器而没有取得进展(连续多个回合没有工具使用),Claude Code 会停止循环,打印警告,并将控制权返回给你,目标仍然设置。评估在你的下一个提示后恢复。[hooks 指南](/docs/zh-CN/hooks-guide#stop-hook-hits-the-block-cap)解释了底层机制。144如果 Claude 持续回答评估器而没有取得进展(连续多个回合没有工具使用),Claude Code 会停止循环,打印警告,并将控制权返回给你,目标仍然设置。评估在你的下一个提示后恢复。[hooks 指南](/docs/zh-CN/hooks-guide#stop-hook-hits-the-block-cap)解释了底层机制。

145 145 

146<h3 id="errors-you-have-to-fix-clear-the-goal">146<h3 id="when-a-turn-fails">

147 你必须修复的错误会清除目标147 当一个回合失败时

148</h3>148</h3>

149 149 

150当一个回合失败时,如果错误是你必须修复的错误,Claude Code 会清除目标。在任何其他错误之后,目标保持设置。

151 

152<h4 id="errors-you-have-to-fix-clear-the-goal">

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

154</h4>

155 

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

151 157 

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


154* 一个[自动压缩](/docs/zh-CN/model-config#set-the-auto-compact-window)无法清除的上下文溢出160* 一个[自动压缩](/docs/zh-CN/model-config#set-the-auto-compact-window)无法清除的上下文溢出

155* 一个不可用的模型161* 一个不可用的模型

156 162 

157在任何其他失败之后,包括速率限制和服务器过载等瞬时错误,Claude Code 会保持目标活跃。163<h4 id="other-errors-retry-or-pause-the-goal">

164 其他错误重试或暂停目标

165</h4>

166 

167在任何其他失败之后,目标保持设置。在 Claude Code v2.1.269 或更高版本的交互式会话中,Claude Code 也会打印一行说明原因,并自动重试或等待你:

168 

169* **重试**:在倾向于自行清除的失败之后,例如服务器过载或连接断开,一个以 `Goal still active` 开头的通知显示下一次尝试之前的等待时间。在三次自动重试之后,目标会暂停。

170* **暂停**:在重试只会重复的失败之后,例如 API 速率限制、claude.ai [使用限制](/docs/zh-CN/errors#youve-hit-your-session-limit)或结束回合的 hook,一个以 `Goal paused` 开头的通知说明原因。如果会话[在使用限制重置时等待自动继续](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset),Claude 会在那时恢复朝着目标的工作。

171 

172随时发送消息以立即开始下一个回合。要关闭自动重试,请将 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-CN/env-vars) 设置为 `0`,这也会关闭[检查](#background-work-defers-evaluation)。

158 173 

159<h3 id="background-work-defers-evaluation">174<h3 id="background-work-defers-evaluation">

160 后台工作延迟评估175 后台工作延迟评估


169 184 

170在 v2.1.239 之前,只有空闲检查以这种方式退避;在回合结束时传递的检查在第一个间隔重复。185在 v2.1.239 之前,只有空闲检查以这种方式退避;在回合结束时传递的检查在第一个间隔重复。

171 186 

172要更改第一个间隔,请设置 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-CN/env-vars)。Claude Code 使用你的值代替 30 分钟间隔,并相应地缩放后续间隔。将其设置为 `0` 以关闭检查。检查需要 Claude Code v2.1.234 或更高版本。187要更改第一个间隔,请设置 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-CN/env-vars)。Claude Code 使用你的值代替 30 分钟间隔,并相应地缩放后续间隔。将其设置为 `0` 以关闭检查和[自动重试](#other-errors-retry-or-pause-the-goal)。

188 

189检查需要 Claude Code v2.1.234 或更高版本。

173 190 

174<h3 id="evaluation-model-and-cost">191<h3 id="evaluation-model-and-cost">

175 评估模型和成本192 评估模型和成本

Details

211 211 

212内置命令也会指导您完成设置:212内置命令也会指导您完成设置:

213 213 

214* `/init` 引导您为项目创建 CLAUDE.md214* `/init` 为您的项目生成一个启动 CLAUDE.md

215* `/doctor` 运行设置检查,诊断安装和配置问题,并可以修复它们215* `/doctor` 运行设置检查,诊断安装和配置问题,并可以修复它们

216 216 

217<h3 id="it’s-a-conversation">217<h3 id="it’s-a-conversation">

jetbrains.md +11 −11

Details

231 安全考虑231 安全考虑

232</h2>232</h2>

233 233 

234当 Claude Code 在启用 [`acceptEdits` 权限模式](/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)的 JetBrains IDE 中运行时,它可能能够修改可由您的 IDE 自动执行的 IDE 配置文件。这可能会增加在 `acceptEdits` 模式下运行 Claude Code 的风险,并允许绕过 Claude Code 对 bash 执行的权限提示。234当 Claude Code 在 JetBrains IDE 中以 [`acceptEdits` 权限模式](/docs/zh-CN/permission-modes#auto-approve-file-edits-with-acceptedits-mode)运行时,它可能能够修改 IDE 配置文件,这些文件可以由您的 IDE 自动执行。这可能会增加在 `acceptEdits` 模式下运行 Claude Code 的风险,并允许绕过 Claude Code 对 bash 执行的权限提示。

235 235 

236在 JetBrains IDE 中运行时,请考虑:236在 JetBrains IDE 中运行时,请考虑:

237 237 

238* 对编辑使用手动模式,因为 `acceptEdits` 和自动模式都会批准工作目录内的编辑,除了[受保护路径](/docs/zh-CN/permission-modes#protected-paths)238* 对编辑使用手动模式,因为 `acceptEdits` 和自动模式都会批准您工作目录内的编辑而不询问,除了在[受保护路径](/docs/zh-CN/permission-modes#protected-paths)中会询问

239* 特别小心确保 Claude 仅与受信任的提示一起使用239* 特别小心确保 Claude 仅与受信任的提示一起使用

240* 了解 Claude Code 有权修改哪些文件240* 了解 Claude Code 有权修改哪些文件

241 241 

242如需 IDE 外的 Claude Code 安装或登录问题,请参阅[故障排除安装和登录](/docs/zh-CN/troubleshoot-install)。242对于 IDE 外的 Claude Code 安装或登录问题,请参阅[排查安装和登录问题](/docs/zh-CN/troubleshoot-install)。

243 243 

244<h3 id="the-built-in-ide-mcp-server">244<h3 id="the-built-in-ide-mcp-server">

245 内置 IDE MCP 服务器245 内置 IDE MCP 服务器

246</h3>246</h3>

247 247 

248当插件处于活动状态时,它运行一个本地 MCP 服务器,CLI 会自动连接到该服务器。这是 CLI 在 IDE 的原生 diff 查看器中打开 diff、读取您当前的 `@`-提及选择内容以及让 Claude 读取检查诊断信息的方式。248当插件处于活动状态时,它运行一个本地 MCP 服务器,CLI 会自动连接到该服务器。这是 CLI 在 IDE 的原生 diff 查看器中打开 diff、读取您当前的 `@`-提及选择以及让 Claude 读取检查诊断的方式。

249 249 

250服务器名为 `ide`,从 `/mcp` 中隐藏,因为没有任何内容需要配置。但是,如果您的组织使用 [`PreToolUse` hook](/docs/zh-CN/hooks#pretooluse) 来允许列表 MCP 工具,您需要知道它的存在。250服务器名为 `ide`,从 `/mcp` 中隐藏,因为没有什么需要配置。但是,如果您的组织使用 [`PreToolUse` hook](/docs/zh-CN/hooks#pretooluse) 来允许列表 MCP 工具,您需要知道它的存在。

251 251 

252**选择和打开文件上下文。** 连接时,CLI 会在您发送的每个提示中包含您当前的编辑器选择和活动文件的路径作为上下文。当发生这种情况时,记录会显示一行 `⧉ Selected N lines from <file>`。要排除敏感文件(如 `.env`),请为其路径添加 [`Read` 拒绝规则](/docs/zh-CN/permissions#read-and-edit)。匹配的拒绝规则可防止该文件的选定文本和打开文件通知到达 Claude。252**选择和打开文件上下文。** 连接时,CLI 会在您发送的每个提示中包含您当前的编辑器选择和活动文件的路径作为上下文。当发生这种情况时,记录会显示一行 `⧉ Selected N lines from <file>`。要排除敏感文件(如 `.env`),请为其路径添加 [`Read` 拒绝规则](/docs/zh-CN/permissions#read-and-edit)。匹配的拒绝规则可防止该文件的选定文本和打开文件通知都到达 Claude。

253 253 

254**传输和身份验证。** 服务器侦听 OS 分配的临时端口,该端口不可配置。传输是未加密的 `ws://`;在环回上,任何可以捕获流量的进程也可以从锁文件中读取令牌,因此 TLS 不会对本地攻击者增加保护。每次 IDE 启动都会生成一个新的随机身份验证令牌,将其写入 `~/.claude/ide/<port>.lock` 处的锁文件,CLI 必须将其作为 `X-Claude-Code-Ide-Authorization` 标头呈现才能连接。如果设置了 `CLAUDE_CONFIG_DIR`,锁文件将改为写入 `$CLAUDE_CONFIG_DIR/ide/`。254**传输和身份验证。** 服务器侦听 OS 分配的临时端口,该端口不可配置。传输是未加密的 `ws://`;在环回上,任何可以捕获流量的进程也可以从锁文件中读取令牌,因此 TLS 不会对本地攻击者增加保护。每次 IDE 启动都会生成一个新的随机身份验证令牌,将其写入 `~/.claude/ide/<port>.lock` 处的锁文件,CLI 必须将其作为 `X-Claude-Code-Ide-Authorization` 标头呈现才能连接。如果设置了 `CLAUDE_CONFIG_DIR`,锁文件将改为写入 `$CLAUDE_CONFIG_DIR/ide/`。

255 255 

256**向模型公开的工具。** 服务器托管多个工具,但只有一个对模型可见。其余的是 CLI 用于自己的 UI 的内部 RPC,例如打开 diff 和读取选择,在工具列表到达 Claude 之前会被过滤掉。256**向模型公开的工具。** 服务器托管多个工具,但只有一个对模型可见。其余的是 CLI 用于自己的 UI 的内部 RPC,例如打开 diff 和读取选择,在工具列表到达 Claude 之前会被过滤掉。

257 257 

258| 工具名称(如 hooks 所见) | 功能 | 只读 |258| 工具名称(如 hooks 所见) | 它的作用 | 只读 |

259| -------------------------- | ---------------------------------------- | -- |259| -------------------------- | --------------------------------------------------------------------------------- | -- |

260| `mcp__ide__getDiagnostics` | 返回 IDE 的检查诊断信息,即编辑器中显示的错误和警告。可选地限定到一个文件。 | 是 |260| `mcp__ide__getDiagnostics` | 返回 IDE 的检查诊断,即编辑器中显示的错误和警告。每次调用涵盖一个文件:Claude 指定的文件,或如果 Claude 未指定文件则为您的活动编辑器中的文件。 | 是 |

261 261 

262JetBrains 插件不向模型公开代码执行工具。262JetBrains 插件不向模型公开代码执行工具。

263 263 

264**侦听接口。** 服务器绑定到的网络接口由**设置 → 工具 → Claude Code \[Beta] → 网络(高级)**下的**接受来自所有网络接口的连接**控制。禁用该设置时,服务器仅侦听 `127.0.0.1`,无法从其他主机访问。启用该设置时,该端口可从您的本地网络访问。该设置存在于 CLI 无法通过环回到达 IDE 的情况,例如具有默认 NAT 网络的 WSL2 或远程 IDE 设置;有关该场景,请参阅 [WSL 配置](#wsl-configuration)。264**侦听接口。** 服务器绑定到哪个网络接口由**设置 → 工具 → Claude Code \[Beta] → 网络(高级)**下的**接受来自所有网络接口的连接**控制。禁用该设置时,服务器仅侦听 `127.0.0.1`,无法从其他主机访问。启用该设置时,该端口可从您的本地网络访问。该设置存在于 CLI 无法通过环回到达 IDE 的情况,例如具有默认 NAT 网络的 WSL2 或远程 IDE 设置;有关该场景,请参阅 [WSL 配置](#wsl-configuration)。

265 265 

266<Warning>266<Warning>

267 启用**接受来自所有网络接口的连接**会使 IDE MCP 端口可从您的本地网络访问。连接仍需要来自锁文件的身份验证令牌,但由于传输是未加密的 `ws://`,当设置打开时,会话流量和该令牌都会以明文形式跨网络传输。仅在环回确实无法工作时才打开它。对于 WSL2,更倾向于[镜像网络](#switch-wsl2-to-mirrored-networking),以便 Windows 环回接口与 Linux VM 共享,套接字可以保持在环回上。267 启用**接受来自所有网络接口的连接**会使 IDE MCP 端口可从您的本地网络访问。连接仍然需要来自锁文件的身份验证令牌,但由于传输是未加密的 `ws://`,当设置打开时,会话流量和该令牌都以明文形式跨网络传输。仅在环回无法工作时才打开它。对于 WSL2,更倾向于[镜像网络](#switch-wsl2-to-mirrored-networking),以便 Windows 环回接口与 Linux VM 共享,套接字可以保持在环回上。

268</Warning>268</Warning>

Details

385 保持 skills 可发现385 保持 skills 可发现

386</h3>386</h3>

387 387 

388随着 skills 分散在许多目录中,Claude 选择的列表可能会增长很大。Claude 通过读取每个发现的 skill 的名称和描述来选择 skill,只有选定的 skill 的完整内容加载到上下文中。本部分涵盖如何保持该列表较小以及编写在缩短时幸存的描述。388随着 skills 分散在许多目录中,Claude 选择的列表可能会增长很大。Claude 通过读取每个发现的 skill 的名称和描述来选择 skill,只有选定的 skill 的完整内容加载到上下文中。本部分涵盖如何保持该列表较小。

389 389 

390哪些 skills 在范围内取决于你从哪里启动 Claude:390哪些 skills 在范围内取决于你从哪里启动 Claude:

391 391 


393* **从存储库根目录**:根 skills,加上来自 Claude 在会话期间接触的每个子目录的 skills,可能累积到数百个393* **从存储库根目录**:根 skills,加上来自 Claude 在会话期间接触的每个子目录的 skills,可能累积到数百个

394* **在使用 [`--add-dir`](#grant-access-across-packages-or-repositories) 添加同级后**:该同级的 skills 也加载。`additionalDirectories` 设置仅授予文件访问权限,不加载 skills394* **在使用 [`--add-dir`](#grant-access-across-packages-or-repositories) 添加同级后**:该同级的 skills 也加载。`additionalDirectories` 设置仅授予文件访问权限,不加载 skills

395 395 

396名称始终加载,但[当有许多时描述被缩短](/docs/zh-CN/skills#skill-descriptions-are-cut-short),这可能会剥离 Claude 用来决定 skill 是否适用的关键字。保持描述简短并以请求会包含的词开头,例如"在 `packages/api/` 中编写或修改测试"。396名称始终加载,但[当有许多时,某些 skills 会完全失去其描述](/docs/zh-CN/skills#skill-descriptions-are-cut-short),这可能会剥离 Claude 用来决定 skill 是否适用的关键字。保持描述简短并以请求会包含的词开头,例如"在 `packages/api/` 中编写或修改测试"。

397 397 

398对于许多目录共享的 skills,例如 PR 约定或部署检查清单,将它们放在存储库根目录的 `.claude/skills/` 中,以便从任何启动目录加载。当共享 skills 需要自己的版本历史或必须跨存储库工作时,改为将它们打包为[插件](/docs/zh-CN/plugins)。插件 skills 使用 `plugin-name:skill-name` 命名空间,所以它们永远不会与按目录的 skills 冲突。平台团队可以在一个地方对它们进行版本化和更新。398对于许多目录共享的 skills,例如 PR 约定或部署检查清单,将它们放在存储库根目录的 `.claude/skills/` 中,以便从任何启动目录加载。当共享 skills 需要自己的版本历史或必须跨存储库工作时,改为将它们打包为[插件](/docs/zh-CN/plugins)。插件 skills 使用 `plugin-name:skill-name` 命名空间,所以它们永远不会与按目录的 skills 冲突。平台团队可以在一个地方对它们进行版本化和更新。

399 399 

Details

141 Claude Code 如何组合托管源141 Claude Code 如何组合托管源

142</h2>142</h2>

143 143 

144当您的组织向同一台机器交付多个托管源时,[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 密钥决定 Claude Code 对其他源的处理:144当您的组织向同一台机器交付多个托管源时,[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 键决定 Claude Code 对其他源的处理方式:

145 145 

146* **`"first-wins"`,默认值**:Claude Code 使用交付至少一个策略密钥的最高排名源,并忽略其余的,除了[从每个管理源读取的密钥](#keys-read-from-every-admin-source)中的少数几个。Claude Code 对跳过的源不显示警告;`/status`[命名它使用的源和跳过的源](#read-the-source-in-/status)。146* **`"first-wins"`,默认值**:Claude Code 使用提供至少一个策略键的最高排名源,并忽略其余源,而不是合并它们,除了 [从每个管理员源读取的键](#keys-read-from-every-admin-source) 中的键。Claude Code 不会对跳过的源显示警告;`/status` [命名它使用的源和跳过的源](#read-the-source-in-/status)。

147* **`"merge"`**:Claude Code 应用交付策略密钥的每个管理源,并按密钥类型组合它们:在大多数密钥上,最高排名源的值适用,列表联合,锁采用最严格的值。[组合每个托管源](#compose-every-managed-source)说明了在哪里设置密钥以及每种密钥类型如何组合。需要 Claude Code v2.1.242 或更高版本。147* **`"merge"`**:Claude Code 应用提供策略键的每个管理员源,并按键的类型组合它们:在大多数键上,较高排名源的值适用,列表合并,锁定采用最严格的值。[组合每个托管源](#compose-every-managed-source) 说明在哪里设置键以及每种键的组合方式。需要 Claude Code v2.1.242 或更高版本。

148 148 

149两个设置以相同的方式排名源。本节中重复出现两个术语:149两种设置以相同的方式对源进行排名。本节中重复出现两个术语:

150 150 

151* **策略密钥**:除了两个控制密钥 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 和 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 之外的任何设置密钥。仅包含这些的托管设置文件或 MDM 策略不计数,Claude Code 移动到下一个源。151* **策略键**:除了两个控制键 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 和 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 之外的任何设置键。仅包含这两个键的托管设置文件或 MDM 策略不计数,Claude Code 会继续查看下一个源。

152* **管理源**:下面前三个源之一。HKCU 注册表是用户可写的,不是一个。152* **管理员源**:下面前三个源之一。HKCU 注册表是用户可写的,不是管理员源。

153 153 

154Claude Code 按此顺序检查源,最高优先级优先:154Claude Code 按此顺序检查源,优先级最高的在前:

155 155 

1561. 远程设置,从 claude.ai 作为[服务器托管设置](/docs/zh-CN/server-managed-settings)或由[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)交付。Claude Code 仅在会话使用[符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability)直接向 Anthropic 的 API 进行身份验证,或使用 `/login` 登录网关时获取此源。在其他提供商上,或当 `ANTHROPIC_BASE_URL` 指向 Anthropic 的 API 以外的地方时,它从下一个源开始1561. 远程设置,从 claude.ai 作为 [服务器管理的设置](/docs/zh-CN/server-managed-settings) 或通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 交付。Claude Code 仅在会话使用 [符合条件的登录或密钥](/docs/zh-CN/server-managed-settings#platform-availability) 直接向 Anthropic 的 API 进行身份验证,或使用 `/login` 登录网关时才获取此源。在其他提供商上,或当 `ANTHROPIC_BASE_URL` 指向 Anthropic API 以外的地方时,它从下一个源开始

1572. MDM 或操作系统级策略:macOS plist 或 HKLM 注册表密钥1572. MDM 或操作系统级策略:macOS plist 或 HKLM 注册表键

1583. 托管设置文件,`managed-settings.d/*.json` 和 `managed-settings.json` 合并在一起1583. 托管设置文件,`managed-settings.d/*.json` 和 `managed-settings.json` 合并在一起

1594. HKCU 注册表,在 Windows 上,以及在 WSL 上一旦 HKLM 注册表或 Windows 托管设置文件打开 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 并且 HKCU 值也设置它。Claude Code 仅在上面没有源交付策略密钥且没有[主机提供的父设置](#let-an-embedding-host-add-policy)提供限制性密钥时读取它1594. HKCU 注册表,在 Windows 上,以及在 WSL 上一旦 HKLM 注册表或 Windows 托管设置文件打开 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 并且 HKCU 值也设置它时。Claude Code 仅在上面的源都不提供策略键且没有 [主机提供的父设置](#let-an-embedding-host-add-policy) 提供限制性键时才读取它

160 160 

161此图显示了排名,以及 Claude Code 在任一设置下从前三个源读取的跨源密钥示例:161此图显示排名,以及 Claude Code 在任一设置下从前三个源读取的跨源键的示例:

162 162 

163<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=53f6be49f06eff48e01422c8ae1bc2e6" className="dark:hidden" alt="显示四个托管设置源的图表,从顶部的远程设置排名到 MDM、托管设置文件和底部的 HKCU 注册表。默认情况下,具有策略密钥的第一个源提供策略,其余的被跳过;设置 managedSourcesBehavior 为 merge 时,具有策略密钥的每个管理源都有贡献,按密钥类型组合,HKCU 注册表保持不变。侧面板显示跨源密钥(如沙箱锁、forceRemoteSettingsRefresh 和每个变量 env 合并)从每个管理源读取,不包括 HKCU 注册表。" width="680" height="330" data-path="images/managed-source-precedence.svg" />163<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=53f6be49f06eff48e01422c8ae1bc2e6" className="dark:hidden" alt="Diagram showing the four managed settings sources ranked from remote settings at the top through MDM, managed settings files, and the HKCU registry at the bottom. By default the first source with a policy key supplies the policy and the rest are skipped; with managedSourcesBehavior set to merge, every admin source with a policy key contributes, combined by kind of key, and the HKCU registry stays out. A side panel shows that cross-source keys such as the sandbox locks, forceRemoteSettingsRefresh, and the per-variable env merge are read from every admin source, which excludes the HKCU registry." width="680" height="330" data-path="images/managed-source-precedence.svg" />

164 164 

165<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence-dark.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=ae407a9a08a3d680e80cf1a2af845d71" className="hidden dark:block" alt="显示四个托管设置源的图表,从顶部的远程设置排名到 MDM、托管设置文件和底部的 HKCU 注册表。默认情况下,具有策略密钥的第一个源提供策略,其余的被跳过;设置 managedSourcesBehavior 为 merge 时,具有策略密钥的每个管理源都有贡献,按密钥类型组合,HKCU 注册表保持不变。侧面板显示跨源密钥(如沙箱锁、forceRemoteSettingsRefresh 和每个变量 env 合并)从每个管理源读取,不包括 HKCU 注册表。" width="680" height="330" data-path="images/managed-source-precedence-dark.svg" />165<img src="https://mintcdn.com/claude-code/zuWID2B-Rxm8DEC8/images/managed-source-precedence-dark.svg?fit=max&auto=format&n=zuWID2B-Rxm8DEC8&q=85&s=ae407a9a08a3d680e80cf1a2af845d71" className="hidden dark:block" alt="Diagram showing the four managed settings sources ranked from remote settings at the top through MDM, managed settings files, and the HKCU registry at the bottom. By default the first source with a policy key supplies the policy and the rest are skipped; with managedSourcesBehavior set to merge, every admin source with a policy key contributes, combined by kind of key, and the HKCU registry stays out. A side panel shows that cross-source keys such as the sandbox locks, forceRemoteSettingsRefresh, and the per-variable env merge are read from every admin source, which excludes the HKCU registry." width="680" height="330" data-path="images/managed-source-precedence-dark.svg" />

166 166 

167<h3 id="keys-read-from-every-admin-source">167<h3 id="keys-read-from-every-admin-source">

168 从每个管理源读取的密钥168 从每个管理员源读取的键

169</h3>169</h3>

170 170 

171在默认的 `"first-wins"` 设置下,Claude Code 仅从[它选择的源](#how-claude-code-combines-managed-sources)读取大多数密钥,并忽略较低排名源中的值,即使选定的源未设置该密钥。171在默认的 `"first-wins"` 设置下,Claude Code 仅从 [它选择的源](#how-claude-code-combines-managed-sources) 读取大多数键,即使选定的源未设置该键,也会忽略较低排名源中的值。

172 172 

173少数密钥的工作方式不同。Claude Code 从每个管理源读取它们,因此当选定的源不设置它们时,较低排名的 MDM 策略或托管设置文件仍然可以设置它们。Claude Code 将用户可写的 HKCU 注册表排除在该扫描之外;当 HKCU 是唯一的源且没有主机提供父设置时,HKCU 像任何选定的源一样应用。173少数几个键的工作方式不同。Claude Code 从每个管理员源读取它们,因此当选定的源未设置它们时,较低排名的 MDM 策略或托管设置文件仍然可以设置它们。Claude Code 将用户可写的 HKCU 注册表排除在该扫描之外;当 HKCU 是唯一的源且没有主机提供父设置时,HKCU 的应用方式与任何选定的源相同。

174 174 

175跨源密钥包括:175跨源键包括:

176 176 

177* `sandbox.network.allowManagedDomainsOnly` 和 `sandbox.filesystem.allowManagedReadPathsOnly`:任何管理源中的 `true` 打开锁。当锁打开时,Claude Code 联合它锁定的允许列表,`sandbox.network.allowedDomains` 与 `WebFetch(domain:...)` 允许规则,或 `sandbox.filesystem.allowRead`,跨每个管理源。没有锁,Claude Code 将允许列表视为任何其他密钥,因此在 `"first-wins"` 下,未选定的管理源的允许列表被忽略177* `sandbox.network.allowManagedDomainsOnly` 和 `sandbox.filesystem.allowManagedReadPathsOnly`:任何管理员源中的 `true` 都会打开锁定。当锁定打开时,Claude Code 会合并它锁定的允许列表,`sandbox.network.allowedDomains` 与 `WebFetch(domain:...)` 允许规则,或 `sandbox.filesystem.allowRead`,跨越每个管理员源。没有锁定时,Claude Code 将允许列表视为任何其他键,因此在 `"first-wins"` 下,未选定的管理员源的允许列表被忽略

178* `allowAllClaudeAiMcps`178* `allowAllClaudeAiMcps`

179* 沙箱二进制路径 `sandbox.bwrapPath` 和 `sandbox.socatPath`179* 沙箱二进制路径 `sandbox.bwrapPath` 和 `sandbox.socatPath`

180* 沙箱 `ripgrep` 二进制,[`sandbox.ripgrep`](/docs/zh-CN/settings-reference#sandbox-ripgrep)180* 沙箱 `ripgrep` 二进制文件,[`sandbox.ripgrep`](/docs/zh-CN/settings-reference#sandbox-ripgrep)

181* `sandbox.filesystem.disabled` 和 `sandbox.network.strictAllowlist`181* `sandbox.filesystem.disabled` 和 `sandbox.network.strictAllowlist`

182* [`useAutoModeDuringPlan`](/docs/zh-CN/settings-reference#useautomodeduringplan) 和 [`syncClaudeAiSkills`](/docs/zh-CN/settings-reference#syncclaudeaiskills),其中任何管理源的 `false` 关闭行为。开发者的用户或本地设置中的 `false` 也关闭它;每个密钥只能拒绝182* [`useAutoModeDuringPlan`](/docs/zh-CN/settings-reference#useautomodeduringplan) 和 [`syncClaudeAiSkills`](/docs/zh-CN/settings-reference#syncclaudeaiskills),其中任何管理员源中的 `false` 都会关闭该行为。开发者的用户或本地设置中的 `false` 也会关闭它;每个键只能拒绝

183* [`enableArtifact`](/docs/zh-CN/settings-reference#enableartifact),其中任何管理源的 `false` 关闭[Artifact 工具](/docs/zh-CN/artifacts)。开发者的用户、项目或本地设置中的 `false` 也关闭它,没有源打开它;请参阅[哪些较低级别的值仍然计数](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence)。需要 Claude Code v2.1.242 或更高版本183* [`enableArtifact`](/docs/zh-CN/settings-reference#enableartifact),其中任何管理员源中的 `false` 都会关闭 [Artifact 工具](/docs/zh-CN/artifacts)。开发者的用户、项目或本地设置中的 `false` 也会关闭它,没有源可以将其打开;请参阅 [哪些较低级别的值仍然计数](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence)。需要 Claude Code v2.1.242 或更高版本

184* [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel),其中任何管理源中的最低上限适用。如果开发者在自己的设置或 `--settings` 中设置了较低的上限,Claude Code 应用那个;没有源可以提高上限。需要 Claude Code v2.1.267 或更高版本184* [`maxEffortLevel`](/docs/zh-CN/settings-reference#maxeffortlevel),其中任何管理员源中的最低上限适用。如果开发者在自己的设置或使用 `--settings` 中设置了更低的上限,Claude Code 会应用那个;没有源可以提高上限。需要 Claude Code v2.1.267 或更高版本

185* `attribution` 中的提交预告片选择退出,或在已弃用的 `includeCoAuthoredBy` 中,来自任何层185* 来自任何层级的 `attribution` 中的提交预告片选择退出,或在已弃用的 `includeCoAuthoredBy` 中

186* [`forceRemoteSettingsRefresh`](/docs/zh-CN/server-managed-settings)186* [`forceRemoteSettingsRefresh`](/docs/zh-CN/server-managed-settings)

187* 跨管理源按变量合并的 `env`:每个变量来自定义它的最高优先级源,因此较低源填充较高源未设置的变量。少数变量遵循自己的规则;[跨托管源的每个密钥例外](/docs/zh-CN/server-managed-settings#per-key-exceptions-across-managed-sources)命名每一个。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用选定源的整个 `env` 块187* `env`,跨管理员源按变量合并:每个变量来自定义它的最高优先级源,因此较低源填充较高源未设置的变量。少数几个变量遵循自己的规则;[跨托管源的按键异常](/docs/zh-CN/server-managed-settings#per-key-exceptions-across-managed-sources) 命名每一个。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用选定源的整个 `env` 块

188 

189[网关登录键](#choose-a-delivery-mechanism),[`forceLoginGatewayUrl`](/docs/zh-CN/settings-reference#forcelogingatewayurl) 和 [`forceLoginMethod`](/docs/zh-CN/settings-reference#forceloginmethod) 的 `"gateway"` 值,遵循单独的规则。Claude Code 从不从服务器管理的设置读取它们,因此当服务器管理的设置是选定的源时,机器上排名最高的包含策略键的管理员源仍然提供它们。排名低于该源的管理员源中的值,或 HKCU 注册表中的值,被忽略。

188 190 

189<h3 id="compose-every-managed-source">191<h3 id="compose-every-managed-source">

190 组合每个托管源192 组合每个托管源

191</h3>193</h3>

192 194 

193要让 Claude Code 应用您的组织交付的每个管理源,在您部署的最高排名源中设置 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 为 `"merge"`。Claude Code 仅从携带密钥或策略密钥的最高排名源读取密钥,因此较低源无法选择自己与上面的源合并,从不接收服务器托管设置的机器也需要在其 MDM 配置文件中有密钥。用户可写的 HKCU 注册表永远不会与另一个源合并。需要 Claude Code v2.1.242 或更高版本。195要让 Claude Code 应用您的组织交付的每个管理员源,请在您部署的最高排名源中将 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 设置为 `"merge"`。Claude Code 仅从包含该键或策略键的最高排名源读取该键,因此较低源无法选择自己与上面的源合并,并且从不接收服务器管理设置的机器也需要在其 MDM 配置文件中有该键。用户可写的 HKCU 注册表从不与另一个源合并。需要 Claude Code v2.1.242 或更高版本。

194 196 

195在 `"merge"` 下,Claude Code 添加较低源的列表条目,例如 `permissions.allow` 规则和钩子,到策略,因此仅在排名在最高源下面的每个源都在管理员的控制下时打开它。197在 `"merge"` 下,Claude Code 添加较低源的列表条目,例如 `permissions.allow` 规则和 hooks,到策略中,因此仅在排名低于最高源的每个源都在管理员的控制下时才打开它。

196 198 

197此表显示了 Claude Code 在 `"merge"` 下如何组合每种密钥。[`managedSourcesBehavior` 条目](/docs/zh-CN/settings-reference#managedsourcesbehavior)命名限制允许列表、值整体取用和仅最高源行中的每个密钥。199此表显示 Claude Code 在 `"merge"` 下如何组合每种键。[`managedSourcesBehavior` 条目](/docs/zh-CN/settings-reference#managedsourcesbehavior) 在三行中命名每个键:限制允许列表、整体取值的值和仅从最高排名源读取的键。

198 200 

199| 密钥类型 | Claude Code 如何组合它 | 示例 |201| 键的类型 | Claude Code 如何组合它 | 示例 |

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

201| 列表 | 组合来自每个源的条目 | `permissions.allow`、`hooks`、`sandbox.network.allowedDomains`、`deniedMcpServers` |203| 列表 | 组合来自每个源的条目 | `permissions.allow`、`hooks`、`sandbox.network.allowedDomains`、`deniedMcpServers` |

202| 锁 | 应用任何源设置的最严格值;较松散的值仅从最高排名源应用 | `allowManagedHooksOnly`、`permissions.disableBypassPermissionsMode`、`crossSessionInbound` |204| 锁定 | 应用任何源设置的最严格值;较宽松的值仅从最高排名源适用 | `allowManagedHooksOnly`、`permissions.disableBypassPermissionsMode`、`crossSessionInbound` |

203| 限制允许列表 | 从设置它的最高排名源整体取用列表,不添加来自较低源的条目 | `availableModels`、`allowedMcpServers`、`strictKnownMarketplaces`、`allowedChannelPlugins` 和 `fallbackModel` 链 |205| 限制允许列表 | 从设置它的最高排名源整体取值,不添加来自较低源的条目 | `availableModels`、`allowedMcpServers`、`strictKnownMarketplaces`、`allowedChannelPlugins` 和 `fallbackModel` 链 |

204| 值整体取用 | 从设置它的最高排名源整体取用值,不组合来自较低源的条目或字段 | `sandbox.credentials.awsPairs`、`sandbox.ripgrep` |206| 整体取值的值 | 从设置它的最高排名源整体取值,不组合来自较低源的条目或字段 | `sandbox.credentials.awsPairs`、`sandbox.ripgrep` |

205| 提供的 MCP 服务器 | 组合来自每个源的服务器名称;当两个源设置相同的名称时,应用最高排名源的整个条目 | `managedMcpServers` |207| 提供的 MCP 服务器 | 组合来自每个源的服务器名称;当两个源设置相同的名称时,应用较高排名源的整个条目 | `managedMcpServers` |

206| 仅从最高排名源读取的密钥 | 忽略每个较低源中的密钥,即使最高排名源未设置它 | 凭证助手,如 `apiKeyHelper`、登录 pin,如 `forceLoginOrgUUID`、`modelPicker`、`permissions.defaultMode` |208| 仅从最高排名源读取的键 | 忽略每个较低源中的键,即使最高排名源未设置它 | 凭证助手,例如 `apiKeyHelper`、登录 PIN,例如 `forceLoginOrgUUID`、`modelPicker`、`permissions.defaultMode` |

207| `env` | 在任一设置下按变量跨管理源合并,如[从每个管理源读取的密钥](#keys-read-from-every-admin-source)所述 | |209| `env` | 在任一设置下跨管理员源按变量合并,如 [从每个管理员源读取的键](#keys-read-from-every-admin-source) 所述 | |

208| 每个其他密钥 | 从设置它的最高排名源取用值 | `model`、`cleanupPeriodDays` |210| 所有其他键 | 从设置它的最高排名源取值 | `model`、`cleanupPeriodDays` |

209 211 

210要确认哪些源在机器上组合,[读取 `/status` 中的 `Setting sources` 行](#read-the-source-in-/status);该部分说明了每个标签的含义。212要确认机器上组合了哪些源,请 [读取 `/status` 中的 `Setting sources` 行](#read-the-source-in-/status);该部分说明每个标签的含义。

211 213 

212<h3 id="compute-the-policy-with-a-helper-program">214<h3 id="compute-the-policy-with-a-helper-program">

213 使用助手程序计算策略215 使用辅助程序计算策略

214</h3>216</h3>

215 217 

216[`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 是您的 MDM 策略或托管设置文件命名的可执行文件,Claude Code 在启动时运行它来计算托管设置。当选定的源配置一个并且助手发出 `managedSettings` 对象时,该输出改变 Claude Code 读取的内容:218[`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 是您的 MDM 策略或托管设置文件命名的可执行文件,Claude Code 在启动时运行它来计算托管设置。当选定的源配置一个并且辅助程序发出 `managedSettings` 对象时,该输出改变 Claude Code 读取的内容:

217 219 

218* **发出的 `managedSettings` 对象是会话的唯一托管设置**,包括[它否则从每个管理源读取的密钥](#keys-read-from-every-admin-source),除了[`forceRemoteSettingsRefresh`,它有自己的启动规则](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)220* **发出的 `managedSettings` 对象是会话的唯一托管设置**,包括对于 [它以其他方式从每个管理员源读取的键](#keys-read-from-every-admin-source),除了 [`forceRemoteSettingsRefresh`,它有自己的启动规则](/docs/zh-CN/settings-reference#forceremotesettingsrefresh)

219 221 

220有关哪些助手运行失败以及 Claude Code 在一个失败时的处理,请参阅[助手失败](/docs/zh-CN/settings-reference#helper-failures)。222对于辅助程序运行失败的情况,以及当一个失败时 Claude Code 的处理方式,请参阅 [辅助程序失败](/docs/zh-CN/settings-reference#helper-failures)。

221 223 

222<span id="parent-settings-from-embedding-hosts" />224<span id="parent-settings-from-embedding-hosts" />

223 225 


231 233 

232当另一个应用程序启动 Claude Code 时,例如 Claude Desktop、IDE 扩展或 Agent SDK 应用,该主机可以通过 SDK `managedSettings` 选项传递自己的托管设置。Claude Code 将这些称为父设置。234当另一个应用程序启动 Claude Code 时,例如 Claude Desktop、IDE 扩展或 Agent SDK 应用,该主机可以通过 SDK `managedSettings` 选项传递自己的托管设置。Claude Code 将这些称为父设置。

233 235 

234默认情况下,只要存在管理源,Claude Code 就忽略父设置:服务器托管设置、MDM 或操作系统级策略或托管设置文件。236默认情况下,当存在管理员源时,Claude Code 忽略父设置:服务器管理的设置、MDM 或操作系统级策略,或托管设置文件。

235 237 

236要让 Claude Code 将父设置与管理源合并,在最高优先级托管源中设置 [`parentSettingsBehavior`](/docs/zh-CN/settings-reference#parentsettingsbehavior) 为 `"merge"`;Claude Code 仅从该源读取密钥。238要让 Claude Code 将父设置与管理员源合并,请在最高优先级托管源中将 [`parentSettingsBehavior`](/docs/zh-CN/settings-reference#parentsettingsbehavior) 设置为 `"merge"`;Claude Code 仅从该源读取该键。

237 239 

238Claude Code 然后仅保留主机的限制 Claude 可以做什么的值,有一个要了解的间隙:除非您也设置 `allowManaged*Only` 锁,主机的权限允许规则和沙箱允许列表仍然适用。请参阅[限制父设置](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)以获取锁。240Claude Code 然后仅保留主机的限制 Claude 可以做什么的值,有一个需要了解的间隙:除非您也设置 `allowManaged*Only` 锁定,主机的权限允许规则和沙箱允许列表仍然适用。请参阅 [限制父设置](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings) 以了解锁定。

239 241 

240[`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 可以关闭父合并,无论此密钥如何;其条目说明了何时。242[`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 可以独立于此键关闭父合并;其条目说明何时。

241 243 

242Claude Code 也对父提供的值本身应用这些检查:244Claude Code 也对父提供的值本身应用这些检查:

243 245 

244* 当任何管理源设置 `allowManagedPermissionRulesOnly` 时,Claude Code 在读取时删除[父提供的](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)权限允许规则和 `additionalDirectories`,即使较高优先级源未设置密钥。密钥对您自己的权限规则的影响来自 Claude Code 应用的托管设置,或来自您选择合并的父设置246* 当任何管理员源设置 `allowManagedPermissionRulesOnly` 时,Claude Code 在读取时删除 [父提供的](/docs/zh-CN/claude-apps-gateway#restrict-parent-settings) 权限允许规则和 `additionalDirectories`,即使较高优先级源未设置该键。该键对您自己的权限规则的影响来自 Claude Code 应用的托管设置,或来自您选择合并的父设置

245* Claude Code 强制执行它应用的托管设置中的 `forceLoginOrgUUID` 或 `allowedMcpServers` 值,并阻止父提供的值。较低管理源中的值,Claude Code 不应用既不应用也不阻止父的。[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 条目说明了在 `"merge"` 下哪个源提供每个密钥。在 v2.1.223 之前,任何管理源中的值阻止了父的247* Claude Code 强制执行它应用的托管设置中的 `forceLoginOrgUUID` 或 `allowedMcpServers` 值,并阻止父提供的值。Claude Code 不应用的较低管理员源中的值既不应用也不阻止父的值。[`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 条目说明在 `"merge"` 下哪个源提供每个键。在 v2.1.223 之前,任何管理员源中的值都会阻止父的值

246* `availableModels` 值遵循与 `allowedMcpServers` 相同的规则248* `availableModels` 值遵循与 `allowedMcpServers` 相同的规则

247 249 

248<h4 id="keep-cowork-folder-access-when-only-managed-rules-apply">250<h4 id="keep-cowork-folder-access-when-only-managed-rules-apply">

249 当仅应用托管规则时保持协作文件夹访问251 当仅应用托管规则时保持 Cowork 文件夹访问

250</h4>252</h4>

251 253 

252Claude Desktop 应用中的[协作](https://claude.com/docs/cowork/overview)在 Claude Code 上运行其会话,并通过它在启动会话时作为父设置提供的允许规则授予每个会话对其工作文件夹(如用户连接的文件夹)的访问权限。当您的托管策略设置 [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 时,Claude Code 仅保留托管策略中的允许规则:它删除主机作为父设置、`--allowedTools` 或设置文件中提供的允许规则,因此对这些文件夹的写入失去其预批准。在要求编辑前提示的协作会话中,协作无法显示提示,Claude 将每个写入报告为被阻止,因为路径解析为受保护位置或连接文件夹外的路径。254Claude Desktop 应用中的 [Cowork](https://claude.com/docs/cowork/overview) 在 Claude Code 上运行其会话,并通过在启动会话时提供的允许规则授予每个会话对其工作文件夹(例如用户连接的文件夹)的访问权限。当您的托管策略设置 [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 时,Claude Code 仅保留托管策略中的允许规则:它删除主机作为父设置、`--allowedTools` 或在设置文件中提供的允许规则,因此对这些文件夹的写入失去其预先批准。在要求编辑前提示的 Cowork 会话中,Cowork 无法显示提示,Claude 将每次写入报告为被阻止,因为路径解析为受保护的位置或连接文件夹外的路径。

253 255 

254要恢复写入,为这些文件夹添加允许规则到 Claude Code [选择](#precedence-within-the-managed-tier)的托管源在这些机器上:在 MDM 托管的设备群上,那是 MDM 策略而不是单独的托管设置文件。此示例使用文件形式,MDM 策略采用相同的密钥。它保持 `allowManagedPermissionRulesOnly` 设置并允许在每个用户的主目录中的 `CoworkProjects` 文件夹下编辑;用您的用户连接的文件夹替换路径:256要恢复写入,请为这些文件夹添加允许规则到 Claude Code [选择](#precedence-within-the-managed-tier) 的托管源在这些机器上:在 MDM 管理的队列上,那是 MDM 策略而不是单独的托管设置文件。此示例使用文件形式,MDM 策略采用相同的键。它保持 `allowManagedPermissionRulesOnly` 设置并允许在每个用户主目录中的 `CoworkProjects` 文件夹下编辑;将路径替换为您的用户连接的文件夹:

255 257 

256```json managed-settings.json theme={null}258```json managed-settings.json theme={null}

257{259{


264}266}

265```267```

266 268 

267部署策略后,Claude 可以在新协作会话中保存该文件夹下的文件。[读和编辑规则](/docs/zh-CN/permissions#read-and-edit)涵盖路径语法,包括绝对路径的 `//` 形式。269部署策略后,Claude 可以在新 Cowork 会话中的该文件夹下保存文件。[读取和编辑规则](/docs/zh-CN/permissions#read-and-edit) 涵盖路径语法,包括绝对路径的 `//` 形式。

268 270 

269<h3 id="what-a-developer-can-change">271<h3 id="what-a-developer-can-change">

270 开发者可以更改什么272 开发者可以更改什么

271</h3>273</h3>

272 274 

273开发者自己的设置文件、`--settings` 值和项目文件永远不会覆盖托管值;[例外](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence)仅让更严格的较低级别值计数。四件事在该规则之外:275开发者自己的设置文件、`--settings` 值和项目文件从不覆盖托管值;[异常](/docs/zh-CN/settings#exceptions-to-managed-settings-precedence) 仅允许更严格的较低级别值计数。四件事在该规则之外:

274 276 

275* **会话的模型**:托管 `model` 是默认值,不是锁。`--model` 和 `ANTHROPIC_MODEL` 仍然为该会话选择模型,因此部署 [`availableModels`](/docs/zh-CN/settings-reference#availablemodels) 来限制选择。277* **会话的模型**:托管的 `model` 是默认值,不是锁定。`--model` 和 `ANTHROPIC_MODEL` 仍然为该会话选择模型,因此部署 [`availableModels`](/docs/zh-CN/settings-reference#availablemodels) 来限制选择。

276* **本地管理员权限**:作为机器上的管理员的开发者可以编辑托管源本身,这就是为什么 MDM 工具可以按计划重新部署配置文件或文件,以及为什么 HKLM 注册表和 macOS 托管首选项域存在。278* **本地管理员权限**:作为机器上管理员的开发者可以编辑托管源本身,这就是为什么 MDM 工具可以按计划重新部署配置文件或文件,以及为什么 HKLM 注册表和 macOS 托管首选项域存在。

277* **服务器托管缓存**:服务器托管设置来自 Anthropic 的服务器,对本地缓存的编辑[仅持续到下一次成功获取](/docs/zh-CN/server-managed-settings#security-considerations)。279* **服务器管理的缓存**:服务器管理的设置来自 Anthropic 的服务器,对本地缓存的编辑 [仅持续到下一次成功获取](/docs/zh-CN/server-managed-settings#security-considerations)。

278* **其他工具**:托管设置仅绑定 Claude Code。从另一个工具调用 API 的开发者不在它们下。280* **其他工具**:托管设置仅绑定 Claude Code。从另一个工具调用 API 的开发者不在它们下。

279 281 

280<span id="verify-enforcement" />282<span id="verify-enforcement" />

mcp.md +552 −234

Details

47 /plugin install mcp-server-dev@claude-plugins-official47 /plugin install mcp-server-dev@claude-plugins-official

48 ```48 ```

49 49 

50 如果 Claude Code 报告找不到 marketplace,请先运行 `/plugin marketplace add anthropics/claude-plugins-official`,然后重试安装。安装完成后,运行 `/reload-plugins` 在当前会话中激活它。50 如果安装失败,请匹配 Claude Code 报告的消息:

51 

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

53 * plugin [在 marketplace 中找不到](/docs/zh-CN/discover-plugins#install-plugins):检查 plugin 名称。

54 

55 如果安装摘要报告 `Run /reload-plugins to activate.`,Claude Code 会为您运行该重新加载。如果重新加载警告您的下一条消息会重新读取对话,请运行 `/reload-plugins --force`。

51 </Step>56 </Step>

52 57 

53 <Step title="运行构建 skill">58 <Step title="运行构建 skill">


83 --header "Authorization: Bearer your-token"88 --header "Authorization: Bearer your-token"

84```89```

85 90 

86在通过 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中的 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范对此传输使用名称 `streamable-http`,因此从服务器文档复制的配置无需修改即可工作。91通过 `.mcp.json`、`~/.claude.json` 或 `claude mcp add-json` 中的 JSON 配置 MCP 服务器时,`type` 字段接受 `streamable-http` 作为 `http` 的别名。MCP 规范对此传输使用名称 `streamable-http`,因此从服务器文档复制的配置无需修改即可工作。

92 

93具有 `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`。在 v2.1.202 之前,Claude Code 将此配置错误报告为 `command: expected string, received undefined`。

87 94 

88没有 `type` 但有 `url` 的 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`。在 v2.1.202 之前,Claude Code 将此配置错误报告为 `command: expected string, received undefined`。95在 `--output-format stream-json` 运行中,Claude Code 还在 `system/init` 事件的 [`mcp_server_errors` 字段](/docs/zh-CN/headless#stream-responses) 中报告跳过的 `--mcp-config` 条目,以便脚本可以检测到服务器从未加载。这需要 Claude Code v2.1.219 或更高版本。

89 96 

90<h3 id="option-2-add-a-remote-sse-server">97<h3 id="option-2-add-a-remote-sse-server">

91 选项 2:添加远程 SSE 服务器98 选项 2:添加远程 SSE 服务器

92</h3>99</h3>

93 100 

94<Warning>101<Warning>

95 SSE (Server-Sent Events) 传输已弃用。请在可用的地方使用 HTTP 服务器。102 SSE(Server-Sent Events)传输已弃用。请改用 HTTP 服务器(如果可用)。

96</Warning>103</Warning>

97 104 

105某些服务仍然仅公开 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 或更高版本。

106 

107在较早的版本上,或直接通过 SSE 连接,请改为传递 `--transport sse`:

108 

98```bash theme={null}109```bash theme={null}

99# 基本语法110# 基本语法

100claude mcp add --transport sse <name> <url>111claude mcp add --transport sse <name> <url>


111 选项 3:添加本地 stdio 服务器122 选项 3:添加本地 stdio 服务器

112</h3>123</h3>

113 124 

114Stdio 服务器作为您机器上的本地进程运行。它们非常适合需要直接系统访问或自定义脚本的工具。125Stdio 服务器作为本地进程在您的机器上运行。它们非常适合需要直接系统访问或自定义脚本的工具。

115 126 

116Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR`,指向项目根目录,因此您的服务器可以解析项目相对路径,而无需依赖工作目录。这与 hooks 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内部读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。127Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,因此您的服务器可以解析项目相对路径,而无需依赖工作目录。这与 hooks 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内部读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。

117 128 

118`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中途添加或删除工作目录时不会改变。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个[额外工作目录](/docs/zh-CN/permissions#working-directories)来回答 `roots/list`。当该集合改变时,Claude Code 发送 `notifications/roots/list_changed`。在 v2.1.203 之前,`roots/list` 仅返回启动目录,Claude Code 不发送 `notifications/roots/list_changed`。129`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您使用 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](/docs/zh-CN/permissions#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。在 v2.1.203 之前,`roots/list` 仅返回启动目录,Claude Code 不发送 `notifications/roots/list_changed`。

119 130 

120此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此在项目或用户范围的 `.mcp.json` `command` 或 `args` 中通过 `${VAR}` 扩展引用它需要一个默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}`,不需要默认值。131此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目范围的 `.mcp.json` 条目或本地或用户范围的 `~/.claude.json` 中的服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。

121 132 

122```bash theme={null}133```bash theme={null}

123# 基本语法134# 基本语法


129```140```

130 141 

131<Note>142<Note>

132 **重要:使用 `--` 分隔服务器参数**143 **重要:用 `--` 分隔服务器参数**

133 144 

134 对于 stdio 服务器,`--`(双破折号)将 Claude 自己的选项(如 `--transport`、`--env` 和 `--scope`)与运行服务器的命令和参数分开。`--` 之后的所有内容都会原封不动地传递给服务器。145 对于 stdio 服务器,`--`(双破折号)将 Claude 自己的选项(如 `--transport`、`--env` 和 `--scope`)与运行服务器的命令和参数分开。`--` 之后的所有内容都原封不动地传递给服务器。

135 146 

136 例如:147 例如:

137 148 


140 151 

141 没有 `--`,Claude Code 会尝试将服务器的标志(如上面的 `--port`)解析为自己的选项。152 没有 `--`,Claude Code 会尝试将服务器的标志(如上面的 `--port`)解析为自己的选项。

142 153 

143 `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将该名称读取为另一对并拒绝它,因此请在 `--env` 和服务器名称之间放置至少一个其他选项,如上面的示例所示。154 `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将名称读取为另一对并拒绝它,因此在 `--env` 和服务器名称之间至少放置一个其他选项,如上面的示例所示。

144</Note>155</Note>

145 156 

146<h3 id="option-4-add-a-remote-websocket-server">157<h3 id="option-4-add-a-remote-websocket-server">

147 选项 4:添加远程 WebSocket 服务器158 选项 4:添加远程 WebSocket 服务器

148</h3>159</h3>

149 160 

150WebSocket 服务器保持持久的双向连接,适合于向 Claude 主动推送事件的远程 MCP 服务器。当您的服务器仅响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 两者都不支持。161WebSocket 服务器保持持久的双向连接,适合推送事件给 Claude 的远程 MCP 服务器。当您的服务器仅响应请求时,请改用 HTTP,因为 HTTP 支持 OAuth 和 `claude mcp add --transport` 标志,而 WebSocket 都不支持。

151 162 

152在 `.mcp.json` 中或使用 `claude mcp add-json` 配置 WebSocket 服务器:163在 `.mcp.json` 中或使用 `claude mcp add-json` 配置 WebSocket 服务器:

153 164 


158 169 

159`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅限于标头,因此在 `headers` 中传递静态令牌或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成一个。`claude mcp add --transport` 标志不接受 `ws`。170`type: "ws"` 条目接受与 `http` 相同的 `url`、`headers`、`headersHelper`、`timeout` 和 `alwaysLoad` 字段。身份验证仅限于标头,因此在 `headers` 中传递静态令牌或在连接时使用 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 生成一个。`claude mcp add --transport` 标志不接受 `ws`。

160 171 

172<h3 id="add-a-server-from-setup-instructions-written-for-another-client">

173 从为另一个客户端编写的设置说明添加服务器

174</h3>

175 

176MCP 服务器不特定于 Claude Code,因此服务器的设置说明可能是为 Claude Desktop、Cursor 或另一个 MCP 客户端编写的,并且不提供 `claude mcp add` 命令。要添加服务器,请在这些说明中查找以下三项之一:

177 

178* **URL**,例如 `https://mcp.example.com/mcp`:服务器是远程的。

179* **启动命令**,例如 `npx -y @example/mcp-server`:服务器在您的机器上运行。

180* **`mcpServers` JSON 块**:为另一个客户端的设置文件编写的配置。

181 

182每一项都是 [安装 MCP 服务器](#installing-mcp-servers) 中四个选项之一接受的输入。找到您下面拥有的形状,将其转换为 Claude Code 接受的命令。除非您添加 `--scope project` 或 `--scope user`,否则每个命令都写入 [本地范围](#local-scope)。

183 

184<h4 id="from-a-url">

185 从 URL

186</h4>

187 

188URL 表示服务器是远程的。对于 `https://` 端点,使用 `--transport http` 添加它,或在说明说端点使用 SSE 时遵循 [选项 2](#option-2-add-a-remote-sse-server)。对于 `wss://` 端点,改用 [选项 4](#option-4-add-a-remote-websocket-server),因为 `--transport` 不接受 `ws`:

189 

190```bash theme={null}

191claude mcp add --transport http example https://mcp.example.com/mcp

192```

193 

194如果说明还提供 API 密钥或令牌标头,请使用 `--header` 传递它,如 [选项 1](#option-1-add-a-remote-http-server) 所示。

195 

196<h4 id="from-an-npx-uvx-or-binary-command">

197 从 `npx`、`uvx` 或二进制命令

198</h4>

199 

200启动命令表示服务器作为本地 stdio 进程运行。将整个命令放在 `--` 之后,以便 Claude Code 将标志(如 `-y`)传递给启动服务器的命令,而不是将它们读取为自己的选项。使用 `--env` 传递说明要求的任何环境变量,在服务器名称之后和 `--` 之前:

201 

202```bash theme={null}

203claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server

204```

205 

206[选项 3](#option-3-add-a-local-stdio-server) 完整涵盖 `--` 分隔符。

207 

208<h4 id="from-an-mcpservers-json-block">

209 从 `mcpServers` JSON 块

210</h4>

211 

212为另一个 MCP 客户端(如 Claude Desktop)编写的 `mcpServers` 块使用 Claude Code 读取的包装键和条目形状。将 `mcpServers` 内的对象传递给 `claude mcp add-json`,而不是包装器。两个条目需要先修复:

213 

214* **没有 `type` 的 `url`**:添加 `"type": "http"`、`"type": "sse"` 或 `"type": "ws"` 以匹配端点。Claude Code 将没有 `type` 的条目读取为 stdio 服务器,因此没有 `type` 的 `url` 条目会失败。

215* **具有字母、数字、连字符和下划线以外的字符的键**:选择仅使用这些字符的服务器名称。否则键是服务器名称。

216 

217例如,此块:

218 

219```json theme={null}

220{

221 "mcpServers": {

222 "example": {

223 "command": "npx",

224 "args": ["-y", "@example/mcp-server"]

225 }

226 }

227}

228```

229 

230变成此命令:

231 

232```bash theme={null}

233claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'

234```

235 

236[从 JSON 配置添加 MCP 服务器](#add-mcp-servers-from-json-configuration) 涵盖 `add-json` 的 shell 转义和 `--scope` 标志。要改为与您的团队共享服务器,请添加 `--scope project`,或在项目根目录的 `.mcp.json` 下的 `mcpServers` 中添加条目并提交它。[项目范围](#project-scope) 涵盖 Claude Code 如何加载和批准该文件。

237 

238每个 `claude mcp add` 和 `claude mcp add-json` 命令都会打印一个 `Added ...` 行。要检查 Claude Code 是否已连接,请运行 `claude mcp get <name>`;[服务器状态](#server-status) 涵盖它显示的状态和 `.mcp.json` 服务器的批准步骤。

239 

161<h3 id="managing-your-servers">240<h3 id="managing-your-servers">

162 管理您的服务器241 管理您的服务器

163</h3>242</h3>


169claude mcp list248claude mcp list

170 249 

171# 获取特定服务器的详细信息250# 获取特定服务器的详细信息

172claude mcp get github251claude mcp get notion

173 252 

174# 删除服务器253# 删除服务器

175claude mcp remove github254claude mcp remove notion

176 255 

177# (在 Claude Code 中)检查服务器状态256# (在 Claude Code 中)检查服务器状态

178/mcp257/mcp

179```258```

180 259 

181来自 `.mcp.json` 的项目范围服务器如果等待您的批准,会在 `claude mcp list` 中显示为 `⏸ 待批准`。运行 `claude` 交互式命令来审查和批准它们。`claude mcp get <name>` 将待批准的服务器显示为 `⏸ 待批准`,将被拒绝的服务器显示为 `✗ 已拒绝`。260删除远程服务器时,Claude Code 也会删除为该服务器存储的 OAuth 令牌和客户端注册。

261 

262<h4 id="server-status">

263 服务器状态

264</h4>

265 

266`claude mcp add` 通过打印 `Added ...` 行确认成功添加,这意味着配置已写入。`claude mcp list` 然后在它列出的每个服务器旁边显示健康状态,例如 `✔ Connected`、`! Needs authentication` 或 `✘ Failed to connect`。失败状态意味着 Claude Code 无法连接到该服务器,而不是列表命令失败。

182 267 

183从 v2.1.196 开始,`claude mcp list` 和 `claude mcp get` 仅从未检入存储库的设置文件中读取 `.mcp.json` 批准,直到您通过在其中运行 `claude` 并接受工作区信任对话框来信任工作区。克隆的存储库无法批准其自己的服务器:提交到项目的 `.claude/settings.json` 的 [`enableAllProjectMcpServers` 或 `enabledMcpjsonServers`](/docs/zh-CN/settings#available-settings) 在不受信任的文件夹中被忽略,服务器保持在 `⏸ 待批准` 状态,而不是被连接和健康检查。268此列表中的状态报告配置决策而不是连接尝试,因此 Claude Code 在不连接到服务器的情况下打印它们:

269 

270* ``⏸ Pending approval (run `claude` to approve)``:来自 `.mcp.json` 的项目范围服务器,您尚未批准。Claude Code 在 `claude mcp list` 和 `claude mcp get <name>` 中都显示它。运行 `claude` 交互式地审查和批准它。

271* `✘ Rejected (see disabledMcpjsonServers in settings)`:由 [`disabledMcpjsonServers`](/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目拒绝的 `.mcp.json` 服务器。Claude Code 仅在 `claude mcp get <name>` 中显示它。

272* `⊘ 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` 面板打开服务器。在 v2.1.238 之前,两个命令都连接到禁用的服务器以进行健康检查并报告连接结果。

273 

274WebSocket 服务器不会出现在 `claude mcp list` 输出中。使用 `claude mcp get <name>` 或 `/mcp` 面板检查它们。

275 

276<h4 id="project-server-approvals-and-workspace-trust">

277 项目服务器批准和工作区信任

278</h4>

279 

280从 v2.1.196 开始,`claude mcp list` 和 `claude mcp get` 仅从未检入存储库的设置文件中读取 `.mcp.json` 批准,直到您通过在其中运行 `claude` 并接受工作区信任对话来信任工作区。克隆的存储库无法批准自己的服务器:提交到项目的 `.claude/settings.json` 的 [`enableAllProjectMcpServers`](/docs/zh-CN/settings-reference#enableallprojectmcpservers) 或 [`enabledMcpjsonServers`](/docs/zh-CN/settings-reference#enabledmcpjsonservers) 在不受信任的文件夹中被忽略,服务器保持在 `⏸ Pending approval` 而不是被连接和健康检查。

184 281 

185这些来源的批准仍然适用于不受信任的文件夹:282这些来源的批准仍然适用于不受信任的文件夹:

186 283 


188* 托管设置285* 托管设置

189* 使用 `--settings` 传递的设置286* 使用 `--settings` 传递的设置

190 287 

191未跟踪的 `.claude/settings.local.json` 中的批准也适用,但仅在您接受该文件夹或其父目录之一的信任对话框后:Claude Code 运行 git 来检查文件是否被跟踪,并且仅在受信任的文件夹中运行该检查。在您从未信任过的文件夹中,文件的批准会等待信任对话框,除非该文件夹是您自己的配置主目录:您的主目录,或一个您已将其 `.claude` 设置为 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 的目录。在 v2.1.207 之前,未跟踪的 `.claude/settings.local.json` 在您从未信任过的文件夹中批准了服务器。288Claude Code 也应用来自未跟踪的 `.claude/settings.local.json` 的批准,但它运行 git 来检查文件是否被跟踪,并且仅在 [受信任的文件夹](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 中运行该检查。在您从未信任的文件夹中,Claude Code 等待信任对话后才应用文件的批准,除非文件夹是您自己的配置主目录:您的主目录,或一个您已设置为 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 的 `.claude` 的目录。在 v2.1.207 之前,Claude Code 即使在您从未信任的文件夹中也应用来自未跟踪的 `.claude/settings.local.json` 的批准。

289 

290任何设置文件中的 `disabledMcpjsonServers` 条目仍然拒绝服务器。

291 

292<h4 id="server-status-detail">

293 服务器状态详情

294</h4>

192 295 

193任何设置文件中的 `disabledMcpjsonServers` 条目仍然会拒绝该服务器。296在 `/mcp` 中(包括服务器的菜单)和 [`/plugin`](/docs/zh-CN/plugins) 管理器中,您之前使用过的远程 HTTP 或 SSE 服务器可以显示 `cached` 状态,例如 `cached 2h ago · connects on first use · 5 tools`。Claude Code 从发现缓存(保存在上一个会话中)加载了服务器的工具列表,而不是在启动时连接,Claude Code 在 Claude 首次调用服务器的工具之一时连接服务器。工具从您的第一条消息开始可用,因此您无需执行任何操作。发现缓存及其 `cached` 状态需要 Claude Code v2.1.221 或更高版本。

194 297 

195`/mcp` 面板在每个连接的服务器旁边显示工具计数,并标记声称工具功能但未公开任何工具的服务器。298发现缓存默认关闭,除非逐步推出已为您的帐户启用它。设置 [`MCP_DISCOVERY_CACHE=1`](/docs/zh-CN/env-vars) 以打开它,或设置为 `0` 以在推出启用它时保持关闭。在 v2.1.238 之前,缓存默认打开。

196 299 

197配置为空 `url` 的远程服务器在 `/mcp`、`claude mcp list` 和[`/plugin`](/docs/zh-CN/plugins)管理器中显示为 `未配置`,Claude Code 不会尝试连接到它。插件可以包含一个占位符条目,如下所示,用于您稍后配置的连接器,因此 Claude Code 不会将其报告为错误或设置问题。服务器在 `/mcp` 中的详细视图读取 `未为此服务器配置 URL`;设置条目的 `url` 以连接它。在 v2.1.208 之前,Claude Code 将空 `url` 报告为配置问题,并提示重新连接。300`/mcp` 中服务器菜单中的两个操作也会影响该服务器的缓存条目:

198 301 

199如果您的请求需要来自仍在后台连接的服务器的工具,Claude 会在继续之前等待该服务器。启用[工具搜索](#scale-with-mcp-tool-search)(这是默认设置)后,等待发生在 `ToolSearch` 调用内部。在没有工具搜索的配置中,例如 Google Cloud 的 Agent Platform、自定义 `ANTHROPIC_BASE_URL` 或 `ENABLE_TOOL_SEARCH=false`,Claude 改为使用 `WaitForMcpServers` 工具。302* **重新连接**:在 `cached` 服务器上,Claude Code 现在连接它而不是在其第一个工具调用时连接,并保留条目。在连接或失败的服务器上,Claude Code 重新连接它并也丢弃条目。

303* **清除身份验证**:Claude Code 撤销服务器的身份验证并也丢弃条目。

200 304 

201某些服务器名称为 Claude Code 的内置服务器保留:`workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义了具有保留名称的服务器,Claude Code 会在加载时跳过它,并显示一条警告,要求您重命名它。`claude mcp add` 会以错误拒绝保留名称。305丢弃条目后,Claude Code 从服务器而不是从缓存获取服务器的工具列表。

202 306 

203`Claude Preview` 和 `Claude Browser` 都命名了 [Claude Code 桌面应用的预览窗格](/docs/zh-CN/desktop#preview-your-app)使用的内置服务器。在 v2.1.205 之前,`Claude Browser` 不是保留的,因此用户配置的服务器可以在该名称下注册。307当服务器的状态为 `✘ Failed to connect` 时,`claude mcp list` 将失败详情附加到该状态行,`claude mcp get <name>` 在 `Issue:` 行上显示它:HTTP 状态或错误代码,加上服务器返回的任何错误文本。`/mcp` 中服务器的详情视图在其 `Issue:` 行中包含相同的服务器报告的文本。Claude Code 从此详情中编辑类似凭证的文本,并且从不包含扩展的服务器 URL,它可能携带机密。Claude Code 不向 `✘ Connection error` 状态附加详情,因为它会打印的异常文本可以嵌入该 URL。在 v2.1.219 之前,两个命令仅显示裸失败状态,没有状态代码或服务器的错误文本。

308 

309当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码而失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如 `https://mcp.example.com`)。

310 

311* 路径和查询从不出现在该消息中。

312* 对于本地、项目、用户 [范围](#mcp-installation-scopes) 中的服务器或托管 MCP 配置中的服务器,来源显示该配置中写入的主机,因此主机中的 `${VAR}` 引用在消息中不会展开。

313* 对于没有状态或错误代码的失败,Claude Code 显示错误文本而不显示来源。

314 

315配置为空 `url` 的远程服务器在 `/mcp`、`claude mcp list` 和 [`/plugin`](/docs/zh-CN/plugins) 管理器中显示为 `not configured`,Claude Code 不尝试连接到它。插件可以包含这样的占位符条目,用于您稍后配置的连接器,因此 Claude Code 不将其报告为错误或设置问题。`/mcp` 中服务器的详情视图读取 `No URL configured for this server`;设置条目的 `url` 以连接它。在 v2.1.208 之前,Claude Code 将空 `url` 报告为配置问题,并提示重新连接。

316 

317<h4 id="configuration-warnings">

318 配置警告

319</h4>

320 

321Claude Code 警告以下配置问题。每个条目说明 Claude Code 检查什么以及如何清除警告:

322 

323* **隐藏的空格**:当 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 不修剪空格并完全按照写入的方式使用值,因此编辑配置以删除它。

324* **在多个范围中具有相同名称**:如果您在多个 [范围](#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 密钥。

325* **保留名称**:Claude Code 保留其内置服务器的名称,包括 `workspace`、`claude-in-chrome`、`computer-use`、`Claude Preview` 和 `Claude Browser`。如果您的配置定义了具有保留名称的服务器,Claude Code 在加载时跳过它并显示警告,要求您重命名它。`claude mcp add` 拒绝带有错误的保留名称。`Claude Preview` 和 `Claude Browser` 都命名 [Claude Code 桌面应用的预览窗格](/docs/zh-CN/desktop#preview-your-app) 使用的内置服务器。在 v2.1.205 之前,`Claude Browser` 未被保留,因此用户配置的服务器可以在该名称下注册。

326* **缺少环境变量**:如果 [`${VAR}` 引用](#environment-variable-expansion-in-mcp-json) 在服务器的配置中命名一个未设置且没有 `:-default` 的变量,Claude Code 在 `claude mcp list` 输出和 `/mcp` 中警告,命名变量,并仍然加载服务器,`${VAR}` 文本未展开。设置变量或添加 `${VAR:-default}` 回退。

327 

328<h4 id="tool-availability">

329 工具可用性

330</h4>

331 

332`/mcp` 面板在每个连接的服务器旁边显示工具计数,并标记声称工具功能但不公开工具的服务器。

333 

334如果您的请求需要来自仍在后台连接的服务器的工具,Claude 会在继续之前等待该服务器。等待的方式取决于您的配置:

335 

336* **使用 [工具搜索](#scale-with-mcp-tool-search)(默认)**:等待发生在 `ToolSearch` 调用内。

337* **不使用工具搜索**:Claude 改用 `WaitForMcpServers` 工具。不使用工具搜索的配置包括自定义 `ANTHROPIC_BASE_URL`、`ENABLE_TOOL_SEARCH=false` 和 Google Cloud 的 Agent Platform 上早于 Claude 4.5 代的模型。

338* **在 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 的下一个请求中变为可用。

339 

340启用工具搜索后,当服务器在 Claude 工作时完成连接时,Claude Code 在同一轮的下一个请求中将服务器的工具名称列出给 Claude。Claude 然后可以搜索和调用这些工具,而无需等待您的下一条消息。

341 

342<h3 id="disable-a-server-without-removing-it">

343 禁用服务器而不删除它

344</h3>

345 

346在 `/mcp` 面板中切换服务器关闭,以停止 Claude Code 连接到它,而不会丢失其配置。Claude Code 仍然在 `/mcp` 中列出服务器,标记为禁用。

347 

348切换服务器时,Claude Code 在 `~/.claude.json` 中按项目记录您的选择,在两个涵盖不相交服务器集的列表之一中:

349 

350* `disabledMcpServers`:用户配置的服务器、插件服务器、您的组织 [通过托管设置提供](/docs/zh-CN/managed-mcp#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`)写入它。

351* `enabledMcpServers`:默认关闭的内置服务器(如 `computer-use`)的选择加入列表。Claude Code 仅当您在此处列出时才连接默认关闭的服务器。

352 

353Claude Code 为每个服务器查询恰好两个列表之一,因此两个列表都不会覆盖另一个。如果您将常规服务器添加到 `enabledMcpServers`,或将默认关闭的内置服务器添加到 `disabledMcpServers`,Claude Code 会忽略该条目。

354 

355`disabledMcpServers` 和 `enabledMcpServers` 与 [`enabledMcpjsonServers`](/docs/zh-CN/settings-reference#enabledmcpjsonservers) 和 [`disabledMcpjsonServers`](/docs/zh-CN/settings-reference#disabledmcpjsonservers) 无关,后者控制项目的 `.mcp.json` 文件中定义的服务器的批准。

356 

357<h3 id="mcp-client-runtimes">

358 MCP 客户端运行时

359</h3>

360 

361Claude 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 运行时。

362 

363在 Claude Code v2.1.232 或更高版本上,Claude Code 使用 v2 运行时。它在每次启动时选择一个运行时,并保持到您退出。当您运行它时,它使用 v1:

364 

365* 在 Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上,除非嵌入 Claude Code 的主机平台设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars)

366* 通过 [Claude 应用网关](/docs/zh-CN/claude-apps-gateway) 登录

367* 使用 [功能标志获取关闭](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)

368 

369在 v2 上,Claude Code 也:

370 

371* 询问 HTTP 和 claude.ai 连接器服务器是否支持较新的修订版,并与支持的服务器一起使用。它仅在您设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto` 时询问 stdio 服务器,并像 v1 一样连接到每个其他服务器。

372* 从 [它保持打开的流](#notification-streams-on-the-v2-runtime) 上的较新修订版的服务器接收 `list_changed` 通知。

373* 不注册在较新修订版上连接的 [通道](#push-messages-with-channels) 服务器,因为该修订版无法携带通道消息。

374* 失败 [MCP OAuth 登录](#authenticate-with-remote-mcp-servers),其授权响应命名意外的发行者。

375 

376Anthropic 可以使用 Claude Code 获取的功能标志将特定服务器保持在较早的协议上,或将其从该流中移除。

377 

378要自己选择运行时,请设置 [`MCP_SDK_GENERATION`](/docs/zh-CN/env-vars) 为 `v1` 或 `v2`。要决定 Claude Code 是否询问,请设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto` 或 `legacy`。在 Claude Code 默认使用 v1 的地方,固定 `v2` 不会使其询问,因此也设置 `auto`。

204 379 

205<h3 id="dynamic-tool-updates">380<h3 id="dynamic-tool-updates">

206 动态工具更新381 动态工具更新

207</h3>382</h3>

208 383 

209Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 会自动刷新来自该服务器的可用功能。384Claude Code 支持 MCP `list_changed` 通知,允许 MCP 服务器动态更新其可用工具、提示和资源,而无需您断开连接并重新连接。当 MCP 服务器发送 `list_changed` 通知时,Claude Code 自动刷新来自该服务器的可用功能。

385 

386如果刷新请求失败,Claude Code 保留服务器之前发现的工具、提示和资源,直到稍后的刷新成功。在 v2.1.214 之前,刷新期间的瞬时错误将服务器的工具、提示和资源替换为空列表。

387 

388<h4 id="notification-streams-on-the-v2-runtime">

389 v2 运行时上的通知流

390</h4>

391 

392在 [v2 运行时](#mcp-client-runtimes) 上,Claude Code 从 [它保持打开的流](#notification-streams-on-the-v2-runtime) 上的较新协议修订版的服务器接收 `list_changed` 通知。当流关闭时,Claude Code 重新打开它,有两个限制:

393 

394* **流在 10 秒内再次关闭**:Claude Code 重新打开它最多三次,然后停止该连接。

395* **流保持打开超过 10 秒,然后关闭**,如无服务器主机的流通常所做的那样:在一小时内五次重新打开后,Claude Code 等待大约六小时才能进行下一次。

396 

397在流重新打开之前,您保留服务器的最后获取的工具、提示和资源。要更快地获取其更改,请从 `/mcp` 重新连接服务器。

210 398 

211<h3 id="automatic-reconnection">399<h3 id="automatic-reconnection">

212 自动重新连接400 自动重新连接

213</h3>401</h3>

214 402 

215如果 HTTP 或 SSE 服务器在会话中途断开连接,Claude Code 会自动以指数退避方式重新连接:最多五次尝试,从一秒延迟开始,每次加倍。服务器在 `/mcp` 中显示为待处理状态,同时重新连接正在进行中。五次失败尝试后,服务器被标记为失败,您可以从 `/mcp` 手动重试。Stdio 服务器是本地进程,不会自动重新连接。403Claude Code 重新连接在会话中期断开的远程服务器,并在瞬时错误后重试 HTTP 或 SSE 服务器的首次连接。Stdio 服务器是本地进程,Claude Code 不会自动重新连接它们。

404 

405<h4 id="mid-session-drops-of-a-remote-server">

406 远程服务器的会话中期断开

407</h4>

408 

409Claude Code 使用指数退避重新连接断开的远程服务器:最多五次尝试,从一秒延迟开始,每次加倍。您看到的内容取决于您如何运行 Claude Code:

410 

411* **在交互式会话中**:`/mcp` 在 Claude Code 重新连接时显示服务器为待处理。在五次失败尝试后,Claude Code 将服务器标记为失败,或在服务器需要再次授权时标记为需要身份验证。您可以从 `/mcp` 手动重试。

412* **在 [`claude -p`](/docs/zh-CN/headless) 运行和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 会话中**:Claude Code 按相同的计划重新连接,没有 `/mcp` 面板显示尝试。

413 

414<h4 id="failed-first-connections">

415 失败的首次连接

416</h4>

216 417 

217相同的退避策略也适用于 HTTP 或 SSE 服务器在启动时初始连接失败的情况。从 v2.1.121 开始,Claude Code 在瞬时错误(如 5xx 响应、连接被拒绝或超时)上最多重试初始连接三次,如果仍然无法连接,则将服务器标记为失败。身份验证和未找到错误不会重试,因为它们需要配置更改才能解决。418当 HTTP 或 SSE 服务器的首次连接因瞬时错误(如 5xx 响应、连接被拒绝或超时)而失败时,Claude Code 最多重试三次。如果连接仍然失败,Claude Code 将服务器标记为失败。Claude Code 在启动时和在会话中期添加服务器时以这种方式重试。这包括 Claude Code 从其配置添加到 [云会话](/docs/zh-CN/claude-code-on-the-web) 的服务器和您使用 Agent SDK 的 [`setMcpServers()`](/docs/zh-CN/agent-sdk/typescript) 添加的服务器。

218 419 

219当配置的服务器无法连接时,Claude Code 告诉 Claude 哪个服务器失败及其连接错误,包括在 `ToolSearch` 结果中找不到匹配工具,因此 Claude 在其响应中报告连接失败。需要[工具搜索](#scale-with-mcp-tool-search),默认启用。在没有工具搜索的配置中,例如自定义 `ANTHROPIC_BASE_URL`、`ENABLE_TOOL_SEARCH=false` 或不支持工具搜索的模型,以及在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,Claude Code 不会向 Claude 报告失败的服务器连接。在 v2.1.205 之前,Claude Code 不会将连接错误传递给 Claude,Claude 可能会响应,就像失败的服务器的工具从未配置过一样。420Claude Code 在这些情况下不重试:

220 421 

221从 v2.1.191 开始,在成功连接后运行的功能发现请求(如 `tools/list`、`prompts/list` 和 `resources/list`)也会在短退避的情况下最多重试三次瞬时网络和服务器错误。身份验证错误、4xx 响应和请求超时不会重试。422* WebSocket 服务器的首次连接

423* 身份验证或未找到错误,因为它需要配置更改来解决。当 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 是服务器唯一的 `Authorization` 标头来源时,Claude Code 仍然重试身份验证错误,因为它在每次尝试时重新运行助手并可以获取新凭证

424 

425<h4 id="failed-discovery-requests">

426 失败的发现请求

427</h4>

428 

429服务器连接后,Claude Code 向其发送功能发现请求,例如 `tools/list`、`prompts/list` 和 `resources/list`。Claude Code 在瞬时网络或服务器错误后最多重试这些请求三次,短退避。它不重试身份验证错误、4xx 响应或请求超时。

430 

431<h4 id="how-claude-learns-that-a-server-failed">

432 Claude 如何了解服务器失败

433</h4>

434 

435Claude Code 是否告诉 Claude 配置的服务器无法连接取决于 [工具搜索](#scale-with-mcp-tool-search),默认打开:

436 

437* 使用工具搜索,Claude Code 告诉 Claude 哪个服务器失败及其连接错误,因此 Claude 在其响应中报告连接失败。Claude Code 在 `ToolSearch` 结果中包含相同的信息,这些结果找不到匹配的工具。

438* 在任何 [不使用工具搜索的配置](#configure-tool-search) 中,Claude Code 不向 Claude 报告失败的服务器连接。

222 439 

223<h3 id="push-messages-with-channels">440<h3 id="push-messages-with-channels">

224 使用频道推送消息441 使用通道推送消息

225</h3>442</h3>

226 443 

227MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 功能,并在启动时使用 `--channels` 标志选择加入。请参阅 [Channels](/docs/zh-CN/channels) 以使用官方支持的频道,或 [Channels reference](/docs/zh-CN/channels-reference) 以构建您自己的频道。444MCP 服务器也可以直接将消息推送到您的会话中,以便 Claude 可以对外部事件(如 CI 结果、监控警报或聊天消息)做出反应。要启用此功能,您的服务器声明 `claude/channel` 功能,您在启动时使用 `--channels` 标志选择加入。请参阅 [通道](/docs/zh-CN/channels) 以使用官方支持的通道,或 [通道参考](/docs/zh-CN/channels-reference) 以构建您自己的。

445 

446在 [v2 运行时](#mcp-client-runtimes) 上,如果您设置 [`MCP_PROTOCOL_NEGOTIATION`](/docs/zh-CN/env-vars) 为 `auto` 并且通道服务器协商 MCP 协议修订版 2026-07-28,它无法传递通道消息,因此 Claude Code 不将其注册为通道。保留变量未设置,或将其设置为 `legacy`,将 stdio 服务器保持在较早的握手上。

228 447 

229<Tip>448<Tip>

230 提示:449 提示:

231 450 

232 * 使用 `-s` 或 `--scope` 标志指定配置的存储位置:451 * 使用 `-s` 或 `--scope` 标志指定配置的存储位置:

233 * `local`(默认):仅在当前项目中对您可用。较旧版本称此范围为 `project`452 * `local`(默认):仅在当前项目中对您可用

234 * `project`:通过 `.mcp.json` 文件与项目中的每个人共享453 * `project`:通过 `.mcp.json` 文件与项目中的每个人共享

235 * `user`:在所有项目中对您可用。较旧版本称此范围为 `global`454 * `user`:在所有项目中对您可用

236 * 使用 `-e` 或 `--env` 标志设置环境变量(例如,`-e KEY=value`)455 * 使用 `-e` 或 `--env` 标志设置环境变量(例如,`-e KEY=value`)

237 * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 短形式456 * `--transport` 和 `--header` 标志也接受 `-t` 和 `-H` 短形式

238 * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时(例如,`MCP_TIMEOUT=10000 claude` 设置 10 秒超时)457 * 使用 `MCP_TIMEOUT` 环境变量配置 MCP 服务器启动超时(例如,`MCP_TIMEOUT=10000 claude` 设置 10 秒超时)

239 * 通过向该服务器的 `.mcp.json` 条目添加 `timeout` 字段(以毫秒为单位)来设置每个服务器的工具执行超时,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量458 * 通过在该服务器的 `.mcp.json` 条目中添加 `timeout` 字段(以毫秒为单位)来设置每个服务器的工具执行超时,例如 `"timeout": 600000` 表示十分钟。这仅对该服务器覆盖 `MCP_TOOL_TIMEOUT` 环境变量

240 * 当 MCP 工具输出超过 10,000 个令牌时,Claude Code 将显示警告,并默认将输出限制为 25,000 个令牌。要增加此限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量(例如,`MAX_MCP_OUTPUT_TOKENS=50000`);警告阈值是固定的。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)459 * 当 MCP 工具输出超过 10,000 个令牌时,Claude Code 显示警告,默认限制输出为 25,000 个令牌。要提高限制,请设置 `MAX_MCP_OUTPUT_TOKENS` 环境变量(例如,`MAX_MCP_OUTPUT_TOKENS=50000`);警告阈值是固定的。请参阅 [MCP 输出限制和警告](#mcp-output-limits-and-warnings)

241 * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证460 * 使用 `/mcp` 对需要 OAuth 2.0 身份验证的远程服务器进行身份验证

242</Tip>461</Tip>

243 462 

244每个服务器的 `timeout` 是每个工具调用的硬时钟限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略,并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai connector](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 服务器,还有第二个每请求计时器,涵盖从每个请求到服务器第一个响应字节的时间。该计时器为 60 秒,除非您设置每个服务器的 `timeout` 或 `MCP_TOOL_TIMEOUT`;将任一设置为 60 秒或更高会将每请求计时器提高到该值,较低的值不会缩短它,未设置的 `MCP_TOOL_TIMEOUT` 的 28 小时默认值永远不会影响它。Stdio 和 WebSocket 服务器没有每请求计时器。在 v2.1.162 之前,低于 1000 的值被限制为一秒。463每个服务器的 `timeout` 是每个工具调用的硬墙钟限制,来自服务器的进度通知不会延长它。低于 1000 的值被忽略并回退到 `MCP_TOOL_TIMEOUT`,或在该变量未设置时回退到其约 28 小时的默认值。对于 HTTP、SSE 或 [claude.ai 连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai) 服务器,还有第二个每请求计时器,涵盖从服务器的第一个响应字节的每个请求。Claude Code 将该计时器设置为三个值中最大的:60 秒、适用于服务器的工具超时和 `MCP_TIMEOUT`。未设置的 `MCP_TOOL_TIMEOUT` 的 28 小时默认值不进入该比较,低于 60 秒的值不会缩短计时器。Stdio 和 WebSocket 服务器没有每请求计时器。

245 464 

246每个服务器至少 1000 的 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会因为空闲而在每个服务器的 `timeout` 之前中止该服务器的工具调用。需要 Claude Code v2.1.203 或更高版本。465至少 1000 的每个服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 从不因空闲而中止该服务器的工具调用早于每个服务器的 `timeout`。需要 Claude Code v2.1.203 或更高版本。

466 

467对在空闲窗口中不发送响应和不发送进度通知的 MCP 服务器的工具调用因错误而中止,而不是等待墙钟限制。空闲超时需要 Claude Code v2.1.187 或更高版本。它适用于除 IDE 服务器和 SDK 进程内服务器外的每个服务器类型。对于 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器,空闲窗口默认为五分钟,对于 stdio 服务器默认为 30 分钟。在 v2.1.203 之前,stdio 服务器免除空闲超时。

468 

469在 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量中以毫秒为单位设置以更改空闲窗口,或将其设置为 `0` 以禁用检查。

470 

471这些超时限制调用可以运行多长时间,不总是它阻止会话多长时间:在主对话中运行超过两分钟的主对话调用首先移动到后台任务。请参阅 [长工具调用的自动后台处理](#automatic-backgrounding-of-long-tool-calls)。

472 

473<h3 id="automatic-backgrounding-of-long-tool-calls">

474 长工具调用的自动后台处理

475</h3>

247 476 

248对 MCP 服务器的工具调用如果在空闲窗口内没有发送响应和进度通知,将以错误中止,而不是等待时钟限制。空闲超时需要 Claude Code v2.1.187 或更高版本。它适用于除 IDE 服务器和 SDK 进程内服务器之外的每种服务器类型。空闲窗口对于 HTTP、SSE、WebSocket 和 [claude.ai connector](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对于 stdio 服务器默认为 30 分钟。在 v2.1.203 之前,stdio 服务器不受空闲超时的限制。477在主对话中仍在运行两分钟后的 MCP 工具调用移动到后台任务,而不是阻止会话。Claude 立即接收任务 ID 并继续工作,结果在调用解决时作为任务通知到达。自动后台处理需要 Claude Code v2.1.212 或更高版本。

249 478 

250在毫秒中设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量以更改空闲窗口,或将其设置为 `0` 以禁用检查。479任务出现在 [`/tasks`](/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,它在退出会话时不会保留。每个调用的限制仍然适用于调用在后台运行时:由每个服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars) 设置的墙钟限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 设置的空闲超时。

480 

481在 [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](/docs/zh-CN/env-vars) 环境变量中以毫秒为单位设置以更改阈值,或将其设置为 `0` 以关闭自动后台处理。将 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 设置为 `1` 也会关闭它,以及所有其他后台任务功能。

482 

483某些调用从不移动到后台:

484 

485* 来自 [子代理](/docs/zh-CN/sub-agents) 的调用;Claude Code 仅后台处理主对话调用

486* 对 IDE 服务器的调用

487* 在 [非交互模式](/docs/zh-CN/headless) 中的调用,除非 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1`,因为一次性运行可能在结果到达之前结束

488 

489等待打开的 [引出对话](#respond-to-mcp-elicitation-requests) 的调用在对话打开时不会后台处理;服务器被阻止在您的输入上,而不是缓慢,因此 Claude Code 将移动推迟到对话关闭。

251 490 

252<h3 id="plugin-provided-mcp-servers">491<h3 id="plugin-provided-mcp-servers">

253 插件提供的 MCP 服务器492 插件提供的 MCP 服务器

254</h3>493</h3>

255 494 

256[Plugins](/docs/zh-CN/plugins) 可以捆绑 MCP 服务器,在启用插件时自动提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。495[插件](/docs/zh-CN/plugins) 可以捆绑 MCP 服务器,在您启用插件时提供工具和集成。插件 MCP 服务器的工作方式与用户配置的服务器相同。

257 496 

258**插件 MCP 服务器的工作原理**:497**插件 MCP 服务器如何工作**:

259 498 

260* 插件在插件根目录的 `.mcp.json` 中或在 `plugin.json` 中内联定义 MCP 服务器499* 插件在插件根目录或 `plugin.json` 中内联的 `.mcp.json` 中定义 MCP 服务器

261* 启用插件时,其 MCP 服务器会自动启动500* 当您启用插件时,Claude Code 自动启动其 MCP 服务器

262* 插件 MCP 工具与手动配置的 MCP 工具一起出现501* Claude Code 将插件 MCP 工具与手动配置的 MCP 工具一起提供

263* 插件服务器通过插件安装进行管理,不是 `/mcp` 命令502* 您通过安装或卸载插件添加和删除插件服务器,而不是使用 `/mcp` 命令。您仍然可以在 `/mcp` 中 [切换已安装的插件服务器关闭](#disable-a-server-without-removing-it),这会停止 Claude Code 连接到它而不删除插件

264 503 

265**示例插件 MCP 配置**:504**示例插件 MCP 配置**:

266 505 


296 535 

297**插件 MCP 功能**:536**插件 MCP 功能**:

298 537 

299* **自动生命周期**:在会话启动时,启用的插件的服务器会自动连接。如果您在会话期间启用或禁用插件,请运行 `/reload-plugins` 以连接或断开其 MCP 服务器538* **自动生命周期**:服务器在这些点连接和断开连接:

300* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其[持久状态](/docs/zh-CN/plugins-reference#persistent-data-directory)目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:539 * 在会话启动时,Claude Code 自动连接启用的插件的服务器。在 `/mcp` 中,您之前使用过的远程(HTTP 或 SSE)插件服务器可以显示 [`cached` 状态](#server-status-detail) 而不是;Claude Code 在 Claude 首次调用其工具之一时连接它

540 * 如果您在会话期间启用或禁用插件,Claude Code 在更改应用时连接或断开其 MCP 服务器。[在不重新启动的情况下应用插件更改](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 描述何时应用。在没有交互式终端的会话中,`/reload-plugins` 不连接或断开插件 MCP 服务器;这些更改在您的下一个会话中生效

541 * 当您重新加载时,Claude Code 保留配置未更改的插件服务器的实时连接,并在您从 Agent SDK 中 [替换会话的 MCP 服务器列表](/docs/zh-CN/agent-sdk/typescript#mcpsetserversresult) 而不命名它们时执行相同操作

542 * 当您在 v2.1.246 或更高版本上使用 `/cd` [移动会话](/docs/zh-CN/permissions#move-the-session-to-another-directory) 时,Claude Code 连接新目录的设置启用的插件的服务器,并断开不再启用的插件的服务器,因此您不需要在移动后运行 `/reload-plugins`

543 * 在 [网络会话](/docs/zh-CN/claude-code-on-the-web) 中,对尚未连接的插件服务器的 MCP 调用(例如在空闲会话唤醒后)按需启动服务器并等待其连接

544* **路径占位符**:`${CLAUDE_PLUGIN_ROOT}` 解析为插件的安装目录,`${CLAUDE_PLUGIN_DATA}` 解析为其 [持久状态](/docs/zh-CN/plugins-reference#persistent-data-directory) 目录,`${CLAUDE_PROJECT_DIR}` 解析为稳定的项目根目录。替换适用于:

301 * `stdio` 服务器:`command`、`args`、`env`545 * `stdio` 服务器:`command`、`args`、`env`

302 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`。在 v2.1.195 之前,`headersHelper` 将占位符作为字面字符串传递546 * `http`、`sse` 和 `ws` 服务器:`url`、`headers` 和 `headersHelper`。在 v2.1.195 之前,`headersHelper` 将占位符作为文字字符串传递

303* **用户环境访问**:访问与手动配置的服务器相同的环境变量547* **用户环境访问**:访问与手动配置的服务器相同的环境变量

304* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,尽管传输支持可能因服务器而异548* **多种传输类型**:支持 stdio、SSE、HTTP 和 WebSocket 传输,尽管传输支持可能因服务器而异

305 549 

306**查看插件 MCP 服务器**:550插件服务器在 `/mcp` 中出现,指示器显示它们来自插件。

307 

308```bash theme={null}

309# 在 Claude Code 中,查看所有 MCP 服务器,包括插件服务器

310/mcp

311```

312 

313插件服务器在列表中出现,并带有指示它们来自插件的指示符。

314 551 

315**插件 MCP 工具名称**:552**插件 MCP 工具名称**:

316 553 

317来自插件捆绑的 MCP 服务器的工具在其可调用名称中包括插件名称和服务器密钥。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具可调用为:554来自插件捆绑的 MCP 服务器的工具在其可调用名称中包含插件名称和服务器键。完整形式是 `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`,其中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符都被替换为 `_`。对于名为 `my-plugin` 的插件中捆绑的 `database-tools` 服务器,`query` 工具可调用为:

318 555 

319```556```

320mcp__plugin_my-plugin_database-tools__query557mcp__plugin_my-plugin_database-tools__query

321```558```

322 559 

323在[权限规则](/docs/zh-CN/permissions)中、技能的 `allowed-tools` 列表中、[子代理的 `tools` 字段](/docs/zh-CN/sub-agents#available-tools)中或[钩子匹配器](/docs/zh-CN/hooks#match-mcp-tools)中引用工具时,使用此完整名称。针对裸服务器密钥(如 `mcp__database-tools__.*`)编写的钩子匹配器永远不会对插件捆绑的服务器触发。560在 [权限规则](/docs/zh-CN/permissions) 中、技能的 `allowed-tools` 列表中、[子代理的 `tools` 字段](/docs/zh-CN/sub-agents#available-tools) 中或 [hook 匹配器](/docs/zh-CN/hooks#match-mcp-tools) 中引用工具时使用此完整名称。针对裸服务器键编写的 hook 匹配器(如 `mcp__database-tools__.*`)从不为插件捆绑的服务器触发。

324 561 

325服务器本身在作用域名称 `plugin:<plugin-name>:<server-name>`(如 `plugin:my-plugin:database-tools`)下注册。在需要配置的服务器名称的地方使用该名称,例如[`mcp_tool` 钩子的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。562服务器本身在作用域名称 `plugin:<plugin-name>:<server-name>` 下注册,例如 `plugin:my-plugin:database-tools`。在需要配置的服务器名称的地方使用该名称,例如 [`mcp_tool` hook 的 `server` 字段](/docs/zh-CN/hooks#mcp-tool-hook-fields)。

326 563 

327**插件 MCP 服务器的优势**:564有关使用插件捆绑 MCP 服务器的详细信息,请参阅 [插件组件参考](/docs/zh-CN/plugins-reference#mcp-servers)。

328 

329* **捆绑分发**:工具和服务器打包在一起

330* **自动设置**:无需手动 MCP 配置

331* **团队一致性**:安装插件时每个人都获得相同的工具

332 

333有关使用插件捆绑 MCP 服务器的详细信息,请参阅[插件组件参考](/docs/zh-CN/plugins-reference#mcp-servers)。

334 565 

335<h2 id="mcp-installation-scopes">566<h2 id="mcp-installation-scopes">

336 MCP 安装范围567 MCP 安装范围

337</h2>568</h2>

338 569 

339MCP 服务器可以在三个不同的范围级别进行配置。您选择的范围控制服务器在哪些项目中加载以及配置是否与您的团队共享。管理员还可以通过[托管配置](#managed-mcp-configuration)在企业级别部署服务器。570MCP 服务器可以在三个不同的范围级别进行配置。您选择的范围控制服务器在哪些项目中加载以及配置是否与您的团队共享。管理员还可以通过[托管配置](#managed-mcp-configuration)为每个用户部署或提供服务器。

340 571 

341| 范围 | 加载位置 | 与团队共享 | 存储位置 |572| 范围 | 加载位置 | 与团队共享 | 存储位置 |

342| -------------------- | ------ | -------- | ------------------- |573| -------------------- | ------ | -------- | ------------------- |


351本地范围是默认范围。本地范围的服务器仅在您添加它的项目中加载,并对您保持私密。Claude Code 将其存储在 `~/.claude.json` 中该项目的路径下,因此相同的服务器不会出现在您的其他项目中。对个人开发服务器、实验配置或包含您不想在版本控制中的凭据的服务器使用本地范围。582本地范围是默认范围。本地范围的服务器仅在您添加它的项目中加载,并对您保持私密。Claude Code 将其存储在 `~/.claude.json` 中该项目的路径下,因此相同的服务器不会出现在您的其他项目中。对个人开发服务器、实验配置或包含您不想在版本控制中的凭据的服务器使用本地范围。

352 583 

353<Note>584<Note>

354 MCP 服务器的"本地范围"术语与一般本地设置不同。MCP 本地范围的服务器存储在 `~/.claude.json`(您的主目录)中,而一般本地设置使用 `.claude/settings.local.json`(在项目目录中)。有关设置文件位置的详细信息,请参阅[设置](/docs/zh-CN/settings#settings-files)。585 MCP 服务器的"本地范围"术语与一般本地设置不同。MCP 本地范围的服务器存储在 `~/.claude.json`(您的主目录)中,而一般本地设置使用 `.claude/settings.local.json`(在项目目录中)。有关设置文件位置的详细信息,请参阅[设置](/docs/zh-CN/settings#where-settings-live)。

355</Note>586</Note>

356 587 

357```bash theme={null}588```bash theme={null}


383 项目范围614 项目范围

384</h3>615</h3>

385 616 

386项目范围的服务器通过在项目根目录中存储配置在 `.mcp.json` 文件中来启用团队协作。此文件设计为检入版本控制,确保所有团队成员都可以访问相同的 MCP 工具和服务。添加项目范围的服务器时,Claude Code 会自动创建或更新此文件,使用适当的配置结构。617项目范围的服务器通过在项目根目录中存储配置在 `.mcp.json` 文件中来启用团队协作。当您添加项目范围的服务器时,Claude Code 会自动创建或更新此文件,使用适当的配置结构。将 `.mcp.json` 检入版本控制,以便您团队中的每个人都能获得相同的 MCP 工具和服务。

387 618 

388```bash theme={null}619```bash theme={null}

389# 添加项目范围的服务器620# 添加项目范围的服务器

390claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp621claude mcp add --transport http shared-server --scope project https://example.com/mcp

391```622```

392 623 

393生成的 `.mcp.json` 文件遵循标准化格式:624生成的 `.mcp.json` 文件遵循标准化格式:


396{627{

397 "mcpServers": {628 "mcpServers": {

398 "shared-server": {629 "shared-server": {

399 "command": "/path/to/server",630 "type": "http",

400 "args": [],631 "url": "https://example.com/mcp"

401 "env": {}

402 }632 }

403 }633 }

404}634}

405```635```

406 636 

407出于安全原因,Claude Code 在使用来自 `.mcp.json` 文件的项目范围的服务器之前会提示批准。如果您需要重置这些批准选择,请使用 `claude mcp reset-project-choices` 命令。637出于安全原因,Claude Code 在交互式会话中使用来自 `.mcp.json` 文件的项目范围的服务器之前会提示批准。要重置这些批准选择,请运行 `claude mcp reset-project-choices`。

638 

639在 `claude -p` 运行、[Agent SDK](/docs/zh-CN/headless) 会话和[云会话](/docs/zh-CN/claude-code-on-the-web)中,Claude Code 无法显示该提示:它加载项目范围的服务器而不询问。Claude Code 还会在您以 `bypassPermissions` 模式启动的会话中跳过提示,其中用户设置或托管设置中设置了 [`skipDangerousModePermissionPrompt`](/docs/zh-CN/settings-reference#skipdangerousmodepermissionprompt)。要无论如何保持服务器不加载:

640 

641* 将其添加到 [`disabledMcpjsonServers`](/docs/zh-CN/settings-reference#disabledmcpjsonservers),这会在每个权限模式中阻止它。

642* 使用 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 或 SDK 的 `settingSources` 选项完全排除项目设置。

643* 使用 [`--strict-mcp-config`](/docs/zh-CN/cli-reference#cli-flags) 启动会话。Claude Code 随后仅使用您通过 `--mcp-config` 传递的 MCP 服务器。跳过 Claude Code 未加载的项目范围服务器的批准提示需要 Claude Code v2.1.246 或更高版本;在 v2.1.246 之前,严格会话仍然会等待它们的批准,这会导致后台会话在启动时等待。有关该标志在托管 MCP 文件下的作用,请参阅[使用 managed-mcp.json 进行独占控制](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json)。

644 

645[项目服务器批准和工作区信任](#project-server-approvals-and-workspace-trust)涵盖了提交到存储库的批准如何与工作区信任交互。

408 646 

409<h3 id="user-scope">647<h3 id="user-scope">

410 用户范围648 用户范围


431 669 

432三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。670三个范围按名称匹配重复项。插件和连接器按端点匹配,因此指向与上述服务器相同的 URL 或命令的连接器被视为重复项。

433 671 

672您的组织通过 [`managedMcpServers`](/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings) 托管设置提供的服务器排名高于所有这些,因此当其中一个重复它时,Claude Code 连接组织的定义。需要 Claude Code v2.1.259 或更高版本。

673 

674如果您在[桌面应用的代码选项卡](/docs/zh-CN/desktop#mcp-servers-from-the-claude-desktop-chat-app)中打开本地会话,其中 `~/.claude.json`(用户范围)的顶级和 `.mcp.json` 中具有相同的 stdio 服务器名称,代码选项卡使用 `~/.claude.json` 定义。

675 

434<h3 id="environment-variable-expansion-in-mcp-json">676<h3 id="environment-variable-expansion-in-mcp-json">

435 `.mcp.json` 中的环境变量扩展677 `.mcp.json` 中的环境变量扩展

436</h3>678</h3>


439 681 

440**支持的语法:**682**支持的语法:**

441 683 

442* `${VAR}` - 扩展为环境变量 `VAR` 的值684* `${VAR}`:扩展为环境变量 `VAR` 的值

443* `${VAR:-default}` - 如果设置了 `VAR`,则扩展为 `VAR`,否则使用 `default`685* `${VAR:-default}`:如果设置了 `VAR`,则扩展为 `VAR`,否则使用 `default`

444 686 

445**扩展位置:**687**扩展位置:**

446环境变量可以在以下位置扩展:688环境变量可以在以下位置扩展:

447 689 

448* `command` - 服务器可执行文件路径690* `command`:服务器可执行文件路径

449* `args` - 命令行参数691* `args`:命令行参数

450* `env` - 传递给服务器的环境变量692* `env`:传递给服务器的环境变量

451* `url` - 对于 HTTP 服务器类型693* `url`:对于 HTTP 服务器类型

452* `headers` - 对于 HTTP 服务器身份验证694* `headers`:对于 HTTP 服务器身份验证

453 695 

454**带有变量扩展的示例:**696**带有变量扩展的示例:**

455 697 


467}709}

468```710```

469 711 

470如果未设置所需的环境变量且没有默认值,Claude Code 会将文字 `${VAR}` 文本保留在值中,并为该服务器报告缺失变量警告。配置仍然会加载,因此请设置变量或添加 `:-default` 回退,以便服务器使用您想要的值启动。712如果未设置所需的环境变量且没有默认值,配置仍然会加载:Claude Code 在 `claude mcp list` 输出中为该服务器报告缺失变量警告,并按原样使用未扩展的 `${VAR}` 文本。设置变量或添加 `:-default` 回退,以便服务器使用您想要的值启动。

471 713 

472<h2 id="practical-examples">714<h2 id="practical-examples">

473 实际示例715 实际示例

474</h2>716</h2>

475 717 

476<h3 id="example-monitor-errors-with-sentry">

477 示例:使用 Sentry 监控错误

478</h3>

479 

480```bash theme={null}

481claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

482```

483 

484使用您的 Sentry 帐户进行身份验证:

485 

486```text theme={null}

487/mcp

488```

489 

490然后调试生产问题:

491 

492```text theme={null}

493过去 24 小时内最常见的错误是什么?

494```

495 

496```text theme={null}

497显示我错误 ID abc123 的堆栈跟踪

498```

499 

500```text theme={null}

501哪个部署引入了这些新错误?

502```

503 

504<h3 id="example-connect-to-github-for-code-reviews">718<h3 id="example-connect-to-github-for-code-reviews">

505 示例:连接到 GitHub 进行代码审查719 示例:连接到 GitHub 进行代码审查

506</h3>720</h3>


512 --header "Authorization: Bearer YOUR_GITHUB_PAT"726 --header "Authorization: Bearer YOUR_GITHUB_PAT"

513```727```

514 728 

729将 `YOUR_GITHUB_PAT` 替换为您的个人访问令牌。`claude mcp add` 命令保存配置而不验证凭据,因此此处接受占位符值,但服务器稍后无法连接。要验证连接,请运行 `/mcp` 并检查服务器是否显示 `connected`。具有错误凭据的服务器显示 `failed`,失败详情包括服务器返回的 HTTP 状态,例如 401。

730 

515然后使用 GitHub:731然后使用 GitHub:

516 732 

517```text theme={null}733```text wrap theme={null}

518审查 PR #456 并建议改进734审查 PR #456 并建议改进

519```735```

520 736 

521```text theme={null}737```text wrap theme={null}

522为我们刚发现的错误创建新问题738为我们刚发现的错误创建新问题

523```739```

524 740 

525```text theme={null}741```text wrap theme={null}

526显示分配给我的所有开放 PR742显示分配给我的所有开放 PR

527```743```

528 744 


530 示例:查询您的 PostgreSQL 数据库746 示例:查询您的 PostgreSQL 数据库

531</h3>747</h3>

532 748 

749[DBHub](https://github.com/bytebase/dbhub),`@bytebase/dbhub` 包,是一个 MCP 服务器,通过您在 `--dsn` 中传递的连接字符串将 Claude 连接到关系数据库。在连接字符串中使用只读数据库用户,以便 Claude 运行的查询无法修改数据:

750 

533```bash theme={null}751```bash theme={null}

534claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \752claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \

535 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"753 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

536```754```

537 755 

756要确认服务器启动,请运行 `/mcp` 并检查 `db` 是否显示 `connected`。

757 

538然后自然地查询您的数据库:758然后自然地查询您的数据库:

539 759 

540```text theme={null}760```text wrap theme={null}

541本月我们的总收入是多少?761本月我们的总收入是多少?

542```762```

543 763 

544```text theme={null}764```text wrap theme={null}

545显示订单表的架构765显示订单表的架构

546```766```

547 767 

548```text theme={null}768```text wrap theme={null}

549查找 90 天内未进行购买的客户769查找 90 天内未进行购买的客户

550```770```

551 771 


555 775 

556许多基于云的 MCP 服务器需要身份验证。Claude Code 支持 OAuth 2.0 以实现安全连接。776许多基于云的 MCP 服务器需要身份验证。Claude Code 支持 OAuth 2.0 以实现安全连接。

557 777 

558Claude Code 将远程服务器标记为需要身份验证,当服务器响应 `401 Unauthorized` 或 `403 Forbidden` 时。对于您尚未登录的服务器,任一状态代码都会在 `/mcp` 中标记它,以便您可以完成 OAuth 流程。778Claude Code 将远程服务器标记为需要身份验证,当服务器响应 `401 Unauthorized` 或 `403 Forbidden` 时。Claude Code 显示的内容取决于服务器:

779 

780* 对于您尚未登录的服务器,任一状态代码都会在 `/mcp` 中标记它,以便您可以完成 OAuth 流程。

781* 对于 [claude.ai 连接器](#use-mcp-servers-from-claude-ai),由 claude.ai 拒绝您的会话令牌导致的 `401` 不会标记连接器,因为重新授权连接器无法修复您的登录。Claude Code 改为显示 [会话令牌被拒绝状态](/docs/zh-CN/errors#claude-ai-rejected-the-session-token)。

782* 对于您在 `headers` 中配置了 `Authorization` 标头的服务器,或通过 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 配置的服务器,连接时的 `401` 或 `403` 不会标记服务器,因为要修复的凭据是您配置的凭据。Claude Code 改为报告连接失败。

783* 对于 [传递到云会话的连接器](#how-connectors-reach-claude-code),Claude Code 不运行登录流程,因为会话的代理使用您在 claude.ai 中授予的授权向连接器进行身份验证。当那里的连接器需要再次授权时,请在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 重新连接它,而不是从会话中重新连接。

559 784 

560当对您已登录的 OAuth 服务器的请求返回 `401 Unauthorized` 时,Claude Code 会刷新存储的令牌、重新连接并重试请求一次。只有在该重试也失败时,它才会在 `/mcp` 中标记服务器。在 v2.1.206 之前,由于网络错误等暂时性原因导致的令牌刷新失败会将 OAuth 服务器标记为在会话的其余时间需要身份验证,即使其刷新令牌仍然有效。785当对您已登录的 OAuth 服务器的请求返回 `401 Unauthorized` 时,Claude Code 会刷新存储的令牌、重新连接并重试请求一次。只有在该重试也失败时,它才会在 `/mcp` 中标记服务器。在 v2.1.206 之前,由于网络错误等暂时性原因导致的令牌刷新失败会将 OAuth 服务器标记为在会话的其余时间需要身份验证,即使其刷新令牌仍然有效。

561 786 

562从 v2.1.195 开始,当令牌刷新失败,因为服务器拒绝了存储的刷新令牌时,Claude Code 会立即显示一个指向 `/mcp` 的通知。连接的服务器的菜单中提供了"重新身份验证"选项,因此您可以在下一个工具调用失败之前重新登录。787当服务器拒绝存储的刷新令牌时,Claude Code 会立即显示一个指向 `/mcp` 的通知。打开 `/mcp` 并在服务器上选择 **Re-authenticate** 以在下一个工具调用失败之前重新登录。

563 788 

564返回指向其授权服务器的 `WWW-Authenticate` 标头的自定义服务器获得与任何其他远程服务器相同的自动发现。789返回指向其授权服务器的 `WWW-Authenticate` 标头的自定义服务器获得与任何其他远程服务器相同的自动发现。

565 790 

566从 v2.1.193 开始,当一个或多个配置的服务器需要身份验证时,Claude Code 也会在启动时显示通知,因此您无需打开 `/mcp` 来发现哪些服务器需要登录。791Claude Code 也会在启动时显示通知,当一个或多个配置的服务器需要身份验证时,这样您就不必打开 `/mcp` 来发现哪些服务器需要登录。该通知需要 Claude Code v2.1.193 或更高版本。它仅计算您可以从 Claude Code 登录的服务器。在 v2.1.218 之前,它还计算 [claude.ai 连接器](#use-mcp-servers-from-claude-ai),这些连接器在 claude.ai 中未连接,您只能从 claude.ai 设置中连接。

567 792 

568在非交互模式下,没有 `/mcp` 面板,因此 Claude Code 无法为您运行 OAuth 流程。从 v2.1.196 开始,当配置的服务器在 `claude -p` 或启用了[工具搜索](#scale-with-mcp-tool-search)的 Agent SDK 运行期间需要身份验证时(这是默认设置),Claude Code 会告诉 Claude 该服务器的工具不可用,直到您授权它。Claude 可以命名需要登录的服务器,而不是响应就像服务器未配置一样。从与 `/mcp` 的交互式会话或 `claude mcp login <name>` 完成登录。793在非交互模式下,没有 `/mcp` 面板,因此 Claude Code 无法为您运行 OAuth 流程。从 v2.1.196 开始,当配置的服务器在 `claude -p` 或启用了 [工具搜索](#scale-with-mcp-tool-search)(这是默认设置)的 Agent SDK 运行期间需要身份验证时,Claude Code 会告诉 Claude 该服务器的工具不可用,直到您授权它。Claude 可以命名需要登录的服务器,而不是响应就像服务器未配置一样。从与 `/mcp` 的交互式会话或 `claude mcp login <name>` 完成登录。

569 794 

570如果您为服务器配置了 `headers.Authorization`,而服务器拒绝了该标头,Claude Code 会将连接报告为失败,而不是回退到 OAuth。检查令牌对于 MCP 端点是否有效,或删除标头以使用 OAuth 流程。795如果您为服务器配置了 `headers.Authorization`,而服务器拒绝了该标头,Claude Code 会将连接报告为失败,而不是回退到 OAuth。检查令牌对于 MCP 端点是否有效,或删除标头以使用 OAuth 流程。

571 796 

572<Steps>797<Steps>

573 <Step title="添加需要身份验证的服务器">798 <Step title="添加需要身份验证的服务器">

574 例如:799 如果您已在 [MCP 快速入门](/docs/zh-CN/mcp-quickstart#connect-a-server-that-requires-sign-in) 中添加了 `sentry` 服务器,请跳过此步骤:使用相同的服务器名称在相同的范围再次运行 `claude mcp add` 会失败,出现 `MCP server sentry already exists in local config`。否则,运行:

575 800 

576 ```bash theme={null}801 ```bash theme={null}

577 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp802 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp


581 <Step title="在 Claude Code 中使用 /mcp 命令">806 <Step title="在 Claude Code 中使用 /mcp 命令">

582 在 Claude Code 中,使用命令:807 在 Claude Code 中,使用命令:

583 808 

584 ```text theme={null}809 ```text wrap theme={null}

585 /mcp810 /mcp

586 ```811 ```

587 812 


621 使用固定的 OAuth 回调端口846 使用固定的 OAuth 回调端口

622</h3>847</h3>

623 848 

624某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。849某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。如果 Claude Code v2.1.229 上的登录失败并出现重定向 URI 不匹配,请参阅 [使用预配置的 OAuth 凭据](#use-pre-configured-oauth-credentials) 下的版本说明。

625 850 

626您可以单独使用 `--callback-port`(使用动态客户端注册)或与 `--client-id` 一起使用(使用预配置的凭据)。851您可以单独使用 `--callback-port`(使用动态客户端注册)或与 `--client-id` 一起使用(使用预配置的凭据)。

627 852 


643 通过服务器的开发者门户创建应用,并记下您的客户端 ID 和客户端密钥。868 通过服务器的开发者门户创建应用,并记下您的客户端 ID 和客户端密钥。

644 869 

645 许多服务器还需要重定向 URI。如果是这样,请选择一个端口并以 `http://localhost:PORT/callback` 的格式注册重定向 URI。在下一步中使用该相同的端口与 `--callback-port`。870 许多服务器还需要重定向 URI。如果是这样,请选择一个端口并以 `http://localhost:PORT/callback` 的格式注册重定向 URI。在下一步中使用该相同的端口与 `--callback-port`。

871 

872 在 v2.1.229 中,Claude Code 发送了 `http://127.0.0.1:PORT/callback`,而精确匹配注册重定向 URI 的服务器拒绝了登录,出现重定向 URI 不匹配。Claude Code v2.1.231 恢复了 `localhost` 形式。要在 v2.1.229 上恢复,请升级 Claude Code,或临时将 `http://127.0.0.1:PORT/callback` 形式添加到服务器的注册重定向 URI。

646 </Step>873 </Step>

647 874 

648 <Step title="使用您的凭据添加服务器">875 <Step title="使用您的凭据添加服务器">

649 选择以下方法之一。用于 `--callback-port` 的端口可以是任何可用的端口。它只需要与您在上一步中注册的重定向 URI 匹配。876 选择以下方法之一。用于 `--callback-port` 的端口可以是任何可用的端口。它需要与您在上一步中注册的重定向 URI 匹配。

650 877 

651 <Tabs>878 <Tabs>

652 <Tab title="claude mcp add">879 <Tab title="claude mcp add">


699 提示:926 提示:

700 927 

701 * 客户端密钥安全地存储在您的系统钥匙链(macOS)或凭据文件中,而不是在您的配置中928 * 客户端密钥安全地存储在您的系统钥匙链(macOS)或凭据文件中,而不是在您的配置中

929 * 您只能在添加服务器时设置客户端密钥。当您使用 `claude mcp login` 或从 `/mcp` 进行身份验证时,Claude Code 使用存储的密钥,不会提示输入或读取 `MCP_CLIENT_SECRET`

930 * 要稍后添加或更改密钥,请使用 `claude mcp remove <name>` 删除服务器,然后使用 `--client-secret` 和相同的 `--scope` 再次添加它

702 * 如果服务器使用没有密钥的公共 OAuth 客户端,仅使用 `--client-id` 而不使用 `--client-secret`931 * 如果服务器使用没有密钥的公共 OAuth 客户端,仅使用 `--client-id` 而不使用 `--client-secret`

703 * `--callback-port` 可以与或不与 `--client-id` 一起使用

704 * 这些标志仅适用于 HTTP 和 SSE 传输。它们对 stdio 服务器没有影响932 * 这些标志仅适用于 HTTP 和 SSE 传输。它们对 stdio 服务器没有影响

705 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据933 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据

706</Tip>934</Tip>


792**要求:**1020**要求:**

793 1021 

794* 命令必须将字符串键值对的 JSON 对象写入标准输出1022* 命令必须将字符串键值对的 JSON 对象写入标准输出

795* 命令在 shell 中运行,超时时间为 10 秒,从会话的当前工作目录运行。对脚本使用绝对路径或 `PATH` 上的命令1023* Claude Code 在 shell 中运行命令,并在 10 秒后放弃

1024* Claude Code 根据 [您配置服务器的位置](#where-the-helper-runs) 选择命令的工作目录,因此请将脚本作为绝对路径或放在 `PATH` 上

796* 动态标头覆盖任何具有相同名称的静态 `headers`1025* 动态标头覆盖任何具有相同名称的静态 `headers`

797 1026 

798助手在每次连接时运行(在会话启动和重新连接时)。没有缓存,因此您的脚本负责任何令牌重用。1027Claude Code 在每次连接时运行助手,在会话启动和重新连接时,一旦 [项目和本地范围服务器的信任规则](#trust-a-folder-before-its-headershelper-runs) 允许它运行。它不缓存结果,因此您的脚本负责任何令牌重用。

1028 

1029如果工具调用返回 `401 Unauthorized` 或 `403 Forbidden`,Claude Code 会自动在相同规则下重新运行助手,使用新标头重新连接,并重试调用一次。只有在该重试也失败时,Claude Code 才会在 `/mcp` 中将服务器标记为需要身份验证。

1030 

1031当助手的输出包含 `Authorization` 标头时,Claude Code 使用该凭据作为服务器的身份验证,不会回退到 OAuth。

799 1032 

800从 v2.1.193 开始,如果工具调用返回 `401 Unauthorized` 或 `403 Forbidden`,Claude Code 会自动重新运行助手,使用新标头重新连接,并重试调用一次。只有在该重试也失败时,Claude Code 才会在 `/mcp` 中将服务器标记为需要身份验证。1033如果服务器在连接时拒绝助手的凭据,Claude Code 会报告连接失败,而不是将服务器标记为需要身份验证。修复您的助手返回的凭据,然后从 `/mcp` 重新连接以重新运行助手。

801 1034 

802Claude Code 在执行助手时设置这些环境变量:1035Claude Code 在执行助手时设置这些环境变量:

803 1036 

804| 变量 | 值 |1037| 变量 | 值 |

805| :---------------------------- | :---------------------------------------------------------- |1038| :---------------------------- | :------------------------------------------------------------ |

806| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 服务器的名称 |1039| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 服务器的名称 |

807| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 服务器的 URL |1040| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 服务器的 URL |

808| `CLAUDE_PLUGIN_ROOT` | 插件的根目录。仅当[插件](/docs/zh-CN/plugins-reference#mcp-servers)提供服务器时设置 |1041| `CLAUDE_PLUGIN_ROOT` | 插件的根目录。仅当 [插件](/docs/zh-CN/plugins-reference#mcp-servers) 提供服务器时设置 |

809 1042 

810使用这些来编写一个为多个 MCP 服务器服务的单个助手脚本。1043使用这些来编写一个为多个 MCP 服务器服务的单个助手脚本。

811 1044 

812对于插件提供的服务器,助手也会在其工作目录设置为插件根目录的情况下运行,因此相对 `headersHelper` 路径在插件目录内解析,而不是针对会话的工作目录。需要 Claude Code v2.1.195 或更高版本。1045插件提供的 `headersHelper` 无法引用插件的 [`${user_config.*}`](/docs/zh-CN/plugins-reference#user-configuration) 值,因为命令通过 shell 运行。Claude Code 报告服务器配置错误,并显示 [错误](/docs/zh-CN/errors#plugin-command-references-user-config),不替换该值。将 `${user_config.KEY}` 放在服务器的 `headers` 字段中,该字段不会被 shell 解析,或让助手脚本从配置文件中读取该值。在 v2.1.207 之前,`headersHelper` 替换了 `${user_config.*}` 值。

813 1046 

814插件提供的 `headersHelper` 无法引用插件的 [`${user_config.*}`](/docs/zh-CN/plugins-reference#user-configuration) 值,因为命令通过 shell 运行。Claude Code 报告服务器配置错误,并显示[错误](/docs/zh-CN/errors#plugin-command-references-user-config),不替换该值。将 `${user_config.KEY}` 放在服务器的 `headers` 字段中,该字段不会被 shell 解析,或让助手脚本从其自己的环境或配置文件中读取该值。在 v2.1.207 之前,`headersHelper` 替换了 `${user_config.*}` 值。1047<h4 id="where-the-helper-runs">

1048 助手运行的位置

1049</h4>

815 1050 

816<Note>1051Claude Code 根据声明服务器的配置选择 `headersHelper` 命令的工作目录。Claude Code 在 Bash 中运行的 `cd` 不会移动它,[`/cd`](/docs/zh-CN/permissions#move-the-session-to-another-directory) 仅对从会话主工作目录运行的服务器移动它。下表给出了相对路径在您的 `headersHelper` 命令中解析的目录。

817 `headersHelper` 执行任意 shell 命令。在项目或本地范围定义时,它仅在您接受工作区信任对话框后运行。1052 

818</Note>1053| 您配置服务器的位置 | 工作目录 |

1054| :----------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |

1055| [插件](/docs/zh-CN/plugins-reference#mcp-servers) | 插件的根目录。需要 Claude Code v2.1.195 或更高版本 |

1056| 项目 `.mcp.json` 或 [本地范围](#local-scope) 服务器 | 声明服务器的项目目录 |

1057| 项目中的代理文件、来自 SDK 的 `mcpServers` 选项或 `setMcpServers()` 方法的服务器,或 [`--mcp-config`](/docs/zh-CN/cli-reference) | 会话的 [主工作目录](/docs/zh-CN/permissions#working-directories) |

1058| [用户范围](#user-scope)、[托管 MCP](/docs/zh-CN/managed-mcp)、[claude.ai 连接器](#use-mcp-servers-from-claude-ai),或项目外的代理文件,包括来自 `--add-dir` 目录的代理文件 | 您的配置目录,`~/.claude` 除非您设置了 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) |

1059 

1060在 v2.1.238 之前,Claude Code 也从您启动它的目录运行用户范围、托管和 claude.ai 连接器服务器的助手,以及来自项目外的代理文件。

1061 

1062<h4 id="which-variables-a-helper-can-read">

1063 助手可以读取哪些变量

1064</h4>

1065 

1066存储库或插件提供的 `headersHelper` 是您没有编写的命令,因此 Claude Code 运行它时不会从您的环境中提供凭据变量,例如 `ANTHROPIC_API_KEY`。您配置服务器的位置决定了这是否适用:

1067 

1068* **已删除**:项目 `.mcp.json` 中的服务器或在插件中,以及来自您的项目或 `--add-dir` 目录的代理文件中的内联服务器

1069* **未删除**:[用户](#user-scope) 或 [本地范围](#local-scope) 的服务器、[托管 MCP](/docs/zh-CN/managed-mcp) 中的服务器、来自 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 的服务器、由 SDK 或 [`--mcp-config`](/docs/zh-CN/cli-reference) 提供的服务器,以及来自 `~/.claude/agents/`、托管设置或通过 `--agents` 传递的代理文件中的内联服务器

1070 

1071除了 Git 的 `GIT_CONFIG_KEY_<n>` 变量外,Claude Code 从您的环境中删除每个名称看起来像凭据的变量,例如名称中包含 `TOKEN`、`SECRET`、`PASSWORD`、`KEY` 或 `AUTH` 的变量(无论大小写),因此 `ANTHROPIC_API_KEY` 和 `MY_REGISTRY_TOKEN` 都被删除。Claude Code 也删除一个固定的凭据变量列表,其名称不遵循该模式,例如 `ANTHROPIC_CUSTOM_HEADERS`。

1072 

1073当这适用于您的助手时,让脚本从文件或凭据存储中读取其凭据。如果服务器的 `url` [展开这些变量之一](#environment-variable-expansion-in-mcp-json),助手接收的 `CLAUDE_CODE_MCP_SERVER_URL` 值也会将该部分替换为 `REDACTED`。

1074 

1075<h4 id="trust-a-folder-before-its-headershelper-runs">

1076 在 headersHelper 运行之前信任文件夹

1077</h4>

1078 

1079Claude Code 执行 `headersHelper` 作为任意 shell 命令。对于项目 `.mcp.json` 中的服务器或 [本地范围](#local-scope) 的服务器,它仅在您接受声明服务器的项目目录的 [信任对话框](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后运行助手。在 v2.1.238 之前,`claude -p` 或 SDK 会话运行这些助手而不检查信任,交互式会话在您信任父文件夹后运行它们。

1080 

1081* **不计入的信任**:父文件夹的信任,以及 `claude -p` 或 SDK 会话为 [设置文件中的 hooks](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 获得的自动信任

1082* **直到您信任文件夹**:Claude Code 仅使用其静态 `headers` 连接服务器。在 `claude -p` 或 SDK 会话中,它也会向 stderr 打印每个服务器一行 [`headersHelper not run`](/docs/zh-CN/errors#headershelper-not-run),告诉您如何授予信任。

1083* **无对话框的信任**:在 `~/.claude.json` 中设置 `projects["<path>"].hasTrustDialogAccepted` 为 `true`。`<path>` 是文件夹 [项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 说 Claude Code 将信任键入的位置。

1084 

1085Claude Code 对在 [代理文件](/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent) 中声明的服务器应用相同的规则,检查该代理文件来自何处:您的项目(对于其 `.claude/agents/` 目录中的文件)或 `--add-dir` 目录。直到您 [信任该项目或目录本身](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder),Claude Code 不会加载服务器,因此其助手也永远不会运行。

819 1086 

820<h2 id="add-mcp-servers-from-json-configuration">1087<h2 id="add-mcp-servers-from-json-configuration">

821 从 JSON 配置添加 MCP 服务器1088 从 JSON 配置添加 MCP 服务器


896 使用来自 claude.ai 的 MCP 服务器1163 使用来自 claude.ai 的 MCP 服务器

897</h2>1164</h2>

898 1165 

899如果您已使用 [claude.ai](https://claude.ai) 帐户登录 Claude Code,您在 claude.ai 中添加的 MCP 服务器(称为 [connectors](https://claude.com/docs/connectors))会自动在 Claude Code 中可用:1166如果您已使用 [claude.ai](https://claude.ai) 账户登录 Claude Code,您在 claude.ai 中添加的 MCP 服务器(称为 [connectors](https://claude.com/docs/connectors))会自动在 Claude Code 中可用:

900 1167 

901<Steps>1168<Steps>

902 <Step title="在 claude.ai 中配置 MCP 服务器">1169 <Step title="在 claude.ai 中配置 MCP 服务器">

903 在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 添加服务器。在 Team 和 Enterprise 计划上,仅管理员可以添加服务器。1170 在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 添加服务器。在 Team 和 Enterprise 计划中,只有管理员可以添加服务器。

904 </Step>1171 </Step>

905 1172 

906 <Step title="对 MCP 服务器进行身份验证">1173 <Step title="对 MCP 服务器进行身份验证">


910 <Step title="在 Claude Code 中查看和管理服务器">1177 <Step title="在 Claude Code 中查看和管理服务器">

911 在 Claude Code 中,使用命令:1178 在 Claude Code 中,使用命令:

912 1179 

913 ```text theme={null}1180 ```text wrap theme={null}

914 /mcp1181 /mcp

915 ```1182 ```

916 1183 

917 claude.ai 服务器在列表中出现,并带有指示它们来自 claude.ai 的指示符。1184 来自 claude.ai 的服务器会出现在列表中,并带有指示符显示它们来自 claude.ai。

918 </Step>1185 </Step>

919</Steps>1186</Steps>

920 1187 

921从 v2.1.161 开始,您从未登录过的连接器会折叠在 claude.ai 部分末尾的 `Show unused connectors` 行后面,因此组织预配的列表不会填满面板。选择该行以展开它们。您之前登录过的连接器即使当前需要重新身份验证,也会保持可见。1188当您的组织在 claude.ai 中管理其身份验证时,Claude Code 在 `/mcp` 和 [`/plugin`](/docs/zh-CN/plugins) 管理器中将连接器标记为 `managed`。托管状态不会改变 Claude Code 连接到连接器的方式或应用您的组织的 [工具控制](#organization-controls-on-connector-tools)。

1189 

1190您从未登录过的连接器会在 claude.ai 部分末尾的 `Show unused connectors` 行后面折叠,因此组织预配的列表不会填满面板。选择该行以展开它们。您之前登录过的连接器即使当前需要重新身份验证,也会保持可见。

1191 

1192仅当您的活跃 [身份验证方法](/docs/zh-CN/authentication#authentication-precedence) 是 claude.ai 订阅登录时,才会从 claude.ai 获取连接器。即使您之前运行过 `/login`,在以下情况下也不会加载它们:

1193 

1194* `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 处于活跃状态

1195* Amazon Bedrock 或 Google Cloud 的 Agent Platform 等第三方提供商处于活跃状态

1196* `ANTHROPIC_PROFILE`、联合变量或活跃的 [Anthropic 配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials) 提供凭证

1197* `CLAUDE_CODE_OAUTH_TOKEN` 持有来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的令牌,该令牌只能进行模型请求

1198 

1199如果 `/mcp` 没有列出您添加的连接器,请运行 `/status` 以确认哪个身份验证方法处于活跃状态。取消设置该环境变量、删除 `apiKeyHelper` 设置或 [关闭配置文件](/docs/zh-CN/authentication#anthropic-profiles-and-federation-credentials),然后运行 `/login` 以选择您的 claude.ai 账户。

922 1200 

923Claude.ai 连接器仅在您的活跃[身份验证方法](/docs/zh-CN/authentication#authentication-precedence)是您的 claude.ai 订阅时才会被获取。当 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN`、`apiKeyHelper` 或第三方提供商(如 Amazon Bedrock 或 Google Cloud 的 Agent Platform)处于活跃状态时,它们不会被加载,即使您之前运行过 `/login`。如果 `/mcp` 未列出您添加的连接器,请运行 `/status` 以确认哪种身份验证方法处于活跃状态,取消设置该环境变量或删除 `apiKeyHelper` 设置,然后运行 `/login` 以选择您的 claude.ai 帐户。1201如果临时网络问题导致连接器列表在会话启动时无法加载,Claude Code 会在后台重试最多三次,连接器会在重试成功后出现。如果它们仍未出现,请重启 Claude Code 以再次获取列表。

1202 

1203如果 `/mcp` 显示连接器为 `connected · session token rejected`,或其详细视图显示 [`claude.ai rejected the session token`](/docs/zh-CN/errors#claude-ai-rejected-the-session-token),则 claude.ai 拒绝了来自您的 Claude Code 登录的令牌,通常是因为登录已过期且无法刷新。再次授权连接器不会清除此状态,因为被拒绝的不是连接器在 claude.ai 中的自身授权。要清除它:

1204 

12051. 运行 `/login` 以重新登录。

12062. 从 `/mcp` 重新连接连接器。

1207 

1208在 v2.1.222 之前,Claude Code 将连接器标记为需要身份验证,授权它们无法解决此问题。

924 1209 

925您在 Claude Code 中添加的服务器优先于指向相同 URL 的 claude.ai 连接器。发生这种情况时,`/mcp` 会将连接器列为隐藏,并显示如何删除重复项(如果您更希望使用连接器)。1210您在 Claude Code 中添加的服务器优先于指向相同 URL 的 claude.ai 连接器。发生这种情况时,`/mcp` 会将连接器列为隐藏,并显示如何删除重复项(如果您更希望使用连接器)。

926 1211 

927某些 Anthropic 托管的连接器(如 Microsoft 365、Gmail 和 Google Calendar)不支持来自 Claude Code 的本地 OAuth,因为上游身份提供商仅接受 claude.ai 注册的重定向 URL。从 v2.1.162 开始,在 `/mcp` 中对这些主机之一进行身份验证会显示一条消息,指导您改为在 claude.ai 上的"设置"→"连接器"中连接它。连接后,连接器会自动出现在 Claude Code 中。1212某些 Anthropic 托管的连接器(如 Microsoft 365、Gmail 和 Google Calendar)不支持来自 Claude Code 的本地 OAuth,因为上游身份提供商仅接受 claude.ai 注册的重定向 URL。当您使用 `claude mcp add` 或在 `.mcp.json` 中添加的服务器指向这些主机之一,并且您从 `/mcp` 或使用 `claude mcp login` 登录时,Claude Code 会显示 [`is Anthropic-hosted and doesn't support local OAuth`](/docs/zh-CN/errors#anthropic-hosted-and-doesnt-support-local-oauth),指导您改为在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 连接服务。

928 1213 

929<h3 id="organization-controls-on-connector-tools">1214使用 `claude mcp remove <name>` 删除您的条目并在 claude.ai 上连接服务后,连接器会自动出现在 Claude Code 中。

930 组织对连接器工具的控制1215 

1216<h3 id="how-connectors-reach-claude-code">

1217 连接器如何到达 Claude Code

931</h3>1218</h3>

932 1219 

933您的组织可以对 [claude.ai connectors](https://claude.com/docs/connectors) 设置按工具控制。Claude Code 在启动时读取这些设置并在本地强制执行。运行 `/mcp` 以查看哪个设置适用于连接器上的每个工具。1220哪些设置控制 claude.ai 连接器取决于您的会话在哪里运行,因为只有某些会话本身从 claude.ai 获取连接器。下表中的每一行命名了连接器在一种会话中的到达方式以及在那里控制它们的内容。桌面应用的 [WSL 会话](/docs/zh-CN/desktop-wsl#what-works-in-a-wsl-session) 没有行,因为连接器在其中尚不可用。

1221 

1222| 会话运行的位置 | 连接器如何到达 | 什么控制它们 |

1223| :----------------------------------------------------------------------------------------------------------------------- | :--------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |

1224| Terminal、[VS Code](/docs/zh-CN/vs-code)、[JetBrains](/docs/zh-CN/jetbrains) 和 [Agent SDK](/docs/zh-CN/agent-sdk/claude-code-features) 会话 | Claude Code 从 claude.ai 获取它们 | 本部分中的设置和 [托管 MCP 配置](/docs/zh-CN/managed-mcp) |

1225| [Cloud 会话](/docs/zh-CN/claude-code-on-the-web) | 远程主机传入它们 | 您的 claude.ai 组织设置,加上到达会话的 [allowlist 和 denylist](/docs/zh-CN/managed-mcp#policy-based-control-with-allowlists-and-denylists) 设置以及运行它的主机上的任何 `managed-mcp.json` |

1226| [桌面应用](/docs/zh-CN/desktop) 的本地和 SSH 会话 | 桌面应用在进程中传入它们 | 您的组织的 [连接器工具控制](#organization-controls-on-connector-tools) 中的 `blocked` 条目 |

934 1227 

935* **工具设置为 `ask`**:Claude Code 会在每次调用时提示,原因是 `Your organization requires approval for this tool`。即使在 `acceptEdits`、`auto` 和 `bypassPermissions` [permission modes](/docs/zh-CN/permissions#permission-modes) 中,提示也会出现,并且永远不会提供记住您选择的选项。匹配该工具的 [Allow rules](/docs/zh-CN/permissions) 也不会跳过提示。在 `dontAsk` 模式中(从不提示),Claude Code 会改为拒绝该调用。1228[`disableClaudeAiConnectors`](#disable-claude-ai-connectors)、`ENABLE_CLAUDEAI_MCP_SERVERS` 和 [`allowAllClaudeAiMcps`](/docs/zh-CN/settings-reference#allowallclaudeaimcps) 仅作用于第一行,即 Claude Code 本身获取的连接器。其他两行在这些方面与它不同:

936* **工具设置为 `blocked`**:Claude Code 在 Claude 看到之前过滤掉该工具,因此它永远不会出现在工具列表中。

937 1229 

938强制执行这些控制需要 Claude Code v2.1.129 或更高版本。早期版本会忽略这些设置并应用标准权限流程。1230* **Cloud 会话**:到达会话的 `allowedMcpServers` 和 `deniedMcpServers` 条目(例如通过 [服务器管理的设置](/docs/zh-CN/server-managed-settings))也会过滤传入的连接器。会话的代理会重写每个连接器的 URL,因此为连接器自身 URL 编写的 `serverUrl` 模式不会匹配它。要在自托管环境中的 URL allowlist 旁边允许传入的连接器,请添加 [连接器流量离开您的网络](/docs/zh-CN/self-hosted-environments-deploy#connector-traffic-leaves-your-network) 下列出的 `serverUrl` 条目。当运行会话的主机上存在 `managed-mcp.json` 时(例如 [自托管运行器主机](/docs/zh-CN/self-hosted-environments-configuration#mcp-servers)),Claude Code 会删除传入的连接器,无论您是否设置 `allowAllClaudeAiMcps`。

1231* **桌面应用本地和 SSH 会话**:桌面应用将连接器注册为进程内 `type: "sdk"` 服务器,没有 MCP 设置或 `managed-mcp.json` 到达它们。用户通过在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 断开连接器来将其排除在自己的会话之外。组织可以阻止连接器的 [工具](#organization-controls-on-connector-tools) 或完全 [关闭桌面应用中的 Claude Code](/docs/zh-CN/desktop#admin-console-controls)。

1232 

1233<h3 id="organization-controls-on-connector-tools">

1234 连接器工具的组织控制

1235</h3>

1236 

1237您的组织可以在 [claude.ai 连接器](https://claude.com/docs/connectors) 上设置每个工具的控制。Claude Code 在启动时读取这些设置并在本地强制执行它们,除了在桌面应用的 [本地和 SSH 会话](#how-connectors-reach-claude-code) 中。在那里,桌面应用在传入连接器之前扣留 `blocked` 工具,`ask` 设置不会到达 Claude Code,因此它将会话的普通 [权限规则](/docs/zh-CN/permissions) 应用于这些工具,而不是在每次调用时提示。在 Claude Code 本身获取连接器的会话中,运行 `/mcp` 以查看哪个设置适用于连接器上的每个工具。

1238 

1239* **工具设置为 `ask`**:Claude Code 在每次调用时提示,原因是 `Your organization requires approval for this tool`。即使在 `acceptEdits`、`auto` 和 `bypassPermissions` [权限模式](/docs/zh-CN/permissions#permission-modes) 中,提示也会出现,并且从不提供记住您的选择的选项。匹配工具的 [Allow 规则](/docs/zh-CN/permissions) 也不会跳过提示。在从不提示的 `dontAsk` 模式中,Claude Code 会改为拒绝调用。

1240* **工具设置为 `blocked`**:Claude Code 在 Claude 看到它之前过滤掉工具,因此它永远不会出现在工具列表中。桌面应用和 claude.ai 聊天应用相同的 `blocked` 设置,因此 Claude 也无法在那里使用该工具,您无法从桌面应用的会话中扣留工具,同时在聊天中保持其可用。桌面应用会跳过其所有工具都被阻止的连接器。

939 1241 

940<h3 id="disable-claude-ai-connectors">1242<h3 id="disable-claude-ai-connectors">

941 禁用 claude.ai 连接器1243 禁用 claude.ai 连接器

942</h3>1244</h3>

943 1245 

944要在 Claude Code 中禁用 claude.ai MCP 服务器,请将 [`disableClaudeAiConnectors`](/docs/zh-CN/settings#available-settings) 设置为 `true`(在任何设置范围内):1246Claude Code 仅将 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) 应用于它 [本身获取](#how-connectors-reach-claude-code) 的连接器,而不是云主机或桌面应用传入的连接器。要关闭它获取的连接器,请在任何设置范围中将设置设置为 `true`:

945 1247 

946```json theme={null}1248```json theme={null}

947{1249{


949}1251}

950```1252```

951 1253 

952此设置使用任意源为真的语义:任何设置源中的 `true` 优先。已检入的项目 `.claude/settings.json` 可以选择退出云连接器,但项目级别的 `false` 无法重新启用用户级别或策略级别的 `true` 已禁用的连接器。通过 `--mcp-config` 显式传递的服务器不受影响。1254此设置使用任何源为真的语义:任何设置源中的 `true` 优先。已检入的项目 `.claude/settings.json` 可以选择退出 Claude Code 本身获取的连接器,但项目级别的 `false` 无法重新启用用户或策略级别的 `true` 已禁用的连接器。通过 `--mcp-config` 显式传递的服务器不受影响。

953 1255 

954您也可以将 `ENABLE_CLAUDEAI_MCP_SERVERS` 环境变量设置为 `false`,这对当前 shell 会话具有相同的效果:1256您也可以将 `ENABLE_CLAUDEAI_MCP_SERVERS` 环境变量设置为 `false`,这对当前 shell 会话具有相同的效果:

955 1257 


957ENABLE_CLAUDEAI_MCP_SERVERS=false claude1259ENABLE_CLAUDEAI_MCP_SERVERS=false claude

958```1260```

959 1261 

960要阻止单个 claude.ai 连接器而不是全部,请按名称或 URL 模式将它们添加到 [`deniedMcpServers`](/docs/zh-CN/managed-mcp)。例如,`serverName` 条目 `"claude.ai Slack"` 会阻止 Slack 连接器。要仅为当前项目切换连接器的开启或关闭,请使用 `/mcp` 面板。1262要阻止单个 claude.ai 连接器而不是全部,请按名称或 URL 模式将它们添加到 [`deniedMcpServers`](/docs/zh-CN/managed-mcp)。例如,`serverName` 条目 `"claude.ai Slack"` 会阻止 Slack 连接器。您也可以运行 `/mcp` 以仅为当前项目切换 Claude Code 获取的任何连接器的开关。

961 

962<Note>

963 这些客户端设置管理本地 Claude Code 会话。在 [Claude Code on the web](/docs/zh-CN/claude-code-on-the-web) 会话中,claude.ai 连接器由远程主机预配,并作为显式 `--mcp-config` 条目到达,因此 `disableClaudeAiConnectors` 不适用。连接器 URL 也通过会话代理重写,因此针对供应商 URL 的 `deniedMcpServers` `serverUrl` 模式将不匹配。从您的 claude.ai 组织设置管理云会话可以使用哪些连接器。

964</Note>

965 1263 

966<h2 id="use-claude-code-as-an-mcp-server">1264<h2 id="use-claude-code-as-an-mcp-server">

967 将 Claude Code 用作 MCP 服务器1265 将 Claude Code 用作 MCP 服务器


974claude mcp serve1272claude mcp serve

975```1273```

976 1274 

1275该命令启动时不会打印任何内容。stdio MCP 服务器通过 stdin 和 stdout 进行通信,因此沉默的、被阻止的终端意味着服务器正在运行并等待客户端连接。

1276 

977您可以通过将此配置添加到 claude\_desktop\_config.json 在 Claude Desktop 中使用它:1277您可以通过将此配置添加到 claude\_desktop\_config.json 在 Claude Desktop 中使用它:

978 1278 

979```json theme={null}1279```json theme={null}


990```1290```

991 1291 

992<Warning>1292<Warning>

993 **配置可执行文件路径**:`command` 字段必须引用 Claude Code 可执行文件。如果 `claude` 命令不在您的系统 PATH 中,您需要指定可执行文件的完整路径。1293 **配置可执行文件路径**:`command` 字段必须引用 Claude Code 可执行文件。如果 `claude` 命令不在您系统的 PATH 中,您需要指定可执行文件的完整路径。

994 1294 

995 要查找完整路径:1295 要查找完整路径:

996 1296 


1013 }1313 }

1014 ```1314 ```

1015 1315 

1016 没有正确的可执行文件路径,您会遇到类似 `spawn claude ENOENT` 的错误。1316 如果没有正确的可执行文件路径,您会遇到类似 `spawn claude ENOENT` 的错误。

1017</Warning>1317</Warning>

1018 1318 

1019<Tip>1319<Tip>

1020 提示:1320 提示:

1021 1321 

1022 * 服务器提供对 Claude 的工具(如 View、Edit、LS 等)的访问权限。1322 * 在 Claude Desktop 中,尝试要求 Claude 读取目录中的文件、进行编辑等操作。

1023 * 在 Claude Desktop 中,尝试要求 Claude 读取目录中的文件、进行编辑等。1323 * 此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为各个工具调用实现用户确认。

1024 * 此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为单个工具调用实现用户确认。

1025</Tip>1324</Tip>

1026 1325 

1027<h2 id="mcp-output-limits-and-warnings">1326<h2 id="mcp-output-limits-and-warnings">

1028 MCP 输出限制和警告1327 MCP 输出限制和警告

1029</h2>1328</h2>

1030 1329 

1031当 MCP 工具产生大量输出时,Claude Code 可帮助管理令牌使用情况,以防止压倒您的对话上下文:1330当 MCP 工具产生大量输出时,Claude Code 会帮助管理令牌使用情况,以防止压倒您的对话上下文:

1032 1331 

1033* **输出警告阈值**:当任何 MCP 工具输出超过 10,000 个令牌时,Claude Code 显示警告1332* **输出警告阈值**:当任何 MCP 工具输出超过 10,000 个令牌时,Claude Code 会显示警告

1034* **可配置限制**:您可以使用 `MAX_MCP_OUTPUT_TOKENS` 环境变量调整最大允许的 MCP 输出令牌1333* **可配置限制**:您可以使用 `MAX_MCP_OUTPUT_TOKENS` 环境变量调整允许的最大 MCP 输出令牌数

1035* **默认限制**:默认最大值为 25,000 个令牌1334* **默认限制**:默认最大值为 25,000 个令牌

1036* **范围**:环境变量适用于不声明自己限制的工具。声明 [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) 的工具对文本内容使用该值,无论 `MAX_MCP_OUTPUT_TOKENS` 设置为什么。返回图像数据的工具仍受 `MAX_MCP_OUTPUT_TOKENS` 限制1335* **范围**:环境变量适用于未声明自己限制的工具。设置了 [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) 的工具会对文本内容使用该值,而不管 `MAX_MCP_OUTPUT_TOKENS` 设置为什么。返回图像数据的工具仍然受 `MAX_MCP_OUTPUT_TOKENS` 限制

1336* **超过限制**:当没有图像内容的结果超过限制时,Claude Code 会将其保存到文件中,并在对话中用一条消息替换它,该消息指定文件路径,以便 Claude 在需要内容时读取该文件。该文件位于会话的 `tool-results` 目录中,在 [`~/.claude/projects/`](/docs/zh-CN/claude-directory#cleaned-up-automatically) 下。

1037 1337 

1038要为产生大量输出的工具增加限制:1338要增加产生大量输出的工具的限制:

1039 1339 

1040```bash theme={null}1340```bash theme={null}

1041export MAX_MCP_OUTPUT_TOKENS=500001341export MAX_MCP_OUTPUT_TOKENS=50000

1042claude1342claude

1043```1343```

1044 1344 

1045这在使用以下 MCP 服务器时特别有用:

1046 

1047* 查询大型数据集或数据库

1048* 生成详细的报告或文档

1049* 处理广泛的日志文件或调试信息

1050 

1051<h3 id="raise-the-limit-for-a-specific-tool">1345<h3 id="raise-the-limit-for-a-specific-tool">

1052 为特定工具提高限制1346 为特定工具提高限制

1053</h3>1347</h3>

1054 1348 

1055如果您正在构建 MCP 服务器,您可以通过在工具的 `tools/list` 响应条目中设置 `_meta["anthropic/maxResultSizeChars"]` 来允许单个工具返回大于默认持久化到磁盘阈值的结果。Claude Code 将该工具的阈值提高到注释值,最高为 500,000 个字符的硬上限。1349如果您正在构建 MCP 服务器,可以通过在工具的 `tools/list` 响应条目中设置 `_meta["anthropic/maxResultSizeChars"]` 来允许单个工具返回超过默认持久化到磁盘阈值的结果。Claude Code 会将该工具的阈值提高到注释值,最高可达 500,000 个字符的硬上限。

1056 1350 

1057这对于返回本质上很大但必要的输出的工具很有用,例如数据库架构或完整文件树。没有注释,超过默认阈值的结果会被持久化到磁盘,并在对话中被文件引用替换。1351这对于返回本质上很大但必要的输出的工具很有用,例如数据库架构或完整文件树。如果没有注释,超过默认阈值的结果会被持久化到磁盘,并在对话中被替换为文件引用。

1058 1352 

1059```json theme={null}1353```json theme={null}

1060{1354{


1066}1360}

1067```1361```

1068 1362 

1069对于文本内容,注释独立于 `MAX_MCP_OUTPUT_TOKENS` 应用,因此用户不需要为声明它的工具提高环境变量。返回图像数据的工具仍受令牌限制。1363该注释对文本内容独立于 `MAX_MCP_OUTPUT_TOKENS` 应用,因此用户不需要为声明它的工具提高环境变量。返回图像数据的工具仍然受令牌限制。

1070 1364 

1071<Warning>1365<Warning>

1072 如果您经常遇到特定 MCP 服务器的输出警告,而您不控制这些服务器,请考虑增加 `MAX_MCP_OUTPUT_TOKENS` 限制。您也可以要求服务器作者添加 `anthropic/maxResultSizeChars` 注释或对其响应进行分页。注释对返回图像内容的工具没有影响;对于这些,提高 `MAX_MCP_OUTPUT_TOKENS` 是唯一的选择。1366 如果您经常遇到特定 MCP 服务器的输出警告,而您无法控制这些服务器,请考虑增加 `MAX_MCP_OUTPUT_TOKENS` 限制。您也可以要求服务器作者添加 `anthropic/maxResultSizeChars` 注释或对其响应进行分页。该注释对返回图像内容的工具无效;对于这些工具,提高 `MAX_MCP_OUTPUT_TOKENS` 是唯一的选择。

1073</Warning>1367</Warning>

1074 1368 

1075<h2 id="tool-input-schemas-with-a-root-level-combinator">1369<h2 id="tool-input-schemas-with-a-root-level-combinator">

1076 具有根级组合器的工具输入架构1370 具有根级组合器的工具输入模式

1077</h2>1371</h2>

1078 1372 

1079某些 MCP 服务器将工具的输入架构声明为 JSON Schema 联合,在架构的顶级使用 `anyOf`、`oneOf` 或 `allOf`。Claude API 不接受这些关键字在架构根目录。它接受嵌套在 `properties` 内的组合器,Claude Code 原样发送。1373某些 MCP 服务器将工具的输入模式声明为 JSON Schema 联合,在模式的顶级使用 `anyOf`、`oneOf` 或 `allOf`。Claude API 不接受这些关键字在模式根部。它接受嵌套在 `properties` 内的组合器,Claude Code 会原样发送这些组合器。

1080 1374 

1081从 Claude Code v2.1.195 开始,具有根级组合器的工具保持可用。在将工具发送到 API 之前,Claude Code 将架构展平为单个对象,并在工具的描述前面添加一个句子,告诉 Claude 哪些参数组属于一起:1375具有根级组合器的工具保持可用。在将工具发送到 API 之前,Claude Code 将模式展平为单个对象,并在工具描述前面添加一句话,告诉 Claude 哪些参数组属于一起:

1082 1376 

1083* `allOf`:来自每个分支的属性被合并,每个分支的 `required` 列表仍然适用1377* `allOf`:来自每个分支的属性被合并,每个分支的 `required` 列表仍然适用

1084* `anyOf` 和 `oneOf`:来自每个分支的属性被合并,每个分支的 `required` 列表在工具描述中描述,而不是由架构强制执行1378* `anyOf` 和 `oneOf`:来自每个分支的属性被合并,每个分支的 `required` 列表在工具描述中描述,而不是由模式强制执行

1085 1379 

1086您的服务器接收 Claude 选择的任何参数,因此请继续在服务器端验证组合。1380您的服务器接收 Claude 选择的任何参数,因此请继续在服务器端验证组合。

1087 1381 

1088当 Claude Code 无法生成 API 接受的架构,或在不接收启用重写的远程配置的部署上(例如离线机器)时,它会跳过该工具,在服务器的日志中记录原因,并保持服务器的其他工具可用。早于 v2.1.195 的版本会跳过其输入架构具有根级 `anyOf`、`oneOf` 或 `allOf` 的每个工具。1382当 Claude Code 无法生成 API 接受的模式,或在未收到启用重写的远程配置的部署上时,它会跳过该工具,在服务器日志中记录原因,并保持服务器的其他工具可用。早于 v2.1.195 的版本会跳过其输入模式具有根级 `anyOf`、`oneOf` 或 `allOf` 的每个工具。

1383 

1384<h2 id="tools-with-invalid-input-schemas">

1385 具有无效输入架构的工具

1386</h2>

1387 

1388Claude API 检查请求中每个工具的输入架构,当任何一个架构失败时会拒绝整个请求,因此单个 MCP 工具的格式错误的架构会导致包含它的每个请求都以 400 错误失败。Claude Code 在加载服务器的工具时自己运行 API 的两个检查,并排除每个会失败的工具,这样服务器的其他工具可以继续工作:

1389 

1390* 顶级属性名称必须为 1 到 64 个字符长,并且只能使用 ASCII 字母和数字、`_`、`.` 和 `-`

1391* 架构必须对 JSON Schema draft 2020-12 元架构有效。Claude Code 对未声明 `$schema` 的架构和声明 draft 2020-12 的架构应用此检查。声明任何其他方言的架构会跳过此检查,尽管上面的属性名称检查仍然适用

1392 

1393Claude Code 在 [根级组合器重写](#tool-input-schemas-with-a-root-level-combinator) 之后运行检查,对它实际会发送的架构进行检查。

1394 

1395当 Claude Code 排除一个工具时,它会在服务器的日志中记录原因,并告诉 Claude 它排除了哪些工具以及原因,这样你可以询问 Claude 为什么工具缺失。如果你修复了服务器上的架构,下次 Claude Code 加载服务器的工具时该工具就会回来。

1396 

1397Claude Code 通过从 Anthropic 获取的功能标志打开排除。在 [禁用标志获取的部署](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) 上,或在标志从未到达的机器上(例如隔离的机器),Claude Code 仍然运行检查并在服务器的日志中记录哪个工具会被拒绝,但仍然将工具的架构发送到 API。API 拒绝包含该架构的请求,并 [以 400 错误按其位置命名工具](/docs/zh-CN/errors#tool-input-schema-is-invalid)。在 v2.1.216 之前,没有部署运行这些检查。

1398 

1399[根级组合器处理](#tool-input-schemas-with-a-root-level-combinator) 是独立的,当标志获取关闭或标志从未到达时保持其自己的行为。

1089 1400 

1090<h2 id="require-approval-for-a-specific-tool">1401<h2 id="require-approval-for-a-specific-tool">

1091 要求特定工具的批准1402 要求对特定工具进行批准

1092</h2>1403</h2>

1093 1404 

1094如果您正在构建 MCP 服务器,您可以通过在工具的 `tools/list` 响应条目中将 `_meta["anthropic/requiresUserInteraction"]` 设置为 `true` 来标记工具需要每次调用时的明确批准。该值必须是 JSON 布尔值 `true`;任何其他值都被忽略。1405如果你正在构建 MCP 服务器,可以通过在工具的 `tools/list` 响应条目中将 `_meta["anthropic/requiresUserInteraction"]` 设置为 `true` 来标记工具需要在每次调用时获得明确批准。该值必须是 JSON 布尔值 `true`;任何其他值都会被忽略。

1095 1406 

1096Claude Code 在每次调用时显示该工具的权限提示,即使在 `acceptEdits`、`auto` 和 `bypassPermissions` [权限模式](/docs/zh-CN/permissions#permission-modes) 中,并且不为其提供"不再询问"选项。[允许规则](/docs/zh-CN/permissions#permission-rule-syntax)与工具匹配也不会跳过提示。在 `dontAsk` 模式中(从不提示),Claude Code 改为拒绝调用。1407Claude Code 会在每次调用时显示该工具的权限提示,即使在 `acceptEdits`、`auto` 和 `bypassPermissions` [权限模式](/docs/zh-CN/permissions#permission-modes)中也是如此,并且不会为其提供"不再询问"选项。与该工具匹配的 [允许规则](/docs/zh-CN/permissions#permission-rule-syntax)也不会跳过提示。在 `dontAsk` 模式中(从不提示),Claude Code 会拒绝该调用。

1097 1408 

1098提示必须到达一个人。在非交互模式下使用 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),标记工具的 `allow` 结果从提示工具转换为拒绝,消息为 `MCP tool requires user interaction; not supported via --permission-prompt-tool`。Agent SDK 的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/permissions)确实接收这些调用并可以批准它们,因为 SDK 主机应该向用户显示它们。1409提示必须到达一个人。在非交互模式下使用 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),来自提示工具的标记工具的 `allow` 结果会被转换为拒绝,消息为 `MCP tool requires user interaction; not supported via --permission-prompt-tool`。Agent SDK 的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/permissions)确实会接收这些调用并可以批准它们,因为你的 SDK 应用程序应该将它们显示给用户。

1099 1410 

1100对于权限提示本身就是重点的工具,请使用此功能,例如同意或访问授予步骤,其中自动批准意味着没有人类曾经同意。来自同一服务器的其他工具保持其正常权限行为。1411将此用于权限提示本身就是目的的工具,例如同意或访问授予步骤,其中自动批准意味着没有人类曾经同意。来自同一服务器的其他工具保持其正常的权限行为。

1101 1412 

1102以下 `tools/list` 条目标记一个工具始终需要批准。1413以下 `tools/list` 条目将一个工具标记为始终需要批准。

1103 1414 

1104```json theme={null}1415```json theme={null}

1105{1416{


1111}1422}

1112```1423```

1113 1424 

1114`anthropic/requiresUserInteraction` 注释需要 Claude Code v2.1.199 或更高版本。较早的版本忽略它并应用标准权限流程。1425`anthropic/requiresUserInteraction` 注解需要 Claude Code v2.1.199 或更高版本。早期版本会忽略它并应用标准权限流程。

1426 

1427某些界面,例如 [Remote Control](/docs/zh-CN/remote-control) 和基于 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 构建的应用程序,通常允许你通过一次点击来批准工具调用。对于使用此注解标记的工具,Claude Code 会禁用一次点击操作并显示工具的完整权限提示,因此批准仍然来自回答提示的人,而不是点击。

1115 1428 

1116当会话连接到[远程控制](/docs/zh-CN/remote-control)或 SDK 主机时,Claude Code 将权限请求标记为需要用户交互,因此客户端向您显示工具的权限提示,而不是一键批准操作。1429Claude Code 对任何只有终端对话框才能完整呈现的权限请求(例如带有安全警告或远程界面无法显示的始终允许选项的请求)也会以相同方式禁用一次点击批准。你在终端对话框中回答该请求,而不是从 Remote Control 中回答。需要 Claude Code v2.1.214 或更高版本。

1117 1430 

1118<h2 id="respond-to-mcp-elicitation-requests">1431<h2 id="respond-to-mcp-elicitation-requests">

1119 响应 MCP 引发请求1432 响应 MCP 引出请求

1120</h2>1433</h2>

1121 1434 

1122MCP 服务器可以在任务中途使用引发来请求您的结构化输入。当服务器需要无法自行获取的信息时,Claude Code 会显示交互式对话框并将您的响应传递回服务器。您无需进行任何配置:当服务器请求时,引发对话框会自动出现。1435MCP 服务器可以在任务进行中使用引出功能向你请求结构化输入。当服务器需要无法自行获取的信息时,Claude Code 会显示一个交互式对话框,并将你的响应传回服务器。你无需进行任何配置:当服务器请求引出对话框时,它们会自动出现。

1123 1436 

1124服务器可以通过两种方式请求输入:1437服务器可以通过两种方式请求输入:

1125 1438 

1126* **表单模式**:Claude Code 显示一个对话框,其中包含服务器定义的表单字段(例如,用户名和密码提示)。填写字段并提交。1439* **表单模式**:Claude Code 显示一个对话框,其中包含由服务器定义的表单字段(例如,用户名和密码提示)。填写字段并提交。

1127* **URL 模式**:Claude Code 打开浏览器 URL 以进行身份验证或批准。在浏览器中完成流程,然后在 CLI 中确认。1440* **URL 模式**:Claude Code 打开浏览器 URL 进行身份验证或批准。在浏览器中完成流程,然后在 CLI 中确认。

1441 

1442在 URL 模式中,Claude Code 将 URL 作为命令行参数传递给系统的 URL 处理程序,并限制该参数的长度。当 URL 在为命令行转义后超过该限制时,你只能拒绝该请求。每个需要转义的字符,例如 `%` 或 `&`,都会计为上限的四倍:其自身字符加上三个转义字符。没有这些字符的 URL 在大约 8,000 个字符处达到上限。主要由百分比转义组成的 URL,其中每三个字符中有一个是 `%`,在大约 4,000 处达到上限。

1128 1443 

1129要自动响应引发请求而不显示对话框,请使用 [`Elicitation` hook](/docs/zh-CN/hooks#elicitation)。1444要在不显示对话框的情况下自动响应引出请求,请使用 [`Elicitation` hook](/docs/zh-CN/hooks#elicitation)。

1130 1445 

1131如果您正在构建使用引发的 MCP 服务器,请参阅 [MCP 引发规范](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation)以了解协议详细信息和架构示例。1446如果你正在构建使用引出功能的 MCP 服务器,请参阅 [MCP 引出规范](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) 了解协议详情和架构示例。

1132 1447 

1133<h2 id="use-mcp-resources">1448<h2 id="use-mcp-resources">

1134 使用 MCP 资源1449 使用 MCP 资源

1135</h2>1450</h2>

1136 1451 

1137MCP 服务器可以公开资源,您可以使用 @ 提及来引用,类似于您引用文件的方式。1452MCP 服务器可以公开资源,您可以使用 @ 提及来引用这些资源,类似于引用文件的方式。

1138 1453 

1139<h3 id="reference-mcp-resources">1454<h3 id="reference-mcp-resources">

1140 引用 MCP 资源1455 引用 MCP 资源


1148 <Step title="引用特定资源">1463 <Step title="引用特定资源">

1149 使用格式 `@server:protocol://resource/path` 来引用资源:1464 使用格式 `@server:protocol://resource/path` 来引用资源:

1150 1465 

1151 ```text theme={null}1466 ```text wrap theme={null}

1152 Can you analyze @github:issue://123 and suggest a fix?1467 Can you analyze @github:issue://123 and suggest a fix?

1153 ```1468 ```

1154 1469 

1155 ```text theme={null}1470 ```text wrap theme={null}

1156 Please review the API documentation at @docs:file://api/authentication1471 Please review the API documentation at @docs:file://api/authentication

1157 ```1472 ```

1158 </Step>1473 </Step>


1160 <Step title="多个资源引用">1475 <Step title="多个资源引用">

1161 您可以在单个提示中引用多个资源:1476 您可以在单个提示中引用多个资源:

1162 1477 

1163 ```text theme={null}1478 ```text wrap theme={null}

1164 Compare @postgres:schema://users with @docs:file://database/user-model1479 Compare @postgres:schema://users with @docs:file://database/user-model

1165 ```1480 ```

1166 </Step>1481 </Step>


1169<Tip>1484<Tip>

1170 提示:1485 提示:

1171 1486 

1172 * 资源在引用时会自动获取并作为附件包含1487 * 引用资源时,资源会自动获取并作为附件包含

1173 * 资源路径在 @ 提及自动完成中可进行模糊搜索1488 * 资源路径在 @ 提及自动完成中可进行模糊搜索

1174 * Claude Code 在服务器支持时自动提供列出和读取 MCP 资源的工具1489 * Claude Code 在服务器支持时自动提供列出和读取 MCP 资源的工具

1175 * 资源可以包含 MCP 服务器提供的任何类型的内容(文本、JSON、结构化数据等)1490 * 资源可以包含 MCP 服务器提供的任何类型的内容(文本、JSON、结构化数据等)


1179 使用 MCP 工具搜索进行扩展1494 使用 MCP 工具搜索进行扩展

1180</h2>1495</h2>

1181 1496 

1182工具搜索通过延迟工具定义直到 Claude 需要它们来保持 MCP 上下文使用低。仅工具名称和服务器说明在会话启动时加载,因此添加更多 MCP 服务器对您的上下文窗口的影响最小。Claude Code 不对每个服务器施加固定的工具上限;实际限制是您的上下文窗口预算。1497工具搜索通过延迟加载工具定义直到 Claude 需要时,来保持 MCP 上下文使用量较低。只有工具名称和服务器说明在会话开始时加载,因此添加更多 MCP 服务器对您的上下文窗口的影响最小。Claude Code 不会对每个服务器施加固定的工具上限;实际限制是您的上下文窗口预算。

1183 

1184<h3 id="how-it-works">

1185 工作原理

1186</h3>

1187 

1188工具搜索默认启用。MCP 工具被延迟而不是预先加载到上下文中,Claude 使用搜索工具在任务需要时发现相关的工具。仅 Claude 实际使用的工具进入上下文。从您的角度来看,MCP 工具的工作方式与之前完全相同。

1189 1498 

1190如果您更喜欢基于阈值的加载,请设置 `ENABLE_TOOL_SEARCH=auto` 以在工具适合上下文窗口的 10% 内时预先加载架构,仅延迟溢出部分。有关所有选项,请参阅[配置工具搜索](#configure-tool-search)。1499<Note>

1500 工具搜索在 Microsoft Foundry [部署在 Azure 上的部署](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)上不受支持,这些部署在服务器端拒绝它:Claude Code 检测到拒绝并为该部署改为预先加载 MCP 工具。[`ENABLE_TOOL_SEARCH`](#configure-tool-search) 无法覆盖此设置,因为拒绝来自部署本身。

1501</Note>

1191 1502 

1192<h3 id="for-mcp-server-authors">1503<h3 id="for-mcp-server-authors">

1193 对于 MCP 服务器作者1504 对于 MCP 服务器作者

1194</h3>1505</h3>

1195 1506 

1196如果您正在构建 MCP 服务器,启用工具搜索时服务器说明字段会变得更有用。服务器说明可帮助 Claude 了解何时搜索您的工具,类似于 [skills](/docs/zh-CN/skills) 的工作方式。1507如果您正在构建 MCP 服务器,启用工具搜索后,服务器说明字段会变得更加有用。服务器说明帮助 Claude 理解何时搜索您的工具,类似于 [skills](/docs/zh-CN/skills) 的工作方式。

1197 1508 

1198添加清晰、描述性的服务器说明,说明:1509添加清晰、描述性的服务器说明,说明:

1199 1510 

1200* 您的工具处理的任务类别1511* 您的工具处理的任务类别

1201* Claude 应何时搜索您的工具1512* Claude 应该何时搜索您的工具

1202* 您的服务器提供的关键功能1513* 您的服务器提供的关键功能

1203 1514 

1204Claude Code 将工具描述和服务器说明截断为每个 2KB。保持它们简洁以避免截断,并将关键详细信息放在开头。1515Claude Code 将工具描述和服务器说明各截断为 2KB。保持它们简洁以避免截断,并将关键细节放在开头。

1205 1516 

1206<h3 id="configure-tool-search">1517<h3 id="configure-tool-search">

1207 配置工具搜索1518 配置工具搜索

1208</h3>1519</h3>

1209 1520 

1210工具搜索默认启用:MCP 工具被延迟并按需发现。Claude Code 在 Google Cloud 的 Agent Platform 上默认禁用它。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,它也被禁用,因为大多数代理不转发 `tool_reference` 块。显式设置 `ENABLE_TOOL_SEARCH` 以覆盖任一回退。1521工具搜索默认启用:MCP 工具被延迟并按需发现。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,Claude Code 会禁用它,因为大多数代理不转发 `tool_reference` 块。设置 `ENABLE_TOOL_SEARCH` 显式覆盖该回退。

1522 

1523设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/env-vars) 保持工具搜索关闭。您无法通过自己设置 `ENABLE_TOOL_SEARCH` 来覆盖它。您的组织可以通过 [managed settings](/docs/zh-CN/managed-settings) 在 Claude Code v2.1.227 或更高版本上保持工具搜索开启。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities) 涵盖了覆盖应用的位置以及变量剥离的内容。

1524 

1525工具搜索需要支持 `tool_reference` 块的模型:Claude Sonnet 4.5、Claude Haiku 4.5、Claude Opus 4.5 及更高版本的模型。有关当前列表,请参阅 [API 文档中的模型兼容性](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool#model-compatibility)。

1526 

1527在 Google Cloud 的 Agent Platform 上,Claude Code 按模型代数决定:

1211 1528 

1212设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/env-vars) 保持工具搜索关闭,`ENABLE_TOOL_SEARCH` 无法覆盖它。该变量删除 `defer_loading` 工具定义和 `tool_reference` 内容块所需的 beta 标头。1529* **Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本**:工具搜索默认开启,与 Anthropic API 上相同。

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

1213 1531 

1214工具搜索需要支持 `tool_reference` 块的模型:Claude Sonnet 4.5、Claude Haiku 4.5、Claude Opus 4.5 及更高版本的模型。有关当前列表,请参阅 [API 文档中的模型兼容性](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool#model-compatibility)。在 Google Cloud 的 Agent Platform 上,工具搜索支持 Claude Sonnet 4.5 及更高版本以及 Claude Opus 4.5 及更高版本。1532在 v2.1.221 之前,Claude Code 在 Google Cloud 的 Agent Platform 上为所有模型禁用工具搜索,除非您设置 `ENABLE_TOOL_SEARCH=true`。

1215 1533 

1216使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:1534使用 `ENABLE_TOOL_SEARCH` 环境变量控制工具搜索行为:

1217 1535 

1218| 值 | 行为 |1536| 值 | 行为 |

1219| :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1537| :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1220| (未设置) | 所有 MCP 工具被延迟并按需加载。在 Google Cloud 的 Agent Platform 上或当 `ANTHROPIC_BASE_URL` 是非第一方主机时回退到预先加载 |1538| (未设置) | 所有 MCP 工具延迟并按需加载。在 Google Cloud 的 Agent Platform 早于 Claude 4.5 代的模型上、当 `ANTHROPIC_BASE_URL` 是非第一方主机时、或在 Microsoft Foundry 部署在 Azure 上时回退到预先加载 |

1221| `true` | 所有 MCP 工具被延迟。Claude Code 即使在 Google Cloud 的 Agent Platform 上和通过代理也会发送 beta 标头。对于早于 Sonnet 4.5 或 Opus 4.5 的 Google Cloud 的 Agent Platform 模型或不支持 `tool_reference` 块的代理,请求会失败 |1539| `true` | 所有 MCP 工具延迟,除了在 Microsoft Foundry 部署在 Azure 上,其中服务器端拒绝仍然强制预先加载,以及在 Google Cloud 的 Agent Platform 早于 Claude 4.5 代的模型上,Claude Code 保持预先加载工具。Claude Code 通过代理发送 beta 标头,在不支持 `tool_reference` 块的代理上请求失败 |

1222| `auto` | 阈值模式:如果工具适合上下文窗口的 10% 内,则预先加载,否则延迟 |1540| `auto` | 阈值模式:Claude Code 预先加载它本来会延迟的工具,同时它们的定义总计少于上下文窗口的 10%,一旦定义达到 10% 就延迟所有工具 |

1223| `auto:N` | 阈值模式,带有自定义百分比,其中 `N` 是 0-100。例如,`auto:5` 表示 5% |1541| `auto:N` | 具有自定义百分比的阈值模式,其中 `N` 是 0-100。例如,`auto:5` 表示 5% |

1224| `false` | 所有 MCP 工具预先加载,无延迟 |1542| `false` | 所有 MCP 工具预先加载,无延迟 |

1225 1543 

1226```bash theme={null}1544```bash theme={null}


1231ENABLE_TOOL_SEARCH=false claude1549ENABLE_TOOL_SEARCH=false claude

1232```1550```

1233 1551 

1234或在您的 [settings.json `env` 字段](/docs/zh-CN/settings#available-settings) 中设置值。1552或在您的 [settings.json `env` 字段](/docs/zh-CN/settings-reference#env) 中设置该值。

1235 1553 

1236您也可以专门禁用 `ToolSearch` 工具:1554您也可以特别禁用 `ToolSearch` 工具:

1237 1555 

1238```json theme={null}1556```json theme={null}

1239{1557{


1244```1562```

1245 1563 

1246<h3 id="exempt-a-server-from-deferral">1564<h3 id="exempt-a-server-from-deferral">

1247 豁免服务器延迟1565 豁免服务器不延迟

1248</h3>1566</h3>

1249 1567 

1250如果服务器的工具应始终对 Claude 可见而无需搜索步骤,请在该服务器的配置中将 `alwaysLoad` 设置为 `true`。来自该服务器的每个工具随后在会话启动时加载到上下文中,无论 `ENABLE_TOOL_SEARCH` 设置如何。对于 Claude 在每个回合都需要的少量工具,请使用此选项,因为每个预先加载的工具会消耗本来可用于您的对话的上下文。1568如果服务器的工具应该始终对 Claude 可见而无需搜索步骤,请在该服务器的配置中将 `alwaysLoad` 设置为 `true`。来自该服务器的每个工具都会在会话开始时加载到上下文中,无论 `ENABLE_TOOL_SEARCH` 设置如何。对于 Claude 在每个回合都需要的少量工具使用此选项,因为每个预先加载的工具会消耗本来可用于您的对话的上下文。

1251 1569 

1252以下 `.mcp.json` 条目豁免一个 HTTP 服务器,同时保持其他服务器延迟:1570以下 `.mcp.json` 条目豁免一个 HTTP 服务器,同时保持其他服务器延迟:

1253 1571 


1263}1581}

1264```1582```

1265 1583 

1266`alwaysLoad` 字段在所有服务器类型上可用,需要 Claude Code v2.1.121 或更高版本。MCP 服务器也可以通过在工具的 `_meta` 对象中包含 `"anthropic/alwaysLoad": true` 来标记单个工具为始终加载,这对该工具仅具有相同的效果。1584`alwaysLoad` 字段在所有服务器类型上都可用。MCP 服务器也可以通过在工具的 `_meta` 对象中包含 `"anthropic/alwaysLoad": true` 来标记单个工具为始终加载,这对该工具只有相同的效果。

1267 1585 

1268设置 `alwaysLoad: true` 也会阻止启动直到服务器连接,上限为标准 5 秒连接超时。即使 MCP 启动在其他方面[默认为非阻塞](/docs/zh-CN/env-vars),这也适用,因为工具必须在构建第一个提示时存在。其他服务器继续在后台连接。1586设置 `alwaysLoad: true` 也会使启动等待服务器的工具,上限为标准 5 秒连接超时,因为它们必须在构建第一个提示时存在。具有有效 [`cached` 条目](#server-status-detail) 的远程服务器从缓存提供其工具而无需连接,因此它不会延迟启动。其他服务器默认在后台连接;设置 [`MCP_CONNECTION_NONBLOCKING=0`](/docs/zh-CN/env-vars) 也使启动等待它们。

1269 1587 

1270<h2 id="use-mcp-prompts-as-commands">1588<h2 id="use-mcp-prompts-as-commands">

1271 将 MCP 提示用作命令1589 将 MCP 提示用作命令

1272</h2>1590</h2>

1273 1591 

1274MCP 服务器可以公开在 Claude Code 中作为命令可用的提示。1592MCP 服务器可以公开提示,这些提示在 Claude Code 中作为命令可用。

1275 1593 

1276<h3 id="execute-mcp-prompts">1594<h3 id="execute-mcp-prompts">

1277 执行 MCP 提示1595 执行 MCP 提示


1279 1597 

1280<Steps>1598<Steps>

1281 <Step title="发现可用的提示">1599 <Step title="发现可用的提示">

1282 键入 `/` 以查看所有可用的命令,包括来自 MCP 服务器的命令。MCP 提示以 `/mcp__servername__promptname` 的格式出现。1600 输入 `/` 以查看可用的命令,包括来自 MCP 服务器的命令。Claude Code 将每个 MCP 提示列为 `/servername:promptname (MCP)`。输入 `/mcp__servername__promptname` 也可以运行它。

1283 </Step>1601 </Step>

1284 1602 

1285 <Step title="执行不带参数的提示">1603 <Step title="执行没有参数的提示">

1286 ```text theme={null}1604 ```text wrap theme={null}

1287 /mcp__github__list_prs1605 /mcp__github__list_prs

1288 ```1606 ```

1289 </Step>1607 </Step>

1290 1608 

1291 <Step title="执行带参数的提示">1609 <Step title="执行带有参数的提示">

1292 许多提示接受参数。在命令后面用空格分隔传递它们:1610 许多提示接受参数。在命令后面用空格分隔传递它们。Claude Code 在空格处分割参数,因此每个参数是单个令牌:

1293 1611 

1294 ```text theme={null}1612 ```text wrap theme={null}

1295 /mcp__github__pr_review 4561613 /mcp__github__pr_review 456

1296 ```1614 ```

1297 1615 

1298 ```text theme={null}1616 ```text wrap theme={null}

1299 /mcp__jira__create_issue "Bug in login flow" high1617 /mcp__jira__create_issue login-bug high

1300 ```1618 ```

1301 </Step>1619 </Step>

1302</Steps>1620</Steps>


1307 * MCP 提示从连接的服务器动态发现1625 * MCP 提示从连接的服务器动态发现

1308 * 参数根据提示的定义参数进行解析1626 * 参数根据提示的定义参数进行解析

1309 * 提示结果直接注入到对话中1627 * 提示结果直接注入到对话中

1310 * 服务器和提示名称被规范化,空格转换为下划线1628 * 在 `/mcp__servername__promptname` 形式中,Claude Code 将服务器名称中 `A-Z`、`a-z`、`0-9`、`_` 和 `-` 之外的任何字符替换为 `_`,并使用服务器声明的提示名称

1311</Tip>1629</Tip>

1312 1630 

1313<h2 id="managed-mcp-configuration">1631<h2 id="managed-mcp-configuration">

1314 托管 MCP 配置1632 托管 MCP 配置

1315</h2>1633</h2>

1316 1634 

1317对于需要对用户可以连接的 MCP 服务器进行集中控制的组织,请参阅[托管 MCP 配置](/docs/zh-CN/managed-mcp)。它涵盖使用 `managed-mcp.json` 部署固定服务器集、使用 `allowedMcpServers` 和 `deniedMcpServers` 限制服务器,以及当服务器被阻止时用户看到的内容。1635对于需要集中控制用户可以连接到哪些 MCP 服务器的组织,请参阅[托管 MCP 配置](/docs/zh-CN/managed-mcp)。它涵盖使用 `managed-mcp.json` 部署固定服务器集、使用 `managedMcpServers` 为每个用户提供服务器、使用 `allowedMcpServers` 和 `deniedMcpServers` 限制服务器,以及当服务器被阻止时用户看到的内容。

model-config.md +4 −2

Details

134`/model` 通过在你的用户设置中写入 `model` 字段来保存你的选择作为新会话的默认值。在选择器中:134`/model` 通过在你的用户设置中写入 `model` 字段来保存你的选择作为新会话的默认值。在选择器中:

135 135 

136* `Enter`:切换模型并保存为你的默认值136* `Enter`:切换模型并保存为你的默认值

137* `s`:仅为此会话切换模型137* `s`:仅为此会话切换模型并保持你的默认值不变。要使用不同的键,重新绑定 [`modelPicker:thisSessionOnly`](/docs/zh-CN/keybindings#model-picker-actions)

138 138 

139直接输入 `/model <name>` 的行为类似于 `Enter`。如果你在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 标志设置带有 `/model` 的模型,你的选择仅适用于当前会话,不会保存为你的默认值;该模式中的 `/model` 需要 Claude Code v2.1.205 或更高版本。项目和托管设置仍然优先,并在下次启动时重新应用。你的管理员配置的[组织默认模型](#organization-default-model)也会在下次启动时重新应用。139直接输入 `/model <name>` 的行为类似于 `Enter`。要仅为此会话切换,请使用 `/model` 打开选择器,并在模型的行上按 `s`。

140 

141如果你在[非交互模式](/docs/zh-CN/headless)中使用 `-p` 标志设置带有 `/model` 的模型,你的选择仅适用于当前会话,不会保存为你的默认值;该模式中的 `/model` 需要 Claude Code v2.1.205 或更高版本。项目和托管设置仍然优先,并在下次启动时重新应用。你的管理员配置的[组织默认模型](#organization-default-model)也会在下次启动时重新应用。

140 142 

141在 v2.1.144 到 v2.1.152 中,`/model` 仅适用于当前会话,选择器中的 `d` 保存默认值。143在 v2.1.144 到 v2.1.152 中,`/model` 仅适用于当前会话,选择器中的 `d` 保存默认值。

142 144 

monitoring-usage.md +174 −147

Details

101 常见配置变量101 常见配置变量

102</h3>102</h3>

103 103 

104这些变量为所有部署配置导出器、端点和导出行为。如果您设置了每个信号的端点或协议变量,例如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`,Claude Code 会使用它而不是该信号的通用变量。如果您设置了每个信号的标头变量,例如 `OTEL_EXPORTER_OTLP_METRICS_HEADERS`,Claude Code 会将其与该信号的通用 `OTEL_EXPORTER_OTLP_HEADERS` 合并。在具有托管设置的机器上,请参阅 [托管设置如何锁定 OTLP 目标](#how-managed-settings-lock-the-otlp-destination) 以了解 Claude Code 删除的内容。104这些变量为所有部署配置导出器、端点和导出行为。如果您设置了按信号的端点或协议变量,例如 `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`,Claude Code 会使用它而不是该信号的通用变量。如果您设置了按信号的标头变量,例如 `OTEL_EXPORTER_OTLP_METRICS_HEADERS`,Claude Code 会将其与该信号的通用 `OTEL_EXPORTER_OTLP_HEADERS` 合并。在具有托管设置的机器上,请参阅[托管设置如何锁定 OTLP 目标](#how-managed-settings-lock-the-otlp-destination)以了解 Claude Code 删除的内容。

105 105 

106| 环境变量 | 描述 | 示例值 |106| 环境变量 | 描述 | 示例值 |

107| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |107| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |

108| `CLAUDE_CODE_ENABLE_TELEMETRY` | 启用遥测收集(必需) | `1` |108| `CLAUDE_CODE_ENABLE_TELEMETRY` | 启用遥测收集(必需) | `1` |

109| `OTEL_METRICS_EXPORTER` | 指标导出器类型,逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`prometheus`、`none` |109| `OTEL_METRICS_EXPORTER` | 指标导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`prometheus`、`none` |

110| `OTEL_LOGS_EXPORTER` | 日志/事件导出器类型,逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |110| `OTEL_LOGS_EXPORTER` | 日志/事件导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |

111| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 导出器的协议,适用于所有信号。Claude Code 没有默认协议,因此为您启用的每个 `otlp` 导出器设置此变量或每个信号的协议变量 | `grpc`、`http/json`、`http/protobuf` |111| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 导出器的协议,适用于所有信号。Claude Code 没有默认协议,因此为启用的每个 `otlp` 导出器设置此变量或按信号的协议变量 | `grpc`、`http/json`、`http/protobuf` |

112| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有信号的 OTLP 收集器端点 | `http://localhost:4317` |112| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有信号的 OTLP 收集器端点 | `http://localhost:4317` |

113| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指标协议,覆盖常规设置 | `grpc`、`http/json`、`http/protobuf` |113| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指标协议,覆盖常规设置 | `grpc`、`http/json`、`http/protobuf` |

114| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指标端点,覆盖常规设置 | `http://localhost:4318/v1/metrics` |114| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指标端点,覆盖常规设置 | `http://localhost:4318/v1/metrics` |


117| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP 的身份验证标头 | `Authorization=Bearer token` |117| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP 的身份验证标头 | `Authorization=Bearer token` |

118| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 指标的身份验证标头,与常规标头合并 | `Authorization=Bearer token` |118| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 指标的身份验证标头,与常规标头合并 | `Authorization=Bearer token` |

119| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 日志的身份验证标头,与常规标头合并 | `Authorization=Bearer token` |119| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 日志的身份验证标头,与常规标头合并 | `Authorization=Bearer token` |

120| `OTEL_METRIC_EXPORT_INTERVAL` | 导出间隔(毫秒)(默认:60000) | `5000`、`60000` |120| `OTEL_METRIC_EXPORT_INTERVAL` | 导出间隔(毫秒)(默认值:60000) | `5000`、`60000` |

121| `OTEL_LOGS_EXPORT_INTERVAL` | 日志导出间隔(毫秒)(默认:5000) | `1000`、`10000` |121| `OTEL_LOGS_EXPORT_INTERVAL` | 日志导出间隔(毫秒)(默认值:5000) | `1000`、`10000` |

122| `OTEL_LOG_USER_PROMPTS` | 启用用户提示内容的日志记录(默认:禁用) | `1` 启用 |122| `OTEL_LOG_USER_PROMPTS` | 启用用户提示内容的日志记录(默认值:禁用) | `1` 启用 |

123| `OTEL_LOG_ASSISTANT_RESPONSES` | 启用在 `assistant_response` 事件上记录助手响应文本(默认:禁用)。未设置时,回退到 `OTEL_LOG_USER_PROMPTS` 的值。需要 Claude Code v2.1.193 或更高版本 | `1` 启用,`0` 保持编辑 |123| `OTEL_LOG_ASSISTANT_RESPONSES` | 在 `assistant_response` 事件上启用助手响应文本的日志记录(默认值:禁用)。未设置时,回退到 `OTEL_LOG_USER_PROMPTS` 的值。需要 Claude Code v2.1.193 或更高版本 | `1` 启用,`0` 保持编辑 |

124| `OTEL_LOG_TOOL_DETAILS` | 启用在工具事件和 trace span 属性中记录工具参数和输入参数:Bash 命令、MCP 服务器和工具名称、技能名称、用户编写的工作流名称和工具输入。还在 `user_prompt` 事件上启用自定义、插件和 MCP 命令名称(默认:禁用)。对于 Claude Desktop 的内置服务器,在 Claude Desktop 拥有的会话中,即使关闭该标志,`mcp_server_name`/`mcp_tool_name` 也会在 `tool_decision`/`tool_result` 上发出。该异常需要 Claude Code v2.1.214 或更高版本 | `1` 启用 |124| `OTEL_LOG_TOOL_DETAILS` | 启用工具事件和跟踪跨度属性中的工具参数和输入参数的日志记录:Bash 命令、MCP 服务器和工具名称、技能名称、用户编写的工作流名称和工具输入。还在 `user_prompt` 事件上启用自定义、插件和 MCP 命令名称(默认值:禁用)。对于 Claude Desktop 的内置服务器,在 Claude Desktop 拥有的会话中,即使关闭该标志,`mcp_server_name`/`mcp_tool_name` 也会在 `tool_decision`/`tool_result` 上发出。该异常需要 Claude Code v2.1.214 或更高版本 | `1` 启用 |

125| `OTEL_LOG_TOOL_CONTENT` | 启用在 span 事件中记录工具输入和输出内容(默认:禁用)。需要 [tracing](#traces-beta)。内容在内容限制处截断(默认 60 KB) | `1` 启用 |125| `OTEL_LOG_TOOL_CONTENT` | 启用跨度事件中工具输入和输出内容的日志记录(默认值:禁用)。需要[跟踪](#traces-beta)。内容在内容限制处截断(默认值:60 KB) | `1` 启用 |

126| `OTEL_LOG_RAW_API_BODIES` | 将完整的 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件发出(默认:禁用)。主体包括整个对话历史。启用此选项意味着同意 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_DETAILS` 和 `OTEL_LOG_TOOL_CONTENT` 会揭示的所有内容 | `1` 用于在内容限制处截断的内联主体(默认 60 KB),或 `file:<dir>` 用于磁盘上的未截断主体,事件中带有 `body_ref` 指针 |126| `OTEL_LOG_RAW_API_BODIES` | 将完整的 Anthropic Messages API 请求和响应 JSON 作为 `api_request_body` / `api_response_body` 日志事件发出(默认值:禁用)。正文包括整个对话历史记录。启用此选项意味着同意 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_DETAILS` 和 `OTEL_LOG_TOOL_CONTENT` 会透露的所有内容 | `1` 表示在内容限制处截断的内联正文(默认值:60 KB),或 `file:<dir>` 表示磁盘上未截断的正文,事件中带有 `body_ref` 指针 |

127| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 内容限制:内容承载属性的最大长度,例如模型响应、工具内容、系统提示和原始 API 主体,包括截断标记,以 UTF-16 代码单位计(默认:61440,即 60 KB)。默认值针对将属性值上限设为 64 KB 的后端进行了调整;仅当您的后端接受更大的值时才提高它,或降低它以减少遥测量。当设置了 OpenTelemetry SDK 属性限制 `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 或其日志记录和 span 变体之一时,Claude Code 会在该较小的值处截断,以便 `[TRUNCATED ...]` 标记保持在 SDK 限制内。需要 Claude Code v2.1.214 或更高版本 | `262144` |127| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 内容限制:内容承载属性(如模型响应、工具内容、系统提示和原始 API 正文)的最大长度,包括截断标记,以 UTF-16 代码单位为单位(默认值:61440,即 60 KB)。默认值针对将属性值上限设为 64 KB 的后端进行了调整;仅当您的后端接受更大的值时才提高它,或降低它以减少遥测量。当设置了 OpenTelemetry SDK 属性限制 `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 或其日志记录和跨度变体之一时,Claude Code 会在该较小的值处截断,以便 `[TRUNCATED ...]` 标记保持在 SDK 限制内。需要 Claude Code v2.1.214 或更高版本 | `262144` |

128| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 指标时间性偏好(默认:`delta`)。如果您的后端期望累积时间性,请设置为 `cumulative` | `delta`、`cumulative` |128| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 指标时间性偏好(默认值:`delta`)。如果您的后端期望累积时间性,请设置为 `cumulative` | `delta`、`cumulative` |

129| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 刷新动态标头的间隔(默认:1740000ms / 29 分钟) | `900000` |129| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 刷新动态标头的间隔(默认值:1740000ms / 29 分钟) | `900000` |

130 130 

131对于 `http/protobuf` 和 `http/json` 协议,Claude Code 使用 `Content-Length` 标头发送每个导出请求。在 v2.1.212 之前,从 v2.1.191 开始的 Claude Code 版本使用分块传输编码发送这些请求;Azure Monitor 和其他需要声明长度的端点以 `411 Length Required` 或 `400` 错误拒绝它们。131对于 `http/protobuf` 和 `http/json` 协议,Claude Code 使用 `Content-Length` 标头发送每个导出请求。在 v2.1.212 之前,从 v2.1.191 开始的 Claude Code 版本使用分块传输编码发送这些请求;Azure Monitor 和其他需要声明长度的端点以 `411 Length Required` 或 `400` 错误拒绝它们。

132 132 


134 mTLS 身份验证134 mTLS 身份验证

135</h3>135</h3>

136 136 

137您为 OTLP 导出器配置客户端证书的方式取决于用于该信号的 OTLP 协议,通过 `OTEL_EXPORTER_OTLP_PROTOCOL` 或每个信号的覆盖设置。相同的配置适用于指标、日志和跟踪。137您如何为 OTLP 导出器配置客户端证书取决于用于该信号的 OTLP 协议,通过 `OTEL_EXPORTER_OTLP_PROTOCOL` 或按信号的覆盖设置。相同的配置适用于指标、日志和跟踪。

138 138 

139| 协议 | 客户端证书变量 | 信任收集器的 CA |139| 协议 | 客户端证书变量 | 信任收集器的 CA 使用 |

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

141| `http/protobuf`、`http/json` | `CLAUDE_CODE_CLIENT_CERT`、`CLAUDE_CODE_CLIENT_KEY` 和可选的 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`。请参阅 [网络配置](/docs/zh-CN/network-config#mtls-authentication) | `NODE_EXTRA_CA_CERTS` |141| `http/protobuf`、`http/json` | `CLAUDE_CODE_CLIENT_CERT`、`CLAUDE_CODE_CLIENT_KEY` 和可选的 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`。请参阅[网络配置](/docs/zh-CN/network-config#mtls-authentication) | `NODE_EXTRA_CA_CERTS` |

142| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 和 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`,或每个信号的变体,例如 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` 以为每个信号使用不同的证书 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |142| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 和 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`,或按信号的变体,例如 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` 以为每个信号使用不同的证书 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |

143 143 

144对于 `grpc`,OpenTelemetry SDK 直接读取标准 OTLP 变量,因此设置每个信号指标变量的现有配置继续工作。在具有托管设置的机器上,Claude Code [可能在启动时删除开发者设置的每个信号凭证和端点](#how-managed-settings-lock-the-otlp-destination)。144对于 `grpc`,OpenTelemetry SDK 直接读取标准 OTLP 变量,因此设置按信号指标变量的现有配置继续有效。在具有托管设置的机器上,Claude Code [可能在启动时删除开发人员设置的按信号凭证和端点](#how-managed-settings-lock-the-otlp-destination)。

145 145 

146<h3 id="metrics-cardinality-control">146<h3 id="metrics-cardinality-control">

147 指标基数控制147 指标基数控制


150以下环境变量控制指标中包含哪些属性以管理基数:150以下环境变量控制指标中包含哪些属性以管理基数:

151 151 

152| 环境变量 | 描述 | 默认值 | 禁用示例 |152| 环境变量 | 描述 | 默认值 | 禁用示例 |

153| ------------------------------------------ | ----------------------------------------------- | ------- | ------- |153| ------------------------------------------ | --------------------------------------------------------------------------------- | ------- | ------- |

154| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指标中包含 session.id 属性 | `true` | `false` |154| `OTEL_METRICS_INCLUDE_SESSION_ID` | 在指标中包含 session.id 属性 | `true` | `false` |

155| `OTEL_METRICS_INCLUDE_VERSION` | 在指标中包含 app.version 属性 | `false` | `true` |155| `OTEL_METRICS_INCLUDE_VERSION` | 在指标中包含 app.version 属性 | `false` | `true` |

156| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指标中包含 user.account\_uuid 和 user.account\_id 属性 | `true` | `false` |156| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 在指标中包含 user.account\_uuid 和 user.account\_id 属性 | `true` | `false` |

157| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指标中包含 app.entrypoint 属性 | `false` | `true` |157| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 在指标中包含 app.entrypoint 属性 | `false` | `true` |

158| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 将 `OTEL_RESOURCE_ATTRIBUTES` 中的键作为属性包含在指标数据点上 | `true` | `false` |158| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | 将 `OTEL_RESOURCE_ATTRIBUTES` 中的键作为属性包含在指标数据点上 | `true` | `false` |

159| `OTEL_METRICS_INCLUDE_REPOSITORY` | 在指标和事件上包含 `vcs.*` [存储库身份属性](#repository-attributes)。需要 Claude Code v2.1.269 或更高版本 | `false` | `true` |

159 160 

160较低的基数通常意味着更好的性能和更低的存储成本,但分析的数据粒度较低。161较低的基数通常意味着更好的性能和更低的存储成本,但数据分析的粒度较低。

161 162 

162<h3 id="traces-beta">163<h3 id="traces-beta">

163 Traces(测试版)164 跟踪(测试版)

164</h3>165</h3>

165 166 

166分布式跟踪导出 span,将每个用户提示链接到它触发的 API 请求和工具执行,因此您可以在跟踪后端中将完整请求视为单个 trace。167分布式跟踪导出跨度,将每个用户提示链接到它触发的 API 请求和工具执行,因此您可以在跟踪后端中将完整请求视为单个跟踪。

167 168 

168跟踪默认关闭。要启用它,请同时设置 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 和 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`,然后设置 `OTEL_TRACES_EXPORTER` 以选择 span 的发送位置。Traces 重用 [常见 OTLP 配置](#common-configuration-variables) 用于端点、协议、标头和 [mTLS](#mtls-authentication)。在具有托管设置的机器上,Claude Code [可能在启动时删除开发者设置的每个信号凭证和端点](#how-managed-settings-lock-the-otlp-destination)。169跟踪默认关闭。要启用它,请同时设置 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 和 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`,然后设置 `OTEL_TRACES_EXPORTER` 以选择跨度的发送位置。跟踪重用[常见 OTLP 配置](#common-configuration-variables)用于端点、协议、标头和 [mTLS](#mtls-authentication)。在具有托管设置的机器上,Claude Code [可能在启动时删除开发人员设置的按信号凭证和端点](#how-managed-settings-lock-the-otlp-destination)。

169 170 

170| 环境变量 | 描述 | 示例值 |171| 环境变量 | 描述 | 示例值 |

171| ------------------------------------- | --------------------------------------------------- | ---------------------------------- |172| ------------------------------------- | ----------------------------------------------- | ---------------------------------- |

172| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 启用 span 跟踪(必需)。也接受 `ENABLE_ENHANCED_TELEMETRY_BETA` | `1` |173| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 启用跨度跟踪(必需)。也接受 `ENABLE_ENHANCED_TELEMETRY_BETA` | `1` |

173| `OTEL_TRACES_EXPORTER` | Traces 导出器类型,逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |174| `OTEL_TRACES_EXPORTER` | 跟踪导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |

174| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | Traces 协议,覆盖 `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`、`http/json`、`http/protobuf` |175| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 跟踪协议,覆盖 `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`、`http/json`、`http/protobuf` |

175| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP traces 端点,覆盖 `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |176| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 跟踪端点,覆盖 `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |

176| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | Traces 的身份验证标头,与 `OTEL_EXPORTER_OTLP_HEADERS` 合并 | `Authorization=Bearer token` |177| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | 跟踪的身份验证标头,与 `OTEL_EXPORTER_OTLP_HEADERS` 合并 | `Authorization=Bearer token` |

177| `OTEL_TRACES_EXPORT_INTERVAL` | Span 批量导出间隔(毫秒)(默认:5000) | `1000`、`10000` |178| `OTEL_TRACES_EXPORT_INTERVAL` | 跨度批量导出间隔(毫秒)(默认值:5000) | `1000`、`10000` |

178 179 

179Spans 默认编辑用户提示文本、工具输入详情和工具内容。设置 `OTEL_LOG_USER_PROMPTS=1`、`OTEL_LOG_TOOL_DETAILS=1` 和 `OTEL_LOG_TOOL_CONTENT=1` 以包含它们。180跨度默认编辑用户提示文本、工具输入详情和工具内容。设置 `OTEL_LOG_USER_PROMPTS=1`、`OTEL_LOG_TOOL_DETAILS=1` 和 `OTEL_LOG_TOOL_CONTENT=1` 以包含它们。

180 181 

181当跟踪处于活动状态时,Bash 和 PowerShell 子进程会自动继承包含活动工具执行 span 的 W3C trace 上下文的 `TRACEPARENT` 环境变量。这让任何读取 `TRACEPARENT` 的子进程可以在同一 trace 下将其自己的 span 作为父级,通过 Claude 运行的脚本和命令启用端到端分布式跟踪。182当跟踪处于活动状态时,Bash 和 PowerShell 子进程会自动继承包含活动工具执行跨度的 W3C 跟踪上下文的 `TRACEPARENT` 环境变量。这允许任何读取 `TRACEPARENT` 的子进程在同一跟踪下将其自己的跨度作为父级,从而通过 Claude 运行的脚本和命令实现端到端分布式跟踪。

182 183 

183当跟踪处于活动状态时,如果 Claude Code 直接连接到 Anthropic API,每个模型请求都会携带一个 W3C `traceparent` 标头,设置为 `claude_code.llm_request` span 的上下文,API 的 `traceresponse` 标头被记录为 span 链接。这些一起通过任何兼容的中介将 Claude Code 的客户端 span 连接到服务器端跟踪。标头不会发送给第三方提供商。184当跟踪处于活动状态且 Claude Code 直接连接到 Anthropic API 时,每个模型请求都携带设置为 `claude_code.llm_request` 跨度上下文的 W3C `traceparent` 标头,API 的 `traceresponse` 标头被记录为跨度链接。这些共同通过任何兼容的中介将 Claude Code 的客户端跨度连接到服务器端跟踪。出站 HTTP MCP 请求以相同的方式携带 `traceparent`。该标头不会发送给第三方提供商。

184 185 

185默认情况下,模型和 HTTP MCP 请求上的 `traceparent` 标头仅在 `ANTHROPIC_BASE_URL` 未设置或指向 Anthropic API 时发送,因为某些代理会拒绝无法识别的标头。子进程 `TRACEPARENT` 变量由相同的开关控制以保持一致性。如果您通过自定义 `ANTHROPIC_BASE_URL` 代理运行 Claude Code 并希望传播 trace 上下文,请设置 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`。186默认情况下,模型和 HTTP MCP 请求上的 `traceparent` 标头仅在 `ANTHROPIC_BASE_URL` 未设置或指向 Anthropic API 时发送,因为某些代理拒绝无法识别的标头。子进程 `TRACEPARENT` 变量由相同的开关控制以保持一致性。如果您通过自定义 `ANTHROPIC_BASE_URL` 代理运行 Claude Code 并希望传播跟踪上下文,请设置 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`。

186 187 

187在 Agent SDK 和使用 `-p` 启动的非交互式会话中,Claude Code 还在启动每个交互 span 时从其自己的环境中读取 `TRACEPARENT` 和 `TRACESTATE`。这让嵌入过程可以将其活动的 W3C trace 上下文传递到子进程中,以便 Claude Code 的 span 显示为调用者分布式跟踪的子级。交互式会话忽略入站 `TRACEPARENT` 以避免意外继承来自 CI 或容器环境的环境值。188在 Agent SDK 和使用 `-p` 启动的非交互式会话中,Claude Code 还会在启动每个交互跨度时从其自己的环境中读取 `TRACEPARENT` 和 `TRACESTATE`。这允许嵌入过程将其活动的 W3C 跟踪上下文传递到子进程中,以便 Claude Code 的跨度显示为调用者分布式跟踪的子级。交互式会话忽略入站 `TRACEPARENT` 以避免意外继承来自 CI 或容器环境的环境值。

188 189 

189入站 trace 上下文也适用于 [事件](#events)。在具有 `TRACEPARENT` 设置的 Agent SDK 和 `-p` 会话中,每个 OTLP 事件日志记录都携带 `trace_id` 和 `span_id` 值,将其连接到您的应用程序的 trace,即使未配置 traces 导出器,您的日志后端也可以将事件与 trace 的其余部分关联。190入站跟踪上下文也适用于[事件](#events)。在设置了 `TRACEPARENT` 的 Agent SDK 和 `-p` 会话中,每个 OTLP 事件日志记录都携带 `trace_id` 和 `span_id` 值,将其加入您的应用程序跟踪,即使未配置跟踪导出器,您的日志记录后端也可以将事件与跟踪的其余部分关联起来。

190 191 

191在交互处于活动状态时发出的记录携带交互 span 的 ID,即使 Claude Code 在 span 的异步上下文之外发出它,例如在权限提示回调中或对于在启动期间缓冲并稍后导出的记录。在没有活动交互 span 的情况下发出的记录直接携带入站 `TRACEPARENT` ID。在 v2.1.214 之前,在 span 的异步上下文之外发出的记录携带入站 `TRACEPARENT` ID 而不是 span 的 ID。在 v2.1.212 之前,在活动 span 之外发出的事件记录不携带 `trace_id` 或 `span_id`。192在交互处于活动状态时发出的记录携带交互跨度的 ID,即使 Claude Code 在跨度的异步上下文之外发出它,例如在权限提示回调中或对于在启动期间缓冲并稍后导出的记录。在没有活动交互跨度的情况下发出的记录直接携带入站 `TRACEPARENT` ID。在 v2.1.214 之前,在跨度的异步上下文之外发出的记录携带入站 `TRACEPARENT` ID 而不是跨度的 ID。在 v2.1.212 之前,在活动跨度之外发出的事件记录不携带 `trace_id` 或 `span_id`。

192 193 

193<h4 id="span-hierarchy">194<h4 id="span-hierarchy">

194 Span 层次结构195 跨度层次结构

195</h4>196</h4>

196 197 

197每个用户提示启动一个 `claude_code.interaction` 根 span。API 调用、工具调用和 hook 执行被记录为其子级。工具 span 有两个自己的子 span:一个用于等待权限决策所花费的时间,一个用于执行本身。当 Agent 工具或旧版 Task 工具生成子代理时,子代理的 API 和工具 span 嵌套在父级的 `claude_code.tool` span 下。198每个用户提示启动一个 `claude_code.interaction` 根跨度。API 调用、工具调用和钩子执行被记录为其子级。工具跨度有两个自己的子跨度:一个用于等待权限决定的时间,一个用于执行本身。当 Agent 工具或旧版 Task 工具生成子代理时,子代理的 API 和工具跨度嵌套在父级的 `claude_code.tool` 跨度下。

198 199 

199```text theme={null}200```text theme={null}

200claude_code.interaction201claude_code.interaction

201├── claude_code.llm_request202├── claude_code.llm_request

202├── claude_code.hook (需要详细的测试版跟踪)203├── claude_code.hook (requires detailed beta tracing)

203└── claude_code.tool204└── claude_code.tool

204 ├── claude_code.tool.blocked_on_user205 ├── claude_code.tool.blocked_on_user

205 ├── claude_code.tool.execution206 ├── claude_code.tool.execution

206 └── (Agent 工具) 子代理 claude_code.llm_request / claude_code.tool span207 └── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans

207```208```

208 209 

209在 Agent SDK 和 `claude -p` 会话中,当在环境中设置 `TRACEPARENT` 时,`claude_code.interaction` 本身成为调用者 span 的子级。210在 Agent SDK 和 `claude -p` 会话中,当在环境中设置 `TRACEPARENT` 时,`claude_code.interaction` 本身成为调用者跨度的子级。

210 211 

211当 `PreToolUse` hook [延迟工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later) 时,Claude Code 保存延迟它的轮次的 trace 上下文。当您恢复会话并且工具重新运行时,工具的 span 作为轮次的 `claude_code.interaction` span 的子级加入该较早轮次的 trace。212当 `PreToolUse` 钩子[延迟工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)时,Claude Code 保存延迟它的转向的跟踪上下文。当您恢复会话并且工具重新运行时,工具的跨度加入该较早转向的跟踪,作为转向的 `claude_code.interaction` 跨度的子级。

212 213 

213<h4 id="span-attributes">214<h4 id="span-attributes">

214 Span 属性215 跨度属性

215</h4>216</h4>

216 217 

217每个 span 都携带 [标准属性](#standard-attributes) 加上与其名称匹配的 `span.type` 属性。下表列出了在每个 span 上设置的其他属性。`llm_request`、`tool.execution` 和 `hook` span 在记录失败时设置 OpenTelemetry 状态 `ERROR`;其他 span 始终以状态 `UNSET` 结束。218每个跨度都携带[标准属性](#standard-attributes)加上与其名称匹配的 `span.type` 属性。下表列出了在每个跨度上设置的其他属性。`llm_request`、`tool.execution` 和 `hook` 跨度在记录失败时设置 OpenTelemetry 状态 `ERROR`;其他跨度始终以状态 `UNSET` 结束。

218 219 

219**`claude_code.interaction`**220**`claude_code.interaction`**

220 221 

221| 属性 | 描述 | 门控条件 |222| 属性 | 描述 | 由以下控制 |

222| ------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------- |223| ------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------- |

223| `user_prompt` | 提示文本。除非设置了门控条件,否则值为 `<REDACTED>` | `OTEL_LOG_USER_PROMPTS` |224| `user_prompt` | 提示文本。除非设置了门控,否则值为 `<REDACTED>` | `OTEL_LOG_USER_PROMPTS` |

224| `user_prompt_length` | 提示长度(字符数) | |225| `user_prompt_length` | 提示长度(字符数) | |

225| `interaction.sequence` | 此会话中交互的基于 1 的计数器 | |226| `interaction.sequence` | 此会话中交互的基于 1 的计数器,按 Claude Code 进程而不是按会话计数,如 [`event.sequence`](#event-correlation-attributes) 所述 | |

226| `parent.source` | Span 如何获得其 trace 父级:当它在入站 `TRACEPARENT` 下作为父级时为 `env`,当它启动自己的 trace 时为 `none`。需要 Claude Code v2.1.268 或更高版本 | |227| `parent.source` | 跨度如何获得其跟踪父级:当它在入站 `TRACEPARENT` 下作为父级时为 `env`,当它启动自己的跟踪时为 `none`。需要 Claude Code v2.1.268 或更高版本 | |

227| `interaction.duration_ms` | 轮次的实际时钟持续时间 | |228| `interaction.duration_ms` | 转向的挂钟持续时间 | |

228 229 

229**`claude_code.llm_request`**230**`claude_code.llm_request`**

230 231 

231| 属性 | 描述 | 门控条件 |232| 属性 | 描述 | 由以下控制 |

232| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |233| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |

233| `model` | 模型标识符 | |234| `model` | 模型标识符 | |

234| `gen_ai.system` | 始终为 `anthropic`。OpenTelemetry GenAI 语义约定 | |235| `gen_ai.system` | 始终为 `anthropic`。OpenTelemetry GenAI 语义约定 | |

235| `gen_ai.request.model` | 与 `model` 相同的值。OpenTelemetry GenAI 语义约定 | |236| `gen_ai.request.model` | 与 `model` 相同的值。OpenTelemetry GenAI 语义约定 | |

236| `query_source` | 发出请求的子系统,例如 `repl_main_thread` 或子代理名称 | `ENABLE_BETA_TRACING_DETAILED` |237| `query_source` | 发出请求的子系统,例如 `repl_main_thread` 或子代理名称 | `ENABLE_BETA_TRACING_DETAILED` |

237| `query_source_safe` | `query_source` 的有界形式,无论详细的测试版跟踪是否处于活动状态都会发出,具有 `repl_main_thread` 或 `agent.builtin.general-purpose` 等值。`:` 变为 `.`,用户命名的代理显示为 `agent.custom`。需要 Claude Code v2.1.268 或更高版本 | |238| `query_source_safe` | `query_source` 的有界形式,无论是否启用详细的测试版跟踪都会发出,具有 `repl_main_thread` 或 `agent.builtin.general-purpose` 等值。`:` 变为 `.`,用户命名的代理显示为 `agent.custom`。需要 Claude Code v2.1.268 或更高版本 | |

238| `agent_id` | 发出请求的子代理或队友的标识符。在主会话中不存在 | |239| `agent_id` | 发出请求的子代理或队友的标识符。在主会话上不存在 | |

239| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |240| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |

240| `workflow.run_id` | [Workflow](/docs/zh-CN/workflows) 工具运行的运行标识符,前缀为 `wf_`,生成此代理。对于不是由工作流生成的代理不存在 | |241| `workflow.run_id` | 生成此代理的[工作流](/docs/zh-CN/workflows)工具运行的运行标识符,前缀为 `wf_`。对于不是由工作流生成的代理不存在 | |

241| `workflow.name` | 生成此代理的工作流的名称。用户编写的名称被替换为 `custom`,除非设置了门控条件 | `OTEL_LOG_TOOL_DETAILS` |242| `workflow.name` | 生成此代理的工作流的名称。用户编写的名称被替换为 `custom`,除非设置了门控 | `OTEL_LOG_TOOL_DETAILS` |

242| `speed` | `fast` 或 `normal` | |243| `speed` | `fast` 或 `normal` | |

243| `llm_request.context` | `interaction`、`tool` 或 `standalone`,取决于父 span | |244| `llm_request.context` | `interaction`、`tool` 或 `standalone`,取决于父跨度 | |

244| `duration_ms` | 包括重试的实际时钟持续时间 | |245| `duration_ms` | 包括重试的挂钟持续时间 | |

245| `ttft_ms` | 首个令牌的时间(毫秒) | |246| `ttft_ms` | 首个令牌的时间(毫秒) | |

246| `first_content_ms` | 从请求开始到成功尝试的第一个内容块的时间(毫秒)。在回退到非流式传输路径的请求上不存在。需要 Claude Code v2.1.268 或更高版本 | |247| `first_content_ms` | 从请求开始到成功尝试的第一个内容块的时间(毫秒)。在回退到非流式路径的请求上不存在。需要 Claude Code v2.1.268 或更高版本 | |

247| `input_tokens` | API 使用块中的输入令牌计数 | |248| `input_tokens` | 来自 API 使用块的输入令牌计数 | |

248| `output_tokens` | 输出令牌计数 | |249| `output_tokens` | 输出令牌计数 | |

249| `cache_read_tokens` | 从提示缓存读取的令牌 | |250| `cache_read_tokens` | 从提示缓存读取的令牌 | |

250| `cache_creation_tokens` | 写入提示缓存的令牌 | |251| `cache_creation_tokens` | 写入提示缓存的令牌 | |

251| `request_id` | 来自 `request-id` 响应标头的 Anthropic API 请求 ID | |252| `request_id` | 来自 `request-id` 响应标头的 Anthropic API 请求 ID | |

252| `gen_ai.response.id` | 与 `request_id` 相同的值。OpenTelemetry GenAI 语义约定 | |253| `gen_ai.response.id` | 与 `request_id` 相同的值。OpenTelemetry GenAI 语义约定 | |

253| `client_request_id` | 最后一次尝试的客户端生成的 `x-client-request-id` | |254| `client_request_id` | 最终尝试的客户端生成的 `x-client-request-id` | |

254| `attempt` | 为此请求进行的总尝试次数 | |255| `attempt` | 为此请求进行的总尝试次数 | |

255| `success` | `true` 或 `false` | |256| `success` | `true` 或 `false` | |

256| `status_code` | 请求失败时的 HTTP 状态代码 | |257| `status_code` | 请求失败时的 HTTP 状态代码 | |

257| `error` | 请求失败时的错误消息 | |258| `error` | 请求失败时的错误消息 | |

258| `error_class` | 请求失败时的短错误类别令牌,例如 `api_timeout` 或 `server_overload`。需要 Claude Code v2.1.268 或更高版本 | |259| `error_class` | 请求失败时的短错误类令牌,例如 `api_timeout` 或 `server_overload`。需要 Claude Code v2.1.268 或更高版本 | |

259| `response.has_tool_call` | 当响应包含工具使用块时为 `true` | |260| `response.has_tool_call` | 当响应包含工具使用块时为 `true` | |

260| `stop_reason` | API 响应 `stop_reason`,例如 `end_turn`、`tool_use`、`max_tokens`、`stop_sequence`、`pause_turn` 或 `refusal` | |261| `stop_reason` | API 响应 `stop_reason`,例如 `end_turn`、`tool_use`、`max_tokens`、`stop_sequence`、`pause_turn` 或 `refusal` | |

261| `gen_ai.response.finish_reasons` | 与 `stop_reason` 相同的值,包装在字符串数组中。OpenTelemetry GenAI 语义约定 | |262| `gen_ai.response.finish_reasons` | 与 `stop_reason` 相同的值,包装在字符串数组中。OpenTelemetry GenAI 语义约定 | |

262 263 

263每次重试尝试也被记录为 `gen_ai.request.attempt` span 事件,具有 `attempt` 和 `client_request_id` 属性。264每次重试尝试也被记录为具有 `attempt` 和 `client_request_id` 属性的 `gen_ai.request.attempt` 跨度事件。

264 265 

265**`claude_code.tool`**266**`claude_code.tool`**

266 267 

267| 属性 | 描述 | 门控条件 |268| 属性 | 描述 | 由以下控制 |

268| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |269| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |

269| `tool_name` | 工具名称 | |270| `tool_name` | 工具名称 | |

270| `tool_name_safe` | `tool_name` 的形式,不携带任何用户选择的名称。内置工具名称逐字通过。MCP 工具名称显示为 `mcp_other`,除了与几个固定形状匹配的工具名称,例如名为 `browser_*` 的 playwright 工具,这些工具逐字通过。需要 Claude Code v2.1.268 或更高版本 | |271| `tool_name_safe` | `tool_name` 的形式,不携带任何用户选择的名称。内置工具名称逐字通过。MCP 工具名称显示为 `mcp_other`,除了与几个固定形状匹配的工具名称,例如名为 `browser_*` 的 `playwright` 工具,这些工具逐字通过。需要 Claude Code v2.1.268 或更高版本 | |

271| `bash_command_class` | 对于 Bash 工具:命令的第一个程序的类别,来自固定列表,例如 `vcs` 或 `package_manager`。`other` 用于列表外的程序,`unparsed` 当行无法解析时。需要 Claude Code v2.1.268 或更高版本 | |272| `bash_command_class` | 对于 Bash 工具:命令的第一个程序的类别,来自固定列表,例如 `vcs` 或 `package_manager`。`other` 表示列表外的程序,`unparsed` 表示无法解析该行。需要 Claude Code v2.1.268 或更高版本 | |

272| `bash_argv0` | 对于 Bash 工具:当命令的第一个程序在同一固定列表上时,例如 `git` 或 `npm`。`other` 用于列表外的任何程序。需要 Claude Code v2.1.268 或更高版本 | |273| `bash_argv0` | 对于 Bash 工具:当命令的第一个程序在同一固定列表上时,例如 `git` 或 `npm`。`other` 表示列表外的任何程序。需要 Claude Code v2.1.268 或更高版本 | |

273| `duration_ms` | 包括权限等待和执行的实际时钟持续时间 | |274| `duration_ms` | 包括权限等待和执行的挂钟持续时间 | |

274| `result_tokens` | 工具结果的近似令牌大小 | |275| `result_tokens` | 工具结果的近似令牌大小 | |

275| `agent_id` | 运行工具的子代理或队友的标识符。在主会话中不存在 | |276| `agent_id` | 运行工具的子代理或队友的标识符。在主会话上不存在 | |

276| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |277| `parent_agent_id` | 生成此代理的代理的标识符。对于主会话和直接从其生成的代理不存在 | |

277| `workflow.run_id` | 生成此代理的 Workflow 工具运行的运行标识符,前缀为 `wf_`。对于不是由工作流生成的代理不存在 | |278| `workflow.run_id` | 生成此代理的工作流工具运行的运行标识符,前缀为 `wf_`。对于不是由工作流生成的代理不存在 | |

278| `workflow.name` | 生成此代理的工作流的名称。用户编写的名称被替换为 `custom`,除非设置了门控条件 | `OTEL_LOG_TOOL_DETAILS` |279| `workflow.name` | 生成此代理的工作流的名称。用户编写的名称被替换为 `custom`,除非设置了门控 | `OTEL_LOG_TOOL_DETAILS` |

279| `tool_use_id` | 此调用的模型 `tool_use` 块 id。与 [tool\_result](#tool-result-event) 和 [tool\_decision](#tool-decision-event) 事件以及 hook 有效负载中的 `tool_use_id` 匹配,因此您可以将 span 连接到这些记录 | |280| `tool_use_id` | 此调用的模型 `tool_use` 块 id。与[tool\_result](#tool-result-event)和[tool\_decision](#tool-decision-event)事件以及钩子有效负载上的 `tool_use_id` 匹配,因此您可以将跨度加入这些记录 | |

280| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |281| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |

281| `file_path` | Read、Edit 和 Write 工具的目标文件路径 | `OTEL_LOG_TOOL_DETAILS` |282| `file_path` | Read、Edit 和 Write 工具的目标文件路径 | `OTEL_LOG_TOOL_DETAILS` |

282| `full_command` | Bash 工具的命令字符串 | `OTEL_LOG_TOOL_DETAILS` |283| `full_command` | Bash 工具的命令字符串 | `OTEL_LOG_TOOL_DETAILS` |

283| `skill_name` | Skill 工具的技能名称 | `OTEL_LOG_TOOL_DETAILS` |284| `skill_name` | Skill 工具的技能名称 | `OTEL_LOG_TOOL_DETAILS` |

284| `subagent_type` | Agent 工具或旧版 Task 工具的子代理类型 | `OTEL_LOG_TOOL_DETAILS` |285| `subagent_type` | Agent 工具或旧版 Task 工具的子代理类型 | `OTEL_LOG_TOOL_DETAILS` |

285 286 

286当 `OTEL_LOG_TOOL_CONTENT=1` 时,此 span 还记录一个 `tool.output` span 事件,其属性包含工具的输入和输出主体,在内容限制处截断(默认 60 KB)。287当 `OTEL_LOG_TOOL_CONTENT=1` 时,此跨度还记录一个 `tool.output` 跨度事件,其属性包含工具的输入和输出正文,在内容限制处截断(默认值:60 KB)每个属性。

287 288 

288**`claude_code.tool.blocked_on_user`**289**`claude_code.tool.blocked_on_user`**

289 290 

290| 属性 | 描述 | 门控条件 |291| 属性 | 描述 | 由以下控制 |

291| ------------- | ----------------------------------------------------- | ---- |292| ------------- | -------------------------------------- | ----- |

292| `duration_ms` | 等待权限决策所花费的时间 | |293| `duration_ms` | 等待权限决定所花费的时间 | |

293| `decision` | `accept` 或 `reject` | |294| `decision` | `accept` 或 `reject` | |

294| `source` | 决策来源,与 [Tool decision event](#tool-decision-event) 匹配 | |295| `source` | 决定来源,与[工具决定事件](#tool-decision-event)匹配 | |

295 296 

296**`claude_code.tool.execution`**297**`claude_code.tool.execution`**

297 298 

298| 属性 | 描述 | 门控条件 |299| 属性 | 描述 | 由以下控制 |

299| --------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------------------- |300| --------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------- |

300| `duration_ms` | 运行工具主体所花费的时间 | |301| `duration_ms` | 运行工具正文所花费的时间 | |

301| `tool_use_id` | 与父 `claude_code.tool` span 上的值相同 | |302| `tool_use_id` | 与父 `claude_code.tool` 跨度上的值相同 | |

302| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |303| `gen_ai.tool.call.id` | 与 `tool_use_id` 相同的值。OpenTelemetry GenAI 语义约定 | |

303| `success` | `true` 或 `false` | |304| `success` | `true` 或 `false` | |

304| `error` | 执行失败时的错误类别字符串,例如 `Error:ENOENT` 或 `ShellError`。当设置了门控条件时包含完整错误消息 | `OTEL_LOG_TOOL_DETAILS` |305| `error` | 执行失败时的错误类别字符串,例如 `Error:ENOENT` 或 `ShellError`。当设置了门控时包含完整的错误消息 | `OTEL_LOG_TOOL_DETAILS` |

305| `error_class` | 标识符形式的错误类别,其中字母、数字和下划线之外的字符被替换为 `_`,例如 `Error_ENOENT` 或 `ShellError`。即使 `error` 携带完整消息,也会携带类别。需要 Claude Code v2.1.268 或更高版本 | |306| `error_class` | 标识符形式的错误类别,字母、数字和下划线以外的字符替换为 `_`,例如 `Error_ENOENT` 或 `ShellError`。即使 `error` 携带完整消息,也携带类别。需要 Claude Code v2.1.268 或更高版本 | |

306 307 

307**`claude_code.hook`**308**`claude_code.hook`**

308 309 

309此 span 仅在详细的测试版跟踪处于活动状态时发出,这需要 `ENABLE_BETA_TRACING_DETAILED=1` 和 `BETA_TRACING_ENDPOINT`,这对变量也 [改变您的日志和跟踪的去向](/docs/zh-CN/env-vars#variables)。在您的 shell、用户设置或托管设置中设置该对;两个变量都在 [项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env) 中被忽略。仅设置 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 时不会发出。310此跨度仅在启用详细的测试版跟踪时出现,这需要 `ENABLE_BETA_TRACING_DETAILED=1` 和 `BETA_TRACING_ENDPOINT`,这对也[改变您的日志和跟踪的去向](/docs/zh-CN/env-vars#variables)。在您的 shell、用户设置或托管设置中设置该对;两个变量都在[项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)中被忽略。仅 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 不会产生它。

310 311 

311在交互式 CLI 会话中,详细的测试版跟踪还需要您的组织被列入该功能的白名单。Agent SDK 和非交互式 `-p` 会话不需要白名单。312在交互式 CLI 会话中,详细的测试版跟踪还需要您的组织被列入该功能的白名单。Agent SDK 和非交互式 `-p` 会话不需要白名单。

312 313 

313| 属性 | 描述 | 门控条件 |314| 属性 | 描述 | 由以下控制 |

314| ------------------------ | -------------------------------- | ----------------------- |315| ------------------------ | ---------------------------- | ----------------------- |

315| `hook_event` | Hook 事件类型,例如 `PreToolUse` | |316| `hook_event` | 钩子事件类型,例如 `PreToolUse` | |

316| `hook_name` | 完整 hook 名称,例如 `PreToolUse:Write` | |317| `hook_name` | 完整钩子名称,例如 `PreToolUse:Write` | |

317| `num_hooks` | 执行的匹配 hook 命令数 | |318| `num_hooks` | 执行的匹配钩子命令数 | |

318| `hook_definitions` | JSON 序列化的 hook 配置 | `OTEL_LOG_TOOL_DETAILS` |319| `hook_definitions` | JSON 序列化的钩子配置 | `OTEL_LOG_TOOL_DETAILS` |

319| `duration_ms` | 所有匹配 hook 的实际时钟持续时间 | |320| `duration_ms` | 所有匹配钩子的挂钟持续时间 | |

320| `num_success` | 成功完成的 hook 计数 | |321| `num_success` | 成功完成的钩子计数 | |

321| `num_blocking` | 返回阻止决策的 hook 计数 | |322| `num_blocking` | 返回阻止决定的钩子计数 | |

322| `num_non_blocking_error` | 失败但未阻止的 hook 计数 | |323| `num_non_blocking_error` | 在不阻止的情况下失败的钩子计数 | |

323| `num_cancelled` | 在完成前取消的 hook 计数 | |324| `num_cancelled` | 在完成前取消的钩子计数 | |

324 325 

325<Note>326<Note>

326 其他内容承载属性,例如 `new_context`、`system_prompt_preview`、`user_system_prompt`、`tool_input` 和 `response.model_output`,仅在详细的测试版跟踪处于活动状态时发出。它们不是稳定 span 架构的一部分。327 其他内容承载属性,例如 `new_context`、`system_prompt_preview`、`user_system_prompt`、`tool_input` 和 `response.model_output`,仅在启用详细的测试版跟踪时发出。它们不是稳定跨度架构的一部分。

327 328 

328 `user_system_prompt` 还需要 `OTEL_LOG_USER_PROMPTS=1`。它仅包含您通过 `systemPrompt` SDK 选项或 `--system-prompt` 和 `--append-system-prompt` 标志提供的系统提示文本,在内容限制处截断(默认 60 KB),并且每个会话发出一次而不是每个请求发出一次。329 `user_system_prompt` 另外需要 `OTEL_LOG_USER_PROMPTS=1`。它仅携带您通过 `systemPrompt` SDK 选项或 `--system-prompt` 和 `--append-system-prompt` 标志提供的系统提示文本,在内容限制处截断(默认值:60 KB),并且每个会话发出一次而不是每个请求。

329</Note>330</Note>

330 331 

331<h3 id="dynamic-headers">332<h3 id="dynamic-headers">

332 动态标头333 动态标头

333</h3>334</h3>

334 335 

335对于需要动态身份验证的企业环境,您可以配置脚本来动态生成标头。动态标头仅适用于 `http/protobuf` 和 `http/json` 协议。使用 `grpc` 协议,Claude Code 仅使用静态标头变量 `OTEL_EXPORTER_OTLP_HEADERS` 及其每个信号的变体。336对于需要动态身份验证的企业环境,您可以配置脚本以动态生成标头。动态标头仅适用于 `http/protobuf` 和 `http/json` 协议。使用 `grpc` 协议,Claude Code 仅使用静态标头变量 `OTEL_EXPORTER_OTLP_HEADERS` 及其按信号的变体。

336 337 

337<h4 id="settings-configuration">338<h4 id="settings-configuration">

338 设置配置339 设置配置

339</h4>340</h4>

340 341 

341添加到您的 `.claude/settings.json`,将路径替换为您自己的脚本:342添加到您的 `.claude/settings.json`,用您自己的脚本替换路径:

342 343 

343```json theme={null}344```json theme={null}

344{345{


352 脚本要求353 脚本要求

353</h4>354</h4>

354 355 

355脚本必须输出有效的 JSON,其中包含表示 HTTP 标头的字符串键值对:356脚本必须输出有效的 JSON,其中包含代表 HTTP 标头的字符串键值对:

356 357 

357```bash theme={null}358```bash theme={null}

358#!/bin/bash359#!/bin/bash

359# 示例:多个标头360# Example: Multiple headers

360echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"361echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

361```362```

362 363 


379具有多个团队或部门的组织可以使用 `OTEL_RESOURCE_ATTRIBUTES` 环境变量添加自定义属性以区分不同的组:380具有多个团队或部门的组织可以使用 `OTEL_RESOURCE_ATTRIBUTES` 环境变量添加自定义属性以区分不同的组:

380 381 

381```bash theme={null}382```bash theme={null}

382# 添加自定义属性用于团队识别383# Add custom attributes for team identification

383export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"384export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

384```385```

385 386 

386这些自定义属性将包含在所有指标和事件中,允许您:387这些自定义属性包含在所有指标和事件中,允许您:

387 388 

388* 按团队或部门过滤指标389* 按团队或部门过滤指标

389* 按成本中心跟踪成本390* 按成本中心跟踪成本

390* 创建特定于团队的仪表板391* 创建特定于团队的仪表板

391* 为特定团队设置警报392* 为特定团队设置警报

392 393 

393Claude Code 将这些值作为属性附加到每个指标数据点和事件记录上,除了在 OTLP 资源块中发送它们。因为大多数指标后端将数据点属性公开为可查询的标签,您可以直接按自定义键对指标进行分组和过滤。自定义键永远不会覆盖 [标准属性](#standard-attributes),例如 `user.id` 或 `session.id`:当键冲突时,Claude Code 保留内置值。394Claude Code 将这些值作为属性附加到每个指标数据点和事件记录上,除了在 OTLP 资源块中发送它们。因为大多数指标后端将数据点属性公开为可查询的标签,您可以直接按自定义键对指标进行分组和过滤。除了 `vcs.*` [存储库属性](#repository-attributes),自定义键永远不会覆盖[标准属性](#standard-attributes),例如 `user.id` 或 `session.id`:当键冲突时,Claude Code 保留内置值。

394 395 

395每个自定义键都成为每个指标系列上的标签,因此高基数值会增加指标后端中的存储成本。要仅在资源块中发送自定义属性并从数据点标签中省略它们,请设置 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`。请参阅 [指标基数控制](#metrics-cardinality-control)。396每个自定义键都成为每个指标系列上的标签,因此高基数值会增加指标后端中的存储成本。要仅在资源块中发送自定义属性并从数据点标签中省略它们,请设置 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`。请参阅[指标基数控制](#metrics-cardinality-control)。

396 397 

397<Warning>398<Warning>

398 `OTEL_RESOURCE_ATTRIBUTES` 环境变量使用逗号分隔的键=值对,具有严格的格式要求:399 `OTEL_RESOURCE_ATTRIBUTES` 环境变量使用逗号分隔的键=值对,具有严格的格式要求:

399 400 

400 * **不允许空格**:值不能包含空格。例如,`user.organizationName=My Company` 无效401 * **不允许空格**:值不能包含空格。例如,`user.organizationName=My Company` 无效

401 * **格式**:必须是逗号分隔的键=值对:`key1=value1,key2=value2`402 * **格式**:必须是逗号分隔的键=值对:`key1=value1,key2=value2`

402 * **允许的字符**:仅 US-ASCII 字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠403 * **允许的字符**:仅限 US-ASCII 字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠

403 * **特殊字符**:超出允许范围的字符必须进行百分比编码404 * **特殊字符**:允许范围之外的字符必须进行百分比编码

404 405 

405 对于需要空格的值,请改用下划线或驼峰式大小写。以下示例以每种形式设置 `org.name`:406 对于需要空格的值,请改用下划线或驼峰式大小写。以下示例使用每种形式设置 `org.name`:

406 407 

407 ```bash theme={null}408 ```bash theme={null}

408 export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"409 export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"

409 export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"410 export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

410 ```411 ```

411 412 

412 您可以对任何字符进行百分比编码,不仅仅是被排除的字符。此示例对空格和撇号进行编码:413 您可以对任何字符进行百分比编码,而不仅仅是被排除的字符。此示例对空格和撇号进行编码:

413 414 

414 ```bash theme={null}415 ```bash theme={null}

415 export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"416 export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"

416 ```417 ```

417 418 

418 用引号包装值不会转义空格。例如,`org.name="My Company"` 会导致字面值 `"My Company"`(包括引号),而不是 `My Company`。419 将值包装在引号中不会转义空格。例如,`org.name="My Company"` 导致文字值 `"My Company"`(包括引号),而不是 `My Company`。

419</Warning>420</Warning>

420 421 

421<h3 id="example-configurations">422<h3 id="example-configurations">

422 示例配置423 示例配置

423</h3>424</h3>

424 425 

425在运行 `claude` 之前设置这些环境变量。下面的每个场景显示完整的配置,每个变量在 [常见配置变量](#common-configuration-variables) 下进行了描述。要确认配置生效,请在启动会话后检查您的后端中的 `claude_code.session.count` 指标;[快速入门](#quick-start) 涵盖仅日志验证以及当没有任何内容到达时要检查的内容。426在运行 `claude` 之前设置这些环境变量。下面的每个场景都显示完整的配置,每个变量在[常见配置变量](#common-configuration-variables)下进行了描述。要确认配置生效,请在启动会话后检查后端中的 `claude_code.session.count` 指标;[快速入门](#quick-start)涵盖仅日志验证以及当没有任何内容到达时要检查的内容。

426 427 

427用于控制台调试,导出间隔为 1 秒:428对于具有 1 秒导出间隔的控制台调试:

428 429 

429```bash theme={null}430```bash theme={null}

430export CLAUDE_CODE_ENABLE_TELEMETRY=1431export CLAUDE_CODE_ENABLE_TELEMETRY=1


432export OTEL_METRIC_EXPORT_INTERVAL=1000433export OTEL_METRIC_EXPORT_INTERVAL=1000

433```434```

434 435 

435用于 OTLP over gRPC:436对于 OTLP over gRPC:

436 437 

437```bash theme={null}438```bash theme={null}

438export CLAUDE_CODE_ENABLE_TELEMETRY=1439export CLAUDE_CODE_ENABLE_TELEMETRY=1


441export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317442export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

442```443```

443 444 

444用于 Prometheus,从 `http://localhost:9464/metrics` 抓取:445对于 Prometheus,从 `http://localhost:9464/metrics` 抓取:

445 446 

446```bash theme={null}447```bash theme={null}

447export CLAUDE_CODE_ENABLE_TELEMETRY=1448export CLAUDE_CODE_ENABLE_TELEMETRY=1

448export OTEL_METRICS_EXPORTER=prometheus449export OTEL_METRICS_EXPORTER=prometheus

449```450```

450 451 

451在 [自托管环境](/docs/zh-CN/self-hosted-environments-reference#pass-through-session-child-metrics) 上,会话仅在运行器的默认容量为 1 时绑定端口 9464。在更高的容量下,运行器改为在其自己的 `/metrics` 端点上重新公开会话计数器和仪表。452在[自托管环境](/docs/zh-CN/self-hosted-environments-reference#pass-through-session-child-metrics)上,会话仅在运行器的默认容量为 1 时绑定端口 9464。在更高的容量下,运行器改为在其自己的 `/metrics` 端点上重新公开会话计数器和仪表。

452 453 

453要将指标发送到多个导出器:454要将指标发送到多个导出器:

454 455 


499所有指标和事件共享这些标准属性:500所有指标和事件共享这些标准属性:

500 501 

501| 属性 | 描述 | 控制方式 |502| 属性 | 描述 | 控制方式 |

502| ------------------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------- |503| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |

503| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认:true) |504| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认:true) |

504| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认:false) |505| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认:false) |

505| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py` 或 `claude-vscode` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认:false) |506| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py` 或 `claude-vscode` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认:false) |


510| `user.email` | 用户电子邮件地址,来自您的登录或在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中来自会话自己的凭证 | 可用时始终包含 |511| `user.email` | 用户电子邮件地址,来自您的登录或在 [云会话](/docs/zh-CN/claude-code-on-the-web) 中来自会话自己的凭证 | 可用时始终包含 |

511| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |512| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |

512| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅 [多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认:true) |513| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅 [多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认:true) |

514| `vcs.repository.url.full`、`vcs.owner.name`、`vcs.repository.name`、`vcs.provider.name` | 会话存储库的身份,从其 `origin` 远程派生。请参阅 [存储库属性](#repository-attributes) | `OTEL_METRICS_INCLUDE_REPOSITORY`(默认:false)。需要 Claude Code v2.1.269 或更高版本 |

513 515 

514当 Claude Code 登录到 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 时,CLI 会使用来自网关会话的已认证身份标记导出:`user.id` 是 IdP 主体而不是匿名安装标识符,`user.email` 是已登录的电子邮件,`user.groups` 作为逗号分隔的字符串携带 IdP 组成员身份。每个导出还携带 `identity.source: gateway-oidc`。网关身份最后应用,因此通过 `OTEL_RESOURCE_ATTRIBUTES` 设置的 `user.*` 和 `identity.*` 键在网关会话上被忽略。516当 Claude Code 登录到 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 时,CLI 会使用来自网关会话的已认证身份标记导出:`user.id` 是 IdP 主体而不是匿名安装标识符,`user.email` 是已登录的电子邮件,`user.groups` 作为逗号分隔的字符串携带 IdP 组成员身份。每个导出还携带 `identity.source: gateway-oidc`。网关身份最后应用,因此通过 `OTEL_RESOURCE_ATTRIBUTES` 设置的 `user.*` 和 `identity.*` 键在网关会话上被忽略。

515 517 


520* `workflow.run_id`:运行标识符,前缀为 `wf_`,在属于 [Workflow](/docs/zh-CN/workflows) 工具运行的代理发出的 API 和工具事件上。按一个 `workflow.run_id` 过滤事件可以重建该运行的 API 请求和工具结果。标识符涵盖工作流脚本生成的代理以及这些代理依次生成的任何代理,例如技能调用。它与 Workflow 工具结果中报告的运行标识符匹配。在所有其他事件上不存在。需要 Claude Code v2.1.202 或更高版本522* `workflow.run_id`:运行标识符,前缀为 `wf_`,在属于 [Workflow](/docs/zh-CN/workflows) 工具运行的代理发出的 API 和工具事件上。按一个 `workflow.run_id` 过滤事件可以重建该运行的 API 请求和工具结果。标识符涵盖工作流脚本生成的代理以及这些代理依次生成的任何代理,例如技能调用。它与 Workflow 工具结果中报告的运行标识符匹配。在所有其他事件上不存在。需要 Claude Code v2.1.202 或更高版本

521* `workflow.name`:工作流的名称,其脚本的 `meta.name`,与 `workflow.run_id` 一起发出。内置工作流名称在运行执行未修改的内置脚本时按原样出现。用户创作的名称(包括内置脚本的编辑副本)被替换为 `custom`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。需要 Claude Code v2.1.202 或更高版本523* `workflow.name`:工作流的名称,其脚本的 `meta.name`,与 `workflow.run_id` 一起发出。内置工作流名称在运行执行未修改的内置脚本时按原样出现。用户创作的名称(包括内置脚本的编辑副本)被替换为 `custom`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。需要 Claude Code v2.1.202 或更高版本

522 524 

525<h4 id="repository-attributes">

526 存储库属性

527</h4>

528 

529设置 `OTEL_METRICS_INCLUDE_REPOSITORY=true` 以使用会话存储库的身份标记指标和事件,以便共享收集器可以按存储库归属使用情况。需要 Claude Code v2.1.269 或更高版本。

530 

531Claude Code 从存储库的 `origin` 远程每个会话派生这些属性一次。一个存储库的 HTTPS 和 SSH 远程产生相同的值:

532 

533| 属性 | 值 |

534| ------------------------- | ------------------------------------------------------------------------------------- |

535| `vcs.repository.url.full` | 存储库的浏览器 URL,不带 `.git`,例如 `https://github.com/example-org/example-repo` |

536| `vcs.owner.name` | 所有者或组路径,例如 `example-org`;当远程路径有单个段时省略 |

537| `vcs.repository.name` | 裸存储库名称,例如 `example-repo` |

538| `vcs.provider.name` | 当 Claude Code 将远程的主机或 URL 形状识别为这些提供商之一时为 `github`、`gitlab`、`bitbucket` 或 `gitea`;否则省略 |

539 

540值被小写,远程 URL 中的凭证、查询字符串和片段永远不会出现在其中。当会话没有 `origin` 远程、远程不是 URL 形状或唯一的封闭存储库是您的主目录时,属性被省略。

541 

542您在 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) 中声明的 `vcs.*` 键替换该键的派生值。如果您声明 `vcs.repository.url.full`,Claude Code 永远不会读取远程,仅报告您声明的键。

543 

544属性仅流向您自己的导出器;Anthropic 的遥测删除每个 `vcs.*` 键。

545 

523<h3 id="metrics">546<h3 id="metrics">

524 指标547 指标

525</h3>548</h3>


664| 属性 | 描述 |687| 属性 | 描述 |

665| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |688| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

666| `prompt.id` | UUID v4 标识符,链接处理单个用户提示时生成的所有事件 |689| `prompt.id` | UUID v4 标识符,链接处理单个用户提示时生成的所有事件 |

690| `event.sequence` | 0 开始的计数器,用于排序事件,按 Claude Code 进程而不是按会话计数 |

667| `message.uuid` | 消息的 UUID,如会话记录中保存的那样,`~/.claude/projects/*/*.jsonl` 文件。在 `assistant_response` 上存在,在 `user_prompt` 上存在,除了命令分派,它可以产生零个或多个消息。在 `assistant_response` 上,这是响应的最终记录条目,下一轮的 `parentUuid` 从其链接。需要 Claude Code v2.1.214 或更高版本 |691| `message.uuid` | 消息的 UUID,如会话记录中保存的那样,`~/.claude/projects/*/*.jsonl` 文件。在 `assistant_response` 上存在,在 `user_prompt` 上存在,除了命令分派,它可以产生零个或多个消息。在 `assistant_response` 上,这是响应的最终记录条目,下一轮的 `parentUuid` 从其链接。需要 Claude Code v2.1.214 或更高版本 |

668| `client_request_id` | 客户端生成的 UUID,作为 `x-client-request-id` 请求标头发送。在第一方 API 连接上的 `api_request` 和 `api_error` 上存在;在第三方提供商后端上不存在,当请求通过非流式回退重试时。将请求与其响应配对,并对于从未产生服务器 `request_id` 的超时等失败保持可用。与 `llm_request` 跟踪跨度上的相同属性匹配。需要 Claude Code v2.1.214 或更高版本 |692| `client_request_id` | 客户端生成的 UUID,作为 `x-client-request-id` 请求标头发送。在第一方 API 连接上的 `api_request` 和 `api_error` 上存在;在第三方提供商后端上不存在,当请求通过非流式回退重试时。将请求与其响应配对,并对于从未产生服务器 `request_id` 的超时等失败保持可用。与 `llm_request` 跟踪跨度上的相同属性匹配。需要 Claude Code v2.1.214 或更高版本 |

669 693 

670要跟踪由单个提示触发的所有活动,请按特定 `prompt.id` 值过滤您的事件。这会返回 user\_prompt 事件、任何 api\_request 事件以及处理该提示时发生的任何 tool\_result 事件。694要跟踪由单个提示触发的所有活动,请按特定 `prompt.id` 值过滤您的事件。这会返回 user\_prompt 事件、任何 api\_request 事件以及处理该提示时发生的任何 tool\_result 事件。

671 695 

696`event.sequence` 在每次 Claude Code 进程启动时从 0 开始,并在该进程的生命周期内计数。它在 `/clear` 后继续计数,这会分配一个新的 `session.id`。如果您 [恢复会话而不分叉](/docs/zh-CN/how-claude-code-works#resume-or-fork-sessions),会话保留其 `session.id` 但从恢复它的进程获取其 `event.sequence` 值,因此在一个会话内,后来的事件可以携带比早期事件更低的值,或重复一个。要排序会话的事件,按 `event.timestamp` 排序,使用 `event.sequence` 排序共享时间戳的事件。

697 

672对于消息级别的重建,每个事件类都携带与会话记录中的字段匹配的键。记录条目格式是 [Claude Code 内部的](/docs/zh-CN/sessions#where-transcripts-are-stored),在版本之间变化,因此在这些字段上联接的管道可能在任何版本上中断;将联接视为版本特定的而不是稳定的合同:698对于消息级别的重建,每个事件类都携带与会话记录中的字段匹配的键。记录条目格式是 [Claude Code 内部的](/docs/zh-CN/sessions#where-transcripts-are-stored),在版本之间变化,因此在这些字段上联接的管道可能在任何版本上中断;将联接视为版本特定的而不是稳定的合同:

673 699 

674* `message.uuid` 在 `user_prompt` 和 `assistant_response` 上700* `message.uuid` 在 `user_prompt` 和 `assistant_response` 上


688* 所有 [标准属性](#standard-attributes)714* 所有 [标准属性](#standard-attributes)

689* `event.name`:`"user_prompt"`715* `event.name`:`"user_prompt"`

690* `event.timestamp`:ISO 8601 时间戳716* `event.timestamp`:ISO 8601 时间戳

691* `event.sequence`:单调递增的计数器,用于在会话内排序事件717* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

692* `prompt_length`:提示的长度718* `prompt_length`:提示的长度

693* `prompt`:提示内容。默认为已编辑。设置 `OTEL_LOG_USER_PROMPTS=1` 以包含它719* `prompt`:提示内容。默认为已编辑。设置 `OTEL_LOG_USER_PROMPTS=1` 以包含它

694* `message.uuid`:生成的用户消息的 UUID,与保存的记录条目匹配。在命令分派上不存在,它可以产生零个或多个消息。需要 Claude Code v2.1.214 或更高版本720* `message.uuid`:生成的用户消息的 UUID,与保存的记录条目匹配。在命令分派上不存在,它可以产生零个或多个消息。需要 Claude Code v2.1.214 或更高版本


708* 所有 [标准属性](#standard-attributes)734* 所有 [标准属性](#standard-attributes)

709* `event.name`:`"assistant_response"`735* `event.name`:`"assistant_response"`

710* `event.timestamp`:ISO 8601 时间戳736* `event.timestamp`:ISO 8601 时间戳

711* `event.sequence`:单调递增的计数器,用于在会话内排序事件737* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

712* `response_length`:响应文本的长度(字符数)738* `response_length`:响应文本的长度(字符数)

713* `response`:响应文本,在内容限制处截断(默认 60 KB)。默认为 `<REDACTED>` 编辑。设置 `OTEL_LOG_ASSISTANT_RESPONSES=1` 以包含它。当 `OTEL_LOG_ASSISTANT_RESPONSES` 未设置时,`OTEL_LOG_USER_PROMPTS` 控制它,因此设置 `OTEL_LOG_ASSISTANT_RESPONSES=0` 以在启用提示日志记录时保持响应编辑739* `response`:响应文本,在内容限制处截断(默认 60 KB)。默认为 `<REDACTED>` 编辑。设置 `OTEL_LOG_ASSISTANT_RESPONSES=1` 以包含它。当 `OTEL_LOG_ASSISTANT_RESPONSES` 未设置时,`OTEL_LOG_USER_PROMPTS` 控制它,因此设置 `OTEL_LOG_ASSISTANT_RESPONSES=0` 以在启用提示日志记录时保持响应编辑

714* `model`:模型标识符(例如,"claude-sonnet-5")740* `model`:模型标识符(例如,"claude-sonnet-5")


729* 所有 [标准属性](#standard-attributes)755* 所有 [标准属性](#standard-attributes)

730* `event.name`:`"tool_result"`756* `event.name`:`"tool_result"`

731* `event.timestamp`:ISO 8601 时间戳757* `event.timestamp`:ISO 8601 时间戳

732* `event.sequence`:单调递增的计数器,用于在会话内排序事件758* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

733* `tool_name`:工具的名称759* `tool_name`:工具的名称

734* `tool_use_id`:此工具调用的唯一标识符。与传递给 hooks 的 `tool_use_id` 匹配,允许在 OTel 事件和 hook 捕获的数据之间进行关联。760* `tool_use_id`:此工具调用的唯一标识符。与传递给 hooks 的 `tool_use_id` 匹配,允许在 OTel 事件和 hook 捕获的数据之间进行关联。

735* `success`:`"true"` 或 `"false"`761* `success`:`"true"` 或 `"false"`


741* `tool_input_size_bytes`:JSON 序列化工具输入的大小(字节)767* `tool_input_size_bytes`:JSON 序列化工具输入的大小(字节)

742* `tool_result_size_bytes`:工具结果的大小(字节)768* `tool_result_size_bytes`:工具结果的大小(字节)

743* `mcp_server_scope`:MCP 服务器范围标识符(用于 MCP 工具)769* `mcp_server_scope`:MCP 服务器范围标识符(用于 MCP 工具)

770* `vcs.ref.head.revision`、`vcs.ref.head.name`、`vcs.ref.head.type`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):由 Bash 或 PowerShell 工具成功运行的 `git commit` 的提交身份。`vcs.ref.head.revision` 是提交 SHA,`vcs.ref.head.name` 是它被提交到的分支,`vcs.ref.head.type` 是 `branch`。当提交在分离的 HEAD 上进行时,名称和类型被省略。需要 Claude Code v2.1.269 或更高版本

744* `tool_parameters`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):包含工具特定参数的 JSON 字符串。对于 Claude Desktop 的内置服务器,在 Claude Desktop 拥有的会话中,即使标志关闭,`mcp_server_name`/`mcp_tool_name` 对也包含在内,与 [工具决策事件](#tool-decision-event) 相同的主机创作异常,需要 Claude Code v2.1.214 或更高版本。参数因工具而异:771* `tool_parameters`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):包含工具特定参数的 JSON 字符串。对于 Claude Desktop 的内置服务器,在 Claude Desktop 拥有的会话中,即使标志关闭,`mcp_server_name`/`mcp_tool_name` 对也包含在内,与 [工具决策事件](#tool-decision-event) 相同的主机创作异常,需要 Claude Code v2.1.214 或更高版本。参数因工具而异:

745 * 对于 Bash 工具:包括 `bash_command`、`full_command`、`timeout`、`description`、`dangerouslyDisableSandbox` 和 `git_commit_id`(git commit 命令成功时的提交 SHA)。桌面应用的工作区 bash 工具也将 `tool_name` 报告为 `Bash`,但仅包括 `bash_command`、`full_command` 和 `timeout`772 * 对于 Bash 工具:包括 `bash_command`、`full_command`、`timeout`、`description`、`dangerouslyDisableSandbox`,以及 `git_commit_id` 和 `git_branch`(当 `git commit` 命令成功时)。`git_commit_id` 是完整的提交 SHA(当提交是会话工作目录的 HEAD 时),否则是 git 的缩写 SHA。`git_branch` 是它被提交到的分支,在分离的 HEAD 上省略。对于桌面应用的工作区 Bash 工具,它也将 `tool_name` 报告为 `Bash`:仅包括 `bash_command`、`full_command` 和 `timeout`

746 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`773 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`

747 * 对于 Skill 工具:包括 `skill_name`774 * 对于 Skill 工具:包括 `skill_name`

748 * 对于 Agent 工具或旧版 Task 工具:包括 `subagent_type`775 * 对于 Agent 工具或旧版 Task 工具:包括 `subagent_type`


761* 所有 [标准属性](#standard-attributes)788* 所有 [标准属性](#standard-attributes)

762* `event.name`:`"api_request"`789* `event.name`:`"api_request"`

763* `event.timestamp`:ISO 8601 时间戳790* `event.timestamp`:ISO 8601 时间戳

764* `event.sequence`:单调递增的计数器,用于在会话内排序事件791* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

765* `model`:使用的模型(例如,"claude-sonnet-5")792* `model`:使用的模型(例如,"claude-sonnet-5")

766* `cost_usd`:USD 估计成本793* `cost_usd`:USD 估计成本

767* `cost_usd_micros`:USD 百万分之一的估计成本,作为整数发出794* `cost_usd_micros`:USD 百万分之一的估计成本,作为整数发出


790* 所有 [标准属性](#standard-attributes)817* 所有 [标准属性](#standard-attributes)

791* `event.name`:`"api_error"`818* `event.name`:`"api_error"`

792* `event.timestamp`:ISO 8601 时间戳819* `event.timestamp`:ISO 8601 时间戳

793* `event.sequence`:单调递增的计数器,用于在会话内排序事件820* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

794* `model`:使用的模型(例如,"claude-sonnet-5")821* `model`:使用的模型(例如,"claude-sonnet-5")

795* `error`:错误消息822* `error`:错误消息

796* `status_code`:HTTP 状态代码(数字形式)。对于非 HTTP 错误(例如连接失败)不存在。823* `status_code`:HTTP 状态代码(数字形式)。对于非 HTTP 错误(例如连接失败)不存在。


816* 所有 [标准属性](#standard-attributes)843* 所有 [标准属性](#standard-attributes)

817* `event.name`:`"api_refusal"`844* `event.name`:`"api_refusal"`

818* `event.timestamp`:ISO 8601 时间戳845* `event.timestamp`:ISO 8601 时间戳

819* `event.sequence`:单调递增的计数器,用于在会话内排序事件846* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

820* `model`:来自请求的模型标识符847* `model`:来自请求的模型标识符

821* `request_id`:来自响应的 `request-id` 标头的 Anthropic API 请求 ID,例如 `"req_011..."`。仅当 API 返回时存在。848* `request_id`:来自响应的 `request-id` 标头的 Anthropic API 请求 ID,例如 `"req_011..."`。仅当 API 返回时存在。

822* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称。有关定义,请参阅 [`api_request`](#api-request-event)。849* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称。有关定义,请参阅 [`api_request`](#api-request-event)。


842* 所有 [标准属性](#standard-attributes)869* 所有 [标准属性](#standard-attributes)

843* `event.name`:`"api_request_body"`870* `event.name`:`"api_request_body"`

844* `event.timestamp`:ISO 8601 时间戳871* `event.timestamp`:ISO 8601 时间戳

845* `event.sequence`:单调递增的计数器,用于在会话内排序事件872* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

846* `body`:JSON 序列化的 Messages API 请求参数(系统提示、消息、工具等),在内容限制处截断(默认 60 KB)。先前助手轮次中的扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。873* `body`:JSON 序列化的 Messages API 请求参数(系统提示、消息、工具等),在内容限制处截断(默认 60 KB)。先前助手轮次中的扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。

847* `body_ref`:包含未截断主体的 `<dir>/<uuid>.request.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。874* `body_ref`:包含未截断主体的 `<dir>/<uuid>.request.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。

848* `body_length`:未截断的主体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位875* `body_length`:未截断的主体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位


863* 所有 [标准属性](#standard-attributes)890* 所有 [标准属性](#standard-attributes)

864* `event.name`:`"api_response_body"`891* `event.name`:`"api_response_body"`

865* `event.timestamp`:ISO 8601 时间戳892* `event.timestamp`:ISO 8601 时间戳

866* `event.sequence`:单调递增的计数器,用于在会话内排序事件893* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

867* `body`:JSON 序列化的 Messages API 响应(id、内容块、使用情况、停止原因),在内容限制处截断(默认 60 KB)。扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。894* `body`:JSON 序列化的 Messages API 响应(id、内容块、使用情况、停止原因),在内容限制处截断(默认 60 KB)。扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。

868* `body_ref`:包含未截断主体的 `<dir>/<request_id>.response.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。895* `body_ref`:包含未截断主体的 `<dir>/<request_id>.response.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。

869* `body_length`:未截断的主体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位896* `body_length`:未截断的主体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位


885* 所有 [标准属性](#standard-attributes)912* 所有 [标准属性](#standard-attributes)

886* `event.name`:`"tool_decision"`913* `event.name`:`"tool_decision"`

887* `event.timestamp`:ISO 8601 时间戳914* `event.timestamp`:ISO 8601 时间戳

888* `event.sequence`:单调递增的计数器,用于在会话内排序事件915* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

889* `tool_name`:工具的名称(例如,"Read"、"Edit"、"Write"、"NotebookEdit")916* `tool_name`:工具的名称(例如,"Read"、"Edit"、"Write"、"NotebookEdit")

890* `tool_use_id`:此工具调用的唯一标识符。与传递给 hooks 的 `tool_use_id` 匹配,允许在 OTel 事件和 hook 捕获的数据之间进行关联。917* `tool_use_id`:此工具调用的唯一标识符。与传递给 hooks 的 `tool_use_id` 匹配,允许在 OTel 事件和 hook 捕获的数据之间进行关联。

891* `decision`:`"accept"` 或 `"reject"`918* `decision`:`"accept"` 或 `"reject"`


920* 所有 [标准属性](#standard-attributes)947* 所有 [标准属性](#standard-attributes)

921* `event.name`:`"permission_mode_changed"`948* `event.name`:`"permission_mode_changed"`

922* `event.timestamp`:ISO 8601 时间戳949* `event.timestamp`:ISO 8601 时间戳

923* `event.sequence`:单调递增的计数器,用于在会话内排序事件950* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

924* `from_mode`:前一个权限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`951* `from_mode`:前一个权限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`

925* `to_mode`:新权限模式952* `to_mode`:新权限模式

926* `trigger`:导致更改的原因。`"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 之一。当转换来自 SDK 或桥接时不存在953* `trigger`:导致更改的原因。`"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 之一。当转换来自 SDK 或桥接时不存在


938* 所有 [标准属性](#standard-attributes)965* 所有 [标准属性](#standard-attributes)

939* `event.name`:`"auth"`966* `event.name`:`"auth"`

940* `event.timestamp`:ISO 8601 时间戳967* `event.timestamp`:ISO 8601 时间戳

941* `event.sequence`:单调递增的计数器,用于在会话内排序事件968* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

942* `action`:`"login"` 或 `"logout"`969* `action`:`"login"` 或 `"logout"`

943* `success`:`"true"` 或 `"false"`970* `success`:`"true"` 或 `"false"`

944* `auth_method`:身份验证方法,例如 `"oauth"`971* `auth_method`:身份验证方法,例如 `"oauth"`


958* 所有 [标准属性](#standard-attributes)985* 所有 [标准属性](#standard-attributes)

959* `event.name`:`"mcp_server_connection"`986* `event.name`:`"mcp_server_connection"`

960* `event.timestamp`:ISO 8601 时间戳987* `event.timestamp`:ISO 8601 时间戳

961* `event.sequence`:单调递增的计数器,用于在会话内排序事件988* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

962* `status`:`"connected"`、`"failed"` 或 `"disconnected"`989* `status`:`"connected"`、`"failed"` 或 `"disconnected"`

963* `transport_type`:服务器传输,例如 `"stdio"`、`"sse"` 或 `"http"`990* `transport_type`:服务器传输,例如 `"stdio"`、`"sse"` 或 `"http"`

964* `server_scope`:服务器配置的范围,例如 `"user"`、`"project"` 或 `"local"`991* `server_scope`:服务器配置的范围,例如 `"user"`、`"project"` 或 `"local"`


983* 所有 [标准属性](#standard-attributes)1010* 所有 [标准属性](#standard-attributes)

984* `event.name`:`"internal_error"`1011* `event.name`:`"internal_error"`

985* `event.timestamp`:ISO 8601 时间戳1012* `event.timestamp`:ISO 8601 时间戳

986* `event.sequence`:单调递增的计数器,用于在会话内排序事件1013* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

987* `error_name`:错误类名,例如 `"TypeError"` 或 `"SyntaxError"`1014* `error_name`:错误类名,例如 `"TypeError"` 或 `"SyntaxError"`

988* `error_code`:Node.js errno 代码,例如错误上存在时的 `"ENOENT"`1015* `error_code`:Node.js errno 代码,例如错误上存在时的 `"ENOENT"`

989 1016 


1000* 所有 [标准属性](#standard-attributes)1027* 所有 [标准属性](#standard-attributes)

1001* `event.name`:`"plugin_installed"`1028* `event.name`:`"plugin_installed"`

1002* `event.timestamp`:ISO 8601 时间戳1029* `event.timestamp`:ISO 8601 时间戳

1003* `event.sequence`:单调递增的计数器,用于在会话内排序事件1030* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1004* `marketplace.is_official`:如果市场是官方 Anthropic 市场,则为 `"true"`,否则为 `"false"`1031* `marketplace.is_official`:如果市场是官方 Anthropic 市场,则为 `"true"`,否则为 `"false"`

1005* `install.trigger`:`"cli"` 或 `"ui"`1032* `install.trigger`:`"cli"` 或 `"ui"`

1006* `plugin.name`:已安装插件的名称。对于第三方市场,仅当 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1033* `plugin.name`:已安装插件的名称。对于第三方市场,仅当 `OTEL_LOG_TOOL_DETAILS=1` 时才包含


1020* 所有 [标准属性](#standard-attributes)1047* 所有 [标准属性](#standard-attributes)

1021* `event.name`:`"plugin_loaded"`1048* `event.name`:`"plugin_loaded"`

1022* `event.timestamp`:ISO 8601 时间戳1049* `event.timestamp`:ISO 8601 时间戳

1023* `event.sequence`:单调递增的计数器,用于在会话内排序事件1050* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1024* `plugin.name`:插件的名称。对于官方市场外和内置捆绑的插件,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`1051* `plugin.name`:插件的名称。对于官方市场外和内置捆绑的插件,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`

1025* `marketplace.name`:插件安装来源的市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`1052* `marketplace.name`:插件安装来源的市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`

1026* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明版本时才包含1053* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明版本时才包含


1048* 所有 [标准属性](#standard-attributes)1075* 所有 [标准属性](#standard-attributes)

1049* `event.name`:`"skill_activated"`1076* `event.name`:`"skill_activated"`

1050* `event.timestamp`:ISO 8601 时间戳1077* `event.timestamp`:ISO 8601 时间戳

1051* `event.sequence`:单调递增的计数器,用于在会话内排序事件1078* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1052* `skill.name`:技能的名称。对于用户定义和第三方插件技能,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`1079* `skill.name`:技能的名称。对于用户定义和第三方插件技能,除非 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`

1053* `invocation_trigger`:技能的触发方式(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)1080* `invocation_trigger`:技能的触发方式(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)

1054* `skill.source`:技能加载的位置(例如,`"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)1081* `skill.source`:技能加载的位置(例如,`"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)


1069* 所有 [标准属性](#standard-attributes)1096* 所有 [标准属性](#standard-attributes)

1070* `event.name`:`"at_mention"`1097* `event.name`:`"at_mention"`

1071* `event.timestamp`:ISO 8601 时间戳1098* `event.timestamp`:ISO 8601 时间戳

1072* `event.sequence`:单调递增的计数器,用于在会话内排序事件1099* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1073* `mention_type`:提及的类型(`"file"`、`"directory"`、`"agent"`、`"mcp_resource"`、`"peer"`)。值 `"peer"` 表示您提及了 [您的其他 Claude Code 会话之一](/docs/zh-CN/cross-session-messaging)。需要 Claude Code v2.1.232 或更高版本1100* `mention_type`:提及的类型(`"file"`、`"directory"`、`"agent"`、`"mcp_resource"`、`"peer"`)。值 `"peer"` 表示您提及了 [您的其他 Claude Code 会话之一](/docs/zh-CN/cross-session-messaging)。需要 Claude Code v2.1.232 或更高版本

1074* `success`:提及是否成功解析(`"true"` 或 `"false"`)1101* `success`:提及是否成功解析(`"true"` 或 `"false"`)

1075 1102 


1086* 所有 [标准属性](#standard-attributes)1113* 所有 [标准属性](#standard-attributes)

1087* `event.name`:`"api_retries_exhausted"`1114* `event.name`:`"api_retries_exhausted"`

1088* `event.timestamp`:ISO 8601 时间戳1115* `event.timestamp`:ISO 8601 时间戳

1089* `event.sequence`:单调递增的计数器,用于在会话内排序事件1116* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1090* `model`:使用的模型1117* `model`:使用的模型

1091* `error`:最终错误消息1118* `error`:最终错误消息

1092* `status_code`:HTTP 状态代码(数字形式)。对于非 HTTP 错误不存在。1119* `status_code`:HTTP 状态代码(数字形式)。对于非 HTTP 错误不存在。


1107* 所有 [标准属性](#standard-attributes)1134* 所有 [标准属性](#standard-attributes)

1108* `event.name`:`"hook_registered"`1135* `event.name`:`"hook_registered"`

1109* `event.timestamp`:ISO 8601 时间戳1136* `event.timestamp`:ISO 8601 时间戳

1110* `event.sequence`:单调递增的计数器,用于在会话内排序事件1137* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1111* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`1138* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`

1112* `hook_type`:hook 实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`1139* `hook_type`:hook 实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`

1113* `hook_source`:hook 定义的位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`1140* `hook_source`:hook 定义的位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`


1129* 所有 [标准属性](#standard-attributes)1156* 所有 [标准属性](#standard-attributes)

1130* `event.name`:`"hook_execution_start"`1157* `event.name`:`"hook_execution_start"`

1131* `event.timestamp`:ISO 8601 时间戳1158* `event.timestamp`:ISO 8601 时间戳

1132* `event.sequence`:单调递增的计数器,用于在会话内排序事件1159* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1133* `hook_event`:Hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`1160* `hook_event`:Hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`

1134* `hook_name`:完整 hook 名称,包括匹配器,例如 `"PreToolUse:Write"`1161* `hook_name`:完整 hook 名称,包括匹配器,例如 `"PreToolUse:Write"`

1135* `num_hooks`:匹配 hook 命令的数量1162* `num_hooks`:匹配 hook 命令的数量


1151* 所有 [标准属性](#standard-attributes)1178* 所有 [标准属性](#standard-attributes)

1152* `event.name`:`"hook_execution_complete"`1179* `event.name`:`"hook_execution_complete"`

1153* `event.timestamp`:ISO 8601 时间戳1180* `event.timestamp`:ISO 8601 时间戳

1154* `event.sequence`:单调递增的计数器,用于在会话内排序事件1181* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1155* `hook_event`:Hook 事件类型1182* `hook_event`:Hook 事件类型

1156* `hook_name`:完整 hook 名称,包括匹配器1183* `hook_name`:完整 hook 名称,包括匹配器

1157* `num_hooks`:匹配 hook 命令的数量1184* `num_hooks`:匹配 hook 命令的数量


1178* 所有 [标准属性](#standard-attributes)1205* 所有 [标准属性](#standard-attributes)

1179* `event.name`:`"hook_plugin_metrics"`1206* `event.name`:`"hook_plugin_metrics"`

1180* `event.timestamp`:ISO 8601 时间戳1207* `event.timestamp`:ISO 8601 时间戳

1181* `event.sequence`:单调递增的计数器,用于在会话内排序事件1208* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1182* `plugin_id`:`<name>@<marketplace>` 形式的插件标识符1209* `plugin_id`:`<name>@<marketplace>` 形式的插件标识符

1183* `hook_event`:发出指标的 hook 事件类型1210* `hook_event`:发出指标的 hook 事件类型

1184* 最多 20 个插件发出的指标键。名称匹配 `^[a-z][a-z0-9_]{0,39}$`。值为布尔值或数字。1211* 最多 20 个插件发出的指标键。名称匹配 `^[a-z][a-z0-9_]{0,39}$`。值为布尔值或数字。


1196* 所有 [标准属性](#standard-attributes)1223* 所有 [标准属性](#standard-attributes)

1197* `event.name`:`"compaction"`1224* `event.name`:`"compaction"`

1198* `event.timestamp`:ISO 8601 时间戳1225* `event.timestamp`:ISO 8601 时间戳

1199* `event.sequence`:单调递增的计数器,用于在会话内排序事件1226* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1200* `trigger`:`"auto"` 或 `"manual"`1227* `trigger`:`"auto"` 或 `"manual"`

1201* `success`:`"true"` 或 `"false"`1228* `success`:`"true"` 或 `"false"`

1202* `duration_ms`:压缩持续时间1229* `duration_ms`:压缩持续时间


1218* 所有 [标准属性](#standard-attributes)1245* 所有 [标准属性](#standard-attributes)

1219* `event.name`:`"subagent_completed"`1246* `event.name`:`"subagent_completed"`

1220* `event.timestamp`:ISO 8601 时间戳1247* `event.timestamp`:ISO 8601 时间戳

1221* `event.sequence`:单调递增的计数器,用于在会话内排序事件1248* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1222* `agent_type`:子代理类型。内置代理名称和来自官方市场插件的代理按原样出现;其他代理名称被替换为 `"custom"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`1249* `agent_type`:子代理类型。内置代理名称和来自官方市场插件的代理按原样出现;其他代理名称被替换为 `"custom"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`

1223* `agent.source`:代理定义来自的位置:`built-in`、`plugin` 或定义自定义代理的设置来源,例如 `userSettings` 或 `projectSettings`1250* `agent.source`:代理定义来自的位置:`built-in`、`plugin` 或定义自定义代理的设置来源,例如 `userSettings` 或 `projectSettings`

1224* `is_built_in`:子代理是否是内置代理类型1251* `is_built_in`:子代理是否是内置代理类型


1244* 所有 [标准属性](#standard-attributes)1271* 所有 [标准属性](#standard-attributes)

1245* `event.name`:`"feedback_survey"`1272* `event.name`:`"feedback_survey"`

1246* `event.timestamp`:ISO 8601 时间戳1273* `event.timestamp`:ISO 8601 时间戳

1247* `event.sequence`:单调递增的计数器,用于在会话内排序事件1274* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1248* `event_type`:调查生命周期事件,例如 `"appeared"`、`"responded"` 或 `"transcript_prompt_appeared"`1275* `event_type`:调查生命周期事件,例如 `"appeared"`、`"responded"` 或 `"transcript_prompt_appeared"`

1249* `appearance_id`:唯一 ID,链接为一个调查实例发出的事件1276* `appearance_id`:唯一 ID,链接为一个调查实例发出的事件

1250* `survey_type`:哪个调查产生了事件。`"session"` 是"Claude 做得怎么样?"评分提示1277* `survey_type`:哪个调查产生了事件。`"session"` 是"Claude 做得怎么样?"评分提示


1268* 所有 [标准属性](#standard-attributes)1295* 所有 [标准属性](#standard-attributes)

1269* `event.name`:`"retention_sweep"`1296* `event.name`:`"retention_sweep"`

1270* `event.timestamp`:ISO 8601 时间戳1297* `event.timestamp`:ISO 8601 时间戳

1271* `event.sequence`:单调递增的计数器,用于在会话内排序事件1298* `event.sequence`:用于排序事件的单调递增计数器,在 [事件关联属性](#event-correlation-attributes) 下描述

1272* `result`:当扫描运行时为 `"complete"`,当 Claude Code 暂停时为 `"skipped"`1299* `result`:当扫描运行时为 `"complete"`,当 Claude Code 暂停时为 `"skipped"`

1273* `period_days`:来自合并设置的 `cleanupPeriodDays` 值(天数),或当没有来源设置时为 `30`。在跳过的事件上,扫描将使用的值,从 Claude Code 可以读取的设置来源计算1300* `period_days`:来自合并设置的 `cleanupPeriodDays` 值(天数),或当没有来源设置时为 `30`。在跳过的事件上,扫描将使用的值,从 Claude Code 可以读取的设置来源计算

1274* `used_default`:当没有可读的设置来源设置 `cleanupPeriodDays` 时为 `"true"`,否则为 `"false"`。在完成事件上,`"true"` 表示应用了 30 天默认值1301* `used_default`:当没有可读的设置来源设置 `cleanupPeriodDays` 时为 `"true"`,否则为 `"false"`。在完成事件上,`"true"` 表示应用了 30 天默认值

permissions.md +3 −1

Details

67 67 

68一个宽泛的 deny 规则(如 `Bash(aws *)`)会阻止每个匹配的调用,包括也匹配更具体的 allow 规则(如 `Bash(aws s3 ls)`)的调用,因此 deny 规则不能包含允许列表例外。ask 和 allow 之间也适用相同的优先级:匹配的 ask 规则即使更具体的 allow 规则也匹配同一调用,也会提示。68一个宽泛的 deny 规则(如 `Bash(aws *)`)会阻止每个匹配的调用,包括也匹配更具体的 allow 规则(如 `Bash(aws s3 ls)`)的调用,因此 deny 规则不能包含允许列表例外。ask 和 allow 之间也适用相同的优先级:匹配的 ask 规则即使更具体的 allow 规则也匹配同一调用,也会提示。

69 69 

70Deny 规则的行为取决于它们是命名工具还是在工具内范围化模式。像 `Bash` 这样的裸工具名称会将工具从 Claude 的上下文中完全移除,因此 Claude 永远看不到它。裸名称移除适用于除了 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 之外的每个工具:当任何其他工具仍然存在时,deny 规则无法移除它,ask 规则永远不会为其提示。像 `Bash(rm *)` 这样的范围化规则会保留工具的可用性,并在 Claude 尝试时阻止匹配的调用。70Deny 规则的行为取决于它们是命名工具还是在工具内范围化模式。像 `Bash` 这样的裸工具名称会将工具从 Claude 的上下文中完全移除,因此 Claude 永远看不到它。如果您在会话中途添加此类规则,Claude 无法从其下一个工具调用开始调用该工具;[拒绝整个工具](/docs/zh-CN/prompt-caching#denying-an-entire-tool) 涵盖了 Claude 已经看到的定义会发生什么。像 `Bash(rm *)` 这样的范围化规则会保留工具的可用性,并在 Claude 尝试时阻止匹配的调用。

71 

72裸名称移除适用于除了 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 之外的每个工具:当任何其他工具仍然存在时,deny 规则无法移除它,ask 规则永远不会为其提示。

71 73 

72<Note>74<Note>

73 权限规则由 Claude Code 强制执行,而不是由模型强制执行。您的提示或 `CLAUDE.md` 中的说明会影响 Claude 尝试执行的操作,但它们不会改变 Claude Code 允许的操作。要授予或撤销访问权限,请使用 `/permissions`、此处描述的规则、[权限模式](/docs/zh-CN/permission-modes) 或 [PreToolUse hook](#extend-permissions-with-hooks)。75 权限规则由 Claude Code 强制执行,而不是由模型强制执行。您的提示或 `CLAUDE.md` 中的说明会影响 Claude 尝试执行的操作,但它们不会改变 Claude Code 允许的操作。要授予或撤销访问权限,请使用 `/permissions`、此处描述的规则、[权限模式](/docs/zh-CN/permission-modes) 或 [PreToolUse hook](#extend-permissions-with-hooks)。

Details

185 拒绝整个工具185 拒绝整个工具

186</h3>186</h3>

187 187 

188添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全删除。Claude Code 将内置工具定义加载到系统提示层,因此在会话中途添加或删除这些规则之一会使缓存失效。Claude Code 在下一个请求时应用更改,无论您通过 `/permissions` 添加规则还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect)。这包括您在回合中途通过 `/permissions` 添加的规则。188如果您添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions),Claude 无法从您的下一个请求开始调用该工具,无论您是通过 `/permissions` 添加规则还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect)。这包括您通过 `/permissions` 在回合中途添加的规则。

189 189 

190只有在工具名称位置匹配的拒绝规则才有此效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称 glob](/docs/zh-CN/permissions#tool-name-wildcards) 如 `"*"`。仅匹配 MCP 工具的 glob,例如 `"mcp__*"`,会以相同的方式删除这些工具,但当匹配的工具是[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认值,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。190当[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)处于活动状态时(在支持的模型上是默认值),请求的工具定义不会改变,缓存的前缀会保留。当工具搜索不可用或被禁用时,Claude Code 会从下一个请求中删除定义,这会使缓存失效,稍后删除规则也会这样做。

191 

192只有在工具名称位置匹配的拒绝规则才会以这种方式阻止工具:裸工具名称、等效的 `Bash(*)` 形式或[工具名称 glob](/docs/zh-CN/permissions#tool-name-wildcards) 如 `"*"`。仅匹配 MCP 工具的 glob,例如 `"mcp__*"`,会以相同的方式阻止这些工具。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。

191 193 

192<h3 id="compacting-the-conversation">194<h3 id="compacting-the-conversation">

193 压缩对话195 压缩对话

Details

138 138 

139如果连接失败,Claude Code 会显示一条通知,说明失败原因,向对话添加一条带有原因的警告行,并将指示器切换到保留在原位的失败状态。要重新连接,请运行 `/remote-control`,除非[原因说会话在其他地方被接管或结束,或服务器找不到它](#session-ended-elsewhere)。139如果连接失败,Claude Code 会显示一条通知,说明失败原因,向对话添加一条带有原因的警告行,并将指示器切换到保留在原位的失败状态。要重新连接,请运行 `/remote-control`,除非[原因说会话在其他地方被接管或结束,或服务器找不到它](#session-ended-elsewhere)。

140 140 

141在重新连接之前读取原因。当会话从另一个设备、应用或 Claude Code 会话被接管或结束,或服务器找不到它时,原因会说明是哪种情况,Claude Code 会省略其通常的建议来运行 `/remote-control`:141<span id="session-ended-elsewhere" />在重新连接之前读取原因。当会话从另一个设备、应用或 Claude Code 会话被接管或结束,或服务器找不到它时,原因会说明是哪种情况,Claude Code 会省略其通常的建议来运行 `/remote-control`:

142 

143<span id="session-ended-elsewhere" />

144 142 

145* **另一个设备或 Claude Code 会话接管了会话**:仅当您想从该设备收回它时才运行 `/remote-control`。143* **另一个设备或 Claude Code 会话接管了会话**:仅当您想从该设备收回它时才运行 `/remote-control`。

146* **您从另一个设备或应用结束或存档了会话**:仅当您想要它回来时才运行 `/remote-control`;Claude Code 会重新打开存档的会话。144* **您从另一个设备或应用结束或存档了会话**:仅当您想要它回来时才运行 `/remote-control`;Claude Code 会重新打开存档的会话。


1763. 现有对话历史记录中的最后一条有意义的消息1743. 现有对话历史记录中的最后一条有意义的消息

1774. 自动生成的名称,如 `myhost-graceful-unicorn`,其中 `myhost` 是您的机器的主机名或您使用 `--remote-control-session-name-prefix` 设置的前缀1754. 自动生成的名称,如 `myhost-graceful-unicorn`,其中 `myhost` 是您的机器的主机名或您使用 `--remote-control-session-name-prefix` 设置的前缀

178 176 

179如果您没有设置显式名称,一旦您发送提示,Claude Code 会更新标题以反映您的提示。Claude Code 将自动生成的标题与您的对话语言相匹配,或与配置的 [`language`](/docs/zh-CN/settings-reference#language) 设置相匹配;语言匹配需要 Claude Code v2.1.176 或更高版本。177如果您没有设置显式名称,一旦您发送提示,Claude Code 会更新标题以反映您的提示。Claude Code 将自动生成的标题与您的对话语言相匹配,或与配置的 [`language`](/docs/zh-CN/settings-reference#language) 设置相匹配。

180 178 

181当您从 claude.ai 或 Claude 应用重命名会话时,Claude Code 也会更新在 `claude --resume` 中显示的本地标题。Claude Code 将相同的重命名应用于提示栏上显示的会话名称,以及当会话[在后台运行](/docs/zh-CN/agent-view)时 `claude agents` 列表中显示的会话名称。在 v2.1.221 之前,从 claude.ai 或 Claude 应用中的会话列表重命名仅更新标题,CLI 保留其以前的会话名称;`/rename`(在 CLI 本身中运行)在任何版本上设置名称。179当您从 claude.ai 或 Claude 应用重命名会话时,Claude Code 也会更新在 `claude --resume` 中显示的本地标题。Claude Code 将相同的重命名应用于提示栏上显示的会话名称,以及当会话[在后台运行](/docs/zh-CN/agent-view)时 `claude agents` 列表中显示的会话名称。在 v2.1.221 之前,从 claude.ai 或 Claude 应用中的会话列表重命名仅更新标题,CLI 保留其以前的会话名称;`/rename`(在 CLI 本身中运行)在任何版本上设置名称。

182 180 

Details

83按命令沙箱不涵盖会话中运行的所有内容:83按命令沙箱不涵盖会话中运行的所有内容:

84 84 

85* 其他 [built-in tools](/docs/zh-CN/tools-reference)(如 Read、Edit 和 WebFetch)在 Claude Code 进程内运行,不会生成任意代码。[Permission rules](/docs/zh-CN/permissions) 用于路径或域来控制它们。85* 其他 [built-in tools](/docs/zh-CN/tools-reference)(如 Read、Edit 和 WebFetch)在 Claude Code 进程内运行,不会生成任意代码。[Permission rules](/docs/zh-CN/permissions) 用于路径或域来控制它们。

86* [MCP](/docs/zh-CN/mcp) 服务器和 hooks 是在主机上无约束运行的单独进程。86* [MCP](/docs/zh-CN/mcp) 服务器和 [command hooks](/docs/zh-CN/hooks#command-hook-fields) 是在主机上无约束运行的单独进程。

87 87 

88要将内置工具、MCP 服务器和 hooks 都放在一个操作系统边界后面,请在 [sandbox runtime](#sandbox-runtime)、[dev container](#dev-containers) 或 [custom container](#custom-container) 内运行整个 Claude Code 进程。88要将内置工具、MCP 服务器和 hooks 都放在一个操作系统边界后面,请在 [sandbox runtime](#sandbox-runtime)、[dev container](#dev-containers) 或 [custom container](#custom-container) 内运行整个 Claude Code 进程。

89 89 

Details

486 486 

487`--kill-session-after-min` 是失控会话的后挡。在 v2.1.260 或更高版本的运行器上,达到限制的会话不会立即终止。运行器给它一个宽限窗口,默认 15 分钟,您可以使用 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 更改:487`--kill-session-after-min` 是失控会话的后挡。在 v2.1.260 或更高版本的运行器上,达到限制的会话不会立即终止。运行器给它一个宽限窗口,默认 15 分钟,您可以使用 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 更改:

488 488 

489* 如果会话等待其用户,或其转向已结束并仅持有后台任务,运行器立即释放它。会话在其用户发送下一条消息时恢复。489* 如果会话等待其用户,运行器释放它。如果其转向已结束并仅持有后台任务,运行器最多等待 60 秒以完成这些任务,然后释放它。会话在其用户发送下一条消息时恢复。

490* 如果转向仍在运行,运行器等待转向完成,或会话下一次等待其用户,然后释放它。490* 如果转向仍在运行,运行器等待转向完成,或会话下一次等待其用户,然后释放它。

491* 如果会话在宽限窗口结束时仍在运行器上,运行器终止它,任何运行转向的工作丢失。等待从运行中工具调用内请求的批准的转向是会话超过窗口的一种方式。491* 如果会话在宽限窗口结束时仍在运行器上,运行器终止它,任何运行转向的工作丢失。等待从运行中工具调用内请求的批准的转向是会话超过窗口的一种方式。

492 492 

Details

163 跨托管源的每键例外163 跨托管源的每键例外

164</h3>164</h3>

165 165 

166两种类型的键是无合并规则的例外:166三种类型的键是无合并规则的例外:

167 167 

168* **跨源锁定键**:一小组键,例如沙箱允许列表锁,[列在托管设置页面上](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)。当任何管理员控制的托管源设置它们时,Claude Code 会遵守它们;用户可写的 HKCU 注册表层被排除。当 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出是这些检查读取的唯一源,除了 [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh),Claude Code 在启动时直接从管理员源读取它。168* **跨源锁定键**:一小组键,例如沙箱允许列表锁,[列在托管设置页面上](/docs/zh-CN/managed-settings#precedence-within-the-managed-tier)。当任何管理员控制的托管源设置它们时,Claude Code 会遵守它们;用户可写的 HKCU 注册表层被排除。当 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出是这些检查读取的唯一源,除了 [`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh),Claude Code 在启动时直接从管理员源读取它。

169* **`env` 块**:除了与凭证键配对的遥测单元和路由变量(下面涵盖)外,它在管理员控制的源之间按键合并。对于每个环境变量,定义它的最高优先级源获胜,较低的管理员源填充较高源未设置的变量。因此,端点管理的 `env` 条目在服务器管理的配置未设置该变量时应用,或在该变量的缓存服务器值[等待服务器确认而被暂扣](#fetch-and-caching-behavior)期间应用。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用选定源的整个 `env` 块。169* **`env` 块**:除了与凭证键配对的遥测单元和路由变量(下面涵盖)外,它在管理员控制的源之间按键合并。对于每个环境变量,定义它的最高优先级源获胜,较低的管理员源填充较高源未设置的变量。因此,端点管理的 `env` 条目在服务器管理的配置未设置该变量时应用,或在该变量的缓存服务器值[等待服务器确认而被暂扣](#fetch-and-caching-behavior)期间应用。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用选定源的整个 `env` 块。

170 * **遥测单元**:`OTEL_EXPORTER_OTLP_*` 导出器键、`OTEL_LOG_*` 内容捕获切换、`OTEL_LOGS_EXPORTER` 以及测试版跟踪变量 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT` 遵循设置其中任何一个的最高源作为一个单元。传递 `otelHeadersHelper` 凭证键的源也声称该单元,但仅在它是选定源时才放置这些变量:未被选定但传递该键的源不贡献其中任何一个,仍然阻止较低源填充它们。无论哪种方式,来自一个源的导出器端点永远不能与来自另一个源的凭证配对。170 * **遥测单元**:`OTEL_EXPORTER_OTLP_*` 导出器键、`OTEL_LOG_*` 内容捕获切换、`OTEL_LOGS_EXPORTER` 以及测试版跟踪变量 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT` 遵循设置其中任何一个的最高源作为一个单元。传递 `otelHeadersHelper` 凭证键的源也声称该单元,但仅在它是选定源时才放置这些变量:未被选定但传递该键的源不贡献其中任何一个,仍然阻止较低源填充它们。无论哪种方式,来自一个源的导出器端点永远不能与来自另一个源的凭证配对。

171 * **凭证配对的路由**:将路由变量与选定源专用凭证键(例如 `apiKeyHelper` 或 `otelHeadersHelper`)配对的源仅在它赢得该槽位时贡献这些路由变量。171 * **凭证配对的路由**:将路由变量与选定源专用凭证键(例如 `apiKeyHelper` 或 `otelHeadersHelper`)配对的源仅在它赢得该槽位时贡献这些路由变量。

172* **网关登录键**:Claude Code 永远不会从服务器管理的设置中读取 [`forceLoginGatewayUrl`](/docs/zh-CN/settings-reference#forcelogingatewayurl) 或 [`forceLoginMethod`](/docs/zh-CN/settings-reference#forceloginmethod) 的 `"gateway"` 值,因此选择服务器管理的设置既不提供网关登录也不隐藏在 MDM 策略或托管设置文件中设置的网关登录。[`managedSourcesBehavior` 条目](/docs/zh-CN/settings-reference#managedsourcesbehavior)说明机器上的哪个管理员源提供它们。

172 173 

173<h3 id="fetch-and-caching-behavior">174<h3 id="fetch-and-caching-behavior">

174 获取和缓存行为175 获取和缓存行为


286 Claude Code 不为通过纯 HTTP 到达的环回开发网关保存批准,因此对话框在每次登录后再次出现。287 Claude Code 不为通过纯 HTTP 到达的环回开发网关保存批准,因此对话框在每次登录后再次出现。

287* **任何其他凭证**,例如 API 密钥或 `CLAUDE_CODE_OAUTH_TOKEN`:一个批准用于传递的设置,与该配置目录中设置的缓存副本一起保留。当需要批准的设置更改时,Claude Code 会显示对话框,在您运行 `/logout` 或 `claude auth logout` 后,其中任何一个都会删除缓存副本。288* **任何其他凭证**,例如 API 密钥或 `CLAUDE_CODE_OAUTH_TOKEN`:一个批准用于传递的设置,与该配置目录中设置的缓存副本一起保留。当需要批准的设置更改时,Claude Code 会显示对话框,在您运行 `/logout` 或 `claude auth logout` 后,其中任何一个都会删除缓存副本。

288 289 

290对于 `sandbox.credentials` 或 `sandbox.network.tlsTerminate` 的批准也涵盖这些相同传递设置中的 [`sandbox.network.allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 条目,因为两个设置都作用于该允许列表。当您的管理员添加或移除其中一个条目时,对话框会再次出现,即使 `sandbox.network.allowedDomains` 本身不需要批准。

291 

289使用保存的 claude.ai 登录:292使用保存的 claude.ai 登录:

290 293 

291* 如果您登出并重新登录,或切换到另一个组织,稍后返回,当这些设置未更改时,Claude Code 不会再次显示对话框,除非另一个账户在同一配置目录中为该组织批准了它们。294* 如果您登出并重新登录,或切换到另一个组织,稍后返回,当这些设置未更改时,Claude Code 不会再次显示对话框,除非另一个账户在同一配置目录中为该组织批准了它们。

292* 如果您使用不同的账户登录到同一组织,即使设置未更改,Claude Code 也会再次显示对话框。该账户的批准替换前一个,因此当您切换回来时,Claude Code 会再次显示对话框。295* 如果您使用不同的账户登录到同一组织,即使设置未更改,Claude Code 也会再次显示对话框。该账户的批准替换前一个,因此当您切换回来时,Claude Code 会再次显示对话框。

293 296 

294对于 `sandbox.credentials` 或 `sandbox.network.tlsTerminate` 的批准也涵盖这些相同传递设置中的 [`sandbox.network.allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 条目,因为两个设置都作用于该允许列表。当您的管理员添加或移除其中一个条目时,对话框会再次出现,即使 `sandbox.network.allowedDomains` 本身不需要批准。

295 

296Claude Code 无法始终显示对话框。下面的每种情况说明当它无法显示时哪些设置适用,以及您何时下次看到对话框:297Claude Code 无法始终显示对话框。下面的每种情况说明当它无法显示时哪些设置适用,以及您何时下次看到对话框:

297 298 

298* **无法显示对话框的交互式会话**:Claude Code 不应用传递的设置,保留最后批准的设置。对话框在下一个可以显示它的会话中出现。需要 Claude Code v2.1.211 或更高版本。299* **无法显示对话框的交互式会话**:Claude Code 不应用传递的设置,保留最后批准的设置。对话框在下一个可以显示它的会话中出现。需要 Claude Code v2.1.211 或更高版本。

Details

830 `advisorModel`830 `advisorModel`

831</h3>831</h3>

832 832 

833选择当 Claude 调用服务器端[顾问工具](/docs/zh-CN/advisor)时哪个模型来回答。取消设置它以关闭顾问。顾问的能力必须至少与您的主模型一样强;当它不是时,Claude Code 会发送不带顾问的请求。请参阅[选择顾问模型](/docs/zh-CN/advisor#choose-an-advisor-model)。833选择当 Claude 调用服务器端[顾问工具](/docs/zh-CN/advisor)时哪个模型来回答。取消设置它以关闭顾问。顾问的能力必须至少与您的主模型一样强。请参阅[选择顾问模型](/docs/zh-CN/advisor#choose-an-advisor-model)以了解接受的配对以及当您选择未被接受的配对时会发生什么。

834 834 

835您通常不会手动编辑此键。运行 `/advisor` 以打开一个选择器,显示当前选择、可以提供建议的模型和**无顾问**。Claude Code 将您的选择保存到 `~/.claude/settings.json` 中的此键。如果您从[远程控制](/docs/zh-CN/remote-control)客户端或附加到远程工作者的会话中选择,该选择仅适用于该会话,不会更改此键。835您通常不会手动编辑此键。运行 `/advisor` 以打开一个选择器,显示当前选择、可以提供建议的模型和**无顾问**。Claude Code 将您的选择保存到 `~/.claude/settings.json` 中的此键。如果您从[远程控制](/docs/zh-CN/remote-control)客户端或附加到远程工作者的会话中选择,该选择仅适用于该会话,不会更改此键。

836 836 


3308 `footerLinksRegexes`3308 `footerLinksRegexes`

3309</h3>3309</h3>

3310 3310 

3311当正则表达式匹配转向输出时在输入框下方的页脚中渲染额外的可点击徽章:工具结果,包括文件内容和获取的页面,以及 Claude 自己的响应。使用它将项目 CLI 打印的 ID(如审查工具和问题跟踪器)转换为会话链接。需要 Claude Code v2.1.176 或更高版本。3311当正则表达式匹配转向输出时在输入框下方的页脚中渲染额外的可点击徽章:工具结果,包括文件内容和获取的页面,以及 Claude 自己的响应。使用它将项目 CLI 打印的 ID(如审查工具和问题跟踪器)转换为会话链接。

3312 3312 

3313* **Scope**: [`User or managed`](#scopes)3313* **Scope**: [`User or managed`](#scopes)

3314* **Type**: 对象数组,每个对象的 `type` 设置为 `"regex"`、`pattern` 正则表达式、`url` 模板和可选的 `label`;`url` 和 `label` 中的 `{name}` 占位符从 `pattern` 中的命名捕获组填充3314* **Type**: 对象数组,每个对象的 `type` 设置为 `"regex"`、`pattern` 正则表达式、`url` 模板和可选的 `label`;`url` 和 `label` 中的 `{name}` 占位符从 `pattern` 中的命名捕获组填充


3329}3329}

3330```3330```

3331 3331 

3332配置此项后,当 `PROJ-1234` 出现在工具结果或 Claude 的回复中时,页脚中会出现一个 `PROJ-1234` 徽章,链接到 `https://issues.example.com/browse/PROJ-1234`。需要 Claude Code v2.1.176 或更高版本。3332配置此项后,当 `PROJ-1234` 出现在工具结果或 Claude 的回复中时,页脚中会出现一个 `PROJ-1234` 徽章,链接到 `https://issues.example.com/browse/PROJ-1234`。

3333 3333 

3334<h4 id="badge-constraints">3334<h4 id="badge-constraints">

3335 徽章约束3335 徽章约束


3916 `wheelScrollAccelerationEnabled`3916 `wheelScrollAccelerationEnabled`

3917</h3>3917</h3>

3918 3918 

3919在[全屏渲染](/docs/zh-CN/fullscreen#mouse-wheel-scrolling)中快速滚动期间加速鼠标滚轮滚动速度。将其设置为 `false` 以获得每个滚轮凹口的恒定滚动速率。需要 Claude Code v2.1.174 或更高版本。3919在[全屏渲染](/docs/zh-CN/fullscreen#mouse-wheel-scrolling)中快速滚动期间加速鼠标滚轮滚动速度。将其设置为 `false` 以获得每个滚轮凹口的恒定滚动速率。

3920 3920 

3921* **Scope**: [`Any file`](#scopes)3921* **Scope**: [`Any file`](#scopes)

3922* **Type**: Boolean3922* **Type**: Boolean


3930}3930}

3931```3931```

3932 3932 

3933需要 Claude Code v2.1.174 或更高版本。

3934 

3935<h2 id="git-and-attribution">3933<h2 id="git-and-attribution">

3936 Git 和归属3934 Git 和归属

3937</h2>3935</h2>


6156在 `"merge"` 下,Claude Code 按其类型合并每个密钥。此表给出每种类型的规则。限制允许列表、整体取值和仅最高源行命名它们覆盖的每个密钥,其他行给出示例:6154在 `"merge"` 下,Claude Code 按其类型合并每个密钥。此表给出每种类型的规则。限制允许列表、整体取值和仅最高源行命名它们覆盖的每个密钥,其他行给出示例:

6157 6155 

6158| 密钥类型 | Claude Code 如何合并它 | 密钥 |6156| 密钥类型 | Claude Code 如何合并它 | 密钥 |

6159| :----------------------------------------- | :----------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |6157| :----------------------------------------- | :----------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

6160| Lists | 合并来自每个源的条目 | [`permissions.allow`](#permissions-allow)、[`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) 和其他列表密钥 |6158| Lists | 合并来自每个源的条目 | [`permissions.allow`](#permissions-allow)、[`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) 和其他列表密钥 |

6161| Locks | 应用任何源设置的最严格值。当没有源设置严格值时,仅从最高源应用较宽松的值 | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly)、[`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) 和其他布尔值或枚举锁 |6159| Locks | 应用任何源设置的最严格值。当没有源设置严格值时,仅从最高源应用较宽松的值 | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly)、[`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) 和其他布尔值或枚举锁 |

6162| Restriction allowlists | 从设置它的最高源整体取值,不从较低源添加条目。当最高源未设置时,从下一个源整体取值 | [`availableModels`](#availablemodels)、[`allowedMcpServers`](#allowedmcpservers)、[`strictKnownMarketplaces`](#strictknownmarketplaces)、[`allowedChannelPlugins`](#allowedchannelplugins) 和 [`fallbackModel`](#fallbackmodel) 链 |6160| Restriction allowlists | 从设置它的最高源整体取值,不从较低源添加条目。当最高源未设置时,从下一个源整体取值 | [`availableModels`](#availablemodels)、[`allowedMcpServers`](#allowedmcpservers)、[`strictKnownMarketplaces`](#strictknownmarketplaces)、[`allowedChannelPlugins`](#allowedchannelplugins) 和 [`fallbackModel`](#fallbackmodel) 链 |

6163| Values taken whole | 从设置它的最高源整体取值,不合并来自较低源的条目或字段。当最高源未设置时,从下一个源整体取值 | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs)、[`sandbox.ripgrep`](#sandbox-ripgrep) |6161| Values taken whole | 从设置它的最高源整体取值,不合并来自较低源的条目或字段。当最高源未设置时,从下一个源整体取值 | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs)、[`sandbox.ripgrep`](#sandbox-ripgrep) |

6164| Provided MCP servers | 合并来自每个源的服务器名称。当两个源设置相同名称时,应用较高源的整个条目 | [`managedMcpServers`](#managedmcpservers) |6162| Provided MCP servers | 合并来自每个源的服务器名称。当两个源设置相同名称时,应用较高源的整个条目 | [`managedMcpServers`](#managedmcpservers) |

6165| Read from the highest-priority source only | 仅从携带策略密钥的最高优先级源读取密钥,因此即使最高源未设置,较低源的值也会被忽略 | [`apiKeyHelper`](#apikeyhelper)、[`awsAuthRefresh`](#awsauthrefresh)、[`awsCredentialExport`](#awscredentialexport)、[`gcpAuthRefresh`](#gcpauthrefresh)、[`otelHeadersHelper`](#otelheadershelper)、`proxyAuthHelper`、[`forceLoginOrgUUID`](#forceloginorguuid)、[`forceLoginMethod`](#forceloginmethod)、[`forceLoginGatewayUrl`](#forcelogingatewayurl)、[`parentSettingsBehavior`](#parentsettingsbehavior)、[`modelPicker`](#modelpicker)、[`policyHelper`](#policyhelper)、[`permissions.defaultMode`](#permissions-defaultmode) |6163| Read from the highest-priority source only | 仅从携带策略密钥的最高优先级源读取密钥,因此即使最高源未设置,较低源的值也会被忽略 | [`apiKeyHelper`](#apikeyhelper)、[`awsAuthRefresh`](#awsauthrefresh)、[`awsCredentialExport`](#awscredentialexport)、[`gcpAuthRefresh`](#gcpauthrefresh)、[`otelHeadersHelper`](#otelheadershelper)、`proxyAuthHelper`、[`forceLoginOrgUUID`](#forceloginorguuid)、[`forceLoginMethod`](#forceloginmethod) 的 `"claudeai"` 和 `"console"` 值、[`parentSettingsBehavior`](#parentsettingsbehavior)、[`modelPicker`](#modelpicker)、[`policyHelper`](#policyhelper)、[`permissions.defaultMode`](#permissions-defaultmode) |

6166| `env` | [在管理员源之间按变量合并](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source),在 `"first-wins"` 和 `"merge"` 下都是如此 | [`env`](#env) |6164| `env` | [在管理员源之间按变量合并](/docs/zh-CN/managed-settings#keys-read-from-every-admin-source),在 `"first-wins"` 和 `"merge"` 下都是如此 | [`env`](#env) |

6167| Every other key | 从设置它的最高源取值 | [`cleanupPeriodDays`](#cleanupperioddays)、[`model`](#model) |6165| Every other key | 从设置它的最高源取值 | [`cleanupPeriodDays`](#cleanupperioddays)、[`model`](#model) |

6168 6166 

6169整体取值 `sandbox.credentials.awsPairs` 和 `sandbox.ripgrep` 需要 Claude Code v2.1.257 或更高版本。6167整体取值 `sandbox.credentials.awsPairs` 和 `sandbox.ripgrep` 需要 Claude Code v2.1.257 或更高版本。

6170 6168 

6171这些密钥中的三个添加了自己的条件:6169几个密钥添加了表格未显示的条件:

6172 6170 

6173* **[`policyHelper`](#policyhelper)**: Claude Code 仅在携带策略密钥的最高源是 MDM 策略或托管设置文件时才接受它,因此在服务器管理的设置下它不适用。6171* **[`policyHelper`](#policyhelper)**: Claude Code 仅在携带策略密钥的最高源是 MDM 策略或托管设置文件时才接受它,因此在服务器管理的设置下它不适用。

6174* **[`modelOverrides`](#modeloverrides)**: 与 `availableModels` 配对。Claude Code 从设置它的最高源取值 `modelOverrides`,除非较高源设置 `availableModels` 而不设置 `modelOverrides`。在这种情况下,它忽略来自每个源的 `modelOverrides`。6172* **[`modelOverrides`](#modeloverrides)**: 与 `availableModels` 配对。Claude Code 从设置它的最高源取值 `modelOverrides`,除非较高源设置 `availableModels` 而不设置 `modelOverrides`。在这种情况下,它忽略来自每个源的 `modelOverrides`。

6175* **[`forceLoginGatewayUrl`](#forcelogingatewayurl) 和 [`forceLoginMethod`](#forceloginmethod) 的 `"gateway"` 值**: Claude Code 仅从机器本身上的托管源读取它们,并忽略服务器管理的设置中的它们。机器的值即使在服务器管理的设置也存在时也适用。6173* **[`forceLoginGatewayUrl`](#forcelogingatewayurl) 和 [`forceLoginMethod`](#forceloginmethod) 的 `"gateway"` 值**: Claude Code 从不从服务器管理的设置读取它们,因此那里的值既不适用也不隐藏在 MDM 策略或托管设置文件中设置的值。在机器上的管理员源中,仅携带策略密钥的最高排名源提供它们,无论服务器管理的设置是否也存在。

6176 6174 

6177要确认机器上合并了哪些源,请运行 `/status` 并[读取 `Setting sources` 行](/docs/zh-CN/managed-settings#read-the-source-in-/status)。6175要确认机器上合并了哪些源,请运行 `/status` 并[读取 `Setting sources` 行](/docs/zh-CN/managed-settings#read-the-source-in-/status)。

6178 6176 

Details

27在大多数终端中,您也可以按 Shift+Enter,但支持因终端模拟器而异:27在大多数终端中,您也可以按 Shift+Enter,但支持因终端模拟器而异:

28 28 

29| 终端 | Shift+Enter 换行 |29| 终端 | Shift+Enter 换行 |

30| :---------------------------------------------------------------- | :--------------------------- |30| :---------------------------------------------------------------- | :------------------------------------- |

31| Ghostty、Kitty、iTerm2、WezTerm、Warp、Apple Terminal、Windows Terminal | 无需设置即可工作 |31| Ghostty、Kitty、iTerm2、WezTerm、Warp、Apple Terminal、Windows Terminal | 无需设置即可工作 |

32| VS Code、Cursor、Devin Desktop、Alacritty、Zed | 运行一次 `/terminal-setup` |32| 支持 kitty 键盘协议的其他终端,例如 foot 和 Alacritty 0.16 或更高版本 | 无需设置即可工作。需要 Claude Code v2.1.269 或更高版本 |

33| VS Code、Cursor、Devin Desktop、Alacritty 0.16 之前版本、Zed | 运行一次 `/terminal-setup` |

33| gnome-terminal、JetBrains IDE(如 PyCharm 和 Android Studio) | 不可用;使用 Ctrl+J 或 `\` 然后 Enter |34| gnome-terminal、JetBrains IDE(如 PyCharm 和 Android Studio) | 不可用;使用 Ctrl+J 或 `\` 然后 Enter |

34 35 

35对于 VS Code、Cursor、Devin Desktop、Alacritty 和 Zed,`/terminal-setup` 会将 Shift+Enter 快捷键写入终端的配置文件。在第一次运行时,您会看到确认消息,例如 `Installed VSCode terminal Shift+Enter key binding`。现有绑定保持不变;如果您看到类似 `VSCode terminal Shift+Enter key binding already configured` 的消息,则未进行任何更改。在主机终端中直接运行 `/terminal-setup`,而不是在 tmux 或 screen 内运行,因为它需要写入主机终端的配置。36对于 VS Code、Cursor、Devin Desktop、Alacritty 0.16 之前版本和 Zed,`/terminal-setup` 会将 Shift+Enter 快捷键写入终端的配置文件。在第一次运行时,您会看到确认消息,例如 `Installed VSCode terminal Shift+Enter key binding`。现有绑定保持不变;如果您看到类似 `VSCode terminal Shift+Enter key binding already configured` 的消息,则未进行任何更改。在主机终端中直接运行 `/terminal-setup`,而不是在 tmux 或 screen 内运行,因为它需要写入主机终端的配置。

36 37 

37在 VS Code、Cursor 和 Devin Desktop 中,`/terminal-setup` 还会更新两个编辑器设置:它将 `terminal.integrated.gpuAcceleration` 设置为 `"off"` 以防止集成终端中的文本乱码,并设置 `terminal.integrated.mouseWheelScrollSensitivity` 以在[全屏模式](/docs/zh-CN/fullscreen)中实现更平滑的滚动。要撤销 GPU 加速更改,请将其设置回 `"auto"` 并重新加载编辑器窗口。38在 VS Code、Cursor 和 Devin Desktop 中,`/terminal-setup` 还会更新两个编辑器设置:它将 `terminal.integrated.gpuAcceleration` 设置为 `"off"` 以防止集成终端中的文本乱码,并设置 `terminal.integrated.mouseWheelScrollSensitivity` 以在[全屏模式](/docs/zh-CN/fullscreen)中实现更平滑的滚动。要撤销 GPU 加速更改,请将其设置回 `"auto"` 并重新加载编辑器窗口。

38 39 

Details

417 417 

418`curl ... | bash` 命令下载脚本并将其传送到 Bash 以执行。此错误以及相关的 `curl: (23) Failure writing output to destination` 意味着 Bash 没有收到完整的脚本。退出代码 56 表示下载本身被中断,退出代码 23 表示 curl 无法将其接收的内容写入管道,通常是因为 Bash 提前退出。418`curl ... | bash` 命令下载脚本并将其传送到 Bash 以执行。此错误以及相关的 `curl: (23) Failure writing output to destination` 意味着 Bash 没有收到完整的脚本。退出代码 56 表示下载本身被中断,退出代码 23 表示 curl 无法将其接收的内容写入管道,通常是因为 Bash 提前退出。

419 419 

420**解决方案:**420测试您是否可以使用 [Check network connectivity](#check-network-connectivity) 中的检查访问 `downloads.claude.ai`。如果您到达了服务器,原始故障可能是间歇性的;重试安装命令。您也可以 [try an alternative install method](/docs/zh-CN/setup#install-claude-code)。

421 

4221. **检查网络稳定性**:Claude Code 二进制文件托管在 `downloads.claude.ai`。测试您是否可以访问它:

423 

424 ```bash theme={null}

425 curl -sI https://downloads.claude.ai/claude-code-releases/latest

426 ```

427 

428 `HTTP/2 200` 行表示您已到达服务器,原始故障可能是间歇性的;重试安装命令。其他结果指向原因:

429 

430 * `403`:通常是代理或网络过滤器阻止主机,或 Claude Code [not available in your region](https://www.anthropic.com/supported-countries)

431 * `5xx`:通常是临时服务问题;等待几分钟并重试

432 * `Could not resolve host` 或连接超时:您的网络正在阻止下载

433 

4342. **尝试替代安装方法**:

435 

436 在 macOS 上:

437 

438 ```bash theme={null}

439 brew install --cask claude-code

440 ```

441 

442 在 Windows 上:

443 

444 ```powershell theme={null}

445 winget install Anthropic.ClaudeCode

446 ```

447 

448 然后运行 `claude --version` 以确认:该命令打印版本号,例如 `2.1.211 (Claude Code)`。如果 shell 报告找不到 `claude`,打开一个新的终端窗口并重试:您安装的会话保留其旧的 `PATH`。

449 421 

450<h3 id="homebrew-cask-unavailable-or-outdated">422<h3 id="homebrew-cask-unavailable-or-outdated">

451 Homebrew cask 不可用或过时423 Homebrew cask 不可用或过时

vs-code.md +17 −10

Details

58 58 

59 * **活动栏**:点击左侧边栏中的 Spark 图标以打开会话列表。点击任何会话以在您的[首选位置](#extension-settings)中打开它,或开始新的会话。此图标在活动栏中始终可见。59 * **活动栏**:点击左侧边栏中的 Spark 图标以打开会话列表。点击任何会话以在您的[首选位置](#extension-settings)中打开它,或开始新的会话。此图标在活动栏中始终可见。

60 * **命令面板**:`Cmd+Shift+P`(Mac)或 `Ctrl+Shift+P`(Windows/Linux),输入"Claude Code",然后选择一个选项,如"在新选项卡中打开"60 * **命令面板**:`Cmd+Shift+P`(Mac)或 `Ctrl+Shift+P`(Windows/Linux),输入"Claude Code",然后选择一个选项,如"在新选项卡中打开"

61 * **状态栏**:如果您已将 [`preferredLocation`](#extension-settings) 设置为 `sidebar`,或使用**Claude Code: Open in Side Bar** 打开了 Claude,请点击窗口右下角的 **✱ Claude Code**。即使没有打开文件,这也有效。61 * **状态栏**:如果您已将 [`preferredLocation`](#extension-settings) 设置为 `sidebar`,或使用**Claude Code: Open in Side Bar** 打开了 Claude,请点击窗口右下角的 **✻ Claude Code**。即使没有打开文件,这也有效。

62 62 

63 您可以拖动 Claude 面板以在 VS Code 中的任何位置重新定位它。有关详细信息,请参阅[自定义您的工作流](#customize-your-workflow)。63 您可以拖动 Claude 面板以在 VS Code 中的任何位置重新定位它。有关详细信息,请参阅[自定义您的工作流](#customize-your-workflow)。

64 </Step>64 </Step>


116 * 在 Customize 部分中选择 **Output styles** 来选择[输出样式](/docs/zh-CN/output-styles),包括您的自定义样式。需要 Claude Code v2.1.257 或更高版本。116 * 在 Customize 部分中选择 **Output styles** 来选择[输出样式](/docs/zh-CN/output-styles),包括您的自定义样式。需要 Claude Code v2.1.257 或更高版本。

117 117 

118 要创建自定义样式,请从 **Output styles** 菜单中选择 **Build a custom style**。Claude Code 会在项目或用户级别为您编写[样式文件](/docs/zh-CN/output-styles#create-a-custom-output-style)。需要 Claude Code v2.1.261 或更高版本。118 要创建自定义样式,请从 **Output styles** 菜单中选择 **Build a custom style**。Claude Code 会在项目或用户级别为您编写[样式文件](/docs/zh-CN/output-styles#create-a-custom-output-style)。需要 Claude Code v2.1.261 或更高版本。

119 * 在 Customize 部分中选择 **Hooks** 来查看[hooks](/docs/zh-CN/hooks)在会话中加载,按事件分组。您可以添加、编辑或删除保存在您的用户、项目和本地设置文件中的 hooks。来自其他来源的 Hooks,例如托管设置或插件,是只读的。需要 Claude Code v2.1.269 或更高版本。

120 * 在 Customize 部分中选择 **Permissions** 来查看会话的[权限规则](/docs/zh-CN/permissions),分组为 Allow、Ask 和 Deny。您可以向您的用户、项目或本地设置添加规则,并删除保存在那里的规则。来自其他来源的规则,例如托管设置或仅为此会话进行的批准,是只读的。需要 Claude Code v2.1.269 或更高版本。

119 * Settings 部分包括 **Enable Remote Control for all sessions**,它设置 [`remoteControlAtStartup`](/docs/zh-CN/settings-reference#remotecontrolatstartup) 来控制[新的交互式会话是否自动连接到 Remote Control](/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions)。需要 Claude Code v2.1.203 或更高版本。121 * Settings 部分包括 **Enable Remote Control for all sessions**,它设置 [`remoteControlAtStartup`](/docs/zh-CN/settings-reference#remotecontrolatstartup) 来控制[新的交互式会话是否自动连接到 Remote Control](/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions)。需要 Claude Code v2.1.203 或更高版本。

120 122 

121 当您在 VS Code 窗口中打开或关闭切换开关时,更改适用于该 VS Code 窗口中已打开的会话,而不仅仅是您之后启动的会话。如果您关闭它,打开的会话将断开连接。使用 Claude Code v2.1.261 或更高版本,更改也会到达您其他 VS Code 窗口中打开的会话。123 当您在 VS Code 窗口中打开或关闭切换开关时,更改适用于该 VS Code 窗口中已打开的会话,而不仅仅是您之后启动的会话。如果您关闭它,打开的会话将断开连接。使用 Claude Code v2.1.261 或更高版本,更改也会到达您其他 VS Code 窗口中打开的会话。

122 * Settings 部分还包括 **Focus view**,它隐藏工具调用、工具结果和思考在可展开的行后面,只留下您的提示和 Claude 的响应。Claude 的最新待办事项列表保持可见,Claude 提出的待处理问题的文本也保持可见;这需要 Claude Code v2.1.225 或更高版本。在那里切换它,使用 `Ctrl+Option+F`(Mac)/ `Ctrl+Alt+F`(Windows/Linux),或从命令面板使用 **Claude Code: Toggle Focus view**。更改适用于每个打开的会话并在会话之间持续。需要 Claude Code v2.1.221 或更高版本。124 * Settings 部分还包括 **Focus view**,它隐藏工具调用、工具结果和思考在可展开的行后面,只留下您的提示和 Claude 的响应。在那里切换它,使用 `Ctrl+Option+F`(Mac)/ `Ctrl+Alt+F`(Windows/Linux),或从命令面板使用 **Claude Code: Toggle Focus view**。更改适用于每个打开的会话并在会话之间持续。需要 Claude Code v2.1.221 或更高版本。

125 

126 Claude 的最新待办事项列表保持可见,Claude 提出的待处理问题的文本也保持可见;这需要 Claude Code v2.1.225 或更高版本。当 Claude 运行[子代理](/docs/zh-CN/sub-agents)时,带有其最新活动的实时进度行出现在启动它们的工具调用组下。这需要 Claude Code v2.1.269 或更高版本。

123 * 要报告错误,请点击菜单底部的 **Report a problem**,或输入 `/bug` 或 `/feedback` 以及可选的描述来预填充报告。当您提交报告并且您在第一方连接上登录到 Anthropic 时,Claude Code 会将其发送给 Anthropic。在第三方提供商上,或没有 Anthropic 凭证的情况下,对话框仍会打开,但提交会显示错误并不发送任何内容:与 CLI 的 `/bug` 不同,扩展程序不会写入本地存档。需要 Claude Code v2.1.229 或更高版本。127 * 要报告错误,请点击菜单底部的 **Report a problem**,或输入 `/bug` 或 `/feedback` 以及可选的描述来预填充报告。当您提交报告并且您在第一方连接上登录到 Anthropic 时,Claude Code 会将其发送给 Anthropic。在第三方提供商上,或没有 Anthropic 凭证的情况下,对话框仍会打开,但提交会显示错误并不发送任何内容:与 CLI 的 `/bug` 不同,扩展程序不会写入本地存档。需要 Claude Code v2.1.229 或更高版本。

124* **Side questions**:输入 `/btw` 后跟一个问题来提问您的会话[而不添加到对话](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)。答案在聊天旁边的面板中打开,您可以在其中提出后续问题。线程在窗口重新加载后仍然存在。Claude Code 保留最新的 20 个交换,并根据 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 计划过期存储的线程,只要 Claude Code 可以[安全地确定保留期](/docs/zh-CN/claude-directory#cleaned-up-automatically)。要清除线程,请点击面板中的垃圾箱图标。需要 Claude Code v2.1.227 或更高版本。128* **Side questions**:输入 `/btw` 后跟一个问题来提问您的会话[而不添加到对话](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)。答案在聊天旁边的面板中打开,您可以在其中提出后续问题。线程在窗口重新加载后仍然存在。Claude Code 保留最新的 20 个交换,并根据 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 计划过期存储的线程,只要 Claude Code 可以[安全地确定保留期](/docs/zh-CN/claude-directory#cleaned-up-automatically)。要清除线程,请点击面板中的垃圾箱图标。需要 Claude Code v2.1.227 或更高版本。

125* **Context indicator**:提示框显示您使用了多少 Claude 的上下文窗口。Claude 在需要时自动压缩,或者您可以手动运行 `/compact`。129* **Context indicator**:提示框显示您使用了多少 Claude 的上下文窗口。Claude 在需要时自动压缩,或者您可以手动运行 `/compact`。

130* **Agent map**:当对话包括[子代理](/docs/zh-CN/sub-agents)时,代理计数(例如 **2 agents**)出现在提示框的底部。其点显示任何子代理是否正在工作或等待您的权限。

131 

132 点击代理计数来打开代理地图,它将对话的子代理绘制为主代理下的树,每个都有其状态、经过的时间和令牌计数。点击子代理来查看其提示和工具调用、打开其只读记录,或在其运行时停止它。需要 Claude Code v2.1.269 或更高版本。

126* **Extended thinking**:让 Claude 花更多时间推理复杂问题。通过命令菜单(`/`)打开它。Claude 的推理在对话中显示为折叠块:点击一个块来阅读它,或按 `Ctrl+O` 来展开或折叠会话中的每个思考块。有关详细信息,请参阅[Extended thinking](/docs/zh-CN/model-config#extended-thinking)。133* **Extended thinking**:让 Claude 花更多时间推理复杂问题。通过命令菜单(`/`)打开它。Claude 的推理在对话中显示为折叠块:点击一个块来阅读它,或按 `Ctrl+O` 来展开或折叠会话中的每个思考块。有关详细信息,请参阅[Extended thinking](/docs/zh-CN/model-config#extended-thinking)。

127* **Multi-line input**:按 `Shift+Enter` 添加新行而不发送。这也适用于问题对话框的"Other"自由文本输入。134* **Multi-line input**:按 `Shift+Enter` 添加新行而不发送。这也适用于问题对话框的"Other"自由文本输入。

128 135 


139 146 

140对于大型 PDF,您可以要求 Claude 读取特定页面而不是整个文件:单个页面、范围如第 1-10 页,或开放式范围如第 3 页及以后。147对于大型 PDF,您可以要求 Claude 读取特定页面而不是整个文件:单个页面、范围如第 1-10 页,或开放式范围如第 3 页及以后。

141 148 

142当您在编辑器中选择文本时,Claude 可以自动看到您突出显示的代码。提示框页脚显示选择了多少行。按 `Option+K`(Mac)/ `Alt+K`(Windows/Linux)来插入带有文件路径和行号的 @-mention(例如 `@app.ts#5-10`)。点击选择指示器来切换 Claude 是否可以看到您突出显示的文本 - 眼睛斜线图标表示选择对 Claude 隐藏。149当您在编辑器中选择文本时,Claude 可以自动看到您突出显示的代码。提示框页脚显示选择了多少行。按 `Option+K`(Mac)/ `Alt+K`(Windows/Linux)来插入带有文件路径和行号的 @-mention(例如 `@app.ts#5-10`)。点击选择指示器上的 **X** 来删除它,这样 Claude 就不会收到选择。当您选择其他文本或切换到不同的文件时,指示器会重新出现。

143 150 

144要附加图像,请从剪贴板将其粘贴到提示框中。您也可以在将文件拖入提示框时按住 `Shift` 来将它们添加为附件。点击任何附件上的 X 来从上下文中删除它。151要附加图像,请从剪贴板将其粘贴到提示框中。您也可以在将文件拖入提示框时按住 `Shift` 来将它们添加为附件。点击任何附件上的 X 来从上下文中删除它。

145 152 


193 200 

194运行 `/usage` 来打开 Account & usage 对话框。对话框需要 claude.ai 登录,因此在[第三方提供商](#use-third-party-providers)上不提供。它显示您登录的账户、您的计划以及您计划限制的使用条形图,例如当前会话和周。每个条形图显示距离其限制重置还有多长时间。201运行 `/usage` 来打开 Account & usage 对话框。对话框需要 claude.ai 登录,因此在[第三方提供商](#use-third-party-providers)上不提供。它显示您登录的账户、您的计划以及您计划限制的使用条形图,例如当前会话和周。每个条形图显示距离其限制重置还有多长时间。

195 202 

196对话框还分解了对您的计划限制有贡献的内容。它标记占最近使用量 10% 或更多的行为,例如缓存未命中、长上下文和子代理密集或高度并行的会话,每个都有减少它的提示。Attribution 表显示了每个 skill、subagent、plugin 和 MCP 服务器贡献了多少使用量。需要 Claude Code v2.1.174 或更高版本。203对话框还分解了对您的计划限制有贡献的内容。它标记占最近使用量 10% 或更多的行为,例如缓存未命中、长上下文和子代理密集或高度并行的会话,每个都有减少它的提示。Attribution 表显示了每个 skill、subagent、plugin 和 MCP 服务器贡献了多少使用量。

197 204 

198使用 Day 和 Week 切换来在过去 24 小时和过去 7 天之间切换。这些数字是近似的,并从此机器上的本地会话计算,因此不包括来自其他设备或 claude.ai 的使用情况。有关跟踪和减少使用情况的更多信息,请参阅[跟踪您的成本](/docs/zh-CN/costs#track-your-costs)。205使用 Day 和 Week 切换来在过去 24 小时和过去 7 天之间切换。这些数字是近似的,并从此机器上的本地会话计算,因此不包括来自其他设备或 claude.ai 的使用情况。有关跟踪和减少使用情况的更多信息,请参阅[跟踪您的成本](/docs/zh-CN/costs#track-your-costs)。

199 206 


238 245 

239* **对会话进行分组或取消分组**:右键单击会话以从其创建组、将其移动到现有组或将其从其组中删除。每个会话一次只属于一个组,因此将其移动到另一个组会将其从第一个组中删除。246* **对会话进行分组或取消分组**:右键单击会话以从其创建组、将其移动到现有组或将其从其组中删除。每个会话一次只属于一个组,因此将其移动到另一个组会将其从第一个组中删除。

240* **一次移动多个会话**:`Cmd`-单击(Mac)/ `Ctrl`-单击(Windows/Linux)每个会话,或 `Shift`-单击以选择范围,然后右键单击选择。247* **一次移动多个会话**:`Cmd`-单击(Mac)/ `Ctrl`-单击(Windows/Linux)每个会话,或 `Shift`-单击以选择范围,然后右键单击选择。

241* **从其选项卡对会话进行分组**:从命令面板运行 **Claude Code: Add Session Tab to Group**,或右键单击会话的编辑器选项卡,然后选择或创建组。需要 Claude Code v2.1.257 或更高版本。248* **从其选项卡对会话进行分组**:从命令面板运行 **Claude Code: Add Session Tab to Group**,然后选择或创建组。需要 Claude Code v2.1.257 或更高版本。

242* **重命名或删除组**:右键单击组标题。删除组仅删除组,其会话返回到未分组列表。249* **重命名或删除组**:右键单击组标题。删除组仅删除组,其会话返回到未分组列表。

243 250 

244该扩展按工作区文件夹保存组,因此它们在窗口重新加载后仍然存在,并在您打开相同文件夹的每个窗口中出现。当您搜索列表时,该扩展在所有组中的一个平面列表中显示匹配项。251该扩展按工作区文件夹保存组,因此它们在窗口重新加载后仍然存在,并在您打开相同文件夹的每个窗口中出现。当您搜索列表时,该扩展在所有组中的一个平面列表中显示匹配项。


359| Reopen Closed Session | `Cmd+Shift+T` (Mac) / `Ctrl+Shift+T` (Windows/Linux) | 重新打开最近关闭的 Claude 会话选项卡。当最后关闭的选项卡不是 Claude 会话时,会回退到 VS Code 的正常重新打开关闭编辑器功能。使用 `enableReopenClosedSessionShortcut` 禁用 |366| Reopen Closed Session | `Cmd+Shift+T` (Mac) / `Ctrl+Shift+T` (Windows/Linux) | 重新打开最近关闭的 Claude 会话选项卡。当最后关闭的选项卡不是 Claude 会话时,会回退到 VS Code 的正常重新打开关闭编辑器功能。使用 `enableReopenClosedSessionShortcut` 禁用 |

360| Insert @-Mention Reference | `Option+K` (Mac) / `Alt+K` (Windows/Linux) | 插入对当前文件和选择的引用(需要编辑器处于焦点状态) |367| Insert @-Mention Reference | `Option+K` (Mac) / `Alt+K` (Windows/Linux) | 插入对当前文件和选择的引用(需要编辑器处于焦点状态) |

361| Toggle Focus view | `Ctrl+Option+F` (Mac) / `Ctrl+Alt+F` (Windows/Linux) | 隐藏或显示对话中的工具活动。在 Claude 面板或侧边栏可见时有效。需要 Claude Code v2.1.221 或更高版本 |368| Toggle Focus view | `Ctrl+Option+F` (Mac) / `Ctrl+Alt+F` (Windows/Linux) | 隐藏或显示对话中的工具活动。在 Claude 面板或侧边栏可见时有效。需要 Claude Code v2.1.221 或更高版本 |

362| Rename Session Tab | - | 重命名活动 Claude 选项卡中的会话。该命令也出现在选项卡的右键菜单中。需要 Claude Code v2.1.257 或更高版本 |369| Rename Session Tab | - | 重命名活动 Claude 选项卡中的会话。需要 Claude Code v2.1.257 或更高版本 |

363| Add Session Tab to Group | - | 将活动 Claude 选项卡中的会话添加到您选择或创建的[会话组](#organize-sessions-into-groups)。该命令也出现在选项卡的右键菜单中。需要 Claude Code v2.1.257 或更高版本 |370| Add Session Tab to Group | - | 将活动 Claude 选项卡中的会话添加到您选择或创建的[会话组](#organize-sessions-into-groups)。需要 Claude Code v2.1.257 或更高版本 |

364| Mark Session as Unread | - | 在会话列表中将活动 Claude 选项卡中的会话标记为未读。该命令也出现在选项卡的右键菜单中。需要 Claude Code v2.1.257 或更高版本 |371| Mark Session as Unread | - | 在会话列表中将活动 Claude 选项卡中的会话标记为未读。需要 Claude Code v2.1.257 或更高版本 |

365| Show Logs | - | 查看扩展调试日志 |372| Show Logs | - | 查看扩展调试日志 |

366| Logout | - | 登出您的 Anthropic 账户 |373| Logout | - | 登出您的 Anthropic 账户 |

367 374 


424 431 

425该扩展有两种类型的设置:432该扩展有两种类型的设置:

426 433 

427* **VS Code 中的扩展设置**:控制扩展在 VS Code 中的行为。使用 `Cmd+,`(Mac)或 `Ctrl+,`(Windows/Linux)打开,然后转到扩展 → Claude Code。您也可以输入 `/` 并选择 **General Config** 来打开设置。434* **VS Code 中的扩展设置**:控制扩展在 VS Code 中的行为。使用 `Cmd+,`(Mac)或 `Ctrl+,`(Windows/Linux)打开,然后转到扩展 → Claude Code。您也可以输入 `/` 并选择 **General config…** 来打开设置。

428* **`~/.claude/settings.json` 中的 Claude Code 设置**:在扩展和 CLI 之间共享。用于允许的命令、环境变量、hooks 和 MCP 服务器。在 Pro、Max 和 Team 计划上,它也是权限模式对话开始时的一个输入。[切换权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)列出了顺序。有关详细信息,请参阅[设置](/docs/zh-CN/settings)。435* **`~/.claude/settings.json` 中的 Claude Code 设置**:在扩展和 CLI 之间共享。用于允许的命令、环境变量、hooks 和 MCP 服务器。在 Pro、Max 和 Team 计划上,它也是权限模式对话开始时的一个输入。[切换权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)列出了顺序。有关详细信息,请参阅[设置](/docs/zh-CN/settings)。

429 436 

430<Tip>437<Tip>


6594. **禁用冲突的扩展程序**:临时禁用其他 AI 扩展程序(Cline、Continue 等)6664. **禁用冲突的扩展程序**:临时禁用其他 AI 扩展程序(Cline、Continue 等)

6605. **检查工作区信任**:该扩展程序在受限模式下不起作用6675. **检查工作区信任**:该扩展程序在受限模式下不起作用

661 668 

662或者,如果您已将 [`preferredLocation`](#extension-settings) 设置为 `sidebar`,或使用**Claude Code: Open in Side Bar** 打开了 Claude,请点击**状态栏**(右下角)中的"✱ Claude Code"。即使没有打开文件,这也能工作。您也可以使用**命令面板**(`Cmd+Shift+P` / `Ctrl+Shift+P`)并输入"Claude Code"。669或者,如果您已将 [`preferredLocation`](#extension-settings) 设置为 `sidebar`,或使用**Claude Code: Open in Side Bar** 打开了 Claude,请点击**状态栏**(右下角)中的"✻ Claude Code"。即使没有打开文件,这也能工作。您也可以使用**命令面板**(`Cmd+Shift+P` / `Ctrl+Shift+P`)并输入"Claude Code"。

663 670 

664<h3 id="cmd-esc-does-nothing-on-macos">671<h3 id="cmd-esc-does-nothing-on-macos">

665 Cmd+Esc 在 macOS 上无效672 Cmd+Esc 在 macOS 上无效

Details

93 从终端连接93 从终端连接

94</h3>94</h3>

95 95 

96如果您已经使用 GitHub CLI (`gh`),可以在不打开浏览器的情况下在网络上设置 Claude Code。这需要[Claude Code CLI](/docs/zh-CN/quickstart)。在 Team 和 Enterprise 计划上,只有在所有者打开[Quick web setup](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)后,`/web-setup` 才可用。96如果您已经使用 GitHub CLI (`gh`),可以从终端设置 Claude Code on the web。这需要[Claude Code CLI](/docs/zh-CN/quickstart)。在 Team 和 Enterprise 计划上,只有在所有者打开[Quick web setup](/docs/zh-CN/claude-code-on-the-web#github-authentication-options)后,`/web-setup` 才可用。

97 97 

98运行 `/web-setup` 时,Claude Code 读取 `gh auth token` 打印的令牌,要求您确认,并将令牌发送给 Anthropic。Anthropic 使用您的 claude.ai 账户加密存储它,您的云会话使用它进行 GitHub 访问,直到您[删除它](#remove-the-web-setup-token)。云会话随后可以访问该令牌可以访问的任何存储库,无需安装 Claude GitHub App。98运行 `/web-setup` 时,Claude Code 读取 `gh auth token` 打印的令牌,要求您确认,并将令牌发送给 Anthropic。Anthropic 使用您的 claude.ai 账户加密存储它,您的云会话使用它进行 GitHub 访问,直到您[删除它](#remove-the-web-setup-token)。云会话随后可以访问该令牌可以访问的任何存储库,无需安装 Claude GitHub App。

99 99 

worktrees.md +1 −1

Details

9[git worktree](https://git-scm.com/docs/git-worktree) 是一个单独的工作目录,具有自己的文件和分支,但与主检出共享相同的存储库历史和远程。在自己的 worktree 中运行每个 Claude Code 会话意味着一个会话中的编辑永远不会触及另一个会话中的文件,因此一个会话可以构建功能,而第二个会话可以修复错误。9[git worktree](https://git-scm.com/docs/git-worktree) 是一个单独的工作目录,具有自己的文件和分支,但与主检出共享相同的存储库历史和远程。在自己的 worktree 中运行每个 Claude Code 会话意味着一个会话中的编辑永远不会触及另一个会话中的文件,因此一个会话可以构建功能,而第二个会话可以修复错误。

10 10 

11<Note>11<Note>

12 Worktrees 需要 git 存储库;对于其他版本控制系统,请[配置 hooks 来替换 git 逻辑](#non-git-version-control)。在[桌面应用](/docs/zh-CN/desktop#work-in-parallel-with-sessions)中,每个新会话都会自动获得自己的 worktree。12 Worktrees 需要 git 存储库;对于其他版本控制系统,请[配置 hooks 来替换 git 逻辑](#non-git-version-control)。在[桌面应用](/docs/zh-CN/desktop#work-in-parallel-with-sessions)中,启动会话时选择 **worktree** 选项,为其提供自己的 worktree。

13</Note>13</Note>

14 14 

15Worktrees 是运行 Claude 并行的几种方式之一。它们隔离文件编辑。[子代理](/docs/zh-CN/sub-agents)在一个会话内分割工作,[跨会话消息传递](/docs/zh-CN/cross-session-messaging)让 Claude 在您的 worktrees 中的会话之间传递发现。请参阅[并行运行代理](/docs/zh-CN/agents)来比较这些方法,或跳到[使用 worktrees 隔离子代理](#isolate-subagents-with-worktrees)以同时使用 worktrees 和子代理。15Worktrees 是运行 Claude 并行的几种方式之一。它们隔离文件编辑。[子代理](/docs/zh-CN/sub-agents)在一个会话内分割工作,[跨会话消息传递](/docs/zh-CN/cross-session-messaging)让 Claude 在您的 worktrees 中的会话之间传递发现。请参阅[并行运行代理](/docs/zh-CN/agents)来比较这些方法,或跳到[使用 worktrees 隔离子代理](#isolate-subagents-with-worktrees)以同时使用 worktrees 和子代理。