SpyBara
Go Premium

Documentation 2026-11-12 23:02 UTC to 2026-11-13 23:02 UTC

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

117 --network none \117 --network none \

118 --memory 2g \118 --memory 2g \

119 --cpus 2 \119 --cpus 2 \

120 --pids-limit 100 \120 --pids-limit 600 \

121 --user 1000:1000 \121 --user 1000:1000 \

122 -v /path/to/code:/workspace:ro \122 -v /path/to/code:/workspace:ro \

123 -v /var/run/proxy.sock:/var/run/proxy.sock:ro \123 -v /var/run/proxy.sock:/var/run/proxy.sock:ro \


135| `--tmpfs /tmp:...` | 提供一个可写的临时目录,在容器停止时清除 |135| `--tmpfs /tmp:...` | 提供一个可写的临时目录,在容器停止时清除 |

136| `--network none` | 切断容器与外部网络的连接 |136| `--network none` | 切断容器与外部网络的连接 |

137| `--memory 2g` | 将内存使用限制为 2GB 以防止资源耗尽 |137| `--memory 2g` | 将内存使用限制为 2GB 以防止资源耗尽 |

138| `--pids-limit 100` | 限制进程数以防止 fork 炸弹 |138| `--pids-limit 600` | 限制进程和线程数以防止 fork 炸弹 |

139| `--user 1000:1000` | 以非 root 用户身份运行 |139| `--user 1000:1000` | 以非 root 用户身份运行 |

140| `-v ...:/workspace:ro` | 以只读方式挂载代码,以便代理可以分析但不能修改。**避免挂载敏感的主机目录,如 `~/.ssh`、`~/.aws` 或 `~/.config`** |140| `-v ...:/workspace:ro` | 以只读方式挂载代码,以便代理可以分析但不能修改。**避免挂载敏感的主机目录,如 `~/.ssh`、`~/.aws` 或 `~/.config`** |

141| `-v .../proxy.sock:...` | 挂载连接到在容器外运行的代理的 Unix 套接字(见下文) |141| `-v .../proxy.sock:...` | 挂载连接到在容器外运行的代理的 Unix 套接字(见下文) |

Details

104| `options` | [`Options`](#options) | 可选的配置对象。与 `query()` 的 `options` 参数相同 |104| `options` | [`Options`](#options) | 可选的配置对象。与 `query()` 的 `options` 参数相同 |

105| `initializeTimeoutMs` | `number` | 等待子进程初始化的最长时间(毫秒)。默认为 `60000`。如果初始化未能在此时间内完成,promise 将以超时错误被拒绝 |105| `initializeTimeoutMs` | `number` | 等待子进程初始化的最长时间(毫秒)。默认为 `60000`。如果初始化未能在此时间内完成,promise 将以超时错误被拒绝 |

106 106 

107仅当未设置 `initializeTimeoutMs` 时,运行缓慢的 [SessionStart](https://code.claude.com/docs/zh-CN/hooks.md#sessionstart) 和 [Setup](https://code.claude.com/docs/zh-CN/hooks.md#setup) [命令 hook](https://code.claude.com/docs/zh-CN/hooks.md#command-hook-fields) 才会获得额外时间:

108 

109* **如果您不设置该值:** 这些 hook 运行所花费的时间不计入 60 秒的默认值,总计最多 10 分钟,因此初始化最多可能需要 11 分钟。

110* **如果您设置了某个值(包括 `60000`):** 该值即为上限,即使 hook 正在运行也是如此。

111 

112额外时间需要 TypeScript Agent SDK v0.3.304 或更高版本。

113 

107#### 返回值114#### 返回值

108 115 

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


128 135 

129### `prewarm()`136### `prewarm()`

130 137 

131*Alpha。* 在您知道某个 Claude Code 进程将服务于哪个会话之前,先将其作为备用进程启动,以便稍后通过 [`claim()`](#spareprocess) 将其绑定到会话。适用于在用户选择文件夹之前就已启动的应用程序。需要 TypeScript Agent SDK v0.3.282 或更高版本。138*Alpha。* 在您知道某个 Claude Code 进程将服务于哪个会话之前,先将其作为备用进程启动,以便稍后通过 [`claim()`](#spareprocess) 将其绑定到会话。需要 TypeScript Agent SDK v0.3.282 或更高版本。

132 139 

133`prewarm()` 完成与 [`startup()`](#startup) 相同的初始化握手;如果您设置了 `options.cwd`,进程将在该目录中等待,否则将在您的 Claude Code 配置目录下的一个私有临时目录中等待。会话的工作目录、其 `SessionStart` hook、其 stdio MCP 服务器以及其 CLAUDE.md 和 git 上下文都要等到认领时才会确定。备用进程在等待期间大约占用 230 到 260 MB 内存。如果您的 [`spawnClaudeCodeProcess`](#options) 在另一台机器或容器中运行 Claude Code,请将 `options.cwd` 设置为该环境中存在的目录,供备用进程在其中等待。140当您的应用程序在用户选择文件夹之前就已启动时,请使用 `prewarm()`。

134 141 

135```typescript theme={null}142```typescript theme={null}

136function prewarm(params?: {143function prewarm(params?: {


139}): Promise<SpareProcess>;146}): Promise<SpareProcess>;

140```147```

141 148 

142`options` 和 `initializeTimeoutMs` 的含义与 `startup()` 中相同,只是 `options.cwd` 仅设置备用进程等待所在的目录。进程完成初始化握手后,promise 将解析为一个 [`SpareProcess`](#spareprocess)。如果 `options` 设置了 `resume`、`continue` 或 `forkSession`,`prewarm()` 会抛出错误,因为备用进程尚无会话。认领时无法设置的所有内容,例如 `mcpServers`、`hooks`、`canUseTool`、`settingSources`、`systemPrompt` 和 `plugins`,在备用进程的整个生命周期内都是固定的,因此请为每组不同的此类选项保留一个备用进程,并在这些选项发生变化时重新预热。149#### 参数

150 

151| 参数 | 类型 | 描述 |

152| :- | :- | :- |

153| `options` | [`Options`](#options) | 可选的配置对象,与 `startup()` 接受的类型相同 |

154| `initializeTimeoutMs` | `number` | 等待备用进程初始化的最长时间(毫秒)。默认为 `60000`。如果初始化未能在此时间内完成,promise 将以超时错误被拒绝 |

155 

156`prewarm()` 会将 [Setup](https://code.claude.com/docs/zh-CN/hooks.md#setup) hook 所花费的时间计入 `initializeTimeoutMs`,即使您未设置该值也是如此。要为运行缓慢的 Setup hook 提供更多时间,请设置更长的值。

157 

158#### 返回值

159 

160返回一个 `Promise<`[`SpareProcess`](#spareprocess)`>`,在备用进程可供认领时解析。

161 

162如果您在 `options` 中请求 `resume`、`continue` 或 `forkSession`,该 promise 将被拒绝,因为备用进程尚无会话。

163 

164#### 备用进程的工作方式

165 

166* **备用进程在何处等待:** 在您的 Claude Code 配置目录下的一个私有临时目录中;如果您在 `prewarm()` 中设置了 `options.cwd`,则在该目录中等待。

167* **如果您的 [`spawnClaudeCodeProcess`](#options) 在另一台机器或容器中运行 Claude Code:** 请向 `prewarm()` 传入在该环境中存在的 `options.cwd`,因为默认的临时目录是在您的机器上创建的。

168* **内存:** 每个备用进程在等待期间大约占用 230 到 260 MB 内存。

169* **在您调用 `claim()` 之前不会发生的操作:**

170 * 切换到您传给 `claim()` 的工作目录

171 * 运行 SessionStart hook

172 * 启动 stdio MCP 服务器

173 * 加载 CLAUDE.md 和 git 上下文

174* **认领时无法更改的内容:** `mcpServers`、`hooks`、`canUseTool`、`settingSources` 和 `plugins` 等选项会保留其在 `prewarm()` 中的值。[`SpareProcess`](#spareprocess) 列出了认领时可以设置的内容。

175* **如果不同会话需要为这些选项使用不同的值:** 请为每组值分别保留一个备用进程。

143 176 

144#### 示例177#### 示例

145 178 

agent-view.md +5 −3

Details

8 8 

9Agent view 通过 `claude agents` 打开,是所有后台会话的一个屏幕:什么正在运行、什么需要你的输入、什么已完成。调度新会话,一目了然地查看它们的状态而不是滚动浏览记录,只在需要时才介入。每个后台会话都是一个完整的 Claude Code 对话,在没有终端连接的情况下继续运行,所以你可以随时打开它、回复并离开。9Agent view 通过 `claude agents` 打开,是所有后台会话的一个屏幕:什么正在运行、什么需要你的输入、什么已完成。调度新会话,一目了然地查看它们的状态而不是滚动浏览记录,只在需要时才介入。每个后台会话都是一个完整的 Claude Code 对话,在没有终端连接的情况下继续运行,所以你可以随时打开它、回复并离开。

10 10 

11![终端中的 Agent view。顶部的一行计算等待输入、正在工作和已完成的会话。四个会话分组在'需要输入'、'正在工作'和'已完成'下。每行显示会话的名称、其最新状态或问题以及时间。底部是用于描述新任务的输入和一行键盘提示。](https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-light.png?fit=max\&auto=format\&n=HDAmBwgbrZVk0pOt\&q=85\&s=d6905012bee31f3e6b3920b09c05dd02)11![终端中的 Agent view。顶部的一行计算等待输入、正在工作和已完成的会话。四个会话分组在'需要输入'、'正在工作'和'已完成'下。每行显示会话的名称、其最新状态或问题以及时间。底部是用于描述新任务的输入和一行键盘提示。](https://mintcdn.com/claude-code/v_J840yKc6uuKDX_/images/agent-view-light.png?fit=max\&auto=format\&n=v_J840yKc6uuKDX_\&q=85\&s=bd95fda83ea66ca8b2e0e7b68f8cb29e)

12 12 

13当你有多个独立任务 Claude 可以在不需要你观看每一步的情况下处理时,使用 agent view。调度一个 bug 修复、一个拉取请求审查和一个不稳定测试调查作为三行,在另一个窗口中继续工作,当一行显示它需要你或有结果时检查回来。13当你有多个独立任务 Claude 可以在不需要你观看每一步的情况下处理时,使用 agent view。调度一个 bug 修复、一个拉取请求审查和一个不稳定测试调查作为三行,在另一个窗口中继续工作,当一行显示它需要你或有结果时检查回来。

14 14 


628 628 

629* Agent 视图会移除它,包括未提交的更改,因此请先提交您想保留的内容。629* Agent 视图会移除它,包括未提交的更改,因此请先提交您想保留的内容。

630* 当它有未提交的更改时,`claude rm` 会保留它以及会话行。630* 当它有未提交的更改时,`claude rm` 会保留它以及会话行。

631* Agent 视图和 `claude rm` 都不会移除另一个正在运行的会话正在使用或已锁定的 worktree,再次删除也不会改变这一点。Claude Code 会保留 worktree 和会话,并指明保留的目录及原因;在 Agent 视图中,该会话的行会显示 `not deleted`。请关闭另一个会话,然后再次删除。631* Agent 视图和 `claude rm` 都不会移除另一个正在运行的会话正在使用或已锁定的 worktree,再次删除也不会改变这一点。Claude Code 会保留 worktree 和会话,并指明保留的目录及原因;在 Agent 视图中,该会话的行会显示 `not removed`。请关闭另一个会话,然后再次删除。

632* 当您删除的会话的 worktree 中有 Claude Code 无法确认已保存到其他位置的提交时,Claude Code 会保留 worktree 和会话,消息会指明 worktree 的分支以及有多少未推送的提交。消息还提供两种后续做法:推送这些提交,或再次删除以丢弃它们。632* 当您删除的会话的 worktree 中有 Claude Code 无法确认已保存到其他位置的提交时,Claude Code 会保留 worktree 和会话,消息会指明 worktree 的分支以及有多少未推送的提交。消息还提供两种后续做法:推送这些提交,或再次删除以丢弃它们。

633 633 

634 远程上的提交不会阻止删除。您的 `origin` 远程默认分支的本地副本上的提交也不会阻止删除,前提是该分支检出在您的主检出中(即仓库目录本身,而不是 worktree)。634 远程上的提交不会阻止删除。您的 `origin` 远程默认分支的本地副本上的提交也不会阻止删除,前提是该分支检出在您的主检出中(即仓库目录本身,而不是 worktree)。


935关闭或重新启动您的机器会停止运行的后台会话。等待您输入的会话在您返回时仍会显示在 `Needs input` 下。对于任何其他运行的会话,Agent 视图显示的内容取决于它上次取得进展的时间:935关闭或重新启动您的机器会停止运行的后台会话。等待您输入的会话在您返回时仍会显示在 `Needs input` 下。对于任何其他运行的会话,Agent 视图显示的内容取决于它上次取得进展的时间:

936 936 

937* 在 48 小时内,会话显示为失败。附加或回复它,它会从其保存的对话重新启动。要继续被中断的工作,请向它发送一条回复,要求它继续。937* 在 48 小时内,会话显示为失败。附加或回复它,它会从其保存的对话重新启动。要继续被中断的工作,请向它发送一条回复,要求它继续。

938* 超过 48 小时,例如机器关闭数天后,会话显示为已停止,并显示 `ended while the background service was off`。在该行上按 `Enter`,页脚会显示 `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` 在同一行上再次按 `Enter` 来恢复其保存的对话。回复或 `claude attach <id>` 会在没有该页脚提示的情况下恢复它。938* 超过 48 小时,例如机器关闭数天后,会话显示为已停止,并显示 `ended while the background service was off`。

939 

940 在该行上按 `Enter`,页脚会显示 `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to remove it.` 在同一行上再次按 `Enter` 来恢复其保存的对话。回复或 `claude attach <id>` 会在没有该页脚提示的情况下恢复它。

939 941 

940当[会话记录清理](https://code.claude.com/docs/zh-CN/settings-reference.md#cleanupperioddays)删除了已停止会话的保存对话时,Claude Code 拒绝打开该行:消息说没有可恢复的内容。`claude rm <id>` 删除该行,除了上文[保留的情况](#what-deleting-a-session-removes)中描述的情况,`claude respawn <id>` 再次运行其原始提示词。请参阅[此会话的保存对话不再在磁盘上](https://code.claude.com/docs/zh-CN/errors.md#this-sessions-saved-conversation-is-no-longer-on-disk)。942当[会话记录清理](https://code.claude.com/docs/zh-CN/settings-reference.md#cleanupperioddays)删除了已停止会话的保存对话时,Claude Code 拒绝打开该行:消息说没有可恢复的内容。`claude rm <id>` 删除该行,除了上文[保留的情况](#what-deleting-a-session-removes)中描述的情况,`claude respawn <id>` 再次运行其原始提示词。请参阅[此会话的保存对话不再在磁盘上](https://code.claude.com/docs/zh-CN/errors.md#this-sessions-saved-conversation-is-no-longer-on-disk)。

941 943 

Details

349 349 

350### 当模型在会话中被禁用时350### 当模型在会话中被禁用时

351 351 

352如果您的账户失去对会话正在运行的模型的访问权限,例如因为管理员在您的 Amazon Bedrock 账户中禁用了它,Claude Code 会将会话切换到另一个模型,而不是使每个请求都失败,并显示 `Switched to <fallback> because <model> is not available`。它尝试与启动回退相同的模型:首先尝试同一层级的早期版本,对于没有可用 Opus 版本的 Opus 会话,则使用默认 Sonnet 模型。352当 Amazon Bedrock 以您的账户无法使用为由拒绝您会话的模型时,Claude Code 会将您的会话切换到另一个模型,您可以继续工作。您会看到一条以 `Switched to <fallback> because <model> is not available` 开头的消息。例如,当管理员禁用该模型,或者最新模型尚未对您的账户开放时,就会发生这种情况。

353 353 

354切换仅适用于您未固定的层级,这与启动回退的条件相同。在您选择的特定版本上的会话,或在[应用推理配置文件 ARN](#map-each-model-version-to-an-inference-profile) 上的会话,会保持其模型;如果没有备用模型链,请求会改为失败。在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry)中,Claude Code 仅切换到自动模式在 Amazon Bedrock 上支持的模型。如果这些模型中也没有可用的,请求会失败并显示 [AWS 身份验证失败](https://code.claude.com/docs/zh-CN/errors.md#aws-authentication-failed),并提示启用该模型。354如果您配置了[备用模型链](https://code.claude.com/docs/zh-CN/model-config.md#fallback-model-chains),Claude Code 会改为切换到您配置的备用模型。如果没有备用模型链,请求会在以下情况下失败:

355 355 

356您配置的[备用模型链](https://code.claude.com/docs/zh-CN/model-config.md#fallback-model-chains)会替换层级切换:在这些拒绝上,Claude Code 会切换到您配置的备用模型。要使被拒绝的请求失败而不是切换,请设置 [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/zh-CN/env-vars)。您配置的备用链仍会在这些拒绝上切换;如果您希望每个被拒绝的请求都失败,也请移除该链。356* 您的会话使用的是固定模型、您选择的特定版本,或[应用推理配置文件 ARN](#map-each-model-version-to-an-inference-profile)

357* [Claude Code 尝试的模型](#startup-model-checks)均不可用。在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry)中,Claude Code 仅切换到自动模式在 Amazon Bedrock 上支持的模型。

358 

359要继续工作,请在会话中运行 `/model`,并在您的账户可以使用的模型上按 `s`,这不会更改您的默认模型。`403` 会显示为 [AWS 身份验证失败](https://code.claude.com/docs/zh-CN/errors.md#aws-authentication-failed)。

360 

361要使被拒绝的请求失败而不是切换,请设置 [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/zh-CN/env-vars)。如果您配置了备用模型链,也请将其移除,因为 Claude Code 仍会切换到该备用模型。

357 362 

358## 跨区域推理配置文件前缀363## 跨区域推理配置文件前缀

359 364 

Details

222 222 

223每个都是散文描述的数组,读作自然语言规则。对于在分类器之前运行的基于工具模式的硬阻止,请使用 [`permissions.deny`](https://code.claude.com/docs/zh-CN/permissions)。223每个都是散文描述的数组,读作自然语言规则。对于在分类器之前运行的基于工具模式的硬阻止,请使用 [`permissions.deny`](https://code.claude.com/docs/zh-CN/permissions)。

224 224 

225> [!NOTE]

226>

227> 在 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md#permission-checks) 会话中,分类器在审查 Claude 的代码时应用 `hard_deny` 和 `soft_deny`,而不是应用于代码发出的每个工具调用。`permissions.deny` 规则适用于每个调用。

228 

225在分类器内,优先级分为四个层级:229在分类器内,优先级分为四个层级:

226 230 

227* `hard_deny` 规则无条件阻止。用户意图和 `allow` 例外不适用。231* `hard_deny` 规则无条件阻止。用户意图和 `allow` 例外不适用。


283 287 

284默认情况下,narrow Bash 和 PowerShell 允许规则(如 `Bash(npm test)`)在自动模式下保持有效。Claude Code 在分类器运行之前解析它们,除非命令携带[按命令允许的域](https://code.claude.com/docs/zh-CN/sandboxing.md#per-command-allowed-domains-in-auto-mode)。Claude Code 仅暂停授予任意代码执行权限的广泛规则,例如 `Bash(*)` 或通配符解释器,以及每个命名 [`Monitor`](https://code.claude.com/docs/zh-CN/tools-reference#monitor-tool) 的规则,因为 Monitor 命令通过 shell 运行。这意味着 narrow 规则仍然可以让分类器看不到的破坏性参数通过,例如规则前缀未预期的脚本路径或标志。288默认情况下,narrow Bash 和 PowerShell 允许规则(如 `Bash(npm test)`)在自动模式下保持有效。Claude Code 在分类器运行之前解析它们,除非命令携带[按命令允许的域](https://code.claude.com/docs/zh-CN/sandboxing.md#per-command-allowed-domains-in-auto-mode)。Claude Code 仅暂停授予任意代码执行权限的广泛规则,例如 `Bash(*)` 或通配符解释器,以及每个命名 [`Monitor`](https://code.claude.com/docs/zh-CN/tools-reference#monitor-tool) 的规则,因为 Monitor 命令通过 shell 运行。这意味着 narrow 规则仍然可以让分类器看不到的破坏性参数通过,例如规则前缀未预期的脚本路径或标志。

285 289 

286将 `autoMode.classifyAllShell` 设置为 `true`,以在自动模式处于活动状态时暂停每个 Bash 和 PowerShell 允许规则,使分类器评估每个 shell 命令,无论您的允许列表如何,除了[关键路径移除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。290将 `autoMode.classifyAllShell` 设置为 `true`,以在自动模式处于活动状态时暂停每个 Bash 和 PowerShell 允许规则,使分类器评估每个 shell 命令,无论您的允许列表如何,除了[关键路径移除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。在 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md#permission-checks) 会话中,即使启用了此设置,分类器也会审查运行这些命令的代码。

287 291 

288```json theme={null}292```json theme={null}

289{293{

Details

315 {315 {

316 "matcher": "Edit|Write",316 "matcher": "Edit|Write",

317 "hooks": [317 "hooks": [

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

319 ]319 ]

320 }320 }

321 ]321 ]

Details

74| PostgreSQL 11 或更高版本 | 支持设备登录流和速率限制计数器。托管 PostgreSQL 服务均可使用,包括最小层级;请参阅[支持哪些数据库](https://code.claude.com/docs/zh-CN/claude-apps-gateway-deploy.md#postgres)。使用[支出限制](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md)时,它还保存应备份的持久支出、审计和身份表。建议通过 `?sslmode=require` 使用 TLS。PostgreSQL 11、12 和 13 要求网关服务器上的 Claude Code 为 v2.1.290 或更高版本。PostgreSQL 项目已不再维护这些版本,因此请尽可能使用更新的版本。 |74| PostgreSQL 11 或更高版本 | 支持设备登录流和速率限制计数器。托管 PostgreSQL 服务均可使用,包括最小层级;请参阅[支持哪些数据库](https://code.claude.com/docs/zh-CN/claude-apps-gateway-deploy.md#postgres)。使用[支出限制](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md)时,它还保存应备份的持久支出、审计和身份表。建议通过 `?sslmode=require` 使用 TLS。PostgreSQL 11、12 和 13 要求网关服务器上的 Claude Code 为 v2.1.290 或更高版本。PostgreSQL 项目已不再维护这些版本,因此请尽可能使用更新的版本。 |

75| 模型上游 | Amazon Bedrock 凭据、Claude Platform on AWS 凭据、Google Cloud 凭据、Microsoft Foundry 资源或 Anthropic API 密钥。支持多个上游和故障转移。 |75| 模型上游 | Amazon Bedrock 凭据、Claude Platform on AWS 凭据、Google Cloud 凭据、Microsoft Foundry 资源或 Anthropic API 密钥。支持多个上游和故障转移。 |

76| HTTPS | 网关必须可从开发人员笔记本电脑和用于登录的任何浏览器通过 `https://` 访问;网关在同一侦听器上提供设备验证页面。通过 `listen.tls` 提供 TLS 证书,或在 TLS 终止入口后运行,两种情况下都要将 `listen.public_url` 设置为外部源。在 `/login` 处,Claude Code 仅在网关主机是环回时才接受纯 `http://` 源:`localhost`、`127.0.0.1` 或 `::1`。 |76| HTTPS | 网关必须可从开发人员笔记本电脑和用于登录的任何浏览器通过 `https://` 访问;网关在同一侦听器上提供设备验证页面。通过 `listen.tls` 提供 TLS 证书,或在 TLS 终止入口后运行,两种情况下都要将 `listen.public_url` 设置为外部源。在 `/login` 处,Claude Code 仅在网关主机是环回时才接受纯 `http://` 源:`localhost`、`127.0.0.1` 或 `::1`。 |

77| 私有网络地址 | 在 `/login` 处,Claude Code 要求网关的主机名或 IP 地址仅解析为私有地址:RFC 1918、链路本地、CGNAT `100.64.0.0/10`、IPv6 ULA `fc00::/7` 或环回。对于您托管的网关,任何不在您所声明地址块内的公共地址都会被拒绝;请参阅部署指南中的[威胁模型](https://code.claude.com/docs/zh-CN/claude-apps-gateway-deploy.md#threat-model-summary)。如果开发人员机器通过公司代理路由 HTTPS,登录还要求代理主机解析为私有地址;如果不是,将网关主机添加到 `NO_PROXY`,以便 CLI 直接连接。如果您的内部网络使用您的组织拥有的公共 IPv4 空间编号,[声明这些块](#allow-a-gateway-on-public-address-space-you-own),以便 `/login` 接受那里的网关。 |77| 私有网络地址 | Claude Code 的 `/login` 要求网关的主机名或 IP 地址仅解析为私有地址:RFC 1918 和链路本地范围、CGNAT `100.64.0.0/10`、IPv6 ULA `fc00::/7` 以及环回。请参阅[威胁模型](https://code.claude.com/docs/zh-CN/claude-apps-gateway-deploy.md#threat-model-summary)。如果您的内部网络使用您的组织拥有的公共 IPv4 空间编号,[声明这些块](#allow-a-gateway-on-public-address-space-you-own),以便 `/login` 接受那里的网关。 |

78| Linux 运行时 | 网关服务器仅在本机 Linux 二进制文件上运行。macOS 适用于本地开发。Windows 不支持作为服务器平台。 |78| Linux 运行时 | 网关服务器仅在本机 Linux 二进制文件上运行。macOS 适用于本地开发。Windows 不支持作为服务器平台。 |

79 79 

80当 `HTTPS_PROXY` 或 `HTTP_PROXY` 适用于网关主机时,登录还需要满足以下条件之一:代理的主机名解析为私有地址,或者开发人员机器上的 `NO_PROXY` 中包含网关主机。如果这些机器还设置了 `no_proxy`,也请将网关主机添加到其中,否则模型请求仍会通过代理。

81 

80### 步骤82### 步骤

81 83 

82**1. 在您的 IdP 中注册 OAuth 客户端**84**1. 在您的 IdP 中注册 OAuth 客户端**

Details

16 16 

17## 文件结构17## 文件结构

18 18 

19五个部分是[必需的](#required-sections)。其他所有部分都是[可选的](#optional-sections),省略的部分采用其默认值。未知的键会导致启动失败,因此拼写错误会显示为命名错误,而不是被静默忽略的设置。19五个部分是[必需的](#required-sections)。其他所有部分都是[可选的](#optional-sections),省略的部分采用其默认值。

20 20 

21**必需部分:**21**必需部分:**

22 22 


519 519 

520需要网关运行 Claude Code v2.1.281 或更高版本。[AWS 上的成本属性](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md#cost-attribution)覆盖 IAM 角色和 AWS 计费显示会话的位置。520需要网关运行 Claude Code v2.1.281 或更高版本。[AWS 上的成本属性](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md#cost-attribution)覆盖 IAM 角色和 AWS 计费显示会话的位置。

521 521 

522> [!NOTE]

523>

524> 要实现按开发者归属,请在每个 `bedrock` 和 [`mantle`](#amazon-bedrock-mantle-endpoint) 上游上设置带 `session_name` 的 `assume_role`,使用 `aws_bearer_token` 的上游除外。这些上游[无法使用 `assume_role`](#bedrock-in-another-aws-account),因此其请求仍归属于同一个主体。

525 

522```yaml theme={null}526```yaml theme={null}

523upstreams:527upstreams:

524 - provider: bedrock528 - provider: bedrock


535 539 

536网关也在此角色上进行一个调用:客户端放弃的请求的 token 计数,因此[支出限制](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md)保持准确。该计数及其[单 token 回退请求](#amazon-bedrock)由共享 `claude-apps-gateway` 会话签署,因此 AWS 将回退属性到 `claude-apps-gateway` 而不是开发人员。540网关也在此角色上进行一个调用:客户端放弃的请求的 token 计数,因此[支出限制](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md)保持准确。该计数及其[单 token 回退请求](#amazon-bedrock)由共享 `claude-apps-gateway` 会话签署,因此 AWS 将回退属性到 `claude-apps-gateway` 而不是开发人员。

537 541 

538对于严格的每开发人员属性,在您列出的每个 Bedrock 上游上设置 `assume_role` 与 `session_name`。没有它的上游使用其自己的凭据签署它提供的请求。

539 

540#### Amazon Bedrock Mantle 端点542#### Amazon Bedrock Mantle 端点

541 543 

542`mantle` 提供商将推理发送到 Amazon Bedrock 的 [Mantle 端点](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#use-the-mantle-endpoint)。它需要网关服务器上的 Claude Code v2.1.283 或更高版本。早期网关版本在启动时拒绝它,因此请在添加之前升级每个副本。544`mantle` 提供商将推理发送到 Amazon Bedrock 的 [Mantle 端点](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#use-the-mantle-endpoint)。它需要网关服务器上的 Claude Code v2.1.283 或更高版本。早期网关版本在启动时拒绝它,因此请在添加之前升级每个副本。


656 658 

657| 设置 | 如何 |659| 设置 | 如何 |

658| - | - |660| - | - |

659| RBAC | 授予网关的身份 Microsoft Foundry 资源上的 `Azure AI User` 或 `Cognitive Services User` |661| RBAC | 在 Microsoft Foundry 资源上为网关的身份授予 `Foundry User` 或 `Cognitive Services User` 角色 |

660| 部署 | Microsoft Foundry 使用管理员选择的部署名称,而不是规范模型 ID。添加 [`models:`](#models) 块将每个规范 ID 映射到您的部署名称。 |662| 部署 | Microsoft Foundry 使用管理员选择的部署名称,而不是规范模型 ID。添加 [`models:`](#models) 块将每个规范 ID 映射到您的部署名称。 |

661| AKS (workload identity) | 将用户分配的托管身份与集群的 OIDC 发行者联合,并将其绑定到网关的服务帐户。`use_azure_ad: true` 通过 `WorkloadIdentityCredential` 拾取它。 |663| AKS (workload identity) | 将用户分配的托管身份与集群的 OIDC 发行者联合,并将其绑定到网关的服务帐户。`use_azure_ad: true` 通过 `WorkloadIdentityCredential` 拾取它。 |

662| ACI / App Service | 在资源上启用系统分配或用户分配的托管身份。`use_azure_ad: true` 拾取它。 |664| ACI / App Service | 在资源上启用系统分配或用户分配的托管身份。`use_azure_ad: true` 拾取它。 |


902 904 

903#### 共享预算顺序905#### 共享预算顺序

904 906 

905共享预算是整个组共同消耗的一个月度限额。要设置共享预算,请在[设置该组月度上限的请求](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md#set-a-cap)中添加 `pooled_budget`,例如 `"pooled_budget": {"amount": "500000"}` 表示 \$5,000。该请求还需要该组的 `scope`、`"period": "monthly"` 和 `amount`,其中 `amount` 仍是每位成员自己的上限。907共享预算是整个组共同消耗的一个月度限额。要设置共享预算,请在[设置该组月度上限的请求](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md#set-a-cap)中添加 `pooled_budget`,例如用 `"pooled_budget": {"amount": "500000"}` 表示 \$5,000。该请求还需要该组的 `scope`、`"period": "monthly"` 以及 `amount`,后者仍是每位成员各自的上限。

906 908 

907对于属于多个此类组的开发者,每个请求都会计入第一个支出低于其限额的预算;当所有预算都已用完时,请求会被拒绝。`pooled_conflict_rule` 设置网关尝试这些预算的顺序:909对于属于多个此类组的开发者,每个请求都会计入第一个支出低于其限额的预算;当所有预算都已用完时,请求会被拒绝。`pooled_conflict_rule` 设置网关尝试这些预算的顺序:

908 910 


1001 1003 

1002`upstream_model` 下的每个键必须与已配置上游的 `name` 匹配,该名称默认为提供商名称。不匹配任何上游的键会导致启动失败,因此请省略您不使用的提供商对应的行。1004`upstream_model` 下的每个键必须与已配置上游的 `name` 匹配,该名称默认为提供商名称。不匹配任何上游的键会导致启动失败,因此请省略您不使用的提供商对应的行。

1003 1005 

1006要在 `auto_include_builtin_models: false` 的情况下让开发者使用 `fable` 别名,请在 `models` 中添加一个 `claude-fable-5` 条目。对于登录到网关的开发者,[`fable` 别名](https://code.claude.com/docs/zh-CN/model-config#fable-alias-resolution)解析为该 ID。没有该条目时,他们的消息会失败,错误以 `API Error: 400 model claude-fable-5 is not in the operator's model allowlist` 开头。

1007 

1004### `managed`1008### `managed`

1005 1009 

1006`managed` 块定义基于 IdP 组或电子邮件域的基于角色的访问策略。策略按顺序评估;默认情况下选择第一个匹配项,然后将其合并到 `match: {}` 兜底基础层上。匹配两个角色策略的用户只会获得第一个,因此除非您[应用所有匹配的策略](#apply-every-matching-policy),否则第二个策略的拒绝规则不会生效。策略按用户在 `GET /managed/settings` 提供,并使用 ETag/304 缓存。1010`managed` 块定义基于 IdP 组或电子邮件域的基于角色的访问策略。策略按顺序评估;默认情况下选择第一个匹配项,然后将其合并到 `match: {}` 兜底基础层上。匹配两个角色策略的用户只会获得第一个,因此除非您[应用所有匹配的策略](#apply-every-matching-policy),否则第二个策略的拒绝规则不会生效。策略按用户在 `GET /managed/settings` 提供,并使用 ETag/304 缓存。


1025`match: {}` 兜底策略按惯例放在最后,被视为基础层。其他每个策略都会从兜底策略继承自己未设置的任何键,因此按角色的条目只需列出与组织默认值不同的内容。合并规则取决于键的类型:1029`match: {}` 兜底策略按惯例放在最后,被视为基础层。其他每个策略都会从兜底策略继承自己未设置的任何键,因此按角色的条目只需列出与组织默认值不同的内容。合并规则取决于键的类型:

1026 1030 

1027* **允许列表**:`availableModels` 和 `permissions.allow`。特定策略的列表会完全替换基础层的列表。1031* **允许列表**:`availableModels` 和 `permissions.allow`。特定策略的列表会完全替换基础层的列表。

1028* **拒绝列表和 hook 数组**:`permissions.deny`、`permissions.ask`、`disabledMcpjsonServers`、`deniedMcpServers`、`blockedMarketplaces`、`deniedModels` 以及每个 `hooks` 事件类型数组。这些取基础层与策略的并集,因此组织范围的拒绝规则或审计 hook 不会被按角色的覆盖意外丢弃。1032* **拒绝列表和 hook 数组**:取基础策略与该策略的并集:

1033 * `permissions.deny` 和 `permissions.ask`

1034 * `disabledMcpjsonServers` 和 `deniedMcpServers`

1035 * `blockedMarketplaces` 和 `deniedModels`

1036 * `hooks` 事件类型数组

1029* **记录类型的键**:`env`、`modelOverrides` 和 `skillOverrides`。这些进行浅合并,因此按角色的 `env` 块会覆盖它设置的键,并从基础层继承其余的键。1037* **记录类型的键**:`env`、`modelOverrides` 和 `skillOverrides`。这些进行浅合并,因此按角色的 `env` 块会覆盖它设置的键,并从基础层继承其余的键。

1030 1038 

1031`availableModels` 还会在 `/v1/messages` 的服务器端执行,因此无论客户端发送什么,被拒绝的模型都会返回 `400`。空列表会拒绝所有模型。该检查还涵盖开发者选择模型之前会话启动时使用的模型,因此请[让会话在策略允许的模型上启动](#start-sessions-on-a-model-the-policy-allows)。1039`availableModels` 还会在 `/v1/messages` 的服务器端执行,因此无论客户端发送什么,被拒绝的模型都会返回 `400`。空列表会拒绝所有模型。该检查还涵盖开发者选择模型之前会话启动时使用的模型,因此请[让会话在策略允许的模型上启动](#start-sessions-on-a-model-the-policy-allows)。


1277 1285 

1278要改为关闭 1M 上下文,请在同一 `env` 块中设置 [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/zh-CN/model-config#extended-context)。Claude Code 随后将每个模型视为具有 200K 窗口。在交互式会话中,每位开发者需要在[批准对话框](#what-goes-in-cli)中批准此变量后它才会生效。1286要改为关闭 1M 上下文,请在同一 `env` 块中设置 [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/zh-CN/model-config#extended-context)。Claude Code 随后将每个模型视为具有 200K 窗口。在交互式会话中,每位开发者需要在[批准对话框](#what-goes-in-cli)中批准此变量后它才会生效。

1279 1287 

1288> [!NOTE]

1289>

1290> Claude Code 不会读取别名的 `upstream_model` 来确定其上下文窗口大小。要让 `models` 中一个 Claude Code 无法识别的别名获得其模型的窗口,请参阅[为网关或自定义模型 ID 修正窗口](https://code.claude.com/docs/zh-CN/model-config.md#correct-the-window-for-a-gateway-or-custom-model-id)。

1291 

1280#### 一小时提示缓存1292#### 一小时提示缓存

1281 1293 

1282要请求一小时的[提示缓存 TTL](https://code.claude.com/docs/zh-CN/prompt-caching.md#cache-lifetime) 而非默认的五分钟,请将以下键添加到策略现有的 [`code`、`cli` 或 `settings` 块](#choose-cli-or-code)中,然后重启网关。这些键要求网关服务器和客户端上运行 Claude Code v2.1.242 或更高版本。1294要请求一小时的[提示缓存 TTL](https://code.claude.com/docs/zh-CN/prompt-caching.md#cache-lifetime) 而非默认的五分钟,请将以下键添加到策略现有的 [`code`、`cli` 或 `settings` 块](#choose-cli-or-code)中,然后重启网关。这些键要求网关服务器和客户端上运行 Claude Code v2.1.242 或更高版本。


1379 1391 

1380##### 网关在启动时拒绝的内容1392##### 网关在启动时拒绝的内容

1381 1393 

1382网关在启动时根据 Claude Desktop 自身使用的配置 schema 验证每个 `desktop` 块,因此错误会在网关启动时以指明该键的错误形式暴露出来,而不会传递到每个已连接的桌面客户端。当块中包含以下内容时,网关会在启动时失败:1394当 `desktop` 块包含以下内容时,网关会在启动时失败:

1383 1395 

1384* 未知的键1396* 可识别的键,但其值会被 Claude Desktop 拒绝或静默丢弃,例如空值。

1385* 已识别的键,但其值会被 Claude Desktop 拒绝或静默丢弃,例如空值或嵌套条目中拼写错误的子键。在 v2.1.260 之前,对于 `managedMcpServers` 或 `orgPluginSettings` 条目的嵌套对象中拼写错误的字段,网关会静默丢弃,而不是在启动时失败。

1386* 由网关自行计算的键:推理连接、模型列表和 OTLP 中继。请通过 [`upstreams`](#upstreams)、[`models`](#models) 以及 [`telemetry`](#telemetry) 部分的 `forward_to` 配置这些内容。1397* 由网关自行计算的键:推理连接、模型列表和 OTLP 中继。请通过 [`upstreams`](#upstreams)、[`models`](#models) 以及 [`telemetry`](#telemetry) 部分的 `forward_to` 配置这些内容。

1387* 当前键的旧版别名。在启动错误中,网关会指明应写入的规范键。1398* 当前键的旧版别名。在启动错误中,网关会指明应写入的规范键。

1399* 从 v2.1.300 开始,任何名称以 `selfHosted` 开头的键,例如用于自托管会话主机的键。请在将网关升级到 v2.1.300 或更高版本之前移除这些键。

1388 1400 

1389如果您使用已弃用的值或条目形式,例如不带 `transport` 的 `managedMcpServers` 条目,网关会启动并记录一条指明替代项的警告。1401如果您使用已弃用的值或条目形式,例如不带 `transport` 的 `managedMcpServers` 条目,网关会启动并记录一条指明替代项的警告。

1390 1402 

1391在 v2.1.232 之前,网关只接受由 11 个功能开关键组成的固定列表(例如 `chatTabEnabled` 和 `disableAutoUpdates`),并在启动时拒绝其他所有键。在 v2.1.227 之前,网关还会在启动时拒绝 `chatTabEnabled` 和 `chatAdvancedFileAnalysisEnabled`。1403在 v2.1.232 之前,网关只接受由 11 个功能开关键组成的固定列表(例如 `chatTabEnabled` 和 `disableAutoUpdates`),并在启动时拒绝其他所有键。在 v2.1.227 之前,网关还会在启动时拒绝 `chatTabEnabled` 和 `chatAdvancedFileAnalysisEnabled`。

1392 1404 

1405##### 网关不认识的键

1406 

1407在运行 Claude Code v2.1.295 或更高版本的网关上,较新 Claude Desktop 版本中的大多数键都无需升级网关。在 v2.1.321 或更高版本上,已知键内部的大多数新子键也无需升级网关。

1408 

1409某些键和值仍会在启动时失败,例如:

1410 

1411* 已知键的固定值列表中的新选项。

1412* 您可以在 `desktop` 块中设置的某个键的疑似拼写错误,例如将 `disableAutoUpdates` 写成 `disable_auto_updates`。错误会给出建议的名称。

1413 

1414在每种情况下,如果该名称或值在较新的 Claude Desktop 版本中确实存在,请将[网关升级](https://code.claude.com/docs/zh-CN/claude-apps-gateway-deploy.md#upgrades)到最新版本。否则请更正或删除它。若要在部署之前发现问题,请[测试策略](#test-a-policy-before-deployment)。

1415 

1393##### 需要更新的网关或 Claude Desktop 版本的键1416##### 需要更新的网关或 Claude Desktop 版本的键

1394 1417 

1395网关根据其已安装版本捆绑的 schema 验证 `desktop` 块,与验证 `cli` 块的方式相同。要交付由较新 Claude Desktop 版本引入的设置,请先升级网关。例如,`userPluginMarketplacesEnabled` 和 `userPluginUploadsEnabled` 需要网关服务器上的 Claude Code v2.1.260 或更高版本,以及成员机器上的 Claude Desktop 1.37937.0 或更高版本。1418`userPluginMarketplacesEnabled` 和 `userPluginUploadsEnabled` 需要网关服务器上的 Claude Code v2.1.260 或更高版本,以及成员机器上的 Claude Desktop 1.37937.0 或更高版本。

1396 1419 

1397`blockReadsOutsideWorkingDirectories`、`disableBypassPermissionsMode`、`configRecheckIntervalMinutes` 和 `sshClientPath` 需要网关服务器上的 Claude Code v2.1.281 或更高版本。`microsoftAuthBroker` 的 `required` 值以及 Microsoft 365 `managedMcpServers` 条目的 `continuousAccessEvaluation` 字段也是如此。早于 `required` 值的 Claude Desktop 版本会将其读取为 `disabled`,因此请仅在每位成员的 Claude Desktop 都支持后再设置 `required`。Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)列出了首次读取每个键的版本。1420`blockReadsOutsideWorkingDirectories`、`disableBypassPermissionsMode`、`configRecheckIntervalMinutes` 和 `sshClientPath` 需要网关服务器上的 Claude Code v2.1.281 或更高版本。`microsoftAuthBroker` 的 `required` 值以及 Microsoft 365 `managedMcpServers` 条目的 `continuousAccessEvaluation` 字段也是如此。早于 `required` 值的 Claude Desktop 版本会将其读取为 `disabled`,因此请仅在每位成员的 Claude Desktop 都支持后再设置 `required`。Claude Desktop 的[托管配置参考](https://claude.com/docs/third-party/claude-desktop/configuration)列出了首次读取每个键的版本。

1398 1421 


1593 1616 

1594终端会话将 `user.groups` 放在 OTLP 资源上,并再次放在每个指标数据点和事件上。如果开发者的组在会话打开期间发生变化,下一次[静默刷新](#session)之后的使用情况所对应的数据点和事件会带有新的组。资源会保留旧的组,直到开发者重启 Claude Code,因此请按数据点或事件上的属性进行分组。1617终端会话将 `user.groups` 放在 OTLP 资源上,并再次放在每个指标数据点和事件上。如果开发者的组在会话打开期间发生变化,下一次[静默刷新](#session)之后的使用情况所对应的数据点和事件会带有新的组。资源会保留旧的组,直到开发者重启 Claude Code,因此请按数据点或事件上的属性进行分组。

1595 1618 

1596如果您在 OpenTelemetry Collector 的 Prometheus remote write 导出器中启用了 `resource_to_telemetry_conversion`,该导出器会用资源的 `user.groups` 替换每个数据点的 `user.groups`,因此每个数据点都会显示旧的组。要保留数据点的值,请在该导出器之前从资源中删除 `user.groups`。1619如果您在 OpenTelemetry Collector 的 Prometheus remote write 导出器中启用了 `resource_to_telemetry_conversion`,该导出器会用资源上的值替换每个数据点的 `user.groups`,因此每个数据点都会显示旧的组。要保留数据点上的值,请在该导出器之前从资源中删除 `user.groups`。

1597 1620 

1598此 OpenTelemetry Collector `resource` 处理器会在列出它的管道中删除该属性:1621此 OpenTelemetry Collector `resource` 处理器会在列出它的管道中删除该属性:

1599 1622 

Details

51 51 

52## 部署52## 部署

53 53 

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

55 55 

56除了运行位置外,还有一些决策塑造部署:56除了运行位置之外,还有几个决策会影响部署:

57 57 

58* **成本**:没有单独的许可证或按座位费用。网关是 `claude` 二进制文件的一部分,因此您通过现有承诺为推理付费,加上它运行的计算。58* **成本**:没有单独的许可证费用或按席位收费。网关是 `claude` 二进制文件的一部分,因此您通过现有的承诺用量支付推理费用,外加运行它所需的计算资源。

59* **绕过**:网关不强制执行通过它的唯一模型路由。具有自己凭证的开发者仍然可以直接调用提供商,因此关闭该路径是网络策略决策,例如阻止到 `api.anthropic.com` 的出口,除了来自网关的。阻止该出口也会破坏 [WebFetch 域安全检查](https://code.claude.com/docs/zh-CN/data-usage.md#webfetch-domain-safety-check),它从每个开发者的机器调用 `api.anthropic.com`。在托管策略中设置 `skipWebFetchPreflight: true` 以禁用它。59* **绕过**:网关并不强制要求访问模型的唯一途径必须经过它。拥有自己凭据的开发人员仍然可以直接调用提供商,因此关闭该路径属于网络策略决策,例如阻止除网关之外的出站流量访问 `api.anthropic.com`。阻止该出站流量也会破坏 [WebFetch 域安全检查](https://code.claude.com/docs/zh-CN/data-usage.md#webfetch-domain-safety-check),该检查会从每位开发人员的机器调用 `api.anthropic.com`。在托管策略中设置 `skipWebFetchPreflight: true` 以禁用它。

60* **多个网关**:每个是一个单独的部署,有自己的配置,CLI 按网关主机名存储信任和凭证,因此团队可以使用不同的网关而不会冲突。要提供多个 OIDC 发行者,运行单独的实例。60* **多个网关**:每个网关都是一个独立的部署,拥有自己的配置,并且 CLI 按网关主机名存储信任和凭据,因此不同团队可以使用不同的网关而不会产生冲突。要服务多个 OIDC 颁发者,请运行单独的实例。

61* **无服务器**:Cloud Run 可以工作,如果您设置 `min-instances: 1` 以避免冷 OIDC 发现。Lambda 和 Cloud Functions 不行,因为网关是一个长时间运行的 HTTP 服务器。61* **无服务器**:如果设置 `min-instances: 1` 以避免冷启动时的 OIDC 发现,Cloud Run 可以正常工作。Lambda 和 Cloud Functions 无法使用,因为网关是一个长时间运行的 HTTP 服务器。

62 62 

63这里的每个生产拓扑都在普通 HTTP 副本前面放置一个 L7 代理,如 Ingress、Cloud Run 的前端或 ALB。设置 [`listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen) 为代理的源范围,以便网关从 `X-Forwarded-For` 读取客户端 IP。网关仅在 TCP 对等体受信任时才遵守该标头。[Google Cloud](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md) 和 [AWS](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md) 工作示例为每个拓扑提供具体值。没有受信任的代理,每个请求似乎都来自代理的 IP,这会将按 IP 速率限制折叠为一个共享桶,并在审计事件中记录代理的 IP。63此处的每种生产拓扑都在纯 HTTP 副本前面放置了一个 L7 代理,例如 Ingress、Cloud Run 的前端或 ALB。将 [`listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen) 设置为代理的源地址范围,以便网关从 `X-Forwarded-For` 读取客户端 IP。仅当 TCP 对端受信任时,网关才会采用该标头。[Google Cloud](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md) 和 [AWS](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md) 完整示例提供了每种拓扑的具体值。如果没有受信任的代理,每个请求看起来都来自代理的 IP,这会使按 IP 的速率限制合并为一个共享配额,并在审计事件中记录代理的 IP。

64 64 

65不要在网关的设备授权和令牌端点处重定向请求,例如在入口处使用 HTTP 到 HTTPS 或主机规范化重写。Claude Code 不会在这些请求上跟随重定向,因此会破坏登录和令牌刷新的入口规则。65不要将请求重定向到网关的设备授权端点和令牌端点,例如在 ingress 处使用 HTTP 到 HTTPS 或主机名规范化的重写。Claude Code 不会跟随这些请求上的重定向,因此对这些请求进行重定向的 ingress 规则会导致登录和令牌刷新失败。

66 66 

67给代理任何空闲超时时间长于网关的保活间隔,这取决于上游:67为代理设置任意长于网关保活间隔的空闲超时时间,该间隔取决于上游:

68 68 

69* 在除 `provider: anthropic` 之外的每个上游上,一旦流已经沉默约 15 秒,网关就会写入一个 SSE `ping`。69* 在除 `provider: anthropic` 之外的所有上游上,一旦流静默约 15 秒,网关就会写入一个 SSE `ping`。

70* 在 `provider: anthropic` 上,网关原样传递响应,包括 Anthropic API 自己的 ping。70* 在 `provider: anthropic` 上,网关会原样透传响应,包括 Anthropic API 自身的 ping。

71 71 

72默认值(如 ALB 的 60 秒)足以保持安静的流打开。[AWS 工作示例](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md#troubleshooting) 无论如何将其提高到一小时,其故障排除行涵盖早于 v2.1.229 的网关,这些网关在现在获得 ping 的上游上的安静期间没有发送任何内容。72诸如 ALB 默认的 60 秒这样的值足以保持安静的流处于打开状态。[AWS 完整示例](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md#troubleshooting)仍将其提高到一小时,其故障排除条目涵盖了早于 v2.1.229 的网关,这些网关在现在会收到 ping 的上游上,于安静期间不发送任何内容。

73 73 

74### 为网关选择地址74### 为网关选择地址

75 75 

76Claude Code 通过以下两种方式之一接受网关的地址:76Claude Code 通过以下两种方式之一接受网关的地址:

77 77 

78* **私有地址**:将网关置于内部负载均衡器或 VPN 之后,并使用仅解析为私有地址(如 RFC 1918 或 CGNAT `100.64.0.0/10`)的主机名。用户的机器可以使用任何地址。[私有网络前提条件](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites) 列出了可接受的地址范围。78* **私有地址**:将网关置于内部负载均衡器或 VPN 之后,并使用仅解析为私有地址的主机名,例如 RFC 1918 或 CGNAT `100.64.0.0/10`。用户的机器可以使用任何地址。[私有网络前提条件](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites)列出了接受的地址范围。

79* **声明的地址块**:如果您的内部网络使用贵组织拥有的公共 IPv4 地址空间,请在 `gatewayInternalNetworks` 托管设置中列出该地址块。网关和用户的机器都必须位于该地址块内。请参阅 [允许网关使用您拥有的公共地址空间](https://code.claude.com/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own)。79* **声明的地址块**:如果您的内部网络使用您的组织拥有的公共 IPv4 地址空间,请在 `gatewayInternalNetworks` 托管设置中列出该地址块。网关和用户的机器都必须位于该地址块中。请参阅[允许网关使用您拥有的公共地址空间](https://code.claude.com/docs/zh-CN/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own)。

80 80 

81如果没有单个地址块能同时包含两者,请改为给网关分配私有地址。81如果没有单个地址块能同时包含两者,请改为给网关分配私有地址。

82 82 

83### 容器镜像83### 容器镜像

84 84 

85围绕标准 Claude Code 版本中的本机 `claude` 二进制文件构建您自己的镜像:85围绕标准 Claude Code 发行版中的原生 `claude` 二进制文件构建您自己的镜像:

86 86 

871. 从固定版本下载您的镜像架构的 Linux 构建;请参阅 [安装特定版本](https://code.claude.com/docs/zh-CN/setup.md#install-a-specific-version) 了解下载 URL。871. 从固定版本中下载适用于您镜像架构的 Linux 构建版本;下载 URL 请参阅[安装特定版本](https://code.claude.com/docs/zh-CN/setup.md#install-a-specific-version)。

882. 根据版本的 GPG 签名 `manifest.json` 验证它,如 [二进制完整性和代码签名](https://code.claude.com/docs/zh-CN/setup.md#binary-integrity-and-code-signing) 中所述。882. 按照[二进制完整性和代码签名](https://code.claude.com/docs/zh-CN/setup.md#binary-integrity-and-code-signing)中的说明,根据该版本经过 GPG 签名的 `manifest.json` 对其进行验证。

893. 将其复制到构建上下文中。893. 将其复制到构建上下文中。

90 90 

91如果您的构建无法到达版本主机,请将版本镜像到您的内部注册表中,并固定您的舰队运行的版本。91如果您的构建无法访问发布主机,请将该版本镜像到您的内部镜像仓库,并固定您的机群所运行的版本。

92 92 

93除了二进制文件外,镜像还需要:93除了二进制文件之外,镜像还需要:

94 94 

95* **基于 glibc 的镜像**:glibc 构建的唯一动态依赖项是 glibc 库。基于 Musl 的镜像需要 `linux-x64-musl` 或 `linux-arm64-musl` 构建加上额外的包;请参阅 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)。95* **基于 glibc 的镜像**:glibc 构建版本唯一的动态依赖是 glibc 库。基于 musl 的镜像需要 `linux-x64-musl` 或 `linux-arm64-musl` 构建版本,其唯一的动态依赖是 musl。

96* **可写状态目录**:网关以任何用户身份运行,但最小镜像没有可写的主目录。将 `CLAUDE_CONFIG_DIR` 设置为可写路径,如 `/tmp/.claude`。96* **可写的状态目录**:网关可以以任何用户身份运行,但精简镜像没有可写的主目录。将 `CLAUDE_CONFIG_DIR` 设置为可写路径,例如 `/tmp/.claude`。

97* **容器命令**:`claude gateway --config /etc/claude/gateway.yaml`,配置文件以只读方式挂载,密钥作为环境变量提供;网关在 `listen.port` 上监听,默认为 `8080`。97* **容器命令**:`claude gateway --config /etc/claude/gateway.yaml`,以只读方式挂载配置文件,并以环境变量的形式提供密钥;网关在 `listen.port` 上监听,默认为 `8080`。

98 98 

99### Kubernetes99### Kubernetes

100 100 

101将网关作为 Deployment 运行,就像任何无状态服务一样:101像任何无状态服务一样,将网关作为 Deployment 运行:

102 102 

103* 从 ConfigMap 挂载配置,从 Secret 挂载密钥;通过 `${file:/path/to/secret}` 或作为环境变量在 YAML 中引用密钥103* 从 ConfigMap 挂载配置,从 Secret 挂载密钥;在 YAML 中通过 `${file:/path/to/secret}` 或以环境变量的形式引用密钥

104* 在 Ingress 处终止 TLS 并将 `listen.public_url` 设置为 Ingress 主机名104* 在 Ingress 处终止 TLS,并将 `listen.public_url` 设置为 Ingress 主机名

105* 将就绪探针指向 `GET /readyz`,将活跃探针指向 `GET /healthz`105* 将就绪探针指向 `GET /readyz`,将存活探针指向 `GET /healthz`

106 106 

107有关 AWS 上的完整工作示例,涵盖 ECS Fargate 或 EKS、Amazon RDS 和 AWS Secrets Manager,请参阅 [在 AWS 上部署](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md)。107有关 AWS 上的完整示例(涵盖 ECS Fargate 或 EKS、Amazon RDS 和 AWS Secrets Manager),请参阅[在 AWS 上部署](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-aws.md)。

108 108 

109优先使用平台的工作负载身份而不是静态密钥;[`upstreams` 参考](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#upstreams) 有每个平台的设置详情。对于跨云配对,如 GKE 上的 Amazon Bedrock 上游,在上游的 `auth` 块中设置显式凭证。109优先使用平台的工作负载身份而不是静态密钥;[`upstreams` 参考](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#upstreams)提供了各平台的设置详情。对于跨云组合,例如在 GKE 上使用 Amazon Bedrock 上游,请改为在上游的 `auth` 块中设置显式凭据。

110 110 

111### Cloud Run111### Cloud Run

112 112 

113按如下方式配置服务:113按如下方式配置服务:

114 114 

115* 将 `listen.port` 保留在其默认值 `8080`,这与 Cloud Run 的默认 `PORT` 匹配,或设置 `port: ${PORT}`115* 将 `listen.port` 保留为默认值 `8080`(与 Cloud Run 的默认 `PORT` 一致),或设置 `port: ${PORT}`

116* 将 `public_url` 设置为外部可达的源。对于生产,这通常是内部负载均衡器的主机名,因为 `/login` [拒绝公共地址](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites),而 `*.run.app` URL 解析为一个,所以单独的 Cloud Run URL 仅适用于 `curl` 或浏览器烟雾测试。例外是一个网络,其中 `*.run.app` 通过 Private Service Connect 和 Cloud DNS 私有区域私下解析;在该拓扑中,Cloud Run URL 是有效的 `public_url`。[Google Cloud 工作示例](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md#deploy-the-gateway) 涵盖两者。116* 将 `public_url` 设置为外部可访问的源。对于生产环境,这通常是内部负载均衡器的主机名,因为 `/login` [会拒绝公共地址](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites),而 `*.run.app` URL 会解析为公共地址,因此仅使用 Cloud Run URL 只适用于 `curl` 或浏览器冒烟测试。例外情况是 `*.run.app` 通过 Private Service Connect 和 Cloud DNS 私有区域解析为私有地址的网络;在该拓扑中,Cloud Run URL 是有效的 `public_url`。[Google Cloud 完整示例](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md#deploy-the-gateway)涵盖了这两种情况。

117* 将配置作为密钥卷挂载117* 将配置作为密钥卷挂载

118* 设置 `min-instances: 1` 以避免首次请求时的冷 OIDC 发现118* 设置 `min-instances: 1`,以避免在首次请求时进行冷启动的 OIDC 发现

119 119 

120有关 Google Cloud 上的完整工作示例,涵盖 Cloud Run 或 GKE、Cloud SQL 和 Secret Manager,请参阅 [在 Google Cloud 上部署](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md)。120有关 Google Cloud 上的完整示例(涵盖 Cloud Run 或 GKE、Cloud SQL 和 Secret Manager),请参阅[在 Google Cloud 上部署](https://code.claude.com/docs/zh-CN/claude-apps-gateway-on-gcp.md)。

121 121 

122### 将网关 URL 推送到开发者机器122### 将网关 URL 推送到开发人员机器

123 123 

124一旦网关开始提供服务,通过托管设置、MDM 或直接写入每个操作系统的 `managed-settings.json` 将 `forceLoginMethod`、`forceLoginGatewayUrl` 和 `parentSettingsBehavior: "merge"` 推送到每个开发者的机器。124网关开始提供服务后,通过托管设置将 `forceLoginMethod`、`forceLoginGatewayUrl` 和 `parentSettingsBehavior: "merge"` 推送到每位开发人员的机器上,可以通过 MDM 或直接写入各操作系统对应的 `managed-settings.json` 来完成。

125 125 

126一旦您部署密钥,Claude Code 停止使用机器上剩余的 API 密钥或 claude.ai 登录,因此计划与您的登录说明一起推送。[管理员策略需要 Cloud 网关登录](https://code.claude.com/docs/zh-CN/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in) 描述开发者看到的消息。126部署这些设置项后,Claude Code 将停止使用机器上残留的 API 密钥或 claude.ai 登录,因此请将推送与您的登录说明一起规划。[Administrator policy requires a Cloud gateway sign-in](https://code.claude.com/docs/zh-CN/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in) 描述了开发人员会看到的消息。

127 127 

128请参阅 [每个机制存储策略的位置](https://code.claude.com/docs/zh-CN/managed-settings.md#where-each-mechanism-stores-the-policy) 了解文件路径,以及 [客户端托管设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#client-side-managed-settings) 了解 Claude Desktop `bootstrapUrl` 等效项。128有关文件路径,请参阅[每种机制存储策略的位置](https://code.claude.com/docs/zh-CN/managed-settings.md#where-each-mechanism-stores-the-policy);有关 Claude Desktop 的等效设置 `bootstrapUrl`,请参阅[客户端托管设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#client-side-managed-settings)。

129 129 

130### 大规模推出130### 大规模推广

131 131 

132登录按客户端 IP 地址进行速率限制,默认值适合小团队。每个地址每 10 分钟获得 30 次登录开始和 10 次代码提交。向数千名开发者的推出可能在第一个早上达到这些限制,原因有两个:132登录按客户端 IP 地址进行速率限制,默认值适合小型团队。每个地址每 10 分钟可发起 30 次登录和提交 10 次代码。面向数千名开发人员的推广可能在第一天早上就达到这些限制,原因有以下两种:

133 133 

134* **网关看不到您的负载均衡器后面。** 没有 [`listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen),每个开发者似乎都来自负载均衡器的地址并共享一个限制。网关在第一次忽略 `X-Forwarded-For` 标头时会记录警告。如果该负载均衡器[应列入 `listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen),请在更改其他任何内容之前先将其列入。如果开发者仍然共享一个地址,请提高 [`rate_limits`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#http-tuning)。134* **网关无法看到负载均衡器之后的地址。** 如果没有 [`listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen),每位开发人员看起来都来自负载均衡器的地址,并共享一个限制。网关首次忽略 `X-Forwarded-For` 标头时会记录一条警告。如果负载均衡器[应当列入 `listen.trusted_proxies`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#listen),请在更改任何其他内容之前先将其列入。如果开发人员仍然共享一个地址,请提高 [`rate_limits`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#http-tuning)。

135* **许多开发者共享几个 NAT 或 VPN 出口地址。** 即使 `trusted_proxies` 正确,他们也共享这些地址的限制。提高 [`rate_limits`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#http-tuning) 以适应。135* **许多开发人员共享少量 NAT 或 VPN 出口地址。** 即使 `trusted_proxies` 设置正确,他们也会共享这些地址的限制。请相应提高 [`rate_limits`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#http-tuning)。

136 136 

137要调整 `max`,将开发者数除以他们共享的出口地址数。估计在一个 `window_seconds` 周期内有多少人登录,默认为 10 分钟。然后将其加倍以覆盖重试和同时登录 Claude Code 和 Claude Desktop 的开发者。137要确定 `max` 的大小,请用开发人员数量除以他们共享的出口地址数量。估算其中有多少人会在一个 `window_seconds` 周期(默认为 10 分钟)内登录。然后将其翻倍,以覆盖重试以及同时登录 Claude Code 和 Claude Desktop 的开发人员。

138 138 

139例如,10,000 名开发者在 4 个出口地址后面在一小时内均匀登录。这是每个地址 2,500 名开发者,每 10 分钟约 420 名,您将其加倍并四舍五入到 1,000。下面的示例将两个限制都设置为 1,000:139例如,位于 4 个出口地址之后的 10,000 名开发人员在一小时内均匀登录。即每个地址 2,500 名开发人员,每 10 分钟约有 420 人登录,将其翻倍并向上取整为 1,000。下面的示例将两个限制都设置为 1,000:

140 140 

141```yaml theme={null}141```yaml theme={null}

142rate_limits:142rate_limits:


144 device_verify: { max: 1000, window_seconds: 600 }144 device_verify: { max: 1000, window_seconds: 600 }

145```145```

146 146 

147`device_verify` 是阻止某人猜测另一个开发者登录代码的原因,因此仅在您的估计需要的范围内提高它。即使在这些限制下,代码也是来自 20 字符字母表的 8 个字符,并在 10 分钟后过期,因此猜测仍然不切实际;请参阅 [用户代码暴力破解抵抗](#user-code-brute-force-resistance)。147`device_verify` 用于防止有人猜测其他开发人员的登录代码,因此只需将其提高到您的估算所需的程度。即使在这些限制下,代码也是由 20 个字符的字母表组成的 8 个字符,并在 10 分钟后过期,因此猜测仍然不切实际;请参阅[用户代码防暴力破解](#user-code-brute-force-resistance)。

148 148 

149当您的 IdP 发出刷新令牌时,Claude Code 会无声地续订会话,因此您可以在推出后将限制放回。没有刷新令牌,开发者每 [`session.ttl_hours`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#session) 再次登录。为该稳定速率调整两个限制的大小,并保持它们提高。149当您的 IdP 颁发刷新令牌时,Claude Code 会静默续订会话,因此您可以在推广完成后恢复限制。如果没有刷新令牌,开发人员每隔 [`session.ttl_hours`](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config#session) 就需要重新登录。请同样按照该稳定速率确定两个限制的大小,并保持提高后的值。

150 150 

151当达到限制时,Claude Code v2.1.274 或更高版本显示 `The gateway is limiting sign-in attempts right now`。v2.1.274 或更高版本的网关在验证页面上显示 `Too many attempts came from your network address`,并提供要检查的设置。它还写入一条 `sign-in refused` 日志行,命名要更改的设置。151达到限制时,Claude Code v2.1.274 或更高版本会显示 `The gateway is limiting sign-in attempts right now`。v2.1.274 或更高版本的网关会在验证页面上显示 `Too many attempts came from your network address`,并列出需要检查的设置。它还会写入一条 `sign-in refused` 日志,指明需要更改的设置。

152 152 

153## 运维153## 运维

154 154 

Details

189 189 

190```190```

191Sent to cloud session.191Sent to cloud session.

192Session ID: session_01DiUkqY2kzbUbDmW1w96rfi192Session ID: session_01HJKLMNOPQRSTUVWXYZ

193View: https://claude.ai/code/session_01DiUkqY2kzbUbDmW1w96rfi?from=cli&m=0193View: https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ?from=cli&m=0

194```194```

195 195 

196传递 `--output-format json` 以获得机器可读的结果:成功时为 `{ok, session_id, url}`,或发送失败时为 `{ok: false, session_id, error}`,例如当会话缺失或已存档时。配置错误(例如不支持的提供商或禁用的组织策略)打印到 stderr,不带 JSON。`--output-format stream-json` 不支持 `--cloud <session-id>`。196传递 `--output-format json` 以获得机器可读的结果:成功时为 `{ok, session_id, url}`,或发送失败时为 `{ok: false, session_id, error}`,例如当会话缺失或已存档时。配置错误(例如不支持的提供商或禁用的组织策略)打印到 stderr,不带 JSON。`--output-format stream-json` 不支持 `--cloud <session-id>`。

Details

274 274 

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

276 276 

277要以其他模式运行线程,请使用 [`--settings`](https://code.claude.com/docs/zh-CN/remote-control#start-a-remote-control-session) 启动 `claude remote-control`。然后,该文件中或该计算机设置中的 [`permissions.defaultMode`](https://code.claude.com/docs/zh-CN/permission-modes#start-in-a-different-mode) 可以选择其他模式。

278 

277线程运行时,其标题中的笔记本电脑图标会显示您的计算机是否已连接。点击该图标可查看线程正在使用哪个文件夹,或关闭连接。当该计算机处于睡眠状态时,线程会暂停;如果桌面应用或 `claude remote-control` 退出,线程会停止。279线程运行时,其标题中的笔记本电脑图标会显示您的计算机是否已连接。点击该图标可查看线程正在使用哪个文件夹,或关闭连接。当该计算机处于睡眠状态时,线程会暂停;如果桌面应用或 `claude remote-control` 退出,线程会停止。

278 280 

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

code-mode.md +224 −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 Mode 通过代码运行工具调用

6 

7> 试用 Code Mode,这是一项实验性功能,Claude 会在其中编写 JavaScript,在一个步骤中进行多次工具调用。

8 

9Code Mode 改变了 Claude 使用其[工具](https://code.claude.com/docs/zh-CN/tools-reference.md)的方式。不使用 Code Mode 时,Claude 会直接请求 Bash、Read 或 Edit 等工具调用,并在决定下一步操作之前读取每个结果。使用 Code Mode 时,Claude 会编写一段 JavaScript 来进行这些工具调用,然后由 Claude Code 在您的会话中运行这段代码。

10 

11> [!NOTE]

12>

13> Code Mode 是一项实验性功能,默认处于关闭状态。它可能会在任何版本中发生变化或被移除。如需分享反馈,请运行 `/feedback`。

14 

15## Code Mode 的工作原理

16 

17在 Code Mode 会话中,您仍然通过提示词描述任务,Claude 会编写 JavaScript 来执行该任务。一段代码可以并行运行命令、在下一次调用中使用上一次的结果,并返回 Claude 需要读取的那部分输出。

18 

19例如,如果您让 Claude 提高重试次数上限,Claude 可能会编写以下代码来查找文件、编辑文件并运行测试。最后一行将文件路径和测试输出返回给 Claude:

20 

21```javascript theme={null}

22const files = await $`rg -l "function retryPolicy" src`.text();

23const target = files.trim().split("\n")[0];

24await edit(target, "maxAttempts: 3", "maxAttempts: 5");

25({ edited: target, tests: $`npm test -- retryPolicy`.nothrow() });

26```

27 

28在对话中,您看到的是工具调用(例如编辑的 diff),而不是代码。要阅读代码,请按 `Ctrl+O` 打开[会话记录查看器](https://code.claude.com/docs/zh-CN/interactive-mode.md#transcript-viewer)。每段代码在其中显示为一个折叠的 **Code** 行,并附有如何展开的提示。

29 

30### 何时使用 Code Mode

31 

32对于需要大量相关工具调用的任务,可以尝试使用 Code Mode,例如:

33 

34* 需要在许多文件中重复进行的更改

35* 需要在 Claude 读取之前先过滤结果的搜索

36* 可以同时运行的多个独立命令

37 

38### Code Mode 的限制

39 

40在启用 Code Mode 之前,请确认您可以接受以下限制:

41 

42* **恢复会话**:只能在终端中、并且在 Code Mode 开启的情况下恢复 Code Mode 会话

43* **自动模式**:自动模式的分类器[审查的是代码,而不是每个工具调用](#permission-checks)

44* **长时间运行的代码**:除非[代码可以在后台运行](#long-running-code),否则您需要等待代码运行完成,并且代码会在十分钟后停止

45* **Hook**:当 `PreToolUse` hook 无法运行或超时时,您可能会看到[工具调用被拒绝](#tool-call-refused-by-a-hook);`UserPromptSubmit` hook 可能会导致[代码输出被阻止](#code-output-withheld-by-a-hook)

46* **不可用的功能**:无法使用 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md)、[Claude in Chrome](https://code.claude.com/docs/zh-CN/chrome.md) 或[计算机使用](https://code.claude.com/docs/zh-CN/computer-use.md)

47* **移动会话**:无法将会话移到 Desktop 应用,也无法将其转为[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),并且 `/fork` 无法启动后台副本

48 

49## 要求

50 

51* **版本**:Claude Code v2.1.323 或更高版本,任一[发布频道](https://code.claude.com/docs/zh-CN/setup.md#configure-release-channel)均可。旧版本会在不启用 Code Mode 的情况下启动,可能附带也可能不附带原因 `it isn't open to your account yet`

52* **账户**:Claude 订阅或 Console 账户。无法通过网关、Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 或 Microsoft Foundry 使用 Code Mode

53* **组织**:您的组织未使用 [HIPAA 配置](https://code.claude.com/docs/zh-CN/hipaa-setup.md)或[零数据保留](https://code.claude.com/docs/zh-CN/zero-data-retention.md)

54* **模型**:Claude Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 5.2

55* **使用入口**:终端中的交互式 `claude` 会话。Code Mode 不适用于 `-p`、Agent SDK、VS Code 面板、Desktop 应用或云端会话

56* **安装**:Claude Code 的[原生构建版本](https://code.claude.com/docs/zh-CN/setup.md)

57* **Windows**:已安装 [Git for Windows](https://git-scm.com/downloads/win)

58 

59此外,在某些设置开启时也无法启动 Code Mode,例如 API 密钥助手、agent team、OpenTelemetry 导出或 `DISABLE_TELEMETRY`。有关每种情况的解决方法,请参阅 [Code Mode 无法启动](#code-mode-doesnt-start)。

60 

61## 试用 Code Mode

62 

63启用 Code Mode,给 Claude 一个任务,然后查看 Claude 编写的代码。

64 

65**1. 检查您的版本**

66 

67运行 `claude --version`。如果版本低于 v2.1.323,请运行 `claude update`。如果您使用的是 `stable` 频道,且更新后未达到 v2.1.323,请等待 `stable` 跟进,或[切换到 `latest`](https://code.claude.com/docs/zh-CN/setup#configure-release-channel)。

68 

69**2. 在开启 Code Mode 的情况下启动 Claude Code**

70 

71将 [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/zh-CN/env-vars#variables) 环境变量设置为 `1`。如需试用 Code Mode,请在 shell 中设置它。如需为每个新会话启用 Code Mode,请在用户设置中设置它。

72 

73> [tab] macOS, Linux, WSL

74>

75> ```bash theme={null}

76> CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude

77> ```

78 

79> [tab] Windows PowerShell

80>

81> ```powershell theme={null}

82> $env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1"

83> claude

84> ```

85 

86> [tab] settings.json

87>

88> 将此 `env` 块保存到 `~/.claude/settings.json` 中,然后启动 `claude`:

89>

90> ```json theme={null}

91> {

92> "env": {

93> "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1"

94> }

95> }

96> ```

97>

98> Claude Code [会忽略项目设置文件中的此变量](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env),因此您克隆的仓库无法替您启用 Code Mode。

99 

100**3. 确认您要使用 Code Mode**

101 

102在您的第一个 Code Mode 会话之前,Claude Code 会要求您确认。选择 **Yes, turn on Code Mode**。Claude Code 会重新启动,并在会话顶部附近显示以下这行内容:

103 

104```text theme={null}

105Code Mode (experimental) is on · this session can be resumed only with Code Mode on

106```

107 

108如果您看到的是其他内容或没有看到这行内容,请参阅 [Code Mode 无法启动](#code-mode-doesnt-start)。

109 

110**4. 给 Claude 一个需要大量工具调用的任务**

111 

112在您熟悉的项目中,发送如下提示词:

113 

114```text theme={null}

115Read every Markdown file in this project and list the links that point to local files that don't exist.

116```

117 

118**5. 阅读 Claude 编写的代码**

119 

120按 `Ctrl+O` 并展开一个 **Code** 行,查看工具调用背后的 JavaScript。再次按 `Ctrl+O` 返回对话。

121 

122> [!WARNING]

123>

124> 如需稍后恢复 Code Mode 会话,请在运行 `claude --continue` 或 `claude --resume` 时保持 `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` 设置为 `1`。如果 Code Mode 处于关闭状态,Claude Code 会拒绝恢复该会话。在未启用 Code Mode 的情况下启动的会话,即使设置了该变量,也会在不启用 Code Mode 的情况下恢复。

125 

126### 关闭 Code Mode

127 

128从 shell 和 `~/.claude/settings.json` 中移除 `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`,然后启动新会话。您也可以保留该变量,并在任一位置将其值改为 `0`。只要其中一处为 `0`,即使另一处设置为 `1`,Code Mode 也会保持关闭。

129 

130### 为您的组织禁用 Code Mode

131 

132将值为 `0` 的 `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` 添加到您的[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中,这样您组织中的任何人都无法使用 Code Mode:

133 

134```json theme={null}

135{

136 "env": {

137 "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "0"

138 }

139}

140```

141 

142正处于 Code Mode 会话中的用户会继续留在该会话中,直到他们退出或重新启动 Claude Code。此后,用户将在不启用 Code Mode 的情况下启动,并且在 `0` 生效期间无法恢复其 Code Mode 会话。您无法通过托管设置为用户启用 Code Mode。

143 

144## 权限与长时间运行的代码

145 

146您的权限模式决定了 Claude 的代码如何被检查,以及代码运行期间您能否与 Claude 交谈。

147 

148### 权限检查

149 

150Claude 的代码进行的每个工具调用都会经过您的 `deny` 和 `ask` [权限规则](https://code.claude.com/docs/zh-CN/permissions.md)以及您的 [`PreToolUse` hook](https://code.claude.com/docs/zh-CN/hooks#pretooluse)。您无需为 `Bash` 等工具更改规则或匹配器。除了规则和 hook 之外,在自动模式下,分类器会审查代码;在会进行询问的模式下,您需要回复提示:

151 

152* **[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)**:分类器会在每段代码运行之前对其进行审查,而不是审查每个工具调用。它看不到运行时计算出的值,例如从搜索输出中获取的路径,因此对于必须加以控制的调用,请保留规则或 hook。当[先前的代码仍在运行而新代码开始运行时,您仍可能收到提示](#permission-prompt-with-a-countdown)

153* **其他[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)**:代码在未经审查的情况下开始运行,对于在该模式下会提示您的每个工具调用,您都会收到提示

154 

155如需检查代码本身,请编写一个匹配 `REPL`(运行 Claude 代码的工具)的 `PreToolUse` hook,并从 `tool_input.code` 中读取 JavaScript。

156 

157> [!WARNING]

158>

159> Bash 规则匹配的是命令文本,因此无论是否使用 Code Mode,Claude 都可以[以规则不匹配的形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)运行被拒绝的命令。如需不依赖命令文本的限制,请参阅[沙箱隔离](https://code.claude.com/docs/zh-CN/sandboxing.md)。

160 

161### 长时间运行的代码

162 

163当代码运行耗时较长的构建或测试时,Claude 要么等待它完成,要么让它在后台继续运行:

164 

165* **等待**:Claude 在代码完成后才回复,代码会在十分钟后停止,这包括您在权限提示上花费的时间

166* **后台**:您可以继续与 Claude 交谈,代码最多可以运行两个小时

167 

168如需在后台运行代码,请以自动模式或 `bypassPermissions` 模式启动会话。如果 Claude 仍然在等待,请检查您当前的模式以及启动会话的方式:

169 

170* **您切换到了其他模式**:按 `Shift+Tab`,直到回到您启动时所用的模式

171* **您以其他模式启动,或从 `claude --resume` 列表中选择了该会话**:如果您可以[使用自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode),请退出,然后在 Code Mode 开启的情况下运行 `claude --continue --permission-mode auto`

172* **您向 `--tools` 传递了工具名称**:以自动模式重新启动,不使用该标志

173 

174## 故障排除

175 

176### Code Mode 无法启动

177 

178会话顶部附近出现 `Code Mode (experimental) isn't available` 表示 Claude Code 在未启用 Code Mode 的情况下启动。原因显示在同一行中,`/status` 也会显示该原因。在下表中找到对应原因,进行相应更改,然后启动新会话。如果原因未在表中列出,请检查[要求](#requirements)。

179 

180| 原因包含 | 解决方法 |

181| :- | :- |

182| `it isn't open to your account yet` | 如果您的版本低于 v2.1.323,请[更新](#try-code-mode)。否则,请检查网络连接并重新启动。如果该原因仍然存在,请改日再试 |

183| `it only works with the Anthropic API` | 移除通过云提供商、网关或自定义 `ANTHROPIC_BASE_URL` 路由请求的设置 |

184| `it doesn't work with an API key helper` | 移除 `apiKeyHelper`、`ANTHROPIC_AUTH_TOKEN`,以及 `ANTHROPIC_CUSTOM_HEADERS` 中的任何 `Authorization` 或 `X-Api-Key` 标头。然后登录或设置 `ANTHROPIC_API_KEY` |

185| `it only works with Opus 5.5, Sonnet 5.5 and later models` | 使用[受支持的模型](#requirements)启动,例如使用 `--model opus`。Haiku 5.5 和 Fable 5.2 也可以使用 |

186| `it doesn't work in background jobs` | 在前台启动,不使用 `--remote-control` |

187| `it needs settings that Claude Code downloads from Anthropic` | 取消设置[关闭功能标志获取](https://code.claude.com/docs/zh-CN/env-vars.md#features-that-need-feature-flag-fetching)的变量,例如 `DISABLE_TELEMETRY` |

188| `OpenTelemetry is on` | 如果您不需要 [OpenTelemetry 导出](https://code.claude.com/docs/zh-CN/monitoring-usage.md),请取消设置 `CLAUDE_CODE_ENABLE_TELEMETRY` 和 `ENABLE_BETA_TRACING_DETAILED` |

189| `it doesn't yet work with an installed mod` | 关闭检查工具调用的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) |

190| `it can't be used together with agent teams yet` | 取消设置 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` |

191| `this launch's tool options` | 不使用 `--restricted` 启动,将 `REPL` 添加到 `--tools`,并从 `--disallowedTools` 和您的 `deny` 规则中移除 `REPL` |

192| `couldn't save your answer` | 使 `~/.claude.json` 可写 |

193| `your organization's settings don't allow it` | 向您的管理员咨询相关[托管设置](#block-code-mode-for-your-organization) |

194 

195如果您没有看到任何关于 Code Mode 的行,请运行 `claude --version`。如果您的版本低于 v2.1.323,请进行更新。然后检查 shell 或用户设置中的 `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` 是否为 `1`,并从这些位置以及任何 `--settings` 文件中移除所有 `0`。

196 

197### 带倒计时的权限提示

198 

199在自动模式下,如果先前的代码仍在运行时 Claude 又启动了新代码,先前的代码将失去分类器审查。随后,Claude Code 会就先前代码中剩余的、需要审查的调用询问您。在未连接 IDE 的情况下,提示会显示倒计时:

200 

201```text theme={null}

202Claude Code will automatically block this request in 1:59, to avoid holding up an unattended session

203```

204 

205请在倒计时结束前作答。否则该调用将被拒绝,并且之后本应显示倒计时的调用将在不提示的情况下被拒绝。如需再次看到这些提示,请向 Claude 发送一条消息。

206 

207### 工具调用被 hook 拒绝

208 

209如果 Claude 报告工具调用被拒绝,请让它提供错误文本。以下错误表示 `PreToolUse` hook 未给出决定,即使未设置 [`onFailure`](https://code.claude.com/docs/zh-CN/hooks#block-the-action-when-a-hook-fails),这也会拒绝该调用:

210 

211* **`the hook failed`**:对于来自 Claude 代码的调用,您的 hook 无法启动、被终止、以 126、127 或大于 128 的代码退出,或者返回了 HTTP 错误或无效输出。请修复该 hook

212* **`the hook did not finish`**:您的 hook 在处理来自 Claude 代码的调用时超时,或者在 Claude 已在会话中运行过代码后,在处理任何其他工具调用时超时。请增大该 hook 的 [`timeout`](https://code.claude.com/docs/zh-CN/hooks#common-fields)

213 

214如需在 `command` 或 `http` hook 失败或超时时允许调用继续进行,请在该 hook 上设置 `"onFailure": "continue"`。如果 `command` hook 以 1 等普通代码退出,调用会继续进行,除非您设置了 `"onFailure": "block"`。

215 

216### 代码输出被 hook 拦截

217 

218如果在您预期看到 Claude 代码输出的地方,Claude 报告了某个 hook 的阻止原因,请检查您的 [`UserPromptSubmit`](https://code.claude.com/docs/zh-CN/hooks#userpromptsubmit) hook。当[代码可以在后台运行](#long-running-code)时,该事件上的 `command`、`http` 和 `mcp_tool` hook 也会在代码输出上运行。如需让输出通过,请修改该 hook,使其在输入中的 `source` 为 `poll_event` 时不进行阻止。

219 

220## 相关资源

221 

222* [权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md):将自动模式与会提示您的模式进行比较

223* [Hooks 参考](https://code.claude.com/docs/zh-CN/hooks.md):编写 `PreToolUse` 和 `UserPromptSubmit` hook

224* [托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md):在整个组织中应用统一配置

commands.md +3 −5

Details

35下表列出了 Claude Code 中包含的所有命令。大多数是内置命令,其行为编码在 CLI 中。有两类条目带有标记:35下表列出了 Claude Code 中包含的所有命令。大多数是内置命令,其行为编码在 CLI 中。有两类条目带有标记:

36 36 

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

38 * `/verify` 仅在您调用时运行。

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

40 * `/deep-research` 仅在您调用时运行。

41 39 

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

43 41 


149| `/stats` | `/usage` 的别名。在 Stats 选项卡上打开 |147| `/stats` | `/usage` 的别名。在 Stats 选项卡上打开 |

150| `/status` | 在 Status 选项卡上打开设置界面,显示版本、模型、账户和连接状态。在[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)中,`Session kind` 行会显示 `background job · attached` 或 `background job · unattended`(取决于是否附加了终端),在其他任何会话中显示 `interactive`。在 v2.1.221 之前,`/status` 不显示此行。在 Claude 回复时也可使用 |148| `/status` | 在 Status 选项卡上打开设置界面,显示版本、模型、账户和连接状态。在[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)中,`Session kind` 行会显示 `background job · attached` 或 `background job · unattended`(取决于是否附加了终端),在其他任何会话中显示 `interactive`。在 v2.1.221 之前,`/status` 不显示此行。在 Claude 回复时也可使用 |

151| `/statusline` | 配置 Claude Code 的[状态栏](https://code.claude.com/docs/zh-CN/statusline.md)。描述您想要的内容,或不带参数运行以根据您的 shell 提示符自动配置 |149| `/statusline` | 配置 Claude Code 的[状态栏](https://code.claude.com/docs/zh-CN/statusline.md)。描述您想要的内容,或不带参数运行以根据您的 shell 提示符自动配置 |

152| `/stickers` | 订购 Claude Code 贴纸 |150| `/stickers` | 查看 Claude Code 贴纸的可用情况 |

153| `/stop` | 停止您已附加到的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),或您以[窥视回复](https://code.claude.com/docs/zh-CN/agent-view.md#peek-and-reply)方式发送此命令的目标会话;会话记录和任何 worktree 都会保留。要分离而不停止,请使用 `/exit` 或按 `←` |151| `/stop` | 停止您已附加到的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),或您以[窥视回复](https://code.claude.com/docs/zh-CN/agent-view.md#peek-and-reply)方式发送此命令的目标会话;会话记录和任何 worktree 都会保留。要分离而不停止,请使用 `/exit` 或按 `←` |

154| `/subtask <task>` | 生成一个[分叉子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation):一个继承完整对话的后台子代理,在您继续工作的同时处理该任务。完成后,其结果会返回到此对话。要改为将对话复制到单独的后台会话中,请使用 `/fork`。当[关闭 Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md#turn-off-agent-view)时,`/subtask` 不可用,`/fork` 会改为生成分叉子代理 |152| `/subtask <task>` | 生成一个[分叉子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#fork-the-current-conversation):一个继承完整对话的后台子代理,在您继续工作的同时处理该任务。完成后,其结果会返回到此对话。要改为将对话复制到单独的后台会话中,请使用 `/fork`。当[关闭 Agent 视图](https://code.claude.com/docs/zh-CN/agent-view.md#turn-off-agent-view)时,`/subtask` 不可用,`/fork` 会改为生成分叉子代理 |

155| `/tasks` | 查看和管理当前会话中的后台工作,包括已完成的子代理。也可作为 `/bashes` 使用 |153| `/tasks` | 查看和管理当前会话中的后台工作,包括已完成的子代理。也可作为 `/bashes` 使用 |


161| `/ultraplan <prompt>` | 已移除。请改用[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode)。以前会将规划任务发送到[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),以便在浏览器中审阅 |159| `/ultraplan <prompt>` | 已移除。请改用[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode)。以前会将规划任务发送到[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),以便在浏览器中审阅 |

162| `/ultrareview [PR or branch]` | 使用 [ultrareview](https://code.claude.com/docs/zh-CN/ultrareview.md) 在云端沙箱中运行深度多 Agent 代码审查。传递 PR 引用可审查该 Pull Request,或传递基准分支或提交以更改比较基准。首选调用方式是 `/code-review ultra`,`/ultrareview` 是其别名。Pro、Max 和 Ultra 包含 3 次免费运行,之后需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |160| `/ultrareview [PR or branch]` | 使用 [ultrareview](https://code.claude.com/docs/zh-CN/ultrareview.md) 在云端沙箱中运行深度多 Agent 代码审查。传递 PR 引用可审查该 Pull Request,或传递基准分支或提交以更改比较基准。首选调用方式是 `/code-review ultra`,`/ultrareview` 是其别名。Pro、Max 和 Ultra 包含 3 次免费运行,之后需要[使用额度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

163| `/update-config [request]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 描述一项设置更改,例如允许某个命令、设置环境变量或添加 [hook](https://code.claude.com/docs/zh-CN/hooks.md),Claude 会编辑相应的 [`settings.json`](https://code.claude.com/docs/zh-CN/settings) 文件。对于主题和模型等选项,请改用 `/config` |161| `/update-config [request]` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 描述一项设置更改,例如允许某个命令、设置环境变量或添加 [hook](https://code.claude.com/docs/zh-CN/hooks.md),Claude 会编辑相应的 [`settings.json`](https://code.claude.com/docs/zh-CN/settings) 文件。对于主题和模型等选项,请改用 `/config` |

164| `/upgrade` | 在浏览器中打开升级页面,以切换到更高的套餐级别。当浏览器无法打开时,该命令会显示登录提示,但不会输出 URL |162| `/upgrade` | 在浏览器中打开升级页面,以切换到更高的套餐级别。当没有浏览器能够打开该页面时(例如通过 SSH),该命令会在其登录提示上方输出该页面的 URL。输出 URL 需要 Claude Code v2.1.323 或更高版本 |

165| `/usage` | 显示会话开销、套餐用量限制和活动统计信息。在 Pro、Max、Ultra、Team 或 Enterprise 套餐上,包括[计入套餐限制的内容明细](https://code.claude.com/docs/zh-CN/costs.md#plan-usage-breakdown)。在跟踪支出的 Claude apps gateway 之后使用时,显示[您通过该网关产生的支出](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md#usage-warnings-in-claude-code)。`/cost` 和 `/stats` 是其别名 |163| `/usage` | 显示会话开销、套餐用量限制和活动统计信息。在 Pro、Max、Ultra、Team 或 Enterprise 套餐上,包括[计入套餐限制的内容明细](https://code.claude.com/docs/zh-CN/costs.md#plan-usage-breakdown)。在跟踪支出的 Claude apps gateway 之后使用时,显示[您通过该网关产生的支出](https://code.claude.com/docs/zh-CN/claude-apps-gateway-spend-limits.md#usage-warnings-in-claude-code)。`/cost` 和 `/stats` 是其别名 |

166| `/usage-credits` | 在达到限制时配置使用额度,或向管理员申请使用额度。在浏览器中打开您的[使用额度计费设置](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription);但没有计费访问权限的 Team 和 Enterprise 成员会在对话框中确认该请求会通知其管理员后,改为从 CLI 向管理员发送使用额度请求。当无法打开浏览器访问计费页面时(例如通过 SSH),该命令会改为输出要访问的 URL;这需要 Claude Code v2.1.205 或更高版本,更早版本在这种情况下不显示任何内容。以前为 `/extra-usage` |164| `/usage-credits` | 在达到限制时配置使用额度,或向管理员申请使用额度。在浏览器中打开您的[使用额度计费设置](https://code.claude.com/docs/zh-CN/costs.md#add-usage-credits-to-your-subscription)。没有计费访问权限的 Team 和 Enterprise 成员则会改为从 CLI 向其管理员发送使用额度请求。在无法通过浏览器打开该页面的终端中(例如通过 SSH),该命令会输出 URL。输出 URL 需要 Claude Code v2.1.205 或更高版本。以前为 `/extra-usage` |

167| `/verify` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 通过构建、运行您项目的应用并观察结果来确认代码更改是否按预期工作,而不是依赖测试或类型检查。请参阅[运行并验证您的应用](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app) |165| `/verify` | **[Skill](https://code.claude.com/docs/zh-CN/skills.md#bundled-skills)。** 通过构建、运行您项目的应用并观察结果来确认代码更改是否按预期工作,而不是依赖测试或类型检查。请参阅[运行并验证您的应用](https://code.claude.com/docs/zh-CN/skills.md#run-and-verify-your-app) |

168| `/vim` | 已在 v2.1.92 中移除。要在 Vim 和 Normal 编辑模式之间切换,请使用 `/config` → Editor mode |166| `/vim` | 已在 v2.1.92 中移除。要在 Vim 和 Normal 编辑模式之间切换,请使用 `/config` → Editor mode |

169| `/voice [hold\|tap\|off]` | 切换[语音听写](https://code.claude.com/docs/zh-CN/voice-dictation.md),或以特定模式启用它。需要 Claude.ai 账户 |167| `/voice [hold\|tap\|off]` | 切换[语音听写](https://code.claude.com/docs/zh-CN/voice-dictation.md),或以特定模式启用它。需要 Claude.ai 账户 |

desktop.md +0 −4

Details

2261 2261 

2262Desktop 应用会将 `claude_desktop_config.json` 中的 MCP 服务器加载到本地 Code 选项卡会话中,与来自 `~/.claude.json` 和 `.mcp.json` 的服务器一起使用。在 `claude_desktop_config.json` 中定义的服务器在 Desktop 聊天使用入口和本地 Code 选项卡会话中都可用。2262Desktop 应用会将 `claude_desktop_config.json` 中的 MCP 服务器加载到本地 Code 选项卡会话中,与来自 `~/.claude.json` 和 `.mcp.json` 的服务器一起使用。在 `claude_desktop_config.json` 中定义的服务器在 Desktop 聊天使用入口和本地 Code 选项卡会话中都可用。

2263 2263 

2264如果您在 `claude_desktop_config.json` 和 `~/.claude.json` 或 `.mcp.json` 中定义相同的服务器名称,本地会话中的 Code 选项卡只连接一次并使用 `claude_desktop_config.json` 中的定义。

2265 

2266该应用还将来自 `~/.claude.json` 的 stdio 服务器重新传递到本地会话中的嵌入式 CLI。当 `~/.claude.json` 的顶层(用户作用域)和 `.mcp.json` 定义相同的 stdio 服务器名称时,Code 选项卡使用 `~/.claude.json` 中的定义,这与 CLI 的[作用域层次结构](https://code.claude.com/docs/zh-CN/mcp.md#scope-hierarchy-and-precedence)不同。

2267 

2268> [!NOTE]2264> [!NOTE]

2269>2265>

2270> 独立 CLI 不读取 `claude_desktop_config.json`。在 macOS 和 WSL 上,运行 `claude mcp add-from-claude-desktop` 将这些服务器复制到 `~/.claude.json`。请参阅[从 Claude Desktop 导入 MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md#import-mcp-servers-from-claude-desktop)了解导入流程和作用域选项。2266> 独立 CLI 不读取 `claude_desktop_config.json`。在 macOS 和 WSL 上,运行 `claude mcp add-from-claude-desktop` 将这些服务器复制到 `~/.claude.json`。请参阅[从 Claude Desktop 导入 MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md#import-mcp-servers-from-claude-desktop)了解导入流程和作用域选项。

Details

71 71 

72从应用启动器启动 **Claude**,或从终端运行 `claude-desktop`,然后使用您的 Anthropic 账户登录。72从应用启动器启动 **Claude**,或从终端运行 `claude-desktop`,然后使用您的 Anthropic 账户登录。

73 73 

74Linux 应用的登录方式与 macOS 和 Windows 上相同:使用 claude.ai 订阅或通过您组织的 SSO。如需使用 API 密钥身份验证,请使用 [CLI](https://code.claude.com/docs/zh-CN/quickstart.md)。如果要改为将 Desktop 与 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 LLM 网关配合使用,请参阅 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)。有关这些部署中的代理服务器和自定义证书颁发机构,请参阅 [网络配置](https://code.claude.com/docs/zh-CN/network-config.md)。74Linux 应用的登录方式与 macOS 和 Windows 上相同:使用 claude.ai 订阅或通过您组织的 SSO。如果要改为将 Desktop 与 Claude API 密钥、Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 或 LLM 网关配合使用,请参阅 [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)。有关这些部署中的代理服务器和自定义证书颁发机构,请参阅 [网络配置](https://code.claude.com/docs/zh-CN/network-config.md)。

75 75 

76### 从下载的文件安装76### 从下载的文件安装

77 77 

Details

83 83 

84**8. 选择权限模式和模型**84**8. 选择权限模式和模型**

85 85 

86在指令输入框的工具栏中,选择[权限模式](#permissions-for-scheduled-tasks)和模型。如果保持不变,运行时将使用您的 Claude Code 设置和默认模型。86在指令输入框的工具栏中,选择[权限模式](#permissions-for-scheduled-tasks)和模型。

87 

88* **权限模式**:如果保持不变,运行时将使用您的 Claude Code 设置。

89* **模型**:如果模型菜单显示 **Default · Set by admin**,且您没有选择其他模型,运行时将使用您的组织在[托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md)中设置的模型。在应用打开时启动的[补运行](#missed-runs)可能会改为使用[您账户的运行时默认模型](https://code.claude.com/docs/zh-CN/model-config.md#default-model-setting)。

87 90 

88**9. 创建任务**91**9. 创建任务**

89 92 

90单击 **Create**。如果您尚未信任该文件夹,Desktop 会在此时要求您信任它。随后将打开该任务的详情页面。93单击 **Create**。如果您尚未信任该文件夹,Desktop 会在此时要求您信任它。随后将打开该任务的详情页面。

91 94 

95要查看 **Default · Set by admin** 代表哪个模型,请在详情页面上单击 **Run now** 以立即运行该任务。然后[打开该次运行的会话](#find-a-runs-session),输入框下方的行会显示该模型的名称。

96 

92在详情页面上,单击铅笔图标以打开 [**Edit** 表单](#manage-scheduled-tasks)。在该表单中,您可以更改 Desktop 根据您的指令填写的 **Description**、选择 **Worktree**,或将计划切换为 **Manual** 或 **Custom**。97在详情页面上,单击铅笔图标以打开 [**Edit** 表单](#manage-scheduled-tasks)。在该表单中,您可以更改 Desktop 根据您的指令填写的 **Description**、选择 **Worktree**,或将计划切换为 **Manual** 或 **Custom**。

93 98 

94您也可以通过在任何会话中描述您想要的内容来创建任务。例如,"设置一个每天早上 9 点运行的日常代码审查"会创建一个周期性任务。像"提醒我明天下午 3 点检查部署"这样的请求会创建一个一次性任务,该任务在触发后会自行禁用。99您也可以通过在任何会话中描述您想要的内容来创建任务。例如,"设置一个每天早上 9 点运行的日常代码审查"会创建一个周期性任务。像"提醒我明天下午 3 点检查部署"这样的请求会创建一个一次性任务,该任务在触发后会自行禁用。


181 186 

182要让任务使用 `update_scheduled_task` MCP 工具更改其自己的调度或提示词,请单击 **Run now** 并每次批准该调用。187要让任务使用 `update_scheduled_task` MCP 工具更改其自己的调度或提示词,请单击 **Run now** 并每次批准该调用。

183 188 

184要在磁盘上编辑任务的提示,请打开 `~/.claude/scheduled-tasks/<task-name>/SKILL.md`(如果设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),则在其下)。该文件使用 YAML frontmatter 表示 `name` 和 `description`,提示作为正文。更改在下一次运行时生效。Schedule、folder、model 和 enabled 状态不在此文件中:通过 Edit 表单更改它们或询问 Claude。189要在磁盘上编辑任务的提示词,请打开 `~/.claude/scheduled-tasks/<task-name>/SKILL.md`(如果设置了 [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/zh-CN/env-vars),则在其下)。该文件使用 YAML frontmatter 表示 `name` 和 `description`,提示词作为正文。更改在下一次运行时生效。Schedule、folder 和 enabled 状态不在此文件中:通过 Edit 表单更改它们或询问 Claude。

185 190 

186## 相关资源191## 相关资源

187 192 

env-vars.md +7 −3

Details

211| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](https://code.claude.com/docs/zh-CN/vs-code.md)。默认情况下,在受支持 IDE 的集成终端中启动时,Claude Code 会自动连接。设置为 `false` 可阻止此行为。设置为 `true` 可在自动检测失败时强制尝试连接,例如当 tmux 遮蔽了父终端时。优先于 [`autoConnectIde`](https://code.claude.com/docs/zh-CN/settings-reference#autoconnectide) 全局配置设置 |211| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 覆盖自动 [IDE 连接](https://code.claude.com/docs/zh-CN/vs-code.md)。默认情况下,在受支持 IDE 的集成终端中启动时,Claude Code 会自动连接。设置为 `false` 可阻止此行为。设置为 `true` 可在自动检测失败时强制尝试连接,例如当 tmux 遮蔽了父终端时。优先于 [`autoConnectIde`](https://code.claude.com/docs/zh-CN/settings-reference#autoconnectide) 全局配置设置 |

212| `CLAUDE_CODE_AUTO_MODE_MODEL` | 设置 Claude Code 在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)下发送的分类器请求所使用的模型。请使用完整的模型 ID,例如 `claude-sonnet-4-6`。有关 Claude Code 会忽略它的情况,请参阅[选择分类器模型](https://code.claude.com/docs/zh-CN/permission-modes.md#choose-the-classifier-model)。需要 Claude Code v2.1.302 或更高版本 |212| `CLAUDE_CODE_AUTO_MODE_MODEL` | 设置 Claude Code 在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)下发送的分类器请求所使用的模型。请使用完整的模型 ID,例如 `claude-sonnet-4-6`。有关 Claude Code 会忽略它的情况,请参阅[选择分类器模型](https://code.claude.com/docs/zh-CN/permission-modes.md#choose-the-classifier-model)。需要 Claude Code v2.1.302 或更高版本 |

213| `CLAUDE_CODE_AUTO_MODE_SERVER` | 控制 Claude Code 是否请求服务器[审查自动模式操作](https://code.claude.com/docs/zh-CN/permission-modes.md#server-side-classifier-review)。设置为 `0` 可改用 Claude Code 自身的分类器请求。在直接连接到 Anthropic API 时,需要 v2.1.281 或更高版本。链接的章节列出了在未设置该变量时哪些会话会请求服务器,以及从哪个版本开始。需要 Claude Code v2.1.271 或更高版本 |213| `CLAUDE_CODE_AUTO_MODE_SERVER` | 控制 Claude Code 是否请求服务器[审查自动模式操作](https://code.claude.com/docs/zh-CN/permission-modes.md#server-side-classifier-review)。设置为 `0` 可改用 Claude Code 自身的分类器请求。在直接连接到 Anthropic API 时,需要 v2.1.281 或更高版本。链接的章节列出了在未设置该变量时哪些会话会请求服务器,以及从哪个版本开始。需要 Claude Code v2.1.271 或更高版本 |

214| `CLAUDE_CODE_AUTOMOUNT_ROOTS` | Claude Code 在您工作目录上方的文件夹中查找 `CLAUDE.md`、skill 和 `.mcp.json` 等文件时要跳过的自动挂载根文件夹。当这些查找需要等待您的自动挂载程序时,请设置此项。在 Unix 上用 `:` 分隔多个路径,在 Windows 上用 `;` 分隔,并以不含符号链接的绝对路径给出每个路径。需要 Claude Code v2.1.323 或更高版本 |

214| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Claude Code 等待 AWS 默认凭据提供程序链生成凭据的时间(毫秒),超时后请求将失败并显示 [`AWS default-chain credential resolve timed out`](https://code.claude.com/docs/zh-CN/errors#aws-default-chain-credential-resolve-timed-out)(默认值:`60000`)。当链中的某个步骤确实需要更长时间时(例如通过 `aws-vault` 等包装器进行带 MFA 的基于浏览器的 SSO 登录),请提高此值。适用于 Amazon Bedrock、[Claude Platform on AWS](https://code.claude.com/docs/zh-CN/claude-platform-on-aws.md) 和 [Mantle 端点](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#use-the-mantle-endpoint)。请参阅[凭据缓存和解析超时](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#credential-caching-and-resolution-timeout)。需要 Claude Code v2.1.207 或更高版本 |215| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Claude Code 等待 AWS 默认凭据提供程序链生成凭据的时间(毫秒),超时后请求将失败并显示 [`AWS default-chain credential resolve timed out`](https://code.claude.com/docs/zh-CN/errors#aws-default-chain-credential-resolve-timed-out)(默认值:`60000`)。当链中的某个步骤确实需要更长时间时(例如通过 `aws-vault` 等包装器进行带 MFA 的基于浏览器的 SSO 登录),请提高此值。适用于 Amazon Bedrock、[Claude Platform on AWS](https://code.claude.com/docs/zh-CN/claude-platform-on-aws.md) 和 [Mantle 端点](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#use-the-mantle-endpoint)。请参阅[凭据缓存和解析超时](https://code.claude.com/docs/zh-CN/amazon-bedrock.md#credential-caching-and-resolution-timeout)。需要 Claude Code v2.1.207 或更高版本 |

215| `CLAUDE_CODE_BASH_EDIT_DIFF` | 设置为 `0` 可关闭 [Bash 命令运行期间更改的文件的 diff](https://code.claude.com/docs/zh-CN/hooks.md#bash),设置为 `1` 可在每种权限模式下记录该 diff。优先于 [`bashEditDiffEnabled`](https://code.claude.com/docs/zh-CN/settings-reference#basheditdiffenabled) 设置。需要 Claude Code v2.1.269 或更高版本 |216| `CLAUDE_CODE_BASH_EDIT_DIFF` | 设置为 `0` 可关闭 [Bash 命令运行期间更改的文件的 diff](https://code.claude.com/docs/zh-CN/hooks.md#bash),设置为 `1` 可在每种权限模式下记录该 diff。优先于 [`bashEditDiffEnabled`](https://code.claude.com/docs/zh-CN/settings-reference#basheditdiffenabled) 设置。需要 Claude Code v2.1.269 或更高版本 |

216| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | 设置为 `0` 可使非交互会话在每个轮次结束时向其宿主报告空闲状态,即使后台工作仍在运行。默认情况下,当后台工作(例如后台 Agent 或[工作流](https://code.claude.com/docs/zh-CN/workflows.md)运行)仍处于活动状态时,会话在轮次结束后会持续报告运行状态。这可以防止监视该状态的宿主(例如远程会话列表)在工作进行中宣布 Claude 正在等待您的输入。后台 shell 命令(例如开发服务器)不会保持运行状态。运行状态默认行为和 `0` 退出选项需要 Claude Code v2.1.269 或更高版本;在更早的版本上,设置 `1` 可保持运行状态 |217| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | 设置为 `0` 可使非交互会话在每个轮次结束时向其宿主报告空闲状态,即使后台工作仍在运行。默认情况下,当后台工作(例如后台 Agent 或[工作流](https://code.claude.com/docs/zh-CN/workflows.md)运行)仍处于活动状态时,会话在轮次结束后会持续报告运行状态。这可以防止监视该状态的宿主(例如远程会话列表)在工作进行中宣布 Claude 正在等待您的输入。后台 shell 命令(例如开发服务器)不会保持运行状态。运行状态默认行为和 `0` 退出选项需要 Claude Code v2.1.269 或更高版本;在更早的版本上,设置 `1` 可保持运行状态 |


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

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

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

302| `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` | 设置为 `1` 可在 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md)(一项实验性功能)中启动会话。设置为 `0` 可保持关闭,或在托管设置中设置以[为组织阻止它](https://code.claude.com/docs/zh-CN/code-mode.md#block-code-mode-for-your-organization)。该变量[并非在每个设置文件中都有效](https://code.claude.com/docs/zh-CN/settings-reference.md#variables-claude-code-ignores-in-env)。请参阅[版本和账户要求](https://code.claude.com/docs/zh-CN/code-mode.md#requirements) |

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

302| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 覆盖[文件读取](https://code.claude.com/docs/zh-CN/tools-reference.md#large-files)的默认 token 限制,默认值为 25,000 个 token。适用于需要完整读取较大文件的情况。当上下文窗口有余量时,Claude 使用 `allow_large` 参数进行的读取可以超过此限制 |304| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 覆盖[文件读取](https://code.claude.com/docs/zh-CN/tools-reference.md#large-files)的默认 token 限制,默认值为 25,000 个 token。适用于需要完整读取较大文件的情况。当上下文窗口有余量时,Claude 使用 `allow_large` 参数进行的读取可以超过此限制 |

303| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | 设置为 `1` 可强制持久化会话记录、提示词历史并注册到 `claude agents`,即使此 `claude` 是从另一个 Claude Code 会话内部启动的。当继承的 `CLAUDE_CODE_CHILD_SESSION` 值(例如来自 `screen` 会话,或最初由 Claude Code 的 Bash 工具启动的后台启动器)导致真正的顶层会话被误判为嵌套会话时使用。从 v2.1.178 起,Claude Code 会自动检测 tmux 的情况并忽略继承的标记,因此 tmux 不再需要此变量。在 v2.1.169 及更早版本中同样有效;在 v2.1.170 和 v2.1.171 中不起作用,因为这两个版本移除了它所覆盖的嵌套会话检测 |305| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | 设置为 `1` 可强制持久化会话记录、提示词历史并注册到 `claude agents`,即使此 `claude` 是从另一个 Claude Code 会话内部启动的。当继承的 `CLAUDE_CODE_CHILD_SESSION` 值(例如来自 `screen` 会话,或最初由 Claude Code 的 Bash 工具启动的后台启动器)导致真正的顶层会话被误判为嵌套会话时使用。从 v2.1.178 起,Claude Code 会自动检测 tmux 的情况并忽略继承的标记,因此 tmux 不再需要此变量。在 v2.1.169 及更早版本中同样有效;在 v2.1.170 和 v2.1.171 中不起作用,因为这两个版本移除了它所覆盖的嵌套会话检测 |


348| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | 刷新待处理 OpenTelemetry span 的超时时间(毫秒,默认:5000)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |350| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | 刷新待处理 OpenTelemetry span 的超时时间(毫秒,默认:5000)。请参阅[监控](https://code.claude.com/docs/zh-CN/monitoring-usage.md) |

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

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

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

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

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

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

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


370| `CLAUDE_CODE_REMOTE` | 当 Claude Code 作为[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)运行时自动设置为 `true`。可在 hook 或环境设置脚本中读取此变量,以检测是否处于云端会话中 |372| `CLAUDE_CODE_REMOTE` | 当 Claude Code 作为[云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md)运行时自动设置为 `true`。可在 hook 或环境设置脚本中读取此变量,以检测是否处于云端会话中 |

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

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

375| `CLAUDE_CODE_RESUME_HINT_COMMAND` | 在启动 Claude Code 的包装脚本中,将此变量设置为您运行该包装脚本时输入的名称,例如 `mytool`。这样,本地会话在退出时会打印 `mytool --resume <session-id>`,而不是 `claude --resume <session-id>`。Claude Code 会忽略不匹配 `^\w[\w-]*$` 的名称。它还会在设置文件的 `env` 块中忽略此变量。需要 Claude Code v2.1.323 或更高版本 |

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

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

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


405| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | 设置为 `1` 可从 Claude Code 启动的子进程(例如 Bash 命令、hook 和 stdio MCP 服务器)的环境中剥离凭据。清理会根据变量名或变量值识别凭据,并保留 GitHub 令牌和代理设置。请参阅[子进程环境清理会移除哪些内容](#what-the-subprocess-environment-scrub-removes)。配置 `allowed_non_write_users` 时,`claude-code-action` 会自动设置此变量 |408| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | 设置为 `1` 可从 Claude Code 启动的子进程(例如 Bash 命令、hook 和 stdio MCP 服务器)的环境中剥离凭据。清理会根据变量名或变量值识别凭据,并保留 GitHub 令牌和代理设置。请参阅[子进程环境清理会移除哪些内容](#what-the-subprocess-environment-scrub-removes)。配置 `allowed_non_write_users` 时,`claude-code-action` 会自动设置此变量 |

406| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 在非交互模式(`-p` 标志)下设置为 `1`,可在第一次查询之前等待插件安装完成。否则,插件会在后台安装,可能在第一轮中不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合使用可限制等待时间 |409| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 在非交互模式(`-p` 标志)下设置为 `1`,可在第一次查询之前等待插件安装完成。否则,插件会在后台安装,可能在第一轮中不可用。与 `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` 结合使用可限制等待时间 |

407| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(毫秒)。超时后,Claude Code 会在没有插件的情况下继续并记录错误。没有默认值:如果不设置此变量,同步安装会一直等待直到完成 |410| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 同步插件安装的超时时间(毫秒)。超时后,Claude Code 会在没有插件的情况下继续并记录错误。没有默认值:如果不设置此变量,同步安装会一直等待直到完成 |

408| `CLAUDE_CODE_SYNC_SKILLS` | 在使用 `-p` 标志的非交互模式下设置为 `1`,可让 Claude Code 在该次运行中下载为您的 claude.ai 账户启用的 skill,并在运行第一次查询之前等待其列表,最长等待 `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS`。需要 claude.ai 身份验证。使用 claude.ai 账户登录的终端会话无需此变量即可[同步这些 skill](https://code.claude.com/docs/zh-CN/skills.md#where-synced-skills-load),因此仅当某次 `-p` 运行需要在第一次查询时就使用您当前的 skill 时才设置它 |411| `CLAUDE_CODE_SYNC_SKILLS` | 设置为 `1` 可让 Claude Code 下载为您的 claude.ai 账户启用的 skill。在使用 `-p` 标志的非交互模式下,Claude Code 还会在运行第一次查询之前最多等待 `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` 以获取 skill 列表。需要 claude.ai 身份验证。使用 claude.ai 账户登录的终端会话无需此变量即可[同步这些 skill](https://code.claude.com/docs/zh-CN/skills.md#where-synced-skills-load)。在交互式会话中,此变量需要 v2.1.323 或更高版本 |

409| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | 当基于 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/typescript.md#query-object) 构建的应用重新加载 skill 时,会话中途运行的 skill 重新同步的超时时间(毫秒,默认:30000)。超时后,重新加载会使用已到达的 skill 继续,其余下载在后台完成 |412| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | 当基于 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/typescript.md#query-object) 构建的应用重新加载 skill 时,会话中途运行的 skill 重新同步的超时时间(毫秒,默认:30000)。超时后,重新加载会使用已到达的 skill 继续,其余下载在后台完成 |

410| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 设置 `CLAUDE_CODE_SYNC_SKILLS` 时,第一次查询等待初始 skill 列表的超时时间(毫秒,默认:5000)。超时后,第一次查询会使用已到达的 skill 运行。无论哪种情况,下载都会在后台完成,并且 Claude 在调用某个 skill 时会等待该 skill 下载完成 |413| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | 设置 `CLAUDE_CODE_SYNC_SKILLS` 时,第一次查询等待初始 skill 列表的超时时间(毫秒,默认:5000)。超时后,第一次查询会使用已到达的 skill 运行。无论哪种情况,下载都会在后台完成,并且 Claude 在调用某个 skill 时会等待该 skill 下载完成 |

411| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 可禁用 diff 输出中的语法高亮。适用于颜色干扰终端设置的情况。要同时禁用代码块和文件预览中的高亮,请使用 [`syntaxHighlightingDisabled`](https://code.claude.com/docs/zh-CN/settings-reference#syntaxhighlightingdisabled) 设置 |414| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | 设置为 `false` 可禁用 diff 输出中的语法高亮。适用于颜色干扰终端设置的情况。要同时禁用代码块和文件预览中的高亮,请使用 [`syntaxHighlightingDisabled`](https://code.claude.com/docs/zh-CN/settings-reference#syntaxhighlightingdisabled) 设置 |


585* 启用 [You should know mod](https://code.claude.com/docs/zh-CN/interactive-mode.md#you-should-know-suggestions)588* 启用 [You should know mod](https://code.claude.com/docs/zh-CN/interactive-mode.md#you-should-know-suggestions)

586* 使用 [advisor 工具](https://code.claude.com/docs/zh-CN/advisor.md#requirements),但在 Claude Platform on AWS 上使用 Claude Code v2.1.300 或更高版本时除外589* 使用 [advisor 工具](https://code.claude.com/docs/zh-CN/advisor.md#requirements),但在 Claude Platform on AWS 上使用 Claude Code v2.1.300 或更高版本时除外

587* 使用 [MCP 任务](https://code.claude.com/docs/zh-CN/mcp.md#mcp-tasks-that-run-on-the-server)590* 使用 [MCP 任务](https://code.claude.com/docs/zh-CN/mcp.md#mcp-tasks-that-run-on-the-server)

591* 启用 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md#requirements)

588* 阅读或回复 [Artifact 上的评论](https://code.claude.com/docs/zh-CN/artifacts.md#collect-comments-on-an-artifact)592* 阅读或回复 [Artifact 上的评论](https://code.claude.com/docs/zh-CN/artifacts.md#collect-comments-on-an-artifact)

589* 让 Claude 读取[其他组织的公开 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you)593* 让 Claude 读取[其他组织的公开 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you)

590* 在安装了 Git Bash 的 Windows 上,为 claude.ai 和 Console 账户默认获得 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool);除非您设置了 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`,否则 Claude Code 会通过 Git Bash 执行 shell 命令。在未安装 Git Bash 的 Windows 上,该工具保持启用594* 在安装了 Git Bash 的 Windows 上,为 claude.ai 和 Console 账户默认获得 [PowerShell 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#powershell-tool);除非您设置了 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`,否则 Claude Code 会通过 Git Bash 执行 shell 命令。在未安装 Git Bash 的 Windows 上,该工具保持启用

errors.md +100 −15

Details

122| `A request to MCP server "<name>" was sent without your stored credentials` | [身份验证](#couldnt-read-the-stored-credentials-for-mcp-server) |122| `A request to MCP server "<name>" was sent without your stored credentials` | [身份验证](#couldnt-read-the-stored-credentials-for-mcp-server) |

123| `This server's URL is missing or not a valid URL, so sign-in can't start` | [身份验证](#mcp-server-url-is-missing-or-not-a-valid-url) |123| `This server's URL is missing or not a valid URL, so sign-in can't start` | [身份验证](#mcp-server-url-is-missing-or-not-a-valid-url) |

124| `Issuer mismatch in authorization response (RFC 9207)` | [身份验证](#issuer-mismatch-in-authorization-response) |124| `Issuer mismatch in authorization response (RFC 9207)` | [身份验证](#issuer-mismatch-in-authorization-response) |

125| `Stopped an OAuth request` | [身份验证](#stopped-an-oauth-request) |

125| `Refusing to send credentials to non-https token endpoint` / `<short-name> from the MCP SDK for <server-url>` | [身份验证](#refusing-to-send-credentials-to-non-https-token-endpoint) |126| `Refusing to send credentials to non-https token endpoint` / `<short-name> from the MCP SDK for <server-url>` | [身份验证](#refusing-to-send-credentials-to-non-https-token-endpoint) |

126| `Cloud gateway session expired — run /login to reconnect.` | [身份验证](#cloud-gateway-session-expired) |127| `Cloud gateway session expired — run /login to reconnect.` | [身份验证](#cloud-gateway-session-expired) |

127| `Cloud gateway <url> no longer accepts this session` | [身份验证](#cloud-gateway-session-expired) |128| `Cloud gateway <url> no longer accepts this session` | [身份验证](#cloud-gateway-session-expired) |


153| `403` with `GitHub GraphQL is not available from Claude Code sessions` in a cloud session | [GitHub proxy](https://code.claude.com/docs/zh-CN/cloud-environments.md#github-proxy) |154| `403` with `GitHub GraphQL is not available from Claude Code sessions` in a cloud session | [GitHub proxy](https://code.claude.com/docs/zh-CN/cloud-environments.md#github-proxy) |

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

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

157| `Couldn't load the history of cloud session` | [网络](#couldnt-load-the-history-of-cloud-session) |

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

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

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


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

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

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

185| `/mcp` 中服务器旁显示的 `N tools left out` / `Claude wasn't given N tools because the Anthropic API would reject their input schemas` | [输入 schema 无效的工具](https://code.claude.com/docs/zh-CN/mcp.md#tools-with-invalid-input-schemas) |

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

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

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


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

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

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

257| `Remote Control did not start, because sessions would skip part or all of the --settings file` | [命令行错误](#remote-control-did-not-start-because-of-the-settings-file) |

258| `The settings file <file> has changed since Remote Control started, so this session did not start` | [命令行错误](#settings-file-changed-since-remote-control-started) |

254| `--sandbox is not supported by claude remote-control` / `--no-sandbox is not supported by claude remote-control` | [命令行错误](#sandbox-is-not-supported-by-claude-remote-control) |259| `--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) |

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

256| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |261| `Could not read Claude Code config` | [命令行错误](#could-not-read-claude-code-config) |


268| `No available ports for OAuth redirect` | [命令行错误](#no-available-ports-for-oauth-redirect) |273| `No available ports for OAuth redirect` | [命令行错误](#no-available-ports-for-oauth-redirect) |

269| `Shell command failed for pattern "..."`, from `/security-review` or any skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |274| `Shell command failed for pattern "..."`, from `/security-review` or any skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |

270| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |275| `Shell command permission check failed for pattern "..."`, from a skill that injects dynamic context | [命令行错误](#security-review-fails-without-origin-head) |

276| ``Couldn't run `<command>` for <name>. A file named HEAD or .git in this folder or one above it may not be yours``,来自注入动态上下文的 skill | [注入命令的权限检查](https://code.claude.com/docs/zh-CN/skills.md#permission-checks-on-injected-commands) |

271| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |277| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [命令行错误](#security-review-fails-without-origin-head) |

272| `No shell command in <name> was run, because the <tool> tool does not accept one of them` | [命令行错误](#no-shell-command-was-run) |278| `No shell command in <name> was run, because the <tool> tool does not accept one of them` | [命令行错误](#no-shell-command-was-run) |

273| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |279| `Input must be provided either through stdin or as a prompt argument when using --print` | [命令行错误](#input-must-be-provided-when-using-print) |


425| `Workspace not trusted.` when starting or restarting a background session | [后台会话错误](#workspace-not-trusted-when-dispatching-a-background-session) |431| `Workspace not trusted.` when starting or restarting a background session | [后台会话错误](#workspace-not-trusted-when-dispatching-a-background-session) |

426| `Claude Code is being updated by npm on this machine (still not runnable after 2 min, ...)` | [后台会话错误](#eacces-when-starting-a-background-session) |432| `Claude Code is being updated by npm on this machine (still not runnable after 2 min, ...)` | [后台会话错误](#eacces-when-starting-a-background-session) |

427| `Claude Code process exited with code N` | [包装器和 IDE 错误](#claude-code-process-exited-with-code-n) |433| `Claude Code process exited with code N` | [包装器和 IDE 错误](#claude-code-process-exited-with-code-n) |

434| `Subprocess initialization did not complete within 60000ms` | [包装器和 IDE 错误](#subprocess-initialization-did-not-complete-within-60000ms) |

435| `Claude Code did not finish starting` | [包装器和 IDE 错误](#subprocess-initialization-did-not-complete-within-60000ms) |

428| `The connection to Claude Code ended before this message completed` | [包装器和 IDE 错误](#the-connection-to-claude-code-ended-before-this-message-completed) |436| `The connection to Claude Code ended before this message completed` | [包装器和 IDE 错误](#the-connection-to-claude-code-ended-before-this-message-completed) |

429| `Could not locate the Claude CLI on PATH` | [包装器和 IDE 错误](#could-not-locate-the-claude-cli-on-path) |437| `Could not locate the Claude CLI on PATH` | [包装器和 IDE 错误](#could-not-locate-the-claude-cli-on-path) |

430| `The Claude Code program for this computer, the <build> build, could not be found` | [包装器和 IDE 错误](#the-claude-code-program-for-this-computer-could-not-be-found) |438| `The Claude Code program for this computer, the <build> build, could not be found` | [包装器和 IDE 错误](#the-claude-code-program-for-this-computer-could-not-be-found) |


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

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

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

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

564| [`API_TIMEOUT_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 600000 | 每次请求尝试接收其响应头的时限(毫秒)。它不限制流式响应在此之后持续的时长。为慢速网络或代理提高它。关于它如何限制首字节截止时间,请参阅 [No response from API](#no-response-from-api)。 |572| [`API_TIMEOUT_MS`](https://code.claude.com/docs/zh-CN/env-vars) | 600000 | 每次请求尝试接收其响应头的时限(毫秒)。它不限制流式响应在此之后持续的时长。为慢速网络或代理提高它。关于它如何限制首字节截止时间,请参阅 [No response from API](#no-response-from-api)。 |

565| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 超时的[非流式请求](#streaming-response-ended-before-any-complete-data-was-received)的重新发送次数限制。达到该限制时,请求失败。生成时间超过超时时间的 Claude 响应在每次重新发送时都会再次超时,因此请设置较低的数值(例如 `0`)以更快地失败。关于每次尝试的超时时间,请参阅[非流式尝试的等待时长](#how-long-a-non-streaming-attempt-waits)。需要 Claude Code v2.1.285 或更高版本。 |573| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](https://code.claude.com/docs/zh-CN/env-vars) | 未设置 | 超时的[非流式请求](#streaming-response-ended-before-any-complete-data-was-received)的重新发送次数限制。达到该限制时,请求失败。生成时间超过超时时间的 Claude 响应在每次重新发送时都会再次超时,因此请设置较低的数值(例如 `0`)以更快地失败。关于每次尝试的超时时间,请参阅[非流式尝试的等待时长](#how-long-a-non-streaming-attempt-waits)。需要 Claude Code v2.1.285 或更高版本。 |

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


825同一 Claude 回复中的后续调用可能会以此原因被拒绝:833同一 Claude 回复中的后续调用可能会以此原因被拒绝:

826 834 

827```text theme={null}835```text theme={null}

828another call in this response was changed by a hook after auto mode reviewed it, or could not be confirmed unchanged836another call in this response was changed after auto mode reviewed it, or could not be confirmed unchanged

829```837```

830 838 

831Claude 随后可以再次发出每个被拒绝的调用,以便服务器对其进行审查。如果打开了权限提示,请作出回应。除非 Claude 在回复中说明自动模式无法检查该调用,否则您无需执行其他任何操作。在这种情况下,请停止该更改或自行批准该调用,然后让 Claude 再次尝试该调用:839Claude 随后可以再次发出每个被拒绝的调用,以便服务器对其进行审查。如果打开了权限提示,请作出回应。除非 Claude 在回复中说明自动模式无法检查该调用,否则您无需执行其他任何操作。在这种情况下,请停止该更改或自行批准该调用,然后让 Claude 再次尝试该调用:


978 986 

979### You've hit your monthly spend limit987### You've hit your monthly spend limit

980 988 

981您的套餐包含的用量无法覆盖此请求,而本应为其付款的 [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) 已达到支出限制。这发生在您的套餐的用量窗口之一用完时,或当请求是仅由使用额度支付的请求时,例如对 [bills to usage credits](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits) 的模型的请求。消息会指明是谁的限制阻止了您。`·` 后的文本说明如何增加该限制,并因您的套餐和您是否管理计费而异:989您的套餐包含的用量无法覆盖此请求,而本应为其付款的 [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) 已达到支出限制。当您的套餐的用量窗口之一用完时,或当请求仅由使用额度支付时,您的套餐就无法覆盖该请求。一个例子是对 [bills to usage credits](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits) 的模型的请求。

990 

991`·` 之前的文字指明阻止您的限制,例如您组织的月度支出限制,其后的文本说明如何增加该限制。在云端会话中或在 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 下,该文本不提供 URL,而关于您自己的 `monthly spend limit` 的消息不会说明如何提高它。其他会话会显示类似以下形式的消息:

982 992 

983```text theme={null}993```text theme={null}

984You've hit your monthly spend limit · raise it at https://claude.ai/settings/usage?from=cc_cli_limit_message994You've hit your monthly spend limit · raise it at https://claude.ai/settings/usage?from=cc_cli_limit_message


1822 1832 

1823在 v2.1.232 之前,Claude Code 仅在逐步推出时或您设置 `MCP_SDK_GENERATION=v2` 时才使用 v2 运行时。1833在 v2.1.232 之前,Claude Code 仅在逐步推出时或您设置 `MCP_SDK_GENERATION=v2` 时才使用 v2 运行时。

1824 1834 

1835### Stopped an OAuth request

1836 

1837此消息表示 Claude Code 停止了一个[针对 MCP 服务器的 OAuth 请求](https://code.claude.com/docs/zh-CN/mcp.md#authenticate-with-remote-mcp-servers),因为某个 OAuth 端点对其进行了重定向。在该消息的两种形式中,第一个地址都是发送重定向的地址:

1838 

1839```text theme={null}

1840Stopped an OAuth request, which can hold secrets: https://auth.example.com redirected it to https://other.example.com. Ask the owner of https://auth.example.com to remove that redirect.

1841Stopped an OAuth request: https://auth.example.com redirected it more than 5 times. Ask the owner of https://auth.example.com to fix those redirects.

1842```

1843 

1844**解决方法:**

1845 

1846* 请第一个地址的运营者(例如 MCP 服务器的运营方)移除或修复该重定向。然后从 `/mcp` 再次尝试。

1847 

1825### 拒绝向非 https 令牌端点发送凭据1848### 拒绝向非 https 令牌端点发送凭据

1826 1849 

1827在 [v2 运行时](https://code.claude.com/docs/zh-CN/mcp.md#mcp-client-runtimes)上,Claude Code 只会将 [MCP OAuth](https://code.claude.com/docs/zh-CN/mcp.md#authenticate-with-remote-mcp-servers) 令牌请求发送到通过 HTTPS 提供服务的令牌端点,或位于 `localhost`、`127.0.0.1` 或 `::1` 的令牌端点。此消息表示服务器的令牌端点两者都不是,因此 Claude Code 在发送请求前就停止了。这发生在浏览器登录之后,因此浏览器步骤会先成功,并且每当 Claude Code 刷新该服务器的令牌时都会再次发生。1850在 [v2 运行时](https://code.claude.com/docs/zh-CN/mcp.md#mcp-client-runtimes)上,Claude Code 只会将 [MCP OAuth](https://code.claude.com/docs/zh-CN/mcp.md#authenticate-with-remote-mcp-servers) 令牌请求发送到通过 HTTPS 提供服务的令牌端点,或位于 `localhost`、`127.0.0.1` 或 `::1` 的令牌端点。此消息表示服务器的令牌端点两者都不是,因此 Claude Code 在发送请求前就停止了。这发生在浏览器登录之后,因此浏览器步骤会先成功,并且每当 Claude Code 刷新该服务器的令牌时都会再次发生。


2207 2230 

2208### 云端会话中不允许访问该主机2231### 云端会话中不允许访问该主机

2209 2232 

2210来自云端会话或云端定时任务的出站 HTTP 请求被环境的网络策略阻止。2233在云端会话或云端定时任务中,`403` 或 DNS 错误(例如 `ENOTFOUND`)可能意味着所请求的主机不在[云环境的允许列表](https://code.claude.com/docs/zh-CN/cloud-environments.md#access-levels)中。要确认这一点,请将该主机与该列表进行核对。带有以下标头的 `403` 可以确认请求已被阻止,但并非每个被阻止请求的 `403` 都带有该标头:

2211 2234 

2212```text theme={null}2235```text theme={null}

2213HTTP 4032236HTTP 403


2290 2313 

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

2292 2315 

2316### Couldn't load the history of cloud session

2317 

2318此消息表示 Claude Code 找到了[您要求拉取到终端中的云端会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#from-cloud-to-terminal),但对其对话历史的请求返回了未找到的结果:

2319 

2320```text theme={null}

2321Couldn't load the history of cloud session session_01HJKLMNOPQRSTUVWXYZ. Check it at https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ?from=cli

2322```

2323 

2324**解决方法:**

2325 

2326* 打开消息中的链接,在浏览器中检查该会话。如果该会话能在浏览器中打开,而相同的 Teleport 再次以这种方式失败,请[报告问题](#report-an-error)。

2327 

2293### Couldn't reconnect to your Remote Control session2328### Couldn't reconnect to your Remote Control session

2294 2329 

2295```text theme={null}2330```text theme={null}


2565 2600 

2566Claude Code 通常会自动调整大型图像的大小。这些错误意味着无法解码或调整图像大小以适应 API 限制。2601Claude Code 通常会自动调整大型图像的大小。这些错误意味着无法解码或调整图像大小以适应 API 限制。

2567 2602 

2603您看到的错误可能会指明不同的像素限制,例如在这些示例显示 `2000x2000px` 的位置显示 `2576x2576px`。

2604 

2568**要做什么:**2605**要做什么:**

2569 2606 

2570* 如果消息要求您转换图像,请将其转换为 PNG、JPEG、GIF 或 WebP,然后再次附加。Claude Code 可以从文件头为这些格式验证尺寸,而无需解码图像。2607* 如果消息要求您转换图像,请将其转换为 PNG、JPEG、GIF 或 WebP,然后再次附加。Claude Code 可以从文件头为这些格式验证尺寸,而无需解码图像。


2873* **hook 写入的原因**:PreModelSwitch hook 在[拒绝切换或要求确认](https://code.claude.com/docs/zh-CN/hooks.md#premodelswitch-decision-control)时提供了该原因。解决它要求的内容,或选择您的 hook 允许的模型。2910* **hook 写入的原因**:PreModelSwitch hook 在[拒绝切换或要求确认](https://code.claude.com/docs/zh-CN/hooks.md#premodelswitch-decision-control)时提供了该原因。解决它要求的内容,或选择您的 hook 允许的模型。

2874* **`PreModelSwitch hook <name> did not respond before its timeout`**:在其[超时](https://code.claude.com/docs/zh-CN/hooks.md#timeouts)之前不回答的 hook 阻止切换。修复挂起的命令或提高该 hook 的 `timeout`,然后再次切换。2911* **`PreModelSwitch hook <name> did not respond before its timeout`**:在其[超时](https://code.claude.com/docs/zh-CN/hooks.md#timeouts)之前不回答的 hook 阻止切换。修复挂起的命令或提高该 hook 的 `timeout`,然后再次切换。

2875* **`confirmation required, and this session cannot ask`**:hook 回答 `ask` 而没有原因,控制请求无法显示确认提示。[`-p` 运行](https://code.claude.com/docs/zh-CN/headless)中的 `/model` 命令以原因后的 `(run /model interactively to confirm)` 报告相同条件。从交互式会话进行切换,或更改 hook 对此模型的决定。2912* **`confirmation required, and this session cannot ask`**:hook 回答 `ask` 而没有原因,控制请求无法显示确认提示。[`-p` 运行](https://code.claude.com/docs/zh-CN/headless)中的 `/model` 命令以原因后的 `(run /model interactively to confirm)` 报告相同条件。从交互式会话进行切换,或更改 hook 对此模型的决定。

2876* **`so organization-managed PreModelSwitch hooks could not be checked`**:Claude Code 无法判断您的组织的[托管插件](https://code.claude.com/docs/zh-CN/settings-reference.md#enabledplugins)提供哪些 PreModelSwitch hook,例如因为托管插件加载失败。这些 hook 之一可能阻止切换,因此 Claude Code 拒绝而不是应用未检查的切换。原因的开头命名失败的内容。Claude Code 在每次切换尝试时重新检查,因此已清除的失败不再阻止;如果它继续失败,运行 `claude --debug` 并再次切换以捕获详细信息,然后修复插件或要求您的管理员修复它。2913* **`so organization-managed PreModelSwitch hooks could not be checked`**:v2.1.323 之前的 Claude Code 在无法判断您的[托管插件](https://code.claude.com/docs/zh-CN/settings-reference.md#enabledplugins)提供了哪些 PreModelSwitch hook 时会拒绝切换。此短语之前的文本指出了失败的内容。要停止拒绝,请更新 Claude Code。若还要让失败插件的 hook 运行起来,请修复该插件或联系管理员。有关详细信息,请在 shell 中启动 `claude --debug` 并切换模型,然后阅读[调试日志](https://code.claude.com/docs/zh-CN/hooks.md#debug-hooks)。

2877* **`a PreModelSwitch hook failed before answering`** 或 **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**:hook 运行在没有判决的情况下结束,Claude Code 不将其视为批准。运行 `claude --debug` 以查看失败的内容,然后再次切换。2914* **`a PreModelSwitch hook failed before answering`** 或 **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**:hook 运行在没有判决的情况下结束,Claude Code 不将其视为批准。运行 `claude --debug` 以查看失败的内容,然后再次切换。

2878 2915 

2879在 v2.1.260 之前,托管插件拒绝读取 `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`。Claude Code 重试了一次插件加载,然后在会话中拒绝了后来的切换,即使您的组织没有管理任何插件。在这些版本上重启会话以再次运行插件加载。2916在 v2.1.260 之前,托管插件拒绝读取 `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`。Claude Code 重试了一次插件加载,然后在会话中拒绝了后来的切换,即使您的组织没有管理任何插件。在这些版本上重启会话以再次运行插件加载。


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

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

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

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

3503 3540 

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

3505 3542 


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

3523 3560 

3524```text theme={null}3561```text theme={null}

3525Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`).3562Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`). Pass settings with `claude remote-control --settings <file>`.

3526```3563```

3527 3564 

3528对于丢弃后无害的全局标志,例如 `--verbose`、`--model`,或由包装器注入的 `--session-id` 或 `--plugin-dir`,Claude Code 不会拒绝:它会忽略这些标志,Remote Control 照常启动。3565对于丢弃后无害的全局标志,例如 `--verbose`、`--model`,或由包装器注入的 `--session-id` 或 `--plugin-dir`,Claude Code 不会拒绝:它会忽略这些标志,Remote Control 照常启动。


3536 3573 

3537在 v2.1.248 之前,当全局标志在前时,`claude remote-control` 不接受其自身的标志,命令会以 `unknown option` 错误失败。3574在 v2.1.248 之前,当全局标志在前时,`claude remote-control` 不接受其自身的标志,命令会以 `unknown option` 错误失败。

3538 3575 

3576### 由于 `--settings` 文件,Remote Control 未启动

3577 

3578您传给 [`claude remote-control --settings`](https://code.claude.com/docs/zh-CN/remote-control#start-a-remote-control-session) 的文件存在问题:

3579 

3580```text theme={null}

3581Error: Remote Control did not start, because sessions would skip part or all of the --settings file ./rc-settings.json: Invalid or malformed JSON

3582```

3583 

3584**解决方法:**

3585 

3586* 修复消息中指出的问题,然后再次运行您的 `claude remote-control` 命令

3587 

3588### The settings file has changed since Remote Control started

3589 

3590在运行 `claude remote-control` 的终端中出现此消息,表示会话不会基于您传给 [`--settings`](https://code.claude.com/docs/zh-CN/remote-control#start-a-remote-control-session) 的文件的当前内容启动:

3591 

3592```text theme={null}

3593Session failed: Error: The settings file /path/to/settings.json has changed since Remote Control started, so this session did not start. Restart `claude remote-control` to use it as it is now.

3594```

3595 

3596**解决方法:**

3597 

3598* 如果要使用该文件的当前内容,请停止 `claude remote-control` 并再次运行相同的命令。要恢复它之前提供服务的会话,请参阅[停止服务器后恢复会话](https://code.claude.com/docs/zh-CN/remote-control.md#resume-sessions-after-stopping-the-server)。

3599* 如果要保留 Remote Control 启动时使用的设置,请将文件内容恢复原样;如果 `claude remote-control` 已退出,则再次运行该命令

3600 

3539### `--sandbox` or `--no-sandbox` is not supported by claude remote-control3601### `--sandbox` or `--no-sandbox` is not supported by claude remote-control

3540 3602 

3541此错误表示启动您 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 服务器的命令在 `remote-control` 之后传入了 `--sandbox` 或 `--no-sandbox`,而 `claude remote-control` 不接受这两个标志中的任何一个。服务器以退出码 1 退出,而不会启动:3603此错误表示启动您 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 服务器的命令在 `remote-control` 之后传入了 `--sandbox` 或 `--no-sandbox`,而 `claude remote-control` 不接受这两个标志中的任何一个。服务器以退出码 1 退出,而不会启动:


3806 3868 

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

3808 3870 

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

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

3811 3873 

3812**解决方法:**3874**解决方法:**

3813 3875 


3960 4022 

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

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

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

3964 4026 

3965**解决方法:**4027**解决方法:**

3966 4028 


4490commands path escapes plugin directory: ./commands/deploy.md — it resolves to /home/user/shared/deploy.md, outside the plugin directory4552commands path escapes plugin directory: ./commands/deploy.md — it resolves to /home/user/shared/deploy.md, outside the plugin directory

4491```4553```

4492 4554 

4493如果消息给出的是市场插件自身某个文件(例如 `hooks/hooks.json`)的完整路径,则表示 Claude Code 跳过了该文件。当 Claude Code 无法确认该文件位于插件之内,或者对于[本地市场](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)中的插件,无法确认其位于该市场之内时,就会出现这种情况。消息会在以下所示的组件名称下报告这些文件:4555如果某条消息给出了市场插件自身某个文件(例如 `hooks/hooks.json`)的完整路径,则表示 Claude Code 跳过了该文件。当 Claude Code 无法确认该文件位于插件内部,或者对于[本地市场](https://code.claude.com/docs/zh-CN/plugins/loading.md#in-place-and-copied-plugins)中的插件,无法确认该文件位于其市场内部时,就会跳过该文件。该消息会在下列组件名称下报告这些文件:

4494 4556 

4495* `hooks/hooks.json`:`hooks`4557* `hooks/hooks.json`:`hooks`

4496* `monitors/monitors.json`:`monitors`4558* `monitors/monitors.json`:`monitors`

4497* `settings.json`:`settings`

4498* 插件根目录下的 `SKILL.md`:`skills`4559* 插件根目录下的 `SKILL.md`:`skills`

4499 4560 

4500例如,以下消息针对的是一个解析到插件及其本地市场之外的 `hooks/hooks.json`:4561例如,以下消息针对的是一个解析到插件及其本地市场之外的 `hooks/hooks.json`:


5481您打开了一个在后台服务关闭期间结束的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),而此后[会话记录清理](https://code.claude.com/docs/zh-CN/settings-reference.md#cleanupperioddays)已删除了其保存的对话,例如在机器关机数周之后。打开此类行通常会[恢复其已保存的对话](https://code.claude.com/docs/zh-CN/agent-view.md#sessions-show-as-failed-after-shutdown)。由于没有任何可恢复的内容,Claude Code 会拒绝,而不是在未经询问的情况下重新运行该会话的原始提示词:5542您打开了一个在后台服务关闭期间结束的[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md),而此后[会话记录清理](https://code.claude.com/docs/zh-CN/settings-reference.md#cleanupperioddays)已删除了其保存的对话,例如在机器关机数周之后。打开此类行通常会[恢复其已保存的对话](https://code.claude.com/docs/zh-CN/agent-view.md#sessions-show-as-failed-after-shutdown)。由于没有任何可恢复的内容,Claude Code 会拒绝,而不是在未经询问的情况下重新运行该会话的原始提示词:

5482 5543 

5483```text theme={null}5544```text theme={null}

5484This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` deletes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.5545This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` removes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.

5485```5546```

5486 5547 

5487`claude attach <id>` 会打印这段文本。在 agent view 中,页脚较短,并以 `ctrl+x deletes the row` 结尾。5548`claude attach <id>` 会打印这段文本。在 agent view 中,页脚较短,并以 `ctrl+x removes the row` 结尾。

5488 5549 

5489**解决方法:**5550**解决方法:**

5490 5551 


5503 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef5564 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef

5504```5565```

5505 5566 

5506当 Claude Code 无法汇总这些提交时,详情行会改为显示 `The worktree has unpushed commits`。在 [agent view](https://code.claude.com/docs/zh-CN/agent-view.md) 中,该会话的行会显示 `not deleted` 以及相同的原因。5567当 Claude Code 无法汇总这些提交时,详情行会改为显示 `The worktree has unpushed commits`。在 [agent view](https://code.claude.com/docs/zh-CN/agent-view.md) 中,该会话的行会显示 `not removed` 以及相同的原因。

5507 5568 

5508远程上的提交不会阻止删除。您的 `origin` 远程默认分支的本地副本上的提交也不会阻止删除,前提是该分支已在您的主检出(即仓库目录本身,而非某个 worktree)中检出。5569远程上的提交不会阻止删除。您的 `origin` 远程默认分支的本地副本上的提交也不会阻止删除,前提是该分支已在您的主检出(即仓库目录本身,而非某个 worktree)中检出。

5509 5570 


5780 5841 

5781这些错误来自启动 Claude Code 的程序,例如 IDE 扩展或 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 应用程序,而不是来自 Claude Code 本身。5842这些错误来自启动 Claude Code 的程序,例如 IDE 扩展或 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 应用程序,而不是来自 Claude Code 本身。

5782 5843 

5844### Subprocess initialization did not complete within 60000ms

5845 

5846此错误表示由 [VS Code 扩展](https://code.claude.com/docs/zh-CN/vs-code.md)或 Agent SDK 应用程序启动的 Claude Code 进程未能及时报告其已就绪。扩展或应用程序随后将其停止。在 VS Code 对话中,该错误以 `Claude Code did not finish starting` 开头,例如:

5847 

5848```text theme={null}

5849Claude Code did not finish starting: it did not answer in time. The output logs ("View output logs") show how far it got. Slow plugins, MCP servers, hooks, disks or network can each cause this.

5850```

5851 

5852在扩展的输出日志中、其登录界面上以及 Agent SDK 应用程序中,该错误的措辞有所不同。它以 `Subprocess initialization did not complete within` 和时间限制开头,然后给出 Claude Code 报告的内容,例如:

5853 

5854```text theme={null}

5855Subprocess initialization did not complete within 60000ms. Claude Code did not answer the initialize request and reported no SessionStart or Setup hook running. Slow plugins, MCP servers, hooks that Claude Code does not report, disks or network can each cause this.

5856```

5857 

5858**应该怎么做:**

5859 

5860* 要在 VS Code 中重试,请发送一条消息。如果错误是在您登录时出现的,请改为再次选择登录方式。

5861* 要查看 Claude Code 进行到了哪一步,请点击对话错误下方的 **View output logs**,或从命令面板运行 **Claude Code: Show Logs**。[报告问题](https://github.com/anthropics/claude-code/issues)时,请附上 `Subprocess initialization` 行前后的条目。

5862* 要检查您的网络,请参阅[网络配置](https://code.claude.com/docs/zh-CN/network-config.md)。如果消息提示您检查登录或身份验证,请参阅[登录和身份验证](https://code.claude.com/docs/zh-CN/troubleshoot-install.md#login-and-authentication)。

5863* 如果消息指出 [SessionStart](https://code.claude.com/docs/zh-CN/hooks.md#sessionstart) 或 [Setup](https://code.claude.com/docs/zh-CN/hooks.md#setup) hook 尚未完成,请[检查您的 hook 运行了多长时间](https://code.claude.com/docs/zh-CN/hooks.md#debug-hooks)。在 VS Code 中,Claude Code 报告这些 hook 正在运行的前 10 分钟不计入 60 秒限制。请让运行缓慢的 hook 更快完成、降低非异步 hook 的 [`timeout`](https://code.claude.com/docs/zh-CN/hooks#common-fields),或[移除该 hook](https://code.claude.com/docs/zh-CN/hooks.md#disable-or-remove-hooks)。

5864* 如果您的 Agent SDK 应用程序调用了 [`startup()`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#startup),请将 `initializeTimeoutMs` 设置得足以覆盖整个启动过程,或者不设置它,这样最多 10 分钟的已报告 hook 时间不会计入。

5865 

5866在 VS Code 扩展 v2.1.304 和 TypeScript Agent SDK v0.3.304 之前,所有 hook 时间都计入限制。使用默认限制时,消息包含 `Subprocess initialization did not complete within 60000ms — check authentication and network connectivity`。如果您看到该措辞,请更新扩展或 SDK。

5867 

5783### Claude Code 进程以代码 N 退出5868### Claude Code 进程以代码 N 退出

5784 5869 

5785底层 `claude` 进程以非零代码退出。仅凭退出代码无法说明失败的原因:真正的错误在于进程自身的输出,包装器会在捕获时附加该输出,否则将其保留在日志中。5870底层 `claude` 进程以非零代码退出。仅凭退出代码无法说明失败的原因:真正的错误在于进程自身的输出,包装器会在捕获时附加该输出,否则将其保留在日志中。

Details

117 <td>✗</td>117 <td>✗</td>

118 </tr>118 </tr>

119 119 

120 <tr>

121 <td>[Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md)</td>

122 <td>✓(实验性,[需满足要求](https://code.claude.com/docs/zh-CN/code-mode.md#requirements))</td>

123 <td>✓(实验性,[需满足要求](https://code.claude.com/docs/zh-CN/code-mode.md#requirements))</td>

124 <td>✗</td>

125 <td>✗</td>

126 <td>✗</td>

127 <td>✗</td>

128 </tr>

129 

120 <tr>130 <tr>

121 <td>[Cross-session messaging](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)</td>131 <td>[Cross-session messaging](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)</td>

122 <td>✓ <sup>[5](#fn5)</sup></td>132 <td>✓ <sup>[5](#fn5)</sup></td>


231 241 

232> [tab] Amazon Bedrock242> [tab] Amazon Bedrock

233>243>

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

235>245>

236> **部分支持:**246> **部分支持:**

237>247>


244 254 

245> [tab] Claude Platform on AWS255> [tab] Claude Platform on AWS

246>256>

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

248>258>

249> **Amazon Bedrock 不可用的地方可用:** [web search](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior),以及 Claude Code v2.1.300 或更高版本中的 [Advisor](https://code.claude.com/docs/zh-CN/advisor.md)。259> **Amazon Bedrock 不可用的地方可用:** [web search](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior),以及 Claude Code v2.1.300 或更高版本中的 [Advisor](https://code.claude.com/docs/zh-CN/advisor.md)。

250>260>


256 266 

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

258>268>

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

260>270>

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

262>272>


271 281 

272> [tab] Microsoft Foundry282> [tab] Microsoft Foundry

273>283>

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

275>285>

276> **部分支持:**286> **部分支持:**

277>287>

gateways.md +1 −1

Details

63* **客户端遥测**:当会话登录到 Claude 应用网关时,Claude Code 会禁用其 Anthropic 绑定的客户端分析。要在登录前启动分析也保持关闭,请在每个设备上的 [客户端托管设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#client-side-managed-settings) 中提供 [`DISABLE_TELEMETRY`](https://code.claude.com/docs/zh-CN/managed-settings#turn-telemetry-off-for-your-organization)。63* **客户端遥测**:当会话登录到 Claude 应用网关时,Claude Code 会禁用其 Anthropic 绑定的客户端分析。要在登录前启动分析也保持关闭,请在每个设备上的 [客户端托管设置](https://code.claude.com/docs/zh-CN/claude-apps-gateway-config.md#client-side-managed-settings) 中提供 [`DISABLE_TELEMETRY`](https://code.claude.com/docs/zh-CN/managed-settings#turn-telemetry-off-for-your-organization)。

64* **其他网关上的客户端遥测**:Claude Code 是否发送可选的客户端遥测流取决于您的提供商,[遥测默认值表](https://code.claude.com/docs/zh-CN/data-usage.md#default-behaviors-by-api-provider) 涵盖每种情况。64* **其他网关上的客户端遥测**:Claude Code 是否发送可选的客户端遥测流取决于您的提供商,[遥测默认值表](https://code.claude.com/docs/zh-CN/data-usage.md#default-behaviors-by-api-provider) 涵盖每种情况。

65* **遥测目标**:Claude Code 发送网关会话遥测的位置取决于会话如何登录,[开发人员上强制执行的内容](https://code.claude.com/docs/zh-CN/claude-apps-gateway#whats-enforced-on-developers) 说明每种会话的导出去向。65* **遥测目标**:Claude Code 发送网关会话遥测的位置取决于会话如何登录,[开发人员上强制执行的内容](https://code.claude.com/docs/zh-CN/claude-apps-gateway#whats-enforced-on-developers) 说明每种会话的导出去向。

66* **企业 HTTP 代理**:`HTTPS_PROXY` 位于 Claude Code 和它与之通信的每个服务器之间,包括网关。如果您的网络需要一个,[配置代理](https://code.claude.com/docs/zh-CN/network-config.md) 以及网关。对于您托管的 Claude 应用网关,[登录检查代理主机也在私有网络上](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites);如果不是,将网关主机添加到 `NO_PROXY`,以便 CLI 直接连接到它。66* **企业 HTTP 代理**:Claude Code 通过 `HTTPS_PROXY` 中的代理发送其请求,包括发往网关的请求。如果您的网络需要代理,请[配置代理](https://code.claude.com/docs/zh-CN/network-config.md)。如果该代理适用于您托管的 Claude 应用网关,[登录](https://code.claude.com/docs/zh-CN/claude-apps-gateway#prerequisites)要求代理的主机名解析为私有地址,或者要求将网关主机添加到 `NO_PROXY` 中。

67 67 

68## Next steps68## Next steps

69 69 

Details

129| Administration | 读取 |129| Administration | 读取 |

130| Checks | 读写 |130| Checks | 读写 |

131| Contents | 读写 |131| Contents | 读写 |

132| Dependabot alerts | 读取 |

132| Discussions | 读写 |133| Discussions | 读写 |

133| Issues | 读写 |134| Issues | 读写 |

134| Members | 读取 |135| Members | 读取 |

Details

83>83>

84> 创建一个 Microsoft Entra 应用程序,其中包含您的存储库的联合凭证,遵循 [Microsoft 的 GitHub Actions 身份验证指南](https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure-openid-connect):84> 创建一个 Microsoft Entra 应用程序,其中包含您的存储库的联合凭证,遵循 [Microsoft 的 GitHub Actions 身份验证指南](https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure-openid-connect):

85>85>

86> * 注册一个 Microsoft Entra 应用程序,并添加一个联合身份凭证,该凭证信任 GitHub 向您的存储库颁发的令牌。用户分配的托管身份可以代替应用程序。两者都有您在下面记下的客户端 ID86> * 注册一个 Microsoft Entra 应用程序,并添加一个联合身份凭据,该凭据信任 GitHub 向您的仓库颁发的令牌。用户分配的托管身份可以代替应用程序。两者都有您在下面记下的客户端 ID

87> * 在您的 Foundry 资源上为应用程序分配 `Azure AI User` 角色。有关更窄的自定义角色,请参阅 [Azure RBAC 配置](https://code.claude.com/docs/zh-CN/microsoft-foundry.md#azure-rbac-configuration)87> * 在您的 Foundry 资源上为应用程序分配 `Foundry User` 角色。有关另一个内置角色和自定义角色,请参阅 [Azure RBAC 配置](https://code.claude.com/docs/zh-CN/microsoft-foundry.md#azure-rbac-configuration)

88>88>

89> 记下应用程序的客户端 ID、您的租户 ID 和您的订阅 ID。您将在下一步中将它们添加为密钥。89> 记下应用程序的客户端 ID、您的租户 ID 和您的订阅 ID。您将在下一步中将它们添加为密钥。

90 90 

Details

228 228 

229### 当模型在会话中途被禁用时229### 当模型在会话中途被禁用时

230 230 

231如果您的项目失去对会话正在运行的模型的访问权限,例如因为管理员在 [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) 中禁用了它,Claude Code 会将会话切换到另一个模型,而不是让每个请求都失败,并显示 `Switched to <fallback> because <model> is not available`。它尝试与启动回退相同的模型:首先尝试同一层级的早期版本,对于没有可用 Opus 版本的 Opus 会话,则使用默认 Sonnet 模型。231当 Agent Platform 以会话模型在您的项目或区域中不可用为由拒绝该模型时,Claude Code 会将您的会话切换到另一个模型,您可以继续工作。您会看到一条以 `Switched to <fallback> because <model> is not available` 开头的消息。例如,当管理员在 [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) 中禁用该模型,或者该模型在您的区域中不提供服务时,就会发生这种情况。

232 232 

233切换仅适用于您未固定的层级,这与启动回退的条件相同。在您选择的特定版本上的会话保持其模型,没有回退模型链,请求会失败。在 [auto mode](https://code.claude.com/docs/zh-CN/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry) 中,Claude Code 仅切换到 auto mode 在 Agent Platform 上支持的模型。如果这些模型都不可用,请求会失败。233如果您配置了[备用模型链](https://code.claude.com/docs/zh-CN/model-config.md#fallback-model-chains),Claude Code 会改为切换到您配置的备用模型。如果没有配置模型链,请求会在以下情况下失败:

234 234 

235您配置的[回退模型链](https://code.claude.com/docs/zh-CN/model-config.md#fallback-model-chains)会替换层级切换:在这些拒绝上,Claude Code 会切换到您配置的回退。要使被拒绝的请求失败而不是切换,请设置 [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/zh-CN/env-vars)。您配置的回退链仍会在这些拒绝上切换;如果您希望每个被拒绝的请求都失败,也要移除该链。235* 您的会话使用的是固定模型或您选择的特定版本

236* [Claude Code 尝试的模型](#startup-model-checks)均不可用。在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry)下,Claude Code 仅切换到自动模式在 Agent Platform 上支持的模型。

237 

238要继续工作,请在会话中运行 `/model`,并在您的项目和区域中可用的模型上按 `s`,这样不会更改您的默认模型。

239 

240要让被拒绝的请求失败而不是切换,请设置 [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/zh-CN/env-vars)。如果您配置了备用模型链,也请将其移除,因为 Claude Code 仍会切换到该备用模型。

236 241 

237## IAM 配置242## IAM 配置

238 243 

hooks.md +22 −7

Details

257管理员可以在 [托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md) 中使用 [`allowManagedHooksOnly`](https://code.claude.com/docs/zh-CN/settings-reference#allowmanagedhooksonly) 来限制哪些 hooks 运行:257管理员可以在 [托管设置](https://code.claude.com/docs/zh-CN/managed-settings.md) 中使用 [`allowManagedHooksOnly`](https://code.claude.com/docs/zh-CN/settings-reference#allowmanagedhooksonly) 来限制哪些 hooks 运行:

258 258 

259* 您的用户、项目、本地和插件 hooks 被阻止。在托管设置 `enabledPlugins` 中强制启用的插件中的 Hooks 除外259* 您的用户、项目、本地和插件 hooks 被阻止。在托管设置 `enabledPlugins` 中强制启用的插件中的 Hooks 除外

260* Claude Code 还将您的 [`statusLine`](https://code.claude.com/docs/zh-CN/statusline)、[`fileSuggestion`](https://code.claude.com/docs/zh-CN/settings-reference#filesuggestion) 和 [`subagentStatusLine`](https://code.claude.com/docs/zh-CN/statusline#subagent-status-lines) 设置缩小到托管设置260* Claude Code 还将您的 [`statusLine`](https://code.claude.com/docs/zh-CN/statusline) 和 [`fileSuggestion`](https://code.claude.com/docs/zh-CN/settings-reference#filesuggestion) 设置缩小到托管设置

261* Claude Code 还禁用具有 [`command` 源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括在托管设置 `enabledPlugins` 中强制启用的插件,除非 [`disableCommandPluginSources`](https://code.claude.com/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`。`command` 源需要 Claude Code v2.1.229 或更高版本261* Claude Code 还禁用具有 [`command` 源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference#command-plugin-source) 的插件,包括在托管设置 `enabledPlugins` 中强制启用的插件,除非 [`disableCommandPluginSources`](https://code.claude.com/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`。`command` 源需要 Claude Code v2.1.229 或更高版本

262* Claude Code 还阻止市场 [`headersHelper` 命令](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](https://code.claude.com/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`,但托管设置本身声明的市场除外262* Claude Code 还阻止市场 [`headersHelper` 命令](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非 [`disableCommandPluginSources`](https://code.claude.com/docs/zh-CN/settings-reference#disablecommandpluginsources) 明确设置为 `false`,但托管设置本身声明的市场除外

263 263 


505| `url` | 是 | 发送 POST 请求的 URL |505| `url` | 是 | 发送 POST 请求的 URL |

506| `headers` | 否 | 其他 HTTP 标头作为键值对。值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 中列出的变量 |506| `headers` | 否 | 其他 HTTP 标头作为键值对。值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 中列出的变量 |

507| `allowedEnvVars` | 否 | 可能被插值到标头值中的环境变量名称列表。对未列出变量的引用被替换为空字符串。任何环境变量插值都需要 |507| `allowedEnvVars` | 否 | 可能被插值到标头值中的环境变量名称列表。对未列出变量的引用被替换为空字符串。任何环境变量插值都需要 |

508| `onFailure` | 否 | hook 失败时对该操作的处理方式:`"continue"`(默认值)或 `"block"`。请参阅 [在 hook 失败时阻止操作](#block-the-action-when-a-hook-fails)。需要 Claude Code v2.1.295 或更高版本 |508| `onFailure` | 否 | hook 失败时触发该 hook 的操作是否继续进行:`"continue"` 或 `"block"`。有关 `"block"` 以及不设置该字段时的行为,请参阅 [在 hook 失败时阻止操作](#block-the-action-when-a-hook-fails)。需要 Claude Code v2.1.295 或更高版本 |

509 509 

510Claude Code 将 hook 的 [JSON 输入](#hook-input-and-output) 作为 POST 请求体发送,`Content-Type: application/json`。响应体使用与命令 hooks 相同的 [JSON 输出格式](#json-output)。510Claude Code 将 hook 的 [JSON 输入](#hook-input-and-output) 作为 POST 请求体发送,`Content-Type: application/json`。响应体使用与命令 hooks 相同的 [JSON 输出格式](#json-output)。

511 511 


901 901 

902在 `PreToolUse` 上,超时的 `command`、`http` 或 `mcp_tool` hook 不阻止工具调用,但[失败时会阻止操作的 hook](#block-the-action-when-a-hook-fails) 除外。调用通过正常[权限流程](https://code.claude.com/docs/zh-CN/permissions.md)继续,因此不要指望停滞的 hook 充当关卡。要在 `command` 或 `http` hook 超时时阻止调用,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。超过其超时时间的 [Agent SDK 回调 hook](https://code.claude.com/docs/zh-CN/agent-sdk/hooks.md) 会[阻止工具调用](#pretooluse)。902在 `PreToolUse` 上,超时的 `command`、`http` 或 `mcp_tool` hook 不阻止工具调用,但[失败时会阻止操作的 hook](#block-the-action-when-a-hook-fails) 除外。调用通过正常[权限流程](https://code.claude.com/docs/zh-CN/permissions.md)继续,因此不要指望停滞的 hook 充当关卡。要在 `command` 或 `http` hook 超时时阻止调用,请设置 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。超过其超时时间的 [Agent SDK 回调 hook](https://code.claude.com/docs/zh-CN/agent-sdk/hooks.md) 会[阻止工具调用](#pretooluse)。

903 903 

904> [!NOTE]

905>

906> 如果您使用 Code Mode,`PreToolUse` 上的超时处理方式有所不同。请参阅[被 hook 拒绝的工具调用](https://code.claude.com/docs/zh-CN/code-mode.md#tool-call-refused-by-a-hook)。

907 

904#### 启动后台进程的 hook908#### 启动后台进程的 hook

905 909 

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


981* **`Stop`、`SubagentStop`、`TaskCompleted` 和 `TeammateIdle` hook**:这些事件上的退出码 2 会让 Claude 回去继续工作,而 Claude 无法修复无法运行的 hook985* **`Stop`、`SubagentStop`、`TaskCompleted` 和 `TeammateIdle` hook**:这些事件上的退出码 2 会让 Claude 回去继续工作,而 Claude 无法修复无法运行的 hook

982* **后台命令 hook**:设置了 [`async` 或 `asyncRewake`](#run-hooks-in-the-background) 的命令 hook986* **后台命令 hook**:设置了 [`async` 或 `asyncRewake`](#run-hooks-in-the-background) 的命令 hook

983 987 

988> [!NOTE]

989>

990> 如果您使用 Code Mode,`PreToolUse` 上的失败处理方式有所不同。请参阅[被 hook 拒绝的工具调用](https://code.claude.com/docs/zh-CN/code-mode.md#tool-call-refused-by-a-hook)。

991 

984#### 未安装 Git Bash 的 Windows 上失败的 hook992#### 未安装 Git Bash 的 Windows 上失败的 hook

985 993 

986如果被阻止的工具调用的错误包含以下文本,则说明某个 `PreToolUse` 或 `PermissionRequest` 命令 hook 失败或超时,并阻止了该调用:994如果被阻止的工具调用的错误包含以下文本,则说明某个 `PreToolUse` 或 `PermissionRequest` 命令 hook 失败或超时,并阻止了该调用:


1512* [会话作用域的定时任务](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)触发,包括 `/loop` 迭代1520* [会话作用域的定时任务](https://code.claude.com/docs/zh-CN/scheduled-tasks.md)触发,包括 `/loop` 迭代

1513* [后台子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)向启动它的会话回报时1521* [后台子代理](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)向启动它的会话回报时

1514* [另一个会话向](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)您的主对话发送消息时1522* [另一个会话向](https://code.claude.com/docs/zh-CN/cross-session-messaging.md)您的主对话发送消息时

1523* 在 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md#code-output-withheld-by-a-hook) 会话中,当代码可以在后台运行时,Claude 代码的输出(适用于 `command`、`http` 和 `mcp_tool` hook)

1515 1524 

1516对于 `command`、`http` 和 `mcp_tool` 类型,`UserPromptSubmit` hook 的默认超时时间为 30 秒,短于这些类型在大多数其他事件上 600 秒的默认值。由于此 hook 在每个提示词之前运行,并在完成之前阻塞模型处理,卡住的 hook 会使会话停滞。如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。1525对于 `command`、`http` 和 `mcp_tool` 类型,`UserPromptSubmit` hook 的默认超时时间为 30 秒,短于这些类型在大多数其他事件上 600 秒的默认值。由于此 hook 在每个提示词之前运行,并在完成之前阻塞模型处理,卡住的 hook 会使会话停滞。如果您的 hook 需要更多时间,请在 hook 条目中设置 `timeout` 字段。

1517 1526 


1560| 字段 | 说明 |1569| 字段 | 说明 |

1561| :- | :- |1570| :- | :- |

1562| `decision` | `"block"` 会在提示词传达给 Claude 之前将其拦下。省略则允许提示词继续 |1571| `decision` | `"block"` 会在提示词传达给 Claude 之前将其拦下。省略则允许提示词继续 |

1563| `reason` | 当 `decision` 为 `"block"` 时显示给用户。不会添加到上下文中 |1572| `reason` | 当 `decision` 为 `"block"` 时向用户显示。不会添加到上下文中,除非 hook 阻止的是 [Code Mode 输出](https://code.claude.com/docs/zh-CN/code-mode.md#code-output-withheld-by-a-hook) |

1564| `additionalContext` | 与所提交的提示词一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |1573| `additionalContext` | 与所提交的提示词一起添加到 Claude 上下文中的字符串。请参阅[为 Claude 添加上下文](#add-context-for-claude) |

1565| `sessionTitle` | 设置会话标题。用于根据提示词内容自动命名会话 |1574| `sessionTitle` | 设置会话标题。用于根据提示词内容自动命名会话 |

1566| `suppressOriginalPrompt` | 如果在 hook 阻止提示词时为 `true`,则在阻止消息中省略提示词文本。请参阅[被阻止的提示词会留下什么](#what-a-blocked-prompt-leaves-behind) |1575| `suppressOriginalPrompt` | 如果在 hook 阻止提示词时为 `true`,则在阻止消息中省略提示词文本。请参阅[被阻止的提示词会留下什么](#what-a-blocked-prompt-leaves-behind) |

1567 1576 

1568通过以退出码 2 退出来阻止的 hook,其处理方式与 `reason` 相同:阻止消息会向用户显示 stderr 文本,且不会添加到上下文中。1577如果您的 hook 通过以退出码 2 退出来阻止,其 stderr 文本的处理方式与 `reason` 相同。

1569 1578 

1570```json theme={null}1579```json theme={null}

1571{1580{


2999 3008 

3000在会话期间配置文件发生更改时运行。可用于审计设置更改、强制执行安全策略,或阻止对配置文件的未授权修改。3009在会话期间配置文件发生更改时运行。可用于审计设置更改、强制执行安全策略,或阻止对配置文件的未授权修改。

3001 3010 

3002当设置文件、托管策略文件或 skill 文件发生更改时,Claude Code 会运行 ConfigChange hook。对于托管策略,仅当 `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改时才会运行。Claude Code 在应用[服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)以及 macOS 托管偏好设置或 Windows 注册表策略的更改时不会运行这些 hook。在启用了 [`wslInheritsWindowsSettings`](https://code.claude.com/docs/zh-CN/settings-reference#wslinheritswindowssettings) 的 WSL 上,它在策略轮询时应用已更改的 Windows 端托管设置文件,同样不会运行这些 hook。3011当设置文件、托管策略文件或 skill 文件发生变更时,Claude Code 会运行 ConfigChange hook。对于托管策略,仅当 `managed-settings.json` 或 `managed-settings.d/` 中的文件发生变更时才会运行。

3003 3012 

3004匹配器按配置来源进行过滤:3013匹配器按配置来源进行过滤:

3005 3014 


3011| `policy_settings` | `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改 |3020| `policy_settings` | `managed-settings.json` 或 `managed-settings.d/` 中的文件发生更改 |

3012| `skills` | `.claude/skills/` 中的 skill 文件发生更改 |3021| `skills` | `.claude/skills/` 中的 skill 文件发生更改 |

3013 3022 

3014此示例记录所有配置更改,用于安全审计:3023以下这类更改无需运行 hook 即可生效:

3024 

3025* 通过 **Yes, and don't ask again**、`/permissions` 或 `/model` 保存的规则和设置,仅限于保存它们的那个会话。如果另一个打开的会话加载了同一文件,hook 会在该会话中运行。

3026* [服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md)、macOS 托管偏好设置或 Windows 注册表策略的更新

3027* 在启用了 [`wslInheritsWindowsSettings`](https://code.claude.com/docs/zh-CN/settings-reference#wslinheritswindowssettings) 的 WSL 上,Windows 端托管设置文件发生的更改,Claude Code 会在其策略轮询中获取该更改

3028 

3029以下示例记录配置更改以进行安全审计:

3015 3030 

3016```json theme={null}3031```json theme={null}

3017{3032{


3334 "hooks": [3349 "hooks": [

3335 {3350 {

3336 "type": "command",3351 "type": "command",

3337 "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"3352 "command": "bash -c 'p=$(jq -er .worktree_path) && rm -rf -- \"$p\"'"

3338 }3353 }

3339 ]3354 ]

3340 }3355 }

hooks-guide.md +4 −4

Details

50 "PostToolUse": [50 "PostToolUse": [

51 {51 {

52 "matcher": "Edit|Write",52 "matcher": "Edit|Write",

53 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }]53 "hooks": [{ "type": "command", "command": "f=$(jq -r '.tool_input.file_path') && npx prettier --write --ignore-unknown \"$f\"" }]

54 }54 }

55 ],55 ],

56 "Notification": [56 "Notification": [


221 "hooks": [221 "hooks": [

222 {222 {

223 "type": "command",223 "type": "command",

224 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"224 "command": "f=$(jq -r '.tool_input.file_path') && npx prettier --write --ignore-unknown \"$f\""

225 }225 }

226 ]226 ]

227 }227 }


336 336 

337跟踪会话期间设置文件或 skill 文件何时发生变更。当外部进程或编辑器修改配置文件时,会触发 `ConfigChange` 事件,因此您可以记录变更以满足合规要求,或阻止未经授权的修改。337跟踪会话期间设置文件或 skill 文件何时发生变更。当外部进程或编辑器修改配置文件时,会触发 `ConfigChange` 事件,因此您可以记录变更以满足合规要求,或阻止未经授权的修改。

338 338 

339此示例将每次变更追加到审计日志中。将以下内容添加到 `~/.claude/settings.json`:339此示例将每个事件追加到审计日志中。将以下内容添加到 `~/.claude/settings.json`:

340 340 

341```json theme={null}341```json theme={null}

342{342{


925您的端点使用与命令 hook 相同的[输出格式](https://code.claude.com/docs/zh-CN/hooks.md#json-output)返回 JSON 响应体,Claude Code 还会检查响应状态:925您的端点使用与命令 hook 相同的[输出格式](https://code.claude.com/docs/zh-CN/hooks.md#json-output)返回 JSON 响应体,Claude Code 还会检查响应状态:

926 926 

927* **2xx 状态**:要阻止工具调用,请在响应体中返回相应的 `hookSpecificOutput` 字段。927* **2xx 状态**:要阻止工具调用,请在响应体中返回相应的 `hookSpecificOutput` 字段。

928* **任何其他状态,或请求失败**:Claude Code 会报告[非阻塞错误](https://code.claude.com/docs/zh-CN/hooks.md#exit-code-output)并允许操作继续。要让失败的端点阻止该操作,请在 hook 上设置 [`onFailure: "block"`](https://code.claude.com/docs/zh-CN/hooks#block-the-action-when-a-hook-fails)。928* **任何其他状态,或请求失败**:Claude Code 会报告[非阻塞错误](https://code.claude.com/docs/zh-CN/hooks.md#exit-code-output)并允许操作继续,除非该 hook 属于[失败时会阻止操作](https://code.claude.com/docs/zh-CN/hooks.md#block-the-action-when-a-hook-fails)的 hook。要让失败的端点阻止该操作,请在 hook 上设置 [`onFailure: "block"`](https://code.claude.com/docs/zh-CN/hooks#block-the-action-when-a-hook-fails)。

929 929 

930标头值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 数组中列出的变量;所有其他 `$VAR` 引用保持为空。930标头值支持使用 `$VAR_NAME` 或 `${VAR_NAME}` 语法的环境变量插值。仅解析 `allowedEnvVars` 数组中列出的变量;所有其他 `$VAR` 引用保持为空。

931 931 

Details

36| `Esc` | 中断 Claude 或关闭对话框 | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止所做的工作。如果您有[排队的消息](#queue-messages-while-claude-works),Claude Code 会在下一步发送它们。当对话框打开时,`Esc` 会关闭对话框。当选中页脚项目时,例如提示下方的[子代理面板](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)中的一行,`Esc` 会[取消选择它](https://code.claude.com/docs/zh-CN/keybindings.md#footer-actions)而不是中断。在权限提示上,`Esc` 会拒绝该操作,与[**否**不带注释](https://code.claude.com/docs/zh-CN/permissions.md#add-a-comment-when-you-answer-a-permission-prompt)相同 |36| `Esc` | 中断 Claude 或关闭对话框 | 停止当前响应或工具调用中途,以便您可以重定向。Claude 保留迄今为止所做的工作。如果您有[排队的消息](#queue-messages-while-claude-works),Claude Code 会在下一步发送它们。当对话框打开时,`Esc` 会关闭对话框。当选中页脚项目时,例如提示下方的[子代理面板](https://code.claude.com/docs/zh-CN/sub-agents.md#run-subagents-in-foreground-or-background)中的一行,`Esc` 会[取消选择它](https://code.claude.com/docs/zh-CN/keybindings.md#footer-actions)而不是中断。在权限提示上,`Esc` 会拒绝该操作,与[**否**不带注释](https://code.claude.com/docs/zh-CN/permissions.md#add-a-comment-when-you-answer-a-permission-prompt)相同 |

37| `Esc` + `Esc` | 清除输入草稿或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](https://code.claude.com/docs/zh-CN/checkpointing.md)以从之前的某个点恢复或总结代码和对话 |37| `Esc` + `Esc` | 清除输入草稿或回退 | 当提示输入包含文本时,双 `Esc` 会清除它并将草稿保存到历史记录,以便 `Up` 可以调用它。当输入为空时,双 `Esc` 会打开[回退菜单](https://code.claude.com/docs/zh-CN/checkpointing.md)以从之前的某个点恢复或总结代码和对话 |

38| `Ctrl+Enter` 或 `Ctrl+X Ctrl+S` | 立即发送排队的消息 | 发送您的[排队的消息](#queue-messages-while-claude-works)和您的草稿与它们一起立即发出。[Claude Code 何时发送您排队的内容](#when-claude-code-sends-what-you-queued)涵盖了 Claude 正在处理的轮次会发生什么。在[shell 模式](#shell-mode-with-prefix)中,该键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达;`Ctrl+X Ctrl+S` 在任何终端中都有效。需要 Claude Code v2.1.275 或更高版本 |38| `Ctrl+Enter` 或 `Ctrl+X Ctrl+S` | 立即发送排队的消息 | 发送您的[排队的消息](#queue-messages-while-claude-works)和您的草稿与它们一起立即发出。[Claude Code 何时发送您排队的内容](#when-claude-code-sends-what-you-queued)涵盖了 Claude 正在处理的轮次会发生什么。在[shell 模式](#shell-mode-with-prefix)中,该键仅排队您的命令。在不报告扩展键的终端中,`Ctrl+Enter` 作为普通 `Enter` 到达;`Ctrl+X Ctrl+S` 在任何终端中都有效。需要 Claude Code v2.1.275 或更高版本 |

39| `Shift+Tab` 或在 Node 或 Bun 运行时不启用 VT 输入模式时在 Windows 上使用 `Alt+M` | 循环权限模式 | 循环通过 `default`(在模式指示器中标记为 Manual)、`acceptEdits`、`plan` 和(如果可用)`bypassPermissions` 然后 `auto`。从 `auto`,第一次按下切换到 `default`。请参阅[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)。在文件权限提示上,相同的键会关闭打开的[注释字段](https://code.claude.com/docs/zh-CN/permissions.md#add-a-comment-when-you-answer-a-permission-prompt)。如果没有字段打开,它会选择允许该操作在会话其余部分的选项,当提示提供该选项时 |39| `Shift+Tab` 或在 Node 或 Bun 运行时不启用 VT 输入模式时在 Windows 上使用 `Alt+M` | 循环权限模式 | 循环切换 `default`(在模式指示器中标记为 Manual)、`acceptEdits` 和 `plan`,然后在可用时切换到 `bypassPermissions` 和 `auto`。请参阅[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)。在文件权限提示上,相同的键会关闭打开的[注释字段](https://code.claude.com/docs/zh-CN/permissions.md#add-a-comment-when-you-answer-a-permission-prompt)。如果没有字段打开,当提示提供该选项时,它会选择在会话剩余时间内允许该操作的选项。在计划批准提示上,它会批准该计划 |

40| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |40| `Option+P`(macOS)或 `Alt+P`(Windows/Linux) | 切换模型 | 在不清除提示的情况下切换模型 |

41| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。对 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 模型无效,它们始终使用扩展思考。在 macOS 上无需配置 Option 为 Meta 即可工作 |41| `Option+T`(macOS)或 `Alt+T`(Windows/Linux) | 切换扩展思考 | 启用或禁用扩展思考模式。对 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 模型无效,它们始终使用扩展思考。在 macOS 上无需配置 Option 为 Meta 即可工作 |

42| `Option+O`(macOS)或 `Alt+O`(Windows/Linux) | 切换快速模式 | 启用或禁用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md) |42| `Option+O`(macOS)或 `Alt+O`(Windows/Linux) | 切换快速模式 | 启用或禁用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md) |


81| :- | :- | :- |81| :- | :- | :- |

82| 快速转义 | `\` + `Enter` | 在所有终端中工作 |82| 快速转义 | `\` + `Enter` | 在所有终端中工作 |

83| Option 键 | `Option+Enter` | 在 macOS 上启用[Option 作为 Meta](https://code.claude.com/docs/zh-CN/terminal-config.md#enable-option-key-shortcuts-on-macos)后 |83| Option 键 | `Option+Enter` | 在 macOS 上启用[Option 作为 Meta](https://code.claude.com/docs/zh-CN/terminal-config.md#enable-option-key-shortcuts-on-macos)后 |

84| Shift+Enter | `Shift+Enter` | 在 iTerm2、WezTerm、Ghostty、Kitty、Warp、Apple Terminal、Windows Terminal 中原生支持。对于其他终端,请参阅[输入多行提示](https://code.claude.com/docs/zh-CN/terminal-config.md#enter-multiline-prompts) |84| Shift+Enter | `Shift+Enter` | 在 iTerm2、WezTerm、Ghostty、Kitty、Warp、Windows Terminal 中原生支持。对于其他终端,请参阅[输入多行提示](https://code.claude.com/docs/zh-CN/terminal-config.md#enter-multiline-prompts) |

85| 控制序列 | `Ctrl+J` | 在任何终端中无需配置即可工作 |85| 控制序列 | `Ctrl+J` | 在任何终端中无需配置即可工作 |

86| 粘贴模式 | 直接粘贴 | 对于代码块、日志 |86| 粘贴模式 | 直接粘贴 | 对于代码块、日志 |

87 87 


137 137 

138通过 `/config` → Editor mode 启用 vim 风格编辑。138通过 `/config` → Editor mode 启用 vim 风格编辑。

139 139 

140Claude Code 在你使用 `Ctrl+O` 切换[文字记录查看器](#transcript-viewer)或打开和关闭面板(如 `/config`)时保持你的 vim 模式和光标位置。如果你在 NORMAL 模式下离开提示符,当你返回时它仍然处于 NORMAL 模式,光标位置与你离开时相同。

141 

142### 模式切换140### 模式切换

143 141 

144| 命令 | 操作 | 来自模式 |142| 命令 | 操作 | 来自模式 |


302 * 按 `Ctrl+C` 取消并恢复你的原始输入300 * 按 `Ctrl+C` 取消并恢复你的原始输入

303 * 在空搜索上按 `Backspace` 取消301 * 在空搜索上按 `Backspace` 取消

304 302 

305接受匹配项或取消搜索立即生效,即使 Claude Code 仍在加载历史记录。

306 

307如果您只记得之前某个提示词中粘贴过的一段较长内容(例如错误日志),要找到该提示词,请按 `Ctrl+R` 并输入该粘贴内容中的某个词。需要 Claude Code v2.1.314 或更高版本。303如果您只记得之前某个提示词中粘贴过的一段较长内容(例如错误日志),要找到该提示词,请按 `Ctrl+R` 并输入该粘贴内容中的某个词。需要 Claude Code v2.1.314 或更高版本。

308 304 

309## 后台 Bash 命令305## 后台 Bash 命令


600 596 

601### Claude Code 加下划线的内容597### Claude Code 加下划线的内容

602 598 

603在您暂停输入后不久,Claude Code 会为字典不知道的单词加下划线。它会将您仍在输入的单词单独留下,直到您越过它,并且它永远不会更改您的文本。它也会跳过看起来像代码的文本:599在您暂停输入后不久,Claude Code 会为字典不知道的单词加下划线。它会将您仍在输入的单词单独留下,直到您越过它。它也会跳过看起来像代码的文本:

604 600 

605* 命令,例如 `/help`、`@` 提及、URL、文件路径和标志,例如 `--verbose`601* 命令,例如 `/help`、`@` 提及、URL、文件路径和标志,例如 `--verbose`

606* 包含数字、下划线或第一个字母后的大写字母的单词,以及反引号中的文本602* 包含数字、下划线或第一个字母后的大写字母的单词,以及反引号中的文本

keybindings.md +7 −2

Details

581 581 

582Claude Code 在 `ctrl+x` 前缀上按上下文绑定以下默认和弦:582Claude Code 在 `ctrl+x` 前缀上按上下文绑定以下默认和弦:

583 583 

584* `Chat`:`ctrl+x ctrl+k`、`ctrl+x ctrl+e`、`ctrl+x enter`、`ctrl+x ctrl+a`、`ctrl+x ctrl+s` 和 `ctrl+x tab`584* `Chat`:`ctrl+x ctrl+k`、`ctrl+x ctrl+e`、`ctrl+x enter`、`ctrl+x ctrl+a`、`ctrl+x ctrl+s`、`ctrl+x tab`、`ctrl+x ctrl+=`、`ctrl+x ctrl+-`、`ctrl+x ctrl+_`、`ctrl+x =` 和 `ctrl+x -`

585* `Task`:`ctrl+x ctrl+b`585* `Task`:`ctrl+x ctrl+b`

586* `DiffPanel`:`ctrl+x b`586* `DiffPanel`:`ctrl+x b`

587* `Pane`:`ctrl+x left`、`ctrl+x right`、`ctrl+x up`、`ctrl+x down` 和 `ctrl+x x`587* `Pane`:`ctrl+x left`、`ctrl+x right`、`ctrl+x up`、`ctrl+x down` 和 `ctrl+x x`


631 "ctrl+x ctrl+a": null,631 "ctrl+x ctrl+a": null,

632 "ctrl+x ctrl+s": null,632 "ctrl+x ctrl+s": null,

633 "ctrl+x tab": null,633 "ctrl+x tab": null,

634 "ctrl+x ctrl+=": null,

635 "ctrl+x ctrl+-": null,

636 "ctrl+x ctrl+_": null,

637 "ctrl+x =": null,

638 "ctrl+x -": null,

634 "ctrl+x": "chat:newline"639 "ctrl+x": "chat:newline"

635 }640 }

636 }641 }


716Claude Code 验证您的快捷键并向调试日志写入以下警告:721Claude Code 验证您的快捷键并向调试日志写入以下警告:

717 722 

718* 解析错误(无效的 JSON 或结构)723* 解析错误(无效的 JSON 或结构)

719* 拼写错误的修饰符,例如 `ctl+k`。Claude Code 会删除它无法识别的部分,并将绑定应用于剩余的按键,在此示例中为 `k`。724* 拼写错误的修饰符,例如 `ctl+k`。Claude Code 会忽略整个绑定。请更正该修饰符,在此示例中应更正为 `ctrl+k`。

720* 按键字符串中 `+` 旁边有空格,例如 `ctrl+ k`。Claude Code 会将该字符串解读为由 `ctrl+` 后跟 `k` 组成的[组合键序列](#chords)。没有任何按键能单独匹配 `ctrl+`,因此该绑定永远不会触发。请删除该空格。725* 按键字符串中 `+` 旁边有空格,例如 `ctrl+ k`。Claude Code 会将该字符串解读为由 `ctrl+` 后跟 `k` 组成的[组合键序列](#chords)。没有任何按键能单独匹配 `ctrl+`,因此该绑定永远不会触发。请删除该空格。

721* 无效的上下文名称726* 无效的上下文名称

722* 无效的操作值,例如不是字符串或 `null` 的操作727* 无效的操作值,例如不是字符串或 `null` 的操作

llm-gateway.md +4 −0

Details

43 43 

44要使通过 `ANTHROPIC_BASE_URL` 访问的网关成为托管机器唯一可以使用的目标,请在同一托管设置文件中将 [`allowedProviders`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders) 设置为 `["customEndpoint"]`,并将网关的 `ANTHROPIC_BASE_URL` 放在该文件的 `env` 块中。Claude Code 随后会拒绝指向其他任何地方的会话,包括直接指向 Anthropic 或开发人员自己的代理,并仅接受您在那里设置的值的 `ANTHROPIC_BASE_URL`。对于通过提供商特定端点变量(如 `ANTHROPIC_BEDROCK_BASE_URL`)访问的网关,`allowedProviders` 条目指定要固定的变量。需要 Claude Code v2.1.285 或更高版本。44要使通过 `ANTHROPIC_BASE_URL` 访问的网关成为托管机器唯一可以使用的目标,请在同一托管设置文件中将 [`allowedProviders`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders) 设置为 `["customEndpoint"]`,并将网关的 `ANTHROPIC_BASE_URL` 放在该文件的 `env` 块中。Claude Code 随后会拒绝指向其他任何地方的会话,包括直接指向 Anthropic 或开发人员自己的代理,并仅接受您在那里设置的值的 `ANTHROPIC_BASE_URL`。对于通过提供商特定端点变量(如 `ANTHROPIC_BEDROCK_BASE_URL`)访问的网关,`allowedProviders` 条目指定要固定的变量。需要 Claude Code v2.1.285 或更高版本。

45 45 

46> [!NOTE]

47>

48> 当 Desktop 已登录 claude.ai 时,用户机器上的 Cowork 会话计为 [`"anthropic"`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders)。如果您在 MDM 策略或托管设置文件中将其排除在此列表之外,该会话将被拒绝。如果将其包含在内,直接发送到 Anthropic 的会话也会通过此列表。

49 

46## 订阅和网关50## 订阅和网关

47 51 

48当[网关凭证变量](https://code.claude.com/docs/zh-CN/llm-gateway-connect.md#set-the-credential-variable)或 `apiKeyHelper` 处于活动状态时,请求会使用该凭证代替开发人员的 claude.ai 订阅登录,订阅的使用限制不适用于这些请求。Claude Code 在机器上保存了 claude.ai 登录信息,但不会在这些请求中发送它。该流量按令牌计费给拥有网关转发的凭证的人,例如您的组织的 Anthropic Console 账户,或当网关路由到那里时您的 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 账户。52当[网关凭证变量](https://code.claude.com/docs/zh-CN/llm-gateway-connect.md#set-the-credential-variable)或 `apiKeyHelper` 处于活动状态时,请求会使用该凭证代替开发人员的 claude.ai 订阅登录,订阅的使用限制不适用于这些请求。Claude Code 在机器上保存了 claude.ai 登录信息,但不会在这些请求中发送它。该流量按令牌计费给拥有网关转发的凭证的人,例如您的组织的 Anthropic Console 账户,或当网关路由到那里时您的 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 账户。

Details

156 156 

157### 与现有登录的冲突157### 与现有登录的冲突

158 158 

159网关凭据变量优先于保存的 claude.ai 登录或 Console 密钥。使用 `ANTHROPIC_AUTH_TOKEN`,变量立即优先。使用 `ANTHROPIC_API_KEY`,在交互模式下提示您一次以批准密钥,然后它接管。159您的请求使用网关凭据变量,而不是保存的 claude.ai 登录。使用 `ANTHROPIC_AUTH_TOKEN` 时,该变量立即优先。使用 `ANTHROPIC_API_KEY` 时,在交互模式下会提示您一次以批准该密钥,之后它才会接管。

160 160 

161运行 `/status` 以确认哪个凭证源处于活动状态。如果启动显示命名两个源的身份验证冲突警告,请参阅[故障排除表](#troubleshoot-gateway-errors)的第一行,了解要删除哪一个。要清除保存的登录,以便仅保留网关凭证,请运行 `/logout`。161运行 `/status` 以确认哪个凭证源处于活动状态。如果启动显示命名两个源的身份验证冲突警告,请参阅[故障排除表](#troubleshoot-gateway-errors)的第一行,了解要删除哪一个。要清除保存的登录,以便仅保留网关凭证,请运行 `/logout`。

162 162 


506 506 

507| 错误 | 原因 | 修复 |507| 错误 | 原因 | 修复 |

508| :- | :- | :- |508| :- | :- | :- |

509| 启动警告命名两个凭证源并以 `auth may not work as expected` 结尾。较旧的版本显示 `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set` 代替。 | 网关凭证和保存的登录都处于活动状态;变量用于请求,但过时的登录可能导致意外的身份验证行为 | 取消设置变量以使用保存的登录,或运行 `/logout` 以使用网关凭证 |509| 启动警告命名两个凭据源并以 `auth may not work as expected` 结尾。较旧的版本显示 `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set` 代替。 | 网关凭据和保存的登录都处于活动状态 | 取消设置变量以使用保存的登录,或运行 `/logout` 以使用网关凭据 |

510| `401` 错误命名无效或无法识别的令牌 | 凭证不是网关颁发的,或它处于网关不读取的标头中 | 确认变量与[凭证表](#set-the-credential-variable)中的凭证类型匹配,如果凭证被撤销,请在网关处重新生成密钥 |510| `401` 错误命名无效或无法识别的令牌 | 凭证不是网关颁发的,或它处于网关不读取的标头中 | 确认变量与[凭证表](#set-the-credential-variable)中的凭证类型匹配,如果凭证被撤销,请在网关处重新生成密钥 |

511| `Your apiKeyHelper script is failing`,或在非交互模式下 stderr 上的 `apiKeyHelper failed:` | [`apiKeyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#apikeyhelper) 设置中的命令未生成可用的密钥,因此请求携带占位符密钥 | 直接运行该命令以查看失败原因,如果报告会话过期,请使用您的凭证提供商重新身份验证;请参阅[错误参考](https://code.claude.com/docs/zh-CN/errors.md#your-apikeyhelper-script-is-failing) |511| `Your apiKeyHelper script is failing`,或在非交互模式下 stderr 上的 `apiKeyHelper failed:` | [`apiKeyHelper`](https://code.claude.com/docs/zh-CN/settings-reference#apikeyhelper) 设置中的命令未生成可用的密钥,因此请求携带占位符密钥 | 直接运行该命令以查看失败原因,如果报告会话过期,请使用您的凭证提供商重新身份验证;请参阅[错误参考](https://code.claude.com/docs/zh-CN/errors.md#your-apikeyhelper-script-is-failing) |

512| 当没有任何东西在地址处应答时 `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)`,或当主机名无法解析时 `Can't reach the API server — check your internet or DNS (ENOTFOUND)`,通常在 Claude Code [使用退避重试](https://code.claude.com/docs/zh-CN/errors.md#automatic-retries)时的静默暂停之后。括号中的代码会变化;[Unable to connect to API](https://code.claude.com/docs/zh-CN/errors.md#unable-to-connect-to-api) 涵盖代码拼写和较早的措辞 | 没有任何东西在基础 URL 处应答:地址错误,或 VPN 或防火墙阻止了网关的路径 | 运行上面的 [curl 测试](#verify-the-connection),它会立即因相同原因失败,并与您的网关团队确认 URL 和网络路径 |512| 当没有任何东西在地址处应答时 `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)`,或当主机名无法解析时 `Can't reach the API server — check your internet or DNS (ENOTFOUND)`,通常在 Claude Code [使用退避重试](https://code.claude.com/docs/zh-CN/errors.md#automatic-retries)时的静默暂停之后。括号中的代码会变化;[Unable to connect to API](https://code.claude.com/docs/zh-CN/errors.md#unable-to-connect-to-api) 涵盖代码拼写和较早的措辞 | 没有任何东西在基础 URL 处应答:地址错误,或 VPN 或防火墙阻止了网关的路径 | 运行上面的 [curl 测试](#verify-the-connection),它会立即因相同原因失败,并与您的网关团队确认 URL 和网络路径 |


520| `/fast` 报告 `Fast mode unavailable due to network connectivity issues`,而推理请求有效 | [快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)可用性检查直接转到 `api.anthropic.com`,不遵循 `ANTHROPIC_BASE_URL`,因此阻止的直接出口会导致检查失败 | 如果出口被阻止,请将 `api.anthropic.com` 加入允许列表,或设置跳过变量。请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |520| `/fast` 报告 `Fast mode unavailable due to network connectivity issues`,而推理请求有效 | [快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)可用性检查直接转到 `api.anthropic.com`,不遵循 `ANTHROPIC_BASE_URL`,因此阻止的直接出口会导致检查失败 | 如果出口被阻止,请将 `api.anthropic.com` 加入允许列表,或设置跳过变量。请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

521| `/fast` 在使用 `ANTHROPIC_API_KEY` 中网关颁发的密钥进行身份验证的会话中报告 `Fast mode is currently unavailable` | 当 `ANTHROPIC_BASE_URL` 指向您的网关且密钥不符合 Anthropic API 密钥的格式时,Claude Code 不会发送[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)可用性检查。在没有缓存先前成功检查结果的情况下,它会将快速模式视为不可用 | 设置 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`;请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |521| `/fast` 在使用 `ANTHROPIC_API_KEY` 中网关颁发的密钥进行身份验证的会话中报告 `Fast mode is currently unavailable` | 当 `ANTHROPIC_BASE_URL` 指向您的网关且密钥不符合 Anthropic API 密钥的格式时,Claude Code 不会发送[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md)可用性检查。在没有缓存先前成功检查结果的情况下,它会将快速模式视为不可用 | 设置 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`;请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

522| `/fast` 在使用 `ANTHROPIC_AUTH_TOKEN` 进行身份验证的会话中报告 `Fast mode has been disabled by your organization`,即使组织已启用快速模式 | 可用性检查需要 claude.ai 登录或 API 密钥;仅使用持有者令牌,Claude Code 会将快速模式视为已禁用,而不发送检查 | 设置 `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`;请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` 在使用 `ANTHROPIC_AUTH_TOKEN` 进行身份验证的会话中报告 `Fast mode has been disabled by your organization`,即使组织已启用快速模式 | 可用性检查需要 claude.ai 登录或 API 密钥;仅使用持有者令牌,Claude Code 会将快速模式视为已禁用,而不发送检查 | 设置 `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`;请参阅[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/feedback` 在使用 `ANTHROPIC_BASE_URL` 的会话中保存本地文件 | 在网关后面,`ANTHROPIC_AUTH_TOKEN` 以及不符合 Anthropic API 密钥格式的密钥都不是 Anthropic 凭据。在没有此类凭据的情况下,Claude Code 会将报告写入 `~/.claude/feedback-bundles/` 下的本地归档,而不是发送它 | 将该文件发送给您的 Anthropic 客户代表,或将其附加到支持请求中。请参阅[遥测服务](https://code.claude.com/docs/zh-CN/data-usage.md#telemetry-services) |

523| Claude Code 要求您登录,即使 [curl 测试](#verify-the-connection)成功 | CLI 没有自己的凭证:可达的基础 URL 不是一个,在交互会话中,项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `env` 块仅在首次运行向导和[信任提示](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)之后应用 | 在 Claude Code 在首次运行设置之前读取的某处设置 `ANTHROPIC_AUTH_TOKEN`:shell 导出、`~/.claude/settings.json` 中的 `env` 块或托管设置 |524| Claude Code 要求您登录,即使 [curl 测试](#verify-the-connection)成功 | CLI 没有自己的凭证:可达的基础 URL 不是一个,在交互会话中,项目的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `env` 块仅在首次运行向导和[信任提示](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)之后应用 | 在 Claude Code 在首次运行设置之前读取的某处设置 `ANTHROPIC_AUTH_TOKEN`:shell 导出、`~/.claude/settings.json` 中的 `env` 块或托管设置 |

524| `ANTHROPIC_API_KEY` 已设置但被忽略,没有提示 | 密钥需要在交互会话中进行一次性批准,之前拒绝的密钥被忽略而不再询问 | 在 `/config` 下使用 `Use custom API key` 选项启用它 |525| `ANTHROPIC_API_KEY` 已设置但被忽略,没有提示 | 密钥需要在交互会话中进行一次性批准,之前拒绝的密钥被忽略而不再询问 | 在 `/config` 下使用 `Use custom API key` 选项启用它 |

525| `This machine's managed settings require a first-party login`,或当托管设置将 `forceLoginMethod` 设置为 `"gateway"` 或也设置 `forceLoginGatewayUrl` 时 [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in) | 托管设置包括 `forceLoginMethod` 或 `forceLoginOrgUUID`,不能与 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 共存 | 您的管理员必须从托管设置中删除 `forceLoginMethod`、`forceLoginOrgUUID` 和 `forceLoginGatewayUrl` 以使用网关凭证,或删除网关凭证以使用托管设置要求的登录。两者不能组合 |526| `This machine's managed settings require a first-party login`,或当托管设置将 `forceLoginMethod` 设置为 `"gateway"` 或也设置 `forceLoginGatewayUrl` 时 [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/zh-CN/errors#administrator-policy-requires-a-cloud-gateway-sign-in) | 托管设置包括 `forceLoginMethod` 或 `forceLoginOrgUUID`,不能与 `ANTHROPIC_API_KEY`、`ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper` 共存 | 您的管理员必须从托管设置中删除 `forceLoginMethod`、`forceLoginOrgUUID` 和 `forceLoginGatewayUrl` 以使用网关凭证,或删除网关凭证以使用托管设置要求的登录。两者不能组合 |

Details

142claude -p "Reply with one word: connected"142claude -p "Reply with one word: connected"

143```143```

144 144 

145**检查点**:提示返回响应,请求在网关日志中显示为对 `/v1/messages` 路径的 `POST`,状态为 `200`。Claude Code 附加查询字符串,例如 `?beta=true`,因此匹配路径,而不是完整 URL。两条失败消息指向不同的方向:145**检查点**:提示词返回响应,请求在网关日志中显示为对 `/v1/messages` 路径的 `POST`,状态为 `200`。Claude Code 附加查询字符串,例如 `?beta=true`,因此匹配路径,而不是完整 URL。检查失败消息:

146 146 

147* `Not logged in`:检查网关日志以区分两个原因。如果它是空的,没有凭证到达会话,没有请求离开机器;在您测试的 shell 中重新运行导出。如果它显示在 `401` 正文中带有 `x-api-key` 的被拒绝请求,网关期望密钥在该标头中;切换到 `ANTHROPIC_API_KEY`147* `Not logged in`:检查网关日志。如果它是空的,没有凭据到达会话,也没有请求离开机器;在您测试的 shell 中重新运行导出。如果它显示来自网关且提及 `x-api-key` 的 `401`,说明网关期望密钥在该标头中;切换到 `ANTHROPIC_API_KEY`。如果它显示来自 `api.anthropic.com` 或您的提供商端点的 `401`,请修复网关持有的提供商凭据

148* `Failed to authenticate. API Error: 401` 意味着凭证被发送并被拒绝,网关日志说明了在哪里:命名 `api.anthropic.com` 或您的提供商端点的 `401` 意味着网关到达了上游但其提供商凭证被拒绝,因此开发者密钥有效,网关持有的提供商凭证错误或是占位符148* `Failed to authenticate. API Error: 401` 意味着凭证被发送并被拒绝,网关日志说明了在哪里:命名 `api.anthropic.com` 或您的提供商端点的 `401` 意味着网关到达了上游但其提供商凭证被拒绝,因此开发者密钥有效,网关持有的提供商凭证错误或是占位符

149 149 

150错误或无法到达的基础 URL 会产生不同的症状:Claude Code [以退避方式重试连接](https://code.claude.com/docs/zh-CN/errors.md#automatic-retries),在报告错误之前可能会坐着没有输出几分钟。如果命令似乎挂起,请检查网关日志而不是等待;没有到达的请求意味着 `ANTHROPIC_BASE_URL` 不指向网关。150错误或无法到达的基础 URL 会产生不同的症状:Claude Code [以退避方式重试连接](https://code.claude.com/docs/zh-CN/errors.md#automatic-retries),在报告错误之前可能会坐着没有输出几分钟。如果命令似乎挂起,请检查网关日志而不是等待;没有到达的请求意味着 `ANTHROPIC_BASE_URL` 不指向网关。


247 247 

248您应该看到 `data:` 行逐步到达。整个响应在暂停后一次到达意味着网关正在缓冲,这会停滞 Claude Code;`404` 意味着模型名称未路由。每个模型名称重复。248您应该看到 `data:` 行逐步到达。整个响应在暂停后一次到达意味着网关正在缓冲,这会停滞 Claude Code;`404` 意味着模型名称未路由。每个模型名称重复。

249 249 

250然后启动 `claude` 并发送消息。此步骤的每个症状都有一个原因:250然后启动 `claude`,发送消息,并对照您看到的情况:

251 251 

252* 登录提示意味着凭证缺口。运行 `/status` 并打开**状态**选项卡:当 `Setting sources` 行不包括托管设置时,分发没有到达机器;当它包括时,开发者凭证没有被交付,因此设置 `ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper`252* 登录屏幕,或 `Not logged in` 且网关日志中没有新内容,意味着凭据缺口。运行 `/status` 并打开 **Status** 选项卡:当 `Setting sources` 行不包括托管设置时,分发没有到达机器;当它包括时,开发者凭据没有被交付,因此设置 `ANTHROPIC_AUTH_TOKEN` 或 `apiKeyHelper`

253* `Failed to authenticate` 错误意味着网关拒绝请求;其日志说明了哪个凭证失败。网关自己记录的拒绝命名开发者密钥,而来自 `api.anthropic.com` 或您的提供商端点的 `401` 意味着网关持有的提供商凭证被拒绝253* `Please run /login · API Error: 401`、`Not logged in` 或 `Invalid API key`,且网关日志中有 `401`:检查是谁返回了该 `401`。如果是网关返回的,请修复开发者密钥或其标头;如果它来自 `api.anthropic.com` 或您的提供商端点,请修复网关持有的提供商凭据

254* 当网关期望密钥在 `x-api-key` 标头中(设置为 `ANTHROPIC_API_KEY`)时,首次使用时出现针对该密钥的一次性批准提示是预期行为254* 当网关期望密钥在 `x-api-key` 标头中(设置为 `ANTHROPIC_API_KEY`)时,首次使用时出现针对该密钥的一次性批准提示是预期行为

255 255 

256如果您的组织使用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md),也在这里运行 `/fast`:可用性检查直接调用 `api.anthropic.com` 而不是遵循网关基础 URL,因此网关路由的会话可以报告快速模式不可用或禁用,即使推理有效。[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)将每条消息映射到恢复它的变量,与[配置的其余部分](#distribute-the-configuration)一起分发。256如果您的组织使用[快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md),也在这里运行 `/fast`:可用性检查直接调用 `api.anthropic.com` 而不是遵循网关基础 URL,因此网关路由的会话可以报告快速模式不可用或禁用,即使推理有效。[在代理和 LLM 网关后面使用快速模式](https://code.claude.com/docs/zh-CN/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)将每条消息映射到恢复它的变量,与[配置的其余部分](#distribute-the-configuration)一起分发。

mcp.md +0 −2

Details

835 835 

836您的组织通过 [`managedMcpServers`](https://code.claude.com/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings) 托管设置提供的服务器优先级高于上述所有来源,因此当上述某个服务器与之重复时,Claude Code 会连接组织的定义。需要 Claude Code v2.1.259 或更高版本。836您的组织通过 [`managedMcpServers`](https://code.claude.com/docs/zh-CN/managed-mcp#provide-servers-through-managed-settings) 托管设置提供的服务器优先级高于上述所有来源,因此当上述某个服务器与之重复时,Claude Code 会连接组织的定义。需要 Claude Code v2.1.259 或更高版本。

837 837 

838如果您在 [Desktop 应用的 Code 标签页](https://code.claude.com/docs/zh-CN/desktop.md#mcp-servers-from-the-claude-desktop-chat-app)中打开本地会话,而 `~/.claude.json` 顶层(User 作用域)和 `.mcp.json` 中存在同名的 stdio 服务器,Code 标签页会使用 `~/.claude.json` 中的定义。

839 

840### `.mcp.json` 中的环境变量扩展838### `.mcp.json` 中的环境变量扩展

841 839 

842Claude Code 支持在 `.mcp.json` 文件中进行环境变量扩展,使团队能够共享配置,同时对特定于机器的路径和 API 密钥等敏感值保持灵活性。840Claude Code 支持在 `.mcp.json` 文件中进行环境变量扩展,使团队能够共享配置,同时对特定于机器的路径和 API 密钥等敏感值保持灵活性。

Details

147 147 

148## Azure RBAC 配置148## Azure RBAC 配置

149 149 

150`Azure AI User` 和 `Cognitive Services User` 默认角色包括调用 Claude 模型所需的所有权限。150如果您使用 Microsoft Entra ID 或其颁发的 bearer 令牌进行身份验证,请在您的 Foundry 资源上为您的身份分配 `Foundry User` 或 `Cognitive Services User` 角色。您可能仍会看到 `Foundry User` 以其旧名称 `Azure AI User` 显示。

151 151 

152对于更严格的权限,请创建具有以下内容的自定义角色:152如果这些角色无法满足您的需求,请参阅 [Microsoft Foundry RBAC 文档](https://learn.microsoft.com/en-us/azure/foundry/concepts/rbac-foundry)了解自定义角色。

153 

154```json theme={null}

155{

156 "permissions": [

157 {

158 "dataActions": [

159 "Microsoft.CognitiveServices/accounts/providers/*"

160 ]

161 }

162 ]

163}

164```

165 

166有关详情,请参阅 [Microsoft Foundry RBAC 文档](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/rbac-azure-ai-foundry)。

167 153 

168## 1M token 上下文窗口154## 1M token 上下文窗口

169 155 

model-config.md +5 −3

Details

157 157 

158当启动时的活动模型来自项目或托管设置而不是您自己的选择时,启动标题会显示是哪个设置文件设置了它。运行 `/model` 可覆盖;项目或托管设置会在下次启动时重新应用。在嵌入 Claude Code 并设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars) 的平台上,主机的模型配置优先于托管模型设置,而托管的 `availableModels` 允许列表仍然有效,除非主机提供自己的允许列表;[Exceptions to managed settings precedence](https://code.claude.com/docs/zh-CN/settings.md#exceptions-to-managed-settings-precedence) 说明主机会覆盖哪些键和变量。158当启动时的活动模型来自项目或托管设置而不是您自己的选择时,启动标题会显示是哪个设置文件设置了它。运行 `/model` 可覆盖;项目或托管设置会在下次启动时重新应用。在嵌入 Claude Code 并设置 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/zh-CN/env-vars) 的平台上,主机的模型配置优先于托管模型设置,而托管的 `availableModels` 允许列表仍然有效,除非主机提供自己的允许列表;[Exceptions to managed settings precedence](https://code.claude.com/docs/zh-CN/settings.md#exceptions-to-managed-settings-precedence) 说明主机会覆盖哪些键和变量。

159 159 

160如果您或您的组织配置了 [PreModelSwitch hook](https://code.claude.com/docs/zh-CN/hooks.md#premodelswitch),它们会在请求的切换生效之前运行,并可以阻止切换或要求您确认。160如果您或您的组织配置了 [PreModelSwitch hook](https://code.claude.com/docs/zh-CN/hooks.md#premodelswitch),它们会在请求的切换生效之前运行,并可以阻止切换或要求您确认。要了解 hook 阻止切换的原因以及应如何处理,请参阅 [Model switch was blocked by a PreModelSwitch hook](https://code.claude.com/docs/zh-CN/errors.md#model-switch-was-blocked-by-a-premodelswitch-hook)。

161 161 

162当 Claude Code 无法判断您组织的[托管插件](https://code.claude.com/docs/zh-CN/settings-reference.md#enabledplugins)提供了哪些 PreModelSwitch hook 时(例如因为某个托管插件加载失败),它会拒绝切换而不是在未经检查的情况下应用,并在每次新尝试时再次检查。有关消息和恢复方法,请参阅 [Model switch was blocked by a PreModelSwitch hook](https://code.claude.com/docs/zh-CN/errors.md#model-switch-was-blocked-by-a-premodelswitch-hook)。162如果某个[托管插件](https://code.claude.com/docs/zh-CN/settings-reference.md#enabledplugins)或其 hook 加载失败,您仍然可以切换模型。该插件的 PreModelSwitch hook 不会运行,因此原本会被其中某个 hook 阻止的切换可以继续进行。其他已加载的 PreModelSwitch hook 仍会运行,并可以阻止切换。如果 v2.1.323 之前的 Claude Code 以 `so organization-managed PreModelSwitch hooks could not be checked` 拒绝切换,请更新 Claude Code。

163 

164要查看失败的内容,请在会话中运行 `/plugin` 并打开 [**Errors** 选项卡](https://code.claude.com/docs/zh-CN/plugins/troubleshooting.md#failed-to-load-hooks-from-and-hooks-that-dont-fire)。如果其中没有列出任何内容,请从 shell 使用 `claude --debug` 启动新会话并切换到其他模型,然后阅读[调试日志](https://code.claude.com/docs/zh-CN/hooks.md#debug-hooks)。在您修复插件后,或者[插件更新](https://code.claude.com/docs/zh-CN/plugins/install.md#keep-plugins-updated)将管理员的修复带到您的计算机上后,请在会话中运行 `/reload-plugins` 以使其 hook 运行。

163 165 

164当您通过 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 的 `setModel()` 方法、通过应用(如 [Desktop app](https://code.claude.com/docs/zh-CN/desktop.md))或从通过 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接的设备切换模型时,Claude Code 会在切换时检查该值:166当您通过 [Agent SDK](https://code.claude.com/docs/zh-CN/agent-sdk/overview.md) 的 `setModel()` 方法、通过应用(如 [Desktop app](https://code.claude.com/docs/zh-CN/desktop.md))或从通过 [Remote Control](https://code.claude.com/docs/zh-CN/remote-control.md) 连接的设备切换模型时,Claude Code 会在切换时检查该值:

165 167 


903 905 

904### 为网关或自定义模型 ID 更正窗口906### 为网关或自定义模型 ID 更正窗口

905 907 

906以下任一启动警告都表示 Claude Code 无法识别您会话的模型 ID,因此无法得知该模型的上下文窗口,并假设其为 200K token:908以下任一警告都表示 Claude Code 无法识别您会话的模型 ID,因此无法得知该模型的上下文窗口,并假设其为 200K token:

907 909 

908```text theme={null}910```text theme={null}

909⚠ Model "my-gateway-opus" isn't recognized · context assumed to be 200k tokens · ...911⚠ Model "my-gateway-opus" isn't recognized · context assumed to be 200k tokens · ...

Details

110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 启用遥测收集(必需) | `1` |110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 启用遥测收集(必需) | `1` |

111| `OTEL_METRICS_EXPORTER` | 指标导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`prometheus`、`none` |111| `OTEL_METRICS_EXPORTER` | 指标导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`prometheus`、`none` |

112| `OTEL_LOGS_EXPORTER` | 日志/事件导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |112| `OTEL_LOGS_EXPORTER` | 日志/事件导出器类型,以逗号分隔。使用 `none` 禁用 | `console`、`otlp`、`none` |

113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 导出器的协议,适用于所有信号。Claude Code 没有默认协议,因此请为启用的每个 `otlp` 导出器设置此变量或按信号的协议变量 | `grpc`、`http/json`、`http/protobuf` |113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 导出器的协议,适用于所有信号。对于有效的 `http://` 或 `https://` 端点,默认为 `http/protobuf`。对于 gRPC 端点(例如 `http://localhost:4317`),请将其设置为 `grpc`。该默认值需要 Claude Code v2.1.323 或更高版本 | `grpc`、`http/json`、`http/protobuf` |

114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有信号的 OTLP 收集器端点 | `http://localhost:4317` |114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 所有信号的 OTLP 收集器端点 | `http://localhost:4317` |

115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指标协议,覆盖常规设置 | `grpc`、`http/json`、`http/protobuf` |115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 指标协议,覆盖常规设置 | `grpc`、`http/json`、`http/protobuf` |

116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指标端点,覆盖常规设置 | `http://localhost:4318/v1/metrics` |116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 指标端点,覆盖常规设置 | `http://localhost:4318/v1/metrics` |


431> * **不允许空格**:值不能包含空格。例如,`user.organizationName=My Company` 无效431> * **不允许空格**:值不能包含空格。例如,`user.organizationName=My Company` 无效

432> * **格式**:必须是逗号分隔的键=值对:`key1=value1,key2=value2`432> * **格式**:必须是逗号分隔的键=值对:`key1=value1,key2=value2`

433> * **允许的字符**:仅限 US-ASCII 字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠433> * **允许的字符**:仅限 US-ASCII 字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠

434> * **特殊字符**:允许范围之外的字符必须进行百分比编码434> * **特殊字符**:允许范围之外的字符必须进行百分比编码,值中的 `=` 必须写为 `%3D`

435>435>

436> 对于需要空格的值,请改用下划线或 camelCase。以下示例使用每种形式设置 `org.name`:436> 对于需要空格的值,请改用下划线或 camelCase。以下示例使用每种形式设置 `org.name`:

437>437>


475 475 

476* **您在运行 Desktop 的计算机上设置了它**:Desktop 不会将您在那里设置的值传递给 SSH 会话476* **您在运行 Desktop 的计算机上设置了它**:Desktop 不会将您在那里设置的值传递给 SSH 会话

477* **您在 `/etc/profile` 或其他只有登录 shell 才会读取的文件中导出了它**:从登录 shell 运行 `claude` 时名称会到达,但在 Desktop SSH 会话中不会。Desktop 不通过登录 shell 启动 Claude Code。请改为在远程机器上的[托管设置文件](https://code.claude.com/docs/zh-CN/desktop.md#managed-settings)中的 `env` 下设置该变量。477* **您在 `/etc/profile` 或其他只有登录 shell 才会读取的文件中导出了它**:从登录 shell 运行 `claude` 时名称会到达,但在 Desktop SSH 会话中不会。Desktop 不通过登录 shell 启动 Claude Code。请改为在远程机器上的[托管设置文件](https://code.claude.com/docs/zh-CN/desktop.md#managed-settings)中的 `env` 下设置该变量。

478* **某个值内部包含空格**:此时 Claude Code 不会将任何键复制到事件或数据点上,也不会报告错误。[从值中去掉空格](#multi-team-organization-support)。478* **某个值内部包含空格**:此时 Claude Code 不会将任何键复制到事件或数据点上。要查看哪个值包含空格,请在远程机器上的会话中运行 `/status`。[从值中去掉空格](#multi-team-organization-support)。

479* **其他来源已经设置了该变量**:在桌面应用启动的会话中,启动环境中已设置的变量[优先于设置文件](https://code.claude.com/docs/zh-CN/settings-reference.md#how-env-values-interact-with-your-shell)。[调试日志](https://code.claude.com/docs/zh-CN/debug-your-config.md)会列出每个被忽略的变量。当第三方 Desktop 部署在其提供的环境中[指定 OTLP 端点](#how-managed-settings-lock-the-otlp-destination)时,该环境会带有 Desktop 自己的 `OTEL_RESOURCE_ATTRIBUTES`。479* **其他来源已经设置了该变量**:在桌面应用启动的会话中,启动环境中已设置的变量[优先于设置文件](https://code.claude.com/docs/zh-CN/settings-reference.md#how-env-values-interact-with-your-shell)。[调试日志](https://code.claude.com/docs/zh-CN/debug-your-config.md)会列出每个被忽略的变量。当第三方 Desktop 部署在其提供的环境中[指定 OTLP 端点](#how-managed-settings-lock-the-otlp-destination)时,该环境会带有 Desktop 自己的 `OTEL_RESOURCE_ATTRIBUTES`。

480 480 

481### 示例配置481### 示例配置

Details

304claude --permission-mode plan304claude --permission-mode plan

305```305```

306 306 

307再次按 `Shift+Tab` 可在不批准计划的情况下退出计划模式。307在没有打开批准提示时,再次按 `Shift+Tab` 可退出计划模式。在批准提示中,请先按 `Esc`,因为在该提示中按 `Shift+Tab` 会批准计划。

308 308 

309### 审阅并批准计划309### 审阅并批准计划

310 310 


593> * 当 Claude 读取[他人制作的 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you) 时,适用该部分列出的批准情况593> * 当 Claude 读取[他人制作的 Artifact](https://code.claude.com/docs/zh-CN/artifacts.md#read-an-artifact-shared-with-you) 时,适用该部分列出的批准情况

594> * 从[网络路径](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)读取会提示您594> * 从[网络路径](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)读取会提示您

595> 3. 其他所有操作都会交给分类器处理,按默认方式处理的[关键路径删除](#critical-paths)除外。在第 1 步中直接提示您的连接器工具和 `requiresUserInteraction` MCP 工具也永远不会到达分类器,因此组织要求的批准和同意步骤都不会被自动批准595> 3. 其他所有操作都会交给分类器处理,按默认方式处理的[关键路径删除](#critical-paths)除外。在第 1 步中直接提示您的连接器工具和 `requiresUserInteraction` MCP 工具也永远不会到达分类器,因此组织要求的批准和同意步骤都不会被自动批准

596> * 启用 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md#permission-checks) 时,Claude 的代码会在运行前交给分类器审查一次,而其中的工具调用不会。您仍可以使用 `deny` 规则阻止某个调用,或使用 `ask` 规则要求弹出提示,但 Claude 可以以[规则无法匹配的形式](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits)运行 Bash 命令

596> 4. 如果分类器阻止了操作,Claude 会收到原因。在大多数会话中,原因会指明分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[查看拒绝记录](https://code.claude.com/docs/zh-CN/auto-mode-config.md#review-denials)597> 4. 如果分类器阻止了操作,Claude 会收到原因。在大多数会话中,原因会指明分类器匹配的规则,例如 `[Data Exfiltration]`,而不是给出书面解释;请参阅[查看拒绝记录](https://code.claude.com/docs/zh-CN/auto-mode-config.md#review-denials)

597>598>

598> 您安装的处理 `tool.check` 的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 也可以批准操作。有关其批准无法越过您的规则和 hook 的情况,请参阅[使用 hook 扩展权限](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。599> 您安装的处理 `tool.check` 的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 也可以批准操作。有关其批准无法越过您的规则和 hook 的情况,请参阅[使用 hook 扩展权限](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。

permissions.md +1 −1

Details

784* 在仓库外,Claude Code 根据您启动它的目录来保存信任,信任覆盖该目录的任何子目录,除了其中嵌套的 git 仓库(如克隆)。每个被覆盖的子目录随后都被视为一个您信任其父目录的文件夹。784* 在仓库外,Claude Code 根据您启动它的目录来保存信任,信任覆盖该目录的任何子目录,除了其中嵌套的 git 仓库(如克隆)。每个被覆盖的子目录随后都被视为一个您信任其父目录的文件夹。

785* 当您从主目录启动时,Claude Code 仅在当前会话期间保持信任,不会将其写入磁盘;请参阅[其他保护措施](https://code.claude.com/docs/zh-CN/security.md#additional-safeguards)说明。785* 当您从主目录启动时,Claude Code 仅在当前会话期间保持信任,不会将其写入磁盘;请参阅[其他保护措施](https://code.claude.com/docs/zh-CN/security.md#additional-safeguards)说明。

786 786 

787Claude Code 仅在交互式会话中显示信任对话框。`claude -p` 运行或 SDK 会话永远不会显示它,信任父文件夹不计入这些规则,因此[在您信任文件夹之前运行什么](#what-runs-before-you-trust-a-folder)说明了在这两种情况下 Claude Code 仍然使用哪些仓库内容。787VS Code 扩展在启动会话之前会请求相同的信任,对话框标题为 `Trust this folder in Claude Code?`。Claude Code 在交互式终端会话中显示信任对话框,但在 `claude -p` 或 SDK 会话中不显示。信任父文件夹不计入这些规则。[在您信任文件夹之前运行什么](#what-runs-before-you-trust-a-folder)说明了在每种情况下 Claude Code 仍然使用哪些仓库内容。

788 788 

789在启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)之前,Claude Code 还会检查会话运行所在目录的工作区信任。如果您从您尚未信任的目录中的终端运行 `claude --bg`,信任对话框会首先出现,一旦您接受它,会话就会启动。在无法出现对话框的地方(如脚本中),命令会改为以[`Workspace not trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session)错误退出。789在启动或重启[后台会话](https://code.claude.com/docs/zh-CN/agent-view.md)之前,Claude Code 还会检查会话运行所在目录的工作区信任。如果您从您尚未信任的目录中的终端运行 `claude --bg`,信任对话框会首先出现,一旦您接受它,会话就会启动。在无法出现对话框的地方(如脚本中),命令会改为以[`Workspace not trusted`](https://code.claude.com/docs/zh-CN/errors#workspace-not-trusted-when-dispatching-a-background-session)错误退出。

790 790 

Details

4 4 

5# 向插件添加组件5# 向插件添加组件

6 6 

7> 向 Claude Code 插件添加 skills、hooks、MCP 服务器和其他所有组件类型,并提供针对每种类型的验证示例。7> 向 Claude Code 插件添加 skill、hook、MCP 服务器和其他组件类型,并为每种类型提供可通过验证的示例。

8 8 

9Claude Code 插件由多个组件构建而成,例如 skills、agents、hooks 和 MCP 服务器。每个组件在插件中都有一个默认文件夹,在 `.claude-plugin/plugin.json` 中有一个可选的清单键来替换或添加到该文件夹,以及用户看到的名称。有关每个键的完整字段表,请参阅[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)。9Claude Code 插件由多个组件构建而成,例如 skills、agents、hooks 和 MCP 服务器。每个组件在插件中都有一个默认文件夹,在 `.claude-plugin/plugin.json` 中有一个可选的清单键来替换或添加到该文件夹,以及用户看到的名称。有关每个键的完整字段表,请参阅[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)。

10 10 


22 22 

23## 浏览插件目录23## 浏览插件目录

24 24 

25浏览器显示了一个示例插件 `my-plugin`,它在其默认位置拥有每种组件的一个副本:25浏览器显示了一个示例插件 `my-plugin`,它在默认位置包含以下组件:

26 26 

27* 一个审查 skill 和一个 `about` 命令27* 一个审查 skill 和一个 `about` 命令

28* 一个 security-review 子代理28* 一个 security-review 子代理


31* 一个输出样式和一个颜色主题31* 一个输出样式和一个颜色主题

32* 一个 route-audit 工作流32* 一个 route-audit 工作流

33* 一个 `hello-plugin` 可执行文件33* 一个 `hello-plugin` 可执行文件

34* 默认设置

35* 一个本地 MCP 服务器和一个 Go 语言服务器34* 一个本地 MCP 服务器和一个 Go 语言服务器

36 35 

37每个文件都是其格式的最小有效示例,用于展示形状而不是实用性:真实的 skill 或 agent 包含完整的说明,通常还有支持文件,真实的 hook 或监视器执行真实的工作。浏览器后的部分使用与浏览器相同的文件作为示例,并链接到更完整的文件。选择一个文件或文件夹来阅读其用途、查看其内容,并找到涵盖它的部分。36每个文件都是其格式的最小有效示例,用于展示形状而不是实用性:真实的 skill 或 agent 包含完整的说明,通常还有支持文件,真实的 hook 或监视器执行真实的工作。浏览器后的部分使用与浏览器相同的文件作为示例,并链接到更完整的文件。选择一个文件或文件夹来阅读其用途、查看其内容,并找到涵盖它的部分。

38 37 

39What goes in a plugin38What goes in a plugin

40 39 

41This example plugin, `my-plugin`, has one of every kind of component, each in its default location. Select a file or folder to read what it’s for and see what goes in it.40This example plugin, `my-plugin`, has the components listed here, each in its default location. Select a file or folder to read what it’s for and see what goes in it.

42 41 

43Plugin directory42Plugin directory

44 43 


178npx prettier --write .177npx prettier --write .

179```178```

180 179 

181插件根目录中的 `settings.json` 包含在启用插件时应用的[设置](https://code.claude.com/docs/zh-CN/settings-reference.md),因此插件可以改变会话的行为方式,而不仅仅是添加组件。只有两个键从插件生效,[`agent`](https://code.claude.com/docs/zh-CN/settings-reference#agent) 和 [`subagentStatusLine`](https://code.claude.com/docs/zh-CN/settings-reference#subagentstatusline);所有其他键都被丢弃。请参阅[默认设置](#default-settings)。

182 

183这个设置 `agent`,它将会话的主线程作为插件自己的 `security-reviewer` agent 运行,因此该 agent 的系统提示、工具限制和模型应用于整个会话:

184 

185```json theme={null}

186{

187 "agent": "security-reviewer"

188}

189```

190 

191一个 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md)从外部系统为 Claude 提供工具。在插件根目录的 `.mcp.json` 中声明它。这个从插件内的脚本启动本地服务器,并在 `/mcp` 中显示为 `plugin:my-plugin:db`:180一个 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md)从外部系统为 Claude 提供工具。在插件根目录的 `.mcp.json` 中声明它。这个从插件内的脚本启动本地服务器,并在 `/mcp` 中显示为 `plugin:my-plugin:db`:

192 181 

193```json theme={null}182```json theme={null}


484 473 

485claude.ai 和 Cowork 不安装具有顶级 `bin/` 目录的插件,包括你 [通过 claude.ai 组织设置分发的](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory) 插件。474claude.ai 和 Cowork 不安装具有顶级 `bin/` 目录的插件,包括你 [通过 claude.ai 组织设置分发的](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory) 插件。

486 475 

487### Default settings

488 

489要设置在启用插件时应用的默认值,在插件根目录添加 `settings.json`,或将相同的对象内联放在 `settings` 清单键中。两个键生效,`agent` 和 `subagentStatusLine`,每个其他键都被丢弃。

490 

491设置 `agent` 以将插件自己的一个代理作为主线程运行:

492 

493```json settings.json theme={null}

494{

495 "agent": "security-reviewer"

496}

497```

498 

499加载插件并启动会话。Claude 然后在主对话中用 `security-reviewer` 代理的系统提示和模型回答。

500 

501对于该键控制的所有内容,参见 [`agent` 设置](https://code.claude.com/docs/zh-CN/settings-reference#agent)。

502 

503当相同的键在多个地方设置时,这些规则决定哪个值适用:

504 

505* **文件优于清单**:当两者都存在且 `settings.json` 设置至少一个支持的键时,`settings.json` 适用,清单的 `settings` 被忽略

506* **用户设置优于插件默认值**:跨设置源,插件默认值是最低层,所以用户自己在 `~/.claude/settings.json` 中的 `agent` 覆盖你的

507* **两个插件设置相同的键**:来自最后加载的插件的值适用,`claude --debug` 记录 `overrides setting`

508 

509对于 `subagentStatusLine` 形状,参见 [subagent 状态行](https://code.claude.com/docs/zh-CN/statusline.md#subagent-status-lines)。

510 

511### Themes and output styles476### Themes and output styles

512 477 

513插件可以包含颜色主题和输出样式。两者都出现在与用户自己相同的选择器中。对于任一个,设置清单键替换文件夹扫描。478插件可以包含颜色主题和输出样式。两者都出现在与用户自己相同的选择器中。对于任一个,设置清单键替换文件夹扫描。

Details

72* **`version`**:可选。设置它可以让用户保持该版本,直到您更改它;[发布新版本](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#release-a-new-version)说明何时设置或省略它。72* **`version`**:可选。设置它可以让用户保持该版本,直到您更改它;[发布新版本](https://code.claude.com/docs/zh-CN/plugins/host-marketplace.md#release-a-new-version)说明何时设置或省略它。

73* **`author`**:要归功的人。其中 `name` 是必需的;`email` 和 `url` 是可选的。73* **`author`**:要归功的人。其中 `name` 是必需的;`email` 和 `url` 是可选的。

74 74 

75每个其他字段都在[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)上。75其他字段请参阅[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)。

76 76 

77只有 `plugin.json` 放在 `.claude-plugin/` 内。您接下来添加的技能直接放在 `my-first-plugin/` 下,在该文件夹旁边。77只有 `plugin.json` 放在 `.claude-plugin/` 内。您接下来添加的技能直接放在 `my-first-plugin/` 下,在该文件夹旁边。

78 78 


344 "PostToolUse": [344 "PostToolUse": [

345 {345 {

346 "matcher": "Write|Edit",346 "matcher": "Write|Edit",

347 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]347 "hooks": [{ "type": "command", "command": "f=$(jq -r '.tool_input.file_path') && npm run lint:fix -- \"$f\"" }]

348 }348 }

349 ]349 ]

350 }350 }

Details

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> 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.3> Use this file to discover all available pages before exploring further.

4 4 

5# Plugin manifest 参考5# 插件 manifest 参考

6 6 

7> plugin.json 的完整参考:每个字段的类型和默认值、接受的路径形式,以及 userConfig 和环境变量模式。7> plugin.json 的完整参考:每个字段的类型和默认值、接受的路径形式,以及 userConfig 和环境变量的 schema。

8 8 

9Plugin manifest 是 plugin 的 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含 plugin 的元数据和 Claude Code 提示用户输入的 [`userConfig`](#user-configuration) 值。它还声明任何在其[默认位置](#standard-layout)之外定义内联或保留的组件。9Plugin manifest 是 plugin 的 `.claude-plugin/` 目录中的 `plugin.json` 文件。它包含 plugin 的元数据和 Claude Code 提示用户输入的 [`userConfig`](#user-configuration) 值。它还声明任何在其[默认位置](#standard-layout)之外定义内联或保留的组件。

10 10 


117 117 

118## 字段118## 字段

119 119 

120该表列出了 `plugin.json` 中的顶级键。`name` 是唯一必需的键。如果字段名称是链接,链接的部分有其完整规则。120下表列出了 `plugin.json` 中的顶级键。`name` 是唯一必需的键。如果字段名称是链接,则链接的部分包含其完整规则。

121 121 

122对于组件键(如 `commands` 和 `hooks`),[组件路径形式](#component-path-forms)显示每个接受的形式及示例,每个路径遵循 `./` 前缀、扩展名和包含的[路径规则](#path-rules)。122对于组件键(如 `commands` 和 `hooks`),[组件路径形式](#component-path-forms)显示每个接受的形式及示例,每个路径遵循 `./` 前缀、扩展名和包含的[路径规则](#path-rules)。

123 123 


141| [`termsOfServiceUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的服务条款链接。Claude Code 不读取它 |141| [`termsOfServiceUrl`](#directory-listing-fields) | String | 插件在 Anthropic 目录中的列表所用的服务条款链接。Claude Code 不读取它 |

142| [`defaultEnabled`](#defaultenabled) | Boolean | 当用户未设置时 plugin 是否在启用时启动。默认为 `true` |142| [`defaultEnabled`](#defaultenabled) | Boolean | 当用户未设置时 plugin 是否在启用时启动。默认为 `true` |

143| [`dependencies`](#dependencies) | Array of strings or objects | 必须为此 plugin 启用的 plugin |143| [`dependencies`](#dependencies) | Array of strings or objects | 必须为此 plugin 启用的 plugin |

144| [`settings`](#settings) | Object | Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效 |

145| [`userConfig`](#user-configuration) | Object | Claude Code 在 plugin 启用时提示用户输入的值 |144| [`userConfig`](#user-configuration) | Object | Claude Code 在 plugin 启用时提示用户输入的值 |

146| `types` | Path | 声明 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#files) 的 `$.state` 值和 `$` 名词的 `.d.ts` 文件 |145| `types` | Path | 声明 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#files) 的 `$.state` 值和 `$` 名词的 `.d.ts` 文件 |

147| [`channels`](#channels) | Array of objects | plugin 提供的消息频道,每个绑定到其 MCP 服务器之一 |146| [`channels`](#channels) | Array of objects | plugin 提供的消息频道,每个绑定到其 MCP 服务器之一 |


211 210 

212必须为此 plugin 启用的 plugin。每个条目是 `"name"`、`"name@marketplace"` 或 `{ "name": "...", "marketplace": "...", "version": "..." }`。裸名称针对此 plugin 自己的 marketplace 解析。参见[依赖约束](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)。211必须为此 plugin 启用的 plugin。每个条目是 `"name"`、`"name@marketplace"` 或 `{ "name": "...", "marketplace": "...", "version": "..." }`。裸名称针对此 plugin 自己的 marketplace 解析。参见[依赖约束](https://code.claude.com/docs/zh-CN/plugins/dependencies.md)。

213 212 

214### `settings`

215 

216Claude Code 在 plugin 启用时应用的设置。仅 `agent` 和 `subagentStatusLine` 生效;其他键在加载时被删除。plugin 根目录处的 `settings.json` 优先于此键。参见[默认设置](https://code.claude.com/docs/zh-CN/plugins/components.md#default-settings)。

217 

218## 组件路径形式213## 组件路径形式

219 214 

220每个组件键接受相对于 plugin 根目录的路径。`hooks`、`mcpServers`、`lspServers` 和 `experimental.monitors` 也接受内联配置,`commands` 也接受对象映射,`mcpServers` 也接受 MCP 包路径和 URL。以下示例显示每个接受的形式一次。有关每个组件在运行时的作用,参见[Plugin 组件](https://code.claude.com/docs/zh-CN/plugins/components.md)。215每个组件键接受相对于 plugin 根目录的路径。`hooks`、`mcpServers`、`lspServers` 和 `experimental.monitors` 也接受内联配置,`commands` 也接受对象映射,`mcpServers` 也接受 MCP 包路径和 URL。以下示例显示每个接受的形式一次。有关每个组件在运行时的作用,参见[Plugin 组件](https://code.claude.com/docs/zh-CN/plugins/components.md)。


626| 主题 | `themes/` | 主题 JSON 文件 |621| 主题 | `themes/` | 主题 JSON 文件 |

627| Monitors | `monitors/monitors.json` | monitors 数组 |622| Monitors | `monitors/monitors.json` | monitors 数组 |

628| 可执行文件 | `bin/` | 此处的文件在 plugin 启用时位于 Bash 工具的 `PATH` 上,因此 Claude 将它们作为裸命令运行。claude.ai 和 Cowork 不安装具有此目录的 plugin,包括您[通过 claude.ai 组织设置分发](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory)的 plugin |623| 可执行文件 | `bin/` | 此处的文件在 plugin 启用时位于 Bash 工具的 `PATH` 上,因此 Claude 将它们作为裸命令运行。claude.ai 和 Cowork 不安装具有此目录的 plugin,包括您[通过 claude.ai 组织设置分发](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory)的 plugin |

629| 设置 | `settings.json` | 在 plugin 启用时应用的 `agent` 和 `subagentStatusLine` 默认值 |

630 624 

631使用每个默认位置的 plugin,加上其 hooks 调用的 `scripts/` 文件夹,布局如下:625使用默认位置的插件,加上其 hook 调用的 `scripts/` 文件夹,布局如下:

632 626 

633```text theme={null}627```text theme={null}

634deploy-tools/628deploy-tools/


655│ └── deploy-tool649│ └── deploy-tool

656├── scripts/650├── scripts/

657│ └── format.sh651│ └── format.sh

658├── settings.json

659├── .mcp.json652├── .mcp.json

660└── .lsp.json653└── .lsp.json

661```654```

Details

61 * 会话使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence)运行61 * 会话使用 Team 或 Enterprise 计划的 [`/login` 凭据](https://code.claude.com/docs/zh-CN/authentication#authentication-precedence)运行

62 62 

63 使用 API 密钥的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 的用户,仅在具有托管设置或 `managed-mcp.json` 的机器上获得内置守卫。使用长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话也不算作上述登录,即使机器上存储了 Team 或 Enterprise 登录信息。63 使用 API 密钥的用户,或通过 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 的用户,仅在具有托管设置或 `managed-mcp.json` 的机器上获得内置守卫。使用长期有效的 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/zh-CN/authentication#generate-a-long-lived-token) 运行的会话也不算作上述登录,即使机器上存储了 Team 或 Enterprise 登录信息。

64* **保护程序保护您管理的内容。** 用户的 mod 无法更改您的托管 hooks 接收或决定的内容、系统提示、您的托管 `CLAUDE.md` 和其他托管说明、任何 mod 读取的设置内容,或您的托管 MCP 服务器的工具和描述。64* **守卫保护您管理的内容。** 用户的 mod 无法更改您的托管 hook 接收或决定的内容、系统提示词,或您的托管 `CLAUDE.md` 和其他托管说明。它也无法更改任何 mod 读取的设置内容,或您的托管 MCP 服务器连接后的工具和描述。

65* **在您管理的内容之外,用户的 mod 以该用户身份行事。** mod 保留该用户的权限:它仍然可以读写文件、启动进程和发出网络请求。它还可以重写工具调用和提示词、拒绝工具调用,以及在界面中绘制。65* **在 v2.1.323 或更高版本上,用户的 mod 可以阻止托管 MCP 服务器连接。** 在该用户的会话中,`/mcp` 会将该服务器列为被该 mod 拦截。要防止这种情况,请[阻止用户安装的 mod 加载](#stop-user-installed-mods-from-loading)。

66* **在您管理的内容之外,用户的 mod 以该用户身份行事。** mod 保留该用户的权限:它仍然可以读写文件、启动进程和发出网络请求。它还可以重写工具调用和提示词、拒绝工具调用、添加或移除工具,以及在界面中绘制。

66* **权限规则和 `PreToolUse` hook 优先于用户的 mod。** 加载内置守卫后,默认情况下,用户的 mod 无法批准 `deny` 规则拒绝的调用或 `ask` 规则会提示的调用,无论哪个设置文件持有该规则。mod 也无法批准任何 `PreToolUse` hook 阻止的调用。67* **权限规则和 `PreToolUse` hook 优先于用户的 mod。** 加载内置守卫后,默认情况下,用户的 mod 无法批准 `deny` 规则拒绝的调用或 `ask` 规则会提示的调用,无论哪个设置文件持有该规则。mod 也无法批准任何 `PreToolUse` hook 阻止的调用。

67 68 

68 权限规则和 `PreToolUse` hook 适用于 Claude 的工具调用,而不适用于 mod 的 [`$.fs` 和 `$.process` 调用](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network)。即使 `Read(.env)` 被拒绝,mod 仍然可以使用 `$.fs.read` 读取该文件,或启动执行此操作的程序。要限制 mod 自身的 `$.fs` 和 `$.process` 调用,请[阻止该 mod 加载](#stop-user-installed-mods-from-loading),或在[策略 mod](#enforce-a-policy-with-a-mod-of-your-own) 中处理这些调用。69 权限规则和 `PreToolUse` hook 适用于 Claude 的工具调用,而不适用于 mod 的 [`$.fs` 和 `$.process` 调用](https://code.claude.com/docs/zh-CN/plugins/mods/api#reach-files-processes-and-the-network)。即使 `Read(.env)` 被拒绝,mod 仍然可以使用 `$.fs.read` 读取该文件,或启动执行此操作的程序。要限制 mod 自身的 `$.fs` 和 `$.process` 调用,请[阻止该 mod 加载](#stop-user-installed-mods-from-loading),或在[策略 mod](#enforce-a-policy-with-a-mod-of-your-own) 中处理这些调用。


159输出中的 `hooks:` 和 `calls:` 行描述了 mod 的代码:160输出中的 `hooks:` 和 `calls:` 行描述了 mod 的代码:

160 161 

161```text theme={null}162```text theme={null}

162 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}163 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane} (default matcher key: plugin)

163 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open164 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open

164```165```

165 166 

166`hooks:` 行列出了 mod 接收的事件。`calls:` 行列出了其代码调用的 mods API 方法。[mods API](https://code.claude.com/docs/zh-CN/plugins/mods/api.md)(在 mod 的代码中写作 `$`)是 mod 到达文件、进程和网络的方式。Claude Code 拒绝加载以此命令无法读取的方式使用 mods API 的 mod。167* **`hooks:`**:mod 接收的事件。`default matcher key: plugin` 注释表示其前面的 hook [会跳过其他 mod 的控件和绘制内容](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#hook-other-mods-drawings-and-controls)。

168* **`calls:`**:其代码调用的 mods API 方法

167 169 

168查看 `calls:` 行以获取这些:170[mods API](https://code.claude.com/docs/zh-CN/plugins/mods/api.md)(在 mod 的代码中写作 `$`)是 mod 到达文件、进程和网络的方式。Claude Code 拒绝加载以此命令无法读取的方式使用 mods API 的 mod。

171 

172不要批准未通过此命令的 mod,因为某些失败并不会阻止它加载。请在 Claude Code v2.1.323 或更高版本上运行此命令(在这些版本中,较长的列表会以相同标签延续到更多行),并阅读每一行 `hooks:` 和 `calls:`。在 `calls:` 行中,查找以下内容:

169 173 

170| 调用 | 它的含义 |174| 调用 | 它的含义 |

171| :- | :- |175| :- | :- |


174| `$.http.fetch` | 发出网络请求 |178| `$.http.fetch` | 发出网络请求 |

175| `$.env.get`, `$.settings.read` | 读取环境变量和设置,可以保存 API 密钥。输出中的 `env reads:` 行命名每个变量。 |179| `$.env.get`, `$.settings.read` | 读取环境变量和设置,可以保存 API 密钥。输出中的 `env reads:` 行命名每个变量。 |

176| `$.env.set` | 为 Claude Code 以及它启动的每个命令和 MCP 服务器设置环境变量,可以改变这些程序运行的内容。`env writes:` 行命名每个变量。 |180| `$.env.set` | 为 Claude Code 以及它启动的每个命令和 MCP 服务器设置环境变量,可以改变这些程序运行的内容。`env writes:` 行命名每个变量。 |

177| `$.mcp.call` | 在连接的 MCP 服务器上调用工具,在会话的权限规则下 |181| `$.mcp.call` | 在连接的 MCP 服务器上调用工具,不会出现权限提示。在拒绝规则或托管询问规则下,Claude Code 会拒绝该调用。对于标记为 [`requiresUserInteraction`](https://code.claude.com/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的工具,或您的组织[设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的工具(在该设置适用于 Claude Code 的情况下),它也会拒绝调用。 |

178| `$.model.complete` | 使用用户的计划或 API 密钥进行模型调用 |182| `$.model.complete` | 使用用户的计划或 API 密钥进行模型调用 |

179| `$.prompt.submit` | 提交提示,可以将其作为用户自己的话语发送 |183| `$.prompt.submit` | 提交提示,可以将其作为用户自己的话语发送 |

180| `$.session.send` | 发送另一个会话、子代理或[队友](https://code.claude.com/docs/zh-CN/agent-teams.md)的 Claude 读取的消息 |184| `$.session.send` | 发送另一个会话、子代理或[队友](https://code.claude.com/docs/zh-CN/agent-teams.md)的 Claude 读取的消息 |


316 320 

317Claude Code 每次即将采取行动(例如运行工具)时都会触发一个事件,并依次将其传递给每个 mod。计为您的 mod [在用户 mod 之前运行](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in),即使您没有在任何地方列出它。要设置其位置,请在两个设置之一中列出其 id。id 是插件的名称、`@` 和市场的名称,例如 `acme-guard@acme-tools`。321Claude Code 每次即将采取行动(例如运行工具)时都会触发一个事件,并依次将其传递给每个 mod。计为您的 mod [在用户 mod 之前运行](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in),即使您没有在任何地方列出它。要设置其位置,请在两个设置之一中列出其 id。id 是插件的名称、`@` 和市场的名称,例如 `acme-guard@acme-tools`。

318 322 

319* **`prependPlugins`**:您的 mod 在任何用户 mod 之前看到每个事件,并在之后看到每个结果。它可以更改事件、拒绝事件或跳过用户 mod。323* **`prependPlugins`**:您的 mod 在任何用户 mod 之前看到事件,并在它们之后看到事件的结果。它可以更改事件、拒绝事件或跳过用户 mod。在 v2.1.323 或更高版本上,请检查您的 hook 是否仍能[触及其他 mod 的控件和绘制内容](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#hook-other-mods-drawings-and-controls)。

320* **`appendPlugins`**:您的 mod 在每个用户 mod 之后运行,因此它只看到这些 mod 传递的事件,并以它们传递的形式看到324* **`appendPlugins`**:您的 mod 在每个用户 mod 之后运行,因此它只看到这些 mod 传递的事件,并以它们传递的形式看到

321 325 

322此示例在 `/opt/acme/claude-plugins` 声明 `acme-tools` 市场,启用来自它的 `acme-guard`,并首先运行该 mod,内置守卫在其后:326此示例在 `/opt/acme/claude-plugins` 声明 `acme-tools` 市场,启用来自它的 `acme-guard`,并首先运行该 mod,内置守卫在其后:


359 363 

360每次另一个 mod 即将加载时,您的 mod 会在名为 [`plugin.register`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#other-mods) 的事件中收到 `claude plugin validate` 打印的列表。`prependPlugins` 中的 mod 可以读取该列表并拒绝该 mod。它也可以[按名称处理任何 mods API 调用](https://code.claude.com/docs/zh-CN/plugins/mods/api.md#reach-files-processes-and-the-network),以便针对每个其他 mod 记录或拒绝该调用。名称是去掉 `$.` 的方法,因此 `fs.write` 上的 hook 会看到每个 `$.fs.write` 调用。364每次另一个 mod 即将加载时,您的 mod 会在名为 [`plugin.register`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#other-mods) 的事件中收到 `claude plugin validate` 打印的列表。`prependPlugins` 中的 mod 可以读取该列表并拒绝该 mod。它也可以[按名称处理任何 mods API 调用](https://code.claude.com/docs/zh-CN/plugins/mods/api.md#reach-files-processes-and-the-network),以便针对每个其他 mod 记录或拒绝该调用。名称是去掉 `$.` 的方法,因此 `fs.write` 上的 hook 会看到每个 `$.fs.write` 调用。

361 365 

366> [!NOTE]

367>

368> 在 v2.1.323 或更高版本上,`ui.focus` hook 需要更宽的匹配器才能接收其他 mod 的 `$.ui.focus` 调用。请参阅[对其他 mod 的绘制内容和控件设置 hook](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#hook-other-mods-drawings-and-controls)。

369 

362此策略 mod 拒绝任何自身代码调用 `$.process.run` 或 `$.process.spawn` 的用户 mod。它还保留审计日志,将每个工具调用和 mod 写入的每个文件写入调试日志。因为它首先运行,日志记录的是请求的原始内容,在任何用户 mod 更改之前。将其保存为 `acme-guard/hooks/register.js`:370此策略 mod 拒绝任何自身代码调用 `$.process.run` 或 `$.process.spawn` 的用户 mod。它还保留审计日志,将每个工具调用和 mod 写入的每个文件写入调试日志。因为它首先运行,日志记录的是请求的原始内容,在任何用户 mod 更改之前。将其保存为 `acme-guard/hooks/register.js`:

363 371 

364```javascript acme-guard/hooks/register.js theme={null}372```javascript acme-guard/hooks/register.js theme={null}


403* **`e.tier`**:mod 将运行的位置,为 `prepend`、`user`、`append` 或 `builtin` 之一。用户安装的每个 mod 都是 `user`。411* **`e.tier`**:mod 将运行的位置,为 `prepend`、`user`、`append` 或 `builtin` 之一。用户安装的每个 mod 都是 `user`。

404* **`e.uses.calls`**:mod 调用的 mods API 方法,每个写作 `namespace.method`,例如 `process.run`,不带 `claude plugin validate` 打印的 `$.`412* **`e.uses.calls`**:mod 调用的 mods API 方法,每个写作 `namespace.method`,例如 `process.run`,不带 `claude plugin validate` 打印的 `$.`

405 413 

406当用户安装调用 `$.process.run` 的 mod 时,该 mod 不会加载,其调试日志中有一行以 `refused by acme-guard:` 和您的原因结尾。在[热重新加载插件目录的会话](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)中,拒绝信息也会出现在会话记录中。要在不拒绝整个 mod 的情况下阻止某个调用,请从该调用名称上的 hook 返回 `{ deny: 'your reason' }`。414当用户安装调用 `$.process.run` 的 mod 时,该 mod 不会加载,其调试日志中有一行以 `refused by acme-guard:` 和您的原因结尾。在[热重新加载插件目录的会话](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)中,拒绝信息也会出现在会话记录中。

415 

416要在不拒绝整个 mod 的情况下阻止某个调用,请在[检查是谁发起了该调用](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#mods-api-calls)之后,从该调用名称上的 hook 返回 `{ deny: 'your reason' }`。

407 417 

408要将审计行发送到调试日志以外的地方,请从相同的 hook 中调用 `$.http.fetch`。418要将审计行发送到调试日志以外的地方,请从相同的 hook 中调用 `$.http.fetch`。

409 419 

Details

21 21 

22在交互式 Claude Code 会话中描述你想要的 mod,Claude 会编写它。Claude 使用一个名为 `plugin-authoring` 的内置[技能](https://code.claude.com/docs/zh-CN/skills.md),它告诉 Claude 在哪里编写 mod、你的版本有哪些事件和方法,以及 mod 如何被加载。当你请求一个 mod 时,Claude 可以加载该技能,或者你可以通过在 Claude Code 提示符处运行 `/plugin-authoring` 来自己加载它。22在交互式 Claude Code 会话中描述你想要的 mod,Claude 会编写它。Claude 使用一个名为 `plugin-authoring` 的内置[技能](https://code.claude.com/docs/zh-CN/skills.md),它告诉 Claude 在哪里编写 mod、你的版本有哪些事件和方法,以及 mod 如何被加载。当你请求一个 mod 时,Claude 可以加载该技能,或者你可以通过在 Claude Code 提示符处运行 `/plugin-authoring` 来自己加载它。

23 23 

24在 `auto` 和 `bypassPermissions` [权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)下,mod 可以在轮次结束时运行。在其他模式下,mod 会在您批准后运行,但[Claude 编写的 mod 无法加载的会话](#sessions-that-skip-the-approval)除外。24在 `auto` 和 `bypassPermissions` [权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md)下,Claude Code [可以不经询问就加载 mod](#sessions-that-skip-the-approval)。如果希望先被询问,请在 `default` 或 `acceptEdits` 模式下启动新会话,或者在请求该会话的第一个 mod 之前[切换](https://code.claude.com/docs/zh-CN/permission-modes.md#switch-permission-modes)到这两种模式之一。在[某些会话](#sessions-that-cant-load)中,mod 无法加载。

25 25 

26**1. 描述 mod**26**1. 描述 mod**

27 27 


33 33 

34**2. 批准 mod**34**2. 批准 mod**

35 35 

36当 Claude 保存第一个文件时,Claude Code 会询问是否为会话启用热重新加载。热重新加载会运行此会话中 Claude 编写的 mod,并应用之后的每次更改。如果没有出现该询问,请跳过此步骤。36当 Claude 保存第一个文件时,Claude Code 会询问是否为会话启用热重新加载。热重新加载会运行此会话中 Claude 编写的 mod,并应用之后的每次更改。在[不经询问就加载新 mod](#sessions-that-skip-the-approval) 或[无法加载 mod](#sessions-that-cant-load) 的会话中,您不会看到此询问。

37 37 

38选择以下答案之一:38选择以下答案之一:

39 39 


57* **在你启动的会话中**:在你的 shell 中,运行 `claude --plugin-dir ~/mods/git-branch`57* **在你启动的会话中**:在你的 shell 中,运行 `claude --plugin-dir ~/mods/git-branch`

58* **对于其他人**:[将其添加到市场](#share-your-mod),以便他们可以安装它58* **对于其他人**:[将其添加到市场](#share-your-mod),以便他们可以安装它

59 59 

60### 不经询问就加载 mod 的会话

61 

62在 `auto` 和 `bypassPermissions` 模式下,Claude Code 可以不经询问就启用热重新加载,mod 会在轮次结束时加载。

63 

64当您恢复会话时(无论是以交互方式还是使用 `claude -p`),其 mods 文件夹中已有的 mod [可以](#sessions-that-cant-load)不经询问就加载。要在恢复时阻止某个 mod 加载,请删除其目录。

65 

60### Claude 编写的 mod 无法加载的会话66### Claude 编写的 mod 无法加载的会话

61 67 

62Claude 编写的 mod 会在允许 mod 运行的受信任工作区中加载;在需要询问的模式下,须经您批准后才会加载。在以下会话中它不会加载:68在以下情况下,Claude 编写的 mod 不会加载,Claude Code 也不会询问是否加载它:

63 69 

64* **没有人可以批准**:会话无法向您显示提示,例如在 `auto` 和 `bypassPermissions` 模式之外的 `claude -p` 运行中,或在 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes)中70* **没有人可以批准**:会话处于 [`dontAsk` 模式](https://code.claude.com/docs/zh-CN/permission-modes),或者是在 `default` 或 `acceptEdits` 模式下编写该 mod 的 `claude -p` 运行,它无法向您显示热重新加载询问。

65* **工作区不受信任**:你还没有接受目录的信任提示71* **工作区不受信任的交互式会话**:您尚未接受该目录的信任提示

66* **mod 已被禁用**:您使用 `--safe-mode` 或 `--bare` 启动,您设置了 `disableAllHooks`,或者您组织的[托管设置阻止了它](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#choose-how-much-to-allow)72* **mod 已被禁用**:您使用 `--safe-mode` 或 `--bare` 启动,您设置了 `disableAllHooks`,或者您组织的[托管设置阻止了它](https://code.claude.com/docs/zh-CN/plugins/mods/admin.md#choose-how-much-to-allow)

67 73 

68## 自己编写一个 mod74## 自己编写一个 mod


292 298 

293在 `hooks:` 行中查看您的模块 hook 的事件,每个事件的过滤器都显示在大括号中;在 `calls:` 行中查看它调用的每个 mods API 方法。如果您的模块读取或设置环境变量,还请查看 `env reads:` 和 `env writes:` 行;如果它使用 [`$.state`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#keep-state),还请查看 `state reads:` 和 `state writes:` 行。对于每个可以拒绝操作的 hook,您还会看到一行,例如 `gating hook without .catch: tool.call`,它表明该 hook 是否有 [`.catch` 处理程序](https://code.claude.com/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。299在 `hooks:` 行中查看您的模块 hook 的事件,每个事件的过滤器都显示在大括号中;在 `calls:` 行中查看它调用的每个 mods API 方法。如果您的模块读取或设置环境变量,还请查看 `env reads:` 和 `env writes:` 行;如果它使用 [`$.state`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#keep-state),还请查看 `state reads:` 和 `state writes:` 行。对于每个可以拒绝操作的 hook,您还会看到一行,例如 `gating hook without .catch: tool.call`,它表明该 hook 是否有 [`.catch` 处理程序](https://code.claude.com/docs/zh-CN/plugins/mods/events#handle-a-hook-that-fails)。

294 300 

295如果您打算处理的某个事件未出现在第一行中,Claude Code 也不会调用该 hook。常见原因是事件名称拼写错误,该命令会将其报告为错误,例如 `"tool.calls" is not an event`。301如果您打算处理的某个事件未出现在 `hooks:` 行中,Claude Code 也不会调用该 hook。常见原因是事件名称拼写错误,该命令会将其报告为错误,例如 `"tool.calls" is not an event`。

296 302 

297遵循这些规则,以便静态分析可以找到每个 hook 和调用:303遵循这些规则,以便静态分析可以找到每个 hook 和调用:

298 304 

Details

91 91 

92为每个 matcher 注册一次事件。如果你为 `session.start` 调用 `on` 两次而没有 matcher,模块将无法加载,错误为 `on("session.start") is registered twice without a matcher`。将你的 mod 在会话启动时执行的所有操作放在一个 hook 中。92为每个 matcher 注册一次事件。如果你为 `session.start` 调用 `on` 两次而没有 matcher,模块将无法加载,错误为 `on("session.start") is registered twice without a matcher`。将你的 mod 在会话启动时执行的所有操作放在一个 hook 中。

93 93 

94#### hook 其他 mod 的绘制内容和控件

95 

96要 hook 另一个 mod 的控件、窗格或提示词上方的行,请传递带有 `plugin` 的匹配器。使用不带市场的 mod 名称,如 `{ plugin: 'other-mod' }`,或使用 `{ plugin: '*' }` 表示所有 mod。如果没有 `plugin`,`ui.press`、`ui.input`、`ui.select` 或 `ui.focus` 上的 hook 不会为其他 mod 的控件运行,`ui.render` hook 也会跳过它们的窗格以及它们在提示词上方的行。

97 

98没有匹配器的通配符 hook,例如 `on('*', hook)` 或 `on('ui.*', hook)`,仍会为每个 mod 运行。带有匹配器的通配符同样需要 `plugin`。

99 

100> [!NOTE]

101>

102> `{ plugin: '*' }` 需要 Claude Code v2.1.323 或更高版本。在 v2.1.323 之前,没有 `plugin` 的 hook 会为每个 mod 运行,而带有 `{ plugin: '*' }` 的 hook 不会运行。要在两个版本上都匹配每个 mod,请在 `ui.press`、`ui.input` 和 `ui.select` 上使用 `{ plugin: /./ }`。对于 `ui.focus` 和 `ui.render`,请使用 `on('ui.*', hook)` 并在 `next.event` 中检查事件名称,如 `if (next.event !== 'ui.focus') return next(e)`。

103 

94## 对 Claude 正在执行的操作设置 hook104## 对 Claude 正在执行的操作设置 hook

95 105 

96处理这些事件,可以在工具调用、提示词、轮次或设置读取发生时查看或更改它们。有关每个事件以及 hook 可以返回的内容,请参阅[事件参考](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#events)。106处理这些事件,可以在工具调用、提示词、轮次或设置读取发生时查看或更改它们。有关每个事件以及 hook 可以返回的内容,请参阅[事件参考](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#events)。

Details

177 177 

178## 选择绘制位置178## 选择绘制位置

179 179 

180`ui.render` hook 会为每个渲染站点运行,除非您将其限定到想要绘制的那个站点。要选择渲染站点,请将一个过滤器(称为[匹配器](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#filter-which-events-a-hook-handles))作为第二个参数传递给 `on`。`{ component: 'Pane' }` 仅为窗格运行该 hook。在 hook 中,`e.component` 指明站点名称,`e.surface` 说明哪个应用在绘制,`e.props` 保存站点自己的数据。对于窗格,`e.requestId` 是您打开它时使用的 `id`。180要选择 `ui.render` hook 在哪个渲染位置绘制,请将一个过滤器(称为[匹配器](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#filter-which-events-a-hook-handles))作为第二个参数传递给 `on`。`{ component: 'Pane' }` 仅为窗格运行该 hook。在 hook 中,`e.component` 指明位置名称,`e.surface` 说明哪个应用在绘制,`e.props` 保存该位置自己的数据。对于窗格,`e.requestId` 是您打开它时使用的 `id`。

181 181 

182窗格和条带在 mod 填充之前都是空的。选择一个选项卡,查看每个站点是什么以及如何在其中绘制:182窗格和条带在 mod 填充之前都是空的。选择一个选项卡,查看每个站点是什么以及如何在其中绘制:

183 183 


191 191 

192> [tab] Band above the prompt192> [tab] Band above the prompt

193>193>

194> 条带是紧贴输入框上方的一条区域。它始终存在,并由所有 mod 共享。194> 条带是紧贴输入框上方的一条区域。在其中绘制的每个 mod 都拥有自己的一行,这些行按照 [mod 的运行顺序](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)从顶部开始堆叠。

195>195>

196> 您的 hook 返回一棵树以在条带中显示内容,或返回 `next(e)` 以不显示任何内容。一棵树会替换[在您之后](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)运行的 mod 在那里绘制的内容。要保留它们的内容,请将 `await next(e)` 的结果放在您树中某个 [`Box`](#build-a-tree-from-elements) 的子项中。196> 要绘制您的 mod 的那一行,请过滤 `{ component: 'AbovePrompt' }` 并返回一棵[树](#build-a-tree-from-elements)。要不绘制任何内容,请返回 `next(e)`。

197>197>

198> 要在条带中绘制,请过滤 `{ component: 'AbovePrompt' }`。198> 在 v2.1.323 之前,所有 mod 在条带中共享同一个绘制内容,您的树会替换在您之后运行的 mod 所绘制的内容。要同时支持这些版本,请将 `await next(e)` 的结果放在一个[保持有效的 `Box`](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot#another-mods-band-shows-and-yours-doesnt) 的子项中。在 v2.1.323 或更高版本中,该子项不会绘制其他 mod 的行。

199 199 

200mod 还可以[在会话记录中放置自己的一行](#place-a-row-in-the-transcript)。200mod 还可以[在会话记录中放置自己的一行](#place-a-row-in-the-transcript)。

201 201 


281 281 

282当 Claude 工作时,加载指示器像以前一样显示动画,而 `under the spinner` 出现在其下方。282当 Claude 工作时,加载指示器像以前一样显示动画,而 `under the spinner` 出现在其下方。

283 283 

284权限提示不是渲染站点,因此 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是渲染站点,因此 mod 可以更改它。为该对话框返回的树必须恰好包含一次该引用,并将您的元素放在它的上方。否则,Claude Code 会绘制它自己的对话框。284权限提示不是渲染位置,因此 mod 无法更改它显示的内容。问题对话框 `AskUserQuestion` 是渲染位置,因此当 Claude 提问时,mod 可以更改该对话框。为该对话框返回的树必须恰好包含一次该引用,并将您的元素放在它的上方。否则,Claude Code 会绘制它自己的对话框。

285 285 

286### 在正确的时间打开窗格286### 在正确的时间打开窗格

287 287 

288窗格仅在您的 mod 打开它时出现。您如何以及何时打开它,决定了它是否获得键盘焦点、它请求多少空间,以及它在狭窄的终端中是否显示。288窗格仅在您的 mod 打开它时出现。您如何以及何时打开它,决定了它是否获得键盘焦点、它请求多少空间,以及它在狭窄的终端中是否显示。

289 289 

290要打开窗格,请使用您选择的 `id` 调用 [`$.ui.open`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#mods-api-methods)。`id` 是窗格的名称:您的 `ui.render` hook 会检查它,关闭窗格时您也要再次传递它。290要打开窗格,请使用您选择的 `id` 调用 [`$.ui.open`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#mods-api-methods)。`id` 是窗格的名称:您的 `ui.render` hook 会检查它,关闭窗格时您也要再次传递它。如果另一个 mod 已打开使用该 `id` 的窗格,则该调用会被拒绝。

291 291 

292```javascript theme={null}292```javascript theme={null}

293await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })293await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })


399 399 

400> [!NOTE]400> [!NOTE]

401>401>

402> `$.theme.set` 和 `$.theme.clear` 取代了 `$.ui.backdrop`,后者已在 Claude Code v2.1.319 中移除。请将 `$.ui.backdrop({ id: 'your-backdrop' })` 改为 `$.theme.set({ backdrop: { id: 'your-backdrop' } })`,将 `$.ui.backdrop(undefined)` 改为 `$.theme.clear()`,后者会移除任何 mod 设置的背景。402> `$.theme.set` 和 `$.theme.clear` 取代了 `$.ui.backdrop`,后者已在 Claude Code v2.1.319 中移除。请将 `$.ui.backdrop({ id: 'your-backdrop' })` 改为类似本节示例中的 `$.theme.set` 调用,将 `$.ui.backdrop(undefined)` 改为 `$.theme.clear()`,后者会移除任何 mod 设置的背景。

403 403 

404要在 Desktop 应用或移动应用中于对话后方放置背景,请使用 `backdrop` 调用 [`$.theme.set`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#mods-api-methods),然后在 [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#render-sites) 渲染位置绘制该背景。要移除背景,请调用 `$.theme.clear()`。终端不绘制背景。`$.theme.set` 和 `$.theme.clear` 需要 Claude Code v2.1.319 或更高版本。404要在 Desktop 应用或移动应用中于对话后方放置背景,请使用 `backdrop` 调用 [`$.theme.set`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#mods-api-methods),然后在 [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#render-sites) 渲染位置绘制该背景。要移除背景,请调用 `$.theme.clear()`。终端不绘制背景。`$.theme.set` 和 `$.theme.clear` 需要 Claude Code v2.1.319 或更高版本。

405 405 

406此 mod 在会话开始时设置背景、绘制该背景,并添加一个用于移除背景的 `/plain` 命令:406此示例需要 Claude Code v2.1.323 或更高版本,因此请先[检查您的版本](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off)。此 mod 在会话开始时设置背景、绘制该背景,并添加一个用于移除背景的 `/plain` 命令:

407 407 

408```javascript theme={null}408```javascript theme={null}

409export function register(on) {409export function register(on) {

410 // Neither a reload of this mod nor --resume keeps the backdrop, so set it here410 // Neither a reload of this mod nor --resume keeps the backdrop, so set it here

411 on('session.start', async ($, e, next) => {411 on('session.start', async ($, e, next) => {

412 await $.theme.set({ backdrop: { id: 'night-sky', colorScheme: 'dark' } })412 await $.theme.set({ backdrop: { scene: 'night-sky' }, overrideColorScheme: 'dark' })

413 await $.command.register({ name: 'plain', description: 'Take the backdrop off' })413 await $.command.register({ name: 'plain', description: 'Take the backdrop off' })

414 return next(e)414 return next(e)

415 })415 })

416 416 

417 on('ui.render', { component: 'Backdrop' }, async ($, e, next) => {417 on('ui.render', { component: 'Backdrop' }, async ($, e, next) => {

418 // This hook runs for every mod's backdrop, and another mod can use the same id418 // This hook runs for every mod's backdrop, and another mod can use the same scene

419 if (e.props.plugin !== $.plugin.name || e.props.id !== 'night-sky') return next(e)419 if (e.props.plugin !== $.plugin.name || e.props.scene !== 'night-sky') return next(e)

420 const { Box, Text } = $.ui.resolve(e)420 const { Box, Text } = $.ui.resolve(e)

421 return Box({ backgroundColor: 'blue', children: [Text({ children: ['Night sky'] })] })421 return Box({ backgroundColor: 'blue', children: [Text({ children: ['Night sky'] })] })

422 })422 })


428}428}

429```429```

430 430 

431> [!NOTE]

432>

433> 在 v2.1.323 之前,请在 `$.theme.set` 调用和 `e.props` 中用 `id` 代替 `scene`,并将 `overrideColorScheme` 移入 `backdrop` 中,改为 `colorScheme`。

434 

431要试用此示例,请将这段代码放入一个 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/create.md) 中,并在 Desktop 应用或移动应用中启动一个会话。要移除背景,请在 Claude Code 提示符处运行 `/plain`。会话记录会在 mod 名称后显示 `the theme is cleared`,例如对于名为 `night-sky` 的 mod,显示为 `night-sky: the theme is cleared`。435要试用此示例,请将这段代码放入一个 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/create.md) 中,并在 Desktop 应用或移动应用中启动一个会话。要移除背景,请在 Claude Code 提示符处运行 `/plain`。会话记录会在 mod 名称后显示 `the theme is cleared`,例如对于名为 `night-sky` 的 mod,显示为 `night-sky: the theme is cleared`。

432 436 

433请了解 `backdrop` 接受哪些内容、调用结果会告诉您什么,以及其他 mod 可以更改什么:437请了解 `backdrop` 接受哪些内容、调用结果会告诉您什么,以及其他 mod 可以更改什么:

434 438 

435* **`backdrop` 字段**:`id` 是您选择的[名称](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#limits),为必填项,其他字段均为可选。`colorScheme` 为 `'light'` 或 `'dark'`,用于说明您绘制的内容是浅色还是深色。有关 `glass`,请参阅[适用于您所用版本的类型](https://code.claude.com/docs/zh-CN/plugins/mods/create.md#get-the-types-for-your-build)。439* **`backdrop` 字段**:`scene` 是您为由您的 hook 绘制的背景选择的[名称](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#limits)。有关其他字段以及 `overrideColorScheme`,请参阅[适用于您所用版本的类型](https://code.claude.com/docs/zh-CN/plugins/mods/create.md#get-the-types-for-your-build)。

436* **背景是否被绘制**:当连接到该会话的 Desktop 或移动应用表示它会绘制背景时,`$.theme.set` 以 `isDrawn: true` 解析。否则 `isDrawn` 为 `false`,`reason` 说明原因。440* **背景是否被绘制**:当连接到该会话的 Desktop 或移动应用表示它会绘制背景时,`$.theme.set` 以 `isDrawn: true` 解析。否则 `isDrawn` 为 `false`,`reason` 说明原因。

437* **每个会话一个背景**:无论背景是由哪个 mod 设置的,`$.theme.set` 调用都会替换会话的背景,`$.theme.clear()` 都会移除该背景。请仅在用户要求时调用 `$.theme.clear()`。441* **每个会话一个背景**:无论背景是由哪个 mod 设置的,`$.theme.set` 调用都会替换会话的背景,`$.theme.clear()` 都会移除该背景。请仅在用户要求时调用 `$.theme.clear()`。

438 442 


510>514>

511> 将 `rows` 设为 2 或更大,即可获得[可容纳多行的字段](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md#input)。515> 将 `rows` 设为 2 或更大,即可获得[可容纳多行的字段](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md#input)。

512 516 

513[界面图库](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md)提供了大多数元素的示例和屏幕截图。此表列出了每个元素:517[界面图库](https://code.claude.com/docs/zh-CN/plugins/mods/gallery.md)提供了大多数元素的示例和屏幕截图。此表列出了主要元素:

514 518 

515| 元素 | 它绘制什么 | 位置 |519| 元素 | 它绘制什么 | 位置 |

516| :- | :- | :- |520| :- | :- | :- |


606测试和其他 mod 通过键来识别控件:610测试和其他 mod 通过键来识别控件:

607 611 

608* **测试**:[测试](https://code.claude.com/docs/zh-CN/plugins/mods/test.md#test-a-drawing)通过键按下控件或向其输入。612* **测试**:[测试](https://code.claude.com/docs/zh-CN/plugins/mods/test.md#test-a-drawing)通过键按下控件或向其输入。

609* **其他 mod**:Claude Code 在运行控件的回调之前,会触发 [`ui.press`、`ui.input` 或 `ui.select`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#interface),并在 `e.element` 中带上控件的键。另一个 mod 针对该事件的 hook 能看到用户输入到您的 `Input` 中的内容,可以更改该文本或阻止您的回调运行。mod API 没有为该 mod 提供按下您的按钮的方法。613* **其他 mod**:Claude Code 在运行控件的回调之前,会触发 [`ui.press`、`ui.input` 或 `ui.select`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#interface),并在 `e.element` 中带上控件的键。另一个 mod 的 hook 也可以[针对该事件运行](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#hook-other-mods-drawings-and-controls)。该 hook 能看到用户输入到您的 `Input` 中的内容,可以更改该文本或阻止您的回调运行。mod API 没有为该 mod 提供按下您的按钮的方法。

610 614 

611如果消息显示 `needs a key` 或 `is drawn twice`,请[根据该消息查找原因](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#needs-a-key)。615如果消息显示 `needs a key` 或 `is drawn twice`,请[根据该消息查找原因](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#needs-a-key)。

612 616 

Details

208 208 

209### mods API 调用209### mods API 调用

210 210 

211每个 [mods API 方法](#mods-api-methods)也是一个事件,以其命名空间和方法命名,如 `fs.read`、`model.complete` 或 `ui.open`。其上的 hook 会拦截在它之后运行的 mod 发出的调用,并可以返回 `next(e)`、`{ deny: reason }` 或 `{ value }`。211每个 [mods API 方法](#mods-api-methods)也是一个事件,以其命名空间和方法命名,如 `fs.read`、`model.complete` 或 `ui.open`。其上的 hook 可以返回 `next(e)`、`{ deny: reason }` 或 `{ value }`。

212 

213其中一些事件也会针对 Claude Code 自身的操作触发,因此在拒绝某个事件之前,请先检查 `next.origin.plugin` 是否为 `engine`。

212 214 

213## mods API 方法215## mods API 方法

214 216 


249| :- | :- | :- | :- |251| :- | :- | :- | :- |

250| [`Pane`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | 窗格的 `id` | 终端、Desktop、VS Code |252| [`Pane`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `title`、`isFocused`、`bodyColumns`、`placement`、`scroll`、`view` | 窗格的 `id` | 终端、Desktop、VS Code |

251| [`AbovePrompt`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |253| [`AbovePrompt`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`、`isWorking`、`maxRows`、`bodyColumns`、`scroll`、`view` | 单一实例 | 终端、Desktop |

254| `AbovePromptList`,即由 `AbovePrompt` 行组成的堆栈 | `rows`,一个列表,其中每个 mod 的行对应一个 `{ plugin, tree }`,外加 `AbovePrompt` 的 prop | 单一实例 | 终端、Desktop。需要 Claude Code v2.1.323 或更高版本。 |

252| [`Placed`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#place-a-row-in-the-transcript) | `id`、`plugin`、`onScreen` | `$.ui.place` 返回的 `requestId` | 终端 |255| [`Placed`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#place-a-row-in-the-transcript) | `id`、`plugin`、`onScreen` | `$.ui.place` 返回的 `requestId` | 终端 |

253| [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `id`、`plugin`、`glass`、`colorScheme` | `backdrop` | `desktop` 和 `mobile` 使用入口。当 Desktop 或移动应用请求绘制背景时,您的 hook 会运行。 |256| [`Backdrop`](https://code.claude.com/docs/zh-CN/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `scene`、`plugin`、`glass`、`overrideColorScheme`。在 v2.1.323 之前,`scene` 为 `id`,`overrideColorScheme` 为 `colorScheme`。 | `backdrop` | `desktop` 和 `mobile` 使用入口。当 Desktop 或移动应用请求绘制背景时,您的 hook 会运行。 |

254| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 所绘制行的 id | 终端、Desktop、VS Code |257| `UserMessage` | `text`、`origin`、`isExpanded`,以及视来源而定的 `task` 或 `from` | 所绘制行的 id | 终端、Desktop、VS Code |

255| `AssistantMessage` | 回复的文本 | 所绘制行的 id | 终端、Desktop、VS Code |258| `AssistantMessage` | 回复的文本 | 所绘制行的 id | 终端、Desktop、VS Code |

256| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop、VS Code |259| `ToolUse`, `ToolResult`, `ToolGroup` | 工具的名称、输入和结果 | 工具调用 id | 终端、Desktop、VS Code |


297* **`action`**:指定 Claude Code 自身的某个[快捷键操作](https://code.claude.com/docs/zh-CN/keybindings.md),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮300* **`action`**:指定 Claude Code 自身的某个[快捷键操作](https://code.claude.com/docs/zh-CN/keybindings.md),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮

298* **横栏上的数字 hotkey**:当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发301* **横栏上的数字 hotkey**:当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发

299* **折叠的横栏**:当横栏处于[折叠](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#when-the-user-collapses-the-band)状态时,`action` 绑定和 hotkey 都不会按下其中的按钮302* **折叠的横栏**:当横栏处于[折叠](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#when-the-user-collapses-the-band)状态时,`action` 绑定和 hotkey 都不会按下其中的按钮

300* **两个按钮使用同一 hotkey**:当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它303* **两个按钮使用同一 hotkey**:当您在同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。关于另一个 mod 的按钮使用同一按键的情况,请参阅[Hotkey 不起作用](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#hotkeys-do-nothing)。

301* **`variant`**:`primary` 或 `secondary`,其他任何值都会抛出错误。在终端中,`primary` 按钮会以强调色绘制,除非它设置了 `plain`。304* **`variant`**:`primary` 或 `secondary`,其他任何值都会抛出错误。在终端中,`primary` 按钮会以强调色绘制,除非它设置了 `plain`。

302* **`role`**:`dismiss` 将按钮标记为关闭按钮,其他任何值都会抛出错误。请在您的 `onPress` 中执行关闭操作。在包含文本和一行按钮的横栏中,Desktop 应用可以将该行的第一个 `dismiss` 按钮绘制为其自身的关闭控件。终端会像未设置 `role` 时一样绘制该按钮。305* **`role`**:`dismiss` 将按钮标记为关闭按钮,其他任何值都会抛出错误。请在您的 `onPress` 中执行关闭操作。在包含文本和一行按钮的横栏中,Desktop 应用可以将该行的第一个 `dismiss` 按钮绘制为其自身的关闭控件。终端会像未设置 `role` 时一样绘制该按钮。

303 306 


401| 单个树的嵌套深度 | 根元素以下 32 层 |404| 单个树的嵌套深度 | 根元素以下 32 层 |

402| 单个树中的元素和文本子项 | 20,000 |405| 单个树中的元素和文本子项 | 20,000 |

403| 单个树中的 `Raster` 单元格,即每个 `Raster` 的 `columns` 乘以其 `rows` | 262,144 |406| 单个树中的 `Raster` 单元格,即每个 `Raster` 的 `columns` 乘以其 `rows` | 262,144 |

407| 输入框上方堆叠的行 | 元素、`Raster` 单元格和 `Image` 字节数在这些行之间累加,并按单个树的限制计算 |

404| 单个树中所有 `Image` 的 PNG 或 RGBA 字节数 | 2 MiB |408| 单个树中所有 `Image` 的 PNG 或 RGBA 字节数 | 2 MiB |

405| `$.store` | JSON 总计 4 MiB |409| `$.store` | JSON 总计 4 MiB |

406| `$.session.messages()` | 最新的 4,096 个条目 |410| `$.session.messages()` | 最新的 4,096 个条目 |


412| 传递给 `next` 的已更改事件的嵌套深度,[异步生成器 hook](#events)(例如 `turn.step` 上的 hook)除外 | 28,000 层。超过此深度,`next` 会拒绝,消息以 `nesting deeper than 28000 levels is not supported` 结尾。需要 Claude Code v2.1.299 或更高版本。 |416| 传递给 `next` 的已更改事件的嵌套深度,[异步生成器 hook](#events)(例如 `turn.step` 上的 hook)除外 | 28,000 层。超过此深度,`next` 会拒绝,消息以 `nesting deeper than 28000 levels is not supported` 结尾。需要 Claude Code v2.1.299 或更高版本。 |

413| hook 返回值的嵌套深度,`ui.render`、`ui.resolve` 和异步生成器 hook 除外 | 28,000 层。超过此深度,该 hook 的结果会被拒绝,[报告此问题的通知](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)中包含 `nesting deeper than 28000 levels is not supported`。需要 Claude Code v2.1.299 或更高版本。 |417| hook 返回值的嵌套深度,`ui.render`、`ui.resolve` 和异步生成器 hook 除外 | 28,000 层。超过此深度,该 hook 的结果会被拒绝,[报告此问题的通知](https://code.claude.com/docs/zh-CN/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)中包含 `nesting deeper than 28000 levels is not supported`。需要 Claude Code v2.1.299 或更高版本。 |

414| 在 hook 模块的单个文件中相互嵌套的作用域(如函数、代码块和循环) | 2,000 |418| 在 hook 模块的单个文件中相互嵌套的作用域(如函数、代码块和循环) | 2,000 |

415| 命令、工具、子代理类型和窗格名称,以及已放置行或背景的 `id` | 字母、数字、`_` 和 `-`,最多 64 个字符 |419| 命令、工具、子代理类型和窗格名称,已放置行的 `id`,以及背景的 `scene` | 字母、数字、`_` 和 `-`,最多 64 个字符 |

416| 单个 `claude plugin test` 测试 | 5 秒,除非该测试设置了 `timeoutMs` |420| 单个 `claude plugin test` 测试 | 5 秒,除非该测试设置了 `timeoutMs` |

417 421 

418## 设置和环境变量422## 设置和环境变量

Details

139 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))139 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))

140 ```140 ```

141 141 

142 注册 stub 后,mount 成功,`ui.find({ type: 'Text' })` 在您的 hook 返回 `next(e)` 时返回该元素。142 注册 stub 后,mount 成功,`ui.find({ type: 'Text' })` 在您的 hook 返回 `next(e)` 时返回该元素。在 v2.1.323 或更高版本中,对于 band,请将您的 mod 名称作为第二个参数传给 `on`,例如 `{ plugin: 'my-mod' }`。如果不传,该 stub 不会回答您的 `next(e)`。

143 143 

144* **`turn.step` 的 stub 是一个异步生成器**,测试读取流到其末尾以获得结果:144* **`turn.step` 的 stub 是一个异步生成器**,测试读取流到其末尾以获得结果:

145 145 


192| `$.session.id`、`$.agent.list` | `() => ({ value: 'abc123' })`、`() => ({ value: [] })` |192| `$.session.id`、`$.agent.list` | `() => ({ value: 'abc123' })`、`() => ({ value: [] })` |

193| `session.send` | `() => ({ isDelivered: true })`。`e.to` 即使您的 mod 传递 `{ sessionId }`,也作为字符串到达。 |193| `session.send` | `() => ({ isDelivered: true })`。`e.to` 即使您的 mod 传递 `{ sessionId }`,也作为字符串到达。 |

194| `session.receive` | `($, e) => ({ text: e.text })`。使用 `$.session.receive({ origin: { kind: 'peer-send-message' }, text })` 触发它。 |194| `session.receive` | `($, e) => ({ text: e.text })`。使用 `$.session.receive({ origin: { kind: 'peer-send-message' }, text })` 触发它。 |

195| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })` |195| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })`。对于 band,请参阅[遵循测试工具包的规则](#follow-the-test-kit’s-rules)中的匹配器。 |

196 196 

197### 使用 `expect` 检查结果197### 使用 `expect` 检查结果

198 198 

199工具包提供以下断言,所选的断言跟在您要检查的值之后,例如 `expect(answer.text).toBe('ok')`:199`expect` 有自己的一组断言,例如 `toEqual` 和 `toHaveLength`,它们跟在您要检查的值之后,例如 `expect(answer.text).toBe('ok')`。如需完整列表,请在[您的构建版本的类型](https://code.claude.com/docs/zh-CN/plugins/mods/create.md#get-the-types-for-your-build)中的 `claude-code/index.d.ts` 里搜索 `type Matchers`。在断言前加上 `.not` 可检查相反的情况。要检查 promise 最终兑现或拒绝的结果,请紧接在 `expect(...)` 之后加上 `.resolves` 或 `.rejects`,并对该行使用 `await`,例如 `await expect(promise).rejects.toThrow()`。

200 

201* **相等性**:`toBe` 用于相同的值或对象,`toEqual` 用于结构,`toStrictEqual` 用于结构以及 `undefined` 字段和原型,`toMatchObject` 用于您指定的字段

202* **文本**:`toMatch`(接受正则表达式或子字符串)、`toStartWith` 和 `toEndWith`

203* **数字**:`toBeGreaterThan`、`toBeGreaterThanOrEqual`、`toBeLessThan`、`toBeLessThanOrEqual`

204* **内容**:`toContain` 用于子字符串或成员,`toContainEqual` 用于按结构比较的成员,以及 `toHaveLength` 和 `toHaveProperty`

205* **存在性和类型**:`toBeDefined`、`toBeUndefined`、`toBeNull`、`toBeTruthy`、`toBeFalsy`、`toBeNaN`、`toBeInstanceOf`

206* **抛出**:`toThrow`,用于由 `expect` 调用的函数,或用于您通过 `.rejects` 检查的 promise

207 

208在断言前加上 `.not` 可检查相反的情况,加上 `.resolves` 或 `.rejects` 可检查 promise 最终兑现或拒绝的结果。

209 200 

210当 `expect` 在您以普通函数(而非异步生成器)形式传给 `on` 的 stub 或 hook 中失败时,测试会失败。引擎会跳过该 hook,失败输出会指出其名称,例如 `in the test's store.set hook`。201当 `expect` 在您以普通函数(而非异步生成器)形式传给 `on` 的 stub 或 hook 中失败时,测试会失败。引擎会跳过该 hook,失败输出会指出其名称,例如 `in the test's store.set hook`。

211 202 

Details

223 223 

224### 显示了另一个 mod 的带,而您的带没有显示224### 显示了另一个 mod 的带,而您的带没有显示

225 225 

226输入框上方只有一个带,所有 mod 共用它。在[您的 mod 之前](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)运行的 mod 如果返回的树中不包含 `next(e)` 的结果,就会替换您的带。要同时显示两个带,请修改该 mod 的 hook,或请其作者修改:226每个在输入框上方绘制的 mod 都有自己的一行,因此当您的行缺失而另一个 mod 的行显示时,请检查以下原因:

227 227 

228* **保留其后的带**:将 `await next(e)` 的结果放入其树中某个 `Box` 的子元素中,如[选择绘制位置](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#pick-where-to-draw)中“输入框上方的带”选项卡所示228* **您的树未通过验证**:[写入调试日志](#read-the-debug-log),在其中搜索 [`ui.render hook skipped`](#a-pane-or-band-is-empty) 或 [`does not validate`](#ui-render-refused),并修复该行指出的问题。

229* **保持树有效**:不要为该 `Box` 或其外层的任何 `Box` 设置 `width`、`height`、`minWidth`、`minHeight`、`position`、`top`、`left`、`right`、`bottom`、`display` 或 `overflow` prop229* **这些行合起来超出了限制**:[写入调试日志](#read-the-debug-log)并在其中搜索 `past the limits of the band`。这些行[共享一棵树的限制](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#limits),因此请绘制更小的树,或请其他 mod 的作者这样做。

230* **另一个 mod 隐藏了您的行或在其上绘制**:如果日志中没有上述任何行,请逐个[关闭](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off)其他 mod。如果您的行重新出现,请该 mod 的作者进行修改。

230 231 

231要找到该 mod,请[写入调试日志](#read-the-debug-log)并在其中搜索 `answered ui.render without next()`。诸如 `other-mod (user) answered ui.render without next()` 的行会指明一个返回了树但未调用 `next(e)` 的 mod。该行不会指明[渲染位置](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#render-sites),因此仅绘制窗格的 mod 也可能出现在其中。调用了 `next(e)` 但丢弃其结果的 mod 不会产生该行,因此也请检查在您的 mod 之前运行的 hook。232在 v2.1.323 之前,所有 mod 共用带中的一个绘图。在[您的 mod 之前](https://code.claude.com/docs/zh-CN/plugins/mods/events.md#the-order-mods-run-in)运行的 mod 如果返回的树中不包含 `next(e)` 的结果,就会替换您的绘图。请更新 Claude Code,或请该 mod 的作者进行以下修改:

232 233 

233当某个 mod 自身的 hook 返回的树未通过验证时,该 mod 的带也会缺失,而其他 mod 的带仍会保留。要了解是哪个 mod 以及原因,请[写入调试日志](#read-the-debug-log)并在其中搜索 [`ui.render hook skipped`](#a-pane-or-band-is-empty)。234* **保留其后 mod 的绘图**:将 `await next(e)` 的结果放入其树中某个 `Box` 的子元素中

235* **保持树有效**:不要为该 `Box` 或其外层的任何 `Box` 设置 `width`、`height`、`minWidth`、`minHeight`、`position`、`top`、`left`、`right`、`bottom`、`display` 或 `overflow` prop

234 236 

235### 窗格或带为空或显示 Claude Code 的常规内容237### 窗格或带为空或显示 Claude Code 的常规内容

236 238 


246 248 

247### `ui.render` 行显示 `refused`249### `ui.render` 行显示 `refused`

248 250 

249`ui.render (<site>) refused:`,或[调试日志](#read-the-debug-log)中的 `ui.render (<site>): the chain settled on a tree that does not validate`,表示该位置的[树](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#build-a-tree-from-elements)超出了[大小限制](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#limits)。这两行都会先指明[渲染位置](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#render-sites),然后给出原因,原因中会指明该限制。251`ui.render (<site>) refused:`,或[调试日志](#read-the-debug-log)中的 `ui.render (<site>): the chain settled on a tree that does not validate`,表示该位置的[树](https://code.claude.com/docs/zh-CN/plugins/mods/interface.md#build-a-tree-from-elements)超出了[大小限制](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#limits)。这两行都会先指明[渲染位置](https://code.claude.com/docs/zh-CN/plugins/mods/reference.md#render-sites),然后给出原因。

250 252 

251请修改在该位置绘制的 mod,使其 [`ui.render`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#interface) hook 返回更小的树,或请其作者修改。如果会话记录行以 `hooks` 开头,则表示有多个已加载的 mod 为该位置设置了 `ui.render` hook,因此请检查每个这些 mod 的树。当多个 mod 在输入框上方的带嵌套成深度超过 32 层的树时,该行显示为:253请修改在该位置绘制的 mod,使其 [`ui.render`](https://code.claude.com/docs/zh-CN/plugins/mods/reference#interface) hook 返回更小的树,或请其作者修改。如果会话记录行以 `hooks` 开头,则表示有多个已加载的 mod 为该位置设置了 `ui.render` hook,因此请检查每个这些 mod 的树。对于输入框上方合起来超出带的限制的行,该行显示为:

252 254 

253```text theme={null}255```text theme={null}

254hooks: ui.render (AbovePrompt) refused: deeper than 32; nothing was drawn256hooks: ui.render (AbovePrompt) refused: a row past the limits of the band; nothing was drawn

255```257```

256 258 

259尽管该行如此结尾,未超出限制的行仍会绘制。

260 

257在 v2.1.307 之前,任何位置的 `refused:` 行都会报告任何未通过验证的树,并且对于 `Pane` 和 `AbovePrompt`,该行以 `; the engine drew its own` 结尾。在这些版本中,请修复原因中指出的问题。261在 v2.1.307 之前,任何位置的 `refused:` 行都会报告任何未通过验证的树,并且对于 `Pane` 和 `AbovePrompt`,该行以 `; the engine drew its own` 结尾。在这些版本中,请修复原因中指出的问题。

258 262 

259### `needs a key`、`is drawn twice` 或 `key each once`263### `needs a key`、`is drawn twice` 或 `key each once`


307 311 

308### 热键不起作用312### 热键不起作用

309 313 

310您的窗格或带没有键盘焦点、您的按钮位于已折叠的带中,或者绘图位于 VS Code 扩展中,而该扩展中的按钮没有热键。请按对应的情况操作:314您的窗格或带没有键盘焦点、您的按钮位于已折叠的带中、另一个 mod 使用了相同的按键,或者绘图位于 VS Code 扩展中。

311 315 

312* **没有键盘焦点**:按 Ctrl+X 然后 Tab,或在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md)中单击窗格或带。要让窗格在打开时获得焦点,请从命令中使用 `focus: true` 打开它。316* **没有键盘焦点**:按 Ctrl+X 然后 Tab,或在[全屏渲染](https://code.claude.com/docs/zh-CN/fullscreen.md)中单击窗格或带。要让窗格在打开时获得焦点,请从命令中使用 `focus: true` 打开它。

313* **按钮位于已折叠的带中**:该带显示一个以 `▸ plugin panel hidden` 开头的暗色行。按该行所示的按键(默认为 Ctrl+X 然后 Ctrl+A)即可[展开它](#plugin-panel-hidden)。317* **按钮位于已折叠的带中**:该带显示一个以 `▸ plugin panel hidden` 开头的暗色行。按该行所示的按键(默认为 Ctrl+X 然后 Ctrl+A)即可[展开它](#plugin-panel-hidden)。

314* **在 VS Code 扩展中**:单击按钮,或在按钮获得焦点后按 Enter318* **带中另一个 mod 的行使用了相同的热键**:在终端中,按下该键不会按下任何一个按钮。要进行检查,请逐个[关闭](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#turn-mods-on-or-off)其他绘制行的 mod,直到该键生效。请修改您的按钮的 `hotkey`,或请该 mod 的作者修改其热键。

319* **在 VS Code 扩展中,按钮没有热键**:单击按钮,或在按钮获得焦点后按 Enter

315 320 

316### 绘图在终端中有效,在桌面应用或 VS Code 中无效321### 绘图在终端中有效,在桌面应用或 VS Code 中无效

317 322 

Details

36 36 

37![两列图表,由五个直箭头连接。左侧是名为 my-plugin 的插件目录,包含 .claude-plugin/plugin.json 处的清单、skills/review/SKILL.md、agents/reviewer.md、hooks/hooks.json、.mcp.json 和其他组件。右侧是每个文件在您的会话中提供的内容:清单设置插件名称 my-plugin;skill 作为 /my-plugin:review 运行;agent 文件是 Claude 可以委派给的子代理;hooks 文件包含在生命周期事件上运行的 hooks;.mcp.json 添加了一个 MCP 服务器,为 Claude 提供工具。](https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max\&auto=format\&n=2Q_GtOEovg5qaBem\&q=85\&s=f623b64e82713b830e48174f0a922888)37![两列图表,由五个直箭头连接。左侧是名为 my-plugin 的插件目录,包含 .claude-plugin/plugin.json 处的清单、skills/review/SKILL.md、agents/reviewer.md、hooks/hooks.json、.mcp.json 和其他组件。右侧是每个文件在您的会话中提供的内容:清单设置插件名称 my-plugin;skill 作为 /my-plugin:review 运行;agent 文件是 Claude 可以委派给的子代理;hooks 文件包含在生命周期事件上运行的 hooks;.mcp.json 添加了一个 MCP 服务器,为 Claude 提供工具。](https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max\&auto=format\&n=2Q_GtOEovg5qaBem\&q=85\&s=f623b64e82713b830e48174f0a922888)

38 38 

39对于插件可以包含的每种组件类型,以及每种的示例,请参阅[插件组件](https://code.claude.com/docs/zh-CN/plugins/components.md)。要查看每个部分在插件目录中的位置,请使用该页面上的[插件浏览器](https://code.claude.com/docs/zh-CN/plugins/components.md#explore-the-plugin-directory)。39有关插件可以包含的组件类型及每种类型的示例,请参阅[插件组件](https://code.claude.com/docs/zh-CN/plugins/components.md)。要查看每个部分在插件目录中的位置,请使用该页面上的[插件浏览器](https://code.claude.com/docs/zh-CN/plugins/components.md#explore-the-plugin-directory)。

40 40 

41### 决定您是否需要插件41### 决定您是否需要插件

42 42 

Details

59 59 

60**5. 填写用户看到的元数据**60**5. 填写用户看到的元数据**

61 61 

62在 `plugin.json` 中设置 `description`、`author`、`homepage` 和 `repository`,并在插件根目录添加 `README.md`。`homepage` 必须解析为 URL。[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)列出了每个字段。62在 `plugin.json` 中设置 `description`、`author`、`homepage` 和 `repository`,并在插件根目录添加 `README.md`。`homepage` 必须解析为 URL。有关每个字段接受的内容,请参阅[清单参考](https://code.claude.com/docs/zh-CN/plugins/manifest-reference.md#fields)。

63 63 

64**6. 运行您的 eval 套件**64**6. 运行您的 eval 套件**

65 65 

Details

67> | `--capacity <N>` | 最大并发会话数。默认为 32。不能与 `--spawn=session` 一起使用。 |67> | `--capacity <N>` | 最大并发会话数。默认为 32。不能与 `--spawn=session` 一起使用。 |

68> | `--[no-]create-session-in-dir` | 服务器启动时在当前目录中预先创建一个会话,以便您可以立即开始输入。在 `worktree` 模式下,此会话保留在当前目录中,而按需创建的会话则获得独立的 worktree。默认开启。如果您传入 `--no-create-session-in-dir` 以不带任何会话启动,Claude Code 会在您停止服务器时归档服务器的会话,因此将没有可[恢复](#resume-sessions-after-stopping-the-server)的会话。 |68> | `--[no-]create-session-in-dir` | 服务器启动时在当前目录中预先创建一个会话,以便您可以立即开始输入。在 `worktree` 模式下,此会话保留在当前目录中,而按需创建的会话则获得独立的 worktree。默认开启。如果您传入 `--no-create-session-in-dir` 以不带任何会话启动,Claude Code 会在您停止服务器时归档服务器的会话,因此将没有可[恢复](#resume-sessions-after-stopping-the-server)的会话。 |

69> | `--permission-mode <mode>` | 为服务器的会话设置初始[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md),例如 `acceptEdits`。接受 `manual` 作为 `default` 的别名;无法识别的模式会使服务器在启动时停止并列出有效模式。 |69> | `--permission-mode <mode>` | 为服务器的会话设置初始[权限模式](https://code.claude.com/docs/zh-CN/permission-modes.md),例如 `acceptEdits`。接受 `manual` 作为 `default` 的别名;无法识别的模式会使服务器在启动时停止并列出有效模式。 |

70> | `--settings <file>` | 将 JSON 设置文件应用于服务器的会话,其[优先级](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)与 `claude --settings` 相同。请提供文件路径,而不是 JSON 字符串。需要 Claude Code v2.1.321 或更高版本。 |

70> | `--chrome` / `--no-chrome` | 在服务器创建的会话中打开或关闭 [Chrome 集成](https://code.claude.com/docs/zh-CN/chrome.md),以便您在另一台设备上工作时 Claude 可以使用您机器上的 Chrome。如果不带任一标志,服务器预先创建的会话以及您自己从 claude.ai/code 或 Claude 应用启动的任何会话都会以关闭 Chrome 的状态开始,即使您已[默认启用 Chrome](https://code.claude.com/docs/zh-CN/chrome.md#enable-chrome-by-default)。服务器为您的某个[项目](https://code.claude.com/docs/zh-CN/claude-projects.md)线程启动的会话则遵循该设置,但 `bypassPermissions` 模式除外。需要 Claude Code v2.1.273 或更高版本。 |71> | `--chrome` / `--no-chrome` | 在服务器创建的会话中打开或关闭 [Chrome 集成](https://code.claude.com/docs/zh-CN/chrome.md),以便您在另一台设备上工作时 Claude 可以使用您机器上的 Chrome。如果不带任一标志,服务器预先创建的会话以及您自己从 claude.ai/code 或 Claude 应用启动的任何会话都会以关闭 Chrome 的状态开始,即使您已[默认启用 Chrome](https://code.claude.com/docs/zh-CN/chrome.md#enable-chrome-by-default)。服务器为您的某个[项目](https://code.claude.com/docs/zh-CN/claude-projects.md)线程启动的会话则遵循该设置,但 `bypassPermissions` 模式除外。需要 Claude Code v2.1.273 或更高版本。 |

71> | `-d`, `--debug[=<filter>]` | 为服务器开启调试日志,可选择按类别过滤。只能以 `=` 形式传入过滤器,例如 `--debug=api,hooks`。需要 Claude Code v2.1.282 或更高版本。 |72> | `-d`, `--debug[=<filter>]` | 为服务器开启调试日志,可选择按类别过滤。只能以 `=` 形式传入过滤器,例如 `--debug=api,hooks`。需要 Claude Code v2.1.282 或更高版本。 |

72> | `--debug-file <path>` | 将调试日志写入指定文件。 |73> | `--debug-file <path>` | 将调试日志写入指定文件。 |

73> | `--verbose` | 显示详细的连接和会话日志。 |74> | `--verbose` | 显示详细的连接和会话日志。 |

74> | `--sandbox`, `--no-sandbox` | 已在 v2.1.300 中移除。如果您传入任一标志,服务器会[报错退出](https://code.claude.com/docs/zh-CN/errors.md#sandbox-is-not-supported-by-claude-remote-control),而不是启动。 |75> | `--sandbox`, `--no-sandbox` | 已在 v2.1.300 中移除。如果您传入任一标志,服务器会[报错退出](https://code.claude.com/docs/zh-CN/errors.md#sandbox-is-not-supported-by-claude-remote-control),而不是启动。 |

75>76>

76> 如果您在 `remote-control` 之前传入全局 `claude` 标志,或者包装脚本添加了此类标志,Claude Code 不会将该标志传递给服务器创建的会话。只有在确知丢弃该标志不会改变这些会话的能力时,Claude Code 才会放行该标志,例如 `--verbose` 或 `--model`。对于任何其他标志,例如 `--settings`,Claude Code 会[拒绝启动](https://code.claude.com/docs/zh-CN/errors.md#not-carried-over-to-the-sessions-remote-control-starts)并指出需要移除的标志。77> 如果您在 `remote-control` 之前传入全局 `claude` 标志,或者包装脚本添加了此类标志,Claude Code 不会将该标志传递给服务器创建的会话。对于某些标志,例如 `--verbose` 或 `--model`,服务器仍会启动。对于任何其他标志,服务器[不会启动](https://code.claude.com/docs/zh-CN/errors.md#not-carried-over-to-the-sessions-remote-control-starts)。要传入设置文件,请将 `--settings` 放在 `remote-control` 之后。

77>78>

78> 要对服务器启动的会话进行沙箱隔离,请在设置文件中开启[沙箱隔离](https://code.claude.com/docs/zh-CN/sandboxing.md)。79> 要对服务器启动的会话进行沙箱隔离,请在设置文件中开启[沙箱隔离](https://code.claude.com/docs/zh-CN/sandboxing.md)。

79>80>


375* **转发的对话框会过期**:Claude Code 会保持权限提示和 `AskUserQuestion` 问题处于打开状态,直到您作答。当 Claude Code 将其他类型的对话框转发到远程会话时(例如安全拒绝后显示的模型选择提示),默认会等待五分钟,然后关闭该对话框并按对话框的无操作默认值继续。设置 [`dialogExpiry`](https://code.claude.com/docs/zh-CN/settings-reference#dialogexpiry) 可调整或禁用该期限。需要 Claude Code v2.1.224 或更高版本。376* **转发的对话框会过期**:Claude Code 会保持权限提示和 `AskUserQuestion` 问题处于打开状态,直到您作答。当 Claude Code 将其他类型的对话框转发到远程会话时(例如安全拒绝后显示的模型选择提示),默认会等待五分钟,然后关闭该对话框并按对话框的无操作默认值继续。设置 [`dialogExpiry`](https://code.claude.com/docs/zh-CN/settings-reference#dialogexpiry) 可调整或禁用该期限。需要 Claude Code v2.1.224 或更高版本。

376* **Fable 使用额度同意提示不会被转发**:Claude Code 仅在会话运行的位置显示会话中途的 [Fable 使用额度同意提示](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits),而不会在您的设备上显示。当会话在终端中运行,且在 Claude Code 关闭该提示之前无人在终端作答时,该轮次将结束而不发送请求;请参阅[确认提示未得到回应](https://code.claude.com/docs/zh-CN/errors.md#the-prompt-to-confirm-went-unanswered)。377* **Fable 使用额度同意提示不会被转发**:Claude Code 仅在会话运行的位置显示会话中途的 [Fable 使用额度同意提示](https://code.claude.com/docs/zh-CN/model-config.md#fable-and-usage-credits),而不会在您的设备上显示。当会话在终端中运行,且在 Claude Code 关闭该提示之前无人在终端作答时,该轮次将结束而不发送请求;请参阅[确认提示未得到回应](https://code.claude.com/docs/zh-CN/errors.md#the-prompt-to-confirm-went-unanswered)。

377* **部分命令仅限本地使用**:仅在终端界面中运行的命令(例如 `/plugin` 或 `/resume`)只能从本地 CLI 使用,无论是否传递参数。从移动端或 Web 端输入 `/claude-api` 时同样不可用。Claude 在那里仍可以[自行加载该 skill](https://code.claude.com/docs/zh-CN/skills.md#work-on-claude-api-projects)。以下命令可在移动端和 Web 端使用:378* **部分命令仅限本地使用**:仅在终端界面中运行的命令(例如 `/plugin` 或 `/resume`)只能从本地 CLI 使用,无论是否传递参数。从移动端或 Web 端输入 `/claude-api` 时同样不可用。Claude 在那里仍可以[自行加载该 skill](https://code.claude.com/docs/zh-CN/skills.md#work-on-claude-api-projects)。以下命令可在移动端和 Web 端使用:

378 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 会打印计费 URL,而不是打开浏览器。`/reload-plugins` 仅在会话运行于交互式终端中时有效;没有交互式终端的会话会拒绝执行该命令。379 * 文本输出命令:`/compact`、`/clear`、`/context`、`/usage`、`/exit`、`/usage-credits`、`/recap` 和 `/reload-plugins`。`/usage-credits` 会以文本形式回复,例如告知在何处管理使用额度。`/reload-plugins` 仅在会话运行于交互式终端中时有效;没有交互式终端的会话会拒绝执行该命令。

379 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。在移动端和 Web 端,`/model` 和 `/effort` 接受参数,以代替终端中的选择器或滑块。380 * `/model`、`/effort`、`/fast`、`/color` 和 `/rename`:将值作为参数传递,例如 `/model sonnet` 或 `/effort high`。在移动端和 Web 端,`/model` 和 `/effort` 接受参数,以代替终端中的选择器或滑块。

380 * `/mcp`:在移动应用中,返回服务器状态的文本摘要,而不是打开选择器。在 Web 端,单独使用 `/mcp` 会打开 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai)目录,而不是返回摘要。当会话运行于交互式终端中时,`reconnect`、`enable` 和 `disable` [子命令](https://code.claude.com/docs/zh-CN/commands.md#all-commands)在两端均可使用。不带服务器名称的 `/mcp reconnect` 会重试所有失败或需要身份验证的服务器。要在不使用选择器的情况下授权 claude.ai 连接器,请参阅[从 shell 重新授权连接器](#authorize-a-connector-again-from-your-shell)。381 * `/mcp`:在移动应用中,返回服务器状态的文本摘要,而不是打开选择器。在 Web 端,单独使用 `/mcp` 会打开 [claude.ai 连接器](https://code.claude.com/docs/zh-CN/mcp.md#use-mcp-servers-from-claude-ai)目录,而不是返回摘要。当会话运行于交互式终端中时,`reconnect`、`enable` 和 `disable` [子命令](https://code.claude.com/docs/zh-CN/commands.md#all-commands)在两端均可使用。不带服务器名称的 `/mcp reconnect` 会重试所有失败或需要身份验证的服务器。要在不使用选择器的情况下授权 claude.ai 连接器,请参阅[从 shell 重新授权连接器](#authorize-a-connector-again-from-your-shell)。

381 * `/config`:在移动应用中,传递 `key=value` 可更改设置项,或不带参数运行以列出可设置的键。在 Web 端,`/config` 会改为打开 **Settings > Code** 或 **Settings > Claude Code**。382 * `/config`:在移动应用中,传递 `key=value` 可更改设置项,或不带参数运行以列出可设置的键。在 Web 端,`/config` 会改为打开 **Settings > Code** 或 **Settings > Claude Code**。

routines.md +1 −1

Details

431 431 

432每个定时任务都使用一个[云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md),用于控制网络访问、环境变量和设置脚本。任务在每次运行时都会继承该环境的网络策略。432每个定时任务都使用一个[云环境](https://code.claude.com/docs/zh-CN/cloud-environments.md),用于控制网络访问、环境变量和设置脚本。任务在每次运行时都会继承该环境的网络策略。

433 433 

434**Default** 环境使用 **Limited** 访问并勾选了 **Allow package managers**,因此其运行可以访问[默认允许列表](https://code.claude.com/docs/zh-CN/cloud-environments.md#default-allowed-domains)中的主机。向被阻止的主机发出的请求会失败,并返回 `403` 和 `x-deny-reason: host_not_allowed`。MCP 连接器流量通过 Anthropic 的服务器路由,因此您添加到任务中的连接器无需将其主机添加到 **Allowed domains** 即可正常工作。请在[连接器](#connectors)下移除您不需要的任何连接器。434**Default** 环境使用 **Limited** 访问并勾选了 **Allow package managers**,因此其运行可以访问[默认允许列表](https://code.claude.com/docs/zh-CN/cloud-environments.md#default-allowed-domains)中的主机。向被阻止的主机发出的请求会失败,并返回[诸如 `403` 或 `ENOTFOUND` 之类的错误](https://code.claude.com/docs/zh-CN/errors#host-not-allowed-in-a-cloud-session)。MCP 连接器流量通过 Anthropic 的服务器路由,因此您添加到任务中的连接器无需将其主机添加到 **Allowed domains** 即可正常工作。请在[连接器](#connectors)下移除您不需要的任何连接器。

435 435 

436要在您自己的某个环境中允许更多域名,请按照以下步骤操作。[组织共享环境](https://code.claude.com/docs/zh-CN/cloud-environments.md#organization-shared-environments)在此处以只读方式打开,因此需要由 Owner 在[管理设置](https://claude.ai/admin-settings)的 **Cloud environments** 页面中更改其网络访问。436要在您自己的某个环境中允许更多域名,请按照以下步骤操作。[组织共享环境](https://code.claude.com/docs/zh-CN/cloud-environments.md#organization-shared-environments)在此处以只读方式打开,因此需要由 Owner 在[管理设置](https://claude.ai/admin-settings)的 **Cloud environments** 页面中更改其网络访问。

437 437 

sandboxing.md +5 −3

Details

276 276 

277这些路径在操作系统层面强制执行,因此在沙箱内运行的所有命令(包括其子进程)都会遵守这些限制。当某个工具需要对特定位置的写入权限时,推荐使用这种方法,而不是使用 `excludedCommands` 将该工具完全排除在沙箱之外。277这些路径在操作系统层面强制执行,因此在沙箱内运行的所有命令(包括其子进程)都会遵守这些限制。当某个工具需要对特定位置的写入权限时,推荐使用这种方法,而不是使用 `excludedCommands` 将该工具完全排除在沙箱之外。

278 278 

279在 Linux 和 WSL2 上,针对尚不存在的路径的条目不会生效,因此请先创建该路径。

280 

279当您在多个[设置作用域](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)中定义同一个文件系统数组时,Claude Code 会将它们合并,组合来自每个作用域的路径,而不是用一个作用域的数组替换另一个作用域的数组。当某个条目受到[防止开发者放宽策略](#keep-developers-from-widening-the-policy)中的锁定约束时,Claude Code 会将该条目排除在合并之外。281当您在多个[设置作用域](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)中定义同一个文件系统数组时,Claude Code 会将它们合并,组合来自每个作用域的路径,而不是用一个作用域的数组替换另一个作用域的数组。当某个条目受到[防止开发者放宽策略](#keep-developers-from-widening-the-policy)中的锁定约束时,Claude Code 会将该条目排除在合并之外。

280 282 

281如果您在 CLI 上使用 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference) 或在 Agent SDK 中使用 [`settingSources`](https://code.claude.com/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 排除了某个来源,Claude Code 在构建沙箱配置时会忽略该来源的 `sandbox.filesystem` 条目、`Edit` 权限规则以及 `Read` 拒绝规则。需要 Claude Code v2.1.246 或更高版本。283如果您在 CLI 上使用 [`--setting-sources`](https://code.claude.com/docs/zh-CN/cli-reference) 或在 Agent SDK 中使用 [`settingSources`](https://code.claude.com/docs/zh-CN/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) 排除了某个来源,Claude Code 在构建沙箱配置时会忽略该来源的 `sandbox.filesystem` 条目、`Edit` 权限规则以及 `Read` 拒绝规则。需要 Claude Code v2.1.246 或更高版本。


376 378 

377由于关闭文件系统隔离会扩大沙箱命令的能力范围,Claude Code 仅接受来自以下设置来源的 `filesystem.disabled`:379由于关闭文件系统隔离会扩大沙箱命令的能力范围,Claude Code 仅接受来自以下设置来源的 `filesystem.disabled`:

378 380 

379* 用户设置、托管设置和 `--settings` CLI 标志可以设置它。`.claude/settings.json` 和 `.claude/settings.local.json` 中的项目设置不能设置它,因此检出的项目无法关闭文件系统隔离。381* 用户设置、托管设置和 `--settings` CLI 标志可以设置它。`.claude/settings.json` 和 `.claude/settings.local.json` 中的项目设置不能设置它。

380* 当托管设置配置了任何 `sandbox.filesystem` 内容,或列出了任何 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,只有托管设置可以设置该键。这可防止开发者在此类部署中关闭文件系统隔离;要为所有人关闭它,请在托管设置中设置 `"disabled": true`。382* 当托管设置配置了任何 `sandbox.filesystem` 内容,或列出了任何 `"mode": "deny"` 的 `sandbox.credentials.files` 条目时,只有托管设置可以设置该键。要为所有人关闭文件系统隔离,请在托管设置中设置 `"disabled": true`。

381* 当设置了 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](https://code.claude.com/docs/zh-CN/env-vars) 时,Claude Code 会忽略来自所有来源(包括托管设置)的 `filesystem.disabled`,并保持文件系统隔离开启。383* 当设置了 [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](https://code.claude.com/docs/zh-CN/env-vars) 时,Claude Code 会忽略来自所有来源(包括托管设置)的 `filesystem.disabled`。

382 384 

383[有效的](https://code.claude.com/docs/zh-CN/settings-reference.md#invalid-credential-entries-in-managed-settings) `mask` 条目不会锁定该键,即使 Claude Code 在启动时对其[回退为 `deny`](#mask-credential-files) 也是如此。请将无法掩码的路径(例如凭据目录)在托管设置中列为显式的 `deny` 条目,这样会锁定该键。385[有效的](https://code.claude.com/docs/zh-CN/settings-reference.md#invalid-credential-entries-in-managed-settings) `mask` 条目不会锁定该键,即使 Claude Code 在启动时对其[回退为 `deny`](#mask-credential-files) 也是如此。请将无法掩码的路径(例如凭据目录)在托管设置中列为显式的 `deny` 条目,这样会锁定该键。

384 386 

Details

117 117 

118* **侦听器**:侦听器是 `127.0.0.1` 上的转发代理。运行器在向控制平面注册之前启动侦听器,如果侦听器无法启动则在启动时退出。118* **侦听器**:侦听器是 `127.0.0.1` 上的转发代理。运行器在向控制平面注册之前启动侦听器,如果侦听器无法启动则在启动时退出。

119* **代理变量**:运行器重写您设置的 `HTTPS_PROXY` 和 `HTTP_PROXY` 中的任何一个,使其指向侦听器。该重写的值到达运行器本身、其生命周期钩子和它运行的每个会话。119* **代理变量**:运行器重写您设置的 `HTTPS_PROXY` 和 `HTTP_PROXY` 中的任何一个,使其指向侦听器。该重写的值到达运行器本身、其生命周期钩子和它运行的每个会话。

120* **令牌轮换**:轮换的令牌无需重启即可生效。对于侦听器打开到您的代理的每个连接,运行器再次运行您的命令或读取您的文件并将结果添加为标头。120* **令牌轮换**:轮换令牌后,新连接会携带新令牌,无需重启运行器。对于侦听器打开到您的代理的每个连接,运行器再次运行您的命令或读取您的文件并将结果添加为标头。已打开的连接仍可使用旧令牌,直到您的代理将其关闭或运行器退出。

121* **会话环境**:会话仅通过侦听器到达您的代理。在每个会话的环境中,运行器删除 `ALL_PROXY`,删除您未设置的 `HTTPS_PROXY` 或 `HTTP_PROXY` 的任何拼写,并将 `NO_PROXY` 固定到运行器自己的值。121* **会话环境**:会话仅通过侦听器到达您的代理。在每个会话的环境中,运行器删除 `ALL_PROXY`,删除您未设置的 `HTTPS_PROXY` 或 `HTTP_PROXY` 的任何拼写,并将 `NO_PROXY` 固定到运行器自己的值。

122* **日志**:运行器从不记录标头值。122* **日志**:运行器从不记录标头值。

123 123 


840 840 

841### 某些会话不计为空闲841### 某些会话不计为空闲

842 842 

843持有持续运行的后台任务的会话不计为空闲,所以 `--release-idle-session-min` 不会释放该会话的槽。等待从运行中工具调用内请求的批准的会话也不计为空闲。请同时设置 `--kill-session-after-min` 作为硬后挡。843当会话不计为空闲时,它会在超过 `--release-idle-session-min` 限制后继续占用其槽,因此请同时设置 `--kill-session-after-min`。

844 

845会话在其轮次结束后或其轮次等待其用户时计为空闲,但在以下情况中不计为空闲:

846 

847* 其轮次已结束且未在等待其用户,但有后台任务仍在运行

848* 其轮次正在等待某个非 MCP 工具在运行时请求的批准

849* 其轮次正在等待 MCP 服务器的 [`elicitation/create` 请求](https://code.claude.com/docs/zh-CN/mcp#respond-to-mcp-elicitation-requests)

844 850 

845`--kill-session-after-min` 是失控会话的后挡。在 v2.1.260 或更高版本的运行器上,达到限制的会话不会立即终止。运行器给它一个宽限窗口,默认 15 分钟,您可以使用 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 更改:851`--kill-session-after-min` 是失控会话的后挡。在 v2.1.260 或更高版本的运行器上,达到限制的会话不会立即终止。运行器给它一个宽限窗口,默认 15 分钟,您可以使用 [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](https://code.claude.com/docs/zh-CN/self-hosted-environments-reference#environment-variable-only-settings) 更改:

846 852 

847* 如果会话等待其用户,运行器释放它。如果其转向已结束并仅持有后台任务,运行器最多等待 60 秒以完成这些任务,然后释放它。会话在其用户发送下一条消息时恢复。853* 如果会话等待其用户,运行器释放它。如果其转向已结束并仅持有后台任务,运行器最多等待 60 秒以完成这些任务,然后释放它。会话在其用户发送下一条消息时恢复。

848* 如果转向仍在运行,运行器等待转向完成,或会话下一次等待其用户,然后释放它。854* 如果转向仍在运行,运行器等待转向完成,或会话下一次等待其用户,然后释放它。

849* 如果会话在宽限窗口结束时仍在运行器上,运行器终止它,任何运行转向的工作丢失。等待从运行中工具调用内请求的批准的转向是会话超过窗口的一种方式。855* 如果会话在宽限窗口结束时仍在运行器上,运行器终止它,任何正在运行的轮次的工作都会丢失。例如,如果会话的轮次正在等待某个非 MCP 工具在运行时请求的批准,该会话可能会一直停留在运行器上直到那时。当会话的轮次正在等待 MCP 服务器的 `elicitation/create` 请求时,会话也可能一直停留在那里。

850 856 

851释放的会话从新克隆恢复,所以它未推送的工作无论如何都消失了;请参阅[恢复的会话丢失未推送的工作](#resumed-sessions-lose-unpushed-work)。在 v2.1.260 之前,运行器在限制处终止每个会话,最多等待宽限窗口以完成正在运行的轮次。857释放的会话从新克隆恢复,所以它未推送的工作无论如何都消失了;请参阅[恢复的会话丢失未推送的工作](#resumed-sessions-lose-unpushed-work)。在 v2.1.260 之前,运行器在限制处终止每个会话,最多等待宽限窗口以完成正在运行的轮次。

852 858 

Details

252 252 

253缓存的 `env` 块中的其他所有键都在启动时生效。一旦服务器确认负载,并且在需要[安全批准](#security-approval-dialogs)时您已批准,被暂缓的变量将在会话的剩余时间内生效。253缓存的 `env` 块中的其他所有键都在启动时生效。一旦服务器确认负载,并且在需要[安全批准](#security-approval-dialogs)时您已批准,被暂缓的变量将在会话的剩余时间内生效。

254 254 

255如果您的组织需要通过代理访问 `api.anthropic.com`,暂缓只影响服务器提供的 `env` 块本身:通过 MDM 或 `managed-settings.json` 在[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms)的 `env` 块中设置的代理、在 shell 环境中设置的代理,或在[用户设置](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)中设置的代理,都会作用于设置获取。端点托管来源需要 Claude Code v2.1.223 或更高版本:缓存的服务器托管代理值在获取确认之前被暂缓,因此端点托管的值会按键填补并作用于获取本身。在 v2.1.223 之前,请使用 shell 环境或用户设置,使代理与缓存的服务器负载同时生效。首次启动时没有缓存,因此初始获取仍需要端点托管来源、shell 环境或用户设置。255如果获取需要通过代理,请在以下位置之一设置 `HTTPS_PROXY`:

256 

257* 通过 MDM 或 `managed-settings.json` 设置的[端点托管](https://code.claude.com/docs/zh-CN/managed-settings.md#delivery-mechanisms) `env` 块。此来源需要 Claude Code v2.1.223 或更高版本。在 v2.1.223 之前,请使用 shell 环境或用户设置,使代理[与缓存的服务器负载同时生效](#per-key-exceptions-across-managed-sources)。

258* shell 环境

259* [用户设置](https://code.claude.com/docs/zh-CN/settings.md#where-settings-live)

260 

261即使 `ALL_PROXY` 已经指定了该代理,也请设置 `HTTPS_PROXY`。

256 262 

257Claude Code 会将大多数设置更新应用到正在运行的会话中,无需重启。某些更新仅在下次启动时生效,包括 OpenTelemetry 导出器配置、`model` 键,以及从 `env` 块中移除变量。263Claude Code 会将大多数设置更新应用到正在运行的会话中,无需重启。某些更新仅在下次启动时生效,包括 OpenTelemetry 导出器配置、`model` 键,以及从 `env` 块中移除变量。

258 264 

settings.md +1 −1

Details

177 177 

178Claude Code 监视您的设置文件并在它们更改时重新加载它们,因此它在运行的会话中应用大多数编辑而不需要重启,包括对 `permissions`、`hooks` 和凭证助手(如 `apiKeyHelper`)的编辑。Claude Code 也在会话中期加载您创建的设置文件,如果其文件夹在会话启动时存在。对于项目的 `.claude/` 文件夹,即使您在同一会话中创建文件夹,它也加载文件。178Claude Code 监视您的设置文件并在它们更改时重新加载它们,因此它在运行的会话中应用大多数编辑而不需要重启,包括对 `permissions`、`hooks` 和凭证助手(如 `apiKeyHelper`)的编辑。Claude Code 也在会话中期加载您创建的设置文件,如果其文件夹在会话启动时存在。对于项目的 `.claude/` 文件夹,即使您在同一会话中创建文件夹,它也加载文件。

179 179 

180重新加载涵盖用户、项目、本地和托管设置,Claude Code 为每个它检测到的设置文件更改运行 [`ConfigChange` hook](https://code.claude.com/docs/zh-CN/hooks#configchange),而不是来自 MDM 或 claude.ai 控制台的托管设置。来自 MDM 或 claude.ai 控制台的托管设置按计划而不是保存时到达运行的会话;[传递表](https://code.claude.com/docs/zh-CN/managed-settings.md#choose-a-delivery-mechanism)给出每个来源的。180重新加载涵盖用户、项目、本地和托管设置。Claude Code 会针对设置文件的直接编辑运行 [`ConfigChange` hook](https://code.claude.com/docs/zh-CN/hooks#configchange),而不会针对来自 MDM 或 claude.ai 控制台的托管设置运行。通过 MDM 或来自 claude.ai 控制台的托管设置按计划而不是保存时到达运行的会话;[传递表](https://code.claude.com/docs/zh-CN/managed-settings.md#choose-a-delivery-mechanism)给出每个来源的情况。

181 181 

182Claude Code 仅在会话启动时读取某些键一次,因此对其中一个的编辑不会到达运行的会话。也等待重启的管理员端键,如 `requiredMinimumVersion`,在[策略适用的位置和时间](https://code.claude.com/docs/zh-CN/managed-settings.md#where-and-when-a-policy-applies)下列出。您最可能在会话中期编辑的:182Claude Code 仅在会话启动时读取某些键一次,因此对其中一个的编辑不会到达运行的会话。也等待重启的管理员端键,如 `requiredMinimumVersion`,在[策略适用的位置和时间](https://code.claude.com/docs/zh-CN/managed-settings.md#where-and-when-a-policy-applies)下列出。您最可能在会话中期编辑的:

183 183 

Details

235| [`strictPluginOnlyCustomization.mcp`](#strictpluginonlycustomization-mcp) | 屏蔽来自用户和项目来源的 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md) | 插件与 skill | 托管 |235| [`strictPluginOnlyCustomization.mcp`](#strictpluginonlycustomization-mcp) | 屏蔽来自用户和项目来源的 [MCP 服务器](https://code.claude.com/docs/zh-CN/mcp.md) | 插件与 skill | 托管 |

236| [`strictPluginOnlyCustomization.skills`](#strictpluginonlycustomization-skills) | 屏蔽来自用户和项目来源的 [skill](https://code.claude.com/docs/zh-CN/skills.md) | 插件与 skill | 托管 |236| [`strictPluginOnlyCustomization.skills`](#strictpluginonlycustomization-skills) | 屏蔽来自用户和项目来源的 [skill](https://code.claude.com/docs/zh-CN/skills.md) | 插件与 skill | 托管 |

237| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | 为子代理和主对话之外的其他请求选择[提示缓存生命周期](https://code.claude.com/docs/zh-CN/prompt-caching.md#cache-lifetime) | 模型与回复 | 任意文件 |237| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | 为子代理和主对话之外的其他请求选择[提示缓存生命周期](https://code.claude.com/docs/zh-CN/prompt-caching.md#cache-lifetime) | 模型与回复 | 任意文件 |

238| [`subagentStatusLine`](#subagentstatusline) | 使用您自己的命令重写[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)任务显示中的行 | 界面与终端 | 任意文件 |

239| [`switchModelsOnFlag`](#switchmodelsonflag) | 当[安全分类器](https://code.claude.com/docs/zh-CN/model-config.md#ask-before-switching)标记某个请求时,自动切换模型或暂停 | 模型与回复 | 任意文件 |238| [`switchModelsOnFlag`](#switchmodelsonflag) | 当[安全分类器](https://code.claude.com/docs/zh-CN/model-config.md#ask-before-switching)标记某个请求时,自动切换模型或暂停 | 模型与回复 | 任意文件 |

240| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | 停止加载[在您的 claude.ai 账户上启用的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins),并停止下载新插件 | 插件与 skill | 用户、本地或托管 |239| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | 停止加载[在您的 claude.ai 账户上启用的插件](https://code.claude.com/docs/zh-CN/plugins/loading.md#synced-plugins),并停止下载新插件 | 插件与 skill | 用户、本地或托管 |

241| [`syncClaudeAiSkills`](#syncclaudeaiskills) | 停止加载[在您的 claude.ai 账户上启用的 skill](https://code.claude.com/docs/zh-CN/skills.md#how-synced-skills-behave),并停止下载新 skill | 插件与 skill | 用户、本地或托管 |240| [`syncClaudeAiSkills`](#syncclaudeaiskills) | 停止加载[在您的 claude.ai 账户上启用的 skill](https://code.claude.com/docs/zh-CN/skills.md#how-synced-skills-behave),并停止下载新 skill | 插件与 skill | 用户、本地或托管 |


885}884}

886```885```

887 886 

888请参阅[将所有 shell 命令交由分类器处理](https://code.claude.com/docs/zh-CN/auto-mode-config.md#route-all-shell-commands-through-the-classifier)。887此键在 Code Mode 会话中的工作方式有所不同。请参阅[将所有 shell 命令交由分类器处理](https://code.claude.com/docs/zh-CN/auto-mode-config.md#route-all-shell-commands-through-the-classifier)。

889 888 

890### `disableAutoMode`889### `disableAutoMode`

891 890 


1533}1532}

1534```1533```

1535 1534 

1535在 Linux 和 WSL2 上,针对尚不存在的路径的条目不会生效,因此请先创建该路径。

1536 

1536Claude Code 会在会话加载的各设置作用域之间合并 `allowWrite` 条目以及来自您的 `Edit(...)` 允许权限规则的路径,当 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 启用时,会排除来自仓库设置的条目。[仓库锁定](https://code.claude.com/docs/zh-CN/sandboxing.md#repository-settings-under-an-admin-required-sandbox)也可能排除仓库的条目。`allowWrite` 条目无法解除[受保护路径](https://code.claude.com/docs/zh-CN/sandboxing.md#protected-paths)的保护。1537Claude Code 会在会话加载的各设置作用域之间合并 `allowWrite` 条目以及来自您的 `Edit(...)` 允许权限规则的路径,当 [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) 启用时,会排除来自仓库设置的条目。[仓库锁定](https://code.claude.com/docs/zh-CN/sandboxing.md#repository-settings-under-an-admin-required-sandbox)也可能排除仓库的条目。`allowWrite` 条目无法解除[受保护路径](https://code.claude.com/docs/zh-CN/sandboxing.md#protected-paths)的保护。

1537 1538 

1538### `sandbox.filesystem.denyWrite`1539### `sandbox.filesystem.denyWrite`


2453 2454 

2454#### `env` 值如何与您的 shell 交互2455#### `env` 值如何与您的 shell 交互

2455 2456 

2456* 此处的值会覆盖您在 shell 中导出的同名变量;当多个设置文件设置了同一变量时,以[优先级最高](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)的为准。[Claude Code 在 `env` 中忽略的变量](#variables-claude-code-ignores-in-env)列出了项目设置和本地设置的例外情况。2457* 此处的值会覆盖您在 shell 中导出的同名变量;当多个设置文件设置了同一变量时,以[优先级最高](https://code.claude.com/docs/zh-CN/settings.md#settings-precedence)的为准。[Claude Code 在 `env` 中忽略的变量](#variables-claude-code-ignores-in-env)列出了例外情况。

2457* 当 Claude Desktop 应用或[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)运行器启动会话时,它所构建的启动环境优先:对于启动环境已设置的变量,Claude Code 会忽略任何设置文件中的 `env` 值。[调试日志](https://code.claude.com/docs/zh-CN/debug-your-config.md)会列出每个被忽略的变量。2458* 当 Claude Desktop 应用或[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)运行器启动会话时,它所构建的启动环境优先:对于启动环境已设置的变量,Claude Code 会忽略任何设置文件中的 `env` 值。[调试日志](https://code.claude.com/docs/zh-CN/debug-your-config.md)会列出每个被忽略的变量。

2458* 要取消 shell 中的导出,请将该变量设置为 `""`。在选择提供商时,Claude Code 将空值视为未设置,而子进程会继承该空值。2459* 要取消 shell 中的导出,请将该变量设置为 `""`。在选择提供商时,Claude Code 将空值视为未设置,而子进程会继承该空值。

2459* 在此处设置的 `NO_COLOR` 和 `FORCE_COLOR` 仅作用于子进程。要更改 Claude Code 自身的界面颜色,请在启动 `claude` 之前在 shell 中设置它们。2460* 在此处设置的 `NO_COLOR` 和 `FORCE_COLOR` 仅作用于子进程。要更改 Claude Code 自身的界面颜色,请在启动 `claude` 之前在 shell 中设置它们。


2494 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](https://code.claude.com/docs/zh-CN/env-vars#variables),用于阻止 Claude Code 展开对文件和目录的 `@` 提及。2495 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](https://code.claude.com/docs/zh-CN/env-vars#variables),用于阻止 Claude Code 展开对文件和目录的 `@` 提及。

2495 2496 

2496 在 v2.1.251 之前,项目设置和本地设置还可以设置此列表中选择 Claude Code 文件写入位置或导出会话内容的变量,但 `HOME` 和 `XDG_CONFIG_HOME` 除外。在 v2.1.290 之前,它们还可以设置对话框计时器变量和 `CLAUDE_CODE_DISABLE_ATTACHMENTS`。2497 在 v2.1.251 之前,项目设置和本地设置还可以设置此列表中选择 Claude Code 文件写入位置或导出会话内容的变量,但 `HOME` 和 `XDG_CONFIG_HOME` 除外。在 v2.1.290 之前,它们还可以设置对话框计时器变量和 `CLAUDE_CODE_DISABLE_ATTACHMENTS`。

2498* 您可以在 shell、用户设置或 `--settings` 文件中通过 [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/zh-CN/env-vars#variables) 开启 [Code Mode](https://code.claude.com/docs/zh-CN/code-mode.md),但不能在托管设置、项目设置或本地设置中开启。如果前三者中的任何一个或托管设置中将其设为 `0`,则无论您在其他位置如何设置,Code Mode 都保持关闭。当托管设置中包含 `1` 时,请在用户设置中设置您自己的 `1`,因为 shell 中的 `1` 会被忽略

2497* 由 Claude Code 托管环境所拥有的身份变量(例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`)在所有文件中都会被忽略。2499* 由 Claude Code 托管环境所拥有的身份变量(例如 `CLAUDE_CODE_REMOTE` 和 `CLAUDE_CODE_ACCOUNT_UUID`)在所有文件中都会被忽略。

2498* [`CLAUDE_CODE_MESSAGING_SOCKET` 和 `CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/zh-CN/env-vars#variables) 由 Claude Code 自行导出,在所有文件中都会被忽略。忽略 socket 变量需要 Claude Code v2.1.224 或更高版本,忽略 token 变量需要 v2.1.228 或更高版本。2500* [`CLAUDE_CODE_MESSAGING_SOCKET` 和 `CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/zh-CN/env-vars#variables) 由 Claude Code 自行导出,在所有文件中都会被忽略。忽略 socket 变量需要 Claude Code v2.1.224 或更高版本,忽略 token 变量需要 v2.1.228 或更高版本。

2499* [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/zh-CN/sessions#name-the-project-directory-yourself) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略;需要 v2.1.234 或更高版本。2501* [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/zh-CN/sessions#name-the-project-directory-yourself) 仅由 Claude Code 从启动环境中读取,在所有文件中都会被忽略;需要 v2.1.234 或更高版本。


3173 3175 

3174该示例需要安装 [`jq`](https://jqlang.org/) 并在 shell 中运行。有关 PowerShell 和 Git Bash 的等效写法,请参阅 [Windows 配置](https://code.claude.com/docs/zh-CN/statusline.md#windows-configuration);有关完整设置,请参阅[手动配置状态栏](https://code.claude.com/docs/zh-CN/statusline.md#manually-configure-a-status-line)。3176该示例需要安装 [`jq`](https://jqlang.org/) 并在 shell 中运行。有关 PowerShell 和 Git Bash 的等效写法,请参阅 [Windows 配置](https://code.claude.com/docs/zh-CN/statusline.md#windows-configuration);有关完整设置,请参阅[手动配置状态栏](https://code.claude.com/docs/zh-CN/statusline.md#manually-configure-a-status-line)。

3175 3177 

3176### `subagentStatusLine`

3177 

3178当 Claude 运行[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)时,Claude Code 会在输入框下方的任务显示区域中列出它们,每个子代理占一行,显示 `name · description · token count`。此键允许您运行自己的命令来改写这些行,例如以百分比显示每个子代理的上下文使用情况。每次刷新时,Claude Code 会通过 stdin 发送一个 JSON 对象来表示可见的行,其中 `tasks` 数组包含每个子代理的 `id`、`name`、`status`、`model`、`tokenCount` 等信息;对于您以 `{"id", "content"}` 行形式写回的每个 `id`,Claude Code 会替换相应的行。您未写回的行保持默认渲染。

3179 

3180* **作用域**:[`Any file`](#scopes)。当 [`allowManagedHooksOnly`](#allowmanagedhooksonly) 开启,或在托管设置之外设置了 [`disableAllHooks`](#disableallhooks) 时,仅运行托管设置中的值。

3181* **类型**:对象,包含设置为 `"command"` 的 `type` 和 `command` 字符串

3182* **默认值**:未设置,因此 Claude Code 渲染默认行

3183 

3184```json settings.json theme={null}

3185{

3186 "subagentStatusLine": {

3187 "type": "command",

3188 "command": "jq -c '.tasks[] | {id, content: \"\\(.name): \\(.tokenCount) tokens\"}'"

3189 }

3190}

3191```

3192 

3193请参阅[子代理状态栏](https://code.claude.com/docs/zh-CN/statusline.md#subagent-status-lines)。

3194 

3195### `syntaxHighlightingDisabled`3178### `syntaxHighlightingDisabled`

3196 3179 

3197Claude Code 使用其内置的高亮器,按语言为其在终端中显示的 diff、代码块和文件预览中的代码着色。将此键设置为 `true` 可改为以纯文本显示,例如当颜色与您的终端主题冲突或拖慢屏幕阅读器时。3180Claude Code 使用其内置的高亮器,按语言为其在终端中显示的 diff、代码块和文件预览中的代码着色。将此键设置为 `true` 可改为以纯文本显示,例如当颜色与您的终端主题冲突或拖慢屏幕阅读器时。


3648* **其他所有内容都会被阻止**:用户、项目和本地 hook,其他已安装插件中的 hook 和 mod,以及在 Agent frontmatter 中声明的 hook。[Claude Code 内置的 mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#mods-built-into-claude-code) 会继续运行。如果只想阻止用户的 mod,请改为设置 [`allowManagedModsOnly`](https://code.claude.com/docs/zh-CN/plugins/mods/admin#set-options-on-the-built-in-guard)。3631* **其他所有内容都会被阻止**:用户、项目和本地 hook,其他已安装插件中的 hook 和 mod,以及在 Agent frontmatter 中声明的 hook。[Claude Code 内置的 mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md#mods-built-into-claude-code) 会继续运行。如果只想阻止用户的 mod,请改为设置 [`allowManagedModsOnly`](https://code.claude.com/docs/zh-CN/plugins/mods/admin#set-options-on-the-built-in-guard)。

3649* **命令来源的插件会被禁用**:Claude Code 还会禁用具有 [`command` 来源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您显式将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`3632* **命令来源的插件会被禁用**:Claude Code 还会禁用具有 [`command` 来源](https://code.claude.com/docs/zh-CN/plugins/marketplace-reference#command-plugin-source)的插件,包括在托管 `enabledPlugins` 中强制启用的插件,除非您显式将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`

3650* **市场的 `headersHelper` 命令会被阻止**:Claude Code 还会阻止市场的 [`headersHelper` 命令](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非显式将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`,但由托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本3633* **市场的 `headersHelper` 命令会被阻止**:Claude Code 还会阻止市场的 [`headersHelper` 命令](https://code.claude.com/docs/zh-CN/plugins/host-marketplace#authenticate-archive-downloads),除非显式将 [`disableCommandPluginSources`](#disablecommandpluginsources) 设置为 `false`,但由托管设置本身声明的市场除外。需要 Claude Code v2.1.238 或更高版本

3651* **状态栏和文件建议仅限于托管设置**:Claude Code 仅从托管设置中读取 [`statusLine`](https://code.claude.com/docs/zh-CN/statusline)、[`fileSuggestion`](#filesuggestion) 和 [`subagentStatusLine`](https://code.claude.com/docs/zh-CN/statusline#subagent-status-lines),遵循[状态栏和文件建议的限制规则](#status-line-and-file-suggestion-gates)3634* **状态栏和文件建议仅限于托管设置**:Claude Code 仅从托管设置中读取 [`statusLine`](https://code.claude.com/docs/zh-CN/statusline) 和 [`fileSuggestion`](#filesuggestion),遵循[状态栏和文件建议的限制规则](#status-line-and-file-suggestion-gates)

3652 3635 

3653设置此键后,[`/goal`](https://code.claude.com/docs/zh-CN/goal) 命令无法运行,因为它依赖于 hook。3636设置此键后,[`/goal`](https://code.claude.com/docs/zh-CN/goal) 命令无法运行,因为它依赖于 hook。

3654 3637 


3687 3670 

3688#### 状态栏和文件建议的限制规则3671#### 状态栏和文件建议的限制规则

3689 3672 

3690对于 `statusLine`、`fileSuggestion` 和 `subagentStatusLine`,Claude Code 会按以下顺序做出两项判断:3673对于 `statusLine` 和 `fileSuggestion`,Claude Code 会按以下顺序做出两项判断:

3691 3674 

3692* **完全关闭**:当托管设置设置了 `disableAllHooks` 时,或者当文件夹在与[设置文件中的 hook 相同的工作区信任规则](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)下不受信任时3675* **完全关闭**:当托管设置设置了 `disableAllHooks` 时,或者当文件夹在与[设置文件中的 hook 相同的工作区信任规则](https://code.claude.com/docs/zh-CN/permissions.md#what-runs-before-you-trust-a-folder)下不受信任时

3693* **仅限于托管设置**:当设置了 [`allowManagedHooksOnly`](#allowmanagedhooksonly) 时,当应用[设置优先级](https://code.claude.com/docs/zh-CN/hooks.md#disable-or-remove-hooks)后 `disableAllHooks` 在托管设置之外为 `true` 时,或者当您使用 `--safe-mode` 启动 Claude Code 时3676* **仅限于托管设置**:当设置了 [`allowManagedHooksOnly`](#allowmanagedhooksonly) 时,当应用[设置优先级](https://code.claude.com/docs/zh-CN/hooks.md#disable-or-remove-hooks)后 `disableAllHooks` 在托管设置之外为 `true` 时,或者当您使用 `--safe-mode` 启动 Claude Code 时


4659 4642 

4660* **作用域**:[`任意文件`](#scopes)4643* **作用域**:[`任意文件`](#scopes)

4661* **类型**:字符串,内置或自定义 Agent 的名称4644* **类型**:字符串,内置或自定义 Agent 的名称

4662* **默认值**:未设置,因此主线程以 Claude Code 的默认 Agent 运行4645* **默认值**:未设置

4663* **单会话覆盖**:`--agent` 在单个会话中优先于此键4646* **单会话覆盖**:`--agent` 在单个会话中优先于此键

4664 4647 

4665```json settings.json theme={null}4648```json settings.json theme={null}


4668}4651}

4669```4652```

4670 4653 

4671插件自身的 `settings.json` 也可以提供此键;请参阅[随插件提供默认设置](https://code.claude.com/docs/zh-CN/plugins/components.md#default-settings)。

4672 

4673### `crossSessionInbound`4654### `crossSessionInbound`

4674 4655 

4675选择此会话如何处理[来自您其他 Claude Code 会话的消息](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#control-inbound-messages)。当没有适用的值时,Claude Code 会根据两个会话的权限模式类别逐条消息做出决定。4656选择此会话如何处理[来自您其他 Claude Code 会话的消息](https://code.claude.com/docs/zh-CN/cross-session-messaging.md#control-inbound-messages)。当没有适用的值时,Claude Code 会根据两个会话的权限模式类别逐条消息做出决定。


5207 5188 

5208* **作用域**:[`Managed`](#scopes)。当服务器托管设置也下发列表时,由机器自身的管理员来源(MDM 策略和托管设置文件)设置的列表仍然生效:此时会话只能使用同时出现在两个列表中的提供商,因此服务器托管列表可以收窄机器允许的范围,但永远无法扩大。哪个机器来源的 `allowedProviders` 生效,遵循 [Claude Code 如何合并托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)。仅通过服务器托管设置下发的列表只会作用于[获取服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md#platform-availability)的会话。5189* **作用域**:[`Managed`](#scopes)。当服务器托管设置也下发列表时,由机器自身的管理员来源(MDM 策略和托管设置文件)设置的列表仍然生效:此时会话只能使用同时出现在两个列表中的提供商,因此服务器托管列表可以收窄机器允许的范围,但永远无法扩大。哪个机器来源的 `allowedProviders` 生效,遵循 [Claude Code 如何合并托管来源](https://code.claude.com/docs/zh-CN/managed-settings.md#how-claude-code-combines-managed-sources)。仅通过服务器托管设置下发的列表只会作用于[获取服务器托管设置](https://code.claude.com/docs/zh-CN/server-managed-settings.md#platform-availability)的会话。

5209* **类型**:字符串数组,每项为以下之一:5190* **类型**:字符串数组,每项为以下之一:

5210 * `"anthropic"`:Anthropic 自有主机上的 Anthropic API,通过 claude.ai 或 Console 登录或 API 密钥访问。将其与 [`forceLoginMethod`](#forceloginmethod) 或 [`forceLoginOrgUUID`](#forceloginorguuid) 搭配使用,可同时限制登录5191 * `"anthropic"`:Anthropic 自有主机上的 Anthropic API,通过 claude.ai 或 Console 登录或 API 密钥访问。将其与 [`forceLoginMethod`](#forceloginmethod) 或 [`forceLoginOrgUUID`](#forceloginorguuid) 搭配使用,可同时限制登录。[在用户机器上](https://code.claude.com/docs/zh-CN/managed-settings.md#where-and-when-a-policy-applies)运行的 Desktop Cowork 在登录 claude.ai 时算作 `"anthropic"`,因此如果机器的列表中没有该条目,Cowork [会在启动时被拒绝](https://code.claude.com/docs/zh-CN/errors.md#managed-settings-dont-allow-this-api-provider)。要让 Cowork 启动,请添加该条目,这也会使此列表对直接的 Anthropic 会话开放。

5211 * `"bedrock"`:[Amazon Bedrock](https://code.claude.com/docs/zh-CN/amazon-bedrock.md)5192 * `"bedrock"`:[Amazon Bedrock](https://code.claude.com/docs/zh-CN/amazon-bedrock.md)

5212 * `"vertex"`:[Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/google-vertex-ai.md),前身为 Vertex AI5193 * `"vertex"`:[Google Cloud 的 Agent Platform](https://code.claude.com/docs/zh-CN/google-vertex-ai.md),前身为 Vertex AI

5213 * `"foundry"`:[Microsoft Foundry](https://code.claude.com/docs/zh-CN/microsoft-foundry.md)5194 * `"foundry"`:[Microsoft Foundry](https://code.claude.com/docs/zh-CN/microsoft-foundry.md)

setup.md +5 −23

Details

141 141 

142### Alpine Linux 和基于 musl 的发行版142### Alpine Linux 和基于 musl 的发行版

143 143 

144在 Alpine 和其他 musl/uClibc 基础发行版上安装 Claude Code 需要 `bash` 和 `curl` 用于安装命令,以及 `libgcc`、`libstdc++` 和 `ripgrep` 用于运行时。Alpine 默认不包含 `bash` 或 `curl`,因此在您安装它们之前,文档中的安装命令会失败并显示 `not found` 错误。使用您的发行版的包管理器安装这些包,然后设置 `USE_BUILTIN_RIPGREP=0`。144在 Alpine 和其他基于 musl 的发行版上,[安装命令](#install-claude-code)需要 `bash` 和 `curl`,而 Claude Code 本身需要 `bash` 或 `zsh`。Alpine 默认不包含 `bash` 或 `curl`,因此在您安装它们之前,文档中的安装命令会失败并显示 `not found` 错误。

145 145 

146此示例在 Alpine 上安装所需的包:146此示例在 Alpine 上安装所需的包:

147 147 

148```bash theme={null}148```bash theme={null}

149apk add bash curl libgcc libstdc++ ripgrep149apk add bash curl

150```

151 

152在 Alpine 上,`ripgrep` 位于社区存储库中。如果 `apk` 报告该包缺失,请将社区存储库添加到 `/etc/apk/repositories`,使用您的 Alpine 版本:

153 

154```bash theme={null}

155echo "https://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories

156```

157 

158运行 `apk update` 以刷新包索引,然后重试 `apk add` 命令。

159 

160然后在您的 [`settings.json`](https://code.claude.com/docs/zh-CN/settings-reference#all-settings) 文件中将 `USE_BUILTIN_RIPGREP` 设置为 `0`:

161 

162```json theme={null}

163{

164 "env": {

165 "USE_BUILTIN_RIPGREP": "0"

166 }

167}

168```150```

169 151 

170## 验证您的安装152## 验证您的安装


443> wget -O /etc/apk/keys/claude-code.rsa.pub \425> wget -O /etc/apk/keys/claude-code.rsa.pub \

444> https://downloads.claude.ai/keys/claude-code.rsa.pub426> https://downloads.claude.ai/keys/claude-code.rsa.pub

445> echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories427> echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories

446> apk add claude-code428> apk add bash claude-code

447> ```429> ```

448>430>

449> 要切换到 `latest` 渠道,删除 `stable` 存储库行并添加 `latest` 存储库:431> 要切换到 `latest` 渠道,删除 `stable` 存储库行并添加 `latest` 存储库:


463>445>

464> 如果在您的 shell 中 `npm --version` 打印的版本以 `12` 开头,请改为按照[修复 npm 12 安装](https://code.claude.com/docs/zh-CN/troubleshoot-install.md#fix-an-npm-12-install)进行操作。不要使用 `sudo` 安装。Claude Code 在自我更新时运行 npm 不使用 `sudo`,因此需要 `sudo` 的安装无法自动更新。446> 如果在您的 shell 中 `npm --version` 打印的版本以 `12` 开头,请改为按照[修复 npm 12 安装](https://code.claude.com/docs/zh-CN/troubleshoot-install.md#fix-an-npm-12-install)进行操作。不要使用 `sudo` 安装。Claude Code 在自我更新时运行 npm 不使用 `sudo`,因此需要 `sudo` 的安装无法自动更新。

465 447 

466您也可以将 Claude Code 安装为全局 npm 包。npm 包需要 [Node.js 22 或更高版本](https://nodejs.org/en/download)。在较旧的 Node.js 版本上,npm 在安装期间打印 `EBADENGINE` 警告而不是失败;安装完成,`claude` 仍然运行,因为该包下载了在运行时不使用您的 Node.js 的原生二进制文件。448您也可以将 Claude Code 安装为全局 npm 包。npm 包需要 [Node.js 22 或更高版本](https://nodejs.org/en/download)。在较旧的 Node.js 版本上,npm 默认会打印 `EBADENGINE` 警告并完成安装,而不是失败。已安装的 `claude` 仍然可以运行,因为该包下载的原生二进制文件在运行时不使用您的 Node.js。

467 449 

468```bash theme={null}450```bash theme={null}

469npm install -g @anthropic-ai/claude-code451npm install -g @anthropic-ai/claude-code@latest

470```452```

471 453 

472npm 包安装与独立安装程序相同的原生二进制文件。npm 通过每个平台的可选依赖项(如 `@anthropic-ai/claude-code-darwin-arm64`)拉取二进制文件,并通过 postinstall 步骤将其链接到位。已安装的 `claude` 二进制文件本身不调用 Node。454npm 包安装与独立安装程序相同的原生二进制文件。npm 通过每个平台的可选依赖项(如 `@anthropic-ai/claude-code-darwin-arm64`)拉取二进制文件,并通过 postinstall 步骤将其链接到位。已安装的 `claude` 二进制文件本身不调用 Node。

skills.md +5 −1

Details

787 787 

788注入命令在技能呈现时永远不会提示权限。Claude Code 首先根据你的[权限规则](https://code.claude.com/docs/zh-CN/permissions.md)检查每一个。命令与拒绝规则匹配的命令会中止调用,显示 `Shell command permission check failed for pattern "..."`。788注入命令在技能呈现时永远不会提示权限。Claude Code 首先根据你的[权限规则](https://code.claude.com/docs/zh-CN/permissions.md)检查每一个。命令与拒绝规则匹配的命令会中止调用,显示 `Shell command permission check failed for pattern "..."`。

789 789 

790在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)之外,当命令的权限检查返回除允许之外的任何结果时,Claude Code 都会以相同的错误中止调用。这包括通常会询问您的规则。为避免未匹配的命令在此处导致中止,请使用 [`allowed-tools`](#pre-approve-tools-for-a-skill) 预先批准它。如果您的组织将权限规则限制为仅来自托管设置,请参阅[仅应用托管权限规则时](#when-only-managed-permission-rules-apply)。拒绝规则和询问规则仍然会覆盖 `allowed-tools`。请参阅[管理权限](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions)。790在[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)之外,当命令的权限检查返回除允许之外的任何结果时,Claude Code 都会中止调用。为避免未匹配的命令导致中止,请使用 [`allowed-tools`](#pre-approve-tools-for-a-skill) 预先批准它,但须遵守以下限制:

791 

792* **拒绝规则和询问规则**:与其中任一规则匹配的命令仍会导致中止。要查找该规则,请参阅[管理权限](https://code.claude.com/docs/zh-CN/permissions.md#manage-permissions)。

793* **仅托管规则**:如果会话中的 `/status` 将该 skill 列在 `allowed-tools ignored this session` 下,请参阅[仅应用托管权限规则时](#when-only-managed-permission-rules-apply)。

794* **未经验证的 Git 文件夹**:如果某个 `HEAD` 或 `.git` 文件可能不属于您,对于包含 `git` 或 Claude Code 无法解析的 Bash 命令,Claude Code 会忽略 `allowed-tools`。如果您信任该文件夹(例如您自己的裸仓库的 worktree),请在会话中使用 [`/permissions`](https://code.claude.com/docs/zh-CN/permissions#manage-permissions) 允许该命令。

791 795 

792在自动模式中,原本需要你批准的命令不会中止调用。技能加载时带有指令,告诉 Claude 首先运行该命令,然后 Claude 自己的调用通过[自动模式的常规检查](https://code.claude.com/docs/zh-CN/permission-modes.md#how-the-classifier-evaluates-actions)。调用仍然会在[分叉技能](#run-skills-in-a-subagent)中中止,该技能设置 `agent`,以及在 Claude 没有[运行注入命令的 shell 工具](#how-injected-commands-run)的会话中。796在自动模式中,原本需要你批准的命令不会中止调用。技能加载时带有指令,告诉 Claude 首先运行该命令,然后 Claude 自己的调用通过[自动模式的常规检查](https://code.claude.com/docs/zh-CN/permission-modes.md#how-the-classifier-evaluates-actions)。调用仍然会在[分叉技能](#run-skills-in-a-subagent)中中止,该技能设置 `agent`,以及在 Claude 没有[运行注入命令的 shell 工具](#how-injected-commands-run)的会话中。

793 797 

statusline.md +0 −40

Details

1085echo "$dirname [$model]"1085echo "$dirname [$model]"

1086```1086```

1087 1087 

1088## 子代理状态行

1089 

1090`subagentStatusLine` 设置为代理面板中显示的每个[子代理](https://code.claude.com/docs/zh-CN/sub-agents.md)呈现自定义行体。使用它来替换默认的 `name · description · token count` 行为你自己的格式。

1091 

1092```json theme={null}

1093{

1094 "subagentStatusLine": {

1095 "type": "command",

1096 "command": "~/.claude/subagent-statusline.sh"

1097 }

1098}

1099```

1100 

1101该命令在每个刷新周期运行一次,所有可见的子代理行作为单个 JSON 对象通过 stdin 传入。输入包括[基本 hook 字段](https://code.claude.com/docs/zh-CN/hooks.md#common-input-fields)、表示可用行宽的 `columns` 字段,以及每行对应一个条目的 `tasks` 数组,详见[任务字段](#task-fields)。

1102 

1103将一个 JSON 行写入 stdout,用于你想覆盖的每一行,形式为 `{"id": "<task id>", "content": "<row body>"}` 。`content` 字符串按原样呈现,包括 ANSI 颜色和 OSC 8 超链接。省略任务的 `id` 以保持该行的默认呈现;发出空 `content` 字符串以隐藏它。

1104 

1105适用于 `statusLine` 的相同信任、`disableAllHooks` 和 [`allowManagedHooksOnly`](https://code.claude.com/docs/zh-CN/settings-reference#allowmanagedhooksonly) 门控也适用于此处。插件可以在其[`settings.json`](https://code.claude.com/docs/zh-CN/plugins/manifest-reference#standard-layout)中提供默认的 `subagentStatusLine`,但与钩子不同,即使插件在托管设置 `enabledPlugins` 中被强制启用,插件值也不会在 `allowManagedHooksOnly` 下运行。

1106 

1107### 任务字段

1108 

1109`tasks` 数组中的每个条目使用以下字段描述一个子代理行。标记为可选的字段在没有值时会被省略,因此请在脚本中处理其缺失的情况。

1110 

1111| 字段 | 类型 | 描述 |

1112| :- | :- | :- |

1113| `id` | string | 任务的标识符。在为该行写回的行中将其作为 `id` 原样返回 |

1114| `name` | string,可选 | 子代理的[称呼名称](https://code.claude.com/docs/zh-CN/sub-agents.md#subagent-names)(如果有) |

1115| `type` | string | 任务类型:`local_agent` |

1116| `agentType` | string | 任务运行所用的子代理类型,例如内置的 [`Explore`](https://code.claude.com/docs/zh-CN/sub-agents#built-in-subagents) 或自定义的 `code-reviewer`。其值与 hook 接收到的 [`agent_type`](https://code.claude.com/docs/zh-CN/hooks#subagentstart) 相同。需要 Claude Code v2.1.293 或更高版本 |

1117| `status` | string | 任务状态,例如 `running`、`completed`、`failed` 或 `killed` |

1118| `description` | string | 任务的简短描述,例如 Claude 在生成该子代理时给出的描述 |

1119| `label` | string | Claude Code 提供的任务简短进度摘要(如果有),否则与 `description` 文本相同 |

1120| `startTime` | number | 任务开始时间,以自 Unix 纪元以来的毫秒数表示 |

1121| `model` | string,可选 | 任务运行所用的已解析模型 ID。在模型解析之前省略 |

1122| `effort` | string 或 number,可选 | 在子代理的[定义 frontmatter](https://code.claude.com/docs/zh-CN/sub-agents.md#supported-frontmatter-fields) 中或单次调用时为其设置的推理 effort:`low`、`medium`、`high`、`xhigh`、`max` 或数字 token 预算。这是所配置的值,当模型不支持该级别时,Claude Code 实际应用的 effort 可能会有所不同。未设置 effort 时省略 |

1123| `contextWindowSize` | number,可选 | `model` 的上下文窗口(以 token 计),计算方式与主状态栏的 [`context_window.context_window_size`](#context-window-fields) 相同,因此您可以根据 `tokenCount` 渲染每行百分比。当 `model` 被省略时也会省略 |

1124| `tokenCount` | number | 子代理的累计 token 数,即默认行中显示的数值 |

1125| `tokenSamples` | array of numbers | 最近最多 16 个 `tokenCount` 读数,每个刷新周期一个,按从旧到新排列,最后一个为当前值 |

1126| `cwd` | string | 子代理的工作目录:如果子代理在自己的目录(例如隔离的 worktree)中运行,则为该目录,否则为会话的工作目录 |

1127 

1128## 提示1088## 提示

1129 1089 

1130* **使用模拟输入测试**:`echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`1090* **使用模拟输入测试**:`echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`

Details

26 26 

27| 终端 | Shift+Enter 换行 |27| 终端 | Shift+Enter 换行 |

28| :- | :- |28| :- | :- |

29| Ghostty、Kitty、iTerm2、WezTerm、Warp、Apple Terminal、Windows Terminal | 无需设置即可工作 |29| Ghostty、Kitty、iTerm2、WezTerm、Warp、Windows Terminal | 无需设置即可工作 |

30| 支持 kitty 键盘协议的其他终端,例如 foot 和 Alacritty 0.16 或更高版本 | 无需设置即可工作。需要 Claude Code v2.1.269 或更高版本 |30| 支持 kitty 键盘协议的其他终端,例如 foot 和 Alacritty 0.16 或更高版本 | 无需设置即可工作。需要 Claude Code v2.1.269 或更高版本 |

31| VS Code、Cursor、Devin Desktop、Alacritty 0.16 之前版本、Zed | 运行一次 `/terminal-setup` |31| VS Code、Cursor、Devin Desktop、Alacritty 0.16 之前版本、Zed | 运行一次 `/terminal-setup` |

32| gnome-terminal、JetBrains IDE(如 PyCharm 和 Android Studio) | 不可用;使用 Ctrl+J 或 `\` 然后 Enter |32| gnome-terminal、JetBrains IDE(如 PyCharm 和 Android Studio) | 不可用;使用 Ctrl+J 或 `\` 然后 Enter |

Details

173 173 

174要限制托管机器可以使用的这些部署选项,请在托管设置中设置 [`allowedProviders`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders)。例如,`["bedrock"]` 仅允许 Amazon Bedrock;同时启用 Mantle 端点的 Bedrock 队列也列出 `"mantle"`。该条目说明哪些端点变量还需要托管 `env` 固定。需要 Claude Code v2.1.285 或更高版本。174要限制托管机器可以使用的这些部署选项,请在托管设置中设置 [`allowedProviders`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders)。例如,`["bedrock"]` 仅允许 Amazon Bedrock;同时启用 Mantle 端点的 Bedrock 队列也列出 `"mantle"`。该条目说明哪些端点变量还需要托管 `env` 固定。需要 Claude Code v2.1.285 或更高版本。

175 175 

176> [!NOTE]

177>

178> 当 Desktop 已登录 claude.ai 时,用户机器上的 Cowork 会话计为 [`"anthropic"`](https://code.claude.com/docs/zh-CN/settings-reference#allowedproviders)。如果您在 MDM 策略或托管设置文件中未将其列入此列表,该会话将被拒绝。如果将其列入,直接发送到 Anthropic 的会话也会通过此列表。

179 

176### 利用 MCP 进行集成180### 利用 MCP 进行集成

177 181 

178MCP 是为 Claude Code 提供更多信息的好方法,例如连接到票证管理系统或错误日志。让一个中央团队配置 MCP 服务器并将 `.mcp.json` 配置检入代码库,以便所有用户受益。[了解更多](https://code.claude.com/docs/zh-CN/mcp.md)。182MCP 是为 Claude Code 提供更多信息的好方法,例如连接到票证管理系统或错误日志。让一个中央团队配置 MCP 服务器并将 `.mcp.json` 配置检入代码库,以便所有用户受益。[了解更多](https://code.claude.com/docs/zh-CN/mcp.md)。

Details

127 127 

128Claude 使用 `AskUserQuestion` 在需要决策或澄清时向您提出多选题。通过选择一个选项来回答,或通过 `Other` 行或备注字段输入您自己的文本。128Claude 使用 `AskUserQuestion` 在需要决策或澄清时向您提出多选题。通过选择一个选项来回答,或通过 `Other` 行或备注字段输入您自己的文本。

129 129 

130当您通过输入自己的文本来回答时,Claude Code 会用中立的措辞转达答案,以便 Claude 遵循您写的内容,包括等待或先解释的请求。

131 

132### 问题自动继续超时130### 问题自动继续超时

133 131 

134问题保持打开状态,直到您回答。如果您想让一个未回答的问题最终关闭并让 Claude 在没有您的情况下继续,请在您的用户 `settings.json` 中或从 `/config` 中的 **Question auto-continue timeout** 行设置 [`askUserQuestionTimeout`](https://code.claude.com/docs/zh-CN/settings-reference#askuserquestiontimeout) 为 `60s`、`5m` 或 `10m`。132问题保持打开状态,直到您回答。如果您想让一个未回答的问题最终关闭并让 Claude 在没有您的情况下继续,请在您的用户 `settings.json` 中或从 `/config` 中的 **Question auto-continue timeout** 行设置 [`askUserQuestionTimeout`](https://code.claude.com/docs/zh-CN/settings-reference#askuserquestiontimeout) 为 `60s`、`5m` 或 `10m`。


525 523 

526## Read 工具行为524## Read 工具行为

527 525 

528Read 工具接收文件路径并返回带有行号的文件内容。Claude 被指示始终传递绝对路径。526Read 工具接收文件路径并返回带有行号的文件内容。

529 527 

530读取空文件会返回一个通知,说明文件存在但内容为空,而 `offset` 超过最后一行会返回一个通知,给出文件的行数。528读取空文件会返回一个通知,说明文件存在但内容为空,而 `offset` 超过最后一行会返回一个通知,给出文件的行数。

531 529 

Details

388> Get-Command claude | Select-Object Source388> Get-Command claude | Select-Object Source

389> ```389> ```

390 390 

391在 Linux 上,检查缺失的共享库。如果 `ldd` 显示缺失的库,您可能需要安装系统包。在 Alpine Linux 和其他基于 musl 的发行版上,请参阅 [Alpine Linux setup](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)。391在 Linux 上,检查缺失的共享库。如果 `ldd` 显示缺失的库,您可能需要安装系统包。在 Alpine Linux 和其他基于 musl 的发行版上,请参阅 [Linux musl 或 glibc 二进制文件不匹配](#linux-musl-or-glibc-binary-mismatch)。

392 392 

393```bash theme={null}393```bash theme={null}

394ldd "$(command -v claude)" | grep "not found"394ldd "$(command -v claude)" | grep "not found"


906 906 

907### Linux musl 或 glibc 二进制不匹配907### Linux musl 或 glibc 二进制不匹配

908 908 

909如果在安装后看到有关缺失共享库的错误,例如 `libstdc++.so.6` 或 `libgcc_s.so.1`,安装程序可能为您的系统下载了错误的二进制变体。909如果在安装后看到有关缺失共享库的错误,例如 `ld-linux-x86-64.so.2` 或 `ld-linux-aarch64.so.1`,安装程序可能为您的系统下载了错误的二进制变体。

910 910 

911```text theme={null}911```text theme={null}

912Error loading shared library libstdc++.so.6: No such file or directory912Error loading shared library ld-linux-x86-64.so.2: No such file or directory

913```913```

914 914 

915这可能发生在安装了 musl 交叉编译包的基于 glibc 的系统上,导致安装程序将系统误检测为 musl。

916 

917**解决方案:**915**解决方案:**

918 916 

9191. **检查您的系统使用哪个 libc**:9171. **检查您的系统使用哪个 libc**:


924 922 

9252. **如果您在 glibc 上但获得了 musl 二进制文件**,删除安装并重新安装。您也可以使用 `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json` 处的清单手动下载正确的二进制文件。使用 `ldd --version` 和 `ls /lib/libc.musl*` 的输出提交 [GitHub 问题](https://github.com/anthropics/claude-code/issues)。9232. **如果您在 glibc 上但获得了 musl 二进制文件**,删除安装并重新安装。您也可以使用 `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json` 处的清单手动下载正确的二进制文件。使用 `ldd --version` 和 `ls /lib/libc.musl*` 的输出提交 [GitHub 问题](https://github.com/anthropics/claude-code/issues)。

926 924 

9273. **如果您实际上在 musl 上**,例如 Alpine Linux,请安装所需的包:9253. **如果您在 musl 上但获得了 glibc 二进制文件**,请[删除安装](https://code.claude.com/docs/zh-CN/setup.md#uninstall-claude-code)。在 Alpine Linux 上,请先安装 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)中列出的包。然后运行[安装命令](https://code.claude.com/docs/zh-CN/setup.md#install-claude-code),它会安装 musl 二进制文件。

928 ```bash theme={null}

929 apk add libgcc libstdc++ ripgrep

930 ```

931 在 Alpine 上,`ripgrep` 在社区仓库中。如果 `apk` 报告包丢失,请参阅 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)。

932 926 

933### `Illegal instruction`927### `Illegal instruction`

934 928 


1001 995 

1002如果您在 WSL 内使用 `npm install -g` 安装了 Claude Code,这些问题适用。如果您使用了[本机安装程序](https://code.claude.com/docs/zh-CN/setup.md),请跳过本部分。在 npm 12 上,请按照[修复 npm 12 安装](#fix-an-npm-12-install)中的说明进行安装。996如果您在 WSL 内使用 `npm install -g` 安装了 Claude Code,这些问题适用。如果您使用了[本机安装程序](https://code.claude.com/docs/zh-CN/setup.md),请跳过本部分。在 npm 12 上,请按照[修复 npm 12 安装](#fix-an-npm-12-install)中的说明进行安装。

1003 997 

1004**OS 或平台检测问题。** 如果 npm 在安装期间报告平台不匹配,WSL 可能正在选择 Windows `npm`。首先运行 `npm config set os linux`,然后使用 `npm install -g @anthropic-ai/claude-code --force` 安装。不要使用 `sudo`。998**OS 或平台检测问题。** 如果 npm 在安装期间报告平台不匹配,请首先运行 `npm config set os linux`,然后使用 `npm install -g @anthropic-ai/claude-code@latest --force` 安装。不要使用 `sudo`。

1005 999 

1006**运行 `claude` 时 `exec: node: not found`。** 您的 WSL 环境可能使用 Node.js 的 Windows 安装。使用 `which npm` 和 `which node` 确认:以 `/mnt/c/` 开头的路径是 Windows 二进制文件,而 Linux 路径以 `/usr/` 开头。要修复此问题,请通过您的 Linux 发行版的包管理器或通过 [`nvm`](https://github.com/nvm-sh/nvm) 安装 Node。1000**运行 `claude` 时 `exec: node: not found`。** 您的 WSL 环境可能使用 Node.js 的 Windows 安装。使用 `which npm` 和 `which node` 确认:以 `/mnt/c/` 开头的路径是 Windows 二进制文件,而 Linux 路径以 `/usr/` 开头。要修复此问题,请通过您的 Linux 发行版的包管理器或通过 [`nvm`](https://github.com/nvm-sh/nvm) 安装 Node。

1007 1001 


1088 3. 重新安装:1082 3. 重新安装:

1089 1083 

1090 ```bash theme={null}1084 ```bash theme={null}

1091 npm install -g @anthropic-ai/claude-code1085 npm install -g @anthropic-ai/claude-code@latest

1092 ```1086 ```

1093 1087 

1094 如果此命令或第 1 步因 `EACCES` 失败,请切换到本机安装程序,而不是使用 `sudo` 重新运行。Claude Code 在自我更新时不使用 `sudo` 运行 npm,因此自动更新也会以同样的方式失败。1088 如果此命令或第 1 步因 `EACCES` 失败,请切换到本机安装程序,而不是使用 `sudo` 重新运行。Claude Code 在自我更新时不使用 `sudo` 运行 npm,因此自动更新也会以同样的方式失败。


1099 1093 

1100### npm `ENOTEMPTY` 更新或重新安装期间的错误1094### npm `ENOTEMPTY` 更新或重新安装期间的错误

1101 1095 

1102当您在现有安装上运行 `npm install -g @anthropic-ai/claude-code` 时,npm 在移动旧包目录时可能会失败:1096当您在现有安装上运行 `npm install -g @anthropic-ai/claude-code@latest` 时,npm 在移动旧包目录时可能会失败:

1103 1097 

1104```text theme={null}1098```text theme={null}

1105npm error code ENOTEMPTY1099npm error code ENOTEMPTY


1133然后重新安装。在 npm 12 上,请按照[修复 npm 12 安装](#fix-an-npm-12-install)操作。否则,请运行:1127然后重新安装。在 npm 12 上,请按照[修复 npm 12 安装](#fix-an-npm-12-install)操作。否则,请运行:

1134 1128 

1135```bash theme={null}1129```bash theme={null}

1136npm install -g @anthropic-ai/claude-code1130npm install -g @anthropic-ai/claude-code@latest

1137```1131```

1138 1132 

1139使用 `claude --version` 确认,它打印版本号,例如 `2.1.211 (Claude Code)`。1133使用 `claude --version` 确认,它打印版本号,例如 `2.1.211 (Claude Code)`。

Details

152> apk add ripgrep152> apk add ripgrep

153> ```153> ```

154>154>

155> `ripgrep` 在 Alpine 的社区存储库中。如果 `apk` 报告包缺失,请参阅 [Alpine Linux 设置](https://code.claude.com/docs/zh-CN/setup.md#alpine-linux-and-musl-based-distributions)。155> `ripgrep` 位于 Alpine 的 community 仓库中。

156 156 

157> [tab] Arch157> [tab] Arch

158>158>

vs-code.md +10 −0

Details

202 已有的思考块仍保持为空。在重新加载之后的回复中,点击某个块或按 `Ctrl+O` 即可将它们全部展开。202 已有的思考块仍保持为空。在重新加载之后的回复中,点击某个块或按 `Ctrl+O` 即可将它们全部展开。

203* **多行输入**:按 `Shift+Enter` 可添加新行而不发送。这在问题对话框的"Other"自由文本输入中同样适用。203* **多行输入**:按 `Shift+Enter` 可添加新行而不发送。这在问题对话框的"Other"自由文本输入中同样适用。

204 204 

205### 使用或关闭建议的提示词

206 

207Claude 回复后,面板可能会在空的输入框中以灰色斜体文本显示建议的下一条提示词。每条建议都会使用一个[简短的后台请求](https://code.claude.com/docs/zh-CN/interactive-mode.md#prompt-suggestions),该请求会计入您套餐的用量限制或 API 费用。

208 

209* **使用建议**:按 `Tab` 将其转为可编辑文本,然后发送。在接受建议之前按 `Enter` 不会发送该建议。

210* **编写您自己的提示词**:开始输入,建议即会隐藏。

211 

212要关闭建议,请在 `~/.claude/settings.json` 中将 [`promptSuggestionEnabled`](https://code.claude.com/docs/zh-CN/settings-reference#promptsuggestionenabled) 设置为 `false`。之后在新对话中将不再显示建议;对于已打开的对话,则在您从命令面板运行 **Developer: Reload Window** 之后不再显示。如果您将 [`CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION`](https://code.claude.com/docs/zh-CN/env-vars) 设置为 `true`,请在设置它的位置将其改为 `false`,否则您仍会看到建议。

213 

205### 引用文件和文件夹214### 引用文件和文件夹

206 215 

207使用 @ 提及为 Claude 提供有关特定文件或文件夹的上下文。当您输入 `@` 后跟文件或文件夹名称时,Claude 会读取该内容,并可以回答相关问题或对其进行更改。Claude Code 支持模糊匹配,因此您可以输入部分名称来查找所需内容:216使用 @ 提及为 Claude 提供有关特定文件或文件夹的上下文。当您输入 `@` 后跟文件或文件夹名称时,Claude 会读取该内容,并可以回答相关问题或对其进行更改。Claude Code 支持模糊匹配,因此您可以输入部分名称来查找所需内容:


936| `SSL certificate verification failed` 或 `Self-signed certificate detected` | [SSL 证书错误](https://code.claude.com/docs/zh-CN/errors.md#ssl-certificate-errors) |945| `SSL certificate verification failed` 或 `Self-signed certificate detected` | [SSL 证书错误](https://code.claude.com/docs/zh-CN/errors.md#ssl-certificate-errors) |

937| `Dictation error: WebSocket error:` 后跟证书错误(例如 `unable to get local issuer certificate`),或 Web 标签页上出现 `Remote server is not connected` | [在执行 TLS 检查的代理后方,听写或 Web 标签页失败](#dictation-or-the-web-tab-fails-behind-a-tls-inspecting-proxy) |946| `Dictation error: WebSocket error:` 后跟证书错误(例如 `unable to get local issuer certificate`),或 Web 标签页上出现 `Remote server is not connected` | [在执行 TLS 检查的代理后方,听写或 Web 标签页失败](#dictation-or-the-web-tab-fails-behind-a-tls-inspecting-proxy) |

938| `Claude Code process exited with code 1` 或其他代码 | [Claude Code process exited with code N](https://code.claude.com/docs/zh-CN/errors.md#claude-code-process-exited-with-code-n) |947| `Claude Code process exited with code 1` 或其他代码 | [Claude Code process exited with code N](https://code.claude.com/docs/zh-CN/errors.md#claude-code-process-exited-with-code-n) |

948| `Claude Code did not finish starting` 或 `Subprocess initialization did not complete within 60000ms` | [Subprocess initialization did not complete within 60000ms](https://code.claude.com/docs/zh-CN/errors.md#subprocess-initialization-did-not-complete-within-60000ms) |

939| `Could not locate the Claude CLI on PATH` | [Could not locate the Claude CLI on PATH](https://code.claude.com/docs/zh-CN/errors.md#could-not-locate-the-claude-cli-on-path) |949| `Could not locate the Claude CLI on PATH` | [Could not locate the Claude CLI on PATH](https://code.claude.com/docs/zh-CN/errors.md#could-not-locate-the-claude-cli-on-path) |

940| `The connection to Claude Code ended before this message completed` | [The connection to Claude Code ended before this message completed](https://code.claude.com/docs/zh-CN/errors.md#the-connection-to-claude-code-ended-before-this-message-completed) |950| `The connection to Claude Code ended before this message completed` | [The connection to Claude Code ended before this message completed](https://code.claude.com/docs/zh-CN/errors.md#the-connection-to-claude-code-ended-before-this-message-completed) |

941| `The Claude Code program for this computer, the <build> build, could not be found` | [The Claude Code program for this computer could not be found](https://code.claude.com/docs/zh-CN/errors.md#the-claude-code-program-for-this-computer-could-not-be-found) |951| `The Claude Code program for this computer, the <build> build, could not be found` | [The Claude Code program for this computer could not be found](https://code.claude.com/docs/zh-CN/errors.md#the-claude-code-program-for-this-computer-could-not-be-found) |

workflows.md +0 −2

Details

75| :- | :- |75| :- | :- |

76| `/deep-research <question>` | 在多个角度上扇出网络搜索问题,获取并交叉检查它找到的来源,对每个声明投票,并返回一份引用的报告,其中未通过交叉检查的声明已被过滤掉。需要[WebSearch 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior)可用 |76| `/deep-research <question>` | 在多个角度上扇出网络搜索问题,获取并交叉检查它找到的来源,对每个声明投票,并返回一份引用的报告,其中未通过交叉检查的声明已被过滤掉。需要[WebSearch 工具](https://code.claude.com/docs/zh-CN/tools-reference.md#websearch-tool-behavior)可用 |

77 77 

78`/deep-research` 仅在您调用它时运行。

79 

80[您自己保存的工作流](#save-the-workflow-for-reuse)以相同方式成为命令,并在 `/` 自动完成中与捆绑的工作流一起出现。78[您自己保存的工作流](#save-the-workflow-for-reuse)以相同方式成为命令,并在 `/` 自动完成中与捆绑的工作流一起出现。

81 79 

82### 观看运行80### 观看运行