SpyBara
Go Premium

Documentation 2026-10-14 22:58 UTC to 2026-10-15 23:58 UTC

47 files changed +1,924 −699. 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

636| 限制 | 描述 |636| 限制 | 描述 |

637| - | - |637| - | - |

638| 仅Write/Edit/NotebookEdit工具 | 通过Bash命令进行的更改不被跟踪 |638| 仅Write/Edit/NotebookEdit工具 | 通过Bash命令进行的更改不被跟踪 |

639| Subagent编辑 | [Subagent](/docs/zh-CN/agent-sdk/subagents)应用的编辑不被跟踪或恢复,除了在前台运行的具有`context: fork`的skill;使用git来恢复未跟踪的编辑 |639| 子代理编辑 | [子代理](/docs/zh-CN/agent-sdk/subagents)应用的编辑不被跟踪,但在前台运行的具有`context: fork`的skill除外。回滚仅会在主对话已编辑过的文件中撤销这些编辑;其余编辑请使用git来恢复 |

640| 相同会话 | Checkpoint与创建它们的会话相关联 |640| 相同会话 | Checkpoint与创建它们的会话相关联 |

641| 仅文件内容 | 创建、移动或删除目录不会通过回滚撤销 |641| 仅文件内容 | 创建、移动或删除目录不会通过回滚撤销 |

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

Details

235 网络235 网络

236</h3>236</h3>

237 237 

238SDK 需要对 `api.anthropic.com` 的出站 HTTPS,或在 Amazon Bedrock 或 Google Cloud 的 Agent Platform 上运行时对您的提供商的区域端点的出站 HTTPS。如果您的代理使用 [MCP servers](/docs/zh-CN/agent-sdk/mcp) 或外部工具,它们还需要对这些端点的出站访问。对于生产环境,通过强制执行域允许列表、注入凭据和记录请求的出站代理路由出站流量。有关完整模式,请参阅 [Secure Deployment](/docs/zh-CN/agent-sdk/secure-deployment)。238SDK 需要对 `api.anthropic.com` 的出站 HTTPS,或在 Amazon Bedrock 或 Google Cloud 的 Agent Platform 上运行时对您的提供商的区域端点的出站 HTTPS。如果您的代理使用 [MCP servers](/docs/zh-CN/agent-sdk/mcp) 或外部工具,它们还需要对这些端点的出站访问。对于生产环境,通过强制执行域允许列表、注入凭据和记录请求的出站代理路由出站流量。有关完整模式,请参阅 [安全部署](/docs/zh-CN/agent-sdk/secure-deployment)。

239 239 

240对于入站流量,在容器上公开 HTTP 或 WebSocket 端口。您的应用程序在该端口上处理客户端请求并在内部调用 SDK;子进程本身不在网络上侦听。240对于入站流量,在容器上公开 HTTP 或 WebSocket 端口。您的应用程序在该端口上处理客户端请求并在内部调用 SDK;子进程本身不在网络上侦听。

241 241 


398 398 

399* **服务启动时找不到 CLI**:在 Python 中,容器或服务管理器运行您的应用程序时使用的 `PATH` 与您的 shell 不同,因此在本地有效的安装对该进程不可见。在 TypeScript 中,镜像构建跳过了 SDK 的可选依赖项,或者 `pathToClaudeCodeExecutable` 指向镜像中不存在的文件。请参阅 [Claude Code not found](/docs/zh-CN/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found)。399* **服务启动时找不到 CLI**:在 Python 中,容器或服务管理器运行您的应用程序时使用的 `PATH` 与您的 shell 不同,因此在本地有效的安装对该进程不可见。在 TypeScript 中,镜像构建跳过了 SDK 的可选依赖项,或者 `pathToClaudeCodeExecutable` 指向镜像中不存在的文件。请参阅 [Claude Code not found](/docs/zh-CN/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found)。

400* **CLI 在镜像中存在但无法启动**:Claude Code 无法从与容器架构或 libc 不匹配的二进制文件启动,或者从在镜像构建中失去执行权限的文件启动。请参阅 [Failed to start Claude Code](/docs/zh-CN/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code)。400* **CLI 在镜像中存在但无法启动**:Claude Code 无法从与容器架构或 libc 不匹配的二进制文件启动,或者从在镜像构建中失去执行权限的文件启动。请参阅 [Failed to start Claude Code](/docs/zh-CN/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code)。

401* **Claude Code 进程在运行中途退出**:您的应用程序收到的错误取决于 SDK 语言以及 CLI 是否首先报告了错误结果。[CLI process exit](/docs/zh-CN/agent-sdk/troubleshooting#cli-process-exit) 下的条目涵盖了每条消息。401* **Claude Code 进程在运行中途退出**:您的应用程序收到的错误取决于 SDK 语言以及 CLI 是否首先报告了错误结果。[CLI 进程退出](/docs/zh-CN/agent-sdk/troubleshooting#cli-process-exit) 下的条目涵盖了每条消息。

402 402 

403<h2 id="next-steps">403<h2 id="next-steps">

404 后续步骤404 后续步骤

405</h2>405</h2>

406 406 

407* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb):包含 Docker、Modal 和 Kubernetes 的[可部署代码](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)的笔记本演练。407* [托管指南](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb):包含 Docker、Modal 和 Kubernetes 的[可部署代码](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)的笔记本演练。

408* [会话存储](/docs/zh-CN/agent-sdk/session-storage):使用 `SessionStore` 适配器在主机间持久化记录。408* [会话存储](/docs/zh-CN/agent-sdk/session-storage):使用 `SessionStore` 适配器在主机间持久化记录。

409* [Observability](/docs/zh-CN/agent-sdk/observability):将 OTEL 跟踪、指标和日志导出到您的收集器。409* [可观测性](/docs/zh-CN/agent-sdk/observability):将 OTEL 跟踪、指标和日志导出到您的收集器。

410* [Secure deployment](/docs/zh-CN/agent-sdk/secure-deployment):网络控制、凭证管理和隔离加固。410* [安全部署](/docs/zh-CN/agent-sdk/secure-deployment):网络控制、凭证管理和隔离加固。

411* [Cost tracking](/docs/zh-CN/agent-sdk/cost-tracking):按会话的令牌和成本计费。411* [成本跟踪](/docs/zh-CN/agent-sdk/cost-tracking):按会话的令牌和成本核算。

Details

17 17 

18本指南说明了 SDK 如何发出遥测数据、如何配置导出,以及如何在数据到达后端后对其进行标记和过滤。要直接从 SDK 响应流读取令牌使用情况和成本,而不是导出到后端,请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)。18本指南说明了 SDK 如何发出遥测数据、如何配置导出,以及如何在数据到达后端后对其进行标记和过滤。要直接从 SDK 响应流读取令牌使用情况和成本,而不是导出到后端,请参阅[跟踪成本和使用情况](/docs/zh-CN/agent-sdk/cost-tracking)。

19 19 

20<Note>

21 有关 Claude API 或 Managed Agents,请参阅[适用于 Claude API 的 OpenTelemetry](https://platform.claude.com/docs/en/manage-claude/opentelemetry)。

22</Note>

23 

20<h2 id="how-telemetry-flows-from-the-sdk">24<h2 id="how-telemetry-flows-from-the-sdk">

21 遥测如何从 SDK 流动25 遥测如何从 SDK 流动

22</h2>26</h2>

Details

1926| `costUSD` | `float` | 此模型的估计成本(美元),客户端计算。见[跟踪成本和使用](/docs/zh-CN/agent-sdk/cost-tracking)了解计费注意事项。 |1926| `costUSD` | `float` | 此模型的估计成本(美元),客户端计算。见[跟踪成本和使用](/docs/zh-CN/agent-sdk/cost-tracking)了解计费注意事项。 |

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

1928| `maxOutputTokens` | `int` | 此模型的最大输出 token 限制。 |1928| `maxOutputTokens` | `int` | 此模型的最大输出 token 限制。 |

1929| `canonicalModel` | `str` | 用于定价查询的规范模型 ID。可能与条目键入的原始模型字符串不同,例如特定于提供商的 ID 或别名。并非总是存在。 |1929| `canonicalModel` | `str` | 用于定价查询的规范模型 ID。可能与用作条目键的原始模型字符串不同,例如特定于提供商的 ID 或别名。并非总是存在。 |

1930| `provider` | `str` | 提供此模型的 API 提供商,例如 `firstParty`、`bedrock`、`vertex`、`foundry`、`anthropicAws`、`mantle` 或 `gateway`。并非总是存在。 |1930| `provider` | `str` | 提供此模型的 API 提供商,例如 `firstParty`、`bedrock`、`vertex`、`foundry`、`anthropicAws`、`mantle` 或 `gateway`。并非总是存在。 |

1931| `costBasis` | `str` | 为此模型最新请求定价的价格表:`list` 表示标价,`managed` 表示 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing) 表,`unknown` 表示两者都与模型 ID 不匹配。并非总是存在,并且未在 TypedDict 上声明,因此使用 `.get()` 读取它。需要 Claude Code v2.1.246 或更高版本。 |1931| `costBasis` | `str` | 为此模型最新请求定价的价格表:`list` 表示标价,`managed` 表示 [`modelPricing`](/docs/zh-CN/settings-reference#modelpricing) 表,`unknown` 表示两者都与模型 ID 不匹配。并非总是存在,并且未在 TypedDict 上声明,因此使用 `.get()` 读取它。需要 Claude Code v2.1.246 或更高版本。 |

1932 1932 

Details

92 92 

93因为 `projectKey` 编码了工作目录,请从与原始运行的工作目录匹配的工作目录中从存储恢复或继续。在 TypeScript 中,如果在查询的 [`env` 选项](/docs/zh-CN/agent-sdk/typescript#options)中在 `CLAUDE_CONFIG_DIR` 旁边设置 [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/zh-CN/sessions#name-the-project-directory-yourself),SDK 会按该名称对该查询的条目以及其 `resume` 和 `continue` 查找进行键控。因为 `listSessions` 和 `deleteSession` 等独立帮助程序不接受 `env` 并读取进程环境,也要在主机进程环境中设置 `CLAUDE_CONFIG_DIR` 和相同的名称。需要 Agent SDK v0.3.234 或更高版本。93因为 `projectKey` 编码了工作目录,请从与原始运行的工作目录匹配的工作目录中从存储恢复或继续。在 TypeScript 中,如果在查询的 [`env` 选项](/docs/zh-CN/agent-sdk/typescript#options)中在 `CLAUDE_CONFIG_DIR` 旁边设置 [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/zh-CN/sessions#name-the-project-directory-yourself),SDK 会按该名称对该查询的条目以及其 `resume` 和 `continue` 查找进行键控。因为 `listSessions` 和 `deleteSession` 等独立帮助程序不接受 `env` 并读取进程环境,也要在主机进程环境中设置 `CLAUDE_CONFIG_DIR` 和相同的名称。需要 Agent SDK v0.3.234 或更高版本。

94 94 

95将 `subpath` 视为不透明的密钥后缀;它遵循磁盘上的布局,例如 `subagents/agent-<id>`。当 `subpath` 未定义时,密钥指的是主记录。95将 `subpath` 视为不透明的键后缀;它遵循磁盘上的布局,例如 `subagents/agent-<id>`。当 `subpath` 未定义时,该键指的是主记录。

96 96 

97| 方法 | 必需 | 调用时机 |97| 方法 | 必需 | 调用时机 |

98| :- | :- | :- |98| :- | :- | :- |


100| `load` | 是 | 在子进程生成之前,当设置 `resume` 时,以及在列表从 `listSessionSummaries` 回退时每个会话一次。如果会话未知,返回 `null`。 |100| `load` | 是 | 在子进程生成之前,当设置 `resume` 时,以及在列表从 `listSessionSummaries` 回退时每个会话一次。如果会话未知,返回 `null`。 |

101| `listSessions` | 否 | 由 `listSessions({ sessionStore })` 和 `query()`/`startup()` 与 `continue: true` 调用。如果未定义,`continue: true` 会抛出异常,`listSessions({ sessionStore })` 会抛出异常,除非实现了 `listSessionSummaries`。 |101| `listSessions` | 否 | 由 `listSessions({ sessionStore })` 和 `query()`/`startup()` 与 `continue: true` 调用。如果未定义,`continue: true` 会抛出异常,`listSessions({ sessionStore })` 会抛出异常,除非实现了 `listSessionSummaries`。 |

102| `listSessionSummaries` | 否 | 由 `listSessions({ sessionStore })` 在一次调用中读取所有会话的元数据。在 `append` 中维护摘要。如果未定义,列表会回退到 `listSessions` 加上每个会话的 `load`。 |102| `listSessionSummaries` | 否 | 由 `listSessions({ sessionStore })` 在一次调用中读取所有会话的元数据。在 `append` 中维护摘要。如果未定义,列表会回退到 `listSessions` 加上每个会话的 `load`。 |

103| `delete` | 否 | 由 `deleteSession({ sessionStore })` 调用。删除主密钥(无 `subpath`)必须级联到该会话的所有子密钥,并且还要删除会话的摘要条目,以便删除的会话停止出现在 `listSessionSummaries` 中。如果未定义,删除是无操作的,这适合仅追加的后端。 |103| `delete` | 否 | 由 `deleteSession({ sessionStore })` 调用。删除主键(无 `subpath`)必须级联到该会话的所有子键,并且还要删除会话的摘要条目,以便删除的会话停止出现在 `listSessionSummaries` 中。如果未定义,删除是无操作的,这适合仅追加的后端。 |

104| `listSubkeys` | 否 | 在恢复期间,发现子代理记录。如果未定义,仅恢复主记录。 |104| `listSubkeys` | 否 | 在恢复期间,发现子代理记录。如果未定义,仅恢复主记录。 |

105 105 

106在 `SessionSummaryEntry` 中,`mtime` 是边车的存储写入时间,必须与 `listSessions` 返回的 `mtime` 值共享一个时钟源。`data` 是不透明的 SDK 拥有的状态;按原样持久化它,不要解释它。106在 `SessionSummaryEntry` 中,`mtime` 是边车的存储写入时间,必须与 `listSessions` 返回的 `mtime` 值共享一个时钟源。`data` 是不透明的 SDK 拥有的状态;按原样持久化它,不要解释它。

107 107 

108通过在 `append` 中的每个批次上调用导出的 `foldSessionSummary` 帮助程序(Python 中为 `fold_session_summary`)来构建条目。跳过其密钥具有 `subpath` 的批次;子代理记录不得对主会话的摘要做出贡献。折叠永远不会设置 `mtime`:在持久化时通过 TypeScript 中的 `options.mtime` 参数或通过在 Python 中覆盖返回条目上的字段来标记它。同一会话的并发 `append` 调用可能在边车上竞争,因此使用事务、比较交换或每个会话的锁来序列化读取-折叠-写入;折叠本身是纯的。108通过在 `append` 中的每个批次上调用导出的 `foldSessionSummary` 帮助程序(Python 中为 `fold_session_summary`)来构建条目。跳过其键具有 `subpath` 的批次;子代理记录不得对主会话的摘要做出贡献。折叠永远不会设置 `mtime`:在持久化时通过 TypeScript 中的 `options.mtime` 参数或通过在 Python 中覆盖返回条目上的字段来标记它。同一会话的并发 `append` 调用可能在边车上竞争,因此使用事务、比较交换或每个会话的锁来序列化读取-折叠-写入;折叠本身是纯的。

109 109 

110有关 SDK 对记录 `load` 返回的处理,请参阅[从存储恢复](#resume-from-the-store)。110有关 SDK 对记录 `load` 返回的处理,请参阅[从存储恢复](#resume-from-the-store)。

111 111 


266 await run_session_store_conformance(MyRedisStore)266 await run_session_store_conformance(MyRedisStore)

267```267```

268 268 

269按照此示例传递 `MyRedisStore` 类本身,当构造函数不带参数时有效。对于采用预配置客户端的适配器,改为传递构造存储的 lambda。由于契约重用相同的会话密钥,工厂返回的每个存储必须以空存储开始,因此让 lambda 为每次调用配置隔离的后端存储,例如新的内存中伪造、唯一的密钥前缀或新的测试数据库。269按照此示例传递 `MyRedisStore` 类本身,当构造函数不带参数时有效。对于采用预配置客户端的适配器,改为传递构造存储的 lambda。由于契约重用相同的会话键,工厂返回的每个存储必须以空存储开始,因此让 lambda 为每次调用配置隔离的后端存储,例如新的内存中伪造、唯一的键前缀或新的测试数据库。

270 270 

271<h2 id="behavior-notes">271<h2 id="behavior-notes">

272 行为说明272 行为说明


303 303 

304SDK 还使用来自您真实配置目录的文件为临时目录提供种子。它复制的内容因语言而异:304SDK 还使用来自您真实配置目录的文件为临时目录提供种子。它复制的内容因语言而异:

305 305 

306* **TypeScript**:凭证、`.claude.json` 和您的用户 `settings.json`。从 `settings.json` 中,它删除在临时配置目录下表现不佳的密钥:`enabledPlugins`、`extraKnownMarketplaces`、其 [`additionalMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 别名,以及文件 `env` 块中的任何 `CLAUDE_CONFIG_DIR`。在 Agent SDK v0.3.232 之前,SDK 没有删除别名。在设置中配置的身份验证,例如 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper),在从存储恢复时有效。在 Agent SDK v0.3.222 之前,TypeScript SDK 仅复制凭证和 `.claude.json`。306* **TypeScript**:凭证、`.claude.json` 和您的用户 `settings.json`。从 `settings.json` 中,它删除在临时配置目录下表现不佳的键:`enabledPlugins`、`extraKnownMarketplaces`、其 [`additionalMarketplaces`](/docs/zh-CN/settings-reference#extraknownmarketplaces) 别名,以及文件 `env` 块中的任何 `CLAUDE_CONFIG_DIR`。在 Agent SDK v0.3.232 之前,SDK 没有删除别名。在设置中配置的身份验证,例如 [`apiKeyHelper`](/docs/zh-CN/settings-reference#apikeyhelper),在从存储恢复时有效。在 Agent SDK v0.3.222 之前,TypeScript SDK 仅复制凭证和 `.claude.json`。

307* **Python**:仅凭证和 `.claude.json`,因此通过用户 `settings.json` 中的 `apiKeyHelper` 进行身份验证的应用在从存储恢复时失败并显示 `Not logged in`。托管或项目设置中的 `apiKeyHelper` 仍然有效,因为 Claude Code 从 `CLAUDE_CONFIG_DIR` 不影响的位置读取这些文件。307* **Python**:仅凭证和 `.claude.json`,因此通过用户 `settings.json` 中的 `apiKeyHelper` 进行身份验证的应用在从存储恢复时失败并显示 `Not logged in`。托管或项目设置中的 `apiKeyHelper` 仍然有效,因为 Claude Code 从 `CLAUDE_CONFIG_DIR` 不影响的位置读取这些文件。

308 308 

309当存储对该会话没有任何内容时,SDK 改为在您的真实配置目录下运行,结果取决于您传递的选项:309当存储对该会话没有任何内容时,SDK 改为在您的真实配置目录下运行,结果取决于您传递的选项:


330 `forkSession` 不是字节副本330 `forkSession` 不是字节副本

331</h3>331</h3>

332 332 

333`forkSession({ sessionStore })` 读取源条目,重写每个 `sessionId` 字段并重新映射消息 UUID,然后在新密钥下追加转换后的条目。适配器级别的副本或 `CopyObject` 快捷方式会产生仍然引用旧会话 ID 的转录,因此 SDK 不使用它。333`forkSession({ sessionStore })` 读取源条目,重写每个 `sessionId` 字段并重新映射消息 UUID,然后在新键下追加转换后的条目。适配器级别的副本或 `CopyObject` 快捷方式会产生仍然引用旧会话 ID 的转录,因此 SDK 不使用它。

334 334 

335<h3 id="subagent-transcripts">335<h3 id="subagent-transcripts">

336 子代理转录336 子代理转录

agent-view.md +3 −3

Details

949 后台处理显示 `Background this session?` 对话框949 后台处理显示 `Background this session?` 对话框

950</h3>950</h3>

951 951 

952如果您按 `←` 来后台处理当前会话,而 Claude Code 显示 `Background this session?` 对话框,说明该会话有正在进行的工作,后台处理会停止、重新启动或让其无人值守地运行,Claude Code 在执行这些操作之前会询问:952如果您按 `←` 来后台处理当前会话,而 Claude Code 显示 `Background this session?` 对话框,说明该会话有正在进行的后台工作,后台处理会停止、重新启动或让其无人值守地运行,Claude Code 在执行这些操作之前会询问:

953 953 

954* **无法移动的工作**:该会话有无法移动到后台会话的工作,例如正在运行的[监视器](/docs/zh-CN/tools-reference#monitor-tool)。对话框命名 Claude Code 会停止的工作,并分别计算转移的任务数。954* **无法移动的工作**:该会话有无法移动到后台会话的工作,例如正在运行的[监视器](/docs/zh-CN/tools-reference#monitor-tool)。对话框列出 Claude Code 会停止的后台工作,并另外计算会转移的任务数。

955* **具有运行子代理的工作流**:[动态工作流](/docs/zh-CN/workflows)仍然有子代理在运行。工作流本身会转移,但其运行的子代理从头开始重新启动,对话框会说明有多少个。955* **具有运行子代理的工作流**:[动态工作流](/docs/zh-CN/workflows)仍然有子代理在运行。工作流本身会转移,但其运行的子代理从头开始重新启动,对话框会说明有多少个。

956* **自动 Artifact 回复**:Claude [自动回复 Artifact 上的评论](/docs/zh-CN/artifacts#let-claude-reply-to-comments-on-its-own)。这些回复在后台会话中继续,对话框会说明这一点。956* **自动 Artifact 回复**:Claude [自动回复 Artifact 上的评论](/docs/zh-CN/artifacts#let-claude-reply-to-comments-on-its-own)。这些回复在后台会话中继续,对话框会说明这一点。

957 957 


1175| v2.1.199 | 在低内存主机上,后台会话的进程在完成启动前退出时,其行状态会显示 `possibly low memory — free some up and retry`,而不仅仅是简单的退出原因。使用 `←` 或 `/background` 将会话移到后台时,会将其 `/color` 带到新行。 |1175| v2.1.199 | 在低内存主机上,后台会话的进程在完成启动前退出时,其行状态会显示 `possibly low memory — free some up and retry`,而不仅仅是简单的退出原因。使用 `←` 或 `/background` 将会话移到后台时,会将其 `/color` 带到新行。 |

1176| v2.1.198 | 当后台会话需要输入、完成或失败时,Agent view 会通过 `preferredNotifChannel` 发送通知,并以 `agent_needs_input` 或 `agent_completed` 类型触发 `Notification` hook。在 `claude attach <id>` 中,`←` 和 `/exit` 会返回 agent view,而不是退出到 shell;`Ctrl+Z` 会返回 shell。在 worktree 中隔离其工作的后台会话完成时,会提交、推送其自己的隔离分支(绝不会推送 `main` 或 `master`),并打开一个草稿 Pull Request,而不是先询问。`/login` 可在 agent view 中运行并打开登录对话框。`Background work is running` 退出对话框提供 `Move to background and exit`。退出交接也涵盖后台子代理,它们会在下次唤醒时从其会话记录恢复,而不是被报告为失败。`claude --bg` 与 `-p` 或 `--print` 组合使用时会被拒绝并报错。后台会话主机会在首次访问局域网时请求 macOS 本地网络权限,而不是以 `connect: no route to host` 失败。 |1176| v2.1.198 | 当后台会话需要输入、完成或失败时,Agent view 会通过 `preferredNotifChannel` 发送通知,并以 `agent_needs_input` 或 `agent_completed` 类型触发 `Notification` hook。在 `claude attach <id>` 中,`←` 和 `/exit` 会返回 agent view,而不是退出到 shell;`Ctrl+Z` 会返回 shell。在 worktree 中隔离其工作的后台会话完成时,会提交、推送其自己的隔离分支(绝不会推送 `main` 或 `master`),并打开一个草稿 Pull Request,而不是先询问。`/login` 可在 agent view 中运行并打开登录对话框。`Background work is running` 退出对话框提供 `Move to background and exit`。退出交接也涵盖后台子代理,它们会在下次唤醒时从其会话记录恢复,而不是被报告为失败。`claude --bg` 与 `-p` 或 `--print` 组合使用时会被拒绝并报错。后台会话主机会在首次访问局域网时请求 macOS 本地网络权限,而不是以 `connect: no route to host` 失败。 |

1177| v2.1.196 | 按一次 `←` 即可将前台会话移到后台;早期版本需要按两次,并带有页脚提示和确认。传递给 `claude agents` 的 `--dangerously-skip-permissions` 会显示绕过免责声明,而不是在不提示的情况下被丢弃。您从未命名的交互式会话在会话列表和 `claude agents --json` 中会带有默认名称,例如 `my-app-3f`。后台 shell 命令和动态工作流在会话进程被停止、重启或更新时仍能继续存在,包括在 Windows 上;设置 `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` 可关闭此交接。在重启时被误读为空的会话记录会被重命名并加上 `.orphaned-` 后缀,而不是被删除。 |1177| v2.1.196 | 按一次 `←` 即可将前台会话移到后台;早期版本需要按两次,并带有页脚提示和确认。传递给 `claude agents` 的 `--dangerously-skip-permissions` 会显示绕过免责声明,而不是在不提示的情况下被丢弃。您从未命名的交互式会话在会话列表和 `claude agents --json` 中会带有默认名称,例如 `my-app-3f`。后台 shell 命令和动态工作流在会话进程被停止、重启或更新时仍能继续存在,包括在 Windows 上;设置 `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` 可关闭此交接。在重启时被误读为空的会话记录会被重命名并加上 `.orphaned-` 后缀,而不是被删除。 |

1178| v2.1.195 | 在 Windows 上将会话移到后台时,进行中的工作也会转移;设置 `CLAUDE_DISABLE_ADOPT=1` 可改为停止它。`Completed` 组会填满剩余的垂直空间,标题在较矮的终端上会压缩显示。较旧的 Claude Code 版本不再丢弃较新会话的 `state.json` 字段,也不再在 `claude agents` 中隐藏这些会话。附加到已停止的会话会立即切换,而不是显示最多五秒的空白屏幕。无法接受连接的监督进程会自行退出并释放其锁。 |1178| v2.1.195 | 在 Windows 上将会话移到后台时,进行中的后台工作也会转移;设置 `CLAUDE_DISABLE_ADOPT=1` 可改为停止它。`Completed` 组会填满剩余的垂直空间,标题在较矮的终端上会压缩显示。较旧的 Claude Code 版本不再丢弃较新会话的 `state.json` 字段,也不再在 `claude agents` 中隐藏这些会话。附加到已停止的会话会立即切换,而不是显示最多五秒的空白屏幕。无法接受连接的监督进程会自行退出并释放其锁。 |

1179| v2.1.191 | 如果 `claude --bg` 使用的 `--agent` 名称与您的任何子代理都不匹配,启动会失败:会话会立即退出并显示 `--agent '<name>' not found` 错误,而不是使用默认 Agent 运行。 |1179| v2.1.191 | 如果 `claude --bg` 使用的 `--agent` 名称与您的任何子代理都不匹配,启动会失败:会话会立即退出并显示 `--agent '<name>' not found` 错误,而不是使用默认 Agent 运行。 |

1180| v2.1.174 | 后台会话不再从监督进程的启动 shell 继承 `ANTHROPIC_BASE_URL` 等网关端点变量;监督进程会向预热的工作进程提供新的凭据快照,修复了虚假的 `Could not resolve authentication method` 错误。 |1180| v2.1.174 | 后台会话不再从监督进程的启动 shell 继承 `ANTHROPIC_BASE_URL` 等网关端点变量;监督进程会向预热的工作进程提供新的凭据快照,修复了虚假的 `Could not resolve authentication method` 错误。 |

1181| v2.1.172 | 调度输入框中的 `/model` 会设置仅限当前会话的调度模型覆盖。 |1181| v2.1.172 | 调度输入框中的 `/model` 会设置仅限当前会话的调度模型覆盖。 |

analytics.md +2 −0

Details

13| Claude for Teams / Enterprise | [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) | 使用指标、带 GitHub 集成的贡献指标、排行榜、数据导出 | [详情](#access-analytics-for-team-and-enterprise) |13| Claude for Teams / Enterprise | [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) | 使用指标、带 GitHub 集成的贡献指标、排行榜、数据导出 | [详情](#access-analytics-for-team-and-enterprise) |

14| API (Claude Console) | [platform.claude.com/claude-code](https://platform.claude.com/claude-code) | 使用指标、支出跟踪、团队洞察 | [详情](#access-analytics-for-api-customers) |14| API (Claude Console) | [platform.claude.com/claude-code](https://platform.claude.com/claude-code) | 使用指标、支出跟踪、团队洞察 | [详情](#access-analytics-for-api-customers) |

15 15 

16Code Review 有其独立的仪表板。有关审查活动和支出,请参阅[查看使用情况](/docs/zh-CN/code-review-costs#view-usage)。

17 

16<h2 id="access-analytics-for-team-and-enterprise">18<h2 id="access-analytics-for-team-and-enterprise">

17 访问 Team 和 Enterprise 分析19 访问 Team 和 Enterprise 分析

18</h2>20</h2>

artifacts.md +5 −3

Details

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

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

77| 您已公开共享该 Artifact | 每个对话中在更改它之前询问一次 |77| 您已公开共享该 Artifact | 每个对话中在更改它之前询问一次 |

78| 您关闭了[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching) | 在每个 Artifact 首次发布前询问 |

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

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

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

81 81 

82Claude 可以无需询问即读取会话[工作目录](/docs/zh-CN/permissions#working-directories)中的文件,以及它写入页面所用的临时目录中的文件。要让 Claude 从其他文件夹发布而不弹出提示,请在启动时使用 [`--add-dir`](/docs/zh-CN/cli-reference#cli-flags) 或在会话期间使用 `/add-dir` 将该文件夹添加为工作目录。82要让 Claude 无需您批准即可读取[工作目录](/docs/zh-CN/permissions#working-directories)之外的文件,请在启动时使用 [`--add-dir`](/docs/zh-CN/cli-reference#cli-flags) 或在会话期间使用 `/add-dir` 将其所在文件夹添加为工作目录。Claude 本就可以无需询问即读取这些目录中的文件,以及它写入页面所用的临时目录中的文件。

83 

84如果发布提示中包含诸如 `Also makes 1 edit to that file on disk.` 的句子,说明 Claude 正在一步完成对 Artifact 文件的更改和发布。当您批准该提示后,Claude Code 会先发布页面,然后将更改写入您的文件。

83 85 

84<h2 id="update-an-artifact">86<h2 id="update-an-artifact">

85 更新一个 artifact87 更新一个 artifact


149* **没有网络访问权限的云端会话**:对于[云环境](/docs/zh-CN/cloud-environments#access-levels),即 **None** 级别。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,可以改由分类器进行批准;在 [Cowork](https://claude.com/product/cowork) 会话中,只能由您本人批准。151* **没有网络访问权限的云端会话**:对于[云环境](/docs/zh-CN/cloud-environments#access-levels),即 **None** 级别。在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下,可以改由分类器进行批准;在 [Cowork](https://claude.com/product/cowork) 会话中,只能由您本人批准。

150* **其他组织的公开 Artifact**:即使在自动模式下,Claude Code 也会先询问您。在 Claude Code 无法询问您的情况下(例如在 `bypassPermissions` 模式下),Claude 无法读取该 Artifact。只有在[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)开启时,Claude 才能读取这些 Artifact。152* **其他组织的公开 Artifact**:即使在自动模式下,Claude Code 也会先询问您。在 Claude Code 无法询问您的情况下(例如在 `bypassPermissions` 模式下),Claude 无法读取该 Artifact。只有在[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)开启时,Claude 才能读取这些 Artifact。

151* **无法确认所有者或网络设置**:当 Claude Code 无法确认 Artifact 的创建者,或无法确认云端会话的网络设置时,它会进行询问,且您的批准仅适用于该次请求。153* **无法确认所有者或网络设置**:当 Claude Code 无法确认 Artifact 的创建者,或无法确认云端会话的网络设置时,它会进行询问,且您的批准仅适用于该次请求。

152* **计划模式,或已关闭功能标志获取**:在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,或者如果您关闭了[功能标志获取](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching),Claude Code 会在 Artifact 工具读取您组织中其他人创建的 Artifact 之前进行询问。154* **计划模式**:在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,Claude Code 会在 Artifact 工具读取您组织中其他人创建的 Artifact 之前进行询问。

153 155 

154当 Claude 使用 WebFetch 读取 Artifact 时,WebFetch 自身的[提示规则](/docs/zh-CN/tools-reference#webfetch-tool-behavior)仍然适用。156当 Claude 使用 WebFetch 读取 Artifact 时,WebFetch 自身的[提示规则](/docs/zh-CN/tools-reference#webfetch-tool-behavior)仍然适用。

155 157 

Details

102[子代理](/docs/zh-CN/sub-agents)使用 Claude 的文件编辑工具进行编辑,但 Claude Code 通常不会在您的会话检查点中捕获这些编辑。回溯是否恢复这些编辑取决于子代理的运行方式:102[子代理](/docs/zh-CN/sub-agents)使用 Claude 的文件编辑工具进行编辑,但 Claude Code 通常不会在您的会话检查点中捕获这些编辑。回溯是否恢复这些编辑取决于子代理的运行方式:

103 103 

104* **前台分叉技能**:[具有 `context: fork` 的技能](/docs/zh-CN/skills#run-skills-in-a-subagent)在前台运行,在您自己的回合期间编辑您的工作树,因此回溯会照常恢复其编辑。设置 `background: false` 以在前台运行分叉;有几种情况([列在技能页面上](/docs/zh-CN/skills#run-skills-in-a-subagent))无论设置如何都会在那里运行。104* **前台分叉技能**:[具有 `context: fork` 的技能](/docs/zh-CN/skills#run-skills-in-a-subagent)在前台运行,在您自己的回合期间编辑您的工作树,因此回溯会照常恢复其编辑。设置 `background: false` 以在前台运行分叉;有几种情况([列在技能页面上](/docs/zh-CN/skills#run-skills-in-a-subagent))无论设置如何都会在那里运行。

105* **任何其他子代理**:回溯不会恢复编辑。使用 git 来还原它们。这包括在后台运行的分叉技能(默认设置)和后台 [`/code-review --fix`](/docs/zh-CN/code-review) 运行。105* **任何其他子代理**:回溯只会恢复 Claude 已在您的对话中编辑过的文件。子代理对其他文件的编辑会保留,因此请使用 git 来还原它们。这包括在后台运行的分叉 skill(默认设置)和后台 [`/code-review --fix`](/docs/zh-CN/code-review-local) 运行。

106 106 

107<h3 id="external-changes-not-tracked">107<h3 id="external-changes-not-tracked">

108 外部更改未跟踪108 外部更改未跟踪

Details

64有关 `/web-setup` 的分步说明(包括 `/web-setup` 存储的内容以及如何删除它),请参阅[从终端连接](/docs/zh-CN/web-quickstart#connect-from-your-terminal)。64有关 `/web-setup` 的分步说明(包括 `/web-setup` 存储的内容以及如何删除它),请参阅[从终端连接](/docs/zh-CN/web-quickstart#connect-from-your-terminal)。

65 65 

66<Note>66<Note>

67 启用了[零数据保留](/docs/zh-CN/zero-data-retention)或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织无法使用 `/web-setup` 或其他云端会话功能。67 启用了[零数据保留](/docs/zh-CN/zero-data-retention)或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织无法使用 `/web-setup` 或其他云端会话功能。使用[客户管理的加密密钥](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)的组织也无法启动云端会话。

68</Note>68</Note>

69 69 

70<h3 id="quick-setup-for-team-and-enterprise">70<h3 id="quick-setup-for-team-and-enterprise">

Details

559 559 

560`matcher` 将 hook 限制为 `startup` 和 `resume` 事件,`$CLAUDE_PROJECT_DIR` 解析为存储库根目录,因此无论会话的工作目录是什么,hook 都能找到脚本。560`matcher` 将 hook 限制为 `startup` 和 `resume` 事件,`$CLAUDE_PROJECT_DIR` 解析为存储库根目录,因此无论会话的工作目录是什么,hook 都能找到脚本。

561 561 

562接下来,在 `scripts/install_pkgs.sh` 创建脚本。它在云端之外立即退出,否则安装您的依赖项:562接下来,在 `scripts/install_pkgs.sh` 创建脚本。它在云端之外立即退出,否则安装您的依赖项。当 `package.json`、`package-lock.json` 和脚本本身自上次成功安装以来均未更改时,它会跳过 `npm install`:

563 563 

564```bash theme={null}564```bash theme={null}

565#!/bin/bash565#!/bin/bash


568 exit 0568 exit 0

569fi569fi

570 570 

571npm install571cd "$CLAUDE_PROJECT_DIR" || exit 1

572hashes=node_modules/.install_pkgs.sha256

573 

574if ! sha256sum --check --status "$hashes" 2>/dev/null; then

575 # Delete the old hashes first, so a failed install runs again next time

576 rm -f "$hashes"

577 if npm install; then

578 sha256sum scripts/install_pkgs.sh package.json package-lock.json > "$hashes" || rm -f "$hashes"

579 fi

580fi

581 

582# pip skips requirements that are already satisfied

572pip install -r requirements.txt583pip install -r requirements.txt

573exit 0584exit 0

574```585```

575 586 

576`CLAUDE_CODE_REMOTE` 检查是将安装限制在云会话的关键:会话 VM 的环境将该变量设置为 `true`,在本地永远不会是 `true`,因此在您的笔记本电脑上,脚本会在安装任何内容之前退出。587`CLAUDE_CODE_REMOTE` 检查是将安装限制在云会话的关键:会话 VM 的环境将该变量设置为 `true`,在本地永远不会是 `true`,因此在您的笔记本电脑上,脚本会在安装任何内容之前退出。

577 588 

578这两个文件一起使每个云会话在启动时获得全新的 `npm install` 和 `pip install`,同时保持本地会话不受影响。589要确认 `npm install` 已成功,请启动一个云端会话,并让 Claude 显示 `node_modules/.install_pkgs.sha256`。该文件列出了这三个文件各自的哈希值。如果该文件不存在,请让 Claude 运行 `npm install` 并报告错误。

590 

591<Note>

592 如果 `npm install` 会读取其他文件,例如工作区的 `package.json`、`.npmrc` 或您的 `postinstall` 脚本的输入,请将它们添加到保存哈希值的 `sha256sum` 命令中。否则,在其中某个文件更改后,您仍会保留旧的包。

593</Note>

579 594 

580<h4 id="limitations-in-cloud-sessions">595<h4 id="limitations-in-cloud-sessions">

581 云会话中的限制596 云会话中的限制


587* **没有仅云端的范围**:hooks 在本地和云会话中都运行。要跳过本地运行,请在 `CLAUDE_CODE_REMOTE` 环境变量不为 `true` 时提前退出,就像[依赖项安装脚本](#install-dependencies-with-a-sessionstart-hook)所做的那样。602* **没有仅云端的范围**:hooks 在本地和云会话中都运行。要跳过本地运行,请在 `CLAUDE_CODE_REMOTE` 环境变量不为 `true` 时提前退出,就像[依赖项安装脚本](#install-dependencies-with-a-sessionstart-hook)所做的那样。

588* **需要网络访问**:安装命令需要连接到包注册表。如果您的环境使用 **None** 网络访问,这些 hooks 会失败。**Trusted** 下的[默认允许列表](#default-allowed-domains)涵盖 npm、PyPI、RubyGems 和 crates.io。603* **需要网络访问**:安装命令需要连接到包注册表。如果您的环境使用 **None** 网络访问,这些 hooks 会失败。**Trusted** 下的[默认允许列表](#default-allowed-domains)涵盖 npm、PyPI、RubyGems 和 crates.io。

589* **代理兼容性**:在 Anthropic 托管环境中,所有出站流量都经过[安全代理](#security-proxy),某些包管理器无法与此代理正确配合工作;Bun 是一个已知的例子。在[自托管环境](/docs/zh-CN/self-hosted-environments-deploy#default-deny-egress)中,出站流量改为经过您自己的网络边界。604* **代理兼容性**:在 Anthropic 托管环境中,所有出站流量都经过[安全代理](#security-proxy),某些包管理器无法与此代理正确配合工作;Bun 是一个已知的例子。在[自托管环境](/docs/zh-CN/self-hosted-environments-deploy#default-deny-egress)中,出站流量改为经过您自己的网络边界。

590* **增加启动延迟**:hooks 在每次会话启动或恢复时运行,不同于受益于[环境缓存](#environment-caching)的设置脚本。请通过在重新安装之前检查依赖项是否已存在来保持安装脚本快速。605* **增加启动延迟**:hook 在每次会话启动或恢复时运行,不同于受益于[环境缓存](#environment-caching)的设置脚本。请通过跳过已完成的工作来保持安装脚本快速,就像[依赖项安装脚本](#install-dependencies-with-a-sessionstart-hook)所做的那样。

591 606 

592要自定义基础镜像,请使用设置脚本在[提供的镜像](#installed-tools)上安装您需要的内容,或使用 `docker compose` 将您自己的镜像作为 Claude 旁边的容器运行。目前不支持完全替换基础镜像。607要自定义基础镜像,请使用设置脚本在[提供的镜像](#installed-tools)上安装您需要的内容,或使用 `docker compose` 将您自己的镜像作为 Claude 旁边的容器运行。目前不支持完全替换基础镜像。

593 608 

code-review.md +86 −383

Details

4 4 

5# Code Review5# Code Review

6 6 

7> 设置自动化 PR 审查,通过对完整代码库的多代理分析来捕获逻辑错误、安全漏洞和回归问题7> 使用 Code Review 捕获 GitHub Pull Request 中的错误:Claude 审查每项更改、验证其发现,并发布内联评论。适用于 Team 和 Enterprise 套餐

8 8 

9<Note>9借助 Code Review,Claude 会审查您 GitHub 仓库中的 Pull Request。多个 Agent 会结合周围代码阅读每项更改,查找逻辑错误、安全漏洞或破损的边界情况等问题。验证步骤会在报告发现之前对照代码检查这些发现。

10 Code Review 目前为研究预览版,仅适用于 [Team 和 Enterprise](https://claude.ai/admin-settings/claude-code) 订阅。对于启用了 [Zero Data Retention](/docs/zh-CN/zero-data-retention) 或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织,此功能不可用,且不在 Anthropic 的 BAA 涵盖范围内。在其他套餐上,您仍然可以使用 `/code-review` 命令[在本地审查 diff](#review-a-diff-locally)。

11</Note>

12 

13Code Review 分析您的 GitHub pull request,并在发现问题的代码行上发布内联评论。一支由专业代理组成的团队在完整代码库的上下文中检查代码更改,寻找逻辑错误、安全漏洞、破损的边界情况和微妙的回归问题。

14 

15发现结果按严重程度标记,不会批准或阻止您的 PR,因此现有的审查工作流保持不变。您可以通过向存储库添加 `CLAUDE.md` 或 `REVIEW.md` 文件来调整 Claude 标记的内容。

16 

17要在您自己的 CI 基础设施中运行 Claude 而不是使用此托管服务,请参阅 [GitHub Actions](/docs/zh-CN/github-actions) 或 [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd)。对于自托管 GitHub 实例上的存储库,请参阅 [GitHub Enterprise Server](/docs/zh-CN/github-enterprise-server)。

18 10 

19本页涵盖:11发现以内联评论的形式出现在相关代码行上,按[严重程度](/docs/zh-CN/code-review-pull-requests#severity-levels)排序,并在 Pull Request 上附带摘要和检查运行。审查永远不会批准或阻止 Pull Request,因此合并的决定权仍在您的团队手中。

20 12 

21* [审查工作原理](#how-reviews-work)13<img src="https://mintcdn.com/claude-code/gLJVaPQEgKC8ZyUD/images/code-review-pipeline.svg?fit=max&auto=format&n=gLJVaPQEgKC8ZyUD&q=85&s=0351c96df9efa3105172eb00a672f130" className="dark:hidden" alt="审查分为四个阶段的示意图。GitHub 上的 Pull Request 被交给多个 Agent,它们在 Anthropic 基础设施上并行搜索。验证步骤剔除误报,剩余的发现经过去重并按严重程度排序,然后审查将内联评论、摘要和检查运行发布回 GitHub。" width="760" height="300" data-path="images/code-review-pipeline.svg" />

22* [设置](#set-up-code-review)

23* [手动触发审查](#manually-trigger-reviews),使用 `@claude review` 和 `@claude review always`

24* [自定义审查](#customize-reviews),使用 `CLAUDE.md` 和 `REVIEW.md`

25* [定价](#pricing)

26* [故障排除](#troubleshooting)失败的运行和缺失的评论

27* [在本地审查差异](#review-a-diff-locally),使用 `/code-review` 命令

28 

29<h2 id="how-reviews-work">

30 审查工作原理

31</h2>

32 14 

33一旦管理员为您的组织[启用 Code Review](#set-up-code-review),审查将在 PR 打开时、每次推送时或手动请求时触发,具体取决于存储库的配置行为。在任何模式下,注释 `@claude review` 可以[在 PR 上启动审查](#manually-trigger-reviews)。15<img src="https://mintcdn.com/claude-code/gLJVaPQEgKC8ZyUD/images/code-review-pipeline-dark.svg?fit=max&auto=format&n=gLJVaPQEgKC8ZyUD&q=85&s=9cf26bde98f4e999d0d9ff5bf5bdff40" className="hidden dark:block" alt="审查分为四个阶段的示意图。GitHub 上的 Pull Request 被交给多个 Agent,它们在 Anthropic 基础设施上并行搜索。验证步骤剔除误报,剩余的发现经过去重并按严重程度排序,然后审查将内联评论、摘要和检查运行发布回 GitHub。" width="760" height="300" data-path="images/code-review-pipeline-dark.svg" />

34 

35当审查运行时,多个代理在 Anthropic 基础设施上并行分析差异和周围代码。每个代理寻找不同类别的问题,然后验证步骤检查候选项是否与实际代码行为相符,以过滤掉误报。结果被去重、按严重程度排序,并作为内联评论发布在发现问题的特定行上,并在审查正文中包含摘要。如果未发现问题,Code Review 会更新 GitHub 检查运行以显示未检测到问题。Claude 也可能在 PR 上发布简短的确认评论。

36 

37审查成本随 PR 大小和复杂性而扩展,平均在 20 分钟内完成。管理员可以通过[分析仪表板](#view-usage)监控审查活动和支出。

38 

39<h3 id="severity-levels">

40 严重程度级别

41</h3>

42 

43每个发现都标有严重程度级别:

44 

45| 标记 | 严重程度 | 含义 |

46| :- | :- | :- |

47| 🔴 | 重要 | 应在合并前修复的错误 |

48| 🟡 | 小问题 | 轻微问题,值得修复但不阻止 |

49| 🟣 | 预先存在 | 代码库中存在但不是由此 PR 引入的错误 |

50 

51发现包括可折叠的**为什么被标记**部分,您可以展开以了解 Claude 为什么标记该问题以及它如何验证问题。

52 

53<h3 id="rate-and-reply-to-findings">

54 对发现进行评分和回复

55</h3>

56 

57Claude 的每条审查评论都已附加 👍 和 👎,因此两个按钮都会在 GitHub UI 中出现,以便一键评分。如果发现有用,请点击 👍;如果发现错误或嘈杂,请点击 👎。Anthropic 在 PR 合并后收集反应计数,并使用它们来调整审查者。反应不会触发重新审查或更改 PR 上的任何内容。

58 

59回复内联评论不会提示 Claude 响应或更新 PR。要对发现采取行动,请修复代码并推送。如果 PR 订阅了推送触发的审查,下一次运行将在问题修复时解决线程。要请求新审查而不推送,请作为[顶级 PR 评论](#manually-trigger-reviews)注释 `@claude review`。

60 

61要在不更改代码的情况下关闭发现,请解决其线程;回复不会关闭它。

62 

63<h3 id="check-run-output">

64 检查运行输出

65</h3>

66 

67除了内联审查评论外,每次审查都会填充 **Claude Code Review** 检查运行,该运行与您的 CI 检查一起出现。展开其 **Details** 链接以在一个地方查看每个发现的摘要,按严重程度排序:

68 

69| 严重程度 | 文件:行 | 问题 |

70| - | - | - |

71| 🔴 重要 | `src/auth/session.ts:142` | 令牌刷新与登出竞争,导致过期会话保持活跃 |

72| 🟡 小问题 | `src/auth/session.ts:88` | `parseExpiry` 在格式错误的输入上静默返回 0 |

73 

74每个发现也作为 **Files changed** 选项卡中的注释出现,直接标记在相关的差异行上。重要发现用红色标记呈现,小问题用黄色警告,预先存在的错误用灰色通知。注释和严重程度表独立于内联审查评论写入检查运行,因此即使 GitHub 拒绝在移动的行上的内联评论,它们仍然可用。

75 

76检查运行始终以中立结论完成,因此它永远不会通过分支保护规则阻止合并。如果您想根据 Code Review 发现来限制合并,请在您自己的 CI 中读取检查运行输出中的严重程度分解。Details 文本的最后一行是一个机器可读的评论,您的工作流可以使用 `gh` 和 jq 解析。要找到检查运行 ID,请使用 `gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'` 列出提交的检查运行,并获取 `Claude Code Review` 运行的 `id`。将 `OWNER`、`REPO` 和 `CHECK_RUN_ID` 替换为您的存储库所有者、存储库名称和该 ID:

77 

78```bash theme={null}

79gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \

80 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'

81```

82 

83这返回一个 JSON 对象,其中包含每个严重程度的计数,例如 `{"normal": 2, "nit": 1, "pre_existing": 0}`。`normal` 键保存重要发现的计数;非零值意味着 Claude 发现了至少一个在合并前值得修复的错误。

84 

85<h3 id="what-code-review-checks">

86 Code Review 检查的内容

87</h3>

88 

89默认情况下,Code Review 专注于正确性:会破坏生产的错误,而不是格式偏好或缺失的测试覆盖。您可以通过[向存储库添加指导文件](#customize-reviews)来扩展其检查范围。

90 

91<h2 id="set-up-code-review">

92 设置 Code Review

93</h2>

94 

95管理员为组织启用一次 Code Review,并选择要包含的存储库。

96 

97<Steps>

98 <Step title="打开 Claude Code 管理员设置">

99 转到 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) 并找到 Code Review 部分。您需要对 Claude 组织具有 Owner 或 Primary Owner 角色,并有权在 GitHub 组织中安装 GitHub Apps。

100 </Step>

101 

102 <Step title="开始设置">

103 点击**设置**。这将开始 GitHub App 安装流程。

104 </Step>

105 

106 <Step title="安装 Claude GitHub App">

107 按照提示安装 Claude GitHub App:选择拥有您要审查的存储库的 GitHub 组织,选择应用可以访问的存储库,并批准请求的权限。

108 

109 要审查 pull request,Claude 通过应用的读取访问权限读取您的存储库内容,并通过其对 pull request 和检查的写入访问权限发布评论和 [check run](#check-run-output)。在安装期间,您授予由其他 Claude 功能(如 [GitHub Actions](/docs/zh-CN/github-actions))共享的更广泛权限集;有关完整列表,请参阅 [GitHub App 权限](/docs/zh-CN/github-actions#github-app-permissions)。

110 </Step>

111 

112 <Step title="选择存储库">

113 选择要为 Code Review 启用的存储库。如果您看不到存储库,请确保在安装期间为 Claude GitHub App 提供了对其的访问权限。您可以稍后添加更多存储库。

114 </Step>

115 

116 <Step title="为每个存储库设置审查触发器">

117 设置完成后,Code Review 部分在表格中显示您的存储库。对于每个存储库,使用**审查行为**下拉菜单选择何时运行审查:

118 

119 * **PR 创建后一次**:当 PR 打开或标记为准备审查时运行一次审查

120 * **每次推送后**:在每次推送到 PR 分支时运行审查,在 PR 演变时捕获新问题,并在您修复标记的问题时自动解决线程

121 * **手动**:打开或推送到 PR 不会启动审查;注释 [`@claude review`](#manually-trigger-reviews) 以请求审查,或 `@claude review always` 以同时订阅 PR 到后续推送的审查

122 

123 无论您选择哪个选项,Claude 仅在有人在 [fork 中的 pull request](#review-pull-requests-from-forks) 上注释 `@claude review` 时才审查它。

124 

125 每次推送时审查会运行最多审查并花费最多。手动模式对于高流量存储库很有用,您可以选择特定 PR 进行审查,或仅在 PR 准备好后才开始审查。

126 </Step>

127</Steps>

128 

129存储库表还显示每个存储库基于最近活动的平均审查成本。使用行操作菜单为每个存储库打开或关闭 Code Review,或完全删除存储库。

130 

131要验证设置,请打开测试 PR。如果您选择了自动触发器,在几分钟内会出现名为 **Claude Code Review** 的检查运行。如果您选择了手动,在 PR 上注释 `@claude review` 以启动第一次审查。如果没有出现检查运行,请确认存储库在您的管理员设置中列出,并且 Claude GitHub App 有权访问它。

132 

133<h2 id="manually-trigger-reviews">

134 手动触发审查

135</h2>

136 

137注释命令按需启动审查。无论存储库的配置触发器如何,它们都有效,因此您可以使用它们在手动模式下选择特定 PR 进行审查,或在其他模式下获得立即重新审查。

138 

139| 命令 | 作用 |

140| :- | :- |

141| `@claude review` | 启动单次审查,不订阅未来推送 |

142| `@claude review always` | 启动审查并将 PR 订阅到今后的推送触发审查 |

143| `@claude review once` | 与 `@claude review` 相同:启动单次审查,不订阅 |

144 

145当您想要对 PR 的每个后续推送启动新审查时,使用 `@claude review always`,例如在设置为手动模式的存储库中的高优先级 PR 上。由于基础命令不订阅 PR,您可以请求一次性第二意见,而不改变后续推送是否触发审查。

146 16 

147<Note>17<Note>

148 在 2026 年 7 月更新之前,`@claude review` 将 PR 订阅到推送触发审查。如果您依赖该行为,请改为注释 `@claude review always`。`@claude review once` 仍然有效,行为与基础命令相同。18 Code Review 使用 AI 审查代码,可能会遗漏错误、安全漏洞或其他问题。没有发现的审查并不意味着您的代码没有错误或是安全的。

149</Note>19</Note>

150 20 

151对于任一命令触发审查:21<span id="review-a-diff-locally" />

152 

153* 将其作为顶级 PR 评论发布,而不是差异行上的内联评论

154* 在注释开头放置命令,`once` 或 `always` 与命令的其余部分在同一行

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

156* PR 必须打开

157 

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

159 

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

161 

162<h3 id="review-pull-requests-from-forks">

163 审查来自分支的拉取请求

164</h3>

165 

166Claude 不会自动审查来自分支的拉取请求,无论存储库的**审查行为**设置如何。要启动一个,请在拉取请求上注释 `@claude review`。[注释命令的要求](#manually-trigger-reviews)仍然适用,您需要的写入访问权限是针对基础存储库的,而不是分支。

167 22 

168要获得分支拉取请求的另一次审查,请发布新的 `@claude review` 注释。`@claude review always` 也有效,但不会将拉取请求订阅到后续推送上的审查。除了注释命令外,没有其他任何东西会在分支拉取请求上启动审查:23要启用 Code Review,需由您 Claude 组织的 Owner 按照[设置 Code Review](/docs/zh-CN/code-review-setup)进行操作。Claude 也可以在不使用此服务的情况下审查代码。在任何套餐上,都可以在 Claude Code 会话中运行 [`/code-review`](/docs/zh-CN/code-review-local),或[比较所有选项](#compare-ways-to-get-a-review)。

169 24 

170* 在检查运行上单击**重新运行**不会启动审查25<h2 id="availability">

171* 推送新提交不会启动审查,即使在设置为**每次推送后**的存储库中也不会26 可用性

172 

173<h2 id="customize-reviews">

174 自定义审查

175</h2>27</h2>

176 28 

177Code Review 从您的存储库读取两个文件来指导它标记的内容。它们在如何强烈影响审查方面有所不同:29在设置 Code Review 之前,请确认您的组织符合条件:

178 

179* **`CLAUDE.md`**:共享项目说明,Claude Code 用于所有任务,不仅仅是审查。Code Review 将其作为项目上下文读取,并将新引入的违规标记为小问题。

180* **`REVIEW.md`**:仅审查说明,提供给审查管道中查找和验证发现的代理,并由排名和报告发现的代理咨询。使用它来说明您的团队想要标记的内容、严重程度以及如何报告发现。

181 

182<h3 id="claude-md">

183 CLAUDE.md

184</h3>

185 

186Code Review 读取您的存储库的 `CLAUDE.md` 文件,并将新引入的违规视为[小问题级别](#severity-levels)的发现。这是双向工作的:如果您的 PR 以使 `CLAUDE.md` 语句过时的方式更改代码,Claude 会标记文档需要更新。

187 

188Claude 在目录层次结构的每个级别读取 `CLAUDE.md` 文件,因此子目录的 `CLAUDE.md` 中的规则仅适用于该路径下的文件。有关 `CLAUDE.md` 如何工作的更多信息,请参阅[内存文档](/docs/zh-CN/memory)。

189 30 

190对于您不想应用于常规 Claude Code 会话的仅审查指导,请改用 [`REVIEW.md`](#review-md)。31* **套餐**:[Team 和 Enterprise](/docs/zh-CN/feature-availability)

191 32* **代码托管平台**:托管在 GitHub 上的仓库,包括 [GitHub Enterprise Server](/docs/zh-CN/github-enterprise-server) 和启用数据驻留的 GitHub Enterprise Cloud。对于数据驻留,请让 Owner 按照 [GitHub Enterprise Server 管理员设置](/docs/zh-CN/github-enterprise-server#admin-setup)操作,并输入您企业的 `ghe.com` 主机名。

192<h3 id="review-md">33* **数据保留**:对于启用了 [Zero Data Retention](/docs/zh-CN/zero-data-retention) 或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织,Code Review 不可用,且不在 Anthropic 的业务伙伴协议(BAA)涵盖范围内。

193 REVIEW\.md34* **加密密钥**:对于使用客户管理加密密钥(CMEK)的组织,Code Review 暂不可用。

194</h3>35* **云提供商**:即使您的开发人员通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 使用 Claude Code,您也需要一个使用上述套餐之一的 Claude 组织

195 36 

196`REVIEW.md` 是位于您的存储库根目录的文件,它为您的存储库定制 Code Review。审查管道中查找和验证发现的代理接收其内容作为您的存储库的审查说明,以及 Code Review 的默认审查指导,排名和报告发现的代理在确定严重程度和编写审查之前咨询它。37<h2 id="set-up-and-use-code-review">

197 38 设置和使用 Code Review

198将您想要强制执行的规则直接放在 `REVIEW.md` 中。

199 

200<h4 id="what-you-can-tune">

201 您可以调整的内容

202</h4>

203 

204`REVIEW.md` 是自由格式的 markdown,因此任何您可以表达为审查说明的内容都在范围内。下面的模式在实践中影响最大。

205 

206**严重程度**:为您的存储库重新定义 🔴 重要的含义。默认校准针对生产代码;文档存储库、配置存储库或原型可能想要更窄的定义。明确说明哪些类别的发现是重要的,哪些最多是小问题。您也可以向另一个方向升级,例如将任何 `CLAUDE.md` 违规视为重要而不是默认小问题。

207 

208**小问题数量**:限制单次审查发布的 🟡 小问题评论数量。散文和配置文件可以永远被打磨。像"最多报告五个小问题,在摘要中提及其余的计数"这样的上限使审查可操作。

209 

210**跳过规则**:列出 Claude 应该不发布任何发现的路径、分支模式和发现类别。常见候选是生成的代码、lockfiles、供应商依赖和机器创作的分支,以及您的 CI 已经强制执行的任何内容,如 linting 或拼写检查。对于值得一些审查但不需要完全审查的路径,设置更高的标准而不是完全跳过:"在 `scripts/` 中,仅在接近确定且严重时报告。"

211 

212**存储库特定检查**:添加您想在每个 PR 上标记的规则,如"新 API 路由必须有集成测试。"因为 `REVIEW.md` 到达每个发现和验证代理,这些比长 `CLAUDE.md` 中的相同规则更可靠地着陆。

213 

214**验证标准**:在发布发现类别之前需要证据。例如,"行为声明需要源中的 `file:line` 引用,而不是从命名推断"会减少否则会花费作者往返的误报。

215 

216**重新审查收敛**:告诉 Claude 当 PR 已经被审查时如何表现。像"在第一次审查后,抑制新的小问题并仅发布重要发现"这样的规则会阻止单行修复仅因风格而达到第七轮。

217 

218**摘要形状**:要求审查正文以一行计数开头,如 `2 factual, 4 style`,并在这种情况下以"没有事实问题"开头。作者想在详细信息之前知道工作的形状。

219 

220<h4 id="example">

221 示例

222</h4>

223 

224这个 `REVIEW.md` 为后端服务重新校准严重程度,限制小问题,跳过生成的文件,并添加存储库特定检查。

225 

226```markdown theme={null}

227# 审查说明

228 

229## 重要在这里的含义

230 

231保留重要用于会破坏行为、泄露数据或阻止回滚的发现:不正确的逻辑、无范围的数据库查询、日志或错误消息中的 PII,以及不向后兼容的迁移。风格、命名和重构建议最多是小问题。

232 

233## 限制小问题

234 

235每次审查最多报告五个小问题。如果您发现了更多,请在摘要中说"加上 N 个类似项目"而不是内联发布它们。如果您发现的一切都是小问题,请以"没有阻止问题"开头摘要。

236 

237## 不要报告

238 

239- CI 已经强制执行的任何内容:lint、格式化、类型错误

240- `src/gen/` 下生成的文件和任何 `*.lock` 文件

241- 故意违反生产规则的仅测试代码

242 

243## 始终检查

244 

245- 新 API 路由有集成测试

246- 日志行不包括电子邮件地址、用户 ID 或请求正文

247- 数据库查询的范围限定为调用者的租户

248```

249 

250<h4 id="keep-it-focused">

251 保持专注

252</h4>

253 

254长度有成本:长 `REVIEW.md` 会稀释最重要的规则。将其保持为改变审查行为的说明,并将常规项目上下文留在 `CLAUDE.md` 中。

255 

256<h2 id="view-usage">

257 查看使用情况

258</h2>39</h2>

259 40 

260转到 [claude.ai/analytics/code-review](https://claude.ai/analytics/code-review) 以查看整个组织的 Code Review 活动。仪表板显示:41<span id="set-up-code-review" />

261 

262| 部分 | 显示内容 |

263| :- | :- |

264| 审查的 PR | 所选时间范围内每日审查的 pull request 计数 |

265| Code Review 成本 | 本月迄今为止的 Code Review 支出 |

266| 反馈 | 因开发人员解决问题而自动解决的审查评论计数 |

267| 仓库细分 | 每个仓库的审查 PR 计数、已解决评论计数和审查运行次数,以及估算成本和按 PR 查看的视图 |

268 

269仅当选择当前月份时,Code Review 成本卡片才会显示金额。分析中的成本数字可能与您的发票不同。仓库细分中的成本按标价估算,未计入任何折扣或抵扣额度,并且仅涵盖 Claude 在 Pull Request 上发布的审查。对于发票准确的支出,请参考您的 Anthropic 账单。

270 

271<h2 id="pricing">

272 定价

273</h2>

274 

275Code Review 根据令牌使用情况计费。每次审查平均花费 \$15-25,随 PR 大小、代码库复杂性和需要验证的问题数量而扩展。Code Review 使用通过[使用额度](https://support.claude.com/zh-CN/articles/12429409-extra-usage-for-paid-claude-plans)单独计费,不计入您的计划包含的使用。

276 

277您选择的审查触发器影响总成本:

278 

279* **PR 创建后一次**:每个 PR 运行一次

280* **每次推送后**:在每次推送时运行,将成本乘以推送次数

281* **手动**:没有在打开或推送时进行审查,因此成本仅从某人请求的审查中产生

282 

283在 PR 创建后一次或手动模式下,注释 `@claude review always` [选择 PR 进入推送触发审查](#manually-trigger-reviews),因此在该注释后每次推送都会产生额外成本。在每次推送后模式下,推送已经触发审查,因此订阅不会改变每次推送的成本。注释 `@claude review` 运行单次审查而不订阅未来推送。Claude 仅在有人注释 `@claude review` 时审查[来自分支的拉取请求](#review-pull-requests-from-forks),因此分支拉取请求在任何模式下都不会产生每次推送的成本。

284 42 

285无论您的组织是否为其他 Claude Code 功能使用 Amazon Bedrock 或 Google Cloud 的 Agent Platform,成本都会出现在您的 Anthropic 账单上。要为 Code Review 设置每月支出上限,请转到 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) 并为 Claude Code Review 服务配置限制。43<span id="pricing" />

286 44 

287要监控支出,请使用[分析仪表板](#view-usage)。45<span id="manually-trigger-reviews" />

288 46 

289<h2 id="troubleshooting">47<span id="customize-reviews" />

290 故障排除

291</h2>

292 

293审查运行是尽力而为的,失败的运行永远不会阻止您的 PR。Code Review 会自动重试一些中断的审查。本部分介绍如何自己再次运行审查,以及当检查运行报告您找不到的问题时在哪里查看。

294 

295<h3 id="retrigger-a-failed-or-timed-out-review">

296 重新触发失败或超时的审查

297</h3>

298 48 

299当审查失败或超过时间限制时,检查运行完成,标题为 **Code review failed** 或 **Code review timed out**。结论仍然是中立的,因此没有任何东西阻止您的合并。除非检查运行的摘要说新的提交审查已自动排队,否则请自己再次运行审查。49<span id="troubleshooting" />

300 50 

301要再次运行审查,在 PR 上注释 `@claude review`。这启动一个新的审查,不订阅 PR 到未来推送。如果 PR 不是[来自 fork](#review-pull-requests-from-forks),您可以改为在 GitHub 的 Checks 选项卡中的 **Claude Code Review** 检查上点击 **Re-run**。重新运行也会启动一个新的审查,不订阅 PR。51根据您需要完成的操作选择相应页面:

302 52 

303<h3 id="review-didn’t-run-and-the-pr-shows-a-budget-message">53<CardGroup cols={2}>

304 审查未运行,PR 显示预算消息54 <Card title="设置 Code Review" icon="toggle-on" href="/docs/zh-CN/code-review-setup">

305</h3>55 检查要求、安装 Claude GitHub App,并选择仓库、审查级别以及审查的运行时机

306 56 </Card>

307当您的组织的 Code Review 每月支出上限已达到,或其使用额度余额已用完时,Code Review 会跳过审查并在 PR 上发布单条评论。该评论和检查运行卡片都会说明原因,并链接到管理员可在其中解决问题的管理页面:

308 57 

309* **已达到支出上限**:审查在下一个计费周期开始时恢复,或在管理员于 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) 提高上限后立即恢复58 <Card title="自定义 Code Review" icon="sliders" href="/docs/zh-CN/code-review-customize">

310* **使用额度已用完**:管理员在 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) 添加更多[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)后,审查即恢复59 通过仓库中的 `REVIEW.md` 和 `CLAUDE.md` 文件调整标记的内容

60 </Card>

311 61 

312<h3 id="find-issues-that-aren’t-showing-as-inline-comments">62 <Card title="在 Pull Request 上阅读和请求审查" icon="code-pull-request" href="/docs/zh-CN/code-review-pull-requests">

313 查找未显示为内联评论的问题63 阅读发现及其严重程度,并通过评论请求再次审查

314</h3>64 </Card>

315 65 

316如果检查运行标题说发现了问题但您在差异上看不到内联审查评论,请在这些其他位置查看发现的位置:66 <Card title="Code Review 故障排除" icon="wrench" href="/docs/zh-CN/code-review-troubleshooting">

67 修复未启动、失败或因预算而被跳过的审查

68 </Card>

317 69 

318* **检查运行 Details**:在检查选项卡中的 Claude Code Review 检查旁边点击 **Details**。严重程度表列出每个发现及其文件、行和摘要,无论内联评论是否被接受。70 <Card title="Code Review 成本和使用情况" icon="chart-line" href="/docs/zh-CN/code-review-costs">

319* **Files changed 注释**:在 PR 上打开 **Files changed** 选项卡。发现呈现为直接附加到差异行的注释,与审查评论分开。71 了解审查的计费方式、估算支出、设置每月支出上限并跟踪审查活动

320* **审查正文**:如果您在审查运行时推送到 PR,某些发现可能引用当前差异中不再存在的行。这些出现在审查正文文本中的 **Additional findings** 标题下,而不是作为内联评论。72 </Card>

73</CardGroup>

321 74 

322<h2 id="review-a-diff-locally">75<h2 id="how-reviews-work">

323 在本地审查差异76 审查工作原理

324</h2>77</h2>

325 78 

326[`/code-review` 命令](/docs/zh-CN/commands)在您的终端中审查 diff,无需安装 GitHub App。它会报告正确性错误。根据您的模型和 effort 级别,审查还会涵盖重用、简化和效率方面的清理。79<span id="what-code-review-checks" />

327 

328`/review` 是 `/code-review` 的别名;在 v2.1.223 之前,它是一个单独的命令,对 GitHub pull request 进行单次通过、只读审查。

329 

330<Steps>

331 <Step title="运行 /code-review">

332 从您正在工作的会话中,运行命令:

333 

334 ```text theme={null}

335 /code-review

336 ```

337 

338 它审查您分支相对于其上游的提前提交加上任何未提交的更改,因此它需要在分支或工作树中进行工作以有内容可报告。要审查其他内容,请传递一个目标:文件路径、PR 编号、分支名称或引用范围,例如 `main...my-feature`。

339 

340 您还可以添加标志:

341 

342 * `--fix`:在审查后将发现应用到您的工作树

343 * `--comment`:将发现作为内联评论发布在 GitHub Pull Request 上,或作为单个注释发布在 GitLab merge request 上

344 * `--post`:在 `github.com` Pull Request 的 `ultra` 云审查上,在启动对话框中预选将完成的发现发布到 PR;请参阅[将发现发布到 Pull Request](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request)。需要 Claude Code v2.1.227 或更高版本

345 * `--max-findings <n>`、`--max-findings all` 或 `--max-findings default`:最多报告 `n` 个发现,或使用 `all` 报告所有发现,以代替审查的常规数量限制。后续审查会重用您输入的值,直到您传递 `--max-findings default`。需要 Claude Code v2.1.288 或更高版本

346 

347 当您为 GitLab merge request 传递 `--comment` 时,Claude Code 通过 GitLab 的 `glab` CLI 发布发现。需要 Claude Code v2.1.257 或更高版本。当 `glab` 未安装时,Claude 在终端中打印发现。

348 80 

349 将 merge request 作为其 URL 或 `!123` 引用传递。Claude Code 仅当检出的源在 `gitlab.com` 上时才将裸数字或分支名称视为 merge request。在自管理的 GitLab 实例上,传递 URL 或 `!123` 形式。81默认情况下,Code Review 专注于正确性:会破坏生产的错误,而不是格式偏好或缺失的测试覆盖。要更改其标记的内容,请[向仓库添加指导文件](/docs/zh-CN/code-review-customize)。

350 </Step>

351 82 

352 <Step title="继续工作">83审查在 Anthropic 基础设施上分四个阶段运行:

353 审查作为具有自己上下文窗口的后台[子代理](/docs/zh-CN/sub-agents)运行,因此它不会填充您的对话。发现在审查完成时到达您的对话。

354 </Step>

355 84 

356 <Step title="根据发现采取行动">851. **查找**:多个 Agent 并行检查 diff 和周围代码。

357 要求 Claude 修复审查发现的内容。如果您传递了 `--fix` 或 `--comment`,审查已经应用或发布了其发现。862. **验证**:验证步骤对照代码检查候选发现,并过滤掉误报。

358 </Step>873. **排序**:剩余的发现经过去重并按严重程度排序。

359</Steps>884. **发布**:审查将其结果发布到 Pull Request 上。

360 89 

361Claude 在这两个运行中都将发现作为文本报告在回复中,即使主机应用程序请求发现列表:90每次审查都会在 Pull Request 上留下以下内容:

362 91 

363* 在终端会话中,其中 `/code-review` 作为[分叉子代理](/docs/zh-CN/skills#run-skills-in-a-subagent)运行审查92* **发现**:相关代码行上的内联评论,并在审查正文中附带摘要

364* 在带有文本或 JSON 输出的 `-p` 运行中93* **检查运行**:名为 **Claude Code Review**,其[详细信息](/docs/zh-CN/code-review-pull-requests#check-run-output)中列出了各项发现。检查运行不会以失败结束。

94* **未发现问题时**:检查运行的标题显示 **Code review found no issues**,Claude 也会在 Pull Request 上发布相同的简短说明

365 95 

366在请求发现列表的主机应用程序中,例如[桌面应用](/docs/zh-CN/desktop#review-your-code),Claude 通过[`ReportFindings` 工具](/docs/zh-CN/tools-reference)报告审查的发现。Claude Code 将报告呈现为发现列表,每个条目显示文件位置、单句摘要,以及当发现带有类别标签时显示的类别标签,例如 `correctness`。主机请求在每个 effort 级别都适用,需要 Claude Code v2.1.218 或更高版本。96Code Review 会选择运行审查所用的 Claude 模型,其管理设置中不提供模型选择。要让审查更深入或更轻量,请更改[审查级别](#review-levels)。

367 97 

368当 Claude 稍后在会话中修复报告的发现时,它会再次报告它们,Claude Code 将更新的发现列表中的每个发现标记为已修复、已跳过或无需更改。98Owner 启用 Code Review 后,每个仓库都有一个设置,用于指定[审查的运行时机](/docs/zh-CN/code-review-setup#set-when-reviews-run):在 Pull Request 打开时运行一次、每次推送后运行,或仅在请求时运行。无论选择哪一项,对仓库具有写入权限的人员都可以在 Pull Request 上评论 `@claude review` 来[启动审查](/docs/zh-CN/code-review-pull-requests#comment-commands)。

369 99 

370<h3 id="what-the-review-reads-and-edits">100<h3 id="review-levels">

371 审查读取和编辑的内容101 审查级别

372</h3>102</h3>

373 103 

374审查遵循您的 `CLAUDE.md`,就像任何 Claude Code 会话一样,但它不读取[`REVIEW.md`](#review-md)。后台审查在您的会话的[检查点](/docs/zh-CN/checkpointing#subagent-edits-not-restored)之外应用其 `--fix` 编辑,因此 `/rewind` 不会撤销它们;使用 git 来恢复它们。当审查[在前台运行](#run-in-the-foreground)时,它在您自己的回合期间编辑您的工作树,因此 `/rewind` 照常恢复其编辑。104审查级别决定每次审查的深入程度,审查越深入,成本越高:

375 105 

376<h3 id="tune-effort-and-arguments">106* **Quick**:较轻量的检查。速度最快,成本最低。

377 调整工作量和参数107* **Standard**:在深度、速度和成本之间取得平衡。默认级别。

378</h3>108* **Deep**:最深入的检查。耗时最长,成本最高。

379 

380传递一个 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)以权衡覆盖范围和置信度。在 `low` 级别,审查报告它最有信心的发现,因此您看到更少的误报。从 `medium` 到 `max`,审查会扩大覆盖范围。

381 

382当您不输入级别时,审查重用您上次输入的 `low` 到 `max` 的级别,即使在较早的会话中,Claude Code 显示一个通知,例如 `Reusing high effort, the level you typed last time`。输入一个级别,例如 `/code-review high`,以更改后续运行重用的内容;您在非交互式 `-p` 运行中传递的级别不会更新它。`ultra` 既不更新也不使用记住的级别。如果您从未输入过级别,审查使用会话的当前工作量。在 v2.1.223 之前,没有级别的 `/code-review` 总是使用会话的当前工作量。

383 

384在工作量级别和标志之后,Claude Code 以两种方式之一读取行的其余部分:

385 

386* **不使用 `ultra`**:左边的所有内容都是审查目标,即使它以另一个命令名称开头。`/code-review /fix-issue 123` 使用 `/fix-issue 123` 作为目标文本进行审查,而不是将 `/fix-issue` 作为第二个[堆叠技能](/docs/zh-CN/skills#pass-arguments-to-skills)加载。在 v2.1.218 之前,堆叠在 `/code-review` 之后的命令作为其自己的技能展开。

387* **使用 `ultra`**:Claude Code 读取单个单词作为基础分支或 PR 编号,并将不命名分支或 PR 的较长文本转换为[附加到审查的注释](/docs/zh-CN/ultrareview#pass-a-request-in-plain-words)。`/code-review ultra check my auth changes` 审查您的当前分支,Claude 将发现与您的注释相关联。

388 

389<h3 id="run-in-the-foreground">

390 在前台运行

391</h3>

392 

393审查默认在后台运行;在 v2.1.218 之前,它在您的对话中运行。在以下情况下它在前台运行:

394 109 

395* 您在较早的审查仍在进行时再次运行 `/code-review`110Owner 可以[为组织选择一个级别](/docs/zh-CN/code-review-setup#set-the-default-review-level),也可以为单个仓库指定其自己的级别,例如为常规代码库使用 Quick,为关键代码库使用 Deep。有关影响每次审查成本的其他因素,请参阅 [Code Review 成本和使用情况](/docs/zh-CN/code-review-costs)。

396* 您以非交互模式运行它,使用 `-p` 标志或 Agent SDK;Claude Code 等待审查并在响应中包含发现,除了 `ultra`,它[不等待云审查](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively)

397* 您将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,这也关闭了所有其他后台任务功能

398 111 

399<h3 id="let-claude-start-the-review">112<h3 id="what-a-review-can-access">

400 让 Claude 启动审查113 审查可以访问的内容

401</h3>114</h3>

402 115 

403Claude 可以自己启动 `/code-review`。要求它以纯语言审查您的更改,它可以在不输入命令的情况下运行技能,[计划任务](/docs/zh-CN/scheduled-tasks)以 `/code-review` 作为其提示运行审查。116审查通过 Owner [在设置期间安装](/docs/zh-CN/code-review-setup#turn-on-code-review)的 Claude GitHub App 访问您的仓库:

404 117 

405计划任务永远不会启动[云审查](#escalate-to-ultrareview),因此计划 `/code-review` 不带 `ultra` 参数。118* **运行位置**:在 Anthropic 基础设施上的托管环境中运行。审查不会在[自托管环境](/docs/zh-CN/self-hosted-environments)中运行。

119* **读取和写入的内容**:在审查过程中,对仓库的访问是只读的,审查不会推送提交。在 Pull Request 上,它会发布评论和[检查运行](/docs/zh-CN/code-review-pull-requests#check-run-output),解决自己之前的评论线程,并可以用 👀 回应评论命令。该应用本身拥有由其他 Claude 功能共享的[更广泛的权限集](/docs/zh-CN/github-actions#github-app-permissions)。

120* **检查代码的方式**:审查通过阅读 diff 和周围代码进行,不会构建或运行您的代码。

406 121 

407要在保持 `/code-review` 可供您输入的同时停止 Claude 和计划任务启动审查,请向[设置文件](/docs/zh-CN/settings#where-settings-live)(例如 `~/.claude/settings.json`)添加[`skillOverrides`](/docs/zh-CN/skills#override-skill-visibility-from-settings)条目:122<h3 id="who-controls-a-review">

408 123 谁可以控制审查

409```json theme={null}

410{

411 "skillOverrides": {

412 "code-review": "user-invocable-only"

413 }

414}

415```

416 

417在 v2.1.246 之前,Claude 仅在从 Anthropic 获取的功能标志打开它的地方自己启动 `/code-review`。在[不获取功能标志的会话](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)中,`/code-review` 仅在您输入时运行,计划的 `/code-review` 作为纯文本到达 Claude。

418 

419<h3 id="escalate-to-ultrareview">

420 升级到 ultrareview

421</h3>124</h3>

422 125 

423`/code-review ultra --fix` 在云中运行更深入的 [ultrareview](/docs/zh-CN/ultrareview),然后在发现返回到您的会话时将其应用到您的工作树。126* **谁可以启动审查**:在自动运行审查的仓库中,打开 Pull Request 或向其推送都会启动审查,[草稿和 fork 除外](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks)。[评论命令](/docs/zh-CN/code-review-pull-requests#comment-commands)只有在来自对仓库具有写入权限的人员时才会启动审查。

424 127* **遵循哪些指令**:来自基础分支或默认分支的 `REVIEW.md`,[绝不会来自 Pull Request 自身的更改](/docs/zh-CN/code-review-customize#which-branch-review-md-is-read-from)。

425Ultrareview 使用其自己的范围:您当前的分支与存储库的默认分支,加上工作树中的任何未提交和暂存的更改。对于命名为凭证或密钥的未提交文件更改,例如 `.env` 和 `*.tfvars` 文件,Claude Code 遵循[将本地存储库上传到云会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github)的规则。传递分支名称,例如 `/code-review ultra develop`,以与不同的基础进行比较。

426 128 

427当目标是 `github.com` pull request 时,您可以让 Claude[将完成的发现发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request)作为来自您 GitHub 账户的评论。需要 Claude Code v2.1.227 或更高版本。129<h2 id="compare-ways-to-get-a-review">

428 130 比较获取审查的方式

429<Note>131</h2>

430 Ultrareview 需要使用 claude.ai 账户进行身份验证,在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上不可用,对启用了零数据保留或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织也不可用。当 ultrareview 不可用时,`/code-review ultra` 在您的会话中运行本地审查。

431</Note>

432 132 

433要从脚本或 CI 作业运行云审查,请使用 [`claude ultrareview` 子命令](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively),它会等待发现并将其打印到 stdout。133要找出您可以使用的选项,请根据您的套餐和代码托管平台查看 **谁可以使用** 一列:

434 134 

435该命令在 v2.1.147 之前被命名为 `/simplify`,当时它默认应用修复。`/simplify` 运行单独的仅清理审查,应用修复而不寻找错误。如果您为错误查找编写了 `/simplify` 脚本,请切换到 `/code-review --fix`。135| 选项 | 启动审查的方式 | 运行位置 | 谁可以使用 |

136| :- | :- | :- | :- |

137| [Code Review](#how-reviews-work) | 按各仓库设置的 Pull Request 活动,或 `@claude review` 评论 | Anthropic 基础设施 | 拥有 GitHub 仓库、使用 Team 或 Enterprise 套餐的组织,在 Owner 启用后即可使用 |

138| [`/code-review`](/docs/zh-CN/code-review-local) | 您在自己的分支上运行该命令 | 您的 Claude Code 会话 | 任何人,任何套餐 |

139| [Ultrareview](/docs/zh-CN/ultrareview) | 您从 Claude Code 启动 | 云沙箱 | 需要使用 claude.ai 账户登录。有关不可用的情况,请参阅 [Ultrareview](/docs/zh-CN/ultrareview) |

140| 在您自己的 CI 中运行 Claude,使用 [GitHub Actions](/docs/zh-CN/github-actions) 或 [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd) | 您的流水线事件,例如每个 Pull Request 或 merge request | 您自己的 CI 运行器 | 在 GitHub 或 GitLab 上拥有 Claude API 密钥或云提供商凭据的任何人 |

141| 您自己的审查器,作为[子代理](/docs/zh-CN/sub-agents)或 [skill](/docs/zh-CN/skills) | 您或 Claude 在会话中调用它 | 您运行 Claude Code 的任何位置 | 任何编写了审查器的人 |

436 142 

437<h2 id="related-resources">143<h2 id="related-resources">

438 相关资源144 相关资源

439</h2>145</h2>

440 146 

441* [Commands](/docs/zh-CN/commands):在本地 Claude Code 会话中运行 `/code-review` 以在推送前检查差异147* [GitHub Enterprise Server](/docs/zh-CN/github-enterprise-server):在自托管 GitHub 实例上使用 Code Review

442* [GitHub Actions](/docs/zh-CN/github-actions):在您自己的 GitHub Actions 工作流中运行 Claude,以实现超越代码审查的自定义自动化148* [GitHub App 权限](/docs/zh-CN/github-actions#github-app-permissions):Claude GitHub App 请求的完整权限集

443* [GitLab CI/CD](/docs/zh-CN/gitlab-ci-cd):GitLab 管道的自托管 Claude 集成

444* [Memory](/docs/zh-CN/memory):`CLAUDE.md` 文件如何在 Claude Code 中工作

445* [Analytics](/docs/zh-CN/analytics):跟踪超越代码审查的 Claude Code 使用情况

446* [How Anthropic secures its AI-native software development lifecycle](https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle):自动化审查如何作为 Anthropic 安全开发流程的一个层级149* [How Anthropic secures its AI-native software development lifecycle](https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle):自动化审查如何作为 Anthropic 安全开发流程的一个层级

code-review-costs.md +88 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Code Review 费用和用量

6 

7> 估算并限制您的组织在 Claude Code Review 上的支出:审查如何通过使用额度计费、哪些因素影响费用,以及在哪里跟踪用量。

8 

9[Code Review](/docs/zh-CN/code-review) 没有按次计算的固定价格。您的支出取决于每次审查的费用以及运行的审查次数:

10 

11* **每次审查的费用**:随[审查级别](/docs/zh-CN/code-review-setup#set-the-default-review-level)、变更的大小、相关代码的复杂度以及需要验证的候选问题数量而变化

12* **审查次数**:由每个仓库中[审查的运行频率](#how-often-reviews-run)决定

13 

14<h2 id="pricing">

15 定价

16</h2>

17 

18Code Review 通过[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)按 token 用量计费,与您套餐中包含的用量分开计算。审查费用计入您的组织,而不是计入开启 PR 或请求审查的开发者。无论您的组织是否将 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 用于其他 Claude Code 功能,费用都会显示在您的 Anthropic 账单上。

19 

20<h3 id="how-often-reviews-run">

21 审查的运行频率

22</h3>

23 

24从管理页面添加的仓库默认设为 **After every push**,这种模式运行的审查次数最多。每个仓库的 [**Review runs** 设置](/docs/zh-CN/code-review-setup#set-when-reviews-run)决定一个 Pull Request 会获得多少次审查:

25 

26* **Once after PR creation**:在 Pull Request 被打开、重新打开或标记为可供审查时运行一次审查

27* **After every push**:每次推送时运行,费用会按推送次数成倍增加

28* **Manual (@claude review)**:打开或推送时不运行审查

29 

30评论命令、草稿以及来自 fork 的 Pull Request 会影响上述次数:

31 

32* **在 Once after PR creation 或 Manual 模式下使用 `@claude review always`**:[让该 PR 启用推送触发的审查](/docs/zh-CN/code-review-pull-requests#comment-commands),因此在该评论之后每次推送都会产生额外费用

33* **在 After every push 模式下使用 `@claude review always`**:推送本来就会触发审查,因此该订阅不会改变每次推送的费用

34* **`@claude review`**:运行一次审查,但不订阅后续推送

35* **草稿和来自 fork 的 Pull Request**:[自动审查会跳过这两者](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks),因此向它们推送不会增加审查次数

36 

37<h2 id="estimate-your-spend">

38 估算您的支出

39</h2>

40 

41在大范围推广之前,先进行小规模试点,根据您自己的 Pull Request 估算每月支出。

42 

431. 为试点设置[每月支出上限](#limit-your-spend)。

442. 为几个具有代表性的仓库启用 Code Review,并将 **Review runs** 设为 **Once after PR creation** 或 **Manual (@claude review)**。

453. 运行若干次审查后,在 [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) 的 **Code review** 部分中,查看 **Repositories** 表的 **Average cost** 列,了解每个仓库每次审查的平均费用。

464. 将该平均值乘以该仓库每月打开的 Pull Request 数量。对于 **After every push**,还需再乘以每个 Pull Request 的典型推送次数。

47 

48仓库的平均费用会随其 Pull Request 的大小以及您选择的审查级别而变化。

49 

50<h2 id="limit-your-spend">

51 限制您的支出

52</h2>

53 

54要为 Code Review 设置每月支出上限,请前往 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage),为 Claude Code Review 服务配置上限。该上限适用于整个组织。

55 

56当以下任一项用尽时,Code Review 会跳过审查:

57 

58* **Code Review 支出上限**:您为 Claude Code Review 服务设置的每月上限。它会在下一个计费周期开始时重置;如果您提高上限,审查会更早恢复。

59* **组织支出上限**:您的组织在使用额度上的整体每月支出上限。可在同一页面提高该上限。

60* **使用额度余额**:您的组织的使用额度余额。可在同一页面添加额度。

61 

62当剩余额度低于一次审查的预期费用时,Code Review 也会跳过审查。审查被跳过时,开发者会看到一条 [PR 评论](/docs/zh-CN/code-review-troubleshooting#review-didn’t-run-and-the-pr-shows-a-budget-message),其中说明原因并链接到用量设置。

63 

64要监控支出,请使用[分析仪表板](#view-usage)。

65 

66<h2 id="view-usage">

67 查看用量

68</h2>

69 

70前往 [claude.ai/analytics/code-review](https://claude.ai/analytics/code-review) 查看整个组织的 Code Review 活动。

71 

72| 部分 | 显示内容 |

73| :- | :- |

74| PRs reviewed | 所选时间范围内每天审查的 Pull Request 数量 |

75| Code Review cost | 本月截至目前的 Code Review 支出 |

76| Feedback | 因开发者解决了问题而被自动标记为已解决的审查评论数量 |

77| Repository breakdown | 每个仓库的已审查 PR 数、已解决评论数和审查运行次数,以及估算费用和按 PR 的视图 |

78 

79仅当选择当前月份时,Code Review cost 卡片才会显示金额。分析中的费用数据可能与您的发票不同。Repository breakdown 中的费用按标价估算,未计入任何折扣或额度,并且仅涵盖 Claude 在 Pull Request 上发布的审查。如需与发票一致的支出数据,请参阅您的 Anthropic 账单。

80 

81<h2 id="related-resources">

82 相关资源

83</h2>

84 

85* [设置 Code Review](/docs/zh-CN/code-review-setup):在每个仓库中选择审查级别以及审查的运行时机

86* [在 Pull Request 上阅读和请求审查](/docs/zh-CN/code-review-pull-requests):评论命令、来自 fork 的 Pull Request,以及审查被跳过时开发者看到的预算消息

87* [Code Review](/docs/zh-CN/code-review):审查检查哪些内容以及发布哪些内容

88* [有效管理费用](/docs/zh-CN/costs):Claude Code 其他部分的支出控制和用量跟踪

code-review-customize.md +149 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 自定义 Code Review

6 

7> 使用 REVIEW.md 和 CLAUDE.md 调整 Code Review 在您的 Pull Request 上标记的内容:重新校准严重程度、跳过路径、添加检查项,并查看适用的是哪个副本。

8 

9您可以通过向仓库提交指令来更改 [Code Review](/docs/zh-CN/code-review) 在该仓库上标记的内容。借此可以减少吹毛求疵类评论的数量、停止对生成文件发表评论,或添加团队关注的规则。请将这些指令放在以下两个文件之一中:

10 

11* **`CLAUDE.md`**:Claude Code 在执行每项任务(包括审查)时都会读取的[项目指令](/docs/zh-CN/memory)。Code Review 将其作为项目上下文读取,并标记违反这些指令的更改。

12* **`REVIEW.md`**:仅用于审查的指令。使用它来说明您的团队希望标记哪些内容、以何种严重程度标记,以及要跳过哪些内容。

13 

14在仓库根目录添加 `REVIEW.md` 并将其合并。然后[保护您的默认分支](#which-branch-review-md-is-read-from)。

15 

16<Note>

17 如需更改审查的详尽程度或运行时机,请让 Owner 更改[审查级别](/docs/zh-CN/code-review-setup#set-the-default-review-level)或 [**Review runs** 设置](/docs/zh-CN/code-review-setup#set-when-reviews-run)。

18</Note>

19 

20<h2 id="use-claude-md-for-project-wide-rules">

21 使用 CLAUDE.md 设置项目范围的规则

22</h2>

23 

24Code Review 将仓库中的 `CLAUDE.md` 文件作为项目上下文读取。违反其中某条规则的更改会成为一项发现,并按照与问题相符的[严重程度级别](/docs/zh-CN/code-review-pull-requests#severity-levels)进行标记。

25 

26审查会读取仓库根目录下的 `CLAUDE.md`,以及每个已更改文件的各级父目录中的 `CLAUDE.md` 文件。当 Pull Request 更改了某个子目录路径下的文件时,会读取该子目录中的 `CLAUDE.md`。

27 

28<h2 id="use-review-md-for-review-only-rules">

29 使用 REVIEW\.md 设置仅用于审查的规则

30</h2>

31 

32`REVIEW.md` 是位于仓库根目录的文件,用于针对您的仓库定制 Code Review。您还可以在子目录中添加 `REVIEW.md`,在根文件的基础上为该路径下的更改添加检查项。

33 

34负责发现问题的 Agent 和负责验证问题的 Agent 会将其内容作为您仓库的审查指令接收,同时接收 Code Review 的默认审查指导。撰写最终审查的步骤会在确定严重程度和撰写摘要之前参考该文件。

35 

36以下示例布局包含一个根文件和一个子目录文件:

37 

38```text theme={null}

39your-repo/

40├── REVIEW.md # Root file

41├── services/

42│ └── billing/

43│ └── REVIEW.md # Adds checks for changes under services/billing/

44└── src/

45```

46 

47在依赖子目录文件之前,请先保护您的默认分支,并查看[针对您的分支设置,审查会读取哪些内容](#what-a-review-reads-for-each-branch-setup)。

48 

49<Note>

50 Code Review 服务和本地 [`/code-review` 命令](/docs/zh-CN/code-review-local)是两个独立的工具,它们读取的文件不同。该服务会同时读取 `CLAUDE.md` 和 `REVIEW.md`。`/code-review` 命令在您自己机器上的 Claude Code 会话中运行,它读取您的 `CLAUDE.md` 文件,但不读取 `REVIEW.md`。请将希望在两处都生效的指导放在 `CLAUDE.md` 中,并将 `REVIEW.md` 留给 Pull Request 审查专用的规则。

51</Note>

52 

53<h3 id="example-review-md">

54 REVIEW\.md 示例

55</h3>

56 

57此 `REVIEW.md` 为一个后端服务重新校准了严重程度、限制了 nit 数量、跳过了生成文件,并添加了仓库特定的检查项。

58 

59```markdown theme={null}

60# Review instructions

61 

62## What Important means here

63 

64Reserve Important for findings that would break behavior, leak data,

65or block a rollback: incorrect logic, unscoped database queries, PII

66in logs or error messages, and migrations that aren't backward

67compatible. Style, naming, and refactoring suggestions are Nit at

68most.

69 

70## Cap the nits

71 

72Report at most five Nits per review.

73 

74## Do not report

75 

76- Anything CI already enforces: lint, formatting, type errors

77- Generated files under `src/gen/` and any `*.lock` file

78- Test-only code that intentionally violates production rules

79 

80## Always check

81 

82- New API routes have an integration test

83- Log lines don't include email addresses, user IDs, or request bodies

84- Database queries are scoped to the caller's tenant

85```

86 

87<h3 id="choose-what-to-write-in-review-md">

88 选择在 REVIEW\.md 中写入的内容

89</h3>

90 

91`REVIEW.md` 是格式自由的 Markdown,用于更改审查发现和报告的内容。它不会改变审查的格式。找到您遇到的问题,然后添加类似所示的指令。[示例](#example-review-md)使用了前四项。

92 

93* **错误的内容被标记为 Important**:为您的仓库重新定义 🔴 Important 的含义。默认校准以生产代码为目标,而文档仓库、配置仓库或原型可能需要更窄的定义。说明哪些类别的发现属于 Important,哪些最多属于 Nit。您也可以提高级别,例如将任何违反 `CLAUDE.md` 的情况视为 Important。

94* **nit 过多**:限制单次审查发布的 🟡 Nit 评论数量。诸如“最多报告五个 nit”之类的上限可以让审查保持可操作性。

95* **对生成文件或 CI 已检查的内容发表评论**:列出 Claude 应跳过发现的路径和发现类别。常见的候选项包括生成的代码、锁文件和 vendored 依赖,以及 CI 已强制执行的任何内容,如 lint 或拼写检查。对于值得一定程度审查但无需全面审视的路径,可改为设置更高的门槛:“在 `scripts/` 中,仅在几乎确定且严重时才报告。”

96* **某条团队规则未被检查**:添加您希望在每个 Pull Request 上标记的规则,例如“新的 API 路由必须有集成测试”。

97* **事后证明有误的发现**:要求某类发现在发布前提供证据。例如,“关于行为的断言需要在源代码中引用 `file:line`,而不是根据命名进行推断”,这可以减少误报,否则作者需要为此额外往返一次。

98 

99其中一些指令[需要根文件位于受保护的默认分支上](#which-branch-review-md-is-read-from)。

100 

101`REVIEW.md` 中只保留会改变审查行为的指令,并将一般项目上下文留在 `CLAUDE.md` 中。

102 

103<h3 id="which-branch-review-md-is-read-from">

104 从哪个分支读取 REVIEW\.md

105</h3>

106 

107Code Review 从 Pull Request 的基础分支或默认分支读取 `REVIEW.md`,从不从 Pull Request 自身的更改中读取。如需更改审查行为,请先合并对 `REVIEW.md` 的更改。

108 

109请将 `REVIEW.md` 保留在默认分支上,并保护该分支。当审查读取受保护默认分支上的副本时(即下表第一行的情况),它会遵循根文件中的以下指令:

110 

111* 降低某项发现的严重程度

112* 排除路径、文件或问题类别

113* 限制 nit 评论数量

114 

115<h4 id="what-counts-as-branch-protection">

116 哪些设置算作分支保护

117</h4>

118 

119Code Review 将以下设置视为保护:

120 

121* **默认分支**:经典分支保护规则或规则集

122* **任何其他分支**:仅限规则集

123 

124当规则集限制更新,或要求 Pull Request 获得至少一次审批时,该规则集才算作保护。如果它要求 Pull Request,则还必须在有新推送时撤销该审批,或要求审批发生在最后一次推送之后。

125 

126<h4 id="what-a-review-reads-for-each-branch-setup">

127 针对每种分支设置,审查会读取哪些内容

128</h4>

129 

130在下表第一列中找到您仓库的情况。

131 

132| 分支保护 | 读取的副本 | 读取的文件 |

133| :- | :- | :- |

134| 默认分支受保护,且 Pull Request 以其为目标,或以未受任何规则集保护的分支为目标 | 默认分支 | 根文件和子目录文件 |

135| Pull Request 以另一个受规则集保护的分支为目标 | 该基础分支 | 根文件和子目录文件 |

136| 默认分支未受保护,且基础分支没有任何一种保护规则 | 默认分支 | 根文件 |

137| Code Review 无法确认保护设置。这包括默认分支未受保护、而基础分支仅有经典规则的情况 | 无 | 无 |

138 

139如果检查运行中提到了 `REVIEW.md`,请参阅[检查运行中提到 REVIEW.md](/docs/zh-CN/code-review-troubleshooting#the-check-run-mentions-review-md)。

140 

141<h2 id="related-resources">

142 相关资源

143</h2>

144 

145* [Code Review](/docs/zh-CN/code-review):该服务是什么以及审查如何运行

146* [在 Pull Request 上阅读和请求审查](/docs/zh-CN/code-review-pull-requests#severity-levels):每个严重程度级别的含义以及发现的呈现方式

147* [设置 Code Review](/docs/zh-CN/code-review-setup):由 Owner 设置的审查级别和审查运行时机

148* [使用 `/code-review` 在本地审查](/docs/zh-CN/code-review-local):`/code-review` 命令、其参数和 effort 级别

149* [记忆](/docs/zh-CN/memory):`CLAUDE.md` 文件在 Claude Code 中的工作方式

code-review-local.md +197 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 使用 /code-review 在本地审查

6 

7> 在 Claude Code 会话中运行 `/code-review`,查找分支变更中的 bug,将审查指向 Pull Request 或路径,并让 Claude 应用修复。

8 

9`/code-review` 是一个在 Claude Code 输入框中输入的命令,在您正在工作的会话中运行。Claude 会审查您分支上的变更,查找正确性 bug,并在对话中报告发现的问题。根据您的模型和 effort 级别,审查还会涵盖复用、简化和效率方面的清理。

10 

11该命令适用于任何套餐。审查在您自己的会话中运行,因此与会话中的其他部分一样,计入您套餐的用量或 API 计费。

12 

13<Note>

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

15</Note>

16 

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

18 

19<Steps>

20 <Step title="运行 /code-review">

21 运行命令:

22 

23 ```text theme={null}

24 /code-review

25 ```

26 

27 不指定目标时,审查涵盖当前分支上的变更。如需将审查指向 Pull Request、其他分支、路径或提交范围,请参阅[选择审查内容](#choose-what-to-review)。

28 

29 您还可以添加标志:

30 

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

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

33 </Step>

34 

35 <Step title="继续工作">

36 审查作为后台[子代理](/docs/zh-CN/sub-agents)运行,拥有自己的上下文窗口,因此不会占满您的对话。审查完成后,发现的问题会出现在您的对话中。

37 </Step>

38 

39 <Step title="处理发现的问题">

40 让 Claude 修复审查发现的问题。使用 `--fix` 或 `--comment` 时,Claude 会在审查过程中应用或发布发现的问题,系统可能会请您批准其编辑。

41 </Step>

42</Steps>

43 

44<h2 id="choose-what-to-review">

45 选择审查内容

46</h2>

47 

48如需审查当前分支以外的内容,请在 effort 级别和任何标志之后输入目标。Claude 会将该文本作为审查目标接收。目标可以是 Pull Request 编号、分支名称、文件路径或 Git 修订范围。在第一列中找到您要审查的内容,然后输入第二列所示的内容:

49 

50| 审查目标 | 输入 |

51| :- | :- |

52| 当前分支和未提交的变更 | `/code-review` |

53| 最近 15 个提交 | `/code-review HEAD~15..HEAD` |

54| 一个分支相对于另一个分支 | `/code-review main...my-feature` |

55| 单个提交,其中 `abc1234` 是该提交的哈希值 | `/code-review abc1234^..abc1234` |

56| 按编号指定的 Pull Request | `/code-review 1234` |

57| 文件或目录路径 | `/code-review src/auth` |

58 

59不指定目标时,`/code-review` 会审查您的分支领先于其上游分支的提交以及未提交的变更。如果分支没有上游,Claude 会与 `main` 或上一个提交进行比较。

60 

61使用 `ultra` 时,Claude Code 会以不同方式解读目标,详见 [effort 级别和标志之后的文本](#text-after-the-effort-level-and-flags)。

62 

63<h2 id="what-the-review-reads-and-edits">

64 审查读取和编辑的内容

65</h2>

66 

67在运行审查之前,尤其是使用 `--fix` 时,请检查以下内容:

68 

69* **编辑**:不使用 `--fix` 时,审查的指令仅要求 Claude 提供报告。使用 `--fix` 时,还会要求它将发现的问题修复应用到您的工作树。无论哪种情况,任何编辑都会经过您的权限模式。

70* **回退**:后台审查在会话的[检查点](/docs/zh-CN/checkpointing#subagent-edits-not-restored)之外应用其 `--fix` 编辑。在此之后,`/rewind` 只会恢复 Claude 此前已在您的对话中编辑过的文件。审查对其他文件的编辑会保留,因此请使用 git 撤销这些编辑。当审查[在前台运行](#run-in-the-foreground)时,它会在您自己的轮次中编辑工作树,因此 `/rewind` 会照常恢复其编辑。

71* **指令**:审查会遵循您的 `CLAUDE.md`,包括在非交互的 `-p` 运行中。它不会读取 `REVIEW.md`。该文件用于配置 GitHub Pull Request 上的托管 [Code Review 服务](/docs/zh-CN/code-review-customize#use-review-md-for-review-only-rules)。

72 

73<h2 id="how-findings-are-reported">

74 如何报告发现的问题

75</h2>

76 

77在以下两种运行中,Claude 都会在回复中以文本形式报告发现的问题:

78 

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

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

81 

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

83 

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

85 

86<h2 id="tune-effort-and-arguments">

87 调整 effort 和参数

88</h2>

89 

90除了 `--fix` 和 `--comment` 之外,该命令还接受以下标志:

91 

92* `--post`:在对 `github.com` Pull Request 进行 `ultra` 云端审查时,在启动对话框中预先选择将最终发现的问题发布到 PR。请参阅[将发现的问题发布到 Pull Request](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request)。需要 Claude Code v2.1.227 或更高版本。

93* `--max-findings <n>`、`--max-findings all` 或 `--max-findings default`:最多报告 `n` 个发现的问题,或使用 `all` 报告所有发现的问题,以替代审查的常规上限。当审查通过发现工具报告时,上限为 32。之后的审查会沿用您输入的值,直到您传入 `--max-findings default`,但在非交互的 `-p` 运行中传入的值不会被记住。需要 Claude Code v2.1.288 或更高版本。

94 

95传入 [effort 级别](/docs/zh-CN/model-config#adjust-effort-level)以在覆盖范围和置信度之间进行权衡。在 `low` 级别,审查会报告它最有把握的问题,因此您看到的误报更少。从 `medium` 到 `max`,审查会扩大覆盖范围。

96 

97如果您不输入级别,审查会沿用您上次输入的 `low` 到 `max` 之间的级别,即使是在之前的会话中输入的。Claude Code 会显示类似 `Reusing high effort, the level you typed last time` 的提示。以下规则决定一次运行使用哪个级别:

98 

99* **输入级别**:您输入的级别(如 `/code-review high`)会改变之后运行所沿用的级别

100* **非交互运行**:在非交互的 `-p` 运行中传入的级别不会更新记住的级别

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

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

103 

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

105 

106<h3 id="post-findings-to-a-gitlab-merge-request">

107 将发现的问题发布到 GitLab 合并请求

108</h3>

109 

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

111 

112请以 URL 或 `!123` 引用的形式传入合并请求。仅当检出的 origin 位于 `gitlab.com` 上时,Claude Code 才会将单独的数字或分支名称视为合并请求。在自托管的 GitLab 实例上,请传入 URL 或 `!123` 形式。

113 

114<h3 id="text-after-the-effort-level-and-flags">

115 effort 级别和标志之后的文本

116</h3>

117 

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

119 

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

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

122 

123<h2 id="run-in-the-foreground">

124 在前台运行

125</h2>

126 

127如需让审查在前台运行,请执行以下操作之一:

128 

129* 在非交互模式下运行,使用 `-p` 标志或 Agent SDK。Claude Code 会等待审查完成,并在响应中包含发现的问题,但 `ultra` 除外,它[不会等待云端审查](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively)。

130* 将 [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/zh-CN/env-vars) 设置为 `1`,这也会关闭所有其他后台任务功能

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

132 

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

134 

135<h2 id="let-claude-start-the-review">

136 让 Claude 启动审查

137</h2>

138 

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

140 

141* **当您用自然语言提出请求时**:请 Claude 审查您的变更,它就可以运行该 skill

142* **通过定时任务**:以 `/code-review` 作为提示词的[定时任务](/docs/zh-CN/scheduled-tasks)会运行审查

143 

144定时任务永远不会启动[云端审查](#escalate-to-ultrareview),因此请在不带 `ultra` 参数的情况下安排 `/code-review`。

145 

146如需阻止 Claude 和定时任务启动审查,同时保留 `/code-review` 供您手动输入,请在[设置文件](/docs/zh-CN/settings#where-settings-live)(例如 `~/.claude/settings.json`)中添加 [`skillOverrides`](/docs/zh-CN/skills#override-skill-visibility-from-settings) 条目:

147 

148```json theme={null}

149{

150 "skillOverrides": {

151 "code-review": "user-invocable-only"

152 }

153}

154```

155 

156在 v2.1.246 之前,只有在从 Anthropic 获取的功能标志启用了该功能时,Claude 才会自行启动 `/code-review`。在[不获取功能标志的会话](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)中,`/code-review` 仅在您输入时运行,而定时的 `/code-review` 会作为纯文本发送给 Claude。

157 

158<h2 id="escalate-to-ultrareview">

159 升级到 ultrareview

160</h2>

161 

162`/code-review ultra --fix` 会在云端运行更深入的 [ultrareview](/docs/zh-CN/ultrareview),然后在发现的问题返回到您的会话时,要求 Claude 将其修复应用到您的工作树。

163 

164Ultrareview 使用自己的范围:

165 

166* **比较内容**:您的当前分支与仓库默认分支的对比,以及工作树中未提交和已暂存的变更

167* **敏感文件**:对于名称类似凭据或密钥的文件(例如 `.env` 和 `*.tfvars` 文件)的未提交变更,Claude Code 会遵循[将本地仓库上传到云端会话](/docs/zh-CN/claude-code-on-the-web#send-local-repositories-without-github)的规则

168* **不同的基础分支**:传入分支名称(例如 `/code-review ultra develop`)以与不同的基础分支进行比较

169 

170当目标是 `github.com` Pull Request 时,您可以让 Claude 以您的 GitHub 账户身份[将最终发现的问题作为评论发布到 PR](/docs/zh-CN/ultrareview#post-findings-to-the-pull-request)。需要 Claude Code v2.1.227 或更高版本。

171 

172<Note>

173 Ultrareview 需要使用 claude.ai 账户进行身份验证。它不适用于 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry,也不适用于启用了零数据保留或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织。在这些情况下,`/code-review ultra` 会改为在您的会话中运行本地审查。使用[客户管理的加密密钥](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)的组织无法运行 ultrareview。如需在本地审查您的变更,请运行 `/code-review`。

174</Note>

175 

176如需从脚本或 CI 作业运行云端审查,请使用 [`claude ultrareview` 子命令](/docs/zh-CN/ultrareview#run-ultrareview-non-interactively),它会等待发现的问题并将其打印到 stdout。

177 

178<h2 id="change-or-build-on-the-review">

179 修改或基于审查进行构建

180</h2>

181 

182`/code-review` 是一个[随附 skill](/docs/zh-CN/skills#bundled-skills):其指令内置于 Claude Code 中,因此磁盘上没有可打开或编辑的 `SKILL.md` 文件。如需为每次审查提供需遵循的项目规则,请将其添加到您的 `CLAUDE.md` 中。如需更进一步,请从以下页面之一开始:

183 

184* **替换命令**:名为 `code-review` 的项目或个人 skill 会替代随附的 skill 运行,而 `/review` 别名仍会运行随附的审查。请参阅[解决同名 skill 的冲突](/docs/zh-CN/skills#resolve-skills-that-share-a-name)。

185* **构建您自己的审查器**:编写一个审查[子代理](/docs/zh-CN/sub-agents)或审查 [skill](/docs/zh-CN/skills)

186* **使用相邻命令**:[`/simplify`](/docs/zh-CN/commands) 仅审查清理方面的问题并应用其修复,[`/verify`](/docs/zh-CN/commands) 会运行您的应用以确认变更有效

187 

188在 v2.1.147 之前,该命令名为 `/simplify`,当时它默认会应用修复。如果您曾编写脚本使用 `/simplify` 查找 bug,请改用 `/code-review --fix`。

189 

190<h2 id="related-resources">

191 相关资源

192</h2>

193 

194* [Code Review](/docs/zh-CN/code-review):为您的组织审查 GitHub 上每个 Pull Request 的托管服务

195* [Ultrareview](/docs/zh-CN/ultrareview):更深入的云端审查的设置、限制和费用

196* [命令](/docs/zh-CN/commands):`/code-review`、`/review`、`/simplify` 和 `/verify` 的单行参考

197* [Skills](/docs/zh-CN/skills):随附 skill 的工作原理以及如何编写您自己的 skill

code-review-pull-requests.md +169 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 阅读和请求 Pull Request 上的审查

6 

7> 阅读 GitHub Pull Request 上的 Code Review 发现,回复或忽略这些发现,并使用 `@claude review` 请求审查。

8 

9Code Review 是一项托管服务,由您的 Claude 组织中的 Owner 为一组 GitHub 仓库启用。启用后,Claude 会审查这些仓库中的 Pull Request,并将其发现以内联评论、审查正文中的摘要以及名为 **Claude Code Review** 的检查运行的形式发布。审查永远不会批准或阻止您的 Pull Request,检查运行也永远不会以失败结束。

10 

11Owner 可以为每个仓库控制[审查何时运行](/docs/zh-CN/code-review-setup#set-when-reviews-run)以及[审查的详尽程度](/docs/zh-CN/code-review-setup#set-the-default-review-level)。

12 

13<Note>

14 如果您的套餐不包含 Code Review,您仍然可以在 Claude Code 会话中让 Claude 审查您的分支:请参阅[使用 `/code-review` 在本地审查](/docs/zh-CN/code-review-local)。

15</Note>

16 

17<h2 id="severity-levels">

18 严重程度级别

19</h2>

20 

21Claude 将每个发现作为内联评论发布在相关代码行上,并用以下三种严重程度级别之一进行标记:

22 

23| 标记 | 严重程度 | 含义 |

24| :- | :- | :- |

25| 🔴 | Important | 应在合并前修复的 bug |

26| 🟡 | Nit | 小问题,值得修复但不阻塞合并 |

27| 🟣 | Pre-existing | 代码库中已存在、但并非由此 PR 引入的 bug |

28 

29如果审查记录了其推理过程,该发现会带有一个折叠的 **Why this was flagged** 部分。展开它即可了解 Claude 为何标记该问题以及如何验证该问题。

30 

31要更改 Claude 在您的仓库中标记的内容或其对严重程度的判定方式,请参阅[自定义 Code Review](/docs/zh-CN/code-review-customize)。

32 

33<h2 id="respond-to-findings">

34 回应发现

35</h2>

36 

37除非您的仓库自身规则有要求,否则您无需回应发现即可合并。如果仓库的分支保护[要求解决对话](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-conversation-resolution-before-merging),请在合并前解决每个发现的讨论串。

38 

39要清除某个发现,请解决其讨论串或推送修复。

40 

41* **不修改代码直接忽略**:在 GitHub 上自行解决该讨论串。仅回复并不会忽略发现。

42* **修复问题**:修改代码并推送。当下一次对该 Pull Request 的审查判断问题已修复时,会解决之前的讨论串,无论该审查是在您推送时自动运行还是由您请求的。

43* **解释或提出异议**:回复该评论。Claude 不会立即回复,回复也不会启动审查。下一次对该 Pull Request 的审查会读取对其之前发现的回复,并可以解决该讨论串或发布一条后续回复。如果同类发现反复出现,请让维护者在 [`REVIEW.md`](/docs/zh-CN/code-review-customize#choose-what-to-write-in-review-md) 中添加规则。

44 

45要在不推送的情况下获得下一次审查,请以[顶层 Pull Request 评论](#comment-commands)的形式发表 `@claude review`。

46 

47<h2 id="check-run-output">

48 检查运行输出

49</h2>

50 

51**Claude Code Review** 检查运行上的 **Details** 链接会在一个按严重程度排序的表格中打开所有发现,包括 GitHub 未接受其行内评论的发现:

52 

53| 严重程度 | 文件:行 | 问题 |

54| - | - | - |

55| 🔴 Important | `src/auth/session.ts:142` | token 刷新与登出之间存在竞争条件,导致本应失效的陈旧会话仍保持活动状态 |

56| 🟡 Nit | `src/auth/session.ts:88` | `parseExpiry` 在输入格式错误时静默返回 0 |

57 

58对于有对应行号但未作为行内评论发布的发现,会以注释的形式显示在 **Files changed** 标签页中的相关行上。Important 发现显示为红色,nit 显示为黄色,已存在的 bug 显示为灰色。

59 

60检查运行的结论为 neutral;如果因推送未更改任何文件而未运行自动审查,则结论为 skipped。它的结论永远不会是 failure,因此已完成的审查不会导致必需检查失败。如果您没有看到发现,或者审查未运行,请参阅[排查 Code Review 问题](/docs/zh-CN/code-review-troubleshooting)。

61 

62<h3 id="read-the-result-from-a-script">

63 通过脚本读取结果

64</h3>

65 

66要在您自己的 CI 中控制合并或发布摘要,请使用 `gh` 和 jq 解析 Details 文本的最后一行。该行是一条机器可读的注释。

67 

68<Steps>

69 <Step title="查找检查运行 ID">

70 在您的 shell 中,列出该提交的检查运行,并获取 `Claude Code Review` 运行的 `id`。将 `OWNER` 和 `REPO` 替换为您的仓库所有者和名称,将 `<commit-sha>` 替换为 Pull Request 的头部提交:

71 

72 ```bash theme={null}

73 gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'

74 ```

75 </Step>

76 

77 <Step title="读取严重程度计数">

78 从该检查运行中读取计数,将 `CHECK_RUN_ID` 替换为该 ID:

79 

80 ```bash theme={null}

81 gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \

82 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'

83 ```

84 

85 这会输出一个 JSON 对象,其中包含每种严重程度的计数,键按字母顺序排列,例如 `{"nit": 1, "normal": 2, "pre_existing": 0}`。计数包括该 Pull Request 早期审查中讨论串仍处于打开状态的发现。

86 </Step>

87 

88 <Step title="根据结果采取行动">

89 让您的脚本处理以下情况:

90 

91 * **`normal` 大于零**:如果您希望控制合并,请让作业失败。`normal` 键保存的是 Important 发现的数量,这意味着 Claude 至少发现了一个值得在合并前修复的 bug。

92 * **该行缺失**:将其视为没有结论,而不是零个发现。对于失败、超时、被取消或被更新审查取代的审查,其检查运行中没有此行,某些已完成的审查也没有此行。

93 </Step>

94</Steps>

95 

96<h2 id="request-a-review">

97 请求审查

98</h2>

99 

100如果您的 Pull Request 是草稿或来自 fork,自动审查会跳过它,因此请[使用评论命令请求审查](#review-drafts-and-pull-requests-from-forks)。要让您的 Pull Request 获得审查,请执行以下操作之一:

101 

102* **打开或标记为就绪**:在设置为 **Once after PR creation** 或 **After every push** 的仓库中,当您打开或重新打开 Pull Request,或将草稿标记为可供审查时,会启动审查。

103* **发表命令评论**:在 Pull Request 上发布 [`@claude review`](#comment-commands)。

104* **推送提交**:在设置为 **After every push** 的仓库中,或在您使用 `@claude review always` 订阅的 Pull Request 上,推送会启动审查。

105* **点击 Re-run**:在非 fork 的 Pull Request 上审查失败或超时后,从检查运行中[再次运行](/docs/zh-CN/code-review-troubleshooting#retrigger-a-failed-or-timed-out-review)。

106* **等待自动重试**:会话中断的审查会自动重试一次。[检查运行的摘要](/docs/zh-CN/code-review-troubleshooting#retrigger-a-failed-or-timed-out-review)会显示何时正在进行重试。

107 

108<h3 id="comment-commands">

109 评论命令

110</h3>

111 

112在 Pull Request 上以评论形式发布以下命令之一:

113 

114| 命令 | 作用 | 使用时机 |

115| :- | :- | :- |

116| `@claude review` | 启动一次审查,但不为 PR 订阅后续推送 | 您现在需要一次审查,例如在设置为 Manual 的仓库中的 Pull Request 上,或在其他模式下立即再进行一次审查 |

117| `@claude review always` | 启动审查,并为 PR 订阅此后由推送触发的审查 | 您希望之后的每次推送都启动新的审查,例如在设置为 Manual 的仓库中的高优先级 PR 上 |

118| `@claude review once` | 与 `@claude review` 相同:启动一次审查而不订阅 | 与 `@claude review` 的情况相同 |

119 

120要让这些命令中的任何一个启动审查,必须满足以下所有条件:

121 

122* 将其作为新的顶层 Pull Request 评论发布,而不是 diff 行上的内联评论,也不是审查的正文。编辑之前的评论不算数。

123* 将命令放在评论开头,并且 `always` 需与命令的其余部分位于同一行。大小写无关紧要。

124* 您需要拥有该仓库的 write、maintain 或 admin 权限。Claude 会向 GitHub 核实每位评论者的权限,来自 bot 的评论不会启动审查。

125* Pull Request 必须处于打开状态。

126 

127命令被接受后,Pull Request 上会出现一个标题为 **Code review queued...** 的 **Claude Code Review** 检查运行。审查开始时,标题会变为 **Code review in progress...**。Claude 也可能会用 👀 回应您的评论,但即使没有启动审查,该回应也可能出现,因此请以检查运行为准。

128 

129如果 Pull Request 的最新提交上已有审查正在运行,新的请求不会启动第二次审查。

130 

131<Note>

132 在 2026 年 7 月的更新之前,`@claude review` 会为 PR 订阅由推送触发的审查。如果您依赖该行为,请改为评论 `@claude review always`。

133</Note>

134 

135<h3 id="what-a-later-review-covers">

136 后续审查涵盖的内容

137</h3>

138 

139自行启动的后续审查(例如推送后)会侧重于自上次审查以来的更改,并发布较少的 nit 和已存在问题的发现。其摘要会统计被省略的内容,相应行以 "found and not posted" 或 "outside the scope of this re-review and not posted." 结尾。

140 

141要获得不省略任何这些内容的审查,请评论 [`@claude review`](#comment-commands)。它会再次涵盖整个 Pull Request。

142 

143<h3 id="review-drafts-and-pull-requests-from-forks">

144 审查草稿和来自 fork 的 Pull Request

145</h3>

146 

147自动审查会跳过这两种情况,因此请使用评论命令请求审查:

148 

149* **草稿 Pull Request**:评论命令可以在草稿上运行,因此您可以在将 Pull Request 标记为就绪之前请求审查。即使使用了 `@claude review always`,推送到草稿也不会启动审查。订阅会在您将 Pull Request 标记为就绪后生效。

150* **来自 fork 的 Pull Request**:无论仓库的 **Review runs** 设置如何,Claude 都不会自动审查来自 fork 的 Pull Request。要启动审查,请在 Pull Request 上评论 `@claude review`。[评论命令的条件](#comment-commands)仍然适用,并且您需要的是对基础仓库而非 fork 的写入权限。

151 

152在来自 fork 的 Pull Request 上,`@claude review always` 同样有效,但不会为该 Pull Request 订阅后续推送的审查。在那里点击检查运行上的 **Re-run** 不会启动审查。

153 

154<h3 id="use-code-review-alongside-the-claude-code-github-action">

155 将 Code Review 与 Claude Code GitHub Action 一起使用

156</h3>

157 

158如果仓库还以交互模式运行 [Claude Code GitHub Action](/docs/zh-CN/github-actions),并使用其默认的 `@claude` 触发短语,那么 `@claude review` 评论也会启动该 Action。要将两者区分开,请将该 Action 的 `trigger_phrase` 输入设置为其他短语。

159 

160<h2 id="related-resources">

161 相关资源

162</h2>

163 

164* [Code Review 故障排除](/docs/zh-CN/code-review-troubleshooting):未启动、失败或因预算而被跳过的审查

165* [Code Review](/docs/zh-CN/code-review):该服务是什么以及审查如何运行

166* [设置 Code Review](/docs/zh-CN/code-review-setup):供 Owner 使用,启用 Code Review 并选择审查的运行时机和级别

167* [自定义 Code Review](/docs/zh-CN/code-review-customize):使用 `REVIEW.md` 和 `CLAUDE.md` 更改 Claude 标记的内容

168* [Code Review 费用和用量](/docs/zh-CN/code-review-costs):审查如何计费以及在何处设置支出限额

169* [使用 `/code-review` 在本地审查](/docs/zh-CN/code-review-local):从 Claude Code 会话中对您的分支运行审查

code-review-setup.md +189 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 设置 Code Review

6 

7> 为您的 Claude 组织启用 Code Review:连接 GitHub、安装 Claude GitHub App、选择仓库,并设置审查的运行时机

8 

9作为 Claude 组织的 Owner,您可以在 claude.ai 上的 [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) 中启用 Code Review。审查在 Anthropic 基础设施上运行,因此无需向仓库中添加工作流文件。

10 

11设置完成后,您可以为每个仓库选择审查的细致程度及运行时机。审查级别越高、审查运行越频繁,花费就越多。请参阅 [Code Review 费用](/docs/zh-CN/code-review-costs#pricing)。

12 

13<h2 id="what-you-need-to-turn-on-code-review">

14 启用 Code Review 所需的条件

15</h2>

16 

17首先确认您的组织[符合 Code Review 的使用条件](/docs/zh-CN/code-review#availability)。然后确保您拥有以下访问权限,或有拥有这些权限的人员协助:

18 

19| 访问权限 | 用途 |

20| :- | :- |

21| Claude 组织中的 [Owner 角色](/docs/zh-CN/server-managed-settings#access-control) | 管理页面上的每个步骤 |

22| GitHub 组织的所有者 | 安装 Claude GitHub App 并[将其关联到您的 Claude 组织](/docs/zh-CN/admin-setup#connected-github-accounts)。如果您不是所有者,请在开始前让一位所有者安装并关联该应用 |

23| 从您连接到 Claude 的 GitHub 账户对要添加的每个仓库拥有写入权限 | 添加仓库 |

24 

25<h2 id="turn-on-code-review">

26 启用 Code Review

27</h2>

28 

29<Steps>

30 <Step title="点击 Allow code review 开关">

31 前往 [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) 的 **Code review** 部分,点击 **Allow code review** 开关。

32 

33 如果 Code Review 立即启用且没有弹出对话框,说明您的组织已经关联了 Claude GitHub App 或已添加了仓库。请前往[添加更多仓库](#add-more-repositories),然后再返回完成最后一步。

34 </Step>

35 

36 <Step title="连接您的 GitHub 账户">

37 如果打开了 **Connect GitHub** 对话框,请点击 **Connect**。如果您的组织使用 GitHub Enterprise Server,请先在对话框中选择您的实例。GitHub 会要求您授权 Claude,然后将您带回管理页面,并打开 **Add a repository** 对话框。

38 

39 如果直接打开了 **Add a repository**,说明您的账户已经连接,请继续下一步。

40 </Step>

41 

42 <Step title="安装 Claude GitHub App">

43 如果所需的仓库已列在 **Add a repository** 对话框中,或者您可以在其中搜索到它们,请继续下一步。只有 Claude GitHub App 能够访问的仓库才会出现在该对话框中,因此如果找不到这些仓库,请安装该应用:

44 

45 * 点击 **Install GitHub App**。当没有列出任何仓库时,它是对话框中的一个按钮;否则,它位于对话框中 GitHub 组织筛选菜单的底部。GitHub 的安装页面会在新标签页中打开。

46 * 选择拥有这些仓库的 GitHub 组织。

47 * 选择该应用可以访问的仓库。

48 * 批准所请求的权限。这组权限比审查实际使用的范围更广,并由其他 Claude 功能共享,例如 [GitHub Actions](/docs/zh-CN/github-actions)。请参阅[审查可以访问的内容](/docs/zh-CN/code-review#what-a-review-can-access)以及[完整权限列表](/docs/zh-CN/github-actions#github-app-permissions)。

49 * 安装完成后,该标签页会返回 Claude。如果显示 **Finish connecting GitHub** 按钮,请点击它,将此次安装关联到您的 Claude 组织。

50 * 返回管理页面所在的标签页,对话框中的列表会随之刷新。

51 </Step>

52 

53 <Step title="选择仓库">

54 选择需要审查的仓库,然后点击 **Continue**。添加仓库需要您连接的 GitHub 账户对该仓库拥有写入权限。您可以稍后[添加更多仓库](#add-more-repositories)。

55 </Step>

56 

57 <Step title="点击 Finish">

58 随后会出现 **Code review is set up** 对话框。点击 **Finish** 以启用 Code Review。如果您以其他方式关闭该对话框,仓库仍会保持已添加状态,但 **Allow code review** 会保持关闭,您需要通过该开关将其启用。

59 

60 每个仓库初始设置为每次推送后都进行审查,这会运行最多的审查。如需减少审查次数,请[设置审查的运行时机](#set-when-reviews-run)。

61 </Step>

62 

63 <Step title="通过测试 Pull Request 进行验证">

64 在您添加的某个仓库中打开一个测试 Pull Request,且不要将其标为草稿。几分钟内会出现一个名为 **Claude Code Review** 的检查运行。如果您已将该仓库设置为 **Manual (@claude review)**,请在 Pull Request 上评论 `@claude review` 以启动首次审查。

65 

66 如果没有出现检查运行,请参阅[测试 Pull Request 上没有出现检查运行](/docs/zh-CN/code-review-troubleshooting#no-check-run-appears-on-the-test-pull-request)。

67 

68 审查结果出现后,请将[在 Pull Request 上阅读和请求审查](/docs/zh-CN/code-review-pull-requests)发送给您的开发人员,其中介绍了严重级别、评论命令以及如何处理审查发现的问题。

69 </Step>

70</Steps>

71 

72<h2 id="set-defaults-for-your-organization">

73 为组织设置默认值

74</h2>

75 

76作为 Owner,您可以决定审查的细致程度和运行频率。这两项都位于 [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) 的 **Code review** 部分。

77 

78<h3 id="set-the-default-review-level">

79 设置默认审查级别

80</h3>

81 

82审查级别决定每次审查的细致程度,审查越细致,费用越高。您可以为组织设置一个默认值,并为单个仓库覆盖该值。

83 

84| 级别 | 权衡取舍 |

85| :- | :- |

86| Quick | 较轻量的检查。速度最快,费用最低 |

87| Standard | 在深度、速度和费用之间取得平衡。默认级别 |

88| Deep | 最细致的检查。耗时最长,费用最高 |

89 

90* **组织默认值**:在 **Review level** 下选择一个级别,然后点击 **Change level** 确认。除非为某个仓库单独设置级别,否则所有仓库都使用该默认值。

91* **单个仓库**:点击该仓库所在行的 **Edit**,然后在其中选择 **Review level**。第一个选项 **Default** 遵循组织设置。选择后级别会立即保存。

92 

93新级别适用于更改之后开始的审查。有关影响每次审查费用的其他因素,请参阅 [Code Review 费用和用量](/docs/zh-CN/code-review-costs)。

94 

95<h3 id="set-when-reviews-run">

96 设置审查的运行时机

97</h3>

98 

99每个仓库都有各自的 **Review runs** 设置,用于决定何时审查该仓库的 Pull Request。

100 

101* **Once after PR creation**:在 Pull Request 被打开、重新打开或标记为可供审查时运行一次审查

102* **After every push**:在向 Pull Request 分支推送时运行审查,随着 Pull Request 的演进捕获新问题,并在您修复所指出的问题后自动解决相应讨论串

103* **Manual (@claude review)**:打开 Pull Request 或向其推送不会启动审查。评论 [`@claude review`](/docs/zh-CN/code-review-pull-requests#comment-commands) 以请求审查,或评论 `@claude review always` 以同时让该 Pull Request 在后续推送时也接受审查。

104 

105对于流量较大的仓库,如果您希望只让特定的 Pull Request 接受审查,或仅在 Pull Request 准备就绪后才开始审查,Manual 会很有用。要比较每个选项对花费的影响,请参阅[审查的运行频率](/docs/zh-CN/code-review-costs#how-often-reviews-run)。

106 

107要更改此设置,请点击 **Repositories** 表中该仓库所在行的 **Edit**,然后选择一个 **Review runs** 选项。选择后会立即保存,表中的 **Review runs** 列会以缩写形式显示为 Once per PR、Every push 或 Manual。

108 

109* **草稿以及来自复刻的 Pull Request**:无论您选择哪个选项,[自动审查都会跳过这两类](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks)

110* **新仓库**:从 **Add a repository** 对话框添加的仓库初始设置为 **After every push**。如果其所属 GitHub 组织已[整体覆盖](#cover-a-whole-github-organization),则改为采用该组织行的设置。

111 

112<h3 id="turn-tip-comments-on-or-off">

113 开启或关闭提示评论

114</h3>

115 

116提示评论是在未启动审查时 Claude 在 Pull Request 上发布的简短评论,用于说明原因以及下一步该怎么做。**Show tips on pull requests** 默认开启。开启后,Claude 会在以下每种情况下发布提示,说明:

117 

118* **仓库设置为 Manual**:如何通过评论请求审查

119* **Pull Request 来自复刻**:维护者可以请求审查

120* **机器人或没有写入权限的人评论了 `@claude review`**:未启动审查,以及谁可以请求审查

121* **GitHub 组织未关联到您的 Claude 组织**:审查已暂停,以及如何进行关联

122 

123关闭此设置即可停止发布这些评论。

124 

125<h3 id="what-developers-can-change">

126 开发人员可以更改的内容

127</h3>

128 

129开发人员如需更改审查级别、**Review runs** 设置或接受审查的仓库,需要联系您。在没有 Owner 角色的情况下,他们可以在 GitHub 上执行以下操作:

130 

131* **请求审查**:在 Pull Request 上评论 [`@claude review`](/docs/zh-CN/code-review-pull-requests#comment-commands)。这需要对仓库拥有写入权限,并且适用于自动审查会跳过的[草稿以及来自复刻的 Pull Request](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks)。

132* **让单个 Pull Request 在每次推送时接受审查**:在非[草稿或非复刻来源](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks)的 Pull Request 上评论 `@claude review always`,例如在设置为 Manual 的仓库中

133* **更改审查所指出的内容**:向仓库提交 [`REVIEW.md` 和 `CLAUDE.md` 文件](/docs/zh-CN/code-review-customize),例如添加一项检查

134 

135开发人员请求的审查会[计费到您的组织](/docs/zh-CN/code-review-costs#pricing)。要限制 Code Review 每月的花费,请参阅[限制您的花费](/docs/zh-CN/code-review-costs#limit-your-spend)。

136 

137<h2 id="manage-repositories">

138 管理仓库

139</h2>

140 

141您可以逐个添加仓库,也可以一次性覆盖整个 GitHub 组织,并在不需要的地方停止审查。

142 

143<h3 id="add-more-repositories">

144 添加更多仓库

145</h3>

146 

147要在设置完成后添加仓库,请点击 **Code review** 部分中 **Repositories** 表上方的 **Add**。**Add a repository** 对话框随即打开。选择仓库并点击 **Continue**。

148 

149* **某个仓库未列出**:请参阅[某个仓库未在 Add a repository 中列出](/docs/zh-CN/code-review-troubleshooting#a-repository-isn’t-listed-in-add-a-repository)。

150* **您希望包含某个 GitHub 组织中的所有仓库**:请[覆盖整个组织](#cover-a-whole-github-organization),而不是逐个选择仓库

151 

152<h3 id="cover-a-whole-github-organization">

153 覆盖整个 GitHub 组织

154</h3>

155 

156要为某个 GitHub 组织中的所有仓库启用 Code Review,请在 **Repositories** 表中该组织所在行设置 **Review runs**。这会覆盖该组织中 Claude GitHub App 可以访问的所有仓库,包括之后添加的仓库。这可能会显著增加花费。需要同时满足以下所有条件:

157 

158* 您连接到 Claude 的 GitHub 账户是该 GitHub 组织的所有者。

159* 该组织位于 github.com 上。GitHub Enterprise Server 实例和个人 GitHub 账户不符合条件。

160* 已为您的 Claude 组织或 Code Review 设置了[每月花费上限](/docs/zh-CN/code-review-costs#limit-your-spend)。

161 

162要覆盖该组织,请点击其所在行的 **Edit**,选择一个 **Review runs** 选项并确认。可选项为[设置审查的运行时机](#set-when-reviews-run)中的三个选项,外加 **Off**。

163 

164确认后,以下更改将生效:

165 

166* **覆盖范围**:每个仓库从下一个 Pull Request 开始被覆盖。如果 Claude GitHub App 安装时只选择了部分仓库而非全部仓库,Claude 会审查这些仓库;要覆盖其余仓库,请在 GitHub 上更改该应用的仓库访问权限。

167* **现有设置**:该 GitHub 组织中的每个仓库都会采用您选择的选项,包括您单独设置过的仓库。再次设置该行也会产生相同效果。在各自行中被关闭的仓库会保持关闭。

168* **之后的单独更改**:之后设置得与其所属组织不同的仓库,会在表中标注为 **Custom**。

169* **审查级别**:组织行本身没有审查级别。

170 

171<h3 id="turn-off-code-review-or-remove-a-repository">

172 关闭 Code Review 或移除仓库

173</h3>

174 

175在 [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) 的 **Code review** 部分,根据您要停止的内容选择相应的控件:

176 

177* **单个仓库,保留在列表中**:点击其所在行的 **Edit**,然后关闭 **Code review**。表中会将该仓库显示为 Off。

178* **单个仓库,将其移除**:点击其所在行的 **Edit**,然后点击对话框底部的 **Remove repository**。该仓库的审查将停止,之后其他 Claude 组织就可以设置该仓库。当该仓库所属的 GitHub 组织被整体覆盖时,无法将其移除;请改为关闭其 **Code review** 开关。

179* **整个 GitHub 组织**:点击该组织所在行的 **Edit**,然后选择 **Off**。这也会关闭该组织中您逐个添加的仓库。

180* **全部**:关闭 **Allow code review**。所有仓库都不会再启动新的审查,您的仓库列表会被保留,以便日后重新启用。

181 

182<h2 id="related-resources">

183 相关资源

184</h2>

185 

186* [Code Review 费用和用量](/docs/zh-CN/code-review-costs):审查级别和审查运行时机如何影响花费、如何设置花费上限,以及在哪里查看用量

187* [在 Pull Request 上阅读和请求审查](/docs/zh-CN/code-review-pull-requests):开发人员在 Pull Request 上看到的内容以及评论命令

188* [自定义 Code Review](/docs/zh-CN/code-review-customize):使用 `REVIEW.md` 和 `CLAUDE.md` 调整 Claude 指出的内容

189* [GitHub Enterprise Server](/docs/zh-CN/github-enterprise-server):在设置前连接自托管的 GitHub 实例

code-review-troubleshooting.md +113 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Code Review 故障排除

6 

7> 修复未启动、失败或因预算原因被跳过的 Code Review,查找缺失的发现项,并解决设置和 `REVIEW.md` 问题。

8 

9当 [Code Review](/docs/zh-CN/code-review) 在 Pull Request 上的表现不符合预期时,请先查看 **Claude Code Review** 检查运行。它的标题会说明审查进行到了哪一步。

10 

11<h2 id="check-how-far-the-review-got">

12 查看审查进行到了哪一步

13</h2>

14 

15在您的 Pull Request 上找到 **Claude Code Review** 检查运行,然后将其标题与以下常见标题之一进行对照:

16 

17| 检查运行标题 | 含义 | 处理方法 |

18| :- | :- | :- |

19| **Code review queued...** 或 **Code review in progress...** | 审查尚未完成 | 等待标题变化 |

20| **Code review found no issues** | 审查已完成,未发现需要标记的问题 | 无需操作 |

21| 表示发现了问题的标题 | 审查已完成并有发现项 | 如果在 diff 上看不到这些发现项,请参阅[查找未显示为内联评论的问题](#find-issues-that-aren’t-showing-as-inline-comments) |

22| **Code review skipped — no new changes** | 自动审查未在您最新的推送上运行 | 如果仍想获得审查,请评论 `@claude review` |

23| **Code review failed** 或 **Code review timed out** | 审查未完成 | 要重新运行,请参阅[重新触发失败或超时的审查](#retrigger-a-failed-or-timed-out-review) |

24| **Code review declined** | 审查未运行 | 阅读检查运行的摘要。如果其中提到预算或支出限额,请参阅[审查未运行且 PR 显示预算消息](#review-didn’t-run-and-the-pr-shows-a-budget-message) |

25| 没有检查运行 | 没有启动任何审查 | 评论 `@claude review`。如果之后仍未出现检查运行,请参阅[评论命令未启动审查](#a-comment-command-didn’t-start-a-review) |

26 

27<h2 id="a-review-didn’t-start">

28 审查未启动

29</h2>

30 

31当没有出现 **Claude Code Review** 检查运行,或 Claude 发布评论表示审查已被跳过时,请检查以下情况。

32 

33<h3 id="a-comment-command-didn’t-start-a-review">

34 评论命令未启动审查

35</h3>

36 

37在您评论 `@claude review` 之后,请查看 Pull Request 上是否出现标题为 **Code review queued...** 或 **Code review in progress...** 的 **Claude Code Review** 检查运行。您的评论上出现 👀 表情回应并不能确认审查即将开始。如果没有出现检查运行,请逐一检查以下原因:

38 

39* **此仓库未启用 Code Review**:Claude 不会针对该命令发布任何评论或检查运行。请让 Owner [添加该仓库](/docs/zh-CN/code-review-setup#add-more-repositories)。

40* **评论不满足某个条件**:评论是内联评论或审查正文,而不是新的顶层评论,或者命令不在评论开头。编辑先前的评论而不是发布新评论也不算数,并且 Pull Request 必须处于打开状态。请参阅[评论命令的条件](/docs/zh-CN/code-review-pull-requests#comment-commands),并发布一条满足这些条件的新评论。

41* **您没有写入权限**:您需要拥有该仓库的 write、maintain 或 admin 权限;对于来自 fork 的 Pull Request,起作用的是基础仓库上的权限。如果您的组织启用了提示,Claude 会回复 "No review was started: manual reviews can only be requested by someone with write access to this repository."。请让具有写入权限的人来发表评论。

42* **预算已用尽**:Claude 会发布一条以 "⚠️ Code review skipped" 开头的评论。请参阅[审查未运行且 PR 显示预算消息](#review-didn’t-run-and-the-pr-shows-a-budget-message)。

43 

44<h3 id="review-didn’t-run-and-the-pr-shows-a-budget-message">

45 审查未运行且 PR 显示预算消息

46</h3>

47 

48当您组织的预算不足以支付一次审查时,Code Review 会跳过该审查,Claude 会在 Pull Request 上发布一条以 "⚠️ Code review skipped" 开头的评论。在其中某些情况下,还会出现标题为 **Code review declined** 的检查运行。

49 

50该评论会链接到 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage),管理员可在此恢复预算。评论的措辞会告诉您达到了哪项限额:

51 

52* **"has reached its monthly code review spending cap"**:已达到 [Code Review 的每月支出限额](/docs/zh-CN/code-review-costs#limit-your-spend)。审查将在下一个计费周期开始时恢复。如需更早恢复,请让管理员提高该限额。

53* **"has no extra usage available to pay for this review"**:您组织的[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)余额已用完,或已达到其总体每月支出限额。请让管理员添加使用额度或提高该限额。

54* **"is too low to start another review"**:剩余的预算或余额低于一次审查的预计费用。请让管理员提高限额或添加使用额度。

55 

56预算恢复后,在 Pull Request 上评论 `@claude review` 即可获得之前被跳过的审查。[评论命令的条件](/docs/zh-CN/code-review-pull-requests#comment-commands)同样适用,因此评论者需要拥有写入权限。

57 

58<h2 id="retrigger-a-failed-or-timed-out-review">

59 重新触发失败或超时的审查

60</h2>

61 

62如果检查运行的摘要显示 "The review session was interrupted before it could finish. A new review of this commit has been queued automatically.",则您无需执行任何操作。该审查会自动重试一次。

63 

64否则,当检查运行的标题为 **Code review failed** 或 **Code review timed out** 时,请通过评论或重新运行来再次运行审查:

65 

66* **评论 `@claude review`**:将其作为顶层评论发布在 Pull Request 上。这会启动一次全新的审查,而不会让该 Pull Request 订阅后续推送。

67* **点击 Re-run**:如果该 Pull Request 不是[来自 fork](/docs/zh-CN/code-review-pull-requests#review-drafts-and-pull-requests-from-forks),请在 GitHub 的 **Checks** 标签页中点击 **Claude Code Review** 检查上的 **Re-run**。重新运行会覆盖 Pull Request 当前的 head 提交,同样不会让该 Pull Request 订阅后续推送。

68 

69<h2 id="find-issues-that-aren’t-showing-as-inline-comments">

70 查找未显示为内联评论的问题

71</h2>

72 

73如果检查运行标题表示发现了问题,但您在 diff 上看不到内联审查评论,请查看以下其他展示发现项的位置:

74 

75* **检查运行 Details**:在 **Checks** 标签页中,点击 **Claude Code Review** 检查旁边的 **Details**。严重程度表会列出发现项及其文件、行号和摘要,无论内联评论是否被接受。

76* **Files changed 注释**:打开 PR 上的 **Files changed** 标签页。有行号但未作为内联评论发布的发现项会以注释的形式显示在相关行上。

77* **审查正文**:没有内联位置或位于当前 diff 之外的发现项,会显示在审查正文的 **Additional findings** 标题下。

78 

79<h2 id="the-check-run-mentions-review-md">

80 检查运行提到 REVIEW\.md

81</h2>

82 

83检查运行可能携带的关于 `REVIEW.md` 的消息中,有两条与分支保护有关:

84 

85* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**:该审查仅读取了根目录下的文件。请参阅[从哪个分支读取 REVIEW.md](/docs/zh-CN/code-review-customize#which-branch-review-md-is-read-from),了解保护该分支会带来哪些变化。

86* **"were not applied to this review: branch protection could not be confirmed"**:该审查没有读取任何 `REVIEW.md`。

87 

88<h2 id="setup-problems">

89 设置问题

90</h2>

91 

92以下情况会在 Owner [设置 Code Review](/docs/zh-CN/code-review-setup) 时出现。

93 

94<h3 id="a-repository-isn’t-listed-in-add-a-repository">

95 仓库未在 Add a repository 中列出

96</h3>

97 

98请先按名称搜索该仓库,因为对话框不会完整加载较长的列表。只有当 Claude GitHub App 能够访问某个仓库时,对话框才会列出该仓库。点击 **Install GitHub App** 并授予该应用对该仓库的访问权限。当没有列出任何仓库时,**Install GitHub App** 是对话框中的一个按钮。否则,它位于对话框的 GitHub 组织筛选菜单底部。

99 

100<h3 id="no-check-run-appears-on-the-test-pull-request">

101 测试 Pull Request 上没有出现检查运行

102</h3>

103 

104确认 **Allow code review** 已开启,该仓库已列在 **Code review** 部分的 **Repositories** 下,并且 Claude GitHub App 可以访问该仓库。自动审查会跳过草稿 Pull Request,而设置为 **Manual (@claude review)** 的仓库需要一条 `@claude review` 评论才能启动首次审查。

105 

106<h2 id="related-resources">

107 相关资源

108</h2>

109 

110* [在 Pull Request 上阅读和请求审查](/docs/zh-CN/code-review-pull-requests):发现项和检查运行的含义,以及评论命令

111* [设置 Code Review](/docs/zh-CN/code-review-setup):供 Owner 使用,启用 Code Review 并管理仓库

112* [Code Review 费用和使用情况](/docs/zh-CN/code-review-costs):预算消息背后的支出限额

113* [自定义 Code Review](/docs/zh-CN/code-review-customize):审查读取的是哪一份 `REVIEW.md`

commands.md +2 −2

Details

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

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

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

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

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

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

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


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

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

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

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

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

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

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

desktop.md +439 −185

Details

207* 点击 **Walk through in diff** 打开 diff 视图,逐条查看结果。当前 diff 中的结果会显示在其对应的行上,您可以在那里点击 **Fix this one** 或忽略它。207* 点击 **Walk through in diff** 打开 diff 视图,逐条查看结果。当前 diff 中的结果会显示在其对应的行上,您可以在那里点击 **Fix this one** 或忽略它。

208* 点击 **Apply fixes** 让 Claude 修复仍未处理的结果。208* 点击 **Apply fixes** 让 Claude 修复仍未处理的结果。

209 209 

210在任何会话中,您也可以在输入框中要求 Claude 修复审查发现的问题。有关 `/code-review` 检查的内容及其接受的参数,请参阅[在本地审查 diff](/docs/zh-CN/code-review#review-a-diff-locally)。210在任何会话中,您也可以在输入框中要求 Claude 修复审查发现的问题。有关 `/code-review` 检查的内容及其接受的参数,请参阅[使用 `/code-review` 在本地审查](/docs/zh-CN/code-review-local)。

211 211 

212<h3 id="monitor-pull-request-status">212<h3 id="monitor-pull-request-status">

213 监控 Pull Request 状态213 监控 Pull Request 状态


788 环境配置788 环境配置

789</h2>789</h2>

790 790 

791你在[启动会话](#start-a-session)时选择的环境决定了 Claude 执行的位置以及你如何连接:791您在[启动会话](#start-a-session)时选择的环境决定了 Claude 在何处执行以及您如何连接:

792 792 

793* **Local**:在你的机器上运行,直接访问你的文件793* **Local**:在您的计算机上运行,可直接访问您的文件

794* **Cloud**:在 Anthropic 管理的基础设施上运行。即使你关闭应用,会话也会继续。794* **Cloud**:默认在 Anthropic 托管的基础设施上运行。即使您关闭应用,会话也会继续。

795* **SSH**:在您通过 SSH 连接的远程机器上运行,例如您自己的服务器、云虚拟机或开发容器。正在运行的任务可以[在 Desktop 断开连接时继续运行](#keep-a-task-running-while-desktop-is-disconnected),但如果使用 Claude 账户,任务可能会在其登录过期时停止。795* **SSH**:在您通过 SSH 连接的远程计算机上运行,例如您自己的服务器、云虚拟机或开发容器。正在运行的任务可以[在 Desktop 断开连接时继续运行](#keep-a-task-running-while-desktop-is-disconnected),但使用 Claude 账户时,任务可能会在其登录过期时停止。

796* **WSL**(Windows):在你的机器上的 [WSL 2 发行版](/docs/zh-CN/desktop-wsl)内运行,使用其 Linux 工具链和本地路径796* **WSL**(Windows):在您计算机上的 [WSL 2 发行版](/docs/zh-CN/desktop-wsl)内运行,使用该发行版的 Linux 工具链和原生路径

797 797 

798<h3 id="local-sessions">798<h3 id="local-sessions">

799 本地会话799 本地会话

800</h3>800</h3>

801 801 

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

803 803 

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

805 805 

806[扩展思考](/docs/zh-CN/model-config#extended-thinking)默认启用,这改进了复杂推理任务的性能,但会使用额外的 token。在 Anthropic API 上,在本地环境编辑器中将 `MAX_THINKING_TOKENS` 设置为 `0` 来关闭思考;这对 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 模型没有影响,它们始终使用扩展思考。在 Anthropic API 上关闭思考后,Claude Code 会向它已知[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(例如 Opus 5)发送努力级别 `high`,而不是更高级别。806[扩展思考](/docs/zh-CN/model-config#extended-thinking)默认启用,这可以提升复杂推理任务的表现,但会消耗额外的 token。在 Anthropic API 上,在本地环境编辑器中将 `MAX_THINKING_TOKENS` 设置为 `0` 即可关闭思考;这对 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 模型无效,这些模型始终使用扩展思考。在 Anthropic API 上关闭思考后,对于 Claude Code 已知[不接受该组合](/docs/zh-CN/errors#effort-isnt-available-with-thinking-turned-off)的模型(例如 Opus 5),Claude Code 会发送 effort `high`,而不是更高的级别。

807 807 

808在具有[自适应推理](/docs/zh-CN/model-config#adjust-effort-level)的模型上,对于为正数的 `MAX_THINKING_TOKENS` 值,Claude Code 会忽略该数值本身,因为思考深度改由自适应推理控制。在 Opus 4.6 和 Sonnet 4.6 上,将 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 设置为 `1` 可使用固定思考预算;Fable 模型、Sonnet 5 及更高版本、Haiku 5.5 以及 Opus 4.7 及更高版本始终使用自适应推理,没有固定预算模式。808在支持[自适应推理](/docs/zh-CN/model-config#adjust-effort-level)的模型上,Claude Code 会忽略正值 `MAX_THINKING_TOKENS` 中的具体数值,因为自适应推理会改为控制思考深度。在 Opus 4.6 和 Sonnet 4.6 上,将 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 设置为 `1` 可使用固定的思考预算;Fable 模型、Sonnet 5 及更高版本、Haiku 5.5 以及 Opus 4.7 及更高版本始终使用自适应推理,没有固定预算模式。

809 809 

810<h4 id="local-sessions-on-managed-devices">810<h4 id="local-sessions-on-managed-devices">

811 托管设备上的本地会话811 托管设备上的本地会话

812</h4>812</h4>

813 813 

814你的管理员可以使用 [`disableDesktopLocalSessions` 托管设置](#managed-settings)关闭本地会话。当他们这样做时,**Local** 保留在环境下拉菜单中但被灰显,无法选择,并显示一个工具提示说你的组织关闭了它,在 Windows 上 [WSL](/docs/zh-CN/desktop-wsl) 条目(其在托管设备上的可用性[单独管理](/docs/zh-CN/admin-setup#wsl-sessions-in-claude-code-desktop))也以相同方式灰显。新会话默认为第一个 SSH 连接(如果已配置),如果你尝试继续现有会话,Desktop 会显示一条消息说此设备上不可用本地会话。选择 [SSH](#ssh-sessions) 或 [cloud](#cloud-sessions) 环境,或联系你的 IT 团队。814您的管理员可以通过 [`disableDesktopLocalSessions` 托管设置](#managed-settings)关闭本地会话。关闭后,**Local** 仍会显示在环境下拉菜单中,但呈灰色且无法选择,并带有说明您的组织已将其关闭的工具提示;在 Windows 上,[WSL](/docs/zh-CN/desktop-wsl) 条目(其在托管设备上的可用性[另行管控](/docs/zh-CN/admin-setup#wsl-sessions-in-claude-code-desktop))也会以同样方式呈灰色。如果已配置 SSH 连接,新会话默认使用第一个 SSH 连接;如果您尝试继续现有的本地会话,Desktop 会显示一条消息,说明本设备上无法使用本地会话。请改为选择 [SSH](#ssh-sessions) 或[云端](#cloud-sessions)环境,或联系您的 IT 团队。

815 815 

816<h3 id="cloud-sessions">816<h3 id="cloud-sessions">

817 云会话817 云端会话

818</h3>818</h3>

819 819 

820云会话即使在你关闭应用后也会在后台继续。使用计入你的[订阅计划限制](/docs/zh-CN/costs),没有单独的计算费用。820即使您关闭应用,云端会话也会在后台继续运行。用量计入您的[订阅套餐限额](/docs/zh-CN/costs),不单独收取计算费用。

821 821 

822你可以创建具有不同网络访问级别和环境变量的自定义云环境。要管理它们,在提示框中打开环境下拉菜单并选择 **Cloud**:822您可以创建具有不同网络访问级别和环境变量的自定义云端环境。若要管理这些环境,请打开输入框中的环境下拉菜单并选择 **Cloud**:

823 823 

824* **添加环境**:选择 **Add cloud environment**824* **添加环境**:选择 **Add cloud environment**

825* **编辑或存档你自己的环境之一**:将鼠标悬停在它上面并点击齿轮图标825* **编辑或归档您自己的某个环境**:将鼠标悬停在该环境上,然后点击齿轮图标

826 826 

827有关配置网络访问和环境变量的详细信息,请参阅[配置云环境](/docs/zh-CN/cloud-environments)。827有关配置网络访问和环境变量的详细信息,请参阅[配置云端环境](/docs/zh-CN/cloud-environments)。

828 828 

829<h3 id="ssh-sessions">829<h3 id="ssh-sessions">

830 SSH 会话830 SSH 会话

831</h3>831</h3>

832 832 

833SSH 会话让你在远程机器上运行 Claude Code,同时使用桌面应用作为你的界面。这对于使用存在于云虚拟机、开发容器或具有特定硬件或依赖项的服务器上的代码库很有用。833SSH 会话让您可以在远程计算机上运行 Claude Code,同时使用桌面应用作为界面。这对于处理位于云虚拟机、开发容器或具有特定硬件或依赖的服务器上的代码库非常有用。

834 834 

835<Note>835<Note>

836 如果您将 Desktop 与[第三方提供商](/docs/zh-CN/third-party-integrations)一起使用,SSH 会话需要单独设置。请参阅 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。836 如果您将 Desktop 与[第三方提供商](/docs/zh-CN/third-party-integrations)配合使用,SSH 会话需要单独设置。请参阅 [3P 上 Claude Desktop 中的 SSH 远程会话](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。

837</Note>837</Note>

838 838 

839要添加 SSH 连接,请在启动会话之前在输入框中打开环境下拉菜单,然后选择 **SSH > Add SSH connection…** 并填写连接详细信息:839若要添加 SSH 连接,请在开始会话之前打开输入框中的环境下拉菜单,然后选择 **SSH > Add SSH connection…** 并填写连接详细信息:

840 840 

841* **Name**:此连接的友好标签841* **Name**:此连接的友好标签

842* **SSH host**:`user@hostname` 或在 `~/.ssh/config` 中定义的主机842* **SSH host**:`user@hostname` 或在 `~/.ssh/config` 中定义的主机

843* **SSH port**:如果留空,则默认为 22,或使用您 SSH 配置中的端口843* **SSH port**:留空时默认为 22,或使用您 SSH 配置中的端口

844* **SSH key (optional)**:您的私钥路径,例如 `~/.ssh/id_ed25519`。留空则使用您的 SSH 配置或 SSH agent。844* **SSH key (optional)**:您的私钥路径,例如 `~/.ssh/id_ed25519`。留空则使用您的 SSH 配置或 SSH agent。

845* **Worktree folder**:远程机器上的一个文件夹,例如 `~/worktrees`,新会话会在其中创建 worktree。留空则使用[远程机器的默认设置](#choose-where-ssh-session-worktrees-go)。845* **Worktree folder**:远程计算机上的一个文件夹(例如 `~/worktrees`),新会话会在其中创建 worktree。留空则使用[远程计算机的默认位置](#choose-where-ssh-session-worktrees-go)。

846 846 

847添加后,该连接会出现在环境下拉菜单的 **SSH** 下。选择它即可在该机器上启动会话。Claude 在远程机器上运行,可以访问其文件和工具。847添加后,该连接会显示在环境下拉菜单的 **SSH** 下。选择它即可在该计算机上启动会话。Claude 在远程计算机上运行,可以访问其文件和工具。

848 848 

849远程机器可以运行 Linux、macOS 或 [Windows](#windows-remote-machines)。Desktop 在您第一次连接时会自动在远程机器上安装 Claude Code。连接后,SSH 会话支持权限模式、连接器、插件和 MCP 服务器。849远程计算机可以运行 Linux、macOS 或 [Windows](#windows-remote-machines)。首次连接时,Desktop 会自动在远程计算机上安装 Claude Code。连接后,SSH 会话支持权限模式、连接器、插件和 MCP 服务器。

850 850 

851<h4 id="remote-machine-requirements-for-ssh-sessions">851<h4 id="remote-machine-requirements-for-ssh-sessions">

852 SSH 会话的远程机器要求852 SSH 会话的远程计算机要求

853</h4>853</h4>

854 854 

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

856 856 

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

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

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

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

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

862* **网络**:Claude Code 在远程机器上运行并从那里发出网络请求,因此该机器需要具备 [Claude Code 所需的网络访问](/docs/zh-CN/network-config#network-access-requirements)。如果该机器无法下载 Claude Code,Desktop 会在您的计算机上下载并上传它。Claude Code 的其他请求仍从远程机器发出。862* **网络**:Claude Code 在远程计算机上运行,并从那里发出网络请求,因此该计算机需要具备 [Claude Code 所需的网络访问](/docs/zh-CN/network-config#network-access-requirements)。如果该计算机无法下载 Claude Code,Desktop 会在您的计算机上下载并上传它。Claude Code 的其他请求仍从远程计算机发出。在 Linux 远程计算机上,如果这些请求需要代理,请[为 SSH 会话设置代理](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions)。

863 

864<h4 id="set-a-proxy-or-a-ca-certificate-for-ssh-sessions">

865 为 SSH 会话设置代理或 CA 证书

866</h4>

867 

868如果 Linux 远程计算机通过代理访问互联网或需要 CA 证书,请在该计算机上的 `~/.claude/settings.json` 中的 `env` 下添加[代理和 CA 变量](/docs/zh-CN/network-config)。即使您已在该计算机上的 `~/.profile`、`~/.bash_profile`、`~/.zprofile` 或 `~/.zshrc` 中导出它们,也要添加。

869 

870SSH 会话不会从这些文件中获取它们,即使在该计算机终端中运行的 `claude` 可以获取。此时会话可能会挂起,或显示 **The connection from … to the API failed** 或 **Authentication failed**,且重新登录也无济于事。

871 

872<Steps>

873 <Step title="添加变量">

874 对于 CA 文件,请使用 [`NODE_EXTRA_CA_CERTS`](/docs/zh-CN/network-config#custom-ca-certificates),因为 Claude Code 不信任 `~/.claude/settings.json` 中 `SSL_CERT_FILE` 指定的 CA。此示例设置了代理和 CA 文件:

875 

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

877 {

878 "env": {

879 "HTTPS_PROXY": "http://proxy.example.com:8080",

880 "NODE_EXTRA_CA_CERTS": "/etc/ssl/certs/example-ca.pem"

881 }

882 }

883 ```

884 </Step>

885 

886 <Step title="重新发送您的消息">

887 请重新发送您的消息,因为您在该文件中添加或更改的变量会在几秒钟内生效。如果仍然失败,请启动新会话。

888 </Step>

889</Steps>

890 

891<h5 id="find-a-proxy-or-ca-variable-set-elsewhere-on-the-remote-machine">

892 查找远程计算机上其他位置设置的代理或 CA 变量

893</h5>

894 

895请检查 Linux 远程计算机是否在其他位置设置了代理或 CA 变量,因为会话会使用该值,并[忽略任何设置文件中的值](/docs/zh-CN/settings-reference#how-env-values-interact-with-your-shell):

896 

897<Steps>

898 <Step title="列出远程计算机设置的变量">

899 在您计算机上的终端中运行 `ssh devbox env`,并替换为您自己的主机。

900 </Step>

901 

902 <Step title="在设置变量的位置更改它">

903 如果列表中有该变量,请在设置它的文件中进行更改,例如远程计算机上的 `~/.zshenv`、`/etc/environment` 或 `~/.bashrc`。

904 </Step>

905 

906 <Step title="让会话获取新值">

907 重启远程计算机,或退出 Desktop 并结束辅助程序的进程,如[移除辅助程序](#files-and-processes-on-the-remote-machine)的前两个步骤所述。请在没有任务运行时执行此操作,因为任一方式都会中断 Claude 的工作。

908 </Step>

909</Steps>

863 910 

864<h4 id="use-your-ssh-configuration-on-macos-and-linux">911<h4 id="use-your-ssh-configuration-on-macos-and-linux">

865 在 macOS 和 Linux 上使用您的 SSH 配置912 在 macOS 和 Linux 上使用您的 SSH 配置


867 914 

868在 macOS 和 Linux 上,Desktop 通过在您的计算机上运行 OpenSSH 客户端进行连接,因此会使用您的 `~/.ssh/config`。通过 OpenSSH 客户端连接需要 Claude Desktop v1.37937.0 或更高版本。在 **SSH host** 字段中输入该文件中的 `Host` 名称,即可使用其条目中的设置,例如 `HostName`、`User`、`IdentityFile`、`CertificateFile`、`ProxyJump` 和 `ProxyCommand`。915在 macOS 和 Linux 上,Desktop 通过在您的计算机上运行 OpenSSH 客户端进行连接,因此会使用您的 `~/.ssh/config`。通过 OpenSSH 客户端连接需要 Claude Desktop v1.37937.0 或更高版本。在 **SSH host** 字段中输入该文件中的 `Host` 名称,即可使用其条目中的设置,例如 `HostName`、`User`、`IdentityFile`、`CertificateFile`、`ProxyJump` 和 `ProxyCommand`。

869 916 

870在添加连接之前,请在您计算机的终端中检查客户端和该条目:917添加连接之前,请在您计算机上的终端中检查客户端和条目:

871 918 

872* **客户端版本**:运行 `ssh -V`。客户端必须是 OpenSSH 7.6 或更高版本。919* **客户端版本**:运行 `ssh -V`。客户端必须是 OpenSSH 7.6 或更高版本。

873* **条目**:使用 `Host` 名称运行 `ssh`,例如 `ssh devbox`。如果失败,请先修复该条目。920* **条目**:使用 `Host` 名称运行 `ssh`,例如 `ssh devbox`。如果失败,请先修复该条目。

874 921 

875您可以将 **SSH port** 和 **SSH key (optional)** 字段留空。如果填写了其中一项,Desktop 会将其与该条目一起使用:922您可以将 **SSH port** 和 **SSH key (optional)** 字段留空。如果填写其中之一,Desktop 会将其与条目一起使用:

876 923 

877* **SSH port**:此处的值会覆盖条目中的 `Port`924* **SSH port**:此处的值会覆盖条目的 `Port`

878* **SSH key (optional)**:除了条目中的 `IdentityFile` 和 SSH agent 中的密钥之外,Desktop 还会提供您选择的密钥文件925* **SSH key (optional)**:除条目的 `IdentityFile` 和您 SSH agent 中的密钥外,Desktop 还会提供您选择的密钥文件

879 926 

880<h5 id="reach-a-machine-behind-a-jump-host">927<h5 id="reach-a-machine-behind-a-jump-host">

881 访问跳板主机后的机器928 访问跳板机后面的计算机

882</h5>929</h5>

883 930 

884要访问位于跳板主机(也称为堡垒主机)之后的机器,请在条目中设置 `ProxyJump` 或 `ProxyCommand`。以下条目通过 `bastion.example.com` 访问 `devbox.internal.example.com`:931若要访问位于跳板机(也称为堡垒机)后面的计算机,请在条目中设置 `ProxyJump` 或 `ProxyCommand`。以下条目通过 `bastion.example.com` 访问 `devbox.internal.example.com`:

885 932 

886```text ~/.ssh/config theme={null}933```text ~/.ssh/config theme={null}

887Host devbox934Host devbox


892 939 

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

894 941 

942<h5 id="reach-a-container-on-a-remote-machine">

943 访问远程计算机上的容器

944</h5>

945 

946若要在未发布 SSH 端口的容器内运行会话,请使用 `ProxyCommand` 访问它,因为 Desktop 不会运行您所连接条目的 `RemoteCommand`。如果您的条目使用 `RemoteCommand` 进入容器,会话将在该条目登录的计算机上运行,而不是在容器中运行。

947 

948<Steps>

949 <Step title="添加条目">

950 将以下条目添加到 `~/.ssh/config` 的末尾,如果您有 `Host *` 条目,则添加到第一个 `Host *` 条目的正上方。将 Docker 容器 `devbox`、其用户 `dev` 和计算机 `build.example.com` 替换为您自己的值。该条目的命令会为每个连接在容器内启动一个 SSH 服务器:

951 

952 ```text ~/.ssh/config theme={null}

953 Host devbox-container

954 User dev

955 ProxyCommand ssh build.example.com docker exec -i devbox /usr/sbin/sshd -i

956 ```

957 </Step>

958 

959 <Step title="准备容器">

960 * 安装 OpenSSH 服务器,并使用在您重新构建镜像或重新创建容器时保持不变的主机密钥

961 * 为 `User` 中指定的账户提供登录方式,例如 `authorized_keys` 文件

962 * 检查容器是否满足[远程计算机要求](#remote-machine-requirements-for-ssh-sessions)

963 </Step>

964 

965 <Step title="检查允许列表">

966 如果您的管理员[限制了 SSH 主机](#restrict-which-ssh-hosts-users-can-connect-to),请在您计算机上的终端中运行 `ssh -G devbox-container`。请管理员在 `sshHostAllowlist` 中允许它输出的 `hostname`(此处为 `devbox-container`)。当他们允许该名称时,也就允许了您条目的 `ProxyCommand` 所连接的任何目标。

967 </Step>

968 

969 <Step title="测试条目,然后连接">

970 在您计算机上的终端中运行 `ssh devbox-container`。修复它报告的问题,然后再次运行,直到它无需询问您任何内容即可在容器中打开 shell:

971 

972 * **如果 `ssh` 要求输入密码、口令短语或验证码**:改用无需提示即可工作的登录方式,例如由您的 SSH agent 持有的密钥

973 * **如果 `ssh` 报告 `Cannot execute command-line and remote command.` 或 `Bad packet length`**:从 `build.example.com` 的条目中移除 `RemoteCommand` 和 `RequestTTY`。之后,在您计算机上的终端中运行 `ssh build.example.com` 会在该计算机上打开 shell,而不是在容器中。

974 * **如果 `ssh` 报告 `Connection closed by UNKNOWN port 65535`**:在同一终端中运行 `ssh build.example.com docker exec devbox /usr/sbin/sshd -t`。

975 * 如果它输出 `Missing privilege separation directory: /run/sshd`,请在容器中创建该文件夹。

976 * 如果它输出 `no hostkeys available` 且容器有主机密钥,请在此命令和条目中的 `exec` 后添加 `-u root`。

977 

978 然后在 **SSH host** 字段中输入 `devbox-container`。

979 </Step>

980</Steps>

981 

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

896 在 `ProxyCommand` 中使用 shell 中的变量983 在 `ProxyCommand` 中使用来自 shell 的变量

897</h5>984</h5>

898 985 

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

987 

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

989 

990<Note>

991 如果您的 shell 设置了临时 AWS 凭据,请[为 AWS CLI 提供一个 profile](#use-aws-credentials-in-a-proxycommand),而不是导出 `AWS_*` 变量。

992</Note>

993 

994<a id="use-aws-credentials-in-a-proxycommand" />

900 995 

901这需要 Claude Desktop v2.37337.0 或更高版本,以及一个接受 `-0` 的 `env` 命令,您可以在计算机的终端中运行 `env -0` 来检查。996<h5 id="use-aws-credentials-in-a-proxycommand">

997 在 `ProxyCommand` 中使用 AWS 凭据

998</h5>

999 

1000如果您在 shell 启动文件中设置了临时 AWS 凭据,运行 AWS CLI 的 `ProxyCommand` 可能在终端中能够连接,而在 Desktop 中失败。当您的 shell 导出 `AWS_SESSION_TOKEN`、`AWS_SECURITY_TOKEN` 或 `AWS_CREDENTIAL_EXPIRATION` 时,Desktop 中的 `ssh` 和您的 `ProxyCommand` 不会获得 shell 的 AWS 凭据、`AWS_REGION` 或 `AWS_PROFILE`。

1001 

1002如果 AWS CLI 没有其他区域或凭据来源,它会失败并显示 `You must specify a region` 或 `Unable to locate credentials`。若要从 Desktop 连接,请为 AWS CLI 提供一个它从 `~/.aws/config` 读取的 profile:

1003 

1004<Steps>

1005 <Step title="添加包含区域和凭据来源的 profile">

1006 此示例添加一个名为 `corp` 的 profile,它从辅助程序获取凭据:

1007 

1008 ```ini ~/.aws/config theme={null}

1009 [profile corp]

1010 region = us-east-1

1011 credential_process = /full/path/to/your-credential-helper

1012 ```

1013 

1014 * **`region`**:指定您所连接计算机的 AWS 区域

1015 * **`credential_process`**:指定一个程序的完整路径,该程序以 [AWS 文档所述的 JSON 格式](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html)输出凭据。请选择无需您输入的程序,因为 AWS CLI 会在每次连接时运行它,包括您不在时的重新连接。

1016 * **IAM Identity Center**:添加该 profile 的 [IAM Identity Center 设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html)来代替 `credential_process`。在连接之前,以及该登录失效时,在终端中运行 `aws sso login --profile corp`。

1017 </Step>

1018 

1019 <Step title="在 ProxyCommand 中指定 profile">

1020 此示例将 `--profile` 添加到 [AWS 为 Session Manager 记录的命令](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html)中:

1021 

1022 ```text ~/.ssh/config theme={null}

1023 Host i-*

1024 ProxyCommand sh -c "aws ssm start-session --profile corp --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

1025 ```

1026 </Step>

1027 

1028 <Step title="重新连接">

1029 在终端中使用该主机运行 `ssh`,确认该条目在终端中仍能连接,然后从 Desktop 连接。

1030 </Step>

1031</Steps>

902 1032 

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

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

905</h5>1035</h5>

906 1036 

907如果您的 SSH 配置没有为该主机设置 `ConnectTimeout`,Desktop 会给 `ssh` 30 秒时间进行连接。通过跳板主机或 `ProxyCommand` 连接时,这段时间包括该路由建立连接所需的时间。如果您的路由需要更长时间,请在条目中添加更大的值:1037如果您的 SSH 配置没有为该主机设置 `ConnectTimeout`,Desktop 会给 `ssh` 30 秒的连接时间。通过跳板机或 `ProxyCommand` 连接时,该时间包括路由建立连接所需的时间。如果您的路由需要更长时间,请在条目中添加更高的值:

908 1038 

909```text ~/.ssh/config theme={null}1039```text ~/.ssh/config theme={null}

910Host devbox1040Host devbox


914 ConnectTimeout 1201044 ConnectTimeout 120

915```1045```

916 1046 

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

1048 

1049如果远程计算机本身等待您在手机上批准,无论您设置的 `ConnectTimeout` 是多少,都请在 45 秒内批准。您无法提高此限制,因为 Desktop 会自行设置 `ServerAliveInterval` 和 `ServerAliveCountMax`,之后 `ssh` 会关闭远程计算机在这么长时间内未发送任何内容的登录。如果是跳板机或 `ProxyCommand` 在等待您,请在远程计算机的条目中提高 `ConnectTimeout` 以涵盖该时间。

1050 

1051<h5 id="fix-a-match-host-block-that-only-desktop-applies">

1052 修复仅由 Desktop 应用的 `Match host` 块

1053</h5>

1054 

1055如果 Desktop 使用了终端中 `ssh devbox` 不使用的设置,请查找条目 `HostName` 行上方的 `Match host` 块。在终端中,`ssh` 会在 `HostName` 行之前读取该处的块,因此它将该块与 `devbox` 进行比较。Desktop 在命令行中向 `ssh` 提供 `HostName` 值,因此 `ssh` 会将该块与该值进行比较。

1056 

1057若要检查,请像 Desktop 那样,在您计算机上的终端中运行 `ssh -G`,并在命令行中提供条目的 `HostName` 和 `User` 值:

1058 

1059```bash theme={null}

1060ssh -G -o HostName=devbox.internal.example.com -l alice devbox

1061```

1062 

1063将输出与 `ssh -G devbox` 的输出进行比较。如果该块的设置(例如 `proxycommand`)仅出现在第一个输出中,则该块仅在 Desktop 中生效。若要让 Desktop 也跳过它,请在其 `Match` 行中添加 `!originalhost devbox`:

1064 

1065```text ~/.ssh/config theme={null}

1066Match host *.internal.example.com !originalhost devbox

1067```

1068 

1069若要确认,请再次运行第一个命令。该块的设置将不再出现在其输出中。

918 1070 

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

920 Desktop 保持关闭的转发设置1072 Desktop 保持关闭的转发设置

921</h5>1073</h5>

922 1074 

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

924 1076 

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

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

927 1079 

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

929 1081 

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

931 1083 

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

933 访问远程机器上的端口1085 访问远程计算机上的端口

934</h4>1086</h4>

935 1087 

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

937 1089 

938```bash theme={null}1090```bash theme={null}

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

940```1092```

941 1093 

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

943 1095 

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

945 Windows 远程机器1097 Windows 远程计算机

946</h4>1098</h4>

947 1099 

948Windows 远程机器需要 Claude Desktop v2.31226.0 或更高版本。1100Windows 远程计算机需要 Claude Desktop v2.31226.0 或更高版本。

949 1101 

950请使用 Microsoft 的 OpenSSH Server。该机器可以是 x64 或 ARM64。SSH 服务器启动的 shell 可以是 `cmd.exe`、Windows PowerShell 5.1 或 Git Bash。1102请使用 Microsoft 的 OpenSSH Server。该计算机可以是 x64 或 ARM64。SSH 服务器启动的 shell 可以是 `cmd.exe`、Windows PowerShell 5.1 或 Git Bash。

951 1103 

952Windows 远程机器获得的测试少于 Linux 远程机器。在依赖它之前,请先在上面试运行您自己的工作。1104Windows 远程计算机的测试少于 Linux 远程计算机。在依赖它之前,请先在其上试运行您自己的工作。

953 1105 

954在 Windows 远程机器上,预计会有以下限制(以及其他限制):1106在 Windows 远程计算机上,预计会有以下限制(包括但不限于):

955 1107 

956* **终端**:在文件夹为 Windows 路径(例如 `C:/projects/app`)的会话中,[终端](#run-commands-in-the-terminal)无法打开1108* **终端**:在文件夹为 Windows 路径(例如 `C:/projects/app`)的会话中,[终端](#run-commands-in-the-terminal)不会打开

957* **沙箱**:Claude Code 在那里以原生 Windows 方式运行,此时它会在没有沙箱的情况下运行命令。请参阅[沙箱的运行位置](/docs/zh-CN/sandboxing)。1109* **沙箱**:Claude Code 在那里以原生 Windows 方式运行,在此环境下它运行命令时不使用沙箱。请参阅[沙箱在何处运行](/docs/zh-CN/sandboxing)。

958* **插件**:如果插件包含 Windows 无法存储的文件名或文件夹名(例如含有 `:` 的名称),Desktop 不会复制该插件。会话会列出 Desktop 省略的插件。1110* **插件**:如果插件包含 Windows 无法存储的文件或文件夹名称(例如含有 `:` 的名称),Desktop 不会复制该插件。会话会列出 Desktop 遗漏的插件。

959* **MCP 服务器**:在某些 Windows 远程机器上,Claude 对 `claude_desktop_config.json` 中 MCP 服务器的调用会经过 Desktop,因此 Claude 无法[在 Desktop 断开连接时](#limits-while-desktop-is-disconnected)调用它们的工具。在 Claude Desktop v2.37337.0 之前,所有 Windows 远程机器都是如此。1111* **MCP 服务器**:在某些 Windows 远程计算机上,Claude 对来自 `claude_desktop_config.json` 的 MCP 服务器的调用会经过 Desktop,因此 [Desktop 断开连接时](#limits-while-desktop-is-disconnected) Claude 无法调用其工具。在 Claude Desktop v2.37337.0 之前,这适用于所有 Windows 远程计算机。

960* **Worktree**:worktree 位于 `<project-root>/.claude/worktrees/`。如果您[选择了其他文件夹](#choose-where-ssh-session-worktrees-go),Desktop 会忽略它。1112* **Worktree**:worktree 位于 `<project-root>/.claude/worktrees/`。如果您[选择其他文件夹](#choose-where-ssh-session-worktrees-go),Desktop 会忽略它。

961* **早先的消息**:如果 SSH 服务器的 shell 是 `cmd.exe` 或 Windows PowerShell,您可能需要先连接才能看到会话中早先的消息1113* **早期消息**:如果 SSH 服务器的 shell 是 `cmd.exe` 或 Windows PowerShell,您可能需要先连接才能看到会话的早期消息

962* **分叉**:如果 SSH 服务器的 shell 是 `cmd.exe` 或 Windows PowerShell,您只能在会话的第一条消息处分叉该会话1114* **分叉**:如果 SSH 服务器的 shell 是 `cmd.exe` 或 Windows PowerShell,您只能在会话的第一条消息处分叉会话

963* **断开连接时继续运行**:只有当 SSH 服务器允许程序在启动它的连接关闭后继续存在时,任务才会[在 Desktop 断开连接时继续运行](#keep-a-task-running-while-desktop-is-disconnected)。要了解是否如此,请[测试远程机器](#prepare-a-long-task)。1115* **断开连接时运行**:只有当 SSH 服务器允许程序在启动它的连接结束后继续存在时,任务才会[在 Desktop 断开连接时继续运行](#keep-a-task-running-while-desktop-is-disconnected)。若要确认,请[测试远程计算机](#prepare-a-long-task)。

964* **残留进程**:会话结束后,请检查机器上是否有 Claude Code 启动的程序,因为它们可能会继续运行。Desktop 在那里安装的[后台辅助程序](#keep-a-task-running-while-desktop-is-disconnected)不会自行停止。1116* **残留进程**:会话结束后,请检查计算机上是否有 Claude Code 启动的程序,因为它们可能会继续运行。Desktop 安装的[后台辅助程序](#keep-a-task-running-while-desktop-is-disconnected)在那里不会自行停止。

965 1117 

966<h4 id="keep-a-task-running-while-desktop-is-disconnected">1118<h4 id="keep-a-task-running-while-desktop-is-disconnected">

967 在 Desktop 断开连接时保持任务运行1119 在 Desktop 断开连接时保持任务运行

968</h4>1120</h4>

969 1121 

970如果您的计算机进入睡眠、网络断开或您退出 Desktop,任务会继续进行,直到完成、需要您处理,或达到某项[限制](#limits-while-desktop-is-disconnected)。合上盖子算作睡眠。重启 Desktop 或计算机(包括为了更新而重启)算作退出。1122如果您的计算机进入睡眠、网络中断或您退出 Desktop,任务会继续进行,直到完成、需要您处理或达到某项[限制](#limits-while-desktop-is-disconnected)。合上笔记本盖也算作睡眠。Desktop 或您计算机的重启(包括因更新而重启)算作退出。

971 1123 

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

973 1125 

974<Warning>1126<Warning>

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

976 1128 

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

978 1130 

979 如果任务必须通宵运行:1131 如果任务必须通宵运行:

980 1132 

981 * [保持计算机唤醒](/docs/zh-CN/desktop-scheduled-tasks#how-scheduled-tasks-run)并在线,盖子打开且 Desktop 保持运行1133 * [保持您的计算机唤醒](/docs/zh-CN/desktop-scheduled-tasks#how-scheduled-tasks-run)并在线,保持笔记本盖打开并让 Desktop 运行

982 * 对远程机器以及途中的任何跳板主机,使用无需提示即可完成的登录方式,例如由您的 SSH agent 持有的密钥。这样 Desktop 就可以在连接中断后自行重新连接。1134 * 对远程计算机以及途中的任何跳板机使用无需提示即可工作的登录方式,例如由您的 SSH agent 持有的密钥。这样,Desktop 可以在连接中断后自行重新连接。

983 1135 

984 对于必须在计算机睡眠或关机时运行的任务,请改为启动[云端会话](#run-long-running-tasks-in-the-cloud)。1136 对于必须在您的计算机睡眠或关机时运行的任务,请改为启动[云端会话](#run-long-running-tasks-in-the-cloud)。

985</Warning>1137</Warning>

986 1138 

987* **睡眠或网络断开后**:如果进程[仍在运行](#limits-while-desktop-is-disconnected)且 Desktop 无需提示即可登录,您就能取回正在运行的任务。否则,请[发送一条消息](#reconnect-after-sleep-or-a-network-loss)。1139* **睡眠或网络中断后**:如果进程[仍在运行](#limits-while-desktop-is-disconnected)且 Desktop 可以无需提示登录,您会重新获得正在运行的任务。如果无法登录,请[发送消息](#reconnect-after-sleep-or-a-network-loss)。

988* **退出后,Desktop 在 macOS 或 Linux 上且使用 Claude 账户**:如果 Desktop 能够[重新接入该进程](#reopen-a-session-after-you-quit-desktop),您就能取回正在运行的任务。否则,任务会停止。如果任务一直处于停止状态,请发送一条消息。1140* **退出后,macOS 或 Linux 上的 Desktop 并使用 Claude 账户**:如果 Desktop 能够[重新接入进程](#reopen-a-session-after-you-quit-desktop),您会重新获得正在运行的任务。如果无法重新接入,任务会停止。如果任务一直处于停止状态,请发送消息。

989* **退出后,Desktop 在 Windows 上或使用[第三方提供商](/docs/zh-CN/third-party-integrations)**:您会失去正在运行的任务,因为 Desktop 会在会话打开时结束该进程。请发送一条消息继续。1141* **退出后,Windows 上的 Desktop 或使用[第三方提供商](/docs/zh-CN/third-party-integrations)**:您会失去正在运行的任务,因为 Desktop 会在会话打开时结束该进程。请发送消息以继续。

990 1142 

991当您回来而任务尚未完成时,请检查是否有 Desktop 无法重新连接的提示、身份验证错误或正在等待的请求:1143当您回来而任务尚未完成时,请检查是否有 Desktop 无法重新连接的提示、身份验证错误或等待中的请求:

992 1144 

993* **Desktop 无法重新连接**:会话会说明原因,也可能会有通知说明。Desktop 可能[需要您登录](#reconnect-after-sleep-or-a-network-loss)。1145* **Desktop 无法重新连接**:会话会说明原因,也可能会有通知说明。Desktop 可能[需要您登录](#reconnect-after-sleep-or-a-network-loss)。

994* **身份验证错误**:[登录令牌或凭据](#limits-while-desktop-is-disconnected)可能已过期。使用 Claude 账户时,发送一条消息即可继续。使用第三方提供商时,请参阅 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。1146* **身份验证错误**:[登录令牌或凭据](#limits-while-desktop-is-disconnected)可能已过期。使用 Claude 账户时,请发送消息以继续。使用第三方提供商时,请参阅 [3P 上 Claude Desktop 中的 SSH 远程会话](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。

995* **正在等待的请求**:[回应它](#handle-requests-that-arrive-while-you-are-away)1147* **等待中的请求**:[回应该请求](#handle-requests-that-arrive-while-you-are-away)

996* **以上都不是**:发送一条消息继续1148* **以上都不是**:发送消息以继续

997 1149 

998<a id="prepare-a-long-task" />1150<a id="prepare-a-long-task" />

999 1151 


1001 准备长时间任务1153 准备长时间任务

1002</h5>1154</h5>

1003 1155 

1004* **先更新**:在开始长时间任务之前更新 Desktop。在 macOS 和 Windows 上,Desktop 可能会自行重启以安装已下载的更新。当 Claude 正在处理 SSH 任务时,该重启会等待。在 macOS 上使用 Claude 账户时,默认情况下,更新等待 72 小时后,重启仍可能会进行。1156* **先更新**:在开始长时间任务之前更新 Desktop。在 macOS 和 Windows 上,Desktop 可能会自行重启以安装已下载的更新。当 Claude 正在处理 SSH 任务时,该重启会等待。在使用 Claude 账户的 macOS 上,默认情况下,更新等待 72 小时后,重启仍可能进行。

1005* **不要退出 Desktop**:如果 Desktop 在 Windows 上运行或使用第三方提供商,请在长时间任务运行期间保持其打开。退出后,它会在会话打开时[结束正在运行的任务](#reopen-a-session-after-you-quit-desktop)。保持打开并不能保护[等待您处理](#handle-requests-that-arrive-while-you-are-away)的请求。1157* **不要退出 Desktop**:如果 Desktop 在 Windows 上运行或使用第三方提供商,请在长时间任务运行期间保持其打开。退出后,它会在会话打开时[结束正在运行的任务](#reopen-a-session-after-you-quit-desktop)。保持打开并不能保护[等待您处理](#handle-requests-that-arrive-while-you-are-away)的请求。

1006* **减少请求**:选择能够[让任务更少等待您](#handle-requests-that-arrive-while-you-are-away)的权限模式、规则或 hook1158* **减少请求**:选择[让任务更少等待您](#handle-requests-that-arrive-while-you-are-away)的权限模式、规则或 hook

1007* **检查跳板主机**:如果您的跳板主机要求登录(例如向手机推送通知),请改用无需提示的登录方式。否则,Desktop 每次尝试重新连接时都可能再发送一次推送。1159* **检查跳板机**:如果您的跳板机要求登录(例如向手机发送推送),请改用无需提示即可工作的登录方式。否则,Desktop 每次尝试重新连接时都可能发送另一条推送。

1008* **测试远程机器**:启动一个短任务,在任务仍在运行时退出 Desktop,并在任务应该完成之后过一段时间再打开该会话。如果任务尚未完成且会话没有显示身份验证错误,请检查远程机器上[可能结束任务的因素](#limits-while-desktop-is-disconnected)。1160* **测试远程计算机**:启动一个短任务,在任务仍在运行时退出 Desktop,并在任务应该完成很久之后再次打开会话。如果任务尚未完成且会话未显示身份验证错误,请检查远程计算机上[可能结束任务的因素](#limits-while-desktop-is-disconnected)。

1009* **不要在 Desktop 的终端中运行命令**:如果远程机器会[注销空闲终端](#limits-while-desktop-is-disconnected),请从 Desktop 之外的 SSH 登录运行您自己的命令1161* **不要在 Desktop 的终端中运行命令**:如果远程计算机会[注销空闲终端](#limits-while-desktop-is-disconnected),请从 Desktop 之外的 SSH 登录运行您自己的命令

1010 1162 

1011<a id="limits-while-desktop-is-disconnected" />1163<a id="limits-while-desktop-is-disconnected" />

1012 1164 


1014 Desktop 断开连接时的限制1166 Desktop 断开连接时的限制

1015</h5>1167</h5>

1016 1168 

1017您让其继续运行的任务可能会在其登录过期、远程机器结束它,或辅助程序停止或被替换时结束:1169您让其继续运行的任务可能会在其登录过期时、远程计算机结束它时,或辅助程序停止或被替换时结束:

1018 1170 

1019* **登录令牌或凭据**:使用 Claude 账户时,令牌过期后任务会因身份验证错误而停止。使用第三方提供商时,会过期的凭据(例如来自单点登录或凭据辅助程序的凭据)也是如此。请参阅 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。使用 Claude 账户时,请[保持 Desktop 运行并连接](#keep-a-task-running-while-desktop-is-disconnected),以便它能续期登录。1171* **登录令牌或凭据**:使用 Claude 账户时,令牌过期后任务会因身份验证错误而停止。使用第三方提供商时,会过期的凭据(例如来自单点登录或凭据辅助程序的凭据)同样如此。请参阅 [3P 上 Claude Desktop 中的 SSH 远程会话](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。使用 Claude 账户时,请[保持 Desktop 运行并连接](#keep-a-task-running-while-desktop-is-disconnected),以便它能续期登录。

1020* **远程机器**:如果远程机器重启,或在您的 SSH 连接关闭时结束您的进程,正在运行的任务就会结束。在 Desktop 断开连接期间,没有任何东西会重新启动它。systemd-logind 的 `KillUserProcesses` 为 `yes` 且适用于您的用户的 Linux 机器会以这种方式结束您的进程。要让任务在那里继续运行,请让管理员将您的用户排除在外,例如使用 `KillExcludeUsers`。1172* **远程计算机**:如果远程计算机重启,或在您的 SSH 连接关闭时结束您的进程,正在运行的任务就会结束。在 Desktop 断开连接期间,不会有任何东西重新启动它。systemd-logind 的 `KillUserProcesses` 为 `yes` 且适用于您用户的 Linux 计算机会以这种方式结束您的进程。若要在这类计算机上保持任务运行,请让管理员豁免您的用户,例如使用 `KillExcludeUsers`。

1021* **空闲终端**:某些 Linux 远程机器会在终端无人输入达到设定时间后将其注销(systemd-logind 的 `StopIdleSessionSec`)。在 macOS 或 Linux 上使用 Desktop 时,会话的[终端](#run-commands-in-the-terminal)和 `!` 命令默认共享 Desktop 的 SSH 连接。这样一来,该注销会在 Desktop 已连接时结束连接,正在运行的任务也可能随之结束。关闭终端窗格并不能防止这种情况,因此请[不要在该终端中运行命令](#prepare-a-long-task)。1173* **空闲终端**:某些 Linux 远程计算机会注销在设定时间内无人输入的终端(systemd-logind 的 `StopIdleSessionSec`)。在 macOS 或 Linux 上的 Desktop 中,会话的[终端](#run-commands-in-the-terminal)和 `!` 命令默认共享 Desktop 的 SSH 连接。因此,该注销会在 Desktop 连接期间结束连接,正在运行的任务也可能随之结束。关闭终端窗格并不能防止这种情况,因此请[不要在该终端中运行命令](#prepare-a-long-task)。

1022* **Desktop 更新**:如果某次更新带来了新的辅助程序,Desktop 会在之后的某次连接时替换远程机器上的辅助程序,这可能会结束仍在运行的任务1174* **Desktop 更新**:如果更新带来了新的辅助程序,Desktop 会在之后的某次连接时替换远程计算机上的辅助程序,这可能会结束仍在运行的任务

1023* **长时间离开**:在 Linux 或 macOS 远程机器上,如果 Desktop 30 天未连接,辅助程序会停止,并结束在其下运行的每个 Claude Code 进程。请在此之前进行连接。1175* **长时间离开**:在 Linux 或 macOS 远程计算机上,如果 Desktop 30 天内未连接,辅助程序会停止,并结束在其下运行的所有 Claude Code 进程。请在此之前连接。

1024 1176 

1025在 Desktop 断开连接期间,文件编辑和某些工具可能会失败。如果任务需要它们,请保持 Desktop 连接:1177在 Desktop 断开连接期间,文件编辑和某些工具可能会失败。如果任务需要它们,请保持 Desktop 连接:

1026 1178 

1027* **Worktree**:在使用 [worktree](#work-in-parallel-with-sessions) 的会话中,Desktop 会在 Claude 进行每次文件编辑之前对其进行检查。在 Desktop 断开连接期间,每次编辑会等待约 30 秒然后失败。shell 命令仍会运行。在 Linux 或 macOS 远程机器上,[编辑可以继续正常工作](#worktree-edits-while-disconnected)。如果不确定,请在不使用 worktree 的情况下启动会话。1179* **Worktree**:在使用 [worktree](#work-in-parallel-with-sessions) 的会话中,Desktop 会在 Claude 进行每次文件编辑之前对其进行检查。在 Desktop 断开连接期间,每次编辑会等待约 30 秒,然后失败。Shell 命令仍会运行。在 Linux 或 macOS 远程计算机上,[编辑可以继续工作](#worktree-edits-while-disconnected)。如果您不确定,请在不使用 worktree 的情况下启动会话。

1028* **文件夹限制**:如果您的组织限制了会话可以使用的文件夹,无论是否使用 worktree,Desktop 都会检查每次文件读取、搜索和编辑。在 Desktop 断开连接期间,每项操作会等待最多 10 分钟然后失败。1180* **文件夹限制**:如果您的组织限制了会话可以使用的文件夹,无论是否使用 worktree,Desktop 都会检查每次文件读取、搜索和编辑。在 Desktop 断开连接期间,每项操作最多等待 10 分钟,然后失败。

1029* **连接器**:[连接器](#connect-external-tools)和 Desktop 提供的其他工具通过 Desktop 运行,因此在其断开连接期间,每次调用会在约 30 秒后失败1181* **连接器**:[连接器](#connect-external-tools)和 Desktop 提供的其他工具通过 Desktop 运行,因此在其断开连接期间,每次调用都会在约 30 秒后失败

1030* **工作流**:Desktop 会在每个新[工作流](/docs/zh-CN/workflows)启动前对其进行检查,因此在 Desktop 断开连接期间,新工作流会等待最多 10 分钟然后失败1182* **工作流**:Desktop 会在每个新[工作流](/docs/zh-CN/workflows)启动前对其进行检查,因此在 Desktop 断开连接期间,新工作流最多等待 10 分钟,然后失败

1031* **MCP 服务器**:Claude Code 在远程机器上启动的 MCP 服务器不经过 Desktop 运行,因此 Claude 仍可以调用它们的工具。只有当 Desktop 不使用其[内置 SSH 客户端](#worktree-edits-while-disconnected)时,来自 `claude_desktop_config.json` 的服务器才属于此类。否则,以及在[某些 Windows 远程机器](#windows-remote-machines)上,Claude 在 Desktop 断开连接期间无法调用它们的工具。1183* **MCP 服务器**:Claude Code 在远程计算机上启动的 MCP 服务器不通过 Desktop 运行,因此 Claude 仍可调用其工具。仅当 Desktop 未使用其[内置 SSH 客户端](#worktree-edits-while-disconnected)时,来自 `claude_desktop_config.json` 的服务器才属于这一类。否则,以及在[某些 Windows 远程计算机](#windows-remote-machines)上,Desktop 断开连接期间 Claude 无法调用其工具。

1032 1184 

1033<span id="worktree-edits-while-disconnected" />1185<span id="worktree-edits-while-disconnected" />

1034 1186 

1035<Accordion title="worktree 中的编辑何时可以继续正常工作">1187<Accordion title="worktree 中的编辑何时可以继续工作">

1036 在 Linux 或 macOS 远程机器上,该检查不经过 Desktop,因此在 Desktop 断开连接期间,worktree 内的编辑可以继续正常工作。在 Claude Desktop v2.37337.0 之前,仅在 Linux 远程机器上如此。1188 在 Linux 或 macOS 远程计算机上,该检查不经过 Desktop,因此在 Desktop 断开连接期间,worktree 内的编辑可以继续工作。在 Claude Desktop v2.37337.0 之前,这仅适用于 Linux 远程计算机。

1037 1189 

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

1039 1191 

1040 * **内置 SSH 客户端**:Desktop 使用了它,例如在 Microsoft Store 安装版中、在没有 Microsoft OpenSSH 9.4 或更高版本的 Windows 计算机上,或在 Windows 上使用第三方提供商时的默认情况1192 * **内置 SSH 客户端**:Desktop 使用了它,例如在 Microsoft Store 安装版本中、在没有 Microsoft OpenSSH 9.4 或更高版本的 Windows 计算机上,或在使用第三方提供商的 Windows 上默认使用

1041 * **仓库位置**:仓库是您的主目录、其上级文件夹或 `~/.claude`1193 * **仓库位置**:仓库是您的主目录、其上层文件夹或 `~/.claude`

1042 * **macOS 路径**:在 macOS 远程机器上,仓库位于 `/Volumes` 下,或者仓库或 worktree 路径中的某个文件夹名称包含 `~` 或非 ASCII 字符1194 * **macOS 路径**:在 macOS 远程计算机上,仓库位于 `/Volumes` 下,或者仓库或 worktree 路径中的某个文件夹名称包含 `~` 或非 ASCII 字符

1043 * **文件夹限制**:您的组织限制了会话可以使用的文件夹1195 * **文件夹限制**:您的组织限制了会话可以使用的文件夹

1044 * **企业启动器**:在 Claude Desktop v2.37337.0 之前,您使用 Claude 账户登录,并且您的组织通过[企业启动器](/docs/zh-CN/corporate-launcher)在远程机器上启动 Claude Code1196 * **企业启动器**:在 Claude Desktop v2.37337.0 之前,您使用 Claude 账户登录,且您的组织通过[企业启动器](/docs/zh-CN/corporate-launcher)在远程计算机上启动 Claude Code

1045 1197 

1046 不使用 worktree 的会话没有此类检查,除非您的组织限制了会话可以使用的文件夹。1198 不使用 worktree 的会话没有此类检查,除非您的组织限制了会话可以使用的文件夹。

1047</Accordion>1199</Accordion>


1049<a id="handle-requests-that-arrive-while-you-are-away" />1201<a id="handle-requests-that-arrive-while-you-are-away" />

1050 1202 

1051<h5 id="handle-requests-that-arrive-while-you-are-away">1203<h5 id="handle-requests-that-arrive-while-you-are-away">

1052 处理您离开期间到达的请求1204 处理您不在时到达的请求

1053</h5>1205</h5>

1054 1206 

1055如果 Claude 在 Desktop 断开连接期间需要您的批准或向您提问,Claude 会在远程机器上等待。该等待本身没有时间限制。当 Desktop 重新接入该进程时,会向您显示该请求。如果 Desktop 改为启动一个新进程,您会失去该请求。1207如果 Claude 在 Desktop 断开连接期间需要您的批准或向您提问,Claude 会在远程计算机上等待。该等待本身没有时间限制。当 Desktop 重新接入进程时,它会向您显示该请求。如果 Desktop 改为启动新进程,您将失去该请求。

1056 1208 

1057在任务等待您期间,Desktop 可能会自行重启,例如为了安装更新。如果 Desktop 在 Windows 上运行或使用第三方提供商,您会在该重启后失去该请求。1209在任务等待您期间,Desktop 可能会自行重启,例如为了安装更新。如果 Desktop 在 Windows 上运行或使用第三方提供商,重启后您将失去该请求。

1058 1210 

1059如果您失去了某个请求,请发送一条消息继续。1211如果您失去了请求,请发送消息以继续。

1060 1212 

1061为了减少任务停下来等待您的次数,并在您离开时收到它的消息,请在离开之前设置以下任意一项:1213若要减少任务停下来等待您的频率,并在您不在时收到任务的消息,请在离开前设置以下任一项:

1062 1214 

1063* **自动模式**:如果[您可以使用自动模式](#auto-mode-availability),请选择[自动模式](#choose-a-permission-mode)。在多次被阻止后,会[再次询问您](/docs/zh-CN/permission-modes#when-auto-mode-falls-back)。1215* **自动模式**:如果[您可以使用自动模式](#auto-mode-availability),请选择[自动模式](#choose-a-permission-mode)。在多次被阻止后,[系统会再次询问您](/docs/zh-CN/permission-modes#when-auto-mode-falls-back)。

1064* **允许规则**:在远程机器上的用户设置文件 `~/.claude/settings.json` 中,为任务所需的命令添加[允许规则](/docs/zh-CN/permissions#manage-permissions)。如果您的组织[仅接受来自托管设置的权限规则](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly),请让管理员将它们添加到作用于该远程机器的[托管设置](#managed-settings)中。有关项目 `.claude/settings.json` 中的允许规则,请参阅[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)。1216* **允许规则**:在远程计算机上的用户设置文件 `~/.claude/settings.json` 中,为任务所需的命令添加[允许规则](/docs/zh-CN/permissions#manage-permissions)。如果您的组织[仅接受来自托管设置的权限规则](/docs/zh-CN/settings-reference#allowmanagedpermissionrulesonly),请让管理员将其添加到能传递到远程计算机的[托管设置](#managed-settings)中。有关项目 `.claude/settings.json` 中的允许规则,请参阅[项目允许规则和工作区信任](/docs/zh-CN/permissions#project-allow-rules-and-workspace-trust)。

1065* **代为回应的 hook**:在远程机器上的 `~/.claude/settings.json` 中配置 [`PermissionRequest` hook](/docs/zh-CN/hooks#permissionrequest),代替您允许或拒绝请求1217* **自动应答的 hook**:在远程计算机上的 `~/.claude/settings.json` 中配置 [`PermissionRequest` hook](/docs/zh-CN/hooks#permissionrequest),以代替您允许或拒绝请求

1066* **提醒您的 hook**:在同一文件中配置带有 `permission_prompt` 匹配器的 [`Notification` hook](/docs/zh-CN/hooks#notification),在有请求等待时给自己发送消息1218* **提醒您的 hook**:在同一文件中使用 `permission_prompt` 匹配器配置 [`Notification` hook](/docs/zh-CN/hooks#notification),以便在有请求等待时向自己发送消息

1067* **在 Claude 完成时通知您的 hook**:在同一文件中配置 [`Stop` hook](/docs/zh-CN/hooks#stop),在 Claude 完成响应时给自己发送消息。当 API 错误结束该轮次时,它不会运行。对于这种情况,请配置 [`StopFailure` hook](/docs/zh-CN/hooks#stopfailure)。1219* **在 Claude 完成时通知您的 hook**:在同一文件中配置 [`Stop` hook](/docs/zh-CN/hooks#stop),以便在 Claude 完成响应时向自己发送消息。当 API 错误结束该轮次时,它不会运行。对于这种情况,请配置 [`StopFailure` hook](/docs/zh-CN/hooks#stopfailure)。

1068 1220 

1069如果您的组织[仅运行托管 hook](/docs/zh-CN/settings-reference#allowmanagedhooksonly),请让管理员将该 hook 添加到作用于该远程机器的[托管设置](#managed-settings)中。1221如果您的组织[仅运行托管 hook](/docs/zh-CN/settings-reference#allowmanagedhooksonly),请让管理员将该 hook 添加到能传递到远程计算机的[托管设置](#managed-settings)中。

1070 1222 

1071在任何权限模式下(包括 Bypass permissions),Claude Code 都不会自动批准[少数几种操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。根据权限模式的不同,Claude Code 会拒绝此类操作或询问您,任务随后会等待您的回应。1223Claude Code 在任何权限模式(包括 Bypass permissions)下都不会自动批准[少数操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。根据权限模式的不同,Claude Code 会拒绝此类操作或询问您,任务随后会等待您的回答。

1072 1224 

1073<a id="reconnect-after-sleep-or-a-network-loss" />1225<a id="reconnect-after-sleep-or-a-network-loss" />

1074 1226 

1075<h5 id="reconnect-after-sleep-or-a-network-loss">1227<h5 id="reconnect-after-sleep-or-a-network-loss">

1076 睡眠或网络断开后重新连接1228 在睡眠或网络中断后重新连接

1077</h5>1229</h5>

1078 1230 

1079如果您回来时 Desktop 尚未重新连接,请在会话中发送一条消息。Desktop 只有在无需提示即可登录时才会自行重新连接,例如使用由您的 SSH agent 持有的密钥。1231如果您回来时 Desktop 尚未重新连接,请在会话中发送消息。Desktop 仅在能够无需提示登录的情况下才会自行重新连接,例如使用由您的 SSH agent 持有的密钥。

1080 1232 

1081* **已记住的密码**:您让 Desktop 记住的密码也无需提示即可使用,但对于长时间离开,请优先使用由您的 SSH agent 持有的密钥。如果使用该密码的登录中断或挂起,Desktop 可能会停止重新连接并等待您。1233* **记住的密码**:您让 Desktop 记住的密码也可以无需提示登录,但若长时间离开,最好使用由您的 SSH agent 持有的密钥。如果使用该密码的登录中断或挂起,Desktop 可能会停止重新连接并等待您。

1082* **任何其他提示**:如果远程机器提示输入其他任何内容(例如一次性验证码),您可能会在计算机上收到通知。点击该通知,或在会话中发送一条消息,Desktop 就会显示该提示。1234* **任何其他提示**:如果远程计算机提示输入其他内容(例如一次性验证码),您可能会在计算机上收到通知。点击该通知或在会话中发送消息,Desktop 就会显示该提示。

1083 1235 

1084<Accordion title="如果跳板主机要求登录、中断时间较长、输出缺失或进程已消失">1236<Accordion title="如果跳板机要求登录、中断时间较长、输出缺失或进程已不存在">

1085 - **跳板主机,您离开期间推送停止**:当 Desktop 在 macOS 或 Linux 上运行,且无人回应跳板主机的登录(例如向手机推送通知)时,可能会发生这种情况。此时,在无人使用您的计算机期间,Desktop 会停止重新连接。当您解锁或使用计算机时,您可能会收到另一次推送,因为 Desktop 可能会再次尝试。在三次尝试均无人回应后,它会等待您重试或发送消息。1237 - **跳板机,您不在时推送停止**:当无人响应跳板机的登录(例如向手机发送的推送)时,macOS 或 Linux 上的 Desktop 可能会出现这种情况。此时,在无人使用您的计算机期间,Desktop 会停止重新连接。当您解锁或使用计算机时,您可能会收到另一条推送,因为 Desktop 可能会再次尝试。在三次无人响应的尝试后,它会等到您重试或发送消息。

1086 - **跳板主机,推送不断到来**:在 Desktop 无法判断是否无人回应的情况下(例如 Desktop 在 Windows 上运行时),只要它有可重新接入的进程,无论该进程是否仍在运行,它都会持续尝试。每次尝试您都可能收到另一次推送。要结束这些尝试,请退出 Desktop,但这[可能会让您失去正在运行的任务](#reopen-a-session-after-you-quit-desktop)。1238 - **跳板机,推送持续不断**:在 Desktop 无法判断无人响应的情况下(例如 Windows 上的 Desktop),只要有可重新接入的进程,无论该进程是否仍在运行,它都会持续尝试。每次尝试您都可能收到另一条推送。若要结束尝试,请退出 Desktop,但这[可能会让您失去正在运行的任务](#reopen-a-session-after-you-quit-desktop)。

1087 - **长时间中断**:Desktop 会放慢到大约每五分钟尝试一次。要更快地重新连接,请在会话中重试或发送一条消息,Desktop 会在连接后递送该消息。1239 - **长时间中断**:Desktop 会放慢到大约每五分钟尝试一次。若要更快重新连接,请在会话中重试或发送消息,Desktop 会在连接后投递该消息。

1088 - **输出缺失**:在 Desktop 断开连接期间,辅助程序会将每个会话最近的 Claude Code 输出保存在 16 MiB 的缓冲区中,并丢弃较早的输出。Desktop 重新连接后,会话可能会显示 `Loading recent output from <host>…`。如果 Desktop 无法加载全部输出,您会看到 `Some output produced while you were disconnected may be missing here.` 这一行。该行并不表示任务已停止。1240 - **输出缺失**:在 Desktop 断开连接期间,辅助程序会在 16 MiB 缓冲区中保留每个会话最近的 Claude Code 输出,并丢弃较早的输出。Desktop 重新连接后,会话可能会显示 `Loading recent output from <host>…`。如果 Desktop 无法加载全部输出,您会看到一行 `Some output produced while you were disconnected may be missing here.`。该行并不表示任务已停止。

1089 - **进程已消失**:如果 Desktop 重新连接时进程已消失,Desktop 可以根据对话保存的历史记录启动一个新进程,并告诉 Claude 继续该任务。如果进程不断结束,或 Desktop 使用第三方提供商,Desktop 不会自行继续该任务。请发送一条消息继续。1241 - **进程已不存在**:如果 Desktop 重新连接时进程已不存在,Desktop 可以根据对话已保存的历史记录启动新进程,并让 Claude 继续该任务。如果进程不断结束,或 Desktop 使用第三方提供商,Desktop 不会自行继续该任务。请发送消息以继续。

1090</Accordion>1242</Accordion>

1091 1243 

1092<a id="reopen-a-session-after-you-quit-desktop" />1244<a id="reopen-a-session-after-you-quit-desktop" />


1095 退出 Desktop 后重新打开会话1247 退出 Desktop 后重新打开会话

1096</h5>1248</h5>

1097 1249 

1098退出 Desktop 后,任务会在远程机器上继续运行,直到完成、需要您处理,或达到某项[限制](#limits-while-desktop-is-disconnected)。1250退出 Desktop 后,任务会继续在远程计算机上运行,直到完成、需要您处理或达到某项[限制](#limits-while-desktop-is-disconnected)。

1099 1251 

1100* **Desktop 在 macOS 或 Linux 上,使用 Claude 账户**:启动 Desktop 并打开该会话。当 Desktop 能够重新接入该进程时,您就能取回正在运行的任务。它并不总能重新接入,例如在某些 Desktop 更新之后,或在您的组织更改其托管设置之后。1252* **macOS 或 Linux 上的 Desktop,使用 Claude 账户**:启动 Desktop 并打开会话。当 Desktop 能够重新接入进程时,您会重新获得正在运行的任务。它并不总能重新接入,例如在某些 Desktop 更新之后,或在您的组织更改其托管设置之后。

1101* **在 macOS 或 Linux 上,Desktop 无法重新接入时**:Desktop 会结束该进程,并根据对话保存的历史记录启动一个新进程。您正在运行的任务会停止,并且您会失去任何正在等待您的批准或问题。更新之后,Desktop 随后可以告诉 Claude 继续。如果任务一直处于停止状态,请发送一条消息。1253* **在 macOS 或 Linux 上,Desktop 无法重新接入时**:Desktop 会结束该进程,并根据对话已保存的历史记录启动新进程。您正在运行的任务会停止,并且您会失去任何正在等待您处理的批准或问题。更新后,Desktop 随后可能会让 Claude 继续。如果任务一直处于停止状态,请发送消息。

1102* **Desktop 在 Windows 上,或在任何平台上使用第三方提供商**:请仅在您预计任务已完成时再次启动 Desktop。您无法取回正在运行的任务,因为 Desktop 在退出后从不重新接入。它会在会话打开时结束该进程,而这可能在 Desktop 启动时就发生。请发送一条消息继续。1254* **Windows 上的 Desktop,或在任何平台上使用第三方提供商**:仅在您预计任务已完成时再启动 Desktop。您无法重新获得正在运行的任务,因为 Desktop 退出后从不重新接入。它会在会话打开时结束该进程,而这可能在 Desktop 启动时就发生。请发送消息以继续。

1103 1255 

1104对于第三方部署,请参阅 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。1256有关第三方部署,请参阅 [3P 上 Claude Desktop 中的 SSH 远程会话](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。

1105 1257 

1106<Warning>1258<Warning>

1107 当某个对话的 Claude Code 进程仍在运行时,请不要在远程机器上为其运行 [`claude --resume`](/docs/zh-CN/cli-reference#cli-flags)。Claude Code 不会阻止您,之后两个进程都会写入同一个对话。如果不确定,请添加 `--fork-session`,它会在对话的副本中继续,但两个进程仍会处理相同的文件。1259 当对话的 Claude Code 进程仍在运行时,请勿在远程计算机上为该对话运行 [`claude --resume`](/docs/zh-CN/cli-reference#cli-flags)。Claude Code 不会阻止您,此时两个进程会写入同一个对话。如果您不确定,请添加 `--fork-session`,它会在对话的副本中继续,但两个进程仍会处理相同的文件。

1108</Warning>1260</Warning>

1109 1261 

1110<h4 id="choose-where-ssh-session-worktrees-go">1262<h4 id="choose-where-ssh-session-worktrees-go">

1111 选择 SSH 会话 worktree 的位置1263 选择 SSH 会话 worktree 的位置

1112</h4>1264</h4>

1113 1265 

1114除非您的组织限制了会话可以使用的文件夹,否则新的 SSH 会话会在以下各项中第一个已设置的位置创建其 [worktree](#work-in-parallel-with-sessions):1266除非您的组织限制了会话可以使用的文件夹,新的 SSH 会话会在以下各项中第一个已设置的位置创建其 [worktree](#work-in-parallel-with-sessions):

1115 1267 

11161. SSH 连接上的 **Worktree folder**12681. SSH 连接上的 **Worktree folder**

11172. 远程机器上 `~/.claude/settings.json` 中的 [`worktree.location`](/docs/zh-CN/settings-reference#worktree-location)12692. 远程计算机上 `~/.claude/settings.json` 中的 [`worktree.location`](/docs/zh-CN/settings-reference#worktree-location)

11183. `<project-root>/.claude/worktrees/`,即默认位置12703. `<project-root>/.claude/worktrees/`,即默认位置

1119 1271 

1120每个项目在您设置的文件夹中都有自己的子文件夹,因此使用 `~/worktrees` 时,worktree 的路径为 `~/worktrees/<project>-<id>/<worktree-name>`。如果您设置的文件夹位于项目内部,Desktop 会对该项目忽略它并使用默认位置。在 [Windows 远程机器](#windows-remote-machines)上,Desktop 始终使用默认位置。1272每个项目都会在您设置的文件夹中拥有自己的子文件夹,因此如果设置为 `~/worktrees`,worktree 的路径为 `~/worktrees/<project>-<id>/<worktree-name>`。如果您设置的文件夹位于项目内部,Desktop 会对该项目忽略它并使用默认位置。在 [Windows 远程计算机](#windows-remote-machines)上,Desktop 始终使用默认位置。

1121 1273 

1122要为您之前添加的连接或由您的组织管理的连接设置 **Worktree folder**,请在环境下拉菜单中将鼠标悬停在该连接上,然后点击齿轮图标。1274若要为您之前添加的连接或您的组织管理的连接设置 **Worktree folder**,请在环境下拉菜单中将鼠标悬停在该连接上,然后点击齿轮图标。

1123 1275 

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

1125 1277 

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

1127 远程机器上的文件和进程1279 远程计算机上的文件和进程

1128</h4>1280</h4>

1129 1281 

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

1131 1283 

1132| 文件夹 | 内容 |1284| 文件夹 | 内容 |

1133| - | - |1285| - | - |

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

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

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

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

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

1139 1291 

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

1141 1293 

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

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

1144 1296 

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

1146 1298 

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

1148 1300 

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

1150 1302 

1151<Steps>1303<Steps>

1152 <Step title="退出 Desktop">1304 <Step title="退出 Desktop">

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

1154 </Step>1306 </Step>

1155 1307 

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

1157 在远程机器上以该用户身份登录,对 [`pgrep`](#files-and-processes-on-the-remote-machine) 列出的每个进程 ID 运行 `kill`。1309 以该用户身份登录远程计算机,对 [`pgrep`](#files-and-processes-on-the-remote-machine) 列出的每个 Claude Code 进程的 ID 运行 `kill`。待这些进程从列表中消失后,再对每个 `server` 进程的 ID 运行 `kill`。如果您先结束 `server` 进程,Claude Code 正在运行的命令可能会继续运行。

1310 

1311 然后列出该用户的剩余进程(例如使用 `ps -u "$(id -un)" -f`),并结束您识别出由 Claude Code 启动的任何进程。它留在后台的程序可能会在它结束后继续运行,且不在 `pgrep` 列表中。

1158 </Step>1312 </Step>

1159 1313 

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

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

1162 </Step>1316 </Step>

1163</Steps>1317</Steps>

1164 1318 


1166 结束单个会话的进程1320 结束单个会话的进程

1167</h5>1321</h5>

1168 1322 

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

1170 1324 

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

1172 1326 

1327<h5 id="see-which-user-the-processes-run-as">

1328 查看进程以哪个用户身份运行

1329</h5>

1330 

1331辅助程序和 Claude Code 以 Desktop 通过 SSH 登录所用的用户身份运行。安装和启动它们不需要 `sudo`。若要检查用户,请在远程计算机上使用 [`pgrep`](#files-and-processes-on-the-remote-machine) 列出的进程 ID 运行 `ps -o user= -p`。

1332 

1333Claude Code 启动的程序(例如 shell 命令和 MCP 服务器)也以该用户身份启动。请像审查在那里运行命令的人员一样,审查该用户在远程计算机上的权限,包括其 `sudo` 规则。

1334 

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

1174 查看谁连接了远程机器1336 查看谁连接了远程计算机

1337</h5>

1338 

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

1340 

1341您不会在 Claude Code 的[指标和事件](/docs/zh-CN/monitoring-usage#available-metrics-and-events)中找到 Desktop 的 SSH 连接。要从中了解某个 SSH 会话在哪台远程机器上运行,请参阅[将遥测归因于 Desktop SSH 会话](/docs/zh-CN/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions)。有关 Desktop 自身的连接记录,请参阅[获取 Desktop 针对 SSH 问题的日志](#get-desktops-logs-for-an-ssh-problem)。

1342 

1343<h4 id="connections-that-close-before-login">

1344 在登录前关闭的连接

1345</h4>

1346 

1347如果 SSH 服务器的日志显示有在任何登录之前就关闭的连接,它们可能是 Desktop 对 SSH 端口的测试。Desktop 会测试机器是否响应,例如在与其连接失败之后。它会打开到该端口的连接并立即关闭,不发送任何内容。预计会有一次或连续多次测试,例如约两分钟内八次。

1348 

1349如果没有任何机制因此类连接而封禁或拒绝地址,您无需对 Desktop 的测试采取任何措施。如果 Desktop 连接所用的地址被拒绝或封禁,请检查 [SSH 服务器本身是否拒绝该地址](#check-whether-the-ssh-server-itself-refuses-the-address)以及 [fail2ban 是否统计 Desktop 的测试](#check-whether-fail2ban-counts-desktops-tests)。

1350 

1351<h5 id="recognize-a-test-in-the-ssh-server’s-log">

1352 在 SSH 服务器日志中识别测试

1175</h5>1353</h5>

1176 1354 

1177要了解谁连接了某台远程机器,请阅读该机器上 SSH 服务器的日志,其中来自 Desktop 的登录看起来与来自终端的登录相同。在 macOS 或 Linux 上使用 Desktop 时,每次 Desktop 连接都会产生一条记录,而不是每个会话一条。1355将您日志中的行与 Linux 上的 OpenSSH 服务器在默认 `LogLevel` 下为测试写入的行进行比较,请参阅与您服务器版本对应的行。如果服务器的问候消息在 Desktop 关闭连接之前到达,您看到的可能是最后一列中的行:

1356 

1357| OpenSSH 版本 | 测试产生的行 | 问候消息先到达时的行 |

1358| - | - | - |

1359| 6.6 至 7.9 | 一行包含 `Did not receive identification string from 203.0.113.7` 的内容 | 相同的行 |

1360| 8.0 至 8.2 | `error: kex_exchange_identification: Connection closed by remote host` | `error: kex_exchange_identification: read: Connection reset by peer` |

1361| 8.3 至 9.4 | `error: kex_exchange_identification: Connection closed by remote host`,然后是 `Connection closed by 203.0.113.7 port 51234` | `error: kex_exchange_identification: read: Connection reset by peer`,然后是 `Connection reset by 203.0.113.7 port 51234` |

1362| 9.5 至 10.2 | `Connection closed by 203.0.113.7 port 51234` | `error: kex_exchange_identification: read: Connection reset by peer`,然后是 `Connection reset by 203.0.113.7 port 51234` |

1363| 10.3 至 10.5 | `Connection closed by 203.0.113.7 port 51234 [preauth]` | `error: kex_exchange_identification: read: Connection reset by peer [preauth]`,然后是 `Connection reset by 203.0.113.7 port 51234 [preauth]` |

1364 

1365其他打开端口后又关闭的程序也可能留下相同的行。当某行包含地址时,请检查它是否是装有 Desktop 的计算机连接所用的地址。

1366 

13678.0 至 8.2 的行不包含地址。要获取地址,请在 `sshd_config` 中设置 `LogLevel VERBOSE`,并以 root 身份运行 `sshd -T | grep -i loglevel`。如果它输出 `loglevel VERBOSE`,请重新加载 SSH 服务器。然后在测试的行之前查找包含 `Connection from 203.0.113.7 port 51234` 的行。

1368 

1369<a id="check-whether-the-ssh-server-itself-refuses-the-address" />

1370 

1371<h5 id="check-whether-the-ssh-server-itself-refuses-the-address">

1372 检查 SSH 服务器本身是否拒绝该地址

1373</h5>

1374 

1375如果来自许多装有 Desktop 的计算机共用的某个地址的连接被拒绝,请在 SSH 服务器的日志中查找以如下内容结尾的行:

1376 

1377```text theme={null}

1378drop connection #0 from [203.0.113.7]:51234 on [192.0.2.10]:22 penalty: connections without attempting authentication

1379```

1380 

1381在默认 `LogLevel` 下,OpenSSH 9.8 及更高版本在因连接未尝试登录即关闭(正如 Desktop 的测试那样)而拒绝某个地址时,可能会写入这样的行。在默认设置下,仅凭几次测试不会出现这样的行。

1382 

1383要防止拒绝,请在 `sshd_config` 中将 `PerSourcePenaltyExemptList` 设置为人们连接所用的地址,例如 `PerSourcePenaltyExemptList 203.0.113.7`。之后服务器不会对这些地址施加任何惩罚,包括针对登录失败的惩罚。要检查该文件,请以 root 身份运行 `sshd -T | grep -i persourcepenalt`。如果它输出了您的列表,请重新加载 SSH 服务器。

1384 

1385<a id="check-whether-fail2ban-counts-desktops-tests" />

1386 

1387<h5 id="check-whether-fail2ban-counts-desktop’s-tests">

1388 检查 fail2ban 是否统计 Desktop 的测试

1389</h5>

1390 

1391如果 fail2ban 0.10.5 或更高版本封禁了 Desktop 连接所用的地址,请在 `jail.conf`、`jail.local` 或 `jail.d/` 下找到您 jail 的模式:

1392 

1393* **在方括号中指定模式的 `filter` 行**,例如 `filter = sshd[mode=aggressive]`:使用该模式。

1394* **仅有带 `[mode=%(mode)s]` 的默认 `filter` 行**:使用 `mode` 行中的值,如果没有该行则为 `normal`。

1395 

1396如果模式为 `normal`,fail2ban 不会统计 Desktop 测试产生的行,因此请查找封禁的其他原因。

1397 

1398对于其他模式,请将您自己日志中的行复制到远程机器上的一个文件中。完整复制每一行(从日期到行尾),如果某次测试留下两行,则两行都要复制。在那里使用该文件和您 jail 的模式(例如 `aggressive`)运行 `fail2ban-regex`:

1399 

1400```bash theme={null}

1401fail2ban-regex -o ip lines.log "sshd[mode=aggressive]"

1402```

1403 

1404对于 fail2ban 统计的每次失败,该命令都会在单独一行输出地址,例如 `203.0.113.7`。在这种情况下,请[防止封禁](#prevent-a-ban-by-fail2ban)。如果它没有输出任何内容,则 fail2ban 在该模式下不会统计这些行,因此请查找封禁的其他原因。

1405 

1406<a id="prevent-a-ban-by-fail2ban" />

1407 

1408<h5 id="prevent-a-ban-by-fail2ban">

1409 防止 fail2ban 封禁

1410</h5>

1411 

1412要防止 fail2ban 因 Desktop 的测试而封禁地址,请更改 jail 的两项设置之一,每项都有代价:

1413 

1414* **`mode`**:在您的 jail 设置它的任何位置(`mode` 行中或诸如 `filter = sshd[mode=aggressive]` 的行的方括号中)将其设置为 `normal`。您会放弃只有其他模式才会进行的所有统计,例如对连接后未尝试登录即离开的客户端的统计。

1415* **`ignoreip`**:将其设置为人们连接所用的地址,例如 `ignoreip = 203.0.113.7`。之后 fail2ban 不会统计来自这些地址的任何内容,包括登录失败。

1178 1416 

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

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

1181</h4>1419</h4>

1182 1420 

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

1184 1422 

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

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

1187</h4>1425</h4>

1188 1426 

1189`claude://code/new` 链接会打开 Desktop 的新会话页面,并且可以指定一个 SSH 连接。将此类链接放入运维手册、仪表板或 wiki 页面中,即可打开已为正确的机器和文件夹设置好的 Desktop。对于会去除此类链接的平台,请参阅[链接显示为纯文本而不可点击](/docs/zh-CN/deep-links#the-link-renders-as-plain-text-instead-of-being-clickable)。1427`claude://code/new` 链接会打开 Desktop 的新会话页面,并且可以指定 SSH 连接。将此类链接放在运维手册、仪表板或 wiki 页面中,即可打开已为正确的计算机和文件夹设置好的 Desktop。对于会去除此类链接的平台,请参阅[链接显示为纯文本而不是可点击链接](/docs/zh-CN/deep-links#the-link-renders-as-plain-text-instead-of-being-clickable)。

1190 1428 

1191SSH 链接需要 Claude Desktop v2.110.0 或更高版本。1429SSH 链接需要 Claude Desktop v2.110.0 或更高版本。

1192 1430 

1193以下链接指定了 `build.example.com` 上的用户 `dev`、端口 2222 和文件夹 `/srv/payments`,并填入一条提示词:1431以下链接指定了 `build.example.com` 上的用户 `dev`、端口 2222 和文件夹 `/srv/payments`,并填入了一条提示词:

1194 1432 

1195```text theme={null}1433```text theme={null}

1196claude://code/new?ssh_host=dev%40build.example.com&ssh_port=2222&ssh_folder=/srv/payments&q=Investigate%20the%20failed%20deploy1434claude://code/new?ssh_host=dev%40build.example.com&ssh_port=2222&ssh_folder=/srv/payments&q=Investigate%20the%20failed%20deploy

1197```1435```

1198 1436 

1199SSH 链接接受以下参数,其中只有 `ssh_host` 是必需的:1437SSH 链接接受以下参数,只有 `ssh_host` 是必需的:

1200 1438 

1201| 参数 | 值 |1439| 参数 | 值 |

1202| :- | :- |1440| :- | :- |

1203| `ssh_host` | `host` 或 `user@host`,写法与 **SSH host** 字段相同。该值不能以 `-` 开头,主机部分只能包含字母、数字、`.`、`_`、`:` 和 `-` |1441| `ssh_host` | `host` 或 `user@host`,写法与 **SSH host** 字段中相同。该值不能以 `-` 开头,且主机部分只能包含字母、数字、`.`、`_`、`:` 和 `-` |

1204| `ssh_port` | 1 到 65535 之间的端口号 |1442| `ssh_port` | 1 到 65535 之间的端口号 |

1205| `ssh_folder` | 远程机器上的文件夹。以 `/` 或 `~/` 开头,或使用 `~` |1443| `ssh_folder` | 远程计算机上的文件夹。以 `/` 或 `~/` 开头,或使用 `~` |

1206| `q` | 用于输入框的 URL 编码文本 |1444| `q` | 用于输入框的 URL 编码文本 |

1207 1445 

1208`~/.ssh/config` 中的别名仅对拥有该条目的人可用作 `ssh_host`。要匹配用户已有的连接,请在链接中使用与该连接相同的用户、主机和端口。1446来自 `~/.ssh/config` 的别名只有对拥有该条目的人才能作为 `ssh_host` 使用。若要匹配用户已有的连接,请为链接提供与该连接相同的用户、主机和端口。

1209 1447 

1210当您打开链接时,Desktop 会在选择连接之前要求您确认:1448打开链接时,Desktop 会在选择连接之前要求您确认:

1211 1449 

1212* **您已有的连接**:如果主机、用户和端口与您的某个连接匹配,Desktop 会询问是否使用它,并向您显示该连接的名称和主机,如果链接指定了文件夹,还会显示文件夹。1450* **您已有的连接**:如果主机、用户和端口与您的某个连接匹配,Desktop 会询问是否使用它,并向您显示该连接的名称和主机,如果链接指定了文件夹,还会显示文件夹。

1213* **新连接**:否则,Desktop 会打开用于添加 SSH 连接的对话框。当您添加连接时,Desktop 会在保存任何内容之前询问是否连接,并向您显示链接中的主机,如果链接指定了端口和文件夹,还会显示它们。1451* **新连接**:否则,Desktop 会打开添加 SSH 连接的对话框。当您添加连接时,Desktop 会在保存任何内容之前询问是否连接,并向您显示链接中的主机,如果链接指定了端口和文件夹,还会显示它们。

1214 1452 

1215在您确认之前,Desktop 不会保存链接中的主机、端口或文件夹,也不会使用它们选择或打开连接。如果已经选择了某个 SSH 连接,新会话页面仍可以像没有链接时一样自行连接到该连接,即使链接指定了相同的主机也是如此。链接不能携带密钥文件、密码或命令。1453在您确认之前,Desktop 不会保存链接中的主机、端口或文件夹,也不会使用它们选择或打开连接。如果已选择了某个 SSH 连接,新会话页面仍可能像没有链接时一样自行连接到该连接,即使链接指定的是同一主机。链接不能携带密钥文件、密码或命令。

1216 1454 

1217任何人都可以编写链接,因此请检查它填入的内容:1455任何人都可以编写链接,因此请检查它填入了什么:

1218 1456 

1219* **确认之前**:检查主机和文件夹。1457* **确认之前**:检查主机和文件夹。

1220* **发送之前**:检查提示词和所选环境。1458* **发送之前**:检查提示词和所选环境。

1221 1459 

1222Desktop 会在链接打开时填入提示词,替换您尚未发送的任何文本,并且绝不会替您发送。它将提示词视为纯文本,因此开头的 `/` 或 `!` 以及 `@` 文件提及不会作为命令或提及生效。如果您取消,提示词会保留在输入框中,您之前选择的环境也不会改变。1460Desktop 会在链接打开时填入提示词,替换您尚未发送的任何文本,并且从不替您发送。它将提示词视为纯文本,因此开头的 `/` 或 `!` 以及 `@` 文件提及不会作为命令或提及生效。如果您取消,提示词会保留在输入框中,且您之前选择的环境不会改变。

1223 1461 

1224链接不会绕过 [`sshHostAllowlist`](#restrict-which-ssh-hosts-users-can-connect-to)。Desktop 会在连接时检查允许列表。1462链接不会绕过 [`sshHostAllowlist`](#restrict-which-ssh-hosts-users-can-connect-to)。Desktop 会在连接时检查允许列表。

1225 1463 

1226如果链接打开了 Desktop 却没有出现关于连接的对话框,请检查是否存在以下原因之一:1464如果链接打开了 Desktop 但没有出现有关连接的对话框,请查找以下原因之一:

1227 1465 

1228* **您已退出登录**:请登录,然后再次打开链接。1466* **您已退出登录**:登录后再次打开链接。

1229* **另一个对话框处于打开状态**:关闭它,然后再次打开链接。1467* **另一个对话框处于打开状态**:关闭它,然后再次打开链接。

1230* **链接无效**:Desktop 会显示一条消息说明需要修正的内容,并且不会填入提示词。1468* **链接无效**:Desktop 会显示一条消息说明需要修复的内容,并且不会填入提示词。

1231* **Desktop 版本早于 v2.110.0**:早期版本会忽略 SSH 参数,仅带着提示词打开新会话页面。1469* **Desktop 版本早于 v2.110.0**:较早的版本会忽略 SSH 参数,仅带着提示词打开新会话页面。

1232* **SSH 会话已关闭**:如果您的管理员将允许列表设置为空数组,Desktop 会拒绝 SSH 链接。1470* **SSH 会话已关闭**:如果您的管理员将允许列表设置为空数组,Desktop 会拒绝 SSH 链接。

1233 1471 

1234<h4 id="pre-configure-ssh-connections-for-your-team">1472<h4 id="pre-configure-ssh-connections-for-your-team">

1235 为你的团队预配置 SSH 连接1473 为您的团队预配置 SSH 连接

1236</h4>1474</h4>

1237 1475 

1238管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中设置 `sshConfigs` 来向团队成员分发 SSH 连接。以这种方式定义的连接会自动出现在每个用户的环境下拉菜单中,并显示为托管的。用户可以选择它们并为其[设置自己的 **Worktree folder**](#choose-where-ssh-session-worktrees-go),但不能在应用中编辑其他任何内容或删除它们。1476管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中设置 `sshConfigs`,向团队成员分发 SSH 连接。以这种方式定义的连接会自动出现在每个用户的环境下拉菜单中,并显示为托管连接。用户可以选择它们,并为其[设置自己的 **Worktree folder**](#choose-where-ssh-session-worktrees-go),但无法在应用中编辑其他任何内容或删除它们。

1239 1477 

1240以下示例预配置了一个单个连接:1478以下示例预配置了一个连接:

1241 1479 

1242```json theme={null}1480```json theme={null}

1243{1481{


1253}1491}

1254```1492```

1255 1493 

1256每个条目需要 `id`、`name` 和 `sshHost`。`sshPort` 和 `sshIdentityFile` 字段是可选的。用户也可以将 `sshConfigs` 添加到他们自己的 `~/.claude/settings.json`。1494每个条目都需要 `id`、`name` 和 `sshHost`。`sshPort` 和 `sshIdentityFile` 字段是可选的。用户也可以将 `sshConfigs` 添加到自己的 `~/.claude/settings.json` 中。

1257 1495 

1258如果您在 `sshHost` 中省略 `user@`,Desktop 会以每位开发者的 `~/.ssh/config` 为该主机设置的 `User` 身份连接,否则以他们在自己计算机上的用户名连接。1496如果您在 `sshHost` 中省略 `user@`,Desktop 会以每位开发者的 `~/.ssh/config` 为该主机设置的 `User` 身份连接,否则以其在自己计算机上的用户名连接。

1259 1497 

1260<h4 id="restrict-which-ssh-hosts-users-can-connect-to">1498<h4 id="restrict-which-ssh-hosts-users-can-connect-to">

1261 限制用户可以连接的 SSH 主机1499 限制用户可以连接的 SSH 主机

1262</h4>1500</h4>

1263 1501 

1264管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中设置 `sshHostAllowlist` 来将 Desktop 的 SSH 会话限制为一组已批准的主机。设置后,用户只能连接到其解析的主机名与其中一个模式匹配的主机。将其设置为空数组可禁用 SSH 会话。[`sshHostAllowlist` 参考条目](/docs/zh-CN/settings-reference#sshhostallowlist)说明了空数组如何与其他托管来源中的列表组合。1502管理员可以通过在[托管设置](/docs/zh-CN/managed-settings)中设置 `sshHostAllowlist`,将 Desktop 的 SSH 会话限制为一组已批准的主机。设置后,用户只能连接到解析后的主机名与其中某个模式匹配的主机。将其设置为空数组可禁用 SSH 会话。[`sshHostAllowlist` 参考条目](/docs/zh-CN/settings-reference#sshhostallowlist)说明了空数组如何与其他托管来源中的列表组合。

1265 1503 

1266以下示例允许连接到 `devboxes.example.com` 下的任何主机以及单个命名的堡垒主机:1504以下示例允许连接到 `devboxes.example.com` 下的任何主机以及一个指定的堡垒主机:

1267 1505 

1268```json theme={null}1506```json theme={null}

1269{1507{


1272```1510```

1273 1511 

1274<Warning>1512<Warning>

1275 如果您的组织提供[服务器托管设置](/docs/zh-CN/server-managed-settings),请在那里设置 `sshHostAllowlist`。默认情况下,Desktop 仅从[提供策略键的最高优先级托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)读取该键。如果该来源未设置该键,Desktop 会忽略较低优先级的 MDM 策略或托管设置文件中的列表,并将该键视为[未设置](/docs/zh-CN/settings-reference#sshhostallowlist)。Desktop 不会显示任何警告。1513 如果您的组织提供[服务器托管设置](/docs/zh-CN/server-managed-settings),请在其中设置 `sshHostAllowlist`。默认情况下,Desktop 仅从[提供策略键的最高优先级托管来源](/docs/zh-CN/managed-settings#how-claude-code-combines-managed-sources)读取该键。如果该来源未设置该键,Desktop 会忽略较低优先级的 MDM 策略或托管设置文件中的列表,并将该键视为[未设置](/docs/zh-CN/settings-reference#sshhostallowlist)。Desktop 不会显示任何警告。

1276 1514 

1277 同时,请在每个用户的机器上保留相同的列表,放在该机器上最高优先级的 MDM 策略或托管设置文件中。Desktop 在启动时获取服务器托管设置,并且不保留缓存副本,因此在获取成功之前,适用的是该机器上的列表。1515 同时,请在每个用户计算机上的最高优先级 MDM 策略或托管设置文件中保留相同的列表。Desktop 在启动时获取服务器托管设置,且不保留缓存副本,因此在获取成功之前,适用的是该计算机上的列表。

1278</Warning>1516</Warning>

1279 1517 

1280模式不区分大小写。`*` 匹配任何主机,`*.example.com` 匹配 `example.com` 和任何子域。其他任何内容都是精确匹配。检查针对通过 `ssh -G` 进行 `~/.ssh/config` 解析后的主机名运行,因此允许 `Host` 别名和 `ProxyCommand`/`ProxyJump` 条目,只要解析的 `HostName` 匹配。1518模式不区分大小写。`*` 匹配任何主机,`*.example.com` 匹配 `example.com` 及其任何子域。其他任何内容均为精确匹配。检查针对的是通过 `ssh -G` 进行 `~/.ssh/config` 解析后的主机名,因此只要解析后的 `HostName` 匹配,就允许使用 `Host` 别名和 `ProxyCommand`/`ProxyJump` 条目。

1281 1519 

1282`sshHostAllowlist` 仅从托管设置中读取;用户或项目设置中的值被忽略。只有 Claude Desktop 应用遵守此设置;Claude Code CLI 和 IDE 扩展不读取它,它也不限制通过 Bash 工具运行的 `ssh` 命令。它管理 Desktop 应用连接到的主机,而不是网络出口,因此如果你需要硬边界,请将其与你的组织的网络或零信任控制配对。1520`sshHostAllowlist` 仅从托管设置中读取;用户或项目设置中的值会被忽略。只有 Claude Desktop 应用遵循此设置;Claude Code CLI 和 IDE 扩展不会读取它,并且它不会限制通过 Bash 工具运行的 `ssh` 命令。它管控的是 Desktop 应用连接到哪些主机,而不是网络出站流量,因此如果您需要硬性边界,请将其与您组织的网络或零信任控制措施结合使用。

1283 1521 

1284<h4 id="turn-off-local-sessions-and-distribute-ssh-connections">1522<h4 id="turn-off-local-sessions-and-distribute-ssh-connections">

1285 关闭本地会话并分发 SSH 连接1523 关闭本地会话并分发 SSH 连接

1286</h4>1524</h4>

1287 1525 

1288要关闭本地会话并将 SSH 会话限制为您选择的主机,请同时部署 [`disableDesktopLocalSessions`](/docs/zh-CN/settings-reference#disabledesktoplocalsessions)、[`sshConfigs`](#pre-configure-ssh-connections-for-your-team) 和 [`sshHostAllowlist`](#restrict-which-ssh-hosts-users-can-connect-to)。1526若要关闭本地会话并将 SSH 会话限制为您选择的主机,请同时部署 [`disableDesktopLocalSessions`](/docs/zh-CN/settings-reference#disabledesktoplocalsessions)、[`sshConfigs`](#pre-configure-ssh-connections-for-your-team) 和 [`sshHostAllowlist`](#restrict-which-ssh-hosts-users-can-connect-to)。

1289 1527 

1290<Note>1528<Note>

1291 此设置适用于使用 Claude 账户登录的用户。使用[第三方提供商](/docs/zh-CN/third-party-integrations)时,SSH 会话默认关闭,而设置 `sshHostAllowlist` 可能会将其打开。在部署这些键之前,请阅读 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。1529 此方案适用于使用 Claude 账户登录的用户。使用[第三方提供商](/docs/zh-CN/third-party-integrations)时,SSH 会话默认关闭,而设置 `sshHostAllowlist` 可以开启它们。在部署这些键之前,请阅读 [3P 上 Claude Desktop 中的 SSH 远程会话](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)。

1292</Note>1530</Note>

1293 1531 

1294以下示例关闭本地会话、添加一个连接,并将 SSH 会话限制为该连接的主机:1532以下示例关闭本地会话、添加一个连接,并将 SSH 会话限制为该连接的主机:


1311 1549 

1312* **CLI**:这些键都不会阻止开发者在自己的计算机上运行 Claude Code CLI1550* **CLI**:这些键都不会阻止开发者在自己的计算机上运行 Claude Code CLI

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

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

1315 1553 

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

1317 1555 

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

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

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

1321 1559 

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

1323 1561 

1324要确认设置已生效,请检查开发者的计算机:1562若要确认设置已生效,请检查开发者的计算机:

1325 1563 

1326<Steps>1564<Steps>

1327 <Step title="检查环境下拉菜单">1565 <Step title="检查环境下拉菜单">

1328 退出并重新打开 Desktop,然后在输入框中打开环境下拉菜单。**Local** 呈灰显状态,**Shared Dev VM** 出现在 **SSH** 下。如果 **Local** 仍然可用,请检查 Desktop 版本、文件是否为有效的 JSON,以及计算机读取的是哪个托管来源。1566 退出并重新打开 Desktop,然后打开输入框中的环境下拉菜单。**Local** 呈灰色,且 **Shared Dev VM** 出现在 **SSH** 下。如果 **Local** 仍然可用,请检查 Desktop 版本、文件是否为有效的 JSON,以及计算机读取的是哪个托管来源。

1329 </Step>1567 </Step>

1330 1568 

1331 <Step title="添加一个不在允许列表中的主机">1569 <Step title="添加不在允许列表中的主机">

1332 使用不在允许列表中的主机名(例如 `other.example.com`)[添加 SSH 连接](#ssh-sessions)。Desktop 会保存该连接但拒绝连接,并提示您的组织设置不允许该连接。1570 使用不在允许列表中的主机名(例如 `other.example.com`)[添加 SSH 连接](#ssh-sessions)。Desktop 会保存该连接但拒绝连接,并说明您组织的设置不允许该连接。

1333 </Step>1571 </Step>

1334</Steps>1572</Steps>

1335 1573 


1682 1920 

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

1684 1922 

1923<a id="get-desktops-logs-for-an-ssh-problem" />

1924 

1925<h3 id="get-desktop’s-logs-for-an-ssh-problem">

1926 获取 SSH 问题的 Desktop 日志

1927</h3>

1928 

1929`ssh.log` 是 Desktop 对其 SSH 连接的记录,它包含在您从 **Help** 菜单保存的 Desktop 日志 zip 文件中。要保存该文件,请打开 **Help > Troubleshooting** 并选择适用于您系统的项目:

1930 

1931* **macOS**:**Show Logs in Finder**

1932* **Windows**:**Show Logs in File Explorer**

1933* **Linux**:**Show Logs in File Manager**

1934 

1935在发送这些文件之前,请先检查其内容,因为其中可能包含来自您环境的名称和其他详细信息。`<host>` 和 `<user>` 代表 Desktop 已替换的名称。Desktop 不会替换所有名称,SSH 主机名或用户名仍可能按原样出现。如果您将 zip 文件发送给他人,请告诉对方哪个主机在何时失败,因为日志中可能不会提及该主机。

1936 

1937该 zip 文件不包含 Desktop 在远程机器上安装的辅助程序的日志。要同时获取该日志,请从建立连接的用户的主目录中 [`~/.claude/remote/run/`](#files-and-processes-on-the-remote-machine) 下的辅助程序文件夹中复制 `remote-server.log`。在发送之前,也请检查该文件的内容。

1938 

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

1686 应用无法退出1940 应用无法退出

1687</h3>1941</h3>

env-vars.md +3 −1

Details

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

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

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

228| `CLAUDE_CODE_ARTIFACT_PUBLISH_EDITS` | 设置为 `0` 可阻止 Claude 在发布 [Artifact](/docs/zh-CN/artifacts#update-an-artifact) 时对其文件应用小的更改。Claude 随后会使用其文件编辑工具编辑文件,并作为单独的步骤发布。需要 Claude Code v2.1.300 或更高版本 |

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

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

230| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 以 token 为单位设置[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window),范围为 `100000` 到 `1000000`。仅接受纯整数,例如 `500000`:像 `500k` 这样的值会被读取为 `500`,并被限制为 100K 的最小值。有效窗口的上限还受模型上下文窗口限制。优先于 `/autocompact` 命令、`--autocompact` 标志和 `autoCompactWindow` 设置。状态栏的 `used_percentage` 始终以模型的完整上下文窗口为基准进行衡量,因此一旦设置此变量,该百分比将不再指示何时会运行压缩 |231| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 以 token 为单位设置[自动压缩窗口](/docs/zh-CN/model-config#set-the-auto-compact-window),范围为 `100000` 到 `1000000`。仅接受纯整数,例如 `500000`:像 `500k` 这样的值会被读取为 `500`,并被限制为 100K 的最小值。有效窗口的上限还受模型上下文窗口限制。优先于 `/autocompact` 命令、`--autocompact` 标志和 `autoCompactWindow` 设置。状态栏的 `used_percentage` 始终以模型的完整上下文窗口为基准进行衡量,因此一旦设置此变量,该百分比将不再指示何时会运行压缩 |


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

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

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

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

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

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

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


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

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

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

602* 查看 [mod](/docs/zh-CN/plugins/mods/overview#where-mods-run) 在 VS Code 扩展聊天面板中绘制的内容;该 mod 的 hook 仍会运行

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

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

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

errors.md +203 −11

Details

72| `Claude.ai login was rejected — run /login, then /remote-control` | [身份验证](#remote-control-couldnt-refresh-your-login) |72| `Claude.ai login was rejected — run /login, then /remote-control` | [身份验证](#remote-control-couldnt-refresh-your-login) |

73| `OAuth token unavailable — run /login to restore Remote Control` | [身份验证](#remote-control-couldnt-refresh-your-login) |73| `OAuth token unavailable — run /login to restore Remote Control` | [身份验证](#remote-control-couldnt-refresh-your-login) |

74| `Signed out of Claude — run /login, then /remote-control` | [身份验证](#remote-control-couldnt-refresh-your-login) |74| `Signed out of Claude — run /login, then /remote-control` | [身份验证](#remote-control-couldnt-refresh-your-login) |

75| `Remote Control could not renew this computer's connection` | [身份验证](#remote-control-could-not-renew-this-computers-connection) |

75| `signed-in claude.ai account or organization changed on this machine` | [身份验证](#remote-control-stopped-because-the-signed-in-account-changed) |76| `signed-in claude.ai account or organization changed on this machine` | [身份验证](#remote-control-stopped-because-the-signed-in-account-changed) |

76| `Remote Control stopped — the app running this session is now signed in to a different Claude account` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |77| `Remote Control stopped — the app running this session is now signed in to a different Claude account` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |

77| `Remote Control stopped — the app running this session is signed out of Claude` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |78| `Remote Control stopped — the app running this session is signed out of Claude` | [身份验证](#remote-control-stopped-because-the-app-running-the-session-signed-out-or-switched-accounts) |


153| `Request too large` | [请求错误](#request-too-large) |154| `Request too large` | [请求错误](#request-too-large) |

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

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

157| `API Error: an image in the conversation could not be processed and was removed` | [请求错误](#image-was-too-large) |

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

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

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


179| `Effort '<level>' isn't available with thinking turned off on this model` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |181| `Effort '<level>' isn't available with thinking turned off on this model` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |

180| `effort '<level>' is not supported when thinking is disabled` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |182| `effort '<level>' is not supported when thinking is disabled` | [请求错误](#effort-isnt-available-with-thinking-turned-off) |

181| `max_tokens must be greater than thinking.budget_tokens` | [请求错误](#thinking-budget-exceeds-output-limit) |183| `max_tokens must be greater than thinking.budget_tokens` | [请求错误](#thinking-budget-exceeds-output-limit) |

184| `Claude's response exceeded the ... output token maximum` | [请求错误](#response-exceeded-the-output-token-maximum) |

182| `API Error: 400 due to tool use concurrency issues` | [请求错误](#tool-use-or-thinking-block-mismatch) |185| `API Error: 400 due to tool use concurrency issues` | [请求错误](#tool-use-or-thinking-block-mismatch) |

183| `API Error: 400 orphaned tool_result in conversation history` | [请求错误](#tool-use-or-thinking-block-mismatch) |186| `API Error: 400 orphaned tool_result in conversation history` | [请求错误](#tool-use-or-thinking-block-mismatch) |

184| `API Error: 400 duplicate tool_use ID in conversation history` | [请求错误](#tool-use-or-thinking-block-mismatch) |187| `API Error: 400 duplicate tool_use ID in conversation history` | [请求错误](#tool-use-or-thinking-block-mismatch) |


199| `The connection dropped while downloading the update` | [安装和登录故障排除](/docs/zh-CN/troubleshoot-install#the-connection-dropped-while-downloading-the-update) |202| `The connection dropped while downloading the update` | [安装和登录故障排除](/docs/zh-CN/troubleshoot-install#the-connection-dropped-while-downloading-the-update) |

200| `Download timed out: exceeded the total deadline` | [安装和登录故障排除](/docs/zh-CN/troubleshoot-install#the-connection-dropped-while-downloading-the-update) |203| `Download timed out: exceeded the total deadline` | [安装和登录故障排除](/docs/zh-CN/troubleshoot-install#the-connection-dropped-while-downloading-the-update) |

201| `--bg and --print conflict` | [命令行错误](#conflict-between-bg-and-print) |204| `--bg and --print conflict` | [命令行错误](#conflict-between-bg-and-print) |

205| `Couldn't tell whether --bg is a flag or text here, so nothing was started` | [命令行错误](#couldnt-tell-whether-bg-is-a-flag-or-text) |

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

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

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


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

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

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

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

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

221| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |226| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |

222| `Could not import <server>: <reason>` | [命令行错误](#could-not-import-a-server-from-claude-desktop) |227| `Could not import <server>: <reason>` | [命令行错误](#could-not-import-a-server-from-claude-desktop) |


233| `Shell command failed for pattern "..."`, from `/security-review` or any skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |238| `Shell command failed for pattern "..."`, from `/security-review` or any skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |

234| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |239| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |

235| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |240| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |

241| `No shell command in <name> was run, because the <tool> tool does not accept one of them` | [命令行错误](#no-shell-command-was-run) |

236| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |242| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |

237| `Claude Code can't read the keyboard here: stdin is not a terminal` | [命令行错误](#claude-code-cant-read-the-keyboard-here) |243| `Claude Code can't read the keyboard here: stdin is not a terminal` | [命令行错误](#claude-code-cant-read-the-keyboard-here) |

238| `Error: Input contained only whitespace` | [命令行错误](#input-contained-only-whitespace) |244| `Error: Input contained only whitespace` | [命令行错误](#input-contained-only-whitespace) |


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

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

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

376| `Instruction file not loaded` | [配置警告](#instruction-file-not-loaded) |

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

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

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


377| `Your organization's managed settings allow Claude Code to use: <providers>` | [配置警告](#managed-settings-dont-allow-this-api-provider) |384| `Your organization's managed settings allow Claude Code to use: <providers>` | [配置警告](#managed-settings-dont-allow-this-api-provider) |

378| `Your organization's managed settings allow Claude Code to use no API provider at all` | [配置警告](#managed-settings-dont-allow-this-api-provider) |385| `Your organization's managed settings allow Claude Code to use no API provider at all` | [配置警告](#managed-settings-dont-allow-this-api-provider) |

379| `MCP server <name> is blocked by enterprise managed policy` | [配置警告](#mcp-server-is-blocked-by-enterprise-managed-policy) |386| `MCP server <name> is blocked by enterprise managed policy` | [配置警告](#mcp-server-is-blocked-by-enterprise-managed-policy) |

387| `"<name>" is a reserved MCP server name and was not loaded` | [配置警告](#mcp-server-name-is-reserved) |

380| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [配置警告](#managed-settings-document-could-not-be-parsed) |388| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [配置警告](#managed-settings-document-could-not-be-parsed) |

381| `Managed settings drop-in directory could not be read` | [配置警告](#managed-settings-document-could-not-be-parsed) |389| `Managed settings drop-in directory could not be read` | [配置警告](#managed-settings-document-could-not-be-parsed) |

382| `Unable to read managed policy settings` | [配置警告](#unable-to-read-managed-policy-settings) |390| `Unable to read managed policy settings` | [配置警告](#unable-to-read-managed-policy-settings) |

391| `Managed settings contain invalid entries, including PreToolUse/PermissionRequest hooks that are NOT loaded; fix or remove each entry:` | [配置警告](#managed-settings-hooks-not-loaded) |

383| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [配置警告](#otelheadershelper-failed) |392| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [配置警告](#otelheadershelper-failed) |

384| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [配置警告](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |393| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [配置警告](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |

385| `API Error: ANTHROPIC_FOUNDRY_RESOURCE must be a Foundry resource name` | [配置警告](#anthropic-foundry-resource-must-be-a-foundry-resource-name) |394| `API Error: ANTHROPIC_FOUNDRY_RESOURCE must be a Foundry resource name` | [配置警告](#anthropic-foundry-resource-must-be-a-foundry-resource-name) |


389| `... has a wildcard before the rest of the command` | [配置警告](#has-a-wildcard-before-the-rest-of-the-command) |398| `... has a wildcard before the rest of the command` | [配置警告](#has-a-wildcard-before-the-rest-of-the-command) |

390| `Denying Bash also turns off the PowerShell tool, so Claude has neither` | [配置警告](#denying-bash-also-turns-off-the-powershell-tool) |399| `Denying Bash also turns off the PowerShell tool, so Claude has neither` | [配置警告](#denying-bash-also-turns-off-the-powershell-tool) |

391| `CLAUDE_CODE_DISABLE_1M_CONTEXT is set, but the 200K limit isn't enforced` | [配置警告](#the-200k-limit-isnt-enforced) |400| `CLAUDE_CODE_DISABLE_1M_CONTEXT is set, but the 200K limit isn't enforced` | [配置警告](#the-200k-limit-isnt-enforced) |

401| `Model "<model>" isn't recognized · context assumed to be 200k tokens` | [更正网关或自定义模型 ID 的窗口](/docs/zh-CN/model-config#correct-the-window-for-a-gateway-or-custom-model-id) |

402| `Claude Code doesn't recognize the model "<model>", so it assumes a context window of 200k tokens` | [更正网关或自定义模型 ID 的窗口](/docs/zh-CN/model-config#correct-the-window-for-a-gateway-or-custom-model-id) |

392| `[claude-code:unrecognized_model]` | [配置警告](#unrecognized-model-id-on-a-request) |403| `[claude-code:unrecognized_model]` | [配置警告](#unrecognized-model-id-on-a-request) |

404| `is ignored — managed settings set allowManagedReadPathsOnly` / `is ignored — managed settings set allowManagedDomainsOnly` | [配置警告](#sandbox-allow-entries-are-ignored-under-a-managed-lock) |

393| `Stale sandbox mask files left by a killed session` | [配置警告](#stale-sandbox-mask-files-left-by-a-killed-session) |405| `Stale sandbox mask files left by a killed session` | [配置警告](#stale-sandbox-mask-files-left-by-a-killed-session) |

394| 响应质量似乎比平时低 | [响应质量](#responses-seem-lower-quality-than-usual) |406| 响应质量似乎比平时低 | [响应质量](#responses-seem-lower-quality-than-usual) |

395 407 


1209 1221 

1210在 v2.1.238 之前,Claude Code 将现在显示为 `Signed out of Claude` 的情况报告为 `JWT refresh failed: no OAuth token — run /login`,并且只要有一次登录刷新未得到响应,就会以 `Claude.ai login expired — run /login to restore Remote Control` 停止 Remote Control。1222在 v2.1.238 之前,Claude Code 将现在显示为 `Signed out of Claude` 的情况报告为 `JWT refresh failed: no OAuth token — run /login`,并且只要有一次登录刷新未得到响应,就会以 `Claude.ai login expired — run /login to restore Remote Control` 停止 Remote Control。

1211 1223 

1224<h3 id="remote-control-could-not-renew-this-computers-connection">

1225 Remote Control could not renew this computer's connection

1226</h3>

1227 

1228当服务器无法在连接凭据过期之前使用您的 claude.ai 登录对其续期时,运行 [`claude remote-control`](/docs/zh-CN/remote-control#start-a-remote-control-session) 的终端中会出现此警告。警告的最后一句会说明当前凭据还能使用多长时间,或者说明它已经过期:

1229 

1230```text theme={null}

1231Remote Control could not renew this computer's connection: claude.ai did not accept the sign-in it uses. Run `claude /login` to sign in again. The connection keeps working for about 26 hours; if it still cannot sign in then, it stops.

1232```

1233 

1234**解决方法:**

1235 

1236* 如果警告提示您运行 `claude /login`,请在运行服务器的机器上打开另一个终端,在其中运行 `claude /login`,并使用您的 claude.ai 账户登录

1237* 如果连接的凭据过期后服务器仍然无法登录,它会输出一条包含 `Poll: Authentication failed (401)` 的错误并停止。请按照警告第二句话的说明重新登录,然后在服务器停止的终端中再次运行 `claude remote-control`。

1238 

1212<h3 id="remote-control-stopped-because-the-signed-in-account-changed">1239<h3 id="remote-control-stopped-because-the-signed-in-account-changed">

1213 由于登录账户已更改,Remote Control 已停止1240 由于登录账户已更改,Remote Control 已停止

1214</h3>1241</h3>


2055 2082 

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

2057 2084 

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

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

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

2061 2088 


2279* 使用 `/mcp disable <name>` 禁用您未使用的 MCP 服务器,以从上下文中删除其工具定义2306* 使用 `/mcp disable <name>` 禁用您未使用的 MCP 服务器,以从上下文中删除其工具定义

2280* 修剪大型 `CLAUDE.md` 记忆文件,或将说明移到仅在相关时加载的[路径范围规则](/docs/zh-CN/memory#path-specific-rules)中2307* 修剪大型 `CLAUDE.md` 记忆文件,或将说明移到仅在相关时加载的[路径范围规则](/docs/zh-CN/memory#path-specific-rules)中

2281* 自动压缩默认开启,通常可防止此错误。如果您在 `/config` 中或使用 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 关闭了它,请将其重新打开。如果您保持关闭,请在窗口填满之前自己运行 `/compact`。2308* 自动压缩默认开启,通常可防止此错误。如果您在 `/config` 中或使用 [`DISABLE_AUTO_COMPACT`](/docs/zh-CN/env-vars) 关闭了它,请将其重新打开。如果您保持关闭,请在窗口填满之前自己运行 `/compact`。

2309* 如果在支持更大窗口的模型上于接近 200K token 时出现此错误,一个原因是 Claude Code 无法识别该模型 ID。Claude Code 会为此类 ID 假定 200K 的窗口,因此若要在超过该点后继续工作,请[为其提供模型的实际上下文窗口](/docs/zh-CN/model-config#correct-the-window-for-a-gateway-or-custom-model-id)。

2282 2310 

2283有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/docs/zh-CN/context-window)。2311有关上下文如何填满的交互式视图,请参阅[探索上下文窗口](/docs/zh-CN/context-window)。

2284 2312 


2340```text theme={null}2368```text theme={null}

2341Image was too large. Double press esc to go back and try again with a smaller image.2369Image was too large. Double press esc to go back and try again with a smaller image.

2342API Error: 400 ... image dimensions exceed max allowed size2370API Error: 400 ... image dimensions exceed max allowed size

2371API Error: an image in the conversation could not be processed and was removed.

2343```2372```

2344 2373 

2345Claude Code 用文本占位符替换无法处理的图像并重试,因此后续消息成功。在 2.1.142 之前的版本上,粘贴的图像可能保留在对话中,并在每个后续消息上重复相同的错误。要在这些版本上恢复,按 Esc 两次并回退到添加图像的轮次之前。2374`could not be processed and was removed` 行表示 API 拒绝了对话中的某张图片,例如超出大小或尺寸限制的图片。

2375 

2376如果其中某个错误反复出现,请更新 Claude Code。在较旧的版本中,图片错误可能由于以下原因而重复出现:

2377 

2378* 在 v2.1.299 之前,在包含许多图片的长对话中,Claude Code 可能会移除您最后附加的图片,而不是超出限制的那张。于是 `was removed` 行会在每一轮重复出现,且 Claude 看不到您新添加的图片。

2379* 在 v2.1.299 之前,在 VS Code、Desktop 应用和 Agent SDK 中,您在 Claude 工作期间附加的图片不会像其他附加图片那样被调整大小。它们以原始大小到达 API,导致长对话中反复出现图片错误。

2380* 在 v2.1.166 之前,粘贴的图片可能会留在对话中,之后的每条消息都会重复出现同一错误

2346 2381 

2347**要做什么:**2382**要做什么:**

2348 2383 


2800* 将 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/docs/zh-CN/env-vars) 提高到思考预算以上2835* 将 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/docs/zh-CN/env-vars) 提高到思考预算以上

2801* 请参阅[扩展思考](/docs/zh-CN/model-config#extended-thinking)以了解预算如何与输出长度交互2836* 请参阅[扩展思考](/docs/zh-CN/model-config#extended-thinking)以了解预算如何与输出长度交互

2802 2837 

2838<h3 id="response-exceeded-the-output-token-maximum">

2839 Response exceeded the output token maximum

2840</h3>

2841 

2842Claude 的回复达到了请求允许的最大输出 token 数,并在该处被截断:

2843 

2844```text theme={null}

2845API Error: Claude's response exceeded the ... output token maximum. To configure this behavior, set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable.

2846API Error: Claude's response exceeded the 64000 output token maximum for a request sent without streaming. The CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable cannot raise this limit.

2847```

2848 

2849提及 `a request sent without streaming` 的形式表示某个流式请求失败,Claude Code 以非流式方式重新发送了该请求,这会将回复限制在 64,000 个输出 token 以内。在 v2.1.299 之前,此类重新发送的请求上被截断的回复会在不显示此消息的情况下结束轮次,就像回复已经完整一样。

2850 

2851**解决方法:**

2852 

2853* 如果 Claude 在回复被截断之前已写了一些文本,请在交互式会话中回复 `continue` 以请求其余内容。该文本会保留在对话中。

2854* 如果消息提示设置 `CLAUDE_CODE_MAX_OUTPUT_TOKENS`,请参阅 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/docs/zh-CN/env-vars) 了解该值的上限,并参阅[设置环境变量](/docs/zh-CN/env-vars#set-environment-variables)了解在何处设置

2855* 若要使每次回复都不超过限制,请让 Claude 分成更小的部分输出,例如每次回复一个文件或一个章节

2856 

2803<h3 id="tool-use-or-thinking-block-mismatch">2857<h3 id="tool-use-or-thinking-block-mismatch">

2804 工具使用或思考块不匹配2858 工具使用或思考块不匹配

2805</h3>2859</h3>


2936模型的安全措施将对话中的内容标记为网络安全主题。消息命名标记请求的模型:2990模型的安全措施将对话中的内容标记为网络安全主题。消息命名标记请求的模型:

2937 2991 

2938```text theme={null}2992```text theme={null}

2939API Error: Opus 4.8's safeguards flagged this message. Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate cybersecurity work. Apply to the Cyber Verification Program to reduce these interruptions. Send feedback with /feedback or learn more: https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude2993API Error: Opus 4.8's safeguards flagged this message. Our intentionally broad safeguards allow us to deliver more capabilities faster, but can sometimes flag legitimate cybersecurity work. Send feedback with /feedback or learn more: https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude

2940```2994```

2941 2995 

2942如果消息包含 `` Details: `[reasoning_extraction]` `` 行,请参阅[保护措施标记了索取 Claude 推理过程的请求](#safeguards-flagged-a-request-for-claudes-reasoning)。2996如果消息包含 `` Details: `[reasoning_extraction]` `` 行,请参阅[保护措施标记了索取 Claude 推理过程的请求](#safeguards-flagged-a-request-for-claudes-reasoning)。


2945 2999 

2946在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,网络安全标记会改为产生[使用政策拒绝](#usage-policy-refusal)消息。3000在 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 和 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 上,网络安全标记会改为产生[使用政策拒绝](#usage-policy-refusal)消息。

2947 3001 

2948保护措施本身是服务器端的,早于 v2.1.203;自那以后的客户端版本仅更改了消息的措辞。

2949从 v2.1.203 到 v2.1.218,消息读取 `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply for access, visit our help center:` 后跟相同的帮助中心链接,交互式会话附加 `If you were not engaging in a cybersecurity topic, please send feedback via /feedback.`

2950在 v2.1.203 之前,它读取 `<model>'s safeguards flagged this message for a cybersecurity topic. If your work requires this access, you can apply for an exemption:` 后跟豁免表单链接。

2951 

2952**要做什么:**3002**要做什么:**

2953 3003 

2954* 如果您的工作需要此内容,通过[网络安全验证计划](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude)申请访问权限3004* 如果您的工作需要此内容,通过[网络安全验证计划](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude)申请访问权限

2955* 如果您的请求不是关于网络安全主题,运行 `/feedback` 报告误报3005* 如果您的请求不是关于网络安全主题,运行 `/feedback` 报告误报

2956* 要继续在同一会话中工作,按 Esc 两次或运行 `/rewind` 回退到触发标记的轮次之前的检查点,然后采取不同的方法。请参阅[检查点](/docs/zh-CN/checkpointing)。3006* 要继续在同一会话中工作,按 Esc 两次或运行 `/rewind` 回退到触发标记的轮次之前的检查点,然后采取不同的方法。请参阅[检查点](/docs/zh-CN/checkpointing)。

2957 3007 

3008如果您看到的消息措辞与以下某一项相同,则说明这是早期 Claude Code 版本中的同一判定:

3009 

3010* 在 v2.1.219 至 v2.1.296 版本中,消息还可能在结尾句之前包含 `Apply to the Cyber Verification Program to reduce these interruptions.`

3011* 在 v2.1.203 至 v2.1.218 版本中,消息内容为 `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply for access, visit our help center:`,后跟相同的帮助中心链接。在交互式会话中,其后还会接着显示 `If you were not engaging in a cybersecurity topic, please send feedback via /feedback.`

3012* 在 v2.1.203 之前,消息内容为 `<model>'s safeguards flagged this message for a cybersecurity topic. If your work requires this access, you can apply for an exemption:`,后跟豁免申请表链接

3013 

2958<h3 id="safeguards-flagged-a-request-for-claudes-reasoning">3014<h3 id="safeguards-flagged-a-request-for-claudes-reasoning">

2959 保护措施标记了索取 Claude 推理过程的请求3015 保护措施标记了索取 Claude 推理过程的请求

2960</h3>3016</h3>


3012* 去掉 `-p` 或 `--print`。`--bg` 将提示词作为其位置参数,因此 `claude --bg "<task>"` 就是完整的命令。请参阅[从 shell 中 Dispatch 新的 Agent](/docs/zh-CN/agent-view#from-your-shell)。3068* 去掉 `-p` 或 `--print`。`--bg` 将提示词作为其位置参数,因此 `claude --bg "<task>"` 就是完整的命令。请参阅[从 shell 中 Dispatch 新的 Agent](/docs/zh-CN/agent-view#from-your-shell)。

3013* 若要以非交互方式运行提示词并打印结果,而不是创建后台会话,请去掉 `--bg` 并运行 `claude -p "<task>"`3069* 若要以非交互方式运行提示词并打印结果,而不是创建后台会话,请去掉 `--bg` 并运行 `claude -p "<task>"`

3014 3070 

3071<h3 id="couldnt-tell-whether-bg-is-a-flag-or-text">

3072 Couldn't tell whether `--bg` is a flag or text

3073</h3>

3074 

3075您运行 `claude` 时,`--bg` 或 `--background` 所在的位置让 Claude Code 无法判断您是想将其用作后台标志还是文本。该命令没有启动任何内容,打印了下面这一行,并以退出码 1 退出:

3076 

3077```text theme={null}

3078Couldn't tell whether --bg is a flag or text here, so nothing was started. To start a background session put it first: claude --bg <prompt>

3079```

3080 

3081如果您输入的是 `--background`,这一行中显示的将是 `--background`。

3082 

3083**解决方法:**

3084 

3085* 要启动[后台会话](/docs/zh-CN/agent-view#from-your-shell),请在 shell 中将该标志放在最前面重新运行命令:`claude --bg --name nightly-audit "<task>"`

3086 

3015<h3 id="conflict-between-a-system-prompt-flag-and-its-file-form">3087<h3 id="conflict-between-a-system-prompt-flag-and-its-file-form">

3016 系统提示词标志与其文件形式冲突3088 系统提示词标志与其文件形式冲突

3017</h3>3089</h3>


3296 3368 

3297在 v2.1.248 之前,当全局标志在前时,`claude remote-control` 不接受其自身的标志,命令会以 `unknown option` 错误失败。3369在 v2.1.248 之前,当全局标志在前时,`claude remote-control` 不接受其自身的标志,命令会以 `unknown option` 错误失败。

3298 3370 

3371<h3 id="sandbox-is-not-supported-by-claude-remote-control">

3372 `--sandbox` or `--no-sandbox` is not supported by claude remote-control

3373</h3>

3374 

3375此错误表示启动您 [Remote Control](/docs/zh-CN/remote-control) 服务器的命令在 `remote-control` 之后传入了 `--sandbox` 或 `--no-sandbox`,而 `claude remote-control` 不接受这两个标志中的任何一个。服务器以退出码 1 退出,而不会启动:

3376 

3377```text theme={null}

3378Error: --sandbox is not supported by claude remote-control. The flag had no effect and was removed. To sandbox sessions, set sandbox.enabled to true in settings.

3379Error: --no-sandbox is not supported by claude remote-control. The flag had no effect and was removed. Remove it from the command.

3380```

3381 

3382**解决方法:**

3383 

3384* 从命令中移除该标志(包括为您启动服务器的脚本或服务定义中的命令),然后再次运行

3385* 如果要将服务器启动的会话置于沙箱中,请在[设置文件](/docs/zh-CN/settings#where-settings-live)中将 [`sandbox.enabled`](/docs/zh-CN/settings-reference#sandbox-enabled) 设置为 `true`,以启用[沙箱隔离](/docs/zh-CN/sandboxing)

3386 

3387这两个标志已在 v2.1.300 中从 `claude remote-control` 移除,因此为早期版本编写的命令可能仍带有其中一个。

3388 

3299<h3 id="claude-import-is-not-yet-available-in-this-build">3389<h3 id="claude-import-is-not-yet-available-in-this-build">

3300 claude import 在此版本中尚不可用3390 claude import 在此版本中尚不可用

3301</h3>3391</h3>


3542* 服务器端 HEAD 指向一个从未有人推送过的分支的远程3632* 服务器端 HEAD 指向一个从未有人推送过的分支的远程

3543* 没有 `origin` 远程的仓库,或您从未执行过 fetch 的仓库3633* 没有 `origin` 远程的仓库,或您从未执行过 fetch 的仓库

3544 3634 

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

3636 

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

3546 3638 

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

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

3641* `No shell command in <name> was run`:该文件的某个 `!` 命令包含除制表符或换行符之外的原始控制字符,因此所有命令都不会运行。请参阅[如何找到并删除该字符](#no-shell-command-was-run)

3549 3642 

3550**解决方法:**3643**解决方法:**

3551 3644 


3553* 如果您不想指定分支名,请运行 `git fetch origin`,然后运行 `git remote set-head origin --auto`,它会向远程询问哪个分支是默认分支。当远程未公布默认分支时(因为远程为空或其 HEAD 指向从未有人推送过的分支),它会以 `error: Cannot determine remote HEAD` 失败;此时请显式指定分支名。当您的克隆不 fetch 该分支时,它会以 `error: Not a valid ref` 失败;请先按上述方法扩大 refspec。3646* 如果您不想指定分支名,请运行 `git fetch origin`,然后运行 `git remote set-head origin --auto`,它会向远程询问哪个分支是默认分支。当远程未公布默认分支时(因为远程为空或其 HEAD 指向从未有人推送过的分支),它会以 `error: Cannot determine remote HEAD` 失败;此时请显式指定分支名。当您的克隆不 fetch 该分支时,它会以 `error: Not a valid ref` 失败;请先按上述方法扩大 refspec。

3554* 如果仓库没有远程,请使用 `git remote add origin <url>` 添加一个,并在创建引用之前执行 fetch。如果远程为空,请先使用 `git push -u origin HEAD` 推送您的分支,并在 set-head 命令中指定该分支;此后 `origin/HEAD` 指向您刚推送的分支,因此在该分支与其产生分歧之前,`/security-review` 看到的 diff 为空。3647* 如果仓库没有远程,请使用 `git remote add origin <url>` 添加一个,并在创建引用之前执行 fetch。如果远程为空,请先使用 `git push -u origin HEAD` 推送您的分支,并在 set-head 命令中指定该分支;此后 `origin/HEAD` 指向您刚推送的分支,因此在该分支与其产生分歧之前,`/security-review` 看到的 diff 为空。

3555 3648 

3649<h3 id="no-shell-command-was-run">

3650 skill 或命令中的 shell 命令均未运行

3651</h3>

3652 

3653skill 或自定义命令文件中的某个 `` !`<command>` `` [动态上下文命令](/docs/zh-CN/skills#inject-dynamic-context)包含除制表符或换行符之外的原始控制字符。Claude Code 会在文件中的任何命令运行之前拒绝整个调用。

3654 

3655消息会指出本应运行这些命令的 shell 工具(Bash 或 PowerShell),并以被拒绝的命令结尾。每个此类字符都会被替换为 `�`,以便您看到它的位置:

3656 

3657```text theme={null}

3658No shell command in /my-skill was run, because the Bash tool does not accept one of them: command contains control characters that would be hidden in the approval dialog. Unprintable characters are shown as � below: remove them from the skill or command file, or from the arguments or options substituted into it.

3659build.sh --target�dist

3660```

3661 

3662**解决方法:**

3663 

3664* 在消息末尾引用的命令中找到每个 `�`。从 skill 或命令文件中,或从代入文件的参数或选项中,删除它所代表的字符。

3665 

3556<h3 id="input-must-be-provided-when-using-print">3666<h3 id="input-must-be-provided-when-using-print">

3557 使用 `--print` 时必须提供输入3667 使用 `--print` 时必须提供输入

3558</h3>3668</h3>


3694 3804 

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

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

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

3698 3808 

3699**解决方法:**3809**解决方法:**

3700 3810 


5499 5609 

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

5501 5611 

5612<h3 id="instruction-file-not-loaded">

5613 Instruction file not loaded

5614</h3>

5615 

5616交互式会话的对话视图中的此通知表示某个已存在的[记忆文件](/docs/zh-CN/memory#how-claude-md-files-load)未被加载。某项读取限制正在生效。

5617 

5618```text theme={null}

5619Instruction file not loaded (a Read deny rule covers it):

5620path: .claude/rules/shared.md

5621```

5622 

5623括号内容说明原因,例如:

5624 

5625* **`a Read deny rule covers it`**:某条 `Read` [拒绝规则](/docs/zh-CN/permissions#read-and-edit)与该文件按原样书写的路径或其链接指向的位置匹配

5626* **`it's read from outside your working directories, where reads are blocked`**:在 [`permissions.blockReadsOutsideWorkingDirectories`](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories) 开启时,该文件解析到[工作目录](/docs/zh-CN/settings-reference#permissions-blockreadsoutsideworkingdirectories)之外

5627* **`where it leads couldn't be worked out`**:例如,该文件是一个直接或通过其他链接指回自身的链接

5628 

5629当 Claude 处理某个子目录中的文件时,若该子目录自身的记忆文件无法加载,相同的行会在该轮次中出现在对话里。当被扣留的文件多于这些行所列出的文件时,最后一行会对其余文件计数,例如 `and 3 more instruction files not loaded`。

5630 

5631**要做什么:**

5632 

5633* 如果该限制是有意为之,则无需操作:会话在没有该文件指令的情况下运行。

5634* 要加载因 `a Read deny rule covers it` 而被扣留的文件,请[删除或缩小该规则](/docs/zh-CN/permissions#manage-permissions)。然后启动新会话。

5635* 要加载因 `it's read from outside your working directories, where reads are blocked` 而被扣留的文件,请将该文件或其链接目标移到工作目录内。然后启动新会话。

5636* 要加载因 `where it leads couldn't be worked out` 而被扣留的文件,请检查该文件是否是指回自身的链接。如果是,请将链接指向一个存在的文件,或用常规文件替换它。然后启动新会话。

5637 

5638在 v2.1.292 之前,该通知在同一行中原因之后的末尾命名文件。

5639 

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

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

5504</h3>5642</h3>


5683 5821 

5684在 v2.1.257 之前,`/mcp` 中的**重新连接**和重新启用可以连接被会话中途策略更新阻止的服务器。5822在 v2.1.257 之前,`/mcp` 中的**重新连接**和重新启用可以连接被会话中途策略更新阻止的服务器。

5685 5823 

5824<h3 id="mcp-server-name-is-reserved">

5825 MCP 服务器名称是保留的

5826</h3>

5827 

5828此消息命名您的某个 MCP 服务器,其名称属于 Claude Code 保留的名称,例如其内置服务器的名称:

5829 

5830```text theme={null}

5831"workspace" is a reserved MCP server name and was not loaded

5832```

5833 

5834**要做什么:**

5835 

5836* 在定义该服务器的位置重命名它,例如从 `workspace` 改为 `my-workspace`

5837* 有关其他需要避免的保留名称,请参阅 [MCP 配置警告](/docs/zh-CN/mcp#configuration-warnings)

5838 

5686<h3 id="managed-settings-document-could-not-be-parsed">5839<h3 id="managed-settings-document-could-not-be-parsed">

5687 托管设置文档无法解析5840 托管设置文档无法解析

5688</h3>5841</h3>


5737 5890 

5738在 v2.1.285 之前,仅使用 claude.ai 或 Claude Console 凭据登录的会话以此消息退出,并且操作系统拒绝的读取也会产生它。5891在 v2.1.285 之前,仅使用 claude.ai 或 Claude Console 凭据登录的会话以此消息退出,并且操作系统拒绝的读取也会产生它。

5739 5892 

5893<h3 id="managed-settings-hooks-not-loaded">

5894 Managed settings contain invalid entries, including PreToolUse/PermissionRequest hooks that are NOT loaded

5895</h3>

5896 

5897`-p` 运行中的此 stderr 块表示某个[托管设置](/docs/zh-CN/managed-settings)源包含 Claude Code 无法加载的 hook 条目。该 hook 不会运行;当某行将该源的 `hooks` 字段列为已忽略时,该源的所有 hook 都不会运行。

5898 

5899每行命名源、字段(如有)以及问题,例如未知的 hook `type` 或在 `hooks` 键之外声明的 hook:

5900 

5901```text theme={null}

5902Managed settings contain invalid entries, including PreToolUse/PermissionRequest hooks that are NOT loaded; fix or remove each entry:

5903 <source> (<field>): <message>

5904```

5905 

5906**要做什么:**

5907 

5908* 如果您管理该源,请修复或删除该块列出的每个条目。[Hook 配置](/docs/zh-CN/hooks#configuration)展示了 Claude Code 在 `hooks` 下期望的结构。

5909* 如果某行的源是 `parent managed settings`,则表示启动 Claude Code 的应用程序将该条目作为[父设置](/docs/zh-CN/managed-settings#parent-settings-from-embedding-hosts)传入,因此请向该应用程序的开发者报告

5910* 否则,请将该块发送给您的管理员

5911 

5912在 v2.1.300 之前,`-p` 运行会将此情况列在 `Managed settings failed to load; policies from the failed source are NOT in effect:` 标题下。

5913 

5740<h3 id="otelheadershelper-failed">5914<h3 id="otelheadershelper-failed">

5741 otelHeadersHelper 失败5915 otelHeadersHelper 失败

5742</h3>5916</h3>


5955 6129 

5956在 v2.1.233 之前,Claude Code 在为无法识别的模型 ID 发送请求时不写入任何行。6130在 v2.1.233 之前,Claude Code 在为无法识别的模型 ID 发送请求时不写入任何行。

5957 6131 

6132<h3 id="sandbox-allow-entries-are-ignored-under-a-managed-lock">

6133 托管锁定下沙箱允许条目被忽略

6134</h3>

6135 

6136`/status` 和 `claude doctor` 中的此警告表示托管设置设置了 [`allowManagedReadPathsOnly`](/docs/zh-CN/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) 或 [`allowManagedDomainsOnly`](/docs/zh-CN/settings-reference#sandbox-network-allowmanageddomainsonly),因此该警告所命名文件中的 [`allowRead`](/docs/zh-CN/settings-reference#sandbox-filesystem-allowread) 或 [`allowedDomains`](/docs/zh-CN/settings-reference#sandbox-network-alloweddomains) 条目不适用:

6137 

6138```text wrap theme={null}

6139sandbox.filesystem.allowRead is ignored — managed settings set allowManagedReadPathsOnly, so only allowRead paths from managed settings are honored. The 3 entries in /home/you/.claude/settings.json will NOT apply (see https://code.claude.com/docs/en/settings#sandbox-settings).

6140```

6141 

6142对于网络锁定,警告命名 `sandbox.network.allowedDomains` 和 `allowManagedDomainsOnly`,并显示 `only allowed domains (and WebFetch domain rules) from managed settings are honored`。

6143 

6144**要做什么:**

6145 

6146* 您不必对该警告采取行动

6147* 如果您需要这些路径或域,而您组织的托管设置设置了该锁定,请要求您的管理员将它们添加到这些设置中。在您同时从所命名的文件中删除这些条目之前,警告会一直存在。

6148* 要清除警告,请从所命名的文件中删除这些条目。对于您共享的文件,例如项目的 `.claude/settings.json`,您可以为没有该锁定的团队成员保留这些条目,并让警告继续显示。

6149 

5958<h3 id="stale-sandbox-mask-files-left-by-a-killed-session">6150<h3 id="stale-sandbox-mask-files-left-by-a-killed-session">

5959 被终止的会话留下的陈旧沙箱掩码文件6151 被终止的会话留下的陈旧沙箱掩码文件

5960</h3>6152</h3>

Details

38 38 

39这些有提供商特定的差异:39这些有提供商特定的差异:

40 40 

41* **MCP servers**:[来自 claude.ai 的连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)仅在您的 claude.ai 订阅是活跃身份验证方法时加载。[工具搜索](/docs/zh-CN/mcp#configure-tool-search)在 `ANTHROPIC_BASE_URL` 指向非第一方主机时默认关闭,在 Google Cloud's Agent Platform 上早于 Claude Opus 4.5、Claude Sonnet 4.5 和 Claude Haiku 4.5 的模型或在 Microsoft Foundry [部署在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)时不受支持41* **MCP 服务器**:[来自 claude.ai 的连接器](/docs/zh-CN/mcp#use-mcp-servers-from-claude-ai)仅在您的 claude.ai 订阅是活跃身份验证方法时加载。[工具搜索](/docs/zh-CN/mcp#configure-tool-search)在 `ANTHROPIC_BASE_URL` 指向非第一方主机时默认关闭,在 Google Cloud's Agent Platform 上早于 Claude Opus 4.5、Claude Sonnet 4.5 和 Claude Haiku 4.5 的模型或在 Microsoft Foundry [部署在 Azure 上](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)时不受支持

42* **Subagents**:当主对话运行 Fable 时,如果使用 Claude 订阅、Anthropic Console 账户或通过 `ANTHROPIC_BASE_URL` 访问的 [LLM gateway](/docs/zh-CN/llm-gateway),内置的 [Explore subagent](/docs/zh-CN/sub-agents#built-in-subagents) 会在 Opus 上运行。在其他提供商(包括 Claude Platform on AWS)上,它在 Fable 上运行42* **Subagents**:当主对话运行 Fable 时,如果使用 Claude 订阅、Anthropic Console 账户或通过 `ANTHROPIC_BASE_URL` 访问的 [LLM gateway](/docs/zh-CN/llm-gateway),内置的 [Explore subagent](/docs/zh-CN/sub-agents#built-in-subagents) 会在 Opus 上运行。在其他提供商(包括 Claude Platform on AWS)上,它在 Fable 上运行

43* **[Commands](/docs/zh-CN/commands#all-commands)**:43* **[Commands](/docs/zh-CN/commands#all-commands)**:

44 * `/design-sync` 和 `/import` 及其 `claude import` 子命令形式在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上不可用,以及通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)44 * `/design-sync` 和 `/import` 及其 `claude import` 子命令形式在 Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundry 和 Claude Platform on AWS 上不可用,以及通过 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway#availability-and-limitations)


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

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

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

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

227 227 

228<Note>228<Note>

229 如果您通过 [LLM gateway](/docs/zh-CN/llm-gateway) 进行身份验证,功能可用性与网关转发到的基础提供商相匹配,除了 Claude Code 本身关闭的功能。每当 `ANTHROPIC_BASE_URL` 指向 `api.anthropic.com` 以外的主机时,Claude Code 会关闭功能,例如 [Remote Control](/docs/zh-CN/remote-control#requirements) 和 [server-managed settings](/docs/zh-CN/server-managed-settings#platform-availability),无论网关转发什么。某些仅限 Anthropic 的功能,例如 [Advisor](/docs/zh-CN/advisor),仅在网关将请求完整转发到 Anthropic API 时才有效。229 如果您通过 [LLM gateway](/docs/zh-CN/llm-gateway) 进行身份验证,功能可用性与网关转发到的基础提供商相匹配,除了 Claude Code 本身关闭的功能。每当 `ANTHROPIC_BASE_URL` 指向 `api.anthropic.com` 以外的主机时,Claude Code 会关闭功能,例如 [Remote Control](/docs/zh-CN/remote-control#requirements) 和 [server-managed settings](/docs/zh-CN/server-managed-settings#platform-availability),无论网关转发什么。某些仅限 Anthropic 的功能,例如 [Advisor](/docs/zh-CN/advisor),仅在网关将请求完整转发到 Anthropic API 时才有效。

Details

57 </Step>57 </Step>

58 58 

59 <Step title="启用 Code Review">59 <Step title="启用 Code Review">

60 转到 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code),使用与 github.com 相同的配置为您的 GHES 仓库启用 [Code Review](/docs/zh-CN/code-review#set-up-code-review)。60 转到 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code),使用与 github.com 相同的配置为您的 GHES 仓库启用 [Code Review](/docs/zh-CN/code-review-setup)。

61 </Step>61 </Step>

62</Steps>62</Steps>

63 63 

Details

222| `T{char}` | 跳转到当前行中该字符的上一个出现位置之后 |222| `T{char}` | 跳转到当前行中该字符的上一个出现位置之后 |

223| `;` | 重复上一个 f/F/t/T 动作 |223| `;` | 重复上一个 f/F/t/T 动作 |

224| `,` | 反向重复上一个 f/F/t/T 动作 |224| `,` | 反向重复上一个 f/F/t/T 动作 |

225| `%` | 跳转到匹配的 `()`、`[]` 或 `{}` 括号;当光标不在括号上时,从当前行的下一个括号开始。需要 Claude Code v2.1.301 或更高版本 |

225| `/` | 打开反向历史搜索,与 `Ctrl+R` 相同。空搜索提示显示提示:按 `Esc` 然后 `i` 然后 `/` 来打开命令菜单 |226| `/` | 打开反向历史搜索,与 `Ctrl+R` 相同。空搜索提示显示提示:按 `Esc` 然后 `i` 然后 `/` 来打开命令菜单 |

226 227 

227<Note>228<Note>


243| `dj`/`dk` | 删除当前行和下方或上方的行 |244| `dj`/`dk` | 删除当前行和下方或上方的行 |

244| `dgg`/`dG` | 从当前行删除到第一行或最后一行 |245| `dgg`/`dG` | 从当前行删除到第一行或最后一行 |

245| `d0`/`c0`/`y0` | 从光标删除、更改或复制回行首。需要 Claude Code v2.1.281 或更高版本 |246| `d0`/`c0`/`y0` | 从光标删除、更改或复制回行首。需要 Claude Code v2.1.281 或更高版本 |

247| `d%`/`c%`/`y%` | 从光标删除、更改或复制到 `%` 跳转到的括号(包括该括号)。需要 Claude Code v2.1.301 或更高版本 |

246| `cc` | 更改行 |248| `cc` | 更改行 |

247| `C` | 更改到行尾 |249| `C` | 更改到行尾 |

248| `cw`/`ce`/`cb` | 更改单词/到末尾/向后 |250| `cw`/`ce`/`cb` | 更改单词/到末尾/向后 |

mcp.md +1 −1

Details

1632 1632 

1633在 v2.1.296 之前,较短的限制为 2,048 个字符;在 v2.1.295 之前,该限制适用于每个工具描述,包括通过工具搜索加载的工具描述。1633在 v2.1.296 之前,较短的限制为 2,048 个字符;在 v2.1.295 之前,该限制适用于每个工具描述,包括通过工具搜索加载的工具描述。

1634 1634 

1635要更改会话中每个 MCP 服务器的限制,请将 [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/zh-CN/env-vars#variables) 设置为字符数。您设置的数值会同时替换这两个限制:例如,`8192` 会提高较短的限制并降低较长的限制。此变量需要 Claude Code v2.1.280 或更高版本。1635Anthropic 在 `api.anthropic.com` 托管的部分 MCP 服务器,其描述和说明会完整地传达给 Claude。要更改会话中其他 MCP 服务器的限制,请将 [`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`](/docs/zh-CN/env-vars#variables) 设置为字符数。您设置的数值会同时替换这两个限制:例如,`8192` 会提高较短的限制并降低较长的限制。此变量需要 Claude Code v2.1.280 或更高版本。

1636 1636 

1637<h4 id="per-tool-alwaysload">1637<h4 id="per-tool-alwaysload">

1638 将工具标记为预先加载或保持延迟1638 将工具标记为预先加载或保持延迟

Details

378 ```powershell theme={null}378 ```powershell theme={null}

379 $env:MCP_TIMEOUT = "60000"; claude379 $env:MCP_TIMEOUT = "60000"; claude

380 ```380 ```

381 

382 在 v2.1.299 之前,某些到已启动的 HTTP 服务器的连接会在启动时超时,与 `MCP_TIMEOUT` 无关。如果您使用的是这些版本之一,并且在提高限制后已启动的 HTTP 服务器仍然超时,请[更新 Claude Code](/docs/zh-CN/setup#update-claude-code)。

381 </Accordion>383 </Accordion>

382 384 

383 <Accordion title="服务器已存在">385 <Accordion title="服务器已存在">

memory.md +1 −0

Details

648要调试:648要调试:

649 649 

650* 运行 `/context` 并检查 **Memory files** 下的列表,以验证应在启动时加载的 CLAUDE.md 和 CLAUDE.local.md 文件。如果其中某个文件不在列表中,Claude 就看不到它。使用 `/memory` 打开和编辑文件。650* 运行 `/context` 并检查 **Memory files** 下的列表,以验证应在启动时加载的 CLAUDE.md 和 CLAUDE.local.md 文件。如果其中某个文件不在列表中,Claude 就看不到它。使用 `/memory` 打开和编辑文件。

651* 如果出现 `Instruction file not loaded` 提示,请参阅[其含义及处理方法](/docs/zh-CN/errors#instruction-file-not-loaded)。

651* 工作目录的子目录中的 `CLAUDE.md` 不会出现在 **Memory files** 下,因为它是按需加载而不是在启动时加载的。加载时,终端中会出现一行带有其路径的 `Loaded`。要测试新建的此类文件,请从 shell 中创建它,而不是让 Claude 编写它,然后让 Claude 读取该子目录中的某个文件。652* 工作目录的子目录中的 `CLAUDE.md` 不会出现在 **Memory files** 下,因为它是按需加载而不是在启动时加载的。加载时,终端中会出现一行带有其路径的 `Loaded`。要测试新建的此类文件,请从 shell 中创建它,而不是让 Claude 编写它,然后让 Claude 读取该子目录中的某个文件。

652* 检查相关 CLAUDE.md 是否在为您的会话加载的位置(参见 [选择 CLAUDE.md 文件的位置](#choose-where-to-put-claude-md-files))。653* 检查相关 CLAUDE.md 是否在为您的会话加载的位置(参见 [选择 CLAUDE.md 文件的位置](#choose-where-to-put-claude-md-files))。

653* 使指令更具体。"使用 2 空格缩进"比"格式化代码很好"效果更好。654* 使指令更具体。"使用 2 空格缩进"比"格式化代码很好"效果更好。

model-config.md +20 −0

Details

895 为网关或自定义模型 ID 更正窗口895 为网关或自定义模型 ID 更正窗口

896</h3>896</h3>

897 897 

898以下任一启动警告都表示 Claude Code 无法识别您会话的模型 ID,因此无法得知该模型的上下文窗口,并假设其为 200K token:

899 

900```text theme={null}

901⚠ Model "my-gateway-opus" isn't recognized · context assumed to be 200k tokens · ...

902Claude Code doesn't recognize the model "my-gateway-opus", so it assumes a context window of 200k tokens. Update Claude Code, or see https://code.claude.com/docs/en/model-config#correct-the-window-for-a-gateway-or-custom-model-id to set the window.

903```

904 

905Claude Code 会在假设的 200K 处[自动压缩](#default-auto-compact-thresholds)对话,因此如果模型的实际上下文窗口为 200K,则无需更正。否则,请根据您的 ID 选择以下适用的方式,将实际窗口告知 Claude Code:

906 

907* **比您的 Claude Code 版本更新的模型**:在 shell 中运行 `claude update`。如果更新后 Claude Code 能识别该 ID,则无需再配置其他内容。

908* **您的网关或提供商为 Claude Code 已知模型使用的名称**:添加一个 [`modelOverrides`](#override-model-ids-per-version) 条目,将 Anthropic 模型 ID 映射到您的 ID,例如 `"claude-opus-4-8": "my-gateway-opus"`。您也可以改为在 [`modelPicker`](/docs/zh-CN/settings-reference#fields-for-modelpicker) 行中列出您的 ID,并将 `behavesAs` 设置为该模型。无论采用哪种方式,Claude Code 随后都会将该 ID 视为该模型。

909* **具有 1M 窗口的模型**:在设置模型的位置为 ID 追加 `[1m]`,例如在 shell 中运行 `claude --model 'my-gateway-opus[1m]'`。如果您[关闭了 1M 上下文](#turn-off-1m-context),则无论是否带有该后缀,您获得的窗口都相同。

910* **任何其他窗口**:在启动 Claude Code 的环境中将 [`CLAUDE_CODE_MAX_CONTEXT_TOKENS`](/docs/zh-CN/env-vars) 设置为以 token 为单位的窗口大小,例如 `CLAUDE_CODE_MAX_CONTEXT_TOKENS=400000`。对于不以 `claude-` 开头且没有 `[1m]` 后缀的无法识别的 ID,该变量会单独生效。对于任何其他 ID,请先查看[它适用于哪些 ID](#which-ids-claude_code_max_context_tokens-applies-to)。

911 

912一旦 Claude Code 识别了该 ID 或使用了您提供的窗口,在该 ID 上启动会话时就不会再出现该警告。

913 

914<h4 id="which-ids-claude_code_max_context_tokens-applies-to">

915 `CLAUDE_CODE_MAX_CONTEXT_TOKENS` 适用于哪些 ID

916</h4>

917 

898在 [LLM 网关](/docs/zh-CN/llm-gateway)或其他自定义部署上,Claude Code 可能会为模型 ID 假设一个与模型实际窗口不同的上下文窗口,无论它是否将 ID 解析为 Claude 模型。设置 [`CLAUDE_CODE_MAX_CONTEXT_TOKENS`](/docs/zh-CN/env-vars) 为 Claude Code 应该假设的窗口。918在 [LLM 网关](/docs/zh-CN/llm-gateway)或其他自定义部署上,Claude Code 可能会为模型 ID 假设一个与模型实际窗口不同的上下文窗口,无论它是否将 ID 解析为 Claude 模型。设置 [`CLAUDE_CODE_MAX_CONTEXT_TOKENS`](/docs/zh-CN/env-vars) 为 Claude Code 应该假设的窗口。

899 919 

900变量的应用方式取决于 ID。当 ID 不以 `claude-`(任何大小写)开头时,或当它携带 Claude Code 在读取 ID 时剥离的后缀(例如 Google Cloud 的 Agent Platform 上使用的 `@YYYYMMDD` 日期)时,Claude Code 将 ID 视为提供商或自定义拼写。在 v2.1.259 之前,Claude Code 没有计算剥离的后缀,所以带有日期后缀的无法识别的 `claude-` ID 被视为裸 `claude-` 名称。920变量的应用方式取决于 ID。当 ID 不以 `claude-`(任何大小写)开头时,或当它携带 Claude Code 在读取 ID 时剥离的后缀(例如 Google Cloud 的 Agent Platform 上使用的 `@YYYYMMDD` 日期)时,Claude Code 将 ID 视为提供商或自定义拼写。在 v2.1.259 之前,Claude Code 没有计算剥离的后缀,所以带有日期后缀的无法识别的 `claude-` ID 被视为裸 `claude-` 名称。

Details

6 6 

7> 了解如何为 Claude Code 启用和配置 OpenTelemetry。7> 了解如何为 Claude Code 启用和配置 OpenTelemetry。

8 8 

9通过 OpenTelemetry (OTel) 导出遥测数据,跨组织跟踪 Claude Code 使用情况、成本和工具活动。Claude Code 通过标准指标协议导出指标作为时间序列数据,通过日志/事件协议导出事件,以及可选地通过 [traces 协议](#traces-beta) 导出分布式跟踪。9通过 OpenTelemetry (OTel) 导出遥测数据,跨组织跟踪 Claude Code 使用情况、成本和工具活动。Claude Code 通过标准指标协议导出指标作为时间序列数据,通过日志/事件协议导出事件,并可选地导出[通过 OpenTelemetry 的分布式跟踪](#traces-beta)。

10 

11<Note>

12 如需了解 Claude API 或 Managed Agents,请参阅 [Claude API 的 OpenTelemetry](https://platform.claude.com/docs/en/manage-claude/opentelemetry)。

13</Note>

10 14 

11<h2 id="quick-start">15<h2 id="quick-start">

12 快速开始16 快速开始

Details

48* **社区 marketplace 名称**:`claude-community`、`claude-plugins-community` 和 `healthcare`。保留规则与官方名称相同。48* **社区 marketplace 名称**:`claude-community`、`claude-plugins-community` 和 `healthcare`。保留规则与官方名称相同。

49* **插件目录名称**:`anthropic-plugin-directory` 和 `claude-plugin-directory`。保留规则与官方名称相同。49* **插件目录名称**:`anthropic-plugin-directory` 和 `claude-plugin-directory`。保留规则与官方名称相同。

50* **冒充官方 marketplace 的名称**:名称如 `official-claude-plugins` 或 `claude-plugins-v2`,以及任何包含非 ASCII 字符的名称。错误是 `Marketplace name impersonates an official Anthropic/Claude marketplace`。名称中的控制或双向格式化字符也会报告 `Marketplace name cannot contain control or bidirectional-formatting characters`。已在这样的名称下注册的 marketplace 停止加载,连同其插件。50* **冒充官方 marketplace 的名称**:名称如 `official-claude-plugins` 或 `claude-plugins-v2`,以及任何包含非 ASCII 字符的名称。错误是 `Marketplace name impersonates an official Anthropic/Claude marketplace`。名称中的控制或双向格式化字符也会报告 `Marketplace name cannot contain control or bidirectional-formatting characters`。已在这样的名称下注册的 marketplace 停止加载,连同其插件。

51* <span id="reserved-name-spellings" />**保留名称的另一种拼写**:与保留名称仅在尾部点或用除下划线以外的符号代替连字符的名称,因此 `claude.code.plugins` 计为 `claude-code-plugins`。添加 marketplace 失败,错误为 [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/zh-CN/errors#marketplace-name-is-another-spelling-of-a-reserved-name),已在一个下注册的 marketplace 停止加载。此检查需要 Claude Code v2.1.280 或更高版本。51* <span id="reserved-name-spellings" />**保留名称的另一种拼写**:仅因尾部的点,或因用除下划线以外的符号代替连字符,而与保留名称不同的名称,因此 `claude.code.plugins` 计为 `claude-code-plugins`。添加 marketplace 失败,错误为 [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/zh-CN/errors#marketplace-name-is-another-spelling-of-a-reserved-name),已使用此类名称注册的 marketplace 将停止加载。此检查需要 Claude Code v2.1.280 或更高版本。

52* **Claude Code 用于不来自 marketplace 的插件的名称**:`inline` 用于使用 [`--plugin-dir`](/docs/zh-CN/cli-reference) 加载的插件,`builtin` 用于内置插件,`skills-dir` 用于从 [`.claude/skills/`](/docs/zh-CN/skills) 自动加载的插件,`synced` 用于从你的 claude.ai 账户同步的插件。`claude-plugin-test` 也被保留。`skills-dir` 也显示为 `{"source": "skills-dir"}`,在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中,如 [仅在策略列表中有效的源值](#source-values-valid-only-in-policy-lists) 下所述。52* **Claude Code 用于不来自 marketplace 的插件的名称**:`inline` 用于使用 [`--plugin-dir`](/docs/zh-CN/cli-reference) 加载的插件,`builtin` 用于内置插件,`skills-dir` 用于从 [`.claude/skills/`](/docs/zh-CN/skills) 自动加载的插件,`synced` 用于从你的 claude.ai 账户同步的插件。`claude-plugin-test` 也被保留。`skills-dir` 也显示为 `{"source": "skills-dir"}`,在 `strictKnownMarketplaces` 和 `blockedMarketplaces` 中,如 [仅在策略列表中有效的源值](#source-values-valid-only-in-policy-lists) 下所述。

53* **`npm`、`pip`、`uv`、`cargo`、`github` 和 `gh`**:以任何大小写保留。此检查需要 Claude Code v2.1.275 或更高版本。53* **`npm`、`pip`、`uv`、`cargo`、`github` 和 `gh`**:以任何大小写保留。此检查需要 Claude Code v2.1.275 或更高版本。

54* **每个 JavaScript 对象都具有的成员名称**:`constructor`、`hasOwnProperty`、`isPrototypeOf`、`propertyIsEnumerable`、`toLocaleString`、`toString` 和 `valueOf`。`claude plugin marketplace add` 会拒绝使用其中之一的市场,错误为 [`Claude Code reserves this name and cannot register a marketplace under it`](/docs/zh-CN/plugins/troubleshooting#claude-code-reserves-this-name)。此检查需要 Claude Code v2.1.296 或更高版本。54* **每个 JavaScript 对象都具有的成员名称**:`constructor`、`hasOwnProperty`、`isPrototypeOf`、`propertyIsEnumerable`、`toLocaleString`、`toString` 和 `valueOf`。`claude plugin marketplace add` 会拒绝使用其中之一的市场,错误为 [`Claude Code reserves this name and cannot register a marketplace under it`](/docs/zh-CN/plugins/troubleshooting#claude-code-reserves-this-name)。此检查需要 Claude Code v2.1.296 或更高版本。

Details

84* **网络策略涵盖 `$.http.fetch`。**84* **网络策略涵盖 `$.http.fetch`。**

85 85 

86 * **您的组织策略不允许 WebFetch**:Claude Code 也会拒绝每个 mod 的 `$.http.fetch` 请求。请参阅 [WebFetch 可用性](/docs/zh-CN/tools-reference#webfetch-availability)。86 * **您的组织策略不允许 WebFetch**:Claude Code 也会拒绝每个 mod 的 `$.http.fetch` 请求。请参阅 [WebFetch 可用性](/docs/zh-CN/tools-reference#webfetch-availability)。

87 * **您在托管设置或任何其他设置文件中使用 [`CLAUDE_CODE_DISABLE_WEB_FETCH`](/docs/zh-CN/env-vars#variables) 或 `WebFetch` [拒绝规则](/docs/zh-CN/permissions#tool-specific-permission-rules)关闭了 WebFetch 工具**:mod 仍然可以发出 `$.http.fetch` 请求。

88 

89 要为您的用户安装的每个 mod 阻止这些请求,请[防止用户安装的 mod 加载](#stop-user-installed-mods-from-loading),或在[策略 mod](#enforce-a-policy-with-a-mod-of-your-own) 中 hook `http.fetch` 并拒绝来自用户 mod 的请求。还要为该 hook 提供一个同样会拒绝请求的 [`.catch` 处理程序](/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails),因为 Claude Code 会跳过失败的 hook,届时请求将继续进行。如果您只[限制用户可以安装的插件](/docs/zh-CN/plugins/org#restrict-what-users-can-install),加载的 mod 会减少,但您允许的 mod 仍然可以发出这些请求。

87 * **您设置了 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars)**:您或您的用户安装的 mod 仍然可以发出这些请求。该变量仅阻止 [Claude Code 内置的 mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code),以及任何携带会话 Anthropic 凭据的 `$.http.fetch` 请求。在 v2.1.288 之前,该变量会阻止每个 mod 的 `$.http.fetch` 请求。90 * **您设置了 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/zh-CN/env-vars)**:您或您的用户安装的 mod 仍然可以发出这些请求。该变量仅阻止 [Claude Code 内置的 mod](/docs/zh-CN/plugins/mods/overview#mods-built-into-claude-code),以及任何携带会话 Anthropic 凭据的 `$.http.fetch` 请求。在 v2.1.288 之前,该变量会阻止每个 mod 的 `$.http.fetch` 请求。

88 91 

89 两者都不涵盖 mod 使用 `$.process.run` 启动的程序,该程序使用用户自己的访问权限访问网络。92 这些都不涵盖 mod 使用 `$.process.run` 启动的程序,该程序使用用户自己的访问权限访问网络。

90* **插件控制涵盖 mods。** Mod 是一个插件,因此[限制用户可以安装的内容的设置](/docs/zh-CN/plugins/org#restrict-what-users-can-install),例如 `strictKnownMarketplaces`,决定它是否可以被安装。93* **插件控制涵盖 mods。** Mod 是一个插件,因此[限制用户可以安装的内容的设置](/docs/zh-CN/plugins/org#restrict-what-users-can-install),例如 `strictKnownMarketplaces`,决定它是否可以被安装。

91* **Mods 无法更改权限提示。** Mod 可以重新设置 Claude Code 界面的大部分样式,但不能更改权限提示,因此它无法更改提示显示的内容。Mod 仍然可以在提示出现之前批准或拒绝工具调用,如[了解默认情况下会发生什么](#know-what-happens-by-default)所述。94* **Mods 无法更改权限提示。** Mod 可以重新设置 Claude Code 界面的大部分样式,但不能更改权限提示,因此它无法更改提示显示的内容。Mod 仍然可以在提示出现之前批准或拒绝工具调用,如[了解默认情况下会发生什么](#know-what-happens-by-default)所述。

92* **信任提示首先出现。** 在用户尚未信任的目录中的交互式会话中,在他们回答信任提示之前,没有 mod 加载。95* **信任提示首先出现。** 在用户尚未信任的目录中的交互式会话中,在他们回答信任提示之前,没有 mod 加载。

Details

234| `$.ui.toast(text)` | 一条带有 mod 名称的 toast 通知,几秒后消失。在[全屏渲染](/docs/zh-CN/fullscreen)中,它是右上角的一个框;在经典渲染器中,它是提示下右侧的一行。 |234| `$.ui.toast(text)` | 一条带有 mod 名称的 toast 通知,几秒后消失。在[全屏渲染](/docs/zh-CN/fullscreen)中,它是右上角的一个框;在经典渲染器中,它是提示下右侧的一行。 |

235| `$.ui.log(text)` | 成绩单中的一条暗线,Claude 不读取。它以 `●` 和 mod 的名称开头,如 `● my-mod: build finished`。 |235| `$.ui.log(text)` | 成绩单中的一条暗线,Claude 不读取。它以 `●` 和 mod 的名称开头,如 `● my-mod: build finished`。 |

236 236 

237在 [VS Code 扩展](/docs/zh-CN/plugins/mods/interface#draw-in-the-vs-code-extension)中,状态栏和 toast 改为显示在输入框上方,日志行则显示在对话中。

238 

237<h3 id="start-a-turn-from-a-background-job">239<h3 id="start-a-turn-from-a-background-job">

238 从后台工作启动轮次240 从后台工作启动轮次

239</h3>241</h3>

Details

226| `Spinner`, `ToolProgress`, `TurnDuration` | 轮次的状态栏:Claude 工作时显示动画的行、正在运行的工具的实时进度行,以及结束轮次的行 |226| `Spinner`, `ToolProgress`, `TurnDuration` | 轮次的状态栏:Claude 工作时显示动画的行、正在运行的工具的实时进度行,以及结束轮次的行 |

227| `InfoNotice`, `SessionMode`, `PromptHint` | 徽标下方的状态栏、页脚中的模式标签,以及输入框下方的提示行 |227| `InfoNotice`, `SessionMode`, `PromptHint` | 徽标下方的状态栏、页脚中的模式标签,以及输入框下方的提示行 |

228 228 

229`Pane`、`AskUserQuestion`、`Spinner`、`UserMessage`、`AssistantMessage` 以及工具调用位置在终端、Desktop 应用和 VS Code 扩展中均有效。[渲染位置表](/docs/zh-CN/plugins/mods/reference#render-sites) 列出了其他每个位置在哪里触发。

230 

229在 Claude Code 已经绘制的站点上,您的 hook 可以更改某个细节、替换绘制内容,或保持不变。选择一个选项卡,查看每种方式应用于加载指示器的效果。这些示例读取由另一个 hook 计数的 `calls` 变量,如[教程 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 中所示。231在 Claude Code 已经绘制的站点上,您的 hook 可以更改某个细节、替换绘制内容,或保持不变。选择一个选项卡,查看每种方式应用于加载指示器的效果。这些示例读取由另一个 hook 计数的 `calls` 变量,如[教程 mod](/docs/zh-CN/plugins/mods/create#write-a-mod-yourself) 中所示。

230 232 

231<Tabs>233<Tabs>


297 299 

298权限提示不是渲染站点,因此 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是渲染站点,因此 mod 可以更改它。为该对话框返回的树必须恰好包含一次该引用,并将您的元素放在它的上方。否则,Claude Code 会绘制它自己的对话框。300权限提示不是渲染站点,因此 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是渲染站点,因此 mod 可以更改它。为该对话框返回的树必须恰好包含一次该引用,并将您的元素放在它的上方。否则,Claude Code 会绘制它自己的对话框。

299 301 

300终端和桌面应用不会触发所有相同的站点。`Pane`、`AbovePrompt`、`Spinner` 和会话记录站点在两者中都有效。其他一些状态栏仅在终端中触发。[渲染站点表](/docs/zh-CN/plugins/mods/reference#render-sites) 列出了每个站点在哪里触发。

301 

302<h3 id="open-a-pane-at-the-right-time">302<h3 id="open-a-pane-at-the-right-time">

303 在正确的时间打开窗格303 在正确的时间打开窗格

304</h3>304</h3>


328| `rows` | 当窗格位于输入框上方时请求的高度。默认值为空间的三分之一。 |328| `rows` | 当窗格位于输入框上方时请求的高度。默认值为空间的三分之一。 |

329| `columns` | 当窗格位于会话记录旁边时请求的宽度 |329| `columns` | 当窗格位于会话记录旁边时请求的宽度 |

330 330 

331[VS Code 扩展](#draw-in-the-vs-code-extension)会忽略 `rows` 和 `columns`,并自行确定窗格的大小。

332 

331`focus`、`closeOnEscape` 和 `holdToasts` 是可选的,且仅接受 `true`。要不设置其中某一项,请直接省略。传递 `false` 会抛出错误,例如 `ui.open: focus is true or left out`。要有条件地设置其中某一项,请仅在条件成立时添加该字段。此调用仅在 `items` 不为空时请求键盘焦点:333`focus`、`closeOnEscape` 和 `holdToasts` 是可选的,且仅接受 `true`。要不设置其中某一项,请直接省略。传递 `false` 会抛出错误,例如 `ui.open: focus is true or left out`。要有条件地设置其中某一项,请仅在条件成立时添加该字段。此调用仅在 `items` 不为空时请求键盘焦点:

332 334 

333```javascript theme={null}335```javascript theme={null}


356 358 

357当窗格出现时,`$.ui.open` 解析为 `{ isPlaced: true }`。当窗格处于等待状态时,`isPlaced` 为 `false`,`reason` 是一个说明原因的字符串。等待中的窗格会在用户打开它或拓宽终端时出现。要在不打开窗格的情况下告知某些内容可用,请调用 `$.ui.toast('Your message')`,它会显示一条 toast 通知。359当窗格出现时,`$.ui.open` 解析为 `{ isPlaced: true }`。当窗格处于等待状态时,`isPlaced` 为 `false`,`reason` 是一个说明原因的字符串。等待中的窗格会在用户打开它或拓宽终端时出现。要在不打开窗格的情况下告知某些内容可用,请调用 `$.ui.toast('Your message')`,它会显示一条 toast 通知。

358 360 

361<h3 id="draw-in-the-vs-code-extension">

362 在 VS Code 扩展中绘制

363</h3>

364 

365在 VS Code 扩展中,当扩展版本为 2.1.299 或更高,且会话会[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)时,mod 绘制的内容会显示在聊天面板中。在面板的 `ui.render` hook 中,`e.surface` 为 `vscode`。要查看面板会绘制哪些位置和元素,以及会忽略哪些 prop,请参阅[渲染位置](/docs/zh-CN/plugins/mods/reference#render-sites)表和[元素](/docs/zh-CN/plugins/mods/reference#elements)表。

366 

367要让 mod 既能在终端中运行,也能在面板中运行,请考虑以下差异:

368 

369* **窗格**:在宽度为 800 像素或以上的面板中,窗格停靠在对话旁边,`e.props.placement` 为 `'dock'`,`e.viewport.isFullscreen` 为 `true`。在较窄的面板中,窗格绘制在输入框上方,`placement` 为 `'inline'`,窗格显示 12 行后开始滚动。

370* **Toast 和状态栏**:它们位于输入框正上方的同一个堆叠区域中,面板较窄时窗格也在其中,每个 mod 有一个状态栏。当显示权限请求或对话框时,该堆叠区域会被隐藏。

371* **标签**:面板会为 mod 绘制或改写的内容加上边框,并用插件的名称标注,例如 **From the token-chart plugin** 或 **Edited by the token-chart plugin**。

372* **键盘**:按钮没有快捷键,因此用户需点击按钮,或在按钮获得焦点后按 Enter。

373* **键盘焦点**:只有当面板拥有焦点、Claude 处于空闲状态且没有待回答的问题,并且输入框为空时,面板才会批准窗格的 `focus: true` 请求。

374* **问题对话框**:在 `AskUserQuestion` 处,面板会保留其自己的问题卡片,并在其上方绘制您的元素。您传递给 `next` 的 prop 不会更改该卡片。

375* **提示词建议**:`$.prompt.suggest` 会以 `isShown: false` 解析且不显示任何内容,因为面板将输入框中的灰色建议文本保留给 Claude 自己的建议。

376* **文本限制**:面板会将状态栏截断为 200 个字符或两行,将 toast 截断为 500 个字符。

377 

359<h2 id="build-a-tree-from-elements">378<h2 id="build-a-tree-from-elements">

360 从元素构建树379 从元素构建树

361</h2>380</h2>

362 381 

363`ui.render` hook 返回的是一个元素树:对要绘制的内容的描述,由相互嵌套的框、文本和控件组成。您描述绘制,Claude Code 在终端或桌面应用中呈现它。382`ui.render` hook 返回的是一个元素树:对要绘制的内容的描述,由相互嵌套的框、文本和控件组成。您描述绘制,Claude Code 会在用户打开的任一应用中呈现它:终端、桌面应用或 VS Code 扩展。

364 383 

365要获取元素,请在您的 hook 中调用 `$.ui.resolve(e)`,如 `const { Box, Text, Button } = $.ui.resolve(e)`。每个元素都是一个函数。您向它传递属性,并把放在其中的元素和字符串放在 `children` 中。384要获取元素,请在您的 hook 中调用 `$.ui.resolve(e)`,如 `const { Box, Text, Button } = $.ui.resolve(e)`。每个元素都是一个函数。您向它传递属性,并把放在其中的元素和字符串放在 `children` 中。

366 385 


440| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |459| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |

441| `Button` | 调用 `onPress` 的控件 | 到处 |460| `Button` | 调用 `onPress` 的控件 | 到处 |

442| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当您传递 `onLinkPress` 时需要 `key`。 | 到处 |461| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当您传递 `onLinkPress` 时需要 `key`。 | 到处 |

443| `Input`, `Select` | 文本字段和下拉列表 | 终端、桌面 |462| `Input`, `Select` | 文本字段和下拉列表 | 终端、桌面、VS Code |

444| `Svg` | SVG 文档 | 桌面 |463| `Svg` | SVG 文档 | 桌面、VS Code |

445| `Client` | 由您的第二个文件绘制的区域,用于动画和指针输入。该文件没有 mod API。它通过发布数据到达您的 hook,该数据作为 `ui.message` 事件到达。如果它加载、绘制或运行失败,您的 hook 会收到 [`ui.fault`](/docs/zh-CN/plugins/mods/reference#interface) 事件。 | 终端、桌面 |464| `Client` | 由您的第二个文件绘制的区域,用于动画和指针输入。该文件没有 mod API。它通过发布数据到达您的 hook,该数据作为 `ui.message` 事件到达。如果它加载、绘制或运行失败,您的 hook 会收到 [`ui.fault`](/docs/zh-CN/plugins/mods/reference#interface) 事件。 | 终端、桌面 |

446| `Raster`, `Image` | [彩色单元格网格](#draw-a-grid-of-colored-cells)和图片 | 终端 |465| `Raster`, `Image` | [彩色单元格网格](#draw-a-grid-of-colored-cells)和图片 | 终端 |

447 466 


452在使用 `--plugin-dir` 启动的会话中,会话记录中会有一行说明这一点,例如 `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`。[调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log) 将其记录为 `ui.render (Pane): a hook returned a tree that does not validate` 并带有相同的原因。会话中没有其他内容出现,所以当绘制不显示时,请检查该行或日志。471在使用 `--plugin-dir` 启动的会话中,会话记录中会有一行说明这一点,例如 `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`。[调试日志](/docs/zh-CN/plugins/mods/troubleshoot#read-the-debug-log) 将其记录为 `ui.render (Pane): a hook returned a tree that does not validate` 并带有相同的原因。会话中没有其他内容出现,所以当绘制不显示时,请检查该行或日志。

453 472 

454<h3 id="link-in-the-desktop-app">473<h3 id="link-in-the-desktop-app">

455 桌面应用中的 `Link`474 桌面应用和 VS Code 中的 `Link`

456</h3>475</h3>

457 476 

458在桌面应用中,除非 `Link` 的 `href` 满足以下要求,否则它会绘制为纯文本:477在桌面应用和 VS Code 扩展中,除非 `Link` 的 `href` 满足以下要求,否则它会绘制为纯文本:

459 478 

460* **协议和主机**:`https:` URL,或 `http://localhost` URL,例如 `http://localhost:3000`479* **协议和主机**:`https:` URL,或 `http://localhost` URL,例如 `http://localhost:3000`

461* **不含 `@`**:将路径或查询中的 `@` 写为 `%40`480* **不含 `@`**:将路径或查询中的 `@` 写为 `%40`


477 496 

478对于热力图、迷你图或终端中的游戏板,绘制一个 `Raster`,而不是为每个单元格绘制一个 `Box`。`Raster` 接受 `key`、其大小(以 `columns` 和 `rows` 为单位)和 `cells`,后者是一个打包了所有单元格的 base64 字符串。每个单元格是三个数字:字符的代码点、其颜色和其背景颜色。颜色是十六进制的 24 位 RGB 值,例如 `0xc62828` 表示红色。值 `0x01000000` 比该范围大一,表示终端的默认值。497对于热力图、迷你图或终端中的游戏板,绘制一个 `Raster`,而不是为每个单元格绘制一个 `Box`。`Raster` 接受 `key`、其大小(以 `columns` 和 `rows` 为单位)和 `cells`,后者是一个打包了所有单元格的 base64 字符串。每个单元格是三个数字:字符的代码点、其颜色和其背景颜色。颜色是十六进制的 24 位 RGB 值,例如 `0xc62828` 表示红色。值 `0x01000000` 比该范围大一,表示终端的默认值。

479 498 

480桌面应用没有 `Raster`,所以请检查 `e.surface` 并在那里绘制文本。此窗格主体绘制一个三乘二的热力图:499终端以外的应用没有 `Raster`,所以请检查 `e.surface` 并在那里绘制文本。此窗格主体绘制一个三乘二的热力图:

481 500 

482```javascript theme={null}501```javascript theme={null}

483// 表示"使用终端的默认颜色"的值502// 表示"使用终端的默认颜色"的值


535 554 

536您的 mod 永远不会自己读取键盘。用户按下一个键,Claude Code 决定它属于您的哪个控件,然后该控件的回调运行。除了[条带上的数字快捷键](/docs/zh-CN/plugins/mods/reference#elements),这仅在您的窗格或条带拥有键盘焦点时发生。其余时间,按键进入输入框。555您的 mod 永远不会自己读取键盘。用户按下一个键,Claude Code 决定它属于您的哪个控件,然后该控件的回调运行。除了[条带上的数字快捷键](/docs/zh-CN/plugins/mods/reference#elements),这仅在您的窗格或条带拥有键盘焦点时发生。其余时间,按键进入输入框。

537 556 

557在 [VS Code 扩展](#draw-in-the-vs-code-extension)中,按钮没有快捷键:用户点击按钮或在按钮上按 Enter,并在字段中输入。

558 

538<h4 id="how-a-pane-gets-keyboard-focus">559<h4 id="how-a-pane-gets-keyboard-focus">

539 窗格如何获得键盘焦点560 窗格如何获得键盘焦点

540</h4>561</h4>


570 设置快捷键和初始焦点591 设置快捷键和初始焦点

571</h4>592</h4>

572 593 

573控件上的以下属性决定了键盘如何到达它:

574 

575* **`hotkey`**:要让用户用一个键按下 `Button`,请为它指定一个 `hotkey`,值为一个数字或一个小写字母,如 `hotkey: 'a'`594* **`hotkey`**:要让用户用一个键按下 `Button`,请为它指定一个 `hotkey`,值为一个数字或一个小写字母,如 `hotkey: 'a'`

576* **`autoFocus`**:要选择窗格打开时哪个控件拥有焦点,请向它添加 `autoFocus: true`。该属性只接受 `true`,因此请在其他控件上省略它。595* **`autoFocus`**:要选择窗格打开时哪个控件拥有焦点,请向它添加 `autoFocus: true`。在 [VS Code 扩展](#draw-in-the-vs-code-extension)中,`autoFocus` 不起作用:控件的绘制方式与省略它时相同,您无需做任何更改。该 prop 只接受 `true`,因此请在其他控件上省略它。

577 596 

578快捷键的显示方式取决于按钮和应用:597快捷键的显示方式取决于按钮和应用:

579 598 

580| 按钮 | 在终端中 | 在桌面应用中 |599| 按钮 | 在终端中 | 在桌面应用中 | 在 VS Code 扩展中 |

581| :- | :- | :- |600| :- | :- | :- | :- |

582| 带括号(默认) | `[ Add one ]`,不显示快捷键 | 标签,旁边有一个小键 |601| 带括号(默认) | `[ Add one ]`,不显示快捷键 | 标签,旁边有一个小键 | 标签,快捷键不起作用 |

583| 使用 `plain: true` | `1: One` | 标签,旁边有一个小键 |602| 使用 `plain: true` | `1: One` | 标签,旁边有一个小键 | 标签,快捷键不起作用 |

584 603 

585在终端中,请在带括号按钮的标签中写明按键,或使用 `plain: true`,以便用户知道要按什么。[元素参考](/docs/zh-CN/plugins/mods/reference#elements)包含其他 `Button` 规则:`action`、条带上的数字快捷键,以及同一快捷键上的两个按钮。604在终端中,请在带括号按钮的标签中写明按键,或使用 `plain: true`,以便用户知道要按什么。[元素参考](/docs/zh-CN/plugins/mods/reference#elements)包含其他 `Button` 规则:`action`、条带上的数字快捷键,以及同一快捷键上的两个按钮。

586 605 

Details

24* **在命令上运行自己的代码**:一个 `/command`,立即运行你的函数,没有 Claude 转折,即使 Claude 正在工作。请参阅[添加命令或工具](/docs/zh-CN/plugins/mods/api#add-a-command-or-a-tool)。24* **在命令上运行自己的代码**:一个 `/command`,立即运行你的函数,没有 Claude 转折,即使 Claude 正在工作。请参阅[添加命令或工具](/docs/zh-CN/plugins/mods/api#add-a-command-or-a-tool)。

25* **在 hooks 之间共享数据**:mod 的 hooks 共享其文件中的变量,所以一个 hook 记录的内容,另一个可以显示。例如,一个 hook 可以计算工具调用,而另一个在微调器旁边显示计数,或者一个可以读取每个请求的令牌使用情况,而另一个在窗格中绘制它。请参阅[对事件做出反应](/docs/zh-CN/plugins/mods/events)。25* **在 hooks 之间共享数据**:mod 的 hooks 共享其文件中的变量,所以一个 hook 记录的内容,另一个可以显示。例如,一个 hook 可以计算工具调用,而另一个在微调器旁边显示计数,或者一个可以读取每个请求的令牌使用情况,而另一个在窗格中绘制它。请参阅[对事件做出反应](/docs/zh-CN/plugins/mods/events)。

26 26 

27Mods 在 Claude Code CLI 和 Claude Desktop 应用的代码选项卡中工作。请参阅[Mods 在哪里运行](#where-mods-run)以了解它们在其他地方的行为,例如在 VS Code 扩展、`claude -p` 和云会话中。如果设置 hook、skill 或 MCP 服务器已经做了你需要的事情,在编写 mod 之前[比较它们](#compare-mods-settings-hooks-skills-and-mcp-servers)。要为组织管理 mods,请参阅[为你的组织管理 mods](/docs/zh-CN/plugins/mods/admin)。27mod 可在 Claude Code CLI、Claude Desktop 应用的 Code 选项卡以及 VS Code 扩展中工作。请参阅[mod 在哪里运行](#where-mods-run)以了解它们在其他地方的行为,例如在 `claude -p` 和云端会话中。如果设置 hook、skill 或 MCP 服务器已经能满足您的需要,请在编写 mod 之前先[比较它们](#compare-mods-settings-hooks-skills-and-mcp-servers)。要为组织管理 mod,请参阅[为您的组织管理 mod](/docs/zh-CN/plugins/mods/admin)。

28 28 

29<h2 id="get-a-mod">29<h2 id="get-a-mod">

30 获取 mod30 获取 mod


212 Mods 在哪里运行212 Mods 在哪里运行

213</h3>213</h3>

214 214 

215mod 的 hook 在加载该插件的每种会话中运行,无论由哪个提供商提供模型,包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry。绘制的范围更窄:只有终端和桌面应用会显示 mod 的窗格、带状区域和替换的行。此表列出了您可能运行 Claude Code 的每个地方:215mod 的 hook 在加载该插件的每种会话中运行,无论由哪个提供商提供模型,包括 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry。绘制的范围更窄:mod 绘制的内容会出现在终端、桌面应用和 VS Code 扩展中。此表列出了您可能运行 Claude Code 的每个地方:

216 216 

217| 您运行 Claude Code 的地方 | Hook 是否运行 | Mod 绘制的内容是否出现 |217| 您运行 Claude Code 的地方 | Hook 是否运行 | Mod 绘制的内容是否出现 |

218| :- | :- | :- |218| :- | :- | :- |

219| 终端中的 `claude`,包括编辑器的集成终端和 JetBrains 插件 | 是 | 是 |219| 终端中的 `claude`,包括编辑器的集成终端和 JetBrains 插件 | 是 | 是 |

220| 桌面应用的代码选项卡,WSL 会话除外 | 是 | 是,[元素表](/docs/zh-CN/plugins/mods/reference#elements)标记为仅限终端的元素除外 |220| 桌面应用的代码选项卡,WSL 会话除外 | 是 | 是,[元素表](/docs/zh-CN/plugins/mods/reference#elements)标记为仅限终端的元素除外 |

221| 桌面应用中的 [WSL 会话](/docs/zh-CN/desktop-wsl) | 否,因为插件在 WSL 会话中不可用 | 否 |221| 桌面应用中的 [WSL 会话](/docs/zh-CN/desktop-wsl) | 否,因为插件在 WSL 会话中不可用 | 否 |

222| VS Code 扩展的聊天面板 | 是 | 否 |222| VS Code 扩展的聊天面板 | 是 | 是,需使用扩展版本 2.1.299 或更高版本,并且在[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话中。[渲染位置](/docs/zh-CN/plugins/mods/reference#render-sites)表和[元素](/docs/zh-CN/plugins/mods/reference#elements)表标出了该面板绘制的内容。 |

223| `claude -p` 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) | 是 | 否 |223| `claude -p` 和 [Agent SDK](/docs/zh-CN/agent-sdk/overview) | 是 | 否 |

224| 从 claude.ai 或移动应用使用 [Remote Control](/docs/zh-CN/remote-control) | 是,在您机器上的会话中 | 在您机器上的终端中 |224| 从 claude.ai 或移动应用使用 [Remote Control](/docs/zh-CN/remote-control) | 是,在您机器上的会话中 | 在您机器上的终端中 |

225| [云端会话](/docs/zh-CN/claude-code-on-the-web) | 是,适用于[可进入云端会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)的插件 | 否 |225| [云端会话](/docs/zh-CN/claude-code-on-the-web) | 是,适用于[可进入云端会话](/docs/zh-CN/cloud-environments#what-carries-over-from-your-setup)的插件 | 否 |

Details

6 6 

7> Claude Code mod 的完整参考:hook 模块布局、事件、mods API 方法、渲染位置、按使用入口划分的元素、限制和设置。7> Claude Code mod 的完整参考:hook 模块布局、事件、mods API 方法、渲染位置、按使用入口划分的元素、限制和设置。

8 8 

9查阅 [mod](/docs/zh-CN/plugins/mods/overview) 可以处理的任何事件、可以调用的任何 mods API 方法,或可以在其中绘制的任何渲染位置,适用于 v2.1.290 起的 Claude Code CLI 和 Desktop 应用。每个条目给出名称和一行描述,如有相应的指南章节,还会链接到该章节。9查阅 [mod](/docs/zh-CN/plugins/mods/overview) 可以处理的任何事件、可以调用的任何 mods API 方法,或可以在其中绘制的任何渲染位置。条目涵盖 v2.1.290 起的 Claude Code CLI 和 Desktop 应用,以及 v2.1.299 起的 VS Code 扩展。每个条目给出名称和一行描述,如有相应的指南章节,还会链接到该章节。

10 10 

11<Note>11<Note>

12 完整的参考是 Claude Code 的 [mod TypeScript 声明](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts),其中描述了每个事件、方法和元素,并附有示例。GitHub 上的副本可能比您安装的 Claude Code 版本更旧。两者不一致时,请以 [Claude Code 为您的版本写入的副本](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)为准。12 完整的参考是 Claude Code 的 [mod TypeScript 声明](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts),其中描述了每个事件、方法和元素,并附有示例。GitHub 上的副本可能比您安装的 Claude Code 版本更旧。两者不一致时,请以 [Claude Code 为您的版本写入的副本](/docs/zh-CN/plugins/mods/create#get-the-types-for-your-build)为准。


255 渲染位置255 渲染位置

256</h2>256</h2>

257 257 

258渲染位置是 Claude Code 界面中的扩展点。每一行是 `ui.render` hook 中 `e.component` 的一个值,并列出了 `e.props` 的字段以及渲染它的应用。`e.surface` 为 `terminal` 或 `desktop`。[更改 Claude Code 已绘制的内容](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws)展示了 hook 在某个位置可以做什么,并为每种选择提供了示例。258渲染位置是 Claude Code 界面中的扩展点。每一行是 `ui.render` hook 中 `e.component` 的一个值,并列出了 `e.props` 的字段以及渲染它的应用。`e.surface` 指明正在绘制的应用,例如 `terminal`、`desktop` 或 `vscode`。[更改 Claude Code 已绘制的内容](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws)展示了 hook 在某个位置可以做什么,并为每种选择提供了示例。

259 

260在 VS Code 扩展中进行渲染需要扩展版本 2.1.299 或更高版本,并且需要一个[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话。[在 VS Code 扩展中绘制](/docs/zh-CN/plugins/mods/interface#draw-in-the-vs-code-extension)列出了该扩展在绘制上的不同之处。

259 261 

260| 位置 | `e.props` | `e.requestId` | 渲染于 |262| 位置 | `e.props` | `e.requestId` | 渲染于 |

261| :- | :- | :- | :- |263| :- | :- | :- | :- |

262| [`Pane`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | 窗格的 `id` | 终端、Desktop |264| [`Pane`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | 窗格的 `id` | 终端、Desktop、VS Code |

263| [`AbovePrompt`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |265| [`AbovePrompt`](/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |

264| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 消息 id | 终端、Desktop |266| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 消息 id | 终端、Desktop、VS Code |

265| `AssistantMessage` | 回复的文本 | 消息 id | 终端、Desktop |267| `AssistantMessage` | 回复的文本 | 消息 id | 终端、Desktop、VS Code |

266| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop |268| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop、VS Code |

267| `CommandOutput` | `command`、`text` | 消息 id | 终端、Desktop |269| `CommandOutput` | `command`、`text` | 消息 id | 终端、Desktop |

268| [`AskUserQuestion`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | 问题和选项 | 工具调用 id | 终端、Desktop |270| [`AskUserQuestion`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | 问题和选项 | 工具调用 id | 终端、Desktop、VS Code |

269| `ToolProgress` | `kind` | 工具调用 id | 终端 |271| `ToolProgress` | `kind` | 工具调用 id | 终端 |

270| [`Spinner`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | Agent id | 终端、Desktop |272| [`Spinner`](/docs/zh-CN/plugins/mods/interface#change-what-claude-code-already-draws) | `word`、`message`、`suffix`、`mode` | Agent id | 终端、Desktop、VS Code |

271| `TurnDuration` | `word`、`durationMs` | 消息 id | 终端 |273| `TurnDuration` | `word`、`durationMs` | 消息 id | 终端 |

272| `InfoNotice` | `text`、`command` | 消息 id | 终端 |274| `InfoNotice` | `text`、`command` | 消息 id | 终端 |

273| `SessionMode` | `modes` | 单一实例 | 终端、Desktop |275| `SessionMode` | `modes` | 单一实例 | 终端、Desktop |

274| `PromptHint` | `isDraft`、`isWorking`、`hint` | 单一实例 | 终端、Desktop |276| `PromptHint` | `isDraft`、`isWorking`、`hint` | 单一实例 | 终端、Desktop |

275 277 

276`e.viewport` 包含 `columns`、`rows` 和 `isFullscreen`。在应用测量其窗口之前,它不存在。它的 `rows` 是整个窗口的高度,而不是您的窗格的高度。278`e.viewport` 包含 `columns`、`rows` 和 `isFullscreen`。在终端和 Desktop 应用中,在应用测量其窗口之前,它不存在。在这两处,它的 `rows` 是整个窗口的高度,而不是您的窗格的高度。在 VS Code 扩展中,它始终存在。

277 279 

278要使树适配其所在位置,请在 hook 中读取以下 prop:280要使树适配其所在位置,请在 hook 中读取以下 prop:

279 281 

280* **`Pane` 或横栏的宽度**:按 `e.props.bodyColumns` 绘制282* **`Pane` 或横栏的宽度**:按 `e.props.bodyColumns` 绘制

281* **会话记录旁的 `Pane` 的高度**:当 `e.props.placement` 为 `'dock'` 时,`e.props.scroll.bodyRows` 是该窗格可供您的树使用的行数283* **会话记录旁的 `Pane` 的高度**:当 `e.props.placement` 为 `'dock'` 时,`e.props.scroll.bodyRows` 是该窗格可供您的树使用的行数

282* **输入框上方的 `Pane` 的高度**:当 `e.props.placement` 为 `'inline'` 时,窗格会随您的树增高,直到达到上限,而 `bodyRows` 就是该上限。[`$.ui.open` 的 `rows` 字段](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)可请求不同的上限。284* **输入框上方的 `Pane` 的高度**:当 `e.props.placement` 为 `'inline'` 时,窗格会随您的树增高,直到达到上限,而 `bodyRows` 就是该上限。如需请求不同的上限,请参阅 [`$.ui.open` 的 `rows` 字段](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)。

283 285 

284比窗格更高的树会整体滚动。286比窗格更高的树会整体滚动。

285 287 


289 291 

290元素是 `ui.render` hook 所返回的树的构建块,您可以从 `$.ui.resolve(e)` 获取它们。[用元素构建树](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements)展示了常用元素以及终端如何绘制它们,[界面图库](/docs/zh-CN/plugins/mods/gallery)提供了大多数元素的截图。对勾表示该应用可以绘制该元素。292元素是 `ui.render` hook 所返回的树的构建块,您可以从 `$.ui.resolve(e)` 获取它们。[用元素构建树](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements)展示了常用元素以及终端如何绘制它们,[界面图库](/docs/zh-CN/plugins/mods/gallery)提供了大多数元素的截图。对勾表示该应用可以绘制该元素。

291 293 

292| 元素 | 主要 prop | 终端 | Desktop |294| 元素 | 主要 prop | 终端 | Desktop | VS Code |

293| :- | :- | :-: | :-: |295| :- | :- | :-: | :-: | :-: |

294| [`Box`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、`gap`、`padding`、`margin`、`width`、`height`、[`borderStyle`](#box-border-styles)、`backgroundColor`、`position`、`hover` | ✓ | ✓ |296| [`Box`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、`gap`、`padding`、`margin`、`width`、`height`、[`borderStyle`](#box-border-styles)、`backgroundColor`、`position`、`hover` | ✓ | ✓ | ✓ |

295| [`Text`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、`bold`、`italic`、`underline`、`dimColor`、`inverse`、`wrap` | ✓ | ✓ |297| [`Text`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、`bold`、`italic`、`underline`、`dimColor`、`inverse`、`wrap` | ✓ | ✓ | ✓ |

296| [`Button`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ |298| [`Button`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ | ✓ |

297| [`Link`](/docs/zh-CN/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。请参阅[限制](#limits)。 | ✓ | ✓ |299| [`Link`](/docs/zh-CN/plugins/mods/interface#link-in-the-desktop-app) | `href`、`label`。请参阅[限制](#limits)。 | ✓ | ✓ | ✓ |

298| [`Code`](/docs/zh-CN/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ |300| [`Code`](/docs/zh-CN/plugins/mods/gallery#show-code-and-changes) | `source`、`language`、`path`、`startLine`、`format`、`wrap` | ✓ | ✓ | ✓ |

299| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ |301| `Markdown` | `text`、`key`、`dimColor`、`onLinkPress`、`pressableLinks` | ✓ | ✓ | ✓ |

300| [`Input`](/docs/zh-CN/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`、`label`、`placeholder`、`value`、`submitLabel`、`onSubmit`、`onInput`、`autoFocus` | ✓ | ✓ |302| [`Input`](/docs/zh-CN/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`、`label`、`placeholder`、`value`、`submitLabel`、`onSubmit`、`onInput`、`autoFocus` | ✓ | ✓ | ✓ |

301| `Select` | `key`、`label`、`options`、`value`、`onSelect`、`autoFocus` | ✓ | ✓ |303| `Select` | `key`、`label`、`options`、`value`、`onSelect`、`autoFocus` | ✓ | ✓ | ✓ |

302| `Svg` | 一个 SVG 文档,最多 131,072 个字符 | | ✓ |304| `Svg` | 一个 SVG 文档,最多 131,072 个字符 | | ✓ | ✓ |

303| [`Client`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `module`、`key` | ✓ | ✓ |305| [`Client`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `module`、`key` | ✓ | ✓ | |

304| [`Raster`](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`、`columns`(最多 512)、`rows`(最多 256)、`cells`。请参阅[绘制彩色单元格网格](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells)。 | ✓ | |306| [`Raster`](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`、`columns`(最多 512)、`rows`(最多 256)、`cells`。请参阅[绘制彩色单元格网格](/docs/zh-CN/plugins/mods/interface#draw-a-grid-of-colored-cells)。 | ✓ | | |

305| `Image` | 最多 2 MiB 的 PNG 或 RGBA 字节,或文件路径,`columns` 和 `rows`(最多 255),以及 `alt` 文本。 | ✓ | |307| `Image` | 最多 2 MiB 的 PNG 或 RGBA 字节,或文件路径,`columns` 和 `rows`(最多 255),以及 `alt` 文本。 | ✓ | | |

306 308 

307更多 `Button` 规则:`action` 指定 Claude Code 自身的某个[快捷键操作](/docs/zh-CN/keybindings),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮。当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发。当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。309更多 `Button` 规则:`action` 指定 Claude Code 自身的某个[快捷键操作](/docs/zh-CN/keybindings),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮。当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发。当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。

308 310 

311VS Code 扩展会忽略某些元素 prop,并像您省略了这些 prop 一样绘制该元素:

312 

313* **`Box`**:`position` 和 `hover`

314* **`Button`**:`hotkey`、`plain`、`autoFocus` 和 `action`,因此用户在其中通过点击来按下按钮,或在按钮获得焦点后按 Enter

315* **`Code`**:`language`、`path`、`startLine`、`format` 和 `wrap`,因此代码绘制时不带颜色或行号,而 `format: 'diff'` 代码块会显示 diff 的原始文本

316* **`Input` 和 `Select`**:`autoFocus`

317 

309<h3 id="box-border-styles">318<h3 id="box-border-styles">

310 `Box` 边框样式319 `Box` 边框样式

311</h3>320</h3>

Details

289 热键不起作用289 热键不起作用

290</h3>290</h3>

291 291 

292您的窗格没有键盘焦点。292您的窗格没有键盘焦点,或者绘图位于 VS Code 扩展中,而该扩展中的按钮没有热键。请按对应的情况操作:

293 293 

294按 Ctrl+X 然后 Tab,或单击窗格。使用 `focus: true` 从命令打开它。294* **没有键盘焦点**:按 Ctrl+X 然后 Tab,或单击窗格。要让窗格在打开时获得焦点,请从命令中使用 `focus: true` 打开它。

295* **在 VS Code 扩展中**:单击按钮,或在按钮获得焦点后按 Enter

295 296 

296<h3 id="a-drawing-works-in-the-terminal-and-not-in-the-desktop-app">297<h3 id="a-drawing-works-in-the-terminal-and-not-in-the-desktop-app-or-vs-code">

297 绘图在终端中有效,在桌面应用中无效298 绘图在终端中有效,在桌面应用或 VS Code 中无效

298</h3>299</h3>

299 300 

300该位置或元素在那里不可用。301要么该应用不绘制该位置或元素,要么该会话属于 VS Code 扩展不为 mod 绘制任何内容的会话。该 mod 的其他 hook 仍会运行。请检查以下原因:

301 302 

302检查 [渲染位置](/docs/zh-CN/plugins/mods/reference#render-sites) 和 [元素](/docs/zh-CN/plugins/mods/reference#elements) 表。303* **该位置或元素在该应用中不会被绘制**:在[渲染位置](/docs/zh-CN/plugins/mods/reference#render-sites)表中查找您的位置,并在[元素](/docs/zh-CN/plugins/mods/reference#elements)表中查找您的元素。对于该应用不具备的元素,请在 hook 中检查 `e.surface`,并返回该应用可以绘制的树。

304* **VS Code 扩展版本低于 2.1.299**:从[扩展版本](/docs/zh-CN/vs-code#install-the-extension) 2.1.299 起,聊天面板才会为 mod 进行绘制。请在 VS Code 的扩展视图中检查版本,并在该处更新扩展。

305* **该 VS Code 会话不获取功能标志**:在聊天面板中绘制需要获取功能标志。在 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上的会话,或通过 [Claude apps 网关](/docs/zh-CN/claude-apps-gateway)的会话,以及[需要获取功能标志的功能](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)中列出的其他会话,都会跳过此步骤。要在此类会话中查看绘图,请改为在终端(例如 VS Code 的集成终端)中运行 `claude`。

303 306 

304<h2 id="an-edit-or-a-value-is-lost">307<h2 id="an-edit-or-a-value-is-lost">

305 编辑或值丢失308 编辑或值丢失

Details

72 | `-d`, `--debug[=<filter>]` | 为服务器打开调试日志记录,可选择按类别过滤。仅以 `=` 形式传递过滤器,例如 `--debug=api,hooks`。需要 Claude Code v2.1.282 或更高版本。 |72 | `-d`, `--debug[=<filter>]` | 为服务器打开调试日志记录,可选择按类别过滤。仅以 `=` 形式传递过滤器,例如 `--debug=api,hooks`。需要 Claude Code v2.1.282 或更高版本。 |

73 | `--debug-file <path>` | 将调试日志写入给定文件。 |73 | `--debug-file <path>` | 将调试日志写入给定文件。 |

74 | `--verbose` | 显示详细的连接和会话日志。 |74 | `--verbose` | 显示详细的连接和会话日志。 |

75 | `--sandbox`, `--no-sandbox` | 已在 v2.1.300 中移除。如果您传递任一标志,服务器会[报错退出](/docs/zh-CN/errors#sandbox-is-not-supported-by-claude-remote-control)而不是启动。 |

75 76 

76 如果您在 `remote-control` 之前传递全局 `claude` 标志,或包装脚本添加了一个,Claude Code 不会将该标志转移到服务器创建的会话。Claude Code 仅在已知删除该标志不会改变这些会话可以执行的操作时才允许该标志通过,例如 `--verbose` 或 `--model`。对于任何其他标志,例如 `--settings`,Claude Code [拒绝启动](/docs/zh-CN/errors#not-carried-over-to-the-sessions-remote-control-starts)并命名要删除的标志。77 如果您在 `remote-control` 之前传递全局 `claude` 标志,或包装脚本添加了一个,Claude Code 不会将该标志转移到服务器创建的会话。Claude Code 仅在已知删除该标志不会改变这些会话可以执行的操作时才允许该标志通过,例如 `--verbose` 或 `--model`。对于任何其他标志,例如 `--settings`,Claude Code [拒绝启动](/docs/zh-CN/errors#not-carried-over-to-the-sessions-remote-control-starts)并命名要删除的标志。

77 78 

skills.md +8 −2

Details

720 720 

721您还可以在一条消息的开头叠加多个 skill。输入 `/write-tests /fix-issue 123` 会加载这两个 skill,并将末尾的文本 `123` 作为 `$ARGUMENTS` 传递给每个 skill。721您还可以在一条消息的开头叠加多个 skill。输入 `/write-tests /fix-issue 123` 会加载这两个 skill,并将末尾的文本 `123` 作为 `$ARGUMENTS` 传递给每个 skill。

722 722 

723Claude Code 会展开第一个 skill 以及其后叠加的最多五个 skill。展开会在第一个不是内联用户可调用 skill 的标记处停止,因此以[分叉子代理](#run-skills-in-a-subagent)方式运行的 skill(例如 [`/code-review`](/docs/zh-CN/code-review#review-a-diff-locally)),或其参数本身可能以斜杠命令开头的 skill(例如 `/loop`),也会在该处终止叠加。该标记及其后的所有内容会成为每个已展开 skill 的参数文本。从 v2.1.218 起,`/code-review` 以分叉子代理方式运行;在更早的版本中,它以内联方式运行并可叠加。723Claude Code 会展开第一个 skill 以及其后叠加的最多五个 skill。展开会在第一个不是内联用户可调用 skill 的标记处停止,因此以[分叉子代理](#run-skills-in-a-subagent)方式运行的 skill(例如 [`/code-review`](/docs/zh-CN/code-review-local)),或其参数本身可能以斜杠命令开头的 skill(例如 `/loop`),也会在该处终止叠加。该标记及其后的所有内容会成为每个已展开 skill 的参数文本。从 v2.1.218 起,`/code-review` 以分叉子代理方式运行;在更早的版本中,它以内联方式运行并可叠加。

724 724 

725要按位置访问单个参数,请使用 `$ARGUMENTS[N]` 或更简短的 `$N`:725要按位置访问单个参数,请使用 `$ARGUMENTS[N]` 或更简短的 `$N`:

726 726 


832 832 

833使用默认的 `bash` shell,将 `|| true` 附加到任何你期望退出非零的其他命令。一个在发现问题时退出 1 的检查脚本就是一个例子。833使用默认的 `bash` shell,将 `|| true` 附加到任何你期望退出非零的其他命令。一个在发现问题时退出 1 的检查脚本就是一个例子。

834 834 

835<h4 id="control-characters-in-injected-commands">

836 注入命令中的控制字符

837</h4>

838 

839`No shell command in <name> was run` 表示该文件中的某个 `!` 命令包含制表符或换行符以外的原始控制字符,因此其中所有命令都不会运行。请参阅[如何查找并删除该字符](/docs/zh-CN/errors#no-shell-command-was-run)。

840 

835<h4 id="permission-checks-on-injected-commands">841<h4 id="permission-checks-on-injected-commands">

836 注入命令的权限检查842 注入命令的权限检查

837</h4>843</h4>


865 871 

866后台化的分叉也使用[适用于后台子代理的更窄工具集](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)运行:技能的子代理是常规代理类型,因此分叉对话的子代理的豁免不适用于它。如果你的技能的步骤依赖于该集合之外的工具,请设置 `background: false` 以保持完整的工具集。872后台化的分叉也使用[适用于后台子代理的更窄工具集](/docs/zh-CN/sub-agents#run-subagents-in-foreground-or-background)运行:技能的子代理是常规代理类型,因此分叉对话的子代理的豁免不适用于它。如果你的技能的步骤依赖于该集合之外的工具,请设置 `background: false` 以保持完整的工具集。

867 873 

868在后台运行的分叉技能在你的会话的[检查点](/docs/zh-CN/checkpointing)之外应用其编辑,因此 `/rewind` 不会撤销它们;使用 git 来恢复它们。874在后台运行的分叉 skill 会在您会话的[检查点](/docs/zh-CN/checkpointing#subagent-edits-not-restored)之外应用其编辑。此后,`/rewind` 只会恢复 Claude 已在您的对话中编辑过的文件。该 skill 对其他文件的编辑会保留,因此请使用 git 来还原它们。

869 875 

870<Warning>876<Warning>

871 `context: fork` 仅对具有明确说明的技能有意义。如果你的技能包含"使用这些 API 约定"之类的指南而没有任务,子代理会收到指南但没有可操作的提示,并返回而没有有意义的输出。877 `context: fork` 仅对具有明确说明的技能有意义。如果你的技能包含"使用这些 API 约定"之类的指南而没有任务,子代理会收到指南但没有可操作的提示,并返回而没有有意义的输出。

ultrareview.md +1 −1

Details

18* **更广泛的覆盖范围**:许多审查代理并行探索更改,这会发现本地审查可能遗漏的问题18* **更广泛的覆盖范围**:许多审查代理并行探索更改,这会发现本地审查可能遗漏的问题

19* **无本地资源使用**:审查完全在云沙箱中运行,因此您的终端在运行时保持空闲,可用于其他工作19* **无本地资源使用**:审查完全在云沙箱中运行,因此您的终端在运行时保持空闲,可用于其他工作

20 20 

21Ultrareview 需要使用 claude.ai 账户进行身份验证,因为它在 Anthropic 基础设施上作为云端会话运行。如果您仅使用 API 密钥登录,请先运行 `/login` 并使用 claude.ai 进行身份验证。当使用 Claude Code 与 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 时,Ultrareview 不可用;对于已启用零数据保留或已应用 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织也不可用。当 ultrareview 不可用时,`/code-review ultra` 会在您的会话中运行本地审查。21Ultrareview 需要使用 claude.ai 账户进行身份验证,因为它在 Anthropic 基础设施上作为云端会话运行。如果您仅使用 API 密钥登录,请先运行 `/login` 并使用 claude.ai 进行身份验证。当使用 Claude Code 与 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 时,Ultrareview 不可用;对于已启用零数据保留或已应用 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织也不可用。在这些情况下,`/code-review ultra` 会改为在您的会话中运行本地审查。使用[客户管理的加密密钥](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)的组织无法运行 ultrareview。要在本地审查您的更改,请运行 `/code-review`。

22 22 

23<h2 id="run-ultrareview-from-the-cli">23<h2 id="run-ultrareview-from-the-cli">

24 从 CLI 运行 ultrareview24 从 CLI 运行 ultrareview

vs-code.md +76 −2

Details

220* 如果粘贴时出现 `Removed 3 invisible characters from the pasted text` 之类的提示,说明文本已在去除这些字符后输入。220* 如果粘贴时出现 `Removed 3 invisible characters from the pasted text` 之类的提示,说明文本已在去除这些字符后输入。

221* 如果发送时出现有关已移除字符的提示,说明没有发送任何内容。清理后的文本已回到输入框中。再次发送即可按所示内容发送文本。221* 如果发送时出现有关已移除字符的提示,说明没有发送任何内容。清理后的文本已回到输入框中。再次发送即可按所示内容发送文本。

222 222 

223<h3 id="latex-math-in-responses">

224 回复中的 LaTeX 数学公式

225</h3>

226 

227聊天面板会将 Claude 回复中的 LaTeX 数学公式显示为排版后的公式。数学公式渲染需要 Claude Code v2.1.301 或更高版本。在[终端模式](#switch-to-terminal-mode)下,数学公式不会被排版。面板会同时排版行间公式和行内公式:

228 

229* **行间公式**:单独占据一行或多行的 `$$ … $$` 或 `\[ … \]` 块,以及语言为 `math` 的围栏代码块

230* **行内公式**:在同一行内开始和结束的 `$…$` 或 `\(…\)`,例如 `$E = mc^2$` 或 `\(a^2 + b^2 = c^2\)`

231 

232面板会尝试将数学公式与相同字符的其他用法区分开来,因此 `$HOME`、像 `$5` 这样的价格或 `sed 's/\(foo\)/\1/'` 之类的文本不会被排版。代码片段内的文本,以及除围栏 `math` 块之外的任何代码块内的文本,也都不会被排版。如果某个公式在您期望被排版时仍按原样显示,请参阅[公式显示为原始 LaTeX](#a-formula-shows-as-raw-latex)。

233 

234当您选择并复制包含已排版公式的文本时,得到的是以 `$…$` 或 `$$…$$` 分隔符包裹的公式 TeX 源码,而不是绘制出的符号。[**Copy response**](#use-the-prompt-box) 和 `/copy` 会按 Claude 编写的原样提供回复,包括 TeX 源码。

235 

223<h3 id="resume-past-conversations">236<h3 id="resume-past-conversations">

224 恢复过去的对话237 恢复过去的对话

225</h3>238</h3>

226 239 

227点击 Claude Code 面板顶部的 **Session history** 按钮即可访问您的对话历史。您可以按关键字搜索或按时间浏览。240点击 Claude Code 面板顶部的 **Session history** 按钮即可访问您的对话历史。您可以按关键字搜索或按时间浏览。

228 241 

229点击任意对话即可带着完整的消息历史恢复它。如果该对话已在当前窗口的另一个标签页中打开,点击它会切换到该标签页。有关恢复会话的更多信息,请参阅[管理会话](/docs/zh-CN/sessions)。242点击任意对话即可带着完整的消息历史恢复它。如果该对话已在当前窗口的另一个标签页中打开,点击它会切换到该标签页。如果消息一开始显示为空白,请参阅[为什么消息为空白以及何时出现](#a-resumed-conversation-is-blank-at-first)。有关恢复会话的更多信息,请参阅[管理会话](/docs/zh-CN/sessions)。

230 243 

231* **会话标题**:新会话会根据您的第一条消息获得 AI 生成的标题。244* **会话标题**:新会话会根据您的第一条消息获得 AI 生成的标题。

232* **重命名和归档**:将鼠标悬停在会话上即可显示这些操作。重命名可为其设置描述性标题,归档则会将其移到列表底部的 **Archived sessions** 组中。245* **重命名和归档**:将鼠标悬停在会话上即可显示这些操作。重命名可为其设置描述性标题,归档则会将其移到列表底部的 **Archived sessions** 组中。


321* **编辑器选项卡**:对话会随其选项卡返回。334* **编辑器选项卡**:对话会随其选项卡返回。

322* **侧边栏**:如果您在过去 10 分钟内发送了消息或 Claude 在其中做出了响应,对话会返回。如果它没有返回,请从 [Session history](#resume-past-conversations) 恢复对话。335* **侧边栏**:如果您在过去 10 分钟内发送了消息或 Claude 在其中做出了响应,对话会返回。如果它没有返回,请从 [Session history](#resume-past-conversations) 恢复对话。

323 336 

324如果另一个 Claude Code 进程仍打开着该对话,在此处打开之前会先询问您,显示的 **Open here anyway** 通知与您[从会话历史记录恢复对话](#resume-past-conversations)时相同。337如果另一个 Claude Code 进程仍打开着该对话,在此处打开之前会先询问您,显示的 **Open here anyway** 通知与您[从会话历史记录恢复对话](#resume-past-conversations)时相同。如果消息起初显示为空白,请参阅[它们为何为空白以及何时显示](#a-resumed-conversation-is-blank-at-first)。

325 338 

326如果重新加载中断了 Claude 的中间步骤,当对话返回时 Claude 会继续该步骤,聊天中的通知会标记该继续。需要 Claude Code v2.1.274 或更高版本。如果步骤在一小时前被中断或会话在其他地方打开,对话会返回为空闲状态。339如果重新加载中断了 Claude 的中间步骤,当对话返回时 Claude 会继续该步骤,聊天中的通知会标记该继续。需要 Claude Code v2.1.274 或更高版本。如果步骤在一小时前被中断或会话在其他地方打开,对话会返回为空闲状态。

327 340 

328要关闭继续功能,请打开 [Continue After Reload setting](vscode://settings/claudeCode.continueAfterReload) 并取消勾选它。在 VS Code 的环境中或在 [`environmentVariables` 设置](#extension-settings)中设置 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars#variables) 或任何其他 `CLAUDE_CODE_RESUME_` 变量在面板中不起作用,因为扩展会在启动面板的会话之前移除这些变量。341要关闭继续功能,请打开 [Continue After Reload setting](vscode://settings/claudeCode.continueAfterReload) 并取消勾选它。在 VS Code 的环境中或在 [`environmentVariables` 设置](#extension-settings)中设置 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/zh-CN/env-vars#variables) 或任何其他 `CLAUDE_CODE_RESUME_` 变量在面板中不起作用,因为扩展会在启动面板的会话之前移除这些变量。

329 342 

343<h4 id="a-conversation-was-not-reopened">

344 对话未被重新打开

345</h4>

346 

347重新加载后,如果出现一个新聊天,且其输入框上方显示类似如下的通知,则表示面板让您的对话保持关闭状态,因为该对话最近两次打开均未完成:

348 

349```text theme={null}

350“Fix the login bug” was not reopened. It did not finish opening the last 2 times, and opening it again may stop Claude Code from responding here.

351```

352 

353当面板在加载对话时崩溃或停止响应,或者您在对话打开后约三秒内重新加载或关闭窗口时,打开操作就不会完成。不会丢失任何内容:对话保持不变,并保留在 [Session history](#resume-past-conversations) 中。

354 

355* **仍要打开它**:单击 **Open it anyway** 或从 Session history 中选择该对话。如果它成功打开且面板继续正常工作,之后重新加载时它会照常返回。如果面板再次停止响应,请重新加载窗口,以返回到带有该通知的新聊天。

356* **让它保持关闭**:继续在新聊天中工作。发送提示词后,该通知即会消失。

357 

330<h3 id="run-multiple-conversations">358<h3 id="run-multiple-conversations">

331 运行多个对话359 运行多个对话

332</h3>360</h3>


464 492 

465有关插件系统的更多信息,请参阅 [Plugins](/docs/zh-CN/plugins/overview) 和 [Plugin marketplaces](/docs/zh-CN/plugins/overview)。493有关插件系统的更多信息,请参阅 [Plugins](/docs/zh-CN/plugins/overview) 和 [Plugin marketplaces](/docs/zh-CN/plugins/overview)。

466 494 

495<h3 id="plugins-that-draw-in-the-panel">

496 在面板中绘制内容的插件

497</h3>

498 

499包含 [mod](/docs/zh-CN/plugins/mods/overview) 的插件可以在聊天面板中绘制内容。绘制需要扩展版本 2.1.299 或更高版本,以及一个[获取功能标志](/docs/zh-CN/env-vars#features-that-need-feature-flag-fetching)的会话。对于此类插件,您可以看到:

500 

501* 对话旁边或输入框上方的窗格

502* 输入框上方的 toast 或状态栏

503* 以插件自己的方式绘制的消息或工具调用

504 

505当您安装的插件在面板中添加或更改内容时,会有一个标签注明该插件,措辞如下:

506 

507* **来自 token-chart 插件**:该插件绘制或输出了此内容,或者此卡片是该插件在向您询问某些事情

508* **由 token-chart 插件编辑**:该插件更改了 Claude Code 绘制的某些内容,例如工具调用

509* **来自 token-chart 插件的提示词**:该插件代表您发送了此消息

510 

511要阻止插件绘制内容,请在[插件对话框](#install-plugins)中关闭该插件。

512 

467<h2 id="automate-browser-tasks-with-chrome">513<h2 id="automate-browser-tasks-with-chrome">

468 使用 Chrome 自动化浏览器任务514 使用 Chrome 自动化浏览器任务

469</h2>515</h2>


898 944 

899或者,将扩展程序重新绑定到不同的键:打开 VS Code [键盘快捷键编辑器](https://code.visualstudio.com/docs/configure/keybindings)(`Cmd+K Cmd+S`),搜索 `Claude Code: Focus input`,并分配新的绑定。945或者,将扩展程序重新绑定到不同的键:打开 VS Code [键盘快捷键编辑器](https://code.visualstudio.com/docs/configure/keybindings)(`Cmd+K Cmd+S`),搜索 `Claude Code: Focus input`,并分配新的绑定。

900 946 

947<h3 id="a-resumed-conversation-is-blank-at-first">

948 恢复的对话起初显示为空白

949</h3>

950 

951当您[恢复过去的对话](#resume-past-conversations),或某个对话[在重新加载后恢复](#continue-conversations-after-a-reload)时,在该对话的 Claude Code 进程启动期间,其消息可能会保持空白。大约一秒后,空白区域中会出现 `Waiting for your plugins…`。

952 

953您无需执行任何操作。进程启动并确认没有插件需要先检查这些消息后,消息就会出现;如果启动时间较长,则会在 20 秒后出现。

954 

955<h3 id="the-panel-stops-responding-each-time-a-reload-reopens-a-conversation">

956 每次重新加载重新打开对话时面板都停止响应

957</h3>

958 

959如果每次重新加载后对话恢复时,整个面板都会崩溃、冻结或仅显示 `Something went wrong`,请将扩展程序更新到 v2.1.301 或更高版本。然后再次重新加载窗口或重启 VS Code。当对话连续两次未能完成打开后,您会得到一个新的聊天来替代它,并附有一条说明[该对话未被重新打开](#a-conversation-was-not-reopened)的通知。

960 

961<h3 id="a-formula-shows-as-raw-latex">

962 公式显示为原始 LaTeX

963</h3>

964 

965如果 Claude 回复中的所有数学公式都没有被排版,请在扩展视图中检查扩展程序的版本,因为[数学渲染](#latex-math-in-responses)需要 2.1.301 或更高版本。如果您使用的是[终端模式](#switch-to-terminal-mode)(无论版本如何,该模式都不会排版数学公式),请取消选中 [Use Terminal 设置](vscode://settings/claudeCode.useTerminal),以便 Claude Code 改为在聊天面板中打开。

966 

967如果某个公式按原样显示,而其附近的其他公式已被排版,请检查是否存在以下原因:

968 

969* **它被识别为数学公式以外的内容**:读起来像单词的 `$…$` 文本会按原样保留,例如 `$O(n log n)$`。以数字开头的 `$…$` 文本(例如 `$30$` 或 `$1/N$`)也会按原样保留,除非有 `=`、`+` 或 `^` 等字符将其标记为数学公式。请改为让 Claude 使用独占一行的 `$$` 块,面板会跳过此检查直接排版。

970* **它带有填充空格、过长或跨行**:美元符号内带有空格的 `$ x^2 $`、超过 60 个字符的 `$…$` 内容,以及跨两行的 `$…$` 或 `\(…\)` 都不会被排版。请改为让 Claude 使用独占一行的 `$$` 块,它不受这些限制。

971* **TeX 无法排版**:包含语法错误、宏定义(例如 `\newcommand` 或 `\def`)或未转义 `%` 的公式会按原样显示。请让 Claude 重写该公式,修正错误、去掉宏,或使用 `\%` 表示百分号。

972* **它过大**:长度超过 8,192 个字符的公式,或绘制后会远大于其源文本的公式,会按原样显示。请让 Claude 将其拆分为较小的公式,或以更紧凑的方式编写。

973* **它位于大量数学公式之后**:在回复中的同一文本块内,面板会按顺序排版公式,直到达到上限。之后超出上限的公式会按原样显示。请让 Claude 单独再次发送您需要的公式。

974 

901<h3 id="claude-code-never-responds">975<h3 id="claude-code-never-responds">

902 Claude Code 从不响应976 Claude Code 从不响应

903</h3>977</h3>

Details

103如果您已经在浏览器中连接了 GitHub,`/web-setup` 会警告您继续将替换您的云会话的该连接。103如果您已经在浏览器中连接了 GitHub,`/web-setup` 会警告您继续将替换您的云会话的该连接。

104 104 

105<Note>105<Note>

106 启用了[零数据保留](/docs/zh-CN/zero-data-retention)或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织无法使用 `/web-setup` 或其他云端会话功能。如果未安装 GitHub CLI 或未进行身份验证,Claude Code 会打开浏览器入门流程。106 启用了[零数据保留](/docs/zh-CN/zero-data-retention)或应用了 [HIPAA 配置](/docs/zh-CN/hipaa-setup)的组织无法使用 `/web-setup` 或其他云端会话功能。使用[客户管理的加密密钥](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)的组织也无法启动云端会话。如果未安装 GitHub CLI 或未进行身份验证,Claude Code 会打开浏览器入门流程。

107</Note>107</Note>

108 108 

109<Steps>109<Steps>

Details

74 <p className="digest-wins-title">其他改进</p>74 <p className="digest-wins-title">其他改进</p>

75 75 

76 <div className="digest-wins-grid">76 <div className="digest-wins-grid">

77 <div><a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 现在作为具有自己上下文窗口的后台子代理运行,因此审查工作不会进入您的对话,发现会在完成时到达</div>77 <div><a href="/docs/zh-CN/code-review-local"><code>/code-review</code></a> 现在作为具有自己上下文窗口的后台子代理运行,因此审查工作不会进入您的对话,发现会在完成时到达</div>

78 <div><code>/verify</code>、<code>/code-review</code> 和 <code>/deep-research</code> 仅在您调用时运行;Claude 不再自动启动它们</div>78 <div><code>/verify</code>、<code>/code-review</code> 和 <code>/deep-research</code> 仅在您调用时运行;Claude 不再自动启动它们</div>

79 <div><a href="/docs/zh-CN/interactive-mode#emoji-shortcodes">Emoji 快捷代码</a>在提示输入中自动完成:输入 <code>:heart:</code> 以插入 emoji,或在 <code>:</code> 后输入两个或更多字符以获得建议;使用 <code>emojiCompletionEnabled</code> 关闭它</div>79 <div><a href="/docs/zh-CN/interactive-mode#emoji-shortcodes">Emoji 快捷代码</a>在提示词输入框中自动补全:输入 <code>:heart:</code> 以插入 emoji,或在 <code>:</code> 后输入两个或更多字符以获得建议;使用 <code>emojiCompletionEnabled</code> 关闭它</div>

80 <div>具有 <code>context: fork</code> 的 Skills <a href="/docs/zh-CN/skills#run-skills-in-a-subagent">默认在后台运行</a>,skill 的 frontmatter 中的 <code>background: false</code> 在同一轮中等待结果</div>80 <div>具有 <code>context: fork</code> 的 skill <a href="/docs/zh-CN/skills#run-skills-in-a-subagent">默认在后台运行</a>,skill 的 frontmatter 中的 <code>background: false</code> 在同一轮次中等待结果</div>

81 <div>会话默认运行最多 20 个子代理并发;使用 <code>CLAUDE\_CODE\_MAX\_CONCURRENT\_SUBAGENTS</code> 更改 <a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">限制</a></div>81 <div>会话默认运行最多 20 个子代理并发;使用 <code>CLAUDE\_CODE\_MAX\_CONCURRENT\_SUBAGENTS</code> 更改 <a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">限制</a></div>

82 <div>`--max-budget-usd` 现在对子代理强制执行上限:一旦支出达到上限,Claude 无法启动更多,运行中的后台子代理会停止</div>82 <div>`--max-budget-usd` 现在对子代理强制执行上限:一旦支出达到上限,Claude 无法启动更多,运行中的后台子代理会停止</div>

83 <div>新的 <a href="/docs/zh-CN/sandboxing#disable-filesystem-isolation"><code>sandbox.filesystem.disabled</code></a> 设置跳过文件系统隔离,同时保持网络出口控制</div>83 <div>新的 <a href="/docs/zh-CN/sandboxing#disable-filesystem-isolation"><code>sandbox.filesystem.disabled</code></a> 设置跳过文件系统隔离,同时保持网络出口控制</div>

84 <div>在自动模式下,对危险 <code>rm</code> 命令、后台作业和可疑 Windows 路径的检查不再打开权限对话框;自动模式分类器会对其进行判决</div>84 <div>在自动模式下,对危险 <code>rm</code> 命令、后台作业和可疑 Windows 路径的检查不再打开权限对话框;自动模式分类器会对其进行判决</div>

85 <div>Bash 权限检查在更多 shell 形式上失败关闭,包括文件描述符重定向、<code>\[\[</code> 比较中的 Zsh 变量下标、可能运行不安全选项的 <code>help</code> 和 <code>man</code> 调用,以及超过 10,000 个字符的命令</div>85 <div>Bash 权限检查在更多 shell 形式上失败关闭,包括文件描述符重定向、<code>\[\[ ]]</code> 比较中的 Zsh 变量下标、可能运行不安全选项的 <code>help</code> 和 <code>man</code> 调用,以及超过 10,000 个字符的命令</div>

86 <div><a href="/docs/zh-CN/fast-mode">快速模式</a>不再支持 Opus 4.7:<code>/fast</code> 现在适用于 Opus 5 和 Opus 4.8</div>86 <div><a href="/docs/zh-CN/fast-mode">快速模式</a>不再支持 Opus 4.7:<code>/fast</code> 现在适用于 Opus 5 和 Opus 4.8</div>

87 <div>长时间运行的工具调用会发出定期进度心跳,而不是保持沉默</div>87 <div>长时间运行的工具调用会发出定期进度心跳,而不是保持沉默</div>

88 </div>88 </div>

Details

84 <p className="digest-wins-title">其他改进</p>84 <p className="digest-wins-title">其他改进</p>

85 85 

86 <div className="digest-wins-grid">86 <div className="digest-wins-grid">

87 <div>VS Code 扩展获得 <a href="/docs/zh-CN/vs-code#extension-settings">焦点视图</a>,它在每个轮次后面隐藏一个可展开行中的工具活动;从命令菜单或使用 <code>Ctrl+Alt+F</code>(Mac 上为 <code>Ctrl+Option+F</code>)切换它</div>87 <div>VS Code 扩展获得 <a href="/docs/zh-CN/vs-code#extension-settings">焦点视图</a>,它将工具活动隐藏在每轮一个可展开行之后;从命令菜单或使用 <code>Ctrl+Alt+F</code>(Mac 上为 <code>Ctrl+Option+F</code>)切换它</div>

88 <div>沙箱凭证文件在 Linux 和 WSL2 上接受 <a href="/docs/zh-CN/sandboxing#mask-credential-files"><code>mode: "mask"</code></a>,因此沙箱命令读取哨兵副本,而沙箱代理在出口时替换真实值;凭证掩蔽还获得 <code>extract</code>、JWT 感知的 <code>decode</code> 和 AWS SigV4 重新签名选项</div>88 <div>沙箱凭据文件在 Linux 和 WSL2 上接受 <a href="/docs/zh-CN/sandboxing#mask-credential-files"><code>mode: "mask"</code></a>,因此沙箱中的命令读取哨兵副本,而沙箱代理在出口时替换真实值;凭据掩蔽还获得 <code>extract</code>、JWT 感知的 <code>decode</code> 和 AWS SigV4 重新签名选项</div>

89 <div>市场可以使用新的 <code>archive</code> 源将插件分发为 <a href="/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source">zip 存档</a>,通过 HTTPS 下载,带有可选的 SHA-256 引脚,因此安装无需 git 或 npm</div>89 <div>市场可以使用新的 <code>archive</code> 源将插件分发为 <a href="/docs/zh-CN/plugins/marketplace-reference#archive-plugin-source">zip 存档</a>,通过 HTTPS 下载,带有可选的 SHA-256 固定校验,因此安装无需 git 或 npm</div>

90 <div><code>/review</code> 现在是 <a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 的别名,<code>/code-review</code> 不带努力级别会重用您上次输入的级别</div>90 <div><code>/review</code> 现在是 <a href="/docs/zh-CN/code-review-local"><code>/code-review</code></a> 的别名,<code>/code-review</code> 不带 effort 级别时会重用您上次输入的级别</div>

91 <div>您使用 <a href="/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork"><code>/fork</code></a> 复制的会话现在在其自己的 worktree 中进行代码更改,而不是原始会话的检出</div>91 <div>您使用 <a href="/docs/zh-CN/agent-view#copy-the-session-with-%2Ffork"><code>/fork</code></a> 复制的会话现在在其自己的 worktree 中进行代码更改,而不是在原始会话的检出中</div>

92 <div>您从 <a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin</code></a> 安装的插件在当前会话中激活,当这样做是安全的时;安装摘要报告 <code>Plugin is now active.</code> 或告诉您运行 <code>/reload-plugins</code></div>92 <div>您从 <a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin</code></a> 安装的插件在安全的情况下会在当前会话中激活;安装摘要会报告 <code>Plugin is now active.</code> 或告诉您运行 <code>/reload-plugins</code></div>

93 <div><a href="/docs/zh-CN/agent-view#how-file-edits-are-isolated">后台会话</a> 在 worktree 中更改代码现在在完成前提交和推送,仅当任务需要时才打开草稿拉取请求,并遵循您的 <code>CLAUDE.md</code> 中的 git 指令</div>93 <div>在 worktree 中更改了代码的<a href="/docs/zh-CN/agent-view#how-file-edits-are-isolated">后台会话</a>现在会在完成前提交和推送,仅当任务需要时才打开草稿 Pull Request,并遵循您的 <code>CLAUDE.md</code> 中的 git 指令</div>

94 <div>每个会话 200 个子代理的上限被移除,因此长时间运行的会话不再拒绝新的子代理;<a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">并发</a> 和深度限制仍然适用</div>94 <div>每个会话 200 个子代理的上限被移除,因此长时间运行的会话不再拒绝新的子代理;<a href="/docs/zh-CN/sub-agents#concurrent-subagent-limit">并发</a> 和深度限制仍然适用</div>

95 <div>存储库的签入设置不再能打开 <a href="/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions">远程控制自动连接</a>;改为在您的用户或托管设置中设置 <code>remoteControlAtStartup</code>,项目和本地设置只能将其关闭</div>95 <div>仓库中签入的设置不再能打开 <a href="/docs/zh-CN/remote-control#enable-remote-control-for-all-sessions">Remote Control 自动连接</a>;改为在您的用户或托管设置中设置 <code>remoteControlAtStartup</code>,项目和本地设置只能将其关闭</div>

96 <div><a href="/docs/zh-CN/worktrees#how-claude-code-enforces-isolation">Worktree 隔离</a> 现在不仅阻止文件编辑,还阻止 Bash 命令和 git 重定向到达主检出,在每种会话类型和会话的子代理中</div>96 <div><a href="/docs/zh-CN/worktrees#how-claude-code-enforces-isolation">Worktree 隔离</a> 现在不仅阻止文件编辑,还阻止到达主检出的 Bash 命令和 git 重定向,适用于每种会话类型以及会话的子代理</div>

97 <div>Bash 命令不再能从权限检查中隐藏其自身的一部分,制表符或不可见的 Unicode 填充不再从批准对话框中隐藏命令的一部分</div>97 <div>Bash 命令不再能从权限检查中隐藏其自身的一部分,制表符或不可见的 Unicode 填充不再从批准对话框中隐藏命令的一部分</div>

98 <div>PreToolUse 自动允许钩子不再绕过 Claude Code 内部侧任务(如摘要和压缩)中的工具限制</div>98 <div>PreToolUse 自动允许 hook 不再绕过 Claude Code 内部侧任务(如摘要和压缩)中的工具限制</div>

99 <div><a href="/docs/zh-CN/ultraplan">Ultraplan</a> 研究预览被移除,包括 <code>/ultraplan</code> 命令和 <code>ultraplan</code> 关键字;改为使用计划模式或网络上的 Claude Code</div>99 <div><a href="/docs/zh-CN/ultraplan">Ultraplan</a> 研究预览版被移除,包括 <code>/ultraplan</code> 命令和 <code>ultraplan</code> 关键字;改为使用计划模式或 Web 版 Claude Code</div>

100 </div>100 </div>

101</div>101</div>

102 102 

Details

4 4 

5# 第 33 周 · 2026 年 8 月 10–14 日5# 第 33 周 · 2026 年 8 月 10–14 日

6 6 

7> Claude Code Desktop 在使用限制重置后自动继续,fork 模式默认启用,GitLab 合并请求和市场加入 GitHub。7> Claude Code Desktop 在用量限制重置后自动继续,fork 模式默认启用,GitLab 合并请求和市场加入 GitHub。

8 8 

9<div className="digest-meta">9<div className="digest-meta">

10 <span>发布版本 <a href="/docs/en/changelog#2-1-225">v2.1.225 → v2.1.233</a></span>10 <span>发布版本 <a href="/docs/en/changelog#2-1-225">v2.1.225 → v2.1.233</a></span>


13 13 

14<div className="digest-feature">14<div className="digest-feature">

15 <div className="digest-feature-header">15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Desktop 上限制重置后自动继续</span>16 <span className="digest-feature-title">Desktop 上用量限制重置后自动继续</span>

17 <span className="digest-feature-pill">Desktop</span>17 <span className="digest-feature-pill">Desktop</span>

18 </div>18 </div>

19 19 


25 25 

26 <p className="digest-feature-try">下次出现会话限制卡时,勾选<strong>限制重置时自动继续</strong>并保持会话打开。该卡显示 <code>Auto-resuming at</code> 后跟重置时间,一旦限制重置,轮次将自动继续。</p>26 <p className="digest-feature-try">下次出现会话限制卡时,勾选<strong>限制重置时自动继续</strong>并保持会话打开。该卡显示 <code>Auto-resuming at</code> 后跟重置时间,一旦限制重置,轮次将自动继续。</p>

27 27 

28 <a className="digest-feature-link" href="/docs/zh-CN/errors#youve-hit-your-session-limit">达到使用限制时该怎么办</a>28 <a className="digest-feature-link" href="/docs/zh-CN/errors#youve-hit-your-session-limit">达到用量限制时该怎么办</a>

29</div>29</div>

30 30 

31<div className="digest-feature">31<div className="digest-feature">


34 <span className="digest-feature-pill">v2.1.232</span>34 <span className="digest-feature-pill">v2.1.232</span>

35 </div>35 </div>

36 36 

37 <p className="digest-feature-lede">Fork 模式现在在交互式会话中默认启用。Claude 可以请求 <code>fork</code> 子代理类型,它继承完整的对话和提示缓存,而不是从头开始,因此您不必为辅助任务重新解释上下文。子代理 Claude 在交互式会话中生成的,除了代理团队队友生成的,也默认在后台运行。</p>37 <p className="digest-feature-lede">Fork 模式现在在交互式会话中默认启用。Claude 可以请求 <code>fork</code> 子代理类型,它继承完整的对话和提示词缓存,而不是从头开始,因此您不必为辅助任务重新解释上下文。Claude 在交互式会话中生成的子代理(agent team 队友生成的除外)也默认在后台运行。</p>

38 38 

39 <p className="digest-feature-try">使用需要您迄今为止讨论的所有内容的任务自己启动 fork:</p>39 <p className="digest-feature-try">使用需要您迄今为止讨论的所有内容的任务自己启动 fork:</p>

40 40 


42 > /subtask draft unit tests for the parser changes so far42 > /subtask draft unit tests for the parser changes so far

43 ```43 ```

44 44 

45 <p className="digest-feature-try">fork 出现在您的提示下方的面板中,其结果在完成时到达您的对话。要关闭 fork 模式,请设置 <code>CLAUDE\_CODE\_FORK\_SUBAGENT=0</code>。</p>45 <p className="digest-feature-try">fork 出现在您的输入框下方的面板中,其结果在完成时到达您的对话。要关闭 fork 模式,请设置 <code>CLAUDE\_CODE\_FORK\_SUBAGENT=0</code>。</p>

46 46 

47 <a className="digest-feature-link" href="/docs/zh-CN/sub-agents#turn-fork-mode-on-or-off">启用或关闭 fork 模式</a>47 <a className="digest-feature-link" href="/docs/zh-CN/sub-agents#turn-fork-mode-on-or-off">启用或关闭 fork 模式</a>

48</div>48</div>


53 <span className="digest-feature-pill">v2.1.232</span>53 <span className="digest-feature-pill">v2.1.232</span>

54 </div>54 </div>

55 55 

56 <p className="digest-feature-lede">插件市场克隆裸 <code>gitlab.com</code> URL,包括嵌套子组。在 v2.1.233 或更高版本上,将 GitLab 合并请求 URL 传递给 <code>--worktree</code> 以从其分支,<code>claude agents</code> 视图将链接到合并请求的会话标记为 <code>!N</code>。Claude Code 还会编辑 GitLab 令牌族,如 <code>glpat-</code> 和 <code>glrt-</code>,并以与保护 <code>gh</code> 相同的方式保护 <code>glab</code> CLI 的配置存储。</p>56 <p className="digest-feature-lede">插件市场克隆裸 <code>gitlab.com</code> URL,包括嵌套子组。在 v2.1.233 或更高版本上,将 GitLab 合并请求 URL 传递给 `--worktree` 以从其分支,<code>claude agents</code> 视图将链接到合并请求的会话标记为 <code>!N</code>。Claude Code 还会对 GitLab 令牌族(如 <code>glpat-</code> 和 <code>glrt-</code>)进行脱敏处理,并以与保护 <code>gh</code> 相同的方式保护 <code>glab</code> CLI 的配置存储。</p>

57 57 

58 <p className="digest-feature-try">在从合并请求分支的 worktree 中启动会话:</p>58 <p className="digest-feature-try">在从合并请求分支的 worktree 中启动会话:</p>

59 59 


70 <p className="digest-wins-title">其他改进</p>70 <p className="digest-wins-title">其他改进</p>

71 71 

72 <div className="digest-wins-grid">72 <div className="digest-wins-grid">

73 <div>在提示中键入 <code>@</code> 以<a href="/docs/zh-CN/cross-session-messaging#message-another-session">提及另一个 Claude 会话</a>的名称,Claude 使用 <code>SendMessage</code> 直接向其发送消息;与恰好一个活跃会话完全匹配的裸名称现在无需确认步骤即可传递</div>73 <div>在输入框中键入 <code>@</code> 以按名称<a href="/docs/zh-CN/cross-session-messaging#message-another-session">提及另一个 Claude 会话</a>,Claude 使用 <code>SendMessage</code> 直接向其发送消息;与恰好一个活跃会话完全匹配的裸名称现在无需确认步骤即可传递</div>

74 <div>一台机器上的交互式会话保持<a href="/docs/zh-CN/cross-session-messaging#see-which-sessions-claude-can-reach">唯一名称</a>:如果您启动或重命名会话时使用另一个活跃会话已在使用的名称,Claude Code 会为您的会话提供 <code>name-word-word</code> 变体并告知您</div>74 <div>一台机器上的交互式会话保持<a href="/docs/zh-CN/cross-session-messaging#see-which-sessions-claude-can-reach">唯一名称</a>:如果您启动或重命名会话时使用另一个活跃会话已在使用的名称,Claude Code 会为您的会话提供 <code>name-word-word</code> 变体并告知您</div>

75 <div>插件市场接受<a href="/docs/zh-CN/plugins/marketplace-reference#command-plugin-source"><code>command</code> 源</a>:本地命令打印插件目录,Claude Code 在每个会话中重新解析并应用,无需重启</div>75 <div>插件市场接受<a href="/docs/zh-CN/plugins/marketplace-reference#command-plugin-source"><code>command</code> 源</a>:本地命令打印插件目录,Claude Code 在每个会话中重新解析并应用,无需重启</div>

76 <div>在 Linux 和 WSL 上,设置<a href="/docs/zh-CN/tools-reference#memory-limit-on-linux-and-wsl"><code>CLAUDE\_CODE\_TOOL\_MEMORY\_LIMIT</code></a> 为大小(如 <code>4G</code>)以限制 Bash 和 PowerShell 工具命令可以使用的内存</div>76 <div>在 Linux 和 WSL 上,设置<a href="/docs/zh-CN/tools-reference#memory-limit-on-linux-and-wsl"><code>CLAUDE\_CODE\_TOOL\_MEMORY\_LIMIT</code></a> 为大小(如 <code>4G</code>)以限制 Bash 和 PowerShell 工具命令可以使用的内存</div>

77 <div>任务跟踪工具,如 <code>TaskCreate</code>、<code>TaskUpdate</code> 和 <code>TodoWrite</code>,<a href="/docs/zh-CN/tools-reference#task-tool-availability">在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及这些系列中的更高版本上不再可用</a>;设置 <code>CLAUDE\_CODE\_ENABLE\_TODO\_TOOLS=1</code> 以重新启用它们</div>77 <div>任务跟踪工具,如 <code>TaskCreate</code>、<code>TaskUpdate</code> 和 <code>TodoWrite</code>,<a href="/docs/zh-CN/tools-reference#task-tool-availability">在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及这些系列中的更高版本上不再可用</a>;设置 <code>CLAUDE\_CODE\_ENABLE\_TODO\_TOOLS=1</code> 以重新启用它们</div>

78 <div><a href="/docs/zh-CN/code-review#review-a-diff-locally"><code>/code-review</code></a> 在高、超高和最大努力级别现在像其他级别一样在后台代理中运行</div>78 <div><a href="/docs/zh-CN/code-review-local"><code>/code-review</code></a> 在高、超高和最大努力级别现在像其他级别一样在后台 Agent 中运行</div>

79 <div><a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin install plugin\@marketplace</code></a> 首先刷新市场,因此新发布的插件无需手动市场更新即可安装</div>79 <div><a href="/docs/zh-CN/plugins/install#install-a-plugin"><code>/plugin install plugin\@marketplace</code></a> 首先刷新市场,因此新发布的插件无需手动市场更新即可安装</div>

80 <div>设置接受<a href="/docs/zh-CN/settings-reference#marketplace-key-aliases"><code>additionalMarketplaces</code> 和 <code>allowedMarketplaces</code></a> 作为 <code>extraKnownMarketplaces</code> 和 <code>strictKnownMarketplaces</code> 的别名</div>80 <div>设置接受<a href="/docs/zh-CN/settings-reference#marketplace-key-aliases"><code>additionalMarketplaces</code> 和 <code>allowedMarketplaces</code></a> 作为 <code>extraKnownMarketplaces</code> 和 <code>strictKnownMarketplaces</code> 的别名</div>

81 <div>在较新的模型上,Claude 可以<a href="/docs/zh-CN/tools-reference#write-tool-behavior">使用 Write 工具覆盖现有文件</a>而无需在此会话中首先读取它,与 Edit 工具的规则匹配;较旧的模型需要读取</div>81 <div>在较新的模型上,Claude 可以<a href="/docs/zh-CN/tools-reference#write-tool-behavior">使用 Write 工具覆盖现有文件</a>而无需在此会话中首先读取它,与 Edit 工具的规则匹配;较旧的模型需要读取</div>

workflows.md +4 −4

Details

205 205 

206在 `claude -p` 和 Agent SDK 中,Claude Code 从不显示此提示。它通过与会话其余部分相同的[权限评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)运行 Workflow 工具调用,所以拒绝规则、询问规则和 `dontAsk` 模式适用于启动,就像它们适用于每个工具调用一样。要让工作流在这些运行中启动,使用以下之一:206在 `claude -p` 和 Agent SDK 中,Claude Code 从不显示此提示。它通过与会话其余部分相同的[权限评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)运行 Workflow 工具调用,所以拒绝规则、询问规则和 `dontAsk` 模式适用于启动,就像它们适用于每个工具调用一样。要让工作流在这些运行中启动,使用以下之一:

207 207 

208* **权限规则**:您的允许规则中的 `Workflow` 批准每个工作流,`Workflow(<name>)` 按名称批准一个保存的工作流。208* **权限规则**:将 `Workflow` 添加到您的允许规则中以批准每个工作流,或添加 `Workflow(<name>)` 以按名称批准一个保存的工作流。

209* **自动权限模式**:[分类器](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)审查调用并可以批准它。209* **自动权限模式**:在[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)下运行,分类器会审查调用并可以批准它。

210* **绕过权限模式**:Claude Code 批准调用。210* **绕过权限模式**:在绕过权限模式下运行。

211* **一个 hook**:一个允许该调用的 [`PreToolUse`](/docs/zh-CN/hooks#pretooluse) hook 会批准它。211* **一个 hook**:从 [`PreToolUse`](/docs/zh-CN/hooks#pretooluse) hook 为该调用返回 `"allow"`。在[计划模式](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode)下,仅凭 hook 的批准工作流不会启动,因此在该模式下请改用权限规则或您的主机的批准。

212* **您的主机**:一个 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),或者在使用 Agent SDK 时,一个 [`canUseTool`](/docs/zh-CN/agent-sdk/permissions) 回调批准它。212* **您的主机**:一个 [`--permission-prompt-tool`](/docs/zh-CN/cli-reference#cli-flags),或者在使用 Agent SDK 时,一个 [`canUseTool`](/docs/zh-CN/agent-sdk/permissions) 回调批准它。

213 213 

214在桌面应用中,批准卡显示工作流名称、阶段列表和令牌使用警告,带有**一次**、**总是**和**拒绝**操作。进度视图出现在"后台任务"侧窗格中。214在桌面应用中,批准卡显示工作流名称、阶段列表和令牌使用警告,带有**一次**、**总是**和**拒绝**操作。进度视图出现在"后台任务"侧窗格中。