SpyBara
Go Premium

Documentation 2026-07-28 23:57 UTC to 2026-07-29 19:02 UTC

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

claude-apps-gateway.md +347 −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# Amazon Bedrock、Claude Platform on AWS、Google Cloud 和 Microsoft Foundry 的 Claude 应用网关

6 

7> 通过自托管网关在 Amazon Bedrock、Claude Platform on AWS、Google Cloud 或 Microsoft Foundry 上运行 Claude Code,支持 SSO 登录、按组模型访问和 OTLP 遥测。

8 

9<Note>

10 Claude 应用网关专为必须或倾向于通过自己的云提供商路由推理的组织设计,例如满足[数据驻留](/docs/zh-CN/claude-apps-gateway-deploy#compliance-posture)要求。如果您没有此要求,并且想要访问其他功能,例如 SCIM 配置或 Claude Code 网页和移动版本,Claude Enterprise 可能更适合。请参阅[功能可用性](/docs/zh-CN/feature-availability)页面,了解所有部署方法的完整比较。

11</Note>

12 

13Claude 应用网关是一个自托管服务,位于开发人员的 Claude Code 客户端和模型提供商之间。开发人员使用您的企业身份提供商 (IdP) 登录,而不是持有 API 密钥或云凭证。网关持有上游凭证,按 IdP 组强制执行模型访问和[托管设置](/docs/zh-CN/permissions#managed-settings),并将使用情况遥测转发到您自己的可观测性堆栈。

14 

15它包含在 `claude` 二进制文件中,因此在笔记本电脑上运行 Claude Code 的同一可执行文件可以使用 `claude gateway --config gateway.yaml` 运行网关服务器。

16 

17本页涵盖:

18 

19* [为什么使用 Claude 应用网关](#why-claude-apps-gateway),它相比自己运行的优势,以及何时其他解决方案更合适

20* 一个[快速入门](#quickstart),包含[前置条件](#prerequisites),可将网关从零配置到已登录的开发人员

21* [连接开发人员](#connect-developers),包括通过托管设置设置网关 URL

22* [可用性和限制](#availability-and-limitations),涵盖哪些 Claude Code 功能可通过网关工作以及服务器支持什么

23 

24配套页面深入讲解。[配置参考](/docs/zh-CN/claude-apps-gateway-config)涵盖快速入门编写的 YAML 文件中的每个选项,[部署指南](/docs/zh-CN/claude-apps-gateway-deploy)涵盖每个 IdP 的设置、Kubernetes 和 Cloud Run 部署以及操作。

25 

26<h2 id="why-claude-apps-gateway">

27 为什么使用 Claude apps gateway

28</h2>

29 

30[网关概述](/docs/zh-CN/gateways)涵盖网关的功能以及为什么要运行它。Claude apps gateway 是 Anthropic 自己的网关,内置于 `claude` 二进制文件中,并与每个 Claude Code 版本一起测试,因此它转发 Claude Code 发送的标头和请求字段,无需操作员维护单独的允许列表。部署后,它为您提供:

31 

32* **凭证**:上游 API 密钥或云凭证仅存在于您的基础设施中。开发人员使用公司 SSO 进行身份验证并接收短期的持有者令牌,因此离职发生在您的 IdP 中。取消配置用户,其网关访问权限在会话生命周期内过期,默认为一小时。

33* **访问控制**:您的 IdP 组映射到模型允许列表和[托管设置](/docs/zh-CN/permissions#managed-settings)策略。网关在服务器端强制执行模型访问,拒绝非授予模型的请求,并选择每个组的托管设置策略,CLI 在[托管设置层](/docs/zh-CN/settings#settings-precedence)应用该策略。不同的团队获得不同的模型、工具和权限,开发人员无法覆盖其策略锁定的内容。

34* **设置交付**:网关本身将托管设置交付给已登录的客户端,取代来自 claude.ai 管理员控制台的[服务器管理设置](/docs/zh-CN/server-managed-settings)。

35* **遥测**:每个配置的目标(如 Datadog、Splunk 或 ClickHouse)接收[OpenTelemetry Protocol (OTLP) 指标](/docs/zh-CN/monitoring-usage),默认包含令牌计数、模型、用户身份和延迟,日志和跟踪作为按目标的选择加入。

36* **上游路由**:客户端向网关发送 Anthropic Messages API,网关为每个上游进行转换,无论是 Amazon Bedrock、[AWS 上的 Claude Platform](/docs/zh-CN/claude-platform-on-aws)、Google Cloud 的 Agent Platform、Microsoft Foundry 还是 Anthropic API,并在它们之间进行故障转移。您可以更改区域、提供商或故障转移顺序,而开发人员无需注意或重新配置。

37 

38<Frame>

39 <img src="https://mintcdn.com/claude-code/st9_ZQOFsZa3cKFl/images/claude-gateway-architecture.svg?fit=max&auto=format&n=st9_ZQOFsZa3cKFl&q=85&s=560770d8f49bbd6f1ca7090ed1f13c03" alt="显示 Claude Code 客户端通过 HTTPS 和持有者令牌连接到基础设施内自托管的 Claude apps gateway 的图表,网关针对您的 IdP 对用户进行签名,在 PostgreSQL 中存储身份验证状态,将遥测转发到您的 OTLP 收集器,并将推理转发到 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud、Microsoft Foundry 或 Anthropic API" width="760" height="320" data-path="images/claude-gateway-architecture.svg" />

40</Frame>

41 

42<Note>

43 网关自己的数据平面不会向 Anthropic 基础设施发送任何内容,除非 Anthropic API 是配置的上游。您控制遥测、审计日志、托管设置和开发人员的 IdP 身份的去向,网关不会将它们中的任何一个发送给 Anthropic。对于其余流量,CLI 进程可以发送什么以及如何关闭它,请参阅[合规态势](/docs/zh-CN/claude-apps-gateway-deploy#compliance-posture)。

44</Note>

45 

46有关哪些 Claude Code 功能通过网关工作以及服务器本身支持什么,请参阅下面的[可用性和限制](#availability-and-limitations)。有关成本、绕过、运行多个网关和无服务器平台等决策,请参阅[部署指南](/docs/zh-CN/claude-apps-gateway-deploy#deployment)。

47 

48<h3 id="other-gateway-implementations">

49 其他网关实现

50</h3>

51 

52如果您已经运行满足您需求的 LLM 网关或 API 网关,请继续使用它;[其他 LLM 网关](/docs/zh-CN/llm-gateway)涵盖针对它配置 Claude Code。

53 

54[网关协议参考](/docs/zh-CN/llm-gateway-protocol)记录了 Claude Code 期望从任何网关获得的合同:它调用的端点、要转发的标头和正文字段,以及删除它们时停止工作的内容。运行中的 Claude apps gateway 在 `GET /protocol` 处提供该合同的超集,添加 Claude apps gateway 特定的端点用于 SSO 登录、托管设置交付和遥测。使用 `curl https://claude-gateway.internal.example.com/protocol` 从任何已部署的网关(例如下面[快速入门](#quickstart)生成的网关)获取它。协议的重大更改会提前宣布,但不保证无限期的向后兼容性。

55 

56<h2 id="quickstart">

57 快速入门

58</h2>

59 

60本快速入门演示最小路径:在您的 IdP 中注册 OAuth 客户端,编写 `gateway.yaml`,使用 Docker Compose 运行网关和 Postgres,并端到端验证登录。它使用 Amazon Bedrock 上游;Claude Platform on AWS、Google Cloud 的 Agent Platform、Microsoft Foundry 和 Anthropic API 同样受支持,只需交换[配置参考](/docs/zh-CN/claude-apps-gateway-config#upstreams)中所示的 `upstreams` 块。最后,您有一个开发人员可以 `/login` 的网关。

61 

62<Note>

63 **在您的私有网络上部署。** Claude Code 仅连接到地址为私有的网关。这是一个安全防护,因为受信任的网关可以推送在开发人员机器上运行命令的设置。将网关放在内部负载均衡器或 VPN 后面,并给它一个仅解析为私有 IP 的主机名。

64 

65 Anthropic 运营的公共网关端点是例外:`/login` 通过 `https://` 接受它们。这些是 Anthropic 本身运营的一小组固定网关;它们不是您可以选择或配置的部署选项。该列表被编译到 Claude Code 中,因此没有配置可以向其添加主机名,您托管的任何网关都不符合豁免条件。{/* min-version: 2.1.206 */}在 v2.1.206 之前,`/login` 像拒绝任何其他公共地址一样拒绝这些端点。

66</Note>

67 

68<h3 id="prerequisites">

69 前置条件

70</h3>

71 

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

73 

74| 您需要 | 详情 |

75| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

78| PostgreSQL 14 或更高版本 | 支持设备登录流,其中浏览器回调写入,轮询 CLI 读取,加上速率限制计数器。任何托管 Postgres 都可以,包括最小层级。在没有配置支出限制的情况下,网关存储几 KB 的短期身份验证状态;使用[支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits),它还保存应备份的持久支出、审计和身份表。建议通过 `?sslmode=require` 使用 TLS。 |

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

80| HTTPS | 网关必须可从开发人员笔记本电脑和用于登录的任何浏览器通过 `https://` 访问;网关在同一侦听器上提供设备验证页面。通过 `listen.tls` 提供 TLS 证书,或在 TLS 终止入口后运行并设置 `listen.public_url`。纯 `http://` 源仅在本地开发的环回上接受。 |

81| 私有网络地址 | 在 `/login` 处,Claude Code 要求网关的主机名或 IP 地址仅解析为私有地址:RFC 1918、CGNAT `100.64.0.0/10`、IPv6 ULA `fc00::/7` 或本地开发的环回。检查在每个解析的 IP 上运行,因此如果名称解析到的任何地址是公共的,`/login` 会拒绝该 URL。如果开发人员机器通过公司代理路由 HTTPS,登录还要求代理主机解析为私有地址;如果不是,将网关主机添加到 `NO_PROXY`,以便 CLI 直接连接。{/* min-version: 2.1.206 */}Anthropic 运营的公共网关端点豁免于私有地址和代理检查:`/login` 通过精确主机名匹配接受它们通过 `https://`,因此私有网络要求仅适用于您自己托管的网关。在 v2.1.206 之前,`/login` 像拒绝任何其他公共地址一样拒绝 Anthropic 运营的端点。 |

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

83 

84网关服务器需要本机 `claude` 二进制文件;如[安装 Claude Code](/docs/zh-CN/setup) 中所述下载固定版本。服务器使用在 Claude Code 在 Node 下运行时不可用的运行时功能。如果您在启动时看到 `requires the native binary`,请切换到其中一种独立安装方法。

85 

86<h3 id="steps">

87 步骤

88</h3>

89 

90<Steps>

91 <Step title="在您的 IdP 中注册 OAuth 客户端">

92 首先决定网关的主机名,因为重定向 URI 必须与其匹配。创建新的 OIDC Web 应用程序并将重定向 URI 设置为 `https://claude-gateway.<your-domain>/oauth/callback`,其中主机是您在步骤 3 中设置为 [`listen.public_url`](/docs/zh-CN/claude-apps-gateway-config#listen) 的相同值。记下 `client_id` 和 `client_secret`。每个 IdP 的说明在[身份提供商设置](/docs/zh-CN/claude-apps-gateway-deploy#identity-provider-setup)中。

93 </Step>

94 

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

96 任何 Postgres 14 或更高版本都可以,包括最小的托管层级。网关在启动时运行自己的架构迁移,因此数据库用户需要 `CREATE TABLE` 权限。如果您的安全策略禁止应用程序角色的 DDL,请改为预先创建架构;请参阅 [`store`](/docs/zh-CN/claude-apps-gateway-config#store)。

97 </Step>

98 

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

100 通过 `${ENV_VAR}` 扩展读取机密,因此文件本身可以存在于版本控制中。使用在您的网络上解析为私有 IP 的 `public_url` 主机名,因为 `/login` 拒绝公共地址。最小配置有五个部分,其他所有字段都有默认值:

101 

102 ```yaml gateway.yaml theme={null}

103 listen:

104 host: 0.0.0.0

105 port: 8080

106 # 在任何 TLS 终止代理后需要。用于 IdP

107 # redirect_uri 和发现文档。

108 public_url: https://claude-gateway.internal.example.com

109 

110 oidc:

111 issuer: https://login.example.com # 必须提供 /.well-known/openid-configuration

112 client_id: 0oa1example2

113 client_secret: ${OIDC_CLIENT_SECRET}

114 allowed_email_domains: [example.com] # 拒绝组织外的 id_tokens

115 userinfo_fallback: true # 对于 id_token 省略 email/groups 的 IdP;否则无害

116 

117 session:

118 jwt_secret: ${GATEWAY_JWT_SECRET} # openssl rand -base64 32

119 ttl_hours: 1 # 也限制 IdP 取消配置时的撤销延迟

120 

121 store:

122 postgres_url: ${GATEWAY_POSTGRES_URL} # 为托管 Postgres 添加 ?sslmode=require

123 

124 upstreams:

125 - provider: bedrock

126 region: us-east-1

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

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

129 

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

131 # 将 claude-opus-4-8 映射到 us.anthropic.claude-opus-4-8 等,

132 # 对于每个 Bedrock 支持的 Claude 模型。设置为 false 并添加 `models:` 列表以

133 # 仅公开特定模型。

134 auto_include_builtin_models: true

135 ```

136 

137 此配置足以使用默认 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 或非美国地区。

138 

139 <Note>

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

141 </Note>

142 </Step>

143 

144 <Step title="运行它">

145 围绕满足[镜像要求](/docs/zh-CN/claude-apps-gateway-deploy#container-image)的 `claude` 二进制文件构建容器镜像,然后将其与 Postgres 一起运行:

146 

147 ```yaml docker-compose.yaml theme={null}

148 services:

149 gateway:

150 image: <your-registry>/claude-gateway:<version>

151 ports: ["8080:8080"]

152 volumes: ["./gateway.yaml:/etc/claude/gateway.yaml:ro"]

153 environment:

154 OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}

155 GATEWAY_JWT_SECRET: ${GATEWAY_JWT_SECRET}

156 GATEWAY_POSTGRES_URL: postgres://gw:pw@postgres/gateway

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

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

159 AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}

160 AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}

161 AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN}

162 depends_on:

163 postgres:

164 condition: service_healthy

165 postgres:

166 image: postgres:16-alpine

167 environment: { POSTGRES_USER: gw, POSTGRES_PASSWORD: pw, POSTGRES_DB: gateway }

168 healthcheck:

169 test: ["CMD-SHELL", "pg_isready -U gw"]

170 interval: 5s

171 volumes: ["pgdata:/var/lib/postgresql/data"]

172 volumes: { pgdata: }

173 ```

174 

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

176 

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

178 

179 监视 stderr 以获取启动序列。日志行使用格式 `[gateway] <timestamp> <level> <message>`,审计事件是带有 `evt` 字段的单行 JSON,启动横幅(下面省略)在迁移和侦听行之间打印。您应该按顺序看到:

180 

181 ```text theme={null}

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

183 [gateway] 2026-06-10T17:03:21.408Z info migration 1 applied

184 [gateway] 2026-06-10T17:03:21.512Z info claude gateway listening on http://0.0.0.0:8080

185 ```

186 

187 如果启动在 `claude gateway listening on` 行之前退出,stderr 的最后一行命名问题:

188 

189 * 无法访问的 Postgres

190 * 没有 DDL 权限的 Postgres 角色

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

192 * 配置架构违规,带有违规字段路径

193 

194 修复它并重新启动。

195 

196 如果您已经有 TLS 终止入口,请跳过 Compose 并直接使用 `claude gateway --config gateway.yaml` 运行二进制文件。将 `public_url` 设置为入口源,并将 `listen` 绑定到环回或集群内部地址。

197 </Step>

198 

199 <Step title="验证身份验证表面">

200 三个检查确认网关可以在将其交给开发人员之前对真实用户进行身份验证。

201 

202 示例使用网关的公共 URL;对于没有入口的本地 Compose 设置,在前两个检查中替换 `http://localhost:8080`。第三个检查打开 `verification_uri_complete`,它从 `public_url` 构建,因此对于本地 Compose,在 `gateway.yaml` 中设置 `public_url: http://localhost:8080`,并在步骤 1 的 OAuth 客户端上添加 `http://localhost:8080/oauth/callback` 作为第二个重定向 URI,因为网关从 `public_url` 构建 IdP `redirect_uri`。验证链接然后在您的本地浏览器中打开。

203 

204 在 Windows PowerShell 中,运行 `curl.exe`;裸 `curl` 是 `Invoke-WebRequest` 的别名,拒绝这些标志。

205 

206 首先,获取发现文档,确认网关已启动,配置有效,所有启动检查都通过:

207 

208 ```bash theme={null}

209 curl -s https://claude-gateway.internal.example.com/.well-known/oauth-authorization-server | jq

210 ```

211 

212 ```json theme={null}

213 {

214 "issuer": "https://claude-gateway.internal.example.com",

215 "device_authorization_endpoint": "…/oauth/device_authorization",

216 "token_endpoint": "…/oauth/token",

217 "grant_types_supported": ["urn:ietf:params:oauth:grant-type:device_code", "refresh_token"]

218 }

219 ```

220 

221 响应包括其他字段,如 `response_types_supported` 和 `scopes_supported`。

222 

223 其次,请求设备授权,确认设备登录流工作且 Postgres 可访问且可写:

224 

225 ```bash theme={null}

226 curl -s -X POST https://claude-gateway.internal.example.com/oauth/device_authorization | jq

227 ```

228 

229 ```json theme={null}

230 {

231 "device_code": "…",

232 "user_code": "WDJB-MJHT",

233 "verification_uri": "https://claude-gateway.internal.example.com/device",

234 "verification_uri_complete": "https://claude-gateway.internal.example.com/device?user_code=WDJB-MJHT",

235 "expires_in": 600,

236 "interval": 5

237 }

238 ```

239 

240 第三,通过在浏览器中打开 `verification_uri_complete` 并确认代码来测试浏览器部分。您应该被重定向到您的 IdP 的登录页面,登录后,返回网关并显示已登录确认。

241 

242 使用第一个失败的检查来定位问题:

243 

244 * **第一个检查失败**:启动未完成;检查 stderr

245 * **第二个检查失败**:Postgres 无法从网关访问或角色无法写入;检查连接字符串和授予

246 * **第三个检查未到达 IdP**:检查 IdP 的重定向 URI 是否与 `https://<gateway>/oauth/callback` 完全匹配

247 * **第三个检查到达 IdP 但以错误反弹**:读取网关的审计日志,它记录每个身份验证拒绝及其原因,例如 `email domain not allowed`

248 </Step>

249 

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

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

252 </Step>

253</Steps>

254 

255<h2 id="connect-developers">

256 连接开发人员

257</h2>

258 

259开发人员从自己的笔记本电脑使用一次浏览器登录进行连接,使用他们的公司工作账户。他们不需要 claude.ai 账户、API 密钥或订阅,因为对模型的请求通过网关使用组织的上游凭证。连接由您通过 MDM 推送的[客户端托管设置](/docs/zh-CN/claude-apps-gateway-config#client-side-managed-settings)驱动,因此开发人员端没有手动设置;本部分涵盖管理员配置的内容。

260 

261CLI 在首次连接时对网关的 TLS 叶证书进行指纹识别,并按主机名固定它。发布预期的 SHA-256 指纹以及网关 URL,以便开发人员有东西可以比较。使用 `openssl x509 -noout -fingerprint -sha256 -in cert.pem` 从证书文件获取指纹;`/login` 提示显示摘要的前 16 个字符作为小写十六进制,无分隔符。

262 

263当证书轮换时,每个开发人员都会再次看到信任提示,因此将轮换视为计划事件并重新发布指纹。

264 

265登录后,[模型选择器](/docs/zh-CN/model-config)显示开发人员 `availableModels` 允许列表中的模型,托管设置在启动时应用并每小时刷新一次,遥测路由到您的收集器。会话在 `ttl_hours` 过期前静默刷新,IdP 取消配置后的失败刷新会提示重新登录。

266 

267<h3 id="set-the-gateway-url">

268 设置网关 URL

269</h3>

270 

271在您通过 MDM 或直接在磁盘上部署的每个操作系统[托管设置文件](/docs/zh-CN/settings#settings-files)中设置两个密钥,`/login` 直接在**Cloud gateway** 屏幕上打开,URL 已填入:

272 

273```json theme={null}

274{

275 "forceLoginMethod": "gateway",

276 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

277}

278```

279 

280开发人员按 Enter 连接。首次连接 TLS 指纹提示仍然出现。

281 

282登录选择器中没有网关选项供开发人员手动选择,`forceLoginGatewayUrl` 在开发人员自己的设置文件中被忽略。单独的 `forceLoginMethod`,没有 URL,将开发人员留在"联系您的 IT 管理员"消息处。两个密钥都属于您推送到机器的文件中,而不是网关的 `managed.policies[].cli` 块中,该块仅到达已连接的客户端。

283 

284<h3 id="ci-pipelines-and-remote-machines">

285 CI 管道和远程机器

286</h3>

287 

288没有用于无人值守管道的服务令牌流。网关登录始终运行浏览器设备流,因此没有开发人员批准登录的 CI 作业无法进行身份验证;针对您的提供商直接配置这些。开发人员登录后,该机器上的每个 Claude Code 调用都使用网关会话,包括非交互式 `claude -p` 运行和由 Agent SDK 启动的会话,[网关策略适用于所有这些](/docs/zh-CN/claude-apps-gateway-config#managed)。

289 

290设备流将轮询 CLI 与批准浏览器分开,因此没有显示的远程开发框仍然有效:开发人员通过 SSH 在远程机器上运行 `/login`,并在笔记本电脑上的浏览器中打开验证链接。

291 

292<h3 id="what’s-enforced-on-developers">

293 对开发人员强制执行的内容

294</h3>

295 

296这些保证适用于每个已登录的网关会话。

297 

298* **模型访问**:对策略未授予的模型的请求返回 400,`/model` 选择器被过滤到策略的 `availableModels` 允许列表。在策略中设置 [`enforceAvailableModels: true`](/docs/zh-CN/model-config#default-model-behavior),以便 Default 选项解析为 `availableModels` 内的模型,而不是 Claude Code 的内置默认值;没有它,Default 保持可选,如果该模型未被授予,则在请求时被拒绝。

299* **遥测目标**:当[遥测转发](/docs/zh-CN/claude-apps-gateway-config#telemetry)配置时,OTLP 导出端点被固定到网关,网关推送的配置覆盖本地设置的 `OTEL_*` 变量。

300* **凭证**:网关令牌是会话的唯一凭证。`ANTHROPIC_AUTH_TOKEN`、`ANTHROPIC_API_KEY`、`apiKeyHelper` 和任何早期的 claude.ai 登录在登录时被忽略,因此开发人员不需要首先从 claude.ai 注销。

301* **托管设置**:锁定的密钥无法在本地覆盖。CLI 在启动时和每个小时轮询时应用策略。

302* **启动**:当网关无法访问时,已登录的会话在启动时约 10 秒后以错误退出,而不是在没有其设置的情况下启动。

303* **取消配置**:用户在 IdP 中被禁用的会话在下一次刷新失败时在 `ttl_hours` 内过期。

304 

305<h3 id="what-the-organization-can-see">

306 组织可以看到什么

307</h3>

308 

309使用情况遥测携带开发人员的身份、令牌计数、模型和延迟到组织的收集器。网关不记录或存储提示或完成内容。是否收集更丰富的遥测(如日志和跟踪),可能包括命令和文件路径,是组织的[按目标选择](/docs/zh-CN/claude-apps-gateway-config#telemetry)。

310 

311<h2 id="availability-and-limitations">

312 可用性和限制

313</h2>

314 

315该表涵盖当开发人员通过网关连接时哪些 Claude Code 功能有效,以及网关服务器本身支持什么。如果不支持某些内容,Notes 列给出替代方案。

316 

317网关交付 CLI 发送给每个上游的 [`anthropic-beta`](https://platform.claude.com/docs/en/api/beta-headers) 值,因此操作员不维护 beta 允许列表。对于忽略标头的 Amazon Bedrock,网关将值移到请求正文的 `anthropic_beta` 字段中;其他上游按发送的方式接收标头。CLI 的网关会话 beta 集省略仅第一方 beta 和扩展缓存 TTL beta,这就是为什么下面这些行显示为不可用。

318 

319| 功能 | 状态 | 注释 |

320| ------------------------------------------------------------------------------------------------------ | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

321| 推理转发 (Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform、Microsoft Foundry、Anthropic) | 可用 | 具有按上游模型转换和故障转移。Amazon Bedrock 上游使用 `bedrock-runtime` 端点和 AWS 默认凭证链;Amazon Bedrock [Mantle 端点](/docs/zh-CN/amazon-bedrock#use-the-mantle-endpoint)不是支持的上游。[Claude Platform on AWS 上游](/docs/zh-CN/claude-apps-gateway-config#claude-platform-on-aws)需要网关服务器上的 Claude Code v2.1.198 或更高版本。 |

322| 按 IdP 组的模型访问和托管设置 | 可用 | 模型访问在服务器端强制执行;托管设置按 IdP 组交付,由 CLI 在[托管设置层](/docs/zh-CN/settings#settings-precedence)应用 |

323| 遥测扇出 (OTLP/HTTP) | 可用 | 按导出标识戳;protobuf 和 JSON 编码 |

324| OIDC 身份提供商 | 可用 | 任何符合 OIDC 的 IdP;网关运行标准 OIDC 发现和授权代码流。请参阅[身份提供商设置](/docs/zh-CN/claude-apps-gateway-deploy#identity-provider-setup)了解每个 IdP 的配置 |

325| 按用户和按组支出限制 | 可用 | 请参阅[支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits) |

326| 服务器端网络搜索 | 不可用 | CLI 无法看到网关路由到哪个上游提供商,因此无法验证网络搜索支持并在网关会话上禁用 WebSearch |

327| 标准提示缓存 | 可用 | `cache_control` 断点被转发到每个上游 |

328| 1 小时缓存 TTL | 不可用 | CLI 在网关会话上省略扩展缓存 TTL beta,因为并非网关可以路由到的每个上游都支持 1 小时 TTL,因此通过网关的提示缓存使用 5 分钟 TTL;请参阅上面的 beta 标头注释 |

329| Auto 模式 | 可用 | 遵循[第三方提供商规则](/docs/zh-CN/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry):仅第三方提供商上符合条件的模型可以使用它。{/* min-version: 2.1.207 */}在 v2.1.207 之前,网关会话上的 auto 模式需要设置 `CLAUDE_CODE_ENABLE_AUTO_MODE=1`,可通过托管策略 `env` 块交付 |

330| 仅第一方优化,如全局缓存范围和令牌高效工具 | 不可用 | CLI 在网关会话上不启用它们;请参阅上面的 beta 标头注释 |

331| OTLP/gRPC | 不支持 | 仅 OTLP over HTTP |

332| SAML、LDAP 和其他非 OIDC 身份验证 | 不支持 | 仅 OIDC。如果需要,使用 OIDC 桥前置 |

333| 多租户(多个 OIDC 发行者) | 不支持 | 每个网关一个发行者。运行单独的实例 |

334| Windows 服务器 | 不支持 | 在 Linux 上部署。仅本地开发的 macOS |

335| Helm 图表 | 不可用 | 网关作为标准无状态 Deployment 运行;请参阅[部署指南](/docs/zh-CN/claude-apps-gateway-deploy#kubernetes) |

336| 管理员 UI | 不可用 | 配置是 YAML 文件;重新部署以更改它 |

337 

338<h2 id="next-steps">

339 后续步骤

340</h2>

341 

342快速入门让您在 Docker Compose 下运行最小配置。要进一步进行:

343 

344* 扩展 `gateway.yaml` 超越最小配置,例如添加按组 RBAC、多上游故障转移或遥测目标。[配置参考](/docs/zh-CN/claude-apps-gateway-config)涵盖每个选项。

345* 从 Compose 迁移到 Kubernetes 或 Cloud Run 上的生产部署,正确设置您的 IdP,并审查安全模型。[部署和操作指南](/docs/zh-CN/claude-apps-gateway-deploy)涵盖每个 IdP 的设置、容器镜像要求、健康探针和故障排除。

346* 对个别开发人员或组设置支出上限,以便失控的工作负载无法消耗您的整个承诺。[支出限制](/docs/zh-CN/claude-apps-gateway-spend-limits)涵盖管理 API 以及强制执行如何工作。

347* 有关 Google Cloud 的完整工作示例,包括 Cloud Run、Cloud SQL 和 Secret Manager,请参阅[在 Google Cloud 上部署](/docs/zh-CN/claude-apps-gateway-on-gcp)。

corporate-launcher.md +142 −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# 在企业启动器后面运行 Claude Code

6 

7> 通过 CLAUDE_CODE_PROCESS_WRAPPER 使用必需的启动器路由 Claude Code 从其自身二进制文件启动的进程,包括后台服务和每个代理视图会话。

8 

9某些组织要求工作站上的每个进程都通过强制启动器启动。启动器应用沙箱、网络控制或凭证注入,这些是公司安全态势所依赖的,而不通过它启动的二进制文件是策略违规。

10 

11`CLAUDE_CODE_PROCESS_WRAPPER` 通过您的启动器启动 Claude Code 从其自身二进制文件启动的每个进程:后台服务、它在 [agent view](/docs/zh-CN/agent-view) 中托管的每个会话,以及 Claude Code 在更新后的重新启动。将其设置为启动器的绝对路径,Claude Code 将使用 Claude Code 命令作为其参数运行启动器。

12 

13在您的 `PATH` 上包装 `claude` 命令的启动器无法到达这些进程,因为它们从二进制文件的直接路径启动,不查询 `claude`。

14 

15<Note>

16 `CLAUDE_CODE_PROCESS_WRAPPER` 需要 Claude Code v2.1.208 或更高版本。早期版本忽略该变量并启动每个未包装的进程。

17</Note>

18 

19<h2 id="what-the-launcher-covers">

20 启动器覆盖的内容

21</h2>

22 

23设置 `CLAUDE_CODE_PROCESS_WRAPPER` 后,Claude Code 通过您的启动器启动以下每个进程:

24 

25* `claude agents` 和后台会话按需启动的后台服务。

26* 每个代理视图行内的终端主机和 Claude Code 会话,包括服务保持就绪的热备用会话。

27* 服务在更新或崩溃后重新生成的会话。

28* Claude Code 执行的自身重新启动以完成更新安装,包括代理视图的重启以更新操作。

29 

30在 Windows 上,该变量被忽略:启动器契约取决于 `exec`,Windows 不支持。设置了该变量的 Windows 机器运行每个未包装的进程并继续工作,唯一的信号是 [debug log](/docs/zh-CN/troubleshooting) 中的警告。如果您的启动器策略涵盖 Windows,该变量在那里不满足它:在规划推出时将 Windows 机器计为未包装。

31 

32<h3 id="processes-that-start-outside-the-launcher">

33 在启动器外启动的进程

34</h3>

35 

36三个进程永远不会通过启动器启动:

37 

38* [已安装的后台服务](/docs/zh-CN/agent-view#the-supervisor-process):`launchd` 或 `systemd` 从其单元文件启动该进程。当这适用时,`/status` 和 `claude daemon status` 会发出警告,一旦服务使用设置中的变量重新启动,服务生成的会话仍会通过启动器启动。

39* 您自己在终端中启动的会话,它运行的方式取决于您如何调用它。要覆盖这些会话,在 `PATH` 上较早的目录中放置一个名为 `claude` 的脚本,该脚本使用真实二进制文件运行您的启动器;不要替换托管符号链接。自生成不查询 `PATH`,所以两个启动器永远不会堆叠。

40* `claude-cli://` 深层链接的第一个进程,操作系统的协议处理程序直接启动。该会话之后在后台启动的所有内容都通过启动器运行。要完全关闭此路径,请使用 `disableDeepLinkRegistration` 设置 [prevent handler registration](/docs/zh-CN/deep-links#registration-and-supported-platforms)。

41 

42<h3 id="helper-process-names-in-process-monitors">

43 进程监视器中的辅助进程名称

44</h3>

45 

46配置了启动器后,`ps` 和 Activity Monitor 显示后台辅助进程的版本化二进制名称,而不是 Claude Code 的 `claude bg-pty-host` 和 `claude bg-spare` 标签,因为启动器的 `exec` 重建了参数列表。重命名是副作用,不是隐瞒:进程在其他方面保持不变,Claude Code 通过二进制路径识别自己的进程,从不通过显示名称。

47 

48<h2 id="set-up-the-launcher">

49 设置启动器

50</h2>

51 

52<Steps>

53 <Step title="编写启动器脚本">

54 在绝对路径(例如 `/opt/corp/launcher`)创建可执行脚本。Claude Code 使用完整的 Claude Code 命令作为其参数运行它,脚本必须以调用 `exec "$@"` 结尾,以便它用 Claude Code 替换自己:

55 

56 ```bash theme={null}

57 #!/bin/sh

58 # 您组织的设置:进入沙箱、应用

59 # 网络控制或注入凭证。

60 exec "$@"

61 ```

62 

63 使用 `chmod +x` 使其可执行。设置部分是启动器在 Claude Code 运行前必须做的任何事情;下面的 [the launcher contract](#the-launcher-contract) 列出脚本必须遵循的规则。

64 

65 <Note>

66 如果您之前用启动器替换了 `~/.local/bin/claude` 符号链接,请在同一更改中恢复原始符号链接。替换的符号链接会导致第一个包装的会话同时通过两个启动器启动后台服务,并将安装置于外部管理状态:`/doctor` 报告它,自动更新保留文件,旧版本的清理保持禁用,直到安装程序再次管理该路径。

67 </Note>

68 </Step>

69 

70 <Step title="在设置中设置 CLAUDE_CODE_PROCESS_WRAPPER">

71 在设置文件的 `env` 块中设置变量,以便分离的后台服务继承它。shell `export` 不够:后台服务按需启动,超过您的 shell 生命周期,并且从不重新读取 shell 配置文件。

72 

73 对于一台机器,将其添加到 `~/.claude/settings.json`。要将其部署到组织中的每台机器,请在 [managed settings](/docs/zh-CN/permissions#managed-settings) 中放置相同的块:

74 

75 ```json theme={null}

76 {

77 "env": {

78 "CLAUDE_CODE_PROCESS_WRAPPER": "/opt/corp/launcher"

79 }

80 }

81 ```

82 

83 当多个源设置变量时,托管设置值覆盖 `~/.claude/settings.json` 和 shell 中导出的值,因此用户无法将自生成指向不同的启动器。

84 

85 项目和本地设置无法设置此变量。提交到存储库的文件不能在机器上的每个 Claude Code 进程前放置二进制文件,因此 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `CLAUDE_CODE_PROCESS_WRAPPER` 被忽略,并在 [debug log](/docs/zh-CN/troubleshooting) 中发出警告。

86 </Step>

87 

88 <Step title="重新启动后台服务和您的会话">

89 运行的后台服务和任何打开的 `claude` 会话在启动时读取变量一次,因此它们继续启动未包装的进程,直到重新启动。运行 `claude daemon stop --any` 停止按需服务;下一个需要它的命令(例如 `claude agents`)启动一个包装的。[installed service](/docs/zh-CN/agent-view#the-supervisor-process) 采用 `claude daemon stop` 不带 `--any`。然后重新启动您打开的 `claude` 会话。

90 

91 在您无法手动重新启动的机器上,设置推送后启动的第一个会话自动停用剩余的未包装按需服务。没有新会话启动的机器保持其未包装的服务,直到启动一个,已安装的服务始终需要此步骤中的重新启动。

92 </Step>

93 

94 <Step title="验证">

95 在会话中运行 `/status`:Self-exec 条目显示已解析的启动命令,并在运行的后台服务与其不匹配时发出警告。`claude daemon status` 从 shell 打印相同的信息,包括在您取消设置变量后,当 `/status` 不再显示条目时。

96 </Step>

97</Steps>

98 

99<h2 id="the-launcher-contract">

100 启动器契约

101</h2>

102 

103当启动器无法运行时,Claude Code 拒绝启动进程,而不是启动它未包装。在 Windows 上,[the variable is ignored](#what-the-launcher-covers) 并且进程启动未包装。Claude Code 对脚本持有这些规则:

104 

105* **以 `exec "$@"` 结尾。** 启动器分叉子进程并退出会留下孤立的 Claude Code 进程,后台服务无法跟踪。代理视图用命名启动器的消息标记此类会话失败,服务收割启动器留下的内容。

106* **不要重新排序、吸收或前置参数。** 第一个参数是 Claude Code 二进制文件,其后的所有内容都是其 argv。

107* **将每个继承的环境变量传递给 `exec`。** 添加变量(例如注入的凭证)很好;删除继承的变量不是。

108 * 每个会话的身份验证令牌、模型和提供程序选择以及 `CLAUDE_CODE_PROCESS_WRAPPER` 本身都在继承的环境中传输,因此从允许列表重建它的启动器会破坏它启动的会话,`/status` 报告启动器不匹配。

109 * 如果启动器必须进入重置环境的命名空间或沙箱,请在其内部逐字重新导出继承的环境。

110* **在大约三秒内到达 `exec`,每次启动器运行。** 冷后台调度在第一个输出字节之前连续运行启动器两次,因此请懒惰地或从缓存中执行单点登录交换等缓慢工作。

111 * 运行远超预算的启动器被视为停滞启动并重新启动。

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

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

114 

115<h3 id="format-of-the-claude_code_process_wrapper-value">

116 `CLAUDE_CODE_PROCESS_WRAPPER` 值的格式

117</h3>

118 

119对于大多数启动器,该值只是脚本的绝对路径,例如 `/opt/corp/launcher`。

120 

121要传递启动器自己的参数,请在路径后写入它们。Claude Code 将值解析为参数列表,而不是 shell 命令:

122 

123* 空格分隔令牌,双引号将包含空格的令牌分组。

124* 以 `[` 开头的值被读取为 JSON 字符串数组,例如 `["/opt/corp/launcher", "--profile", "cc"]`。

125* Shell 语法不起作用:没有变量扩展或通配符,未引用的运算符(例如 `;`、`|`、`&` 或 `$(`)被拒绝为配置错误,而不是重新解释。

126 

127当无法使用该值时,Claude Code 拒绝启动受影响的进程并 [reports the reason](/docs/zh-CN/errors#claude_code_process_wrapper-launcher-errors)。

128 

129<h2 id="relationship-to-claude_code_shell_prefix">

130 与 `CLAUDE_CODE_SHELL_PREFIX` 的关系

131</h2>

132 

133`CLAUDE_CODE_PROCESS_WRAPPER` 包装 Claude Code 自己的进程,并将命令作为单独的 argv 令牌传递给启动器以 `exec`。[`CLAUDE_CODE_SHELL_PREFIX`](/docs/zh-CN/env-vars) 包装 Claude 代表您运行的 shell 命令,例如 Bash 工具调用、hooks 和启动 stdio MCP 服务器的命令,并将每个作为单个 shell 引用的字符串在 `$1` 中传递给包装器以重新评估。为一个编写的启动器不能作为另一个工作。

134 

135<h2 id="related-resources">

136 相关资源

137</h2>

138 

139* [Agent view](/docs/zh-CN/agent-view):启动器覆盖的后台会话和监督进程

140* [Environment variables](/docs/zh-CN/env-vars):`CLAUDE_CODE_PROCESS_WRAPPER` 参考条目

141* [Managed settings](/docs/zh-CN/permissions#managed-settings):在整个车队中传递 `env` 块

142* [Launcher error reference](/docs/zh-CN/errors#claude_code_process_wrapper-launcher-errors):拒绝消息和如何恢复

devcontainer.md +25 −25

Details

12 12 

13<Warning>13<Warning>

14 虽然开发容器提供了实质性的保护,但没有任何系统能够完全免疫所有攻击。14 虽然开发容器提供了实质性的保护,但没有任何系统能够完全免疫所有攻击。

15 当使用 `--dangerously-skip-permissions` 执行时,开发容器不会阻止恶意项目泄露容器内可访问的任何内容,包括存储在 [`~/.claude`](/zh-CN/claude-directory) 中的 Claude Code 凭证。15 当使用 `--dangerously-skip-permissions` 执行时,开发容器不会阻止恶意项目泄露容器内可访问的任何内容,包括存储在 [`~/.claude`](/docs/zh-CN/claude-directory) 中的 Claude Code 凭证。

16 仅在使用受信任的存储库进行开发时使用开发容器,并监控 Claude 的活动。16 仅在使用受信任的存储库进行开发时使用开发容器,并监控 Claude 的活动。

17 避免将主机密钥(如 `~/.ssh` 或云凭证文件)挂载到容器中;优先使用存储库范围或短期令牌。17 避免将主机密钥(如 `~/.ssh` 或云凭证文件)挂载到容器中;优先使用存储库范围或短期令牌。

18</Warning>18</Warning>


20<Accordion title="开发容器如何与您的编辑器配合工作">20<Accordion title="开发容器如何与您的编辑器配合工作">

21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture.svg" />21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture.svg" />

22 22 

23 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />23 <img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=a0a340b1f2afc6a590696102c8acaaca" className="hidden dark:block" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

24 24 

25 开发容器作为 Docker 容器运行,可以在您的机器上或云主机(如 GitHub Codespaces)上运行。支持 Dev Containers 规范的编辑器(如 VS Code、GitHub Codespaces、JetBrains IDE 或 Cursor)连接到该容器:您可以像往常一样在编辑器中浏览和编辑文件,但集成终端、语言服务器和构建工具都在容器内运行,而不是在主机上。不支持开发容器的编辑器(如纯 Vim)不属于此工作流。25 开发容器作为 Docker 容器运行,可以在您的机器上或云主机(如 GitHub Codespaces)上运行。支持 Dev Containers 规范的编辑器(如 VS Code、GitHub Codespaces、JetBrains IDE 或 Cursor)连接到该容器:您可以像往常一样在编辑器中浏览和编辑文件,但集成终端、语言服务器和构建工具都在容器内运行,而不是在主机上。不支持开发容器的编辑器(如纯 Vim)不属于此工作流。

26 26 

27 Claude Code 在容器内运行,因此它看到与项目工具链其余部分相同的文件、依赖项和工具。在 VS Code 中,您可以使用 [Claude Code 扩展面板](/zh-CN/vs-code) 或在集成终端中运行 `claude`;两者都在容器内运行并共享相同的 `~/.claude` 配置。27 Claude Code 在容器内运行,因此它看到与项目工具链其余部分相同的文件、依赖项和工具。在 VS Code 中,您可以使用 [Claude Code 扩展面板](/docs/zh-CN/vs-code) 或在集成终端中运行 `claude`;两者都在容器内运行并共享相同的 `~/.claude` 配置。

28</Accordion>28</Accordion>

29 29 

30<h2 id="add-claude-code-to-your-dev-container">30<h2 id="add-claude-code-to-your-dev-container">


75您在身份验证提示处看到的内容取决于您的提供商:75您在身份验证提示处看到的内容取决于您的提供商:

76 76 

77* **Anthropic**:通过浏览器使用您的 Claude 或 Anthropic Console 账户登录77* **Anthropic**:通过浏览器使用您的 Claude 或 Anthropic Console 账户登录

78* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/zh-CN/third-party-integrations)**:Claude Code 使用您的云提供商凭证,无需浏览器提示78* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/docs/zh-CN/third-party-integrations)**:Claude Code 使用您的云提供商凭证,无需浏览器提示

79 79 

80对于云提供商,通过 `containerEnv`、Codespaces 密钥或您的云的工作负载身份将凭证传递到容器中,而不是从主机挂载凭证文件。有关凭证链的详细信息,请参阅 [Amazon Bedrock](/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/zh-CN/microsoft-foundry),Claude Code 会读取这些信息。80对于云提供商,通过 `containerEnv`、Codespaces 密钥或您的云的工作负载身份将凭证传递到容器中,而不是从主机挂载凭证文件。有关凭证链的详细信息,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry),Claude Code 会读取这些信息。

81 81 

82请参阅[选择您的 API 提供商](/zh-CN/admin-setup#choose-your-api-provider)以决定哪条路径适合您的组织。82请参阅[选择您的 API 提供商](/docs/zh-CN/admin-setup#choose-your-api-provider)以决定哪条路径适合您的组织。

83 83 

84<Note>84<Note>

85 如果浏览器登录完成但回调从未到达容器,请复制浏览器中显示的代码并将其粘贴到终端中的 `Paste code here if prompted` 提示处。当编辑器的端口转发不路由 localhost 回调时,可能会发生这种情况。85 如果浏览器登录完成但回调从未到达容器,请复制浏览器中显示的代码并将其粘贴到终端中的 `Paste code here if prompted` 提示处。当编辑器的端口转发不路由 localhost 回调时,可能会发生这种情况。


89 在重建过程中保持身份验证和设置89 在重建过程中保持身份验证和设置

90</h2>90</h2>

91 91 

92默认情况下,容器的主目录在重建时会被丢弃,因此工程师必须每次都重新登录。Claude Code 将其身份验证令牌、用户设置和会话历史存储在 [`~/.claude`](/zh-CN/claude-directory) 下。在该路径挂载一个命名卷以在重建过程中保持此状态。92默认情况下,容器的主目录在重建时会被丢弃,因此工程师必须每次都重新登录。Claude Code 将其身份验证令牌、用户设置和会话历史存储在 [`~/.claude`](/docs/zh-CN/claude-directory) 下。在该路径挂载一个命名卷以在重建过程中保持此状态。

93 93 

94以下示例在 `node` 用户的主目录处挂载一个卷:94以下示例在 `node` 用户的主目录处挂载一个卷:

95 95 


99]99]

100```100```

101 101 

102将 `/home/node` 替换为容器的 `remoteUser` 的主目录。如果您在 `~/.claude` 以外的位置挂载卷,请设置 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars) 为挂载路径,以便 Claude Code 在那里读取和写入。102将 `/home/node` 替换为容器的 `remoteUser` 的主目录。如果您在 `~/.claude` 以外的位置挂载卷,请设置 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 为挂载路径,以便 Claude Code 在那里读取和写入。

103 103 

104要按项目隔离状态而不是在所有存储库中共享一个卷,请在源名称中包含 `${devcontainerId}` 变量。[参考配置](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) 为此目的使用 `source=claude-code-config-${devcontainerId}`。104要按项目隔离状态而不是在所有存储库中共享一个卷,请在源名称中包含 `${devcontainerId}` 变量。[参考配置](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) 为此目的使用 `source=claude-code-config-${devcontainerId}`。

105 105 

106在 GitHub Codespaces 中,`~/.claude` 在停止和启动 codespace 时会保持,但在重建容器时仍会被清除,因此上面的卷挂载也适用于此。要在 codespace 之间进行身份验证,请将 `ANTHROPIC_API_KEY` 或来自 [`claude setup-token`](/zh-CN/authentication#generate-a-long-lived-token) 的 `CLAUDE_CODE_OAUTH_TOKEN` 存储为 [Codespaces 密钥](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces);Codespaces 会自动将密钥作为环境变量提供给容器内部。106在 GitHub Codespaces 中,`~/.claude` 在停止和启动 codespace 时会保持,但在重建容器时仍会被清除,因此上面的卷挂载也适用于此。要在 codespace 之间进行身份验证,请将 `ANTHROPIC_API_KEY` 或来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的 `CLAUDE_CODE_OAUTH_TOKEN` 存储为 [Codespaces 密钥](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces);Codespaces 会自动将密钥作为环境变量提供给容器内部。

107 107 

108<h2 id="enforce-organization-policy">108<h2 id="enforce-organization-policy">

109 强制执行组织策略109 强制执行组织策略


111 111 

112开发容器是应用组织策略的便利场所,因为相同的镜像和配置在每个工程师的机器上运行。112开发容器是应用组织策略的便利场所,因为相同的镜像和配置在每个工程师的机器上运行。

113 113 

114Claude Code 在 Linux 上读取 `/etc/claude-code/managed-settings.json` 并在[设置层次结构](/zh-CN/settings#how-scopes-interact)中以最高优先级应用它,因此那里的值会覆盖工程师在 `~/.claude` 或项目的 `.claude/` 目录中设置的任何内容。从您的 Dockerfile 复制文件到位:114Claude Code 在 Linux 上读取 `/etc/claude-code/managed-settings.json` 并在[设置层次结构](/docs/zh-CN/settings#how-scopes-interact)中以最高优先级应用它,因此那里的值会覆盖工程师在 `~/.claude` 或项目的 `.claude/` 目录中设置的任何内容。从您的 Dockerfile 复制文件到位:

115 115 

116```dockerfile Dockerfile theme={null}116```dockerfile Dockerfile theme={null}

117RUN mkdir -p /etc/claude-code117RUN mkdir -p /etc/claude-code

118COPY managed-settings.json /etc/claude-code/managed-settings.json118COPY managed-settings.json /etc/claude-code/managed-settings.json

119```119```

120 120 

121因为 Dockerfile 存在于存储库中,任何具有写入权限的人都可以更改或删除此步骤。对于工程师无法通过编辑存储库文件来绕过的策略,请通过[服务器管理的设置](/zh-CN/server-managed-settings)或您的 MDM 提供托管设置。有关可用的键和其他交付路径,请参阅[托管设置文件](/zh-CN/settings#settings-files)。121因为 Dockerfile 存在于存储库中,任何具有写入权限的人都可以更改或删除此步骤。对于工程师无法通过编辑存储库文件来绕过的策略,请通过[服务器管理的设置](/docs/zh-CN/server-managed-settings)或您的 MDM 提供托管设置。有关可用的键和其他交付路径,请参阅[托管设置文件](/docs/zh-CN/settings#settings-files)。

122 122 

123要设置适用于容器中每个 Claude Code 会话的[环境变量](/zh-CN/env-vars),请将它们添加到 `devcontainer.json` 中的 `containerEnv`。以下示例选择退出遥测和错误报告,并防止 Claude Code 在安装后自动更新:123要设置适用于容器中每个 Claude Code 会话的[环境变量](/docs/zh-CN/env-vars),请将它们添加到 `devcontainer.json` 中的 `containerEnv`。以下示例选择退出遥测和错误报告,并防止 Claude Code 在安装后自动更新:

124 124 

125```json devcontainer.json theme={null}125```json devcontainer.json theme={null}

126"containerEnv": {126"containerEnv": {


131 131 

132Dev Container Feature 始终安装最新的 Claude Code 版本。要为可重现的构建固定特定的 Claude Code 版本,请从您的 Dockerfile 使用 `npm install -g @anthropic-ai/claude-code@X.Y.Z` 安装它,而不是使用该功能,并设置 `DISABLE_AUTOUPDATER`,如上所示。132Dev Container Feature 始终安装最新的 Claude Code 版本。要为可重现的构建固定特定的 Claude Code 版本,请从您的 Dockerfile 使用 `npm install -g @anthropic-ai/claude-code@X.Y.Z` 安装它,而不是使用该功能,并设置 `DISABLE_AUTOUPDATER`,如上所示。

133 133 

134有关完整的策略控制列表,包括权限规则、工具限制和 MCP 服务器允许列表,请参阅[为您的组织设置 Claude Code](/zh-CN/admin-setup)。134有关完整的策略控制列表,包括权限规则、工具限制和 MCP 服务器允许列表,请参阅[为您的组织设置 Claude Code](/docs/zh-CN/admin-setup)。

135 135 

136要在容器内提供 [MCP 服务器](/zh-CN/mcp),请在存储库根目录的 `.mcp.json` 文件中的[项目范围](/zh-CN/mcp#mcp-installation-scopes)定义它们,以便它们与您的开发容器配置一起签入。在您的 Dockerfile 中安装本地 stdio 服务器依赖的任何二进制文件,并将远程服务器域添加到您的网络允许列表。136要在容器内提供 [MCP 服务器](/docs/zh-CN/mcp),请在存储库根目录的 `.mcp.json` 文件中的[项目范围](/docs/zh-CN/mcp#mcp-installation-scopes)定义它们,以便它们与您的开发容器配置一起签入。在您的 Dockerfile 中安装本地 stdio 服务器依赖的任何二进制文件,并将远程服务器域添加到您的网络允许列表。

137 137 

138<h2 id="restrict-network-egress">138<h2 id="restrict-network-egress">

139 限制网络出站流量139 限制网络出站流量

140</h2>140</h2>

141 141 

142您可以将容器的出站流量限制为仅 Claude Code 需要的域。有关推理和身份验证域,请参阅[网络访问要求](/zh-CN/network-config#network-access-requirements),有关可选的遥测和错误报告连接以及如何禁用它们,请参阅[遥测服务](/zh-CN/data-usage#telemetry-services)。142您可以将容器的出站流量限制为仅 Claude Code 需要的域。有关推理和身份验证域,请参阅[网络访问要求](/docs/zh-CN/network-config#network-access-requirements),有关可选的遥测和错误报告连接以及如何禁用它们,请参阅[遥测服务](/docs/zh-CN/data-usage#telemetry-services)。

143 143 

144参考容器包含一个 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 脚本,该脚本阻止除 Claude Code 和您的开发工具需要的域之外的所有出站流量。在容器内运行防火墙需要额外的权限,因此参考通过 `runArgs` 添加 `NET_ADMIN` 和 `NET_RAW` 功能。防火墙脚本和这些功能对于 Claude Code 本身不是必需的:您可以将其省略并改为依赖您自己的网络控制。144参考容器包含一个 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 脚本,该脚本阻止除 Claude Code 和您的开发工具需要的域之外的所有出站流量。在容器内运行防火墙需要额外的权限,因此参考通过 `runArgs` 添加 `NET_ADMIN` 和 `NET_RAW` 功能。防火墙脚本和这些功能对于 Claude Code 本身不是必需的:您可以将其省略并改为依赖您自己的网络控制。

145 145 


151 151 

152跳过权限提示会移除您在工具调用运行前审查它们的机会。Claude 仍然可以修改绑定挂载的工作区中的任何文件(这直接显示在您的主机上),并访问容器的网络策略允许的任何内容。将此标志与上面的[网络出站流量限制](#restrict-network-egress)配对,以限制绕过的会话可以访问的内容。152跳过权限提示会移除您在工具调用运行前审查它们的机会。Claude 仍然可以修改绑定挂载的工作区中的任何文件(这直接显示在您的主机上),并访问容器的网络策略允许的任何内容。将此标志与上面的[网络出站流量限制](#restrict-network-egress)配对,以限制绕过的会话可以访问的内容。

153 153 

154如果您想要更少的提示而不禁用安全检查,请考虑改为[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),它有一个分类器在运行前审查操作。要完全防止工程师使用 `--dangerously-skip-permissions`,请在[托管设置](/zh-CN/settings#permission-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"`。154如果您想要更少的提示而不禁用安全检查,请考虑改为[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),它有一个分类器在运行前审查操作。要完全防止工程师使用 `--dangerously-skip-permissions`,请在[托管设置](/docs/zh-CN/settings#permission-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"`。

155 155 

156<h2 id="try-the-reference-container">156<h2 id="try-the-reference-container">

157 尝试参考容器157 尝试参考容器


193 193 

194Claude Code 在您的开发容器中运行后,下面的页面涵盖了组织推出的其余部分:选择身份验证路径、在存储库外交付托管策略、监控使用情况以及了解 Claude Code 存储和发送的内容。194Claude Code 在您的开发容器中运行后,下面的页面涵盖了组织推出的其余部分:选择身份验证路径、在存储库外交付托管策略、监控使用情况以及了解 Claude Code 存储和发送的内容。

195 195 

196* [为您的组织设置 Claude Code](/zh-CN/admin-setup):选择身份验证提供商、决定策略如何到达设备以及规划推出196* [为您的组织设置 Claude Code](/docs/zh-CN/admin-setup):选择身份验证提供商、决定策略如何到达设备以及规划推出

197* [服务器管理的设置](/zh-CN/server-managed-settings):从 Claude.ai 管理控制台交付托管策略,以便工程师无法通过编辑存储库文件来绕过它197* [服务器管理的设置](/docs/zh-CN/server-managed-settings):从 Claude.ai 管理控制台交付托管策略,以便工程师无法通过编辑存储库文件来绕过它

198* [监控使用情况和审计活动](/zh-CN/monitoring-usage):导出 OpenTelemetry 指标并查看您的团队正在运行的内容198* [监控使用情况和审计活动](/docs/zh-CN/monitoring-usage):导出 OpenTelemetry 指标并查看您的团队正在运行的内容

199* [网络访问要求](/zh-CN/network-config#network-access-requirements):代理和防火墙的完整域允许列表199* [网络访问要求](/docs/zh-CN/network-config#network-access-requirements):代理和防火墙的完整域允许列表

200* [遥测服务和选择退出](/zh-CN/data-usage#telemetry-services):Claude Code 默认发送的内容以及禁用它的环境变量200* [遥测服务和选择退出](/docs/zh-CN/data-usage#telemetry-services):Claude Code 默认发送的内容以及禁用它的环境变量

201* [探索 `.claude` 目录](/zh-CN/claude-directory):卷挂载包含的内容,包括凭证、设置和会话历史201* [探索 `.claude` 目录](/docs/zh-CN/claude-directory):卷挂载包含的内容,包括凭证、设置和会话历史

202* [沙箱环境](/zh-CN/sandbox-environments):比较开发容器与内置 Bash 沙箱、自定义容器和虚拟机202* [沙箱环境](/docs/zh-CN/sandbox-environments):比较开发容器与内置 Bash 沙箱、自定义容器和虚拟机

203* [安全模型](/zh-CN/security):Claude Code 的权限系统、沙箱和提示注入保护如何组合在一起203* [安全模型](/docs/zh-CN/security):Claude Code 的权限系统、沙箱和提示注入保护如何组合在一起

204* [权限模式](/zh-CN/permission-modes):从计划模式到自动模式再到绕过的完整范围,以及何时使用每种模式204* [权限模式](/docs/zh-CN/permission-modes):从计划模式到自动模式再到绕过的完整范围,以及何时使用每种模式

llm-gateway.md +64 −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# 其他 LLM 网关

6 

7> 通过您的组织已运行的 LLM 网关路由 Claude Code。涵盖将 Claude Code 连接到网关、为您的组织部署网关以及 Claude Code 发送到网关的内容。

8 

9本部分涵盖使用您的组织已运行的网关产品,而不是 [Claude apps gateway](/docs/zh-CN/claude-apps-gateway)。有关网关是什么、它如何位于 Claude Code 和您的提供商之间,以及如何在 Claude apps gateway 和其他产品之间进行选择,请参阅[网关概述](/docs/zh-CN/gateways)。

10 

11<Note>

12 * 如果您是连接到现有网关的开发人员:[将 Claude Code 连接到您的网关](/docs/zh-CN/llm-gateway-connect)

13 * 如果您是为组织部署网关的管理员:[部署和分发网关](/docs/zh-CN/llm-gateway-rollout)

14 * 如果您正在配置网关产品:[网关协议参考](/docs/zh-CN/llm-gateway-protocol)

15</Note>

16 

17任何公开[支持的 API 格式](/docs/zh-CN/llm-gateway-protocol#api-formats)的网关都可以工作。Anthropic 不认可、维护或审计第三方网关产品,也不支持通过任何网关将 Claude Code 路由到非 Claude 模型。按照网关自己的文档部署网关,然后使用下面的[部署步骤](#roll-out-a-gateway)完成 Claude Code 端的部署。

18 

19<h2 id="what-a-gateway-provides">

20 网关提供的功能

21</h2>

22 

23网关为您的组织提供一个地方来管理:

24 

25* **凭证**:提供商密钥保留在服务器端;开发人员改为持有网关凭证

26* **使用情况跟踪**:按开发人员或团队归属使用情况,无论哪个提供商处理请求

27* **成本控制**:在一个地方强制执行预算和速率限制

28* **审计日志**:记录每个模型请求以实现合规性

29* **提供商切换**:在网关配置中更改提供商,无需接触开发人员机器

30 

31除了提供商切换外,所有这些都适用于上游是 Anthropic 的 API 还是[云提供商](/docs/zh-CN/third-party-integrations)。提供商切换而无需重新配置开发人员机器也取决于网关公开单个[Anthropic 格式端点](/docs/zh-CN/llm-gateway-protocol#api-formats),无论上游如何;公开提供商自己格式的网关将客户端配置与该提供商绑定。

32 

33权衡是网关成为您的组织运营的基础设施。Claude Code 在每个版本中添加功能,不转发这些功能的网关会破坏相应的功能,因此网关产品需要随着 Claude Code 的发展而保持更新。[网关协议参考](/docs/zh-CN/llm-gateway-protocol)涵盖要转发的内容。

34 

35<h2 id="roll-out-a-gateway">

36 部署网关

37</h2>

38 

39当您准备好为组织部署 LLM 网关时,无论您选择哪个网关产品,顺序都是相同的:

40 

411. 部署网关并给予它您的提供商凭证,以便它可以验证它转发的请求。

422. 为每个开发人员颁发网关凭证,以便使用情况归属于开发人员,离职时撤销一个凭证。

433. 通过[托管设置文件](/docs/zh-CN/settings#settings-files)和您的机密工具分发配置,以便每台机器都接收基础 URL 和凭证。当两者都分发时,开发人员无需配置任何内容。如果您没有设置分发,开发人员按照[连接页面](/docs/zh-CN/llm-gateway-connect)自己设置变量。

444. 让每个开发人员[检查 Claude Code 中的配置](/docs/zh-CN/llm-gateway-connect#check-for-an-existing-configuration),以便分发问题在他们依赖网关之前浮出水面。

45 

46[为您的组织部署 LLM 网关](/docs/zh-CN/llm-gateway-rollout)逐步讲解每个步骤,并显示在每个步骤中分发的配置文件。网关是组织设置的一部分;对于策略强制执行、使用情况可见性和数据处理决策,请参阅[为您的组织设置 Claude Code](/docs/zh-CN/admin-setup)。

47 

48<h2 id="subscriptions-and-gateways">

49 订阅和网关

50</h2>

51 

52当[网关凭证变量](/docs/zh-CN/llm-gateway-connect#set-the-credential-variable)或 `apiKeyHelper` 处于活动状态时,开发人员的 claude.ai 订阅不被使用:凭证替换该会话的订阅登录,订阅的使用限制不适用。该流量按令牌计费给拥有网关转发的凭证的人,例如您的组织的 Anthropic Console 账户,或当网关路由到那里时您的 Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 账户。

53 

54[`ANTHROPIC_BASE_URL`](/docs/zh-CN/llm-gateway-connect#set-the-base-url-and-credential)是指向 Claude Code 网关的变量。仅设置该变量,不设置网关凭证,不会替换订阅。请求仍然通过网关路由,但保存的 claude.ai 登录保持活动凭证,因此其使用限制和计费适用。将此流量转发给 Anthropic 的网关必须转发 `anthropic-beta` 中的 OAuth 功能;请参阅[请求头参考](/docs/zh-CN/llm-gateway-protocol#request-headers)。

55 

56<h2 id="related-pages">

57 相关页面

58</h2>

59 

60* [网关概述](/docs/zh-CN/gateways):网关如何工作以及如何在 Claude apps gateway 和其他产品之间进行选择

61* [Claude apps gateway](/docs/zh-CN/claude-apps-gateway):Anthropic 的自托管网关,具有 SSO 登录和 OTLP 遥测

62* [将 Claude Code 连接到 LLM 网关](/docs/zh-CN/llm-gateway-connect):在您自己的机器上设置基础 URL 和凭证,具有每个表面的配置和故障排除表

63* [为您的组织部署 LLM 网关](/docs/zh-CN/llm-gateway-rollout):部署网关、颁发开发人员凭证和分发托管设置的管理员检查清单

64* [网关协议参考](/docs/zh-CN/llm-gateway-protocol):Claude Code 发送到网关的内容,供配置网关的运营商使用,涵盖端点、要转发的头和功能传递

prompt-caching.md +38 −38

Details

20 20 

21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix.svg" />21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix.svg" />

22 22 

23<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=7434a04e08187edd26ec6c3dd332f624" className="hidden dark:block" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=297dc1c639f0915cae858d0c4b6f3be5" className="hidden dark:block" alt="四个回合显示为增长的水平条。每个回合的请求包含前一个回合的所有内容加上最后附加的最新交换。在第二和第三个回合中,未更改的前缀从缓存中读取,只处理新的交换。在第四个回合中,系统提示更改了,所以前缀不再匹配,整个请求被重新处理并写入。" width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />

24 24 

25为了充分利用前缀匹配,Claude Code 组织每个请求,使回合之间很少更改的内容首先出现:25为了充分利用前缀匹配,Claude Code 组织每个请求,使回合之间很少更改的内容首先出现:

26 26 


32 32 

33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合,包括在会话开始时固定的输出样式等内容。33对对话层的更改会保留系统提示和项目上下文缓存。对系统提示的更改会使所有内容失效,因为所有后续内容现在位于不同的前缀后面。第三列给出常见触发器而不是详尽列表,下面的部分涵盖完整集合,包括在会话开始时固定的输出样式等内容。

34 34 

35前缀匹配规则解释了本页上的大多数行为。例如,[Plan Mode](/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 和[技能加载](/zh-CN/skills)将其指令附加为对话消息,所以缓存的前缀保持完整。35前缀匹配规则解释了本页上的大多数行为。例如,[Plan Mode](/docs/zh-CN/permission-modes#analyze-before-you-edit-with-plan-mode) 和[技能加载](/docs/zh-CN/skills)将其指令附加为对话消息,所以缓存的前缀保持完整。

36 36 

37两个设置根本不是提示文本的一部分,所以它们不出现在层表中,但两者都是缓存密钥的一部分:37两个设置根本不是提示文本的一部分,所以它们不出现在层表中,但两者都是缓存密钥的一部分:

38 38 


49 49 

50缓存发生在服务器端,在为您的模型提供服务的任何基础设施中。它的位置取决于您如何进行身份验证:50缓存发生在服务器端,在为您的模型提供服务的任何基础设施中。它的位置取决于您如何进行身份验证:

51 51 

52* **API 密钥、Claude 订阅或 [Claude Platform on AWS](/zh-CN/claude-platform-on-aws)**:缓存位于 Anthropic 的基础设施中,通过 [Claude API](https://platform.claude.com/docs) 访问52* **API 密钥、Claude 订阅或 [Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)**:缓存位于 Anthropic 的基础设施中,通过 [Claude API](https://platform.claude.com/docs) 访问

53* **Amazon Bedrock 或 Google Cloud 的 Agent Platform**:缓存位于您的云提供商的服务基础设施中53* **Amazon Bedrock 或 Google Cloud 的 Agent Platform**:缓存位于您的云提供商的服务基础设施中

54* **Microsoft Foundry**:请求路由到 Anthropic 的基础设施54* **Microsoft Foundry**:请求路由到 Anthropic 的基础设施

55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关55* **自定义 `ANTHROPIC_BASE_URL` 或 [LLM gateway](/docs/zh-CN/llm-gateway)**:缓存位于您的请求转发到的任何地方,缓存是否工作取决于网关

56 56 

57有关每个提供商存储和处理的内容,请参阅[数据使用](/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。57有关每个提供商存储和处理的内容,请参阅[数据使用](/docs/zh-CN/data-usage)。无论缓存位于何处,条目在不活动期间后过期,[缓存生命周期](#cache-lifetime)下面涵盖 TTL 以及如何延长它。

58 58 

59<h2 id="actions-that-invalidate-the-cache">59<h2 id="actions-that-invalidate-the-cache">

60 使缓存失效的操作60 使缓存失效的操作


75 切换模型75 切换模型

76</h3>76</h3>

77 77 

78每个模型都有自己的缓存。使用 [`/model`](/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。78每个模型都有自己的缓存。使用 [`/model`](/docs/zh-CN/model-config#setting-your-model) 切换意味着下一个请求读取整个对话历史记录而没有缓存命中,即使内容相同。

79 79 

80[`opusplan` 模型设置](/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。80[`opusplan` 模型设置](/docs/zh-CN/model-config#opusplan-model-setting)在 Plan Mode 期间解析为 Opus,在执行期间解析为 Sonnet,所以每个 Plan Mode 切换都是模型切换并启动新缓存。

81 81 

82[Fable 5 上的自动模型回退](/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。82[Fable 5 上的自动模型回退](/docs/zh-CN/model-config#automatic-model-fallback)也是一个模型切换。当安全分类器标记请求时,Claude Code 在默认 Opus 模型上重新运行它,会话继续进行。

83 83 

84<h3 id="changing-effort-level">84<h3 id="changing-effort-level">

85 更改工作量级别85 更改工作量级别

86</h3>86</h3>

87 87 

88缓存由[工作量级别](/zh-CN/model-config#adjust-effort-level)以及模型进行键控,所以使用 `/effort` 切换意味着下一个请求读取整个对话历史记录而没有缓存命中。一旦对话已开始,Claude Code 会在应用会使缓存失效的工作量更改之前显示确认对话框。解析为已生效的相同级别的更改(例如显式设置模型的默认值)会跳过对话框并保持缓存。88缓存由[工作量级别](/docs/zh-CN/model-config#adjust-effort-level)以及模型进行键控,所以使用 `/effort` 切换意味着下一个请求读取整个对话历史记录而没有缓存命中。一旦对话已开始,Claude Code 会在应用会使缓存失效的工作量更改之前显示确认对话框。解析为已生效的相同级别的更改(例如显式设置模型的默认值)会跳过对话框并保持缓存。

89 89 

90<h3 id="turning-on-fast-mode">90<h3 id="turning-on-fast-mode">

91 启用快速模式91 启用快速模式

92</h3>92</h3>

93 93 

94启用[快速模式](/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以下一个请求读取整个对话历史记录而没有缓存命中。这些未缓存的输入令牌按[快速模式费率](/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。从非 Opus 模型启用快速模式也会[切换您的模型](#switching-models),这本身会启动新缓存。94启用[快速模式](/docs/zh-CN/fast-mode)会添加一个请求头,该请求头是缓存键的一部分,所以下一个请求读取整个对话历史记录而没有缓存命中。这些未缓存的输入令牌按[快速模式费率](/docs/zh-CN/fast-mode#understand-the-cost-tradeoff)计费,这就是为什么在会话开始时启用它的成本低于在长会话深处启用它的成本。从非 Opus 模型启用快速模式也会[切换您的模型](#switching-models),这本身会启动新缓存。

95 95 

96成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送请求头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。96成本每个对话应用一次。在第一个快速模式回合之后,Claude Code 继续发送请求头,仅改变请求的速度设置,这不是缓存键的一部分。关闭快速模式、[在速率限制后自动回退到标准速度](/docs/zh-CN/fast-mode#handle-rate-limits)以及稍后重新启用它都保持缓存。`/clear` 和 `/compact` 重置这个,因为它们无论如何都在这些点重建缓存。

97 97 

98<h3 id="connecting-or-disconnecting-an-mcp-server">98<h3 id="connecting-or-disconnecting-an-mcp-server">

99 连接或断开 MCP 服务器99 连接或断开 MCP 服务器

100</h3>100</h3>

101 101 

102工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:102工具定义位于系统提示层中,所以当请求之间的工具定义集合更改时,缓存会失效。切换[顾问工具](/docs/zh-CN/advisor)是一个例外:其定义位于缓存断点之后,所以启用或禁用 `/advisor` 会保持缓存的前缀完整。[MCP 服务器](/docs/zh-CN/mcp)更改是否执行此操作取决于其工具是否由[工具搜索](/docs/zh-CN/mcp#scale-with-mcp-tool-search)延迟或加载到前缀中:

103 103 

104* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。104* **延迟工具**,在支持的模型上是默认设置:服务器连接、断开连接或更改其工具列表仅附加新内容,不会扰乱已缓存的任何内容。

105* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/zh-CN/mcp#configure-tool-search)时,例如在 Google Cloud 的 Agent Platform 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/zh-CN/mcp#configure-tool-search)保持在前面的定义上。105* **加载到前缀中的工具**:对它们的任何更改都会使缓存失效。这发生在[工具搜索不可用或被禁用](/docs/zh-CN/mcp#configure-tool-search)时,例如在 Google Cloud 的 Agent Platform 上或使用自定义 `ANTHROPIC_BASE_URL` 网关时。它也发生在标记为 [`alwaysLoad`](/docs/zh-CN/mcp#exempt-a-server-from-deferral) 的服务器或工具上,以及由[基于阈值的加载](/docs/zh-CN/mcp#configure-tool-search)保持在前面的定义上。

106 106 

107当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。107当工具加载到前缀中时,失效的最常见原因是服务器在会话中期连接或断开连接,这可能在没有您采取任何操作的情况下发生:stdio 服务器的进程退出、HTTP 会话过期或服务器[在暂时故障后自动重新连接](/docs/zh-CN/mcp#automatic-reconnection)。连接的服务器也可以推送[动态工具更新](/docs/zh-CN/mcp#dynamic-tool-updates)来更改其工具列表。

108 108 

109编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时间。109编辑您的 MCP 配置本身不会改变缓存。新配置仅在重启后生效,这是服务器连接或断开连接的时间。

110 110 


112 启用或禁用插件112 启用或禁用插件

113</h3>113</h3>

114 114 

115[插件](/zh-CN/plugins)捆绑了多个组件类型,更改的成本取决于插件提供的组件。Skills、commands、agents、hooks、LSP 服务器、monitors 和 themes 永远不会使缓存失效:它们添加到请求中的任何内容都附加在现有对话之后,所以下一个请求为新内容付费,但仍然从缓存中读取它之前的所有内容。115[插件](/docs/zh-CN/plugins)捆绑了多个组件类型,更改的成本取决于插件提供的组件。Skills、commands、agents、hooks、LSP 服务器、monitors 和 themes 永远不会使缓存失效:它们添加到请求中的任何内容都附加在现有对话之后,所以下一个请求为新内容付费,但仍然从缓存中读取它之前的所有内容。

116 116 

117例外是提供 [MCP 服务器](/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。117例外是提供 [MCP 服务器](/docs/zh-CN/plugins-reference#mcp-servers)的插件。启用或禁用一个遵循与[连接或断开 MCP 服务器](#connecting-or-disconnecting-an-mcp-server)相同的规则:当服务器的工具被延迟时缓存保存,当它们加载到前缀中时下一个请求重新读取整个对话。

118 118 

119插件更改在您运行 [`/reload-plugins`](/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。{/* min-version: 2.1.163 */}从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。119插件更改在您运行 [`/reload-plugins`](/docs/zh-CN/discover-plugins#apply-plugin-changes-without-restarting) 或启动新会话时应用。成本(无论是附加的公告还是完整的重新读取)显示在重新加载后的第一个回合,而不是当您运行 `/plugin install`、`/plugin enable` 或 `/plugin disable` 时。{/* min-version: 2.1.163 */}从 v2.1.163 开始,当重新加载会触发完整重新读取时,`/reload-plugins` 会显示警告并不应用重新加载。传递 `--force` 以强制应用。

120 120 

121禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。121禁用您在会话早期启用的插件会恢复之前的请求形状。如果该前缀仍在其[缓存生命周期](#cache-lifetime)内,下一个请求读取较旧的缓存条目而不是重建。

122 122 


124 拒绝整个工具124 拒绝整个工具

125</h3>125</h3>

126 126 

127添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。127添加像 `Bash` 或 `WebFetch` 这样的裸工具名称作为[拒绝规则](/docs/zh-CN/permissions#manage-permissions)会将该工具从 Claude 的上下文中完全移除。内置工具定义加载到系统提示层中,所以在会话中期添加或移除这些规则之一会使缓存失效。无论您通过 `/permissions` 添加它还是通过[直接编辑设置文件](/docs/zh-CN/settings#when-edits-take-effect),更改都会在下一个回合生效。

128 128 

129只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。129只有与工具名称位置匹配的拒绝规则才有这种效果:裸工具名称、等效的 `Bash(*)` 形式或[工具名称通配符](/docs/zh-CN/permissions#tool-name-wildcards)如 `"*"`。匹配仅 MCP 工具的通配符(如 `"mcp__*"`)以相同方式移除这些工具,但当匹配的工具被[延迟](#connecting-or-disconnecting-an-mcp-server)时保持缓存完整,这是默认设置,因为延迟定义从未在缓存的前缀中。作用域拒绝规则如 `Bash(rm *)`,以及所有允许和询问规则,都不会改变 Claude 看到的工具。Claude Code 在 Claude 尝试调用时检查它们,保持前缀完整。

130 130 

131<h3 id="compacting-the-conversation">131<h3 id="compacting-the-conversation">

132 压缩对话132 压缩对话

133</h3>133</h3>

134 134 

135[压缩](/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。135[压缩](/docs/zh-CN/context-window#what-survives-compaction)用摘要替换您的消息历史记录。根据设计,这会使对话层失效,因为下一个请求有一个新的、更短的历史记录,与旧的历史记录不共享前缀。Claude Code 重用系统提示层并从磁盘重新加载项目上下文,只有在 CLAUDE.md 和内存自会话开始以来未更改时才缓存命中。

136 136 

137为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。因为它共享您的前缀,该请求读取现有缓存而不是重新处理完整历史记录。压缩的大部分时间用于生成摘要,而不是缓存未命中。随后的回合仅为更短的摘要重建对话缓存,所以压缩后的回合不是缓慢的部分。137为了生成摘要,Claude Code 发送一个一次性请求,其系统提示、工具和历史记录与您的对话相同,加上作为最终用户消息附加的摘要指令。因为它共享您的前缀,该请求读取现有缓存而不是重新处理完整历史记录。压缩的大部分时间用于生成摘要,而不是缓存未命中。随后的回合仅为更短的摘要重建对话缓存,所以压缩后的回合不是缓慢的部分。

138 138 


144 升级 Claude Code144 升级 Claude Code

145</h3>145</h3>

146 146 

147新的 Claude Code 版本通常会更新系统提示或工具定义,所以升级后的第一个请求从顶部重建缓存。[自动更新](/zh-CN/setup#auto-updates)在后台下载新版本,但在下次启动时应用它们,从不在会话中期,所以您会看到这是重启后的一个未缓存的第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。147新的 Claude Code 版本通常会更新系统提示或工具定义,所以升级后的第一个请求从顶部重建缓存。[自动更新](/docs/zh-CN/setup#auto-updates)在后台下载新版本,但在下次启动时应用它们,从不在会话中期,所以您会看到这是重启后的一个未缓存的第一个回合,而不是会话期间的惊喜。设置 `DISABLE_AUTOUPDATER=1` 来控制何时应用升级。

148 148 

149<Note>149<Note>

150 升级后[恢复会话](/zh-CN/sessions#resume-a-session)会重新处理整个对话历史记录而没有缓存命中,因为历史记录现在位于不同的系统提示后面。成本随着恢复的对话有多长而扩展,所以回到长会话的第一个回合可能是您发送的最昂贵的请求。150 升级后[恢复会话](/docs/zh-CN/sessions#resume-a-session)会重新处理整个对话历史记录而没有缓存命中,因为历史记录现在位于不同的系统提示后面。成本随着恢复的对话有多长而扩展,所以回到长会话的第一个回合可能是您发送的最昂贵的请求。

151</Note>151</Note>

152 152 

153<h2 id="actions-that-keep-the-cache">153<h2 id="actions-that-keep-the-cache">


177 177 

178您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中期编辑它们不会使缓存失效,但编辑也不适用。Claude 继续使用在会话开始时加载的版本。新内容在下一个 `/clear`、`/compact` 或重启时加载。178您的项目根目录和用户级 CLAUDE.md 文件在会话开始时读取一次并保存在内存中。在会话中期编辑它们不会使缓存失效,但编辑也不适用。Claude 继续使用在会话开始时加载的版本。新内容在下一个 `/clear`、`/compact` 或重启时加载。

179 179 

180[子目录中的嵌套 CLAUDE.md 文件](/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。180[子目录中的嵌套 CLAUDE.md 文件](/docs/zh-CN/memory)和[带有 `paths:` frontmatter 的规则](/docs/zh-CN/memory#path-specific-rules)稍后加载,当 Claude 首次读取匹配文件时。在加载前编辑一个确实会生效。加载后,内容是对话历史记录的一部分,所以中期编辑不会追溯更改它。

181 181 

182<h3 id="changing-output-style">182<h3 id="changing-output-style">

183 更改输出样式183 更改输出样式

184</h3>184</h3>

185 185 

186[输出样式](/zh-CN/output-styles)是系统提示的一部分,Claude Code 在会话开始时读取一次。通过 `/config` 或 `outputStyle` 设置在会话中期更改它不会使缓存失效,但更改也不适用。Claude 继续使用在会话开始时加载的样式。新样式在下一个 `/clear` 或重启时加载。186[输出样式](/docs/zh-CN/output-styles)是系统提示的一部分,Claude Code 在会话开始时读取一次。通过 `/config` 或 `outputStyle` 设置在会话中期更改它不会使缓存失效,但更改也不适用。Claude 继续使用在会话开始时加载的样式。新样式在下一个 `/clear` 或重启时加载。

187 187 

188<h3 id="changing-permission-mode">188<h3 id="changing-permission-mode">

189 更改权限模式189 更改权限模式

190</h3>190</h3>

191 191 

192在[权限模式](/zh-CN/permission-modes)之间切换,例如从默认到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。192在[权限模式](/docs/zh-CN/permission-modes)之间切换,例如从默认到接受编辑,不会改变系统提示或工具定义,所以模式更改是缓存安全的。例外是带有 [`opusplan`](/docs/zh-CN/model-config#opusplan-model-setting) 模型设置的 Plan Mode,它在进入或离开 Plan Mode 时在 Opus 和 Sonnet 之间切换模型。这使模式切换成为[模型切换](#switching-models)。

193 193 

194<h3 id="invoking-skills-and-commands">194<h3 id="invoking-skills-and-commands">

195 调用技能和命令195 调用技能和命令

196</h3>196</h3>

197 197 

198[技能](/zh-CN/skills)和[命令](/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。198[技能](/docs/zh-CN/skills)和[命令](/docs/zh-CN/commands)在调用点将其指令注入为用户消息。对话中较早的任何内容都不会改变。

199 199 

200<h3 id="running-/recap">200<h3 id="running-/recap">

201 运行 `/recap`201 运行 `/recap`

202</h3>202</h3>

203 203 

204[`/recap`](/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要附加为命令输出而不是替换您的消息历史记录,所以缓存的前缀保持完整。204[`/recap`](/docs/zh-CN/interactive-mode#session-recap) 生成一个摘要以在您的终端中显示。与 `/compact` 不同,它将摘要附加为命令输出而不是替换您的消息历史记录,所以缓存的前缀保持完整。

205 205 

206<h3 id="rewinding-the-conversation">206<h3 id="rewinding-the-conversation">

207 重绕对话207 重绕对话

208</h3>208</h3>

209 209 

210[`/rewind`](/zh-CN/checkpointing) 将您的对话截断回较早的回合。剩余的历史记录是缓存在该点构建时的相同内容,系统提示和项目上下文层未更改,所以下一个请求命中较早的缓存条目。自那时以来的每个回合都通过该前缀读取,即使原始回合比 TTL 更久远,也保持条目温暖。210[`/rewind`](/docs/zh-CN/checkpointing) 将您的对话截断回较早的回合。剩余的历史记录是缓存在该点构建时的相同内容,系统提示和项目上下文层未更改,所以下一个请求命中较早的缓存条目。自那时以来的每个回合都通过该前缀读取,即使原始回合比 TTL 更久远,也保持条目温暖。

211 211 

212恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取它们时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。212恢复文件检查点与对话一起对缓存没有单独的影响。文件内容仅在 Claude 读取它们时进入上下文,与[编辑存储库中的文件](#editing-files-in-your-repository)相同。

213 213 


239 覆盖 TTL239 覆盖 TTL

240</h3>240</h3>

241 241 

242设置 `FORCE_PROMPT_CACHING_5M=1` 以强制五分钟 TTL,无论身份验证如何。这在您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/zh-CN/settings#settings-files)中设置的 `ENABLE_PROMPT_CACHING_1H` 时很有用。242设置 `FORCE_PROMPT_CACHING_5M=1` 以强制五分钟 TTL,无论身份验证如何。这在您调试缓存行为、比较两个 TTL 或覆盖在[托管设置](/docs/zh-CN/settings#settings-files)中设置的 `ENABLE_PROMPT_CACHING_1H` 时很有用。

243 243 

244<h2 id="cache-scope">244<h2 id="cache-scope">

245 缓存范围245 缓存范围


249 249 

250您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。250您在同一目录中并行运行的会话构建匹配的前缀并读取彼此的缓存。顺序会话仅当启动时的 git 状态快照匹配时才共享前缀,因为系统提示也捕获分支和最近的提交。

251 251 

252底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。252底层 API 缓存更广泛。缓存在组织之间隔离,在某些提供商上,[在组织内的工作区之间隔离](https://platform.claude.com/docs/zh-CN/build-with-claude/prompt-caching#cache-storage-and-sharing)。在这些边界内,任何两个具有相同模型和前缀的请求读取相同的缓存。对于运行自动化流程队列的 Agent SDK 调用者,请参阅[改进跨用户和机器的 prompt caching](/docs/zh-CN/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)以抑制系统提示的按机器部分并跨机器共享缓存。

253 253 

254<h2 id="check-cache-performance">254<h2 id="check-cache-performance">

255 检查缓存性能255 检查缓存性能

256</h2>256</h2>

257 257 

258缓存性能显示为 API 在每个响应上报告的两个令牌计数。实时观看它们的最直接方式是读取 `current_usage` 对象的[状态行脚本](/zh-CN/statusline):258缓存性能显示为 API 在每个响应上报告的两个令牌计数。实时观看它们的最直接方式是读取 `current_usage` 对象的[状态行脚本](/docs/zh-CN/statusline):

259 259 

260| 字段 | 含义 |260| 字段 | 含义 |

261| ----------------------------- | ------------------------------ |261| ----------------------------- | ------------------------------ |


264 264 

265高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。265高读取与创建比率意味着缓存工作良好。如果创建在回合之间保持高位,您的前缀中有什么在改变。[使缓存失效的操作](#actions-that-invalidate-the-cache)部分列出了常见原因。

266 266 

267为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/zh-CN/monitoring-usage)。267为了在整个组织中获得可见性,OpenTelemetry 导出器报告每个用户和会话的缓存读取和创建令牌。有关指标和事件属性参考,请参阅[监控使用](/docs/zh-CN/monitoring-usage)。

268 268 

269<h2 id="subagents-and-the-cache">269<h2 id="subagents-and-the-cache">

270 子代理和缓存270 子代理和缓存

271</h2>271</h2>

272 272 

273[子代理](/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它构建自己的缓存,在第一次调用时没有缓存命中,并在自己的回合中预热。子代理使用五分钟 TTL,即使在订阅上,因为自动一小时 TTL 适用于主对话。273[子代理](/docs/zh-CN/sub-agents)启动自己的对话,具有自己的系统提示和工具集,与父代的分开。它构建自己的缓存,在第一次调用时没有缓存命中,并在自己的回合中预热。子代理使用五分钟 TTL,即使在订阅上,因为自动一小时 TTL 适用于主对话。

274 274 

275父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。275父代的缓存不受影响。从父代的一侧,子代理的调用和结果附加到对话,保留父代的前缀完整。

276 276 

277[分叉](/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。[压缩对话](#compacting-the-conversation)中描述的压缩摘要调用使用相同的前缀共享方法。277[分叉](/docs/zh-CN/sub-agents#fork-the-current-conversation)相比之下,完全继承父代的系统提示、工具和对话历史记录,所以其第一个请求读取父代的缓存。[压缩对话](#compacting-the-conversation)中描述的压缩摘要调用使用相同的前缀共享方法。

278 278 

279<h2 id="disable-prompt-caching">279<h2 id="disable-prompt-caching">

280 禁用 prompt caching280 禁用 prompt caching


290| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |290| `DISABLE_PROMPT_CACHING_OPUS` | 仅对 Opus 禁用 |

291| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |291| `DISABLE_PROMPT_CACHING_FABLE` | 仅对 Fable 禁用 |

292 292 

293要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。293要在整个组织中设置缓存策略,请将这些或[TTL 变量](#cache-lifetime)中的任何一个放在[托管设置](/docs/zh-CN/settings#settings-files)的 `env` 块中。对于正常使用,保持缓存启用。

294 294 

295<h2 id="related-resources">295<h2 id="related-resources">

296 相关资源296 相关资源

297</h2>297</h2>

298 298 

299* [从构建 Claude Code 中学到的经验:Prompt caching 就是一切](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything):Plan Mode、延迟工具加载和压缩的设计原理299* [从构建 Claude Code 中学到的经验:Prompt caching 就是一切](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything):Plan Mode、延迟工具加载和压缩的设计原理

300* [探索上下文窗口](/zh-CN/context-window):什么加载到上下文中以及何时加载300* [探索上下文窗口](/docs/zh-CN/context-window):什么加载到上下文中以及何时加载

301* [减少令牌使用](/zh-CN/costs#reduce-token-usage):超越缓存的策略,用于管理上下文大小301* [减少令牌使用](/docs/zh-CN/costs#reduce-token-usage):超越缓存的策略,用于管理上下文大小

302* [跟踪和减少成本](/zh-CN/agent-sdk/cost-tracking):Agent SDK 调用者的缓存令牌跟踪和 TTL 配置302* [跟踪和减少成本](/docs/zh-CN/agent-sdk/cost-tracking):Agent SDK 调用者的缓存令牌跟踪和 TTL 配置

303* [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching):底层 API 机制、断点和定价303* [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching):底层 API 机制、断点和定价