SpyBara
Go Premium

Documentation 2026-10-13 23:57 UTC to 2026-10-14 22:58 UTC

73 files changed +2,014 −1,367. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

20* 对于从一个 shell 启动的会话:设置 `CLAUDE_AX_SCREEN_READER` 环境变量为 `1`。在 Bash 或 Zsh 中,运行 `export CLAUDE_AX_SCREEN_READER=1`。在 PowerShell 中,运行 `$env:CLAUDE_AX_SCREEN_READER = "1"`。将该行添加到您的 shell 配置文件以保持它用于未来的 shell。20* 对于从一个 shell 启动的会话:设置 `CLAUDE_AX_SCREEN_READER` 环境变量为 `1`。在 Bash 或 Zsh 中,运行 `export CLAUDE_AX_SCREEN_READER=1`。在 PowerShell 中,运行 `$env:CLAUDE_AX_SCREEN_READER = "1"`。将该行添加到您的 shell 配置文件以保持它用于未来的 shell。

21* 对于机器上的每个会话:将 `"axScreenReader": true` 添加到您的用户[设置文件](/docs/zh-CN/settings)。该设置适用于任何终端,包括 VS Code 集成终端。21* 对于机器上的每个会话:将 `"axScreenReader": true` 添加到您的用户[设置文件](/docs/zh-CN/settings)。该设置适用于任何终端,包括 VS Code 集成终端。

22 22 

23如果您组合方法,Claude Code 将 [`--ax-screen-reader`](/docs/zh-CN/cli-reference#cli-flags) 标志应用于 [`CLAUDE_AX_SCREEN_READER`](/docs/zh-CN/env-vars#variables) 环境变量,以及该变量应用于 [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) 设置。23如果您组合使用多种方法,Claude Code 会优先应用 [`--ax-screen-reader`](/docs/zh-CN/cli-reference#cli-flags) 标志而非 [`CLAUDE_AX_SCREEN_READER`](/docs/zh-CN/env-vars#variables) 环境变量,并优先应用该环境变量而非 [`axScreenReader`](/docs/zh-CN/settings-reference#axscreenreader) 设置。

24 24 

25如果您通过 SSH 使用 Claude Code,请在运行 Claude Code 的远程机器上设置环境变量或设置。25如果您通过 SSH 使用 Claude Code,请在运行 Claude Code 的远程机器上设置环境变量或设置。

26 26 

Details

855 855 

856远程服务器的状态在报告 `"connected"` 后也可能会改变。当连接在会话中途断开时,Claude Code 会在 [重新连接](/docs/zh-CN/mcp#automatic-reconnection) 时将服务器移回 `"pending"`。之后在 TypeScript 中调用 `mcpServerStatus()`,或在 Python 中调用 [`ClaudeSDKClient.get_mcp_status()`](/docs/zh-CN/agent-sdk/python#methods),可能会为您之前看到已连接的服务器报告 `"pending"`,而您这一方没有进行任何配置更改。856远程服务器的状态在报告 `"connected"` 后也可能会改变。当连接在会话中途断开时,Claude Code 会在 [重新连接](/docs/zh-CN/mcp#automatic-reconnection) 时将服务器移回 `"pending"`。之后在 TypeScript 中调用 `mcpServerStatus()`,或在 Python 中调用 [`ClaudeSDKClient.get_mcp_status()`](/docs/zh-CN/agent-sdk/python#methods),可能会为您之前看到已连接的服务器报告 `"pending"`,而您这一方没有进行任何配置更改。

857 857 

858在五次重新连接尝试失败后,服务器报告 `"failed"`,或在需要再次授权时报告 `"needs-auth"`。要手动重试,请在 TypeScript 中调用 [`reconnectMcpServer()`](/docs/zh-CN/agent-sdk/typescript#methods) 或在 Python 中调用 [`ClaudeSDKClient.reconnect_mcp_server()`](/docs/zh-CN/agent-sdk/python#methods)。858在五次重新连接尝试失败后,服务器报告 `"failed"`,或在需要再次授权时报告 `"needs-auth"`。处于 `"failed"` 状态的 HTTP 或 SSE 服务器仍可能在您无需调用任何方法的情况下恢复为 `"connected"`,因为 Claude Code 在发生暂时性错误后会持续[在后台重试](/docs/zh-CN/mcp#mid-session-drops-of-a-remote-server)。要手动重试,请在 TypeScript 中调用 [`reconnectMcpServer()`](/docs/zh-CN/agent-sdk/typescript#methods) 或在 Python 中调用 [`ClaudeSDKClient.reconnect_mcp_server()`](/docs/zh-CN/agent-sdk/python#methods)。

859 859 

860<h2 id="troubleshooting">860<h2 id="troubleshooting">

861 故障排除861 故障排除

Details

424 Claude Code 在系统提示之外添加的上下文424 Claude Code 在系统提示之外添加的上下文

425</h2>425</h2>

426 426 

427系统提醒是 Claude Code 在会话期间添加到对话中的消息,用于为 Claude 提供上下文,例如 CLAUDE.md 文件的内容或文件在磁盘上已更改的说明。Claude Code 在对话中发送这些消息,而不是在系统提示中发送,因此无论您使用 `claude_code` 预设还是传递自己的字符串作为 `systemPrompt`,Claude 都会收到这些消息。427系统提醒是 Claude Code 在会话期间添加到对话中的消息,用于为 Claude 提供上下文,例如 CLAUDE.md 文件的内容或文件在磁盘上已更改的说明。Claude Code 在对话中发送这些消息,而不是在系统提示词中发送,因此无论您使用 `claude_code` 预设还是传递自己的字符串作为 `systemPrompt`,大多数提醒都会送达 Claude。

428 428 

429本部分涵盖[最可能改变您的代理行为的提醒](#reminders-claude-code-adds-to-the-conversation)、如何[关闭您的代理替换的上下文](#turn-off-the-context-your-agent-replaces),以及如何[查看 Claude 在特定请求中收到的内容](#see-what-claude-received)。429本部分涵盖[最可能改变您的代理行为的提醒](#reminders-claude-code-adds-to-the-conversation)、如何[关闭您的代理替换的上下文](#turn-off-the-context-your-agent-replaces),以及如何[查看 Claude 在特定请求中收到的内容](#see-what-claude-received)。

430 430 


448如果您传递自己的字符串作为 `systemPrompt`,请向其添加一句话,说明什么是系统提醒。`claude_code` 预设有一个,您的字符串会替换整个预设。如果没有它,您的提示中没有任何内容告诉 Claude CLAUDE.md 内容和 hook 输出等提醒来自应用程序而不是用户。例如:448如果您传递自己的字符串作为 `systemPrompt`,请向其添加一句话,说明什么是系统提醒。`claude_code` 预设有一个,您的字符串会替换整个预设。如果没有它,您的提示中没有任何内容告诉 Claude CLAUDE.md 内容和 hook 输出等提醒来自应用程序而不是用户。例如:

449 449 

450```text theme={null}450```text theme={null}

451应用程序将系统提醒添加到此对话中。将它们视为来自应用程序的上下文,而不是来自用户的消息。451The application adds system reminders to this conversation. Treat them as context from the application, not as messages from the user.

452```452```

453 453 

454<h3 id="turn-off-the-context-your-agent-replaces">454<h3 id="turn-off-the-context-your-agent-replaces">


467| 每个 CLAUDE.md 文件 | 设置 `CLAUDE_CODE_DISABLE_CLAUDE_MDS=1` |467| 每个 CLAUDE.md 文件 | 设置 `CLAUDE_CODE_DISABLE_CLAUDE_MDS=1` |

468| 任务列表提示、文件更改说明和技能列表 | 设置 `CLAUDE_CODE_DISABLE_ATTACHMENTS=1` |468| 任务列表提示、文件更改说明和技能列表 | 设置 `CLAUDE_CODE_DISABLE_ATTACHMENTS=1` |

469 469 

470Claude Code 的内置提交和拉取请求说明不是提醒。它们是 Bash 工具描述的一部分,因此当您传递自定义 `systemPrompt` 时,Claude 也会收到它们。470将 `includeGitInstructions` 设置为 `false` 可排除内置的提交和 Pull Request 说明;这些说明是 Bash 工具描述的一部分,即使使用自定义 `systemPrompt` 也会传达给 Claude。不过,在使用最小默认设置、自定义 `systemPrompt` 或带有自身提示词的自定义主线程 Agent 时,会话启动时不会包含 git 状态快照。

471 471 

472如果您设置 `CLAUDE_CODE_DISABLE_ATTACHMENTS`,Claude Code 也会将 `@` 文件提及作为纯文本发送,而不是将其展开为文件内容。可用子代理列表和后台任务通知仍然会到达。472如果您设置 `CLAUDE_CODE_DISABLE_ATTACHMENTS`,Claude Code 也会将 `@` 文件提及作为纯文本发送,而不是将其展开为文件内容。可用子代理列表和后台任务通知仍然会到达。如果只想阻止 `@` 文件提及被展开,请改为设置 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/zh-CN/env-vars#variables)(需要 Claude Code v2.1.299 或更高版本)。这样 Claude 会收到所提及的路径,以及一条提示其使用文件工具读取这些路径的说明。

473 473 

474以下示例适用于在 `append` 中携带自己提交规则的代理。它将两个 `attribution` 键都设置为空字符串以删除预告片和页脚,并关闭 `includeGitInstructions`,以便 Claude Code 自己的提交工作流说明不会与您的说明竞争:474以下示例适用于在 `append` 中携带自己提交规则的代理。它将两个 `attribution` 键都设置为空字符串以删除预告片和页脚,并关闭 `includeGitInstructions`,以便 Claude Code 自己的提交工作流说明不会与您的说明竞争:

475 475 

Details

164| `mcpServers` | `(string \| object)[]` | 否 | 此代理可用的 MCP 服务器,按名称或内联配置 |164| `mcpServers` | `(string \| object)[]` | 否 | 此代理可用的 MCP 服务器,按名称或内联配置 |

165| `initialPrompt` | `string` | 否 | 当此代理作为主线程代理运行时自动提交为第一个用户轮次。当代理作为子代理调用时忽略 |165| `initialPrompt` | `string` | 否 | 当此代理作为主线程代理运行时自动提交为第一个用户轮次。当代理作为子代理调用时忽略 |

166| `maxTurns` | `number` | 否 | 代理停止前的最大代理轮次数。当代理达到限制时,Claude Code 返回其输出标记为部分,您可以[恢复代理](#resume-subagents)以继续。部分标记需要 Claude Code v2.1.246 或更高版本 |166| `maxTurns` | `number` | 否 | 代理停止前的最大代理轮次数。当代理达到限制时,Claude Code 返回其输出标记为部分,您可以[恢复代理](#resume-subagents)以继续。部分标记需要 Claude Code v2.1.246 或更高版本 |

167| `autoCompactWindow` | `number` | 否 | 当此 Agent 作为子代理运行时,将其[自动压缩窗口](/docs/zh-CN/sub-agents#subagent-auto-compact-window)降低到 `100000` 至 `1000000` 之间的 token 数。需要 TypeScript Agent SDK v0.3.296 或更高版本。Python SDK 的 [`AgentDefinition`](/docs/zh-CN/agent-sdk/python#agentdefinition) 没有此字段 |

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

168| `omitClaudeMd` | `boolean` | 否 | 当此代理作为子代理运行时,在不使用用户、项目和本地 CLAUDE.md 文件的情况下运行此代理;托管策略文件仍然加载。当代理作为主线程代理运行时忽略。需要 TypeScript Agent SDK v0.3.271 或更高版本。Python SDK 的 [`AgentDefinition`](/docs/zh-CN/agent-sdk/python#agentdefinition) 没有此字段 |169| `omitClaudeMd` | `boolean` | 否 | 将用户、项目和本地 CLAUDE.md 文件排除在此 Agent 的初始上下文之外;托管策略文件仍会加载。当该 Agent 作为主线程 Agent 运行时忽略。需要 TypeScript Agent SDK v0.3.271 或更高版本。Python SDK 的 [`AgentDefinition`](/docs/zh-CN/agent-sdk/python#agentdefinition) 没有此字段 |

169| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | 否 | 此代理的推理工作量级别 |170| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | 否 | 此代理的推理工作量级别 |

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

171 172 


200| 子代理接收 | 子代理不接收 |201| 子代理接收 | 子代理不接收 |

201| :- | :- |202| :- | :- |

202| 其自身的系统提示(`AgentDefinition.prompt`)和 Agent 工具的提示 | 父代理的对话历史或工具结果 |203| 其自身的系统提示(`AgentDefinition.prompt`)和 Agent 工具的提示 | 父代理的对话历史或工具结果 |

203| 项目 CLAUDE.md(通过 [`settingSources`](/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 加载),除非代理设置了 [`omitClaudeMd`](#agentdefinition-configuration) | 预加载的技能内容,除非在 `AgentDefinition.skills` 中列出 |204| 项目 CLAUDE.md(通过 [`settingSources`](/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 加载)。设置了 [`omitClaudeMd`](#agentdefinition-configuration) 的 Agent 启动时不包含它 | 预加载的 skill 内容,除非在 `AgentDefinition.skills` 中列出 |

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

205 206 

206<Note>207<Note>

Details

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

370| `message` | `unknown` | 来自会话记录的原始消息负载 |370| `message` | `unknown` | 来自会话记录的原始消息负载 |

371| `parent_tool_use_id` | `string \| null` | 对于子代理消息,启动该子代理的 `Agent` 或 `Skill` 工具调用的 `tool_use_id`。对于主会话消息和较旧的会话为 `null` |371| `parent_tool_use_id` | `string \| null` | 对于子代理消息,启动该子代理的 `Agent` 或 `Skill` 工具调用的 `tool_use_id`。对于主会话消息和较旧的会话为 `null` |

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

373 373 

374<h4 id="example-4">374<h4 id="example-4">

375 示例375 示例


908 | "malformed"908 | "malformed"

909 | "not_honoured"909 | "not_honoured"

910 >;910 >;

911 claude_code_version?: string;

911};912};

912```913```

913 914 


922 923 

923请求的 `sdkMcpServerManifests` 字段和响应的 `sdk_mcp_manifests_parked` 字段用于您通过 [`createSdkMcpServer()`](#createsdkmcpserver) 创建的进程内 [SDK MCP 服务器](/docs/zh-CN/agent-sdk/custom-tools)。您的应用不需要设置或读取这两个字段。924请求的 `sdkMcpServerManifests` 字段和响应的 `sdk_mcp_manifests_parked` 字段用于您通过 [`createSdkMcpServer()`](#createsdkmcpserver) 创建的进程内 [SDK MCP 服务器](/docs/zh-CN/agent-sdk/custom-tools)。您的应用不需要设置或读取这两个字段。

924 925 

926`claude_code_version` 是运行会话轮次的进程的 Claude Code 版本。它与 [`SDKSystemMessage`](#sdksystemmessage) init 消息携带的值相同,因此您可以在第一轮之前读取 CLI 版本。

927 

928* 该字段需要 Agent SDK v0.3.296 或更高版本,该版本捆绑了 Claude Code v2.1.296。

929* 如果该字段为 `undefined` 且您设置了 `pathToClaudeCodeExecutable`,请将其指向 Claude Code v2.1.296 或更高版本。

930 

925响应始终会报告 `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)。931响应始终会报告 `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)。

926 932 

927成功的 `initialize` 的控制响应包装器还携带一个 `pending_permission_requests` 数组。该字段位于响应包装器本身,而不在上述 `SDKControlInitializeResponse` 负载中。每个条目都是一条完整的 `control_request` 消息,其 `{ type: "control_request", request_id, request }` 结构与会话运行期间为权限请求流式发送的结构相同。933成功的 `initialize` 的控制响应包装器还携带一个 `pending_permission_requests` 数组。该字段位于响应包装器本身,而不在上述 `SDKControlInitializeResponse` 负载中。每个条目都是一条完整的 `control_request` 消息,其 `{ type: "control_request", request_id, request }` 结构与会话运行期间为权限请求流式发送的结构相同。


1218 skills?: string[];1224 skills?: string[];

1219 initialPrompt?: string;1225 initialPrompt?: string;

1220 maxTurns?: number;1226 maxTurns?: number;

1227 autoCompactWindow?: number;

1221 background?: boolean;1228 background?: boolean;

1222 omitClaudeMd?: boolean;1229 omitClaudeMd?: boolean;

1223 memory?: "user" | "project" | "local";1230 memory?: "user" | "project" | "local";


1238| `skills` | 否 | 要预加载到 Agent 上下文中的 skill 名称数组 |1245| `skills` | 否 | 要预加载到 Agent 上下文中的 skill 名称数组 |

1239| `initialPrompt` | 否 | 当此 Agent 作为主线程 Agent 运行时,作为第一轮用户输入自动提交 |1246| `initialPrompt` | 否 | 当此 Agent 作为主线程 Agent 运行时,作为第一轮用户输入自动提交 |

1240| `maxTurns` | 否 | 停止前的最大 agentic 轮次数(API 往返次数) |1247| `maxTurns` | 否 | 停止前的最大 agentic 轮次数(API 往返次数) |

1248| `autoCompactWindow` | 否 | 当此 Agent 作为子代理运行时,将其[自动压缩窗口](/docs/zh-CN/sub-agents#subagent-auto-compact-window)降低到 `100000` 至 `1000000` 之间的 token 数。需要 TypeScript Agent SDK v0.3.296 或更高版本 |

1241| `background` | 否 | 被调用时将此 Agent 作为非阻塞的后台任务运行 |1249| `background` | 否 | 被调用时将此 Agent 作为非阻塞的后台任务运行 |

1242| `omitClaudeMd` | 否 | 当此 Agent 作为子代理运行时,不加载用户、项目和本地 CLAUDE.md 文件;托管策略文件仍会加载。适用于从 Agent 工具提示词中获取所需全部内容的 Agent。当此 Agent 作为主线程 Agent 运行时忽略。需要 TypeScript Agent SDK v0.3.271 或更高版本 |1250| `omitClaudeMd` | 否 | 不将用户、项目和本地 CLAUDE.md 文件纳入此 Agent 的初始上下文;托管策略文件仍会加载。适用于从 Agent 工具提示词中获取所需全部信息的 Agent。当此 Agent 作为主线程 Agent 运行时忽略。需要 TypeScript Agent SDK v0.3.271 或更高版本 |

1243| `memory` | 否 | 此 Agent 的记忆来源:`'user'`、`'project'` 或 `'local'` |1251| `memory` | 否 | 此 Agent 的记忆来源:`'user'`、`'project'` 或 `'local'` |

1244| `effort` | 否 | 此 Agent 的推理 effort 级别。接受命名级别或整数 |1252| `effort` | 否 | 此 Agent 的推理 effort 级别。接受命名级别或整数 |

1245| `permissionMode` | 否 | 此 Agent 内工具执行的权限模式。[子代理继承规则](/docs/zh-CN/agent-sdk/permissions#available-modes)决定其何时生效。请参阅 [`PermissionMode`](#permissionmode) |1253| `permissionMode` | 否 | 此 Agent 内工具执行的权限模式。[子代理继承规则](/docs/zh-CN/agent-sdk/permissions#available-modes)决定其何时生效。请参阅 [`PermissionMode`](#permissionmode) |


2434* `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 或更高版本。2442* `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 或更高版本。

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

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

2437* `body`:解码的消息体,去除对等体信封,字节精确匹配模型看到的内容。始终存在于队友消息;对于跨会话对等体,仅当轮恰好是由 Claude Code 形成的一个对等体信封时存在。呈现 `name` 和 `body` 而不是重新解析消息文本。需要 Claude Code v2.1.205 或更高版本。2445* `body`:去除对等方信封后的已解码消息正文,与模型所见内容逐字节一致。对于单条队友消息,该字段存在;当多条消息被合并时,该字段不存在;对于跨会话对等方,仅当该轮次恰好是由 Claude Code 构成的一个对等方信封时才存在。请渲染 `name` 和 `body`,而不要重新解析消息文本。在 v2.1.299 之前,合并的消息会保留第一条消息的 `body`。需要 Claude Code v2.1.205 或更高版本。

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

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

2440 2448 


3264 工具输入类型3272 工具输入类型

3265</h2>3273</h2>

3266 3274 

3267所有内置 Claude Code 工具的输入 schema 文档。这些类型从 `@anthropic-ai/claude-agent-sdk/sdk-tools` 导出,可用于类型安全的工具交互。3275内置 Claude Code 工具的输入 schema 文档。这些类型从 `@anthropic-ai/claude-agent-sdk/sdk-tools` 导出,可用于类型安全的工具交互。

3268 3276 

3269<h3 id="toolinputschemas">3277<h3 id="toolinputschemas">

3270 `ToolInputSchemas`3278 `ToolInputSchemas`


3444 offset?: number;3452 offset?: number;

3445 limit?: number;3453 limit?: number;

3446 pages?: string;3454 pages?: string;

3455 allow_large?: boolean;

3447};3456};

3448```3457```

3449 3458 

3450从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。对 PDF 页面范围使用 `pages`(例如,`"1-5"`)。3459从本地文件系统读取文件,包括文本、图像、PDF 和 Jupyter 笔记本。

3460 

3461* 对 PDF 页面范围使用 `pages`(例如,`"1-5"`)。

3462* `allow_large` 允许 Claude 在会话的上下文窗口有空间时读取超过[通常大小限制](/docs/zh-CN/tools-reference#large-files)的文本文件。它需要 Agent SDK v0.3.296 或更高版本,该版本捆绑了 Claude Code v2.1.296。

3451 3463 

3452对于 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` 消息传递文件的内容。3464对于 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` 消息传递文件的内容。

3453 3465 

agent-teams.md +2 −1

Details

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

271| **Mailbox** | 代理之间通信的消息系统 |271| **Mailbox** | 代理之间通信的消息系统 |

272 272 

273每个代理的邮箱是位于 `~/.claude/teams/{team-name}/inboxes/{agent-name}.json` 的 JSON 文件。Claude Code 在读取邮箱文件时验证每个条目。不匹配消息格式的条目被报告为错误并从文件中删除;有效的消息仍然会被传递。在 v2.1.207 之前,单个格式错误的邮箱条目会导致每秒重复出现错误,并阻止该邮箱的传递,直到你手动删除文件。273每个 Agent 的邮箱是位于 `~/.claude/teams/{team-name}/inboxes/{agent-name}.json` 的 JSON 文件。Claude Code 在读取邮箱文件时会验证每个条目。不匹配消息格式的条目会被报告为错误并从文件中删除;有效的消息仍然会被传递。

274 274 

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

276 276 


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

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

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

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

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

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

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

agent-view.md +19 −19

Details

26 快速开始26 快速开始

27</h2>27</h2>

28 28 

29本演练涵盖核心 agent view 循环:调度一个任务,观看其行在 Claude 工作时更新,窥视以检查它并回复,以及附加到完整对话。你调度的会话在关闭 agent view 后继续运行,所以你可以离开并稍后回到它。29本演练涵盖 agent view 的核心循环:调度一个任务,在 Claude 工作时观察其所在行的更新,窥视以查看进展并回复,以及附加以查看完整对话。您调度的会话在关闭 agent view 后会继续运行,因此您可以离开并稍后再回来。

30 30 

31<Steps>31<Steps>

32 <Step title="打开 agent view">32 <Step title="打开 agent view">

33 从你的 shell,运行:33 在您的 shell 中运行:

34 34 

35 ```bash theme={null}35 ```bash theme={null}

36 claude agents36 claude agents

37 ```37 ```

38 38 

39 如果你还没有接受该目录的[工作区信任对话框](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),Claude Code 会在 agent view 打开前显示它,与 `claude` 显示的对话框相同。接受以保存工作区的信任并继续。如果你拒绝,Claude Code 会退出而不打开 agent view。39 如果您尚未接受该目录的[工作区信任对话框](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust),Claude Code 会在 agent view 打开前显示该对话框,与 `claude` 显示的对话框相同。接受即可保存对该工作区的信任并继续。如果您拒绝,Claude Code 会直接退出,不会打开 agent view。

40 40 

41 Agent view 打开,底部有一个输入框,当会话启动时表格会填充。随时按 `Esc` 返回你的 shell;如果你通过后台会话 `←` 打开了 agent view,`Esc` 会返回到该对话框。你的会话在你离开时继续运行,下次打开 agent view 时会重新出现。41 Agent view 打开后,底部有一个输入框,表格会随着会话启动而逐步填充。按 `Esc` 返回您的 shell;如果您是通过按 `←` 将会话转入后台来打开 agent view 的,`Esc` 则会返回到该对话。您离开期间会话会继续运行,并会在您下次打开 agent view 时重新出现。

42 </Step>42 </Step>

43 43 

44 <Step title="调度一个会话">44 <Step title="调度一个会话">

45 输入描述任务的提示并按 `Enter`。一个新的后台会话在该任务上启动并显示为一行,显示它是否正在工作、等待你或已完成。新会话使用 agent view 标题中显示的模型。[它启动的权限模式](#permission-mode-model-and-effort)取决于你如何打开 agent view。45 输入描述任务的提示词并按 `Enter`。一个新的后台会话会针对该任务启动,并显示为一行,标明它是正在工作、正在等待您,还是已完成。新会话使用 agent view 标题中显示的模型。[它以哪种权限模式启动](#permission-mode-model-and-effort)取决于您打开 agent view 的方式。

46 46 

47 你在此输入的每个提示都会启动自己的新会话。输入另一个提示并按 `Enter` 会启动第二个会话,与第一个会话并行运行,而不是向其发送后续消息。你可以通过这种方式并行运行多个会话。47 您在此输入的每个提示词都会启动各自的新会话。输入另一个提示词并按 `Enter` 会启动第二个会话,与第一个会话并行运行,而不是向第一个会话发送后续消息。您可以通过这种方式并行运行多个会话。

48 48 

49 每个会话独立使用你的订阅配额,所以在一次调度多个会话之前,请查看[限制](#limitations)。49 每个会话独立消耗您的订阅配额,因此在一次调度多个会话之前,请先查看[限制](#limitations)。

50 </Step>50 </Step>

51 51 

52 <Step title="窥视和回复">52 <Step title="窥视和回复">

53 用箭头键选择一行并按 `Space` 打开窥视面板。它显示会话的最近输出,或它正在等待的问题,而不是完整的记录。输入回复并按 `Enter` 发送,无需离开 agent view。53 使用箭头键选择一行,然后按 `Space` 打开窥视面板。它显示会话的最新输出或会话正在等待回答的问题,而不是完整的会话记录。输入回复并按 `Enter` 即可发送,无需离开 agent view。

54 </Step>54 </Step>

55 55 

56 <Step title="附加和分离">56 <Step title="附加和分离">

57 在一行上按 `Enter` 或 `→` 在你想要完整对话时附加。会话接管终端,就像一个完整的交互式 Claude Code 会话。在空提示上按 `←` 分离并返回表格。57 当您想查看完整对话时,在某一行上按 `Enter` 或 `→` 进行附加。该会话会接管终端,成为一个完整的交互式 Claude Code 会话。在空输入框中按 `←` 即可分离并返回表格。

58 </Step>58 </Step>

59 59 

60 <Step title="将现有会话引入">60 <Step title="引入现有会话">

61 这一步需要一个运行中的会话。如果你遵循了之前的步骤,你在此终端中没有打开的会话,所以在另一个终端中打开一个常规 `claude` 会话并先向其发送一条消息。61 此步骤需要一个正在运行的会话。如果您按照前面的步骤操作,此终端中并没有打开的会话,因此请先在另一个终端中打开一个常规 `claude` 会话并向其发送一条消息。

62 62 

63 要将你已经打开的会话移入 agent view,在其中运行 `/bg`,或在空提示上按 `←` 以后台会话并在一步中打开 agent view。在没有消息的新会话中,`/bg` 会要求你先发送一条消息,而 `←` 可以立即工作。会话继续运行并显示为一行,与你调度的会话并排。63 要将已打开的会话移入 agent view,请在该会话中运行 `/bg`,或在空输入框中按 `←`,一步完成将会话转入后台并打开 agent view。在尚无任何消息的新会话中,`/bg` 会要求您先发送一条消息,而 `←` 可立即生效。该会话会继续运行,并与您调度的会话一起显示为一行。

64 </Step>64 </Step>

65</Steps>65</Steps>

66 66 

67在常规 `claude` 会话内,提示页脚的 `←` 提示计算正在等待你的后台 agent 数量,例如 `← 2 agents`,当没有 agent 需要输入时返回 `← for agents`。超过 99 的计数显示为 `99+`。当终端获得焦点时,计数大约每十秒刷新一次,当焦点返回时立即刷新。当计数移动和 agent 完成时,它会短暂改变颜色,当后台会话完成而没有 agent 需要你的输入时,它会短暂显示完成的数量,例如 `← 2 done`。当启用了[`prefersReducedMotion` 设置](/docs/zh-CN/settings-reference#prefersreducedmotion)时,两个闪烁都关闭,并且在[屏幕阅读器模式](/docs/zh-CN/accessibility)中隐藏提示。67在常规 `claude` 会话中,输入框页脚的 `←` 提示会统计正在等待您的后台 Agent 数量,例如 `← 2 agents`;当没有 Agent 需要输入时,则恢复为 `← for agents`。超过 99 的计数显示为 `99+`。终端处于焦点状态时,计数大约每十秒刷新一次,焦点返回时会立即刷新。计数变化以及 Agent 完成时,它会短暂改变颜色;当某个后台会话完成且没有 Agent 需要您输入时,它会短暂显示已完成的数量,例如 `← 2 done`。启用 [`prefersReducedMotion` 设置](/docs/zh-CN/settings-reference#prefersreducedmotion)时,这两种闪烁效果都会关闭;在[屏幕阅读器模式](/docs/zh-CN/accessibility)下,该提示会被隐藏。

68 68 

69<h3 id="open-agent-view-by-default">69<h3 id="open-agent-view-by-default">

70 默认打开 agent view70 默认打开 agent view

71</h3>71</h3>

72 72 

73要让 `claude` 不带参数打开 agent view 而不是新对话,请打开一个 `/config` 设置。73要让不带参数的 `claude` 打开 agent view 而不是新对话,请启用一项 `/config` 设置。

74 74 

75<Steps>75<Steps>

76 <Step title="打开设置">76 <Step title="启用设置">

77 在常规 `claude` 会话中,运行 `/config` 并打开**默认打开 agents view**。要跳过菜单,直接设置 [`defaultToAgentsView`](/docs/zh-CN/settings-reference#defaulttoagentsview) 键:77 在常规 `claude` 会话中,运行 `/config` 并启用 **Open agents view by default**。要跳过菜单,可直接设置 [`defaultToAgentsView`](/docs/zh-CN/settings-reference#defaulttoagentsview) 键:

78 78 

79 ```text theme={null}79 ```text theme={null}

80 /config defaultToAgentsView=true80 /config defaultToAgentsView=true


88 claude88 claude

89 ```89 ```

90 90 

91 Agent view 打开,代替新对话。91 此时将打开 agent view,而不是新对话。

92 </Step>92 </Step>

93</Steps>93</Steps>

94 94 

95要在设置打开时启动常规会话,请传递一个提示:`claude "fix the login test"`。要关闭设置,在常规会话中或在从 agent view 附加的会话中运行 `/config defaultToAgentsView=false`。95要在启用该设置的情况下启动常规会话,请传入提示词:`claude "fix the login test"`。要关闭该设置,请在常规会话中或在从 agent view 附加的会话中运行 `/config defaultToAgentsView=false`。

96 96 

97<h2 id="monitor-sessions-with-agent-view">97<h2 id="monitor-sessions-with-agent-view">

98 使用 agent view 监控会话98 使用 agent view 监控会话


419| `@<repo>` | 提及一个仓库以在该处运行会话。请参阅 [分派到特定目录](#dispatch-to-a-specific-directory) 了解会列出哪些仓库 |419| `@<repo>` | 提及一个仓库以在该处运行会话。请参阅 [分派到特定目录](#dispatch-to-a-specific-directory) 了解会列出哪些仓库 |

420| `/<command>` | 建议可作为提示词分派的 [skill](/docs/zh-CN/skills) 和 [命令](/docs/zh-CN/commands) |420| `/<command>` | 建议可作为提示词分派的 [skill](/docs/zh-CN/skills) 和 [命令](/docs/zh-CN/commands) |

421| `! <command>` | 将 shell 命令作为后台作业运行,而不是启动 Claude 会话。该作业显示为一行,您可以附加到它、观察它并从中分离 |421| `! <command>` | 将 shell 命令作为后台作业运行,而不是启动 Claude 会话。该作业显示为一行,您可以附加到它、观察它并从中分离 |

422| `#<number>` 或 Pull Request/合并请求 URL | 如果已有会话在处理该 Pull Request 或 merge request,Claude Code 会选中其行,而不是分派新会话 |422| `#<number>` 或 Pull Request/merge request URL | 如果已有会话在处理该 Pull Request 或 merge request,Claude Code 会选中其行,而不是分派新会话 |

423 423 

424有一小组命令在 Agent 视图本身中运行,而不是分派:424有一小组命令在 Agent 视图本身中运行,而不是分派:

425 425 

amazon-bedrock.md +10 −10

Details

219 凭证缓存和解析超时219 凭证缓存和解析超时

220</h4>220</h4>

221 221 

222Claude Code 解析 AWS 默认凭证提供程序链一次,并将解析的凭证保存在内存中。它重复使用这些凭证,直到它们过期前五分钟,或在没有过期时间时使用一小时,因此 SSO 支持的配置文件大约每个凭证生命周期从 IAM Identity Center 请求一次凭证。来自 API 的凭证错误会清除缓存,重试会解析新凭证。需要 Claude Code v2.1.207 或更高版本。222Claude Code 解析 AWS 默认凭据提供程序链一次,并将解析的凭据保存在内存中。它重复使用这些凭据,直到它们过期前五分钟,或在没有过期时间时使用一小时,因此 SSO 支持的配置文件大约每个凭据生命周期从 IAM Identity Center 请求一次凭据。来自 API 的凭据错误会清除缓存,重试会解析新凭据。

223 223 

224缓存涵盖此步骤开头列出的所有凭据方法,但 Amazon Bedrock API 密钥除外,它不使用提供程序链。要在每个请求上解析链,请改为设置 [`CLAUDE_CODE_SKIP_AWS_CRED_CACHE=1`](/docs/zh-CN/env-vars)。224缓存涵盖此步骤开头列出的所有凭据方法,但 Amazon Bedrock API 密钥除外,它不使用提供程序链。要在每个请求上解析链,请改为设置 [`CLAUDE_CODE_SKIP_AWS_CRED_CACHE=1`](/docs/zh-CN/env-vars)。

225 225 


276 276 

277`Expiration` 是可选的。当命令返回有效的 ISO 8601 `Expiration` 时,Claude Code 会缓存凭证直到该时间前五分钟。没有它,凭证被缓存一小时。277`Expiration` 是可选的。当命令返回有效的 ISO 8601 `Expiration` 时,Claude Code 会缓存凭证直到该时间前五分钟。没有它,凭证被缓存一小时。

278 278 

279当您配置 `awsCredentialExport` 而不配置 `awsAuthRefresh` 时,Claude Code 直接使用导出的凭证,不在启动时重新解析 AWS 默认凭证提供程序链。需要 Claude Code v2.1.206 或更高版本。279当您配置 `awsCredentialExport` 而不配置 `awsAuthRefresh` 时,Claude Code 直接使用导出的凭据,不在启动时重新解析 AWS 默认凭据提供程序链。

280 280 

281<h3 id="3-configure-claude-code">281<h3 id="3-configure-claude-code">

282 3. 配置 Claude Code282 3. 配置 Claude Code


285设置以下环境变量以启用 Amazon Bedrock:285设置以下环境变量以启用 Amazon Bedrock:

286 286 

287```bash theme={null}287```bash theme={null}

288# 启用 Bedrock 集成288# Enable Bedrock integration

289export CLAUDE_CODE_USE_BEDROCK=1289export CLAUDE_CODE_USE_BEDROCK=1

290export AWS_REGION=us-east-1 # 如果您的 AWS 配置文件已设置区域,则可选290export AWS_REGION=us-east-1 # optional if your AWS profile already sets a region

291 291 

292# 可选:覆盖小型/快速模型的 AWS 区域(Bedrock 和 Mantle)。292# Optional: Override the AWS region for the small/fast model (Bedrock and Mantle).

293# 在 Bedrock 上,没有 ANTHROPIC_DEFAULT_HAIKU_MODEL293# On Bedrock, has no effect without ANTHROPIC_DEFAULT_HAIKU_MODEL

294# 或已弃用的 ANTHROPIC_SMALL_FAST_MODEL 设置时无效。294# or the deprecated ANTHROPIC_SMALL_FAST_MODEL set.

295export ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION=us-west-2295export ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION=us-west-2

296 296 

297# 可选:覆盖 Bedrock 端点 URL 以用于自定义端点或网关297# Optional: Override the Bedrock endpoint URL for custom endpoints or gateways

298# export ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com298# export ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com

299```299```

300 300 


358* 要为后台任务使用 Haiku,请将 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 设置为在您的账户中可用的模型 ID。358* 要为后台任务使用 Haiku,请将 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 设置为在您的账户中可用的模型 ID。

359 359 

360<Warning>360<Warning>

361 Opus 模型的每令牌价格高于 Sonnet 模型,因此不固定主要模型的部署在更新到 v2.1.207 或更高版本后将按 Opus 费率计费。要将 Sonnet 4.5 保留为主要模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署保留其引导的 Sonnet 模型作为默认值。361 Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主要模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主要模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署保留其引导的 Sonnet 模型作为默认值。

362</Warning>362</Warning>

363 363 

364在 v2.1.280 之前,Amazon Bedrock 上的主要模型默认为 Opus 5,`opus` 别名从 v2.1.219 解析为 Opus 5。在 v2.1.207 到 v2.1.218 上,Amazon Bedrock 上的主要模型默认为 Opus 4.8,`opus` 别名解析为 Opus 4.8。在 v2.1.207 之前,主要模型默认为 Sonnet 4.5,`opus` 别名解析为 Opus 4.6,后台任务始终使用主要模型。364在 v2.1.280 之前,Amazon Bedrock 上的主要模型默认为 Opus 5,`opus` 别名从 v2.1.219 解析为 Opus 5。在 v2.1.207 到 v2.1.218 上,Amazon Bedrock 上的主要模型默认为 Opus 4.8,`opus` 别名解析为 Opus 4.8。

365 365 

366要进一步自定义模型,请使用以下方法之一:366要进一步自定义模型,请使用以下方法之一:

367 367 

artifacts.md +4 −4

Details

188 188 

189您的[权限模式](/docs/zh-CN/permission-modes)决定了当发送的评论到达时 Claude 的行为:189您的[权限模式](/docs/zh-CN/permission-modes)决定了当发送的评论到达时 Claude 的行为:

190 190 

191* **Claude 自动回复**:当您的权限模式允许 Claude 在不询问您的情况下发布回复时,Claude 读取线程并回复,并在评论要求更改时编辑工件。您会看到`自动回复了工件上的评论线程:<name>`或`自动编辑了工件:<name>以响应评论线程`。191* **Claude 自动回复**:如果您所处的权限模式允许 Claude 在不询问您的情况下发布回复,Claude 会读取线程并回复。您会看到 `Auto-replied to comment thread on Artifact: <name>`。

192* **Claude 等待您**:在计划模式之外,当发布回复需要您的批准时,您会看到`评论正在等待工件:<name>`。Claude 然后要求您批准读取线程,再次批准发布回复。192* **Claude 等待您**:在计划模式之外,当发布回复需要您的批准时,您会看到 `Comments are waiting on Artifact: <name>`。Claude 然后要求您批准读取线程,再次批准发布回复。

193* **Claude 在计划模式中暂停**:您会看到`评论正在等待工件:<name>`,Claude 不会回复,直到您离开计划模式并要求它读取和回复。193* **Claude 在计划模式中暂停**:您会看到 `Comments are waiting on Artifact: <name>`,Claude 不会回复,直到您离开计划模式并要求它读取和回复。

194 194 

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

196 196 

197运行 `/tasks` 查看您的会话正在监视的 Artifact。`/tasks` 会将 Claude Code 自行启动的监视归入 **System tasks** 行下。在该行上按 `Enter` 即可列出它们。您要求 Claude 启动的监视显示在 **Monitors** 下。197运行 `/tasks` 查看您的会话正在监视的 Artifact。`/tasks` 会将 Claude Code 自行启动的监视归入 **System tasks** 行下。在该行上按 `Enter` 即可列出它们。您要求 Claude 启动的监视显示在 **Monitors** 下。

198 198 

chrome.md +1 −1

Details

134在因 [Enabled by default](#enable-chrome-by-default) 已开启而在启动时连接到您浏览器的会话中,在 Manual、Edit automatically、Auto 和 Bypass permissions 模式下,对于您尚未允许的网站,Claude Code 会在浏览器操作前询问您。在 Auto 和 Bypass permissions 模式下,这一行为持续到您在该会话中键入 `@browser` 为止。134在因 [Enabled by default](#enable-chrome-by-default) 已开启而在启动时连接到您浏览器的会话中,在 Manual、Edit automatically、Auto 和 Bypass permissions 模式下,对于您尚未允许的网站,Claude Code 会在浏览器操作前询问您。在 Auto 和 Bypass permissions 模式下,这一行为持续到您在该会话中键入 `@browser` 为止。

135 135 

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

137 Plan Mode 中的浏览器工具137 计划模式中的浏览器工具

138</h3>138</h3>

139 139 

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

Details

784 784 

785| 字段 | 必需 | 描述 |785| 字段 | 必需 | 描述 |

786| - | - | - |786| - | - | - |

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

788 788 

789<h3 id="pricing">789<h3 id="pricing">

790 `pricing`790 `pricing`


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

859 859 

860```yaml theme={null}860```yaml theme={null}

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

862models:862models:

863 - id: claude-opus-4-8863 - id: claude-opus-4-8

864 label: Claude Opus 4.8864 label: Claude Opus 4.8

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

866 upstream_model:866 upstream_model:

867 anthropic: claude-opus-4-8867 anthropic: claude-opus-4-8

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

869 foundry: your-opus-deployment-name869 foundry: your-opus-deployment-name

870```870```

871 871 


1020 policies:1020 policies:

1021 - match: {}1021 - match: {}

1022 cli:1022 cli:

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

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

1025 enforceAvailableModels: true # Default 在列表内解析1025 enforceAvailableModels: true # Default resolves inside the list

1026 1026 

1027 # 权限策略1027 # Permission policy

1028 permissions:1028 permissions:

1029 deny:1029 deny:

1030 - "WebFetch"1030 - "WebFetch"

1031 - "Read(./.env)"1031 - "Read(./.env)"

1032 - "Read(./secrets/**)"1032 - "Read(./secrets/**)"

1033 disableBypassPermissionsMode: disable # 阻止 --dangerously-skip-permissions1033 disableBypassPermissionsMode: disable # blocks --dangerously-skip-permissions

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

1035 1035 

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

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

1038 # 后台更新。1038 # background updates.

1039 env:1039 env:

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

1041 1041 

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

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

1044 hooks:1044 hooks:

1045 PostToolUse:1045 PostToolUse:

1046 - matcher: "Edit|Write"1046 - matcher: "Edit|Write"


1074 1074 

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

1076 1076 

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

1078 1078 

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

1080 1080 


1502```yaml theme={null}1502```yaml theme={null}

1503load_test_mode:1503load_test_mode:

1504 enabled: true1504 enabled: true

1505 reply_tokens: 750 # 大约每个罐装回复携带多少 token 的文本1505 reply_tokens: 750 # roughly how many tokens of text each canned reply carries

1506 reply_seconds: 9.5 # 流回复需要多长时间1506 reply_seconds: 9.5 # how long a streamed reply takes

1507```1507```

1508 1508 

1509| 字段 | 必需 | 描述 |1509| 字段 | 必需 | 描述 |

Details

55 部署55 部署

56</h2>56</h2>

57 57 

58网关是一个单一的无状态 Linux 二进制文件,通过 Postgres 进行协调,因此按照您在环境中部署任何其他无状态服务的方式部署它。将其保持在您的网络内,您的开发者和 IdP 可以通过 HTTPS 到达它,并将其视为任何持有生产凭据的服务。58网关是一个单一的无状态 Linux 二进制文件,通过 Postgres 进行协调,因此按照您在环境中部署任何其他无状态服务的方式部署它。将其保持在您的网络内,让您的开发者可以通过 HTTPS 到达它,且它可以到达您的 IdP,并将网关视为任何持有生产凭据的服务。

59 59 

60除了运行位置外,还有一些决策塑造部署:60除了运行位置外,还有一些决策塑造部署:

61 61 

Details

298 298 

299云会话支持产生文本输出的[内置命令](/docs/zh-CN/commands)。仅在终端界面中运行的命令,如 `/plugin` 或 `/resume`,不可用。在云会话中打开选择器或面板的命令表现不同:299云会话支持产生文本输出的[内置命令](/docs/zh-CN/commands)。仅在终端界面中运行的命令,如 `/plugin` 或 `/resume`,不可用。在云会话中打开选择器或面板的命令表现不同:

300 300 

301* **`/model`、`/effort`、`/color` 和 `/rename`**:将值作为参数传递,例如 `/model sonnet`,而不是打开终端选择器或滑块。参数形式需要会话环境中的 Claude Code v2.1.205 或更高版本,并遵循每个命令的[可用性说明](/docs/zh-CN/commands#all-commands)。301* **`/model`、`/effort`、`/color` 和 `/rename`**:将值作为参数传递,例如 `/model sonnet`,而不是打开终端选择器或滑块。参数形式遵循每个命令的[可用性说明](/docs/zh-CN/commands#all-commands)。

302* **`/fast`**:当快速模式在[你的账户上可用](/docs/zh-CN/fast-mode#requirements)时,为会话切换[快速模式](/docs/zh-CN/fast-mode#use-fast-mode-in-cloud-sessions)。需要会话环境中的 Claude Code v2.1.271 或更高版本。302* **`/fast`**:当快速模式在[你的账户上可用](/docs/zh-CN/fast-mode#requirements)时,为会话切换[快速模式](/docs/zh-CN/fast-mode#use-fast-mode-in-cloud-sessions)。需要会话环境中的 Claude Code v2.1.271 或更高版本。

303* **`/config`**:在你的浏览器中的 claude.ai/code 上,打开你的设置的 Claude Code 部分,而不是设置值,命令后的文本(包括 `key=value`)被忽略。要更改云会话的设置,请在环境上设置[环境变量](/docs/zh-CN/cloud-environments#set-environment-variables),或在具有一个存储库的会话中,将该设置键提交到该存储库的 `.claude/settings.json`。[云会话中的设置](/docs/zh-CN/settings#settings-in-cloud-sessions)列出了每个会话读取的内容。303* **`/config`**:在你的浏览器中的 claude.ai/code 上,打开你的设置的 Claude Code 部分,而不是设置值,命令后的文本(包括 `key=value`)被忽略。要更改云会话的设置,请在环境上设置[环境变量](/docs/zh-CN/cloud-environments#set-environment-variables),或在具有一个存储库的会话中,将该设置键提交到该存储库的 `.claude/settings.json`。[云会话中的设置](/docs/zh-CN/settings#settings-in-cloud-sessions)列出了每个会话读取的内容。

304 304 


420* **隔离的虚拟机**:每个会话在隔离的、Anthropic 管理的 VM 中运行。您的组织路由到[自托管环境](/docs/zh-CN/self-hosted-environments)的会话改为在您自己的基础设施上运行,其中隔离是您的部署的责任420* **隔离的虚拟机**:每个会话在隔离的、Anthropic 管理的 VM 中运行。您的组织路由到[自托管环境](/docs/zh-CN/self-hosted-environments)的会话改为在您自己的基础设施上运行,其中隔离是您的部署的责任

421* <span id="default-allowed-domains" />**网络访问控制**:在 Anthropic 托管的环境中,网络访问默认受限,可以禁用。请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)了解访问级别、[默认允许的域](/docs/zh-CN/cloud-environments#default-allowed-domains)和不通过允许列表的流量。在自托管环境中,您在自己的网络边界处限制会话出口。当在禁用网络访问的情况下运行时,Claude Code 仍然可以与 Anthropic API 通信,这可能允许数据从 VM 中退出。421* <span id="default-allowed-domains" />**网络访问控制**:在 Anthropic 托管的环境中,网络访问默认受限,可以禁用。请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)了解访问级别、[默认允许的域](/docs/zh-CN/cloud-environments#default-allowed-domains)和不通过允许列表的流量。在自托管环境中,您在自己的网络边界处限制会话出口。当在禁用网络访问的情况下运行时,Claude Code 仍然可以与 Anthropic API 通信,这可能允许数据从 VM 中退出。

422* **凭据保护**:在 Anthropic 托管的环境中,git 凭据和签名密钥保持在沙箱外,代理使用作用域凭据代表会话进行身份验证。在自托管环境中,您的部署提供 git 凭据;请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy#configure-git)422* **凭据保护**:在 Anthropic 托管的环境中,git 凭据和签名密钥保持在沙箱外,代理使用作用域凭据代表会话进行身份验证。在自托管环境中,您的部署提供 git 凭据;请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy#configure-git)

423* **网络密钥**:在 Pro 和 Max 计划的 Anthropic 托管环境中,您[添加到云环境](/docs/zh-CN/cloud-environments#add-network-secrets)的密钥以相同的方式保持在沙箱外,在请求离开会话后附加到匹配的请求。自托管环境没有网络密钥,Team 和 Enterprise 计划目前也还没有423* **网络密钥**:在 Anthropic 托管的环境中,您[添加到云环境](/docs/zh-CN/cloud-environments#add-network-secrets)的密钥以相同的方式保持在沙箱外,在请求离开会话后附加到匹配的请求。自托管环境没有网络密钥

424* **安全分析**:代码在会话的隔离环境内分析和修改,然后创建 PR424* **安全分析**:代码在会话的隔离环境内分析和修改,然后创建 PR

425 425 

426<h2 id="troubleshooting">426<h2 id="troubleshooting">


472| 消息 | 含义 |472| 消息 | 含义 |

473| - | - |473| - | - |

474| `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`)。 |474| `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`)。 |

475| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | `allow_remote_sessions` 组织策略已关闭。 |475| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | 您组织的 `allow_remote_sessions` 策略已关闭;请参阅[Cloud sessions are disabled by your organization's policy](/docs/zh-CN/errors#cloud-sessions-are-disabled-by-your-organizations-policy)。如果消息中提到的是此会话正在使用的某个凭据,请参阅[云端会话使用您的 claude.ai 登录](/docs/zh-CN/errors#cloud-sessions-use-your-claude-ai-login)。 |

476| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code 无法获取您组织的策略,因此拒绝发送,而不是假定云端会话已被允许。请检查网络连接并重试。 |476| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code 尚未完成加载您组织的策略,因此拒绝发送,而不是假定云端会话已被允许。请检查网络连接并重试。 |

477| `Cloud sessions aren't available:` 后跟原因 | 加载您组织的策略失败,消息的其余部分说明了失败方式。请根据其中指出的原因采取相应措施;请参阅[Couldn't verify your organization's policy for cloud sessions](/docs/zh-CN/errors#couldnt-verify-your-organizations-policy-for-cloud-sessions)。 |

477| `Attaching to an existing cloud session is not enabled for your account.` | 您在运行 `--cloud <session-id>` 时未带 `-p`。请使用 `claude -p "your message" --cloud <session-id>` 发送消息。 |478| `Attaching to an existing cloud session is not enabled for your account.` | 您在运行 `--cloud <session-id>` 时未带 `-p`。请使用 `claude -p "your message" --cloud <session-id>` 发送消息。 |

478| `Session not found: <id>` | 该 ID 或 URL 与您可以访问的任何会话都不匹配。请对照该会话的 claude.ai/code URL 进行检查。 |479| `Session not found: <id>` | 该 ID 或 URL 与您可以访问的任何会话都不匹配。请对照该会话的 claude.ai/code URL 进行检查。 |

479| `cloud session <id> is archived and cannot accept new messages` | 该会话已归档。请改为启动一个新会话。 |480| `cloud session <id> is archived and cannot accept new messages` | 该会话已归档。请改为启动一个新会话。 |

Details

1525| - | - | - |1525| - | - | - |

1526| `skills/<name>/SKILL.md` | `name`, `description`, `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`, `user-invocable`, `allowed-tools`, `disallowed-tools`, `model`, `effort`, `context`, `agent`, `background`, `hooks`, `paths`, `shell`, `metadata`, `license`, `compatibility` | [Skill frontmatter](/docs/zh-CN/skills#frontmatter-reference) |1526| `skills/<name>/SKILL.md` | `name`, `description`, `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`, `user-invocable`, `allowed-tools`, `disallowed-tools`, `model`, `effort`, `context`, `agent`, `background`, `hooks`, `paths`, `shell`, `metadata`, `license`, `compatibility` | [Skill frontmatter](/docs/zh-CN/skills#frontmatter-reference) |

1527| `commands/*.md` | 除 `name` 和 `paths` 外的 skill 字段 | [Skill frontmatter](/docs/zh-CN/skills#frontmatter-reference) |1527| `commands/*.md` | 除 `name` 和 `paths` 外的 skill 字段 | [Skill frontmatter](/docs/zh-CN/skills#frontmatter-reference) |

1528| `agents/*.md` | `name`, `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `maxTurns`, `skills`, `mcpServers`, `hooks`, `memory`, `background`, `effort`, `isolation`, `color`, `initialPrompt`, `omitClaudeMd`, `experimental` | [Subagent frontmatter](/docs/zh-CN/sub-agents#supported-frontmatter-fields) |1528| `agents/*.md` | `name`, `description`, `tools`, `disallowedTools`, `model`, `permissionMode`, `maxTurns`, `autoCompactWindow`, `skills`, `mcpServers`, `hooks`, `memory`, `background`, `effort`, `isolation`, `color`, `initialPrompt`, `omitClaudeMd`, `experimental` | [子代理 frontmatter](/docs/zh-CN/sub-agents#supported-frontmatter-fields) |

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

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

1531 1531 

Details

291 291 

292AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。292AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。

293 293 

294默认别名 `fable`、`opus`、`sonnet` 和 `haiku` 解析为 Claude Code 为 AWS 上的 Claude Platform 内置的默认值,这些值可能滞后于最新版本。如果没有 `ANTHROPIC_DEFAULT_OPUS_MODEL`,`opus` 别名解析为 Opus 5.5。在 v2.1.280 之前,它解析为从 v2.1.219 开始的 Opus 5,从 v2.1.207 开始的 Opus 4.8,以及在此之前的 Opus 4.7。294默认别名 `fable`、`opus`、`sonnet` 和 `haiku` 解析为 Claude Code 为 AWS 上的 Claude Platform 内置的默认值,这些值可能滞后于最新版本。如果没有 `ANTHROPIC_DEFAULT_OPUS_MODEL`,`opus` 别名解析为 Opus 5.5。在 v2.1.280 之前,它从 v2.1.219 开始解析为 Opus 5,从 v2.1.207 开始解析为 Opus 4.8。

295 295 

296如果您将 Claude Code 部署到团队,请显式固定模型 ID,以便新版本不会一次性移动所有人:296如果您将 Claude Code 部署到团队,请显式固定模型 ID,以便新版本不会一次性移动所有人:

297 297 

Details

414 414 

415* skill、子代理和命令:将它们提交到您已添加到项目的仓库,例如位于 `.claude/skills/<skill-name>/SKILL.md` 的 skill。每个云线程会克隆项目中的每个仓库,并从每个仓库加载 `.claude/skills/`、`.claude/agents/` 和 `.claude/commands/`,因此提交到一个仓库的 skill 在每个云线程中都可用。云线程还会加载[您为 claude.ai 账户启用的 skill](/docs/zh-CN/skills#skills-in-cowork-and-cloud-sessions)。415* skill、子代理和命令:将它们提交到您已添加到项目的仓库,例如位于 `.claude/skills/<skill-name>/SKILL.md` 的 skill。每个云线程会克隆项目中的每个仓库,并从每个仓库加载 `.claude/skills/`、`.claude/agents/` 和 `.claude/commands/`,因此提交到一个仓库的 skill 在每个云线程中都可用。云线程还会加载[您为 claude.ai 账户启用的 skill](/docs/zh-CN/skills#skills-in-cowork-and-cloud-sessions)。

416* 插件:在 **Project settings > Plugins** 中添加它们;它们会加载到每个新云线程中。仓库在其 `.claude/settings.json` 中声明的插件[不会在云线程中加载](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)。416* 插件:在 **Project settings > Plugins** 中添加它们;它们会加载到每个新云线程中。仓库在其 `.claude/settings.json` 中声明的插件[不会在云线程中加载](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)。

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

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

419 419 

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


435| 项目说明 | Memory | [常规规则](#give-a-project-standing-context)每个新线程接收 |435| 项目说明 | Memory | [常规规则](#give-a-project-standing-context)每个新线程接收 |

436| 项目代码库 | Environment | 新线程克隆的代码库 |436| 项目代码库 | Environment | 新线程克隆的代码库 |

437| 云环境 | Environment | 新线程运行的[云环境](#choose-an-environment-for-threads) |437| 云环境 | Environment | 新线程运行的[云环境](#choose-an-environment-for-threads) |

438| Connectors | Environment | 管理 claude.ai connectors 线程获取的链接 |

439| Plugins | Plugins | 加载到每个新线程的 plugins |438| Plugins | Plugins | 加载到每个新线程的 plugins |

440| Usage | Usage | 按线程和按模型的[令牌使用](#usage-and-cost) |439| Usage | Usage | 按线程和按模型的[令牌使用](#usage-and-cost) |

441| Memory | Memory | 项目的[记忆文件](#give-a-project-standing-context) |440| Memory | Memory | 项目的[记忆文件](#give-a-project-standing-context) |

Details

10 云环境适用于[云端会话](/docs/zh-CN/claude-code-on-the-web),这些会话在 Pro、Max 和 Team 计划上可用,以及具有[高级席位或 Chat + Claude Code 席位](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan)的 Enterprise 用户。10 云环境适用于[云端会话](/docs/zh-CN/claude-code-on-the-web),这些会话在 Pro、Max 和 Team 计划上可用,以及具有[高级席位或 Chat + Claude Code 席位](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan)的 Enterprise 用户。

11</Note>11</Note>

12 12 

13每个[云端会话](/docs/zh-CN/claude-code-on-the-web)都在云环境中运行。您可以配置环境以允许或拒绝[网络访问](#access-levels)、为会话[设置环境变量](#set-environment-variables)、在 Pro 和 Max 计划上存储会话使用但无法看到的[网络密钥](#add-network-secrets),以及在 Claude 开始工作前运行[设置脚本](#setup-scripts)。13每个[云端会话](/docs/zh-CN/claude-code-on-the-web)都在云环境中运行。您可以配置环境以允许或拒绝[网络访问](#access-levels)、为会话[设置环境变量](#set-environment-variables)、存储会话使用但无法看到的[网络密钥](#add-network-secrets),以及在 Claude 开始工作前运行[设置脚本](#setup-scripts)。

14 14 

15相同的环境适用于您启动云端会话的任何地方:[Desktop 应用](/docs/zh-CN/desktop)、[Claude 移动应用](/docs/zh-CN/mobile)、浏览器中的 [claude.ai/code](https://claude.ai/code)、终端中搭配 [`claude --cloud`](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)、[Routine](/docs/zh-CN/routines) 和 [Claude Tag](https://claude.com/docs/claude-tag/overview)。这些使用入口中的每一个也可以路由到[自托管环境](/docs/zh-CN/self-hosted-environments)。[可用性和限制](/docs/zh-CN/self-hosted-environments#availability-and-limitations)涵盖了当 Claude Tag 会话在其中运行时 Claude 还不能使用的内容。15相同的环境适用于您启动云端会话的任何地方:[Desktop 应用](/docs/zh-CN/desktop)、[Claude 移动应用](/docs/zh-CN/mobile)、浏览器中的 [claude.ai/code](https://claude.ai/code)、终端中搭配 [`claude --cloud`](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)、[Routine](/docs/zh-CN/routines) 和 [Claude Tag](https://claude.com/docs/claude-tag/overview)。这些使用入口中的每一个也可以路由到[自托管环境](/docs/zh-CN/self-hosted-environments)。[可用性和限制](/docs/zh-CN/self-hosted-environments#availability-and-limitations)涵盖了当 Claude Tag 会话在其中运行时 Claude 还不能使用的内容。

16 16 


44 配置您的环境44 配置您的环境

45</h2>45</h2>

46 46 

47在环境选择器中创建、编辑和归档环境。完成[网页快速入门](/docs/zh-CN/web-quickstart)后,您可以在 [claude.ai/code](https://claude.ai/code) 访问该选择器,也可以从[桌面应用](/docs/zh-CN/desktop#cloud-sessions)的输入框中访问。您创建的环境是您账户的个人环境;由所有者创建的[共享环境](#organization-shared-environments)会出现在同一个选择器中。查看[已安装的工具](#installed-tools),了解无需任何配置即可使用的工具。47在 [claude.ai/code](https://claude.ai/code) 上启动新会话的页面中,通过消息框下方的环境选择器添加、编辑和归档环境。要进入该页面,请完成[网页入门引导](/docs/zh-CN/web-quickstart)。对于桌面应用,请参阅[云端会话](/docs/zh-CN/desktop#cloud-sessions)。您创建的环境是您账户的个人环境;由所有者创建的[共享环境](#organization-shared-environments)会与它们一起出现在选择器中。查看[已安装的工具](#installed-tools),了解无需任何配置即可使用的工具。

48 

49选择器仅在您发送新会话的第一条消息之前显示。要编辑您自己正在运行的云端会话的环境,请选择顶部会话标题后的插入符号,然后选择 **Edit cloud environment**。

48 50 

49<Steps>51<Steps>

50 <Step title="打开环境选择器">52 <Step title="打开环境选择器">

51 在 [claude.ai/code](https://claude.ai/code) 上,选择显示当前环境名称的云图标,它位于消息框上方的行中。选择器没有设置页面或直接 URL。53 在新会话页面上,选择消息框下方行中的第一个控件。

52 

53 <Frame>

54 <img src="https://mintcdn.com/claude-code/ZFId6l95856c5LSw/images/cloud-environment-selector.png?fit=max&auto=format&n=ZFId6l95856c5LSw&q=85&s=cc2813a5664519eaf5a89d793ce5af26" alt="环境选择器在 claude.ai/code 的消息框上方打开。显示环境名称 Default 的云按钮位于消息框上方的行中。打开的菜单列出了一个带有 Download 和 Desktop only 标签的 Local 行、一个 Cloud 部分(其中 Default 环境被选中并显示复选标记,悬停时显示设置齿轮图标)、一个 Add cloud environment 选项,以及一个带有设置说明的 Remote Control 部分。" width="1672" height="682" data-path="images/cloud-environment-selector.png" />

55 </Frame>

56 </Step>54 </Step>

57 55 

58 <Step title="添加或编辑环境">56 <Step title="添加或编辑环境">

59 选择 **Cloud** 来列出您的环境。然后选择 **Add cloud environment**,或悬停在现有环境上并选择右侧出现的设置图标。57 * **添加环境**:选择菜单底部的 **New environment** 以打开 **New environment** 对话框。填写表单并选择 **Add environment**。随后您的新会话将使用您添加的环境。

58 * **编辑环境**:在 **Cloud** 下找到该环境所在的行。如果 **Cloud** 只是单独一行,请选择它以打开列表。如果您的环境未列在 **Cloud** 下,请选择该标题下的 **More** 行。悬停在该环境的行上,然后选择其右侧出现的设置图标以打开其对话框。

60 59 

61 对话框包括名称、网络访问级别、环境变量和设置脚本。当您在 Pro 或 Max 计划上编辑现有的云环境时,对话框还包括[网络机密](#add-network-secrets)。60 对话框包括名称、网络访问级别、环境变量和设置脚本。要存储会话可以使用但无法看到的密钥,请参阅[添加网络机密](#add-network-secrets)。

62 

63 <Frame>

64 <img src="https://mintcdn.com/claude-code/ZFId6l95856c5LSw/images/cloud-environment-dialog.png?fit=max&auto=format&n=ZFId6l95856c5LSw&q=85&s=30d4478b31d1f879f7ee287ddab32505" alt="New cloud environment 对话框。一个占位符为 Default 的 Name 字段;一个设置为 Trusted 的 Network access 选择器,带有网络策略和访问级别的链接;一个 Environment variables 框,显示 .env 格式的占位符文本,并注明值对使用该环境的任何人都可见;一个 Setup script 框,描述为在新会话启动时、Claude Code 启动之前运行的 Bash 脚本;以及 Cancel 和 Create environment 按钮。" width="874" height="1372" data-path="images/cloud-environment-dialog.png" />

65 </Frame>

66 </Step>61 </Step>

67</Steps>62</Steps>

68 63 


91 86 

92云端会话在启动时也会自行设置一些变量。对于 [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/zh-CN/claude-code-on-the-web#manage-context),会话设置的值会覆盖您在这里添加的值,因此在这里添加该键没有效果。87云端会话在启动时也会自行设置一些变量。对于 [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/zh-CN/claude-code-on-the-web#manage-context),会话设置的值会覆盖您在这里添加的值,因此在这里添加该键没有效果。

93 88 

94使用该环境的任何人都可以读取这些值。在 Pro 和 Max 计划上,对于 Agent 代理可以附加到请求中的密钥,请改用[网络机密](#add-network-secrets)。[永远不会获得机密的请求](#requests-that-never-get-the-credential)在该处列出。89使用该环境的任何人都可以读取这些值。在 Anthropic 托管的环境中,对于 Agent 代理可以附加到请求中的密钥,请改用[网络机密](#add-network-secrets)。[永远不会获得机密的请求](#requests-that-never-get-the-credential)在该处列出。

95 90 

96<span id="add-api-credentials" />91<span id="add-api-credentials" />

97 92 


101 96 

102网络机密是您存储在云环境中的 API 密钥或令牌,使 Claude 可以从该环境中的任何会话调用该 API,而无需看到密钥。每个请求离开会话的 VM 后,Anthropic 的 Agent 代理会将密钥添加到发往您所列主机的请求中,因此密钥本身始终位于 VM 之外。97网络机密是您存储在云环境中的 API 密钥或令牌,使 Claude 可以从该环境中的任何会话调用该 API,而无需看到密钥。每个请求离开会话的 VM 后,Anthropic 的 Agent 代理会将密钥添加到发往您所列主机的请求中,因此密钥本身始终位于 VM 之外。

103 98 

104网络机密适用于 Pro 和 Max 计划。它们目前尚不适用于 Team 或 Enterprise 计划,因此在这些计划上,环境对话框中不会出现 **Network secrets** 部分。99网络机密适用于 Pro、Max、Team 和 Enterprise 计划。要确认您是否可以自行添加,请参阅[要求](#requirements)。

105 100 

106<h4 id="requirements">101<h4 id="requirements">

107 要求102 要求


109 104 

110以下要求决定您是否可以添加机密,以及添加后 Agent 代理是否可以使用它:105以下要求决定您是否可以添加机密,以及添加后 Agent 代理是否可以使用它:

111 106 

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

113 * 在 Team 和 Enterprise 上,所有者持有该角色,管理员(Admin)不持有108 * **Enterprise 上您自己的环境**:拥有组织管理员角色时,您可以添加和删除机密。没有该角色时,**Network secrets** 部分会在说明"Only an organization admin can add or delete network secrets"下列出机密,且没有 **Add secret** 或删除按钮。请让所有者将机密添加到[共享环境](#organization-shared-environments),然后在该环境中运行您的会话

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

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

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

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

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


122 118 

123机密需要逐个添加,添加后无法编辑。要更改机密的主机或值,请将其删除后重新添加。119机密需要逐个添加,添加后无法编辑。要更改机密的主机或值,请将其删除后重新添加。

124 120 

121要向[共享环境](#organization-shared-environments)添加机密,请从[管理设置](https://claude.ai/admin-settings)中的 **Cloud environments** 页面打开该环境进行编辑,然后从 **Network secrets** 部分继续执行步骤 1。如果您使用的是 Team 计划且不持有[组织管理员角色](#requirements),请在您自己的环境中执行步骤 1,然后[填写简化表单](#add-a-secret-without-the-role)。

122 

125<Steps>123<Steps>

126 <Step title="打开环境的网络机密">124 <Step title="打开环境的网络机密">

127 在 [claude.ai/code](https://claude.ai/code) [打开环境进行编辑](#configure-your-environment)。在 **Edit environment** 对话框中,找到 **Network secrets** 部分。您会看到环境中已有的机密,每个机密都附有其适用的主机。125 在 [claude.ai/code](https://claude.ai/code) [打开环境进行编辑](#configure-your-environment)。在 **Edit cloud environment** 对话框中,找到 **Network secrets** 部分。您会看到环境中已有的机密,每个机密都附有其适用的主机。

128 </Step>126 </Step>

129 127 

130 <Step title="添加机密">128 <Step title="添加机密">

131 选择 **Add secret** 并填写表单。对于在请求头中传输的 API 密钥,保留默认的 **Credential type**,即 **Bearer**,并填写以下字段:129 选择 **Add secret** 并填写表单。对于在请求头中传输的 API 密钥,保留默认的 **Secret type**,即 **Bearer**,并填写以下字段:

132 130 

133 * **Name**:机密的标签,例如 `Internal billing API`131 * **Name**:机密的标签,例如 `Internal billing API`

134 * **Allowed websites**:API 的主机,例如 `api.example.com`。前导 `*.` 匹配所有子域132 * **Allowed websites**:API 的主机,例如 `api.example.com`。前导 `*.` 匹配所有子域

135 * **Custom headers**:用于携带密钥的请求头占一行。该行默认以 `Authorization` 作为请求头的 **Name**,以 `Bearer` 作为其 **Prefix**;将密钥本身粘贴为 **Value**。对于接受裸值的请求头(如 `X-Api-Key`),请更改名称并清除前缀133 * **Custom headers**:用于携带密钥的请求头占一行。该行默认以 `Authorization` 作为请求头的 **Name**,以 `Bearer` 作为其 **Prefix**;将密钥本身粘贴为 **Value**。对于接受裸值的请求头(如 `X-Api-Key`),请更改名称并清除前缀

136 134 

137 对于以其他方式进行身份验证的 API,请选择不同的 **Credential type**。该列表与 [Claude Tag](https://claude.com/docs/claude-tag/overview)(适用于 Team 和 Enterprise 计划的 Slack 集成)为 [connections](https://claude.com/docs/claude-tag/admins/add-connections) 提供的列表相同。135 对于以其他方式进行身份验证的 API,请选择不同的 **Secret type**。该列表与 [Claude Tag](https://claude.com/docs/claude-tag/overview)(适用于 Team 和 Enterprise 计划的 Slack 集成)为 [connections](https://claude.com/docs/claude-tag/admins/add-connections) 提供的列表相同。

138 </Step>136 </Step>

139 137 

140 <Step title="保存机密">138 <Step title="保存机密">

141 选择 **Connect**。机密会连同其主机一起出现在列表中,无需点击对话框的 **Save changes** 按钮即已保存。保存后您无法再次查看该值。139 选择 **Add**。机密会连同其主机一起出现在列表中,无需点击对话框的 **Save changes** 按钮即已保存。保存后您无法再次查看该值。

142 </Step>140 </Step>

143</Steps>141</Steps>

144 142 

145要确认机密是否有效,请在该环境中启动会话并让 Claude 调用 API,例如使用 `curl`。API 的响应就如同请求中带有密钥一样,而密钥不会出现在会话的环境变量或任何文件中。如果列表将某个机密标记为 **Not sent**,其下方的说明会解释原因和处理方法。两个主机重叠但不完全匹配的机密不会显示标记,而 Agent 代理只会发送其中一个。143要确认机密是否有效,请在该环境中启动会话并让 Claude 调用 API,例如使用 `curl`。API 的响应就如同请求中带有密钥一样,而密钥不会出现在会话的环境变量或任何文件中。如果列表将某个机密标记为 **Not sent**,其下方的说明会解释原因和处理方法。两个主机重叠但不完全匹配的机密不会显示标记,而 Agent 代理只会发送其中一个。

146 144 

145<h4 id="add-a-secret-without-the-role">

146 在没有组织管理员角色的 Team 计划上添加机密

147</h4>

148 

149如果您使用的是 Team 计划且不持有[组织管理员角色](#requirements),**Add secret** 表单只接受针对一个主机的一个机密。在您环境的 [**Network secrets** 部分](#add-a-credential)中选择 **Add secret**,填写以下字段,然后选择表单中的 **Add secret** 按钮:

150 

151* **Host**:获得该机密的唯一主机,例如 `api.example.com`。该表单不接受 `*.` 通配符

152* **Name**:机密的可选标签

153* **Secret type**:对于在请求头中传输的密钥选择 **Token**,或选择 **Username and password**。对于令牌,请将密钥粘贴为 **Value**

154 

147<h4 id="which-requests-get-the-credential">155<h4 id="which-requests-get-the-credential">

148 哪些请求会获得机密156 哪些请求会获得机密

149</h4>157</h4>


175 归档环境183 归档环境

176</h3>184</h3>

177 185 

178要归档您自己的某个环境,请打开它进行编辑并选择 **Archive**。所有者从管理设置中的 **Cloud environments** 页面归档[共享环境](#organization-shared-environments)。您无法删除环境,只能归档它。186要归档您自己的某个环境,请打开它进行编辑,选择 **Archive environment** 并确认。如果该环境已[与您的组织共享](#organization-shared-environments),则改由所有者从[管理设置](https://claude.ai/admin-settings)中的 **Cloud environments** 页面将其归档,因此除非您本身就是所有者,否则请联系所有者。您无法删除环境,只能归档它。

179 187 

180归档影响新会话,不影响运行中的会话:188归档影响新会话,不影响运行中的会话:

181 189 


199 207 

200所有者在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 单独选择组织的[默认环境](#the-default-environment)。208所有者在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 单独选择组织的[默认环境](#the-default-environment)。

201 209 

202每个成员在共享环境中的会话都会读取其变量,因此请勿在其中包含机密信息。[网络机密](#add-network-secrets)可以为会话提供其无法读取的密钥,但目前尚不适用于 Team 或 Enterprise 计划。210要为共享环境的会话提供其无法读取的密钥,请在 **Cloud environments** 页面编辑该环境时添加[网络机密](#add-network-secrets)。请勿在其变量中包含机密信息,因为每个成员的会话都会读取这些变量。

203 211 

204<h3 id="set-the-environment-a-claude-tag-channel-uses">212<h3 id="set-the-environment-a-claude-tag-channel-uses">

205 设置 Claude Tag 频道使用的环境213 设置 Claude Tag 频道使用的环境


216 224 

217每个环境都设置一个网络访问级别,控制其会话可以进行的出站连接。默认级别 **Trusted** 允许包注册表和其他[允许列表中的域](#default-allowed-domains);**Custom** 采用您自己的域列表。225每个环境都设置一个网络访问级别,控制其会话可以进行的出站连接。默认级别 **Trusted** 允许包注册表和其他[允许列表中的域](#default-allowed-domains);**Custom** 采用您自己的域列表。

218 226 

219要更改环境的网络访问,[打开它进行编辑](#configure-your-environment)并在对话框中使用 **Network access** 选择器。[共享环境](#organization-shared-environments)在那里以只读方式打开,因此 Owner 改为从[管理设置](https://claude.ai/admin-settings)中的 **Cloud environments** 页面更改其网络访问。打开选择器的云图标出现在[Default 环境](#the-default-environment)下列出的应用使用入口上,以及 [Routine 编辑器](/docs/zh-CN/routines#environments-and-network-access)中;个人环境在您的 claude.ai 账户设置中没有单独的页面。227要更改环境的网络访问,[打开它进行编辑](#configure-your-environment)并在对话框中使用 **Network access** 选择器。[共享环境](#organization-shared-environments)在那里以只读方式打开,因此 Owner 改为从[管理设置](https://claude.ai/admin-settings)中的 **Cloud environments** 页面更改其网络访问。打开选择器的控件出现在[Default 环境](#the-default-environment)下列出的应用使用入口上,以及 [Routine 编辑器](/docs/zh-CN/routines#environments-and-network-access)中;个人环境在您的 claude.ai 账户设置中没有单独的页面。

220 228 

221当您更改 Anthropic 托管环境的网络访问时,其现有会话在约一分钟内遵循新设置,用于通过会话的[网络允许列表](#access-levels)的请求。您无需启动新会话。229当您更改 Anthropic 托管环境的网络访问时,其现有会话在约一分钟内遵循新设置,用于通过会话的[网络允许列表](#access-levels)的请求。您无需启动新会话。

222 230 


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

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

276* **推送限制**:代理会拒绝分支删除,以及推送分支以外的任何内容(例如标签)。它不限制推送可以更新哪些分支。如需限制,请在 GitHub 上使用分支保护规则或规则集。284* **推送限制**:代理会拒绝分支删除,以及推送分支以外的任何内容(例如标签)。它不限制推送可以更新哪些分支。如需限制,请在 GitHub 上使用分支保护规则或规则集。

277* **仓库范围**:代理为附加到会话的仓库处理 GitHub API 请求。针对其他仓库的 API 请求会收到 403,其消息以 `GitHub access to` 开头并包含 `is not enabled for this session`。285* **仓库范围**:代理为附加到会话的仓库处理 GitHub API 请求。针对其他仓库的 API 请求会收到 403,其消息以 `GitHub access to` 开头并包含 `is not enabled for this session`。当仓库未附加时,您通过 `github.com/{owner}/{repo}/archive/` 或 `codeload.github.com` URL 获取的源代码归档也会收到相同的 403,即使是公开仓库也是如此。

278* **GraphQL 限制**:代理会拒绝发往 GitHub GraphQL 端点的请求,返回 403,其消息以 `GitHub GraphQL is not available from Claude Code sessions` 开头,并指明 REST 回退方式 `gh api repos/{owner}/{repo}/...`。使用 GraphQL 的 `gh` 子命令(例如 `gh pr` 和 `gh issue`)也会收到相同的 403。无论您提供的凭据如何,限制都适用于通过代理的每个请求,因此您设置的 `GH_TOKEN` 会收到相同的 403。Claude 无法通过代理访问仅存在于 GraphQL 中的 GitHub API,例如 Projects v2。286* **GraphQL 限制**:代理会拒绝发往 GitHub GraphQL 端点的请求,返回 403,其消息以 `GitHub GraphQL is not available from Claude Code sessions` 开头,并指明 REST 回退方式 `gh api repos/{owner}/{repo}/...`。使用 GraphQL 的 `gh` 子命令(例如 `gh pr` 和 `gh issue`)也会收到相同的 403。无论您提供的凭据如何,限制都适用于通过代理的每个请求,因此您设置的 `GH_TOKEN` 会收到相同的 403。Claude 无法通过代理访问仅存在于 GraphQL 中的 GitHub API,例如 Projects v2。

279 287 

280来自公开仓库的已提交文件通过 `raw.githubusercontent.com` 到达,改由[安全代理](#security-proxy)处理。该域在默认 [Trusted 列表](#default-allowed-domains)中,因此除非环境的[访问级别](#access-levels)排除它,否则这些文件保持可访问。288来自公开仓库的已提交文件通过 `raw.githubusercontent.com` 到达,改由[安全代理](#security-proxy)处理。该域在默认 [Trusted 列表](#default-allowed-domains)中,因此除非环境的[访问级别](#access-levels)排除它,否则这些文件保持可访问。


318| 仅在您的用户设置中启用的插件 | 否 | 用户作用域的 `enabledPlugins` 位于您机器上的 `~/.claude/settings.json` |326| 仅在您的用户设置中启用的插件 | 否 | 用户作用域的 `enabledPlugins` 位于您机器上的 `~/.claude/settings.json` |

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

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

321| Claude 调用的服务的 API 密钥和令牌 | 在 Pro 和 Max 计划中,作为[网络密钥](#add-network-secrets) | 您在环境中添加一次密钥,Agent 代理会将其附加到发往您列出的主机的请求。Agent 代理[无法附加](#requests-that-never-get-the-credential)的密钥,或 Team 或 Enterprise 计划中的任何密钥,保留在环境变量中 |329| Claude 调用的服务的 API 密钥和令牌 | 在 Anthropic 托管的环境中,作为[网络密钥](#add-network-secrets) | 您在环境中添加一次密钥,Agent 代理会将其附加到发往您列出的主机的请求。Agent 代理[无法附加](#requests-that-never-get-the-credential)的密钥保留在环境变量中 |

322| 交互式身份验证,例如 AWS SSO | 否 | 不支持。SSO 需要基于浏览器的登录,无法在云端会话中执行 |330| 交互式身份验证,例如 AWS SSO | 否 | 不支持。SSO 需要基于浏览器的登录,无法在云端会话中执行 |

323 331 

324要在云端会话中提供您自己的配置,请将其提交到仓库。332要在云端会话中提供您自己的配置,请将其提交到仓库。

325 333 

326任何使用环境的人都可以读取其环境变量和设置脚本。对话框在**环境变量**下的注释说明了这一点,并警告不要在那里放置密钥。在 Pro 和 Max 计划中,请改为将 Agent 代理可以附加的密钥存储为[网络密钥](#add-network-secrets)。334任何使用环境的人都可以读取其环境变量和设置脚本。对话框在**环境变量**下的注释说明了这一点,并警告不要在那里放置密钥。在 Anthropic 托管的环境中,请改为将 Agent 代理可以附加的密钥存储为[网络密钥](#add-network-secrets)。

327 335 

328<h4 id="add-personal-preferences-without-committing-to-the-repo">336<h4 id="add-personal-preferences-without-committing-to-the-repo">

329 添加个人偏好而无需提交到仓库337 添加个人偏好而无需提交到仓库

code-review.md +0 −2

Details

155* 您必须对存储库具有写入、维护或管理员权限155* 您必须对存储库具有写入、维护或管理员权限

156* PR 必须打开156* PR 必须打开

157 157 

158如果存储库属于某个组织,且您在该组织中的成员身份是私密的(这是 GitHub 的默认设置),GitHub 不会将您标识为 Claude 的成员。Claude 可能仍会用 👀 对您的评论做出反应,但除非您被直接添加到存储库作为协作者,否则它不会启动审查,即使团队或组织的基础权限给予您写入访问权限。要解决此问题,[公开您的组织成员身份](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership)或要求存储库管理员将您添加到存储库作为协作者。

159 

160与自动触发不同,手动触发在草稿 PR 上运行,因为显式请求表示您想要现在的审查,无论草稿状态如何。158与自动触发不同,手动触发在草稿 PR 上运行,因为显式请求表示您想要现在的审查,无论草稿状态如何。

161 159 

162如果该 PR 上已有审查正在运行,请求将排队等待进行中的审查完成。您可以通过 PR 上的检查运行监控进度。160如果该 PR 上已有审查正在运行,请求将排队等待进行中的审查完成。您可以通过 PR 上的检查运行监控进度。

commands.md +6 −6

Details

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

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

69| `/bug [report]` | 报告 bug 或分享您的对话。您可以选择包含多少会话历史,并在发送任何内容之前在同意屏幕上确认。当您通过第一方连接登录 Anthropic 时,报告会发送给 Anthropic;在第三方提供商上,或没有 Anthropic 凭据时,Claude Code 会将报告写入[位于 `~/.claude/feedback-bundles/` 下的本地归档](/docs/zh-CN/data-usage#telemetry-services),由您自行转发。在 [VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)中,`/bug` 会改为打开扩展自己的反馈对话框;需要 Claude Code v2.1.229 或更高版本。如果在 Claude 回复时运行此命令,Claude Code 会立即打开对话框。在 v2.1.232 之前,Claude Code 会将该命令排队,直到该轮次结束。别名:`/share`。在 v2.1.212 之前,`/bug` 和 `/share` 是 `/feedback` 的别名 |69| `/bug [report]` | 报告 bug 或分享您的对话。您可以选择包含多少会话历史,并在发送任何内容之前在同意屏幕上确认。当您通过第一方连接登录 Anthropic 时,报告会发送给 Anthropic;在第三方提供商上,或没有 Anthropic 凭据时,Claude Code 会将报告写入[位于 `~/.claude/feedback-bundles/` 下的本地归档](/docs/zh-CN/data-usage#telemetry-services),由您自行转发。在 [VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)中,`/bug` 会改为打开扩展自己的反馈对话框;需要 Claude Code v2.1.229 或更高版本。如果在 Claude 回复时运行此命令,Claude Code 会立即打开对话框。在 v2.1.232 之前,Claude Code 会将该命令排队,直到该轮次结束。别名:`/share`。在 v2.1.212 之前,`/bug` 和 `/share` 是 `/feedback` 的别名 |

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

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

72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载适用于您项目语言的 [Claude API](https://platform.claude.com/docs/en/api/overview) 和 [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) 参考资料。当您的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。有关每个子命令的作用及其所需版本,请参阅[处理 Claude API 项目](/docs/zh-CN/skills#work-on-claude-api-projects) |72| `/claude-api [migrate\|upgrade\|managed-agents-onboard\|prompt-audit\|cost-optimize\|build-eval\|hillclimb\|preserved-thinking-migration]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 加载适用于您项目语言的 [Claude API](https://platform.claude.com/docs/en/api/overview) 和 [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) 参考资料。当您的代码导入 `anthropic` 或 `@anthropic-ai/sdk` 时也会自动激活。有关每个子命令的作用及其所需版本,请参阅[处理 Claude API 项目](/docs/zh-CN/skills#work-on-claude-api-projects) |

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

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

75| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查当前 diff,或您传递的 PR 编号、分支或路径,查找正确性 bug。根据您的模型和 effort 级别,审查还会涵盖清理机会。传递 `--fix` 可应用发现的问题,传递 `--comment` 可将其发布到 GitHub PR 或 GitLab Merge Request 上,传递 `ultra` 可运行深度[云端审查](/docs/zh-CN/ultrareview)。发布到 GitLab Merge Request 需要 Claude Code v2.1.257 或更高版本。在以 `github.com` PR 为目标使用 `ultra` 时,传递 `--post` 可在启动对话框中预先选择[将完成的发现发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request);`--post` 需要 Claude Code v2.1.227 或更高版本。有关 effort 级别、目标指定方式以及它与 `/simplify` 的关系,请参阅[在本地审查 diff](/docs/zh-CN/code-review#review-a-diff-locally)。别名:`/review` |75| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 审查当前 diff,或您传递的 PR 编号、分支或路径,查找正确性 bug。根据您的模型和 effort 级别,审查还会涵盖清理机会。传递 `--fix` 可应用发现的问题,传递 `--comment` 可将其发布到 GitHub PR 或 GitLab Merge Request 上,传递 `ultra` 可运行深度[云端审查](/docs/zh-CN/ultrareview)。发布到 GitLab Merge Request 需要 Claude Code v2.1.257 或更高版本。在以 `github.com` PR 为目标使用 `ultra` 时,传递 `--post` 可在启动对话框中预先选择[将完成的发现发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request);`--post` 需要 Claude Code v2.1.227 或更高版本。有关 effort 级别、目标指定方式以及它与 `/simplify` 的关系,请参阅[在本地审查 diff](/docs/zh-CN/code-review#review-a-diff-locally)。别名:`/review` |

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

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

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

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


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

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

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

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

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

96| `/fewer-permission-prompts` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 扫描您的会话记录,查找常见的只读 Bash 和 MCP 工具调用,然后将按优先级排序的允许列表添加到项目的 `.claude/settings.json` 中,以减少权限提示 |96| `/fewer-permission-prompts` | **[Skill](/docs/zh-CN/skills#bundled-skills)。** 扫描您的会话记录,查找常见的只读 Bash 和 MCP 工具调用,然后将按优先级排序的允许列表添加到项目的 `.claude/settings.json` 中,以减少权限提示 |

97| `/focus` | 切换专注视图,该视图仅显示您的最后一条提示词、带有编辑 diffstat 的单行工具调用摘要以及最终回复。工具调用摘要还会统计该轮次中启动的子代理数量,并将已完成的后台任务通知合并为单个计数。该选择会跨会话保持;在设置中设置 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 可覆盖它。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用。在 [Remote Control](/docs/zh-CN/remote-control) 客户端中,运行 `/focus [on\|off]` 可仅为当前会话开启或关闭专注视图,而不更改您保存的选择;这需要 Claude Code v2.1.281 或更高版本。[VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)提供其自己的 Focus 视图,作为命令菜单中的开关,存储为扩展设置,独立于 `viewMode` |97| `/focus` | 切换专注视图,该视图仅显示您的最后一条提示词、带有编辑 diffstat 的单行工具调用摘要以及最终回复。工具调用摘要还会统计该轮次中启动的子代理数量,并将已完成的后台任务通知合并为单个计数。该选择会跨会话保持;在设置中设置 [`viewMode`](/docs/zh-CN/settings-reference#viewmode) 可覆盖它。仅在[全屏渲染](/docs/zh-CN/fullscreen)中可用。在 [Remote Control](/docs/zh-CN/remote-control) 客户端中,运行 `/focus [on\|off]` 可仅为当前会话开启或关闭专注视图,而不更改您保存的选择;这需要 Claude Code v2.1.281 或更高版本。[VS Code 扩展](/docs/zh-CN/vs-code#use-the-prompt-box)提供其自己的 Focus 视图,作为命令菜单中的开关,存储为扩展设置,独立于 `viewMode` |


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

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

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

114| `/mcp [reconnect (<server>\|all)\|enable\|disable [<server>\|all]]` | 管理 MCP 服务器连接和 OAuth 身份验证。不带参数运行可打开交互式列表,或传递 `reconnect`、`enable` 或 `disable` 以及服务器名称或 `all`,可在不打开列表的情况下更改连接状态。`reconnect all` 会[重试每个失败或需要身份验证的服务器](/docs/zh-CN/mcp#retry-failed-servers-yourself)。在非交互模式(`-p`)中,不带参数运行会输出服务器状态的文本摘要,而不是打开列表;需要 Claude Code v2.1.205 或更高版本 |114| `/mcp [reconnect (<server>\|all)\|enable\|disable [<server>\|all]]` | 管理 MCP 服务器连接和 OAuth 身份验证。不带参数运行可打开交互式列表,或传递 `reconnect`、`enable` 或 `disable` 以及服务器名称或 `all`,可在不打开列表的情况下更改连接状态。`reconnect all` 会[重试每个失败或需要身份验证的服务器](/docs/zh-CN/mcp#retry-failed-servers-yourself)。在非交互模式(`-p`)中,不带参数运行会输出服务器状态的文本摘要,而不是打开列表 |

115| `/memory` | 编辑 `CLAUDE.md` 文件,启用或禁用[自动记忆](/docs/zh-CN/memory#auto-memory),并查看自动记忆条目 |115| `/memory` | 编辑 `CLAUDE.md` 文件,启用或禁用[自动记忆](/docs/zh-CN/memory#auto-memory),并查看自动记忆条目 |

116| `/mobile` | 显示用于下载 Claude 移动应用的二维码。别名:`/ios`、`/android` |116| `/mobile` | 显示用于下载 Claude 移动应用的二维码。别名:`/ios`、`/android` |

117| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认模型。对于支持的模型,使用左/右箭头[调整 effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。不带参数时,打开选择器;在某一行上按 `s` 可仅为当前会话切换。请参阅 [Claude Code 何时会要求您确认切换](/docs/zh-CN/prompt-caching#switching-models)。一旦您确认切换(如果 Claude Code 询问),Claude Code 会应用更改,而无需等待当前回复完成。在 v2.1.242 之前,Claude Code 会根据从 Anthropic 获取的功能标志来决定是在轮次中途运行该命令,还是将其排队直到轮次结束,并且在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中(例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上)始终将其排队。也可在非交互模式(`-p`)中通过模型参数(而非选择器)使用,此时仅应用于当前会话,不会保存为默认模型;需要 Claude Code v2.1.205 或更高版本 |117| `/model [model]` | 切换 AI 模型并将其保存为新会话的默认模型。对于支持的模型,使用左/右箭头[调整 effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。不带参数时,打开选择器;在某一行上按 `s` 可仅为当前会话切换。请参阅 [Claude Code 何时会要求您确认切换](/docs/zh-CN/prompt-caching#switching-models)。一旦您确认切换(如果 Claude Code 询问),Claude Code 会应用更改,而无需等待当前回复完成。在 v2.1.242 之前,Claude Code 会根据从 Anthropic 获取的功能标志来决定是在轮次中途运行该命令,还是将其排队直到轮次结束,并且在不[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中(例如在[第三方提供商](/docs/zh-CN/third-party-integrations)上)始终将其排队。也可在非交互模式(`-p`)中通过模型参数(而非选择器)使用,此时仅应用于当前会话,不会保存为默认模型;需要 Claude Code v2.1.205 或更高版本 |


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

131| `/reload-plugins [--force]` | 重新加载所有活动[插件](/docs/zh-CN/plugins/overview)以应用待处理的更改,无需重启。报告每个重新加载组件的数量,并标记任何加载错误。当重新加载会改变已加载的 MCP 工具并使提示缓存失效时,该命令会发出警告并跳过,除非您传递 `--force`。也可在非交互模式(`-p`)、Agent SDK 和桌面应用中使用,在这些环境中它仅对直接输入到会话中的内容运行,并且不会应用插件 MCP 服务器的更改;需要 Claude Code v2.1.260 或更高版本。请参阅[无需重启即可应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins) |131| `/reload-plugins [--force]` | 重新加载所有活动[插件](/docs/zh-CN/plugins/overview)以应用待处理的更改,无需重启。报告每个重新加载组件的数量,并标记任何加载错误。当重新加载会改变已加载的 MCP 工具并使提示缓存失效时,该命令会发出警告并跳过,除非您传递 `--force`。也可在非交互模式(`-p`)、Agent SDK 和桌面应用中使用,在这些环境中它仅对直接输入到会话中的内容运行,并且不会应用插件 MCP 服务器的更改;需要 Claude Code v2.1.260 或更高版本。请参阅[无需重启即可应用插件更改](/docs/zh-CN/plugins/cli-reference#reload-plugins) |

132| `/reload-skills` | 重新扫描 [skill](/docs/zh-CN/skills) 和命令目录,使会话期间在磁盘上添加或更改的 skill 无需重启即可使用。报告可用的 skill 数量以及添加或移除的数量 |132| `/reload-skills` | 重新扫描 [skill](/docs/zh-CN/skills) 和命令目录,使会话期间在磁盘上添加或更改的 skill 无需重启即可使用。报告可用的 skill 数量以及添加或移除的数量 |

133| `/remote-control` | 使此会话可通过 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行,会输出 Remote Control 需要 claude.ai 订阅的提示,并告诉您如何登录;在 v2.1.206 之前,它会报告 `Unknown command: /remote-control`。别名:`/rc` |133| `/remote-control` | 使此会话可通过 claude.ai 进行 [Remote Control](/docs/zh-CN/remote-control)。在未登录时运行,会输出 Remote Control 需要 claude.ai 订阅的提示,并告诉您如何登录。别名:`/rc` |

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

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

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

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

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

Details

419 * 您可以在单个消息中引用多个文件(例如,"@file1.js and @file2.js")419 * 您可以在单个消息中引用多个文件(例如,"@file1.js and @file2.js")

420</Tip>420</Tip>

421 421 

422若要阻止 `@` 引用在消息中包含文件内容和目录列表,请在 shell 或用户设置中设置 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/zh-CN/env-vars#variables)。随后 Claude 会收到您引用的路径,并附带一条说明,提示它使用其文件工具读取这些路径。该变量需要 Claude Code v2.1.299 或更高版本,并且 Claude Code 会在项目设置和本地设置中忽略它。

423 

422***424***

423 425 

424<h3 id="run-claude-on-a-schedule">426<h3 id="run-claude-on-a-schedule">

Details

1602| 系统提示词和输出样式 | 两者仍然适用 |1602| 系统提示词和输出样式 | 两者仍然适用 |

1603| 项目根目录 CLAUDE.md 和无范围规则 | 从磁盘重新注入 |1603| 项目根目录 CLAUDE.md 和无范围规则 | 从磁盘重新注入 |

1604| 自动记忆 | 从磁盘重新注入 |1604| 自动记忆 | 从磁盘重新注入 |

1605| [Git 状态快照](/docs/zh-CN/settings-reference#includegitinstructions) | Claude Code 从您的仓库读取一个新的 |1605| [Git 状态快照](/docs/zh-CN/settings-reference#includegitinstructions) | 如果会话开始时包含快照,Claude Code 会从您的仓库读取一个新的 |

1606| Claude 在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)中编写的计划 | 从磁盘重新注入 |1606| Claude 在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)中编写的计划 | 从磁盘重新注入 |

1607| 带有 `paths:` frontmatter 的规则 | Claude Code [按需](/docs/zh-CN/memory#path-specific-rules)重新加载它们 |1607| 带有 `paths:` frontmatter 的规则 | Claude Code [按需](/docs/zh-CN/memory#path-specific-rules)重新加载它们 |

1608| 子目录中的嵌套 CLAUDE.md | Claude Code [按需](/docs/zh-CN/memory#how-claude-md-files-load)重新加载它们 |1608| 子目录中的嵌套 CLAUDE.md | Claude Code [按需](/docs/zh-CN/memory#how-claude-md-files-load)重新加载它们 |


1622 当您的上下文填满时1622 当您的上下文填满时

1623</h2>1623</h2>

1624 1624 

1625Claude Code 在您接近限制时自动压缩,因此完整的上下文窗口不会结束您的会话。自动传递的工作方式与时间线中的 `/compact` 步骤相同。有关它保留的内容,请参阅[当上下文填满时](/docs/zh-CN/how-claude-code-works#when-context-fills-up)。1625Claude Code 在您接近限制时自动压缩,因此完整的上下文窗口不会结束您的会话。自动传递的工作方式与时间线中的 `/compact` 步骤相同。有关它保留的内容,请参阅[当上下文填满时](/docs/zh-CN/how-claude-code-works#when-context-fills-up)。有关 Claude Code 何时还会压缩您闲置的对话,请参阅[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction)。

1626 1626 

1627您也可以在自动传递运行之前采取行动:1627您也可以在自动传递运行之前采取行动:

1628 1628 

Details

128* **容忍从内部调用自己。** Claude Code 将启动器应用于每个嵌套的自生成,因此获取独占资源的启动器必须检测它是否已持有它。128* **容忍从内部调用自己。** Claude Code 将启动器应用于每个嵌套的自生成,因此获取独占资源的启动器必须检测它是否已持有它。

129* **不要在 Claude Code 启动前写入终端。** 在 `exec` 前打印的任何内容都会在会话在初始化前死亡时报告为崩溃原因。129* **不要在 Claude Code 启动前写入终端。** 在 `exec` 前打印的任何内容都会在会话在初始化前死亡时报告为崩溃原因。

130* **不要依赖参数的书写方式。** 标志的值可能作为独立参数传入(`--flag value`),也可能与标志连在一起(`--flag=value`)。标志使用哪种形式可能会在不同版本之间发生变化。130* **不要依赖参数的书写方式。** 标志的值可能作为独立参数传入(`--flag value`),也可能与标志连在一起(`--flag=value`)。标志使用哪种形式可能会在不同版本之间发生变化。

131* **从启动器启动时所在的目录运行 `exec`。** Claude Code 在其启动时所在的目录中工作,因此更改目录的启动器可能会在错误的项目中启动会话。如果启动器必须进入重置工作目录的命名空间或沙箱,请在其内部、`exec` 之前切换回起始目录。

131 132 

132<h3 id="format-of-the-launcher-value">133<h3 id="format-of-the-launcher-value">

133 启动器值的格式134 启动器值的格式

Details

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

171| Skill 出现在 `/skills` 中但 Claude 从不调用它 | Skill 在其 frontmatter 中有 `disable-model-invocation: true`,或其描述与你表述请求的方式不匹配 | 检查 `/skills` 中的徽章:一个"user-only"标签意味着 Claude 不会自动触发它。请参阅[skill 调用](/docs/zh-CN/skills)。 |171| Skill 出现在 `/skills` 中但 Claude 从不调用它 | Skill 在其 frontmatter 中有 `disable-model-invocation: true`,或其描述与你表述请求的方式不匹配 | 检查 `/skills` 中的徽章:一个"user-only"标签意味着 Claude 不会自动触发它。请参阅[skill 调用](/docs/zh-CN/skills)。 |

172| 子目录 `CLAUDE.md` 指令似乎被忽略 | 子目录文件按需加载,而不是在会话开始时加载 | 要加载子目录的 `CLAUDE.md`,请让 Claude 读取该子目录中的另一个文件。请参阅[子目录文件何时加载](/docs/zh-CN/memory#how-claude-md-files-load)。 |172| 子目录 `CLAUDE.md` 指令似乎被忽略 | 子目录文件按需加载,而不是在会话开始时加载 | 要加载子目录的 `CLAUDE.md`,请让 Claude 读取该子目录中的另一个文件。请参阅[子目录文件何时加载](/docs/zh-CN/memory#how-claude-md-files-load)。 |

173| 子代理忽略 `CLAUDE.md` 指令 | 内置的 Explore 和 Plan 代理跳过 `CLAUDE.md`。自定义子代理以与主对话相同的方式加载它,除非其定义设置了 [`omitClaudeMd`](/docs/zh-CN/sub-agents#supported-frontmatter-fields) | 对于 Explore 或 Plan,在你的委派提示中重新陈述指令。对于设置 `omitClaudeMd` 的子代理,删除该字段。对于任何其他自定义子代理,将关键指令放在代理文件体中,它成为代理的系统提示。请参阅[启动时加载的内容](/docs/zh-CN/sub-agents#what-loads-at-startup)。 |173| 子代理忽略 `CLAUDE.md` 指令 | 内置的 Explore 和 Plan Agent 在启动时跳过 `CLAUDE.md`。自定义子代理以与主对话相同的方式加载它,除非其定义设置了 [`omitClaudeMd`](/docs/zh-CN/sub-agents#supported-frontmatter-fields) | 对于 Explore 或 Plan,在您的委派提示词中重新陈述指令。对于设置 `omitClaudeMd` 的子代理,删除该字段。对于任何其他自定义子代理,将关键指令放在 Agent 文件正文中,它将成为 Agent 的系统提示词。请参阅[启动时加载的内容](/docs/zh-CN/sub-agents#what-loads-at-startup)。 |

174| 清理逻辑在会话结束时永远不运行 | 没有配置 `SessionEnd` hook | 在 `settings.json` 中添加 `SessionEnd` hook。请参阅[hook 事件列表](/docs/zh-CN/hooks#hook-events)。 |174| 清理逻辑在会话结束时永远不运行 | 没有配置 `SessionEnd` hook | 在 `settings.json` 中添加 `SessionEnd` hook。请参阅[hook 事件列表](/docs/zh-CN/hooks#hook-events)。 |

175| `.mcp.json` 中的 MCP 服务器永远不加载 | 文件在 `.claude/` 下,或其服务器位于顶级 `servers` 键下,如 VS Code 的 `mcp.json` 中那样,而不是 `mcpServers` | 项目 MCP 配置在存储库根目录下作为 `.mcp.json`,而不是在 `.claude/` 内,服务器位于 `mcpServers` 键下。请参阅[MCP 配置](/docs/zh-CN/mcp)。 |175| `.mcp.json` 中的 MCP 服务器永远不加载 | 文件在 `.claude/` 下,或其服务器位于顶级 `servers` 键下,如 VS Code 的 `mcp.json` 中那样,而不是 `mcpServers` | 项目 MCP 配置在存储库根目录下作为 `.mcp.json`,而不是在 `.claude/` 内,服务器位于 `mcpServers` 键下。请参阅[MCP 配置](/docs/zh-CN/mcp)。 |

176| 在 `settings.json` 中的 `mcpServers` 下添加的 MCP 服务器永远不出现 | `settings.json` 不读取 `mcpServers` 键 | 在存储库根目录的 `.mcp.json` 中定义项目服务器,或运行 `claude mcp add --scope user` 来添加用户范围的服务器。请参阅[MCP 配置](/docs/zh-CN/mcp)。 |176| 在 `settings.json` 中的 `mcpServers` 下添加的 MCP 服务器永远不出现 | `settings.json` 不读取 `mcpServers` 键 | 在存储库根目录的 `.mcp.json` 中定义项目服务器,或运行 `claude mcp add --scope user` 来添加用户范围的服务器。请参阅[MCP 配置](/docs/zh-CN/mcp)。 |

desktop.md +134 −10

Details

101| **Accept edits** | `acceptEdits` | Claude 自动接受文件编辑和常见的文件系统命令,如 `mkdir`、`touch` 和 `mv`,但在运行其他终端命令之前仍会询问。当您信任文件更改并希望更快迭代时,请使用此选项。 |101| **Accept edits** | `acceptEdits` | Claude 自动接受文件编辑和常见的文件系统命令,如 `mkdir`、`touch` 和 `mv`,但在运行其他终端命令之前仍会询问。当您信任文件更改并希望更快迭代时,请使用此选项。 |

102| **Plan** | `plan` | Claude 读取文件并运行命令进行探索,然后提出计划而不编辑您的源代码。适合复杂任务,您想先审查方法。 |102| **Plan** | `plan` | Claude 读取文件并运行命令进行探索,然后提出计划而不编辑您的源代码。适合复杂任务,您想先审查方法。 |

103| **Auto** | `auto` | Claude 运行时不需要常规提示;在执行 shell 命令和网络请求等操作之前,后台分类器会检查它们是否与您的请求一致。当[自动模式可用](#auto-mode-availability)时出现;没有单独的设置切换。 |103| **Auto** | `auto` | Claude 运行时不需要常规提示;在执行 shell 命令和网络请求等操作之前,后台分类器会检查它们是否与您的请求一致。当[自动模式可用](#auto-mode-availability)时出现;没有单独的设置切换。 |

104| **Bypass permissions** | `bypassPermissions` | Claude 运行时不需要权限提示,除了[任何模式都不会自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)、当 Claude [在外部网站上操作](#browse-external-sites)时的安全分类器,或桌面操作(Claude 总是首先询问),例如[归档会话](#work-across-sessions)。等同于 CLI 中的 `--dangerously-skip-permissions`。在 Pro 和 Max 计划上,在您的设置 → Claude Code 中启用它,在"Allow bypass permissions mode"下;在 Team 和 Enterprise 计划上没有设置切换,由组织策略控制它。仅在沙箱容器或虚拟机中使用。 |104| **Bypass permissions** | `bypassPermissions` | Claude 运行时不需要权限提示,除了[任何模式都不会自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)、当 Claude [在外部网站上操作](#browse-external-sites)时的安全分类器,或删除会话等桌面操作(但[归档会话](#work-across-sessions)不在此列)。等同于 CLI 中的 `--dangerously-skip-permissions`。在 Pro 和 Max 计划上,在您的设置 → Claude Code 中启用它,在"Allow bypass permissions mode"下;在 Team 和 Enterprise 计划上没有设置切换,由组织策略控制它。仅在沙箱容器或虚拟机中使用。 |

105 105 

106Code 选项卡的早期版本将这些模式标记为 Ask permissions、Auto accept edits 和 Plan mode。106Code 选项卡的早期版本将这些模式标记为 Ask permissions、Auto accept edits 和 Plan mode。

107 107 


131 131 

132浏览器窗格也可以打开项目中的静态 HTML 文件、PDF、图像和视频。在聊天中点击 HTML、PDF、图像或视频路径以在那里打开它。132浏览器窗格也可以打开项目中的静态 HTML 文件、PDF、图像和视频。在聊天中点击 HTML、PDF、图像或视频路径以在那里打开它。

133 133 

134<Note>

135 在 [SSH 会话](#ssh-sessions)中,Claude 无法在浏览器窗格中打开您的应用,因为它在那里没有该窗格的工具。要自己查看应用,请[将其端口转发到您的计算机](#reach-a-port-on-the-remote-machine)。

136</Note>

137 

134从浏览器窗格,您可以:138从浏览器窗格,您可以:

135 139 

136* 直接在浏览器窗格中与运行的应用交互140* 直接在浏览器窗格中与运行的应用交互


218 222 

219<Note>223<Note>

220 PR 监控需要在您的机器上安装并认证 [GitHub CLI (`gh`)](https://cli.github.com/)。如果未安装 `gh`,Desktop 会在您第一次尝试创建 PR 时提示您安装它。224 PR 监控需要在您的机器上安装并认证 [GitHub CLI (`gh`)](https://cli.github.com/)。如果未安装 `gh`,Desktop 会在您第一次尝试创建 PR 时提示您安装它。

225 

226 在 [SSH 会话](#ssh-sessions)中,请在点击 **Create PR** 之前在远程机器上设置好 `git` 和 `gh`,因为 Claude 会在那里推送分支并运行 `gh pr create`。请自行在那里安装 `gh`,因为 Desktop 在 SSH 会话中不会提示您安装。然后在那里检查 `git push` 是否可用,以及 `gh auth status` 是否报告您已登录。

221</Note>227</Note>

222 228 

223<h2 id="arrange-your-workspace">229<h2 id="arrange-your-workspace">


453 459 

454Claude Code 在跨会话时应用四项安全行为:460Claude Code 在跨会话时应用四项安全行为:

455 461 

456* 在存档任何会话之前,Claude 会先询问您。在每种权限模式下您都会看到批准卡片,包括 Auto 和 Bypass permissions。462* 在 Claude 存档会话之前,您会看到一张批准卡片,但自动模式和 Bypass permissions 模式除外,在这两种模式下 Claude 可以在没有批准卡片的情况下存档会话。如需在存档前被询问,请切换到 Manual。

457* 通过此使用入口,Claude 无法从无人查看的会话(例如定时任务运行)发送跨会话消息,也无法向此类会话发送消息。463* 通过此使用入口,Claude 无法从无人查看的会话(例如定时任务运行)发送跨会话消息,也无法向此类会话发送消息。

458* Claude Code 会根据接收会话的[入站控制](/docs/zh-CN/cross-session-messaging#control-inbound-messages)检查来自此使用入口的每条消息,即使接收会话本身未启用[跨会话消息传递](/docs/zh-CN/cross-session-messaging#availability)。如果您在接收会话中将 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound) 设置为 `refuse`,Claude Code 会丢弃来自此使用入口的消息。Claude Code 会向 Claude 桌面应用报告该拒绝。在 v2.1.234 之前,对于未启用跨会话消息传递的接收会话,Claude Code 会丢弃来自此使用入口的所有消息。464* Claude Code 会根据接收会话的[入站控制](/docs/zh-CN/cross-session-messaging#control-inbound-messages)检查来自此使用入口的每条消息,即使接收会话本身未启用[跨会话消息传递](/docs/zh-CN/cross-session-messaging#availability)。如果您在接收会话中将 [`crossSessionInbound`](/docs/zh-CN/settings-reference#crosssessioninbound) 设置为 `refuse`,Claude Code 会丢弃来自此使用入口的消息。Claude Code 会向 Claude 桌面应用报告该拒绝。在 v2.1.234 之前,对于未启用跨会话消息传递的接收会话,Claude Code 会丢弃来自此使用入口的所有消息。

459* Claude Code 会引用每条传入消息并注明其来自哪个发送会话,且 Claude 在据此执行操作时仍遵循接收会话自身的权限设置。465* Claude Code 会引用每条传入消息并注明其来自哪个发送会话,且 Claude 在据此执行操作时仍遵循接收会话自身的权限设置。


546 552 

547[Skills](/docs/zh-CN/skills)扩展 Claude 可以做的事情。Claude 在相关时自动加载它们,或者你可以直接调用一个:在提示框中输入 `/` 或点击 **+** 按钮并选择 **Slash commands** 来浏览可用的内容。这包括[内置命令](/docs/zh-CN/commands)、你的[自定义 skills](/docs/zh-CN/skills#create-your-first-skill)、来自你的代码库的项目 skills 以及来自任何[已安装插件](/docs/zh-CN/plugins/install)的 skills。选择一个,它会在输入字段中突出显示。在它之后输入你的任务并照常发送。553[Skills](/docs/zh-CN/skills)扩展 Claude 可以做的事情。Claude 在相关时自动加载它们,或者你可以直接调用一个:在提示框中输入 `/` 或点击 **+** 按钮并选择 **Slash commands** 来浏览可用的内容。这包括[内置命令](/docs/zh-CN/commands)、你的[自定义 skills](/docs/zh-CN/skills#create-your-first-skill)、来自你的代码库的项目 skills 以及来自任何[已安装插件](/docs/zh-CN/plugins/install)的 skills。选择一个,它会在输入字段中突出显示。在它之后输入你的任务并照常发送。

548 554 

549你可以在 Claude 工作时发送命令,就像任何其他消息一样,会话在轮次完成后返回空闲状态。在 v2.1.206 之前,在轮次中间发送的命令可能会导致会话显示为运行状态,你之后发送的消息未被传递。555您可以在 Claude 工作时发送命令,就像发送任何其他消息一样,会话会在该轮次完成后返回空闲状态。

550 556 

551本地会话从 `~/.claude/skills/` 加载你的个人 skills。[SSH](#ssh-sessions) 会话从远程主机的主目录读取 `~/.claude/skills/`,而不是从你的机器。557本地会话从 `~/.claude/skills/` 加载你的个人 skills。[SSH](#ssh-sessions) 会话从远程主机的主目录读取 `~/.claude/skills/`,而不是从你的机器。

552 558 


693 699 

694* **`true`**:Claude 自动查找并使用空闲端口。适合大多数开发服务器。700* **`true`**:Claude 自动查找并使用空闲端口。适合大多数开发服务器。

695* **`false`**:Claude 失败并出现错误。当你的服务器必须使用特定端口时使用此选项,例如 OAuth 回调或 CORS 允许列表。701* **`false`**:Claude 失败并出现错误。当你的服务器必须使用特定端口时使用此选项,例如 OAuth 回调或 CORS 允许列表。

696* **未设置(默认)**:Claude 询问服务器是否需要该确切端口,然后保存你的答案。702* **未设置(默认)**:您的服务器会获得下一个空闲端口,与 `true` 相同,但下面这一种情况除外。在 Claude Desktop v2.37337.0 之前,Claude 会改为询问服务器是否需要该确切端口,然后将您的回答保存在 `launch.json` 中。

697 703 

698当 Claude 选择不同的端口时,它通过 `PORT` 环境变量将分配的端口传递给你的服务器。704如果您的首选端口已被占用且未设置 `autoPort`,当以下条件全部成立时,您的服务器将保持停止状态:

705 

706* 您通过 `npm`、`yarn`、`pnpm` 或 `bun` 脚本启动服务器。

707* 您的首选端口在该脚本中是硬编码的,或者 Claude 无法检查该脚本。

708* 您没有在 `runtimeArgs` 中传递端口。

709 

710在这种情况下,请释放该端口、删除硬编码的值,或更改 `port` 以与脚本保持一致。改为设置 `"autoPort": true` 仅对读取 `PORT` 的脚本有效。

711 

712请让您的服务器从 `PORT` 环境变量读取其端口,该变量包含所分配的端口。当 Claude 将您的服务器移到其他端口时,它还会相应地重写 `runtimeArgs` 中的 `--port` 或 `-p` 值。

699 713 

700<h4 id="examples">714<h4 id="examples">

701 示例715 示例


785 本地会话799 本地会话

786</h3>800</h3>

787 801 

788桌面应用并不总是继承你的完整 shell 环境。在 macOS 上,当你从 Dock 或 Finder 启动应用时,它读取你的 shell 配置文件,例如 `~/.zshrc` 或 `~/.bashrc`,来提取 `PATH` 和一组固定的 Claude Code 变量,但你在那里导出的其他变量不会被拾取。在 Windows 上,应用继承用户和系统环境变量,但不读取 PowerShell 配置文件。802桌面应用并不总是继承您的完整 shell 环境。在 macOS 上,当您从 Dock 或 Finder 启动应用时,它会读取您的 shell 配置文件,例如 `~/.zshrc` 或 `~/.bashrc`,为 Claude Code 提供 `PATH` 和一组固定的 Claude Code 变量,但不会提供您在那里导出的其他变量。在 Windows 上,应用继承用户和系统环境变量,但不读取 PowerShell 配置文件。

789 803 

790要在任何平台上为本地会话和开发服务器设置环境变量,在提示框中打开环境下拉菜单,将鼠标悬停在 **Local** 上,然后点击齿轮图标来打开本地环境编辑器。你在此处保存的变量在你的机器上加密存储,并适用于你启动的每个本地会话和预览服务器。你也可以将变量添加到你的 `~/.claude/settings.json` 文件中的 `env` 键,尽管这些仅到达 Claude 会话而不是开发服务器。有关支持的变量的完整列表,请参阅[环境变量](/docs/zh-CN/env-vars)。804要在任何平台上为本地会话和开发服务器设置环境变量,在提示框中打开环境下拉菜单,将鼠标悬停在 **Local** 上,然后点击齿轮图标来打开本地环境编辑器。你在此处保存的变量在你的机器上加密存储,并适用于你启动的每个本地会话和预览服务器。你也可以将变量添加到你的 `~/.claude/settings.json` 文件中的 `env` 键,尽管这些仅到达 Claude 会话而不是开发服务器。有关支持的变量的完整列表,请参阅[环境变量](/docs/zh-CN/env-vars)。

791 805 


840 854 

841Linux 或 macOS 远程机器需要受支持的处理器、支持 SFTP 的 SSH 服务器、未以 `noexec` 方式挂载的安装文件夹、可正常工作的 shell 以及网络访问。请在连接之前,或在登录后连接失败时,逐项检查以下要求:855Linux 或 macOS 远程机器需要受支持的处理器、支持 SFTP 的 SSH 服务器、未以 `noexec` 方式挂载的安装文件夹、可正常工作的 shell 以及网络访问。请在连接之前,或在登录后连接失败时,逐项检查以下要求:

842 856 

843* **系统**:x86\_64 或 arm64 处理器。该机器还必须满足 Claude Code 的[系统要求](/docs/zh-CN/setup#system-requirements)。857* **系统**:x86\_64 或 arm64 处理器。该机器还必须满足 Claude Code 的[系统要求](/docs/zh-CN/setup#system-requirements)。在 Linux 上,Claude Code 需要 glibc 2.17 或更高版本,或者 musl。要查看机器使用的是哪一种,请在该机器上运行 `ldd --version`。在基于 musl 的发行版(例如 Alpine Linux)上,还需要安装 [Claude Code 所需的软件包](/docs/zh-CN/setup#alpine-linux-and-musl-based-distributions)。

844* **SFTP**:SSH 服务器必须提供 SFTP 子系统,该子系统由其 `sshd_config` 中的 `Subsystem sftp` 行启用。要进行检查,请在您计算机的终端中使用 `sftp` 连接到相同的主机和端口。正常工作的服务器会显示 `sftp>` 提示符。858* **SFTP**:SSH 服务器必须提供 SFTP 子系统,该子系统由其 `sshd_config` 中的 `Subsystem sftp` 行启用。要进行检查,请在您计算机的终端中使用 `sftp` 连接到相同的主机和端口。正常工作的服务器会显示 `sftp>` 提示符。

845* **每个连接的会话数**:macOS 和 Linux 上的 Desktop 会在一个 SSH 连接上打开多个会话。如果服务器的 `sshd_config` 设置了 `MaxSessions 1`,请调高该值,例如调到 OpenSSH 的默认值 10。859* **每个连接的会话数**:macOS 和 Linux 上的 Desktop 会在一个 SSH 连接上打开多个会话。如果服务器的 `sshd_config` 设置了 `MaxSessions 1`,请调高该值,例如调到 OpenSSH 的默认值 10。

846* **安装文件夹**:Desktop 会在您主目录下的 `~/.claude/remote/` 中安装一个辅助程序和 Claude Code,并从该位置运行它们,因此该文件夹不能位于以 `noexec` 方式挂载的文件系统上。请在每个连接用户的主目录中预留约 1 GB 的磁盘空间。860* **安装文件夹**:Desktop 会在您主目录下的 `~/.claude/remote/` 中安装一个辅助程序和 Claude Code,并从该位置运行它们,因此该文件夹不能位于以 `noexec` 方式挂载的文件系统上。请在每个连接用户的主目录中预留约 1 GB 的磁盘空间。有关该文件夹包含的内容,请参阅[远程机器上的文件和进程](#files-and-processes-on-the-remote-machine)。

847* **Shell**:远程机器上为您的账户设置的 shell 必须能够运行通过 SSH 发送的命令,Bash、Zsh 和 `sh` 都可以861* **Shell**:远程机器上为您的账户设置的 shell 必须能够运行通过 SSH 发送的命令,Bash、Zsh 和 `sh` 都可以

848* **网络**:Claude Code 在远程机器上运行并从那里发出网络请求,因此该机器需要具备 [Claude Code 所需的网络访问](/docs/zh-CN/network-config#network-access-requirements)。如果该机器无法下载 Claude Code,Desktop 会在您的计算机上下载并上传它。Claude Code 的其他请求仍从远程机器发出。862* **网络**:Claude Code 在远程机器上运行并从那里发出网络请求,因此该机器需要具备 [Claude Code 所需的网络访问](/docs/zh-CN/network-config#network-access-requirements)。如果该机器无法下载 Claude Code,Desktop 会在您的计算机上下载并上传它。Claude Code 的其他请求仍从远程机器发出。

849 863 


878 892 

879在 **SSH host** 字段中输入 `devbox`。893在 **SSH host** 字段中输入 `devbox`。

880 894 

895<h5 id="use-variables-from-your-shell-in-a-proxycommand">

896 在 `ProxyCommand` 中使用 shell 中的变量

897</h5>

898 

899要在 `ProxyCommand` 或 `Match exec` 命令中使用您自己的环境变量,请在 shell 启动文件(例如 `~/.zshrc`)中导出它,然后退出并重新打开 Desktop。Desktop 启动时会读取您的登录 shell 导出的内容,并在您退出之前一直保留这些值。

900 

901这需要 Claude Desktop v2.37337.0 或更高版本,以及一个接受 `-0` 的 `env` 命令,您可以在计算机的终端中运行 `env -0` 来检查。

902 

881<h5 id="raise-the-ssh-connection-timeout">903<h5 id="raise-the-ssh-connection-timeout">

882 提高 SSH 连接超时时间904 提高 SSH 连接超时时间

883</h5>905</h5>


894 916 

895`ssh` 会使用它为某个主机找到的第一个值,因此请将该条目放在任何设置了 `ConnectTimeout` 的 `Host *` 条目之前。要进行确认,请在您计算机的终端中运行 `ssh -G devbox`,其输出应包含 `connecttimeout 120`。更改该值后,请退出并重新打开 Desktop。917`ssh` 会使用它为某个主机找到的第一个值,因此请将该条目放在任何设置了 `ConnectTimeout` 的 `Host *` 条目之前。要进行确认,请在您计算机的终端中运行 `ssh -G devbox`,其输出应包含 `connecttimeout 120`。更改该值后,请退出并重新打开 Desktop。

896 918 

919<h5 id="forwarding-settings-that-desktop-leaves-off">

920 Desktop 保持关闭的转发设置

921</h5>

922 

923在与远程机器的连接上,Desktop 会将 `ForwardAgent`、`ForwardX11`、`LocalForward`、`RemoteForward`、`DynamicForward` 和 `Tunnel` 保持关闭,即使您的 SSH 配置启用了它们。在[终端](#run-commands-in-the-terminal)或 `!` 命令中,您的转发设置[只是有时](#limits-while-desktop-is-disconnected)会生效,因为 Desktop 可能会在那里启动一个遵循这些设置的单独 `ssh`。

924 

925* **要访问远程机器上的端口**:[自行转发该端口](#reach-a-port-on-the-remote-machine)

926* **要在远程机器上使用您自己的密钥**:在远程机器本身上设置凭据,例如用于 `git push`

927 

928要防止 Desktop 转发您的 SSH agent 或端口,请在您计算机的终端中运行 `ssh -G devbox`。然后按照 Desktop 可能的运行方式再次运行它,带上其输出的 `hostname` 和 `user` 值,例如 `ssh -G -o HostName=devbox.internal.example.com -l alice devbox`。第二次的输出可能会显示第一次跳过的 `Match` 块中的设置。

929 

930在两次输出中查找值不为 `no` 的 `forwardagent` 行,以及以 `localforward`、`remoteforward` 或 `dynamicforward` 开头的行。如果找到,请从您的 SSH 配置中移除该设置。对于您的 `ProxyCommand` 通过 `ssh` 访问的主机,也请执行同样的操作。

931 

932<h4 id="reach-a-port-on-the-remote-machine">

933 访问远程机器上的端口

934</h4>

935 

936要打开在远程机器上运行的服务器(例如端口 3000 上的开发服务器),请自行转发该端口。在您计算机的终端中,使用 `-L` 和您所连接的主机(例如 `devbox`)运行 `ssh`:

937 

938```bash theme={null}

939ssh -N -L 3000:localhost:3000 devbox

940```

941 

942如果您在该连接上填写了 **SSH port** 或 **SSH key (optional)**,请添加带有相同值的 `-p` 或 `-i`。保持该命令运行,并在您计算机的浏览器中打开 `http://localhost:3000`,即可访问远程机器的端口 3000。如果 `ssh` 输出 `open failed: administratively prohibited`,请让该机器的管理员允许 TCP 转发,这由 SSH 服务器 `sshd_config` 中的 `AllowTcpForwarding` 控制。

943 

897<h4 id="windows-remote-machines">944<h4 id="windows-remote-machines">

898 Windows 远程机器945 Windows 远程机器

899</h4>946</h4>


925Claude Code 作为远程机器上的一个进程运行,由 Desktop 在那里安装的后台辅助程序托管,因此它不需要您的 SSH 连接即可继续运行。本节所述行为需要 Claude Desktop v2.31226.0 或更高版本。972Claude Code 作为远程机器上的一个进程运行,由 Desktop 在那里安装的后台辅助程序托管,因此它不需要您的 SSH 连接即可继续运行。本节所述行为需要 Claude Desktop v2.31226.0 或更高版本。

926 973 

927<Warning>974<Warning>

928 如果您使用 Claude 账户登录 Desktop,请不要指望任务能通宵运行。Desktop 只有在运行且已连接时才会为任务续期该登录,因此任务的登录可能在您断开连接后过期,任务随之停止。断开连接时剩余的时间不固定。975 如果您使用 Claude 账户登录 Desktop,请不要指望任务能通宵运行。Desktop 只有在运行且已连接时才会为任务续期该登录,因此任务的登录可能在您断开连接后过期,任务随之停止。断开连接时剩余的时间不固定,可能只有几分钟。

929 976 

930 到目前为止完成的工作会保留在远程机器上,您回来后可以发送一条消息继续。977 到目前为止完成的工作会保留在远程机器上,您回来后可以发送一条消息继续。

931 978 


1076 1123 

1077该字段需要 Claude Desktop v1.44121.0 或更高版本。如果您的组织限制了会话可以使用的文件夹,Desktop 会隐藏该字段,并将 worktree 保留在项目内部。1124该字段需要 Claude Desktop v1.44121.0 或更高版本。如果您的组织限制了会话可以使用的文件夹,Desktop 会隐藏该字段,并将 worktree 保留在项目内部。

1078 1125 

1126<h4 id="files-and-processes-on-the-remote-machine">

1127 远程机器上的文件和进程

1128</h4>

1129 

1130Desktop 会在每个连接到 Linux 或 macOS 远程机器的用户的主目录下,于 `~/.claude/remote/` 中安装一个辅助程序和 Claude Code。辅助程序不监听任何网络端口,但 Claude Code 及其启动的程序(例如 MCP 服务器和开发服务器)可能会监听。

1131 

1132| 文件夹 | 内容 |

1133| - | - |

1134| `~/.claude/remote/srv/` | 辅助程序,每个版本一个文件夹 |

1135| `~/.claude/remote/ccd-cli/` | Claude Code,每个版本一个文件 |

1136| `~/.claude/remote/run/` | 辅助程序的运行时文件,例如其套接字和日志,每台进行连接的计算机一个文件夹 |

1137| `~/.claude/remote/plugins/` | Desktop 从用户计算机复制的插件 |

1138| [`~/.claude/uploads/`](/docs/zh-CN/claude-directory#clear-local-data) | 用户附加到消息中的文件,每个会话一个文件夹 |

1139 

1140要列出某个用户的进程,请以该用户身份在远程机器上运行 `pgrep -fl "$HOME/.claude/remote/"`,或将其中的 `$HOME` 替换为该用户的主目录后运行:

1141 

1142* **辅助程序**:每台进行连接的计算机对应一个或多个 `server` 进程

1143* **Claude Code**:辅助程序为该用户的会话启动的进程,每个进程都来自以其版本命名的文件,例如 `2.1.295-…`

1144 

1145Desktop 通过该用户的 SSH 连接,经由辅助程序在 `~/.claude/remote/run/` 下的文件夹中的 Unix 套接字 `rpc.sock` 访问辅助程序。除 root 外,机器上的其他用户无法连接到该套接字,因为该套接字的权限模式为 600,其所在文件夹的权限模式为 700。

1146 

1147有关辅助程序何时会自行停止,请参阅 [Desktop 断开连接时的限制](#limits-while-desktop-is-disconnected)。

1148 

1149要为某个用户移除辅助程序和 Claude Code:

1150 

1151<Steps>

1152 <Step title="退出 Desktop">

1153 在该用户用于连接的每台计算机上退出 Desktop。Desktop 会在下次连接时重新安装这两个程序,并且它可能会自行重新连接。

1154 </Step>

1155 

1156 <Step title="结束进程">

1157 在远程机器上以该用户身份登录,对 [`pgrep`](#files-and-processes-on-the-remote-machine) 列出的每个进程 ID 运行 `kill`。

1158 </Step>

1159 

1160 <Step title="删除文件夹">

1161 删除 `~/.claude/remote/`。要移除 Claude Code 自身位于 `~/.claude/` 和 `~/.claude.json` 中的文件,请参阅[移除配置文件](/docs/zh-CN/setup#remove-configuration-files)。

1162 </Step>

1163</Steps>

1164 

1165<h5 id="end-one-session’s-process">

1166 结束单个会话的进程

1167</h5>

1168 

1169要结束某个会话的 Claude Code 进程,请在 Desktop 已连接到远程机器时,在 Desktop 中[归档该会话](#work-in-parallel-with-sessions)。该进程在其任务完成后以及您退出 Desktop 后都会继续运行。

1170 

1171在归档带有 worktree 的会话之前,请参阅[使用会话并行工作](#work-in-parallel-with-sessions)。

1172 

1173<h5 id="see-who-connected-to-the-remote-machine">

1174 查看谁连接了远程机器

1175</h5>

1176 

1177要了解谁连接了某台远程机器,请阅读该机器上 SSH 服务器的日志,其中来自 Desktop 的登录看起来与来自终端的登录相同。在 macOS 或 Linux 上使用 Desktop 时,每次 Desktop 连接都会产生一条记录,而不是每个会话一条。

1178 

1179<h4 id="use-mcp-servers-set-up-on-the-remote-machine">

1180 使用在远程机器上设置的 MCP 服务器

1181</h4>

1182 

1183要在 SSH 会话中使用来自 `~/.claude.json` 或项目 `.mcp.json` 的 [MCP 服务器](/docs/zh-CN/mcp),请在远程机器上的这些文件中进行设置。Claude Code 会在远程机器上启动其中的 stdio 服务器,因此请在远程机器上安装这些服务器所运行的命令。有关来自 `claude_desktop_config.json` 的服务器,请参阅 [Desktop 断开连接时的限制](#limits-while-desktop-is-disconnected)。

1184 

1079<h4 id="open-an-ssh-session-from-a-link">1185<h4 id="open-an-ssh-session-from-a-link">

1080 通过链接打开 SSH 会话1186 通过链接打开 SSH 会话

1081</h4>1187</h4>


1207* **Cowork**:这些键都不适用于 [Cowork](https://claude.com/docs/cowork/overview) 会话或 Cowork 定时任务1313* **Cowork**:这些键都不适用于 [Cowork](https://claude.com/docs/cowork/overview) 会话或 Cowork 定时任务

1208* **云端会话**:这些键都不会改变[云端会话](#cloud-sessions)是否可用。要关闭云端会话,请使用 [Admin console 控制](#admin-console-controls)下的 **Cloud sessions** 设置。1314* **云端会话**:这些键都不会改变[云端会话](#cloud-sessions)是否可用。要关闭云端会话,请使用 [Admin console 控制](#admin-console-controls)下的 **Cloud sessions** 设置。

1209 1315 

1210在调整示例时,请检查主机名和 Desktop 版本:1316在调整示例时,请检查主机名、Desktop 版本和文件权限:

1211 1317 

1212* **主机名**:确保 `sshHostAllowlist` 中的某个模式与每个 `sshConfigs` 条目的主机名(不含 `user@`)匹配,否则开发者无法连接到该主机。有关 Desktop 如何匹配主机名,请参阅[限制用户可以连接的 SSH 主机](#restrict-which-ssh-hosts-users-can-connect-to)。1318* **主机名**:确保 `sshHostAllowlist` 中的某个模式与每个 `sshConfigs` 条目的主机名(不含 `user@`)匹配,否则开发者无法连接到该主机。有关 Desktop 如何匹配主机名,请参阅[限制用户可以连接的 SSH 主机](#restrict-which-ssh-hosts-users-can-connect-to)。

1213* **版本**:`disableDesktopLocalSessions` 需要 Claude Desktop v1.37937.0 或更高版本1319* **版本**:`disableDesktopLocalSessions` 需要 Claude Desktop v1.37937.0 或更高版本

1320* **文件权限**:确保计算机上每位开发者的账户都能读取托管设置文件。Desktop 不会应用该账户无法读取的文件中的键,Claude Code 也会[在没有这些键的情况下启动](/docs/zh-CN/managed-settings#find-entries-claude-code-dropped)。

1214 1321 

1215将这三个键放在一个[托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)中,即您提供的最高优先级来源。如果您提供[服务器托管设置](/docs/zh-CN/server-managed-settings),还请在每台计算机上最高优先级的 MDM 策略或托管设置文件中保留这三个键的副本。Desktop 在启动时获取服务器托管设置,在获取成功之前,适用的是计算机上的副本。1322将这三个键放在一个[托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)中,即您提供的最高优先级来源。如果您提供[服务器托管设置](/docs/zh-CN/server-managed-settings),还请在每台计算机上最高优先级的 MDM 策略或托管设置文件中保留这三个键的副本。Desktop 在启动时获取服务器托管设置,在获取成功之前,适用的是计算机上的副本。

1216 1323 


1558 1665 

1559如果 MCP server 切换不响应或服务器在 Windows 上连接失败,检查服务器在你的设置中是否正确配置,重启应用,验证服务器进程在任务管理器中运行,并查看服务器日志以获取连接错误。1666如果 MCP server 切换不响应或服务器在 Windows 上连接失败,检查服务器在你的设置中是否正确配置,重启应用,验证服务器进程在任务管理器中运行,并查看服务器日志以获取连接错误。

1560 1667 

1668<h3 id="ssh-connection-fails-after-you-log-in">

1669 登录后 SSH 连接失败

1670</h3>

1671 

1672在下表中找到卡片的标题或错误消息末尾的代码,然后按照最后一列的说明操作。要查看消息,请在失败卡片上选择 **View details**。

1673 

1674| 卡片上的标题 | 代码 | 处理方法 |

1675| - | - | - |

1676| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | 在服务器的 `sshd_config` 中启用 SFTP,如[远程机器要求](#remote-machine-requirements-for-ssh-sessions)中所述 |

1677| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | 在您计算机的终端中使用 `sftp` 连接到同一主机,查看是什么阻止了它启动,然后检查 Desktop 消息中提到的设置和文件 |

1678| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | 提高服务器 `sshd_config` 中的 `MaxSessions`,例如设为 OpenSSH 的默认值 10 |

1679| `<host> is out of disk space` | `[ENOSPC]` 或 `[EDQUOT]` | 在远程机器上的主目录或 `/tmp` 中释放空间或配额 |

1680| `This computer is out of disk space` | `[ENOSPC]` 或 `[EDQUOT]`,出现在以 `Couldn't prepare the deploy locally` 开头的消息中 | 释放您计算机上的空间 |

1681| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | 等待一分钟,然后重试。如果仍然失败,请在远程机器上运行消息中提到的命令,查看 Claude Code 在那里是否有响应。 |

1682 

1683对于任何其他消息,请查看[远程机器要求](#remote-machine-requirements-for-ssh-sessions)。

1684 

1561<h3 id="app-won’t-quit">1685<h3 id="app-won’t-quit">

1562 应用无法退出1686 应用无法退出

1563</h3>1687</h3>

env-vars.md +10 −4

Details

268| `CLAUDE_CODE_DISABLE_FAST_MODE` | 设置为 `1` 可禁用[快速模式](/docs/zh-CN/fast-mode) |268| `CLAUDE_CODE_DISABLE_FAST_MODE` | 设置为 `1` 可禁用[快速模式](/docs/zh-CN/fast-mode) |

269| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | 设置为 `1` 可禁用 "How is Claude doing?" 会话质量调查。当设置了 `DISABLE_TELEMETRY`、`DO_NOT_TRACK` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,调查也会被禁用,除非 `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` 重新选择启用。若要设置采样率而不是完全禁用,请使用 [`feedbackSurveyRate`](/docs/zh-CN/settings-reference#feedbacksurveyrate) 设置。请参阅[会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys) |269| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | 设置为 `1` 可禁用 "How is Claude doing?" 会话质量调查。当设置了 `DISABLE_TELEMETRY`、`DO_NOT_TRACK` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时,调查也会被禁用,除非 `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` 重新选择启用。若要设置采样率而不是完全禁用,请使用 [`feedbackSurveyRate`](/docs/zh-CN/settings-reference#feedbacksurveyrate) 设置。请参阅[会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys) |

270| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | 设置为 `1` 可禁用文件[检查点功能](/docs/zh-CN/checkpointing)。`/rewind` 命令将无法恢复代码更改。覆盖 [`fileCheckpointingEnabled`](/docs/zh-CN/settings-reference#filecheckpointingenabled) 设置 |270| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | 设置为 `1` 可禁用文件[检查点功能](/docs/zh-CN/checkpointing)。`/rewind` 命令将无法恢复代码更改。覆盖 [`fileCheckpointingEnabled`](/docs/zh-CN/settings-reference#filecheckpointingenabled) 设置 |

271| `CLAUDE_CODE_DISABLE_FILE_MENTIONS` | 设置为 `1` 可阻止 Claude Code 展开文件和目录的 [`@` 提及](/docs/zh-CN/common-workflows#reference-files-and-directories)。Claude 会改为获得所提及的路径,并附带一条让其使用文件工具读取这些路径的说明。在[项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)中会被忽略。需要 Claude Code v2.1.299 或更高版本 |

271| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | 设置为 `1` 可从 Claude 的上下文中移除内置的提交和 PR 工作流说明以及 git 状态快照。在使用您自己的 git 工作流 skill 时很有用。设置后优先于 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions) 设置 |272| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | 设置为 `1` 可从 Claude 的上下文中移除内置的提交和 PR 工作流说明以及 git 状态快照。在使用您自己的 git 工作流 skill 时很有用。设置后优先于 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions) 设置 |

272| `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` | 设置为 `1` 可阻止 Claude Code 读取通过 `-c` 传递给 shell 的脚本(例如 `bash -c 'rm -rf ~'`)以检查[关键路径](/docs/zh-CN/permission-modes#removals-inside-nested-commands-and-inline-scripts)删除。Claude Code 仍会检查这些脚本中的 shell 变量和位置参数目标,其他关键路径检查也会继续运行。请在启动 Claude Code 的环境中设置它,因为 Claude Code 会忽略通过设置 `env` 块传递的副本。需要 Claude Code v2.1.288 或更高版本 |273| `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` | 设置为 `1` 可阻止 Claude Code 读取通过 `-c` 传递给 shell 的脚本(例如 `bash -c 'rm -rf ~'`)以检查[关键路径](/docs/zh-CN/permission-modes#removals-inside-nested-commands-and-inline-scripts)删除。Claude Code 仍会检查这些脚本中的 shell 变量和位置参数目标,其他关键路径检查也会继续运行。请在启动 Claude Code 的环境中设置它,因为 Claude Code 会忽略通过设置 `env` 块传递的副本。需要 Claude Code v2.1.288 或更高版本 |

273| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | 设为 `1` 可阻止在 Anthropic API 上将 Opus 4 和 Opus 4.1 自动重新映射到当前 Opus 版本。当您有意固定使用较旧的模型时使用。该重新映射不会在 Amazon Bedrock、Google Cloud's Agent Platform 或 Microsoft Foundry 上运行 |274| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | 设为 `1` 可阻止在 Anthropic API 上将 Opus 4 和 Opus 4.1 自动重新映射到当前 Opus 版本。当您有意固定使用较旧的模型时使用。该重新映射不会在 Amazon Bedrock、Google Cloud's Agent Platform 或 Microsoft Foundry 上运行 |


328| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | 覆盖用于连接 IDE 扩展的主机地址。默认情况下,Claude Code 会自动检测正确的地址,包括 WSL 到 Windows 的路由 |329| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | 覆盖用于连接 IDE 扩展的主机地址。默认情况下,Claude Code 会自动检测正确的地址,包括 WSL 到 Windows 的路由 |

329| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | 设置为 `1` 可跳过 IDE 扩展的自动安装。等同于将 [`autoInstallIdeExtension`](/docs/zh-CN/settings-reference#autoinstallideextension) 设置为 `false` |330| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | 设置为 `1` 可跳过 IDE 扩展的自动安装。等同于将 [`autoInstallIdeExtension`](/docs/zh-CN/settings-reference#autoinstallideextension) 设置为 `false` |

330| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | 设置为 `1` 可在连接时跳过对 IDE 锁文件条目的验证。当 IDE 正在运行但自动连接仍找不到它时使用 |331| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | 设置为 `1` 可在连接时跳过对 IDE 锁文件条目的验证。当 IDE 正在运行但自动连接仍找不到它时使用 |

332| `CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS` | 对对话应用[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction)的上下文大小(以 token 计)(默认值:`200000`)。接受正整数,其他值会被忽略。低于 `100000` 的值会被提高到最低阈值 `100000`。对于满足条件的对话,空闲压缩默认开启。要关闭它,请将 `idleCompaction` 设置为 `false`。需要 Claude Code v2.1.290 或更高版本 |

331| `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` | 一个会话中最多可同时运行多少个[子代理](/docs/zh-CN/sub-agents#concurrent-subagent-limit),超过后 Agent 工具将拒绝再生成新的子代理(默认:20)。接受以纯数字表示的正整数;其他值会被忽略,因此此变量可以调整上限,但不能禁用它。需要 Claude Code v2.1.217 或更高版本 |333| `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` | 一个会话中最多可同时运行多少个[子代理](/docs/zh-CN/sub-agents#concurrent-subagent-limit),超过后 Agent 工具将拒绝再生成新的子代理(默认:20)。接受以纯数字表示的正整数;其他值会被忽略,因此此变量可以调整上限,但不能禁用它。需要 Claude Code v2.1.217 或更高版本 |

332| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | 覆盖 Claude Code 为当前模型假定的上下文窗口大小。从 v2.1.193 起,其应用方式取决于 Claude Code 如何解析模型 ID;请参阅[为网关或自定义模型 ID 更正窗口大小](/docs/zh-CN/model-config#correct-the-window-for-a-gateway-or-custom-model-id)。当通过 `ANTHROPIC_BASE_URL` 路由到某个模型,而其上下文窗口与其名称对应的内置大小不匹配时使用 |334| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | 覆盖 Claude Code 为当前模型假定的上下文窗口大小。从 v2.1.193 起,其应用方式取决于 Claude Code 如何解析模型 ID;请参阅[为网关或自定义模型 ID 更正窗口大小](/docs/zh-CN/model-config#correct-the-window-for-a-gateway-or-custom-model-id)。当通过 `ANTHROPIC_BASE_URL` 路由到某个模型,而其上下文窗口与其名称对应的内置大小不匹配时使用 |

333| `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` | Claude Code 发送给模型的每个 MCP 工具描述和每个 MCP 服务器指令的最大长度(字符数,默认:2048)。Claude Code 会[截断更长的文本](/docs/zh-CN/mcp#for-mcp-server-authors)。接受以纯数字表示的正整数。其他值会被忽略并应用默认值。需要 Claude Code v2.1.280 或更高版本 |335| `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` | Claude Code 发送给模型的每个 MCP 工具描述以及每个 MCP 服务器说明的最大长度(字符)。您设置的值会替换两个[默认限制](/docs/zh-CN/mcp#for-mcp-server-authors):4096,以及 Claude 通过工具搜索加载的工具描述所用的 16384。Claude Code 会截断更长的文本。接受纯数字形式的正整数。其他值将被忽略并应用默认值。需要 Claude Code v2.1.280 或更高版本 |

334| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | 设置大多数请求的最大输出 token 数。默认值和上限因模型而异;请参阅[最大输出 token](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison)。如果设置的值超过模型上限,Claude Code 会将其降至上限。对于 Claude Code 无法解析为已知模型的模型 ID,默认值为 32000,上限为 128000。增大此值会减少触发[自动压缩](/docs/zh-CN/costs#reduce-token-usage)之前可用的有效上下文窗口 |336| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | 设置大多数请求的最大输出 token 数。默认值和上限因模型而异;请参阅[最大输出 token](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison)。如果设置的值超过模型上限,Claude Code 会将其降至上限。对于 Claude Code 无法解析为已知模型的模型 ID,默认值为 32000,上限为 128000。增大此值会减少触发[自动压缩](/docs/zh-CN/costs#reduce-token-usage)之前可用的有效上下文窗口 |

335| `CLAUDE_CODE_MAX_RETRIES` | 覆盖失败 API 请求的重试次数(默认:10)。从 v2.1.186 起上限为 15;从 v2.1.199 起,`CLAUDE_CODE_RETRY_WATCHDOG` 会提高默认值并取消上限。对于需要等待更长时间服务中断的无人值守会话,请改为设置 `CLAUDE_CODE_RETRY_WATCHDOG` |337| `CLAUDE_CODE_MAX_RETRIES` | 覆盖失败 API 请求的重试次数(默认:10)。从 v2.1.186 起上限为 15;从 v2.1.199 起,`CLAUDE_CODE_RETRY_WATCHDOG` 会提高默认值并取消上限。对于需要等待更长时间服务中断的无人值守会话,请改为设置 `CLAUDE_CODE_RETRY_WATCHDOG` |

336| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | 已在 v2.1.224 中移除,现在不起作用。此前用于限制 Claude 在一个会话中可通过 Agent 工具生成的[子代理](/docs/zh-CN/sub-agents)总数(默认:200);超过上限时生成会失败并显示 `Subagent spawn limit reached`。[并发子代理限制](/docs/zh-CN/sub-agents#concurrent-subagent-limit)和[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)仍然适用 |338| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | 已在 v2.1.224 中移除,现在不起作用。此前用于限制 Claude 在一个会话中可通过 Agent 工具生成的[子代理](/docs/zh-CN/sub-agents)总数(默认:200);超过上限时生成会失败并显示 `Subagent spawn limit reached`。[并发子代理限制](/docs/zh-CN/sub-agents#concurrent-subagent-limit)和[深度限制](/docs/zh-CN/sub-agents#let-subagents-spawn-their-own-subagents)仍然适用 |


359| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 刷新动态 OpenTelemetry 标头的间隔(毫秒,默认:1740000 / 29 分钟)。请参阅[动态标头](/docs/zh-CN/monitoring-usage#dynamic-headers) |361| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 刷新动态 OpenTelemetry 标头的间隔(毫秒,默认:1740000 / 29 分钟)。请参阅[动态标头](/docs/zh-CN/monitoring-usage#dynamic-headers) |

360| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | OpenTelemetry 导出器在关闭时完成操作的超时时间(毫秒,默认:2000)。如果退出时指标丢失,请调高此值。请参阅[监控](/docs/zh-CN/monitoring-usage) |362| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | OpenTelemetry 导出器在关闭时完成操作的超时时间(毫秒,默认:2000)。如果退出时指标丢失,请调高此值。请参阅[监控](/docs/zh-CN/monitoring-usage) |

361| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | 对于被 API 以 `529` 过载错误拒绝的请求,[自动重试](/docs/zh-CN/errors#tune-retry-behavior)之间指数退避的起始延迟(毫秒),用于替代默认的 500。当 API 达到容量上限时,调高此值可将重试分散到更长的时间窗口内。请以纯数字给出 500 到 32000 之间的整数毫秒数;Claude Code 会将其他任何值视为未设置。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1` 时,或被拒绝的请求是在[快速模式](/docs/zh-CN/fast-mode#handle-rate-limits)下发送的时,此变量不起作用。需要 Claude Code v2.1.292 或更高版本 |363| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | 对于被 API 以 `529` 过载错误拒绝的请求,[自动重试](/docs/zh-CN/errors#tune-retry-behavior)之间指数退避的起始延迟(毫秒),用于替代默认的 500。当 API 达到容量上限时,调高此值可将重试分散到更长的时间窗口内。请以纯数字给出 500 到 32000 之间的整数毫秒数;Claude Code 会将其他任何值视为未设置。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1` 时,或被拒绝的请求是在[快速模式](/docs/zh-CN/fast-mode#handle-rate-limits)下发送的时,此变量不起作用。需要 Claude Code v2.1.292 或更高版本 |

364| `CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS` | 对于 API 以 `529` 过载错误拒绝的请求,[自动重试](/docs/zh-CN/errors#tune-retry-behavior)之间指数退避的上限(毫秒),用于替代默认的 32000。提高此值可使后续重试在 API 容量已满时继续拉开间隔。以纯数字给出 32000 到 64000 之间的整数毫秒数;Claude Code 会将任何其他值视为未设置。当 `CLAUDE_CODE_RETRY_WATCHDOG` 设置为 `1` 时,或被拒绝的请求是在[快速模式](/docs/zh-CN/fast-mode#handle-rate-limits)下发送时,此变量无效。需要 Claude Code v2.1.296 或更高版本 |

362| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | 设置为 `1` 可让 Claude Code 在有新版本可用时于后台运行包管理器的升级命令。适用于 Homebrew 和 WinGet 安装。其他包管理器仍会显示升级命令而不运行它。请参阅[自动更新](/docs/zh-CN/setup#auto-updates) |365| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | 设置为 `1` 可让 Claude Code 在有新版本可用时于后台运行包管理器的升级命令。适用于 Homebrew 和 WinGet 安装。其他包管理器仍会显示升级命令而不运行它。请参阅[自动更新](/docs/zh-CN/setup#auto-updates) |

363| `CLAUDE_CODE_PERFORCE_MODE` | 设置为 `1` 可启用感知 Perforce 的写保护。设置后,如果目标文件缺少所有者写入位,Edit、Write 和 NotebookEdit 会失败并给出 `p4 edit <file>` 提示;Perforce 会清除已同步文件的该位,直到 `p4 edit` 将其打开。这可以防止 Claude Code 绕过 Perforce 变更跟踪 |366| `CLAUDE_CODE_PERFORCE_MODE` | 设置为 `1` 可启用感知 Perforce 的写保护。设置后,如果目标文件缺少所有者写入位,Edit、Write 和 NotebookEdit 会失败并给出 `p4 edit <file>` 提示;Perforce 会清除已同步文件的该位,直到 `p4 edit` 将其打开。这可以防止 Claude Code 绕过 Perforce 变更跟踪 |

364| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | 覆盖插件根目录。尽管名称如此,此变量设置的是父目录,而非缓存本身:市场和插件缓存位于此路径下的子目录中。默认为 `~/.claude/plugins` |367| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | 覆盖插件根目录。尽管名称如此,此变量设置的是父目录,而非缓存本身:市场和插件缓存位于此路径下的子目录中。默认为 `~/.claude/plugins` |


380| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在[云端会话](/docs/zh-CN/claude-code-on-the-web)中自动设置为当前会话的 ID。读取此变量可构造返回会话记录的链接。请参阅[将输出链接回会话](/docs/zh-CN/cloud-environments#link-output-back-to-the-session) |383| `CLAUDE_CODE_REMOTE_SESSION_ID` | 在[云端会话](/docs/zh-CN/claude-code-on-the-web)中自动设置为当前会话的 ID。读取此变量可构造返回会话记录的链接。请参阅[将输出链接回会话](/docs/zh-CN/cloud-environments#link-output-back-to-the-session) |

381| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 可在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 会忽略设置文件 `env` 块中的此变量。需要 Claude Code v2.1.248 或更高版本 |384| `CLAUDE_CODE_RESTRICTED` | 设置为 `1` 可在受限模式下启动会话,与传递 [`--restricted`](/docs/zh-CN/cli-reference#cli-flags) 相同。Claude Code 会忽略设置文件 `env` 块中的此变量。需要 Claude Code v2.1.248 或更高版本 |

382| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 可在上一个会话于某轮次中途结束时自动恢复。在 SDK 模式下使用,使模型无需 SDK 重新发送提示词即可继续。要关闭此功能,请取消设置该变量或将其设置为 `0`。对于 VS Code 聊天面板,请参阅[重新加载后继续对话](/docs/zh-CN/vs-code#continue-conversations-after-a-reload) |385| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 设置为 `1` 可在上一个会话于某轮次中途结束时自动恢复。在 SDK 模式下使用,使模型无需 SDK 重新发送提示词即可继续。要关闭此功能,请取消设置该变量或将其设置为 `0`。对于 VS Code 聊天面板,请参阅[重新加载后继续对话](/docs/zh-CN/vs-code#continue-conversations-after-a-reload) |

383| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 对于在某轮次中途结束的会话,恢复时允许自动继续的最后一条会话记录消息的最大时长(毫秒)。当最后一条消息早于此界限时,Claude Code 会跳过 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 自动恢复及其 `CLAUDE_CODE_RESUME_PROMPT` 继续消息,会话以空闲状态启动,由您显式继续。未设置或为 `0` 表示没有界限,但最后一个请求因 API 错误而失败的轮次只有在该错误发生不到六小时时才会恢复。正值会限制所有轮次,包括这类轮次;负值或非数字值会应用一小时的界限。长时间运行的 Agent 的启动脚本可以设置此变量,以免针对旧会话记录重新启动时重新运行过时的提示词。当 Claude Code 重新启动一个已崩溃、且其对话继承自交互式会话的 [agent view](/docs/zh-CN/agent-view) 会话时,会自行设置一小时的界限。需要 Claude Code v2.1.211 或更高版本 |386| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 对于在轮次中途结束的会话,要在恢复时自动继续,其最后一条会话记录消息允许的最大时长(毫秒)。当最后一条消息早于此界限时,Claude Code 会跳过 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 自动恢复及其 `CLAUDE_CODE_RESUME_PROMPT` 续接消息,会话以空闲状态启动,以便您显式继续。未设置或为 `0` 时不设界限,但某些轮次(例如以 API 错误结束的轮次)仅在其最后一条消息后六小时内才会恢复。正值会对所有轮次(包括这些轮次)设置界限;负值或非数字值会应用一小时的界限。长时间运行的 Agent 的启动脚本可以设置此变量,以免针对旧会话记录重启时重新运行过时的提示词。当 Claude Code 重启一个从交互式会话继承对话的崩溃 [agent view](/docs/zh-CN/agent-view) 会话时,它会自行设置一小时的界限。需要 Claude Code v2.1.211 或更高版本 |

384| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖 Claude Code 发送给 Claude 的继续消息:当 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 继续被中断的轮次而非重新发送其提示词时,或当您使用 `-p` 恢复[延迟的工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)时,都会发送此消息。默认为 `Continue from where you left off.`。空字符串将使用默认值 |387| `CLAUDE_CODE_RESUME_PROMPT` | 覆盖 Claude Code 发送给 Claude 的继续消息:当 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 继续被中断的轮次而非重新发送其提示词时,或当您使用 `-p` 恢复[延迟的工具调用](/docs/zh-CN/hooks#defer-a-tool-call-for-later)时,都会发送此消息。默认为 `Continue from where you left off.`。空字符串将使用默认值 |

385| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于评估测试框架、CI 作业或远程工作进程等无人值守会话,请设置为 `1`。会无限期重试 `429` 和 `529` 容量错误,而不是在尝试 `CLAUDE_CODE_MAX_RETRIES` 次后失败。当标准速度请求收到报告支出限额或使用额度耗尽的 `429` 时,Claude Code 会立即失败,即使该错误来自按计划重置的[网关支出上限](/docs/zh-CN/errors#spend-limit-reached)也是如此。在 v2.1.239 之前,看门狗会无限期重试这些错误。对于快速模式请求,请参阅[处理速率限制](/docs/zh-CN/fast-mode#handle-rate-limits)。看门狗在两次尝试之间最多退避 5 分钟;当响应带有速率限制重置时间时,则会一直等到限制重置,因此达到用量限制的会话会等待剩余的时间窗口结束。在 v2.1.199 或更高版本中,它还会将其他临时性错误(例如服务器错误、超时和连接中断)的默认重试次数提高到 300(大约三小时的退避),并且如果您显式设置了 `CLAUDE_CODE_MAX_RETRIES`,还会取消该变量 15 次的上限。需要 Claude Code v2.1.186 或更高版本 |388| `CLAUDE_CODE_RETRY_WATCHDOG` | 对于评估测试框架、CI 作业或远程工作进程等无人值守会话,请设置为 `1`。会无限期重试 `429` 和 `529` 容量错误,而不是在尝试 `CLAUDE_CODE_MAX_RETRIES` 次后失败。当标准速度请求收到报告支出限额或使用额度耗尽的 `429` 时,Claude Code 会立即失败,即使该错误来自按计划重置的[网关支出上限](/docs/zh-CN/errors#spend-limit-reached)也是如此。在 v2.1.239 之前,看门狗会无限期重试这些错误。对于快速模式请求,请参阅[处理速率限制](/docs/zh-CN/fast-mode#handle-rate-limits)。看门狗在两次尝试之间最多退避 5 分钟;当响应带有速率限制重置时间时,则会一直等到限制重置,因此达到用量限制的会话会等待剩余的时间窗口结束。在 v2.1.199 或更高版本中,它还会将其他临时性错误(例如服务器错误、超时和连接中断)的默认重试次数提高到 300(大约三小时的退避),并且如果您显式设置了 `CLAUDE_CODE_MAX_RETRIES`,还会取消该变量 15 次的上限。需要 Claude Code v2.1.186 或更高版本 |

386| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,每个 API 请求在等待 `429` 和 `529` 错误上所花费的最长时间(毫秒)。这段时间用完后,下一个此类错误将结束该请求。请以纯数字给出正整数,例如 `1800000` 表示 30 分钟。未设置时,等待没有限制。需要 Claude Code v2.1.295 或更高版本 |389| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | 设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,每个 API 请求在等待 `429` 和 `529` 错误上所花费的最长时间(毫秒)。这段时间用完后,下一个此类错误将结束该请求。请以纯数字给出正整数,例如 `1800000` 表示 30 分钟。未设置时,等待没有限制。需要 Claude Code v2.1.295 或更高版本 |


437| `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` | 当 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1` 时,Claude Code 每次提醒 Claude 检查仍在运行的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)之前等待的时长。接受一个或多个以逗号分隔的等待时间,单位为整秒,范围为 `1` 到 `86400`,例如 `600` 或 `600,1800,3600`。每个值是下一次提醒之前的等待时间,最后一个值会重复使用。仅接受纯数字;任何其他值或写法都视为未设置。未设置时不会有提醒。需要 Claude Code v2.1.283 或更高版本 |440| `CLAUDE_CODE_WORKER_CHECKIN_SCHEDULE` | 当 `CLAUDE_AUTO_BACKGROUND_TASKS` 设置为 `1` 时,Claude Code 每次提醒 Claude 检查仍在运行的[后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)之前等待的时长。接受一个或多个以逗号分隔的等待时间,单位为整秒,范围为 `1` 到 `86400`,例如 `600` 或 `600,1800,3600`。每个值是下一次提醒之前的等待时间,最后一个值会重复使用。仅接受纯数字;任何其他值或写法都视为未设置。未设置时不会有提醒。需要 Claude Code v2.1.283 或更高版本 |

438| `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS` | 单次[工作流](/docs/zh-CN/workflows)运行同时执行的 Agent 数量,范围为 `1` 到 `256`。默认情况下,一次运行最多同时执行 16 个 Agent,当 Claude Code 可用的 CPU 较少时数量会更少;排队的 `agent()` 调用会等待空闲槽位。每个正在运行的 Agent 的会话记录都保存在 Claude Code 的内存中,因此值越高,内存使用量越大。仅接受纯数字;超出范围的值和其他写法都会保持默认值。需要 Claude Code v2.1.269 或更高版本 |441| `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS` | 单次[工作流](/docs/zh-CN/workflows)运行同时执行的 Agent 数量,范围为 `1` 到 `256`。默认情况下,一次运行最多同时执行 16 个 Agent,当 Claude Code 可用的 CPU 较少时数量会更少;排队的 `agent()` 调用会等待空闲槽位。每个正在运行的 Agent 的会话记录都保存在 Claude Code 的内存中,因此值越高,内存使用量越大。仅接受纯数字;超出范围的值和其他写法都会保持默认值。需要 Claude Code v2.1.269 或更高版本 |

439| `CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS` | [工作流](/docs/zh-CN/workflows) Agent 在发送自己的第一个请求之前,等待具有相同前缀的同级 Agent 的第一个响应开始的时间上限(毫秒)。当扇出启动多个共享同一[提示缓存前缀](/docs/zh-CN/workflows#prompt-caching-in-a-fan-out)的 Agent 时,Claude Code 会让除第一个 Agent 之外的所有 Agent 最多等待这么长时间,以便其余 Agent 读取已缓存的前缀,而不是各自在未缓存的情况下处理它。默认值为 `5000`。设置为 `0` 可禁用等待。设置了 `DISABLE_PROMPT_CACHING` 时,Agent 从不等待。需要 Claude Code v2.1.229 或更高版本 |442| `CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS` | [工作流](/docs/zh-CN/workflows) Agent 在发送自己的第一个请求之前,等待具有相同前缀的同级 Agent 的第一个响应开始的时间上限(毫秒)。当扇出启动多个共享同一[提示缓存前缀](/docs/zh-CN/workflows#prompt-caching-in-a-fan-out)的 Agent 时,Claude Code 会让除第一个 Agent 之外的所有 Agent 最多等待这么长时间,以便其余 Agent 读取已缓存的前缀,而不是各自在未缓存的情况下处理它。默认值为 `5000`。设置为 `0` 可禁用等待。设置了 `DISABLE_PROMPT_CACHING` 时,Agent 从不等待。需要 Claude Code v2.1.229 或更高版本 |

443| `CLAUDE_CODE_YOU_SHOULD_KNOW_DEBUG` | 设置为 `1` 可在输入框上方为 [You should know mod](/docs/zh-CN/interactive-mode#you-should-know-suggestions) 在本会话中进行的最近三次检查各显示一行。用于在没有出现任何备注时确认该 mod 正在进行检查。需要 Claude Code v2.1.287 或更高版本 |

440| `CLAUDE_CONFIG_DIR` | 覆盖配置目录(默认:`~/.claude`)。所有设置、会话历史和插件都存储在此路径下。关于凭据,请参阅 [Claude Code 存储凭据的位置](/docs/zh-CN/authentication#credential-management)。适用于同时运行多个账户:例如 `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'`。请在 shell、用户设置或托管设置中设置它。在设置文件中,请写入[绝对路径](#in-settings-files)。在[项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)中被忽略 |444| `CLAUDE_CONFIG_DIR` | 覆盖配置目录(默认:`~/.claude`)。所有设置、会话历史和插件都存储在此路径下。关于凭据,请参阅 [Claude Code 存储凭据的位置](/docs/zh-CN/authentication#credential-management)。适用于同时运行多个账户:例如 `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'`。请在 shell、用户设置或托管设置中设置它。在设置文件中,请写入[绝对路径](#in-settings-files)。在[项目和本地设置](/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)中被忽略 |

441| `CLAUDE_DISABLE_ADOPT` | 设置为 `1` 后,当您按 `←` 或使用 [`/background`](/docs/zh-CN/agent-view#from-inside-a-session) 将会话转入后台时,会停止进行中的后台工作,而不是将其延续。Claude Code 会在转入后台之前请您确认,然后停止原本会被延续的任务。需要 Claude Code v2.1.195 或更高版本 |445| `CLAUDE_DISABLE_ADOPT` | 设置为 `1` 后,当您按 `←` 或使用 [`/background`](/docs/zh-CN/agent-view#from-inside-a-session) 将会话转入后台时,会停止进行中的后台工作,而不是将其延续。Claude Code 会在转入后台之前请您确认,然后停止原本会被延续的任务。需要 Claude Code v2.1.195 或更高版本 |

442| `CLAUDE_EFFORT` | 在 Bash 工具子进程和 hook 命令中自动设置为子进程启动时生效的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。与传递给 [hook](/docs/zh-CN/hooks) 的 `effort.level` 字段一致。仅在当前模型支持 effort 参数时设置 |446| `CLAUDE_EFFORT` | 在 Bash 工具子进程和 hook 命令中自动设置为子进程启动时生效的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level):`low`、`medium`、`high`、`xhigh` 或 `max`。与传递给 [hook](/docs/zh-CN/hooks) 的 `effort.level` 字段一致。仅在当前模型支持 effort 参数时设置 |


452| `CLAUDE_SUBAGENT_BG_SHELL_MAX_MS` | 已在 v2.1.260 中移除,现在不起任何作用。此前用于限制[子代理](/docs/zh-CN/sub-agents)启动的[后台 shell 命令](/docs/zh-CN/interactive-mode#background-bash-commands)可运行的时长(毫秒),默认为 60 分钟。请参阅[后台命令生命周期规则](/docs/zh-CN/tools-reference#background-commands) |456| `CLAUDE_SUBAGENT_BG_SHELL_MAX_MS` | 已在 v2.1.260 中移除,现在不起任何作用。此前用于限制[子代理](/docs/zh-CN/sub-agents)启动的[后台 shell 命令](/docs/zh-CN/interactive-mode#background-bash-commands)可运行的时长(毫秒),默认为 60 分钟。请参阅[后台命令生命周期规则](/docs/zh-CN/tools-reference#background-commands) |

453| `DEBUG` | 设置为 `1` 可启用调试模式,等同于使用 [`--debug`](/docs/zh-CN/cli-reference#cli-flags) 启动。调试日志会写入 `~/.claude/debug/<session-id>.txt`,或写入 `CLAUDE_CODE_DEBUG_LOGS_DIR` 设置的路径。只有真值 `1`、`true`、`yes` 和 `on` 才会启用调试模式,因此为其他工具设置的命名空间模式(如 `DEBUG=express:*`)不会触发它 |457| `DEBUG` | 设置为 `1` 可启用调试模式,等同于使用 [`--debug`](/docs/zh-CN/cli-reference#cli-flags) 启动。调试日志会写入 `~/.claude/debug/<session-id>.txt`,或写入 `CLAUDE_CODE_DEBUG_LOGS_DIR` 设置的路径。只有真值 `1`、`true`、`yes` 和 `on` 才会启用调试模式,因此为其他工具设置的命名空间模式(如 `DEBUG=express:*`)不会触发它 |

454| `DISABLE_AUTOUPDATER` | 设置为 `1` 可禁用自动后台更新。手动 `claude update` 仍然有效。使用 `DISABLE_UPDATES` 可同时阻止两者 |458| `DISABLE_AUTOUPDATER` | 设置为 `1` 可禁用自动后台更新。手动 `claude update` 仍然有效。使用 `DISABLE_UPDATES` 可同时阻止两者 |

455| `DISABLE_AUTO_COMPACT` | 设置为 `1` 可禁用接近上下文限制时的自动压缩。手动 `/compact` 命令仍然可用。适用于您希望明确控制何时进行压缩的情况。覆盖 [`autoCompactEnabled`](/docs/zh-CN/settings-reference#autocompactenabled) 设置 |459| `DISABLE_AUTO_COMPACT` | 设置为 `1` 可禁用接近上下文限制时的自动压缩,以及[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction)。手动 `/compact` 命令仍然可用。适用于您希望明确控制何时进行压缩的情况。覆盖 [`autoCompactEnabled`](/docs/zh-CN/settings-reference#autocompactenabled) 设置 |

456| `DISABLE_COMPACT` | 设置为 `1` 可禁用所有压缩:包括自动压缩和手动 `/compact` 命令 |460| `DISABLE_COMPACT` | 设置为 `1` 可禁用所有压缩:包括自动压缩和手动 `/compact` 命令 |

457| `DISABLE_COST_WARNINGS` | 设置为 `1` 可禁用费用警告消息 |461| `DISABLE_COST_WARNINGS` | 设置为 `1` 可禁用费用警告消息 |

458| `DISABLE_DOCTOR_COMMAND` | 设置为 `1` 可隐藏 [`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查 skill 及其 `/checkup` 别名。适用于不应让用户在会话中运行设置诊断的托管部署。不影响 `claude doctor` 终端命令。在 v2.1.205 之前,此变量会隐藏 `/doctor` 诊断界面命令 |462| `DISABLE_DOCTOR_COMMAND` | 设置为 `1` 可隐藏 [`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查 skill 及其 `/checkup` 别名。适用于不应让用户在会话中运行设置诊断的托管部署。不影响 `claude doctor` 终端命令。在 v2.1.205 之前,此变量会隐藏 `/doctor` 诊断界面命令 |


478| `ENABLE_CLAUDEAI_MCP_SERVERS` | 设置为 `false` 可阻止 Claude Code 获取 [claude.ai MCP 服务器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)。对已登录用户默认启用。如需按项目或按组织禁用,请改为在设置中设置 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) |482| `ENABLE_CLAUDEAI_MCP_SERVERS` | 设置为 `false` 可阻止 Claude Code 获取 [claude.ai MCP 服务器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)。对已登录用户默认启用。如需按项目或按组织禁用,请改为在设置中设置 [`disableClaudeAiConnectors`](/docs/zh-CN/settings-reference#disableclaudeaiconnectors) |

479| `ENABLE_PROMPT_CACHING_1H` | 设置为 `1` 可请求 1 小时的[提示缓存 TTL](/docs/zh-CN/prompt-caching#cache-lifetime),而不是默认的 5 分钟。适用于 API 密钥、[Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai)、[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 用户。在包含用量范围内的订阅用户会在[主对话](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)上自动获得 1 小时 TTL。正在使用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)的订阅用户可以设置此变量以保留 1 小时 TTL。1 小时缓存写入按更高费率计费。如需改为按请求类别选择 TTL,请使用 `CLAUDE_CODE_PROMPT_CACHE_TTL` 和 `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`,它们优先于此变量 |483| `ENABLE_PROMPT_CACHING_1H` | 设置为 `1` 可请求 1 小时的[提示缓存 TTL](/docs/zh-CN/prompt-caching#cache-lifetime),而不是默认的 5 分钟。适用于 API 密钥、[Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai)、[Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 用户。在包含用量范围内的订阅用户会在[主对话](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)上自动获得 1 小时 TTL。正在使用[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)的订阅用户可以设置此变量以保留 1 小时 TTL。1 小时缓存写入按更高费率计费。如需改为按请求类别选择 TTL,请使用 `CLAUDE_CODE_PROMPT_CACHE_TTL` 和 `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`,它们优先于此变量 |

480| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | 已弃用。请改用 `ENABLE_PROMPT_CACHING_1H` |484| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | 已弃用。请改用 `ENABLE_PROMPT_CACHING_1H` |

481| `ENABLE_TOOL_SEARCH` | 控制 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)。未设置时,Claude Code 默认延迟加载所有 MCP 工具。但在 Google Cloud's Agent Platform 上早于 Claude 4.5 代的模型、托管在 Azure 上的 Microsoft Foundry 部署,以及 `ANTHROPIC_BASE_URL` 指向非第一方主机时,它仍会预先加载这些工具。`true` 始终延迟加载并发送 beta 标头,但上述 Agent Platform 模型和 Microsoft Foundry 部署除外;在不支持 `tool_reference` 的代理上,请求会失败。`auto` 在工具定义占上下文 10% 以内时预先加载。`auto:N` 设置自定义阈值,例如 `auto:5` 表示 5%。`false` 预先加载所有工具。设置了 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` 时,您自行设置的值会被忽略。在 v2.1.221 之前,除非您将此变量设置为 `true`,否则 Claude Code 会在 Google Cloud's Agent Platform 上为所有模型禁用工具搜索 |485| `ENABLE_TOOL_SEARCH` | 控制 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)。未设置时,Claude Code 默认延迟加载所有 MCP 工具,而当 `ANTHROPIC_BASE_URL` 指向非第一方主机时则改为预先加载。`true` 会使它们在此类主机上也保持延迟加载。`auto` 在工具定义所占上下文不超过 10% 时预先加载。`auto:N` 设置自定义阈值,例如 `auto:5` 表示 5%。`false` 会预先加载所有工具。有关无论此值如何都会预先加载所有工具的模型和部署,请参阅[配置工具搜索](/docs/zh-CN/mcp#configure-tool-search) |

482| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | 设置为任意非空值(例如 `1`),可在未配置备用模型时,让 Claude Code 对所有模型在重复出现过载错误时停止重试。与大多数开/关变量不同,**将其设置为 `0` 或 `false` 仍会启用此行为**;取消设置该变量即可恢复默认的重试行为。如果不设置此变量,当您使用 API 密钥或[第三方提供商](/docs/zh-CN/third-party-integrations)而非 Claude 订阅进行身份验证时,Claude Code 仅在其识别为 Opus、Fable 或 Mythos 的模型上以这种方式停止重试。在 Claude Code v2.1.160 或更高版本中,对于任何主模型,Claude Code 都会在重复出现过载错误时切换到您配置的[备用模型链](/docs/zh-CN/model-config#fallback-model-chains),因此此变量不影响切换到备用模型 |486| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | 设置为任意非空值(例如 `1`),可在未配置备用模型时,让 Claude Code 对所有模型在重复出现过载错误时停止重试。与大多数开/关变量不同,**将其设置为 `0` 或 `false` 仍会启用此行为**;取消设置该变量即可恢复默认的重试行为。如果不设置此变量,当您使用 API 密钥或[第三方提供商](/docs/zh-CN/third-party-integrations)而非 Claude 订阅进行身份验证时,Claude Code 仅在其识别为 Opus、Fable 或 Mythos 的模型上以这种方式停止重试。在 Claude Code v2.1.160 或更高版本中,对于任何主模型,Claude Code 都会在重复出现过载错误时切换到您配置的[备用模型链](/docs/zh-CN/model-config#fallback-model-chains),因此此变量不影响切换到备用模型 |

483| `FORCE_AUTOUPDATE_PLUGINS` | 设置为 `1` 可在主自动更新程序已通过 `DISABLE_AUTOUPDATER` 禁用时仍强制插件自动更新 |487| `FORCE_AUTOUPDATE_PLUGINS` | 设置为 `1` 可在主自动更新程序已通过 `DISABLE_AUTOUPDATER` 禁用时仍强制插件自动更新 |

484| `FORCE_HYPERLINK` | 设置为 `1` 可在您的终端支持可点击的 OSC 8 超链接但未被自动检测到时启用它们,设置为 `0` 可禁用它们。未设置时,Claude Code 仅在检测到终端支持时启用超链接。Claude Code 将此值解析为数字而非布尔值,因此 `false`、`no` 或 `off` 之类的值会启用超链接,而不是禁用它们。即使 Claude Code 无法检测到终端支持(例如通过 SSH 时),页脚的 [PR 或合并请求徽章](/docs/zh-CN/interactive-mode#pr-review-status)也会渲染为超链接。设置为 `0` 可将该徽章渲染为纯文本 |488| `FORCE_HYPERLINK` | 设置为 `1` 可在您的终端支持可点击的 OSC 8 超链接但未被自动检测到时启用它们,设置为 `0` 可禁用它们。未设置时,Claude Code 仅在检测到终端支持时启用超链接。Claude Code 将此值解析为数字而非布尔值,因此 `false`、`no` 或 `off` 之类的值会启用超链接,而不是禁用它们。即使 Claude Code 无法检测到终端支持(例如通过 SSH 时),页脚的 [PR 或合并请求徽章](/docs/zh-CN/interactive-mode#pr-review-status)也会渲染为超链接。设置为 `0` 可将该徽章渲染为纯文本 |


593* 运行 [`claude import` 或 `/import` 命令](/docs/zh-CN/cli-reference#cli-commands)597* 运行 [`claude import` 或 `/import` 命令](/docs/zh-CN/cli-reference#cli-commands)

594* 运行 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills) 或在 `/plugin` 的 **Stats** 选项卡中打开其报告598* 运行 [`/skill-doctor`](/docs/zh-CN/skills#find-unused-skills) 或在 `/plugin` 的 **Stats** 选项卡中打开其报告

595* 将您的 claude.ai 账户中启用的 [skill](/docs/zh-CN/skills#where-synced-skills-load) 和[插件](/docs/zh-CN/plugins/loading#synced-plugins)同步到终端会话中599* 将您的 claude.ai 账户中启用的 [skill](/docs/zh-CN/skills#where-synced-skills-load) 和[插件](/docs/zh-CN/plugins/loading#synced-plugins)同步到终端会话中

600* 启用 [You should know mod](/docs/zh-CN/interactive-mode#you-should-know-suggestions)

596* 使用 [advisor 工具](/docs/zh-CN/advisor#requirements)601* 使用 [advisor 工具](/docs/zh-CN/advisor#requirements)

597* 阅读或回复 [Artifact 上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)602* 阅读或回复 [Artifact 上的评论](/docs/zh-CN/artifacts#collect-comments-on-an-artifact)

598* 让 Claude 读取[其他组织的公开 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you)603* 让 Claude 读取[其他组织的公开 Artifact](/docs/zh-CN/artifacts#read-an-artifact-shared-with-you)


600* 获得 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),该功能由 Claude Code 通过获取的标志启用605* 获得 [Claude 起草的反馈](/docs/zh-CN/tools-reference#sendfeedback-tool-behavior),该功能由 Claude Code 通过获取的标志启用

601* 让 Claude [将大段粘贴内容视为粘贴而非键入的文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text);`[Pasted text #N]` 占位符背后的内容将以无标记形式传给 Claude606* 让 Claude [将大段粘贴内容视为粘贴而非键入的文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text);`[Pasted text #N]` 占位符背后的内容将以无标记形式传给 Claude

602* 让 Claude Code [排除其输入 schema 会被 API 拒绝的 MCP 工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas);它仍会发送该 schema,包含该 schema 的请求会失败,并返回[按位置指明该工具的 400 错误](/docs/zh-CN/errors#tool-input-schema-is-invalid)607* 让 Claude Code [排除其输入 schema 会被 API 拒绝的 MCP 工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas);它仍会发送该 schema,包含该 schema 的请求会失败,并返回[按位置指明该工具的 400 错误](/docs/zh-CN/errors#tool-input-schema-is-invalid)

608* 让 Claude Code [在终端会话空闲时压缩较长的对话](/docs/zh-CN/settings-reference#idlecompaction),时机为一小时的提示词缓存即将过期前不久

603 609 

604<h3 id="first-session-after-an-install-or-upgrade">610<h3 id="first-session-after-an-install-or-upgrade">

605 安装或升级后的首个会话611 安装或升级后的首个会话

errors.md +161 −10

Details

134| `proxy refused the connection` | [网络](#the-proxy-refused-the-connection) |134| `proxy refused the connection` | [网络](#the-proxy-refused-the-connection) |

135| `403` with `GitHub GraphQL is not available from Claude Code sessions` in a cloud session | [GitHub proxy](/docs/zh-CN/cloud-environments#github-proxy) |135| `403` with `GitHub GraphQL is not available from Claude Code sessions` in a cloud session | [GitHub proxy](/docs/zh-CN/cloud-environments#github-proxy) |

136| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [网络](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |136| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [网络](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |

137| `Failed to fetch session from Sessions API: Failed to fetch session logs` | [网络](#failed-to-fetch-session-from-sessions-api) |

137| `Couldn't reconnect to your Remote Control session` | [网络](#couldnt-reconnect-to-your-remote-control-session) |138| `Couldn't reconnect to your Remote Control session` | [网络](#couldnt-reconnect-to-your-remote-control-session) |

138| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [网络](#sessions-ended-while-this-machine-was-offline) |139| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [网络](#sessions-ended-while-this-machine-was-offline) |

139| `Couldn't share the transcript.` | [网络](#couldnt-share-the-transcript) |140| `Couldn't share the transcript.` | [网络](#couldnt-share-the-transcript) |


153| `Request too large for the API's 32MB request limit` | [请求错误](#request-too-large) |154| `Request too large for the API's 32MB request limit` | [请求错误](#request-too-large) |

154| `Image was too large` | [请求错误](#image-was-too-large) |155| `Image was too large` | [请求错误](#image-was-too-large) |

155| `Unable to resize image` | [请求错误](#unable-to-resize-image) |156| `Unable to resize image` | [请求错误](#unable-to-resize-image) |

157| `Request rejected as unprocessable by the model` | [请求错误](#request-rejected-as-unprocessable-by-the-model) |

156| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [请求错误](#pdf-errors) |158| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [请求错误](#pdf-errors) |

157| `Extra inputs are not permitted` | [请求错误](#extra-inputs-are-not-permitted) |159| `Extra inputs are not permitted` | [请求错误](#extra-inputs-are-not-permitted) |

158| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [请求错误](#tool-input-schema-is-invalid) |160| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [请求错误](#tool-input-schema-is-invalid) |

161| `Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128` | [请求错误](#mcp-tool-name-over-128-characters) |

162| `tools.N.custom.name: String should have at most 128 characters` | [请求错误](#mcp-tool-name-over-128-characters) |

159| `tool_use.name: String should have at most 200 characters` | [请求错误](#tool-use-name-over-200-characters) |163| `tool_use.name: String should have at most 200 characters` | [请求错误](#tool-use-name-over-200-characters) |

160| `There's an issue with the selected model` | [请求错误](#theres-an-issue-with-the-selected-model) |164| `There's an issue with the selected model` | [请求错误](#theres-an-issue-with-the-selected-model) |

161| `Model ... is not a recognized model id` | [请求错误](#model-is-not-a-recognized-model-id) |165| `Model ... is not a recognized model id` | [请求错误](#model-is-not-a-recognized-model-id) |


198| `Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.` | [命令行错误](#conflict-between-a-system-prompt-flag-and-its-file-form) |202| `Error: Cannot use both --append-subagent-system-prompt and --append-subagent-system-prompt-file. Please use only one.` | [命令行错误](#conflict-between-a-system-prompt-flag-and-its-file-form) |

199| `Cloud sessions cannot be created from a --restricted session` | [命令行错误](#cloud-sessions-cannot-be-created-from-a-restricted-session) |203| `Cloud sessions cannot be created from a --restricted session` | [命令行错误](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

200| `Cloud sessions are disabled by your organization's policy` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |204| `Cloud sessions are disabled by your organization's policy` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |

201| `Couldn't verify your organization's policy for cloud sessions` | [命令行错误](#cloud-sessions-are-disabled-by-your-organizations-policy) |205| `Cloud sessions use your claude.ai login`,出现在指明某个凭据的策略拒绝消息末尾 | [命令行错误](#cloud-sessions-use-your-claude-ai-login) |

206| `Couldn't verify your organization's policy for cloud sessions` | [命令行错误](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |

207| `Cloud sessions aren't available:`,后跟无法加载您组织策略的原因 | [命令行错误](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |

202| `Cloud sessions need a claude.ai sign-in` | [无法获取组织 UUID](/docs/zh-CN/claude-code-on-the-web#unable-to-get-organization-uuid) |208| `Cloud sessions need a claude.ai sign-in` | [无法获取组织 UUID](/docs/zh-CN/claude-code-on-the-web#unable-to-get-organization-uuid) |

209| `Nothing was stashed: "<path>" is now a folder in place of a tracked file or link` / `are now folders in place of tracked files or links` | [命令行错误](#nothing-was-stashed-because-a-folder-replaced-a-tracked-file) |

203| `Error: --json-schema is not a valid JSON Schema` | [命令行错误](#the-json-schema-value-is-not-a-valid-json-schema) |210| `Error: --json-schema is not a valid JSON Schema` | [命令行错误](#the-json-schema-value-is-not-a-valid-json-schema) |

204| `Error: Invalid --agents configuration:` | [命令行错误](#invalid-agents-configuration) |211| `Error: Invalid --agents configuration:` | [命令行错误](#invalid-agents-configuration) |

205| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [命令行错误](#invalid-agents-configuration) |212| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [命令行错误](#invalid-agents-configuration) |


259| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [命令行错误](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |266| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [命令行错误](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |

260| `/recap only runs when you ask for it yourself in this session` | [命令行错误](#recap-only-runs-when-you-ask-for-it-yourself) |267| `/recap only runs when you ask for it yourself in this session` | [命令行错误](#recap-only-runs-when-you-ask-for-it-yourself) |

261| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Plugin 错误](#plugin-eval-is-currently-in-early-access) |268| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Plugin 错误](#plugin-eval-is-currently-in-early-access) |

269| `cannot be evaluated where sessions load it` | [使用 evals 测试插件](/docs/zh-CN/plugin-evals#cannot-be-evaluated-where-sessions-load-it) |

262| `Marketplace "<name>" is registered from an untrusted source` | [Plugin 错误](#marketplace-is-registered-from-an-untrusted-source) |270| `Marketplace "<name>" is registered from an untrusted source` | [Plugin 错误](#marketplace-is-registered-from-an-untrusted-source) |

263| `Claude Code refuses the marketplace name "<name>"` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |271| `Claude Code refuses the marketplace name "<name>"` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |

264| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |272| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin 错误](#claude-code-refuses-the-marketplace-name) |


358| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [全屏渲染](/docs/zh-CN/fullscreen#fullscreen-renderer-didnt-finish-starting) |366| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [全屏渲染](/docs/zh-CN/fullscreen#fullscreen-renderer-didnt-finish-starting) |

359| `Claude Code exited after an unrecoverable interface error (...)` | [配置警告](#exited-after-an-unrecoverable-interface-error) |367| `Claude Code exited after an unrecoverable interface error (...)` | [配置警告](#exited-after-an-unrecoverable-interface-error) |

360| `Agent descriptions are over the 15.0k-token limit` | [配置警告](#agent-descriptions-are-over-the-15000-token-limit) |368| `Agent descriptions are over the 15.0k-token limit` | [配置警告](#agent-descriptions-are-over-the-15000-token-limit) |

369| `hook needs quotes around a path with a space` | [配置警告](#hook-needs-quotes-around-a-path-with-a-space) |

361| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [配置警告](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |370| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [配置警告](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |

371| `N skill or command names refused: run with --debug to see which ([names]), rename, then restart` | [配置警告](#skill-or-command-name-refused) |

362| `Ignoring N permissions.allow entries from ... this workspace has not been trusted` | [配置警告](#workspace-has-not-been-trusted) |372| `Ignoring N permissions.allow entries from ... this workspace has not been trusted` | [配置警告](#workspace-has-not-been-trusted) |

363| `is a network path, which cannot be added as a working directory` | [配置警告](#working-directory-is-a-network-path) |373| `is a network path, which cannot be added as a working directory` | [配置警告](#working-directory-is-a-network-path) |

364| `Remote managed settings failed to load (<cause>)` | [配置警告](#remote-managed-settings-failed-to-load) |374| `Remote managed settings failed to load (<cause>)` | [配置警告](#remote-managed-settings-failed-to-load) |


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

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

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

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

450| [`API_TIMEOUT_MS`](/docs/zh-CN/env-vars) | 600000 | 每个请求的超时(毫秒)。为慢速网络或代理提高它。它还限制 Claude Code 等待响应头的时间,在 [No response from API](#no-response-from-api) 中描述。 |461| [`API_TIMEOUT_MS`](/docs/zh-CN/env-vars) | 600000 | 每个请求的超时(毫秒)。为慢速网络或代理提高它。它还限制 Claude Code 等待响应头的时间,在 [No response from API](#no-response-from-api) 中描述。 |

451| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/zh-CN/env-vars) | 未设置 | 超时的[非流式请求](#streaming-response-ended-before-any-complete-data-was-received)的重新发送次数限制。达到该限制时,请求失败。生成时间超过超时时间的 Claude 响应在每次重新发送时都会再次超时,因此请设置较低的数值(例如 `0`)以更快地失败。在本地会话中,每次非流式尝试在 300 秒后超时;当您为 `API_TIMEOUT_MS` 设置正值时,则在该值指定的时间后超时。需要 Claude Code v2.1.285 或更高版本。 |462| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/zh-CN/env-vars) | 未设置 | 超时的[非流式请求](#streaming-response-ended-before-any-complete-data-was-received)的重新发送次数限制。达到该限制时,请求失败。生成时间超过超时时间的 Claude 响应在每次重新发送时都会再次超时,因此请设置较低的数值(例如 `0`)以更快地失败。在本地会话中,每次非流式尝试在 300 秒后超时;当您为 `API_TIMEOUT_MS` 设置正值时,则在该值指定的时间后超时。需要 Claude Code v2.1.285 或更高版本。 |

452| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/zh-CN/env-vars) | 未设置 | 流式请求的第一个响应字节的截止时间(毫秒)。需要 Claude Code v2.1.242 或更高版本。对于当此未设置时 Claude Code 如何选择截止时间,请参阅 [No response from API](#no-response-from-api)。 |463| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/zh-CN/env-vars) | 未设置 | 流式请求的第一个响应字节的截止时间(毫秒)。需要 Claude Code v2.1.242 或更高版本。对于当此未设置时 Claude Code 如何选择截止时间,请参阅 [No response from API](#no-response-from-api)。 |


2045这些步骤更改您自己的环境之一。[组织共享环境](/docs/zh-CN/cloud-environments#organization-shared-environments)在选择器中以只读方式打开,因此请要求所有者从[管理设置](https://claude.ai/admin-settings)中的**云环境**页面更改其网络访问。2056这些步骤更改您自己的环境之一。[组织共享环境](/docs/zh-CN/cloud-environments#organization-shared-environments)在选择器中以只读方式打开,因此请要求所有者从[管理设置](https://claude.ai/admin-settings)中的**云环境**页面更改其网络访问。

2046 2057 

2047* 打开您的环境进行编辑,可以从[例程的表单](/docs/zh-CN/routines#environments-and-network-access)或从[环境选择器](/docs/zh-CN/cloud-environments#configure-your-environment)启动云会话。2058* 打开您的环境进行编辑,可以从[例程的表单](/docs/zh-CN/routines#environments-and-network-access)或从[环境选择器](/docs/zh-CN/cloud-environments#configure-your-environment)启动云会话。

2048* 在 **Edit environment** 对话框中,将 **Network access** 从 **Trusted** 更改为 **Custom**,然后将被阻止的域添加到 **Allowed domains**。每行输入一个域。勾选 **Also include default list of common package managers** 以将[默认允许列表](/docs/zh-CN/cloud-environments#default-allowed-domains)与您的自定义域保持在一起。如果您想要不受限制的访问,请改为选择 **Full**。2059* 在 **Edit cloud environment** 对话框中,将 **Network access** 从 **Trusted** 更改为 **Custom**,然后将被阻止的域添加到 **Allowed domains**。每行输入一个域。勾选 **Also include default list of common package managers** 以将[默认允许列表](/docs/zh-CN/cloud-environments#default-allowed-domains)与您的自定义域一起保留。如果您想要不受限制的访问,请改为选择 **Full**。

2049* 单击**保存更改**。下一次运行使用更新的允许列表。对于已打开的云会话,请参阅[网络访问更改何时到达现有会话](/docs/zh-CN/cloud-environments#network-access)。2060* 单击**保存更改**。下一次运行使用更新的允许列表。对于已打开的云会话,请参阅[网络访问更改何时到达现有会话](/docs/zh-CN/cloud-environments#network-access)。

2050 2061 

2051有关访问级别和默认允许列表,请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)。本地 CLI 会话不受此策略影响。2062有关访问级别和默认允许列表,请参阅[网络访问](/docs/zh-CN/cloud-environments#network-access)。本地 CLI 会话不受此策略影响。


2097 2108 

2098在 v2.1.236 之前,Claude Code 显示原始 JavaScript TypeError 而不是这些消息。2109在 v2.1.236 之前,Claude Code 显示原始 JavaScript TypeError 而不是这些消息。

2099 2110 

2111<h3 id="failed-to-fetch-session-from-sessions-api">

2112 Failed to fetch session from Sessions API

2113</h3>

2114 

2115此消息意味着 Claude Code 找到了[您要求拉取到终端中的云端会话](/docs/zh-CN/claude-code-on-the-web#from-cloud-to-terminal),但无法从 Anthropic 的服务器读取其对话历史,因此没有打开它:

2116 

2117```text theme={null}

2118Failed to fetch session from Sessions API: Failed to fetch session logs

2119```

2120 

2121您会在运行 `claude --teleport`、`/teleport` 或在 [`/tasks`](/docs/zh-CN/commands) 列表中选择该会话后看到它。`claude --teleport <session-id>` 会打印此消息并以代码 1 退出。

2122 

2123**要做什么:**

2124 

2125* 再次运行相同的 Teleport 操作。如果以相同方式失败,请[报告该问题](#report-an-error)

2126 

2127在 v2.1.296 之前,Claude Code 不会重试失败的读取,并且在读取失败后可能会以空对话打开该会话并报告成功,而不是打印此消息。

2128 

2100<h3 id="couldnt-reconnect-to-your-remote-control-session">2129<h3 id="couldnt-reconnect-to-your-remote-control-session">

2101 无法重新连接到您的 Remote Control 会话2130 无法重新连接到您的 Remote Control 会话

2102</h3>2131</h3>


2344* 如果消息报告尺寸或大小限制,请在附加之前将图像调整或重新压缩到该限制以下。2373* 如果消息报告尺寸或大小限制,请在附加之前将图像调整或重新压缩到该限制以下。

2345* 如果消息命名原因,例如 CMYK JPEG、动画 WebP 或可能损坏的文件,请以消息建议的格式重新保存图像并再次附加。2374* 如果消息命名原因,例如 CMYK JPEG、动画 WebP 或可能损坏的文件,请以消息建议的格式重新保存图像并再次附加。

2346 2375 

2376<h3 id="request-rejected-as-unprocessable-by-the-model">

2377 Request rejected as unprocessable by the model

2378</h3>

2379 

2380API 以模型无法处理为由拒绝了请求。该消息是 API 自身的消息。

2381 

2382```text theme={null}

2383API Error: 400 Request rejected as unprocessable by the model (too many or oversized images, or unsupported parameters)

2384```

2385 

2386Claude Code 可以从被拒绝的请求中移除最早的图片和文档并重新发送。在 v2.1.290 之前,Claude Code 在遇到此拒绝时不会移除图片,因此累积了数百张图片的长会话可能在每个轮次都以此错误失败。

2387 

2388**解决方法:**

2389 

2390* 如果该消息在包含图片或文档的对话中反复出现,请自行移除它们。按两次 Esc 回退到添加它们的轮次之前,或运行 `/clear` 重新开始。

2391 

2347<h3 id="pdf-errors">2392<h3 id="pdf-errors">

2348 PDF 错误2393 PDF 错误

2349</h3>2394</h3>


2413* 删除或[禁用](/docs/zh-CN/mcp#disable-a-server-without-removing-it)声明无效 schema 的 MCP 服务器。该错误仅按位置命名工具。在 v2.1.216 或更高版本上,检查每个服务器的日志,查找命名其输入 schema 会被拒绝的工具的行。如果没有日志命名一个,一次禁用一个服务器。2458* 删除或[禁用](/docs/zh-CN/mcp#disable-a-server-without-removing-it)声明无效 schema 的 MCP 服务器。该错误仅按位置命名工具。在 v2.1.216 或更高版本上,检查每个服务器的日志,查找命名其输入 schema 会被拒绝的工具的行。如果没有日志命名一个,一次禁用一个服务器。

2414* 如果您维护服务器,请修复工具的 `input_schema`。schema 必须是有效的 JSON Schema,顶级属性名称必须为 1 到 64 个字符长,并仅使用 ASCII 字母和数字、`_`、`.` 和 `-`。请参阅[具有无效输入 schema 的工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas)。2459* 如果您维护服务器,请修复工具的 `input_schema`。schema 必须是有效的 JSON Schema,顶级属性名称必须为 1 到 64 个字符长,并仅使用 ASCII 字母和数字、`_`、`.` 和 `-`。请参阅[具有无效输入 schema 的工具](/docs/zh-CN/mcp#tools-with-invalid-input-schemas)。

2415 2460 

2461<h3 id="mcp-tool-name-over-128-characters">

2462 MCP 工具名称超过 128 个字符

2463</h3>

2464 

2465MCP 服务器列出了一个工具,其完整名称(例如 `mcp__<server>__<tool>`)超过了 API 接受的 128 个字符。Claude Code [会将该工具排除在发送给 Claude 的工具之外](/docs/zh-CN/mcp#tools-with-names-longer-than-128-characters),该服务器的其他工具仍可正常工作。在您从 shell 中使用 `claude --debug` 启动的会话中,Claude Code 会将以下消息写入位于 `~/.claude/debug/<session-id>.txt` 的调试日志:

2466 

2467```text theme={null}

2468Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128

2469```

2470 

2471**要做什么:**

2472 

2473* 如果您维护该服务器,请缩短该工具的名称。

2474* 如果该服务器位于您的 [MCP 配置](/docs/zh-CN/mcp#mcp-installation-scopes)中,请在那里为其指定一个更短的名称,例如用 `db` 代替 `analytics-database`。然后更新通过旧名称引用该服务器或其工具的内容,例如[权限规则](/docs/zh-CN/permissions#mcp)和 [hook 匹配器](/docs/zh-CN/hooks#match-mcp-tools)。

2475* 如果[插件捆绑了该服务器](/docs/zh-CN/mcp#plugin-provided-mcp-servers),工具的完整名称还会包含插件名称。请让插件的维护者缩短服务器或工具名称。

2476 

2477在 v2.1.292 之前,Claude Code 仍会发送该工具,API 会拒绝包含它的每个请求,并显示 `API Error: 400 ... tools.N.custom.name: String should have at most 128 characters`。

2478 

2416<h3 id="tool-use-name-over-200-characters">2479<h3 id="tool-use-name-over-200-characters">

2417 tool\_use.name 超过 200 个字符2480 tool\_use.name 超过 200 个字符

2418</h3>2481</h3>


3022 3085 

3023当您[从终端创建云端会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)时,以及当您提交需要云端会话的命令(例如 `/teleport`、`/remote-env` 或 `/web-setup`)时,会出现此消息。在 v2.1.268 之前,提交这些命令之一会返回 [`Unknown command`](#unknown-command)。3086当您[从终端创建云端会话](/docs/zh-CN/claude-code-on-the-web#from-terminal-to-cloud)时,以及当您提交需要云端会话的命令(例如 `/teleport`、`/remote-env` 或 `/web-setup`)时,会出现此消息。在 v2.1.268 之前,提交这些命令之一会返回 [`Unknown command`](#unknown-command)。

3024 3087 

3025这是服务器端的组织策略,因此无法通过本地设置、环境变量或 CLI 标志覆盖。3088如果消息中改为指出此会话正在使用的某个凭据,并以 `Cloud sessions use your claude.ai login.` 结尾,请参阅 [Cloud sessions use your claude.ai login](#cloud-sessions-use-your-claude-ai-login)。如果 Claude Code 完全无法加载您组织的策略,您会看到[另一条消息](#couldnt-verify-your-organizations-policy-for-cloud-sessions)。

3026 

3027如果 Claude Code 尚未加载您组织的策略或无法获取该策略,这些命令会改为回复 `Couldn't verify your organization's policy for cloud sessions. Check your network connection, then restart Claude Code and try again.`。

3028 3089 

3029**解决方法:**3090**解决方法:**

3030 3091 

3031* 请您组织中的 [Owner](/docs/zh-CN/server-managed-settings#access-control) 在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 的 Claude Code 管理设置中启用云端会话3092* 请您组织中的 [Owner](/docs/zh-CN/server-managed-settings#access-control) 在 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 的 Claude Code 管理设置中启用云端会话

3032* 如果消息提示无法验证策略,请检查您的网络连接,然后重新启动 Claude Code 并重试3093 

3094<h3 id="cloud-sessions-use-your-claude-ai-login">

3095 Cloud sessions use your claude.ai login

3096</h3>

3097 

3098当[策略拒绝消息](#cloud-sessions-are-disabled-by-your-organizations-policy)指出此会话正在使用的某个凭据并以这句话结尾时,说明 Claude Code 检查的是签发该凭据的组织的云端会话策略。该组织可能与您的 claude.ai 登录所属的组织不同:

3099 

3100```text theme={null}

3101Cloud sessions are disabled by your organization's policy. This session is using ANTHROPIC_API_KEY, so Claude Code checked the policy for the organization that key belongs to. Cloud sessions use your claude.ai login.

3102```

3103 

3104最后一句话表示云端会话使用的是您的 claude.ai 登录,而不是该凭据。当您从 shell 启动、恢复云端会话或向其发送消息时(例如使用 `--cloud` 或 `--teleport`),会出现这种形式。在 v2.1.296 之前,这种情况下 Claude Code 也会打印提示您联系组织管理员的那种形式。

3105 

3106<h3 id="couldnt-verify-your-organizations-policy-for-cloud-sessions">

3107 Couldn't verify your organization's policy for cloud sessions

3108</h3>

3109 

3110这些消息表示 Claude Code 无法加载您组织的策略,而它在创建、恢复[云端会话](/docs/zh-CN/claude-code-on-the-web)或向其发送消息之前都会检查该策略。当策略请求尚未完成时,消息为:

3111 

3112```text theme={null}

3113Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.

3114```

3115 

3116在会话内部,需要云端会话的命令(例如 `/teleport` 或 `/web-setup`)也会给出此消息。即使您的 shell 会打印 `Cloud sessions aren't available:` 形式的消息,它也会给出此消息,并且其第二句为 `Check your network connection, then restart Claude Code and try again.`

3117 

3118一旦策略请求失败,消息会说明失败的原因。这适用于您使用 `--cloud` 或 `--teleport` 等标志从 shell 启动、恢复云端会话或向其发送消息的情况。当无法连接到 API 时,消息为:

3119 

3120```text theme={null}

3121Cloud sessions aren't available: couldn't reach api.anthropic.com to load your organization's policy. Check your network or proxy.

3122```

3123 

3124其他失败情况以相同的开头加上各自的原因,例如代理以 HTTP 403 拒绝了请求、服务器错误,或 API 不接受的凭据。当 API 不接受此会话用来代替您的 claude.ai 登录的凭据(例如 `ANTHROPIC_API_KEY` 环境变量)时,消息还可能指出该凭据并提示您取消设置它:

3125 

3126```text theme={null}

3127Cloud sessions aren't available: api.anthropic.com didn't accept this session's credentials when Claude Code asked for your organization's policy. Cloud sessions use your claude.ai login. ANTHROPIC_API_KEY is set, so this session is using API-key auth — unset it (or run in a shell without it) to use cloud sessions.

3128```

3129 

3130在 v2.1.296 之前,这些失败情况也会打印 `Couldn't verify` 消息。

3131 

3132**解决方法:**

3133 

3134* 对于 `Couldn't verify` 消息,请检查网络连接后重试。如果在会话内部,请先重启 Claude Code

3135* 对于 `Cloud sessions aren't available:` 消息,请根据其原因采取相应措施,例如检查代理或取消设置其指出的凭据,然后再次运行该命令

3136 

3137<h3 id="nothing-was-stashed-because-a-folder-replaced-a-tracked-file">

3138 Nothing was stashed because a folder replaced a tracked file

3139</h3>

3140 

3141此消息表示您检出中原本是 git 跟踪文件或链接的位置,现在是一个文件夹。它会在您将[云端会话](/docs/zh-CN/claude-code-on-the-web#from-cloud-to-terminal)拉取到终端(例如使用 `claude --teleport` 或 `/teleport`)时选择 stash 选项后出现。对这种状态执行 stash 可能会删除文件夹中的文件,因此 Claude Code 会拒绝 stash,并保持您的检出和索引不变:

3142 

3143```text wrap theme={null}

3144Error: Nothing was stashed: "f" is now a folder in place of a tracked file or link, and stashing could delete what's in it for good. Commit the change or move the folder somewhere else, then try again.

3145```

3146 

3147**解决方法:**

3148 

3149* 按照消息所述,提交该更改或将文件夹移到其他位置,然后再次运行 teleport

3033 3150 

3034<h3 id="the-json-schema-value-is-not-a-valid-json-schema">3151<h3 id="the-json-schema-value-is-not-a-valid-json-schema">

3035 `--json-schema` 的值不是有效的 JSON Schema3152 `--json-schema` 的值不是有效的 JSON Schema


3427 3544 

3428对于任何[注入动态上下文](/docs/zh-CN/skills#when-an-injected-command-fails)的 skill,Claude Code 都会显示相同的错误,注入的命令失败会中止该 skill 的调用。还有两条相关字符串会在命令运行之前就触发:3545对于任何[注入动态上下文](/docs/zh-CN/skills#when-an-injected-command-fails)的 skill,Claude Code 都会显示相同的错误,注入的命令失败会中止该 skill 的调用。还有两条相关字符串会在命令运行之前就触发:

3429 3546 

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

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

3432 3549 

3433**解决方法:**3550**解决方法:**


3577 3694 

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

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

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

3581 3698 

3582**解决方法:**3699**解决方法:**

3583 3700 


3835 Claude Code couldn't restart3952 Claude Code couldn't restart

3836</h3>3953</h3>

3837 3954 

3838Claude Code 正在重启,例如在您运行 [`/tui`](/docs/zh-CN/fullscreen#enable-fullscreen-rendering) 后切换到全屏渲染或从全屏渲染切换回来。它关闭了会话,但无法启动新进程,因此打印了以下消息并以状态 1 退出:3955当此消息表示您的对话已保存时,对话已存储在磁盘上,您可以从中断处继续。Claude Code 正在重启自身,例如在您运行 [`/tui`](/docs/zh-CN/fullscreen#enable-fullscreen-rendering) 后切换到全屏渲染或从全屏渲染切换回来,但无法启动新进程,因此以状态 1 退出:

3839 3956 

3840```text theme={null}3957```text theme={null}

3841Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.3958Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.


3845 3962 

3846**解决方法:**3963**解决方法:**

3847 3964 

3848* 在 shell 中从同一目录再次运行 `claude`。如果消息表示您的对话已保存,请在新会话中运行 [`/resume`](/docs/zh-CN/sessions#resume-a-session) 并选择该对话3965* 在 shell 中再次运行 `claude`。如果消息表示您的对话已保存,请在新会话中运行 [`/resume`](/docs/zh-CN/sessions#resume-a-session) 并选择该对话。如果它不在列表中,请[扩大会话选择器的范围](/docs/zh-CN/sessions#where-the-session-picker-looks)

3849* 如果重启持续失败,请在 shell 中使用 [`claude --debug-file claude-debug.log`](/docs/zh-CN/cli-reference#cli-flags) 启动 Claude Code。如果从该会话重启失败,您启动时所在目录中的 `claude-debug.log` 会记录一行包含操作系统错误的 `Failed to relaunch:`。[报告问题](#report-an-error)时请附上该行3966* 如果重启持续失败,请在 shell 中使用 [`claude --debug-file claude-debug.log`](/docs/zh-CN/cli-reference#cli-flags) 启动 Claude Code。如果从该会话重启失败,您启动时所在目录中的 `claude-debug.log` 会记录一行包含操作系统错误的 `Failed to relaunch:`。[报告问题](#report-an-error)时请附上该行

3850 3967 

3851<h3 id="couldnt-open-claude-desktop">3968<h3 id="couldnt-open-claude-desktop">


5366* 缩短您的 Agent 文件的 `description` frontmatter,或要求 Claude 为您修剪它们。5483* 缩短您的 Agent 文件的 `description` frontmatter,或要求 Claude 为您修剪它们。

5367* 删除您不再使用的 Agent 文件。5484* 删除您不再使用的 Agent 文件。

5368 5485 

5486<h3 id="hook-needs-quotes-around-a-path-with-a-space">

5487 Hook needs quotes around a path with a space

5488</h3>

5489 

5490对话视图中的此通知表示某个 hook 的脚本未运行,因为其路径包含空格且未加引号。该 hook 是 shell 形式的 [`asyncRewake`](/docs/zh-CN/hooks#run-hooks-in-the-background) hook。在其 `command` 中,诸如 `python3` 的解释器后跟一个未加引号的路径占位符,而解析后的路径包含空格。

5491 

5492通知以该 hook 的事件名称开头,并命名该脚本:

5493 

5494```text theme={null}

5495Stop hook needs quotes around a path with a space (check.py)

5496```

5497 

5498**要做什么:**

5499 

5500* 在运行通知所命名脚本的 hook 的 `command` 中,用双引号将路径括起来。在 JSON 文件中,将其写为 `"command": "python3 \"${CLAUDE_PLUGIN_ROOT}/hooks/check.py\""`。

5501 

5369<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">5502<h3 id="a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved">

5370 skill、命令或工作流未被加载,因为其名称是保留的5503 skill、命令或工作流未被加载,因为其名称是保留的

5371</h3>5504</h3>


5386 5519 

5387在 v2.1.282 之前,Claude Code 加载具有这些名称的 skill 和命令。5520在 v2.1.282 之前,Claude Code 加载具有这些名称的 skill 和命令。

5388 5521 

5522<h3 id="skill-or-command-name-refused">

5523 Skill or command name refused

5524</h3>

5525 

5526此启动通知表示 Claude Code 拒绝了至少一个 [skill 或自定义命令](/docs/zh-CN/skills)的名称,因此它未被加载,或在没有其 `name` 字段的情况下加载:

5527 

5528```text theme={null}

55291 skill or command name refused: run with --debug to see which ([names]), rename, then restart — a name may not hold hidden, direction-changing or blank-like characters, < or >, or be over 256 characters

5530```

5531 

5532* **未加载**:Claude Code 拒绝了 skill 或命令所使用的名称,例如其目录名称,或命令文件的名称或子文件夹。它不会出现在 `/` 菜单中,Claude 也无法调用它。它在调试日志中的行显示为 `<name> is not offered`。

5533* **`name` 字段被忽略**:Claude Code 拒绝了 skill 的 frontmatter `name`。该 skill 仍会加载,但 `/` 菜单不显示该 `name` 值,输入它也不会调用该 skill。它在调试日志中的行显示为 `<name value> is not shown for <skill>`。

5534 

5535**要做什么:**

5536 

5537* 从 shell 使用 `claude --debug` 启动 Claude Code,并在[调试日志](/docs/zh-CN/debug-your-config)中搜索 `[names]`。通知计数的每个名称在其中都有一行。该行会将某些隐藏字符写成代码,例如用 `\u{200B}` 表示零宽空格,以便您看到它们的位置。

5538* 通过重命名文件夹或文件或编辑 `name:` 行来删除 [skill 名称不能包含的字符](/docs/zh-CN/skills#characters-a-skill-name-cant-hold),或缩短超过 256 个字符的名称。然后重启会话,除非该文件位于 Claude Code [监视更改](/docs/zh-CN/skills#live-change-detection)的目录中。对于来自非您编写的插件的 skill,请要求插件作者重命名它。

5539 

5389<h3 id="workspace-has-not-been-trusted">5540<h3 id="workspace-has-not-been-trusted">

5390 工作区尚未被信任5541 工作区尚未被信任

5391</h3>5542</h3>

Details

220</table>220</table>

221 221 

222<span id="fn1" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>1</sup> 在 Google Cloud's Agent Platform 上,web search 适用于 Opus 4、Sonnet 4、Haiku 4.5 及更高版本的模型。<br />222<span id="fn1" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>1</sup> 在 Google Cloud's Agent Platform 上,web search 适用于 Opus 4、Sonnet 4、Haiku 4.5 及更高版本的模型。<br />

223<span id="fn2" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>2</sup> 在这些提供商上,自动模式仅支持 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本、Haiku 5.5 以及 Fable 模型。请参阅 [Auto mode 配置](/docs/zh-CN/auto-mode-config)。有关会话在这些提供商上启动时所处的权限模式,请参阅[会话启动时的模式](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)。在 v2.1.158 到 v2.1.206 中,这些提供商上的 auto mode 还需要设置 `CLAUDE_CODE_ENABLE_AUTO_MODE=1`;v2.1.207 移除了该要求。<br />223<span id="fn2" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>2</sup> 在这些提供商上,自动模式仅支持 Claude Sonnet 5 或更高版本、Opus 4.7 或更高版本、Haiku 5.5 以及 Fable 模型。请参阅 [Auto mode 配置](/docs/zh-CN/auto-mode-config)。有关会话在这些提供商上启动时所处的权限模式,请参阅[会话启动时的模式](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)。<br />

224<span id="fn3" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>3</sup> 受您与云提供商的协议约束。<br />224<span id="fn3" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>3</sup> 受您与云提供商的协议约束。<br />

225<span id="fn4" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>4</sup> 仅限仪表板和 API。[贡献指标](/docs/zh-CN/analytics#enable-contribution-metrics)需要 claude.ai Team 或 Enterprise 组织。<br />225<span id="fn4" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>4</sup> 仅限仪表板和 API。[贡献指标](/docs/zh-CN/analytics#enable-contribution-metrics)需要 claude.ai Team 或 Enterprise 组织。<br />

226<span id="fn5" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>5</sup> 在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更高版本,包括 WSL 2 内的 Linux。在原生 Windows 上,需要 Claude Code v2.1.234 或更高版本。使用 API 密钥身份验证时,消息传递仅限同一台机器。在 Amazon Bedrock、Claude Platform on AWS、Google Cloud's Agent Platform 和 Microsoft Foundry 上,消息传递仅限同一台机器,需要 Claude Code v2.1.248 或更高版本。Claude 只能从连接到 [Remote Control](/docs/zh-CN/remote-control) 的会话中找到您的 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) 和其他机器上的会话。要连接,您需要 claude.ai 登录和其他 [Remote Control 要求](/docs/zh-CN/remote-control#requirements)。请参阅[在其他机器上发送消息](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)。226<span id="fn5" style={{display: 'block', position: 'relative', top: '-120px'}} /><sup>5</sup> 在 macOS 和 Linux 上需要 Claude Code v2.1.224 或更高版本,包括 WSL 2 内的 Linux。在原生 Windows 上,需要 Claude Code v2.1.234 或更高版本。使用 API 密钥身份验证时,消息传递仅限同一台机器。在 Amazon Bedrock、Claude Platform on AWS、Google Cloud's Agent Platform 和 Microsoft Foundry 上,消息传递仅限同一台机器,需要 Claude Code v2.1.248 或更高版本。Claude 只能从连接到 [Remote Control](/docs/zh-CN/remote-control) 的会话中找到您的 [cloud sessions](/docs/zh-CN/claude-code-on-the-web) 和其他机器上的会话。要连接,您需要 claude.ai 登录和其他 [Remote Control 要求](/docs/zh-CN/remote-control#requirements)。请参阅[在其他机器上发送消息](/docs/zh-CN/cross-session-messaging#message-sessions-on-other-machines)。

Details

312 312 

313 **加载内容:** 新鲜、隔离的上下文,包含:313 **加载内容:** 新鲜、隔离的上下文,包含:

314 314 

315 * agent 的自己的系统提示,而不是 Claude Code 系统提示315 * Agent 自己的系统提示词,而不是 Claude Code 系统提示词

316 * agent 的 `skills:` 字段中列出的 skills 的完整内容316 * Agent 的 `skills:` 字段中列出的 skill 的完整内容

317 * CLAUDE.md 和 git 状态,除了内置的 Explore 和 Plan agents [省略两者](/docs/zh-CN/sub-agents#what-loads-at-startup),以及定义设置 [`omitClaudeMd`](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 的 agent 跳过用户、项目和本地 CLAUDE.md 文件317 * CLAUDE.md 和 git 状态。内置的 Explore 和 Plan Agent [启动时两者都不包含](/docs/zh-CN/sub-agents#what-loads-at-startup),而定义中设置了 [`omitClaudeMd`](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 的 Agent 启动时不包含用户、项目和本地 CLAUDE.md 文件。

318 * 主 agent 在提示中传递的任何上下文318 * 主 Agent 在提示词中传递的任何上下文

319 319 

320 对于 [fork](/docs/zh-CN/sub-agents#fork-the-current-conversation),Claude Code 加载父对话到目前为止、系统提示和工具。320 对于 [fork](/docs/zh-CN/sub-agents#fork-the-current-conversation),Claude Code 加载父对话到目前为止、系统提示和工具。

321 321 

Details

22 22 

23| 功能 | GHES 支持 | 备注 |23| 功能 | GHES 支持 | 备注 |

24| :- | :- | :- |24| :- | :- | :- |

25| 云会话 | ✅ 支持 | 所有者连接 GHES 实例一次;开发人员像往常一样使用 `claude --cloud` 或 [claude.ai/code](https://claude.ai/code) |25| 云端会话 | ✅ 支持 | 所有者连接 GHES 实例一次;开发人员使用 `claude --cloud` 或 [claude.ai/code](https://claude.ai/code) |

26| 代码审查 | ✅ 支持 | 与 github.com 相同的自动化 PR 审查 |26| 代码审查 | ✅ 支持 | 与 github.com 相同的自动化 PR 审查 |

27| Claude Security | ✅ 支持 | 在 [claude.ai/security](https://claude.ai/security) 为 Enterprise 计划提供公开测试版 |27| Claude Security | ✅ 支持 | 在 [claude.ai/security](https://claude.ai/security) 为 Enterprise 计划提供公开测试版 |

28| Teleport 会话 | ✅ 支持 | 使用 `--teleport` 在云和终端之间移动会话 |28| Teleport 会话 | ✅ 支持 | 使用 `--teleport` 在云和终端之间移动会话 |


35 管理员设置35 管理员设置

36</h2>36</h2>

37 37 

38所有者只需将您的 GHES 实例连接到 Claude Code 一次。之后,您组织中的开发人员可以使用 GHES 仓库,无需任何额外配置。您需要在 Claude 组织中具有所有者或主要所有者角色,以及在 GHES 实例上创建 GitHub App 的权限。38所有者只需将您的 GHES 实例连接到 Claude Code 一次。您需要在 Claude 组织中具有所有者或主要所有者角色,以及在 GHES 实例上创建 GitHub App 的权限。

39 39 

40引导式设置会生成 GitHub App 清单,并将您重定向到 GHES 实例以一键创建应用。如果您的环境阻止重定向流程,可以使用[替代手动设置](#manual-setup)。40引导式设置会生成 GitHub App 清单,并将您重定向到 GHES 实例以一键创建应用。如果您的环境阻止重定向流程,可以使用[替代手动设置](#manual-setup)。

41 41 


103 开发人员工作流103 开发人员工作流

104</h2>104</h2>

105 105 

106一旦所有者连接了 GHES 实例,就不需要开发人员端的配置。Claude Code 从您工作目录中的 git 远程自动检测您的 GHES 主机名。106Claude Code 从您工作目录中的 git 远程自动检测您的 GHES 主机名。

107 107 

108像往常一样从您的 GHES 实例克隆存储库,将 `github.example.com` 和存储库路径替换为您的 GHES 主机名和存储库:108像往常一样从您的 GHES 实例克隆存储库,将 `github.example.com` 和存储库路径替换为您的 GHES 主机名和存储库:

109 109 


228 228 

229如果 `claude --cloud` 因克隆错误而失败,请验证 Owner 已完成您的 GHES 实例的设置,并且 GitHub App 已安装在您正在处理的存储库上。与连接该实例的 Owner 确认在 Claude 设置中注册的主机名与您的 git 远程中的主机名匹配。229如果 `claude --cloud` 因克隆错误而失败,请验证 Owner 已完成您的 GHES 实例的设置,并且 GitHub App 已安装在您正在处理的存储库上。与连接该实例的 Owner 确认在 Claude 设置中注册的主机名与您的 git 远程中的主机名匹配。

230 230 

231如果会话因"Authentication failed while accessing the repository"而停止,您可能尚未连接自己的 GitHub Enterprise 账户。请从 [claude.ai/code](https://claude.ai/code) 上的仓库选择器进行连接,然后启动新会话。

232 

231<h3 id="marketplace-add-fails-with-a-policy-error">233<h3 id="marketplace-add-fails-with-a-policy-error">

232 市场添加因策略错误而失败234 市场添加因策略错误而失败

233</h3>235</h3>

Details

261* 要为后台任务使用 Haiku,请将 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 设置为在您的项目中可用的模型 ID。261* 要为后台任务使用 Haiku,请将 `ANTHROPIC_DEFAULT_HAIKU_MODEL` 设置为在您的项目中可用的模型 ID。

262 262 

263<Warning>263<Warning>

264 Opus 模型的每个令牌价格高于 Sonnet 模型,因此不固定主模型的部署在更新到 v2.1.207 或更高版本后将按 Opus 费率计费。要将 Sonnet 4.5 保持为主模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署会保持其引导的 Sonnet 模型作为默认值。264 Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署会保持其引导的 Sonnet 模型作为默认值。

265</Warning>265</Warning>

266 266 

267在 v2.1.280 之前,Google Cloud 的 Agent Platform 上的主模型默认为 Opus 5,`opus` 别名从 v2.1.219 解析为 Opus 5。在 v2.1.207 到 v2.1.218 上,Google Cloud 的 Agent Platform 上的主模型默认为 Opus 4.8,`opus` 别名解析为 Opus 4.8。在 v2.1.207 之前,主模型默认为 Sonnet 4.5,`opus` 别名解析为 Opus 4.6,后台任务始终使用主模型。267在 v2.1.280 之前,Google Cloud 的 Agent Platform 上的主模型默认为 Opus 5,`opus` 别名从 v2.1.219 起解析为 Opus 5。在 v2.1.207 到 v2.1.218 上,Google Cloud 的 Agent Platform 上的主模型默认为 Opus 4.8,`opus` 别名解析为 Opus 4.8。

268 268 

269要进一步自定义模型:269要进一步自定义模型:

270 270 

headless.md +6 −6

Details

38 使用 bare 模式更快启动38 使用 bare 模式更快启动

39</h3>39</h3>

40 40 

41添加 `--bare` 可以跳过 hook、skill、自定义命令、[子代理](/docs/zh-CN/sub-agents)、已安装的插件、MCP 服务器、自动记忆和 CLAUDE.md 的自动发现,从而减少启动时间。如果不使用它,`claude -p` 会加载与交互式会话相同的 [上下文](/docs/zh-CN/how-claude-code-works#the-context-window),包括在工作目录或 `~/.claude` 中配置的任何内容。41添加 `--bare` 可以跳过 hook、skill、自定义命令、[子代理](/docs/zh-CN/sub-agents)、已安装的插件、MCP 服务器、自动记忆和 CLAUDE.md 的自动发现,从而减少启动时间。如果不使用它,`claude -p` 会像交互式会话一样发现并加载这些内容,包括在工作目录或 `~/.claude` 中配置的任何内容。

42 42 

43bare 模式适用于需要在每台机器上获得相同结果的 CI 和脚本。队友的 `~/.claude` 中的 hook 或项目的 `.mcp.json` 中的 MCP 服务器不会运行,因为 bare 模式从不读取它们。您用 `--add-dir` 指定的目录是一个部分例外:bare 模式会从其 `.claude/skills/` 文件夹加载 skill,但仍然跳过其 `.claude/commands/` 和 `.claude/agents/` 文件夹。[来自其他目录的 Skills](/docs/zh-CN/skills#skills-from-additional-directories) 介绍了哪些内容会加载、哪些不会加载。43bare 模式适用于需要在每台机器上获得相同结果的 CI 和脚本。队友的 `~/.claude` 中的 hook 或项目的 `.mcp.json` 中的 MCP 服务器不会运行,因为 bare 模式从不读取它们。您用 `--add-dir` 指定的目录是一个部分例外:bare 模式会从其 `.claude/skills/` 文件夹加载 skill,但仍然跳过其 `.claude/commands/` 和 `.claude/agents/` 文件夹。[来自其他目录的 Skills](/docs/zh-CN/skills#skills-from-additional-directories) 介绍了哪些内容会加载、哪些不会加载。

44 44 


184 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'184 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

185```185```

186 186 

187如果该值不是有效的 JSON Schema,`claude` 会以 `Error: --json-schema is not a valid JSON Schema` 退出,后跟验证器的诊断。Claude Code 接受使用 `format` 关键字的 schema,例如 `"format": "email"`,但将 `format` 视为注释,不强制执行它。在 v2.1.205 之前,Claude Code 会静默忽略无效的 schema 并返回非结构化文本,并将任何包含 `format` 的 schema 视为无效。187如果该值不是有效的 JSON Schema,`claude` 会以 `Error: --json-schema is not a valid JSON Schema` 退出,后跟验证器的诊断。Claude Code 接受使用 `format` 关键字的 schema,例如 `"format": "email"`,但将 `format` 视为注释,不强制执行它。

188 188 

189<Tip>189<Tip>

190 使用 [jq](https://jqlang.org/) 之类的工具来解析响应并提取特定字段:190 使用 [jq](https://jqlang.org/) 之类的工具来解析响应并提取特定字段:


281`system/init` 事件报告会话元数据,包括模型、工具、MCP 服务器和加载的插件。它是流中的第一个事件,除非启动事件在其之前:281`system/init` 事件报告会话元数据,包括模型、工具、MCP 服务器和加载的插件。它是流中的第一个事件,除非启动事件在其之前:

282 282 

283* `plugin_install` 事件,当设置了 [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/zh-CN/env-vars) 时。283* `plugin_install` 事件,当设置了 [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/zh-CN/env-vars) 时。

284* [`hook_started`、`hook_progress` 和 `hook_response` 事件](/docs/zh-CN/agent-sdk/typescript#sdkhookstartedmessage),当配置的 [`SessionStart`](/docs/zh-CN/hooks#sessionstart) 或 [`Setup`](/docs/zh-CN/hooks#setup) hook 运行时。这些事件在 hook 生成时流式传输。Claude Code v2.1.169 至 v2.1.203 在 hook 完成后以一个批次传递它们,仍然在 `system/init` 之前;v2.1.204 恢复了实时传递。284* [`hook_started`、`hook_progress` 和 `hook_response` 事件](/docs/zh-CN/agent-sdk/typescript#sdkhookstartedmessage),当配置的 [`SessionStart`](/docs/zh-CN/hooks#sessionstart) 或 [`Setup`](/docs/zh-CN/hooks#setup) hook 运行时。这些事件在 hook 生成时流式传输。

285 285 

286该事件还携带一个可选的 `capabilities` 字符串数组,命名此 Claude Code 版本实现的协议行为,例如 `interrupt_receipt_v1` 或 `interrupt_cancel_queued_v1`。检查它以进行功能检测,而不是比较版本字符串,并忽略您不认识的值。该字段需要 Claude Code v2.1.205 或更高版本,在早期版本中不存在。有关功能列表,请参阅 [`SDKSystemMessage`](/docs/zh-CN/agent-sdk/typescript#sdksystemmessage)。286该事件还携带一个可选的 `capabilities` 字符串数组,命名此 Claude Code 版本实现的协议行为,例如 `interrupt_receipt_v1` 或 `interrupt_cancel_queued_v1`。检查它以进行功能检测,而不是比较版本字符串,并忽略您不认识的值。有关功能列表,请参阅 [`SDKSystemMessage`](/docs/zh-CN/agent-sdk/typescript#sdksystemmessage)。

287 287 

288<h4 id="fail-ci-when-a-plugin-or-mcp-server-doesn’t-load">288<h4 id="fail-ci-when-a-plugin-or-mcp-server-doesn’t-load">

289 当插件或 MCP 服务器未加载时使 CI 失败289 当插件或 MCP 服务器未加载时使 CI 失败


388 388 

389 * 用户调用的 [skill](/docs/zh-CN/skills) 和自定义命令可以使用。在提示词字符串中包含 `/skill-name`,Claude Code 会在运行前展开它。389 * 用户调用的 [skill](/docs/zh-CN/skills) 和自定义命令可以使用。在提示词字符串中包含 `/skill-name`,Claude Code 会在运行前展开它。

390 * 仅在终端界面中运行的内置命令,例如 `/login`,不可用。390 * 仅在终端界面中运行的内置命令,例如 `/login`,不可用。

391 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename` 接受该值作为参数,例如 `/model sonnet`,`/mcp` 不带参数时打印服务器状态的文本摘要。这些形式需要 Claude Code v2.1.205 或更高版本,并遵循每个命令的 [可用性说明](/docs/zh-CN/commands#all-commands)。391 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename` 接受该值作为参数,例如 `/model sonnet`,`/mcp` 不带参数时打印服务器状态的文本摘要。这些形式遵循每个命令的 [可用性说明](/docs/zh-CN/commands#all-commands)。

392 * 要更改设置,请将 `key=value` 传递给 `/config`,例如 `/config thinking=false`。392 * 要更改设置,请将 `key=value` 传递给 `/config`,例如 `/config thinking=false`。

393 * `/output-style <style>` 切换 [输出样式](/docs/zh-CN/output-styles),单独使用 `/output-style` 会列出它们。需要 Claude Code v2.1.269 或更高版本。393 * `/output-style <style>` 切换 [输出样式](/docs/zh-CN/output-styles),单独使用 `/output-style` 会列出它们。需要 Claude Code v2.1.269 或更高版本。

394</Note>394</Note>


407 407 

408在脚本中,`"$1"` 代表您在命令行上传递的第一个参数。运行 `bash review.sh 123`,shell 将 `"$1"` 替换为 `123`,因此脚本获取 PR 123 的 diff。Claude Code 将审查打印为 JSON,文本在 `result` 字段中。408在脚本中,`"$1"` 代表您在命令行上传递的第一个参数。运行 `bash review.sh 123`,shell 将 `"$1"` 替换为 `123`,因此脚本获取 PR 123 的 diff。Claude Code 将审查打印为 JSON,文本在 `result` 字段中。

409 409 

410有关更多选项(包括用于完全替换默认提示词的 `--system-prompt`),请参阅 [系统提示词标志](/docs/zh-CN/cli-reference#system-prompt-flags)。410有关更多选项(包括用于完全替换默认提示词的 `--system-prompt`),请参阅 [系统提示词标志](/docs/zh-CN/cli-reference#system-prompt-flags)。如果替换默认提示词,运行启动时也不会包含 [git 状态快照](/docs/zh-CN/settings-reference#includegitinstructions)。

411 411 

412<h3 id="continue-conversations">412<h3 id="continue-conversations">

413 继续对话413 继续对话

hipaa-setup.md +1 −0

Details

228| `--cloud`、`/teleport` 和 [Remote Control](/docs/zh-CN/remote-control) 被拒绝 | [云端会话](/docs/zh-CN/claude-code-on-the-web)和 Remote Control 已关闭 |228| `--cloud`、`/teleport` 和 [Remote Control](/docs/zh-CN/remote-control) 被拒绝 | [云端会话](/docs/zh-CN/claude-code-on-the-web)和 Remote Control 已关闭 |

229| `/feedback` 和 `/bug` 不可用 | 反馈提交已关闭 |229| `/feedback` 和 `/bug` 不可用 | 反馈提交已关闭 |

230| Claude 无法发布 [Artifact](/docs/zh-CN/artifacts) | Artifact 发布已关闭 |230| Claude 无法发布 [Artifact](/docs/zh-CN/artifacts) | Artifact 发布已关闭 |

231| MCP 工具会预先加载到上下文中 | [MCP 工具搜索](/docs/zh-CN/mcp#configure-tool-search)已关闭。`ENABLE_TOOL_SEARCH` 和托管设置都无法重新打开它 |

231| 读取 `ANTHROPIC_API_KEY` 的 MCP 服务器或 hook 无法再进行身份验证 | Claude Code 会从其启动的进程中[移除 Anthropic 凭据](#anthropic-credentials-in-commands-hooks-and-mcp-servers) |232| 读取 `ANTHROPIC_API_KEY` 的 MCP 服务器或 hook 无法再进行身份验证 | Claude Code 会从其启动的进程中[移除 Anthropic 凭据](#anthropic-credentials-in-commands-hooks-and-mcp-servers) |

232| 通过 `/login` 切换到其他组织后限制仍然存在 | HIPAA 状态会一直持续到 Claude Code 重新启动 |233| 通过 `/login` 切换到其他组织后限制仍然存在 | HIPAA 状态会一直持续到 Claude Code 重新启动 |

233 234 

hooks.md +491 −466

Details

827 827 

828hook 的退出码告诉 Claude Code 是否继续执行触发该 hook 的操作,例如工具调用或提示词。运行结束时有以下三种结果之一:828hook 的退出码告诉 Claude Code 是否继续执行触发该 hook 的操作,例如工具调用或提示词。运行结束时有以下三种结果之一:

829 829 

830* **成功**:hook 以 0 退出。Claude Code 应用 hook 打印的任何 [JSON 输出](#json-output)字段,除非这些字段阻止或拒绝该操作,否则操作继续进行。830* **成功**:hook 以 0 退出。Claude Code 应用 hook 打印的任何 [JSON 输出](#json-output)字段,除非这些字段阻止或拒绝该操作,否则操作继续进行。[启动后台进程的 hook](#hooks-that-start-a-background-process) 介绍了例外情况。

831* **阻止错误**:hook 以 2 退出。在[可以阻止的事件](#exit-code-2-behavior-per-event)上,Claude Code 停止该操作。831* **阻止错误**:hook 以 2 退出。在[可以阻止的事件](#exit-code-2-behavior-per-event)上,Claude Code 停止该操作。

832* **非阻止错误**:hook 以任何其他代码退出,或以其他方式失败,例如无法启动或打印无效 JSON。操作继续进行,在 `PreToolUse` 等事件上,您会在会话记录中看到 `<hook name> hook error` 通知。如果希望失败的 hook 阻止操作,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。832* **非阻止错误**:hook 以任何其他代码退出,或以其他方式失败,例如无法启动或打印无效 JSON。操作继续进行,在 `PreToolUse` 等事件上,您会在会话记录中看到 `<hook name> hook error` 通知。如果希望失败的 hook 阻止操作,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。

833 833 


932* 超时的 `command`、`http` 或 `mcp_tool` hook 不阻止工具调用。调用通过正常[权限流程](/docs/zh-CN/permissions)继续,因此不要指望停滞的 hook 充当关卡。要在 `command` 或 `http` hook 超时时阻止调用,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。932* 超时的 `command`、`http` 或 `mcp_tool` hook 不阻止工具调用。调用通过正常[权限流程](/docs/zh-CN/permissions)继续,因此不要指望停滞的 hook 充当关卡。要在 `command` 或 `http` hook 超时时阻止调用,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。

933* 超过其超时时间的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 会[阻止工具调用](#pretooluse)。933* 超过其超时时间的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 会[阻止工具调用](#pretooluse)。

934 934 

935<h4 id="hooks-that-start-a-background-process">

936 启动后台进程的 hook

937</h4>

938 

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

940 

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

942 

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

944 

945```bash theme={null}

946#!/bin/bash

947"$CLAUDE_PROJECT_DIR"/.claude/hooks/policy-check.sh || exit $?

948"$CLAUDE_PROJECT_DIR"/.claude/hooks/upload-metrics.sh >/dev/null 2>&1 &

949```

950 

951脚本的其余部分作用如下:

952 

953* **`|| exit $?`**:使检查的退出码成为 hook 自身的退出码,因此以 2 退出以表示拒绝的检查仍会阻止。否则 hook 会以最后一行的退出码退出,即 0。

954* **`>/dev/null 2>&1 &`**:在后台运行 `upload-metrics.sh` 并重定向其输出,使其不会让 hook 的输出保持打开状态。

955 

956要测试该脚本,请让 `policy-check.sh` 以 2 退出,然后触发一个与该 hook 匹配的工具调用。该工具调用会被阻止。

957 

935<h4 id="block-the-action-when-a-hook-fails">958<h4 id="block-the-action-when-a-hook-fails">

936 hook 失败时阻止操作959 hook 失败时阻止操作

937</h4>960</h4>


1245 Hook 事件1268 Hook 事件

1246</h2>1269</h2>

1247 1270 

1248每个事件都对应 Claude Code 生命周期中可以运行 hook 的一个时间点。以下各节按照生命周期的顺序排列:从会话设置,到智能体循环,再到会话结束。每一节都会说明事件何时触发、支持哪些匹配器、接收的 JSON 输入,以及如何通过输出控制行为。1271每个事件对应 Claude Code 生命周期中可以运行 hook 的一个时间点。以下各节按生命周期顺序排列:从会话设置,经过智能体循环,直到会话结束。每节说明事件何时触发、支持哪些匹配器、接收的 JSON 输入,以及如何通过输出控制行为。

1249 1272 

1250<h3 id="sessionstart">1273<h3 id="sessionstart">

1251 SessionStart1274 SessionStart

1252</h3>1275</h3>

1253 1276 

1254在 Claude Code 启动新会话或恢复现有会话时运行。适用于加载开发上下文(例如现有问题或代码库的最近更改),或设置环境变量。对于不需要脚本的静态上下文,请改用 [CLAUDE.md](/docs/zh-CN/memory)。1277在 Claude Code 启动新会话或恢复现有会话时运行。适用于加载开发上下文,例如现有 issue 或代码库的近期变更,或者设置环境变量。对于不需要脚本的静态上下文,请改用 [CLAUDE.md](/docs/zh-CN/memory)。

1255 1278 

1256SessionStart 在每个会话中都会运行,因此请确保这些 hook 运行迅速。仅支持 `type: "command"` 和 `type: "mcp_tool"` hook。关于 `mcp_tool` hook 何时运行,请参阅 [MCP 工具 hook 字段](#mcp-tool-hook-fields)。1279SessionStart 在每个会话中都会运行,因此请让这些 hook 保持快速。仅支持 `type: "command"` 和 `type: "mcp_tool"` hook。有关 `mcp_tool` hook 何时运行,请参阅 [MCP 工具 hook 字段](#mcp-tool-hook-fields)。

1257 1280 

1258匹配器的值对应会话的启动方式:1281匹配器的值对应会话的启动方式:

1259 1282 


1263| `resume` | `--resume`、`--continue` 或 `/resume` |1286| `resume` | `--resume`、`--continue` 或 `/resume` |

1264| `clear` | `/clear` |1287| `clear` | `/clear` |

1265| `compact` | 自动或手动压缩 |1288| `compact` | 自动或手动压缩 |

1266| `fork` | 从现有会话分叉出的新会话:与 `--resume` 或 `--continue` 一起使用的 `--fork-session`、`/fork` 后台副本、`/branch`,或您[移至后台](/docs/zh-CN/agent-view#from-inside-a-session)的对话 |1289| `fork` | 从现有会话派生出的新会话:`--fork-session` 与 `--resume` 或 `--continue` 一起使用、`/fork` 后台副本、`/branch`,或您[移到后台](/docs/zh-CN/agent-view#from-inside-a-session)的对话 |

1267 1290 

1268在 v2.1.214 之前,分叉的会话报告的 source 为 `"resume"`。1291在 v2.1.214 之前,派生的会话报告的 source 为 `"resume"`。

1269 1292 

1270当您启动交互式会话、在启动时使用 `--continue` 或 `--resume` 恢复对话,或运行 `/clear` 时,SessionStart hook 会在后台运行。您可以立即开始输入,恢复的对话也会直接显示,无需等待 hook。Claude 的第一次回复仍会等待 hook 完成,以便其上下文能传达给 Claude。1293当您启动交互式会话、在启动时使用 `--continue` 或 `--resume` 恢复对话,或运行 `/clear` 时,SessionStart hook 会在后台运行。您可以立即输入,恢复的对话也会直接显示,无需等待 hook。Claude 的第一次回复仍会等待 hook 完成,以便它们的上下文能够传达给 Claude。

1271 1294 

1272当您在会话内使用 `/resume` 切换对话时,切换操作则会等待 hook 完成。如果您在后台 hook 仍在运行时运行 `/clear` 或切换到另一个对话,它们返回的任何内容都不会应用到该会话。1295当您在会话中使用 `/resume` 切换对话时,切换操作则会等待 hook 完成。如果您在后台 hook 仍在运行时运行 `/clear` 或切换到其他对话,它们返回的任何内容都不会应用到该会话。

1273 1296 

1274启动时(包括恢复的会话)也存在同样的等待:在 SessionStart hook 仍在运行时发送的提示词,要等它们完成后才会传达给 Claude。1297启动时(包括恢复的会话)也有同样的等待:在 SessionStart hook 仍在运行时发送的提示词,要等它们完成后才会传达给 Claude。

1275 1298 

1276在任一种等待期间,按 `Esc` 可将提示词收回输入框而不发送。hook 会继续运行。1299在任一等待期间,按 `Esc` 可将提示词取回到输入框而不发送。hook 会继续运行。

1277 1300 

1278<h4 id="sessionstart-input">1301<h4 id="sessionstart-input">

1279 SessionStart 输入1302 SessionStart 输入


1281 1304 

1282除[通用输入字段](#common-input-fields)外,SessionStart hook 还会接收 `source`,以及可选的 `model`、`agent_type` 和 `session_title`:1305除[通用输入字段](#common-input-fields)外,SessionStart hook 还会接收 `source`,以及可选的 `model`、`agent_type` 和 `session_title`:

1283 1306 

1284| 字段 | 描述 |1307| 字段 | 说明 |

1285| :- | :- |1308| :- | :- |

1286| `source` | 会话的启动方式:新会话为 `"startup"`,恢复的会话为 `"resume"`,`/clear` 之后为 `"clear"`,压缩之后为 `"compact"`,从现有会话分叉出的新会话为 `"fork"` |1309| `source` | 会话的启动方式:新会话为 `"startup"`,恢复的会话为 `"resume"`,`/clear` 之后为 `"clear"`,压缩之后为 `"compact"`,从现有会话派生出的新会话为 `"fork"` |

1287| `model` | 当前活动模型的标识符。该字段可能缺失,例如在 `/clear` 之后或通过对话恢复还原会话时,因此请在读取前检查该字段是否存在 |1310| `model` | 当前模型标识符。该字段可能被省略,例如在 `/clear` 之后,或通过对话恢复还原会话时,因此读取前请先检查该字段是否存在 |

1288| `agent_type` | Agent 名称,当您使用 `claude --agent <name>` 启动 Claude Code 时存在 |1311| `agent_type` | Agent 名称,当您使用 `claude --agent <name>` 启动 Claude Code 时存在 |

1289| `session_title` | 会话的自定义标题,在已设置时存在,例如通过 `--name`、`/rename`、hook 的 `sessionTitle` 输出或 Agent SDK 的 `renameSession()` 设置。输出 `sessionTitle` 的 hook 可以先检查此字段,以避免覆盖现有的自定义标题 |1312| `session_title` | 会话的自定义标题,在已设置时存在,例如通过 `--name`、`/rename`、hook 的 `sessionTitle` 输出或 Agent SDK 的 `renameSession()` 设置。输出 `sessionTitle` 的 hook 可以先检查此字段,以避免覆盖已有的自定义标题 |

1290 1313 

1291未命名的会话仍可能有一个[自动生成的标题](/docs/zh-CN/sessions#name-your-sessions)。该标题不是自定义标题,不会出现在 `session_title` 中。1314未命名的会话仍可能有[自动生成的标题](/docs/zh-CN/sessions#name-your-sessions)。该标题不是自定义标题,不会出现在 `session_title` 中。

1292 1315 

1293当 `source` 为 `"resume"` 或 `"fork"`,且会话记录中至少包含一条 Claude 的回复时,SessionStart hook 还会接收下面四个字段。您的 hook 可以利用它们在第一个请求之前报告恢复一个陈旧对话的成本,例如通过 [`systemMessage`](#json-output)。这些字段需要 Claude Code v2.1.251 或更高版本。1316当 `source` 为 `"resume"` 或 `"fork"` 且会话记录中至少包含一条 Claude 的回复时,SessionStart hook 还会接收以下四个字段。您的 hook 可以使用它们在第一次请求之前报告恢复一个陈旧对话的成本,例如通过 [`systemMessage`](#json-output)。这些字段需要 Claude Code v2.1.251 或更高版本。

1294 1317 

1295| 字段 | 描述 |1318| 字段 | 说明 |

1296| :- | :- |1319| :- | :- |

1297| `seconds_since_last_response` | 自恢复的会话记录中最后一条回复以来经过的实际秒数 |1320| `seconds_since_last_response` | 自恢复的会话记录中最后一条回复以来经过的实际秒数 |

1298| `context_tokens` | 恢复后会话的第一个请求作为提示词重新发送的 token 数 |1321| `context_tokens` | 恢复的会话的第一次请求作为提示词重新发送的 token 数 |

1299| `prompt_cache_likely_expired` | 当最后一条回复早于会话的[提示缓存有效期](/docs/zh-CN/prompt-caching#cache-lifetime),或之后的压缩替换了已缓存的对话时为 `true` |1322| `prompt_cache_likely_expired` | 当最后一条回复早于会话的[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime),或之后的压缩替换了缓存的对话时为 `true` |

1300| `estimated_cache_write_usd` | 在会话所用模型上将 `context_tokens` 写入提示缓存的估计成本(美元),不包括回复 |1323| `estimated_cache_write_usd` | 在会话的模型上将 `context_tokens` 写入提示缓存的估计成本(美元),不包括回复 |

1301 1324 

1302此示例展示了一个在最后一条回复 90 分钟后恢复的会话的输入:1325此示例显示了在最后一条回复 90 分钟后恢复的会话的输入:

1303 1326 

1304```json theme={null}1327```json theme={null}

1305{1328{


1322 1345 

1323SessionStart hook 可以为 Claude 添加上下文、提供第一条用户消息、设置会话标题、监视文件以及重新加载 skill。除所有 hook 都可用的 [JSON 输出字段](#json-output)外,为每项功能返回相应字段:1346SessionStart hook 可以为 Claude 添加上下文、提供第一条用户消息、设置会话标题、监视文件以及重新加载 skill。除所有 hook 都可用的 [JSON 输出字段](#json-output)外,为每项功能返回相应字段:

1324 1347 

1325| 字段 | 描述 |1348| 字段 | 说明 |

1326| :- | :- |1349| :- | :- |

1327| `additionalContext` | 在对话开始时、第一个提示词之前添加到 Claude 上下文中的字符串。关于文本的传递方式以及应放入的内容,请参阅[为 Claude 添加上下文](#add-context-for-claude) |1350| `additionalContext` | 在对话开始时、第一个提示词之前添加到 Claude 上下文中的字符串。有关文本的传递方式以及应放入的内容,请参阅[为 Claude 添加上下文](#add-context-for-claude) |

1328| `initialUserMessage` | 在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)下,用作会话第一条用户消息的字符串。即使您未传入提示词,它也会成为第一轮。您传入的提示词会作为下一轮紧随其后 |1351| `initialUserMessage` | 在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)下用作会话第一条用户消息的字符串。即使您未传入提示词,它也会成为第一轮。您传入的提示词会作为下一轮跟随其后 |

1329| `sessionTitle` | 设置会话标题,效果与 `/rename` 相同。在 `source` 为 `"startup"`、`"resume"` 或 `"fork"` 时生效 |1352| `sessionTitle` | 设置会话标题,效果与 `/rename` 相同。当 `source` 为 `"startup"`、`"resume"` 或 `"fork"` 时生效 |

1330| `watchPaths` | 在此会话期间监视 [FileChanged](#filechanged) 事件的绝对路径数组 |1353| `watchPaths` | 在本会话期间要监视 [FileChanged](#filechanged) 事件的绝对路径数组 |

1331| `reloadSkills` | 布尔值。为 `true` 时,Claude Code 会在 SessionStart hook 完成后重新扫描 [skill](/docs/zh-CN/skills) 和命令目录。请参阅[重新加载 hook 安装的 skill](#reload-skills-that-a-hook-installs) |1354| `reloadSkills` | 布尔值。为 `true` 时,Claude Code 会在 SessionStart hook 完成后重新扫描 [skill](/docs/zh-CN/skills) 和命令目录。请参阅[重新加载 hook 安装的 skill](#reload-skills-that-a-hook-installs) |

1332 1355 

1333以下输出添加上下文并为会话命名:1356此输出添加上下文并为会话命名:

1334 1357 

1335```json theme={null}1358```json theme={null}

1336{1359{


1342}1365}

1343```1366```

1344 1367 

1345仅添加上下文的 hook 可以直接打印内容而无需构建 JSON,因为 Claude Code 会将 SessionStart hook 的[纯文本 stdout](#exit-code-0) 添加到 Claude 的上下文中。1368仅添加上下文的 hook 可以直接打印内容而无需构造 JSON,因为 Claude Code 会将 SessionStart hook 的[纯文本 stdout](#exit-code-0) 添加到 Claude 的上下文中。

1346 1369 

1347如果您的插件的 SessionStart hook 提供 `initialUserMessage` 或 `sessionTitle`,请在会话开始前安装该插件。对于在 SessionStart hook 运行之后才完成安装的插件,Claude Code 会忽略这两个字段。1370如果您插件的 SessionStart hook 提供了 `initialUserMessage` 或 `sessionTitle`,请在会话开始之前安装该插件。对于在 SessionStart hook 运行之后才完成安装的插件,Claude Code 会忽略这两个字段。

1348 1371 

1349<h4 id="reload-skills-that-a-hook-installs">1372<h4 id="reload-skills-that-a-hook-installs">

1350 重新加载 hook 安装的 skill1373 重新加载 hook 安装的 skill

1351</h4>1374</h4>

1352 1375 

1353要使 SessionStart hook 安装的 skill 在同一会话中可用,请返回 `reloadSkills`。skill 发现通常在 SessionStart hook 完成之前运行,因此如果不这样做,hook 写入 `~/.claude/skills/` 或 `.claude/skills/` 的文件在第一个提示词运行时可能缺失。1376要让 SessionStart hook 安装的 skill 在同一会话中可用,请返回 `reloadSkills`。skill 发现通常在 SessionStart hook 完成之前运行,因此如果不使用它,hook 写入 `~/.claude/skills/` 或 `.claude/skills/` 的文件在第一个提示词运行时可能尚不可用。

1354 1377 

1355此示例同步共享的 skill 仓库并请求重新扫描:1378此示例同步一个共享的 skill 仓库并请求重新扫描:

1356 1379 

1357```bash theme={null}1380```bash theme={null}

1358#!/bin/bash1381#!/bin/bash


1363echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1386echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1364```1387```

1365 1388 

1366仓库 URL 是占位符。请将其替换为您自己的 skill 仓库。1389仓库 URL 是一个占位符。请将其替换为您自己的 skill 仓库。

1367 1390 

1368<h4 id="persist-environment-variables">1391<h4 id="persist-environment-variables">

1369 持久化环境变量1392 持久化环境变量

1370</h4>1393</h4>

1371 1394 

1372SessionStart hook 可以访问 `CLAUDE_ENV_FILE` 环境变量,它提供一个文件路径,您可以在其中为 Claude 在会话后续运行的 shell 命令持久化环境变量。1395SessionStart hook 可以访问 `CLAUDE_ENV_FILE` 环境变量,该变量提供一个文件路径,您可以在其中为 Claude 在会话后续运行的 shell 命令持久化环境变量。

1373 1396 

1374要设置单个环境变量,请将 `export` 语句写入 `CLAUDE_ENV_FILE`。使用追加(`>>`)以保留其他 hook 设置的变量:1397要设置单个环境变量,请将 `export` 语句写入 `CLAUDE_ENV_FILE`。使用追加(`>>`)以保留其他 hook 设置的变量:

1375 1398 


1385exit 01408exit 0

1386```1409```

1387 1410 

1388要捕获设置命令带来的所有环境更改,请比较执行前后导出的变量:1411要捕获设置命令带来的所有环境变更,请比较前后导出的变量:

1389 1412 

1390```bash theme={null}1413```bash theme={null}

1391#!/bin/bash1414#!/bin/bash


1404exit 01427exit 0

1405```1428```

1406 1429 

1407每个 Bash 命令在执行命令本身之前,都会将该文件的内容作为 shell 代码运行,因此其中的行可以使用 Bash 能求值的任何内容,例如 `export PATH="$PATH:./node_modules/.bin"` 中的 `$PATH` 引用。1430每个 Bash 命令都会在命令本身之前将该文件的内容作为 shell 代码运行,因此其中的一行可以使用 Bash 能求值的任何内容,例如 `export PATH="$PATH:./node_modules/.bin"` 中的 `$PATH` 引用。

1408 1431 

1409<a id="persisted-variables-in-powershell-commands" />1432<a id="persisted-variables-in-powershell-commands" />

1410 1433 


1412 PowerShell 命令中的持久化变量1435 PowerShell 命令中的持久化变量

1413</h5>1436</h5>

1414 1437 

1415在 Claude Code v2.1.296 或更高版本中,[PowerShell](/docs/zh-CN/tools-reference#powershell-tool) 命令也会接收来自 `CLAUDE_ENV_FILE` 的变量,但 PowerShell 从不运行该文件。Claude Code 会从中读取赋值语句,并将其复制到 PowerShell 命令的环境中。只有当本会话中每个 hook 写入的内容,以及您在启动前[将 `CLAUDE_ENV_FILE` 设置为](/docs/zh-CN/env-vars)的任何脚本中,每一行都属于以下类型之一时,它才会这样做:1438在 Claude Code v2.1.296 或更高版本中,[PowerShell](/docs/zh-CN/tools-reference#powershell-tool) 命令也会接收来自 `CLAUDE_ENV_FILE` 的变量,但 PowerShell 从不运行该文件。Claude Code 会从中读出赋值,并将其复制到 PowerShell 命令的环境中。只有当本会话中每个 hook 写入的内容,以及您在启动前[将 `CLAUDE_ENV_FILE` 设置为](/docs/zh-CN/env-vars)的任何脚本中,每一行都属于以下类型之一时,才会这样做:

1416 1439 

1417* 空行或 `#` 注释1440* 空行或 `#` 注释

1418* 位于行首的一条赋值语句,写作 `export NAME=value`、`declare -x NAME=value` 或 `NAME=value`,其值必须是 Bash 会按原样使用的值,由以下部分任意组合而成:仅使用字母、数字和字符 `_ @ % + = : , . / -` 的无引号文本、单引号内的文本,以及双引号内的文本(其中的任何 `$`、反引号或 `"` 都用反斜杠转义)1441* 行首的一个赋值,写作 `export NAME=value`、`declare -x NAME=value` 或 `NAME=value`,其值是 Bash 会原样使用的值,由以下部分任意组合而成:仅使用字母、数字和字符 `_ @ % + = : , . / -` 的未加引号文本、单引号中的文本,以及其中所有 `$`、反引号或 `"` 都用反斜杠转义的双引号文本

1419 1442 

1420如果任何一行属于其他类型,例如带有未转义 `$PATH` 的 `export PATH="$PATH:./node_modules/.bin"`、`source` 命令,或 `direnv export bash` 打印的 `$'...'` 字符串,则 PowerShell 命令不会接收任何变量,并且 `claude --debug` 会记录 `Session environment is not all plain assignments`。Bash 命令仍会接收所有变量。在 Windows 上,PowerShell 命令也不会接收值中包含 `/` 或 `\` 的变量,因为 Git Bash 和 Windows 的路径写法不同。[沙箱化](/docs/zh-CN/sandboxing)的 PowerShell 命令不会接收任何变量。1443如果有任何一行属于其他类型,例如带有未转义 `$PATH` 的 `export PATH="$PATH:./node_modules/.bin"`、`source` 命令,或 `direnv export bash` 打印的 `$'...'` 字符串,PowerShell 命令将不会接收任何变量,并且 `claude --debug` 会记录 `Session environment is not all plain assignments`。Bash 命令仍会接收所有变量。在 Windows 上,PowerShell 命令也不会接收值中包含 `/` 或 `\` 的变量,因为 Git Bash 和 Windows 的路径写法不同。[沙箱化](/docs/zh-CN/sandboxing)的 PowerShell 命令不会接收任何变量。

1421 1444 

1422<Note>1445<Note>

1423 `CLAUDE_ENV_FILE` 可用于 SessionStart、[Setup](#setup)、[CwdChanged](#cwdchanged) 和 [FileChanged](#filechanged) hook。其他 hook 事件无法访问此变量,在 PowerShell 中运行的 hook 也无法访问,无论是通过 [`"shell": "powershell"`](#command-hook-fields) 还是在没有 Git Bash 的 Windows 上默认如此。1446 `CLAUDE_ENV_FILE` 可用于 SessionStart、[Setup](#setup)、[CwdChanged](#cwdchanged) 和 [FileChanged](#filechanged) hook。其他 hook 事件无法访问此变量,在 PowerShell 中运行的 hook 也无法访问,无论是通过 [`"shell": "powershell"`](#command-hook-fields) 还是在没有 Git Bash 的 Windows 上默认运行。

1424</Note>1447</Note>

1425 1448 

1426<h3 id="setup">1449<h3 id="setup">

1427 Setup1450 Setup

1428</h3>1451</h3>

1429 1452 

1430仅当您使用 `--init-only` 启动 Claude Code,或在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)中使用 `--init` 或 `--maintenance` 启动时才会触发。正常启动时不会触发。可将其用于您从 CI 或脚本中显式触发的一次性依赖安装或定期清理,与正常的会话启动分开。对于每个会话的初始化,请改用 [SessionStart](#sessionstart)。1453仅在您使用 `--init-only` 启动 Claude Code,或在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)下使用 `--init` 或 `--maintenance` 启动时触发。正常启动时不会触发。将其用于您从 CI 或脚本中显式触发的一次性依赖安装或定期清理,与正常的会话启动分开。对于每个会话的初始化,请改用 [SessionStart](#sessionstart)。

1431 1454 

1432匹配器的值对应触发该 hook 的 CLI 标志:1455匹配器的值对应触发该 hook 的 CLI 标志:

1433 1456 


1436| `init` | `claude --init-only` 或 `claude -p --init` |1459| `init` | `claude --init-only` 或 `claude -p --init` |

1437| `maintenance` | `claude -p --maintenance` |1460| `maintenance` | `claude -p --maintenance` |

1438 1461 

1439当您运行 `claude --init-only` 时,Claude Code 会运行 Setup hook 和带有 `startup` 匹配器的 `SessionStart` hook,然后在不开始对话的情况下退出。1462当您运行 `claude --init-only` 时,Claude Code 会运行 Setup hook 和使用 `startup` 匹配器的 `SessionStart` hook,然后退出而不开始对话。

1440 1463 

1441当您使用 `-p` 开始或继续对话时,还需要提供一个提示词,作为参数或通过 stdin 管道传入。当 `SessionStart` hook 提供了 [`initialUserMessage`](#sessionstart-decision-control),或者您恢复一个带有[推迟的工具调用](#defer-a-tool-call-for-later)的会话时,可以省略提示词。1464当您使用 `-p` 开始或继续对话时,还需要提供一个提示词,作为参数或通过 stdin 管道传入。当 `SessionStart` hook 提供了 [`initialUserMessage`](#sessionstart-decision-control),或者您恢复一个带有[延迟工具调用](#defer-a-tool-call-for-later)的会话时,可以省略提示词。

1442 1465 

1443成功时,`--init-only` 不会向终端打印任何内容。要确认 hook 已运行,请使用 `claude --debug-file <path> --init-only` 启动,将 `<path>` 替换为日志文件位置,然后在日志中查看 Setup 和 SessionStart hook 的条目。1466成功时,`--init-only` 不会向终端打印任何内容。要确认 hook 已运行,请使用 `claude --debug-file <path> --init-only` 启动,将 `<path>` 替换为日志文件位置,然后在日志中检查 Setup 和 SessionStart hook 条目。

1444 1467 

1445由于 Setup 不会在每次启动时触发,需要安装依赖的插件不能仅依赖 Setup。实用的模式是在首次使用时检查依赖,缺失时再安装,例如使用一个 hook 或 skill 检测 `${CLAUDE_PLUGIN_DATA}/node_modules`,若不存在则运行 `npm install`。关于已安装依赖的存放位置,请参阅[持久数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。如果您通过市场分发插件,则可能不需要此模式:Claude Code 在缓存插件时会[自动安装符合条件的 Node.js 包依赖](/docs/zh-CN/plugins/loading#node-js-package-dependencies)。1468由于 Setup 不会在每次启动时触发,需要安装依赖的插件不能仅依赖 Setup。实用的模式是在首次使用时检查依赖,缺失时再安装,例如一个 hook 或 skill 检测 `${CLAUDE_PLUGIN_DATA}/node_modules`,如果不存在则运行 `npm install`。有关存储已安装依赖的位置,请参阅[持久化数据目录](/docs/zh-CN/plugins/components#path-variables-and-persistent-data)。如果您通过市场分发插件,可能不需要此模式:Claude Code 在缓存插件时会[自动安装符合条件的 Node.js 包依赖](/docs/zh-CN/plugins/loading#node-js-package-dependencies)。

1446 1469 

1447<h4 id="setup-input">1470<h4 id="setup-input">

1448 Setup 输入1471 Setup 输入


1464 Setup 决策控制1487 Setup 决策控制

1465</h4>1488</h4>

1466 1489 

1467Setup hook 无法阻止执行;无论退出码是什么,执行都会继续。无论退出码是什么,Claude Code 都会丢弃 Setup hook 的 [JSON 输出字段](#json-output),例如 `systemMessage`、`continue` 和 `hookSpecificOutput.additionalContext`。使用 `-p` 时,只有在您使用 `--output-format stream-json --verbose` 启动的情况下,Setup hook 的 stdout、stderr 和退出码才会以 [`hook_response` 事件](/docs/zh-CN/headless#read-session-metadata)的形式出现在运行输出中。1490Setup hook 无法阻止;无论退出码是什么,执行都会继续。对于任何退出码,Claude Code 都会丢弃 Setup hook 的 [JSON 输出字段](#json-output),例如 `systemMessage`、`continue` 和 `hookSpecificOutput.additionalContext`。使用 `-p` 时,只有当您使用 `--output-format stream-json --verbose` 启动时,Setup hook 的 stdout、stderr 和退出码才会作为 [`hook_response` 事件](/docs/zh-CN/headless#read-session-metadata)出现在运行输出中。

1468 1491 

1469Setup hook 可以访问 `CLAUDE_ENV_FILE`。写入该文件的变量会在会话的后续 Bash 命令中持久存在,与 [SessionStart hook](#persist-environment-variables) 相同。`Setup` 上只运行 `type: "command"` hook。`Setup` 上的 `type: "mcp_tool"` hook 始终会被跳过,详见 [MCP 工具 hook 字段](#mcp-tool-hook-fields)。1492Setup hook 可以访问 `CLAUDE_ENV_FILE`。写入该文件的变量会持久化到会话后续的 Bash 命令中,与 [SessionStart hook](#persist-environment-variables) 相同。`Setup` 上只运行 `type: "command"` hook。`Setup` 上的 `type: "mcp_tool"` hook 始终会被跳过,如 [MCP 工具 hook 字段](#mcp-tool-hook-fields)中所述。

1470 1493 

1471<h3 id="instructionsloaded">1494<h3 id="instructionsloaded">

1472 InstructionsLoaded1495 InstructionsLoaded

1473</h3>1496</h3>

1474 1497 

1475当 `CLAUDE.md` 或 `.claude/rules/*.md` 文件被加载到上下文中时触发。此事件在会话开始时针对立即加载的文件触发,之后在文件被延迟加载时再次触发,例如当 Claude 访问包含嵌套 `CLAUDE.md` 的子目录时,或当带有 `paths:` frontmatter 的条件规则匹配时。该 hook 不支持阻止或决策控制。它以异步方式运行,用于可观测性目的。1498在 `CLAUDE.md` 或 `.claude/rules/*.md` 文件被加载到上下文中时触发。对于预先加载的文件,此事件在会话开始时触发;之后在文件被延迟加载时会再次触发,例如当 Claude 访问包含嵌套 `CLAUDE.md` 的子目录时,或当带有 `paths:` frontmatter 的条件规则匹配时。该 hook 不支持阻止或决策控制。它出于可观测性目的异步运行。

1476 1499 

1477当 Claude 通过 **Project instructions** 设置[直接读取 `AGENTS.md`](/docs/zh-CN/memory#agents-md) 时,此事件不会触发。当 `CLAUDE.md` 导入您的 `AGENTS.md` 时,它会触发,`load_reason` 设置为 `include`,与任何其他被导入的文件相同;当 `CLAUDE.md` 是指向它的符号链接时,它也会作为一次普通的 `CLAUDE.md` 加载触发。1500当 Claude 通过 **Project instructions** 设置[直接读取 `AGENTS.md`](/docs/zh-CN/memory#agents-md) 时,此事件不会触发。当 `CLAUDE.md` 导入您的 `AGENTS.md` 时,此事件会触发,`load_reason` 设置为 `include`,与任何其他导入的文件相同;当 `CLAUDE.md` 是指向它的符号链接时,也会作为一次正常的 `CLAUDE.md` 加载而触发。

1478 1501 

1479匹配器针对 `load_reason` 运行。例如,使用 `"matcher": "session_start"` 仅针对会话开始时加载的文件触发,或使用 `"matcher": "path_glob_match|nested_traversal"` 仅针对延迟加载触发。1502匹配器针对 `load_reason` 运行。例如,使用 `"matcher": "session_start"` 仅对会话开始时加载的文件触发,或使用 `"matcher": "path_glob_match|nested_traversal"` 仅对延迟加载触发。

1480 1503 

1481<h4 id="instructionsloaded-input">1504<h4 id="instructionsloaded-input">

1482 InstructionsLoaded 输入1505 InstructionsLoaded 输入


1484 1507 

1485除[通用输入字段](#common-input-fields)外,InstructionsLoaded hook 还会接收以下字段:1508除[通用输入字段](#common-input-fields)外,InstructionsLoaded hook 还会接收以下字段:

1486 1509 

1487| 字段 | 描述 |1510| 字段 | 说明 |

1488| :- | :- |1511| :- | :- |

1489| `file_path` | 被加载的指令文件的绝对路径 |1512| `file_path` | 已加载的指令文件的绝对路径 |

1490| `memory_type` | 文件的作用域:`"User"`、`"Project"`、`"Local"` 或 `"Managed"` |1513| `memory_type` | 文件的作用域:`"User"`、`"Project"`、`"Local"` 或 `"Managed"` |

1491| `load_reason` | 文件被加载的原因:`"session_start"`、`"nested_traversal"`、`"path_glob_match"`、`"include"` 或 `"compact"`。`"compact"` 值在压缩事件之后重新加载指令文件时触发 |1514| `load_reason` | 文件被加载的原因:`"session_start"`、`"nested_traversal"`、`"path_glob_match"`、`"include"` 或 `"compact"`。当指令文件在压缩事件后被重新加载时,会使用 `"compact"` 值 |

1492| `globs` | 文件 `paths:` frontmatter 中的路径 glob 模式(如有)。仅在 `path_glob_match` 加载时存在 |1515| `globs` | 文件 `paths:` frontmatter 中的路径 glob 模式(如果有)。仅在 `path_glob_match` 加载时存在 |

1493| `trigger_file_path` | 对于延迟加载,其访问触发了此次加载的文件的路径 |1516| `trigger_file_path` | 对于延迟加载,其访问触发了此次加载的文件路径 |

1494| `parent_file_path` | 对于 `include` 加载,包含此文件的父指令文件的路径 |1517| `parent_file_path` | 对于 `include` 加载,包含此文件的父指令文件路径 |

1495 1518 

1496```json theme={null}1519```json theme={null}

1497{1520{


1509 InstructionsLoaded 决策控制1532 InstructionsLoaded 决策控制

1510</h4>1533</h4>

1511 1534 

1512InstructionsLoaded hook 没有决策控制。它们无法阻止或修改指令的加载。Claude Code 会丢弃它们的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。可将此事件用于审计日志、合规跟踪或可观测性。1535InstructionsLoaded hook 没有决策控制。它们无法阻止或修改指令加载。Claude Code 会丢弃它们的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。将此事件用于审计日志、合规跟踪或可观测性。

1513 1536 

1514<h3 id="userpromptsubmit">1537<h3 id="userpromptsubmit">

1515 UserPromptSubmit1538 UserPromptSubmit

1516</h3>1539</h3>

1517 1540 

1518在提交提示词后、Claude 处理之前运行。这使您能够1541在提交提示词时、Claude 处理之前运行。这使您可以

1519根据提示词/对话添加额外的上下文、验证提示词,或1542根据提示词/对话添加额外的上下文、验证提示词,或

1520阻止某些类型的提示词。1543阻止某些类型的提示词。

1521 1544 


1523 1546 

1524* [定时任务](/docs/zh-CN/scheduled-tasks)触发时,包括 `/loop` 的一次迭代1547* [定时任务](/docs/zh-CN/scheduled-tasks)触发时,包括 `/loop` 的一次迭代

1525* [后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)向启动它的会话回报时1548* [后台子代理](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)向启动它的会话回报时

1526* [另一个会话发送消息](/docs/zh-CN/cross-session-messaging)到您的主对话时1549* [另一个会话向](/docs/zh-CN/cross-session-messaging)您的主对话发送消息时

1527 1550 

1528对于 `command`、`http` 和 `mcp_tool` 类型,`UserPromptSubmit` hook 的默认超时时间为 30 秒,短于这些类型在大多数其他事件上 600 秒的默认值。由于此 hook 在每个提示词之前运行,并且在完成前会阻塞模型处理,卡住的 hook 会使会话停滞。如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。1551对于 `command`、`http` 和 `mcp_tool` 类型,`UserPromptSubmit` hook 的默认超时时间为 30 秒,短于这些类型在大多数其他事件上 600 秒的默认值。由于此 hook 在每个提示词之前运行,并在完成之前阻塞模型处理,卡住的 hook 会使会话停滞。如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。

1529 1552 

1530除了使用 [`async: true`](#run-hooks-in-the-background) 运行的 command hook 之外,达到超时的 `UserPromptSubmit` command、HTTP 或 MCP 工具 hook 都会被取消,其输出(包括任何 `additionalContext`)会被丢弃。提示词仍会在没有该上下文的情况下传达给 Claude。若要改为阻止该提示词,请在 command 或 HTTP hook 上设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。会话记录中会显示一条通知,指明该 hook、触发的超时以及输出已被丢弃。1553除使用 [`async: true`](#run-hooks-in-the-background) 运行的命令 hook 外,达到超时的 `UserPromptSubmit` 命令、HTTP 或 MCP 工具 hook 会被取消,其输出(包括任何 `additionalContext`)会被丢弃。提示词仍会传达给 Claude,但不带该上下文。若要改为阻止提示词,请在命令或 HTTP hook 上设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。会话记录会显示一条通知,指明该 hook、触发的超时,以及输出已被丢弃。

1531 1554 

1532`UserPromptSubmit` 上的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 达到超时时,会阻止该提示词,并显示一条指明该 hook 和超时时间的消息,因为此处的回调可能充当不能失败放行的策略关卡。会话会继续。在 v2.1.208 之前,该事件上的回调超时会以执行错误结束该轮次。1555`UserPromptSubmit` 上的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 达到超时时,会阻止该提示词,并显示一条指明该 hook 和超时的消息,因为此处的回调可能充当不能以失败放行方式处理的策略关卡。会话会继续。在 v2.1.208 之前,该事件上的回调超时会以执行错误结束该轮次。

1533 1556 

1534<h4 id="userpromptsubmit-input">1557<h4 id="userpromptsubmit-input">

1535 UserPromptSubmit 输入1558 UserPromptSubmit 输入

1536</h4>1559</h4>

1537 1560 

1538除[通用输入字段](#common-input-fields)外,UserPromptSubmit hook 还会接收包含所提交文本的 `prompt` 字段。被折叠为 `[Pasted text #N]` 占位符的粘贴内容会在原处展开后传入。在 Claude Code [为 Claude 标记粘贴文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text)的会话中,展开的内容位于 `<pasted_content id="…">` 行和 `</pasted_content id="…">` 行之间,因此如果您的 hook 需要解析提示词,请考虑这些行。1561除[通用输入字段](#common-input-fields)外,UserPromptSubmit hook 还会接收包含所提交文本的 `prompt` 字段。折叠为 `[Pasted text #N]` 占位符的粘贴内容会在原位展开后传入。在 Claude Code [为 Claude 标记粘贴文本](/docs/zh-CN/terminal-config#how-claude-treats-pasted-text)的会话中,展开的内容位于 `<pasted_content id="…">` 行和 `</pasted_content id="…">` 行之间,因此如果您的 hook 解析提示词,请考虑这些行。

1539 1562 

1540当会话有自定义标题时,UserPromptSubmit hook 还会接收 `session_title`,其含义与 [SessionStart 的 `session_title` 字段](#sessionstart-input)相同。1563当会话具有自定义标题时,UserPromptSubmit hook 还会接收 `session_title`,其含义与 [SessionStart 的 `session_title` 字段](#sessionstart-input)相同。

1541 1564 

1542```json theme={null}1565```json theme={null}

1543{1566{


1554 UserPromptSubmit 决策控制1577 UserPromptSubmit 决策控制

1555</h4>1578</h4>

1556 1579 

1557`UserPromptSubmit` hook 可以控制是否处理提交的提示词,并添加上下文。所有 [JSON 输出字段](#json-output)均可用。1580`UserPromptSubmit` hook 可以控制是否处理所提交的提示词,并添加上下文。所有 [JSON 输出字段](#json-output)均可用。

1558 1581 

1559在退出码为 0 时,有两种方式可以向对话添加上下文:1582在退出码为 0 时,有两种方式向对话添加上下文:

1560 1583 

1561* **纯文本 stdout**:Claude Code 会将其[视为纯文本](#exit-code-0)的 stdout 添加到 Claude 的上下文中1584* **纯文本 stdout**:Claude Code 会将其[视为纯文本](#exit-code-0)的 stdout 添加到 Claude 的上下文中

1562* **带有 `additionalContext` 的 JSON**:使用下面的 JSON 格式以获得更多控制。`additionalContext` 字段会作为上下文添加1585* **带 `additionalContext` 的 JSON**:使用下面的 JSON 格式进行更多控制。`additionalContext` 字段会作为上下文添加

1563 1586 

1564两种方式都不会在会话记录中生成可见条目。纯 stdout 和 `additionalContext` 的值都会各自作为以 hook 名称开头的系统提醒注入;Claude 会读取两者。要确认已送达,请查看[调试日志](#debug-hooks)。1587这两种方式都不会产生可见的会话记录条目。纯 stdout 和 `additionalContext` 的值各自作为以 hook 名称开头的系统提醒注入;Claude 会读取两者。要确认已传递,请查看[调试日志](#debug-hooks)。

1565 1588 

1566要阻止提示词,请返回一个 `decision` 设置为 `"block"` 的 JSON 对象:1589要阻止提示词,请返回一个 `decision` 设置为 `"block"` 的 JSON 对象:

1567 1590 

1568| 字段 | 描述 |1591| 字段 | 说明 |

1569| :- | :- |1592| :- | :- |

1570| `decision` | `"block"` 会在提示词到达 Claude 之前将其拦截。省略则允许提示词继续 |1593| `decision` | `"block"` 会在提示词传达给 Claude 之前将其拦下。省略则允许提示词继续 |

1571| `reason` | 当 `decision` 为 `"block"` 时向用户显示。不会添加到上下文中 |1594| `reason` | 当 `decision` 为 `"block"` 时显示给用户。不会添加到上下文中 |

1572| `additionalContext` | 与所提交的提示词一同添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |1595| `additionalContext` | 与所提交的提示词一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

1573| `sessionTitle` | 设置会话标题。可用于根据提示词内容自动命名会话 |1596| `sessionTitle` | 设置会话标题。用于根据提示词内容自动命名会话 |

1574| `suppressOriginalPrompt` | 如果在 hook 阻止提示词时为 `true`,则阻止消息中不包含提示词文本。请参阅[被阻止的提示词会留下什么](#what-a-blocked-prompt-leaves-behind) |1597| `suppressOriginalPrompt` | 如果在 hook 阻止提示词时为 `true`,则在阻止消息中省略提示词文本。请参阅[被阻止的提示词会留下什么](#what-a-blocked-prompt-leaves-behind) |

1575 1598 

1576通过以 2 退出来阻止的 hook,其处理方式与 `reason` 相同:阻止消息会向用户显示 stderr 文本,且不会添加到上下文中。1599通过以退出码 2 退出来阻止的 hook,其处理方式与 `reason` 相同:阻止消息会向用户显示 stderr 文本,且不会添加到上下文中。

1577 1600 

1578```json theme={null}1601```json theme={null}

1579{1602{


1592 被阻止的提示词会留下什么1615 被阻止的提示词会留下什么

1593</h4>1616</h4>

1594 1617 

1595被阻止的提示词永远不会到达 Claude,但其文本并不会在所有地方被删除。默认情况下,向用户显示的阻止消息以 `Original prompt:` 结尾,后接所提交的文本,并且 Claude Code 会将该消息写入磁盘上会话的会话记录文件。要在消息中省略该文本,请在 `hookSpecificOutput` 中打印带有 `"suppressOriginalPrompt": true` 的 JSON。无论 hook 是通过 `decision: "block"` 还是通过以 2 退出来阻止,此方法均有效。1618被阻止的提示词永远不会传达给 Claude,但其文本并不会在所有地方被移除。默认情况下,显示给用户的阻止消息以 `Original prompt:` 结尾,后跟所提交的文本,并且 Claude Code 会将该消息写入磁盘上的会话记录文件。要在消息中省略该文本,请在 `hookSpecificOutput` 中打印带有 `"suppressOriginalPrompt": true` 的 JSON。无论 hook 是通过 `decision: "block"` 还是以退出码 2 退出来阻止,此方法都有效。

1596 1619 

1597`suppressOriginalPrompt` 只会改变阻止消息。所提交的文本仍可能出现在本地文件中,例如会话记录和您的提示词历史记录,因此阻止型 hook 并不能让机密信息不落盘。要限制或删除这些文件,请参阅[明文存储](/docs/zh-CN/claude-directory#plaintext-storage)和[清除本地数据](/docs/zh-CN/claude-directory#clear-local-data)。1620`suppressOriginalPrompt` 只改变阻止消息。所提交的文本仍可能出现在本地文件中,例如会话记录和您的提示词历史,因此阻止 hook 并不是防止机密写入磁盘的方法。要限制或删除这些文件,请参阅[明文存储](/docs/zh-CN/claude-directory#plaintext-storage)和[清除本地数据](/docs/zh-CN/claude-directory#clear-local-data)。

1598 1621 

1599<h3 id="userpromptexpansion">1622<h3 id="userpromptexpansion">

1600 UserPromptExpansion1623 UserPromptExpansion

1601</h3>1624</h3>

1602 1625 

1603当用户输入的命令在到达 Claude 之前展开为提示词时运行。可用于阻止直接调用特定命令、为特定 skill 注入上下文,或记录用户调用了哪些命令。例如,匹配 `deploy` 的 hook 可以在不存在批准文件时阻止 `/deploy`,或者匹配某个审查 skill 的 hook 可以将团队的审查清单作为 `additionalContext` 附加。1626在用户输入的命令展开为提示词、传达给 Claude 之前运行。使用它可以阻止直接调用特定命令、为特定 skill 注入上下文,或记录用户调用了哪些命令。例如,匹配 `deploy` 的 hook 可以在不存在批准文件时阻止 `/deploy`,或者匹配某个审查 skill 的 hook 可以将团队的审查清单作为 `additionalContext` 追加。

1604 1627 

1605此事件覆盖了 `PreToolUse` 无法覆盖的路径:匹配 `Skill` 工具的 `PreToolUse` hook 只在 Claude 调用该工具时触发,但直接输入 `/skillname` 会绕过 `PreToolUse`。`UserPromptExpansion` 会在这条直接路径上触发。1628此事件覆盖了 `PreToolUse` 无法覆盖的路径:匹配 `Skill` 工具的 `PreToolUse` hook 仅在 Claude 调用该工具时触发,而直接输入 `/skillname` 会绕过 `PreToolUse`。`UserPromptExpansion` 会在这条直接路径上触发。

1606 1629 

1607匹配 `command_name`。将匹配器留空可在每个提示词类型的命令上触发。1630针对 `command_name` 进行匹配。将匹配器留空可在每个提示词类命令上触发。

1608 1631 

1609<h4 id="userpromptexpansion-input">1632<h4 id="userpromptexpansion-input">

1610 UserPromptExpansion 输入1633 UserPromptExpansion 输入


1633 1656 

1634`UserPromptExpansion` hook 可以阻止展开或添加上下文。所有 [JSON 输出字段](#json-output)均可用。1657`UserPromptExpansion` hook 可以阻止展开或添加上下文。所有 [JSON 输出字段](#json-output)均可用。

1635 1658 

1636| 字段 | 描述 |1659| 字段 | 说明 |

1637| :- | :- |1660| :- | :- |

1638| `decision` | `"block"` 会阻止命令展开。省略则允许其继续 |1661| `decision` | `"block"` 会阻止命令展开。省略则允许其继续 |

1639| `reason` | 当 `decision` 为 `"block"` 时向用户显示 |1662| `reason` | 当 `decision` 为 `"block"` 时显示给用户 |

1640| `additionalContext` | 与展开后的提示词一同添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |1663| `additionalContext` | 与展开后的提示词一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

1641 1664 

1642通过以 2 退出来阻止的 hook,其处理方式与 `reason` 相同:阻止消息会向用户显示 stderr 文本。1665通过以退出码 2 退出来阻止的 hook,其处理方式与 `reason` 相同:阻止消息会向用户显示 stderr 文本。

1643 1666 

1644```json theme={null}1667```json theme={null}

1645{1668{


1656 MessageDisplay1679 MessageDisplay

1657</h3>1680</h3>

1658 1681 

1659在助手消息流式显示到屏幕上时运行。Claude Code 会分批显示消息:每当一批新完成的行准备好渲染时,hook 会使用这些行运行一次,Claude Code 会在原位置渲染 hook 返回的替换文本。长消息会产生多次调用;短消息可能只产生一次。1682在助手消息流式显示到屏幕上时运行。Claude Code 以增量方式显示消息:每当一批新完成的行准备好渲染时,hook 就会用这些行运行一次,Claude Code 会在其位置渲染 hook 返回的替换文本。长消息会产生多次调用;短消息可能只产生一次。

1660 1683 

1661使用 MessageDisplay 可以:1684使用 MessageDisplay 可以:

1662 1685 

1663* 去除 markdown 以获得极简显示1686* 去除 markdown 以实现简洁显示

1664* 转换 Agent SDK 应用向其用户显示的文本1687* 转换 Agent SDK 应用程序向其用户显示的文本

1665* 从 Claude 的回复中隐去 API 密钥或内部主机名1688* 从 Claude 的回复中隐去 API 密钥或内部主机名

1666 1689 

1667Claude Code 会保留每一批内容,直到您的 hook 返回,因此请确保 hook 运行迅速。如果 hook 失败或超时,Claude Code 会显示原始文本。此事件的默认超时时间为 10 秒;如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。1690Claude Code 会保留每一批内容,直到您的 hook 返回,因此请让 hook 保持快速。如果 hook 失败或超时,Claude Code 会显示原始文本。此事件的默认超时时间为 10 秒;如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。

1668 1691 

1669MessageDisplay 仅作用于显示:替换文本只会改变屏幕上渲染的内容。会话记录以及 Claude 看到的内容都保持原始文本,因此 Claude 永远看不到替换内容,详细模式也会显示原始文本。该 hook 只接收助手消息文本,因此工具结果和您输入的文本会原样渲染。1692MessageDisplay 仅影响显示:替换文本只改变屏幕上渲染的内容。会话记录和 Claude 看到的内容保留原始文本,因此 Claude 永远不会看到替换内容,详细模式也会显示原始文本。该 hook 仅接收助手消息文本,因此工具结果和您输入的文本会原样渲染。

1670 1693 

1671MessageDisplay 不支持匹配器,并会针对每条流式输出文本的助手消息触发;不含文本的消息(例如仅包含工具调用的响应)不会触发它。1694MessageDisplay 不支持匹配器,会对每条流式输出文本的助手消息触发;不含文本的消息(例如仅包含工具调用的回复)不会触发它。

1672 1695 

1673在非交互式运行中(包括 Agent SDK 查询和 `claude -p`),MessageDisplay 对每条助手消息只运行一次,而不是每批行运行一次。这唯一的一次调用在消息完成后到达,并携带完整的消息文本:`index` 为 `0`,`final` 为 `true`,`delta` 包含整条消息。收集每条消息 `delta` 文本的 hook 在两种模式下接收到的总文本相同。1696在非交互运行中(包括 Agent SDK 查询和 `claude -p`),MessageDisplay 对每条助手消息运行一次,而不是对每批行运行一次。这一次调用在消息完成后到达,并携带完整的消息文本:`index` 为 `0`,`final` 为 `true`,`delta` 包含整条消息。收集每条消息 `delta` 文本的 hook 在两种模式下接收到的总文本相同。

1674 1697 

1675<h4 id="messagedisplay-input">1698<h4 id="messagedisplay-input">

1676 MessageDisplay 输入1699 MessageDisplay 输入

1677</h4>1700</h4>

1678 1701 

1679除[通用输入字段](#common-input-fields)外,MessageDisplay hook 还会接收轮次和消息的标识符、此次调用在消息中的位置,以及 `delta` 中的新文本。批次边界取决于文本的流式传输方式,因此请使用 `index` 和 `final` 来跟踪消息的进度,而不要假定各行会以特定方式分组。1702除[通用输入字段](#common-input-fields)外,MessageDisplay hook 还会接收轮次和消息的标识符、本次调用在消息中的位置,以及 `delta` 中的新文本。批次边界取决于文本的流式传输方式,因此请使用 `index` 和 `final` 跟踪消息的进度,而不要期望行以特定方式分组。

1680 1703 

1681| 字段 | 描述 |1704| 字段 | 说明 |

1682| :- | :- |1705| :- | :- |

1683| `turn_id` | 当前轮次的 UUID |1706| `turn_id` | 当前轮次的 UUID |

1684| `message_id` | 正在显示的助手消息的 UUID。在同一消息的每一批中保持不变。这不是 API 的 `msg_…` id,因此无法与会话记录中的消息 id 关联 |1707| `message_id` | 正在显示的助手消息的 UUID。在同一消息的每个批次中保持不变。这不是 API 的 `msg_…` id,因此无法与会话记录中的消息 id 关联 |

1685| `index` | 此批次在消息中的从零开始的索引 |1708| `index` | 本批次在消息中从零开始的索引 |

1686| `final` | 在消息的最后一批上为 `true`。每条消息恰好有一个最终批次 |1709| `final` | 在消息的最后一批时为 `true`。每条消息恰好有一个最终批次 |

1687| `delta` | 自上一批次以来新完成的行,包括结尾的换行符。始终是完整的行,但最终批次可能在行中间结束。在交互式运行中,当消息以换行符结尾时,最终批次的 delta 为空,因此请将 `final`(而不是非空的 delta)作为消息结束的信号。在 Agent SDK 和 `claude -p` 运行中,这唯一的一次调用携带整条消息 |1710| `delta` | 自上一批次以来新完成的行,包括行尾换行符。始终为完整的行,但最终批次可能在行中间结束。在交互运行中,当消息以换行符结尾时,最终批次的 delta 为空,因此请将 `final`(而非非空的 delta)作为消息结束的信号。在 Agent SDK 和 `claude -p` 运行中,这一次调用携带整条消息 |

1688 1711 

1689```json theme={null}1712```json theme={null}

1690{1713{


1704 MessageDisplay 输出1727 MessageDisplay 输出

1705</h4>1728</h4>

1706 1729 

1707除所有 hook 都可用的 [JSON 输出字段](#json-output)外,MessageDisplay hook 还可以返回 `displayContent`,以在屏幕上替换 delta:1730除所有 hook 都可用的 [JSON 输出字段](#json-output)外,MessageDisplay hook 还可以返回 `displayContent` 以在屏幕上替换 delta:

1708 1731 

1709| 字段 | 描述 |1732| 字段 | 说明 |

1710| :- | :- |1733| :- | :- |

1711| `displayContent` | 代替 delta 显示的文本。省略则显示原始文本 |1734| `displayContent` | 代替 delta 显示的文本。省略则显示原始内容 |

1712 1735 

1713MessageDisplay hook 没有决策控制。它们无法阻止消息,也无法更改存储在会话记录中或发送给 Claude 的内容。Claude Code 会处理其 JSON 输出中的 `displayContent`,并丢弃 `systemMessage` 和 `continue`。1736MessageDisplay hook 没有决策控制。它们无法阻止消息,也无法更改存储在会话记录中或发送给 Claude 的内容。Claude Code 会处理其 JSON 输出中的 `displayContent`,并丢弃 `systemMessage` 和 `continue`。

1714 1737 

1715此示例从 Claude 的回复中去除 markdown 格式,以实现纯文本显示。该脚本从 stdin 读取每一批内容,从 `delta` 中移除粗体标记和行内代码反引号,并将结果作为 `displayContent` 返回。1738此示例从 Claude 的回复中去除 markdown 格式,以进行纯文本显示。该脚本从 stdin 读取每一批,从 `delta` 中移除粗体标记和行内代码反引号,并将结果作为 `displayContent` 返回。

1716 1739 

1717<Tabs>1740<Tabs>

1718 <Tab title="macOS/Linux">1741 <Tab title="macOS/Linux">

1719 在您的设置文件中为该事件注册一个 command hook:1742 在您的设置文件中为该事件注册一个命令 hook:

1720 1743 

1721 ```json theme={null}1744 ```json theme={null}

1722 {1745 {


1745 </Tab>1768 </Tab>

1746 1769 

1747 <Tab title="Windows (PowerShell)">1770 <Tab title="Windows (PowerShell)">

1748 注册一个通过 PowerShell 运行脚本的 command hook:1771 注册一个通过 PowerShell 运行脚本的命令 hook:

1749 1772 

1750 ```json theme={null}1773 ```json theme={null}

1751 {1774 {


1771 }1794 }

1772 ```1795 ```

1773 1796 

1774 `-NoProfile` 标志会跳过加载您的 PowerShell 配置文件,使 hook 快速启动,`-ExecutionPolicy Bypass` 则允许 PowerShell 运行本地脚本文件。1797 `-NoProfile` 标志会跳过加载您的 PowerShell 配置文件,使 hook 快速启动;`-ExecutionPolicy Bypass` 则允许 PowerShell 运行本地脚本文件。

1775 1798 

1776 将此脚本保存到项目中的 `.claude/hooks/plain-display.ps1`:1799 将此脚本保存到项目中的 `.claude/hooks/plain-display.ps1`:

1777 1800 


1794 PreToolUse1817 PreToolUse

1795</h3>1818</h3>

1796 1819 

1797在 Claude 创建工具参数之后、处理工具调用之前运行。可匹配除 `EndConversation` 之外的任何工具名称:包括 `Bash`、`PowerShell`、`Edit`、`Write`、`Read`、`Glob`、`Grep`、`Agent`、`Workflow`、`WebFetch`、`WebSearch`、`AskUserQuestion` 和 `ExitPlanMode` 等内置工具,以及任何 [MCP 工具名称](#match-mcp-tools)。1820在 Claude 创建工具参数之后、处理工具调用之前运行。匹配除 `EndConversation` 之外的任何工具名称:内置工具,如 `Bash`、`PowerShell`、`Edit`、`Write`、`Read`、`Glob`、`Grep`、`Agent`、`Workflow`、`WebFetch`、`WebSearch`、`AskUserQuestion` 和 `ExitPlanMode`,以及任何 [MCP 工具名称](#match-mcp-tools)。

1798 1821 

1799要在磁盘上某个特定文件发生变化时运行 hook(无论是谁写入的),请使用 [FileChanged](#filechanged),而不是按名称匹配文件编辑工具。与 PreToolUse 不同,Claude Code 在更改发生后运行 FileChanged hook,并且它们没有决策控制,因此无法阻止写入。1822要在特定文件在磁盘上发生变化时运行 hook(无论由谁写入),请使用 [FileChanged](#filechanged),而不是按名称匹配文件编辑工具。与 PreToolUse 不同,Claude Code 在变更之后运行 FileChanged hook,且它们没有决策控制,因此无法阻止写入。

1800 1823 

1801<Warning>1824<Warning>

1802 PreToolUse 仅在 Claude 调用工具时运行。您[在提示词中使用 `@` 引用](/docs/zh-CN/common-workflows#reference-files-and-directories)的文件无需任何工具调用即可添加:Claude Code 在构建提示词时插入其内容,因此不会为它们触发任何 PreToolUse hook,包括匹配 `Read` 的 hook。要阻止通过 `@` 引用特定路径,请改用 [`Read` 拒绝规则](/docs/zh-CN/permissions#read-and-edit)。1825 PreToolUse 仅在 Claude 调用工具时运行。默认情况下,您[在提示词中用 `@` 引用](/docs/zh-CN/common-workflows#reference-files-and-directories)的文件会在没有任何工具调用的情况下添加。Claude Code 在构建提示词时插入其内容,因此不会为它们触发任何 PreToolUse hook,包括匹配 `Read` 的 hook。PreToolUse 也不会为 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 触发。

1803 1826 

1804 PreToolUse 也不会为 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 触发。1827 您可以阻止 `@` 引用特定路径,或关闭插入功能:

1828 

1829 * **阻止特定路径**:为这些路径添加 [`Read` 拒绝规则](/docs/zh-CN/permissions#read-and-edit)

1830 * **关闭插入功能**:在您的 shell、用户设置或托管设置中设置 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/zh-CN/env-vars#variables)。这样 Claude 会获得所提及的路径以及一条说明,提示其使用文件工具读取这些路径。如果 Claude 这样做,您匹配的 PreToolUse hook 就会运行。该变量需要 Claude Code v2.1.299 或更高版本,且 Claude Code 会在项目设置和本地设置中忽略它。

1805</Warning>1831</Warning>

1806 1832 

1807使用 [PreToolUse 决策控制](#pretooluse-decision-control)来允许、拒绝、询问或推迟工具调用。1833使用 [PreToolUse 决策控制](#pretooluse-decision-control)来允许、拒绝、询问或延迟工具调用。

1808 1834 

1809`PreToolUse` 上的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 超过其超时时间时,会阻止该工具调用,Claude 会收到一个指明超时的错误结果。其他 hook 返回的显式拒绝仍然优先。1835`PreToolUse` 上的 [Agent SDK 回调 hook](/docs/zh-CN/agent-sdk/hooks) 超过其超时时间时,会阻止该工具调用,Claude 会收到一个指明该超时的错误结果。另一个 hook 返回的显式拒绝仍然优先。

1810 1836 

1811<h4 id="pretooluse-input">1837<h4 id="pretooluse-input">

1812 PreToolUse 输入1838 PreToolUse 输入


1814 1840 

1815除[通用输入字段](#common-input-fields)外,PreToolUse hook 还会接收 `tool_name`、`tool_input` 和 `tool_use_id`。1841除[通用输入字段](#common-input-fields)外,PreToolUse hook 还会接收 `tool_name`、`tool_input` 和 `tool_use_id`。

1816 1842 

1817对于 [MCP 工具](#match-mcp-tools),输入中还会包含 `mcp_server`,这是一个对象,包含服务器的 `name`,以及说明服务器定义来源的 `source`。`source` 的值包括 `plugin`、`sdk`,以及 `user` 和 `project` 等配置作用域。Agent SDK 参考中的 [`McpServerProvenance`](/docs/zh-CN/agent-sdk/typescript#mcpserverprovenance) 列出了所有值,并说明了如何处理无法识别的值。请基于 `source` 而不是 `name` 或 `mcp__<server>__` 工具名前缀做出信任决策。`mcp_server` 字段需要 Claude Code v2.1.274 或更高版本。1843对于 [MCP 工具](#match-mcp-tools),输入还携带 `mcp_server`,这是一个对象,包含服务器的 `name` 和一个说明服务器定义来源的 `source`。`source` 的值包括 `plugin`、`sdk`,以及 `user` 和 `project` 等配置作用域。Agent SDK 参考中的 [`McpServerProvenance`](/docs/zh-CN/agent-sdk/typescript#mcpserverprovenance) 列出了所有值,并说明了如何处理您无法识别的值。请基于 `source` 而不是 `name` 或 `mcp__<server>__` 工具名称前缀来做信任决策。`mcp_server` 字段需要 Claude Code v2.1.274 或更高版本。

1818 1844 

1819对于文件工具 `Write`、`Edit` 和 `Read`,`tool_input.file_path` 始终是绝对路径:1845对于文件工具 `Write`、`Edit` 和 `Read`,`tool_input.file_path` 始终是绝对路径:

1820 1846 

1821* Claude Code 会在 hook 运行前展开 `~` 和相对路径,因此基于路径匹配的 hook 无法通过 `~` 或同一路径的相对写法被绕过1847* Claude Code 在 hook 运行之前会展开 `~` 和相对路径,因此基于路径匹配的 hook 无法通过 `~` 或同一路径的相对写法被绕过

1822* 在 Windows 上,路径以反斜杠分隔符传入,即使您的 hook 在 Git Bash 下运行(其中 `$PWD` 看起来像 `/c/project`)也是如此1848* 在 Windows 上,路径以反斜杠分隔符传入,即使您的 hook 在 `$PWD` 看起来像 `/c/project` 的 Git Bash 下运行也是如此

1823* 使用正斜杠编写的比较(例如 `/src/` 检查)永远不会匹配反斜杠路径,工具调用会像 hook 没有任何需要阻止的内容一样继续进行1849* 使用正斜杠编写的比较(例如 `/src/` 检查)永远不会匹配反斜杠路径,工具调用会如同 hook 没有任何需要阻止的内容一样继续进行

1824* 比较之前请先规范化分隔符:在 Bash 中使用 `FILE_PATH="${FILE_PATH//\\//}"`,在 Python 中使用 `file_path.replace("\\", "/")`,然后匹配诸如 `/src/` 这样的路径片段,而不要用 `^` 锚定,因为路径是绝对路径1850* 比较之前请规范化分隔符:在 Bash 中使用 `FILE_PATH="${FILE_PATH//\\//}"`,在 Python 中使用 `file_path.replace("\\", "/")`,然后匹配路径片段(如 `/src/`),而不是用 `^` 锚定,因为路径是绝对路径

1825 1851 

1826Windows 上的 `Write` 调用会传入:1852Windows 上的 `Write` 调用会传递:

1827 1853 

1828```json theme={null}1854```json theme={null}

1829{1855{


1837}1863}

1838```1864```

1839 1865 

1840`tool_input` 字段取决于具体工具:1866`tool_input` 字段取决于工具:

1841 1867 

1842<a id="bash" />1868<a id="bash" />

1843 1869 


1847 1873 

1848执行 shell 命令。1874执行 shell 命令。

1849 1875 

1850| 字段 | 类型 | 示例 | 描述 |1876| 字段 | 类型 | 示例 | 说明 |

1851| :- | :- | :- | :- |1877| :- | :- | :- | :- |

1852| `command` | string | `"npm test"` | 要执行的 shell 命令 |1878| `command` | string | `"npm test"` | 要执行的 shell 命令 |

1853| `description` | string | `"Run test suite"` | 可选,描述该命令的作用 |1879| `description` | string | `"Run test suite"` | 可选,描述该命令的作用 |

1854| `timeout` | number | `120000` | 可选,以毫秒为单位的超时时间。超过[最大值](/docs/zh-CN/tools-reference#bash-tool-behavior)的值会被降至最大值,而不会被拒绝 |1880| `timeout` | number | `120000` | 可选,以毫秒为单位的超时时间。超过[最大值](/docs/zh-CN/tools-reference#bash-tool-behavior)的值会被降至最大值,而不是被拒绝 |

1855| `run_in_background` | boolean | `false` | 是否在后台运行该命令 |1881| `run_in_background` | boolean | `false` | 是否在后台运行该命令 |

1856 1882 

1857当 Bash 命令更改 Git 仓库中的文件时,Claude Code 可以记录更改的内容。当 [`bashEditDiffEnabled`](/docs/zh-CN/settings-reference#basheditdiffenabled) 设置启用记录时,它会在所有权限模式下记录更改;该设置的条目说明了哪些文件可以设置它。否则,它仅在自动模式和 `bypassPermissions` 模式下记录,并且仅在 Claude Code 指示 Claude 通过 Bash 编辑文件时记录。将 `bashEditDiffEnabled` 设置为 `false` 可关闭记录。后台命令和只读命令不携带 diff。1883当 Bash 命令更改 Git 仓库中的文件时,Claude Code 可以记录更改的内容。当 [`bashEditDiffEnabled`](/docs/zh-CN/settings-reference#basheditdiffenabled) 设置开启记录时,它会在所有权限模式下记录更改;该设置的条目说明了哪些文件可以设置它。否则,它仅在自动模式和 `bypassPermissions` 模式下记录,且仅当 Claude Code 指示 Claude 通过 Bash 编辑文件时才记录。将 `bashEditDiffEnabled` 设置为 `false` 可关闭记录。后台命令和只读命令不带 diff。

1858 1884 

1859随后,您的 [PostToolUse hook](#posttooluse) 会在 `tool_response.bashEditDiff` 中接收到已更改的文件。该列表涵盖命令运行期间仓库下发生的更改。Git 忽略的文件和子模块中的文件不会列出。需要 Claude Code v2.1.269 或更高版本。1885然后,您的 [PostToolUse hook](#posttooluse) 会在 `tool_response.bashEditDiff` 中接收更改的文件。该列表涵盖命令运行期间仓库下发生更改的内容。Git 忽略的文件和子模块中的文件不会列出。需要 Claude Code v2.1.269 或更高版本。

1860 1886 

1861<Note>1887<Note>

1862 该列表为尽力而为,目前处于公测阶段。Claude Code 可能会遗漏更改、包含同一时间被其他进程更改的文件,或在达到其大小限制时停止。字段结构可能会变化。请使用该列表来确定需要审查的内容,而不要用它来强制执行策略。1888 该列表是尽力而为的,目前处于公测阶段。Claude Code 可能遗漏某个更改、包含另一个进程同时更改的文件,或在达到其大小限制时停止。字段结构可能会更改。请使用该列表来确定需要审查的内容,而不是用来执行策略。

1863</Note>1889</Note>

1864 1890 

1865`changedFiles` 和 `files` 列出命令更改的内容;其余字段说明该列表的完整程度和可靠程度。1891`changedFiles` 和 `files` 列出命令更改的内容;其余字段说明该列表的完整程度和可靠程度。

1866 1892 

1867| 字段 | 类型 | 示例 | 描述 |1893| 字段 | 类型 | 示例 | 说明 |

1868| :- | :- | :- | :- |1894| :- | :- | :- | :- |

1869| `changedFiles` | array | `["/path/to/src/app.ts"]` | 命令更改的文件的绝对路径,最多 200 个。只要 `files` 中包含 diff 或 `moreFiles` 大于零,该字段就会存在 |1895| `changedFiles` | array | `["/path/to/src/app.ts"]` | 命令更改的文件的绝对路径,最多 200 个。只要 `files` 包含 diff 或 `moreFiles` 大于零就会存在 |

1870| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | 最多 5 个已更改文件的 diff,用于显示。对于命令新增或删除的文件,`created` 或 `deleted` 为 `true` |1896| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | 最多 5 个已更改文件的 diff,用于显示。对于命令添加或删除的文件,`created` 或 `deleted` 为 `true` |

1871| `moreFiles` | number | `2` | 在 `files` 中没有 diff 的已更改文件数量 |1897| `moreFiles` | number | `2` | 在 `files` 中没有 diff 的已更改文件数量 |

1872| `unavailable` | boolean | `true` | 当 diff 不完整或无法获取时设置 |1898| `unavailable` | boolean | `true` | 当 diff 不完整或无法获取时设置 |

1873| `skipped` | boolean | `true` | 针对会移动工作树的 Git 命令(例如 `git checkout` 或 `git stash`)设置,此时 Claude Code 不获取 diff |1899| `skipped` | boolean | `true` | 对于移动工作树的 Git 命令(如 `git checkout` 或 `git stash`)设置,此时 Claude Code 不获取 diff |

1874| `shared` | boolean | `true` | 当另一个 Bash 工具调用(例如子代理的调用)同时在同一仓库中运行时设置,因此列出的某些更改可能来自该命令 |1900| `shared` | boolean | `true` | 当另一个 Bash 工具调用(例如子代理的调用)同时在同一仓库中运行时设置,因此列出的部分更改可能来自该命令 |

1875 1901 

1876<a id="powershell" />1902<a id="powershell" />

1877 1903 


1879 PowerShell1905 PowerShell

1880</h5>1906</h5>

1881 1907 

1882执行 PowerShell 命令。关于各平台的可用性,请参阅 [PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool)。1908执行 PowerShell 命令。有关各平台的可用性,请参阅 [PowerShell 工具](/docs/zh-CN/tools-reference#powershell-tool)。

1883 1909 

1884字段与 Bash 工具相同,命令字符串位于 `command` 中:1910字段与 Bash 工具相同,命令字符串位于 `command` 中:

1885 1911 

1886| 字段 | 类型 | 示例 | 描述 |1912| 字段 | 类型 | 示例 | 说明 |

1887| :- | :- | :- | :- |1913| :- | :- | :- | :- |

1888| `command` | string | `"Get-ChildItem -Recurse"` | 要执行的 PowerShell 命令 |1914| `command` | string | `"Get-ChildItem -Recurse"` | 要执行的 PowerShell 命令 |

1889| `description` | string | `"List files recursively"` | 可选,描述该命令的作用 |1915| `description` | string | `"List files recursively"` | 可选,描述该命令的作用 |


1892 1918 

1893在检查 shell 命令的 hook 中匹配 `Bash|PowerShell`,以便同时覆盖这两个工具:1919在检查 shell 命令的 hook 中匹配 `Bash|PowerShell`,以便同时覆盖这两个工具:

1894 1920 

1895* 在 Windows 上,只要启用了 PowerShell 工具,Claude 就会将 PowerShell 视为主 shell,并通过它路由 shell 命令。1921* 在 Windows 上,只要启用了 PowerShell 工具,Claude 就会将 PowerShell 视为主 shell,并通过它执行 shell 命令。

1896* 在没有 Git Bash 的 Windows 上,该工具会自动启用,Claude Code 根本不会注册 Bash 工具。1922* 在没有 Git Bash 的 Windows 上,该工具会自动启用,而 Claude Code 根本不会注册 Bash 工具。

1897* 仅匹配 `Bash` 的 hook 在那里永远不会触发。1923* 仅匹配 `Bash` 的 hook 在那里永远不会触发。

1898 1924 

1899<h5 id="write">1925<h5 id="write">


1902 1928 

1903创建或覆盖文件。1929创建或覆盖文件。

1904 1930 

1905| 字段 | 类型 | 示例 | 描述 |1931| 字段 | 类型 | 示例 | 说明 |

1906| :- | :- | :- | :- |1932| :- | :- | :- | :- |

1907| `file_path` | string | `"/path/to/file.txt"` | 要写入的文件的绝对路径 |1933| `file_path` | string | `"/path/to/file.txt"` | 要写入的文件的绝对路径 |

1908| `content` | string | `"file content"` | 要写入文件的内容 |1934| `content` | string | `"file content"` | 要写入文件的内容 |


1913 1939 

1914替换现有文件中的字符串。1940替换现有文件中的字符串。

1915 1941 

1916| 字段 | 类型 | 示例 | 描述 |1942| 字段 | 类型 | 示例 | 说明 |

1917| :- | :- | :- | :- |1943| :- | :- | :- | :- |

1918| `file_path` | string | `"/path/to/file.txt"` | 要编辑的文件的绝对路径 |1944| `file_path` | string | `"/path/to/file.txt"` | 要编辑的文件的绝对路径 |

1919| `old_string` | string | `"original text"` | 要查找并替换的文本 |1945| `old_string` | string | `"original text"` | 要查找并替换的文本 |

1920| `new_string` | string | `"replacement text"` | 替换文本 |1946| `new_string` | string | `"replacement text"` | 替换文本 |

1921| `replace_all` | boolean | `false` | 是否替换所有出现之处 |1947| `replace_all` | boolean | `false` | 是否替换所有匹配项 |

1922 1948 

1923<h5 id="read">1949<h5 id="read">

1924 Read1950 Read


1926 1952 

1927读取文件内容。1953读取文件内容。

1928 1954 

1929| 字段 | 类型 | 示例 | 描述 |1955| 字段 | 类型 | 示例 | 说明 |

1930| :- | :- | :- | :- |1956| :- | :- | :- | :- |

1931| `file_path` | string | `"/path/to/file.txt"` | 要读取的文件的绝对路径 |1957| `file_path` | string | `"/path/to/file.txt"` | 要读取的文件的绝对路径 |

1932| `offset` | number | `10` | 可选,开始读取的行号 |1958| `offset` | number | `10` | 可选,开始读取的行号 |


1938 1964 

1939查找与 glob 模式匹配的文件。1965查找与 glob 模式匹配的文件。

1940 1966 

1941| 字段 | 类型 | 示例 | 描述 |1967| 字段 | 类型 | 示例 | 说明 |

1942| :- | :- | :- | :- |1968| :- | :- | :- | :- |

1943| `pattern` | string | `"**/*.ts"` | 用于匹配文件的 glob 模式 |1969| `pattern` | string | `"**/*.ts"` | 用于匹配文件的 glob 模式 |

1944| `path` | string | `"/path/to/dir"` | 可选,要搜索的目录。默认为当前工作目录 |1970| `path` | string | `"/path/to/dir"` | 可选,要搜索的目录。默认为当前工作目录 |


1949 1975 

1950使用正则表达式搜索文件内容。1976使用正则表达式搜索文件内容。

1951 1977 

1952| 字段 | 类型 | 示例 | 描述 |1978| 字段 | 类型 | 示例 | 说明 |

1953| :- | :- | :- | :- |1979| :- | :- | :- | :- |

1954| `pattern` | string | `"TODO.*fix"` | 要搜索的正则表达式模式 |1980| `pattern` | string | `"TODO.*fix"` | 要搜索的正则表达式模式 |

1955| `path` | string | `"/path/to/dir"` | 可选,要搜索的文件或目录 |1981| `path` | string | `"/path/to/dir"` | 可选,要搜索的文件或目录 |


1964 1990 

1965获取并处理网页内容。1991获取并处理网页内容。

1966 1992 

1967| 字段 | 类型 | 示例 | 描述 |1993| 字段 | 类型 | 示例 | 说明 |

1968| :- | :- | :- | :- |1994| :- | :- | :- | :- |

1969| `url` | string | `"https://example.com/api"` | 要获取内容的 URL |1995| `url` | string | `"https://example.com/api"` | 要获取内容的 URL |

1970| `prompt` | string | `"Extract the API endpoints"` | 对获取到的内容运行的提示词 |1996| `prompt` | string | `"Extract the API endpoints"` | 对获取的内容运行的提示词 |

1971| `offset` | number | `100000` | 可选,从页面开头跳过的字符数。Claude 会设置它以继续读取较长的页面。需要 Claude Code v2.1.290 或更高版本 |1997| `offset` | number | `100000` | 可选,从页面开头跳过的字符数。Claude 设置它以继续阅读长页面。需要 Claude Code v2.1.290 或更高版本 |

1972 1998 

1973<h5 id="websearch">1999<h5 id="websearch">

1974 WebSearch2000 WebSearch


1976 2002 

1977搜索网络。2003搜索网络。

1978 2004 

1979| 字段 | 类型 | 示例 | 描述 |2005| 字段 | 类型 | 示例 | 说明 |

1980| :- | :- | :- | :- |2006| :- | :- | :- | :- |

1981| `query` | string | `"react hooks best practices"` | 搜索查询 |2007| `query` | string | `"react hooks best practices"` | 搜索查询 |

1982| `allowed_domains` | array | `["docs.example.com"]` | 可选:仅包含来自这些域的结果 |2008| `allowed_domains` | array | `["docs.example.com"]` | 可选:仅包含来自这些域名的结果 |

1983| `blocked_domains` | array | `["spam.example.com"]` | 可选:排除来自这些域的结果 |2009| `blocked_domains` | array | `["spam.example.com"]` | 可选:排除来自这些域名的结果 |

1984 2010 

1985<h5 id="agent">2011<h5 id="agent">

1986 Agent2012 Agent


1988 2014 

1989生成一个[子代理](/docs/zh-CN/sub-agents)。2015生成一个[子代理](/docs/zh-CN/sub-agents)。

1990 2016 

1991| 字段 | 类型 | 示例 | 描述 |2017| 字段 | 类型 | 示例 | 说明 |

1992| :- | :- | :- | :- |2018| :- | :- | :- | :- |

1993| `prompt` | string | `"Find all API endpoints"` | Agent 要执行的任务 |2019| `prompt` | string | `"Find all API endpoints"` | Agent 要执行的任务 |

1994| `description` | string | `"Find API endpoints"` | 任务的简短描述 |2020| `description` | string | `"Find API endpoints"` | 任务的简短说明 |

1995| `subagent_type` | string | `"Explore"` | 要使用的专用 Agent 类型 |2021| `subagent_type` | string | `"Explore"` | 要使用的专用 Agent 类型 |

1996| `model` | string | `"sonnet"` | 可选,用于覆盖默认值的模型别名 |2022| `model` | string | `"sonnet"` | 可选,用于覆盖默认值的模型别名 |

1997 2023 

1998当前台 Agent 调用完成时,您的 [PostToolUse hook](#posttooluse) 会在 `tool_response` 中接收到子代理的结果和运行遥测数据。读取这些字段即可检查该次运行;如需汇总各子代理的 token 和成本,请使用按 `query_source` `"subagent"` 过滤的 [token 和成本计数器](/docs/zh-CN/monitoring-usage#token-counter),因为 `totalTokens` 和 `usage` 只涵盖最后一个请求:2024当前台 Agent 调用完成时,您的 [PostToolUse hook](#posttooluse) 会在 `tool_response` 中接收子代理的结果和运行遥测数据。读取这些字段以检查运行情况;要汇总各子代理的 token 和成本,请使用按 `query_source` `"subagent"` 过滤的 [token 和成本计数器](/docs/zh-CN/monitoring-usage#token-counter),因为 `totalTokens` 和 `usage` 仅涵盖最后一次请求:

1999 2025 

2000| 字段 | 类型 | 示例 | 描述 |2026| 字段 | 类型 | 示例 | 说明 |

2001| :- | :- | :- | :- |2027| :- | :- | :- | :- |

2002| `status` | string | `"completed"` | 前台子代理为 `"completed"`,后台子代理为 `"async_launched"`。子代理默认在后台运行,因此省略 `run_in_background` 的 Agent 调用也会产生 `"async_launched"` |2028| `status` | string | `"completed"` | 前台子代理为 `"completed"`,后台子代理为 `"async_launched"`。子代理默认在后台运行,因此省略 `run_in_background` 的 Agent 调用也会产生 `"async_launched"` |

2003| `agentId` | string | `"a4d2c8f1e0b3a297"` | 子代理运行的标识符 |2029| `agentId` | string | `"a4d2c8f1e0b3a297"` | 子代理运行的标识符 |

2004| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | 子代理的最终文本块;对于通过 `SubagentHandback` 提交报告的子代理,则以一条关于该交回的简短说明代替 |2030| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | 子代理的最终文本块;对于通过 `SubagentHandback` 提交报告的子代理,则代之以一条关于该移交的简短说明 |

2005| `resolvedModel` | string | `"claude-sonnet-4-5"` | 子代理启动时使用的模型,可能与请求的模型不同 |2031| `resolvedModel` | string | `"claude-sonnet-4-5"` | 子代理启动时使用的模型,可能与请求的模型不同 |

2006| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | 按顺序使用的模型,连续重复项会被合并;仅在运行中途更换模型时设置。需要 Claude Code v2.1.212 或更高版本 |2032| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | 按顺序使用的模型,连续重复项会合并;仅当运行中途切换了模型时设置。需要 Claude Code v2.1.212 或更高版本 |

2007| `totalTokens` | number | `12450` | 子代理最后一次 API 请求的 token 数:输入、输出和缓存 token 之和。这不是整个运行的总数 |2033| `totalTokens` | number | `12450` | 子代理最后一次 API 请求的 token 数:输入、输出和缓存 token 的总和。这不是整个运行的总数 |

2008| `totalDurationMs` | number | `48211` | 子代理运行的实际时长 |2034| `totalDurationMs` | number | `48211` | 子代理运行的实际耗时 |

2009| `totalToolUseCount` | number | `7` | 子代理进行的工具调用次数 |2035| `totalToolUseCount` | number | `7` | 子代理进行的工具调用次数 |

2010| `usage` | object | `{"input_tokens": 8320, ...}` | 最后一次 API 请求按类型划分的 token 明细:`input_tokens`、`output_tokens`、`cache_creation_input_tokens`、`cache_read_input_tokens` |2036| `usage` | object | `{"input_tokens": 8320, ...}` | 最后一次 API 请求按类型划分的 token 明细:`input_tokens`、`output_tokens`、`cache_creation_input_tokens`、`cache_read_input_tokens` |

2011 2037 

2012在 Claude Code v2.1.271 或更高版本中,使用 [`SubagentHandback`](/docs/zh-CN/tools-reference) 工具(Claude Code 在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中提供)运行的子代理会通过该工具提交其报告,而不是以文本形式返回。此时其 `completed` 结果的 `content` 字段携带的是关于该交回的简短说明,而不是报告本身。要读取报告,请让 `PreToolUse` 或 `PostToolUse` hook 匹配 `SubagentHandback`,并读取 `tool_input.message`。2038在 Claude Code v2.1.271 或更高版本中,使用 [`SubagentHandback`](/docs/zh-CN/tools-reference) 工具(Claude Code 在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下提供)运行的子代理会通过该工具提交报告,而不是以文本形式返回。此时其 `completed` 结果的 `content` 字段携带的是关于该移交的简短说明,而不是报告本身。要读取报告,请在 `SubagentHandback` 上匹配 `PreToolUse` 或 `PostToolUse` hook,并读取 `tool_input.message`。

2013 2039 

2014对于后台子代理,工具会在任务转入后台时返回,因此 `tool_response` 不携带任何用量字段:后台启动会立即返回,而 Claude Code 在运行中途转入后台的前台任务会在转换时返回。它包含 `status: "async_launched"`、`agentId`、`description`、`prompt`、`outputFile` 和 `resolvedModel`。2040对于后台子代理,工具会在任务移到后台时返回,因此 `tool_response` 不携带用量字段:后台启动会立即返回,而 Claude Code 在运行中途移到后台的前台任务会在该转换时返回。它包含 `status: "async_launched"`、`agentId`、`description`、`prompt`、`outputFile` 和 `resolvedModel`。

2015 2041 

2016在 `completed` 响应中,`resolvedModel` 表示子代理启动时使用的模型,它可能与 `tool_input` 中的 `model` 值不同,例如当 `availableModels` 或其他覆盖生效时。在 `async_launched` 响应中,`resolvedModel` 表示 Agent 转入后台时正在使用的模型,因此转入后台之前发生的模型更换会反映在其中。`modelsUsed` 以及转入后台时的 `resolvedModel` 行为需要 Claude Code v2.1.212 或更高版本。2042在 `completed` 响应中,`resolvedModel` 指明子代理启动时使用的模型,它可能与 `tool_input` 中的 `model` 值不同,例如当 `availableModels` 或其他覆盖生效时。在 `async_launched` 响应中,`resolvedModel` 指明 Agent 移到后台时正在使用的模型,因此在移到后台之前发生的切换会反映在其中。`modelsUsed` 以及移到后台时的 `resolvedModel` 行为需要 Claude Code v2.1.212 或更高版本。

2017 2043 

2018<a id="askuserquestion" />2044<a id="askuserquestion" />

2019 2045 


2021 AskUserQuestion2047 AskUserQuestion

2022</h5>2048</h5>

2023 2049 

2024向用户提出一到四个多选题。2050向用户提出一到四个多项选择问题。

2025 2051 

2026| 字段 | 类型 | 示例 | 描述 |2052| 字段 | 类型 | 示例 | 说明 |

2027| :- | :- | :- | :- |2053| :- | :- | :- | :- |

2028| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React", "description": "Component library"}, {"label": "Vue", "description": "Progressive framework"}], "multiSelect": false}]` | 要呈现的问题,每个问题包含 `question` 字符串、简短的 `header`、`options` 数组以及可选的 `multiSelect` 标志 |2054| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React", "description": "Component library"}, {"label": "Vue", "description": "Progressive framework"}], "multiSelect": false}]` | 要呈现的问题,每个问题包含一个 `question` 字符串、简短的 `header`、`options` 数组和可选的 `multiSelect` 标志 |

2029| `answers` | object | `{"Which framework?": "React"}` | 可选。将问题文本映射到所选选项的标签。多选答案用逗号连接各标签。Claude 不会设置此字段;如需以编程方式作答,请通过 `updatedInput` 提供 |2055| `answers` | object | `{"Which framework?": "React"}` | 可选。将问题文本映射到所选选项的标签。多选答案用逗号连接标签。Claude 不会设置此字段;通过 `updatedInput` 提供它以编程方式作答 |

2030 2056 

2031<h5 id="exitplanmode">2057<h5 id="exitplanmode">

2032 ExitPlanMode2058 ExitPlanMode

2033</h5>2059</h5>

2034 2060 

2035呈现一个计划,并在 Claude 离开[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)之前请求用户批准。Claude 在调用该工具之前会将计划写入磁盘上的文件,因此模型给出的原始 `tool_input` 通常为空。Claude Code 会在将输入传递给 hook 之前注入计划内容和文件路径。2061呈现一个计划,并在 Claude 离开[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)之前请求用户批准。Claude 在调用该工具之前将计划写入磁盘上的文件,因此模型给出的原始 `tool_input` 通常为空。Claude Code 会在将输入传递给 hook 之前注入计划内容和文件路径。

2036 2062 

2037| 字段 | 类型 | 示例 | 描述 |2063| 字段 | 类型 | 示例 | 说明 |

2038| :- | :- | :- | :- |2064| :- | :- | :- | :- |

2039| `plan` | string | `"## Refactor auth\n1. Extract..."` | Markdown 格式的计划内容。从磁盘上的计划文件注入 |2065| `plan` | string | `"## Refactor auth\n1. Extract..."` | Markdown 格式的计划内容。从磁盘上的计划文件注入 |

2040| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | 计划文件的路径。由注入得到 |2066| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | 计划文件的路径。注入 |

2041| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | 已弃用。Claude Code 接受该字段但会忽略它。在 v2.1.205 之前,它携带 Claude 为实施计划而请求的基于提示词的权限 |2067| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | 已弃用。Claude Code 接受该字段但会忽略它。在 v2.1.205 之前,它携带 Claude 为实施计划而请求的基于提示词的权限 |

2042 2068 

2043在 `PostToolUse` 中,`tool_response` 是一个对象,其 `plan` 和 `filePath` 字段包含已批准的计划,另外还有一些内部状态标志。请读取 `tool_response.plan` 获取计划内容,而不要从磁盘重新读取文件。2069在 `PostToolUse` 中,`tool_response` 是一个对象,其 `plan` 和 `filePath` 字段包含已批准的计划,此外还有内部状态标志。请读取 `tool_response.plan` 获取计划内容,而不是从磁盘重新读取文件。

2044 2070 

2045<h4 id="pretooluse-decision-control">2071<h4 id="pretooluse-decision-control">

2046 PreToolUse 决策控制2072 PreToolUse 决策控制

2047</h4>2073</h4>

2048 2074 

2049`PreToolUse` hook 可以控制工具调用是否继续。与使用顶层 `decision` 字段的其他 hook 不同,PreToolUse 在 `hookSpecificOutput` 对象中返回其决策。这为其提供了更丰富的控制能力:四种结果(允许、拒绝、询问或推迟),以及在执行前修改工具输入的能力。2075`PreToolUse` hook 可以控制工具调用是否继续。与使用顶层 `decision` 字段的其他 hook 不同,PreToolUse 在 `hookSpecificOutput` 对象中返回其决策。这为其提供了更丰富的控制:四种结果(允许、拒绝、询问或延迟),以及在执行前修改工具输入的能力。

2050 2076 

2051| 字段 | 描述 |2077| 字段 | 说明 |

2052| :- | :- |2078| :- | :- |

2053| `permissionDecision` | `"allow"` 跳过权限提示,但以下情况除外:[任何模式都不会自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)、[从网络路径读取](/docs/zh-CN/permissions#network-paths),以及需要[与 `updatedInput` 搭配使用](#allow-with-updatedinput)的 `AskUserQuestion` 和 `ExitPlanMode`。`"deny"` 阻止工具调用。`"ask"` 提示用户确认。`"defer"` 正常退出,以便稍后恢复该工具。无论 hook 返回什么,[拒绝和询问规则](/docs/zh-CN/permissions#manage-permissions)仍会被评估 |2079| `permissionDecision` | `"allow"` 会跳过权限提示,但以下情况除外:[任何模式都不会自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)、[从网络路径读取](/docs/zh-CN/permissions#network-paths),以及 `AskUserQuestion` 和 `ExitPlanMode`(它们需要[与 `updatedInput` 配合使用](#allow-with-updatedinput))。`"deny"` 会阻止工具调用。`"ask"` 会提示用户确认。`"defer"` 会正常退出,以便稍后恢复该工具。无论 hook 返回什么,[拒绝和询问规则](/docs/zh-CN/permissions#manage-permissions)仍会被评估 |

2054| `permissionDecisionReason` | 对于 `"ask"`,在权限提示中向用户显示。当 Claude Code 在无人能响应该提示的 `-p` 运行中[拒绝调用](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)时,Claude 会改为在工具结果中读取该原因。对于 `"deny"`,向 Claude 显示。对于 `"allow"` 和 `"defer"`,仅写入[调试日志](#debug-hooks) |2080| `permissionDecisionReason` | 对于 `"ask"`,在权限提示中显示给用户。当 Claude Code 在无人能回应该提示的 `-p` 运行中[拒绝该调用](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)时,Claude 会在工具结果中读取该原因。对于 `"deny"`,显示给 Claude。对于 `"allow"` 和 `"defer"`,仅写入[调试日志](#debug-hooks) |

2055| `updatedInput` | 在执行前修改工具的输入参数。会替换整个输入对象,因此请将未更改的字段与修改后的字段一并包含在内。Claude Code 会针对您的 hook 返回的输入(而不是 Claude 发送的输入)评估权限规则以及 Bash 命令的[自动转入后台资格](/docs/zh-CN/tools-reference#foreground-commands-that-move-to-the-background)。与 `"allow"` 结合可自动批准,与 `"ask"` 结合可向用户显示修改后的输入。对于 `"defer"` 会被忽略 |2081| `updatedInput` | 在执行前修改工具的输入参数。会替换整个输入对象,因此请将未更改的字段与修改后的字段一起包含。Claude Code 会针对您的 hook 返回的输入(而非 Claude 发送的输入)评估权限规则以及 Bash 命令的[自动转入后台资格](/docs/zh-CN/tools-reference#foreground-commands-that-move-to-the-background)。与 `"allow"` 结合可自动批准,与 `"ask"` 结合可向用户显示修改后的输入。对于 `"defer"`,会被忽略 |

2056| `additionalContext` | 与工具结果一同添加到 Claude 上下文中的字符串。当 `permissionDecision` 为 `"defer"` 时会被忽略。请参阅[为 Claude 添加上下文](#add-context-for-claude) |2082| `additionalContext` | 与工具结果一起添加到 Claude 上下文中的字符串。当 `permissionDecision` 为 `"defer"` 时会被忽略。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

2057 2083 

2058当多个 PreToolUse hook 返回不同的决策时,优先级为 `deny` > `defer` > `ask` > `allow`。2084当多个 PreToolUse hook 返回不同的决策时,优先级为 `deny` > `defer` > `ask` > `allow`。

2059 2085 

2060通过以 2 退出来阻止的 hook,其处理方式与 `"deny"` 相同:Claude 会将 stderr 消息视为拒绝原因。2086通过以退出码 2 退出来阻止的 hook,其处理方式与 `"deny"` 相同:Claude 会将 stderr 消息视为拒绝原因。

2061 2087 

2062当 hook 返回 `"ask"` 时,向用户显示的权限提示中会包含一个标签,标明该 hook 的来源:来自任何设置文件或 Agent frontmatter 的 hook 为 `[settings]`,插件的 hook 为 `[plugin:<name>]`,来自 skill frontmatter 的 hook 为 `[skill]`。这有助于用户了解是哪个配置来源在请求确认。2088当 hook 返回 `"ask"` 时,显示给用户的权限提示会包含一个标签,标明该 hook 的来源:来自任何设置文件或 Agent frontmatter 的 hook 为 `[settings]`,插件的 hook 为 `[plugin:<name>]`,来自 skill frontmatter 的 hook 为 `[skill]`。这有助于用户了解是哪个配置来源在请求确认。

2063 2089 

2064hook 的 `"ask"` 在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)中也会强制显示权限提示:分类器仍然可以拒绝该工具调用,但不能在不提示的情况下批准它。在 v2.1.211 之前,分类器可以在不显示 hook 所请求提示的情况下批准在[沙箱](/docs/zh-CN/sandboxing)外运行的 Bash 命令;分类器仍会对该命令应用其自身的安全规则,并且 hook 的 `"deny"` 始终会被遵守。2090hook 的 `"ask"` 在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下也会强制显示权限提示:分类器仍可以拒绝该工具调用,但无法静默批准该调用。在 v2.1.211 之前,分类器可以在不显示 hook 所请求提示的情况下,批准在[沙箱](/docs/zh-CN/sandboxing)外运行的 Bash 命令;分类器仍会对该命令应用其自身的安全规则,且 hook 的 `"deny"` 始终会被遵守。

2065 2091 

2066```json theme={null}2092```json theme={null}

2067{2093{


2078```2104```

2079 2105 

2080<Note>2106<Note>

2081 PreToolUse 以前使用顶层的 `decision` 和 `reason` 字段,但对于此事件,这些字段已弃用。请改用 `hookSpecificOutput.permissionDecision` 和 `hookSpecificOutput.permissionDecisionReason`。已弃用的值 `"approve"` 和 `"block"` 分别映射到 `"allow"` 和 `"deny"`。PostToolUse 和 Stop 等其他事件仍将顶层的 `decision` 和 `reason` 作为其当前格式使用。2107 PreToolUse 以前使用顶层的 `decision` 和 `reason` 字段,但这些字段在此事件中已弃用。请改用 `hookSpecificOutput.permissionDecision` 和 `hookSpecificOutput.permissionDecisionReason`。已弃用的值 `"approve"` 和 `"block"` 分别映射到 `"allow"` 和 `"deny"`。PostToolUse 和 Stop 等其他事件继续使用顶层 `decision` 和 `reason` 作为其当前格式。

2082</Note>2108</Note>

2083 2109 

2084<h4 id="allow-with-updatedinput">2110<h4 id="allow-with-updatedinput">

2085 需要用户交互的工具2111 需要用户交互的工具

2086</h4>2112</h4>

2087 2113 

2088`AskUserQuestion` 和 `ExitPlanMode` 需要用户交互。在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)中,只有当运行具有可接收提示的[权限宿主](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)(例如 Agent SDK 的 `canUseTool` 回调)时,Claude Code 才会提供这些工具。2114`AskUserQuestion` 和 `ExitPlanMode` 需要用户交互。在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)下,只有当运行具有接收提示的[权限宿主](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)(例如 Agent SDK 的 `canUseTool` 回调)时,Claude Code 才会提供这些工具。

2089 2115 

2090当 `PreToolUse` hook 执行以下操作时,即可满足该要求:2116`PreToolUse` hook 在执行以下操作时即可满足该要求:

2091 2117 

20921. 从 stdin 读取工具的输入21181. 从 stdin 读取工具的输入

20932. 通过您自己的 UI 收集答案21192. 通过您自己的 UI 收集答案


2095 2121 

2096对于这些工具,仅返回 `"allow"` 是不够的。2122对于这些工具,仅返回 `"allow"` 是不够的。

2097 2123 

2098对于 `AskUserQuestion`,请原样回传原始的 `questions` 数组,并添加一个 [`answers`](#askuserquestion) 对象,将每个问题的文本映射到所选答案。以下输出用 `React` 回答了一个问题:2124对于 `AskUserQuestion`,请原样返回原始的 `questions` 数组,并添加一个 [`answers`](#askuserquestion) 对象,将每个问题的文本映射到所选答案。此输出以 `React` 回答了一个问题:

2099 2125 

2100```json theme={null}2126```json theme={null}

2101{2127{


2117}2143}

2118```2144```

2119 2145 

2120其服务器使用 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 标记的 MCP 工具要求更严格:无论是否带有 `updatedInput`,hook 都无法通过 `"allow"` 跳过其批准提示,因为 Claude Code 无法确认 hook 已完成该工具所需的交互。2146其服务器用 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 标记的 MCP 工具要求更严格:hook 无法通过 `"allow"` 跳过其批准提示,无论是否附带 `updatedInput`,因为 Claude Code 无法确认该 hook 已完成该工具所需的交互。

2121 2147 

2122<h4 id="defer-a-tool-call-for-later">2148<h4 id="defer-a-tool-call-for-later">

2123 推迟工具调用2149 延迟工具调用

2124</h4>2150</h4>

2125 2151 

2126`"defer"` 适用于将 `claude -p` 作为子进程运行并读取其 JSON 输出的集成,例如 Agent SDK 应用或基于 Claude Code 构建的自定义 UI。它让调用进程能够在某个工具调用处暂停 Claude,通过自己的界面收集输入,然后从中断处继续。Claude Code 仅在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)中遵守此值。在交互式会话中,它会记录一条警告并忽略该 hook 结果。2152`"defer"` 适用于将 `claude -p` 作为子进程运行并读取其 JSON 输出的集成,例如 Agent SDK 应用或基于 Claude Code 构建的自定义 UI。它允许调用进程在某个工具调用处暂停 Claude,通过自己的界面收集输入,然后从中断处恢复。Claude Code 仅在使用 `-p` 标志的[非交互模式](/docs/zh-CN/headless)下遵守此值。在交互式会话中,它会记录一条警告并忽略该 hook 结果。

2127 2153 

2128`AskUserQuestion` 工具是典型场景:Claude 想向用户提问,但没有终端可供作答。`-p` 运行只有在具有[权限宿主](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)(例如您通过 `--permission-prompt-tool` 传入的 MCP 工具)时才会提供 `AskUserQuestion`,因此请带上一个权限宿主启动运行。整个往返流程如下:2154`AskUserQuestion` 工具是典型场景:Claude 想向用户提问,但没有可供作答的终端。`-p` 运行只有在具有[权限宿主](/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs)(例如您通过 `--permission-prompt-tool` 传入的 MCP 工具)时才会提供 `AskUserQuestion`,因此请在启动运行时提供一个。完整的往返流程如下:

2129 2155 

21301. Claude 调用 `AskUserQuestion`。`PreToolUse` hook 触发。21561. Claude 调用 `AskUserQuestion`。`PreToolUse` hook 触发。

21312. hook 返回 `permissionDecision: "defer"`。工具不执行。进程以 `stop_reason: "tool_deferred"` 退出,待处理的工具调用保留在会话记录中。21572. hook 返回 `permissionDecision: "defer"`。工具不执行。进程以 `stop_reason: "tool_deferred"` 退出,待处理的工具调用保存在会话记录中。

21323. 调用进程从 SDK 结果中读取 `deferred_tool_use`,在自己的 UI 中展示问题,并等待回答。21583. 调用进程从 SDK 结果中读取 `deferred_tool_use`,在其自己的 UI 中呈现问题,并等待答案。

21334. 调用进程使用相同的权限宿主运行 `claude -p --resume <session-id>`。同一个工具调用再次触发 `PreToolUse`。21594. 调用进程使用相同的权限宿主运行 `claude -p --resume <session-id>`。同一工具调用会再次触发 `PreToolUse`。

21345. hook 返回 `permissionDecision: "allow"`,并在 `updatedInput` 中附带答案。工具执行,Claude 继续。21605. hook 返回 `permissionDecision: "allow"`,并在 `updatedInput` 中附带答案。工具执行,Claude 继续。

2135 2161 

2136`deferred_tool_use` 字段携带工具的 `id`、`name` 和 `input`。`input` 是 Claude 为该工具调用生成的参数,在执行前捕获:2162`deferred_tool_use` 字段携带工具的 `id`、`name` 和 `input`。`input` 是 Claude 为该工具调用生成的参数,在执行前捕获:


2149}2175}

2150```2176```

2151 2177 

2152没有超时或重试次数限制。会话会一直保留在磁盘上,直到您恢复它,但受 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 保留清理的约束,该清理默认会在 30 天后删除会话文件,并遵循[保留清理规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)。如果恢复时答案尚未准备好,hook 可以再次返回 `"defer"`,进程会以相同方式退出。调用进程通过最终让 hook 返回 `"allow"` 或 `"deny"` 来控制何时结束循环。2178没有超时或重试限制。会话会保留在磁盘上直到您恢复它,但受 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 保留清理的约束,该清理默认在 30 天后删除会话文件,遵循[保留清理规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)。如果恢复时答案尚未准备好,hook 可以再次返回 `"defer"`,进程会以同样的方式退出。调用进程通过最终从 hook 返回 `"allow"` 或 `"deny"` 来控制何时结束循环。

2153 2179 

2154`"defer"` 仅在 Claude 在该轮次中只进行一次工具调用时有效。如果 Claude 同时进行多次工具调用,`"defer"` 会被忽略并发出警告,工具会经过正常的权限流程继续。存在此限制是因为恢复时只能重新运行一个工具:无法在推迟一批调用中的某一个的同时,不让其他调用处于未解决状态。2180`"defer"` 仅在 Claude 在该轮次中进行单个工具调用时有效。如果 Claude 同时进行多个工具调用,`"defer"` 会被忽略并给出警告,工具将通过正常的权限流程继续。存在此限制是因为恢复只能重新运行一个工具:无法在不让其他调用悬而未决的情况下,从一批调用中延迟其中一个。

2155 2181 

2156如果恢复时被推迟的工具已不可用,进程会在 hook 触发之前以 `stop_reason: "tool_deferred_unavailable"` 和 `is_error: true` 退出。当提供该工具的 MCP 服务器在恢复的会话中未连接时,就会发生这种情况。`deferred_tool_use` 负载仍会包含在内,以便您确定缺失的是哪个工具。2182如果恢复时延迟的工具已不再可用,进程会在 hook 触发之前以 `stop_reason: "tool_deferred_unavailable"` 和 `is_error: true` 退出。当提供该工具的 MCP 服务器未在恢复的会话中连接时,就会发生这种情况。`deferred_tool_use` 数据仍会包含在内,以便您识别缺失的是哪个工具。

2157 2183 

2158<Note>2184<Note>

2159 要在计划模式下恢复被延迟的会话,请将 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 与 `--resume` 一起传入,以便 Claude Code 可以展示计划供批准。有关其他条件,请参阅[使用 `-p` 在计划模式下恢复](/docs/zh-CN/sessions#resume-in-plan-mode-with-p)。需要 Claude Code v2.1.246 或更高版本。2185 要在计划模式下恢复延迟的会话,请将 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 与 `--resume` 一起传入,以便 Claude Code 可以呈现计划供批准。有关其他条件,请参阅[使用 `-p` 在计划模式下恢复](/docs/zh-CN/sessions#resume-in-plan-mode-with-p)。需要 Claude Code v2.1.246 或更高版本。

2160 2186 

2161 当您使用 `-p` 恢复时,Claude Code 不会还原任何其他已存储的权限模式。它会以新的 `claude -p` 运行所使用的权限模式启动,因此如果被推迟的会话使用了 `--permission-mode` 或 `--dangerously-skip-permissions`,请再次传入。当您不带 `-p` 使用 `claude --resume <session-id>` 恢复时,Claude Code 会还原已存储的权限模式,例外情况列于[恢复时的权限模式](/docs/zh-CN/sessions#permission-mode-on-resume)中。2187 当您使用 `-p` 恢复时,Claude Code 不会还原任何其他已存储的权限模式。它会以新的 `claude -p` 运行所使用的权限模式启动运行,因此如果延迟的会话使用了 `--permission-mode` 或 `--dangerously-skip-permissions`,请再次传入。当您不带 `-p` 使用 `claude --resume <session-id>` 恢复时,Claude Code 会还原已存储的权限模式,但[恢复时的权限模式](/docs/zh-CN/sessions#permission-mode-on-resume)中列出的例外情况除外。

2162</Note>2188</Note>

2163 2189 

2164<h3 id="permissionrequest">2190<h3 id="permissionrequest">

2165 PermissionRequest2191 PermissionRequest

2166</h3>2192</h3>

2167 2193 

2168在 Claude Code 即将向您请求使用某个工具的权限时运行。在无法显示提示的会话中,例如[非交互模式](/docs/zh-CN/headless)下的后台子代理,Claude Code 仍会运行这些 hook,如果没有 hook 返回决策,它会拒绝该工具调用。对于到达 `--permission-prompt-tool` 或 Agent SDK 的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/permissions)的调用,hook 会与您的宿主并行运行,以先做出决策者为准。2194在 Claude Code 即将向您请求使用某个工具的权限时运行。在无法显示提示的会话中,例如[非交互模式](/docs/zh-CN/headless)下的后台子代理,Claude Code 仍会运行这些 hook;如果没有 hook 返回决策,它会拒绝该工具调用。对于到达 `--permission-prompt-tool` 或 Agent SDK [`canUseTool` 回调](/docs/zh-CN/agent-sdk/permissions)的调用,hook 会与您的宿主并行运行,以先做出决策的一方为准。

2169使用 [PermissionRequest 决策控制](#permissionrequest-decision-control)代表用户允许或拒绝。2195使用 [PermissionRequest 决策控制](#permissionrequest-decision-control)代表用户允许或拒绝。

2170 2196 

2171当您需要在 Claude 请求使用工具权限的那一刻获得信号时,请使用此事件。Claude Code 只有在提示已等待约六秒后,才会运行 `permission_prompt` 类型的 [Notification](#notification) hook。2197当您需要在 Claude 请求使用工具权限的那一刻获得信号时,请使用此事件。Claude Code 仅在提示等待约六秒后,才会运行 `permission_prompt` 类型的 [Notification](#notification) hook。

2172 2198 

2173对于沙箱中命令的[网络请求](/docs/zh-CN/sandboxing#network-isolation),Claude Code 不会运行 PermissionRequest hook。要获取该提示的信号,请使用 `permission_prompt` 通知类型。2199Claude Code 不会为沙箱化命令的[网络请求](/docs/zh-CN/sandboxing#network-isolation)运行 PermissionRequest hook。要获取该提示的信号,请使用 `permission_prompt` 通知类型。

2174 2200 

2175按工具名称匹配,取值与 PreToolUse 相同。2201按工具名称匹配,取值与 PreToolUse 相同。

2176 2202 


2178 PermissionRequest 输入2204 PermissionRequest 输入

2179</h4>2205</h4>

2180 2206 

2181PermissionRequest hook 与 PreToolUse hook 一样接收 `tool_name` 和 `tool_input` 字段,但没有 `tool_use_id`。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。可选的 `permission_suggestions` 数组包含 Claude Code 针对此请求建议的[权限更新](#permission-update-entries),例如添加允许规则或更改权限模式。2207PermissionRequest hook 与 PreToolUse hook 一样接收 `tool_name` 和 `tool_input` 字段,但不包含 `tool_use_id`。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。可选的 `permission_suggestions` 数组包含 Claude Code 针对此请求建议的[权限更新](#permission-update-entries),例如添加允许规则或更改权限模式。

2182 2208 

2183`permission_suggestions` 数组并不是您所看到选项的精确列表,因为每个权限对话框都会构建自己的选项。某些对话框(例如文件编辑的对话框)根本不读取该数组,而是根据请求本身得出选项。读取该数组的对话框仍可能隐藏某个建议仍保留在数组中的选项,例如当 [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 隐藏保存规则的选项时。它也可能提供没有对应建议条目的选项,例如 [**Yes, and switch to auto mode**](/docs/zh-CN/permission-modes#switch-permission-modes),该选项直接更改权限模式,而不是通过权限更新。2209`permission_suggestions` 数组并不是您所看到选项的精确列表,因为每个权限对话框都会构建自己的选项。某些对话框(例如用于文件编辑的对话框)根本不读取该数组,而是从请求本身推导出选项。读取该数组的对话框仍可能隐藏某个选项,而其对应建议仍保留在数组中,例如当 [`allowManagedPermissionRulesOnly`](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly) 隐藏保存规则的选项时。对话框也可能提供没有对应建议条目的选项,例如 [**Yes, and switch to auto mode**](/docs/zh-CN/permission-modes#switch-permission-modes),它直接更改权限模式,而不是通过权限更新来实现。

2184 2210 

2185PreToolUse hook 在每次工具调用之前运行,无论该调用是否需要权限。PermissionRequest hook 仅在 Claude Code 即将向您请求权限时,或者在它原本会自动拒绝一个无法提示的调用时运行。这两个事件都不会为 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 触发。2211PreToolUse hook 在每次工具调用之前运行,无论该调用是否需要权限。PermissionRequest hook 仅在 Claude Code 即将向您请求权限时运行,或者在它原本会自动拒绝一个无法弹出提示的调用时运行。这两个事件都不会针对 [`EndConversation`](/docs/zh-CN/tools-reference#endconversation-tool-behavior) 触发。

2186 2212 

2187```json theme={null}2213```json theme={null}

2188{2214{


2211 PermissionRequest 决策控制2237 PermissionRequest 决策控制

2212</h4>2238</h4>

2213 2239 

2214`PermissionRequest` hook 可以允许或拒绝权限请求。除所有 hook 都可用的 [JSON 输出字段](#json-output)外,您的 hook 脚本还可以返回一个包含以下事件专属字段的 `decision` 对象:2240`PermissionRequest` hook 可以允许或拒绝权限请求。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您的 hook 脚本还可以返回一个包含以下事件特定字段的 `decision` 对象:

2215 2241 

2216| 字段 | 描述 |2242| 字段 | 描述 |

2217| :- | :- |2243| :- | :- |

2218| `behavior` | `"allow"` 授予权限,`"deny"` 拒绝权限。[拒绝和询问规则](/docs/zh-CN/permissions#manage-permissions)仍会被评估,因此返回 `"allow"` 的 hook 不会覆盖匹配的拒绝规则 |2244| `behavior` | `"allow"` 授予权限,`"deny"` 拒绝权限。[拒绝规则和询问规则](/docs/zh-CN/permissions#manage-permissions)仍会被评估,因此返回 `"allow"` 的 hook 不会覆盖匹配的拒绝规则 |

2219| `updatedInput` | 仅用于 `"allow"`:在执行前修改工具的输入参数。会替换整个输入对象,因此请将未更改的字段与修改后的字段一并包含在内。修改后的输入会针对拒绝和询问规则重新评估 |2245| `updatedInput` | 仅适用于 `"allow"`:在执行前修改工具的输入参数。它会替换整个输入对象,因此请将未更改的字段与修改后的字段一并包含。修改后的输入会再次根据拒绝规则和询问规则进行评估 |

2220| `updatedPermissions` | 仅用于 `"allow"`:要应用的[权限更新条目](#permission-update-entries)数组,例如添加允许规则或更改会话的权限模式 |2246| `updatedPermissions` | 仅适用于 `"allow"`:要应用的[权限更新条目](#permission-update-entries)数组,例如添加允许规则或更改会话权限模式 |

2221| `message` | 仅用于 `"deny"`:告诉 Claude 权限被拒绝的原因 |2247| `message` | 仅适用于 `"deny"`:告知 Claude 权限被拒绝的原因 |

2222| `interrupt` | 仅用于 `"deny"`:如果为 `true`,则停止 Claude |2248| `interrupt` | 仅适用于 `"deny"`:如果为 `true`,则停止 Claude |

2223 2249 

2224以退出码 2 退出但未提供 `decision` 对象的 hook 不会改变权限流程,其 stderr 会被丢弃。要授予或拒绝请求,请返回 `decision` 对象。2250以退出码 2 退出但未返回 `decision` 对象的 hook 不会改变权限流程,其 stderr 会被丢弃。要授予或拒绝请求,请返回 `decision` 对象。

2225 2251 

2226```json theme={null}2252```json theme={null}

2227{2253{


2241 权限更新条目2267 权限更新条目

2242</h4>2268</h4>

2243 2269 

2244`updatedPermissions` 输出字段和 [`permission_suggestions` 输入字段](#permissionrequest-input)都使用相同的条目对象数组。每个条目都有一个 `type`,它决定该条目的其他字段;还有一个 `destination`,它控制更改写入的位置。2270`updatedPermissions` 输出字段和 [`permission_suggestions` 输入字段](#permissionrequest-input)都使用相同的条目对象数组。每个条目都有一个决定其其他字段的 `type`,以及一个控制更改写入位置的 `destination`。

2245 2271 

2246| `type` | 字段 | 效果 |2272| `type` | 字段 | 效果 |

2247| :- | :- | :- |2273| :- | :- | :- |

2248| `addRules` | `rules`、`behavior`、`destination` | 添加权限规则。`rules` 是由 `{toolName, ruleContent?}` 对象组成的数组。省略 `ruleContent` 即匹配整个工具。`behavior` 为 `"allow"`、`"deny"` 或 `"ask"` |2274| `addRules` | `rules`、`behavior`、`destination` | 添加权限规则。`rules` 是一个由 `{toolName, ruleContent?}` 对象组成的数组。省略 `ruleContent` 可匹配整个工具。`behavior` 为 `"allow"`、`"deny"` 或 `"ask"` |

2249| `replaceRules` | `rules`、`behavior`、`destination` | 用提供的 `rules` 替换 `destination` 中给定 `behavior` 的所有规则 |2275| `replaceRules` | `rules`、`behavior`、`destination` | 用提供的 `rules` 替换 `destination` 处给定 `behavior` 的所有规则 |

2250| `removeRules` | `rules`、`behavior`、`destination` | 移除给定 `behavior` 的匹配规则 |2276| `removeRules` | `rules`、`behavior`、`destination` | 删除给定 `behavior` 的匹配规则 |

2251| `setMode` | `mode`、`destination` | 更改权限模式。有效模式为 `default`、`auto`、`acceptEdits`、`dontAsk`、`bypassPermissions`、`plan`,以及作为 `default` 别名的 `manual` |2277| `setMode` | `mode`、`destination` | 更改权限模式。有效模式为 `default`、`auto`、`acceptEdits`、`dontAsk`、`bypassPermissions`、`plan`,以及作为 `default` 别名的 `manual` |

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

2253| `removeDirectories` | `directories`、`destination` | 移除工作目录 |2279| `removeDirectories` | `directories`、`destination` | 删除工作目录 |

2254 2280 

2255<Note>2281<Note>

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

2257 2283 

2258 无论 `destination` 为何值,`bypassPermissions` 都不会被持久化为 `defaultMode`。2284 无论 `destination` 为何值,`bypassPermissions` 都不会被持久化为 `defaultMode`。

2259</Note>2285</Note>

2260 2286 

2261每个条目上的 `destination` 字段决定更改是仅保留在内存中,还是持久化到设置文件。2287每个条目上的 `destination` 字段决定更改是仅保留在内存中,还是持久化到设置文件中。

2262 2288 

2263| `destination` | 写入位置 |2289| `destination` | 写入位置 |

2264| :- | :- |2290| :- | :- |


2277 2303 

2278按工具名称匹配,取值与 PreToolUse 相同。2304按工具名称匹配,取值与 PreToolUse 相同。

2279 2305 

2280当工具名称不是合适的过滤条件时,可以更宽泛地匹配:2306当工具名称不是合适的过滤条件时,可以进行更宽泛的匹配:

2281 2307 

2282* 要在任何工具成功完成后运行 hook,请省略 `matcher` 或将其设为 `"*"`。然后您的 hook 可以自行发现发生了哪些更改,例如运行 `git status --porcelain`,它还会列出 `git diff` 遗漏的未跟踪文件。对于失败的工具调用,请在 [PostToolUseFailure](#posttoolusefailure) 下添加相同的 hook。2308* 要在任何工具成功完成后运行 hook,请省略 `matcher` 或将其设置为 `"*"`。然后您的 hook 可以自行发现发生了哪些更改,例如运行 `git status --porcelain`,它还会列出 `git diff` 遗漏的未跟踪文件。对于失败的工具调用,请在 [PostToolUseFailure](#posttoolusefailure) 下添加相同的 hook。

2283* 要在特定文件在磁盘上发生更改时运行 hook(无论由谁写入),请使用 [FileChanged](#filechanged)。当 `Bash` 命令或 Claude Code 之外的进程重写同一文件时,Claude Code 不会运行匹配 `Edit|Write` 的 `PostToolUse` hook。2309* 要在特定文件在磁盘上发生更改时运行 hook(无论由谁写入),请使用 [FileChanged](#filechanged)。当 `Bash` 命令或 Claude Code 之外的进程重写同一文件时,Claude Code 不会运行匹配 `Edit|Write` 的 `PostToolUse` hook。

2284 2310 

2285<h4 id="posttooluse-input">2311<h4 id="posttooluse-input">

2286 PostToolUse 输入2312 PostToolUse 输入

2287</h4>2313</h4>

2288 2314 

2289`PostToolUse` hook 在工具已成功执行后触发。输入同时包含 `tool_input`(发送给工具的参数)和 `tool_response`(工具返回的结果)。两者的确切 schema 取决于具体工具。文件类工具的 `tool_input` 路径格式与 [PreToolUse](#pretooluse-input) 相同:始终为绝对路径,使用平台原生分隔符,因此在 Windows 上为反斜杠。对于 MCP 工具,输入还包含 [`mcp_server`](#pretooluse-input) 对象。2315`PostToolUse` hook 在工具已成功执行后触发。输入同时包含 `tool_input`(发送给工具的参数)和 `tool_response`(工具返回的结果)。两者的确切 schema 取决于具体工具。文件工具的 `tool_input` 路径格式与 [PreToolUse](#pretooluse-input) 相同:始终为绝对路径,并使用平台原生的分隔符,因此在 Windows 上为反斜杠。对于 MCP 工具,输入还会携带 [`mcp_server`](#pretooluse-input) 对象。

2290 2316 

2291```json theme={null}2317```json theme={null}

2292{2318{


2317 PostToolUse 决策控制2343 PostToolUse 决策控制

2318</h4>2344</h4>

2319 2345 

2320`PostToolUse` hook 可以在工具执行后向 Claude 提供反馈。除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您的 hook 脚本还可以返回以下事件特定字段:2346`PostToolUse` hook 可以在工具执行后向 Claude 提供反馈。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您的 hook 脚本还可以返回以下事件特定字段:

2321 2347 

2322| 字段 | 描述 |2348| 字段 | 描述 |

2323| :- | :- |2349| :- | :- |

2324| `decision` | `"block"` 会在工具结果旁添加 `reason`。Claude 仍会看到原始输出;要替换它,请使用 `updatedToolOutput` |2350| `decision` | `"block"` 会将 `reason` 添加到工具结果旁边。Claude 仍会看到原始输出;要替换它,请使用 `updatedToolOutput` |

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

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

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

2328| `updatedToolOutput` | 在工具输出发送给 Claude 之前,用提供的值替换它。该值必须与工具的输出结构相匹配 |2354| `updatedToolOutput` | 在工具输出发送给 Claude 之前,用提供的值替换它。该值必须与工具的输出结构相匹配 |

2329| `updatedMCPToolOutput` | 仅替换 [MCP 工具](#match-mcp-tools)的输出。建议优先使用适用于所有工具的 `updatedToolOutput` |2355| `updatedMCPToolOutput` | 仅替换 [MCP 工具](#match-mcp-tools)的输出。建议优先使用适用于所有工具的 `updatedToolOutput` |

2330 2356 

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

2332 2358 

2333```json theme={null}2359```json theme={null}

2334{2360{


2346```2372```

2347 2373 

2348<Warning>2374<Warning>

2349 `updatedToolOutput` 只会改变 Claude 看到的内容。hook 触发时工具已经运行完毕,因此任何已写入的文件、已执行的命令或已发送的网络请求都已生效。诸如 OpenTelemetry 工具 span 和分析事件之类的遥测数据也会在 hook 运行之前捕获原始输出。要在工具调用运行之前阻止或修改它,请改用 [PreToolUse](#pretooluse) hook。2375 `updatedToolOutput` 只会改变 Claude 看到的内容。hook 触发时工具已经运行,因此任何已写入的文件、已执行的命令或已发送的网络请求都已生效。诸如 OpenTelemetry 工具 span 和分析事件之类的遥测数据也会在 hook 运行之前捕获原始输出。要在工具调用运行之前阻止或修改它,请改用 [PreToolUse](#pretooluse) hook。

2350 2376 

2351 替换值必须与工具的输出结构相匹配。内置工具返回的是结构化对象,而非纯字符串。例如,`Bash` 返回一个包含 `stdout`、`stderr`、`interrupted` 和 `isImage` 字段的对象。对于内置工具,与工具输出 schema 不匹配的值会被忽略,并使用原始输出。MCP 工具的输出会直接传递,不进行 schema 验证。删除 Claude 所需的错误详情可能会导致它基于错误的假设继续操作。2377 替换值必须与工具的输出结构相匹配。内置工具返回的是结构化对象,而不是纯字符串。例如,`Bash` 返回一个包含 `stdout`、`stderr`、`interrupted` 和 `isImage` 字段的对象。对于内置工具,与工具输出 schema 不匹配的值会被忽略,并使用原始输出。MCP 工具输出会直接传递,不进行 schema 验证。删除 Claude 需要的错误详细信息可能会导致它基于错误的假设继续执行。

2352</Warning>2378</Warning>

2353 2379 

2354<h4 id="annotate-a-result-for-the-auto-mode-classifier">2380<h4 id="annotate-a-result-for-the-auto-mode-classifier">

2355 为自动模式分类器注释结果2381 为自动模式分类器注释结果

2356</h4>2382</h4>

2357 2383 

2358返回 `classifierContext`,即可将关于工具调用结果的简短说明发送给[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器,而不是发送给 Claude。分类器[从不接收工具结果本身](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions),因此在它审查后续操作之前,此字段是告知它某次调用返回内容的受支持方式。该字段需要 Claude Code v2.1.236 或更高版本。2384返回 `classifierContext` 可将关于工具调用结果的简短说明发送给[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器,而不是发送给 Claude。分类器[从不接收工具结果本身](/docs/zh-CN/permission-modes#how-the-classifier-evaluates-actions),因此该字段是在分类器审查后续操作之前,告知其某次调用返回内容的受支持方式。该字段需要 Claude Code v2.1.236 或更高版本。

2359 2385 

2360以下示例告知分类器某个查询输出的来源:2386下面的示例告知分类器某次查询输出的来源:

2361 2387 

2362```json theme={null}2388```json theme={null}

2363{2389{


2368}2394}

2369```2395```

2370 2396 

2371分类器对该说明的重视程度取决于您配置 hook 的位置:2397分类器对该说明的重视程度取决于您在何处配置该 hook:

2372 2398 

2373* **在 Claude Code 中配置的 hook**:对于来自设置文件、插件、skill 和 Agent frontmatter 的 hook,分类器将该说明视为未经验证的、由应用程序提供的上下文。该说明永远不能确立用户意图;如果它声称您批准或请求了某事,分类器会将该声明与您在对话中发送的消息进行核对2399* **在 Claude Code 中配置的 hook**:对于来自设置文件、插件、skill 和 Agent frontmatter 的 hook,分类器将该说明视为未经验证的、由应用程序提供的上下文。该说明永远不能确立用户意图;如果它声称您批准或请求了某些内容,分类器会将该声明与您在对话中发送的消息进行核对

2374* **进程内 Agent SDK 回调**:当嵌入 Claude Code 的应用程序将 hook 注册为 [TypeScript SDK 回调](/docs/zh-CN/agent-sdk/hooks),并在实时会话期间返回该说明时,分类器可能会将说明中转述的用户陈述视为用户意图。这样的陈述可以满足分类器本会从您发送的消息中接受的同意要求,但它永远不能解除您自己的消息也无法解除的阻止。会话恢复后,Claude Code 会将恢复的说明视为未经验证的上下文。当两组中的 hook 都对同一调用进行注释时,分类器会将合并后的说明视为未经验证的内容2400* **进程内 Agent SDK 回调**:当嵌入 Claude Code 的应用程序将 hook 注册为 [TypeScript SDK 回调](/docs/zh-CN/agent-sdk/hooks)并在实时会话期间返回该说明时,分类器可能会将说明中转述的用户陈述视为用户意图。这样的陈述可以满足分类器原本会从您发送的消息中接受的同意要求,但它永远无法解除您自己的消息同样无法解除的阻止。会话恢复后,Claude Code 会将恢复的说明视为未经验证的上下文。当来自两类的 hook 为同一调用添加注释时,分类器会将合并后的说明视为未经验证

2375 2401 

2376Claude Code 在传递该说明时会应用以下限制:2402Claude Code 在传递该说明时会施加以下限制:

2377 2403 

2378* **长度**:Claude Code 将单次工具调用的说明上限设为 2,000 个字符,并截断其余部分。该上限由响应该调用的所有 hook 共享2404* **长度**:Claude Code 将单次工具调用的说明上限设为 2,000 个字符,并截断其余部分。该上限由响应该调用的所有 hook 共享

2379* **仅限同步响应**:对于[在后台运行](#run-hooks-in-the-background)的 hook,Claude Code 会忽略其响应中的该字段,因为该响应在 Claude Code 记录工具结果之后才到达2405* **仅限同步响应**:对于[在后台运行](#run-hooks-in-the-background)的 hook,Claude Code 会忽略其响应中的该字段,因为该响应在 Claude Code 记录工具结果之后才到达

2380* **分类器不记录的调用**:分类器的会话记录会省略只读查找,例如文件读取和搜索。Claude Code 会丢弃附加在这类调用上的说明2406* **分类器不记录的调用**:分类器的会话记录会省略只读查找,例如文件读取和搜索。Claude Code 会丢弃附加到这类调用上的说明

2381* **与重写的交互**:当说明描述的是您要用 `updatedToolOutput` 替换的输出时,请在同一个 hook 响应中返回这两个字段。如果该重写被拒绝,或被另一个 hook 的重写替换,Claude Code 会丢弃该说明。即使另一个 hook 重写了输出,Claude Code 仍会传递您在没有重写的情况下返回的说明2407* **与重写的交互**:当说明描述的是您正在用 `updatedToolOutput` 替换的输出时,请在同一个 hook 响应中同时返回这两个字段。如果该重写被拒绝,或被另一个 hook 的重写替换,Claude Code 会丢弃该说明。即使另一个 hook 重写了输出,Claude Code 仍会传递您在未进行重写的情况下返回的说明

2382 2408 

2383<Warning>2409<Warning>

2384 分类器会将您放入 `classifierContext` 的内容视为来自托管该会话的应用程序的信息,因此不要将不受信任的工具输出或第三方文本复制到其中。请将说明保持为关于这一次调用的简短断言,例如关于其来源的事实或用户对其的陈述;不要使用该字段传递无关消息或事件流。2410 分类器会将您放入 `classifierContext` 的内容视为来自托管该会话的应用程序的信息,因此请勿将不受信任的工具输出或第三方文本复制到其中。请将说明限定为关于这一次调用的简短断言,例如关于其来源的事实或用户对其所作的陈述;不要使用该字段传递无关消息或一系列事件。

2385</Warning>2411</Warning>

2386 2412 

2387<h3 id="posttoolusefailure">2413<h3 id="posttoolusefailure">

2388 PostToolUseFailure2414 PostToolUseFailure

2389</h3>2415</h3>

2390 2416 

2391当已开始执行的工具失败时运行:工具抛出错误,或 MCP 工具返回错误结果。可用于记录失败、发送警报或向 Claude 提供纠正性反馈。2417当已开始执行的工具失败时运行:工具抛出了错误,或 MCP 工具返回了错误结果。可用于记录失败日志、发送警报或向 Claude 提供纠正性反馈。

2392 2418 

2393按工具名称匹配,取值与 PreToolUse 相同。2419按工具名称匹配,取值与 PreToolUse 相同。

2394 2420 

2395<Note>2421<Note>

2396 对于在执行前被拒绝的工具调用,此事件不会触发:未知的工具名称、未通过 schema 或工具特定验证的输入,或权限拒绝。验证拒绝会作为 `tool_use_error` 结果返回,且发生在 hook 运行之前,因此既不会触发 `PreToolUse`,也不会触发 `PostToolUseFailure`。权限拒绝会触发 `PreToolUse`,但不会触发此事件;请参阅 [PermissionDenied](#permissiondenied)。2422 对于在执行前被拒绝的工具调用,此事件不会触发:例如未知的工具名称、未通过 schema 或工具特定验证的输入,或权限拒绝。验证拒绝会以 `tool_use_error` 结果返回,且发生在 hook 运行之前,因此既不会触发 `PreToolUse`,也不会触发 `PostToolUseFailure`。权限拒绝会触发 `PreToolUse`,但不会触发此事件;请参阅 [PermissionDenied](#permissiondenied)。

2397</Note>2423</Note>

2398 2424 

2399<h4 id="posttoolusefailure-input">2425<h4 id="posttoolusefailure-input">

2400 PostToolUseFailure 输入2426 PostToolUseFailure 输入

2401</h4>2427</h4>

2402 2428 

2403PostToolUseFailure hook 接收与 PostToolUse 相同的 `tool_name` 和 `tool_input` 字段,以及作为顶层字段的错误信息。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。例如,一个失败的 `npm test` 命令可能会传递:2429PostToolUseFailure hook 接收与 PostToolUse 相同的 `tool_name` 和 `tool_input` 字段,以及作为顶层字段的错误信息。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。例如,一条失败的 `npm test` 命令可能会传递:

2404 2430 

2405```json theme={null}2431```json theme={null}

2406{2432{


2424| 字段 | 描述 |2450| 字段 | 描述 |

2425| :- | :- |2451| :- | :- |

2426| `error` | 描述出错原因的字符串。格式取决于失败的工具 |2452| `error` | 描述出错原因的字符串。格式取决于失败的工具 |

2427| `is_interrupt` | 可选布尔值。当失败是以中止形式而非工具报告的错误到达 Claude Code 时为 true。取消正在运行的工具不会触发此 hook;工具结果中会改为携带中断消息 |2453| `is_interrupt` | 可选布尔值。当失败以中止(而非工具报告的错误)的形式到达 Claude Code 时为 true。取消正在运行的工具不会触发此 hook;此时工具结果会携带中断消息 |

2428| `duration_ms` | 可选。工具执行时间(毫秒)。不包括在权限提示和 PreToolUse hook 中花费的时间 |2454| `duration_ms` | 可选。工具执行时间(毫秒)。不包括在权限提示和 PreToolUse hook 中花费的时间 |

2429 2455 

2430`error` 字符串通常与 Claude 作为失败工具结果收到的文本相同。其格式因工具和失败情况而异。请让您的 hook 依据 `tool_name`、`is_interrupt` 以及 `Exit code N` 首行进行判断;将字符串的其余部分视为显示文本,而非稳定格式。2456`error` 字符串通常与 Claude 收到的失败工具结果文本相同。其格式因工具和失败类型而异。请根据 `tool_name`、`is_interrupt` 以及首行 `Exit code N` 来编写 hook 逻辑;将字符串的其余部分视为显示文本,而不是稳定的格式。

2431 2457 

2432* 对于 Bash 和 PowerShell,已运行并退出的命令会产生首行 `Exit code N`,随后是命令产生的所有输出,stdout 和 stderr 交错合并为一个块2458* 对于 Bash 和 PowerShell,已运行并退出的命令会生成首行 `Exit code N`,随后是命令产生的所有输出,stdout 和 stderr 交错合并为一个块

2433* 当 Claude Code 无法启动 shell 进程本身时,数据中也可能只携带一条不含退出码行的失败消息2459* 当 Claude Code 无法启动 shell 进程本身时,负载也可能只携带一条不含退出码行的失败消息

2434* Claude Code 会在 `... [N characters truncated] ...` 标记周围对长字符串进行中间截断,并可能插入其自身的行,例如 `Command timed out after 2m 0s`2460* Claude Code 会在 `... [N characters truncated] ...` 标记处对长字符串进行中间截断,并且可能插入自己的行,例如 `Command timed out after 2m 0s`

2435 2461 

2436<h4 id="posttoolusefailure-decision-control">2462<h4 id="posttoolusefailure-decision-control">

2437 PostToolUseFailure 决策控制2463 PostToolUseFailure 决策控制

2438</h4>2464</h4>

2439 2465 

2440`PostToolUseFailure` hook 可以在工具失败后向 Claude 提供上下文。除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您的 hook 脚本还可以返回以下事件特定字段:2466`PostToolUseFailure` hook 可以在工具失败后向 Claude 提供上下文。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您的 hook 脚本还可以返回以下事件特定字段:

2441 2467 

2442| 字段 | 描述 |2468| 字段 | 描述 |

2443| :- | :- |2469| :- | :- |


2456 PostToolBatch2482 PostToolBatch

2457</h3>2483</h3>

2458 2484 

2459在一批工具调用全部完成后运行一次,时机在 Claude Code 向模型发送下一个请求之前。`PostToolUse` 对每个工具触发一次,这意味着当 Claude 进行并行工具调用时它会并发触发。`PostToolBatch` 针对整批调用恰好触发一次,因此适合注入依赖于所运行工具集合(而非任何单个工具)的上下文。此事件没有匹配器。2485在一批中的所有工具调用都已完成之后、Claude Code 向模型发送下一个请求之前运行一次。`PostToolUse` 对每个工具触发一次,这意味着当 Claude 进行并行工具调用时,它会并发触发。`PostToolBatch` 针对整批调用恰好触发一次,因此适合注入依赖于所运行工具集合(而非任何单个工具)的上下文。此事件没有匹配器。

2460 2486 

2461<h4 id="posttoolbatch-input">2487<h4 id="posttoolbatch-input">

2462 PostToolBatch 输入2488 PostToolBatch 输入

2463</h4>2489</h4>

2464 2490 

2465除了[通用输入字段](#common-input-fields)外,PostToolBatch hook 还会接收 `tool_calls`,这是一个描述该批次中每个工具调用的数组:2491除了[通用输入字段](#common-input-fields)之外,PostToolBatch hook 还会接收 `tool_calls`,这是一个描述批次中每个工具调用的数组:

2466 2492 

2467```json theme={null}2493```json theme={null}

2468{2494{


2488}2514}

2489```2515```

2490 2516 

2491`tool_response` 包含模型在对应 `tool_result` 块中收到的相同内容。该值是序列化字符串或内容块数组,与工具发出的完全一致。对于 `Read`,这意味着它是带行号前缀的文本,而不是原始文件内容。响应可能很大,因此只解析您需要的字段。2517`tool_response` 包含与模型在对应 `tool_result` 块中收到的相同内容。该值是序列化字符串或内容块数组,与工具发出时完全一致。对于 `Read`,这意味着是带行号前缀的文本,而不是原始文件内容。响应可能很大,因此只解析您需要的字段。

2492 2518 

2493<Note>2519<Note>

2494 `tool_response` 的结构与 `PostToolUse` 的不同。`PostToolUse` 传递的是工具的结构化 `Output` 对象,例如 `Write` 的 `{filePath: "...", type: "create"}`;`PostToolBatch` 传递的是模型看到的序列化 `tool_result` 内容。2520 `tool_response` 的结构与 `PostToolUse` 的不同。`PostToolUse` 传递的是工具的结构化 `Output` 对象,例如 `Write` 的 `{filePath: "...", type: "create"}`;`PostToolBatch` 传递的是模型看到的序列化 `tool_result` 内容。


2498 PostToolBatch 决策控制2524 PostToolBatch 决策控制

2499</h4>2525</h4>

2500 2526 

2501`PostToolBatch` hook 可以为 Claude 注入上下文。除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您的 hook 脚本还可以返回以下事件特定字段:2527`PostToolBatch` hook 可以为 Claude 注入上下文。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您的 hook 脚本还可以返回以下事件特定字段:

2502 2528 

2503| 字段 | 描述 |2529| 字段 | 描述 |

2504| :- | :- |2530| :- | :- |


2513}2539}

2514```2540```

2515 2541 

2516返回 `decision: "block"` 或 `continue: false` 会在下一次模型调用之前停止智能体循环。阻止消息来自 JSON 中的 `reason` 或 `stopReason`,或在退出码为 2 时来自 stderr。您会在会话记录中看到一条警告,并且它会保留在对话中,因此对话继续时 Claude 也能看到它。2542返回 `decision: "block"` 或 `continue: false` 会在下一次模型调用之前停止智能体循环。阻止消息来自 JSON 的 `reason` 或 `stopReason`,或者来自以退出码 2 退出时的 stderr。您会在会话记录中看到它显示为警告,并且它会保留在对话中,因此当对话继续时 Claude 也会看到它。

2517 2543 

2518<h3 id="permissiondenied">2544<h3 id="permissiondenied">

2519 PermissionDenied2545 PermissionDenied

2520</h3>2546</h3>

2521 2547 

2522当[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)拒绝工具调用时运行,包括在没有分类器裁定的情况下拒绝的情形,原因可能是[独立于自动模式的安全检查拒绝了分类器自身的请求](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action),或分类器的响应无法解析。此 hook 仅在自动模式下触发:当您手动拒绝权限对话框、`PreToolUse` hook 阻止调用或 `deny` 规则匹配时,它不会运行。可用于记录拒绝情况、调整配置,或告知模型可以重试该工具调用。2548当[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)拒绝工具调用时运行,包括在没有分类器判定的情况下拒绝的情形——原因是[独立于自动模式的安全检查拒绝了分类器自身的请求](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action),或分类器的响应无法解析。此 hook 仅在自动模式下触发:当您手动拒绝权限对话框、`PreToolUse` hook 阻止调用或 `deny` 规则匹配时,它不会运行。可用于记录拒绝日志、调整配置,或告知模型可以重试该工具调用。

2523 2549 

2524按工具名称匹配,取值与 PreToolUse 相同。2550按工具名称匹配,取值与 PreToolUse 相同。

2525 2551 


2527 PermissionDenied 输入2553 PermissionDenied 输入

2528</h4>2554</h4>

2529 2555 

2530除了[通用输入字段](#common-input-fields)外,PermissionDenied hook 还会接收 `tool_name`、`tool_input`、`tool_use_id` 和 `reason`。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。2556除了[通用输入字段](#common-input-fields)之外,PermissionDenied hook 还会接收 `tool_name`、`tool_input`、`tool_use_id` 和 `reason`。对于 MCP 工具,它们还会接收 [`mcp_server`](#pretooluse-input) 对象。

2531 2557 

2532```json theme={null}2558```json theme={null}

2533{2559{


2548 2574 

2549| 字段 | 描述 |2575| 字段 | 描述 |

2550| :- | :- |2576| :- | :- |

2551| `reason` | 拒绝原因。对于分类器裁定,在大多数会话中它会用方括号注明所匹配的规则,例如 `[Data Exfiltration]`;其他形式请参阅[审查拒绝](/docs/zh-CN/auto-mode-config#review-denials)。对于[无裁定拒绝](#permissiondenied-decision-control),它以 `Auto mode could not evaluate this action and is blocking it for safety` 开头。对于因分类器模型不可用而产生的拒绝,它是固定文本 `Classifier unavailable` |2577| `reason` | 拒绝原因。对于分类器判定,在大多数会话中,它会用方括号标明匹配的规则,例如 `[Data Exfiltration]`;其他形式请参阅[查看拒绝记录](/docs/zh-CN/auto-mode-config#review-denials)。对于[无判定拒绝](#permissiondenied-decision-control),它以 `Auto mode could not evaluate this action and is blocking it for safety` 开头。对于因分类器模型不可用而导致的拒绝,它是固定文本 `Classifier unavailable` |

2552 2578 

2553<h4 id="permissiondenied-decision-control">2579<h4 id="permissiondenied-decision-control">

2554 PermissionDenied 决策控制2580 PermissionDenied 决策控制

2555</h4>2581</h4>

2556 2582 

2557PermissionDenied hook 可以告知模型可以重试被拒绝的工具调用。返回一个将 `hookSpecificOutput.retry` 设为 `true` 的 JSON 对象:2583PermissionDenied hook 可以告知模型可以重试被拒绝的工具调用。返回一个将 `hookSpecificOutput.retry` 设置为 `true` 的 JSON 对象:

2558 2584 

2559```json theme={null}2585```json theme={null}

2560{2586{


2565}2591}

2566```2592```

2567 2593 

2568当 `retry` 为 `true` 时,Claude Code 会在对话中添加一条消息,告知模型可以重试该工具调用。Claude Code 本身不会撤销拒绝。如果您的 hook 不返回 JSON,或返回 `retry: false`,则拒绝保持有效,模型会收到原始的拒绝消息。2594当 `retry` 为 `true` 时,Claude Code 会在对话中添加一条消息,告知模型可以重试该工具调用。Claude Code 本身不会撤销该拒绝。如果您的 hook 不返回 JSON,或返回 `retry: false`,则拒绝维持不变,模型会收到原始的拒绝消息。

2569 2595 

2570当分类器[未对该操作作出裁定](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时(其响应无法解析,或独立于自动模式的安全检查拒绝了分类器自身的请求),Claude Code 会忽略 `retry: true`。对于这类拒绝,Claude Code 已在拒绝消息中告知模型是稍后重试还是继续其他工作。2596当分类器[未对该操作作出判定](/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action)时(其响应无法解析,或独立于自动模式的安全检查拒绝了分类器自身的请求),Claude Code 会忽略 `retry: true`。对于这些拒绝,Claude Code 已经在拒绝消息中告知模型是稍后重试还是继续其他工作。

2571 2597 

2572<h3 id="notification">2598<h3 id="notification">

2573 Notification2599 Notification

2574</h3>2600</h3>

2575 2601 

2576在 Claude Code 发送通知时运行。按通知类型匹配。省略匹配器即可为所有通知类型运行 hook。2602在 Claude Code 发送通知时运行。按通知类型匹配。省略匹配器可为所有通知类型运行 hook。

2577 2603 

2578即使关闭了桌面通知,您仍会收到这些 hook 事件:`preferredNotifChannel` 设置(包括 `notifications_disabled`)只会改变提醒您的方式,而不会影响您的 hook 是否运行。2604即使关闭了桌面通知,您也会收到这些 hook 事件:`preferredNotifChannel` 设置(包括 `notifications_disabled`)只改变您接收提醒的方式,而不影响您的 hook 是否运行。

2579 2605 

2580| 匹配器 | 触发时机 |2606| 匹配器 | 触发时机 |

2581| :- | :- |2607| :- | :- |

2582| `permission_prompt` | Claude 需要您批准某次工具使用或某个沙箱命令的[网络请求](/docs/zh-CN/sandboxing#network-isolation),且该提示已等待约六秒 |2608| `permission_prompt` | Claude 需要您批准工具使用或沙箱中命令的[网络请求](/docs/zh-CN/sandboxing#network-isolation),且该提示已等待约六秒 |

2583| `idle_prompt` | Claude 在约 60 秒前完成回复,且此后您没有输入 |2609| `idle_prompt` | Claude 大约 60 秒前完成回复,且此后您未进行输入 |

2584| `auth_success` | 身份验证完成 |2610| `auth_success` | 身份验证完成 |

2585| `elicitation_dialog` | MCP 服务器打开了一个信息征询表单,且您约六秒没有输入 |2611| `elicitation_dialog` | MCP 服务器打开 elicitation 表单,且您约六秒未进行输入 |

2586| `elicitation_url_dialog` | MCP 服务器请求您打开一个浏览器 URL,且您约六秒没有输入 |2612| `elicitation_url_dialog` | MCP 服务器要求您打开浏览器 URL,且您约六秒未进行输入 |

2587| `elicitation_complete` | MCP 服务器报告某个 [URL 模式信息征询](#elicitation-input)已完成 |2613| `elicitation_complete` | MCP 服务器报告 [URL 模式 elicitation](#elicitation-input) 已完成 |

2588| `elicitation_response` | MCP 信息征询响应被发送回服务器 |2614| `elicitation_response` | MCP elicitation 响应被发回服务器 |

2589| `agent_needs_input` | 在终端中打开 [Agent 视图](/docs/zh-CN/agent-view)期间,某个后台会话开始等待您的输入。当终端会话向您显示 [agent team 队友的终端设置问题](/docs/zh-CN/agent-teams#choose-a-display-mode)或自动模式关于[分类器请求费用](/docs/zh-CN/auto-mode-classifier-billing)的通知,且您约六秒没有输入时,也会触发 |2615| `agent_needs_input` | 在终端中打开 [Agent 视图](/docs/zh-CN/agent-view)时,某个后台会话开始等待您的输入。当终端会话向您显示 [agent team 队友的终端设置问题](/docs/zh-CN/agent-teams#choose-a-display-mode)或自动模式关于[分类器请求费用](/docs/zh-CN/auto-mode-classifier-billing)的通知,且您约六秒未进行输入时,也会触发 |

2590| `agent_completed` | 某个后台会话完成或失败。仅在终端中打开 [Agent 视图](/docs/zh-CN/agent-view)时触发 |2616| `agent_completed` | 后台会话完成或失败。仅在终端中打开 [Agent 视图](/docs/zh-CN/agent-view)时触发 |

2591| `quota_auto_resume_fired` | 在 claude.ai 用量限制暂停您的任务后,Claude Code 继续执行该任务:在重置时,或者当您在等待期间在 Claude Code 中执行的某些操作(例如添加使用额度、升级套餐或切换模型)使用量再次可用时提前继续,[模型设置例外](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset)除外 |2617| `quota_auto_resume_fired` | 在 claude.ai 用量限制暂停您的任务后,Claude Code 继续执行该任务:在限制重置时,或在等待期间您在 Claude Code 中的某些操作(例如添加使用额度、升级套餐或切换模型)使用量重新可用时提前继续,但存在[模型设置例外](/docs/zh-CN/interactive-mode#wait-for-a-usage-limit-to-reset) |

2592| `quota_auto_resume_stale` | 在您的计算机休眠超过约 30 分钟期间,claude.ai 用量限制已重置。Claude Code 会等待您按 `Enter`,而不是继续执行。休眠时间较短时,它会继续执行并改为触发 `quota_auto_resume_fired` |2618| `quota_auto_resume_stale` | claude.ai 用量限制在您的计算机休眠超过约 30 分钟期间重置。Claude Code 会等待您按下 `Enter`,而不是继续执行。如果休眠时间较短,它会继续执行并改为触发 `quota_auto_resume_fired` |

2593| `quota_auto_resume_disabled` | Claude Code 结束对 claude.ai 用量限制的等待而未继续您的任务:在 Claude Code 自行发起的等待期间,[`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit) 被关闭或重置时间推迟到 24 小时以后;继续执行的任务不断触及限制;或继续执行在到达模型之前被阻止。当您按 `Esc` 或 `Ctrl+C`,或选择 **Don't continue automatically** 时不会触发 |2619| `quota_auto_resume_disabled` | Claude Code 结束对 claude.ai 用量限制的等待,但未继续您的任务:在 Claude Code 自行开始的等待期间,[`autoContinueAtUsageLimit`](/docs/zh-CN/settings-reference#autocontinueatusagelimit) 被关闭或重置时间推迟到 24 小时以后;继续执行的任务不断触及限制;或继续执行在到达模型之前被阻止。当您按下 `Esc` 或 `Ctrl+C`,或选择 **Don't continue automatically** 时不会触发 |

2594 2620 

2595`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 类型需要 Claude Code v2.1.234 或更高版本。2621`quota_auto_resume_fired`、`quota_auto_resume_stale` 和 `quota_auto_resume_disabled` 类型需要 Claude Code v2.1.234 或更高版本。

2596 2622 

2597在终端会话中,针对沙箱命令网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。2623在终端会话中,针对沙箱中命令网络请求的 `permission_prompt` 需要 Claude Code v2.1.246 或更高版本。

2598 2624 

2599针对队友终端设置问题的 `agent_needs_input` 需要 Claude Code v2.1.248 或更高版本。2625针对队友终端设置问题的 `agent_needs_input` 需要 Claude Code v2.1.248 或更高版本。

2600 2626 

2601<Note>2627<Note>

2602 `permission_prompt`、`idle_prompt`、`elicitation_dialog` 和 `elicitation_url_dialog` 类型与桌面通知共享计时方式,因此在终端会话中,只有当您看起来已离开终端时才会看到它们:2628 `permission_prompt`、`idle_prompt`、`elicitation_dialog` 和 `elicitation_url_dialog` 类型与桌面通知共享计时方式,因此在终端会话中,只有当您看起来已离开终端时才会看到它们:

2603 2629 

2604 * 在您约六秒没有输入后,预计会触发 `permission_prompt`。计时器在权限提示出现时开始,每次按键都会推迟它。要在 Claude 请求使用工具的权限时立即运行 hook,请改用 [PermissionRequest](#permissionrequest)。2630 * `permission_prompt` 会在您约六秒未进行输入后出现。计时器在权限提示出现时开始,每次按键都会推迟它。要在 Claude 请求使用工具的权限时立即运行 hook,请改用 [PermissionRequest](#permissionrequest)。

2605 * 在 Claude 完成回复约 60 秒后,预计会触发 `idle_prompt`,前提是此后您没有输入,且没有后台 Agent(例如后台[子代理](/docs/zh-CN/sub-agents))仍在运行。Claude Code 在等待 claude.ai 用量限制重置期间不会发送 `idle_prompt`。当等待自行结束时,会改为触发某个 `quota_auto_resume_*` 类型。2631 * `idle_prompt` 会在 Claude 完成回复约 60 秒后出现,且仅当此后您未进行输入,并且没有后台 Agent(例如后台[子代理](/docs/zh-CN/sub-agents))仍在运行时。Claude Code 在等待 claude.ai 用量限制重置期间不会发送 `idle_prompt`。当等待自行结束时,会改为触发某个 `quota_auto_resume_*` 类型。

2606 * 对于信息征询表单,预计会触发 `elicitation_dialog`;对于浏览器 URL 请求,预计会触发 `elicitation_url_dialog`,二者都在您约六秒没有输入后触发。两者与 `permission_prompt` 共享相同的六秒门槛:计时器在对话框出现时开始,每次按键都会推迟它。2632 * 对于 elicitation 表单会出现 `elicitation_dialog`,对于浏览器 URL 请求会出现 `elicitation_url_dialog`,两者均在您约六秒未进行输入后出现。两者与 `permission_prompt` 共享相同的六秒门槛:计时器在对话框出现时开始,每次按键都会推迟它。

2607 2633 

2608 在另一个对话框显示期间到达的权限请求或信息征询,仍适用相同的六秒门槛,从请求到达时开始计时。即使该请求仍在已打开的对话框后面等待,它的通知也可能已经送达您。2634 如果权限请求或 elicitation 在另一个对话框显示于屏幕上时到达,同样适用六秒门槛,从请求到达时开始计时。其通知可能在该请求仍排在已打开对话框之后等待时就送达您。

2609</Note>2635</Note>

2610 2636 

2611在 Claude Code 将权限请求发送到 Agent SDK 的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input)的会话中(Claude Desktop 和 VS Code 扩展就是以这种方式托管 Claude Code 的),Claude Code 对 `permission_prompt` 的计时方式不同:2637在 Claude Code 将权限请求发送到 Agent SDK 的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input)的会话中(Claude Desktop 和 VS Code 扩展就是以这种方式托管 Claude Code 的),Claude Code 对 `permission_prompt` 的计时有所不同:

2612 2638 

2613* 预计在 Claude 请求权限约六秒后触发 `permission_prompt`。Claude Code 不会因您输入而推迟它。2639* `permission_prompt` 会在 Claude 请求权限约六秒后出现。您输入时 Claude Code 不会推迟它。

2614* 如果您或 [PermissionRequest](#permissionrequest) hook 更早作出回应,Claude Code 不会运行 `permission_prompt`。2640* 如果您或 [PermissionRequest](#permissionrequest) hook 更早作出回应,Claude Code 不会运行 `permission_prompt`。

2615* 将 [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/zh-CN/env-vars) 设为 `1`,即可在这些会话中关闭 `permission_prompt`。2641* 将 [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/zh-CN/env-vars) 设置为 `1` 可在这些会话中关闭 `permission_prompt`。

2616 2642 

2617在 v2.1.233 之前,`permission_prompt` 在这些会话中不会触发。2643在 v2.1.233 之前,`permission_prompt` 不会在这些会话中触发。

2618 2644 

2619使用不同的匹配器,可根据通知类型运行不同的处理程序。以下配置在 Claude 需要权限批准时触发一个专用于权限的提醒脚本,在 Claude 空闲时触发另一个通知:2645使用单独的匹配器,可根据通知类型运行不同的处理程序。以下配置会在 Claude 需要权限批准时触发特定于权限的警报脚本,并在 Claude 处于空闲状态时触发另一种通知:

2620 2646 

2621```json theme={null}2647```json theme={null}

2622{2648{


2649 Notification 输入2675 Notification 输入

2650</h4>2676</h4>

2651 2677 

2652除了[通用输入字段](#common-input-fields)外,Notification hook 还会接收包含通知文本的 `message`、可选的 `title`,以及指示触发类型的 `notification_type`。2678除了[通用输入字段](#common-input-fields)之外,Notification hook 还会接收包含通知文本的 `message`、可选的 `title`,以及指示触发类型的 `notification_type`。

2653 2679 

2654```json theme={null}2680```json theme={null}

2655{2681{


2663}2689}

2664```2690```

2665 2691 

2666Notification hook 无法阻止或修改通知。Claude Code 会丢弃它们的 `systemMessage` 和 `continue` 字段,但仍会发出 [`terminalSequence`](#emit-terminal-notifications),桌面通知示例正是依赖于此。Notification hook 适用于产生副作用,例如将通知转发到外部服务。2692Notification hook 无法阻止或修改通知。Claude Code 会丢弃它们的 `systemMessage` 和 `continue` 字段,但仍会发出 [`terminalSequence`](#emit-terminal-notifications),桌面通知示例正依赖于此。Notification hook 旨在用于副作用,例如将通知转发到外部服务。

2667 2693 

2668<h3 id="subagentstart">2694<h3 id="subagentstart">

2669 SubagentStart2695 SubagentStart

2670</h3>2696</h3>

2671 2697 

2672当 Claude 使用 Agent 工具生成子代理、当 Claude [恢复子代理](/docs/zh-CN/sub-agents#resume-subagents),以及每次进程内 [agent team](/docs/zh-CN/agent-teams) 队友处理新消息时运行。支持使用匹配器按 Agent 类型名称过滤。对于内置 Agent,这是诸如 `general-purpose`、`Explore` 或 `Plan` 之类的 Agent 名称。对于[自定义子代理](/docs/zh-CN/sub-agents),这是 Agent frontmatter 中的 `name` 字段,而非文件名。2698在 Claude 使用 Agent 工具生成子代理时、在 Claude [恢复子代理](/docs/zh-CN/sub-agents#resume-subagents)时,以及每次进程内 [agent team](/docs/zh-CN/agent-teams) 队友处理新消息时运行。支持使用匹配器按 Agent 类型名称进行过滤。对于内置 Agent,这是 Agent 名称,例如 `general-purpose`、`Explore` 或 `Plan`。对于[自定义子代理](/docs/zh-CN/sub-agents),这是 Agent frontmatter 中的 `name` 字段,而不是文件名。

2673 2699 

2674对于由[插件](/docs/zh-CN/plugins/overview)提供的子代理,Agent 类型是插件作用域的标识符,例如 `my-plugin:reviewer`,而不是单纯的 frontmatter 名称。冒号会使插件作用域的名称走正则表达式路径,因此请用 `^` 和 `$` 锚定匹配器以实现精确匹配:`^my-plugin:reviewer$`。2700对于由[插件](/docs/zh-CN/plugins/overview)提供的子代理,Agent 类型是插件作用域的标识符,例如 `my-plugin:reviewer`,而不是单纯的 frontmatter 名称。冒号会使插件作用域名称走正则表达式匹配路径,因此请用 `^` 和 `$` 锚定匹配器以实现精确匹配:`^my-plugin:reviewer$`。

2675 2701 

2676<h4 id="subagentstart-input">2702<h4 id="subagentstart-input">

2677 SubagentStart 输入2703 SubagentStart 输入

2678</h4>2704</h4>

2679 2705 

2680除了[通用输入字段](#common-input-fields)外,SubagentStart hook 还会接收包含子代理唯一标识符的 `agent_id`,以及包含匹配器所过滤的 Agent 名称的 `agent_type`。2706除了[通用输入字段](#common-input-fields)之外,SubagentStart hook 还会接收包含子代理唯一标识符的 `agent_id`,以及包含匹配器所过滤 Agent 名称的 `agent_type`。

2681 2707 

2682```json theme={null}2708```json theme={null}

2683{2709{


2690}2716}

2691```2717```

2692 2718 

2693SubagentStart hook 无法阻止子代理的创建,但可以向子代理注入上下文。除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您还可以返回:2719SubagentStart hook 无法阻止子代理的创建,但可以向子代理注入上下文。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您还可以返回:

2694 2720 

2695| 字段 | 描述 |2721| 字段 | 描述 |

2696| :- | :- |2722| :- | :- |

2697| `additionalContext` | 在子代理对话开始时、其第一个提示词之前添加到子代理上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |2723| `additionalContext` | 在子代理对话开始时、第一个提示词之前添加到其上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

2698 2724 

2699```json theme={null}2725```json theme={null}

2700{2726{


2705}2731}

2706```2732```

2707 2733 

2708当 hook 针对同一子代理再次运行时,仅当子代理的上下文中尚未包含先前运行注入的副本时,Claude Code 才会注入返回的上下文。启动时注入的副本会保留在原位,从而保持子代理的[提示缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)不变。在[自动压缩](/docs/zh-CN/sub-agents#auto-compaction)丢弃该副本后,Claude Code 会再次注入下一次运行的上下文。2734当 hook 针对同一子代理再次运行时,只有当子代理的上下文中尚未包含之前运行的副本时,Claude Code 才会注入返回的上下文。启动时注入的副本会保留在原处,从而保持子代理的[提示缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)不变。在[自动压缩](/docs/zh-CN/sub-agents#auto-compaction)丢弃该副本之后,Claude Code 会再次注入下一次运行的上下文。

2709 2735 

2710<h3 id="subagentstop">2736<h3 id="subagentstop">

2711 SubagentStop2737 SubagentStop


2717 SubagentStop 输入2743 SubagentStop 输入

2718</h4>2744</h4>

2719 2745 

2720除了[通用输入字段](#common-input-fields)外,SubagentStop hook 还会接收 `stop_hook_active`、`agent_id`、`agent_type`、`agent_transcript_path` 和 `last_assistant_message`。`agent_type` 字段是用于匹配器过滤的值。`transcript_path` 是主会话的会话记录,而 `agent_transcript_path` 是子代理自身的会话记录,存储在嵌套的 `subagents/` 文件夹中。`last_assistant_message` 字段包含子代理最终回复的文本内容,因此 hook 无需解析会话记录文件即可访问它。2746除了[通用输入字段](#common-input-fields)之外,SubagentStop hook 还会接收 `stop_hook_active`、`agent_id`、`agent_type`、`agent_transcript_path` 和 `last_assistant_message`。`agent_type` 字段是用于匹配器过滤的值。`transcript_path` 是主会话的会话记录,而 `agent_transcript_path` 是子代理自己的会话记录,存储在嵌套的 `subagents/` 文件夹中。`last_assistant_message` 字段包含子代理最终回复的文本内容,因此 hook 无需解析会话记录文件即可访问它。

2721 2747 

2722并非每个 SubagentStop 事件都来自 Claude 生成的子代理。Claude Code 还会为其自身的某些功能运行内部 Agent,例如[提示词建议](/docs/zh-CN/interactive-mode#prompt-suggestions)和 [`/btw` 附带问题](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw),这些内部 Agent 完成时也会触发 SubagentStop。对于这些事件,`agent_type` 是会话本身运行所用的 Agent 名称,例如通过 [`--agent`](/docs/zh-CN/cli-reference#cli-flags) 或 [`agent` 设置](/docs/zh-CN/settings-reference#agent)设定的名称;当会话未使用 Agent 运行时,它为空字符串。2748并非每个 SubagentStop 事件都来自 Claude 生成的子代理。Claude Code 还会为其自身的一些功能运行内部 Agent,例如[提示词建议](/docs/zh-CN/interactive-mode#prompt-suggestions)和 [`/btw` 旁支问题](/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw),当这些 Agent 完成时也会触发 SubagentStop。对于这些事件,`agent_type` 是会话本身所运行的 Agent 名称,例如通过 [`--agent`](/docs/zh-CN/cli-reference#cli-flags) 或 [`agent` 设置](/docs/zh-CN/settings-reference#agent)设定的名称;当会话未使用 Agent 运行时,则为空字符串。

2723 2749 

2724指定了 Agent 类型的 `matcher` 不会匹配空的 `agent_type`。匹配器被省略、为 `""` 或 `"*"`,或者是能匹配空字符串的正则表达式的 hook,也会针对 `agent_type` 为空的事件运行。2750指定了 Agent 类型的 `matcher` 不会匹配空的 `agent_type`。匹配器被省略、为 `""` 或 `"*"`,或为可匹配空字符串的正则表达式的 hook,也会针对 `agent_type` 为空的事件运行。

2725 2751 

2726在 Claude Code v2.1.271 或更高版本中,使用 [`SubagentHandback`](/docs/zh-CN/tools-reference) 工具运行的子代理会在停止前通过该工具传递其报告。此时 `last_assistant_message` 字段保存的是子代理的结束文本(如有),而不是所传递的报告。报告是该调用的 `message` 输入,匹配 `SubagentHandback` 的 `PreToolUse` 或 `PostToolUse` hook 会以 `tool_input.message` 的形式接收它。2752在 Claude Code v2.1.271 或更高版本中,使用 [`SubagentHandback`](/docs/zh-CN/tools-reference) 工具运行的子代理会在停止之前通过该工具交付其报告。此时 `last_assistant_message` 字段包含子代理的结束文本(如果有),而不是已交付的报告。报告是该调用的 `message` 输入,匹配 `SubagentHandback` 的 `PreToolUse` 或 `PostToolUse` hook 会以 `tool_input.message` 的形式接收它。

2727 2753 

2728SubagentStop hook 还会接收 [Stop 输入](#stop-input)中所述的 `background_tasks` 和 `session_crons` 数组。这两个数组的作用域都是父会话,而不是子代理。2754SubagentStop hook 还会接收 [Stop 输入](#stop-input)中所述的 `background_tasks` 和 `session_crons` 数组。这两个数组的作用域都是父会话,而不是子代理。

2729 2755 


2744}2770}

2745```2771```

2746 2772 

2747SubagentStop hook 使用与 [Stop hook](#stop-decision-control) 相同的决策控制格式,包括将 `hookEventName` 设为 `"SubagentStop"` 的 `hookSpecificOutput.additionalContext`,用于提供让子代理继续运行的非错误反馈。返回带有 `reason` 的 `decision: "block"` 会让子代理继续运行,并将 `reason` 作为下一条指令传递给子代理。通过以退出码 2 退出来阻止的 hook 会以相同方式传递其 stderr 消息。要在子代理返回后向父会话注入上下文,请改为在 `Agent` 工具上使用 [`PostToolUse`](#posttooluse) hook。2773SubagentStop hook 使用与 [Stop hook](#stop-decision-control) 相同的决策控制格式,包括将 `hookEventName` 设置为 `"SubagentStop"` 的 `hookSpecificOutput.additionalContext`,用于提供让子代理继续运行的非错误反馈。返回带有 `reason` 的 `decision: "block"` 会让子代理继续运行,并将 `reason` 作为其下一条指令传递给子代理。通过以退出码 2 退出来进行阻止的 hook 会以相同方式传递其 stderr 消息。要在子代理返回后向父会话注入上下文,请改为在 `Agent` 工具上使用 [`PostToolUse`](#posttooluse) hook。

2748 2774 

2749<h3 id="taskcreated">2775<h3 id="taskcreated">

2750 TaskCreated2776 TaskCreated

2751</h3>2777</h3>

2752 2778 

2753在通过 `TaskCreate` 工具创建任务时运行。可用于强制执行命名约定、要求提供任务描述,或阻止创建某些任务。在[不含 Task 工具的会话](/docs/zh-CN/tools-reference#task-tool-availability)中,此事件不会触发。2779在通过 `TaskCreate` 工具创建任务时运行。可用于强制执行命名约定、要求提供任务描述,或阻止创建某些任务。在[没有 Task 工具的会话](/docs/zh-CN/tools-reference#task-tool-availability)中,此事件不会触发。

2754 2780 

2755TaskCreated hook 不支持匹配器,每次发生时都会触发。2781TaskCreated hook 不支持匹配器,每次发生时都会触发。

2756 2782 


2758 TaskCreated 输入2784 TaskCreated 输入

2759</h4>2785</h4>

2760 2786 

2761除了[通用输入字段](#common-input-fields)外,TaskCreated hook 还会接收 `task_id`、`task_subject`,以及可选的 `task_description`、`teammate_name` 和 `team_name`。2787除了[通用输入字段](#common-input-fields)之外,TaskCreated hook 还会接收 `task_id`、`task_subject`,以及可选的 `task_description`、`teammate_name` 和 `team_name`。

2762 2788 

2763```json theme={null}2789```json theme={null}

2764{2790{


2779| `task_id` | 正在创建的任务的标识符 |2805| `task_id` | 正在创建的任务的标识符 |

2780| `task_subject` | 任务标题 |2806| `task_subject` | 任务标题 |

2781| `task_description` | 任务的详细描述。可能不存在 |2807| `task_description` | 任务的详细描述。可能不存在 |

2782| `teammate_name` | 创建该任务的队友名称。可能不存在 |2808| `teammate_name` | 创建任务的队友名称。可能不存在 |

2783| `team_name` | 已弃用。从会话派生的团队名称;将在未来版本中移除 |2809| `team_name` | 已弃用。从会话派生的团队名称;将在未来版本中移除 |

2784| `agent_id` | 在此事件中,该[通用输入字段](#common-input-fields)标识正在创建任务的子代理或[进程内队友](/docs/zh-CN/agent-teams#choose-a-display-mode)。可能不存在。需要 Claude Code v2.1.290 或更高版本 |2810| `agent_id` | 在此事件中,该[通用输入字段](#common-input-fields)标识创建任务的子代理或[进程内队友](/docs/zh-CN/agent-teams#choose-a-display-mode)。可能不存在。需要 Claude Code v2.1.290 或更高版本 |

2785 2811 

2786<h4 id="taskcreated-decision-control">2812<h4 id="taskcreated-decision-control">

2787 TaskCreated 决策控制2813 TaskCreated 决策控制

2788</h4>2814</h4>

2789 2815 

2790TaskCreated hook 可以通过退出码 2 或 JSON 决策来阻止创建。无论哪种方式,Claude Code 都会删除该任务,并将您的消息作为工具的错误返回给 Claude。Claude Code 会忽略来自此事件的 `continue: false`,Claude 会继续工作。2816TaskCreated hook 可以通过退出码 2 或 JSON 决策来阻止创建。无论哪种方式,Claude Code 都会删除该任务,并将您的消息作为工具错误返回给 Claude。Claude Code 会忽略此事件中的 `continue: false`,Claude 会继续工作。

2791 2817 

2792* **退出码 2**:Claude Code 将 stderr 文本作为消息返回。2818* **退出码 2**:Claude Code 将 stderr 文本作为消息返回。

2793* **JSON `{"decision": "block", "reason": "..."}`**:Claude Code 将 `reason` 作为消息返回。2819* **JSON `{"decision": "block", "reason": "..."}`**:Claude Code 将 `reason` 作为消息返回。

2794 2820 

2795以下示例会阻止主题不符合所需格式的任务:2821此示例会阻止主题不符合所需格式的任务:

2796 2822 

2797```bash theme={null}2823```bash theme={null}

2798#!/bin/bash2824#!/bin/bash


2811 TaskCompleted2837 TaskCompleted

2812</h3>2838</h3>

2813 2839 

2814在任务被标记为已完成时运行。它在两种情况下触发:任何 Agent 通过 TaskUpdate 工具显式将任务标记为已完成时,或 [agent team](/docs/zh-CN/agent-teams) 队友在仍有进行中任务的情况下结束其轮次时。可用于在任务关闭前强制执行完成标准,例如测试通过或 lint 检查通过。2840在任务被标记为已完成时运行。它在两种情况下触发:任何 Agent 通过 TaskUpdate 工具显式将任务标记为已完成时,或者 [agent team](/docs/zh-CN/agent-teams) 队友在仍有进行中任务的情况下结束其轮次时。可用于在任务关闭之前强制执行完成标准,例如通过测试或 lint 检查。

2815 2841 

2816TaskCompleted hook 不支持匹配器,每次发生时都会触发。2842TaskCompleted hook 不支持匹配器,每次发生时都会触发。

2817 2843 


2819 TaskCompleted 输入2845 TaskCompleted 输入

2820</h4>2846</h4>

2821 2847 

2822除了[通用输入字段](#common-input-fields)外,TaskCompleted hook 还会接收 `task_id`、`task_subject`,以及可选的 `task_description`、`teammate_name` 和 `team_name`。2848除了[通用输入字段](#common-input-fields)之外,TaskCompleted hook 还会接收 `task_id`、`task_subject`,以及可选的 `task_description`、`teammate_name` 和 `team_name`。

2823 2849 

2824```json theme={null}2850```json theme={null}

2825{2851{


2841| `task_id` | 正在完成的任务的标识符 |2867| `task_id` | 正在完成的任务的标识符 |

2842| `task_subject` | 任务标题 |2868| `task_subject` | 任务标题 |

2843| `task_description` | 任务的详细描述。可能不存在 |2869| `task_description` | 任务的详细描述。可能不存在 |

2844| `teammate_name` | 完成该任务的队友名称。可能不存在 |2870| `teammate_name` | 完成任务的队友名称。可能不存在 |

2845| `team_name` | 已弃用。从会话派生的团队名称;将在未来版本中移除 |2871| `team_name` | 已弃用。从会话派生的团队名称;将在未来版本中移除 |

2846| `agent_id` | 在此事件中,该[通用输入字段](#common-input-fields)标识正在完成任务的子代理或[进程内队友](/docs/zh-CN/agent-teams#choose-a-display-mode)。可能不存在。需要 Claude Code v2.1.290 或更高版本 |2872| `agent_id` | 在此事件中,该[通用输入字段](#common-input-fields)标识完成任务的子代理或[进程内队友](/docs/zh-CN/agent-teams#choose-a-display-mode)。可能不存在。需要 Claude Code v2.1.290 或更高版本 |

2847 2873 

2848<h4 id="taskcompleted-decision-control">2874<h4 id="taskcompleted-decision-control">

2849 TaskCompleted 决策控制2875 TaskCompleted 决策控制


2851 2877 

2852TaskCompleted hook 支持两种控制任务完成的方式:2878TaskCompleted hook 支持两种控制任务完成的方式:

2853 2879 

2854* **退出码 2**:任务不会被标记为已完成,stderr 消息会作为反馈回传给模型。2880* **退出码 2**:任务不会被标记为已完成,stderr 消息会作为反馈传回模型。

2855* **JSON `{"continue": false, "stopReason": "..."}`**:当事件由队友结束其轮次触发时,完全停止该队友,与 `Stop` hook 的行为一致。`stopReason` 会显示给用户。当事件由 `TaskUpdate` 工具触发时,Claude Code 会忽略 `continue: false`;退出码 2 仍会阻止完成。2881* **JSON `{"continue": false, "stopReason": "..."}`**:当事件由队友结束其轮次触发时,完全停止该队友,与 `Stop` hook 的行为一致。`stopReason` 会显示给用户。当事件由 `TaskUpdate` 工具触发时,Claude Code 会忽略 `continue: false`;退出码 2 仍会阻止完成。

2856 2882 

2857以下示例运行测试,并在测试失败时阻止任务完成:2883此示例运行测试,如果测试失败则阻止任务完成:

2858 2884 

2859```bash theme={null}2885```bash theme={null}

2860#!/bin/bash2886#!/bin/bash


2874 Stop2900 Stop

2875</h3>2901</h3>

2876 2902 

2877在主 Claude Code Agent 完成回复时运行。如果停止是由用户中断引起的,则不会运行。API 错误会改为触发2903在 Claude Code 主 Agent 完成回复时运行。如果停止是由用户中断引起的,则不会运行。API 错误会改为触发

2878[StopFailure](#stopfailure)。2904[StopFailure](#stopfailure)。

2879 2905 

2880<Tip>2906<Tip>

2881 [`/goal`](/docs/zh-CN/goal) 命令是会话作用域的、基于提示词的 Stop hook 的内置快捷方式。当您希望 Claude 持续朝某个条件努力而无需编写 hook 配置时,可以使用它。2907 [`/goal`](/docs/zh-CN/goal) 命令是会话作用域、基于提示词的 Stop hook 的内置快捷方式。当您希望 Claude 持续朝某个条件工作而无需编写 hook 配置时,可以使用它。

2882</Tip>2908</Tip>

2883 2909 

2884<h4 id="stop-input">2910<h4 id="stop-input">

2885 Stop 输入2911 Stop 输入

2886</h4>2912</h4>

2887 2913 

2888除了[通用输入字段](#common-input-fields)外,Stop hook 还会接收 `stop_hook_active`、`last_assistant_message`、`background_tasks` 和 `session_crons`。当 Claude Code 已经因 stop hook 而继续运行时,`stop_hook_active` 字段为 `true`。请检查此值或处理会话记录,以避免因一个永远无法满足的条件而持续阻止。2914除了[通用输入字段](#common-input-fields)之外,Stop hook 还会接收 `stop_hook_active`、`last_assistant_message`、`background_tasks` 和 `session_crons`。当 Claude Code 已经因 stop hook 而继续执行时,`stop_hook_active` 字段为 `true`。请检查此值或处理会话记录,以避免因一个永远不会满足的条件而持续阻止。

2889 2915 

2890Claude Code 设有连续 8 次继续的上限:在 stop hook 连续八次让轮次继续后,Claude Code 会覆盖下一次阻止并结束该轮次。每次 Claude 调用工具时,连续继续的计数都会重置。要提高该上限,请设置 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/zh-CN/env-vars)。2916Claude Code 设有连续 8 次继续的上限:在 stop hook 连续八次让轮次继续之后,Claude Code 会覆盖下一次阻止并结束该轮次。每次 Claude 调用工具时,连续继续的计数都会重置。要提高该上限,请设置 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/zh-CN/env-vars)。

2891 2917 

2892`last_assistant_message` 字段包含 Claude 最终回复的文本内容,因此 hook 无需解析会话记录文件即可访问它。对于作用于刚刚完成的轮次的 hook(例如朗读或通知 hook),请使用此字段而不是读取 `transcript_path`:并非所有版本都能保证在 Stop 时会话记录文件中已包含最终消息。2918`last_assistant_message` 字段包含 Claude 最终回复的文本内容,因此 hook 无需解析会话记录文件即可访问它。对于作用于刚完成轮次的 hook(例如朗读或通知 hook),请使用此字段,而不是读取 `transcript_path`:并非所有版本都能保证在 Stop 时会话记录文件中已包含最终消息。

2893 2919 

2894`background_tasks` 和 `session_crons` 数组使 hook 能够区分"会话已完成"和"会话已暂停,正在等待后台工作将其唤醒"。当任务注册表可访问时,这两个数组都会存在;当没有正在进行或已计划的内容时,它们为空。2920`background_tasks` 和 `session_crons` 数组让 hook 能够区分“会话已完成”与“会话已暂停,等待后台工作将其重新唤醒”。当任务注册表可访问时,两个数组都会存在;当没有进行中或已计划的内容时,它们为空。

2895 2921 

2896`background_tasks` 中的每个条目描述一个正在进行的任务,并使用以下字段:2922`background_tasks` 中的每个条目描述一个进行中的任务,并使用以下字段:

2897 2923 

2898| 字段 | 描述 |2924| 字段 | 描述 |

2899| :- | :- |2925| :- | :- |

2900| `id` | 任务标识符 |2926| `id` | 任务标识符 |

2901| `type` | 友好的任务类型标签,例如 `shell`、`subagent`、`monitor`、`workflow`、`teammate`、`cloud session` 或 `MCP task`。每个标签标识创建该任务的 Claude Code 功能。对于无法识别的类型,回退为原始判别值 |2927| `type` | 友好的任务类型标签,例如 `shell`、`subagent`、`monitor`、`workflow`、`teammate`、`cloud session` 或 `MCP task`。每个标签标识创建该任务的 Claude Code 功能。对于无法识别的类型,回退为原始判别值 |

2902| `status` | 当前任务状态 |2928| `status` | 当前任务状态 |

2903| `description` | 自由文本描述,上限为 1000 个字符,截断时会在字符串内带有 `… [+N chars]` 标记 |2929| `description` | 自由文本描述,上限为 1000 个字符,被截断时字符串中带有 `… [+N chars]` 标记 |

2904| `command` | Shell 命令行,上限为 1000 个字符。仅对 `shell` 任务存在 |2930| `command` | shell 命令行,上限为 1000 个字符。仅存在于 `shell` 任务中 |

2905| `agent_type` | 子代理类型名称。仅对 `subagent` 任务存在 |2931| `agent_type` | 子代理类型名称。仅存在于 `subagent` 任务中 |

2906| `server` | MCP 服务器名称。仅对 `monitor` 和 `MCP task` 任务存在 |2932| `server` | MCP 服务器名称。仅存在于 `monitor` 和 `MCP task` 任务中 |

2907| `tool` | MCP 工具名称。仅对 `monitor` 和 `MCP task` 任务存在 |2933| `tool` | MCP 工具名称。仅存在于 `monitor` 和 `MCP task` 任务中 |

2908| `name` | 工作流名称。仅对 `workflow` 任务存在 |2934| `name` | 工作流名称。仅存在于 `workflow` 任务中 |

2909 2935 

2910`session_crons` 中的每个条目描述一个会话作用域的计划唤醒,来源为 `CronCreate`、`ScheduleWakeup` 和 `/loop`:2936`session_crons` 中的每个条目描述一个会话作用域的计划唤醒,来源于 `CronCreate`、`ScheduleWakeup` 和 `/loop`:

2911 2937 

2912| 字段 | 描述 |2938| 字段 | 描述 |

2913| :- | :- |2939| :- | :- |

2914| `id` | Cron 任务标识符 |2940| `id` | Cron 任务标识符 |

2915| `schedule` | Cron 表达式,例如 `0 9 * * 1-5` |2941| `schedule` | Cron 表达式,例如 `0 9 * * 1-5` |

2916| `recurring` | 对于计划只编码单次触发时间的一次性唤醒为 `false`,对于每次匹配都会重新触发的任务为 `true` |2942| `recurring` | 对于计划仅编码单个触发时间的一次性唤醒为 `false`,对于每次匹配时都会重新触发的任务为 `true` |

2917| `prompt` | cron 触发时提交的提示词,上限为 1000 个字符,截断时带有相同的 `… [+N chars]` 标记 |2943| `prompt` | cron 触发时提交的提示词,上限为 1000 个字符,带有相同的 `… [+N chars]` 标记 |

2918 2944 

2919以下示例展示了一个包含一个正在进行的 shell 任务和一个周期性 cron 的 Stop 输入:2945此示例展示了一个包含一个进行中 shell 任务和一个周期性 cron 的 Stop 输入:

2920 2946 

2921```json theme={null}2947```json theme={null}

2922{2948{


2951 Stop 决策控制2977 Stop 决策控制

2952</h4>2978</h4>

2953 2979 

2954`Stop` 和 `SubagentStop` hook 可以控制 Claude 是否继续。除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您的 hook 脚本还可以返回以下事件特定字段:2980`Stop` 和 `SubagentStop` hook 可以控制 Claude 是否继续。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您的 hook 脚本还可以返回以下事件特定字段:

2955 2981 

2956| 字段 | 描述 |2982| 字段 | 描述 |

2957| :- | :- |2983| :- | :- |

2958| `decision` | `"block"` 阻止 Claude 停止。省略则允许 Claude 停止 |2984| `decision` | `"block"` 阻止 Claude 停止。省略则允许 Claude 停止 |

2959| `reason` | 当 `decision` 为 `"block"` 时必填。告知 Claude 为何应继续 |2985| `reason` | 当 `decision` 为 `"block"` 时必填。告知 Claude 为什么应该继续 |

2960| `hookSpecificOutput.additionalContext` | 给 Claude 的非错误反馈。对话会继续,以便 Claude 据此采取行动,但与 `decision: "block"` 不同,它在会话记录中显示为 hook 反馈而非 hook 错误 |2986| `hookSpecificOutput.additionalContext` | 给 Claude 的非错误反馈。对话会继续,以便 Claude 据此采取行动,但与 `decision: "block"` 不同,它在会话记录中显示为 hook 反馈,而不是 hook 错误 |

2961 2987 

2962通过以退出码 2 退出来阻止的 hook,其路由方式与 `reason` 相同:Claude 会将 stderr 消息作为它应继续的原因说明接收。2988通过以退出码 2 退出来进行阻止的 hook 与 `reason` 的传递方式相同:Claude 会收到 stderr 消息,作为它应该继续的原因说明。

2963 2989 

2964```json theme={null}2990```json theme={null}

2965{2991{


2968}2994}

2969```2995```

2970 2996 

2971当 hook 按设计正常工作并为 Claude 提供指导时(例如"在完成之前运行测试套件"),请使用 `additionalContext`。它通过与 `decision: "block"` 相同的循环保护机制(即 `stop_hook_active` 输入和连续 8 次继续的上限)让对话继续进行,但会话记录会将其标记为 `Stop hook feedback`,且不会显示 hook 错误通知:2997当 hook 按设计正常运作并为 Claude 提供指导(例如“在完成之前运行测试套件”)时,请使用 `additionalContext`。它通过与 `decision: "block"` 相同的循环保护机制(即 `stop_hook_active` 输入和连续 8 次继续的上限)让对话继续进行,但会话记录会将其标记为 `Stop hook feedback`,并且不会显示 hook 错误通知:

2972 2998 

2973```json theme={null}2999```json theme={null}

2974{3000{


2983 StopFailure3009 StopFailure

2984</h3>3010</h3>

2985 3011 

2986当轮次因 API 错误而结束时,代替 [Stop](#stop) 运行。除 [`terminalSequence`](#emit-terminal-notifications) 外,Claude Code 会忽略该 hook 的输出和退出码。当 Claude 因速率限制、身份验证问题或其他 API 错误而无法完成回复时,可用于记录失败、发送警报或执行恢复操作。3012当轮次因 API 错误而结束时,代替 [Stop](#stop) 运行。除 [`terminalSequence`](#emit-terminal-notifications) 之外,Claude Code 会忽略该 hook 的输出和退出码。当 Claude 因速率限制、身份验证问题或其他 API 错误而无法完成回复时,可用于记录失败日志、发送警报或采取恢复操作。

2987 3013 

2988<h4 id="stopfailure-input">3014<h4 id="stopfailure-input">

2989 StopFailure 输入3015 StopFailure 输入

2990</h4>3016</h4>

2991 3017 

2992除了[通用输入字段](#common-input-fields)外,StopFailure hook 还会接收 `error`、可选的 `error_details` 和可选的 `last_assistant_message`。`error` 字段标识错误类型,并用于匹配器过滤。3018除了[通用输入字段](#common-input-fields)之外,StopFailure hook 还会接收 `error`、可选的 `error_details` 和可选的 `last_assistant_message`。`error` 字段标识错误类型,并用于匹配器过滤。

2993 3019 

2994| 字段 | 描述 |3020| 字段 | 描述 |

2995| :- | :- |3021| :- | :- |

2996| `error` | 错误类型:`rate_limit`、`overloaded`、`authentication_failed`、`oauth_org_not_allowed`、`account_on_hold`、`billing_error`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens`、`cloud_credential_error` 或 `unknown` |3022| `error` | 错误类型:`rate_limit`、`overloaded`、`authentication_failed`、`oauth_org_not_allowed`、`account_on_hold`、`billing_error`、`invalid_request`、`model_not_found`、`server_error`、`max_output_tokens`、`cloud_credential_error` 或 `unknown` |

2997| `error_details` | 有关错误的其他详细信息(如有) |3023| `error_details` | 关于错误的其他详细信息(如果有) |

2998| `last_assistant_message` | 对话中显示的渲染后错误文本。与 `Stop` 和 `SubagentStop`(此字段保存 Claude 的对话输出)不同,对于 `StopFailure`,它包含 API 错误字符串本身,例如 `"API Error: Rate limit reached"` |3024| `last_assistant_message` | 对话中显示的渲染后错误文本。与 `Stop` 和 `SubagentStop` 中该字段包含 Claude 的对话输出不同,对于 `StopFailure`,它包含 API 错误字符串本身,例如 `"API Error: Rate limit reached"` |

2999 3025 

3000```json theme={null}3026```json theme={null}

3001{3027{


3009}3035}

3010```3036```

3011 3037 

3012StopFailure hook 没有决策控制。它们仅用于通知和日志记录。3038StopFailure hook 没有决策控制。它们仅用于通知和日志记录目的。

3013 3039 

3014<h3 id="teammateidle">3040<h3 id="teammateidle">

3015 TeammateIdle3041 TeammateIdle

3016</h3>3042</h3>

3017 3043 

3018当 [agent team](/docs/zh-CN/agent-teams) 队友在结束其轮次后即将进入空闲状态时运行。可用于在队友停止工作前强制执行质量关卡,例如要求 lint 检查通过或验证输出文件是否存在。3044当 [agent team](/docs/zh-CN/agent-teams) 队友在结束其轮次后即将进入空闲状态时运行。可用于在队友停止工作之前强制执行质量关卡,例如要求通过 lint 检查或验证输出文件是否存在。

3019 3045 

3020TeammateIdle hook 不支持匹配器,每次发生时都会触发。3046TeammateIdle hook 不支持匹配器,每次发生时都会触发。

3021 3047 


3023 TeammateIdle 输入3049 TeammateIdle 输入

3024</h4>3050</h4>

3025 3051 

3026除了[通用输入字段](#common-input-fields)外,TeammateIdle hook 还会接收 `teammate_name` 和 `team_name`。3052除了[通用输入字段](#common-input-fields)之外,TeammateIdle hook 还会接收 `teammate_name` 和 `team_name`。

3027 3053 

3028```json theme={null}3054```json theme={null}

3029{3055{


3049 3075 

3050TeammateIdle hook 支持两种控制队友行为的方式:3076TeammateIdle hook 支持两种控制队友行为的方式:

3051 3077 

3052* **退出码 2**:队友会将 stderr 消息作为反馈接收,并继续工作而不是进入空闲状态。3078* **退出码 2**:队友会收到 stderr 消息作为反馈,并继续工作而不是进入空闲状态。

3053* **JSON `{"continue": false, "stopReason": "..."}`**:完全停止该队友,与 `Stop` hook 的行为一致。`stopReason` 会显示给用户。3079* **JSON `{"continue": false, "stopReason": "..."}`**:完全停止该队友,与 `Stop` hook 的行为一致。`stopReason` 会显示给用户。

3054 3080 

3055以下示例在允许队友进入空闲状态之前检查构建产物是否存在:3081此示例在允许队友进入空闲状态之前检查构建产物是否存在:

3056 3082 

3057```bash theme={null}3083```bash theme={null}

3058#!/bin/bash3084#!/bin/bash


3071 3097 

3072在会话期间配置文件发生更改时运行。可用于审计设置更改、强制执行安全策略,或阻止对配置文件的未授权修改。3098在会话期间配置文件发生更改时运行。可用于审计设置更改、强制执行安全策略,或阻止对配置文件的未授权修改。

3073 3099 

3074当设置文件、托管策略文件或 skill 文件发生更改时,Claude Code 会运行 ConfigChange hook。对于托管策略,仅当 `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改时才会运行它们。它会应用[服务器托管设置](/docs/zh-CN/server-managed-settings)以及对 macOS 托管偏好设置或 Windows 注册表策略的更改,而不运行这些 hook。在启用了 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 的 WSL 上,它还会在策略轮询时应用已更改的 Windows 端托管设置文件,同样不运行这些 hook。3100当设置文件、托管策略文件或 skill 文件发生更改时,Claude Code 会运行 ConfigChange hook。对于托管策略,仅当 `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改时才会运行。Claude Code 在应用[服务器托管设置](/docs/zh-CN/server-managed-settings)以及 macOS 托管偏好设置或 Windows 注册表策略的更改时不会运行这些 hook。在启用了 [`wslInheritsWindowsSettings`](/docs/zh-CN/settings-reference#wslinheritswindowssettings) 的 WSL 上,它在策略轮询时应用已更改的 Windows 端托管设置文件,同样不会运行这些 hook。

3075 3101 

3076匹配器按配置来源过滤:3102匹配器按配置来源进行过滤:

3077 3103 

3078| 匹配器 | 触发时机 |3104| 匹配器 | 触发时机 |

3079| :- | :- |3105| :- | :- |


3083| `policy_settings` | `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改 |3109| `policy_settings` | `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改 |

3084| `skills` | `.claude/skills/` 中的 skill 文件发生更改 |3110| `skills` | `.claude/skills/` 中的 skill 文件发生更改 |

3085 3111 

3086以下示例记录所有配置更改以用于安全审计:3112此示例记录所有配置更改,用于安全审计:

3087 3113 

3088```json theme={null}3114```json theme={null}

3089{3115{


3107 ConfigChange 输入3133 ConfigChange 输入

3108</h4>3134</h4>

3109 3135 

3110除了[通用输入字段](#common-input-fields)外,ConfigChange hook 还会接收 `source` 和可选的 `file_path`。`source` 字段指示哪种配置类型发生了更改,`file_path` 提供被修改的具体文件的路径。3136除了[通用输入字段](#common-input-fields)之外,ConfigChange hook 还会接收 `source` 以及可选的 `file_path`。`source` 字段指示哪种配置类型发生了更改,`file_path` 提供被修改的具体文件的路径。

3111 3137 

3112```json theme={null}3138```json theme={null}

3113{3139{


3138}3164}

3139```3165```

3140 3166 

3141`policy_settings` 更改无法被阻止。当机器上的托管设置文件发生更改时,hook 仍会针对 `policy_settings` 来源触发,因此您可以用它们记录这些编辑,但任何阻止决策都会被忽略。这可确保企业托管设置始终生效。当[服务器托管设置](/docs/zh-CN/server-managed-settings)到达或刷新时,Claude Code 不会运行 `ConfigChange` hook。3167`policy_settings` 更改无法被阻止。当计算机上的托管设置文件发生更改时,hook 仍会针对 `policy_settings` 来源触发,因此您可以使用它们来记录这些编辑,但任何阻止决策都会被忽略。这可确保企业托管的设置始终生效。当[服务器托管设置](/docs/zh-CN/server-managed-settings)到达或刷新时,Claude Code 不会运行 `ConfigChange` hook。

3142 3168 

3143Claude Code 会根据 ConfigChange hook JSON 输出中的阻止决策采取行动,并丢弃 `systemMessage` 和 `continue`。被阻止的更改不会向您或 Claude 显示任何消息,无论您是通过 `reason` 还是通过退出码 2 时的 stderr 进行阻止。Claude Code 只会向调试日志写入一行。3169Claude Code 会根据 ConfigChange hook JSON 输出中的阻止决策采取行动,并丢弃 `systemMessage` 和 `continue`。无论您是通过 `reason` 还是通过退出码 2 时的 stderr 进行阻止,被阻止的更改都不会向您或 Claude 显示任何消息。Claude Code 只会在调试日志中写入一行。

3144 3170 

3145<h3 id="cwdchanged">3171<h3 id="cwdchanged">

3146 CwdChanged3172 CwdChanged

3147</h3>3173</h3>

3148 3174 

3149当主对话中的 shell 命令更改了工作目录时运行,例如当 Claude 执行 `cd` 命令时。可用于响应目录更改:重新加载环境变量、激活项目特定的工具链,或自动运行设置脚本。可与 [FileChanged](#filechanged) 搭配使用,以支持 [direnv](https://direnv.net/) 等按目录管理环境的工具。3175当主对话中的 shell 命令更改工作目录时运行,例如 Claude 执行 `cd` 命令时。可用于响应目录更改:重新加载环境变量、激活项目特定的工具链,或自动运行设置脚本。可与 [FileChanged](#filechanged) 搭配使用,以支持 [direnv](https://direnv.net/) 等按目录管理环境的工具。

3150 3176 

3151CwdChanged hook 可以访问 [`CLAUDE_ENV_FILE`](#persist-environment-variables)。写入该文件的变量会持续作用于后续的 Bash 命令,直到下一个 CwdChanged 事件发生,届时 Claude Code 会清除它们。3177CwdChanged hook 可以访问 [`CLAUDE_ENV_FILE`](#persist-environment-variables)。写入该文件的变量会持续作用于后续的 Bash 命令,直到下一个 CwdChanged 事件发生时由 Claude Code 清除。

3152 3178 

3153CwdChanged 不支持匹配器,每次发生时都会触发。3179CwdChanged 不支持匹配器,每次发生时都会触发。

3154 3180 


3156 CwdChanged 输入3182 CwdChanged 输入

3157</h4>3183</h4>

3158 3184 

3159除了[通用输入字段](#common-input-fields)外,CwdChanged hook 还会接收 `old_cwd` 和 `new_cwd`。3185除了[通用输入字段](#common-input-fields)之外,CwdChanged hook 还会接收 `old_cwd` 和 `new_cwd`。

3160 3186 

3161```json theme={null}3187```json theme={null}

3162{3188{


3173 CwdChanged 输出3199 CwdChanged 输出

3174</h4>3200</h4>

3175 3201 

3176除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,CwdChanged hook 还可以返回 `watchPaths`,以动态设置 [FileChanged](#filechanged) 监视的文件路径:3202除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,CwdChanged hook 还可以返回 `watchPaths`,以动态设置 [FileChanged](#filechanged) 监视的文件路径:

3177 3203 

3178| 字段 | 描述 |3204| 字段 | 描述 |

3179| :- | :- |3205| :- | :- |

3180| `watchPaths` | 绝对路径数组。替换当前的动态监视列表。来自 `matcher` 配置的路径始终会被监视。返回空数组会清空动态列表,这在进入新目录时很常见 |3206| `watchPaths` | 绝对路径数组。替换当前的动态监视列表。来自您 `matcher` 配置的路径始终会被监视。返回空数组会清除动态列表,这在进入新目录时很常见 |

3181 3207 

3182CwdChanged hook 没有决策控制。它们无法阻止目录更改。3208CwdChanged hook 没有决策控制。它们无法阻止目录更改。

3183 3209 

3184Claude Code 会从其 JSON 输出中读取 `watchPaths` 和 `systemMessage`,并丢弃 `continue`。在交互式会话中,它会将 `systemMessage` 显示为简短的终端通知。该消息不会到达 SDK 消息流。3210Claude Code 会读取其 JSON 输出中的 `watchPaths` 和 `systemMessage`,并丢弃 `continue`。在交互式会话中,它会将 `systemMessage` 显示为简短的终端通知。该消息不会进入 SDK 消息流。

3185 3211 

3186<h3 id="directoryadded">3212<h3 id="directoryadded">

3187 DirectoryAdded3213 DirectoryAdded

3188</h3>3214</h3>

3189 3215 

3190在您于会话中途使用 `/add-dir` 命令添加工作目录后,或 SDK 客户端使用 `register_repo_root` 控制请求添加工作目录后运行。可用于准备新添加的仓库,例如安装其依赖。3216在您于会话中途使用 `/add-dir` 命令添加工作目录之后,或在 SDK 客户端通过 `register_repo_root` 控制请求添加工作目录之后运行。可用于准备新添加的仓库,例如安装其依赖。

3191 3217 

3192在以下情况下,Claude Code 不会触发此事件:3218在以下情况下,Claude Code 不会触发此事件:

3193 3219 

3194* 您通过 `--add-dir` 启动标志传入目录;这些目录由 [SessionStart](#sessionstart) 处理3220* 您通过 `--add-dir` 启动标志传入目录;这些目录由 [SessionStart](#sessionstart) 覆盖

3195* 您在 `/permissions` 的 Workspace 选项卡上添加目录3221* 您在 `/permissions` 的 Workspace 标签页上添加目录

3196* 您添加的目录已经是工作目录或位于某个工作目录内3222* 您添加的目录已经是工作目录或位于某个工作目录之内

3197 3223 

3198Claude Code 会在刷新沙箱和权限状态之后触发 DirectoryAdded,因此当您的 hook 运行时,沙箱中的工具已经可以看到新目录。hook 命令本身在沙箱之外运行。3224Claude Code 在刷新沙箱和权限状态之后触发 DirectoryAdded,因此当您的 hook 运行时,沙箱中的工具已经能看到新目录。hook 命令本身在沙箱之外运行。

3199 3225 

3200Claude Code 不会等待该 hook:添加操作会立即完成,hook 在后台运行,默认超时时间为 600 秒。3226Claude Code 不会等待该 hook:添加操作会立即完成,hook 在后台运行,使用默认的 600 秒超时时间。

3201 3227 

3202匹配器按目录的添加方式过滤:3228匹配器按目录的添加方式进行过滤:

3203 3229 

3204| 匹配器 | 触发时机 |3230| 匹配器 | 触发时机 |

3205| :- | :- |3231| :- | :- |

3206| `slash_command` | 您使用 `/add-dir` 添加目录 |3232| `slash_command` | 您使用 `/add-dir` 添加目录 |

3207| `register_repo_root` | SDK 客户端使用 `register_repo_root` 控制请求添加目录 |3233| `register_repo_root` | SDK 客户端通过 `register_repo_root` 控制请求添加目录 |

3208 3234 

3209<h4 id="directoryadded-input">3235<h4 id="directoryadded-input">

3210 DirectoryAdded 输入3236 DirectoryAdded 输入

3211</h4>3237</h4>

3212 3238 

3213除了[通用输入字段](#common-input-fields)外,DirectoryAdded hook 还会接收 `directory` 和 `source`。3239除了[通用输入字段](#common-input-fields)之外,DirectoryAdded hook 还会接收 `directory` 和 `source`。

3214 3240 

3215| 字段 | 描述 |3241| 字段 | 描述 |

3216| :- | :- |3242| :- | :- |


3237 FileChanged3263 FileChanged

3238</h3>3264</h3>

3239 3265 

3240当被监视的文件在磁盘上发生更改时运行。Claude Code 通过文件系统监视器而非检查工具调用来检测更改,因此无论是什么更改了文件,它都会运行该 hook:`Edit` 或 `Write` 工具调用、Claude 通过 `Bash` 运行的脚本,或完全在 Claude Code 之外的进程。一个常见用途是在项目配置文件更改时重新加载环境变量。3266当被监视的文件在磁盘上发生变化时运行。Claude Code 通过文件系统监视器检测变化,而不是通过检查工具调用,因此无论是什么更改了文件,它都会运行该 hook:`Edit` 或 `Write` 工具调用、Claude 通过 `Bash` 运行的脚本,或完全在 Claude Code 之外的进程。一个常见用途是在项目配置文件发生变化时重新加载环境变量。

3241 3267 

3242此事件的 `matcher` 承担两个角色:3268此事件的 `matcher` 有两个作用:

3243 3269 

3244* **构建监视列表**:该值按 `|` 拆分,每个片段都被注册为工作目录中的一个字面文件名,因此 `".envrc|.env"` 恰好监视这两个文件。正则表达式模式在这里没有用处:像 `^\.env` 这样的值会监视一个字面名为 `^\.env` 的文件。3270* **构建监视列表**:该值按 `|` 拆分,每个片段都会被注册为工作目录中的一个字面文件名,因此 `".envrc|.env"` 恰好监视这两个文件。正则表达式模式在这里没有用处:像 `^\.env` 这样的值会监视一个字面名称为 `^\.env` 的文件。

3245* **过滤要运行的 hook**:当被监视的文件发生更改时,同一个值会按照标准[匹配器规则](#matcher-patterns),针对已更改文件的基本名称过滤要运行的 hook 组。3271* **筛选要运行的 hook**:当被监视的文件发生变化时,同一个值会使用标准的[匹配器规则](#matcher-patterns),针对所更改文件的基本名称来筛选要运行的 hook 组。

3246 3272 

3247以下示例会在 `data.csv` 发生任何更改(包括由 `Bash` 命令或外部脚本重写文件)后规范化其行尾:3273此示例会在 `data.csv` 发生任何更改后规范化其行尾,包括 `Bash` 命令或外部脚本重写该文件的情况:

3248 3274 

3249```json theme={null}3275```json theme={null}

3250{3276{


3264}3290}

3265```3291```

3266 3292 

3267该 hook 从 stdin 上 [JSON 输入](#filechanged-input)的 `file_path` 字段中读取已更改文件的绝对路径。其 `grep` 守卫检测的正是 `perl` 要移除的内容,即行尾的 CR,因此规范化之后的那次运行会直接退出而不触碰文件。更宽松的守卫会导致无限循环,因为即使没有替换任何内容,`perl -i` 也会重写文件,而 Claude Code 在每次重写后都会再次运行该 hook。将此脚本保存到 `/path/to/normalize-line-endings.sh` 并使其可执行:3293该 hook 从 stdin 上 [JSON 输入](#filechanged-input)的 `file_path` 字段读取所更改文件的绝对路径。它的 `grep` 检查所测试的内容与 `perl` 删除的内容相同,即行尾的 CR,因此规范化之后的那次运行会直接退出而不触碰文件。如果检查条件更宽松,则会无限循环,因为即使 `perl -i` 没有替换任何内容也会重写文件,而 Claude Code 在每次重写后都会再次运行该 hook。将此脚本保存到 `/path/to/normalize-line-endings.sh` 并使其可执行:

3268 3294 

3269```bash theme={null}3295```bash theme={null}

3270#!/bin/bash3296#!/bin/bash


3274fi3300fi

3275```3301```

3276 3302 

3277要确认该 hook 正常工作,请让 Claude 使用 `Bash` 命令向 `data.csv` 追加一行 CRLF。Claude Code 会运行该 hook,文件最终会使用 LF 行尾。3303要确认该 hook 是否正常工作,请让 Claude 使用 `Bash` 命令向 `data.csv` 追加一行 CRLF 行。Claude Code 会运行该 hook,文件最终会使用 LF 行尾。

3278 3304 

3279要监视无法预先命名的文件,请从 hook 中返回 [`watchPaths`](#filechanged-output) 以动态更新监视列表。Claude Code 仅在有内容指定了要监视的文件时才会启动监视器,因此请用一个匹配器至少指定一个文件的 FileChanged 组,或用一个返回 `watchPaths` 的 [SessionStart](#sessionstart-decision-control) 或 [CwdChanged](#cwdchanged) hook 来初始化列表。当被监视的文件发生更改时,匹配器仍会过滤要运行的 hook 组,因此请为处理动态路径的组省略匹配器,这样它会匹配所有被监视的文件,且不会向监视列表添加任何内容。`"*"` 匹配器同样匹配所有文件,但 Claude Code 会像对待其他值一样将其注册到监视列表中,作为一个字面名为 `*` 的文件。3305要监视无法预先命名的文件,请从 hook 返回 [`watchPaths`](#filechanged-output) 以动态更新监视列表。只有当有内容指定了要监视的文件时,Claude Code 才会启动监视器,因此请使用一个匹配器至少指定了一个文件的 FileChanged 组,或使用一个返回 `watchPaths` 的 [SessionStart](#sessionstart-decision-control) 或 [CwdChanged](#cwdchanged) hook 来初始化该列表。当被监视的文件发生变化时,匹配器仍会筛选要运行的 hook 组,因此请为处理动态路径的组省略匹配器,这样它会匹配每个被监视的文件,且不会向监视列表添加任何内容。`"*"` 匹配器也会匹配每个文件,但 Claude Code 会像对待其他任何值一样将其注册到监视列表中,作为一个名为 `*` 的字面文件。

3280 3306 

3281FileChanged hook 可以访问 [`CLAUDE_ENV_FILE`](#persist-environment-variables)。写入该文件的变量会持续作用于后续的 Bash 命令,直到下一个 [CwdChanged](#cwdchanged) 事件发生,届时 Claude Code 会清除它们。3307FileChanged hook 可以访问 [`CLAUDE_ENV_FILE`](#persist-environment-variables)。写入该文件的变量会持续作用于后续的 Bash 命令,直到下一个 [CwdChanged](#cwdchanged) 事件发生时由 Claude Code 清除。

3282 3308 

3283<h4 id="filechanged-input">3309<h4 id="filechanged-input">

3284 FileChanged 输入3310 FileChanged 输入

3285</h4>3311</h4>

3286 3312 

3287除了[通用输入字段](#common-input-fields)外,FileChanged hook 还会接收 `file_path` 和 `event`。3313除了[通用输入字段](#common-input-fields)之外,FileChanged hook 还会接收 `file_path` 和 `event`。

3288 3314 

3289| 字段 | 描述 |3315| 字段 | 描述 |

3290| :- | :- |3316| :- | :- |

3291| `file_path` | 已更改文件的绝对路径 |3317| `file_path` | 发生变化的文件的绝对路径 |

3292| `event` | 发生了什么:`"change"` 表示文件被修改,`"add"` 表示文件被创建,`"unlink"` 表示文件被删除 |3318| `event` | 发生了什么:`"change"` 表示文件被修改,`"add"` 表示文件被创建,`"unlink"` 表示文件被删除 |

3293 3319 

3294```json theme={null}3320```json theme={null}


3306 FileChanged 输出3332 FileChanged 输出

3307</h4>3333</h4>

3308 3334 

3309除了所有 hook 均可使用的 [JSON 输出字段](#json-output)外,FileChanged hook 还可以返回 `watchPaths`,以动态更新被监视的文件路径:3335除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,FileChanged hook 还可以返回 `watchPaths` 以动态更新要监视的文件路径:

3310 3336 

3311| 字段 | 描述 |3337| 字段 | 描述 |

3312| :- | :- |3338| :- | :- |

3313| `watchPaths` | 绝对路径数组。替换当前的动态监视列表。来自 `matcher` 配置的路径始终会被监视。当您的 hook 脚本根据已更改的文件发现需要监视的其他文件时,请使用此字段 |3339| `watchPaths` | 绝对路径数组。替换当前的动态监视列表。来自 `matcher` 配置的路径始终会被监视。当您的 hook 脚本根据所更改的文件发现需要监视的其他文件时,请使用此字段 |

3314 3340 

3315FileChanged hook 没有决策控制。它们无法阻止文件更改的发生。3341FileChanged hook 没有决策控制。它们无法阻止文件更改的发生。

3316 3342 

3317Claude Code 会从其 JSON 输出中读取 `watchPaths` 和 `systemMessage`,并丢弃 `continue`。在交互式会话中,它会将 `systemMessage` 显示为简短的终端通知。该消息不会到达 SDK 消息流。3343Claude Code 从其 JSON 输出中读取 `watchPaths` 和 `systemMessage`,并丢弃 `continue`。在交互式会话中,它会将 `systemMessage` 显示为简短的终端通知。该消息不会进入 SDK 消息流。

3318 3344 

3319<h3 id="worktreecreate">3345<h3 id="worktreecreate">

3320 WorktreeCreate3346 WorktreeCreate

3321</h3>3347</h3>

3322 3348 

3323在 Claude Code 于以下等情况下创建 worktree 时运行:3349在以下情况下,当 Claude Code 创建 worktree 时运行:

3324 3350 

3325* 您使用 `claude --worktree` 启动会话3351* 您使用 `claude --worktree` 启动会话

3326* Claude 在会话期间创建 worktree,并通过 [`EnterWorktree`](/docs/zh-CN/tools-reference) 工具切换进去3352* Claude 在会话期间创建 worktree 并通过 [`EnterWorktree`](/docs/zh-CN/tools-reference) 工具切换到其中

3327* [子代理使用 `isolation: "worktree"`](/docs/zh-CN/sub-agents#choose-the-subagent-scope)3353* [子代理使用 `isolation: "worktree"`](/docs/zh-CN/sub-agents#choose-the-subagent-scope)

3328* [工作流](/docs/zh-CN/workflows#migrate-many-files-in-parallel)在其自己的 worktree 中运行 Agent3354* [工作流](/docs/zh-CN/workflows#migrate-many-files-in-parallel)在其自己的 worktree 中运行 Agent

3329* Claude Code 将[后台会话](/docs/zh-CN/agent-view#how-file-edits-are-isolated)隔离在其自己的 worktree 中3355* Claude Code 将[后台会话](/docs/zh-CN/agent-view#how-file-edits-are-isolated)隔离在其自己的 worktree 中

3330* `worktree` 模式下的 [`claude remote-control`](/docs/zh-CN/remote-control#start-a-remote-control-session) 在其自己的 worktree 中启动会话3356* 处于 `worktree` 模式的 [`claude remote-control`](/docs/zh-CN/remote-control#start-a-remote-control-session) 在其自己的 worktree 中启动会话

3331 3357 

3332当 Claude 通过 Bash 工具运行 `git worktree add` 而不是调用 `EnterWorktree` 时,您的 WorktreeCreate hook 不会运行。要检查或阻止该命令,请添加一个使用 `Bash` 匹配器的 [`PreToolUse`](#pretooluse) hook。3358当 Claude 通过 Bash 工具运行 `git worktree add` 而不是调用 `EnterWorktree` 时,您的 WorktreeCreate hook 不会运行。要检查或阻止该命令,请添加一个使用 `Bash` 匹配器的 [`PreToolUse`](#pretooluse) hook。

3333 3359 

3334默认情况下,Claude Code 使用 `git worktree` 创建隔离的工作副本。配置 WorktreeCreate hook 会替换这种默认的 git 行为,让您可以使用其他版本控制系统,例如 SVN、Perforce 或 Mercurial。3360默认情况下,Claude Code 使用 `git worktree` 创建隔离的工作副本。配置 WorktreeCreate hook 会替换该默认的 git 行为,使您可以使用其他版本控制系统,例如 SVN、Perforce 或 Mercurial。

3335 3361 

3336由于该 hook 完全替换了默认行为,因此不会处理 [`.worktreeinclude`](/docs/zh-CN/worktrees#copy-gitignored-files-into-worktrees)。如果需要将 `.env` 等本地配置文件复制到新的 worktree 中,请在 hook 脚本中完成。3362由于该 hook 会完全替换默认行为,因此不会处理 [`.worktreeinclude`](/docs/zh-CN/worktrees#copy-gitignored-files-into-worktrees)。如果您需要将 `.env` 等本地配置文件复制到新的 worktree 中,请在 hook 脚本中执行此操作。

3337 3363 

3338该 hook 必须返回所创建 worktree 目录的路径。Claude Code 将此路径用作隔离会话的工作目录。有关每种 hook 类型如何返回路径,请参阅 [WorktreeCreate 输出](#worktreecreate-output)。3364该 hook 必须返回所创建的 worktree 目录的路径。Claude Code 会将此路径用作隔离会话的工作目录。有关每种 hook 类型如何返回路径,请参阅 [WorktreeCreate 输出](#worktreecreate-output)。

3339 3365 

3340Claude Code 依据 hook 是否成功以及返回的路径执行操作,并丢弃 `systemMessage` 和 `continue`。3366Claude Code 根据 hook 是否成功以及返回的路径采取行动,并丢弃 `systemMessage` 和 `continue`。

3341 3367 

3342此示例创建一个 SVN 工作副本,并打印路径供 Claude Code 使用。请将仓库 URL 替换为您自己的 URL:3368此示例创建一个 SVN 工作副本并打印路径供 Claude Code 使用。请将仓库 URL 替换为您自己的:

3343 3369 

3344```json theme={null}3370```json theme={null}

3345{3371{


3358}3384}

3359```3385```

3360 3386 

3361该 hook 从 stdin 上的 JSON 输入中读取 worktree 的 `name`,将一个全新副本检出到新目录中,并打印目录路径。最后一行的 `echo` 就是 Claude Code 读取为 worktree 路径的内容。请将其他所有输出重定向到 stderr,以免干扰路径。3387该 hook 从 stdin 上的 JSON 输入读取 worktree 的 `name`,将一份全新副本检出到新目录中,并打印该目录路径。最后一行的 `echo` 就是 Claude Code 读取为 worktree 路径的内容。请将其他所有输出重定向到 stderr,以免干扰路径。

3362 3388 

3363<h4 id="worktreecreate-input">3389<h4 id="worktreecreate-input">

3364 WorktreeCreate 输入3390 WorktreeCreate 输入

3365</h4>3391</h4>

3366 3392 

3367除[通用输入字段](#common-input-fields)外,WorktreeCreate hook 还会接收 `name` 字段。这是新 worktree 的 slug 标识符,由用户指定或自动生成,例如 `bold-oak-a3f2`。3393除了[通用输入字段](#common-input-fields)之外,WorktreeCreate hook 还会接收 `name` 字段。这是新 worktree 的 slug 标识符,由用户指定或自动生成,例如 `bold-oak-a3f2`。

3368 3394 

3369```json theme={null}3395```json theme={null}

3370{3396{


3380 WorktreeCreate 输出3406 WorktreeCreate 输出

3381</h4>3407</h4>

3382 3408 

3383WorktreeCreate hook 不使用标准的允许/阻止决策模型,而是由 hook 的成功或失败决定结果。该 hook 必须返回所创建 worktree 目录的路径:3409WorktreeCreate hook 不使用标准的允许/阻止决策模型。相反,由 hook 的成功或失败决定结果。该 hook 必须返回所创建的 worktree 目录的路径:

3384 3410 

3385* **命令 hook**(`type: "command"`):将路径作为 stdout 的最后一个非空行打印。Claude Code 在读取该行之前会去除 ANSI 转义码,因此在 `echo` 之前打印的 shell 启动横幅会被忽略。请将 hook 的其他所有输出重定向到 stderr。3411* **命令 hook**(`type: "command"`):将路径作为 stdout 的最后一个非空行打印。Claude Code 在读取该行之前会去除 ANSI 转义码,因此在您的 `echo` 之前打印的 shell 启动横幅会被忽略。请将其他所有 hook 输出重定向到 stderr。

3386* **HTTP hook**(`type: "http"`):在响应正文中返回 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`。3412* **HTTP hook**(`type: "http"`):在响应正文中返回 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`。

3387 3413 

3388如果 hook 失败或未生成路径,worktree 创建将失败并报错。3414如果 hook 失败或未生成路径,worktree 创建将失败并报错。

3389 3415 

3390Claude Code 会相对于 hook 运行时所在的目录解析相对路径,并折叠其中的 `.` 或 `..` 段。如果生成的路径不是 Claude Code 可以进入的目录,会话会打印一条指明该路径的错误,并以退出码 1 退出。3416Claude Code 会相对于 hook 运行时所在的目录解析相对路径,并折叠其中的任何 `.` 或 `..` 片段。如果得到的路径不是 Claude Code 可以进入的目录,会话会打印一条指明该路径的错误,并以代码 1 退出。

3391 3417 

3392Claude Code 会拒绝包含 `.` 或 `..` 段的绝对路径,以及任何经过仓库根目录下符号链接的路径,因为提交到仓库中的符号链接可能会将 worktree 重定向到仓库之外。错误信息会指明被拒绝的路径组成部分。请返回一个规范化的、不经过仓库内符号链接的路径。在 v2.1.216 之前,worktree 创建会直接使用 hook 返回的路径,不进行此项检查。3418Claude Code 会拒绝包含 `.` 或 `..` 片段的绝对路径,以及任何经过仓库根目录下符号链接的路径,因为提交到仓库中的符号链接可能会将 worktree 重定向到仓库之外。错误会指明被拒绝的组成部分。请返回一个不经过仓库内符号链接的规范化路径。在 v2.1.216 之前,worktree 创建会直接使用 hook 的路径,不进行此项检查。

3393 3419 

3394<h3 id="worktreeremove">3420<h3 id="worktreeremove">

3395 WorktreeRemove3421 WorktreeRemove

3396</h3>3422</h3>

3397 3423 

3398在 Claude Code 清理由您的 [`WorktreeCreate`](#worktreecreate) hook 创建的 worktree 时运行。该事件在以下情况下触发:3424当 Claude Code 清理由您的 [`WorktreeCreate`](#worktreecreate) hook 创建的 worktree 时运行。该事件在以下情况下触发:

3399 3425 

3400* 您退出交互式 [worktree 会话](/docs/zh-CN/worktrees#start-claude-in-a-worktree),并在 Claude Code 提示时选择删除该 worktree3426* 您退出交互式 [worktree 会话](/docs/zh-CN/worktrees#start-claude-in-a-worktree),并在 Claude Code 提示时选择删除 worktree

3401* 您退出一个尚未[命名](/docs/zh-CN/sessions#name-your-sessions)的交互式 worktree 会话,Claude Code 未发现已更改或未跟踪的文件,并在不提示的情况下删除该 worktree3427* 您退出一个尚未[命名](/docs/zh-CN/sessions#name-your-sessions)的交互式 worktree 会话,Claude Code 未发现已更改或未跟踪的文件,并在不提示您的情况下删除 worktree

3402* 您删除一个在该 worktree 中运行的[后台会话](/docs/zh-CN/agent-view#what-deleting-a-session-removes)3428* 您删除在该 worktree 中运行的[后台会话](/docs/zh-CN/agent-view#what-deleting-a-session-removes)

3403* 您在会话期间要求 Claude 退出并删除 worktree,Claude 使用 [`ExitWorktree`](/docs/zh-CN/tools-reference) 工具将其删除3429* 您在会话期间要求 Claude 退出并删除 worktree,Claude 使用 [`ExitWorktree`](/docs/zh-CN/tools-reference) 工具将其删除

3404* 由 [`claude remote-control`](/docs/zh-CN/remote-control#start-a-remote-control-session) 以 `worktree` 模式启动的会话在未崩溃的情况下结束,且 Claude Code 在其 worktree 中未发现任何已更改或未跟踪的文件,也没有新的提交3430* 由 [`claude remote-control`](/docs/zh-CN/remote-control#start-a-remote-control-session) 以 `worktree` 模式启动的会话在未崩溃的情况下结束,并且 Claude Code 在其 worktree 中未发现已更改或未跟踪的文件,也没有新的提交

3405* 您停止 `claude remote-control` 时,它以 `worktree` 模式启动的会话仍在运行,且 Claude Code 在这些会话的 worktree 中未发现任何已更改或未跟踪的文件,也没有新的提交3431* 您在由 `claude remote-control` 以 `worktree` 模式启动的会话仍在运行时停止 `claude remote-control`,并且 Claude Code 在它们的 worktree 中未发现已更改或未跟踪的文件,也没有新的提交

3406 3432 

3407当子代理或工作流 Agent 完成时,Claude Code 会保留您的 WorktreeCreate hook 为其创建的 worktree,并且不会运行您的 WorktreeRemove hook。工作完成后,请自行删除这些 worktree。3433当子代理或工作流 Agent 完成时,Claude Code 会保留您的 WorktreeCreate hook 为其创建的 worktree,并且不会运行您的 WorktreeRemove hook。工作完成后,请自行删除这些 worktree。

3408 3434 

3409对于 `ExitWorktree` 调用或 `claude remote-control` 清理,Claude Code 在运行您的 hook 之前不会提示您。除非调用传入 [`discard_changes: true`](/docs/zh-CN/agent-sdk/typescript#exitworktree),否则 `ExitWorktree` 会拒绝删除由 hook 创建的 worktree,这使您的 hook 成为该路径上的最后一道检查。3435对于 `ExitWorktree` 调用或 `claude remote-control` 清理,Claude Code 不会在您的 hook 运行之前提示您。除非调用传递了 [`discard_changes: true`](/docs/zh-CN/agent-sdk/typescript#exitworktree),否则 `ExitWorktree` 会拒绝删除由 hook 创建的 worktree,这使您的 hook 成为该路径上的最后一道检查。

3410 3436 

3411Claude Code 使用 git 查找已更改或未跟踪的文件,因此对于不是 git 检出或不位于 git 检出内的 worktree,即使目录中有未提交的工作,它也找不到任何内容。请在 WorktreeRemove hook 删除任何内容之前检查此类工作。3437Claude Code 使用 git 查找已更改或未跟踪的文件,因此对于不是 git 检出或不在 git 检出内的 worktree,即使目录中有未提交的工作,它也找不到任何文件。请在 WorktreeRemove hook 删除任何内容之前检查此类工作。

3412 3438 

3413对于基于 git 的 worktree,Claude Code 会使用 `git worktree remove` 自动处理清理。如果您配置了 WorktreeCreate hook,请将其与 WorktreeRemove hook 配对使用以控制清理:3439对于基于 git 的 worktree,Claude Code 会使用 `git worktree remove` 自动处理清理。如果您配置了 WorktreeCreate hook,请将其与 WorktreeRemove hook 搭配使用以控制清理:

3414 3440 

3415* **没有 WorktreeRemove hook**:对于退出时或通过 `ExitWorktree` 进行的删除,Claude Code 会回退到 git;当 `claude remote-control` 执行清理时,则保留 worktree:3441* **没有 WorktreeRemove hook**:对于退出时或通过 `ExitWorktree` 进行的删除,Claude Code 会回退到 git;当 `claude remote-control` 进行清理时,则保留 worktree:

3416 * **您退出 worktree 会话,或 Claude 调用 `ExitWorktree`**:Claude Code 会像 `git worktree remove --force` 那样删除您的 WorktreeCreate hook 返回的路径,因此 git 能识别的 worktree 会被删除。git 无法识别的 worktree(例如您的 hook 使用非 git 版本控制系统创建的 worktree)会保留在磁盘上。3442 * **您退出 worktree 会话,或 Claude 调用 `ExitWorktree`**:Claude Code 会像 `git worktree remove --force` 那样删除您的 WorktreeCreate hook 返回的路径,因此 git 能识别的 worktree 会被删除。git 无法识别的 worktree(例如您的 hook 使用非 git 版本控制系统创建的 worktree)会保留在磁盘上。

3417 * **`claude remote-control` 清理会话的 worktree**:worktree 保留在磁盘上,运行 `claude remote-control` 的终端会显示 `worktree removal failed, kept: <path>`。3443 * **`claude remote-control` 清理会话的 worktree**:worktree 保留在磁盘上,运行 `claude remote-control` 的终端会显示 `worktree removal failed, kept: <path>`。

3418 * **您删除后台会话**:请参阅[删除会话会移除哪些内容](/docs/zh-CN/agent-view#what-deleting-a-session-removes)。3444 * **您删除后台会话**:请参阅[删除会话会移除什么](/docs/zh-CN/agent-view#what-deleting-a-session-removes)。

3419* **Hook 以 0 退出**:该 worktree 被视为已删除。Claude Code 不会从 hook 读取其他任何内容,因此请确保您的 hook 已删除该目录。3445* **Hook 以 0 退出**:worktree 被视为已删除。Claude Code 不会从 hook 读取其他任何内容,因此请确保您的 hook 已删除该目录。

3420* **Hook 以非零值退出**:如果之后 `worktree_path` 处的目录仍然存在,则删除失败,worktree 保留在磁盘上,且不会回退到 git。在以非零值退出之前已删除目录的 hook 被视为已删除。有关如何报告失败,请参阅 [WorktreeRemove 输入](#worktreeremove-input)。3446* **Hook 以非零退出**:如果之后 `worktree_path` 处的目录仍然存在,则删除失败,worktree 保留在磁盘上,且不会回退到 git。在以非零退出之前已删除目录的 hook 被视为已删除。有关如何报告该失败,请参阅 [WorktreeRemove 输入](#worktreeremove-input)。

3421 3447 

3422Claude Code 永远不会删除属于由 hook 创建的 worktree 的分支,因为它只知道您的 WorktreeCreate hook 返回的路径。如果您的 WorktreeCreate hook 创建了分支,请在 WorktreeRemove hook 中删除它。3448Claude Code 从不删除属于由 hook 创建的 worktree 的分支,因为它只知道您的 WorktreeCreate hook 返回的路径。如果您的 WorktreeCreate hook 创建了分支,请在 WorktreeRemove hook 中将其删除。

3423 3449 

3424Claude Code 会丢弃 WorktreeRemove hook 的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。3450Claude Code 会丢弃 WorktreeRemove hook 的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。

3425 3451 

3426对于后台会话删除,Claude Code 会在运行 hook 之前验证存储的 worktree 路径,并拒绝本身是符号链接或经过仓库根目录下符号链接的路径。在这条路径上,只有当您在 [agent view](/docs/zh-CN/agent-view#what-deleting-a-session-removes) 中确认删除时,hook 才会针对仍包含文件的 worktree 运行;对于这样的 worktree,[`claude rm`](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 会改为保留会话和 worktree。在 v2.1.216 之前,hook 会在不进行这些检查的情况下针对存储的路径运行。3452对于删除后台会话的情况,Claude Code 会在运行 hook 之前验证存储的 worktree 路径,并拒绝本身是符号链接或经过仓库根目录下符号链接的路径。在该路径上,只有当您在 [Agent 视图](/docs/zh-CN/agent-view#what-deleting-a-session-removes)中确认删除时,hook 才会针对仍包含文件的 worktree 运行;对于此类 worktree,[`claude rm`](/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 会改为保留会话和 worktree。在 v2.1.216 之前,hook 会在未经这些检查的情况下针对存储的路径运行。

3427 3453 

3428Claude Code 会将 WorktreeCreate 返回的路径作为 hook 输入中的 `worktree_path` 传递。此示例读取该路径并删除目录:3454Claude Code 会将 WorktreeCreate 返回的路径作为 hook 输入中的 `worktree_path` 传递。此示例读取该路径并删除目录:

3429 3455 


3448 WorktreeRemove 输入3474 WorktreeRemove 输入

3449</h4>3475</h4>

3450 3476 

3451除[通用输入字段](#common-input-fields)外,WorktreeRemove hook 还会接收 `worktree_path` 字段,即要删除的 worktree 的绝对路径。3477除了[通用输入字段](#common-input-fields)之外,WorktreeRemove hook 还会接收 `worktree_path` 字段,即正在删除的 worktree 的绝对路径。

3452 3478 

3453```json theme={null}3479```json theme={null}

3454{3480{


3460}3486}

3461```3487```

3462 3488 

3463WorktreeRemove hook 的退出码决定结果。当 hook 以非零值退出,且之后 `worktree_path` 处的目录仍然存在时,删除失败:3489WorktreeRemove hook 的退出码决定结果。当 hook 以非零退出且之后 `worktree_path` 处的目录仍然存在时,删除失败:

3464 3490 

3465* worktree 保留在磁盘上,hook 的命令和 stderr 会写入[调试日志](#debug-hooks)。3491* worktree 保留在磁盘上,hook 的命令和 stderr 会写入[调试日志](#debug-hooks)。

3466* 如果您正在删除后台会话,该会话也会保留。[agent view](/docs/zh-CN/agent-view#what-deleting-a-session-removes) 中的拒绝消息会报告 hook 的结束方式(例如 `exited 1`),引用其 stderr 的开头部分,并说明再次删除该会话是否仍会删除该目录。3492* 如果您正在删除后台会话,该会话也会保留。[Agent 视图](/docs/zh-CN/agent-view#what-deleting-a-session-removes)中的拒绝消息会报告 hook 的结束方式(例如 `exited 1`),引用其 stderr 的开头部分,并说明再次删除该会话是否仍会删除该目录。

3467* 如果当时 `claude remote-control` 正在清理会话的 worktree,运行它的终端会显示 `worktree removal failed, kept: <path>`。3493* 如果 `claude remote-control` 正在清理会话的 worktree,运行它的终端会显示 `worktree removal failed, kept: <path>`。

3468 3494 

3469<h3 id="precompact">3495<h3 id="precompact">

3470 PreCompact3496 PreCompact

3471</h3>3497</h3>

3472 3498 

3473在 Claude Code 即将执行压缩操作之前运行。3499在 Claude Code 即将运行压缩操作之前运行。

3474 3500 

3475匹配器值表示压缩是手动触发还是自动触发的:3501匹配器值表示压缩是手动触发还是自动触发:

3476 3502 

3477| 匹配器 | 触发时机 |3503| 匹配器 | 触发时机 |

3478| :- | :- |3504| :- | :- |

3479| `manual` | `/compact` |3505| `manual` | `/compact` |

3480| `auto` | 对话达到[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)时的自动压缩 |3506| `auto` | 对话达到[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)时的自动压缩,以及[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction) |

3481 3507 

3482以退出码 2 退出可阻止压缩。对于手动 `/compact`,stderr 消息会显示给用户。您也可以通过返回包含 `"decision": "block"` 的 JSON 来阻止。3508以代码 2 退出可阻止压缩。对于手动 `/compact`,stderr 消息会显示给用户。您也可以通过返回包含 `"decision": "block"` 的 JSON 来阻止。

3483 3509 

3484阻止自动压缩的效果取决于其触发时机。如果压缩是在达到上下文限制之前主动触发的,Claude Code 会跳过它,对话在未压缩的情况下继续。如果压缩是为了从 API 已返回的上下文限制错误中恢复而触发的,则底层错误会显示出来,当前请求失败。3510阻止自动压缩的效果取决于其触发时机。如果压缩是在达到上下文限制之前主动触发的,Claude Code 会跳过压缩,对话继续进行而不压缩。如果压缩是为了从 API 已返回的上下文限制错误中恢复而触发的,则底层错误会显现出来,当前请求失败。

3485 3511 

3486Claude Code 会丢弃 PreCompact hook 的 `systemMessage` 和 `continue` 字段。3512Claude Code 会丢弃 PreCompact hook 的 `systemMessage` 和 `continue` 字段。

3487 3513 


3489 PreCompact 输入3515 PreCompact 输入

3490</h4>3516</h4>

3491 3517 

3492除[通用输入字段](#common-input-fields)外,PreCompact hook 还会接收 `trigger` 和 `custom_instructions`。对于 `manual`,`custom_instructions` 包含用户传入 `/compact` 的内容,未传入任何内容时为 `null`。对于 `auto`,`custom_instructions` 为 `null`。3518除了[通用输入字段](#common-input-fields)之外,PreCompact hook 还会接收 `trigger` 和 `custom_instructions`。对于 `manual`,`custom_instructions` 包含用户传递给 `/compact` 的内容,如果用户未传递任何内容则为 `null`。对于 `auto`,`custom_instructions` 为 `null`。

3493 3519 

3494```json theme={null}3520```json theme={null}

3495{3521{


3506 PostCompact3532 PostCompact

3507</h3>3533</h3>

3508 3534 

3509在 Claude Code 完成压缩操作后运行。使用此事件对新的压缩状态作出响应,例如记录生成的摘要或更新外部状态。Claude Code 会丢弃 PostCompact hook 的 `systemMessage` 和 `continue` 字段。3535在 Claude Code 完成压缩操作后运行。使用此事件对压缩后的新状态作出反应,例如记录生成的摘要或更新外部状态。Claude Code 会丢弃 PostCompact hook 的 `systemMessage` 和 `continue` 字段。

3510 3536 

3511适用与 `PreCompact` 相同的匹配器值:3537匹配器值与 `PreCompact` 相同:

3512 3538 

3513| 匹配器 | 触发时机 |3539| 匹配器 | 触发时机 |

3514| :- | :- |3540| :- | :- |

3515| `manual` | `/compact` 之后 |3541| `manual` | `/compact` 之后 |

3516| `auto` | 对话达到[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)时的自动压缩之后 |3542| `auto` | 对话达到[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)时的自动压缩之后,以及[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction)之后 |

3517 3543 

3518<h4 id="postcompact-input">3544<h4 id="postcompact-input">

3519 PostCompact 输入3545 PostCompact 输入

3520</h4>3546</h4>

3521 3547 

3522除[通用输入字段](#common-input-fields)外,PostCompact hook 还会接收 `trigger` 和 `compact_summary`。`compact_summary` 字段包含压缩操作生成的对话摘要。3548除了[通用输入字段](#common-input-fields)之外,PostCompact hook 还会接收 `trigger` 和 `compact_summary`。`compact_summary` 字段包含压缩操作生成的对话摘要。

3523 3549 

3524```json theme={null}3550```json theme={null}

3525{3551{


3538 PreModelSwitch3564 PreModelSwitch

3539</h3>3565</h3>

3540 3566 

3541在 Claude Code 应用由您或客户端请求的模型切换之前运行。可用于阻止切换、要求确认,或在切换发生前显示切换的成本。3567在 Claude Code 应用您或客户端请求的模型切换之前运行。使用它可以阻止切换、要求确认,或在切换发生之前显示切换的成本。

3542 3568 

3543PreModelSwitch 需要 Claude Code v2.1.251 或更高版本。Claude Code 会针对以下请求运行它:3569PreModelSwitch 需要 Claude Code v2.1.251 或更高版本。Claude Code 会针对以下请求运行它:

3544 3570 

3545* `/model <name>` 和 `/model` 选择器3571* `/model <name>` 和 `/model` 选择器

3546* `Option+P` 或 `Alt+P` 模型选择器3572* `Option+P` 或 `Alt+P` 模型选择器

3547* `/config` 中的 Model 设置3573* `/config` 中的 Model 设置

3548* 启用[快速模式](/docs/zh-CN/fast-mode)且这会更改会话的模型时3574* 启用[快速模式](/docs/zh-CN/fast-mode)且这会更改会话模型时

3549* 来自 [Agent SDK](/docs/zh-CN/agent-sdk/typescript#query-object) 宿主或 [Remote Control](/docs/zh-CN/remote-control) 的 `set_model` 请求,或 `apply_flag_settings` 请求中的模型更改3575* 来自 [Agent SDK](/docs/zh-CN/agent-sdk/typescript#query-object) 宿主或 [Remote Control](/docs/zh-CN/remote-control) 的 `set_model` 请求,或 `apply_flag_settings` 请求中的模型更改

3550 3576 

3551对于 Claude Code 自行执行的切换,例如[自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)或恢复会话时还原模型,Claude Code 不会运行 PreModelSwitch hook。这些更改只会触发 [PostModelSwitch](#postmodelswitch)。3577对于 Claude Code 自行进行的切换,例如[自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)或恢复会话时还原模型,Claude Code 不会运行 PreModelSwitch hook。这些更改只会触发 [PostModelSwitch](#postmodelswitch)。

3552 3578 

3553Claude Code 会将匹配器与会话要切换到的模型的规范名称进行比较,并忽略任何 `[1m]` 后缀。别名(如 `opus`)、带日期的模型 ID 以及特定提供商的 ID(如 Amazon Bedrock 模型 ID)都会匹配它们所解析到的同一个规范名称,因此 `claude-opus-5` 涵盖 Opus 5 的所有写法。3579Claude Code 会将匹配器与会话将要切换到的模型的规范名称进行比较,忽略任何 `[1m]` 后缀。诸如 `opus` 之类的别名、带日期的模型 ID,以及提供商特定的 ID(例如 Amazon Bedrock 模型 ID)都会匹配它们解析到的同一个规范名称,因此 `claude-opus-5` 涵盖 Opus 5 的所有写法。

3554 3580 

3555当 Claude Code 无法确定目标的规范名称时(例如只有您的 [LLM 网关](/docs/zh-CN/llm-gateway)知道的自定义模型 ID),它会运行所有 PreModelSwitch hook,无论匹配器为何。因此,用于阻止的 hook 应检查其输入中的 `to_model`,而不是仅依赖匹配器。3581当 Claude Code 无法确定目标的规范名称时,例如只有您的 [LLM 网关](/docs/zh-CN/llm-gateway)知道的自定义模型 ID,它会运行所有 PreModelSwitch hook,而不管匹配器如何。因此,执行阻止操作的 hook 应检查其输入中的 `to_model`,而不是仅依赖匹配器。

3556 3582 

3557匹配器可以写成精确名称、以 `|` 分隔的列表(如 `claude-opus-4-6|claude-opus-5`),或正则表达式(如 `.*opus.*`)。此示例使用精确名称匹配器,同时检查 hook 输入中的 `to_model`,因此它通过以退出码 2 退出来拒绝切换到 Opus 4.6,并允许切换到任何其他目标:3583将匹配器写为精确名称、以 `|` 分隔的列表(例如 `claude-opus-4-6|claude-opus-5`),或正则表达式(例如 `.*opus.*`)。此示例使用精确名称匹配器,同时检查 hook 输入中的 `to_model`,因此它会通过以代码 2 退出来拒绝切换到 Opus 4.6,并允许切换到任何其他目标:

3558 3584 

3559<Tabs>3585<Tabs>

3560 <Tab title="macOS/Linux">3586 <Tab title="macOS/Linux">


3620 </Tab>3646 </Tab>

3621</Tabs>3647</Tabs>

3622 3648 

3623要确认 hook 是否生效,请在运行其他模型的会话中运行 `/model claude-opus-4-6`。Claude Code 会保留当前模型,并报告 PreModelSwitch hook 阻止了切换,以您的消息作为原因。3649要确认该 hook 是否正常工作,请在运行其他模型的会话中运行 `/model claude-opus-4-6`。Claude Code 会保留当前模型,并报告 PreModelSwitch hook 阻止了切换,以您的消息作为原因。

3624 3650 

3625<h4 id="premodelswitch-input">3651<h4 id="premodelswitch-input">

3626 PreModelSwitch 输入3652 PreModelSwitch 输入

3627</h4>3653</h4>

3628 3654 

3629除[通用输入字段](#common-input-fields)外,PreModelSwitch hook 还会接收下表中的字段。最后五个字段描述将对话重新发送到新模型的成本,以便 hook 可以在切换发生之前显示该数字。3655除了[通用输入字段](#common-input-fields)之外,PreModelSwitch hook 还会接收下表中的字段。最后五个字段描述将对话重新发送到新模型的成本,因此 hook 可以在切换发生之前显示该数值。

3630 3656 

3631| 字段 | 类型 | 描述 |3657| 字段 | 类型 | 描述 |

3632| :- | :- | :- |3658| :- | :- | :- |

3633| `from_model` | string | 切换前的模型 ID |3659| `from_model` | string | 切换前的模型 ID |

3634| `to_model` | string | 切换后的模型 ID。匹配器会与此模型的规范名称进行比较 |3660| `to_model` | string | 切换后的模型 ID。匹配器会与此模型的规范名称进行比较 |

3635| `requested_model` | string 或 `null` | 请求中指定的模型:别名(如 `opus`)、完整模型 ID,或在请求默认模型时为 `null` |3661| `requested_model` | string 或 `null` | 请求中指定的模型:诸如 `opus` 之类的别名、完整的模型 ID,或者当请求的是默认模型时为 `null` |

3636| `source` | string | 请求的来源:`"command"` 表示 `/model <name>`、`/config` 中的 Model 设置或启用快速模式;`"picker"` 表示模型选择器;`"sdk"` 表示来自 Agent SDK 宿主或 Remote Control 的 `set_model` 请求,或 `apply_flag_settings` 请求中的模型更改 |3662| `source` | string | 请求的来源:`"command"` 表示 `/model <name>`、`/config` 中的 Model 设置或启用快速模式;`"picker"` 表示模型选择器;`"sdk"` 表示来自 Agent SDK 宿主或 Remote Control 的 `set_model` 请求,或 `apply_flag_settings` 请求中的模型更改 |

3637| `context_tokens` | number | 下一个请求作为提示词重新发送的 token 数:主对话中最后一个响应的输入、缓存读取、缓存创建和输出 token 的总和。第一个响应之前为 `0` |3663| `context_tokens` | number | 下一个请求作为提示词重新发送的 token 数:主对话中最后一次响应的输入、缓存读取、缓存创建和输出 token 的总和。在第一次响应之前为 `0` |

3638| `prompt_cache_warm` | boolean | 当前模型的提示缓存是否可能仍处于热状态,即切换会使其失效 |3664| `prompt_cache_warm` | boolean | 当前模型的提示缓存是否可能仍处于预热状态,即切换会使其失效 |

3639| `cache_ttl` | string | Claude Code 为此会话请求的[提示缓存生存期](/docs/zh-CN/prompt-caching#cache-lifetime):`"5m"` 或 `"1h"` |3665| `cache_ttl` | string | Claude Code 为此会话请求的[提示缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime):`"5m"` 或 `"1h"` |

3640| `estimated_cache_write_usd` | number | 按 `cache_ttl` 费率在 `to_model` 上将 `context_tokens` 写入提示缓存的估计成本(美元),不包括下一个响应。服务器可能不需要重新缓存整个上下文,因此请将其视为估计值 |3666| `estimated_cache_write_usd` | number | 按 `cache_ttl` 费率在 `to_model` 上将 `context_tokens` 写入提示缓存的估算成本(美元),不包括下一次响应。服务器可能不需要重新缓存整个上下文,因此请将其视为估算值 |

3641| `pricing` | string | Claude Code 如何为 `estimated_cache_write_usd` 定价:`"configured"` 表示在您的组织已配置费率时按其自有费率计算,`"catalog"` 表示按标价计算,`"default"` 表示 `to_model` 没有已知价格、Claude Code 采用了默认费率 |3667| `pricing` | string | Claude Code 如何为 `estimated_cache_write_usd` 定价:`"configured"` 表示在您的组织已配置自有费率时按该费率计算,`"catalog"` 表示按标价计算,`"default"` 表示 `to_model` 没有已知价格,Claude Code 假定了默认费率 |

3642 3668 

3643此示例显示在运行 Sonnet 5 的会话中执行 `/model opus` 时的输入:3669此示例显示在运行 Sonnet 5 的会话中执行 `/model opus` 时的输入:

3644 3670 


3664 PreModelSwitch 决策控制3690 PreModelSwitch 决策控制

3665</h4>3691</h4>

3666 3692 

3667`PreModelSwitch` hook 可以取消切换、请用户确认,或让切换继续进行。退出码 2 或顶层 `decision: "block"` 会取消切换。3693`PreModelSwitch` hook 可以取消切换、要求用户确认,或允许其继续。退出码 2 或顶层的 `decision: "block"` 会取消切换。

3668 3694 

3669如需更精细的控制,请在 `hookSpecificOutput` 对象中返回 `permissionDecision` 和 `permissionDecisionReason`,与 [PreToolUse](#pretooluse-decision-control) 相同。`PreModelSwitch` 接受 `"allow"`、`"deny"` 和 `"ask"`,不接受 `"defer"`、`updatedInput` 或 `additionalContext`。下表描述了这两个字段:3695如需更精细的控制,请在 `hookSpecificOutput` 对象中返回 `permissionDecision` 和 `permissionDecisionReason`,与 [PreToolUse](#pretooluse-decision-control) 相同。`PreModelSwitch` 接受 `"allow"`、`"deny"` 和 `"ask"`。它不接受 `"defer"`、`updatedInput` 或 `additionalContext`。下表描述了这两个字段:

3670 3696 

3671| 字段 | 描述 |3697| 字段 | 描述 |

3672| :- | :- |3698| :- | :- |

3673| `permissionDecision` | `"allow"` 继续切换,并跳过[提示缓存处于热状态时 Claude Code 显示的确认](/docs/zh-CN/prompt-caching#switching-models)。`"deny"` 取消切换。`"ask"` 提示用户确认 |3699| `permissionDecision` | `"allow"` 继续切换,并跳过[提示缓存处于预热状态时 Claude Code 显示的确认](/docs/zh-CN/prompt-caching#switching-models)。`"deny"` 取消切换。`"ask"` 提示用户确认 |

3674| `permissionDecisionReason` | 对于 `"deny"`,作为切换被阻止的原因显示给用户,或作为 `set_model` 请求的错误返回。对于 `"ask"`,显示在确认提示中。对于 `"allow"` 则忽略 |3700| `permissionDecisionReason` | 对于 `"deny"`,作为切换被阻止的原因显示给用户,或作为 `set_model` 请求的错误返回。对于 `"ask"`,显示在确认提示中。对于 `"allow"` 会被忽略 |

3675 3701 

3676只有交互式会话中的 `/model` 才能显示 `"ask"` 提示。在其他所有使用入口上,包括使用 `-p` 标志的非交互模式、`/config` 和 `set_model` 请求,Claude Code 都会将 `"ask"` 视为拒绝。3702只有交互式会话中的 `/model` 可以显示 `"ask"` 提示。在其他所有使用入口上,包括使用 `-p` 标志的非交互模式、`/config` 和 `set_model` 请求,Claude Code 都会将 `"ask"` 视为拒绝。

3677 3703 

3678此示例请用户确认,并引用 `context_tokens` 中的 token 数:3704此示例要求用户确认,并引用 `context_tokens` 中的 token 数:

3679 3705 

3680```json theme={null}3706```json theme={null}

3681{3707{


3689 3715 

3690当多个 PreModelSwitch hook 返回不同的决策时,优先级为 `deny` > `ask` > `allow`。3716当多个 PreModelSwitch hook 返回不同的决策时,优先级为 `deny` > `ask` > `allow`。

3691 3717 

3692无论决策如何,Claude Code 都会向用户显示您的 hook 返回的任何 `systemMessage`,因此用于报告成本的 hook 可以返回 `{"systemMessage": "..."}` 并以 0 退出。3718无论决策如何,Claude Code 都会向用户显示您的 hook 返回的任何 `systemMessage`,因此报告成本的 hook 可以返回 `{"systemMessage": "..."}` 并以 0 退出。

3693 3719 

3694在超时之前未响应的 PreModelSwitch hook 会阻止切换。关于超时对其他事件的影响,请参阅[超时](#timeouts)。此事件的默认超时时间为 30 秒。`PreModelSwitch` 仅运行 `command`、`http` 和 `mcp_tool` hook,因此 `prompt` 和 `agent` 的默认值不适用。3720在超时之前未响应的 PreModelSwitch hook 会阻止切换。有关超时在其他事件上的作用,请参阅[超时](#timeouts)。此事件的默认超时时间为 30 秒。`PreModelSwitch` 仅运行 `command`、`http` 和 `mcp_tool` hook,因此 `prompt` 和 `agent` 的默认值不适用。

3695 3721 

3696以 0 或 2 以外的代码退出且未打印 JSON 决策的 hook 属于非阻塞错误,如[其他退出码](#other-exit-codes)中所述。3722以 0 或 2 以外的代码退出且未打印 JSON 决策的 hook 属于非阻塞错误,如[其他退出码](#other-exit-codes)中所述。

3697 3723 


3699 PostModelSwitch3725 PostModelSwitch

3700</h3>3726</h3>

3701 3727 

3702在会话的模型更改后运行。可用于在不编辑每个 CLAUDE.md 的情况下为 Claude 提供特定于模型的指导,例如适用于某些模型的全组织范围指令。3728在会话的模型更改后运行。使用它可以为 Claude 提供特定于模型的指导,而无需编辑每个 CLAUDE.md,例如适用于某些模型的组织范围指令。

3703 3729 

3704PostModelSwitch 需要 Claude Code v2.1.251 或更高版本。它无法阻止,因为模型已经更改。Claude Code 会在以下任一更改之后运行 PostModelSwitch hook:3730PostModelSwitch 需要 Claude Code v2.1.251 或更高版本。它无法阻止,因为模型已经更改。在以下任何更改之后,Claude Code 都会运行 PostModelSwitch hook:

3705 3731 

3706* 您或客户端请求的切换3732* 您或客户端请求的切换

3707* [自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback),这会更改会话的模型3733* [自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback),它会更改会话的模型

3708* 诸如 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 之类的设置进入或离开计划模式3734* 诸如 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 之类的设置进入或离开计划模式

3709* 恢复会话时 Claude Code 还原模型3735* 恢复会话时 Claude Code 还原模型

3710 3736 

3711当[备用模型链](/docs/zh-CN/model-config#fallback-model-chains)中的某个模型服务于某一轮次时,Claude Code 不会运行 PostModelSwitch hook,因为该替换仅持续一轮,且不会更改会话的模型。3737当[备用模型链](/docs/zh-CN/model-config#fallback-model-chains)中的某个模型处理某一轮次时,Claude Code 不会运行 PostModelSwitch hook,因为该替换只持续一轮,且不会改变会话的模型。

3712 3738 

3713匹配器遵循与 [PreModelSwitch](#premodelswitch) 相同的规则:Claude Code 会将其与会话切换到的模型的规范名称进行比较。3739匹配器遵循与 [PreModelSwitch](#premodelswitch) 相同的规则:Claude Code 会将其与会话切换到的模型的规范名称进行比较。

3714 3740 

3715此示例在会话的模型更改为任何 Opus 模型时添加指导:3741此示例会在会话的模型更改为任何 Opus 模型时添加指导:

3716 3742 

3717```json theme={null}3743```json theme={null}

3718{3744{


3732}3758}

3733```3759```

3734 3760 

3735要确认 hook 是否生效,请在运行其他模型的会话中切换到 Opus 模型,例如在 Sonnet 会话中运行 `/model opus`,然后询问 Claude 它对当前模型有什么指导。3761要确认该 hook 是否正常工作,请在运行其他模型的会话中切换到 Opus 模型,例如在 Sonnet 会话中运行 `/model opus`,然后询问 Claude 它对当前模型有什么指导。

3736 3762 

3737<h4 id="postmodelswitch-input">3763<h4 id="postmodelswitch-input">

3738 PostModelSwitch 输入3764 PostModelSwitch 输入

3739</h4>3765</h4>

3740 3766 

3741PostModelSwitch hook 接收与 [PreModelSwitch](#premodelswitch-input) 相同的字段,其中 `hook_event_name` 设置为 `"PostModelSwitch"`,并且 `source` 多两个值:`"auto"` 表示自动回退或 Claude Code 自行做出的其他更改,`"resume"` 表示恢复会话时还原的模型。3767PostModelSwitch hook 接收与 [PreModelSwitch](#premodelswitch-input) 相同的字段,其中 `hook_event_name` 设置为 `"PostModelSwitch"`,并且多了两个 `source` 值:`"auto"` 表示自动回退或 Claude Code 自行进行的其他更改,`"resume"` 表示恢复会话时还原的模型。

3742 3768 

3743当 `source` 为 `"auto"` 时,`requested_model` 为 `null`。当 `source` 为 `"resume"` 时,它是 Claude Code 还原的已保存模型设置。3769当 `source` 为 `"auto"` 时,`requested_model` 为 `null`。当 `source` 为 `"resume"` 时,它是 Claude Code 还原的已保存模型设置。

3744 3770 


3746 PostModelSwitch 决策控制3772 PostModelSwitch 决策控制

3747</h4>3773</h4>

3748 3774 

3749Claude Code 会在退出码为 0 时获取 hook 的[纯文本 stdout](#exit-code-0),或从 JSON 输出中获取 `additionalContext`,并在切换后的下一个请求中将其传递给 Claude。除所有 hook 均可使用的 [JSON 输出字段](#json-output)外,您还可以返回:3775Claude Code 会在以 0 退出时获取您的 hook 的[纯文本 stdout](#exit-code-0),或获取 JSON 输出中的 `additionalContext`,并在切换后的下一个请求中将其传递给 Claude。除了所有 hook 都可用的 [JSON 输出字段](#json-output)之外,您还可以返回:

3750 3776 

3751| 字段 | 描述 |3777| 字段 | 描述 |

3752| :- | :- |3778| :- | :- |

3753| `additionalContext` | 随下一个请求添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |3779| `additionalContext` | 随下一个请求添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

3754 3780 

3755如果在您发送下一个提示词后五秒内 hook 仍未完成,Claude Code 会在不附带该输出的情况下发送该请求,并将输出附加到后续请求中。如果在下一个请求之前模型更改了多次,Claude Code 只会传递针对最后一次切换目标模型的输出。3781如果在您发送下一个提示词后五秒内 hook 仍未完成,Claude Code 会在不包含该输出的情况下发送该请求,并改为将其附加到后续请求中。如果模型在下一个请求之前更改了多次,Claude Code 只会传递最后一次切换的目标模型的输出。

3756 3782 

3757<h3 id="sessionend">3783<h3 id="sessionend">

3758 SessionEnd3784 SessionEnd

3759</h3>3785</h3>

3760 3786 

3761在 Claude Code 会话结束时运行。适用于清理任务、记录会话3787在 Claude Code 会话结束时运行。适用于清理任务、记录会话统计信息或保存会话状态。支持使用匹配器按退出原因进行筛选。

3762统计信息或保存会话状态。支持使用匹配器按退出原因进行筛选。

3763 3788 

3764hook 输入中的 `reason` 字段表示会话结束的原因:3789hook 输入中的 `reason` 字段表示会话结束的原因:

3765 3790 


3768| `clear` | 使用 `/clear` 命令清除了会话 |3793| `clear` | 使用 `/clear` 命令清除了会话 |

3769| `resume` | 通过交互式 `/resume` 切换了会话 |3794| `resume` | 通过交互式 `/resume` 切换了会话 |

3770| `logout` | 用户已注销 |3795| `logout` | 用户已注销 |

3771| `prompt_input_exit` | 用户在提示词输入可见时退出 |3796| `prompt_input_exit` | 用户在提示词输入框可见时退出 |

3772| `other` | 其他退出原因 |3797| `other` | 其他退出原因 |

3773| `bypass_permissions_disabled` | 已在 v2.1.234 中移除;Claude Code 不会发送此值。请将其从您的 `SessionEnd` 匹配器中删除 |3798| `bypass_permissions_disabled` | 已在 v2.1.234 中移除;Claude Code 不会发送它。请将其从您的 `SessionEnd` 匹配器中删除 |

3774 3799 

3775<h4 id="sessionend-input">3800<h4 id="sessionend-input">

3776 SessionEnd 输入3801 SessionEnd 输入

3777</h4>3802</h4>

3778 3803 

3779除[通用输入字段](#common-input-fields)外,SessionEnd hook 还会接收一个 `reason` 字段,表示会话结束的原因。有关所有值,请参阅上方的[原因表](#sessionend)。3804除了[通用输入字段](#common-input-fields)之外,SessionEnd hook 还会接收一个 `reason` 字段,表示会话结束的原因。有关所有值,请参阅上面的[原因表](#sessionend)。

3780 3805 

3781```json theme={null}3806```json theme={null}

3782{3807{


3790 3815 

3791SessionEnd hook 没有决策控制。它们无法阻止会话终止,但可以执行清理任务。Claude Code 会丢弃它们的 [JSON 输出字段](#json-output),例如 `systemMessage`。3816SessionEnd hook 没有决策控制。它们无法阻止会话终止,但可以执行清理任务。Claude Code 会丢弃它们的 [JSON 输出字段](#json-output),例如 `systemMessage`。

3792 3817 

3793SessionEnd hook 的默认超时时间为 1.5 秒。该超时适用于您退出、运行 `/clear` 或通过交互式 `/resume` 切换会话时。您可以通过两种方式为 hook 提供更多时间:3818SessionEnd hook 的默认超时时间为 1.5 秒。它适用于您退出、运行 `/clear` 或通过交互式 `/resume` 切换会话时。您可以通过两种方式为 hook 提供更多时间:

3794 3819 

3795* **每个 hook 的 `timeout`**:在该 hook 的配置中设置 `timeout`。总体时间预算会自动提高,以匹配您设置文件中最高的单个 hook `timeout`,最长 60 秒。如果以这种方式提高预算,没有自己 `timeout` 的 hook 仍保持默认值。在插件提供的 hook 上设置的超时时间不会提高预算。3820* **单个 hook 的 `timeout`**:在该 hook 的配置中设置 `timeout`。总体时间预算会自动提高,以匹配设置文件中最高的单个 hook `timeout`,最多 60 秒。如果您以这种方式提高预算,没有设置自己 `timeout` 的 hook 仍保持默认值。在插件提供的 hook 上设置的超时时间不会提高预算。

3796* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**:以毫秒为单位设置此环境变量,以显式覆盖预算。您设置的值也会成为每个没有自己 `timeout` 的 hook 的超时时间。3821* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**:以毫秒为单位设置此环境变量,以显式覆盖预算。您设置的值也会成为每个没有设置自己 `timeout` 的 hook 的超时时间。

3797 3822 

3798此示例将预算设置为 5 秒:3823此示例将预算设置为 5 秒:

3799 3824 


3801CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude3826CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude

3802```3827```

3803 3828 

3804在 v2.1.268 之前,`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` 只会提高总体预算,没有自己 `timeout` 的 hook 仍会在 1.5 秒后被取消。3829在 v2.1.268 之前,`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` 只会提高总体预算,没有设置自己 `timeout` 的 hook 仍会在 1.5 秒后被取消。

3805 3830 

3806<h3 id="elicitation">3831<h3 id="elicitation">

3807 Elicitation3832 Elicitation

3808</h3>3833</h3>

3809 3834 

3810在 MCP 服务器于任务中途请求用户输入时运行。默认情况下,Claude Code 会显示一个交互式对话框供用户响应。hook 可以拦截此请求并以编程方式响应,完全跳过对话框。3835当 MCP 服务器在任务中途请求用户输入时运行。默认情况下,Claude Code 会显示一个交互式对话框供用户响应。hook 可以拦截此请求并以编程方式响应,完全跳过对话框。

3811 3836 

3812有关包含设置条目和脚本的完整 hook,请参阅[通过脚本回答表单请求](#answer-a-form-request-from-a-script)。3837有关包含设置条目和脚本的完整 hook,请参阅[通过脚本回答表单请求](#answer-a-form-request-from-a-script)。

3813 3838 


3817 Elicitation 输入3842 Elicitation 输入

3818</h4>3843</h4>

3819 3844 

3820除[通用输入字段](#common-input-fields)外,Elicitation hook 还会接收 `mcp_server_name`、`message`,以及可选的 `mode`、`url`、`elicitation_id` 和 `requested_schema` 字段。3845除了[通用输入字段](#common-input-fields)之外,Elicitation hook 还会接收 `mcp_server_name`、`message`,以及可选的 `mode`、`url`、`elicitation_id` 和 `requested_schema` 字段。

3821 3846 

3822对于表单模式的 elicitation(最常见的情况):3847对于表单模式的 elicitation(最常见的情况):

3823 3848 


3858 Elicitation 输出3883 Elicitation 输出

3859</h4>3884</h4>

3860 3885 

3861Elicitation hook 可以代替用户回答请求、拒绝或取消请求,或将其交给对话框处理。要回答、拒绝或取消,请以 0 退出并打印一个带有 `action` 的 `hookSpecificOutput` 对象。服务器会收到您的回答,并且不会出现对话框。下表的每一行显示某一结果应返回的内容以及 MCP 服务器收到的内容:3886Elicitation hook 可以代替用户回答请求、拒绝或取消请求,或将其留给对话框处理。要回答、拒绝或取消,请以 0 退出并打印一个带有 `action` 的 `hookSpecificOutput` 对象。服务器会收到您的回答,且不会出现对话框。下表的每一行显示了一种结果应返回的内容以及 MCP 服务器收到的内容:

3862 3887 

3863| 目的 | 返回 | 服务器收到 |3888| 目的 | 返回 | 服务器收到 |

3864| :- | :- | :- |3889| :- | :- | :- |

3865| 代替用户回答 | `"action": "accept"`,并在 `content` 中提供表单字段值 | `accept` 以及您的 `content` |3890| 代替用户回答 | `"action": "accept"`,并在 `content` 中提供表单字段值 | `accept` 以及您的 `content` |

3866| 拒绝请求 | `"action": "decline"` | `decline` |3891| 拒绝请求 | `"action": "decline"` | `decline` |

3867| 取消请求 | `"action": "cancel"` | `cancel` |3892| 取消请求 | `"action": "cancel"` | `cancel` |

3868| 将请求交给用户 | 无输出,退出码为 0 | 用户在[对话框](/docs/zh-CN/mcp#respond-to-mcp-elicitation-requests)中的回答 |3893| 将请求留给用户 | 无输出,退出码为 0 | 用户在[对话框](/docs/zh-CN/mcp#respond-to-mcp-elicitation-requests)中的回答 |

3869 3894 

3870此输出回答了 [Elicitation 输入](#elicitation-input)中所示的表单模式请求。`content` 中的键是该请求的 `requested_schema` 中的属性名称:3895此输出回答了 [Elicitation 输入](#elicitation-input)中所示的表单模式请求。`content` 中的键是该请求 `requested_schema` 中的属性名称:

3871 3896 

3872```json theme={null}3897```json theme={null}

3873{3898{


3894 3919 

3895在对话框中,选择 **Decline** 会发送 `decline`,按 `Esc` 会发送 `cancel`,因此请返回您希望服务器看到的那个值。3920在对话框中,选择 **Decline** 会发送 `decline`,按 `Esc` 会发送 `cancel`,因此请返回您希望服务器看到的那个值。

3896 3921 

3897对于 URL 模式请求,返回 `accept` 的 hook 会跳过对话框,因此该 URL 永远不会打开。3922对于 URL 模式的请求,返回 `accept` 的 hook 会跳过对话框,因此该 URL 永远不会打开。

3898 3923 

3899无论您返回哪个 `action`,Claude Code 都会丢弃 Elicitation hook JSON 输出中的 `reason`、`systemMessage` 和 `continue`。3924无论您返回哪个 `action`,Claude Code 都会丢弃 Elicitation hook JSON 输出中的 `reason`、`systemMessage` 和 `continue`。

3900 3925 


3904 3929 

3905您的 hook 还可以通过以下方式拒绝。服务器收到的 `decline` 与 `"action": "decline"` 相同:3930您的 hook 还可以通过以下方式拒绝。服务器收到的 `decline` 与 `"action": "decline"` 相同:

3906 3931 

3907* **以退出码 2 退出**:Claude Code 会忽略同一 hook 打印的 `hookSpecificOutput`3932* **以代码 2 退出**:Claude Code 会忽略同一 hook 打印的 `hookSpecificOutput`

3908* **打印顶层 `"decision": "block"`**:该阻止会覆盖同一输出中的 `action`3933* **打印顶层的 `"decision": "block"`**:该阻止会覆盖同一输出中的 `action`

3909 3934 

3910当多个 hook 匹配同一请求时,其中一个 hook 的拒绝会覆盖另一个 hook 的 `accept` 或 `cancel`。3935当多个 hook 匹配同一请求时,其中一个 hook 的拒绝会覆盖另一个 hook 的 `accept` 或 `cancel`。

3911 3936 

3912此脚本拒绝 URL 模式请求,并将表单请求交给对话框处理:3937此脚本会拒绝 URL 模式的请求,并将表单请求留给对话框处理:

3913 3938 

3914```bash theme={null}3939```bash theme={null}

3915#!/bin/bash3940#!/bin/bash


3920 3945 

3921用户和服务器都看不到您的 hook 拒绝的原因,因为 Claude Code 不会显示您的 stderr 或 `reason`。3946用户和服务器都看不到您的 hook 拒绝的原因,因为 Claude Code 不会显示您的 stderr 或 `reason`。

3922 3947 

3923从 v2.1.105 起直到 v2.1.284 中的修复之前,Claude Code 会忽略来自 `Elicitation` 和 `ElicitationResult` hook 的顶层 `decision`。3948从 v2.1.105 到 v2.1.284 中修复之前,Claude Code 会忽略 `Elicitation` 和 `ElicitationResult` hook 的顶层 `decision`。

3924 3949 

3925<h4 id="answer-a-form-request-from-a-script">3950<h4 id="answer-a-form-request-from-a-script">

3926 通过脚本回答表单请求3951 通过脚本回答表单请求

3927</h4>3952</h4>

3928 3953 

3929此示例代替用户回答一个反复出现的问题。名为 `issue-tracker` 的 MCP 服务器在表单中请求项目键,hook 会填入 `DOCS`。当 `project_key` 是表单的唯一字段时,脚本会接受。对于任何其他请求,它不打印任何内容,因此会显示对话框。3954此示例代替用户回答一个反复出现的问题。名为 `issue-tracker` 的 MCP 服务器在表单中询问项目键,hook 会填入 `DOCS`。当 `project_key` 是表单的唯一字段时,脚本会接受。对于其他任何请求,它不打印任何内容,因此会出现对话框。

3930 3955 

3931<Tabs>3956<Tabs>

3932 <Tab title="macOS/Linux">3957 <Tab title="macOS/Linux">

3933 在您的设置文件中为该事件注册一个命令 hook,并将服务器名称作为匹配器:3958 在设置文件中为该事件注册一个命令 hook,以服务器名称作为匹配器:

3934 3959 

3935 ```json theme={null}3960 ```json theme={null}

3936 {3961 {


3965 </Tab>3990 </Tab>

3966 3991 

3967 <Tab title="Windows (PowerShell)">3992 <Tab title="Windows (PowerShell)">

3968 注册一个通过 PowerShell 运行脚本的命令 hook,并将服务器名称作为匹配器:3993 注册一个通过 PowerShell 运行脚本的命令 hook,以服务器名称作为匹配器:

3969 3994 

3970 ```json theme={null}3995 ```json theme={null}

3971 {3996 {


4011 </Tab>4036 </Tab>

4012</Tabs>4037</Tabs>

4013 4038 

4014要确认 hook 是否生效,请使用 `claude --debug` 启动 Claude Code,并给 Claude 一个会让服务器请求项目键的任务。不会出现对话框,并且[调试日志](#debug-hooks)中会有一行以 `Elicitation resolved by hook: {"action":"accept","content":{"project_key":"DOCS"}}` 结尾。4039要确认该 hook 是否正常工作,请使用 `claude --debug` 启动 Claude Code,并给 Claude 一个会让服务器询问项目键的任务。不会出现对话框,并且[调试日志](#debug-hooks)中会有一行以 `Elicitation resolved by hook: {"action":"accept","content":{"project_key":"DOCS"}}` 结尾。

4015 4040 

4016<h3 id="elicitationresult">4041<h3 id="elicitationresult">

4017 ElicitationResult4042 ElicitationResult

4018</h3>4043</h3>

4019 4044 

4020在用户响应 MCP elicitation 后运行。hook 可以在响应发回 MCP 服务器之前观察、修改或阻止该响应。4045在用户响应 MCP elicitation 之后运行。hook 可以在响应发送回 MCP 服务器之前观察、修改或阻止该响应。

4021 4046 

4022当 [Elicitation](#elicitation) hook 回答了请求时,Claude Code 会将该回答发送给服务器,而不运行 ElicitationResult hook。4047当 [Elicitation](#elicitation) hook 回答了请求时,Claude Code 会将该回答发送给服务器,而不运行 ElicitationResult hook。

4023 4048 


4027 ElicitationResult 输入4052 ElicitationResult 输入

4028</h4>4053</h4>

4029 4054 

4030除[通用输入字段](#common-input-fields)外,ElicitationResult hook 还会接收 `mcp_server_name`、`action`,以及可选的 `mode`、`elicitation_id` 和 `content` 字段。4055除了[通用输入字段](#common-input-fields)之外,ElicitationResult hook 还会接收 `mcp_server_name`、`action`,以及可选的 `mode`、`elicitation_id` 和 `content` 字段。

4031 4056 

4032```json theme={null}4057```json theme={null}

4033{4058{


4046 ElicitationResult 输出4071 ElicitationResult 输出

4047</h4>4072</h4>

4048 4073 

4049ElicitationResult hook 可以让用户的响应通过、更改其值或阻止它。要更改或阻止响应,请以 0 退出并打印一个带有 `action` 的 `hookSpecificOutput` 对象。下表的每一行显示某一结果应返回的内容以及 MCP 服务器收到的内容:4074ElicitationResult hook 可以让用户的响应通过、更改其值或阻止它。要更改或阻止响应,请以 0 退出并打印一个带有 `action` 的 `hookSpecificOutput` 对象。下表的每一行显示了一种结果应返回的内容以及 MCP 服务器收到的内容:

4050 4075 

4051| 目的 | 返回 | 服务器收到 |4076| 目的 | 返回 | 服务器收到 |

4052| :- | :- | :- |4077| :- | :- | :- |

4053| 让响应通过 | 无输出,退出码为 0 | 用户的响应,未经更改 |4078| 让响应通过 | 无输出,退出码为 0 | 用户的响应,未更改 |

4054| 更改提交的值 | `"action": "accept"`,并在 `content` 中提供新值 | `accept` 以及您的 `content`,替代用户的值 |4079| 更改提交的值 | `"action": "accept"`,并在 `content` 中提供新值 | `accept` 以及您的 `content`,取代用户的值 |

4055| 阻止响应 | `"action": "decline"` | `decline`,不含用户的值 |4080| 阻止响应 | `"action": "decline"` | `decline`,不包含用户的值 |

4056| 取消请求 | `"action": "cancel"` | `cancel`,以及用户提交的值。要隐去这些值,请返回 `"decline"` |4081| 取消请求 | `"action": "cancel"` | `cancel`,以及用户提交的值。要隐去这些值,请返回 `"decline"` |

4057 4082 

4058此输出更改了 [ElicitationResult 输入](#elicitationresult-input)中所示的响应,因此在用户提交 `alice` 的位置,服务器收到的是 `alice@example.com`:4083此输出更改了 [ElicitationResult 输入](#elicitationresult-input)中所示的响应,因此在用户提交 `alice` 的地方,服务器收到的是 `alice@example.com`:

4059 4084 

4060```json theme={null}4085```json theme={null}

4061{4086{


4071 4096 

4072您的 `content` 会替换用户的整个 `content` 对象,因此请包含您未更改的字段。请同时返回 `action`,因为 Claude Code 会忽略没有 `action` 的 `hookSpecificOutput`。4097您的 `content` 会替换用户的整个 `content` 对象,因此请包含您未更改的字段。请同时返回 `action`,因为 Claude Code 会忽略没有 `action` 的 `hookSpecificOutput`。

4073 4098 

4074当用户拒绝或取消时,ElicitationResult hook 也会运行,并且您的 `action` 会替换用户的。在返回 `accept` 之前,请检查输入中的 `action` 是否为 `accept`,否则您的 hook 会将被拒绝的请求变成被接受的请求。此脚本在用户接受时进行相同的更改,保留其他字段,否则不输出任何内容:4099当用户拒绝或取消时,ElicitationResult hook 也会运行,并且您的 `action` 会替换用户的 `action`。在返回 `accept` 之前,请检查输入的 `action` 是否为 `accept`,否则您的 hook 会将被拒绝的请求变成被接受的请求。此脚本在用户接受时进行相同的更改,保留其他字段,其他情况下不打印任何内容:

4075 4100 

4076```bash theme={null}4101```bash theme={null}

4077#!/bin/bash4102#!/bin/bash


4093}4118}

4094```4119```

4095 4120 

4096退出码 2 和顶层 `"decision": "block"` 也会阻止响应。[拒绝 elicitation 的其他方式](#other-ways-to-decline-an-elicitation)介绍了当 hook 组合使用这些方式时哪一种生效、用户会看到什么,以及哪些版本会忽略 `decision`。4121退出码 2 和顶层的 `"decision": "block"` 也会阻止响应。[拒绝 elicitation 的其他方式](#other-ways-to-decline-an-elicitation)介绍了当 hook 组合使用这些方式时哪一种生效、用户会看到什么,以及哪些版本会忽略 `decision`。

4097 4122 

4098无论您返回哪个 `action`,Claude Code 都会丢弃 ElicitationResult hook JSON 输出中的 `reason`、`systemMessage` 和 `continue`。4123无论您返回哪个 `action`,Claude Code 都会丢弃 ElicitationResult hook JSON 输出中的 `reason`、`systemMessage` 和 `continue`。

4099 4124 


4350* **单独输出到 stdout**:当响应是 stdout 上唯一的文本时,它可以跨越多行,例如经过格式化美化的 `jq` 输出。跨越多行需要 Claude Code v2.1.295 或更高版本。4375* **单独输出到 stdout**:当响应是 stdout 上唯一的文本时,它可以跨越多行,例如经过格式化美化的 `jq` 输出。跨越多行需要 Claude Code v2.1.295 或更高版本。

4351* **单独输出在一行上**:当响应可以单独放在一行中时(例如使用 `jq -c`),异步 hook 可以向 stdout 输出其他文本。4376* **单独输出在一行上**:当响应可以单独放在一行中时(例如使用 `jq -c`),异步 hook 可以向 stdout 输出其他文本。

4352 4377 

4353Claude Code 根据与同步 hooks 相同的[输出架构](#json-output)验证 JSON 响应,并删除任何值类型错误的字段,例如不是字符串的 `systemMessage`,而不是传递它。使用 `--debug` 运行以查看命名每个删除字段的警告。在 v2.1.202 之前,来自异步 hook 的格式错误的 JSON 输出可能会导致会话崩溃,并且每次恢复会话时崩溃都会重复发生。4378Claude Code 根据与同步 hook 相同的[输出 schema](#json-output) 验证 JSON 响应,并删除任何值类型错误的字段,例如不是字符串的 `systemMessage`,而不是传递它。使用 `--debug` 运行以查看命名每个删除字段的警告。

4354 4379 

4355异步 hook 完成通知默认被抑制。要查看它们,请使用 `Ctrl+O` 启用详细模式或使用 `--verbose` 启动 Claude Code。4380异步 hook 完成通知默认被抑制。要查看它们,请使用 `Ctrl+O` 启用详细模式或使用 `--verbose` 启动 Claude Code。

4356 4381 

Details

491 491 

492要在整个组织范围内关闭提示建议,请在[托管设置](/docs/zh-CN/managed-settings)中将 `promptSuggestionEnabled` 设置为 `false`。还要在托管的 [`env`](/docs/zh-CN/settings-reference#env) 键下将 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 设置为 `false`,以便用户无法使用自己的环境变量重新启用它们。492要在整个组织范围内关闭提示建议,请在[托管设置](/docs/zh-CN/managed-settings)中将 `promptSuggestionEnabled` 设置为 `false`。还要在托管的 [`env`](/docs/zh-CN/settings-reference#env) 键下将 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 设置为 `false`,以便用户无法使用自己的环境变量重新启用它们。

493 493 

494<h2 id="you-should-know-suggestions">

495 You should know 建议

496</h2>

497 

498"You should know" 会寻找一件您应该知道但可能遗漏了的事情,例如 Claude 做出了某项权衡却没有明确指出,或者某个结果可能有误。找到后,它会在提示词输入框上方显示一条简短的提示:

499 

500```text theme={null}

501✦ Heads up · There was a change to how folder sharing starts in June, which may have bumped usage metrics artificially.

502 1: Learn more 2: Knew this already 0: Dismiss

503```

504 

505它是 Claude Code 的[内置 mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code) 之一,即内置于 Claude Code 中、默认关闭的插件。需要 Claude Code v2.1.287 或更高版本。

506 

507启用后,当 Claude 处理较长的任务时,一个辅助 Agent 会不时重新阅读对话。辅助 Agent 是发送给同一模型的独立请求,且没有任何工具,因此它无法读取文件、运行命令或改变 Claude 的行为。

508 

509如果您的组织可以使用该 mod,那么当您使用 claude.ai 账户或 Console API 密钥直接连接 Claude API 时,`/plugin` 会列出它。当您通过 [LLM 网关](/docs/zh-CN/llm-gateway)或 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)连接,或者从 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper) 获取密钥时,则不会列出。即使是直接连接,以下会话也不会列出它:

510 

511* [不获取该 mod 所依赖的功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话,例如设置了 `DISABLE_TELEMETRY` 的会话

512* 功能标志尚未送达的[安装或升级后的首个会话](/docs/zh-CN/env-vars#first-session-after-an-install-or-upgrade)

513 

514要启用它,请在 Claude Code 提示符处运行:

515 

516```text theme={null}

517/plugin enable cc-plugin-you-should-know@builtin

518```

519 

520在 `/plugin` 未列出该 mod 的情况下,启用命令会返回 `Plugin "cc-plugin-you-should-know@builtin" is not installed in this project`。

521 

522<h3 id="cost-of-checks">

523 检查的成本

524</h3>

525 

526该 mod 启用期间,检查是发送给当前会话所用同一模型的后台请求,会计入您套餐的用量限制或您的 API 费用。每次检查都会发送 Claude 上下文中已有的内容,即截至目前的对话及其工具结果,随后是该 mod 自身的指令以及您最近提示的文本。对话部分会按照与 Claude 自身下一个请求相同的条件从会话的[提示缓存](/docs/zh-CN/prompt-caching)中读取。指令部分(长达数千个 token)以及辅助 Agent 的回复在每次检查时都会全额计费。

527 

528要观察检查的发生过程,请在启动 Claude Code 之前在 shell 中设置 [`CLAUDE_CODE_YOU_SHOULD_KNOW_DEBUG=1`](/docs/zh-CN/env-vars)。

529 

530<h3 id="answer-a-note">

531 响应提示

532</h3>

533 

534在空的提示词输入框中单独输入选项对应的数字。提示提供以下选项:

535 

536* **Learn more**:在提示下方打开一段简短说明,该说明有自己的选项:

537 * **Understood**:关闭说明并将该主题标记为已知

538 * **Chat in main session**:将提示引用到您的提示词输入框中,以便您添加问题并发送给 Claude

539 * **Dismiss**:关闭说明,但不将该主题标记为已知

540* **Knew this already**:关闭提示并将该主题标记为已知。

541* **Dismiss**:关闭提示。

542 

543除非您通过 **Chat in main session** 发送提示,否则主 Agent 看不到它。

544 

545Claude Code 会将您最近的提示以及您标记为已知的主题保存在 `~/.claude/plugins/store/` 下一个名称以 `cc-plugin-you-should-know` 开头的文件中。在本会话及之后的会话中,每次检查都会将它们列给辅助 Agent,作为不应重复的内容。当该文件超过 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 没有被任何会话读取或写入时,Claude Code 会将其删除。要更早清除它们,请在没有会话运行时删除该文件。

546 

547<h3 id="turn-off-you-should-know">

548 关闭 You should know

549</h3>

550 

551要关闭 You should know,可以使用以下任一方式:

552 

553* 在 Claude Code 提示符处运行 `/plugin disable cc-plugin-you-should-know@builtin`,或在 `/plugin` 的 **Installed** 标签页中将其关闭

554* 在未先打开 **Learn more** 的情况下对提示选择 **Dismiss** 后,在 `Dismissed.` 行上选择 **Turn off suggestions**,该行会在 20 秒后消失

555 

494<h2 id="emoji-shortcodes">556<h2 id="emoji-shortcodes">

495 表情符号速记代码557 表情符号速记代码

496</h2>558</h2>

Details

257 257 

258在 `sparsePaths` 中列出目录,而不是单个文件。根级文件如 `package.json`、`tsconfig.base.json` 和锁文件始终与你列出的目录一起检出。根级目录不是,所以如果你想要存储库根目录的 `.claude/settings.json` 或 `.claude/rules/` 在 worktree 内可用,请在列表中包含 `.claude`。对于项目 skills、代理和命令,请参阅[worktrees 与主检出共享的内容](/docs/zh-CN/worktrees#what-worktrees-share-with-the-main-checkout)。258在 `sparsePaths` 中列出目录,而不是单个文件。根级文件如 `package.json`、`tsconfig.base.json` 和锁文件始终与你列出的目录一起检出。根级目录不是,所以如果你想要存储库根目录的 `.claude/settings.json` 或 `.claude/rules/` 在 worktree 内可用,请在列表中包含 `.claude`。对于项目 skills、代理和命令,请参阅[worktrees 与主检出共享的内容](/docs/zh-CN/worktrees#what-worktrees-share-with-the-main-checkout)。

259 259 

260Sparse checkout 需要 git 在存在 sparse worktree 时在存储库的共享 `.git/config` 中启用 `extensions.worktreeConfig`。Claude Code 在删除最后一个 worktree 后会删除该条目,但仅当 Claude Code 添加了它时。它永远不会删除你自己设置的值。在 v2.1.207 之前,该条目在删除最后一个 worktree 后仍然存在,基于 go-git 的工具(如 `tea`)无法打开存储库,直到你运行 `git config --unset extensions.worktreeConfig`。260Sparse checkout 需要 git 在存在 sparse worktree 时在仓库的共享 `.git/config` 中启用 `extensions.worktreeConfig`。Claude Code 在删除最后一个 worktree 后会删除该条目,但仅当 Claude Code 添加了它时。它永远不会删除您自己设置的值。

261 261 

262要避免在 worktrees 中复制大型目录如 `node_modules`,将 `sparsePaths` 与同一 `.claude/settings.json` 中的 `symlinkDirectories` 配对:262要避免在 worktrees 中复制大型目录如 `node_modules`,将 `sparsePaths` 与同一 `.claude/settings.json` 中的 `symlinkDirectories` 配对:

263 263 

Details

518 518 

519将网关的凭证放在 `ANTHROPIC_FOUNDRY_API_KEY` 中;它作为 `x-api-key` 标头发送到网关。期望持有者令牌的网关可以改用 [`ANTHROPIC_FOUNDRY_AUTH_TOKEN`](/docs/zh-CN/env-vars)。Claude Code 将该值作为 `Authorization: Bearer` 标头发送,当两者都设置时,它优先于 `ANTHROPIC_FOUNDRY_API_KEY`。需要 Claude Code v2.1.203 或更高版本。519将网关的凭证放在 `ANTHROPIC_FOUNDRY_API_KEY` 中;它作为 `x-api-key` 标头发送到网关。期望持有者令牌的网关可以改用 [`ANTHROPIC_FOUNDRY_AUTH_TOKEN`](/docs/zh-CN/env-vars)。Claude Code 将该值作为 `Authorization: Bearer` 标头发送,当两者都设置时,它优先于 `ANTHROPIC_FOUNDRY_API_KEY`。需要 Claude Code v2.1.203 或更高版本。

520 520 

521对于注入自己的 `Authorization` 标头的网关,设置 `CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1` 并将两个凭证变量都保留为未设置。Claude Code 然后发送没有 Azure 凭证的请求,并保留您提供的 `Authorization` 标头,例如通过 `ANTHROPIC_CUSTOM_HEADERS`。在 v2.1.203 之前,`CLAUDE_CODE_SKIP_FOUNDRY_AUTH` 没有 API 密钥会使 Microsoft Foundry 客户端无法发送请求。521对于注入自己的 `Authorization` 标头的网关,设置 `CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1` 并将两个凭据变量都保留为未设置。Claude Code 然后发送没有 Azure 凭据的请求,并保留您提供的 `Authorization` 标头,例如通过 `ANTHROPIC_CUSTOM_HEADERS`。

522 522 

523<Tabs>523<Tabs>

524 <Tab title="Bash or Zsh">524 <Tab title="Bash or Zsh">

Details

168| :- | :- |168| :- | :- |

169| `x-claude-code-request-class` | 这是什么类型的请求:`main` 用于主对话的一个回合,`subagent` 用于 [子代理](/docs/zh-CN/sub-agents) 的一个回合,`workflow` 用于在工作流内运行的代理,`compaction` 用于压缩对话的总结请求,或 `auxiliary` 用于侧面请求,如会话标题、分类器和摘要。在每个请求上发送 |169| `x-claude-code-request-class` | 这是什么类型的请求:`main` 用于主对话的一个回合,`subagent` 用于 [子代理](/docs/zh-CN/sub-agents) 的一个回合,`workflow` 用于在工作流内运行的代理,`compaction` 用于压缩对话的总结请求,或 `auxiliary` 用于侧面请求,如会话标题、分类器和摘要。在每个请求上发送 |

170| `x-claude-code-agent-type` | 发出请求的子代理的类型:内置代理类型名称,如 `Explore`、`Plan` 或 `general-purpose`,或 `custom` 用于用户定义的代理,`teammate` 用于在主导的进程中运行的 [代理团队](/docs/zh-CN/agent-teams) 成员,或 `fork` 用于 [分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)。仅在子代理自己的回合上存在;子代理的压缩或侧面请求保留代理 ID 但不携带类型。用户选择的代理名称永远不会被发送 |170| `x-claude-code-agent-type` | 发出请求的子代理的类型:内置代理类型名称,如 `Explore`、`Plan` 或 `general-purpose`,或 `custom` 用于用户定义的代理,`teammate` 用于在主导的进程中运行的 [代理团队](/docs/zh-CN/agent-teams) 成员,或 `fork` 用于 [分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)。仅在子代理自己的回合上存在;子代理的压缩或侧面请求保留代理 ID 但不携带类型。用户选择的代理名称永远不会被发送 |

171| `x-claude-code-compaction` | 在 [压缩](/docs/zh-CN/prompt-caching#compacting-the-conversation) 期间总结对话的请求上存在。该值说明触发了什么:`auto` 当上下文窗口接近容量时,`manual` 用于 `/compact`,或 `reactive` 当 API 拒绝请求过长时。在所有其他请求上不存在 |171| `x-claude-code-compaction` | 在 [压缩](/docs/zh-CN/prompt-caching#compacting-the-conversation) 期间总结对话的请求上存在。该值说明触发了什么:`auto` 当上下文窗口接近容量时,`manual` 用于 `/compact`,或 `reactive` 当 API 拒绝请求过长时。对于 [空闲压缩](/docs/zh-CN/settings-reference#idlecompaction),该值也为 `auto`。在所有其他请求上不存在 |

172| `x-claude-code-context-compacted` | 在压缩后的第一个主对话请求上存在一次,具有与 `x-claude-code-compaction` 相同的值。此请求之前的对话前缀不再使用,因此可以删除以其为键的缓存 |172| `x-claude-code-context-compacted` | 在压缩后的第一个主对话请求上存在一次,具有与 `x-claude-code-compaction` 相同的值。此请求之前的对话前缀不再使用,因此可以删除以其为键的缓存 |

173| `x-claude-code-prev-tool-durations` | 此请求携带其结果的工具调用的测量运行时间,格式为 `<name>=<ms>;<name>=<ms>`,例如 `Bash=742;Read=9`。在同一对话的下一个请求之后发送,来自主会话或子代理的一批工具调用 |173| `x-claude-code-prev-tool-durations` | 此请求携带其结果的工具调用的测量运行时间,格式为 `<name>=<ms>;<name>=<ms>`,例如 `Bash=742;Read=9`。在同一对话的下一个请求之后发送,来自主会话或子代理的一批工具调用 |

174| `x-claude-code-prompt-id` | 标识请求所服务的用户提示的随机 UUID。服务一个提示的请求共享该值,包括提示启动的子代理的回合。未归属于提示的请求省略它。使用它按提示对会话的请求进行分组。需要 Claude Code v2.1.283 或更高版本 |174| `x-claude-code-prompt-id` | 标识请求所服务的用户提示的随机 UUID。服务一个提示的请求共享该值,包括提示启动的子代理的回合。未归属于提示的请求省略它。使用它按提示对会话的请求进行分组。需要 Claude Code v2.1.283 或更高版本 |


291 291 

292在 Claude Code v2.1.227 或更高版本上,您的组织可以通过[托管设置](/docs/zh-CN/managed-settings)在此变量下保持 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)打开。Claude Code 在该覆盖生效时发送的内容取决于您如何连接:292在 Claude Code v2.1.227 或更高版本上,您的组织可以通过[托管设置](/docs/zh-CN/managed-settings)在此变量下保持 [MCP 工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)打开。Claude Code 在该覆盖生效时发送的内容取决于您如何连接:

293 293 

294* 在直接连接上,或通过设置了 `ANTHROPIC_BASE_URL` 的 gateway,Claude Code 继续发送工具搜索 beta 请求头、`defer_loading` 工具字段和 `tool_reference` 块,并删除其余部分294* 在未使用 HIPAA 配置的直接连接上,或通过设置了 `ANTHROPIC_BASE_URL` 的网关,Claude Code 继续发送工具搜索 beta 请求头、`defer_loading` 工具字段和 `tool_reference` 块

295* 在云提供商上,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录,覆盖没有效果295* 在云提供商上,或通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 登录,覆盖没有效果

296* 在[获得 HIPAA 配置](/docs/zh-CN/hipaa-setup#check-how-developers-sign-in-and-connect)的会话中,覆盖没有效果,工具搜索保持关闭

296 297 

297Claude Code 发送的功能集随版本增长。有关当前 beta 请求头字符串,请参阅 [beta 请求头参考](https://platform.claude.com/docs/en/api/beta-headers);针对新的 Claude Code 版本测试您的 gateway,而不是固定到观察列表。298Claude Code 发送的功能集随版本增长。有关当前 beta 请求头字符串,请参阅 [beta 请求头参考](https://platform.claude.com/docs/en/api/beta-headers);针对新的 Claude Code 版本测试您的 gateway,而不是固定到观察列表。

298 299 

mcp.md +88 −59

Details

90 90 

91通过 `.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 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`。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`。

94 94 

95只有 SDK 主机应用程序(例如 [Agent SDK](/docs/zh-CN/agent-sdk/mcp) 应用程序或 [桌面应用](/docs/zh-CN/desktop))可以注册进程内 `"type": "sdk"` 服务器。Claude Code 跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。95只有 SDK 主机应用程序(例如 [Agent SDK](/docs/zh-CN/agent-sdk/mcp) 应用程序或 [桌面应用](/docs/zh-CN/desktop))可以注册进程内 `"type": "sdk"` 服务器。Claude Code 跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。

96 96 


128 128 

129Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,以便您的服务器可以解析项目相对路径,而不依赖于工作目录。这与 hook 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。129Claude Code 在生成的服务器的环境中设置 `CLAUDE_PROJECT_DIR` 为项目根目录,以便您的服务器可以解析项目相对路径,而不依赖于工作目录。这与 hook 在其 `CLAUDE_PROJECT_DIR` 变量中接收的目录相同。从服务器进程内读取它,例如 Node 中的 `process.env.CLAUDE_PROJECT_DIR` 或 Python 中的 `os.environ["CLAUDE_PROJECT_DIR"]`。

130 130 

131`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](/docs/zh-CN/permissions#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。在 v2.1.203 之前,`roots/list` 仅返回启动目录,Claude Code 不发送 `notifications/roots/list_changed`。131`CLAUDE_PROJECT_DIR` 是稳定的项目根目录,在会话中添加或删除工作目录时不会更改。限制自己的文件系统访问到一组允许目录的服务器应该改为实现 MCP `roots/list` 请求。Claude Code 使用会话的启动目录加上您通过 `--add-dir`、`/add-dir` 或 `additionalDirectories` 设置授予的每个 [额外工作目录](/docs/zh-CN/permissions#working-directories) 来回答 `roots/list`。当该集合更改时,Claude Code 发送 `notifications/roots/list_changed`。

132 132 

133此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目作用域的 `.mcp.json` 条目或 `~/.claude.json` 中的本地或用户作用域服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。133此变量在服务器的环境中设置,而不是在 Claude Code 自己的环境中,因此通过项目作用域的 `.mcp.json` 条目或 `~/.claude.json` 中的本地或用户作用域服务器条目中的 `command` 或 `args` 中的 `${VAR}` 扩展来引用它需要默认值,例如 `${CLAUDE_PROJECT_DIR:-.}`。插件提供的 MCP 配置直接替换 `${CLAUDE_PROJECT_DIR}` 并且不需要默认值。

134 134 


154 `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将该名称读取为另一对并拒绝它,因此在 `--env` 和服务器名称之间至少放置一个其他选项,例如 `--transport stdio`。154 `--env` 接受多个 `KEY=value` 对。如果服务器名称直接跟在 `--env` 之后,CLI 会将该名称读取为另一对并拒绝它,因此在 `--env` 和服务器名称之间至少放置一个其他选项,例如 `--transport stdio`。

155</Note>155</Note>

156 156 

157<h4 id="how-claude-code-stops-a-stdio-server">

158 Claude Code 如何停止 stdio 服务器

159</h4>

160 

161当 Claude Code 断开 stdio 服务器时(例如您的会话结束时),它会向服务器进程发送信号,并短暂等待其退出,然后再强制停止它。如果您的服务器在关闭时保存状态或删除锁文件,请针对您的平台处理该信号,并在该时间内完成:

162 

163* **在 macOS 和 Linux 上**:Claude Code 发送 `SIGINT`,如果进程在 100 毫秒后仍在运行,则发送 `SIGTERM`,再过 400 毫秒后发送 `SIGKILL`。

164* **在 Windows 上**:Claude Code 关闭服务器的 stdin,如果进程在 300 毫秒后仍在运行,则结束服务器的进程树。

165 

166在 v2.1.296 之前,Windows 上的 Claude Code 会立即结束服务器的进程树,而不先关闭 stdin 或等待。

167 

157<h3 id="option-4-add-a-remote-websocket-server">168<h3 id="option-4-add-a-remote-websocket-server">

158 选项 4:添加远程 WebSocket 服务器169 选项 4:添加远程 WebSocket 服务器

159</h3>170</h3>


415 远程服务器的会话中途断开426 远程服务器的会话中途断开

416</h4>427</h4>

417 428 

418Claude Code 使用指数退避重新连接断开的远程服务器:最多五次尝试,从一秒延迟开始,每次加倍。您看到的内容取决于您如何运行 Claude Code:429Claude Code 首先使用指数退避尝试重新连接断开的远程服务器,最多五次,从一秒延迟开始,每次加倍:

419 430 

420* **在交互式会话中**:`/mcp` 在 Claude Code 重新连接时显示服务器为待处理。在五次失败尝试后,Claude Code 将服务器标记为失败,或在服务器需要再次授权时标记为需要身份验证。当它将服务器标记为失败时,您会看到 `MCP server "<name>" disconnected · open /mcp to reconnect` 通知。您可以从 `/mcp` 手动重试。431* **在交互式会话中**:`/mcp` 在 Claude Code 重新连接时显示服务器为待处理。在五次失败尝试后,Claude Code 将服务器标记为失败,或在服务器需要再次授权时标记为需要身份验证。当它将服务器标记为失败时,您会看到 `MCP server "<name>" disconnected · open /mcp to reconnect` 通知。您可以从 `/mcp` 手动重试。

421* **在 [`claude -p`](/docs/zh-CN/headless) 运行和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 会话中**:Claude Code 按相同的计划重新连接,没有 `/mcp` 面板显示尝试。432* **在 [`claude -p`](/docs/zh-CN/headless) 运行和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) 会话中**:Claude Code 进行相同的五次尝试,没有 `/mcp` 面板显示这些尝试。当 HTTP 或 SSE 服务器的尝试因瞬时错误失败时,它会在后台继续重试最多约半小时,当某次重试连接成功时,服务器及其工具会再次可用。

422 433 

423<h4 id="failed-first-connections">434<h4 id="failed-first-connections">

424 失败的首次连接435 失败的首次连接


479 490 

480按服务器的 `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 服务器没有按请求计时器。491按服务器的 `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 服务器没有按请求计时器。

481 492 

482至少 1000 的按服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会早于按服务器 `timeout` 因空闲而中止该服务器的工具调用。需要 Claude Code v2.1.203 或更高版本。493至少 1000 的按服务器 `timeout` 也充当下面描述的空闲超时的下限:Claude Code 永远不会早于按服务器 `timeout` 因空闲而中止该服务器的工具调用。

483 494 

484对 MCP 服务器的工具调用,如果在空闲窗口内既没有响应也没有进度通知,会以错误中止,而不是等待墙钟时间限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器外的每种服务器类型。空闲窗口对 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对 stdio 服务器默认为 30 分钟。在 v2.1.203 之前,stdio 服务器免除空闲超时。495对 MCP 服务器的工具调用,如果在空闲窗口内既没有响应也没有进度通知,会以错误中止,而不是等待墙钟时间限制。空闲超时适用于除 IDE 服务器和 SDK 进程内服务器外的每种服务器类型。空闲窗口对 HTTP、SSE、WebSocket 和 [claude.ai 连接器](#use-mcp-servers-from-claude-ai) 服务器默认为五分钟,对 stdio 服务器默认为 30 分钟。

485 496 

486设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改空闲窗口,或将其设置为 `0` 以禁用检查。497设置 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 环境变量(以毫秒为单位)来更改空闲窗口,或将其设置为 `0` 以禁用检查。

487 498 


493 504 

494主对话中的 MCP 工具调用在两分钟后仍在运行时会移到后台任务,而不是阻塞会话。Claude 立即收到任务 ID 并继续工作,结果在调用完成时作为任务通知到达。自动后台处理需要 Claude Code v2.1.212 或更高版本。505主对话中的 MCP 工具调用在两分钟后仍在运行时会移到后台任务,而不是阻塞会话。Claude 立即收到任务 ID 并继续工作,结果在调用完成时作为任务通知到达。自动后台处理需要 Claude Code v2.1.212 或更高版本。

495 506 

496任务出现在 [`/tasks`](/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,退出会话后它不会保留。任务的条目显示服务器报告的最新进度。507任务出现在 [`/tasks`](/docs/zh-CN/commands#all-commands) 中,您也可以在其中停止它,退出会话后它不会保留。任务的条目显示服务器报告的最新进度。如果您停止任务,Claude Code 会取消调用并告知 Claude 不会有结果返回。停止并不保证服务器停止:服务器可能已经完成了部分工作,或者仍可能完成它。

497 508 

498调用在后台运行时,每次调用的限制仍然适用:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars) 设置的墙钟时间限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 设置的空闲超时。509调用在后台运行时,每次调用的限制仍然适用:由按服务器 `timeout` 或 [`MCP_TOOL_TIMEOUT`](/docs/zh-CN/env-vars) 设置的墙钟时间限制,以及由 [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 设置的空闲超时。

499 510 


793 --header "Authorization: Bearer YOUR_GITHUB_PAT"804 --header "Authorization: Bearer YOUR_GITHUB_PAT"

794```805```

795 806 

796将 `YOUR_GITHUB_PAT` 替换为您的个人访问令牌。`claude mcp add` 命令保存配置而不验证凭据,因此此处接受占位符值,但服务器稍后无法连接。要验证连接,请运行 `/mcp` 并检查服务器是否显示 `connected`。具有错误凭据的服务器显示 `failed`,失败详情包括服务器返回的 HTTP 状态,例如 401。807将 `YOUR_GITHUB_PAT` 替换为您的个人访问令牌。`claude mcp add` 命令保存配置而不验证凭据,因此此处接受占位符值,但服务器稍后无法连接。要验证连接,请运行 `/mcp` 并检查该服务器所在行是否显示对勾。具有错误凭据的服务器会改为显示 ✘,其[失败详情](#server-status-detail)包括服务器返回的 HTTP 状态,例如 401。

797 808 

798然后使用 GitHub:809然后使用 GitHub:

799 810 


820 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"831 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

821```832```

822 833 

823要确认服务器启动,请运行 `/mcp` 并检查 `db` 是否显示 `connected`。834要确认服务器启动,请运行 `/mcp` 并检查 `db` 所在行是否显示对勾。

824 835 

825然后自然地查询您的数据库:836然后自然地查询您的数据库:

826 837 


829```840```

830 841 

831```text wrap theme={null}842```text wrap theme={null}

832显示订单表的架构843显示订单表的 schema

833```844```

834 845 

835```text wrap theme={null}846```text wrap theme={null}


846 857 

847* 对于您尚未登录的服务器,任一状态代码都会在 `/mcp` 中标记它,以便您可以完成 OAuth 流程。858* 对于您尚未登录的服务器,任一状态代码都会在 `/mcp` 中标记它,以便您可以完成 OAuth 流程。

848* 对于 [claude.ai 连接器](#use-mcp-servers-from-claude-ai),由 claude.ai 拒绝您的会话令牌导致的 `401` 不会标记连接器,因为重新授权连接器无法修复您的登录。Claude Code 改为显示 [会话令牌被拒绝状态](/docs/zh-CN/errors#claude-ai-rejected-the-session-token)。859* 对于 [claude.ai 连接器](#use-mcp-servers-from-claude-ai),由 claude.ai 拒绝您的会话令牌导致的 `401` 不会标记连接器,因为重新授权连接器无法修复您的登录。Claude Code 改为显示 [会话令牌被拒绝状态](/docs/zh-CN/errors#claude-ai-rejected-the-session-token)。

849* 对于您在 `headers` 中配置了 `Authorization` 标头的服务器,或通过 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 配置的服务器,连接时的 `401` 或 `403` 不会标记服务器,因为要修复的凭证是您配置的凭证。Claude Code 改为报告连接失败。如果您从 `${VAR}` 引用设置该标头,请检查该变量是否是 Claude Code [读取为空](#credential-variables-that-read-as-empty) 的变量之一。860* 对于您在 `headers` 中配置了 `Authorization` 标头的服务器,或通过 [`headersHelper`](#use-dynamic-headers-for-custom-authentication) 配置的服务器,连接时的 `401` 或 `403` 不会标记服务器,因为要修复的凭据是您配置的凭据。Claude Code 改为报告连接失败。如果您从 `${VAR}` 引用设置该标头,请检查该变量是否是 Claude Code [读取为空](#credential-variables-that-read-as-empty) 的变量之一。

850* 对于 [传递到云会话的连接器](#how-connectors-reach-claude-code),Claude Code 不运行登录流程,因为会话的代理使用您在 claude.ai 中授予的授权向连接器进行身份验证。当那里的连接器需要再次授权时,请在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 重新连接它,而不是从会话中连接。861* 对于 [传递到云端会话的连接器](#how-connectors-reach-claude-code),Claude Code 不运行登录流程,因为会话的代理使用您在 claude.ai 中授予的授权向连接器进行身份验证。当那里的连接器需要再次授权时,请在 [claude.ai/customize/connectors](https://claude.ai/customize/connectors) 重新连接它,而不是从会话中连接。

851 862 

852当对您已登录的 OAuth 服务器的请求返回 `401 Unauthorized` 时,Claude Code 会刷新存储的令牌、重新连接并重试请求一次。只有在该重试也失败时,它才会在 `/mcp` 中标记服务器。在 v2.1.206 之前,由于网络错误等暂时原因导致的令牌刷新失败会将 OAuth 服务器标记为在会话的其余时间内需要身份验证,即使其刷新令牌仍然有效。863当对您已登录的 OAuth 服务器的请求返回 `401 Unauthorized` 时,Claude Code 会刷新存储的令牌、重新连接并重试请求一次。只有在该重试也失败时,它才会在 `/mcp` 中标记服务器。

853 864 

854当服务器拒绝存储的刷新令牌时,Claude Code 会立即显示一条指向 `/mcp` 的通知。打开 `/mcp` 并在服务器上选择 **Re-authenticate** 以在下一个工具调用失败之前再次登录。865当服务器拒绝存储的刷新令牌时,Claude Code 会立即显示一条指向 `/mcp` 的通知。打开 `/mcp` 并在服务器上选择 **Re-authenticate** 以在下一个工具调用失败之前再次登录。

855 866 


859 870 

860该通知每次宣布每个服务器一次,并在后续启动时将其排除在计数之外,直到该服务器已连接并再次需要登录。`/mcp` 仍然列出每个需要登录的服务器。871该通知每次宣布每个服务器一次,并在后续启动时将其排除在计数之外,直到该服务器已连接并再次需要登录。`/mcp` 仍然列出每个需要登录的服务器。

861 872 

862在非交互模式下,没有 `/mcp` 面板,因此 Claude Code 无法为您运行 OAuth 流程。当配置的服务器在启用了 [工具搜索](#scale-with-mcp-tool-search)(这是默认设置)的 `claude -p` 或 Agent SDK 运行期间需要身份验证时,Claude Code 会告诉 Claude 该服务器的工具在您授权之前不可用。Claude 随后可以指出需要登录的服务器。请在交互式会话中使用 `/mcp` 或 `claude mcp login <name>` 完成登录。873`claude -p` 或 Agent SDK 运行没有 `/mcp` 面板,因此 Claude Code 无法在其中运行 OAuth 流程。要使用需要身份验证的服务器,请先在交互式会话中完成登录:在会话中运行 `/mcp`,或在 shell 中运行 `claude mcp login <name>`。当配置的服务器在启用了 [工具搜索](#scale-with-mcp-tool-search) 的 `claude -p` 或 Agent SDK 运行期间需要身份验证时,Claude Code 会告诉 Claude 该服务器的工具在您授权之前不可用。

863 874 

864如果您为服务器配置了 `headers.Authorization`,而服务器拒绝了该标头,Claude Code 会报告连接失败,而不是回退到 OAuth。检查令牌对 MCP 端点是否有效,或删除标头以使用 OAuth 流程。875如果您为服务器配置了 `headers.Authorization`,而服务器拒绝了该标头,Claude Code 会报告连接失败,而不是回退到 OAuth。检查令牌对 MCP 端点是否有效,或删除标头以使用 OAuth 流程。

865 876 

866<Steps>877<Steps>

867 <Step title="添加需要身份验证的服务器">878 <Step title="添加需要身份验证的服务器">

868 如果您已在 [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`。否则,运行:879 如果您已在 [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`。否则,运行:

869 880 

870 ```bash theme={null}881 ```bash theme={null}

871 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp882 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp


903claude mcp login sentry914claude mcp login sentry

904```915```

905 916 

906要稍后清除存储的凭证,请运行 `claude mcp logout <name>`。917要稍后清除存储的凭据,请运行 `claude mcp logout <name>`。

907 918 

908`claude mcp login` 检测何时没有本地浏览器可用,例如在 SSH 会话期间或在没有显示服务器的 Linux 上,并打印授权 URL 而不是尝试打开浏览器。在您的本地计算机上打开 URL,然后将浏览器地址栏中的完整重定向 URL 粘贴回提示符。该命令需要交互式终端来执行粘贴步骤,因此请使用 `ssh -t` 连接。传递 `--no-browser` 以强制 URL 提示,即使检测到本地浏览器。919`claude mcp login` 检测何时没有本地浏览器可用,例如在 SSH 会话期间或在没有显示服务器的 Linux 上,并打印授权 URL 而不是尝试打开浏览器。在您的本地计算机上打开 URL,然后将浏览器地址栏中的完整重定向 URL 粘贴回提示符。该命令需要交互式终端来执行粘贴步骤,因此请使用 `ssh -t` 连接。传递 `--no-browser` 以强制 URL 提示,即使检测到本地浏览器。

909 920 


915 使用固定的 OAuth 回调端口926 使用固定的 OAuth 回调端口

916</h3>927</h3>

917 928 

918某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。如果在 Claude Code v2.1.229 上登录失败并出现重定向 URI 不匹配,请参阅 [使用预配置的 OAuth 凭证](#use-pre-configured-oauth-credentials) 下的版本说明。929某些 MCP 服务器需要预先注册的特定重定向 URI。默认情况下,Claude Code 为 OAuth 回调选择随机可用端口。使用 `--callback-port` 固定端口,使其与 `http://localhost:PORT/callback` 形式的预注册重定向 URI 匹配。如果在 Claude Code v2.1.229 上登录失败并出现重定向 URI 不匹配,请参阅 [使用预配置的 OAuth 凭据](#use-pre-configured-oauth-credentials) 下的版本说明。

919 930 

920您可以单独使用 `--callback-port`(使用动态客户端注册)或与 `--client-id` 一起使用(使用预配置的凭证)。931您可以单独使用 `--callback-port`(使用动态客户端注册)或与 `--client-id` 一起使用(使用预配置的凭据)。

921 932 

922```bash theme={null}933```bash theme={null}

923# 使用动态客户端注册的固定回调端口934# Fixed callback port with dynamic client registration

924claude mcp add --transport http \935claude mcp add --transport http \

925 --callback-port 8080 \936 --callback-port 8080 \

926 my-server https://mcp.example.com/mcp937 my-server https://mcp.example.com/mcp

927```938```

928 939 

929<h3 id="use-pre-configured-oauth-credentials">940<h3 id="use-pre-configured-oauth-credentials">

930 使用预配置的 OAuth 凭证941 使用预配置的 OAuth 凭据

931</h3>942</h3>

932 943 

933某些 MCP 服务器不支持通过动态客户端注册进行自动 OAuth 设置。如果您看到类似"Incompatible auth server: does not support dynamic client registration"的错误,服务器需要预配置的凭证。Claude Code 也支持使用客户端 ID 元数据文档 (CIMD) 而不是动态客户端注册的服务器,并自动发现这些服务器。如果自动发现失败,请先通过服务器的开发者门户注册 OAuth 应用,然后在添加服务器时提供凭证。944某些 MCP 服务器不支持通过动态客户端注册进行自动 OAuth 设置。如果您看到类似"Incompatible auth server: does not support dynamic client registration"的错误,服务器需要预配置的凭据。Claude Code 也支持使用客户端 ID 元数据文档 (CIMD) 而不是动态客户端注册的服务器,并自动发现这些服务器。如果自动发现失败,请先通过服务器的开发者门户注册 OAuth 应用,然后在添加服务器时提供凭据。

934 945 

935<Steps>946<Steps>

936 <Step title="向服务器注册 OAuth 应用">947 <Step title="向服务器注册 OAuth 应用">


941 在 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。952 在 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。

942 </Step>953 </Step>

943 954 

944 <Step title="使用您的凭证添加服务器">955 <Step title="使用您的凭据添加服务器">

945 这些选项卡涵盖两个命令:`claude mcp add` 将您的客户端 ID 和回调端口作为标志,`claude mcp add-json` 在 `oauth` 对象中获取它们。如果您注册了重定向 URI,请将回调端口设置为该 URI 中的端口。956 这些选项卡涵盖两个命令:`claude mcp add` 将您的客户端 ID 和回调端口作为标志,`claude mcp add-json` 在 `oauth` 对象中获取它们。如果您注册了重定向 URI,请将回调端口设置为该 URI 中的端口。

946 957 

947 <Tabs>958 <Tabs>


994<Tip>1005<Tip>

995 提示:1006 提示:

996 1007 

997 * 客户端密钥安全地存储在您的系统钥匙链 (macOS) 或凭证文件中,而不是在您的配置中1008 * 客户端密钥安全地存储在您的系统钥匙链 (macOS) 或凭据文件中,而不是在您的配置中

998 * 您只能在添加服务器时设置客户端密钥。当您使用 `claude mcp login` 或从 `/mcp` 进行身份验证时,Claude Code 使用存储的密钥,不会提示输入密钥或读取 `MCP_CLIENT_SECRET`1009 * 您只能在添加服务器时设置客户端密钥。当您使用 `claude mcp login` 或从 `/mcp` 进行身份验证时,Claude Code 使用存储的密钥,不会提示输入密钥或读取 `MCP_CLIENT_SECRET`

999 * 要稍后添加或更改密钥,请使用 `claude mcp remove <name>` 删除服务器,然后使用 `--client-secret` 和相同的 `--scope` 再次添加它1010 * 要稍后添加或更改密钥,请使用 `claude mcp remove <name>` 删除服务器,然后使用 `--client-secret` 和相同的 `--scope` 再次添加它

1000 * 如果服务器使用没有密钥的公共 OAuth 客户端,请仅使用 `--client-id` 而不使用 `--client-secret`1011 * 如果服务器使用没有密钥的公共 OAuth 客户端,请仅使用 `--client-id` 而不使用 `--client-secret`

1001 * 这些标志仅适用于 HTTP 和 SSE 传输。它们对 stdio 服务器没有影响1012 * 这些标志仅适用于 HTTP 和 SSE 传输。它们对 stdio 服务器没有影响

1002 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭证1013 * 使用 `claude mcp get <name>` 验证为服务器配置了 OAuth 凭据

1003</Tip>1014</Tip>

1004 1015 

1005<h3 id="override-oauth-metadata-discovery">1016<h3 id="override-oauth-metadata-discovery">

1006 覆盖 OAuth 元数据发现1017 覆盖 OAuth 元数据发现

1007</h3>1018</h3>

1008 1019 

1009指向 Claude Code 特定的 OAuth 授权服务器元数据 URL 以绕过默认发现链。当 MCP 服务器的标准端点出错时,或当您想通过内部代理路由发现时,设置 `authServerMetadataUrl`。默认情况下,Claude Code 首先检查 `/.well-known/oauth-protected-resource` 处的 RFC 9728 受保护资源元数据,然后回退到 `/.well-known/oauth-authorization-server` 处的 RFC 8414 授权服务器元数据。1020将 Claude Code 指向特定的 OAuth 授权服务器元数据 URL 以绕过默认发现链。当 MCP 服务器的标准端点出错时,或当您想通过内部代理路由发现时,设置 `authServerMetadataUrl`。默认情况下,Claude Code 首先检查 `/.well-known/oauth-protected-resource` 处的 RFC 9728 受保护资源元数据,然后回退到 `/.well-known/oauth-authorization-server` 处的 RFC 8414 授权服务器元数据。

1010 1021 

1011在 `.mcp.json` 中您的服务器配置的 `oauth` 对象中设置 `authServerMetadataUrl`:1022在 `.mcp.json` 中您的服务器配置的 `oauth` 对象中设置 `authServerMetadataUrl`:

1012 1023 


1024}1035}

1025```1036```

1026 1037 

1027URL 必须使用 `https://`。元数据 URL 的 `scopes_supported` 覆盖上游服务器宣传的范围。1038URL 必须使用 `https://`。元数据 URL 的 `scopes_supported` 覆盖上游服务器宣传的作用域。

1028 1039 

1029<h3 id="restrict-oauth-scopes">1040<h3 id="restrict-oauth-scopes">

1030 限制 OAuth 范围1041 限制 OAuth 作用域

1031</h3>1042</h3>

1032 1043 

1033设置 `oauth.scopes` 以固定 Claude Code 在授权流程期间请求的范围。这是当上游授权服务器宣传的范围超过您想要授予的范围时,将 MCP 服务器限制为安全团队批准的子集的受支持方式。该值是单个空格分隔的字符串,与 RFC 6749 §3.3 中的 `scope` 参数格式匹配。1044设置 `oauth.scopes` 以固定 Claude Code 在授权流程期间请求的作用域。这是当上游授权服务器宣传的作用域超过您想要授予的作用域时,将 MCP 服务器限制为安全团队批准的子集的受支持方式。该值是单个空格分隔的字符串,与 RFC 6749 §3.3 中的 `scope` 参数格式匹配。

1034 1045 

1035```json theme={null}1046```json theme={null}

1036{1047{


1046}1057}

1047```1058```

1048 1059 

1049`oauth.scopes` 优先于 `authServerMetadataUrl` 和服务器在 `/.well-known` 处发现的范围。将其保留为未设置以让 MCP 服务器确定请求的范围集。1060`oauth.scopes` 优先于 `authServerMetadataUrl` 和服务器在 `/.well-known` 处发现的作用域。将其保留为未设置以让 MCP 服务器确定请求的作用域集。

1050 1061 

1051当未设置 `oauth.scopes` 时,Claude Code 不会从自动发现的授权服务器元数据中请求完整的 `scopes_supported` 目录。从配置的 `authServerMetadataUrl` 获取的元数据仍会将其 `scopes_supported` 作为请求的作用域提供。1062当未设置 `oauth.scopes` 时,Claude Code 不会从自动发现的授权服务器元数据中请求完整的 `scopes_supported` 目录。从配置的 `authServerMetadataUrl` 获取的元数据仍会将其 `scopes_supported` 作为请求的作用域提供。

1052 1063 

1053如果授权服务器在 `scopes_supported` 中宣传 `offline_access`,Claude Code 会将其附加到固定范围,以便可以在没有新浏览器登录的情况下刷新访问令牌。1064如果授权服务器在 `scopes_supported` 中宣传 `offline_access`,Claude Code 会将其附加到固定作用域,以便可以在没有新浏览器登录的情况下刷新访问令牌。

1054 1065 

1055如果服务器稍后为工具调用返回 403 `insufficient_scope`,调用会失败并显示 [`needs additional permissions`](/docs/zh-CN/errors#mcp-server-needs-you-to-sign-in-again) 消息,该消息命名服务器要求的范围。该服务器在 `/mcp` 中显示为需要身份验证。1066如果服务器稍后为工具调用返回 403 `insufficient_scope`,调用会失败并显示 [`needs additional permissions`](/docs/zh-CN/errors#mcp-server-needs-you-to-sign-in-again) 消息,该消息命名服务器要求的作用域。该服务器在 `/mcp` 中显示为需要身份验证。

1056 1067 

1057如果该范围不在您的固定 `oauth.scopes` 中,请添加它,然后运行 `/mcp` 并再次对服务器进行身份验证。Claude Code 请求固定范围而不是服务器命名的范围,因此如果您在不添加它的情况下再次进行身份验证,您获得的令牌仍然缺少它。1068如果该作用域不在您的固定 `oauth.scopes` 中,请添加它,然后运行 `/mcp` 并再次对服务器进行身份验证。Claude Code 请求固定作用域而不是服务器命名的作用域,因此如果您在不添加它的情况下再次进行身份验证,您获得的令牌仍然缺少它。

1058 1069 

1059<h3 id="use-dynamic-headers-for-custom-authentication">1070<h3 id="use-dynamic-headers-for-custom-authentication">

1060 使用动态标头进行自定义身份验证1071 使用动态标头进行自定义身份验证


1092 1103 

1093* 该命令必须将字符串键值对的 JSON 对象写入 stdout1104* 该命令必须将字符串键值对的 JSON 对象写入 stdout

1094* Claude Code 在 shell 中运行该命令,并在 10 秒后放弃1105* Claude Code 在 shell 中运行该命令,并在 10 秒后放弃

1095* Claude Code 通过 [您配置服务器的位置](#where-the-helper-runs) 选择命令的工作目录,因此将脚本作为绝对路径给出或将其放在 `PATH` 上1106* Claude Code 根据 [您配置服务器的位置](#where-the-helper-runs) 选择命令的工作目录,因此请将脚本作为绝对路径给出或将其放在 `PATH` 上

1096* 动态标头覆盖任何具有相同名称的静态 `headers`1107* 动态标头覆盖任何具有相同名称的静态 `headers`

1097 1108 

1098Claude Code 在每次连接时运行助手,在会话启动和重新连接时,一旦 [项目和本地范围服务器的信任规则](#trust-a-folder-before-its-headershelper-runs) 允许它运行。它不缓存结果,因此您的脚本负责任何令牌重用。1109一旦 [项目和本地作用域服务器的信任规则](#trust-a-folder-before-its-headershelper-runs) 允许助手运行,Claude Code 会在每次连接时(会话启动和重新连接时)重新运行助手。它不缓存结果,因此您的脚本负责任何令牌重用。

1099 1110 

1100如果工具调用返回 `401 Unauthorized` 或 `403 Forbidden`,Claude Code 会自动在相同规则下重新运行助手,使用新标头重新连接,并重试调用一次。Claude Code 仅在该重试也失败时才在 `/mcp` 中将服务器标记为需要身份验证。1111如果工具调用返回 `401 Unauthorized` 或 `403 Forbidden`,Claude Code 会自动在相同规则下重新运行助手,使用新标头重新连接,并重试调用一次。Claude Code 仅在该重试也失败时才在 `/mcp` 中将服务器标记为需要身份验证。

1101 1112 

1102当助手的输出包含 `Authorization` 标头时,Claude Code 使用该凭证作为服务器的身份验证,不会回退到服务器的 OAuth。1113当助手的输出包含 `Authorization` 标头时,Claude Code 使用该凭据作为服务器的身份验证,不会回退到服务器的 OAuth。

1103 1114 

1104如果服务器在连接时拒绝助手的凭证,Claude Code 会报告连接失败,而不是将服务器标记为需要身份验证。修复您的助手返回的凭证,然后从 `/mcp` 重新连接以重新运行助手。1115如果服务器在连接时拒绝助手的凭据,Claude Code 会报告连接失败,而不是将服务器标记为需要身份验证。修复您的助手返回的凭据,然后从 `/mcp` 重新连接以重新运行助手。

1105 1116 

1106Claude Code 在执行助手时设置这些环境变量:1117Claude Code 在执行助手时设置这些环境变量:

1107 1118 


1119 助手运行的位置1130 助手运行的位置

1120</h4>1131</h4>

1121 1132 

1122Claude Code 从声明服务器的配置中选择 `headersHelper` 命令的工作目录。Claude 在 Bash 中运行的 `cd` 不会移动它,[`/cd`](/docs/zh-CN/permissions#move-the-session-to-another-directory) 仅对从会话主工作目录运行的服务器移动它。下面的每一行给出您的 `headersHelper` 命令中相对路径解析的目录。1133Claude Code 从声明服务器的配置中选择 `headersHelper` 命令的工作目录。Claude 在 Bash 中运行的 `cd` 不会移动它,[`/cd`](/docs/zh-CN/permissions#move-the-session-to-another-directory) 仅对从会话主工作目录运行的服务器移动它。下面的每一行给出您的 `headersHelper` 命令中相对路径解析所依据的目录。

1123 1134 

1124| 您配置服务器的位置 | 工作目录 |1135| 您配置服务器的位置 | 工作目录 |

1125| :- | :- |1136| :- | :- |

1126| [插件](/docs/zh-CN/plugins/components#mcp-servers) | 插件的根目录 |1137| [插件](/docs/zh-CN/plugins/components#mcp-servers) | 插件的根目录 |

1127| 项目 `.mcp.json` 或 [本地范围](#local-scope) 服务器 | 声明服务器的项目目录 |1138| 项目 `.mcp.json` 或 [本地作用域](#local-scope) 服务器 | 声明服务器的项目目录 |

1128| 您项目中的代理文件、来自 SDK 的 `mcpServers` 选项或 `setMcpServers()` 方法的服务器,或 [`--mcp-config`](/docs/zh-CN/cli-reference) | 会话的 [主工作目录](/docs/zh-CN/permissions#working-directories) |1139| 您项目中的 Agent 文件、来自 SDK 的 `mcpServers` 选项或 `setMcpServers()` 方法的服务器,或 [`--mcp-config`](/docs/zh-CN/cli-reference) | 会话的 [主工作目录](/docs/zh-CN/permissions#working-directories) |

1129| [用户范围](#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) |1140| [用户作用域](#user-scope)、[托管 MCP](/docs/zh-CN/managed-mcp)、[claude.ai 连接器](#use-mcp-servers-from-claude-ai),或来自您项目外的 Agent 文件,包括来自 `--add-dir` 目录的 Agent 文件 | 您的配置目录,除非您设置了 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars),否则为 `~/.claude` |

1130 1141 

1131在 v2.1.238 之前,Claude Code 也从您启动它的目录运行用户范围、托管和 claude.ai 连接器服务器的助手,以及来自您项目外的代理文件。1142在 v2.1.238 之前,Claude Code 也从您启动它的目录运行用户作用域、托管和 claude.ai 连接器服务器的助手,以及来自您项目外的 Agent 文件的助手。

1132 1143 

1133<h4 id="which-variables-a-helper-can-read">1144<h4 id="which-variables-a-helper-can-read">

1134 助手可以读取哪些变量1145 助手可以读取哪些变量

1135</h4>1146</h4>

1136 1147 

1137存储库或插件提供的 `headersHelper` 是您没有编写的命令,因此 Claude Code 运行它时不使用来自您环境的凭证变量,例如 `ANTHROPIC_API_KEY`。您配置服务器的位置决定这是否适用:1148仓库或插件提供的 `headersHelper` 是您没有编写的命令,因此 Claude Code 运行它时不使用来自您环境的凭据变量,例如 `ANTHROPIC_API_KEY`。您配置服务器的位置决定这是否适用:

1138 1149 

1139* **已删除**:项目 `.mcp.json` 中的服务器或在插件中,以及来自您项目或 `--add-dir` 目录的代理文件中的内联服务器1150* **已删除**:项目 `.mcp.json` 中的服务器或插件中的服务器,以及来自您项目或 `--add-dir` 目录的 Agent 文件中的内联服务器

1140* **未删除**:[用户](#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` 传递的服务器1151* **未删除**:[用户](#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` 传递的 Agent 文件中的内联服务器

1141 1152 

1142除了 Git 的 `GIT_CONFIG_KEY_<n>` 变量外,Claude Code 会从您的环境中删除每个名称看起来像凭证的变量,例如名称中包含 `TOKEN`、`SECRET`、`PASSWORD`、`KEY` 或 `AUTH` 的名称(无论大小写),因此 `ANTHROPIC_API_KEY` 和 `MY_REGISTRY_TOKEN` 都被删除。Claude Code 也删除了一个固定的凭证变量列表,其名称不遵循该模式,例如 `ANTHROPIC_CUSTOM_HEADERS`。1153除了 Git 的 `GIT_CONFIG_KEY_<n>` 变量外,Claude Code 会从您的环境中删除每个名称看起来像凭据的变量,例如名称中包含 `TOKEN`、`SECRET`、`PASSWORD`、`KEY` 或 `AUTH` 的名称(无论大小写),因此 `ANTHROPIC_API_KEY` 和 `MY_REGISTRY_TOKEN` 都被删除。Claude Code 也会删除一个固定的凭据变量列表,其名称不遵循该模式,例如 `ANTHROPIC_CUSTOM_HEADERS`。

1143 1154 

1144当这适用于您的助手时,让脚本从文件或凭证存储读取其凭证。如果服务器的 `url` [携带这些变量之一的实时值](#environment-variable-expansion-in-mcp-json),例如 `MY_REGISTRY_TOKEN`,助手接收的 `CLAUDE_CODE_MCP_SERVER_URL` 值也将该部分替换为 `REDACTED`。1155当这适用于您的助手时,让脚本从文件或凭据存储读取其凭据。如果服务器的 `url` [携带这些变量之一的实时值](#environment-variable-expansion-in-mcp-json),例如 `MY_REGISTRY_TOKEN`,助手接收的 `CLAUDE_CODE_MCP_SERVER_URL` 值也将该部分替换为 `REDACTED`。

1145 1156 

1146<h4 id="trust-a-folder-before-its-headershelper-runs">1157<h4 id="trust-a-folder-before-its-headershelper-runs">

1147 在其 headersHelper 运行之前信任文件夹1158 在其 headersHelper 运行之前信任文件夹

1148</h4>1159</h4>

1149 1160 

1150Claude Code 将 `headersHelper` 作为任意 shell 命令执行。对于项目 `.mcp.json` 中的服务器或 [本地范围](#local-scope) 的服务器,它仅在您接受声明服务器的项目目录的 [信任对话](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后运行助手。在 v2.1.238 之前,`claude -p` 或 SDK 会话运行这些助手而不检查信任,交互式会话在您信任父文件夹后运行它们。1161Claude Code 将 `headersHelper` 作为任意 shell 命令执行。对于项目 `.mcp.json` 中的服务器或 [本地作用域](#local-scope) 的服务器,它仅在您接受声明服务器的项目目录的 [信任对话](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 后运行助手。在 v2.1.238 之前,`claude -p` 或 SDK 会话运行这些助手而不检查信任,交互式会话在您信任父文件夹后运行它们。

1151 1162 

1152* **不计算的信任**:父文件夹的信任,以及 `claude -p` 或 SDK 会话为 [设置文件中的钩子](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 获得的自动信任1163* **不计算的信任**:父文件夹的信任,以及 `claude -p` 或 SDK 会话为 [设置文件中的 hook](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder) 获得的自动信任

1153* **直到您信任文件夹**:Claude Code 仅使用其静态 `headers` 连接服务器。在 `claude -p` 或 SDK 会话中,它也会向 stderr 打印每个服务器一行 [`headersHelper not run`](/docs/zh-CN/errors#headershelper-not-run),告诉您如何授予信任。1164* **直到您信任文件夹**:Claude Code 仅使用其静态 `headers` 连接服务器。在 `claude -p` 或 SDK 会话中,它也会向 stderr 打印每个服务器一行 [`headersHelper not run`](/docs/zh-CN/errors#headershelper-not-run),告诉您如何授予信任。

1154* **无对话的信任**:在 `~/.claude.json` 中设置 `projects["<path>"].hasTrustDialogAccepted` 为 `true`。`<path>` 是文件夹 [项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 说 Claude Code 将信任键入的文件夹。1165* **无对话的信任**:在 `~/.claude.json` 中将 `projects["<path>"].hasTrustDialogAccepted` 设置为 `true`。`<path>` 是 [项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust) 中所述 Claude Code 用作信任键的文件夹。

1155 1166 

1156Claude 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 不加载服务器,因此其助手也永远不会运行。1167对于在 [Agent 文件](/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent) 中内联声明的服务器,Claude Code 应用相同的规则,并检查该 Agent 文件的来源:您的项目(对于其 `.claude/agents/` 目录中的文件),或 `--add-dir` 目录。直到您 [信任该项目或目录本身](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder),Claude Code 都不会加载该服务器,因此其助手也永远不会运行。

1157 1168 

1158<h2 id="add-mcp-servers-from-json-configuration">1169<h2 id="add-mcp-servers-from-json-configuration">

1159 从 JSON 配置添加 MCP 服务器1170 从 JSON 配置添加 MCP 服务器


1218 </Step>1229 </Step>

1219</Steps>1230</Steps>

1220 1231 

1221通过 `claude mcp` 命令添加的服务器名称只能包含字母、数字、连字符和下划线。Claude Desktop 不应用该限制,因此名称中包含任何其他字符(如空格)的 Claude Desktop 服务器无法导入。导入会报告它拒绝的每个名称,并仍然导入您选择的其他服务器。在 v2.1.205 之前,第一个无效名称会停止导入,所选的服务器都不会被添加。1232通过 `claude mcp` 命令添加的服务器名称只能包含字母、数字、连字符和下划线。Claude Desktop 不应用该限制,因此名称中包含任何其他字符(如空格)的 Claude Desktop 服务器无法导入。导入会报告它拒绝的每个名称,并仍然导入您选择的其他服务器。

1222 1233 

1223<Tip>1234<Tip>

1224 提示:1235 提示:


1398 * 此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为各个工具调用实现用户确认。1409 * 此 MCP 服务器仅向您的 MCP 客户端公开 Claude Code 的工具,因此您自己的客户端负责为各个工具调用实现用户确认。

1399</Tip>1410</Tip>

1400 1411 

1412当 Bash 或 PowerShell 工具调用结果中的 JSON 文本包含 `backgroundOutputPath` 字段时,表示该调用使其命令[在后台](/docs/zh-CN/tools-reference#background-commands)继续运行,例如调用设置了 `run_in_background: true` 或命令达到超时的情况。该字段给出命令输出文件的路径。命令完成时不会通知您的客户端,文件也不会写入结束行,因此读取该文件时看到的是截至目前已写入的输出。要检测命令何时结束,请在命令末尾附加一个标记,例如 `npm test; echo DONE`,然后在文件中查找该标记。`backgroundOutputPath` 字段需要 Claude Code v2.1.295 或更高版本。

1413 

1401<h2 id="mcp-output-limits-and-warnings">1414<h2 id="mcp-output-limits-and-warnings">

1402 MCP 输出限制和警告1415 MCP 输出限制和警告

1403</h2>1416</h2>


1409* **默认限制**:默认最大值为 25,000 个 token1422* **默认限制**:默认最大值为 25,000 个 token

1410* **范围**:环境变量适用于未声明自己限制的工具。设置了 [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) 的工具会对文本内容使用该值,而不管 `MAX_MCP_OUTPUT_TOKENS` 设置为什么。返回图像数据的工具仍然受 `MAX_MCP_OUTPUT_TOKENS` 限制1423* **范围**:环境变量适用于未声明自己限制的工具。设置了 [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) 的工具会对文本内容使用该值,而不管 `MAX_MCP_OUTPUT_TOKENS` 设置为什么。返回图像数据的工具仍然受 `MAX_MCP_OUTPUT_TOKENS` 限制

1411* **超过限制**:当没有图像内容的成功结果超过 token 限制时,Claude Code 会将其保存到文件中,并在对话中用一条消息替换它,该消息指定文件路径,以便 Claude 在需要内容时读取该文件。该文件位于会话的 `tool-results` 目录中,在 [`~/.claude/projects/`](/docs/zh-CN/claude-directory#cleaned-up-automatically) 下。1424* **超过限制**:当没有图像内容的成功结果超过 token 限制时,Claude Code 会将其保存到文件中,并在对话中用一条消息替换它,该消息指定文件路径,以便 Claude 在需要内容时读取该文件。该文件位于会话的 `tool-results` 目录中,在 [`~/.claude/projects/`](/docs/zh-CN/claude-directory#cleaned-up-automatically) 下。

1412* **来自 HTTP 和 SSE 服务器的响应大小**:一旦某个 JSON 响应体或事件流中的某个事件在解压后超过 16 MB,Claude Code 就会停止读取来自 [HTTP](#option-1-add-a-remote-http-server) 或 [SSE](#option-2-add-a-remote-sse-server) 服务器的响应。该响应所对应的请求会失败。如果您负责维护该服务器,请减少每个响应返回的数据量以保持在限制之内,例如对结果进行分页1425* **来自 HTTP 和 SSE 服务器的响应大小**:当来自 [HTTP](#option-1-add-a-remote-http-server) 或 [SSE](#option-2-add-a-remote-sse-server) 服务器的响应超过 16 MiB 时,Claude Code 会停止读取该响应,并且请求会失败。该限制在解压后适用于单个 JSON 响应体或事件流中的单个事件。如果您负责维护该服务器,请减少每个响应返回的数据量以保持在限制之内,例如对结果进行分页

1426* **来自 WebSocket 服务器的消息大小**:当 [WebSocket](#option-4-add-a-remote-websocket-server) 服务器发送的单条消息超过 16 MiB 时,Claude Code 会[关闭连接](#mid-session-drops-of-a-remote-server),该服务器上正在进行的调用都会失败。如果您负责维护该服务器,请减少每条消息返回的数据量以保持在限制之内

1413 1427 

1414已被 Claude Code [移至后台任务](#automatic-backgrounding-of-long-tool-calls)的调用会通过任务通知报告其结果。对于在前台完成的调用,还有另外两项限制:1428已被 Claude Code [移至后台任务](#automatic-backgrounding-of-long-tool-calls)的调用会通过任务通知报告其结果。对于在前台完成的调用,还有另外两项限制:

1415 1429 


1483 1497 

1484[根级组合器处理](#tool-input-schemas-with-a-root-level-combinator) 是独立的,当标志获取关闭或标志从未到达时保持其自己的行为。1498[根级组合器处理](#tool-input-schemas-with-a-root-level-combinator) 是独立的,当标志获取关闭或标志从未到达时保持其自己的行为。

1485 1499 

1500<h2 id="tools-with-names-longer-than-128-characters">

1501 名称超过 128 个字符的工具

1502</h2>

1503 

1504如果 `/mcp` 列出了某个 Claude 无法调用的工具,请检查该工具的完整名称是否超过 128 个字符。在会话中运行 `/mcp` 并选择该工具,即可查看其完整名称,例如 `mcp__<server>__<tool>`。当 MCP 工具的完整名称超过 128 个字符时,Claude Code 会将其从发送给 Claude 的工具中排除。Claude API 会拒绝包含此类工具的请求,因此排除该工具可以确保服务器的其他工具正常工作。

1505 

1506有关指明该工具的消息以及缩短其完整名称的方法,请参阅 [MCP tool name over 128 characters](/docs/zh-CN/errors#mcp-tool-name-over-128-characters)。

1507 

1486<h2 id="require-approval-for-a-specific-tool">1508<h2 id="require-approval-for-a-specific-tool">

1487 要求对特定工具进行批准1509 要求对特定工具进行批准

1488</h2>1510</h2>


1601* Claude 应该何时搜索您的工具1623* Claude 应该何时搜索您的工具

1602* 您的服务器提供的关键功能1624* 您的服务器提供的关键功能

1603 1625 

1604Claude Code 将每个工具描述和每个服务器的说明截断为默认 2,048 个字符。保持它们简洁,并将关键细节放在开头。1626当工具描述或服务器说明超过以下默认限制时,Claude Code 会将其截断,Claude 只能看到截断点之前的文本:

1627 

1628* **服务器说明,以及预先加载的工具的描述**:4,096 个字符

1629* **Claude 通过工具搜索加载的工具的描述**:16,384 个字符

1630 

1631保持描述和说明简洁,并将关键细节放在开头。当工具搜索将 Claude 的查询与工具描述进行匹配时,它只读取较短限制范围内的部分,因此也要将 Claude 会搜索的词语放在开头附近。只要工具未被延迟,它就会预先加载并沿用较短的限制,例如当[工具搜索关闭](#configure-tool-search)时、当该工具被[标记为预先加载](#per-tool-alwaysload)时,或当其服务器[豁免延迟](#exempt-a-server-from-deferral)时。

1632 

1633在 v2.1.296 之前,较短的限制为 2,048 个字符;在 v2.1.295 之前,该限制适用于每个工具描述,包括通过工具搜索加载的工具描述。

1605 1634 

1606要更改会话中每个 MCP 服务器的限制,请将 [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/zh-CN/env-vars#variables) 设置为字符数。此变量需要 Claude Code v2.1.280 或更高版本。1635要更改会话中每个 MCP 服务器的限制,请将 [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/zh-CN/env-vars#variables) 设置为字符数。您设置的数值会同时替换这两个限制:例如,`8192` 会提高较短的限制并降低较长的限制。此变量需要 Claude Code v2.1.280 或更高版本。

1607 1636 

1608<h4 id="per-tool-alwaysload">1637<h4 id="per-tool-alwaysload">

1609 将工具标记为预先加载或保持延迟1638 将工具标记为预先加载或保持延迟


1634 1663 

1635工具搜索默认启用:MCP 工具被延迟并按需发现。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,Claude Code 会禁用它,因为大多数代理不转发 `tool_reference` 块。设置 `ENABLE_TOOL_SEARCH` 显式覆盖该回退。1664工具搜索默认启用:MCP 工具被延迟并按需发现。当 `ANTHROPIC_BASE_URL` 指向非第一方主机时,Claude Code 会禁用它,因为大多数代理不转发 `tool_reference` 块。设置 `ENABLE_TOOL_SEARCH` 显式覆盖该回退。

1636 1665 

1637设置 [`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) 涵盖了覆盖应用的位置以及变量剥离的内容。1666设置 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/zh-CN/env-vars) 保持工具搜索关闭。您无法通过自己设置 `ENABLE_TOOL_SEARCH` 来覆盖它。在 Claude Code v2.1.227 或更高版本上,您的组织可以通过[托管设置](/docs/zh-CN/managed-settings)在设置此变量的情况下保持工具搜索开启。在[获得 HIPAA 配置](/docs/zh-CN/hipaa-setup#check-how-developers-sign-in-and-connect)的会话中,工具搜索处于关闭状态,`ENABLE_TOOL_SEARCH` 和托管设置都无法将其重新开启。[禁用预发布功能](/docs/zh-CN/llm-gateway-protocol#disable-pre-release-capabilities) 涵盖了覆盖应用的位置以及变量剥离的内容。

1638 1667 

1639工具搜索需要支持 `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)。1668Claude Code 在 Claude Opus 4、Claude Sonnet 4、Claude Haiku 4.5 及更高版本的模型上使用工具搜索;在 Google Cloud 的 Agent Platform 上,则在 Opus 4.5、Sonnet 4.5、Haiku 4.5 及更高版本的模型上使用。在更早的模型上,Claude Code 预先加载所有 MCP 工具,且 `ENABLE_TOOL_SEARCH=true` 不会覆盖此行为。

1640 1669 

1641在 Google Cloud 的 Agent Platform 上,Claude Code 按模型代数决定:1670在 Google Cloud 的 Agent Platform 上,Claude Code 按模型代数决定:

1642 1671 


1649 1678 

1650| 值 | 行为 |1679| 值 | 行为 |

1651| :- | :- |1680| :- | :- |

1652| (未设置) | 所有 MCP 工具延迟并按需加载。在 Google Cloud 的 Agent Platform 早于 Claude 4.5 代的模型上、当 `ANTHROPIC_BASE_URL` 是非第一方主机时、或在 Microsoft Foundry 部署在 Azure 上时回退到预先加载 |1681| (未设置) | 所有 MCP 工具延迟并按需加载。在早于 Opus 4 和 Sonnet 4 的模型上、在 Google Cloud 的 Agent Platform 上早于 Opus 4.5、Sonnet 4.5 和 Haiku 4.5 的模型上、当 `ANTHROPIC_BASE_URL` 是非第一方主机时,或在部署在 Azure 上的 Microsoft Foundry 部署上,回退到预先加载 |

1653| `true` | 所有 MCP 工具延迟,除了在 Microsoft Foundry 部署在 Azure 上,其中服务器端拒绝仍然强制预先加载,以及在 Google Cloud 的 Agent Platform 早于 Claude 4.5 代的模型上,Claude Code 保持预先加载工具。Claude Code 通过代理发送 beta 标头,在不支持 `tool_reference` 块的代理上请求失败 |1682| `true` | 当 `ANTHROPIC_BASE_URL` 是非第一方主机时,MCP 工具保持延迟。其他(未设置)情况下的回退仍然适用。Claude Code 通过代理发送 beta 标头,在不支持 `tool_reference` 块的代理上请求失败 |

1654| `auto` | 阈值模式:Claude Code 预先加载它本来会延迟的工具,同时它们的定义总计少于上下文窗口的 10%,一旦定义达到 10% 就延迟所有工具 |1683| `auto` | 阈值模式:Claude Code 预先加载它本来会延迟的工具,同时它们的定义总计少于上下文窗口的 10%,一旦定义达到 10% 就延迟所有工具 |

1655| `auto:N` | 具有自定义百分比的阈值模式,其中 `N` 是 0-100。例如,`auto:5` 表示 5% |1684| `auto:N` | 具有自定义百分比的阈值模式,其中 `N` 是 0-100。例如,`auto:5` 表示 5% |

1656| `false` | 所有 MCP 工具预先加载,无延迟 |1685| `false` | 所有 MCP 工具预先加载,无延迟 |


1697 1726 

1698`alwaysLoad` 字段在所有服务器类型上都可用。1727`alwaysLoad` 字段在所有服务器类型上都可用。

1699 1728 

1700设置 `alwaysLoad: true` 也会使启动等待服务器的工具,上限为标准 5 秒连接超时,因为它们必须在构建第一个提示时存在。具有有效 [`cached` 条目](#server-status-detail) 的远程服务器从缓存提供其工具而无需连接,因此它不会延迟启动。其他服务器默认在后台连接;设置 [`MCP_CONNECTION_NONBLOCKING=0`](/docs/zh-CN/env-vars) 也使启动等待它们。1729设置 `alwaysLoad: true` 也会使启动等待服务器的工具,上限为标准 5 秒连接超时,因为它们必须在构建第一个提示词时存在。具有有效 [`cached` 条目](#server-status-detail) 的远程服务器从缓存提供其工具而无需连接,因此它不会延迟启动。其他服务器默认在后台连接;设置 [`MCP_CONNECTION_NONBLOCKING=0`](/docs/zh-CN/env-vars) 也使启动等待它们。

1701 1730 

1702<h3 id="defer-a-servers-tools">1731<h3 id="defer-a-servers-tools">

1703 延迟服务器的工具1732 延迟服务器的工具

memory.md +4 −4

Details

258 258 

259Claude Code 使用任何会超过预算的未展开模式,其字面大括号不匹配任何文件。在 v2.1.217 之前,具有许多大括号组的 `paths` 值在启动时使 CLI 停滞或崩溃。259Claude Code 使用任何会超过预算的未展开模式,其字面大括号不匹配任何文件。在 v2.1.217 之前,具有许多大括号组的 `paths` 值在启动时使 CLI 停滞或崩溃。

260 260 

261Glob 语法将 `[` 视为括号表达式的开始,例如 `[abc]`。具有无法读作括号表达式的 `[` 的模式,例如 `photos [2024/**`,是无效的:它不匹配任何内容,规则的其他模式继续工作。要匹配文件名中的字面 `[`,请将其转义为 `photos \[2024/**`。在 v2.1.207 之前,一个无效模式使 Read 工具对规则被评估的每个文件失败,而不是不匹配任何内容。261Glob 语法将 `[` 视为括号表达式的开始,例如 `[abc]`。具有无法读作括号表达式的 `[` 的模式,例如 `photos [2024/**`,是无效的:它不匹配任何内容,规则的其他模式继续工作。要匹配文件名中的字面 `[`,请将其转义为 `photos \[2024/**`。

262 262 

263<h4 id="rules-frontmatter-reference">263<h4 id="rules-frontmatter-reference">

264 规则 frontmatter 参考264 规则 frontmatter 参考


413 413 

414* **在会话开始时**:您的工作目录和其上方目录中的每个 `AGENTS.md` 和 `.claude/AGENTS.md`。在交互式会话中,您会看到一行,例如 `no CLAUDE.md found; AGENTS.md loaded: /home/you/repo/AGENTS.md` 在对话中414* **在会话开始时**:您的工作目录和其上方目录中的每个 `AGENTS.md` 和 `.claude/AGENTS.md`。在交互式会话中,您会看到一行,例如 `no CLAUDE.md found; AGENTS.md loaded: /home/you/repo/AGENTS.md` 在对话中

415* **当 Claude 在子目录中工作时**:当 Claude 使用 Read 工具打开该处的文件且该子目录没有三个 `CLAUDE.md` 文件中的任何一个时,子目录的 `AGENTS.md`415* **当 Claude 在子目录中工作时**:当 Claude 使用 Read 工具打开该处的文件且该子目录没有三个 `CLAUDE.md` 文件中的任何一个时,子目录的 `AGENTS.md`

416* **在每个 `AGENTS.md` 内**:[`@path` 导入](#import-additional-files)被展开,[`claudeMdExcludes`](#exclude-specific-claude-md-files) 模式适用,[跳过项目说明](/docs/zh-CN/sub-agents#what-loads-at-startup)的子代理也会跳过这些文件416* **在每个 `AGENTS.md` 内**:[`@path` 导入](#import-additional-files)被展开,[`claudeMdExcludes`](#exclude-specific-claude-md-files) 模式适用,[启动时不带项目说明](/docs/zh-CN/sub-agents#what-loads-at-startup)的子代理启动时同样不带这些文件

417* **不读取**:`AGENTS.local.md`、`AGENTS.override.md` 或 `.agents/` 目录下的任何内容417* **不读取**:`AGENTS.local.md`、`AGENTS.override.md` 或 `.agents/` 目录下的任何内容

418 418 

419<Note>419<Note>


495 495 

496## Claude Code496## Claude Code

497 497 

498对 `src/billing/` 下的更改使用计划模式。498Use plan mode for changes under `src/billing/`.

499```499```

500 500 

501如果您不需要 Claude 特定的内容,符号链接也可以工作:501如果您不需要 Claude 特定的内容,符号链接也可以工作:


692 692 

693如果您的某个指令文件超过推荐长度,您会在启动时和运行 `/status` 时看到警告。当各自都在该长度内的文件在会话开始时加起来超过组合限制时,您也会看到警告。每个 CLAUDE.md、规则文件和 `@path` 导入都计为单独的文件。693如果您的某个指令文件超过推荐长度,您会在启动时和运行 `/status` 时看到警告。当各自都在该长度内的文件在会话开始时加起来超过组合限制时,您也会看到警告。每个 CLAUDE.md、规则文件和 `@path` 导入都计为单独的文件。

694 694 

695[`/doctor`](/docs/zh-CN/commands#all-commands) 检查为已检入的 CLAUDE.md 提议修剪:它删除 Claude 可以从代码库派生的内容,例如目录布局、依赖项列表和架构概览,并保留与工具默认值不同的陷阱、基本原理和约定。修剪检查需要 Claude Code v2.1.206 或更高版本。695[`/doctor`](/docs/zh-CN/commands#all-commands) 检查为已检入的 CLAUDE.md 提议修剪:它删除 Claude 可以从代码库派生的内容,例如目录布局、依赖项列表和架构概览,并保留与工具默认值不同的陷阱、基本原理和约定。

696 696 

697<h3 id="instructions-seem-lost-after-/compact">697<h3 id="instructions-seem-lost-after-/compact">

698 在 `/compact` 后指令似乎丢失了698 在 `/compact` 后指令似乎丢失了

Details

160 使用 Bearer 令牌160 使用 Bearer 令牌

161</h4>161</h4>

162 162 

163Claude Code 在每个请求中将 `ANTHROPIC_FOUNDRY_AUTH_TOKEN` 的值作为 `Authorization: Bearer` 标头发送。当另一个进程(例如主机应用程序或登录脚本)已经为您获取了访问令牌时,请使用此选项。需要 Claude Code v2.1.203 或更高版本。163Claude Code 在每个请求中将 `ANTHROPIC_FOUNDRY_AUTH_TOKEN` 的值作为 `Authorization: Bearer` 标头发送。当另一个进程(例如主机应用程序或登录脚本)已经为您获取了访问令牌时,请使用此选项。

164 164 

165将变量设置为 Microsoft Entra ID 为您的资源颁发的 Bearer 令牌:165将变量设置为 Microsoft Entra ID 为您的资源颁发的 Bearer 令牌:

166 166 

model-config.md +3 −0

Details

867* **对于所有模型**:在设置文件中设置 [`autoCompactWindow`](/docs/zh-CN/settings-reference#autocompactwindow),例如在 `~/.claude/settings.json` 中设置 `"autoCompactWindow": 200000`。对于某个模型,您使用 `/autocompact` 为该模型保存的窗口优先于同一文件中的此键。867* **对于所有模型**:在设置文件中设置 [`autoCompactWindow`](/docs/zh-CN/settings-reference#autocompactwindow),例如在 `~/.claude/settings.json` 中设置 `"autoCompactWindow": 200000`。对于某个模型,您使用 `/autocompact` 为该模型保存的窗口优先于同一文件中的此键。

868* **对于一次启动**:启动 Claude Code 时传递 [`--autocompact`](/docs/zh-CN/cli-reference#cli-flags)。该标志会为该次启动覆盖您保存的设置,而不会更改它,`claude --autocompact auto` 会以调整的窗口运行会话,即使您保存的设置有一个值。与 `/autocompact` 不同,该标志不会被更高优先级的设置作用域(例如托管设置)抢占。868* **对于一次启动**:启动 Claude Code 时传递 [`--autocompact`](/docs/zh-CN/cli-reference#cli-flags)。该标志会为该次启动覆盖您保存的设置,而不会更改它,`claude --autocompact auto` 会以调整的窗口运行会话,即使您保存的设置有一个值。与 `/autocompact` 不同,该标志不会被更高优先级的设置作用域(例如托管设置)抢占。

869* **在脚本和云环境中**:设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/zh-CN/env-vars)。设置后,它优先于命令、标志和设置,`/autocompact` 会报告该覆盖而不是更改窗口。869* **在脚本和云环境中**:设置 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/zh-CN/env-vars)。设置后,它优先于命令、标志和设置,`/autocompact` 会报告该覆盖而不是更改窗口。

870* **对于单个子代理**:请参阅[为单个子代理设置自动压缩窗口](/docs/zh-CN/sub-agents#subagent-auto-compact-window)。

870 871 

871命令和标志接受 100K 到 1M token 的窗口大小,采用以下任何形式:872命令和标志接受 100K 到 1M token 的窗口大小,采用以下任何形式:

872 873 


888* 使用原生 1M 窗口运行的模型在窗口填满之前进行压缩,默认情况下约为 967K token。这些模型包括 Fable 模型、Sonnet 5 及更高版本、Haiku 5.5 以及 Opus 4.7 及更高版本。在自定义 `ANTHROPIC_BASE_URL` 后面,请参阅[网关后面的上下文窗口](#context-window-behind-a-gateway)889* 使用原生 1M 窗口运行的模型在窗口填满之前进行压缩,默认情况下约为 967K token。这些模型包括 Fable 模型、Sonnet 5 及更高版本、Haiku 5.5 以及 Opus 4.7 及更高版本。在自定义 `ANTHROPIC_BASE_URL` 后面,请参阅[网关后面的上下文窗口](#context-window-behind-a-gateway)

889* 在 Claude Code 不识别的模型 ID(例如 [LLM 网关](/docs/zh-CN/llm-gateway)别名)上的会话在 Claude Code 为该 ID 假设的上下文窗口处进行压缩;请参阅[为网关或自定义模型 ID 更正窗口](#correct-the-window-for-a-gateway-or-custom-model-id)890* 在 Claude Code 不识别的模型 ID(例如 [LLM 网关](/docs/zh-CN/llm-gateway)别名)上的会话在 Claude Code 为该 ID 假设的上下文窗口处进行压缩;请参阅[为网关或自定义模型 ID 更正窗口](#correct-the-window-for-a-gateway-or-custom-model-id)

890 891 

892关于 Claude Code 何时还会压缩您闲置的对话,请参阅 [`idleCompaction`](/docs/zh-CN/settings-reference#idlecompaction) 设置。

893 

891<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">894<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">

892 为网关或自定义模型 ID 更正窗口895 为网关或自定义模型 ID 更正窗口

893</h3>896</h3>

monitoring-usage.md +366 −366

Details

612 标准属性612 标准属性

613</h3>613</h3>

614 614 

615所有指标和事件都共享这些标准属性:615所有指标和事件都共享以下标准属性:

616 616 

617| 属性 | 描述 | 控制方式 |617| 属性 | 描述 | 控制方式 |

618| - | - | - |618| - | - | - |

619| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |619| `session.id` | 唯一的会话标识符 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |

620| `ccr.session.id` | 云会话标识符,`CLAUDE_CODE_REMOTE_SESSION_ID` 的值,在[云环境](/docs/zh-CN/cloud-environments)中运行的会话上 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |620| `ccr.session.id` | 云端会话标识符,即 `CLAUDE_CODE_REMOTE_SESSION_ID` 的值,仅出现在运行于[云环境](/docs/zh-CN/cloud-environments)中的会话上 | `OTEL_METRICS_INCLUDE_SESSION_ID`(默认值:true) |

621| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认值:false) |621| `app.version` | 当前 Claude Code 版本 | `OTEL_METRICS_INCLUDE_VERSION`(默认值:false) |

622| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py`、`claude-vscode` 或 Claude Tag 会话的 `claude-in-slack` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认值:false) |622| `app.entrypoint` | 会话的启动方式,例如 `cli`、`sdk-cli`、`sdk-ts`、`sdk-py`、`claude-vscode`,或用于 Claude Tag 会话的 `claude-in-slack` | `OTEL_METRICS_INCLUDE_ENTRYPOINT`(默认值:false) |

623| `organization.id` | 组织 UUID(已认证时) | 可用时始终包含 |623| `organization.id` | 组织 UUID(已进行身份验证时) | 可用时始终包含 |

624| `user.account_uuid` | 账户 UUID(已认证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |624| `user.account_uuid` | 账户 UUID(已进行身份验证时) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |

625| `user.account_id` | 与 Anthropic 管理员 API 匹配的标记格式的账户 ID(已认证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |625| `user.account_id` | 与 Anthropic 管理 API 匹配的带标签格式账户 ID(已进行身份验证时),例如 `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID`(默认值:true) |

626| `user.id` | 在首次运行时生成并保存在 `~/.claude.json` 中的随机匿名标识符。它不包含任何个人信息,也不是从您的 Claude 账户派生的。删除该文件会在下次运行时生成一个新的无关值。 | 始终包含 |626| `user.id` | 首次运行时生成并持久保存在 `~/.claude.json` 中的随机匿名标识符。它不包含任何个人信息,也不是从您的 Claude 账户派生的。删除该文件后,下次运行时会生成一个新的、不相关的值。 | 始终包含 |

627| `user.email` | 用户电子邮件地址,来自您的登录或在[云会话](/docs/zh-CN/claude-code-on-the-web)中来自会话自己的凭证 | 可用时始终包含 |627| `user.email` | 用户电子邮件地址,来自您的登录信息,或者在[云端会话](/docs/zh-CN/claude-code-on-the-web)中来自该会话自身的凭据 | 可用时始终包含 |

628| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |628| `terminal.type` | 终端类型,例如 `iTerm.app`、`vscode`、`cursor` 或 `tmux` | 检测到时始终包含 |

629| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅[多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认值:true) |629| `OTEL_RESOURCE_ATTRIBUTES` 中的键 | 您设置的自定义属性,例如 `department` 或 `team.id`。请参阅[多团队组织支持](#multi-team-organization-support) | `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`(默认值:true) |

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

631 631 

632在通过 `/login` 登录到[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)的会话中,CLI 会使用已认证身份标记导出:`user.id` 是 IdP 主体,`user.email` 是已登录的电子邮件,`user.groups` 以逗号分隔的字符串形式携带 IdP 组成员身份。每个导出还携带 `identity.source: gateway-oidc`。网关身份最后应用,因此通过 `OTEL_RESOURCE_ATTRIBUTES` 设置的 `user.*` 和 `identity.*` 键在这些会话上被忽略。632在通过 `/login` 登录到 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)的会话中,CLI 会在导出数据上标记经过身份验证的身份:`user.id` 是 IdP 主体,`user.email` 是登录的电子邮件,`user.groups` 以逗号分隔字符串的形式携带 IdP 组成员身份。每次导出还会携带 `identity.source: gateway-oidc`。网关身份最后应用,因此在这些会话中,通过 `OTEL_RESOURCE_ATTRIBUTES` 设置的 `user.*` 和 `identity.*` 键会被忽略。

633 633 

634<Note>634<Note>

635 Claude Code 在开发者登录之前记录的事件不携带网关身份。当 Claude Code 以未登录网关的状态打开会话时(例如在[网关结束登录](/docs/zh-CN/errors#cloud-gateway-session-expired)之后),登录前记录的启动事件会携带匿名 `user.id`,且不含 `identity.source`。这些事件包括 [`managed_settings_resolved`](#managed-settings-resolved-event)、[`plugin_loaded`](#plugin-loaded-event) 和 [`mcp_server_connection`](#mcp-server-connection-event)。635 Claude Code 在开发者登录之前记录的事件不携带网关身份。当 Claude Code 在未登录网关的状态下打开会话时(例如在[网关结束登录](/docs/zh-CN/errors#cloud-gateway-session-expired)之后),登录前记录的启动事件携带匿名的 `user.id`,且不带 `identity.source`。这些事件包括 [`managed_settings_resolved`](#managed-settings-resolved-event)、[`plugin_loaded`](#plugin-loaded-event) 和 [`mcp_server_connection`](#mcp-server-connection-event)。

636</Note>636</Note>

637 637 

638对于通过网关连接的 Claude Desktop 和 Cowork 会话上的身份属性,请参阅[网关 `telemetry` 参考](/docs/zh-CN/claude-apps-gateway-config#telemetry)。638有关通过网关连接的 Claude Desktop 和 Cowork 会话上的身份属性,请参阅[网关 `telemetry` 参考](/docs/zh-CN/claude-apps-gateway-config#telemetry)。

639 639 

640事件另外包括以下属性。这些永远不会附加到指标,因为它们会导致无限的基数:640事件还额外包含以下属性。这些属性永远不会附加到指标上,因为它们会导致无界基数:

641 641 

642* `prompt.id`:UUID,将用户提示与所有后续事件关联到下一个提示。请参阅[事件关联属性](#event-correlation-attributes)。642* `prompt.id`:将用户提示词与其后直到下一个提示词之前的所有事件关联起来的 UUID。请参阅[事件关联属性](#event-correlation-attributes)。

643* `workspace.host_paths`:在桌面应用中选择的主机工作区目录,作为字符串数组643* `workspace.host_paths`:在桌面应用中选择的主机工作区目录,以字符串数组形式表示

644* `workflow.run_id`:运行标识符,前缀为 `wf_`,在 API 和工具事件上,由属于[工作流](/docs/zh-CN/workflows)工具运行的代理发出。按一个 `workflow.run_id` 过滤事件可以重建该运行的 API 请求和工具结果。该标识符涵盖工作流脚本生成的代理以及这些代理依次生成的任何代理,例如技能调用。它与工作流工具结果中报告的运行标识符匹配。在所有其他事件上不存在。需要 Claude Code v2.1.202 或更高版本644* `workflow.run_id`:运行标识符,以 `wf_` 为前缀,出现在属于某次 [Workflow](/docs/zh-CN/workflows) 工具运行的 Agent 所发出的 API 和工具事件上。按某个 `workflow.run_id` 过滤事件即可重建该次运行的 API 请求和工具结果。该标识符涵盖工作流脚本生成的 Agent,以及这些 Agent 进一步生成的任何 Agent,例如 skill 调用。它与 Workflow 工具结果中报告的运行标识符一致。其他所有事件上均不存在该属性。

645* `workflow.name`:工作流的名称,其脚本的 `meta.name`,与 `workflow.run_id` 一起发出。内置工作流名称在运行未修改的内置脚本时逐字显示。用户创作的名称(包括内置脚本的编辑副本)被替换为 `custom`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。需要 Claude Code v2.1.202 或更高版本645* `workflow.name`:工作流的名称,即其脚本的 `meta.name`,与 `workflow.run_id` 一起发出。当运行执行未经修改的内置脚本时,内置工作流名称按原样显示。用户编写的名称(包括内置脚本的编辑副本)会被替换为 `custom`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`。

646 646 

647<h4 id="repository-attributes">647<h4 id="repository-attributes">

648 存储库属性648 仓库属性

649</h4>649</h4>

650 650 

651设置 `OTEL_METRICS_INCLUDE_REPOSITORY=true` 以使用会话存储库的身份标记指标和事件,以便共享收集器可以按存储库属性使用情况。需要 Claude Code v2.1.269 或更高版本。651设置 `OTEL_METRICS_INCLUDE_REPOSITORY=true` 可以用会话仓库的身份来标记指标和事件,以便共享收集器能够按仓库归因使用情况。需要 Claude Code v2.1.269 或更高版本。

652 652 

653Claude Code 每个会话从存储库的 `origin` 远程派生这些属性一次。当存储库的 HTTPS 和 SSH 远程命名相同的主机和相同的路径时(如在 GitHub、GitLab 和 Bitbucket Cloud 上一样),两者都会产生相同的值:653Claude Code 每个会话从仓库的 `origin` 远程派生一次这些属性。当仓库的 HTTPS 和 SSH 远程指向相同的主机和相同的路径时(如在 GitHub、GitLab 和 Bitbucket Cloud 上),两者会产生相同的值:

654 654 

655| 属性 | 值 |655| 属性 | 值 |

656| - | - |656| - | - |

657| `vcs.repository.url.full` | 存储库的浏览器 URL,不带 `.git`,例如 `https://github.com/example-org/example-repo` |657| `vcs.repository.url.full` | 不带 `.git` 的仓库浏览器 URL,例如 `https://github.com/example-org/example-repo` |

658| `vcs.owner.name` | 所有者或组路径,例如 `example-org`;当远程路径只有一个段时省略 |658| `vcs.owner.name` | 所有者或组路径,例如 `example-org`;当远程路径只有一个段时省略 |

659| `vcs.repository.name` | 裸存储库名称,例如 `example-repo` |659| `vcs.repository.name` | 纯仓库名称,例如 `example-repo` |

660| `vcs.provider.name` | 当 Claude Code 将远程的主机或 URL 形状识别为这些提供商之一时为 `github`、`gitlab`、`bitbucket` 或 `gitea`;否则省略 |660| `vcs.provider.name` | 当 Claude Code 将远程的主机或 URL 形式识别为 `github`、`gitlab`、`bitbucket` 或 `gitea` 之一时为相应的值;否则省略 |

661 661 

662值被小写,远程 URL 中的凭证、查询字符串和片段永远不会出现在其中。当会话没有 `origin` 远程、远程不是 URL 形状或唯一的封闭存储库是您的主目录时,属性被省略。662这些值会转换为小写,且远程 URL 中的凭据、查询字符串和片段永远不会出现在其中。当会话没有 `origin` 远程、远程不是 URL 形式,或者唯一的外层仓库是您的主目录时,这些属性会被省略。

663 663 

664要从[云会话](/docs/zh-CN/claude-code-on-the-web)获取这些属性,请在其[云环境](/docs/zh-CN/cloud-environments#set-environment-variables)上设置遥测变量,包括 `OTEL_METRICS_INCLUDE_REPOSITORY`。还要在环境的[网络访问](/docs/zh-CN/cloud-environments#network-access)中允许您的收集器域。664要从[云端会话](/docs/zh-CN/claude-code-on-the-web)获取这些属性,请在其[云环境](/docs/zh-CN/cloud-environments#set-environment-variables)中设置遥测变量,包括 `OTEL_METRICS_INCLUDE_REPOSITORY`。还需要在该环境的[网络访问](/docs/zh-CN/cloud-environments#network-access)中允许您的收集器域名。

665 665 

666您在 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) 中声明的 `vcs.*` 键会替换该键的派生值。如果您声明 `vcs.repository.url.full`,Claude Code 永远不会读取远程,只报告您声明的键。666您在 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) 中声明的 `vcs.*` 键会替换该键的派生值。如果您声明了 `vcs.repository.url.full`,Claude Code 将永远不会读取远程,并且只报告您声明的键。

667 667 

668如果一个存储库的 HTTPS 和 SSH 克隆报告不同的值,例如在自托管安装中,其 HTTPS 克隆 URL 携带 SSH URL 缺少的路径前缀,请在 `OTEL_RESOURCE_ATTRIBUTES` 中声明 `vcs.repository.url.full` 以及您想要报告的所有其他 `vcs.*` 键。然后每个克隆都报告您声明的身份。668如果同一仓库的 HTTPS 和 SSH 克隆报告不同的值(例如在自托管安装中,HTTPS 克隆 URL 带有 SSH URL 所没有的路径前缀),请在 `OTEL_RESOURCE_ATTRIBUTES` 中声明 `vcs.repository.url.full` 以及您希望报告的所有其他 `vcs.*` 键。之后每个克隆都会报告您声明的身份。

669 669 

670属性仅流向您自己的导出器;Anthropic 的遥测会删除每个 `vcs.*` 键。670这些属性只会流向您自己的导出器;Anthropic 的遥测会丢弃所有 `vcs.*` 键。

671 671 

672<h3 id="metrics">672<h3 id="metrics">

673 指标673 指标

674</h3>674</h3>

675 675 

676Claude Code 导出以下指标。单位列显示附加到每个指标的 OpenTelemetry 单位字符串;计数指标不携带任何单位。676Claude Code 导出以下指标。"单位"列显示附加到每个指标的 OpenTelemetry 单位字符串;计数类指标不带单位。

677 677 

678| 指标名称 | 描述 | 单位 |678| 指标名称 | 描述 | 单位 |

679| - | - | - |679| - | - | - |

680| `claude_code.session.count` | 启动的 CLI 会话计数 | 无 |680| `claude_code.session.count` | 已启动的 CLI 会话计数 | 无 |

681| `claude_code.lines_of_code.count` | 修改的代码行计数 | 无 |681| `claude_code.lines_of_code.count` | 已修改的代码行数计数 | 无 |

682| `claude_code.pull_request.count` | 创建的拉取请求数 | 无 |682| `claude_code.pull_request.count` | 已创建的 Pull Request 数量 | 无 |

683| `claude_code.commit.count` | 创建的 git 提交数 | 无 |683| `claude_code.commit.count` | 已创建的 git 提交数量 | 无 |

684| `claude_code.cost.usage` | Claude Code 会话的成本 | USD |684| `claude_code.cost.usage` | Claude Code 会话的成本 | USD |

685| `claude_code.token.usage` | 使用的令牌数 | tokens |685| `claude_code.token.usage` | 使用的 token 数量 | tokens |

686| `claude_code.code_edit_tool.decision` | 代码编辑工具权限决策计数 | 无 |686| `claude_code.code_edit_tool.decision` | 代码编辑工具权限决策的计数 | 无 |

687| `claude_code.active_time.total` | 总活跃时间 | s |687| `claude_code.active_time.total` | 总活跃时间 | s |

688 688 

689当 `prometheus` 是 `OTEL_METRICS_EXPORTER` 中列出的唯一导出器时,Claude Code 会从导出的指标中省略 `USD`、`tokens` 和 `s` 单位,以便抓取保持有效的 Prometheus 文本格式。指标名称不会改变,组合导出器的配置(例如 `otlp,prometheus`)保留单位。在 v2.1.216 之前,Prometheus 抓取包含一些抓取器拒绝的仅 OpenMetrics 的 `# UNIT` 行。689当 `prometheus` 是 `OTEL_METRICS_EXPORTER` 中列出的唯一导出器时,Claude Code 会从导出的指标中省略 `USD`、`tokens` 和 `s` 单位,以使抓取结果保持为有效的 Prometheus 文本格式。指标名称不会改变,组合多个导出器的配置(例如 `otlp,prometheus`)会保留单位。在 v2.1.216 之前,Prometheus 抓取结果包含仅适用于 OpenMetrics 的 `# UNIT` 行,某些抓取器会拒绝这些行。

690 690 

691<h3 id="metric-details">691<h3 id="metric-details">

692 指标详情692 指标详情

693</h3>693</h3>

694 694 

695每个指标都包括上面列出的标准属性。具有额外上下文特定属性的指标如下所述。695每个指标都包含上面列出的标准属性。下面注明了带有额外上下文特定属性的指标。

696 696 

697<h4 id="session-counter">697<h4 id="session-counter">

698 会话计数器698 会话计数器


703**属性**:703**属性**:

704 704 

705* 所有[标准属性](#standard-attributes)705* 所有[标准属性](#standard-attributes)

706* `start_type`:会话的启动方式。`"fresh"`、`"resume"`、`"continue"` 或 `"agents_view"` 之一。`"agents_view"` 值标识 `claude agents` 仪表板进程,这是用户启动的本地 UI 而不是对话会话。在此值上过滤以在您的仪表板中将 UI 进程启动与对话会话分开。706* `start_type`:会话的启动方式。取值为 `"fresh"`、`"resume"`、`"continue"` 或 `"agents_view"` 之一。`"agents_view"` 值标识 `claude agents` 仪表板进程,这是一个由用户启动的本地 UI,而不是对话会话。在仪表板中按此值过滤,可以将 UI 进程启动与对话会话区分开来。

707 707 

708<h4 id="lines-of-code-counter">708<h4 id="lines-of-code-counter">

709 代码行计数器709 代码行数计数器

710</h4>710</h4>

711 711 

712当添加或删除代码时递增。712在添加或删除代码时递增。

713 713 

714**属性**:714**属性**:

715 715 

716* 所有[标准属性](#standard-attributes)716* 所有[标准属性](#standard-attributes)

717* `type`:(`"added"`、`"removed"`)717* `type`:(`"added"`、`"removed"`)

718* `model`:进行更改的模型的模型标识符(例如,"claude-sonnet-5")718* `model`:进行更改的模型的模型标识符(例如 "claude-sonnet-5")

719 719 

720<h4 id="pull-request-counter">720<h4 id="pull-request-counter">

721 拉取请求计数器721 Pull Request 计数器

722</h4>722</h4>

723 723 

724当 Claude Code 通过 shell 命令或 MCP 工具创建拉取请求或合并请求时递增。724当 Claude Code 通过 shell 命令或 MCP 工具创建 Pull Request 或合并请求时递增。

725 725 

726**属性**:726**属性**:

727 727 


741 成本计数器741 成本计数器

742</h4>742</h4>

743 743 

744在每个 API 请求后递增。744在每次 API 请求后递增。

745 745 

746`agent.name`、`skill.name`、`plugin.name`、`mcp_server.name` 和 `mcp_tool.name` 属性默认将某些名称编辑为 `"custom"` 或 `"third-party"` 占位符。如果您设置 `OTEL_LOG_TOOL_DETAILS=1`,它们会改为携带真实名称。在 v2.1.273 之前,成本和令牌计数器以及 `api_request`、`api_error` 和 `api_refusal` 事件即使设置了 `OTEL_LOG_TOOL_DETAILS=1` 也携带编辑后的值。746`agent.name`、`skill.name`、`plugin.name`、`mcp_server.name` 和 `mcp_tool.name` 属性默认都会将某些名称编辑为 `"custom"` 或 `"third-party"` 占位符。如果您设置了 `OTEL_LOG_TOOL_DETAILS=1`,它们会改为携带真实名称。在 v2.1.273 之前,即使设置了 `OTEL_LOG_TOOL_DETAILS=1`,成本和 token 计数器以及 `api_request`、`api_error` 和 `api_refusal` 事件仍携带编辑后的值。

747 747 

748**属性**:748**属性**:

749 749 

750* 所有[标准属性](#standard-attributes)750* 所有[标准属性](#standard-attributes)

751* `model`:模型标识符(例如,"claude-sonnet-5")751* `model`:模型标识符(例如 "claude-sonnet-5")

752* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一752* `query_source`:发出请求的子系统类别。取值为 `"main"`、`"subagent"` 或 `"auxiliary"` 之一

753* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在753* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在

754* `effort`:应用于请求的[努力级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当 Claude Code 不发送努力级别时不存在,例如在不支持努力的模型上。754* `effort`:应用于请求的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当 Claude Code 未发送 effort 级别时不存在,例如在不支持 effort 的模型上。

755* `agent.name`:发出请求的子代理类型。内置代理名称和来自官方市场插件的代理逐字显示。其他用户定义的代理名称被替换为 `"custom"`。当请求不是由命名的子代理类型发出时不存在。755* `agent.name`:发出请求的子代理类型。内置 Agent 名称和来自官方市场插件的 Agent 按原样显示。其他用户定义的 Agent 名称会被替换为 `"custom"`。当请求不是由命名的子代理类型发出时不存在。

756* `skill.name`:对请求活跃的技能,由技能工具或 `/` 命令设置,或由生成的子代理继承。内置、捆绑、用户定义和官方市场插件技能名称逐字显示。第三方插件技能名称被替换为 `"third-party"`。当没有技能活跃时不存在。756* `skill.name`:请求活跃的 skill,由 Skill 工具或 `/` 命令设置,或由生成的子代理继承。内置、捆绑、用户定义以及官方市场插件的 skill 名称按原样显示。第三方插件的 skill 名称会被替换为 `"third-party"`。当没有活跃的 skill 时不存在。

757* `plugin.name`:当活跃的技能或子代理由插件提供时的所有者插件。官方市场插件名称逐字显示。第三方插件名称被替换为 `"third-party"`。当技能和子代理都没有所有者插件时不存在。757* `plugin.name`:当活跃的 skill 或子代理由插件提供时,为所属插件。官方市场插件名称按原样显示。第三方插件名称会被替换为 `"third-party"`。当 skill 和子代理都没有所属插件时不存在。

758* `marketplace.name`:所有者插件安装的市场。仅对官方市场插件发出,即使设置了 `OTEL_LOG_TOOL_DETAILS=1`。否则不存在。758* `marketplace.name`:所属插件的安装来源市场。即使设置了 `OTEL_LOG_TOOL_DETAILS=1`,也仅针对官方市场插件发出。否则不存在。

759* `mcp_server.name`:其工具结果此请求消耗的 MCP 服务器。内置、claude.ai 代理和官方注册表服务器名称逐字显示。用户配置的服务器名称被替换为 `"custom"`。当请求没有消耗 MCP 工具结果时不存在。在 v2.1.222 之前,Claude Code 在每个 MCP 工具调用后的请求上设置此属性,而不仅仅在消耗工具结果的请求上,因此聚合它的仪表板在升级后显示下降。759* `mcp_server.name`:此请求所使用的工具结果对应的 MCP 服务器。内置、claude.ai 代理以及官方注册表的服务器名称按原样显示。用户配置的服务器名称会被替换为 `"custom"`。当请求未使用任何 MCP 工具结果时不存在。在 v2.1.222 之前,Claude Code 会在 MCP 工具调用之后的每个请求上设置此属性,而不仅仅是在使用了工具结果的请求上,因此在您升级后,聚合此属性的仪表板会显示数值下降。

760* `mcp_tool.name`:其结果此请求消耗的 MCP 工具,具有与 `mcp_server.name` 相同的编辑和版本行为。当请求没有消耗 MCP 工具结果时不存在。760* `mcp_tool.name`:此请求所使用的结果对应的 MCP 工具,其编辑和版本行为与 `mcp_server.name` 相同。当请求未使用任何 MCP 工具结果时不存在。

761 761 

762<h4 id="token-counter">762<h4 id="token-counter">

763 令牌计数器763 Token 计数器

764</h4>764</h4>

765 765 

766在每个 API 请求后递增。766在每次 API 请求后递增。

767 767 

768**属性**:768**属性**:

769 769 

770* 所有[标准属性](#standard-attributes)770* 所有[标准属性](#standard-attributes)

771* `type`:(`"input"`、`"output"`、`"cacheRead"`、`"cacheCreation"`)。`"input"` 类型不包括从提示词缓存读取或写入提示词缓存的 token,这些 token 分别计入 `"cacheRead"` 和 `"cacheCreation"`771* `type`:(`"input"`、`"output"`、`"cacheRead"`、`"cacheCreation"`)。`"input"` 类型不包括从提示词缓存读取或写入提示词缓存的 token,这些 token 计入 `"cacheRead"` 和 `"cacheCreation"`

772* `model`:模型标识符(例如,"claude-sonnet-5")772* `model`:模型标识符(例如 "claude-sonnet-5")

773* `query_source`:发出请求的子系统的类别。`"main"`、`"subagent"` 或 `"auxiliary"` 之一773* `query_source`:发出请求的子系统类别。取值为 `"main"`、`"subagent"` 或 `"auxiliary"` 之一

774* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在774* `speed`:当请求使用快速模式时为 `"fast"`。否则不存在

775* `effort`:应用于请求的[努力级别](/docs/zh-CN/model-config#adjust-effort-level)。有关详情,请参阅[成本计数器](#cost-counter)。775* `effort`:应用于请求的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。详情请参阅[成本计数器](#cost-counter)。

776* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 属性。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。776* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的 skill、插件、Agent 和 MCP 归因。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。

777 777 

778<h4 id="code-edit-tool-decision-counter">778<h4 id="code-edit-tool-decision-counter">

779 代码编辑工具决策计数器779 代码编辑工具决策计数器

780</h4>780</h4>

781 781 

782当用户接受或拒绝 Edit、Write 或 NotebookEdit 工具使用时递增。782当用户接受或拒绝 Edit、Write 或 NotebookEdit 工具的使用时递增。

783 783 

784**属性**:784**属性**:

785 785 

786* 所有[标准属性](#standard-attributes)786* 所有[标准属性](#standard-attributes)

787* `tool_name`:工具名称(`"Edit"`、`"Write"`、`"NotebookEdit"`)787* `tool_name`:工具名称(`"Edit"`、`"Write"`、`"NotebookEdit"`)

788* `decision`:用户决策(`"accept"`、`"reject"`)788* `decision`:用户决策(`"accept"`、`"reject"`)

789* `source`:决策来自何处。`"config"`、`"hook"`、`"user_permanent"`、`"user_temporary"`、`"user_abort"` 或 `"user_reject"` 之一。请参阅[工具决策事件](#tool-decision-event)了解每个值的含义。789* `source`:决策的来源。取值为 `"config"`、`"hook"`、`"user_permanent"`、`"user_temporary"`、`"user_abort"` 或 `"user_reject"` 之一。有关每个值的含义,请参阅[工具决策事件](#tool-decision-event)。

790* `language`:编辑文件的编程语言,例如 `"TypeScript"`、`"Python"`、`"JavaScript"` 或 `"Markdown"`。对于无法识别的文件扩展名返回 `"unknown"`。790* `language`:被编辑文件的编程语言,例如 `"TypeScript"`、`"Python"`、`"JavaScript"` 或 `"Markdown"`。对于无法识别的文件扩展名,返回 `"unknown"`。

791 791 

792<h4 id="active-time-counter">792<h4 id="active-time-counter">

793 活跃时间计数器793 活跃时间计数器

794</h4>794</h4>

795 795 

796跟踪实际花费在积极使用 Claude Code 上的时间,不包括空闲时间。此指标在用户交互期间递增,例如键入和阅读响应,以及在 CLI 处理期间,例如工具执行和 AI 响应生成。796跟踪实际主动使用 Claude Code 的时间,不包括空闲时间。此指标在用户交互期间(例如输入和阅读回复)以及 CLI 处理期间(例如工具执行和 AI 回复生成)递增。

797 797 

798**属性**:798**属性**:

799 799 

800* 所有[标准属性](#standard-attributes)800* 所有[标准属性](#standard-attributes)

801* `type`:`"user"` 用于键盘交互,`"cli"` 用于工具执行和 AI 响应801* `type`:`"user"` 表示键盘交互,`"cli"` 表示工具执行和 AI 回复

802 802 

803<h3 id="events">803<h3 id="events">

804 事件804 事件


810 事件关联属性810 事件关联属性

811</h4>811</h4>

812 812 

813当用户提交提示时,Claude Code 可能会进行多个 API 调用并运行多个工具。`prompt.id` 属性让您将所有这些事件与触发它们的单个提示联系起来。813当用户提交提示词时,Claude Code 可能会进行多次 API 调用并运行多个工具。`prompt.id` 属性可以将所有这些事件关联回触发它们的单个提示词。

814 814 

815| 属性 | 描述 |815| 属性 | 描述 |

816| - | - |816| - | - |

817| `prompt.id` | UUID v4 标识符,链接处理单个用户提示时产生的所有事件 |817| `prompt.id` | UUID v4 标识符,关联处理单个用户提示词期间产生的所有事件 |

818| `event.sequence` | 用于排序事件的基于 0 的计数器,按 Claude Code 进程而不是按会话计数 |818| `event.sequence` | 用于对事件排序的从 0 开始的计数器,按 Claude Code 进程计数,而不是按会话计数 |

819| `message.uuid` | 消息的 UUID,如会话记录中保存的,`~/.claude/projects/*/*.jsonl` 文件。存在于 `assistant_response`、`api_response_body` 和 `user_prompt` 上,除了命令调度,它可以产生零个或多个消息。在 `assistant_response` 和 `api_response_body` 上,这是响应的最终记录条目,下一轮的 `parentUuid` 从其链接。需要 Claude Code v2.1.214 或更高版本,或在 `api_response_body` 上需要 v2.1.274 或更高版本 |819| `message.uuid` | 持久保存在会话记录(即 `~/.claude/projects/*/*.jsonl` 文件)中的消息的 UUID。出现在 `assistant_response`、`api_response_body` 和 `user_prompt` 上,但命令分派除外,因为命令分派可能产生零条或多条消息。在 `assistant_response` 和 `api_response_body` 上,这是响应的最后一个会话记录条目,下一轮次的 `parentUuid` 从它链接。需要 Claude Code v2.1.214 或更高版本,在 `api_response_body` 上需要 v2.1.274 或更高版本 |

820| `request_id` | 服务器分配的 API 请求 ID,从 `request-id` 响应头读取,例如 `req_011...`。在没有 `request-id` 头的响应上,如在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 上,值来自 `x-amzn-requestid` 头。存在于 `api_request`、`api_error`、`api_refusal`、`assistant_response` 和 `api_response_body` 上,当响应携带任一头时。与 `llm_request` 跟踪跨度上的相同属性匹配。`x-amzn-requestid` 源需要 Claude Code v2.1.282 或更高版本 |820| `request_id` | 服务器分配的 API 请求 ID,从 `request-id` 响应头读取,例如 `req_011...`。对于没有 `request-id` 头的响应(如在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock) 上),该值改为来自 `x-amzn-requestid` 头。当响应携带任一头时,出现在 `api_request`、`api_error`、`api_refusal`、`assistant_response` 和 `api_response_body` 上。与 `llm_request` 追踪 span 上的同名属性相匹配。`x-amzn-requestid` 来源需要 Claude Code v2.1.282 或更高版本 |

821| `client_request_id` | 作为 `x-client-request-id` 请求头发送的客户端生成的 UUID。存在于第一方 API 连接上的 `api_request` 和 `api_error` 上;在第三方提供商后端上不存在,当请求通过非流式回退重试时。将请求与其响应配对,并对于超时等从未产生服务器 `request_id` 的失败保持可用。与 `llm_request` 跟踪跨度上的相同属性匹配。需要 Claude Code v2.1.214 或更高版本 |821| `client_request_id` | 客户端生成的 UUID,作为 `x-client-request-id` 请求头发送。在第一方 API 连接上出现在 `api_request` 和 `api_error` 上;在第三方提供商后端上,以及请求通过非流式回退进行重试时不存在。它将请求与其响应配对,并且对于从未产生服务器 `request_id` 的失败(例如超时)仍然可用。与 `llm_request` 追踪 span 上的同名属性相匹配。需要 Claude Code v2.1.214 或更高版本 |

822 822 

823要跟踪由单个提示触发的所有活动,请按特定 `prompt.id` 值过滤您的事件。这会返回 user\_prompt 事件、任何 api\_request 事件以及处理该提示时发生的任何 tool\_result 事件。823要追踪由单个提示词触发的所有活动,请按特定的 `prompt.id` 值过滤您的事件。这会返回处理该提示词期间发生的 user\_prompt 事件、所有 api\_request 事件以及所有 tool\_result 事件。

824 824 

825`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` 排序共享时间戳的事件。825每次 Claude Code 进程启动时,`event.sequence` 从 0 开始,并在该进程的生命周期内递增。它在 `/clear` 之后继续计数,`/clear` 会分配一个新的 `session.id`。如果您[在不分叉的情况下恢复会话](/docs/zh-CN/how-claude-code-works#resume-or-fork-sessions),会话会保留其 `session.id`,但其 `event.sequence` 值来自恢复它的进程,因此在同一会话中,较晚的事件可能携带比较早事件更低的值,或者重复某个值。要对会话的事件排序,请按 `event.timestamp` 排序,并使用 `event.sequence` 对共享同一时间戳的事件进行排序。

826 826 

827对于消息级别的重建,每个事件类都携带一个与会话记录中的字段匹配的键。记录条目格式是[Claude Code 内部的](/docs/zh-CN/sessions#where-transcripts-are-stored),在版本之间变化,因此在这些字段上联接的管道可能在任何版本上中断;将联接视为版本特定的而不是稳定的合同:827为了进行消息级别的重建,每类事件都携带一个与会话记录中某个字段匹配的键。会话记录的条目格式[属于 Claude Code 内部实现](/docs/zh-CN/sessions#where-transcripts-are-stored),并且会在版本之间变化,因此基于这些字段进行关联的管道可能在任何版本发布时失效;请将这些关联视为特定于版本的,而不是稳定的约定:

828 828 

829* `message.uuid` 在 `user_prompt`、`assistant_response` 和 `api_response_body` 上829* `user_prompt`、`assistant_response` 和 `api_response_body` 上的 `message.uuid`

830* `request_id` 在 API 事件上,在记录的助手条目上保存为 `requestId`830* API 事件上的 `request_id`,在会话记录的 assistant 条目中持久保存为 `requestId`

831* `tool_use_id` 在 `tool_result` 和 `tool_decision` 事件上831* `tool_result` 和 `tool_decision` 事件上的 `tool_use_id`

832 832 

833<h4 id="user-prompt-event">833<h4 id="user-prompt-event">

834 用户提示事件834 用户提示词事件

835</h4>835</h4>

836 836 

837在提交提示词时记录,包括 Claude Code 自行开始的轮次。837在提交提示词时记录,包括 Claude Code 自行启动的轮次。

838 838 

839**事件名称**:`claude_code.user_prompt`839**事件名称**:`claude_code.user_prompt`

840 840 


843* 所有[标准属性](#standard-attributes)843* 所有[标准属性](#standard-attributes)

844* `event.name`:`"user_prompt"`844* `event.name`:`"user_prompt"`

845* `event.timestamp`:ISO 8601 时间戳845* `event.timestamp`:ISO 8601 时间戳

846* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述846* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

847* `prompt_length`:提示的长度847* `prompt_length`:提示词的长度

848* `prompt`:提示内容。默认编辑。设置 `OTEL_LOG_USER_PROMPTS=1` 以包含它848* `prompt`:提示词内容。默认已编辑。设置 `OTEL_LOG_USER_PROMPTS=1` 以包含它

849* `prompt_text`:与 `prompt` 的值相同,受相同的开关控制脱敏。将带点属性名存储为嵌套对象的后端会把 `prompt.id` 读作名为 `prompt` 的对象中的 `id`,从而可能丢失提示词字符串。在这类后端中,请改为读取 `prompt_text`。需要 Claude Code v2.1.287 或更高版本849* `prompt_text`:与 `prompt` 相同的值,在相同的条件下编辑。将带点的属性名称存储为嵌套对象的后端会将 `prompt.id` 读取为名为 `prompt` 的对象中的 `id`,从而可能丢失提示词字符串。在这种情况下请改为读取 `prompt_text`。需要 Claude Code v2.1.287 或更高版本

850* `message.uuid`:生成的用户消息的 UUID,与保存的记录条目匹配。在命令调度上不存在,它可以产生零个或多个消息。需要 Claude Code v2.1.214 或更高版本850* `message.uuid`:生成的用户消息的 UUID,与持久保存的会话记录条目相匹配。在命令分派上不存在,因为命令分派可能产生零条或多条消息。需要 Claude Code v2.1.214 或更高版本

851* `command_name`:当提示调用一个时的命令名称。内置和捆绑命令名称如 `compact` 或 `debug` 按原样发出;别名如 `reset` 按键入的方式发出而不是规范名称。自定义、插件和 MCP 命令名称折叠为 `custom` 或 `mcp`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`851* `command_name`:当提示词调用命令时的命令名称。内置和捆绑的命令名称(例如 `compact` 或 `debug`)按原样发出;别名(例如 `reset`)按输入的形式发出,而不是规范名称。自定义、插件和 MCP 命令名称会折叠为 `custom` 或 `mcp`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`

852* `command_source`:命令存在时的来源:`builtin`、`custom` 或 `mcp`。插件提供的命令报告为 `custom`852* `command_source`:存在命令时命令的来源:`builtin`、`custom` 或 `mcp`。插件提供的命令报告为 `custom`

853 853 

854<h4 id="assistant-response-event">854<h4 id="assistant-response-event">

855 助手响应事件855 助手回复事件

856</h4>856</h4>

857 857 

858在每个从模型返回文本内容的 API 请求之后记录。仅包含响应的文本块;思考块和工具使用块会被排除。858在每次从模型返回文本内容的 API 请求之后记录。仅包含响应的文本块;思考块和工具使用块被排除在外。

859 859 

860**事件名称**:`claude_code.assistant_response`860**事件名称**:`claude_code.assistant_response`

861 861 


864* 所有[标准属性](#standard-attributes)864* 所有[标准属性](#standard-attributes)

865* `event.name`:`"assistant_response"`865* `event.name`:`"assistant_response"`

866* `event.timestamp`:ISO 8601 时间戳866* `event.timestamp`:ISO 8601 时间戳

867* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述867* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

868* `response_length`:响应文本的长度(以字符为单位)868* `response_length`:回复文本的长度(以字符为单位)

869* `response`:响应文本,在内容限制处截断(默认 60 KB)。默认编辑为 `<REDACTED>`。设置 `OTEL_LOG_ASSISTANT_RESPONSES=1` 以包含它。当 `OTEL_LOG_ASSISTANT_RESPONSES` 未设置时,`OTEL_LOG_USER_PROMPTS` 控制它,因此设置 `OTEL_LOG_ASSISTANT_RESPONSES=0` 以在启用提示日志记录时保持响应编辑869* `response`:回复文本,在内容限制处截断(默认 60 KB)。默认编辑为 `<REDACTED>`。设置 `OTEL_LOG_ASSISTANT_RESPONSES=1` 以包含它。当未设置 `OTEL_LOG_ASSISTANT_RESPONSES` 时,改由 `OTEL_LOG_USER_PROMPTS` 控制,因此如果要在启用提示词日志记录的同时保持回复被编辑,请设置 `OTEL_LOG_ASSISTANT_RESPONSES=0`

870* `model`:模型标识符(例如,"claude-sonnet-5")870* `model`:模型标识符(例如 "claude-sonnet-5")

871* `request_id`:API 请求 ID,在[事件关联属性](#event-correlation-attributes)下描述871* `request_id`:API 请求 ID,详见[事件关联属性](#event-correlation-attributes)

872* `message.uuid`:响应的最终记录条目的 UUID。API 响应作为每个内容块一个记录条目保存;这是最后一个,下一轮的 `parentUuid` 从其链接。需要 Claude Code v2.1.214 或更高版本872* `message.uuid`:响应的最后一个会话记录条目的 UUID。API 响应按每个内容块一个会话记录条目进行持久保存;这是最后一个条目,下一轮次的 `parentUuid` 从它链接。需要 Claude Code v2.1.214 或更高版本

873* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称873* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称

874 874 

875<h4 id="tool-result-event">875<h4 id="tool-result-event">

876 工具结果事件876 工具结果事件

877</h4>877</h4>

878 878 

879当工具完成执行时记录。如果工具调用被拒绝,则不发出;请参阅[工具决策事件](#tool-decision-event)了解拒绝。879在工具完成执行时记录。如果工具调用被拒绝则不会发出;有关拒绝,请参阅[工具决策事件](#tool-decision-event)。

880 880 

881**事件名称**:`claude_code.tool_result`881**事件名称**:`claude_code.tool_result`

882 882 


885* 所有[标准属性](#standard-attributes)885* 所有[标准属性](#standard-attributes)

886* `event.name`:`"tool_result"`886* `event.name`:`"tool_result"`

887* `event.timestamp`:ISO 8601 时间戳887* `event.timestamp`:ISO 8601 时间戳

888* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述888* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

889* `tool_name`:工具的名称889* `tool_name`:工具的名称

890* `tool_use_id`:此工具调用的唯一标识符。与传递给钩子的 `tool_use_id` 匹配,允许 OTel 事件和钩子捕获数据之间的关联。890* `tool_use_id`:此次工具调用的唯一标识符。与传递给 hook 的 `tool_use_id` 相匹配,从而可以在 OTel 事件和 hook 捕获的数据之间建立关联。

891* `success`:`"true"` 或 `"false"`891* `success`:`"true"` 或 `"false"`

892* `duration_ms`:执行时间(以毫秒为单位)892* `duration_ms`:执行时间(以毫秒为单位)

893* `error_type`:工具失败时的错误类别字符串,例如 `"Error:ENOENT"` 或 `"ShellError"`893* `error_type`:工具失败时的错误类别字符串,例如 `"Error:ENOENT"` 或 `"ShellError"`

894* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):工具失败时的完整错误消息894* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):工具失败时的完整错误消息

895* `decision_type`:始终为 `"accept"`,因为此事件仅在工具运行后发出。拒绝的调用不产生工具结果895* `decision_type`:始终为 `"accept"`,因为此事件仅在工具运行后发出。被拒绝的调用不会产生工具结果

896* `decision_source`:权限决策来自何处。`"config"`、`"hook"`、`"user_permanent"` 或 `"user_temporary"` 之一。请参阅[工具决策事件](#tool-decision-event)了解每个值的含义。仅拒绝的源 `"user_abort"` 和 `"user_reject"` 永远不会出现在此事件上。896* `decision_source`:权限决策的来源。取值为 `"config"`、`"hook"`、`"user_permanent"` 或 `"user_temporary"` 之一。有关每个值的含义,请参阅[工具决策事件](#tool-decision-event)。仅用于拒绝的来源 `"user_abort"` 和 `"user_reject"` 永远不会出现在此事件上。

897* `tool_input_size_bytes`:JSON 序列化工具输入的大小(以字节为单位)897* `tool_input_size_bytes`:JSON 序列化后的工具输入大小(以字节为单位)

898* `tool_result_size_bytes`:工具结果的大小(以字节为单位)898* `tool_result_size_bytes`:工具结果的大小(以字节为单位)

899* `mcp_server_scope`:MCP 服务器范围标识符(对于 MCP 工具)899* `mcp_server_scope`:MCP 服务器作用域标识符(针对 MCP 工具)

900* `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 或更高版本900* `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 或更高版本

901* `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 或更高版本。参数因工具而异:901* `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 或更高版本。参数因工具而异:

902 * 对于 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 上省略902 * 对于 Bash 工具:包括 `bash_command`、`full_command`、`timeout`、`description` 和 `dangerouslyDisableSandbox`,并在 `git commit` 命令成功时包括 `git_commit_id` 和 `git_branch`。当该提交是会话工作目录的 HEAD 时,`git_commit_id` 是完整的提交 SHA,否则是 git 的缩写 SHA。`git_branch` 是提交所在的分支,在分离的 HEAD 上省略

903 * 对于桌面应用的工作区 Bash 工具,它也将 `tool_name` 报告为 `Bash`:仅包括 `bash_command`、`full_command` 和 `timeout`903 * 对于桌面应用的工作区 Bash 工具(它也将 `tool_name` 报告为 `Bash`):仅包括 `bash_command`、`full_command` 和 `timeout`

904 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`904 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`

905 * 对于技能工具:包括 `skill_name`905 * 对于 Skill 工具:包括 `skill_name`

906 * 对于代理工具或旧版任务工具:包括 `subagent_type`906 * 对于 Agent 工具或旧版 Task 工具:包括 `subagent_type`

907* `tool_input`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):JSON 序列化的工具参数。超过 512 个字符的单个值被截断,完整有效负载限制在约 4 K 字符。适用于所有工具,包括 MCP 工具。907* `tool_input`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):JSON 序列化的工具参数。超过 512 个字符的单个值会被截断,完整的 JSON 数据限制在约 4 K 个字符以内。适用于所有工具,包括 MCP 工具。

908 908 

909<h4 id="api-request-event">909<h4 id="api-request-event">

910 API 请求事件910 API 请求事件

911</h4>911</h4>

912 912 

913为每个对 Claude 的 API 请求记录。913针对每个发往 Claude 的 API 请求记录。

914 914 

915**事件名称**:`claude_code.api_request`915**事件名称**:`claude_code.api_request`

916 916 


919* 所有[标准属性](#standard-attributes)919* 所有[标准属性](#standard-attributes)

920* `event.name`:`"api_request"`920* `event.name`:`"api_request"`

921* `event.timestamp`:ISO 8601 时间戳921* `event.timestamp`:ISO 8601 时间戳

922* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述922* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

923* `model`:使用的模型(例如,"claude-sonnet-5")923* `model`:使用的模型(例如 "claude-sonnet-5")

924* `cost_usd`:以美元为单位的估计成本924* `cost_usd`:以美元计的估算成本

925* `cost_usd_micros`:以美元百万分之一为单位的估计成本,作为整数发出925* `cost_usd_micros`:以百万分之一美元计的估算成本,以整数形式发出

926* `duration_ms`:请求持续时间(以毫秒为单位)926* `duration_ms`:请求持续时间(以毫秒为单位)

927* `input_tokens`:输入 token 数量,不包括从提示词缓存读取或写入提示词缓存的 token927* `input_tokens`:输入 token 数量,不包括从提示词缓存读取或写入提示词缓存的 token

928* `output_tokens`:输出令牌数928* `output_tokens`:输出 token 数量

929* `cache_read_tokens`:从缓存读取的令牌数929* `cache_read_tokens`:从缓存读取的 token 数量

930* `cache_creation_tokens`:用于缓存创建的令牌数930* `cache_creation_tokens`:用于创建缓存的 token 数量

931* `request_id`:API 请求 ID,例如 `"req_011..."`,在[事件关联属性](#event-correlation-attributes)下描述。931* `request_id`:API 请求 ID,例如 `"req_011..."`,详见[事件关联属性](#event-correlation-attributes)。

932* `client_request_id`:作为 `x-client-request-id` 请求头发送的客户端生成的 UUID;请参阅[事件关联属性](#event-correlation-attributes)表了解何时存在。需要 Claude Code v2.1.214 或更高版本932* `client_request_id`:客户端生成的 UUID,作为 `x-client-request-id` 请求头发送;有关它何时存在,请参阅[事件关联属性](#event-correlation-attributes)表。需要 Claude Code v2.1.214 或更高版本

933* `speed`:`"fast"` 或 `"normal"`,指示快速模式是否活跃933* `speed`:`"fast"` 或 `"normal"`,表示快速模式是否处于活跃状态

934* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称934* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称

935* `effort`:应用于请求的[努力级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当 Claude Code 不发送努力级别时不存在,例如在不支持努力的模型上。935* `effort`:应用于请求的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level):`"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。当 Claude Code 未发送 effort 级别时不存在,例如在不支持 effort 的模型上。

936* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 属性。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。936* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的 skill、插件、Agent 和 MCP 归因。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。

937 937 

938<h4 id="api-error-event">938<h4 id="api-error-event">

939 API 错误事件939 API 错误事件

940</h4>940</h4>

941 941 

942当对 Claude 的 API 请求失败时记录。942当发往 Claude 的 API 请求失败时记录。

943 943 

944**事件名称**:`claude_code.api_error`944**事件名称**:`claude_code.api_error`

945 945 


948* 所有[标准属性](#standard-attributes)948* 所有[标准属性](#standard-attributes)

949* `event.name`:`"api_error"`949* `event.name`:`"api_error"`

950* `event.timestamp`:ISO 8601 时间戳950* `event.timestamp`:ISO 8601 时间戳

951* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述951* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

952* `model`:使用的模型(例如,"claude-sonnet-5")952* `model`:使用的模型(例如 "claude-sonnet-5")

953* `error`:错误消息953* `error`:错误消息

954* `status_code`:HTTP 状态代码作为数字。对于非 HTTP 错误(如连接失败)不存在。954* `status_code`:以数字表示的 HTTP 状态码。对于非 HTTP 错误(例如连接失败)不存在。

955* `duration_ms`:请求持续时间(以毫秒为单位)955* `duration_ms`:请求持续时间(以毫秒为单位)

956* `attempt`:已进行的尝试次数,包括初始请求。[检测重试耗尽](#detect-retry-exhaustion)说明了计数何时重新开始956* `attempt`:已进行的尝试次数,包括初始请求。[检测重试耗尽](#detect-retry-exhaustion)说明了计数何时重新开始

957* `request_id`:API 请求 ID,例如 `"req_011..."`,在[事件关联属性](#event-correlation-attributes)下描述。957* `request_id`:API 请求 ID,例如 `"req_011..."`,详见[事件关联属性](#event-correlation-attributes)。

958* `client_request_id`:作为 `x-client-request-id` 请求头发送的客户端生成的 UUID。即使在超时或连接错误等失败从未产生服务器 `request_id` 时也可用;请参阅[事件关联属性](#event-correlation-attributes)表了解何时存在。需要 Claude Code v2.1.214 或更高版本958* `client_request_id`:客户端生成的 UUID,作为 `x-client-request-id` 请求头发送。即使超时或连接错误等失败从未产生服务器 `request_id`,它也可用;有关它何时存在,请参阅[事件关联属性](#event-correlation-attributes)表。需要 Claude Code v2.1.214 或更高版本

959* `speed`:`"fast"` 或 `"normal"`,指示快速模式是否活跃959* `speed`:`"fast"` 或 `"normal"`,表示快速模式是否处于活跃状态

960* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称960* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称

961* `effort`:应用于请求的[努力级别](/docs/zh-CN/model-config#adjust-effort-level)。当 Claude Code 不发送努力级别时不存在,例如在不支持努力的模型上。961* `effort`:应用于请求的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。当 Claude Code 未发送 effort 级别时不存在,例如在不支持 effort 的模型上。

962* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 属性。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。962* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的 skill、插件、Agent 和 MCP 归因。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。

963 963 

964<h4 id="api-refusal-event">964<h4 id="api-refusal-event">

965 API 拒绝事件965 API 拒绝事件

966</h4>966</h4>

967 967 

968当 API 请求返回 `stop_reason: "refusal"` 时记录。拒绝到达成功响应流而不是作为 HTTP 错误,因此 `api_error` 事件不会为它们触发。此事件让您跟踪拒绝频率并按与 `api_request` 和 `api_error` 相同的属性对拒绝进行分组。968当 API 请求返回 `stop_reason: "refusal"` 时记录。拒绝是在成功的响应流中到达的,而不是作为 HTTP 错误,因此 `api_error` 事件不会为它们触发。此事件可让您跟踪拒绝频率,并按与 `api_request` 和 `api_error` 相同的属性对拒绝进行分组。

969 969 

970**事件名称**:`claude_code.api_refusal`970**事件名称**:`claude_code.api_refusal`

971 971 


974* 所有[标准属性](#standard-attributes)974* 所有[标准属性](#standard-attributes)

975* `event.name`:`"api_refusal"`975* `event.name`:`"api_refusal"`

976* `event.timestamp`:ISO 8601 时间戳976* `event.timestamp`:ISO 8601 时间戳

977* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述977* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

978* `model`:来自请求的模型标识符978* `model`:来自请求的模型标识符

979* `request_id`:API 请求 ID,例如 `"req_011..."`,在[事件关联属性](#event-correlation-attributes)下描述。979* `request_id`:API 请求 ID,例如 `"req_011..."`,详见[事件关联属性](#event-correlation-attributes)。

980* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称。有关定义,请参阅 [`api_request`](#api-request-event)。980* `query_source`:发出请求的子系统,例如 `"repl_main_thread"`、`"compact"` 或子代理名称。有关定义,请参阅 [`api_request`](#api-request-event)。

981* `speed`:当[快速模式](/docs/zh-CN/fast-mode)活跃时为 `"fast"`,或 `"normal"`981* `speed`:当[快速模式](/docs/zh-CN/fast-mode)处于活跃状态时为 `"fast"`,否则为 `"normal"`

982* `attempt`:重试尝试号。第一次尝试是 `1`。982* `attempt`:重试尝试次数。第一次尝试为 `1`。

983* `effort`:应用于请求的[努力级别](/docs/zh-CN/model-config#adjust-effort-level)。当 Claude Code 不发送努力级别时不存在,例如在不支持努力的模型上。983* `effort`:应用于请求的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。当 Claude Code 未发送 effort 级别时不存在,例如在不支持 effort 的模型上。

984* `server_fallback_hop`:当 API 的服务器端模型回退已经在不同的模型上重试此拒绝时为 `true`,因此用户没有看到此特定拒绝。当请求以拒绝结束时为 `false`。单个轮次可以发出一个 `true` 跳跃事件和稍后的 `false` 最终事件,当回退模型也拒绝时。984* `server_fallback_hop`:当 API 的服务器端模型回退已经在另一个模型上重试了此次拒绝(因此用户没有看到这次特定的拒绝)时为 `true`。当请求以拒绝结束时为 `false`。当备用模型也拒绝时,单个轮次可以同时发出一个 `true` 跳转事件和一个随后的 `false` 最终事件。

985* `has_category`:当 API 响应携带 `stop_details.category` 为 `"cyber"`、`"bio"`、`"frontier_llm"` 或 `"reasoning_extraction"` 时为 `true`。当响应没有类别或值在该集合之外时为 `false`。当 `server_fallback_hop` 为 `true` 时不存在,因为跳跃块不携带 `stop_details`。985* `has_category`:当 API 响应携带的 `stop_details.category` 为 `"cyber"`、`"bio"`、`"frontier_llm"` 或 `"reasoning_extraction"` 时为 `true`。当响应未携带类别或携带的值不在该集合中时为 `false`。当 `server_fallback_hop` 为 `true` 时不存在,因为跳转块不携带 `stop_details`。

986* `has_explanation`:当 API 响应携带 `stop_details.explanation` 时为 `true`,否则为 `false`。当 `server_fallback_hop` 为 `true` 时不存在。986* `has_explanation`:当 API 响应携带 `stop_details.explanation` 时为 `true`,否则为 `false`。当 `server_fallback_hop` 为 `true` 时不存在。

987* `category`:来自 API 响应的 `stop_details.category` 值。`"cyber"`、`"bio"`、`"frontier_llm"` 或 `"reasoning_extraction"` 之一。仅当设置了 `OTEL_LOG_TOOL_DETAILS=1` 且 `has_category` 为 `true` 时存在。987* `category`:来自 API 响应的 `stop_details.category` 值。取值为 `"cyber"`、`"bio"`、`"frontier_llm"` 或 `"reasoning_extraction"` 之一。仅当设置了 `OTEL_LOG_TOOL_DETAILS=1` 且 `has_category` 为 `true` 时存在。

988* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的技能、插件、代理和 MCP 属性。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。988* `agent.name`、`skill.name`、`plugin.name`、`marketplace.name`、`mcp_server.name`、`mcp_tool.name`:请求的 skill、插件、Agent 和 MCP 归因。有关定义和编辑行为,请参阅[成本计数器](#cost-counter)。

989 989 

990<h4 id="api-request-body-event">990<h4 id="api-request-body-event">

991 API 请求体事件991 API 请求体事件

992</h4>992</h4>

993 993 

994当设置了 `OTEL_LOG_RAW_API_BODIES` 时,为每个 API 请求尝试记录。每个尝试发出一个事件,因此使用调整参数的重试各自产生自己的事件。994当设置了 `OTEL_LOG_RAW_API_BODIES` 时,针对每次 API 请求尝试记录。每次尝试发出一个事件,因此使用调整后参数进行的重试各自产生自己的事件。

995 995 

996**事件名称**:`claude_code.api_request_body`996**事件名称**:`claude_code.api_request_body`

997 997 


1000* 所有[标准属性](#standard-attributes)1000* 所有[标准属性](#standard-attributes)

1001* `event.name`:`"api_request_body"`1001* `event.name`:`"api_request_body"`

1002* `event.timestamp`:ISO 8601 时间戳1002* `event.timestamp`:ISO 8601 时间戳

1003* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1003* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1004* `body`:JSON 序列化的 Messages API 请求参数,例如系统提示、消息和工具,在内容限制处截断(默认 60 KB)。先前助手轮次中的扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。1004* `body`:JSON 序列化的 Messages API 请求参数,例如系统提示词、消息和工具,在内容限制处截断(默认 60 KB)。之前 assistant 轮次中的扩展思考内容会被编辑。仅在内联模式(`OTEL_LOG_RAW_API_BODIES=1`)下发出。

1005* `body_ref`:包含未截断体的 `<dir>/<uuid>.request.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。1005* `body_ref`:包含未截断请求体的 `<dir>/<uuid>.request.json` 文件的绝对路径。仅在文件模式(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)下发出。

1006* `body_length`:未截断的体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位1006* `body_length`:未截断的请求体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节数,当 `=1` 时为 UTF-16 代码单元数

1007* `body_truncated`:当发生内联截断时为 `"true"`。在文件模式下不存在,当没有截断发生时不存在。1007* `body_truncated`:当发生内联截断时为 `"true"`。在文件模式下以及未发生截断时不存在。

1008* `model`:来自请求参数的模型标识符1008* `model`:来自请求参数的模型标识符

1009* `query_source`:发出请求的子系统(例如,`"compact"`)1009* `query_source`:发出请求的子系统(例如 `"compact"`)

1010* `request_body_id`:标识此尝试的请求体的 UUID。成功的尝试的 [`api_response_body` 事件](#api-response-body-event)携带相同的值,因此您可以将响应与产生它的确切请求配对。需要 Claude Code v2.1.274 或更高版本1010* `request_body_id`:标识此次尝试请求体的 UUID。成功的那次尝试对应的 [`api_response_body` 事件](#api-response-body-event)携带相同的值,因此您可以将响应与产生它的确切请求配对。需要 Claude Code v2.1.274 或更高版本

1011 1011 

1012<h4 id="api-response-body-event">1012<h4 id="api-response-body-event">

1013 API 响应体事件1013 API 响应体事件

1014</h4>1014</h4>

1015 1015 

1016当设置了 `OTEL_LOG_RAW_API_BODIES` 时,为每个成功的 API 响应记录。1016当设置了 `OTEL_LOG_RAW_API_BODIES` 时,针对每个成功的 API 响应记录。

1017 1017 

1018在文件模式下(`OTEL_LOG_RAW_API_BODIES=file:<dir>`),Claude Code 还为每个成功的响应向 `<dir>/index.jsonl` 追加一个 JSON 行,包含字段 `timestamp`、`session_id`、`query_source`、`model`、`request_id`、`message_id`、`message_uuid`、`request_file` 和 `response_file`。读取它以找到给定记录消息后面的请求和响应文件,而无需查询您的遥测后端。索引文件需要 Claude Code v2.1.274 或更高版本。1018在文件模式(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)下,Claude Code 还会针对每个成功的响应向 `<dir>/index.jsonl` 追加一行 JSON,包含字段 `timestamp`、`session_id`、`query_source`、`model`、`request_id`、`message_id`、`message_uuid`、`request_file` 和 `response_file`。读取该文件即可找到给定会话记录消息背后的请求和响应文件,而无需查询您的遥测后端。索引文件需要 Claude Code v2.1.274 或更高版本。

1019 1019 

1020**事件名称**:`claude_code.api_response_body`1020**事件名称**:`claude_code.api_response_body`

1021 1021 


1024* 所有[标准属性](#standard-attributes)1024* 所有[标准属性](#standard-attributes)

1025* `event.name`:`"api_response_body"`1025* `event.name`:`"api_response_body"`

1026* `event.timestamp`:ISO 8601 时间戳1026* `event.timestamp`:ISO 8601 时间戳

1027* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1027* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1028* `body`:JSON 序列化的 Messages API 响应,包括 id、内容块、使用情况和停止原因,在内容限制处截断(默认 60 KB)。扩展思考内容被编辑。仅在内联模式下发出(`OTEL_LOG_RAW_API_BODIES=1`)。1028* `body`:JSON 序列化的 Messages API 响应,包括 id、内容块、用量和停止原因,在内容限制处截断(默认 60 KB)。扩展思考内容会被编辑。仅在内联模式(`OTEL_LOG_RAW_API_BODIES=1`)下发出。

1029* `body_ref`:包含未截断体的 `<dir>/<request_id>.response.json` 文件的绝对路径。仅在文件模式下发出(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)。1029* `body_ref`:包含未截断响应体的 `<dir>/<request_id>.response.json` 文件的绝对路径。仅在文件模式(`OTEL_LOG_RAW_API_BODIES=file:<dir>`)下发出。

1030* `body_length`:未截断的体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节,或当 `=1` 时为 UTF-16 代码单位1030* `body_length`:未截断的响应体长度。当 `OTEL_LOG_RAW_API_BODIES=file:<dir>` 时为 UTF-8 字节数,当 `=1` 时为 UTF-16 代码单元数

1031* `body_truncated`:当发生内联截断时为 `"true"`。在文件模式下不存在,当没有截断发生时不存在。1031* `body_truncated`:当发生内联截断时为 `"true"`。在文件模式下以及未发生截断时不存在。

1032* `model`:模型标识符1032* `model`:模型标识符

1033* `query_source`:发出请求的子系统1033* `query_source`:发出请求的子系统

1034* `request_id`:API 请求 ID,例如 `"req_011..."`,在[事件关联属性](#event-correlation-attributes)下描述。1034* `request_id`:API 请求 ID,例如 `"req_011..."`,详见[事件关联属性](#event-correlation-attributes)。

1035* `request_body_id`:此响应回答的 [`api_request_body` 事件](#api-request-body-event)的 `request_body_id`。需要 Claude Code v2.1.274 或更高版本1035* `request_body_id`:此响应所对应的 [`api_request_body` 事件](#api-request-body-event)的 `request_body_id`。需要 Claude Code v2.1.274 或更高版本

1036* `message.id`:API 分配给响应的消息 ID,响应体的 `id` 字段。需要 Claude Code v2.1.274 或更高版本1036* `message.id`:API 为响应分配的消息 ID,即响应体的 `id` 字段。需要 Claude Code v2.1.274 或更高版本

1037* `message.uuid`:响应的最终记录条目的 UUID。与 `request_body_id` 一起,它将记录消息链接到其后面的请求和响应体。需要 Claude Code v2.1.274 或更高版本1037* `message.uuid`:响应的最后一个会话记录条目的 UUID。它与 `request_body_id` 一起,将会话记录消息与其背后的请求体和响应体关联起来。需要 Claude Code v2.1.274 或更高版本

1038 1038 

1039<h4 id="tool-decision-event">1039<h4 id="tool-decision-event">

1040 工具决策事件1040 工具决策事件

1041</h4>1041</h4>

1042 1042 

1043当进行工具权限决策时记录(接受/拒绝)。1043在做出工具权限决策(接受/拒绝)时记录。

1044 1044 

1045**事件名称**:`claude_code.tool_decision`1045**事件名称**:`claude_code.tool_decision`

1046 1046 


1049* 所有[标准属性](#standard-attributes)1049* 所有[标准属性](#standard-attributes)

1050* `event.name`:`"tool_decision"`1050* `event.name`:`"tool_decision"`

1051* `event.timestamp`:ISO 8601 时间戳1051* `event.timestamp`:ISO 8601 时间戳

1052* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1052* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1053* `tool_name`:工具的名称(例如,"Read"、"Edit"、"Write"、"NotebookEdit")1053* `tool_name`:工具的名称(例如 "Read"、"Edit"、"Write"、"NotebookEdit")

1054* `tool_use_id`:此工具调用的唯一标识符。与传递给钩子的 `tool_use_id` 匹配,允许 OTel 事件和钩子捕获数据之间的关联。1054* `tool_use_id`:此次工具调用的唯一标识符。与传递给 hook 的 `tool_use_id` 相匹配,从而可以在 OTel 事件和 hook 捕获的数据之间建立关联。

1055* `decision`:`"accept"` 或 `"reject"`1055* `decision`:`"accept"` 或 `"reject"`

1056* `tool_source`:始终存在。工具的来源,作为 CLI 创作值的闭集。需要 Claude Code v2.1.214 或更高版本1056* `tool_source`:始终存在。工具的来源,取值为由 CLI 定义的封闭值集合。需要 Claude Code v2.1.214 或更高版本

1057 * `"builtin"`:CLI 自己的工具1057 * `"builtin"`:CLI 自身的工具

1058 * `"mcp"`:MCP 服务器通常1058 * `"mcp"`:一般的 MCP 服务器

1059 * `"sdk_host_builtin_mcp"`:内置于 Claude Desktop 本身的进程内服务器,在 Claude Desktop 拥有的会话中。Claude Desktop 拥有它从自己的入口点之一启动的会话,`claude-desktop`、`claude-desktop-3p` 或 `local-agent`,当该会话不是嵌套子时;嵌套会话,包括 Claude Code 本身生成的会话,将这些服务器报告为 `"mcp"`1059 * `"sdk_host_builtin_mcp"`:内置于 Claude Desktop 本身的进程内服务器,位于 Claude Desktop 拥有的会话中。当会话是 Claude Desktop 从其自身的入口点之一(`claude-desktop`、`claude-desktop-3p` 或 `local-agent`)启动的,且不是嵌套子会话时,Claude Desktop 拥有该会话;嵌套会话(包括 Claude Code 自身生成的会话)将这些服务器报告为 `"mcp"`

1060* `source`:决策来自何处:1060* `source`:决策的来源:

1061 * `"config"`:自动决定而不提示,基于项目设置、用户个人设置中的允许或拒绝规则、企业管理策略、`--allowedTools` 或 `--disallowedTools` 标志、活跃权限模式、来自同一交互式 CLI 会话中较早提示的会话范围授予,或因为工具本质上是安全的。事件不指示这些源中的哪一个匹配。Claude Code 还在权限提示请求本身失败时报告 `"config"`,例如当代理 SDK 的 [`canUseTool`](/docs/zh-CN/agent-sdk/typescript#canusetool) 回调或 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 工具返回无效结果时,或当输入流在请求待处理时关闭时。在 v2.1.216 之前,Claude Code 将这些失败报告为 `"user_reject"`。1061 * `"config"`:无需询问即自动决定,依据为项目设置、用户个人设置中的允许或拒绝规则、企业托管策略、`--allowedTools` 或 `--disallowedTools` 标志、当前的权限模式、同一交互式 CLI 会话中先前提示所授予的会话作用域权限,或者因为该工具本身是安全的。该事件不会指明匹配的是这些来源中的哪一个。当权限提示请求本身失败时,Claude Code 也会报告 `"config"`,例如当 Agent SDK 的 [`canUseTool`](/docs/zh-CN/agent-sdk/typescript#canusetool) 回调或 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags) 工具返回无效结果时,或者当请求挂起期间输入流关闭时。在 v2.1.216 之前,Claude Code 将这些失败报告为 `"user_reject"`。

1062 * `"hook"`:`PreToolUse` 或 `PermissionRequest` 钩子返回了决策。1062 * `"hook"`:由 `PreToolUse` 或 `PermissionRequest` hook 返回了决策。

1063 * `"user_permanent"`:当用户在权限提示处选择"是,以后不要再问..."时发出,这会将允许规则保存到其个人设置。在交互式 CLI 中,这仅对该选择本身发出;稍后与保存的规则匹配的调用发出 `"config"`。在代理 SDK 或非交互式 `-p` 会话中,初始选择和稍后的规则匹配都发出 `"user_permanent"`。视为接受。1063 * `"user_permanent"`:当用户在权限提示中选择 "Yes, and don't ask again for ..." 时发出,这会将一条允许规则保存到其个人设置中。在交互式 CLI 中,仅针对该选择本身发出;之后匹配已保存规则的调用改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,初始选择和之后的规则匹配都会发出 `"user_permanent"`。视为接受。

1064 * `"user_temporary"`:当用户在权限提示处选择"是"进行一次性批准时发出,或在文件编辑或读取提示处选择了为会话其余部分授予访问权限的选项时发出。在交互式 CLI 中,这仅对选择本身发出;稍后由该会话范围授予允许的调用发出 `"config"`。在代理 SDK 或非交互式 `-p` 会话中,选择和稍后的匹配都发出 `"user_temporary"`。视为接受。1064 * `"user_temporary"`:当用户在权限提示中选择 "Yes" 进行一次性批准,或在文件编辑或读取提示中选择授予本会话剩余时间访问权限的选项时发出。在交互式 CLI 中,仅针对该选择本身发出;之后由该会话作用域授权允许的调用改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,该选择和之后的匹配都会发出 `"user_temporary"`。视为接受。

1065 * `"user_abort"`:当用户在不回答的情况下关闭权限提示时发出。在代理 SDK 和非交互式 `-p` 会话中,这包括在 `canUseTool` 或 `--permission-prompt-tool` 权限请求待处理时中断轮次;在 v2.1.216 之前,Claude Code 将该中断报告为 `"user_reject"`。视为拒绝。1065 * `"user_abort"`:当用户未作答便关闭权限提示时发出。在 Agent SDK 和非交互式 `-p` 会话中,这包括在 `canUseTool` 或 `--permission-prompt-tool` 权限请求挂起期间中断轮次;在 v2.1.216 之前,Claude Code 将这种中断报告为 `"user_reject"`。视为拒绝。

1066 * `"user_reject"`:当用户在提示时选择"否"时发出。在交互式 CLI 中,这仅对该选择本身发出;与用户个人设置中的拒绝规则匹配的调用发出 `"config"`。在代理 SDK 或非交互式 `-p` 会话中,与个人设置中的拒绝规则匹配的调用发出 `"user_reject"`。视为拒绝。1066 * `"user_reject"`:当用户在被询问时选择 "No" 时发出。在交互式 CLI 中,仅针对该选择本身发出;匹配用户个人设置中拒绝规则的调用改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,匹配个人设置中拒绝规则的调用会发出 `"user_reject"`。视为拒绝。

1067* `tool_parameters`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):包含工具特定参数的 JSON 字符串。与[工具结果事件](#tool-result-event)相同的形状,减去执行后字段如 `git_commit_id`。对于接受的调用,如果权限决策通过 `updatedInput` 重写工具输入,值可能与 `tool_result` 不同。使用此属性查看当 `decision` 为 `"reject"` 时哪个命令被拒绝。1067* `tool_parameters`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):包含工具特定参数的 JSON 字符串。形式与[工具结果事件](#tool-result-event)相同,但不含执行后的字段,例如 `git_commit_id`。如果权限决策通过 `updatedInput` 重写了工具输入,则对于被接受的调用,其值可能与 `tool_result` 不同。当 `decision` 为 `"reject"` 时,可使用此属性查看被拒绝的是哪个命令。

1068 * 对于 `"sdk_host_builtin_mcp"` 工具:`mcp_server_name` 和 `mcp_tool_name` 即使在 `OTEL_LOG_TOOL_DETAILS` 关闭时也包含,因为主机应用定义这些名称;没有它们,对这些内置服务器之一的拒绝调用在默认流上将无法属性。对于用户配置的 MCP 服务器,事件的 `tool_name` 始终是字面 `"mcp_tool"`,服务器和工具名称仅在标志打开时出现在 `tool_parameters` 中;参数内容在任何地方都需要标志。需要 Claude Code v2.1.214 或更高版本1068 * 对于 `"sdk_host_builtin_mcp"` 工具:即使 `OTEL_LOG_TOOL_DETAILS` 关闭,也会包含 `mcp_server_name` 和 `mcp_tool_name`,因为这些名称由主机应用程序定义;如果没有它们,在默认流中将无法对这些内置服务器的被拒绝调用进行归因。对于用户配置的 MCP 服务器,事件的 `tool_name` 始终是字面量 `"mcp_tool"`,并且服务器和工具名称仅在标志开启时出现在 `tool_parameters` 中;参数内容在任何情况下都需要该标志。需要 Claude Code v2.1.214 或更高版本

1069 * 对于 Bash 工具:包括 `bash_command`、`full_command`、`timeout`、`description`、`dangerouslyDisableSandbox`。桌面应用的工作区 bash 工具也将 `tool_name` 报告为 `Bash`,但仅包括 `bash_command`、`full_command` 和 `timeout`1069 * 对于 Bash 工具:包括 `bash_command`、`full_command`、`timeout`、`description`、`dangerouslyDisableSandbox`。桌面应用的工作区 bash 工具也将 `tool_name` 报告为 `Bash`,但仅包括 `bash_command`、`full_command` 和 `timeout`

1070 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`1070 * 对于 MCP 工具:包括 `mcp_server_name`、`mcp_tool_name`

1071 * 对于技能工具:包括 `skill_name`1071 * 对于 Skill 工具:包括 `skill_name`

1072 * 对于代理工具或旧版任务工具:包括 `subagent_type`1072 * 对于 Agent 工具或旧版 Task 工具:包括 `subagent_type`

1073 1073 

1074<h4 id="permission-mode-changed-event">1074<h4 id="permission-mode-changed-event">

1075 权限模式更改事件1075 权限模式变更事件

1076</h4>1076</h4>

1077 1077 

1078当权限模式更改时记录,例如从 `Shift+Tab` 循环、退出计划模式或自动模式门检查。1078在权限模式发生变化时记录,例如通过 `Shift+Tab` 循环切换、退出计划模式或自动模式门控检查。

1079 1079 

1080**事件名称**:`claude_code.permission_mode_changed`1080**事件名称**:`claude_code.permission_mode_changed`

1081 1081 


1084* 所有[标准属性](#standard-attributes)1084* 所有[标准属性](#standard-attributes)

1085* `event.name`:`"permission_mode_changed"`1085* `event.name`:`"permission_mode_changed"`

1086* `event.timestamp`:ISO 8601 时间戳1086* `event.timestamp`:ISO 8601 时间戳

1087* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1087* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1088* `from_mode`:前一个权限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`1088* `from_mode`:先前的权限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`

1089* `to_mode`:新权限模式1089* `to_mode`:新的权限模式

1090* `trigger`:导致更改的原因。`"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 之一。当转换源自 SDK 或桥时不存在。1090* `trigger`:引起变更的原因。取值为 `"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 之一。当转换源自 SDK 或 bridge 时不存在

1091 1091 

1092<h4 id="auth-event">1092<h4 id="auth-event">

1093 认证事件1093 身份验证事件

1094</h4>1094</h4>

1095 1095 

1096当 `/login` 或 `/logout` 完成时记录。1096在 `/login` 或 `/logout` 完成时记录。

1097 1097 

1098**事件名称**:`claude_code.auth`1098**事件名称**:`claude_code.auth`

1099 1099 


1102* 所有[标准属性](#standard-attributes)1102* 所有[标准属性](#standard-attributes)

1103* `event.name`:`"auth"`1103* `event.name`:`"auth"`

1104* `event.timestamp`:ISO 8601 时间戳1104* `event.timestamp`:ISO 8601 时间戳

1105* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1105* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1106* `action`:`"login"` 或 `"logout"`1106* `action`:`"login"` 或 `"logout"`

1107* `success`:`"true"` 或 `"false"`1107* `success`:`"true"` 或 `"false"`

1108* `auth_method`:认证方法,例如 `"oauth"`1108* `auth_method`:身份验证方法,例如 `"oauth"`

1109* `error_category`:操作失败时的分类错误类型。原始错误消息永远不会包含1109* `error_category`:操作失败时的错误类别。永远不会包含原始错误消息

1110* `status_code`:操作因 HTTP 错误失败时的 HTTP 状态代码作为字符串1110* `status_code`:当操作因 HTTP 错误而失败时,以字符串表示的 HTTP 状态码

1111 1111 

1112<h4 id="mcp-server-connection-event">1112<h4 id="mcp-server-connection-event">

1113 MCP 服务器连接事件1113 MCP 服务器连接事件

1114</h4>1114</h4>

1115 1115 

1116当 MCP 服务器连接、断开连接或连接失败时记录。1116在 MCP 服务器连接、断开连接或连接失败时记录。

1117 1117 

1118**事件名称**:`claude_code.mcp_server_connection`1118**事件名称**:`claude_code.mcp_server_connection`

1119 1119 


1122* 所有[标准属性](#standard-attributes)1122* 所有[标准属性](#standard-attributes)

1123* `event.name`:`"mcp_server_connection"`1123* `event.name`:`"mcp_server_connection"`

1124* `event.timestamp`:ISO 8601 时间戳1124* `event.timestamp`:ISO 8601 时间戳

1125* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1125* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1126* `status`:`"connected"`、`"failed"` 或 `"disconnected"`1126* `status`:`"connected"`、`"failed"` 或 `"disconnected"`

1127* `transport_type`:服务器传输,例如 `"stdio"`、`"sse"` 或 `"http"`1127* `transport_type`:服务器传输方式,例如 `"stdio"`、`"sse"` 或 `"http"`

1128* `server_scope`:服务器配置的范围,例如 `"user"`、`"project"` 或 `"local"`1128* `server_scope`:服务器所配置的作用域,例如 `"user"`、`"project"` 或 `"local"`

1129* `duration_ms`:连接尝试持续时间(以毫秒为单位)1129* `duration_ms`:连接尝试持续时间(以毫秒为单位)

1130* `error_code`:连接失败时的错误代码1130* `error_code`:连接失败时的错误代码

1131* `is_plugin`:当服务器由插件提供时为 `true`,否则为 `false`1131* `is_plugin`:当服务器由插件提供时为 `true`,否则为 `false`

1132* `plugin_id_hash`(当 `is_plugin` 为 `true` 时):插件名称和市场的稳定哈希,用于按插件对事件进行分组而不暴露名称。Claude Code 按[插件加载事件](#plugin-loaded-event)下描述的方式计算它1132* `plugin_id_hash`(当 `is_plugin` 为 `true` 时):插件名称和市场的稳定哈希,用于在不暴露名称的情况下按插件对事件进行分组。Claude Code 按照[插件已加载事件](#plugin-loaded-event)中描述的方式计算它

1133* `plugin.name`(当 `is_plugin` 为 `true` 时):提供服务器的插件的名称。对于第三方插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为字面字符串 `"third-party"`;这保护第三方插件名称默认不出现在日志中。来自官方 Anthropic 源的插件始终按名称标识。`plugin_id_hash` 和 `plugin.name` 属性流向您自己的监控后端,不会发送给 Anthropic1133* `plugin.name`(当 `is_plugin` 为 `true` 时):提供该服务器的插件名称。对于第三方插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则这是字面字符串 `"third-party"`;这可以防止第三方插件名称默认出现在日志中。来自 Anthropic 官方来源的插件始终以名称标识。`plugin_id_hash` 和 `plugin.name` 属性会流向您自己的监控后端,不会发送给 Anthropic

1134* `server_name`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):配置的服务器名称1134* `server_name`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):配置的服务器名称

1135* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):连接失败时的完整错误消息1135* `error`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):连接失败时的完整错误消息

1136 1136 


1138 内部错误事件1138 内部错误事件

1139</h4>1139</h4>

1140 1140 

1141当 Claude Code 捕获意外的内部错误时记录。仅记录错误类名和 errno 风格代码。错误消息和堆栈跟踪永远不会包含。在针对 Amazon Bedrock、Google Cloud 的代理平台或 Microsoft Foundry 运行时,或当设置了 `DISABLE_ERROR_REPORTING` 时,不发出此事件。1141当 Claude Code 捕获到意外的内部错误时记录。仅记录错误类名和 errno 风格的代码。永远不会包含错误消息和堆栈跟踪。在针对 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 运行时,或者设置了 `DISABLE_ERROR_REPORTING` 时,不会发出此事件。

1142 1142 

1143**事件名称**:`claude_code.internal_error`1143**事件名称**:`claude_code.internal_error`

1144 1144 


1147* 所有[标准属性](#standard-attributes)1147* 所有[标准属性](#standard-attributes)

1148* `event.name`:`"internal_error"`1148* `event.name`:`"internal_error"`

1149* `event.timestamp`:ISO 8601 时间戳1149* `event.timestamp`:ISO 8601 时间戳

1150* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1150* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1151* `error_name`:错误类名,例如 `"TypeError"` 或 `"SyntaxError"`1151* `error_name`:错误类名,例如 `"TypeError"` 或 `"SyntaxError"`

1152* `error_code`:Node.js errno 代码,例如 `"ENOENT"`(当存在于错误上时)1152* `error_code`:错误上存在时的 Node.js errno 代码,例如 `"ENOENT"`

1153 1153 

1154<h4 id="plugin-installed-event">1154<h4 id="plugin-installed-event">

1155 插件已安装事件1155 插件已安装事件

1156</h4>1156</h4>

1157 1157 

1158当插件完成安装时记录,来自 `claude plugin install` CLI 命令和交互式 `/plugin` UI。1158在插件完成安装时记录,来源包括 `claude plugin install` CLI 命令和交互式 `/plugin` UI。

1159 1159 

1160**事件名称**:`claude_code.plugin_installed`1160**事件名称**:`claude_code.plugin_installed`

1161 1161 


1164* 所有[标准属性](#standard-attributes)1164* 所有[标准属性](#standard-attributes)

1165* `event.name`:`"plugin_installed"`1165* `event.name`:`"plugin_installed"`

1166* `event.timestamp`:ISO 8601 时间戳1166* `event.timestamp`:ISO 8601 时间戳

1167* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1167* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1168* `marketplace.is_official`:如果市场是官方 Anthropic 市场则为 `"true"`,否则为 `"false"`1168* `marketplace.is_official`:如果市场是 Anthropic 官方市场则为 `"true"`,否则为 `"false"`

1169* `install.trigger`:`"cli"` 或 `"ui"`1169* `install.trigger`:`"cli"` 或 `"ui"`

1170* `plugin.name`:已安装插件的名称。对于第三方市场,仅当设置了 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1170* `plugin.name`:已安装插件的名称。对于第三方市场,仅在 `OTEL_LOG_TOOL_DETAILS=1` 时包含

1171* `plugin.version`:在市场条目中声明时的插件版本。对于第三方市场,仅当设置了 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1171* `plugin.version`:在市场条目中声明的插件版本。对于第三方市场,仅在 `OTEL_LOG_TOOL_DETAILS=1` 时包含

1172* `marketplace.name`:插件安装的市场。对于第三方市场,仅当设置了 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1172* `marketplace.name`:插件的安装来源市场。对于第三方市场,仅在 `OTEL_LOG_TOOL_DETAILS=1` 时包含

1173 1173 

1174<h4 id="plugin-loaded-event">1174<h4 id="plugin-loaded-event">

1175 插件加载事件1175 插件已加载事件

1176</h4>1176</h4>

1177 1177 

1178在会话开始时为每个启用的插件记录一次。使用此事件来清点您的整个舰队中哪些插件处于活跃状态,作为记录安装操作本身的 `plugin_installed` 的补充。1178在会话开始时针对每个已启用的插件记录一次。使用此事件可以盘点整个设备群中哪些插件处于活跃状态,作为记录安装操作本身的 `plugin_installed` 的补充。

1179 1179 

1180**事件名称**:`claude_code.plugin_loaded`1180**事件名称**:`claude_code.plugin_loaded`

1181 1181 


1184* 所有[标准属性](#standard-attributes)1184* 所有[标准属性](#standard-attributes)

1185* `event.name`:`"plugin_loaded"`1185* `event.name`:`"plugin_loaded"`

1186* `event.timestamp`:ISO 8601 时间戳1186* `event.timestamp`:ISO 8601 时间戳

1187* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1187* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1188* `plugin.name`:插件的名称。对于官方市场和内置捆绑之外的插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`1188* `plugin.name`:插件的名称。对于官方市场和内置捆绑包之外的插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`

1189* `marketplace.name`:插件安装的市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`1189* `marketplace.name`:插件的安装来源市场(已知时)。在与 `plugin.name` 相同的条件下编辑为 `"third-party"`

1190* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明版本时才包含1190* `plugin.version`:来自插件清单的版本。仅当名称未被编辑且清单声明了版本时包含

1191* `plugin.scope`:插件的来源类别:`"official"`、`"community"`、`"org"`、`"user-local"` 或 `"default-bundle"`1191* `plugin.scope`:插件的来源类别:`"official"`、`"community"`、`"org"`、`"user-local"` 或 `"default-bundle"`

1192* `enabled_via`:插件如何被启用的方式:`"default-enable"`、`"org-policy"`、`"admin-install"`、`"seed-mount"` 或 `"user-install"`。`"admin-install"` 值表示插件在[**组织设置 > 插件和技能**](https://claude.ai/admin-settings/skills?tab=inventory)中为您的组织设置为必需或自动安装。在 v2.1.246 之前,Claude Code 将这些插件报告为 `"user-install"` 或 `"seed-mount"`1192* `enabled_via`:插件被启用的方式:`"default-enable"`、`"org-policy"`、`"admin-install"`、`"seed-mount"` 或 `"user-install"`。`"admin-install"` 值表示该插件在 [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory) 中被设置为您组织的必需或自动安装插件。在 v2.1.246 之前,Claude Code 将这些插件报告为 `"user-install"` 或 `"seed-mount"`

1193* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算整个舰队中加载的不同第三方插件,而无需记录其名称。对于[从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),Claude Code 使用 claude.ai 为插件报告的市场名称或 `synced` 哈希插件名称。在 v2.1.246 之前,Claude Code 在哈希中没有使用 claude.ai 报告的市场名称1193* `plugin_id_hash`:插件名称和市场的确定性哈希,仅发送到您配置的导出器。使您能够在不记录名称的情况下统计整个设备群中加载的不同第三方插件的数量。对于[从 claude.ai 同步的插件](/docs/zh-CN/plugins/loading#synced-plugins),Claude Code 会将插件名称与 claude.ai 为该插件报告的市场名称一起进行哈希,否则与 `synced` 一起进行哈希。在 v2.1.246 之前,Claude Code 在哈希中不使用 claude.ai 报告的市场名称

1194* `has_hooks`:插件是否贡献钩子1194* `has_hooks`:插件是否提供 hook

1195* `has_mcp`:插件是否贡献 MCP 服务器1195* `has_mcp`:插件是否提供 MCP 服务器

1196* `host_owned_mcp`:当 SDK 主机管理此插件的 MCP 连接且 Claude Code 跳过了读取插件的 MCP 服务器配置时为 `true`,否则为 `false`1196* `host_owned_mcp`:当 SDK 主机管理此插件的 MCP 连接且 Claude Code 跳过了读取插件的 MCP 服务器配置时为 `true`,否则为 `false`

1197* `skill_path_count`:插件声明的技能目录数1197* `skill_path_count`:插件声明的 skill 目录数量

1198* `command_path_count`:插件声明的命令目录数1198* `command_path_count`:插件声明的命令目录数量

1199* `agent_path_count`:插件声明的代理目录数1199* `agent_path_count`:插件声明的 Agent 目录数量

1200* `safe_mode`:当会话以 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。在安全模式下,此事件仅报告配置的清单;插件的命令、技能、钩子和 MCP 服务器不加载。需要 Claude Code v2.1.169 或更高版本1200* `safe_mode`:当会话使用 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。在安全模式下,此事件仅报告已配置的清单;插件的命令、skill、hook 和 MCP 服务器不会加载。需要 Claude Code v2.1.169 或更高版本

1201 1201 

1202<h4 id="skill-activated-event">1202<h4 id="skill-activated-event">

1203 技能激活事件1203 Skill 已激活事件

1204</h4>1204</h4>

1205 1205 

1206当技能被调用时记录,无论 Claude 是通过技能工具调用它还是您将其作为 `/` 命令运行。1206在调用 skill 时记录,无论是 Claude 通过 Skill 工具调用它,还是您以 `/` 命令的形式运行它。

1207 1207 

1208**事件名称**:`claude_code.skill_activated`1208**事件名称**:`claude_code.skill_activated`

1209 1209 


1212* 所有[标准属性](#standard-attributes)1212* 所有[标准属性](#standard-attributes)

1213* `event.name`:`"skill_activated"`1213* `event.name`:`"skill_activated"`

1214* `event.timestamp`:ISO 8601 时间戳1214* `event.timestamp`:ISO 8601 时间戳

1215* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1215* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1216* `skill.name`:技能的名称。对于用户定义和第三方插件技能,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`1216* `skill.name`:skill 的名称。对于用户定义的和第三方插件的 skill,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为占位符 `"custom_skill"`

1217* `invocation_trigger`:技能如何被触发(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)1217* `invocation_trigger`:skill 的触发方式(`"user-slash"`、`"claude-proactive"` 或 `"nested-skill"`)

1218* `skill.source`:技能从何处加载(例如,`"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)1218* `skill.source`:skill 的加载来源(例如 `"bundled"`、`"userSettings"`、`"projectSettings"`、`"plugin"`)

1219* `skill.kind`:当技能是工作流技能时为 `"workflow"`。否则不存在1219* `skill.kind`:当 skill 是工作流 skill 时为 `"workflow"`。否则不存在

1220* `plugin.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时的所有者插件的名称1220* `plugin.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当 skill 由插件提供时,所属插件的名称

1221* `marketplace.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当技能由插件提供时,所有者插件安装的市场1221* `marketplace.name`(当 `OTEL_LOG_TOOL_DETAILS=1` 或插件来自官方市场时):当 skill 由插件提供时,所属插件的安装来源市场

1222 1222 

1223<h4 id="at-mention-event">1223<h4 id="at-mention-event">

1224 @提及事件1224 @ 提及事件

1225</h4>1225</h4>

1226 1226 

1227当 Claude Code 解析提示中的 `@` 提及时记录。并非每个提及都发出事件:早期退出路径如权限拒绝、超大文件、PDF 参考附件和目录列表失败返回而不记录。1227当 Claude Code 解析提示词中的 `@` 提及时记录。并非每个提及都会发出事件:提前退出的路径,例如权限拒绝、文件过大、PDF 引用附件以及目录列表失败,会在不记录日志的情况下返回。

1228 1228 

1229每次 Claude Code 读取提示词时,对于 `mention_type` 为 `"agent"` 的事件最多记录 100 个,对于 `"mcp_resource"` 也最多记录 100 个。超出任一限制的提及仍会被解析,但不会发出事件。1229每次 Claude Code 读取提示词时,最多记录 100 个 `mention_type` 为 `"agent"` 的事件和 100 个 `mention_type` 为 `"mcp_resource"` 的事件。超出任一限制的提及仍会被解析,但不会发出事件。

1230 1230 

1231**事件名称**:`claude_code.at_mention`1231**事件名称**:`claude_code.at_mention`

1232 1232 


1235* 所有[标准属性](#standard-attributes)1235* 所有[标准属性](#standard-attributes)

1236* `event.name`:`"at_mention"`1236* `event.name`:`"at_mention"`

1237* `event.timestamp`:ISO 8601 时间戳1237* `event.timestamp`:ISO 8601 时间戳

1238* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1238* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1239* `mention_type`:提及的类型(`"file"`、`"directory"`、`"agent"`、`"mcp_resource"`、`"peer"`)。`"peer"` 值表示您提及了[您的其他 Claude Code 会话之一](/docs/zh-CN/cross-session-messaging)。需要 Claude Code v2.1.232 或更高版本1239* `mention_type`:提及的类型(`"file"`、`"directory"`、`"agent"`、`"mcp_resource"`、`"peer"`)。`"peer"` 值表示您提及了[您的另一个 Claude Code 会话](/docs/zh-CN/cross-session-messaging)。需要 Claude Code v2.1.232 或更高版本

1240* `success`:提及是否成功解析(`"true"` 或 `"false"`)1240* `success`:提及是否成功解析(`"true"` 或 `"false"`)

1241 1241 

1242<h4 id="api-retries-exhausted-event">1242<h4 id="api-retries-exhausted-event">

1243 API 重试耗尽事件1243 API 重试耗尽事件

1244</h4>1244</h4>

1245 1245 

1246当 API 请求在多次尝试后失败时记录一次。与最终 `api_error` 事件一起发出。1246当 API 请求在多次尝试后失败时记录一次。与最终的 `api_error` 事件一起发出。

1247 1247 

1248**事件名称**:`claude_code.api_retries_exhausted`1248**事件名称**:`claude_code.api_retries_exhausted`

1249 1249 


1252* 所有[标准属性](#standard-attributes)1252* 所有[标准属性](#standard-attributes)

1253* `event.name`:`"api_retries_exhausted"`1253* `event.name`:`"api_retries_exhausted"`

1254* `event.timestamp`:ISO 8601 时间戳1254* `event.timestamp`:ISO 8601 时间戳

1255* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1255* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1256* `model`:使用的模型1256* `model`:使用的模型

1257* `error`:最终错误消息1257* `error`:最终错误消息

1258* `status_code`:HTTP 状态代码作为数字。对于非 HTTP 错误不存在。1258* `status_code`:以数字表示的 HTTP 状态码。对于非 HTTP 错误不存在。

1259* `total_attempts`:进行的总尝试次数1259* `total_attempts`:已进行的尝试总次数

1260* `total_retry_duration_ms`:所有尝试中的总挂钟时间1260* `total_retry_duration_ms`:所有尝试的总挂钟时间

1261* `speed`:`"fast"` 或 `"normal"`1261* `speed`:`"fast"` 或 `"normal"`

1262 1262 

1263<h4 id="hook-registered-event">1263<h4 id="hook-registered-event">

1264 钩子已注册事件1264 Hook 已注册事件

1265</h4>1265</h4>

1266 1266 

1267在会话开始时为每个配置的钩子记录一次。使用此事件来清点您的整个舰队中哪些钩子处于活跃状态,作为每次执行 `hook_execution_start` 和 `hook_execution_complete` 事件的补充。1267在会话开始时针对每个已配置的 hook 记录一次。使用此事件可以盘点整个设备群中哪些 hook 处于活跃状态,作为按执行记录的 `hook_execution_start` 和 `hook_execution_complete` 事件的补充。

1268 1268 

1269**事件名称**:`claude_code.hook_registered`1269**事件名称**:`claude_code.hook_registered`

1270 1270 


1273* 所有[标准属性](#standard-attributes)1273* 所有[标准属性](#standard-attributes)

1274* `event.name`:`"hook_registered"`1274* `event.name`:`"hook_registered"`

1275* `event.timestamp`:ISO 8601 时间戳1275* `event.timestamp`:ISO 8601 时间戳

1276* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1276* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1277* `hook_event`:钩子事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`1277* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`

1278* `hook_type`:钩子实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`1278* `hook_type`:hook 实现类型:`"command"`、`"prompt"`、`"mcp_tool"`、`"http"` 或 `"agent"`

1279* `hook_source`:钩子定义的位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`1279* `hook_source`:hook 的定义位置:`"userSettings"`、`"projectSettings"`、`"localSettings"`、`"flagSettings"`、`"policySettings"` 或 `"pluginHook"`

1280* `safe_mode`:当会话以 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本1280* `safe_mode`:当会话使用 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本

1281* `hook_matcher`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):钩子配置中的匹配器字符串(当设置了一个时)1281* `hook_matcher`(当 `OTEL_LOG_TOOL_DETAILS=1` 时):hook 配置中的匹配器字符串(如果设置了的话)

1282* `plugin.name`(当 `hook_source` 为 `"pluginHook"` 时):贡献插件的名称。对于官方市场和内置捆绑之外的插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`1282* `plugin.name`(当 `hook_source` 为 `"pluginHook"` 时):提供该 hook 的插件名称。对于官方市场和内置捆绑包之外的插件,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则值为 `"third-party"`

1283* `plugin_id_hash`(当 `hook_source` 为 `"pluginHook"` 时):插件名称和市场的确定性哈希,仅发送到您配置的导出器。让您计算不同的贡献插件而无需记录其名称。Claude Code 按[插件加载事件](#plugin-loaded-event)下描述的方式计算它1283* `plugin_id_hash`(当 `hook_source` 为 `"pluginHook"` 时):插件名称和市场的确定性哈希,仅发送到您配置的导出器。使您能够在不记录名称的情况下统计提供 hook 的不同插件的数量。Claude Code 按照[插件已加载事件](#plugin-loaded-event)中描述的方式计算它

1284 1284 

1285<h4 id="hook-execution-start-event">1285<h4 id="hook-execution-start-event">

1286 钩子执行开始事件1286 Hook 执行开始事件

1287</h4>1287</h4>

1288 1288 

1289当一个或多个钩子开始为钩子事件执行时记录。1289当一个或多个 hook 开始为某个 hook 事件执行时记录。

1290 1290 

1291**事件名称**:`claude_code.hook_execution_start`1291**事件名称**:`claude_code.hook_execution_start`

1292 1292 


1295* 所有[标准属性](#standard-attributes)1295* 所有[标准属性](#standard-attributes)

1296* `event.name`:`"hook_execution_start"`1296* `event.name`:`"hook_execution_start"`

1297* `event.timestamp`:ISO 8601 时间戳1297* `event.timestamp`:ISO 8601 时间戳

1298* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1298* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1299* `hook_event`:钩子事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`1299* `hook_event`:hook 事件类型,例如 `"PreToolUse"` 或 `"PostToolUse"`

1300* `hook_name`:完整钩子名称包括匹配器,例如 `"PreToolUse:Write"`1300* `hook_name`:包含匹配器的完整 hook 名称,例如 `"PreToolUse:Write"`

1301* `num_hooks`:匹配钩子命令的数量1301* `num_hooks`:匹配的 hook 命令数量

1302* `managed_only`:当仅允许管理策略钩子时为 `"true"`1302* `managed_only`:当仅允许托管策略 hook 时为 `"true"`

1303* `hook_source`:`"policySettings"` 或 `"merged"`1303* `hook_source`:`"policySettings"` 或 `"merged"`

1304* `safe_mode`:当会话以 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本1304* `safe_mode`:当会话使用 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本

1305* `hook_definitions`:JSON 序列化的钩子配置。仅当启用了详细的 beta 跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1305* `hook_definitions`:JSON 序列化的 hook 配置。仅当同时启用了详细 beta 追踪和 `OTEL_LOG_TOOL_DETAILS=1` 时包含

1306 1306 

1307<h4 id="hook-execution-complete-event">1307<h4 id="hook-execution-complete-event">

1308 钩子执行完成事件1308 Hook 执行完成事件

1309</h4>1309</h4>

1310 1310 

1311当钩子事件的所有钩子完成时记录。1311当某个 hook 事件的所有 hook 都已完成时记录。

1312 1312 

1313**事件名称**:`claude_code.hook_execution_complete`1313**事件名称**:`claude_code.hook_execution_complete`

1314 1314 


1317* 所有[标准属性](#standard-attributes)1317* 所有[标准属性](#standard-attributes)

1318* `event.name`:`"hook_execution_complete"`1318* `event.name`:`"hook_execution_complete"`

1319* `event.timestamp`:ISO 8601 时间戳1319* `event.timestamp`:ISO 8601 时间戳

1320* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1320* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1321* `hook_event`:钩子事件类型1321* `hook_event`:hook 事件类型

1322* `hook_name`:完整钩子名称包括匹配器1322* `hook_name`:包含匹配器的完整 hook 名称

1323* `num_hooks`:匹配钩子命令的数量1323* `num_hooks`:匹配的 hook 命令数量

1324* `num_success`:成功完成的计数1324* `num_success`:成功完成的数量

1325* `num_blocking`:返回阻止决策的计数1325* `num_blocking`:返回阻止决策的数量

1326* `num_non_blocking_error`:失败而不阻止的计数1326* `num_non_blocking_error`:失败但未阻止的数量

1327* `num_cancelled`:在完成前取消的计数1327* `num_cancelled`:在完成前被取消的数量

1328* `total_duration_ms`:所有匹配钩子的挂钟持续时间1328* `total_duration_ms`:所有匹配 hook 的挂钟持续时间

1329* `stdout_chars`:成功的匹配钩子中的 stdout 总字符数。需要 Claude Code v2.1.280 或更高版本1329* `stdout_chars`:成功执行的匹配 hook 的 stdout 总字符数。需要 Claude Code v2.1.280 或更高版本

1330* `additional_context_chars`:匹配钩子返回的 `additionalContext` 的总字符数。需要 Claude Code v2.1.280 或更高版本1330* `additional_context_chars`:匹配 hook 返回的 `additionalContext` 总字符数。需要 Claude Code v2.1.280 或更高版本

1331* `system_message_chars`:匹配钩子返回的 `systemMessage` 的总字符数。需要 Claude Code v2.1.280 或更高版本1331* `system_message_chars`:匹配 hook 返回的 `systemMessage` 总字符数。需要 Claude Code v2.1.280 或更高版本

1332* `initial_user_message_chars`:匹配钩子返回的 `initialUserMessage` 的总字符数。需要 Claude Code v2.1.280 或更高版本1332* `initial_user_message_chars`:匹配 hook 返回的 `initialUserMessage` 总字符数。需要 Claude Code v2.1.280 或更高版本

1333* `num_outputs_persisted`:超过[10,000 字符上限](/docs/zh-CN/hooks#json-output)的钩子输出数,Claude Code 保存到文件。需要 Claude Code v2.1.280 或更高版本1333* `num_outputs_persisted`:超过 [10,000 字符上限](/docs/zh-CN/hooks#json-output)并被 Claude Code 保存到文件中的 hook 输出数量。需要 Claude Code v2.1.280 或更高版本

1334* `managed_only`:当仅允许管理策略钩子时为 `"true"`1334* `managed_only`:当仅允许托管策略 hook 时为 `"true"`

1335* `hook_source`:`"policySettings"` 或 `"merged"`1335* `hook_source`:`"policySettings"` 或 `"merged"`

1336* `safe_mode`:当会话以 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本1336* `safe_mode`:当会话使用 [`--safe-mode`](/docs/zh-CN/cli-reference) 启动时为 `"true"`,否则为 `"false"`。需要 Claude Code v2.1.169 或更高版本

1337* `hook_definitions`:JSON 序列化的钩子配置。仅当启用了详细的 beta 跟踪和 `OTEL_LOG_TOOL_DETAILS=1` 时才包含1337* `hook_definitions`:JSON 序列化的 hook 配置。仅当同时启用了详细 beta 追踪和 `OTEL_LOG_TOOL_DETAILS=1` 时包含

1338 1338 

1339<h4 id="hook-plugin-metrics-event">1339<h4 id="hook-plugin-metrics-event">

1340 钩子插件指标事件1340 Hook 插件指标事件

1341</h4>1341</h4>

1342 1342 

1343当官方市场插件钩子发出每次调用指标时记录。仅从官方 Anthropic 市场安装的插件可以发出这些。第三方市场插件和用户配置的钩子不发出到此事件。使用此事件从您自己的可观测性堆栈监控插件行为,例如查找率、成本和持续时间。1343当官方市场插件的 hook 发出每次调用的指标时记录。只有从 Anthropic 官方市场安装的插件才能发出这些指标。第三方市场插件和用户配置的 hook 不会向此事件发出数据。使用此事件可以从您自己的可观测性技术栈监控插件行为,例如发现率、成本和持续时间。

1344 1344 

1345**事件名称**:`claude_code.hook_plugin_metrics`1345**事件名称**:`claude_code.hook_plugin_metrics`

1346 1346 


1349* 所有[标准属性](#standard-attributes)1349* 所有[标准属性](#standard-attributes)

1350* `event.name`:`"hook_plugin_metrics"`1350* `event.name`:`"hook_plugin_metrics"`

1351* `event.timestamp`:ISO 8601 时间戳1351* `event.timestamp`:ISO 8601 时间戳

1352* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1352* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1353* `plugin_id`:`<name>@<marketplace>` 形式的插件标识符1353* `plugin_id`:`<name>@<marketplace>` 形式的插件标识符

1354* `hook_event`:发出指标的钩子事件类型1354* `hook_event`:发出指标的 hook 事件类型

1355* 最多 20 个由插件发出的指标键。名称匹配 `^[a-z][a-z0-9_]{0,39}$`。值为 Boolean 或数字。1355* 最多 20 个由插件发出的指标键。名称匹配 `^[a-z][a-z0-9_]{0,39}$`。值为布尔值或数字。

1356 1356 

1357<h4 id="compaction-event">1357<h4 id="compaction-event">

1358 压缩事件1358 上下文压缩事件

1359</h4>1359</h4>

1360 1360 

1361当对话压缩完成时记录。1361在对话压缩完成时记录。

1362 1362 

1363**事件名称**:`claude_code.compaction`1363**事件名称**:`claude_code.compaction`

1364 1364 


1367* 所有[标准属性](#standard-attributes)1367* 所有[标准属性](#standard-attributes)

1368* `event.name`:`"compaction"`1368* `event.name`:`"compaction"`

1369* `event.timestamp`:ISO 8601 时间戳1369* `event.timestamp`:ISO 8601 时间戳

1370* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1370* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1371* `trigger`:`"auto"` 或 `"manual"`1371* `trigger`:`"auto"` 或 `"manual"`

1372* `success`:`"true"` 或 `"false"`1372* `success`:`"true"` 或 `"false"`

1373* `duration_ms`:压缩持续时间1373* `duration_ms`:压缩持续时间

1374* `pre_tokens`:压缩前的近似令牌计数1374* `pre_tokens`:压缩前的大致 token 数量

1375* `post_tokens`:压缩后的近似令牌计数1375* `post_tokens`:压缩后的大致 token 数量

1376* `error`:压缩失败时的错误消息1376* `error`:压缩失败时的错误消息

1377* `precompute_reuse`:仅当 `trigger` 为 `"manual"` 时设置。自动压缩可以在上下文窗口填满之前在后台预先准备摘要,此属性记录 `/compact` 是否复用了该预先准备的摘要。`"hit"` 表示已复用;`"miss_custom_instructions"`、`"miss_hook"` 和 `"miss_not_ready"` 给出了改为重新计算摘要的原因1377* `precompute_reuse`:仅在 `trigger` 为 `"manual"` 时,或针对[空闲压缩](/docs/zh-CN/settings-reference#idlecompaction)(其 `trigger` 报告为 `"auto"`)时设置。自动压缩可以在上下文窗口填满之前在后台准备摘要,此属性记录压缩是否重用了该预先准备的摘要。`"hit"` 表示已重用;`"miss_custom_instructions"`、`"miss_hook"` 和 `"miss_not_ready"` 给出改为重新计算摘要的原因

1378 1378 

1379<h4 id="subagent-completed-event">1379<h4 id="subagent-completed-event">

1380 子代理完成事件1380 子代理完成事件

1381</h4>1381</h4>

1382 1382 

1383当[子代理](/docs/zh-CN/sub-agents)完成并将其结果返回到启动它的对话时记录。使用它按子代理类型汇总工具使用和运行时间;对于令牌或成本汇总,使用按 `query_source` `"subagent"` 过滤的[令牌计数器](#token-counter)和[成本计数器](#cost-counter),因为此事件的 `total_tokens` 仅涵盖最终请求。`"subagent"` 类别也计算来自代理钩子的请求,它不发出子代理事件。1383当[子代理](/docs/zh-CN/sub-agents)完成并将其结果返回给启动它的对话时记录。可使用此事件按子代理类型汇总工具使用情况和运行时间;如需汇总 token 或成本,请使用按 `query_source` `"subagent"` 筛选的 [token 计数器](#token-counter)和[成本计数器](#cost-counter),因为此事件的 `total_tokens` 仅涵盖最后一个请求。`"subagent"` 类别还会统计来自基于 Agent 的 hook 的请求,这类 hook 不会发出子代理事件。

1384 1384 

1385**事件名称**:`claude_code.subagent_completed`1385**事件名称**:`claude_code.subagent_completed`

1386 1386 


1389* 所有[标准属性](#standard-attributes)1389* 所有[标准属性](#standard-attributes)

1390* `event.name`:`"subagent_completed"`1390* `event.name`:`"subagent_completed"`

1391* `event.timestamp`:ISO 8601 时间戳1391* `event.timestamp`:ISO 8601 时间戳

1392* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1392* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1393* `agent_type`:子代理类型。内置代理名称和来自官方市场插件的代理逐字显示;其他代理名称被替换为 `"custom"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`1393* `agent_type`:子代理类型。内置 Agent 名称以及来自官方市场插件的 Agent 会原样显示;除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则其他 Agent 名称会被替换为 `"custom"`

1394* `agent.source`:代理定义来自何处:`built-in`、`plugin` 或定义自定义代理的设置源,例如 `userSettings` 或 `projectSettings`1394* `agent.source`:Agent 定义的来源:`built-in`、`plugin`,或定义自定义 Agent 的设置来源,例如 `userSettings` 或 `projectSettings`

1395* `is_built_in`:子代理是否是内置代理类型1395* `is_built_in`:该子代理是否为内置 Agent 类型

1396* `is_async`:子代理是否在[后台](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)运行1396* `is_async`:该子代理是否在[后台](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)运行

1397* `total_tokens`:子代理最终 API 请求的令牌足迹:该一个请求的输入、缓存创建、缓存读取和输出令牌,大致是子代理在完成时的上下文大小。不是整个运行的总和1397* `total_tokens`:子代理最后一个 API 请求的 token 占用量:即该单个请求的输入、缓存创建、缓存读取和输出 token,大致相当于子代理完成时的上下文大小。并非整个运行过程的总和

1398* `total_tool_uses`:子代理在整个运行中进行的工具调用数1398* `total_tool_uses`:子代理在整个运行过程中进行的工具调用次数

1399* `duration_ms`:运行时间(以毫秒为单位)1399* `duration_ms`:运行时间(毫秒)

1400* `model`:子代理被解析为运行的模型1400* `model`:子代理被解析为运行的模型

1401* `final_model`:产生子代理最终响应的模型,在中途切换(如回退)后与 `model` 不同。需要 Claude Code v2.1.212 或更高版本1401* `final_model`:生成子代理最终回复的模型;在运行中途发生切换(例如回退)后,该值与 `model` 不同。需要 Claude Code v2.1.212 或更高版本

1402* `model_swapped`:是否有多个模型为子代理的请求提供服务。需要 Claude Code v2.1.212 或更高版本1402* `model_swapped`:是否有多个模型处理了该子代理的请求。需要 Claude Code v2.1.212 或更高版本

1403* `plugin_id_hash`、`plugin.name`:对于插件提供的代理存在。官方市场插件名称逐字显示;其他插件名称被替换为 `"third-party"`,除非设置了 `OTEL_LOG_TOOL_DETAILS=1`1403* `plugin_id_hash`、`plugin.name`:对于由插件提供的 Agent 存在。官方市场插件名称会原样显示;除非设置了 `OTEL_LOG_TOOL_DETAILS=1`,否则其他插件名称会被替换为 `"third-party"`

1404 1404 

1405<h4 id="feedback-survey-event">1405<h4 id="feedback-survey-event">

1406 反馈调查事件1406 反馈调查事件

1407</h4>1407</h4>

1408 1408 

1409当显示或回答会话质量调查时记录。请参阅[会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys)了解调查收集的内容以及如何控制它们。1409在显示或回答会话质量调查时记录。有关调查收集的内容以及如何控制调查,请参阅[会话质量调查](/docs/zh-CN/data-usage#session-quality-surveys)。

1410 1410 

1411**事件名称**:`claude_code.feedback_survey`1411**事件名称**:`claude_code.feedback_survey`

1412 1412 


1415* 所有[标准属性](#standard-attributes)1415* 所有[标准属性](#standard-attributes)

1416* `event.name`:`"feedback_survey"`1416* `event.name`:`"feedback_survey"`

1417* `event.timestamp`:ISO 8601 时间戳1417* `event.timestamp`:ISO 8601 时间戳

1418* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1418* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1419* `event_type`:调查生命周期事件,例如 `"appeared"`、`"responded"` 或 `"transcript_prompt_appeared"`1419* `event_type`:调查生命周期事件,例如 `"appeared"`、`"responded"` 或 `"transcript_prompt_appeared"`

1420* `appearance_id`:链接为一个调查实例发出的事件的唯一 ID1420* `appearance_id`:关联同一调查实例所发出事件的唯一 ID

1421* `survey_type`:哪个调查产生了事件。`"session"` 是"Claude 做得怎么样?"评分提示1421* `survey_type`:生成该事件的调查。`"session"` 是 "How is Claude doing?" 评分提示

1422* `response`:用户在 `responded` 事件上的选择1422* `response`:用户在 `responded` 事件中的选择

1423* `enabled_via_override`:设置了 [`CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL`](/docs/zh-CN/env-vars) 时为 `true`。以布尔值而非字符串形式发出。存在于 `session` 调查事件中。可按此属性筛选,以确认覆盖已在整个设备群中生效1423* `enabled_via_override`:设置了 [`CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL`](/docs/zh-CN/env-vars) 时为 `true`。以布尔值而非字符串形式发出。存在于 `session` 调查事件中。可按此属性筛选,以确认该覆盖已在整个设备群中生效

1424 1424 

1425<h4 id="retention-sweep-event">1425<h4 id="retention-sweep-event">

1426 保留扫描事件1426 保留清理事件

1427</h4>1427</h4>

1428 1428 

1429每次运行保留清理扫描时记录一次,该扫描删除[会话记录和其他应用数据](/docs/zh-CN/claude-directory#cleaned-up-automatically)早于 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 设置的数据。Claude Code 在后台最多每个会话运行一次扫描,删除任何内容的运行仍会发出事件。如果 Claude Code 在过去 24 小时内在同一台机器的任何会话中运行了扫描,它会将此会话的扫描延迟至少 10 分钟,因此更早退出的会话不发出任何内容。当您使用 `--bare` 运行 `claude -p` 时,Claude Code 不运行扫描,不发出任何内容。1429保留清理每运行一次记录一次。该清理会删除早于 [`cleanupPeriodDays`](/docs/zh-CN/settings-reference#cleanupperioddays) 设置的[会话记录和其他应用程序数据](/docs/zh-CN/claude-directory#cleaned-up-automatically)。Claude Code 在后台运行清理,每个会话最多运行一次,即使某次运行未删除任何内容,也会发出该事件。如果 Claude Code 在过去 24 小时内已在同一台机器上的任何会话中运行过清理,则会将本会话的清理延迟至少 10 分钟,因此提前退出的会话不会发出任何事件。当您使用 `--bare` 运行 `claude -p` 时,Claude Code 不会运行清理,也不会发出任何事件。

1430 1430 

1431像此页面上的每个 OTel 事件一样,它仅流向您配置的遥测后端。需要 Claude Code v2.1.227 或更高版本。1431与本页上的所有 OTel 事件一样,该事件仅发送到您配置的遥测后端。需要 Claude Code v2.1.227 或更高版本。

1432 1432 

1433当 Claude Code 无法安全地确定保留期时,它暂停扫描并发出事件,`result` 设置为 `"skipped"` 和 `skip_reason`。当[管理设置](/docs/zh-CN/server-managed-settings)设置 `cleanupPeriodDays` 时,管理值固定保留期,扫描即使在较低优先级范围内的设置文件损坏或无效时也运行。当 `managed-settings.json` 本身无法读取时,Claude Code 仍暂停扫描,除非[管理层](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)从其他地方(如服务器管理设置或损坏文件旁的 `managed-settings.d/` 放入)提供 `cleanupPeriodDays`。删除计数器属性仅当 `result` 为 `"complete"` 时存在。1433当 Claude Code 无法安全地确定保留期限时,会暂停清理,并发出 `result` 设置为 `"skipped"` 且带有 `skip_reason` 的事件。当[托管设置](/docs/zh-CN/server-managed-settings)设置了 `cleanupPeriodDays` 时,托管值会固定保留期限,即使较低优先级作用域中的设置文件损坏或无效,清理也会运行。当 `managed-settings.json` 本身无法读取时,Claude Code 仍会暂停清理,除非[托管层级](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)从其他位置提供了 `cleanupPeriodDays`,例如服务器托管设置,或位于损坏文件旁的 `managed-settings.d/` 附加文件。删除计数器属性仅在 `result` 为 `"complete"` 时存在。

1434 1434 

1435**事件名称**:`claude_code.retention_sweep`1435**事件名称**:`claude_code.retention_sweep`

1436 1436 


1439* 所有[标准属性](#standard-attributes)1439* 所有[标准属性](#standard-attributes)

1440* `event.name`:`"retention_sweep"`1440* `event.name`:`"retention_sweep"`

1441* `event.timestamp`:ISO 8601 时间戳1441* `event.timestamp`:ISO 8601 时间戳

1442* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1442* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1443* `result`:当扫描运行时为 `"complete"`,当 Claude Code 暂停它时为 `"skipped"`1443* `result`:清理已运行时为 `"complete"`,Claude Code 暂停清理时为 `"skipped"`

1444* `period_days`:来自合并设置的 `cleanupPeriodDays` 值(以天为单位),或当没有源设置它时为 `30`。在跳过的事件上,扫描会使用的值,从 Claude Code 可以读取的设置源计算1444* `period_days`:合并后设置中的 `cleanupPeriodDays` 值(以天为单位),如果没有任何来源设置该值,则为 `30`。在 skipped 事件中,为清理本应使用的值,根据 Claude Code 能够读取的设置来源计算得出

1445* `used_default`:当没有可读的设置源设置 `cleanupPeriodDays` 时为 `"true"`,否则为 `"false"`。在完成事件上,`"true"` 表示应用了 30 天默认值1445* `used_default`:没有可读取的设置来源设置 `cleanupPeriodDays` 时为 `"true"`,否则为 `"false"`。在 complete 事件中,`"true"` 表示应用了 30 天的默认值

1446* `skip_reason`:Claude Code 暂停扫描的原因。仅当 `result` 为 `"skipped"` 时存在:1446* `skip_reason`:Claude Code 暂停清理的原因。仅在 `result` 为 `"skipped"` 时存在:

1447 * `"user_source_disabled"`:用户设置被排除,例如通过 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 标志或 SDK 的 [`settingSources`](/docs/zh-CN/agent-sdk/typescript#options) 选项,且没有启用的源提供 `cleanupPeriodDays`1447 * `"user_source_disabled"`:用户设置被排除(例如通过 [`--setting-sources`](/docs/zh-CN/cli-reference#cli-flags) 标志或 SDK 的 [`settingSources`](/docs/zh-CN/agent-sdk/typescript#options) 选项),且没有已启用的来源提供 `cleanupPeriodDays`

1448 * `"settings_unknowable"`:设置文件无法读取或解析,因此 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 可能设置为 Claude Code 无法看到的值1448 * `"settings_unknowable"`:某个设置文件无法读取或解析,因此 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 可能被设置为 Claude Code 无法看到的值

1449 * `"settings_invalid_key_set"`:设置有验证错误且 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 被显式设置,因此回退到默认值可能会删除或保留违反该设置的文件1449 * `"settings_invalid_key_set"`:设置存在验证错误,且显式设置了 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays`,因此回退到默认值可能会违背该设置删除或保留文件

1450* `transcripts_deleted`:扫描删除的会话记录数,顶级 `~/.claude/projects/*/*.jsonl` 文件1450* `transcripts_deleted`:清理删除的会话记录数量,即顶层的 `~/.claude/projects/*/*.jsonl` 文件

1451* `transcripts_exempted_desktop`:超过保留期的记录数,扫描在[Claude Desktop 和 Cowork 规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)下保留。这些不计入 `files_past_cutoff`。需要 Claude Code v2.1.248 或更高版本1451* `transcripts_exempted_desktop`:已超过保留期限、但清理根据 [Claude Desktop 和 Cowork 规则](/docs/zh-CN/claude-directory#cleaned-up-automatically)予以保留的会话记录数量。这些不计入 `files_past_cutoff`。需要 Claude Code v2.1.248 或更高版本

1452* `session_files_deleted`:会话文件扫描删除的工件数:记录加上每个会话的伴随文件,如侧边栏、录音和工具结果1452* `session_files_deleted`:会话文件清理删除的文件数量:会话记录加上每个会话的配套文件,例如附属文件、录制文件和工具结果

1453* `artifacts_deleted`:扫描删除的数据目录中的总项目数,包括会话文件。某些扫描将整个删除的目录树计为一项,少数清理通过不贡献计数器,因此将值视为下限而不是精确文件计数1453* `artifacts_deleted`:清理在其覆盖的数据目录中删除的项目总数,包括会话文件。某些清理会将整个被删除的目录树计为一项,少数清理过程不会计入该计数器,因此应将该值视为下限,而非精确的文件数量

1454* `files_retained_fresh`:检查并保留在原地的文件,因为它们仍在保留期内。仅每个文件扫描计数这些,因此值是下限;非零值是正常稳定状态1454* `files_retained_fresh`:已检查并因仍在保留期限内而保留的文件。只有逐文件清理会统计这些文件,因此该值为下限;非零值是正常的稳定状态

1455* `files_past_cutoff`:早于保留期但扫描未能删除的文件,例如由于权限错误或文件被占用。该计数还包括扫描在 `skills/synced/` 或 `plugins/synced/` 下发现的每个过期文件夹,无论扫描是否将该文件夹移至回收站。除这些文件夹外,大于零的值表示有文件超出了配置的保留期;零并不能证明没有文件超出,因为删除整个目录失败会计入 `error_count`1455* `files_past_cutoff`:早于保留期限、但清理未能删除的文件,例如由于权限错误或文件被占用。该计数还包括清理在 `skills/synced/` 或 `plugins/synced/` 下发现的每个过期文件夹,无论是否将该文件夹移至回收站。除这些文件夹外,大于零的值表示有文件超出了配置的保留期限仍然存在;零并不能证明没有此类文件,因为删除整个目录失败时会计入 `error_count`

1456* `error_count`:扫描在列出或删除文件时遇到的错误数1456* `error_count`:清理在列出或删除文件时遇到的错误数量

1457 1457 

1458<h4 id="managed-settings-resolved-event">1458<h4 id="managed-settings-resolved-event">

1459 管理设置已解析事件1459 托管设置解析事件

1460</h4>1460</h4>

1461 1461 

1462使用会话解析的[管理设置](/docs/zh-CN/managed-settings)记录:在会话开始时一次,当管理设置或[策略助手](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的状态在会话期间更改时再次,以及当 Claude Code 拒绝启动或因 `error.type` 属性列出的原因之一而结束会话时。1462记录会话解析出的[托管设置](/docs/zh-CN/managed-settings):在会话开始时记录一次;在会话期间托管设置或[策略辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)的状态发生变化时再次记录;以及当 Claude Code 因 `error.type` 属性列出的某个原因拒绝启动或结束会话时记录。

1463使用此事件查找在意外管理源上运行的机器、策略助手失败的机器以及机器拒绝启动的原因。1463可使用此事件查找运行在意外托管来源上的机器、策略辅助程序出现故障的机器,以及机器拒绝启动的原因。

1464需要 Claude Code v2.1.274 或更高版本。1464需要 Claude Code v2.1.274 或更高版本。

1465 1465 

1466默认情况下,事件携带管理源和策略助手的状态,但不携带设置本身。要添加编辑的 `managed_settings.settings` 属性和 `managed_settings.resolved_sha256` 摘要,请设置 `OTEL_LOG_MANAGED_SETTINGS=1`:1466默认情况下,该事件包含托管来源和策略辅助程序的状态,但不包含设置本身。要添加经过脱敏的 `managed_settings.settings` 属性和 `managed_settings.resolved_sha256` 摘要,请设置 `OTEL_LOG_MANAGED_SETTINGS=1`:

1467 1467 

1468* 在管理设置、用户设置或 `--settings` 的 `env` 块中设置它,或在启动 Claude Code 的环境中。项目或本地设置中的值不会打开它,因为克隆的存储库可以写入它们。1468* 在托管设置、用户设置或 `--settings` 的 `env` 块中设置,或在启动 Claude Code 的环境中设置。项目设置或本地设置中的值不会启用它,因为克隆的仓库可以写入这些设置。

1469* 服务器管理设置可以在不显示[安全批准对话](/docs/zh-CN/server-managed-settings#security-approval-dialogs)的情况下设置它,因为变量仅将您组织自己的编辑策略添加到您的组织已接收的事件。1469* 服务器托管设置可以设置它,而无需显示[安全批准对话框](/docs/zh-CN/server-managed-settings#security-approval-dialogs),因为该变量只是将您组织自己的脱敏策略添加到您组织已在接收的事件中。

1470 1470 

1471在您尚未[信任](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)的文件夹中的交互式会话中,Claude Code 不导出拒绝事件。1471在您尚未[信任](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)的文件夹中的交互式会话里,Claude Code 不会导出拒绝事件。

1472 1472 

1473**事件名称**:`claude_code.managed_settings_resolved`1473**事件名称**:`claude_code.managed_settings_resolved`

1474 1474 


1477* 所有[标准属性](#standard-attributes)1477* 所有[标准属性](#standard-attributes)

1478* `event.name`:`"managed_settings_resolved"`1478* `event.name`:`"managed_settings_resolved"`

1479* `event.timestamp`:ISO 8601 时间戳1479* `event.timestamp`:ISO 8601 时间戳

1480* `event.sequence`:用于排序事件的每进程计数器,在[事件关联属性](#event-correlation-attributes)下描述1480* `event.sequence`:用于对事件排序的按进程计数器,详见[事件关联属性](#event-correlation-attributes)

1481* `managed_settings.trigger`:会话启动事件为 `"startup"`,当管理设置或策略助手的状态在会话后期更改时为 `"change"`,或当管理设置策略停止会话时为 `"refused"`。Claude Code 仅在属性与它发送的最后一个事件不同时发送 `change` 事件,更改的设置值即使 `OTEL_LOG_MANAGED_SETTINGS` 关闭也计数1481* `managed_settings.trigger`:会话开始事件为 `"startup"`;托管设置或策略辅助程序的状态在会话后期发生变化时为 `"change"`;托管设置策略阻止会话时为 `"refused"`。仅当某个属性与上次发送的事件不同时,Claude Code 才会发送 `change` 事件;即使 `OTEL_LOG_MANAGED_SETTINGS` 处于关闭状态,设置值的变化也会计入

1482* `error.type`:Claude Code 停止会话的原因。仅在 `refused` 事件上存在:1482* `error.type`:Claude Code 停止会话的原因。仅存在于 `refused` 事件中:

1483 * `"helper_failed"`:[策略助手运行失败](/docs/zh-CN/settings-reference#helper-failures)1483 * `"helper_failed"`:[策略辅助程序运行失败](/docs/zh-CN/settings-reference#helper-failures)

1484 * `"policy_invalid"`:管理设置包含停止 Claude Code 启动的错误,或管理源无法加载,因此 Claude Code 无法检查组织登录强制1484 * `"policy_invalid"`:托管设置包含阻止 Claude Code 启动的错误,或某个管理员来源因读取被拒绝以外的原因加载失败,导致 Claude Code 无法检查组织登录或提供商强制要求

1485 * `"provider_not_allowed"`:会话将使用 API 提供商,或将提供商的流量发送到管理的 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 列表不允许的主机。需要 Claude Code v2.1.285 或更高版本1485 * `"provider_not_allowed"`:会话将使用托管 [`allowedProviders`](/docs/zh-CN/settings-reference#allowedproviders) 列表不允许的 API 提供商,或将某个提供商的流量发送到该列表不允许的主机。需要 Claude Code v2.1.285 或更高版本

1486 * `"consent_rejected"`:用户拒绝了服务器管理设置的[安全批准对话](/docs/zh-CN/server-managed-settings#security-approval-dialogs)1486 * `"consent_rejected"`:用户拒绝了服务器托管设置的[安全批准对话框](/docs/zh-CN/server-managed-settings#security-approval-dialogs)

1487 * `"force_refresh_failed"`:[`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh) 需要的设置获取失败1487 * `"force_refresh_failed"`:[`forceRemoteSettingsRefresh`](/docs/zh-CN/settings-reference#forceremotesettingsrefresh) 所要求的设置获取失败

1488 * `"gateway_rejected"`:[Claude 应用网关](/docs/zh-CN/claude-apps-gateway)用 HTTP 403 回答了管理设置加载1488 * `"gateway_rejected"`:[Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 对托管设置加载返回了 HTTP 403

1489 * `"version_below_minimum"`:此版本的 Claude Code 低于 [`requiredMinimumVersion`](/docs/zh-CN/settings-reference#requiredminimumversion) 或高于 [`requiredMaximumVersion`](/docs/zh-CN/settings-reference#requiredmaximumversion)1489 * `"version_below_minimum"`:此版本的 Claude Code 低于 [`requiredMinimumVersion`](/docs/zh-CN/settings-reference#requiredminimumversion) 或高于 [`requiredMaximumVersion`](/docs/zh-CN/settings-reference#requiredmaximumversion)

1490 * `"_OTHER"`:Claude 应用网关管理设置加载因另一个原因失败1490 * `"_OTHER"`:Claude apps gateway 托管设置加载因其他原因失败

1491* `managed_settings.sources`:每个传递至少一个[策略键](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)的管理源,优先级最高的优先,包括其键在 `first-wins` 下不生效的源。值为 `"remote"`、`"plist"` 或 `"hklm"` 用于 MDM 或 OS 级策略、`"file"` 用于管理设置文件和放入、`"parent"` 当[嵌入主机](/docs/zh-CN/managed-settings#let-an-embedding-host-add-policy)提供设置时,以及 `"hkcu"` 用于 Claude Code [读取](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)时的 [Windows HKCU 注册表值](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)。仅携带策略键或 Claude Code 无法读取的源不列出。作为字符串数组发出,当没有管理源传递策略键时为空1491* `managed_settings.sources`:提供至少一个[策略键](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)的每个托管来源,按优先级从高到低排列,包括在 `first-wins` 下其键不生效的来源。取值为:`"remote"`;`"plist"` 或 `"hklm"` 表示 MDM 或操作系统级策略;`"file"` 表示托管设置文件和附加文件;`"parent"` 表示由[嵌入宿主](/docs/zh-CN/managed-settings#let-an-embedding-host-add-policy)提供设置;`"hkcu"` 表示 Claude Code [读取](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)的 [Windows HKCU 注册表值](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)。仅包含控制键的来源或 Claude Code 无法读取的来源不会列出。以字符串数组形式发出,没有托管来源提供策略键时为空

1492* `managed_settings.source_behavior`:Claude Code 读取的 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 值,`"first-wins"` 或 `"merge"`。当没有源设置键时为 `"first-wins"`1492* `managed_settings.source_behavior`:Claude Code 读取到的 [`managedSourcesBehavior`](/docs/zh-CN/settings-reference#managedsourcesbehavior) 值,为 `"first-wins"` 或 `"merge"`。没有来源设置该键时为 `"first-wins"`

1493* `managed_settings.helper.state`:所选 MDM 或文件源配置的策略助手的状态:1493* `managed_settings.helper.state`:所选 MDM 或文件来源所配置的策略辅助程序的状态:

1494 * `"ok"`:助手的输出作为管理设置1494 * `"ok"`:辅助程序的输出用作托管设置

1495 * `"bad_path"`、`"not_a_file"`、`"exit_nonzero"`、`"timed_out"`、`"oversize"`、`"parse_failed"`、`"envelope_invalid"` 或 `"schema_rejected"`:助手的最后一次运行失败。[助手失败](/docs/zh-CN/settings-reference#helper-failures)描述了这些情况1495 * `"bad_path"`、`"not_a_file"`、`"exit_nonzero"`、`"timed_out"`、`"oversize"`、`"parse_failed"`、`"envelope_invalid"` 或 `"schema_rejected"`:辅助程序上次运行失败。[辅助程序故障](/docs/zh-CN/settings-reference#helper-failures)介绍了这些情况

1496 * `"none"`:没有配置助手,或配置它的源不是 MDM 策略或管理设置文件1496 * `"none"`:未配置辅助程序,或配置辅助程序的来源不是 MDM 策略或托管设置文件

1497* `managed_settings.helper.applied`:当助手自己的输出作为管理设置时为 `"output"`,当它不时为 `"none"`1497* `managed_settings.helper.applied`:辅助程序自身的输出用作托管设置时为 `"output"`,否则为 `"none"`

1498* `managed_settings.helper.entry`:当 Claude Code 选择了 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 时为 `"policyHelper"`。当它选择了没有助手时不存在1498* `managed_settings.helper.entry`:Claude Code 选择了 [`policyHelper`](/docs/zh-CN/settings-reference#policyhelper) 时为 `"policyHelper"`。未选择辅助程序时不存在

1499* `managed_settings.helper.path`:助手的配置 [`path`](/docs/zh-CN/settings-reference#policyhelper-path)。每当 Claude Code 选择了助手时存在,无论 `OTEL_LOG_MANAGED_SETTINGS` 是否设置1499* `managed_settings.helper.path`:辅助程序配置的 [`path`](/docs/zh-CN/settings-reference#policyhelper-path)。只要 Claude Code 选择了辅助程序即存在,无论是否设置了 `OTEL_LOG_MANAGED_SETTINGS`

1500* `managed_settings.resolved_sha256`(当 `OTEL_LOG_MANAGED_SETTINGS=1` 时):编辑前解析的管理设置的 SHA-256,序列化为 JSON,键递归排序,无空格。具有相同摘要的机器运行相同的策略。Claude Code 仅使用选择加入发送摘要,因为短策略可以通过哈希猜测恢复。当没有管理设置解析时不存在,在 `refused` 事件上不存在1500* `managed_settings.resolved_sha256`(当 `OTEL_LOG_MANAGED_SETTINGS=1` 时):脱敏前已解析托管设置的 SHA-256,序列化为键按递归排序且不含空白的 JSON。摘要相同的机器运行相同的策略。Claude Code 仅在选择启用时发送摘要,因为较短的策略可以通过对猜测值进行哈希来还原。没有解析出托管设置时不存在,在 `refused` 事件中也不存在

1501* `managed_settings.settings`(当 `OTEL_LOG_MANAGED_SETTINGS=1` 时):解析的管理设置的名称和形状作为 JSON 字符串,值被编辑。在 `refused` 事件上不存在。Claude Code 从其设置架构构建它:1501* `managed_settings.settings`(当 `OTEL_LOG_MANAGED_SETTINGS=1` 时):以 JSON 字符串形式表示的已解析托管设置的名称和结构,其中的值已脱敏。在 `refused` 事件中不存在。Claude Code 根据其设置 schema 构建该值:

1502 1502 

1503 * 架构声明导出的设置名称,架构不声明的键被留出1503 * schema 声明的设置名称会被导出,schema 未声明的键会被省略

1504 * 布尔值、数字和字符串值,架构限制为固定选项集,例如 `permissions.defaultMode`,按原样导出。`sandbox.network.httpProxyPort` 和 `sandbox.network.socksProxyPort` 导出为 `"[REDACTED]"`1504 * 布尔值、数字以及 schema 限定为固定选项集的字符串值(例如 `permissions.defaultMode`)按原样导出。`sandbox.network.httpProxyPort` 和 `sandbox.network.socksProxyPort` 导出为 `"[REDACTED]"`

1505 * 每个其他字符串,例如 `model`、`apiKeyHelper`、每个 `env` 值、每个 URL 和每个命令,导出为 `"[REDACTED]"`1505 * 其他所有字符串,例如 `model`、`apiKeyHelper`、每个 `env` 值、每个 URL 以及每个命令,均导出为 `"[REDACTED]"`

1506 * 地图的条目名称,例如 `env` 变量名称和插件 ID,按原样导出。架构不键入其条目的设置,例如 `vimInsertModeRemaps`,导出为单个 `"[REDACTED]"`,`sandbox.ignoreViolations` 导出为其路径列表的列表,不带命令模式1506 * 映射的条目名称(例如 `env` 变量名和插件 ID)按原样导出。schema 未对其条目定义类型的设置(例如 `vimInsertModeRemaps`)导出为单个 `"[REDACTED]"`,`sandbox.ignoreViolations` 导出为其路径列表的列表,不含命令模式

1507 * 列表保留其长度,每个条目按相同规则编辑1507 * 列表保留其长度,每个条目按相同规则脱敏

1508 * `permissions.allow`、`permissions.deny` 或 `permissions.ask` 规则导出为其工具名称,内容编辑,例如 `Read([REDACTED])`,当工具内置于此版本的 Claude Code 或是 `mcp__` 参考(如 `mcp__jira__create_issue`)时。任何其他规则导出为 `"[REDACTED]"`1508 * 当工具内置于此版本的 Claude Code 中,或是 `mcp__` 引用(例如 `mcp__jira__create_issue`)时,`permissions.allow`、`permissions.deny` 或 `permissions.ask` 规则导出为其工具名称,内容脱敏,例如 `Read([REDACTED])`。其他任何规则导出为 `"[REDACTED]"`

1509 * 钩子遵循相同的规则,因此固定选项和数字字段(如 `type` 和 `timeout`)显示,而每个命令、URL、`matcher` 和 `if` 条件导出为 `"[REDACTED]"`1509 * hook 遵循相同的规则,因此固定选项字段和数值字段(例如 `type` 和 `timeout`)会显示,而每个命令、URL、`matcher` 和 `if` 条件均导出为 `"[REDACTED]"`

1510 1510 

1511 例如,具有 `apiKeyHelper`、两个 `env` 变量和拒绝规则的管理设置导出为 `{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}`.1511 例如,包含 `apiKeyHelper`、两个 `env` 变量和一条拒绝规则的托管设置导出为 `{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}`。

1512 1512 

1513 Claude Code 在 8 KB UTF-8 处切割值,切割值不是有效的 JSON1513 Claude Code 会在 UTF-8 编码 8 KB 处截断该值,截断后的值不是有效的 JSON

1514* `managed_settings.settings_truncated`(当存在 `managed_settings.settings` 时):当 Claude Code 在 8 KB 处截断了 `managed_settings.settings` 时为 `true`,否则为 `false`。以布尔值而非字符串形式发出1514* `managed_settings.settings_truncated`(当存在 `managed_settings.settings` 时):Claude Code 在 8 KB 处截断了 `managed_settings.settings` 时为 `true`,否则为 `false`。以布尔值而非字符串形式发出

1515 1515 

1516<h2 id="interpret-metrics-and-events-data">1516<h2 id="interpret-metrics-and-events-data">

1517 解释指标和事件数据1517 解释指标和事件数据

Details

209| :- | :- | :- | :- |209| :- | :- | :- | :- |

210| 首字节截止时间 | Claude Code 发送请求后没有响应头到达 | 直接 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws),包括通过 HTTPS 代理,但不包括当 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 通过 [gateway](/docs/zh-CN/gateways) 路由时。在 Amazon Bedrock 上可选,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 | 直接 Anthropic API 上为 180 秒,其他地方为 300 秒,加上每 32KB 请求体一秒 |210| 首字节截止时间 | Claude Code 发送请求后没有响应头到达 | 直接 Anthropic API 和 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws),包括通过 HTTPS 代理,但不包括当 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 通过 [gateway](/docs/zh-CN/gateways) 路由时。在 Amazon Bedrock 上可选,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 | 直接 Anthropic API 上为 180 秒,其他地方为 300 秒,加上每 32KB 请求体一秒 |

211| 事件级监视器 | 没有响应事件解析。在字节级监视器运行在 Amazon Bedrock 以外的连接上的情况下,到达的字节(包括保活 ping)也会重置此监视器,最多约五分钟内没有解析的事件 | 每个提供商 | 300 秒 |211| 事件级监视器 | 没有响应事件解析。在字节级监视器运行在 Amazon Bedrock 以外的连接上的情况下,到达的字节(包括保活 ping)也会重置此监视器,最多约五分钟内没有解析的事件 | 每个提供商 | 300 秒 |

212| 字节级监视器 | 线路上没有字节到达,包括 SSE 保活 ping | 直接 Anthropic API、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 和 [网关](/docs/zh-CN/gateways) 连接,包括自定义 `ANTHROPIC_BASE_URL`。在 Amazon Bedrock `vnd.amazon.eventstream` 响应上可选,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 | 直接 Anthropic API 上为 180 秒。通过自定义 `ANTHROPIC_BASE_URL` 时,如果 Claude Code 已[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)则为 180 秒,未获取则为 300 秒。其他地方为 300 秒 |212| 字节级监视器 | 线路上没有字节到达,包括 SSE 保活 ping | 直接 Anthropic API、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws) 和[网关](/docs/zh-CN/gateways)连接,包括自定义 `ANTHROPIC_BASE_URL`。在 Amazon Bedrock `vnd.amazon.eventstream` 响应上可选,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上运行 | 直接 Anthropic API 上为 180 秒。在 Claude Platform on AWS、Amazon Bedrock、[Claude apps gateway](/docs/zh-CN/claude-apps-gateway) 会话中以及通过自定义 `ANTHROPIC_BASE_URL` 时为 300 秒 |

213| 主体空闲超时 | 5 分钟内没有字节到达 | 除了直接 Anthropic API、Claude Platform on AWS 和设置了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock 之外的提供商,除非 [`API_FORCE_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 改变这一点 | 5 分钟 |213| 主体空闲超时 | 5 分钟内没有字节到达 | 除了直接 Anthropic API、Claude Platform on AWS 和设置了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock 之外的提供商,除非 [`API_FORCE_IDLE_TIMEOUT`](/docs/zh-CN/env-vars) 改变这一点 | 5 分钟 |

214 214 

215如果设置 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`,字节级监视器会在 Bedrock 上替换主体空闲超时,而不是与其并行运行。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 随后也会控制 Bedrock 流在 Claude Code 将连接视为死连接之前可以保持沉默多长时间,在下面列出的限制范围内。到达的字节仍然不会在 Bedrock 上重置事件级监视器。启用调试日志后,每个 Bedrock 流随后会记录一条以 `wire-heartbeat: _chunkTimes absent` 开头的调试消息。215如果设置 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`,字节级监视器会在 Bedrock 上替换主体空闲超时,而不是与其并行运行。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 随后也会控制 Bedrock 流在 Claude Code 将连接视为死连接之前可以保持沉默多长时间,在下面列出的限制范围内。到达的字节仍然不会在 Bedrock 上重置事件级监视器。启用调试日志后,每个 Bedrock 流随后会记录一条以 `wire-heartbeat: _chunkTimes absent` 开头的调试消息。

Details

235 <Tab title="Web and mobile">235 <Tab title="Web and mobile">

236 在 [claude.ai/code](https://claude.ai/code) 上,使用输入框旁边的模式下拉菜单。在移动应用中,点击输入框中的 **+** 按钮,然后点击 **Permission**。云端会话和 Remote Control 会话提供不同的权限模式:236 在 [claude.ai/code](https://claude.ai/code) 上,使用输入框旁边的模式下拉菜单。在移动应用中,点击输入框中的 **+** 按钮,然后点击 **Permission**。云端会话和 Remote Control 会话提供不同的权限模式:

237 237 

238 * **[Cloud sessions](/docs/zh-CN/claude-code-on-the-web)**:Accept edits、Plan 和 Auto。Accept edits 对应于 `default` 模式:云会话预先批准文件编辑,无论模式如何,因此下拉菜单显示 Accept edits 而不是 Manual。云会话仍然遵守设置中的 `defaultMode: "acceptEdits"`。Auto 模式仅在您的组织允许且所选模型支持时出现。Bypass permissions 不可用。238 * **[云端会话](/docs/zh-CN/claude-code-on-the-web)**:Accept edits、Plan 和 Auto。Accept edits 对应于 `default` 模式:云端会话预先批准文件编辑,无论模式如何,因此下拉菜单显示 Accept edits 而不是 Manual。云端会话仍然遵守设置中的 `defaultMode: "acceptEdits"`。Auto 模式仅在您的组织允许且所选模型支持时出现。Bypass permissions 不可用。

239 * **[Remote Control](/docs/zh-CN/remote-control) sessions** 在您的本地机器上:Manual、Accept edits、Plan 和 Auto(对于您自己启动的会话),您无法从应用中选择 Bypass permissions。要使用 Auto,会话必须满足自动模式的[可用性要求](#eliminate-prompts-with-auto-mode)。对于在您的计算机上运行的项目线程,请参阅[在您自己的计算机上运行线程](/docs/zh-CN/claude-projects#run-a-thread-on-your-own-computer)。239 * 您本地机器上的 **[Remote Control](/docs/zh-CN/remote-control) 会话**:Manual、Accept edits、Plan 和 Auto(对于您自己启动的会话),您无法从应用中选择 Bypass permissions。要使用 Auto,会话必须满足自动模式的[可用性要求](#eliminate-prompts-with-auto-mode)。对于在您的计算机上运行的项目线程,请参阅[在您自己的计算机上运行线程](/docs/zh-CN/claude-projects#run-a-thread-on-your-own-computer)。

240 * 除了 Bypass permissions,下拉菜单显示本地会话所在的权限模式,包括从终端设置的模式。它在应用或终端中权限模式更改时更新。240 * 除了 Bypass permissions,下拉菜单显示本地会话所在的权限模式,包括从终端设置的模式。它在应用或终端中权限模式更改时更新。

241 * 由[桌面应用](/docs/zh-CN/desktop)或 [VS Code 扩展](/docs/zh-CN/vs-code)托管的会话在权限模式更改时向 claude.ai 报告,与在终端中托管的会话相同。241 * 由[桌面应用](/docs/zh-CN/desktop)或 [VS Code 扩展](/docs/zh-CN/vs-code)托管的会话在权限模式更改时向 claude.ai 报告,与在终端中托管的会话相同。

242 * 在 v2.1.202 之前,使用 `/remote-control` 或 `claude --remote-control` 连接的会话根本不报告其权限模式,因此 claude.ai 和移动应用可能显示会话不在的权限模式。不匹配仅影响标签。Claude Code 从会话的实际权限模式生成权限提示,它们仍然出现在应用中以供批准。

243 242 

244 对于 Remote Control,运行会话的本地机器必须使用您的 claude.ai 账户登录;不支持 API 密钥。您也可以在启动该本地会话时设置起始权限模式:243 对于 Remote Control,运行会话的本地机器必须使用您的 claude.ai 账户登录;不支持 API 密钥。您也可以在启动该本地会话时设置起始权限模式:

245 244 


352 351 

353要阻止开发者使用自动模式,请在[托管设置](/docs/zh-CN/managed-settings)中将 `disableAutoMode` 设置为 `"disable"`。这会将 `auto` 从 `Shift+Tab` 循环中移除,并且使用 `--permission-mode auto` 启动的会话将改为以 Manual 模式启动。当该设置从[管理员部署的来源](/docs/zh-CN/managed-settings#which-managed-source-claude-code-uses)到达一个已在自动模式下运行的会话时,该会话会退出自动模式,并显示 `auto mode disabled by settings`。在 v2.1.251 之前,正在运行的会话会保持自动模式直到会话结束。352要阻止开发者使用自动模式,请在[托管设置](/docs/zh-CN/managed-settings)中将 `disableAutoMode` 设置为 `"disable"`。这会将 `auto` 从 `Shift+Tab` 循环中移除,并且使用 `--permission-mode auto` 启动的会话将改为以 Manual 模式启动。当该设置从[管理员部署的来源](/docs/zh-CN/managed-settings#which-managed-source-claude-code-uses)到达一个已在自动模式下运行的会话时,该会话会退出自动模式,并显示 `auto mode disabled by settings`。在 v2.1.251 之前,正在运行的会话会保持自动模式直到会话结束。

354 353 

355在 v2.1.158 到 v2.1.206 中,这些提供商上的自动模式默认关闭,直到您设置 `CLAUDE_CODE_ENABLE_AUTO_MODE=1`;并且除非同时设置了该变量,否则 Claude Code 会在这些提供商上忽略 `defaultMode: "auto"`。出于兼容性考虑,该变量仍然可用,但从 v2.1.207 起不再产生任何效果。

356 

357<h3 id="server-side-classifier-review">354<h3 id="server-side-classifier-review">

358 服务器端分类器审查355 服务器端分类器审查

359</h3>356</h3>


408* 启动无需人工批准或沙箱即可运行的自主 Agent 循环,例如使用 `--dangerously-skip-permissions` 或 `--no-sandbox` 启动的循环。这包括在禁用隔离和逐操作批准的情况下运行第三方 Agent 或评估工具,例如使用 `--yes-always` 启动的运行器405* 启动无需人工批准或沙箱即可运行的自主 Agent 循环,例如使用 `--dangerously-skip-permissions` 或 `--no-sandbox` 启动的循环。这包括在禁用隔离和逐操作批准的情况下运行第三方 Agent 或评估工具,例如使用 `--yes-always` 启动的运行器

409* 可能将页面内容、cookie 或凭据发送到源站之外的 [Claude in Chrome](/docs/zh-CN/chrome) 浏览器操作406* 可能将页面内容、cookie 或凭据发送到源站之外的 [Claude in Chrome](/docs/zh-CN/chrome) 浏览器操作

410* 通过通配符、glob 或时间过滤器(而非指定的具体路径)删除 `/tmp`、`$TMPDIR` 或其他共享临时目录或缓存目录中的文件407* 通过通配符、glob 或时间过滤器(而非指定的具体路径)删除 `/tmp`、`$TMPDIR` 或其他共享临时目录或缓存目录中的文件

411* 在发送、上传、发布或写入给他人或共享系统的内容中包含敏感细节,而您自己的消息并未授权将这些细节提供给该接收方。当仓库位于信任边界之外或为公开仓库(包括您组织自己的公开仓库)时,PR 和 issue 正文、提交信息以及评论都属于此类外发内容;内部文件路径、代号、实时 API 响应数据(例如电子邮件或账户标识符)以及基础设施标识符都属于敏感细节。对于 PR 或 issue 正文中来自 API 响应的实时个人数据,例如电子邮件地址、账户或组织标识符或使用量指标,无论仓库的可见性或信任边界如何,都需要您明确指出这些细节和接收方。该检查需要 Claude Code v2.1.203 或更高版本408* 在发送、上传、发布或写入给他人或共享系统的内容中包含敏感细节,而您自己的消息并未授权将这些细节提供给该接收方。当仓库位于信任边界之外或为公开仓库(包括您组织自己的公开仓库)时,PR 和 issue 正文、提交信息以及评论都属于此类外发内容;内部文件路径、代号、实时 API 响应数据(例如电子邮件或账户标识符)以及基础设施标识符都属于敏感细节。对于 PR 或 issue 正文中来自 API 响应的实时个人数据,例如电子邮件地址、账户或组织标识符或使用量指标,无论仓库的可见性或信任边界如何,都需要您明确指出这些细节和接收方

412* 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自身界面,分类器会将此视为 Claude 更改其自身的权限或监督409* 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自身界面,分类器会将此视为 Claude 更改其自身的权限或监督

413* 注释掉、删除或强制通过用于保护安全行为(例如身份验证、访问控制、输入验证或沙箱隔离)的测试或断言410* 注释掉、删除或强制通过用于保护安全行为(例如身份验证、访问控制、输入验证或沙箱隔离)的测试或断言

414* 删除或拆除 Claude 未在本会话中创建的有状态资源,且没有更具体的删除规则适用、您也未指定该资源411* 删除或拆除 Claude 未在本会话中创建的有状态资源,且没有更具体的删除规则适用、您也未指定该资源

415* 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向与任务不相符的第三方主机,包括在 `.env.example` 等示例文件中412* 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向与任务不相符的第三方主机,包括在 `.env.example` 等示例文件中

416* 使用 `git remote set-url` 或 `git remote add` 更改推送目标,除非您指定了新的远程仓库413* 使用 `git remote set-url` 或 `git remote add` 更改推送目标,除非您指定了新的远程仓库

417* 将密钥或个人数据、受托数据推送到已知为公开的仓库,或将不属于该仓库本身工作的机密材料推送到该仓库。对于个人数据或受托数据,唯一的例外是 dotfiles 仓库本身的主题内容;来自私有仓库的内容进入任何公开渠道也会以同样方式被阻止;这两项细化都需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,个人数据与机密材料归为一类,仅在不属于该仓库本身工作时才被阻止。当仓库的可见性无法确定时,分类器不会仅凭这一点进行阻止,而是依据其他规则来判断内容414* 将密钥或个人数据、受托数据推送到已知为公开的仓库,或将不属于该仓库本身工作的机密材料推送到该仓库。对于个人数据或受托数据,唯一的例外是 dotfiles 仓库本身的主题内容;来自私有仓库的内容进入任何公开渠道也会以同样方式被阻止。当仓库的可见性无法确定时,分类器不会仅凭这一点进行阻止,而是依据其他规则来判断内容

418* 向其他仓库或组织发起 Pull Request、使用 `gh repo fork` 进行 fork,或推送到第三方仓库,除非您指定了该外部目标415* 向其他仓库或组织发起 Pull Request、使用 `gh repo fork` 进行 fork,或推送到第三方仓库,除非您指定了该外部目标

419 

420其中一些类别依赖于[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)条目,例如敏感远程目标和受保护的 IaC 作用域,您可以将它们收窄到具体名称。

421 

422Claude Code v2.1.203 及更高版本还会默认阻止以下操作:

423 

424* 来自敏感本地存储的内容,或来自名称、路径或类型表明其为敏感文件的内容,进入提交、推送、PR 或 issue 文本、gist 或粘贴、或包发布,除非您同时指定了来源和目标。会话记录和对话日志、凭据和配置类点文件夹(例如 SSH 密钥、云凭据、浏览器配置文件和 shell 历史记录)以及用户数据导出都包括在内,仓库为私有也不能解除此阻止416* 来自敏感本地存储的内容,或来自名称、路径或类型表明其为敏感文件的内容,进入提交、推送、PR 或 issue 文本、gist 或粘贴、或包发布,除非您同时指定了来源和目标。会话记录和对话日志、凭据和配置类点文件夹(例如 SSH 密钥、云凭据、浏览器配置文件和 shell 历史记录)以及用户数据导出都包括在内,仓库为私有也不能解除此阻止

425 

426Claude Code v2.1.205 及更高版本还会默认阻止以下操作:

427 

428* 写入 Claude Code 会话记录,即 `~/.claude/projects/` 或您所配置的配置目录下的 `.jsonl` 历史文件,无论是直接写入还是通过 shell 命令写入。该规则还涵盖 Claude Code 为其自身检查而附加到每条会话记录条目中的元数据行。读取会话记录不会被阻止417* 写入 Claude Code 会话记录,即 `~/.claude/projects/` 或您所配置的配置目录下的 `.jsonl` 历史文件,无论是直接写入还是通过 shell 命令写入。该规则还涵盖 Claude Code 为其自身检查而附加到每条会话记录条目中的元数据行。读取会话记录不会被阻止

429* 递归强制删除,例如 `rm -rf "$VAR"` 或 `Remove-Item -Recurse -Force $dir`,其目标是在分类器所见对话中任何地方都未赋值的 shell 变量,或以此类变量为根的 glob。该值仅来自先前的命令输出,而分类器从不接收这些输出,因此分类器无法根据其他删除规则验证删除目标。当您指明要删除的确切路径,或 Claude 将解析后的字面路径写入命令并重新运行删除时,该阻止会解除。分类器能够解析目标的删除操作不受影响。418* 递归强制删除,例如 `rm -rf "$VAR"` 或 `Remove-Item -Recurse -Force $dir`,其目标是在分类器所见对话中任何地方都未赋值的 shell 变量,或以此类变量为根的 glob。该值仅来自先前的命令输出,而分类器从不接收这些输出,因此分类器无法根据其他删除规则验证删除目标。当您指明要删除的确切路径,或 Claude 将解析后的字面路径写入命令并重新运行删除时,该阻止会解除。分类器能够解析目标的删除操作不受影响。

430 419 

431 直接位于变量下的 glob(例如 `rm -rf "$VAR"/*`)则属于[关键路径](#critical-paths)。目标为单独的 `*` 或以 `/*` 或 `\*` 结尾的 `Remove-Item` 永远不会到达分类器:Claude Code 会[直接拒绝它们](#remove-item-in-powershell)。420 直接位于变量下的 glob(例如 `rm -rf "$VAR"/*`)则属于[关键路径](#critical-paths)。目标为单独的 `*` 或以 `/*` 或 `\*` 结尾的 `Remove-Item` 永远不会到达分类器:Claude Code 会[直接拒绝它们](#remove-item-in-powershell)。

432 421 

422其中一些类别依赖于[环境](/docs/zh-CN/auto-mode-config#define-trusted-infrastructure)条目,例如敏感远程目标和受保护的 IaC 作用域,您可以将它们收窄到具体名称。

423 

433Claude Code v2.1.257 及更高版本还会默认阻止以下操作:424Claude Code v2.1.257 及更高版本还会默认阻止以下操作:

434 425 

435* 从云实例元数据端点(例如 `169.254.169.254`)请求凭据,或明确使用机器自身的服务账户或节点身份对云、集群或注册表调用进行身份验证426* 从云实例元数据端点(例如 `169.254.169.254`)请求凭据,或明确使用机器自身的服务账户或节点身份对云、集群或注册表调用进行身份验证


449* 安装您的锁文件或清单中声明的依赖440* 安装您的锁文件或清单中声明的依赖

450* 读取 `.env` 并将凭据发送到与之匹配的 API441* 读取 `.env` 并将凭据发送到与之匹配的 API

451* 只读 HTTP 请求442* 只读 HTTP 请求

452* 推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如 `production` 或 `gh-pages`)不在此列:分类器会单独判断推送到这类分支的操作。推送的内容仍会根据其他规则进行检查,[`permissions.deny` 规则](/docs/zh-CN/permissions#manage-permissions)在所有模式下仍可按[命令的书写形式](/docs/zh-CN/permissions#bash-rule-limits)阻止推送命令,并且远程仓库自身的分支保护仍然适用。在 v2.1.211 之前,默认仅允许推送到您开始时所在的分支、Claude 创建的分支,以及对默认分支的常规推送;而在 v2.1.203 之前,任何直接推送到默认分支的操作都会被阻止443* 推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如 `production` 或 `gh-pages`)不在此列:分类器会单独判断推送到这类分支的操作。推送的内容仍会根据其他规则进行检查,[`permissions.deny` 规则](/docs/zh-CN/permissions#manage-permissions)在所有模式下仍可按[命令的书写形式](/docs/zh-CN/permissions#bash-rule-limits)阻止推送命令,并且远程仓库自身的分支保护仍然适用。在 v2.1.211 之前,默认仅允许推送到您开始时所在的分支、Claude 创建的分支,以及对默认分支的常规推送

453* 删除 Claude 在同一会话中先前创建的确切作业444* 删除 Claude 在同一会话中先前创建的确切作业

454* 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型445* 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型

455* 在同一多 Agent 会话中协同工作的 Agent 之间的消息446* 在同一多 Agent 会话中协同工作的 Agent 之间的消息

permissions.md +8 −3

Details

384 384 

385`Edit` 规则适用于所有编辑文件的内置工具。Claude 尽力将 `Read` 规则应用于所有读取文件的内置工具,如 Grep 和 Glob,以及您提示词中的 `@file` 提及,以及连接的 [IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server) 与 Claude 共享的选择和打开文件上下文。385`Edit` 规则适用于所有编辑文件的内置工具。Claude 尽力将 `Read` 规则应用于所有读取文件的内置工具,如 Grep 和 Glob,以及您提示词中的 `@file` 提及,以及连接的 [IDE](/docs/zh-CN/vs-code#the-built-in-ide-mcp-server) 与 Claude 共享的选择和打开文件上下文。

386 386 

387`Read(path)` deny 规则也适用于您粘贴到提示词中的图片路径以及您 @ 提及的目录:

388 

389* **图片路径**:当您在终端中将图片路径粘贴到提示词中或将图片文件拖入提示词,且规则匹配该路径时,Claude Code 不会附加该图片。如果粘贴的内容中没有其他图片,该路径将作为文本保留在您的提示词中。

390* **目录**:[Claude 收到的列表](/docs/zh-CN/common-workflows#reference-files-and-directories)会省略规则匹配的文件和目录名称。

391 

392Claude Code 在 v2.1.290 及更高版本中检查粘贴的图片路径和目录列表。

393 

387`Read` deny 规则也会阻止同一路径上的 [Edit 和 Write 工具](/docs/zh-CN/errors#file-is-covered-by-a-read-deny-rule),包括在那里创建新文件。NotebookEdit 不被覆盖,因此为任何工具都不能更改的路径添加 `Edit` deny 规则。检查需要 Claude Code v2.1.208 或更高版本进行编辑,以及 v2.1.228 或更高版本进行写入。394`Read` deny 规则也会阻止同一路径上的 [Edit 和 Write 工具](/docs/zh-CN/errors#file-is-covered-by-a-read-deny-rule),包括在那里创建新文件。NotebookEdit 不被覆盖,因此为任何工具都不能更改的路径添加 `Edit` deny 规则。检查需要 Claude Code v2.1.208 或更高版本进行编辑,以及 v2.1.228 或更高版本进行写入。

388 395 

389Claude Code 仅根据 `Edit(path)` 和 `Read(path)` 规则检查文件权限。如果您为 `Write`、`NotebookEdit`、`Glob` 或旧版 `MultiEdit` 工具编写路径规则,Claude Code 接受该规则但从不查询它,并在启动时[警告](/docs/zh-CN/errors#is-not-matched-by-file-permission-checks),除了在 `--allowedTools` 中传递的 `Glob` 规则。使用 `Edit(docs/**)` 代替 `Write(docs/**)`、`NotebookEdit(docs/**)` 或 `MultiEdit(docs/**)`,以及 `Read(docs/**)` 代替 `Glob(docs/**)`。Claude Code 不会警告没有路径的工具名称规则,如 `Write` 的 deny 规则;它在任何地方在工具级别匹配该规则。需要 Claude Code v2.1.210 或更高版本。396Claude Code 仅根据 `Edit(path)` 和 `Read(path)` 规则检查文件权限。如果您为 `Write`、`NotebookEdit`、`Glob` 或旧版 `MultiEdit` 工具编写路径规则,Claude Code 接受该规则但从不查询它,并在启动时[警告](/docs/zh-CN/errors#is-not-matched-by-file-permission-checks),除了在 `--allowedTools` 中传递的 `Glob` 规则。使用 `Edit(docs/**)` 代替 `Write(docs/**)`、`NotebookEdit(docs/**)` 或 `MultiEdit(docs/**)`,以及 `Read(docs/**)` 代替 `Glob(docs/**)`。Claude Code 不会警告没有路径的工具名称规则,如 `Write` 的 deny 规则;它在任何地方在工具级别匹配该规则。需要 Claude Code v2.1.210 或更高版本。


467 在 gitignore 模式中,`*` 匹配单个路径段内的文本,可以出现在模式中的任何位置,而 `**` 匹配跨目录。474 在 gitignore 模式中,`*` 匹配单个路径段内的文本,可以出现在模式中的任何位置,而 `**` 匹配跨目录。

468</Note>475</Note>

469 476 

470当您使用"是,不再询问"批准文件路径时,Claude Code 会转义该路径中的 gitignore 模式字符,如 `[`、`]` 和 `*`,因此生成的规则仅匹配您批准的字面路径。您自己编写的规则不会被转义。在 v2.1.202 之前,Claude Code 保存未转义的路径,因此为名为 `[2024-06] Reports` 的目录生成的规则可能无法匹配其自己的路径或匹配意外的兄弟目录。477当您使用"是,不再询问"批准文件路径时,Claude Code 会转义该路径中的 gitignore 模式字符,如 `[`、`]` 和 `*`,因此生成的规则仅匹配您批准的字面路径。您自己编写的规则不会被转义。

471 478 

472您不需要转义路径中的括号,因此 `Edit(./Finance (2024)/**)` 匹配按拼写的 `Finance (2024)` 文件夹。479您不需要转义路径中的括号,因此 `Edit(./Finance (2024)/**)` 匹配按拼写的 `Finance (2024)` 文件夹。

473 480 


805 配置主目录例外仅跳过信任步骤。`~/.claude/settings.local.json` 仍然是[本地范围](/docs/zh-CN/settings#compare-the-scope-of-each-settings-file),因此 Claude Code 仅在您从主目录本身启动的会话中读取它,而不是在每个项目中。要在所有项目中应用权限规则,请将它们添加到您的用户设置中:`~/.claude/settings.json`,或当设置 `CLAUDE_CONFIG_DIR` 时为 `$CLAUDE_CONFIG_DIR/settings.json`。812 配置主目录例外仅跳过信任步骤。`~/.claude/settings.local.json` 仍然是[本地范围](/docs/zh-CN/settings#compare-the-scope-of-each-settings-file),因此 Claude Code 仅在您从主目录本身启动的会话中读取它,而不是在每个项目中。要在所有项目中应用权限规则,请将它们添加到您的用户设置中:`~/.claude/settings.json`,或当设置 `CLAUDE_CONFIG_DIR` 时为 `$CLAUDE_CONFIG_DIR/settings.json`。

806</Note>813</Note>

807 814 

808在 v2.1.207 之前,Claude Code 在您接受对话框之前应用未跟踪文件的规则。

809 

810<h3 id="what-runs-before-you-trust-a-folder">815<h3 id="what-runs-before-you-trust-a-folder">

811 在您信任文件夹之前运行什么816 在您信任文件夹之前运行什么

812</h3>817</h3>

plugin-evals.md +36 −5

Details

441 441 

442| 退出码 | 含义 |442| 退出码 | 含义 |

443| :- | :- |443| :- | :- |

444| 0 | 每个用例得分均达到或高于 `--threshold`,且每个用例文件都已加载 |444| 0 | 套件通过:每个用例得分均达到或高于 `--threshold`,且没有其他原因导致运行失败 |

445| 1 | 用例得分低于阈值,用例文件加载失败,未找到用例,无法启动运行,插件目录不受信任且未传递 `--trust-plugin`,或选项无效 |445| 1 | 用例得分低于阈值,用例文件加载失败,未找到用例,无法启动运行,或某次运行[因 API 错误而结束](#runs-ended-on-an-api-error)。当插件目录不受信任且未传递 `--trust-plugin`、选项无效或无法写入 `--json` 结果时,也会返回此值 |

446| 2 | 部分运行:达到了 `--max-cost-usd` 上限,或您的凭据在首次运行前或首次运行时被拒绝。`results.json` 仍会写入,并带有 `partial: true` 和原因 |446| 2 | 部分运行:达到了 `--max-cost-usd` 上限,或您的凭据在首次运行前或首次运行时被拒绝。`results.json` 仍会写入,并带有 `partial: true` 和原因 |

447| 130 | 已中断。部分结果已写入 |447| 130 | 已中断。部分结果已写入 |

448| 143 | 已终止,例如因 CI 超时 |448| 143 | 已终止,例如因 CI 超时 |


501| `cases[].name` | 用例名称 |501| `cases[].name` | 用例名称 |

502| `cases[].aggregates.score` | 用例的平均 with-arm 运行分数 |502| `cases[].aggregates.score` | 用例的平均 with-arm 运行分数 |

503| `cases[].aggregates.delta` | With-arm 分数减去 without-arm 分数。当 arm 不可比较时省略 |503| `cases[].aggregates.delta` | With-arm 分数减去 without-arm 分数。当 arm 不可比较时省略 |

504| `cases[].arms.with[].error` | `null`,或运行异常结束的原因,例如 `timed out after 300s`。启动但结束不好的运行仍然在它生成的内容上评分,所以非空错误不意味着分数 0 |504| `cases[].arms.with[].error` | `null`,或运行异常结束的原因,例如 `timed out after 300s`。其中部分运行仍会根据其生成的内容进行评分,因此非空错误并不意味着分数为 0。[因 API 错误而结束](#runs-ended-on-an-api-error)的运行不经评分直接记为 0 分 |

505| `cases[].arms.with[].aborted` | 当 [mock](#mock-mcp-servers) 通过 `expect:`、`abort_when` 或 [agent-mock 调用预算](#mock-call-budget-exceeded)停止运行时出现,带有 `server`、`tool` 和 `reason`。运行分数为 0,`error` 保持 `null` |505| `cases[].arms.with[].aborted` | 当 [mock](#mock-mcp-servers) 通过 `expect:`、`abort_when` 或 [agent-mock 调用预算](#mock-call-budget-exceeded)停止运行时出现,带有 `server`、`tool` 和 `reason`。运行分数为 0,`error` 保持 `null` |

506| `cases[].arms.with[].skippedPaidGraders` | `true` 当成本上限跳过此运行的评判评分器时,所以其分数不可比较 |506| `cases[].arms.with[].skippedPaidGraders` | `true` 当成本上限跳过此运行的评判评分器时,所以其分数不可比较 |

507| `costUsd`, `durationSeconds`, `claudeVersion` | 列表价格的估计成本,包括评判调用、挂钟秒数和运行套件的 Claude Code 版本 |507| `costUsd`, `durationSeconds`, `claudeVersion` | 列表价格的估计成本,包括评判调用、挂钟秒数和运行套件的 Claude Code 版本 |


718 718 

719在 v2.1.283 之前,`claude plugin eval` 没有检查 git 版本,在较旧的 git 上,套件运行时这些程序保持打开状态。719在 v2.1.283 之前,`claude plugin eval` 没有检查 git 版本,在较旧的 git 上,套件运行时这些程序保持打开状态。

720 720 

721<h3 id="cannot-be-evaluated-where-sessions-load-it">

722 "cannot be evaluated where sessions load it"

723</h3>

724 

725您在 shell 中运行了 `claude plugin eval`,并传入了一个插件的名称,该插件安装自您[从本地路径添加](/docs/zh-CN/plugins/loading#in-place-and-copied-plugins)的市场。目前没有任何会话能够从该市场加载此插件,因此该命令会以此消息拒绝执行,并以退出代码 1 退出。

726 

727```text theme={null}

728Error: formatter@my-marketplace cannot be evaluated where sessions load it: no session could load it now. Its marketplace is a folder whose catalog could not be read, or lists it no more. Check the marketplace with `claude plugin marketplace list`, or pass ./<dir> to evaluate a directory.

729```

730 

731`no session could load it now.` 之后的句子指明了失败的原因。

732 

733在 shell 中运行 `claude plugin marketplace list`,并修复消息中指明的问题。例如,恢复市场目录,或将该插件的条目重新放回其目录清单中。要在不经过市场的情况下评估插件的源代码,请将其目录作为目标传入,例如 `claude plugin eval ./plugins/formatter`。

734 

721<h3 id="no-eval-cases-found">735<h3 id="no-eval-cases-found">

722 "No eval cases found"736 "No eval cases found"

723</h3>737</h3>


768 运行退出代码为 1,但结果看起来很好782 运行退出代码为 1,但结果看起来很好

769</h3>783</h3>

770 784 

771默认 `--threshold` 是 1.0,所以当任何案例的评分低于完美时,命令退出代码为 1。设置与你需要的评分相匹配的阈值。退出代码 1 也涵盖了无法加载的案例文件,该文件在表格上方的 stderr 上报告。785当每个案例的评分都达到或高于 `--threshold`,而命令仍然以 1 退出时,stderr 上会有一行指明原因,即使在 `--json` 下也是如此。例如,某个案例文件加载失败,或运行[因 API 错误而结束](#runs-ended-on-an-api-error)。有关其他原因,请参阅[退出码](#run-evals-in-ci)。

786 

787默认 `--threshold` 是 1.0,所以当任何案例的评分低于完美时,命令以 1 退出。设置与您要求的评分相匹配的阈值。

772 788 

773<h3 id="json-output-path-must-end-in-json">789<h3 id="json-output-path-must-end-in-json">

774 `--json output path must end in .json`790 `--json output path must end in .json`


782 798 

783该 grader 在设计上被排除在两臂运行的评分之外,其 `scored` 字段为 `false`。请参阅[针对无插件基线进行评分](#compare-against-a-no-plugin-baseline)。799该 grader 在设计上被排除在两臂运行的评分之外,其 `scored` 字段为 `false`。请参阅[针对无插件基线进行评分](#compare-against-a-no-plugin-baseline)。

784 800 

801<h3 id="runs-ended-on-an-api-error">

802 "ended on an API error and scored 0 without grading"

803</h3>

804 

805此 stderr 警告表示 API 对至少一次运行的最后一个请求返回了 HTTP 错误,例如速率限制或计划用量限制。此类运行评分为 0 且没有 grader 结果,并且无论评分和 `--threshold` 如何,命令都会以非零状态退出。

806 

807要解决此问题,请找到每个受影响运行的错误并解决其报告的原因,然后再次运行套件:

808 

809* **不使用 `--json` 时**:错误位于该运行进度行的末尾,在 `error:` 之后

810* **使用 `--json` 时**:错误位于 [JSON 结果](#json-result)中的 `cases[].arms.with[].error` 或 `cases[].arms.without[].error`

811 

812该计数也包括[基线](#the-no-plugin-baseline)运行。基线运行的评分从不决定案例是否通过,因此可能每个案例都通过,而命令仍然失败。在两臂运行中,受影响案例的 `W/OUT` 和 `Δ` 会显示为 `—`。如果是用量限制或速率限制,请参阅[运行在中途因用量限制或速率限制错误而失败](#runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through)。

813 

814在 v2.1.299 之前,此类运行会根据它已生成的内容进行评分。

815 

785<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">816<h3 id="runs-fail-with-a-usage-limit-or-rate-limit-error-partway-through">

786 运行在中途失败,出现使用限制或速率限制错误817 运行在中途失败,出现使用限制或速率限制错误

787</h3>818</h3>

788 819 

789如果你的账户在套件运行时达到了计划的使用限制或 API 速率限制,每个后续运行都会以该错误结束,根据它生成的内容进行评分,通常评分为 0。套件仍然完成,不会标记为 `partial`,所以结果看起来像是一个回归。在信任评分之前,检查 `NOTES` 列或 JSON 中的 `cases[].arms.with[].error` 中的限制消息,然后在限制重置后重新运行,如果你需要保持在限制内,使用 `--runs 1` 或 `--case` 过滤器。820以用量限制或速率限制错误结束的运行会[评分为 0 且不进行评分检查](#runs-ended-on-an-api-error),并且命令以非零状态退出。套件仍然会完成,且不会被标记为 `partial`。在限制重置后重新运行,如果您需要保持在限制内,请使用 `--runs 1` 或 `--case` 过滤器。

790 821 

791<h3 id="mock-call-budget-exceeded">822<h3 id="mock-call-budget-exceeded">

792 "mock call budget exceeded"823 "mock call budget exceeded"

Details

523 523 

524| 退出码 | 含义 |524| 退出码 | 含义 |

525| :- | :- |525| :- | :- |

526| `0` | 所有案例都达到阈值 |526| `0` | 套件通过:每个案例都达到阈值,且没有其他原因导致运行失败 |

527| `1` | 存在失败的案例、加载错误或不受信任的插件目录 |527| `1` | 存在失败的案例、加载错误、不受信任的插件目录、[因 API 错误而结束](/docs/zh-CN/plugin-evals#runs-ended-on-an-api-error)的运行,或[在 CI 中运行 evals](/docs/zh-CN/plugin-evals#run-evals-in-ci) 下列出的其他原因 |

528| `2` | 部分运行 |528| `2` | 部分运行 |

529| `130` | 被中断 |529| `130` | 被中断 |

530| `143` | 被终止 |530| `143` | 被终止 |

Details

752 752 

753插件代理的 frontmatter 遵循以下规则:753插件代理的 frontmatter 遵循以下规则:

754 754 

755* **支持的字段**:`name`、`description`、`model`、`effort`、`maxTurns`、`tools`、`disallowedTools`、`skills`、`memory`、`background`、`omitClaudeMd`、`isolation`、`color` 和 `experimental` 的 `cacheTtl` 键。唯一有效的 `isolation` 值是 `"worktree"`。参见 [支持的 frontmatter 字段](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 了解每个字段的作用755* **支持的字段**:`name`、`description`、`model`、`effort`、`maxTurns`、`autoCompactWindow`、`tools`、`disallowedTools`、`skills`、`memory`、`background`、`omitClaudeMd`、`isolation`、`color` 和 `experimental` 的 `cacheTtl` 键。唯一有效的 `isolation` 值是 `"worktree"`。参见 [支持的 frontmatter 字段](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 了解每个字段的作用

756* **忽略的字段**:`permissionMode`、`hooks`、`mcpServers` 和 `initialPrompt`。代理文件不能自己添加 hooks 或 MCP 服务器,所以改为添加为插件 [hooks](#hooks) 和 [MCP 服务器](#mcp-servers)756* **忽略的字段**:`permissionMode`、`hooks`、`mcpServers` 和 `initialPrompt`。代理文件不能自己添加 hooks 或 MCP 服务器,所以改为添加为插件 [hooks](#hooks) 和 [MCP 服务器](#mcp-servers)

757* **不解析的 Frontmatter**:代理仍然加载,每个字段都被忽略。它以文件名命名,其描述读作 `Agent from my-plugin plugin`。在你的 shell 中运行 [`claude plugin validate`](/docs/zh-CN/plugins/cli-reference#plugin-validate) 来找到这些文件757* **不解析的 Frontmatter**:代理仍然加载,每个字段都被忽略。它以文件名命名,其描述读作 `Agent from my-plugin plugin`。在你的 shell 中运行 [`claude plugin validate`](/docs/zh-CN/plugins/cli-reference#plugin-validate) 来找到这些文件

758 758 

Details

237 237 

238当用户卸载最后一个约束依赖的 plugin 时,依赖不再被约束到版本范围,并在下一次更新时恢复跟踪其市场条目。238当用户卸载最后一个约束依赖的 plugin 时,依赖不再被约束到版本范围,并在下一次更新时恢复跟踪其市场条目。

239 239 

240<h3 id="dependencies-when-your-plugin-loads-from-claude-ai">

241 当您的插件从 claude.ai 加载时的依赖

242</h3>

243 

244当用户为其 claude.ai 账户启用您的插件时,Claude Code 将其加载为 `<name>@synced`,[不关联任何市场](/docs/zh-CN/plugins/loading#synced-plugins)。对于您插件的这一副本,当用户具备以下任一条件时,Claude Code 会将指定了市场的依赖条目视为已满足:

245 

246* **来自其市场的依赖**:从您的条目所指定的市场安装并已启用。Claude Code 会根据已安装副本的版本检查您条目中的 `version` 范围。

247* **同名的 claude.ai 插件**:已从其 claude.ai 账户启用。Claude Code 会根据该插件的 `version` 检查您条目中的 `version` 范围,未声明 `version` 的插件会通过检查。

248 

249如果您告知用户从 claude.ai 启用您的插件,请同时告知他们也在那里启用该依赖,或从其市场安装该依赖。

250 

251只有当您的插件也从 claude.ai 加载时,claude.ai 插件才能满足该条目。

252 

240<h2 id="see-also">253<h2 id="see-also">

241 另请参阅254 另请参阅

242</h2>255</h2>

Details

252 252 

253要阻止提示词,请在不调用 `next` 的情况下返回 `{ drop: 'the reason' }`。文本会返回到用户的提示词输入框中,用户会看到 `Prompt dropped by a hook:` 后跟您的原因,因此请以用户为对象撰写原因。如果您的 hook 在其 `next(e)` 调用已放行提示词之后返回 `drop`,轮次仍会运行,并且该 hook 会[失败](#handle-a-hook-that-fails),错误消息中包含 `a drop after its next() was answered`。253要阻止提示词,请在不调用 `next` 的情况下返回 `{ drop: 'the reason' }`。文本会返回到用户的提示词输入框中,用户会看到 `Prompt dropped by a hook:` 后跟您的原因,因此请以用户为对象撰写原因。如果您的 hook 在其 `next(e)` 调用已放行提示词之后返回 `drop`,轮次仍会运行,并且该 hook 会[失败](#handle-a-hook-that-fails),错误消息中包含 `a drop after its next() was answered`。

254 254 

255[其他事件](/docs/zh-CN/plugins/mods/reference#prompts-and-what-claude-reads)涵盖了 Claude 读取的其余内容:`prompt.section` 用于系统提示词的每个部分,`prompt.context` 用于随第一条消息发送的上下文,`skill.prompt` 用于 skill 的文本。这些 hook 产生的文本如果在请求之间发生变化,会[使提示缓存失效](/docs/zh-CN/prompt-caching)。255[其他事件](/docs/zh-CN/plugins/mods/reference#prompts-and-what-claude-reads)涵盖了 Claude 读取的其余内容:`prompt.section` 用于系统提示词的每个部分,`prompt.context` 用于随第一条消息发送的上下文,`skill.prompt` 用于 skill 的文本。这些 hook 产生的文本如果在请求之间发生变化,会[使提示缓存失效](/docs/zh-CN/prompt-caching)。在 `skill.prompt` hook 中,您还可以读取[该 skill 来自哪个插件或文件](/docs/zh-CN/plugins/mods/reference#skill-prompt-fields)。

256 256 

257<h3 id="follow-a-turn">257<h3 id="follow-a-turn">

258 跟踪轮次258 跟踪轮次

Details

212 Mods 在哪里运行212 Mods 在哪里运行

213</h3>213</h3>

214 214 

215Mod 的 hook 在加载该插件的每种会话中运行。绘制的范围更窄:只有终端和桌面应用会显示 mod 的窗格、带状区域和替换的行。此表列出了您可能运行 Claude Code 的每个地方:215mod 的 hook 在加载该插件的每种会话中运行,无论由哪个提供商提供模型,包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry。绘制的范围更窄:只有终端和桌面应用会显示 mod 的窗格、带状区域和替换的行。此表列出了您可能运行 Claude Code 的每个地方:

216 216 

217| 您运行 Claude Code 的地方 | Hook 是否运行 | Mod 绘制的内容是否出现 |217| 您运行 Claude Code 的地方 | Hook 是否运行 | Mod 绘制的内容是否出现 |

218| :- | :- | :- |218| :- | :- | :- |


263| `cc-plugin-plugin-authoring` | 给 Claude [`plugin-authoring` skill](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 用于编写 mods。它持有一个 skill,没有 mod 代码。 | 除非 Anthropic 已远程关闭已安装的 mods | 在 `/plugin` 中禁用它 |263| `cc-plugin-plugin-authoring` | 给 Claude [`plugin-authoring` skill](/docs/zh-CN/plugins/mods/create#ask-claude-for-a-mod) 用于编写 mods。它持有一个 skill,没有 mod 代码。 | 除非 Anthropic 已远程关闭已安装的 mods | 在 `/plugin` 中禁用它 |

264| `cc-plugin-sec-default` | 保护您的组织管理的内容免受用户安装的 mods | [保护加载的地方](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default) | 您不能。管理员在托管设置中[设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) |264| `cc-plugin-sec-default` | 保护您的组织管理的内容免受用户安装的 mods | [保护加载的地方](/docs/zh-CN/plugins/mods/admin#know-what-happens-by-default) | 您不能。管理员在托管设置中[设置顺序](/docs/zh-CN/plugins/mods/admin#install-your-organizations-mods) |

265| `cc-plugin-telemetry` | 发送 Claude Code 及其内置 mods 记录的分析记录 | 无论 Claude Code 自己的分析在哪里打开 | 在 `/plugin` 中禁用它,或关闭分析,例如使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/env-vars) |265| `cc-plugin-telemetry` | 发送 Claude Code 及其内置 mods 记录的分析记录 | 无论 Claude Code 自己的分析在哪里打开 | 在 `/plugin` 中禁用它,或关闭分析,例如使用 [`DISABLE_TELEMETRY`](/docs/zh-CN/env-vars) |

266| `cc-plugin-you-should-know` | 运行一个侧边 Agent,在 Claude 处理较长任务时为您留意情况。当它发现值得了解的东西而您可能会错过时,它会在提示符上方显示一条注释。 | 默认禁用。如果可用于您的组织,在 `/plugin` -> **已安装** -> **显示禁用**中列出。使用 [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/zh-CN/plugins/cli-reference#plugin-in-a-session) 启用。 | 在 `/plugin` 中禁用它 |266| `cc-plugin-you-should-know` | [You should know](/docs/zh-CN/interactive-mode#you-should-know-suggestions):一个侧边 Agent 在发现您可能错过的内容时,会在输入框上方显示一条注释 | 默认关闭,直到您[将其打开](/docs/zh-CN/interactive-mode#you-should-know-suggestions) | 在 `/plugin` 中禁用它 |

267 267 

268停止已安装 mods 的设置和标志,例如 `disableAllHooks`、`--bare` 和 `--safe-mode`,不会停止内置 mods。268停止已安装 mods 的设置和标志,例如 `disableAllHooks`、`--bare` 和 `--safe-mode`,不会停止内置 mods。

269 269 

Details

43| `next.origin` | 触发该事件者的 `{ plugin, tier }`。Claude Code 自身为 `{ plugin: 'engine', tier: 'core' }`。mod 的 `tier` 是它在 [mod 运行顺序](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in)中的优先级组:`prepend`、`user`、`append` 或 `builtin`。 |43| `next.origin` | 触发该事件者的 `{ plugin, tier }`。Claude Code 自身为 `{ plugin: 'engine', tier: 'core' }`。mod 的 `tier` 是它在 [mod 运行顺序](/docs/zh-CN/plugins/mods/events#the-order-mods-run-in)中的优先级组:`prepend`、`user`、`append` 或 `builtin`。 |

44| `next.budget` | hook 的时间限制(以毫秒为单位):`next.budget.ms` 是总限制,`next.budget.remainingMs` 是当前剩余时间 |44| `next.budget` | hook 的时间限制(以毫秒为单位):`next.budget.ms` 是总限制,`next.budget.remainingMs` 是当前剩余时间 |

45| `next.to(e, tier)` | 跳到后面的层级,即 `append`、`builtin` 或 `core`。`next.to(e, 'append')` 会跳过用户安装的 mod。只有 `prependPlugins` 或 `appendPlugins` 中的 mod 才能调用它。 |45| `next.to(e, tier)` | 跳到后面的层级,即 `append`、`builtin` 或 `core`。`next.to(e, 'append')` 会跳过用户安装的 mod。只有 `prependPlugins` 或 `appendPlugins` 中的 mod 才能调用它。 |

46| `next.error` | 仅在 `.catch` 处理程序中可用。hook 失败时,`kind` 为 `throw` 或 `timeout`,`message` 是错误文本。当 hook 因事件来自其自身某个 mods API 调用内部而被跳过时,`kind` 为 `re-entry`;如果触发该事件的是另一个 mod 添加到 mods API 的方法,则 `cause` 为 `lent`。`re-entry` 和 `cause` 需要 Claude Code v2.1.292 或更高版本。 |46| `next.error` | 仅在 `.catch` 处理程序中可用。hook 失败时,`kind` 为 `throw` 或 `timeout`,`message` 是错误文本。当 hook 因事件来自该 hook 或您的 mod 在其 hook 之外的代码所发起的 mods API 调用内部而被跳过时,`kind` 为 `re-entry`。`re-entry` 需要 Claude Code v2.1.292 或更高版本。 |

47| `next.error.cause` | 仅当 `kind` 为 `re-entry` 时设置。如果 `tool.call` 或 [`PreToolUse`](/docs/zh-CN/hooks#pretooluse) hook 更改了该事件所来自的 mods API 调用,或者 `agent.spawn` hook 更改了由该调用启动的 Agent,则为 `rewritten`。当触发该事件的是另一个 mod 添加到 mods API 的方法时,为 `lent`,除非同时适用 `rewritten`。`lent` 需要 Claude Code v2.1.292 或更高版本,`rewritten` 需要 v2.1.300 或更高版本。 |

47| `next.called` | 仅在 `.catch` 处理程序中可用。当 hook 已调用 `next` 时为 `true`。 |48| `next.called` | 仅在 `.catch` 处理程序中可用。当 hook 已调用 `next` 时为 `true`。 |

48 49 

49<h2 id="events">50<h2 id="events">


97| [`skill.prompt`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | skill 的文本为 Claude 展开时 | `{ text }` |98| [`skill.prompt`](/docs/zh-CN/plugins/mods/events#rewrite-or-add-to-a-prompt) | skill 的文本为 Claude 展开时 | `{ text }` |

98| `attribution.text` | Claude Code 撰写提交或 Pull Request 的署名文本时 | `{ text }` |99| `attribution.text` | Claude Code 撰写提交或 Pull Request 的署名文本时 | `{ text }` |

99 100 

101<h4 id="skill-prompt-fields">

102 `skill.prompt` 上的来源和 frontmatter 字段

103</h4>

104 

105在 `skill.prompt` hook 中,除了 `e.skill` 中的 skill 名称和 `e.text` 中 Claude 读取的文本之外,您还可以读取以下字段:

106 

107| 字段 | 类型 | 包含的内容 |

108| :- | :- | :- |

109| `e.source` | string | 提供该 skill 的来源:对于位于企业、个人或项目[位置](/docs/zh-CN/skills#where-skills-live)的 skill,分别为 `policySettings`、`userSettings` 或 `projectSettings`。其他来源给出 `plugin`、`mcp`、`syncedSkills` 或 `built-in` 之类的词。 |

110| `e.pluginName` | string | 对于 `e.source` 为 `plugin` 的 skill,为插件的名称 |

111| `e.path` | string | skill 的 `SKILL.md` 文件的绝对路径;对于以[命令文件](/docs/zh-CN/skills#where-skills-live)形式编写的 skill,则为其 `.md` 文件的绝对路径。当该 skill 在本机上没有文件时(如内置 skill)不存在。 |

112| `e.frontmatter` | object | skill 文件的 frontmatter,以纯数据形式提供 |

113| `e.frontmatterProblem` | string | `e.frontmatter` 缺少该文件的 frontmatter 或其中某个键的原因,如 `is a list or a single value, not a table`。当 `e.frontmatter` 包含完整的 frontmatter 或该 skill 没有 frontmatter 时不存在。 |

114 

115hook 可以将更改后的 `text` 或 `frontmatter` 传给 `next`:其后的 hook 会读取这两者,而 Claude 读取最终的 `text`。更改任何其他字段的 hook 会[失败](/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。

116 

117在 `skill.prompt` 上,`e.source`、`e.pluginName`、`e.path`、`e.frontmatter` 和 `e.frontmatterProblem` 需要 Claude Code v2.1.299 或更高版本。

118 

100<h3 id="commands-and-configuration">119<h3 id="commands-and-configuration">

101 命令和配置120 命令和配置

102</h3>121</h3>

Details

31* [**Skills**](/docs/zh-CN/plugins/components#skills):`SKILL.md` 指令,Claude 在相关时加载,您也可以作为命令运行31* [**Skills**](/docs/zh-CN/plugins/components#skills):`SKILL.md` 指令,Claude 在相关时加载,您也可以作为命令运行

32* [**Agents**](/docs/zh-CN/plugins/components#agents):Claude 可以委派给的子代理定义32* [**Agents**](/docs/zh-CN/plugins/components#agents):Claude 可以委派给的子代理定义

33* [**Hooks**](/docs/zh-CN/plugins/components#hooks):Claude Code 在其生命周期中的特定点运行的命令,例如每次编辑后33* [**Hooks**](/docs/zh-CN/plugins/components#hooks):Claude Code 在其生命周期中的特定点运行的命令,例如每次编辑后

34* [**一个 hooks 模块**](/docs/zh-CN/plugins/mods/overview):作为 JavaScript 函数编写的 hooks,也可以绘制窗格和添加命令。拥有一个的插件称为 mod34* [**一个 hook 模块**](/docs/zh-CN/plugins/mods/overview):作为 JavaScript 函数编写的 hook,也可以绘制窗格和添加命令。拥有 hook 模块的插件称为 mod。部分 mod [内置于 Claude Code](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code)。

35* [**MCP 服务器**](/docs/zh-CN/plugins/components#mcp-servers):工具服务器,Claude Code 在启用插件时连接到35* [**MCP 服务器**](/docs/zh-CN/plugins/components#mcp-servers):工具服务器,Claude Code 在启用插件时连接到

36 36 

37此图显示了一个名为 `my-plugin` 的插件,其中包含一个 skill、一个 agent、hooks 和一个 MCP 服务器,以及插件加载后您从每个文件获得的内容。37此图显示了一个名为 `my-plugin` 的插件,其中包含一个 skill、一个 agent、hooks 和一个 MCP 服务器,以及插件加载后您从每个文件获得的内容。

Details

693| 消息 | 含义 | 如何解决 |693| 消息 | 含义 | 如何解决 |

694| :- | :- | :- |694| :- | :- | :- |

695| `Dependency "<dep>" is not installed` | 声明的依赖项未安装。 | 使用 `claude plugin install <dep>@<marketplace>` 在您的 shell 中安装它,或卸载插件。如果依赖项的市场尚未注册,请添加它并在您的会话中运行 `/reload-plugins`,它安装它可以解决的缺失依赖项。 |695| `Dependency "<dep>" is not installed` | 声明的依赖项未安装。 | 使用 `claude plugin install <dep>@<marketplace>` 在您的 shell 中安装它,或卸载插件。如果依赖项的市场尚未注册,请添加它并在您的会话中运行 `/reload-plugins`,它安装它可以解决的缺失依赖项。 |

696| `"<name>@synced" is loaded from your claude.ai account but meets a marketplace dependency only for other claude.ai plugins`,位于 `is not installed` 消息中 | 该依赖项指定了一个市场,而同名插件是从您的 claude.ai 账户加载的。声明该依赖项的插件不是从 claude.ai 加载的,因此该 claude.ai 插件无法满足它。 | 在您的 shell 中运行 `claude plugin install <dep>@<marketplace>`,从其市场安装该依赖项。之后将加载市场副本,而不是 claude.ai 副本。 |

696| `Dependency "<dep>" is disabled` | 依赖项已安装但关闭。 | 启用依赖项,或卸载需要它的插件。 |697| `Dependency "<dep>" is disabled` | 依赖项已安装但关闭。 | 启用依赖项,或卸载需要它的插件。 |

697| `Requires "<dep>" <range>, installed <version>` | 已安装的依赖项的版本在插件的声明范围之外。 | 将依赖项更新到范围内的版本,或卸载插件。 |698| `Requires "<dep>" <range>, installed <version>` | 已安装的依赖项的版本在插件的声明范围之外。 | 将依赖项更新到范围内的版本,或卸载插件。 |

698| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 没有版本满足每个引脚它的范围。消息列出范围。 | 卸载或更新其中一个冲突的插件,或要求上游作者扩大其约束。 |699| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 没有版本满足每个引脚它的范围。消息列出范围。 | 卸载或更新其中一个冲突的插件,或要求上游作者扩大其约束。 |


700| `... has no git tag satisfying <range>` | 依赖项的仓库在范围内没有 `<name>--v*` 标签。 | 检查上游是否使用该约定标记发布,或放宽范围。 |701| `... has no git tag satisfying <range>` | 依赖项的仓库在范围内没有 `<name>--v*` 标签。 | 检查上游是否使用该约定标记发布,或放宽范围。 |

701| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 依赖项在不同的市场中,默认情况下跨市场解析已关闭。 | 自己在相同的作用域安装依赖项,在您的 shell 中使用 `claude plugin install <dep>@<marketplace>` 加上您安装插件的 `--scope`,然后重试。 |702| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 依赖项在不同的市场中,默认情况下跨市场解析已关闭。 | 自己在相同的作用域安装依赖项,在您的 shell 中使用 `claude plugin install <dep>@<marketplace>` 加上您安装插件的 `--scope`,然后重试。 |

702 703 

703要以编程方式查看这些,请在您的 shell 中运行 `claude plugin list --json`。有问题的插件携带带有消息的 `errors` 字段和带有每个 `type` 的 `errorDetails` 字段:前两行是 `dependency-unsatisfied`,第三行是 `dependency-version-unsatisfied`。704要以编程方式查看这些,请在您的 shell 中运行 `claude plugin list --json`。有问题的插件携带带有消息的 `errors` 字段和带有每个 `type` 的 `errorDetails` 字段:前三行是 `dependency-unsatisfied`,第四行是 `dependency-version-unsatisfied`。

704 705 

705<h2 id="plugin-installed-but-not-working">706<h2 id="plugin-installed-but-not-working">

706 插件已安装但不工作707 插件已安装但不工作

Details

211 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销发生的时间,请在工作中的自然间歇处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中途触发。如果您走上了一条想要完全放弃的路径,请改用 [`/rewind`](#rewinding-the-conversation) 回退到较早的轮次。回退会截断回到一个已缓存的前缀,而不是像压缩那样构建新的前缀。211 当您丢弃的上下文是您不再需要的内容时,压缩对您有利。要选择其开销发生的时间,请在工作中的自然间歇处(例如任务之间)运行 `/compact`,而不是等待自动压缩在任务中途触发。如果您走上了一条想要完全放弃的路径,请改用 [`/rewind`](#rewinding-the-conversation) 回退到较早的轮次。回退会截断回到一个已缓存的前缀,而不是像压缩那样构建新的前缀。

212</Tip>212</Tip>

213 213 

214如果您在终端会话中让一个长对话处于空闲状态,且该对话使用的是[一小时 TTL](#which-ttl-each-request-gets),Claude Code 可能会在缓存过期前不久对其进行压缩。要关闭空闲压缩,请将 [`idleCompaction`](/docs/zh-CN/settings-reference#idlecompaction) 设置为 `false`,这需要 Claude Code v2.1.290 或更高版本。

215 

214<h3 id="accumulating-many-images">216<h3 id="accumulating-many-images">

215 积累许多图像217 积累许多图像

216</h3>218</h3>

Details

261 261 

262生物识别检查通过操作系统或浏览器在设备上运行,与通行密钥登录的机制相同。Anthropic 从不接收或存储指纹、面部数据或任何其他生物识别信息。仅存储设备的公钥和基本元数据,如显示名称、平台和注册时间。262生物识别检查通过操作系统或浏览器在设备上运行,与通行密钥登录的机制相同。Anthropic 从不接收或存储指纹、面部数据或任何其他生物识别信息。仅存储设备的公钥和基本元数据,如显示名称、平台和注册时间。

263 263 

264该设置同时适用于 Claude Code 和 [Cowork](https://claude.com/docs/cowork/overview) 中的 Remote Control。本页介绍 Claude Code 方面的内容。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。264该设置适用于 Claude Code 中的 Remote Control 以及 [Cowork](https://claude.com/docs/cowork/overview) 中的计算机访问。本页介绍 Claude Code 方面的内容。常规 Claude 聊天、终端中的 Claude Code 和 API 使用不受影响。

265 265 

266<h3 id="enable-trusted-devices-for-your-organization">266<h3 id="enable-trusted-devices-for-your-organization">

267 为 Team 或 Enterprise 组织启用受信任的设备267 为 Team 或 Enterprise 组织启用受信任的设备

routines.md +28 −15

Details

52 52 

53创建表单设置例程的提示、存储库、环境、connectors 和触发器。53创建表单设置例程的提示、存储库、环境、connectors 和触发器。

54 54 

55Routines 作为完整的 Claude Code 云会话自主运行:没有权限模式选择器,会话运行 shell 命令、使用 [skills](/docs/zh-CN/skills) 提交到克隆的存储库,并调用您包含的任何 connectors,所有这些都无需停止以获得批准,除了某些 [artifact](/docs/zh-CN/artifacts) 操作。55Routine 作为完整的 Claude Code 云端会话自主运行:没有权限模式选择器,会话会运行 shell 命令、使用提交到克隆仓库中的 [skill](/docs/zh-CN/skills),并调用您包含的任何连接器,所有这些都无需停下来等待批准,某些 [Artifact 操作](#when-a-run-publishes-an-artifact-without-asking)除外。

56 56 

57例程可以到达的内容由您选择的存储库、[environment](/docs/zh-CN/cloud-environments) 的网络访问和变量以及您包含的 connectors 决定。将每个范围限制在例程实际需要的范围内。57例程可以到达的内容由您选择的存储库、[environment](/docs/zh-CN/cloud-environments) 的网络访问和变量以及您包含的 connectors 决定。将每个范围限制在例程实际需要的范围内。

58 58 

59当例程的计划或 **Run now** 启动运行时,Claude 仅在以下所有条件都成立时才会重新发布现有 artifact,无需询问:

60 

61* 您可以编辑 artifact,它属于您自己的组织

62* artifact 不是公开共享的

63* 如果 artifact 与特定人员或您的组织共享,其查看者不会自动看到每个新版本

64* 发布仅包含页面,没有支持文件或任何其他添加的内容,并且不会强制覆盖较新版本

65* 页面不包含超出页面范围的授权,例如 [connector calls](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)

66 

67在所有其他情况下,包括发布新 artifact,Claude 会先询问。当例程的工作是保持页面最新时,请给它一个您已经发布的 artifact。

68 

69Routines 属于您的个人 claude.ai 账户。它们不与队友共享,并且其运行计入您账户的 [usage and limits](#usage-and-limits)。例程通过您连接的 GitHub 身份或 connectors 所做的任何事情都显示为您:提交和拉取请求携带您的 GitHub 用户,Slack 消息、Linear 票证或其他 connector 操作使用您为这些服务链接的账户。59Routines 属于您的个人 claude.ai 账户。它们不与队友共享,并且其运行计入您账户的 [usage and limits](#usage-and-limits)。例程通过您连接的 GitHub 身份或 connectors 所做的任何事情都显示为您:提交和拉取请求携带您的 GitHub 用户,Slack 消息、Linear 票证或其他 connector 操作使用您为这些服务链接的账户。

70 60 

71<h3 id="create-from-the-web">61<h3 id="create-from-the-web">


93 为例程选择一个 [cloud environment](/docs/zh-CN/cloud-environments)。环境控制云会话可以访问的内容:83 为例程选择一个 [cloud environment](/docs/zh-CN/cloud-environments)。环境控制云会话可以访问的内容:

94 84 

95 * **Network access**:设置每次运行期间可用的互联网访问级别85 * **Network access**:设置每次运行期间可用的互联网访问级别

96 * **Environment variables**:提供 Claude 在每次运行期间可以使用的值。它们[对使用该环境的任何人都可见](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup),因此在 Pro 和 Max 计划上,请改为将 Claude 在运行期间调用的 API 的密钥存储为[网络密钥](/docs/zh-CN/cloud-environments#add-network-secrets)。该部分还列出了永远不会获得密钥的请求86 * **Environment variables**:提供 Claude 在每次运行期间可以使用的值。它们[对使用该环境的任何人都可见](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup),因此在 Anthropic 托管的环境中,请改为将 Claude 在运行期间调用的 API 的密钥存储为[网络密钥](/docs/zh-CN/cloud-environments#add-network-secrets)。该部分还列出了永远不会获得密钥的请求

97 * **Setup script**:安装例程需要的依赖项和工具。结果是 [cached](/docs/zh-CN/cloud-environments#environment-caching),因此脚本不会在每个会话上重新运行87 * **Setup script**:安装例程需要的依赖项和工具。结果是 [cached](/docs/zh-CN/cloud-environments#environment-caching),因此脚本不会在每个会话上重新运行

98 88 

99 提供了一个 **Default** 环境,具有 **Trusted** 网络访问,允许仅通过会话网络的 [default allowlist](/docs/zh-CN/cloud-environments#default-allowed-domains) 的包注册表、云提供商 API、容器注册表和常见开发域。您添加到例程的 Connectors 通过 Anthropic 的服务器到达其服务,因此不需要更改允许列表。如果您的例程需要直接到达您自己的服务或该列表之外的域,请在运行前编辑环境的 [network access](/docs/zh-CN/cloud-environments#network-access)。要使用单独的环境,请先 [create one](/docs/zh-CN/cloud-environments#configure-your-environment)。89 提供了一个 **Default** 环境,具有 **Trusted** 网络访问,允许仅通过会话网络的 [default allowlist](/docs/zh-CN/cloud-environments#default-allowed-domains) 的包注册表、云提供商 API、容器注册表和常见开发域。您添加到例程的 Connectors 通过 Anthropic 的服务器到达其服务,因此不需要更改允许列表。如果您的例程需要直接到达您自己的服务或该列表之外的域,请在运行前编辑环境的 [network access](/docs/zh-CN/cloud-environments#network-access)。要使用单独的环境,请先 [create one](/docs/zh-CN/cloud-environments#configure-your-environment)。


182 172 

183API 触发器为例程提供专用的 HTTP 端点。使用例程的持有者令牌 POST 到端点会启动新会话并返回会话 URL。使用此功能将 Claude Code 连接到警报系统、部署管道、内部工具或任何可以进行身份验证 HTTP 请求的地方。173API 触发器为例程提供专用的 HTTP 端点。使用例程的持有者令牌 POST 到端点会启动新会话并返回会话 URL。使用此功能将 Claude Code 连接到警报系统、部署管道、内部工具或任何可以进行身份验证 HTTP 请求的地方。

184 174 

185API 触发器从 Web 添加到现有例程。CLI 目前无法创建或撤销令牌。175API 触发器从 Web 添加到现有 Routine。CLI 目前无法创建、重新生成或删除令牌。

186 176 

187<Steps>177<Steps>

188 <Step title="打开例程进行编辑">178 <Step title="打开例程进行编辑">


202 </Step>192 </Step>

203</Steps>193</Steps>

204 194 

205每个例程都有自己的令牌,仅限于触发该例程。要轮换或撤销它,请返回同一模态并单击 **Regenerate** 或 **Revoke**。195每个 Routine 都有自己的令牌,仅限于触发该 Routine。要关闭 API 访问或轮换令牌,请返回同一模态:

196 

197* **关闭 API 访问**:单击 **Delete token**,即 **Regenerate** 旁边的垃圾桶图标

198* **轮换令牌**:单击 **Regenerate**

206 199 

207<h4 id="trigger-a-routine">200<h4 id="trigger-a-routine">

208 触发例程201 触发例程


379 372 

380要在 Routine 表单之外管理或添加连接器,请访问 [claude.ai/customize/connectors](https://claude.ai/customize/connectors),或在 CLI 中使用 `/schedule update`。373要在 Routine 表单之外管理或添加连接器,请访问 [claude.ai/customize/connectors](https://claude.ai/customize/connectors),或在 CLI 中使用 `/schedule update`。

381 374 

375<h3 id="when-a-run-publishes-an-artifact-without-asking">

376 运行在未询问的情况下发布 Artifact 的情形

377</h3>

378 

379当 Routine 的计划或 **Run now** 启动一次运行时,Claude 可以在不询问的情况下发布新的 [Artifact](/docs/zh-CN/artifacts)。在您[共享它](/docs/zh-CN/artifacts#share-an-artifact)之前,新的 Artifact 仅对您可见。如果发布操作为页面声明了运行时能力,例如[连接器调用](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)或[文件下载](/docs/zh-CN/artifacts#offer-a-file-download),Claude 会先询问。

380 

381在这些运行中,只有当以下所有条件都满足时,Claude 才会在不询问的情况下重新发布现有的 Artifact:

382 

383* 您可以编辑该 Artifact,且它属于您自己的组织

384* 如果发布内容不止页面本身(例如附带支持文件),则您是该 Artifact 的所有者

385* 该 Artifact 未公开共享

386* 如果该 Artifact 已与特定人员或您的组织共享,其查看者不会自动看到每个新版本

387* 发布操作不会强制覆盖较新的版本

388* 发布操作未为页面声明运行时能力

389* 现有页面不持有任何超出页面范围的授权,例如[连接器调用](/docs/zh-CN/artifacts#pull-live-data-with-mcp-connectors)

390 

391在所有其他情况下,包括由 API 或 GitHub 触发器启动的运行,Claude 都会先询问。

392 

393如果 Routine 的任务是保持某个页面处于最新状态,请为其提供一个您已经发布的 Artifact。

394 

382<h3 id="environments-and-network-access">395<h3 id="environments-and-network-access">

383 环境和网络访问396 环境和网络访问

384</h3>397</h3>


403 </Step>416 </Step>

404 417 

405 <Step title="更改网络访问级别">418 <Step title="更改网络访问级别">

406 在 **Edit environment** 对话框中,将 **Network access** 更改为 **Custom**,并在 **Allowed domains** 中输入您的域名。勾选 **Also include default list of common package managers**,以便在自定义域名之外保留[默认允许列表](/docs/zh-CN/cloud-environments#default-allowed-domains)。如需不受限制的访问,请改为选择 **Full**。419 在 **Edit cloud environment** 对话框中,将 **Network access** 更改为 **Custom**,并在 **Allowed domains** 中输入您的域名。勾选 **Also include default list of common package managers**,以便在自定义域名之外保留[默认允许列表](/docs/zh-CN/cloud-environments#default-allowed-domains)。如需不受限制的访问,请改为选择 **Full**。

407 </Step>420 </Step>

408 421 

409 <Step title="保存">422 <Step title="保存">

Details

79 79 

80在[Monitor tool 可用](/docs/zh-CN/tools-reference#monitor-tool)的会话中,当您要求动态 `/loop` 计划时,Claude 可能会直接使用它。Monitor 运行后台脚本并流式传输每个输出行,这完全避免了轮询,通常比在间隔上重新运行提示词更节省令牌且响应更快。80在[Monitor tool 可用](/docs/zh-CN/tools-reference#monitor-tool)的会话中,当您要求动态 `/loop` 计划时,Claude 可能会直接使用它。Monitor 运行后台脚本并流式传输每个输出行,这完全避免了轮询,通常比在间隔上重新运行提示词更节省令牌且响应更快。

81 81 

82动态计划的循环出现在您的[计划任务列表](#manage-scheduled-tasks)中,就像任何其他任务一样,所以您可以以相同的方式列出或取消它。[抖动规则](#jitter)不适用于它,但[七天过期](#seven-day-expiry)适用。82动态安排的循环会像任何其他任务一样出现在您的[定时任务列表](#manage-scheduled-tasks)中,因此您可以用相同的方式列出或取消它。该列表将其待处理的唤醒显示为一次性任务,因此安排在 `:00` 或 `:30` 的唤醒可能会[稍早运行](#when-a-one-shot-task-runs-early)。[七天过期](#seven-day-expiry)同样适用于该循环。

83 83 

84<span id="loop-provider-differences" />84<span id="loop-provider-differences" />

85 85 


174| 工具 | 目的 |174| 工具 | 目的 |

175| :- | :- |175| :- | :- |

176| `CronCreate` | 计划新任务。接受 5 字段 cron 表达式、要运行的提示词以及是否重复或仅触发一次。 |176| `CronCreate` | 计划新任务。接受 5 字段 cron 表达式、要运行的提示词以及是否重复或仅触发一次。 |

177| `CronList` | 列出所有计划任务及其 ID、计划和提示词。 |177| `CronList` | 列出定时任务及其 ID、计划、[下次运行时间](#jitter)和提示词。 |

178| `CronDelete` | 按 ID 取消任务。 |178| `CronDelete` | 按 ID 取消任务。 |

179 179 

180每个计划任务都有一个 8 字符的 ID,您可以将其传递给 `CronDelete`。一个会话最多可以同时保存 50 个计划任务。180每个计划任务都有一个 8 字符的 ID,您可以将其传递给 `CronDelete`。一个会话最多可以同时保存 50 个计划任务。


193 193 

194定时任务的实际运行时间可能与其计划时间不同。如果每个会话的任务都严格按计划运行,许多任务会在同一时刻调用 API,因此 Claude Code 会调整每个任务的运行时间。重复任务会延后运行,但每五分钟运行一次的任务(写作 `*/5 * * * *`)除外。安排在整点或半点的一次性任务会稍微提前运行。194定时任务的实际运行时间可能与其计划时间不同。如果每个会话的任务都严格按计划运行,许多任务会在同一时刻调用 API,因此 Claude Code 会调整每个任务的运行时间。重复任务会延后运行,但每五分钟运行一次的任务(写作 `*/5 * * * *`)除外。安排在整点或半点的一次性任务会稍微提前运行。

195 195 

196要查看任务下次到期的时间,请查看终端中 Claude 的 `CronCreate` 调用下方的行。该行会在计划之后显示该时间,例如 `next run 10:21 AM`。之后如需再次查看,请[让 Claude 列出您的任务](#manage-scheduled-tasks),并在 `CronList` 调用下方的行中查找 `next run`。这些行中的下次运行时间需要 Claude Code v2.1.299 或更高版本。

197 

196<h4 id="how-late-a-recurring-task-runs">198<h4 id="how-late-a-recurring-task-runs">

197 重复任务会延后多久运行199 重复任务会延后多久运行

198</h4>200</h4>

Details

1001. 具有可用容量的运行器声称会话并对其持有租约。1001. 具有可用容量的运行器声称会话并对其持有租约。

1012. 运行器将存储库克隆到其工作目录中并生成子 Claude Code 进程。1012. 运行器将存储库克隆到其工作目录中并生成子 Claude Code 进程。

1023. 子进程通过 HTTPS 流回事件,而运行器继续轮询;每次轮询刷新租约并充当心跳。1023. 子进程通过 HTTPS 流回事件,而运行器继续轮询;每次轮询刷新租约并充当心跳。

1034. 如果运行器停止轮询,其租约会在大约 60 秒后失效,服务器会在几分钟内将会话重新排队给另一个运行器。1034. 如果运行器停止轮询,其租约会在大约 60 秒后失效。之后,服务器可能需要几分钟、有时更长时间才能将会话重新排队给另一个运行器。

104 104 

105运行器给每个轮询请求 10 秒。当请求超时、丢失或获得运行器无法解析的响应时,运行器继续为其活跃会话服务,并在一两秒后重试,而不是等待下一个计划的轮询。例如,一个拦截代理用自己的页面回答轮询会产生运行器无法解析的响应。每次另一个请求以这些方式之一失败时,运行器会将下一次重试前的间隔加倍,最多 20 秒,并在租约即将过期时缩短间隔。105运行器给每个轮询请求 10 秒。当请求超时、丢失或获得运行器无法解析的响应时,运行器继续为其活跃会话服务,并在一两秒后重试,而不是等待下一个计划的轮询。例如,一个拦截代理用自己的页面回答轮询会产生运行器无法解析的响应。每次另一个请求以这些方式之一失败时,运行器会将下一次重试前的间隔加倍,最多 20 秒,并在租约即将过期时缩短间隔。

106 106 

Details

40| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | 对于属于某个 Slack 线程的 Claude Tag 会话,为该线程的 Slack 时间戳,例如 `1700000000.000100`。可能未设置,也可能在 `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` 未设置时被设置,因此请分别检查每个变量。 |40| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | 对于属于某个 Slack 线程的 Claude Tag 会话,为该线程的 Slack 时间戳,例如 `1700000000.000100`。可能未设置,也可能在 `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` 未设置时被设置,因此请分别检查每个变量。 |

41| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 绝对路径,指向保存当前会话 JWT 的按会话文件,在令牌刷新时保持最新。Shell 子进程在下载用户添加到会话的附件时从中读取其 `Authorization` 标头。`exec` 自动保留该变量;重建子进程环境的包装脚本必须携带该变量,否则附件下载会无声地停止工作。 |41| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 绝对路径,指向保存当前会话 JWT 的按会话文件,在令牌刷新时保持最新。Shell 子进程在下载用户添加到会话的附件时从中读取其 `Authorization` 标头。`exec` 自动保留该变量;重建子进程环境的包装脚本必须携带该变量,否则附件下载会无声地停止工作。 |

42| `CLAUDE_CONFIG_DIR` | 按会话 Claude 配置目录,在会话启动时从运行器在启动时捕获的运行器主机配置快照中写入;请参阅 [Permissions and tool approval](#permissions-and-tool-approval)。此处的写入仅限于此会话。除非您使用 [`--remove-session-state`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动运行器,否则会话结束后该目录仍会保留在 `<base-dir>/_sessions/` 下;请参阅 [Reuse a pre-warmed checkout](/docs/zh-CN/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)。 |42| `CLAUDE_CONFIG_DIR` | 按会话 Claude 配置目录,在会话启动时从运行器在启动时捕获的运行器主机配置快照中写入;请参阅 [Permissions and tool approval](#permissions-and-tool-approval)。此处的写入仅限于此会话。除非您使用 [`--remove-session-state`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动运行器,否则会话结束后该目录仍会保留在 `<base-dir>/_sessions/` 下;请参阅 [Reuse a pre-warmed checkout](/docs/zh-CN/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)。 |

43| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | 指向 `CLAUDE_CONFIG_DIR` 中某个文件的路径,该文件保存 Anthropic 控制平面为此会话交付的 MCP 服务器定义。如果您的包装脚本重建子进程的环境,请携带此变量。如果缺少此变量,当控制平面更新交付的服务器时,子进程会关闭您的包装脚本通过 [`--mcp-config`](/docs/zh-CN/cli-reference#cli-flags) 添加但不在更新中的任何 stdio、HTTP 或 SSE 服务器。需要 Claude Code v2.1.299 或更高版本。 |

43| `ANTHROPIC_BASE_URL` | 子进程将使用的 API 基础 URL,由控制平面按会话交付,通常为 `https://api.anthropic.com`。不要覆盖它:会话的推理凭据是 Anthropic 颁发的 OAuth 令牌,其他提供者不接受。 |44| `ANTHROPIC_BASE_URL` | 子进程将使用的 API 基础 URL,由控制平面按会话交付,通常为 `https://api.anthropic.com`。不要覆盖它:会话的推理凭据是 Anthropic 颁发的 OAuth 令牌,其他提供者不接受。 |

44| `CLAUDE_CODE_OAUTH_TOKEN` | 子进程用于模型推理的短期 OAuth 访问令牌,作用域仅限于模型推理和文件上传,生命周期约为 30 分钟。运行器在过期前重新生成它,并通过子进程的 stdin 交付轮换,因此不 [keep stdin attached](#keep-stdin-and-file-descriptor-3-attached) 的包装脚本只看到初始值。不要依赖您的组织 IP 允许列表来限制此令牌的使用:将其视为持有者凭据,如果泄露,大约 30 分钟内仍可使用,不要记录它、写入磁盘或在会话容器外转发它。 |45| `CLAUDE_CODE_OAUTH_TOKEN` | 子进程用于模型推理的短期 OAuth 访问令牌,作用域仅限于模型推理和文件上传,生命周期约为 30 分钟。运行器在过期前重新生成它,并通过子进程的 stdin 交付轮换,因此不 [keep stdin attached](#keep-stdin-and-file-descriptor-3-attached) 的包装脚本只看到初始值。不要依赖您的组织 IP 允许列表来限制此令牌的使用:将其视为持有者凭据,如果泄露,大约 30 分钟内仍可使用,不要记录它、写入磁盘或在会话容器外转发它。 |

45 46 


51 为可能未设置的变量提供默认值52 为可能未设置的变量提供默认值

52</h3>53</h3>

53 54 

54`CCR_SESSION_ACCOUNT_EMAIL`、`CLAUDE_RUNNER_CLIENT_PLATFORM`、`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` 和 `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` 都可能未设置。如果您的脚本使用 `set -u`,Bash 在展开其中未设置的变量时会以 `unbound variable` 停止,因此请使用默认值展开它们,例如 `${CCR_SESSION_ACCOUNT_EMAIL:-}`。55`CCR_SESSION_ACCOUNT_EMAIL`、`CLAUDE_RUNNER_CLIENT_PLATFORM`、`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` 和 `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` 都可能未设置。如果您的脚本使用 `set -u`,Bash 在展开其中未设置的变量时会以 `unbound variable` 停止,因此请使用默认值展开它们,例如 `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`。

55 56 

56在 shell 展开 Slack 线程链接的任何位置,请采取以下预防措施:57<h3 id="quote-the-arguments-and-variables-your-script-expands">

58 为脚本展开的参数和变量加引号

59</h3>

60 

61为运行器传递给您的包装脚本或 [`command` hook](#command) 的每个参数和变量加引号。某些值包含 shell 会处理的字符,因为它们包含 JSON、完整的句子或[权限规则](/docs/zh-CN/permissions#permission-rule-syntax),例如 `Bash(npm run test *)`。

57 62 

58* **为其加引号**:该链接可能包含 shell 会处理的字符,例如 `?` 和 `&`,因此请为变量加引号,如 `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`。63* **参数**:以 `"$@"` 的形式传递它们

59* **不要将其值放入 `eval` 和 `sh -c` 字符串**:不要将其值替换到 `eval` 或 `sh -c` 运行的字符串中,即使在引号内也不行。应让该字符串引用该变量。64* **变量**:为每个变量加引号,如 `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`。例如,Slack 线程链接可能包含 `?` 和 `&`。

65* **`eval` 和 `sh -c` 字符串**:不要将值替换到 `eval` 或 `sh -c` 运行的字符串中,即使在引号内也不行。应让该字符串引用该变量。

60 66 

61<h3 id="keep-stdin-and-file-descriptor-3-attached">67<h3 id="keep-stdin-and-file-descriptor-3-attached">

62 保持 stdin 和文件描述符 3 的连接68 保持 stdin 和文件描述符 3 的连接


136| `CLAUDE_RUNNER_SESSION_ID` | 会话 ID,采用标记的 `session_...` 形式,用于日志记录和关联 |142| `CLAUDE_RUNNER_SESSION_ID` | 会话 ID,采用标记的 `session_...` 形式,用于日志记录和关联 |

137| `CLAUDE_RUNNER_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式 |143| `CLAUDE_RUNNER_SESSION_UUID` | 相同的会话 ID,采用规范 UUID 形式 |

138| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |144| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |

139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或可识别的使用入口时未设置,因此在 `set -u` 下请以 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` 的形式引用它。需要 Claude Code v2.1.229 或更高版本。 |145| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或可识别的使用入口时未设置,因此在 `set -u` 下请以 `"${CLAUDE_RUNNER_CLIENT_PLATFORM:-}"` 的形式引用它。需要 Claude Code v2.1.229 或更高版本。 |

140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |146| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |

141| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |147| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |

142 148 


159 165 

160当 hook 以非零状态退出,或以 0 退出但没有留下可用的检出时,hook 即为失败:166当 hook 以非零状态退出,或以 0 退出但没有留下可用的检出时,hook 即为失败:

161 167 

162* **会话推送结果的存储库**:运行器失败会话,在非零退出时将脚本的 stderr 尾部呈现给用户。168* **会话向其推送结果的仓库**:运行器会使会话失败,并在非零退出时将脚本 stderr 的末尾部分呈现给用户。请将原因以简短的一行写入 stderr,将其放在最后写入,然后以非零状态退出。请勿将机密信息打印到 stderr,并在部署 hook 之前移除 `set -x`。

163* **会话仅从中读取的仓库**,例如添加到正在运行的会话中的仓库:运行器记录一行带有失败详情的 `[runner:warn]`,向会话发布一个 `Skipped` 步骤,删除 hook 在检出路径处留下的任何内容,并继续处理其余仓库。如果跳过后会话完全没有仓库,运行器仍然会使会话失败。169* **会话仅从中读取的仓库**,例如添加到正在运行的会话中的仓库:运行器记录一行带有失败详情的 `[runner:warn]`,向会话发布一个 `Skipped` 步骤,删除 hook 在检出路径处留下的任何内容,并继续处理其余仓库。如果跳过后会话完全没有仓库,运行器仍然会使会话失败。

164 170 

165当 hook 成功时,运行器会在会话结束后删除检出路径。171当 hook 成功时,运行器会在会话结束后删除检出路径。


180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | 会话工作树的冒号分隔绝对路径。对于零存储库会话为空。 |186| `CLAUDE_RUNNER_WORKSPACE_PATHS` | 会话工作树的冒号分隔绝对路径。对于零存储库会话为空。 |

181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | 会话的调试日志的路径,在钩子运行时仍在磁盘上 |187| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | 会话的调试日志的路径,在钩子运行时仍在磁盘上 |

182| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |188| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic API 基础 URL,用于会话范围的调用 |

183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或可识别的使用入口时未设置,因此在 `set -u` 下请以 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` 的形式引用它。需要 Claude Code v2.1.229 或更高版本。 |189| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 创建会话的客户端使用入口,例如 `web_claude_ai`、`desktop_app` 或 `ios`。当会话没有记录或可识别的使用入口时未设置,因此在 `set -u` 下请以 `"${CLAUDE_RUNNER_CLIENT_PLATFORM:-}"` 的形式引用它。需要 Claude Code v2.1.229 或更高版本。 |

184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |190| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 会话访问令牌,用于会话范围的 API 调用 |

185| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |191| `GIT_CONFIG_COUNT`、`GIT_CONFIG_KEY_n`、`GIT_CONFIG_VALUE_n` | 运行器为您的 hook 所运行的 git 固定的 Git 设置。[生命周期 hook 中的 Git 配置](#git-configuration-inside-lifecycle-hooks)对其进行了说明。需要 Claude Code v2.1.280 或更高版本。 |

186 192 


3293. **使用退出码约定。** 以与结果相匹配的状态退出:3353. **使用退出码约定。** 以与结果相匹配的状态退出:

330 336 

331 * **退出 0**:已提交。337 * **退出 0**:已提交。

332 * **退出 1**:可重试失败。会话退避并被重新提供。338 * **退出 1,或在 `--hook-timeout` 结束时仍在运行**:可重试失败。会话退避并被重新提供。

333 * **退出 2 或更高**:不可重试失败。会话被阻止再次生成,直到用户向其发送新消息,或 [Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 在环境的 **Activity** 标签中对其选择 **Retry**。339 * **退出 2 或更高**:不可重试失败。会话被阻止再次生成,直到用户向其发送新消息,或 [Owner](/docs/zh-CN/cloud-environments#organization-shared-environments) 在环境的 **Activity** 标签中对其选择 **Retry**。

334 340 

335 在非零退出时,hook 的 stderr 尾部会作为失败原因出现在 **Activity** 标签中,因此请将可操作的错误写入 stderr,并且永远不要在其中写入密钥。在 shell hook 中,请[保持暂时性失败可重试](#keep-transient-failures-retryable-in-a-shell-hook)。341 在非零退出时,hook 的 stderr 尾部会作为失败原因出现在 **Activity** 标签中,因此请将可操作的错误写入 stderr,并且永远不要在其中写入密钥。在 shell hook 中,请[保持暂时性失败可重试](#keep-transient-failures-retryable-in-a-shell-hook)。


341 347 

342如果会话保持排队,且 **Activity** 标签中没有生成错误,可能意味着 hook 以会话 ID 作为键。要确认这一点,请检查您的平台是否存在该会话第一次生成请求对应的工作负载,而重新请求却没有对应的工作负载。如果是这样,请改为以 `CLAUDE_RUNNER_ORDER_ID` 作为工作负载的键。348如果会话保持排队,且 **Activity** 标签中没有生成错误,可能意味着 hook 以会话 ID 作为键。要确认这一点,请检查您的平台是否存在该会话第一次生成请求对应的工作负载,而重新请求却没有对应的工作负载。如果是这样,请改为以 `CLAUDE_RUNNER_ORDER_ID` 作为工作负载的键。

343 349 

350<h4 id="make-on-demand-runners-exit-when-idle">

351 让按需运行器在空闲时退出

352</h4>

353 

354默认情况下,您的 hook 启动的运行器不会在其会话的轮次结束时退出,因此您提交的工作负载会持续运行。要让运行器退出,请让您的 hook 传递以下[运行器标志](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags):

355 

356| 标志及示例值 | 传递给 | 作用 |

357| :- | :- | :- |

358| `--release-idle-session-min 30` | 您的 hook 启动的每个运行器 | 运行器在空闲达到该分钟数后释放其会话,然后以 0 退出。当会话的用户发送下一条消息时,会话会恢复,但[其尚未推送的工作将会丢失](/docs/zh-CN/self-hosted-environments-deploy#additional-limitations)。 |

359| `--kill-session-after-min 480` | 您的 hook 启动的每个运行器 | 将每个会话限制为该分钟数,作为[不计为空闲的会话](/docs/zh-CN/self-hosted-environments-deploy#some-sessions-don’t-count-as-idle)的兜底措施,因此请将其设置为高于您预期的最长会话时长 |

360| `--exit-if-unused-min 60` | 待命运行器,即您的 hook 为预热请求启动的运行器 | 从未接收会话的待命运行器会在该分钟数后退出。如果您设置了 [`--min-idle`](/docs/zh-CN/self-hosted-environments-reference#orchestrator-cli-flags),除非该待命运行器是多余的,否则您会获得替代运行器,因此请使用远高于启动时间的值。 |

361 

362在运行器退出时移除工作负载,例如在 Kubernetes Job 上设置 `ttlSecondsAfterFinished`,或让 VM 的启动脚本在之后删除该 VM。

363 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">364<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 在 shell hook 中保持暂时性失败可重试365 在 shell hook 中保持暂时性失败可重试

346</h4>366</h4>


484* 位于标准系统路径的企业作用域[托管 MCP 文件](/docs/zh-CN/managed-mcp):Linux 运行器主机上为 `/etc/claude-code/managed-mcp.json`,macOS 主机上为 `/Library/Application Support/ClaudeCode/managed-mcp.json`。适用于只允许加载管理员列出的服务器的锁定机群。有关优先级规则,请参阅[使用 managed-mcp.json 进行独占控制](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json)。当运行器主机上存在此文件时,Claude Code 会跳过 Anthropic 控制平面下发给会话的 MCP 服务器(包括 claude.ai 连接器),并在会话子进程的 stderr 上以警告形式列出它们的名称,运行器会以 `debug` 日志级别记录这些警告。在 v2.1.229 之前,这些会话会在启动时退出并显示 `You cannot dynamically configure MCP servers when an enterprise MCP config is present`。504* 位于标准系统路径的企业作用域[托管 MCP 文件](/docs/zh-CN/managed-mcp):Linux 运行器主机上为 `/etc/claude-code/managed-mcp.json`,macOS 主机上为 `/Library/Application Support/ClaudeCode/managed-mcp.json`。适用于只允许加载管理员列出的服务器的锁定机群。有关优先级规则,请参阅[使用 managed-mcp.json 进行独占控制](/docs/zh-CN/managed-mcp#exclusive-control-with-managed-mcp-json)。当运行器主机上存在此文件时,Claude Code 会跳过 Anthropic 控制平面下发给会话的 MCP 服务器(包括 claude.ai 连接器),并在会话子进程的 stderr 上以警告形式列出它们的名称,运行器会以 `debug` 日志级别记录这些警告。在 v2.1.229 之前,这些会话会在启动时退出并显示 `You cannot dynamically configure MCP servers when an enterprise MCP config is present`。

485* 运行器主机上[托管设置](/docs/zh-CN/managed-settings)中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 键:提供 HTTP 和 SSE 服务器,但不进行独占控制,因此来自其他来源的服务器仍会加载。需要 Claude Code v2.1.259 或更高版本。505* 运行器主机上[托管设置](/docs/zh-CN/managed-settings)中的 [`managedMcpServers`](/docs/zh-CN/settings-reference#managedmcpservers) 键:提供 HTTP 和 SSE 服务器,但不进行独占控制,因此来自其他来源的服务器仍会加载。需要 Claude Code v2.1.259 或更高版本。

486* `<repo>/.mcp.json`:项目作用域。将该文件提交到仓库;其中的服务器在云端会话中会被自动批准。在包含多个仓库的会话中,[最多只会加载一个仓库的该文件](#repository-settings-in-sessions-with-several-repositories)。506* `<repo>/.mcp.json`:项目作用域。将该文件提交到仓库;其中的服务器在云端会话中会被自动批准。在包含多个仓库的会话中,[最多只会加载一个仓库的该文件](#repository-settings-in-sessions-with-several-repositories)。

507* 来自您的包装脚本的 [`--mcp-config`](/docs/zh-CN/cli-reference#cli-flags) 文件:将该标志追加在 `"$@"` 之后,例如 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --mcp-config /etc/claude/mcp.json`。为了在会话中途更新会话所下发的服务器时让该文件中的服务器保持运行,请让您的包装脚本将[完整环境](#wrapper-scripts)传递给子进程,就像 `exec` 所做的那样。在 v2.1.299 之前,该文件中的 stdio、HTTP 和 SSE 服务器会在第一次未指明它们的此类更新时关闭。

487 508 

488当您的组织启用了连接器下发时,Anthropic 的控制平面会通过服务器提供的 MCP 配置,将您在 claude.ai 上配置的连接器下发到以交互方式创建的会话,请求经由 `api.anthropic.com` 路由。以编程方式创建的会话(例如 [CLI 调度](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop))不会接收连接器下发;请改为通过本节列出的任何其他来源为它们提供 MCP 服务器。子进程的 OAuth 令牌不带有直接获取连接器的作用域,因此子进程本身不会尝试获取;下发由服务器驱动。509当您的组织启用了连接器下发时,Anthropic 的控制平面会通过服务器提供的 MCP 配置,将您在 claude.ai 上配置的连接器下发到以交互方式创建的会话,请求经由 `api.anthropic.com` 路由。以编程方式创建的会话(例如 [CLI 调度](/docs/zh-CN/self-hosted-environments-testing#run-the-test-loop))不会接收连接器下发;请改为通过本节列出的任何其他来源为它们提供 MCP 服务器。子进程的 OAuth 令牌不带有直接获取连接器的作用域,因此子进程本身不会尝试获取;下发由服务器驱动。

489 510 

Details

182* 返回最小范围令牌的 `credential.helper`182* 返回最小范围令牌的 `credential.helper`

183* `GIT_SSH_COMMAND` 指向狭义范围的密钥183* `GIT_SSH_COMMAND` 指向狭义范围的密钥

184 184 

185您配置的任何机制都必须无需提示即可工作,因为运行器的内置克隆和获取禁用 git、SSH 和 Git Credential Manager 否则会显示的提示:185<span id="git-must-work-without-a-prompt" />您配置的任何机制都必须无需提示即可工作,因为运行器的内置克隆和获取禁用 git、SSH 和 Git Credential Manager 否则会显示的提示:

186 186 

187* 运行器设置 `GIT_TERMINAL_PROMPT=0`,所以 git 不要求用户名或密码。187* 运行器设置 `GIT_TERMINAL_PROMPT=0`,所以 git 不要求用户名或密码。

188* 运行器使用 `BatchMode=yes` 运行 SSH,如果您设置了一个,则附加到您的 `GIT_SSH_COMMAND`,所以 SSH 不要求密码短语或主机确认。188* 运行器使用 `BatchMode=yes` 运行 SSH,如果您设置了一个,则附加到您的 `GIT_SSH_COMMAND`,所以 SSH 不要求密码短语或主机确认。


212* **仅限 github.com**:只有当会话的所有仓库都在 github.com 上时,Anthropic 才会为其提供服务,并且 git 代理尚不支持 GitHub Enterprise Server。在启用 git 代理的运行器上,包含其他 git 主机上仓库的会话[无法启动](#when-anthropic-doesnt-serve-a-session)。212* **仅限 github.com**:只有当会话的所有仓库都在 github.com 上时,Anthropic 才会为其提供服务,并且 git 代理尚不支持 GitHub Enterprise Server。在启用 git 代理的运行器上,包含其他 git 主机上仓库的会话[无法启动](#when-anthropic-doesnt-serve-a-session)。

213* **仅限会话仓库的凭据**:Anthropic 只为属于会话的仓库提供 git 凭据,而不为同一 git 主机上的其他仓库提供。私有子模块、包管理器通过 git 获取的依赖,或位于另一个仓库中的插件市场,都不会从 Anthropic 获得凭据。请让创建会话的人员在创建会话时[添加会话所需的每个仓库](/docs/zh-CN/web-quickstart#start-a-task)。213* **仅限会话仓库的凭据**:Anthropic 只为属于会话的仓库提供 git 凭据,而不为同一 git 主机上的其他仓库提供。私有子模块、包管理器通过 git 获取的依赖,或位于另一个仓库中的插件市场,都不会从 Anthropic 获得凭据。请让创建会话的人员在创建会话时[添加会话所需的每个仓库](/docs/zh-CN/web-quickstart#start-a-task)。

214* **仅限分支推送**:删除分支的推送会失败,推送到任何其他类型的引用(例如标签)也会失败。有关推送可以更新哪些分支,请参阅 [GitHub 代理](/docs/zh-CN/cloud-environments#github-proxy)。214* **仅限分支推送**:删除分支的推送会失败,推送到任何其他类型的引用(例如标签)也会失败。有关推送可以更新哪些分支,请参阅 [GitHub 代理](/docs/zh-CN/cloud-environments#github-proxy)。

215* **已连接的 GitHub 账户**:创建用户会话的人必须已在 claude.ai 上连接 GitHub,否则会话[无法启动](#creator-has-no-github-connection)。215* **已连接的 GitHub 账户**:请让每个使用仓库创建用户会话的人[连接 GitHub](/docs/zh-CN/web-quickstart#connect-github)。如果他们没有自己的连接,这些会话[无法启动](#creator-has-no-github-connection)。

216* **`--capacity 1`**:git 代理要求每个运行器进程只有一个会话,因此请运行更多副本以获得并行性。[启用 Anthropic git 代理](#turn-the-anthropic-git-proxy-on)列出了各项要求。216* **`--capacity 1`**:git 代理要求每个运行器进程只有一个会话,因此请运行更多副本以获得并行性。[启用 Anthropic git 代理](#turn-the-anthropic-git-proxy-on)列出了各项要求。

217* **替换全局 git 配置**:运行器会[删除并替换其运行用户的全局 git 配置](#git-proxy-replaces-global-git-config)。请以专用用户身份或在容器中运行它。217* **替换全局 git 配置**:运行器会[删除并替换其运行用户的全局 git 配置](#git-proxy-replaces-global-git-config)。请以专用用户身份或在容器中运行它。

218* **主机推送使用主机凭据**:运行器的 [`--push-outcome-on-release`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 推送以及您的 [`post-session` 钩子](/docs/zh-CN/self-hosted-environments-configuration#post-session)进行的任何推送,仍使用运行器主机自身的 git 凭据及其[到 `github.com` 的网络路径](#github-com-egress-with-the-anthropic-git-proxy)。有关这些凭据,请参阅[在镜像中提供 git 配置](#ship-git-config-in-your-image)。218* **主机推送使用主机凭据**:运行器的 [`--push-outcome-on-release`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 推送以及您的 [`post-session` 钩子](/docs/zh-CN/self-hosted-environments-configuration#post-session)进行的任何推送,仍使用运行器主机自身的 git 凭据及其[到 `github.com` 的网络路径](#github-com-egress-with-the-anthropic-git-proxy)。请将这些凭据置于[全局 git 配置](#git-proxy-replaces-global-git-config)之外,并参阅[在镜像中提供 git 配置](#ship-git-config-in-your-image)了解提供这些凭据的方法。

219* **按会话决定**:Anthropic 会针对运行器上的每个会话决定是否为其提供 git 服务,未获服务的会话将无法启动。[在启用 git 代理的运行器上会话无法启动时](#when-anthropic-doesnt-serve-a-session)介绍了原因。219* **按会话决定**:Anthropic 会针对运行器上的每个会话决定是否为其提供 git 服务,未获服务的会话将无法启动。[在启用 git 代理的运行器上会话无法启动时](#when-anthropic-doesnt-serve-a-session)介绍了原因。

220 220 

221<span id="git-proxy-replaces-global-git-config" />221<span id="git-proxy-replaces-global-git-config" />


356仓库 URL 从控制平面作为 HTTPS 到达,带有您的 git 主机的主机名;对于 GitHub Enterprise,这是您在 claude.ai 上为 [GitHub Enterprise 集成](/docs/zh-CN/github-enterprise-server)配置的主机名。两个可重复的标志在克隆之前重写这些 URL:356仓库 URL 从控制平面作为 HTTPS 到达,带有您的 git 主机的主机名;对于 GitHub Enterprise,这是您在 claude.ai 上为 [GitHub Enterprise 集成](/docs/zh-CN/github-enterprise-server)配置的主机名。两个可重复的标志在克隆之前重写这些 URL:

357 357 

358* `--git-host-rewrite <from>=<to>`:对于分割视界 DNS,其中 Anthropic 通过外部主机名到达您的 git 主机,但运行器必须使用内部主机名358* `--git-host-rewrite <from>=<to>`:对于分割视界 DNS,其中 Anthropic 通过外部主机名到达您的 git 主机,但运行器必须使用内部主机名

359* `--git-ssh-rewrite <host>`:对于仅接受 SSH 的 git 主机,将 `https://<host>/owner/repo` 重写为 `git@<host>:owner/repo`359* `--git-ssh-rewrite <host>`:适用于仅接受 SSH 的 git 主机,或仅有 SSH 密钥的运行器主机。例如,要通过 SSH 克隆 github.com 仓库,请将 `--git-ssh-rewrite github.com` 添加到运行器命令中。运行器随后会将 `https://github.com/owner/repo` 重写为 `git@github.com:owner/repo`。SSH 必须[无需提示即可连接](#git-must-work-without-a-prompt)。

360 360 

361主机重写首先运行,因此如果您需要两者,请在 `--git-ssh-rewrite` 中列出内部主机名。为了完全控制检出,使用 [`checkout` 生命周期钩子](/docs/zh-CN/self-hosted-environments-configuration#checkout)。361主机重写首先运行,因此如果您需要两者,请在 `--git-ssh-rewrite` 中列出内部主机名。为了完全控制检出,使用 [`checkout` 生命周期钩子](/docs/zh-CN/self-hosted-environments-configuration#checkout)。

362 362 


578 578 

579给您的主机停止超时至少三个部分的总和:您配置的 `n` 分钟、发布后宽限期和 [Shutdown timing](#shutdown-timing) 描述的排空。使用默认设置,发布后宽限期为 75 秒,排空最多需要 80 秒,因此允许 `n` 分钟加 155 秒。当设置 `--defer-shutdown-max-min` 时,运行器在启动时打印此总和。579给您的主机停止超时至少三个部分的总和:您配置的 `n` 分钟、发布后宽限期和 [Shutdown timing](#shutdown-timing) 描述的排空。使用默认设置,发布后宽限期为 75 秒,排空最多需要 80 秒,因此允许 `n` 分钟加 155 秒。当设置 `--defer-shutdown-max-min` 时,运行器在启动时打印此总和。

580 580 

581如果停止超时在运行器完成前用完,主机会杀死运行器。它仍然持有的会话不会获得 `post-session` hook。运行器不会注销,控制平面会在几分钟内重新排队这些会话。如果您无法给停止超时该总和,请不设置 `--defer-shutdown-max-min`,以便运行器在第一个信号上排空。581如果停止超时时间在运行器完成之前用完,它仍持有的会话将不会运行 `post-session` hook。运行器不会注销,因此控制平面可能需要几分钟甚至更长时间才能重新排队这些会话。如果您无法为停止超时时间预留这一总和,请不要设置 `--defer-shutdown-max-min`,让运行器在收到第一个信号时就进行排空。

582 582 

583<h3 id="what-reaches-a-running-post-session-hook">583<h3 id="what-reaches-a-running-post-session-hook">

584 什么到达运行的 post-session 钩子584 什么到达运行的 post-session 钩子


720 720 

721* **运行器未出现在环境中**:确认主机可以通过 HTTPS 到达 `api.anthropic.com`,环境密钥是最新的,并且主机时钟与实际时间相差在五分钟以内;更大的时间偏差会导致身份验证失败。运行器在身份验证失败时会记录 `[runner:fatal]` 和拒绝原因。721* **运行器未出现在环境中**:确认主机可以通过 HTTPS 到达 `api.anthropic.com`,环境密钥是最新的,并且主机时钟与实际时间相差在五分钟以内;更大的时间偏差会导致身份验证失败。运行器在身份验证失败时会记录 `[runner:fatal]` 和拒绝原因。

722* **运行器在启动时退出,显示 `cannot create or write to base directory`**:运行器无法创建或写入 `--base-dir`,其默认值为 `/workspace`。修复目录的所有权或将 `--base-dir` 指向可写路径,如 [保持基础目录和容量在运行器之间相同](#keep-the-base-directory-and-capacity-identical-across-runners) 中所述。如果运行器改为记录 `[runner:fatal]` 说基础目录检查超时,则该目录位于挂起的 NFS 或 CSI 挂载上。检查挂载健康状况而不是权限。运行器在打开 `--log-file` 之前将这两个启动失败打印到 stderr,因此请在终端或您的平台的容器日志中查找它们,而不是日志文件。在 v2.1.225 之前,运行器在启动时不检查基础目录,此错误配置在拾取后失败会话。722* **运行器在启动时退出,显示 `cannot create or write to base directory`**:运行器无法创建或写入 `--base-dir`,其默认值为 `/workspace`。修复目录的所有权或将 `--base-dir` 指向可写路径,如 [保持基础目录和容量在运行器之间相同](#keep-the-base-directory-and-capacity-identical-across-runners) 中所述。如果运行器改为记录 `[runner:fatal]` 说基础目录检查超时,则该目录位于挂起的 NFS 或 CSI 挂载上。检查挂载健康状况而不是权限。运行器在打开 `--log-file` 之前将这两个启动失败打印到 stderr,因此请在终端或您的平台的容器日志中查找它们,而不是日志文件。在 v2.1.225 之前,运行器在启动时不检查基础目录,此错误配置在拾取后失败会话。

723* **运行器在启动时退出,显示 `RegisterRunner failed:` 和 TLS 证书错误**:例如,错误可能是 `self signed certificate in certificate chain`。运行器不信任其收到的证书背后的证书颁发机构(CA),在执行 TLS 检查的代理之后就会发生这种情况。在运行器的环境中将 [`NODE_EXTRA_CA_CERTS`](/docs/zh-CN/network-config#custom-ca-certificates) 设置为包含代理根 CA 的 PEM 文件。

724 

725 您无需再为会话设置它,会话会继承它。Git 不读取它:对于通过该代理进行的克隆,还需设置 [`GIT_SSL_CAINFO`](#trust-a-private-certificate-authority-with-anthropic-managed-git)。

726* **编排器记录带有 TLS 证书错误的 `poll failed:` 并不断重试**:编排器不信任其收到的证书背后的 CA,在执行 TLS 检查的代理之后就会发生这种情况。在编排器的环境中将 [`NODE_EXTRA_CA_CERTS`](/docs/zh-CN/network-config#custom-ca-certificates) 设置为包含代理根 CA 的 PEM 文件。同时也为您的 `spawn-runner` hook 启动的运行器设置它。

727 

728 例如,一行可能以 `poll failed: self signed certificate in certificate chain — retrying in 1s` 结尾,冒号和破折号之间是 TLS 库给出的文字。要确认修复,请检查编排器的 [`/healthz`](/docs/zh-CN/self-hosted-environments-reference#health-endpoint) 正文中 `connected` 是否为 `true`。

723* **会话保持排队**:每个在线运行器可能被锁定到不同的所有者。检查每个运行器的 `claude_code_self_hosted_runner_locked_account` [指标](/docs/zh-CN/self-hosted-environments-reference#prometheus-metrics) 或其 `[runner:health]` 日志行的 `locked_account` 字段,以查看谁持有它。两者仅在运行器被颁发携带 `act.email` 声明的会话令牌后才显示所有者的电子邮件,Claude Tag 代理的会话永远不会这样做。没有该声明,运行器不发出 `locked_account` 系列,并记录 `locked_account=yes`,这告诉您运行器被锁定但不知道是哪个所有者。添加副本,或等待现有运行器耗尽并重新启动。如果环境使用按需运行器,请改为检查编排器;请参阅 [按需运行器](/docs/zh-CN/self-hosted-environments-configuration#on-demand-runners)。729* **会话保持排队**:每个在线运行器可能被锁定到不同的所有者。检查每个运行器的 `claude_code_self_hosted_runner_locked_account` [指标](/docs/zh-CN/self-hosted-environments-reference#prometheus-metrics) 或其 `[runner:health]` 日志行的 `locked_account` 字段,以查看谁持有它。两者仅在运行器被颁发携带 `act.email` 声明的会话令牌后才显示所有者的电子邮件,Claude Tag 代理的会话永远不会这样做。没有该声明,运行器不发出 `locked_account` 系列,并记录 `locked_account=yes`,这告诉您运行器被锁定但不知道是哪个所有者。添加副本,或等待现有运行器耗尽并重新启动。如果环境使用按需运行器,请改为检查编排器;请参阅 [按需运行器](/docs/zh-CN/self-hosted-environments-configuration#on-demand-runners)。

724* **会话在拾取后立即失败**:在 claude.ai/code 中打开会话以查看错误。最常见的原因是运行器镜像中缺少 [git 凭据](#configure-git) 和未安装的构建工具。对于使用 `--use-anthropic-git-proxy` 启动的运行器,请参阅 [当会话在使用 git 代理的运行器上无法启动时](#when-anthropic-doesnt-serve-a-session)。不可写的基础目录会在启动时停止运行器,而不是失败会话。请参阅此列表中的 **运行器在启动时退出,显示 `cannot create or write to base directory`** 条目。730* **会话在拾取后立即失败**:在 claude.ai/code 中打开会话以查看错误。最常见的原因是运行器镜像中缺少 [git 凭据](#configure-git) 和未安装的构建工具。对于使用 `--use-anthropic-git-proxy` 启动的运行器,请参阅 [当会话在使用 git 代理的运行器上无法启动时](#when-anthropic-doesnt-serve-a-session)。不可写的基础目录会在启动时停止运行器,而不是失败会话。请参阅此列表中的 **运行器在启动时退出,显示 `cannot create or write to base directory`** 条目。

725* **在设置了 `--use-anthropic-git-proxy` 的运行器上会话无法启动**:在运行器的日志中查找 `access denied by the git proxy`,或查找指明包含 `/git_proxy/` 的 `api.anthropic.com` 地址的 git 错误。要判断 Anthropic 是否提供了该会话并修复原因,请参阅 [当会话在使用 git 代理的运行器上无法启动时](#when-anthropic-doesnt-serve-a-session)。731* **在设置了 `--use-anthropic-git-proxy` 的运行器上会话无法启动**:在运行器的日志中查找 `access denied by the git proxy`,或查找指明包含 `/git_proxy/` 的 `api.anthropic.com` 地址的 git 错误。要判断 Anthropic 是否提供了该会话并修复原因,请参阅 [当会话在使用 git 代理的运行器上无法启动时](#when-anthropic-doesnt-serve-a-session)。


741 在 v2.1.274 之前,运行器在几次尝试后停止重试失败的获取,并等待下一个计划的获取。失败的轮次不会触发获取,因此每个轮次都会失败,显示 401,直到下一个计划的获取。747 在 v2.1.274 之前,运行器在几次尝试后停止重试失败的获取,并等待下一个计划的获取。失败的轮次不会触发获取,因此每个轮次都会失败,显示 401,直到下一个计划的获取。

742* **Pod 在耗尽中途被杀死**:将 `terminationGracePeriodSeconds` 提高到至少运行器在启动时记录的值。请参阅 [关闭时序](#shutdown-timing)。748* **Pod 在耗尽中途被杀死**:将 `terminationGracePeriodSeconds` 提高到至少运行器在启动时记录的值。请参阅 [关闭时序](#shutdown-timing)。

743 749 

744初始化日志后,运行器将其生命周期日志(包括 `[runner:fatal]` 行)写入 stdout,将调试输出写入 stderr,全部作为纯文本行而不是 JSON。上述故障排除条目中描述的启动失败在该点之前打印到 stderr。使用 `--log-file` 捕获两个流,这也让 `self-hosted-runner doctor` 能够跟踪它们,或使用您的平台的日志收集。750初始化日志后,运行器将其生命周期日志(包括 `[runner:fatal]` 行)写入 stdout,将调试输出写入 stderr,全部作为纯文本行而不是 JSON。上述故障排除条目中描述的基础目录失败在该点之前打印到 stderr。使用 `--log-file` 捕获两个流,这也让 `self-hosted-runner doctor` 能够跟踪它们,或使用您的平台的日志收集。

745 751 

746每个会话的子进程写入单独的调试日志。失败时,运行器在 claude.ai/code 中将日志的尾部与会话一起显示。除非您使用 [`--remove-session-state`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动了运行器,否则它也会在磁盘上保留失败会话的日志,并在运行器日志中打印其路径。752每个会话的子进程写入单独的调试日志。失败时,运行器在 claude.ai/code 中将日志的尾部与会话一起显示。除非您使用 [`--remove-session-state`](/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动了运行器,否则它也会在磁盘上保留失败会话的日志,并在运行器日志中打印其路径。

747 753 

Details

25claude.ai 端需要:25claude.ai 端需要:

26 26 

27* **Allow self-hosted environments** 由[所有者](/docs/zh-CN/cloud-environments#organization-shared-environments)在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上启用;在启用之前,**New** 按钮不会出现。如果您不拥有该角色,拥有该角色的人可以创建环境并将其密钥交给您;本页面上的运行器和终端步骤不需要 claude.ai 角色,当步骤在管理 UI 中检查状态时,运行器自己的日志行会给您相同的信号。27* **Allow self-hosted environments** 由[所有者](/docs/zh-CN/cloud-environments#organization-shared-environments)在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上启用;在启用之前,**New** 按钮不会出现。如果您不拥有该角色,拥有该角色的人可以创建环境并将其密钥交给您;本页面上的运行器和终端步骤不需要 claude.ai 角色,当步骤在管理 UI 中检查状态时,运行器自己的日志行会给您相同的信号。

28* 您的组织的 [GitHub 连接](/docs/zh-CN/claude-code-on-the-web#github-authentication-options),以便开发人员在启动会话时可以选择存储库。28* 由所有者启用的 [GitHub 连接器](https://claude.ai/admin-settings/connectors),以及每位开发人员自己的 [GitHub 连接](/docs/zh-CN/web-quickstart#connect-github),以便他们在启动会话时可以选择 github.com 仓库。

29 29 

30<h3 id="host-and-network">30<h3 id="host-and-network">

31 主机和网络31 主机和网络


34运行器主机需要:34运行器主机需要:

35 35 

36* 一个 Linux 或 macOS 主机或容器,具有到 `api.anthropic.com` 的出站 HTTPS、到 `claude.ai` 和下面安装步骤重定向到的下载主机的出站 HTTPS,以及到您的 git 主机的出站 HTTPS 用于克隆;[网络要求表](/docs/zh-CN/self-hosted-environments-deploy#network-requirements)有完整列表。Windows 不支持作为运行器主机;改为在 Linux 容器中运行运行器。开发人员工作站不受影响,因为会话从浏览器中的 claude.ai 启动。36* 一个 Linux 或 macOS 主机或容器,具有到 `api.anthropic.com` 的出站 HTTPS、到 `claude.ai` 和下面安装步骤重定向到的下载主机的出站 HTTPS,以及到您的 git 主机的出站 HTTPS 用于克隆;[网络要求表](/docs/zh-CN/self-hosted-environments-deploy#network-requirements)有完整列表。Windows 不支持作为运行器主机;改为在 Linux 容器中运行运行器。开发人员工作站不受影响,因为会话从浏览器中的 claude.ai 启动。

37* 一个用于测试会话的仓库:可以是公共仓库,也可以是此主机已能通过其 HTTPS URL 克隆且无需提供凭据的仓库。37* 一个用于测试会话的仓库:可以是公共仓库,也可以是此主机已能通过其 HTTPS URL 克隆且无需提供凭据的仓库。仅有 SSH 密钥是不够的,因为运行器克隆的是仓库的 `https://` URL。要改为通过 SSH 克隆,请参阅[为私有网络重写 git URL](/docs/zh-CN/self-hosted-environments-deploy#rewrite-git-urls-for-private-networks)。

38* 与实时同步的时钟,例如使用 NTP。当时钟偏离超过五分钟时,身份验证失败;请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。38* 与实时同步的时钟,例如使用 NTP。当时钟偏离超过五分钟时,身份验证失败;请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。

39 39 

40<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


105 105 

106 选择一个基目录,将下面运行器命令中的 `<writable-dir>` 替换为运行器可以写入或创建的绝对路径。运行器在启动时创建目录,然后检查存储库并在其下创建每个会话的目录。没有 `--base-dir`,它使用 `/workspace`,这仅在该目录已存在且可写或您以 root 身份启动运行器时有效。106 选择一个基目录,将下面运行器命令中的 `<writable-dir>` 替换为运行器可以写入或创建的绝对路径。运行器在启动时创建目录,然后检查存储库并在其下创建每个会话的目录。没有 `--base-dir`,它使用 `/workspace`,这仅在该目录已存在且可写或您以 root 身份启动运行器时有效。

107 107 

108 如果运行器无法创建或写入路径,它在启动时以命名目录的错误退出,而不是注册。请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。108 <Warning>

109 请使用专供运行器使用的目录,而不是您的主目录或存放您自己克隆的目录。运行器会将它在 `<writable-dir>/<repo-owner>/<repo>` 处找到的任何内容视为它自己的克隆,并可能重置它以及覆盖或删除其中的文件。

110 </Warning>

111 

112 如果运行器无法创建或写入基目录,它会在启动时退出并显示指明该目录的错误,而不是进行注册。请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。

109 113 

110 然后使用 `--environment-secret-file` 和 `--base-dir` 启动运行器:114 然后使用 `--environment-secret-file` 和 `--base-dir` 启动运行器:

111 115 


113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'117 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

114 ```118 ```

115 119 

116 运行器向您的环境注册后会记录 `Registered: runner_id=<runner-id>`,然后开始轮询工作。如果运行器之后退出,请手动重新启动它。有关何时会发生这种情况,请参阅[如果运行器退出](#if-the-runner-exits)。120 运行器向您的环境注册后会记录 `Registered: runner_id=<runner-id>`,然后开始轮询工作。使用此命令启动时,运行器按设计会在服务完一个会话后退出,而不是在每个轮次之后退出。要服务更多会话,请在每次运行器退出时再次启动它。有关何时会发生这种情况以及运行器会记录什么,请参阅[如果运行器退出](#if-the-runner-exits)。

117 </Step>121 </Step>

118 122 

119 <Step title="验证运行器出现">123 <Step title="验证运行器出现">


121 </Step>125 </Step>

122 126 

123 <Step title="将会话路由到环境">127 <Step title="将会话路由到环境">

124 <span id="route-a-session" />在 claude.ai/code 启动会话,并从环境选择器中选择您的环境,其中自托管环境与 Anthropic 托管的环境一起出现。对于仓库,请选择[前提条件](#host-and-network)中的仓库:公共仓库,或此主机已可以克隆的仓库。运行器使用主机已有的任何 git 凭据进行克隆。128 <span id="route-a-session" />在 claude.ai/code 启动会话,并从环境选择器中选择您的环境,其中自托管环境与 Anthropic 托管的环境一起出现。对于仓库,请选择[前提条件](#host-and-network)中的仓库:公共仓库,或此主机已可以通过其 HTTPS URL 克隆且不会被要求提供凭据的仓库。

125 129 

126 下一个可用的运行器拾取排队的会话并记录 `Picked up session <session-id>` 以及其活跃计数和容量,因此您可以从运行器自己的输出中确认哪个主机接收了会话。在 [claude.ai/code](https://claude.ai/code) 观看会话工作并阅读 Claude 的回复。130 下一个可用的运行器拾取排队的会话并记录 `Picked up session <session-id>` 以及其活跃计数和容量,因此您可以从运行器自己的输出中确认哪个主机接收了会话。在 [claude.ai/code](https://claude.ai/code) 观看会话工作并阅读 Claude 的回复。

127 131 

128 如果会话没有开始工作,请对照您看到的情况:132 <span id="session-doesnt-start" />如果会话没有开始工作,请对照您看到的情况:

129 133 

130 * **会话保持排队状态**:请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。134 * **会话保持排队状态**:请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy#troubleshooting)。

131 * **会话因 git 错误而无法启动**:错误会显示在会话和运行器的日志中。如果错误包含 git 的 `could not read Username for`,后跟您的 git 主机的 URL,则说明运行器没有该主机的 HTTPS 凭据。请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy#configure-git),其中还介绍了生产环境中私有仓库的凭据选项。135 * **会话因 git 错误而无法启动**:如果错误包含 git 的 `could not read Username for`,后跟您的 git 主机的 URL,则说明运行器没有该主机的 HTTPS 凭据。

136 * **提供 HTTPS 凭据**:请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy#configure-git)

137 * **改为通过 SSH 克隆**:如果运行器主机已有 SSH 密钥,请参阅[为私有网络重写 git URL](/docs/zh-CN/self-hosted-environments-deploy#rewrite-git-urls-for-private-networks)

132 </Step>138 </Step>

133</Steps>139</Steps>

134 140 


136 如果运行器退出142 如果运行器退出

137</h3>143</h3>

138 144 

139如果运行器在本快速入门期间退出,请使用相同的命令再次启动它。运行器可能会自行退出:145如果运行器在本快速入门期间退出,请再次启动它。运行器可能会自行退出:

140 146 

141* **会话已完成**:日志显示 `[runner:exit] account workload drained — exiting`。运行器在其活跃会话完成后按设计退出。请参阅[运行器生命周期](/docs/zh-CN/self-hosted-environments#runner-lifecycle)。147* **没有仍在运行的内容**:日志显示 `[runner:exit] account workload drained — exiting`。运行器在不再运行任何会话时会[按设计退出](/docs/zh-CN/self-hosted-environments#runner-lifecycle),例如:

148 * **您归档或删除了会话**:再次启动运行器

149 * **会话启动失败**:[修复原因](#session-doesnt-start),然后再次启动运行器

142* **失去联系**:日志显示一行包含 `runner record gone server-side` 或 `poll auth failed` 的 `[runner:fatal]`。如果运行器与 Anthropic 失去联系一段时间(例如因为主机休眠),它可能会在下次连接到 Anthropic 时退出。150* **失去联系**:日志显示一行包含 `runner record gone server-side` 或 `poll auth failed` 的 `[runner:fatal]`。如果运行器与 Anthropic 失去联系一段时间(例如因为主机休眠),它可能会在下次连接到 Anthropic 时退出。

143 151 

144一个轮次结束并不会结束您的测试会话。第一轮之后,会话仍处于连接状态,运行器也仍在运行,因此您可以[向会话发送后续消息](#send-a-follow-up-message-to-a-running-session),而无需先重新启动运行器。152一个轮次结束并不会结束您的测试会话。第一轮之后,会话仍处于连接状态,运行器也仍在运行,因此您可以[向会话发送后续消息](#send-a-follow-up-message-to-a-running-session),而无需先重新启动运行器。

Details

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 未设置 | 在绝对 Unix 时间戳(以秒为单位)处退休运行器,用于在已知时间杀死运行器的基础设施;[运行器生命周期](/docs/zh-CN/self-hosted-environments#runner-lifecycle)描述释放序列以及如何调整边距。2001 年之前或 5138 年之后的值被标志拒绝,被环境变量忽略。 |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 未设置 | 在绝对 Unix 时间戳(以秒为单位)处退休运行器,用于在已知时间杀死运行器的基础设施;[运行器生命周期](/docs/zh-CN/self-hosted-environments#runner-lifecycle)描述释放序列以及如何调整边距。2001 年之前或 5138 年之后的值被标志拒绝,被环境变量忽略。 |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 控制平面随会话发送的[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器规则列表中,哪些可以到达该会话:`all`、`no-allow` 或 `none`。请参阅[自动模式规则列表](#auto-mode-rule-lists)了解每个值应用的内容。无效值会使运行器在启动时停止。需要 Claude Code v2.1.295 或更高版本。 |55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 控制平面随会话发送的[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)分类器规则列表中,哪些可以到达该会话:`all`、`no-allow` 或 `none`。请参阅[自动模式规则列表](#auto-mode-rule-lists)了解每个值应用的内容。无效值会使运行器在启动时停止。需要 Claude Code v2.1.295 或更高版本。 |

56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 会话结束后等待 Claude 进程干净退出的时间,然后强制杀死它。如果子进程自己的 `SessionEnd` 钩子需要更多时间,请提高该值。 |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 会话结束后等待 Claude 进程干净退出的时间,然后强制杀死它。如果子进程自己的 `SessionEnd` 钩子需要更多时间,请提高该值。 |

57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 如果子进程在生成后 N 分钟内未发出已完成初始化的信号,则释放会话槽。克隆发生在生成之前,因此克隆时间不计入。由子进程在[活动频道](/docs/zh-CN/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached)上的初始化信号清除,而不是由普通输出清除,之后 `--release-idle-session-min` 接管。`0` 禁用。 |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 如果子进程在 N 分钟内未在[活动频道](/docs/zh-CN/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached)上发出已完成初始化的信号,则释放会话槽。这 N 分钟从生成(克隆之后)开始计时,并在子进程完成初始化或报告其状态之前每发出一条 `user` 或 `assistant` 消息时重新开始计时。在 v2.1.299 之前,此超时在会话出现第一条此类消息时即不再适用。有关初始化信号之后的释放,请参阅 `--release-idle-session-min`。`0` 禁用。 |

58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 开启 | 为每个会话的存储库路径播种持久化信任,以便遵守存储库提交的 `permissions.allow` 和 `additionalDirectories`。设置 `false` 以删除存储库提交的权限授予,并在主机配置的 `settings.json` 中配置允许规则;无论如何,存储库提交的 `sandbox.*` 设置仍然适用,这就是为什么[存储库设置保护](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment)无论此标志如何都扫描它们。 |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 开启 | 为每个会话的存储库路径播种持久化信任,以便遵守存储库提交的 `permissions.allow` 和 `additionalDirectories`。设置 `false` 以删除存储库提交的权限授予,并在主机配置的 `settings.json` 中配置允许规则;无论如何,存储库提交的 `sandbox.*` 设置仍然适用,这就是为什么[存储库设置保护](/docs/zh-CN/self-hosted-environments-deploy#harden-your-deployment)无论此标志如何都扫描它们。 |

59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 关闭 | 通过 [Anthropic git 代理](/docs/zh-CN/self-hosted-environments-deploy#use-the-anthropic-git-proxy)而不是客户管理的 git 身份验证克隆 github.com 上的仓库。需要 `--capacity 1` 和 git 2.32 或更高版本;运行器否则拒绝启动。取代重写标志。 |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 关闭 | 通过 [Anthropic git 代理](/docs/zh-CN/self-hosted-environments-deploy#use-the-anthropic-git-proxy)而不是客户管理的 git 身份验证克隆 github.com 上的仓库。需要 `--capacity 1` 和 git 2.32 或更高版本;运行器否则拒绝启动。取代重写标志。 |

60 60 


160 160 

161在自定义探针中使用 `last_poll_age_ms` 作为活跃信号;无限增长的值表示轮询循环卡住。`last_poll_at` 和 `last_poll_age_ms` 都是 `null`,直到第一次轮询完成。161在自定义探针中使用 `last_poll_age_ms` 作为活跃信号;无限增长的值表示轮询循环卡住。`last_poll_at` 和 `last_poll_age_ms` 都是 `null`,直到第一次轮询完成。

162 162 

163编排器在其健康端口上提供自己的 `/healthz`。其端点始终返回 `200`,正文携带报告最近一次轮询是否成功的 `connected` 字段,加上 `queue_counts` 中的每个状态生成队列计数。在自定义探针中使用 `connected` 而不是状态代码来控制就绪和警报。163编排器自己的 `/healthz`(位于其健康端口上)始终返回 `200`。正文携带报告最近一次轮询是否成功的 `connected` 字段,加上 `queue_counts` 中的每个状态生成队列计数。要了解 `connected` 为何是 `false`,请读取顶层 `last_error` 字段,每次成功轮询都会将其重置为 `null`。使用 `connected` 而不是状态代码来控制就绪和警报。

164 164 

165当[SCM 连接器](#scm-connector-flags)被配置时,编排器的 `/healthz` 正文也携带 `scm_connector_connected` 和一个 `scm_connector` 对象,包含 `connected`、`last_connected_at`、`last_error`、`reconnects` 和 `requests_forwarded`。当未设置 `--scm-connector-host` 时,两个字段都是 `null`。165当[SCM 连接器](#scm-connector-flags)被配置时,编排器的 `/healthz` 正文也携带 `scm_connector_connected` 和一个 `scm_connector` 对象,包含 `connected`、`last_connected_at`、`last_error`、`reconnects` 和 `requests_forwarded`。当未设置 `--scm-connector-host` 时,两个字段都是 `null`。

166 166 

settings-reference.md +258 −204

Details

692| [`gcpAuthRefresh`](#gcpauthrefresh) | 使用您自己的命令刷新 [Google Cloud 凭证](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration) | 身份验证和提供商 | Any file |692| [`gcpAuthRefresh`](#gcpauthrefresh) | 使用您自己的命令刷新 [Google Cloud 凭证](/docs/zh-CN/google-vertex-ai#advanced-credential-configuration) | 身份验证和提供商 | Any file |

693| [`hooks`](#hooks) | 在 Claude Code 生命周期中的点运行您自己的命令作为 [hooks](/docs/zh-CN/hooks) | Hooks 和自动化 | Any file |693| [`hooks`](#hooks) | 在 Claude Code 生命周期中的点运行您自己的命令作为 [hooks](/docs/zh-CN/hooks) | Hooks 和自动化 | Any file |

694| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | 限制[HTTP hooks](/docs/zh-CN/hooks)可以在标头中放入的环境变量 | Hooks 和自动化 | Any file |694| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | 限制[HTTP hooks](/docs/zh-CN/hooks)可以在标头中放入的环境变量 | Hooks 和自动化 | Any file |

695| [`idleCompaction`](#idlecompaction) | 阻止 Claude Code 在您的终端会话空闲时压缩较长的对话 | 记忆和上下文 | Any file |

695| [`includeCoAuthoredBy`](#includecoauthoredby) | 已弃用;使用 `attribution` 隐藏或更改提交和 PR 属性 | Git 和属性 | Any file |696| [`includeCoAuthoredBy`](#includecoauthoredby) | 已弃用;使用 `attribution` 隐藏或更改提交和 PR 属性 | Git 和属性 | Any file |

696| [`includeGitInstructions`](#includegitinstructions) | 从 Claude 的上下文中删除内置的提交和 PR 指令 | Git 和属性 | Any file |697| [`includeGitInstructions`](#includegitinstructions) | 从 Claude 的上下文中删除内置的提交和 PR 指令 | Git 和属性 | Any file |

697| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | 当 Claude 在等待您时获得[推送通知](/docs/zh-CN/remote-control#mobile-push-notifications) | 远程、桌面和通知 | Any file |698| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | 当 Claude 在等待您时获得[推送通知](/docs/zh-CN/remote-control#mobile-push-notifications) | 远程、桌面和通知 | Any file |


837| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | 让 WSL 从 Windows 策略链读取[托管设置](/docs/zh-CN/managed-settings) | 企业和托管设置 | Managed |838| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | 让 WSL 从 Windows 策略链读取[托管设置](/docs/zh-CN/managed-settings) | 企业和托管设置 | Managed |

838 839 

839<h2 id="model-and-responses">840<h2 id="model-and-responses">

840 模型和响应841 模型与回复

841</h2>842</h2>

842 843 

843选择 Claude Code 使用的模型以及它如何响应。关于这些设置如何与 `/model` 命令和环境变量交互,请参阅[模型配置](/docs/zh-CN/model-config)。844选择 Claude Code 使用哪些模型以及它如何回复。关于这些设置如何与 `/model` 命令和环境变量相互作用,请参阅[模型配置](/docs/zh-CN/model-config)。

844 845 

845<h3 id="advisormodel">846<h3 id="advisormodel">

846 `advisorModel`847 `advisorModel`

847</h3>848</h3>

848 849 

849选择当 Claude 调用服务器端[顾问工具](/docs/zh-CN/advisor)时哪个模型来回答。取消设置它以关闭顾问。顾问的能力必须至少与您的主模型一样强。请参阅[选择顾问模型](/docs/zh-CN/advisor#choose-an-advisor-model)了解接受的配对以及选择未被接受的配对时会发生什么。850选择当 Claude 调用服务器端 [advisor 工具](/docs/zh-CN/advisor)时由哪个模型作答。取消设置即可关闭 advisor。advisor 的能力必须至少与您的主模型相当。关于可接受的搭配以及选择不可接受的模型时会发生什么,请参阅[选择 advisor 模型](/docs/zh-CN/advisor#choose-an-advisor-model)。

850 851 

851您通常不会手动编辑此键。运行 `/advisor` 打开一个选择器,显示当前选择、可以提供建议的模型和**无顾问**。Claude Code 将您的选择保存到 `~/.claude/settings.json` 中的此键。如果您从[远程控制](/docs/zh-CN/remote-control)客户端或在附加到远程工作者的会话中选择,该选择仅适用于该会话,不会更改此键。852通常无需手动编辑此键。运行 `/advisor` 会打开一个选择器,其中显示当前选择、可担任 advisor 的模型以及 **No advisor**。Claude Code 会将您的选择保存到 `~/.claude/settings.json` 中的此键。如果您在 [Remote Control](/docs/zh-CN/remote-control) 客户端中或在连接到远程 worker 的会话中进行选择,该选择仅适用于该会话,不会更改此键。

852 853 

853如果您的账户需要[使用额度同意](/docs/zh-CN/advisor#fable-advisor-and-usage-credits),请先通过运行 `/model fable` 来接受它。在您这样做之前,在 `/advisor` 中选择 Fable 不会保存任何内容,Claude Code 会告诉您先运行 `/model fable`。854如果您的账户需要[使用额度同意](/docs/zh-CN/advisor#fable-advisor-and-usage-credits),请先运行 `/model fable` 接受该同意。在此之前,在 `/advisor` 中选择 Fable 不会保存任何内容,Claude Code 会提示您先运行 `/model fable`。

854 855 

855* **Scope**: [`Any file`](#scopes)856* **作用域**:[`Any file`](#scopes)

856* **Type**: string,其中一个别名 `"fable"`、`"opus"` 或 `"sonnet"`,它们解析为 Claude Code 当前默认版本的该模型系列,或完整模型 ID,如 `"claude-opus-5-5"`857* **类型**:字符串,为别名 `"fable"`、`"opus"` 或 `"sonnet"` 之一(解析为 Claude Code 当前该模型系列的默认版本),或完整的模型 ID,例如 `"claude-opus-5-5"`

857* **Default**: 未设置,因此顾问已关闭858* **默认值**:未设置,因此 advisor 处于关闭状态

858* **Per-session overrides**: `--advisor` 对此键优先一个会话。[`CLAUDE_CODE_DISABLE_ADVISOR_TOOL`](/docs/zh-CN/env-vars)关闭顾问,此键无法将其重新打开859* **单会话覆盖**:`--advisor` 在单个会话中优先于此键。[`CLAUDE_CODE_DISABLE_ADVISOR_TOOL`](/docs/zh-CN/env-vars) 会关闭 advisor,且此键无法将其重新打开

859 860 

860```json settings.json theme={null}861```json settings.json theme={null}

861{862{


863}864}

864```865```

865 866 

866该键对顾问[不可用](/docs/zh-CN/advisor#requirements)的提供商(如 Amazon Bedrock 和 AWS 上的 Claude Platform)没有影响。`"fable"` 需要[Fable 访问权限](/docs/zh-CN/advisor#choose-an-advisor-model)。867在 advisor [不可用](/docs/zh-CN/advisor#requirements)的提供商(例如 Amazon Bedrock 和 Claude Platform on AWS)上,此键不起作用。`"fable"` 需要 [Fable 访问权限](/docs/zh-CN/advisor#choose-an-advisor-model)。

867 868 

868<h3 id="alwaysthinkingenabled">869<h3 id="alwaysthinkingenabled">

869 `alwaysThinkingEnabled`870 `alwaysThinkingEnabled`

870</h3>871</h3>

871 872 

872通过将其设置为 `false` 来为每个会话关闭[扩展思考](/docs/zh-CN/model-config#extended-thinking)。默认情况下思考是打开的,所以 `true` 不会改变任何内容。大多数人通过 `/config` 而不是编辑文件来设置这个。873将此项设置为 `false` 可在每个会话中关闭[扩展思考](/docs/zh-CN/model-config#extended-thinking)。思考默认处于开启状态,因此 `true` 不会改变任何内容。大多数人通过 `/config` 而非编辑文件来设置此项。

873 874 

874在总是思考的模型上,如 Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 模型,`false` 没有效果。在[第三方提供商](/docs/zh-CN/third-party-integrations)上,Claude Code 省略 `thinking` 参数而不是关闭思考,因此自适应推理模型可能仍然会思考。在 Anthropic API 上关闭思考时,对于 Claude Code 已知[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(如 Opus 5),Claude Code 会发送 effort `high` 而不是更高级别。875在始终进行思考的模型上(例如 Opus 5.5、Sonnet 5.5、Haiku 5.5 以及 Fable 模型),`false` 不起作用。在[第三方提供商](/docs/zh-CN/third-party-integrations)上,Claude Code 会省略 `thinking` 参数而不是关闭思考,因此自适应推理模型仍可能进行思考。在 Anthropic API 上关闭思考时,对于 Claude Code 已知[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(例如 Opus 5),Claude Code 会发送 effort `high` 而不是更高的级别。

875 876 

876* **Scope**: [`Any file`](#scopes)877* **作用域**:[`Any file`](#scopes)

877* **Type**: Boolean878* **类型**:布尔值

878 * `true`: 无效果;思考已经打开879 * `true`:不起作用;思考已处于开启状态

879 * `false`: Claude Code 为每个会话关闭扩展思考880 * `false`:Claude Code 在每个会话中关闭扩展思考

880* **Default**: 未设置,因此对于支持它的模型,思考是打开的881* **默认值**:未设置,因此对于支持思考的模型,思考处于开启状态

881* **Per-session overrides**: [`MAX_THINKING_TOKENS`](/docs/zh-CN/env-vars)对此键优先一个会话:`0` 关闭思考,在与 `false` 相同的模型和提供商限制下,正值打开思考,即使此键是 `false`。在自适应推理模型上,数字本身被忽略882* **单会话覆盖**:[`MAX_THINKING_TOKENS`](/docs/zh-CN/env-vars) 在单个会话中优先于此键:`0` 会关闭思考(受与 `false` 相同的模型和提供商限制),正值则会开启思考,即使此键为 `false`。在自适应推理模型上,该数值本身会被忽略

882 883 

883```json settings.json theme={null}884```json settings.json theme={null}

884{885{


890 `availableModels`891 `availableModels`

891</h3>892</h3>

892 893 

893限制人们可以为主会话、[subagents](/docs/zh-CN/sub-agents)、[skills](/docs/zh-CN/skills) 和[顾问](/docs/zh-CN/advisor)选择的模型。托管列表限制 `/model`、`--model` 和开发人员自己文件中的 `model` 键;列表外的模型无法选择。使用默认前缀匹配,这不会单独触及默认选项;将其与[`enforceAvailableModels`](#enforceavailablemodels)配对以实现这一点。894限制用户可以为主会话、[子代理](/docs/zh-CN/sub-agents)、[skill](/docs/zh-CN/skills) 和 [advisor](/docs/zh-CN/advisor) 选择哪些模型。托管列表会约束 `/model`、`--model` 以及开发者自己文件中的 `model` 键;列表之外的模型无法被选择。在默认的前缀匹配下,此项本身不会影响 Default 选项;如需影响,请将其与 [`enforceAvailableModels`](#enforceavailablemodels) 搭配使用。

894 895 

895* **Scope**: [`Any file`](#scopes)。在托管设置中部署它以为组织强制执行。896* **作用域**:[`Any file`](#scopes)。将其部署在托管设置中,可在组织范围内强制执行。

896* **Type**: 模型别名或 ID 的数组897* **类型**:模型别名或 ID 的数组

897* **Default**: 未设置,因此每个模型都可用898* **默认值**:未设置,因此所有模型均可用

898 899 

899此示例仅允许人们选择 Sonnet 和 Haiku 模型:900此示例仅允许用户选择 Sonnet 和 Haiku 模型:

900 901 

901```json settings.json theme={null}902```json settings.json theme={null}

902{903{


904}905}

905```906```

906 907 

907模型 ID 条目(如 `"claude-opus-5"`)也允许扩展它的更高版本,如 Opus 5.5。要阻止其中一个版本,请使用[`deniedModels`](#deniedmodels)。要使每个模型 ID 条目仅允许它命名的版本,请使用[`availableModelsMatch`](#availablemodelsmatch)。请参阅[限制模型选择](/docs/zh-CN/model-config#restrict-model-selection)。908诸如 `"claude-opus-5"` 之类的模型 ID 条目也会允许在其基础上扩展的后续版本,例如 Opus 5.5。要阻止其中某个版本,请使用 [`deniedModels`](#deniedmodels)。要使每个模型 ID 条目仅允许其所指定的版本,请使用 [`availableModelsMatch`](#availablemodelsmatch)。请参阅[限制模型选择](/docs/zh-CN/model-config#restrict-model-selection)。

908 909 

909<h3 id="availablemodelsmatch">910<h3 id="availablemodelsmatch">

910 `availableModelsMatch`911 `availableModelsMatch`

911</h3>912</h3>

912 913 

913选择[`availableModels`](#availablemodels)条目如何匹配模型 ID。默认情况下,模型 ID 条目也允许扩展它的更高版本,因此 `"claude-opus-5"` 允许 Opus 5.5。使用 `"exact"`,每个模型 ID 条目仅允许它命名的版本,因此该模型的更高版本保持阻止状态,直到您列出它。需要 Claude Code v2.1.283 或更高版本。914选择 [`availableModels`](#availablemodels) 条目如何匹配模型 ID。默认情况下,模型 ID 条目也会允许在其基础上扩展的后续版本,因此 `"claude-opus-5"` 会允许 Opus 5.5。使用 `"exact"` 时,每个模型 ID 条目仅允许其所指定的版本,因此该模型的较新版本在您将其列出之前会一直被阻止。需要 Claude Code v2.1.283 或更高版本。

914 915 

915* **Scope**: [`Managed`](#scopes)。Claude Code 在用户、项目和本地设置以及 `--settings` 中忽略该键,并显示警告916* **作用域**:[`Managed`](#scopes)。Claude Code 会忽略用户、项目和本地设置以及 `--settings` 中的此键,并给出警告

916* **Type**: string,其中一个:917* **类型**:字符串,取值之一:

917 * `"prefix"`: 模型 ID 条目允许其版本和任何用另一个段扩展它的模型 ID918 * `"prefix"`:模型 ID 条目允许其版本以及在其基础上再扩展一个段的任何模型 ID

918 * `"exact"`: 模型 ID 条目仅允许它命名的版本,包括该版本的日期 ID,因此 `"claude-opus-5"` 允许 Opus 5 但不允许 `claude-opus-5-5`。系列别名如 `"opus"` 仍然允许整个系列,`best`、`opusplan` 和 `default` 条目被忽略919 * `"exact"`:模型 ID 条目仅允许其所指定的版本(包括该版本带日期的 ID),因此 `"claude-opus-5"` 允许 Opus 5,但不允许 `claude-opus-5-5`。诸如 `"opus"` 之类的系列别名仍会允许整个系列,而 `best`、`opusplan` 和 `default` 条目会被忽略

919* **Default**: `"prefix"`920* **默认值**:`"prefix"`

920 921 

921此示例允许 Opus 5 和 Sonnet 5,不允许任何更高版本:922此示例允许 Opus 5 和 Sonnet 5,但不允许二者的任何后续版本:

922 923 

923```json managed-settings.json theme={null}924```json managed-settings.json theme={null}

924{925{


927}928}

928```929```

929 930 

930使用 `"exact"`,当列表至少命名一个模型或系列时,默认选项也限制为列出的模型。请参阅[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)。931使用 `"exact"` 时,只要列表中至少指定了一个模型或系列,Default 选项也会被限制为列出的模型。请参阅[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)。

931 932 

932<h3 id="deniedmodels">933<h3 id="deniedmodels">

933 `deniedModels`934 `deniedModels`

934</h3>935</h3>

935 936 

936阻止特定模型,无论是否有[`availableModels`](#availablemodels)允许列表,即使该列表允许它们。Claude Code 从 `/model` 选择器中隐藏被阻止的模型,该模型无法在强制执行 `availableModels` 的任何地方选择。默认选项上的会话也不会运行被阻止的模型,如[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)所述。需要 Claude Code v2.1.283 或更高版本。937阻止特定模型,无论是否存在 [`availableModels`](#availablemodels) 允许列表,即使该列表允许这些模型也是如此。Claude Code 会在 `/model` 选择器中隐藏被阻止的模型,并且在任何强制执行 `availableModels` 的地方都无法选择该模型。如[阻止特定模型或版本](/docs/zh-CN/model-config#block-specific-models-or-versions)所述,使用 Default 选项的会话也不会运行被阻止的模型。需要 Claude Code v2.1.283 或更高版本。

937 938 

938* **Scope**: [`Managed`](#scopes)。Claude Code 在用户、项目和本地设置以及 `--settings` 中忽略该键,并显示警告939* **作用域**:[`Managed`](#scopes)。Claude Code 会忽略用户、项目和本地设置以及 `--settings` 中的此键,并给出警告

939* **Type**: 模型别名或 ID 的数组940* **类型**:模型别名或 ID 的数组

940 * 系列别名如 `"opus"` 阻止该系列中的每个模型941 * 诸如 `"opus"` 之类的系列别名会阻止该系列中的所有模型

941 * 模型 ID 如 `"claude-opus-5-5"` 在每种拼写中阻止该版本,包括日期和提供商特定 ID942 * 诸如 `"claude-opus-5-5"` 之类的模型 ID 会阻止该版本的所有写法,包括带日期的 ID 和特定于提供商的 ID

942 * 没有次要版本的模型 ID,如 `"claude-opus-5"`,也阻止更高的次要版本,如 Opus 5.5。写 `"claude-opus-5-0"` 仅阻止 Opus 5943 * 不带次版本号的模型 ID(例如 `"claude-opus-5"`)也会阻止后续的次版本,例如 Opus 5.5。要仅阻止 Opus 5,请写 `"claude-opus-5-0"`

943 * `best`、`opusplan` 和 `default` 条目被忽略944 * `best`、`opusplan` 和 `default` 条目会被忽略

944* **Default**: 未设置,因此没有模型被阻止945* **默认值**:未设置,因此不阻止任何模型

945 946 

946此示例允许 Opus 和 Sonnet 模型并阻止 Opus 5.5:947此示例允许 Opus 和 Sonnet 模型,并阻止 Opus 5.5:

947 948 

948```json managed-settings.json theme={null}949```json managed-settings.json theme={null}

949{950{


958 `effortLevel`959 `effortLevel`

959</h3>960</h3>

960 961 

961为您尚未保存级别的模型设置默认[努力级别](/docs/zh-CN/model-config#adjust-effort-level)。较低的级别在直接任务上更快且更便宜,较高的级别在复杂问题上推理更深入。962为尚未保存级别的模型设置默认的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。较低的级别在简单任务上更快、更便宜,较高的级别则会对复杂问题进行更深入的推理。

962 963 

963当您在您的机器上的交互式会话中运行 `/effort low`、`medium`、`high` 或 `xhigh` 时,Claude Code 将该级别保存在[`modelSettings`](#modelsettings)下的活动模型下,而不是写入此键。在 v2.1.251 之前,`/effort` 写入此键。964当您在本机的交互式会话中运行 `/effort low`、`medium`、`high` 或 `xhigh` 时,Claude Code 会将该级别保存在 [`modelSettings`](#modelsettings) 下的当前模型中,而不是写入此键。在 v2.1.251 之前,`/effort` 会写入此键。

964 965 

965在同一设置文件中,Claude Code 使用模型的保存级别而不是此键。[`modelSettings`](#modelsettings)说明跨文件优先级。966在同一个设置文件中,Claude Code 会使用模型已保存的级别,而不是此键。[`modelSettings`](#modelsettings) 说明了跨文件的优先级。

966 967 

967在附加到远程工作者的会话中、在 `-p` 运行中以及在 Agent SDK 中,`/effort` 仅适用于该会话。[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level)列出也仅适用于该会话的交互式选择。`/effort` 打印的消息说明发生了什么。968在连接到远程 worker 的会话中、在 `-p` 运行中以及在 Agent SDK 中,`/effort` 仅适用于该会话。[调整 effort 级别](/docs/zh-CN/model-config#adjust-effort-level)列出了同样仅适用于该会话的交互式选择。`/effort` 打印的消息会说明实际发生了哪种情况。

968 969 

969* **Scope**: [`Any file`](#scopes)970* **作用域**:[`Any file`](#scopes)

970* **Type**: string,其中一个:971* **类型**:字符串,取值之一:

971 * `"low"`: 最少推理,用于短的、范围内的、延迟敏感的、不是智能敏感的任务972 * `"low"`:推理最少,适用于简短、范围明确、对延迟敏感且对智能要求不高的任务

972 * `"medium"`: 减少成本敏感工作的令牌使用,可以权衡一些智能973 * `"medium"`:减少 token 使用量,适用于对成本敏感、可以牺牲部分智能的工作

973 * `"high"`: 平衡令牌使用和智能974 * `"high"`:在 token 使用量与智能之间取得平衡

974 * `"xhigh"`: 更深入的推理,更高的令牌支出975 * `"xhigh"`:以更高的 token 开销进行更深入的推理

975* **Default**: 未设置976* **默认值**:未设置

976* **Per-session overrides**: `--effort` 对此键优先一个会话,[`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars)对两者都优先977* **单会话覆盖**:`--effort` 在单个会话中优先于此键,而 [`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars) 优先于二者

977 978 

978```json settings.json theme={null}979```json settings.json theme={null}

979{980{


981}982}

982```983```

983 984 

984在您的用户设置文件 `~/.claude/settings.json` 中,此键是 `/effort` 在保存每个模型的级别之前写入的较旧形式,它继续在之前应用的地方应用,在 Opus 5、Fable 5.1 和更早的模型上。Opus 5.5 和之后发布的模型忽略它,并从它们自己的默认值开始,直到您为它们保存一个级别,`/effort` 在[`modelSettings`](#modelsettings)下写入。在项目、本地和托管设置中,以及使用 `--settings` 时,此键适用于每个模型。985在您的用户设置文件 `~/.claude/settings.json` 中,此键是 `/effort` 在按模型保存级别之前写入的旧形式,它会继续在以前适用的地方生效,即 Opus 5、Fable 5.1 及更早的模型。Opus 5.5 及其之后发布的模型会忽略此键,并以其自身的默认值开始,直到您为其保存级别为止,`/effort` 会将该级别写入 [`modelSettings`](#modelsettings) 下。在项目、本地和托管设置中,以及使用 `--settings` 时,此键适用于所有模型。

985 986 

986<h3 id="enforceavailablemodels">987<h3 id="enforceavailablemodels">

987 `enforceAvailableModels`988 `enforceAvailableModels`

988</h3>989</h3>

989 990 

990`/model` 选择器有一个**默认**选项,[`default` 模型设置](/docs/zh-CN/model-config#default-model-setting)描述它解析为的模型。[`availableModels`](#availablemodels)允许列表限制您可以命名的模型,但使用默认[前缀匹配](#availablemodelsmatch)它不会单独重新映射您的账户类型的默认值,因此**默认**仍然可以解析为列表外的模型。此键关闭该间隙。需要 Claude Code v2.1.175 或更高版本。991`/model` 选择器有一个 **Default** 选项,[`default` 模型设置](/docs/zh-CN/model-config#default-model-setting)描述了它解析到的模型。[`availableModels`](#availablemodels) 允许列表会限制您可以指定的模型,但在默认的[前缀匹配](#availablemodelsmatch)下,它不会重新映射您账户类型的默认模型,因此 **Default** 仍可能解析为列表之外的模型。此键弥补了这一漏洞。需要 Claude Code v2.1.175 或更高版本。

991 992 

992当您的组织部署任何托管设置时,Claude Code 仅从托管源读取此键,并在您的其他文件中忽略它。993当您的组织部署了任何托管设置时,Claude Code 只会从托管来源读取此键,并忽略您其他文件中的此键。

993 994 

994关于此键如何应用于启动时的模型检查,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock#when-your-organization-enforces-a-model-allowlist) 和 [Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai#when-your-organization-enforces-a-model-allowlist)。995关于此键如何应用于启动时的模型检查,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock#when-your-organization-enforces-a-model-allowlist) 和 [Google Cloud's Agent Platform](/docs/zh-CN/google-vertex-ai#when-your-organization-enforces-a-model-allowlist)。

995 996 

996* **Scope**: [`Any file`](#scopes)997* **作用域**:[`Any file`](#scopes)

997* **Type**: Boolean998* **类型**:布尔值

998 * `true`: 当**默认**会解析为 `availableModels` 外的模型时,Claude Code 将其解析为列表中第一个可用的模型999 * `true`:当 **Default** 将解析为 `availableModels` 之外的模型时,Claude Code 会将其解析为列表中第一个可用的模型

999 * `false`: 此键不改变**默认**的解析方式1000 * `false`:此键不会改变 **Default** 的解析方式

1000* **Default**: `false`1001* **默认值**:`false`

1001 1002 

1002此示例将命名选择限制为 Sonnet 和 Haiku 模型,并使**默认**解析为其中第一个可用的:1003此示例将可指定的选择限制为 Sonnet 和 Haiku 模型,并使 **Default** 解析为其中第一个可用的模型:

1003 1004 

1004```json settings.json theme={null}1005```json settings.json theme={null}

1005{1006{


1008}1009}

1009```1010```

1010 1011 

1011当 `availableModels` 未设置或为空时,此键没有效果。请参阅[为默认模型强制执行允许列表](/docs/zh-CN/model-config#enforce-the-allowlist-for-the-default-model)。需要 Claude Code v2.1.175 或更高版本。1012当 `availableModels` 未设置或为空时,此键不起作用。请参阅[对 Default 模型强制执行允许列表](/docs/zh-CN/model-config#enforce-the-allowlist-for-the-default-model)。需要 Claude Code v2.1.175 或更高版本。

1012 1013 

1013<h3 id="fallbackmodel">1014<h3 id="fallbackmodel">

1014 `fallbackModel`1015 `fallbackModel`

1015</h3>1016</h3>

1016 1017 

1017命名备用模型供 Claude Code 在您的主模型过载或不可用时按顺序尝试。Claude Code 为该轮的其余部分切换到链中下一个可用的模型,并显示通知。没有链的情况下,Claude Code 重试同一模型,然后显示服务器的错误,您重试或自己切换模型。1018指定当您的主模型过载或不可用时,Claude Code 按顺序尝试的备用模型。Claude Code 会在该轮次的剩余部分切换到链中下一个可用的模型,并显示通知。如果没有配置链,Claude Code 会重试同一模型,然后显示服务器的错误,由您自行重试或切换模型。

1018 1019 

1019切换意味着在备用模型上进行一轮冷[提示缓存](/docs/zh-CN/prompt-caching#switching-models);您的下一条消息首先再次尝试主模型。1020一次切换意味着在备用模型上有一个轮次的[提示缓存](/docs/zh-CN/prompt-caching#switching-models)是冷的;您的下一条消息会再次优先尝试主模型。

1020 1021 

1021* **Scope**: [`Any file`](#scopes)1022* **作用域**:[`Any file`](#scopes)

1022* **Type**: 模型别名或 ID 的数组;`"default"` 扩展为默认模型1023* **类型**:模型别名或 ID 的数组;`"default"` 会展开为默认模型

1023* **Default**: 未设置,因此失败的请求不会在另一个模型上重试1024* **默认值**:未设置,因此失败的请求不会在其他模型上重试

1024* **Per-session overrides**: `--fallback-model` 对此键优先一个会话1025* **单会话覆盖**:`--fallback-model` 在单个会话中优先于此键

1025 1026 

1026此示例在您的主模型失败时首先尝试 Sonnet 5,然后尝试 Haiku 4.5:1027此示例在主模型失败时先尝试 Sonnet 5,然后尝试 Haiku 4.5:

1027 1028 

1028```json settings.json theme={null}1029```json settings.json theme={null}

1029{1030{


1031}1032}

1032```1033```

1033 1034 

1034与大多数数组设置不同,此键不跨设置文件合并:最高优先级文件定义它提供整个链。如果您的项目文件设置 `["claude-sonnet-5"]` 而您的用户文件设置 `["claude-haiku-4-5"]`,链是 `["claude-sonnet-5"]` 仅。Claude Code 从列表中最多保留三个不同的允许模型,忽略其余的。请参阅[备用模型链](/docs/zh-CN/model-config#fallback-model-chains)。1035与大多数数组设置不同,此键不会跨设置文件合并:定义了此键的优先级最高的文件提供整个链。如果您的项目文件设置为 `["claude-sonnet-5"]`,而用户文件设置为 `["claude-haiku-4-5"]`,则链仅为 `["claude-sonnet-5"]`。Claude Code 最多保留列表中三个不同的允许模型,并忽略其余模型。请参阅[备用模型链](/docs/zh-CN/model-config#fallback-model-chains)。

1035 1036 

1036<h3 id="fastmode">1037<h3 id="fastmode">

1037 `fastMode`1038 `fastMode`

1038</h3>1039</h3>

1039 1040 

1040为可用的会话打开[快速模式](/docs/zh-CN/fast-mode),用于交互式工作,如快速迭代或实时调试,您希望以更高的每令牌成本获得速度。您通常不会手动编辑此键:运行 `/fast` 将 `fastMode: true` 写入 `~/.claude/settings.json`,再次运行它以关闭快速模式会删除该键。快速模式仅在 Opus 5.5、Opus 5 和 Opus 4.8 上运行:从另一个模型打开它会切换您到 Opus,切换到不支持的模型会关闭它。请参阅[在快速模式打开时切换模型](/docs/zh-CN/fast-mode#switch-models-while-fast-mode-is-on)。1041在可用的会话中开启[快速模式](/docs/zh-CN/fast-mode),适用于快速迭代或实时调试等交互式工作,在这些场景中您希望以更高的每 token 成本换取速度。通常无需手动编辑此键:运行 `/fast` 会将 `fastMode: true` 写入 `~/.claude/settings.json`,再次运行以关闭快速模式会移除该键。快速模式仅在 Opus 5.5、Opus 5 和 Opus 4.8 上运行:从其他模型开启它会将您切换到 Opus,而切换到不支持的模型会将其关闭。请参阅[在快速模式开启时切换模型](/docs/zh-CN/fast-mode#switch-models-while-fast-mode-is-on)。

1041 1042 

1042* **Scope**: [`Any file`](#scopes)1043* **作用域**:[`Any file`](#scopes)

1043* **Type**: Boolean1044* **类型**:布尔值

1044 * `true`: Claude Code 为可用的会话打开快速模式1045 * `true`:Claude Code 在可用的会话中开启快速模式

1045 * `false`: 快速模式保持关闭1046 * `false`:快速模式保持关闭

1046* **Default**: 未设置,因此快速模式已关闭1047* **默认值**:未设置,因此快速模式处于关闭状态

1047* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_FAST_MODE`](/docs/zh-CN/env-vars)为一个会话关闭快速模式,此键无法将其重新打开1048* **单会话覆盖**:[`CLAUDE_CODE_DISABLE_FAST_MODE`](/docs/zh-CN/env-vars) 会在单个会话中关闭快速模式,且此键无法将其重新打开

1048 1049 

1049```json settings.json theme={null}1050```json settings.json theme={null}

1050{1051{


1056 `fastModePerSessionOptIn`1057 `fastModePerSessionOptIn`

1057</h3>1058</h3>

1058 1059 

1059通常,运行 `/fast` 将[`fastMode`](#fastmode)保存到一个人的用户设置,因此快速模式在之后每个会话的开始时打开。将此键设置为 `true` 以停止这种情况:保存的 `fastMode: true` 不再在会话开始时打开快速模式,每个人必须在他们想要它的每个会话中运行 `/fast`。Claude Code 在他们的文件中保留 `fastMode` 键,因此关闭此键会恢复旧行为。1060通常,运行 `/fast` 会将 [`fastMode`](#fastmode) 保存到用户的用户设置中,因此之后的每个会话开始时快速模式都会开启。将此键设置为 `true` 可阻止这种情况:已保存的 `fastMode: true` 不再在会话开始时开启快速模式,每个人都必须在需要它的每个会话中运行 `/fast`。Claude Code 会保留其文件中的 `fastMode` 键,因此关闭此键即可恢复原有行为。

1060 1061 

1061Team 或 Enterprise 计划的所有者可以通过[服务器托管设置](/docs/zh-CN/server-managed-settings)在组织范围内部署它。当托管设置设置该键时,`/fast on` 在交互式终端会话外被拒绝,并报告您的组织已禁用快速模式。这涵盖[非交互式模式](/docs/zh-CN/headless)、[VS Code 扩展](/docs/zh-CN/vs-code)和[云会话](/docs/zh-CN/claude-code-on-the-web)。1062Team 或 Enterprise 计划的所有者可以通过[服务器托管设置](/docs/zh-CN/server-managed-settings)在组织范围内部署此项。当托管设置设置了此键时,`/fast on` 在交互式终端会话之外会被拒绝,并报告您的组织已禁用快速模式。这涵盖[非交互模式](/docs/zh-CN/headless)、[VS Code 扩展](/docs/zh-CN/vs-code)和[云端会话](/docs/zh-CN/claude-code-on-the-web)。

1062 1063 

1063* **Scope**: [`Any file`](#scopes)1064* **作用域**:[`Any file`](#scopes)

1064* **Type**: Boolean1065* **类型**:布尔值

1065 * `true`: 保存的 `fastMode: true` 不再在会话开始时打开快速模式,因此每个人在他们想要它的每个会话中运行 `/fast`;使用 `--settings` 传递的 `fastMode: true` 仍然对该会话计数,除非托管设置设置此键1066 * `true`:已保存的 `fastMode: true` 不再在会话开始时开启快速模式,因此每个人需要在想要使用它的每个会话中运行 `/fast`;除非托管设置设置了此键,否则通过 `--settings` 传入的 `fastMode: true` 仍对该会话有效

1066 * `false`: 保存的 `fastMode: true` 在之后每个会话的开始时打开快速模式1067 * `false`:已保存的 `fastMode: true` 会在之后每个会话开始时开启快速模式

1067* **Default**: `false`1068* **默认值**:`false`

1068 1069 

1069```json settings.json theme={null}1070```json settings.json theme={null}

1070{1071{


1072}1073}

1073```1074```

1074 1075 

1075请参阅[需要每个会话的选择加入](/docs/zh-CN/fast-mode#require-per-session-opt-in)。1076请参阅[要求按会话选择启用](/docs/zh-CN/fast-mode#require-per-session-opt-in)。

1076 1077 

1077<h3 id="language">1078<h3 id="language">

1078 `language`1079 `language`

1079</h3>1080</h3>

1080 1081 

1081默认情况下让 Claude 用英语以外的语言响应。响应没有固定列表:Claude Code 将值逐字传递给 Claude 作为始终用该语言响应的指令,因此任何 Claude 可以读取的语言名称都有效。Claude Code 不检查该值,因此拼写错误的名称按原样到达 Claude,而不是产生错误。相同的值为[语音听写](/docs/zh-CN/voice-dictation#change-the-dictation-language)设置语言,它有一个固定的[支持的听写语言](/docs/zh-CN/voice-dictation#change-the-dictation-language)列表,以及自动生成的会话标题。1082让 Claude 默认使用英语以外的语言回复。回复语言没有固定列表:Claude Code 会将该值原样传递给 Claude,作为始终使用该语言回复的指令,因此 Claude 能够识别的任何语言名称都可以使用。Claude Code 不会检查该值,因此拼写错误的名称会按原样传递给 Claude,而不会产生错误。同一个值也会设置[语音听写](/docs/zh-CN/voice-dictation#change-the-dictation-language)的语言(语音听写确实有固定的[支持的听写语言](/docs/zh-CN/voice-dictation#change-the-dictation-language)列表)以及自动生成的会话标题的语言。

1082 1083 

1083* **Scope**: [`Any file`](#scopes)1084* **作用域**:[`Any file`](#scopes)

1084* **Type**: string,任何语言名称,如 `"japanese"`、`"spanish"` 或 `"french"`;Claude Code 不验证它1085* **类型**:字符串,任意语言名称,例如 `"japanese"`、`"spanish"` 或 `"french"`;Claude Code 不会对其进行验证

1085* **Default**: 未设置;会话标题然后匹配您的对话语言1086* **默认值**:未设置;此时会话标题会与您对话所用的语言一致

1086 1087 

1087```json settings.json theme={null}1088```json settings.json theme={null}

1088{1089{


1094 `maxEffortLevel`1095 `maxEffortLevel`

1095</h3>1096</h3>

1096 1097 

1097限制会话可以使用的[努力级别](/docs/zh-CN/model-config#adjust-effort-level),保留较低的级别可用。任何更高的级别都在上限处运行,包括来自 `/effort`、`/model` 选择器、`--effort`、[`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars)、skill 或 subagent 的 `effort` frontmatter 或模型自己的默认值。Claude Code 在每个请求之前自己应用上限,因此它在每个提供商上保持,包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry。需要 Claude Code v2.1.267 或更高版本。1098限制会话可以使用的 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)上限,较低的级别仍然可用。任何更高的级别都会改为以上限级别运行,包括来自 `/effort`、`/model` 选择器、`--effort`、[`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars)、skill 或子代理的 `effort` frontmatter,或模型自身默认值的级别。Claude Code 会在每个请求之前自行应用该上限,因此它在所有提供商上都有效,包括 Amazon Bedrock、Google Cloud's Agent Platform 和 Microsoft Foundry。需要 Claude Code v2.1.267 或更高版本。

1098 1099 

1099* **Scope**: [`Any file`](#scopes)。在托管设置中部署它以为组织强制执行。当多个范围设置上限时,最低的适用,因此在一个范围中设置的上限无法从另一个范围提高1100* **作用域**:[`Any file`](#scopes)。将其部署在托管设置中,可在组织范围内强制执行。当多个作用域设置了上限时,以最低的为准,因此在一个作用域中设置的上限无法在另一个作用域中提高

1100* **Type**: string,其中一个 `"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"`。`"max"` 值设置无上限1101* **类型**:字符串,为 `"low"`、`"medium"`、`"high"`、`"xhigh"` 或 `"max"` 之一。`"max"` 值表示不设上限

1101* **Default**: 未设置,因此无上限适用1102* **默认值**:未设置,因此不应用任何上限

1102* **Per-model caps**: 将 `maxEffortLevel` 添加到模型的[`modelSettings`](#modelsettings)条目。该条目在设置两者的设置源(如您的用户设置或一个[托管源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources))中仅替换该模型的此键。在那里设置 `"max"` 以豁免该模型免受该源的上限;Claude Code 仍然应用来自其他源的上限1103* **按模型上限**:将 `maxEffortLevel` 添加到模型的 [`modelSettings`](#modelsettings) 条目中。该条目仅在同时设置了二者的设置来源(例如您的用户设置或某个[托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources))中,针对该模型替代此键。在此处设置 `"max"` 可使该模型免受该来源的上限约束;Claude Code 仍会应用其他来源的上限

1103 1104 

1104此示例将每个模型限制在 `medium`,并豁免 Sonnet 4.6:1105此示例将所有模型的上限设为 `medium`,并使 Sonnet 4.6 不受限制:

1105 1106 

1106```json settings.json theme={null}1107```json settings.json theme={null}

1107{1108{


1114}1115}

1115```1116```

1116 1117 

1117当您的组织也为模型设置[努力限制](/docs/zh-CN/model-config#organization-effort-limits)时,两个上限中较低的适用。1118当您的组织还为某个模型设置了 [effort 限制](/docs/zh-CN/model-config#organization-effort-limits)时,以两个上限中较低的为准。

1118 1119 

1119<h3 id="model">1120<h3 id="model">

1120 `model`1121 `model`

1121</h3>1122</h3>

1122 1123 

1123设置每个新会话使用的模型,因此您不必每次都用 `/model` 选择一个。在此处设置它不会阻止您在会话中期切换。如果您的管理员设置了[组织默认模型](/docs/zh-CN/model-config#organization-default-model)以覆盖用户选择,即使您在用户、项目或本地设置中设置此键,您也会获得该模型。1124设置每个新会话使用的模型,这样您就不必每次都通过 `/model` 选择模型。在此处设置并不妨碍您在会话中途切换。如果您的管理员设置了[组织默认模型](/docs/zh-CN/model-config#organization-default-model)以覆盖用户选择,即使您在用户、项目或本地设置中设置了此键,您也会使用该模型。

1124 1125 

1125* **Scope**: [`Any file`](#scopes)1126* **作用域**:[`Any file`](#scopes)

1126* **Type**: string,模型别名或完整模型 ID1127* **类型**:字符串,模型别名或完整模型 ID

1127* **Default**: 未设置,因此 Claude Code 使用您账户的默认模型1128* **默认值**:未设置,因此 Claude Code 使用您账户的默认模型

1128* **Per-session overrides**: `--model` 优先于[`ANTHROPIC_MODEL`](/docs/zh-CN/env-vars),两者都优先于此键一个会话,包括优先于托管 `model`;[`availableModels`](#availablemodels)列表仍然适用于选择1129* **单会话覆盖**:`--model` 优先于 [`ANTHROPIC_MODEL`](/docs/zh-CN/env-vars),二者在单个会话中都优先于此键(包括托管的 `model`);[`availableModels`](#availablemodels) 列表仍会应用于所选模型

1129 1130 

1130```json settings.json theme={null}1131```json settings.json theme={null}

1131{1132{


1133}1134}

1134```1135```

1135 1136 

1136此处的值优先于[`ANTHROPIC_DEFAULT_MODEL`](/docs/zh-CN/model-config#set-a-default-model-for-new-sessions),Claude Code 仅在没有其他内容选择模型时使用。1137此处的值优先于 [`ANTHROPIC_DEFAULT_MODEL`](/docs/zh-CN/model-config#set-a-default-model-for-new-sessions),Claude Code 仅在没有其他项选择模型时才使用后者。

1137 1138 

1138<h3 id="modeloverrides">1139<h3 id="modeloverrides">

1139 `modelOverrides`1140 `modelOverrides`

1140</h3>1141</h3>

1141 1142 

1142将 Anthropic 模型 ID 映射到提供商特定的模型 ID,如 Amazon Bedrock 推理配置文件 ARN。每个模型选择器条目然后在调用提供商 API 时使用其映射值。管理员在[Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry](/docs/zh-CN/model-config#override-model-ids-per-version)上使用这个来将每个模型版本路由到特定的推理配置文件、版本名称或部署,以实现治理、成本分配或区域路由。1143将 Anthropic 模型 ID 映射到特定于提供商的模型 ID,例如 Amazon Bedrock 推理配置文件 ARN。这样,每个模型选择器条目在调用提供商 API 时都会使用其映射的值。管理员在 [Amazon Bedrock、Google Cloud's Agent Platform 和 Microsoft Foundry](/docs/zh-CN/model-config#override-model-ids-per-version) 上使用此项,将每个模型版本路由到特定的推理配置文件、版本名称或部署,以实现治理、成本分摊或区域路由。

1143 1144 

1144* **Scope**: [`Any file`](#scopes)1145* **作用域**:[`Any file`](#scopes)

1145* **Type**: 将模型 ID 映射到提供商模型 ID 的对象1146* **类型**:将模型 ID 映射到提供商模型 ID 的对象

1146* **Default**: 未设置1147* **默认值**:未设置

1147 1148 

1148此示例将 Opus 4.6 的每个调用路由到命名的 Bedrock 推理配置文件:1149此示例将所有对 Opus 4.6 的调用路由到指定的 Bedrock 推理配置文件:

1149 1150 

1150```json settings.json theme={null}1151```json settings.json theme={null}

1151{1152{


1161 `modelPicker`1162 `modelPicker`

1162</h3>1163</h3>

1163 1164 

1164列出 `/model` 选择器提供的模型,按您写入它们的顺序和您选择的标签下,因此选择器列出您的组织运行的模型,在内置阵容之后或代替它。每行的 `model` 逐字获取,因此它接受 `--model` 接受的任何内容:别名如 `opus`、Anthropic 模型 ID 或 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 LLM 网关的提供商格式 ID。需要 Claude Code v2.1.242 或更高版本。1165列出 `/model` 选择器提供的模型,按您编写的顺序并使用您选择的标签,使选择器在内置模型列表之后或代替内置模型列表,列出您组织运行的模型。每一行的 `model` 会按原样使用,因此它接受 `--model` 接受的任何值:诸如 `opus` 之类的别名、Anthropic 模型 ID,或适用于 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 或 LLM 网关的提供商格式 ID。需要 Claude Code v2.1.242 或更高版本。

1165 1166 

1166* **Scope**: [`User or managed`](#scopes)。Claude Code 从托管设置、`--settings` 和用户设置读取该键,并在项目和本地设置中忽略它,因此您克隆的存储库无法重新标记选择器。这三个中最高的设置该键提供整个阵容,Claude Code 从不合并来自两个源的阵容。1167* **作用域**:[`User or managed`](#scopes)。Claude Code 从托管设置、`--settings` 和用户设置中读取此键,并忽略项目和本地设置中的此键,因此您克隆的仓库无法重新标注选择器。这三者中设置了此键的优先级最高者提供整个模型列表,Claude Code 永远不会合并来自两个来源的模型列表。

1167* **Type**: 带有 `options` 数组的对象和可选的 `replaceBuiltInOptions` Boolean1168* **类型**:包含行数组 `options` 和可选布尔值 `replaceBuiltInOptions` 的对象

1168* **Default**: 未设置,因此选择器显示内置阵容1169* **默认值**:未设置,因此选择器显示内置模型列表

1169 1170 

1170此示例在内置阵容之后添加两个 Bedrock 部署,在您的团队识别的名称下:1171此示例在内置模型列表之后添加两个 Bedrock 部署,并使用您团队熟悉的名称:

1171 1172 

1172```json managed-settings.json theme={null}1173```json managed-settings.json theme={null}

1173{1174{


1192 `modelPicker` 的字段1193 `modelPicker` 的字段

1193</h4>1194</h4>

1194 1195 

1195该键有两个字段,一个用于行本身,一个用于它们是替换内置阵容还是添加到它。1196此键包含两个字段,一个用于行本身,另一个用于决定这些行是替换内置模型列表还是添加到其中。

1196 1197 

1197| Field | Type | What it does |1198| 字段 | 类型 | 作用 |

1198| :- | :- | :- |1199| :- | :- | :- |

1199| `options` | 行的数组,每个都有必需的 `model` 和可选的 `label`、`description` 和 `behavesAs` | 选择器显示的行,按此顺序,除了灰显的行移到底部。没有 `label`,Claude Code 用它知道的模型的内置名称标记行,或模型 ID 否则,没有 `description` 它写一个通用的第二行 |1200| `options` | 行的数组,每行包含必需的 `model` 以及可选的 `label`、`description` 和 `behavesAs` | 选择器按此顺序显示的行,但灰显的行会移到底部。如果没有 `label`,对于 Claude Code 已知的模型,它会使用内置名称作为行标题,否则使用模型 ID;如果没有 `description`,它会写入通用的第二行 |

1200| `replaceBuiltInOptions` | Boolean,默认 `false` | 将其设置为 `true` 以仅显示这些行、**默认**和会话已在使用的模型的行。保留未设置以在内置阵容之后添加这些行 |1201| `replaceBuiltInOptions` | 布尔值,默认为 `false` | 将其设置为 `true` 可仅显示这些行、**Default** 以及会话当前正在使用的模型所对应的行。保持未设置则会将这些行添加到内置模型列表之后 |

1201 1202 

1202`options` 中的条目也可以在其 `model` 旁边携带可选的 `behavesAs` 字符串,需要 v2.1.257 或更高版本。将其设置为您的 Claude Code 版本已知的模型的 ID,如 `claude-opus-4-8`,在其 `model` 比您的版本更新的条目上。Claude Code 然后将该已知模型的能力和努力默认值应用于条目,而不是将其模型视为未知。条目的标签和 Claude Code 在请求中发送的模型 ID 不改变。1203`options` 中的条目还可以在其 `model` 旁边携带一个可选的 `behavesAs` 字符串,这需要 v2.1.257 或更高版本。在 `model` 比您的 Claude Code 版本更新的条目上,将其设置为您的 Claude Code 版本已知的模型 ID,例如 `claude-opus-4-8`。这样,Claude Code 会将该已知模型的能力和 effort 默认值应用于该条目,而不是将其模型视为未知模型。条目的标签以及 Claude Code 在请求中发送的模型 ID 不会改变。

1203 1204 

1204使用 `replaceBuiltInOptions` 打开时,Claude Code 隐藏每个其他行:内置阵容、它为[`availableModels`](#availablemodels)条目添加的行、[网关发现](/docs/zh-CN/llm-gateway-protocol#model-discovery)找到的模型和[`ANTHROPIC_CUSTOM_MODEL_OPTION`](/docs/zh-CN/model-config#add-a-custom-model-option)。关闭时,Claude Code 跳过内置阵容已覆盖的列出的模型。标签改变选择器显示的内容,而不是 Claude Code 运行的模型。1205开启 `replaceBuiltInOptions` 时,Claude Code 会隐藏所有其他行:内置模型列表、它为 [`availableModels`](#availablemodels) 条目添加的行、[网关发现](/docs/zh-CN/llm-gateway-protocol#model-discovery)找到的模型,以及 [`ANTHROPIC_CUSTOM_MODEL_OPTION`](/docs/zh-CN/model-config#add-a-custom-model-option)。关闭时,Claude Code 会跳过内置模型列表已经涵盖的列出模型。标签改变的是选择器显示的内容,而不是 Claude Code 运行哪个模型。

1205 1206 

1206[`availableModels`](#availablemodels)允许列表仍然适用于这些行。在将列出的模型添加到允许列表之前,请阅读[合并行为](/docs/zh-CN/model-config#merge-behavior):特定模型 ID 缩小其系列的通配符条目。Claude Code 也在显示选择器之前检查每行与会话:1207[`availableModels`](#availablemodels) 允许列表仍适用于这些行。在将列出的模型添加到允许列表之前,请阅读[合并行为](/docs/zh-CN/model-config#merge-behavior):特定的模型 ID 会收窄其系列的通配符条目。Claude Code 还会在显示选择器之前,根据会话检查每一行:

1207 1208 

1208* **Dropped**: Claude Code 无法提供的行,如已退休的模型或您的组织无权访问的模型1209* **丢弃**:Claude Code 无法提供服务的行,例如已停用的模型或您的组织无权访问的模型

1209* **Grayed out**: 您还无法选择的行,显示原因1210* **灰显**:您暂时无法选择的行,并显示原因

1210* **No row survives**: Claude Code 保留内置阵容,按允许列表过滤如常1211* **没有行保留**:Claude Code 保留内置模型列表,并照常按允许列表进行过滤

1211 1212 

1212Claude Code 删除它无法解析的行,保留其余的。请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。1213Claude Code 会丢弃无法解析的行并保留其余行。请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。

1213 1214 

1214<h3 id="modelpricing">1215<h3 id="modelpricing">

1215 `modelPricing`1216 `modelPricing`

1216</h3>1217</h3>

1217 1218 

1218按您的组织支付的费率而不是列表价格报告支出。当您的组织有合同费率时设置它,因此开发人员看到的美元数字与您的账单匹配。Claude Code 在 `/usage`、[状态行](/docs/zh-CN/statusline)、Agent SDK 的 `total_cost_usd`、[`--max-budget-usd`](/docs/zh-CN/cli-reference)限制和[OpenTelemetry](/docs/zh-CN/monitoring-usage)成本指标和事件中应用费率。您提供费率:Claude Code 不从您的合同或 Claude Console 读取它们。需要 Claude Code v2.1.242 或更高版本。1219按您组织实际支付的费率而非标价报告支出。当您的组织有合同费率时设置此项,使开发者看到的美元数字与您的账单一致。Claude Code 会在 `/usage`、[状态栏](/docs/zh-CN/statusline)、Agent SDK 的 `total_cost_usd`、[`--max-budget-usd`](/docs/zh-CN/cli-reference) 限制以及 [OpenTelemetry](/docs/zh-CN/monitoring-usage) 成本指标和事件中应用这些费率。费率由您提供:Claude Code 不会从您的合同或 Claude Console 中读取费率。需要 Claude Code v2.1.242 或更高版本。

1219 1220 

1220* **Scope**: [`Managed`](#scopes)。通过服务器托管设置、MDM 策略、`managed-settings.json` 文件或[策略助手](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)部署该键。Claude Code 在用户、项目和本地设置、`--settings` 中忽略它,在 Windows 中的用户可写[HKCU 注册表](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)中忽略它。使用服务器托管设置,每个会话以列表价格报告成本,直到该会话的[设置获取](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)已确认该设置。嵌入 Claude Code 并设置[`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars)的主机应用可以通过 SDK [`managedSettings`](/docs/zh-CN/agent-sdk/typescript#options)选项提供自己的表,Claude Code 仅在没有托管源设置该键时使用,仅在 Claude Code v2.1.246 或更高版本中。1221* **作用域**:[`Managed`](#scopes)。通过服务器托管设置、MDM 策略、`managed-settings.json` 文件或[策略辅助程序](/docs/zh-CN/managed-settings#compute-the-policy-with-a-helper-program)部署此键。Claude Code 会忽略用户、项目和本地设置、`--settings` 以及 Windows 上用户可写的 [HKCU 注册表](/docs/zh-CN/managed-settings#where-each-mechanism-stores-the-policy)中的此键。使用服务器托管设置时,每个会话都会按标价报告成本,直到该会话的[设置获取](/docs/zh-CN/server-managed-settings#fetch-and-caching-behavior)确认了该设置为止。嵌入 Claude Code 并设置了 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/zh-CN/env-vars) 的宿主应用程序可以通过 SDK [`managedSettings`](/docs/zh-CN/agent-sdk/typescript#options) 选项提供自己的费率表,Claude Code 仅在没有托管来源设置此键时才使用该表,且仅限 Claude Code v2.1.246 或更高版本。

1221* **Type**: 带有可选 `multiplier` 和可选 `overrides` 映射的对象1222* **类型**:包含可选 `multiplier` 和可选 `overrides` 映射的对象

1222* **Default**: 未设置,因此 Claude Code 报告列表价格,除非主机应用提供表1223* **默认值**:未设置,因此除非宿主应用程序提供了费率表,否则 Claude Code 按标价报告

1223 1224 

1224单独设置 `multiplier` 以获得统一折扣或加价,单独设置 `overrides` 以获得每个模型费率,或两者都设置。1225单独设置 `multiplier` 可实现统一折扣或加价,单独设置 `overrides` 可实现按模型费率,也可以同时设置二者。

1225 1226 

1226此示例为 Sonnet 4.6 设置合同费率,然后将每个数字(包括 Sonnet 行)减少 15%:1227此示例为 Sonnet 4.6 设置合同费率,然后将所有数字(包括 Sonnet 行)降低 15%:

1227 1228 

1228```json managed-settings.json theme={null}1229```json managed-settings.json theme={null}

1229{1230{


1241}1242}

1242```1243```

1243 1244 

1244将 `multiplier` 设置为 1 以上,最多 10,以标记每个数字。加价需要 Claude Code v2.1.271 或更高版本。更早的版本忽略 `multiplier` 高于 1 的警告,保留设置的其余部分。1245将 `multiplier` 设置为大于 1(最高 10)可对所有数字加价。加价需要 Claude Code v2.1.271 或更高版本。较早的版本会忽略大于 1 的 `multiplier` 并给出警告,同时保留该设置的其余部分。

1245 1246 

1246有关步骤,包括如何确认费率有效,请参阅[按您的合同费率报告支出](/docs/zh-CN/costs#report-spend-at-your-contracted-rates)。1247关于具体步骤(包括如何确认费率已生效),请参阅[按合同费率报告支出](/docs/zh-CN/costs#report-spend-at-your-contracted-rates)。

1247 1248 

1248<span id="modelpricing-multiplier" />1249<span id="modelpricing-multiplier" />

1249 1250 


1253 `modelPricing` 的字段1254 `modelPricing` 的字段

1254</h4>1255</h4>

1255 1256 

1256| Field | Type | What it does |1257| 字段 | 类型 | 作用 |

1257| :- | :- | :- |1258| :- | :- | :- |

1258| `multiplier` | 大于 0 且最多 10 的数字 | 缩放 Claude Code 计算的每个成本,无论 `overrides` 行是否覆盖它。低于 1 是折扣,高于 1 是加价 |1259| `multiplier` | 大于 0 且不超过 10 的数字 | 按比例调整 Claude Code 计算的每项成本,无论是否有 `overrides` 行涵盖。小于 1 为折扣,大于 1 为加价 |

1259| `overrides` | 模型 ID 到具有 `input`、`output`、`cacheRead` 和 `cacheWrite` 的费率对象的映射,每个 0 到 10000 | 该模型的美元每百万令牌费率,全部四个必需。`cacheWrite` 涵盖五分钟和一小时缓存写入。请参阅[`modelPricing` 行适用于哪些模型](#which-models-a-modelpricing-row-applies-to) |1260| `overrides` | 将模型 ID 映射到费率对象的映射,费率对象包含 `input`、`output`、`cacheRead` 和 `cacheWrite`,每项为 0 到 10000 | 该模型以美元计的每百万 token 费率,四项均为必需。`cacheWrite` 同时涵盖五分钟和一小时的缓存写入。请参阅[一行适用于哪些模型](#which-models-a-modelpricing-row-applies-to) |

1260 1261 

1261Claude Code 完全按照您写入的方式使用行的费率,不添加快速模式附加费或[仅限美国推理费率](https://platform.claude.com/docs/en/about-claude/pricing)。如果您也设置 `multiplier`,Claude Code 在行的费率之上应用它。Claude Code 删除具有它无法解析的费率或 `multiplier` 的行,保留其余的;请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。1262Claude Code 会完全按照您编写的内容使用行中的费率,不会加上快速模式附加费或[仅限美国推理费率](https://platform.claude.com/docs/en/about-claude/pricing)。如果您还设置了 `multiplier`,Claude Code 会在行费率的基础上再应用它。Claude Code 会丢弃包含无法解析的费率的行,或无法解析的 `multiplier`,并保留其余部分;请参阅[修复损坏的设置文件](/docs/zh-CN/settings#fix-a-broken-settings-file)。

1262 1263 

1263<h4 id="which-models-a-modelpricing-row-applies-to">1264<h4 id="which-models-a-modelpricing-row-applies-to">

1264 `modelPricing` 行适用于哪些模型1265 `modelPricing` 行适用于哪些模型

1265</h4>1266</h4>

1266 1267 

1267Claude Code 从行的键决定行适用于哪些模型:1268Claude Code 根据行的键来决定该行适用于哪些模型:

1268 1269 

1269* **内置模型的 ID**: Claude Code 本身为内置模型使用的键,无论该键是模型自己的 ID,如 `claude-sonnet-4-6`,还是其 Bedrock、Agent Platform 或 Foundry ID。Claude Code 将行应用于该模型的每个日期快照 ID 和提供商特定 ID。1270* **内置模型的 ID**:Claude Code 自身为内置模型使用的键,无论该键是模型自己的 ID(例如 `claude-sonnet-4-6`),还是其 Bedrock、Agent Platform 或 Foundry ID。Claude Code 会将该行应用于该模型的每个带日期快照 ID 和特定于提供商的 ID。

1270* **任何其他键**: 不是内置模型 ID 的键,如网关模型别名。Claude Code 仅将行应用于该一个 ID。当模型 ID 完全匹配您的一个键,也落在由内置模型 ID 键的行下时,Claude Code 使用精确匹配。1271* **任何其他键**:不是内置模型 ID 的键,例如网关模型别名。Claude Code 仅将该行应用于该 ID。当某个模型 ID 与您的某个键完全匹配,同时又属于以内置模型 ID 为键的行时,Claude Code 使用完全匹配的行。

1271* **Bedrock 应用推理配置文件**: 一旦 Claude Code 通过您的[`modelOverrides`](#modeloverrides)映射或[`bedrock:GetInferenceProfile` 查找](/docs/zh-CN/amazon-bedrock#iam-configuration)将配置文件解析为它路由到的模型,Claude Code 将该模型的行应用于配置文件。1272* **Bedrock 应用程序推理配置文件**:一旦 Claude Code 通过您的 [`modelOverrides`](#modeloverrides) 映射或 [`bedrock:GetInferenceProfile` 查找](/docs/zh-CN/amazon-bedrock#iam-configuration)将配置文件解析为其路由到的模型,Claude Code 就会将该模型的行应用于该配置文件。

1272 1273 

1273<h3 id="modelsettings">1274<h3 id="modelsettings">

1274 `modelSettings`1275 `modelSettings`

1275</h3>1276</h3>

1276 1277 

1277为您使用的每个模型保存[努力级别](/docs/zh-CN/model-config#adjust-effort-level)。需要 Claude Code v2.1.251 或更高版本。1278为您使用的每个模型保存一个 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)。需要 Claude Code v2.1.251 或更高版本。

1278 1279 

1279在您机器上的交互式会话中,当您使用 `/effort` 或 `/model` 选择器的努力滑块将 `low`、`medium`、`high` 或 `xhigh` 保存为您的默认值时,Claude Code 在您使用的模型下在此处写入该级别,因此您很少自己编辑此键。当您在[VS Code 扩展的模型选择器](/docs/zh-CN/vs-code#use-the-prompt-box)中选择其中一个级别时,Claude Code 以相同的方式在此处保存它。[`effortLevel`](#effortlevel)条目列出 `/effort` 仅适用于该会话的会话。1280在本机的交互式会话中,当您通过 `/effort` 或 `/model` 选择器的 effort 滑块将 `low`、`medium`、`high` 或 `xhigh` 保存为默认值时,Claude Code 会将该级别写入此处您正在使用的模型下,因此您很少需要自己编辑此键。当您在 [VS Code 扩展的模型选择器](/docs/zh-CN/vs-code#use-the-prompt-box)中选择这些级别之一时,Claude Code 也会以同样的方式将其保存在此处。[`effortLevel`](#effortlevel) 条目列出了 `/effort` 仅适用于该会话的情况。

1280 1281 

1281手动编辑该键以更改或删除您保存的级别。1282手动编辑此键可更改或删除您已保存的级别。

1282 1283 

1283此处模型的 `effortLevel` 优先于同一设置文件中的顶级[`effortLevel`](#effortlevel)。跨文件,Claude Code 分别解析每个模型:最高优先级[设置文件](/docs/zh-CN/settings#settings-precedence)设置该模型的 `effortLevel` 或[适用于该模型](#effortlevel)的顶级 `effortLevel` 决定,因此托管设置中的 `effortLevel` 优先于您在用户设置中保存的级别。[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level)列出还可以覆盖保存级别的内容,如启动时的 `--effort`。1284此处某个模型的 `effortLevel` 优先于同一设置文件中的顶层 [`effortLevel`](#effortlevel)。跨文件时,Claude Code 会分别解析每个模型:为该模型设置了 `effortLevel`,或设置了[适用于该模型](#effortlevel)的顶层 `effortLevel` 的优先级最高的[设置文件](/docs/zh-CN/settings#settings-precedence)起决定作用,因此托管设置中的 `effortLevel` 优先于您在用户设置中保存的级别。[调整 effort 级别](/docs/zh-CN/model-config#adjust-effort-level)列出了还有哪些内容可以覆盖已保存的级别,例如启动时的 `--effort`。

1284 1285 

1285要限制一个模型的努力而不是设置其级别,将[`maxEffortLevel`](#maxeffortlevel)字段添加到该模型的条目。该字段需要 Claude Code v2.1.267 或更高版本。1286要限制某个模型的 effort 上限而不是设置其级别,请在该模型的条目中添加 [`maxEffortLevel`](#maxeffortlevel) 字段。该字段需要 Claude Code v2.1.267 或更高版本。

1286 1287 

1287* **Scope**: [`Any file`](#scopes)1288* **作用域**:[`Any file`](#scopes)

1288* **Type**: 将模型名称映射到对象的对象,该对象可包含以下任意字段:1289* **类型**:将模型名称映射到对象的对象,该对象可包含以下任意字段:

1289 * `effortLevel`: 其中一个 `"low"`、`"medium"`、`"high"` 或 `"xhigh"`1290 * `effortLevel`:为 `"low"`、`"medium"`、`"high"` 或 `"xhigh"` 之一

1290 * [`maxEffortLevel`](#maxeffortlevel): 该模型可以运行的最高 effort 级别1291 * [`maxEffortLevel`](#maxeffortlevel):该模型可以运行的最高 effort 级别

1291 * `autoCompactWindow`: 从 `100000` 到 `1000000` 的 token 数,或 `"auto"` 表示为该模型调优的窗口。[`/autocompact`](/docs/zh-CN/model-config#set-the-auto-compact-window) 保存到此处。对于该模型,该值优先于同一设置文件中的顶级 [`autoCompactWindow`](#autocompactwindow)。需要 Claude Code v2.1.288 或更高版本1292 * `autoCompactWindow`:从 `100000` 到 `1000000` 的 token 数,或 `"auto"` 表示为该模型调优的窗口。[`/autocompact`](/docs/zh-CN/model-config#set-the-auto-compact-window) 会保存到此处。对于该模型,此值优先于同一设置文件中的顶层 [`autoCompactWindow`](#autocompactwindow)。需要 Claude Code v2.1.288 或更高版本

1292* **Default**: 未设置1293* **默认值**:未设置

1293 1294 

1294Claude Code 在模型的规范名称下写入每个条目,如 `claude-opus-5-5`,并将该模型的别名、日期后缀、`[1m]` 和识别的提供商特定 ID 匹配到同一条目。1295Claude Code 会将每个条目写在模型的规范名称下(例如 `claude-opus-5-5`),并将该模型的别名、带日期后缀的 ID、`[1m]` ID 以及可识别的特定于提供商的 ID 匹配到同一条目。

1295 1296 

1296此示例将 Opus 5.5 保持在 `high`,而其他模型使用它们自己的保存或默认级别:1297此示例将 Opus 5.5 保持在 `high`,而其他模型使用各自已保存的级别或默认级别:

1297 1298 

1298```json settings.json theme={null}1299```json settings.json theme={null}

1299{1300{


1305}1306}

1306```1307```

1307 1308 

1308运行 `/effort auto` 以清除您为正在使用的模型保存的级别。Claude Code 保留其他条目和任何顶级 `effortLevel`。1309运行 `/effort auto` 可清除您为当前所用模型保存的级别。Claude Code 会保留其他条目以及任何顶层 `effortLevel`。

1309 1310 

1310<h3 id="outputstyle">1311<h3 id="outputstyle">

1311 `outputStyle`1312 `outputStyle`

1312</h3>1313</h3>

1313 1314 

1314按名称选择[输出样式](/docs/zh-CN/output-styles)。输出样式是一组保存的指令,改变 Claude 的角色、语气和输出格式,如内置的 Explanatory 和 Learning 样式或您自己写的。1315按名称选择[输出样式](/docs/zh-CN/output-styles)。输出样式是一组已保存的指令,用于改变 Claude 的角色、语气和输出格式,例如内置的 Explanatory 和 Learning 样式,或您自己编写的样式。

1315 1316 

1316如果您在会话期间更改此键,Claude 从您的下一条消息开始使用新样式。关于该消息在提示缓存中的成本,请参阅[更改输出样式](/docs/zh-CN/prompt-caching#changing-output-style)。在 v2.1.251 之前,编辑仅在您运行 `/clear` 或启动新会话后应用。1317如果您在会话期间更改此键,Claude 会从您的下一条消息开始使用新样式。关于该消息在提示缓存方面的成本,请参阅[更改输出样式](/docs/zh-CN/prompt-caching#changing-output-style)。在 v2.1.251 之前,编辑仅在您运行 `/clear` 或开始新会话后才生效。

1317 1318 

1318* **Scope**: [`Any file`](#scopes)1319* **作用域**:[`Any file`](#scopes)

1319* **Type**: string,[内置](/docs/zh-CN/output-styles#built-in-output-styles)或[自定义](/docs/zh-CN/output-styles#create-a-custom-output-style)输出样式的名称1320* **类型**:字符串,[内置](/docs/zh-CN/output-styles#built-in-output-styles)或[自定义](/docs/zh-CN/output-styles#create-a-custom-output-style)输出样式的名称

1320* **Default**: 未设置,因此 Claude Code 使用默认样式1321* **默认值**:未设置,因此 Claude Code 使用默认样式

1321 1322 

1322此示例选择内置的 Explanatory 样式,它在任务之间添加教育见解:1323此示例选择内置的 Explanatory 样式,该样式会在任务之间添加教育性见解:

1323 1324 

1324```json settings.json theme={null}1325```json settings.json theme={null}

1325{1326{


1331 `promptCacheTtl`1332 `promptCacheTtl`

1332</h3>1333</h3>

1333 1334 

1334选择[提示缓存](/docs/zh-CN/prompt-caching)保持主对话的时间长度。此键适用于您的交互式、`-p` 和 Agent SDK 轮,以及 Claude Code 与它们内联运行的助手。一小时的生命周期在较长的中断中保持缓存温暖,API [在五分钟生命周期的更高费率下计费每个缓存写入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。需要 Claude Code v2.1.242 或更高版本。1335选择[提示缓存](/docs/zh-CN/prompt-caching)保留主对话的时长。此键适用于您的交互式、`-p` 和 Agent SDK 轮次,以及 Claude Code 随这些轮次内联运行的辅助请求。一小时的生命周期可在较长的间隔中保持缓存预热,而 API 对每次缓存写入的[计费费率](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)高于五分钟生命周期。需要 Claude Code v2.1.242 或更高版本。

1335 1336 

1336* **Scope**: [`Any file`](#scopes)1337* **作用域**:[`Any file`](#scopes)

1337* **Type**: string,其中一个:1338* **类型**:字符串,取值之一:

1338 * `"5m"`: 缓存保持五分钟1339 * `"5m"`:缓存保留五分钟

1339 * `"1h"`: 缓存保持一小时1340 * `"1h"`:缓存保留一小时

1340* **Default**: 未设置,因此每个主对话请求获得[其默认生命周期](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)1341* **默认值**:未设置,因此每个主对话请求都会获得[其默认生命周期](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)

1341* **Per-session overrides**: [`FORCE_PROMPT_CACHING_5M`](/docs/zh-CN/env-vars)优先于所有其他,然后[`CLAUDE_CODE_PROMPT_CACHE_TTL`](/docs/zh-CN/env-vars),然后此键,最后[`ENABLE_PROMPT_CACHING_1H`](/docs/zh-CN/env-vars)1342* **单会话覆盖**:[`FORCE_PROMPT_CACHING_5M`](/docs/zh-CN/env-vars) 优先于其他所有项,其次是 [`CLAUDE_CODE_PROMPT_CACHE_TTL`](/docs/zh-CN/env-vars),然后是此键,最后是 [`ENABLE_PROMPT_CACHING_1H`](/docs/zh-CN/env-vars)

1342 1343 

1343此示例将主对话保持在一小时生命周期,并将 subagents 保留在五分钟:1344此示例使主对话保持一小时生命周期,并使子代理保持五分钟:

1344 1345 

1345```json settings.json theme={null}1346```json settings.json theme={null}

1346{1347{


1349}1350}

1350```1351```

1351 1352 

1352关于每个生命周期的成本,请参阅[缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime)。1353关于每种生命周期的成本,请参阅[缓存生命周期](/docs/zh-CN/prompt-caching#cache-lifetime)。

1353 1354 

1354<h3 id="showthinkingsummaries">1355<h3 id="showthinkingsummaries">

1355 `showThinkingSummaries`1356 `showThinkingSummaries`

1356</h3>1357</h3>

1357 1358 

1358在交互式会话中查看 Claude 的[扩展思考](/docs/zh-CN/model-config#extended-thinking)摘要。如果您想在使用 `Ctrl+O` 展开思考时看到完整摘要,请设置它。未设置或 `false` 时,Anthropic API 编辑思考块,Claude Code 显示折叠的存根;第三方提供商不编辑。1359在交互式会话中查看 Claude [扩展思考](/docs/zh-CN/model-config#extended-thinking)的摘要。如果您希望在使用 `Ctrl+O` 展开思考时看到完整摘要,请设置此项。当未设置或为 `false` 时,Anthropic API 会对思考块进行编辑隐藏,Claude Code 会显示一个折叠的占位内容;第三方提供商不会进行编辑隐藏。

1359 1360 

1360* **Scope**: [`Any file`](#scopes)1361* **作用域**:[`Any file`](#scopes)

1361* **Type**: Boolean1362* **类型**:布尔值

1362 * `true`: 当您使用 `Ctrl+O` 展开思考时,您看到完整的思考摘要1363 * `true`:使用 `Ctrl+O` 展开思考时,您会看到完整的思考摘要

1363 * `false`: Anthropic API 编辑思考块,Claude Code 显示折叠的存根1364 * `false`:Anthropic API 会对思考块进行编辑隐藏,Claude Code 会显示一个折叠的占位内容

1364* **Default**: `false`1365* **默认值**:`false`

1365 1366 

1366```json settings.json theme={null}1367```json settings.json theme={null}

1367{1368{


1369}1370}

1370```1371```

1371 1372 

1372编辑仅改变您看到的内容,而不是模型生成的内容。要减少思考支出,[降低预算或禁用思考](/docs/zh-CN/model-config#extended-thinking)。1373编辑隐藏只会改变您看到的内容,而不会改变模型生成的内容。要减少思考开销,请改为[降低预算或禁用思考](/docs/zh-CN/model-config#extended-thinking)。

1373 1374 

1374<h3 id="subagentpromptcachettl">1375<h3 id="subagentpromptcachettl">

1375 `subagentPromptCacheTtl`1376 `subagentPromptCacheTtl`

1376</h3>1377</h3>

1377 1378 

1378选择[提示缓存](/docs/zh-CN/prompt-caching)保持 Claude Code 在主对话外进行的请求的时间长度。此键适用于[subagents](/docs/zh-CN/sub-agents)、[workflows](/docs/zh-CN/workflows) 和 Claude Code 自己的后台和助手请求,如压缩和会话标题。一小时的生命周期在较长的中断中保持缓存温暖,API [在五分钟生命周期的更高费率下计费每个缓存写入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。需要 Claude Code v2.1.242 或更高版本。1379选择[提示缓存](/docs/zh-CN/prompt-caching)保留 Claude Code 在主对话之外发出的请求的时长。此键适用于[子代理](/docs/zh-CN/sub-agents)、[工作流](/docs/zh-CN/workflows)以及 Claude Code 自身的后台和辅助请求,例如压缩和会话标题。一小时的生命周期可在较长的间隔中保持缓存预热,而 API 对每次缓存写入的[计费费率](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)高于五分钟生命周期。需要 Claude Code v2.1.242 或更高版本。

1379 1380 

1380* **Scope**: [`Any file`](#scopes)1381* **作用域**:[`Any file`](#scopes)

1381* **Type**: string,其中一个:1382* **类型**:字符串,取值之一:

1382 * `"5m"`: 缓存保持五分钟1383 * `"5m"`:缓存保留五分钟

1383 * `"1h"`: 缓存保持一小时1384 * `"1h"`:缓存保留一小时

1384* **Default**: 未设置,因此这些请求中的每一个获得[其默认生命周期](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)1385* **默认值**:未设置,因此这些请求中的每一个都会获得[其默认生命周期](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)

1385* **Per-session overrides**: [`FORCE_PROMPT_CACHING_5M`](/docs/zh-CN/env-vars)优先于所有其他,然后[`CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`](/docs/zh-CN/env-vars),然后此键,然后[`ENABLE_PROMPT_CACHING_1H`](/docs/zh-CN/env-vars),它要求每个请求的一小时生命周期。关于 subagent 自己的 frontmatter 值的排名,请参阅[自己选择 TTL](/docs/zh-CN/prompt-caching#choose-the-ttl-yourself)1386* **单会话覆盖**:[`FORCE_PROMPT_CACHING_5M`](/docs/zh-CN/env-vars) 优先于其他所有项,其次是 [`CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`](/docs/zh-CN/env-vars),然后是此键,再然后是 [`ENABLE_PROMPT_CACHING_1H`](/docs/zh-CN/env-vars)(它会为每个请求请求一小时生命周期)。关于子代理自身 frontmatter 值的优先级位置,请参阅[自行选择 TTL](/docs/zh-CN/prompt-caching#choose-the-ttl-yourself)

1386 1387 

1387此示例为 subagents 和主对话外的其他请求提供一小时生命周期:1388此示例为子代理以及主对话之外的其他请求设置一小时生命周期:

1388 1389 

1389```json settings.json theme={null}1390```json settings.json theme={null}

1390{1391{


1392}1393}

1393```1394```

1394 1395 

1395此键涵盖[`promptCacheTtl`](#promptcachettl)不涵盖的请求,因此设置两者以为 Claude Code 进行的每个请求选择生命周期。关于 subagent 的缓存与主对话的缓存的不同之处,请参阅[Subagents 和缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)。1396此键涵盖 [`promptCacheTtl`](#promptcachettl) 未涵盖的请求,因此同时设置二者即可为 Claude Code 发出的每个请求选择生命周期。关于子代理的缓存与主对话缓存有何不同,请参阅[子代理与缓存](/docs/zh-CN/prompt-caching#subagents-and-the-cache)。

1396 1397 

1397<h3 id="switchmodelsonflag">1398<h3 id="switchmodelsonflag">

1398 `switchModelsOnFlag`1399 `switchModelsOnFlag`

1399</h3>1400</h3>

1400 1401 

1401选择当[安全分类器标记请求](/docs/zh-CN/model-config#automatic-model-fallback)时会发生什么:切换到备用模型并继续,或暂停以便您可以在切换和编辑提示之间选择。1402选择当[安全分类器标记请求](/docs/zh-CN/model-config#automatic-model-fallback)时会发生什么:切换到备用模型并继续,或暂停以便您在切换和编辑提示词之间进行选择。

1402 1403 

1403* **Scope**: [`Any file`](#scopes)。在 `/config` 中显示为 **Switch models when a message is flagged**,选项为 **Switch automatically** 和 **Ask each time**。1404* **作用域**:[`Any file`](#scopes)。在 `/config` 中显示为 **Switch models when a message is flagged**,选项为 **Switch automatically** 和 **Ask each time**。

1404* **Type**: Boolean1405* **类型**:布尔值

1405 * `true`: Claude Code 切换到备用模型并继续1406 * `true`:Claude Code 切换到备用模型并继续

1406 * `false`: 在交互式会话中,Claude Code 暂停以便您可以在切换和编辑提示之间选择;在无法显示对话框的地方,如 `-p` 运行,标记的请求以错误结束1407 * `false`:在交互式会话中,Claude Code 会暂停,以便您在切换和编辑提示词之间进行选择;在无法显示对话框的情况下(例如 `-p` 运行),被标记的请求会以错误结束

1407* **Default**: 未设置。Claude Code 会自动切换,但在交互式会话中可能会[先询问](/docs/zh-CN/model-config#ask-before-switching)1408* **默认值**:未设置。Claude Code 会自动切换,但在交互式会话中可能会[先询问](/docs/zh-CN/model-config#ask-before-switching)

1408 1409 

1409```json settings.json theme={null}1410```json settings.json theme={null}

1410{1411{


1412}1413}

1413```1414```

1414 1415 

1415请参阅[在切换前询问](/docs/zh-CN/model-config#ask-before-switching)。1416请参阅[切换前询问](/docs/zh-CN/model-config#ask-before-switching)。

1416 1417 

1417<h3 id="ultracode">1418<h3 id="ultracode">

1418 `ultracode`1419 `ultracode`

1419</h3>1420</h3>

1420 1421 

1421使用[ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode)启动会话。打开时,Claude 为每个实质性任务规划工作流,而不是等待您要求。Claude 仅在为您启用[动态工作流](/docs/zh-CN/workflows)且您的模型支持 `xhigh` 努力时规划工作流。该键不改变会话的努力级别:ultracode 在会话使用的任何级别处运行。Claude Code 读取此键但从不写入它:`/effort ultracode` 仅为当前会话打开 ultracode。1422以开启 [ultracode](/docs/zh-CN/workflows#let-claude-decide-with-ultracode) 的状态启动会话。开启后,Claude 会为每个实质性任务规划工作流,而不是等待您提出要求。只有当您启用了[动态工作流](/docs/zh-CN/workflows)且您的模型支持 `xhigh` effort 时,Claude 才会规划工作流。此键不会改变会话的 effort 级别:ultracode 会以会话所用的任何级别运行。Claude Code 会读取此键,但从不写入它:`/effort ultracode` 仅在当前会话中开启 ultracode。

1422 1423 

1423* **Scope**: [`Any file`](#scopes)1424* **作用域**:[`Any file`](#scopes)

1424* **Type**: Boolean1425* **类型**:布尔值

1425 * `true`: 当为您启用动态工作流且您的模型支持 `xhigh` 时,会话以 ultracode 打开启动1426 * `true`:当您启用了动态工作流且您的模型支持 `xhigh` 时,会话以开启 ultracode 的状态启动

1426 * `false`: 会话以 ultracode 关闭启动1427 * `false`:会话以关闭 ultracode 的状态启动

1427* **Default**: 未设置,因此 ultracode 已关闭1428* **默认值**:未设置,因此 ultracode 处于关闭状态

1428* **Per-session overrides**: `/effort ultracode` 在没有此键的情况下为一个会话打开 ultracode,而当此键为 `true` 时,`/effort ultracode off` 为一个会话关闭它。`--effort ultracode` 标志也为一个会话打开它,在 `xhigh` 努力处,需要 Claude Code v2.1.203 或更高版本1429* **单会话覆盖**:`/effort ultracode` 可在没有此键的情况下为单个会话开启 ultracode,而当此键为 `true` 时,`/effort ultracode off` 可为单个会话关闭它。`--effort ultracode` 标志也会为单个会话开启它,并使用 `xhigh` effort

1429 1430 

1430```json settings.json theme={null}1431```json settings.json theme={null}

1431{1432{


1433}1434}

1434```1435```

1435 1436 

1436会话的努力级别来自[`effortLevel`](#effortlevel)、[`modelSettings`](#modelsettings) 和其他[努力源](/docs/zh-CN/model-config#adjust-effort-level),[努力上限](/docs/zh-CN/model-config#organization-effort-limits)如[`maxEffortLevel`](#maxeffortlevel)降低该级别而不关闭 ultracode。这和 `/effort ultracode off` 形式需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,`ultracode: true` 在 `xhigh` 努力处运行会话,低于 `xhigh` 的努力上限使 ultracode 在上限适用的模型上不可用。Agent SDK `apply_flag_settings` 控制请求也接受该键。1437会话的 effort 级别来自 [`effortLevel`](#effortlevel)、[`modelSettings`](#modelsettings) 以及其他 [effort 来源](/docs/zh-CN/model-config#adjust-effort-level),而诸如 [`maxEffortLevel`](#maxeffortlevel) 之类的 [effort 上限](/docs/zh-CN/model-config#organization-effort-limits)会降低该级别,但不会关闭 ultracode。此行为以及 `/effort ultracode off` 形式需要 Claude Code v2.1.284 或更高版本。在 v2.1.284 之前,`ultracode: true` 会以 `xhigh` effort 运行会话,而低于 `xhigh` 的 effort 上限会使 ultracode 保持关闭。Agent SDK 的 `apply_flag_settings` 控制请求也接受此键。

1437 1438 

1438<h2 id="permission-settings">1439<h2 id="permission-settings">

1439 权限设置1440 权限设置


2952}2953}

2953```2954```

2954 2955 

2955手动 `/compact` 命令在自动压缩关闭时继续工作。2956手动 `/compact` 命令在自动压缩关闭时继续工作。如果您关闭自动压缩,[空闲压缩](#idlecompaction)也会随之关闭。

2956 2957 

2957<h3 id="autocompactwindow">2958<h3 id="autocompactwindow">

2958 `autoCompactWindow`2959 `autoCompactWindow`


3133 * 改变 Claude Code 如何启动或同步的变量,例如 `CLAUDE_CODE_PROCESS_WRAPPER`、`CLAUDE_CODE_SYNC_SKILLS`、`CLAUDE_CODE_SYNC_PLUGINS`、`CLAUDE_CODE_PLUGIN_CACHE_DIR` 和 `CLAUDE_CODE_PLUGIN_SEED_DIR`。3134 * 改变 Claude Code 如何启动或同步的变量,例如 `CLAUDE_CODE_PROCESS_WRAPPER`、`CLAUDE_CODE_SYNC_SKILLS`、`CLAUDE_CODE_SYNC_PLUGINS`、`CLAUDE_CODE_PLUGIN_CACHE_DIR` 和 `CLAUDE_CODE_PLUGIN_SEED_DIR`。

3134 * 设置未应答对话框计时器的变量:[`CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS`、`CLAUDE_AFK_TIMEOUT_MS` 和 `CLAUDE_AFK_COUNTDOWN_MS`](/docs/zh-CN/env-vars#variables)。3135 * 设置未应答对话框计时器的变量:[`CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS`、`CLAUDE_AFK_TIMEOUT_MS` 和 `CLAUDE_AFK_COUNTDOWN_MS`](/docs/zh-CN/env-vars#variables)。

3135 * [`CLAUDE_CODE_DISABLE_ATTACHMENTS`](/docs/zh-CN/env-vars#variables),它会关闭附件处理。3136 * [`CLAUDE_CODE_DISABLE_ATTACHMENTS`](/docs/zh-CN/env-vars#variables),它会关闭附件处理。

3137 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](/docs/zh-CN/env-vars#variables),它会阻止 Claude Code 展开对文件和目录的 `@` 提及。

3136 3138 

3137 在 v2.1.251 之前,项目和本地设置也可以设置此列表中选择 Claude Code 写入其文件位置或导出会话内容的变量,除了 `HOME` 和 `XDG_CONFIG_HOME`。在 v2.1.290 之前,它们还可以设置对话框计时器变量和 `CLAUDE_CODE_DISABLE_ATTACHMENTS`。3139 在 v2.1.251 之前,项目和本地设置也可以设置此列表中选择 Claude Code 写入其文件位置或导出会话内容的变量,除了 `HOME` 和 `XDG_CONFIG_HOME`。在 v2.1.290 之前,它们还可以设置对话框计时器变量和 `CLAUDE_CODE_DISABLE_ATTACHMENTS`。

3138* Claude Code 的托管环境拥有的身份变量,例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`,从每个文件中被忽略。3140* Claude Code 的托管环境拥有的身份变量,例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`,从每个文件中被忽略。


3163 3165 

3164在 `-p` 运行或 Agent SDK 会话中,Claude Code 忽略此键。SDK 使用其 `enableFileCheckpointing` 选项打开检查点,裸 `-p` 运行需要 `CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING=true`。请参阅 [Agent SDK 中的文件检查点](/docs/zh-CN/agent-sdk/file-checkpointing)。3166在 `-p` 运行或 Agent SDK 会话中,Claude Code 忽略此键。SDK 使用其 `enableFileCheckpointing` 选项打开检查点,裸 `-p` 运行需要 `CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING=true`。请参阅 [Agent SDK 中的文件检查点](/docs/zh-CN/agent-sdk/file-checkpointing)。

3165 3167 

3168<h3 id="idlecompaction">

3169 `idleCompaction`

3170</h3>

3171 

3172空闲压缩会在提示缓存过期前不久,[压缩](/docs/zh-CN/context-window#what-survives-compaction)您已离开的长对话。这样您的下一条消息发送的是摘要,而不是整个对话。当您回来时,对话会显示 `Compacted while idle, before the prompt cache expired`。

3173 

3174对于满足以下所有条件的对话,空闲压缩默认处于开启状态:

3175 

3176* **会话**:您处于交互式终端会话中

3177* **提示缓存**:该对话使用[一小时提示缓存 TTL](/docs/zh-CN/prompt-caching#which-ttl-each-request-gets)

3178* **功能标志**:Claude Code 可以[从 Anthropic 获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)

3179* **大小**:对话的上下文已达到 token 阈值,您可以将该阈值从默认的 200,000 [进行更改](#change-the-idle-compaction-threshold)

3180* **空闲时间**:自上次请求以来已过去约 54 分钟,且此时您的计算机处于唤醒状态

3181 

3182要关闭空闲压缩,请将此键设置为 `false`。

3183 

3184* **Scope**: [`Any file`](#scopes)

3185* **Type**: Boolean

3186 * `true`: Claude Code 压缩满足条件的空闲对话

3187 * `false`: Claude Code 在您的会话空闲时不进行压缩

3188* **Default**: `true`

3189* **Per-session overrides**: [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 会在关闭自动压缩的同时关闭空闲压缩

3190 

3191```json settings.json theme={null}

3192{

3193 "idleCompaction": false

3194}

3195```

3196 

3197此键需要 Claude Code v2.1.290 或更高版本。在会忽略此键的早期版本上,请关闭 [`autoCompactEnabled`](#autocompactenabled) 以停止空闲压缩。

3198 

3199<h4 id="change-the-idle-compaction-threshold">

3200 更改空闲压缩阈值

3201</h4>

3202 

3203将 [`CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS`](/docs/zh-CN/env-vars) 设置为对话上下文必须达到的 token 数,达到后空闲压缩才会应用于该对话。请使用正整数。低于 `100000` 的值会被提高到最低阈值 `100000`。

3204 

3205在默认值下,使用 200K 上下文窗口的对话会在达到 200,000 个 token 之前自动压缩。此示例将阈值降低到 150,000,使这些对话符合条件:

3206 

3207```json settings.json theme={null}

3208{

3209 "env": {

3210 "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "150000"

3211 }

3212}

3213```

3214 

3166<h3 id="plansdirectory">3215<h3 id="plansdirectory">

3167 `plansDirectory`3216 `plansDirectory`

3168</h3>3217</h3>


4209}4258}

4210```4259```

4211 4260 

4261如果您在[非交互模式](/docs/zh-CN/headless)或 Agent SDK 中替换系统提示词,即使此键为 `true`,会话启动时也不会包含快照:

4262 

4263* **`-p` 运行**:当您传递 [`--system-prompt`](/docs/zh-CN/cli-reference#system-prompt-flags) 或 `--system-prompt-file` 时,即替换了提示词。当您运行带有自己提示词的自定义 Agent(通过 [`--agent`](/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 或 [`agent`](#agent) 设置选择)时,也会替换提示词。在 [bare 模式](/docs/zh-CN/headless#start-faster-with-bare-mode)之外,要保留快照,请不使用自定义 Agent 运行,并使用 [`--append-system-prompt`](/docs/zh-CN/cli-reference#system-prompt-flags) 添加您的说明,而不是替换提示词。

4264* **[Agent SDK](/docs/zh-CN/agent-sdk/modifying-system-prompts)**:当您使用自定义系统提示词或自定义主线程 Agent 时,即替换了提示词。如果您未设置系统提示词,SDK 会使用其最小默认值,会话启动时同样不包含快照。在 [bare 模式](/docs/zh-CN/headless#start-faster-with-bare-mode)之外,要保留快照,请使用 `claude_code` 预设且不使用自定义 `agent`。

4265 

4212<h3 id="prurltemplate">4266<h3 id="prurltemplate">

4213 `prUrlTemplate`4267 `prUrlTemplate`

4214</h3>4268</h3>


5175 5229 

5176内置插件在同一键下存储其选项,带 `@builtin` 后缀。例如,控制 Claude Code 是否读取 `AGENTS.md` 文件的 [**Project instructions**](/docs/zh-CN/memory#choose-which-instruction-files-load) 设置是 `pluginConfigs["cc-plugin-agents-md@builtin"].options.instructionFiles`。在 v2.1.285 之前,该插件的 ID 为 `agents-md@builtin`。更高版本会读取任一 ID 下的条目。5230内置插件在同一键下存储其选项,带 `@builtin` 后缀。例如,控制 Claude Code 是否读取 `AGENTS.md` 文件的 [**Project instructions**](/docs/zh-CN/memory#choose-which-instruction-files-load) 设置是 `pluginConfigs["cc-plugin-agents-md@builtin"].options.instructionFiles`。在 v2.1.285 之前,该插件的 ID 为 `agents-md@builtin`。更高版本会读取任一 ID 下的条目。

5177 5231 

5178Claude Code 忽略项目和本地条目,因为它将这些值替换到 plugin hook、MCP 和 LSP 配置中,克隆的存储库不得能够提供它们。在 v2.1.207 之前,项目和本地设置也被读取。5232Claude Code 会忽略项目和本地条目,因为它会将这些值代入插件 hook、MCP 和 LSP 配置中,而克隆的仓库不得能够提供这些值。

5179 5233 

5180<h3 id="prependplugins">5234<h3 id="prependplugins">

5181 `prependPlugins`5235 `prependPlugins`


5680}5734}

5681```5735```

5682 5736 

5683在 git 存储库之外,失败的 [`WorktreeCreate` hook](/docs/zh-CN/worktrees#non-git-version-control) 释放块,以便会话可以就地编辑工作目录;该释放需要 Claude Code v2.1.203 或更高版本。5737在 git 仓库之外,失败的 [`WorktreeCreate` hook](/docs/zh-CN/worktrees#non-git-version-control) 会解除阻止,以便会话可以就地编辑工作目录。

5684 5738 

5685<h3 id="worktree-location">5739<h3 id="worktree-location">

5686 `worktree.location`5740 `worktree.location`

setup.md +1 −1

Details

226 226 

227运行 `claude doctor` 以查看最近一次更新尝试的结果。227运行 `claude doctor` 以查看最近一次更新尝试的结果。

228 228 

229在 macOS 和 Linux 上,原生安装程序将启动器作为 `~/.local/bin/claude` 处的符号链接管理到 `~/.local/share/claude/versions/`。如果您将该启动器替换为您自己的脚本或符号链接,自动更新和 `claude update` 会将其保留在原位:新版本仍然安装在 `versions/` 目录下,您的启动器决定运行哪个版本。在 v2.1.207 之前,自动更新程序在每次更新时都会将该路径处的自定义启动器替换为其自己的符号链接。229在 macOS 和 Linux 上,原生安装程序将启动器作为 `~/.local/bin/claude` 处的符号链接管理到 `~/.local/share/claude/versions/`。如果您将该启动器替换为您自己的脚本或符号链接,自动更新和 `claude update` 会将其保留在原位:新版本仍然安装在 `versions/` 目录下,您的启动器决定运行哪个版本。

230 230 

231使用自定义启动器,Claude Code 也会在磁盘上保留每个已安装的版本,因为它无法判断启动器需要哪个版本。`claude doctor` 报告原生安装程序未创建的启动器。231使用自定义启动器,Claude Code 也会在磁盘上保留每个已安装的版本,因为它无法判断启动器需要哪个版本。`claude doctor` 报告原生安装程序未创建的启动器。

232 232 

skills.md +26 −3

Details

31要关闭捆绑技能,请使用 [`disableBundledSkills`](/docs/zh-CN/settings-reference#disablebundledskills) 设置。31要关闭捆绑技能,请使用 [`disableBundledSkills`](/docs/zh-CN/settings-reference#disablebundledskills) 设置。

32 32 

33<Note>33<Note>

34 在 Claude Code v2.1.205 及更高版本中,当 `disableBundledSkills` 打开时,[`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查仍然可以输入。要隐藏它,请设置 `DISABLE_DOCTOR_COMMAND` 环境变量或 [`skillOverrides`](#override-skill-visibility-from-settings) 条目 `"doctor": "off"`。在 v2.1.205 之前,`/doctor` 是内置命令而不是捆绑技能。34 当 `disableBundledSkills` 打开时,[`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查仍然可以输入。要隐藏它,请设置 `DISABLE_DOCTOR_COMMAND` 环境变量或 [`skillOverrides`](#override-skill-visibility-from-settings) 条目 `"doctor": "off"`。

35</Note>35</Note>

36 36 

37捆绑技能与内置命令一起列在[命令参考](/docs/zh-CN/commands)中,在"目的"列中标记为**技能**。37捆绑技能与内置命令一起列在[命令参考](/docs/zh-CN/commands)中,在"目的"列中标记为**技能**。


69 69 

70`/verify` 也可以记录自己的配方。当它必须在没有记录的配方的情况下构建和驱动您的应用时,它会将有效的内容写入存储库根目录的 `.claude/skills/verify/SKILL.md`,或在 monorepo 中的受触及的包目录中,以便后续运行和其他 Agent 遵循相同的步骤。在存储库根目录,记录的 skill 替换随附的 `/verify`。70`/verify` 也可以记录自己的配方。当它必须在没有记录的配方的情况下构建和驱动您的应用时,它会将有效的内容写入存储库根目录的 `.claude/skills/verify/SKILL.md`,或在 monorepo 中的受触及的包目录中,以便后续运行和其他 Agent 遵循相同的步骤。在存储库根目录,记录的 skill 替换随附的 `/verify`。

71 71 

72Claude 仅在它引导运行出错时编辑记录的文件,例如失败的命令或缺少的步骤,因此您可以提交文件而无需每个会话的差异。在 v2.1.205 之前,捆绑技能告诉 Claude 折叠运行学到的任何内容,这导致频繁的合并冲突。72Claude 仅在它引导运行出错时编辑记录的文件,例如失败的命令或缺少的步骤,因此您可以提交该文件而不会产生每个会话的 diff。

73 73 

74<h3 id="run-your-checks-before-each-commit">74<h3 id="run-your-checks-before-each-commit">

75 在每次提交前运行检查75 在每次提交前运行检查


183* **符号链接文件夹**:enterprise、personal 或 project 位置中的 `<skill-name>` 条目可以是指向磁盘上其他位置的目录的符号链接。Claude Code 从目标读取 `SKILL.md` 并加载 skill,即使多个位置指向同一目标也只加载一次。插件 skills [以不同方式处理符号链接](/docs/zh-CN/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks)。183* **符号链接文件夹**:enterprise、personal 或 project 位置中的 `<skill-name>` 条目可以是指向磁盘上其他位置的目录的符号链接。Claude Code 从目标读取 `SKILL.md` 并加载 skill,即使多个位置指向同一目标也只加载一次。插件 skills [以不同方式处理符号链接](/docs/zh-CN/plugins/host-marketplace#share-files-within-a-marketplace-with-symlinks)。

184* **保留名称 `synced`**:不要将 skill 文件夹命名为 `synced`,无论大小写如何。Claude Code 使用 `~/.claude/skills/synced/` 来存放 [从 claude.ai 下载的 skills](#where-synced-skills-load),并跳过您在 enterprise、personal 和 project 位置中以该名称创作的 skill。184* **保留名称 `synced`**:不要将 skill 文件夹命名为 `synced`,无论大小写如何。Claude Code 使用 `~/.claude/skills/synced/` 来存放 [从 claude.ai 下载的 skills](#where-synced-skills-load),并跳过您在 enterprise、personal 和 project 位置中以该名称创作的 skill。

185* **保留名称 `anthropic-skills`**:在插件外,名称为 `anthropic-skills` 或以 `anthropic-skills:` 开头的 skill 文件夹或命令文件不会加载。请参阅 [为同步 skills 保留的名称](#names-reserved-for-synced-skills)。185* **保留名称 `anthropic-skills`**:在插件外,名称为 `anthropic-skills` 或以 `anthropic-skills:` 开头的 skill 文件夹或命令文件不会加载。请参阅 [为同步 skills 保留的名称](#names-reserved-for-synced-skills)。

186* **名称中的字符**:在插件外,当 skill 文件夹的名称包含零宽空格或 `<` 等字符时,它不会加载。请参阅 [skill 名称不能包含的字符](#characters-a-skill-name-cant-hold)。

186* **命令文件**:`.claude/commands/` 中的 Markdown 文件是较旧的格式,仍然有效。它支持相同的 [frontmatter](#frontmatter-reference),除了 `name` 和 `paths`。要找到您输入以调用它的名称,请参阅 [skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。对于新工作,更倾向于使用 skill,因为 skills 还支持 [支持文件](#add-supporting-files)。187* **命令文件**:`.claude/commands/` 中的 Markdown 文件是较旧的格式,仍然有效。它支持相同的 [frontmatter](#frontmatter-reference),除了 `name` 和 `paths`。要找到您输入以调用它的名称,请参阅 [skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。对于新工作,更倾向于使用 skill,因为 skills 还支持 [支持文件](#add-supporting-files)。

187* **Skill 文件夹作为插件**:将 `.claude-plugin/plugin.json` 添加到 skill 文件夹,它将作为 [插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 加载,名称为 `<name>@skills-dir`,因此它可以捆绑代理、hooks 和 MCP 服务器。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。188* **Skill 文件夹作为插件**:将 `.claude-plugin/plugin.json` 添加到 skill 文件夹,它将作为 [插件](/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 加载,名称为 `<name>@skills-dir`,因此它可以捆绑代理、hooks 和 MCP 服务器。在项目的 `.claude/skills/` 中,这需要首先接受工作区信任对话框。

188 189 


495 496 

496对于插件根目录的 `SKILL.md`,没有可供获取名称的 skill 目录,因此由 `name` 提供整个最后一段。如果没有 `name` 字段,Claude Code 会回退到插件的目录名称。497对于插件根目录的 `SKILL.md`,没有可供获取名称的 skill 目录,因此由 `name` 提供整个最后一段。如果没有 `name` 字段,Claude Code 会回退到插件的目录名称。

497 498 

499<h4 id="characters-a-skill-name-cant-hold">

500 skill 名称不能包含的字符

501</h4>

502 

503如果某个 skill 或自定义命令没有出现在 `/` 菜单中,或者菜单未显示 skill 的 frontmatter `name`,请检查该名称。如果命令名称或 frontmatter `name` 包含以下这类字符,Claude Code 会拒绝该名称:

504 

505* 零宽空格或控制字符

506* 私用区字符或未分配字符,例如图标字体中的字形

507* 会改变其周围文本方向的字符

508* 除单词之间的单个普通空格以外的空白,例如不间断空格、连续两个空格,或位于开头或结尾的空格

509* `<` 或 `>`

510 

511当 Claude Code 拒绝自定义命令或 skill 的目录名或文件名时,该命令或 skill 不会加载。请重命名该文件夹或文件以移除这些字符。如果这些字符仅出现在插件 skill 文件夹的名称或其 frontmatter `name` 中,skill 仍会加载:

512 

513* **插件 `skills/` 目录或其清单的 [`skills` 路径](/docs/zh-CN/plugins/components#skills)中的文件夹**:无需重命名该文件夹。这些字符在 skill 的命令名称中会变为连字符,因此输入命令时请使用连字符。

514* **Frontmatter `name`**:`/` 菜单不会显示该 `name` 值,输入它也无法调用该 skill。请编辑 `name:` 行以移除这些字符。

515 

516要找出 Claude Code 拒绝了哪个名称,请在 shell 中使用 [`claude --debug`](/docs/zh-CN/cli-reference#cli-flags) 启动它,并在[调试日志](/docs/zh-CN/debug-your-config)中搜索 `[names]`。在交互式会话中,[启动通知](/docs/zh-CN/errors#skill-or-command-name-refused)也会告知您有名称被拒绝。重命名或编辑 `name:` 行后,请重新启动会话,除非该文件位于 Claude Code [监视更改](#live-change-detection)的目录中。

517 

498<h4 id="available-string-substitutions">518<h4 id="available-string-substitutions">

499 可用的字符串替换519 可用的字符串替换

500</h4>520</h4>


858| 具有 `context: fork` 的技能 | 来自代理类型 | SKILL.md 内容 | CLAUDE.md,根据代理的[启动上下文](/docs/zh-CN/sub-agents#what-loads-at-startup) |878| 具有 `context: fork` 的技能 | 来自代理类型 | SKILL.md 内容 | CLAUDE.md,根据代理的[启动上下文](/docs/zh-CN/sub-agents#what-loads-at-startup) |

859| 具有 `skills` 字段的子代理 | 子代理的 markdown 主体 | Claude 的委派消息 | 预加载的技能 + CLAUDE.md,根据子代理的[启动上下文](/docs/zh-CN/sub-agents#what-loads-at-startup) |879| 具有 `skills` 字段的子代理 | 子代理的 markdown 主体 | Claude 的委派消息 | 预加载的技能 + CLAUDE.md,根据子代理的[启动上下文](/docs/zh-CN/sub-agents#what-loads-at-startup) |

860 880 

861使用 `context: fork`,你在你的技能中编写任务并选择一个代理类型来执行它。内置的 Explore 和 Plan 代理[跳过 CLAUDE.md 和 git 状态](/docs/zh-CN/sub-agents#what-loads-at-startup)以保持其上下文较小,因此使用 `agent: Explore` 的分叉技能仅看到 SKILL.md 内容和代理自己的系统提示。对于相反的情况,你定义一个使用技能作为参考材料的自定义子代理,请参阅[子代理](/docs/zh-CN/sub-agents#preload-skills-into-subagents)。881使用 `context: fork` 时,您在 skill 中编写任务,并选择一个 Agent 类型来执行它。内置的 Explore 和 Plan Agent [启动时不加载 CLAUDE.md 和 git 状态](/docs/zh-CN/sub-agents#what-loads-at-startup),以保持其上下文精简。请将任务所需的一切都放在您的 SKILL.md 中。使用 `agent: Explore` 的分叉 skill 启动时只包含该内容和 Agent 自己的系统提示词,不包含您的任何 CLAUDE.md 文件。

882 

883对于相反的情况,即定义一个将 skill 用作参考材料的自定义子代理,请参阅[子代理](/docs/zh-CN/sub-agents#preload-skills-into-subagents)。

862 884 

863<h4 id="example-research-skill-using-explore-agent">885<h4 id="example-research-skill-using-explore-agent">

864 示例:使用 Explore 代理的研究技能886 示例:使用 Explore 代理的研究技能


12472. 验证 skill 是否出现在 `What skills are available?` 中12692. 验证 skill 是否出现在 `What skills are available?` 中

12483. 尝试重新表述你的请求以更接近描述12703. 尝试重新表述你的请求以更接近描述

12494. 如果 skill 是用户可调用的,使用 `/skill-name` 直接调用它12714. 如果 skill 是用户可调用的,使用 `/skill-name` 直接调用它

12725. 如果 `/skill-name` 也无法被识别,请检查 Claude Code 是否[拒绝了该 skill 的名称](#characters-a-skill-name-cant-hold)

1250 1273 

1251如果 frontmatter YAML 格式不正确,Claude Code 会加载 skill 主体但元数据为空,所以 `/skill-name` 仍然有效,但 Claude 无法匹配你的 `description`。使用 `--debug` 运行以查看解析错误。1274如果 frontmatter YAML 格式不正确,Claude Code 会加载 skill 主体但元数据为空,所以 `/skill-name` 仍然有效,但 Claude 无法匹配你的 `description`。使用 `--debug` 运行以查看解析错误。

1252 1275 

statusline.md +2 −2

Details

1198| `description` | string | 任务的简短描述,例如 Claude 在生成该子代理时给出的描述 |1198| `description` | string | 任务的简短描述,例如 Claude 在生成该子代理时给出的描述 |

1199| `label` | string | Claude Code 提供的任务简短进度摘要(如果有),否则与 `description` 文本相同 |1199| `label` | string | Claude Code 提供的任务简短进度摘要(如果有),否则与 `description` 文本相同 |

1200| `startTime` | number | 任务开始时间,以自 Unix 纪元以来的毫秒数表示 |1200| `startTime` | number | 任务开始时间,以自 Unix 纪元以来的毫秒数表示 |

1201| `model` | string,可选 | 任务运行所用的已解析模型 ID。在模型解析之前省略。需要 Claude Code v2.1.205 或更高版本 |1201| `model` | string,可选 | 任务运行所用的已解析模型 ID。在模型解析之前省略 |

1202| `effort` | string 或 number,可选 | 在子代理的[定义 frontmatter](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 中或单次调用时为其设置的推理 effort:`low`、`medium`、`high`、`xhigh`、`max` 或数字 token 预算。这是所配置的值,当模型不支持该级别时,Claude Code 实际应用的 effort 可能会有所不同。未设置 effort 时省略。需要 Claude Code v2.1.213 或更高版本 |1202| `effort` | string 或 number,可选 | 在子代理的[定义 frontmatter](/docs/zh-CN/sub-agents#supported-frontmatter-fields) 中或单次调用时为其设置的推理 effort:`low`、`medium`、`high`、`xhigh`、`max` 或数字 token 预算。这是所配置的值,当模型不支持该级别时,Claude Code 实际应用的 effort 可能会有所不同。未设置 effort 时省略。需要 Claude Code v2.1.213 或更高版本 |

1203| `contextWindowSize` | number,可选 | `model` 的上下文窗口(以 token 计),计算方式与主状态栏的 [`context_window.context_window_size`](#context-window-fields) 相同,因此您可以根据 `tokenCount` 渲染每行百分比。当 `model` 被省略时也会省略。需要 Claude Code v2.1.205 或更高版本 |1203| `contextWindowSize` | number,可选 | `model` 的上下文窗口(以 token 计),计算方式与主状态栏的 [`context_window.context_window_size`](#context-window-fields) 相同,因此您可以根据 `tokenCount` 渲染每行百分比。当 `model` 被省略时也会省略 |

1204| `tokenCount` | number | 子代理的累计 token 数,即默认行中显示的数值 |1204| `tokenCount` | number | 子代理的累计 token 数,即默认行中显示的数值 |

1205| `tokenSamples` | array of numbers | 最近最多 16 个 `tokenCount` 读数,每个刷新周期一个,按从旧到新排列,最后一个为当前值 |1205| `tokenSamples` | array of numbers | 最近最多 16 个 `tokenCount` 读数,每个刷新周期一个,按从旧到新排列,最后一个为当前值 |

1206| `cwd` | string | 子代理的工作目录:如果子代理在自己的目录(例如隔离的 worktree)中运行,则为该目录,否则为会话的工作目录 |1206| `cwd` | string | 子代理的工作目录:如果子代理在自己的目录(例如隔离的 worktree)中运行,则为该目录,否则为会话的工作目录 |

sub-agents.md +41 −12

Details

32 32 

33Claude Code 包括内置 subagents,Claude 在适当时自动使用。每个都继承父对话的权限规则;大多数运行时工具集受限。33Claude Code 包括内置 subagents,Claude 在适当时自动使用。每个都继承父对话的权限规则;大多数运行时工具集受限。

34 34 

35Explore 和 Plan 会跳过您的 CLAUDE.md 文件和 git 状态快照,以保持研究快速且成本低廉。所有其他内置和[自定义 subagent](#configure-subagents) 都会加载两者,除非其定义设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 字段以跳过用户、项目和本地 CLAUDE.md 文件。有关到达 subagent 的内容的完整分解,请参阅[启动时加载的内容](#what-loads-at-startup)。35Explore 和 Plan 启动时不加载您的 CLAUDE.md 文件和 git 状态快照,以保持研究快速且成本低廉。其他内置子代理和[自定义子代理](#configure-subagents)都会加载两者,除非您在自定义子代理的定义中设置 [`omitClaudeMd`](#supported-frontmatter-fields),使其启动时不加载用户、项目和本地 CLAUDE.md 文件。有关到达子代理的内容的完整分解,请参阅[启动时加载的内容](#what-loads-at-startup)。

36 36 

37<Tabs>37<Tabs>

38 <Tab title="Explore">38 <Tab title="Explore">


185 185 

186Claude Code 递归扫描 `.claude/agents/` 和 `~/.claude/agents/`,因此您可以将定义组织到子文件夹中,例如 `agents/review/` 或 `agents/research/`。子目录路径不会影响 subagent 的识别或调用方式,因为身份仅来自 `name` frontmatter 字段。186Claude Code 递归扫描 `.claude/agents/` 和 `~/.claude/agents/`,因此您可以将定义组织到子文件夹中,例如 `agents/review/` 或 `agents/research/`。子目录路径不会影响 subagent 的识别或调用方式,因为身份仅来自 `name` frontmatter 字段。

187 187 

188在整个树中保持 `name` 值唯一:如果同一 `.claude/agents/` 目录下的两个文件(包括其子文件夹)声明相同的名称,Claude Code 仅加载其中一个,由文件系统读取顺序选择,而不是有文档记录的优先级。在嵌套项目目录中,最接近工作目录的定义获胜,如上所述。[`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查报告同一目录中共享名称的文件,并建议重命名或删除除一个之外的所有文件。在 v2.1.205 之前,`/doctor` 打开一个诊断屏幕,列出重复项并显示哪个定义是活跃的。188在整个目录树中保持 `name` 值唯一:如果同一 `.claude/agents/` 目录(包括其子文件夹)下的两个文件声明了相同的名称,Claude Code 只会加载其中一个,由文件系统读取顺序决定,而不是由有文档记录的优先级决定。在嵌套的项目目录之间,如上所述,最接近工作目录的定义优先。[`/doctor`](/docs/zh-CN/commands#all-commands) 设置检查会报告同一目录中同名的文件,并建议重命名或删除其中除一个之外的所有文件。

189 189 

190Plugin `agents/` 目录也会被递归扫描。与项目和用户范围不同,plugin 的 `agents/` 目录内的子文件夹成为 [scoped identifier](#invoke-subagents-explicitly) 的一部分:plugin `my-plugin` 中位于 `agents/review/security.md` 的文件注册为 `my-plugin:review:security`。190Plugin `agents/` 目录也会被递归扫描。与项目和用户范围不同,plugin 的 `agents/` 目录内的子文件夹成为 [scoped identifier](#invoke-subagents-explicitly) 的一部分:plugin `my-plugin` 中位于 `agents/review/security.md` 的文件注册为 `my-plugin:review:security`。

191 191 


234JSON 中的每个顶级键是代理的名称,其值是该代理的定义。不要以 `-` 开头的名称。定义采用这些字段:234JSON 中的每个顶级键是代理的名称,其值是该代理的定义。不要以 `-` 开头的名称。定义采用这些字段:

235 235 

236* **`prompt`**:代理的系统提示,等同于基于文件的 subagents 中的 markdown 正文。`prompt` 可能为空。如果您选择一个具有空 `prompt` 且没有 `memory` 字段的代理作为会话的代理,使用 `--agent`,会话的系统提示保持不变。空 `prompt` 需要 Claude Code v2.1.281 或更高版本。236* **`prompt`**:代理的系统提示,等同于基于文件的 subagents 中的 markdown 正文。`prompt` 可能为空。如果您选择一个具有空 `prompt` 且没有 `memory` 字段的代理作为会话的代理,使用 `--agent`,会话的系统提示保持不变。空 `prompt` 需要 Claude Code v2.1.281 或更高版本。

237* **[Frontmatter 字段](#supported-frontmatter-fields)**:`description`、`tools`、`disallowedTools`、`model`、`permissionMode`、`mcpServers`、`hooks`、`maxTurns`、`skills`、`initialPrompt`、`memory`、`effort`、`background`、`omitClaudeMd` 和 `isolation`。237* **[Frontmatter 字段](#supported-frontmatter-fields)**:`description`、`tools`、`disallowedTools`、`model`、`permissionMode`、`mcpServers`、`hooks`、`maxTurns`、`autoCompactWindow`、`skills`、`initialPrompt`、`memory`、`effort`、`background`、`omitClaudeMd` 和 `isolation`。

238* **忽略的字段**:`color` 和 `experimental` 在此处不被接受,被忽略而不是拒绝。238* **忽略的字段**:`color` 和 `experimental` 在此处不被接受,被忽略而不是拒绝。

239 239 

240有关 Claude Code 对无法加载的值的处理,以及跳过该检查的标志和环境变量,请参阅 [`Invalid --agents configuration`](/docs/zh-CN/errors#invalid-agents-configuration)。240有关 Claude Code 对无法加载的值的处理,以及跳过该检查的标志和环境变量,请参阅 [`Invalid --agents configuration`](/docs/zh-CN/errors#invalid-agents-configuration)。


285 285 

286一个 subagent 在主对话的当前工作目录中启动。在 subagent 中,`cd` 命令不会在 Bash 或 PowerShell 工具调用之间持续,也不会影响主对话的工作目录。要给 subagent 一个隔离的存储库副本,请改为设置 [`isolation: worktree`](#supported-frontmatter-fields)。286一个 subagent 在主对话的当前工作目录中启动。在 subagent 中,`cd` 命令不会在 Bash 或 PowerShell 工具调用之间持续,也不会影响主对话的工作目录。要给 subagent 一个隔离的存储库副本,请改为设置 [`isolation: worktree`](#supported-frontmatter-fields)。

287 287 

288具有 `isolation: worktree` 的 subagent 在其 worktree 内运行其 Bash 和 PowerShell 命令。一个工作目录解析到您的主检出的命令,例如因为 worktree 目录在 subagent 运行时被删除,会失败并出现错误。在 v2.1.203 之前,这样的命令可能在主检出中运行。288具有 `isolation: worktree` 的子代理会在其 worktree 内运行 Bash 和 PowerShell 命令。如果某个命令的工作目录解析到了您的主检出,例如因为 worktree 目录在子代理运行期间被删除,该命令会失败并报错。

289 289 

290此工作目录检查涵盖包含您启动 Claude Code 的目录的整个存储库。当您的会话在其自己的链接 [worktree](/docs/zh-CN/worktrees) 中运行时,检查也涵盖该 worktree 链接的主检出。在 v2.1.210 之前,检查仅涵盖启动目录本身。一个工作目录解析到同一存储库中其他地方的命令,例如当您从 monorepo 子目录启动 Claude Code 时的存储库根目录,会在那里运行而不是失败。290此工作目录检查涵盖包含您启动 Claude Code 的目录的整个存储库。当您的会话在其自己的链接 [worktree](/docs/zh-CN/worktrees) 中运行时,检查也涵盖该 worktree 链接的主检出。在 v2.1.210 之前,检查仅涵盖启动目录本身。一个工作目录解析到同一存储库中其他地方的命令,例如当您从 monorepo 子目录启动 Claude Code 时的存储库根目录,会在那里运行而不是失败。

291 291 


306 306 

307配置一个 subagent 时,使用 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 在其文件顶部的 `---` 标记之间,并在关闭 `---` 后将其系统提示写为 Markdown。只有 `name` 和 `description` 是必需的。307配置一个 subagent 时,使用 YAML [frontmatter](/docs/zh-CN/glossary#frontmatter) 在其文件顶部的 `---` 标记之间,并在关闭 `---` 后将其系统提示写为 Markdown。只有 `name` 和 `description` 是必需的。

308 308 

309多字段名称使用 camelCase,例如 `maxTurns` 和 `disallowedTools`,必须与表格完全匹配:Claude Code 忽略它不识别的字段而不报告错误。要找出为什么 subagent 文件没有加载,请参阅 [Subagent files Claude Code skips](#subagent-files-claude-code-skips)。309多词字段名称使用 camelCase,例如 `maxTurns` 和 `disallowedTools`,并且必须与表格完全一致:Claude Code 会忽略它不识别的字段,且不报告错误。

310 

311* 要在已加载的子代理中查找拼写错误的字段,请在 shell 中运行 [`claude --debug`](/docs/zh-CN/cli-reference#cli-flags),并在 `~/.claude/debug/<session-id>.txt` 的调试日志中搜索 `does not recognize or apply`。调试日志会列出子代理文件中 Claude Code 不识别的最多五个顶级字段,并在存在相近的受支持字段时给出可能想要的名称。需要 Claude Code v2.1.296 或更高版本。

312* 要了解子代理文件为何未加载,请参阅[Claude Code 跳过的子代理文件](#subagent-files-claude-code-skips)。

310 313 

311| Field | 必需 | Description |314| Field | 必需 | Description |

312| :- | :- | :- |315| :- | :- | :- |


317| `model` | 否 | [Model](#choose-a-model) 使用:`sonnet`、`opus`、`haiku`、`fable`、完整模型 ID(例如,`claude-opus-5-5`)或 `inherit`。当您省略它时,Claude Code 在 [subagent model order](#choose-a-model) 中选择模型 |320| `model` | 否 | [Model](#choose-a-model) 使用:`sonnet`、`opus`、`haiku`、`fable`、完整模型 ID(例如,`claude-opus-5-5`)或 `inherit`。当您省略它时,Claude Code 在 [subagent model order](#choose-a-model) 中选择模型 |

318| `permissionMode` | 否 | [权限模式](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions`、`plan`,或作为 `default` 别名的 `manual`。对[插件子代理](#choose-the-subagent-scope)会被忽略 |321| `permissionMode` | 否 | [权限模式](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions`、`plan`,或作为 `default` 别名的 `manual`。对[插件子代理](#choose-the-subagent-scope)会被忽略 |

319| `maxTurns` | 否 | subagent 停止前的最大代理轮数。当 subagent 达到限制时,Claude Code 返回其输出标记为部分,Claude 可以 [resume it](#resume-subagents) 继续。部分标记需要 Claude Code v2.1.246 或更高版本 |322| `maxTurns` | 否 | subagent 停止前的最大代理轮数。当 subagent 达到限制时,Claude Code 返回其输出标记为部分,Claude 可以 [resume it](#resume-subagents) 继续。部分标记需要 Claude Code v2.1.246 或更高版本 |

323| `autoCompactWindow` | 否 | 将此子代理的[自动压缩窗口](#subagent-auto-compact-window)降低到 `100000` 至 `1000000` 之间的 token 数。需要 Claude Code v2.1.296 或更高版本 |

320| `skills` | 否 | [Skills](/docs/zh-CN/skills) 在启动时预加载到 subagent 的上下文中。注入完整的技能内容,而不仅仅是描述。Subagents 仍然可以通过 Skill 工具调用未列出的项目、用户和 plugin 技能 |324| `skills` | 否 | [Skills](/docs/zh-CN/skills) 在启动时预加载到 subagent 的上下文中。注入完整的技能内容,而不仅仅是描述。Subagents 仍然可以通过 Skill 工具调用未列出的项目、用户和 plugin 技能 |

321| `mcpServers` | 否 | [MCP servers](/docs/zh-CN/mcp) 对此 subagent 可用。每个条目要么是引用已配置服务器的服务器名称(例如,`"slack"`),要么是内联定义,其中服务器名称为键,完整的 [MCP server config](/docs/zh-CN/mcp#installing-mcp-servers) 为值。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |325| `mcpServers` | 否 | [MCP servers](/docs/zh-CN/mcp) 对此 subagent 可用。每个条目要么是引用已配置服务器的服务器名称(例如,`"slack"`),要么是内联定义,其中服务器名称为键,完整的 [MCP server config](/docs/zh-CN/mcp#installing-mcp-servers) 为值。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |

322| `hooks` | 否 | [Lifecycle hooks](#define-hooks-for-subagents) 限定于此 subagent。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |326| `hooks` | 否 | [Lifecycle hooks](#define-hooks-for-subagents) 限定于此 subagent。对于 [plugin subagents](#choose-the-subagent-scope) 被忽略 |

323| `memory` | 否 | [Persistent memory scope](#enable-persistent-memory):`user`、`project` 或 `local`。启用跨会话学习 |327| `memory` | 否 | [Persistent memory scope](#enable-persistent-memory):`user`、`project` 或 `local`。启用跨会话学习 |

324| `background` | 否 | 设置为 `true` 以即使 Claude 要求在前台运行也保持此 subagent 在后台。其中 [fork mode](#turn-fork-mode-on-or-off) 打开时,Claude Code 已经在 [background](#run-subagents-in-foreground-or-background) 中运行 Claude 生成的 subagents |328| `background` | 否 | 设置为 `true` 以即使 Claude 要求在前台运行也保持此 subagent 在后台。其中 [fork mode](#turn-fork-mode-on-or-off) 打开时,Claude Code 已经在 [background](#run-subagents-in-foreground-or-background) 中运行 Claude 生成的 subagents |

325| `omitClaudeMd` | 否 | 设置为 `true` 以启动此 subagent 而不使用用户、项目和本地 CLAUDE.md 文件;[managed policy files](/docs/zh-CN/memory#how-claude-md-files-load) 仍然加载,除了 [managed subagents](#choose-the-subagent-scope)。对于从 [delegation prompt](#what-loads-at-startup) 获取所需一切的 subagents 使用它。当代理通过 `--agent` 或 `agent` 设置作为主会话代理运行时被忽略。需要 Claude Code v2.1.271 或更高版本 |329| `omitClaudeMd` | 否 | 设置为 `true` 可使此子代理在启动时,其[初始上下文](#what-loads-at-startup)中不包含用户、项目和本地 CLAUDE.md 文件;[托管策略文件](/docs/zh-CN/memory#how-claude-md-files-load)仍会加载,但[托管子代理](#choose-the-subagent-scope)除外。适用于从委托提示词中获取所需一切的子代理。当该 Agent 通过 `--agent` 或 `agent` 设置作为主会话 Agent 运行时会被忽略。需要 Claude Code v2.1.271 或更高版本 |

326| `effort` | 否 | 此子代理活跃时的 effort 级别。覆盖会话的 effort 级别,但不覆盖 [`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars#variables) 环境变量。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。请参阅[选择 effort 级别](#choose-an-effort-level) |330| `effort` | 否 | 此子代理活跃时的 effort 级别。覆盖会话的 effort 级别,但不覆盖 [`CLAUDE_CODE_EFFORT_LEVEL`](/docs/zh-CN/env-vars#variables) 环境变量。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。请参阅[选择 effort 级别](#choose-an-effort-level) |

327| `isolation` | 否 | 设置为 `worktree` 以在临时 [git worktree](/docs/zh-CN/worktrees) 中运行 subagent,为其提供存储库的隔离副本,默认从您的 [default branch](/docs/zh-CN/worktrees#choose-the-base-branch) 分支,而不是父会话的 `HEAD`。如果 subagent 不进行任何更改,worktree 会自动清理 |331| `isolation` | 否 | 设置为 `worktree` 以在临时 [git worktree](/docs/zh-CN/worktrees) 中运行 subagent,为其提供存储库的隔离副本,默认从您的 [default branch](/docs/zh-CN/worktrees#choose-the-base-branch) 分支,而不是父会话的 `HEAD`。如果 subagent 不进行任何更改,worktree 会自动清理 |

328| `color` | 否 | Subagent 在任务列表和转录中的显示颜色。接受 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan` |332| `color` | 否 | Subagent 在任务列表和转录中的显示颜色。接受 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan` |


461* `WaitForMcpServers`465* `WaitForMcpServers`

462* `Workflow`466* `Workflow`

463 467 

464第二个过滤器适用于在后台运行的 subagents。除了 `Agent` 和 `ExitPlanMode`,它们遵循第一个过滤器的条件,无论 subagent 在哪里运行,后台 subagent 保留每个 MCP 工具但仅这些内置工具:`Read`、`Grep`、`Glob`、`LSP`、`Bash`、`PowerShell`、`Edit`、`Write`、`NotebookEdit`、`WebFetch`、`WebSearch`、`TodoWrite`、`Skill`、`ToolSearch`、`EnterWorktree`、`ExitWorktree`、`Monitor`、`TaskStop`、`SendMessage` 和 `Artifact`,加上 [`SubagentHandback`](/docs/zh-CN/tools-reference) 用于通过它报告的 subagent。Claude Code 从后台 subagent 删除每个其他内置工具,无论继承还是在 `tools` 字段中列出,因此相同的定义可以在前台和后台解析为不同的工具。删除报告没有错误,除非它使 `tools` 列表 [resolving to nothing](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools)。468第二个过滤器适用于在后台运行的 subagents。`Agent` 和 `ExitPlanMode` 无论 subagent 在哪里运行都遵循第一个过滤器的条件。除这两个工具外,后台 subagent 保留每个 MCP 工具,但内置工具仅保留这些:`Read`、`Grep`、`Glob`、`LSP`、`Bash`、`PowerShell`、`Edit`、`Write`、`NotebookEdit`、`WebFetch`、`WebSearch`、`TodoWrite`、`Skill`、`ToolSearch`、`EnterWorktree`、`ExitWorktree`、`Monitor`、`TaskStop`、`SendMessage` 和 `Artifact`,加上 [`SubagentHandback`](/docs/zh-CN/tools-reference) 用于通过它报告的 subagent。Claude Code 从后台 subagent 删除每个其他内置工具,无论继承还是在 `tools` 字段中列出,因此相同的定义可以在前台和后台解析为不同的工具。删除不会报告错误,除非它使 `tools` 列表[解析为空](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools)。

465 469 

466在 v2.1.280 之前,后台 subagents 无法使用 `LSP`。470在 v2.1.280 之前,后台 subagents 无法使用 `LSP`。

467 471 


914claude --agent code-reviewer918claude --agent code-reviewer

915```919```

916 920 

917除非该 Agent 的[提示词为空](#choose-the-subagent-scope),否则自定义子代理的系统提示词会完全替换默认的 Claude Code 系统提示词,效果与 [`--system-prompt`](/docs/zh-CN/cli-reference) 相同。`CLAUDE.md` 文件和项目记忆仍会通过正常的消息流加载,即使该 Agent 的定义设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 也是如此。921除非该 Agent 的[提示词为空](#choose-the-subagent-scope),否则自定义子代理的系统提示词会完全替换默认的 Claude Code 系统提示词,效果与 [`--system-prompt`](/docs/zh-CN/cli-reference) 相同。`CLAUDE.md` 文件和项目记忆仍会通过正常的消息流加载,即使该 Agent 的定义设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 也是如此。如果您使用 `-p` 以拥有自身提示词的自定义 Agent 身份运行会话,该会话启动时也不会包含 [Git 状态快照](/docs/zh-CN/settings-reference#includegitinstructions)。

918 922 

919Agent 名称会以 `@<name>` 的形式显示在启动标题中,方便您确认其已生效。923Agent 名称会以 `@<name>` 的形式显示在启动标题中,方便您确认其已生效。

920 924 


1150* **CLAUDE.md 文件**:主对话所加载的 [CLAUDE.md 层级结构](/docs/zh-CN/memory#how-claude-md-files-load)中的每一级,包括 `~/.claude/CLAUDE.md`、项目规则、`CLAUDE.local.md`、托管策略文件,以及作为项目指令加载的任何 [`AGENTS.md` 文件](/docs/zh-CN/memory#agents-md)。内置的 Explore 和 Plan Agent 会跳过这些。定义中设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 的子代理只加载托管策略文件;如果该定义来自[托管设置](#choose-the-subagent-scope),则一个也不加载。1154* **CLAUDE.md 文件**:主对话所加载的 [CLAUDE.md 层级结构](/docs/zh-CN/memory#how-claude-md-files-load)中的每一级,包括 `~/.claude/CLAUDE.md`、项目规则、`CLAUDE.local.md`、托管策略文件,以及作为项目指令加载的任何 [`AGENTS.md` 文件](/docs/zh-CN/memory#agents-md)。内置的 Explore 和 Plan Agent 会跳过这些。定义中设置了 [`omitClaudeMd`](#supported-frontmatter-fields) 的子代理只加载托管策略文件;如果该定义来自[托管设置](#choose-the-subagent-scope),则一个也不加载。

1151* **Git 状态**:子代理启动时 Claude Code 从您的仓库读取的快照。对于在该仓库的[自有 worktree](/docs/zh-CN/worktrees#isolate-subagents-with-worktrees) 中运行的子代理,快照会显示该 worktree 的分支、状态和最近的提交。在 Git 仓库之外或快照被关闭时不存在;请参阅 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions)。Explore 和 Plan 无论如何都会跳过它。1155* **Git 状态**:子代理启动时 Claude Code 从您的仓库读取的快照。对于在该仓库的[自有 worktree](/docs/zh-CN/worktrees#isolate-subagents-with-worktrees) 中运行的子代理,快照会显示该 worktree 的分支、状态和最近的提交。在 Git 仓库之外或快照被关闭时不存在;请参阅 [`includeGitInstructions`](/docs/zh-CN/settings-reference#includegitinstructions)。Explore 和 Plan 无论如何都会跳过它。

1152* **预加载的 skill**:Agent 的 [`skills` 字段](#preload-skills-into-subagents)中列出的每个 skill 的完整内容。内置 Agent 不预加载 skill。1156* **预加载的 skill**:Agent 的 [`skills` 字段](#preload-skills-into-subagents)中列出的每个 skill 的完整内容。内置 Agent 不预加载 skill。

1153* **同级名单**:一条[系统提醒](/docs/zh-CN/glossary#system-reminder),列出 `main` 以及会话中所有其他已命名的 Agent,每一个都是 [`SendMessage`](#resume-subagents) 的有效 `to` 值。需要 Claude Code v2.1.206 或更高版本。仅当子代理的工具包含 `SendMessage` 且至少有一个其他 Agent 拥有名称时才会出现该名单,无论该名称是 Claude 在生成时指定的,还是该 Agent 作为 [agent team](/docs/zh-CN/agent-teams) 队友运行。名单是子代理启动时拍摄的快照,因此之后命名的 Agent 不会出现在其中。1157* **同级名单**:一条[系统提醒](/docs/zh-CN/glossary#system-reminder),列出 `main` 以及会话中所有其他已命名的 Agent,每一个都是 [`SendMessage`](#resume-subagents) 的有效 `to` 值。仅当子代理的工具包含 `SendMessage` 且至少有一个其他 Agent 拥有名称时才会出现该名单,无论该名称是 Claude 在生成时指定的,还是该 Agent 作为 [agent team](/docs/zh-CN/agent-teams) 队友运行。名单是子代理启动时拍摄的快照,因此之后命名的 Agent 不会出现在其中。

1154 1158 

1155要在不加载用户、项目和本地 CLAUDE.md 文件的情况下启动您自己的某个子代理,请在其 frontmatter 或 `--agents` JSON 中设置 [`omitClaudeMd: true`](#supported-frontmatter-fields)。1159要在不加载用户、项目和本地 CLAUDE.md 文件的情况下启动您自己的某个子代理,请在其 frontmatter 或 `--agents` JSON 中设置 [`omitClaudeMd: true`](#supported-frontmatter-fields)。对于 Explore、Plan 以及设置了 `omitClaudeMd` 的子代理,当子代理处理某个子目录中的文件时,该子目录的 `CLAUDE.md` 和匹配的[路径作用域规则](/docs/zh-CN/memory#path-specific-rules)仍会[加载](/docs/zh-CN/memory#how-claude-md-files-load)。

1156 1160 

1157主对话在读取这些子代理的结果时仍拥有您的完整 CLAUDE.md,因此大多数规则无需传达给子代理本身。如果某条规则必须传达,例如"忽略 `vendor/` 目录",请在委托时给 Claude 的提示词中重新说明。1161主对话在读取这些子代理的结果时仍拥有您的完整 CLAUDE.md,因此大多数规则无需传达给子代理本身。如果某条规则必须传达,例如"忽略 `vendor/` 目录",请在委托时给 Claude 的提示词中重新说明。

1158 1162 


1196 1200 

1197当[该子代理所在的行仍在子代理面板中](#run-subagents-in-foreground-or-background)时,您可以在其会话记录中输入内容来亲自恢复它。此后,来自 Claude 的消息即可再次自动恢复它。1201当[该子代理所在的行仍在子代理面板中](#run-subagents-in-foreground-or-background)时,您可以在其会话记录中输入内容来亲自恢复它。此后,来自 Claude 的消息即可再次自动恢复它。

1198 1202 

1199恢复会在同一 ID 下启动该 Agent 的一次新运行,因此已失败或已完成的子代理会在任务列表和 Agent SDK 的任务事件中再次显示为运行中。在 v2.1.205 之前,在恢复的运行进行期间,它仍会显示之前的失败或已完成状态。1203恢复会在同一 ID 下启动该 Agent 的一次新运行,因此已失败或已完成的子代理会在任务列表和 Agent SDK 的任务事件中再次显示为运行中。

1200 1204 

1201`SendMessage` 会检查某个名称是否仍指向对话中先前通过该名称联系到的同一个 Agent。如果该名称已被较新的 Agent 占用(例如重新生成的后台 Agent 复用了该名称),Claude Code 会拒绝发送,而不是将消息送达错误的 Agent,并且错误会报告该名称现在指向哪个 Agent,以便 Claude 重新指定目标。要在较早的 Agent 仍在运行时联系它,Claude 会使用生成该 Agent 时收到的 Agent ID 来寻址。此检查仅限于当前对话,并会在 `/clear` 时重置。1205`SendMessage` 会检查某个名称是否仍指向对话中先前通过该名称联系到的同一个 Agent。如果该名称已被较新的 Agent 占用(例如重新生成的后台 Agent 复用了该名称),Claude Code 会拒绝发送,而不是将消息送达错误的 Agent,并且错误会报告该名称现在指向哪个 Agent,以便 Claude 重新指定目标。要在较早的 Agent 仍在运行时联系它,Claude 会使用生成该 Agent 时收到的 Agent ID 来寻址。此检查仅限于当前对话,并会在 `/clear` 时重置。

1202 1206 


1214 上下文自动压缩1218 上下文自动压缩

1215</h4>1219</h4>

1216 1220 

1217子代理支持使用与主对话相同的逻辑进行自动压缩。压缩在相同条件下触发,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 同样适用于子代理。有关该覆盖何时生效,请参阅[环境变量](/docs/zh-CN/env-vars)。1221子代理支持自动压缩。压缩会在子代理自身的上下文窗口逐渐填满时触发,`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 同样适用于子代理。有关该覆盖何时生效,请参阅[环境变量](/docs/zh-CN/env-vars)。

1218 1222 

1219压缩事件会记录在子代理会话记录文件中:1223压缩事件会记录在子代理会话记录文件中:

1220 1224 


1231 1235 

1232`preTokens` 值表示压缩发生前已使用的 token 数量。1236`preTokens` 值表示压缩发生前已使用的 token 数量。

1233 1237 

1238<a id="subagent-auto-compact-window" />

1239 

1240<h5 id="set-the-auto-compact-window-for-one-subagent">

1241 为单个子代理设置自动压缩窗口

1242</h5>

1243 

1244要让某个子代理比原本更早压缩,请在其 [frontmatter](#supported-frontmatter-fields) 中将 `autoCompactWindow` 设置为 `100000` 到 `1000000` 之间的 token 数。如果您将 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/zh-CN/env-vars#variables) 设置为正整数,子代理会改用该变量的窗口,此字段不起作用。需要 Claude Code v2.1.296 或更高版本。

1245 

1246以下 frontmatter 为一个读取长日志文件的子代理将 `autoCompactWindow` 设置为 200,000 token:

1247 

1248```yaml theme={null}

1249---

1250name: log-reader

1251description: Reads long log files and reports the errors it finds

1252autoCompactWindow: 200000

1253---

1254```

1255 

1256请将该值写为 `200000` 这样的纯整数,因为在 frontmatter 中 Claude Code 会将 `200k` 读作 200,超出了允许范围。此时子代理仍会照常加载和压缩,就像该字段不存在一样。要检查 Claude Code 是否忽略了您的值,请在 shell 中运行 `claude --debug`,并在[调试日志](#supported-frontmatter-fields)中搜索 `invalid autoCompactWindow`。

1257 

1258如果该值在范围内但您仍未看到任何变化,请检查以下原因:

1259 

1260* **该值不低于子代理原本会继承的[自动压缩窗口](/docs/zh-CN/model-config#context-window-and-auto-compaction)**:要更早压缩,请设置低于该窗口的值。

1261* **您通过 `--agent` 或 `agent` 设置以此子代理身份运行整个会话**:此时该字段不起作用。要设置会话的窗口,请参阅[设置自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window)。

1262 

1234<h2 id="fork-the-current-conversation">1263<h2 id="fork-the-current-conversation">

1235 分叉当前对话1264 分叉当前对话

1236</h2>1265</h2>

Details

44| `ReadMcpResourceTool` | 按 URI 读取特定 MCP 资源 | 否 |44| `ReadMcpResourceTool` | 按 URI 读取特定 MCP 资源 | 否 |

45| `RemoteTrigger` | 在 claude.ai 上创建、更新、运行和列出[例程](/docs/zh-CN/routines)。支持 `/schedule` 命令。[`RemoteTrigger` 输入参考](/docs/zh-CN/agent-sdk/typescript#remotetrigger)记录了每个操作和删除该工具的组织策略。例程位于 claude.ai 上,需要 Pro、Max、Team 或 Enterprise 计划,因此此工具无法从 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 访问 | 否 |45| `RemoteTrigger` | 在 claude.ai 上创建、更新、运行和列出[例程](/docs/zh-CN/routines)。支持 `/schedule` 命令。[`RemoteTrigger` 输入参考](/docs/zh-CN/agent-sdk/typescript#remotetrigger)记录了每个操作和删除该工具的组织策略。例程位于 claude.ai 上,需要 Pro、Max、Team 或 Enterprise 计划,因此此工具无法从 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 访问 | 否 |

46| `ReportFindings` | 将代码审查发现报告为结构化列表,每个发现都有文件、摘要和失败场景,以便 Claude Code 可以呈现它们而不是将其打印为文本。当活跃的代码审查指令要求它这样做时,Claude 会调用它。发现还可以携带可选的 `category` 段,例如 `correctness` 或 `test-coverage`,显示在呈现列表中的文件位置旁边 | 否 |46| `ReportFindings` | 将代码审查发现报告为结构化列表,每个发现都有文件、摘要和失败场景,以便 Claude Code 可以呈现它们而不是将其打印为文本。当活跃的代码审查指令要求它这样做时,Claude 会调用它。发现还可以携带可选的 `category` 段,例如 `correctness` 或 `test-coverage`,显示在呈现列表中的文件位置旁边 | 否 |

47| `ScheduleWakeup` | 重新安排[自定步调 `/loop`](/docs/zh-CN/scheduled-tasks#let-claude-choose-the-interval)的下一次迭代。Claude 在每次迭代结束时调用此方法以选择下一次运行的时间,在一分钟到一小时之间;您不直接调用它。要改为结束循环,Claude 使用 `stop: true` 调用它,这会取消待处理的唤醒。`stop` 字段需要 Claude Code v2.1.202 或更高版本。待处理的唤醒出现在[停止 hook 输入](/docs/zh-CN/hooks#stop-input)中的 `session_crons` 中 | 否 |47| `ScheduleWakeup` | 重新安排[自定步调 `/loop`](/docs/zh-CN/scheduled-tasks#let-claude-choose-the-interval)的下一次迭代。Claude 在每次迭代结束时调用此工具以选择下一次运行的时间,在一分钟到一小时之间;您不直接调用它。要改为结束循环,Claude 使用 `stop: true` 调用它,这会取消待处理的唤醒。待处理的唤醒出现在 [Stop hook 输入](/docs/zh-CN/hooks#stop-input)中的 `session_crons` 中 | 否 |

48| `SendFeedback` | 起草关于 Claude Code 的反馈报告,涵盖产品问题或 Claude 在会话中的自身行为,并将其排队在您的机器上供您审查。Claude Code 在您选择发送草稿之前不会发送任何内容。请参阅 [SendFeedback 工具行为](#sendfeedback-tool-behavior)。需要 Claude Code v2.1.238 或更高版本 | 否 |48| `SendFeedback` | 起草关于 Claude Code 的反馈报告,涵盖产品问题或 Claude 在会话中的自身行为,并将其排队在您的机器上供您审查。Claude Code 在您选择发送草稿之前不会发送任何内容。请参阅 [SendFeedback 工具行为](#sendfeedback-tool-behavior)。需要 Claude Code v2.1.238 或更高版本 | 否 |

49| `SendMessage` | 向另一个代理发送消息:[代理团队](/docs/zh-CN/agent-teams)队友、[通过代理 ID 或名称恢复的子代理](/docs/zh-CN/sub-agents#resume-subagents),或您的其他 Claude Code 会话之一,在此机器上或超越它。消息传递其他会话需要 Claude Code v2.1.224 或更高版本。[跨会话消息传递](/docs/zh-CN/cross-session-messaging)涵盖 Claude 可以到达的会话、[消息到达时的样子](/docs/zh-CN/cross-session-messaging#what-a-message-looks-like)以及[Claude 如何在另一个会话空闲时获得通知](/docs/zh-CN/cross-session-messaging#get-a-notice-when-another-session-goes-idle)。Claude 可以包含可选的 `summary` 输入,通常为 5-10 个单词,Claude Code 显示为单行预览。当 Claude 在[纯文本消息](/docs/zh-CN/cross-session-messaging#limitations)上省略它时,Claude Code 使用消息的第一行作为摘要。Claude Code 使用省略号截断长于 200 个字符的摘要 | 否 |49| `SendMessage` | 向另一个代理发送消息:[代理团队](/docs/zh-CN/agent-teams)队友、[通过代理 ID 或名称恢复的子代理](/docs/zh-CN/sub-agents#resume-subagents),或您的其他 Claude Code 会话之一,在此机器上或超越它。消息传递其他会话需要 Claude Code v2.1.224 或更高版本。[跨会话消息传递](/docs/zh-CN/cross-session-messaging)涵盖 Claude 可以到达的会话、[消息到达时的样子](/docs/zh-CN/cross-session-messaging#what-a-message-looks-like)以及[Claude 如何在另一个会话空闲时获得通知](/docs/zh-CN/cross-session-messaging#get-a-notice-when-another-session-goes-idle)。Claude 可以包含可选的 `summary` 输入,通常为 5-10 个单词,Claude Code 显示为单行预览。当 Claude 在[纯文本消息](/docs/zh-CN/cross-session-messaging#limitations)上省略它时,Claude Code 使用消息的第一行作为摘要。Claude Code 使用省略号截断长于 200 个字符的摘要 | 否 |

50| `SendUserFile` | 从会话向您发送文件,带有可选标题,以便生成的报告、图表、屏幕截图或构建产物到达您的设备,而不仅仅在会话记录中提及。可选的 `display` 输入控制呈现方式:`render` 在客户端中内联打开文件,`attach` 仅显示下载卡,未设置时客户端按文件类型决定。在连接 [Remote Control](/docs/zh-CN/remote-control) 客户端或在[云端会话](/docs/zh-CN/claude-code-on-the-web)中时可用。传递通过 Anthropic 托管的基础设施运行,因此该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用 | 否 |50| `SendUserFile` | 从会话向您发送文件,带有可选标题,以便生成的报告、图表、屏幕截图或构建产物到达您的设备,而不仅仅在会话记录中提及。可选的 `display` 输入控制呈现方式:`render` 在客户端中内联打开文件,`attach` 仅显示下载卡,未设置时客户端按文件类型决定。在连接 [Remote Control](/docs/zh-CN/remote-control) 客户端或在[云端会话](/docs/zh-CN/claude-code-on-the-web)中时可用。传递通过 Anthropic 托管的基础设施运行,因此该工具在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用 | 否 |


54| `TaskCreate` | 在任务列表中创建新任务。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |54| `TaskCreate` | 在任务列表中创建新任务。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |

55| `TaskGet` | 检索特定任务的完整详细信息。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |55| `TaskGet` | 检索特定任务的完整详细信息。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |

56| `TaskList` | 列出所有任务及其当前状态。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |56| `TaskList` | 列出所有任务及其当前状态。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |

57| `TaskOutput` | 从后台任务检索输出。已弃用,改为在任务的输出文件路径上使用 `Read`。当没有任务与 ID 匹配时,错误按 ID 和描述列出运行的后台代理。在 v2.1.203 之前,错误仅命名缺失的 ID | 否 |57| `TaskOutput` | 已在 v2.1.277 中移除。之前用于从后台任务检索输出;Claude 改为使用 `Read` 读取后台任务的[输出文件](/docs/zh-CN/interactive-mode#how-backgrounding-works) | 否 |

58| `TaskStop` | 按 ID 停止运行中的后台任务。它还接受 [agent team 队友](/docs/zh-CN/agent-teams)或按 Agent ID 或名称指定的命名后台 Agent。当没有任务与 ID 匹配时,错误按 ID 和描述列出运行中的后台 Agent,包括由另一个 Agent 生成的 Agent。在 v2.1.203 之前,错误列出了运行中的队友和命名 Agent,但不包括由另一个 Agent 生成的后台 Agent,因此无法从主对话中识别或停止这些 Agent | 否 |58| `TaskStop` | 按 ID 停止运行中的后台任务。它还接受 [agent team 队友](/docs/zh-CN/agent-teams)或按 Agent ID 或名称指定的命名后台 Agent。当没有任务与 ID 匹配时,错误按 ID 和描述列出运行中的后台 Agent,包括由另一个 Agent 生成的 Agent | 否 |

59| `TaskUpdate` | 更新任务状态、依赖项、详细信息或删除任务。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |59| `TaskUpdate` | 更新任务状态、依赖项、详细信息或删除任务。仅在[任务工具可用性](#task-tool-availability)下列出的模型上默认提供,在其他模型上当您选择加入时提供 | 否 |

60| `TodoWrite` | 管理会话任务清单。默认禁用,改为使用 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以在[具有任务跟踪工具的会话](#task-tool-availability)中重新启用它 | 否 |60| `TodoWrite` | 管理会话任务清单。默认禁用,改为使用 `TaskCreate`、`TaskGet`、`TaskList` 和 `TaskUpdate`。设置 `CLAUDE_CODE_ENABLE_TASKS=0` 以在[具有任务跟踪工具的会话](#task-tool-availability)中重新启用它 | 否 |

61| `ToolSearch` | 当[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)启用时,搜索并加载延迟工具 | 否 |61| `ToolSearch` | 当[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)启用时,搜索并加载延迟工具 | 否 |

ultrareview.md +2 −2

Details

149 跟踪正在运行的审查149 跟踪正在运行的审查

150</h2>150</h2>

151 151 

152审查通常需要 5 到 10 分钟。审查作为后台任务运行,因此您可以继续在会话中工作或启动其他命令。如果您选择了[将发现发布到拉取请求](#post-findings-to-the-pull-request),请保持会话打开直到审查完成;如果会话先结束,Claude Code 将不会发布任何内容。152审查通常需要 15 到 25 分钟。审查作为后台任务运行,因此您可以继续在会话中工作或启动其他命令。如果您选择了[将发现发布到拉取请求](#post-findings-to-the-pull-request),请保持会话打开直到审查完成;如果会话先结束,Claude Code 将不会发布任何内容。

153 153 

154使用 `/tasks` 查看正在运行和已完成的审查、打开审查的详细视图或停止正在进行的审查。如果您停止审查,Claude Code 会存档云会话,不会返回部分发现。154使用 `/tasks` 查看正在运行和已完成的审查、打开审查的详细视图或停止正在进行的审查。如果您停止审查,Claude Code 会存档云会话,不会返回部分发现。

155 155 


216| 目标 | 您的工作差异、pull request、分支或路径 | 您的工作差异或 pull request |216| 目标 | 您的工作差异、pull request、分支或路径 | 您的工作差异或 pull request |

217| 运行位置 | 在您的会话中本地运行 | 在云沙箱中运行 |217| 运行位置 | 在您的会话中本地运行 | 在云沙箱中运行 |

218| 深度 | 随着 effort 参数扩展 | 具有独立验证的多代理队列 |218| 深度 | 随着 effort 参数扩展 | 具有独立验证的多代理队列 |

219| 持续时间 | 几秒到几分钟 | 大约 5 到 10 分钟 |219| 持续时间 | 几秒到几分钟 | 大约 15 到 25 分钟 |

220| 成本 | 计入正常使用量 | 免费运行,然后大约 \$5 到 \$25 每次审查作为使用额度 |220| 成本 | 计入正常使用量 | 免费运行,然后大约 \$5 到 \$25 每次审查作为使用额度 |

221| 最适合 | 迭代时的快速反馈 | 合并前对重大更改的信心 |221| 最适合 | 迭代时的快速反馈 | 合并前对重大更改的信心 |

222 222 

Details

146 146 

147<Steps>147<Steps>

148 <Step title="选择仓库和分支">148 <Step title="选择仓库和分支">

149 从 [claude.ai/code](https://claude.ai/code) 或 Claude 移动应用中的 Code 选项卡,单击输入框下方的仓库选择器,并为 Claude 选择要在其中工作的仓库。每个仓库都显示一个分支选择器。更改它以从功能分支而不是默认分支启动 Claude。您可以添加多个仓库以在一个会话中跨它们工作。149 从 [claude.ai/code](https://claude.ai/code) 或 Claude 移动应用中的 Code 选项卡,单击输入框下方的仓库选择器,并为 Claude 选择要在其中工作的仓库。您可以添加多个仓库以在一个会话中跨它们工作。

150 

151 在 claude.ai/code 中,若要从功能分支而不是默认分支启动 Claude,请在仓库选择器后面的控件中更改分支。

150 </Step>152 </Step>

151 153 

152 <Step title="选择权限模式">154 <Step title="选择权限模式">

workflows.md +3 −3

Details

99| :- | :- |99| :- | :- |

100| `↑` / `↓` | 选择一个阶段或代理 |100| `↑` / `↓` | 选择一个阶段或代理 |

101| `Enter` 或 `→` | 深入选定的阶段,然后进入代理的详情。在详情中,`Enter` 展开或折叠它 |101| `Enter` 或 `→` | 深入选定的阶段,然后进入代理的详情。在详情中,`Enter` 展开或折叠它 |

102| `Esc` 或 `←` | 返回一个级别。在 v2.1.203 至 v2.1.205 中,`←` 没有退出阶段或代理;在这些版本上使用 `Esc` |102| `Esc` 或 `←` | 返回一个级别 |

103| `j` / `k` | 当代理详情溢出时在其中滚动 |103| `j` / `k` | 当代理详情溢出时在其中滚动 |

104| `f` | 按状态过滤选定阶段中的代理列表。再次按下以循环 |104| `f` | 按状态过滤选定阶段中的代理列表。再次按下以循环 |

105| `p` | 暂停或恢复运行 |105| `p` | 暂停或恢复运行 |


167/effort ultracode167/effort ultracode

168```168```

169 169 

170要启动已启用 ultracode 的会话,请使用 `claude --effort ultracode` 启动,这也会将努力级别设置为 `xhigh`。需要 Claude Code v2.1.203 或更高版本。170要启动已启用 ultracode 的会话,请使用 `claude --effort ultracode` 启动,这也会将 effort 级别设置为 `xhigh`。

171 171 

172要从 `/effort` 滑块启用它,按 `Tab` 翻转 **Ultracode** 切换,然后按 `Enter` 应用它。[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level)列出启用 ultracode 的路由。172要从 `/effort` 滑块启用它,按 `Tab` 翻转 **Ultracode** 切换,然后按 `Enter` 应用它。[调整努力级别](/docs/zh-CN/model-config#adjust-effort-level)列出启用 ultracode 的路由。

173 173 


527 设置大小指南527 设置大小指南

528</h3>528</h3>

529 529 

530大小指南告诉 Claude 在编写动态工作流时应该针对多少个代理。Claude Code 将指南作为建议而不是上限发送给 Claude,所以调用不同规模的提示仍然会覆盖它。需要 Claude Code v2.1.202 或更高版本。530大小指南告诉 Claude 在编写动态工作流时应以多少个 Agent 为目标。Claude Code 将指南作为建议而不是上限发送给 Claude,所以要求不同规模的提示词仍然会覆盖它。

531 531 

532每个值映射到一个代理计数:532每个值映射到一个代理计数:

533 533