SpyBara
Go Premium

Documentation 2026-10-06 23:59 UTC to 2026-10-07 07:57 UTC

24 files changed +105 −61. View all changes and history on the product overview
2026
Wed 7 07:57 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

717| `accountInfo()` | 返回账户信息 |717| `accountInfo()` | 返回账户信息 |

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

719| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器,名称解析方式与 `reconnectMcpServer()` 相同。禁用服务器会断开其连接并移除其工具。有关每种服务器所需的 Claude Code 版本,请参阅 [`toggleMcpServer()`](#togglemcpserver) |719| `toggleMcpServer(serverName, enabled)` | 按名称启用或禁用 MCP 服务器,名称解析方式与 `reconnectMcpServer()` 相同。禁用服务器会断开其连接并移除其工具。有关每种服务器所需的 Claude Code 版本,请参阅 [`toggleMcpServer()`](#togglemcpserver) |

720| `setMcpServers(servers)` | 动态替换此会话的 MCP 服务器集。使用 [`McpSetServersResult`](#mcpsetserversresult) 解决,命名添加和移除的服务器以及任何错误 |720| `setMcpServers(servers)` | 替换此方法所管理的 MCP 服务器:通过它添加的服务器以及[进程内 SDK 服务器](#createsdkmcpserver)。解析为一个 [`McpSetServersResult`](#mcpsetserversresult),指明添加和移除了哪些服务器以及任何错误;该部分说明了哪些其他服务器会保持连接 |

721| `readMcpResource(serverName, uri)` | *Alpha.* 从连接的 MCP 服务器读取一个 MCP Apps `ui://` 资源,以便您的应用可以呈现工具的小部件。使用 [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse) 解决。需要 TypeScript Agent SDK v0.3.280 或更高版本 |721| `readMcpResource(serverName, uri)` | *Alpha.* 从连接的 MCP 服务器读取一个 MCP Apps `ui://` 资源,以便您的应用可以呈现工具的小部件。使用 [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse) 解决。需要 TypeScript Agent SDK v0.3.280 或更高版本 |

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

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


1337| `mcpServer` | `{ name: string; source: string }` | 对于 `mcp__*` 工具,提供它的 MCP 服务器及其服务器定义来自何处,具有 [`McpServerProvenance`](#mcpserverprovenance) 的字段。对于其他工具不存在。需要 Agent SDK v0.3.274 或更高版本 |1337| `mcpServer` | `{ name: string; source: string }` | 对于 `mcp__*` 工具,提供它的 MCP 服务器及其服务器定义来自何处,具有 [`McpServerProvenance`](#mcpserverprovenance) 的字段。对于其他工具不存在。需要 Agent SDK v0.3.274 或更高版本 |

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

1339| `defaultToNo` | `boolean` | 当为 `true` 时,单个流浪击键不得批准此请求:在其拒绝选项上打开您的提示,不要预选批准,并提供无单键批准快捷方式。需要 Agent SDK v0.3.268 或更高版本 |1339| `defaultToNo` | `boolean` | 当为 `true` 时,单个流浪击键不得批准此请求:在其拒绝选项上打开您的提示,不要预选批准,并提供无单键批准快捷方式。需要 Agent SDK v0.3.268 或更高版本 |

1340| `suppressAlwaysAllowRule` | `boolean` | 当为 `true` 时,不为此请求提供持久始终允许选择,因为它写入的规则授予超过请求自身操作的权限。需要 Agent SDK v0.3.268 或更高版本 |1340| `suppressAlwaysAllowRule` | `boolean` | 为 `true` 时,不要为此请求提供持久的"始终允许"选项。需要 Agent SDK v0.3.268 或更高版本 |

1341| `toolUseID` | `string` | 助手消息内此特定工具调用的唯一标识符 |1341| `toolUseID` | `string` | 助手消息内此特定工具调用的唯一标识符 |

1342| `agentID` | `string` | 如果在 sub-agent 内运行,sub-agent 的 ID |1342| `agentID` | `string` | 如果在 sub-agent 内运行,sub-agent 的 ID |

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


5530 5530 

5531调用 `setMcpServers()` 时,Claude Code 会应用以下规则:5531调用 `setMcpServers()` 时,Claude Code 会应用以下规则:

5532 5532 

5533* **调用未指定的服务器**:Claude Code 会保持插件提供的服务器继续运行。需要 Agent SDK v0.3.210 或更高版本。5533* **调用未指定的服务器**:在[云端会话](/docs/zh-CN/claude-code-on-the-web)之外,Claude Code 会断开先前 `setMcpServers()` 调用添加的服务器以及进程内 SDK 服务器的连接,并在 `removed` 中列出它们。其他服务器会继续运行,且不会列在 `removed` 中,其中包括来自 [`mcpServers`](#options) 选项的 stdio、HTTP 和 SSE 服务器、来自设置文件的服务器以及插件提供的服务器。

5534* **调用指定的服务器**:除 CLI 在启动时启动的内置服务器外,只有当正在运行的服务器的配置与您传入的配置不同时,Claude Code 才会替换它。5534* **调用指定的服务器**:对于先前 `setMcpServers()` 调用添加的 stdio、HTTP 或 SSE 服务器,只有当其配置与您传入的配置不同时,Claude Code 才会替换它。已以该名称注册的进程内 SDK 服务器会保持原样,因此要替换它,请在一次调用中将其省略,然后在下一次调用中添加它。

5535* **CLI 在启动时启动的内置服务器**:如果调用指定了其中之一,Claude Code 会丢弃该条目并在 `errors` 中报告它。5535* **CLI 在启动时启动的内置服务器**:如果调用指定了其中之一,Claude Code 会丢弃该条目并在 `errors` 中报告它。

5536 5536 

5537Promise 会在新添加的 stdio、HTTP 和 SSE 服务器连接成功或失败后 resolve,因此已连接服务器的工具在下一轮次即可使用。5537Promise 会在新添加的 stdio、HTTP 和 SSE 服务器连接成功或失败后 resolve,因此已连接服务器的工具在下一轮次即可使用。

agent-view.md +1 −0

Details

819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | 删除因未推送提交而删除被拒绝的会话,丢弃 worktree 及其分支和提交。传递拒绝打印的确切值;参见 [删除会话会删除什么](#what-deleting-a-session-removes)。需要 v2.1.260 或更高版本 |819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | 删除因未推送提交而删除被拒绝的会话,丢弃 worktree 及其分支和提交。传递拒绝打印的确切值;参见 [删除会话会删除什么](#what-deleting-a-session-removes)。需要 v2.1.260 或更高版本 |

820| `claude rm <id> --force-remove-worktree <worktree-id>` | 删除因 git 或 `WorktreeRemove` hook 无法删除其 worktree 而删除被拒绝的会话,无论如何删除 worktree 目录并在仓库中保留其分支。传递拒绝打印的确切值;参见 [删除会话会删除什么](#what-deleting-a-session-removes)。需要 v2.1.268 或更高版本 |820| `claude rm <id> --force-remove-worktree <worktree-id>` | 删除因 git 或 `WorktreeRemove` hook 无法删除其 worktree 而删除被拒绝的会话,无论如何删除 worktree 目录并在仓库中保留其分支。传递拒绝打印的确切值;参见 [删除会话会删除什么](#what-deleting-a-session-removes)。需要 v2.1.268 或更高版本 |

821| `claude daemon status` | 打印 [supervisor](#the-supervisor-process) 的状态、版本、socket 目录和 worker 数量 |821| `claude daemon status` | 打印 [supervisor](#the-supervisor-process) 的状态、版本、socket 目录和 worker 数量 |

822| `claude daemon logs` | 跟踪 supervisor 的日志文件 [`~/.claude/daemon.log`](#where-state-is-stored),在新行到达时将其打印出来,直到您按下 `Ctrl+C` |

822| `claude daemon stop --any` | 停止 supervisor 进程及其托管的后台会话。传递 `--keep-workers` 以保持后台会话运行,以便下一个 supervisor 重新连接到它们。下一个 `claude agents` 或 `claude --bg` 启动一个新的 supervisor |823| `claude daemon stop --any` | 停止 supervisor 进程及其托管的后台会话。传递 `--keep-workers` 以保持后台会话运行,以便下一个 supervisor 重新连接到它们。下一个 `claude agents` 或 `claude --bg` 启动一个新的 supervisor |

823 824 

824`claude attach` 和 `claude logs` 可以使用运行中会话名称的一部分代替 ID,例如 `claude logs "auth refactor"`。传递名称需要 Claude Code v2.1.290 或更高版本。825`claude attach` 和 `claude logs` 可以使用运行中会话名称的一部分代替 ID,例如 `claude logs "auth refactor"`。传递名称需要 Claude Code v2.1.290 或更高版本。

agents.md +1 −1

Details

20 20 

21三个更多的工具支持这项工作,但它们本身不是运行代理的方式:21三个更多的工具支持这项工作,但它们本身不是运行代理的方式:

22 22 

23* [Worktrees](/docs/zh-CN/worktrees) 为每个会话提供单独的 git 检出,因此并行会话永远不会编辑相同的文件。将它们用于您自己运行的会话。代理视图会 [在编辑文件之前将分派的会话移到自己的 worktree 中](/docs/zh-CN/agent-view#how-file-edits-are-isolated),您生成的子代理也可以各自获得一个。23* [Worktree](/docs/zh-CN/worktrees) 为每个会话提供单独的 git 检出,因此并行会话各自编辑自己的文件副本。将它们用于您自己运行的会话。从 Agent 视图分派的会话会 [在编辑文件之前移到自己的 worktree 中](/docs/zh-CN/agent-view#how-file-edits-are-isolated),您生成的子代理也可以各自获得一个。

24* [跨会话消息传递](/docs/zh-CN/cross-session-messaging) 让 Claude 列出并消息传递您在这台机器上、另一台机器上或 [云中](/docs/zh-CN/claude-code-on-the-web) 的其他 Claude Code 会话,因此您自己运行的会话可以在彼此之间传递发现和状态。24* [跨会话消息传递](/docs/zh-CN/cross-session-messaging) 让 Claude 列出并消息传递您在这台机器上、另一台机器上或 [云中](/docs/zh-CN/claude-code-on-the-web) 的其他 Claude Code 会话,因此您自己运行的会话可以在彼此之间传递发现和状态。

25* [`/batch`](/docs/zh-CN/commands) 是一个 [skill](/docs/zh-CN/skills),它让 Claude 将一个大型更改分成 5 到 30 个 worktree 隔离的子代理。它是子代理和 worktrees 的打包使用,不是一个单独的协调风格。25* [`/batch`](/docs/zh-CN/commands) 是一个 [skill](/docs/zh-CN/skills),它让 Claude 将一个大型更改分成 5 到 30 个 worktree 隔离的子代理。它是子代理和 worktrees 的打包使用,不是一个单独的协调风格。

26 26 

Details

64</Note>64</Note>

65 65 

66<h3 id="prerequisites">66<h3 id="prerequisites">

67 前置条件67 前提条件

68</h3>68</h3>

69 69 

70在开始之前,请准备好以下内容:70在开始之前,请准备好以下内容:


73| - | - |73| - | - |

74| Claude Code v2.1.195 或更高版本 | `claude gateway` 子命令和网关登录流在 v2.1.195 中发布。早期的公开版本不包含它们。运行网关服务器的机器和每个开发人员的机器都必须是 v2.1.195 或更高版本;运行 `claude update` 获取最新版本。[Claude Platform on AWS 上游](/docs/zh-CN/claude-apps-gateway-config#claude-platform-on-aws)在网关服务器上需要 Claude Code v2.1.198 或更高版本。 |74| Claude Code v2.1.195 或更高版本 | `claude gateway` 子命令和网关登录流在 v2.1.195 中发布。早期的公开版本不包含它们。运行网关服务器的机器和每个开发人员的机器都必须是 v2.1.195 或更高版本;运行 `claude update` 获取最新版本。[Claude Platform on AWS 上游](/docs/zh-CN/claude-apps-gateway-config#claude-platform-on-aws)在网关服务器上需要 Claude Code v2.1.198 或更高版本。 |

75| OpenID Connect (OIDC) 身份提供商 | Okta、Microsoft Entra ID、Google Workspace、Keycloak 或 Dex,或任何其他符合 OIDC 的 IdP,如 PingFederate。网关针对它运行标准 OIDC 发现和授权代码流。不支持 SAML 和 LDAP。 |75| OpenID Connect (OIDC) 身份提供商 | Okta、Microsoft Entra ID、Google Workspace、Keycloak 或 Dex,或任何其他符合 OIDC 的 IdP,如 PingFederate。网关针对它运行标准 OIDC 发现和授权代码流。不支持 SAML 和 LDAP。 |

76| PostgreSQL 14 或更高版本 | 支持设备登录流,其中浏览器回调写入,轮询 CLI 读取,加上速率限制计数器。任何托管 Postgres 都可以,包括最小层级。在没有配置支出限制的情况下,网关存储几 KB 的短期身份验证状态;使用[支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits),它还保存应备份的持久支出、审计和身份表。建议通过 `?sslmode=require` 使用 TLS。 |76| PostgreSQL 11 或更高版本 | 支持设备登录流和速率限制计数器。托管 PostgreSQL 服务均可使用,包括最小层级;请参阅[支持哪些数据库](/docs/zh-CN/claude-apps-gateway-deploy#postgres)。使用[支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits)时,它还保存应备份的持久支出、审计和身份表。建议通过 `?sslmode=require` 使用 TLS。PostgreSQL 11、12 和 13 要求网关服务器上的 Claude Code 为 v2.1.290 或更高版本。PostgreSQL 项目已不再维护这些版本,因此请尽可能使用更新的版本。 |

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

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

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

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

81 81 

82<h3 id="steps">82<h3 id="steps">


89 </Step>89 </Step>

90 90 

91 <Step title="配置 PostgreSQL 数据库">91 <Step title="配置 PostgreSQL 数据库">

92 任何 Postgres 14 或更高版本都可以,包括最小的托管层级。网关在启动时运行自己的架构迁移,因此数据库角色需要创建和修改表的权限;请参阅 [`store`](/docs/zh-CN/claude-apps-gateway-config#store)。92 使用 PostgreSQL 11 或更高版本。最小的托管层级就足够了。网关在启动时运行自己的 schema 迁移,因此数据库角色需要创建和修改表的权限;请参阅 [`store`](/docs/zh-CN/claude-apps-gateway-config#store)。

93 </Step>93 </Step>

94 94 

95 <Step title="编写 gateway.yaml">95 <Step title="编写 gateway.yaml">


120 upstreams:120 upstreams:

121 - provider: bedrock121 - provider: bedrock

122 region: us-east-1122 region: us-east-1

123 auth: {} # 空:AWS 默认凭证链123 auth: {} # 空:AWS 默认凭据链

124 # (IRSA, EC2/ECS task role, env vars, ~/.aws)124 # (IRSA, EC2/ECS task role, env vars, ~/.aws)

125 125 

126 # 模型会自动按上游转换。内置目录126 # 模型会自动按上游转换。内置目录


133 此配置足以使用默认 Amazon Bedrock 模型目录进行工作登录循环。运行后,通过 [`managed.policies`](/docs/zh-CN/claude-apps-gateway-config#managed) 添加按组 RBAC 和托管设置,通过 [`telemetry`](/docs/zh-CN/claude-apps-gateway-config#telemetry) 添加遥测扇出,以及通过 [`models`](/docs/zh-CN/claude-apps-gateway-config#models) 添加多上游故障转移、预配置吞吐量 ARN 或非美国地区。133 此配置足以使用默认 Amazon Bedrock 模型目录进行工作登录循环。运行后,通过 [`managed.policies`](/docs/zh-CN/claude-apps-gateway-config#managed) 添加按组 RBAC 和托管设置,通过 [`telemetry`](/docs/zh-CN/claude-apps-gateway-config#telemetry) 添加遥测扇出,以及通过 [`models`](/docs/zh-CN/claude-apps-gateway-config#models) 添加多上游故障转移、预配置吞吐量 ARN 或非美国地区。

134 134 

135 <Note>135 <Note>

136 Amazon Bedrock 上游需要一个 AWS 主体,具有对 `inference-profile/us.anthropic.*` ARN 和底层 `foundation-model/anthropic.*` ARN 的 `bedrock:InvokeModel` 和 `bedrock:InvokeModelWithResponseStream`,以及在 Bedrock 控制台的模型目录中为该账户提交的 Anthropic 一次性用例表单。使用 EKS 上的 IRSA、ECS 任务角色或 EC2 实例配置文件提供凭证,而不是静态密钥。[`upstreams` 参考](/docs/zh-CN/claude-apps-gateway-config#upstreams)具有完整的 IAM 详情、跨云凭证矩阵以及其他提供商的 `auth` 块。136 Amazon Bedrock 上游需要一个 AWS 主体,具有对 `inference-profile/us.anthropic.*` ARN 和底层 `foundation-model/anthropic.*` ARN 的 `bedrock:InvokeModel` 和 `bedrock:InvokeModelWithResponseStream` 权限。它还需要在 Bedrock 控制台的模型目录中为该账户提交 Anthropic 的一次性用例表单。

137 

138 使用 EKS 上的 IRSA、ECS 任务角色或 EC2 实例配置文件提供凭据,而不是静态密钥。[`upstreams` 参考](/docs/zh-CN/claude-apps-gateway-config#upstreams)具有完整的 IAM 详情、跨云凭据矩阵以及其他提供商的 `auth` 块。

137 </Note>139 </Note>

138 </Step>140 </Step>

139 141 


150 OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}152 OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}

151 GATEWAY_JWT_SECRET: ${GATEWAY_JWT_SECRET}153 GATEWAY_JWT_SECRET: ${GATEWAY_JWT_SECRET}

152 GATEWAY_POSTGRES_URL: postgres://gw:pw@postgres/gateway154 GATEWAY_POSTGRES_URL: postgres://gw:pw@postgres/gateway

153 # AWS 凭证:在生产中,省略这些并使用实例155 # AWS 凭据:在生产中,省略这些并使用实例

154 # 角色。对于本地 Compose 测试,传递您自己的:156 # 角色。对于本地 Compose 测试,传递您自己的:

155 AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}157 AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}

156 AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}158 AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}


168 volumes: { pgdata: }170 volumes: { pgdata: }

169 ```171 ```

170 172 

171 网关是一个单一的 Linux 二进制文件,读取配置,连接到 Postgres 并应用其架构迁移,针对您的 IdP 运行 OIDC 发现,构建上游客户端,并开始侦听。启动对配置、Postgres 连接、OIDC 发现和上游客户端构造是失败关闭的。如果其中任何一个无法访问或配置错误,网关会以错误退出,而不是以降级状态提供流量。173 网关是一个单一的 Linux 二进制文件,读取配置,连接到 Postgres 并应用其 schema 迁移,针对您的 IdP 运行 OIDC 发现,构建上游客户端,并开始侦听。

174 

175 启动对配置、Postgres 连接、OIDC 发现和上游客户端构造是失败关闭的。如果其中任何一个无法访问或配置错误,网关会以错误退出,而不是以降级状态提供流量。

172 176 

173 成功启动不会验证推理路径,因为 Amazon Bedrock 和 Google Cloud 的 Agent Platform 实例凭证在第一个请求时解析,而不是在启动时。177 成功启动不会验证推理路径,因为 Amazon Bedrock 和 Google Cloud 的 Agent Platform 实例凭据在第一个请求时解析,而不是在启动时。

174 178 

175 监视 stderr 以获取启动序列。日志行使用格式 `[gateway] <timestamp> <level> <message>`,审计事件是带有 `evt` 字段的单行 JSON,启动横幅(下面省略)在迁移和侦听行之间打印。新数据库每个架构迁移打印一行 `migration N applied`;已迁移的数据库不打印任何内容。您应该按顺序看到:179 监视 stderr 以获取启动序列。日志行使用格式 `[gateway] <timestamp> <level> <message>`,审计事件是带有 `evt` 字段的单行 JSON,启动横幅(下面省略)在迁移和侦听行之间打印。新数据库每个 schema 迁移打印一行 `migration N applied`;已迁移的数据库不打印任何内容。您应该按顺序看到:

176 180 

177 ```text theme={null}181 ```text theme={null}

178 {"ts":"2026-06-10T17:03:21.114Z","evt":"config.load","path":"/etc/claude/gateway.yaml","sha256":"…"}182 {"ts":"2026-06-10T17:03:21.114Z","evt":"config.load","path":"/etc/claude/gateway.yaml","sha256":"…"}


190 * 无法访问的 Postgres194 * 无法访问的 Postgres

191 * 没有 DDL 权限的 Postgres 角色195 * 没有 DDL 权限的 Postgres 角色

192 * 无法访问或无效的 OIDC 发现文档196 * 无法访问或无效的 OIDC 发现文档

193 * 配置架构违规,带有违规字段路径197 * 配置 schema 违规,带有违规字段路径

194 198 

195 修复它并重新启动。199 修复它并重新启动。

196 200 


249 </Step>253 </Step>

250 254 

251 <Step title="登录开发人员">255 <Step title="登录开发人员">

252 最后一步发生在开发人员机器上,而不是服务器上。在该机器的[托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms)中将 `forceLoginMethod` 设置为 `"gateway"` 并将 `forceLoginGatewayUrl` 设置为您的网关的 `public_url`,然后运行 `/login`,在**Cloud gateway** 屏幕上按 Enter,并完成浏览器登录。下面的[设置网关 URL](#set-the-gateway-url)涵盖大规模分发两个密钥。256 最后一步发生在开发人员机器上,而不是服务器上。在该机器的[托管设置文件](/docs/zh-CN/managed-settings#delivery-mechanisms)中将 `forceLoginMethod` 设置为 `"gateway"` 并将 `forceLoginGatewayUrl` 设置为您的网关的 `public_url`,然后运行 `/login`,在**Cloud gateway** 屏幕上按 Enter,并完成浏览器登录。下面的[设置网关 URL](#set-the-gateway-url)介绍如何将这两个键分发到每台开发人员机器。

253 </Step>257 </Step>

254</Steps>258</Steps>

255 259 

Details

158网关在启动时读取一次密钥和证书,因此更改后的文件仅在重启后生效。请按以下顺序轮换,以确保任何令牌请求都不会出示 IdP 中不存在的证书:158网关在启动时读取一次密钥和证书,因此更改后的文件仅在重启后生效。请按以下顺序轮换,以确保任何令牌请求都不会出示 IdP 中不存在的证书:

159 159 

1601. 将新证书与旧证书一起上传到 IdP。1601. 将新证书与旧证书一起上传到 IdP。

1612. 替换 `gateway.yaml` 加载的密钥和证书文件,然后重启网关。1612. 替换 `gateway.yaml` 加载的密钥和证书文件,然后重启网关。如果您运行多个副本,可以使用[滚动重启](/docs/zh-CN/claude-apps-gateway-deploy#upgrades),因为在您删除旧证书之前,IdP 同时拥有这两个证书。

1623. 从 IdP 中删除旧证书。1623. 在每个副本都重启之后,从 IdP 中删除旧证书。

163 163 

164<h4 id="idp-requests-through-a-forward-proxy">164<h4 id="idp-requests-through-a-forward-proxy">

165 通过前向代理的 IdP 请求165 通过前向代理的 IdP 请求


227 227 

228| 字段 | 必需 | 描述 |228| 字段 | 必需 | 描述 |

229| - | - | - |229| - | - | - |

230| `postgres_url` | 是 | `postgres://` 或 `postgresql://` URL。必需:设备授权集合点,浏览器回调写入和轮询 CLI 读取,需要跨副本状态。网关在启动和升级时运行自己的 schema 迁移,因此角色需要在目标 schema 上创建和更改表的权限。请参阅[升级](/docs/zh-CN/claude-apps-gateway-deploy#upgrades)和 [Postgres](/docs/zh-CN/claude-apps-gateway-deploy#postgres)。 |230| `postgres_url` | 是 | `postgres://` 或 `postgresql://` URL,只能包含一个主机,不能是逗号分隔的列表。网关在启动和升级时运行自己的 schema 迁移,因此角色需要在目标 schema 上创建和更改表的权限。请参阅[升级](/docs/zh-CN/claude-apps-gateway-deploy#upgrades)和 [Postgres](/docs/zh-CN/claude-apps-gateway-deploy#postgres)。 |

231| `username` | 否 | 覆盖 `postgres_url` 中的用户 |231| `username` | 否 | 覆盖 `postgres_url` 中的用户 |

232| `password` | 否 | 数据库凭据。在此设置而不是在 `postgres_url` 中,以便凭据保持在 URL 之外。接受任何字符并优先于 URL 凭据。 |232| `password` | 否 | 数据库凭据。在此设置而不是在 `postgres_url` 中,以便凭据保持在 URL 之外。接受任何字符并优先于 URL 凭据。 |

233| `max_connections` | 否 | 每个副本的 Postgres 连接池大小。默认 `5`,保守且对共享数据库友好。启用[支出限制](#admin)后,热路径每个推理请求执行几个操作,因此在负载下为专用数据库提高它,并保持副本 × 此值低于数据库的 `max_connections`。 |233| `max_connections` | 否 | 每个副本的 Postgres 连接池大小。默认 `5`,保守且对共享数据库友好。启用[支出限制](#admin)后,热路径每个推理请求执行几个操作,因此在负载下为专用数据库提高它,并保持副本 × 此值低于数据库的 `max_connections`。 |

Details

249 Postgres249 Postgres

250</h3>250</h3>

251 251 

252网关将其状态存储在 PostgreSQL 数据库中:

253 

254* **数据库**:PostgreSQL 本身,自托管或托管均可,版本为[最低版本](/docs/zh-CN/claude-apps-gateway#prerequisites)或更高。仅实现 Postgres 协议的数据库(例如分布式 SQL 数据库)不受支持。

255* **地址**:`store.postgres_url` 接受一个主机。如果数据库有多个节点,请使用位于它们前面的地址,例如您的托管服务的端点、负载均衡器或虚拟 IP。设置一个比故障转移所需时间更长的[就绪宽限期](#readiness-grace-period)。

256 

252网关持有五个数据表加上一个 `_migrations` 表,全部由其启动时迁移创建:257网关持有五个数据表加上一个 `_migrations` 表,全部由其启动时迁移创建:

253 258 

254| 表 | 内容 | 保留 |259| 表 | 内容 | 保留 |


396| CLI `/login`:`Could not resolve the configured HTTP proxy` | `HTTPS_PROXY` 或 `HTTP_PROXY` 中的主机名无法从开发者的机器解析,通常是因为它未连接到公司网络 | 让开发者连接到您的网络或 VPN 并重试,或修复代理 URL |401| CLI `/login`:`Could not resolve the configured HTTP proxy` | `HTTPS_PROXY` 或 `HTTP_PROXY` 中的主机名无法从开发者的机器解析,通常是因为它未连接到公司网络 | 让开发者连接到您的网络或 VPN 并重试,或修复代理 URL |

397| CLI `/login`:`Could not resolve gateway host <host>` | 机器无法解析网关的内部 DNS 名称,通常是因为它不在公司网络上 | 让开发者连接到您的网络或 VPN,然后重试 `/login` |402| CLI `/login`:`Could not resolve gateway host <host>` | 机器无法解析网关的内部 DNS 名称,通常是因为它不在公司网络上 | 让开发者连接到您的网络或 VPN,然后重试 `/login` |

398| 启动退出,显示配置验证错误,命名 `store.postgres_url` | 未配置 Postgres;网关需要 Postgres | 设置 `store.postgres_url`。对于本地开发,使用一次性容器:`docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。 |403| 启动退出,显示配置验证错误,命名 `store.postgres_url` | 未配置 Postgres;网关需要 Postgres | 设置 `store.postgres_url`。对于本地开发,使用一次性容器:`docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`。 |

404| 启动退出:`store.postgres_url in <path> is not a URL the gateway can read`,或在 v2.1.290 之前仅显示 `Invalid URL` 或 `URI error` | 无法解析该 URL,例如因为它列出了多个主机,或其密码包含未编码的 `/`、`?`、`#` 或 `%` | 仅指定[一个主机](#postgres),并将密码移到 [`store.password`](/docs/zh-CN/claude-apps-gateway-config#store) 中 |

399| 启动退出:`requires the native binary` | 在 Node 下运行而不是本地二进制 | 使用[独立安装方法](/docs/zh-CN/setup)之一安装 Claude Code |405| 启动退出:`requires the native binary` | 在 Node 下运行而不是本地二进制 | 使用[独立安装方法](/docs/zh-CN/setup)之一安装 Claude Code |

400| 启动退出,在 `config.load` 后显示 OIDC 发现错误 | `oidc.issuer` 无法访问,或 TLS 链不受信任 | 检查发行者是否可从 pod 访问并提供 `/.well-known/openid-configuration`。为私有 PKI 设置 `ca_cert_pem`。如果 pod 仅通过前向代理到达 IdP,设置 [`oidc.use_proxy: true`](/docs/zh-CN/claude-apps-gateway-config#idp-requests-through-a-forward-proxy);在 v2.1.227 之前的版本上,改为给 pod 一条到 IdP 每个端点的直接路由。如果 pod 也无法解析 IdP 的主机名,或代理拒绝 `CONNECT` 到 IP 地址,请参阅[仅代理出口](/docs/zh-CN/claude-apps-gateway-config#proxy-only-egress),这需要 v2.1.277 或更高版本。 |406| 启动退出,在 `config.load` 后显示 OIDC 发现错误 | `oidc.issuer` 无法访问,或 TLS 链不受信任 | 检查发行者是否可从 pod 访问并提供 `/.well-known/openid-configuration`。为私有 PKI 设置 `ca_cert_pem`。如果 pod 仅通过前向代理到达 IdP,设置 [`oidc.use_proxy: true`](/docs/zh-CN/claude-apps-gateway-config#idp-requests-through-a-forward-proxy);在 v2.1.227 之前的版本上,改为给 pod 一条到 IdP 每个端点的直接路由。如果 pod 也无法解析 IdP 的主机名,或代理拒绝 `CONNECT` 到 IP 地址,请参阅[仅代理出口](/docs/zh-CN/claude-apps-gateway-config#proxy-only-egress),这需要 v2.1.277 或更高版本。 |

401| 启动退出,显示 Postgres 权限错误 | 数据库角色在其 schema 上缺少 DDL 权限 | 授予角色对网关 schema 的 `CREATE` 权限,以便它可以在启动时创建和修改其表 |407| 启动退出,显示 Postgres 权限错误 | 数据库角色在其 schema 上缺少 DDL 权限 | 授予角色对网关 schema 的 `CREATE` 权限,以便它可以在启动时创建和修改其表 |

402| 日志:`could not connect to Postgres at boot, attempt 1 of 3` | 当网关启动时数据库无法访问,例如在网络仍在启动的冷实例上 | 如果网关随后完成启动,无需采取任何措施。当数据库无法访问时,网关在退出前尝试连接三次,间隔两秒。如果它以 `could not connect to Postgres` 退出,检查 `store.postgres_url` 和到数据库的网络路径。如果尝试超时而不是被拒绝,提高 [`store.connect_timeout_seconds`](/docs/zh-CN/claude-apps-gateway-config#store) 以给每个尝试更长的时间。 |408| 日志:`could not connect to Postgres at boot, attempt 1 of 3` | 当网关启动时数据库无法访问,例如在网络仍在启动的冷实例上 | 如果网关随后完成启动,无需采取任何措施。当数据库无法访问时,网关在退出前尝试连接三次,间隔两秒。如果它以 `could not connect to Postgres` 退出,检查 `store.postgres_url`(包括它是否只指定了一个主机)以及到数据库的网络路径。如果尝试超时而不是被拒绝,提高 [`store.connect_timeout_seconds`](/docs/zh-CN/claude-apps-gateway-config#store) 以给每个尝试更长的时间。 |

403| `/oauth/callback` 显示"Sign-in could not be completed" | 电子邮件域被拒绝、id\_token 验证失败,或 `email_verified` 显式为 `false`,网关总是拒绝且无覆盖 | 检查 `allowed_email_domains` 和 IdP 是否返回已验证的 `email` 声明。对于 `email_verified: false`,修复 IdP 端验证。如果您的 IdP 在不同的声明名称下发出电子邮件,设置 `oidc.email_claim`。 |409| `/oauth/callback` 显示"Sign-in could not be completed" | 电子邮件域被拒绝、id\_token 验证失败,或 `email_verified` 显式为 `false`,网关总是拒绝且无覆盖 | 检查 `allowed_email_domains` 和 IdP 是否返回已验证的 `email` 声明。对于 `email_verified: false`,修复 IdP 端验证。如果您的 IdP 在不同的声明名称下发出电子邮件,设置 `oidc.email_claim`。 |

404| 日志:`token exchange failed request_id=<id>: id_token missing email claim` | IdP 默认不在 id\_token 中包含 `email`。此拒绝仅在设置 `allowed_email_domains` 时触发;没有它,缺少的电子邮件会创建没有电子邮件的会话 | 配置 IdP 在 id\_token 中发出 `email`。Okta:将 `email` 添加到自定义授权服务器的 ID 令牌声明。Entra:在应用注册上添加 `email` 作为可选声明。PingFederate:启用发出 `email` 的 OpenID Connect 策略。如果 IdP 从 userinfo 端点提供 `email` 但不会在 id\_token 中包含它,例如 Okta 组织授权服务器,设置 `oidc.userinfo_fallback: true`。 |410| 日志:`token exchange failed request_id=<id>: id_token missing email claim` | IdP 默认不在 id\_token 中包含 `email`。此拒绝仅在设置 `allowed_email_domains` 时触发;没有它,缺少的电子邮件会创建没有电子邮件的会话 | 配置 IdP 在 id\_token 中发出 `email`。Okta:将 `email` 添加到自定义授权服务器的 ID 令牌声明。Entra:在应用注册上添加 `email` 作为可选声明。PingFederate:启用发出 `email` 的 OpenID Connect 策略。如果 IdP 从 userinfo 端点提供 `email` 但不会在 id\_token 中包含它,例如 Okta 组织授权服务器,设置 `oidc.userinfo_fallback: true`。 |

405| 日志:`refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`,开发者每 `session.ttl_hours` 看到 `Cloud gateway session expired` | IdP 接受了刷新令牌但没有随之返回 id\_token,所以网关询问了 IdP 的 userinfo 端点以获取用户的声明。IdP 在那里拒绝了刷新的访问令牌。网关回答 `temporarily_unavailable`,所以 Claude Code 保留刷新令牌但无法续订会话。v2.1.260 之前的网关版本记录相同的行但没有 `(at …)` 详情。 | 设置 [`oidc.scope_on_refresh: true`](/docs/zh-CN/claude-apps-gateway-config#oidc),在网关 v2.1.260 或更高版本中可用,以便刷新请求再次请求 `openid`。某些 IdP(如 Okta)仅在被要求时在刷新时返回 id\_token。在 PingFederate 上,改为在 **Applications > OAuth > OpenID Connect Policy Management** 下启用 **Return ID Token On Refresh Grant**。该设置项不会改变 PingFederate 的行为。对于仍然省略它的其他 IdP,检查 userinfo 端点是否接受由刷新发出的访问令牌。作为临时措施,提高 [`session.ttl_hours`](/docs/zh-CN/claude-apps-gateway-config#session)。请参阅[身份提供者设置](#identity-provider-setup)了解取消配置权衡。 |411| 日志:`refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`,开发者每 `session.ttl_hours` 看到 `Cloud gateway session expired` | IdP 接受了刷新令牌但没有随之返回 id\_token,所以网关询问了 IdP 的 userinfo 端点以获取用户的声明。IdP 在那里拒绝了刷新的访问令牌。网关回答 `temporarily_unavailable`,所以 Claude Code 保留刷新令牌但无法续订会话。v2.1.260 之前的网关版本记录相同的行但没有 `(at …)` 详情。 | 设置 [`oidc.scope_on_refresh: true`](/docs/zh-CN/claude-apps-gateway-config#oidc),在网关 v2.1.260 或更高版本中可用,以便刷新请求再次请求 `openid`。某些 IdP(如 Okta)仅在被要求时在刷新时返回 id\_token。在 PingFederate 上,改为在 **Applications > OAuth > OpenID Connect Policy Management** 下启用 **Return ID Token On Refresh Grant**。该设置项不会改变 PingFederate 的行为。对于仍然省略它的其他 IdP,检查 userinfo 端点是否接受由刷新发出的访问令牌。作为临时措施,提高 [`session.ttl_hours`](/docs/zh-CN/claude-apps-gateway-config#session)。请参阅[身份提供者设置](#identity-provider-setup)了解取消配置权衡。 |

Details

136 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json136 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json

137 ```137 ```

138 138 

139 ECS 还需要一个执行角色,ECS 代理本身使用它从 ECR 拉取镜像并注入稍后创建的 Secrets Manager 值。它与 gateway 的 AWS SDK 在运行时使用的任务角色分开:139 ECS 还需要一个执行角色,ECS Agent 本身使用它从 ECR 拉取镜像并注入稍后创建的 Secrets Manager 值。它与 gateway 的 AWS SDK 在运行时使用的任务角色分开:

140 140 

141 ```bash theme={null}141 ```bash theme={null}

142 aws iam create-role --role-name claude-gateway-execution \142 aws iam create-role --role-name claude-gateway-execution \


169 </Step>169 </Step>

170 170 

171 <Step title="配置 Amazon RDS for PostgreSQL">171 <Step title="配置 Amazon RDS for PostgreSQL">

172 该实例在私有子网中运行,没有公共地址,存储加密打开。引擎版本固定为 Postgres 16,满足 gateway 支持的 PostgreSQL 14 下限,并保证下面的参数组系列与实例匹配。172 该实例在私有子网中运行 Postgres 16,没有公共地址,存储加密打开。

173 173 

174 首先,创建将数据库放在私有子网中的子网组,以及具有 `rds.force_ssl=1` 的参数组,以便服务器拒绝明文连接。引擎版本固定一次,因为参数组的系列必须与实例运行的引擎主版本匹配:174 首先,创建将数据库放在私有子网中的子网组,以及具有 `rds.force_ssl=1` 的参数组,以便服务器拒绝明文连接。引擎版本固定一次,因为参数组的系列必须与实例运行的引擎主版本匹配:

175 175 


218 </Step>218 </Step>

219 219 

220 <Step title="编写 gateway.yaml">220 <Step title="编写 gateway.yaml">

221 `upstreams` 块使用 `auth: {}` 指向 Bedrock,因此 gateway 通过 ECS 上的任务角色或 EKS 上的 IRSA 角色从 AWS 默认凭证链进行身份验证。有关每个字段,请参阅[配置参考](/docs/zh-CN/claude-apps-gateway-config)。221 `upstreams` 块使用 `auth: {}` 指向 Bedrock,因此 gateway 通过 ECS 上的任务角色或 EKS 上的 IRSA 角色从 AWS 默认凭据链进行身份验证。有关每个字段,请参阅[配置参考](/docs/zh-CN/claude-apps-gateway-config)。

222 222 

223 两个 `listen` 字段描述什么位于 gateway 前面:223 两个 `listen` 字段描述什么位于 gateway 前面:

224 224 


255 255 

256 store:256 store:

257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}

258 # readiness_grace_seconds: 300 # 通过 RDS 故障转移保持通过健康检查258 # readiness_grace_seconds: 300 # 在 RDS 故障转移期间

259 # 保持通过健康检查

259 260 

260 upstreams:261 upstreams:

261 - provider: bedrock262 - provider: bedrock

262 region: <your-region> # 匹配 $AWS_REGION 以便 IAM263 region: <your-region> # 匹配 $AWS_REGION 以便 IAM

263 # 策略的 ARN 涵盖它264 # 策略的 ARN 涵盖它

264 auth: {} # AWS 默认凭证链:265 auth: {} # AWS 默认凭据链:

265 # ECS 任务角色,或 EKS 上的 IRSA266 # ECS 任务角色,或 EKS 上的 IRSA

266 ```267 ```

267 268 


288 字面 `--secret-string` 参数在每个命令运行时在进程表和审计/EDR 日志中可见。在共享或受监控的主机上,将值放在 `0600` 文件中,改为传递 `--secret-string file://<path>`。bundle 的 `setup.sh` 以相同的方式将机密值保持在进程 argv 之外,将 `0600` 临时文件传递给 `--cli-input-json`。289 字面 `--secret-string` 参数在每个命令运行时在进程表和审计/EDR 日志中可见。在共享或受监控的主机上,将值放在 `0600` 文件中,改为传递 `--secret-string file://<path>`。bundle 的 `setup.sh` 以相同的方式将机密值保持在进程 argv 之外,将 `0600` 临时文件传递给 `--cli-input-json`。

289 </Note>290 </Note>

290 291 

291 与机密不同,`gateway.yaml` 本身不包含机密值,因为每个凭证在启动时通过 [`${VAR}` 或 `${file:...}` 扩展](/docs/zh-CN/claude-apps-gateway-config#secret-expansion)解析。一切如何到达容器因轨道而异:292 与机密不同,`gateway.yaml` 本身不包含机密值,因为每个凭据在启动时通过 [`${VAR}` 或 `${file:...}` 扩展](/docs/zh-CN/claude-apps-gateway-config#secret-expansion)解析。一切如何到达容器因轨道而异:

292 293 

293 * 在 ECS 上,下一步的构建将 `gateway.yaml` 复制到镜像中的 `/etc/claude/gateway.yaml`,任务定义通过其 `secrets` 字段将三个机密作为环境变量注入,因此 YAML 引用 `${GATEWAY_JWT_SECRET}`、`${OIDC_CLIENT_SECRET}` 和 `${GATEWAY_POSTGRES_URL}`。294 * 在 ECS 上,下一步的构建将 `gateway.yaml` 复制到镜像中的 `/etc/claude/gateway.yaml`,任务定义通过其 `secrets` 字段将三个机密作为环境变量注入,因此 YAML 引用 `${GATEWAY_JWT_SECRET}`、`${OIDC_CLIENT_SECRET}` 和 `${GATEWAY_POSTGRES_URL}`。

294 * 在 EKS 上,从 ConfigMap 挂载 `gateway.yaml` 并将机密作为文件挂载在 `/secrets`,引用为 `${file:/secrets/...}`。使用 External Secrets Operator 或 Secrets Store CSI 驱动程序的 AWS 提供程序从 Secrets Manager 获取 Kubernetes Secrets,或使用 `kubectl` 直接创建它们。295 * 在 EKS 上,从 ConfigMap 挂载 `gateway.yaml` 并将机密作为文件挂载在 `/secrets`,引用为 `${file:/secrets/...}`。使用 External Secrets Operator 或 Secrets Store CSI 驱动程序的 AWS 提供程序从 Secrets Manager 获取 Kubernetes Secrets,或使用 `kubectl` 直接创建它们。


311 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem

312 ```313 ```

313 314 

314 创建 ECR 存储库并将 Docker 登录到它。不可变标签意味着部署步骤固定的 `<version>` 标签以后不能被无声地重新指向不同的镜像:315 创建 ECR 仓库并将 Docker 登录到它。不可变标签意味着部署步骤固定的 `<version>` 标签以后不能被无声地重新指向不同的镜像:

315 316 

316 ```bash theme={null}317 ```bash theme={null}

317 aws ecr create-repository --repository-name claude-gateway \318 aws ecr create-repository --repository-name claude-gateway \


424 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"

425 ```426 ```

426 427 

427 60 秒的宽限期给冷任务时间拉取镜像、连接到存储并在 ECS 开始计算针对部署的失败之前回答其第一个健康检查。目标组对 `GET /readyz` 的健康检查验证存储是否可达,因此无法到达 Postgres 的任务永远不会进入轮换。要通过短数据库中断(例如 RDS 故障转移)保持任务通过检查,请按照[中断行为](/docs/zh-CN/claude-apps-gateway-deploy#outage-behavior)中所述设置 `store.readiness_grace_seconds`,其中也涵盖了 `/healthz` 替代方案。428 60 秒的宽限期给冷任务时间拉取镜像、连接到存储并在 ECS 开始计算针对部署的失败之前回答其第一个健康检查。

429 

430 目标组对 `GET /readyz` 的健康检查验证存储是否可达,因此无法到达 Postgres 的任务永远不会进入轮换。要通过短数据库中断(例如 RDS 故障转移)保持任务通过检查,请按照[中断行为](/docs/zh-CN/claude-apps-gateway-deploy#outage-behavior)中所述设置 `store.readiness_grace_seconds`,其中也涵盖了 `/healthz` 替代方案。

428 431 

429 任务在私有子网中运行,没有公共 IP,因此所有出站(到 Bedrock、您的 IdP、Secrets Manager、ECR 和 CloudWatch Logs)都通过 NAT 网关。要将 Bedrock 流量保持在公共路径之外,创建一个 `bedrock-runtime` 接口 VPC 端点并将上游的 `base_url` 指向它,如 [Bedrock 上游参考](/docs/zh-CN/claude-apps-gateway-config#amazon-bedrock)所示;IdP 仍然需要互联网出站。432 任务在私有子网中运行,没有公共 IP,因此所有出站(到 Bedrock、您的 IdP、Secrets Manager、ECR 和 CloudWatch Logs)都通过 NAT 网关。要将 Bedrock 流量保持在公共路径之外,创建一个 `bedrock-runtime` 接口 VPC 端点并将上游的 `base_url` 指向它,如 [Bedrock 上游参考](/docs/zh-CN/claude-apps-gateway-config#amazon-bedrock)所示;IdP 仍然需要互联网出站。

430 433 

431 通过在 Route 53 私有托管区域中为 gateway 的内部 DNS 名称别名到 ALB,并将 `listen.public_url` 设置为该主机名,为开发人员完成私有可解析主机名。ALB 自己的 `*.elb.amazonaws.com` 名称在内部 ALB 上解析为私有地址,但它不能携带您的 ACM 证书,因此使用您自己的名称。434 最后,为开发人员提供一个可私有解析的主机名:在 Route 53 私有托管区域中,将 gateway 的内部 DNS 名称别名到 ALB,并将 `listen.public_url` 设置为该主机名。ALB 自己的 `*.elb.amazonaws.com` 名称在内部 ALB 上解析为私有地址,但它不能携带您的 ACM 证书,因此使用您自己的名称。

432 435 

433 在第一次登录之前,将 OAuth 客户端的授权重定向 URI 更新为 `<public_url>/oauth/callback`。更改 `public_url` 后,在新标签下重建并推送镜像,注册新的任务定义修订版本,然后重新部署。在 ECS 上,该设置位于镜像的嵌入式 `gateway.yaml` 中,gateway 仅从该设置构建其公共源,忽略 `X-Forwarded-Host` 和 `X-Forwarded-Proto`。`X-Forwarded-For` 仅在设置 `listen.trusted_proxies` 时才被遵守用于客户端 IP。436 在第一次登录之前,将 OAuth 客户端的授权重定向 URI 更新为 `<public_url>/oauth/callback`。更改 `public_url` 后,在新标签下重建并推送镜像,注册新的任务定义修订版本,然后重新部署。在 ECS 上,该设置位于镜像的嵌入式 `gateway.yaml` 中,gateway 仅从该设置构建其公共源,忽略 `X-Forwarded-Host` 和 `X-Forwarded-Proto`。`X-Forwarded-For` 仅在设置 `listen.trusted_proxies` 时才被遵守用于客户端 IP。

434 </Tab>437 </Tab>


436 <Tab title="EKS">439 <Tab title="EKS">

437 此轨道需要本地安装 `kubectl` 和 `eksctl`,以及具有 IAM OIDC 提供程序和已安装 AWS Load Balancer Controller 的现有 EKS 集群。集群必须在 `$VPC_ID` 上,以便 pod 可以到达 RDS 私有端点,`claude-gateway-db` 安全组必须允许集群的 pod 或节点安全组而不是 `$GW_SG`。440 此轨道需要本地安装 `kubectl` 和 `eksctl`,以及具有 IAM OIDC 提供程序和已安装 AWS Load Balancer Controller 的现有 EKS 集群。集群必须在 `$VPC_ID` 上,以便 pod 可以到达 RDS 私有端点,`claude-gateway-db` 安全组必须允许集群的 pod 或节点安全组而不是 `$GW_SG`。

438 441 

439 在 EKS 上,gateway 通过 IRSA 而不是 ECS 角色获得其 Bedrock 凭证。IAM 步骤中的 `ecs-tasks.amazonaws.com` 信任策略在这里不适用;IRSA 需要一个信任策略在集群的 OIDC 提供程序上联合的角色,范围为 `system:serviceaccount:claude-gateway:gateway`。`eksctl create iamserviceaccount` 在一个步骤中创建该角色、附加策略并使用角色 ARN 注解 Kubernetes 服务账户。将 IAM 步骤中的两个策略文档转换为它可以附加的托管策略:442 在 EKS 上,gateway 通过 IRSA 而不是 ECS 角色获得其 Bedrock 凭据。IAM 步骤中的 `ecs-tasks.amazonaws.com` 信任策略在这里不适用;IRSA 需要一个信任策略在集群的 OIDC 提供程序上联合的角色,范围为 `system:serviceaccount:claude-gateway:gateway`。`eksctl create iamserviceaccount` 在一个步骤中创建该角色、附加策略并使用角色 ARN 注解 Kubernetes 服务账户。将 IAM 步骤中的两个策略文档转换为它可以附加的托管策略:

440 443 

441 ```bash theme={null}444 ```bash theme={null}

442 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \445 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \


475 </Step>478 </Step>

476 479 

477 <Step title="将 gateway URL 推送到开发人员机器">480 <Step title="将 gateway URL 推送到开发人员机器">

478 gateway 现在正在运行,但开发人员在通过 MDM 部署的[托管设置文件](/docs/zh-CN/claude-apps-gateway#set-the-gateway-url)中设置 `forceLoginMethod` 和 `forceLoginGatewayUrl` 之前无法从 `/login` 到达它。开发人员无法手动在登录选择器中选择 gateway 选项。481 gateway 现在正在运行,但在 gateway URL 出现在开发人员的机器上之前,开发人员无法从 `/login` 到达它。在通过 MDM 部署到每台设备的[托管设置文件](/docs/zh-CN/claude-apps-gateway#set-the-gateway-url)中设置 `forceLoginMethod` 和 `forceLoginGatewayUrl`。登录选择器中没有可供开发人员手动选择的 gateway 选项。

479 </Step>482 </Step>

480</Steps>483</Steps>

481 484 

Details

442`claude --cloud` 和 `claude --teleport` 需要使用 claude.ai 账户登录。如果您使用 API 密钥进行身份验证,或者存储的账户详情已过期,您会看到以下情况之一:442`claude --cloud` 和 `claude --teleport` 需要使用 claude.ai 账户登录。如果您使用 API 密钥进行身份验证,或者存储的账户详情已过期,您会看到以下情况之一:

443 443 

444* `Unable to get organization UUID`444* `Unable to get organization UUID`

445* 提示 API 密钥身份验证不足的消息445* ``Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.``

446* 在不带会话 ID 运行 `claude --teleport` 时,会话选择器中显示 `Error loading Claude Code sessions`446* 在不带会话 ID 运行 `claude --teleport` 时,会话选择器中显示 `Error loading Claude Code sessions`

447 447 

448运行 `/login` 以使用您的 claude.ai 账户登录,然后重试该命令。如果错误中提到的是您的提供商,请参阅[错误表](#errors-when-sending-to-a-cloud-session):云端会话无法通过第三方提供商使用。448在 shell 中运行 [`claude auth login`](/docs/zh-CN/cli-reference#cli-commands) 以使用您的 claude.ai 账户登录,然后重试该命令。在正在运行的会话中,`/login` 的作用相同。如果错误中提到的是您的提供商,请参阅[错误表](#errors-when-sending-to-a-cloud-session):云端会话无法通过第三方提供商使用。

449 

450在 v2.1.274 至 v2.1.289 版本中,登录消息为 `Claude Code cloud sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.`

449 451 

450<h3 id="remote-control-session-expired-or-access-denied">452<h3 id="remote-control-session-expired-or-access-denied">

451 Remote Control 会话已过期或访问被拒绝453 Remote Control 会话已过期或访问被拒绝

Details

34 oneLiner: 'Project instructions Claude reads every session',34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> on its own or alongside CLAUDE.md</>],37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> in place of a <C>CLAUDE.md</C></>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions39 example: `# Project conventions

40 40 

Details

31| `claude attach <id\|name>` | 在此终端中附加到 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell)。传递正在运行的会话名称的一部分来代替 ID 需要 Claude Code v2.1.290 或更高版本 | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | 在此终端中附加到 [后台会话](/docs/zh-CN/agent-view#manage-sessions-from-the-shell)。传递正在运行的会话名称的一部分来代替 ID 需要 Claude Code v2.1.290 或更高版本 | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | 以 JSON 格式打印内置 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置。`--label <prefix>` 仅打印标签以该前缀开头的规则,不区分大小写匹配。需要 Claude Code v2.1.208 或更高版本 | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | 以 JSON 格式打印内置 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 分类器规则。使用 `claude auto-mode config` 查看应用了设置的有效配置。`--label <prefix>` 仅打印标签以该前缀开头的规则,不区分大小写匹配。需要 Claude Code v2.1.208 或更高版本 | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | 通过从用户设置文件中删除 `autoMode` 部分来恢复默认 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 配置。在写入前提示确认;传递 `-y`/`--yes` 以跳过提示。来自 [托管设置](/docs/zh-CN/server-managed-settings) 或 `--settings` 标志的规则仍然适用。需要 Claude Code v2.1.212 或更高版本。请参阅 [检查默认值和您的有效配置](/docs/zh-CN/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | 通过从用户设置文件中删除 `autoMode` 部分来恢复默认 [自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 配置。在写入前提示确认;传递 `-y`/`--yes` 以跳过提示。来自 [托管设置](/docs/zh-CN/server-managed-settings) 或 `--settings` 标志的规则仍然适用。需要 Claude Code v2.1.212 或更高版本。请参阅 [检查默认值和您的有效配置](/docs/zh-CN/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | 跟踪后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process) 的日志文件 `~/.claude/daemon.log`,在新行到达时将其打印出来,直到您按下 `Ctrl+C` | `claude daemon logs` |

35| `claude daemon run` | 在此终端的前台运行后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process),并打印其日志 | `claude daemon run` |

34| `claude daemon status` | 打印后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process) 的状态、版本、套接字目录和工作进程数以进行诊断。如果 supervisor 未运行,则退出代码 1 | `claude daemon status` |36| `claude daemon status` | 打印后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process) 的状态、版本、套接字目录和工作进程数以进行诊断。如果 supervisor 未运行,则退出代码 1 | `claude daemon status` |

35| `claude daemon stop --any` | 停止后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process) 及其托管的会话。传递 `--keep-workers` 以保持后台会话运行,以便下一个 supervisor 重新连接到它们。`--any` 确认停止按需 supervisor,这是默认值。使用此命令从 [无响应的 supervisor](/docs/zh-CN/agent-view#agent-view-says-the-background-service-did-not-respond) 恢复 | `claude daemon stop --any --keep-workers` |37| `claude daemon stop --any` | 停止后台会话 [supervisor](/docs/zh-CN/agent-view#the-supervisor-process) 及其托管的会话。传递 `--keep-workers` 以保持后台会话运行,以便下一个 supervisor 重新连接到它们。`--any` 确认停止按需 supervisor,这是默认值。使用此命令从 [无响应的 supervisor](/docs/zh-CN/agent-view#agent-view-says-the-background-service-did-not-respond) 恢复 | `claude daemon stop --any --keep-workers` |

36| `claude doctor` | 从终端打印只读安装和设置诊断,无需启动会话,包括安装健康状况、设置文件验证错误和 Remote Control 资格。对于可以应用修复的会话内设置检查,请运行 [`/doctor`](/docs/zh-CN/commands#all-commands) | `claude doctor` |38| `claude doctor` | 从终端打印只读安装和设置诊断,无需启动会话,包括安装健康状况、设置文件验证错误和 Remote Control 资格。对于可以应用修复的会话内设置检查,请运行 [`/doctor`](/docs/zh-CN/commands#all-commands) | `claude doctor` |

desktop.md +1 −1

Details

1092要查看你运行的桌面应用版本:1092要查看你运行的桌面应用版本:

1093 1093 

1094* **macOS**:点击菜单栏中的 **Claude**,然后点击 **About Claude**1094* **macOS**:点击菜单栏中的 **Claude**,然后点击 **About Claude**

1095* **Windows**:点击 **Help**,然后点击 **About**1095* **Windows**:点击 **Help**,然后点击 **About Claude**

1096 1096 

1097点击版本号将其复制到你的剪贴板。1097点击版本号将其复制到你的剪贴板。

1098 1098 

Details

92* 使用 **Cmd+S** 保存屏幕截图或使用 **Cmd+R** 保存屏幕录制,使用窗格的捕获按钮或快捷键;文件保存到你的桌面92* 使用 **Cmd+S** 保存屏幕截图或使用 **Cmd+R** 保存屏幕录制,使用窗格的捕获按钮或快捷键;文件保存到你的桌面

93* 通过单击**Detach simulator** 停止流式传输设备而不关闭它,这会将窗格返回到其**Attach simulator** 状态93* 通过单击**Detach simulator** 停止流式传输设备而不关闭它,这会将窗格返回到其**Attach simulator** 状态

94 94 

95要调整来自模拟器的视频流,请打开窗格的 **Display** 菜单。如果窗格对您的 Mac 造成压力,请降低**Frame rate** 或**Resolution**。这两项设置改变窗格显示设备的方式,而不是应用运行的方式。95如果窗格显示 **Display** 菜单,可以使用它来调整来自模拟器的视频流。如果窗格对您的 Mac 造成压力,请降低**Frame rate** 或**Resolution**。这两项设置改变窗格显示设备的方式,而不是应用运行的方式。

96 96 

97你和 Claude 驱动同一设备,因此你的点击会改变 Claude 看到的应用状态。要让 Claude 检查特定屏幕,通过点击导航到它,然后提出要求。当 Claude 驱动设备时,窗格在屏幕上方显示**Claude is using this device** 徽章;在徽章清除之前暂停点击,以便结果反映应用而不是你的输入。97你和 Claude 驱动同一设备,因此你的点击会改变 Claude 看到的应用状态。要让 Claude 检查特定屏幕,通过点击导航到它,然后提出要求。当 Claude 驱动设备时,窗格在屏幕上方显示**Claude is using this device** 徽章;在徽章清除之前暂停点击,以便结果反映应用而不是你的输入。

98 98 

env-vars.md +1 −0

Details

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

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

356| `CLAUDE_CODE_PLUGIN_DIRS` | 为会话加载的插件目录,每个目录的加载方式与 [`--plugin-dir`](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) 标志相同。在 Unix 上用 `:` 分隔多个路径,在 Windows 上用 `;` 分隔。每个路径请使用绝对路径或以 `~` 开头,因为 Claude Code 会跳过相对路径。需要 Claude Code v2.1.280 或更高版本。请参阅[为单个会话加载插件](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session) |356| `CLAUDE_CODE_PLUGIN_DIRS` | 为会话加载的插件目录,每个目录的加载方式与 [`--plugin-dir`](/docs/zh-CN/plugins/cli-reference#flags-that-load-a-plugin-for-one-session) 标志相同。在 Unix 上用 `:` 分隔多个路径,在 Windows 上用 `;` 分隔。每个路径请使用绝对路径或以 `~` 开头,因为 Claude Code 会跳过相对路径。需要 Claude Code v2.1.280 或更高版本。请参阅[为单个会话加载插件](/docs/zh-CN/plugins/create#load-a-directory-or-archive-for-one-session) |

357| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | 控制 Claude Code 是否在 [mod](/docs/zh-CN/plugins/mods/overview) 的文件更改时重新加载该 mod。重新加载适用于您使用 `--plugin-dir` 从目录加载的 mod,且在交互式会话中默认开启。设置为 `1` 可在非交互式会话中也开启,设置为 `0` 可在所有会话中关闭。需要 Claude Code v2.1.287 或更高版本。请参阅 [mod 设置和环境变量](/docs/zh-CN/plugins/mods/reference#settings-and-environment-variables) |

357| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | 克隆或刷新插件市场的超时时间(毫秒)(默认值:120000)。对于大型仓库或较慢的网络连接,请调高此值。请参阅 [Git clone timed out](/docs/zh-CN/plugins/troubleshooting#git-clone-timed-out-after-120s) |358| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | 克隆或刷新插件市场的超时时间(毫秒)(默认值:120000)。对于大型仓库或较慢的网络连接,请调高此值。请参阅 [Git clone timed out](/docs/zh-CN/plugins/troubleshooting#git-clone-timed-out-after-120s) |

358| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | 设置为 `1` 可在市场刷新无法访问远程或无法向远程进行身份验证时跳过重新克隆尝试,并继续使用现有的市场检出。适用于离线或隔离网络环境,在这些环境中重新克隆也会以同样的方式失败。请参阅[市场更新在离线环境中失败](/docs/zh-CN/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |359| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | 设置为 `1` 可在市场刷新无法访问远程或无法向远程进行身份验证时跳过重新克隆尝试,并继续使用现有的市场检出。适用于离线或隔离网络环境,在这些环境中重新克隆也会以同样的方式失败。请参阅[市场更新在离线环境中失败](/docs/zh-CN/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |

359| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | 设置为 `1` 可通过 HTTPS 而不是 SSH 克隆 GitHub `owner/repo` 简写来源。适用于插件安装和更新,以及 `/plugin marketplace add` 和 `update`。适用于 CI 运行器、容器或任何未为 `github.com` 配置 SSH 密钥的环境 |360| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | 设置为 `1` 可通过 HTTPS 而不是 SSH 克隆 GitHub `owner/repo` 简写来源。适用于插件安装和更新,以及 `/plugin marketplace add` 和 `update`。适用于 CI 运行器、容器或任何未为 `github.com` 配置 SSH 密钥的环境 |

errors.md +2 −3

Details

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

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

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

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

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

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

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


387* Claude Code 检测到的连接在您的计算机进入睡眠状态时在请求过程中途被破坏。Claude Code 将其计为上述规则下的断开连接;一旦重试标签命名了具体原因,它会读作 `Connection lost while your computer was asleep`,如果轮次在 Claude 完成思考之后但在任何文本或工具调用之前结束,消息会读作 `Your computer went to sleep before a response was produced`。388* Claude Code 检测到的连接在您的计算机进入睡眠状态时在请求过程中途被破坏。Claude Code 将其计为上述规则下的断开连接;一旦重试标签命名了具体原因,它会读作 `Connection lost while your computer was asleep`,如果轮次在 Claude 完成思考之后但在任何文本或工具调用之前结束,消息会读作 `Your computer went to sleep before a response was produced`。

388* 停滞的响应流,当响应头已到达但 Claude 响应的任何部分都未到达,或当 Claude 完成思考但尚未开始任何文本或工具调用时:Claude Code 中止停滞连接并最多重新发送一次请求,不计入上述 10 次尝试预算。如果响应在 Claude 完成思考之后但在任何文本或工具调用之前第二次停滞,Claude Code 以 `The response stalled before a response was produced` 结束轮次。389* 停滞的响应流,当响应头已到达但 Claude 响应的任何部分都未到达,或当 Claude 完成思考但尚未开始任何文本或工具调用时:Claude Code 中止停滞连接并最多重新发送一次请求,不计入上述 10 次尝试预算。如果响应在 Claude 完成思考之后但在任何文本或工具调用之前第二次停滞,Claude Code 以 `The response stalled before a response was produced` 结束轮次。

389* 流式请求 API 从未用响应头回答,在 [first-byte deadline runs](/docs/zh-CN/network-config#streaming-idle-watchdogs) 的连接上:Claude Code 在截止时间中止它,并在重试预算内每个模型请求最多重新发送一次,然后如果该尝试也未得到回答,则以 [No response from API](#no-response-from-api) 结束轮次。在其他连接上,请求等待 `API_TIMEOUT_MS`。当您设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,一次重试上限不适用。390* 流式请求 API 从未用响应头回答,在 [first-byte deadline runs](/docs/zh-CN/network-config#streaming-idle-watchdogs) 的连接上:Claude Code 在截止时间中止它,并在重试预算内每个模型请求最多重新发送一次,然后如果该尝试也未得到回答,则以 [No response from API](#no-response-from-api) 结束轮次。在其他连接上,请求等待 `API_TIMEOUT_MS`。当您设置 `CLAUDE_CODE_RETRY_WATCHDOG` 时,一次重试上限不适用。

391* 在 Claude 完成思考或开始任何文本或工具调用之前,被 API 输出内容过滤器拦截的流式响应。Claude Code 会在重试预算内重新发送一次请求,如果过滤器也拦截了第二次响应,则显示 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)。

390* 临时 429 节流,但不是网关的支出限制 `429`,这不是节流;请参阅 [Spend limit reached](#spend-limit-reached)。392* 临时 429 节流,但不是网关的支出限制 `429`,这不是节流;请参阅 [Spend limit reached](#spend-limit-reached)。

391 * 当您使用 claude.ai 订阅登录时,这包括不携带您套餐配额头的 429 节流。在 v2.1.199 之前,Claude Code 仅对 API 密钥和企业登录重试这些节流。393 * 当您使用 claude.ai 订阅登录时,这包括不携带您套餐配额头的 429 节流。在 v2.1.199 之前,Claude Code 仅对 API 密钥和企业登录重试这些节流。

392* 因为输入加上 `max_tokens` 超过上下文限制而被拒绝的请求。以相同方式重新发送它会以相同方式失败,所以 Claude Code 使用减少的 `max_tokens` 重试,并在两种情况下停止重试并改为压缩:394* 因为输入加上 `max_tokens` 超过上下文限制而被拒绝的请求。以相同方式重新发送它会以相同方式失败,所以 Claude Code 使用减少的 `max_tokens` 重试,并在两种情况下停止重试并改为压缩:


405* [Amazon Bedrock 流式响应具有意外的 content-type](#bedrock-streaming-response-has-an-unexpected-content-type),因为重写响应的网关或代理会以相同方式重写重试。需要 Claude Code v2.1.208 或更高版本。407* [Amazon Bedrock 流式响应具有意外的 content-type](#bedrock-streaming-response-has-an-unexpected-content-type),因为重写响应的网关或代理会以相同方式重写重试。需要 Claude Code v2.1.208 或更高版本。

406* 失败的流式请求的非流式重试获得成功状态但 [body 中没有 Claude API 消息](#api-returned-an-empty-or-malformed-response)。Claude Code 以该错误结束轮次。408* 失败的流式请求的非流式重试获得成功状态但 [body 中没有 Claude API 消息](#api-returned-an-empty-or-malformed-response)。Claude Code 以该错误结束轮次。

407* 您的组织的策略检查拒绝的请求,其表现为携带拒绝消息的 `API Error:` 行。您的组织管理员使用 [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks)(Claude Enterprise 功能)设置检查,消息以他们配置的说明结尾,或默认告诉您联系他们。Claude Code 不会将拒绝的请求重新发送到相同模型或 [备用模型](/docs/zh-CN/model-config#fallback-model-chains),因为拒绝涉及请求的内容而不是模型。在 v2.1.239 之前,Claude Code 可以重新发送拒绝的请求,不流式传输或在配置的备用模型上,然后向您显示拒绝。409* 您的组织的策略检查拒绝的请求,其表现为携带拒绝消息的 `API Error:` 行。您的组织管理员使用 [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks)(Claude Enterprise 功能)设置检查,消息以他们配置的说明结尾,或默认告诉您联系他们。Claude Code 不会将拒绝的请求重新发送到相同模型或 [备用模型](/docs/zh-CN/model-config#fallback-model-chains),因为拒绝涉及请求的内容而不是模型。在 v2.1.239 之前,Claude Code 可以重新发送拒绝的请求,不流式传输或在配置的备用模型上,然后向您显示拒绝。

408* 被 API 输出内容过滤器拦截的响应。Claude Code 会立即显示 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy),并且不会重试或重新发送该请求。

409 410 

410<h3 id="what-you-see-while-claude-code-retries-or-waits">411<h3 id="what-you-see-while-claude-code-retries-or-waits">

411 Claude Code 重试或等待时您看到的内容412 Claude Code 重试或等待时您看到的内容


2905API Error: Output blocked by content filtering policy2906API Error: Output blocked by content filtering policy

2906```2907```

2907 2908 

2908Claude Code 在拦截到达时立即显示错误,并在此结束请求。它不会重试请求、以非流式方式重新发送请求,也不会切换到[备用模型](/docs/zh-CN/model-config#fallback-model-chains)。在 v2.1.285 之前,Claude Code 可能会重新发送并重试被拦截的请求(有时持续数分钟),然后才向您显示错误。

2909 

2910**要做什么:**2909**要做什么:**

2911 2910 

2912* 重新表述您的上一条消息或采取不同的方法2911* 重新表述您的上一条消息或采取不同的方法

Details

733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

734```734```

735 735 

736此代理名为 `my-plugin:security-reviewer`,用户可以使用 `@agent-my-plugin:security-reviewer` [显式调用它](/docs/zh-CN/sub-agents#invoke-subagents-explicitly)。名称形式是 `<plugin>:<name>`,其中 `<name>` 来自 frontmatter,或在没有时来自文件名。736此 Agent 名为 `my-plugin:security-reviewer`,用户可以使用 `@agent-my-plugin:security-reviewer` [显式调用它](/docs/zh-CN/sub-agents#invoke-subagents-explicitly)。名称形式是 `<plugin>:<name>`,其中 `<name>` 来自 frontmatter 的 `name` 字段,或在该字段缺失时来自文件名。

737 737 

738`agents` 清单键替换 `agents/` 扫描。738`agents` 清单键替换 `agents/` 扫描。

739 739 

Details

428 428 

429| 元素 | 它绘制什么 | 位置 |429| 元素 | 它绘制什么 | 位置 |

430| :- | :- | :- |430| :- | :- | :- |

431| `Box` | 一个 flex 容器。接受布局属性,如 `flexDirection`、`columnGap`、`padding`、`borderStyle` 和 `width`。 | 到处 |431| `Box` | 一个 flex 容器。接受布局 prop,如 `flexDirection`、`columnGap`、`padding`、[`borderStyle`](/docs/zh-CN/plugins/mods/reference#box-border-styles) 和 `width`。 | 到处 |

432| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |432| `Text` | 样式化文本。接受 `color`、`bold`、`dimColor`、`italic` 和 `wrap`。`color` 是主题键或颜色,如 `'red'`。`wrap` 是 `'wrap'`、`'truncate'`、`'truncate-start'`、`'truncate-middle'` 或 `'truncate-end'`。 | 到处 |

433| `Button` | 调用 `onPress` 的控件 | 到处 |433| `Button` | 调用 `onPress` 的控件 | 到处 |

434| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当您传递 `onLinkPress` 时需要 `key`。 | 到处 |434| `Link`, `Code`, `Markdown` | 带有 `href` 和可选 `label` 的链接、代码块和格式化为 Claude 回复方式的文本。`Markdown` 在 `text` 属性中而不是在 `children` 中获取其内容,当您传递 `onLinkPress` 时需要 `key`。 | 到处 |


563许多窗格是一个文本字段,下面有一个列表。本部分中的示例是一个笔记窗格:输入一条笔记并按 Enter 添加它,每条笔记都有一个用于删除它的 `x` 按钮。添加两条笔记后,终端这样绘制窗格:563许多窗格是一个文本字段,下面有一个列表。本部分中的示例是一个笔记窗格:输入一条笔记并按 Enter 添加它,每条笔记都有一个用于删除它的 `x` 按钮。添加两条笔记后,终端这样绘制窗格:

564 564 

565```text theme={null}565```text theme={null}

566╭──────────────────────────────────────────────────────────╮566╭────────────────────────────────────────────────────────✕─╮

567│ Note: Type a note and press Enter ⏎ add ✕ │567│ Note: Type a note and press Enter ⏎ add │

568│ x buy milk │568│ x buy milk │

569│ x call bob │569│ x call bob │

570╰──────────────────────────────────────────────────────────╯570╰──────────────────────────────────────────────────────────╯

571```571```

572 572 

573顶部边框上的 `✕` 是 Claude Code 自己用于关闭窗格的标记。

574 

573示例使用以下技术:575示例使用以下技术:

574 576 

575* **获取输入的文本**:当用户按 Enter 时,`Input` 使用字段的文本调用 `onSubmit(value)`,并在每次更改时调用 `onInput(value)`577* **获取输入的文本**:当用户按 Enter 时,`Input` 使用字段的文本调用 `onSubmit(value)`,并在每次更改时调用 `onInput(value)`

Details

242要使树适配其所在位置,请在 hook 中读取以下 prop:242要使树适配其所在位置,请在 hook 中读取以下 prop:

243 243 

244* **`Pane` 或横栏的宽度**:按 `e.props.bodyColumns` 绘制244* **`Pane` 或横栏的宽度**:按 `e.props.bodyColumns` 绘制

245* **会话记录旁的 `Pane` 的高度**:当 `e.props.placement` 为 `'dock'` 时,`e.props.scroll.bodyRows` 是该窗格拥有的行数245* **会话记录旁的 `Pane` 的高度**:当 `e.props.placement` 为 `'dock'` 时,`e.props.scroll.bodyRows` 是该窗格可供您的树使用的行数

246* **输入框上方的 `Pane` 的高度**:当 `e.props.placement` 为 `'inline'` 时,窗格会随您的树增高,直到达到上限,而 `bodyRows` 就是该上限。[`$.ui.open` 的 `rows` 字段](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)可请求不同的上限。246* **输入框上方的 `Pane` 的高度**:当 `e.props.placement` 为 `'inline'` 时,窗格会随您的树增高,直到达到上限,而 `bodyRows` 就是该上限。[`$.ui.open` 的 `rows` 字段](/docs/zh-CN/plugins/mods/interface#open-a-pane-at-the-right-time)可请求不同的上限。

247 247 

248比窗格更高的树会整体滚动。248比窗格更高的树会整体滚动。


255 255 

256| 元素 | 主要 prop | 终端 | Desktop |256| 元素 | 主要 prop | 终端 | Desktop |

257| :- | :- | :-: | :-: |257| :- | :- | :-: | :-: |

258| [`Box`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、`gap`、`padding`、`margin`、`width`、`height`、`borderStyle`、`backgroundColor`、`position`、`hover` | ✓ | ✓ |258| [`Box`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `key`、flex 布局、`gap`、`padding`、`margin`、`width`、`height`、[`borderStyle`](#box-border-styles)、`backgroundColor`、`position`、`hover` | ✓ | ✓ |

259| [`Text`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、`bold`、`italic`、`underline`、`dimColor`、`inverse`、`wrap` | ✓ | ✓ |259| [`Text`](/docs/zh-CN/plugins/mods/interface#build-a-tree-from-elements) | `color`、`backgroundColor`、`bold`、`italic`、`underline`、`dimColor`、`inverse`、`wrap` | ✓ | ✓ |

260| [`Button`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ |260| [`Button`](/docs/zh-CN/plugins/mods/interface#respond-to-presses-and-typing) | `key`、`label`、`onPress`、`hotkey`、`plain`、`dimColor`、`autoFocus`、`action` | ✓ | ✓ |

261| `Link` | `href`、`label` | ✓ | ✓ |261| `Link` | `href`、`label` | ✓ | ✓ |


270 270 

271更多 `Button` 规则:`action` 指定 Claude Code 自身的某个[快捷键操作](/docs/zh-CN/keybindings),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮。当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发。当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。271更多 `Button` 规则:`action` 指定 Claude Code 自身的某个[快捷键操作](/docs/zh-CN/keybindings),当用户为该操作设置的绑定是组合键或带修饰键的按键时,该绑定会按下此按钮。当用户在空的输入框中只输入某个数字并停顿时,横栏中设置了该数字 `hotkey` 的按钮也会触发。当同一次绘制中的两个按钮指定相同的 `hotkey` 时,由后一个按钮获得它。`autoFocus` 在任何控件上都只接受 `true`,因此要关闭它,请省略该 prop。

272 272 

273<h3 id="box-border-styles">

274 `Box` 边框样式

275</h3>

276 

277要在 `Box` 周围绘制边框,请将其 `borderStyle` 设置为以下名称之一,例如 `borderStyle: 'round'`。每一行说明终端针对该名称绘制的内容,并展示边框的上边缘。

278 

279| `borderStyle` | 终端绘制的内容 | 上边缘 |

280| :- | :- | :- |

281| `'single'` | 直角细线 | `┌──┐` |

282| `'double'` | 双线 | `╔══╗` |

283| `'round'` | 圆角细线 | `╭──╮` |

284| `'bold'` | 粗线 | `┏━━┓` |

285| `'singleDouble'` | 上下为细线,左右两侧为双线 | `╓──╖` |

286| `'doubleSingle'` | 上下为双线,左右两侧为细线 | `╒══╕` |

287| `'classic'` | ASCII 字符 `+`、`-` 和 `\|` | `+--+` |

288| `'arrow'` | 指向 `Box` 内部的箭头 | `↘↓↓↙` |

289| `'dashed'` | 虚线,四角留空 | `╌╌` |

290| `'quote'` | 左侧一条竖条 `▎`,其他三边为空白单元格 | 空白 |

291 

292如果 `Box` 的 `borderStyle` 指定的是其他名称(例如 `'rounded'`),则绘制时不带边框。

293 

273<h2 id="limits">294<h2 id="limits">

274 限制295 限制

275</h2>296</h2>

Details

17 17 

18 * **为什么作用域、缓存和优先级的行为方式如此**:阅读 [Plugin loading reference](/docs/zh-CN/plugins/loading)18 * **为什么作用域、缓存和优先级的行为方式如此**:阅读 [Plugin loading reference](/docs/zh-CN/plugins/loading)

19 * **查找标志、字段或命令**:使用 [plugin commands reference](/docs/zh-CN/plugins/cli-reference)、[manifest reference](/docs/zh-CN/plugins/manifest-reference) 或 [marketplace reference](/docs/zh-CN/plugins/marketplace-reference)19 * **查找标志、字段或命令**:使用 [plugin commands reference](/docs/zh-CN/plugins/cli-reference)、[manifest reference](/docs/zh-CN/plugins/manifest-reference) 或 [marketplace reference](/docs/zh-CN/plugins/marketplace-reference)

20 * **`hooks module not loaded` 或 `hooks module did not load` 消息**:该插件是一个 [mod](/docs/zh-CN/plugins/mods/overview),请阅读 [The mod doesn't load](/docs/zh-CN/plugins/mods/troubleshoot#the-mod-doesn’t-load)

20</Note>21</Note>

21 22 

22搜索您看到的确切消息。每条消息都列在产生它的阶段下,这不一定是您运行的命令。例如,安装可能因为市场缺失而失败,所以该消息在 [Add a marketplace](#add-a-marketplace) 下。23搜索您看到的确切消息。每条消息都列在产生它的阶段下,这不一定是您运行的命令。例如,安装可能因为市场缺失而失败,所以该消息在 [Add a marketplace](#add-a-marketplace) 下。

quickstart.md +5 −5

Details

37 <Tab title="原生安装(推荐)">37 <Tab title="原生安装(推荐)">

38 **macOS、Linux、WSL:**38 **macOS、Linux、WSL:**

39 39 

40 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}40 ```bash theme={null}

41 curl -fsSL https://claude.ai/install.sh | bash41 curl -fsSL https://claude.ai/install.sh | bash

42 ```42 ```

43 43 

44 **Windows PowerShell:**44 **Windows PowerShell:**

45 45 

46 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}46 ```powershell theme={null}

47 irm https://claude.ai/install.ps1 | iex47 irm https://claude.ai/install.ps1 | iex

48 ```48 ```

49 49 

50 **Windows CMD:**50 **Windows CMD:**

51 51 

52 ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}52 ```batch theme={null}

53 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd53 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

54 ```54 ```

55 55 


67 </Tab>67 </Tab>

68 68 

69 <Tab title="Homebrew">69 <Tab title="Homebrew">

70 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}70 ```bash theme={null}

71 brew install --cask claude-code71 brew install --cask claude-code

72 ```72 ```

73 73 


79 </Tab>79 </Tab>

80 80 

81 <Tab title="WinGet">81 <Tab title="WinGet">

82 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}82 ```powershell theme={null}

83 winget install Anthropic.ClaudeCode83 winget install Anthropic.ClaudeCode

84 ```84 ```

85 85 

Details

43 <Step title="打开管理控制台">43 <Step title="打开管理控制台">

44 在 claude.ai 控制台中,转到 [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code)。44 在 claude.ai 控制台中,转到 [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code)。

45 45 

46 如果链接将您重定向到其他 Organization settings 页面而不是 Claude Code 页面,则说明您的账户没有所需的角色。Admin 和其他非 Owner 角色无法查看或编辑托管设置,因此请要求您的组织中的 Owner 或 Primary Owner 进行更改。请参阅[访问控制](#access-control)。46 在 Team 或 Enterprise 组织中,如果页面显示您没有访问权限,请让 [Owner 或 Primary Owner](#access-control) 进行更改。

47 </Step>47 </Step>

48 48 

49 <Step title="定义您的设置">49 <Step title="定义您的设置">

sessions.md +3 −3

Details

83* 终端:`claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时),不带 `-p`。Claude Code 恢复会话所在的权限模式,除了表中的情况。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。83* 终端:`claude --continue`、`claude --resume <session-id>` 或 `claude --resume <name>`(当名称与一个会话匹配时),不带 `-p`。Claude Code 恢复会话所在的权限模式,除了表中的情况。传递 `--permission-mode` 或 `--dangerously-skip-permissions` 以覆盖恢复的模式。

84* 非交互式:`claude -p --resume` 或 `claude -p --continue`。Claude Code 在新 `claude -p` 运行会启动的权限模式中启动运行,除了在[下面的条件](#resume-in-plan-mode-with-p)下以计划模式结束的会话在计划模式中恢复。84* 非交互式:`claude -p --resume` 或 `claude -p --continue`。Claude Code 在新 `claude -p` 运行会启动的权限模式中启动运行,除了在[下面的条件](#resume-in-plan-mode-with-p)下以计划模式结束的会话在计划模式中恢复。

85* VS Code:扩展的对话面板。该表仅涵盖以计划模式结束的对话;对于其余部分,请参阅[恢复过去的对话](/docs/zh-CN/vs-code#resume-past-conversations)。85* VS Code:扩展的对话面板。该表仅涵盖以计划模式结束的对话;对于其余部分,请参阅[恢复过去的对话](/docs/zh-CN/vs-code#resume-past-conversations)。

86* 启动时的会话选择器:您从[会话选择器](#use-the-session-picker)中选择的会话,无论您是使用 `claude --resume` 单独打开它、`claude --from-pr` 还是与多个会话匹配的名称。Claude Code 不恢复存储的权限模式。它在从同一命令行启动新会话的权限模式中启动会话。86* 启动时的会话选择器:您从[会话选择器](#use-the-session-picker)中选择的会话,无论您是单独使用 `claude --resume`、使用 `claude --from-pr`,还是使用与多个会话匹配的名称打开它。Claude Code 以从同一命令行启动新会话时的权限模式启动该会话,但以计划模式结束的会话会以计划模式恢复,除非您传递 `--permission-mode`、`--dangerously-skip-permissions` 或 `--fork-session`。不会恢复其他存储的权限模式。

87* 会话内的 `/resume`,带或不带参数:Claude Code 不恢复存储的权限模式。您切换到的对话继续在您当前会话所在的权限模式中。87* 会话内的 `/resume`,带或不带参数:您切换到的对话继续使用您当前会话所在的权限模式,但以计划模式结束的对话会以计划模式恢复,即使您使用 `--permission-mode` 或 `--dangerously-skip-permissions` 启动了 Claude Code。如果该对话在本次运行 Claude Code 期间已经打开过,例如您开始时的对话,或您通过 `/clear` 或 `/resume` 离开的对话,则它会改为继续使用您当前的权限模式。

88 88 

89在非交互式和 VS Code 路径上恢复计划模式需要 Claude Code v2.1.246 或更高版本。每一行命名会话结束的权限模式、您通过哪个终端、非交互式和 VS Code 路径恢复它,以及 Claude Code 启动恢复会话的权限模式。89在非交互式和 VS Code 路径上恢复计划模式需要 Claude Code v2.1.246 或更高版本。每一行命名会话结束的权限模式、您通过哪个终端、非交互式和 VS Code 路径恢复它,以及 Claude Code 启动恢复会话的权限模式。

90 90 

91| 会话结束于 | 您如何恢复 | 恢复后的权限模式 |91| 会话结束于 | 您如何恢复 | 恢复后的权限模式 |

92| :- | :- | :- |92| :- | :- | :- |

93| `bypassPermissions` | 终端 | 新会话会启动的权限模式。要再次[绕过权限](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode),在启动时使用其启动标志之一或[用户、`--settings` 或托管设置](/docs/zh-CN/settings-reference#permissions-defaultmode)中的 `permissions.defaultMode: "bypassPermissions"` 启用它 |93| `bypassPermissions` | 终端 | 新会话会启动的权限模式。要再次[绕过权限](/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode),在启动时使用其启动标志之一或[用户、`--settings` 或托管设置](/docs/zh-CN/settings-reference#permissions-defaultmode)中的 `permissions.defaultMode: "bypassPermissions"` 启用它 |

94| `plan` | 终端 | 新会话会启动的权限模式 |94| `plan` | 终端 | 计划模式。使用 `--fork-session` 时,为新会话会启动的权限模式 |

95| `auto` | 终端 | `auto`,仅当您的帐户仍然满足[自动模式要求](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)时 |95| `auto` | 终端 | `auto`,仅当您的帐户仍然满足[自动模式要求](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode)时 |

96| Manual | 终端 | 当新会话会从[内置默认值](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)以自动模式启动时,手动模式。当来自设置文件的 `defaultMode` [生效](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)时,Claude Code 在该模式中启动恢复的会话 |96| Manual | 终端 | 当新会话会从[内置默认值](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)以自动模式启动时,手动模式。当来自设置文件的 `defaultMode` [生效](/docs/zh-CN/permission-modes#which-mode-a-session-starts-in)时,Claude Code 在该模式中启动恢复的会话 |

97| `plan` | 非交互式,在[下面的条件](#resume-in-plan-mode-with-p)下 | 计划模式 |97| `plan` | 非交互式,在[下面的条件](#resume-in-plan-mode-with-p)下 | 计划模式 |

sub-agents.md +2 −2

Details

310 310 

311| Field | 必需 | Description |311| Field | 必需 | Description |

312| :- | :- | :- |312| :- | :- | :- |

313| `name` | 是 | 唯一标识符,例如 `code-reviewer` 或 `reviewer-v2`。[Hooks](/docs/zh-CN/hooks#subagentstart) 将此值作为 `agent_type` 接收。文件名不必匹配。名称不能包含 `:`,这是为 [plugin-scoped identifiers](/docs/zh-CN/plugins/overview) 保留的,例如 `my-plugin:reviewer`。Claude Code 不加载名称包含一个的文件,并向调试日志记录错误。在 v2.1.218 之前,这样的名称被接受 |313| `name` | 是 | 最多 256 个字符的唯一标识符,例如 `code-reviewer` 或 `reviewer-v2`。[Hook](/docs/zh-CN/hooks#subagentstart) 以 `agent_type` 的形式接收此值。文件名不必与之一致。名称不能包含 `:`,该字符保留用于[插件作用域标识符](/docs/zh-CN/plugins/overview),例如 `my-plugin:reviewer` |

314| `description` | 是 | Claude 何时应该委托给此 subagent |314| `description` | 是 | Claude 何时应该委托给此 subagent |

315| `tools` | 否 | [Tools](#available-tools) subagent 可以使用,作为逗号分隔的字符串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,继承 subagents 可用的每个工具。如果列表中没有条目解析为工具,subagent 通常 [fails to launch](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools) 并出现错误,命名条目。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |315| `tools` | 否 | [Tools](#available-tools) subagent 可以使用,作为逗号分隔的字符串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,继承 subagents 可用的每个工具。如果列表中没有条目解析为工具,subagent 通常 [fails to launch](/docs/zh-CN/errors#agent-would-be-spawned-with-zero-tools) 并出现错误,命名条目。要将 Skills 预加载到上下文中,请使用 `skills` 字段而不是在此处列出 `Skill` |

316| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除。格式与 `tools` 相同。带有说明符的条目,例如 `Bash(git push *)`,仍然 [removes the whole tool](#available-tools) |316| `disallowedTools` | 否 | 要拒绝的工具,从继承或指定的列表中删除。格式与 `tools` 相同。带有说明符的条目,例如 `Bash(git push *)`,仍然 [removes the whole tool](#available-tools) |


348 348 

349* **没有 `name`**:Claude Code 将文件视为保存在您的代理旁边的文档。349* **没有 `name`**:Claude Code 将文件视为保存在您的代理旁边的文档。

350* **一个开始 `---` 不是文件的第一行**:Claude Code 读取文件为没有 frontmatter,并将其视为文档。350* **一个开始 `---` 不是文件的第一行**:Claude Code 读取文件为没有 frontmatter,并将其视为文档。

351* **一个以 `-` 开头或包含 `:` 的 `name`**:Claude Code 跳过文件并向调试日志写入错误。请参阅上表中的 `name` 行。351* **`name` 以 `-` 开头、包含 `:` 或超过 256 个字符**:Claude Code 跳过该文件,并向调试日志写入一条错误。

352* **一个 `name` 但没有 `description`**:Claude Code 跳过文件并向调试日志写入原因。352* **一个 `name` 但没有 `description`**:Claude Code 跳过文件并向调试日志写入原因。

353* **不解析的 YAML**:Claude Code 从文件读取没有字段,跳过它,并向调试日志写入解析错误。353* **不解析的 YAML**:Claude Code 从文件读取没有字段,跳过它,并向调试日志写入解析错误。

354 354 

vs-code.md +1 −1

Details

606| `environmentVariables` | `[]` | 为 Claude 进程设置环境变量。对于共享配置,请改用 Claude Code 设置。仅当值为绝对路径时,[`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 条目才会生效;扩展不会展开 `~`,并且会忽略相对路径值。 |606| `environmentVariables` | `[]` | 为 Claude 进程设置环境变量。对于共享配置,请改用 Claude Code 设置。仅当值为绝对路径时,[`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 条目才会生效;扩展不会展开 `~`,并且会忽略相对路径值。 |

607| `disableLoginPrompt` | `false` | 跳过身份验证提示(用于第三方提供商设置) |607| `disableLoginPrompt` | `false` | 跳过身份验证提示(用于第三方提供商设置) |

608| `allowDangerouslySkipPermissions` | `false` | 在模式选择器中添加绕过权限。仅在没有互联网访问的沙箱中使用。 |608| `allowDangerouslySkipPermissions` | `false` | 在模式选择器中添加绕过权限。仅在没有互联网访问的沙箱中使用。 |

609| `claudeProcessWrapper` | - | 用于启动 Claude 进程的可执行文件。当存在时,捆绑的二进制路径作为参数传递。如果扩展构建不包含您的平台的二进制文件,请将其设置为单独安装的 `claude` 二进制文件。在包装的设置中,对话以手动模式开始,除非您设置了 `initialPermissionMode` 或在之前的对话中选择了手动、自动编辑或自动,因为扩展会跳过那里的设置和内置默认步骤;请参阅[切换权限模式](/docs/zh-CN/permission-modes#switch-permission-modes)。激活时出现"不支持的平台"错误意味着您的平台没有捆绑的二进制文件;请参阅[哪些平台有预构建的二进制文件](/docs/zh-CN/troubleshoot-install#native-binary-not-found-after-npm-install)。 |609| `claudeProcessWrapper` | - | 用于启动 Claude 进程的可执行文件。当存在时,捆绑的二进制路径作为参数传递。如果扩展构建不包含您的平台的二进制文件,请将其设置为单独安装的 `claude` 二进制文件。 |

610 610 

611<h2 id="use-a-screen-reader">611<h2 id="use-a-screen-reader">

612 使用屏幕阅读器612 使用屏幕阅读器

worktrees.md +3 −1

Details

6 6 

7> 在单独的 git worktrees 中隔离并行 Claude Code 会话,以便更改不会相互冲突。涵盖 `--worktree` 标志、子代理隔离、`.worktreeinclude`、清理和非 git VCS hooks。7> 在单独的 git worktrees 中隔离并行 Claude Code 会话,以便更改不会相互冲突。涵盖 `--worktree` 标志、子代理隔离、`.worktreeinclude`、清理和非 git VCS hooks。

8 8 

9[git worktree](https://git-scm.com/docs/git-worktree) 是一个单独的工作目录,具有自己的文件和分支,但与主检出共享相同的存储库历史和远程。在自己的 worktree 中运行每个 Claude Code 会话意味着一个会话中的编辑永远不会触及另一个会话中的文件,因此一个会话可以构建功能,而第二个会话可以修复错误。9[git worktree](https://git-scm.com/docs/git-worktree) 是一个单独的工作目录,具有自己的文件和分支,但与主检出共享相同的仓库历史和远程。在各自的 worktree 中运行每个 Claude Code 会话,可以为其提供一份单独的文件副本用于编辑,因此一个会话可以构建功能,而第二个会话可以修复错误。

10 10 

11<Note>11<Note>

12 Worktrees 需要 git 存储库;对于其他版本控制系统,请[配置 hooks 来替换 git 逻辑](#non-git-version-control)。在[桌面应用](/docs/zh-CN/desktop#work-in-parallel-with-sessions)中,启动会话时选择 **worktree** 选项,为其提供自己的 worktree。12 Worktrees 需要 git 存储库;对于其他版本控制系统,请[配置 hooks 来替换 git 逻辑](#non-git-version-control)。在[桌面应用](/docs/zh-CN/desktop#work-in-parallel-with-sessions)中,启动会话时选择 **worktree** 选项,为其提供自己的 worktree。


104* **Git 重定向**:Claude Code 阻止将 git 重定向到主检出的 Bash 或 Monitor 命令。重定向可以通过 `git -C`、`--git-dir`、`GIT_DIR` 或 `GIT_WORK_TREE` 变量,或在运行 git 之前 `cd` 到主检出来进行。104* **Git 重定向**:Claude Code 阻止将 git 重定向到主检出的 Bash 或 Monitor 命令。重定向可以通过 `git -C`、`--git-dir`、`GIT_DIR` 或 `GIT_WORK_TREE` 变量,或在运行 git 之前 `cd` 到主检出来进行。

105* **命令形状**:当 Claude Code 无法从命令文本验证命令运行的任何 git 保持在 worktree 内时,它会阻止 Bash 或 Monitor 命令。例如,当命令名称在运行时计算、语法无法解析,或当诸如 `${!name}` 或 `${ command; }` 之类的扩展可能运行文本中未明确说明的命令时,就会发生这种情况。Claude Code 告诉 Claude 如何重写被拒绝的命令,例如将其分割成普通的单独命令。您无法关闭此检查。105* **命令形状**:当 Claude Code 无法从命令文本验证命令运行的任何 git 保持在 worktree 内时,它会阻止 Bash 或 Monitor 命令。例如,当命令名称在运行时计算、语法无法解析,或当诸如 `${!name}` 或 `${ command; }` 之类的扩展可能运行文本中未明确说明的命令时,就会发生这种情况。Claude Code 告诉 Claude 如何重写被拒绝的命令,例如将其分割成普通的单独命令。您无法关闭此检查。

106 106 

107这些检查读取编辑所针对的路径、命令运行所在的目录以及命令的文本。它们都不会跟踪 shell 命令写入了哪些文件,因此,在主检出中写入文件但并未在那里运行 git 的命令(例如 `cp` 或 shell 重定向)不会被这些检查拒绝。Claude Code 会像对待任何其他 shell 命令一样对待该命令,因此它是直接运行还是向您发出提示,取决于您的[权限模式](/docs/zh-CN/permission-modes)和规则。

108 

107检查适用于您启动 Claude Code 的存储库。它们也涵盖链接的 worktree 链接自的主检出。对于 PowerShell 命令,Claude Code 仅应用工作目录检查。109检查适用于您启动 Claude Code 的存储库。它们也涵盖链接的 worktree 链接自的主检出。对于 PowerShell 命令,Claude Code 仅应用工作目录检查。

108 110 

109Claude 将每个拒绝视为命名 worktree 并说明如何继续的工具错误。有关被拒绝的命令,请参阅[拒绝消息的含义以及如何清除它](/docs/zh-CN/errors#command-blocked-by-the-worktree-isolation-checks)。111Claude 将每个拒绝视为命名 worktree 并说明如何继续的工具错误。有关被拒绝的命令,请参阅[拒绝消息的含义以及如何清除它](/docs/zh-CN/errors#command-blocked-by-the-worktree-isolation-checks)。