SpyBara
Go Premium

Documentation 2026-10-26 22:57 UTC to 2026-10-27 22:59 UTC

69 files changed +1,100 −766. 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

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

80| `Cost:` | Claude Code 退出时的会话成本摘要,如果您的帐户[显示成本](https://code.claude.com/docs/zh-CN/costs.md) |80| `Cost:` | Claude Code 退出时的会话成本摘要,如果您的帐户[显示成本](https://code.claude.com/docs/zh-CN/costs.md) |

81 81 

82Claude Code 将终端光标保持在输入插入符上,因此屏幕阅读器的读取当前行命令读取您正在编辑的输入内容。82Claude Code 将终端光标保持在输入插入符上,因此屏幕阅读器的读取当前行命令读取您正在编辑的输入内容。当您在输入行末尾键入时,或在那里按 `Backspace`,Claude Code 仅写入更改的字符。您的屏幕阅读器仅回显这些字符。

83 

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

85 83 

86当您使用[文本编辑快捷键](https://code.claude.com/docs/zh-CN/interactive-mode.md#text-editing)之一删除单词或行时,Claude Code 宣布删除的文本:84当您使用[文本编辑快捷键](https://code.claude.com/docs/zh-CN/interactive-mode.md#text-editing)之一删除单词或行时,Claude Code 宣布删除的文本:

87 85 

admin-setup.md +1 −0

Details

191* [Server-managed settings](https://code.claude.com/docs/zh-CN/server-managed-settings.md):从 Claude 管理控制台传递托管策略191* [Server-managed settings](https://code.claude.com/docs/zh-CN/server-managed-settings.md):从 Claude 管理控制台传递托管策略

192* [All settings](https://code.claude.com/docs/zh-CN/settings-reference.md):每个设置键、文件位置和示例192* [All settings](https://code.claude.com/docs/zh-CN/settings-reference.md):每个设置键、文件位置和示例

193* [Which value Claude Code uses](https://code.claude.com/docs/zh-CN/settings.md#which-value-claude-code-uses):跨托管、项目、本地和用户设置的优先级规则193* [Which value Claude Code uses](https://code.claude.com/docs/zh-CN/settings.md#which-value-claude-code-uses):跨托管、项目、本地和用户设置的优先级规则

194* [Manage plugins for your organization](https://code.claude.com/docs/zh-CN/plugins/org.md):通过托管设置在每台机器上安装共享插件

194* [Monorepos and large repos](https://code.claude.com/docs/zh-CN/large-codebases.md):为部署到 monorepo 的组织提供的按目录配置模式195* [Monorepos and large repos](https://code.claude.com/docs/zh-CN/large-codebases.md):为部署到 monorepo 的组织提供的按目录配置模式

195* [Amazon Bedrock](https://code.claude.com/docs/zh-CN/amazon-bedrock.md)、[Google Cloud's Agent Platform](https://code.claude.com/docs/zh-CN/google-vertex-ai.md)、[Microsoft Foundry](https://code.claude.com/docs/zh-CN/microsoft-foundry.md):提供商特定部署196* [Amazon Bedrock](https://code.claude.com/docs/zh-CN/amazon-bedrock.md)、[Google Cloud's Agent Platform](https://code.claude.com/docs/zh-CN/google-vertex-ai.md)、[Microsoft Foundry](https://code.claude.com/docs/zh-CN/microsoft-foundry.md):提供商特定部署

196* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide):SSO、SCIM、座位管理和推出手册197* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide):SSO、SCIM、座位管理和推出手册

Details

41 41 

42那是四个轮次:三个有工具调用,一个最终仅包含文本的响应。42那是四个轮次:三个有工具调用,一个最终仅包含文本的响应。

43 43 

44你可以使用 `max_turns` / `maxTurns` 限制循环,它仅计算工具使用轮次。例如,上面循环中的 `max_turns=2` 会在编辑步骤之前停止。你也可以使用 `max_budget_usd` / `maxBudgetUsd` 根据支出阈值限制轮次。44您可以使用 `max_turns` / `maxTurns` 限制循环。每个包含工具调用的轮次计为一轮,最终仅包含文本的回复再额外计一轮。如果没有这额外的一轮,运行将以子类型为 `error_max_turns` 的 `ResultMessage` 结束,且没有最终回复。例如,上面循环中的 `max_turns=2` 会在编辑步骤之前停止。您也可以使用 `max_budget_usd` / `maxBudgetUsd` 根据支出阈值限制轮次。

45 45 

46没有限制的情况下,循环运行直到 Claude 自己完成,这对于范围明确的任务很好,但对于开放式提示("改进这个代码库")可能运行很长时间。为生产代理设置预算是一个很好的默认值。有关选项参考,请参阅下面的 [轮次和预算](#turns-and-budget)。46没有限制的情况下,循环运行直到 Claude 自己完成,这对于范围明确的任务很好,但对于开放式提示("改进这个代码库")可能运行很长时间。为生产代理设置预算是一个很好的默认值。有关选项参考,请参阅下面的 [轮次和预算](#turns-and-budget)。

47 47 


191 191 

192| 选项 | 它控制什么 | 默认值 |192| 选项 | 它控制什么 | 默认值 |

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

194| 最大轮次(`max_turns` / `maxTurns`) | 最大工具使用往返次数 | 无限制 |194| 最大轮次(`max_turns` / `maxTurns`) | 最大[轮次](#turns-and-messages)数 | 无限制 |

195| 最大预算(`max_budget_usd` / `maxBudgetUsd`) | 循环停止时的预估支出 | 无限制 |195| 最大预算(`max_budget_usd` / `maxBudgetUsd`) | 循环停止时的预估支出 | 无限制 |

196 196 

197当达到任一限制时,SDK 返回一个 `ResultMessage`,包含相应的错误子类型(`error_max_turns` 或 `error_max_budget_usd`)。有关如何检查这些子类型,请参阅 [处理结果](#handle-the-result),有关语法,请参阅 [`ClaudeAgentOptions`](https://code.claude.com/docs/zh-CN/agent-sdk/python#claudeagentoptions) / [`Options`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options)。197当达到任一限制时,SDK 返回一个 `ResultMessage`,包含相应的错误子类型(`error_max_turns` 或 `error_max_budget_usd`)。有关如何检查这些子类型,请参阅 [处理结果](#handle-the-result),有关语法,请参阅 [`ClaudeAgentOptions`](https://code.claude.com/docs/zh-CN/agent-sdk/python#claudeagentoptions) / [`Options`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options)。

Details

161 161 

162两种语言都有相同的设置器:162两种语言都有相同的设置器:

163 163 

164* **`setModel()` / `set_model()`**:切换模型。不带模型调用它以切换到[Claude Code 的默认模型](https://code.claude.com/docs/zh-CN/model-config.md#default-model-setting),而不是你在选项中传递的 `model`。164* **`setModel()` / `set_model()`**:切换模型。不带模型调用它以切换到[Claude Code 的默认模型](https://code.claude.com/docs/zh-CN/model-config.md#default-model-setting),而不是您在选项中传递的 `model`。如果会话处于自动模式,而您切换到自动模式不支持的模型,会话将更改为 `default` 模式。要返回自动模式,请参阅[自动模式(`auto`)](https://code.claude.com/docs/zh-CN/agent-sdk/permissions#auto-mode-auto)。

165* **`setPermissionMode()` / `set_permission_mode()`**:切换权限模式165* **`setPermissionMode()` / `set_permission_mode()`**:切换权限模式

166 166 

167TypeScript 还有 `applyFlagSettings()` 和 `updateSettings()`:167TypeScript 还有 `applyFlagSettings()` 和 `updateSettings()`:

Details

192 192 

193容器需要您的 SDK 的语言运行时:193容器需要您的 SDK 的语言运行时:

194 194 

195* Python SDK 需要 Python 3.10+,或 TypeScript SDK 需要 Node.js 18+195* Python SDK 需要 Python 3.10+,或 TypeScript SDK 需要 Node.js 18.14+

196* TypeScript 和 Python SDK 都为大多数安装捆绑了本机 Claude Code 二进制文件,生成的 CLI 不需要单独的 Node.js 安装。有关需要单独本机 Claude Code 安装的安装,请参阅 [quickstart 的安装说明](https://code.claude.com/docs/zh-CN/agent-sdk/quickstart.md)。196* TypeScript 和 Python SDK 都为大多数安装捆绑了本机 Claude Code 二进制文件,生成的 CLI 不需要单独的 Node.js 安装。有关需要单独本机 Claude Code 安装的安装,请参阅 [quickstart 的安装说明](https://code.claude.com/docs/zh-CN/agent-sdk/quickstart.md)。

197 197 

198捆绑的二进制文件固定到 SDK 包版本,因此更新 SDK 是更新 CLI 的方式。SDK 遵循 semver:持续采用补丁版本,并在采用次要版本之前查看 [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) 或 [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) 更新日志。198捆绑的二进制文件固定到 SDK 包版本,因此更新 SDK 是更新 CLI 的方式。SDK 遵循 semver:持续采用补丁版本,并在采用次要版本之前查看 [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) 或 [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) 更新日志。


335 335 

336| 限制 | 解决方案 |336| 限制 | 解决方案 |

337| - | - |337| - | - |

338| 没有顶级会话超时 | 会话不会自动超时。在 TypeScript 中设置 `maxTurns` 或在 Python 中设置 `max_turns` 来限制代理在停止前进行多少次工具使用往返。 |338| 没有顶级会话超时 | 会话不会自动超时。在 TypeScript 中设置 `maxTurns` 或在 Python 中设置 `max_turns`,以限制 Agent 在停止前执行的[轮次](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#turns-and-messages)数。 |

339| 长会话中的内存增长 | 限制会话长度或定期回收子进程。请参阅[扩展和并发](#scaling-and-concurrency)。 |339| 长会话中的内存增长 | 限制会话长度或定期回收子进程。请参阅[扩展和并发](#scaling-and-concurrency)。 |

340| 大规模并行子代理扇出可能会触发速率限制 | 将工作分解为较小的批次,而不是发出一个宽范围的调度。 |340| 大规模并行子代理扇出可能会触发速率限制 | 将工作分解为较小的批次,而不是发出一个宽范围的调度。 |

341| 没有每个子代理的挂钟截止时间 | 在其 `AgentDefinition` 中使用 `maxTurns` 限制每个[子代理](https://code.claude.com/docs/zh-CN/agent-sdk/subagents.md)。`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` 设置一个停滞监视程序,当子代理停止产生输出时触发;它不是总运行时截止时间。 |341| 没有每个子代理的挂钟截止时间 | 在其 `AgentDefinition` 中使用 `maxTurns` 限制每个[子代理](https://code.claude.com/docs/zh-CN/agent-sdk/subagents.md)。`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` 设置一个停滞监视程序,当子代理停止产生输出时触发;它不是总运行时截止时间。 |

Details

425 425 

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

427 427 

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

429* 如果只想阻止 `@` 文件提及被展开,请改为设置 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](https://code.claude.com/docs/zh-CN/env-vars#variables)(需要 Claude Code v2.1.299 或更高版本)。这样 Claude 会收到所提及的路径,以及一条提示其使用文件工具读取这些路径的说明,并且您的 `PreToolUse` hook 会将每次文件读取视为一次工具调用。

429 430 

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

431 432 

Details

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

44 44 

45* 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了被识别出的 [关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths) 以及被标记为 [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/zh-CN/permission-modes#dangerous-rm-operation-not-ruled-out) 的 Bash 命令,这些会传递下去。45* 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了被识别出的 [关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths) 以及被标记为 [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/zh-CN/permission-modes#dangerous-rm-operation-not-ruled-out) 的 Bash 命令,这些会传递下去。

46 * 若要在没有提示的情况下运行这些删除操作,请参阅 [关闭关键路径删除提示](https://code.claude.com/docs/zh-CN/permission-modes.md#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。

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

47* 在 `plan` 模式下,无论允许规则如何,Claude Code 都会将文件编辑工具发送到您的 `canUseTool` 回调。48* 在 `plan` 模式下,无论允许规则如何,Claude Code 都会将文件编辑工具发送到您的 `canUseTool` 回调。

48* 在其他模式下,请求传递下去。49* 在其他模式下,请求传递下去。


305> `allowed_tools` 不会约束此模式。每个工具都会被批准,而不仅仅是您列出的工具。以下控制措施仍然适用:306> `allowed_tools` 不会约束此模式。每个工具都会被批准,而不仅仅是您列出的工具。以下控制措施仍然适用:

306>307>

307> * 拒绝规则、显式 `ask` 规则和 hook 会在模式检查之前进行评估,仍然可以阻止工具。308> * 拒绝规则、显式 `ask` 规则和 hook 会在模式检查之前进行评估,仍然可以阻止工具。

308> * [您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具以及被识别出的[关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)仍会交给您的 `canUseTool` 回调处理。识别这些删除操作的检查[可能会漏掉某些命令](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)之外,对您的应用程序[标记为 `always_ask`](https://code.claude.com/docs/zh-CN/agent-sdk/custom-tools#require-approval-for-specific-tools) 的自定义工具的调用也会交给该回调处理。309> * [您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具以及被识别出的[关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)仍会交给您的 `canUseTool` 回调处理。识别这些删除操作的检查[可能会漏掉某些命令](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths),您也可以[关闭关键路径删除提示](https://code.claude.com/docs/zh-CN/permission-modes.md#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)之外,对您的应用程序[标记为 `always_ask`](https://code.claude.com/docs/zh-CN/agent-sdk/custom-tools#require-approval-for-specific-tools) 的自定义工具的调用也会交给该回调处理。

309> * [跨会话消息传递保护措施](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然适用。310> * [跨会话消息传递保护措施](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然适用。

310 311 

311#### 计划模式(`plan`)312#### 计划模式(`plan`)

Details

880| `continue_conversation` | `bool` | `False` | 继续最近的对话 |880| `continue_conversation` | `bool` | `False` | 继续最近的对话 |

881| `resume` | `str \| None` | `None` | 要恢复的会话 ID |881| `resume` | `str \| None` | `None` | 要恢复的会话 ID |

882| `session_id` | `str \| None` | `None` | 使用特定的会话 ID 而不是自动生成的。必须是有效的 UUID。不能与 `continue_conversation` 或 `resume` 结合使用,除非也设置了 `fork_session` |882| `session_id` | `str \| None` | `None` | 使用特定的会话 ID 而不是自动生成的。必须是有效的 UUID。不能与 `continue_conversation` 或 `resume` 结合使用,除非也设置了 `fork_session` |

883| `max_turns` | `int \| None` | `None` | 最大 Agent 轮次(工具使用往返) |883| `max_turns` | `int \| None` | `None` | 最大 Agent [轮次](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#turns-and-messages) |

884| `max_budget_usd` | `float \| None` | `None` | 当客户端成本估计达到此 USD 值时停止查询。该估计值可能超过此值,因此请[预留余量](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#budget-headroom)。仅计算调用自身的支出;从恢复的会话恢复的总数不计算。有关准确性注意事项和重置行为,见 [跟踪成本和使用](https://code.claude.com/docs/zh-CN/agent-sdk/cost-tracking.md) |884| `max_budget_usd` | `float \| None` | `None` | 当客户端成本估计达到此 USD 值时停止查询。该估计值可能超过此值,因此请[预留余量](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#budget-headroom)。仅计算调用自身的支出;从恢复的会话恢复的总数不计算。有关准确性注意事项和重置行为,见 [跟踪成本和使用](https://code.claude.com/docs/zh-CN/agent-sdk/cost-tracking.md) |

885| `disallowed_tools` | `list[str]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 从 Claude 的上下文中移除工具。限定规则如 `"Bash(rm *)"` 保持工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用,针对[按书写形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)的命令。见 [权限](https://code.claude.com/docs/zh-CN/agent-sdk/permissions.md#allow-and-deny-rules) |885| `disallowed_tools` | `list[str]` | `[]` | 要拒绝的工具。裸名称如 `"Bash"` 从 Claude 的上下文中移除工具。限定规则如 `"Bash(rm *)"` 保持工具可用,并在每个权限模式(包括 `bypassPermissions`)中拒绝匹配的调用,针对[按书写形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)的命令。见 [权限](https://code.claude.com/docs/zh-CN/agent-sdk/permissions.md#allow-and-deny-rules) |

886| `enable_file_checkpointing` | `bool` | `False` | 启用文件更改跟踪以进行回滚。见 [文件检查点功能](https://code.claude.com/docs/zh-CN/agent-sdk/file-checkpointing.md) |886| `enable_file_checkpointing` | `bool` | `False` | 启用文件更改跟踪以进行回滚。见 [文件检查点功能](https://code.claude.com/docs/zh-CN/agent-sdk/file-checkpointing.md) |


2568 2568 

2569### Agent2569### Agent

2570 2570 

2571**工具名称:** `Agent`。先前的名称 `Task` 仍作为别名被接受,并且为了向后兼容,init [`SystemMessage`](#systemmessage) 中的 `tools` 列表会将此工具报告为 `Task`。2571**工具名称:** `Agent`。当此工具对会话可用时,先前的名称 `Task` 仍作为别名被接受。

2572 

2573为了向后兼容,init [`SystemMessage`](#systemmessage) 中的 `tools` 列表会将此工具报告为 `Task`。

2572 2574 

2573**输入:**2575**输入:**

2574 2576 


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

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

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

3645| `allowAllUnixSockets` | `bool` | `False` | 允许访问所有 Unix sockets |3647| `allowAllUnixSockets` | `bool` | `False` | 允许访问所有 Unix sockets,在 Linux 上还允许访问 VM sockets(`AF_VSOCK`) |

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

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

3648| `httpProxyPort` | `int` | `None` | 网络请求的 HTTP 代理端口 |3650| `httpProxyPort` | `int` | `None` | 网络请求的 HTTP 代理端口 |

Details

16 16 

17## 前置条件17## 前置条件

18 18 

19* **Node.js 18+** 或 **Python 3.10+**19* **Node.js 18.14+** 或 **Python 3.10+**

20* 一个 **Anthropic 账户**。如果您还没有账户,[在此注册](https://platform.claude.com/)。20* 一个 **Anthropic 账户**。如果您还没有账户,[在此注册](https://platform.claude.com/)。

21 21 

22## 设置22## 设置

Details

118 118 

119### 处理被中断的流119### 处理被中断的流

120 120 

121如果流在消息中途被中断,例如当您中断该轮次或连接断开时,您仍会在该轮次结束前收到该消息的 `message_stop`。被中断的文本块或思考块也会收到其 `content_block_stop`。被中断的工具调用则不会,因此如果 `message_stop` 到达时某个工具调用的块仍处于打开状态,请将该调用的输入视为不完整。121如果流在消息中途被中断,您仍会在该轮次结束前收到该消息的 `message_stop`。导致流被中断的原因包括轮次被中断、连接断开以及回退到非流式请求。在该 `message_stop` 之前,`content_block_stop` 和 `message_delta` 可能会缺失:

122 

123* **`content_block_stop`**:会为处于打开状态的块到达,除非该块是工具调用。如果 `message_stop` 到达时某个工具调用的块仍处于打开状态,请将该调用的输入视为不完整。

124* **`message_delta`**:在您中断该轮次时会到达,而在连接断开或回退到非流式请求后可能会缺失,因此对于被中断的消息,请勿等待它。

122 125 

123在 Claude Code v2.1.290 之前,被中断的流可能会在没有 `message_stop` 的情况下结束轮次,因此您根据流事件渲染的回复可能会一直显示为进行中。TypeScript Agent SDK 从 v0.3.290 起捆绑 Claude Code v2.1.290 或更高版本,Python Agent SDK 则从 v0.2.164 起捆绑。如果轮次结束后回复仍显示为进行中,请更新 SDK。126在 Claude Code v2.1.290 之前,被中断的流可能会在没有 `message_stop` 的情况下结束轮次,因此您根据流事件渲染的回复可能会一直显示为进行中。TypeScript Agent SDK 从 v0.3.290 起捆绑 Claude Code v2.1.290 或更高版本,Python Agent SDK 则从 v0.2.164 起捆绑。如果轮次结束后回复仍显示为进行中,请更新 SDK。

124 127 

Details

105 105 

106返回一个 `Promise<`[`WarmQuery`](#warmquery)`>`,在子进程启动并完成初始化握手后解析。106返回一个 `Promise<`[`WarmQuery`](#warmquery)`>`,在子进程启动并完成初始化握手后解析。

107 107 

108对于 `SessionStart` 或 `Setup` hook 在握手完成之前发出的 [`hook_progress`](#sdkhookprogressmessage) 消息,您只会收到最新的一条,其中包含该 hook 截至当时的全部输出。`startup()` 会暂存该消息、该 hook 的 [`hook_started`](#sdkhookstartedmessage) 消息,以及子进程在握手完成之前发出的所有其他内容。当您对 `WarmQuery` 调用 `.query()` 并迭代结果时,这些暂存的消息才会传递给您。

109 

108#### 示例110#### 示例

109 111 

110尽早调用 `startup()`(例如在应用程序启动时),然后在提示词就绪后对返回的句柄调用 `.query()`。这样可以将子进程的启动和初始化移出关键路径。112尽早调用 `startup()`(例如在应用程序启动时),然后在提示词就绪后对返回的句柄调用 `.query()`。这样可以将子进程的启动和初始化移出关键路径。


524| `managedSettings` | `Settings` | `undefined` | 由您的宿主进程提供给所生成会话的策略层级设置。在部署了管理员托管设置的机器上,除非管理员优先级最高的托管源设置了 `parentSettingsBehavior: 'merge'`,否则 Claude Code 会忽略这些设置;并且当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,永远不会合并它们。合并的值会经过一个仅限收紧的过滤器;[限制父级设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)介绍了过滤器允许的内容以及 `allowManaged*Only` 锁定。设置了 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars) 的宿主会改为直接从此负载中读取三个键:在 Claude Code v2.1.222 或更高版本中读取其[模型配置](https://code.claude.com/docs/zh-CN/model-config.md#restrict-model-selection);在 v2.1.246 或更高版本中,当没有托管源设置 [`modelPricing`](https://code.claude.com/docs/zh-CN/settings-reference#modelpricing) 时读取该键;在 v2.1.247 或更高版本中读取其 `ENABLE_TOOL_SEARCH` env 条目 |526| `managedSettings` | `Settings` | `undefined` | 由您的宿主进程提供给所生成会话的策略层级设置。在部署了管理员托管设置的机器上,除非管理员优先级最高的托管源设置了 `parentSettingsBehavior: 'merge'`,否则 Claude Code 会忽略这些设置;并且当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,永远不会合并它们。合并的值会经过一个仅限收紧的过滤器;[限制父级设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway#restrict-parent-settings)介绍了过滤器允许的内容以及 `allowManaged*Only` 锁定。设置了 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars) 的宿主会改为直接从此负载中读取三个键:在 Claude Code v2.1.222 或更高版本中读取其[模型配置](https://code.claude.com/docs/zh-CN/model-config.md#restrict-model-selection);在 v2.1.246 或更高版本中,当没有托管源设置 [`modelPricing`](https://code.claude.com/docs/zh-CN/settings-reference#modelpricing) 时读取该键;在 v2.1.247 或更高版本中读取其 `ENABLE_TOOL_SEARCH` env 条目 |

525| `maxBudgetUsd` | `number` | `undefined` | 当客户端成本估算达到此美元值时停止查询。估算值可能超过此值,因此请[留出余量](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#budget-headroom)。仅计算本次调用自身的花费;从恢复的会话中还原的总计不计入。有关准确性注意事项和重置行为,请参阅[跟踪成本和用量](https://code.claude.com/docs/zh-CN/agent-sdk/cost-tracking.md) |527| `maxBudgetUsd` | `number` | `undefined` | 当客户端成本估算达到此美元值时停止查询。估算值可能超过此值,因此请[留出余量](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#budget-headroom)。仅计算本次调用自身的花费;从恢复的会话中还原的总计不计入。有关准确性注意事项和重置行为,请参阅[跟踪成本和用量](https://code.claude.com/docs/zh-CN/agent-sdk/cost-tracking.md) |

526| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 请改用 `thinking`。思考过程的最大 token 数 |528| `maxThinkingTokens` | `number` | `undefined` | *已弃用:* 请改用 `thinking`。思考过程的最大 token 数 |

527| `maxTurns` | `number` | `undefined` | 最大 agentic 轮次(工具使用往返次数) |529| `maxTurns` | `number` | `undefined` | 最大 Agent [轮次](https://code.claude.com/docs/zh-CN/agent-sdk/agent-loop.md#turns-and-messages) |

528| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 服务器配置 |530| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 服务器配置 |

529| `model` | `string` | 来自 CLI 的默认值 | Claude 模型别名或完整模型名称。请参阅[可接受的值和特定于提供商的 ID](https://code.claude.com/docs/zh-CN/model-config.md#available-models) |531| `model` | `string` | 来自 CLI 的默认值 | Claude 模型别名或完整模型名称。请参阅[可接受的值和特定于提供商的 ID](https://code.claude.com/docs/zh-CN/model-config.md#available-models) |

530| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | 用于处理 MCP elicitation 请求的回调。当 MCP 服务器请求用户输入且没有 hook 先行处理时调用。未提供时,未处理的 elicitation 请求会被自动拒绝 |532| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | 用于处理 MCP elicitation 请求的回调。当 MCP 服务器请求用户输入且没有 hook 先行处理时调用。未提供时,未处理的 elicitation 请求会被自动拒绝 |


1403 };1405 };

1404```1406```

1405 1407 

1408如果您返回 `allow` 且 `updatedPermissions` 中的项超过 4,096 个,Claude Code 会将结果视为无效并拒绝该工具调用。每个更新计为一项,其 `rules` 或 `directories` 列表中的每个条目也各计为一项。拒绝消息以 `updatedPermissions may hold at most 4096 updates, rules and directories in all` 结尾。要使调用被允许,请返回不超过 4,096 项。

1409 

1406### `ToolConfig`1410### `ToolConfig`

1407 1411 

1408内置工具行为的配置。1412内置工具行为的配置。


1464 1468 

1465#### `McpSdkServerConfigWithInstance`1469#### `McpSdkServerConfigWithInstance`

1466 1470 

1467进程内 MCP 服务器的配置,此类服务器由 [`createSdkMcpServer()`](#createsdkmcpserver) 创建,并在您的应用程序进程内运行。它是 `createSdkMcpServer()` 返回的对象,外加一个由您自行添加的、由 [`McpServerToolPolicy`](#mcpservertoolpolicy) 条目组成的可选 `tools` 列表。要对该服务器某个工具的调用要求批准或予以拒绝,请添加一个指定该工具的条目。1471进程内 MCP 服务器的配置。它是 [`createSdkMcpServer()`](#createsdkmcpserver) 的返回值,外加一个由您添加的可选 `tools` 列表,其中包含 [`McpServerToolPolicy`](#mcpservertoolpolicy) 条目。

1468 1472 

1469```typescript theme={null}1473```typescript theme={null}

1470type McpSdkServerConfigWithInstance = {1474type McpSdkServerConfigWithInstance = {


1476};1480};

1477```1481```

1478 1482 

1479要设置策略,请将 `createSdkMcpServer()` 返回的对象展开到 `mcpServers` 中的一个新对象里,并将 `tools` 列表添加到该新对象上。`createSdkMcpServer()` 自身的 `tools` 选项是另一个列表,用于保存工具定义,不接受策略条目。策略列表需要 Agent SDK v0.3.301 或更高版本,[`McpServerToolPolicy`](#mcpservertoolpolicy) 说明了每个 `permission_policy` 值的作用。1483要要求对服务器某个工具的调用进行批准或拒绝这些调用,请添加一个指明该工具的策略条目。将 `createSdkMcpServer()` 的返回值展开到 `mcpServers` 下的一个对象中,并将条目放在该对象的 `tools` 列表中,因为该函数的 `tools` 选项接受的是工具定义而非策略条目。策略列表需要 Agent SDK v0.3.301 或更高版本,[`McpServerToolPolicy`](#mcpservertoolpolicy) 说明了每个 `permission_policy` 值的作用。

1480 1484 

1481以下示例使用 `allowedTools` 通配符预先批准 `records` 服务器上的所有工具,然后将 `delete_record` 标记为 `always_ask`,使对它的调用仍然转到 `canUseTool`。借助 `destructiveHint: true` 注解,即使会话在 `auto` 模式下运行,该调用仍会到达回调;否则自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)可能会批准它。1485在此脚本中,`allowedTools` 通配符预先批准了 `records` 服务器上的所有工具,但 `delete_record` 被标记为 `always_ask`,因此对它的调用仍会交给 `canUseTool`。借助 `destructiveHint: true` 注解,即使会话在 `auto` 模式下运行,调用仍会到达回调,否则自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)可能会批准它。

1482 1486 

1483```typescript theme={null}1487```typescript theme={null}

1484import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";1488import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";


1517}1521}

1518```1522```

1519 1523 

1520当 Claude 调用该工具时,脚本会在 `delete_record` 工具运行之前打印 `Approval requested for mcp__records__delete_record`,尽管 `allowedTools` 条目原本会批准该调用。1524当 Claude 调用 `delete_record` 时,脚本会打印 `Approval requested for mcp__records__delete_record`。

1521 1525 

1522要在会话运行期间更改或解除某个工具的策略,请将带有新 `tools` 值的服务器配置传给 [`setMcpServers()`](#mcpsetserversresult)。您传入的 `tools` 值从 Claude 下一次调用该服务器的工具时开始生效:1526要在会话运行期间更改或解除某个工具的策略,请将带有新 `tools` 值的服务器配置传给 [`setMcpServers()`](#mcpsetserversresult)。您传入的 `tools` 值从 Claude 下一次调用该服务器的工具时开始生效:

1523 1527 


1556 1560 

1557##### 可以批准 `always_ask` 调用的权限模式1561##### 可以批准 `always_ask` 调用的权限模式

1558 1562 

1559在 `auto`、`plan` 和 `bypassPermissions` 模式下,对标记为 [`always_ask`](#permission-policy-values) 的工具的调用可能在到达您的 `canUseTool` 回调之前就被批准。在下面的列表中找到您会话所用的模式,了解该批准何时发生,以及需要设置什么才能让调用仍然到达您的回调:1563在 `auto`、`plan` 和 `bypassPermissions` 模式下,对标记为 [`always_ask`](#permission-policy-values) 的工具的调用可能在到达您的 `canUseTool` 回调之前被批准。

1560 1564 

1561* **`auto`**:自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)会审查该调用并可能允许它。要让每个调用在 `auto` 模式下都到达您的回调,请在工具的[注解](#toolannotations)中设置 `destructiveHint: true`1565* **`auto`**:自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)会审查该调用并可能允许它。要让每个调用在 `auto` 模式下都到达您的回调,请在工具的[注解](#toolannotations)中设置 `destructiveHint: true`

1562* **`plan`**:当会话可使用[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)时,对注解为 `readOnlyHint: true` 的 `always_ask` 工具的调用会转到自动模式分类器,分类器可能允许它们。对其他 `always_ask` 工具的调用会到达您的回调。要让只读工具的调用也到达您的回调,请在该工具的注解中于 `readOnlyHint: true` 之外添加 `destructiveHint: true`。或者,将 [`useAutoModeDuringPlan`](https://code.claude.com/docs/zh-CN/settings-reference#useautomodeduringplan) 设为 `false`,这会在规划期间关闭分类器1566* **`plan`**:当会话可使用[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)时,对注解为 `readOnlyHint: true` 的 `always_ask` 工具的调用会转到自动模式分类器,分类器可能允许它们。对其他 `always_ask` 工具的调用会到达您的回调。要让只读工具的调用也到达您的回调,请在该工具的注解中于 `readOnlyHint: true` 之外添加 `destructiveHint: true`。或者,将 [`useAutoModeDuringPlan`](https://code.claude.com/docs/zh-CN/settings-reference#useautomodeduringplan) 设为 `false`,这会在规划期间关闭分类器


1692 1696 

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

1694 1698 

1695`agent_id` 标识生成该消息的子代理,主线程消息中不包含此字段。其值等于该子代理的 [`task_started`](#sdktaskstartedmessage) 及其他任务事件上的 `task_id`,并且在子代理被[恢复](https://code.claude.com/docs/zh-CN/agent-sdk/subagents.md#resume-subagents)时保持不变。该字段需要 Agent SDK v0.3.292 或更高版本。1699`agent_id` 标识产生该消息的子代理,在主线程消息上不存在。其值等于该子代理的 [`task_started`](#sdktaskstartedmessage) 及其他任务事件上的 `task_id`,并且在子代理被[恢复](https://code.claude.com/docs/zh-CN/agent-sdk/subagents.md#resume-subagents)时保持不变。对于来自[嵌套子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#let-subagents-spawn-their-own-subagents)的消息,它指向该嵌套子代理,而不是生成它的子代理。该字段需要 Agent SDK v0.3.292 或更高版本。

1696 1700 

1697请通过 `agent_id` 将子代理的消息与其任务事件进行匹配,而不是将消息的 `parent_tool_use_id` 与任务事件的 `tool_use_id` 配对。当某个工具调用恢复子代理时,任务事件携带的是该调用的 `tool_use_id`,而消息保留的是最初启动该子代理的工具调用的 `parent_tool_use_id`,因此两者不再匹配。1701请通过 `agent_id` 将子代理的消息与其任务事件进行匹配,而不是将消息的 `parent_tool_use_id` 与任务事件的 `tool_use_id` 配对。当某个工具调用恢复子代理时,任务事件携带的是该调用的 `tool_use_id`,而消息保留的是最初启动该子代理的工具调用的 `parent_tool_use_id`,因此两者不再匹配。

1698 1702 


3271 3275 

3272### Agent3276### Agent

3273 3277 

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

3279 

3280[`SDKSystemMessage`](#sdksystemmessage) 初始化消息中的 `tools` 数组为了向后兼容将此工具列为 `Task`。

3275 3281 

3276> [!NOTE]3282> [!NOTE]

3277>3283>


4008 4014 

4009### Agent4015### Agent

4010 4016 

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

4012 4018 

4013```typescript theme={null}4019```typescript theme={null}

4014type AgentOutput =4020type AgentOutput =


5208 5214 

5209#### 当工具的 `_meta.ui` 仅包含 `visibility` 时5215#### 当工具的 `_meta.ui` 仅包含 `visibility` 时

5210 5216 

5211如果您的服务器为某个工具声明了 `ui.resourceUri`,但您的应用程序收到的 `_meta.ui` 仅包含 `visibility`,则说明服务器发送的 `ui` 对象未通过 Claude Code 的某项检查。Claude Code 会分别检查 `ui` 和 `ui/resourceUri`,因此当一个键未通过检查时,另一个键仍可能到达您的应用程序。请将服务器 `tools/list` 响应中的 `_meta` 与每个键的检查项进行比对:5217如果您的服务器为某个工具声明了 `ui.resourceUri`,但您的应用程序收到的 `_meta.ui` 仅包含 `visibility`,则说明服务器发送的 `ui` 对象未通过 Claude Code 的某项检查。请将服务器 `tools/list` 响应中的 `_meta` 与每个键的检查项进行比对:

5212 5218 

5213* **`ui`**:如果以下三项检查全部通过,则原样到达您的应用程序,包括 `resourceUri` 和 `visibility` 以外的任何成员:5219* **`ui`**:如果以下三项检查全部通过,则原样到达您的应用程序,包括 `resourceUri` 和 `visibility` 以外的任何成员:

5214 5220 


5551 5557 

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

5553 5559 

5560如果您使用 [`startup()`](#startup) 启动会话,则这些消息会在您调用 `.query()` 并迭代其结果后到达。

5561 

5554```typescript theme={null}5562```typescript theme={null}

5555type SDKHookStartedMessage = {5563type SDKHookStartedMessage = {

5556 type: "system";5564 type: "system";


6070| `allowManagedDomainsOnly` | `boolean` | `false` | 仅限托管设置。在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置时,仅采用托管设置中的 `allowedDomains` 条目和 `WebFetch(domain:...)` 允许规则,而用户、项目或本地设置中的允许条目将被忽略。在 SDK 中,请通过 [`managedSettings`](#options) 选项传入 |6078| `allowManagedDomainsOnly` | `boolean` | `false` | 仅限托管设置。在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置时,仅采用托管设置中的 `allowedDomains` 条目和 `WebFetch(domain:...)` 允许规则,而用户、项目或本地设置中的允许条目将被忽略。在 SDK 中,请通过 [`managedSettings`](#options) 选项传入 |

6071| `allowLocalBinding` | `boolean` | `false` | 允许进程绑定到本地端口(例如用于开发服务器) |6079| `allowLocalBinding` | `boolean` | `false` | 允许进程绑定到本地端口(例如用于开发服务器) |

6072| `allowUnixSockets` | `string[]` | `[]` | 进程可以访问的 Unix 套接字路径(例如 Docker 套接字) |6080| `allowUnixSockets` | `string[]` | `[]` | 进程可以访问的 Unix 套接字路径(例如 Docker 套接字) |

6073| `allowAllUnixSockets` | `boolean` | `false` | 允许访问所有 Unix 套接字 |6081| `allowAllUnixSockets` | `boolean` | `false` | 允许访问所有 Unix 套接字,在 Linux 上还允许访问 VM 套接字(`AF_VSOCK`) |

6074| `httpProxyPort` | `number` | `undefined` | 用于网络请求的 HTTP 代理端口 |6082| `httpProxyPort` | `number` | `undefined` | 用于网络请求的 HTTP 代理端口 |

6075| `socksProxyPort` | `number` | `undefined` | 用于网络请求的 SOCKS 代理端口 |6083| `socksProxyPort` | `number` | `undefined` | 用于网络请求的 SOCKS 代理端口 |

6076 6084 

agent-view.md +8 −2

Details

320 320 

321#### 恢复过往会话321#### 恢复过往会话

322 322 

323在 Claude Code v2.1.212 或更高版本上,要恢复会话,请在[分派输入框](#dispatch-an-agent-from-agent-view)中输入 `/resume`。此时会打开一个选择器,按从新到旧的顺序列出您打开 agent view 所在仓库的过往会话,包括您从列表中删除的会话。已有行的会话不会列出。按 `Enter` 将选中的会话作为后台会话恢复,使其以行的形式重新加入列表。323要恢复会话,请在[分派输入框](#dispatch-an-agent-from-agent-view)中输入 `/resume`。此时会打开一个选择器,按从新到旧的顺序列出您打开 agent view 所在仓库的过往会话,包括您从列表中删除的会话。已有行的会话不会列出。按 `Enter` 将选中的会话作为后台会话恢复,使其以行的形式重新加入列表。

324 324 

325在以下情况下,`/resume` 会失败并显示 `isn't available in agent view`:325在以下情况下,`/resume` 会失败并显示 `isn't available in agent view`:

326 326 


410* `/logout` 将您注销410* `/logout` 将您注销

411* `/model`、`/effort` 和 `/fast` 设置 [您接下来分派的会话启动时使用的配置](#set-the-model-effort-and-fast-mode)。`/effort` 和 `/fast` 需要 Claude Code v2.1.299 或更高版本。411* `/model`、`/effort` 和 `/fast` 设置 [您接下来分派的会话启动时使用的配置](#set-the-model-effort-and-fast-mode)。`/effort` 和 `/fast` 需要 Claude Code v2.1.299 或更高版本。

412* `/login` 打开登录对话框,以便您无需附加到会话即可重新登录412* `/login` 打开登录对话框,以便您无需附加到会话即可重新登录

413* 不带参数的 `/resume` 或其别名 `/continue` 会打开该仓库过去会话的选择器,以将其中一个作为后台会话 [恢复](#bring-back-a-past-session)。需要 Claude Code v2.1.212 或更高版本413* 不带参数的 `/resume` 或其别名 `/continue` 会打开该仓库过去会话的选择器,以将其中一个作为后台会话 [恢复](#bring-back-a-past-session)

414 414 

415Skill、您自己的命令以及会展开为提示词的内置命令(如 `/init`)会作为第一条提示词发送到新的后台会话。`isn't available in agent view` 提示表示您输入的内置命令没有运行。要运行它,请 [附加到会话](#attach-to-a-session) 并在其中输入。您输入的所有内容都会保留在该提示旁边的输入框中,以便您进行编辑。415Skill、您自己的命令以及会展开为提示词的内置命令(如 `/init`)会作为第一条提示词发送到新的后台会话。`isn't available in agent view` 提示表示您输入的内置命令没有运行。要运行它,请 [附加到会话](#attach-to-a-session) 并在其中输入。您输入的所有内容都会保留在该提示旁边的输入框中,以便您进行编辑。

416 416 


454 454 

455当 [Agent 视图已关闭](#turn-off-agent-view) 时,`/fork` 会启动一个 [fork 出的子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation),而不是复制会话。455当 [Agent 视图已关闭](#turn-off-agent-view) 时,`/fork` 会启动一个 [fork 出的子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation),而不是复制会话。

456 456 

457##### 向副本发送提示词并打开其会话

458 

457传递一个提示词,例如 `/fork open a draft pull request with the work so far`,副本会立即开始处理。不带提示词时,副本会等待第一条指令:在 `claude agents` 中选择其行并按 `Space` 发送一条,或运行 `claude attach <id>`。等待期间,所选行会显示 `space to send it a prompt`。459传递一个提示词,例如 `/fork open a draft pull request with the work so far`,副本会立即开始处理。不带提示词时,副本会等待第一条指令:在 `claude agents` 中选择其行并按 `Space` 发送一条,或运行 `claude attach <id>`。等待期间,所选行会显示 `space to send it a prompt`。

458 460 

459`/fork` 的确认信息只有一行,显示副本的状态(例如 `session running`)、其在 Agent 视图中的行名称,以及用于 `claude attach` 的会话 ID。单击名称即可切换到副本:此会话会移到后台(与按 `←` 相同),Agent 视图随即打开副本的会话。461`/fork` 的确认信息只有一行,显示副本的状态(例如 `session running`)、其在 Agent 视图中的行名称,以及用于 `claude attach` 的会话 ID。单击名称即可切换到副本:此会话会移到后台(与按 `←` 相同),Agent 视图随即打开副本的会话。

460 462 

463##### 副本运行的位置

464 

461除非副本 [就地编辑](#how-file-edits-are-isolated),Claude Code 会指示它在进行代码更改前创建自己的 worktree。在 git 仓库外,只有从 hook 创建的 worktree 移出的副本才会获得该指令;没有 [`WorktreeCreate` hook](https://code.claude.com/docs/zh-CN/hooks#worktreecreate) 时,副本就地编辑。无论隔离设置如何,从您的 worktree 移出的副本还会被告知绝不要编辑该 worktree、在其中运行命令或进入该 worktree。465除非副本 [就地编辑](#how-file-edits-are-isolated),Claude Code 会指示它在进行代码更改前创建自己的 worktree。在 git 仓库外,只有从 hook 创建的 worktree 移出的副本才会获得该指令;没有 [`WorktreeCreate` hook](https://code.claude.com/docs/zh-CN/hooks#worktreecreate) 时,副本就地编辑。无论隔离设置如何,从您的 worktree 移出的副本还会被告知绝不要编辑该 worktree、在其中运行命令或进入该 worktree。

462 466 

463副本启动的位置取决于当前会话运行的位置:467副本启动的位置取决于当前会话运行的位置:


467* 当您在拥有主工作树的仓库的链接 worktree 内启动会话时,副本会在该主工作树中启动,同样遵循使用自己 worktree 的规则,但没有分支指令。此时确认信息同样以 `runs in the origin tree` 结尾。471* 当您在拥有主工作树的仓库的链接 worktree 内启动会话时,副本会在该主工作树中启动,同样遵循使用自己 worktree 的规则,但没有分支指令。此时确认信息同样以 `runs in the origin tree` 结尾。

468* 在裸仓库布局的 worktree 内启动的会话没有可返回的主工作树,因此副本留在原处,确认信息以 `edits this checkout` 结尾。当在不位于链接 worktree 内的会话中 [关闭了](#how-file-edits-are-isolated) worktree 隔离时,也会出现相同的说明,因为此时副本会编辑您打开的文件。472* 在裸仓库布局的 worktree 内启动的会话没有可返回的主工作树,因此副本留在原处,确认信息以 `edits this checkout` 结尾。当在不位于链接 worktree 内的会话中 [关闭了](#how-file-edits-are-isolated) worktree 隔离时,也会出现相同的说明,因为此时副本会编辑您打开的文件。

469 473 

474##### 无法 fork 的会话

475 

470使用副本无法继承的启动标志(例如替换的系统提示词或 `--tools` 允许列表)启动的会话无法 fork;Claude Code 会说明这一点,而不是创建不完整的副本。从 Agent 视图分派的会话可以正常 fork:副本会使用与来源会话相同的 [Agent 定义](https://code.claude.com/docs/zh-CN/sub-agents.md) 和附加指令启动。476使用副本无法继承的启动标志(例如替换的系统提示词或 `--tools` 允许列表)启动的会话无法 fork;Claude Code 会说明这一点,而不是创建不完整的副本。从 Agent 视图分派的会话可以正常 fork:副本会使用与来源会话相同的 [Agent 定义](https://code.claude.com/docs/zh-CN/sub-agents.md) 和附加指令启动。

471 477 

472#### 后台处理时的继承内容478#### 后台处理时的继承内容

agents.md +1 −1

Details

32 32 

33> [!NOTE]33> [!NOTE]

34>34>

35> 同时运行多个会话或子代理会增加令牌使用量。有关使用情况和速率限制详情,请参阅 [Costs](https://code.claude.com/docs/zh-CN/costs.md)。35> 同时运行多个会话或子代理会成倍增加 token 使用量。有关使用情况和速率限制详情,请参阅 [Costs](https://code.claude.com/docs/zh-CN/costs.md)。

36 36 

37## 选择一种方法37## 选择一种方法

38 38 

Details

251| 主要模型 | Opus 5.5,例如 `us-*` 区域中的 `us.anthropic.claude-opus-5-5` |251| 主要模型 | Opus 5.5,例如 `us-*` 区域中的 `us.anthropic.claude-opus-5-5` |

252| 小型/快速模型 | Sonnet 4.5,例如 `us-*` 区域中的 `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |252| 小型/快速模型 | Sonnet 4.5,例如 `us-*` 区域中的 `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |

253 253 

254在 v2.1.280 之前,Amazon Bedrock 上的主要模型默认为 Opus 5,`opus` 别名从 v2.1.219 起解析为 Opus 5。

255 

254后台任务(如会话标题生成)使用小型/快速模型,通常是 Haiku 级别的模型。在 Amazon Bedrock 上,Claude Code 为后台任务使用默认 Sonnet 模型,因为 Haiku 可能不会在每个账户或区域中启用。两个选择改变哪个模型执行它们:256后台任务(如会话标题生成)使用小型/快速模型,通常是 Haiku 级别的模型。在 Amazon Bedrock 上,Claude Code 为后台任务使用默认 Sonnet 模型,因为 Haiku 可能不会在每个账户或区域中启用。两个选择改变哪个模型执行它们:

255 257 

256* 当您使用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置选择主要模型时,后台任务使用该模型。当 Claude Code 在您使用 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/zh-CN/model-config#set-a-default-model-for-new-sessions) 设置的模型上启动会话时,后台任务也使用该模型。设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 而不设置 `ANTHROPIC_DEFAULT_SONNET_MODEL` 也算作选择,因为内置 Sonnet 模型可能在引导自己的 Opus 的账户中不启用。258* 当您使用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置选择主要模型时,后台任务使用该模型。当 Claude Code 在您使用 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/zh-CN/model-config#set-a-default-model-for-new-sessions) 设置的模型上启动会话时,后台任务也使用该模型。设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 而不设置 `ANTHROPIC_DEFAULT_SONNET_MODEL` 也算作选择,因为内置 Sonnet 模型可能在引导自己的 Opus 的账户中不启用。


260>262>

261> Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主要模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主要模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署保留其引导的 Sonnet 模型作为默认值。263> Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主要模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主要模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署保留其引导的 Sonnet 模型作为默认值。

262 264 

263在 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。

264 

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

266 266 

267```bash theme={null}267```bash theme={null}

artifacts.md +2 −2

Details

95 95 

96选择一个Artifact,然后按以下任一按键:96选择一个Artifact,然后按以下任一按键:

97 97 

98* **`Enter`**:如果它已附加到当前会话,则在浏览器中打开它;如果尚未附加,则将其附加到当前会话。在v2.1.216之前,`Enter`会在浏览器中打开它98* **`Enter`**:如果它已附加到当前会话,则在浏览器中打开它;如果尚未附加,则将其附加到当前会话

99* **`o`**:在浏览器中打开它99* **`o`**:在浏览器中打开它

100* **`c`**:复制其链接100* **`c`**:复制其链接

101* **`d`**:在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)之外,经您确认后永久删除您拥有的Artifact。其链接将对所有人失效,包括您自己101* **`d`**:在[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)之外,经您确认后永久删除您拥有的Artifact。其链接将对所有人失效,包括您自己


225 225 

226当由连接器支持的页面呈现但其实时部分对您组织中的查看者保持为空时,请解决这些原因:226当由连接器支持的页面呈现但其实时部分对您组织中的查看者保持为空时,请解决这些原因:

227 227 

228* **查看者未连接连接器**:连接器是按账户的,因此每个查看者都需要自己连接到页面调用的每个连接器。他们可以在 claude.ai 上的**设置 > 连接器**下添加一个,然后重新加载页面。228* **查看者未连接连接器**:连接器是按账户的,因此每个查看者都需要自己连接到页面调用的每个连接器。他们可以在 claude.ai 上的 [**Customize > Connectors**](https://claude.ai/customize/connectors) 下添加一个,然后重新加载页面。

229* **查看者拒绝了权限请求**:拒绝在该页面加载的其余部分持续。重新加载页面会再次显示权限请求。229* **查看者拒绝了权限请求**:拒绝在该页面加载的其余部分持续。重新加载页面会再次显示权限请求。

230* **为组织关闭了连接器调用**:所有者控制管理设置中的[**启用 artifact 连接器**切换](#control-connector-calls-from-artifacts)。230* **为组织关闭了连接器调用**:所有者控制管理设置中的[**启用 artifact 连接器**切换](#control-connector-calls-from-artifacts)。

231* **页面调用连接器不公开的工具名称**:受影响的部分对所有人(包括您)保持为空。当页面命名网关风格连接器后面的单个工具,而该连接器仅公开其自己的几个工具时,可能会发生这种情况。要求 Claude 修复页面调用的工具名称并再次发布它。231* **页面调用连接器不公开的工具名称**:受影响的部分对所有人(包括您)保持为空。当页面命名网关风格连接器后面的单个工具,而该连接器仅公开其自己的几个工具时,可能会发生这种情况。要求 Claude 修复页面调用的工具名称并再次发布它。

best-practices.md +416 −354

Details

4 4 

5# Claude Code 最佳实践5# Claude Code 最佳实践

6 6 

7> 从配置环境到跨并行会话扩展,充分利用 Claude Code 的提示和模式。7> 充分发挥 Claude Code 的作用:告诉 Claude 它看不到的信息,给它一个可以运行的检查,并强制执行不允许例外的规则。

8 8 

9Claude Code 是一个代理式编码环境。与等待回答问题的聊天机器人不同,Claude Code 可以读取你的文件、运行命令、进行更改,并在你观看、重定向或完全离开的情况下自主解决问题。9Claude Code 的设计使得在大多数情况下,您在新会话中的第一个普通提示词就已经能做对事情,无需您进行任何设置。

10 10 

11这改变了你的工作方式。与其自己编写代码并要求 Claude 审查,不如描述你想要什么,让 Claude 弄清楚如何构建它。Claude 会探索、规划和实现。11例如:

12 12 

13但这种自主性仍然伴随着学习曲线。Claude 在某些约束条件下工作,你需要理解这些约束。13* 为了让命令安全运行而无需您逐一批准,新的终端和 VS Code 会话以[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)启动,由分类器在任何有风险的操作运行之前进行审查。

14* 为了在独立工作并行进行时保持主对话的专注,Claude 会将工作委派给子代理,并且只在必要时与您确认。

15* 为了让长会话持续进行而无需您管理,对话会在上下文窗口填满之前自动压缩。

14 16 

15本指南涵盖了在 Anthropic 内部团队和在各种代码库、语言和环境中使用 Claude Code 的工程师中已被证明有效的模式。有关代理循环如何在幕后工作的信息,请参阅 [Claude Code 如何工作](https://code.claude.com/docs/zh-CN/how-claude-code-works.md)。17本页介绍默认设置不够用时该怎么做。这种情况通常发生在您的项目拥有 Claude 无法仅从代码中看到的知识、规则或约束时:

16 18 

17***19* 只存在于某个人脑子里的部署流程

20* 绝不能被读取的文件

21* 必须通过才算完成的检查

22* 您需要控制在其内的预算

18 23 

19大多数最佳实践都基于一个约束:Claude 的 context window 填充速度很快,随着填充,性能会下降。24没有任何默认设置能知道您项目的这些情况,所以在这里您做一点设置就能获得回报。

20 25 

21Claude 的 context window 保存你的整个对话,包括每条消息、Claude 读取的每个文件和每个命令输出。但这可能会很快填满。单个调试会话或代码库探索可能会生成并消耗数万个 token。26当会话没有按您的预期进行时,几乎总是以下情况之一:

22 27 

23这很重要,因为当 context 填充时,LLM 性能会下降。当 context window 即将满时,Claude 可能会开始"遗忘"早期的指令或犯更多错误。context window 是最重要的资源。要查看会话在实践中如何填充,请 [观看交互式演练](https://code.claude.com/docs/zh-CN/context-window.md),了解启动时加载的内容以及每个文件读取的成本。使用 [自定义状态行](https://code.claude.com/docs/zh-CN/statusline.md) 持续跟踪 context 使用情况,并查看 [减少 token 使用](https://code.claude.com/docs/zh-CN/costs.md#reduce-token-usage) 了解减少 token 使用的策略。28* Claude 构建的东西与您设想的不同,或者它每次会话开始时都要重新发现同一个事实。它缺少无法通过阅读仓库获得的信息。请参阅[告诉 Claude 它看不到的信息](#tell-claude-what-it-cant-see)。

29* Claude 说已经完成了,但其实还差一点,这通常是因为它没有办法检查自己的工作。请参阅[给 Claude 一个可以运行的检查](#give-claude-a-check-to-run)。

30* Claude 做了在这个仓库中绝不应该发生的事,或者跳过了必须始终执行的步骤。仅靠提示词无法保证这两者。请参阅[强制执行不允许例外的规则](#enforce-the-rules-that-cant-have-exceptions)。

31* Claude 做对了,但花费的时间、token 或权限提示超出了任务本身的价值。请参阅[更改默认设置](#change-a-default)。

24 32 

25***33[让 Claude 在无人值守时运行](#let-claude-run-without-you)将这四点应用于无人值守的运行,而[您可以不再做的事](#what-you-can-stop-doing)列出了当前模型已使其变得不再必要的建议。

26 34 

27## 给 Claude 一种验证其工作的方式35> [!NOTE]

28 

29> [!TIP]

30>36>

31> 给 Claude 一个它可以运行的检查:测试、构建、屏幕截图进行比较。这是你观看的会话和你可以离开的会话之间的区别。37> 面向整个团队的设置在单独的页面上:[为您的组织设置 Claude Code](https://code.claude.com/docs/zh-CN/admin-setup.md)。

32 38 

33当工作看起来完成时,Claude 会停止。没有它可以运行的检查,"看起来完成"是唯一可用的信号,你成为验证循环:每个错误都在等待你注意到它。给 Claude 一些能产生通过或失败的东西,循环就会自动关闭。Claude 完成工作,运行检查,读取结果,并迭代直到检查通过。39## 确定性指令与非确定性指令

34 40 

35检查是任何返回 Claude 可以在对话中读取的信号的东西:测试套件、构建退出代码、linter、针对固定装置比较输出的脚本,或与设计进行比较的[浏览器屏幕截图](https://code.claude.com/docs/zh-CN/chrome.md)。运行 [`/verify`](https://code.claude.com/docs/zh-CN/skills#run-and-verify-your-app) 在 Claude 的检查通过后自己确认针对运行中的应用的更改。41您给 Claude Code 的每一条指令都属于以下之一:

36 42 

37| 策略 | 之前 | 之后 |431. 非确定性:您编写指令,由 Claude(模型)读取。这可以是您的提示词、`CLAUDE.md` 或 skill。然后由模型决定如何处理这些信息。它通常会遵循您的命令,当前模型也很擅长在没有太多上下文的情况下理解您的意图,但并不*保证*它会遵循您的指令。它仍然可能决定不做某些事,或者做其他事。

38| - | - | - |442. 确定性:您配置指令,由 Claude Code(harness)*必须*执行。这可以是 hook、拒绝规则或托管设置。无论模型决定做什么,Claude Code 每次都会应用它。

39| **提供验证标准** | *"实现一个验证电子邮件地址的函数"* | *"编写一个 validateEmail 函数。示例测试用例:[user@example.com](mailto:user@example.com) 为真,invalid 为假,[user@.com](mailto:user@.com) 为假。实现后运行测试"* |

40| **以视觉方式验证 UI 更改** | *"让仪表板看起来更好"* | *"\[粘贴屏幕截图] 实现此设计。对结果进行屏幕截图并与原始设计进行比较。列出差异并修复它们"* |

41| **解决根本原因,而不是症状** | *"构建失败"* | *"构建失败,出现此错误:\[粘贴错误]。修复它并验证构建成功。解决根本原因,不要抑制错误"* |

42 45 

43一旦检查存在,决定它对停止的限制有多严格:46Claude Code 中的大多数东西都有这两种形式:

44 47 

45* **在一个提示中**:要求 Claude 运行检查并在同一消息中迭代,如上表所示。48| | 非确定性(由 Claude 决定) | 确定性(由 Claude Code 强制执行) |

46* **在整个会话中**:将检查设置为 [`/goal` 条件](https://code.claude.com/docs/zh-CN/goal)。单独的评估器在每次转换后重新检查它,Claude 继续工作直到目标解决。如果 Claude 停滞,Claude Code 最终会在目标仍然设置的情况下停止运行 — 请参阅 [/goal 评估如何工作](https://code.claude.com/docs/zh-CN/goal.md#how-evaluation-works)。49| :- | :- | :- |

47* **作为确定性门**:[Stop hook](https://code.claude.com/docs/zh-CN/hooks.md#stop) 作为脚本运行你的检查,并阻止转换结束直到它通过。[Stop input](https://code.claude.com/docs/zh-CN/hooks.md#stop-input) 涵盖连续阻止的上限。50| 做什么 | 您的提示词、`CLAUDE.md`、Claude 自行选用的 skill | hook,以及只有您才能启动的 skill |

48* **通过第二意见**:[验证子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)或[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md)检查自己的发现,有一个新鲜的模型尝试反驳结果,所以做工作的代理不是给它评分的。51| 能触及什么 | 自动模式的分类器 | 拒绝规则、[严格模式](https://code.claude.com/docs/zh-CN/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)下的沙箱、托管设置 |

52| 何时算完成 | 要求提供证据、`/goal`、`/code-review` | 测试、类型检查、`Stop` hook、CI |

53| 花费多少 | effort 级别、Claude 自己的节奏 | 配合 `-p` 使用的 `--max-turns` 或 [`--max-budget-usd`](https://code.claude.com/docs/zh-CN/cli-reference)、您设置的[支出限额](https://code.claude.com/docs/zh-CN/costs.md) |

54| 谁拥有最终决定权 | Claude 对其所做工作的总结 | 分支保护、批准合并的人 |

49 55 

50每一步都用设置换取关注。提示版本适用于今天的任何任务。`/goal` 和 Stop hook 版本是让无人值守运行正确完成而无需你的东西。56大多数时候,您希望由 Claude 来决定。几乎每条准则都有例外,而当前模型很擅长阅读眼前的代码并判断某条准则是否适合当前情况。有了实际代码在眼前,Claude 通常比您事先写好的规则更适合做出这个判断。

51 57 

52让 Claude 显示证据而不是声称成功:测试输出、它运行的命令及其返回的内容,或结果的屏幕截图。审查证据比自己重新运行验证要快,并且它适用于你没有观看的会话。58确定性的那一类适用于您想确保某些事*始终*发生(或永不发生)的情况,无论模型作何决定。这不一定是什么重大的事。自动模式已经[阻止了那些重大的事](https://code.claude.com/docs/zh-CN/permission-modes.md#what-the-classifier-blocks-by-default),比如生产部署或强制推送覆盖他人的工作。它通常是*您的*项目特有的东西,可以要多小众就多小众:

53 59 

54***60* 永远不要编辑 `src/gen/` 中生成的客户端

61* 创建文件后始终运行 license-header 脚本

55 62 

56## 先探索,再规划,最后编码63您本可以把这两条写成 `CLAUDE.md` 中的一行或写在提示词里,Claude 几乎每次都会遵循。但无论您的措辞多么强烈,Claude 在某一轮次中是否遵循那一行,仍然由 Claude 决定。

57 64 

58> [!TIP]65> [!TIP]

59>66>

60> 将研究和规划与实现分开,以避免解决错误的问题。67> 如果您不断给 `CLAUDE.md` 中的某一行加强调,而 Claude 仍然遗漏它,这说明这一行应该放进 hook。反过来也成立:如果您为一些只是偏好的事情设置了 hook,请删除它们,让 Claude 来决定。

61 68 

62让 Claude 直接跳到编码可能会产生解决错误问题的代码。使用 [Plan Mode](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode) 将探索与执行分开。69## 告诉 Claude 它看不到的信息

63 70 

64推荐的工作流有四个阶段:71> [!TIP]

72>

73> 只写下 Claude 通过阅读仓库找不到的内容,或者它原本每次会话都要花时间重新发现的内容。

65 74 

66**1. 探索**75Claude 在开始每个任务时都会阅读您的代码,而当前模型在这方面*非常*擅长。它们会找到您的文件布局、约定、测试框架以及现有组件的构建方式,通常比您解释得还快。这意味着 Claude 已经知道您可能想为它写下的大部分内容。

67 76 

68进入 Plan Mode,按 `Shift+Tab` 直到状态栏显示 `⏸ plan mode on`,或使用 `claude --permission-mode plan` 启动会话。Claude 读取文件并回答问题,不进行任何更改。77它找不到的,是从未存在于仓库中的信息:

69 78 

70```txt title="claude (plan mode)" wrap theme={null}79* 您的团队在会议上做出的决定

71read /src/auth and understand how we handle sessions and login.80* 只存在于某一个人脑子里的部署流程

72also look at how we manage environment variables for secrets.81* 集成测试所需的环境变量

73```

74 82 

75**2. 规划**83还有一些信息*确实*在仓库里,但需要花几分钟挖掘才能找到,而 Claude 每次会话开始时都必须重新挖掘一遍。

76 84 

77要求 Claude 创建详细的实现计划。85在为 Claude 写下任何东西之前,一个好的检验方法:

78 86 

79```txt title="claude (plan mode)" wrap theme={null}871. 它能通过阅读代码找到这个吗?

80I want to add Google OAuth. What files need to change?882. 它真的会去查找吗?

81What's the session flow? Create a plan.

82```

83 89 

84按 `Ctrl+G` 在文本编辑器中打开计划进行直接编辑,然后 Claude 继续。90如果两个答案都是肯定的,就不用写。

85 91 

86**3. 实现**92### 编写具体的提示词

87 93 

88切换出 Plan Mode,通过批准计划或按 `Shift+Tab`,然后让 Claude 编码,根据其计划进行验证。94具体的提示词之所以有帮助,原因相同:它给了 Claude 原本没有的信息。如果您一开始就指明文件、描述症状并说明"修复"是什么样子,通常可以省去之后的一轮更正。

89 95 

90```txt title="claude" wrap theme={null}96对于两种合理方法之间的偏好也是如此:Claude 无法从代码中读出这一点,所以如果您在意它选择哪种,请一开始就说明。

91implement the OAuth flow from your plan. write tests for the

92callback handler, run the test suite and fix any failures.

93```

94 97 

95**4. 提交**98| 不要这样 | 试试这样 |

99| :- | :- |

100| *"修复登录错误"* | *"用户报告会话超时后登录失败。查看 src/auth/ 中的 token 刷新,编写一个能重现问题的失败测试,然后修复它"* |

101| *"添加一个日历小部件"* | *"按照 HotDogWidget.php 中的模式,构建一个日历小部件,让用户可以选择月份并在年份之间翻页。不要引入新库"* |

96 102 

97要求 Claude 使用描述性消息进行提交并创建 PR。103如果您已经有 Claude 需要的东西,直接交给它,而不是去描述它:

98 104 

99```txt title="claude" wrap theme={null}105* 文件:输入 `@` 和路径,即可在消息中[包含文件内容](https://code.claude.com/docs/zh-CN/common-workflows.md#reference-files-and-directories)。

100commit with a descriptive message and open a PR106* 图像:将设计或错误的屏幕截图粘贴到提示词中。

101```107* 命令输出:从 shell 中通过管道传入,例如 `cat error.log | claude -p "what's going on here"`。

102 108 

103Plan Mode 很有用,但也增加了开销。109像 `think step by step` 或 `be thorough` 这样的短语只是普通的提示词文本,而不是关键词。控制 Claude 思考深度的主要手段是 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level),[更改模型和 effort](#change-the-model-and-effort) 中有相关介绍。这类措辞仍然可以在 effort 设置范围内轻微推动 Claude,但不会让它超出该设置。

104 110 

105对于范围明确且修复很小的任务(如修复拼写错误、添加日志行或重命名变量),要求 Claude 直接执行。111有一个短语仍然有帮助,那就是 `be ambitious`。Claude 往往会保守地理解请求,构建能满足它的最小实现,因为它看不到您期望的程度。当您想要更完整的版本,处理好边界情况并包含自然的后续工作时,请明确说出来:

106 112 

107当你对方法不确定、更改修改多个文件或你不熟悉被修改的代码时,规划最有用。如果你能用一句话描述 diff,跳过计划。113```text theme={null}

114build the settings page from the mockup. be ambitious: empty and error states, the save flow wired up, keyboard navigation, not just the layout

115```

108 116 

109***117这是在告诉 Claude 范围,而范围只有您知道,而不是告诉它要思考多深。

110 118 

111## 在提示中提供具体的上下文119当您在探索而不是修复某个具体问题时,像 `what would you improve in this file?` 这样模糊的提示词完全没问题。您会在过程中多做一些更正,这就是其中的取舍。

112 120 

113> [!TIP]121### 先与 Claude 进行头脑风暴

114>

115> 你的指令越精确,你需要的更正就越少。

116 122 

117Claude 可以推断意图,但它不能读心术。引用特定文件、提及约束,并指出示例模式。123当您还不确定自己想要什么时,不必在提示之前就把一切想清楚。可以让 Claude 来采访您:

118 124 

119| 策略 | 之前 | 之后 |125```text theme={null}

120| - | - | - |126I want to add rate limiting to the public API but haven't thought it through yet. Interview me until you could write the spec, then write it to SPEC.md.

121| **限定任务范围。** 指定哪个文件、什么场景和测试偏好。 | *"为 foo.py 添加测试"* | *"为 foo.py 编写测试,涵盖用户已注销的边界情况。避免 mock。"* |127```

122| **指向来源。** 指导 Claude 到可以回答问题的来源。 | *"为什么 ExecutionFactory 有这样奇怪的 api?"* | *"查看 ExecutionFactory 的 git 历史并总结其 api 是如何形成的"* |

123| **参考现有模式。** 指向代码库中的模式。 | *"添加日历小部件"* | *"查看主页上现有小部件的实现方式以了解模式。HotDogWidget.php 是一个很好的例子。按照模式实现一个新的日历小部件,让用户选择月份并向前/向后分页以选择年份。从头开始构建,除了代码库中已使用的库外,不使用其他库。"* |

124| **描述症状。** 提供症状、可能的位置以及"修复"的样子。 | *"修复登录错误"* | *"用户报告会话超时后登录失败。检查 src/auth/ 中的身份验证流程,特别是 token 刷新。编写一个失败的测试来重现问题,然后修复它"* |

125 128 

126当你在探索并能够改正方向时,模糊的提示可能很有用。像 `"你会改进这个文件的什么?"` 这样的提示可以表面你不会想到要问的东西。129Claude 会就您尚未确定的部分提出多项选择题:按用户还是按密钥限流、超出限制的请求如何处理、哪些不在范围内。它会一直提问,直到答案足以构成一份规范。

127 130 

128### 提供丰富的内容131`SPEC.md` 生成之后,开启一个新会话并基于它进行构建,这样构建就从干净的上下文和一份书面的完成定义开始。之后在[给 Claude 一个可以运行的检查](#give-claude-a-check-to-run)中,您也会让审查者参照这个文件。

129 132 

130> [!TIP]133### 保持 CLAUDE.md 简短

131>

132> 使用 `@` 引用文件、粘贴屏幕截图/图像或直接管道数据。

133 134 

134你可以通过多种方式向 Claude 提供丰富的数据:135Claude Code 会将 [`CLAUDE.md`](https://code.claude.com/docs/zh-CN/memory) 加载到每个会话中,这意味着其中每一行在*每个*任务上都会占用 Claude 的一点注意力,无论是否相关。这就是为什么这个文件只包含 Claude 无法从代码本身推断出的内容时效果最好:

135 136 

136* **使用 `@` 引用文件**,而不是描述代码的位置。Claude 在响应前读取文件。137* 如何在这个仓库中确认工作:确切的测试、类型检查和 lint 命令,以及如何运行单个测试文件

137* **直接粘贴图像**。复制/粘贴或拖放图像到提示中。138* 代码具有误导性的地方:随处可见但新代码不得照搬的旧模式,或者看起来没有被使用但实际在用的目录

138* **提供 URL** 用于文档和 API 参考。使用 `/permissions` 将经常使用的域添加到允许列表。139* 不在仓库中的决定:团队选定了哪个错误辅助函数、部署如何进行、什么需要迁移审查

139* **通过管道传入数据**,运行 `cat error.log | claude -p "explain this error"` 直接发送文件内容。140* 任何您已经更正过两次的事情

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

141 141 

142***142通过这一检验的 `CLAUDE.md` 会保持简短:

143 143 

144## 配置你的环境144```markdown CLAUDE.md theme={null}

145# Commands

146- Install: pnpm install

147- Run one test file: pnpm vitest run path/to/file.test.ts

148- Typecheck: pnpm tsc --noEmit

145 149 

146一些设置步骤使 Claude Code 在所有会话中显著更有效。有关扩展功能的完整概述和何时使用每个功能,请参阅 [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md)。150# Conventions

151- Use the error helpers in src/lib/errors.ts, never throw raw strings

152- src/legacy/ is still live but don't copy its patterns into new code

147 153 

148### 编写有效的 CLAUDE.md154# Gotchas

155- Integration tests need DATABASE_URL set, see .env.example

156```

149 157 

150> [!TIP]158在会话中运行 `/context` 以确认 Claude 已加载该文件。

151>

152> 运行 `/init` 根据你的当前项目结构生成启动 CLAUDE.md 文件,然后随时间精化。

153 159 

154CLAUDE.md 是一个特殊文件,Claude 在每次对话开始时读取。包括 Bash 命令、代码风格和工作流规则。这给 Claude 提供了它无法从代码中推断的持久上下文。160请注意,类型检查那一行只是命令本身。Claude 需要知道这个命令,以便在工作过程中检查自己的工作。如果您还希望 Claude Code 在 Claude 完成之前*强制*要求类型检查通过,那是 [`Stop` hook](#enforce-the-check-with-a-stop-hook) 的工作。在这个文件中写 `Always typecheck before you finish` 这样的一行,大多数时候有效,但并非每次都有效。

155 161 

156CLAUDE.md 文件没有必需的格式,但保持简短和易读。例如:162您不必从头编写这个文件:

157 163 

158```markdown CLAUDE.md theme={null}164* `/init` 会根据您的代码库生成一个初始版本。之后的工作主要是删减行。[记忆指南](https://code.claude.com/docs/zh-CN/memory.md#write-effective-instructions)建议保持在 200 行以内。

159# Code style165* `/doctor` 会针对 Claude [已能从代码中推断出](https://code.claude.com/docs/zh-CN/memory.md#my-claude-md-is-too-large)的内容建议删减。

160- Use ES modules (import/export) syntax, not CommonJS (require)166* `/doctor prompt-audit` 会标记为旧模型编写的指令、指向已不存在文件的指令,或[相互矛盾](https://code.claude.com/docs/zh-CN/memory.md#audit-your-instruction-files)的指令。

161- Destructure imports when possible (eg. import { foo } from 'bar')

162 167 

163# Workflow168您的个人偏好应放在 `CLAUDE.local.md` 而不是 `CLAUDE.md` 中,并将该文件添加到 `.gitignore`,使其不进入仓库。

164- Be sure to typecheck when you're done making a series of code changes

165- Prefer running single tests, and not the whole test suite, for performance

166```

167 169 

168运行 `/context` 来确认 Claude 加载了该文件。CLAUDE.md 在每个会话中加载,所以只包括广泛适用的东西。对于仅有时相关的域知识或工作流,改用 [skills](https://code.claude.com/docs/zh-CN/skills.md)。Claude 按需加载它们,不会使每次对话都膨胀。170> [!NOTE]

171>

172> 如果 Claude 一直忽略*确实*写在 `CLAUDE.md` 中的某一行,添加 IMPORTANT 可能解决不了问题。要么是文件已经长到让这一行被淹没,要么这一行是一条不允许例外的规则,在这种情况下它应该放进 [hook](#enforce-the-rules-that-cant-have-exceptions)。

169 173 

170保持简洁。对于每一行,问自己:*"删除这个会导致 Claude 犯错吗?"* 如果不会,删除它。膨胀的 CLAUDE.md 文件会导致 Claude 忽略你的实际指令!174### 将规则限定到代码库的某一部分

171 175 

172| ✅ 包括 | ❌ 排除 |176如果某条规则只在代码库的某一部分有意义,请将它放在 [`.claude/rules/`](https://code.claude.com/docs/zh-CN/memory#path-specific-rules) 中,并加上 `paths:` 过滤器,这样它只会在 Claude 实际在那里工作时加载。例如,下面这个 `.claude/rules/api.md` 会针对 `src/api/` 下的 TypeScript 文件加载:

173| - | - |

174| Claude 无法猜测的 Bash 命令 | Claude 可以通过读取代码弄清楚的任何东西 |

175| 与默认值不同的代码风格规则 | Claude 已经知道的标准语言约定 |

176| 测试指令和首选测试运行器 | 详细的 API 文档(改为链接到文档) |

177| 存储库礼仪(分支命名、PR 约定) | 经常变化的信息 |

178| 特定于你的项目的架构决策 | 长解释或教程 |

179| 开发者环境怪癖(必需的环境变量) | 自明的实践,如"编写干净的代码" |

180| 常见陷阱或非显而易见的行为 | 不言自明的实践,如"编写干净的代码" |

181 177 

182如果 Claude 继续做你不想要的事情,尽管有反对的规则,该文件可能太长,规则被遗漏了。如果 Claude 问你在 CLAUDE.md 中回答的问题,措辞可能不明确。像对待代码一样对待 CLAUDE.md:当事情出错时审查它,定期修剪它,并通过观察 Claude 的行为是否实际改变来测试更改。对于检入的 CLAUDE.md,运行 [`/doctor`](https://code.claude.com/docs/zh-CN/commands#all-commands),Claude 会建议删除它可以从代码库中推导的内容。178```markdown .claude/rules/api.md theme={null}

179---

180paths:

181 - "src/api/**/*.ts"

182---

183- Validate request bodies with the zod schemas in src/api/schemas/, don't hand-roll checks

184- Every new endpoint needs an entry in openapi.yaml, CI fails without it

185```

183 186 

184如果 Claude 继续跳过一条指令,添加强调,如"IMPORTANT"到那一行。如果你强调许多行,没有一行会突出。将 CLAUDE.md 检入 git,以便你的团队可以贡献。该文件随时间增加价值。187### 将团队流程放进 skill

185 188 

186CLAUDE.md 文件可以使用 `@path/to/import` 语法导入其他文件。有关导入规则和 CLAUDE.md 文件可以存在的位置,请参阅 [CLAUDE.md 文件](https://code.claude.com/docs/zh-CN/memory.md#claude-md-files)。189能力更强的模型懂得更多工程知识,但并不知道*您的*团队如何发布版本、您的事故处理手册写了什么,或者您希望 API 文档怎样编写。这类知识应放在 [skill](https://code.claude.com/docs/zh-CN/skills.md) 中:保存在 `.claude/skills/<name>/SKILL.md` 的流程或团队知识。

187 190 

188### 配置权限191对于这类内容,skill 对上下文的占用也比 `CLAUDE.md` 更轻。对于 Claude 可以自行启动的 skill,它在每个会话中只看到名称和描述,只有在任务需要时才会[读取完整文件](https://code.claude.com/docs/zh-CN/skills.md#skill-content-lifecycle)。放在 skill 中的冗长发布流程,不会像放在 `CLAUDE.md` 中那样拖累您无关的错误修复。

189 192 

190> [!TIP]193> [!NOTE]

191>194>

192> 要获得更少的提示而不放弃控制,使用 `/permissions` 预先批准你信任的工具,并使用 `/sandbox` 让沙箱命令无需询问即可运行。当你想自己批准编辑和命令时,切换到手动模式。195> `CLAUDE.md` 的规则同样适用于 skill:只写下 Claude 自己找不到的内容。

193 196 

194在 Claude Code v2.1.283 或更高版本中,auto mode 是交互式终端和 VS Code 会话的 [内置起始权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode):一个单独的分类器模型审查大多数操作,而不是你,仅阻止看起来有风险的东西,如范围升级、未知基础设施或由敌对内容驱动的操作。在早期版本中,auto mode 仅在 Pro、Max 和 Team 计划上是交互式终端和 VS Code 会话的内置起始权限模式。197对于有副作用的工作流,比如真正发布那个版本,请添加 `disable-model-invocation: true`。这样 Claude 就[无法自行启动该 skill](https://code.claude.com/docs/zh-CN/skills.md#control-who-invokes-a-skill),只有当您自己输入 `/release` 时它才会运行。保存为 `.claude/skills/release/SKILL.md` 后,它可能如下所示:

195 198 

196在手动模式中,Claude Code 在可能修改你的系统的操作之前询问:文件写入、Bash 命令、MCP 工具。这是安全的但繁琐。在第十次批准后,你在点击通过而不是审查。两个工具在手动模式中减少这些中断,也适用于 auto mode:199```markdown .claude/skills/release/SKILL.md theme={null}

200---

201name: release

202description: Cut a new release. Bumps the version, writes the changelog entry, tags it and pushes the tag so CI can publish.

203disable-model-invocation: true

204---

2051. Make sure you're on main with a clean tree. If not, stop and ask.

2062. Run `pnpm changeset version` and commit the result.

2073. Summarize the PRs merged since the last tag into CHANGELOG.md, one line each, user-facing changes only.

2084. Tag `v<new version>` and push the tag. CI publishes from there, never publish from your machine.

209```

197 210 

198* **权限允许列表**:允许你知道是安全的特定工具,如 `npm run lint` 或 `git commit`211### 连接 Claude 需要的工具

199* **沙箱**:启用操作系统级隔离,限制文件系统和网络访问,允许 Claude 在定义的边界内更自由地工作

200 212 

201阅读更多关于 [权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)、[权限规则](https://code.claude.com/docs/zh-CN/permissions.md) 和 [沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md)。213Claude 看不到的一些信息完全存在于其他系统中,比如您的问题跟踪器或错误仪表板。如果该系统有 CLI,那通常是最简单的接入方式。例如,安装并登录 `gh` 后,Claude 无需您做任何解释就会创建 Pull Request 并读取审查评论。对于它没见过的 CLI,让它查看 `--help` 就足够了。

202 214 

203### 使用 CLI 工具215对于没有 CLI 的系统,可以使用 [MCP](https://code.claude.com/docs/zh-CN/mcp.md)。您可以从 shell 中添加服务器:

204 216 

205> [!TIP]217```bash theme={null}

206>218claude mcp add --transport http notion https://mcp.notion.com/mcp

207> 告诉 Claude Code 在与外部服务交互时使用 CLI 工具,如 `gh`、`aws`、`gcloud` 和 `sentry-cli`。219```

220 

221之后该服务器会出现在会话内的 `/mcp` 下。已连接的服务器即使在您不使用时,也会将其工具名称和说明添加到上下文中,因此值得在那里[关闭您不需要的服务器](https://code.claude.com/docs/zh-CN/mcp.md#disable-a-server-without-removing-it)。

222 

223如果您使用类型化语言工作,[代码智能插件](https://code.claude.com/docs/zh-CN/plugins/code-intelligence.md)可以让 Claude 直接跳转到定义,而不必阅读许多文件去寻找它。

208 224 

209CLI 工具是与外部服务交互的最 context 高效的方式。如果你使用 GitHub,安装 `gh` CLI。Claude 知道如何使用它来创建问题、打开拉取请求和读取评论。没有 `gh`,Claude 仍然可以使用 GitHub API,但未认证的请求经常会触发速率限制。225## 给 Claude 一个可以运行的检查

210 226 

211Claude 也有效地学习它不知道的 CLI 工具。尝试像 `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.` 这样的提示。227当工作看起来完成时,Claude 就会停止。如果它没有可以运行的东西来告诉它工作是否*确实*完成,那么"看起来完成"就是它唯一的依据。实际上,这会让您成为测试套件,每个错误都会留在那里,直到您碰巧注意到它。

212 228 

213### 连接 MCP 服务器229如果您给它一个返回通过或失败的东西,Claude 就可以自己闭合这个循环。它进行更改,运行检查,如果有东西出错,它会读取输出并修复,然后再次运行检查。

214 230 

215> [!TIP]231> [!TIP]

216>232>

217> 运行 `claude mcp add` 带有服务器名称和 URL 或命令来连接外部工具,如 Notion、Figma 或你的数据库。例如:`claude mcp add --transport http notion https://mcp.notion.com/mcp`。233> 给 Claude 一个可以运行并返回通过或失败的东西。一旦有了它,Claude 就可以自行继续工作,您不必盯着。

218 234 

219使用 [MCP servers](https://code.claude.com/docs/zh-CN/mcp.md),你可以要求 Claude 从问题跟踪器实现功能、查询数据库、分析监控数据、集成来自 Figma 的设计并自动化工作流。235检查几乎可以是任何东西,只要 Claude 能读取结果:

220 236 

221### 设置 hooks237* 测试文件

238* 构建的退出码

239* linter

240* 将输出与固定数据进行 diff 对比的脚本

241* 放在设计稿旁边的[浏览器屏幕截图](https://code.claude.com/docs/zh-CN/chrome.md)

222 242 

223> [!TIP]243如果您的仓库中已经有其中之一,那么 `CLAUDE.md` 中最有用的一行就是运行它的命令。

224>

225> 使用 hooks 来处理必须每次发生且没有例外的操作。

226 244 

227[Hooks](https://code.claude.com/docs/zh-CN/hooks-guide.md) 在 Claude 工作流中的特定点自动运行脚本。与 CLAUDE.md 指令不同,hooks 是确定性的,保证操作发生。245检查要多严格由您决定。可选方案从由 Claude 自行决定一直到由 Claude Code 强制执行:

228 246 

229Claude 可以为你编写 hooks。尝试像 *"编写一个在每次文件编辑后运行 eslint 的 hook"* 或 *"编写一个阻止写入迁移文件夹的 hook"* 这样的提示。编辑 `.claude/settings.json` 直接配置 hooks,并运行 `/hooks` 来浏览配置的内容。247* 在提示词中:`run the auth tests after, and keep going until they pass`。由 Claude 自行决定何时满意。这适用于任何任务,今天就能用,无需设置。

248* 作为目标:[`/goal all tests in tests/auth pass and lint is clean`](https://code.claude.com/docs/zh-CN/goal) 会设置一个条件,由一个单独的模型在每个轮次之后对照对话进行检查,Claude 会一直工作直到条件满足。您在会话中很少需要亲自使用它。它对长时间的后台运行很重要,在这类运行中,Claude 有时会在仍有未完成事项时以进度总结结束一个轮次,而目标会把它送回去继续工作。

249* 作为 Stop hook:[`Stop` hook](https://code.claude.com/docs/zh-CN/hooks#stop) 会在 Claude 每次尝试结束其轮次时运行您的脚本,如果脚本以退出码 2 退出,就让 Claude 回去继续工作。这一种由 Claude Code(harness)强制执行,因此在类型检查通过或达到[阻止上限](https://code.claude.com/docs/zh-CN/hooks.md#stop-input)之前,轮次不会结束。[下文有一个示例](#enforce-the-check-with-a-stop-hook)。

250* 由没有编写代码的人检查:在终端中,[`/code-review`](https://code.claude.com/docs/zh-CN/code-review-local) 会在一个从未见过您对话的新子代理中审查 diff。它不会被产生代码的推理过程所左右。

230 251 

231### 创建 skills252无论使用哪种方案,都要向 Claude 索要*证据*:它运行的命令及其输出,或屏幕截图。单独一句"所有测试都通过了"能告诉您的信息很少,而阅读输出比自己重新运行检查更快。对于您没有盯着的会话,这也是您唯一的证据。

232 253 

233> [!TIP]254> [!TIP]

234>255>

235> 在 `.claude/skills/` 中创建 `SKILL.md` 文件,为 Claude 提供域知识和可重用工作流。256> Claude 说完成之后,您还可以在会话中运行 [`/verify`](https://code.claude.com/docs/zh-CN/skills#run-and-verify-your-app),让 Claude 构建并运行应用,然后查看结果。这能发现测试和类型检查遗漏的那类问题。

236 257 

237[Skills](https://code.claude.com/docs/zh-CN/skills.md) 使用特定于你的项目、团队或域的信息扩展 Claude 的知识。Claude 在相关时自动应用它们,或者你可以使用 `/skill-name` 直接调用它们。258### 对照您的规范进行审查

238 259 

239通过向 `.claude/skills/` 添加带有 `SKILL.md` 的目录来创建 skill:260如果您更希望审查是对照您的计划检查工作,而不是泛泛地寻找错误,请自己编写审查提示词:

240 261 

241```markdown .claude/skills/api-conventions/SKILL.md theme={null}262```text theme={null}

242name: api-conventions263use a subagent to review the rate limiter diff against SPEC.md, check every requirement is implemented and the listed edge cases have tests, report gaps that affect correctness and skip style

243description: REST API design conventions for our services

244# API Conventions

245- Use kebab-case for URL paths

246- Use camelCase for JSON properties

247- Always include pagination for list endpoints

248- Version APIs in the URL path (/v1/, /v2/)

249```264```

250 265 

251Skills 也可以定义你直接调用的可重复工作流:266> [!NOTE]

252 267>

253```markdown .claude/skills/fix-issue/SKILL.md theme={null}268> 不要删掉那个提示词中的 `skip style` 部分。被要求找问题的审查者总会找到*一些东西*。如果您修复每一个发现,最终会得到多余的抽象层,以及针对不可能发生的情况的测试。

254name: fix-issue269 

255description: Fix a GitHub issue270### 用 Stop hook 强制执行检查

256disable-model-invocation: true271 

257Analyze and fix the GitHub issue: $ARGUMENTS.272类型检查规则的 `Stop` hook 版本只需在 `.claude/settings.json` 中写几行。退出码 2 是阻止停止的关键。命令打印到 stderr 的任何内容都会作为 Claude 尚不能完成的原因返回给它,这就是编译器输出被重定向到那里的原因:

258 273 

2591. Use `gh issue view` to get the issue details274```json .claude/settings.json theme={null}

2602. Understand the problem described in the issue275{

2613. Search the codebase for relevant files276 "hooks": {

2624. Implement the necessary changes to fix the issue277 "Stop": [

2635. Write and run tests to verify the fix278 {

2646. Ensure code passes linting and type checking279 "hooks": [

2657. Create a descriptive commit message280 { "type": "command", "command": "pnpm tsc --noEmit 1>&2 || exit 2" }

2668. Push and create a PR281 ]

282 }

283 ]

284 }

285}

267```286```

268 287 

269运行 `/fix-issue 1234` 来调用它。对于具有你想手动触发的副作用的工作流,使用 `disable-model-invocation: true`。288要查看效果,请让 Claude 做一个会破坏类型的更改:它不会就此结束,而是收到编译器错误并继续工作,直到 `tsc` 通过。如果该 hook [连续阻止了八次停止](https://code.claude.com/docs/zh-CN/hooks.md#stop-input)且期间没有任何工具调用,Claude Code 会覆盖下一次阻止并结束该轮次。要提高上限,请设置 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](https://code.claude.com/docs/zh-CN/env-vars)。

270 289 

271### 创建自定义 subagents290## 强制执行不允许例外的规则

272 291 

273> [!TIP]292> [!TIP]

274>293>

275> 在 `.claude/agents/` 中定义专门的助手,Claude 可以委托给它们来处理隔离的任务。294> 如果某件事必须每次都发生,请将其设为 hook、拒绝规则或托管设置。`CLAUDE.md` 用于准则,而 Claude 可以判定某条准则不适用。

276 295 

277[Subagents](https://code.claude.com/docs/zh-CN/sub-agents.md) 在自己的 context 中运行,拥有自己的一组允许的工具。它们对于读取许多文件或需要专门关注而不会使你的主对话混乱的任务很有用。296以您现在可能写在 `CLAUDE.md` 中的三条规则为例:`Never read .env`、`Always run the formatter after editing`、`Don't touch the migrations folder`。Claude 几乎每次都会遵循它们。对于少数"几乎"还不够好的规则,请将它们从 `CLAUDE.md` 中移出,放入由 Claude Code(harness)自行应用的配置中。从那以后,结果就不再取决于模型记住了什么或决定了什么。

278 297 

279```markdown .claude/agents/security-reviewer.md theme={null}298### 用 hook 强制执行步骤

280name: security-reviewer299 

281description: Reviews code for security vulnerabilities300[Hooks](https://code.claude.com/docs/zh-CN/hooks-guide.md) 会在 Claude 循环中的固定时间点运行您的某样东西:工具调用之前或之后、Claude 尝试停止时、会话开始时等等。这样东西可以是:

282tools: Read, Grep, Glob, Bash301 

283model: opus302* shell 命令(常见情况)

284You are a senior security engineer. Review code for:303* 向 HTTP 端点发送 POST 请求

285- Injection vulnerabilities (SQL, XSS, command injection)304* 对您某个 MCP 服务器的工具调用

286- Authentication and authorization flaws305* [`prompt` 或 `agent` hook](https://code.claude.com/docs/zh-CN/hooks#hook-handler-fields),让模型来决定

287- Secrets or credentials in code306 

288- Insecure data handling307`prompt` 或 `agent` hook 会让*另一个模型*来决定,所以它也不是确定性的。要真正强制执行,请使用 `command` 或 `http` hook,如果在 hook 本身崩溃或超时时也应阻止该操作,请添加 [`onFailure: "block"`](https://code.claude.com/docs/zh-CN/hooks#block-the-action-when-a-hook-fails)。例如,对于扫描提交中是否含有密钥的 hook,在扫描器宕机时,您宁愿阻止提交,也不愿让它未经扫描就通过。

308 

309下面是将格式化规则写成 `PostToolUse` hook 的样子。它在每次 `Edit` 或 `Write` 之后运行,Claude 是否记得这条规则已不再重要,因为运行它的不是 Claude:

289 310 

290Provide specific line references and suggested fixes.311```json .claude/settings.json theme={null}

312{

313 "hooks": {

314 "PostToolUse": [

315 {

316 "matcher": "Edit|Write",

317 "hooks": [

318 { "type": "command", "command": "npx prettier --write --ignore-unknown \"$(jq -r '.tool_input.file_path')\"" }

319 ]

320 }

321 ]

322 }

323}

291```324```

292 325 

293明确告诉 Claude 使用 subagents:*"使用 subagent 来审查此代码的安全问题。"*326要检验该 hook,请让 Claude 在一个由 Prettier 格式化的文件中添加一行缩进错误的代码。保存后的文件会恢复正确的缩进。

294 327 

295### 安装 plugins328迁移规则则变成一个 [`PreToolUse` hook](https://code.claude.com/docs/zh-CN/hooks-guide#block-edits-to-protected-files),对 `migrations/` 下的任何路径以退出码 2 退出。您不必自己编写它:`write a hook that blocks edits to the migrations folder` 作为提示词就能奏效,`/hooks` 会显示结果。不过不要过度使用:hook 是给*零*例外的规则用的,而 `Prefer named exports` 有很多例外,所以那一条应留在 `CLAUDE.md` 中。

296 329 

297> [!TIP]330### 用权限规则和沙箱限制访问

298>

299> 运行 `/plugin` 来浏览市场。Plugins 添加 skills、工具和集成,无需配置。

300 331 

301[Plugins](https://code.claude.com/docs/zh-CN/plugins/overview.md) 将 skills、hooks、subagents 和 MCP 服务器捆绑到来自社区和 Anthropic 的单个可安装单元中。如果你使用类型化语言,安装 [代码智能 plugin](https://code.claude.com/docs/zh-CN/plugins/code-intelligence.md) 来为 Claude 提供精确的符号导航和编辑后的自动错误检测。332[权限规则](https://code.claude.com/docs/zh-CN/permissions.md)决定 Claude 可以运行、读取和获取什么。`deny` 规则在每种权限模式下都有效,包括自动模式和 `bypassPermissions`,这正是 `.env` 规则应放在这里的原因:

302 333 

303有关在 skills、subagents、hooks 和 MCP 之间选择的指导,请参阅 [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md#match-features-to-your-goal)。334```json .claude/settings.json theme={null}

335{

336 "permissions": {

337 "allow": ["Bash(pnpm tsc --noEmit)"],

338 "ask": ["Bash(git push *)"],

339 "deny": ["Read(./.env)", "Read(./.env.local)", "Read(./secrets/**)"]

340 }

341}

342```

304 343 

305***344保存之后,询问 Claude `.env` 中有什么将会失败,无论是通过 `Read` 工具还是通过 `cat .env`。

306 345 

307## 有效沟通346规则匹配的是工具调用,而不是意图,因此值得了解其边界在哪里:

308 347 

309向 Claude 提出你会问另一位工程师的问题,对于更大的功能,让 Claude 采访你并在开始实现之前编写规范。348* `Read` 规则*确实*能拦截 `cat .env`,因为 Claude Code 能识别[常见的文件读取命令](https://code.claude.com/docs/zh-CN/permissions.md#read-and-edit)。

349* 它无法拦截打开该文件的脚本。

350* 针对某个域名的 `WebFetch` 拒绝规则对指向同一域名的 `curl` 不起作用,除非启用了沙箱。

310 351 

311### 提出代码库问题352要对文件系统或网络访问进行操作系统级的限制,请在会话中使用 `/sandbox` 启用[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md)。它会在 macOS、Linux 和 WSL2 上限制 Claude 的 shell 命令,并且还会[采纳您的 `Read` 拒绝规则和 `WebFetch(domain:...)` 规则](https://code.claude.com/docs/zh-CN/sandboxing#permission-rules),因此对于任何与安全相关的事项,您需要两者兼用。

312 353 

313> [!TIP]354默认情况下,Claude 仍然可以请求在沙箱之外重试被阻止的命令,该请求会经过正常的权限流程。`/sandbox` 的 **Overrides** 选项卡中的[严格沙箱模式](https://code.claude.com/docs/zh-CN/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)会关闭这种重试。

355 

356> [!WARNING]

314>357>

315> 问 Claude 你会问资深工程师的问题。358> 自动模式是一个对每个操作进行判断的分类器模型,而不是硬性规则。它很擅长这件事,但和任何判断一样,它可能出错。您还可以调整它认定为有风险的内容,您的组织也可以完全关闭它,所以您的"绝不"规则应放在拒绝规则或 hook 中。

359 

360### 选择规则适用于谁

316 361 

317当加入新代码库时,使用 Claude Code 进行学习和探索。你可以问 Claude 你会问另一个工程师的相同类型的问题:362规则放在哪里,决定了它适用于谁:

318 363 

319* 日志如何工作?364* `.claude/settings.local.json` 和 `~/.claude/settings.json` 只属于您自己。当您为某个命令选择 **Yes, and don't ask again** 时,Claude Code 会将该规则保存到本地文件中。

320* 我如何创建新的 API 端点?365* `.claude/settings.json` 及其中的 hook 属于仓库。一旦您提交它们,它们就会适用于在该仓库中工作的每个人。其中的拒绝规则立即生效。其中的 `allow` 规则要等到每个人接受该文件夹的[信任对话框](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)后才生效,[工作区信任](https://code.claude.com/docs/zh-CN/hooks.md#workspace-trust)也决定了其中的 hook 何时开始在他们的机器上运行。

321* `foo.rs` 第 134 行的 `async move { ... }` 做什么?366* [托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)属于组织。它们来自管理控制台、MDM 或 `managed-settings.json` 文件,任何个人设置文件都无法覆盖它们,这使它们成为安全团队策略的唯一归宿。如果您是负责设置它们的人,请参阅[为您的组织设置 Claude Code](https://code.claude.com/docs/zh-CN/admin-setup.md)。

322* `CustomerOnboardingFlowImpl` 处理哪些边界情况?

323* 为什么这段代码在第 333 行调用 `foo()` 而不是 `bar()`?

324 367 

325以这种方式使用 Claude Code 是一个有效的入职工作流,改进了加入时间并减少了对其他工程师的负担。无需特殊提示:直接提问。368无论作用域如何,都要让强制执行的规则集保持精简。每个 hook 和拒绝规则偶尔都会在不该触发时触发,而且每一个都需要有人维护。如果您发现自己已经有四十条,其中大多数可能只是 Claude 本可以自行权衡的偏好。

326 369 

327### 让 Claude 采访你370## 更改默认设置

328 371 

329> [!TIP]372> [!TIP]

330>373>

331> 对于更大的功能,让 Claude 先采访你。从最小的提示开始,要求 Claude 使用 `AskUserQuestion` 工具采访你。374> 默认设置已经足够好,可以保持不动,直到某个任务花费的时间、token 或中断超出应有的程度。发生这种情况时,在会话中运行 `/usage` 查看消耗在哪里。

332 375 

333Claude 会问你可能还没有考虑过的东西,包括技术实现、UI/UX、边界情况和权衡。将 `[brief description]` 替换为你的功能,然后再发送提示。376新会话已经为您做了几项决定:

334 377 

335```text wrap theme={null}378* 交互式终端和 VS Code 会话以自动模式启动。

336I want to build [brief description]. Interview me in detail using the AskUserQuestion tool.379* 在大多数套餐和提供商上,它运行 [medium effort 的 Claude Opus 5.5](https://code.claude.com/docs/zh-CN/model-config.md#default-model-setting)。

380* 当它认为有理由时,会将工作委派给子代理。

381* 随着对话增长,它会压缩对话。

337 382 

338Ask about technical implementation, UI/UX, edge cases, concerns, and tradeoffs. Don't ask obvious questions, dig into the hard parts I might not have considered.383大多数时候您根本不会想到这些。当某个任务确实花费过多时,原因通常是这四项之一。

339 384 

340Keep interviewing until we've covered everything, then write a complete spec to SPEC.md.385### 更改权限模式

341```

342 386 

343一旦规范完成,启动新会话来执行它。新会话有干净的 context,完全专注于实现,你有一个书面规范可以参考。387权限范围的两端都有代价:

344 388 

345最有用的规范是自包含的:它们命名涉及的文件和接口,说明什么在范围之外,并以端到端验证步骤结束,证明该功能有效。花在使规范精确上的时间比花在观看实现上的时间收益更大。389* **手动模式**:您需要亲自批准每次编辑和每个非只读命令。安全,但到第十次提示之后,您就开始不看内容直接批准了,而且当您离开键盘时,一切都会停滞。

390* **`bypassPermissions`**:批准所有未被您的拒绝规则和询问规则覆盖的操作,这只在一次性容器中才有意义。

346 391 

347***392[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)介于两者之间,也是交互式终端和 VS Code 会话[启动时使用的模式](https://code.claude.com/docs/zh-CN/permission-modes.md#which-mode-a-session-starts-in)。Claude 在工作时无需为常规批准而停下,一个单独的分类器模型会在操作运行前按[固定顺序](https://code.claude.com/docs/zh-CN/permission-modes.md#how-the-classifier-evaluates-actions)进行检查。它专注于[您希望有人出面阻止的事情](https://code.claude.com/docs/zh-CN/permission-modes.md#what-the-classifier-blocks-by-default):

348 393 

349## 管理你的会话394* `curl | bash`

395* 生产部署和迁移

396* 强制推送覆盖他人的工作

397* 将敏感数据发送到外部端点

398* 看起来是由 Claude 读取的内容而不是由您驱动的操作

350 399 

351对话是持久的且可逆的。充分利用这一点!400当它确实阻止了某项操作时,您会收到通知,该操作会出现在 `/permissions` 的 **Recently denied** 下,您可以在那里通过手动批准重试它。在[连续三次阻止](https://code.claude.com/docs/zh-CN/permission-modes.md#when-auto-mode-falls-back)(或总计二十次)之后,自动模式会暂停并恢复为向您询问。

352 401 

353### 尽早且频繁地纠正方向402这些都不会取代您的确定性控制,因为它在它们*之后*运行。拒绝规则、询问规则和 `PreToolUse` hook 会在分类器看到任何内容之前生效,因此拒绝规则在自动模式中的阻止效果与在其他任何地方完全相同。沙箱仍然会限制[它所包装的 shell 命令](https://code.claude.com/docs/zh-CN/sandboxing.md#what-runs-outside-the-sandbox)。

354 403 

355> [!TIP]404> [!NOTE]

356>405>

357> 一旦发现 Claude 偏离轨道,立即纠正它。406> 您也可以在对话中说 `don't push until I've reviewed`,分类器会[将其视为阻止信号](https://code.claude.com/docs/zh-CN/permission-modes.md#boundaries-you-state-in-conversation)。但这仍然是一个模型在阅读会话记录,而且这句话可能在对话压缩时丢失,所以任何重要的事项都应放在拒绝规则中。

407 

408相反的问题是,分类器反复阻止在您的环境中属于常规的操作。与其每次都手动批准,不如将其添加到 `autoMode.allow`,或在[自动模式配置](https://code.claude.com/docs/zh-CN/auto-mode-config.md)中描述您信任的基础设施。它使用的是普通英语而不是模式,[`/auto-mode-setup`](https://code.claude.com/docs/zh-CN/auto-mode-config#generate-environment-entries) 可以根据您的项目和近期会话为您起草 `environment` 部分:

409 

410```json ~/.claude/settings.json theme={null}

411{

412 "autoMode": {

413 "environment": [

414 "$defaults",

415 "Source control: github.com/example-org and every repo under it",

416 "Trusted internal domains: *.internal.example.com"

417 ],

418 "allow": [

419 "$defaults",

420 "Deploying to the staging namespace is fine, it's isolated from production and resets nightly"

421 ]

422 }

423}

424```

358 425 

359最好的结果来自紧密的反馈循环。虽然 Claude 有时能在第一次尝试时完美解决问题,但快速纠正通常能更快地产生更好的解决方案。426> [!WARNING]

427>

428> 在您设置的每个列表中都保留 `"$defaults"`,否则您的条目会*替换*该列表的内置规则,而不是添加到其中。对于 `environment` 和 `allow`,您会失去内置的上下文和例外;而缺少它的 `soft_deny` 列表会丢掉对强制推送和生产部署的内置阻止。

429>

430> `autoMode` 块还必须放在 `~/.claude/settings.json` 中,而不是项目中,因为分类器会忽略项目设置中的 `autoMode`。

360 431 

361* **`Esc`**:使用 `Esc` 键在 Claude 执行过程中停止它。上下文会被保留,所以你可以重新引导。432如果您更希望在每次编辑和命令发生之前都能看到它们,可以在会话中按 `Shift+Tab` 在各权限模式(包括手动模式)之间循环切换,或者从 shell 中使用 `claude --permission-mode manual` 启动。如果手动模式随后询问过于频繁,`/fewer-permission-prompts` 会扫描您近期的会话记录,找出常见的只读 Bash 和 MCP 调用,并将它们添加到 `.claude/settings.json` 中的允许列表。

362* **`Esc + Esc` 或 `/rewind`**:按两次 `Esc` 或运行 `/rewind` 来打开 rewind 菜单,恢复之前的对话和代码状态,或从选定的消息进行总结。

363* **`"Undo that"`**:让 Claude 撤销其更改。

364* **`/clear`**:在不相关的任务之间重置上下文。包含无关上下文的长会话可能会降低性能。

365 433 

366如果你在一个会话中对同一问题纠正了 Claude 两次以上,上下文就会被失败的方法所污染。运行 `/clear` 并使用更具体的提示重新开始,该提示应该包含你学到的内容。一个干净的会话配合更好的提示几乎总是比一个积累了许多纠正的长会话表现更好。434### 更改模型和 effort

367 435 

368### 积极管理上下文436[Effort](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level) 是控制 Claude 思考时长的主要手段,它取代了人们过去通过提示词措辞所做的大部分工作。Claude Opus 5.5、Sonnet 5.5 和 Haiku 5.5 默认为 `medium`,这对于范围明确的日常功能开发已经足够。您会在会话中使用 `/effort` 调整它的情况:

369 437 

370> [!TIP]438* 当做对事情取决于容易被忽略的情况时,使用 `/effort high` 或 `/effort xhigh` 调高。比如您没写过的代码中的错误、不稳定的测试,或者 Claude 必须找到旧 schema 的每一个读取方的 schema 变更。Claude 随后会在回答前检查更多边界情况并验证更多工作,额外的时间和 token 就花在这里。

371>439* 当您快速来回交流并且无论如何都会审查每个结果时,使用 `/effort low` 调低:头脑风暴、初步草图、跨几个文件的重命名。Claude 会更快地给您一个起点,而且由于您在引导每一步,额外的深思熟虑除了让您多等之外不会改变太多。

372> 在不相关的任务之间运行 `/clear` 来重置上下文。440* 将 `max` 留给您希望 Claude 在没有您参与的情况下攻克的难题,比如寻找安全漏洞。在普通任务上它往往会过度思考,所以您付出更多,得到的答案却可能并不比 `high` 更好。

441* 当只有下一条消息需要它时,比如在一系列常规工作中间出现一个棘手的问题,请在那条提示词中加入 [`ultrathink`](https://code.claude.com/docs/zh-CN/model-config#use-ultrathink-for-one-off-deep-reasoning),而不是更改设置。

373 442 

374当你接近上下文限制时,Claude Code 会自动压缩对话历史,这样可以保留重要的代码和决策,同时释放空间。443至于模型本身,默认的 Opus 5.5 能很好地处理大多数编码工作,而 Sonnet 在常规工作上成本更低。当您通过 `/model fable` 明确选择时,可以使用 [Claude Fable 5.1](https://code.claude.com/docs/zh-CN/model-config.md#work-with-fable),而 Haiku 很适合执行简单任务的子代理。[模型配置](https://code.claude.com/docs/zh-CN/model-config.md)列出了各套餐和提供商的完整列表。

375 444 

376在长会话期间,Claude 的上下文窗口可能会被无关的对话、文件内容和命令填满。这可能会降低性能,有时还会分散 Claude 的注意力。445### 了解子代理的成本

377 446 

378* 在任务之间频繁使用 `/clear` 来完全重置上下文窗口447Claude 会自行委派给[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md):

379* 当自动压缩触发时,Claude 会总结最重要的内容,包括代码模式、文件状态和关键决策

380* 为了获得更多控制,运行 `/compact <instructions>`,例如 `/compact Focus on the API changes`

381* 要仅压缩对话的一部分,使用 `Esc + Esc` 或 `/rewind`,选择一个消息检查点,然后选择**从这里总结**或**总结到这里**。第一个选项会压缩从该点开始的消息,同时保留较早的上下文;第二个选项会压缩较早的消息,同时保留最近的消息完整。参见 [rewind 菜单的总结选项](https://code.claude.com/docs/zh-CN/checkpointing.md#rewind-and-summarize)。

382* 在 CLAUDE.md 中自定义压缩行为,使用诸如 `"When compacting, always preserve the full list of modified files and any test commands"` 这样的指令,以确保关键上下文在总结中得以保留

383* 对于不需要保留在上下文中的问题,使用 [`/btw`](https://code.claude.com/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw)。答案永远不会进入对话历史,所以你可以检查细节而不会增加上下文。

384 448 

385### 使用子代理进行调查449* 广泛的代码库搜索交给内置的 Explore Agent。

450* 在 fork 模式开启时(默认),附带任务会被[分叉](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation)。

451* 它启动的子代理默认在后台运行,因此您的主对话可以继续推进。

386 452 

387> [!TIP]453您很少需要主动要求这些,但了解您得到的是什么以及代价是什么会有所帮助。

388>

389> 使用 `"use subagents to investigate X"` 委派研究。它们在单独的上下文中探索,保持你的主对话干净以供实现。

390 454 

391由于上下文是你的基本约束,使用子代理来保持研究不进入上下文。当 Claude 研究代码库时,它会读取大量文件,所有这些都会消耗你的上下文。子代理在单独的上下文窗口中运行并报告回总结:455子代理在以下情况下物有所值:

392 456 

393```text wrap theme={null}457* 同时运行相互独立的工作,让整个任务更快完成

394Use subagents to investigate how our authentication system handles token458* 将长输出(比如完整的测试运行或大范围搜索)排除在主对话之外,否则它会在会话的剩余部分一直伴随着您

395refresh, and whether we have any existing OAuth utilities I should reuse.459* 获得一个没有看到代码编写过程的审查者

396```460* 给某个任务提供比主会话更少的工具,比如一个能读取但不能编辑的审查者

397 461 

398你也可以在 Claude 实现某些东西后使用子代理进行验证。参见 [添加对抗性审查步骤](#add-an-adversarial-review-step)。462它们的代价主要是 token,因为每个子代理都会发送自己的请求,并且与您的主对话计入相同的用量。有时还有时间成本:新的子代理必须先收集您的对话中已有的上下文,因此它可能比在当前会话中直接完成任务*更慢*。

399 463 

400### 使用检查点进行 Rewind464而且默认情况下,它是同一个模型(或更小的模型)处理同一个任务。您从中获得的是并行性或一双新的眼睛,而不是更聪明的答案。

401 465 

402> [!TIP]466要在子代理上花得更少:

403>

404> 你发送的每个开始一个轮次的提示都会创建一个检查点。你可以将对话、代码或两者都恢复到任何之前的检查点。

405 467 

406Claude 在每次更改前自动为文件创建快照,所以检查点可以将它们恢复。双击 `Escape` 或运行 `/rewind` 来打开 rewind 菜单。你可以仅恢复对话、仅恢复代码、同时恢复两者,或从选定的消息进行总结。参见 [Checkpointing](https://code.claude.com/docs/zh-CN/checkpointing.md) 了解详情。468* 如果子代理的工作很简单,比如收集导入某个模块的文件或检查文档中的链接,请在其定义中设置 [`model: haiku`](https://code.claude.com/docs/zh-CN/sub-agents#choose-a-model)。这类工作不需要更大的模型,而 Haiku 每次请求的成本要低得多。

469* 要求返回简短的总结,这样二十个结果就不会反而填满您的上下文。

470* 查看 `/usage`,了解每种子代理类型占您用量的多少,从而判断哪些物有所值。

471* 给 `.claude/agents/` 中的自定义子代理只配置 `tools: Read, Grep, Glob`。这样它就是一个无法编辑任何内容的审查者,而且这一限制由 Claude Code 强制执行,而不是在提示词中请求。

407 472 

408与其仔细规划每一步,你可以告诉 Claude 尝试一些冒险的事情。如果它不起作用,rewind 并尝试不同的方法。检查点与对话一起保存,所以你可以关闭终端,稍后恢复会话,并仍然可以 rewind。473这个审查者只是一个简短的文件,`.claude/agents/reviewer.md`:

409 474 

410> [!WARNING]475```markdown .claude/agents/reviewer.md theme={null}

411>476---

412> 检查点仅跟踪通过 Claude 的文件编辑工具所做的更改。通过 Bash 命令或外部进程所做的更改不会被捕获。这不是 git 的替代品。477name: reviewer

478description: Reviews changed files against the spec they were built from. Use after implementing a feature, before opening the PR.

479tools: Read, Grep, Glob

480---

481You're reviewing code you didn't write. Compare the changed files against the spec you're given,

482check that every requirement is implemented and the listed edge cases have tests,

483and report only the gaps that affect correctness. Skip style.

484```

413 485 

414### 恢复对话486让 Claude `have the reviewer compare the rate limiter against SPEC.md`,发现的缺口就会回到您的会话中,由 Claude 来修复。

415 487 

416> [!TIP]488### 控制成本和上下文

417>

418> 使用 `/rename` 命名会话,并将它们视为分支:每个工作流都有自己的持久上下文。

419 489 

420Claude Code 在本地保存对话,所以当任务跨越多个会话时,你不必重新解释上下文。运行 [`claude --continue`](https://code.claude.com/docs/zh-CN/sessions#resume-a-session) 来从你停止的地方继续,或 `claude --resume` 来从列表中选择。给会话起描述性的名称,如 `oauth-migration`,这样你以后可以找到它们。参见 [管理会话](https://code.claude.com/docs/zh-CN/sessions.md) 了解完整的恢复、分支和命名控制。490由于大多数当前模型拥有 1M token 的窗口,并且在接近上限时进行压缩,您很少会用完上下文。不过,您仍然可能为不需要的上下文*付费*。每个请求都会发送整个对话,因此一个累积了三个无关任务的会话,在处理第四个任务的每个轮次时都会重新读取前三个。在[缓存有效期间会有折扣](https://code.claude.com/docs/zh-CN/costs.md#why-usage-climbs-in-a-long-session),而缓存过期后则按全价计费。

421 491 

422***492[`/usage`](https://code.claude.com/docs/zh-CN/costs) 是首先要查看的地方。在 Pro、Max、Team 和 Enterprise 上,它会按 skill、子代理、插件和 MCP 服务器细分您的用量。当长上下文或频繁缓存未命中等模式之一超过您用量的 10% 时,它也会标记出来。常见的解决方法有:

423 493 

424## 自动化和扩展494* 在不相关的任务之间使用 `/clear`。它不花任何成本,并且意味着下一个任务不必继续为上一个任务的历史付费。`/clear oauth-migration` 会为您离开的会话命名,以便您之后回到它。

495* 带焦点地使用 `/compact`,比如 `/compact keep the API changes and the test commands`。在长会话中,`/compact` 本身就是一个大请求,因为它要读取整个对话来进行总结,缓存过期后更是如此。

496* 留意后台工作:`/loop`、目标在每个轮次之后的检查,以及 Claude 自己的子代理,都会在您没有输入时持续发送请求。

425 497 

426一旦你对一个 Claude 有效,通过并行会话、非交互模式和扇出模式来增加你的输出。498> [!NOTE]

499>

500> [提示缓存](https://code.claude.com/docs/zh-CN/prompt-caching.md)在订阅下持续约一小时,在 API 密钥、云提供商或使用额度下为五分钟。除非您更改,否则子代理为五分钟。

501>

502> 在一小时缓存下,超过约 200K token 的空闲会话会在缓存过期前不久被压缩,因此午饭回来后您会从一份总结继续。如果您完全不需要这些历史,开启新会话的成本仍然更低。

427 503 

428### 运行非交互模式504## 引导会话

429 505 

430> [!TIP]506> [!TIP]

431>507>

432> 在 CI、pre-commit hooks 或脚本中使用 `claude -p "prompt"`。添加 `--output-format stream-json --verbose` 用于流式 JSON 输出。508> 留意第一分钟,一旦 Claude 偏离方向就按 `Esc`,在两次更正失败后运行 `/clear` 并写一个更好的提示词,而不是进行第三次更正。

433 509 

434使用 `claude -p "your prompt"`,你可以非交互地运行 Claude,不需要交互式提示。该运行仍然会创建一个可恢复的会话,除非你传递 `--no-session-persistence`。[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)是你将 Claude 集成到 CI 管道、pre-commit hooks 或任何自动化工作流中的方式。输出格式让你以编程方式解析结果:纯文本、JSON 或流式 JSON。510再多的配置也无法取代留意第一分钟,并在 Claude 朝您不想要的方向前进时介入。用于此目的的控制手段只有几个,值得熟记于心:

435 511 

436```bash theme={null}512* `Esc` 会在 Claude 执行过程中停止它,并保留到那时为止的所有内容,因此您可以重新引导而不丢失工作。

437# One-off queries513* `/rewind`,或在空提示词上按两次 `Esc`,会打开 [rewind 菜单](https://code.claude.com/docs/zh-CN/checkpointing.md#rewind-and-summarize),您可以在其中将代码、对话或两者回滚到更早的提示词。这让先尝试更大胆的方法、行不通再回滚变得风险很低。当对话的某部分已经过时,同一个菜单还可以对其进行总结。

438claude -p "Explain what this project does"514* `/clear` 会重新开始。如果您已经两次更正同一件事而它仍然是错的,第三次更正多半只是往一个已经包含两次失败尝试的对话中添加内容,而 Claude 会不断重读这些内容。`/clear` 加上一个融合了您所学内容的新提示词,几乎每次效果都更好。

439 

440# Structured output for scripts

441claude -p "List all API endpoints" --output-format json

442 515 

443# Streaming for real-time processing516> [!WARNING]

444claude -p "Analyze this log file" --output-format stream-json --verbose517>

445```518> 检查点涵盖的是 Claude 在主对话中使用其自身文件工具编辑的文件,因此只被 Bash 命令改动过的文件[不会被恢复](https://code.claude.com/docs/zh-CN/checkpointing.md#bash-command-changes-not-tracked)。它们与 git 配合使用,而不是取代 git。

446 519 

447第一个命令打印纯文本。`json` 格式返回一个包含 `result` 字段的单个 JSON 对象。`stream-json` 格式每行打印一个 JSON 对象,从初始化事件开始。520还有两个较小的工具:[`/btw`](https://code.claude.com/docs/zh-CN/interactive-mode#side-questions-with-%2Fbtw) 可以回答一个快速问题,而不会向历史中添加任何内容。对于跨越数天的工作,在会话中使用 `/rename oauth-migration` 为其命名,之后就可以从 shell 中使用 [`claude --resume oauth-migration`](https://code.claude.com/docs/zh-CN/sessions#resume-by-session-id-or-name) 继续,包括检查点在内。`claude --continue` 会恢复最近的一个会话。

448 521 

449### 运行多个 Claude 会话522## 让 Claude 在无人值守时运行

450 523 

451> [!TIP]524> [!TIP]

452>525>

453> 并行运行多个 Claude 会话以加快开发、运行隔离的实验或启动复杂的工作流。526> 在让某次运行无人值守之前,确保它知道完成是什么样子、能检查自己的工作,并且只能触及它应该触及的内容。给它设置轮次或支出上限,并在最后由一个人批准结果。

454 

455选择适合你想要自己进行多少协调的并行方法,并在会话需要相互传递发现时添加消息:

456 527 

457* [Worktrees](https://code.claude.com/docs/zh-CN/worktrees.md):在隔离的 git 检出中运行单独的 CLI 会话,以便编辑不会冲突528一旦您不在场去发现错误,本页上的所有内容就显得更加重要。当您在盯着时,Claude 缺少某部分上下文并不是什么大问题:您会在一两条消息内注意到并告诉它。而在您睡前启动的运行中,没有人告诉它,您第二天早上才发现它整晚都在基于错误的假设进行构建。

458* [跨会话消息](https://code.claude.com/docs/zh-CN/cross-session-messaging.md):让你自己运行的会话相互传递发现

459* [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md#work-in-parallel-with-sessions):以视觉方式管理多个本地会话,每个会话都在自己的 worktree 中

460* [Claude Code 在网络上](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md):在云中运行会话,默认在 Anthropic 管理的基础设施上

461* [Agent view](https://code.claude.com/docs/zh-CN/agent-view.md):研究预览。运行 `claude agents` 来分派在后台持续运行的会话,并从一个屏幕观看它们

462* [Agent teams](https://code.claude.com/docs/zh-CN/agent-teams.md):实验性的,默认禁用。具有共享任务、消息和团队主管的多个会话的自动协调

463 529 

464除了并行化工作,多个会话启用了质量关注的工作流。新鲜的 context 改进了代码审查,因为 Claude 不会偏向于它刚刚编写的代码。530在让任务自行运行之前,值得针对该具体任务逐一检查以下五个问题:

465 531 

466例如,使用 Writer/Reviewer 模式:5321. 它知道完成是什么样子吗?一个目标条件、一个规范文件,或一个它必须让其通过的失败测试。

5332. 它能检查自己的工作吗?测试套件、`Stop` hook、某种审查步骤。

5343. 它被允许触及什么?权限规则、`dontAsk`、沙箱、worktree、它可以推送的那一个分支。

5354. 什么会让它停下来?`--max-turns`、`--max-budget-usd`、支出限额。

5365. 结果去哪里,谁来签核?一个 PR、一条评论或一份总结,然后由一个人批准合并、部署或任何其他无法撤回的操作。

467 537 

468| 会话 A(Writer) | 会话 B(Reviewer) |538一旦开始运行,Claude 会自行完成一个长任务。仍由您负责的部分是:启动它、决定这一次"完成"意味着什么,以及在最后批准合并。

469| - | - |

470| `为我们的 API 端点实现速率限制器` | |

471| | `审查 @src/middleware/rateLimiter.ts 中的速率限制器实现。查找边界情况、竞态条件和与我们现有中间件模式的一致性。` |

472| `这是审查反馈:[会话 B 输出]。解决这些问题。` | |

473 539 

474你可以用测试做类似的事情:让一个 Claude 编写测试,然后另一个编写代码来通过它们。540### 从脚本运行 Claude

475 541 

476### 跨文件扇出542[`claude -p "prompt"`](https://code.claude.com/docs/zh-CN/headless) 运行一次后退出,Claude Code 就是这样进入 CI 作业、git 钩子和 shell 循环的。

477 

478> [!TIP]

479>

480> 循环遍历任务,为每个任务调用 `claude -p`。使用 `--allowedTools` 为批量操作预先批准工具。

481 543 

482对于大型迁移或分析,你可以跨许多并行 Claude 调用分配工作。运行 [`/batch <instruction>`](https://code.claude.com/docs/zh-CN/commands#all-commands) 让 Claude 将更改分割到 5 到 30 个子代理中。每个子代理在自己的 worktree 中工作。要从你自己的脚本驱动扇出,请循环遍历 `claude -p`:544在脚本中,您几乎总是需要再加几个标志:

483 545 

484**1. 生成任务列表**546* [`--bare`](https://code.claude.com/docs/zh-CN/headless#start-faster-with-bare-mode) 会跳过 hook、skill、插件、MCP 服务器和 `CLAUDE.md` 文件(包括仓库的和机器的),因此无论在哪里运行,结果都一样。它也从不触及您的 claude.ai 登录:身份验证来自 `ANTHROPIC_API_KEY`、您通过 `--settings` 传入的文件中的 `apiKeyHelper`,或您的云提供商的凭据。

547* `--append-system-prompt`、`--mcp-config` 和 `--settings` 会显式传入运行*确实*需要的内容。

548* `--allowedTools` 会预先批准其工具,而 [`--permission-mode dontAsk`](https://code.claude.com/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 会拒绝其他任何原本会触发提示的操作。

549* `--output-format json` 会为您提供一个可供解析的单一结果对象,而搭配 `--verbose` 的 `stream-json` 会在事件发生时流式输出。

485 550 

486让 Claude 将需要迁移的文件列表写入文件,以便下一步中的循环可以读取它,使用类似 `list all 2,000 Python files that need migrating and save the list to files.txt` 的提示551组合起来如下所示:

487 

488**2. 编写脚本来循环遍历列表**

489 552 

490```bash theme={null}553```bash theme={null}

491for file in $(cat files.txt); do554for file in $(cat files.txt); do

492 claude -p "Migrate $file from Python 2 to Python 3. Return OK or FAIL." \555 claude --bare -p "Migrate $file to the new logger API and commit. Reply OK or FAIL." \

493 --allowedTools "Edit,Bash(git commit *)" \556 --allowedTools "Read,Edit,Bash(git add *),Bash(git commit *)" \

494 --permission-mode dontAsk557 --permission-mode dontAsk \

558 --max-turns 20

495done559done

496```560```

497 561 

498**3. 先在几个文件上测试,然后在全部文件上运行**562运行结束时,Claude 会回复 `OK` 或 `FAIL`,而达到轮次上限的运行则会以错误退出。先在三个文件上试一试,看看哪里出了问题,修正提示词,然后再运行其余部分。

499 

500根据前 2-3 个文件出现的问题改进提示词,然后在完整集合上运行。`--allowedTools` 标志预先批准迁移所需的工具。[`--permission-mode dontAsk`](https://code.claude.com/docs/zh-CN/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) 会拒绝其他任何需要批准的操作,这在无人值守运行时非常重要,不过您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍可能批准其中部分调用。

501 563 

502你也可以将 Claude 集成到现有的数据/处理管道中:564如果传入 `--permission-mode auto`,自动模式也可以与 `-p` 一起使用。在非交互式运行中,分类器的阻止只会拒绝那一个操作,Claude 会继续工作,而且重复的阻止不会像在终端中那样暂停运行。在依赖它之前,请阅读[阈值在那里如何应用](https://code.claude.com/docs/zh-CN/permission-modes.md#repeated-block-thresholds)。

503 565 

504```bash theme={null}566### 按计划或事件启动运行

505claude -p "<your prompt>" --output-format json | your_command

506```

507 567 

508### 使用 auto mode 自主运行568一旦运行开始,Claude 就能自行处理剩下的事情。它唯一做不到的是决定*开始*,所以必须有某样东西来启动它:您、一个计时器,或者一个事件,比如 CI 检查失败或新的 PR。

509 569 

510为了不间断的执行和后台安全检查,使用 [auto mode](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)。分类器模型在命令运行前审查它们,阻止范围升级、未知基础设施和由敌对内容驱动的操作,同时让常规工作无提示进行。570在已打开的会话中,可以使用 [`/loop`](https://code.claude.com/docs/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop),它会按间隔重复一个提示词:

511 571 

512```bash theme={null}572```text theme={null}

513claude --permission-mode auto -p "fix all lint errors"573/loop 15m check CI on this branch, and if it's red pull the failing job's log, fix it and push

514```574```

515 575 

516当分类器在使用 `-p` 标志的非交互运行中重复阻止操作时,Claude Code 不会停止运行。请参阅 [auto mode 何时回退](https://code.claude.com/docs/zh-CN/permission-modes.md#when-auto-mode-falls-back) 了解发生的情况以及阈值。576每次运行都是同一会话中的另一个轮次,所以不要在长对话中让它一直运行。对于任何应在您的笔记本电脑合上时进行的事情,[`/schedule`](https://code.claude.com/docs/zh-CN/routines#create-from-the-cli) 会设置一个按计时器运行的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)。它需要 claude.ai 登录,而不是 API 密钥。您可以通过询问 Claude 添加 GitHub 事件触发器,或在 [claude.ai/code/routines](https://claude.ai/code/routines) 添加 API 触发器。

517 

518### 添加对抗性审查步骤

519 577 

520> [!TIP]578> [!WARNING]

521>579>

522> 在将任务视为完成之前,让一个子代理在新鲜的 context 中审查差异并报告缺陷。580> 在让云端定时任务持续运行之前,请使用[该任务无法绕过的 GitHub 分支规则](https://code.claude.com/docs/zh-CN/routines.md#repositories-and-branch-permissions)保护 `main`。对于任何新的任务,在信任它无人值守运行之前,请先观察最初的几次运行。

523 

524Claude 无人值守工作的时间越长,在你将工作视为完成之前进行独立检查就越重要。在新鲜的 [subagent](https://code.claude.com/docs/zh-CN/sub-agents.md) context 中运行的审查者只看到差异和你给它的标准,而不是产生更改的推理,所以它按自己的条件评估结果。

525 581 

526对于正确性检查,运行捆绑的 [`/code-review` skill](https://code.claude.com/docs/zh-CN/commands),它在新鲜的子代理中审查当前差异以查找错误,并将发现返回到会话。要检查差异是否符合你的计划,请自己编写审查提示。命名要检查的工作、要检查的计划以及什么算作发现:582### 并行运行会话

527 583 

528```text wrap theme={null}584当您同时进行多项独立的工作时,给每项工作分配独立的检出,以免编辑相互冲突。[`claude -w feature-auth`](https://code.claude.com/docs/zh-CN/worktrees#start-claude-in-a-worktree) 会在新的 worktree 中启动会话,[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md#work-in-parallel-with-sessions)可以并排运行多个这样的会话,而[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)会在云端而不是您的机器上运行它们。

529Use a subagent to review the rate limiter diff against PLAN.md. Check that

530every requirement is implemented, the listed edge cases have tests, and

531nothing outside the task's scope changed. Report gaps, not style preferences.

532```

533 585 

534因为审查者作为子代理运行,实现会话直接接收缺陷,可以修复它们并重新审查,而无需你在窗口之间复制发现。586worktree 是一个全新的检出,这意味着像 `.env` 这样被 gitignore 的文件不在其中,依赖也没有安装。对于前者,请在仓库根目录的 [`.worktreeinclude`](https://code.claude.com/docs/zh-CN/worktrees#copy-gitignored-files-into-worktrees) 中列出您需要的被 gitignore 的文件(语法与 `.gitignore` 相同),Claude Code 会将它们复制到它创建的每个 worktree 中:

535 587 

536被提示查找缺陷的审查者通常会报告一些,即使工作是健全的,因为那是它被要求做的。追逐每个发现会导致过度工程:额外的抽象层、防御性代码和针对无法发生的情况的测试。告诉审查者只标记影响正确性或陈述要求的缺陷,将其余的视为可选。588```text .worktreeinclude theme={null}

589.env

590.env.local

591config/dev-credentials.json

592```

537 593 

538***594只放小文件:它是复制而不是链接,所以如果把 `node_modules` 放进去,就意味着每个 worktree 都要完整复制一份。对于大型目录,可以使用 [`worktree.symlinkDirectories`](https://code.claude.com/docs/zh-CN/settings-reference#worktree-symlinkdirectories) 设置,或者将安装命令写在 `CLAUDE.md` 中,让 Claude 每次在新检出中启动时运行它。

539 595 

540## 避免常见失败模式596您很少需要自己清理这些:

541 597 

542这些是常见的错误。尽早识别它们可以节省时间:598* 当您退出一个未命名的 worktree 会话时,如果其中没有任何内容,Claude Code 会[删除该 worktree](https://code.claude.com/docs/zh-CN/worktrees.md#clean-up-worktrees)。对于已命名的会话或有更改的会话,它会询问如何处理。

599* 子代理的 worktree 会在子代理无更改地完成时消失。

600* 确实被遗留下来的子代理和后台会话 worktree,一旦超过 `cleanupPeriodDays` 且不包含任何工作,就会被清理掉。

543 601 

544* **厨房水槽会话。** 你从一个任务开始,然后问 Claude 一些不相关的东西,然后回到第一个任务。Context 充满了无关的信息。602> [!NOTE]

545 > **修复**:在不相关的任务之间 `/clear`。603>

546* **一次又一次地改正。** Claude 做错了什么,你改正它,它仍然是错的,你再改正。Context 被失败的方法污染。604> `claude -p --worktree` 运行需要您自己清理,因为它退出时不会询问。使用 `git worktree remove <path>` 删除它们;如果 git 因 worktree 被锁定而拒绝,请先执行 `git worktree unlock <path>`。

547 > **修复**:在两次失败的改正后,`/clear` 并编写一个更好的初始提示,包含你学到的东西。

548* **过度指定的 CLAUDE.md。** 如果你的 CLAUDE.md 太长,Claude 会忽略一半,因为重要的规则在噪音中丢失。

549 > **修复**:无情地修剪。如果 Claude 已经在没有指令的情况下正确地做某事,删除它或将其转换为 hook。

550* **信任然后验证的差距。** Claude 产生一个看起来合理的实现,但不处理边界情况。

551 > **修复**:始终提供验证(测试、脚本、屏幕截图)。如果你不能验证它,不要发布它。

552* **无限探索。** 你要求 Claude "调查"某些东西而不限定范围。Claude 读取数百个文件,填充 context。

553 > **修复**:狭隘地限定调查或使用 subagents,以便探索不会消耗你的主 context。

554 605 

555***606对于跨许多文件的一次大型机械性更改,[`/batch migrate every handler to the v2 response helpers`](https://code.claude.com/docs/zh-CN/commands) 会将工作拆分为 5 到 30 个单元并向您展示计划。然后它会在各自的 worktree 中运行每个单元,并为其创建 PR。从 shell 中,[`claude agents`](https://code.claude.com/docs/zh-CN/agent-view)(目前仍为研究预览版)可以在一个屏幕上显示您机器后台运行的所有内容。

556 607 

557## 培养你的直觉608第二个会话也是您能获得的最简单的独立审查者。一个会话编写速率限制器,另一个会话在没有看到编写过程的情况下审查 `@src/middleware/rateLimiter.ts`,然后您将发现粘贴回第一个会话。这与 `/code-review` 的思路相同,只是由您来传递消息。

558 609 

559本指南中的模式不是一成不变的。它们是通常效果很好的起点,但可能不是每种情况的最优选择。610## 您可以不再做的事

560 611 

561有时你\_应该\_让 context 累积,因为你深入一个复杂的问题,历史很有价值。有时你应该跳过规划,让 Claude 弄清楚,因为任务是探索性的。有时模糊的提示正是你想要的,因为你想看看 Claude 如何解释问题,然后再限制它。612以下每一条在写下时都是好建议。其中大多数是对模型当时还不能可靠完成的事情的变通办法,而模型现在已经赶上来了。如果其中一些仍是您的习惯,以下是可以放心放弃它们的原因。

562 613 

563注意什么有效。当 Claude 产生很好的输出时,注意你做了什么:提示结构、你提供的 context、你所在的模式。当 Claude 遇到困难时,问为什么。Context 太嘈杂了吗?提示太模糊了吗?任务对于一次通过来说太大了吗?614| 旧建议 | 为何不再需要 |

615| :- | :- |

616| 上下文窗口是您的主要约束,要积极地管理它 | 大多数当前模型拥有 1M token 的窗口,而且压缩会自动进行,因此很少会用完。在任务之间使用 `/clear` 仍然值得,因为专注的上下文能带来更好的答案,并且成本更低。 |

617| 对 Claude 一直遗漏的指令添加 IMPORTANT 或全大写 | 较旧的模型有时需要这种强调。当前模型能遵循措辞平实的一行,而堆砌强调多半会让 Claude 过度应用该规则。如果这是一条不能变通的规则,请将其改为 hook 或拒绝规则。如果这一行在长文件中被淹没,那就需要缩短文件。 |

618| 使用子代理来保护您的上下文窗口 | 用完上下文已经很少成为问题。子代理在并行工作、让嘈杂的输出不碍事以及独立审查方面仍然很好用,但每一种用法都要花费额外的 token。 |

619| 委派给子代理以获得更好的答案 | 把同一个任务交给子代理并不会让答案变得更好。新的审查者确实有帮助,因为它没有看到您的推理过程,但这与委派是两回事。 |

620| 在提示词中写 `think hard`、`think harder`、`be thorough` | Effort 才是控制这一点的手段。这些短语只是普通的提示词文本,会在 effort 设置范围内轻微推动 Claude,而不是提升 effort 的关键词。`ultrathink` 仍然有效:它会在单个轮次中请求更深入的推理,而不改变您的 effort 设置。 |

621| 告诉 Claude 继续下去、循环直到完成、不要偷懒 | 当前模型通常会在无需提醒的情况下完成已商定的任务,而这类话更可能导致过度工作,而不是解决停滞。给 Claude 一个必须通过的检查则不同,仍然值得去做。如果某次运行确实提前停止,说 `continue` 即可;对于无人盯着的运行,`/goal` 或 `Stop` hook 会强制执行这一点。 |

622| 在 `CLAUDE.md` 中描述您的架构和文件布局 | Claude 会自己阅读仓库。只写下其中没有的内容。 |

564 623 

565随着时间的推移,你会培养没有指南能捕捉的直觉。你会知道何时具体,何时开放,何时规划,何时探索,何时清除 context,何时让它累积。624如果本页上的其他建议开始让您觉得是在做无用功,那很可能说明它也应该列入这张表。

566 625 

567## 相关资源626## 相关资源

568 627 

569* [Claude Code 如何工作](https://code.claude.com/docs/zh-CN/how-claude-code-works.md):代理循环、工具和 context 管理628* [Claude Code 如何工作](https://code.claude.com/docs/zh-CN/how-claude-code-works.md):循环、工具以及启动时加载的内容

570* [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md):skills、hooks、MCP、subagents 和 plugins629* [探索上下文窗口](https://code.claude.com/docs/zh-CN/context-window.md):会话中哪些内容占用空间以及何时加载

571* [常见工作流](https://code.claude.com/docs/zh-CN/common-workflows.md):调试、测试、PR 等的分步配方630* [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md):在 skill、hook、MCP、子代理和插件之间进行选择

572* [CLAUDE.md](https://code.claude.com/docs/zh-CN/memory.md):存储项目约定和持久 context631* [选择权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)和[配置权限](https://code.claude.com/docs/zh-CN/permissions.md)

632* [有效管理成本](https://code.claude.com/docs/zh-CN/costs.md)

633* [以编程方式运行 Claude Code](https://code.claude.com/docs/zh-CN/headless.md)和[使用云端定时任务自动化工作](https://code.claude.com/docs/zh-CN/routines.md)

634* 面向团队负责人和管理员:[为您的组织设置 Claude Code](https://code.claude.com/docs/zh-CN/admin-setup.md)

chrome.md +1 −1

Details

43 43 

44在已启用 HIPAA 的 Enterprise 组织中,Claude in Chrome 默认处于关闭状态,[Owner](https://code.claude.com/docs/zh-CN/server-managed-settings.md#access-control) 可以在 [**Organization settings > Claude in Chrome**](https://claude.ai/admin-settings/browser-extension) 中将其启用。您与 Anthropic 签订的商业伙伴协议(BAA)不涵盖通过 Claude in Chrome 发送到第三方网站的数据。有关合格服务(Eligible Services)的列表,请参阅[实施指南](https://trust.anthropic.com/resources?s=l1wrssd9hsbi4gak0tp5a6\&name=%5Banthropic%5D-hipaa-ready-offering-implementation-guide)。44在已启用 HIPAA 的 Enterprise 组织中,Claude in Chrome 默认处于关闭状态,[Owner](https://code.claude.com/docs/zh-CN/server-managed-settings.md#access-control) 可以在 [**Organization settings > Claude in Chrome**](https://claude.ai/admin-settings/browser-extension) 中将其启用。您与 Anthropic 签订的商业伙伴协议(BAA)不涵盖通过 Claude in Chrome 发送到第三方网站的数据。有关合格服务(Eligible Services)的列表,请参阅[实施指南](https://trust.anthropic.com/resources?s=l1wrssd9hsbi4gak0tp5a6\&name=%5Banthropic%5D-hipaa-ready-offering-implementation-guide)。

45 45 

46Chrome 集成还需要使用 `/login` 登录。如果您使用 API 密钥或来自 [`claude setup-token`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 的长期令牌进行身份验证,Claude Code 会关闭 Chrome 集成,即使您传递 `--chrome`,因为浏览器扩展程序无法使用这些凭据进行身份验证。在 v2.1.216 之前,这些会话可以启用 Chrome 集成,但每次尝试连接到浏览器扩展程序都会失败,并显示 403 错误。46Chrome 集成还需要使用 `/login` 登录。如果您使用 API 密钥或来自 [`claude setup-token`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 的长期令牌进行身份验证,即使您传递 `--chrome`,Claude Code 也会保持 Chrome 集成处于关闭状态。浏览器扩展程序无法使用这些凭据进行身份验证。

47 47 

48> [!NOTE]48> [!NOTE]

49>49>

Details

996 996 

997[批准记忆](https://code.claude.com/docs/zh-CN/server-managed-settings.md#approval-memory)介绍了批准的有效期以及对话框何时会再次出现。997[批准记忆](https://code.claude.com/docs/zh-CN/server-managed-settings.md#approval-memory)介绍了批准的有效期以及对话框何时会再次出现。

998 998 

999Claude Code 会应用某些交付的 `env` 变量而不向开发者显示批准对话框,例如模型选择设置和数值限制。其他交付的变量可能需要开发者批准后才能生效;非空的代理、基础 URL 或 `OTEL_EXPORTER_OTLP_ENDPOINT` 值始终需要批准。当交付的变量需要批准时,对话框会指明它。999Claude Code 应用某些交付的 `env` 变量时不会向开发者显示批准对话框,例如模型选择设置和数值限制。其他交付的变量可能需要开发者批准;非空的代理、base-URL 或 `OTEL_EXPORTER_OTLP_ENDPOINT` 值始终需要。当交付的变量需要批准时,对话框会列出它的名称。[环境变量与批准对话框](https://code.claude.com/docs/zh-CN/server-managed-settings.md#environment-variables-and-the-approval-dialog)提供了详细信息,包括四个隐私开关,其交付值决定它们是否需要批准。

1000 

1001[环境变量和批准对话框](https://code.claude.com/docs/zh-CN/server-managed-settings.md#environment-variables-and-the-approval-dialog)提供了详细信息,包括四个隐私开关,其交付值决定了它们是否需要批准。在 v2.1.218 之前,Claude Code 不询问开发者就应用的变量较少,因此更多交付的变量会触发对话框。

1002 1000 

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

1004 1002 

Details

264* **完整演练(包括 PR 创建)**:请参阅[审查和迭代](https://code.claude.com/docs/zh-CN/web-quickstart.md#review-and-iterate)264* **完整演练(包括 PR 创建)**:请参阅[审查和迭代](https://code.claude.com/docs/zh-CN/web-quickstart.md#review-and-iterate)

265* **让 Claude 自动监控 PR 的 CI 失败和审查评论**:请参阅[自动修复 Pull Request](#auto-fix-pull-requests)265* **让 Claude 自动监控 PR 的 CI 失败和审查评论**:请参阅[自动修复 Pull Request](#auto-fix-pull-requests)

266 266 

267#### 排查 diff 视图中缺失的文件

268 

269当 diff 视图与基础分支进行比较时,无论会话是否已推送更改,您预期的某个文件都可能未出现在 diff 视图的文件列表中:

270 

271* **尚未推送更改**:列表包含 Claude 自己所做的编辑,但不包含 Claude 运行的命令(例如格式化工具)所做的更改

272* **已推送更改**:列表包含已推送的提交,但不包含上次推送之后所做的更改

273 

274要将缺失的更改添加到列表中,请让 Claude 提交并推送。

275 

267### 管理上下文276### 管理上下文

268 277 

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

270 279 

271* **`/model`、`/effort`、`/color` 和 `/rename`**:将值作为参数传递,例如 `/model sonnet`,而不是打开终端选择器或滑块。参数形式遵循每个命令的[可用性说明](https://code.claude.com/docs/zh-CN/commands.md#all-commands)。280* **`/model`、`/effort`、`/color` 和 `/rename`**:将值作为参数传递,例如 `/model sonnet`,而不是打开终端选择器或滑块。参数形式遵循每个命令的[可用性说明](https://code.claude.com/docs/zh-CN/commands.md#all-commands)。

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

273* **`/config`**:在浏览器中访问 claude.ai/code 时,此命令会打开您设置中的 Claude Code 部分,而不是设置某个值。要更改云端会话的设置,请在环境中设置[环境变量](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-environment-variables)。在[项目](https://code.claude.com/docs/zh-CN/claude-projects.md)的线程之外且仅包含一个仓库的会话中,请改为将该键提交到该仓库的 `.claude/settings.json` 中。[云端会话中的设置](https://code.claude.com/docs/zh-CN/settings.md#settings-in-cloud-sessions)列出了每个会话读取的内容。282* **`/config`**:在浏览器中访问 claude.ai/code 时,此命令会打开 **Settings > Code** 或 **Settings > Claude Code**,而不是设置某个值。要更改云端会话的设置,请在环境中设置[环境变量](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-environment-variables)。在[项目](https://code.claude.com/docs/zh-CN/claude-projects.md)的线程之外且仅包含一个仓库的会话中,请改为将该键提交到该仓库的 `.claude/settings.json` 中。[云端会话中的设置](https://code.claude.com/docs/zh-CN/settings.md#settings-in-cloud-sessions)列出了每个会话读取的内容。

274 283 

275对于[项目线程](https://code.claude.com/docs/zh-CN/claude-projects.md#choose-models-and-let-claude-manage-context)之外的云端会话中的上下文管理:284对于[项目线程](https://code.claude.com/docs/zh-CN/claude-projects.md#choose-models-and-let-claude-manage-context)之外的云端会话中的上下文管理:

276 285 


337* **仓库访问权限**:默认不启用验证346* **仓库访问权限**:默认不启用验证

338* **敏感内容**:共享前请检查您的会话。会话可能包含来自私有 GitHub 仓库的代码和凭据347* **敏感内容**:共享前请检查您的会话。会话可能包含来自私有 GitHub 仓库的代码和凭据

339 348 

340要要求收件人拥有存储库访问权限,或从共享会话中隐藏你的名称,请转到 [**Settings > Claude Code > Sharing settings**](https://claude.ai/settings/claude-code)。349要要求收件人拥有仓库访问权限,或从共享会话中隐藏您的名称,请在 claude.ai 上打开 Settings,然后:

350 

351* **如果 Settings 菜单显示的是 Code 而不是 Claude Code**:前往 [**Privacy**](https://claude.ai/settings/data-privacy-controls),其中包含这些设置

352* **否则**:前往 [**Claude Code > Sharing settings**](https://claude.ai/settings/claude-code)

341 353 

342### 归档会话354### 归档会话

343 355 

Details

55}55}

56```56```

57 57 

58Claude Code 在启动时如果无法验证您现有的 AWS 凭证,也会运行此命令,并在 `Authentication` 面板中显示命令的输出,直到登录完成。58Claude Code 在启动时如果无法验证您现有的 AWS 凭据,也会运行此命令,并在 `Authentication` 面板中显示命令的输出,直到登录完成。

59 59 

60配置了 `awsAuthRefresh` 后,运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials**。Claude Code 运行配置的命令并重新读取您的 AWS 凭证,无需重启。60配置了 `awsAuthRefresh` 后,运行 `/login`,选择 **3rd-party platform**,然后在 **Using 3rd-party platforms** 下选择 **Claude Platform on AWS · refresh credentials**。Claude Code 运行配置的命令并重新读取您的 AWS 凭证,无需重启。

61 61 


95 95 

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

97 97 

98默认别名 `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。98默认别名 `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。

99 99 

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

101 101 

claude-projects.md +18 −12

Details

70您在 [claude.ai/code](https://claude.ai/code)、桌面应用的 Code 标签页或 Claude 移动应用中创建和使用项目,支持 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 和 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)。在浏览器和桌面应用中,有两种方式启动项目:70您在 [claude.ai/code](https://claude.ai/code)、桌面应用的 Code 标签页或 Claude 移动应用中创建和使用项目,支持 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 和 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)。在浏览器和桌面应用中,有两种方式启动项目:

71 71 

72* **从头开始**,当您知道希望 Claude 运行的工作流时:打开 **New project** 对话框并命名它。[从头开始启动新项目](#start-a-new-project-from-scratch)会逐步讲解对话框。72* **从头开始**,当您知道希望 Claude 运行的工作流时:打开 **New project** 对话框并命名它。[从头开始启动新项目](#start-a-new-project-from-scratch)会逐步讲解对话框。

73* **从已经在进行工作的云端会话**:在该会话的侧边栏菜单中选择 **Move to project**,然后选择 **Continue as new project**。Claude 会根据会话正在做的事情提议项目的设置。请参阅[从现有云端会话启动](#start-from-an-existing-cloud-session)。73* **从已经在进行工作的云端会话**:在该会话的侧边栏菜单中选择 **Continue in project**,然后选择 **Continue as new project**。Claude 会根据会话正在做的事情提议项目的设置。请参阅[从现有云端会话启动](#start-from-an-existing-cloud-session)。

74 74 

75无论哪种方式,首先[检查先决条件](#check-the-prerequisites)。75无论哪种方式,首先[检查先决条件](#check-the-prerequisites)。

76 76 


113 113 

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

115 115 

116如果您自己启动的某个云端会话正在进行属于项目的工作,请打开其侧边栏菜单并选择 **Move to project**,然后从子菜单中选择:116如果您自己启动的某个云端会话正在进行属于项目的工作,请打开其侧边栏菜单并选择 **Continue in project**,然后从子菜单中选择:

117 117 

118* 选择 **Continue as new project** 以从该会话创建新项目。项目会打开,Claude 读取会话并在项目对话中发布 **Setup recommendations** 供您确认。原始会话保留在您的会话列表中。如果它正处于某个轮次中间,它会继续运行,因此如果您不想两者同时工作,请自己停止它。118* 选择 **Continue as new project** 以从该会话创建新项目。项目会打开,Claude 读取会话并在项目对话中发布 **Setup recommendations** 供您确认。原始会话保留在您的会话列表中。如果它正处于某个轮次中间,它会继续运行,因此如果您不想两者同时工作,请自己停止它。

119* 选择您现有的某个项目,将会话的工作带入该项目。该项目会打开,并以您的名义发送一条消息,要求 Claude 读取会话并从中断的地方继续。原始会话保留在您的会话列表中,保持不变。119* 选择您现有的某个项目,将会话的工作带入该项目。该项目会打开,并以您的名义发送一条消息,要求 Claude 读取会话并从中断的地方继续。原始会话保留在您的会话列表中,保持不变。


262 262 

263在具有任务需要的文件夹的计算机上,通过以下两种方式之一通过远程控制使其可用。两者都需要该计算机上的 Claude Code v2.1.280 或更高版本。263在具有任务需要的文件夹的计算机上,通过以下两种方式之一通过远程控制使其可用。两者都需要该计算机上的 Claude Code v2.1.280 或更高版本。

264 264 

265* **在 Claude 桌面应用中**:打开**设置 > Claude Code**,打开**从你的手机和 claude.ai 使用此计算机**,并将文件夹添加到该开关下的列表中。当应用打开时,线程可以在此计算机上运行。265* **在 Claude 桌面应用中**:打开**设置 > Code** 或**设置 > Claude Code**,然后启用**从您的手机和 claude.ai 使用此计算机**。将文件夹添加到该开关下方的列表中。应用打开期间,线程可以在此计算机上运行。

266* **在终端中**:在文件夹中运行`claude remote-control`并让其保持运行。在 git 存储库中,添加`--spawn worktree`以为那里的每个线程提供其自己的 [worktree](https://code.claude.com/docs/zh-CN/worktrees.md),而不是文件夹本身。266* **在终端中**:在文件夹中运行 `claude remote-control` 并保持其运行。在 git 仓库中,添加 `--spawn worktree` 可为在那里运行的每个线程提供其自己的 [worktree](https://code.claude.com/docs/zh-CN/worktrees.md),而不是使用文件夹本身。

267 267 

268**2. 使用本地工作要求任务**268**2. 使用本地工作提出任务**

269 269 

270在项目对话中,从消息框旁边的\*\*+**菜单中选择**本地工作\*\*,它会标记你的消息为**本地**,并写下你想要完成的内容。在消息中说任务应该在你的计算机上运行也可以。270在项目对话中,从消息框旁边的 **+** 菜单中选择**本地工作**,这会为您的消息添加**本地**标记,然后写下您想要完成的内容。在消息中说明该任务应在您的计算机上运行也同样有效。

271 271 

272**3. 在卡片上允许它**272**3. 在卡片上允许**

273 273 

274Claude 会回答一张**允许 Claude 在你的设备上的文件夹中工作**卡片。如果你连接了多个,请选择文件夹。两个线程在一个文件夹中同时工作可能会覆盖彼此的更改,因此如果文件夹是 git 存储库,你可以在文件夹的选项中打开**Worktree** 以为此线程提供其自己的 worktree 而不是。然后点击**允许一次**。274Claude 会回复一张**允许 Claude 在您设备上的文件夹中工作**卡片。如果您连接了多个文件夹,请选择其中一个。两个线程同时在同一文件夹中工作可能会覆盖彼此的更改,因此如果该文件夹是 git 仓库,您可以在文件夹的选项中启用 **Worktree**,为此线程提供其自己的 worktree。然后点击**允许一次**。

275 275 

276线程在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中运行,因此 Claude 在该文件夹中运行命令和编辑文件而不每次都询问你。如果自动模式在该计算机的 Claude Code 中不可用或已关闭,线程在没有它的情况下运行,它引发的任何权限提示都会在线程中等待你的答案,如[解除等待批准的线程](#unblock-a-thread-waiting-on-approval)所述。276线程在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中运行,因此 Claude 在该文件夹中运行命令和编辑文件而不每次都询问你。如果自动模式在该计算机的 Claude Code 中不可用或已关闭,线程在没有它的情况下运行,它引发的任何权限提示都会在线程中等待你的答案,如[解除等待批准的线程](#unblock-a-thread-waiting-on-approval)所述。

277 277 

278当线程运行时,其标题中的笔记本电脑图标显示你的计算机是否已连接。点击它可以查看线程使用的文件夹或关闭连接。当该计算机处于睡眠状态时线程暂停,如果桌面应用或`claude remote-control`退出则停止。[失去与你的文件夹的联系](#lost-contact-with-your-folder)涵盖了让它再次运行。在桌面应用中,在**设置 > Claude Code**下打开**为远程控制保持此计算机唤醒**以阻止计算机自动睡眠。278线程运行时,其标题中的笔记本电脑图标会显示您的计算机是否已连接。点击该图标可查看线程正在使用哪个文件夹,或关闭连接。当该计算机处于睡眠状态时,线程会暂停;如果桌面应用或 `claude remote-control` 退出,线程会停止。

279 

280* **要让线程重新运行**:请参阅[与您的文件夹失去联系](#lost-contact-with-your-folder)

281* **要防止计算机自动进入睡眠**:在桌面应用中,在**设置 > Code** 或**设置 > Claude Code** 中启用**为 Remote Control 保持此计算机唤醒**

279 282 

280当[**需要受信任的设备**](https://code.claude.com/docs/zh-CN/remote-control.md#trusted-devices)对你的账户打开时,项目无法在你的计算机上运行线程。283当[**需要受信任的设备**](https://code.claude.com/docs/zh-CN/remote-control.md#trusted-devices)对你的账户打开时,项目无法在你的计算机上运行线程。

281 284 


427几个 Claude Code 功能让多个会话同时工作,因此并行运行工作本身不是项目的目的。在项目中,Claude 启动和跟踪会话而不是您,每个都从相同的说明开始。这是每个相邻功能如何连接到项目的方式:430几个 Claude Code 功能让多个会话同时工作,因此并行运行工作本身不是项目的目的。在项目中,Claude 启动和跟踪会话而不是您,每个都从相同的说明开始。这是每个相邻功能如何连接到项目的方式:

428 431 

429* **Claude Tag**:[Claude Tag](https://claude.com/docs/claude-tag/overview) 是您团队 Slack 频道中的 Claude,在 Team 和 Enterprise 计划上。频道中的任何人都可以给它工作,频道中的每个人都看到并引导它,它使用管理员为该频道设置的连接。项目是您的:您是唯一给它工作或看到其线程的人,它使用您自己的 GitHub 访问和连接器,它在 Pro 和 Max 上。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。432* **Claude Tag**:[Claude Tag](https://claude.com/docs/claude-tag/overview) 是您团队 Slack 频道中的 Claude,在 Team 和 Enterprise 计划上。频道中的任何人都可以给它工作,频道中的每个人都看到并引导它,它使用管理员为该频道设置的连接。项目是您的:您是唯一给它工作或看到其线程的人,它使用您自己的 GitHub 访问和连接器,它在 Pro 和 Max 上。[Claude Tag 与 Cowork 和 Claude Code 的不同之处](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)有并排比较。

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

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

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

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


445* 您不能将自己在机器上启动的会话添加到项目中,但可以[将其工作带入项目](#start-from-an-existing-cloud-session)。项目通过[在您自己的计算机上通过 Remote Control 运行线程](#run-a-thread-on-your-own-computer)到达您的机器,该部分列出了它需要什么。448* 您不能将自己在机器上启动的会话添加到项目中,但可以[将其工作带入项目](#start-from-an-existing-cloud-session)。项目通过[在您自己的计算机上通过 Remote Control 运行线程](#run-a-thread-on-your-own-computer)到达您的机器,该部分列出了它需要什么。

446* 云线程的沙箱在轮之间暂停,并在线程继续时恢复。如果沙箱无法恢复,线程从新克隆继续,因此未提交的更改可能会丢失。在长任务上,要求 Claude 提交和推送进行中的工作。449* 云线程的沙箱在轮之间暂停,并在线程继续时恢复。如果沙箱无法恢复,线程从新克隆继续,因此未提交的更改可能会丢失。在长任务上,要求 Claude 提交和推送进行中的工作。

447* 项目属于一个用户。您不能与另一个用户共享项目或其线程,线程记录没有其他云会话具有的共享选项。在测试版期间没有项目的组织级控制。450* 项目属于一个用户。您不能与另一个用户共享项目或其线程,线程记录没有其他云会话具有的共享选项。在测试版期间没有项目的组织级控制。

448* 线程属于启动它的一个项目。您不能将线程移动或复制到另一个项目,或将其移出以独立存在。[**Move to project**](#start-from-an-existing-cloud-session)仅以另一种方式进行:它将云会话的工作带入项目。您不能将两个项目合并为一个。451* 线程属于启动它的一个项目。您不能将线程移动或复制到另一个项目,或将其移出以独立存在。[**Continue in project**](#start-from-an-existing-cloud-session)仅以另一种方式进行:它将云端会话的工作带入项目。您不能将两个项目合并为一个。

449 452 

450## 故障排除453## 故障排除

451 454 


489 492 

490### 与您的文件夹失去联系493### 与您的文件夹失去联系

491 494 

492在您的计算机上运行的线程在 Claude Code 会话停止响应时显示此消息,通常是因为计算机进入睡眠状态或桌面应用或 `claude remote-control` 退出。唤醒计算机,如果桌面应用或 `claude remote-control` 不再在那里运行,请重新启动它:重新打开应用并确认 **Use this computer from your phone and claude.ai** 仍在 **Settings > Claude Code** 下打开,或在同一文件夹中再次运行 `claude remote-control`。495在您的计算机上运行的线程在该处的 Claude Code 会话停止响应时显示此消息,通常是因为计算机进入睡眠状态,或桌面应用或 `claude remote-control` 退出。唤醒计算机。如果桌面应用或 `claude remote-control` 不再在那里运行,请重新启动它:

496 

497* **桌面应用**:重新打开应用,并确认 **Settings > Code** 或 **Settings > Claude Code** 下的 **Use this computer from your phone and claude.ai** 仍处于打开状态

498* **终端**:在同一文件夹中再次运行 `claude remote-control`

493 499 

494### 其他消息500### 其他消息

495 501 

Details

29您还可以添加标志:29您还可以添加标志:

30 30 

31* `--fix`:在审查后还要求 Claude 将发现的问题修复应用到您的工作树。其编辑会经过您的[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)。31* `--fix`:在审查后还要求 Claude 将发现的问题修复应用到您的工作树。其编辑会经过您的[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)。

32* `--comment`:将发现的问题以行内评论形式发布到 GitHub Pull Request 上,或以单条备注形式发布到 [GitLab 合并请求](#post-findings-to-a-gitlab-merge-request)上32* `--comment`:将发现的问题以行内评论形式发布到 GitHub Pull Request 上,或以单条备注形式发布到 [GitLab merge request](#post-findings-to-a-gitlab-merge-request)上

33 33 

34**2. 继续工作**34**2. 继续工作**

35 35 


71* 在终端会话中,`/code-review` 以[分叉子代理](https://code.claude.com/docs/zh-CN/skills.md#run-skills-in-a-subagent)的形式运行审查71* 在终端会话中,`/code-review` 以[分叉子代理](https://code.claude.com/docs/zh-CN/skills.md#run-skills-in-a-subagent)的形式运行审查

72* 在输出为文本或 JSON 的 `-p` 运行中72* 在输出为文本或 JSON 的 `-p` 运行中

73 73 

74在请求发现列表的宿主应用程序(例如[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md#review-your-code))中,Claude 会改为通过 [`ReportFindings` 工具](https://code.claude.com/docs/zh-CN/tools-reference)报告审查发现的问题。报告以发现列表的形式显示,每个条目会显示文件位置、一句话摘要,以及类别标签(例如 `correctness`,如果该问题带有类别)。宿主请求适用于所有 effort 级别,需要 Claude Code v2.1.218 或更高版本。74在请求发现列表的宿主应用程序(例如[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md#review-your-code))中,Claude 会改为通过 [`ReportFindings` 工具](https://code.claude.com/docs/zh-CN/tools-reference)报告审查发现的问题。报告以发现列表的形式显示,每个条目会显示文件位置、一句话摘要,以及类别标签(例如 `correctness`,如果该问题带有类别)。宿主请求适用于所有 effort 级别。

75 75 

76当 Claude 在会话后续修复已报告的问题时,会再次报告这些问题。Claude Code 随后会在更新后的发现列表中将每个问题标记为已修复、已跳过或无需更改。76当 Claude 在会话后续修复已报告的问题时,会再次报告这些问题。Claude Code 随后会在更新后的发现列表中将每个问题标记为已修复、已跳过或无需更改。

77 77 


104在 effort 级别和标志之后,Claude Code 会将该行的其余部分读取为审查目标。`ultra` 参数会改变这种解读方式:104在 effort 级别和标志之后,Claude Code 会将该行的其余部分读取为审查目标。`ultra` 参数会改变这种解读方式:

105 105 

106* **使用 `ultra` 时**:Claude Code 会将单个单词读取为基础分支或 PR 编号。未指明分支或 PR 的较长文本会成为[附加到审查的备注](https://code.claude.com/docs/zh-CN/ultrareview.md#pass-a-request-in-plain-words)。`/code-review ultra check my auth changes` 会审查您的当前分支,Claude 会将发现的问题与您的备注关联起来。106* **使用 `ultra` 时**:Claude Code 会将单个单词读取为基础分支或 PR 编号。未指明分支或 PR 的较长文本会成为[附加到审查的备注](https://code.claude.com/docs/zh-CN/ultrareview.md#pass-a-request-in-plain-words)。`/code-review ultra check my auth changes` 会审查您的当前分支,Claude 会将发现的问题与您的备注关联起来。

107* **不使用 `ultra` 时**:剩余的所有内容都是审查目标,即使它以另一个命令名称开头。`/code-review /fix-issue 123` 会以 `/fix-issue 123` 作为目标文本进行审查,而不是将 `/fix-issue` 作为第二个[叠加的 skill](https://code.claude.com/docs/zh-CN/skills.md#stack-several-skills-in-one-message) 加载。在 v2.1.218 之前,叠加在 `/code-review` 之后的命令会作为其自身的 skill 展开。107* **不使用 `ultra` 时**:剩余的所有内容都是审查目标,即使它以另一个命令名称开头。`/code-review /fix-issue 123` 会以 `/fix-issue 123` 作为目标文本进行审查,而不是将 `/fix-issue` 作为第二个[叠加的 skill](https://code.claude.com/docs/zh-CN/skills.md#stack-several-skills-in-one-message) 加载。

108 108 

109## 在前台运行109## 在前台运行

110 110 


114* 将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1`,这也会关闭其他后台任务功能114* 将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `1`,这也会关闭其他后台任务功能

115* 在之前的审查仍在进行时再次运行 `/code-review`115* 在之前的审查仍在进行时再次运行 `/code-review`

116 116 

117在 v2.1.218 之前,审查在您的对话内部运行。

118 

119## 让 Claude 启动审查117## 让 Claude 启动审查

120 118 

121Claude 可以自行启动 `/code-review`,无需您输入命令:119Claude 可以自行启动 `/code-review`,无需您输入命令:

commands.md +3 −3

Details

37* **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)**:随附 skill。它的工作方式与您自己编写的 skill 相同:是交给 Claude 的提示词。37* **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)**:随附 skill。它的工作方式与您自己编写的 skill 相同:是交给 Claude 的提示词。

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

39* **[工作流](https://code.claude.com/docs/zh-CN/workflows.md#bundled-workflows)**:随附的[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md),会将工作分发到多个子代理并在后台运行。39* **[工作流](https://code.claude.com/docs/zh-CN/workflows.md#bundled-workflows)**:随附的[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md),会将工作分发到多个子代理并在后台运行。

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

41 41 

42要添加您自己的命令,请参阅 [skill](https://code.claude.com/docs/zh-CN/skills.md)。42要添加您自己的命令,请参阅 [skill](https://code.claude.com/docs/zh-CN/skills.md)。

43 43 


54| `/agents` | 输出一条提醒,提示您请 Claude 创建或管理[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md),或直接编辑 `.claude/agents/` 或 `~/.claude/agents/`。在 v2.1.197 及更早版本中,打开用于创建和管理子代理配置的交互式界面 |54| `/agents` | 输出一条提醒,提示您请 Claude 创建或管理[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md),或直接编辑 `.claude/agents/` 或 `~/.claude/agents/`。在 v2.1.197 及更早版本中,打开用于创建和管理子代理配置的交互式界面 |

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

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

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

58| `/auto-mode-setup` | 根据您的项目和最近的会话[起草 `autoMode.environment` 条目](https://code.claude.com/docs/zh-CN/auto-mode-config#generate-environment-entries),然后审阅草稿并将其保存到您的用户设置中。在 Pro、Max 或 Team 套餐上,需要 Claude Code v2.1.228 或更高版本,在原生 Windows 上则需要 v2.1.233 或更高版本。在 Enterprise 套餐上或使用 Claude Console API 密钥时,需要 v2.1.283 或更高版本。如果该命令不存在,请参阅 [`/auto-mode-setup` 返回 "Unknown command"](https://code.claude.com/docs/zh-CN/auto-mode-config#auto-mode-setup-returns-unknown-command) |58| `/auto-mode-setup` | 根据您的项目和最近的会话[起草 `autoMode.environment` 条目](https://code.claude.com/docs/zh-CN/auto-mode-config#generate-environment-entries),然后审阅草稿并将其保存到您的用户设置中。在 Pro、Max 或 Team 套餐上,需要 Claude Code v2.1.228 或更高版本,在原生 Windows 上则需要 v2.1.233 或更高版本。在 Enterprise 套餐上或使用 Claude Console API 密钥时,需要 v2.1.283 或更高版本。如果该命令不存在,请参阅 [`/auto-mode-setup` 返回 "Unknown command"](https://code.claude.com/docs/zh-CN/auto-mode-config#auto-mode-setup-returns-unknown-command) |

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

60| `/autofix-pr [prompt]` | 生成一个[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#auto-fix-pull-requests),监视当前分支的 PR,并在 CI 失败或审阅者留下评论时推送修复。通过 `gh pr view` 从您检出的分支检测打开的 PR;要监视其他 PR,请先检出其分支。默认情况下,云端会话会被指示修复每个 CI 失败和审阅评论;传递提示词可给出不同的指令,例如 `/autofix-pr only fix lint and type errors`。需要 `gh` CLI 以及[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)访问权限 |60| `/autofix-pr [prompt]` | 生成一个[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#auto-fix-pull-requests),监视当前分支的 PR,并在 CI 失败或审阅者留下评论时推送修复。通过 `gh pr view` 从您检出的分支检测打开的 PR;要监视其他 PR,请先检出其分支。默认情况下,云端会话会被指示修复每个 CI 失败和审阅评论;传递提示词可给出不同的指令,例如 `/autofix-pr only fix lint and type errors`。需要 `gh` CLI 以及[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)访问权限 |


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

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

87| `/doctor [prompt-audit [path]]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 运行设置检查,诊断安装、设置、扩展和 `CLAUDE.md` 方面的问题,并提出修复建议,Claude 会在您确认后应用这些修复。有关检查涵盖的内容,或要改用 `prompt-audit` 审计您的指令,请参阅[使用 `/doctor` 检查您的设置](https://code.claude.com/docs/zh-CN/skills#check-your-setup-with-/doctor)。`prompt-audit` 子命令需要 Claude Code v2.1.283 或更高版本。别名:`/checkup` |87| `/doctor [prompt-audit [path]]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 运行设置检查,诊断安装、设置、扩展和 `CLAUDE.md` 方面的问题,并提出修复建议,Claude 会在您确认后应用这些修复。有关检查涵盖的内容,或要改用 `prompt-audit` 审计您的指令,请参阅[使用 `/doctor` 检查您的设置](https://code.claude.com/docs/zh-CN/skills#check-your-setup-with-/doctor)。`prompt-audit` 子命令需要 Claude Code v2.1.283 或更高版本。别名:`/checkup` |

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

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

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

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

computer-use.md +1 −1

Details

176| 功能 | Desktop | CLI |176| 功能 | Desktop | CLI |

177| :- | :- | :- |177| :- | :- | :- |

178| 平台 | macOS 和 Windows | 仅 macOS |178| 平台 | macOS 和 Windows | 仅 macOS |

179| 启用 | **Settings > This computer > System** 中的切换 | 在 `/mcp` 中启用 `computer-use` |179| 启用 | [设置](https://code.claude.com/docs/zh-CN/desktop.md#enable-computer-use) 中的切换 | 在 `/mcp` 中启用 `computer-use` |

180| 拒绝应用列表 | 在设置中可配置 | 尚不可用 |180| 拒绝应用列表 | 在设置中可配置 | 尚不可用 |

181| 自动取消隐藏切换 | 可选 | 始终开启 |181| 自动取消隐藏切换 | 可选 | 始终开启 |

182| Dispatch 集成 | Dispatch 生成的会话可以使用 computer use | 不适用 |182| Dispatch 集成 | Dispatch 生成的会话可以使用 computer use | 不适用 |

Details

70* [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md):何时使用 CLAUDE.md 与技能与规则与 hooks 与 MCP70* [扩展 Claude Code](https://code.claude.com/docs/zh-CN/features-overview.md):何时使用 CLAUDE.md 与技能与规则与 hooks 与 MCP

71* [存储指令和内存](https://code.claude.com/docs/zh-CN/memory.md):CLAUDE.md 层次结构和自动内存71* [存储指令和内存](https://code.claude.com/docs/zh-CN/memory.md):CLAUDE.md 层次结构和自动内存

72* [子代理](https://code.claude.com/docs/zh-CN/sub-agents.md):将研究委托给单独的上下文窗口72* [子代理](https://code.claude.com/docs/zh-CN/sub-agents.md):将研究委托给单独的上下文窗口

73* [最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md):将上下文作为您的主要约束来管理73* [最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md#keep-cost-and-context-down):保持会话专注并降低成本

74* [提示缓存](https://code.claude.com/docs/zh-CN/prompt-caching.md):哪些操作会使缓存的前缀失效74* [提示缓存](https://code.claude.com/docs/zh-CN/prompt-caching.md):哪些操作会使缓存的前缀失效

75* [减少令牌使用](https://code.claude.com/docs/zh-CN/costs.md#reduce-token-usage):保持上下文使用低的策略75* [减少令牌使用](https://code.claude.com/docs/zh-CN/costs.md#reduce-token-usage):保持上下文使用低的策略

Details

174以下任一方式都会向您显示完整文本:174以下任一方式都会向您显示完整文本:

175 175 

176* 按 `Ctrl+O` 打开[会话记录查看器](https://code.claude.com/docs/zh-CN/interactive-mode.md#transcript-viewer),并在发送者的会话名称下阅读完整文本。176* 按 `Ctrl+O` 打开[会话记录查看器](https://code.claude.com/docs/zh-CN/interactive-mode.md#transcript-viewer),并在发送者的会话名称下阅读完整文本。

177 

178 如果 Claude 正忙且尚未收到该消息,请滚动到会话记录的末尾,该消息会列在 `Waiting to be delivered` 下。需要 Claude Code v2.1.309 或更高版本。

179 

177* 在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md#use-the-mouse)中,点击未完整显示消息的预览行,即可将其就地展开。180* 在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md#use-the-mouse)中,点击未完整显示消息的预览行,即可将其就地展开。

181 

178* 在使用 [`--verbose`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 启动的会话中,Claude Code 会显示完整文本而不是预览。182* 在使用 [`--verbose`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 启动的会话中,Claude Code 会显示完整文本而不是预览。

179 183 

180预览仅缩短您看到的内容。无论您是否展开它,Claude 都会读取完整消息。184预览仅缩短您看到的内容。无论您是否展开它,Claude 都会读取完整消息。

desktop.md +31 −22

Details

69* **使用建议**:按 **Tab** 或 **右箭头** 将其放入输入框,根据需要进行编辑,然后按 **Enter** 发送。在接受建议之前按 **Enter** 不会发送它。69* **使用建议**:按 **Tab** 或 **右箭头** 将其放入输入框,根据需要进行编辑,然后按 **Enter** 发送。在接受建议之前按 **Enter** 不会发送它。

70* **编写自己的提示词**:直接开始输入。建议仅在输入框为空且没有附加文件时显示。70* **编写自己的提示词**:直接开始输入。建议仅在输入框为空且没有附加文件时显示。

71 71 

72前往 **Settings > Claude Code**,在 **Sessions** 下关闭 **Prompt suggestions**,即可从每个会话下次启动或恢复时起停止显示建议。72在 **Settings > Code** 或 **Settings > Claude Code** 中关闭 **Prompt suggestions** 即可停止显示建议。每个会话会在下次启动或恢复时停止显示建议。

73 73 

74### 向提示添加文件和上下文74### 向提示添加文件和上下文

75 75 


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

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

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

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

96 96 

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

98 98 


100 100 

101> [!TIP]101> [!TIP]

102>102>

103> 在 Plan 中开始复杂任务,以便 Claude 在进行更改之前制定方法。一旦您批准计划,切换到 Accept edits 或 Manual 来执行它。有关此工作流的更多信息,请参阅[先探索,然后计划,然后编码](https://code.claude.com/docs/zh-CN/best-practices.md#explore-first-then-plan-then-code)。103> 在 Plan 中开始复杂任务,以便 Claude 在进行更改之前制定方法。一旦您批准计划,切换到 Accept edits 或 Manual 来执行它。有关此工作流的更多信息,请参阅[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode)。

104 104 

105云端会话支持 Accept edits、Plan 和 Auto。Accept edits 对应于 `default` 模式:云端会话预先批准文件编辑,因此选择器显示 Accept edits 而不是 Manual。Bypass permissions 在云端会话中不可用,包括[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)中的会话。105云端会话支持 Accept edits、Plan 和 Auto。Accept edits 对应于 `default` 模式:云端会话预先批准文件编辑,因此选择器显示 Accept edits 而不是 Manual。Bypass permissions 在云端会话中不可用,包括[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)中的会话。

106 106 


133 133 

134Claude 根据您的项目创建初始服务器配置。如果您的应用使用自定义开发命令,编辑 `.claude/launch.json` 以匹配您的设置。有关完整参考,请参阅[配置预览服务器](#configure-preview-servers)。134Claude 根据您的项目创建初始服务器配置。如果您的应用使用自定义开发命令,编辑 `.claude/launch.json` 以匹配您的设置。有关完整参考,请参阅[配置预览服务器](#configure-preview-servers)。

135 135 

136要清除浏览器保存的数据,请在浏览器窗格的 **⋮** 菜单中选择 **Clear browsing data**。要完全关闭浏览器,请在 **Settings > Claude Code** 中关闭 **Browser tools**。136要清除浏览器保存的数据,请在浏览器窗格的 **⋮** 菜单中选择 **Clear browsing data**。要完全关闭浏览器,请在 **Settings > Code** 或 **Settings > Claude Code** 中关闭 **Browser tools**。

137 137 

138### 浏览外部网站138### 浏览外部网站

139 139 


164 164 

165### 使用 diff 视图审查更改165### 使用 diff 视图审查更改

166 166 

167Claude 对您的代码进行更改后,diff 视图让您在创建 Pull Request 之前逐个文件审查修改。要打开 diff 视图,请点击[会话详情面板](#see-session-details)的 **Changes** 卡片中的行数统计,例如 `+12 -1`。您也可以点击会话标题栏中的 **Changes**。167Claude 对您的代码进行更改后,diff 视图让您在创建 Pull Request 之前逐个文件审查修改。要打开 diff 视图,请点击[会话详情面板](#see-session-details)的 **Changes** 卡片中的行数统计,例如 `+12 -1`。您也可以点击会话标题栏中的 **Changes**。云端会话相对于基础分支的 diff 可能[不包含尚未推送的更改](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#troubleshoot-a-missing-file-in-the-diff-view)。

168 168 

169要对特定行进行评论,点击 diff 中的任何行以打开评论框。输入您的反馈并按 **Enter** 添加评论。在多行添加评论后,一次提交所有评论:169要对特定行进行评论,请将鼠标悬停在某一行上,然后点击其行号旁出现的 **+** 以打开评论框。输入您的反馈并按 **Enter** 添加评论。在多行添加评论后,一次提交所有评论:

170 170 

171* **macOS**:按 **Cmd+Enter**171* **macOS**:按 **Cmd+Enter**

172* **Windows**:按 **Ctrl+Enter**172* **Windows**:按 **Ctrl+Enter**


194 * **如果仓库不允许自动合并**:**Merge when ready** 无法打开,因此请先在您的 [GitHub 仓库设置](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)中启用自动合并194 * **如果仓库不允许自动合并**:**Merge when ready** 无法打开,因此请先在您的 [GitHub 仓库设置](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)中启用自动合并

195* **[早期布局](#check-which-layout-you-have)**:会话有 Pull Request 后,点击其状态栏上的 **CI**。195* **[早期布局](#check-which-layout-you-have)**:会话有 Pull Request 后,点击其状态栏上的 **CI**。

196 196 

197要在 PR 合并或关闭后自动归档会话,请在 **Settings > Claude Code** 中打开[自动归档](#archive-a-session)。197要在 PR 合并或关闭后自动归档会话,请在 **Settings > Code** 或 **Settings > Claude Code** 中打开[自动归档](#archive-a-session)。

198 198 

199> [!NOTE]199> [!NOTE]

200>200>


275* **Cmd+Ctrl**:按 **Ctrl+Alt**275* **Cmd+Ctrl**:按 **Ctrl+Alt**

276* **Cmd**:按 **Ctrl**276* **Cmd**:按 **Ctrl**

277 277 

278会话循环、终端切换和视图模式切换在每个平台上使用 **Ctrl**。278以 `Ctrl` 开头的快捷键在每个平台上保持不变。

279 279 

280| 快捷键 | 操作 |280| 快捷键 | 操作 |

281| - | - |281| - | - |


284| `Cmd` `Option` `1`–`9` | 在[当前布局](#check-which-layout-you-have)的新会话屏幕上,选择一个环境 |284| `Cmd` `Option` `1`–`9` | 在[当前布局](#check-which-layout-you-have)的新会话屏幕上,选择一个环境 |

285| `Cmd` `Option` `0` | 在当前布局的新会话屏幕上,打开 [**New environment** 对话框](#create-a-saved-environment) |285| `Cmd` `Option` `0` | 在当前布局的新会话屏幕上,打开 [**New environment** 对话框](#create-a-saved-environment) |

286| `Cmd` `W` | 关闭会话 |286| `Cmd` `W` | 关闭会话 |

287| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | 下一个或上一个会话 |287| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | 在会话之间切换 |

288| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | 下一个或上一个会话 |288| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | 下一个或上一个会话 |

289| `Esc` | 停止 Claude 的回复 |289| `Esc` | 停止 Claude 的回复 |

290| `Tab` / `Right arrow` | 在空输入框中[接受建议的提示词](#accept-a-suggested-prompt) |290| `Tab` / `Right arrow` | 在空输入框中[接受建议的提示词](#accept-a-suggested-prompt) |


352 352 

353**2. 打开切换**353**2. 打开切换**

354 354 

355在桌面应用中,转到**设置 > 此计算机 > 系统**。在**计算机使用**下,打开**启用计算机使用**。在 Windows 上,切换立即生效,设置完成。在 macOS 上,继续下一步。355在桌面应用中,打开**设置**,然后:

356 

357* **如果设置菜单中列出了此计算机**:转到**此计算机 > 系统**

358* **否则**:转到**功能**

359 

360在**计算机使用**下,打开**启用计算机使用**:

361 

362* **Windows**:开关立即生效,设置完成

363* **macOS**:继续下一步

356 364 

357如果你看不到切换,确认你在 macOS 或 Windows 上使用 Pro 或 Max 计划,然后更新并重启应用。365如果你看不到切换,确认你在 macOS 或 Windows 上使用 Pro 或 Max 计划,然后更新并重启应用。

358 366 


379 387 

380像终端、Finder 或文件浏览器以及系统设置或设置这样具有广泛影响的应用在提示中显示额外警告,以便你知道批准它们授予什么。388像终端、Finder 或文件浏览器以及系统设置或设置这样具有广泛影响的应用在提示中显示额外警告,以便你知道批准它们授予什么。

381 389 

382**设置 > 此计算机 > 系统**中的**计算机使用**部分包含以下选项:390在设置中,您[启用计算机使用](#enable-computer-use)时所在的**计算机使用**部分包含以下选项:

383 391 

384* **拒绝的应用**:在此处添加应用以拒绝它们而不提示。Claude 可能仍然通过允许应用中的操作间接影响被拒绝的应用,但它无法直接与被拒绝的应用交互。392* **拒绝的应用**:在此处添加应用以拒绝它们而不提示。Claude 可能仍然通过允许应用中的操作间接影响被拒绝的应用,但它无法直接与被拒绝的应用交互。

385* **Claude 完成时取消隐藏应用**:当计算机使用不在后台运行时,Claude 隐藏你的其他窗口,以便它仅与批准的应用交互。当 Claude 完成时,隐藏的窗口被恢复,除非你关闭此设置。393* **Claude 完成时取消隐藏应用**:当计算机使用不在后台运行时,Claude 隐藏你的其他窗口,以便它仅与批准的应用交互。当 Claude 完成时,隐藏的窗口被恢复,除非你关闭此设置。


390 398 

391### 使用会话并行工作399### 使用会话并行工作

392 400 

393点击侧边栏中的 **+ New**,或在 macOS 上按 **Cmd+N**、在 Windows 上按 **Ctrl+N**,即可并行处理多个任务。按 **Ctrl+Tab** 和 **Ctrl+Shift+Tab** 可在侧边栏中循环切换会话。401点击侧边栏中的 **+ New**,或在 macOS 上按 **Cmd+N**、在 Windows 上按 **Ctrl+N**,即可并行处理多个任务。按 **Ctrl+Tab** 和 **Ctrl+Shift+Tab** 可在会话之间切换。

394 402 

395您还可以在当前会话旁边或在单独的窗口中打开第二个会话:403您还可以在当前会话旁边或在单独的窗口中打开第二个会话:

396 404 


401 409 

402#### 在独立的 worktree 中运行会话410#### 在独立的 worktree 中运行会话

403 411 

404在属于 Git 仓库的项目中,请在启动会话前打开 **Worktree**,使会话在其自己的 [Git worktree](https://code.claude.com/docs/zh-CN/worktrees.md)(项目的隔离副本)中运行。默认情况下,**Worktree** 处于关闭状态,Claude 直接在项目文件夹中工作。点击[输入框下方一行](#start-a-session)中的项目文件夹控件,然后打开 **Worktree**。412在属于 Git 仓库的项目中,请在启动会话前打开 **Worktree**,使会话在其自己的 [Git worktree](https://code.claude.com/docs/zh-CN/worktrees.md)(项目的隔离副本)中运行。默认情况下,**Worktree** 处于关闭状态,Claude 直接在项目文件夹中工作。在[当前布局](#check-which-layout-you-have)中,打开[输入框下方一行](#start-a-session)中的 **Worktree** 按钮。

405 413 

406* **使用[已保存的环境](#create-a-saved-environment)时**:在创建或编辑环境时设置 **Worktree**414* **使用[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md)时**:如果输入框下方一行显示了项目文件夹控件但没有 **Worktree** 按钮,请点击该控件并打开 **Worktree**

415* **作为[已保存的本地或 SSH 环境](#create-a-saved-environment)的默认值**:在创建或编辑环境时设置 **Worktree**

407* **[早期布局](#check-which-layout-you-have)**:选中输入框上方分支名称旁边的 **worktree** 复选框416* **[早期布局](#check-which-layout-you-have)**:选中输入框上方分支名称旁边的 **worktree** 复选框

408 417 

409Worktree 默认存储在 `<project-root>/.claude/worktrees/` 中。要改为将其存储在自定义目录中:418Worktree 默认存储在 `<project-root>/.claude/worktrees/` 中。要改为将其存储在自定义目录中:

410 419 

411* **本地会话**:在 **Settings > Claude Code** 中设置 **Worktree location**420* **本地会话**:在 **Settings > Code** 或 **Settings > Claude Code** 中设置 **Worktree location**

412* **SSH 会话**:在 [SSH 连接](#choose-where-ssh-session-worktrees-go)上设置 **Worktree folder**421* **SSH 会话**:在 [SSH 连接](#choose-where-ssh-session-worktrees-go)上设置 **Worktree folder**

413 422 

414您还可以在 **Settings > Claude Code** 中设置 **Branch prefix**。Desktop 会将其添加到每个 worktree 分支名称的前面,这有助于让 Claude 创建的分支保持条理。423您还可以在 **Settings > Code** 或 **Settings > Claude Code** 中设置 **Branch prefix**。Desktop 会将其添加到每个 worktree 分支名称的前面,这有助于让 Claude 创建的分支保持条理。

415 424 

416要在新 worktree 中包含被 gitignore 的文件(如 `.env`),请在项目根目录中创建一个 [`.worktreeinclude` 文件](https://code.claude.com/docs/zh-CN/worktrees#copy-gitignored-files-into-worktrees)。有关 worktree 会话从何处读取项目设置、hook 和 skill,请参阅 [worktree 与主检出共享的内容](https://code.claude.com/docs/zh-CN/worktrees.md#what-worktrees-share-with-the-main-checkout)。425要在新 worktree 中包含被 gitignore 的文件(如 `.env`),请在项目根目录中创建一个 [`.worktreeinclude` 文件](https://code.claude.com/docs/zh-CN/worktrees#copy-gitignored-files-into-worktrees)。有关 worktree 会话从何处读取项目设置、hook 和 skill,请参阅 [worktree 与主检出共享的内容](https://code.claude.com/docs/zh-CN/worktrees.md#what-worktrees-share-with-the-main-checkout)。

417 426 


430 439 

431在存档 worktree 中有未提交更改的会话之前,请参阅[存档会话时保留未提交的更改](#keep-uncommitted-changes-when-a-session-is-archived)。要存档会话,请将鼠标悬停在侧边栏中的该会话上,打开其菜单,然后选择 **Archive**。该会话会移至您的[已存档会话](#organize-and-find-sessions)。440在存档 worktree 中有未提交更改的会话之前,请参阅[存档会话时保留未提交的更改](#keep-uncommitted-changes-when-a-session-is-archived)。要存档会话,请将鼠标悬停在侧边栏中的该会话上,打开其菜单,然后选择 **Archive**。该会话会移至您的[已存档会话](#organize-and-find-sessions)。

432 441 

433要让会话在其 Pull Request 合并或关闭时自动存档,请在 **Settings > Claude Code** 中打开 **Auto-archive after PR merge or close**。云端会话和仍在运行的会话不会自动存档。442要让会话在其 Pull Request 合并或关闭时自动存档,请在 **Settings > Code** 或 **Settings > Claude Code** 中打开 **Auto-archive after PR merge or close**。云端会话和仍在运行的会话不会自动存档。

434 443 

435#### 存档会话时保留未提交的更改444#### 存档会话时保留未提交的更改

436 445 


527本地会话会在您为其打开 Remote Control 时连接,或在启动时自动连接:536本地会话会在您为其打开 Remote Control 时连接,或在启动时自动连接:

528 537 

529* **您为该会话打开它**:使用该会话的 **Remote Control** 开关,或在其输入框中输入 `/remote-control`。538* **您为该会话打开它**:使用该会话的 **Remote Control** 开关,或在其输入框中输入 `/remote-control`。

530* **在启动时连接**:当 **Settings > Claude Code** 中的 **Connect new sessions to Remote Control** 处于打开状态时,新会话会自动连接。如果您从未更改过该设置,Desktop 会遵循您的用户设置或托管设置中的 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup),其次是您组织的默认值。539* **在启动时连接**:当 **Settings > Code** 或 **Settings > Claude Code** 中的 **Connect new sessions to Remote Control** 处于打开状态时,新会话会自动连接。如果您从未更改过该设置,Desktop 会遵循您的用户设置或托管设置中的 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup),其次是您组织的默认值。

531 540 

532要查看会话是否已连接,请查看其[会话详情面板](#see-session-details)中 **Environment** 卡片内的 **Remote Control** 开关。541要查看会话是否已连接,请查看其[会话详情面板](#see-session-details)中 **Environment** 卡片内的 **Remote Control** 开关。

533 542 

534要让会话不出现在您的其他设备上,请在所需的级别关闭 Remote Control:543要让会话不出现在您的其他设备上,请在所需的级别关闭 Remote Control:

535 544 

536* **单个会话**:关闭其 **Remote Control** 开关。在启动时已自动连接的会话中,输入 `/remote-control` 会保持 Remote Control 打开,并显示 `Remote Control is already on. This session connected automatically when it started.`。点击该行上的 **Turn off** 即可断开连接。545* **单个会话**:关闭其 **Remote Control** 开关。在启动时已自动连接的会话中,输入 `/remote-control` 会保持 Remote Control 打开,并显示 `Remote Control is already on. This session connected automatically when it started.`。点击该行上的 **Turn off** 即可断开连接。

537* **此计算机上的新 Desktop 会话**:在 **Settings > Claude Code** 中关闭 **Connect new sessions to Remote Control**。如果它已显示为关闭,请先将其打开再关闭,以便 Desktop 保存您的选择。保存后,它优先于 `remoteControlAtStartup` 和默认值。546* **此计算机上的新 Desktop 会话**:在 **Settings > Code** 或 **Settings > Claude Code** 中关闭 **Connect new sessions to Remote Control**。如果它已显示为关闭,请先将其打开再关闭,以便 Desktop 保存您的选择。保存后,它优先于 `remoteControlAtStartup` 和默认值。

538* **此计算机上的任何会话,包括 CLI**:在 `~/.claude/settings.json` 中将 [`disableRemoteControl`](https://code.claude.com/docs/zh-CN/settings-reference#disableremotecontrol) 设置为 `true`,以阻止会话连接。保存该文件时已连接的会话会保持连接,直到您为其关闭 Remote Control。547* **此计算机上的任何会话,包括 CLI**:在 `~/.claude/settings.json` 中将 [`disableRemoteControl`](https://code.claude.com/docs/zh-CN/settings-reference#disableremotecontrol) 设置为 `true`,以阻止会话连接。保存该文件时已连接的会话会保持连接,直到您为其关闭 Remote Control。

539 548 

540要隐藏已显示在您其他设备上的会话,请在 Desktop 中将其存档。Desktop 也会存档该会话的 Remote Control 副本,使其从这些设备上的默认会话列表中移除。要在那里查看或删除它,请参阅[存档会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#archive-sessions)。549要隐藏已显示在您其他设备上的会话,请在 Desktop 中将其存档。Desktop 也会存档该会话的 Remote Control 副本,使其从这些设备上的默认会话列表中移除。要在那里查看或删除它,请参阅[存档会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#archive-sessions)。


576> * **WSL 会话中 Connectors 显示为灰色**:请参阅[如果终端或连接器不可用](https://code.claude.com/docs/zh-CN/desktop-wsl.md#check-for-the-terminal-and-connectors)585> * **WSL 会话中 Connectors 显示为灰色**:请参阅[如果终端或连接器不可用](https://code.claude.com/docs/zh-CN/desktop-wsl.md#check-for-the-terminal-and-connectors)

577> * **云端会话**:请参阅[连接器如何接入 Claude Code](https://code.claude.com/docs/zh-CN/mcp.md#how-connectors-reach-claude-code)586> * **云端会话**:请参阅[连接器如何接入 Claude Code](https://code.claude.com/docs/zh-CN/mcp.md#how-connectors-reach-claude-code)

578 587 

579连接后,Claude 可以读取您的日历、发送消息、创建问题并直接与您的工具交互。您可以询问 Claude 在您的会话中配置了哪些连接器。要管理或断开连接器,请在桌面应用中转到 **Settings > Connectors**。588连接后,Claude 可以读取您的日历、发送消息、创建问题并直接与您的工具交互。您可以询问 Claude 在您的会话中配置了哪些连接器。要管理或断开连接器,请点击侧边栏中的**自定义**并打开 **Connectors**。

580 589 

581对于 Connectors 中未列出的集成,通过[设置文件](https://code.claude.com/docs/zh-CN/mcp.md#installing-mcp-servers)手动添加 MCP 服务器。您也可以[创建自定义连接器](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp)。590对于 Connectors 中未列出的集成,通过[设置文件](https://code.claude.com/docs/zh-CN/mcp.md#installing-mcp-servers)手动添加 MCP 服务器。您也可以[创建自定义连接器](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp)。

582 591 


2028| `--model sonnet` | 输入框下方一行中的模型选择器 |2037| `--model sonnet` | 输入框下方一行中的模型选择器 |

2029| `--resume`, `--continue` | 点击侧边栏中的会话,或在输入框中输入 `/resume` 来选择您从 CLI 启动的会话 |2038| `--resume`, `--continue` | 点击侧边栏中的会话,或在输入框中输入 `/resume` 来选择您从 CLI 启动的会话 |

2030| `--permission-mode` | 输入框下方一行中的模式选择器 |2039| `--permission-mode` | 输入框下方一行中的模式选择器 |

2031| `--dangerously-skip-permissions` | 绕过权限模式。在 Pro 和 Max 套餐上,在设置 → Claude Code → "允许绕过权限模式"中启用它;在 Team 和 Enterprise 套餐上,由组织策略控制 |2040| `--dangerously-skip-permissions` | 绕过权限模式。在 Pro 和 Max 套餐上,在 **设置 > Code** 或 **设置 > Claude Code** 中启用"允许绕过权限模式";在 Team 和 Enterprise 套餐上,由组织策略控制 |

2032| `--add-dir` | 在本地和 SSH 会话中[向会话添加文件夹](#add-folders-to-a-session),或在云端会话中选择[多个仓库](#run-long-running-tasks-in-the-cloud) |2041| `--add-dir` | 在本地和 SSH 会话中[向会话添加文件夹](#add-folders-to-a-session),或在云端会话中选择[多个仓库](#run-long-running-tasks-in-the-cloud) |

2033| `--allowedTools`, `--disallowedTools` | 无每个会话的等效项。[设置文件](https://code.claude.com/docs/zh-CN/settings.md)中的权限规则仍然适用。 |2042| `--allowedTools`, `--disallowedTools` | 无每个会话的等效项。[设置文件](https://code.claude.com/docs/zh-CN/settings.md)中的权限规则仍然适用。 |

2034| `--verbose` | [Verbose 视图模式](#switch-view-modes) |2043| `--verbose` | [Verbose 视图模式](#switch-view-modes) |


2088* **Agent team**:协调的团队(由 Claude 作为团队负责人从共享任务列表中为队友分配任务)在 [CLI](https://code.claude.com/docs/zh-CN/agent-teams.md) 中可用,不在 Desktop 中。对于一个会话内的多 Agent 工作,请使用[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md),它可在 Desktop 中运行;Claude 也可以直接[向您的其他会话发送消息并管理它们](#work-across-sessions)。2097* **Agent team**:协调的团队(由 Claude 作为团队负责人从共享任务列表中为队友分配任务)在 [CLI](https://code.claude.com/docs/zh-CN/agent-teams.md) 中可用,不在 Desktop 中。对于一个会话内的多 Agent 工作,请使用[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md),它可在 Desktop 中运行;Claude 也可以直接[向您的其他会话发送消息并管理它们](#work-across-sessions)。

2089* **Terminal-dialog 命令**:在终端中打开交互式面板的内置命令,其行为在 Code 选项卡中有所不同。直接编辑[设置文件](https://code.claude.com/docs/zh-CN/settings.md)来管理权限规则和配置,或从独立 CLI 运行命令。2098* **Terminal-dialog 命令**:在终端中打开交互式面板的内置命令,其行为在 Code 选项卡中有所不同。直接编辑[设置文件](https://code.claude.com/docs/zh-CN/settings.md)来管理权限规则和配置,或从独立 CLI 运行命令。

2090 * 没有参数形式的命令,例如 `/permissions`,会回复 `isn't available in this environment`。2099 * 没有参数形式的命令,例如 `/permissions`,会回复 `isn't available in this environment`。

2091 * `/config` 打开 **设置 > Claude Code**。2100 * `/config` 打开 **设置 > Code** 或 **设置 > Claude Code**。

2092 2101 

2093## 故障排除2102## 故障排除

2094 2103 

Details

135 135 

136本地定时任务在您的机器上运行。Desktop 在应用打开时每分钟检查一次调度,并在任务到期时启动一个新会话,独立于您打开的任何手动会话。每个任务在计划时间后会有几分钟的小延迟,以错开 API 流量。延迟是确定性的:同一任务总是在相同的偏移量处启动。136本地定时任务在您的机器上运行。Desktop 在应用打开时每分钟检查一次调度,并在任务到期时启动一个新会话,独立于您打开的任何手动会话。每个任务在计划时间后会有几分钟的小延迟,以错开 API 流量。延迟是确定性的:同一任务总是在相同的偏移量处启动。

137 137 

138任务仅在 desktop 应用运行且计算机处于唤醒状态时运行。如果您的计算机在计划时间内进入睡眠状态,该运行将被跳过。要防止空闲睡眠,请在 **Settings > This computer > System** 中启用 **Keep computer awake**。关闭笔记本电脑盖仍会使其进入睡眠状态。138任务仅在 desktop 应用运行且计算机处于唤醒状态时运行。如果您的计算机在计划时间内进入睡眠状态,该运行将被跳过。要防止空闲睡眠,请在 **Settings > Desktop app** 或 **Settings > This computer > System** 中启用 **Keep computer awake**。关闭笔记本电脑盖仍会使其进入睡眠状态。

139 139 

140> [!NOTE]140> [!NOTE]

141>141>

env-vars.md +2 −0

Details

291| `CLAUDE_CODE_ENABLE_TASKS` | 选择 Claude Code 在[具备任务跟踪工具的会话](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability)中提供哪些任务跟踪工具。默认情况下,Claude Code 提供 Task 工具 `TaskCreate`、`TaskUpdate`、`TaskGet` 和 `TaskList`。设置为 `0` 可改为使用旧版 `TodoWrite` 工具。请参阅[任务列表](https://code.claude.com/docs/zh-CN/interactive-mode.md#task-list) |291| `CLAUDE_CODE_ENABLE_TASKS` | 选择 Claude Code 在[具备任务跟踪工具的会话](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability)中提供哪些任务跟踪工具。默认情况下,Claude Code 提供 Task 工具 `TaskCreate`、`TaskUpdate`、`TaskGet` 和 `TaskList`。设置为 `0` 可改为使用旧版 `TodoWrite` 工具。请参阅[任务列表](https://code.claude.com/docs/zh-CN/interactive-mode.md#task-list) |

292| `CLAUDE_CODE_ENABLE_TELEMETRY` | 设置为 `1` 可启用用于指标和日志的 OpenTelemetry 数据收集。配置 OTel 导出器之前必须设置此变量。请在 shell、用户设置或托管设置中设置。在[项目设置和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中会被忽略。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |292| `CLAUDE_CODE_ENABLE_TELEMETRY` | 设置为 `1` 可启用用于指标和日志的 OpenTelemetry 数据收集。配置 OTel 导出器之前必须设置此变量。请在 shell、用户设置或托管设置中设置。在[项目设置和本地设置](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)中会被忽略。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

293| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 设置为 `1` 可在所有模型上获得任务跟踪工具。如果不设置,Claude Code 默认仅在 [Task 工具可用性](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability)中列出的模型上提供这些工具。`CLAUDE_CODE_ENABLE_TASKS` 仍然决定使用 Task 工具还是 `TodoWrite`。需要 Claude Code v2.1.233 或更高版本 |293| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 设置为 `1` 可在所有模型上获得任务跟踪工具。如果不设置,Claude Code 默认仅在 [Task 工具可用性](https://code.claude.com/docs/zh-CN/tools-reference.md#task-tool-availability)中列出的模型上提供这些工具。`CLAUDE_CODE_ENABLE_TASKS` 仍然决定使用 Task 工具还是 `TodoWrite`。需要 Claude Code v2.1.233 或更高版本 |

294| `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` | 设置为 `1` 可在 `bypassPermissions` 模式下[无提示地运行危险的 `rm` 命令](https://code.claude.com/docs/zh-CN/permission-modes#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode),这会移除针对破坏性删除的安全提示。链接的章节列出了该变量不生效的情况。[请在启动 Claude Code 的环境中设置它](#set-variables-in-your-shell),因为 Claude Code [会忽略设置 `env` 块中的该变量](https://code.claude.com/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)。需要 Claude Code v2.1.311 或更高版本 |

294| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 查询循环进入空闲状态后、自动退出前等待的时间(毫秒)。适用于使用 SDK 模式的自动化工作流和脚本 |295| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 查询循环进入空闲状态后、自动退出前等待的时间(毫秒)。适用于使用 SDK 模式的自动化工作流和脚本 |

295| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 可启用 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md)。agent team 为实验性功能,默认禁用 |296| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | 设置为 `1` 可启用 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md)。agent team 为实验性功能,默认禁用 |

296| `CLAUDE_CODE_EXTRA_BODY` | 要合并到每个 API 请求体顶层的 JSON 对象。适用于传递 Claude Code 未直接公开的提供商特定参数。在 shell 中导出的值也会应用于您通过 `claude agents` 或 `--bg` 分派的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)。在 v2.1.206 之前,后台会话会忽略 shell 导出的值,而使用后台监管进程所继承的副本 |297| `CLAUDE_CODE_EXTRA_BODY` | 要合并到每个 API 请求体顶层的 JSON 对象。适用于传递 Claude Code 未直接公开的提供商特定参数。在 shell 中导出的值也会应用于您通过 `claude agents` 或 `--bg` 分派的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)。在 v2.1.206 之前,后台会话会忽略 shell 导出的值,而使用后台监管进程所继承的副本 |


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

369| `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](https://code.claude.com/docs/zh-CN/agent-view.md) 会话时,它会自行设置一小时的界限。需要 Claude Code v2.1.211 或更高版本 |370| `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](https://code.claude.com/docs/zh-CN/agent-view.md) 会话时,它会自行设置一小时的界限。需要 Claude Code v2.1.211 或更高版本 |

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

372| `CLAUDE_CODE_RESUME_SHOWS_CUT_OFF_CALLS` | 设置为 `1` 可在 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 继续的轮次中保留[被中断的工具调用](https://code.claude.com/docs/zh-CN/sessions.md#what-a-resumed-session-restores),并将其标记为已截断。未设置时,这些调用会在轮次继续之前被丢弃。某些调用仍会被丢弃,例如对子代理、skill、工作流以及等待人工操作的工具的调用。对于 VS Code 聊天面板,请参阅[重新加载后继续对话](https://code.claude.com/docs/zh-CN/vs-code.md#continue-conversations-after-a-reload)。需要 Claude Code v2.1.309 或更高版本 |

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

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

373| `CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS` | 在设置了 `CLAUDE_CODE_RETRY_WATCHDOG` 且请求正在等待[用量限制](https://code.claude.com/docs/zh-CN/errors.md#youve-hit-your-session-limit)重置期间,检查该限制是否已提前解除的最小间隔(毫秒)。当检查发现限制已解除时,请求会立即发出。以纯数字给出从 `60000`(一分钟)到 `10800000`(三小时)之间的整数。仅在未使用使用额度时针对 claude.ai 订阅的会话限制或每周限制进行检查,并且在设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时不进行检查。当此变量未设置或其值超出该范围时,不进行任何检查。需要 Claude Code v2.1.305 或更高版本 |375| `CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS` | 在设置了 `CLAUDE_CODE_RETRY_WATCHDOG` 且请求正在等待[用量限制](https://code.claude.com/docs/zh-CN/errors.md#youve-hit-your-session-limit)重置期间,检查该限制是否已提前解除的最小间隔(毫秒)。当检查发现限制已解除时,请求会立即发出。以纯数字给出从 `60000`(一分钟)到 `10800000`(三小时)之间的整数。仅在未使用使用额度时针对 claude.ai 订阅的会话限制或每周限制进行检查,并且在设置了 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 时不进行检查。当此变量未设置或其值超出该范围时,不进行任何检查。需要 Claude Code v2.1.305 或更高版本 |

errors.md +39 −12

Details

146| `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) |146| `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) |

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

148| `Couldn't send feedback` | [网络](#couldnt-send-feedback) |148| `Couldn't send feedback` | [网络](#couldnt-send-feedback) |

149| `Feedback payload too large. Try again without the transcript, or shorten the details.` | [网络](#feedback-payload-too-large) |

149| `MCP server "<name>" connection timed out. Your computer went to sleep or its clock changed while connecting.` | [网络](#mcp-server-connection-timed-out-during-a-sleep-or-clock-change) |150| `MCP server "<name>" connection timed out. Your computer went to sleep or its clock changed while connecting.` | [网络](#mcp-server-connection-timed-out-during-a-sleep-or-clock-change) |

150| `Prompt is too long` / `Input is too long for requested model` | [请求错误](#prompt-is-too-long) |151| `Prompt is too long` / `Input is too long for requested model` | [请求错误](#prompt-is-too-long) |

151| `Prompt is too long · automatic compaction failed:` | [请求错误](#prompt-is-too-long) |152| `Prompt is too long · automatic compaction failed:` | [请求错误](#prompt-is-too-long) |


335| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [工具错误](#failed-to-write-to-a-teammate-inbox) |336| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [工具错误](#failed-to-write-to-a-teammate-inbox) |

336| `Its agent definition was not restored: the folder its definition file came from is not trusted` | [工具错误](#teammate-agent-definition-not-restored) |337| `Its agent definition was not restored: the folder its definition file came from is not trusted` | [工具错误](#teammate-agent-definition-not-restored) |

337| `Only a teammate can approve a shutdown request` | [工具错误](#only-a-teammate-can-approve-a-shutdown-request) |338| `Only a teammate can approve a shutdown request` | [工具错误](#only-a-teammate-can-approve-a-shutdown-request) |

339| `A command-line deny rule cannot be handed to a teammate intact` | [工具错误](#command-line-deny-rule-cannot-be-handed-to-a-teammate) |

338| `Message too large for cross-session delivery` | [工具错误](#message-too-large-for-cross-session-delivery) |340| `Message too large for cross-session delivery` | [工具错误](#message-too-large-for-cross-session-delivery) |

339| `Too many messages to this session just now` | [工具错误](#too-many-messages-to-this-session-just-now) |341| `Too many messages to this session just now` | [工具错误](#too-many-messages-to-this-session-just-now) |

340| `Cross-session message was dropped at the recipient session's inbox` | [工具错误](#cross-session-message-dropped-at-the-inbox) |342| `Cross-session message was dropped at the recipient session's inbox` | [工具错误](#cross-session-message-dropped-at-the-inbox) |


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

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

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

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

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

380| `kept <id> — worktree has commits that are not pushed anywhere` | [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere) |382| `kept <id> — worktree has commits that are not pushed anywhere` | [后台会话错误](#worktree-has-commits-that-are-not-pushed-anywhere) |

381| `terminal host process died — press Enter to restart` / `This session's terminal host process died` | [后台会话错误](#terminal-host-process-died) |383| `terminal host process died — press Enter to restart` / `This session's terminal host process died` | [后台会话错误](#terminal-host-process-died) |


2188 2190 

2189### Couldn't send feedback2191### Couldn't send feedback

2190 2192 

2191以 `Couldn't send feedback` 开头的消息表示您从 [`/feedback`、`/bug` 或 `/share` 对话框](https://code.claude.com/docs/zh-CN/commands#all-commands)提交的报告,或者已排队的[反馈草稿](https://code.claude.com/docs/zh-CN/tools-reference.md#sendfeedback-tool-behavior),未能发送。如果冒号之后是一句关于您组织的说明,则表示您的组织拒绝接收反馈,同一份报告再次发送也会得到相同的结果。2193以 `Couldn't send feedback` 开头的消息表示反馈服务未确认收到您从 [`/feedback`、`/bug` 或 `/share` 对话框](https://code.claude.com/docs/zh-CN/commands#all-commands)提交的报告,或者已排队的[反馈草稿](https://code.claude.com/docs/zh-CN/tools-reference.md#sendfeedback-tool-behavior)。请将其视为未收到。如果冒号之后是一句关于您组织的说明,则表示您的组织拒绝接收反馈,同一份报告再次发送也会得到相同的结果。

2192 2194 

2193以下两个示例中,第一个是网络故障,第二个是组织拒绝:2195以下两个示例中,第二个是组织拒绝:

2194 2196 

2195```text wrap theme={null}2197```text wrap theme={null}

2196Couldn't send feedback (couldn't reach the service). If it keeps failing, you can file at https://github.com/anthropics/claude-code/issues instead.2198Couldn't send feedback (couldn't reach the service). If it keeps failing, you can file at https://github.com/anthropics/claude-code/issues instead.


2203* **未登录**:消息后续为 `: not signed in. Run /login, then retry.`。请运行 `/login`,然后再次发送2205* **未登录**:消息后续为 `: not signed in. Run /login, then retry.`。请运行 `/login`,然后再次发送

2204* **您的组织拒绝**:例如 `: Feedback has not been enabled for your organization.` 或 `: Feedback collection is not available for organizations with custom data retention policies.`。如果消息附有 `To report a bug, open an issue`,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交 issue。已排队的草稿会保留在队列中,您可以[将其丢弃](https://code.claude.com/docs/zh-CN/tools-reference.md#discard-or-keep-a-draft)2206* **您的组织拒绝**:例如 `: Feedback has not been enabled for your organization.` 或 `: Feedback collection is not available for organizations with custom data retention policies.`。如果消息附有 `To report a bug, open an issue`,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交 issue。已排队的草稿会保留在队列中,您可以[将其丢弃](https://code.claude.com/docs/zh-CN/tools-reference.md#discard-or-keep-a-draft)

2205* **凭据被拒绝**:消息后续为 `: the sign-in this session uses is not allowed to send feedback` 或 `: the server did not accept the credentials this session uses`。请在 Claude Code 提示符处运行 `/status`,查看此会话发送的是哪个登录、令牌或 API 密钥2207* **凭据被拒绝**:消息后续为 `: the sign-in this session uses is not allowed to send feedback` 或 `: the server did not accept the credentials this session uses`。请在 Claude Code 提示符处运行 `/status`,查看此会话发送的是哪个登录、令牌或 API 密钥

2206* **紧跟在 `Couldn't send feedback` 之后的 `(request timed out)` 或 `(couldn't reach the service)`**:这些是网络故障。请再次发送报告或已排队的草稿。对话框会保留您的文本,已排队草稿的消息会显示 `The draft is still queued.`。如果其他请求也在失败,请检查您的网络连接,并参阅 [Unable to connect to API](#unable-to-connect-to-api)。如果持续失败,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交报告2208* **紧跟在 `Couldn't send feedback` 之后的 `(request timed out)` 或 `(couldn't reach the service)`**:请再次发送报告或已排队的草稿。对话框会保留您的文本,已排队草稿的消息会显示 `The draft is still queued.`。如果其他请求也在失败,请检查您的网络连接,并参阅 [Unable to connect to API](#unable-to-connect-to-api)。如果持续失败,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交报告

2207* **紧跟在 `Couldn't send feedback` 之后的 `(server returned <status>)`,或没有任何原因**:该状态码是服务的响应代码。如果服务发送了自己的消息,该消息会跟在状态码之后,例如 `(server returned 403: Access Forbidden)`。如果持续失败,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交报告2209* **紧跟在 `Couldn't send feedback` 之后的 `(server returned <status>)`,或没有任何原因**:该状态码是服务的响应代码。如果服务发送了自己的消息,该消息会跟在状态码之后,例如 `(server returned 403: Access Forbidden)`。如果持续失败,请在 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues) 提交报告

2208 2210 

2209github.com/anthropics/claude-code 上的 issue 是公开的,因此在提交时请勿包含代码、会话记录以及其他任何机密内容。2211github.com/anthropics/claude-code 上的 issue 是公开的,因此在提交时请勿包含代码、会话记录以及其他任何机密内容。

2210 2212 

2211在 v2.1.281 之前,如果在对话框打开期间收到了 Remote Control **Stop** 或紧急的跨会话消息,之后的每次发送都会以此消息失败。在这些版本上,请关闭对话框,重新打开,然后再次发送。2213在 v2.1.281 之前,如果在对话框打开期间收到了 Remote Control **Stop** 或紧急的跨会话消息,之后的每次发送都会以此消息失败。在这些版本上,请关闭对话框,重新打开,然后再次发送。

2212 2214 

2215### Feedback payload too large

2216 

2217在[反馈草稿](https://code.claude.com/docs/zh-CN/tools-reference.md#sendfeedback-tool-behavior)的[审阅界面](https://code.claude.com/docs/zh-CN/tools-reference.md#review-and-edit-a-draft)中出现此消息,表示 Claude Code 未收到服务已接受该草稿的确认。请将其视为未收到。该草稿会保留在您的 `/feedback` 队列中,因此您可以再次发送。

2218 

2219```text wrap theme={null}

2220Feedback payload too large. Try again without the transcript, or shorten the details.

2221```

2222 

2223**解决方法:**

2224 

2225* 在审阅界面中,将 **Send transcript** 设置为 `no`,然后再次发送该草稿。缩短详细信息最多只能减少 10 KB 文本,这已是草稿详细信息所能容纳的全部内容。

2226 

2213### 在睡眠或时钟更改期间 MCP 服务器连接超时2227### 在睡眠或时钟更改期间 MCP 服务器连接超时

2214 2228 

2215此消息表示与 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md)的连接超时,并且 Claude Code 发现您的系统时钟在尝试期间向前跳变:2229此消息表示与 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md)的连接超时,并且 Claude Code 发现您的系统时钟在尝试期间向前跳变:


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

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

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

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

3285 3299 

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

3287 3301 


3476 3490 

3477### MCP server rejected the elicitation capability3491### MCP server rejected the elicitation capability

3478 3492 

3479基于 Java MCP SDK 0.11.0 至 0.17.0 构建的 MCP 服务器拒绝了连接。这些 SDK 版本无法解析 Claude Code 在握手中声明的 `form` 和 `url` [elicitation 模式](https://code.claude.com/docs/zh-CN/mcp.md#elicitation-modes-claude-code-declares)。`claude mcp list` 会将该服务器显示为失败,并以此消息代替服务器自身的错误:3493一个基于 Java MCP SDK 0.11.0 至 0.17.0 构建的 MCP 服务器拒绝了连接。这些 SDK 版本无法解析 Claude Code 在握手中声明的 `form` 和 `url` [elicitation 模式](https://code.claude.com/docs/zh-CN/mcp.md#elicitation-modes-claude-code-declares)。消息为:

3480 3494 

3481```text theme={null}3495```text theme={null}

3482This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).3496This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).


3573 3587 

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

3575 3589 

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

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

3578* `No shell command in <name> was run`:该文件的某个 `!` 命令包含制表符或换行符以外的原始控制字符,因此所有命令都不会运行。请参阅[如何查找并删除该字符](#no-shell-command-was-run)3592* `No shell command in <name> was run`:文件中某个 `!` 命令包含制表符或换行符以外的原始控制字符,因此所有命令都不会运行。请参阅[如何找到并删除该字符](#no-shell-command-was-run)

3579 3593 

3580**解决方法:**3594**解决方法:**

3581 3595 


3725 3739 

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

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

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

3729 3743 

3730**解决方法:**3744**解决方法:**

3731 3745 


4678* 如果该队友仍在运行,请在负责人的输入框中要求它关闭该队友,例如 `Ask the researcher teammate to shut down`。请参阅[关闭队友](https://code.claude.com/docs/zh-CN/agent-teams.md#shut-down-teammates)。4692* 如果该队友仍在运行,请在负责人的输入框中要求它关闭该队友,例如 `Ask the researcher teammate to shut down`。请参阅[关闭队友](https://code.claude.com/docs/zh-CN/agent-teams.md#shut-down-teammates)。

4679* 如果您自己使用 `claude --resume` 恢复的前队友收到了此拒绝,则没有发送任何内容。如需结束该会话,请在其输入框中运行 `/exit`。4693* 如果您自己使用 `claude --resume` 恢复的前队友收到了此拒绝,则没有发送任何内容。如需结束该会话,请在其输入框中运行 `/exit`。

4680 4694 

4695### A command-line deny rule cannot be handed to a teammate intact

4696 

4697此消息表示 Claude Code 没有在您的 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 中启动[分屏](https://code.claude.com/docs/zh-CN/agent-teams.md#choose-a-display-mode)队友。Claude Code 会通过队友自己的命令行,将负责人的命令行拒绝规则传递给分屏队友;当队友对其中某条规则的解读会有所不同时,Claude Code 就会停止:

4698 

4699```text wrap theme={null}

4700A command-line deny rule cannot be handed to a teammate intact, so the teammate would not enforce it — spawn aborted

4701```

4702 

4703**处理方法:**

4704 

4705* 在负责人会话中运行 `/config`,将 **Teammate mode** 设置为 `in-process`,然后让 Claude 再次启动该队友。您无需找出该规则,也无需重新启动负责人。进程内队友[在负责人的实时拒绝规则下运行](https://code.claude.com/docs/zh-CN/agent-teams.md#permissions)。

4706* 之后从您的用户设置中读取 [`teammateMode`](https://code.claude.com/docs/zh-CN/settings-reference#teammatemode) 的会话也会以进程内方式启动队友,因为 `/config` 会将该选择保存在那里。如需在之后的会话中改回分屏,请将 **Teammate mode** 设置为 `auto`、`tmux` 或 `iterm2`,即您之前使用的那一项。

4707 

4681### Message too large for cross-session delivery4708### Message too large for cross-session delivery

4682 4709 

4683Claude 发给您在这台机器上另一个会话的[跨会话消息](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)太长,无法发送。Claude Code 拒绝了它,接收会话什么也没收到。该拒绝出现在发送会话的工具结果中,而不是在您的终端中以横幅形式显示。它会给出两个大小,以及如何让消息符合限制:4710Claude 发给您在这台机器上另一个会话的[跨会话消息](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)太长,无法发送。Claude Code 拒绝了它,接收会话什么也没收到。该拒绝出现在发送会话的工具结果中,而不是在您的终端中以横幅形式显示。它会给出两个大小,以及如何让消息符合限制:


5115**要做什么:**5142**要做什么:**

5116 5143 

5117* 要保留提交,推送 worktree 的分支,或将其合并到在主检出中检出的默认分支,然后再次删除会话5144* 要保留提交,推送 worktree 的分支,或将其合并到在主检出中检出的默认分支,然后再次删除会话

5118* 要丢弃提交,运行消息打印的 `claude rm <id> --discard-unpushed` 命令,或在 Agent 视图中的会话行上再次按 `Ctrl+X` 两次。这会删除会话和 worktree 以及其分支、未推送的提交和任何未提交的更改。如果 worktree 自拒绝以来获得了提交,Claude Code 再次保留它并显示更新的状态5145* 要丢弃提交,运行消息打印的 `claude rm <id> --discard-unpushed` 命令,或在 Agent 视图中的会话行上再次按 `Ctrl+X` 两次。这会删除会话和 worktree 以及其分支、未推送的提交和任何未提交的更改。如果删除再次被拒绝,请按照新消息操作。

5119* 当消息说 worktree 也由另一个完成的会话记录时,再次删除不会丢弃它:推送提交,然后再次删除会话5146* 当消息说 worktree 也由另一个完成的会话记录时,再次删除不会丢弃它:推送提交,然后再次删除会话

5120 5147 

5121在 v2.1.268 之前,`claude rm` 将提交摘要放在 `kept` 行本身上。当 `claude rm` 无法总结提交时,`kept` 行读取 `worktree has commits that are not pushed anywhere` 代替摘要。5148在 v2.1.268 之前,`claude rm` 将提交摘要放在 `kept` 行本身上。当 `claude rm` 无法总结提交时,`kept` 行读取 `worktree has commits that are not pushed anywhere` 代替摘要。

5122 5149 

5123在 v2.1.260 之前,消息没有命名分支或提交,再次删除被拒绝的方式相同:删除会话而不推送意味着使用 `git worktree remove --force <path>` 自己删除 worktree,然后再次运行 `claude rm <id>`。5150在 v2.1.260 之前,消息没有命名分支或提交,也没有丢弃途径。您仍然可以删除会话,这会丢失未提交的更改,但保留分支和提交。使用拒绝消息打印的路径运行 `git worktree remove --force --force <path>`,然后运行 `claude rm <id>`。对于已锁定的 worktree,Git 需要两次 `--force`。

5124 5151 

5125在 v2.1.248 之前,在主检出中检出的默认分支不计数:您已经合并到那里的分支仍然触发此拒绝,直到其提交到达远程。5152在 v2.1.248 之前,在主检出中检出的默认分支不计数:您已经合并到那里的分支仍然触发此拒绝,直到其提交到达远程。

5126 5153 

fast-mode.md +2 −2

Details

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

46* 随时再次运行 `/fast` 以检查快速模式是否打开或关闭46* 随时再次运行 `/fast` 以检查快速模式是否打开或关闭

47 47 

48Opus 5.5 是 Claude Code v2.1.280 及更高版本中的快速模式默认值。在 v2.1.280 之前,快速模式自 v2.1.219 起默认为 Opus 5,在 v2.1.154 到 v2.1.218 版本中默认为 Opus 4.8。48Opus 5.5 是 Claude Code v2.1.280 及更高版本中的快速模式默认值。在 v2.1.280 之前,快速模式自 v2.1.219 起默认为 Opus 5。

49 49 

50当您再次使用 `/fast` 禁用快速模式时,您仍然保持在 Opus 上。要切换到不同的模型,请使用 `/model`。50当您再次使用 `/fast` 禁用快速模式时,您仍然保持在 Opus 上。要切换到不同的模型,请使用 `/model`。

51 51 


58 58 

59每当模型切换打开或关闭快速模式时,Claude Code 都会显示 `Fast mode ON` 或 `Fast mode OFF` 确认,`↯` 图标在快速模式打开时出现。无论您使用 `/model`、[`/config model=<model>`](https://code.claude.com/docs/zh-CN/settings) 切换,还是从通过[远程控制](https://code.claude.com/docs/zh-CN/remote-control.md)连接的设备切换,这都适用。59每当模型切换打开或关闭快速模式时,Claude Code 都会显示 `Fast mode ON` 或 `Fast mode OFF` 确认,`↯` 图标在快速模式打开时出现。无论您使用 `/model`、[`/config model=<model>`](https://code.claude.com/docs/zh-CN/settings) 切换,还是从通过[远程控制](https://code.claude.com/docs/zh-CN/remote-control.md)连接的设备切换,这都适用。

60 60 

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

62 62 

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

64 64 

glossary.md +1 −1

Details

373 373 

374一个会话知道工作实际完成而不仅仅是看起来合理的方式。您给 Claude 一个它可以运行的检查,例如测试套件、构建或屏幕截图比较,Claude 迭代直到检查通过,而不是在一次尝试后停止。验证循环是 [`/goal`](https://code.claude.com/docs/zh-CN/goal)、无人值守运行和[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md)的前提条件:没有它,唯一决定 Agent 是否完成的就是 Agent 本身。374一个会话知道工作实际完成而不仅仅是看起来合理的方式。您给 Claude 一个它可以运行的检查,例如测试套件、构建或屏幕截图比较,Claude 迭代直到检查通过,而不是在一次尝试后停止。验证循环是 [`/goal`](https://code.claude.com/docs/zh-CN/goal)、无人值守运行和[动态工作流](https://code.claude.com/docs/zh-CN/workflows.md)的前提条件:没有它,唯一决定 Agent 是否完成的就是 Agent 本身。

375 375 

376了解更多:[给 Claude 一种验证其工作的方式](https://code.claude.com/docs/zh-CN/best-practices.md#give-claude-a-way-to-verify-its-work)376了解更多:[给 Claude 一个可以运行的检查](https://code.claude.com/docs/zh-CN/best-practices.md#give-claude-a-check-to-run)

377 377 

378## W378## W

379 379 

Details

166| 主模型 | `claude-opus-5-5` |166| 主模型 | `claude-opus-5-5` |

167| 小型/快速模型 | `claude-sonnet-4-5@20250929` |167| 小型/快速模型 | `claude-sonnet-4-5@20250929` |

168 168 

169在 v2.1.280 之前,Google Cloud 的 Agent Platform 上的主模型默认为 Opus 5,`opus` 别名从 v2.1.219 起解析为 Opus 5。

170 

169后台任务(如会话标题生成)使用小型/快速模型,通常是 Haiku 级别的模型。在 Google Cloud 的 Agent Platform 上,Claude Code 为后台任务使用默认的 Sonnet 模型,因为 Haiku 可能不会在每个项目或区域中启用。两个选择会改变哪个模型执行这些任务:171后台任务(如会话标题生成)使用小型/快速模型,通常是 Haiku 级别的模型。在 Google Cloud 的 Agent Platform 上,Claude Code 为后台任务使用默认的 Sonnet 模型,因为 Haiku 可能不会在每个项目或区域中启用。两个选择会改变哪个模型执行这些任务:

170 172 

171* 当您使用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置选择主模型时,后台任务使用该模型。当 Claude Code 在您使用 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/zh-CN/model-config#set-a-default-model-for-new-sessions) 设置的模型上启动会话时,后台任务也使用该模型。设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 而不设置 `ANTHROPIC_DEFAULT_SONNET_MODEL` 也算作一个选择,因为内置的 Sonnet 模型可能在引导自己的 Opus 的项目中未启用。173* 当您使用 `--model`、`ANTHROPIC_MODEL` 或 `model` 设置选择主模型时,后台任务使用该模型。当 Claude Code 在您使用 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/zh-CN/model-config#set-a-default-model-for-new-sessions) 设置的模型上启动会话时,后台任务也使用该模型。设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 而不设置 `ANTHROPIC_DEFAULT_SONNET_MODEL` 也算作一个选择,因为内置的 Sonnet 模型可能在引导自己的 Opus 的项目中未启用。


175>177>

176> Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署会保持其引导的 Sonnet 模型作为默认值。178> Opus 模型的每 token 价格高于 Sonnet 模型,因此如果您不固定主模型,将按 Opus 费率计费。要将 Sonnet 4.5 用作主模型,请将 `ANTHROPIC_MODEL` 设置为其完整模型 ID。使用 `ANTHROPIC_DEFAULT_SONNET_MODEL` 引导默认值且不设置 `ANTHROPIC_DEFAULT_OPUS_MODEL` 的部署会保持其引导的 Sonnet 模型作为默认值。

177 179 

178在 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。

179 

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

181 181 

182```bash theme={null}182```bash theme={null}

headless.md +4 −3

Details

236 236 

237如果流中缺少其中某些消息,请将您的 Claude Code 版本与以下最低版本进行对照:237如果流中缺少其中某些消息,请将您的 Claude Code 版本与以下最低版本进行对照:

238 238 

239* **在每个嵌套深度转发**:v2.1.219 或更高版本

240* **Claude 从主对话使用 Skill 工具启动的 forked skill**:其 `tool_use` 和 `tool_result` 块需要 v2.1.86 或更高版本,其第一条 `user` 消息以及文本和思考块需要 v2.1.265 或更高版本239* **Claude 从主对话使用 Skill 工具启动的 forked skill**:其 `tool_use` 和 `tool_result` 块需要 v2.1.86 或更高版本,其第一条 `user` 消息以及文本和思考块需要 v2.1.265 或更高版本

241* **forked skill 生成的子代理的消息,以及在子代理或另一个 forked skill 内启动的 forked skill 的消息**:v2.1.275 或更高版本240* **forked skill 生成的子代理的消息,以及在子代理或另一个 forked skill 内启动的 forked skill 的消息**:v2.1.275 或更高版本

242* **通过将 `/<skill-name>` 作为提示词传递而启动的 forked skill 的消息**:v2.1.287 或更高版本241* **通过将 `/<skill-name>` 作为提示词传递而启动的 forked skill 的消息**:v2.1.287 或更高版本


285| 字段 | 类型 | 描述 |284| 字段 | 类型 | 描述 |

286| - | - | - |285| - | - | - |

287| `mcp_servers` | 数组 | 会话中的 MCP 服务器,每个都有 `name` 和 `status` |286| `mcp_servers` | 数组 | 会话中的 MCP 服务器,每个都有 `name` 和 `status` |

288| `mcp_server_errors` | 数组 | 被配置验证跳过的 `--mcp-config` 条目,每个都有 `name`、`type` 和 `message`。`type` 是跳过类别,例如 `unknown_type`、`url_missing_type`、`invalid_config` 或 `reserved_name`;将您不认识的值视为通用跳过。受影响的服务器不会出现在 `mcp_servers` 中。当没有错误时,该键被省略,因此 CI 门可以在数组非空时失败。需要 Claude Code v2.1.219 或更高版本 |287| `mcp_server_errors` | 数组 | 被配置验证跳过的 `--mcp-config` 条目,每个都有 `name`、`type` 和 `message`。`type` 是跳过类别,例如 `unknown_type`、`url_missing_type`、`invalid_config` 或 `reserved_name`;将您不认识的值视为通用跳过。受影响的服务器不会出现在 `mcp_servers` 中。当没有错误时,该键被省略,因此 CI 门可以在数组非空时失败 |

289 288 

290当您在终端中手动运行命令时,Claude Code 也会向 stderr 打印启动警告,例如 `Warning: 1 MCP server skipped due to invalid config:`,后跟每个跳过条目的原因。当您重定向 stderr 或当 CI 运行器或 SDK 主机等程序捕获它时,Claude Code 不打印警告,仅在 `mcp_server_errors` 字段中报告跳过的条目。警告需要 Claude Code v2.1.219 或更高版本。289当您在终端中手动运行命令时,Claude Code 也会向 stderr 打印启动警告,例如 `Warning: 1 MCP server skipped due to invalid config:`,后跟每个跳过条目的原因。

290 

291当您重定向 stderr,或当 CI 运行器或 SDK 主机等程序捕获它时,Claude Code 不打印警告。它仅在 `mcp_server_errors` 字段中报告跳过的条目。

291 292 

292#### 跟踪插件安装293#### 跟踪插件安装

293 294 

hooks.md +5 −9

Details

679 679 

680项目技能中的 Frontmatter hooks 遵循与设置文件中的 hooks 相同的 [工作区信任规则](#workspace-trust)。Claude Code 在您或 Claude 调用技能时注册它们,包括在您未信任的文件夹中的 `-p` 运行。680项目技能中的 Frontmatter hooks 遵循与设置文件中的 hooks 相同的 [工作区信任规则](#workspace-trust)。Claude Code 在您或 Claude 调用技能时注册它们,包括在您未信任的文件夹中的 `-p` 运行。

681 681 

682项目子代理中的 Frontmatter hooks 仅在您接受代理文件来自的文件夹的 [工作区信任对话](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust) 后运行。`-p` 会话不计为接受它。[在您信任文件夹前运行的内容](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder) 将此与设置文件规则进行比较,subagents 页面列出 [哪些范围被豁免](https://code.claude.com/docs/zh-CN/sub-agents.md#hooks-in-subagent-frontmatter)。在 v2.1.218 之前,这些 hooks 可以从您未信任的文件夹运行。682项目子代理中的 frontmatter hook 仅在您接受 Agent 文件所在文件夹的 [工作区信任对话框](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust) 后运行。`-p` 会话不算作接受。[在您信任文件夹前运行的内容](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder) 将此与设置文件规则进行比较,子代理页面列出了 [哪些作用域被豁免](https://code.claude.com/docs/zh-CN/sub-agents.md#hooks-in-subagent-frontmatter)。

683 683 

684#### skill hook 的限制684#### skill hook 的限制

685 685 


3195* **命令 hook**(`type: "command"`):将路径作为 stdout 的最后一个非空行打印。Claude Code 在读取该行之前会去除 ANSI 转义码,因此在您的 `echo` 之前打印的 shell 启动横幅会被忽略。请将其他所有 hook 输出重定向到 stderr。3195* **命令 hook**(`type: "command"`):将路径作为 stdout 的最后一个非空行打印。Claude Code 在读取该行之前会去除 ANSI 转义码,因此在您的 `echo` 之前打印的 shell 启动横幅会被忽略。请将其他所有 hook 输出重定向到 stderr。

3196* **HTTP hook**(`type: "http"`):在响应正文中返回 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`。3196* **HTTP hook**(`type: "http"`):在响应正文中返回 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`。

3197 3197 

3198如果 hook 失败或未生成路径,worktree 创建将失败并报错。3198如果 hook 失败或未生成路径,worktree 创建将失败并报错。Claude Code 会相对于 hook 运行时所在的目录解析相对路径,并折叠其中的 `.` 或 `..` 片段。如果得到的路径不是 Claude Code 可以进入的目录,会话会打印一条指明该路径的错误,并以代码 1 退出。

3199 3199 

3200Claude Code 会相对于 hook 运行时所在的目录解析相对路径,并折叠其中的任何 `.` 或 `..` 片段。如果得到的路径不是 Claude Code 可以进入的目录,会话会打印一条指明该路径的错误,并以代码 1 退出。3200Claude Code 会拒绝包含 `.` 或 `..` 片段的绝对路径,以及任何经过仓库根目录下符号链接的路径。错误信息会指明被拒绝的组成部分。提交到仓库中的符号链接可能会将 worktree 重定向到仓库之外。请返回一个不经过仓库内符号链接的规范化路径。

3201 

3202Claude Code 会拒绝包含 `.` 或 `..` 片段的绝对路径,以及任何经过仓库根目录下符号链接的路径,因为提交到仓库中的符号链接可能会将 worktree 重定向到仓库之外。错误会指明被拒绝的组成部分。请返回一个不经过仓库内符号链接的规范化路径。在 v2.1.216 之前,worktree 创建会直接使用 hook 的路径,不进行此项检查。

3203 3201 

3204### WorktreeRemove3202### WorktreeRemove

3205 3203 


3227* **Hook 以 0 退出**:worktree 被视为已删除。Claude Code 不会从 hook 读取其他任何内容,因此请确保您的 hook 已删除该目录。3225* **Hook 以 0 退出**:worktree 被视为已删除。Claude Code 不会从 hook 读取其他任何内容,因此请确保您的 hook 已删除该目录。

3228* **Hook 以非零退出**:如果之后 `worktree_path` 处的目录仍然存在,则删除失败,worktree 保留在磁盘上,且不会回退到 git。在以非零退出之前已删除目录的 hook 被视为已删除。有关如何报告该失败,请参阅 [WorktreeRemove 输入](#worktreeremove-input)。3226* **Hook 以非零退出**:如果之后 `worktree_path` 处的目录仍然存在,则删除失败,worktree 保留在磁盘上,且不会回退到 git。在以非零退出之前已删除目录的 hook 被视为已删除。有关如何报告该失败,请参阅 [WorktreeRemove 输入](#worktreeremove-input)。

3229 3227 

3230Claude Code 从不删除属于由 hook 创建的 worktree 的分支,因为它只知道您的 WorktreeCreate hook 返回的路径。如果您的 WorktreeCreate hook 创建了分支,请在 WorktreeRemove hook 中将其删除。3228Claude Code 从不删除属于 hook 创建的 worktree 的分支,因为它只知道您的 WorktreeCreate hook 返回的路径。如果您的 WorktreeCreate hook 创建了分支,请在 WorktreeRemove hook 中将其删除。Claude Code 会丢弃 WorktreeRemove hook 的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。

3231 

3232Claude Code 会丢弃 WorktreeRemove hook 的 [JSON 输出字段](#json-output),例如 `systemMessage` 和 `continue`。

3233 3229 

3234对于删除后台会话的情况,Claude Code 会在运行 hook 之前验证存储的 worktree 路径,并拒绝本身是符号链接或经过仓库根目录下符号链接的路径。在该路径上,只有当您在 [Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md#what-deleting-a-session-removes)中确认删除时,hook 才会针对仍包含文件的 worktree 运行;对于此类 worktree,[`claude rm`](https://code.claude.com/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 会改为保留会话和 worktree。在 v2.1.216 之前,hook 会在未经这些检查的情况下针对存储的路径运行。3230对于后台会话删除,Claude Code 会在运行 hook 之前验证存储的 worktree 路径,拒绝本身是符号链接或经过仓库根目录下符号链接的路径。在该途径上,只有当您在 [Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md#what-deleting-a-session-removes)中确认删除时,hook 才会针对仍包含文件的 worktree 运行。对于此类 worktree,[`claude rm`](https://code.claude.com/docs/zh-CN/agent-view#manage-sessions-from-the-shell) 则会保留会话和 worktree。

3235 3231 

3236Claude Code 会将 WorktreeCreate 返回的路径作为 hook 输入中的 `worktree_path` 传递。此示例读取该路径并删除目录:3232Claude Code 会将 WorktreeCreate 返回的路径作为 hook 输入中的 `worktree_path` 传递。此示例读取该路径并删除目录:

3237 3233 

Details

174 174 

175## 有效使用 Claude Code175## 有效使用 Claude Code

176 176 

177这些提示可以帮助您从 Claude Code 获得更好的结果。有关特定提示、验证和规划的更多信息,请参阅[最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md)。177这些提示可以帮助您从 Claude Code 获得更好的结果。有关具体提示词、验证,以及哪些规则值得强制执行而非通过提示词要求的更多信息,请参阅[最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md)。

178 178 

179### 向 Claude Code 寻求帮助179### 向 Claude Code 寻求帮助

180 180 

Details

92| `/` 在开始 | 命令或 skill | 请参阅[命令](#commands)和[skills](https://code.claude.com/docs/zh-CN/skills.md) |92| `/` 在开始 | 命令或 skill | 请参阅[命令](#commands)和[skills](https://code.claude.com/docs/zh-CN/skills.md) |

93| `!` 在开始 | Shell 模式 | 直接运行命令,将其输出添加到会话,并让 Claude 对其进行响应 |93| `!` 在开始 | Shell 模式 | 直接运行命令,将其输出添加到会话,并让 Claude 对其进行响应 |

94| `@` | 文件路径提及 | 触发文件路径自动完成。在具有[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#message-another-session)的会话中,当您在 `@` 后键入至少一个字母时,Claude Code 也会建议您在此机器上的其他实时会话,以便您可以告诉 Claude 向您选择的会话发送消息。需要 Claude Code v2.1.232 或更高版本 |94| `@` | 文件路径提及 | 触发文件路径自动完成。在具有[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#message-another-session)的会话中,当您在 `@` 后键入至少一个字母时,Claude Code 也会建议您在此机器上的其他实时会话,以便您可以告诉 Claude 向您选择的会话发送消息。需要 Claude Code v2.1.232 或更高版本 |

95| `:` | 表情符号简码 | 键入完整的 `:name:` 以插入表情符号,或键入两个或更多字符以获取建议。请参阅[表情符号简码](#emoji-shortcodes)。需要 Claude Code v2.1.217 或更高版本 |95| `:` | 表情符号简码 | 键入完整的 `:name:` 以插入表情符号,或键入两个或更多字符以获取建议。请参阅[表情符号简码](#emoji-shortcodes) |

96| `?` 在空输入上 | 切换快捷键帮助面板 | 当输入已包含文本时键入 `?` 会插入该字符 |96| `?` 在空输入上 | 切换快捷键帮助面板 | 当输入已包含文本时键入 `?` 会插入该字符 |

97 97 

98### 记录查看器98### 记录查看器


197 197 

198> [!NOTE]198> [!NOTE]

199>199>

200> 在 vim NORMAL 模式中,如果光标在输入的开始或结束处且无法进一步移动,`j`/`k` 和 `↑`/`↓` 会导航命令历史。在空提示符上按 `←` 也会从 NORMAL 模式和 INSERT 模式打开[代理视图](https://code.claude.com/docs/zh-CN/agent-view.md);在 v2.1.219 之前,在空提示符上按 `←` 在 NORMAL 模式下不执行任何操作。200> 在 vim NORMAL 模式中,如果光标在输入的开始或结束处且无法进一步移动,`j`/`k` 和 `↑`/`↓` 会改为导航命令历史。在空输入框上按 `←` 会打开 [Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md),在 NORMAL 模式和 INSERT 模式下均适用。

201 201 

202### 编辑(NORMAL 模式)202### 编辑(NORMAL 模式)

203 203 


396Claude Code 在您发送某些命令时立即运行它们,而不是排队它们,其中包括 `/model`、`/effort` 和 `/fast`。这三个命令各改变一个设置:模型、effort 级别或快速模式。Claude Code 是将新设置应用于 Claude 已在处理的轮次,还是仅从您的下一轮次应用,因命令而异:396Claude Code 在您发送某些命令时立即运行它们,而不是排队它们,其中包括 `/model`、`/effort` 和 `/fast`。这三个命令各改变一个设置:模型、effort 级别或快速模式。Claude Code 是将新设置应用于 Claude 已在处理的轮次,还是仅从您的下一轮次应用,因命令而异:

397 397 

398* [`/model`](https://code.claude.com/docs/zh-CN/model-config#setting-your-model):一旦您确认[缓存警告](https://code.claude.com/docs/zh-CN/prompt-caching.md#switching-models)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求398* [`/model`](https://code.claude.com/docs/zh-CN/model-config#setting-your-model):一旦您确认[缓存警告](https://code.claude.com/docs/zh-CN/prompt-caching.md#switching-models)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求

399* [`/effort`](https://code.claude.com/docs/zh-CN/model-config#adjust-effort-level):一旦您确认[缓存警告](https://code.claude.com/docs/zh-CN/prompt-caching.md#changing-effort-level)(如果 Claude Code 显示),Claude Code 会将您的更改应用于该轮次中它发出的下一个请求399* `/effort`:您发送的下一条消息将以新级别运行。要[在 Claude 已在处理的轮次中启用新级别](https://code.claude.com/docs/zh-CN/model-config.md#when-a-new-effort-level-starts),请在 Claude 运行工具调用时排队一条消息

400* [`/fast`](https://code.claude.com/docs/zh-CN/fast-mode#toggle-fast-mode):Claude Code 保持轮次开始时活跃的快速模式设置,因此您的速度更改从您的下一轮次应用。如果您当前的模型不支持快速模式,打开它也会[切换您的模型](https://code.claude.com/docs/zh-CN/prompt-caching.md#turning-on-fast-mode),Claude Code 会在该轮次中从其下一个请求使用新模型400* [`/fast`](https://code.claude.com/docs/zh-CN/fast-mode#toggle-fast-mode):Claude Code 保持轮次开始时活跃的快速模式设置,因此您的速度更改从您的下一轮次应用。如果您当前的模型不支持快速模式,打开它也会[切换您的模型](https://code.claude.com/docs/zh-CN/prompt-caching.md#turning-on-fast-mode),Claude Code 会在该轮次中从其下一个请求使用新模型

401 401 

402### 在有排队消息时将会话转入后台402### 在有排队消息时将会话转入后台


513 513 

514## 表情符号速记代码514## 表情符号速记代码

515 515 

516在提示输入中输入 `:` 后跟表情符号速记代码来插入表情符号。需要 Claude Code v2.1.217 或更高版本。516在提示词输入框中输入 `:` 后跟表情符号速记代码来插入表情符号。

517 517 

518* 输入完整的速记代码,例如 `:heart:`,Claude Code 会在您输入结束的 `:` 时立即将其替换为 ❤️518* 输入完整的速记代码,例如 `:heart:`,Claude Code 会在您输入结束的 `:` 时立即将其替换为 ❤️

519* 输入 `:` 加上名称的至少两个字符,例如 `:hea`,打开建议弹出窗口,然后按 `Tab` 或 `Enter` 插入突出显示的表情符号519* 输入 `:` 加上名称的至少两个字符,例如 `:hea`,打开建议弹出窗口,然后按 `Tab` 或 `Enter` 插入突出显示的表情符号

Details

31 31 

32> [!TIP]32> [!TIP]

33>33>

34> 有关在任何存储库中保持上下文较小的工作流技术,例如[在子代理中运行探索](https://code.claude.com/docs/zh-CN/best-practices.md#use-subagents-for-investigation)以使文件读取不会进入主对话,请参阅 [Claude Code 的最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md)。要向组织中的每个开发者推出基线配置,请参阅[为你的组织设置 Claude Code](https://code.claude.com/docs/zh-CN/admin-setup.md)。34> 有关在任何仓库中保持上下文较小的工作流技术,请参阅 [Claude Code 的最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md)。一个例子是[在子代理中运行探索](https://code.claude.com/docs/zh-CN/best-practices.md#know-what-subagents-cost),以使文件读取不会进入主对话。要向组织中的每个开发者推出基线配置,请参阅[为您的组织设置 Claude Code](https://code.claude.com/docs/zh-CN/admin-setup.md)。

35 35 

36### 示例 monorepo36### 示例 monorepo

37 37 


158拒绝规则可以覆盖在存储库中工作的每个人、仅你自己或机器上的每个会话,具体取决于你将它们放在哪个设置文件中:158拒绝规则可以覆盖在存储库中工作的每个人、仅你自己或机器上的每个会话,具体取决于你将它们放在哪个设置文件中:

159 159 

160* **在存储库中工作的每个人**:将规则提交到 `.claude/settings.json`,位于存储库根目录(如果你从那里启动 Claude),或位于每个包的 `.claude/`(如果你从子目录启动)。与本页面的其他项目设置一样,该文件不会从父目录继承。160* **在存储库中工作的每个人**:将规则提交到 `.claude/settings.json`,位于存储库根目录(如果你从那里启动 Claude),或位于每个包的 `.claude/`(如果你从子目录启动)。与本页面的其他项目设置一样,该文件不会从父目录继承。

161* **仅你自己**:使用位于存储库根目录的 `.claude/settings.local.json`,它在存储库内的每个 CLI 会话中加载,无论启动目录如何,除了 Claude Code [不使用存储库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的情况,例如在 Windows 上。相对模式(如示例中的 `Read(./**/vendor/**/*)`)仍然[锚定在会话的当前工作目录](https://code.claude.com/docs/zh-CN/permissions.md#read-and-edit)而不是存储库根目录,所以如果你从子目录启动会话,请在此文件中将规则写为 `//` 绝对路径,例如 `Read(//absolute/path/to/repo/**/vendor/**/*)`。在 v2.1.211 之前,`.claude/settings.local.json` 也仅从启动目录加载。161* **仅您自己**:使用位于仓库根目录的 `.claude/settings.local.json`。它在仓库内的每个 CLI 会话中加载,无论启动目录如何,除了 Claude Code [不使用仓库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的情况,例如在 Windows 上。

162 

163 相对模式(如示例中的 `Read(./**/vendor/**/*)`)仍然[锚定在会话的当前工作目录](https://code.claude.com/docs/zh-CN/permissions.md#read-and-edit)而不是仓库根目录。如果您从子目录启动会话,请在此文件中将规则写为 `//` 绝对路径,例如 `Read(//absolute/path/to/repo/**/vendor/**/*)`。

162* **每个人,在每个会话中强制执行**:在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置规则,用户和项目设置无法覆盖。164* **每个人,在每个会话中强制执行**:在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置规则,用户和项目设置无法覆盖。

163 165 

164下面的示例阻止构建工件和供应商 SDK。其目录模式以 `/**/*` 而不是 `/**` 结尾,以便每个规则覆盖目录内的所有内容,但不覆盖目录本身。Claude 仍然可以列出这些目录或进入它们,例如使用 `ls dist` 或 `cd build`。166下面的示例阻止构建工件和供应商 SDK。其目录模式以 `/**/*` 而不是 `/**` 结尾,以便每个规则覆盖目录内的所有内容,但不覆盖目录本身。Claude 仍然可以列出这些目录或进入它们,例如使用 `ls dist` 或 `cd build`。


376将约定和参考内容从始终加载的 CLAUDE.md 移出到按需加载的机制中:378将约定和参考内容从始终加载的 CLAUDE.md 移出到按需加载的机制中:

377 379 

378* [Skills](https://code.claude.com/docs/zh-CN/skills.md):Claude 仅在与任务相关时加载的参考材料380* [Skills](https://code.claude.com/docs/zh-CN/skills.md):Claude 仅在与任务相关时加载的参考材料

379* [Plugins](https://code.claude.com/docs/zh-CN/plugins/overview.md):平台团队集中拥有的 skills、hooks 和命令的版本化包381* [插件](https://code.claude.com/docs/zh-CN/plugins/overview.md):由 skill、hook 和命令组成的版本化包,由平台团队集中拥有,并可[通过托管设置为所有人安装](https://code.claude.com/docs/zh-CN/plugins/org.md#pre-install-and-require-plugins)

380* [MCP servers](https://code.claude.com/docs/zh-CN/mcp.md):如果你的组织已经在存储库上运行代码搜索或 RAG 索引,将其公开为 MCP 工具,以便 Claude 查询它而不是直接读取文件382* [MCP servers](https://code.claude.com/docs/zh-CN/mcp.md):如果你的组织已经在存储库上运行代码搜索或 RAG 索引,将其公开为 MCP 工具,以便 Claude 查询它而不是直接读取文件

381 383 

382有关平台团队如何集中强制这些的信息,请参阅[服务器管理或端点管理的设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md#choose-between-server-managed-and-endpoint-managed-settings)。384有关平台团队如何集中强制这些的信息,请参阅[服务器管理或端点管理的设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md#choose-between-server-managed-and-endpoint-managed-settings)。


465两种技术帮助保持跨包更改的一致性:467两种技术帮助保持跨包更改的一致性:

466 468 

467* **在一个会话中给 Claude 整个更改**:将共享编辑及其调用站点一起交付保持每个编辑背后的决策一致,而不是按包重新推导它们469* **在一个会话中给 Claude 整个更改**:将共享编辑及其调用站点一起交付保持每个编辑背后的决策一致,而不是按包重新推导它们

468* **在编辑前计划**:[先计划](https://code.claude.com/docs/zh-CN/best-practices.md#explore-first-then-plan-then-code)在 [plan mode](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode) 中,Claude 将计划写入文件。长的跨包会话[在进行中压缩其上下文](https://code.claude.com/docs/zh-CN/context-window.md#what-survives-compaction)。Claude Code 在每次压缩后重新注入计划文件,所以计划在对话历史可能不会的地方幸存470* **在编辑前计划**:先在[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode)中进行计划,Claude 会将计划写入文件。长的跨包会话会在进行过程中[压缩其上下文](https://code.claude.com/docs/zh-CN/context-window.md#what-survives-compaction)。Claude Code 在每次压缩后重新注入计划文件,因此即使对话历史可能无法保留,计划也能保留下来

469 471 

470## 后续步骤472## 后续步骤

471 473 

Details

361 361 

362网关承载模型请求,但 Claude Code 也向网关路径外发送非必要的后台流量,发送到 Anthropic 和第三方服务(如 GitHub):版本检查、遥测、发行说明和类似请求。在仅允许出站到网关的网络上,这些请求失败,并可能在您的出站监控中显示为被阻止的连接。362网关承载模型请求,但 Claude Code 也向网关路径外发送非必要的后台流量,发送到 Anthropic 和第三方服务(如 GitHub):版本检查、遥测、发行说明和类似请求。在仅允许出站到网关的网络上,这些请求失败,并可能在您的出站监控中显示为被阻止的连接。

363 363 

364Claude Code 仅在请求发送到凭证所属的主机时才将凭证附加到遥测或使用指标请求。当 `ANTHROPIC_BASE_URL` 指向网关时,Claude Code 将其遥测事件发送到 Anthropic,不使用您的网关凭证。使用[凭证变量](#set-the-credential-variable)或 `apiKeyHelper` 时,Claude Code 不会向控制台[分析仪表板](https://code.claude.com/docs/zh-CN/analytics.md#access-analytics-for-api-customers)报告使用指标。在 v2.1.246 之前,Claude Code 可能会将网关凭证附加到发往 Anthropic 主机的遥测和使用指标请求;模型请求始终使用网关期望的凭证发送到网关。

365 

366要关闭该流量,请在与网关变量相同的 shell 导出或设置文件 `env` 块中设置 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`:364要关闭该流量,请在与网关变量相同的 shell 导出或设置文件 `env` 块中设置 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`:

367 365 

368**Bash or Zsh**366**Bash or Zsh**

mcp.md +8 −2

Details

84 84 

85只有 SDK 主机应用程序(例如 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md) 应用程序或 [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))可以注册进程内 `"type": "sdk"` 服务器。Claude Code 跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。85只有 SDK 主机应用程序(例如 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/mcp.md) 应用程序或 [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md))可以注册进程内 `"type": "sdk"` 服务器。Claude Code 跳过 `.mcp.json`、`~/.claude.json` 或设置中的 `"type": "sdk"` 条目,并报告 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`。

86 86 

87在 `--output-format stream-json` 运行中,Claude Code 还在 `system/init` 事件的 [`mcp_server_errors` 字段](https://code.claude.com/docs/zh-CN/headless#stream-responses) 中报告跳过的 `--mcp-config` 条目,以便脚本可以检测到服务器从未加载。这需要 Claude Code v2.1.219 或更高版本。87> [!NOTE]

88>

89> 在 `--output-format stream-json` 运行中,Claude Code 还会在 `system/init` 事件的 [`mcp_server_errors` 字段](https://code.claude.com/docs/zh-CN/headless#stream-responses)中报告被跳过的 `--mcp-config` 条目,以便脚本检测到该服务器从未加载。

88 90 

89### 选项 2:添加远程 SSE 服务器91### 选项 2:添加远程 SSE 服务器

90 92 


276 278 

277当您从 `/mcp` 中的服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。**Reconnect** 在已连接或失败的服务器上也会丢弃它;在 `cached` 服务器上,**Reconnect** 会立即连接服务器并保留条目。丢弃条目后,Claude Code 下次连接到服务器时,会从服务器而不是从缓存获取工具列表。279当您从 `/mcp` 中的服务器菜单选择 **Disable** 或 **Clear authentication** 时,Claude Code 也会丢弃该服务器的缓存条目。**Reconnect** 在已连接或失败的服务器上也会丢弃它;在 `cached` 服务器上,**Reconnect** 会立即连接服务器并保留条目。丢弃条目后,Claude Code 下次连接到服务器时,会从服务器而不是从缓存获取工具列表。

278 280 

279当服务器的状态为 `✘ Failed to connect` 时,`claude mcp list` 将失败详情附加到该状态行,`claude mcp get <name>` 在 `Issue:` 行上显示它:HTTP 状态或错误代码,加上服务器返回的任何错误文本。`/mcp` 中的服务器详情视图在其 `Issue:` 行中包含相同的服务器报告文本。Claude Code 从此详情中编辑掉类似凭据的文本,并且永远不包括展开后的服务器 URL,它可能携带机密。Claude Code 不向 `✘ Connection error` 状态附加详情,因为它会打印的异常文本可能嵌入该 URL。在 v2.1.219 之前,两个命令仅显示裸失败状态,没有状态代码或服务器的错误文本。281##### 连接失败与未配置的服务器

282 

283当服务器状态为 `✘ Failed to connect` 时,`claude mcp list` 会在该状态行后附加失败详情,而 `claude mcp get <name>` 会在 `Issue:` 行中显示它。详情包括 HTTP 状态或错误代码,以及服务器返回的任何错误文本。`/mcp` 中服务器的详情视图会在其 `Issue:` 行中包含同样由服务器报告的文本。

284 

285Claude Code 会从这些详情中删除类似凭据的文本,并且绝不包含展开后的服务器 URL,因为它可能携带机密信息。Claude Code 不会在 `✘ Connection error` 状态后附加任何详情,因为它在那里打印的异常文本可能嵌入该 URL。

280 286 

281当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如果有),例如 `https://mcp.example.com`。287当您从 `/mcp` 完成身份验证且连接仍然因 HTTP 状态或传输错误代码失败时,Claude Code 在尝试后打印的消息中添加该代码和服务器 URL 的来源。来源是方案和主机,加上 URL 命名的端口(如果有),例如 `https://mcp.example.com`。

282 288 

memory.md +2 −2

Details

237 237 

238每个大括号组将扩展的模式数量相乘:`src/*.{ts,tsx}` 扩展为两个模式,`{a,b}/{c,d}/*.{ts,tsx}` 扩展为八个。为了保持扩展有界,规则的整个 `paths` 列表共享一个 1,000 个扩展模式和 4 MiB 的预算,没有大括号的模式不计入其中。238每个大括号组将扩展的模式数量相乘:`src/*.{ts,tsx}` 扩展为两个模式,`{a,b}/{c,d}/*.{ts,tsx}` 扩展为八个。为了保持扩展有界,规则的整个 `paths` 列表共享一个 1,000 个扩展模式和 4 MiB 的预算,没有大括号的模式不计入其中。

239 239 

240Claude Code 使用任何会超过预算的未展开模式,其字面大括号不匹配任何文件。在 v2.1.217 之前,具有许多大括号组的 `paths` 值在启动时使 CLI 停滞或崩溃。240Claude Code 使用任何会超过预算的未展开模式,其字面大括号不匹配任何文件。

241 241 

242Glob 语法将 `[` 视为括号表达式的开始,例如 `[abc]`。具有无法读作括号表达式的 `[` 的模式,例如 `photos [2024/**`,是无效的:它不匹配任何内容,规则的其他模式继续工作。要匹配文件名中的字面 `[`,请将其转义为 `photos \[2024/**`。242Glob 语法将 `[` 视为括号表达式的开始,例如 `[abc]`。具有无法读作括号表达式的 `[` 的模式,例如 `photos [2024/**`,是无效的:它不匹配任何内容,规则的其他模式继续工作。要匹配文件名中的字面 `[`,请将其转义为 `photos \[2024/**`。

243 243 


568 568 

569`/memory` 命令列出您的 CLAUDE.md、CLAUDE.local.md 和其他记忆文件在用户和项目作用域内的位置,包括尚不存在的文件的用户和项目 CLAUDE.md 条目。它还允许您开启或关闭自动记忆,并提供打开自动记忆文件夹的选项。选择任何文件即可在您的编辑器中打开它;选择一个尚不存在的文件会先创建它。要检查启动时加载了哪些 `CLAUDE.md` 和规则文件,请运行 `/context`。569`/memory` 命令列出您的 CLAUDE.md、CLAUDE.local.md 和其他记忆文件在用户和项目作用域内的位置,包括尚不存在的文件的用户和项目 CLAUDE.md 条目。它还允许您开启或关闭自动记忆,并提供打开自动记忆文件夹的选项。选择任何文件即可在您的编辑器中打开它;选择一个尚不存在的文件会先创建它。要检查启动时加载了哪些 `CLAUDE.md` 和规则文件,请运行 `/context`。

570 570 

571VS Code 等 GUI 编辑器在单独的窗口中打开文件,你可以在文件打开时继续使用会话。在 v2.1.216 之前,`/memory` 会等待你关闭文件后才响应。Vim 等终端编辑器会接管终端,直到你退出。571VS Code 等 GUI 编辑器在单独的窗口中打开文件,您可以在文件打开时继续使用会话。Vim 等终端编辑器会接管终端,直到您退出。

572 572 

573当你要求 Claude 记住某些内容时,如"总是使用 pnpm,而不是 npm"或"记住 API 测试需要本地 Redis 实例",Claude 将其保存到自动记忆。要改为添加指令到 CLAUDE.md,直接要求 Claude,如"将其添加到 CLAUDE.md",或通过 `/memory` 自己编辑文件。573当你要求 Claude 记住某些内容时,如"总是使用 pnpm,而不是 npm"或"记住 API 测试需要本地 Redis 实例",Claude 将其保存到自动记忆。要改为添加指令到 CLAUDE.md,直接要求 Claude,如"将其添加到 CLAUDE.md",或通过 `/memory` 自己编辑文件。

574 574 

model-config.md +21 −4

Details

542在以下情况下会应用不同的级别:542在以下情况下会应用不同的级别:

543 543 

544* **您自己的更改**:一旦您选择了 effort 级别、在 `/model` 中选择了模型或稍后恢复会话,被标记请求的级别就不再沿用。544* **您自己的更改**:一旦您选择了 effort 级别、在 `/model` 中选择了模型或稍后恢复会话,被标记请求的级别就不再沿用。

545* **Skill effort**:skill 的 `effort` frontmatter 为被标记请求设置的级别适用于该轮次,后续轮次以 [effort 解析顺序](#adjust-effort-level)为备用模型给出的级别运行。545* **为单个轮次设置的 effort**:如果您使用 `ultrathink` 提升了被标记的轮次,或 skill 的 `effort` frontmatter 设置了其级别,该级别适用于该轮次。后续轮次以 [effort 解析顺序](#adjust-effort-level)为备用模型给出的级别运行。

546 546 

547在会话中,运行 `/effort status` 查看当前生效的级别,或运行 `/effort` 更改它。547在会话中,运行 `/effort status` 查看当前生效的级别,或运行 `/effort` 更改它。

548 548 


674 674 

675#### 使用 ultrathink 进行一次性深度推理675#### 使用 ultrathink 进行一次性深度推理

676 676 

677在您的提示词中的任何地方包含 `ultrathink` 以请求该轮次的更深推理,而不改变您的会话 effort 设置。Claude Code 识别关键字并添加上下文内指令。发送到 API 的 effort 级别保持不变。Claude Code 将其他短语如"think"、"think hard"和"think more"作为普通提示词文本传递,不将它们识别为关键字。677在您的提示词中的任何地方包含 `ultrathink` 以请求该轮次的更深推理,而不改变您的会话 effort 设置。Claude Code 识别关键字并添加上下文内指令。Claude Code 将其他短语如"think"、"think hard"和"think more"作为普通提示词文本传递,不将它们识别为关键字。

678 

679在终端输入框中键入时,该词还可以将该轮次提升到 `xhigh` effort。当它可以这样做时,该词会以彩虹色显示。需要 Claude Code v2.1.311 或更高版本。如果您开始新轮次时该词没有以彩虹色显示,请尝试以下方法之一:

680 

681* 在不以 `/` 开头的提示词中重新键入该词,并确保它不在引号、括号、路径或命令等任何内容之内

682* 如果 `CLAUDE_CODE_EFFORT_LEVEL` 设置为低于 `xhigh` 的级别,请取消设置它;或将您自己的 [`maxEffortLevel`](https://code.claude.com/docs/zh-CN/settings-reference#maxeffortlevel) 提高到 `xhigh` 或更高;或请组织管理员提高您的[组织限制](#organization-effort-limits)

683* 在会话中运行 `/model` 切换到 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 5.1 模型。在该词无法提升轮次的情况下(例如在 Amazon Bedrock 上),请改为[设置 effort 级别](#set-the-effort-level)

678 684 

679#### 设置 effort 级别685#### 设置 effort 级别

680 686 

681您可以通过以下任何方式更改 effort:687您可以通过以下任何方式更改 effort:

682 688 

683* **`/effort`**:运行 `/effort` 不带参数以打开交互式滑块,`/effort` 后跟级别名称以直接设置它,或 `/effort auto` 以清除活动模型的保存级别。您可以在 Claude 工作时运行它,一旦您确认[缓存警告](https://code.claude.com/docs/zh-CN/prompt-caching.md#changing-effort-level)(如果 Claude Code 显示一个),Claude Code 会将新级别应用于轮次中的下一个请求689* **`/effort`**:运行 `/effort` 不带参数以打开交互式滑块,`/effort` 后跟级别名称以直接设置它,或 `/effort auto` 以清除活动模型的保存级别

684* **在 `/model` 中**:选择模型时使用左/右箭头键调整 effort 滑块690* **在 `/model` 中**:选择模型时使用左/右箭头键调整 effort 滑块

685* **`--effort` 标志**:启动 Claude Code 时传递级别名称以为单个会话设置它691* **`--effort` 标志**:启动 Claude Code 时传递级别名称以为单个会话设置它

686* **环境变量**:将 `CLAUDE_CODE_EFFORT_LEVEL` 设置为级别名称或 `auto`692* **环境变量**:将 `CLAUDE_CODE_EFFORT_LEVEL` 设置为级别名称或 `auto`


692 698 

693如果您在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置 `effortLevel`,Claude Code 在 [effort 解析顺序](#adjust-effort-level)的设置步骤处应用它,用户仍然可以使用 `/effort` 或 `--effort` 更改级别。要将用户保持在或低于某个级别,设置 [`maxEffortLevel`](https://code.claude.com/docs/zh-CN/settings-reference#maxeffortlevel)。699如果您在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置 `effortLevel`,Claude Code 在 [effort 解析顺序](#adjust-effort-level)的设置步骤处应用它,用户仍然可以使用 `/effort` 或 `--effort` 更改级别。要将用户保持在或低于某个级别,设置 [`maxEffortLevel`](https://code.claude.com/docs/zh-CN/settings-reference#maxeffortlevel)。

694 700 

695Effort 滑块在选择支持的模型时出现在 `/model` 中。当前 effort 级别也显示在会话标题中模型名称旁边,例如"with low effort",因此您可以确认哪个设置处于活跃状态,而无需打开 `/model`。页脚也在启动和更改时简要显示 effort 级别。701#### 检查您设置的 effort 级别

702 

703选择支持的模型时,effort 滑块会出现在 `/model` 中。会话标题中显示的级别(例如"with low effort")来自您的 effort 设置,即使 Claude [仍在以旧级别工作](#when-a-new-effort-level-starts)。页脚也会在启动时和级别更改时简要显示 effort 级别。

704 

705#### 新 effort 级别何时生效

706 

707在终端会话中,一旦 `/effort` 确认了新级别,您发送的下一条消息就会以该级别运行。您可以在当前轮次结束后发送它,也可以[在 Claude 仍在工作时](https://code.claude.com/docs/zh-CN/interactive-mode.md#queue-messages-while-claude-works)发送:

708 

709* **轮次结束后**:在此之前您无需执行任何操作,如果该轮次以旧级别完成,这属于预期行为

710* **Claude 仍在工作时**:输入一条消息(例如 `keep going`),然后按 `Enter` 将其加入队列,而不会中断当前轮次。Claude 会在其当前工具调用完成时(最迟在轮次结束时)收到该消息,并从那时起以新级别工作。

711 

712在 v2.1.242 之前,Claude Code 可能会将 `/effort` 本身排队直到轮次结束;在不[获取功能标志](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching)的会话中(例如在[第三方提供商](https://code.claude.com/docs/zh-CN/third-party-integrations.md)上)则始终如此。

696 713 

697#### 自适应推理和固定思考预算714#### 自适应推理和固定思考预算

698 715 

Details

648| `claude_code.code_edit_tool.decision` | 代码编辑工具权限决策的计数 | 无 |648| `claude_code.code_edit_tool.decision` | 代码编辑工具权限决策的计数 | 无 |

649| `claude_code.active_time.total` | 总活跃时间 | s |649| `claude_code.active_time.total` | 总活跃时间 | s |

650 650 

651当 `prometheus` 是 `OTEL_METRICS_EXPORTER` 中列出的唯一导出器时,Claude Code 会从导出的指标中省略 `USD`、`tokens` 和 `s` 单位,以使抓取结果保持为有效的 Prometheus 文本格式。指标名称不会改变,组合多个导出器的配置(例如 `otlp,prometheus`)会保留单位。在 v2.1.216 之前,Prometheus 抓取结果包含仅适用于 OpenMetrics 的 `# UNIT` 行,某些抓取器会拒绝这些行。651当 `prometheus` 是 `OTEL_METRICS_EXPORTER` 中列出的唯一导出器时,Claude Code 会从导出的指标中省略 `USD`、`tokens` 和 `s` 单位,以使抓取结果保持为有效的 Prometheus 文本格式。指标名称不会改变,组合多个导出器的配置(例如 `otlp,prometheus`)会保留单位。

652 652 

653### 指标详情653### 指标详情

654 654 


995 995 

996 `source` 值并不表明匹配的是其中哪个来源。要查明是哪个来源拒绝了调用,请查找具有相同 `tool_use_id` 的[安全事件](#safety-event),并读取其 `category` 和 `rule_source` 属性。部分被拒绝的调用[没有安全事件](#calls-without-a-safety-event)。996 `source` 值并不表明匹配的是其中哪个来源。要查明是哪个来源拒绝了调用,请查找具有相同 `tool_use_id` 的[安全事件](#safety-event),并读取其 `category` 和 `rule_source` 属性。部分被拒绝的调用[没有安全事件](#calls-without-a-safety-event)。

997 997 

998 当权限提示请求本身失败时,Claude Code 也会报告 `"config"`。例如,当 Agent SDK 的 [`canUseTool`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#canusetool) 回调或 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 工具返回无效结果时,或者当请求挂起期间输入流关闭时,该请求就会失败。在 v2.1.216 之前,Claude Code 将这些失败报告为 `"user_reject"`。998 当权限提示请求本身失败时,Claude Code 也会报告 `"config"`。例如,当 Agent SDK 的 [`canUseTool`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#canusetool) 回调或 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 工具返回无效结果时,或者当请求挂起期间输入流关闭时,该请求都会失败。

999 * `"hook"`:由 `PreToolUse` 或 `PermissionRequest` hook 返回了该决策。999 * `"hook"`:由 `PreToolUse` 或 `PermissionRequest` hook 返回了该决策。

1000 * `"user_permanent"`:当用户在权限提示中选择 "Yes, and don't ask again for ..." 时发出,这会将一条允许规则保存到其个人设置中。在交互式 CLI 中,仅针对该选择本身发出;之后匹配所保存规则的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,初次选择以及之后的规则匹配都会发出 `"user_permanent"`。视为接受。1000 * `"user_permanent"`:当用户在权限提示中选择 "Yes, and don't ask again for ..." 时发出,这会将一条允许规则保存到其个人设置中。在交互式 CLI 中,仅针对该选择本身发出;之后匹配已保存规则的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,初始选择和之后的规则匹配都会发出 `"user_permanent"`。视为接受。

1001 * `"user_temporary"`:当用户在权限提示中选择 "Yes" 进行一次性批准,或在文件编辑或读取提示中选择了在会话剩余时间内授予访问权限的选项时发出。在交互式 CLI 中,仅针对该选择本身发出;之后由该会话级授权允许的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,该选择以及之后的匹配都会发出 `"user_temporary"`。视为接受。1001 * `"user_temporary"`:当用户在权限提示中选择 "Yes" 进行一次性批准,或在文件编辑或读取提示中选择了在会话剩余时间内授予访问权限的选项时发出。在交互式 CLI 中,仅针对该选择本身发出;之后由该会话范围许可允许的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,该选择和之后的匹配都会发出 `"user_temporary"`。视为接受。

1002 * `"user_abort"`:当用户未作回答即关闭权限提示时发出。在 Agent SDK 和非交互式 `-p` 会话中,这包括在 `canUseTool` 或 `--permission-prompt-tool` 权限请求挂起时中断该轮次;在 v2.1.216 之前,Claude Code 将这种中断报告为 `"user_reject"`。视为拒绝。1002 * `"user_abort"`:当用户未作回答就关闭了权限提示时发出。在 Agent SDK 和非交互式 `-p` 会话中,这包括在 `canUseTool` 或 `--permission-prompt-tool` 权限请求挂起期间中断轮次。视为拒绝。

1003 * `"user_reject"`:当用户在提示时选择 "No" 时发出。在交互式 CLI 中,仅针对该选择本身发出;匹配用户个人设置中拒绝规则的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,匹配个人设置中拒绝规则的调用会发出 `"user_reject"`。视为拒绝。1003 * `"user_reject"`:当用户在提示时选择 "No" 时发出。在交互式 CLI 中,仅针对该选择本身发出;匹配用户个人设置中拒绝规则的调用会改为发出 `"config"`。在 Agent SDK 或非交互式 `-p` 会话中,匹配个人设置中拒绝规则的调用会发出 `"user_reject"`。视为拒绝。

1004* `classifier_verdict`:自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#how-the-classifier-evaluates-actions)对该调用的判定结果,或在没有判定结果时 Claude Code 拒绝该调用的原因。需要 Claude Code v2.1.301 或更高版本1004* `classifier_verdict`:自动模式[分类器](https://code.claude.com/docs/zh-CN/permission-modes.md#how-the-classifier-evaluates-actions)对该调用的判定结果,或在没有判定结果时 Claude Code 拒绝该调用的原因。需要 Claude Code v2.1.301 或更高版本

1005 1005 

Details

97 该命令也适用于[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)和 Agent SDK 会话,以及来自移动应用或网页的[远程控制](https://code.claude.com/docs/zh-CN/remote-control.md#limitations),其中你只能列出和选择[内置样式](#built-in-output-styles)。需要 Claude Code v2.1.269 或更高版本。97 该命令也适用于[非交互模式](https://code.claude.com/docs/zh-CN/headless.md)和 Agent SDK 会话,以及来自移动应用或网页的[远程控制](https://code.claude.com/docs/zh-CN/remote-control.md#limitations),其中你只能列出和选择[内置样式](#built-in-output-styles)。需要 Claude Code v2.1.269 或更高版本。

98* **Terminal 菜单**:运行 `/config` 并选择**输出样式**从菜单中选择一种样式。98* **Terminal 菜单**:运行 `/config` 并选择**输出样式**从菜单中选择一种样式。

99* **VS Code extension**:使用 `/` 打开[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box)并选择**输出样式**来选择一种样式,包括你的自定义样式。需要 Claude Code v2.1.257 或更高版本。99* **VS Code extension**:使用 `/` 打开[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box)并选择**输出样式**来选择一种样式,包括你的自定义样式。需要 Claude Code v2.1.257 或更高版本。

100* **Desktop app**:在设置文件中设置 `outputStyle` 字段,例如 `.claude/settings.local.json`,这是终端菜单写入的文件。当你在那里运行 `/config` 时,Claude Code [打开**设置 > Claude Code**](https://code.claude.com/docs/zh-CN/desktop.md#what%E2%80%99s-not-available-in-desktop)而不是菜单。100* **桌面应用**:在设置文件中设置 `outputStyle` 字段,例如 `.claude/settings.local.json`,这是终端菜单写入的文件。当您在桌面应用中运行 `/config` 时,Claude Code 会[打开**设置 > Code** 或**设置 > Claude Code**](https://code.claude.com/docs/zh-CN/desktop.md#what’s-not-available-in-desktop),而不是菜单。

101 101 

102要在不使用菜单的情况下设置样式,直接编辑设置文件中的 `outputStyle` 字段:102要在不使用菜单的情况下设置样式,直接编辑设置文件中的 `outputStyle` 字段:

103 103 

Details

31 31 

32### 任何模式都不会自动批准的操作32### 任何模式都不会自动批准的操作

33 33 

34Claude Code 在任何模式下都不会自动批准以下内容,包括 `bypassPermissions`。每个项目符号链接到说明在每种模式下会发生什么的部分:34Claude Code 在任何模式下都不会自动批准以下内容,包括 `bypassPermissions`,不过您可以在 `bypassPermissions` 模式下 [关闭针对危险 `rm` 命令的提示](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。每个项目符号链接到说明在每种模式下会发生什么的部分:

35 35 

36* 与显式 [询问规则](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions) 匹配的工具36* 与显式 [询问规则](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions) 匹配的工具

37* 您的组织 [设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具,在该设置到达 Claude Code 的会话中37* 您的组织 [设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具,在该设置到达 Claude Code 的会话中


504* 只读 HTTP 请求504* 只读 HTTP 请求

505* 推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如 `production` 或 `gh-pages`)不在此列:分类器会单独判断推送到这类分支的操作。505* 推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如 `production` 或 `gh-pages`)不在此列:分类器会单独判断推送到这类分支的操作。

506 506 

507 推送的内容仍会根据分类器的其他规则进行检查,[`permissions.deny` 规则](https://code.claude.com/docs/zh-CN/permissions#manage-permissions)在所有模式下仍可按[命令的书写形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)阻止推送命令。远程仓库自身的分支保护仍然适用。从 v2.1.203 到 v2.1.211 之前,默认仅允许对默认分支的常规推送,以及推送到您开始时所在的分支或 Claude 创建的分支。507 推送的内容仍会根据分类器的其他规则进行检查,[`permissions.deny` 规则](https://code.claude.com/docs/zh-CN/permissions#manage-permissions)在所有模式下仍可按[命令的书写形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)阻止推送命令。远程仓库自身的分支保护仍然适用。

508* 删除 Claude 在同一会话中先前创建的确切作业508* 删除 Claude 在同一会话中先前创建的确切作业

509* 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型509* 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型

510* 在同一多 Agent 会话中协同工作的 Agent 之间的消息510* 在同一多 Agent 会话中协同工作的 Agent 之间的消息


649 649 

650`bypassPermissions` 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对[受保护路径](#protected-paths)的写入。650`bypassPermissions` 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对[受保护路径](#protected-paths)的写入。

651 651 

652即使在 `bypassPermissions` 模式下,每项[任何模式都不会自动批准的操作](#actions-no-mode-auto-approves)也会触发提示或被拒绝,而不会自行运行。读取[其他组织的公开 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you) 需要您的批准,而此模式不会请求批准,因此 Claude 无法读取此类 Artifact。[PowerShell 中的 Remove-Item](#remove-item-in-powershell) 拒绝也适用于此模式。652即使在 `bypassPermissions` 模式下,每项[任何模式都不会自动批准的操作](#actions-no-mode-auto-approves)也会触发提示或被拒绝,不过您可以[关闭针对危险 `rm` 命令的提示](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。读取[其他组织的公开 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you) 需要您的批准,而此模式不会请求批准,因此 Claude 无法读取此类 Artifact。[PowerShell 中的 Remove-Item](#remove-item-in-powershell) 拒绝也适用于此模式。

653 653 

654两个[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)保护措施在此模式下仍然适用,在可使用绕过权限的交互式终端计划模式会话中同样适用:654两个[跨会话消息传递](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)保护措施在此模式下仍然适用,在可使用绕过权限的交互式终端计划模式会话中同样适用:

655 655 


861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.

862```862```

863 863 

864您会收到关键路径移除[在您的权限模式下](#critical-path-removals-in-each-permission-mode)会收到的提示或拒绝,`bypassPermissions` 也不例外。您无法通过 `Bash` 或 `Bash(*)` 允许规则、沙箱[自动允许模式](https://code.claude.com/docs/zh-CN/sandboxing.md#auto-allow-mode)或返回 `"allow"` 的 `PreToolUse` hook 批准该命令。请阅读该命令,然后批准提示,或者在被拒绝后在您的 shell 中运行它。864您会收到关键路径移除[在您的权限模式下](#critical-path-removals-in-each-permission-mode)会收到的提示或拒绝,`bypassPermissions` 也不例外,不过在 `bypassPermissions` 模式下您可以[关闭该提示](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。您无法通过 `Bash` 或 `Bash(*)` 允许规则、沙箱[自动允许模式](https://code.claude.com/docs/zh-CN/sandboxing.md#auto-allow-mode)或返回 `"allow"` 的 `PreToolUse` hook 批准该命令。请阅读该命令,然后批准提示,或者在被拒绝后在您的 shell 中运行它。

865 865 

866### 挂载驱动器提示866### 挂载驱动器提示

867 867 


923 923 

924如果显式[询问规则](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions)与命令匹配,Claude Code 即使在 `auto` 模式下也会询问您,且没有时间限制。在询问的模式中,[`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest) 可以回答提示。924如果显式[询问规则](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions)与命令匹配,Claude Code 即使在 `auto` 模式下也会询问您,且没有时间限制。在询问的模式中,[`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest) 可以回答提示。

925 925 

926要在 `bypassPermissions` 模式下不经提示运行这些移除,请参阅[关闭关键路径移除提示](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)。

927 

926### auto 和 bypassPermissions 模式中的时间限制和拒绝928### auto 和 bypassPermissions 模式中的时间限制和拒绝

927 929 

928在 `auto` 和 `bypassPermissions` 模式下,关键路径移除的终端提示显示两分钟倒计时:930在 `auto` 和 `bypassPermissions` 模式下,关键路径移除的终端提示显示两分钟倒计时:


939| :- | :- | :- |941| :- | :- | :- |

940| [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)的聊天面板 | 拒绝它 | 拒绝它,除非 [`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest) 允许它 |942| [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)的聊天面板 | 拒绝它 | 拒绝它,除非 [`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest) 允许它 |

941| [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md) | 拒绝它 | 拒绝它,除非 `PermissionRequest` hook 允许它 |943| [桌面应用](https://code.claude.com/docs/zh-CN/desktop.md) | 拒绝它 | 拒绝它,除非 `PermissionRequest` hook 允许它 |

942| [`-p` 运行](https://code.claude.com/docs/zh-CN/headless)或 [Agent SDK 会话](https://code.claude.com/docs/zh-CN/agent-sdk/permissions.md) | 拒绝它 | 由您的 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 或 [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input#handle-tool-approval-requests)决定。如果两者都没有,或者在 [`--permission-prompts none`](https://code.claude.com/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs) 下,则拒绝它,除非 `PermissionRequest` hook 允许它 |944| [`-p` 运行](https://code.claude.com/docs/zh-CN/headless)或 [Agent SDK 会话](https://code.claude.com/docs/zh-CN/agent-sdk/permissions.md) | 拒绝它 | 由您的 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 或 [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input#handle-tool-approval-requests)决定。如果两者都没有,或者在 [`--permission-prompts none`](https://code.claude.com/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs) 下,则拒绝它,除非 `PermissionRequest` hook 允许它。若要改为不经提示运行这些移除,请参阅[关闭关键路径移除提示](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode) |

943 945 

944无论在何处拒绝了该移除,您都可以阅读完整命令并在您的 shell 中运行它。946无论在何处拒绝了该移除,您都可以阅读完整命令并在您的 shell 中运行它。

945 947 


958}960}

959```961```

960 962 

963### 在 bypassPermissions 模式下关闭关键路径移除提示

964 

965要在 `bypassPermissions` 模式下不经提示运行针对[关键路径](#critical-paths)的 Bash `rm` 和 `rmdir` 命令,请在环境中设置 [`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1`](https://code.claude.com/docs/zh-CN/env-vars#variables) 后启动 Claude Code。这需要 Claude Code v2.1.311 或更高版本。Claude Code 仅从启动环境读取该变量,并会[忽略设置文件 `env` 块中的该变量](https://code.claude.com/docs/zh-CN/settings-reference#variables-claude-code-ignores-in-env)。例如,在[您的 shell](https://code.claude.com/docs/zh-CN/env-vars.md#set-variables-in-your-shell) 中设置该变量,然后从中启动 `claude`:

966 

967**macOS, Linux, WSL**

968 

969```bash theme={null}

970export CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1

971claude --permission-mode bypassPermissions

972```

973 

974**Windows PowerShell**

975 

976```powershell theme={null}

977$env:CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS = "1"

978claude --permission-mode bypassPermissions

979```

980 

981**Windows CMD**

982 

983```batch theme={null}

984set CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1

985claude --permission-mode bypassPermissions

986```

987 

988> [!WARNING]

989>

990> 设置此变量后,您将失去针对破坏性删除的安全提示:`rm -rf ~` 之类的命令可能会在不询问您的情况下运行。请仅在内容丢失也无妨的[隔离环境](#skip-all-checks-with-bypasspermissions-mode)中设置它。

991 

992只有在 `bypassPermissions` 模式本身下(而非计划模式下),且仅对于关键路径检查在 Bash 和 [Monitor](https://code.claude.com/docs/zh-CN/tools-reference.md#monitor-tool) 工具中标记的内容,移除才会不经提示运行。这包括 Claude Code 无法完全解析的命令,这些命令同样会不经提示运行。

993 

994#### 关于关键路径移除提示的启动通知

995 

996要检查 `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` 是否生效,请查看 Claude Code 在启动时打印的那一行。在 `-p` 运行中,它输出到 stderr。在 Agent SDK 应用中,传入 [`stderr` 选项](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options)即可读取它。该行内容为以下之一:

997 

998* **`is set, so dangerous rm commands can run without a prompt`**:托管设置和插件 hook 加载完成后,移除即可不经提示运行。如果移除仍然收到提示或拒绝,请参阅[关键路径移除提示为何仍然开启](#why-the-critical-path-removal-prompt-stays-on)

999* **`has no effect in this session`**:在整个会话中,移除保持其通常的提示或拒绝。要改变这一点,请在[关键路径移除提示为何仍然开启](#why-the-critical-path-removal-prompt-stays-on)中找到您的情况

1000* **`has no effect while the Windows registry cannot be read for managed settings`**:移除保持其通常的提示或拒绝;如果之后读取注册表成功,该变量无需重启即可生效。如果移除仍然收到提示或拒绝,请参阅[关键路径移除提示为何仍然开启](#why-the-critical-path-removal-prompt-stays-on)

1001 

1002没有该行并不意味着提示处于开启状态:未设置 `stderr` 选项的 Agent SDK 应用看不到该行,但移除仍可能不经提示运行。否则,请检查您是否在启动环境中设置了该变量、会话是否[能够进入 `bypassPermissions` 模式](#skip-all-checks-with-bypasspermissions-mode),以及 `claude` 是否运行在另一个会话内部。某些会话[启动时不带该变量](#why-the-critical-path-removal-prompt-stays-on)。

1003 

1004如果您看到其中某一行但并未设置该变量,请找到设置它的位置(例如您的 shell 配置文件)并将其移除。

1005 

1006#### 关键路径移除提示为何仍然开启

1007 

1008如果 `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` 没有效果,移除保持其[通常的提示或拒绝](#critical-path-removals-in-each-permission-mode),请检查以下原因:

1009 

1010* **其他机制处理权限提示**:未配合 [`--permission-prompts none`](https://code.claude.com/docs/zh-CN/headless#turn-off-permission-prompts-in-unattended-runs) 使用的 [`--permission-prompt-tool`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 或 Agent SDK [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input)、带有任意匹配器的 [`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest),或处理该事件的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#hook-the-settings-hook-events)。移除该 hook、mod、工具或回调,然后重新启动 `claude`

1011* **会话由 [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)的聊天面板或[桌面应用](https://code.claude.com/docs/zh-CN/desktop.md)运行**:改为在终端中启动 `claude`,例如 IDE 的集成终端

1012* **有规则覆盖 Bash、Edit 或 Read**:针对其中某个工具的[拒绝或询问规则](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions),无论是在启动时存在,还是在会话期间被 Claude Code 读取,即使您之后将其移除也是如此。移除该规则并重新启动 `claude`。要排除某个工具,请使用 [`--tools`](https://code.claude.com/docs/zh-CN/cli-reference#cli-flags) 而不是拒绝规则

1013* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 已开启**:从每个将其设置为 `true` 的设置文件中移除该设置,然后重新启动 `claude`

1014* **`claude` 在另一个会话内部运行**:从某个会话的 Bash 工具或 hook 启动的 `claude`,即使其命令行中带有该变量。请从您自己的 shell 启动 `claude`。不要将这一嵌套会话限制当作安全边界

1015* **`PreToolUse` hook 对移除返回 `ask`**:更改该 hook 的返回值

1016* **Claude Code 为您启动会话**:[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)、分屏窗格中的 [agent team](https://code.claude.com/docs/zh-CN/agent-teams.md) 队友,以及 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 服务器创建的会话,启动时都不带该变量。请从您自己的 shell 启动 `claude`

1017* **无法读取托管设置**:Claude Code 尚未成功读取您的[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)来源。如果服务器托管设置持续加载失败,请参阅[Remote managed settings failed to load](https://code.claude.com/docs/zh-CN/errors.md#remote-managed-settings-failed-to-load)。对于注册表查询以外的任何其他失败,请联系该来源的管理者进行修复

1018* **无法查询 Windows 注册表**:在 Windows 和 WSL 中,该变量需要从注册表获得应答,即使 [WSL 不将其用于设置](https://code.claude.com/docs/zh-CN/settings-reference.md#wslinheritswindowssettings)也是如此。在非英语 Windows、关闭了互操作的 WSL,或 WSL2 内核上的容器中,该查询可能在整个会话中都失败。如果互操作已关闭,请将其开启。否则,请自行运行这些移除

1019 

961### PowerShell 中的 Remove-Item1020### PowerShell 中的 Remove-Item

962 1021 

963当您启用 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool)时,Claude Code 给 `Remove-Item` 和 `cmd` 内置命令 `rd`、`rmdir`、`del` 和 `erase` 自己的检查,与 `rm` 关键路径列表分开。对于 `Remove-Item`,结果取决于目标,第一个匹配的情况适用:1022当您启用 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool)时,Claude Code 给 `Remove-Item` 和 `cmd` 内置命令 `rd`、`rmdir`、`del` 和 `erase` 自己的检查,与 `rm` 关键路径列表分开。对于 `Remove-Item`,结果取决于目标,第一个匹配的情况适用:

permissions.md +28 −26

Details

28 28 

29当您选择"是,不再询问"且批准永久保存时(例如对于 Bash 命令或 WebFetch 域),Claude Code 会将规则保存到 git 项目根目录的 `.claude/settings.local.json`,通过[工作树](https://code.claude.com/docs/zh-CN/worktrees.md)解析到主检出。该规则适用于该项目中的未来会话,包括在子目录和工作树中启动的会话。文件修改批准不会保存到文件中:如表所示,它仅持续到会话结束。在某些情况下,例如在 git 项目外或在 Windows 上,Claude Code 不使用项目根目录;[Claude Code 查找每个文件的位置](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)列出了这些情况以及它保存规则的位置。29当您选择"是,不再询问"且批准永久保存时(例如对于 Bash 命令或 WebFetch 域),Claude Code 会将规则保存到 git 项目根目录的 `.claude/settings.local.json`,通过[工作树](https://code.claude.com/docs/zh-CN/worktrees.md)解析到主检出。该规则适用于该项目中的未来会话,包括在子目录和工作树中启动的会话。文件修改批准不会保存到文件中:如表所示,它仅持续到会话结束。在某些情况下,例如在 git 项目外或在 Windows 上,Claude Code 不使用项目根目录;[Claude Code 查找每个文件的位置](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)列出了这些情况以及它保存规则的位置。

30 30 

31在 v2.1.211 之前,Claude Code 总是在启动目录中保存规则,因此在工作树或子目录中授予的批准不适用于项目的其余部分。早期版本在子目录或工作树中保存的规则仍然适用于在那里启动的会话。

32 

33有时权限提示仅提供一次性批准,没有"不再询问"选项,也没有允许操作在会话的其余部分进行的选项。Claude Code 仅在提示可以向您显示它们允许的所有内容时才提供这些选项,因此您从提示保存的规则仅涵盖其选项命名的内容。当提示仅提供一次性批准时,批准该操作一次,或在 [`/permissions`](#manage-permissions) 中自己添加规则。要停止针对以 `watch` 等 exec 包装器开头的命令的提示,或针对带有 `-delete` 等操作的 `find` 命令的提示,请参阅 [Exec 包装器和 `find` 操作](#exec-wrappers-and-find-actions)。31有时权限提示仅提供一次性批准,没有"不再询问"选项,也没有允许操作在会话的其余部分进行的选项。Claude Code 仅在提示可以向您显示它们允许的所有内容时才提供这些选项,因此您从提示保存的规则仅涵盖其选项命名的内容。当提示仅提供一次性批准时,批准该操作一次,或在 [`/permissions`](#manage-permissions) 中自己添加规则。要停止针对以 `watch` 等 exec 包装器开头的命令的提示,或针对带有 `-delete` 等操作的 `find` 命令的提示,请参阅 [Exec 包装器和 `find` 操作](#exec-wrappers-and-find-actions)。

34 32 

35### 在回答权限提示时添加注释33### 在回答权限提示时添加注释


218 216 

219> [!TIP]217> [!TIP]

220>218>

221> Claude Code 知道 shell 运算符,所以像 `Bash(safe-cmd *)` 这样的规则不会给它权限运行命令 `safe-cmd && other-cmd`。识别的命令分隔符是 `&&`、`||`、`;`、`|`、`|&`、`&` 和换行符。规则必须独立匹配每个子命令。219> Claude Code 知道 shell 运算符,所以像 `Bash(safe-cmd *)` 这样的规则不会给它权限运行命令 `safe-cmd && other-cmd`。识别的命令分隔符是 `&&`、`||`、`;`、`|`、`|&`、`&` 和换行符。每个子命令都必须被允许,复合命令才能无需提示即可运行,例如因为该子命令匹配 allow 规则或是[只读命令](#read-only-commands)。

222 220 

223Deny 和 ask 规则在任何子命令匹配它们时适用,包括嵌套在子 shell 中的命令、命令替换或控制流体(如 `for` 循环)中的命令。像 `Bash(git clean *)` 这样的 ask 规则仍然会提示您 `cd /tmp && git clean -f` 或 `echo "$(git clean -f)"`,即使在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中。221Deny 和 ask 规则在任何子命令匹配它们时适用,包括嵌套在子 shell 中的命令、命令替换或控制流体(如 `for` 循环)中的命令。像 `Bash(git clean *)` 这样的 ask 规则仍然会提示您 `cd /tmp && git clean -f` 或 `echo "$(git clean -f)"`,即使在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)中。

224 222 


314 312 

315### PowerShell313### PowerShell

316 314 

317PowerShell 权限规则使用与 Bash 规则相同的形式。带有 `*` 的通配符可以在任何位置匹配,`:*` 后缀等同于尾部 ` *`,而裸 `PowerShell` 或 `PowerShell(*)` 匹配每个命令。此配置允许 `Get-ChildItem` 和 `git commit` 命令,同时阻止 `Remove-Item`:315PowerShell 权限规则使用与 [Bash 规则](#wildcard-patterns)相同的形式,裸 `PowerShell` 或 `PowerShell(*)` 匹配每个命令。此配置允许 `Get-ChildItem` 和 `git commit` 命令,同时阻止 `Remove-Item`:

318 316 

319```json theme={null}317```json theme={null}

320{318{


330}328}

331```329```

332 330 

333常见别名在匹配前被规范化。为 cmdlet 名称编写的规则也匹配其别名,因此 `PowerShell(Get-ChildItem *)` 匹配 `gci`、`ls` 和 `dir`。匹配不区分大小写。331常见别名在匹配之前会被规范化。为 cmdlet 名称编写的规则也会匹配这些别名,因此 `PowerShell(Get-ChildItem *)` 也会匹配 `gci`、`ls` 和 `dir`。匹配不区分大小写。

334 332 

335Claude Code 解析 PowerShell AST 并独立检查复合命令中的每个命令。管道运算符 `|`、语句分隔符 `;` 和 PowerShell 7+ 上的链运算符 `&&` 和 `||` 将复合命令分割为子命令。规则必须匹配每个子命令才能允许复合命令。333Claude Code 解析 PowerShell AST 并独立检查复合命令中的每个命令。管道运算符 `|`、语句分隔符 `;` 和 PowerShell 7+ 上的链运算符 `&&` 和 `||` 将复合命令分割为子命令。每个子命令都必须被允许,复合命令才能无需提示即可运行,例如通过匹配 allow 规则。

336 334 

337### Read 和 Edit335### Read 和 Edit

338 336 


390 388 

391您通过 `/permissions` 添加的规则遵循您保存它的设置文件的行。389您通过 `/permissions` 添加的规则遵循您保存它的设置文件的行。

392 390 

393本地设置规则锚定在会话的[主工作目录](#working-directories),而不是 Claude Code 在 v2.1.211 及更高版本中[存储文件](#permission-system)的仓库根目录。在从仓库根目录启动的会话中,两个目录相同;在[worktree](https://code.claude.com/docs/zh-CN/worktrees.md)会话中,像 `Edit(/src/**)` 这样的共享规则匹配该 worktree 自己的 `src/` 目录。391本地设置规则锚定在会话的[主工作目录](#working-directories),而不是 Claude Code [存储文件](#permission-system)的仓库根目录。在从仓库根目录启动的会话中,两个目录相同;在[worktree](https://code.claude.com/docs/zh-CN/worktrees.md)会话中,像 `Edit(/src/**)` 这样的共享规则匹配该 worktree 自己的 `src/` 目录。

394 392 

395像 `Read(/secrets/**)` 这样的 deny 规则在用户设置中阻止 `~/.claude/secrets/**`,而不是您项目中的 `secrets` 目录。要在用户设置中编写适用于每个项目内部的规则,请改用 `//` 绝对路径或 `~/` 主目录相对路径。393像 `Read(/secrets/**)` 这样的 deny 规则在用户设置中阻止 `~/.claude/secrets/**`,而不是您项目中的 `secrets` 目录。要在用户设置中编写适用于每个项目内部的规则,请改用 `//` 绝对路径或 `~/` 主目录相对路径。

396 394 


524 522 

525要在没有此提示的情况下读取网络共享上的文件,请先为该共享提供一个本地路径:523要在没有此提示的情况下读取网络共享上的文件,请先为该共享提供一个本地路径:

526 524 

527* **Windows**:将共享映射到驱动器号,并在启动 Claude Code 时使用 `--add-dir` 传递该驱动器,如[工作目录](#working-directories)中所述。之后使用 `/add-dir` 添加的驱动器,或在设置文件的 `additionalDirectories` 中列出的驱动器,其下的读取仍然会提示。要停止映射到 `Z:` 的共享的这些提示,请在 PowerShell 中使用 `claude --add-dir Z:\` 启动新会话。525* **Windows**:将共享映射到驱动器号,并在启动 Claude Code 时使用 `--add-dir` 传递该驱动器,如[工作目录](#working-directories)中所述。对于映射到 `Z:` 的共享,请在 PowerShell 中运行 `claude --add-dir Z:\`。

528* **macOS 和 Linux**:将共享挂载到本地路径(如 `/mnt` 或 `/Volumes` 下的目录),并从那里读取文件,如[工作目录是网络路径](https://code.claude.com/docs/zh-CN/errors.md#working-directory-is-a-network-path)中所述526* **macOS 和 Linux**:将共享挂载到本地路径(如 `/mnt` 或 `/Volumes` 下的目录),并从那里读取文件,如[工作目录是网络路径](https://code.claude.com/docs/zh-CN/errors.md#working-directory-is-a-network-path)中所述

529 527 

530### WebFetch528### WebFetch


711 709 

712要在会话中期从[主工作目录](#working-directories)的子目录加载 skills、命令和 subagents,请使用该子目录的路径运行 `/add-dir`。Claude Code 为会话的其余部分加载它们,无需提示您或添加工作目录,因为子目录已经可读。这需要 Claude Code v2.1.257 或更高版本。710要在会话中期从[主工作目录](#working-directories)的子目录加载 skills、命令和 subagents,请使用该子目录的路径运行 `/add-dir`。Claude Code 为会话的其余部分加载它们,无需提示您或添加工作目录,因为子目录已经可读。这需要 Claude Code v2.1.257 或更高版本。

713 711 

714Claude Code 从当前工作目录及其父目录、您在 `~/.claude/` 的用户目录和托管设置中发现输出样式。Hooks 和其他 `.claude/settings.json` 键从当前工作目录的 `.claude/` 文件夹加载,没有父目录回退,同时从您的用户 `~/.claude/settings.json` 和托管设置加载。`.claude/settings.local.json` 从 git 存储库根目录加载,即使您在子目录中启动 Claude Code,除了 Claude Code [不使用存储库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的情况,例如在 Windows 上;在 v2.1.211 之前,它也仅从当前工作目录加载。[Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/claude-code-features.md#control-filesystem-settings-with-settingsources) 会话在所有版本中从工作目录加载它。712#### 输出样式、hook 和本地设置的加载位置

713 

714Claude Code 从当前工作目录及其父目录、您在 `~/.claude/` 的用户目录和托管设置中发现输出样式。Hook 和其他 `.claude/settings.json` 键从当前工作目录的 `.claude/` 文件夹加载,没有父目录回退,同时从您的用户 `~/.claude/settings.json` 和托管设置加载。

715 

716`.claude/settings.local.json` 则从 git 仓库根目录加载,即使您在子目录中启动 Claude Code,除了 Claude Code [不使用仓库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的情况,例如在 Windows 上。

715 717 

716要在项目间共享该配置,请使用以下方法之一:718要在项目间共享该配置,请使用以下方法之一:

717 719 


765 767 

766Claude Code 根据您启动它的位置来保存和存储您接受的信任:768Claude Code 根据您启动它的位置来保存和存储您接受的信任:

767 769 

768* 在存储库中,Claude Code 根据 git 存储库根目录来保存信任,因此信任覆盖整个存储库,除了其中嵌套的任何 git 存储库(如子模块)。在[工作树](https://code.claude.com/docs/zh-CN/worktrees.md)中,它使用主检出的根目录,就像它对[保存的规则](#permission-system)所做的那样。770* 在仓库中,Claude Code 根据 git 仓库根目录来保存信任,因此信任覆盖整个仓库,除了其中嵌套的任何 git 仓库(如子模块)。在 [worktree](https://code.claude.com/docs/zh-CN/worktrees.md) 中,它使用主检出的根目录,就像它对[保存的规则](#permission-system)所做的那样。

769* 在存储库外,Claude Code 根据您启动它的目录来保存信任,信任覆盖该目录的任何子目录,除了其中嵌套的 git 存储库(如克隆)。每个被覆盖的子目录随后都被视为一个您信任其父目录的文件夹。771* 在仓库外,Claude Code 根据您启动它的目录来保存信任,信任覆盖该目录的任何子目录,除了其中嵌套的 git 仓库(如克隆)。每个被覆盖的子目录随后都被视为一个您信任其父目录的文件夹。

770* 当您从主目录启动时,Claude Code 仅在当前会话期间保持信任,不会将其写入磁盘;请参阅[其他保护措施](https://code.claude.com/docs/zh-CN/security.md#additional-safeguards)说明。772* 当您从主目录启动时,Claude Code 仅在当前会话期间保持信任,不会将其写入磁盘;请参阅[其他保护措施](https://code.claude.com/docs/zh-CN/security.md#additional-safeguards)说明。

771 773 

772Claude Code 仅在交互式会话中显示信任对话框。`claude -p` 运行或 SDK 会话永远不会显示它,信任父文件夹不计入这些规则,因此[在您信任文件夹之前运行什么](#what-runs-before-you-trust-a-folder)说明了在这两种情况下 Claude Code 仍然使用哪些存储库内容。774Claude Code 仅在交互式会话中显示信任对话框。`claude -p` 运行或 SDK 会话永远不会显示它,信任父文件夹不计入这些规则,因此[在您信任文件夹之前运行什么](#what-runs-before-you-trust-a-folder)说明了在这两种情况下 Claude Code 仍然使用哪些仓库内容。

773 775 

774在启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)之前,Claude Code 还会检查会话运行所在目录的工作区信任。如果您从您尚未信任的目录中的终端运行 `claude --bg`,信任对话框会首先出现,一旦您接受它,会话就会启动。在无法出现对话框的地方(如脚本中),命令会改为以[`Workspace not trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session)错误退出。776在启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)之前,Claude Code 还会检查会话运行所在目录的工作区信任。如果您从您尚未信任的目录中的终端运行 `claude --bg`,信任对话框会首先出现,一旦您接受它,会话就会启动。在无法出现对话框的地方(如脚本中),命令会改为以[`Workspace not trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session)错误退出。

775 777 

776### 当您的本地设置文件需要信任时778### 当您的本地设置文件需要信任时

777 779 

778`.claude/settings.local.json` 通常是您自己的文件,因此 Claude Code 应用其允许规则和其他目录而无需信任步骤。当该文件在 git 中被跟踪,或 `.claude` 是符号链接时,Claude Code 将其视为存储库提供的文件,并暂不应用其规则,直到您信任该文件夹为止。780`.claude/settings.local.json` 通常是您自己的文件,因此 Claude Code 应用其允许规则和其他目录而无需信任步骤。当该文件在 git 中被跟踪,或 `.claude` 是符号链接时,Claude Code 将其视为仓库提供的文件,并暂不应用其规则,直到您信任该文件夹为止。

779 781 

780Claude Code 运行 git 来区分两者,并且仅在您信任该文件夹后才运行 git:您接受了它或其父目录的信任对话框,其信任扩展到它,或您在 `-p` 或 SDK 会话中,这被视为已接受。在此之前,您启动 Claude Code 的位置决定了该文件规则会发生什么:782Claude Code 运行 git 来区分两者,并且仅在您信任该文件夹后才运行 git:您接受了它或其父目录的信任对话框,其信任扩展到它,或您在 `-p` 或 SDK 会话中,这被视为已接受。在此之前,您启动 Claude Code 的位置决定了该文件规则会发生什么:

781 783 

782* **在您的配置主目录中:** Claude Code 立即应用该文件夹的 `.claude/settings.local.json` 而无需运行 git。您的配置主目录是您的主目录,或一个您已将其 `.claude` 子目录设置为 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars#variables) 的目录。如果该 `CLAUDE_CONFIG_DIR` 目录位于 git 存储库内,并且 Claude Code 改为[将您的本地设置保留在存储库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file),它会像在其他任何地方一样暂不应用这些规则。784* **在您的配置主目录中:** Claude Code 立即应用该文件夹的 `.claude/settings.local.json` 而无需运行 git。您的配置主目录是您的主目录,或一个您已将其 `.claude` 子目录设置为 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars#variables) 的目录。如果该 `CLAUDE_CONFIG_DIR` 目录位于 git 仓库内,并且 Claude Code 改为[将您的本地设置保留在仓库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file),它会像在其他任何地方一样暂不应用这些规则。

783* **其他任何地方:** Claude Code 像对待项目设置一样暂不应用该文件的规则。一旦检查运行,Claude Code 应用未跟踪文件的规则,或位于任何 git 存储库外的目录中的文件的规则,即使您尚未信任该确切文件夹。785* **其他任何地方:** Claude Code 像对待项目设置一样暂不应用该文件的规则。一旦检查运行,Claude Code 应用未跟踪文件的规则,或位于任何 git 仓库外的目录中的文件的规则,即使您尚未信任该确切文件夹。

784 786 

785> [!NOTE]787> [!NOTE]

786>788>

787> 配置主目录例外仅跳过信任步骤。`~/.claude/settings.local.json` 仍然是[本地范围](https://code.claude.com/docs/zh-CN/settings.md#compare-the-scope-of-each-settings-file),因此 Claude Code 仅在您从主目录本身启动的会话中读取它,而不是在每个项目中。要在所有项目中应用权限规则,请将它们添加到您的用户设置中:`~/.claude/settings.json`,或当设置 `CLAUDE_CONFIG_DIR` 时为 `$CLAUDE_CONFIG_DIR/settings.json`。789> 配置主目录例外仅跳过信任步骤。`~/.claude/settings.local.json` 仍然是[本地作用域](https://code.claude.com/docs/zh-CN/settings.md#compare-the-scope-of-each-settings-file),因此 Claude Code 仅在您从主目录本身启动的会话中读取它,而不是在每个项目中。要在所有项目中应用权限规则,请将它们添加到您的用户设置中:`~/.claude/settings.json`,或当设置 `CLAUDE_CONFIG_DIR` 时为 `$CLAUDE_CONFIG_DIR/settings.json`。

788 790 

789### 在您信任文件夹之前运行什么791### 在您信任文件夹之前运行什么

790 792 

791每一行是存储库可以提供的一种内容。列是两种您尚未信任该文件夹本身的情况:您仅信任了父文件夹,或您在那里运行了 `claude -p` 或 SDK,这永远不会显示信任对话框。父文件夹列不适用于[嵌套存储库](#project-allow-rules-and-workspace-trust)内:在交互式会话中 Claude Code 为其显示信任对话框,`claude -p` 或 SDK 运行遵循 `claude -p` 列。793每一行是仓库可以提供的一种内容。列是两种您尚未信任该文件夹本身的情况:您仅信任了父文件夹,或您在那里运行了 `claude -p` 或 SDK,这永远不会显示信任对话框。父文件夹列不适用于[嵌套仓库](#project-allow-rules-and-workspace-trust)内:在交互式会话中 Claude Code 为其显示信任对话框,在那里运行的 `claude -p` 或 SDK 遵循 `claude -p` 列。

792 794 

793| 存储库提供的内容 | 您仅信任了父文件夹 | `claude -p` 或 SDK,文件夹从未被信任 |795| 仓库提供的内容 | 您仅信任了父文件夹 | `claude -p` 或 SDK,文件夹从未被信任 |

794| :- | :- | :- |796| :- | :- | :- |

795| 设置文件中的 [Hooks](https://code.claude.com/docs/zh-CN/hooks.md)、[`env`](https://code.claude.com/docs/zh-CN/settings-reference#env) 块和辅助命令(如 [`apiKeyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#apikeyhelper)),以及项目技能的 [hooks](https://code.claude.com/docs/zh-CN/hooks.md#hooks-in-skills-and-agents) 和 [`allowed-tools`](https://code.claude.com/docs/zh-CN/skills#pre-approve-tools-for-a-skill) | 已使用 | 已使用。工作区信任在任何会话中都不会限制技能的 `allowed-tools` |797| 设置文件中的 [Hooks](https://code.claude.com/docs/zh-CN/hooks.md)、[`env`](https://code.claude.com/docs/zh-CN/settings-reference#env) 块和辅助命令(如 [`apiKeyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#apikeyhelper)),以及项目 skill 的 [hook](https://code.claude.com/docs/zh-CN/hooks.md#hooks-in-skills-and-agents) 和 [`allowed-tools`](https://code.claude.com/docs/zh-CN/skills#pre-approve-tools-for-a-skill) | 已使用 | 已使用。工作区信任在任何会话中都不会限制 skill 的 `allowed-tools` |

796| `.claude/settings.json` 中的 `permissions.allow` 规则和 `additionalDirectories` | 在您接受信任对话框之前不使用,对话框再次出现列出它们 | 不使用。Claude Code 向 stderr 打印 [`this workspace has not been trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-has-not-been-trusted) 警告 |798| `.claude/settings.json` 中的 `permissions.allow` 规则和 `additionalDirectories` | 在您接受信任对话框之前不使用,对话框再次出现列出它们 | 不使用。Claude Code 向 stderr 打印 [`this workspace has not been trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-has-not-been-trusted) 警告 |

797| 项目[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#hooks-in-subagent-frontmatter)中的 Frontmatter hooks、项目 [`@skills-dir` 插件](https://code.claude.com/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 和来自存储库或 `--add-dir` 目录的 [`extraKnownMarketplaces`](https://code.claude.com/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目 | 不使用,不提供对话框 | 不使用 |799| 项目[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#hooks-in-subagent-frontmatter)中的 frontmatter hook、项目 [`@skills-dir` 插件](https://code.claude.com/docs/zh-CN/plugins/loading#plugins-shared-through-a-repository) 和来自仓库或 `--add-dir` 目录的 [`extraKnownMarketplaces`](https://code.claude.com/docs/zh-CN/settings-reference#extraknownmarketplaces) 条目 | 不使用,不提供对话框 | 不使用 |

798| 来自存储库或 `--add-dir` 目录的子代理 frontmatter 中的内联 [`mcpServers`](https://code.claude.com/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent) | 不使用,不提供对话框 | 不使用 |800| 来自仓库或 `--add-dir` 目录的子代理 frontmatter 中的内联 [`mcpServers`](https://code.claude.com/docs/zh-CN/sub-agents#scope-mcp-servers-to-a-subagent) | 不使用,不提供对话框 | 不使用 |

799| `.mcp.json` 中的服务器,包括存储库[在其自己的设置中批准的](https://code.claude.com/docs/zh-CN/mcp.md#project-server-approvals-and-workspace-trust)服务器 | Claude Code 在连接它们之前询问您。存储库自己的批准不计数 | 连接而不询问,无论是否批准。SDK 仅在 `settingSources` 包括项目设置时加载它们。同一文件夹中的 `claude mcp list` 仍然将此类服务器报告为待处理 |801| `.mcp.json` 中的服务器,包括仓库[在其自己的设置中批准的](https://code.claude.com/docs/zh-CN/mcp.md#project-server-approvals-and-workspace-trust)服务器 | Claude Code 在连接它们之前询问您。仓库自己的批准不计数 | 连接而不询问,无论是否批准。SDK 仅在 `settingSources` 包括项目设置时加载它们。同一文件夹中的 `claude mcp list` 仍然将此类服务器报告为待处理 |

800| `.mcp.json` 中服务器上的 [`headersHelper`](https://code.claude.com/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs) | 在您接受信任对话框之前不运行,对话框再次出现命名声明辅助程序的位置。Claude Code 仅使用其静态 `headers` 连接服务器直到那时 | 不运行。Claude Code 仅使用其静态 `headers` 连接服务器,并为每个服务器向 stderr 打印 [`headersHelper not run`](https://code.claude.com/docs/zh-CN/errors#headershelper-not-run) 行 |802| `.mcp.json` 中服务器上的 [`headersHelper`](https://code.claude.com/docs/zh-CN/mcp#trust-a-folder-before-its-headershelper-runs) | 在您接受信任对话框之前不运行,对话框再次出现命名声明辅助程序的位置。Claude Code 仅使用其静态 `headers` 连接服务器直到那时 | 不运行。Claude Code 仅使用其静态 `headers` 连接服务器,并为每个服务器向 stderr 打印 [`headersHelper not run`](https://code.claude.com/docs/zh-CN/errors#headershelper-not-run) 行 |

801 803 

802对于需要此确切文件夹被信任的行,手动信任它:在 `~/.claude.json` 中设置 `projects["<path>"].hasTrustDialogAccepted` 为 `true`,其中 `<path>` 是存储库根目录,或存储库外的文件夹本身。Claude Code 在跳过的子代理 hook 或内联 MCP 服务器的调试日志行中打印确切的键,在跳过的允许规则的 stderr 警告中,以及在跳过的辅助程序的 `headersHelper not run` 行中。804对于需要此确切文件夹被信任的行,手动信任它:在 `~/.claude.json` 中设置 `projects["<path>"].hasTrustDialogAccepted` 为 `true`,其中 `<path>` 是仓库根目录,或仓库外的文件夹本身。Claude Code 在跳过的子代理 hook 或内联 MCP 服务器的调试日志行中打印确切的键,在跳过的允许规则的 stderr 警告中,以及在跳过的辅助程序的 `headersHelper not run` 行中。

803 805 

804在您未编写的存储库中运行 `claude -p` 之前,决定它可能在您的机器上运行什么:806在您未编写的仓库中运行 `claude -p` 之前,决定它可能在您的机器上运行什么:

805 807 

806* 传递 `--setting-sources user`,或设置 SDK 的 `settingSources` 而不包括项目设置,以便 Claude Code 既不读取项目的设置文件也不读取其 `.mcp.json`808* 传递 `--setting-sources user`,或设置 SDK 的 `settingSources` 而不包括项目设置,以便 Claude Code 既不读取项目的设置文件也不读取其 `.mcp.json`

807* 使用 [`--bare`](https://code.claude.com/docs/zh-CN/headless#start-faster-with-bare-mode) 启动,以便 Claude Code 不读取项目中的 hooks、skills、自定义命令、子代理、插件或 `.mcp.json` 服务器。项目的 `env` 块和 `awsAuthRefresh` 等辅助程序在其设置文件中仍然适用,Claude Code 仅从 `--settings` 读取 `apiKeyHelper`809* 使用 [`--bare`](https://code.claude.com/docs/zh-CN/headless#start-faster-with-bare-mode) 启动,以便 Claude Code 不读取项目中的 hook、skill、自定义命令、子代理、插件或 `.mcp.json` 服务器。项目的 `env` 块和 `awsAuthRefresh` 等辅助程序在其设置文件中仍然适用,Claude Code 仅从 `--settings` 读取 `apiKeyHelper`

808* 传递 `--settings '{"disableAllHooks": true}'` 以[关闭该运行的 hooks](https://code.claude.com/docs/zh-CN/hooks.md#disable-or-remove-hooks)。仅在您的用户设置中设置它是不够的,因为存储库的项目设置优先于您的设置,可以将其设置回 `false`810* 传递 `--settings '{"disableAllHooks": true}'` 以[关闭该运行的 hook](https://code.claude.com/docs/zh-CN/hooks.md#disable-or-remove-hooks)。仅在您的用户设置中设置它是不够的,因为仓库的项目设置优先于您的设置,可以将其设置回 `false`

809* 添加 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目以在每个会话类型中按名称拒绝 `.mcp.json` 服务器811* 添加 [`disabledMcpjsonServers`](https://code.claude.com/docs/zh-CN/settings-reference#disabledmcpjsonservers) 条目以在每个会话类型中按名称拒绝 `.mcp.json` 服务器

810 812 

811## 示例配置813## 示例配置

Details

313 313 

314要查看 API 在请求期间自行运行的工具调用(例如对 [advisor 工具](https://code.claude.com/docs/zh-CN/advisor.md)的调用),请读取 `result.serverToolUses`。Claude Code 不会运行这些调用,因此不会为它们触发任何 `tool.call` 或 `tool.check` hook。当响应中没有此类调用时,该字段不存在;该字段需要 Claude Code v2.1.290 或更高版本。314要查看 API 在请求期间自行运行的工具调用(例如对 [advisor 工具](https://code.claude.com/docs/zh-CN/advisor.md)的调用),请读取 `result.serverToolUses`。Claude Code 不会运行这些调用,因此不会为它们触发任何 `tool.call` 或 `tool.check` hook。当响应中没有此类调用时,该字段不存在;该字段需要 Claude Code v2.1.290 或更高版本。

315 315 

316#### 将请求发送到不同的模型

317 

318如果在 `model` 为别名(例如 `haiku`)时 `turn.step` 请求因模型错误而失败,请更新到 Claude Code v2.1.309 或更高版本,或使用完整的模型 ID。在 v2.1.309 之前,别名会按原样发出。

319 

320要将请求发送到不同的模型,请将更改了 `model` 的事件传给 `next`,例如 `yield* next({ ...e, model: 'haiku' })`。

321 

316### 更改或拒绝设置读取322### 更改或拒绝设置读取

317 323 

318`settings.read` hook 会在 mod 的读取和 Claude Code 自身的读取时运行:324使用 `settings.read` hook 可以更改或拒绝设置读取,无论是 mod 的读取还是 Claude Code 自身的读取:

319 325 

320* **mod 的读取**:某个 mod 调用 [`$.settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/api#read-one-source-or-one-key)。326* **mod 的读取**:某个 mod 调用 [`$.settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/api#read-one-source-or-one-key)。

321* **Claude Code 自身的读取**:Claude Code 构建会话的合并设置。当设置或已加载的插件发生变化时,此读取会再次进行。327* **Claude Code 自身的读取**:您的 hook 首次运行于 Claude Code 合并会话设置时,此时会话的 mod 已加载完毕。当设置或已加载的插件发生变化时,您的 hook 会再次运行。

322 328 

323在依赖任一读取之前,请检查守卫和您的版本:329请检查哪些 mod 会收到此事件以及您的 Claude Code 版本:

324 330 

325* **内置守卫**:存在托管设置时,或者以 Team 或 Enterprise [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 作为会话的凭据时,[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)可能会跳过您安装或通过 `--plugin-dir` 加载的 mod 中的此 hook。要进行检查,请在[调试日志](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#read-the-debug-log)中搜索 `settings.read bypassed by cc-plugin-sec-default`。如果包含该文本的行指明了您的 mod,请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。331* **内置守卫**:存在托管设置时,或者以 Team 或 Enterprise [`/login`](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence) 作为会话的凭据时,[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)可能会跳过您安装或通过 `--plugin-dir` 加载的 mod 中的此 hook。要进行检查,请在[调试日志](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#read-the-debug-log)中搜索 `settings.read bypassed by cc-plugin-sec-default`。如果包含该文本的行指明了您的 mod,请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。

326* **版本**:该事件在 Claude Code 自身的读取上触发,以及 `e.layers` 字段,都需要 Claude Code v2.1.304 或更高版本。332* **版本**:该事件在 Claude Code 自身的读取上触发,以及 `e.layers` 字段,都需要 Claude Code v2.1.304 或更高版本。


336 342 

337#### 区分 Claude Code 自身的读取与 mod 的读取343#### 区分 Claude Code 自身的读取与 mod 的读取

338 344 

339在 [Claude Code 自身的读取](#settings-read-hook)中,[`next.origin`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#the-hook-function) 为 `{ plugin: 'engine', tier: 'core' }`;在 mod 的读取中,`next.origin.plugin` 为发起调用的 mod 的名称。345检查 [`next.origin`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#the-hook-function):

346 

347* **Claude Code 自身的读取**:`{ plugin: 'engine', tier: 'core' }`

348* **mod 的读取**:`plugin` 为发起调用的 mod 的名称

340 349 

341#### `settings.read` hook 可以返回的内容350#### `settings.read` hook 可以返回的内容

342 351 

343您的 hook 可以原样返回 [`next(e)`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#the-hook-function) 的结果、返回自己的 `{ value }`,或返回 `{ deny: reason }`。在 [Claude Code 自身的读取](#settings-read-hook)和 mod 的读取中,`{ value }` 会替换读取所给出的内容,`{ deny: reason }` 会拒绝该读取:352原样返回 [`next(e)`](#settings-read-next) 的结果以保持读取不变,或返回以下内容之一:

344 353 

345| 返回 | 在 Claude Code 自身的读取中 | 在 mod 的读取中 |354| 返回 | 在 [Claude Code 自身的读取](#settings-read-hook)中 | 在 mod 的读取中 |

346| :- | :- | :- |355| :- | :- | :- |

347| `{ value }` | 对于您更改的每个键,如果您返回的内容[符合该键的 schema](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-refused),它会替换会话合并设置中该键的整个值 | 该 mod 的调用会解析为您的 `value`,或解析为从您的 `value` 中取出的、它所请求的 `key`,因此请返回一个完整的对象,而不是数组 |356| `{ value }` | 对于每个被更改的键,如果您的值[符合该键的 schema](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-refused),您将替换会话合并设置中该键的整个值 | 该 mod 的调用将解析为您的 `value`,或解析为从您的 `value` 中取出的它所请求的 `key`,因此请返回一个完整的对象,而不是数组 |

348| `{ deny: reason }` | 会话保留在任何 hook 作出响应之前合并得到的设置,并且[调试日志会记录您的 `reason`](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot#settings-read-refused) | 该 mod 的调用会以 `<calling mod>: $.settings.read: <reason>` reject |357| `{ deny: reason }` | 会话保留在任何 hook 作出响应之前合并得到的设置,并且[调试日志会记录您的 `reason`](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot#settings-read-refused) | 该 mod 的调用会以 `<calling mod>: $.settings.read: <reason>` reject |

349 358 

350在 Claude Code 自身的读取中,请基于 [`next(e)` 的 `value`](#settings-read-next) 构建您的 `{ value }`,因为您遗漏的键会变为未设置。对于 Claude Code 从每个来源分别读取的键(例如 `env`),在您的 `value` 中更改它[不会产生效果](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-no-effect)。359在 Claude Code 自身的读取中,请基于 [`next(e)` 的 `value`](#settings-read-next) 构建您的 `{ value }`,因为您遗漏的键会变为未设置。对于 Claude Code 从每个来源分别读取的键(例如 `env`),在您的 `value` 中更改它[不会产生效果](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-no-effect)。


373})382})

374```383```

375 384 

376在 Claude Code 自身的读取中,如果您的 hook 返回了超出该键 schema 的值(例如字符串),则仅该键会保留在任何 hook 作出响应之前合并得到的值。调试日志随后会显示 [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot#settings-read-key-refused)。如果您的值符合要求但该键仍未更改,请参阅[返回的键为何不产生效果](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-no-effect)。385在 Claude Code 自身的读取中,如果您的 hook 返回了超出该键 schema 的值(例如字符串),则仅该键会保留在任何 hook 作出响应之前合并得到的值。调试日志随后会显示 [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot#settings-read-key-refused)。如果您的值符合要求但该键仍未更改,请参阅[某个键为何不生效](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#settings-read-key-no-effect)。

377 386 

378### 处理设置 hook 事件387### 处理设置 hook 事件

379 388 

Details

421Note: Type a note and press Enter421Note: Type a note and press Enter

422```422```

423 423 

424添加 `rows` 可让该字段容纳多行。Enter 仍会提交,在 Enter 前输入反斜杠会开始新行,在[终端支持的情况下](https://code.claude.com/docs/zh-CN/terminal-config.md#enter-multiline-prompts)按 Shift+Enter 也可以。图库展示了[带有 `rows` 的字段](https://code.claude.com/docs/zh-CN/plugins/mods/gallery#input)。424将 `rows` 设为 2 或更大,即可获得[可容纳多行的字段](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md#input)。

425 425 

426[界面图库](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md)提供了大多数元素的示例和屏幕截图。此表列出了每个元素:426[界面图库](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md)提供了大多数元素的示例和屏幕截图。此表列出了每个元素:

427 427 


546| 键 | 它做什么 |546| 键 | 它做什么 |

547| :- | :- |547| :- | :- |

548| Tab | 移动到下一个控件 |548| Tab | 移动到下一个控件 |

549| 上和下 | 在绘制内容能完整显示时在控件之间移动。当窗格或条带的行数超过它可以显示的行数时,它们会滚动它。在 `Input` 中,它们会先[在字段的各行之间移动](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md#input)。 |549| 上和下 | 在绘制内容能完整显示时在控件之间移动。当窗格或条带的行数超过它可以显示的行数时,它们会滚动它。在终端中的 `Input` 中,它们会[在字段的各行之间移动](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md#input),并在位于字段的第一行或最后一行时移动到其前一个或后一个控件。 |

550| Enter | 按下获得焦点的 `Button`、提交获得焦点的 `Input` 或在 `Select` 中选择 |550| Enter | 按下获得焦点的 `Button`、提交获得焦点的 `Input` 或在 `Select` 中选择 |

551| 按钮的快捷键 | 按下该按钮。当 `Input` 拥有焦点时,每个可打印键都进入字段。 |551| 按钮的快捷键 | 按下该按钮。当 `Input` 拥有焦点时,每个可打印键都进入字段。 |

552| Page Up、Page Down、Home 和 End | 当您的窗格或条带的行数超过它可以显示的行数时,滚动它 |552| Page Up、Page Down、Home 和 End | 当您的窗格或条带的行数超过它可以显示的行数时,滚动它 |

Details

110 110 

111### 命令和配置111### 命令和配置

112 112 

113命令和配置事件在命令运行或被列出时、`/config` 行显示或更改时,以及读取设置时触发:

114 

115| 事件 | 触发时机 | hook 可以返回 |113| 事件 | 触发时机 | hook 可以返回 |

116| :- | :- | :- |114| :- | :- | :- |

117| [`command.run`](https://code.claude.com/docs/zh-CN/plugins/mods/api#add-a-command) | 命令即将运行 | `{ text }`、`{}` 或 `next(e)` |115| [`command.run`](https://code.claude.com/docs/zh-CN/plugins/mods/api#add-a-command) | 命令即将运行 | `{ text }`、`{}` 或 `next(e)` |

118| `command.describe` | 每个命令一次,用于命令列表 | `{ description, argumentHint, isHidden }` |116| `command.describe` | 每个命令一次,用于命令列表 | `{ description, argumentHint, isHidden }` |

119| `config.set` | `/config` 行即将更改 | `next({ ...e, value })` 或 `{ deny: reason }` |117| `config.set` | `/config` 行即将更改 | `next({ ...e, value })` 或 `{ deny: reason }` |

120| `config.describe` | 每个 `/config` 行一次 | `{ label, description, isHidden }` |118| `config.describe` | 每个 `/config` 行一次 | `{ label, description, isHidden }` |

121| [`settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook) | mod 调用 [`$.settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network),或 Claude Code 构建会话的合并设置时 | `next(e)`、`{ value }` 或 `{ deny: reason }` |119| [`settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook) | mod 调用 [`$.settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network),或 Claude Code 构建会话的合并设置时。在 Claude Code 自身读取时触发以及 `e.layers` 字段需要 Claude Code v2.1.304 或更高版本 | `next(e)`、`{ value }` 或 `{ deny: reason }` |

122 120 

123#### `settings.read` 上的 `e.layers` 和 `e.source`121#### `settings.read` 上的 `e.layers` 和 `e.source`

124 122 

125* **`e.layers`**:每个正在使用且包含设置的来源对应一个 `{ source, settings }` 对象,[优先级](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)最低的排在最前。请参阅[`settings.read` hook 接收的内容](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-receives)。123* **`e.layers`**:每个正在使用且包含设置的来源对应一个 `{ source, settings }` 对象,[优先级](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)最低的排在最前。请参阅[`settings.read` hook 接收的内容](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-receives)。

126* **`e.source`**:mod 所请求的那一个来源,如 `$.settings.read({ source: 'policy' })`。在 Claude Code 自身的读取以及任何其他对合并设置的读取中不存在124* **`e.source`**:mod 所请求的那一个来源,如 `$.settings.read({ source: 'policy' })`。在 Claude Code 自身的读取以及对合并设置的读取中不存在

127 

128在 `settings.read` 上,该事件在 Claude Code 自身读取时触发以及 `e.layers` 字段需要 Claude Code v2.1.304 或更高版本。有关该 hook 的运行时机以及它可以返回的内容(附示例),请参阅[更改或拒绝设置读取](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-hook)。

129 125 

130### 轮次126### 轮次

131 127 


271| :- | :- | :-: | :-: | :-: |267| :- | :- | :-: | :-: | :-: |

272| [`Box`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、[`gap`、`padding`、`margin`](#box-spacing-steps)、`width`、`height`、`minWidth`、`minHeight`、[`borderStyle`](#box-border-styles)、`borderColor`、`borderDimColor`、`backgroundColor`、`position`、`top`、`left`、`right`、`bottom`、`overflow`、`display`、`hover` | ✓ | ✓ | ✓ |268| [`Box`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、[`gap`、`padding`、`margin`](#box-spacing-steps)、`width`、`height`、`minWidth`、`minHeight`、[`borderStyle`](#box-border-styles)、`borderColor`、`borderDimColor`、`backgroundColor`、`position`、`top`、`left`、`right`、`bottom`、`overflow`、`display`、`hover` | ✓ | ✓ | ✓ |

273| [`Text`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、[`bold`](#text-bold)、`italic`、`underline`、`strikethrough`、`dimColor`、`inverse`、`wrap`、[`size`、`weight`、`mono`、`tabular`](#text-typography)、`hover` | ✓ | ✓ | ✓ |269| [`Text`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、[`bold`](#text-bold)、`italic`、`underline`、`strikethrough`、`dimColor`、`inverse`、`wrap`、[`size`、`weight`、`mono`、`tabular`](#text-typography)、`hover` | ✓ | ✓ | ✓ |

274| [`Button`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action`、`hover` | ✓ | ✓ | ✓ |270| [`Button`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`children`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action`、`variant`、`role`、`hover` | ✓ | ✓ | ✓ |

275| [`Link`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。请参阅[限制](#limits)。 | ✓ | ✓ | ✓ |271| [`Link`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。请参阅[限制](#limits)。 | ✓ | ✓ | ✓ |

276| [`Code`](https://code.claude.com/docs/zh-CN/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ | ✓ |272| [`Code`](https://code.claude.com/docs/zh-CN/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ | ✓ |

277| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ | ✓ |273| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ | ✓ |


288* **横栏上的数字 hotkey**:当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发284* **横栏上的数字 hotkey**:当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发

289* **折叠的横栏**:当横栏处于[折叠](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#when-the-user-collapses-the-band)状态时,`action` 绑定和 hotkey 都不会按下其中的按钮285* **折叠的横栏**:当横栏处于[折叠](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#when-the-user-collapses-the-band)状态时,`action` 绑定和 hotkey 都不会按下其中的按钮

290* **两个按钮使用同一 hotkey**:当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它286* **两个按钮使用同一 hotkey**:当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它

287* **`variant`**:`primary` 或 `secondary`,其他任何值都会抛出错误。在终端中,`primary` 按钮会以强调色绘制,除非它设置了 `plain`。

288* **`role`**:`dismiss` 将按钮标记为关闭按钮,其他任何值都会抛出错误。请在您的 `onPress` 中执行关闭操作。在包含文本和一行按钮的横栏中,Desktop 应用可以将该行的第一个 `dismiss` 按钮绘制为其自身的关闭控件。终端会像未设置 `role` 时一样绘制该按钮。

289 

290`Button` 可以用 `children` 代替 `label`:

291 

292* **children 可以是什么**:字符串和 `Text` 元素,例如名称后跟一段暗淡的详细信息,或一个彩色标签。Claude Code 会拒绝 `Button` 内的任何其他元素。

293* **为按钮命名**:`label` 为按钮命名,默认为其 children 的文本。对于 children 不是单个字符串的按钮,请为其提供 `key` 或 `label`。

294* **在终端中**:children 绘制在 label 原本所在的位置,在其上任意位置按下都算作一次按下,因此您可以将列表的每一行做成单个按钮

295* **在 Desktop 应用和 VS Code 扩展中**:按钮绘制其 `label`

296 

297> [!NOTE]

298>

299> children 不是单个字符串的 `Button` 需要 Claude Code v2.1.295 或更高版本。

291 300 

292`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。301`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。

293 302 


295 304 

296* **`Box`**:`position` 及其 `top`、`left`、`right` 和 `bottom`,`alignSelf`、`borderDimColor` 和 `hover`305* **`Box`**:`position` 及其 `top`、`left`、`right` 和 `bottom`,`alignSelf`、`borderDimColor` 和 `hover`

297* **`Text`**:`size`、`mono`、`tabular` 和 `hover`306* **`Text`**:`size`、`mono`、`tabular` 和 `hover`

298* **`Button`**:`hotkey`、`plain`、`autoFocus`、`action` 和 `hover`,因此用户在其中通过点击来按下按钮,或在按钮获得焦点后按 Enter307* **`Button`**:`hotkey`、`plain`、`autoFocus`、`action` 和 `hover`,因此用户在其中通过点击来按下按钮,或在按钮获得焦点后按 Enter。该扩展也会忽略 `variant` 和 `role`。

299* **`Code`**:`language`、`path`、`startLine`、`format` 和 `wrap`,因此代码绘制时不带颜色或行号,而 `format: 'diff'` 代码块会显示 diff 的原始文本308* **`Code`**:`language`、`path`、`startLine`、`format` 和 `wrap`,因此代码绘制时不带颜色或行号,而 `format: 'diff'` 代码块会显示 diff 的原始文本

300* **`Input` 和 `Select`**:`autoFocus`309* **`Input` 和 `Select`**:`autoFocus`,以及 `Input` 上的 `rows`

301* **`Svg`**:`isInteractive`310* **`Svg`**:`isInteractive`

302 311 

303### `Box` 边框样式312### `Box` 边框样式


364| `.catch` 处理程序的执行时间 | 1 秒 |373| `.catch` 处理程序的执行时间 | 1 秒 |

365| 所有 `session.end` hook 合计 | 与 [SessionEnd hook 预算](https://code.claude.com/docs/zh-CN/hooks.md#sessionend-input)相同,除非您更改,否则为 1.5 秒,从您设置中的 `SessionEnd` hook 完成时开始计算 |374| 所有 `session.end` hook 合计 | 与 [SessionEnd hook 预算](https://code.claude.com/docs/zh-CN/hooks.md#sessionend-input)相同,除非您更改,否则为 1.5 秒,从您设置中的 `SessionEnd` hook 完成时开始计算 |

366| `$.process.run` 超时时间 | 默认 30 秒,最长 10 分钟 |375| `$.process.run` 超时时间 | 默认 30 秒,最长 10 分钟 |

376| `$.process.run` 的 `stdout` 和 `stderr` | 各 4 MiB。当其中一项被截断时,`isStdoutTruncated` 或 `isStderrTruncated` 为 `true`。 |

367| `$.model.complete` `maxTokens` | 默认 1024,最多 64,000 或模型的输出上限 |377| `$.model.complete` `maxTokens` | 默认 1024,最多 64,000 或模型的输出上限 |

368| `$.fs.read` 和 `$.fs.write` | 单个文件 4 MiB |378| `$.fs.read` 和 `$.fs.write` | 单个文件 4 MiB |

369| `$.http.fetch` 请求正文 | 4 MiB,按字符计算。正文更大的调用会被拒绝。 |379| `$.http.fetch` 请求正文 | 4 MiB,按字符计算。正文更大的调用会被拒绝。 |


381| `$.store` | JSON 总计 4 MiB |391| `$.store` | JSON 总计 4 MiB |

382| `$.session.messages()` | 最新的 4,096 个条目 |392| `$.session.messages()` | 最新的 4,096 个条目 |

383| `$.ui.invalidate('ui.render')` 重绘 | 限制为每秒 10 次;在终端中,对于可见窗格、展开区域以及输入框下方的提示行,限制为每秒 30 次。更早到达的调用会被合并。 |393| `$.ui.invalidate('ui.render')` 重绘 | 限制为每秒 10 次;在终端中,对于可见窗格、展开区域以及输入框下方的提示行,限制为每秒 30 次。更早到达的调用会被合并。 |

384| `$.ui.toast` | 显示 4 秒,除非您传入 `{ timeoutMs }` |394| `$.ui.toast` | 显示 4 秒,除非您传入 `{ timeoutMs }`。在[经典渲染器](https://code.claude.com/docs/zh-CN/fullscreen.md#enable-fullscreen-rendering)中,mod 较新的 toast 可能会[取代其较早的 toast](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#a-toast-doesn’t-appear),无论较早的 toast 正在显示还是正在等待显示。 |

385| 非用户主动打开的窗格 | 从终端第 144 列起放置;用户打开过一次后,从第 110 列起放置 |395| 非用户主动打开的窗格 | 从终端第 144 列起放置;用户打开过一次后,从第 110 列起放置 |

396| mods API 调用参数的嵌套深度 | 28,000 层。超过此深度,调用会被拒绝,消息以 `nesting deeper than 28000 levels is not supported` 结尾。需要 Claude Code v2.1.299 或更高版本。 |

397| 传递给 `next` 的已更改事件的嵌套深度,[异步生成器 hook](#events)(例如 `turn.step` 上的 hook)除外 | 28,000 层。超过此深度,`next` 会拒绝,消息以 `nesting deeper than 28000 levels is not supported` 结尾。需要 Claude Code v2.1.299 或更高版本。 |

398| hook 返回值的嵌套深度,`ui.render`、`ui.resolve` 和异步生成器 hook 除外 | 28,000 层。超过此深度,该 hook 的结果会被拒绝,[报告此问题的通知](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)中包含 `nesting deeper than 28000 levels is not supported`。需要 Claude Code v2.1.299 或更高版本。 |

386| 在 hook 模块的单个文件中相互嵌套的作用域(如函数、代码块和循环) | 2,000 |399| 在 hook 模块的单个文件中相互嵌套的作用域(如函数、代码块和循环) | 2,000 |

387| 命令、工具、子代理类型和窗格名称 | 字母、数字、`_` 和 `-`,最多 64 个字符 |400| 命令、工具、子代理类型和窗格名称 | 字母、数字、`_` 和 `-`,最多 64 个字符 |

388| 单个 `claude plugin test` 测试 | 5 秒,除非该测试设置了 `timeoutMs` |401| 单个 `claude plugin test` 测试 | 5 秒,除非该测试设置了 `timeoutMs` |

Details

341 341 

342### `settings.read` hook 返回的某个键不生效342### `settings.read` hook 返回的某个键不生效

343 343 

344返回的 `env` 条目不会成为环境变量。返回的 `allow`、`ask` 和 `deny` 规则不会在工具调用时被检查。请在[设置文件](https://code.claude.com/docs/zh-CN/settings.md)中设置这些内容,或对环境变量调用 [`$.env.set`](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network)。344如果您在 [Claude Code 自身的读取](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-hook)中返回权限规则或 `env`,这些规则不会在工具调用时被检查,`env` 条目也不会成为环境变量。对这两者请使用[设置文件](https://code.claude.com/docs/zh-CN/settings.md),或对 `env` 使用 [`$.env.set`](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network)。

345 345 

346对于其他键,请查看[哪些 mod 会收到 `settings.read` 以及从哪个版本开始](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook),然后在[调试日志](#read-the-debug-log)中搜索 `settings.read`,并查找以下某一行:346对于其他键,请查看[哪些 mod 会收到 `settings.read` 以及从哪个版本开始](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook),然后在[调试日志](#read-the-debug-log)中搜索 `settings.read`,并查找以下某一行:

347 347 


349| :- | :- |349| :- | :- |

350| `settings.read hook skipped`,位于您的 mod 名称之后 | 您的 hook 失败。[修复该行报告的错误](#hook-skipped)。 |350| `settings.read hook skipped`,位于您的 mod 名称之后 | 您的 hook 失败。[修复该行报告的错误](#hook-skipped)。 |

351| `settings.read bypassed by cc-plugin-sec-default`,所在行在其前面列出了您的 mod | [内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)跳过了您的 hook。请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。 |351| `settings.read bypassed by cc-plugin-sec-default`,所在行在其前面列出了您的 mod | [内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)跳过了您的 hook。请让您组织的管理员[将该 mod 安装为组织的 mod 之一](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)。 |

352| `settings.read: the answer for <key> is no value the key can hold` | 返回的值不符合该键的 schema。[返回一个它允许的值](#settings-read-key-refused)。 |352| `settings.read: the answer for <key> is no value the key can hold` | Claude Code 拒绝了某个 hook 为该键返回的值。该 hook 可能是您的,也可能是其他 mod 的。请按照[适用于您情况的步骤](#settings-read-key-refused)操作。 |

353| `settings.read: the merge never settles for <key>` | 该行列出的键保留设置来源中的值。请在设置文件中设置它们。 |353| `settings.read: the merge never settles for <key>` | 该行列出的键保留设置来源中的值。请在设置文件中设置它们。 |

354| `answered settings.read without next()`,位于某个 mod 名称之后 | 仅当该 mod [在您的 mod 之前运行](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)时才相关。此时您的 hook 在该次读取中未运行。[关闭该 mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off),或者如果它是由您的组织部署的,请让其管理员关闭。 |354| `answered settings.read without next()`,位于某个 mod 名称之后 | 如果所列 mod [在您的 mod 之前运行](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in),则您的 hook 会受到影响。此时您的 hook 在该次读取中未运行。[关闭该 mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off),或者如果它是由您的组织部署的,请让其管理员关闭。 |

355| `settings.read: refused to the engine` | 读取被拒绝,因此没有任何 hook 的 `{ value }` 生效。[找出拒绝它的原因](#settings-read-refused)。 |355| `settings.read: refused to the engine` | 您的值未生效,因为 Claude Code 自身的读取被拒绝。[找出拒绝它的原因](#settings-read-refused)。 |

356 356 

357如果没有任何一行能解释该键,请检查在您的 mod 之前运行的 mod 中是否有[更改该键](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-example)的 `settings.read` hook。关闭该 mod,或让您组织的管理员关闭。如果没有 hook 更改该键,请在设置文件中设置该键。357如果没有任何一行能解释该键,请检查在您的 mod 之前运行的 mod 中是否有[更改该键](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-example)的 `settings.read` hook。关闭该 mod,或让您组织的管理员关闭。如果没有 hook 更改该键,请在设置文件中设置该键。

358 358 

359### `the answer for <key> is no value the key can hold`359### `the answer for <key> is no value the key can hold`

360 360 

361此[调试日志](#read-the-debug-log)行表示 Claude Code 拒绝了您的 [`settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook) hook 为所列键返回的值,且仅针对该键:361此[调试日志](#read-the-debug-log)行表示 Claude Code 拒绝了某个 [`settings.read`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-hook) hook 为所列键返回的值,且仅针对该键:

362 362 

363```text theme={null}363```text theme={null}

364settings.read: the answer for <key> is no value the key can hold; the settings' own value stands364settings.read: the answer for <key> is no value the key can hold; the settings' own value stands

365```365```

366 366 

367您为所列键返回的值不符合该键的 schema,例如类型或范围不符。请返回该键的[设置参考](https://code.claude.com/docs/zh-CN/settings-reference.md)条目所允许的值。在您的值不符合要求期间,该键保留在任何 hook 应答之前从设置来源合并得到的值。该行将其称为设置自身的值。367为所列键返回的值不符合该键的 schema,例如类型或范围不符。

368 

369* **您的值不符合该键的 schema**:请返回该键的[设置参考](https://code.claude.com/docs/zh-CN/settings-reference.md)条目所允许的值。

370* **您的值符合要求**:不符合要求的值来自其他 mod 的 `settings.read` hook。要找出该 mod,请按照[逐个关闭 mod 的步骤](#settings-read-refused)操作。在每个新日志中搜索此行,而不是 `refused to the engine`。

371 

372在该值不符合要求期间,该键保留在任何 hook 应答之前从设置来源合并得到的值。该行将其称为设置自身的值。

368 373 

369### `settings.read: refused to the engine`374### `settings.read: refused to the engine`

370 375 

371此[调试日志](#read-the-debug-log)行表示 [Claude Code 自身的读取](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-hook)被拒绝,因此没有任何 hook 的 `{ value }` 生效,包括您的 hook。当某个 `settings.read` hook 使用 [`{ deny: reason }`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-returns) 拒绝该读取时,该行会带有该 hook 的原因:376当 [Claude Code 自身的读取](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#settings-read-hook)被拒绝时,您会在[调试日志](#read-the-debug-log)中看到此行,此时 Claude Code 会丢弃所有 hook 的值。当某个 `settings.read` hook 使用 [`{ deny: reason }`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-returns) 拒绝该读取时,该行会带有该 hook 的原因:

372 377 

373```text theme={null}378```text theme={null}

374settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand379settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand

375```380```

376 381 

377在您自己的 hook 代码中搜索 `<reason>` 文本:382在您的代码中搜索括号中的原因:

378 383 

379* **您的代码中有该文本**:您的 hook 拒绝了读取。当 [`next.origin`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-origin) 显示为 Claude Code 自身的读取时,让它返回 `{ value }`。384* **您的代码中有该文本**:您的 hook 拒绝了读取。当 [`next.origin`](https://code.claude.com/docs/zh-CN/plugins/mods/events#settings-read-origin) 显示为 Claude Code 自身的读取时,让它返回 `{ value }`。

380* **您的代码中没有该文本**:逐个[关闭](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off)您的其他 mod。每关闭一个后,从 shell 重新运行本会话的命令,并使用一个指向新路径的 `--debug-file`,然后在该文件中搜索 `refused to the engine`。如果该行存在,则关闭下一个 mod。如果不存在,则说明您最后关闭的 mod 拒绝了读取,请保持其关闭状态。385* **您的代码中没有该原因**:逐个[关闭](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off)您的其他 mod。如果某个 mod 是由您的组织部署的,请让其管理员将其关闭。每关闭一个后:

386 1. 从 shell 使用 `claude --debug-file ./settings-read-2.log` 启动会话,后接会话启动时所用的标志。每次使用一个新路径。

387 2. 在该文件中搜索 `refused to the engine`。如果该行存在,则关闭下一个 mod。如果不存在,则说明您最后关闭的 mod 拒绝了读取,请保持其关闭状态。

381 388 

382如果已没有其他 mod,请对您的 hook 返回的键使用[设置文件](https://code.claude.com/docs/zh-CN/settings.md)。在读取被拒绝期间,其中的值仍然有效。389如果已没有其他 mod 而该行仍然存在,请在[设置文件](https://code.claude.com/docs/zh-CN/settings.md)中设置您的 hook 返回的键。在读取被拒绝期间,其中的值仍然有效。

383 390 

384## 阅读调试日志391## 阅读调试日志

385 392 

Details

192VS Code 扩展和 Desktop 应用也有自动连接开关:192VS Code 扩展和 Desktop 应用也有自动连接开关:

193 193 

194* **VS Code 扩展**:[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box)的设置部分中的**为所有会话启用远程控制**。194* **VS Code 扩展**:[命令菜单](https://code.claude.com/docs/zh-CN/vs-code.md#use-the-prompt-box)的设置部分中的**为所有会话启用远程控制**。

195* **Desktop 应用**:**Settings > Claude Code > Connect new sessions to Remote Control**。请参阅[控制哪些会话出现在您的其他设备上](https://code.claude.com/docs/zh-CN/desktop.md#control-which-sessions-appear-on-your-other-devices)。195* **Desktop 应用**:**Settings > Code** 或 **Settings > Claude Code** 中的 **Connect new sessions to Remote Control**。请参阅[控制哪些会话出现在您的其他设备上](https://code.claude.com/docs/zh-CN/desktop.md#control-which-sessions-appear-on-your-other-devices)。

196 196 

197要改为从设置文件打开自动连接,请在您的用户 `~/.claude/settings.json` 或[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中将 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup) 设置为 `true`。在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中,Claude Code 遵守 `false` 并为该存储库关闭自动连接,但忽略 `true`,因此已检入的文件无法为打开存储库的每个人打开远程控制。197要改为从设置文件打开自动连接,请在您的用户 `~/.claude/settings.json` 或[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中将 [`remoteControlAtStartup`](https://code.claude.com/docs/zh-CN/settings-reference#remotecontrolatstartup) 设置为 `true`。在项目或本地设置(`.claude/settings.json`、`.claude/settings.local.json`)中,Claude Code 遵守 `false` 并为该存储库关闭自动连接,但忽略 `true`,因此已检入的文件无法为打开存储库的每个人打开远程控制。

198 198 


363 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 会打印计费 URL,而不是打开浏览器。`/reload-plugins` 仅在会话运行于交互式终端中时有效;没有交互式终端的会话会拒绝执行该命令。363 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 会打印计费 URL,而不是打开浏览器。`/reload-plugins` 仅在会话运行于交互式终端中时有效;没有交互式终端的会话会拒绝执行该命令。

364 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。在移动端和 Web 端,`/model` 和 `/effort` 接受参数,以代替终端中的选择器或滑块。364 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。在移动端和 Web 端,`/model` 和 `/effort` 接受参数,以代替终端中的选择器或滑块。

365 * `/mcp`:在移动应用中,返回服务器状态的文本摘要,而不是打开选择器。在 Web 端,单独使用 `/mcp` 会打开 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai)目录,而不是返回摘要。当会话运行于交互式终端中时,`reconnect`、`enable` 和 `disable` [子命令](https://code.claude.com/docs/zh-CN/commands.md#all-commands)在两端均可使用。不带服务器名称的 `/mcp reconnect` 会重试所有失败或需要身份验证的服务器。要在不使用选择器的情况下授权 claude.ai 连接器,请参阅[从 shell 重新授权连接器](#authorize-a-connector-again-from-your-shell)。365 * `/mcp`:在移动应用中,返回服务器状态的文本摘要,而不是打开选择器。在 Web 端,单独使用 `/mcp` 会打开 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai)目录,而不是返回摘要。当会话运行于交互式终端中时,`reconnect`、`enable` 和 `disable` [子命令](https://code.claude.com/docs/zh-CN/commands.md#all-commands)在两端均可使用。不带服务器名称的 `/mcp reconnect` 会重试所有失败或需要身份验证的服务器。要在不使用选择器的情况下授权 claude.ai 连接器,请参阅[从 shell 重新授权连接器](#authorize-a-connector-again-from-your-shell)。

366 * `/config`:在移动应用中,传递 `key=value` 可更改设置项,或不带参数运行以列出可设置的键。在 Web 端,`/config` 会改为打开您设置中的 Claude Code 部分。366 * `/config`:在移动应用中,传递 `key=value` 可更改设置项,或不带参数运行以列出可设置的键。在 Web 端,`/config` 会改为打开 **Settings > Code** 或 **Settings > Claude Code**。

367 * 在 Team 和 Enterprise 版本中,从移动端或 Web 端运行 `/usage-credits` 不会[向您的管理员发送使用额度请求](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。发送请求需要一个仅在交互式 CLI 中出现的确认,因此该命令会提示您改为在 CLI 中运行。367 * 在 Team 和 Enterprise 版本中,从移动端或 Web 端运行 `/usage-credits` 不会[向您的管理员发送使用额度请求](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。发送请求需要一个仅在交互式 CLI 中出现的确认,因此该命令会提示您改为在 CLI 中运行。

368 * `/autocompact`,自 v2.1.221 起:将窗口大小作为参数传递,例如 `/autocompact 500k`。不带参数时,它会以文本形式打印当前窗口大小,而不是打开该命令在终端会话中显示的对话框。368 * `/autocompact`,自 v2.1.221 起:将窗口大小作为参数传递,例如 `/autocompact 500k`。不带参数时,它会以文本形式打印当前窗口大小,而不是打开该命令在终端会话中显示的对话框。

369 * `/advisor`,自 v2.1.260 起:将模型作为参数传递,例如 `/advisor opus`,或传递 `off` 以关闭 advisor。两种形式都仅应用于当前会话,不会更改您保存的默认值。不带参数时,它会以文本形式打印当前的 advisor,而不是打开选择器。369 * `/advisor`,自 v2.1.260 起:将模型作为参数传递,例如 `/advisor opus`,或传递 `off` 以关闭 advisor。两种形式都仅应用于当前会话,不会更改您保存的默认值。不带参数时,它会以文本形式打印当前的 advisor,而不是打开选择器。

routines.md +9 −5

Details

77 77 

78**2. 命名任务并编写提示词**78**2. 命名任务并编写提示词**

79 79 

80为定时任务取一个描述性名称,并编写 Claude 每次运行的提示词。提示词是最重要的部分:任务是自主运行的,因此提示词必须是自包含的,并明确说明要做什么以及怎样算成功。在提示词输入框的模型选择器中选择一个模型。Claude 在每次运行时都会使用该模型。80为定时任务取一个描述性名称,并编写 Claude 每次运行的提示词。提示词是最重要的部分:任务是自主运行的,因此提示词必须是自包含的,并明确说明要做什么以及怎样算成功。

81 81 

82当触发器触发时,会话会将已保存的提示词作为其分配的任务接收并执行,而不是将其视为在对话中途到达的不受信任内容。触发器仅证明该提示词是由您账户上的授权会话预先存储的。因此,触发的提示词不是实时用户输入,不能充当运行期间操作的批准或同意。会话在运行期间获取的内容仍按正常方式处理。82当触发器触发时,会话会将已保存的提示词作为其分配的任务接收并执行,而不是将其视为在对话中途到达的不受信任内容。触发器仅证明该提示词是由您账户上的授权会话预先存储的。因此,触发的提示词不是实时用户输入,不能充当运行期间操作的批准或同意。会话在运行期间获取的内容仍按正常方式处理。

83 83 


115 115 

116如果您的任务需要直接访问您自己的服务或该列表之外的域名,请在运行前编辑环境的[网络访问](https://code.claude.com/docs/zh-CN/cloud-environments.md#network-access)。要使用单独的环境,请先[创建一个](https://code.claude.com/docs/zh-CN/cloud-environments.md#configure-your-environment)。116如果您的任务需要直接访问您自己的服务或该列表之外的域名,请在运行前编辑环境的[网络访问](https://code.claude.com/docs/zh-CN/cloud-environments.md#network-access)。要使用单独的环境,请先[创建一个](https://code.claude.com/docs/zh-CN/cloud-environments.md#configure-your-environment)。

117 117 

118**6. 检查连接器**118**6. 选择模型和 effort 级别**

119 

120在提示词输入框的模型选择器中选择一个模型,供 Claude 在每次运行时使用。对于 Claude Code 任务,如果该模型提供 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level),同一选择器中的 **Effort** 会显示当前级别。要更改级别,请选择其他级别。选择器的 **Default** 选项不提供任何级别。

121 

122**7. 检查连接器**

119 123 

120切换到 **Advanced settings** 的 **Connectors** 标签页。默认包含您所有已连接的 [MCP 连接器](https://code.claude.com/docs/zh-CN/mcp.md)。请移除任务不需要的连接器:Claude 可以在运行期间使用所包含的连接器,包括写入操作。有关运行何时会停下来先询问您,请参阅[运行期间的权限提示](#permission-prompts-during-a-run)。124切换到 **Advanced settings** 的 **Connectors** 标签页。默认包含您所有已连接的 [MCP 连接器](https://code.claude.com/docs/zh-CN/mcp.md)。请移除任务不需要的连接器:Claude 可以在运行期间使用所包含的连接器,包括写入操作。有关运行何时会停下来先询问您,请参阅[运行期间的权限提示](#permission-prompts-during-a-run)。

121 125 

122**7. 创建任务**126**8. 创建任务**

123 127 

124点击 **Create**。对话框关闭后,新任务的详情页将打开。任务会在其某个触发器下次匹配时运行。要立即启动一次运行,请在详情页上点击 **Run now**。128点击 **Create**。对话框关闭后,新任务的详情页将打开。任务会在其某个触发器下次匹配时运行。要立即启动一次运行,请在详情页上点击 **Run now**。

125 129 


136在 Desktop 应用中,如果打开了包含 **Local** 和 **Cloud** 的菜单,请选择 **Cloud**。随后会打开一个标题为 **New routine** 或 **New scheduled task** 的页面。填写其中的字段:140在 Desktop 应用中,如果打开了包含 **Local** 和 **Cloud** 的菜单,请选择 **Cloud**。随后会打开一个标题为 **New routine** 或 **New scheduled task** 的页面。填写其中的字段:

137 141 

138* **Name**:输入一个名称。142* **Name**:输入一个名称。

139* **Instructions**:输入提示词。在同一个输入框中,选择模型、仓库和环境。有关每一项所控制的内容,请参阅[从 Web 创建](#create-from-the-web)下的步骤。143* **Instructions**:输入提示词。在同一个输入框中,选择模型、effort 级别(如果该模型提供)、仓库和环境。有关每一项所控制的内容,请参阅[从 Web 创建](#create-from-the-web)下的步骤。

140* **Select a trigger**:选择 **Schedule**、**GitHub event** 或 **API**。对于计划,请参阅[添加计划触发器](#add-a-schedule-trigger)。对于 [GitHub 事件](#add-a-github-trigger),请选择一个仓库。对于 [API 触发器](#add-an-api-trigger),请从点击 **Create** 后打开的 **API token** 对话框中复制令牌,因为它只显示一次。要组合多个触发器,请点击 **Add another trigger**。144* **Select a trigger**:选择 **Schedule**、**GitHub event** 或 **API**。对于计划,请参阅[添加计划触发器](#add-a-schedule-trigger)。对于 [GitHub 事件](#add-a-github-trigger),请选择一个仓库。对于 [API 触发器](#add-an-api-trigger),请从点击 **Create** 后打开的 **API token** 对话框中复制令牌,因为它只显示一次。要组合多个触发器,请点击 **Add another trigger**。

141* **Connectors**:默认包含您所有已连接的连接器,因此请移除任务不需要的连接器。145* **Connectors**:默认包含您所有已连接的连接器,因此请移除任务不需要的连接器。

142 146 


153* **API 触发器**:在 Web 端的 [claude.ai/code/routines](https://claude.ai/code/routines) 编辑任务157* **API 触发器**:在 Web 端的 [claude.ai/code/routines](https://claude.ai/code/routines) 编辑任务

154* **[GitHub 触发器](#add-a-github-trigger)**:在 Web 端编辑任务,或在 CLI 中询问 Claude。从 CLI 添加需要 Claude Code v2.1.225 或更高版本158* **[GitHub 触发器](#add-a-github-trigger)**:在 Web 端编辑任务,或在 CLI 中询问 Claude。从 CLI 添加需要 Claude Code v2.1.225 或更高版本

155 159 

156没有计划触发器的定时任务(例如仅由 API 调用或 GitHub 事件启动的任务)没有下次运行时间。当 Claude 保存或更新此类任务时,CLI 不会显示下次运行时间。在 v2.1.211 之前,CLI 会为这些任务报告一个位于公元 1 年的下次运行时间。160没有计划触发器的定时任务(例如仅由 API 调用或 GitHub 事件启动的任务)没有下次运行时间。当 Claude 保存或更新此类任务时,CLI 不会显示下次运行时间。

157 161 

158## 配置触发器162## 配置触发器

159 163 

sandboxing.md +2 −1

Details

320* **调用中的每条命令都必须匹配**:`npm ci && docker compose build` 会保持在沙箱中,除非有另一个条目覆盖 `npm ci`320* **调用中的每条命令都必须匹配**:`npm ci && docker compose build` 会保持在沙箱中,除非有另一个条目覆盖 `npm ci`

321* **Claude Code 匹配的是调用的文本**:在内部调用 `docker` 的脚本或 `make` 目标不会匹配,`/usr/local/bin/docker` 也不会匹配321* **Claude Code 匹配的是调用的文本**:在内部调用 `docker` 的脚本或 `make` 目标不会匹配,`/usr/local/bin/docker` 也不会匹配

322* **某些调用会保持在沙箱中**:重定向到文件、`cd` 或诸如 `$(...)` 的命令替换会使整个调用保持在沙箱中。[参考条目](https://code.claude.com/docs/zh-CN/settings-reference.md#sandbox-excludedcommands)列出了更多会保持在沙箱中的调用322* **某些调用会保持在沙箱中**:重定向到文件、`cd` 或诸如 `$(...)` 的命令替换会使整个调用保持在沙箱中。[参考条目](https://code.claude.com/docs/zh-CN/settings-reference.md#sandbox-excludedcommands)列出了更多会保持在沙箱中的调用

323* **`git clone` 需要使用相对路径**:如果克隆指定了绝对路径、以 `~` 开头的路径或包含 `..` 段的路径,您的条目不会覆盖该克隆。如果克隆可以放在您的工作目录内,请让 Claude 使用不含 `..` 段的相对路径,例如 `vendor/lib`

323* **条目的保存位置可能很重要**:当沙箱为[管理员强制要求](#repository-settings-under-an-admin-required-sandbox)时,Claude Code 会忽略 `.claude/settings.json` 和 `.claude/settings.local.json` 中的条目324* **条目的保存位置可能很重要**:当沙箱为[管理员强制要求](#repository-settings-under-an-admin-required-sandbox)时,Claude Code 会忽略 `.claude/settings.json` 和 `.claude/settings.local.json` 中的条目

324 325 

325被排除的命令会经过常规的权限流程:326被排除的命令会经过常规的权限流程:


354 355 

355沙箱有两个相互独立的层:[文件系统隔离](#filesystem-isolation)控制沙箱命令可以读写哪些路径,[网络隔离](#network-isolation)控制它们可以访问哪些域名。关闭文件系统层后,沙箱命令将获得对主机文件系统不受限制的读写访问权限,而其网络出站流量仍限于您允许的域名。当您使用沙箱的目的是控制命令连接到哪里,而不是控制它们写入什么时,请关闭该层。356沙箱有两个相互独立的层:[文件系统隔离](#filesystem-isolation)控制沙箱命令可以读写哪些路径,[网络隔离](#network-isolation)控制它们可以访问哪些域名。关闭文件系统层后,沙箱命令将获得对主机文件系统不受限制的读写访问权限,而其网络出站流量仍限于您允许的域名。当您使用沙箱的目的是控制命令连接到哪里,而不是控制它们写入什么时,请关闭该层。

356 357 

357`sandbox.filesystem.disabled` 默认为 `false`。需要 Claude Code v2.1.216 或更高版本。358`sandbox.filesystem.disabled` 默认为 `false`。

358 359 

359> [!WARNING]360> [!WARNING]

360>361>

Details

381 381 

382| 标志及示例值 | 传递给 | 作用 |382| 标志及示例值 | 传递给 | 作用 |

383| :- | :- | :- |383| :- | :- | :- |

384| `--release-idle-session-min 30` | 您的 hook 启动的每个运行器 | 运行器在空闲达到该分钟数后释放其会话,然后以 0 退出。当会话的用户发送下一条消息时,会话会恢复,但[其尚未推送的工作将会丢失](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#additional-limitations)。 |384| `--release-idle-session-min 30` | 您的 hook 启动的每个运行器 | 运行器在空闲达到该分钟数后释放其会话,然后以 0 退出。当会话的用户发送下一条消息时,会话会恢复,但[其尚未推送的工作将会丢失](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#additional-limitations)。对于会话遗留的仍在运行的进程,请[保留会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#keep-an-idle-session-while-its-processes-run)。 |

385| `--kill-session-after-min 480` | 您的 hook 启动的每个运行器 | 将每个会话限制为该分钟数,作为[不计为空闲的会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)的兜底措施,因此请将其设置为高于您预期的最长会话时长 |385| `--kill-session-after-min 480` | 您的 hook 启动的每个运行器 | 将每个会话限制为该分钟数,作为[不计为空闲的会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)的兜底措施,因此请将其设置为高于您预期的最长会话时长 |

386| `--exit-if-unused-min 60` | 待命运行器,即您的 hook 为预热请求启动的运行器 | 从未接收会话的待命运行器会在该分钟数后退出。如果您设置了 [`--min-idle`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#orchestrator-cli-flags),除非该待命运行器是多余的,否则您会获得替代运行器,因此请使用远高于启动时间的值。 |386| `--exit-if-unused-min 60` | 待命运行器,即您的 hook 为预热请求启动的运行器 | 从未接收会话的待命运行器会在该分钟数后退出。如果您设置了 [`--min-idle`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#orchestrator-cli-flags),除非该待命运行器是多余的,否则您会获得替代运行器,因此请使用远高于启动时间的值。 |

387 387 

Details

68| `code.claude.com` 和 `claude.com` | 443 | 内置 claude-code-guide 代理的文档查找和会话期间预批准的 WebFetch 请求。阻止这些主机仅影响文档查找。 |68| `code.claude.com` 和 `claude.com` | 443 | 内置 claude-code-guide 代理的文档查找和会话期间预批准的 WebFetch 请求。阻止这些主机仅影响文档查找。 |

69| `*.frame.claudeusercontent.com` | 443 | 仅当[工件工具](https://code.claude.com/docs/zh-CN/artifacts.md#availability)对您组织中的会话可用时;默认值因计划而异,请参阅那里的可用性表。在运行器上设置 `CLAUDE_CODE_DISABLE_ARTIFACT=1` 以保持工具禁用,无论组织设置如何。 |69| `*.frame.claudeusercontent.com` | 443 | 仅当[工件工具](https://code.claude.com/docs/zh-CN/artifacts.md#availability)对您组织中的会话可用时;默认值因计划而异,请参阅那里的可用性表。在运行器上设置 `CLAUDE_CODE_DISABLE_ARTIFACT=1` 以保持工具禁用,无论组织设置如何。 |

70| `registry.npmjs.org` | 443 | 当会话安装插件时,用于获取 npm 源插件包和安装插件的 Node.js 依赖项,或当 `npx` 启动的 MCP 服务器运行时 |70| `registry.npmjs.org` | 443 | 当会话安装插件时,用于获取 npm 源插件包和安装插件的 Node.js 依赖项,或当 `npx` 启动的 MCP 服务器运行时 |

71| 您的构建所使用的软件包注册表的内部镜像,或这些注册表本身 | 443,或您镜像的端口 | 当会话安装依赖以构建或测试您的仓库时 |

71| `http-intake.logs.us5.datadoghq.com` | 443 | Anthropic 操作指标。仅当设置 `CLAUDE_CODE_BYOC_ENABLE_DATADOG=1` 时;在自托管环境中默认关闭。 |72| `http-intake.logs.us5.datadoghq.com` | 443 | Anthropic 操作指标。仅当设置 `CLAUDE_CODE_BYOC_ENABLE_DATADOG=1` 时;在自托管环境中默认关闭。 |

72| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 错误报告上传,仅在为会话帐户启用[错误报告](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)时发送。由 `DISABLE_ERROR_REPORTING=1` 或 `DISABLE_TELEMETRY=1` 抑制。 |73| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 错误报告上传,仅在为会话帐户启用[错误报告](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services)时发送。由 `DISABLE_ERROR_REPORTING=1` 或 `DISABLE_TELEMETRY=1` 抑制。 |

73| 您的云提供商用于模型请求、模型查询和续期凭据的端点,例如 `bedrock-runtime.us-east-1.amazonaws.com` 或 `aiplatform.googleapis.com` | 443 | 仅当运行器[将模型请求发送到 Amazon Bedrock 或 Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#send-model-requests-to-bedrock-or-agent-platform) 时 |74| 您的云提供商用于模型请求、模型查询和续期凭据的端点,例如 `bedrock-runtime.us-east-1.amazonaws.com` 或 `aiplatform.googleapis.com` | 443 | 仅当运行器[将模型请求发送到 Amazon Bedrock 或 Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#send-model-requests-to-bedrock-or-agent-platform) 时 |


631 632 

632在信号后的前两个阶段,运行器释放会话,释放的会话在其用户发送下一条消息时在新运行器上恢复。从第一个信号开始计数,运行器经过三个阶段:633在信号后的前两个阶段,运行器释放会话,释放的会话在其用户发送下一条消息时在新运行器上恢复。从第一个信号开始计数,运行器经过三个阶段:

633 634 

634* **在前 `n` 分钟内**:运行器正常为其会话服务,并继续强制执行 `--startup-timeout-min` 和 `--kill-session-after-min`。如果你也设置了 [`--release-idle-session-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags),运行器会释放任何用户空闲该长时间的会话;没有它,空闲会话保留在运行器上。635* **在前 `n` 分钟内**:运行器正常为其会话提供服务,并继续执行 `--startup-timeout-min` 和 `--kill-session-after-min`。如果您还设置了 [`--release-idle-session-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags),运行器会释放用户空闲达到该时长的任何会话,除非您[保留该会话](#keep-an-idle-session-while-its-processes-run)。如果未设置该标志,空闲会话会保留在运行器上。

635* **当 `n` 分钟用完时**:运行器释放它仍然持有的每个会话,无论是否空闲。运行器等待中途轮次的轮次结束,以及最多 60 秒的轮次后台任务,然后释放该会话。636* **当 `n` 分钟用完时**:运行器释放它仍然持有的每个会话,无论是否空闲。运行器等待中途轮次的轮次结束,以及最多 60 秒的轮次后台任务,然后释放该会话。

636* **当发布后宽限期用完时**:运行器排空它仍然持有的任何会话,控制平面立即将每个排空的会话重新排队到另一个运行器。发布后宽限期从 `n` 分钟用完时开始,默认为 75 秒。如果你设置 `--drain-wait-sec` 超过 60 秒,发布后宽限期是 `--drain-wait-sec` 加 15 秒。637* **当发布后宽限期用完时**:运行器排空它仍然持有的任何会话,控制平面立即将每个排空的会话重新排队到另一个运行器。发布后宽限期从 `n` 分钟用完时开始,默认为 75 秒。如果你设置 `--drain-wait-sec` 超过 60 秒,发布后宽限期是 `--drain-wait-sec` 加 15 秒。

637 638 


716 717 

717### 在固定队列上释放空闲会话718### 在固定队列上释放空闲会话

718 719 

719如果在每个运行器都在线的情况下,固定队列上的会话仍然处于排队状态,原因可能是空闲会话。默认情况下,会话在其轮次结束后仍会保留其槽位,其运行器也会保持锁定到该会话的[所有者](https://code.claude.com/docs/zh-CN/self-hosted-environments#key-concepts)。如果您团队的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)每次运行都会启动一个新会话,其空闲会话可能会占满所有槽位。720如果在每个运行器都在线的情况下,固定队列上的会话仍然处于排队状态,原因可能是空闲会话。默认情况下,会话在其轮次结束后仍会保留其槽位,其运行器也会保持锁定到该会话的[所有者](https://code.claude.com/docs/zh-CN/self-hosted-environments#key-concepts)。其他所有者的会话无法使用该运行器的空闲槽位。如果您团队的[云端定时任务](https://code.claude.com/docs/zh-CN/routines.md)每次运行都会启动一个新会话,其空闲会话可能会占满所有槽位。

720 721 

721要进行检查,请读取每个运行器 [Prometheus 指标](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference.md#prometheus-metrics)中的 `claude_code_self_hosted_runner_session_idle_seconds`。运行器持有的每个会话都有自己的序列:会话繁忙时为 `0`,否则为自其进入空闲以来的秒数。选择您允许的空闲时间:要长于人们在任务中途的停顿时间,并且足够短,使每次运行都能在定时任务的下一次运行开始之前被释放。将序列与该时间进行比较。722要进行检查,请读取每个运行器 [Prometheus 指标](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference.md#prometheus-metrics)中的 `claude_code_self_hosted_runner_session_idle_seconds`。运行器持有的每个会话都有自己的序列:会话繁忙时为 `0`,否则为自其进入空闲以来的秒数。选择您允许的空闲时间:要长于人们在任务中途的停顿时间,并且足够短,使每次运行都能在定时任务的下一次运行开始之前被释放。将序列与该时间进行比较。

722 723 


725* **没有序列的运行器**:没有会话持有它。请参阅[故障排除](#troubleshooting)下的**会话保持排队**。726* **没有序列的运行器**:没有会话持有它。请参阅[故障排除](#troubleshooting)下的**会话保持排队**。

726* **指标无响应的运行器**:其进程可能已退出。请参阅[运行器退出时](#when-the-runner-exits)下的**看起来健康的环境**。727* **指标无响应的运行器**:其进程可能已退出。请参阅[运行器退出时](#when-the-runner-exits)下的**看起来健康的环境**。

727 728 

728要释放空闲会话,请使用 [`--release-idle-session-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 及以分钟为单位的该时间启动每个运行器,例如 `--release-idle-session-min 30`。之后,运行器会释放任何空闲达到该时长的会话,无论该会话是由定时任务还是由人启动的。729要释放空闲会话,请使用 [`--release-idle-session-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 及以分钟为单位的该时间启动每个运行器,例如 `--release-idle-session-min 30`。之后,运行器会释放任何空闲达到该时长的会话,无论该会话是由定时任务还是由人启动的,除非您[为其遗留运行的进程保留该会话](#keep-an-idle-session-while-its-processes-run)。

729 730 

730* **未推送的工作**:被释放的会话会在收到下一条消息时恢复,但不包含其尚未推送的工作。要保留其提交,请参阅[恢复的会话会丢失未推送的工作](#additional-limitations)。731* **未推送的工作**:被释放的会话会在收到下一条消息时恢复,但不包含其尚未推送的工作。要保留其提交,请参阅[恢复的会话会丢失未推送的工作](#additional-limitations)。

731* **运行器退出**:释放其最后一个会话的运行器会开始[正常退出](#when-the-runner-exits)。请让您的监管程序在全新的文件系统上重新启动它,如[加固您的部署](#harden-your-deployment)所述。732* **运行器退出**:释放其最后一个会话的运行器会开始[正常退出](#when-the-runner-exits)。请让您的监管程序在全新的文件系统上重新启动它,如[加固您的部署](#harden-your-deployment)所述。

732* **从不进入空闲的会话**:还需设置 [`--kill-session-after-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags),因为[某些会话不计为空闲](#some-sessions-don’t-count-as-idle)733* **从不进入空闲的会话**:还需设置 [`--kill-session-after-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags),因为[某些会话不计为空闲](#some-sessions-don’t-count-as-idle)

733 734 

735### 在进程运行期间保留空闲会话

736 

737要在会话遗留在您主机上的进程(例如 `nohup` 作业)完成之前一直保留该空闲会话,请使用 [`--hold-idle-file`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动运行器,并从主机上持续 touch 该文件。需要 Claude Code v2.1.311 或更高版本。

738 

739以下步骤假定运行器以非 root 用户在主机上运行。如果您的运行器以 `root` 身份运行,其会话可以自行 touch 该文件,因此请先将其改为以专用用户身份运行。

740 

741**1. 为文件选择路径**

742 

743选择一个本地常规文件,例如 `/var/lib/claude-hold/hold-idle`,它应位于会话无法写入的目录中(包括其父目录),这样会话就无法写入该文件。运行器及其会话共用同一个操作系统用户,因此请先创建该目录,使其归另一个用户(例如 `root`)所有,并将模式设为 `755`。

744 

745**2. 启动运行器**

746 

747在您的 shell 中,使用 `--hold-idle-file`、`--release-idle-session-min` 和 [`--max-hold-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 启动运行器,后者是保留的上限,从会话进入空闲时开始计算。如果不设置,上限为一天。请将其设置为高于 `--release-idle-session-min`,否则不会保留任何会话。此示例在 30 分钟后释放空闲会话,并在被保留的会话进入空闲后最多 4 小时将其释放:

748 

749```bash theme={null}

750claude self-hosted-runner \

751 --environment-secret-file /etc/claude/environment-secret \

752 --release-idle-session-min 30 \

753 --hold-idle-file /var/lib/claude-hold/hold-idle \

754 --max-hold-min 240

755```

756 

757**3. 在进程运行期间 touch 该文件**

758 

759在进程运行期间,以该目录所有者的身份从主机上 `touch` 该文件,频率要高于每三分钟一次。第一次 `touch` 会创建该文件。例如,将以下行添加到 `root` 的 crontab 中:

760 

761```text theme={null}

762* * * * * pgrep -x nightly-build > /dev/null && touch /var/lib/claude-hold/hold-idle

763```

764 

765该行每分钟运行一次,并在任何名为 `nightly-build` 的进程运行期间 touch 该文件,因此启动了此类进程的会话会一直被保留,直至达到上限。请将 `pgrep` 检查替换为您的主机查找会话遗留运行内容的任何方式。

766 

767当这些进程完成时,检查必须不再匹配,否则该运行器上的每个空闲会话都会一直被保留,直至达到上限。

768 

769**4. 确认保留**

770 

771在进程运行期间,检查该文件的修改时间是否始终在三分钟以内。当会话的空闲时间耗尽时,在运行器的日志中查找 `idle release held`。如果没有出现这样的行,请读取运行器在启动时记录的 `watchdog config` 行中的 `leftover-hold=`,它会显示文件和上限,或者说明为何没有保留任何会话。

772 

773最后一次 `touch` 三分钟后,保留结束。再过大约一分钟,日志会显示 `idle release no longer held`,运行器随即释放该会话。

774 

775即使文件持续发生变化,保留也可能结束,例如以下情况:

776 

777* **超过上限**:`--max-hold-min` 耗尽。要保留更长时间,请调高该值

778* **强制释放**:您设置了 [`--retire-at`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags)、[`--defer-shutdown-max-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags) 或 [`--kill-session-after-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#runner-cli-flags),并且达到了该限制。要保留更长时间,请设置更晚的限制

779 

734## 已知问题和限制780## 已知问题和限制

735 781 

736以下是此版本中的限制,其中存在解决方法。782以下是此版本中的限制,其中存在解决方法。


828* **Claude Tag 有时不在 Slack 中发布其回复**:回复提醒是一个[由控制平面提供的 hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)。请使用 `claude --version` 确认运行器为 Claude Code v2.1.229 或更高版本,因为较旧的运行器会忽略所提供的 hook;确认 `python3 --version` 在运行器镜像中能够成功执行,因为这些 hook 会运行 `python3`;并确认没有任何设置文件关闭了 hook,无论是 `managed-settings.json`、运行器用户的 `~/.claude/settings.json`、仓库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `disableAllHooks`,还是托管设置中的 `allowManagedHooksOnly` 或涵盖 hook 的 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/zh-CN/settings-reference#strictpluginonlycustomization)。874* **Claude Tag 有时不在 Slack 中发布其回复**:回复提醒是一个[由控制平面提供的 hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)。请使用 `claude --version` 确认运行器为 Claude Code v2.1.229 或更高版本,因为较旧的运行器会忽略所提供的 hook;确认 `python3 --version` 在运行器镜像中能够成功执行,因为这些 hook 会运行 `python3`;并确认没有任何设置文件关闭了 hook,无论是 `managed-settings.json`、运行器用户的 `~/.claude/settings.json`、仓库的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `disableAllHooks`,还是托管设置中的 `allowManagedHooksOnly` 或涵盖 hook 的 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/zh-CN/settings-reference#strictpluginonlycustomization)。

829* **会话启动时缺少其中一个存储库**:在没有 [`checkout` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#checkout) 的运行器上,git 主机可能会拒绝运行器对会话仅从中读取的存储库的访问检查。运行器随后跳过该存储库,记录一条 `[runner:warn] could not access context source` 行,命名拒绝,并在其余存储库上启动会话。875* **会话启动时缺少其中一个存储库**:在没有 [`checkout` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#checkout) 的运行器上,git 主机可能会拒绝运行器对会话仅从中读取的存储库的访问检查。运行器随后跳过该存储库,记录一条 `[runner:warn] could not access context source` 行,命名拒绝,并在其余存储库上启动会话。

830 876 

831 运行器仅跳过明确的拒绝:主机回答存储库未找到,git 找不到主机的凭证,或身份验证失败。网络故障、超时或 HTTP `403` 仍会导致会话启动失败,对于会话推送结果的存储库的拒绝也是如此。运行器仍会失败一个会话,跳过会导致它完全没有存储库。使用 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy),运行器仅跳过 git 代理本身拒绝的存储库。877 使用运行器自身的 git 凭据时,如果主机答复仓库未找到、git 找不到该主机的凭据,或身份验证失败,运行器可以跳过该仓库。

878 

879 使用 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) 时,如果 git 代理以 `access denied by the git proxy` 拒绝某个仓库,运行器会跳过该仓库。此时日志行会显示 `blocked by the git proxy`。要了解需要检查的原因,请参阅 [当会话在使用 git 代理的运行器上无法启动时](#when-anthropic-doesnt-serve-a-session) 中的 `remote: access denied by the git proxy` 情况。

880 

881 网络故障、超时或任何其他 HTTP `403` 仍会导致会话启动失败,对会话推送结果的仓库的拒绝也是如此。如果跳过会导致会话完全没有仓库,运行器仍会使该会话失败。

832 882 

833 访问检查在每次会话在运行器上启动时再次运行,因此一旦运行器的 git 身份具有读取访问权限,下一次启动就会克隆存储库。在 v2.1.274 之前,这些拒绝中的每一个都导致会话启动失败。883 访问检查在每次会话在运行器上启动时再次运行,因此一旦运行器的 git 身份具有读取访问权限,下一次启动就会克隆存储库。在 v2.1.274 之前,这些拒绝中的每一个都导致会话启动失败。

884* **日志显示 `could not read context source`**:与 `could not access context source` 不同,这一行表示 git 主机持续答复 HTTP `429`,或者您作为 `git` 安装的包装程序持续以 `75` 退出。运行器跳过了该仓库。要重试,请启动新会话。每次此会话在运行器上启动时,运行器也会再次尝试该仓库。

885 

886 在没有 `checkout` hook 的情况下,运行器可以跳过会话仅从中读取的仓库,除非该仓库是会话的第一个仓库。在 v2.1.311 之前,会话启动会失败。

834* **会话启动失败,显示 `This runner couldn't read`**:运行器使用其 [git 凭据](#configure-git) 向 git 主机请求某个仓库,但得到了未找到的答复。该仓库不存在,或者这些凭据无法访问该仓库。887* **会话启动失败,显示 `This runner couldn't read`**:运行器使用其 [git 凭据](#configure-git) 向 git 主机请求某个仓库,但得到了未找到的答复。该仓库不存在,或者这些凭据无法访问该仓库。

835 * **如果您管理该运行器**:为其 git 凭据授予该仓库的读取权限,然后启动新会话。888 * **如果您管理该运行器**:为其 git 凭据授予该仓库的读取权限,然后启动新会话。

836 * **如果您启动了该会话**:如果该仓库不存在,请使用正确的仓库启动新会话。如果运行器无法访问该仓库,请让运行器的管理员授予访问权限,然后启动新会话。889 * **如果您启动了该会话**:如果该仓库不存在,请使用正确的仓库启动新会话。如果运行器无法访问该仓库,请让运行器的管理员授予访问权限,然后启动新会话。

Details

89(umask 077 && cat > /etc/claude/environment-secret)89(umask 077 && cat > /etc/claude/environment-secret)

90```90```

91 91 

92选择一个基目录,将下面运行器命令中的 `<writable-dir>` 替换为运行器可以写入或创建的绝对路径。运行器在启动时创建目录,然后检查存储库并在其下创建每个会话的目录。没有 `--base-dir`,它使用 `/workspace`,这仅在该目录已存在且可写或您以 root 身份启动运行器时有效。92选择一个基目录,将下面运行器命令中的 `<writable-dir>` 替换为运行器可以写入或创建的绝对路径。运行器在启动时创建目录,然后检出仓库并在其下创建每个会话的目录。没有 `--base-dir`,它使用 `/workspace`,这仅在该目录已存在且可写或您以 root 身份启动运行器时有效。

93 93 

94> [!WARNING]94> [!WARNING]

95>95>

Details

37| `--git-host-rewrite <from>=<to>` | 无 | 未设置 | 在克隆之前将 `https://<from>/...` 源 URL 改写为 `https://<to>/...`,用于拆分视图 DNS。可重复使用;仅限标志。 |37| `--git-host-rewrite <from>=<to>` | 无 | 未设置 | 在克隆之前将 `https://<from>/...` 源 URL 改写为 `https://<to>/...`,用于拆分视图 DNS。可重复使用;仅限标志。 |

38| `--git-ssh-rewrite <host>` | 无 | 未设置 | 在克隆之前将 `https://<host>/...` 源 URL 改写为 `git@<host>:...`,用于仅支持 SSH 的 git 主机。可重复使用;仅限标志。 |38| `--git-ssh-rewrite <host>` | 无 | 未设置 | 在克隆之前将 `https://<host>/...` 源 URL 改写为 `git@<host>:...`,用于仅支持 SSH 的 git 主机。可重复使用;仅限标志。 |

39| `--health-port <port>` | `SELF_HOSTED_RUNNER_HEALTH_PORT` | `8080` | `/healthz` 和 `/metrics` 监听器的端口。设置为 `0` 可禁用。 |39| `--health-port <port>` | `SELF_HOSTED_RUNNER_HEALTH_PORT` | `8080` | `/healthz` 和 `/metrics` 监听器的端口。设置为 `0` 可禁用。 |

40| `--hold-idle-file <path>` | `SELF_HOSTED_RUNNER_HOLD_IDLE_FILE` | 未设置 | 由您的主机持续更改的文件,用于在 runner 上保留空闲会话。请参阅[在进程运行期间保留空闲会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#keep-an-idle-session-while-its-processes-run)。需要 Claude Code v2.1.311 或更高版本。 |

40| `--hooks-dir <path>` | `SELF_HOSTED_RUNNER_HOOKS_DIR` | 未设置 | 生命周期 hook 脚本所在的目录。请参阅[生命周期 hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#lifecycle-hooks)。 |41| `--hooks-dir <path>` | `SELF_HOSTED_RUNNER_HOOKS_DIR` | 未设置 | 生命周期 hook 脚本所在的目录。请参阅[生命周期 hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#lifecycle-hooks)。 |

41| `--host-config-snapshot <mode>` | `SELF_HOSTED_RUNNER_HOST_CONFIG_SNAPSHOT` | `disk` | runner 保存[主机配置目录](#environment-variable-only-settings)启动快照的位置,runner 以该快照为每个会话提供初始内容。`disk` 会将快照复制到 `--base-dir` 下由 runner 拥有的目录中,并在每次会话启动时根据内存中的摘要校验每个文件。如果副本中的某个文件已被修改,该会话会失败,并且 runner 会拒绝会话,直到您重启它。`memory` 将整个快照保存在堆上,上限为 64 MiB;超过上限时,会话将在没有主机配置的情况下启动,并显示相应通知。当 runner 无法写入磁盘快照时,它会记录该失败,并在本次运行中使用 `memory`。需要 Claude Code v2.1.271 或更高版本。 |42| `--host-config-snapshot <mode>` | `SELF_HOSTED_RUNNER_HOST_CONFIG_SNAPSHOT` | `disk` | runner 保存[主机配置目录](#environment-variable-only-settings)启动快照的位置,runner 以该快照为每个会话提供初始内容。`disk` 会将快照复制到 `--base-dir` 下由 runner 拥有的目录中,并在每次会话启动时根据内存中的摘要校验每个文件。如果副本中的某个文件已被修改,该会话会失败,并且 runner 会拒绝会话,直到您重启它。`memory` 将整个快照保存在堆上,上限为 64 MiB;超过上限时,会话将在没有主机配置的情况下启动,并显示相应通知。当 runner 无法写入磁盘快照时,它会记录该失败,并在本次运行中使用 `memory`。需要 Claude Code v2.1.271 或更高版本。 |

42| `--kill-session-after-min <n>` | `SELF_HOSTED_RUNNER_MAX_LIFETIME_MS` | `0` | 将会话的挂钟时间限制为 N 分钟,作为针对卡住会话的安全限制。在 v2.1.260 或更高版本中,runner 会释放达到该限制的会话,以便其在用户发送下一条消息时恢复;只有当 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 宽限窗口结束时该会话仍在 runner 上,才会将其终止。在 v2.1.260 之前,runner 会在达到限制时终止会话。有关详细信息以及如何选择取值,请参阅[某些会话不计为空闲](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)。`0` 表示禁用。 |43| `--kill-session-after-min <n>` | `SELF_HOSTED_RUNNER_MAX_LIFETIME_MS` | `0` | 将会话的挂钟时间限制为 N 分钟,作为针对卡住会话的安全限制。在 v2.1.260 或更高版本中,runner 会释放达到该限制的会话,以便其在用户发送下一条消息时恢复;只有当 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 宽限窗口结束时该会话仍在 runner 上,才会将其终止。在 v2.1.260 之前,runner 会在达到限制时终止会话。有关详细信息以及如何选择取值,请参阅[某些会话不计为空闲](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)。`0` 表示禁用。 |

43| `--lock-to-account <id>` | `SELF_HOSTED_RUNNER_LOCK_TO_ACCOUNT` | 未设置 | 在启动时将 runner 预先锁定到特定账户,而不是在第一个会话时锁定。接受该环境所属组织中的电子邮件地址或 `user_...` ID。预先锁定的 runner 永远不会接收 Claude Tag 频道会话,因为这些会话没有账户。 |44| `--lock-to-account <id>` | `SELF_HOSTED_RUNNER_LOCK_TO_ACCOUNT` | 未设置 | 在启动时将 runner 预先锁定到特定账户,而不是在第一个会话时锁定。接受该环境所属组织中的电子邮件地址或 `user_...` ID。预先锁定的 runner 永远不会接收 Claude Tag 频道会话,因为这些会话没有账户。 |

44| `--log-file <path>` | `SELF_HOSTED_RUNNER_LOG_FILE` | 未设置 | 除 stdout 和 stderr 外,还将 runner 日志镜像写入一个文件,该文件以 `0600` 权限创建。`self-hosted-runner doctor` 要在本地跟踪日志,必须设置此项。 |45| `--log-file <path>` | `SELF_HOSTED_RUNNER_LOG_FILE` | 未设置 | 除 stdout 和 stderr 外,还将 runner 日志镜像写入一个文件,该文件以 `0600` 权限创建。`self-hosted-runner doctor` 要在本地跟踪日志,必须设置此项。 |

45| `--log-level <level>` | 无 | `info` | `info` 或 `debug` |46| `--log-level <level>` | 无 | `info` | `info` 或 `debug` |

47| `--max-hold-min <n>` | `SELF_HOSTED_RUNNER_MAX_HOLD_MS` | `1440` | 与 `--hold-idle-file` 配合使用时,被保留的会话在进入空闲 N 分钟后仍会被释放。取值小于或等于 `--release-idle-session-min` 时不会保留任何会话。`0` 表示关闭保留。需要 Claude Code v2.1.311 或更高版本。 |

46| `--post-session-hook-timeout-sec <n>` | `SELF_HOSTED_RUNNER_POST_SESSION_HOOK_TIMEOUT_MS` | `60` | 每次会话结束时(包括 runner 关闭时)[`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session) 的时间预算 |48| `--post-session-hook-timeout-sec <n>` | `SELF_HOSTED_RUNNER_POST_SESSION_HOOK_TIMEOUT_MS` | `60` | 每次会话结束时(包括 runner 关闭时)[`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session) 的时间预算 |

47| `--proxy-authorization-command <command>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_COMMAND` | 未设置 | runner 在每次连接您的出口代理时运行的 shell 命令,其去除首尾空白后的 stdout 用作 `Proxy-Authorization` 标头值。需要 `HTTPS_PROXY` 或 `HTTP_PROXY`,且不能与 `--proxy-authorization-file` 同时使用。请参阅[向出口代理进行身份验证](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)。需要 Claude Code v2.1.238 或更高版本。 |49| `--proxy-authorization-command <command>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_COMMAND` | 未设置 | runner 在每次连接您的出口代理时运行的 shell 命令,其去除首尾空白后的 stdout 用作 `Proxy-Authorization` 标头值。需要 `HTTPS_PROXY` 或 `HTTP_PROXY`,且不能与 `--proxy-authorization-file` 同时使用。请参阅[向出口代理进行身份验证](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)。需要 Claude Code v2.1.238 或更高版本。 |

48| `--proxy-authorization-file <path>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_FILE` | 未设置 | runner 在每次连接您的出口代理时读取的文件,其去除首尾空白后的内容用作 `Proxy-Authorization` 标头值。对于由其他进程原地轮换的令牌,请使用此标志。要求与 `--proxy-authorization-command` 相同,且不能与其同时使用。请参阅[向出口代理进行身份验证](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)。需要 Claude Code v2.1.238 或更高版本。 |50| `--proxy-authorization-file <path>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_FILE` | 未设置 | runner 在每次连接您的出口代理时读取的文件,其去除首尾空白后的内容用作 `Proxy-Authorization` 标头值。对于由其他进程原地轮换的令牌,请使用此标志。要求与 `--proxy-authorization-command` 相同,且不能与其同时使用。请参阅[向出口代理进行身份验证](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)。需要 Claude Code v2.1.238 或更高版本。 |

49| `--push-outcome-on-release` | `SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE` | 关闭 | 在由 runner 发起的会话结束(例如排空或空闲释放)时,在删除工作区之前将跟踪的结果分支推送到 `origin`,以便进行中的提交在重启后得以保留。尽力而为;会为关闭预算增加 30 秒,且需要 git 2.29 或更高版本才能从推送的分支恢复。启用前请限制谁可以推送到 `claude/*` 引用;请参阅[恢复的会话会丢失未推送的工作](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#additional-limitations)。通过 `checkout` 生命周期 hook 检出的仓库不会被推送;请改为在 [`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session) 中为其创建快照。 |51| `--push-outcome-on-release` | `SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE` | 关闭 | 在由 runner 发起的会话结束(例如排空或空闲释放)时,在删除工作区之前将跟踪的结果分支推送到 `origin`,以便进行中的提交在重启后得以保留。尽力而为;会为关闭预算增加 30 秒,且需要 git 2.29 或更高版本才能从推送的分支恢复。启用前请限制谁可以推送到 `claude/*` 引用;请参阅[恢复的会话会丢失未推送的工作](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#additional-limitations)。通过 `checkout` 生命周期 hook 检出的仓库不会被推送;请改为在 [`post-session` hook](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration#post-session) 中为其创建快照。 |

50| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | 在轮次结束或会话等待用户操作后,若不活动达 N 分钟,则释放会话槽位。仍处于轮次中的会话(包括持有永不结束的后台任务的会话,或在正在运行的工具调用内部请求了批准的会话)不计为空闲;请搭配 `--kill-session-after-min` 作为硬性兜底。会话的后台任务完成后,runner 会将该会话视为忙碌,直到读取结果的后续轮次开始为止,最长不超过 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings) 窗口。在 runner 收到关闭信号或到达其退役时间之前,如果一次释放使 runner 不再有活动会话,则会启动与正常排空相同的退出流程,由 `--drain-grace-sec` 控制。如果您使用 [`--defer-shutdown-max-min`](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal) 推迟了第一个信号,则一旦某次释放使 runner 不再持有任何会话,runner 就会立即退出。`0` 表示禁用。 |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | 在轮次结束或会话等待用户操作后,若不活动达 N 分钟,则释放会话槽位。[某些会话不计为空闲](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle),因此请搭配 `--kill-session-after-min` 使用。已完成的后台任务会使会话保持忙碌状态,最长不超过 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings) 窗口。要推迟释放,请设置 [`--hold-idle-file`](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy#keep-an-idle-session-while-its-processes-run)。`0` 表示禁用。 |

51| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 关闭 | 当会话在此 runner 上结束时,无论结果如何,都删除该会话在 `<base-dir>/_sessions/` 下的每会话目录。[复用预热的检出](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)介绍了这些目录保存的内容,以及它们保留时谁可以读取。删除是尽力而为的:如果 runner 在清理运行之前被终止或到达其排空截止时间,每会话目录将保留原位。启用该标志后,失败或中断的会话的调试日志不会保留在磁盘上。需要 Claude Code v2.1.268 或更高版本。 |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 关闭 | 当会话在此 runner 上结束时,无论结果如何,都删除该会话在 `<base-dir>/_sessions/` 下的每会话目录。[复用预热的检出](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)介绍了这些目录保存的内容,以及它们保留时谁可以读取。删除是尽力而为的:如果 runner 在清理运行之前被终止或到达其排空截止时间,每会话目录将保留原位。启用该标志后,失败或中断的会话的调试日志不会保留在磁盘上。需要 Claude Code v2.1.268 或更高版本。 |

52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 未设置 | 在以秒为单位的绝对 Unix 时间戳处让 runner 退役,适用于会在已知时间终止 runner 的基础设施;[Runner 生命周期](https://code.claude.com/docs/zh-CN/self-hosted-environments#runner-lifecycle)介绍了释放顺序以及如何确定余量。早于 2001 年或晚于 5138 年的值会被该标志拒绝,并被该环境变量忽略。 |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 未设置 | 在以秒为单位的绝对 Unix 时间戳处让 runner 退役,适用于会在已知时间终止 runner 的基础设施;[Runner 生命周期](https://code.claude.com/docs/zh-CN/self-hosted-environments#runner-lifecycle)介绍了释放顺序以及如何确定余量。早于 2001 年或晚于 5138 年的值会被该标志拒绝,并被该环境变量忽略。 |

53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 控制平面随会话发送的[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器规则列表中,哪些可以作用于该会话:`all`、`no-allow` 或 `none`。有关每个值应用的内容,请参阅[自动模式规则列表](#auto-mode-rule-lists)。无效值会使 runner 在启动时停止。需要 Claude Code v2.1.295 或更高版本。 |55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 控制平面随会话发送的[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)分类器规则列表中,哪些可以作用于该会话:`all`、`no-allow` 或 `none`。有关每个值应用的内容,请参阅[自动模式规则列表](#auto-mode-rule-lists)。无效值会使 runner 在启动时停止。需要 Claude Code v2.1.295 或更高版本。 |


312 314 

313### 针对丢失的运行器和等待中的会话发出警报315### 针对丢失的运行器和等待中的会话发出警报

314 316 

315在[固定舰队](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#scale-the-fleet)上,加载 `ClaudeRunnersBelowFloor`。使用[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)时,改为加载 `ClaudeOrchestratorSessionsWaiting` 和 `ClaudeOrchestratorQueueWaitHigh`。317要在运行器丢失、会话等待或编排器停机时收到警报,请在[示例警报规则](#sample-alert-rules)之外加载以下 Prometheus 警报规则:

318 

319* **[固定舰队](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#scale-the-fleet)**:`ClaudeRunnersBelowFloor`

320* **[按需运行器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)**:`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 和 `ClaudeOrchestratorAbsent`

316 321 

317#### 固定舰队丢失运行器时发出警报322#### 固定舰队丢失运行器时发出警报

318 323 


370* **阈值**:如果始终有会话在等待,请将 `ClaudeOrchestratorSessionsWaiting` 中的 `> 0` 提高到您通常看到的数值之上375* **阈值**:如果始终有会话在等待,请将 `ClaudeOrchestratorSessionsWaiting` 中的 `> 0` 提高到您通常看到的数值之上

371* **`ClaudeOrchestratorDisconnected`**:保持从[示例警报规则](#sample-alert-rules)中加载它,因为在命名空间中最后一个编排器断开连接约 2 分钟后,`ClaudeOrchestratorSessionsWaiting` 会停止触发376* **`ClaudeOrchestratorDisconnected`**:保持从[示例警报规则](#sample-alert-rules)中加载它,因为在命名空间中最后一个编排器断开连接约 2 分钟后,`ClaudeOrchestratorSessionsWaiting` 会停止触发

372 377 

378#### 编排器停机时发出警报

379 

380要获知[编排器](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#on-demand-runners)本身已停机,请加载 `ClaudeOrchestratorAbsent`。当命名空间中没有任何编排器被抓取并持续 5 分钟时,它会触发:

381 

382```yaml theme={null}

383groups:

384 # 仅适用于按需运行器。请将 claude-runners 替换为编排器所在的命名空间。

385 - name: claude-code-self-hosted-on-demand-orchestrator

386 rules:

387 - alert: ClaudeOrchestratorAbsent

388 expr: absent(claude_code_self_hosted_orchestrator_connected{namespace="claude-runners"})

389 for: 5m

390 labels: {severity: critical}

391 annotations:

392 summary: "已有 5 分钟没有抓取到任何编排器。如果它已停机,则不会启动任何按需运行器,会话将处于等待状态。请先检查编排器工作负载,如果它在运行,再检查其抓取目标。"

393```

394 

395* **命名空间**:将 `claude-runners` 替换为编排器所在的命名空间,并为每个其他运行编排器的命名空间复制该警报。如果您的目标没有 `namespace` 标签,请删除该匹配器,否则警报会在 5 分钟后触发并持续保持。

396* **不抓取编排器的 Prometheus 服务器**:请勿将该警报放入这些服务器的规则文件中,因为在此类服务器上它会在 5 分钟后触发并持续保持

397* **不要依赖编排器的其他警报**:它们读取的是编排器自身提供的指标。在编排器停机后约 10 分钟内,`ClaudeOrchestratorSessionsWaiting`、`ClaudeOrchestratorQueueWaitHigh` 以及编排器的[示例警报规则](#sample-alert-rules)都会停止触发。

398 

373### 传递会话子进程指标399### 传递会话子进程指标

374 400 

375每个会话在其自己的子进程中运行,具有自己的 OpenTelemetry 指标;在 `--capacity` 高于 1 时,运行器重写这些子指标的公开方式。在运行器主机上设置 `OTEL_METRICS_EXPORTER=prometheus` 和会话环境中的 `CLAUDE_CODE_ENABLE_TELEMETRY=1`(例如从您的[包装脚本](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#wrapper-scripts)或运行器自己的环境,会话继承),重新公开每个子进程的计数器和仪表工具在运行器自己的 `/metrics` 端点上,与运行器的系列一起。运行器将子进程的导出器重写为通过 OTLP 推送到健康端口上的仅环回接收器,用 `session_id` 和 `client_platform` 标签标记每个系列,并在该会话结束时驱逐会话的系列。直方图不通过,子指标名称与运行器自己的前缀冲突的会被删除。401每个会话在其自己的子进程中运行,具有自己的 OpenTelemetry 指标;在 `--capacity` 高于 1 时,运行器重写这些子指标的公开方式。在运行器主机上设置 `OTEL_METRICS_EXPORTER=prometheus` 和会话环境中的 `CLAUDE_CODE_ENABLE_TELEMETRY=1`(例如从您的[包装脚本](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#wrapper-scripts)或运行器自己的环境,会话继承),重新公开每个子进程的计数器和仪表工具在运行器自己的 `/metrics` 端点上,与运行器的系列一起。运行器将子进程的导出器重写为通过 OTLP 推送到健康端口上的仅环回接收器,用 `session_id` 和 `client_platform` 标签标记每个系列,并在该会话结束时驱逐会话的系列。直方图不通过,子指标名称与运行器自己的前缀冲突的会被删除。

Details

129 Claude Code 在其[系统路径](https://code.claude.com/docs/zh-CN/managed-mcp.md#exclusive-control-with-managed-mcp-json)处部署的 `managed-mcp.json` 与托管设置层分开读取,因此当服务器管理的设置生效时,该文件仍然适用。129 Claude Code 在其[系统路径](https://code.claude.com/docs/zh-CN/managed-mcp.md#exclusive-control-with-managed-mcp-json)处部署的 `managed-mcp.json` 与托管设置层分开读取,因此当服务器管理的设置生效时,该文件仍然适用。

130* 限制于操作系统级别策略源的设置,如 `policyHelper` 和 `wslInheritsWindowsSettings`,不被遵守。改为通过 MDM 或系统 `managed-settings.json` 文件部署它们。在[托管层内的优先级](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)下选择的源是该源时,以这种方式部署的 `policyHelper` 仅运行。130* 限制于操作系统级别策略源的设置,如 `policyHelper` 和 `wslInheritsWindowsSettings`,不被遵守。改为通过 MDM 或系统 `managed-settings.json` 文件部署它们。在[托管层内的优先级](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)下选择的源是该源时,以这种方式部署的 `policyHelper` 仅运行。

131 131 

132## 设置传递132## 设置分发

133 133 

134### 设置优先级134### 设置优先级

135 135 

136服务器管理的设置和[端点管理的设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)都占据 Claude Code [设置层次结构](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)中的最高层。您在此处设置的键优先于用户自己的设置文件中或 `--settings` 值中的同一键,[托管设置优先级的例外](https://code.claude.com/docs/zh-CN/settings.md#exceptions-to-managed-settings-precedence)除外。136服务器托管设置和[端点托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)都位于 Claude Code [设置层级结构](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)中的最高层级。您在此处设置的键优先于用户自己的设置文件或 `--settings` 值中的同名键,[托管设置优先级的例外情况](https://code.claude.com/docs/zh-CN/settings.md#exceptions-to-managed-settings-precedence)除外。

137 137 

138在托管层内,Claude Code 默认使用首先传递至少一个策略键的源,首先检查服务器管理的设置,然后检查端点管理的设置,除了[接下来涵盖的例外键](#per-key-exceptions-across-managed-sources)。[Claude Code 如何组合托管源](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)包含完整的排名、控制键的例外以及适用于每个源的选择加入。138在托管层级内,Claude Code 默认使用第一个提供至少一个策略键的来源,先检查服务器托管设置,再检查端点托管设置,[下文所述的例外键](#per-key-exceptions-across-managed-sources)除外。[Claude Code 如何组合托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)介绍了完整的排序规则、控制键的特殊处理,以及应用所有来源的可选启用方式。

139 139 

140如果选定的源是 MDM 策略或托管设置文件,其 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置,则该助手的输出替换该源,成为该运行的唯一托管配置。当服务器管理的设置传递策略键时,Claude Code 不会查询在 MDM 或基于文件的设置中配置的 `policyHelper`。140如果所选来源是一个 MDM 策略或托管设置文件,且其 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置,则该 helper 的输出将取代该来源,成为本次运行唯一的托管配置。当服务器托管设置提供策略键时,Claude Code 不会参考在 MDM 或基于文件的设置中配置的 `policyHelper`。

141 141 

142如果后续获取发现服务器管理的设置已被移除,Claude Code 会立即运行该助手,而不是在下次启动时运行。[`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 条目涵盖该运行失败时会发生什么。142如果后续的获取发现服务器托管设置已被移除,Claude Code 会立即运行该 helper,而不是等到下次启动时。[`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 条目介绍了该运行失败时会发生什么。

143 143 

144如果您在管理控制台中清除服务器管理的配置,意图回退到端点管理的 plist 或注册表策略,请注意[缓存的设置](#fetch-and-caching-behavior)在客户端机器上持久化,直到下次成功获取,而[仅在下次启动时应用](#fetch-and-caching-behavior)的键(例如 `model`)保持有效,直到每个客户端重新启动。运行 `/status` 查看哪个托管源处于活动状态。144如果您在管理控制台中清除了服务器托管配置,意图回退到端点托管的 plist 或注册表策略,请注意:[缓存的设置](#fetch-and-caching-behavior)会在客户端机器上保留,直到下一次成功获取;而[仅在下次启动时生效](#fetch-and-caching-behavior)的键(例如 `model`)会一直有效,直到每个客户端重新启动。运行 `/status` 可查看当前生效的托管来源。

145 145 

146### 跨托管源的每键例外146### 跨托管来源的按键例外

147 147 

148这些键是无合并规则的例外:148以下键是"不合并"规则的例外:

149 149 

150* **跨源锁定键**:一小组键,例如沙箱允许列表锁,[列在托管设置页面上](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)。当任何管理员控制的托管源设置它们时,Claude Code 会遵守它们;用户可写的 HKCU 注册表层被排除。150* **跨来源锁定键**:一小组键,例如沙箱允许列表锁定,[在托管设置页面中列出](https://code.claude.com/docs/zh-CN/managed-settings.md#precedence-within-the-managed-tier)。当任何由管理员控制的托管来源设置了这些键时,Claude Code 都会遵循它们;用户可写的 HKCU 注册表层级除外。

151 151 

152 当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出是这些检查读取的唯一源,除了 [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/zh-CN/settings-reference#forceremotesettingsrefresh),Claude Code 在启动时直接从管理员源读取它。152 当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出是这些检查读取的唯一来源,但 [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/zh-CN/settings-reference#forceremotesettingsrefresh) 除外,Claude Code 会在启动时直接从管理员来源读取该键。

153* **`env` 块**:除了与凭证键配对的遥测单元和路由变量(下面涵盖)外,它在管理员控制的源之间按键合并。对于每个环境变量,定义它的最高优先级源获胜,较低的管理员源填充较高源未设置的变量。因此,端点管理的 `env` 条目在服务器管理的配置未设置该变量时应用,或在该变量的缓存服务器值[等待服务器确认而被暂扣](#fetch-and-caching-behavior)期间应用。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用选定源的整个 `env` 块。153* **`env` 块**:除了与凭据键配对的遥测单元和路由变量(均在下文介绍)之外,它会在由管理员控制的来源之间按键合并。对于每个环境变量,定义它的最高优先级来源生效,较低的管理员来源会填补较高来源未设置的变量。因此,只要服务器托管配置未设置某个变量,或者该变量的缓存服务器值正处于[等待服务器确认而被暂缓](#fetch-and-caching-behavior)的状态,端点托管的 `env` 条目就会生效。需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,Claude Code 仅应用所选来源的整个 `env` 块。

154 * **遥测单元**:`OTEL_EXPORTER_OTLP_*` 导出器键、`OTEL_LOG_*` 内容捕获切换、`OTEL_LOGS_EXPORTER` 以及测试版跟踪变量 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT` 遵循设置其中任何一个的最高源作为一个单元。传递 `otelHeadersHelper` 凭证键的源也声称该单元,但仅在它是选定源时才放置这些变量:未被选定但传递该键的源不贡献其中任何一个,仍然阻止较低源填充它们。无论哪种方式,来自一个源的导出器端点永远不能与来自另一个源的凭证配对。154 * **遥测单元**:`OTEL_EXPORTER_OTLP_*` 导出器键、`OTEL_LOG_*` 内容捕获开关、`OTEL_LOGS_EXPORTER`,以及 beta 追踪变量 `ENABLE_BETA_TRACING_DETAILED` 和 `BETA_TRACING_ENDPOINT`,作为一个整体跟随设置了其中任意一个的最高来源。提供 `otelHeadersHelper` 凭据键的来源也会占据该单元,但只有当它是所选来源时才会落地这些变量:一个未被选中但提供了该键的来源不会贡献其中任何变量,并且仍会阻止较低来源填补它们。无论哪种情况,来自一个来源的导出器端点都绝不会与来自另一个来源的凭据配对。

155 * **凭证配对的路由**:将路由变量与选定源专用凭证键(例如 `apiKeyHelper` 或 `otelHeadersHelper`)配对的源仅在它赢得该槽位时贡献这些路由变量。155 * **与凭据配对的路由**:将路由变量与仅限所选来源的凭据键(例如 `apiKeyHelper` 或 `otelHeadersHelper`)配对的来源,只有在赢得该槽位时才会贡献这些路由变量。

156* **`allowedProviders`**:机器上设置的列表和服务器管理的列表按照[其条目的范围说明](https://code.claude.com/docs/zh-CN/settings-reference.md#allowedproviders)所述进行组合。需要 Claude Code v2.1.285 或更高版本156* **`allowedProviders`**:机器上设置的列表与服务器托管列表按照[其条目的作用域说明](https://code.claude.com/docs/zh-CN/settings-reference.md#allowedproviders)进行组合。需要 Claude Code v2.1.285 或更高版本

157* **网关登录键**:Claude Code 永远不会从服务器管理的设置中读取 [`forceLoginGatewayUrl`](https://code.claude.com/docs/zh-CN/settings-reference#forcelogingatewayurl)、[`gatewayInternalNetworks`](https://code.claude.com/docs/zh-CN/settings-reference#gatewayinternalnetworks) 或 [`forceLoginMethod`](https://code.claude.com/docs/zh-CN/settings-reference#forceloginmethod) 的 `"gateway"` 值,因此服务器管理的设置中的值既不适用也不隐藏在 MDM 策略或托管设置文件中设置的值。[`managedSourcesBehavior` 条目](https://code.claude.com/docs/zh-CN/settings-reference#managedsourcesbehavior)说明机器上的哪个管理员源提供它们。157* **网关登录键**:Claude Code 从不从服务器托管设置中读取 [`forceLoginGatewayUrl`](https://code.claude.com/docs/zh-CN/settings-reference#forcelogingatewayurl)、[`gatewayInternalNetworks`](https://code.claude.com/docs/zh-CN/settings-reference#gatewayinternalnetworks) 或 [`forceLoginMethod`](https://code.claude.com/docs/zh-CN/settings-reference#forceloginmethod) 的 `"gateway"` 值,因此那里的值既不会生效,也不会遮蔽在 MDM 策略或托管设置文件中设置的值。[`managedSourcesBehavior` 条目](https://code.claude.com/docs/zh-CN/settings-reference#managedsourcesbehavior)说明了由机器上的哪个管理员来源提供这些键。

158 158 

159### 获取和缓存行为159### 获取和缓存行为

160 160 

161Claude Code 在启动时从 Anthropic 的服务器获取设置,并在活动会话期间每小时轮询一次更新。161Claude Code 在启动时从 Anthropic 的服务器获取设置,并在活动会话期间每小时轮询一次更新。

162 162 

163通过[Claude 应用网关](#platform-availability)登录的客户端从网关获取其设置,并在会话开始前等待该获取,因此下面列表中的获取不适用于它。[强制执行故障关闭启动](#enforce-fail-closed-startup)涵盖该获取失败时会发生什么。163通过 [Claude apps 网关](#platform-availability)登录的客户端会从网关获取其设置,并在会话开始前等待该获取完成,因此下面列表中的获取不适用于它。[强制失败即关闭的启动](#enforce-fail-closed-startup)介绍了该获取失败时会发生什么。

164 164 

165**首次启动而无缓存的设置:**165**首次启动且无缓存设置:**

166 166 

167* 当开发者在启动时登录时,例如在首次运行或 `/logout` 后,Claude Code 在打开会话前最多等待五秒钟以获取。当策略及时到达时,Claude Code 从第一个屏幕开始强制执行它,并在其上显示您的 [`companyAnnouncements`](https://code.claude.com/docs/zh-CN/settings-reference#companyannouncements)。当有效负载需要[安全批准](#security-approval-dialogs)时,Claude Code 结束等待,并在开发者批准后应用有效负载167* 当开发者在启动时登录(例如首次运行或执行 `/logout` 之后),Claude Code 会在打开会话前等待获取最多五秒。如果策略及时到达,Claude Code 会从第一个屏幕开始执行它,并在该屏幕上显示您的 [`companyAnnouncements`](https://code.claude.com/docs/zh-CN/settings-reference#companyannouncements)。当负载需要[安全批准](#security-approval-dialogs)时,Claude Code 会结束等待,并在开发者批准后应用该负载

168* 在任何其他启动中,以及当该五秒钟等待超时时,Claude Code 在获取继续进行时打开会话,因此在设置加载和限制生效前会有一个简短的窗口168* 在任何其他启动情况下,以及当这五秒等待结束时,Claude Code 会在获取继续进行的同时打开会话,因此在设置加载和限制生效之前会有一段短暂的时间窗口

169* 如果获取失败,Claude Code 继续运行而不使用服务器管理的设置,并在交互式会话中警告没有远程策略适用;端点管理的设置仍然适用。如果托管源设置了 [`forceRemoteSettingsRefresh`](#enforce-fail-closed-startup),Claude Code 会退出169* 如果获取失败,Claude Code 会在没有服务器托管设置的情况下继续运行,并在交互式会话中警告没有远程策略生效;端点托管设置仍然生效。如果某个托管来源设置了 [`forceRemoteSettingsRefresh`](#enforce-fail-closed-startup),Claude Code 则会退出

170 170 

171**后续启动且有缓存的设置:**171**后续启动且有缓存设置:**

172 172 

173* 缓存的设置在启动时立即应用,但以下情况除外:缓存的 `modelPricing` 和 `managedMcpServers` 值;Claude Code 在服务器确认负载之前暂扣的环境变量;缓存的插件列表对[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)的移除、重新定位或禁用;以及在端点管理的源自行列出或启用插件的机器上,仅由缓存列表启用的插件的[组织归属](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)173* 缓存的设置在启动时立即生效,但以下情况除外:缓存的 `modelPricing` 和 `managedMcpServers` 值;Claude Code 在服务器确认负载之前暂缓的环境变量;缓存的插件列表对[内置守卫](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#know-what-happens-by-default)的移除、重新定位或禁用;以及在端点托管来源自行列出或启用插件的机器上,仅由缓存列表启用的插件的[组织归属](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)

174* 缓存的 [`modelPricing`](https://code.claude.com/docs/zh-CN/settings-reference#modelpricing) 在会话的获取确认有效负载前不适用。在那之前,开发者在 `/usage` 中看到的成本数字和状态行处于列表价格174* 缓存的 [`modelPricing`](https://code.claude.com/docs/zh-CN/settings-reference#modelpricing) 在会话的获取确认负载之前不会生效。在此之前,开发者在 `/usage` 和状态栏中看到的费用数据按标价计算

175* 缓存的 [`managedMcpServers`](https://code.claude.com/docs/zh-CN/settings-reference#managedmcpservers) 块在会话的获取确认有效负载前不适用。Claude Code 在连接 MCP 服务器前最多等待 30 秒以获取。如果获取失败或超时,会话启动时不使用组织的服务器,`/status` 会说明这一点,它们在后续获取确认它们后连接。有关完整行为(包括首次启动),请参阅[何时提供的服务器连接](https://code.claude.com/docs/zh-CN/managed-mcp.md#when-provided-servers-connect)。需要 Claude Code v2.1.259 或更高版本175* 缓存的 [`managedMcpServers`](https://code.claude.com/docs/zh-CN/settings-reference#managedmcpservers) 块在会话的获取确认负载之前不会生效。Claude Code 会在连接 MCP 服务器之前等待该获取最多 30 秒。如果获取失败或超时,会话将在没有组织服务器的情况下启动,`/status` 会说明这一点,并且这些服务器会在后续获取确认它们后连接。有关完整行为(包括首次启动),请参阅[提供的服务器何时连接](https://code.claude.com/docs/zh-CN/managed-mcp.md#when-provided-servers-connect)。需要 Claude Code v2.1.259 或更高版本

176* 缓存的 [`prependPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#prependplugins)、[`appendPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#appendplugins) 或 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 值在会话的获取确认负载之前,无法移除内置守卫、更改其位置或将其关闭176* 缓存的 [`prependPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#prependplugins)、[`appendPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#appendplugins) 或 [`enabledPlugins`](https://code.claude.com/docs/zh-CN/settings-reference#enabledplugins) 值在会话的获取确认负载之前,无法移除内置守卫、更改其位置或将其关闭

177* 在[端点管理的源](https://code.claude.com/docs/zh-CN/managed-settings.md#choose-a-delivery-mechanism)自行列出或启用插件的机器上,仅由缓存列表启用的插件在获取确认负载之前被视为[用户的](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)插件,而非您组织的插件177* 在[端点托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#choose-a-delivery-mechanism)自行列出或启用插件的机器上,仅由缓存列表启用的插件在获取确认负载之前被视为[用户的](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#install-your-organizations-mods)插件,而不是您组织的插件

178* Claude Code 在后台获取新鲜设置178* Claude Code 在后台获取最新设置

179* 缓存的设置通过网络故障持久化。如果启动获取失败,Claude Code 在交互式会话中警告缓存的策略有效179* 缓存的设置在网络故障期间保持有效。如果启动时的获取失败,Claude Code 会在交互式会话中警告缓存的策略正在生效

180* 在某次获取成功之前,启动时被暂扣的值保持暂扣状态180* 在获取成功之前,启动时暂缓的值保持暂缓

181 181 

182Claude Code 会暂扣缓存的 `env` 块中的多个变量类别,直到服务器确认该会话的负载。这可以防止缓存的代理、证书颁发机构、端点或凭据值重定向、拦截或重新身份验证确认负载的设置获取。加固仅适用于服务器获取的设置缓存:通过 MDM 或 `managed-settings.json` 部署的[端点管理的设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)不受影响。被暂扣的类别包括:182Claude Code 会暂缓缓存的 `env` 块中的若干类变量,直到服务器为该会话确认负载。这可以防止缓存的代理、证书颁发机构、端点或凭据值对确认负载的设置获取进行重定向、拦截或重新身份验证。这项加固仅适用于从服务器获取的设置缓存:通过 MDM 或 `managed-settings.json` 部署的[端点托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)不受影响。被暂缓的类别包括:

183 183 

184* 代理和 TLS 配置,例如 `HTTPS_PROXY`、`NODE_EXTRA_CA_CERTS` 以及 mTLS 客户端证书变量 `CLAUDE_CODE_CLIENT_CERT` 和 `CLAUDE_CODE_CLIENT_KEY`184* 代理和 TLS 配置,例如 `HTTPS_PROXY`、`NODE_EXTRA_CA_CERTS`,以及 mTLS 客户端证书变量 `CLAUDE_CODE_CLIENT_CERT` 和 `CLAUDE_CODE_CLIENT_KEY`

185* API 路由和提供商选择,包括 `ANTHROPIC_BASE_URL`、提供商选择变量(例如 `CLAUDE_CODE_USE_BEDROCK` 和 `CLAUDE_CODE_USE_VERTEX`)以及提供商端点 URL(例如 `ANTHROPIC_BEDROCK_BASE_URL`)185* API 路由和提供商选择,包括 `ANTHROPIC_BASE_URL`、提供商选择变量(例如 `CLAUDE_CODE_USE_BEDROCK` 和 `CLAUDE_CODE_USE_VERTEX`),以及提供商端点 URL(例如 `ANTHROPIC_BEDROCK_BASE_URL`)

186* 身份验证凭证,例如 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 和 `CLAUDE_CODE_OAUTH_TOKEN`186* 身份验证凭据,例如 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 和 `CLAUDE_CODE_OAUTH_TOKEN`

187* 配置目录选择器 `CLAUDE_CONFIG_DIR`187* 配置目录选择器 `CLAUDE_CONFIG_DIR`

188* 凭证源和配置目录选择器,在 Claude Code v2.1.223 或更高版本中:工作负载身份联合变量(例如 `ANTHROPIC_FEDERATION_RULE_ID` 和 `ANTHROPIC_IDENTITY_TOKEN`)、配置文件和配置目录选择器 `ANTHROPIC_PROFILE` 和 `ANTHROPIC_CONFIG_DIR` 以及操作系统目录变量 `HOME`、`XDG_CONFIG_HOME`、`APPDATA` 和 `USERPROFILE`188* 凭据来源和配置目录选择器(在 Claude Code v2.1.223 或更高版本中):Workload Identity Federation 变量(例如 `ANTHROPIC_FEDERATION_RULE_ID` 和 `ANTHROPIC_IDENTITY_TOKEN`)、配置文件和配置目录选择器 `ANTHROPIC_PROFILE` 和 `ANTHROPIC_CONFIG_DIR`,以及操作系统目录变量 `HOME`、`XDG_CONFIG_HOME`、`APPDATA` 和 `USERPROFILE`

189 189 

190Claude Code 仅在启动时读取工作负载身份联合变量以及 `ANTHROPIC_PROFILE` 和 `ANTHROPIC_CONFIG_DIR` 选择器,因此服务器传递的值不会在获取成功后切换会话的凭证源。要在 Claude Code v2.1.223 或更高版本上传递这些选择器,请使用[端点管理的设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms),例如 MDM 或 `managed-settings.json`。对于 `CLAUDE_CONFIG_DIR` 和操作系统目录变量,暂扣本身就是保护:缓存的值保持在环境之外,直到服务器确认有效负载。190Claude Code 仅在启动时读取 Workload Identity Federation 变量以及 `ANTHROPIC_PROFILE` 和 `ANTHROPIC_CONFIG_DIR` 选择器,因此即使获取成功,服务器提供的这些值也不会切换会话的凭据来源。要在 Claude Code v2.1.223 或更高版本上提供这些选择器,请使用 MDM 或 `managed-settings.json` 等[端点托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)。对于 `CLAUDE_CONFIG_DIR` 和操作系统目录变量,暂缓本身就是保护措施:缓存的值在服务器确认负载之前不会进入环境。

191 191 

192缓存的 `env` 块中的所有其他键在启动时应用。一旦服务器确认有效负载,并且如果需要[安全批准](#security-approval-dialogs)您批准它,被暂扣的变量在会话的其余时间应用。192缓存的 `env` 块中的其他所有键都在启动时生效。一旦服务器确认负载,并且在需要[安全批准](#security-approval-dialogs)时您已批准,被暂缓的变量将在会话的剩余时间内生效。

193 193 

194如果您的组织需要代理来访问 `api.anthropic.com`,暂扣仅影响服务器传递的 `env` 块本身:通过 MDM 或 `managed-settings.json` 在[端点管理的](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms) `env` 块中设置的代理、在 shell 环境中或在[用户设置](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)中到达设置获取。端点管理的源需要 Claude Code v2.1.223 或更高版本:缓存的服务器管理的代理值会被暂扣,直到获取确认它,因此端点管理的值按键填充并到达获取本身。在 v2.1.223 之前,使用 shell 环境或用户设置,以便代理与缓存的服务器有效负载一起应用。首次启动没有缓存,因此端点管理的源、shell 环境或用户设置仍然需要初始获取。194如果您的组织需要通过代理访问 `api.anthropic.com`,暂缓只影响服务器提供的 `env` 块本身:通过 MDM 或 `managed-settings.json` 在[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)的 `env` 块中设置的代理、在 shell 环境中设置的代理,或在[用户设置](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)中设置的代理,都会作用于设置获取。端点托管来源需要 Claude Code v2.1.223 或更高版本:缓存的服务器托管代理值在获取确认之前被暂缓,因此端点托管的值会按键填补并作用于获取本身。在 v2.1.223 之前,请使用 shell 环境或用户设置,使代理与缓存的服务器负载同时生效。首次启动时没有缓存,因此初始获取仍需要端点托管来源、shell 环境或用户设置。

195 195 

196Claude Code 将大多数设置更新应用于运行的会话而无需重新启动。某些更新仅在下次启动时应用,包括 OpenTelemetry 导出器配置、`model` 键以及从 `env` 块中移除变量。196Claude Code 会将大多数设置更新应用到正在运行的会话中,无需重启。某些更新仅在下次启动时生效,包括 OpenTelemetry 导出器配置、`model` 键,以及从 `env` 块中移除变量。

197 197 

198### 已传递设置中的无效条目198### 分发的设置中的无效条目

199 199 

200当有效负载的一部分未通过架构验证时,Claude Code 会显示验证错误并应用每个剩余的有效设置;[托管设置中的无效条目](https://code.claude.com/docs/zh-CN/managed-settings.md#invalid-entries-in-managed-settings)说明它删除了什么以及哪些键回退到更严格的值。需要 Claude Code v2.1.169 或更高版本。200当负载的某部分未通过 schema 验证时,Claude Code 会显示验证错误,并应用其余所有有效设置;[托管设置中的无效条目](https://code.claude.com/docs/zh-CN/managed-settings.md#invalid-entries-in-managed-settings)说明了它会丢弃哪些内容,以及哪些键会回退到更严格的值。需要 Claude Code v2.1.169 或更高版本。

201 201 

202服务器管理的传递添加了这些行为:202服务器托管分发额外具有以下行为:

203 203 

204* 位于 `~/.claude/remote-settings.json` 的缓存上的启动会按照写入缓存的获取处理无效条目的方式处理它们:204* 基于 `~/.claude/remote-settings.json` 中的缓存运行的启动,会按照写入该缓存的那次获取的方式处理无效条目:

205 * 未通过验证的条目保持被删除。205 * 未通过验证的条目保持被丢弃。

206 * [故障关闭的键](https://code.claude.com/docs/zh-CN/managed-settings.md#keys-that-fail-closed)保持其更严格的值。206 * [失败即关闭的键](https://code.claude.com/docs/zh-CN/managed-settings.md#keys-that-fail-closed)保持其更严格的值。

207 * 无效的 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 值保留在缓存副本中,永远不会被应用。207 * 无效的 `cleanupPeriodDays` 或 `desktopSessionCleanupPeriodDays` 值保留在缓存副本中,且永远不会被应用。

208* 当以下三个条件都为真时,Claude Code 不应用有效负载中的任何内容,并保持缓存不变:208* 当以下三点全部成立时,Claude Code 不会应用负载中的任何内容,并保持缓存不变:

209 209 

210 * 有效负载中的每个设置都未通过验证。210 * 负载中的每个设置都未通过验证。

211 * 它们都不回退到更严格的值。211 * 其中没有任何设置回退到更严格的值。

212 * 有效负载包含除这两个保留键之外的键。212 * 负载中包含除这两个保留期键之外的其他键。

213 213 

214 启动通知、`/status` 和 `claude doctor` 然后报告[失败的加载](https://code.claude.com/docs/zh-CN/errors.md#remote-managed-settings-failed-to-load),原因为 `no setting in the server response could be applied as written`,该条目说明会话运行的策略。[强制执行故障关闭启动](#enforce-fail-closed-startup)的客户端在启动时退出。214 此时,启动通知、`/status` 和 `claude doctor` 会报告[加载失败](https://code.claude.com/docs/zh-CN/errors.md#remote-managed-settings-failed-to-load),原因为 `no setting in the server response could be applied as written`,该条目会说明会话基于哪个策略运行。[强制失败即关闭的启动](#enforce-fail-closed-startup)的客户端则会在启动时退出。

215* [安全批准对话框](#security-approval-dialogs)评估已保存的有效负载,因此被删除的无效条目永远不会被呈现以供批准,也永远不会执行。215* [安全批准对话框](#security-approval-dialogs)评估的是修复后的负载,因此被剥离的无效条目永远不会被提交批准,也永远不会执行。

216 216 

217要调试传递问题,请运行 `claude --debug-file <path>` 并在日志中搜索 `Remote settings`。在向组织推出有效负载更改之前,使用 `claude doctor` 在测试机器上验证有效负载更改。217要调试分发问题,请运行 `claude --debug-file <path>` 并在日志中搜索 `Remote settings`。在将负载更改推广到整个组织之前,请先在测试机器上使用 `claude doctor` 进行验证。

218 218 

219### 强制执行故障关闭启动219### 强制失败即关闭的启动

220 220 

221默认情况下,如果远程设置获取在启动时失败,CLI 继续运行,使用从上次成功获取缓存的设置,但 [Claude Code 在获取成功前暂扣的值](#fetch-and-caching-behavior)除外。在从未获取过它们的机器上,CLI 继续运行而不使用服务器管理的设置,仍然应用设备上的任何[端点管理的设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)。221默认情况下,如果启动时远程设置获取失败,CLI 会使用上一次成功获取时缓存的设置继续运行,但 Claude Code 在获取成功之前[暂缓的值](#fetch-and-caching-behavior)除外。在从未获取过这些设置的机器上,CLI 会在没有服务器托管设置的情况下继续运行,并仍然应用设备上的任何[端点托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)。

222 222 

223要阻止客户端在缓存或缺失的服务器管理的设置上启动,请在您的托管设置中设置 `forceRemoteSettingsRefresh: true`。223要阻止客户端在使用缓存的或缺失的服务器托管设置时启动,请在您的托管设置中设置 `forceRemoteSettingsRefresh: true`。

224 224 

225通过[Claude 应用网关](#platform-availability)登录的客户端无论您是否设置此项都会等待启动获取,并按如下方式处理失败的获取:225通过 [Claude apps 网关](#platform-availability)登录的客户端无论是否设置此项都会等待启动时的获取,并按如下方式处理获取失败:

226 226 

227* 如果网关用 `401` 回答有人值守的交互式启动,且此设置关闭,网关已结束该登录。Claude Code 打印 [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/zh-CN/errors#cloud-gateway-session-expired) 并打开会话,从网关登出,直到用户运行 `/login`。227* 如果网关对有人值守的交互式启动返回 `401`,且此设置处于关闭状态,则表示网关已结束该登录。Claude Code 会打印 [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/zh-CN/errors#cloud-gateway-session-expired),并在用户运行 `/login` 之前以未登录网关的状态打开会话。

228* 当获取以任何其他方式失败,或在除 `claude auth` 子命令外的任何其他类型的启动中,客户端以错误退出。228* 当获取以任何其他方式失败时,或在除 `claude auth` 子命令之外的任何其他类型的启动中,客户端会报错退出。

229 229 

230当此设置在获取服务器管理的设置的会话中处于活动状态时,CLI 在启动时阻止,直到远程设置被新鲜获取。如果获取失败,CLI 退出而不是继续运行而不使用策略。此设置自我延续:一旦从服务器传递,它也会在本地缓存,以便后续启动即使在新会话的首次成功获取之前也强制执行相同的行为。[不获取服务器管理的设置](#platform-availability)的会话启动时不等待。230当此设置在获取服务器托管设置的会话中生效时,CLI 会在启动时阻塞,直到重新获取远程设置。如果获取失败,CLI 会退出,而不是在没有策略的情况下继续。此设置具有自我延续性:一旦从服务器下发,它也会被缓存到本地,这样后续启动即使在新会话首次成功获取之前也会执行相同的行为。[不获取服务器托管设置](#platform-availability)的会话会直接启动,无需等待。

231 231 

232要启用此功能,请将键添加到您的托管设置配置中:232要启用此功能,请将该键添加到您的托管设置配置中:

233 233 

234```json theme={null}234```json theme={null}

235{235{


237}237}

238```238```

239 239 

240您也可以在[端点管理的](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms) MDM 配置文件或系统 `managed-settings.json` 文件中设置此键,以在首次启动时强制执行故障关闭行为,在任何服务器有效负载被传递之前。此标志是上述[优先级规则](#settings-precedence)的例外:当任何管理员控制的托管源设置它时,Claude Code 会遵守它,即使也存在缓存的服务器管理有效负载,因此当服务器管理的设置存在时,MDM 传递的值不会被忽略。240您也可以在[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)的 MDM 配置描述文件或系统 `managed-settings.json` 文件中设置此键,以便在任何服务器负载到达之前、在首次启动时就执行失败即关闭的行为。此标志是上述[优先级规则](#settings-precedence)的一个例外:当任何由管理员控制的托管来源设置了它时,即使同时存在缓存的服务器托管负载,Claude Code 也会遵循它,因此当存在服务器托管设置时,它不会忽略通过 MDM 下发的值。

241 241 

242当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,其输出替换 Claude Code 在启动后读取的键的所有其他托管源。有关 Claude Code 从哪些源读取此键的信息,请参阅[其设置条目](https://code.claude.com/docs/zh-CN/settings-reference.md#forceremotesettingsrefresh)。`policyHelper` 条目说明 Claude Code 从哪些源读取助手以及何时运行它。242当 [`policyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#policyhelper) 提供托管设置时,对于 Claude Code 在启动后读取的键,其输出会取代所有其他托管来源。有关 Claude Code 从哪些来源读取此键,请参阅[其设置条目](https://code.claude.com/docs/zh-CN/settings-reference.md#forceremotesettingsrefresh)。`policyHelper` 条目说明了 Claude Code 从哪些来源读取该 helper 以及它何时运行。

243 243 

244设置获取还发送 `Cache-Control: no-cache` 标头,以便中间 HTTP 代理不会提供陈旧的响应。244设置获取还会发送 `Cache-Control: no-cache` 标头,以防止中间 HTTP 代理返回过期的响应。

245 245 

246在启用此设置之前,请确保您的网络策略允许连接到 `api.anthropic.com`。如果该端点无法访问,CLI 在启动时退出,用户无法启动 Claude Code。246在启用此设置之前,请确保您的网络策略允许连接到 `api.anthropic.com`。如果该端点无法访问,CLI 会在启动时退出,用户将无法启动 Claude Code。

247 247 

248`claude auth` 子命令(例如 `claude auth login`)不受此检查和网关启动退出的限制,因此用户可以在过期的凭证是设置获取失败的原因时重新身份验证。248`claude auth` 子命令(例如 `claude auth login`)不受此检查和网关启动退出的限制,因此当凭据过期导致设置获取失败时,用户可以重新进行身份验证。

249 249 

250### 安全批准对话框250### 安全批准对话框

251 251 

252某些可能带来安全风险的设置在 Claude Code 在交互式会话中应用它们之前需要明确的用户批准:252某些可能带来安全风险的设置,在 Claude Code 于交互式会话中应用它们之前,需要用户明确批准:

253 253 

254* **Shell 命令设置**:执行 shell 命令的设置,例如 `apiKeyHelper`、`statusLine` 和 `otelHeadersHelper`254* **Shell 命令设置**:执行 shell 命令的设置,例如 `apiKeyHelper`、`statusLine` 和 `otelHeadersHelper`

255* **沙箱二进制设置**:`sandbox.bwrapPath`、`sandbox.socatPath` 和 `sandbox.ripgrep`。这些设置中的每一个都指向一个可执行文件,Claude Code 运行该可执行文件255* **沙箱二进制文件设置**:`sandbox.bwrapPath`、`sandbox.socatPath` 和 `sandbox.ripgrep`。这些设置各自指向一个可执行文件,Claude Code 会运行该可执行文件

256* **沙箱网络和隔离设置**:[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md)设置,让沙箱代理读取、重新路由或身份验证流量,或削弱沙箱的隔离:`sandbox.network.tlsTerminate`、`sandbox.network.httpProxyPort`、`sandbox.network.socksProxyPort`、`sandbox.credentials`、`sandbox.allowAppleEvents`、`sandbox.allowNestedUserNamespaces`、`sandbox.enableWeakerNestedSandbox`、`sandbox.enableWeakerNetworkIsolation`、`sandbox.filesystem.disabled`、`sandbox.network.allowAllUnixSockets`、`sandbox.network.allowUnixSockets` 和 `sandbox.network.allowMachLookup`。仅包含 `deny` 规则的 `sandbox.credentials` 块不需要批准,因为它限制沙箱而不给代理凭据。在 v2.1.251 之前,Claude Code 应用这些设置而无需批准256* **沙箱网络和隔离设置**:允许沙箱代理读取、重新路由流量或对流量进行身份验证,或削弱沙箱隔离的[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md)设置:`sandbox.network.tlsTerminate`、`sandbox.network.httpProxyPort`、`sandbox.network.socksProxyPort`、`sandbox.credentials`、`sandbox.allowAppleEvents`、`sandbox.allowNestedUserNamespaces`、`sandbox.enableWeakerNestedSandbox`、`sandbox.enableWeakerNetworkIsolation`、`sandbox.filesystem.disabled`、`sandbox.network.allowAllUnixSockets`、`sandbox.network.allowUnixSockets` 和 `sandbox.network.allowMachLookup`。仅包含 `deny` 规则的 `sandbox.credentials` 块不需要批准,因为它只限制沙箱,而不会向代理提供凭据。在 v2.1.251 之前,Claude Code 无需批准即可应用这些设置

257* **自定义环境变量**:传递的 `env` 变量,需要用户批准,例如代理和基础 URL 变量;请参阅[环境变量和批准对话框](#environment-variables-and-the-approval-dialog)257* **自定义环境变量**:需要用户批准的下发 `env` 变量,例如代理和 base-URL 变量;请参阅[环境变量和批准对话框](#environment-variables-and-the-approval-dialog)

258* **Hook 配置**:任何 hook 定义258* **Hook 配置**:任何 hook 定义

259 259 

260当这些设置存在时,用户会看到一个安全对话框,解释正在配置的内容。用户必须批准才能继续。如果用户拒绝设置,Claude Code 会退出。260当存在这些设置时,用户会看到一个安全对话框,说明正在配置的内容。用户必须批准才能继续。如果用户拒绝这些设置,Claude Code 会退出。

261 261 

262通过 [`claudeMd`](https://code.claude.com/docs/zh-CN/settings-reference#claudemd) 键传递的托管 CLAUDE.md 不需要批准,因为它是 Claude 的指令文本,而不是 Claude Code 运行的命令。Claude Code 仍然检查 Claude 在遵循这些指令时使用的工具的[权限](https://code.claude.com/docs/zh-CN/permissions.md)。在 v2.1.260 之前,`claudeMd` 值需要批准。262通过 [`claudeMd`](https://code.claude.com/docs/zh-CN/settings-reference#claudemd) 键下发的托管 CLAUDE.md 不需要批准,因为它是给 Claude 的指令文本,而不是 Claude Code 运行的命令。Claude Code 仍会检查 Claude 在遵循这些指令时所使用工具的[权限](https://code.claude.com/docs/zh-CN/permissions.md)。在 v2.1.260 之前,`claudeMd` 值也需要批准。

263 263 

264#### 批准记忆264#### 批准记录

265 265 

266Claude Code 在您的配置目录 `~/.claude` 中记录您的批准,除非您设置 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars)。它记录的内容取决于设置获取使用的凭证:266Claude Code 会将您的批准记录在您的配置目录中,除非您设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),否则该目录为 `~/.claude`。记录的内容取决于设置获取所使用的凭据:

267 267 

268* **通过 `/login` 或 `claude auth login` 保存的 claude.ai 登录,或[无密钥控制台登录](https://code.claude.com/docs/zh-CN/authentication.md#sign-in-without-an-api-key)**:每个组织一个批准,由最近批准的账户持有。268* **通过 `/login` 或 `claude auth login` 保存的 claude.ai 登录,或[无密钥 Console 登录](https://code.claude.com/docs/zh-CN/authentication.md#sign-in-without-an-api-key)**:每个组织一个批准,由最近一次批准的账户持有。

269* **[Claude 应用网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway)登录**:每个网关一个批准。269* **[Claude apps 网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway)登录**:每个网关一个批准。

270 270 

271 如果您登出并重新登录到同一网关,当需要批准的设置未更改时,Claude Code 不会再次显示对话框。当这些设置更改、您登录到不同的网关以及您为同一网关接受新证书时,Claude Code 会再次显示它。271 如果您注销后重新登录到同一网关,只要需要批准的设置未发生变化,Claude Code 就不会再次显示该对话框。当这些设置发生变化、您登录到其他网关,或您为同一网关接受新证书时,Claude Code 会再次显示该对话框。

272 272 

273 Claude Code 不为通过纯 HTTP 到达的环回开发网关保存批准,因此对话框在每次登录后再次出现。273 对于通过纯 HTTP 访问的环回开发网关,Claude Code 不会保存批准,因此每次登录后都会再次出现该对话框。

274* **任何其他凭证**,例如 API 密钥或 `CLAUDE_CODE_OAUTH_TOKEN`:一个批准用于传递的设置,与该配置目录中设置的缓存副本一起保留。当需要批准的设置更改时,Claude Code 会显示对话框,在您运行 `/logout` 或 `claude auth logout` 后,其中任何一个都会删除缓存副本。274* **任何其他凭据**,例如 API 密钥或 `CLAUDE_CODE_OAUTH_TOKEN`:对下发的设置记录一个批准,与该配置目录中设置的缓存副本保存在一起。当需要批准的设置发生变化时,以及在您运行 `/logout` 或 `claude auth logout`(两者都会删除缓存副本)之后,Claude Code 会再次显示该对话框。

275 275 

276对于 `sandbox.credentials` 或 `sandbox.network.tlsTerminate` 的批准也涵盖这些相同传递设置中的 [`sandbox.network.allowedDomains`](https://code.claude.com/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 条目,因为两个设置都作用于该允许列表。当您的管理员添加或移除其中一个条目时,对话框会再次出现,即使 `sandbox.network.allowedDomains` 本身不需要批准。276对 `sandbox.credentials` 或 `sandbox.network.tlsTerminate` 的批准也涵盖同一批下发设置中的 [`sandbox.network.allowedDomains`](https://code.claude.com/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 条目,因为这两个设置都作用于该允许列表。当您的管理员添加或删除其中某个条目时,对话框会再次出现,即使 `sandbox.network.allowedDomains` 本身不需要批准。

277 277 

278使用保存的 claude.ai 登录:278使用已保存的 claude.ai 登录时:

279 279 

280* 如果您登出并重新登录,或切换到另一个组织,稍后返回,当这些设置未更改时,Claude Code 不会再次显示对话框,除非另一个账户在同一配置目录中为该组织批准了它们。280* 如果您注销后重新登录,或切换到另一个组织后再切换回来,只要这些设置未发生变化,Claude Code 就不会再次显示该对话框,除非在此期间另一个账户在同一配置目录中为该组织批准了这些设置。

281* 如果您使用不同的账户登录到同一组织,即使设置未更改,Claude Code 也会再次显示对话框。该账户的批准替换前一个,因此当您切换回来时,Claude Code 会再次显示对话框。281* 如果您使用其他账户登录到同一组织,即使设置未发生变化,Claude Code 也会再次显示该对话框。该账户的批准会取代之前的批准,因此当您切换回来时,Claude Code 会再次显示该对话框。

282 282 

283Claude Code 无法始终显示对话框。下面的每种情况说明当它无法显示时哪些设置适用,以及您何时下次看到对话框:283Claude Code 并非总能显示该对话框。以下各种情况说明了无法显示时哪些设置生效,以及您下次何时会看到该对话框:

284 284 

285* **无法显示对话框的交互式会话**:Claude Code 不应用传递的设置,保留最后批准的设置。对话框在下一个可以显示它的会话中出现。285* **无法显示对话框的交互式会话**:Claude Code 不应用下发的设置,并保留上次批准的设置。对话框会在下一个能够显示它的会话中出现。

286* **`claude install` 或 `claude update`**:Claude Code 在任何命令期间都不显示对话框。该命令使用最后批准的设置运行,对话框在您的下一个交互式会话中出现。如果 Claude Code 在启动时等待设置获取,例如设置了 [`forceRemoteSettingsRefresh`](#enforce-fail-closed-startup) 或在[Claude 应用网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway)部署上,它会在命令期间显示对话框,从管道运行的安装失败;请参阅[安装期间 `Raw mode is not supported`](https://code.claude.com/docs/zh-CN/troubleshoot-install#raw-mode-is-not-supported-during-install)。在 v2.1.246 之前,Claude Code 也尝试在这些命令期间显示对话框。286* **`claude install` 或 `claude update`**:在这两个命令中的任何一个运行期间,Claude Code 都不会显示该对话框。命令会使用上次批准的设置运行,对话框会在您的下一个交互式会话中出现。如果 Claude Code 在启动时等待设置获取(例如设置了 [`forceRemoteSettingsRefresh`](#enforce-fail-closed-startup),或在 [Claude apps 网关](https://code.claude.com/docs/zh-CN/claude-apps-gateway)部署中),它会改为在命令运行期间显示该对话框,并且从管道运行的安装会失败;请参阅[安装期间出现 `Raw mode is not supported`](https://code.claude.com/docs/zh-CN/troubleshoot-install#raw-mode-is-not-supported-during-install)。在 v2.1.246 之前,Claude Code 在这两个命令运行期间也会尝试显示该对话框。

287* **输出到终端但无法从键盘读取的 `claude plugin` 命令**:当 Claude Code 在启动时不等待设置获取时,该命令不应用传递的设置。在没有[缓存的设置](#fetch-and-caching-behavior)的情况下,更改您的插件或市场的命令会[因错误而停止](https://code.claude.com/docs/zh-CN/errors.md#managed-settings-need-your-approval)。有缓存的设置时,它使用最后批准的设置运行。对话框会在您下次在终端中运行 `claude` 时出现。287* **输出到终端但无法从键盘读取的 `claude plugin` 命令**:当 Claude Code 在启动时不等待设置获取时,该命令不会应用下发的设置。在没有[缓存设置](#fetch-and-caching-behavior)的情况下,更改您的插件或市场的命令会[报错停止](https://code.claude.com/docs/zh-CN/errors.md#managed-settings-need-your-approval)。在有缓存设置的情况下,它会使用上次批准的设置运行。对话框会在您下次于终端中运行 `claude` 时出现。

288 288 

289 当您通过管道传递或重定向其输入,并且在 macOS 和 Linux 上它也无法打开 `/dev/tty` 时,该命令无法从键盘读取。如果您也通过管道传递或重定向其输出,则该运行改为非交互式,传递的设置仅对该运行应用。289 当您通过管道传入或重定向其输入,并且在 macOS 和 Linux 上它也无法打开 `/dev/tty` 时,该命令无法从键盘读取。如果您同时通过管道传出或重定向其输出,则该运行会变为非交互式,下发的设置仅对该次运行生效。

290* **错误在您回答前关闭对话框**:Claude Code 不应用传递的设置,保留最后批准的设置。它在下一个可以显示它的会话中再次显示对话框。290* **错误在您作答之前关闭了对话框**:Claude Code 不应用下发的设置,并保留上次批准的设置。它会在下一个能够显示该对话框的会话中再次显示它。

291* **非交互式运行**,例如 `claude -p`、Agent SDK 会话或 VS Code 扩展的聊天面板或桌面应用的代码选项卡中的会话:Claude Code 无法显示对话框,因此当传递的设置需要批准时,它仅为该运行应用它们。它不将它们记录为已批准或写入[本地缓存](#fetch-and-caching-behavior),下一个交互式会话会显示对话框。在用户在交互式会话中批准之前,每个非交互式运行都会在启动时再次获取设置。在 v2.1.207 之前,非交互式运行会将设置保存为已批准,因此后来的交互式会话永远不会为它们显示对话框。291* **非交互式运行**,例如 `claude -p`、Agent SDK 会话,或 VS Code 扩展聊天面板或桌面应用 Code 标签页中的会话:Claude Code 无法显示该对话框。当下发的设置需要批准时,它们仅对该次运行生效。

292 

293 Claude Code 不会将这些设置记录为已批准,也不会将它们写入[本地缓存](#fetch-and-caching-behavior),下一个交互式会话会显示该对话框。在用户于交互式会话中批准之前,每次非交互式运行都会在启动时重新获取设置。

292 294 

293#### 环境变量和批准对话框295#### 环境变量和批准对话框

294 296 

295Claude Code 应用某些传递的 `env` 变量而不显示用户批准对话框,包括:297Claude Code 会在不向用户显示批准对话框的情况下应用某些下发的 `env` 变量,包括:

296 298 

297* 功能和命令切换299* 功能和命令开关

298* 模型选择和行为设置,例如 `ANTHROPIC_MODEL`、`DISABLE_PROMPT_CACHING` 和 `CLAUDE_CODE_EFFORT_LEVEL`300* 模型选择和行为设置,例如 `ANTHROPIC_MODEL`、`DISABLE_PROMPT_CACHING` 和 `CLAUDE_CODE_EFFORT_LEVEL`

299* 上下文窗口和压缩设置,例如 `DISABLE_AUTO_COMPACT`,但不包括 `CLAUDE_CODE_DISABLE_1M_CONTEXT`301* 上下文窗口和压缩设置,例如 `DISABLE_AUTO_COMPACT`,但不包括 `CLAUDE_CODE_DISABLE_1M_CONTEXT`

300* 终端 UI 和可访问性选项302* 终端 UI 和无障碍选项

301* 数字限制、预算和超时303* 数值限制、预算和超时时间

302 304 

303其他传递的变量可能需要用户批准才能生效。例如,在交互式会话中,以下变量在任何非空值时总是需要批准:305其他下发的变量可能需要用户批准后才能生效。例如,在交互式会话中,以下变量在任何非空值下都始终需要批准:

304 306 

305* 代理或基础 URL 变量307* 代理或 base-URL 变量

306* `OTEL_EXPORTER_OTLP_ENDPOINT`308* `OTEL_EXPORTER_OTLP_ENDPOINT`

307* `CLAUDE_CODE_DISABLE_1M_CONTEXT`309* `CLAUDE_CODE_DISABLE_1M_CONTEXT`

308 310 

309当传递的变量需要批准时,对话框会命名它,因此用户会看到策略要求设置的确切内容。在 v2.1.218 之前,Claude Code 应用较少的变量而不询问用户,因此 `DISABLE_AUTO_COMPACT` 等设置在任何非空值时触发对话框。311当某个下发的变量需要批准时,对话框会列出它的名称,以便用户确切了解策略要求设置的内容。

310 312 

311Claude Code 根据传递的值而不是变量名称决定四个隐私切换是否需要批准:`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`、`DISABLE_ERROR_REPORTING`、`DISABLE_TELEMETRY` 和 `DO_NOT_TRACK`。真值(例如 `1` 或 `true`)仅关闭跟踪、报告或其他非必要流量,因此 Claude Code 应用它而不询问用户。对于任何其他非空值,Claude Code 会显示对话框。在 v2.1.218 之前,除了 `DO_NOT_TRACK` 外的所有这些都在任何值时应用而无需批准,`DO_NOT_TRACK` 在任何非空值时触发对话框。313对于四个隐私开关,Claude Code 根据下发的值而不是变量名来决定是否需要批准:`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`、`DISABLE_ERROR_REPORTING`、`DISABLE_TELEMETRY` 和 `DO_NOT_TRACK`。真值(例如 `1` 或 `true`)只会关闭追踪、报告或其他非必要流量,因此 Claude Code 会在不询问用户的情况下应用它。对于任何其他非空值,Claude Code 会显示该对话框。

312 314 

313Claude Code 也根据传递的值决定 [`API_FORCE_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 是否需要批准:真值仅打开[主体空闲超时](https://code.claude.com/docs/zh-CN/network-config.md#streaming-idle-watchdogs),因此 Claude Code 应用它而不询问用户。对于任何其他非空值,Claude Code 会显示对话框。在 v2.1.248 之前,任何非空值都触发对话框。315Claude Code 同样根据下发的值来决定 [`API_FORCE_IDLE_TIMEOUT`](https://code.claude.com/docs/zh-CN/env-vars) 是否需要批准:真值只会开启[响应体空闲超时](https://code.claude.com/docs/zh-CN/network-config.md#streaming-idle-watchdogs),因此 Claude Code 会在不询问用户的情况下应用它。对于任何其他非空值,Claude Code 会显示该对话框。在 v2.1.248 之前,任何非空值都会触发该对话框。

314 316 

315[`ANTHROPIC_CUSTOM_HEADERS`](https://code.claude.com/docs/zh-CN/env-vars#variables) 是否需要批准也取决于传递的值。仅标记请求的标头(例如 `Accept-Language`)应用而无需对话框。命名凭证、组织或租户选择器、路由或主机覆盖或 API 行为标头(例如 `Authorization`、`X-Api-Key`、`Host`、`anthropic-beta` 或 `X-Amzn-Bedrock-*` 标头)的行需要批准。名称不是有效 HTTP 标头令牌的行,或其值包含 HTTP 标头无法携带的字符的行也需要。检查与标头名称内的单词匹配,因此包含 `client` 和 `version` 的 `X-Client-Version` 也需要批准。在 v2.1.251 之前,任何 `ANTHROPIC_CUSTOM_HEADERS` 值应用而无需它。317[`ANTHROPIC_CUSTOM_HEADERS`](https://code.claude.com/docs/zh-CN/env-vars#variables) 是否需要批准也取决于下发的值。仅用于标记请求的标头(例如 `Accept-Language`)无需对话框即可生效。命名凭据、组织或租户选择器、路由或主机覆盖,或 API 行为标头的行(例如 `Authorization`、`X-Api-Key`、`Host`、`anthropic-beta` 或 `X-Amzn-Bedrock-*` 标头)需要批准。如果某行的名称不是有效的 HTTP 标头 token,或其值包含 HTTP 标头无法承载的字符,该行也需要批准。该检查会匹配标头名称中的单词,因此包含 `client` 和 `version` 的 `X-Client-Version` 也需要批准。在 v2.1.251 之前,任何 `ANTHROPIC_CUSTOM_HEADERS` 值都无需批准即可生效。

316 318 

317[`ENABLE_BETA_TRACING_DETAILED`](https://code.claude.com/docs/zh-CN/env-vars#variables) 或 [`OTEL_LOG_RAW_API_BODIES`](https://code.claude.com/docs/zh-CN/env-vars#variables) 的假值(例如 `0` 或 `false`)应用而无需对话框,因为它仅关闭详细跟踪或原始 API 主体捕获。任何其他非空值对于任一变量都需要批准。319[`ENABLE_BETA_TRACING_DETAILED`](https://code.claude.com/docs/zh-CN/env-vars#variables) 或 [`OTEL_LOG_RAW_API_BODIES`](https://code.claude.com/docs/zh-CN/env-vars#variables) 的假值(例如 `0` 或 `false`)无需对话框即可生效,因为它只会关闭详细追踪或原始 API 请求体捕获。这两个变量的任何其他非空值都需要批准。

318 320 

319## 平台可用性321## 平台可用性

320 322 

sessions.md +2 −2

Details

46当 Claude Code 从其会话记录加载对话时,恢复的会话会恢复对话以及保存在其中的状态:46当 Claude Code 从其会话记录加载对话时,恢复的会话会恢复对话以及保存在其中的状态:

47 47 

48* 对话历史:消息、工具调用和结果。如果会话已被[压缩](https://code.claude.com/docs/zh-CN/context-window.md#what-survives-compaction),对话会在 `Conversation compacted` 行处打开。Claude 会基于最后一次压缩的摘要、该次压缩未摘要的消息以及此后的每条消息继续。最后一次压缩已摘要的消息不会再次加载。48* 对话历史:消息、工具调用和结果。如果会话已被[压缩](https://code.claude.com/docs/zh-CN/context-window.md#what-survives-compaction),对话会在 `Conversation compacted` 行处打开。Claude 会基于最后一次压缩的摘要、该次压缩未摘要的消息以及此后的每条消息继续。最后一次压缩已摘要的消息不会再次加载。

49* 中断的工具调用:如果工具在上一个进程结束时仍在运行(例如在崩溃中),当您恢复时它不会完成或重新运行。Claude 会看到该调用被标记为在记录其结果之前被切断,并被告知在再次运行之前检查它是否已生效,除非设置了 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](https://code.claude.com/docs/zh-CN/env-vars#variables)。49* 中断的工具调用:如果工具在上一个进程结束时仍在运行(例如在崩溃中),当您恢复时它不会重新运行。

50* 模型:会话继续使用它之前使用的模型,[设置模型](https://code.claude.com/docs/zh-CN/model-config.md#setting-your-model)中所述的情况除外。50* 模型:会话继续使用它之前使用的模型,[设置模型](https://code.claude.com/docs/zh-CN/model-config.md#setting-your-model)中所述的情况除外。

51* Agent:使用 [`--agent`](https://code.claude.com/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 或 `agent` 设置启动的会话继续作为该 Agent 运行,保持其工具限制和模型。在恢复时传递 `--agent` 以选择不同的 Agent;关于任一情况下的系统提示词,请参阅[恢复对话中的系统提示词标志](https://code.claude.com/docs/zh-CN/cli-reference.md#system-prompt-flags-in-resumed-conversations)。Claude Code 在两个地方查找 Agent:会话的原始目录(前提是您已[信任该工作区](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)),然后是您恢复时所在的目录,因此项目范围的 Agent 在您从另一个目录恢复时仍会加载。如果 Claude Code 在任一位置都找不到该 Agent,会话会以默认工具恢复并显示[指明该 Agent 的警告](https://code.claude.com/docs/zh-CN/errors.md#session-agent-no-longer-available)。51* Agent:使用 [`--agent`](https://code.claude.com/docs/zh-CN/sub-agents#invoke-subagents-explicitly) 或 `agent` 设置启动的会话继续作为该 Agent 运行,保持其工具限制和模型。在恢复时传递 `--agent` 以选择不同的 Agent;关于任一情况下的系统提示词,请参阅[恢复对话中的系统提示词标志](https://code.claude.com/docs/zh-CN/cli-reference.md#system-prompt-flags-in-resumed-conversations)。Claude Code 在两个地方查找 Agent:会话的原始目录(前提是您已[信任该工作区](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)),然后是您恢复时所在的目录,因此项目范围的 Agent 在您从另一个目录恢复时仍会加载。如果 Claude Code 在任一位置都找不到该 Agent,会话会以默认工具恢复并显示[指明该 Agent 的警告](https://code.claude.com/docs/zh-CN/errors.md#session-agent-no-longer-available)。

52* 权限模式:如果您从终端使用 `claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时)恢复,且不带 `-p`,Claude Code 会恢复会话所在的权限模式,[恢复时的权限模式](#permission-mode-on-resume)中的情况除外,该部分也涵盖会话选择器、`/resume` 和使用 `claude -p` 恢复。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。52* 权限模式:如果您从终端使用 `claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时)恢复,且不带 `-p`,Claude Code 会恢复会话所在的权限模式,[恢复时的权限模式](#permission-mode-on-resume)中的情况除外,该部分也涵盖会话选择器、`/resume` 和使用 `claude -p` 恢复。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。


224* **`/compact [instructions]`**:用摘要替换历史记录,可选地专注于您指定的内容224* **`/compact [instructions]`**:用摘要替换历史记录,可选地专注于您指定的内容

225* **`/context`**:显示当前消耗的上下文225* **`/context`**:显示当前消耗的上下文

226 226 

227有关压缩如何与 CLAUDE.md、skills 和规则交互的信息,请参阅[上下文窗口指南](https://code.claude.com/docs/zh-CN/context-window.md)。有关何时清除与压缩的策略,请参阅[最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md#manage-your-session)。227有关压缩如何与 CLAUDE.md、skill 和规则交互的信息,请参阅[上下文窗口指南](https://code.claude.com/docs/zh-CN/context-window.md)。有关何时清除与压缩的策略,请参阅[最佳实践](https://code.claude.com/docs/zh-CN/best-practices.md#keep-cost-and-context-down)。

228 228 

229## 导出和定位会话数据229## 导出和定位会话数据

230 230 

settings.md +1 −1

Details

326* **包含多个仓库的共享项目设置**:在 Anthropic 托管的环境中,包含多个仓库的会话会在各克隆的上层目录启动,并且只从每个仓库的 `.claude/settings.json` 中读取 `enabledPlugins` 和 `extraKnownMarketplaces` 这两个键,而不会读取权限规则、hook、`env` 或其他键。这两个键所声明的市场和插件仍然[不会在云端会话中加载](https://code.claude.com/docs/zh-CN/cloud-environments.md#what-carries-over-from-your-setup)。对于自托管环境,请参阅[应用哪个仓库的设置](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories)。326* **包含多个仓库的共享项目设置**:在 Anthropic 托管的环境中,包含多个仓库的会话会在各克隆的上层目录启动,并且只从每个仓库的 `.claude/settings.json` 中读取 `enabledPlugins` 和 `extraKnownMarketplaces` 这两个键,而不会读取权限规则、hook、`env` 或其他键。这两个键所声明的市场和插件仍然[不会在云端会话中加载](https://code.claude.com/docs/zh-CN/cloud-environments.md#what-carries-over-from-your-setup)。对于自托管环境,请参阅[应用哪个仓库的设置](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories)。

327* **用户和项目本地设置** (`~/.claude/settings.json` 和 `.claude/settings.local.json`):不读取。两者都保持在您的机器上,本地文件不在克隆中。327* **用户和项目本地设置** (`~/.claude/settings.json` 和 `.claude/settings.local.json`):不读取。两者都保持在您的机器上,本地文件不在克隆中。

328* **托管设置**:您设备上的 `managed-settings.json` 文件或 MDM 配置文件不会到达云会话。您组织的[服务器管理设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)会;[表面覆盖](https://code.claude.com/docs/zh-CN/model-config.md#surface-coverage)列出哪些云会话接收它们。[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)也读取其运行器镜像中的托管设置文件。[Claude Code 如何组合托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)说该文件何时适用。328* **托管设置**:您设备上的 `managed-settings.json` 文件或 MDM 配置文件不会到达云会话。您组织的[服务器管理设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)会;[表面覆盖](https://code.claude.com/docs/zh-CN/model-config.md#surface-coverage)列出哪些云会话接收它们。[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)也读取其运行器镜像中的托管设置文件。[Claude Code 如何组合托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)说该文件何时适用。

329* **`/config`**:在浏览器中的 claude.ai/code 上,它会打开您的 claude.ai 设置中的 Claude Code 部分,而不是更改某个值。要为云端会话更改设置,请在环境上设置[环境变量](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-environment-variables)。在项目线程之外只有一个仓库的会话中,您也可以改为将该键提交到该仓库的 `.claude/settings.json`。329* **`/config`**:在浏览器中的 claude.ai/code 上,它会打开您的 claude.ai **Code** 或 **Claude Code** 设置页面,而不是更改某个值。要为云端会话更改设置,请在环境上设置[环境变量](https://code.claude.com/docs/zh-CN/cloud-environments.md#set-environment-variables)。在项目线程之外只有一个仓库的会话中,您也可以改为将该键提交到该仓库的 `.claude/settings.json`。

330 330 

331[从您的设置中携带什么](https://code.claude.com/docs/zh-CN/cloud-environments.md#what-carries-over-from-your-setup)列出其余的:`CLAUDE.md`、skills、MCP 服务器、plugins 和凭证。331[从您的设置中携带什么](https://code.claude.com/docs/zh-CN/cloud-environments.md#what-carries-over-from-your-setup)列出其余的:`CLAUDE.md`、skills、MCP 服务器、plugins 和凭证。

332 332 

Details

1293* 以 `sudo`、`eval` 或 `xargs` 开头的命令1293* 以 `sudo`、`eval` 或 `xargs` 开头的命令

1294* `cd`、`pushd` 或 `popd`,无论出现在调用中的哪个位置1294* `cd`、`pushd` 或 `popd`,无论出现在调用中的哪个位置

1295* 命令替换、子 shell,或 `if`、`for` 等控制流块1295* 命令替换、子 shell,或 `if`、`for` 等控制流块

1296* 重定向,例如 `docker build . > build.log`,但仅复制文件描述符的重定向(如 `2>&1`)除外1296* 重定向,例如 `docker build . > build.log` 或 `<<EOF` heredoc,仅复制文件描述符的重定向(如 `2>&1`)除外

1297* 命令名来自变量1297* 命令名来自变量

1298* 带有绝对路径、以 `~` 开头或包含 `..` 段的路径参数的 `git clone`、`git init`、`git worktree add`、`git worktree move` 或 `git bundle create`1298* 带有绝对路径、以 `~` 开头或包含 `..` 段的路径参数的 `git clone`、`git init`、`git worktree add`、`git worktree move` 或 `git bundle create`

1299 1299 


1521 1521 

1522### `sandbox.filesystem.disabled`1522### `sandbox.filesystem.disabled`

1523 1523 

1524跳过文件系统隔离,同时保留网络隔离。沙箱化命令获得对主机文件系统不受限制的读写权限,其网络出站流量仍限制在 [`network.allowedDomains`](#sandbox-network-alloweddomains) 范围内。当您使用沙箱是为了控制命令连接到哪里而不是它们写入什么时,请使用此设置。需要 Claude Code v2.1.216 或更高版本。1524跳过文件系统隔离,同时保留网络隔离。沙箱化命令可以不受限制地读写主机文件系统,而其网络出站流量仍限制在 [`network.allowedDomains`](#sandbox-network-alloweddomains) 范围内。当您使用沙箱是为了控制命令连接到哪里而非写入什么时使用此设置。

1525 1525 

1526* **作用域**:[`User or managed`](#scopes)。当托管设置配置了任何 `sandbox.filesystem` 内容,或列出了带有 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,只有托管设置可以设置它。1526* **作用域**:[`User or managed`](#scopes)。当托管设置配置了任何 `sandbox.filesystem` 内容,或列出了带有 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,只有托管设置可以设置它。

1527* **类型**:布尔值1527* **类型**:布尔值


1545}1545}

1546```1546```

1547 1547 

1548关闭该层后,Claude Code 不会强制执行 `denyRead` 或 `credentials.files` 的 `deny` 条目,而 `credentials.envVars` 条目和已应用的 `mask` 条目仍然有效。[`autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed) 仍默认为 `true`,因此如需继续提示,请将其设置为 `false`。有关可以设置它的完整来源列表以及关闭隔离后的变化,请参阅[禁用文件系统隔离](https://code.claude.com/docs/zh-CN/sandboxing.md#disable-filesystem-isolation)。需要 Claude Code v2.1.216 或更高版本。1548关闭该层后,Claude Code 不会强制执行 `denyRead` 或 `credentials.files` 的 `deny` 条目,而 `credentials.envVars` 条目和已应用的 `mask` 条目仍然有效。[`autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed) 仍默认为 `true`,因此请将其设置为 `false` 以继续显示提示。有关可以设置它的完整来源列表以及关闭隔离后的变化,请参阅[禁用文件系统隔离](https://code.claude.com/docs/zh-CN/sandboxing.md#disable-filesystem-isolation)。

1549 1549 

1550### `sandbox.ignoreViolations`1550### `sandbox.ignoreViolations`

1551 1551 


2392* [`CLAUDE_CODE_RESTRICTED`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。2392* [`CLAUDE_CODE_RESTRICTED`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。

2393* [`CLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。该变量需要 Claude Code v2.1.283 或更高版本。2393* [`CLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。该变量需要 Claude Code v2.1.283 或更高版本。

2394* [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`、`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT`、`CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` 和 `CLAUDE_CODE_DISABLE_MOUNTED_DRIVE_RM_PROMPT`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。2394* [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`、`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT`、`CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` 和 `CLAUDE_CODE_DISABLE_MOUNTED_DRIVE_RM_PROMPT`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。

2395* [`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。

2395* [`CLAUDE_CODE_WARN_DISK_FREE_GIB` 和 `CLAUDE_CODE_WARN_MEMORY_FREE_GIB`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。这些变量需要 Claude Code v2.1.304 或更高版本。2396* [`CLAUDE_CODE_WARN_DISK_FREE_GIB` 和 `CLAUDE_CODE_WARN_MEMORY_FREE_GIB`](https://code.claude.com/docs/zh-CN/env-vars#variables) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略。这些变量需要 Claude Code v2.1.304 或更高版本。

2396 2397 

2397### `fileCheckpointingEnabled`2398### `fileCheckpointingEnabled`


2716}2717}

2717```2718```

2718 2719 

2719请参阅 [Emoji 短代码](https://code.claude.com/docs/zh-CN/interactive-mode.md#emoji-shortcodes)。需要 Claude Code v2.1.217 或更高版本。2720请参阅 [Emoji 短代码](https://code.claude.com/docs/zh-CN/interactive-mode.md#emoji-shortcodes)。

2720 2721 

2721### `fileSuggestion`2722### `fileSuggestion`

2722 2723 


3691 3692 

3692### `workflowSizeGuideline`3693### `workflowSizeGuideline`

3693 3694 

3694设置 Claude 在其编写的动态工作流中[力求达到的 Agent 数量](https://code.claude.com/docs/zh-CN/workflows.md#set-a-size-guideline)。Claude Code 会将该值作为建议而非强制上限发送给 Claude:`"small"` 要求少于 5 个 Agent,`"medium"` 少于 10 个,`"large"` 少于 50 个。如果您希望限制工作流的开销,请选择 `"small"`。需要 Claude Code v2.1.219 或更高版本。3695设置 Claude 在其编写的动态工作流中[力求达到的 Agent 数量](https://code.claude.com/docs/zh-CN/workflows.md#set-a-size-guideline)。Claude Code 会将该值作为建议而非强制上限发送给 Claude:`"small"` 要求少于 5 个 Agent,`"medium"` 少于 10 个,`"large"` 少于 50 个。如果您希望限制工作流的开销,请选择 `"small"`。

3695 3696 

3696* **作用域**:[`Any file`](#scopes)。在设置文件中设置的值优先于 `/config` 中的 **Dynamic workflow size** 选项(Claude Code 将其存储在 `~/.claude.json` 中),并且当设置文件设置了此键时,Claude Code 会隐藏该行。3697* **作用域**:[`Any file`](#scopes)。在设置文件中设置的值优先于 `/config` 中的 **Dynamic workflow size** 选项(Claude Code 将其存储在 `~/.claude.json` 中),并且当设置文件设置了此键时,Claude Code 会隐藏该行。

3697* **类型**:字符串,取值为以下之一:3698* **类型**:字符串,取值为以下之一:


3707}3708}

3708```3709```

3709 3710 

3710需要 Claude Code v2.1.219 或更高版本;在 v2.1.202 至 v2.1.218 版本中,请改为在 `/config` 中设置该指导值。

3711 

3712## 插件与 skill3711## 插件与 skill

3713 3712 

3714启用插件、注册市场、限制组织允许的插件来源,以及控制加载哪些 skill。有关安装和构建插件的信息,请参阅[插件](https://code.claude.com/docs/zh-CN/plugins/overview.md)。3713启用插件、注册市场、限制组织允许的插件来源,以及控制加载哪些 skill。有关安装和构建插件的信息,请参阅[插件](https://code.claude.com/docs/zh-CN/plugins/overview.md)。

skills.md +5 −7

Details

83| 子命令 | 作用 | 最低版本 |83| 子命令 | 作用 | 最低版本 |

84| :- | :- | :- |84| :- | :- | :- |

85| `migrate` | 将您现有的 Claude API 代码更新到更新的模型 | 早于 v2.1.221 |85| `migrate` | 将您现有的 Claude API 代码更新到更新的模型 | 早于 v2.1.221 |

86| `upgrade` | 跨主要版本移动您的项目的 Anthropic SDK 依赖项,目前是 Python `anthropic` 包从 0.x 到 1.x | v2.1.236 或更高版本 |86| `upgrade` | 将您项目的 Anthropic SDK 升级到新的主要版本,并针对其破坏性变更更新您的代码 | v2.1.236 或更高版本 |

87| `api-version` | 针对更新的 [API 版本](https://platform.claude.com/docs/en/api/versioning)更新您的 Claude API 代码,然后将您的请求切换到该版本 | v2.1.307 或更高版本 |87| `api-version` | 针对更新的 [API 版本](https://platform.claude.com/docs/en/api/versioning)更新您的 Claude API 代码,然后将您的请求切换到该版本 | v2.1.307 或更高版本 |

88| `managed-agents-onboard` | 逐步完成创建新的托管代理 | 早于 v2.1.221 |88| `managed-agents-onboard` | 逐步完成创建新的托管代理 | 早于 v2.1.221 |

89| `managed-agents-onboard <url>` | 构建该 URL 所指页面描述的 Managed Agent,例如 [Managed Agents 文档](https://platform.claude.com/docs/en/managed-agents/overview)中的某个页面 | v2.1.290 或更高版本 |89| `managed-agents-onboard <url>` | 构建该 URL 所指页面描述的 Managed Agent,例如 [Managed Agents 文档](https://platform.claude.com/docs/en/managed-agents/overview)中的某个页面 | v2.1.290 或更高版本 |


3713. Push to the deployment target3713. Push to the deployment target

372```372```

373 373 

374请保持正文本身简洁。skill 加载后,其内容会[在各轮次之间保留在上下文中](#skill-content-lifecycle),因此每一行都是重复的 token 开销。说明要做什么,而不是叙述如何做或为什么做,并采用与 [CLAUDE.md 内容](https://code.claude.com/docs/zh-CN/best-practices.md#write-an-effective-claude-md)相同的简洁性标准。374请保持正文本身简洁。skill 加载后,其内容会[在各轮次之间保留在上下文中](#skill-content-lifecycle),因此每一行都是重复的 token 开销。说明要做什么,而不是叙述如何做或为什么做,并采用与 [CLAUDE.md 内容](https://code.claude.com/docs/zh-CN/best-practices.md#keep-claude-md-short)相同的简洁性标准。

375 375 

376### Frontmatter 参考376### Frontmatter 参考

377 377 


388Your skill instructions here...388Your skill instructions here...

389```389```

390 390 

391所有字段都是可选的。仅建议设置 `description`,以便 Claude 知道何时使用该 skill。字段名必须与表格完全一致,包括连字符:Claude Code 会忽略无法识别的字段,且不会报告错误。391所有字段都是可选的。仅建议设置 `description`,以便 Claude 知道何时使用该 skill。字段名必须与表格完全一致,包括连字符:Claude Code 会忽略无法识别的字段,且不会报告错误。除 `true` 和 `false` 外,布尔字段还接受任意大小写的 `yes`、`no`、`on`、`off`、`1` 和 `0`。

392 392 

393仅当开头的 `---` 位于文件第一行时,Claude Code 才会读取 frontmatter。否则,它会将整个文件(包括 `---` 标记)视为 skill 内容。如果标记之间的 YAML 无法解析,skill 仍会加载,但不会设置任何字段;请参阅 [Skill 未触发](#skill-not-triggering)以查找并修复错误。393仅当开头的 `---` 位于文件第一行时,Claude Code 才会读取 frontmatter。否则,它会将整个文件(包括 `---` 标记)视为 skill 内容。如果标记之间的 YAML 无法解析,skill 仍会加载,但不会设置任何字段;请参阅 [Skill 未触发](#skill-not-triggering)以查找并修复错误。

394 394 

395除 `true` 和 `false` 外,布尔字段还接受任意大小写的 `yes`、`no`、`on`、`off`、`1` 和 `0`。在 v2.1.218 之前,Claude Code 仅识别 `true` 和 `false`。

396 

397| 字段 | 必需 | 描述 |395| 字段 | 必需 | 描述 |

398| :- | :- | :- |396| :- | :- | :- |

399| `name` | 否 | 在 `/` 菜单中显示的命令名称。默认为目录名称。有关该字段如何与您为调用 skill 而输入的名称交互,请参阅 [skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。 |397| `name` | 否 | 在 `/` 菜单中显示的命令名称。默认为目录名称。有关该字段如何与您为调用 skill 而输入的名称交互,请参阅 [skill 如何获得其命令名称](#how-a-skill-gets-its-command-name)。 |


409| `effort` | 否 | 此 skill 处于活动状态时的 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)。覆盖会话的 effort 级别。省略该字段时,级别由 [effort 解析顺序](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)决定。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。 |407| `effort` | 否 | 此 skill 处于活动状态时的 [effort 级别](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)。覆盖会话的 effort 级别。省略该字段时,级别由 [effort 解析顺序](https://code.claude.com/docs/zh-CN/model-config.md#adjust-effort-level)决定。选项:`low`、`medium`、`high`、`xhigh`、`max`;可用级别取决于模型。 |

410| `context` | 否 | 设置为 `fork` 可在分叉的子代理上下文中运行。请参阅[在子代理中运行 skill](#run-skills-in-a-subagent)。 |408| `context` | 否 | 设置为 `fork` 可在分叉的子代理上下文中运行。请参阅[在子代理中运行 skill](#run-skills-in-a-subagent)。 |

411| `agent` | 否 | 设置 `context: fork` 时使用的子代理类型。 |409| `agent` | 否 | 设置 `context: fork` 时使用的子代理类型。 |

412| `background` | 否 | 仅在使用 `context: fork` 时适用。设置为 `false` 可在调用该 skill 的轮次中等待分叉子代理的结果,而不是[在后台运行它](#run-skills-in-a-subagent)。默认值:`true`。需要 Claude Code v2.1.218 或更高版本。 |410| `background` | 否 | 仅在使用 `context: fork` 时适用。设置为 `false` 可在调用该 skill 的轮次中等待分叉子代理的结果,而不是[在后台运行它](#run-skills-in-a-subagent)。默认值:`true`。 |

413| `hooks` | 否 | Claude Code 在调用该 skill 时注册并在会话剩余时间内持续运行的 hook。有关配置格式、`once` 选项以及 [skill hook 的限制](https://code.claude.com/docs/zh-CN/hooks.md#limits-on-skill-hooks),请参阅 [skill 和 Agent 中的 hook](https://code.claude.com/docs/zh-CN/hooks.md#hooks-in-skills-and-agents)。 |411| `hooks` | 否 | Claude Code 在调用该 skill 时注册并在会话剩余时间内持续运行的 hook。有关配置格式、`once` 选项以及 [skill hook 的限制](https://code.claude.com/docs/zh-CN/hooks.md#limits-on-skill-hooks),请参阅 [skill 和 Agent 中的 hook](https://code.claude.com/docs/zh-CN/hooks.md#hooks-in-skills-and-agents)。 |

414| `paths` | 否 | 限制此 skill 何时激活的 Glob 模式。接受以逗号分隔的字符串或 YAML 列表。设置后,仅当处理与这些模式匹配的文件时,Claude 才会自动加载该 skill。模式相对于 Claude 的当前工作目录,该目录之外的文件不会匹配。使用与[特定路径规则](https://code.claude.com/docs/zh-CN/memory.md#path-specific-rules)相同的 glob 格式。 |412| `paths` | 否 | 限制此 skill 何时激活的 Glob 模式。接受以逗号分隔的字符串或 YAML 列表。设置后,仅当处理与这些模式匹配的文件时,Claude 才会自动加载该 skill。模式相对于 Claude 的当前工作目录,该目录之外的文件不会匹配。使用与[特定路径规则](https://code.claude.com/docs/zh-CN/memory.md#path-specific-rules)相同的 glob 格式。 |

415| `shell` | 否 | 此 skill 中 `` !`command` `` 和 ` ```! ` 块使用的 shell。接受 `bash`(默认)或 `powershell`。当 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool)启用时,设置 `powershell` 会通过 PowerShell 运行内联 shell 命令:在没有 Git Bash 的 Windows 上默认启用,对于 claude.ai 和 Console 账户在有 Git Bash 时默认启用,而在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 会话中以及在 macOS、Linux 和 WSL 上需要设置 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。将其设置为 `0` 可关闭该工具。 |413| `shell` | 否 | 此 skill 中 `` !`command` `` 和 ` ```! ` 块使用的 shell。接受 `bash`(默认)或 `powershell`。当 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool)启用时,设置 `powershell` 会通过 PowerShell 运行内联 shell 命令:在没有 Git Bash 的 Windows 上默认启用,对于 claude.ai 和 Console 账户在有 Git Bash 时默认启用,而在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 会话中以及在 macOS、Linux 和 WSL 上需要设置 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。将其设置为 `0` 可关闭该工具。 |


800>798>

801> 尽管名称如此,具有 `context: fork` 的技能不会在[当前对话的分叉](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation)中运行,这会将你迄今为止讨论的所有内容交给子代理。当任务依赖于该历史时,分叉对话而不是使用 `context: fork`。799> 尽管名称如此,具有 `context: fork` 的技能不会在[当前对话的分叉](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation)中运行,这会将你迄今为止讨论的所有内容交给子代理。当任务依赖于该历史时,分叉对话而不是使用 `context: fork`。

802 800 

803分叉的子代理在[后台](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)运行:你继续工作,而它运行,其结果在完成时到达你的对话。在 frontmatter 中设置 `background: false` 以改为在调用技能的轮次中等待结果。在 v2.1.218 之前,分叉的技能总是阻止轮次直到它们完成。801分叉的子代理在[后台](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)运行:它运行期间您可以继续工作,完成后其结果会出现在您的对话中。在 frontmatter 中设置 `background: false`,即可改为在调用 skill 的轮次中等待结果。

804 802 

805Claude Code 也会等待结果,即使技能没有设置 `background: false`,在这些情况下:803Claude Code 也会等待结果,即使技能没有设置 `background: false`,在这些情况下:

806 804 

sub-agents.md +3 −10

Details

352* **完整模型 ID**:使用完整模型 ID,例如 `claude-opus-5-5` 或 `claude-sonnet-5`。接受与 `--model` 标志相同的值352* **完整模型 ID**:使用完整模型 ID,例如 `claude-opus-5-5` 或 `claude-sonnet-5`。接受与 `--model` 标志相同的值

353* **inherit**:使用与主对话相同的模型353* **inherit**:使用与主对话相同的模型

354 354 

355当 Claude 调用子代理时,它还可以为该次调用传入 `model` 参数。Claude Code 按以下顺序确定子代理的模型:355当 Claude 调用子代理时,它还可以为该次调用传入 `model` 参数。在 Agent 工具调用中,该参数接受模型别名:`sonnet`、`opus`、`haiku` 或 `fable`。Claude 无法在该调用中传入完整模型 ID 或 `inherit`。Claude Code 按以下顺序确定子代理的模型:

356 356 

3571. 单次调用的 `model` 参数3571. 单次调用的 `model` 参数

3582. 子代理定义中的 `model` frontmatter,其中 `inherit` 选择主对话的模型3582. 子代理定义中的 `model` frontmatter,其中 `inherit` 选择主对话的模型


600| `default` | Manual 模式:提示请求权限 |600| `default` | Manual 模式:提示请求权限 |

601| `acceptEdits` | 对于工作目录或 `additionalDirectories` 中的路径,自动接受文件编辑和常见文件系统命令 |601| `acceptEdits` | 对于工作目录或 `additionalDirectories` 中的路径,自动接受文件编辑和常见文件系统命令 |

602| `auto` | [自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode):后台分类器审查命令和对受保护目录的写入 |602| `auto` | [自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode):后台分类器审查命令和对受保护目录的写入 |

603| `dontAsk` | 自动拒绝会触发提示的调用,但您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍可批准[其中部分调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。明确允许的工具仍可使用。`AskUserQuestion`、标记为 [`requiresUserInteraction`](https://code.claude.com/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths),以及在该设置能作用到 Claude Code 的会话中[您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具,即使您已允许也会被拒绝 |603| `dontAsk` | 自动拒绝会触发提示的调用,但您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍可批准[其中部分调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。明确允许的工具仍可使用。`AskUserQuestion`、标记为 [`requiresUserInteraction`](https://code.claude.com/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths),以及在该设置到达 Claude Code 的会话中[您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具,即使您已允许也会被拒绝 |

604| `bypassPermissions` | [跳过权限提示](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)。只有当主对话处于此模式时,子代理才会以此模式运行 |604| `bypassPermissions` | [跳过权限提示](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)。只有当主对话处于此模式时,子代理才会以此模式运行 |

605| `plan` | 计划模式(只读探索) |605| `plan` | 计划模式(只读探索) |

606 606 


762 762 

763若要让项目级子代理的 frontmatter hook 运行,请为包含该 Agent 文件的文件夹接受[工作区信任对话框](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)。来自 `~/.claude/agents/` 中用户级子代理以及您通过 `--agents` 传入的定义的 hook 无需此步骤即可运行。如果您通过 `--add-dir` 添加了位于受信任工作区仓库之外的文件夹,请单独信任该文件夹:其 `.claude/agents/` 中的 hook 不会继承工作区的授权。763若要让项目级子代理的 frontmatter hook 运行,请为包含该 Agent 文件的文件夹接受[工作区信任对话框](https://code.claude.com/docs/zh-CN/permissions.md#project-allow-rules-and-workspace-trust)。来自 `~/.claude/agents/` 中用户级子代理以及您通过 `--agents` 传入的定义的 hook 无需此步骤即可运行。如果您通过 `--add-dir` 添加了位于受信任工作区仓库之外的文件夹,请单独信任该文件夹:其 `.claude/agents/` 中的 hook 不会继承工作区的授权。

764 764 

765在您信任该文件夹之前,子代理仍会运行,但 Claude Code 会跳过其 frontmatter hook,并在调试日志中记录一条说明如何信任该文件夹的错误。这一规则比设置文件中 hook 的规则更严格:信任父文件夹是不够的,并且 `-p` 会话不算作受信任。[信任文件夹之前会运行什么](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)对这两者进行了比较。在 v2.1.218 之前,frontmatter hook 可以从您未信任的文件夹中运行,包括在非交互式会话中。765在您信任该文件夹之前,子代理仍会运行,但 Claude Code 会跳过其 frontmatter hook,并在调试日志中记录一条说明如何信任该文件夹的错误。这一规则比设置文件中 hook 的规则更严格:信任父文件夹是不够的,并且 `-p` 会话不算作受信任。[信任文件夹之前会运行什么](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)对这两者进行了比较。

766 766 

767支持所有 [hook 事件](https://code.claude.com/docs/zh-CN/hooks.md#hook-events)。子代理最常用的事件有:767支持所有 [hook 事件](https://code.claude.com/docs/zh-CN/hooks.md#hook-events)。子代理最常用的事件有:

768 768 


1075 1075 

1076在终端中,Claude Code 会在输入框下方的子代理面板中以树形显示嵌套子代理,并为面板中仍有后代的每一行标注 `(+N)`,表示其后代数量。打开某一行即可查看该子代理的同级和直接子级,以及返回 `main` 的路径。1076在终端中,Claude Code 会在输入框下方的子代理面板中以树形显示嵌套子代理,并为面板中仍有后代的每一行标注 `(+N)`,表示其后代数量。打开某一行即可查看该子代理的同级和直接子级,以及返回 `main` 的路径。

1077 1077 

1078> [!NOTE]

1079>

1080> 早期版本使用不同的默认值:

1081>

1082> * **v2.1.172 至 v2.1.216**:子代理默认可以嵌套,最多五层,且该限制无法更改。

1083> * **v2.1.217 至 v2.1.218**:该限制默认为一,因此除非您调高,否则子代理无法生成自己的子代理;v2.1.219 将默认值提高到三。

1084 

1085### 并发子代理限制1078### 并发子代理限制

1086 1079 

1087有两个限制控制子代理的使用,各自对应一个变量:本限制在运行中的子代理过多时阻止 Claude 生成更多子代理,而[深度限制](#let-subagents-spawn-their-own-subagents)则限制子代理的嵌套深度。Claude 在一个会话中可以生成的子代理总数没有限制。1080有两个限制控制子代理的使用,各自对应一个变量:本限制在运行中的子代理过多时阻止 Claude 生成更多子代理,而[深度限制](#let-subagents-spawn-their-own-subagents)则限制子代理的嵌套深度。Claude 在一个会话中可以生成的子代理总数没有限制。

Details

290>290>

291> 每个[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)和并行任务以八个命名颜色之一显示,以便您可以在成绩单中区分它们。令牌名称遵循 `<color>_FOR_SUBAGENTS_ONLY` 的模式,其中 `<color>` 是 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan`。覆盖这些以更改每个命名颜色的外观。例如,定义中具有 `color: blue` 的子代理使用 `blue_FOR_SUBAGENTS_ONLY` 值绘制。291> 每个[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)和并行任务以八个命名颜色之一显示,以便您可以在成绩单中区分它们。令牌名称遵循 `<color>_FOR_SUBAGENTS_ONLY` 的模式,其中 `<color>` 是 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan`。覆盖这些以更改每个命名颜色的外观。例如,定义中具有 `color: blue` 的子代理使用 `blue_FOR_SUBAGENTS_ONLY` 值绘制。

292>292>

293> Claude Code 在提示输入中使用七色彩虹梯度渲染[`ultrathink`](https://code.claude.com/docs/zh-CN/model-config#use-ultrathink-for-one-off-deep-reasoning)关键字。令牌名称遵循 `rainbow_<color>` 和 `rainbow_<color>_shimmer` 的模式,其中 `<color>` 是 `red`、`orange`、`yellow`、`green`、`blue`、`indigo` 或 `violet`。293> 当 [`ultrathink`](https://code.claude.com/docs/zh-CN/model-config#use-ultrathink-for-one-off-deep-reasoning) 能够提高某一轮次的 effort 时,Claude Code 会在提示词输入框中使用七色彩虹梯度渲染该词。令牌名称遵循 `rainbow_<color>` 和 `rainbow_<color>_shimmer` 的模式,其中 `<color>` 是 `red`、`orange`、`yellow`、`green`、`blue`、`indigo` 或 `violet`。

294 294 

295## 切换到全屏渲染295## 切换到全屏渲染

296 296 

ultrareview.md +42 −40

Details

22 22 

23## 从 CLI 运行 ultrareview23## 从 CLI 运行 ultrareview

24 24 

25从任何 git 存储库启动审查:25在任意 git 仓库中启动审查:

26 26 

27```text theme={null}27```text theme={null}

28/code-review ultra28/code-review ultra

29```29```

30 30 

31不带参数时,ultrareview 审查您当前分支与默认分支之间的 diff,包括未提交和暂存的更改。31不带参数时,ultrareview 会审查当前分支与默认分支之间的 diff,包括未提交和已暂存的更改。

32 32 

33对于分支审查,Claude Code 按照[将本地仓库上传到云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#send-local-repositories-without-github)的规则捆绑仓库状态并将其上传到云沙箱,这些规则涵盖了大小限制、检出要求,以及名称类似凭据或密钥的文件(如 `.env` 和 `*.tfvars` 文件)中的未提交更改会如何处理。当您[审查拉取请求](#review-a-pull-request)时,Claude Code 不会从您的计算机上传任何内容。33对于分支审查,Claude Code 会打包仓库状态并将其上传到云端沙箱,遵循[将本地仓库上传到云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#send-local-repositories-without-github)的规则。这些规则涵盖大小限制、检出要求,以及名称类似凭据或密钥的文件(例如 `.env` 和 `*.tfvars` 文件)中未提交的更改会如何处理。当您[审查 Pull Request](#review-a-pull-request) 时,Claude Code 不会从您的计算机上传任何内容。

34 34 

35启动前,Claude Code 显示一个确认对话框,其中包含审查范围、您剩余的免费运行次数和估计成本;对于分支审查,范围包括文件和行数。确认后,审查在后台继续进行,您可以继续使用您的会话。35启动之前,Claude Code 会显示一个确认对话框,其中包含审查范围、您剩余的免费运行次数以及预估费用;对于分支审查,范围还包括文件数和行数。确认后,审查会在后台继续进行,您可以继续使用当前会话。

36 36 

37该命令仅在您使用 `/code-review ultra` 调用时运行;Claude 不会自动启动 ultrareview。37该命令仅在您使用 `/code-review ultra` 调用时运行;Claude 不会自行启动 ultrareview。

38 38 

39### 针对不同的基础进行审查39### 与其他基准进行比较审查

40 40 

41要与默认分支以外的基础进行比较,请传递分支名称。此示例针对 `develop` 而不是默认分支审查您的当前分支:41要与默认分支以外的基准进行比较,请传入分支名称。以下示例改为将当前分支与 `develop` 进行比较审查:

42 42 

43```text theme={null}43```text theme={null}

44/code-review ultra develop44/code-review ultra develop

45```45```

46 46 

47基础分支不需要存在于您的本地克隆中;Claude Code 从 `origin` 获取它。如果名称有拼写错误,Claude Code 会在错误中建议最接近的分支名称。47基准分支不必存在于您的本地克隆中;Claude Code 会从 `origin` 获取它。如果名称有拼写错误,Claude Code 会在错误信息中建议最接近的分支名称。

48 48 

49提交 id 或标签也可以作为基础,审查将涵盖您的分支自该提交以来的更改。49也可以使用提交 ID 或标签作为基准,此时审查将涵盖您的分支自该提交以来的更改。

50 50 

51### 审查拉取请求51### 审查 Pull Request

52 52 

53要审查 `github.com` 上的拉取请求而不是本地分支,请传递 PR 编号:53要审查 `github.com` 上的 Pull Request 而非本地分支,请传入 PR 编号:

54 54 

55```text theme={null}55```text theme={null}

56/code-review ultra 123456/code-review ultra 1234

57```57```

58 58 

59该命令也接受 `#1234`、`PR 1234` 和粘贴的 PR URL;粘贴的 URL 必须指向您当前目录中的存储库。59该命令也接受 `#1234`、`PR 1234` 以及粘贴的 PR URL;粘贴的 URL 必须指向当前目录中的仓库。

60 60 

61PR 模式需要 `github.com` 上的仓库。对于 [GitHub Enterprise Server](https://code.claude.com/docs/zh-CN/github-enterprise-server.md) 实例上的仓库,请运行不带 PR 编号的 `/code-review ultra` 来审查您的本地分支。61PR 模式需要 `github.com` 上的仓库。对于 [GitHub Enterprise Server](https://code.claude.com/docs/zh-CN/github-enterprise-server.md) 实例上的仓库,请运行不带 PR 编号的 `/code-review ultra` 来审查本地分支。

62 62 

63在 PR 模式下,云沙箱从 `github.com` 克隆拉取请求,而不是上传您的工作树。它使用连接到您的 Claude 账户的 GitHub 账户,因此该账户需要对仓库具有读取权限。63在 PR 模式下,云端沙箱会从 `github.com` 克隆 Pull Request,而不是上传您的工作树。它使用与您的 Claude 账户关联的 GitHub 账户,因此该账户需要对仓库具有读取权限。

64 64 

65运行 [`/web-setup`](https://code.claude.com/docs/zh-CN/web-quickstart#connect-from-your-terminal) 将您的 GitHub CLI 登录连接到您的 Claude 账户。65运行 [`/web-setup`](https://code.claude.com/docs/zh-CN/web-quickstart#connect-from-your-terminal) 将您的 GitHub CLI 登录与 Claude 账户关联。

66 66 

67### 将发现发布到拉取请求67### 将发现结果发布到 Pull Request

68 68 

69在 Claude Code v2.1.227 或更高版本上,当您在 `github.com` 上审查拉取请求时,您可以让 Claude 将完成的发现作为来自您自己 GitHub 账户的单个纯文本评论发布到 PR。该评论不是审查或批准,并以"由 Claude Code 生成"的说明结尾。当您审查分支时,Claude Code 仅在您的会话中显示发现。69在 Claude Code v2.1.227 或更高版本中,当您审查 `github.com` 上的 Pull Request 时,可以让 Claude 以您自己的 GitHub 账户将完成的发现结果作为一条普通评论发布到 PR。该评论不是审查(review)或审批,并以 "Generated by Claude Code" 说明结尾。审查分支时,Claude Code 仅在您的会话中显示发现结果。

70 70 

71Claude Code 永远不会发布,除非您在该运行中选择,`--no-post` 是默认值。发布是您为每次运行做出的选择:71除非您在该次运行中选择发布,否则 Claude Code 绝不会发布,默认值为 `--no-post`。是否发布需要在每次运行时单独选择:

72 72 

73* **交互式**:在启动对话框中,选择**运行并将发现作为我发布到 PR**。如果您将 `--post` 添加到命令中,如 `/code-review ultra 1234 --post`,Claude Code 会预选该选择,但仍会在启动前询问。73* **交互式**:在启动对话框中,选择 **Run and post the findings to the PR as me**。如果在命令中添加 `--post`,例如 `/code-review ultra 1234 --post`,Claude Code 会预先选中该选项,但仍会在启动前询问。

74* **非交互式**:使用 `--post` 运行 [`claude ultrareview` 子命令](#run-ultrareview-non-interactively)。通过使用该标志运行子命令,您同意发布,因此 Claude Code 会发布而不询问。在 `claude -p '/code-review ultra'` 运行中,Claude Code 在发现到达前退出,因此不会发布任何内容;改用子命令。74* **非交互式**:使用 `--post` 运行 [`claude ultrareview` 子命令](#run-ultrareview-non-interactively)。带该标志运行子命令即表示您同意发布,因此 Claude Code 会直接发布而不再询问。在 `claude -p '/code-review ultra'` 运行中,Claude Code 会在发现结果到达之前退出,因此不会发布任何内容;请改用子命令。

75 75 

76Claude Code 不会从您的计算机发布。它将审查的会话 ID 发送到 Anthropic API,该 API 通过您连接到 Claude 的 GitHub 账户将审查的存储发现作为评论发布。发布需要与审查本身相同的 claude.ai 登录,并且在第三方提供商上或当您设置 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/zh-CN/env-vars) 时不可用。76Claude Code 不会从您的计算机发布。它会将审查的会话 ID 发送到 Anthropic API,由后者通过您关联到 Claude 的 GitHub 账户,将该审查存储的发现结果作为评论发布。发布需要与审查本身相同的 claude.ai 登录,并且在第三方提供商上或设置了 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/zh-CN/env-vars) 时不可用。

77 77 

78在交互式会话中,Claude Code 在发现到达时启动发布,因此请保持会话打开直到审查完成。Claude Code 仅在该会话中保留发布选择。如果会话在审查完成前结束,Claude Code 不会发布任何内容,即使您稍后恢复对话。78在交互式会话中,Claude Code 会在发现结果到达时开始发布,因此请保持会话打开,直到审查完成。Claude Code 仅在该会话中保留发布选择。如果会话在审查完成之前结束,即使您稍后恢复该对话,Claude Code 也不会发布任何内容。

79 79 

80当发布完成时,Claude 会告诉您结果:80发布完成后,Claude 会告诉您结果:

81 81 

82* **已发布**:Claude 为您提供评论的链接。82* **发布成功**:Claude 会为您提供该评论的链接。

83* **已发布**:同一审查的早期发布已将评论放在 PR 上,因此 Claude 会链接您到拉取请求,而不是再次发布。83* **此前已发布**:同一审查的较早一次发布已将评论发到 PR 上,因此 Claude 会为您提供 Pull Request 的链接,而不会再次发布。

84* **失败**:Claude 会告诉您原因,发现会保留在您的终端中,以便您可以手动发布。84* **发布失败**:Claude 会告诉您原因,发现结果会保留在您的终端中,以便您手动发布。

85 85 

86### 用纯文本传递请求86### 用自然语言传入请求

87 87 

88在 Claude Code v2.1.218 或更高版本上,您也可以用纯文本描述您正在处理的内容:88您也可以用自然语言描述您正在处理的内容:

89 89 

90```text theme={null}90```text theme={null}

91/code-review ultra check my auth changes91/code-review ultra check my auth changes

92```92```

93 93 

94审查仍然涵盖您的当前分支,与不带参数运行的范围相同。Claude 将您的文本保留为一个说明,显示在启动对话框中,并在发现到达时将其与发现相关联。94审查仍然涵盖您的当前分支,范围与不带参数运行时相同。Claude 会将您的文本保留为一条备注,显示在启动对话框中,并在发现结果到达时将其与备注关联。

95 95 

96当 Claude Code 的文本超过一个单词且不是分支名称或 PR 引用时,它将您的文本视为说明。它将单个单词读取为分支名称或 PR 引用,因此拼写错误的分支名称会从[针对不同的基础进行审查](#review-against-a-different-base)获得最接近分支的错误,而不是使用说明启动。如果您的文本将 PR 引用与其他单词结合,如 `check PR 123 again`,Claude Code 也不会启动;它会要求您重新运行仅使用 PR 编号来审查该 PR,或不使用引用来审查您的当前分支。96只有当您的文本包含多个单词,且不是分支名称或 PR 引用时,Claude Code 才会将其视为备注。单个单词会被视为分支名称或 PR 引用,因此拼错的分支名称会得到[与其他基准进行比较审查](#review-against-a-different-base)中所述的最接近分支错误,而不会附带备注启动。如果您的文本将 PR 引用与其他单词组合在一起,例如 `check PR 123 again`,Claude Code 同样不会启动;它会要求您仅使用 PR 编号重新运行以审查该 PR,或去掉引用重新运行以审查当前分支。

97 97 

98> [!TIP]98> [!TIP]

99>99>

100> 如果您的仓库太大而无法捆绑,Claude Code 会提示您改用 PR 模式。对于 `github.com` 上的仓库,推送您的分支并打开草稿 PR,然后运行 `/code-review ultra <PR-number>`。100> 如果您的仓库太大而无法打包,Claude Code 会提示您改用 PR 模式。对于 `github.com` 上的仓库,请推送您的分支并创建一个草稿 PR,然后运行 `/code-review ultra <PR-number>`。

101 101 

102### 差异限制和回退102### Diff 限制与回退

103 103 

104Ultrareview 在任何审查工作运行之前检查差异,并在无法按原样审查时告诉您:104Ultrareview 会在任何审查工作运行之前检查 diff,并在无法按原样审查时告知您:

105 105 

106* **差异过大**:分支审查默认最多可包括 500 个更改的文件和 8,000 个更改的行。确切的值可能会改变,[拒绝](https://code.claude.com/docs/zh-CN/errors.md#diff-is-too-large-for-ultrareview)会说明生效的值、您的差异大小以及更改行数最多的文件。Claude Code 以相同的方式拒绝过大的拉取请求,说明其文件和行数,但不说明每个文件的细分106* **Diff 过大**:默认情况下,分支审查最多可包含 500 个更改的文件和 8,000 行更改。具体数值可能会变化,[拒绝信息](https://code.claude.com/docs/zh-CN/errors.md#diff-is-too-large-for-ultrareview)会列出当前生效的限制、您的 diff 大小以及更改行数最多的文件。Claude Code 会以同样的方式拒绝过大的 Pull Request,列出其文件数和行数,但不提供按文件的明细

107* **没有要审查的内容**:当针对基础的差异为空时,ultrareview 拒绝并说明它比较的分支或提交以及您所处的情况,例如在基础分支本身上且没有未提交的内容,或一个分支的所有提交都已是基础的一部分。它还为该情况建议解决方法,例如切换到您的工作分支、暂存或提交本地编辑,或传递不同的基础107* **没有可审查的内容**:当与基准的 diff 为空时,ultrareview 会拒绝,并列出它所比较的分支或提交以及您所处的情况,例如您正位于基准分支本身且没有未提交的内容,或者某个分支的所有提交都已包含在基准中。它还会针对该情况给出解决办法,例如切换到包含您工作的分支、暂存或提交本地编辑,或传入其他基准

108* **首次提交**:存储库的首次提交没有更早的内容可比较,因此 ultrareview 在您在启动对话框中确认后审查其中的每个文件。如果您有未跟踪的文件,它会拒绝并告诉您 `git add` 您想审查的文件。相同的大小限制适用。108* **首次提交**:仓库的首次提交没有更早的内容可供比较,因此在您于启动对话框中确认后,ultrareview 会审查其中的每个文件。如果存在未跟踪的文件,它会改为拒绝,并告诉您对希望审查的文件执行 `git add`。同样的大小限制适用。

109 109 

110 首次提交仅在该确认后才被整体审查,因此 `claude ultrareview` 子命令和 `claude -p` 拒绝它并指向您使用交互式会话。需要 Claude Code v2.1.277 或更高版本110 首次提交只有在该确认之后才会被整体审查,因此 `claude ultrareview` 子命令和 `claude -p` 会拒绝它,并引导您改用交互式会话。需要 Claude Code v2.1.277 或更高版本

111* **没有合并基础**:当您的分支与基础分支没有共享历史时,或存储库没有基础分支可比较时,ultrareview 审查存储库中的每个跟踪文件。回退需要完整克隆并应用相同的大小限制。它仅在您在启动对话框中确认或自己运行 `claude ultrareview` 子命令时启动。在 `claude -p` 和任何其他两者都不发生的地方,ultrareview 拒绝,说审查将涵盖每个文件,并指向您使用交互式会话。111* **没有合并基准**:当您的分支与基准分支没有共同历史,或仓库没有可供比较的基准分支时,ultrareview 会改为审查仓库中的每个已跟踪文件。该回退需要完整克隆,并适用同样的大小限制。只有当您在启动对话框中确认,或自行运行 `claude ultrareview` 子命令时,它才会启动。在 `claude -p` 以及其他两者都不会发生的场景中,ultrareview 会拒绝,说明该审查将涵盖每个文件,并引导您改用交互式会话。

112 112 

113 在没有分支或其他引用的检出上,例如通过在获取 URL 后检出 `FETCH_HEAD` 创建的分离 HEAD,Claude Code [拒绝审查](https://code.claude.com/docs/zh-CN/errors.md#your-checkout-has-no-branches)并建议首先创建分支113 在没有分支或其他引用的检出上,例如在获取某个 URL 后检出 `FETCH_HEAD` 所创建的分离 HEAD,Claude Code 会[拒绝审查](https://code.claude.com/docs/zh-CN/errors.md#your-checkout-has-no-branches),并建议您先创建一个分支

114 114 

115## 定价和免费运行115## 定价和免费运行

116 116 


159 159 

160当您运行该子命令时,即表示您同意回退到审查整个仓库,并同意计费和条款确认提示,因此运行过程中不会停下来请求您确认。由您亲自运行即视为同意。如果改由 Claude 代您运行该子命令(例如通过 Bash 工具),Claude Code 会拒绝执行整个仓库的审查。160当您运行该子命令时,即表示您同意回退到审查整个仓库,并同意计费和条款确认提示,因此运行过程中不会停下来请求您确认。由您亲自运行即视为同意。如果改由 Claude 代您运行该子命令(例如通过 Bash 工具),Claude Code 会拒绝执行整个仓库的审查。

161 161 

162`claude -p '/code-review ultra'` 无法获取发现的问题,因此请在脚本中使用 `claude ultrareview`。`-p` 运行会启动云端审查,但不等待其完成就退出。如果该审查会消耗使用额度,`-p` 运行会停止且不启动审查。在 v2.1.218 之前,非交互式会话中的 `/code-review ultra` 会运行本地审查。162> [!NOTE]

163>

164> `claude -p '/code-review ultra'` 无法获取发现的问题,因此请在脚本中使用 `claude ultrareview`。`-p` 运行会启动云端审查,但不等待其完成就退出。如果该审查会消耗使用额度,`-p` 运行会停止且不启动审查。

163 165 

164| 标志 | 描述 |166| 标志 | 描述 |

165| - | - |167| - | - |

Details

182* 您也可以点击会话标题栏中的 **Changes**,或标题栏 **⋮** 菜单中的该选项。182* 您也可以点击会话标题栏中的 **Changes**,或标题栏 **⋮** 菜单中的该选项。

183* 若面板处于隐藏状态,要显示它,请点击会话标题栏中的 **Show session rail** 图标,或标题栏 **⋮** 菜单中的该选项。183* 若面板处于隐藏状态,要显示它,请点击会话标题栏中的 **Show session rail** 图标,或标题栏 **⋮** 菜单中的该选项。

184 184 

185差异默认将会话的更改与其基础分支进行比较。要与不同的分支进行比较,选择**Compare against**并选择一个。185差异默认将会话的更改与其基础分支进行比较。要与不同的分支进行比较,选择**Compare against**并选择一个。与基础分支比较时,diff 可能会[遗漏尚未推送的更改](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#troubleshoot-a-missing-file-in-the-diff-view)。

186 186 

187**2. 留下内联注释**187**2. 留下内联注释**

188 188 

189选择差异中的任何行,输入您的反馈,然后按 Enter。注释排队直到您发送下一条消息,然后它们与其捆绑。Claude 看到"at `src/auth.ts:47`, don't catch the error here"与您的主要指令一起,因此您不必描述问题在哪里。189将鼠标悬停在 diff 中的某一行上,点击其行号旁出现的 **+** 以打开注释框,然后输入您的反馈并按 Enter。注释排队直到您发送下一条消息,然后它们与其捆绑。Claude 看到"at `src/auth.ts:47`, don't catch the error here"与您的主要指令一起,因此您不必描述问题在哪里。

190 190 

191**3. 创建拉取请求**191**3. 创建拉取请求**

192 192 

workflows.md +5 −9

Details

155* 会话的[并发子代理限制](https://code.claude.com/docs/zh-CN/sub-agents.md#concurrent-subagent-limit)对 Claude 使用 Agent 工具生成的子代理不强制执行155* 会话的[并发子代理限制](https://code.claude.com/docs/zh-CN/sub-agents.md#concurrent-subagent-limit)对 Claude 使用 Agent 工具生成的子代理不强制执行

156* 在自动权限模式下,您不会被要求[批准第一个工作流启动](#approve-the-plan-before-it-runs)156* 在自动权限模式下,您不会被要求[批准第一个工作流启动](#approve-the-plan-before-it-runs)

157 157 

158`/effort ultracode` 持续当前会话;要让每个会话都以它开始,设置 [`ultracode`](https://code.claude.com/docs/zh-CN/settings-reference#ultracode) 设置。当您返回日常工作时,使用 `/effort ultracode off` 关闭它。`/effort` 滑块仅在 [ultracode 可用时](https://code.claude.com/docs/zh-CN/model-config.md#when-ultracode-is-available)提供切换。158`/effort ultracode` 持续当前会话;要让每个会话都以它开始,设置 [`ultracode`](https://code.claude.com/docs/zh-CN/settings-reference#ultracode) 设置。当您返回日常工作时,使用 `/effort ultracode off` 关闭它。`/effort` 滑块仅在 [ultracode 可用时](https://code.claude.com/docs/zh-CN/model-config.md#when-ultracode-is-available)提供切换。在 v2.1.284 之前,`/effort ultracode` 会将会话设置为 `xhigh`,而 `/effort ultracode off` 会失败并显示 `Invalid argument`。

159 159 

160### 在运行前批准计划160### 在运行前批准计划

161 161 


198* `.claude/workflows/` 在您的项目中:与克隆仓库的每个人共享198* `.claude/workflows/` 在您的项目中:与克隆仓库的每个人共享

199* `~/.claude/workflows/` 在您的主目录中:在每个项目中可用,仅对您可见。如果您设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),此位置是该路径下的 `workflows/` 目录。199* `~/.claude/workflows/` 在您的主目录中:在每个项目中可用,仅对您可见。如果您设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),此位置是该路径下的 `workflows/` 目录。

200 200 

201保存对话显示个人位置的已解析路径。201保存对话框显示个人位置的已解析路径。按 Enter 保存。工作流在未来的会话中可从任一位置作为 `/<name>` 运行。

202 202 

203按 Enter 保存。工作流在未来会话中从任一位置作为 `/<name>` 运行。203Claude Code 在写入前检查保存位置是否存在符号链接,如有则显示错误,而不是通过符号链接写入:

204 

205Claude Code 在写入前检查保存位置是否有符号链接,并显示错误而不是通过一个写入。它检查的内容取决于您保存的位置:

206 204 

207* 项目位置:如果 `.claude`、`.claude/workflows` 或目标文件是符号链接,Claude Code 拒绝。205* 项目位置:如果 `.claude`、`.claude/workflows` 或目标文件是符号链接,Claude Code 拒绝。

208* 个人位置:Claude Code 仅在目标文件本身是符号链接时拒绝,所以由点文件工具管理的 `~/.claude` 目录仍然有效。206* 个人位置:Claude Code 仅在目标文件本身是符号链接时拒绝,所以由点文件工具管理的 `~/.claude` 目录仍然有效。

209 207 

210在 v2.1.216 之前,Claude Code 跟随链接,这可能会将文件放在您选择的位置之外。

211 

212在具有多个 `.claude/` 目录的单体仓库中,您可以将工作流保存在它们适用的包旁边。保存到项目位置会写入您的工作目录和仓库根之间已存在的最近的 `.claude/workflows/` 目录,或如果尚不存在则写入仓库根。项目工作流也从该路径上的每个 `.claude/workflows/` 加载,当多个定义相同名称时 Claude Code 运行最接近工作目录的那个。208在具有多个 `.claude/` 目录的单体仓库中,您可以将工作流保存在它们适用的包旁边。保存到项目位置会写入您的工作目录和仓库根之间已存在的最近的 `.claude/workflows/` 目录,或如果尚不存在则写入仓库根。项目工作流也从该路径上的每个 `.claude/workflows/` 加载,当多个定义相同名称时 Claude Code 运行最接近工作目录的那个。

213 209 

214如果项目工作流和个人工作流共享名称,项目工作流运行。210如果项目工作流和个人工作流共享名称,项目工作流运行。


469| `medium` | 少于 10 个 Agent |465| `medium` | 少于 10 个 Agent |

470| `large` | 少于 50 个 Agent |466| `large` | 少于 50 个 Agent |

471 467 

472默认值为 `medium`,如果您使用 Pro 套餐登录且 Claude Code 为 v2.1.271 或更高版本,则默认值为 `small`。在您选择某个值之前,`/config` 中的该行会将该值标记为默认值,工作流的 `Running in background` 行会显示当前生效的规模。需要 Claude Code v2.1.219 或更高版本;更早的版本默认为 `unrestricted`。468默认值为 `medium`,如果您使用 Pro 套餐登录且 Claude Code 为 v2.1.271 或更高版本,则默认值为 `small`。在您选择某个值之前,`/config` 中的该行会将该值标记为默认值,工作流的 `Running in background` 行会显示当前生效的规模。

473 469 

474要更改指导,请在 `/config` 中为 Dynamic workflow size 设置选择一个值,或运行 `/config workflowSizeGuideline=small`。在 v2.1.219 及更高版本中,您还可以在任意设置文件中设置 [`workflowSizeGuideline` 键](https://code.claude.com/docs/zh-CN/settings-reference#workflowsizeguideline);该值优先于 `/config`,并且当设置文件提供了该值时,Claude Code 会隐藏 `/config` 中的该行。470要更改指导,请在 `/config` 中为 Dynamic workflow size 设置选择一个值,或运行 `/config workflowSizeGuideline=small`。您还可以在任意设置文件中设置 [`workflowSizeGuideline` 键](https://code.claude.com/docs/zh-CN/settings-reference#workflowsizeguideline);该值优先于 `/config`,并且当设置文件提供了该值时,Claude Code 会隐藏 `/config` 中的该行。

475 471 

476更改会在下一个提示词时生效。无论该设置如何,[运行时 Agent 上限](#behavior-and-limits)仍然适用。472更改会在下一个提示词时生效。无论该设置如何,[运行时 Agent 上限](#behavior-and-limits)仍然适用。

477 473 

worktrees.md +22 −10

Details

43 43 

44您也可以在会话期间要求 Claude "在 worktree 中工作",它会使用 [`EnterWorktree`](https://code.claude.com/docs/zh-CN/tools-reference) 工具创建一个。一旦进入 worktree,Claude 可以通过调用 `EnterWorktree` 并指定目标路径,直接切换到 `.claude/worktrees/` 下的另一个 worktree;之前的 worktree 保留在磁盘上不变。44您也可以在会话期间要求 Claude "在 worktree 中工作",它会使用 [`EnterWorktree`](https://code.claude.com/docs/zh-CN/tools-reference) 工具创建一个。一旦进入 worktree,Claude 可以通过调用 `EnterWorktree` 并指定目标路径,直接切换到 `.claude/worktrees/` 下的另一个 worktree;之前的 worktree 保留在磁盘上不变。

45 45 

46当 Claude 进入存储库的 `.claude/worktrees/` 目录之外的路径时,Claude Code 会首先要求您的批准,因为该移动会将会话的工作目录、写入访问权限和项目配置(如 `CLAUDE.md` 和设置)转移到该位置。`EnterWorktree` [权限规则](https://code.claude.com/docs/zh-CN/permissions.md)或选择"不再询问"不会抑制此提示;只有 `bypassPermissions` 模式会跳过它。在 v2.1.206 之前,Claude 可以进入任何现有的 worktree 路径而无需询问。46当 Claude 进入仓库的 `.claude/worktrees/` 目录之外的路径时,Claude Code 会首先请求您的批准。该移动会将会话的工作目录、写入访问权限和项目配置(如 `CLAUDE.md` 和设置)转移到该位置。`EnterWorktree` [权限规则](https://code.claude.com/docs/zh-CN/permissions.md)或选择"不再询问"不会抑制此提示;只有 `bypassPermissions` 模式会跳过它。

47 47 

48> [!NOTE]48> [!NOTE]

49>49>


63 63 

64使用 `-p` 的非交互式运行没有退出提示,因此 Claude 不会清理它们的 worktrees,Claude Code 会保留它在创建时对每个 worktree 所取的锁,直到稍后会话的[陈旧锁扫描](#clean-up-subagent-and-background-session-worktrees)释放它。要删除一个,请运行 `git worktree remove`;如果 git 拒绝因为 worktree 被锁定,请先在其上运行 `git worktree unlock`。64使用 `-p` 的非交互式运行没有退出提示,因此 Claude 不会清理它们的 worktrees,Claude Code 会保留它在创建时对每个 worktree 所取的锁,直到稍后会话的[陈旧锁扫描](#clean-up-subagent-and-background-session-worktrees)释放它。要删除一个,请运行 `git worktree remove`;如果 git 拒绝因为 worktree 被锁定,请先在其上运行 `git worktree unlock`。

65 65 

66在 Windows 上,删除 worktree 不会删除其外部的文件。如果 worktree 内的文件夹是指向其他地方的链接,例如 NTFS 接合点或目录符号链接,Claude Code 只删除链接并保留它指向的文件夹。在 v2.1.205 之前,删除嵌套在子目录中的链接的 worktree 可能会删除它指向的文件夹。66在 Windows 上,删除 worktree 不会删除其外部的文件。如果 worktree 内的文件夹是指向其他地方的链接,例如 NTFS 接合点或目录符号链接,Claude Code 只会删除该链接。

67 67 

68## 恢复 worktree 会话68## 恢复 worktree 会话

69 69 


81>81>

82> 在 v2.1.212 之前,非交互式恢复停留在启动目录中,`ExitWorktree` 报告没有活跃的 worktree 会话可以退出。82> 在 v2.1.212 之前,非交互式恢复停留在启动目录中,`ExitWorktree` 报告没有活跃的 worktree 会话可以退出。

83 83 

84当 Claude 进入或退出 Claude Code 使用 git 创建的 worktree 时,记录会跟随:Claude Code 在会话的新工作目录下记录会话,与 [`/cd`](https://code.claude.com/docs/zh-CN/commands) 的方式相同,因此 `/desktop` 和 `--resume` 在那里找到它。退出以相同的方式将其移回。由 [`WorktreeCreate` hook](#non-git-version-control) 创建的 worktree 会在启动目录保留其记录。需要 Claude Code v2.1.198 或更高版本。84当 Claude 进入或退出 Claude Code 使用 git 创建的 worktree 时,会话记录会随之移动。Claude Code 在会话的新工作目录下记录会话,与 [`/cd`](https://code.claude.com/docs/zh-CN/commands) 的方式相同,因此 `/desktop` 和 `--resume` 会在那里找到它。退出时以相同的方式将其移回。由 [`WorktreeCreate` hook](#non-git-version-control) 创建的 worktree 会在启动目录保留其会话记录。

85 85 

86## Claude Code 如何强制隔离86## Claude Code 如何强制隔离

87 87 


139 139 

140Claude Code 将标记写入它使用 git 创建的每个 worktree 的 git 元数据中,扫描会保留任何没有标记的 worktree,包括 [`WorktreeCreate` hook](#non-git-version-control) 创建的 worktree。140Claude Code 将标记写入它使用 git 创建的每个 worktree 的 git 元数据中,扫描会保留任何没有标记的 worktree,包括 [`WorktreeCreate` hook](#non-git-version-control) 创建的 worktree。

141 141 

142#### Worktree 锁与手动删除

143 

142当代理运行时,Claude Code 在其 worktree 上持有 `git worktree lock`,以便并发清理无法删除它,当代理完成时释放锁。Claude Code 在为后台会话创建的 worktree 上持有相同的锁,同时会话运行,因此扫描会保留 worktree 并且 `git worktree remove` 拒绝删除它。144当代理运行时,Claude Code 在其 worktree 上持有 `git worktree lock`,以便并发清理无法删除它,当代理完成时释放锁。Claude Code 在为后台会话创建的 worktree 上持有相同的锁,同时会话运行,因此扫描会保留 worktree 并且 `git worktree remove` 拒绝删除它。

143 145 

144扫描也会释放 Claude Code 为其进程已退出的会话设置的锁,因此被杀死的后台会话不会永久锁定其 worktree。扫描永远不会释放您自己使用 `git worktree lock` 设置的锁。在 v2.1.210 之前,被杀死的会话留下的锁会保留在原位,直到您运行 `git worktree unlock`。146扫描也会释放 Claude Code 为其进程已退出的会话设置的锁,因此被杀死的后台会话不会永久锁定其 worktree。扫描永远不会释放您自己使用 `git worktree lock` 设置的锁。

145 147 

146要清理扫描保留的 worktree,请运行 `git worktree remove`,如果 worktree 有未提交的更改或未跟踪的文件,请添加 `--force`。如果 git 拒绝因为 worktree 被锁定,请先在其上运行 `git worktree unlock`。148要清理扫描保留的 worktree,请运行 `git worktree remove`,如果 worktree 有未提交的更改或未跟踪的文件,请添加 `--force`。如果 git 拒绝因为 worktree 被锁定,请先在其上运行 `git worktree unlock`。

147 149 


158 160 

159您无法将 `worktree.baseRef` 设置为分支名称。要从特定的现有分支启动 worktree,请[直接使用 git 创建它](#manage-worktrees-manually)。161您无法将 `worktree.baseRef` 设置为分支名称。要从特定的现有分支启动 worktree,请[直接使用 git 创建它](#manage-worktrees-manually)。

160 162 

161对于 `"fresh"` 基础,Claude Code 会保持 `origin/HEAD` 最新:当仓库在过去 24 小时内没有被获取时,它会获取默认分支,上限为 5 秒,如果获取失败则使用本地缓存的引用。该获取操作从不等待您终端中的输入,因此当 git 或 ssh 要求输入密码、密钥密码短语或确认新的 SSH 主机时,也会被视为获取失败。如果未配置远程,或 `origin/HEAD` 未在本地缓存且无法获取,worktree 会回退到您当前的本地 `HEAD`。在 v2.1.208 之前,新 worktree 使用已经本地缓存的任何 `origin/HEAD`。163对于 `"fresh"` 基础,Claude Code 会保持 `origin/HEAD` 最新:

164 

165* 当仓库在过去 24 小时内没有被获取时,它会获取默认分支,上限为 5 秒,如果获取失败则使用本地缓存的引用。

166* 该获取操作从不等待您终端中的输入。当 git 或 ssh 要求输入密码、密钥密码短语或确认新的 SSH 主机时,也会被视为获取失败。

167* 如果未配置远程,或 `origin/HEAD` 未在本地缓存且无法获取,worktree 会回退到您当前的本地 `HEAD`。

162 168 

163此示例使每个新 worktree 从您的当前工作分支:169此示例使每个新 worktree 从您的当前工作分支:

164 170 


210 216 

211传递 `--worktree` 一个其目录已存在的名称会打开该现有 worktree 而不是创建一个新的。217传递 `--worktree` 一个其目录已存在的名称会打开该现有 worktree 而不是创建一个新的。

212 218 

213使用默认的 `"fresh"` [基础](#choose-the-base-branch),当以下所有条件都成立时,重新打开的 worktree 会重置为存储库的默认分支而不是在其旧提示处继续:219使用默认的 `"fresh"` [基础](#choose-the-base-branch),当以下所有条件都成立时,重新打开的 worktree 会重置为仓库的默认分支而不是在其旧提示处继续:

214 220 

215* 它没有未提交的更改或未跟踪的文件。221* 它没有未提交的更改或未跟踪的文件。

216* 它仍然在 Claude Code 为其创建的分支上。222* 它仍然在 Claude Code 为其创建的分支上。


225* `worktree.baseRef` 是 `"head"`。231* `worktree.baseRef` 是 `"head"`。

226* 名称是拉取请求或合并请求引用。232* 名称是拉取请求或合并请求引用。

227 233 

228在 v2.1.208 之前,当您重用名称时,Claude Code 总是在其旧提示处重新打开旧 worktree。

229 

230### 使用 hook 替换 worktree 创建234### 使用 hook 替换 worktree 创建

231 235 

232配置 [`WorktreeCreate` hook](https://code.claude.com/docs/zh-CN/hooks#worktreecreate) 以完全替换默认的 `git worktree` 逻辑,包括将 worktrees 放在 `.claude/worktrees/` 之外的地方。有关完整示例,请参阅[非 git 版本控制](#non-git-version-control)。236配置 [`WorktreeCreate` hook](https://code.claude.com/docs/zh-CN/hooks#worktreecreate) 以完全替换默认的 `git worktree` 逻辑,包括将 worktrees 放在 `.claude/worktrees/` 之外的地方。有关完整示例,请参阅[非 git 版本控制](#non-git-version-control)。


236Worktree 获得自己的文件和分支,但它与主检出共享以下内容:240Worktree 获得自己的文件和分支,但它与主检出共享以下内容:

237 241 

238* **存储库的 `.git` 目录**:worktree 中的 git 命令写入主存储库的共享 `.git` 目录,[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md#filesystem-isolation)允许这些写入,因此 `git commit` 等命令可以从启用沙箱的 worktree 内部工作。242* **存储库的 `.git` 目录**:worktree 中的 git 命令写入主存储库的共享 `.git` 目录,[沙箱](https://code.claude.com/docs/zh-CN/sandboxing.md#filesystem-isolation)允许这些写入,因此 `git commit` 等命令可以从启用沙箱的 worktree 内部工作。

239* **插件**:从主检出在[项目范围](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-where-a-plugin-is-enabled)安装的插件也会在同一存储库的 worktrees 中加载,因此您无需为每个 worktree 重新安装它们。需要 Claude Code v2.1.200 或更高版本。243* **插件**:从主检出在[项目作用域](https://code.claude.com/docs/zh-CN/plugins/loading.md#find-where-a-plugin-is-enabled)安装的插件也会在同一仓库的 worktree 中加载,因此您无需为每个 worktree 重新安装它们。

240* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`,因此它适用于主检出和存储库的每个其他 worktree,并在 worktree 的删除后存活。在 Windows 和 Claude Code [不使用存储库根](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的其他情况下,规则与该 worktree 保持一致。在 v2.1.211 之前,在 worktree 中授予的批准被保存在该 worktree 内,不适用于其他地方,并在 worktree 被删除时丢失。请参阅[批准保存的位置](https://code.claude.com/docs/zh-CN/permissions.md#permission-system)。244* **权限批准**:在 worktree 会话中为 Bash 命令选择"是,不再询问"会将规则保存到主检出的 `.claude/settings.local.json`。该规则适用于主检出和仓库的每个其他 worktree,并且在 worktree 被删除后仍会保留。

245 

246 在 Windows 以及 Claude Code [不使用仓库根目录](https://code.claude.com/docs/zh-CN/settings.md#where-claude-code-looks-for-each-file)的其他情况下,规则保留在该 worktree 中。请参阅[批准保存的位置](https://code.claude.com/docs/zh-CN/permissions.md#permission-system)。

241* **未跟踪的 skills、agents 和 commands**:当 worktree 检出在其根目录没有 `.claude/skills` 目录时(例如因为您的 `.claude/skills` 被 gitignored),Claude Code 会在 worktree 会话中加载主检出的[项目 skills](https://code.claude.com/docs/zh-CN/skills.md#where-skills-live)。在具有自己的 `.claude/skills` 目录的 worktree 中,只加载该副本。247* **未跟踪的 skills、agents 和 commands**:当 worktree 检出在其根目录没有 `.claude/skills` 目录时(例如因为您的 `.claude/skills` 被 gitignored),Claude Code 会在 worktree 会话中加载主检出的[项目 skills](https://code.claude.com/docs/zh-CN/skills.md#where-skills-live)。在具有自己的 `.claude/skills` 目录的 worktree 中,只加载该副本。

242 248 

243 相同的读取覆盖也适用于 `.claude/agents` 和 `.claude/commands`。对于 skills,读取覆盖需要 Claude Code v2.1.277 或更高版本。249 相同的读取覆盖也适用于 `.claude/agents` 和 `.claude/commands`。对于 skills,读取覆盖需要 Claude Code v2.1.277 或更高版本。


322 328 

323当 `.claude`、`.claude/worktrees` 或 worktree 目录本身是符号链接时,Claude Code 拒绝创建 worktree,错误会命名符号链接的路径。删除符号链接并重试。在 v2.1.212 之前,如果存储库已经在这些路径之一包含提交的符号链接,worktree 创建会跟随它并可能在存储库外创建文件。329当 `.claude`、`.claude/worktrees` 或 worktree 目录本身是符号链接时,Claude Code 拒绝创建 worktree,错误会命名符号链接的路径。删除符号链接并重试。在 v2.1.212 之前,如果存储库已经在这些路径之一包含提交的符号链接,worktree 创建会跟随它并可能在存储库外创建文件。

324 330 

331### Claude Code 创建的 worktree 包含被替换对象的原始内容

332 

333如果您的仓库使用 [`git replace`](https://git-scm.com/docs/git-replace),Claude Code 创建的 worktree 中的文件保存的是原始对象的内容,而不是您的 `refs/replace/` 条目所指定的替换内容。Claude Code 在运行检出 worktree 文件的 git 命令时使用 `GIT_NO_REPLACE_OBJECTS=1`,并忽略您为该变量导出的任何值。

334 

335要获取替换后的内容,请使用 `git worktree add` [自行创建 worktree](#manage-worktrees-manually),并在其中启动 Claude Code。

336 

325### Git LFS 文件在 Claude Code 创建的 worktree 中是指针文件337### Git LFS 文件在 Claude Code 创建的 worktree 中是指针文件

326 338 

327如果您使用 `git lfs install --local` 设置了 [Git LFS](https://git-lfs.com),Claude Code 创建的 worktree 包含 LFS 指针文件而不是真实文件。`--local` 标志将 LFS 过滤器写入存储库自己的 `.git/config` 而不是您的全局 git 配置。普通的 `git lfs install` 写入您的全局配置并不受影响。相同的适用于在存储库自己的配置中定义的任何其他[过滤驱动程序](https://git-scm.com/docs/gitattributes)。339如果您使用 `git lfs install --local` 设置了 [Git LFS](https://git-lfs.com),Claude Code 创建的 worktree 包含 LFS 指针文件而不是真实文件。`--local` 标志将 LFS 过滤器写入存储库自己的 `.git/config` 而不是您的全局 git 配置。普通的 `git lfs install` 写入您的全局配置并不受影响。相同的适用于在存储库自己的配置中定义的任何其他[过滤驱动程序](https://git-scm.com/docs/gitattributes)。