One read of Claude Code CLIclaude-code-20261023T190701Z
220 pages moved out of 228 read.
Pages moved
220
significant first
Pages read
228
in this capture
Captured
19:07 UTC
Corpus hash
7e3663570d29
corpus-hash
What this read moved
51-75 of 220, page 3 of 9This capture is too large to show at once. Changes 51-75 of 220 are below, significant first; the rest are on the following screens.
claude-apps-gateway-deploy Changed · +87 / -87 lines
from line 10
1010>
1111> Choose the gateway's address before you choose where it runs. Usually that's a private address that users reach on your internal network or over a VPN. If your internal network uses public IPv4 ranges, you can list one range that holds both the gateway and your users' machines. Claude Code takes that match as a sign that the gateway is on your internal network. See [Choose an address for the gateway](#choose-an-address-for-the-gateway). If neither fits your network, contact your Anthropic account team.
1212
13This page covers the operational side of running [Claude apps gateway](/docs/en/claude-apps-gateway): registering an OAuth client in your identity provider (IdP), deploying the gateway as a container, and running it day-to-day. For every option in the `gateway.yaml` file the gateway reads at boot, see the [Configuration reference](/docs/en/claude-apps-gateway-config.md).
13This page covers the operational side of running [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway): registering an OAuth client in your identity provider (IdP), deploying the gateway as a container, and running it day-to-day. For every option in the `gateway.yaml` file the gateway reads at boot, see the [Configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md).
1414
1515A production deployment follows four steps in order, and the sections below match them. The first two are where you make choices; the second two are reference material to consult once it's running.
1616
from line 23
2323
2424## Identity provider setup
2525
26Register a confidential OAuth/OpenID Connect (OIDC) web application with a single redirect URI, `https://<gateway>/oauth/callback`, and assign it to the users or groups who should have gateway access. The gateway authenticates to the IdP with the registration's client secret, or with a certificate you upload to the registration if your IdP uses [certificate credentials](/docs/en/claude-apps-gateway-config.md#certificate-client-authentication) instead.
26Register a confidential OAuth/OpenID Connect (OIDC) web application with a single redirect URI, `https://<gateway>/oauth/callback`, and assign it to the users or groups who should have gateway access. The gateway authenticates to the IdP with the registration's client secret, or with a certificate you upload to the registration if your IdP uses [certificate credentials](https://code.claude.com/docs/en/claude-apps-gateway-config.md#certificate-client-authentication) instead.
2727
2828Any OIDC-compliant IdP works: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate, and others. The IdP must meet three requirements:
2929
30* Serves `/.well-known/openid-configuration`, over HTTPS in production; the gateway accepts an [`http://` issuer](/docs/en/claude-apps-gateway-config#oidc), and a loopback issuer additionally requires `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`
30* Serves `/.well-known/openid-configuration`, over HTTPS in production; the gateway accepts an [`http://` issuer](https://code.claude.com/docs/en/claude-apps-gateway-config#oidc), and a loopback issuer additionally requires `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`
3131* Supports the authorization-code flow. PKCE (Proof Key for Code Exchange) is on by default; disable it with `oidc.use_pkce: false` for IdPs that don't support it
3232* Returns `email` and optionally `groups` in the id\_token, or serves them from the userinfo endpoint with `oidc.userinfo_fallback: true`
3333
from line 37
3737
3838* **Okta**: the org authorization server at `https://example.okta.com` returns a thin id\_token that omits `email` and `groups`, so set `oidc.userinfo_fallback: true` whenever you use it as `issuer`. A custom authorization server such as `https://example.okta.com/oauth2/default` that includes `email` and optionally `groups` in the id\_token emits them directly and needs no fallback. Okta emits `groups` only when the `groups` scope is requested in `oidc.scopes` and the app's groups claim filter allows it; `userinfo_fallback` can't fill a claim the IdP wasn't asked for.
3939* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra emits group Object IDs rather than names, so use the GUIDs in `managed.policies.match.groups`, or use App Roles for human-readable names. If your tenant emits roles under `roles` instead of `groups`, set `oidc.groups_claim: roles`.
40* **Google Workspace**: `issuer` = `https://accounts.google.com`. Google's id\_token doesn't carry groups. To use group-based `allowed_groups` or `managed.policies` with Google as the IdP, configure [`oidc.google_groups`](/docs/en/claude-apps-gateway-config#oidc), which looks up each user's groups through the Admin SDK Directory API using a service account with domain-wide delegation. Without it, use `oidc.allowed_email_domains` for membership gating and `managed.policies.match.email_domain` for policy assignment. Google also ignores the standard `offline_access` scope. For refresh tokens, set `oidc.scopes: [openid, profile, email]` and `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.
40* **Google Workspace**: `issuer` = `https://accounts.google.com`. Google's id\_token doesn't carry groups. To use group-based `allowed_groups` or `managed.policies` with Google as the IdP, configure [`oidc.google_groups`](https://code.claude.com/docs/en/claude-apps-gateway-config#oidc), which looks up each user's groups through the Admin SDK Directory API using a service account with domain-wide delegation. Without it, use `oidc.allowed_email_domains` for membership gating and `managed.policies.match.email_domain` for policy assignment. Google also ignores the standard `offline_access` scope. For refresh tokens, set `oidc.scopes: [openid, profile, email]` and `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.
4141
4242> [!WARNING]
4343>
4444> Refresh tokens let the gateway renew a developer's session silently, without sending the developer back to the browser. They also drive deprovisioning, because when the IdP disables a user, the next refresh fails and the session ends within `ttl_hours`. The gateway requests `offline_access` by default to get a refresh token. If your IdP requires explicit consent for offline access, configure the OAuth client to allow it.
4545>
46> If your IdP can't issue refresh tokens at all, the gateway still works, but there is no silent renewal, so developers re-run the browser login when their session expires. To keep that from happening every hour, raise [`session.ttl_hours`](/docs/en/claude-apps-gateway-config#session) to `8` or `12`. The tradeoff is deprovisioning latency, because without refresh tokens a disabled user keeps access until the longer TTL elapses.
46> If your IdP can't issue refresh tokens at all, the gateway still works, but there is no silent renewal, so developers re-run the browser login when their session expires. To keep that from happening every hour, raise [`session.ttl_hours`](https://code.claude.com/docs/en/claude-apps-gateway-config#session) to `8` or `12`. The tradeoff is deprovisioning latency, because without refresh tokens a disabled user keeps access until the longer TTL elapses.
4747
4848## Deployment
4949
from line 52
5252A few decisions shape the deployment beyond where it runs:
5353
5454* **Cost**: no separate license or per-seat fee. The gateway is part of the `claude` binary, so you pay for inference through your existing commitment, plus the compute it runs on.
55* **Bypass**: the gateway doesn't enforce that the only route to a model goes through it. A developer with their own credential can still call the provider directly, so closing that path is a network policy decision, for example blocking egress to `api.anthropic.com` except from the gateway. Blocking that egress also breaks the [WebFetch domain safety check](/docs/en/data-usage.md#webfetch-domain-safety-check), which calls `api.anthropic.com` from each developer's machine. Set `skipWebFetchPreflight: true` in the managed policy to disable it.
55* **Bypass**: the gateway doesn't enforce that the only route to a model goes through it. A developer with their own credential can still call the provider directly, so closing that path is a network policy decision, for example blocking egress to `api.anthropic.com` except from the gateway. Blocking that egress also breaks the [WebFetch domain safety check](https://code.claude.com/docs/en/data-usage.md#webfetch-domain-safety-check), which calls `api.anthropic.com` from each developer's machine. Set `skipWebFetchPreflight: true` in the managed policy to disable it.
5656* **Multiple gateways**: each is a separate deployment with its own config, and the CLI stores trust and credentials per gateway hostname, so teams can use different gateways without conflict. To serve multiple OIDC issuers, run separate instances.
5757* **Serverless**: Cloud Run works if you set `min-instances: 1` to avoid cold OIDC discovery. Lambda and Cloud Functions don't work, because the gateway is a long-running HTTP server.
5858
59Every production topology here puts an L7 proxy, such as an Ingress, Cloud Run's front end, or an ALB, in front of plain-HTTP replicas. Set [`listen.trusted_proxies`](/docs/en/claude-apps-gateway-config#listen) to the proxy's source ranges so the gateway reads client IPs from `X-Forwarded-For`. The gateway honors the header only when the TCP peer is trusted. The [Google Cloud](/docs/en/claude-apps-gateway-on-gcp.md) and [AWS](/docs/en/claude-apps-gateway-on-aws.md) worked examples have concrete values per topology. Without trusted proxies, every request appears to come from the proxy's IP, which collapses per-IP rate limits into one shared bucket and records the proxy's IP in audit events.
59Every production topology here puts an L7 proxy, such as an Ingress, Cloud Run's front end, or an ALB, in front of plain-HTTP replicas. Set [`listen.trusted_proxies`](https://code.claude.com/docs/en/claude-apps-gateway-config#listen) to the proxy's source ranges so the gateway reads client IPs from `X-Forwarded-For`. The gateway honors the header only when the TCP peer is trusted. The [Google Cloud](https://code.claude.com/docs/en/claude-apps-gateway-on-gcp.md) and [AWS](https://code.claude.com/docs/en/claude-apps-gateway-on-aws.md) worked examples have concrete values per topology. Without trusted proxies, every request appears to come from the proxy's IP, which collapses per-IP rate limits into one shared bucket and records the proxy's IP in audit events.
6060
6161Don't redirect requests to the gateway's device-authorization and token endpoints, for example with an HTTP-to-HTTPS or host-canonicalization rewrite at the ingress. Claude Code doesn't follow redirects on those requests, so an ingress rule that redirects them breaks sign-in and token refresh.
6262
from line 65
6565* On every upstream except `provider: anthropic`, the gateway writes an SSE `ping` once a stream has been silent for about 15 seconds.
6666* On `provider: anthropic`, the gateway passes the response through unchanged, including the Anthropic API's own pings.
6767
68A default such as the ALB's 60 seconds is enough to keep a quiet stream open. The [AWS worked example](/docs/en/claude-apps-gateway-on-aws.md#troubleshooting) raises it to an hour anyway, and its troubleshooting row covers gateways older than v2.1.229, which sent nothing during quiet periods on the upstreams that now get pings.
68A default such as the ALB's 60 seconds is enough to keep a quiet stream open. The [AWS worked example](https://code.claude.com/docs/en/claude-apps-gateway-on-aws.md#troubleshooting) raises it to an hour anyway, and its troubleshooting row covers gateways older than v2.1.229, which sent nothing during quiet periods on the upstreams that now get pings.
6969
7070### Choose an address for the gateway
7171
7272Claude Code accepts a gateway's address in one of two ways:
7373
74* **Private address**: put the gateway behind an internal load balancer or VPN, with a hostname that resolves only to private addresses, such as RFC 1918 or CGNAT `100.64.0.0/10`. Users' machines can be on any address. The [private-network prerequisite](/docs/en/claude-apps-gateway#prerequisites) lists the accepted ranges.
75* **Declared block**: if your internal network uses public IPv4 space your organization owns, list the block in the `gatewayInternalNetworks` managed setting. The gateway and the user's machine must both be in that block. See [Allow a gateway on public address space you own](/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own).
74* **Private address**: put the gateway behind an internal load balancer or VPN, with a hostname that resolves only to private addresses, such as RFC 1918 or CGNAT `100.64.0.0/10`. Users' machines can be on any address. The [private-network prerequisite](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) lists the accepted ranges.
75* **Declared block**: if your internal network uses public IPv4 space your organization owns, list the block in the `gatewayInternalNetworks` managed setting. The gateway and the user's machine must both be in that block. See [Allow a gateway on public address space you own](https://code.claude.com/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own).
7676
7777If no single block contains both, give the gateway a private address instead.
7878
from line 80
8080
8181Build your own image around the native `claude` binary from the standard Claude Code release:
8282
831. Download the Linux build for your image architecture from a pinned release; see [Install a specific version](/docs/en/setup.md#install-a-specific-version) for the download URL.
842. Verify it against the release's GPG-signed `manifest.json` as described in [Binary integrity and code signing](/docs/en/setup.md#binary-integrity-and-code-signing).
831. Download the Linux build for your image architecture from a pinned release; see [Install a specific version](https://code.claude.com/docs/en/setup.md#install-a-specific-version) for the download URL.
842. Verify it against the release's GPG-signed `manifest.json` as described in [Binary integrity and code signing](https://code.claude.com/docs/en/setup.md#binary-integrity-and-code-signing).
85853. Copy it into the build context.
8686
8787Mirror the release into your internal registry if your builds can't reach the release host, and pin the version your fleet runs.
from line 88
8888
8989Beyond the binary, the image needs:
9090
91* **A glibc-based image**: the glibc build's only dynamic dependencies are glibc libraries. Musl-based images need the `linux-x64-musl` or `linux-arm64-musl` build plus additional packages; see [Alpine Linux setup](/docs/en/setup.md#alpine-linux-and-musl-based-distributions).
91* **A glibc-based image**: the glibc build's only dynamic dependencies are glibc libraries. Musl-based images need the `linux-x64-musl` or `linux-arm64-musl` build plus additional packages; see [Alpine Linux setup](https://code.claude.com/docs/en/setup.md#alpine-linux-and-musl-based-distributions).
9292* **A writable state directory**: the gateway runs as any user, but minimal images have no writable home. Set `CLAUDE_CONFIG_DIR` to a writable path such as `/tmp/.claude`.
9393* **The container command**: `claude gateway --config /etc/claude/gateway.yaml`, with the config file mounted read-only and secrets supplied as environment variables; the gateway listens on `listen.port`, default `8080`.
9494
from line 100
100100* Terminate TLS at the Ingress and set `listen.public_url` to the Ingress hostname
101101* Point the readiness probe at `GET /readyz` and the liveness probe at `GET /healthz`
102102
103For a complete worked example on AWS, covering ECS Fargate or EKS, Amazon RDS, and AWS Secrets Manager, see [Deploy on AWS](/docs/en/claude-apps-gateway-on-aws.md).
103For a complete worked example on AWS, covering ECS Fargate or EKS, Amazon RDS, and AWS Secrets Manager, see [Deploy on AWS](https://code.claude.com/docs/en/claude-apps-gateway-on-aws.md).
104104
105Prefer the platform's workload identity over static keys; the [`upstreams` reference](/docs/en/claude-apps-gateway-config#upstreams) has per-platform setup details. For a cross-cloud pairing, such as an Amazon Bedrock upstream on GKE, set explicit credentials in the upstream's `auth` block instead.
105Prefer the platform's workload identity over static keys; the [`upstreams` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#upstreams) has per-platform setup details. For a cross-cloud pairing, such as an Amazon Bedrock upstream on GKE, set explicit credentials in the upstream's `auth` block instead.
106106
107107### Cloud Run
108108
from line 109
109109Configure the service as follows:
110110
111111* Leave `listen.port` at its default of `8080`, which matches Cloud Run's default `PORT`, or set `port: ${PORT}`
112* Set `public_url` to the externally reachable origin. For production this is normally an internal load balancer's hostname, because `/login` [rejects public addresses](/docs/en/claude-apps-gateway#prerequisites) and the `*.run.app` URL resolves to one, so the Cloud Run URL alone works only for a `curl` or browser smoke test. The exception is a network where `*.run.app` resolves privately through Private Service Connect and a Cloud DNS private zone; in that topology the Cloud Run URL is a valid `public_url`. The [Google Cloud worked example](/docs/en/claude-apps-gateway-on-gcp.md#deploy-the-gateway) covers both.
112* Set `public_url` to the externally reachable origin. For production this is normally an internal load balancer's hostname, because `/login` [rejects public addresses](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) and the `*.run.app` URL resolves to one, so the Cloud Run URL alone works only for a `curl` or browser smoke test. The exception is a network where `*.run.app` resolves privately through Private Service Connect and a Cloud DNS private zone; in that topology the Cloud Run URL is a valid `public_url`. The [Google Cloud worked example](https://code.claude.com/docs/en/claude-apps-gateway-on-gcp.md#deploy-the-gateway) covers both.
113113* Mount the config as a secret volume
114114* Set `min-instances: 1` to avoid a cold OIDC discovery on first request
115115
116For a complete worked example on Google Cloud, covering Cloud Run or GKE, Cloud SQL, and Secret Manager, see [Deploy on Google Cloud](/docs/en/claude-apps-gateway-on-gcp.md).
116For a complete worked example on Google Cloud, covering Cloud Run or GKE, Cloud SQL, and Secret Manager, see [Deploy on Google Cloud](https://code.claude.com/docs/en/claude-apps-gateway-on-gcp.md).
117117
118118### Push the gateway URL to developer machines
119119
120120Once the gateway is serving, push `forceLoginMethod`, `forceLoginGatewayUrl`, and `parentSettingsBehavior: "merge"` to each developer's machine through managed settings, via MDM or by writing the per-OS `managed-settings.json` directly.
121121
122Once you deploy the keys, Claude Code stops using a leftover API key or claude.ai login on the machine, so plan the push together with your sign-in instructions. [Administrator policy requires a Cloud gateway sign-in](/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in) describes the messages developers see.
122Once you deploy the keys, Claude Code stops using a leftover API key or claude.ai login on the machine, so plan the push together with your sign-in instructions. [Administrator policy requires a Cloud gateway sign-in](https://code.claude.com/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in) describes the messages developers see.
123123
124See [where each mechanism stores the policy](/docs/en/managed-settings.md#where-each-mechanism-stores-the-policy) for the file paths, and [Client-side managed settings](/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) for the Claude Desktop `bootstrapUrl` equivalent.
124See [where each mechanism stores the policy](https://code.claude.com/docs/en/managed-settings.md#where-each-mechanism-stores-the-policy) for the file paths, and [Client-side managed settings](https://code.claude.com/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) for the Claude Desktop `bootstrapUrl` equivalent.
125125
126126### Large rollouts
127127
128128Sign-in is rate limited per client IP address, and the defaults suit a small team. Each address gets 30 sign-in starts and 10 code submissions every 10 minutes. A rollout to thousands of developers can reach those limits on the first morning, for one of two reasons:
129129
130* **The gateway can't see past your load balancer.** Without [`listen.trusted_proxies`](/docs/en/claude-apps-gateway-config#listen), every developer appears to come from the load balancer's address and shares one limit. Set it before anything else. The gateway logs a warning the first time it ignores an `X-Forwarded-For` header.
131* **Many developers share a few NAT or VPN egress addresses.** They share those addresses' limits even when `trusted_proxies` is right. Raise [`rate_limits`](/docs/en/claude-apps-gateway-config#http-tuning) to fit.
130* **The gateway can't see past your load balancer.** Without [`listen.trusted_proxies`](https://code.claude.com/docs/en/claude-apps-gateway-config#listen), every developer appears to come from the load balancer's address and shares one limit. Set it before anything else. The gateway logs a warning the first time it ignores an `X-Forwarded-For` header.
131* **Many developers share a few NAT or VPN egress addresses.** They share those addresses' limits even when `trusted_proxies` is right. Raise [`rate_limits`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning) to fit.
132132
133133To size `max`, divide the developers by the egress addresses they share. Estimate how many of those sign in within one `window_seconds` period, which is 10 minutes by default. Then double it to cover retries and developers who sign in to both Claude Code and Claude Desktop.
134134
from line 142
142142
143143`device_verify` is what stops someone from guessing another developer's sign-in code, so raise it only as far as your estimate needs. Even at these limits, a code is 8 characters from a 20-character alphabet and expires after 10 minutes, so guessing stays impractical; see [User-code brute-force resistance](#user-code-brute-force-resistance).
144144
145When your IdP issues refresh tokens, Claude Code renews sessions silently, so you can put the limit back after the rollout. Without refresh tokens, developers sign in again every [`session.ttl_hours`](/docs/en/claude-apps-gateway-config#session). Size both limits for that steady rate too and leave them raised.
145When your IdP issues refresh tokens, Claude Code renews sessions silently, so you can put the limit back after the rollout. Without refresh tokens, developers sign in again every [`session.ttl_hours`](https://code.claude.com/docs/en/claude-apps-gateway-config#session). Size both limits for that steady rate too and leave them raised.
146146
147147When a limit is reached, Claude Code v2.1.274 or later shows `The gateway is limiting sign-in attempts right now`. A gateway on v2.1.274 or later shows `Too many attempts came from your network address` on the verification page, with the settings to check. It also writes a `sign-in refused` log line that names the setting to change.
148148
from line 162
162162 * `auth.denied` and `access.denied` carry the reason and client IP, plus the request path for `auth.denied`, since no user identity exists at those denials. Two `access.denied` reasons change what the event carries:
163163 * `xff_unparseable`: the event also carries the `X-Forwarded-For` entry that couldn't be read
164164 * `client_ip_unknown`: the event carries no client IP, because the connection had no peer address while an `access_control` list was set
165 * `access.public_client` carries the client IP of the first request per process to arrive from a public address while `access_control.allow_cidrs` is empty. The gateway serves the request as usual; the event signals that the gateway may be reachable from the public internet. See the [`access_control` reference](/docs/en/claude-apps-gateway-config#http-tuning) for what counts as public and for the recommended allow list.
165 * `access.public_client` carries the client IP of the first request per process to arrive from a public address while `access_control.allow_cidrs` is empty. The gateway serves the request as usual; the event signals that the gateway may be reachable from the public internet. See the [`access_control` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning) for what counts as public and for the recommended allow list.
166166 * `inference` records which upstream served the request and the response status
167167 * `desktop_bootstrap.denied` records a rejected Claude Desktop bootstrap fetch with the reason (`not_configured`, `policy_not_opted_in`, or `no_policy_matched`) and the user's identity
168168 * `admin.denied` records a rejected admin-API auth attempt with the client IP, method, path, and a reason, without the presented key material: `invalid_key` when an `x-api-key` was presented but matched no configured key, `bearer_rejected` when only an `Authorization` header was presented and it didn't verify as a gateway session in `admin.admin_groups`, or `no_credentials` when neither header was presented
from line 170
170170
171171### Health
172172
173The gateway serves `GET /healthz` as a liveness probe and `GET /readyz` as a readiness probe. `/readyz` verifies the store is reachable. If you set [`store.readiness_grace_seconds`](/docs/en/claude-apps-gateway-config#store), `/readyz` keeps reporting ready for up to that many seconds after the store stops answering.
173The gateway serves `GET /healthz` as a liveness probe and `GET /readyz` as a readiness probe. `/readyz` verifies the store is reachable. If you set [`store.readiness_grace_seconds`](https://code.claude.com/docs/en/claude-apps-gateway-config#store), `/readyz` keeps reporting ready for up to that many seconds after the store stops answering.
174174
175175Both endpoints are exempt from `access_control.allow_cidrs`, so probes keep working on a locked-down listener.
176176
from line 180
180180
181181By default, each gateway replica sends at most 256 requests upstream at the same time. A streaming response counts against the limit until the stream ends.
182182
183A request that arrives while a replica is at the limit waits inside the gateway for a free slot. The developer sees a response that is slow to start or appears to hang. On a `provider: anthropic` upstream, a request that waits longer than [`timeouts.upstream_ttfb_ms`](/docs/en/claude-apps-gateway-config#http-tuning) gives up on that upstream, and fails with a 502 when no later upstream serves it.
183A request that arrives while a replica is at the limit waits inside the gateway for a free slot. The developer sees a response that is slow to start or appears to hang. On a `provider: anthropic` upstream, a request that waits longer than [`timeouts.upstream_ttfb_ms`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning) gives up on that upstream, and fails with a 502 when no later upstream serves it.
184184
185185The startup log line that contains `upstream requests:` shows the limit in effect. While a replica has more requests open than the limit, it also logs a warning that contains `client requests are open`, at most once a minute.
186186
from line 199
199199
200200### Keep `API_TIMEOUT_MS` above the gateway's time to first byte
201201
202If you lower [`API_TIMEOUT_MS`](/docs/en/network-config#streaming-idle-watchdogs) to retry an unanswered request sooner, keep it above the time the gateway takes to send the first bytes of a streaming response. A request that waits longer times out, and so does each retry that waits as long, until the turn ends with `Request timed out` unless the [first-byte deadline](#retry-an-unanswered-request-sooner-with-the-first-byte-deadline) ends it.
202If you lower [`API_TIMEOUT_MS`](https://code.claude.com/docs/en/network-config#streaming-idle-watchdogs) to retry an unanswered request sooner, keep it above the time the gateway takes to send the first bytes of a streaming response. A request that waits longer times out, and so does each retry that waits as long, until the turn ends with `Request timed out` unless the [first-byte deadline](#retry-an-unanswered-request-sooner-with-the-first-byte-deadline) ends it.
203203
204204* **`provider: anthropic`**: set `API_TIMEOUT_MS` above the longest time your upstream takes to send its first event.
205205* **Every other upstream**: set it more than 20 seconds above the longest time your upstream takes to return response headers. The gateway sends its first [keepalive `ping`](#deployment) about 15 seconds after those headers, unless the upstream's first event comes sooner. A gateway older than v2.1.229 sends no pings, so use the `provider: anthropic` rule there.
206206
207On top of that time, allow for any [wait for a free slot](#concurrent-upstream-requests) and for the wait on a down upstream before [failover](/docs/en/claude-apps-gateway-config.md#multiple-upstreams). Keep the value above the longest [non-streaming request](/docs/en/network-config.md#streaming-idle-watchdogs) too.
207On top of that time, allow for any [wait for a free slot](#concurrent-upstream-requests) and for the wait on a down upstream before [failover](https://code.claude.com/docs/en/claude-apps-gateway-config.md#multiple-upstreams). Keep the value above the longest [non-streaming request](https://code.claude.com/docs/en/network-config.md#streaming-idle-watchdogs) too.
208208
209209### Retry an unanswered request sooner with the first-byte deadline
210210
211To make Claude Code retry an unanswered streaming request sooner, give it a first-byte deadline by setting [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](/docs/en/env-vars) on your developers' machines. The deadline limits how long the first attempt waits for response headers. Without it, that attempt can wait 5 to 6 minutes. Requires Claude Code v2.1.307 or later on the developer's machine.
211To make Claude Code retry an unanswered streaming request sooner, give it a first-byte deadline by setting [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](https://code.claude.com/docs/en/env-vars) on your developers' machines. The deadline limits how long the first attempt waits for response headers. Without it, that attempt can wait 5 to 6 minutes. Requires Claude Code v2.1.307 or later on the developer's machine.
212212
213213Set the variable to a positive whole number of milliseconds, in a [gateway policy's `env` block](#deliver-the-value-in-a-policy) or a developer's shell. Keep the value above your gateway's longest [time to first byte](#keep-api_timeout_ms-above-the-gateways-time-to-first-byte), or Claude Code can abort and re-send healthy requests whose headers take longer. This example sets 60 seconds in a developer's shell:
214214
from line 216
216216export CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS=60000
217217```
218218
219An unanswered re-send can wait 5 to 6 minutes, until the [body idle timeout](/docs/en/network-config.md#streaming-idle-watchdogs) ends it and Claude Code retries it within the [retry budget](/docs/en/errors.md#tune-retry-behavior). If you lowered `API_TIMEOUT_MS` only to retry sooner, remove that value, or one unanswered re-send can end the turn with [No response from API](/docs/en/errors.md#no-response-from-api).
219An unanswered re-send can wait 5 to 6 minutes, until the [body idle timeout](https://code.claude.com/docs/en/network-config.md#streaming-idle-watchdogs) ends it and Claude Code retries it within the [retry budget](https://code.claude.com/docs/en/errors.md#tune-retry-behavior). If you lowered `API_TIMEOUT_MS` only to retry sooner, remove that value, or one unanswered re-send can end the turn with [No response from API](https://code.claude.com/docs/en/errors.md#no-response-from-api).
220220
221To confirm the deadline fired, have a developer start Claude Code with [debug logging](/docs/en/network-config.md#verify-your-configuration), then search the log for `[first-byte] no response headers`.
221To confirm the deadline fired, have a developer start Claude Code with [debug logging](https://code.claude.com/docs/en/network-config.md#verify-your-configuration), then search the log for `[first-byte] no response headers`.
222222
223223### Outage behavior
224224
from line 226
226226
227227* **Existing sessions**: bearer tokens validate locally with the JWT secret, session refreshes don't touch the store, and the gateway process can still serve inference
228228* **New sign-ins**: fail until Postgres recovers, because the device flow and its rate-limit counters live in Postgres
229* **[Spend-limit enforcement](/docs/en/claude-apps-gateway-spend-limits.md#postgres-availability)**: fails open by default during the outage, so inference still flows; flip it to fail closed if you'd rather block than run unmetered
229* **[Spend-limit enforcement](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md#postgres-availability)**: fails open by default during the outage, so inference still flows; flip it to fail closed if you'd rather block than run unmetered
230230* **Readiness**: by default `/readyz` reports not-ready as soon as Postgres is unreachable, so every replica fails its readiness check at once. Where traffic only reaches replicas that pass the check, all traffic, including inference the gateway could still serve, fails until Postgres recovers. The liveness probe on `/healthz` keeps passing throughout.
231231
232232If your IdP goes down, existing sessions work until `ttl_hours` and new logins fail. A session refresh gets a try-again answer and succeeds once the IdP is back. Set a longer `ttl_hours` if your IdP has frequent maintenance windows.
from line 233
233233
234234#### Readiness grace period
235235
236To keep signed-in developers working through a short Postgres outage such as a database failover, set [`store.readiness_grace_seconds`](/docs/en/claude-apps-gateway-config#store) to longer than the failover takes, for example `300`. With spend limits on and the default fail-open behavior, requests through a replica that stays ready are unmetered until Postgres recovers, so keep the value as low as covers your failover. If you set [`enforcement.fail_closed_on_error: true`](/docs/en/claude-apps-gateway-config#enforcement), the gateway refuses signed-in developers' inference with the `429` `spend limit unavailable` message until Postgres recovers, even while replicas still pass their readiness check.
236To keep signed-in developers working through a short Postgres outage such as a database failover, set [`store.readiness_grace_seconds`](https://code.claude.com/docs/en/claude-apps-gateway-config#store) to longer than the failover takes, for example `300`. With spend limits on and the default fail-open behavior, requests through a replica that stays ready are unmetered until Postgres recovers, so keep the value as low as covers your failover. If you set [`enforcement.fail_closed_on_error: true`](https://code.claude.com/docs/en/claude-apps-gateway-config#enforcement), the gateway refuses signed-in developers' inference with the `429` `spend limit unavailable` message until Postgres recovers, even while replicas still pass their readiness check.
237237
238238The setting requires Claude Code v2.1.282 or later on the gateway server. An earlier gateway refuses to start when it finds the key, so upgrade every replica before you add it. [Upgrades](#upgrades) covers rolling back.
239239
from line 253
253253
254254The gateway stores its state in a PostgreSQL database:
255255
256* **Database**: PostgreSQL itself, self-hosted or managed, at the [minimum version](/docs/en/claude-apps-gateway#prerequisites) or later. Databases that only implement the Postgres protocol, such as distributed SQL databases, aren't supported.
256* **Database**: PostgreSQL itself, self-hosted or managed, at the [minimum version](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) or later. Databases that only implement the Postgres protocol, such as distributed SQL databases, aren't supported.
257257* **Address**: `store.postgres_url` takes one host. If the database has several nodes, use the address in front of them, such as your managed service's endpoint, a load balancer, or a virtual IP. Set a [readiness grace period](#readiness-grace-period) longer than a failover takes.
258258
259259The gateway holds five data tables plus a `_migrations` table, all created by its boot-time migrations:
from line 266
266266| `admin_audit` | Admin API mutation trail | `admin.audit_retention_days`, default 365 |
267267| `principal_emails` | Each principal's last-seen email, display name, and IdP groups. Contains PII. | `admin.identity_retention_days` since last activity, default 90 |
268268
269A 30-second loop expires `kv` rows past their TTL, and an hourly sweep enforces the retention windows on the spend tables, so nothing grows without bound. Without [spend limits](/docs/en/claude-apps-gateway-spend-limits.md) configured, only `kv` is written. The gateway applies its own schema migrations at boot and on every upgrade, so its database role needs rights to create and alter tables. Point it at a database or schema dedicated to the gateway to keep that grant narrow.
269A 30-second loop expires `kv` rows past their TTL, and an hourly sweep enforces the retention windows on the spend tables, so nothing grows without bound. Without [spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md) configured, only `kv` is written. The gateway applies its own schema migrations at boot and on every upgrade, so its database role needs rights to create and alter tables. Point it at a database or schema dedicated to the gateway to keep that grant narrow.
270270
271271With spend limits in use, a lost database means lost spend tracking and caps, not only developer re-logins, so run regular backups. To erase one departed developer immediately rather than waiting on retention, run `DELETE FROM principal_emails WHERE principal = '<sub>'` directly; that removes the only table holding their email, name, and groups. `spend` and `admin_audit` rows reference the pseudonymous OIDC `sub` only.
272272
273273#### Size the connection pool
274274
275Each replica opens up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Keep replicas × `store.max_connections` at or below the connections the database has left for the gateway:
275Each replica opens up to [`store.max_connections`](https://code.claude.com/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Keep replicas × `store.max_connections` at or below the connections the database has left for the gateway:
276276
277277* **Replicas**: count the most that run at once. Start from your autoscaling maximum, or your replica count if you don't autoscale, and add the extra replicas a rolling update starts before it stops old ones. On Amazon ECS with default settings, and on Cloud Run, that can be as many again.
278278* **Connections left**: take the database's `max_connections`, then subtract what the database reserves and what other clients hold. PostgreSQL reserves `superuser_reserved_connections`, three by default. A managed service can reserve more, so check its documentation.
from line 283
283283
284284* **The database**: raise its `max_connections`
285285* **The replicas**: run fewer, or have your orchestrator start fewer extra replicas in a rolling update
286* **The pool**: lower `store.max_connections`, but with [spend limits](/docs/en/claude-apps-gateway-spend-limits.md) on, keep it large enough for each replica's load. Otherwise spend checks can [time out](/docs/en/claude-apps-gateway-spend-limits.md#postgres-availability) waiting for a connection, and the gateway logs `spend check failed: spend precheck timed out`.
286* **The pool**: lower `store.max_connections`, but with [spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md) on, keep it large enough for each replica's load. Otherwise spend checks can [time out](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md#postgres-availability) waiting for a connection, and the gateway logs `spend check failed: spend precheck timed out`.
287287
288288### Upgrades
289289
from line 318
318318| Data | Path | Sent to Anthropic by the gateway |
319319| - | - | - |
320320| Inference (prompts, completions) | CLI → gateway → your upstream | Only if the Anthropic API is a configured upstream |
321| Telemetry (OTLP metrics, plus [opt-in logs and traces](/docs/en/claude-apps-gateway-config.md#telemetry)) | CLI → gateway → your collector | Never |
322| Identity (email, groups, sub) | IdP → gateway → CLI; the CLI stamps it on OTLP exports. If you turn on [`forward_user_identity`](/docs/en/claude-apps-gateway-config#per-user-identity-headers-for-a-proxy-you-run), the gateway also sends the developer's email and IdP subject as headers to your proxy | Never |
321| Telemetry (OTLP metrics, plus [opt-in logs and traces](https://code.claude.com/docs/en/claude-apps-gateway-config.md#telemetry)) | CLI → gateway → your collector | Never |
322| Identity (email, groups, sub) | IdP → gateway → CLI; the CLI stamps it on OTLP exports. If you turn on [`forward_user_identity`](https://code.claude.com/docs/en/claude-apps-gateway-config#per-user-identity-headers-for-a-proxy-you-run), the gateway also sends the developer's email and IdP subject as headers to your proxy | Never |
323323| Managed settings | Your gateway YAML → CLI | Never |
324324| Audit log | Gateway stderr → your aggregator | Never |
325325
from line 331
331331* The device-verification page enforces same-origin POST and a per-IP rate limit per RFC 8628 §5.1. See [User-code brute-force resistance](#user-code-brute-force-resistance).
332332* The gateway's requests to your IdP, your OTLP collectors, and `provider: anthropic` upstreams go through a server-side request forgery (SSRF) guard that resolves DNS, blocks link-local and cloud-metadata addresses plus loopback by default, and pins the connection to the resolved IP, so those operator-influenced URLs can't be redirected to cloud metadata endpoints. RFC 1918 private ranges are deliberately allowed, because IdPs and OTLP collectors commonly live on private IPs. For the other providers, the gateway refuses a `base_url` that names one of those addresses or a metadata hostname when it loads the config, and the provider's SDK then connects without the DNS check.
333333
334 If you turn on [proxy-only egress](/docs/en/claude-apps-gateway-config.md#proxy-only-egress), that address check moves to your forward proxy: the gateway hands it hostnames and the proxy's allowlist must refuse those destinations.
334 If you turn on [proxy-only egress](https://code.claude.com/docs/en/claude-apps-gateway-config.md#proxy-only-egress), that address check moves to your forward proxy: the gateway hands it hostnames and the proxy's allowlist must refuse those destinations.
335335
336336 Set `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` in the gateway's environment only when something the gateway must reach legitimately lives on loopback, such as a local-development IdP or a sidecar OTLP collector on `localhost`. The variable relaxes the loopback block for every operator-configured URL and also skips the boot-time warning that checks whether the pod can reach the cloud metadata endpoint, so prefer giving the collector its own internal address.
337337
from line 339
339339
340340Two threats are out of scope because they are your infrastructure to secure:
341341
342* **A compromised gateway host**: the host both holds the upstream credential and distributes [managed settings](/docs/en/claude-apps-gateway-config.md#managed) to every connected developer, so control over the gateway's configuration is comparable to control over your MDM. The CLI's [approval dialog](/docs/en/server-managed-settings.md#approval-memory) for shell-capable settings limits silent changes but doesn't replace host security.
342* **A compromised gateway host**: the host both holds the upstream credential and distributes [managed settings](https://code.claude.com/docs/en/claude-apps-gateway-config.md#managed) to every connected developer, so control over the gateway's configuration is comparable to control over your MDM. The CLI's [approval dialog](https://code.claude.com/docs/en/server-managed-settings.md#approval-memory) for shell-capable settings limits silent changes but doesn't replace host security.
343343* **A malicious OIDC provider**: the provider signs the id\_tokens the gateway trusts, so it can assert any identity. Vetting and securing your IdP is your responsibility.
344344
345345### User-code brute-force resistance
from line 346
346346
347347The `user_code` a developer types into the `/device` verification page is 8 characters drawn from a 20-character alphabet, which yields 20⁸ or about 2.56×10¹⁰ combinations, and it expires after 10 minutes.
348348
349The gateway applies per-IP rate limits on the device-grant endpoints, configurable via [`rate_limits`](/docs/en/claude-apps-gateway-config#http-tuning). Raise the limits if many developers sign in from a single shared corporate NAT address. [Large rollouts](#large-rollouts) shows how to size them. The limits apply only to the sign-in flow, not to inference.
349The gateway applies per-IP rate limits on the device-grant endpoints, configurable via [`rate_limits`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning). Raise the limits if many developers sign in from a single shared corporate NAT address. [Large rollouts](#large-rollouts) shows how to size them. The limits apply only to the sign-in flow, not to inference.
350350
351351### Compliance posture
352352
353353* **Data residency**: the gateway's own data plane sends nothing to Anthropic unless the Anthropic API is a configured upstream; when it is, your existing data-handling agreement applies to the inference path. Telemetry, audit, identity, and settings go only to the destinations you configure.
354354* **Host-process traffic**: the host process is the Claude Code CLI. `claude gateway` runs under the same third-party rules as Amazon Bedrock and Google Cloud's Agent Platform deployments and sends nothing to Anthropic. Before v2.1.227, the host process sent startup telemetry such as product version and platform, which setting `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` in the container environment turned off. Those releases also sent one `HEAD` request at boot, with no body or credentials, to `/api/hello` on `https://api.anthropic.com`, or on `ANTHROPIC_BASE_URL` when the environment set it, unless the environment also set a proxy variable such as `HTTPS_PROXY` or an mTLS client certificate. They ignored the response, so blocking that request at the egress firewall didn't affect the gateway.
355* **Client analytics**: the CLI disables its own usage analytics and error reporting while signed in to a gateway. Before the first sign-in, the CLI still sends startup events to Anthropic, including on machines whose managed settings force gateway sign-in. To keep those off too, deliver [`DISABLE_TELEMETRY`](/docs/en/managed-settings#turn-telemetry-off-for-your-organization) in the same [client-side managed settings](/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) that force gateway sign-in.
355* **Client analytics**: the CLI disables its own usage analytics and error reporting while signed in to a gateway. Before the first sign-in, the CLI still sends startup events to Anthropic, including on machines whose managed settings force gateway sign-in. To keep those off too, deliver [`DISABLE_TELEMETRY`](https://code.claude.com/docs/en/managed-settings#turn-telemetry-off-for-your-organization) in the same [client-side managed settings](https://code.claude.com/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) that force gateway sign-in.
356356* **Error reporting**: the CLI turns error reporting off whenever its model requests go to any endpoint other than Anthropic's first-party API, such as Amazon Bedrock or a custom `ANTHROPIC_BASE_URL`.
357* **Client machines**: developers' CLIs still send WebFetch hostname checks and version checks to Anthropic unless `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` and `skipWebFetchPreflight: true` are set. [Plugin marketplace requests](#plugin-marketplace-requests) have their own off switches. See [data usage](/docs/en/data-usage.md).
357* **Client machines**: developers' CLIs still send WebFetch hostname checks and version checks to Anthropic unless `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` and `skipWebFetchPreflight: true` are set. [Plugin marketplace requests](#plugin-marketplace-requests) have their own off switches. See [data usage](https://code.claude.com/docs/en/data-usage.md).
358358* **Survey ratings**: while signed in to a gateway, the CLI disables the Anthropic-bound rating upload together with the analytics streams, so it doesn't send ratings to Anthropic.
359359* **Transcript sharing**: choosing Yes on a survey's transcript-share prompt writes a local file under `~/.claude/feedback-bundles/` instead of uploading to Anthropic.
360360* **Client updates**: update checks are separate from gateway traffic. Pin versions through your own distribution and set `DISABLE_UPDATES` if laptops must not fetch releases. `DISABLE_AUTOUPDATER` stops only background updates while `claude update` still works.
361361* **TLS**: serve `public_url` over HTTPS in production, either from the gateway's own listener via `listen.tls` or from a TLS-terminating ingress in front of plain-HTTP replicas, with `listen.public_url` set in both cases. The gateway doesn't refuse plain HTTP. The IdP must serve HTTPS in production, and Postgres supports `?sslmode=require`. Set `Strict-Transport-Security` at your ingress.
362* **Vulnerability disclosure**: follow [Reporting security issues](/docs/en/security.md#reporting-security-issues)
362* **Vulnerability disclosure**: follow [Reporting security issues](https://code.claude.com/docs/en/security.md#reporting-security-issues)
363363
364364### Plugin marketplace requests
365365
366Claude Code fetches plugin marketplaces directly from each developer's machine, not through the gateway. [Network access requirements](/docs/en/network-config.md#network-access-requirements) lists the hosts.
366Claude Code fetches plugin marketplaces directly from each developer's machine, not through the gateway. [Network access requirements](https://code.claude.com/docs/en/network-config.md#network-access-requirements) lists the hosts.
367367
368The first time a developer starts an interactive terminal session, Claude Code registers the official marketplace, `claude-plugins-official`. It downloads the catalog from `downloads.claude.ai` and, if that fails, clones it from `github.com`. [Which marketplaces and plugins auto-update](/docs/en/plugins/loading.md#which-marketplaces-and-plugins-auto-update) covers later refreshes.
368The first time a developer starts an interactive terminal session, Claude Code registers the official marketplace, `claude-plugins-official`. It downloads the catalog from `downloads.claude.ai` and, if that fails, clones it from `github.com`. [Which marketplaces and plugins auto-update](https://code.claude.com/docs/en/plugins/loading.md#which-marketplaces-and-plugins-auto-update) covers later refreshes.
369369
370370`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` doesn't stop the first registration. Either of these managed settings does:
371371
372* **A marketplace list**: a [`strictKnownMarketplaces`](/docs/en/plugins/org#allowlist-with-strictknownmarketplaces) allowlist that leaves the marketplace out, or a [`blockedMarketplaces`](/docs/en/plugins/org#blocklist-with-blockedmarketplaces) entry that names it
373* **An environment variable**: `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` set to `"1"` in the managed [`env` block](/docs/en/plugins/org#turn-updates-off-for-the-whole-fleet)
372* **A marketplace list**: a [`strictKnownMarketplaces`](https://code.claude.com/docs/en/plugins/org#allowlist-with-strictknownmarketplaces) allowlist that leaves the marketplace out, or a [`blockedMarketplaces`](https://code.claude.com/docs/en/plugins/org#blocklist-with-blockedmarketplaces) entry that names it
373* **An environment variable**: `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` set to `"1"` in the managed [`env` block](https://code.claude.com/docs/en/plugins/org#turn-updates-off-for-the-whole-fleet)
374374
375The first registration can run before the developer signs in to the gateway, when no gateway policy has arrived. To cover that first start, deliver your choice in [client-side managed settings](/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) as well as in the gateway policy's [`cli` or `code` block](/docs/en/claude-apps-gateway-config#what-goes-in-cli).
375The first registration can run before the developer signs in to the gateway, when no gateway policy has arrived. To cover that first start, deliver your choice in [client-side managed settings](https://code.claude.com/docs/en/claude-apps-gateway-config.md#client-side-managed-settings) as well as in the gateway policy's [`cli` or `code` block](https://code.claude.com/docs/en/claude-apps-gateway-config#what-goes-in-cli).
376376
377377## Troubleshooting
378378
from line 386
386386
387387| Symptom | Cause | Fix |
388388| - | - | - |
389| A developer's `/login` shows the standard account picker instead of the **Cloud gateway** screen | `forceLoginMethod` or `forceLoginGatewayUrl` isn't set in managed settings on that machine | Deploy the [managed settings file](/docs/en/claude-apps-gateway#set-the-gateway-url) to the device; `/login` reads the gateway URL from there |
390| A developer's requests fail with `Not signed in to the Cloud gateway — run /login.` | The machine's managed settings set `forceLoginMethod: "gateway"` or `forceLoginGatewayUrl`, and the session has no gateway sign-in. A leftover claude.ai login doesn't satisfy the requirement. | Have the developer run `/login` and complete the gateway sign-in. See also [Administrator policy requires a Cloud gateway sign-in](/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |
391| Claude Desktop reports that its bootstrap configuration couldn't be fetched | `/user/bootstrap` returned 404: the policy matching the user doesn't carry a `desktop` key, or no policy matched. The gateway's audit log records each rejection as `desktop_bootstrap.denied` with the reason. | Add a `desktop` block to the policy that matches the user, or to the `match: {}` base layer; an empty `desktop: {}` suffices. See [Claude Desktop overlay](/docs/en/claude-apps-gateway-config.md#claude-desktop-overlay). |
389| A developer's `/login` shows the standard account picker instead of the **Cloud gateway** screen | `forceLoginMethod` or `forceLoginGatewayUrl` isn't set in managed settings on that machine | Deploy the [managed settings file](https://code.claude.com/docs/en/claude-apps-gateway#set-the-gateway-url) to the device; `/login` reads the gateway URL from there |
390| A developer's requests fail with `Not signed in to the Cloud gateway — run /login.` | The machine's managed settings set `forceLoginMethod: "gateway"` or `forceLoginGatewayUrl`, and the session has no gateway sign-in. A leftover claude.ai login doesn't satisfy the requirement. | Have the developer run `/login` and complete the gateway sign-in. See also [Administrator policy requires a Cloud gateway sign-in](https://code.claude.com/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |
391| Claude Desktop reports that its bootstrap configuration couldn't be fetched | `/user/bootstrap` returned 404: the policy matching the user doesn't carry a `desktop` key, or no policy matched. The gateway's audit log records each rejection as `desktop_bootstrap.denied` with the reason. | Add a `desktop` block to the policy that matches the user, or to the `match: {}` base layer; an empty `desktop: {}` suffices. See [Claude Desktop overlay](https://code.claude.com/docs/en/claude-apps-gateway-config.md#claude-desktop-overlay). |
392392| Startup shows `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | The installed Claude Code build predates gateway support | Have the developer update Claude Code to a release that includes Cloud gateway support |
393| Startup exits with `Administrator policy requires a Cloud gateway sign-in on this machine` | The developer's environment sets `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN`, their settings configure an [`apiKeyHelper`](/docs/en/settings-reference#apikeyhelper), or an API key from an earlier Claude Console login is still saved | Have the developer clear each that applies: unset the variable, remove the `apiKeyHelper` entry, or run `claude auth logout` to remove the saved key. A session that selects a cloud provider with `CLAUDE_CODE_USE_*` then starts with no sign-in; for every other session, have them start `claude` and sign in with `/login`. See also [Administrator policy requires a Cloud gateway sign-in](/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |
394| Startup or `/login` reports `Claude Code may not be enabled for your organization` after a 403 on the managed settings load | The gateway, or something in front of it, answered the `/managed/settings` request with 403. The gateway's own settings route never answers 403. The status comes from the [`access_control`](/docs/en/claude-apps-gateway-config#http-tuning) IP checks or from a proxy or WAF in front of the gateway. The audit log records an IP-check denial as `access.denied` with the reason. The developer stays signed in. | Check the audit log for `access.denied` at the time of the failure and fix the `access_control` lists or the front end, then have the developer start `claude` again |
393| Startup exits with `Administrator policy requires a Cloud gateway sign-in on this machine` | The developer's environment sets `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN`, their settings configure an [`apiKeyHelper`](https://code.claude.com/docs/en/settings-reference#apikeyhelper), or an API key from an earlier Claude Console login is still saved | Have the developer clear each that applies: unset the variable, remove the `apiKeyHelper` entry, or run `claude auth logout` to remove the saved key. A session that selects a cloud provider with `CLAUDE_CODE_USE_*` then starts with no sign-in; for every other session, have them start `claude` and sign in with `/login`. See also [Administrator policy requires a Cloud gateway sign-in](https://code.claude.com/docs/en/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |
394| Startup or `/login` reports `Claude Code may not be enabled for your organization` after a 403 on the managed settings load | The gateway, or something in front of it, answered the `/managed/settings` request with 403. The gateway's own settings route never answers 403. The status comes from the [`access_control`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning) IP checks or from a proxy or WAF in front of the gateway. The audit log records an IP-check denial as `access.denied` with the reason. The developer stays signed in. | Check the audit log for `access.denied` at the time of the failure and fix the `access_control` lists or the front end, then have the developer start `claude` again |
395395| CLI `/login`: `The gateway is limiting sign-in attempts right now`, or `Request failed with status code 429` on older versions. The `/device` page may show `Too many attempts` to developers who haven't tried before | The per-IP sign-in rate limit was reached. Either `listen.trusted_proxies` doesn't cover the load balancer, so every developer shares its address, or many developers share a NAT or VPN egress address. Audit events with `result: rate_limited` show the same one or few `client_ip` values. | Set `listen.trusted_proxies` to the load balancer's source ranges first, then raise `rate_limits` if developers still share addresses. See [Large rollouts](#large-rollouts). |
396| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | The gateway hostname resolves to at least one public IP address. Claude Code checks each resolved address and requires every one to be private. A common cause is a dual-stack name where one family resolves to a public address, including AWS internal dual-stack load balancers, which return public-range AAAA addresses. | Have the gateway name resolve only to private addresses on developer machines. For a dual-stack name, drop the public-range record or serve a separate internal-only DNS name. See the [private-network prerequisite](/docs/en/claude-apps-gateway#prerequisites). If the address is public space your organization owns and uses internally, [declare that block](/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) instead. |
396| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | The gateway hostname resolves to at least one public IP address. Claude Code checks each resolved address and requires every one to be private. A common cause is a dual-stack name where one family resolves to a public address, including AWS internal dual-stack load balancers, which return public-range AAAA addresses. | Have the gateway name resolve only to private addresses on developer machines. For a dual-stack name, drop the public-range record or serve a separate internal-only DNS name. See the [private-network prerequisite](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites). If the address is public space your organization owns and uses internally, [declare that block](https://code.claude.com/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) instead. |
397397| CLI `/login`: `Gateway login would go through proxy <proxy>, which is not on a private network` | An `HTTPS_PROXY` or `HTTP_PROXY` applies to the gateway host and the proxy's hostname resolves to a public address. A proxy whose host resolves only to private addresses is allowed and doesn't trigger this error | Add the gateway host to `NO_PROXY` on the developer's machine so the connection is direct, or use a proxy whose hostname resolves to private addresses. The message names the exact `NO_PROXY` entry to add |
398| CLI `/login`: `Claude Code only signs in to <host> from inside its declared network <block> (managed settings), and this machine is connecting from <ip>, outside it` | The gateway is on a block declared in [`gatewayInternalNetworks`](/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), and the developer's machine reached it from an address outside that block: a VPN address pool, a container or WSL2 NAT segment, or a network that isn't yours | Have the developer run `/login` from the host OS on your network. If the address shown is also your organization's own public space, replace the gateway's entry with a block that covers both, up to `/8`; a second, overlapping entry is refused. If no block covers both, see [Choose an address for the gateway](#choose-an-address-for-the-gateway) |
399| CLI `/login`: `Every address for gateway host <host> must be inside its declared network <block>, and it also resolves to <ip>` | The gateway's name resolves to an address outside the block declared in [`gatewayInternalNetworks`](/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own): a second site, or an IPv6 record on a dual-stack name. Under a declared block every record must be inside that one IPv4 block, private and IPv6 addresses included | Publish only records inside the block for the gateway name on developer machines, or serve a separate internal-only name |
398| CLI `/login`: `Claude Code only signs in to <host> from inside its declared network <block> (managed settings), and this machine is connecting from <ip>, outside it` | The gateway is on a block declared in [`gatewayInternalNetworks`](https://code.claude.com/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), and the developer's machine reached it from an address outside that block: a VPN address pool, a container or WSL2 NAT segment, or a network that isn't yours | Have the developer run `/login` from the host OS on your network. If the address shown is also your organization's own public space, replace the gateway's entry with a block that covers both, up to `/8`; a second, overlapping entry is refused. If no block covers both, see [Choose an address for the gateway](#choose-an-address-for-the-gateway) |
399| CLI `/login`: `Every address for gateway host <host> must be inside its declared network <block>, and it also resolves to <ip>` | The gateway's name resolves to an address outside the block declared in [`gatewayInternalNetworks`](https://code.claude.com/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own): a second site, or an IPv6 record on a dual-stack name. Under a declared block every record must be inside that one IPv4 block, private and IPv6 addresses included | Publish only records inside the block for the gateway name on developer machines, or serve a separate internal-only name |
400400| CLI `/login`: `<host> is on the declared network <block>, which Claude Code checks over a direct connection, not through an HTTP proxy` | An `HTTPS_PROXY` or `HTTP_PROXY` applies to a gateway on a declared block | On the developer's machine, add the `NO_PROXY` entry the message names |
401| CLI `/login`: a message starting `gatewayInternalNetworks in managed settings` | The value breaks one of the [validation rules](/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), and the message names which. Until you fix it, Claude Code refuses every new gateway `/login` on the machine, gateways on private addresses included; existing sign-ins keep working | In the managed settings source you deploy, correct the entry the message names, then rerun `/login` |
401| CLI `/login`: a message starting `gatewayInternalNetworks in managed settings` | The value breaks one of the [validation rules](https://code.claude.com/docs/en/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), and the message names which. Until you fix it, Claude Code refuses every new gateway `/login` on the machine, gateways on private addresses included; existing sign-ins keep working | In the managed settings source you deploy, correct the entry the message names, then rerun `/login` |
402402| CLI `/login`: `Could not resolve the configured HTTP proxy` | The hostname in `HTTPS_PROXY` or `HTTP_PROXY` doesn't resolve from the developer's machine, typically because it isn't connected to the corporate network | Have the developer connect to your network or VPN and retry, or fix the proxy URL |
403403| CLI `/login`: `Could not resolve gateway host <host>` | The machine can't resolve the gateway's internal DNS name, typically because it isn't on the corporate network | Have the developer connect to your network or VPN, then retry `/login` |
404404| Boot exits with a config validation error naming `store.postgres_url` | No Postgres configured; the gateway requires Postgres | Set `store.postgres_url`. For local development, use a throwaway container: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |
405| Boot exits: `store.postgres_url in <path> is not a URL the gateway can read`, or before v2.1.290 a bare `Invalid URL` or `URI error` | The URL can't be parsed, for example because it lists more than one host or its password has an unencoded `/`, `?`, `#`, or `%` | Name [one host](#postgres), and move the password into [`store.password`](/docs/en/claude-apps-gateway-config#store) |
406| Boot exits: `requires the native binary` | Running under Node instead of the native binary | Install Claude Code with one of the [standalone install methods](/docs/en/setup.md) |
407| Boot exits with an OIDC discovery error after `config.load` | `oidc.issuer` unreachable, or TLS chain not trusted | Check the issuer is reachable from the pod and serves `/.well-known/openid-configuration`. Set `ca_cert_pem` for private PKI. If the pod reaches the IdP only through a forward proxy, set [`oidc.use_proxy: true`](/docs/en/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); on versions before v2.1.227, give the pod a direct route to each of the IdP's endpoints instead. If the pod also can't resolve the IdP's hostname, or the proxy refuses `CONNECT` to an IP address, see [Proxy-only egress](/docs/en/claude-apps-gateway-config.md#proxy-only-egress), which requires v2.1.277 or later. |
405| Boot exits: `store.postgres_url in <path> is not a URL the gateway can read`, or before v2.1.290 a bare `Invalid URL` or `URI error` | The URL can't be parsed, for example because it lists more than one host or its password has an unencoded `/`, `?`, `#`, or `%` | Name [one host](#postgres), and move the password into [`store.password`](https://code.claude.com/docs/en/claude-apps-gateway-config#store) |
406| Boot exits: `requires the native binary` | Running under Node instead of the native binary | Install Claude Code with one of the [standalone install methods](https://code.claude.com/docs/en/setup.md) |
407| Boot exits with an OIDC discovery error after `config.load` | `oidc.issuer` unreachable, or TLS chain not trusted | Check the issuer is reachable from the pod and serves `/.well-known/openid-configuration`. Set `ca_cert_pem` for private PKI. If the pod reaches the IdP only through a forward proxy, set [`oidc.use_proxy: true`](https://code.claude.com/docs/en/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); on versions before v2.1.227, give the pod a direct route to each of the IdP's endpoints instead. If the pod also can't resolve the IdP's hostname, or the proxy refuses `CONNECT` to an IP address, see [Proxy-only egress](https://code.claude.com/docs/en/claude-apps-gateway-config.md#proxy-only-egress), which requires v2.1.277 or later. |
408408| Boot exits with a Postgres permission error | The database role lacks DDL rights on its schema | Grant the role `CREATE` on the gateway's schema so it can create and alter its tables at boot |
409409| Log: `remaining connection slots are reserved` or `sorry, too many clients already`, from PostgreSQL. It shows in running replicas' `postgres connection closed` warnings, or in a new replica's boot log. There, `remaining connection slots are reserved` can follow `attempt 1 of 3`, and the replica may still start. | The replicas ask for more connections than the database has left for the gateway, and PostgreSQL refuses the extra ones | Make the total fit, as [Size the connection pool](#size-the-connection-pool) describes: run fewer replicas, lower `store.max_connections`, or raise the database's `max_connections`. If the total fits except during a rolling update, you can instead have your orchestrator stop an old replica before it starts a new one, if it supports that. |
410| Log: `could not connect to Postgres at boot, attempt 1 of 3`, with a reason other than `remaining connection slots are reserved` | The database wasn't reachable yet when the gateway started, for example on a cold instance whose network is still coming up | If the gateway then finishes booting, no action is needed. When the database isn't reachable, the gateway tries the connection three times, two seconds apart, before it exits. If it exits with `could not connect to Postgres`, check `store.postgres_url`, including that it names one host, and the network path to the database. If the attempts time out rather than being refused, raise [`store.connect_timeout_seconds`](/docs/en/claude-apps-gateway-config#store) to give each one longer. |
411| Log: `Postgres <version> is below the supported floor` | The database runs a PostgreSQL version older than your gateway version supports. The gateway keeps running. | Upgrade the database. On PostgreSQL 11, 12, or 13, you can instead upgrade the gateway to meet the [PostgreSQL requirement](/docs/en/claude-apps-gateway#prerequisites). |
410| Log: `could not connect to Postgres at boot, attempt 1 of 3`, with a reason other than `remaining connection slots are reserved` | The database wasn't reachable yet when the gateway started, for example on a cold instance whose network is still coming up | If the gateway then finishes booting, no action is needed. When the database isn't reachable, the gateway tries the connection three times, two seconds apart, before it exits. If it exits with `could not connect to Postgres`, check `store.postgres_url`, including that it names one host, and the network path to the database. If the attempts time out rather than being refused, raise [`store.connect_timeout_seconds`](https://code.claude.com/docs/en/claude-apps-gateway-config#store) to give each one longer. |
411| Log: `Postgres <version> is below the supported floor` | The database runs a PostgreSQL version older than your gateway version supports. The gateway keeps running. | Upgrade the database. On PostgreSQL 11, 12, or 13, you can instead upgrade the gateway to meet the [PostgreSQL requirement](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites). |
412412| `/oauth/callback` shows "Sign-in could not be completed" | Email domain rejected, id\_token validation failed, or `email_verified` is explicitly `false`, which the gateway always rejects with no override | Check `allowed_email_domains` and that the IdP returns a verified `email` claim. For `email_verified: false`, fix the IdP-side verification. If your IdP emits email under a different claim name, set `oidc.email_claim`. |
413413| Log: `token exchange failed request_id=<id>: id_token missing email claim` | The IdP isn't including `email` in the id\_token by default. This rejection fires only when `allowed_email_domains` is set; without it, a missing email mints a session with no email | Configure the IdP to emit `email` in the id\_token. Okta: add `email` to a custom authorization server's ID-token claims. Entra: add `email` as an optional claim on the app registration. PingFederate: enable an OpenID Connect Policy that emits `email`. If the IdP serves `email` from the userinfo endpoint but won't include it in the id\_token, such as the Okta org authorization server, set `oidc.userinfo_fallback: true`. |
414| Log: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, and developers see `Cloud gateway session expired` every `session.ttl_hours` | The IdP accepted the refresh token but returned no id\_token with it, so the gateway asked the IdP's userinfo endpoint for the user's claims. The IdP rejected the refreshed access token there. The gateway answers `temporarily_unavailable`, so Claude Code keeps the refresh token but can't renew the session. Gateway versions before v2.1.260 log the same line without the `(at …)` detail. | Set [`oidc.scope_on_refresh: true`](/docs/en/claude-apps-gateway-config#oidc), available in gateway v2.1.260 or later, so the refresh request asks for `openid` again. Some IdPs, such as Okta, return an id\_token on refresh only when asked. On PingFederate, enable **Return ID Token On Refresh Grant** under **Applications > OAuth > OpenID Connect Policy Management** instead. The key doesn't change PingFederate's behavior. For other IdPs that still omit it, check whether the userinfo endpoint accepts access tokens issued by a refresh. As a stopgap, raise [`session.ttl_hours`](/docs/en/claude-apps-gateway-config#session). See [Identity provider setup](#identity-provider-setup) for the deprovisioning tradeoff. |
414| Log: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, and developers see `Cloud gateway session expired` every `session.ttl_hours` | The IdP accepted the refresh token but returned no id\_token with it, so the gateway asked the IdP's userinfo endpoint for the user's claims. The IdP rejected the refreshed access token there. The gateway answers `temporarily_unavailable`, so Claude Code keeps the refresh token but can't renew the session. Gateway versions before v2.1.260 log the same line without the `(at …)` detail. | Set [`oidc.scope_on_refresh: true`](https://code.claude.com/docs/en/claude-apps-gateway-config#oidc), available in gateway v2.1.260 or later, so the refresh request asks for `openid` again. Some IdPs, such as Okta, return an id\_token on refresh only when asked. On PingFederate, enable **Return ID Token On Refresh Grant** under **Applications > OAuth > OpenID Connect Policy Management** instead. The key doesn't change PingFederate's behavior. For other IdPs that still omit it, check whether the userinfo endpoint accepts access tokens issued by a refresh. As a stopgap, raise [`session.ttl_hours`](https://code.claude.com/docs/en/claude-apps-gateway-config#session). See [Identity provider setup](#identity-provider-setup) for the deprovisioning tradeoff. |
415415| A developer signs in, then every request from that session fails with a `431` error | The session token in every request's `Authorization` header lists the developer's IdP groups, so for a developer in many groups the headers can total more than the gateway accepts | See [Request headers too large after sign-in](#request-headers-too-large-after-sign-in) for which limit applies and what to change |
416416| Every Amazon Bedrock request returns 502; log shows `Could not load credentials from any providers` | On EC2, IMDSv2's default hop limit of 1 blocks the instance-metadata request from inside the container. Boot and `/readyz` pass anyway because the AWS SDK resolves instance credentials on the first request, not at client construction | Raise the hop limit with `aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2`, or set it in the launch template. The change applies to every container on the instance. Prefer ECS task roles where available, which read credentials from the ECS container-credentials endpoint and avoid the change entirely, or apply the change on a dedicated gateway instance to limit the exposure. |
417417| At peak load, responses are slow to start or appear to hang, or fail with a 502 `all upstreams failed` while the upstream is healthy | A replica has more requests open than it sends upstream at once, so the extra requests wait inside the gateway. On a `provider: anthropic` upstream, a request that waits longer than `timeouts.upstream_ttfb_ms` gives up on that upstream, which produces the 502 when no later upstream serves it. The log shows a warning that contains `client requests are open`. | Add replicas, or raise the limit on each replica. See [Concurrent upstream requests](#concurrent-upstream-requests). |
from line 424
424424| Sign-in completes at the IdP but the callback fails, with a CSP error in Chrome or "this sign-in link has expired" in Safari | The IdP returned the code via `response_mode=form_post`, which auto-submits it cross-origin via POST to `/oauth/callback`. Chrome blocks that under a strict CSP; Safari allows the submit but the callback reads only the query string. | Make sure your IdP honors `response_mode=query`, which the gateway requests explicitly so the callback is a plain redirect |
425425| Login works locally but fails behind an ALB | `public_url` still names the local or inner `http://` origin, so the IdP gets the wrong `redirect_uri` | Set `listen.public_url` to the external `https://` origin and register `<public_url>/oauth/callback` with the IdP |
426426| Developer sees the trust prompt repeatedly | TLS cert is rotating per replica or per request | Use a stable cert at the ingress, or terminate TLS once and run replicas over plain HTTP internally |
427| CLI `/login`: "Could not verify the gateway's TLS certificate" or `SELF_SIGNED_CERT_IN_CHAIN` | Gateway's TLS chain is signed by a private CA not in the CLI host's trust store | Claude Code reads the OS trust store by default on the native binary and on Node 22.15 or later; [`CLAUDE_CODE_CERT_STORE`](/docs/en/network-config#ca-certificate-store) controls this behavior. If the CA is installed in the OS trust store, ensure developers are on a current runtime. Otherwise set `NODE_EXTRA_CA_CERTS` to the CA certificate PEM before launching. The first-connect fingerprint prompt still applies. |
428| CLI `/login` completes the browser sign-in, then the session ends with `Cloud gateway sign-in was not completed` and a TLS certificate mismatch | On the first request after sign-in, the gateway presented a certificate that doesn't match the fingerprint Claude Code pinned, so Claude Code kept no gateway credential. The usual causes are replicas behind one address that serve different certificates, or something on the network path that intercepts TLS. | Serve one certificate for the hostname, for example by terminating TLS once at the ingress, then have the developer run `/login` again. If that certificate differs from the pinned one, Claude Code shows the [trust prompt](/docs/en/claude-apps-gateway#connect-developers) again with a warning that the certificate changed. |
429| CLI `/login` stops with `The gateway's TLS certificate changed during sign-in: it no longer matches the one you trusted` | A sign-in request reached a server whose certificate doesn't match the one the developer accepted when `/login` started: replicas behind one address serving different certificates, TLS interception on the path, or a certificate rotation while the sign-in was in progress. | Serve one certificate for the hostname, then have the developer start the sign-in again and review the new certificate at the [trust prompt](/docs/en/claude-apps-gateway#connect-developers). |
427| CLI `/login`: "Could not verify the gateway's TLS certificate" or `SELF_SIGNED_CERT_IN_CHAIN` | Gateway's TLS chain is signed by a private CA not in the CLI host's trust store | Claude Code reads the OS trust store by default on the native binary and on Node 22.15 or later; [`CLAUDE_CODE_CERT_STORE`](https://code.claude.com/docs/en/network-config#ca-certificate-store) controls this behavior. If the CA is installed in the OS trust store, ensure developers are on a current runtime. Otherwise set `NODE_EXTRA_CA_CERTS` to the CA certificate PEM before launching. The first-connect fingerprint prompt still applies. |
428| CLI `/login` completes the browser sign-in, then the session ends with `Cloud gateway sign-in was not completed` and a TLS certificate mismatch | On the first request after sign-in, the gateway presented a certificate that doesn't match the fingerprint Claude Code pinned, so Claude Code kept no gateway credential. The usual causes are replicas behind one address that serve different certificates, or something on the network path that intercepts TLS. | Serve one certificate for the hostname, for example by terminating TLS once at the ingress, then have the developer run `/login` again. If that certificate differs from the pinned one, Claude Code shows the [trust prompt](https://code.claude.com/docs/en/claude-apps-gateway#connect-developers) again with a warning that the certificate changed. |
429| CLI `/login` stops with `The gateway's TLS certificate changed during sign-in: it no longer matches the one you trusted` | A sign-in request reached a server whose certificate doesn't match the one the developer accepted when `/login` started: replicas behind one address serving different certificates, TLS interception on the path, or a certificate rotation while the sign-in was in progress. | Serve one certificate for the hostname, then have the developer start the sign-in again and review the new certificate at the [trust prompt](https://code.claude.com/docs/en/claude-apps-gateway#connect-developers). |
430430
431431The `Cloud gateway sign-in was not completed` message names the gateway hostname. When Claude Code has both the pinned fingerprint and the presented one, the message also shows the first 16 characters of each.
432432
from line 436
436436
437437A developer's requests can fail with a `431` error after sign-in when the developer belongs to many IdP groups.
438438
439The gateway answers `431` when a request's headers total more than 256 KiB, or more than [`limits.max_request_header_bytes`](/docs/en/claude-apps-gateway-config#http-tuning) if you set it. It writes no log line or audit event for these requests. Gateway versions before v2.1.284 answer `431` above 16 KiB.
439The gateway answers `431` when a request's headers total more than 256 KiB, or more than [`limits.max_request_header_bytes`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning) if you set it. It writes no log line or audit event for these requests. Gateway versions before v2.1.284 answer `431` above 16 KiB.
440440
441441Start with the first of these that applies to your gateway:
442442
from line 446
446446
447447When you trim the groups claim, keep the groups you named in these settings, which decide a developer's access, policy, and spend caps:
448448
449* **[`oidc.allowed_groups`](/docs/en/claude-apps-gateway-config#oidc)**: decides who can sign in
450* **[`admin.admin_groups`](/docs/en/claude-apps-gateway-config#admin)**: decides who can call the admin API with their gateway session
451* **`match.groups` in [`managed.policies`](/docs/en/claude-apps-gateway-config#managed)**: decides which policy applies to a developer
452* **`rbac_group` [spend caps](/docs/en/claude-apps-gateway-spend-limits.md)**: decide which group caps apply to a developer
449* **[`oidc.allowed_groups`](https://code.claude.com/docs/en/claude-apps-gateway-config#oidc)**: decides who can sign in
450* **[`admin.admin_groups`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin)**: decides who can call the admin API with their gateway session
451* **`match.groups` in [`managed.policies`](https://code.claude.com/docs/en/claude-apps-gateway-config#managed)**: decides which policy applies to a developer
452* **`rbac_group` [spend caps](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md)**: decide which group caps apply to a developer
453453
454454### Long thinking ends in proxy timeouts
455455
456456If your upstream is `provider: anthropic`, use [Long thinking on an Anthropic API upstream](#long-thinking-on-an-anthropic-api-upstream) instead: you raise `CLAUDE_STREAM_IDLE_TIMEOUT_MS` there too, but the times and errors differ.
457457
458If turns fail after long thinking and your proxy logs one request open for about 12.5 minutes, then a run of `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](/docs/en/env-vars) in a gateway policy. For example, with a 240-second idle timeout on the proxy, the run is 10 requests, each cut at 240 seconds.
458If turns fail after long thinking and your proxy logs one request open for about 12.5 minutes, then a run of `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](https://code.claude.com/docs/en/env-vars) in a gateway policy. For example, with a 240-second idle timeout on the proxy, the run is 10 requests, each cut at 240 seconds.
459459
460460* **The first request**: a stream that delivers its first response event, `message_start`, and then only pings while Claude thinks. With default settings, Claude Code ends that stream after about 12.5 minutes.
461* **The other 10**: the same request, sent [without streaming](/docs/en/errors.md#streaming-response-ended-before-any-complete-data-was-received) and then retried, 10 sends in all by default. They get no pings, so a slow reply hits the proxy's timeout.
461* **The other 10**: the same request, sent [without streaming](https://code.claude.com/docs/en/errors.md#streaming-response-ended-before-any-complete-data-was-received) and then retried, 10 sends in all by default. They get no pings, so a slow reply hits the proxy's timeout.
462462
463463You don't need a longer proxy timeout for this fix. If you raise only the proxy's timeout, requests without streaming still fail once a reply takes longer than Claude Code's own wait, 300 seconds by default.
464464
from line 470
470470Error streaming, falling back to non-streaming mode: Stream idle timeout - no chunks received
471471```
472472
473If your developers already set [`CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK`](/docs/en/env-vars) to `1`, you see no requests without streaming, and the turn ends with `API Error: Stream idle timeout - no chunks received`. The same fix applies.
473If your developers already set [`CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK`](https://code.claude.com/docs/en/env-vars) to `1`, you see no requests without streaming, and the turn ends with `API Error: Stream idle timeout - no chunks received`. The same fix applies.
474474
475475#### Pick a value
476476
from line 482
482482| `900000` | About 22.5 minutes |
483483| `1800000` | About 37.5 minutes |
484484
485If an upstream hangs while the gateway keeps sending pings, your developers also wait that long before Claude Code gives up on the stream. A connection that goes fully silent still ends after 5 to 6 minutes, because the [body idle timeout](/docs/en/network-config.md#streaming-idle-watchdogs) doesn't follow this variable.
485If an upstream hangs while the gateway keeps sending pings, your developers also wait that long before Claude Code gives up on the stream. A connection that goes fully silent still ends after 5 to 6 minutes, because the [body idle timeout](https://code.claude.com/docs/en/network-config.md#streaming-idle-watchdogs) doesn't follow this variable.
486486
487487#### Deliver the value in a policy
488488
489Add the `env` entry to each policy in `gateway.yaml` that already delivers Claude Code settings to the developers you want to cover. Put it under the `code`, `cli`, or `settings` key that policy already has. To try the value first, start with a policy that matches one group. See [`managed`](/docs/en/claude-apps-gateway-config#managed) for how policies match and inherit. This example adds the entry to a `match: {}` policy keyed `cli`:
489Add the `env` entry to each policy in `gateway.yaml` that already delivers Claude Code settings to the developers you want to cover. Put it under the `code`, `cli`, or `settings` key that policy already has. To try the value first, start with a policy that matches one group. See [`managed`](https://code.claude.com/docs/en/claude-apps-gateway-config#managed) for how policies match and inherit. This example adds the entry to a `match: {}` policy keyed `cli`:
490490
491491```yaml theme={null}
492492managed:
from line 497
497497 CLAUDE_STREAM_IDLE_TIMEOUT_MS: "1800000"
498498```
499499
500With the `cli` key, you cover terminal, IDE extension, and Agent SDK sessions. For Claude Desktop's Code tab, see [Choose `cli` or `code`](/docs/en/claude-apps-gateway-config#choose-cli-or-code).
500With the `cli` key, you cover terminal, IDE extension, and Agent SDK sessions. For Claude Desktop's Code tab, see [Choose `cli` or `code`](https://code.claude.com/docs/en/claude-apps-gateway-config#choose-cli-or-code).
501501
502502Restart the gateway so that it reads the edited file. Then have developers restart Claude Code to get `CLAUDE_STREAM_IDLE_TIMEOUT_MS`.
503503
504504### Long thinking on an Anthropic API upstream
505505
506If `provider: anthropic` is the model's only upstream and your proxy logs one request open for about 20 minutes, then `502` or `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](/docs/en/env-vars) in a gateway policy.
506If `provider: anthropic` is the model's only upstream and your proxy logs one request open for about 20 minutes, then `502` or `504` errors, raise [`CLAUDE_STREAM_IDLE_TIMEOUT_MS`](https://code.claude.com/docs/en/env-vars) in a gateway policy.
507507
508508* **The long request**: a stream that delivers `message_start` and then only pings while Claude thinks. Claude Code ends it after about 20 minutes with default settings, and later once you raise the variable.
509* **The errors**: requests that Claude Code then sends [without streaming](/docs/en/errors.md#streaming-response-ended-before-any-complete-data-was-received). Each one fails with a `502` from the gateway, or with your proxy's `504` if the proxy's timeout is shorter than the gateway's wait. That wait is [`timeouts.upstream_ttfb_ms`](/docs/en/claude-apps-gateway-config#http-tuning), which you don't need to raise for this fix.
509* **The errors**: requests that Claude Code then sends [without streaming](https://code.claude.com/docs/en/errors.md#streaming-response-ended-before-any-complete-data-was-received). Each one fails with a `502` from the gateway, or with your proxy's `504` if the proxy's timeout is shorter than the gateway's wait. That wait is [`timeouts.upstream_ttfb_ms`](https://code.claude.com/docs/en/claude-apps-gateway-config#http-tuning), which you don't need to raise for this fix.
510510
511511To confirm the cause, see [Confirm the cause](#confirm-the-cause).
512512
from line 514
514514
515515## Related
516516
517* [Claude apps gateway overview](/docs/en/claude-apps-gateway): quickstart and developer connection
518* [Configuration reference](/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option
517* [Claude apps gateway overview](https://code.claude.com/docs/en/claude-apps-gateway): quickstart and developer connection
518* [Configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option
519519
claude-apps-gateway-on-aws Changed · +40 / -40 lines
from line 4
44
55> [!NOTE]
66>
7> This page walks through one way to run Claude apps gateway on AWS. The configuration is a working example for customer-managed infrastructure rather than a supported production deployment; use it to see how the pieces fit together before adapting it to your own environment. For the platform-agnostic requirements, see the [deployment guide](/docs/en/claude-apps-gateway-deploy.md).
7> This page walks through one way to run Claude apps gateway on AWS. The configuration is a working example for customer-managed infrastructure rather than a supported production deployment; use it to see how the pieces fit together before adapting it to your own environment. For the platform-agnostic requirements, see the [deployment guide](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md).
88
9This example provisions Claude apps gateway on AWS with Amazon Bedrock as the model upstream, using either [Amazon ECS](https://aws.amazon.com/ecs/) on [AWS Fargate](https://aws.amazon.com/fargate/) or [Amazon EKS](https://aws.amazon.com/eks/) for compute. [Okta](https://www.okta.com/) is the example identity provider (IdP), but any OpenID Connect (OIDC) compliant IdP works; see [Identity provider setup](/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup) for per-IdP details.
9This example provisions Claude apps gateway on AWS with Amazon Bedrock as the model upstream, using either [Amazon ECS](https://aws.amazon.com/ecs/) on [AWS Fargate](https://aws.amazon.com/fargate/) or [Amazon EKS](https://aws.amazon.com/eks/) for compute. [Okta](https://www.okta.com/) is the example identity provider (IdP), but any OpenID Connect (OIDC) compliant IdP works; see [Identity provider setup](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup) for per-IdP details.
1010
1111> [!NOTE]
1212>
13> Bedrock isn't the only Claude upstream on AWS. The gateway also supports Claude Platform on AWS, the Anthropic-operated Claude API with AWS authentication and AWS Marketplace billing, in place of Bedrock or alongside it. Its upstream entry, credentials, and IAM permissions differ from this page's Bedrock-scoped ones; the [Claude Platform on AWS upstream reference](/docs/en/claude-apps-gateway-config.md#claude-platform-on-aws) covers what changes, and the rest of this page applies unchanged.
13> Bedrock isn't the only Claude upstream on AWS. The gateway also supports Claude Platform on AWS, the Anthropic-operated Claude API with AWS authentication and AWS Marketplace billing, in place of Bedrock or alongside it. Its upstream entry, credentials, and IAM permissions differ from this page's Bedrock-scoped ones; the [Claude Platform on AWS upstream reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md#claude-platform-on-aws) covers what changes, and the rest of this page applies unchanged.
1414
1515## Architecture
1616
from line 22
2222
2323* **Amazon ECS on AWS Fargate** service or **Amazon EKS** Deployment running the gateway container
2424* **Amazon ECR** repository for the gateway image
25* **Amazon RDS for PostgreSQL** instance in private subnets, not publicly accessible, for the gateway's [store](/docs/en/claude-apps-gateway-config.md#store)
25* **Amazon RDS for PostgreSQL** instance in private subnets, not publicly accessible, for the gateway's [store](https://code.claude.com/docs/en/claude-apps-gateway-config.md#store)
2626* **AWS Secrets Manager** secrets for the JWT signing key, the OIDC client secret, and the Postgres URL
2727* **IAM role** with `bedrock:InvokeModel`, `bedrock:InvokeModelWithResponseStream`, and `bedrock:CountTokens`, attached as the ECS task role or bound via IAM Roles for Service Accounts (IRSA) on EKS
2828* **Internal Application Load Balancer** for HTTPS
from line 34
3434* An AWS account with permission to create the [resources above](#architecture)
3535* The [AWS CLI v2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) installed and [authenticated](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html), and [Docker](https://docs.docker.com/get-started/get-docker/) installed locally
3636* A [VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) with at least two [private subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in different Availability Zones, with outbound internet access through a [NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html); the internal load balancer needs subnets in two AZs, and the gateway needs egress to Bedrock and your IdP
37* An Okta OIDC web application with redirect URI `https://<gateway-host>/oauth/callback`; see [Identity provider setup](/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup)
37* An Okta OIDC web application with redirect URI `https://<gateway-host>/oauth/callback`; see [Identity provider setup](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup)
3838* A TLS hostname for the gateway, typically an internal DNS name in a [Route 53 private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) pointing at the load balancer, with an [ACM certificate](https://docs.aws.amazon.com/acm/latest/userguide/gs.html) for that name, imported or issued by [AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)
3939
4040### Set your environment variables
from line 41
4141
4242Every command on this page reads four values from your shell: `AWS_REGION`, `ACCOUNT_ID`, `VPC_ID`, and `PRIVATE_SUBNETS`.
4343
44Pick a US region where Bedrock serves the Claude models you need. The walkthrough relies on the gateway's built-in model catalog, which resolves to `us.anthropic.*` inference profiles, and the IAM policy grants those ARNs. In a non-US region, add a [`models:` block](/docs/en/claude-apps-gateway-config#models) with that geo's inference-profile IDs and change the IAM policy's ARN prefix to match.
44Pick a US region where Bedrock serves the Claude models you need. The walkthrough relies on the gateway's built-in model catalog, which resolves to `us.anthropic.*` inference profiles, and the IAM policy grants those ARNs. In a non-US region, add a [`models:` block](https://code.claude.com/docs/en/claude-apps-gateway-config#models) with that geo's inference-profile IDs and change the IAM policy's ARN prefix to match.
4545
4646If you don't have the VPC ID at hand, list your VPCs with `aws ec2 describe-vpcs`, then list that VPC's subnets to find two private ones in different Availability Zones:
4747
from line 91
9191
9292**2. Create the IAM roles and submit the use case form**
9393
94The gateway runs with a dedicated task role whose only permission is invoking Claude models on Bedrock. Per the [Bedrock upstream reference](/docs/en/claude-apps-gateway-config.md#amazon-bedrock), the policy must cover both the cross-region inference-profile ARNs and the underlying foundation-model ARNs:
94The gateway runs with a dedicated task role whose only permission is invoking Claude models on Bedrock. Per the [Bedrock upstream reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md#amazon-bedrock), the policy must cover both the cross-region inference-profile ARNs and the underlying foundation-model ARNs:
9595
9696```bash theme={null}
9797cat > bedrock-invoke.json <<EOF
from line 151
151151
152152The policy names one ARN per secret rather than a bare `gateway-*` wildcard, which in a shared account would also match unrelated secrets; the trailing `-??????` matches exactly the random six-character suffix Secrets Manager appends to every secret's ARN. A trailing `-*` would be a plain prefix glob and would also match longer names such as `gateway-postgres-url-prod`.
153153
154The IAM policy grants the gateway permission to call Bedrock, and Bedrock enables model access by default in commercial regions. The remaining account-level gate is Anthropic's one-time use case form: if no one in your account has submitted it, open the [Amazon Bedrock console](https://console.aws.amazon.com/bedrock/), select an Anthropic model from the Model catalog, and complete the form. Access is granted immediately after submission; see [Claude Code on Amazon Bedrock](/docs/en/amazon-bedrock.md#1-submit-use-case-details) for the AWS Organizations form and the IAM permissions the submitter needs.
154The IAM policy grants the gateway permission to call Bedrock, and Bedrock enables model access by default in commercial regions. The remaining account-level gate is Anthropic's one-time use case form: if no one in your account has submitted it, open the [Amazon Bedrock console](https://console.aws.amazon.com/bedrock/), select an Anthropic model from the Model catalog, and complete the form. Access is granted immediately after submission; see [Claude Code on Amazon Bedrock](https://code.claude.com/docs/en/amazon-bedrock.md#1-submit-use-case-details) for the AWS Organizations form and the IAM permissions the submitter needs.
155155
156156The EKS track reuses both policy documents on an IRSA role instead of the two ECS roles; see the deploy step.
157157
from line 206
206206
207207**4. Write gateway.yaml**
208208
209The `upstreams` block points at Bedrock with `auth: {}`, so the gateway authenticates via the AWS default credential chain from the task role on ECS or the IRSA role on EKS. See the [configuration reference](/docs/en/claude-apps-gateway-config.md) for every field.
209The `upstreams` block points at Bedrock with `auth: {}`, so the gateway authenticates via the AWS default credential chain from the task role on ECS or the IRSA role on EKS. See the [configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md) for every field.
210210
211211Two `listen` fields describe what fronts the gateway:
212212
213* `public_url`: the external `https://` origin, required for any non-loopback bind; see the [`listen` reference](/docs/en/claude-apps-gateway-config#listen). The gateway builds the IdP `redirect_uri` and its discovery document only from this value, never from `X-Forwarded-*` headers.
213* `public_url`: the external `https://` origin, required for any non-loopback bind; see the [`listen` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#listen). The gateway builds the IdP `redirect_uri` and its discovery document only from this value, never from `X-Forwarded-*` headers.
214214* `trusted_proxies`: the front end's source ranges. The gateway honors `X-Forwarded-For` only when the TCP peer is in this list, then walks the chain past trusted hops, so per-IP sign-in rate limits and audit events record developer IPs instead of the load balancer's.
215215
216216On both tracks the front end is an internal ALB, whether created directly or by the AWS Load Balancer Controller, and an ALB's nodes take addresses from the subnets it is attached to, so set `trusted_proxies` to those subnets' CIDRs. This trusts every host in those subnets as a proxy. Keep the ALB's ingress source, your corporate CIDR, from overlapping them, and don't share the subnets with untrusted workloads that could spoof client IPs via `X-Forwarded-For`.
from line 256
256256
257257> [!NOTE]
258258>
259> Only the `oidc` block is Okta-specific. To use Microsoft Entra ID instead, set `issuer` to `https://login.microsoftonline.com/<tenant-id>/v2.0`, drop `userinfo_fallback` and the `groups` scope, and note that Entra emits group Object IDs rather than names, so [`managed.policies`](/docs/en/claude-apps-gateway-config#managed) must match on the GUIDs, or on App Roles with `oidc.groups_claim: roles`. See [Identity provider setup](/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup).
259> Only the `oidc` block is Okta-specific. To use Microsoft Entra ID instead, set `issuer` to `https://login.microsoftonline.com/<tenant-id>/v2.0`, drop `userinfo_fallback` and the `groups` scope, and note that Entra emits group Object IDs rather than names, so [`managed.policies`](https://code.claude.com/docs/en/claude-apps-gateway-config#managed) must match on the GUIDs, or on App Roles with `oidc.groups_claim: roles`. See [Identity provider setup](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup).
260260
261261**5. Store secrets in AWS Secrets Manager**
262262
from line 277
277277>
278278> Literal `--secret-string` arguments are visible in the process table and in audit/EDR logs while each command runs. On a shared or monitored host, put the value in a `0600` file and pass `--secret-string file://<path>` instead. The bundle's `setup.sh` keeps secret values off process argv the same way, passing `0600` temporary files to `--cli-input-json`.
279279
280Unlike the secrets, `gateway.yaml` itself contains no secret values, because every credential resolves at boot through [`${VAR}` or `${file:...}` expansion](/docs/en/claude-apps-gateway-config#secret-expansion). How everything reaches the container differs by track:
280Unlike the secrets, `gateway.yaml` itself contains no secret values, because every credential resolves at boot through [`${VAR}` or `${file:...}` expansion](https://code.claude.com/docs/en/claude-apps-gateway-config#secret-expansion). How everything reaches the container differs by track:
281281
282282* On ECS, the next step's build copies `gateway.yaml` into the image at `/etc/claude/gateway.yaml`, and the task definition injects the three secrets as environment variables via its `secrets` field, so the YAML references `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}`, and `${GATEWAY_POSTGRES_URL}`.
283283* On EKS, mount `gateway.yaml` from a ConfigMap and the secrets as files at `/secrets`, referenced as `${file:/secrets/...}`. Source the Kubernetes Secrets from Secrets Manager with External Secrets Operator or the Secrets Store CSI driver's AWS provider, or create them directly with `kubectl`.
from line 284
284284
285285**6. Build and push the image to Amazon ECR**
286286
287Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy.md#container-image), placing the `linux-x64` glibc binary at `./claude` in the build context. Write your own Dockerfile per those requirements or start from the bundle's [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile), which copies the filled-in `gateway.yaml` from the previous steps into the image at `/etc/claude/gateway.yaml`. On ECS that embedded copy is how the configuration reaches the container, which is why the build comes after the file is written. The EKS track instead mounts `gateway.yaml` from a ConfigMap at deploy, so the embedded copy is unused there.
287Build the image per the [container image requirements](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#container-image), placing the `linux-x64` glibc binary at `./claude` in the build context. Write your own Dockerfile per those requirements or start from the bundle's [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile), which copies the filled-in `gateway.yaml` from the previous steps into the image at `/etc/claude/gateway.yaml`. On ECS that embedded copy is how the configuration reaches the container, which is why the build comes after the file is written. The EKS track instead mounts `gateway.yaml` from a ConfigMap at deploy, so the embedded copy is unused there.
288288
289289The image also carries the AWS RDS certificate bundle as the trust anchor for the connection string's `sslmode=verify-full`, so download it into the build context first. AWS rotates the bundle (new regional CAs get appended), so download it per build rather than pinning a checksum or committing it:
290290
from line 415
415415
416416The 60-second grace period gives a cold task time to pull the image, connect to the store, and answer its first health check before ECS starts counting failures against the deployment.
417417
418The target group's health check on `GET /readyz` verifies the store is reachable, so a task that can't reach Postgres never enters rotation. To keep tasks passing the check through a short database outage such as an RDS failover, set `store.readiness_grace_seconds` as described in [Outage behavior](/docs/en/claude-apps-gateway-deploy.md#outage-behavior), which also covers the `/healthz` alternative.
418The target group's health check on `GET /readyz` verifies the store is reachable, so a task that can't reach Postgres never enters rotation. To keep tasks passing the check through a short database outage such as an RDS failover, set `store.readiness_grace_seconds` as described in [Outage behavior](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#outage-behavior), which also covers the `/healthz` alternative.
419419
420The tasks run in private subnets with no public IP, so all egress (to Bedrock, your IdP, Secrets Manager, ECR, and CloudWatch Logs) goes through the NAT gateway. To keep Bedrock traffic off the public path, create a `bedrock-runtime` interface VPC endpoint and point the upstream's `base_url` at it, as shown in the [Bedrock upstream reference](/docs/en/claude-apps-gateway-config.md#amazon-bedrock); the IdP still needs internet egress.
420The tasks run in private subnets with no public IP, so all egress (to Bedrock, your IdP, Secrets Manager, ECR, and CloudWatch Logs) goes through the NAT gateway. To keep Bedrock traffic off the public path, create a `bedrock-runtime` interface VPC endpoint and point the upstream's `base_url` at it, as shown in the [Bedrock upstream reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md#amazon-bedrock); the IdP still needs internet egress.
421421
422422Finish by giving developers a privately resolvable hostname: in a Route 53 private hosted zone, alias the gateway's internal DNS name to the ALB, and set `listen.public_url` to that hostname. The ALB's own `*.elb.amazonaws.com` name resolves to private addresses on an internal ALB, but it can't carry your ACM certificate, so use your own name.
423423
from line 445
445445
446446The secrets policy is needed only when the pods read Secrets Manager themselves, as the Secrets Store CSI driver's AWS provider does using the mounting pod's service account; drop it if you create the Kubernetes Secrets another way. The provider needs both of the policy's actions: it calls `DescribeSecret` when it reconciles rotated secrets, so a `GetSecretValue`-only grant mounts on the first deploy but stops picking up rotations.
447447
448Deploy the gateway as a standard Deployment plus a Service and an Ingress, as described in [Kubernetes deployment](/docs/en/claude-apps-gateway-deploy.md#kubernetes), with:
448Deploy the gateway as a standard Deployment plus a Service and an Ingress, as described in [Kubernetes deployment](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#kubernetes), with:
449449
450450* `serviceAccountName: gateway`
451451* `gateway.yaml` mounted from a ConfigMap and the secrets mounted at `/secrets`
from line 454
454454For the front end, an Ingress managed by the AWS Load Balancer Controller provisions the internal ALB. Annotate it with:
455455
456456* `alb.ingress.kubernetes.io/scheme: internal` and `alb.ingress.kubernetes.io/target-type: ip`
457* `alb.ingress.kubernetes.io/ip-address-type: ipv4`, so no public-range AAAA records are published for the `/login` [private-network check](/docs/en/claude-apps-gateway#prerequisites) to reject
457* `alb.ingress.kubernetes.io/ip-address-type: ipv4`, so no public-range AAAA records are published for the `/login` [private-network check](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) to reject
458458* `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, so the controller-managed frontend security group admits only your corporate network in place of its `0.0.0.0/0` default
459459* `alb.ingress.kubernetes.io/certificate-arn` with the ACM certificate
460460* `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, so the listener doesn't fall back to the legacy default policy that accepts TLS 1.0 and 1.1
from line 464
464464
465465**8. Push the gateway URL to developer machines**
466466
467The gateway is now running, but developers can't reach it from `/login` until the gateway URL is on their machines. Deploy the full [managed settings snippet](/docs/en/claude-apps-gateway#set-the-gateway-url), with `forceLoginMethod`, `forceLoginGatewayUrl`, and the `parentSettingsBehavior: "merge"` opt-in, to each device via MDM. There is no gateway option in the login picker for a developer to select manually.
467The gateway is now running, but developers can't reach it from `/login` until the gateway URL is on their machines. Deploy the full [managed settings snippet](https://code.claude.com/docs/en/claude-apps-gateway#set-the-gateway-url), with `forceLoginMethod`, `forceLoginGatewayUrl`, and the `parentSettingsBehavior: "merge"` opt-in, to each device via MDM. There is no gateway option in the login picker for a developer to select manually.
468468
469469## Terraform reference
470470
from line 479
479479
480480## Troubleshooting
481481
482For gateway boot and login errors, see the platform-agnostic [troubleshooting table](/docs/en/claude-apps-gateway-deploy.md#troubleshooting). The entries below are specific to AWS.
482For gateway boot and login errors, see the platform-agnostic [troubleshooting table](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#troubleshooting). The entries below are specific to AWS.
483483
484484| Symptom | Cause | Fix |
485485| - | - | - |
486| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | The gateway name resolves to at least one public address. A dual-stack internal ALB publishes public-range AAAA records, and the [private-network check](/docs/en/claude-apps-gateway#prerequisites) requires every resolved address to be private | Create the ALB with `--ip-address-type ipv4`, or serve a separate internal-only DNS name with no public AAAA record |
487| Every Bedrock request returns 502; log shows `Could not load credentials from any providers` | The task runs on the ECS EC2 launch type without a task role, or the pod runs on an EKS node without IRSA, so credentials come from instance metadata, which IMDSv2's default hop limit of 1 stops inside a container. Neither track on this page is affected: Fargate task roles and IRSA don't use instance metadata | Prefer task roles and IRSA. Where instance credentials are unavoidable, raise the hop limit with `aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2`; the [platform-agnostic table](/docs/en/claude-apps-gateway-deploy.md#troubleshooting) covers the tradeoffs |
486| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | The gateway name resolves to at least one public address. A dual-stack internal ALB publishes public-range AAAA records, and the [private-network check](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) requires every resolved address to be private | Create the ALB with `--ip-address-type ipv4`, or serve a separate internal-only DNS name with no public AAAA record |
487| Every Bedrock request returns 502; log shows `Could not load credentials from any providers` | The task runs on the ECS EC2 launch type without a task role, or the pod runs on an EKS node without IRSA, so credentials come from instance metadata, which IMDSv2's default hop limit of 1 stops inside a container. Neither track on this page is affected: Fargate task roles and IRSA don't use instance metadata | Prefer task roles and IRSA. Where instance credentials are unavoidable, raise the hop limit with `aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2`; the [platform-agnostic table](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#troubleshooting) covers the tradeoffs |
488488| Bedrock requests return `403 AccessDeniedException` | The account hasn't submitted Anthropic's one-time use case form, the automatic AWS Marketplace subscription that starts on the account's first invoke hasn't finished yet, or the task role's policy is missing the inference-profile or foundation-model ARNs | Submit the use case form from the Bedrock console's Model catalog; if it was just submitted or this is the account's first invoke, retry after a few minutes. Grant `bedrock:InvokeModel` and `bedrock:InvokeModelWithResponseStream` on both ARN families. |
489489| Bedrock returns a `ValidationException` saying on-demand throughput isn't supported | A custom `models:` entry maps to a bare foundation-model ID that the region serves only through inference profiles | Map the model to its cross-region inference profile ID (`us.anthropic.*`) instead; the built-in catalog already does this |
490490| ECS task stops with `ResourceInitializationError` before the gateway logs anything | The execution role can't read the Secrets Manager secrets, or the private subnets have no path to Secrets Manager or ECR | Grant `secretsmanager:GetSecretValue` on the three `gateway-` secrets' ARNs to the execution role, and provide egress via the NAT gateway, or, without one, interface endpoints for Secrets Manager, ECR, and CloudWatch Logs, which the `awslogs` driver needs at the same stage, plus an S3 gateway endpoint |
from line 494
494494
495495## Telemetry
496496
497The gateway gives you per-developer usage metrics without any per-machine OTEL configuration. Claude Code emits OpenTelemetry (OTLP) metrics, logs, and opt-in traces; [Monitoring usage](/docs/en/monitoring-usage.md) covers everything the CLI reports. In sessions signed in through `/login`, the CLI [stamps each export](/docs/en/monitoring-usage.md#standard-attributes) with the authenticated IdP identity attributes `user.id`, `user.email`, and `user.groups`, so usage rolls up per developer.
497The gateway gives you per-developer usage metrics without any per-machine OTEL configuration. Claude Code emits OpenTelemetry (OTLP) metrics, logs, and opt-in traces; [Monitoring usage](https://code.claude.com/docs/en/monitoring-usage.md) covers everything the CLI reports. In sessions signed in through `/login`, the CLI [stamps each export](https://code.claude.com/docs/en/monitoring-usage.md#standard-attributes) with the authenticated IdP identity attributes `user.id`, `user.email`, and `user.groups`, so usage rolls up per developer.
498498
499The gateway itself is an authenticated OTLP relay. Set [`telemetry.forward_to`](/docs/en/claude-apps-gateway-config#telemetry) together with `listen.public_url`, and it pushes the OTEL exporter settings to every connected client and forwards their OTLP traffic verbatim to each destination you list. Each destination opts into metrics, logs, and traces independently, and the default is metrics only; see the [`telemetry` reference](/docs/en/claude-apps-gateway-config#telemetry) for the per-signal fields and their sensitivity tradeoffs. The gateway doesn't buffer, aggregate, or store telemetry, so where the data lands is entirely the collector's exporter configuration.
499The gateway itself is an authenticated OTLP relay. Set [`telemetry.forward_to`](https://code.claude.com/docs/en/claude-apps-gateway-config#telemetry) together with `listen.public_url`, and it pushes the OTEL exporter settings to every connected client and forwards their OTLP traffic verbatim to each destination you list. Each destination opts into metrics, logs, and traces independently, and the default is metrics only; see the [`telemetry` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#telemetry) for the per-signal fields and their sensitivity tradeoffs. The gateway doesn't buffer, aggregate, or store telemetry, so where the data lands is entirely the collector's exporter configuration.
500500
501Client telemetry is off by default; configuring `telemetry.forward_to` is what turns it on for connected developers, and each interactive client shows a security approval dialog for the pushed settings, as described in the [configuration reference](/docs/en/claude-apps-gateway-config.md#telemetry). On AWS, each signal maps to a destination as follows.
501Client telemetry is off by default; configuring `telemetry.forward_to` is what turns it on for connected developers, and each interactive client shows a security approval dialog for the pushed settings, as described in the [configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md#telemetry). On AWS, each signal maps to a destination as follows.
502502
503503### Client metrics, logs, and traces
504504
505505Point `telemetry.forward_to` at an OpenTelemetry collector, such as the [AWS Distro for OpenTelemetry (ADOT) collector](https://aws-otel.github.io/), and export from there to Amazon CloudWatch, Amazon Managed Service for Prometheus, or any OTLP backend.
506506
507Run the collector as its own internal service reachable over `https://`; the [`telemetry` reference](/docs/en/claude-apps-gateway-config#telemetry) covers the loopback exception and `CLAUDE_GATEWAY_ALLOW_LOOPBACK`.
507Run the collector as its own internal service reachable over `https://`; the [`telemetry` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#telemetry) covers the loopback exception and `CLAUDE_GATEWAY_ALLOW_LOOPBACK`.
508508
509509### Gateway logs
510510
from line 516
516516
517517### Spend
518518
519Telemetry shows usage after the fact; [spend limits](/docs/en/claude-apps-gateway-spend-limits.md) are the gateway's live per-developer view and enforcement.
519Telemetry shows usage after the fact; [spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md) are the gateway's live per-developer view and enforcement.
520520
521521## Cost attribution
522522
from line 524
524524
525525### Per developer with `assume_role`
526526
527Create a second IAM role that holds the Bedrock permissions and trusts the gateway's principal, grant that principal `sts:AssumeRole` on it, and set [`assume_role`](/docs/en/claude-apps-gateway-config#per-developer-aws-cost-attribution) with `session_name: email` on the Bedrock upstream. The gateway then assumes that role once per developer per hour with the session name set to their email and signs their requests with the result. Requires a gateway running Claude Code v2.1.281 or later. The role can also be in another AWS account: see [Bedrock in another AWS account](/docs/en/claude-apps-gateway-config.md#bedrock-in-another-aws-account). In Terraform, next to the task role in the [Terraform bundle](#terraform-reference):
527Create a second IAM role that holds the Bedrock permissions and trusts the gateway's principal, grant that principal `sts:AssumeRole` on it, and set [`assume_role`](https://code.claude.com/docs/en/claude-apps-gateway-config#per-developer-aws-cost-attribution) with `session_name: email` on the Bedrock upstream. The gateway then assumes that role once per developer per hour with the session name set to their email and signs their requests with the result. Requires a gateway running Claude Code v2.1.281 or later. The role can also be in another AWS account: see [Bedrock in another AWS account](https://code.claude.com/docs/en/claude-apps-gateway-config.md#bedrock-in-another-aws-account). In Terraform, next to the task role in the [Terraform bundle](#terraform-reference):
528528
529529```hcl theme={null}
530530resource "aws_iam_role" "bedrock_user" {
from line 555
555555
556556### Per team with application inference profiles
557557
558This route uses only the [`models`](/docs/en/claude-apps-gateway-config#models) and [`managed`](/docs/en/claude-apps-gateway-config#managed) sections. Create one Bedrock [application inference profile](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-create.html) per team and model, tag each profile with the team, and activate that tag as a cost allocation tag. Then give each team its own model id in `gateway.yaml` and pin each IdP group to its team's ids:
558This route uses only the [`models`](https://code.claude.com/docs/en/claude-apps-gateway-config#models) and [`managed`](https://code.claude.com/docs/en/claude-apps-gateway-config#managed) sections. Create one Bedrock [application inference profile](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-create.html) per team and model, tag each profile with the team, and activate that tag as a cost allocation tag. Then give each team its own model id in `gateway.yaml` and pin each IdP group to its team's ids:
559559
560560```yaml theme={null}
561561models:
from line 585
585585* The config grows with teams times models
586586* The role that signs this upstream's Bedrock requests must also be allowed to invoke the `application-inference-profile/*` ARNs. That role is the gateway's principal, or with `assume_role` the role it assumes.
587587
588See [How requests are priced](/docs/en/claude-apps-gateway-spend-limits.md#how-requests-are-priced) for how the gateway's own spend meter prices these ids.
588See [How requests are priced](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md#how-requests-are-priced) for how the gateway's own spend meter prices these ids.
589589
590590#### Let a developer choose which team to bill
591591
from line 593
593593
594594**1. Add a group for the pair**
595595
596In your IdP, add the developer to a new group, such as `team-platform-and-data`. If they're already signed in, have them run `/login` again, or wait for the next [silent refresh](/docs/en/claude-apps-gateway-config.md#managed), so the gateway sees the new group.
596In your IdP, add the developer to a new group, such as `team-platform-and-data`. If they're already signed in, have them run `/login` again, or wait for the next [silent refresh](https://code.claude.com/docs/en/claude-apps-gateway-config.md#managed), so the gateway sees the new group.
597597
598598**2. List its policy first**
599599
from line 616
616616
617617Have the developer pass the id of the team the work is for, such as `claude --model data-claude-opus-4-8`.
618618
619The gateway applies the [first policy that matches](/docs/en/claude-apps-gateway-config.md#managed), so a developer in only the two team groups gets the `team-platform` policy. Their sessions on the data team's id fail with `is not in your role's availableModels allowlist`, naming Claude Code's default model and not the id they typed. If you list both team groups in one policy's `groups` instead, everyone in either team can bill either team's profile.
619The gateway applies the [first policy that matches](https://code.claude.com/docs/en/claude-apps-gateway-config.md#managed), so a developer in only the two team groups gets the `team-platform` policy. Their sessions on the data team's id fail with `is not in your role's availableModels allowlist`, naming Claude Code's default model and not the id they typed. If you list both team groups in one policy's `groups` instead, everyone in either team can bill either team's profile.
620620
621In the gateway's own [spend limits](/docs/en/claude-apps-gateway-spend-limits.md#set-a-cap), the developer has one total and one cap per period, by default the lowest of their groups' caps, whichever id a session uses. To keep one team's lower cap from stopping work for the other, set a per-user cap for the developer.
621In the gateway's own [spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md#set-a-cap), the developer has one total and one cap per period, by default the lowest of their groups' caps, whichever id a session uses. To keep one team's lower cap from stopping work for the other, set a per-user cap for the developer.
622622
623623## Next steps
624624
625* [Configuration reference](/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option, including `managed.policies` and `telemetry`
626* [Deployment and operations](/docs/en/claude-apps-gateway-deploy.md): IdP setup, health checks, JWT secret rotation, upgrades, and the security model
627* [Claude apps gateway overview](/docs/en/claude-apps-gateway): quickstart and connecting developers
625* [Configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option, including `managed.policies` and `telemetry`
626* [Deployment and operations](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md): IdP setup, health checks, JWT secret rotation, upgrades, and the security model
627* [Claude apps gateway overview](https://code.claude.com/docs/en/claude-apps-gateway): quickstart and connecting developers
628628* [AWS samples for Claude apps gateway](https://github.com/aws-samples/anthropic-on-aws/tree/main/claude-apps-gateway): AWS-maintained deployment samples covering a range of customer environments
629629
claude-apps-gateway-on-gcp Changed · +19 / -19 lines
from line 4
44
55> [!NOTE]
66>
7> This page walks through one way to run Claude apps gateway on Google Cloud. The configuration is a working example for customer-managed infrastructure rather than a supported production deployment; use it to see how the pieces fit together before adapting it to your own environment. For the platform-agnostic requirements, see the [deployment guide](/docs/en/claude-apps-gateway-deploy.md).
7> This page walks through one way to run Claude apps gateway on Google Cloud. The configuration is a working example for customer-managed infrastructure rather than a supported production deployment; use it to see how the pieces fit together before adapting it to your own environment. For the platform-agnostic requirements, see the [deployment guide](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md).
88
9This example provisions Claude apps gateway on Google Cloud with Google Cloud's Agent Platform as the model upstream, using either Cloud Run or GKE for compute. Google Workspace is the example identity provider (IdP), but any OpenID Connect (OIDC) compliant IdP works; only the `oidc` block changes. See [Identity provider setup](/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup) for per-IdP details.
9This example provisions Claude apps gateway on Google Cloud with Google Cloud's Agent Platform as the model upstream, using either Cloud Run or GKE for compute. Google Workspace is the example identity provider (IdP), but any OpenID Connect (OIDC) compliant IdP works; only the `oidc` block changes. See [Identity provider setup](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup) for per-IdP details.
1010
1111## What you'll build
1212
from line 16
1616
1717* **Cloud Run** service or **GKE** Deployment running the gateway container
1818* **Artifact Registry** repository for the gateway image
19* **Cloud SQL for PostgreSQL** instance, private IP only, for the gateway's [store](/docs/en/claude-apps-gateway-config.md#store)
19* **Cloud SQL for PostgreSQL** instance, private IP only, for the gateway's [store](https://code.claude.com/docs/en/claude-apps-gateway-config.md#store)
2020* **Secret Manager** secrets for `gateway.yaml`, the JWT signing key, the OIDC client secret, and the Postgres URL
2121* **Service account** with `roles/aiplatform.user`, attached directly on Cloud Run or bound via Workload Identity on GKE
2222* **HTTPS front end** that you provide: an internal Application Load Balancer in front of Cloud Run, which this walkthrough configures the gateway for but doesn't create, or an internal **GKE Ingress** of class `gce-internal` on GKE
from line 27
2727* The `gcloud` CLI, authenticated with `gcloud auth login`, and Docker installed locally
2828* For the GKE track: `kubectl`, and a GKE cluster on the VPC created in the walkthrough below
2929* Access to the Claude models you need in Model Garden, in a region that publishes them
30* A Google Workspace OAuth 2.0 web-application client with redirect URI `https://<gateway-host>/oauth/callback`; see [Identity provider setup](/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup)
30* A Google Workspace OAuth 2.0 web-application client with redirect URI `https://<gateway-host>/oauth/callback`; see [Identity provider setup](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#identity-provider-setup)
3131* A TLS hostname for the gateway, typically an internal DNS name pointing at the load balancer
3232
3333Set the project and region once:
from line 82
8282
8383**3. Build and push the image to Artifact Registry**
8484
85Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy.md#container-image), using the `linux-x64` glibc binary, and push it:
85Build the image per the [container image requirements](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#container-image), using the `linux-x64` glibc binary, and push it:
8686
8787```bash theme={null}
8888gcloud artifacts repositories create claude-gateway \
from line 129
129129
130130**5. Write gateway.yaml**
131131
132The `upstreams` block points at Google Cloud's Agent Platform with `auth: {}`, so the gateway authenticates via Application Default Credentials from the runtime service account. See the [configuration reference](/docs/en/claude-apps-gateway-config.md) for every field.
132The `upstreams` block points at Google Cloud's Agent Platform with `auth: {}`, so the gateway authenticates via Application Default Credentials from the runtime service account. See the [configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md) for every field.
133133
134134Two `listen` fields describe what fronts the gateway:
135135
136* `public_url`: the external `https://` origin, required for any non-loopback bind; see the [`listen` reference](/docs/en/claude-apps-gateway-config#listen). The gateway builds the IdP `redirect_uri` and its discovery document only from this value, never from `X-Forwarded-*` headers.
136* `public_url`: the external `https://` origin, required for any non-loopback bind; see the [`listen` reference](https://code.claude.com/docs/en/claude-apps-gateway-config#listen). The gateway builds the IdP `redirect_uri` and its discovery document only from this value, never from `X-Forwarded-*` headers.
137137* `trusted_proxies`: the front end's source ranges. The gateway honors `X-Forwarded-For` only when the TCP peer is in this list, then walks the chain past trusted hops, so per-IP sign-in rate limits and audit events record developer IPs instead of the load balancer's.
138138
139Set `trusted_proxies` to match your front end. An external GKE Ingress of class `gce` isn't listed: it provisions a public forwarding-rule address, which the `/login` [private-network check](/docs/en/claude-apps-gateway#prerequisites) rejects.
139Set `trusted_proxies` to match your front end. An external GKE Ingress of class `gce` isn't listed: it provisions a public forwarding-rule address, which the `/login` [private-network check](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) rejects.
140140
141141| Front end | `trusted_proxies` |
142142| - | - |
from line 179
179179
180180> [!NOTE]
181181>
182> Google id\_tokens carry no `groups` claim. To use group-based policies in [`managed.policies`](/docs/en/claude-apps-gateway-config#managed) with Google Workspace as the IdP, configure [`oidc.google_groups`](/docs/en/claude-apps-gateway-config#oidc), which looks up each user's groups through the Admin SDK Directory API using a service account with domain-wide delegation. Without it, match on `email_domain` instead.
182> Google id\_tokens carry no `groups` claim. To use group-based policies in [`managed.policies`](https://code.claude.com/docs/en/claude-apps-gateway-config#managed) with Google Workspace as the IdP, configure [`oidc.google_groups`](https://code.claude.com/docs/en/claude-apps-gateway-config#oidc), which looks up each user's groups through the Admin SDK Directory API using a service account with domain-wide delegation. Without it, match on `email_domain` instead.
183183
184184**6. Store secrets in Secret Manager**
185185
from line 221
221221
222222> [!NOTE]
223223>
224> Each instance holds up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Use [Size the connection pool](/docs/en/claude-apps-gateway-deploy.md#size-the-connection-pool) to check `--max-instances=8` against the connections your database has left for the gateway, and include the extra instances a rolling update starts.
224> Each instance holds up to [`store.max_connections`](https://code.claude.com/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default. Use [Size the connection pool](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#size-the-connection-pool) to check `--max-instances=8` against the connections your database has left for the gateway, and include the extra instances a rolling update starts.
225225
226226The invoker IAM check must be open or disabled. The gateway runs its own OIDC and its clients carry no GCP token, so Cloud Run's invoker check has to admit unauthenticated requests. The gateway's OIDC sign-in authenticates the request once it reaches the container, with `allowed_email_domains` gating which domains may sign in.
227227
from line 232
232232
233233Ingress restriction via `--ingress` is a separate, independent layer from the invoker check; keep it set to limit the service to your corporate network.
234234
235By default the Cloud Run `*.run.app` URL resolves to a public address, which the `/login` [private-network check](/docs/en/claude-apps-gateway#prerequisites) rejects. Two topologies give developers a privately resolvable hostname, and Cloud Run provisions neither for you:
235By default the Cloud Run `*.run.app` URL resolves to a public address, which the `/login` [private-network check](https://code.claude.com/docs/en/claude-apps-gateway#prerequisites) rejects. Two topologies give developers a privately resolvable hostname, and Cloud Run provisions neither for you:
236236
237237* **Internal Application Load Balancer**, the topology this page's `gateway.yaml` assumes: provision an internal Application Load Balancer in front of the service with an internal DNS name and certificate, and set `listen.public_url` to that hostname. The `internal` ingress setting already admits traffic from internal Application Load Balancers; `internal-and-cloud-load-balancing` additionally admits external Application Load Balancers, whose public addresses the `/login` private-network check rejects, so no topology on this page needs it.
238238* **Internal-only ingress with no load balancer**: keep the deploy command as is and leave `listen.public_url` as the `*.run.app` URL, the default in the [reference assets](#terraform-reference) below. For `*.run.app` to resolve privately, your network team must already operate a Private Service Connect endpoint for Google APIs, a Cloud DNS private zone resolving `*.run.app` to it, and on-premises routing to that endpoint.
from line 267
267267 iam.gke.io/gcp-service-account="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com"
268268```
269269
270Deploy the gateway as a standard Deployment plus a Service and an internal Ingress, class `gce-internal`, as described in [Kubernetes deployment](/docs/en/claude-apps-gateway-deploy.md#kubernetes), with:
270Deploy the gateway as a standard Deployment plus a Service and an internal Ingress, class `gce-internal`, as described in [Kubernetes deployment](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#kubernetes), with:
271271
272272* `serviceAccountName: gateway`
273273* the Secret Manager CSI driver mounting secrets at `/secrets`
from line 275
275275
276276Attach a BackendConfig with a raised `timeoutSec` to the gateway Service: the load balancer backend service behind GKE Ingress defaults to a 30-second timeout, which cuts off long streaming responses.
277277
278Don't apply an egress NetworkPolicy that blocks `169.254.169.254` on a Workload Identity cluster; the pod must reach the metadata server for credentials. The gateway's built-in [SSRF guard](/docs/en/claude-apps-gateway-deploy.md#threat-model-summary) is the defense there.
278Don't apply an egress NetworkPolicy that blocks `169.254.169.254` on a Workload Identity cluster; the pod must reach the metadata server for credentials. The gateway's built-in [SSRF guard](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#threat-model-summary) is the defense there.
279279
280280The gateway logs a boot warning that the metadata endpoint is reachable and suggests applying an egress NetworkPolicy. Under Workload Identity that warning is expected, because the pod needs the endpoint.
281281
282282**8. Push the gateway URL to developer machines**
283283
284The gateway is now running, but developers can't reach it from `/login` until the gateway URL is on their machines. Deploy the full [managed settings snippet](/docs/en/claude-apps-gateway#set-the-gateway-url), with `forceLoginMethod`, `forceLoginGatewayUrl`, and the `parentSettingsBehavior: "merge"` opt-in, to each device via MDM. There is no gateway option in the login picker for a developer to select manually.
284The gateway is now running, but developers can't reach it from `/login` until the gateway URL is on their machines. Deploy the full [managed settings snippet](https://code.claude.com/docs/en/claude-apps-gateway#set-the-gateway-url), with `forceLoginMethod`, `forceLoginGatewayUrl`, and the `parentSettingsBehavior: "merge"` opt-in, to each device via MDM. There is no gateway option in the login picker for a developer to select manually.
285285
286286## Terraform reference
287287
from line 297
297297
298298## Troubleshooting
299299
300For gateway boot and login errors, see the platform-agnostic [troubleshooting table](/docs/en/claude-apps-gateway-deploy.md#troubleshooting). The entries below are specific to Google Cloud.
300For gateway boot and login errors, see the platform-agnostic [troubleshooting table](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#troubleshooting). The entries below are specific to Google Cloud.
301301
302302| Symptom | Cause | Fix |
303303| - | - | - |
from line 310
310310
311311## Next steps
312312
313* [Configuration reference](/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option, including `managed.policies` and `telemetry`
314* [Deployment and operations](/docs/en/claude-apps-gateway-deploy.md): IdP setup, health checks, JWT secret rotation, upgrades, and the security model
315* [Claude apps gateway overview](/docs/en/claude-apps-gateway): quickstart and connecting developers
313* [Configuration reference](https://code.claude.com/docs/en/claude-apps-gateway-config.md): every `gateway.yaml` option, including `managed.policies` and `telemetry`
314* [Deployment and operations](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md): IdP setup, health checks, JWT secret rotation, upgrades, and the security model
315* [Claude apps gateway overview](https://code.claude.com/docs/en/claude-apps-gateway): quickstart and connecting developers
316316
claude-apps-gateway-spend-limits Changed · +21 / -21 lines
from line 2
22
33> Cap each developer's spend through the Claude apps gateway by day, week, or month. Set limits with an Admin API and the gateway enforces them live on every request.
44
5Spend limits cap how much each developer can spend through your [Claude apps gateway](/docs/en/claude-apps-gateway) in a given day, week, or month. When a developer passes their cap, the gateway returns `429` on their next request and blocks them until the period resets or an admin raises the cap. Use spend limits to give each developer, group, or the whole organization a ceiling on a credential everyone shares.
5Spend limits cap how much each developer can spend through your [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway) in a given day, week, or month. When a developer passes their cap, the gateway returns `429` on their next request and blocks them until the period resets or an admin raises the cap. Use spend limits to give each developer, group, or the whole organization a ceiling on a credential everyone shares.
66
7By default, a Claude apps gateway forwards all inference through one shared upstream credential, so your provider's bill attributes everything to that credential, not to individual developers. On Amazon Bedrock, [per-developer AWS cost attribution](/docs/en/claude-apps-gateway-config.md#per-developer-aws-cost-attribution) changes this. Without per-developer limits, one runaway agent fleet can spend the organization's entire commitment. Spend limits are the gateway's per-developer view and circuit breaker on top of that shared bill.
7By default, a Claude apps gateway forwards all inference through one shared upstream credential, so your provider's bill attributes everything to that credential, not to individual developers. On Amazon Bedrock, [per-developer AWS cost attribution](https://code.claude.com/docs/en/claude-apps-gateway-config.md#per-developer-aws-cost-attribution) changes this. Without per-developer limits, one runaway agent fleet can spend the organization's entire commitment. Spend limits are the gateway's per-developer view and circuit breaker on top of that shared bill.
88
99## Set a cap
1010
11With the [`admin:`](/docs/en/claude-apps-gateway-config#admin) block configured in `gateway.yaml`, the gateway serves an admin API at `/v1/organizations/spend_limits` and enforces caps live on every inference request. Caps themselves are set through that API, not in `gateway.yaml`; each `POST /v1/organizations/spend_limits` request creates or replaces one cap from `{scope, amount, period}`. The API mirrors the wire shapes of Anthropic's public [Admin API](https://platform.claude.com/docs/en/manage-claude/admin-api) spend-limits endpoints, so an HTTP client written against that contract can target the gateway by changing its base URL.
11With the [`admin:`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin) block configured in `gateway.yaml`, the gateway serves an admin API at `/v1/organizations/spend_limits` and enforces caps live on every inference request. Caps themselves are set through that API, not in `gateway.yaml`; each `POST /v1/organizations/spend_limits` request creates or replaces one cap from `{scope, amount, period}`. The API mirrors the wire shapes of Anthropic's public [Admin API](https://platform.claude.com/docs/en/manage-claude/admin-api) spend-limits endpoints, so an HTTP client written against that contract can target the gateway by changing its base URL.
1212
1313This request sets an org-wide default of \$500 per month for every developer:
1414
from line 30
3030
3131| Field | Values | Description |
3232| - | - | - |
33| `scope.type` | `user`, `rbac_group`, `organization` | `user` targets one developer by their OpenID Connect (OIDC) `sub`, the stable user ID your identity provider assigns; pass it as `scope.user_id`. `rbac_group` targets an [IdP group](/docs/en/claude-apps-gateway-config.md#managed) by name; pass it as `scope.rbac_group_id`. `organization` is the org-wide default. The gateway accepts all three; Anthropic's public `POST` is user-only today. |
33| `scope.type` | `user`, `rbac_group`, `organization` | `user` targets one developer by their OpenID Connect (OIDC) `sub`, the stable user ID your identity provider assigns; pass it as `scope.user_id`. `rbac_group` targets an [IdP group](https://code.claude.com/docs/en/claude-apps-gateway-config.md#managed) by name; pass it as `scope.rbac_group_id`. `organization` is the org-wide default. The gateway accepts all three; Anthropic's public `POST` is user-only today. |
3434| `amount` | Whole-number string of USD cents, or `null` | `null` is unlimited. `"0"` is a zero cap, which blocks every request. |
3535| `period` | `daily`, `weekly`, `monthly` | A scope can hold one cap per period, and each enforces independently: a developer is blocked if over any of them. |
3636
37A group or organization cap is a per-seat default that each member inherits, not a shared pool. Per period, a developer's effective cap resolves in this order: a per-user override, then the most restrictive of their group caps, then the org default, then unlimited. [`admin.group_limit_mode: max`](/docs/en/claude-apps-gateway-config#admin) flips the multi-group tie-break to least-restrictive instead.
37A group or organization cap is a per-seat default that each member inherits, not a shared pool. Per period, a developer's effective cap resolves in this order: a per-user override, then the most restrictive of their group caps, then the org default, then unlimited. [`admin.group_limit_mode: max`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin) flips the multi-group tie-break to least-restrictive instead.
3838
3939### Authenticate to the admin API
4040
4141Send one of:
4242
43* An `x-api-key` header matching a key in [`admin.write_keys`](/docs/en/claude-apps-gateway-config#admin) for full access, or `admin.read_keys` for `GET`-only access. Each key carries an `id` that appears in the audit log as `admin-key:<id>`, so give Terraform, CI, and each automation its own.
44* A gateway bearer token whose `groups` claim includes one of [`admin.admin_groups`](/docs/en/claude-apps-gateway-config#admin). This is full access and audits as `oidc:<sub>`, so prefer it for human admins.
43* An `x-api-key` header matching a key in [`admin.write_keys`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin) for full access, or `admin.read_keys` for `GET`-only access. Each key carries an `id` that appears in the audit log as `admin-key:<id>`, so give Terraform, CI, and each automation its own.
44* A gateway bearer token whose `groups` claim includes one of [`admin.admin_groups`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin). This is full access and audits as `oidc:<sub>`, so prefer it for human admins.
4545
4646## How enforcement works
4747
4848On each `/v1/messages` request, the gateway looks up the developer's caps and period-to-date spend in one Postgres query. A developer over any cap gets a `429` with `error.type: billing_error` and header `x-should-retry: false`.
4949
50The message names the period and reset time, such as `spend limit reached (daily; resets 2026-08-08 00:00 UTC)`, followed by your [`admin.blocked_message`](/docs/en/claude-apps-gateway-config#admin) if set. When a developer exceeds several caps at once, the message names the cap that resets last. The response also carries a `retry-after` header with the seconds remaining until that reset. Before v2.1.225 on the gateway server, the message was `spend limit reached` with no period, reset time, or `retry-after` header.
50The message names the period and reset time, such as `spend limit reached (daily; resets 2026-08-08 00:00 UTC)`, followed by your [`admin.blocked_message`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin) if set. When a developer exceeds several caps at once, the message names the cap that resets last. The response also carries a `retry-after` header with the seconds remaining until that reset. Before v2.1.225 on the gateway server, the message was `spend limit reached` with no period, reset time, or `retry-after` header.
5151
5252On v2.1.227 or later, the protocol reference at `<public_url>/protocol` also lists the exact usage-limit response headers and `429` body.
5353
from line 59
5959
6060The meter picks each request's rates in this order:
6161
621. A matching [`pricing.overrides`](/docs/en/claude-apps-gateway-config#pricing) row for the upstream that served the request. Requires v2.1.227 or later.
621. A matching [`pricing.overrides`](https://code.claude.com/docs/en/claude-apps-gateway-config#pricing) row for the upstream that served the request. Requires v2.1.227 or later.
63632. List price for the upstream model ID, the string the gateway sends to the provider, when the Claude Code cost table recognizes it. The table accepts Anthropic, Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry ID forms.
643. List price for the [`models[].id`](/docs/en/claude-apps-gateway-config#models) you mapped to that upstream ID, for upstream strings that carry no model name, such as an Amazon Bedrock application-inference-profile ARN or a Microsoft Foundry deployment name. Requires v2.1.218 or later.
643. List price for the [`models[].id`](https://code.claude.com/docs/en/claude-apps-gateway-config#models) you mapped to that upstream ID, for upstream strings that carry no model name, such as an Amazon Bedrock application-inference-profile ARN or a Microsoft Foundry deployment name. Requires v2.1.218 or later.
65654. The unknown-model tier of \$5/\$25 per million input/output tokens, so an ID the meter can't place is never free. The gateway warns at boot and once per ID at runtime when it uses this tier.
6666
67Whichever rate applies, the meter then multiplies the amount by [`pricing.multiplier`](/docs/en/claude-apps-gateway-config#pricing), default `1`.
67Whichever rate applies, the meter then multiplies the amount by [`pricing.multiplier`](https://code.claude.com/docs/en/claude-apps-gateway-config#pricing), default `1`.
6868
6969Client aborts are billed too. When a stream ends without the upstream's final usage frame, the meter bills a floor estimate of about four characters per output token for the text already sent to the client, so aborting requests early doesn't evade a cap.
7070
7171#### Long-prompt rates
7272
73The list price for [Claude Haiku 5.5](https://platform.claude.com/docs/en/models/haiku-5-5/overview) has a [higher rate for prompts over a token threshold](/docs/en/model-config.md#haiku-5-5-context-window-and-pricing). When Haiku 5.5 serves a request whose prompt exceeds the threshold, a gateway server running Claude Code v2.1.293 or later prices the whole request at that rate. The meter counts input tokens, cache reads, and cache writes toward that threshold.
73The list price for [Claude Haiku 5.5](https://platform.claude.com/docs/en/models/haiku-5-5/overview) has a [higher rate for prompts over a token threshold](https://code.claude.com/docs/en/model-config.md#haiku-5-5-context-window-and-pricing). When Haiku 5.5 serves a request whose prompt exceeds the threshold, a gateway server running Claude Code v2.1.293 or later prices the whole request at that rate. The meter counts input tokens, cache reads, and cache writes toward that threshold.
7474
7575If one of your `pricing.overrides` rows matches the request, that row's rates apply at any prompt length.
7676
7777### Postgres availability
7878
79The pre-check queries Postgres with a two-second timeout. If the store is unreachable or times out, enforcement fails open by default: the request proceeds, the gateway logs a warning, and the response carries no `anthropic-ratelimit-unified-*` headers. Set [`enforcement.fail_closed_on_error: true`](/docs/en/claude-apps-gateway-config#enforcement) to fail closed instead, which returns the same `429 billing_error` but with the message `spend limit unavailable` and no period, reset time, or `retry-after` header. Fail-open keeps a store outage from becoming an inference outage; fail-closed guarantees no unmetered spend.
79The pre-check queries Postgres with a two-second timeout. If the store is unreachable or times out, enforcement fails open by default: the request proceeds, the gateway logs a warning, and the response carries no `anthropic-ratelimit-unified-*` headers. Set [`enforcement.fail_closed_on_error: true`](https://code.claude.com/docs/en/claude-apps-gateway-config#enforcement) to fail closed instead, which returns the same `429 billing_error` but with the message `spend limit unavailable` and no period, reset time, or `retry-after` header. Fail-open keeps a store outage from becoming an inference outage; fail-closed guarantees no unmetered spend.
8080
81Fail-open only helps while your load balancer or orchestrator still routes traffic to the gateway. See [Outage behavior](/docs/en/claude-apps-gateway-deploy.md#outage-behavior) for `store.readiness_grace_seconds`, which keeps replicas passing their readiness check through a short outage.
81Fail-open only helps while your load balancer or orchestrator still routes traffic to the gateway. See [Outage behavior](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#outage-behavior) for `store.readiness_grace_seconds`, which keeps replicas passing their readiness check through a short outage.
8282
8383### Usage warnings in Claude Code
8484
85Claude Code warns a developer as they approach their cap: once utilization passes 75%, and again past 95% of their most-consumed cap. When the gateway blocks a request, Claude Code shows the gateway's `429` message as is, including your `admin.blocked_message`. It also shows the cap in `/usage` and passes it to the developer's [status line](/docs/en/statusline.md#spend-limit-fields) script.
85Claude Code warns a developer as they approach their cap: once utilization passes 75%, and again past 95% of their most-consumed cap. When the gateway blocks a request, Claude Code shows the gateway's `429` message as is, including your `admin.blocked_message`. It also shows the cap in `/usage` and passes it to the developer's [status line](https://code.claude.com/docs/en/statusline.md#spend-limit-fields) script.
8686
8787Each display needs a minimum Claude Code version on the developer's machine and on the gateway server:
8888
from line 94
9494
9595The warnings and the percentage come from the `anthropic-ratelimit-unified-*` headers, which the gateway adds to each successful `/v1/messages` response for a developer who has a cap. The headers always describe the developer's own cap: the gateway strips the upstream provider's rate-limit headers, which describe your shared quota, and never forwards them.
9696
97The spend a developer sees is the gateway's own [estimate](#how-requests-are-priced), the same figure it enforces the cap with, and not an amount from your provider's bill. Claude Code reads the dollar amounts with a separate request to the gateway. If you set `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` on developers' machines, as [Compliance posture](/docs/en/claude-apps-gateway-deploy.md#compliance-posture) suggests, Claude Code skips that request. With that variable set, or with a gateway server older than v2.1.284, the bar and the status line stay percentage-only.
97The spend a developer sees is the gateway's own [estimate](#how-requests-are-priced), the same figure it enforces the cap with, and not an amount from your provider's bill. Claude Code reads the dollar amounts with a separate request to the gateway. If you set `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` on developers' machines, as [Compliance posture](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#compliance-posture) suggests, Claude Code skips that request. With that variable set, or with a gateway server older than v2.1.284, the bar and the status line stay percentage-only.
9898
9999## Admin API reference
100100
from line 158
158158
159159| Table | Contents | Retention |
160160| - | - | - |
161| `spend` | Per-principal period-to-date counters in cents | [`admin.spend_retention_months`](/docs/en/claude-apps-gateway-config#admin), default 13 |
161| `spend` | Per-principal period-to-date counters in cents | [`admin.spend_retention_months`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin), default 13 |
162162| `spend_limits` | The configured caps | Until deleted via the API |
163| `admin_audit` | The mutation trail | [`admin.audit_retention_days`](/docs/en/claude-apps-gateway-config#admin), default 365 |
164| `principal_emails` | Each principal's last-seen email, display name, and IdP groups. Contains PII. | [`admin.identity_retention_days`](/docs/en/claude-apps-gateway-config#admin) since last activity, default 90 |
163| `admin_audit` | The mutation trail | [`admin.audit_retention_days`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin), default 365 |
164| `principal_emails` | Each principal's last-seen email, display name, and IdP groups. Contains PII. | [`admin.identity_retention_days`](https://code.claude.com/docs/en/claude-apps-gateway-config#admin) since last activity, default 90 |
165165
166166When a developer leaves, delete any per-user cap via `DELETE /v1/organizations/spend_limits/{id}`; their spend and identity rows age out on the retention windows above. To erase one person immediately, for offboarding or a data subject access request (DSAR), run `DELETE FROM principal_emails WHERE principal = '<sub>'` directly against the gateway database. That removes the only table holding their email, name, and groups. The `spend` and `admin_audit` rows reference the pseudonymous OIDC `sub` only and age out on their own windows.
167167
168168## Related
169169
170* [`admin` and `enforcement` configuration](/docs/en/claude-apps-gateway-config#admin): enabling the admin API and tuning retention
171* [Deployment guide](/docs/en/claude-apps-gateway-deploy.md#postgres): Postgres schema and backup guidance
170* [`admin` and `enforcement` configuration](https://code.claude.com/docs/en/claude-apps-gateway-config#admin): enabling the admin API and tuning retention
171* [Deployment guide](https://code.claude.com/docs/en/claude-apps-gateway-deploy.md#postgres): Postgres schema and backup guidance
172172
claude-code-on-the-web Changed · +84 / -84 lines
from line 6
66>
77> Cloud sessions are available on Pro, Max, and Team plans, and for Enterprise users with premium seats or Chat + Claude Code seats. If your Enterprise organization manages your access with [custom roles](https://support.claude.com/en/articles/13930452), you also need a role that includes the cloud sessions permission. Ask an Owner to check your roles and add it at [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) if it's missing.
88
9A cloud session is a Claude Code session that runs on cloud infrastructure instead of on your machine. By default it runs on infrastructure Anthropic manages, or on your organization's [self-hosted environment](/docs/en/self-hosted-environments) when routed there. The session keeps running after you close your laptop, and you can check on it or steer it from any device. It counts toward your plan's usage limits alongside the rest of your Claude and Claude Code usage, and there's no separate charge for the cloud VM.
9A cloud session is a Claude Code session that runs on cloud infrastructure instead of on your machine. By default it runs on infrastructure Anthropic manages, or on your organization's [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) when routed there. The session keeps running after you close your laptop, and you can check on it or steer it from any device. It counts toward your plan's usage limits alongside the rest of your Claude and Claude Code usage, and there's no separate charge for the cloud VM.
1010
1111To let cloud sessions clone your code from GitHub and push branches, connect GitHub with one of the [GitHub connection methods](#github-authentication-options). If your repository is on GitLab, Bitbucket, or another host, see [Platform restrictions](#limitations) for what works.
1212
from line 13
1313You can start a cloud session from any of these surfaces:
1414
1515* **Browser**: [claude.ai/code](https://claude.ai/code), also called Claude Code on the web
16* **Mobile**: the **Code** tab in the [Claude app](/docs/en/mobile.md)
17* **Desktop app**: select **Cloud** instead of **Local** when you [start a session](/docs/en/desktop.md#run-long-running-tasks-in-the-cloud)
16* **Mobile**: the **Code** tab in the [Claude app](https://code.claude.com/docs/en/mobile.md)
17* **Desktop app**: select **Cloud** instead of **Local** when you [start a session](https://code.claude.com/docs/en/desktop.md#run-long-running-tasks-in-the-cloud)
1818* **Terminal**: [`claude --cloud`](#from-terminal-to-cloud)
19* **Cloud scheduled tasks**: [scheduled and triggered runs](/docs/en/routines.md) each run as a cloud session
19* **Cloud scheduled tasks**: [scheduled and triggered runs](https://code.claude.com/docs/en/routines.md) each run as a cloud session
2020
2121Once you're set up, use this page to move work between your terminal and the cloud, manage and share sessions, turn on auto-fix for pull requests, and troubleshoot.
2222
from line 24
2424>
2525> These cases are covered on other pages:
2626>
27> * **Starting your first cloud session**: [Get started with cloud sessions](/docs/en/web-quickstart.md) connects GitHub and walks through a task in the browser
28> * **Many cloud sessions for one body of work**: a [project](/docs/en/claude-projects.md) has Claude start and keep track of them for you
29> * **Steering a local session from another device**: sessions in your terminal, IDE, or the Desktop app with **Local** selected run on your machine, and [Remote Control](/docs/en/remote-control.md) lets you reach them from your phone or browser
27> * **Starting your first cloud session**: [Get started with cloud sessions](https://code.claude.com/docs/en/web-quickstart.md) connects GitHub and walks through a task in the browser
28> * **Many cloud sessions for one body of work**: a [project](https://code.claude.com/docs/en/claude-projects.md) has Claude start and keep track of them for you
29> * **Steering a local session from another device**: sessions in your terminal, IDE, or the Desktop app with **Local** selected run on your machine, and [Remote Control](https://code.claude.com/docs/en/remote-control.md) lets you reach them from your phone or browser
3030
3131## Cloud environments
3232
33Every cloud session runs in a [cloud environment](/docs/en/cloud-environments.md), the saved configuration that controls network access, environment variables, and setup scripts.
33Every cloud session runs in a [cloud environment](https://code.claude.com/docs/en/cloud-environments.md), the saved configuration that controls network access, environment variables, and setup scripts.
3434
35* **Your first environment**: if you don't have one yet, onboarding sets up a **Default** environment with [**Trusted** network access](/docs/en/cloud-environments.md#access-levels), either by creating it for you or by asking you to create it. See [The Default environment](/docs/en/cloud-environments.md#the-default-environment) for which of those happens on your plan
36* **Which environment a session uses**: see [The Default environment](/docs/en/cloud-environments.md#the-default-environment) for how sessions choose an environment when you have more than one
37* **Change what sessions can reach or run at startup**: see [Configure cloud environments](/docs/en/cloud-environments.md)
38* **What's installed without any configuration**: see [Installed tools](/docs/en/cloud-environments.md#installed-tools)
35* **Your first environment**: if you don't have one yet, onboarding sets up a **Default** environment with [**Trusted** network access](https://code.claude.com/docs/en/cloud-environments.md#access-levels), either by creating it for you or by asking you to create it. See [The Default environment](https://code.claude.com/docs/en/cloud-environments.md#the-default-environment) for which of those happens on your plan
36* **Which environment a session uses**: see [The Default environment](https://code.claude.com/docs/en/cloud-environments.md#the-default-environment) for how sessions choose an environment when you have more than one
37* **Change what sessions can reach or run at startup**: see [Configure cloud environments](https://code.claude.com/docs/en/cloud-environments.md)
38* **What's installed without any configuration**: see [Installed tools](https://code.claude.com/docs/en/cloud-environments.md#installed-tools)
3939
4040## GitHub authentication options
4141
from line 43
4343
4444| Method | How you connect | Repositories sessions can reach | Best for |
4545| :- | :- | :- | :- |
46| **GitHub App** | Authorize the Claude GitHub App during [web onboarding](/docs/en/web-quickstart.md) | Any public repository, and private repositories that the Claude GitHub App is installed on | Browser onboarding; teams that want [Auto-fix](#auto-fix-pull-requests) |
46| **GitHub App** | Authorize the Claude GitHub App during [web onboarding](https://code.claude.com/docs/en/web-quickstart.md) | Any public repository, and private repositories that the Claude GitHub App is installed on | Browser onboarding; teams that want [Auto-fix](#auto-fix-pull-requests) |
4747| **`/web-setup`** | Run `/web-setup` in your terminal to send your local `gh` CLI token to your Claude account | Any repository your `gh` token can access, whether or not the Claude GitHub App is installed | Individual developers who already use `gh` |
4848
4949These features depend on the Claude GitHub App being installed on the repository:
5050
5151* **Auto-fix**: installing the Claude GitHub App on a repository also enables [Auto-fix](#auto-fix-pull-requests) for pull requests in it
52* **Projects**: threads in a [project](/docs/en/claude-projects.md) need the Claude GitHub App installed on each repository they clone, whichever method you connected with. See [Set up GitHub access](/docs/en/claude-projects.md#set-up-github-access)
52* **Projects**: threads in a [project](https://code.claude.com/docs/en/claude-projects.md) need the Claude GitHub App installed on each repository they clone, whichever method you connected with. See [Set up GitHub access](https://code.claude.com/docs/en/claude-projects.md#set-up-github-access)
5353
54In Anthropic-hosted environments, your GitHub credentials stay encrypted on Anthropic's servers and never enter a session's VM. GitHub operations from the VM go through the [GitHub proxy](/docs/en/cloud-environments.md#github-proxy), which attaches the credential on the server side.
54In Anthropic-hosted environments, your GitHub credentials stay encrypted on Anthropic's servers and never enter a session's VM. GitHub operations from the VM go through the [GitHub proxy](https://code.claude.com/docs/en/cloud-environments.md#github-proxy), which attaches the credential on the server side.
5555
56See [Connect from your terminal](/docs/en/web-quickstart.md#connect-from-your-terminal) for the `/web-setup` walkthrough, including what `/web-setup` stores and how to remove it.
56See [Connect from your terminal](https://code.claude.com/docs/en/web-quickstart.md#connect-from-your-terminal) for the `/web-setup` walkthrough, including what `/web-setup` stores and how to remove it.
5757
5858> [!NOTE]
5959>
60> Organizations with [Zero Data Retention](/docs/en/zero-data-retention.md) enabled, or with the [HIPAA configuration](/docs/en/hipaa-setup.md) applied, can't use `/web-setup` or other cloud session features. Organizations that use [customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/cmek) (CMEK) can't start cloud sessions either.
60> Organizations with [Zero Data Retention](https://code.claude.com/docs/en/zero-data-retention.md) enabled, or with the [HIPAA configuration](https://code.claude.com/docs/en/hipaa-setup.md) applied, can't use `/web-setup` or other cloud session features. Organizations that use [customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/cmek) (CMEK) can't start cloud sessions either.
6161
6262### Quick setup for Team and Enterprise
6363
from line 67
6767
6868* **`/web-setup`**: members can connect GitHub with `/web-setup`. While the setting is off, the command is hidden
6969* **GitHub App prompt**: browser onboarding skips the Claude GitHub App install prompt
70* **First environment**: browser onboarding creates the [**Default** environment](/docs/en/cloud-environments.md#the-default-environment) for members instead of showing the environment form
70* **First environment**: browser onboarding creates the [**Default** environment](https://code.claude.com/docs/en/cloud-environments.md#the-default-environment) for members instead of showing the environment form
7171
72An [Owner](/docs/en/server-managed-settings.md#access-control) turns it on with the **Quick setup** toggle at [**Organization settings > Claude Code**](https://claude.ai/admin-settings/claude-code).
72An [Owner](https://code.claude.com/docs/en/server-managed-settings.md#access-control) turns it on with the **Quick setup** toggle at [**Organization settings > Claude Code**](https://claude.ai/admin-settings/claude-code).
7373
7474## Move tasks between terminal and cloud
7575
76These workflows require the [Claude Code CLI](/docs/en/quickstart.md) signed in to the same claude.ai account. You can start new cloud sessions from your terminal, or pull cloud sessions into your terminal to continue locally. Cloud sessions persist even if you close your laptop, and you can monitor them from anywhere including the Claude mobile app.
76These workflows require the [Claude Code CLI](https://code.claude.com/docs/en/quickstart.md) signed in to the same claude.ai account. You can start new cloud sessions from your terminal, or pull cloud sessions into your terminal to continue locally. Cloud sessions persist even if you close your laptop, and you can monitor them from anywhere including the Claude mobile app.
7777
7878> [!NOTE]
7979>
80> From the CLI, session handoff is one-way: you can pull cloud sessions into your terminal with `--teleport`, but you can't push an existing terminal session to the cloud. The `--cloud` flag with a task description creates a new cloud session for your current repository; with `-p` and a session ID or claude.ai/code URL it instead [queues a message into that existing session](/docs/en/claude-code-on-the-web.md#send-follow-ups-from-the-cli). The [Desktop app](/docs/en/desktop.md#continue-in-another-surface) can send a local session in its Code tab to the cloud from its **Open in** menu.
80> From the CLI, session handoff is one-way: you can pull cloud sessions into your terminal with `--teleport`, but you can't push an existing terminal session to the cloud. The `--cloud` flag with a task description creates a new cloud session for your current repository; with `-p` and a session ID or claude.ai/code URL it instead [queues a message into that existing session](https://code.claude.com/docs/en/claude-code-on-the-web.md#send-follow-ups-from-the-cli). The [Desktop app](https://code.claude.com/docs/en/desktop.md#continue-in-another-surface) can send a local session in its Code tab to the cloud from its **Open in** menu.
8181
8282### Start a cloud session from your terminal
8383
from line 91
9191
9292`--cloud` works with a single repository at a time. The task runs in the cloud while you continue working locally. The older `--remote` spelling still works as a deprecated alias for `--cloud`.
9393
94While the cloud container starts, the CLI shows a live checklist of setup steps, such as cloning the repository and running your [setup script](/docs/en/cloud-environments.md#setup-scripts). It queues messages you type during provisioning and sends them once the session is ready.
94While the cloud container starts, the CLI shows a live checklist of setup steps, such as cloning the repository and running your [setup script](https://code.claude.com/docs/en/cloud-environments.md#setup-scripts). It queues messages you type during provisioning and sends them once the session is ready.
9595
9696> [!NOTE]
9797>
98> `--cloud` creates cloud sessions. `--remote-control` is unrelated: it lets you monitor and steer a local CLI session from claude.ai or the Claude app. See [Remote Control](/docs/en/remote-control.md).
98> `--cloud` creates cloud sessions. `--remote-control` is unrelated: it lets you monitor and steer a local CLI session from claude.ai or the Claude app. See [Remote Control](https://code.claude.com/docs/en/remote-control.md).
9999
100100Open the session on claude.ai or the Claude mobile app to check progress or interact directly. From there you can steer Claude, provide feedback, or answer questions as in any other conversation.
101101
from line 147
147147* The directory must be a git repository with at least one commit
148148* The bundled repository must be under 100 MB. Larger repositories fall back to bundling only the current branch, then to a single squashed snapshot of the working tree, and fail if the snapshot is still too large
149149* Untracked files are not included; run `git add` on files you want the cloud session to see
150* On macOS, Linux, and WSL, Claude Code refuses the upload when it can't follow a git setting that affects which attribute rules apply to your files, such as `core.attributesFile` set in an included config file. The [refusal message](/docs/en/errors.md#the-repository-upload-cant-follow-a-git-setting) names the setting and the fix
150* On macOS, Linux, and WSL, Claude Code refuses the upload when it can't follow a git setting that affects which attribute rules apply to your files, such as `core.attributesFile` set in an included config file. The [refusal message](https://code.claude.com/docs/en/errors.md#the-repository-upload-cant-follow-a-git-setting) names the setting and the fix
151151* Sessions created from a bundle can push back to a GitHub remote only when your [GitHub connection](#github-authentication-options) has push access to that repository
152152
153153On macOS, Linux, and WSL, the upload also needs git 2.31 or later and a checkout layout it supports, while on native Windows Claude Code uploads without either check. When a checkout doesn't meet those requirements, Claude Code doesn't start the session. It prints an error that contains `Not uploading this working tree:`, names the cause, and says what to change. These are the common causes:
from line 154
154154
155155* **Older git**: the installed git is older than 2.31. Update git, then retry.
156156* **A checkout layout the upload doesn't support**: you started inside a submodule, in a clone made with `git clone --separate-git-dir`, `--shared`, or `--reference`, in a checkout with `core.worktree` set, or in a repository that keeps its refs in the reftable format. Start from the main checkout of a clone made with a plain `git clone` instead.
157* **A linked worktree with a sparse checkout**: `git sparse-checkout` writes settings to the worktree's own `config.worktree` file, which the upload doesn't accept, so a worktree that has those settings isn't uploaded, and neither is one Claude Code created with [`worktree.sparsePaths`](/docs/en/settings-reference#worktree-sparsepaths). Start from the repository's main checkout instead.
157* **A linked worktree with a sparse checkout**: `git sparse-checkout` writes settings to the worktree's own `config.worktree` file, which the upload doesn't accept, so a worktree that has those settings isn't uploaded, and neither is one Claude Code created with [`worktree.sparsePaths`](https://code.claude.com/docs/en/settings-reference#worktree-sparsepaths). Start from the repository's main checkout instead.
158158* **Git configuration kept inside the working tree**: your git configuration includes a file that sits inside the checkout, for example an `include.path` entry that points into the repository. Move that file outside the working tree or remove the include, then retry.
159159
160160On macOS, Linux, and WSL, a partial clone made with `git clone --filter` uploads as a snapshot of its working tree without history, as long as the clone holds every tracked file locally.
from line 171
171171claude -p "your message" --cloud <session-id>
172172```
173173
174The CLI queues the message into the session and exits without waiting for a reply. Use it to steer a long-running session, queue the next step while the current one is still finishing, or send follow-ups from a [CI script](/docs/en/self-hosted-environments-testing.md#run-the-test-loop). You can also pipe the message on stdin instead of passing it as an argument: `echo "your message" | claude -p --cloud <session-id>`.
174The CLI queues the message into the session and exits without waiting for a reply. Use it to steer a long-running session, queue the next step while the current one is still finishing, or send follow-ups from a [CI script](https://code.claude.com/docs/en/self-hosted-environments-testing.md#run-the-test-loop). You can also pipe the message on stdin instead of passing it as an argument: `echo "your message" | claude -p --cloud <session-id>`.
175175
176176For `<session-id>`, pass the bare ID, such as `session_...` or `cse_...`, or the session's `claude.ai/code/<id>` URL, with or without the scheme or query string. Find the ID in your session list at claude.ai/code.
177177
178178> [!NOTE]
179179>
180> `--cloud` requires an Anthropic account. It's not available when Claude Code is configured for Amazon Bedrock, Google Cloud's Agent Platform, or another third-party provider. An [LLM gateway](/docs/en/llm-gateway) configured only through `ANTHROPIC_BASE_URL` doesn't count as a third-party provider for this check, but you still need to sign in with `claude auth login`. Your organization's `allow_remote_sessions` policy must also be enabled. An Owner can turn it on in the Claude Code admin settings at claude.ai/admin-settings/claude-code.
180> `--cloud` requires an Anthropic account. It's not available when Claude Code is configured for Amazon Bedrock, Google Cloud's Agent Platform, or another third-party provider. An [LLM gateway](https://code.claude.com/docs/en/llm-gateway) configured only through `ANTHROPIC_BASE_URL` doesn't count as a third-party provider for this check, but you still need to sign in with `claude auth login`. Your organization's `allow_remote_sessions` policy must also be enabled. An Owner can turn it on in the Claude Code admin settings at claude.ai/admin-settings/claude-code.
181181
182182#### Output
183183
from line 203
203203* **From claude.ai/code**: select **Open in > Terminal** from the session menu to copy a command you can paste into your terminal.
204204* **From inside the cloud session**: type `/teleport` and Claude Code replies with the exact `claude --teleport <session-id>` command for that session, ready to run from a checkout of the repository. Requires Claude Code v2.1.223 or later in the session's environment.
205205
206When you teleport a session, Claude verifies you're in the correct repository, fetches and checks out the branch from the cloud session, and loads the full conversation history into your terminal. The terminal gets its own copy of the session: new work there stays local and doesn't appear in the cloud session on claude.ai or the Claude mobile app. To keep steering from your phone after teleporting, start [`/remote-control`](/docs/en/remote-control) in the local session.
206When you teleport a session, Claude verifies you're in the correct repository, fetches and checks out the branch from the cloud session, and loads the full conversation history into your terminal. The terminal gets its own copy of the session: new work there stays local and doesn't appear in the cloud session on claude.ai or the Claude mobile app. To keep steering from your phone after teleporting, start [`/remote-control`](https://code.claude.com/docs/en/remote-control) in the local session.
207207
208208`--teleport` is distinct from `--resume`. `--resume` reopens a conversation from this machine's local history and doesn't list cloud sessions; `--teleport` pulls a cloud session and its branch.
209209
from line 234
234234
235235### Permission modes in cloud sessions
236236
237You pick a cloud session's [permission mode](/docs/en/permission-modes.md) from the [mode dropdown](/docs/en/permission-modes.md#switch-permission-modes), both when you create the task and while the session runs.
237You pick a cloud session's [permission mode](https://code.claude.com/docs/en/permission-modes.md) from the [mode dropdown](https://code.claude.com/docs/en/permission-modes.md#switch-permission-modes), both when you create the task and while the session runs.
238238
239239Claude Code resumes a session in the permission mode it was in when you do either of these:
240240
241241* Reopen a session whose Anthropic-hosted [environment expired](#environment-expired)
242* Send a message to a session that a self-hosted runner [released while it was idle](/docs/en/self-hosted-environments-reference.md#runner-cli-flags)
242* Send a message to a session that a self-hosted runner [released while it was idle](https://code.claude.com/docs/en/self-hosted-environments-reference.md#runner-cli-flags)
243243
244244### Review changes
245245
from line 251
251251
252252These steps are covered elsewhere:
253253
254* **The full walkthrough, including PR creation**: see [Review and iterate](/docs/en/web-quickstart.md#review-and-iterate)
254* **The full walkthrough, including PR creation**: see [Review and iterate](https://code.claude.com/docs/en/web-quickstart.md#review-and-iterate)
255255* **Having Claude monitor the PR for CI failures and review comments automatically**: see [Auto-fix pull requests](#auto-fix-pull-requests)
256256
257257### Manage context
258258
259Cloud sessions support [built-in commands](/docs/en/commands.md) that produce text output. Commands that only run in the terminal interface, such as `/plugin` or `/resume`, aren't available. Commands that open a picker or panel in the terminal behave differently in cloud sessions:
259Cloud sessions support [built-in commands](https://code.claude.com/docs/en/commands.md) that produce text output. Commands that only run in the terminal interface, such as `/plugin` or `/resume`, aren't available. Commands that open a picker or panel in the terminal behave differently in cloud sessions:
260260
261* **`/model`, `/effort`, `/color`, and `/rename`**: pass the value as an argument, for example `/model sonnet`, instead of opening the terminal picker or slider. The argument forms follow each command's [availability notes](/docs/en/commands.md#all-commands).
262* **`/fast`**: toggles [fast mode](/docs/en/fast-mode.md#use-fast-mode-in-cloud-sessions) for the session when fast mode is [available on your account](/docs/en/fast-mode.md#requirements). Requires Claude Code v2.1.271 or later in the session's environment.
263* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your settings instead of setting a value. To change a setting for a cloud session, set an [environment variable](/docs/en/cloud-environments.md#set-environment-variables) on the environment. In a session with one repository outside a [project](/docs/en/claude-projects.md)'s threads, commit the key to that repository's `.claude/settings.json` instead. [Settings in cloud sessions](/docs/en/settings.md#settings-in-cloud-sessions) lists what each session reads.
261* **`/model`, `/effort`, `/color`, and `/rename`**: pass the value as an argument, for example `/model sonnet`, instead of opening the terminal picker or slider. The argument forms follow each command's [availability notes](https://code.claude.com/docs/en/commands.md#all-commands).
262* **`/fast`**: toggles [fast mode](https://code.claude.com/docs/en/fast-mode.md#use-fast-mode-in-cloud-sessions) for the session when fast mode is [available on your account](https://code.claude.com/docs/en/fast-mode.md#requirements). Requires Claude Code v2.1.271 or later in the session's environment.
263* **`/config`**: in your browser at claude.ai/code, opens the Claude Code section of your settings instead of setting a value. To change a setting for a cloud session, set an [environment variable](https://code.claude.com/docs/en/cloud-environments.md#set-environment-variables) on the environment. In a session with one repository outside a [project](https://code.claude.com/docs/en/claude-projects.md)'s threads, commit the key to that repository's `.claude/settings.json` instead. [Settings in cloud sessions](https://code.claude.com/docs/en/settings.md#settings-in-cloud-sessions) lists what each session reads.
264264
265For context management in a cloud session outside a [project's threads](/docs/en/claude-projects.md#choose-models-and-let-claude-manage-context):
265For context management in a cloud session outside a [project's threads](https://code.claude.com/docs/en/claude-projects.md#choose-models-and-let-claude-manage-context):
266266
267267| Command | Works in cloud sessions | Notes |
268268| :- | :- | :- |
from line 270
270270| `/context` | Yes | Shows what's currently in the context window |
271271| `/clear` | Yes | Starts a fresh conversation with empty context in the same cloud session |
272272
273Auto-compaction runs automatically when the context window approaches capacity. Cloud sessions set [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/en/env-vars) themselves, so compaction triggers partway through the [auto-compact window](/docs/en/model-config.md#set-the-auto-compact-window) rather than when the window fills. That value overrides one you add in your [environment variables](/docs/en/cloud-environments.md#set-environment-variables), so adding the variable there doesn't change when compaction triggers.
273Auto-compaction runs automatically when the context window approaches capacity. Cloud sessions set [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](https://code.claude.com/docs/en/env-vars) themselves, so compaction triggers partway through the [auto-compact window](https://code.claude.com/docs/en/model-config.md#set-the-auto-compact-window) rather than when the window fills. That value overrides one you add in your [environment variables](https://code.claude.com/docs/en/cloud-environments.md#set-environment-variables), so adding the variable there doesn't change when compaction triggers.
274274
275To change the auto-compact window instead, set [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/en/env-vars) in your environment variables, or run [`/autocompact`](/docs/en/commands#all-commands) with a token count in a session where the variable isn't set.
275To change the auto-compact window instead, set [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](https://code.claude.com/docs/en/env-vars) in your environment variables, or run [`/autocompact`](https://code.claude.com/docs/en/commands#all-commands) with a token count in a session where the variable isn't set.
276276
277[Subagents](/docs/en/sub-agents.md) work the same way they do locally. Claude can spawn them with the Agent tool to offload research or parallel work into a separate context window, keeping the main conversation lighter. Outside a [project](/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories)'s threads, subagents defined in your repo's `.claude/agents/` load automatically.
277[Subagents](https://code.claude.com/docs/en/sub-agents.md) work the same way they do locally. Claude can spawn them with the Agent tool to offload research or parallel work into a separate context window, keeping the main conversation lighter. Outside a [project](https://code.claude.com/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories)'s threads, subagents defined in your repo's `.claude/agents/` load automatically.
278278
279[Agent teams](/docs/en/agent-teams.md) are off by default but can be enabled by adding `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` to your [environment variables](/docs/en/cloud-environments.md#set-environment-variables).
279[Agent teams](https://code.claude.com/docs/en/agent-teams.md) are off by default but can be enabled by adding `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` to your [environment variables](https://code.claude.com/docs/en/cloud-environments.md#set-environment-variables).
280280
281281### Take back a queued message
282282
from line 295
295295* **Visibility options**: **Private** and **Team**. Team visibility makes the session visible to other members of your claude.ai organization
296296* **Repository access**: verification is enabled by default, based on the GitHub account connected to the recipient's account
297297* **Your name**: your account's display name is visible to all recipients with access
298* **Slack sessions**: [Claude in Slack](/docs/en/slack.md) sessions are automatically shared with Team visibility
298* **Slack sessions**: [Claude in Slack](https://code.claude.com/docs/en/slack.md) sessions are automatically shared with Team visibility
299299
300300#### Share from a Max or Pro account
301301
from line 333
333333There are a few ways to turn on auto-fix depending on where the PR came from and what device you're using:
334334
335335* **PRs created in a cloud session**: open the session at claude.ai/code, open the CI status bar, and select **Auto-fix**
336* **From your terminal**: run [`/autofix-pr`](/docs/en/commands) while on the PR's branch. Claude Code detects the open PR with `gh`, spawns a cloud session, and turns on auto-fix in one step
336* **From your terminal**: run [`/autofix-pr`](https://code.claude.com/docs/en/commands) while on the PR's branch. Claude Code detects the open PR with `gh`, spawns a cloud session, and turns on auto-fix in one step
337337* **From the mobile app**: tell Claude to auto-fix the PR, for example "watch this PR and fix any CI failures or review comments"
338338* **Any existing PR**: paste the PR URL into a session and tell Claude to auto-fix it
339339
from line 359
359359
360360Each cloud session is separated from your machine and from other sessions through several layers:
361361
362* **Isolated virtual machines**: each session runs in an isolated, Anthropic-managed VM. Sessions your organization routes to a [self-hosted environment](/docs/en/self-hosted-environments) run on your own infrastructure instead, where isolation is your deployment's responsibility
363* **Network access controls**: in Anthropic-hosted environments, network access is limited by default and can be disabled. See [Network access](/docs/en/cloud-environments.md#network-access) for the access levels, the [default allowed domains](/docs/en/cloud-environments.md#default-allowed-domains), and the traffic that doesn't go through the allowlist. In a self-hosted environment, you restrict session egress at your own network boundary. When running with network access disabled, Claude Code can still communicate with the Anthropic API, which may allow data to exit the VM.
364* **Credential protection**: in Anthropic-hosted environments, git credentials and signing keys stay outside the sandbox, and a proxy authenticates on the session's behalf with scoped credentials. In a self-hosted environment, your deployment supplies git credentials; see [Configure git](/docs/en/self-hosted-environments-deploy.md#configure-git)
365* **Network secrets**: in Anthropic-hosted environments, keys you [add to a cloud environment](/docs/en/cloud-environments.md#add-network-secrets) stay outside the sandbox the same way, attached to matching requests after they leave the session. A self-hosted environment doesn't have network secrets
362* **Isolated virtual machines**: each session runs in an isolated, Anthropic-managed VM. Sessions your organization routes to a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) run on your own infrastructure instead, where isolation is your deployment's responsibility
363* **Network access controls**: in Anthropic-hosted environments, network access is limited by default and can be disabled. See [Network access](https://code.claude.com/docs/en/cloud-environments.md#network-access) for the access levels, the [default allowed domains](https://code.claude.com/docs/en/cloud-environments.md#default-allowed-domains), and the traffic that doesn't go through the allowlist. In a self-hosted environment, you restrict session egress at your own network boundary. When running with network access disabled, Claude Code can still communicate with the Anthropic API, which may allow data to exit the VM.
364* **Credential protection**: in Anthropic-hosted environments, git credentials and signing keys stay outside the sandbox, and a proxy authenticates on the session's behalf with scoped credentials. In a self-hosted environment, your deployment supplies git credentials; see [Configure git](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#configure-git)
365* **Network secrets**: in Anthropic-hosted environments, keys you [add to a cloud environment](https://code.claude.com/docs/en/cloud-environments.md#add-network-secrets) stay outside the sandbox the same way, attached to matching requests after they leave the session. A self-hosted environment doesn't have network secrets
366366* **Secure analysis**: code is analyzed and modified within the session's isolated environment before creating PRs
367367
368368## Troubleshooting
369369
370For runtime API errors that appear in the conversation such as `API Error: 500`, `529 Overloaded`, `429`, or `Prompt is too long`, see the [Error reference](/docs/en/errors.md). Those errors and their fixes are shared with the CLI and Desktop app. The sections below cover issues specific to cloud sessions.
370For runtime API errors that appear in the conversation such as `API Error: 500`, `529 Overloaded`, `429`, or `Prompt is too long`, see the [Error reference](https://code.claude.com/docs/en/errors.md). Those errors and their fixes are shared with the CLI and Desktop app. The sections below cover issues specific to cloud sessions.
371371
372372### Session creation failed
373373
from line 375
375375
376376* Check [status.claude.com](https://status.claude.com) for cloud session incidents
377377* Retry after a minute, as capacity is provisioned on demand
378* Confirm your GitHub connection can reach the repository by following [No repositories appear after connecting GitHub](/docs/en/web-quickstart.md#no-repositories-appear-after-connecting-github)
378* Confirm your GitHub connection can reach the repository by following [No repositories appear after connecting GitHub](https://code.claude.com/docs/en/web-quickstart.md#no-repositories-appear-after-connecting-github)
379379
380380### Unable to get organization UUID
381381
from line 385
385385* ``Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.``
386386* `Error loading Claude Code sessions` in the session picker, when you run `claude --teleport` without a session ID
387387
388Run [`claude auth login`](/docs/en/cli-reference#cli-commands) in your shell to sign in with your claude.ai account, then retry the command. Inside a running session, `/login` does the same. If the error names your provider instead, see the [error table](#errors-when-sending-to-a-cloud-session): cloud sessions aren't available through third-party providers.
388Run [`claude auth login`](https://code.claude.com/docs/en/cli-reference#cli-commands) in your shell to sign in with your claude.ai account, then retry the command. Inside a running session, `/login` does the same. If the error names your provider instead, see the [error table](#errors-when-sending-to-a-cloud-session): cloud sessions aren't available through third-party providers.
389389
390390From v2.1.274 through v2.1.289, the sign-in message read `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.`
391391
from line 410
410410| Message | What it means |
411411| - | - |
412412| `Cloud sessions aren't available with <provider>. They run on Anthropic's infrastructure and require an Anthropic account.` | Claude Code is configured for a third-party provider. The message names the provider with the label your configuration uses, such as `Amazon Bedrock` or `Google Vertex AI`. Remove that provider's configuration, for example by unsetting `CLAUDE_CODE_USE_BEDROCK`, and sign in with an Anthropic account (`claude auth login`). |
413| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | Your organization's `allow_remote_sessions` policy is off; see [Cloud sessions are disabled by your organization's policy](/docs/en/errors.md#cloud-sessions-are-disabled-by-your-organizations-policy). If the message instead names a credential this session is using, see [Cloud sessions use your claude.ai login](/docs/en/errors.md#cloud-sessions-use-your-claude-ai-login). |
413| `Cloud sessions are disabled by your organization's policy. Contact your organization admin to enable them.` | Your organization's `allow_remote_sessions` policy is off; see [Cloud sessions are disabled by your organization's policy](https://code.claude.com/docs/en/errors.md#cloud-sessions-are-disabled-by-your-organizations-policy). If the message instead names a credential this session is using, see [Cloud sessions use your claude.ai login](https://code.claude.com/docs/en/errors.md#cloud-sessions-use-your-claude-ai-login). |
414414| `Couldn't verify your organization's policy for cloud sessions. Check your network connection and try again.` | Claude Code hasn't finished loading your organization's policy, so it refuses the send rather than assume cloud sessions are allowed. Check your network connection and retry. |
415| `Cloud sessions aren't available:` followed by a cause | Loading your organization's policy failed, and the rest of the message says how. Act on the cause it names; see [Couldn't verify your organization's policy for cloud sessions](/docs/en/errors.md#couldnt-verify-your-organizations-policy-for-cloud-sessions). |
415| `Cloud sessions aren't available:` followed by a cause | Loading your organization's policy failed, and the rest of the message says how. Act on the cause it names; see [Couldn't verify your organization's policy for cloud sessions](https://code.claude.com/docs/en/errors.md#couldnt-verify-your-organizations-policy-for-cloud-sessions). |
416416| `Attaching to an existing cloud session is not enabled for your account.` | You ran `--cloud <session-id>` without `-p`. Send the message with `claude -p "your message" --cloud <session-id>`. |
417417| `Session not found: <id>` | The ID or URL doesn't match a session you can access. Check it against the session's claude.ai/code URL. |
418418| `cloud session <id> is archived and cannot accept new messages` | The session has been archived. Start a new session instead. |
from line 419
419419
420420### Environment expired
421421
422Cloud sessions stop after a period of inactivity and the session's VM is reclaimed. A session counts as inactive while it waits for you to approve an [MCP connector](/docs/en/cloud-environments.md#network-access) tool call or to sign in to an MCP server, and it can expire during that wait.
422Cloud sessions stop after a period of inactivity and the session's VM is reclaimed. A session counts as inactive while it waits for you to approve an [MCP connector](https://code.claude.com/docs/en/cloud-environments.md#network-access) tool call or to sign in to an MCP server, and it can expire during that wait.
423423
424424Reopen the session from [claude.ai/code](https://claude.ai/code) to provision a fresh VM:
425425
from line 426
426426* **Restored**: your conversation history
427427* **Not restored**: background work that was still running or pending when the VM was reclaimed, including:
428428 * **Shell commands**: Claude Code tells Claude which commands stopped. Ask Claude to rerun the ones you still need.
429 * **Subagents**: Claude Code tells Claude which subagents stopped, and which of those can be [resumed](/docs/en/sub-agents.md#resume-subagents) instead of started over. Ask Claude to continue their work.
430 * **Session-scoped scheduled tasks**: tasks you [scheduled in the session](/docs/en/scheduled-tasks.md) and a `/loop` waiting for its next iteration don't carry over to the reopened session. Ask Claude to schedule the tasks again, or run `/loop` again to restart the loop.
429 * **Subagents**: Claude Code tells Claude which subagents stopped, and which of those can be [resumed](https://code.claude.com/docs/en/sub-agents.md#resume-subagents) instead of started over. Ask Claude to continue their work.
430 * **Session-scoped scheduled tasks**: tasks you [scheduled in the session](https://code.claude.com/docs/en/scheduled-tasks.md) and a `/loop` waiting for its next iteration don't carry over to the reopened session. Ask Claude to schedule the tasks again, or run `/loop` again to restart the loop.
431431
432432## Limitations
433433
from line 434
434434Before relying on cloud sessions for a workflow, account for these constraints:
435435
436436* **Rate limits**: cloud sessions share rate limits with all other Claude and Claude Code usage within your account. Running multiple tasks in parallel consumes more rate limits proportionately.
437* **Time limits**: commands Claude runs and SessionStart hooks have default timeouts you can change, and a setup script is cached only when it finishes in roughly five minutes. See [Time limits](/docs/en/cloud-environments.md#time-limits)
437* **Time limits**: commands Claude runs and SessionStart hooks have default timeouts you can change, and a setup script is cached only when it finishes in roughly five minutes. See [Time limits](https://code.claude.com/docs/en/cloud-environments.md#time-limits)
438438* **Repository authentication**: you can only pull a cloud session into your terminal when you are authenticated to the same account
439* **Platform restrictions**: repository cloning and pull request creation require GitHub. Self-hosted [GitHub Enterprise Server](/docs/en/github-enterprise-server.md) instances are supported for Team and Enterprise plans. You can send a GitLab, Bitbucket, or other non-GitHub repository to a cloud session as a [local bundle](#send-local-repositories-without-github) by setting `CCR_FORCE_BUNDLE=1`, but the session can't push results back to that remote
440* **Organization IP allowlist**: cloud sessions call the Anthropic API from Anthropic-managed infrastructure, not your network, while sessions in a [self-hosted environment](/docs/en/self-hosted-environments) call it from your own network. If your organization has [IP allowlisting](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting) enabled, every Anthropic-hosted cloud session fails with an authentication error.
441 * **Code Review and scheduled tasks**: the same applies to [Code Review](/docs/en/code-review.md) and to [cloud scheduled tasks](/docs/en/routines.md) that run on Anthropic-hosted environments. A scheduled task routed to a self-hosted environment calls the API from your own network.
439* **Platform restrictions**: repository cloning and pull request creation require GitHub. Self-hosted [GitHub Enterprise Server](https://code.claude.com/docs/en/github-enterprise-server.md) instances are supported for Team and Enterprise plans. You can send a GitLab, Bitbucket, or other non-GitHub repository to a cloud session as a [local bundle](#send-local-repositories-without-github) by setting `CCR_FORCE_BUNDLE=1`, but the session can't push results back to that remote
440* **Organization IP allowlist**: cloud sessions call the Anthropic API from Anthropic-managed infrastructure, not your network, while sessions in a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) call it from your own network. If your organization has [IP allowlisting](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting) enabled, every Anthropic-hosted cloud session fails with an authentication error.
441 * **Code Review and scheduled tasks**: the same applies to [Code Review](https://code.claude.com/docs/en/code-review.md) and to [cloud scheduled tasks](https://code.claude.com/docs/en/routines.md) that run on Anthropic-hosted environments. A scheduled task routed to a self-hosted environment calls the API from your own network.
442442 * **Getting an exemption**: contact [Anthropic support](https://support.claude.com/) to exempt Anthropic-hosted services from your organization's IP allowlist.
443443
444444## Related resources
445445
446* [Cloud environments](/docs/en/cloud-environments.md): configure network access, environment variables, and setup scripts for cloud sessions
447* [Projects](/docs/en/claude-projects.md): one conversation where Claude coordinates parallel cloud sessions on your repositories and reports back
448* [Ultrareview](/docs/en/ultrareview.md): run a deep multi-agent code review in a cloud sandbox
449* [Cloud scheduled tasks](/docs/en/routines.md): automate work on a schedule, via API call, or in response to GitHub events
450* [Hooks configuration](/docs/en/hooks.md): run scripts at session lifecycle events
451* [All settings](/docs/en/settings-reference.md): all configuration options
452* [Security](/docs/en/security.md): isolation guarantees and data handling
453* [Data usage](/docs/en/data-usage.md): what Anthropic retains from cloud sessions
446* [Cloud environments](https://code.claude.com/docs/en/cloud-environments.md): configure network access, environment variables, and setup scripts for cloud sessions
447* [Projects](https://code.claude.com/docs/en/claude-projects.md): one conversation where Claude coordinates parallel cloud sessions on your repositories and reports back
448* [Ultrareview](https://code.claude.com/docs/en/ultrareview.md): run a deep multi-agent code review in a cloud sandbox
449* [Cloud scheduled tasks](https://code.claude.com/docs/en/routines.md): automate work on a schedule, via API call, or in response to GitHub events
450* [Hooks configuration](https://code.claude.com/docs/en/hooks.md): run scripts at session lifecycle events
451* [All settings](https://code.claude.com/docs/en/settings-reference.md): all configuration options
452* [Security](https://code.claude.com/docs/en/security.md): isolation guarantees and data handling
453* [Data usage](https://code.claude.com/docs/en/data-usage.md): what Anthropic retains from cloud sessions
454454* [Claude Tag](https://claude.com/docs/claude-tag/overview): an organization-managed @Claude in Slack that runs on the same cloud infrastructure
455455
claude-platform-on-aws Changed · +10 / -10 lines
from line 4
44
55Claude Platform on AWS is the Anthropic-operated Claude API with AWS authentication, IAM access control, and AWS Marketplace billing. Requests reach Anthropic's API directly, so you get the same models and API features as the [Claude API](https://platform.claude.com/docs) on the same release schedule. You authenticate with AWS credentials or a workspace API key, and you pay through AWS Marketplace.
66
7Client-side features that Claude Code turns on through Anthropic's feature-flag service are off by default, and the [advisor tool](/docs/en/advisor.md) isn't available. See the [feature availability matrix](/docs/en/feature-availability.md#summary-by-provider) for the full list.
7Client-side features that Claude Code turns on through Anthropic's feature-flag service are off by default, and the [advisor tool](https://code.claude.com/docs/en/advisor.md) isn't available. See the [feature availability matrix](https://code.claude.com/docs/en/feature-availability.md#summary-by-provider) for the full list.
88
99Use this guide to point Claude Code at a workspace you've already provisioned through Claude Platform on AWS. For the AWS subscription and workspace setup that comes before this, see the [Claude Platform on AWS documentation](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws).
1010
from line 43
4343
4444For CI and automation, give the runner an IAM role with permission to invoke the Anthropic service and set `AWS_REGION`. The credential chain picks the role up automatically.
4545
46If your SSO credentials expire mid-session, configure [`awsAuthRefresh`](/docs/en/amazon-bedrock#advanced-credential-configuration) so Claude Code re-runs your login command and retries instead of failing. Add the command to your [settings file](/docs/en/settings.md), such as `~/.claude/settings.json`:
46If your SSO credentials expire mid-session, configure [`awsAuthRefresh`](https://code.claude.com/docs/en/amazon-bedrock#advanced-credential-configuration) so Claude Code re-runs your login command and retries instead of failing. Add the command to your [settings file](https://code.claude.com/docs/en/settings.md), such as `~/.claude/settings.json`:
4747
4848```json theme={null}
4949{
from line 65
6565
6666The key is sent as `x-api-key` and takes precedence over SigV4, so any AWS credentials in your environment are ignored. API keys from a separate Claude Console organization won't work here.
6767
68Treat workspace API keys like any other production credential. The [user settings file](/docs/en/settings.md) `env` block is a convenient way to scope the key to your machine without exporting it globally.
68Treat workspace API keys like any other production credential. The [user settings file](https://code.claude.com/docs/en/settings.md) `env` block is a convenient way to scope the key to your machine without exporting it globally.
6969
7070> [!NOTE]
7171>
from line 83
8383
8484`ANTHROPIC_AWS_WORKSPACE_ID` is required. Claude Code sends it on every request as the `anthropic-workspace-id` header. Replace the example `wrkspc_01ABCDEFGHIJKLMN` value with your own workspace ID from your Claude Platform on AWS setup.
8585
86Claude Code computes the base URL as `https://aws-external-anthropic.{region}.api.aws` from the AWS region, which it resolves with the [same precedence as Amazon Bedrock](/docs/en/amazon-bedrock.md#3-configure-claude-code). To override the URL directly, set `ANTHROPIC_AWS_BASE_URL`.
86Claude Code computes the base URL as `https://aws-external-anthropic.{region}.api.aws` from the AWS region, which it resolves with the [same precedence as Amazon Bedrock](https://code.claude.com/docs/en/amazon-bedrock.md#3-configure-claude-code). To override the URL directly, set `ANTHROPIC_AWS_BASE_URL`.
8787
8888Claude Platform on AWS is opt-in even when AWS credentials are present in your environment. Amazon Bedrock and Microsoft Foundry take precedence in provider routing, so unset `CLAUDE_CODE_USE_BEDROCK` and `CLAUDE_CODE_USE_FOUNDRY` if they're set.
8989
from line 102
102102export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
103103```
104104
105For the full list of model IDs and aliases, see [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview). For other model-related variables, see [Model configuration](/docs/en/model-config.md).
105For the full list of model IDs and aliases, see [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview). For other model-related variables, see [Model configuration](https://code.claude.com/docs/en/model-config.md).
106106
107[Prompt caching](/docs/en/prompt-caching.md) is enabled automatically. To request a 1-hour cache TTL instead of the 5-minute default, set `ENABLE_PROMPT_CACHING_1H=1`. The API bills 1-hour cache writes at a higher rate. See [prompt caching pricing](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing) for the rates.
107[Prompt caching](https://code.claude.com/docs/en/prompt-caching.md) is enabled automatically. To request a 1-hour cache TTL instead of the 5-minute default, set `ENABLE_PROMPT_CACHING_1H=1`. The API bills 1-hour cache writes at a higher rate. See [prompt caching pricing](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing) for the rates.
108108
109To set different TTLs for your main conversation and for the requests Claude Code makes outside it, [choose the TTL yourself](/docs/en/prompt-caching.md#choose-the-ttl-yourself).
109To set different TTLs for your main conversation and for the requests Claude Code makes outside it, [choose the TTL yourself](https://code.claude.com/docs/en/prompt-caching.md#choose-the-ttl-yourself).
110110
111111### 4. Launch and verify
112112
from line 120
120120
121121## Use the Agent SDK
122122
123The [Agent SDK](/docs/en/agent-sdk/overview.md) reads the same environment variables as the CLI, so any program that spawns the Claude Code subprocess can target Claude Platform on AWS by exporting `CLAUDE_CODE_USE_ANTHROPIC_AWS`, `ANTHROPIC_AWS_WORKSPACE_ID`, and either `ANTHROPIC_AWS_API_KEY` or AWS credentials before the call.
123The [Agent SDK](https://code.claude.com/docs/en/agent-sdk/overview.md) reads the same environment variables as the CLI, so any program that spawns the Claude Code subprocess can target Claude Platform on AWS by exporting `CLAUDE_CODE_USE_ANTHROPIC_AWS`, `ANTHROPIC_AWS_WORKSPACE_ID`, and either `ANTHROPIC_AWS_API_KEY` or AWS credentials before the call.
124124
125125```typescript theme={null}
126126import { query } from "@anthropic-ai/claude-agent-sdk";
from line 134
134134}
135135```
136136
137This example relies on the ambient AWS credential chain for SigV4. To authenticate with a workspace API key instead, set `ANTHROPIC_AWS_API_KEY` the same way. For the broader Agent SDK surface, see [Agent SDK overview](/docs/en/agent-sdk/overview.md).
137This example relies on the ambient AWS credential chain for SigV4. To authenticate with a workspace API key instead, set `ANTHROPIC_AWS_API_KEY` the same way. For the broader Agent SDK surface, see [Agent SDK overview](https://code.claude.com/docs/en/agent-sdk/overview.md).
138138
139139## Route through a corporate proxy
140140
141To route traffic through a proxy or [LLM gateway](/docs/en/llm-gateway), set `ANTHROPIC_AWS_BASE_URL` to the proxy's address. Claude Code sends requests to that URL with the same workspace and authentication headers, so any gateway that forwards them unchanged works.
141To route traffic through a proxy or [LLM gateway](https://code.claude.com/docs/en/llm-gateway), set `ANTHROPIC_AWS_BASE_URL` to the proxy's address. Claude Code sends requests to that URL with the same workspace and authentication headers, so any gateway that forwards them unchanged works.
142142
143143```bash theme={null}
144144export CLAUDE_CODE_USE_ANTHROPIC_AWS=1
claude-projects Changed · +53 / -53 lines
from line 4
44
55> [!NOTE]
66>
7> Projects are in public beta on Pro and Max plans and rolling out gradually. The rollout started with accounts that have used [cloud sessions](/docs/en/claude-code-on-the-web.md) and don't have existing projects in claude.ai chat or Cowork. Projects aren't offered on Team or Enterprise plans yet.
7> Projects are in public beta on Pro and Max plans and rolling out gradually. The rollout started with accounts that have used [cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md) and don't have existing projects in claude.ai chat or Cowork. Projects aren't offered on Team or Enterprise plans yet.
88>
9> If you don't see **Projects** in the sidebar at [claude.ai/code](https://claude.ai/code) or in the Code tab of the [desktop app](/docs/en/desktop.md), check under **More** there. If it's missing there too, the rollout hasn't reached your account yet. You can [join the waitlist](https://claude.com/form/projects), and see [Run agents in parallel](/docs/en/agents.md) for what you can use in the meantime.
9> If you don't see **Projects** in the sidebar at [claude.ai/code](https://claude.ai/code) or in the Code tab of the [desktop app](https://code.claude.com/docs/en/desktop.md), check under **More** there. If it's missing there too, the rollout hasn't reached your account yet. You can [join the waitlist](https://claude.com/form/projects), and see [Run agents in parallel](https://code.claude.com/docs/en/agents.md) for what you can use in the meantime.
1010
1111A project is one ongoing conversation where Claude coordinates a stream of related work for you. You tell it what needs doing and it starts a thread for each task.
1212
13Each thread is usually a [cloud session](/docs/en/claude-code-on-the-web.md): Claude Code running in the cloud rather than on your machine. When a task needs something only your computer has, you can ask Claude to [run that thread on your computer](#run-a-thread-on-your-own-computer) instead of in the cloud, through [Remote Control](/docs/en/remote-control.md). Threads run in parallel, and you can check on them and steer them from your phone. Cloud threads keep going after you close your laptop, while a thread on your computer runs only while that computer is awake.
13Each thread is usually a [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md): Claude Code running in the cloud rather than on your machine. When a task needs something only your computer has, you can ask Claude to [run that thread on your computer](#run-a-thread-on-your-own-computer) instead of in the cloud, through [Remote Control](https://code.claude.com/docs/en/remote-control.md). Threads run in parallel, and you can check on them and steer them from your phone. Cloud threads keep going after you close your laptop, while a thread on your computer runs only while that computer is awake.
1414
1515Without a project, running several sessions means doing the coordinating yourself: you decide what each one works on, repeat the same background at the start of each, and check back to see which finished or needs an answer. With a project, you instead:
1616
from line 29
2929* **A build or migration bigger than a session**: "Build what `docs/spec.md` describes" or "Move the app off the deprecated ORM." The work splits into threads that each take a part, decisions you ask Claude to remember early on reach the later cloud threads, and the spec changes and bugs you find during the build go into the same conversation.
3030* **Work that isn't code**: a folder of contracts or a support-ticket export you keep coming back to with new questions, such as "find the ten most common integration mistakes in these tickets." Upload the documents instead of adding a repository, and threads deliver each write-up as a file on the project's [**Library** tab](#see-what-needs-you-in-overview).
3131
32In any of them you can send a batch of tasks, tell Claude to start without asking you to confirm, and walk away. When you're back, you can find the threads that need you under [**Waiting on you**](#see-what-needs-you-in-overview). You can also ask Claude to put part of the work on a schedule as a [cloud scheduled task](/docs/en/routines.md). If one of these is your situation, [create a project](#create-a-project).
32In any of them you can send a batch of tasks, tell Claude to start without asking you to confirm, and walk away. When you're back, you can find the threads that need you under [**Waiting on you**](#see-what-needs-you-in-overview). You can also ask Claude to put part of the work on a schedule as a [cloud scheduled task](https://code.claude.com/docs/en/routines.md). If one of these is your situation, [create a project](#create-a-project).
3333
3434### When something else fits better
3535
3636A project still fits when only some tasks need your machine. Cloud threads work on GitHub repositories and on the files, folders, and Google Drive folders you upload to the project, and for the occasional task that needs a local database or a tool on your computer, you can ask Claude to [run that task's thread on your computer](#run-a-thread-on-your-own-computer). Something other than a project fits better in these cases:
3737
38* **One task that fits in a session**: "Fix the flaky login test." Start a [cloud session](/docs/en/claude-code-on-the-web.md) yourself.
39* **Work where every task needs your machine**: a local database, a device emulator, or an API behind your VPN. Use a local session, or [agent view](/docs/en/agent-view.md) to run several at once. If the work only needs local files, upload them to the project instead.
40* **One task that repeats on a schedule with no conversation around it**: "Post a dependency report every Monday." Create a [cloud scheduled task](/docs/en/routines.md) on its own.
38* **One task that fits in a session**: "Fix the flaky login test." Start a [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md) yourself.
39* **Work where every task needs your machine**: a local database, a device emulator, or an API behind your VPN. Use a local session, or [agent view](https://code.claude.com/docs/en/agent-view.md) to run several at once. If the work only needs local files, upload them to the project instead.
40* **One task that repeats on a schedule with no conversation around it**: "Post a dependency report every Monday." Create a [cloud scheduled task](https://code.claude.com/docs/en/routines.md) on its own.
4141* **Several people giving Claude work and steering it together in a Slack channel**: see [Claude Tag](https://claude.com/docs/claude-tag/overview).
4242
4343A project draws on the same plan limits as your other Claude Code sessions and uses them faster. [Usage and cost](#usage-and-cost) covers what draws on your plan and how to keep it down.
from line 75
7575Before you create a project, check your plan, your GitHub setup, and what the work needs to reach:
7676
7777* **Plan**: you're on Pro or Max, and **Projects** shows in your sidebar, directly or under **More**. Select **Projects** and check that it offers **New project** or **Get started**.
78* **GitHub, if the project will work on code**: your code is on github.com rather than GitHub Enterprise Server, GitLab, or Bitbucket, your connected GitHub account has push access to it, and the Claude GitHub App is installed on it. If you connected GitHub with [`/web-setup`](/docs/en/web-quickstart#connect-from-your-terminal), that token lets your other cloud sessions reach a repository but isn't enough for a project's cloud threads, which need the Claude GitHub App. [Set up GitHub access](#set-up-github-access) has the steps.
79* **Network access, secrets, and tools**: for cloud threads, these come from the project's [cloud environment](#choose-an-environment-for-threads). The default environment already reaches [common package registries](/docs/en/cloud-environments.md#default-allowed-domains), so check this only if the work needs other domains, a secret, or a tool that isn't preinstalled. If the work needs an MCP server, check that it shows as connected in your [claude.ai connectors](https://claude.ai/customize/connectors).
78* **GitHub, if the project will work on code**: your code is on github.com rather than GitHub Enterprise Server, GitLab, or Bitbucket, your connected GitHub account has push access to it, and the Claude GitHub App is installed on it. If you connected GitHub with [`/web-setup`](https://code.claude.com/docs/en/web-quickstart#connect-from-your-terminal), that token lets your other cloud sessions reach a repository but isn't enough for a project's cloud threads, which need the Claude GitHub App. [Set up GitHub access](#set-up-github-access) has the steps.
79* **Network access, secrets, and tools**: for cloud threads, these come from the project's [cloud environment](#choose-an-environment-for-threads). The default environment already reaches [common package registries](https://code.claude.com/docs/en/cloud-environments.md#default-allowed-domains), so check this only if the work needs other domains, a secret, or a tool that isn't preinstalled. If the work needs an MCP server, check that it shows as connected in your [claude.ai connectors](https://claude.ai/customize/connectors).
8080
8181### Start a new project from scratch
8282
from line 124
124124
125125**1. Connect your GitHub account**
126126
127If you haven't used claude.ai/code before, your first visit walks you through connecting GitHub; see [Connect GitHub](/docs/en/web-quickstart.md#connect-github). Otherwise use one of the [GitHub authentication options](/docs/en/claude-code-on-the-web.md#github-authentication-options).
127If you haven't used claude.ai/code before, your first visit walks you through connecting GitHub; see [Connect GitHub](https://code.claude.com/docs/en/web-quickstart.md#connect-github). Otherwise use one of the [GitHub authentication options](https://code.claude.com/docs/en/claude-code-on-the-web.md#github-authentication-options).
128128
129129**2. Install the Claude GitHub App on the project's repositories**
130130
from line 169
169169
170170* **Branch**: works on a new branch, started from the repository's default branch.
171171* **Pull request**: opens one when you ask, and can open one on its own for a bug fix or another concrete change.
172* **After it opens**: watches the pull request with [auto-fix](/docs/en/claude-code-on-the-web.md#auto-fix-pull-requests) turned on, whether or not auto-fix is on for your other cloud sessions. It pushes fixes when CI fails, addresses review comments, and replies in the thread when checks pass and the pull request is ready for you.
172* **After it opens**: watches the pull request with [auto-fix](https://code.claude.com/docs/en/claude-code-on-the-web.md#auto-fix-pull-requests) turned on, whether or not auto-fix is on for your other cloud sessions. It pushes fixes when CI fails, addresses review comments, and replies in the thread when checks pass and the pull request is ready for you.
173173
174174When a thread has pushed a branch or opened a pull request, its card in the conversation can show a button for the next step:
175175
from line 200
200200
201201* **Library**: the files and folders you added and the files threads produced
202202* **Pull requests**: shown once threads have opened any
203* **Scheduled tasks**: the [cloud scheduled tasks](/docs/en/routines.md) Claude set up from this project
203* **Scheduled tasks**: the [cloud scheduled tasks](https://code.claude.com/docs/en/routines.md) Claude set up from this project
204204
205205### Open a thread when you need control
206206
from line 213
213213
214214### Choose models and let Claude manage context
215215
216Set models and effort in **Project settings > General**. A new project runs Opus everywhere, with high [effort](/docs/en/model-config.md#adjust-effort-level) for threads and low effort for the conversation:
216Set models and effort in **Project settings > General**. A new project runs Opus everywhere, with high [effort](https://code.claude.com/docs/en/model-config.md#adjust-effort-level) for threads and low effort for the conversation:
217217
218218* **Thread model** and **Thread effort** apply to threads. To use a different model for one task, ask for it in the task; for a thread already running, use that thread's model picker.
219219* **Coordinator model** and **Coordinator effort** apply to Claude in the project conversation.
from line 237
237237
238238### Unblock a thread waiting on approval
239239
240Threads run in [auto mode](/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) when the thread's model supports it, so most tool calls run without asking you. When a thread needs your approval, the prompt is inside that thread and the thread waits until you answer it there. Telling Claude in the project conversation to go ahead doesn't reach it.
240Threads run in [auto mode](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) when the thread's model supports it, so most tool calls run without asking you. When a thread needs your approval, the prompt is inside that thread and the thread waits until you answer it there. Telling Claude in the project conversation to go ahead doesn't reach it.
241241
242Each approval covers that prompt, or the rest of that thread if you choose the broader option. Cloud threads don't read [permission rules](/docs/en/permissions.md) from a repository's `.claude/settings.json`, so you rely on auto mode and on the approvals you give inside each thread.
242Each approval covers that prompt, or the rest of that thread if you choose the broader option. Cloud threads don't read [permission rules](https://code.claude.com/docs/en/permissions.md) from a repository's `.claude/settings.json`, so you rely on auto mode and on the approvals you give inside each thread.
243243
244244### Run a thread on your own computer
245245
246When a task needs something only your computer has, such as a local database, a device emulator, or an API behind your VPN, ask Claude to run the thread for that task on your computer instead of in the cloud. When you ask in the project conversation, the thread is a Claude Code session in a folder on your machine, connected through [Remote Control](/docs/en/remote-control.md). The project's other threads keep running in the cloud. Compared with a cloud thread, a thread on your computer:
246When a task needs something only your computer has, such as a local database, a device emulator, or an API behind your VPN, ask Claude to run the thread for that task on your computer instead of in the cloud. When you ask in the project conversation, the thread is a Claude Code session in a folder on your machine, connected through [Remote Control](https://code.claude.com/docs/en/remote-control.md). The project's other threads keep running in the cloud. Compared with a cloud thread, a thread on your computer:
247247
248248* Works with the files, tools, MCP servers, and Claude Code settings on that machine, including its hooks and permission rules, instead of the project's cloud environment
249249* Starts with the project's instructions, but not with its memory files loaded
from line 254
254254On the computer that has the folder the task needs, make it available through Remote Control in one of two ways. Both need Claude Code v2.1.280 or later on that computer.
255255
256256* **In the Claude desktop app**: open **Settings > Claude Code**, turn on **Use this computer from your phone and claude.ai**, and add the folder to the list under that switch. Threads can run on this computer while the app is open.
257* **In a terminal**: run `claude remote-control` in the folder and leave it running. In a git repository, add `--spawn worktree` to give each thread there its own [worktree](/docs/en/worktrees.md) instead of the folder itself.
257* **In a terminal**: run `claude remote-control` in the folder and leave it running. In a git repository, add `--spawn worktree` to give each thread there its own [worktree](https://code.claude.com/docs/en/worktrees.md) instead of the folder itself.
258258
259259**2. Ask for the task with Work locally**
260260
from line 264
264264
265265Claude answers with an **Allow Claude to work in a folder on your device** card. Pick the folder if you connected several. Two threads working in one folder at the same time can overwrite each other's changes, so if the folder is a git repository, you can turn on **Worktree** in the folder's options to give this thread its own worktree instead. Then click **Allow once**.
266266
267The thread runs in [auto mode](/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode), so Claude runs commands and edits files in that folder without asking you each time. If auto mode is unavailable or turned off in that computer's Claude Code, the thread runs without it, and any permission prompt it raises waits for your answer in the thread, as [Unblock a thread waiting on approval](#unblock-a-thread-waiting-on-approval) describes.
267The thread runs in [auto mode](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode), so Claude runs commands and edits files in that folder without asking you each time. If auto mode is unavailable or turned off in that computer's Claude Code, the thread runs without it, and any permission prompt it raises waits for your answer in the thread, as [Unblock a thread waiting on approval](#unblock-a-thread-waiting-on-approval) describes.
268268
269269While the thread runs, a laptop icon in its header shows whether your computer is connected. Click it to see which folder the thread is using or to turn the connection off. The thread pauses while that computer is asleep, and stops if the desktop app or `claude remote-control` quits. [Lost contact with your folder](#lost-contact-with-your-folder) covers getting it going again. In the desktop app, turn on **Keep this computer awake for Remote Control** under **Settings > Claude Code** to stop the computer from sleeping on its own.
270270
271A project can't run a thread on your computer while [**Require trusted devices**](/docs/en/remote-control.md#trusted-devices) is on for your account.
271A project can't run a thread on your computer while [**Require trusted devices**](https://code.claude.com/docs/en/remote-control.md#trusted-devices) is on for your account.
272272
273273## Give a project standing context
274274
from line 280
280280| Project instructions | Text sent to each new thread and to Claude in the project conversation, up to 16,000 characters. [Write project instructions](#write-project-instructions) covers what to put in it | **Project settings > Memory > Project instructions**, or ask Claude to change the instructions |
281281| Repositories, files, and environment | The repositories every cloud thread clones, the folders and files it can read under `/mnt/project-files`, and the cloud environment it runs in | Repositories and environment in **Project settings > Environment**, or ask Claude in the conversation to add a repository to the project. [Files and folders](#add-files-and-folders) from **Add** on the **Library** tab in **Overview** |
282282
283**Project settings > Memory** lists these files under **Auto memory**, because Claude writes them itself as it works in the project. They're separate from the [auto memory](/docs/en/memory.md) Claude Code keeps on your machine, even though both use a `MEMORY.md` index. Project memory is also separate from the `CLAUDE.md` files in the project's repositories. Each cloud thread still reads those `CLAUDE.md` files from its clone when it starts, so put instructions about a repository in its `CLAUDE.md` and notes about the project in project memory.
283**Project settings > Memory** lists these files under **Auto memory**, because Claude writes them itself as it works in the project. They're separate from the [auto memory](https://code.claude.com/docs/en/memory.md) Claude Code keeps on your machine, even though both use a `MEMORY.md` index. Project memory is also separate from the `CLAUDE.md` files in the project's repositories. Each cloud thread still reads those `CLAUDE.md` files from its clone when it starts, so put instructions about a repository in its `CLAUDE.md` and notes about the project in project memory.
284284
285285### Write project instructions
286286
from line 333
333333
334334| In each repository | In a cloud thread |
335335| :- | :- |
336| `CLAUDE.md`, `.claude/CLAUDE.md`, and `.claude/rules/` at the repository root | Loaded from every repository when the thread starts. `CLAUDE.md` files in subdirectories and [path-specific rules](/docs/en/memory.md#path-specific-rules) aren't loaded |
336| `CLAUDE.md`, `.claude/CLAUDE.md`, and `.claude/rules/` at the repository root | Loaded from every repository when the thread starts. `CLAUDE.md` files in subdirectories and [path-specific rules](https://code.claude.com/docs/en/memory.md#path-specific-rules) aren't loaded |
337337| Skills under `.claude/skills/` | Not loaded. Enable the skill for your claude.ai account instead, as [Get skills, plugins, connectors, and tools into threads](#get-skills-plugins-connectors-and-tools-into-threads) describes |
338338| Agents and commands under `.claude/` | Not loaded. To use them, [run the thread on your own computer](#run-a-thread-on-your-own-computer) |
339339| MCP servers in `.mcp.json` | Not loaded. Use the connectors on your claude.ai account instead, as [Get skills, plugins, connectors, and tools into threads](#get-skills-plugins-connectors-and-tools-into-threads) describes |
from line 344
344344
345345### Choose an environment for threads
346346
347Every new cloud thread starts in the project's [cloud environment](/docs/en/cloud-environments.md). The environment sets which domains threads can reach, which environment variables they have, which network secrets are added to their requests, and what the setup script installs before Claude starts. Cloud threads use a default Anthropic-hosted environment until you pick one in **Project settings > Environment**.
347Every new cloud thread starts in the project's [cloud environment](https://code.claude.com/docs/en/cloud-environments.md). The environment sets which domains threads can reach, which environment variables they have, which network secrets are added to their requests, and what the setup script installs before Claude starts. Cloud threads use a default Anthropic-hosted environment until you pick one in **Project settings > Environment**.
348348
349If cloud threads need to reach an internal API or a private package registry, or need a token your machine normally holds, change the environment rather than the project: see [Network access](/docs/en/cloud-environments.md#network-access), [Add network secrets](/docs/en/cloud-environments.md#add-network-secrets), and [Setup scripts](/docs/en/cloud-environments.md#setup-scripts).
349If cloud threads need to reach an internal API or a private package registry, or need a token your machine normally holds, change the environment rather than the project: see [Network access](https://code.claude.com/docs/en/cloud-environments.md#network-access), [Add network secrets](https://code.claude.com/docs/en/cloud-environments.md#add-network-secrets), and [Setup scripts](https://code.claude.com/docs/en/cloud-environments.md#setup-scripts).
350350
351351### Get skills, plugins, connectors, and tools into threads
352352
353Cloud threads don't have the skills, MCP servers, plugins, and tools installed only on your machine. A thread that Claude runs on your machine through [Remote Control](/docs/en/remote-control.md) uses what's installed there. To make each of these available to cloud threads:
353Cloud threads don't have the skills, MCP servers, plugins, and tools installed only on your machine. A thread that Claude runs on your machine through [Remote Control](https://code.claude.com/docs/en/remote-control.md) uses what's installed there. To make each of these available to cloud threads:
354354
355* Skills: enable them for your claude.ai account, and cloud threads load the [skills you enable there](/docs/en/skills.md#skills-in-cowork-and-cloud-sessions), apart from [some threads in a self-hosted environment](/docs/en/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled). Skills committed to a repository's `.claude/skills/` don't load in cloud threads.
356* Plugins: add them in **Project settings > Plugins**; they load into each new cloud thread. Plugins that a repository declares in its `.claude/settings.json` [don't load in cloud threads](/docs/en/cloud-environments.md#what-carries-over-from-your-setup).
357* MCP servers: cloud threads get their MCP tools from the connectors on your claude.ai account, which are MCP servers you connect once at [claude.ai/customize/connectors](https://claude.ai/customize/connectors). Every cloud thread can use all of them with no per-project setup. The project conversation itself has no connectors, so send work that needs one as a task for a cloud thread. [How connectors reach Claude Code](/docs/en/mcp.md#how-connectors-reach-claude-code) lists the rules for cloud sessions and the settings that turn connectors off.
358* Command-line tools and packages: install them in the environment's [setup script](/docs/en/cloud-environments.md#setup-scripts).
355* Skills: enable them for your claude.ai account, and cloud threads load the [skills you enable there](https://code.claude.com/docs/en/skills.md#skills-in-cowork-and-cloud-sessions), apart from [some threads in a self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled). Skills committed to a repository's `.claude/skills/` don't load in cloud threads.
356* Plugins: add them in **Project settings > Plugins**; they load into each new cloud thread. Plugins that a repository declares in its `.claude/settings.json` [don't load in cloud threads](https://code.claude.com/docs/en/cloud-environments.md#what-carries-over-from-your-setup).
357* MCP servers: cloud threads get their MCP tools from the connectors on your claude.ai account, which are MCP servers you connect once at [claude.ai/customize/connectors](https://claude.ai/customize/connectors). Every cloud thread can use all of them with no per-project setup. The project conversation itself has no connectors, so send work that needs one as a task for a cloud thread. [How connectors reach Claude Code](https://code.claude.com/docs/en/mcp.md#how-connectors-reach-claude-code) lists the rules for cloud sessions and the settings that turn connectors off.
358* Command-line tools and packages: install them in the environment's [setup script](https://code.claude.com/docs/en/cloud-environments.md#setup-scripts).
359359
360360To see which connectors a running cloud thread has at claude.ai/code, open the thread and select **Connectors** from the **+** menu beside its message box. Turning a connector off there removes it from that thread and saves that as your account default, so new threads and claude.ai chats start without it until you turn it back on. A cloud thread picks up a connector you add or reconnect after the next message you send it.
361361
from line 368
368368| Setting | Section | What it controls |
369369| :- | :- | :- |
370370| Name, icon, and goal | General | The project's name and icon in the sidebar, and its one-line goal |
371| Coordinator model and effort | General | The model and [effort level](/docs/en/model-config.md#adjust-effort-level) for Claude in the project conversation |
371| Coordinator model and effort | General | The model and [effort level](https://code.claude.com/docs/en/model-config.md#adjust-effort-level) for Claude in the project conversation |
372372| Thread model and effort | General | The model and effort level for threads |
373373| Project instructions | Memory | [Standing rules](#give-a-project-standing-context) every new thread receives |
374374| Project repositories | Environment | The repositories new cloud threads clone |
from line 389
389389
390390## Usage and cost
391391
392Project usage counts against the same [plan limits](/docs/en/errors.md#youve-hit-your-session-limit) as your other Claude Code sessions, and a project can't spend past those limits on its own.
392Project usage counts against the same [plan limits](https://code.claude.com/docs/en/errors.md#youve-hit-your-session-limit) as your other Claude Code sessions, and a project can't spend past those limits on its own.
393393
394394A thread that reaches your plan's limit waits and continues on its own when the limit resets, so work you left running starts using your next usage window without a message from you. [A thread hit the usage limit](#usage-limit-reached) covers what you see, how to stop it, and the one case that doesn't wait.
395395
396Work goes past your plan's limits only if you have turned on [usage credits](/docs/en/costs.md#add-usage-credits-to-your-subscription) for your account. A thread can't turn them on for you.
396Work goes past your plan's limits only if you have turned on [usage credits](https://code.claude.com/docs/en/costs.md#add-usage-credits-to-your-subscription) for your account. A thread can't turn them on for you.
397397
398398### What draws on your plan
399399
from line 409
409409
410410Open **Usage** in **Project settings** to see token use by thread and by model, and how much went to the project conversation. To bring it down:
411411
412* A follow-up routed to a thread that has been idle longer than the [cache lifetime](/docs/en/prompt-caching.md#cache-lifetime), an hour on Pro and Max within your plan's limits, re-reads that thread's whole conversation before doing anything. For new work, asking Claude to start a fresh thread can use less than reviving a large old one.
412* A follow-up routed to a thread that has been idle longer than the [cache lifetime](https://code.claude.com/docs/en/prompt-caching.md#cache-lifetime), an hour on Pro and Max within your plan's limits, re-reads that thread's whole conversation before doing anything. For new work, asking Claude to start a fresh thread can use less than reviving a large old one.
413413* For work that doesn't need the largest model, [choose a smaller model or a lower effort level](#choose-models-and-let-claude-manage-context) for threads, the conversation, or both.
414414* Ask Claude in the project conversation to run fewer threads at a time, or to answer small questions itself instead of starting a thread.
415415
from line 418
418418Several Claude Code features let more than one session work at the same time, so running work in parallel is not by itself what a project is for. In a project, Claude starts and tracks the sessions instead of you, and each one starts from the same instructions. This is how each neighboring feature connects to a project:
419419
420420* **Claude Tag**: [Claude Tag](https://claude.com/docs/claude-tag/overview) is Claude in your team's Slack channels, on Team and Enterprise plans. Anyone in a channel can give it work, everyone in the channel sees and steers it, and it uses connections an admin set up for that channel. A project is yours alone: you're the only one who sends it work or sees its threads, it uses your own GitHub access and connectors, and it's on Pro and Max. [How Claude Tag differs from Cowork and Claude Code](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code) has the side-by-side.
421* **Cloud sessions**: every thread is a [cloud session](/docs/en/claude-code-on-the-web.md) unless you ask Claude to run it on your machine. Either way, Claude starts and tracks it instead of you. You can also bring the work of a cloud session you started yourself into a project: choose [**Move to project**](#start-from-an-existing-cloud-session) in that session's sidebar menu.
422* **Scheduled tasks**: when you ask for scheduled work in a project, Claude creates a [cloud scheduled task](/docs/en/routines.md) that runs as threads in that project and appears on its **Scheduled tasks** tab. Scheduled tasks you create outside a project keep working on their own.
423* **Remote Control**: [Remote Control](/docs/en/remote-control.md) connects claude.ai to a Claude Code session running on your machine. When you ask Claude in a project to run a thread on your computer, the project [uses Remote Control to do it](#run-a-thread-on-your-own-computer).
424* **Local sessions and agent view**: a session you start yourself in your terminal, IDE, or the desktop app's local environment can't be added to a project. [Agent view](/docs/en/agent-view.md) is a screen for tracking several local sessions side by side, and you still start each one and give it its task yourself.
425* **Worktrees**: a [worktree](/docs/en/worktrees.md) gives each local session its own working copy of a repository. Cloud threads don't need them: each clones its repositories into its own cloud sandbox and works on its own branch.
426* **Agent teams**: an [agent team](/docs/en/agent-teams.md) is one session that starts teammate sessions for a single task, on your machine or inside a cloud session, and ends with that task.
427* **Subagents**: a [subagent](/docs/en/sub-agents.md) runs inside one session, does a side task in its own context window, and returns a summary to that session. A project's threads are whole sessions that Claude starts and that report back to the project conversation, and a thread can still use subagents for its own side tasks.
421* **Cloud sessions**: every thread is a [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md) unless you ask Claude to run it on your machine. Either way, Claude starts and tracks it instead of you. You can also bring the work of a cloud session you started yourself into a project: choose [**Move to project**](#start-from-an-existing-cloud-session) in that session's sidebar menu.
422* **Scheduled tasks**: when you ask for scheduled work in a project, Claude creates a [cloud scheduled task](https://code.claude.com/docs/en/routines.md) that runs as threads in that project and appears on its **Scheduled tasks** tab. Scheduled tasks you create outside a project keep working on their own.
423* **Remote Control**: [Remote Control](https://code.claude.com/docs/en/remote-control.md) connects claude.ai to a Claude Code session running on your machine. When you ask Claude in a project to run a thread on your computer, the project [uses Remote Control to do it](#run-a-thread-on-your-own-computer).
424* **Local sessions and agent view**: a session you start yourself in your terminal, IDE, or the desktop app's local environment can't be added to a project. [Agent view](https://code.claude.com/docs/en/agent-view.md) is a screen for tracking several local sessions side by side, and you still start each one and give it its task yourself.
425* **Worktrees**: a [worktree](https://code.claude.com/docs/en/worktrees.md) gives each local session its own working copy of a repository. Cloud threads don't need them: each clones its repositories into its own cloud sandbox and works on its own branch.
426* **Agent teams**: an [agent team](https://code.claude.com/docs/en/agent-teams.md) is one session that starts teammate sessions for a single task, on your machine or inside a cloud session, and ends with that task.
427* **Subagents**: a [subagent](https://code.claude.com/docs/en/sub-agents.md) runs inside one session, does a side task in its own context window, and returns a summary to that session. A project's threads are whole sessions that Claude starts and that report back to the project conversation, and a thread can still use subagents for its own side tasks.
428428* **Projects in claude.ai chat and Cowork**: the [earlier Projects experience](https://support.claude.com/en/articles/9517075-what-are-projects), which groups conversations and reference files without threads or a coordinator. Those projects keep working as they do today until the redesigned experience reaches them.
429429
430[Run agents in parallel](/docs/en/agents.md) compares these options side by side.
430[Run agents in parallel](https://code.claude.com/docs/en/agents.md) compares these options side by side.
431431
432432## Limitations
433433
434434* Projects are available at claude.ai/code, in the desktop app, and in the Claude mobile app, not in the terminal CLI, the VS Code extension, or the JetBrains plugin, and not through Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry.
435* Project threads are [cloud sessions](/docs/en/claude-code-on-the-web.md), or sessions on your own machine through [Remote Control](/docs/en/remote-control.md), with Anthropic as the model provider in both cases. [Security](/docs/en/security.md) and [Data usage](/docs/en/data-usage.md) cover how cloud sessions are isolated and what's retained, and [Connection and security](/docs/en/remote-control.md#connection-and-security) covers how a thread on your machine connects and what's stored.
435* Project threads are [cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md), or sessions on your own machine through [Remote Control](https://code.claude.com/docs/en/remote-control.md), with Anthropic as the model provider in both cases. [Security](https://code.claude.com/docs/en/security.md) and [Data usage](https://code.claude.com/docs/en/data-usage.md) cover how cloud sessions are isolated and what's retained, and [Connection and security](https://code.claude.com/docs/en/remote-control.md#connection-and-security) covers how a thread on your machine connects and what's stored.
436436* You can't add a session you started yourself on your machine to a project. A project reaches your machine only by [running a thread there through Remote Control](#run-a-thread-on-your-own-computer), and that section lists what it needs.
437437* A cloud thread's sandbox pauses between turns and resumes when the thread continues. If the sandbox can't be resumed, the thread continues from a fresh clone, so uncommitted changes can be lost. On long tasks, ask Claude to commit and push work in progress.
438438* A project belongs to one user. You can't share a project or its threads with another user, and thread transcripts don't have the share option other cloud sessions have. There are no organization-level controls for projects during the beta.
from line 444
444444
445445### A thread looks stuck
446446
447Claude doesn't post each step a thread takes, so a thread that shows as running with no new messages in the project conversation is usually still working. A new cloud thread also provisions its [cloud environment](/docs/en/cloud-environments.md) before Claude begins, so its first update takes a moment. Open the thread to read its transcript. If the thread is waiting on a permission prompt, answer it there.
447Claude doesn't post each step a thread takes, so a thread that shows as running with no new messages in the project conversation is usually still working. A new cloud thread also provisions its [cloud environment](https://code.claude.com/docs/en/cloud-environments.md) before Claude begins, so its first update takes a moment. Open the thread to read its transcript. If the thread is waiting on a permission prompt, answer it there.
448448
449449### Threads guessed or stalled instead of asking
450450
from line 472
472472
473473When a thread or the project conversation reaches your plan's five-hour or weekly limit, it keeps retrying on its own and continues when the limit resets. A thread that a scheduled task started doesn't wait: its turn stops with a limit error, and you send it a message after the limit resets.
474474
475While a thread waits, it shows **Service is busy** with "Claude is still retrying and will continue automatically." You don't need to do anything for the work to continue. If you'd rather it not use your next usage window, click **Stop** in the thread, or [pause the project](#pause-archive-or-delete-a-project) to hold every thread. [Usage limit errors](/docs/en/errors.md#youve-hit-your-session-limit) explain the limits and when they reset.
475While a thread waits, it shows **Service is busy** with "Claude is still retrying and will continue automatically." You don't need to do anything for the work to continue. If you'd rather it not use your next usage window, click **Stop** in the thread, or [pause the project](#pause-archive-or-delete-a-project) to hold every thread. [Usage limit errors](https://code.claude.com/docs/en/errors.md#youve-hit-your-session-limit) explain the limits and when they reset.
476476
477477### Additional usage credits are required
478478
479A thread or the project conversation made a request your plan covers only with usage credits, such as one to a model or context size your plan doesn't include, and usage credits aren't turned on for your account. [Add usage credits to your subscription](/docs/en/costs.md#add-usage-credits-to-your-subscription) covers who can turn them on or buy them on each plan. Once credits are available, send another message to retry.
479A thread or the project conversation made a request your plan covers only with usage credits, such as one to a model or context size your plan doesn't include, and usage credits aren't turned on for your account. [Add usage credits to your subscription](https://code.claude.com/docs/en/costs.md#add-usage-credits-to-your-subscription) covers who can turn them on or buy them on each plan. Once credits are available, send another message to retry.
480480
481481### Lost contact with your folder
482482
from line 492
492492| "Unable to connect to repository" with "Claude couldn't access your repository or environment" | Your GitHub account needs push access to the repository, and the environment must still exist. Check both in **Project settings > Environment**, then retry |
493493| "Couldn't show the setup proposal" | The app you have open is older than the **Setup recommendations** Claude sent. Refresh the page or restart the desktop app, or ask Claude to propose the setup again |
494494| "The project's environment was removed" | Choose a different environment in **Project settings > Environment**; the change applies to new threads |
495| "Setup script failed" | Click **Edit setup script** on the error, fix the script in the environment, then send another message. [Setup script failed](/docs/en/web-quickstart.md#setup-script-failed) lists common causes |
495| "Setup script failed" | Click **Edit setup script** on the error, fix the script in the environment, then send another message. [Setup script failed](https://code.claude.com/docs/en/web-quickstart.md#setup-script-failed) lists common causes |
496496| "Claude ran out of context on this turn" | The thread filled its context window. If the message says the thread continues in a fresh session, it carries on by itself; otherwise ask Claude in the project conversation to start a new thread for the remaining work |
497497| "Couldn't start in" followed by your folder's name | You allowed a thread to run on your computer, but the session couldn't start there. When a line under the message gives the reason, fix that, then ask Claude to run the task again |
498498| "Claude is out of date on your device" | The computer you picked to run a thread has a Claude Code version older than v2.1.280. Update Claude Code there, or update the desktop app if that's what connects the folder, then ask Claude to run the task again |
499| "Reached the turn limit" | The thread reached the cap on agentic turns that [`CLAUDE_CODE_MAX_TURNS`](/docs/en/env-vars) sets. Send another message to continue, or raise or remove that variable where it's set |
499| "Reached the turn limit" | The thread reached the cap on agentic turns that [`CLAUDE_CODE_MAX_TURNS`](https://code.claude.com/docs/en/env-vars) sets. Send another message to continue, or raise or remove that variable where it's set |
500500
501501## Related resources
502502
503* [Use Claude Code in the cloud](/docs/en/claude-code-on-the-web.md): how the cloud sessions behind each cloud thread work, including GitHub access options and auto-fix on pull requests
504* [Configure cloud environments](/docs/en/cloud-environments.md): change what cloud threads can reach on the network, give them environment variables and network secrets, and install tools with a setup script
505* [Automate work with scheduled tasks](/docs/en/routines.md): schedules, triggers, and management for scheduled tasks, including the ones Claude creates from a project
506* [Manage multiple agents with agent view](/docs/en/agent-view.md): run and track several sessions on your own machine when the work needs tools or services only your machine can reach
503* [Use Claude Code in the cloud](https://code.claude.com/docs/en/claude-code-on-the-web.md): how the cloud sessions behind each cloud thread work, including GitHub access options and auto-fix on pull requests
504* [Configure cloud environments](https://code.claude.com/docs/en/cloud-environments.md): change what cloud threads can reach on the network, give them environment variables and network secrets, and install tools with a setup script
505* [Automate work with scheduled tasks](https://code.claude.com/docs/en/routines.md): schedules, triggers, and management for scheduled tasks, including the ones Claude creates from a project
506* [Manage multiple agents with agent view](https://code.claude.com/docs/en/agent-view.md): run and track several sessions on your own machine when the work needs tools or services only your machine can reach
507507* [Projects redesigned: from folder to conversation](https://claude.com/blog/projects-redesigned): the launch announcement, with the thinking behind making a project a conversation with Claude
508508
claude-security Changed · +22 / -22 lines
from line 4
44
55The Claude Security plugin runs a multi-agent vulnerability scan of your codebase inside a Claude Code session. A team of Claude agents maps your architecture, builds a threat model, hunts for vulnerabilities, and independently reviews every finding before writing the report. Use the plugin to scan a whole repository or [only a set of changes](#scan-only-your-changes), such as a branch's diff, a pull request's diff, or a single commit, then turn the findings you choose into patches that you review and apply yourself.
66
7The plugin runs locally in your session, uses [whichever models you have access to in Claude Code](#models-and-providers), and each scan counts toward your [usage](/docs/en/costs.md). If you want a managed service that monitors your repositories, or want to run scans on [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), see the [Claude Security](https://claude.com/product/claude-security) product, available on the Enterprise plan.
7The plugin runs locally in your session, uses [whichever models you have access to in Claude Code](#models-and-providers), and each scan counts toward your [usage](https://code.claude.com/docs/en/costs.md). If you want a managed service that monitors your repositories, or want to run scans on [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), see the [Claude Security](https://claude.com/product/claude-security) product, available on the Enterprise plan.
88
9The plugin is also distinct from the review tools already in Claude Code: the [security guidance plugin](/docs/en/security-guidance.md) reviews code as Claude writes it, [`/security-review`](/docs/en/commands#all-commands) runs a single pass over your branch, and [Code Review](/docs/en/code-review.md) reviews pull requests. For how the layers stack, see [How the plugin fits with other security tools](#how-the-plugin-fits-with-other-security-tools).
9The plugin is also distinct from the review tools already in Claude Code: the [security guidance plugin](https://code.claude.com/docs/en/security-guidance.md) reviews code as Claude writes it, [`/security-review`](https://code.claude.com/docs/en/commands#all-commands) runs a single pass over your branch, and [Code Review](https://code.claude.com/docs/en/code-review.md) reviews pull requests. For how the layers stack, see [How the plugin fits with other security tools](#how-the-plugin-fits-with-other-security-tools).
1010
1111## Prerequisites
1212
1313To run the plugin, you need:
1414
15* A paid plan, Anthropic API access, or a [third-party provider](#models-and-providers), for the [dynamic workflows](/docs/en/workflows.md) the scan uses to orchestrate its agents. On Pro, turn them on from the Dynamic workflows row in `/config`.
15* A paid plan, Anthropic API access, or a [third-party provider](#models-and-providers), for the [dynamic workflows](https://code.claude.com/docs/en/workflows.md) the scan uses to orchestrate its agents. On Pro, turn them on from the Dynamic workflows row in `/config`.
1616* Python 3.9 or later available on your `PATH` as `python3`. Check with `python3 --version`. The plugin's tooling uses only the Python standard library, so nothing is installed.
1717* Linux, macOS, or Windows.
1818* Git, for change scans and for turning findings into patches; those jobs don't support other version control systems. A full scan works in any directory, with or without version control.
from line 21
2121
2222A scan runs inside your Claude Code session. The plugin makes no model calls of its own, so there's no separate API key or provider setting to configure.
2323
24* **Model**: the agents that hunt for vulnerabilities, verify findings, and write and review patches run on [your session's model](/docs/en/sub-agents.md#choose-a-model). To change it, run [`/model`](/docs/en/model-config#setting-your-model) in your session before you start a scan. A few supporting steps, such as mapping the repository, use the [`sonnet` alias](/docs/en/model-config#model-aliases) instead.
25* **Provider**: scans run on a paid plan, with Anthropic API access, or on a [third-party provider](/docs/en/third-party-integrations.md) such as [Amazon Bedrock](/docs/en/amazon-bedrock.md), [Google Cloud's Agent Platform](/docs/en/google-vertex-ai.md), or [Microsoft Foundry](/docs/en/microsoft-foundry.md).
24* **Model**: the agents that hunt for vulnerabilities, verify findings, and write and review patches run on [your session's model](https://code.claude.com/docs/en/sub-agents.md#choose-a-model). To change it, run [`/model`](https://code.claude.com/docs/en/model-config#setting-your-model) in your session before you start a scan. A few supporting steps, such as mapping the repository, use the [`sonnet` alias](https://code.claude.com/docs/en/model-config#model-aliases) instead.
25* **Provider**: scans run on a paid plan, with Anthropic API access, or on a [third-party provider](https://code.claude.com/docs/en/third-party-integrations.md) such as [Amazon Bedrock](https://code.claude.com/docs/en/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/en/google-vertex-ai.md), or [Microsoft Foundry](https://code.claude.com/docs/en/microsoft-foundry.md).
2626
27On a third-party provider, the `sonnet` alias can resolve to a different version than it does on the Anthropic API. If your account can't use that version, [pin your model versions](/docs/en/model-config.md#pin-models-for-third-party-deployments), including `ANTHROPIC_DEFAULT_SONNET_MODEL`.
27On a third-party provider, the `sonnet` alias can resolve to a different version than it does on the Anthropic API. If your account can't use that version, [pin your model versions](https://code.claude.com/docs/en/model-config.md#pin-models-for-third-party-deployments), including `ANTHROPIC_DEFAULT_SONNET_MODEL`.
2828
29[Automatic model fallback](/docs/en/model-config.md#automatic-model-fallback) re-runs a request that a model's safeguards flag. On Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, the request can end with a refusal message instead, depending on [how your deployment is set up](/docs/en/model-config.md#enable-fallback-on-bedrock-agent-platform-and-foundry).
29[Automatic model fallback](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback) re-runs a request that a model's safeguards flag. On Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, the request can end with a refusal message instead, depending on [how your deployment is set up](https://code.claude.com/docs/en/model-config.md#enable-fallback-on-bedrock-agent-platform-and-foundry).
3030
3131## Install the plugin
3232
33In the VS Code extension or the desktop app, install it by following [Install a plugin](/docs/en/plugins/install.md#install-a-plugin). In a terminal, start Claude Code by running `claude`, then enter this at its prompt to install from the [official Anthropic marketplace](/docs/en/plugins/anthropic-marketplaces.md):
33In the VS Code extension or the desktop app, install it by following [Install a plugin](https://code.claude.com/docs/en/plugins/install.md#install-a-plugin). In a terminal, start Claude Code by running `claude`, then enter this at its prompt to install from the [official Anthropic marketplace](https://code.claude.com/docs/en/plugins/anthropic-marketplaces.md):
3434
3535```text theme={null}
3636/plugin install claude-security@claude-plugins-official
3737```
3838
39The command opens the plugin's details, where you choose an [installation scope](/docs/en/plugins/install.md#install-a-plugin) to start the install.
39The command opens the plugin's details, where you choose an [installation scope](https://code.claude.com/docs/en/plugins/install.md#install-a-plugin) to start the install.
4040
4141If the install fails, match the message Claude Code reports:
4242
4343* `Marketplace "claude-plugins-official" not found`: add the marketplace with `/plugin marketplace add anthropics/claude-plugins-official`, then retry the install.
44* `Plugin "claude-security" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](/docs/en/plugins/troubleshooting.md#plugin-not-found-in-marketplace).
44* `Plugin "claude-security" not found in marketplace "claude-plugins-official"`: your local copy of the marketplace catalog may be out of date. Refresh it with `/plugin marketplace update claude-plugins-official`, then retry the install. If the retry prints the same message, see [Plugin not found in marketplace](https://code.claude.com/docs/en/plugins/troubleshooting.md#plugin-not-found-in-marketplace).
4545
46Check the install summary. If it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](/docs/en/plugins/cli-reference.md#reload-plugins) to activate the plugin in your current session.
46Check the install summary. If it reports `Run /reload-plugins to apply.`, see [Apply plugin changes without restarting](https://code.claude.com/docs/en/plugins/cli-reference.md#reload-plugins) to activate the plugin in your current session.
4747
4848Once the plugin is active, you're ready to [scan and fix your codebase](#scan-and-fix-your-codebase).
4949
from line 69
6969
7070**4. Read the report**
7171
72While the scan runs, it reports each stage as it starts, with the detail available under [`/workflows`](/docs/en/workflows). Results are written to a timestamped directory in your repository, described in [Read the scan results](#read-the-scan-results).
72While the scan runs, it reports each stage as it starts, with the detail available under [`/workflows`](https://code.claude.com/docs/en/workflows). Results are written to a timestamped directory in your repository, described in [Read the scan results](#read-the-scan-results).
7373
7474**5. Turn findings into patches**
7575
from line 79
7979
8080Apply each patch from your shell with `git apply`, in its own pull request. Patches are never applied automatically.
8181
82You don't have to start from the menu: ask for a job directly, as arguments to the command, such as `/claude-security scan my branch`, or in plain language, such as "scan commit abc1234". The plugin works best in [auto mode](/docs/en/permission-modes.md), which lets the scan's agents proceed without a permission prompt at each step.
82You don't have to start from the menu: ask for a job directly, as arguments to the command, such as `/claude-security scan my branch`, or in plain language, such as "scan commit abc1234". The plugin works best in [auto mode](https://code.claude.com/docs/en/permission-modes.md), which lets the scan's agents proceed without a permission prompt at each step.
8383
8484### Scan only your changes
8585
from line 122
122122
123123## How the plugin fits with other security tools
124124
125The Claude Security plugin is the on-demand deep-scan layer in a defense-in-depth stack, alongside the [security guidance plugin](/docs/en/security-guidance.md), [`/security-review`](/docs/en/commands#all-commands), [Code Review](/docs/en/code-review.md), the managed [Claude Security](https://claude.com/product/claude-security) product, and your existing scanners:
125The Claude Security plugin is the on-demand deep-scan layer in a defense-in-depth stack, alongside the [security guidance plugin](https://code.claude.com/docs/en/security-guidance.md), [`/security-review`](https://code.claude.com/docs/en/commands#all-commands), [Code Review](https://code.claude.com/docs/en/code-review.md), the managed [Claude Security](https://claude.com/product/claude-security) product, and your existing scanners:
126126
127127| Stage | Tool | What it covers |
128128| :- | :- | :- |
129| In session | [Security guidance plugin](/docs/en/security-guidance.md) | Common vulnerabilities in code Claude writes, fixed in the same session |
130| On demand, single pass | [`/security-review`](/docs/en/commands#all-commands) | One-time security pass on the current branch |
129| In session | [Security guidance plugin](https://code.claude.com/docs/en/security-guidance.md) | Common vulnerabilities in code Claude writes, fixed in the same session |
130| On demand, single pass | [`/security-review`](https://code.claude.com/docs/en/commands#all-commands) | One-time security pass on the current branch |
131131| On demand, deep scan | Claude Security plugin | Multi-agent scan of a repository or diff, with independently reviewed findings and patches |
132| On pull request | [Code Review](/docs/en/code-review.md), Team and Enterprise plans | Multi-agent correctness and security review with full codebase context |
132| On pull request | [Code Review](https://code.claude.com/docs/en/code-review.md), Team and Enterprise plans | Multi-agent correctness and security review with full codebase context |
133133| Managed | [Claude Security](https://claude.com/product/claude-security), Enterprise plan | Hosted scanning that monitors connected repositories |
134134| In CI | Your existing static analysis and dependency scanners | Language-specific rules, supply-chain checks, and policy enforcement |
135135
from line 139
139139
140140**The `/claude-security` menu opens with a Python warning.** The plugin needs `python3` 3.9 or later on your `PATH`. When it can't find `python3` at all, the menu warns that Claude Security won't work until one is installed; when the first `python3` on your `PATH` is older, the warning names the version it found. Install Python 3, or put a newer `python3` first on your `PATH`, then start a new session.
141141
142**You may see a "safeguards flagged this message" notice when scanning on a Fable model.** The message names the model you're running. Fable's cybersecurity safety classifiers flag certain requests, and Claude Code re-runs a flagged request on an Opus model through [automatic model fallback](/docs/en/model-config.md#automatic-model-fallback). This is expected. When the request re-runs, the scan should still complete successfully.
142**You may see a "safeguards flagged this message" notice when scanning on a Fable model.** The message names the model you're running. Fable's cybersecurity safety classifiers flag certain requests, and Claude Code re-runs a flagged request on an Opus model through [automatic model fallback](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback). This is expected. When the request re-runs, the scan should still complete successfully.
143143
144144## Related resources
145145
146146To go deeper on the pieces this page touches:
147147
148* [Security guidance plugin](/docs/en/security-guidance.md): catch issues in code as Claude writes it, in the same session
149* [Code Review](/docs/en/code-review.md): set up the PR-time multi-agent review
148* [Security guidance plugin](https://code.claude.com/docs/en/security-guidance.md): catch issues in code as Claude writes it, in the same session
149* [Code Review](https://code.claude.com/docs/en/code-review.md): set up the PR-time multi-agent review
150150* [Claude Security](https://claude.com/product/claude-security): the managed service that monitors connected repositories
151* [Claude Code security](/docs/en/security.md): how Claude Code approaches trust, permissions, and safeguards
152* [Install and manage plugins](/docs/en/plugins/install.md): find and install other plugins from the official marketplace
151* [Claude Code security](https://code.claude.com/docs/en/security.md): how Claude Code approaches trust, permissions, and safeguards
152* [Install and manage plugins](https://code.claude.com/docs/en/plugins/install.md): find and install other plugins from the official marketplace
153153
claude-tag Changed · +7 / -7 lines
This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.
from line 1
1<!DOCTYPE html><html lang="en" class="inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark" data-banner-state="visible" data-assistant-state="closed" data-page-mode="none" data-current-path="/"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/docs/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/docs/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/docs/_next/static/media/f67ad414ed34149c.p.84166d94.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=032101c39ca3b1af9f72fc4af8e60d12"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-Key.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=1b7a9675728f971bc7a4663c7f1ea599"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-NodePair.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=c64df4c6d27a6da752aa32c9e0622781"/><link rel="stylesheet" href="/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" data-precedence="next"/><link rel="stylesheet" href="/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" data-precedence="next"/><style data-precedence="base-ui:low" data-href="base-ui-disable-scrollbar">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel="preload" as="script" fetchPriority="low" href="/docs/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp"/><script src="/docs/_next/static/chunks/44795504c795ca32.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/fc0d9bde4242238c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/282644fd76c5ad9f.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/turbopack-0b4a039cd6040e34.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/96f05c525d790774.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/c45fc5c3fa69ca32.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/94a43ec1201b91d0.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/524bce83f7b2f674.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/1347c67505f8d6ff.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/91cc018f0b521f3f.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/1ab82a2e4905d2c6.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/e7049fc815953dcd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/f944c986e78b445f.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><script src="/docs/_next/static/chunks/3a59f568b026e98e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" async=""></script><title>Work with Claude Tag - Claude.ai Documentation</title><meta name="description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta name="application-name" content="Claude.ai Documentation"/><meta name="generator" content="Mintlify"/><meta name="msapplication-config" content="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/browserconfig.xml"/><meta name="apple-mobile-web-app-title" content="Claude.ai Documentation"/><meta name="msapplication-TileColor" content="#0E0E0E"/><link rel="canonical" href="https://claude.com/docs/claude-tag/overview"/><link rel="alternate" type="application/xml" href="/docs/sitemap.xml"/><link rel="alternate" type="text/markdown" href="/docs/claude-tag/overview.md"/><meta property="og:title" content="Work with Claude Tag - Claude.ai Documentation"/><meta property="og:description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta property="og:url" content="https://claude.com/docs/claude-tag/overview"/><meta property="og:site_name" content="Claude.ai Documentation"/><meta property="og:image" content="https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+&title=Work+with+Claude+Tag&description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.&theme=25fa76e0782ecdcbf2e9c357&signature=997ebf3faebd938bda7ef71f6e8f0a913e72af016dbe5aba123cbe1493f4ea79"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Work with Claude Tag - Claude.ai Documentation"/><meta name="twitter:description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta name="twitter:image" content="https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+&title=Work+with+Claude+Tag&description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.&theme=25fa76e0782ecdcbf2e9c357&signature=997ebf3faebd938bda7ef71f6e8f0a913e72af016dbe5aba123cbe1493f4ea79"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: light)"/><link rel="apple-touch-icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/apple-touch-icon.png" type="image/png" sizes="180x180"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: light)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: light)"/><link rel="shortcut icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: light)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: dark)"/><link rel="shortcut icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: dark)"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><script type="text/javascript">!function(){var b="/docs";
1<!DOCTYPE html><html lang="en" class="inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark" data-banner-state="visible" data-assistant-state="closed" data-page-mode="none" data-current-path="/"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/docs/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/docs/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/docs/_next/static/media/f67ad414ed34149c.p.84166d94.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=032101c39ca3b1af9f72fc4af8e60d12"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-Key.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=1b7a9675728f971bc7a4663c7f1ea599"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-NodePair.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=c64df4c6d27a6da752aa32c9e0622781"/><link rel="stylesheet" href="/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" data-precedence="next"/><link rel="stylesheet" href="/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" data-precedence="next"/><style data-precedence="base-ui:low" data-href="base-ui-disable-scrollbar">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel="preload" as="script" fetchPriority="low" href="/docs/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP"/><script src="/docs/_next/static/chunks/44795504c795ca32.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/97f4538420f6d7b6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/20214b61aeeadd92.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/turbopack-bbfccb8268aeba49.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/75f3b681e0a5ffdc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/81e8302a78f091fc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/7f946ab7181007fc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/67d053872e792a2f.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1347c67505f8d6ff.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/60fd1253ec41fdda.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/1ab82a2e4905d2c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/5b8c190337b4ea0e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/6bfa0fb038a43585.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><script src="/docs/_next/static/chunks/ce69e09ed2958917.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" async=""></script><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>Work with Claude Tag - Claude.ai Documentation</title><meta name="description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta name="application-name" content="Claude.ai Documentation"/><meta name="generator" content="Mintlify"/><meta name="msapplication-config" content="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/browserconfig.xml"/><meta name="apple-mobile-web-app-title" content="Claude.ai Documentation"/><meta name="msapplication-TileColor" content="#0E0E0E"/><link rel="canonical" href="https://claude.com/docs/claude-tag/overview"/><link rel="alternate" type="application/xml" href="/docs/sitemap.xml"/><link rel="alternate" type="text/markdown" href="/docs/claude-tag/overview.md"/><meta property="og:title" content="Work with Claude Tag - Claude.ai Documentation"/><meta property="og:description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta property="og:url" content="https://claude.com/docs/claude-tag/overview"/><meta property="og:site_name" content="Claude.ai Documentation"/><meta property="og:image" content="https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+&title=Work+with+Claude+Tag&description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.&theme=c937feb09b37748e448783d0&signature=2a34d181dc1df9166a2522a00ab3d9f3a1c1fa14205dd085f8c48b5252991e1e"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Work with Claude Tag - Claude.ai Documentation"/><meta name="twitter:description" content="Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user."/><meta name="twitter:image" content="https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+&title=Work+with+Claude+Tag&description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.&theme=c937feb09b37748e448783d0&signature=2a34d181dc1df9166a2522a00ab3d9f3a1c1fa14205dd085f8c48b5252991e1e"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: light)"/><link rel="apple-touch-icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/apple-touch-icon.png" type="image/png" sizes="180x180"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: light)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: light)"/><link rel="shortcut icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: light)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: dark)"/><link rel="shortcut icon" href="/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: dark)"/><script type="text/javascript">!function(){var b="/docs";
22function a(p){if(p==null)return"/";p=""+p;if(""===p)return"/";return"/"===p.charAt(0)?p:"/"+p}
33function u(p){if(p==null)return p;p=""+p;if(!p||p.charAt(p.length-1)==="/")return p.slice(0,-1);return p}
44function i(p){if(p==null)return p;p=""+p;if(6<=p.length&&p.substring(p.length-6)==="/index")return p.substring(0,p.length-6);if("index"===p)return"";return p}
from line 57
5757})();</script><script type="text/javascript">(function(a,b){try{let c=document.querySelector("div#banner")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible")}catch(a){document.documentElement.setAttribute(b,"hidden")}})(
5858 "bannerDismissed",
5959 "data-banner-state",
60)</script><script src="/docs/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" noModule=""></script></head><body class="antialiased"><div hidden=""><!--$--><!--/$--></div><script>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem("isDarkMode")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'&&p!=='dark'&&p!=='system')p="system"}var r=p==='system'?(matchMedia("(prefers-color-scheme: dark)").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute("data-theme-preference",p)})();</script><blockquote class="sr-only" data-agent-docs-index="true" aria-hidden="true"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href="/docs/llms.txt" tabindex="-1">/docs/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><style>:root{--banner-height:0px!important}</style><script id="_mintlify-banner-script">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split("/").filter(a=>""!==a&&"global"!==a).slice(0,2)}catch{h=[]}let i=h.map(a=>c.find(b=>b.toLowerCase()===a.toLowerCase())).find(a=>void 0!==a),j=[];for(let c of(i?j.push(i):j.push(b),j.push("global"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,"hidden");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith("lang:"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?"visible":"hidden")}catch(a){console.error(a),document.documentElement.setAttribute(d,"hidden")}})(
60)</script><script src="/docs/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" noModule=""></script></head><body class="antialiased"><div hidden=""><!--$--><!--/$--></div><script>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem("isDarkMode")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'&&p!=='dark'&&p!=='system')p="system"}var r=p==='system'?(matchMedia("(prefers-color-scheme: dark)").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute("data-theme-preference",p)})();</script><blockquote class="sr-only" data-agent-docs-index="true" aria-hidden="true"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href="/docs/llms.txt" tabindex="-1">/docs/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><style>:root{--banner-height:0px!important}</style><script id="_mintlify-banner-script">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split("/").filter(a=>""!==a&&"global"!==a).slice(0,2)}catch{h=[]}let i=h.map(a=>c.find(b=>b.toLowerCase()===a.toLowerCase())).find(a=>void 0!==a),j=[];for(let c of(i?j.push(i):j.push(b),j.push("global"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,"hidden");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith("lang:"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?"visible":"hidden")}catch(a){console.error(a),document.documentElement.setAttribute(d,"hidden")}})(
6161 {},
6262 "en",
6363 [],
from line 87
8787 --gray-800: 37 37 37;
8888 --gray-900: 23 23 23;
8989 --gray-950: 10 10 10;
90 }</style><div class="relative antialiased text-gray-500 dark:text-gray-400"><script id="_mintlify-navbar-transition-script">(function(a){let b,c=(b="navbar-transition","maple"===a&&(b+="-maple"),b);function d(){let a=!1;a=window.scrollY>50;let b=document.getElementById(c);b&&b.hasAttribute("data-is-opaque")&&b.setAttribute("data-is-opaque",`${!!a}`)}let e=function(){let a=document.createElement("style"),b=`#${c}`;return a.appendChild(document.createTextNode(`${b},${b} *,${b} *::before,${b} *::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`)),document.head.appendChild(a),function(){window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(a)},1)}}();function f(){window.removeEventListener("scroll",d),document.removeEventListener("DOMContentLoaded",d),d(),e()}window.addEventListener("scroll",d,{passive:!0}),document.addEventListener("DOMContentLoaded",d),("requestAnimationFrame"in globalThis?requestAnimationFrame:setTimeout)(d),"complete"===document.readyState?f():window.addEventListener("load",f,{once:!0})})("mint")</script><script id="_mintlify-scroll-margin-script">(function () {
90 }</style><div class="relative antialiased text-gray-500 dark:text-gray-400"><script id="_mintlify-navbar-transition-script">(function(a){function b(){let b=!1;b=window.scrollY>50;let c=document.getElementById(a);c&&c.hasAttribute("data-is-opaque")&&c.setAttribute("data-is-opaque",`${!!b}`)}let c=function(){let b=document.createElement("style"),c=`#${a}`;return b.appendChild(document.createTextNode(`${c},${c} *,${c} *::before,${c} *::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`)),document.head.appendChild(b),function(){window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(b)},1)}}();function d(){window.removeEventListener("scroll",b),document.removeEventListener("DOMContentLoaded",b),b(),c()}window.addEventListener("scroll",b,{passive:!0}),document.addEventListener("DOMContentLoaded",b),("requestAnimationFrame"in globalThis?requestAnimationFrame:setTimeout)(b),"complete"===document.readyState?d():window.addEventListener("load",d,{once:!0})})("navbar-transition")</script><script id="_mintlify-scroll-margin-script">(function () {
9191 var measure = function(){let a=document.querySelectorAll("header#navbar, [data-top-chrome]"),b=0;a.forEach(a=>{let c=a.getBoundingClientRect();c.height>0&&(b=Math.max(b,c.bottom))});let c=0,d=document.getElementById("content-container");if(d){let{overflowY:a}=getComputedStyle(d);("auto"===a||"scroll"===a)&&(c=Math.max(0,d.getBoundingClientRect().top))}let e=`${Math.round(Math.max(0,b-c))+40}px`,f=document.documentElement.style;f.getPropertyValue("--scroll-mt")!==e&&f.setProperty("--scroll-mt",e)};
9292 (function(a){let b=[],c=0,d="undefined"==typeof ResizeObserver?null:new ResizeObserver(f);function e(){let c=Array.from(document.querySelectorAll("header#navbar, [data-top-chrome]"));(c.length!==b.length||c.some((a,c)=>a!==b[c]))&&d&&(d.disconnect(),c.forEach(a=>d.observe(a))),b=c,a()}function f(){c||(c=requestAnimationFrame(()=>{c=0,e()}))}let g="header#navbar, [data-top-chrome]";function h(a){let b=a.target;if(b instanceof Element&&b.closest(g))return!0;for(let b of a.addedNodes)if(b instanceof Element&&(b.matches(g)||b.querySelector(g)))return!0;for(let b of a.removedNodes)if(b instanceof Element&&(b.matches(g)||b.querySelector(g)))return!0;return!1}new MutationObserver(a=>{a.some(h)&&f()}).observe(document.documentElement,{childList:!0,subtree:!0}),window.addEventListener("resize",f),"loading"===document.readyState&&document.addEventListener("DOMContentLoaded",e),e()})(measure);
9393 (function(a){let b=window.location.hash.slice(1);if(!b)return;function c(){return"smooth"===getComputedStyle(document.documentElement).scrollBehavior}function d(c){let d=document.getElementById(b);return!!d&&(a(),d.scrollIntoView(c?{behavior:c}:void 0),!0)}if("complete"===document.readyState)return void d();let e=new MutationObserver(()=>{!c()&&d("instant")&&f()});function f(){e.disconnect(),window.removeEventListener("load",g)}function g(){let a=c();f(),a&&requestAnimationFrame(()=>{d(),function(){let a=["wheel","touchstart","keydown","pointerdown"],c=0,e=window.scrollY,f=setInterval(()=>{c+=1;let a=document.getElementById(b);if(!a||c>=6)return g();let f=Math.abs(window.scrollY-e)>1;if(e=window.scrollY,f)return;let h=parseFloat(getComputedStyle(a).scrollMarginTop)||0;Math.abs(a.getBoundingClientRect().top-h)>4&&d()},350);function g(){clearInterval(f),a.forEach(a=>window.removeEventListener(a,g))}a.forEach(a=>window.addEventListener(a,g,{passive:!0}))}()})}window.addEventListener("load",g),e.observe(document.documentElement,{childList:!0,subtree:!0}),!c()&&d("instant")&&f()})(measure);
from line 97
9797 "--assistant-sheet-width",
9898 true,
9999 false
100 )</script><div class="max-lg:contents lg:flex lg:w-full" data-docs-theme="mint" data-assistant-layout="legacy"><div class="max-lg:contents lg:flex-1 lg:min-w-0 lg:overflow-x-clip"><header id="navbar" class="z-30 fixed lg:sticky top-0 w-full peer is-not-custom peer is-not-center peer is-wide peer is-not-frame"><div id="navbar-transition" class="absolute w-full h-full flex-none transition-colors duration-500 border-b border-gray-500/5 dark:border-gray-300/[0.06] bg-background-light dark:bg-background-dark" data-is-opaque="false"></div><div class="max-w-8xl mx-auto relative"><div><div class="relative"><div class="flex items-center lg:px-12 h-16 min-w-0 mx-4 lg:mx-0"><div class="h-full relative flex-1 flex items-center gap-x-4 min-w-0 border-b border-gray-500/5 dark:border-gray-300/[0.06]"><div class="flex-1 flex items-center gap-x-4"><a class="select-none" style="-webkit-touch-callout:none" href="/docs"><span class="sr-only">Claude.ai Documentation<!-- --> home page</span><img class="nav-logo w-auto h-7 relative object-contain shrink-0 block dark:hidden" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10" alt="light logo"/><img class="nav-logo w-auto h-7 relative object-contain shrink-0 hidden dark:block" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866" alt="dark logo"/></a><div class="hidden lg:flex items-center gap-x-2"></div></div><div class="relative hidden lg:flex items-center flex-1 z-20 gap-2.5"><button type="button" data-search-item="trigger" class="group/search flex pointer-events-auto rounded-xl w-full items-center text-sm leading-6 h-9 pl-3.5 pr-3 text-gray-500 dark:text-white/50 bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/30 hover:ring-gray-600/30 dark:ring-gray-600/30 dark:hover:ring-gray-500/30 justify-between truncate gap-2" id="search-bar-entry" aria-label="Open search"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-search-item="trigger-icon" aria-hidden="true" focusable="false" class="size-4 min-w-4 flex-none text-gray-700 group-hover/search:text-gray-800 dark:text-gray-400 dark:group-hover/search:text-gray-200"><path d="M15.25 15.25L11.285 11.285" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M7.75 12.75C10.5114 12.75 12.75 10.5114 12.75 7.75C12.75 4.98858 10.5114 2.75 7.75 2.75C4.98858 2.75 2.75 4.98858 2.75 7.75C2.75 10.5114 4.98858 12.75 7.75 12.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><div data-search-item="trigger-label" class="truncate min-w-0">Search...</div></div><span data-search-item="trigger-hint" class="flex-none text-xs font-semibold">⌘<!-- -->K</span></button><button type="button" class="group/ai flex-none hidden lg:flex items-center justify-center gap-1.5 pl-3 pr-3.5 h-9 rounded-xl bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/30 hover:ring-gray-600/30 dark:ring-gray-600/30 dark:hover:ring-gray-500/30" id="assistant-entry" aria-label="Toggle assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4 shrink-0 text-gray-700 group-hover/ai:text-gray-800 dark:text-gray-400 dark:group-hover/ai:text-gray-200"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="text-sm text-gray-500 dark:text-white/50 whitespace-nowrap">Ask Assistant</span><span class="flex-none text-xs font-semibold">⌘<!-- -->I</span></button></div><div class="flex-1 relative hidden lg:flex items-center ml-auto justify-end space-x-4"><nav aria-label="Main" class="text-sm"><ul class="flex space-x-6 items-center"><li class="navbar-link"><a href="https://support.anthropic.com" class="flex items-center gap-1.5 whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" target="_blank" rel="noopener noreferrer"><span class="min-w-0 truncate">Support</span></a></li><li class="block lg:hidden"><a class="flex items-center gap-1.5 whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" href="https://claude.ai"><span class="min-w-0 truncate">Go to Claude</span></a></li><li class="whitespace-nowrap hidden lg:flex" id="topbar-cta-button"><a target="_blank" rel="noopener noreferrer" class="group pl-3 pr-2 py-2 relative inline-flex items-center text-sm font-medium" href="https://claude.ai"><span class="absolute inset-0 bg-primary-dark rounded-xl group-hover:opacity-[0.9]"></span><div class="z-10 gap-1 flex items-center"><span class="text-white">Go to Claude</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 shrink-0 text-white/90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></a></li></ul></nav><div class="flex items-center"><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="theme-preference-menu-trigger" aria-label="Change theme preference" data-component-name="theme-preference-menu" data-component-part="theme-preference-menu-trigger" data-testid="theme-preference-menu-trigger" class="group disabled:pointer-events-none rounded-lg overflow-hidden gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 theme-preference-menu-trigger group p-2 flex items-center justify-center"><span data-theme-preference-icon="system"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M4.5 15.5L9 14.5L13.5 15.5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 11.75V14.5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.25 2.75H3.75C2.64543 2.75 1.75 3.64543 1.75 4.75V9.75C1.75 10.8546 2.64543 11.75 3.75 11.75H14.25C15.3546 11.75 16.25 10.8546 16.25 9.75V4.75C16.25 3.64543 15.3546 2.75 14.25 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span><span data-theme-preference-icon="light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M9 1.25V2.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.48 3.52002L13.773 4.22702" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M16.75 9H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.48 14.4799L13.773 13.7729" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 16.75V15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M3.52 14.4799L4.227 13.7729" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M1.25 9H2.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M3.52 3.52002L4.227 4.22702" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 13.25C11.3472 13.25 13.25 11.3472 13.25 9C13.25 6.65279 11.3472 4.75 9 4.75C6.65279 4.75 4.75 6.65279 4.75 9C4.75 11.3472 6.65279 13.25 9 13.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span><span data-theme-preference-icon="dark"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M13 11.75C9.548 11.75 6.75 8.95201 6.75 5.50001C6.75 4.14801 7.183 2.90101 7.912 1.87801C4.548 2.50601 2 5.45301 2 9.00001C2 13.004 5.246 16.25 9.25 16.25C12.622 16.25 15.448 13.944 16.259 10.826C15.309 11.409 14.196 11.75 13 11.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span></button></div></div><div class="flex lg:hidden items-center gap-3"><button type="button" data-search-item="trigger" class="text-gray-500 w-8 h-8 flex items-center justify-center hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300" id="search-bar-entry-mobile" aria-label="Open search"><span class="sr-only">Search...</span><svg data-search-item="trigger-icon" class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! h-4 w-4 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg");mask-repeat:no-repeat;mask-position:center"></svg></button><button id="assistant-entry-mobile" aria-label="Toggle assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4.5 text-gray-500 dark:text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button type="button" aria-label="More actions" class="h-7 w-5 flex items-center justify-center relative after:content-[''] after:absolute after:-inset-y-2 after:-left-1 after:-right-4"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-4 shrink-0 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg");mask-repeat:no-repeat;mask-position:center"></svg></button></div></div></div><button type="button" class="flex items-center h-14 py-4 px-5 lg:hidden focus:outline-0 w-full text-left"><div class="text-gray-500 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300"><span class="sr-only">Navigation</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M2.25 9H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.25 3.75H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.25 14.25H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div class="ml-4 flex text-sm leading-6 whitespace-nowrap min-w-0 space-x-3 overflow-hidden"><div class="flex items-center space-x-3 shrink-0"><span> </span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 text-gray-400 shrink-0"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div class="font-semibold text-gray-900 truncate dark:text-gray-200 min-w-0 flex-1">Work with Claude Tag</div></div></button></div><div class="hidden lg:flex px-12 h-12"><div class="nav-tabs h-full flex text-sm gap-x-6"><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs">Welcome<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/extend/overview">Customize Claude<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/build/overview">Build for Claude<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/cowork/overview">Cowork<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium hover:text-gray-800 dark:hover:text-gray-300 text-gray-800 dark:text-gray-200 [text-shadow:-0.2px_0_0_currentColor,0.2px_0_0_currentColor]" data-active="true" aria-current="location" href="/docs/claude-tag/overview">Claude Tag<div class="absolute bottom-0 h-[1.5px] w-full left-0 bg-primary dark:bg-primary-light"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/office-agents/overview">Claude for M365<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/claude-science/overview">Claude Science<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/third-party/claude-desktop/overview">Claude on third-party platforms<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/government/overview">Claude for Government<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a></div></div><style>:root{--topbar-tabs-height:3rem}</style></div></div></header><div class="scroll-mt-(--scroll-mt) peer-[.is-custom]:max-w-none peer-[.is-center]:max-w-3xl peer-[.is-not-custom]:peer-[.is-not-center]:max-w-8xl peer-[.is-not-custom]:px-4 peer-[.is-not-custom]:mx-auto peer-[.is-not-custom]:lg:px-8 peer-[.is-wide]:lg:*:last:max-w-216 peer-[.is-not-custom]:peer-[.is-not-center]:lg:flex peer-[.is-custom]:[&>:first-child]:hidden! peer-[.is-custom]:[&>:first-child]:sm:hidden! peer-[.is-custom]:[&>:first-child]:md:hidden! peer-[.is-custom]:[&>:first-child]:lg:hidden! peer-[.is-custom]:[&>:first-child]:xl:hidden! peer-[.is-center]:[&>:first-child]:hidden! peer-[.is-center]:[&>:first-child]:sm:hidden! peer-[.is-center]:[&>:first-child]:md:hidden! peer-[.is-center]:[&>:first-child]:lg:hidden! peer-[.is-center]:[&>:first-child]:xl:hidden!"><nav aria-label="Pages" class="z-20 hidden lg:block sticky self-start shrink-0 w-(--sidebar-width,18rem) top-[calc(var(--mintlify-slot-header-height,calc(4rem+var(--topbar-tabs-height,0rem)))+var(--banner-height,0px))] h-[calc(100dvh-var(--mintlify-slot-header-height,calc(4rem+var(--topbar-tabs-height,0rem)))-var(--banner-height,0px))]" id="sidebar"><div role="presentation" style="position:relative;--scroll-area-corner-height:0px;--scroll-area-corner-width:0px" data-component-part="scroll-area" id="sidebar-content" class="min-w-0 absolute! inset-0 z-10"><div data-id="base-ui-_R_nav5tcd74t9snpfiutb_-viewport" tabindex="-1" class="size-full rounded-[inherit] [--scroll-area-fade-size:32px] pr-8 pb-10 base-ui-disable-scrollbar" style="overflow:scroll" data-component-part="scroll-area-viewport"><div role="presentation" style="min-width:fit-content" data-component-part="scroll-area-content" class="min-w-0! w-full"><div class="relative lg:text-sm lg:leading-6"><div class="sticky top-0 h-8 pointer-events-none z-10 bg-linear-to-b from-background-light dark:from-background-dark"></div><div id="navigation-items"><div><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span> </span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/overview" class="relative scroll-m-4 first:scroll-m-20" data-title="Overview" data-active="true" data-active-nav-item="true"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] bg-primary/10 text-primary [text-shadow:-0.2px_0_0_currentColor,0.2px_0_0_currentColor] dark:text-primary-light dark:bg-primary-light/10" style="padding-left:1rem" aria-current="page" href="/docs/claude-tag/overview"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Overview</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>How it works</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/concepts/how-it-works" class="relative scroll-m-4 first:scroll-m-20" data-title="How Claude Tag works"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/how-it-works"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">How Claude Tag works</span></div></div></a></li><li id="/claude-tag/concepts/glossary" class="relative scroll-m-4 first:scroll-m-20" data-title="Glossary"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/glossary"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Glossary</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>For administrators</span></h3></div><ul class="sidebar-group space-y-px"><li data-title="Before you install" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/concepts/agent-identity" aria-expanded="false"><div class=""><span>Before you install</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Set up Claude Tag" data-group-tag="" id="/claude-tag/admins/setup-overview" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/setup-overview" aria-expanded="false"><div class=""><span>Set up Claude Tag</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Roll out" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/attach-to-scope" aria-expanded="false"><div class=""><span>Roll out</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Customize" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/customize" aria-expanded="false"><div class=""><span>Customize</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Operate" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/audit" aria-expanded="false"><div class=""><span>Operate</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>For end users</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/users/getting-started" class="relative scroll-m-4 first:scroll-m-20" data-title="Get started"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/getting-started"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Get started</span></div></div></a></li><li id="/claude-tag/concepts/for-claude-code-users" class="relative scroll-m-4 first:scroll-m-20" data-title="For Claude Code users"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/for-claude-code-users"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">For Claude Code users</span></div></div></a></li><li id="/claude-tag/users/commands" class="relative scroll-m-4 first:scroll-m-20" data-title="Commands"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/commands"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Commands</span></div></div></a></li><li id="/claude-tag/users/when-claude-responds" class="relative scroll-m-4 first:scroll-m-20" data-title="Control when Claude Tag responds"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/when-claude-responds"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Control when Claude Tag responds</span></div></div></a></li><li id="/claude-tag/users/group-dms" class="relative scroll-m-4 first:scroll-m-20" data-title="Group DMs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/group-dms"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Group DMs</span></div></div></a></li><li id="/claude-tag/users/good-habits" class="relative scroll-m-4 first:scroll-m-20" data-title="Good habits"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/good-habits"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Good habits</span></div></div></a></li><li id="/claude-tag/users/proactivity" class="relative scroll-m-4 first:scroll-m-20" data-title="Set up routines"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/proactivity"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Set up routines</span></div></div></a></li><li id="/claude-tag/users/memory" class="relative scroll-m-4 first:scroll-m-20" data-title="What Claude Tag remembers"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/memory"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">What Claude Tag remembers</span></div></div></a></li><li id="/claude-tag/users/models" class="relative scroll-m-4 first:scroll-m-20" data-title="Choose the model"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/models"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Choose the model</span></div></div></a></li><li id="/claude-tag/users/prompt-library" class="relative scroll-m-4 first:scroll-m-20" data-title="Prompt library"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/prompt-library"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Prompt library</span></div></div></a></li><li id="/claude-tag/users/troubleshooting" class="relative scroll-m-4 first:scroll-m-20" data-title="Troubleshooting"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/troubleshooting"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Troubleshooting</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>Use case library</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/users/use-cases" class="relative scroll-m-4 first:scroll-m-20" data-title="Browse the library"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Browse the library</span></div></div></a></li><li id="/claude-tag/users/use-cases/triage-requests" class="relative scroll-m-4 first:scroll-m-20" data-title="Triage requests"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/triage-requests"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Triage requests</span></div></div></a></li><li id="/claude-tag/users/use-cases/catch-up" class="relative scroll-m-4 first:scroll-m-20" data-title="Catch up"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/catch-up"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Catch up</span></div></div></a></li><li id="/claude-tag/users/use-cases/your-own-channel" class="relative scroll-m-4 first:scroll-m-20" data-title="Work from your own channel"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/your-own-channel"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Work from your own channel</span></div></div></a></li><li id="/claude-tag/users/use-cases/create-artifacts" class="relative scroll-m-4 first:scroll-m-20" data-title="Turn threads into docs and tickets"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/create-artifacts"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Turn threads into docs and tickets</span></div></div></a></li><li id="/claude-tag/users/use-cases/track-projects" class="relative scroll-m-4 first:scroll-m-20" data-title="Track projects and chase approvals"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/track-projects"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Track projects and chase approvals</span></div></div></a></li><li id="/claude-tag/users/use-cases/answer-data-questions" class="relative scroll-m-4 first:scroll-m-20" data-title="Answer data questions"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/answer-data-questions"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Answer data questions</span></div></div></a></li><li id="/claude-tag/users/use-cases/find-answers" class="relative scroll-m-4 first:scroll-m-20" data-title="Find answers in your docs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/find-answers"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Find answers in your docs</span></div></div></a></li><li id="/claude-tag/users/use-cases/review-documents" class="relative scroll-m-4 first:scroll-m-20" data-title="Review documents against a checklist"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/review-documents"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Review documents against a checklist</span></div></div></a></li><li id="/claude-tag/users/use-cases/pull-deal-state" class="relative scroll-m-4 first:scroll-m-20" data-title="Pull deal and account state"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/pull-deal-state"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Pull deal and account state</span></div></div></a></li><li id="/claude-tag/users/use-cases/marketing-team" class="relative scroll-m-4 first:scroll-m-20" data-title="Marketing teams"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/marketing-team"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Marketing teams</span></div></div></a></li><li id="/claude-tag/users/use-cases/watch-monitors" class="relative scroll-m-4 first:scroll-m-20" data-title="Watch monitors and alerts"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/watch-monitors"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Watch monitors and alerts</span></div></div></a></li><li id="/claude-tag/users/use-cases/fix-bugs" class="relative scroll-m-4 first:scroll-m-20" data-title="Fix bugs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/fix-bugs"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Fix bugs</span></div></div></a></li><li id="/claude-tag/users/use-cases/work-with-github" class="relative scroll-m-4 first:scroll-m-20" data-title="Work with GitHub"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/work-with-github"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Work with GitHub</span></div></div></a></li></ul></div><script>(function () {
100 )</script><div class="max-lg:contents lg:flex lg:w-full" data-docs-theme="mint" data-assistant-layout="legacy"><div class="max-lg:contents lg:flex-1 lg:min-w-0 lg:overflow-x-clip"><header id="navbar" data-layout-item="topbar" class="z-30 fixed lg:sticky top-0 w-full peer is-not-custom peer is-not-center peer is-wide peer is-not-frame"><div id="navbar-transition" class="absolute w-full h-full flex-none transition-colors duration-500 border-b border-gray-500/5 dark:border-gray-300/[0.06] bg-background-light dark:bg-background-dark" data-is-opaque="false"></div><div class="max-w-8xl mx-auto relative"><div><div class="relative"><div class="flex items-center lg:px-12 h-16 min-w-0 mx-4 lg:mx-0"><div class="h-full relative flex-1 flex items-center gap-x-4 min-w-0 border-b border-gray-500/5 dark:border-gray-300/[0.06]"><div class="flex-1 flex items-center gap-x-4"><a class="select-none" style="-webkit-touch-callout:none" href="/docs"><span class="sr-only">Claude.ai Documentation<!-- --> home page</span><img class="nav-logo w-auto h-7 relative object-contain shrink-0 block dark:hidden" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10" alt="light logo"/><img class="nav-logo w-auto h-7 relative object-contain shrink-0 hidden dark:block" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866" alt="dark logo"/></a><div class="hidden lg:flex items-center gap-x-2"></div></div><div class="relative hidden lg:flex items-center flex-1 z-20 gap-2.5"><button type="button" data-layout-item="search-entry" data-search-item="trigger" class="group/search flex pointer-events-auto rounded-xl w-full items-center text-sm leading-6 h-9 pl-3.5 pr-3 text-gray-500 dark:text-white/50 bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/30 hover:ring-gray-600/30 dark:ring-gray-600/30 dark:hover:ring-gray-500/30 justify-between truncate gap-2" id="search-bar-entry" aria-label="Open search"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-search-item="trigger-icon" aria-hidden="true" focusable="false" class="size-4 min-w-4 flex-none text-gray-700 group-hover/search:text-gray-800 dark:text-gray-400 dark:group-hover/search:text-gray-200"><path d="M15.25 15.25L11.285 11.285" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M7.75 12.75C10.5114 12.75 12.75 10.5114 12.75 7.75C12.75 4.98858 10.5114 2.75 7.75 2.75C4.98858 2.75 2.75 4.98858 2.75 7.75C2.75 10.5114 4.98858 12.75 7.75 12.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><div data-search-item="trigger-label" class="truncate min-w-0">Search...</div></div><span data-search-item="trigger-hint" class="flex-none text-xs font-semibold">⌘<!-- -->K</span></button><button type="button" class="group/ai flex-none hidden lg:flex items-center justify-center gap-1.5 pl-3 pr-3.5 h-9 rounded-xl bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/30 hover:ring-gray-600/30 dark:ring-gray-600/30 dark:hover:ring-gray-500/30" id="assistant-entry" data-layout-item="assistant-entry" aria-label="Toggle assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4 shrink-0 text-gray-700 group-hover/ai:text-gray-800 dark:text-gray-400 dark:group-hover/ai:text-gray-200"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="text-sm text-gray-500 dark:text-white/50 whitespace-nowrap">Ask Assistant</span><span class="flex-none text-xs font-semibold">⌘<!-- -->I</span></button></div><div class="flex-1 relative hidden lg:flex items-center ml-auto justify-end space-x-4"><nav aria-label="Main" class="text-sm"><ul class="flex space-x-6 items-center"><li class="navbar-link"><a href="https://support.anthropic.com" class="flex items-center gap-1.5 whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" target="_blank" rel="noopener noreferrer"><span class="min-w-0 truncate">Support</span></a></li><li class="block lg:hidden"><a class="flex items-center gap-1.5 whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" href="https://claude.ai"><span class="min-w-0 truncate">Go to Claude</span></a></li><li class="whitespace-nowrap hidden lg:flex" id="topbar-cta-button"><a target="_blank" rel="noopener noreferrer" class="group pl-3 pr-2 py-2 relative inline-flex items-center text-sm font-medium" href="https://claude.ai"><span class="absolute inset-0 bg-primary-dark rounded-xl group-hover:opacity-[0.9]"></span><div class="z-10 gap-1 flex items-center"><span class="text-white">Go to Claude</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 shrink-0 text-white/90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></a></li></ul></nav><div class="flex items-center"><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="theme-preference-menu-trigger" aria-label="Change theme preference" data-component-name="theme-preference-menu" data-component-part="theme-preference-menu-trigger" data-testid="theme-preference-menu-trigger" class="group disabled:pointer-events-none rounded-lg overflow-hidden gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 theme-preference-menu-trigger group p-2 flex items-center justify-center"><span data-theme-preference-icon="system"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M4.5 15.5L9 14.5L13.5 15.5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 11.75V14.5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.25 2.75H3.75C2.64543 2.75 1.75 3.64543 1.75 4.75V9.75C1.75 10.8546 2.64543 11.75 3.75 11.75H14.25C15.3546 11.75 16.25 10.8546 16.25 9.75V4.75C16.25 3.64543 15.3546 2.75 14.25 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span><span data-theme-preference-icon="light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M9 1.25V2.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.48 3.52002L13.773 4.22702" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M16.75 9H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M14.48 14.4799L13.773 13.7729" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 16.75V15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M3.52 14.4799L4.227 13.7729" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M1.25 9H2.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M3.52 3.52002L4.227 4.22702" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9 13.25C11.3472 13.25 13.25 11.3472 13.25 9C13.25 6.65279 11.3472 4.75 9 4.75C6.65279 4.75 4.75 6.65279 4.75 9C4.75 11.3472 6.65279 13.25 9 13.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span><span data-theme-preference-icon="dark"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-4 text-gray-500 dark:text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200"><path d="M13 11.75C9.548 11.75 6.75 8.95201 6.75 5.50001C6.75 4.14801 7.183 2.90101 7.912 1.87801C4.548 2.50601 2 5.45301 2 9.00001C2 13.004 5.246 16.25 9.25 16.25C12.622 16.25 15.448 13.944 16.259 10.826C15.309 11.409 14.196 11.75 13 11.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></span></button></div></div><div class="flex lg:hidden items-center gap-3"><button type="button" data-layout-item="search-entry" data-search-item="trigger" class="text-gray-500 w-8 h-8 flex items-center justify-center hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300" id="search-bar-entry-mobile" aria-label="Open search"><span class="sr-only">Search...</span><svg data-search-item="trigger-icon" class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! h-4 w-4 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg");mask-repeat:no-repeat;mask-position:center"></svg></button><button id="assistant-entry-mobile" data-layout-item="assistant-entry" aria-label="Toggle assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4.5 text-gray-500 dark:text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button type="button" aria-label="More actions" class="h-7 w-5 flex items-center justify-center relative after:content-[''] after:absolute after:-inset-y-2 after:-left-1 after:-right-4"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-4 shrink-0 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg");mask-repeat:no-repeat;mask-position:center"></svg></button></div></div></div><button type="button" class="flex items-center h-14 py-4 px-5 lg:hidden focus:outline-0 w-full text-left"><div class="text-gray-500 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300"><span class="sr-only">Navigation</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M2.25 9H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.25 3.75H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.25 14.25H15.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div class="ml-4 flex text-sm leading-6 whitespace-nowrap min-w-0 space-x-3 overflow-hidden"><div class="flex items-center space-x-3 shrink-0"><span> </span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 text-gray-400 shrink-0"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div class="font-semibold text-gray-900 truncate dark:text-gray-200 min-w-0 flex-1">Work with Claude Tag</div></div></button></div><div class="hidden lg:flex px-12 h-12"><div class="nav-tabs h-full flex text-sm gap-x-6"><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs">Welcome<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/extend/overview">Customize Claude<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/build/overview">Build for Claude<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/cowork/overview">Cowork<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium hover:text-gray-800 dark:hover:text-gray-300 text-gray-800 dark:text-gray-200 [text-shadow:-0.2px_0_0_currentColor,0.2px_0_0_currentColor]" data-active="true" aria-current="location" href="/docs/claude-tag/overview">Claude Tag<div class="absolute bottom-0 h-[1.5px] w-full left-0 bg-primary dark:bg-primary-light"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/office-agents/overview">Claude for M365<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/claude-science/overview">Claude Science<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/third-party/claude-desktop/overview">Claude on third-party platforms<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="link nav-tabs-item group relative h-full gap-2 flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/docs/government/overview">Claude for Government<div class="absolute bottom-0 h-[1.5px] w-full left-0 group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a></div></div><style>:root{--topbar-tabs-height:3rem}</style></div></div></header><div class="scroll-mt-(--scroll-mt) peer-[.is-custom]:max-w-none peer-[.is-center]:max-w-3xl peer-[.is-not-custom]:peer-[.is-not-center]:max-w-8xl peer-[.is-not-custom]:px-4 peer-[.is-not-custom]:mx-auto peer-[.is-not-custom]:lg:px-8 peer-[.is-wide]:lg:*:last:max-w-216 peer-[.is-not-custom]:peer-[.is-not-center]:lg:flex peer-[.is-custom]:[&>:first-child]:hidden! peer-[.is-custom]:[&>:first-child]:sm:hidden! peer-[.is-custom]:[&>:first-child]:md:hidden! peer-[.is-custom]:[&>:first-child]:lg:hidden! peer-[.is-custom]:[&>:first-child]:xl:hidden! peer-[.is-center]:[&>:first-child]:hidden! peer-[.is-center]:[&>:first-child]:sm:hidden! peer-[.is-center]:[&>:first-child]:md:hidden! peer-[.is-center]:[&>:first-child]:lg:hidden! peer-[.is-center]:[&>:first-child]:xl:hidden!"><nav aria-label="Pages" class="z-20 hidden lg:block sticky self-start shrink-0 w-(--sidebar-width,18rem) top-[calc(var(--mintlify-slot-header-height,calc(4rem+var(--topbar-tabs-height,0rem)))+var(--banner-height,0px))] h-[calc(100dvh-var(--mintlify-slot-header-height,calc(4rem+var(--topbar-tabs-height,0rem)))-var(--banner-height,0px))]" id="sidebar" data-layout-item="sidebar"><div role="presentation" style="position:relative;--scroll-area-corner-height:0px;--scroll-area-corner-width:0px" data-component-part="scroll-area" id="sidebar-content" class="min-w-0 absolute! inset-0 z-10"><div data-id="base-ui-_R_nav5tcd74t9snpfiutb_-viewport" tabindex="-1" class="size-full rounded-[inherit] [--scroll-area-fade-size:32px] pr-8 pb-10 base-ui-disable-scrollbar" style="overflow:scroll" data-component-part="scroll-area-viewport"><div role="presentation" style="min-width:fit-content" data-component-part="scroll-area-content" class="min-w-0! w-full"><div class="relative lg:text-sm lg:leading-6"><div class="sticky top-0 h-8 pointer-events-none z-10 bg-linear-to-b from-background-light dark:from-background-dark"></div><div id="navigation-items"><div><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span> </span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/overview" class="relative scroll-m-4 first:scroll-m-20" data-title="Overview" data-active="true" data-active-nav-item="true"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] bg-primary/10 text-primary [text-shadow:-0.2px_0_0_currentColor,0.2px_0_0_currentColor] dark:text-primary-light dark:bg-primary-light/10" style="padding-left:1rem" aria-current="page" href="/docs/claude-tag/overview"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Overview</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>How it works</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/concepts/how-it-works" class="relative scroll-m-4 first:scroll-m-20" data-title="How Claude Tag works"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/how-it-works"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">How Claude Tag works</span></div></div></a></li><li id="/claude-tag/concepts/glossary" class="relative scroll-m-4 first:scroll-m-20" data-title="Glossary"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/glossary"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Glossary</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>For administrators</span></h3></div><ul class="sidebar-group space-y-px"><li data-title="Before you install" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/concepts/agent-identity" aria-expanded="false"><div class=""><span>Before you install</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Set up Claude Tag" data-group-tag="" id="/claude-tag/admins/setup-overview" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/setup-overview" aria-expanded="false"><div class=""><span>Set up Claude Tag</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Roll out" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/attach-to-scope" aria-expanded="false"><div class=""><span>Roll out</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Customize" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/customize" aria-expanded="false"><div class=""><span>Customize</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li><li data-title="Operate" data-group-tag="" class="space-y-px"><button class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" data-nav-href="/claude-tag/admins/audit" aria-expanded="false"><div class=""><span>Operate</span></div><div class="h-[1lh] flex items-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 w-2 h-[1lh] -mr-0.5"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></button></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>For end users</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/users/getting-started" class="relative scroll-m-4 first:scroll-m-20" data-title="Get started"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/getting-started"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Get started</span></div></div></a></li><li id="/claude-tag/concepts/for-claude-code-users" class="relative scroll-m-4 first:scroll-m-20" data-title="For Claude Code users"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/concepts/for-claude-code-users"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">For Claude Code users</span></div></div></a></li><li id="/claude-tag/users/commands" class="relative scroll-m-4 first:scroll-m-20" data-title="Commands"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/commands"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Commands</span></div></div></a></li><li id="/claude-tag/users/when-claude-responds" class="relative scroll-m-4 first:scroll-m-20" data-title="Control when Claude Tag responds"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/when-claude-responds"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Control when Claude Tag responds</span></div></div></a></li><li id="/claude-tag/users/group-dms" class="relative scroll-m-4 first:scroll-m-20" data-title="Group DMs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/group-dms"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Group DMs</span></div></div></a></li><li id="/claude-tag/users/good-habits" class="relative scroll-m-4 first:scroll-m-20" data-title="Good habits"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/good-habits"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Good habits</span></div></div></a></li><li id="/claude-tag/users/proactivity" class="relative scroll-m-4 first:scroll-m-20" data-title="Set up routines"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/proactivity"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Set up routines</span></div></div></a></li><li id="/claude-tag/users/memory" class="relative scroll-m-4 first:scroll-m-20" data-title="What Claude Tag remembers"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/memory"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">What Claude Tag remembers</span></div></div></a></li><li id="/claude-tag/users/models" class="relative scroll-m-4 first:scroll-m-20" data-title="Choose the model"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/models"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Choose the model</span></div></div></a></li><li id="/claude-tag/users/prompt-library" class="relative scroll-m-4 first:scroll-m-20" data-title="Prompt library"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/prompt-library"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Prompt library</span></div></div></a></li><li id="/claude-tag/users/troubleshooting" class="relative scroll-m-4 first:scroll-m-20" data-title="Troubleshooting"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 break-words hyphens-auto rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/troubleshooting"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Troubleshooting</span></div></div></a></li></ul></div><div class="mt-6 lg:mt-8"><div class="sidebar-group-header flex items-center gap-2.5 pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200"><h3 class="sidebar-title text-[length:inherit] font-[inherit] leading-[inherit]"><span>Use case library</span></h3></div><ul class="sidebar-group space-y-px"><li id="/claude-tag/users/use-cases" class="relative scroll-m-4 first:scroll-m-20" data-title="Browse the library"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Browse the library</span></div></div></a></li><li id="/claude-tag/users/use-cases/triage-requests" class="relative scroll-m-4 first:scroll-m-20" data-title="Triage requests"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/triage-requests"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Triage requests</span></div></div></a></li><li id="/claude-tag/users/use-cases/catch-up" class="relative scroll-m-4 first:scroll-m-20" data-title="Catch up"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/catch-up"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Catch up</span></div></div></a></li><li id="/claude-tag/users/use-cases/your-own-channel" class="relative scroll-m-4 first:scroll-m-20" data-title="Work from your own channel"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/your-own-channel"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Work from your own channel</span></div></div></a></li><li id="/claude-tag/users/use-cases/create-artifacts" class="relative scroll-m-4 first:scroll-m-20" data-title="Turn threads into docs and tickets"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/create-artifacts"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Turn threads into docs and tickets</span></div></div></a></li><li id="/claude-tag/users/use-cases/track-projects" class="relative scroll-m-4 first:scroll-m-20" data-title="Track projects and chase approvals"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/track-projects"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Track projects and chase approvals</span></div></div></a></li><li id="/claude-tag/users/use-cases/answer-data-questions" class="relative scroll-m-4 first:scroll-m-20" data-title="Answer data questions"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/answer-data-questions"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Answer data questions</span></div></div></a></li><li id="/claude-tag/users/use-cases/find-answers" class="relative scroll-m-4 first:scroll-m-20" data-title="Find answers in your docs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/find-answers"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Find answers in your docs</span></div></div></a></li><li id="/claude-tag/users/use-cases/review-documents" class="relative scroll-m-4 first:scroll-m-20" data-title="Review documents against a checklist"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/review-documents"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Review documents against a checklist</span></div></div></a></li><li id="/claude-tag/users/use-cases/pull-deal-state" class="relative scroll-m-4 first:scroll-m-20" data-title="Pull deal and account state"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/pull-deal-state"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Pull deal and account state</span></div></div></a></li><li id="/claude-tag/users/use-cases/marketing-team" class="relative scroll-m-4 first:scroll-m-20" data-title="Marketing teams"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/marketing-team"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Marketing teams</span></div></div></a></li><li id="/claude-tag/users/use-cases/watch-monitors" class="relative scroll-m-4 first:scroll-m-20" data-title="Watch monitors and alerts"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/watch-monitors"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Watch monitors and alerts</span></div></div></a></li><li id="/claude-tag/users/use-cases/fix-bugs" class="relative scroll-m-4 first:scroll-m-20" data-title="Fix bugs"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/fix-bugs"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Fix bugs</span></div></div></a></li><li id="/claude-tag/users/use-cases/work-with-github" class="relative scroll-m-4 first:scroll-m-20" data-title="Work with GitHub"><a class="group flex items-start pr-3 py-1.5 cursor-pointer gap-x-3 text-left focus-visible:-outline-offset-2 rounded-xl w-full outline-offset-[-1px] hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/docs/claude-tag/users/use-cases/work-with-github"><div class="flex-1 flex min-w-0 items-start gap-x-2.5"><div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5 [word-break:break-word]"><span class="min-w-0 max-w-full break-words hyphens-auto">Work with GitHub</span></div></div></a></li></ul></div><script>(function () {
101101 try {
102102 if (window.__mintlifyInitialSidebarScrollDone) return;
103103
from line 3119
31193119.old-anchor {
31203120 scroll-margin-top: var(--scroll-mt, 7rem);
31213121}
3122</style><!--$--><!--/$--><div class="flex flex-row-reverse gap-12 box-border w-full pt-[calc(10rem+var(--banner-height,2.5rem))] lg:pt-10"><div class="relative grow box-border flex-col w-full mx-auto px-1 lg:pl-[5.7rem] lg:-ml-12 xl:w-[calc(100%-19rem)] xl:min-w-full" data-empty-page-layout="" id="content-area"><header id="header" class="relative leading-none @container/page-header"><div class="mt-0.5 space-y-2.5"><div class="eyebrow h-5 text-primary dark:text-primary-light text-sm font-semibold"> </div><div class="flex flex-col sm:flex-row items-start sm:items-center relative gap-2 min-w-0"><h1 id="page-title" class="text-3xl sm:text-4xl text-gray-900 tracking-tight dark:text-gray-200 [overflow-wrap:anywhere] font-semibold">Work with Claude Tag</h1><div id="page-context-menu" class="items-center shrink-0 min-w-[156px] justify-end ml-auto hidden @[520px]/page-header:flex"><button id="page-context-menu-button" class="rounded-l-xl px-3 text-gray-700 dark:text-gray-300 py-1.5 border border-gray-200 dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5 border-r-0" aria-label="Copy page"><div class="flex items-center gap-2 text-sm text-center font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="grid"><span aria-hidden="true" class="invisible col-start-1 row-start-1">Copy page</span><span class="col-start-1 row-start-1">Copy page</span></span></div></button><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="base-ui-_R_re4dd7av5tcd74t9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&>span]:line-clamp-1 overflow-hidden group focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border flex items-center justify-center h-[34px] border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 rotate-90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div><div class="mt-2 text-lg prose prose-gray dark:prose-invert [&>*]:[overflow-wrap:anywhere]"><p>Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user.</p></div><div id="page-context-menu" class="flex items-center shrink-0 min-w-[156px] mt-3 @[520px]/page-header:hidden"><button id="page-context-menu-button" class="rounded-l-xl px-3 text-gray-700 dark:text-gray-300 py-1.5 border border-gray-200 dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5 border-r-0" aria-label="Copy page"><div class="flex items-center gap-2 text-sm text-center font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="grid"><span aria-hidden="true" class="invisible col-start-1 row-start-1">Copy page</span><span class="col-start-1 row-start-1">Copy page</span></span></div></button><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="base-ui-_R_1mcdd7av5tcd74t9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&>span]:line-clamp-1 overflow-hidden group focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border flex items-center justify-center h-[34px] border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 rotate-90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></header><div class="mdx-content @container/columns-container relative mt-8 prose prose-gray dark:prose-invert [contain:inline-size] isolate empty:hidden mb-14" data-page-title="Work with Claude Tag" data-page-href="/claude-tag/overview" id="content"><div class="tm-hero"><div class="tm-hero-copy"><span class="tm-pill">Public Beta</span><p class="tm-hero-title">Tag <span class="tm-hero-at">@Claude</span> in. Get results back in the thread.</p><p class="tm-hero-lede">Anyone in a Slack channel can tag Claude into a problem and hand it work: reproduce a bug and open a pull request, turn a decision thread into a doc, assemble the state of a project. It posts a checklist in the thread as it goes, and the whole exchange stays visible to the channel.</p><div class="tm-hero-ctas"><a class="link tm-btn tm-btn-dark" href="/docs/claude-tag/admins/setup-overview">I’m setting it up →</a><a class="tm-btn tm-btn-light" href="#put-claude-tag-to-work">Use it in your channel ↓</a></div></div><div class="tm-slack"><div class="tm-slack-head"><span class="tm-slack-chan"># platform-eng</span><span class="tm-slack-members">38 members</span></div><div class="tm-slack-body"><div class="tm-msg"><span class="tm-avatar tm-avatar-user" aria-hidden="true">D</span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Dana</span><span class="tm-msg-time">2:14 PM</span></div><p>checkout has felt slow all morning — anyone else seeing it?</p></div></div><div class="tm-msg"><span class="tm-avatar tm-avatar-user tm-avatar-b" aria-hidden="true">L</span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Leo</span><span class="tm-msg-time">2:15 PM</span></div><p>same. <span class="tm-mention">@Claude</span> can you investigate? Compare latency against this morning’s deploy and find what’s causing it.</p></div></div><div class="tm-msg"><span class="tm-avatar tm-avatar-claude"><img src="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=032101c39ca3b1af9f72fc4af8e60d12" alt="" data-og-width="94" width="94" data-og-height="94" height="94" data-path="images/claude-tag/logo/clay-spark.svg" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=280&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=cfd209bc25a4794740c6ce203eb3cbd5 280w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=560&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=56bcce983cd8bde205683364e24e1685 560w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=840&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=336614fa9447c4f4f985d322bb667df7 840w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1100&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=fb5b4831af3174e5b49abee42199b5fc 1100w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1650&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=0244fb0eb9bb7dd0cf38fddeb44c41e0 1650w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=2500&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=5b9c8f67ae332a9922f449534d904bf7 2500w"/></span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Claude</span><span class="tm-msg-app">APP</span><span class="tm-msg-time">2:15 PM</span></div><p>On it. I’ll compare latency before and after the deploy, track down the cause, and report back here.</p><div class="tm-tasklist"><span class="tm-task-done"><span class="tm-sr">Done: </span>Pulled p99 latency from Datadog</span><span class="tm-task-done"><span class="tm-sr">Done: </span>Diffed deploy 4f2c1 against main</span><span class="tm-task-done"><span class="tm-sr">Done: </span>Reproduced the slow query locally</span><span class="tm-task-doing"><span class="tm-sr">In progress: </span>Opening a pull request with the fix…</span></div></div></div></div></div></div>
3122</style><!--$--><!--/$--><div class="flex flex-row-reverse gap-12 box-border w-full pt-[calc(10rem+var(--banner-height,2.5rem))] lg:pt-10"><div class="relative grow box-border flex-col w-full mx-auto px-1 lg:pl-[5.7rem] lg:-ml-12 xl:w-[calc(100%-19rem)] xl:min-w-full" data-empty-page-layout="" id="content-area" data-layout-item="content"><header id="header" data-layout-item="page-header" class="relative leading-none @container/page-header"><div class="mt-0.5 space-y-2.5"><div class="eyebrow h-5 text-primary dark:text-primary-light text-sm font-semibold"> </div><div class="flex flex-col sm:flex-row items-start sm:items-center relative gap-2 min-w-0"><h1 id="page-title" class="text-3xl sm:text-4xl text-gray-900 tracking-tight dark:text-gray-200 [overflow-wrap:anywhere] font-semibold">Work with Claude Tag</h1><div id="page-context-menu" class="items-center shrink-0 min-w-[156px] justify-end ml-auto hidden @[520px]/page-header:flex"><button id="page-context-menu-button" class="rounded-l-xl px-3 text-gray-700 dark:text-gray-300 py-1.5 border border-gray-200 dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5 border-r-0" aria-label="Copy page"><div class="flex items-center gap-2 text-sm text-center font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="grid"><span aria-hidden="true" class="invisible col-start-1 row-start-1">Copy page</span><span class="col-start-1 row-start-1">Copy page</span></span></div></button><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="base-ui-_R_re4dd7av5tcd74t9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&>span]:line-clamp-1 overflow-hidden group focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border flex items-center justify-center h-[34px] border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 rotate-90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div><div class="mt-2 text-lg prose prose-gray dark:prose-invert [&>*]:[overflow-wrap:anywhere]"><p>Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user.</p></div><div id="page-context-menu" class="flex items-center shrink-0 min-w-[156px] mt-3 @[520px]/page-header:hidden"><button id="page-context-menu-button" class="rounded-l-xl px-3 text-gray-700 dark:text-gray-300 py-1.5 border border-gray-200 dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5 border-r-0" aria-label="Copy page"><div class="flex items-center gap-2 text-sm text-center font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0"><path d="M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="grid"><span aria-hidden="true" class="invisible col-start-1 row-start-1">Copy page</span><span class="col-start-1 row-start-1">Copy page</span></span></div></button><button type="button" tabindex="0" aria-haspopup="menu" aria-expanded="false" id="base-ui-_R_1mcdd7av5tcd74t9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&>span]:line-clamp-1 overflow-hidden group focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border flex items-center justify-center h-[34px] border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3 transition-transform text-gray-400 group-hover:text-gray-600 dark:text-gray-600 dark:group-hover:text-gray-400 shrink-0 rotate-90"><path d="M6.5 2.75L12.75 9L6.5 15.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></header><div class="mdx-content @container/columns-container relative mt-8 prose prose-gray dark:prose-invert [contain:inline-size] isolate empty:hidden mb-14" data-page-title="Work with Claude Tag" data-page-href="/claude-tag/overview" id="content"><div class="tm-hero"><div class="tm-hero-copy"><span class="tm-pill">Public Beta</span><p class="tm-hero-title">Tag <span class="tm-hero-at">@Claude</span> in. Get results back in the thread.</p><p class="tm-hero-lede">Anyone in a Slack channel can tag Claude into a problem and hand it work: reproduce a bug and open a pull request, turn a decision thread into a doc, assemble the state of a project. It posts a checklist in the thread as it goes, and the whole exchange stays visible to the channel.</p><div class="tm-hero-ctas"><a class="link tm-btn tm-btn-dark" href="/docs/claude-tag/admins/setup-overview">I’m setting it up →</a><a class="tm-btn tm-btn-light" href="#put-claude-tag-to-work">Use it in your channel ↓</a></div></div><div class="tm-slack"><div class="tm-slack-head"><span class="tm-slack-chan"># platform-eng</span><span class="tm-slack-members">38 members</span></div><div class="tm-slack-body"><div class="tm-msg"><span class="tm-avatar tm-avatar-user" aria-hidden="true">D</span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Dana</span><span class="tm-msg-time">2:14 PM</span></div><p>checkout has felt slow all morning — anyone else seeing it?</p></div></div><div class="tm-msg"><span class="tm-avatar tm-avatar-user tm-avatar-b" aria-hidden="true">L</span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Leo</span><span class="tm-msg-time">2:15 PM</span></div><p>same. <span class="tm-mention">@Claude</span> can you investigate? Compare latency against this morning’s deploy and find what’s causing it.</p></div></div><div class="tm-msg"><span class="tm-avatar tm-avatar-claude"><img src="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=032101c39ca3b1af9f72fc4af8e60d12" alt="" data-og-width="94" width="94" data-og-height="94" height="94" data-path="images/claude-tag/logo/clay-spark.svg" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=280&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=cfd209bc25a4794740c6ce203eb3cbd5 280w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=560&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=56bcce983cd8bde205683364e24e1685 560w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=840&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=336614fa9447c4f4f985d322bb667df7 840w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1100&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=fb5b4831af3174e5b49abee42199b5fc 1100w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1650&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=0244fb0eb9bb7dd0cf38fddeb44c41e0 1650w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=2500&fit=max&auto=format&n=5JFKyLlO7sHMMf5J&q=85&s=5b9c8f67ae332a9922f449534d904bf7 2500w"/></span><div class="tm-msg-col"><div class="tm-msg-meta"><span class="tm-msg-name">Claude</span><span class="tm-msg-app">APP</span><span class="tm-msg-time">2:15 PM</span></div><p>On it. I’ll compare latency before and after the deploy, track down the cause, and report back here.</p><div class="tm-tasklist"><span class="tm-task-done"><span class="tm-sr">Done: </span>Pulled p99 latency from Datadog</span><span class="tm-task-done"><span class="tm-sr">Done: </span>Diffed deploy 4f2c1 against main</span><span class="tm-task-done"><span class="tm-sr">Done: </span>Reproduced the slow query locally</span><span class="tm-task-doing"><span class="tm-sr">In progress: </span>Opening a pull request with the fix…</span></div></div></div></div></div></div>
31233123<h2 class="flex whitespace-pre-wrap group font-semibold" id="plans-that-include-claude-tag"><div class="absolute" tabindex="-1"><a href="#plans-that-include-claude-tag" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100 focus:opacity-100 focus:outline-0 group/link" aria-label="Navigate to header"><div class="size-6 rounded-md flex items-center justify-center shadow-xs text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20 group-focus/link:border-2 group-focus/link:border-primary dark:group-focus/link:border-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 shrink-0"><path d="M8.50001 6.827C8.14801 6.995 7.81801 7.225 7.52701 7.517L7.51701 7.527C6.13601 8.908 6.13601 11.146 7.51701 12.527L9.69201 14.702C11.073 16.083 13.311 16.083 14.692 14.702L14.702 14.692C16.083 13.311 16.083 11.073 14.702 9.692L13.771 8.761" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9.50002 11.173C9.85202 11.005 10.182 10.775 10.473 10.483L10.483 10.473C11.864 9.092 11.864 6.854 10.483 5.473L8.30802 3.298C6.92702 1.917 4.68902 1.917 3.30802 3.298L3.29802 3.308C1.91702 4.689 1.91702 6.927 3.29802 8.308L4.22902 9.239" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></a></div><span class="cursor-pointer">Plans that include Claude Tag</span></h2>
31243124<span data-as="p">Claude Tag is available on Team and Enterprise plans, on Anthropic’s first-party service. It isn’t available on individual plans (Free, Pro, or Max), or for third-party deployments. To use it, your organization pairs its Slack workspace with its Claude organization; see <a class="link" href="/docs/claude-tag/admins/setup-overview">the setup overview</a> for the full prerequisites.</span>
31253125<span data-as="p">If you’re choosing between Claude products for Slack-shaped work, <a class="link" href="/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code">how Claude Tag differs from Cowork and Claude Code</a> compares them directly: team work in shared channels is Claude Tag; personal work on your own files is Cowork or Claude Code.</span>
from line 3170
31703170<span data-as="p"><a class="link" href="/docs/claude-tag/admins/setup-overview">Set up Claude Tag</a> walks through setup and connecting tools, with what to have ready, what each choice means, and how to verify Claude Tag works once you launch.</span>
31713171<div class="tm-strip"><div class="tm-strip-head"><p class="tm-strip-title">Security review</p><a class="link tm-strip-all" href="/docs/claude-tag/concepts/security-and-data">Security and data handling</a></div><p>The security model, what admins can and can’t restrict, audit trails, and network requirements.</p></div>
31723172<h2 class="flex whitespace-pre-wrap group font-semibold" id="where-to-start-with-claude-tag"><div class="absolute" tabindex="-1"><a href="#where-to-start-with-claude-tag" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100 focus:opacity-100 focus:outline-0 group/link" aria-label="Navigate to header"><div class="size-6 rounded-md flex items-center justify-center shadow-xs text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20 group-focus/link:border-2 group-focus/link:border-primary dark:group-focus/link:border-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-3 shrink-0"><path d="M8.50001 6.827C8.14801 6.995 7.81801 7.225 7.52701 7.517L7.51701 7.527C6.13601 8.908 6.13601 11.146 7.51701 12.527L9.69201 14.702C11.073 16.083 13.311 16.083 14.692 14.702L14.702 14.692C16.083 13.311 16.083 11.073 14.702 9.692L13.771 8.761" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M9.50002 11.173C9.85202 11.005 10.182 10.775 10.473 10.483L10.483 10.473C11.864 9.092 11.864 6.854 10.483 5.473L8.30802 3.298C6.92702 1.917 4.68902 1.917 3.30802 3.298L3.29802 3.308C1.91702 4.689 1.91702 6.927 3.29802 8.308L4.22902 9.239" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div></a></div><span class="cursor-pointer">Where to start with Claude Tag</span></h2>
3173<div class="columns prose dark:prose-invert grid max-w-none gap-4 sm:grid-cols-[repeat(var(--cols),minmax(0,1fr))] @2xl/columns-container:grid-cols-[repeat(var(--cols),minmax(0,1fr))] @[0px]/columns-container:grid-cols-1 card-group dark:prose-dark gap-y-0 sm:grid-cols-[repeat(var(--cols),minmax(0,1fr))]!" style="--cols:2"><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_675dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_675dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Set up Claude Tag</h2><div id="_R_675dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">Admins: pair your Slack workspace and launch</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_a75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_a75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Hand Claude Tag your first task</h2><div id="_R_a75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">It’s already in your channel: send your first message</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_e75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_e75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">How Claude Tag works</h2><div id="_R_e75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">The session model, what it can read, and how memory follows places</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_i75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_i75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Use case library</h2><div id="_R_i75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">Prompts to paste, by team and connection</span></div></div></div></div></div></div><div class="feedback-toolbar pb-16 w-full flex flex-col gap-y-8"><div class="flex flex-row flex-wrap gap-4 items-center justify-between"><p class="inline-block text-sm text-gray-600 dark:text-gray-400 whitespace-nowrap">Was this page helpful?</p><div class="flex flex-wrap grow gap-3 items-center justify-end"><div class="flex gap-3 items-center"><button id="feedback-thumbs-up" class="px-3.5 py-2 flex flex-row gap-3 items-center border-standard rounded-xl text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 bg-white/50 dark:bg-codeblock/50 hover:border-gray-500 hover:dark:border-gray-500 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0 text-current"><path d="M5.25 7.494C5.25 7.014 5.423 6.55 5.736 6.187L10 1.25C10.854 1.677 11.25 2.678 10.92 3.574L9.75 6.75H14.152C15.465 6.75 16.421 7.993 16.085 9.262L14.894 13.762C14.662 14.639 13.868 15.25 12.961 15.25H7.25C6.145 15.25 5.25 14.355 5.25 13.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.25 6.75H2.75C2.19772 6.75 1.75 7.19772 1.75 7.75V14.25C1.75 14.8023 2.19772 15.25 2.75 15.25H4.25C4.80228 15.25 5.25 14.8023 5.25 14.25V7.75C5.25 7.19772 4.80228 6.75 4.25 6.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><small class="text-sm font-normal leading-4">Yes</small></button><button id="feedback-thumbs-down" class="px-3.5 py-2 flex flex-row gap-3 items-center border-standard rounded-xl text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 bg-white/50 dark:bg-codeblock/50 hover:border-gray-500 hover:dark:border-gray-500 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0 text-current"><path d="M5.25 10.506C5.25 10.986 5.423 11.45 5.736 11.813L10 16.75C10.854 16.323 11.25 15.322 10.92 14.426L9.75 11.25H14.152C15.465 11.25 16.421 10.007 16.085 8.738L14.894 4.238C14.662 3.361 13.868 2.75 12.961 2.75H7.25C6.145 2.75 5.25 3.645 5.25 4.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.25 2.75H2.75C2.19772 2.75 1.75 3.19772 1.75 3.75V10.25C1.75 10.8023 2.19772 11.25 2.75 11.25H4.25C4.80228 11.25 5.25 10.8023 5.25 10.25V3.75C5.25 3.19772 4.80228 2.75 4.25 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><small class="text-sm font-normal leading-4">No</small></button></div><div class="flex gap-3"></div></div></div></div><nav id="pagination" aria-label="Pagination" class="px-0.5 flex items-center gap-6 text-sm font-semibold text-gray-700 dark:text-gray-200"><a rel="next" aria-label="Next: How Claude Tag works" data-component-part="pagination-next" class="group flex items-center min-w-0 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light gap-3 rounded-sm ml-auto pagination-next" href="/docs/claude-tag/concepts/how-it-works"><div class="truncate group-hover:text-gray-900 dark:group-hover:text-white" data-component-part="pagination-title">How Claude Tag works</div><svg viewBox="0 0 3 6" aria-hidden="true" data-component-part="pagination-chevron" class="h-1.5 shrink-0 stroke-gray-400 overflow-visible group-hover:stroke-gray-600 dark:group-hover:stroke-gray-300 rotate-180"><path d="M3 0L0 3L3 6" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></nav><div data-assistant-bar="" class="left-0 right-0 sticky bottom-0 w-full overflow-hidden z-20 pointer-events-none print:hidden"><div class="chat-assistant-floating-input w-full group/assistant-bar relative translate-y-[100px] opacity-0"><div class="relative pb-4 sm:pb-6 max-w-2xl mx-auto"><div class="flex flex-col w-full rounded-2xl pointer-events-auto bg-background-light dark:bg-background-dark border border-gray-200 dark:border-white/10 focus-within:border-primary dark:focus-within:border-primary-light transition-colors"><div class="relative flex items-end"><textarea id="chat-assistant-textarea" aria-label="Ask a question..." autoComplete="off" placeholder="Ask a question..." class="chat-assistant-input w-full bg-transparent border-0 peer/input text-gray-900 dark:text-gray-100 placeholder-gray-600 dark:placeholder-gray-300 outline-hidden! focus:outline-hidden! focus:ring-0 py-2.5 pl-3.5 pr-10 font-bodyWeight text-sm" style="resize:none"></textarea><button class="chat-assistant-send-button flex justify-center items-center rounded-full p-1 size-6 bg-primary/30 dark:bg-primary-dark/30 absolute right-2.5 bottom-2" aria-label="Send message" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-2.5 shrink-0 text-white dark:text-white"><path d="M9.0 1.5754L8.9999 16.4171" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.2563 8.319L8.9999 1.5754L15.7435 8.3191" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div></div></div></div></div></main></div><footer id="footer" class="advanced-footer flex flex-col items-center mx-auto border-t border-gray-100 dark:border-gray-800/50 peer-[.is-custom]:hidden! peer-[.is-custom]:sm:hidden! peer-[.is-custom]:md:hidden! peer-[.is-custom]:lg:hidden! peer-[.is-custom]:xl:hidden!"><div class="flex w-full flex-col gap-12 justify-between px-8 py-16 md:py-20 lg:py-28 max-w-246 z-20"><div class="flex flex-col md:flex-row gap-8 justify-between min-h-19"><div class="flex md:flex-col justify-between items-center md:items-start min-w-16 md:min-w-20 lg:min-w-48 md:gap-y-24"><a class="select-none" style="-webkit-touch-callout:none" href="/docs"><span class="sr-only">Claude.ai Documentation<!-- --> home page</span><img class="nav-logo w-auto relative object-contain shrink-0 block dark:hidden max-w-48 h-[26px]" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10" alt="light logo"/><img class="nav-logo w-auto relative object-contain shrink-0 hidden dark:block max-w-48 h-[26px]" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866" alt="dark logo"/></a><div class="gap-4 min-w-[140px] max-w-[492px] flex-wrap h-fit flex justify-end md:justify-start"><a href="https://x.com/AnthropicAI" target="_blank" rel="noopener noreferrer" class="h-fit"><span class="sr-only">x</span><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! w-5 h-5 bg-gray-500 dark:bg-gray-600 hover:bg-gray-600 dark:hover:bg-gray-500" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg");mask-repeat:no-repeat;mask-position:center"></svg></a><a href="https://www.linkedin.com/company/anthropicresearch" target="_blank" rel="noopener noreferrer" class="h-fit"><span class="sr-only">linkedin</span><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! w-5 h-5 bg-gray-500 dark:bg-gray-600 hover:bg-gray-600 dark:hover:bg-gray-500" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg");mask-repeat:no-repeat;mask-position:center"></svg></a></div></div><div class="flex flex-col sm:grid max-md:grid-cols-2! gap-8 flex-1" style="grid-template-columns:repeat(4, minmax(0, 1fr))"><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Company</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/company" target="_blank" rel="noreferrer">Anthropic</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/careers" target="_blank" rel="noreferrer">Careers</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/economic-futures" target="_blank" rel="noreferrer">Economic Futures</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/research" target="_blank" rel="noreferrer">Research</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/news" target="_blank" rel="noreferrer">News</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://trust.anthropic.com/" target="_blank" rel="noreferrer">Trust center</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/transparency" target="_blank" rel="noreferrer">Transparency</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Help and security</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/supported-countries" target="_blank" rel="noreferrer">Availability</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://status.anthropic.com/" target="_blank" rel="noreferrer">Status</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://support.claude.com/" target="_blank" rel="noreferrer">Support center</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Learn</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://academy.claude.com/" target="_blank" rel="noreferrer">Courses</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/mcp" target="_blank" rel="noreferrer">MCP connectors</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.claude.com/customers" target="_blank" rel="noreferrer">Customer stories</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/engineering" target="_blank" rel="noreferrer">Engineering blog</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/events" target="_blank" rel="noreferrer">Events</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/powered-by-claude" target="_blank" rel="noreferrer">Powered by Claude</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/services" target="_blank" rel="noreferrer">Service partners</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/programs/startups" target="_blank" rel="noreferrer">Startups program</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Terms and policies</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/privacy" target="_blank" rel="noreferrer">Privacy policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/responsible-disclosure-policy" target="_blank" rel="noreferrer">Disclosure policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/aup" target="_blank" rel="noreferrer">Usage policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/commercial-terms" target="_blank" rel="noreferrer">Commercial terms</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/consumer-terms" target="_blank" rel="noreferrer">Consumer terms</a></div></div></div></div></div></footer><!--$--><!--/$--></div><!--$?--><template id="B:0"></template><!--/$--></div></div><script>requestAnimationFrame(function(){$RT=performance.now()});</script><script src="/docs/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp" id="_R_" async=""></script><div hidden id="S:0"><div data-assistant-sheet-container="" class="sticky shrink-0 z-22 bg-background-light dark:bg-background-dark mt-(--banner-height,0px) top-(--banner-height,0px) h-[calc(100vh-var(--banner-height,0px))] max-lg:hidden print:hidden" style="width:var(--assistant-sheet-width, 0px);overflow:hidden"><div class="absolute left-0 top-0 bottom-0 w-px z-10 cursor-col-resize after:content-[""] after:absolute after:inset-y-0 after:-inset-x-2 after:select-none bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700"></div><div id="chat-assistant-sheet" class="flex flex-col overflow-hidden shrink-0 relative h-full bg-background-light dark:bg-background-dark chat-assistant-sheet" aria-hidden="true"><div class="w-full flex flex-col flex-1 min-h-0 lg:pt-3"><div class="chat-assistant-sheet-header flex items-center justify-between pb-3 px-4"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-5 text-primary dark:text-primary-light shrink-0" aria-hidden="true"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="font-medium text-gray-900 dark:text-gray-100">Assistant</span></div><div class="flex items-center gap-1"><button class="group hover:bg-gray-100 dark:hover:bg-white/10 p-1.5 rounded-lg" aria-label="Maximize assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4 sm:size-3.5 text-gray-500 group-hover:text-gray-700 dark:group-hover:text-gray-300 shrink-0"><path d="M10.75 2.75H15.25V7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M15.25 2.75L10.75 7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.75 10.75V15.25H7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.75 15.25L7.25 10.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button class="group hover:bg-gray-100 dark:hover:bg-white/10 p-1.5 rounded-lg" aria-label="Close assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-[20px] sm:size-4 text-gray-500 group-hover:text-gray-700 dark:group-hover:text-gray-300 shrink-0"><path d="M14 4L4 14" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4 4L14 14" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div><div id="chat-content" class="chat-assistant-sheet-content flex flex-col-reverse flex-1 overflow-y-auto relative px-5 min-h-0"><div class="grow"></div><div class="h-full flex flex-col justify-between"><div class="mt-4 flex flex-col items-center text-sm"><div class="mx-8 text-center text-gray-400 dark:text-gray-600 text-xs chat-assistant-disclaimer-text">Responses are generated using AI and may contain mistakes.</div></div></div></div><div class="px-4 pb-4 shrink-0"><div class=""><div class="flex flex-col w-full rounded-2xl pointer-events-auto bg-background-light dark:bg-background-dark border border-gray-200 dark:border-white/10 focus-within:border-primary dark:focus-within:border-primary-light transition-colors"><div class="relative flex items-end"><textarea id="chat-assistant-textarea" aria-label="Ask a question..." autoComplete="off" placeholder="Ask a question..." class="chat-assistant-input w-full bg-transparent border-0 peer/input text-gray-900 dark:text-gray-100 placeholder-gray-600 dark:placeholder-gray-300 outline-hidden! focus:outline-hidden! focus:ring-0 py-2.5 pl-3.5 pr-10 font-bodyWeight text-sm pb-0!" style="resize:none" rows="2"></textarea></div><div class="flex items-center justify-between px-2 pb-2"><input type="file" accept="image/*,.pdf,.js,.jsx,.ts,.tsx,.mjs,.cjs,.md,.mdx,.json,.html,.css,.py,.csv,.txt,.yaml,.yml,.xml,.sql,.sh,.bash,.zsh,.graphql,.gql,.toml,.env,.go,.rs,.rb,.java,.kt,.swift,.c,.cpp,.cc,.h,.hpp,.cs,.php,.dart,.lua,.r,.scala,.ini,.cfg,.conf,.log,.dockerfile,.makefile,.gitignore" multiple="" class="hidden"/><button type="button" class="p-1 rounded-lg text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:bg-gray-100 dark:hover:bg-white/10" aria-label="Add attachment"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3.5 shrink-0"><path d="M7.75 5V11.75C7.75 12.578 8.422 13.25 9.25 13.25C10.078 13.25 10.75 12.578 10.75 11.75V4.75C10.75 3.093 9.407 1.75 7.75 1.75C6.093 1.75 4.75 3.093 4.75 4.75V11.75C4.75 14.235 6.765 16.25 9.25 16.25C11.735 16.25 13.75 14.235 13.75 11.75V5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button class="chat-assistant-send-button flex justify-center items-center rounded-full p-1 size-6 bg-primary/30 dark:bg-primary-dark/30" aria-label="Send message" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-2.5 shrink-0 text-white dark:text-white"><path d="M9.0 1.5754L8.9999 16.4171" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.2563 8.319L8.9999 1.5754L15.7435 8.3191" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div></div></div></div></div></div><script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
3174$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\nb:I[168027,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"default\"]\n:HL[\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"style\"]\n:HL[\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"style\"]\n:HL[\"/docs/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/docs/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/docs/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3A0wR7imVG784X7IexfLa\",\"p\":\"/docs\",\"c\":[\"\",\"_sites\",\"claude-ai\",\"claude-tag\",\"overview\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"%5Fsites\",{\"children\":[[\"subdomain\",\"claude-ai\",\"d\"],{\"children\":[\"(multitenant)\",{\"children\":[[\"slug\",\"claude-tag/overview\",\"oc\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"suppressHydrationWarning\":true,\"lang\":\"en\",\"className\":\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\",\"data-banner-state\":\"visible\",\"data-assistant-state\":\"closed\",\"data-page-mode\":\"none\",\"data-current-path\":\"/\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){var b=\\\"/docs\\\";\\nfunction a(p){if(p==null)return\\\"/\\\";p=\\\"\\\"+p;if(\\\"\\\"===p)return\\\"/\\\";return\\\"/\\\"===p.charAt(0)?p:\\\"/\\\"+p}\\nfunction u(p){if(p==null)return p;p=\\\"\\\"+p;if(!p||p.charAt(p.length-1)===\\\"/\\\")return p.slice(0,-1);return p}\\nfunction i(p){if(p==null)return p;p=\\\"\\\"+p;if(6\u003c=p.length\u0026\u0026p.substring(p.length-6)===\\\"/index\\\")return p.substring(0,p.length-6);if(\\\"index\\\"===p)return\\\"\\\";return p}\\nvar p=(location.pathname||\\\"\\\").split(\\\"?\\\")[0].split(\\\"#\\\")[0]||\\\"\\\";\\nif(b)if(p===b)p=\\\"\\\";else if(0===p.indexOf(b+\\\"/\\\"))p=p.substring(b.length);\\np=a(p);p=u(p);p=i(p);p=\\\"\\\"===p||\\\"index\\\"===p?\\\"/\\\":a(p);\\ndocument.documentElement.setAttribute(\\\"data-current-path\\\",p);\\n}();\"}}],\"$undefined\",[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(() =\u003e {\\n const isIOS =\\n /iP(hone|ad|od)/.test(navigator.userAgent) ||\\n (/Macintosh/.test(navigator.userAgent) \u0026\u0026 navigator.maxTouchPoints \u003e 1);\\n if (!isIOS) return;\\n const apply = () =\u003e {\\n for (const meta of document.querySelectorAll('meta[name=\\\"viewport\\\"]')) {\\n const content = meta.getAttribute('content') || '';\\n if (!content.includes('maximum-scale')) {\\n meta.setAttribute('content', content + ', maximum-scale=1');\\n }\\n }\\n };\\n apply();\\n new MutationObserver(apply).observe(document.head, {\\n childList: true,\\n subtree: true,\\n attributes: true,\\n attributeFilter: ['content'],\\n });\\n})();\"}}],[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){\\nfunction read(){try{\\nvar e=performance.getEntriesByType?performance.getEntriesByType(\\\"navigation\\\"):[];\\nvar st=(e[0]\u0026\u0026e[0].serverTiming)||[];\\nvar g={};\\nfor(var i=0;i\u003cst.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\\nif(n===\\\"country\\\")g.country=d;else if(n===\\\"region\\\")g.region=d;else if(n===\\\"continent\\\")g.continent=d;}\\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\\n}catch(x){}}\\nread();document.addEventListener(\\\"DOMContentLoaded\\\",read);\\n}();\"}}],[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){try{\\nvar w=window;w.mintlify=w.mintlify||{};\\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\\nw.mintlify.api=w.mintlify.api||{};\\nw.mintlify.api.playground=w.mintlify.api.playground||{};\\nif(typeof w.mintlify.api.playground.setServerVariables!==\\\"function\\\"){\\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\\\"set\\\",variables:v});};\\n}\\nif(typeof w.mintlify.api.playground.clearServerVariables!==\\\"function\\\"){\\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\\\"clear\\\"});};\\n}\\n}catch(e){}}();\"}}],\"$L2\",\"$L3\",false]}],\"$L4\"]}]]}],{\"children\":[\"%5Fsites\",\"$L5\",{\"children\":[[\"subdomain\",\"claude-ai\",\"d\"],\"$L6\",{\"children\":[\"(multitenant)\",\"$L7\",{\"children\":[[\"slug\",\"claude-tag/overview\",\"oc\"],\"$L8\",{\"children\":[\"__PAGE__\",\"$L9\",{},null,false]},null,false]},null,false]},null,false]},null,false]},null,false],\"$La\",false]],\"m\":\"$undefined\",\"G\":[\"$b\",[\"$Lc\",\"$Ld\"]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"e:I[667786,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"MintlifyApiPlaygroundInputsInit\"]\nf:I[339756,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"default\"]\n10:I[556357,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/96f05c525d790774.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"default\"]\n11:I[837457,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"12:I[894587,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"13:I[152823,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"ColorVariables\"]\n"])</script><script>self.__next_f.push([1,"14:I[531961,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"FontScript\"]\n"])</script><script>self.__next_f.push([1,"15:I[649328,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"RoundedVariables\"]\n"])</script><script>self.__next_f.push([1,"16:I[702910,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"RecommendedPagesList\"]\n"])</script><script>self.__next_f.push([1,"17:I[570420,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"DataCurrentPathUpdater\"]\n18:I[172816,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"MintlifyNavigateEvents\"]\n19:I[341175,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c45fc5c3fa69ca32.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"default\"]\n1c:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"OutletBoundary\"]\n1e:I[711533,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"AsyncMetadataOutlet\"]\n20:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"ViewportBoundary\"]\n22:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"MetadataBoundary\"]\n23:\"$Sreact.suspense\"\n2:[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){\\nif(typeof CSS===\\\"undefined\\\"||!(\\\"registerProperty\\\" in CSS))return;\\nif(CSS.supports\u0026\u0026CSS.supports(\\\"-webkit-backdrop-filter:none\\\"))return;\\nvar n=[\\\"--s"])</script><script>self.__next_f.push([1,"croll-area-overflow-x-start\\\",\\\"--scroll-area-overflow-x-end\\\",\\\"--scroll-area-overflow-y-start\\\",\\\"--scroll-area-overflow-y-end\\\"];\\nvar d={\\\"syntax\\\":\\\"\u003clength\u003e\\\",\\\"inherits\\\":false,\\\"initialValue\\\":\\\"0px\\\"};\\nfor(var i=0;i\u003cn.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValue})}catch(e){}}\\n})();\"}}]\n"])</script><script>self.__next_f.push([1,"3:[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(function(a,b){try{let c=document.querySelector(\\\"div#banner\\\")?.innerText;if(c){for(let d=0;d\u003clocalStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)\u0026\u0026localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\\\"hidden\\\")}document.documentElement.setAttribute(b,\\\"visible\\\");return}for(let c=0;c\u003clocalStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)\u0026\u0026localStorage.getItem(d))return void document.documentElement.setAttribute(b,\\\"hidden\\\")}document.documentElement.setAttribute(b,\\\"visible\\\")}catch(a){document.documentElement.setAttribute(b,\\\"hidden\\\")}})(\\n \\\"bannerDismissed\\\",\\n \\\"data-banner-state\\\",\\n)\"}}]\n"])</script><script>self.__next_f.push([1,"4:[\"$\",\"body\",null,{\"className\":\"antialiased\",\"children\":[[\"$\",\"$Le\",null,{}],false,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$10\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/96f05c525d790774.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}]],\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L12\",null,{\"children\":[[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}],[\"$\",\"$L15\",null,{}],[\"$\",\"style\",null,{\"children\":\":root {\\n --primary: 17 120 102;\\n --primary-light: 74 222 128;\\n --primary-dark: 22 101 52;\\n --background-light: 255 255 255;\\n --background-dark: 15 17 23;\\n}\"}],[\"$\",\"main\",null,{\"className\":\"h-screen bg-background-light dark:bg-background-dark text-left\",\"children\":[\"$\",\"article\",null,{\"className\":\"bg-custom bg-fixed bg-center bg-cover relative flex flex-col items-center justify-center h-full\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-xl px-10\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex mb-6 rounded-full px-3 py-1 text-sm font-semibold mr-4 text-white p-1 bg-primary\",\"children\":[\"Error \",404]}],[\"$\",\"h1\",null,{\"className\":\"font-semibold mb-3 text-3xl\",\"children\":\"Page not found!\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-gray-600 dark:text-gray-400 mb-6\",\"children\":\"We couldn't find the page.\"}],[\"$\",\"$L16\",null,{}]]}]}]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],false,[\"$\",\"$L17\",null,{}],[\"$\",\"$L18\",null,{}]]}]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$19\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/c45fc5c3fa69ca32.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true}]],\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L12\",null,{\"children\":[[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}],[\"$\",\"$L15\",null,{}],[\"$\",\"style\",null,{\"children\":\":root {\\n --primary: 17 120 102;\\n --primary-light: 74 222 128;\\n --primary-dark: 22 101 52;\\n --background-light: 255 255 255;\\n --background-dark: 15 17 23;\\n}\"}],[\"$\",\"main\",null,{\"className\":\"h-screen bg-background-light dark:bg-background-dark text-left\",\"children\":[\"$\",\"article\",null,{\"className\":\"bg-custom bg-fixed bg-center bg-cover relative flex flex-col items-center justify-center h-full\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-xl px-10\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex mb-6 rounded-full px-3 py-1 text-sm font-semibold mr-4 text-white p-1 bg-primary\",\"children\":[\"Error \",404]}],[\"$\",\"h1\",null,{\"className\":\"font-semibold mb-3 text-3xl\",\"children\":\"Page not found!\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-gray-600 dark:text-gray-400 mb-6\",\"children\":\"We couldn't find the page.\"}],[\"$\",\"$L16\",null,{}]]}]}]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-11\",{\"src\":\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-12\",{\"src\":\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-13\",{\"src\":\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-14\",{\"src\":\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-15\",{\"src\":\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-16\",{\"src\":\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-17\",{\"src\":\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-18\",{\"src\":\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L1a\"]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$1\",\"c\",{\"children\":[\"$L1b\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/94a43ec1201b91d0.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/524bce83f7b2f674.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/1347c67505f8d6ff.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/91cc018f0b521f3f.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/1ab82a2e4905d2c6.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/e7049fc815953dcd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/f944c986e78b445f.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L1c\",null,{\"children\":[\"$L1d\",[\"$\",\"$L1e\",null,{\"promise\":\"$@1f\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L20\",null,{\"children\":\"$L21\"}],null],[\"$\",\"$L22\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$23\",null,{\"fallback\":null,\"children\":\"$L24\"}]}]}]]}]\nc:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nd:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"21:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}]]\n1d:null\n"])</script><script>self.__next_f.push([1,"1f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Work with Claude Tag - Claude.ai Documentation\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"Claude.ai Documentation\"}],[\"$\",\"meta\",\"3\",{\"name\":\"generator\",\"content\":\"Mintlify\"}],[\"$\",\"meta\",\"4\",{\"name\":\"msapplication-config\",\"content\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/browserconfig.xml\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Claude.ai Documentation\"}],[\"$\",\"meta\",\"6\",{\"name\":\"msapplication-TileColor\",\"content\":\"#0E0E0E\"}],[\"$\",\"link\",\"7\",{\"rel\":\"canonical\",\"href\":\"https://claude.com/docs/claude-tag/overview\"}],[\"$\",\"link\",\"8\",{\"rel\":\"alternate\",\"type\":\"application/xml\",\"href\":\"/docs/sitemap.xml\"}],[\"$\",\"link\",\"9\",{\"rel\":\"alternate\",\"type\":\"text/markdown\",\"href\":\"/docs/claude-tag/overview.md\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:title\",\"content\":\"Work with Claude Tag - Claude.ai Documentation\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:description\",\"content\":\"Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user.\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:url\",\"content\":\"https://claude.com/docs/claude-tag/overview\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:site_name\",\"content\":\"Claude.ai Documentation\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image\",\"content\":\"https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+\u0026title=Work+with+Claude+Tag\u0026description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.\u0026theme=25fa76e0782ecdcbf2e9c357\u0026signature=997ebf3faebd938bda7ef71f6e8f0a913e72af016dbe5aba123cbe1493f4ea79\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:title\",\"content\":\"Work with Claude Tag - Claude.ai Documentation\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:description\",\"content\":\"Claude Tag puts Claude in your Slack channels with admin-governed access. See what to hand it, how setup works, and where to start as an admin or end user.\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image\",\"content\":\"https://claude-ai.mintlify.app/_mintlify/api/og/v2?division=+\u0026title=Work+with+Claude+Tag\u0026description=Claude+Tag+puts+Claude+in+your+Slack+channels+with+admin-governed+access.+See+what+to+hand+it%2C+how+setup+works%2C+and+where+to+start+as+an+admin+or+end+user.\u0026theme=25fa76e0782ecdcbf2e9c357\u0026signature=997ebf3faebd938bda7ef71f6e8f0a913e72af016dbe5aba123cbe1493f4ea79\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"24\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/android-chrome-192x192.png\",\"type\":\"image/png\",\"sizes\":\"192x192\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"25\",{\"rel\":\"apple-touch-icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/apple-touch-icon.png\",\"type\":\"image/png\",\"sizes\":\"180x180\",\"media\":\"$undefined\"}],[\"$\",\"link\",\"26\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-16x16.png\",\"type\":\"image/png\",\"sizes\":\"16x16\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"27\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-32x32.png\",\"type\":\"image/png\",\"sizes\":\"32x32\",\"media\":\"(prefers-color-scheme: light)\"}],\"$L25\",\"$L26\",\"$L27\",\"$L28\",\"$L29\",\"$L2a\"],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"24:\"$1f:metadata\"\n"])</script><script>self.__next_f.push([1,"2b:I[27201,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"IconMark\"]\n25:[\"$\",\"link\",\"28\",{\"rel\":\"shortcut icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"$undefined\",\"media\":\"(prefers-color-scheme: light)\"}]\n26:[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/android-chrome-192x192.png\",\"type\":\"image/png\",\"sizes\":\"192x192\",\"media\":\"(prefers-color-scheme: dark)\"}]\n27:[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-16x16.png\",\"type\":\"image/png\",\"sizes\":\"16x16\",\"media\":\"(prefers-color-scheme: dark)\"}]\n28:[\"$\",\"link\",\"31\",{\"rel\":\"icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-32x32.png\",\"type\":\"image/png\",\"sizes\":\"32x32\",\"media\":\"(prefers-color-scheme: dark)\"}]\n29:[\"$\",\"link\",\"32\",{\"rel\":\"shortcut icon\",\"href\":\"/docs/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"$undefined\",\"media\":\"(prefers-color-scheme: dark)\"}]\n2a:[\"$\",\"$L2b\",\"33\",{}]\n"])</script><script>self.__next_f.push([1,"2c:I[707934,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5c186094c9fda2b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d862bd6fb239b5b8.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b6cc1d841f12879e.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/2e9a232d689746bd.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\"],\"WebMcpRegistration\"]\n"])</script><script>self.__next_f.push([1,"2d:I[590280,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/5dbc86df6bf555b5.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/1b1b59ab8946b354.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/b7de6f750ae860e1.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/6f6228a978343b4c.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AVp\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GCn6nRjMXPzUh9EXsZMh5m1Y5AV
3173<div class="columns prose dark:prose-invert grid max-w-none gap-4 sm:grid-cols-[repeat(var(--cols),minmax(0,1fr))] @2xl/columns-container:grid-cols-[repeat(var(--cols),minmax(0,1fr))] @[0px]/columns-container:grid-cols-1 card-group dark:prose-dark gap-y-0 sm:grid-cols-[repeat(var(--cols),minmax(0,1fr))]!" style="--cols:2"><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_675dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_675dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Set up Claude Tag</h2><div id="_R_675dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">Admins: pair your Slack workspace and launch</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_a75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_a75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Hand Claude Tag your first task</h2><div id="_R_a75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">It’s already in your channel: send your first message</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_e75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_e75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">How Claude Tag works</h2><div id="_R_e75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">The session model, what it can read, and how memory follows places</span></div></div></div></div><div class="card block font-normal group relative my-2 ring-2 ring-transparent rounded-2xl bg-white dark:bg-background-dark border border-gray-950/10 dark:border-white/10 overflow-hidden w-full cursor-pointer hover:border-primary! dark:hover:border-primary-light!" aria-labelledby="_R_i75dd7av5tcd74t9snpfiutb_" tabindex="0" role="link"><div class="px-6 py-5 relative flex items-center gap-x-4" data-component-part="card-content-container"><div class="absolute text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-light top-5 right-5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="m-0.5 size-3 shrink-0"><path d="M14.25 3.75L3.75525 14.2446" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.71301 3.75H14.2499V13.2869" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></div><div aria-hidden="true" class="size-6 fill-gray-800 dark:fill-gray-100 text-gray-800 dark:text-gray-100 [&>svg]:size-6" data-component-part="card-icon"><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! size-6 m-0! shrink-0 bg-primary dark:bg-primary-light" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg");mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_i75dd7av5tcd74t9snpfiutb_" class="not-prose font-semibold text-base text-gray-800 dark:text-white" contentEditable="false" data-component-part="card-title">Use case library</h2><div id="_R_i75dd7av5tcd74t9snpfiutbH1_" class="prose font-normal text-base text-gray-600 dark:text-gray-400 leading-6 mt-0" data-component-part="card-content"><span data-as="p">Prompts to paste, by team and connection</span></div></div></div></div></div></div><div class="feedback-toolbar pb-16 w-full flex flex-col gap-y-8"><div class="flex flex-row flex-wrap gap-4 items-center justify-between"><p class="inline-block text-sm text-gray-600 dark:text-gray-400 whitespace-nowrap">Was this page helpful?</p><div class="flex flex-wrap grow gap-3 items-center justify-end"><div class="flex gap-3 items-center"><button id="feedback-thumbs-up" class="px-3.5 py-2 flex flex-row gap-3 items-center border-standard rounded-xl text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 bg-white/50 dark:bg-codeblock/50 hover:border-gray-500 hover:dark:border-gray-500 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0 text-current"><path d="M5.25 7.494C5.25 7.014 5.423 6.55 5.736 6.187L10 1.25C10.854 1.677 11.25 2.678 10.92 3.574L9.75 6.75H14.152C15.465 6.75 16.421 7.993 16.085 9.262L14.894 13.762C14.662 14.639 13.868 15.25 12.961 15.25H7.25C6.145 15.25 5.25 14.355 5.25 13.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.25 6.75H2.75C2.19772 6.75 1.75 7.19772 1.75 7.75V14.25C1.75 14.8023 2.19772 15.25 2.75 15.25H4.25C4.80228 15.25 5.25 14.8023 5.25 14.25V7.75C5.25 7.19772 4.80228 6.75 4.25 6.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><small class="text-sm font-normal leading-4">Yes</small></button><button id="feedback-thumbs-down" class="px-3.5 py-2 flex flex-row gap-3 items-center border-standard rounded-xl text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 bg-white/50 dark:bg-codeblock/50 hover:border-gray-500 hover:dark:border-gray-500 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-4 shrink-0 text-current"><path d="M5.25 10.506C5.25 10.986 5.423 11.45 5.736 11.813L10 16.75C10.854 16.323 11.25 15.322 10.92 14.426L9.75 11.25H14.152C15.465 11.25 16.421 10.007 16.085 8.738L14.894 4.238C14.662 3.361 13.868 2.75 12.961 2.75H7.25C6.145 2.75 5.25 3.645 5.25 4.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4.25 2.75H2.75C2.19772 2.75 1.75 3.19772 1.75 3.75V10.25C1.75 10.8023 2.19772 11.25 2.75 11.25H4.25C4.80228 11.25 5.25 10.8023 5.25 10.25V3.75C5.25 3.19772 4.80228 2.75 4.25 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><small class="text-sm font-normal leading-4">No</small></button></div><div class="flex gap-3"></div></div></div></div><nav id="pagination" data-layout-item="pagination" aria-label="Pagination" class="px-0.5 flex items-center gap-6 text-sm font-semibold text-gray-700 dark:text-gray-200"><a rel="next" aria-label="Next: How Claude Tag works" data-component-part="pagination-next" class="group flex items-center min-w-0 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-light gap-3 rounded-sm ml-auto pagination-next" href="/docs/claude-tag/concepts/how-it-works"><div class="truncate group-hover:text-gray-900 dark:group-hover:text-white" data-component-part="pagination-title">How Claude Tag works</div><svg viewBox="0 0 3 6" aria-hidden="true" data-component-part="pagination-chevron" class="h-1.5 shrink-0 stroke-gray-400 overflow-visible group-hover:stroke-gray-600 dark:group-hover:stroke-gray-300 rotate-180"><path d="M3 0L0 3L3 6" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></nav><div data-assistant-bar="" class="left-0 right-0 sticky bottom-0 w-full overflow-hidden z-20 pointer-events-none print:hidden"><div class="chat-assistant-floating-input w-full group/assistant-bar relative translate-y-[100px] opacity-0"><div class="relative pb-4 sm:pb-6 max-w-2xl mx-auto"><div class="flex flex-col w-full rounded-2xl pointer-events-auto bg-background-light dark:bg-background-dark border border-gray-200 dark:border-white/10 focus-within:border-primary dark:focus-within:border-primary-light transition-colors"><div class="relative flex items-end"><textarea id="chat-assistant-textarea" aria-label="Ask a question..." autoComplete="off" placeholder="Ask a question..." class="chat-assistant-input w-full bg-transparent border-0 peer/input text-gray-900 dark:text-gray-100 placeholder-gray-600 dark:placeholder-gray-300 outline-hidden! focus:outline-hidden! focus:ring-0 py-2.5 pl-3.5 pr-10 font-bodyWeight text-sm" style="resize:none"></textarea><button class="chat-assistant-send-button flex justify-center items-center rounded-full p-1 size-6 bg-primary/30 dark:bg-primary-dark/30 absolute right-2.5 bottom-2" aria-label="Send message" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-2.5 shrink-0 text-white dark:text-white"><path d="M9.0 1.5754L8.9999 16.4171" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.2563 8.319L8.9999 1.5754L15.7435 8.3191" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div></div></div></div></div></main></div><footer id="footer" data-layout-item="footer" class="advanced-footer flex flex-col items-center mx-auto border-t border-gray-100 dark:border-gray-800/50 peer-[.is-custom]:hidden! peer-[.is-custom]:sm:hidden! peer-[.is-custom]:md:hidden! peer-[.is-custom]:lg:hidden! peer-[.is-custom]:xl:hidden!"><div class="flex w-full flex-col gap-12 justify-between px-8 py-16 md:py-20 lg:py-28 max-w-246 z-20"><div class="flex flex-col md:flex-row gap-8 justify-between min-h-19"><div class="flex md:flex-col justify-between items-center md:items-start min-w-16 md:min-w-20 lg:min-w-48 md:gap-y-24"><a class="select-none" style="-webkit-touch-callout:none" href="/docs"><span class="sr-only">Claude.ai Documentation<!-- --> home page</span><img class="nav-logo w-auto relative object-contain shrink-0 block dark:hidden max-w-48 h-[26px]" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=e870c19cb781d8a7c7b7d19de53b0a10" alt="light logo"/><img class="nav-logo w-auto relative object-contain shrink-0 hidden dark:block max-w-48 h-[26px]" src="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&auto=format&n=1fyDNLAICe3KG6rB&q=85&s=80cc0b06d8fd9aeefec8acb226de6866" alt="dark logo"/></a><div class="gap-4 min-w-[140px] max-w-[492px] flex-wrap h-fit flex justify-end md:justify-start"><a href="https://x.com/AnthropicAI" target="_blank" rel="noopener noreferrer" class="h-fit"><span class="sr-only">x</span><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! w-5 h-5 bg-gray-500 dark:bg-gray-600 hover:bg-gray-600 dark:hover:bg-gray-500" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg");mask-repeat:no-repeat;mask-position:center"></svg></a><a href="https://www.linkedin.com/company/anthropicresearch" target="_blank" rel="noopener noreferrer" class="h-fit"><span class="sr-only">linkedin</span><svg class="forced-colors:forced-color-adjust-none forced-colors:bg-[color:CanvasText]! w-5 h-5 bg-gray-500 dark:bg-gray-600 hover:bg-gray-600 dark:hover:bg-gray-500" aria-hidden="true" focusable="false" style="-webkit-mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url("https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg");mask-repeat:no-repeat;mask-position:center"></svg></a></div></div><div class="flex flex-col sm:grid max-md:grid-cols-2! gap-8 flex-1" style="grid-template-columns:repeat(4, minmax(0, 1fr))"><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Company</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/company" target="_blank" rel="noreferrer">Anthropic</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/careers" target="_blank" rel="noreferrer">Careers</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/economic-futures" target="_blank" rel="noreferrer">Economic Futures</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/research" target="_blank" rel="noreferrer">Research</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/news" target="_blank" rel="noreferrer">News</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://trust.anthropic.com/" target="_blank" rel="noreferrer">Trust center</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/transparency" target="_blank" rel="noreferrer">Transparency</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Help and security</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/supported-countries" target="_blank" rel="noreferrer">Availability</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://status.anthropic.com/" target="_blank" rel="noreferrer">Status</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://support.claude.com/" target="_blank" rel="noreferrer">Support center</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Learn</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://academy.claude.com/" target="_blank" rel="noreferrer">Courses</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/mcp" target="_blank" rel="noreferrer">MCP connectors</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.claude.com/customers" target="_blank" rel="noreferrer">Customer stories</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/engineering" target="_blank" rel="noreferrer">Engineering blog</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/events" target="_blank" rel="noreferrer">Events</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/powered-by-claude" target="_blank" rel="noreferrer">Powered by Claude</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/partners/services" target="_blank" rel="noreferrer">Service partners</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://claude.com/programs/startups" target="_blank" rel="noreferrer">Startups program</a></div></div><div class="flex flex-col gap-4 flex-1 whitespace-nowrap w-full md:items-center"><div class="flex gap-4 flex-col"><p class="text-sm font-semibold text-gray-950 dark:text-white mb-1">Terms and policies</p><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/privacy" target="_blank" rel="noreferrer">Privacy policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/responsible-disclosure-policy" target="_blank" rel="noreferrer">Disclosure policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/aup" target="_blank" rel="noreferrer">Usage policy</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/commercial-terms" target="_blank" rel="noreferrer">Commercial terms</a><a class="text-sm max-w-36 whitespace-normal md:truncate text-gray-950/50 dark:text-white/50 hover:text-gray-950/70 dark:hover:text-white/70" href="https://www.anthropic.com/legal/consumer-terms" target="_blank" rel="noreferrer">Consumer terms</a></div></div></div></div></div></footer><!--$--><!--/$--></div><!--$?--><template id="B:0"></template><!--/$--></div></div><script>requestAnimationFrame(function(){$RT=performance.now()});</script><script src="/docs/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP" id="_R_" async=""></script><div hidden id="S:0"><div data-assistant-sheet-container="" class="sticky shrink-0 z-22 bg-background-light dark:bg-background-dark mt-(--banner-height,0px) top-(--banner-height,0px) h-[calc(100vh-var(--banner-height,0px))] max-lg:hidden print:hidden" style="width:var(--assistant-sheet-width, 0px);overflow:hidden"><div class="absolute left-0 top-0 bottom-0 w-px z-10 cursor-col-resize after:content-[""] after:absolute after:inset-y-0 after:-inset-x-2 after:select-none bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700"></div><div id="chat-assistant-sheet" class="flex flex-col overflow-hidden shrink-0 relative h-full bg-background-light dark:bg-background-dark chat-assistant-sheet" aria-hidden="true"><div class="w-full flex flex-col flex-1 min-h-0 lg:pt-3"><div class="chat-assistant-sheet-header flex items-center justify-between pb-3 px-4"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="size-5 text-primary dark:text-primary-light shrink-0" aria-hidden="true"><path d="M5.65799 2.99L4.39499 2.569L3.97399 1.306C3.83699 0.898 3.16199 0.898 3.02499 1.306L2.60399 2.569L1.34099 2.99C1.13699 3.058 0.998993 3.249 0.998993 3.464C0.998993 3.679 1.13699 3.87 1.34099 3.938L2.60399 4.359L3.02499 5.622C3.09299 5.826 3.28499 5.964 3.49999 5.964C3.71499 5.964 3.90599 5.826 3.97499 5.622L4.39599 4.359L5.65899 3.938C5.86299 3.87 6.00099 3.679 6.00099 3.464C6.00099 3.249 5.86199 3.058 5.65799 2.99Z" fill="currentColor" stroke="none"></path><path d="M9.5 2.75L11.412 7.587L16.25 9.5L11.412 11.413L9.5 16.25L7.587 11.413L2.75 9.5L7.587 7.587L9.5 2.75Z" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg><span class="font-medium text-gray-900 dark:text-gray-100">Assistant</span></div><div class="flex items-center gap-1"><button class="group hover:bg-gray-100 dark:hover:bg-white/10 p-1.5 rounded-lg" aria-label="Maximize assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-4 sm:size-3.5 text-gray-500 group-hover:text-gray-700 dark:group-hover:text-gray-300 shrink-0"><path d="M10.75 2.75H15.25V7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M15.25 2.75L10.75 7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.75 10.75V15.25H7.25" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.75 15.25L7.25 10.75" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button class="group hover:bg-gray-100 dark:hover:bg-white/10 p-1.5 rounded-lg" aria-label="Close assistant panel"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-[20px] sm:size-4 text-gray-500 group-hover:text-gray-700 dark:group-hover:text-gray-300 shrink-0"><path d="M14 4L4 14" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M4 4L14 14" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div><div id="chat-content" class="chat-assistant-sheet-content flex flex-col-reverse flex-1 overflow-y-auto relative px-5 min-h-0"><div class="grow"></div><div class="h-full flex flex-col justify-between"><div class="mt-4 flex flex-col items-center text-sm"><div class="mx-8 text-center text-gray-400 dark:text-gray-600 text-xs chat-assistant-disclaimer-text">Responses are generated using AI and may contain mistakes.</div></div></div></div><div class="px-4 pb-4 shrink-0"><div class=""><div class="flex flex-col w-full rounded-2xl pointer-events-auto bg-background-light dark:bg-background-dark border border-gray-200 dark:border-white/10 focus-within:border-primary dark:focus-within:border-primary-light transition-colors"><div class="relative flex items-end"><textarea id="chat-assistant-textarea" aria-label="Ask a question..." autoComplete="off" placeholder="Ask a question..." class="chat-assistant-input w-full bg-transparent border-0 peer/input text-gray-900 dark:text-gray-100 placeholder-gray-600 dark:placeholder-gray-300 outline-hidden! focus:outline-hidden! focus:ring-0 py-2.5 pl-3.5 pr-10 font-bodyWeight text-sm pb-0!" style="resize:none" rows="2"></textarea></div><div class="flex items-center justify-between px-2 pb-2"><input type="file" accept="image/*,.pdf,.js,.jsx,.ts,.tsx,.mjs,.cjs,.md,.mdx,.json,.html,.css,.py,.csv,.txt,.yaml,.yml,.xml,.sql,.sh,.bash,.zsh,.graphql,.gql,.toml,.env,.go,.rs,.rb,.java,.kt,.swift,.c,.cpp,.cc,.h,.hpp,.cs,.php,.dart,.lua,.r,.scala,.ini,.cfg,.conf,.log,.dockerfile,.makefile,.gitignore" multiple="" class="hidden"/><button type="button" class="p-1 rounded-lg text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 hover:bg-gray-100 dark:hover:bg-white/10" aria-label="Add attachment"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="size-3.5 shrink-0"><path d="M7.75 5V11.75C7.75 12.578 8.422 13.25 9.25 13.25C10.078 13.25 10.75 12.578 10.75 11.75V4.75C10.75 3.093 9.407 1.75 7.75 1.75C6.093 1.75 4.75 3.093 4.75 4.75V11.75C4.75 14.235 6.765 16.25 9.25 16.25C11.735 16.25 13.75 14.235 13.75 11.75V5" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button><button class="chat-assistant-send-button flex justify-center items-center rounded-full p-1 size-6 bg-primary/30 dark:bg-primary-dark/30" aria-label="Send message" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="size-2.5 shrink-0 text-white dark:text-white"><path d="M9.0 1.5754L8.9999 16.4171" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path><path d="M2.2563 8.319L8.9999 1.5754L15.7435 8.3191" stroke="currentColor" width="1.5" linecap="round" linejoin="round"></path></svg></button></div></div></div></div></div></div></div></div><script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
3174$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\nb:I[168027,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n:HL[\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"style\"]\n:HL[\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"style\"]\n:HL[\"/docs/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/docs/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/docs/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"CyD_FcPiwdxCx61YTpKDC\",\"p\":\"/docs\",\"c\":[\"\",\"_sites\",\"claude-ai\",\"claude-tag\",\"overview\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"%5Fsites\",{\"children\":[[\"subdomain\",\"claude-ai\",\"d\"],{\"children\":[\"(multitenant)\",{\"children\":[[\"slug\",\"claude-tag/overview\",\"oc\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"suppressHydrationWarning\":true,\"lang\":\"en\",\"className\":\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\",\"data-banner-state\":\"visible\",\"data-assistant-state\":\"closed\",\"data-page-mode\":\"none\",\"data-current-path\":\"/\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){var b=\\\"/docs\\\";\\nfunction a(p){if(p==null)return\\\"/\\\";p=\\\"\\\"+p;if(\\\"\\\"===p)return\\\"/\\\";return\\\"/\\\"===p.charAt(0)?p:\\\"/\\\"+p}\\nfunction u(p){if(p==null)return p;p=\\\"\\\"+p;if(!p||p.charAt(p.length-1)===\\\"/\\\")return p.slice(0,-1);return p}\\nfunction i(p){if(p==null)return p;p=\\\"\\\"+p;if(6\u003c=p.length\u0026\u0026p.substring(p.length-6)===\\\"/index\\\")return p.substring(0,p.length-6);if(\\\"index\\\"===p)return\\\"\\\";return p}\\nvar p=(location.pathname||\\\"\\\").split(\\\"?\\\")[0].split(\\\"#\\\")[0]||\\\"\\\";\\nif(b)if(p===b)p=\\\"\\\";else if(0===p.indexOf(b+\\\"/\\\"))p=p.substring(b.length);\\np=a(p);p=u(p);p=i(p);p=\\\"\\\"===p||\\\"index\\\"===p?\\\"/\\\":a(p);\\ndocument.documentElement.setAttribute(\\\"data-current-path\\\",p);\\n}();\"}}],\"$undefined\",[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(() =\u003e {\\n const isIOS =\\n /iP(hone|ad|od)/.test(navigator.userAgent) ||\\n (/Macintosh/.test(navigator.userAgent) \u0026\u0026 navigator.maxTouchPoints \u003e 1);\\n if (!isIOS) return;\\n const apply = () =\u003e {\\n for (const meta of document.querySelectorAll('meta[name=\\\"viewport\\\"]')) {\\n const content = meta.getAttribute('content') || '';\\n if (!content.includes('maximum-scale')) {\\n meta.setAttribute('content', content + ', maximum-scale=1');\\n }\\n }\\n };\\n apply();\\n new MutationObserver(apply).observe(document.head, {\\n childList: true,\\n subtree: true,\\n attributes: true,\\n attributeFilter: ['content'],\\n });\\n})();\"}}],[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){\\nfunction read(){try{\\nvar e=performance.getEntriesByType?performance.getEntriesByType(\\\"navigation\\\"):[];\\nvar st=(e[0]\u0026\u0026e[0].serverTiming)||[];\\nvar g={};\\nfor(var i=0;i\u003cst.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\\nif(n===\\\"country\\\")g.country=d;else if(n===\\\"region\\\")g.region=d;else if(n===\\\"continent\\\")g.continent=d;}\\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\\n}catch(x){}}\\nread();document.addEventListener(\\\"DOMContentLoaded\\\",read);\\n}();\"}}],[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"!function(){try{\\nvar w=window;w.mintlify=w.mintlify||{};\\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\\nw.mintlify.api=w.mintlify.api||{};\\nw.mintlify.api.playground=w.mintlify.api.playground||{};\\nif(typeof w.mintlify.api.playground.setServerVariables!==\\\"function\\\"){\\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\\\"set\\\",variables:v});};\\n}\\nif(typeof w.mintlify.api.playground.clearServerVariables!==\\\"function\\\"){\\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\\\"clear\\\"});};\\n}\\n}catch(e){}}();\"}}],\"$L2\",\"$L3\",false]}],\"$L4\"]}]]}],{\"children\":[\"%5Fsites\",\"$L5\",{\"children\":[[\"subdomain\",\"claude-ai\",\"d\"],\"$L6\",{\"children\":[\"(multitenant)\",\"$L7\",{\"children\":[[\"slug\",\"claude-tag/overview\",\"oc\"],\"$L8\",{\"children\":[\"__PAGE__\",\"$L9\",{},null,false]},null,false]},null,false]},null,false]},null,false]},null,false],\"$La\",false]],\"m\":\"$undefined\",\"G\":[\"$b\",[\"$Lc\",\"$Ld\"]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"e:I[667786,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"MintlifyApiPlaygroundInputsInit\"]\nf:I[339756,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n10:I[556357,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/75f3b681e0a5ffdc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n11:I[837457,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"12:I[894587,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"13:I[152823,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"ColorVariables\"]\n"])</script><script>self.__next_f.push([1,"14:I[531961,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"FontScript\"]\n"])</script><script>self.__next_f.push([1,"15:I[649328,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"RoundedVariables\"]\n"])</script><script>self.__next_f.push([1,"16:I[702910,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"RecommendedPagesList\"]\n"])</script><script>self.__next_f.push([1,"17:I[570420,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"DataCurrentPathUpdater\"]\n18:I[172816,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"MintlifyNavigateEvents\"]\n19:I[341175,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/81e8302a78f091fc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n1c:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"OutletBoundary\"]\n1e:I[711533,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"AsyncMetadataOutlet\"]\n20:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"ViewportBoundary\"]\n22:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"MetadataBoundary\"]\n23:\"$Sreact.suspense\"\n2:[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){\\nif(typeof CSS===\\\"undefined\\\"||!(\\\"registerProperty\\\" in CSS))return;\\nif(CSS.supports\u0026\u0026CSS.supports(\\\"-webkit-backdrop-filter:none\\\"))return;\\nvar n=[\\\"--s"])</script><script>self.__next_f.push([1,"croll-area-overflow-x-start\\\",\\\"--scroll-area-overflow-x-end\\\",\\\"--scroll-area-overflow-y-start\\\",\\\"--scroll-area-overflow-y-end\\\"];\\nvar d={\\\"syntax\\\":\\\"\u003clength\u003e\\\",\\\"inherits\\\":false,\\\"initialValue\\\":\\\"0px\\\"};\\nfor(var i=0;i\u003cn.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValue})}catch(e){}}\\n})();\"}}]\n"])</script><script>self.__next_f.push([1,"3:[\"$\",\"script\",null,{\"type\":\"text/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"(function(a,b){try{let c=document.querySelector(\\\"div#banner\\\")?.innerText;if(c){for(let d=0;d\u003clocalStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)\u0026\u0026localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\\\"hidden\\\")}document.documentElement.setAttribute(b,\\\"visible\\\");return}for(let c=0;c\u003clocalStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)\u0026\u0026localStorage.getItem(d))return void document.documentElement.setAttribute(b,\\\"hidden\\\")}document.documentElement.setAttribute(b,\\\"visible\\\")}catch(a){document.documentElement.setAttribute(b,\\\"hidden\\\")}})(\\n \\\"bannerDismissed\\\",\\n \\\"data-banner-state\\\",\\n)\"}}]\n"])</script><script>self.__next_f.push([1,"4:[\"$\",\"body\",null,{\"className\":\"antialiased\",\"children\":[[\"$\",\"$Le\",null,{}],false,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$10\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/75f3b681e0a5ffdc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}]],\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L12\",null,{\"children\":[[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}],[\"$\",\"$L15\",null,{}],[\"$\",\"style\",null,{\"children\":\":root {\\n --primary: 17 120 102;\\n --primary-light: 74 222 128;\\n --primary-dark: 22 101 52;\\n --background-light: 255 255 255;\\n --background-dark: 15 17 23;\\n}\"}],[\"$\",\"main\",null,{\"className\":\"h-screen bg-background-light dark:bg-background-dark text-left\",\"children\":[\"$\",\"article\",null,{\"className\":\"bg-custom bg-fixed bg-center bg-cover relative flex flex-col items-center justify-center h-full\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-xl px-10\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex mb-6 rounded-full px-3 py-1 text-sm font-semibold mr-4 text-white p-1 bg-primary\",\"children\":[\"Error \",404]}],[\"$\",\"h1\",null,{\"className\":\"font-semibold mb-3 text-3xl\",\"children\":\"Page not found!\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-gray-600 dark:text-gray-400 mb-6\",\"children\":\"We couldn't find the page.\"}],[\"$\",\"$L16\",null,{}]]}]}]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],false,[\"$\",\"$L17\",null,{}],[\"$\",\"$L18\",null,{}]]}]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$19\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/81e8302a78f091fc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true}]],\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L12\",null,{\"children\":[[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}],[\"$\",\"$L15\",null,{}],[\"$\",\"style\",null,{\"children\":\":root {\\n --primary: 17 120 102;\\n --primary-light: 74 222 128;\\n --primary-dark: 22 101 52;\\n --background-light: 255 255 255;\\n --background-dark: 15 17 23;\\n}\"}],[\"$\",\"main\",null,{\"className\":\"h-screen bg-background-light dark:bg-background-dark text-left\",\"children\":[\"$\",\"article\",null,{\"className\":\"bg-custom bg-fixed bg-center bg-cover relative flex flex-col items-center justify-center h-full\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-xl px-10\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex mb-6 rounded-full px-3 py-1 text-sm font-semibold mr-4 text-white p-1 bg-primary\",\"children\":[\"Error \",404]}],[\"$\",\"h1\",null,{\"className\":\"font-semibold mb-3 text-3xl\",\"children\":\"Page not found!\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-gray-600 dark:text-gray-400 mb-6\",\"children\":\"We couldn't find the page.\"}],[\"$\",\"$L16\",null,{}]]}]}]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-11\",{\"src\":\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-12\",{\"src\":\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-13\",{\"src\":\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-14\",{\"src\":\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-15\",{\"src\":\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-16\",{\"src\":\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-17\",{\"src\":\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-18\",{\"src\":\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L1a\"]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$1\",\"c\",{\"children\":[\"$L1b\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/7f946ab7181007fc.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/67d053872e792a2f.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/1347c67505f8d6ff.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/60fd1253ec41fdda.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/1ab82a2e4905d2c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/5b8c190337b4ea0e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/6bfa0fb038a43585.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L1c\",null,{\"children\":[\"$L1d\",[\"$\",\"$L1e\",null,{\"promise\":\"$@1f\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L20\",null,{\"children\":\"$L21\"}],null],[\"$\",\"$L22\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$23\",null,{\"fallback\":null,\"children\":\"$L24\"}]}]}]]}]\nc:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nd:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/8b33240f23923228.css?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"21:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}]]\n1d:null\n"])</script><script>self.__next_f.push([1,"25:I[707934,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"WebMcpRegistration\"]\n"])</script><script>self.__next_f.push([1,"26:I[590280,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"LivePreviewProvider\"]\n"])</script><script>self.__next_f.push([1,"27:I[973254,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"LivePreviewFavicon\"]\n"])</script><script>self.__next_f.push([1,"28:I[197336,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/2dc9542eaa51ff35.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7698e61585ff109e.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1923a2abbfafddf6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/6d5d0cc45fca7b52.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/db80d0f10b43a156.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1218b43cc3036511.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/f59ee70b5c4dd9c6.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/7779cbb5188157d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"29:I[91557,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/18fe2a22edb834ec.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/783da4f0060c3036.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/3cf7432e12ec55d7.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/aef4c95688a888c9.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/1f7da6a16613c726.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/4c2a38aad66c9452.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/bb04ae81b16fc915.js?dpl=dpl_GkZb48iPhEZ1EBCiCDsSc4oGtMFP\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_G
cli-reference Changed · +146 / -135 lines
from line 6
66
77You can start sessions, pipe content, resume conversations, and manage updates with these commands:
88
9| Command | Description | Example |
10| :------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |
11| `claude` | Start interactive session | `claude` |
12| `claude "query"` | Start interactive session with initial prompt | `claude "explain this project"` |
13| `claude -p "query"` | Query via SDK, then exit | `claude -p "explain this function"` |
14| `cat file \| claude -p "query"` | Process piped content | `cat logs.txt \| claude -p "explain"` |
15| `claude -c` | Continue most recent conversation in current directory | `claude -c` |
16| `claude -c -p "query"` | Continue via SDK | `claude -c -p "Check for type errors"` |
17| `claude -r "<session>" "query"` | Resume session by ID or name | `claude -r "auth-refactor" "Finish this PR"` |
18| `claude update` | Update to latest version | `claude update` |
19| `claude gateway` | Start the self-hosted [Claude apps gateway](/docs/en/claude-apps-gateway) server, for administrators deploying SSO and policy in front of Claude Code on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. Requires `--config` pointing at a [`gateway.yaml`](/docs/en/claude-apps-gateway-config). Available in Claude Code v2.1.195 and later. | `claude gateway --config gateway.yaml` |
20| `claude install [version]` | Install or reinstall the native binary. Accepts a version like `2.1.118`, or `stable` or `latest`. See [Install a specific version](/docs/en/setup#install-a-specific-version) | `claude install stable` |
21| `claude auth login` | Sign in to your Anthropic account. Use `--email` to pre-fill your email address, `--sso` to force SSO authentication, and `--console` to sign in with Anthropic Console for API usage billing instead of a Claude subscription | `claude auth login --console` |
22| `claude auth logout` | Log out from your Anthropic account | `claude auth logout` |
23| `claude auth status` | Show authentication status as JSON. Use `--text` for human-readable output. Exits with code 0 if logged in, 1 if not | `claude auth status` |
24| `claude agents` | Open [agent view](/docs/en/agent-view) to monitor and dispatch parallel background sessions. Use `--cwd <path>` to show only sessions started under that directory, or `--json` to print active sessions as a JSON array for scripting (`--json --all` also includes completed background sessions). Pass `--permission-mode`, `--model`, `--effort`, or `--agent` to set [defaults for dispatched sessions](/docs/en/agent-view#permission-mode-model-and-effort). Accepts `--settings`, `--add-dir`, `--plugin-dir`, and `--mcp-config` like the top-level `claude` command. Opening agent view requires an interactive terminal | `claude agents --json` |
25| `claude attach <id>` | Attach to a [background session](/docs/en/agent-view#manage-sessions-from-the-shell) in this terminal | `claude attach 7c5dcf5d` |
26| `claude auto-mode defaults` | Print the built-in [auto mode](/docs/en/permission-modes#eliminate-prompts-with-auto-mode) classifier rules as JSON. Use `claude auto-mode config` to see your effective config with settings applied. `--label <prefix>` prints only the rules whose label starts with that prefix, matched case-insensitively. Requires Claude Code v2.1.208 or later | `claude auto-mode defaults --label 'Git Destructive'` |
27| `claude auto-mode reset` | Restore the default [auto mode](/docs/en/permission-modes#eliminate-prompts-with-auto-mode) configuration by removing the `autoMode` section from your user settings file. Prompts for confirmation before writing; pass `-y`/`--yes` to skip the prompt. Rules from [managed settings](/docs/en/server-managed-settings) or the `--settings` flag still apply. Requires Claude Code v2.1.212 or later. See [Inspect the defaults and your effective config](/docs/en/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |
28| `claude daemon status` | Print the background-session [supervisor's](/docs/en/agent-view#the-supervisor-process) state, version, socket directory, and worker count for diagnostics. Exits 1 if the supervisor isn't running | `claude daemon status` |
29| `claude daemon stop --any` | Stop the background-session [supervisor](/docs/en/agent-view#the-supervisor-process) and the sessions it hosts. Pass `--keep-workers` to leave background sessions running so the next supervisor reconnects to them. `--any` confirms stopping an on-demand supervisor, which is the default. Use this to recover from an [unresponsive supervisor](/docs/en/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |
30| `claude doctor` | Print read-only installation and settings diagnostics from the terminal without starting a session, including install health, settings-file validation errors, and Remote Control eligibility. For the in-session setup checkup that can also apply fixes, run [`/doctor`](/docs/en/commands#all-commands) | `claude doctor` |
31| `claude import [source]` | Start an interactive session that runs [`/import`](/docs/en/commands#all-commands) to bring configuration from other coding agents into Claude Code. Accepts the same `--dry-run` and `--yes` options as the command. Not available on Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, or Claude Platform on AWS. Also unavailable when you turn off [feature-flag fetching](/docs/en/env-vars#features-that-need-feature-flag-fetching). Requires Claude Code v2.1.213 or later | `claude import codex --dry-run` |
32| `claude logs <id>` | Print recent output from a [background session](/docs/en/agent-view#manage-sessions-from-the-shell) | `claude logs 7c5dcf5d` |
33| `claude mcp` | Configure Model Context Protocol (MCP) servers | See the [Claude Code MCP documentation](/docs/en/mcp). |
34| `claude mcp login <name>` | Run a configured MCP server's OAuth flow without opening the interactive `/mcp` panel. Works for HTTP, SSE, and claude.ai connector servers. Add `--no-browser` over SSH to print the authorization URL instead of opening a browser, then paste the redirect URL back at the prompt. See [Authenticate from the command line](/docs/en/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |
35| `claude mcp logout <name>` | Clear stored OAuth credentials for an MCP server | `claude mcp logout sentry` |
36| `claude plugin` | Manage Claude Code [plugins](/docs/en/plugins/overview). Alias: `claude plugins`. See [plugin reference](/docs/en/plugins/cli-reference#claude-plugin-commands) for subcommands | `claude plugin install code-review@claude-plugins-official` |
37| `claude project purge [path]` | Delete all local Claude Code state for a project: transcripts, task lists, debug logs, file-edit history, prompt history lines, and the project's entry in `~/.claude.json`. Omit `[path]` to pick from an interactive list. Flags: `--dry-run` to preview, `-y`/`--yes` to skip confirmation, `-i`/`--interactive` to confirm each item, `--all` for every project. See [Clear local data](/docs/en/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |
38| `claude remote-control` | Start a [Remote Control](/docs/en/remote-control) server to control Claude Code from Claude.ai or the Claude app. Runs in server mode (no local interactive session). See [Server mode flags](/docs/en/remote-control#start-a-remote-control-session). After you stop the server, you can bring back the sessions it was serving. See [Resume sessions after stopping the server](/docs/en/remote-control#resume-sessions-after-stopping-the-server) | `claude remote-control --name "My Project"` |
39| `claude respawn <id>` | Restart a [background session](/docs/en/agent-view#manage-sessions-from-the-shell), running or stopped, with its conversation intact. Use `--all` to restart every running session, e.g. to pick up an updated Claude Code binary | `claude respawn 7c5dcf5d` |
40| `claude rm <id>` | Remove a [background session](/docs/en/agent-view#manage-sessions-from-the-shell) from the list. When the removal is [refused over the session's worktree](/docs/en/agent-view#what-deleting-a-session-removes) and a second `claude rm` can resolve it, the refusal prints the exact flag and value to pass: `--discard-unpushed <commit>@<worktree-id>` discards a worktree that has unpushed commits along with those commits, and `--force-remove-worktree <worktree-id>` deletes a worktree directory that git or the `WorktreeRemove` hook couldn't remove. `--discard-unpushed` requires Claude Code v2.1.260 or later, and `--force-remove-worktree` requires v2.1.268 or later. The conversation transcript stays on your local machine, available through `claude --resume` | `claude rm 7c5dcf5d` |
41| `claude self-hosted-runner` | Start a runner process that registers this machine or container with a [self-hosted environment](/docs/en/self-hosted-environments) and hosts Claude Code cloud sessions on your infrastructure. Run `claude self-hosted-runner setup` for a guided operator walkthrough, `claude self-hosted-runner doctor` to [diagnose a deployed runner](/docs/en/self-hosted-environments-deploy#troubleshooting), and `claude self-hosted-runner orchestrator` to spawn [on-demand runners](/docs/en/self-hosted-environments-configuration#on-demand-runners). Requires Claude Code v2.1.224 or later | `claude self-hosted-runner setup` |
42| `claude setup-token` | Generate a long-lived OAuth token for CI and scripts. Prints the token to the terminal without saving it. Requires a Claude subscription. See [Generate a long-lived token](/docs/en/authentication#generate-a-long-lived-token) | `claude setup-token` |
43| `claude stop <id>` | Stop a [background session](/docs/en/agent-view#manage-sessions-from-the-shell). Also accepts `claude kill` | `claude stop 7c5dcf5d` |
44| `claude ultrareview [target]` | Run [ultrareview](/docs/en/ultrareview#run-ultrareview-non-interactively) non-interactively. Prints findings to stdout and exits 0 on success or 1 on failure. Use `--json` for the raw payload and `--timeout <minutes>` to override the 45-minute default. Use `--post` on a `github.com` pull request target to post the finished findings to the PR as one plain comment from your GitHub account. `--no-post` is the default. `--post` and `--no-post` require Claude Code v2.1.227 or later. See [Post findings to the pull request](/docs/en/ultrareview#post-findings-to-the-pull-request) | `claude ultrareview 1234 --json` |
9| Command | Description | Example |
10| :- | :- | :- |
11| `claude` | Start interactive session | `claude` |
12| `claude "query"` | Start interactive session with initial prompt | `claude "explain this project"` |
13| `claude -p "query"` | Query via SDK, then exit | `claude -p "explain this function"` |
14| `cat file \| claude -p "query"` | Process piped content | `cat logs.txt \| claude -p "explain"` |
15| `claude -c` | Continue most recent conversation in current directory | `claude -c` |
16| `claude -c -p "query"` | Continue via SDK | `claude -c -p "Check for type errors"` |
17| `claude -r "<session>" "query"` | Resume session by ID or name | `claude -r "auth-refactor" "Finish this PR"` |
18| `claude update` | Update to latest version | `claude update` |
19| `claude gateway` | Start the self-hosted [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway) server, for administrators deploying SSO and policy in front of Claude Code on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. Requires `--config` pointing at a [`gateway.yaml`](https://code.claude.com/docs/en/claude-apps-gateway-config). | `claude gateway --config gateway.yaml` |
20| `claude install [version]` | Install or reinstall the native binary. Accepts a version like `2.1.118`, or `stable` or `latest`. See [Install a specific version](https://code.claude.com/docs/en/setup.md#install-a-specific-version) | `claude install stable` |
21| `claude auth login` | Sign in to your Anthropic account. Use `--email` to pre-fill your email address, `--sso` to force SSO authentication, and `--console` to sign in with Anthropic Console for API usage billing instead of a Claude subscription | `claude auth login --console` |
22| `claude auth logout` | Log out from your Anthropic account | `claude auth logout` |
23| `claude auth status` | Show authentication status as JSON. Use `--text` for human-readable output. Exits with code 0 if logged in, 1 if not. The JSON includes a `configDirectory` field naming the [configuration directory](https://code.claude.com/docs/en/claude-directory.md) the CLI uses. The field requires Claude Code v2.1.268 or later. The JSON's `authMethod` field is one of `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper`, or `third_party` | `claude auth status` |
24| `claude agents` | Open [agent view](https://code.claude.com/docs/en/agent-view.md) to monitor and dispatch parallel background sessions. Use `--cwd <path>` to show only sessions started under that directory, or `--json` to print active sessions as a JSON array for scripting (`--json --all` also includes completed background sessions). Pass `--permission-mode`, `--model`, `--effort`, or `--agent` to set [defaults for dispatched sessions](https://code.claude.com/docs/en/agent-view.md#permission-mode-model-and-effort). Accepts `--settings`, `--add-dir`, `--plugin-dir`, and `--mcp-config` like the top-level `claude` command. Opening agent view requires an interactive terminal | `claude agents --json` |
25| `claude attach <id\|name>` | Attach to a [background session](https://code.claude.com/docs/en/agent-view.md#manage-sessions-from-the-shell) in this terminal. Passing part of a running session's name in place of the ID requires Claude Code v2.1.290 or later | `claude attach 7c5dcf5d` |
26| `claude auto-mode defaults` | Print the built-in [auto mode](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) classifier rules as JSON. Use `claude auto-mode config` to see your effective config with settings applied. `--label <prefix>` prints only the rules whose label starts with that prefix, matched case-insensitively. Requires Claude Code v2.1.208 or later | `claude auto-mode defaults --label 'Git Destructive'` |
27| `claude auto-mode reset` | Restore the default [auto mode](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) configuration by removing the `autoMode` section from your user settings file. Prompts for confirmation before writing; pass `-y`/`--yes` to skip the prompt. Rules from [managed settings](https://code.claude.com/docs/en/server-managed-settings.md) or the `--settings` flag still apply. Requires Claude Code v2.1.212 or later. See [Inspect the defaults and your effective config](https://code.claude.com/docs/en/auto-mode-config.md#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |
28| `claude daemon logs` | Follow the background-session [supervisor's](https://code.claude.com/docs/en/agent-view.md#the-supervisor-process) log file, `~/.claude/daemon.log`, printing new lines as they arrive until you press `Ctrl+C` | `claude daemon logs` |
29| `claude daemon run` | Run the background-session [supervisor](https://code.claude.com/docs/en/agent-view.md#the-supervisor-process) in the foreground of this terminal, printing its log | `claude daemon run` |
30| `claude daemon status` | Print the background-session [supervisor's](https://code.claude.com/docs/en/agent-view.md#the-supervisor-process) state, version, socket directory, and worker count for diagnostics. Exits 1 if the supervisor isn't running | `claude daemon status` |
31| `claude daemon stop --any` | Stop the background-session [supervisor](https://code.claude.com/docs/en/agent-view.md#the-supervisor-process) and the sessions it hosts. Pass `--keep-workers` to leave background sessions running for the next supervisor to reconnect to. `--any` confirms stopping an on-demand supervisor, which is the default. Use this to recover from an [unresponsive supervisor](https://code.claude.com/docs/en/agent-view.md#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |
32| `claude doctor` | Print read-only installation and settings diagnostics from the terminal without starting a session, including install health, settings-file validation errors, and Remote Control eligibility. For the in-session setup checkup that can also apply fixes, run [`/doctor`](https://code.claude.com/docs/en/commands#all-commands) | `claude doctor` |
33| `claude import [source]` | Start an interactive session that runs [`/import`](https://code.claude.com/docs/en/commands#all-commands) to bring configuration from other coding agents into Claude Code. Accepts the same `--dry-run` and `--yes` options as the command. Not available on Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, or Claude Platform on AWS. Also unavailable when you turn off [feature-flag fetching](https://code.claude.com/docs/en/env-vars.md#features-that-need-feature-flag-fetching). Requires Claude Code v2.1.213 or later | `claude import codex --dry-run` |
34| `claude logs <id\|name>` | Print recent output from a [background session](https://code.claude.com/docs/en/agent-view.md#manage-sessions-from-the-shell). Passing part of a session's name in place of the ID requires Claude Code v2.1.290 or later | `claude logs 7c5dcf5d` |
35| `claude mcp` | Configure Model Context Protocol (MCP) servers | See the [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp.md). |
36| `claude mcp login <name>` | Run a configured MCP server's OAuth flow without opening the interactive `/mcp` panel. Works for HTTP, SSE, and claude.ai connector servers. Add `--no-browser` over SSH to print the authorization URL instead of opening a browser. For an HTTP or SSE server, paste the redirect URL back at the prompt. For a claude.ai connector, see [Authorize a connector again from your shell](https://code.claude.com/docs/en/remote-control.md#authorize-a-connector-again-from-your-shell). See [Authenticate from the command line](https://code.claude.com/docs/en/mcp.md#authenticate-from-the-command-line) | `claude mcp login sentry` |
37| `claude mcp logout <name>` | Clear stored OAuth credentials for an MCP server | `claude mcp logout sentry` |
38| `claude plugin` | Manage Claude Code [plugins](https://code.claude.com/docs/en/plugins/overview.md). Alias: `claude plugins`. See [plugin reference](https://code.claude.com/docs/en/plugins/cli-reference.md#claude-plugin-commands) for subcommands | `claude plugin install code-review@claude-plugins-official` |
39| `claude purge [path]` | Delete all local Claude Code state for a project: transcripts, task lists, debug logs, file-edit history, prompt history lines, and the project's entry in `~/.claude.json`. Omit `[path]` to pick from an interactive list. Flags: `--dry-run` to preview, `-y`/`--yes` to skip confirmation, `-i`/`--interactive` to confirm each item, `--all` for every project. See [Clear local data](https://code.claude.com/docs/en/claude-directory.md#clear-local-data) | `claude purge ~/work/repo --dry-run` |
40| `claude remote-control` | Start a [Remote Control](https://code.claude.com/docs/en/remote-control.md) server to control Claude Code from Claude.ai or the Claude app. Runs in server mode (no local interactive session). See [Server mode flags](https://code.claude.com/docs/en/remote-control.md#start-a-remote-control-session). After you stop the server, you can bring back the sessions it was serving. See [Resume sessions after stopping the server](https://code.claude.com/docs/en/remote-control.md#resume-sessions-after-stopping-the-server) | `claude remote-control --name "My Project"` |
41| `claude respawn <id>` | Restart a [background session](https://code.claude.com/docs/en/agent-view.md#manage-sessions-from-the-shell), running or stopped, with its conversation intact. Use `--all` to restart every running session, e.g. to pick up an updated Claude Code binary | `claude respawn 7c5dcf5d` |
42| `claude rm <id>` | Remove a [background session](https://code.claude.com/docs/en/agent-view.md#manage-sessions-from-the-shell) from the list. When the removal is [refused over the session's worktree](https://code.claude.com/docs/en/agent-view.md#what-deleting-a-session-removes) and a second `claude rm` can resolve it, the refusal prints the exact flag and value to pass: `--discard-unpushed <commit>@<worktree-id>` discards a worktree that has unpushed commits along with those commits, and `--force-remove-worktree <worktree-id>` deletes a worktree directory that git or the `WorktreeRemove` hook couldn't remove. `--discard-unpushed` requires Claude Code v2.1.260 or later, and `--force-remove-worktree` requires v2.1.268 or later. The conversation transcript stays on your local machine, available through `claude --resume` | `claude rm 7c5dcf5d` |
43| `claude self-hosted-runner` | Start a runner process that registers this machine or container with a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) and hosts Claude Code cloud sessions on your infrastructure. Run `claude self-hosted-runner setup` for a guided operator walkthrough, `claude self-hosted-runner doctor` to [diagnose a deployed runner](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#troubleshooting), and `claude self-hosted-runner orchestrator` to spawn [on-demand runners](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#on-demand-runners). Requires Claude Code v2.1.224 or later | `claude self-hosted-runner setup` |
44| `claude setup-token` | Generate a long-lived OAuth token for CI and scripts. Prints the token to the terminal without saving it. Requires a Claude subscription. See [Generate a long-lived token](https://code.claude.com/docs/en/authentication.md#generate-a-long-lived-token) | `claude setup-token` |
45| `claude stop <id>` | Stop a [background session](https://code.claude.com/docs/en/agent-view.md#manage-sessions-from-the-shell). Also accepts `claude kill` | `claude stop 7c5dcf5d` |
46| `claude ultrareview [target]` | Run [ultrareview](https://code.claude.com/docs/en/ultrareview.md#run-ultrareview-non-interactively) non-interactively. Prints findings to stdout and exits 0 on success or 1 on failure. Use `--json` for the raw payload and `--timeout <minutes>` to override the 45-minute default. Use `--post` on a `github.com` pull request target to post the finished findings to the PR as one plain comment from your GitHub account. `--no-post` is the default. `--post` and `--no-post` require Claude Code v2.1.227 or later. See [Post findings to the pull request](https://code.claude.com/docs/en/ultrareview.md#post-findings-to-the-pull-request) | `claude ultrareview 1234 --json` |
4547
4648If you mistype a subcommand, Claude Code suggests the closest match and exits without starting a session. For example, `claude udpate` prints `Did you mean claude update?`.
4749
48As of v2.1.199, `claude --dangerously-skip-permissions daemon <subcommand>` runs the `daemon` subcommand. Earlier versions treated `daemon <subcommand>` as the prompt for a new interactive session, so the subcommand never ran when the flag came first, a common setup when `claude` is aliased to include the flag. Only a leading `--dangerously-skip-permissions` or `--allow-dangerously-skip-permissions` routes to `daemon` this way; any other leading flag still starts an interactive session.
50`claude --dangerously-skip-permissions daemon <subcommand>` runs the `daemon` subcommand, so the subcommand works when `claude` is aliased to include the flag. Only a leading `--dangerously-skip-permissions` or `--allow-dangerously-skip-permissions` routes to `daemon` this way; with any other flag ahead of `daemon`, the subcommand doesn't run.
4951
5052## CLI flags
5153
5254Customize Claude Code's behavior with these command-line flags. `claude --help` does not list every flag, so a flag's absence from `--help` does not mean it is unavailable.
5355
54| Flag | Description | Example |
55| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------- |
56| `--add-dir` | Add additional working directories for Claude to read and edit files. Grants file access; Claude Code [doesn't discover](/docs/en/permissions#additional-directories-grant-file-access-not-configuration) most `.claude/` configuration from these directories. Validates that each path exists as a directory. You can't add most [network paths](/docs/en/errors#working-directory-is-a-network-path), such as `\\server\share`. To persist these directories across sessions, set [`permissions.additionalDirectories`](/docs/en/settings-reference#permissions-additionaldirectories) in settings | `claude --add-dir ../apps ../lib` |
57| `--advisor <model>` | Enable the server-side [advisor tool](/docs/en/advisor) for this session with a model alias, `fable`, `opus`, or `sonnet`, or a full model ID. Takes precedence over the `advisorModel` setting for the session. `fable` requires [Fable access](/docs/en/advisor#choose-an-advisor-model) | `claude --advisor opus` |
58| `--agent` | Specify an agent for the current session (overrides the `agent` setting) | `claude --agent my-custom-agent` |
59| `--agents` | Define custom subagents dynamically via JSON. Accepts the [fields listed for CLI-defined subagents](/docs/en/sub-agents#choose-the-subagent-scope). With `--print`, the value can instead be the path to a JSON file holding the object; the file form requires Claude Code v2.1.281 or later. Claude Code validates the value at startup and exits on an invalid one; see [`Invalid --agents configuration`](/docs/en/errors#invalid-agents-configuration) for the message and for the flags and environment variable that skip the validation. Validation requires Claude Code v2.1.242 or later | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |
60| `--allow-dangerously-skip-permissions` | Add `bypassPermissions` to the `Shift+Tab` mode cycle without starting in it. Lets you begin in a different mode like `plan` and switch to `bypassPermissions` later. See [permission modes](/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |
61| `--allowedTools`, `--allowed-tools` | Tools that execute without prompting for permission. See [permission rule syntax](/docs/en/settings-reference#permission-rule-syntax) for pattern matching. To restrict which tools are available, use `--tools` instead. If you name one of the [task-tracking tools](/docs/en/tools-reference#task-tool-availability) here, Claude Code also opts the session in | `"Bash(git log *)" "Bash(git diff *)" "Read"` |
62| `--append-subagent-system-prompt` | Append custom text to the end of every [subagent](/docs/en/sub-agents)'s system prompt, nested subagents included, apart from a [forked subagent](/docs/en/sub-agents#fork-the-current-conversation), which reuses the conversation's own prompt. Only applies in non-interactive mode with `-p`. Requires Claude Code v2.1.205 or later | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |
63| `--append-subagent-system-prompt-file` | Load text from a file and append it to [subagent](/docs/en/sub-agents) system prompts. An alternative to `--append-subagent-system-prompt` for text too long to pass on the command line. The two flags can't be combined. Only applies in non-interactive mode with `-p`. Requires Claude Code v2.1.261 or later | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |
64| `--append-system-prompt` | Append custom text to the end of the default system prompt | `claude --append-system-prompt "Always use TypeScript"` |
65| `--append-system-prompt-file` | Load additional system prompt text from a file and append to the default prompt | `claude --append-system-prompt-file ./extra-rules.txt` |
66| `--autocompact <auto\|tokens>` | Set the [auto-compact window](/docs/en/model-config#set-the-auto-compact-window) for this session without changing your saved settings. Accepts the same values as `/autocompact`; that section covers the value forms and what overrides the flag. Requires Claude Code v2.1.221 or later | `claude --autocompact 500k` |
67| `--ax-screen-reader` | Render screen-reader friendly output: flat text without decorative borders or animations. Forces the classic renderer, so the [`tui`](/docs/en/settings-reference#tui) setting has no effect; attached [background sessions](/docs/en/agent-view) still render fullscreen. Takes precedence over [`CLAUDE_AX_SCREEN_READER`](/docs/en/env-vars) and the [`axScreenReader`](/docs/en/settings-reference#axscreenreader) setting. Requires Claude Code v2.1.181 or later | `claude --ax-screen-reader` |
68| `--bare` | Minimal mode: skip auto-discovery of hooks, skills, custom commands, subagents, installed plugins, MCP servers, auto memory, and CLAUDE.md so scripted calls start faster. Skills in a directory you pass with `--add-dir` still load. Claude has access to Bash, file read, and file edit tools. Sets [`CLAUDE_CODE_SIMPLE`](/docs/en/env-vars). See [bare mode](/docs/en/headless#start-faster-with-bare-mode) | `claude --bare -p "query"` |
69| `--betas` | Beta headers to include in API requests (API key users only) | `claude --betas interleaved-thinking` |
70| `--bg`, `--background` | Start the session as a [background agent](/docs/en/agent-view) and return immediately. Prints the session ID and management commands. Combine with `--exec` to run a shell command as a background job instead of a Claude session, or with `--agent` to run a specific subagent. Checks [workspace trust](/docs/en/permissions#project-allow-rules-and-workspace-trust) for the directory before it starts. Can't be combined with `-p`/`--print`; see the [error reference](/docs/en/errors#command-line-errors) | `claude --bg "investigate the flaky test"` |
71| `--channels` | (Research preview) MCP servers whose [channel](/docs/en/channels) notifications Claude should listen for in this session. Space-separated list of `plugin:<name>@<marketplace>` entries. Requires Anthropic authentication through claude.ai or a Console API key | `claude --channels plugin:my-notifier@my-marketplace` |
72| `--chrome` | Enable [Chrome browser integration](/docs/en/chrome) for web automation and testing | `claude --chrome` |
73| `--cloud` | With a task description, create a new [cloud session](/docs/en/claude-code-on-the-web). With a session ID (`session_...` or `cse_...`) or a claude.ai/code URL, queue a message into that existing session instead, with `-p`. See [send a follow-up message](/docs/en/claude-code-on-the-web#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |
74| `--continue`, `-c` | Load the most recent conversation in the current directory, including a [background session that has finished](/docs/en/sessions#resume-a-session); opening finished background sessions requires Claude Code v2.1.257 or later. Skips sessions created with `claude -p` or the Agent SDK, and sessions whose first prompt was `/loop`. `claude -p --continue` includes `-p`, SDK, and `/loop` sessions. Includes sessions that added this directory with `/add-dir` | `claude --continue` |
75| `--dangerously-load-development-channels` | Enable [channels](/docs/en/channels-reference#test-during-the-research-preview) that are not on the approved allowlist, for local development. Accepts `plugin:<name>@<marketplace>` and `server:<name>` entries. Prompts for confirmation | `claude --dangerously-load-development-channels server:webhook` |
76| `--dangerously-skip-permissions` | Skip permission prompts. Equivalent to `--permission-mode bypassPermissions`. See [permission modes](/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode) for what this does and does not skip. For sessions started with `--bg`, the mode [persists when the supervisor restarts the session](/docs/en/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |
77| `--debug` | Enable debug mode with optional category filtering, such as `--debug='mcp,startup'` or `--debug='!1p'`. The filter binds only in the `=` form; a space-separated filter enables debug mode without filtering | `claude --debug='mcp,startup'` |
78| `--debug-file <path>` | Write debug logs to a specific file path. Implicitly enables debug mode. Takes precedence over `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |
79| `--disable-slash-commands` | Disable all skills and commands for this session | `claude --disable-slash-commands` |
80| `--disallowedTools`, `--disallowed-tools` | Deny rules. A bare tool name removes the matching tools from Claude's context: `"Edit"` removes Edit, `"*"` removes every tool, and `"mcp__*"` removes every MCP tool. A scoped rule such as `Bash(rm *)` leaves the tool available and denies only calls that match [as written](/docs/en/permissions#bash-rule-limits). A rule naming [`EndConversation`](/docs/en/tools-reference#endconversation-tool-behavior) can't remove it while any other tool remains | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |
81| `--effort` | Set the [effort level](/docs/en/model-config#adjust-effort-level) for the current session. Options: `low`, `medium`, `high`, `xhigh`, `max`, or `ultracode`. Available levels depend on the model. `ultracode` requests `xhigh` effort with [ultracode](/docs/en/workflows#let-claude-decide-with-ultracode) turned on, and requires Claude Code v2.1.203 or later. Overrides the [`modelSettings`](/docs/en/settings-reference#modelsettings) and [`effortLevel`](/docs/en/settings-reference#effortlevel) settings for this session and does not persist | `claude --effort high` |
82| `--enable-auto-mode` | Removed in v2.1.111. Auto mode is now in the `Shift+Tab` cycle by default; use `--permission-mode auto` to start in it | `claude --permission-mode auto` |
83| `--environment <environment-id>` | Create a new cloud session that runs on the [self-hosted environment](/docs/en/self-hosted-environments) with the given ID. Environment IDs start with `ccpool_`. See [`--environment` dispatch behavior](/docs/en/self-hosted-environments-testing#environment-dispatch-behavior) for dispatch behavior and the flag combinations it rejects. Requires Claude Code v2.1.224 or later | `claude -p "Fix the login bug" --environment ccpool_abc123` |
84| `--exclude-dynamic-system-prompt-sections` | Move per-machine sections from the system prompt (working directory, environment info, memory paths, git-repo flag) into the first user message. Improves prompt-cache reuse across different users and machines running the same task. Only applies with the default system prompt; ignored when `--system-prompt` or `--system-prompt-file` is set. Use with `-p` for scripted, multi-user workloads | `claude -p --exclude-dynamic-system-prompt-sections "query"` |
85| `--exec` | Run a shell command as a PTY-backed background job instead of starting a Claude session. Use with `--bg` to launch from the shell | `claude --bg --exec 'pytest -x'` |
86| `--fallback-model` | Enable automatic fallback to the specified model(s) when the primary model is overloaded or not available, for example a retired model. Accepts a comma-separated list tried in order. See [Fallback model chains](/docs/en/model-config#fallback-model-chains). To persist a chain across sessions, use the [`fallbackModel` setting](/docs/en/settings-reference#fallbackmodel), which this flag overrides | `claude --fallback-model sonnet,haiku` |
87| `--fork-session` | When resuming, create a new session ID instead of reusing the original (use with `--resume` or `--continue`) | `claude --resume abc123 --fork-session` |
88| `--forward-subagent-text` | Emit [subagent](/docs/en/sub-agents) text and thinking blocks in the output stream as `assistant` and `user` messages with `parent_tool_use_id` set, so you can reconstruct each subagent's transcript. Without this flag, Claude Code omits the text and thinking blocks of a subagent that runs in the [foreground](/docs/en/sub-agents#run-subagents-in-foreground-or-background). Requires `--print` and `--output-format stream-json`. Claude Code also forwards messages from [nested subagents](/docs/en/sub-agents#let-subagents-spawn-their-own-subagents), setting `parent_tool_use_id` to the ID of the Agent or Skill tool call that started each one; this requires Claude Code v2.1.219 or later, and messages of subagents that a forked skill spawns, and of nested forked skills, require v2.1.275 or later. The [`CLAUDE_CODE_FORWARD_SUBAGENT_TEXT`](/docs/en/env-vars) environment variable enables the same behavior. Requires Claude Code v2.1.211 or later | `claude -p --output-format stream-json --verbose --forward-subagent-text "query"` |
89| `--from-pr` | Open the session picker filtered to sessions linked to a specific pull request. Accepts a PR number, a GitHub or GitHub Enterprise PR URL, a GitLab merge request URL, or a Bitbucket pull request URL. Sessions are linked automatically when Claude creates the pull request | `claude --from-pr 123` |
90| `--ide` | Automatically connect to IDE on startup if exactly one valid IDE is available | `claude --ide` |
91| `--init` | Run [Setup hooks](/docs/en/hooks#setup) with the `init` matcher before the session (print mode only) | `claude -p --init "query"` |
92| `--init-only` | Run [Setup](/docs/en/hooks#setup) and `SessionStart` hooks, then exit without starting a conversation | `claude --init-only` |
93| `--include-hook-events` | Include hook lifecycle events in the output stream. `SessionStart` and `Setup` hook events are always included and don't need this flag. Some hook events, such as `Notification`, `SessionEnd`, `PreCompact`, and `PostCompact`, never produce a `hook_started` event, even with this flag. For those events, Claude Code still emits `hook_progress` while a command hook that runs for more than a second produces output, and emits `hook_response` only when a [hook that runs in the background](/docs/en/hooks#run-hooks-in-the-background) finishes. Requires `--output-format stream-json` | `claude -p --output-format stream-json --verbose --include-hook-events "query"` |
94| `--include-partial-messages` | Include partial streaming events in output. Requires `--print` and `--output-format stream-json` | `claude -p --output-format stream-json --verbose --include-partial-messages "query"` |
95| `--input-format` | Specify input format for print mode (options: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |
96| `--json-schema` | Get validated JSON output matching a JSON Schema after the agent completes its workflow (print mode only). See [structured outputs](/docs/en/agent-sdk/structured-outputs). Claude Code exits with an error on an invalid schema and accepts the `format` keyword as an annotation without client-side validation | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |
97| `--maintenance` | Run [Setup hooks](/docs/en/hooks#setup) with the `maintenance` matcher before the session (print mode only) | `claude -p --maintenance "query"` |
98| `--max-budget-usd` | Maximum dollar amount to spend on API calls before stopping (print mode only). Spend from [subagents](/docs/en/sub-agents) counts toward the cap. When you return to a conversation with `--continue` or `--resume`, totals [restored from earlier runs](/docs/en/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) don't count toward it. Once spend reaches the cap, spawning another subagent fails with `Budget limit reached`, and Claude Code stops background subagents that are still running; the cap-enforcement behaviors require Claude Code v2.1.217 or later | `claude -p --max-budget-usd 5.00 "query"` |
99| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default. With `--input-format stream-json`, a message still queued when the limit ends a turn stays queued and starts a new turn with its own limit | `claude -p --max-turns 3 "query"` |
100| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated). When you pass this flag with `-p`, Claude Code waits for still-pending servers to connect before running the first turn, up to the [`MCP_TIMEOUT`](/docs/en/env-vars) startup timeout, 30 seconds by default; a server with a [cached tool list](/docs/en/mcp#managing-your-servers) skips the wait and connects on first use. The wait requires Claude Code v2.1.221 or later | `claude --mcp-config ./mcp.json` |
101| `--model` | Sets the model for the current session with a [model alias](/docs/en/model-config#model-aliases) such as `sonnet`, `opus`, `haiku`, or `fable`, or a model's full name. Overrides the [`model`](/docs/en/settings-reference#model) setting and [`ANTHROPIC_MODEL`](/docs/en/model-config#environment-variables) | `claude --model claude-sonnet-5` |
102| `--name`, `-n` | Set a display name for the session, shown in `/resume` and the terminal title. You can resume a named session with `claude --resume <name>`. In an interactive session, if another live session on this machine already uses the name, Claude Code applies [a variant of it](/docs/en/sessions#name-your-sessions) instead. <br /><br />[`/rename`](/docs/en/commands) changes the name mid-session and also shows it on the prompt bar | `claude -n "my-feature-work"` |
103| `--no-chrome` | Disable [Chrome browser integration](/docs/en/chrome) for this session | `claude --no-chrome` |
104| `--no-session-persistence` | Disable session persistence so sessions are not saved to disk and cannot be resumed. Print mode only. The [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/en/env-vars) environment variable does the same in any mode | `claude -p --no-session-persistence "query"` |
105| `--output-format` | Specify output format for print mode (options: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |
106| `--permission-mode` | Begin in a specified [permission mode](/docs/en/permission-modes). Accepts `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, or `manual` as an alias for `default`. The `manual` alias selects the permission mode the UI labels Manual and requires Claude Code v2.1.200 or later; `claude --help` lists it in place of `default`, and both values work. Overrides `defaultMode` from settings files. Without this flag or `--dangerously-skip-permissions`, a new session starts in the permission mode described in [which permission mode a session starts in](/docs/en/permission-modes#which-mode-a-session-starts-in). For `-p`, that's `default` when nothing is configured | `claude --permission-mode plan` |
107| `--permission-prompt-tool` | Specify an MCP tool to handle permission prompts in non-interactive mode. Claude Code waits for that tool's MCP server to connect before running the first turn, up to the [`MCP_TIMEOUT`](/docs/en/env-vars) startup timeout, 30 seconds by default. <br /><br />The prompt tool can't approve an MCP tool marked as [requiring user interaction](/docs/en/mcp#require-approval-for-a-specific-tool): Claude Code converts an `allow` result for one to a deny. This restriction requires Claude Code v2.1.199 or later | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |
108| `--permission-prompts` | Set who answers permission prompts in print mode. With the default `host`, Claude Code sends them to the Agent SDK host or the `--permission-prompt-tool` tool. Pass `none` when nobody can answer, and Claude Code denies them instead. See [Turn off permission prompts in unattended runs](/docs/en/headless#turn-off-permission-prompts-in-unattended-runs). Requires Claude Code v2.1.259 or later | `claude -p --permission-prompts none "query"` |
109| `--plugin-dir` | Load a plugin from a directory or `.zip` archive, or several from a [folder of plugins](/docs/en/plugins/create#load-a-directory-or-archive-for-one-session), for this session only. Each flag takes one path. Repeat the flag for more paths: `--plugin-dir A --plugin-dir B.zip`. Passing a folder of plugins requires Claude Code v2.1.265 or later | `claude --plugin-dir ./my-plugin` |
110| `--plugin-url` | Fetch a plugin `.zip` archive from a URL for this session only. Repeat the flag for multiple plugins, or pass space-separated URLs in a single quoted value | `claude --plugin-url https://example.com/plugin.zip` |
111| `--print`, `-p` | Print response without interactive mode (see [Agent SDK documentation](/docs/en/agent-sdk/overview) for programmatic usage details) | `claude -p "query"` |
112| `--prompt-suggestions` | Emit a `prompt_suggestion` message with a predicted next user prompt after each turn that generates one; very short conversations can produce none. Requires `--print`, `--output-format stream-json`, and `--verbose`. See [Prompt suggestions](/docs/en/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |
113| `--ref <branch>` | With `--environment`, base the new session's checkout on a named ref instead of local `HEAD` | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |
114| `--remote` | Deprecated alias for `--cloud`, including the existing-session form | `claude --remote "Fix the login bug"` |
115| `--remote-control`, `--rc` | Start an interactive session with [Remote Control](/docs/en/remote-control#start-a-remote-control-session) enabled so you can also control it from claude.ai or the Claude app. Optionally pass a name for the session | `claude --remote-control "My Project"` |
116| `--remote-control-session-name-prefix <prefix>` | Prefix for auto-generated [Remote Control](/docs/en/remote-control) session names when no explicit name is set. Defaults to your machine's hostname, producing names like `myhost-graceful-unicorn`. Set `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` for the same effect | `claude remote-control --remote-control-session-name-prefix dev-box` |
117| `--replay-user-messages` | Re-emit user messages from stdin back on stdout for acknowledgment. Requires `--input-format stream-json` and `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |
118| `--restricted` | Start in restricted mode. Use it when an evaluation harness drives `claude` on a shared machine and Claude Code must not run commands or read that machine's user and project settings. Claude Code removes the built-in tools that run commands or code, and WebFetch, unless you name them individually in `--tools`, not through the `default` preset. It also confines the built-in file tools to the [working directories](/docs/en/permissions#working-directories), loads only [managed settings](/docs/en/managed-settings) and `--settings`, refuses [`bypassPermissions`](/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode), and [refuses to create cloud sessions](/docs/en/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Requires Claude Code v2.1.248 or later | `claude --restricted -p "query"` |
119| `--resume`, `-r` | Resume a specific session by ID or name, or show an interactive picker to choose a session. In place of an ID, you can pass the absolute path to a session's `.jsonl` [transcript file](/docs/en/sessions#where-transcripts-are-stored). The picker and name search include sessions that added this directory with `/add-dir`. When you pass a session ID, Claude Code searches the current project directory and its git worktrees, then every other project on this machine. Before v2.1.223, the ID search covered only the current project directory and its git worktrees. [Background sessions](/docs/en/agent-view) appear in the picker marked with `bg` | `claude --resume auth-refactor` |
120| `--safe-mode` | Start with all customizations disabled to troubleshoot a broken configuration: CLAUDE.md, skills, plugins, hooks, MCP servers, custom commands and agents, output styles, workflows, custom themes, custom keybindings, status line and file-suggestion commands, LSP servers, and auto memory do not load. Authentication, model selection, built-in tools, and permissions work normally, which differs from [`--bare`](/docs/en/headless#start-faster-with-bare-mode). Managed settings policy still applies, including policy-configured hooks, status line, and file-suggestion commands; managed plugins, managed skills, managed CLAUDE.md, and policy-configured MCP servers do not. Useful for checking whether a customization is what triggers [automatic model fallback](/docs/en/model-config#automatic-model-fallback). Sets [`CLAUDE_CODE_SAFE_MODE`](/docs/en/env-vars) | `claude --safe-mode` |
121| `--session-id` | Use a specific session ID for the conversation (must be a valid UUID) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |
122| `--setting-sources` | Comma-separated list of setting sources to load (`user`, `project`, `local`). See [agent view](/docs/en/agent-view#what-carries-over-when-you-background) and [agent teams](/docs/en/agent-teams#context-and-communication) for the sessions you start from this one that inherit the list | `claude --setting-sources user,project` |
123| `--settings` | Path to a settings JSON file or an inline JSON string. Values you set here override the same keys in your `settings.json` files for this session. Keys you omit keep their file-based values. The file must be a regular file no larger than 2 MiB. See [settings precedence](/docs/en/settings#settings-precedence) | `claude --settings ./settings.json` |
124| `--strict-mcp-config` | Only use MCP servers from `--mcp-config`, ignoring all other MCP configurations. See [Exclusive control with managed-mcp.json](/docs/en/managed-mcp#exclusive-control-with-managed-mcp-json) for what the flag does under a managed MCP file | `claude --strict-mcp-config --mcp-config ./mcp.json` |
125| `--system-prompt` | Replace the entire system prompt with custom text | `claude --system-prompt "You are a Python expert"` |
126| `--system-prompt-file` | Load system prompt from a file, replacing the default prompt | `claude --system-prompt-file ./custom-prompt.txt` |
127| `--system-prompt-snapshot` | Pass `off` to rebuild the system prompt on every request instead of reusing the prompt [recorded on the conversation's first request](#system-prompt-flags-in-resumed-conversations), for example while you iterate on `--append-system-prompt` text across `--continue` runs. Requires Claude Code v2.1.257 or later | `claude --system-prompt-snapshot off` |
128| `--teleport` | Resume a [cloud session](/docs/en/claude-code-on-the-web) in your local terminal | `claude --teleport` |
129| `--teammate-mode` | Set how [agent team](/docs/en/agent-teams) teammates display: `in-process` (default), `auto`, `tmux`, or `iterm2`. Overrides the [`teammateMode`](/docs/en/settings-reference#teammatemode) setting for this session. See [Choose a display mode](/docs/en/agent-teams#choose-a-display-mode) | `claude --teammate-mode auto` |
130| `--tmux` | Create a tmux session for the worktree. Requires `--worktree`. Uses iTerm2 native panes when available; pass `--tmux=classic` for traditional tmux | `claude -w feature-auth --tmux` |
131| `--tools` | Restrict which built-in tools Claude can use. Use `""` to disable all, `"default"` for the default set, or tool names like `"Bash,Edit,Read"`. On macOS, Linux, and WSL, the default set leaves out `Glob` and `Grep`, as described under [Glob tool behavior](/docs/en/tools-reference#glob-tool-behavior). If you name one of the [task-tracking tools](/docs/en/tools-reference#task-tool-availability) here, Claude Code also opts the session in. The flag doesn't affect MCP tools; to deny those too, use `--disallowedTools "mcp__*"`. A list that omits [`EndConversation`](/docs/en/tools-reference#endconversation-tool-behavior) doesn't remove it; `""` removes it only when no MCP tools remain | `claude --tools "Bash,Edit,Read"` |
132| `--verbose` | Enable verbose logging, shows full turn-by-turn output. Overrides the [`viewMode`](/docs/en/settings-reference#viewmode) setting for this session | `claude --verbose` |
133| `--version`, `-v` | Output the version number | `claude -v` |
134| `--worktree`, `-w` | Start Claude in an isolated [git worktree](/docs/en/worktrees) at `<repo>/.claude/worktrees/<name>`. If you don't give a name, Claude Code generates one. Pass `#<number>`, a GitHub pull request URL, or a GitLab merge request URL to [fetch that PR or MR from `origin` and branch the worktree from it](/docs/en/worktrees#branch-from-a-pull-request). Branching from a GitLab merge request requires Claude Code v2.1.233 or later | `claude -w feature-auth` |
56| Flag | Description | Example |
57| :- | :- | :- |
58| `--add-dir` | Add additional working directories for Claude to read and edit files. Grants file access; Claude Code [doesn't discover](https://code.claude.com/docs/en/permissions.md#additional-directories-grant-file-access-not-configuration) most `.claude/` configuration from these directories. Validates that each path exists as a directory. You can't add most [network paths](https://code.claude.com/docs/en/errors.md#working-directory-is-a-network-path), such as `\\server\share`. To persist these directories across sessions, set [`permissions.additionalDirectories`](https://code.claude.com/docs/en/settings-reference#permissions-additionaldirectories) in settings | `claude --add-dir ../apps ../lib` |
59| `--advisor <model>` | Enable the server-side [advisor tool](https://code.claude.com/docs/en/advisor.md) for this session with a model alias, `fable`, `opus`, or `sonnet`, or a full model ID. Takes precedence over the `advisorModel` setting for the session. `fable` requires [Fable access](https://code.claude.com/docs/en/advisor.md#choose-an-advisor-model) | `claude --advisor opus` |
60| `--agent` | Specify an agent for the current session (overrides the `agent` setting) | `claude --agent my-custom-agent` |
61| `--agents` | Define custom subagents dynamically via JSON. Accepts the [fields listed for CLI-defined subagents](https://code.claude.com/docs/en/sub-agents.md#choose-the-subagent-scope). With `--print`, the value can instead be the path to a JSON file holding the object; the file form requires Claude Code v2.1.281 or later. Claude Code validates the value at startup and exits on an invalid one; see [`Invalid --agents configuration`](https://code.claude.com/docs/en/errors#invalid-agents-configuration) for the message and for the flags and environment variable that skip the validation. Validation requires Claude Code v2.1.242 or later | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |
62| `--allow-dangerously-skip-permissions` | Add `bypassPermissions` to the `Shift+Tab` mode cycle without starting in it. Lets you begin in a different mode like `plan` and switch to `bypassPermissions` later. See [permission modes](https://code.claude.com/docs/en/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |
63| `--allowedTools`, `--allowed-tools` | Tools that execute without prompting for permission, apart from reads from [network paths](https://code.claude.com/docs/en/permissions.md#network-paths). See [permission rule syntax](https://code.claude.com/docs/en/settings-reference.md#permission-rule-syntax) for pattern matching. To restrict which tools are available, use `--tools` instead. If you name one of the [task-tracking tools](https://code.claude.com/docs/en/tools-reference.md#task-tool-availability) here, Claude Code also opts the session in | `"Bash(git log *)" "Bash(git diff *)" "Read"` |
64| `--append-subagent-system-prompt` | Append custom text to the end of every [subagent](https://code.claude.com/docs/en/sub-agents.md)'s system prompt, nested subagents included, apart from a [forked subagent](https://code.claude.com/docs/en/sub-agents.md#fork-the-current-conversation), which reuses the conversation's own prompt. Only applies in non-interactive mode with `-p`. Requires Claude Code v2.1.205 or later | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |
65| `--append-subagent-system-prompt-file` | Load text from a file and append it to [subagent](https://code.claude.com/docs/en/sub-agents.md) system prompts. An alternative to `--append-subagent-system-prompt` for text too long to pass on the command line. The two flags can't be combined. Only applies in non-interactive mode with `-p`. Requires Claude Code v2.1.261 or later | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |
66| `--append-system-prompt` | Append custom text to the end of the default system prompt | `claude --append-system-prompt "Always use TypeScript"` |
67| `--append-system-prompt-file` | Load additional system prompt text from a file and append to the default prompt | `claude --append-system-prompt-file ./extra-rules.txt` |
68| `--autocompact <auto\|tokens>` | Set the [auto-compact window](https://code.claude.com/docs/en/model-config.md#set-the-auto-compact-window) for this session without changing your saved settings. Accepts the same values as `/autocompact`; that section covers the value forms and what overrides the flag. Requires Claude Code v2.1.221 or later | `claude --autocompact 500k` |
69| `--ax-screen-reader` | Render screen-reader friendly output: flat text without decorative borders or animations. Forces the classic renderer, so the [`tui`](https://code.claude.com/docs/en/settings-reference#tui) setting has no effect; attached [background sessions](https://code.claude.com/docs/en/agent-view.md) still render fullscreen. Takes precedence over [`CLAUDE_AX_SCREEN_READER`](https://code.claude.com/docs/en/env-vars) and the [`axScreenReader`](https://code.claude.com/docs/en/settings-reference#axscreenreader) setting. Requires Claude Code v2.1.181 or later | `claude --ax-screen-reader` |
70| `--bare` | Minimal mode: skip auto-discovery of hooks, skills, custom commands, subagents, installed plugins, MCP servers, auto memory, and CLAUDE.md so scripted calls start faster. Skills in a directory you pass with `--add-dir` still load. Claude has access to Bash, file read, and file edit tools. Sets [`CLAUDE_CODE_SIMPLE`](https://code.claude.com/docs/en/env-vars). See [bare mode](https://code.claude.com/docs/en/headless.md#start-faster-with-bare-mode) | `claude --bare -p "query"` |
71| `--betas` | Beta headers to include in API requests (API key users only) | `claude --betas interleaved-thinking` |
72| `--bg`, `--background` | Start the session as a [background agent](https://code.claude.com/docs/en/agent-view.md) and return immediately. Prints the session ID and management commands. Combine with `--exec` to run a shell command as a background job instead of a Claude session, or with `--agent` to run a specific subagent. Checks [workspace trust](https://code.claude.com/docs/en/permissions.md#project-allow-rules-and-workspace-trust) for the directory before it starts. Can't be combined with `-p`/`--print`; see the [error reference](https://code.claude.com/docs/en/errors.md#command-line-errors) | `claude --bg "investigate the flaky test"` |
73| `--channels` | (Research preview) MCP servers whose [channel](https://code.claude.com/docs/en/channels.md) notifications Claude should listen for in this session. Space-separated list of `plugin:<name>@<marketplace>` entries. Requires Anthropic authentication through claude.ai or a Console API key | `claude --channels plugin:my-notifier@my-marketplace` |
74| `--chrome` | Enable [Chrome browser integration](https://code.claude.com/docs/en/chrome.md) for web automation and testing | `claude --chrome` |
75| `--cloud` | With a task description, create a new [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md). With a session ID (`session_...` or `cse_...`) or a claude.ai/code URL, queue a message into that existing session instead, with `-p`. See [send a follow-up message](https://code.claude.com/docs/en/claude-code-on-the-web.md#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |
76| `--continue`, `-c` | Load the most recent conversation in the current directory, including a [background session that has finished](https://code.claude.com/docs/en/sessions.md#where-the-session-picker-looks); opening finished background sessions requires Claude Code v2.1.257 or later. Skips sessions created with `claude -p` or the Agent SDK, and sessions whose first prompt was `/loop`. `claude -p --continue` includes `-p`, SDK, and `/loop` sessions. Includes sessions that added this directory with `/add-dir` | `claude --continue` |
77| `--dangerously-load-development-channels` | Enable [channels](https://code.claude.com/docs/en/channels-reference.md#test-during-the-research-preview) that are not on the approved allowlist, for local development. Accepts `plugin:<name>@<marketplace>` and `server:<name>` entries. Prompts for confirmation, so it takes effect in interactive sessions. With `-p`, Claude Code ignores the flag | `claude --dangerously-load-development-channels server:webhook` |
78| `--dangerously-skip-permissions` | Skip permission prompts. Equivalent to `--permission-mode bypassPermissions`. See [permission modes](https://code.claude.com/docs/en/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) for what this does and does not skip. For sessions started with `--bg`, the mode [persists when the supervisor restarts the session](https://code.claude.com/docs/en/agent-view.md#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |
79| `--debug` | Enable debug mode with optional category filtering, such as `--debug='mcp,startup'` or `--debug='!mcp'`. The filter binds only in the `=` form; a space-separated filter enables debug mode without filtering | `claude --debug='mcp,startup'` |
80| `--debug-file <path>` | Write debug logs to a specific file path. Implicitly enables debug mode. Takes precedence over `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |
81| `--desktop` | Open the [Claude Desktop app](https://code.claude.com/docs/en/desktop.md) on the current directory and exit without starting a session in the terminal. Add `--continue`, or `--resume` with a session ID, to [open that session in Desktop](https://code.claude.com/docs/en/desktop.md#coming-from-the-cli) instead. `--resume` here takes only a session ID, not a name or transcript path. Takes no prompt and no other flags except `--verbose` and the `--debug` flags, since the app starts the session itself. Available on macOS and x64 Windows when you're signed in with a Claude subscription. Requires Claude Code v2.1.285 or later | `claude --desktop` |
82| `--disable-slash-commands` | Disable all skills and commands for this session | `claude --disable-slash-commands` |
83| `--disallowedTools`, `--disallowed-tools` | Deny rules. A bare tool name removes the matching tools from Claude's context: `"Edit"` removes Edit, `"*"` removes every tool, and `"mcp__*"` removes every MCP tool. A scoped rule such as `Bash(rm *)` leaves the tool available and denies only calls that match [as written](https://code.claude.com/docs/en/permissions.md#bash-rule-limits). A rule naming [`EndConversation`](https://code.claude.com/docs/en/tools-reference#endconversation-tool-behavior) can't remove it while any other tool remains | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |
84| `--effort` | Set the [effort level](https://code.claude.com/docs/en/model-config.md#adjust-effort-level) for the current session. Options: `low`, `medium`, `high`, `xhigh`, `max`, or `ultracode`. Available levels depend on the model. `ultracode` requests `xhigh` effort with [ultracode](https://code.claude.com/docs/en/workflows.md#let-claude-decide-with-ultracode) turned on, and requires Claude Code v2.1.203 or later. Overrides the [`modelSettings`](https://code.claude.com/docs/en/settings-reference#modelsettings) and [`effortLevel`](https://code.claude.com/docs/en/settings-reference#effortlevel) settings for this session and does not persist | `claude --effort high` |
85| `--enable-auto-mode` | Removed in v2.1.111. Auto mode is now in the `Shift+Tab` cycle by default; use `--permission-mode auto` to start in it | `claude --permission-mode auto` |
86| `--environment <environment-id>` | Create a new cloud session that runs on the [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) with the given ID. Environment IDs start with `ccpool_`. See [`--environment` dispatch behavior](https://code.claude.com/docs/en/self-hosted-environments-testing#environment-dispatch-behavior) for dispatch behavior and the flag combinations it rejects. Requires Claude Code v2.1.224 or later | `claude -p "Fix the login bug" --environment ccpool_abc123` |
87| `--exclude-dynamic-system-prompt-sections` | Move per-user context, such as the auto memory location, out of the system prompt and into the first user message. Improves prompt-cache reuse across different users and machines running the same task. Only applies with the default system prompt; ignored when `--system-prompt` or `--system-prompt-file` is set. Use with `-p` for scripted, multi-user workloads | `claude -p --exclude-dynamic-system-prompt-sections "query"` |
88| `--exec` | Run a shell command as a PTY-backed background job instead of starting a Claude session. Use with `--bg` to launch from the shell | `claude --bg --exec 'pytest -x'` |
89| `--fallback-model` | Enable automatic fallback to the specified model(s) when the primary model is overloaded or not available, for example a retired model. Accepts a comma-separated list tried in order. See [Fallback model chains](https://code.claude.com/docs/en/model-config.md#fallback-model-chains). To persist a chain across sessions, use the [`fallbackModel` setting](https://code.claude.com/docs/en/settings-reference#fallbackmodel), which this flag overrides | `claude --fallback-model sonnet,haiku` |
90| `--fork-session` | When resuming, create a new session ID instead of reusing the original (use with `--resume` or `--continue`) | `claude --resume abc123 --fork-session` |
91| `--forward-subagent-text` | Emit [subagent](https://code.claude.com/docs/en/sub-agents.md) text and thinking blocks in the output stream as `assistant` and `user` messages with `parent_tool_use_id` set, so you can reconstruct each subagent's transcript. Without this flag, Claude Code omits the text and thinking blocks of a subagent that runs in the [foreground](https://code.claude.com/docs/en/sub-agents.md#run-subagents-in-foreground-or-background). Requires `--print` and `--output-format stream-json`. For nested subagents, forked skills, and the version each needs, see [Follow subagent messages](https://code.claude.com/docs/en/headless.md#follow-subagent-messages). The [`CLAUDE_CODE_FORWARD_SUBAGENT_TEXT`](https://code.claude.com/docs/en/env-vars) environment variable enables the same behavior. Requires Claude Code v2.1.211 or later | `claude -p --output-format stream-json --verbose --forward-subagent-text "query"` |
92| `--from-pr` | Open the session picker filtered to sessions linked to a specific pull request. Accepts a PR number, a GitHub or GitHub Enterprise PR URL, a GitLab merge request URL, or a Bitbucket pull request URL. Sessions are linked automatically when Claude creates the pull request | `claude --from-pr 123` |
93| `--ide` | Automatically connect to IDE on startup if exactly one valid IDE is available | `claude --ide` |
94| `--init` | Run [Setup hooks](https://code.claude.com/docs/en/hooks.md#setup) with the `init` matcher before the session (print mode only) | `claude -p --init "query"` |
95| `--init-only` | Run [Setup](https://code.claude.com/docs/en/hooks.md#setup) and `SessionStart` hooks, then exit without starting a conversation | `claude --init-only` |
96| `--include-hook-events` | Include hook lifecycle events in the output stream. `SessionStart` and `Setup` hook events are always included and don't need this flag. Some hook events, such as `Notification`, `SessionEnd`, `PreCompact`, and `PostCompact`, never produce a `hook_started` event, even with this flag. For those events, Claude Code still emits `hook_progress` while a command hook that runs for more than a second produces output, and emits `hook_response` only when a [hook that runs in the background](https://code.claude.com/docs/en/hooks.md#run-hooks-in-the-background) finishes. Requires `--output-format stream-json` | `claude -p --output-format stream-json --verbose --include-hook-events "query"` |
97| `--include-partial-messages` | Include partial streaming events in output. Requires `--print` and `--output-format stream-json` | `claude -p --output-format stream-json --verbose --include-partial-messages "query"` |
98| `--input-format` | Specify input format for print mode (options: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |
99| `--json-schema` | Get validated JSON output matching a JSON Schema after the agent completes its workflow (print mode only). See [structured outputs](https://code.claude.com/docs/en/agent-sdk/structured-outputs.md). Claude Code exits with an error on an invalid schema and accepts the `format` keyword as an annotation without client-side validation | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |
100| `--maintenance` | Run [Setup hooks](https://code.claude.com/docs/en/hooks.md#setup) with the `maintenance` matcher before the session (print mode only) | `claude -p --maintenance "query"` |
101| `--max-budget-usd` | Stop the run once estimated spend on API calls reaches this amount (print mode only). Claude Code checks the cap against its [client-side cost estimate](https://code.claude.com/docs/en/agent-sdk/cost-tracking.md#estimates-not-billing), which can differ from your bill. Spend from [subagents](https://code.claude.com/docs/en/sub-agents.md) counts toward the cap. Spend can pass the cap, so [leave headroom](https://code.claude.com/docs/en/agent-sdk/agent-loop.md#budget-headroom). When you return to a conversation with `--continue` or `--resume`, totals [restored from earlier runs](https://code.claude.com/docs/en/agent-sdk/cost-tracking.md#accumulate-costs-across-multiple-calls) don't count toward it. Once spend reaches the cap, spawning another subagent fails with `Budget limit reached`, and Claude Code stops background subagents that are still running; the cap-enforcement behaviors require Claude Code v2.1.217 or later | `claude -p --max-budget-usd 5.00 "query"` |
102| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default. With `--input-format stream-json`, a message still queued when the limit ends a turn stays queued and starts a new turn with its own limit | `claude -p --max-turns 3 "query"` |
103| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated). When you pass this flag with `-p`, Claude Code waits for still-pending servers to connect before running the first turn, up to the [`MCP_TIMEOUT`](https://code.claude.com/docs/en/env-vars) startup timeout, 30 seconds by default; a server with a [cached tool list](https://code.claude.com/docs/en/mcp.md#managing-your-servers) skips the wait and connects on first use. In a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#connection-timing), a shorter wait applies instead. The wait requires Claude Code v2.1.221 or later | `claude --mcp-config ./mcp.json` |
104| `--model` | Sets the model for the current session with a [model alias](https://code.claude.com/docs/en/model-config.md#model-aliases) such as `sonnet`, `opus`, `haiku`, or `fable`, or a model's full name. Overrides the [`model`](https://code.claude.com/docs/en/settings-reference#model) setting and [`ANTHROPIC_MODEL`](https://code.claude.com/docs/en/model-config#environment-variables) | `claude --model claude-sonnet-5` |
105| `--name`, `-n` | Set a display name for the session, shown in `/resume` and the terminal title. You can resume a named session with `claude --resume <name>`. [`/rename`](https://code.claude.com/docs/en/commands) changes the name mid-session and also shows it on the prompt bar | `claude -n "my-feature-work"` |
106| `--no-chrome` | Disable [Chrome browser integration](https://code.claude.com/docs/en/chrome.md) for this session | `claude --no-chrome` |
107| `--no-session-persistence` | Disable session persistence so sessions are not saved to disk and cannot be resumed. Print mode only. The [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](https://code.claude.com/docs/en/env-vars) environment variable does the same in any mode | `claude -p --no-session-persistence "query"` |
108| `--output-format` | Specify output format for print mode (options: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |
109| `--permission-mode` | Begin in a specified [permission mode](https://code.claude.com/docs/en/permission-modes.md). Accepts `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, or `manual` as an alias for `default`. The `manual` alias selects the permission mode the UI labels Manual and requires Claude Code v2.1.200 or later; `claude --help` lists it in place of `default`, and both values work. Overrides `defaultMode` from settings files. Without this flag or `--dangerously-skip-permissions`, a new session starts in the permission mode described in [which permission mode a session starts in](https://code.claude.com/docs/en/permission-modes.md#which-mode-a-session-starts-in), which also covers what a `-p` run starts in | `claude --permission-mode plan` |
110| `--permission-prompt-tool` | Specify an MCP tool to handle permission prompts in non-interactive mode. Pass the full name, such as `mcp__<server>__<tool>`, of a tool on an MCP server that the run loads. Claude Code waits for that tool's MCP server to connect before running the first turn, up to the [`MCP_TIMEOUT`](https://code.claude.com/docs/en/env-vars) startup timeout, 30 seconds by default. The prompt tool can't approve an MCP tool marked as [requiring user interaction](https://code.claude.com/docs/en/mcp.md#require-approval-for-a-specific-tool): Claude Code converts an `allow` result for one to a deny. This restriction requires Claude Code v2.1.199 or later | `claude -p --mcp-config ./mcp.json --permission-prompt-tool mcp__permissions__approve "query"` |
111| `--permission-prompts` | Set who answers permission prompts in print mode. With the default `host`, Claude Code sends them to the Agent SDK host or the `--permission-prompt-tool` tool. Pass `none` when nobody can answer, and Claude Code denies them instead. See [Turn off permission prompts in unattended runs](https://code.claude.com/docs/en/headless.md#turn-off-permission-prompts-in-unattended-runs). Requires Claude Code v2.1.259 or later | `claude -p --permission-prompts none "query"` |
112| `--plugin-dir` | Load a plugin from a directory or `.zip` archive, or several from a [folder of plugins](https://code.claude.com/docs/en/plugins/create.md#load-a-directory-or-archive-for-one-session), for this session only. Each flag takes one path. Repeat the flag for more paths: `--plugin-dir A --plugin-dir B.zip`. Passing a folder of plugins requires Claude Code v2.1.265 or later | `claude --plugin-dir ./my-plugin` |
113| `--plugin-url` | Fetch a plugin `.zip` archive from a URL for this session only. Repeat the flag for multiple plugins, or pass space-separated URLs in a single quoted value | `claude --plugin-url https://example.com/plugin.zip` |
114| `--print`, `-p` | Print response without interactive mode (see [Agent SDK documentation](https://code.claude.com/docs/en/agent-sdk/overview.md) for programmatic usage details). For `--resume` on a background session that is still running, see [Resume a running background session](https://code.claude.com/docs/en/sessions.md#resume-a-running-background-session) | `claude -p "query"` |
115| `--prompt-suggestions` | Emit a `prompt_suggestion` message with a predicted next user prompt after each turn that generates one; very short conversations can produce none. Requires `--print`, `--output-format stream-json`, and `--verbose`. See [Prompt suggestions](https://code.claude.com/docs/en/interactive-mode.md#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |
116| `--ref <branch>` | With `--environment`, base the new session's checkout on a named ref instead of local `HEAD` | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |
117| `--remote` | Deprecated alias for `--cloud`, including the existing-session form | `claude --remote "Fix the login bug"` |
118| `--remote-control`, `--rc` | Start an interactive session with [Remote Control](https://code.claude.com/docs/en/remote-control.md#start-a-remote-control-session) enabled so you can also control it from claude.ai or the Claude app. Optionally pass a name for the session | `claude --remote-control "My Project"` |
119| `--remote-control-session-name-prefix <prefix>` | Prefix for auto-generated [Remote Control](https://code.claude.com/docs/en/remote-control.md) session names when no explicit name is set. Defaults to your machine's hostname, producing names like `myhost-graceful-unicorn`. Set `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` for the same effect | `claude remote-control --remote-control-session-name-prefix dev-box` |
120| `--replay-user-messages` | Re-emit user messages from stdin back on stdout for acknowledgment. Requires `--input-format stream-json` and `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |
121| `--restricted` | Start in restricted mode. Use it when an evaluation harness drives `claude` on a shared machine and Claude Code must not run commands or read that machine's user and project settings. Claude Code removes the built-in tools that run commands or code, and WebFetch, unless you name them individually in `--tools`, not through the `default` preset. It also confines the built-in file tools to the [working directories](https://code.claude.com/docs/en/permissions.md#working-directories), loads only [managed settings](https://code.claude.com/docs/en/managed-settings.md) and `--settings`, refuses [`bypassPermissions`](https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode), and [refuses to create cloud sessions](https://code.claude.com/docs/en/errors.md#cloud-sessions-cannot-be-created-from-a-restricted-session). Requires Claude Code v2.1.248 or later | `claude --restricted -p "query"` |
122| `--resume`, `-r` | Resume a specific session by ID or name, or show an interactive picker to choose a session. In place of an ID, you can pass the absolute path to a session's `.jsonl` [transcript file](https://code.claude.com/docs/en/sessions.md#where-transcripts-are-stored). The picker and name search include sessions that added this directory with `/add-dir`. When you pass a session ID, Claude Code searches the current project directory and its git worktrees, then every other project on this machine. Before v2.1.223, the ID search covered only the current project directory and its git worktrees. [Background sessions](https://code.claude.com/docs/en/agent-view.md) appear in the picker marked with `bg`. Resuming one that is still running [opens that session](https://code.claude.com/docs/en/sessions.md#resume-a-running-background-session) in this terminal through `claude attach`, and a prompt you pass on the command line goes to it as its next turn. Before v2.1.285, Claude Code refused and printed the `claude attach` command to run instead | `claude --resume auth-refactor` |
123| `--safe-mode` | Start with all customizations disabled to troubleshoot a broken configuration: CLAUDE.md, skills, plugins, hooks, MCP servers, custom commands and agents, output styles, workflows, custom themes, custom keybindings, status line and file-suggestion commands, LSP servers, and auto memory do not load. Authentication, model selection, built-in tools, and permissions work normally, which differs from [`--bare`](https://code.claude.com/docs/en/headless#start-faster-with-bare-mode). Managed settings policy still applies, including policy-configured hooks, status line, and file-suggestion commands; managed plugins, managed skills, managed CLAUDE.md, and policy-configured MCP servers do not. Useful for checking whether a customization is what triggers [automatic model fallback](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback). Sets [`CLAUDE_CODE_SAFE_MODE`](https://code.claude.com/docs/en/env-vars) | `claude --safe-mode` |
124| `--session-id` | Use a specific session ID for the conversation (must be a valid UUID) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |
125| `--setting-sources` | Comma-separated list of setting sources to load (`user`, `project`, `local`). See [agent view](https://code.claude.com/docs/en/agent-view.md#what-carries-over-when-you-background) and [agent teams](https://code.claude.com/docs/en/agent-teams.md#context-and-communication) for the sessions you start from this one that inherit the list | `claude --setting-sources user,project` |
126| `--settings` | Path to a settings JSON file or an inline JSON string. Values you set here override the same keys in your `settings.json` files for this session. Keys you omit keep their file-based values. The file must be a regular file no larger than 2 MiB. See [settings precedence](https://code.claude.com/docs/en/settings.md#settings-precedence) | `claude --settings ./settings.json` |
127| `--strict-mcp-config` | Only use MCP servers from `--mcp-config`, ignoring all other MCP configurations. See [Exclusive control with managed-mcp.json](https://code.claude.com/docs/en/managed-mcp.md#exclusive-control-with-managed-mcp-json) for what the flag does under a managed MCP file | `claude --strict-mcp-config --mcp-config ./mcp.json` |
128| `--system-prompt` | Replace the entire system prompt with custom text | `claude --system-prompt "You are a Python expert"` |
129| `--system-prompt-file` | Load system prompt from a file, replacing the default prompt | `claude --system-prompt-file ./custom-prompt.txt` |
130| `--system-prompt-snapshot` | Pass `off` to rebuild the system prompt on every request instead of reusing the prompt [recorded on the conversation's first request](#system-prompt-flags-in-resumed-conversations), for example while you iterate on `--append-system-prompt` text across `--continue` runs. Requires Claude Code v2.1.257 or later | `claude --system-prompt-snapshot off` |
131| `--teleport` | Resume a [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md) in your local terminal | `claude --teleport` |
132| `--teammate-mode` | Set how [agent team](https://code.claude.com/docs/en/agent-teams.md) teammates display: `in-process` (default), `auto`, `tmux`, or `iterm2`. Overrides the [`teammateMode`](https://code.claude.com/docs/en/settings-reference#teammatemode) setting for this session. See [Choose a display mode](https://code.claude.com/docs/en/agent-teams.md#choose-a-display-mode) | `claude --teammate-mode auto` |
133| `--tmux` | Create a tmux session for the worktree. Requires `--worktree`. Uses iTerm2 native panes when available; pass `--tmux=classic` for traditional tmux | `claude -w feature-auth --tmux` |
134| `--tools` | Restrict which built-in tools Claude can use. Use `""` to disable all, `"default"` for the default set, or tool names like `"Bash,Edit,Read"`. On macOS, Linux, and WSL, the default set leaves out `Glob` and `Grep`, as described under [Glob tool behavior](https://code.claude.com/docs/en/tools-reference.md#glob-tool-behavior). If you name one of the [task-tracking tools](https://code.claude.com/docs/en/tools-reference.md#task-tool-availability) here, Claude Code also opts the session in. The flag doesn't affect MCP tools; to deny those too, use `--disallowedTools "mcp__*"`. A list that omits [`EndConversation`](https://code.claude.com/docs/en/tools-reference#endconversation-tool-behavior) doesn't remove it; `""` removes it only when no MCP tools remain | `claude --tools "Bash,Edit,Read"` |
135| `--verbose` | Enable verbose logging, shows full turn-by-turn output. Overrides the [`viewMode`](https://code.claude.com/docs/en/settings-reference#viewmode) setting for this session | `claude --verbose` |
136| `--version`, `-v` | Output the version number | `claude -v` |
137| `--worktree`, `-w` | Start Claude in an isolated [git worktree](https://code.claude.com/docs/en/worktrees.md) at `<repo>/.claude/worktrees/<name>`. If you don't give a name, Claude Code generates one. Pass `#<number>`, a GitHub pull request URL, or a GitLab merge request URL to [fetch that PR or MR from `origin` and branch the worktree from it](https://code.claude.com/docs/en/worktrees#branch-from-a-pull-request). Branching from a GitLab merge request requires Claude Code v2.1.233 or later | `claude -w feature-auth` |
135138
136139### System prompt flags
137140
138141Claude Code provides five flags for customizing the system prompt. Four set its text, and with `--system-prompt-snapshot` you control whether a conversation keeps the text it started with. All five work in both interactive and non-interactive modes.
139142
140| Flag | Behavior | Example |
141| :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- |
142| `--system-prompt` | Replaces the entire default prompt | `claude --system-prompt "You are a Python expert"` |
143| `--system-prompt-file` | Replaces with file contents | `claude --system-prompt-file ./prompts/review.txt` |
144| `--append-system-prompt` | Appends to the default prompt | `claude --append-system-prompt "Always use TypeScript"` |
145| `--append-system-prompt-file` | Appends file contents to the default prompt | `claude --append-system-prompt-file ./style-rules.txt` |
146| `--system-prompt-snapshot` | With `off`, rebuilds the prompt on every request. With `on`, the default, reuses a recorded prompt where [recording applies](#system-prompt-flags-in-resumed-conversations) | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |
143| Flag | Behavior | Example |
144| :- | :- | :- |
145| `--system-prompt` | Replaces the entire default prompt | `claude --system-prompt "You are a Python expert"` |
146| `--system-prompt-file` | Replaces with file contents | `claude --system-prompt-file ./prompts/review.txt` |
147| `--append-system-prompt` | Appends to the default prompt | `claude --append-system-prompt "Always use TypeScript"` |
148| `--append-system-prompt-file` | Appends file contents to the default prompt | `claude --append-system-prompt-file ./style-rules.txt` |
149| `--system-prompt-snapshot` | With `off`, rebuilds the prompt on every request. With `on`, the default, reuses a recorded prompt where [recording applies](#system-prompt-flags-in-resumed-conversations) | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |
147150
148`--system-prompt` and `--system-prompt-file` are mutually exclusive. The append flags can be combined with either replacement flag.
151You can combine these flags. To replace the default prompt and still append your own text, pass `--append-system-prompt` or `--append-system-prompt-file` together with `--system-prompt` or `--system-prompt-file`. With Claude Code v2.1.283 or later, you can also pass a flag together with its own file form, such as `--append-system-prompt` with `--append-system-prompt-file`, and Claude Code uses both.
149152
150When the replacement text combines instructions that are the same on every run with context that changes per run, add a line containing only `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` between the instructions and the context. Claude Code splits the prompt at the first such line and removes that line, so the part above it stays cached while the part below changes. Requires Claude Code v2.1.275 or later. [Cache the static part of a custom prompt](/docs/en/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt) lists the configurations where the split applies.
153For example, run the following in your shell to append both a style guide from a file and one extra instruction:
151154
155```bash theme={null}
156claude -p --append-system-prompt-file ./style.md --append-system-prompt "Always reply in French" "Summarize README.md"
157```
158
159Claude receives the default system prompt followed by the contents of `style.md`, a blank line, and then `Always reply in French`. The file's contents come first even if you pass `--append-system-prompt` before `--append-system-prompt-file`.
160
161When the replacement text combines instructions that are the same on every run with context that changes per run, add a line containing only `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` between the instructions and the context. Claude Code splits the prompt at the first such line and removes that line, so the part above it stays cached while the part below changes. Requires Claude Code v2.1.275 or later. [Cache the static part of a custom prompt](https://code.claude.com/docs/en/agent-sdk/modifying-system-prompts.md#cache-the-static-part-of-a-custom-prompt) lists the configurations where the split applies.
162
152163Choose based on whether Claude Code's default identity still fits your task. Use an append flag when Claude should remain a coding assistant that also follows your extra rules: per-invocation instructions, output formatting, or domain context for a `-p` script. Appending preserves the default tool guidance, safety instructions, and coding conventions, so you only supply what differs. Use a replacement flag when the surface, identity, or permission model differs from Claude Code's, like a non-coding agent in a pipeline that no human watches. Replacing drops all of the default prompt, including tool guidance and safety instructions, so you take responsibility for whatever your task still needs.
153164
154For persistent personas you can switch between and share across a project, use [output styles](/docs/en/output-styles). For project conventions Claude should always follow, use [CLAUDE.md](/docs/en/memory). The [Agent SDK guide on system prompts](/docs/en/agent-sdk/modifying-system-prompts#decide-on-a-starting-point) covers the same decision in more depth.
165For persistent personas you can switch between and share across a project, use [output styles](https://code.claude.com/docs/en/output-styles.md). For project conventions Claude should always follow, use [CLAUDE.md](https://code.claude.com/docs/en/memory.md). The [Agent SDK guide on system prompts](https://code.claude.com/docs/en/agent-sdk/modifying-system-prompts.md#decide-on-a-starting-point) covers the same decision in more depth.
155166
156167#### System prompt flags in resumed conversations
157168
158169By default, Claude Code builds the system prompt once, on a conversation's first request, with the text from any system prompt flags applied, and records it in the session. Until the conversation is compacted, every later request uses that recorded prompt, including after you return to the conversation with `--resume` or `--continue`. If you pass different system prompt flag text, or none, on that later launch, it takes effect once the conversation is compacted or when you start a new conversation.
159170
160Outside of [cloud sessions](/docs/en/cloud-environments), if you start Claude Code in [bare mode](/docs/en/headless#start-faster-with-bare-mode) by passing `--bare` or setting `CLAUDE_CODE_SIMPLE=1`, recording stays off unless you pass `--system-prompt-snapshot on`. Before v2.1.268, sessions that don't [fetch feature flags](/docs/en/env-vars#features-that-need-feature-flag-fetching), including sessions on Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, rebuilt the prompt on every request and `--system-prompt-snapshot` had no effect.
171Outside of [cloud sessions](https://code.claude.com/docs/en/cloud-environments.md), if you start Claude Code in [bare mode](https://code.claude.com/docs/en/headless.md#start-faster-with-bare-mode) by passing `--bare` or setting `CLAUDE_CODE_SIMPLE=1`, recording stays off unless you pass `--system-prompt-snapshot on`. Before v2.1.268, sessions that don't [fetch feature flags](https://code.claude.com/docs/en/env-vars.md#features-that-need-feature-flag-fetching), including sessions on Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, rebuilt the prompt on every request and `--system-prompt-snapshot` had no effect.
161172
162173To rebuild the prompt on every request instead, for example while you iterate on its wording across `--continue` runs, pass `--system-prompt-snapshot off`. Before v2.1.265, passing any of the system prompt flags also turned recording off unless you passed `--system-prompt-snapshot on`.
163174
164175## See also
165176
166* [Chrome extension](/docs/en/chrome) - Browser automation and web testing
167* [Interactive mode](/docs/en/interactive-mode) - Shortcuts, input modes, and interactive features
168* [Quickstart guide](/docs/en/quickstart) - Getting started with Claude Code
169* [Common workflows](/docs/en/common-workflows) - Advanced workflows and patterns
170* [Settings](/docs/en/settings) - Configuration options
171* [Agent SDK documentation](/docs/en/agent-sdk/overview) - Programmatic usage and integrations
177* [Chrome extension](https://code.claude.com/docs/en/chrome.md) - Browser automation and web testing
178* [Interactive mode](https://code.claude.com/docs/en/interactive-mode.md) - Shortcuts, input modes, and interactive features
179* [Quickstart guide](https://code.claude.com/docs/en/quickstart.md) - Getting started with Claude Code
180* [Common workflows](https://code.claude.com/docs/en/common-workflows.md) - Advanced workflows and patterns
181* [Settings](https://code.claude.com/docs/en/settings.md) - Configuration options
182* [Agent SDK documentation](https://code.claude.com/docs/en/agent-sdk/overview.md) - Programmatic usage and integrations
172183
cloud-environments Changed · +72 / -72 lines
from line 4
44
55> [!NOTE]
66>
7> Cloud environments apply to [cloud sessions](/docs/en/claude-code-on-the-web.md), which are available on Pro, Max, and Team plans, and for Enterprise users with [premium seats or Chat + Claude Code seats](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan).
7> Cloud environments apply to [cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md), which are available on Pro, Max, and Team plans, and for Enterprise users with [premium seats or Chat + Claude Code seats](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan).
88
9Each [cloud session](/docs/en/claude-code-on-the-web.md) runs in a cloud environment. You can configure an environment to allow or deny [network access](#access-levels), [set environment variables](#set-environment-variables) for the session, store [network secrets](#add-network-secrets) that sessions use without seeing them, and run a [setup script](#setup-scripts) before Claude starts working.
9Each [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md) runs in a cloud environment. You can configure an environment to allow or deny [network access](#access-levels), [set environment variables](#set-environment-variables) for the session, store [network secrets](#add-network-secrets) that sessions use without seeing them, and run a [setup script](#setup-scripts) before Claude starts working.
1010
1111The same environments apply wherever you start a cloud session:
1212
13* The [Desktop app](/docs/en/desktop.md)
14* The [Claude mobile app](/docs/en/mobile.md)
13* The [Desktop app](https://code.claude.com/docs/en/desktop.md)
14* The [Claude mobile app](https://code.claude.com/docs/en/mobile.md)
1515* Your browser at [claude.ai/code](https://claude.ai/code)
16* The terminal with [`claude --cloud`](/docs/en/claude-code-on-the-web#from-terminal-to-cloud)
17* [Cloud scheduled tasks](/docs/en/routines.md)
16* The terminal with [`claude --cloud`](https://code.claude.com/docs/en/claude-code-on-the-web#from-terminal-to-cloud)
17* [Cloud scheduled tasks](https://code.claude.com/docs/en/routines.md)
1818* [Claude Tag](https://claude.com/docs/claude-tag/overview)
1919
20Each of these surfaces can also route to a [self-hosted environment](/docs/en/self-hosted-environments). [Availability and limitations](/docs/en/self-hosted-environments#availability-and-limitations) covers what Claude can't use yet when a Claude Tag session runs in one.
20Each of these surfaces can also route to a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments). [Availability and limitations](https://code.claude.com/docs/en/self-hosted-environments#availability-and-limitations) covers what Claude can't use yet when a Claude Tag session runs in one.
2121
2222> [!NOTE]
2323>
24> [Remote Control](/docs/en/remote-control.md) sessions connect the web and mobile interfaces to a session on your own machine, which uses your machine's network and files, not a cloud environment. Claude Tag channel sessions use organization-level environments only, either [shared environments](#organization-shared-environments) or [self-hosted environments](/docs/en/self-hosted-environments).
24> [Remote Control](https://code.claude.com/docs/en/remote-control.md) sessions connect the web and mobile interfaces to a session on your own machine, which uses your machine's network and files, not a cloud environment. Claude Tag channel sessions use organization-level environments only, either [shared environments](#organization-shared-environments) or [self-hosted environments](https://code.claude.com/docs/en/self-hosted-environments).
2525
2626## The Default environment
2727
from line 29
2929
3030* **CLI flows such as `/web-setup`**: create **Default** for you
3131* **Web onboarding on Pro and Max**: creates **Default** for you
32* **Web onboarding on Team and Enterprise**: shows a **Create your first cloud environment** form unless an Owner has turned on [Quick setup](/docs/en/claude-code-on-the-web.md#quick-setup-for-team-and-enterprise); keep the form's defaults and click **Create & finish** to get the same **Default** environment
32* **Web onboarding on Team and Enterprise**: shows a **Create your first cloud environment** form unless an Owner has turned on [Quick setup](https://code.claude.com/docs/en/claude-code-on-the-web.md#quick-setup-for-team-and-enterprise); keep the form's defaults and click **Create & finish** to get the same **Default** environment
3333
3434**Default** carries no configuration of its own:
3535
from line 38
3838
3939With only **Default** available, every session runs in it. When you have more than one environment, sessions choose one per surface:
4040
41* In the Desktop app, the mobile app, and at claude.ai/code, sessions you start yourself use the environment shown in the [selector](#configure-your-environment). An [organization default](#organization-shared-environments) set by an Owner fills the selection when you haven't picked one. Threads in a [project](/docs/en/claude-projects.md#project-settings-reference) use the environment set in the project's settings instead.
42* From the CLI, Claude Code uses your [`/remote-env` pick](#select-an-environment-from-the-cli), or falls back to the Anthropic-hosted environment when your list has one, and otherwise to the first environment in your list that isn't a bridge environment, an entry [Remote Control](/docs/en/remote-control.md) registers to represent your own machine rather than a cloud environment. For a [self-hosted environment](/docs/en/self-hosted-environments), passing `--environment <environment-id>` with its `ccpool_` ID [when you dispatch a session](/docs/en/self-hosted-environments-testing.md#run-the-test-loop) overrides the `/remote-env` pick and the fallback for that invocation. Claude Code rejects Anthropic-hosted `env_` IDs passed to the flag, so use `/remote-env` to target those. The flag requires Claude Code v2.1.224 or later.
41* In the Desktop app, the mobile app, and at claude.ai/code, sessions you start yourself use the environment shown in the [selector](#configure-your-environment). An [organization default](#organization-shared-environments) set by an Owner fills the selection when you haven't picked one. Threads in a [project](https://code.claude.com/docs/en/claude-projects.md#project-settings-reference) use the environment set in the project's settings instead.
42* From the CLI, Claude Code uses your [`/remote-env` pick](#select-an-environment-from-the-cli), or falls back to the Anthropic-hosted environment when your list has one, and otherwise to the first environment in your list that isn't a bridge environment, an entry [Remote Control](https://code.claude.com/docs/en/remote-control.md) registers to represent your own machine rather than a cloud environment. For a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments), passing `--environment <environment-id>` with its `ccpool_` ID [when you dispatch a session](https://code.claude.com/docs/en/self-hosted-environments-testing.md#run-the-test-loop) overrides the `/remote-env` pick and the fallback for that invocation. Claude Code rejects Anthropic-hosted `env_` IDs passed to the flag, so use `/remote-env` to target those. The flag requires Claude Code v2.1.224 or later.
4343
4444Configure an environment when the default isn't enough: when Claude needs to reach domains outside the [default allowlist](#default-allowed-domains), needs environment variables set for its sessions, or needs dependencies installed before it starts working.
4545
4646## Configure your environment
4747
48Add, edit, and archive environments from the environment selector under the message box on the screen where you start a new session at [claude.ai/code](https://claude.ai/code). To reach that screen, complete [web onboarding](/docs/en/web-quickstart.md). For the Desktop app, see [Cloud sessions](/docs/en/desktop.md#cloud-sessions). Environments you create are personal to your account; [shared environments](#organization-shared-environments) created by an Owner appear in the selector alongside them. See [Installed tools](#installed-tools) for what's available without any configuration.
48Add, edit, and archive environments from the environment selector under the message box on the screen where you start a new session at [claude.ai/code](https://claude.ai/code). To reach that screen, complete [web onboarding](https://code.claude.com/docs/en/web-quickstart.md). For the Desktop app, see [Cloud sessions](https://code.claude.com/docs/en/desktop.md#cloud-sessions). Environments you create are personal to your account; [shared environments](#organization-shared-environments) created by an Owner appear in the selector alongside them. See [Installed tools](#installed-tools) for what's available without any configuration.
4949
5050The selector appears only until you send a new session's first message. To edit the environment of a running cloud session of your own, select the caret after the session title at the top, then select **Edit cloud environment**.
5151
from line 72
7272DATABASE_URL=postgres://localhost:5432/myapp
7373```
7474
75A session reads the environment's values into ordinary environment variables that any command Claude runs can read, except `OTEL_*` variables. Claude Code uses those for its own [telemetry export](/docs/en/monitoring-usage.md#telemetry-from-cloud-sessions-and-claude-tag) and doesn't pass them to the commands it runs.
75A session reads the environment's values into ordinary environment variables that any command Claude runs can read, except `OTEL_*` variables. Claude Code uses those for its own [telemetry export](https://code.claude.com/docs/en/monitoring-usage.md#telemetry-from-cloud-sessions-and-claude-tag) and doesn't pass them to the commands it runs.
7676
7777In an Anthropic-hosted environment, a session reads the environment's values when you create it and again each time Claude Code starts in the session's VM afterward, which happens in two cases:
7878
7979* **The VM is restored after being idle**: after a few minutes without activity, a session's VM pauses with its files saved. Your next message restores the same VM and starts Claude Code again.
80* **The VM was reclaimed and is rebuilt**: if the paused VM has since been [reclaimed](/docs/en/claude-code-on-the-web.md#environment-expired), reopening the session provisions a fresh VM.
80* **The VM was reclaimed and is rebuilt**: if the paused VM has since been [reclaimed](https://code.claude.com/docs/en/claude-code-on-the-web.md#environment-expired), reopening the session provisions a fresh VM.
8181
8282After you edit, add, or remove a variable, an existing session in an Anthropic-hosted environment keeps the values it last read until its VM is next restored or rebuilt, and uses your change from then on. Its VM pauses on its own once the session is idle, and you can't pause it yourself. To use a new value right away, ask Claude to set it on the command it runs, for example `LOG_LEVEL=trace npm test`, or start a new session.
8383
84A cloud session also sets some variables itself when it starts. For [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/docs/en/claude-code-on-the-web#manage-context), the value the session sets overrides one you add here, so adding that key here has no effect.
84A cloud session also sets some variables itself when it starts. For [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](https://code.claude.com/docs/en/claude-code-on-the-web#manage-context), the value the session sets overrides one you add here, so adding that key here has no effect.
8585
8686Anyone who uses the environment can read the values. In an Anthropic-hosted environment, use a [network secret](#add-network-secrets) instead for a key the agent proxy can attach to a request. The [requests that never get a secret](#requests-that-never-get-the-credential) are listed there.
8787
from line 99
9999 * **Your own environment on Enterprise**: with an organization admin role, you add and delete secrets. Without it, the **Network secrets** row opens the secrets list with the note "Only an organization admin can add or delete network secrets" and no **Add secret** or delete button. Ask an Owner to add the secret to a [shared environment](#organization-shared-environments), then run your sessions there
100100 * **A shared environment**: Owners [add and delete its secrets](#add-a-credential) from admin settings. Without an organization admin role, ask an Owner to add the secret, because the environment's dialog has no **Network secrets** section
101101 * **Your own environment on Team**: without an organization admin role, **Add secret** opens a [shorter form](#add-a-secret-without-the-role) that takes one host
102* **Environment type**: an Anthropic-hosted cloud environment that already exists. A [self-hosted environment](/docs/en/self-hosted-environments) doesn't have network secrets
102* **Environment type**: an Anthropic-hosted cloud environment that already exists. A [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) doesn't have network secrets
103103* **API reachability**: the API accepts connections from the internet, because requests leave from Anthropic's network
104104* **Encryption keys**: if your organization uses customer-managed encryption keys, you can't save network secrets
105105
from line 148
148148* **GitHub**: the [GitHub proxy](#github-proxy) authenticates requests to GitHub instead, so you don't need a network secret for it
149149* **The Anthropic API and public package registries**: `api.anthropic.com`, `registry.npmjs.org`, `jsr.io`, `npm.jsr.io`, `pypi.org`, `files.pythonhosted.org`, `index.crates.io`, and `proxy.golang.org`
150150* **Setup script requests**: Claude Code connects to the agent proxy when it launches, after the [setup script](#setup-scripts) has run
151* **Claude Code's telemetry export**: Claude Code sends its [telemetry export](/docs/en/monitoring-usage.md#telemetry-from-cloud-sessions-and-claude-tag) itself rather than through a command it runs, and that request doesn't go through the agent proxy
151* **Claude Code's telemetry export**: Claude Code sends its [telemetry export](https://code.claude.com/docs/en/monitoring-usage.md#telemetry-from-cloud-sessions-and-claude-tag) itself rather than through a command it runs, and that request doesn't go through the agent proxy
152152
153153### Select an environment from the CLI
154154
155Run `/remote-env` in your terminal to choose the default environment for cloud sessions you create from the CLI, such as [`claude --cloud`](/docs/en/claude-code-on-the-web#from-terminal-to-cloud). The command opens a picker of your existing environments and saves your choice to the `remote.defaultEnvironmentId` key in your [user settings](/docs/en/settings.md#where-settings-live), so it applies in every project on your machine until you change it, unless the same key is set at a higher-precedence [settings layer](/docs/en/settings.md#settings-precedence), such as a repo's project settings.
155Run `/remote-env` in your terminal to choose the default environment for cloud sessions you create from the CLI, such as [`claude --cloud`](https://code.claude.com/docs/en/claude-code-on-the-web#from-terminal-to-cloud). The command opens a picker of your existing environments and saves your choice to the `remote.defaultEnvironmentId` key in your [user settings](https://code.claude.com/docs/en/settings.md#where-settings-live), so it applies in every project on your machine until you change it, unless the same key is set at a higher-precedence [settings layer](https://code.claude.com/docs/en/settings.md#settings-precedence), such as a repo's project settings.
156156
157A [self-hosted environment](/docs/en/self-hosted-environments) ID, which has the form `ccpool_...`, follows a stricter source rule. See [`remote.defaultEnvironmentId`](/docs/en/settings-reference#remote-defaultenvironmentid) for the settings layers Claude Code honors it from.
157A [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) ID, which has the form `ccpool_...`, follows a stricter source rule. See [`remote.defaultEnvironmentId`](https://code.claude.com/docs/en/settings-reference#remote-defaultenvironmentid) for the settings layers Claude Code honors it from.
158158
159159`/remote-env` only sets the default: it doesn't start a session, and it can't add or edit environments. Manage them from the [environment selector](#configure-your-environment).
160160
from line 169
169169* Network secrets on the environment stay attached in its running sessions. Delete any you no longer want before you archive.
170170* No new session can start in an archived environment, on any surface:
171171 * **Saved CLI default**: if the environment was your saved [CLI default](#select-an-environment-from-the-cli), Claude Code starts CLI cloud sessions in the Anthropic-hosted environment when your list has one. Otherwise, it starts them in the first environment in your list that isn't a [Remote Control bridge environment](#the-default-environment).
172 * **Configured explicitly**: anything configured with the environment explicitly, such as a [cloud scheduled task](/docs/en/routines.md#environments-and-network-access), can't start new sessions in it. Point it at another environment.
172 * **Configured explicitly**: anything configured with the environment explicitly, such as a [cloud scheduled task](https://code.claude.com/docs/en/routines.md#environments-and-network-access), can't start new sessions in it. Point it at another environment.
173173
174When you no longer need an Anthropic-hosted environment, archive it. Neither the environment dialog nor the **Cloud environments** admin page has an option to delete an Anthropic-hosted environment. If the environment is [self-hosted](/docs/en/self-hosted-environments), an Owner can delete it from the **Cloud environments** page in admin settings. If you aren't an Owner, ask one to delete it.
174When you no longer need an Anthropic-hosted environment, archive it. Neither the environment dialog nor the **Cloud environments** admin page has an option to delete an Anthropic-hosted environment. If the environment is [self-hosted](https://code.claude.com/docs/en/self-hosted-environments), an Owner can delete it from the **Cloud environments** page in admin settings. If you aren't an Owner, ask one to delete it.
175175
176176### Organization-shared environments
177177
178On Team and Enterprise plans, an Owner can create cloud environments that are shared with every member of the organization. The same role manages everything else on the **Cloud environments** admin page, including [self-hosted environments](/docs/en/self-hosted-environments); the Admin role can't open the page. The full list of roles that can open it is the one for [managing server-managed settings](/docs/en/server-managed-settings.md#access-control).
178On Team and Enterprise plans, an Owner can create cloud environments that are shared with every member of the organization. The same role manages everything else on the **Cloud environments** admin page, including [self-hosted environments](https://code.claude.com/docs/en/self-hosted-environments); the Admin role can't open the page. The full list of roles that can open it is the one for [managing server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md#access-control).
179179
180180Shared environments appear in each member's [environment selector](#configure-your-environment) under an **Organization** heading, after the member's own environments under **Personal**, so a team can standardize on one configuration instead of each member recreating it. Selecting a shared environment's settings icon there opens a read-only summary of its configuration for every member, Owners included.
181181
from line 190
190190
191191### Set the environment a Claude Tag channel uses
192192
193In [Claude Tag](https://claude.com/docs/claude-tag/overview) channels, Claude works as your organization's shared identity, not as any member, so channel sessions use organization-level environments only, either shared environments or [self-hosted environments](/docs/en/self-hosted-environments). To give a channel a toolchain that isn't [pre-installed](#installed-tools), such as .NET, an Owner can create a [shared environment](#organization-shared-environments) from the **Cloud environments** admin page with a [setup script](#setup-scripts) that installs it. Point the channel at an environment in one of two ways:
193In [Claude Tag](https://claude.com/docs/claude-tag/overview) channels, Claude works as your organization's shared identity, not as any member, so channel sessions use organization-level environments only, either shared environments or [self-hosted environments](https://code.claude.com/docs/en/self-hosted-environments). To give a channel a toolchain that isn't [pre-installed](#installed-tools), such as .NET, an Owner can create a [shared environment](#organization-shared-environments) from the **Cloud environments** admin page with a [setup script](#setup-scripts) that installs it. Point the channel at an environment in one of two ways:
194194
195195* Set a shared or self-hosted environment as the organization's [default environment](#the-default-environment) at [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).
196196* [Pin one to a channel](https://claude.com/docs/claude-tag/admins/troubleshooting#channel-sessions-use-the-wrong-environment-or-can%E2%80%99t-find-one) in the Claude Tag admin settings.
from line 199
199199
200200Each environment sets one network access level, which controls the outbound connections its sessions can make. The default level, **Trusted**, allows package registries and other [allowlisted domains](#default-allowed-domains); **Custom** takes your own domain list.
201201
202To change an environment's network access, [open it for editing](#configure-your-environment) and use the **Network access** selector in the dialog. A [shared environment](#organization-shared-environments) opens read-only there, so an Owner changes its network access from the **Cloud environments** page in [admin settings](https://claude.ai/admin-settings) instead. The control that opens the selector appears on the app surfaces listed under [The Default environment](#the-default-environment) and in the [cloud scheduled task editor](/docs/en/routines.md#environments-and-network-access). Personal environments don't have a separate page in your claude.ai account settings.
202To change an environment's network access, [open it for editing](#configure-your-environment) and use the **Network access** selector in the dialog. A [shared environment](#organization-shared-environments) opens read-only there, so an Owner changes its network access from the **Cloud environments** page in [admin settings](https://claude.ai/admin-settings) instead. The control that opens the selector appears on the app surfaces listed under [The Default environment](#the-default-environment) and in the [cloud scheduled task editor](https://code.claude.com/docs/en/routines.md#environments-and-network-access). Personal environments don't have a separate page in your claude.ai account settings.
203203
204204When you change an Anthropic-hosted environment's network access, its existing sessions follow the new setting within about a minute, for requests that go through the session's [network allowlist](#access-levels). You don't need to start a new session.
205205
206206> [!NOTE]
207207>
208> MCP connectors you enable on a session or scheduled task work without adding their hosts to **Allowed domains**, because connector traffic travels through Anthropic's servers rather than the session's network. This relies on the same Anthropic-bound channel noted under [Security and isolation](/docs/en/claude-code-on-the-web.md#security-and-isolation). Turn off any connector you don't need to limit which tools Claude can reach.
208> MCP connectors you enable on a session or scheduled task work without adding their hosts to **Allowed domains**, because connector traffic travels through Anthropic's servers rather than the session's network. This relies on the same Anthropic-bound channel noted under [Security and isolation](https://code.claude.com/docs/en/claude-code-on-the-web.md#security-and-isolation). Turn off any connector you don't need to limit which tools Claude can reach.
209209
210210### Access levels
211211
from line 223
223223* GitHub, through its [separate proxy](#github-proxy)
224224* [MCP connectors](#network-access) you enable, whose traffic travels through Anthropic's servers
225225* The hosts you listed on the environment's [network secrets](#add-network-secrets), except the [hosts that never get the secret](#requests-that-never-get-the-credential)
226* The Anthropic API, for Claude Code's own requests, even at **None**, as noted under [Security and isolation](/docs/en/claude-code-on-the-web.md#security-and-isolation)
226* The Anthropic API, for Claude Code's own requests, even at **None**, as noted under [Security and isolation](https://code.claude.com/docs/en/claude-code-on-the-web.md#security-and-isolation)
227227
228228### Allow specific domains
229229
from line 237
237237
238238Sessions in this environment can now reach `api.example.com`, any subdomain of `internal.example.com`, and `registry.example.com`, and no other domains through the session's network. [GitHub traffic](#github-proxy), [MCP connector traffic](#network-access), and requests to the hosts of the environment's [network secrets](#add-network-secrets), other than the [hosts that never get the secret](#requests-that-never-get-the-credential), don't go through this allowlist. A leading `*.` matches every subdomain. To keep the [Trusted domains](#default-allowed-domains) too, check **Also include default list of common package managers**; leave it unchecked to allow only what you list.
239239
240If your organization uses [artifacts](/docs/en/artifacts.md#availability), you don't need `*.frame.claudeusercontent.com` in the list for sessions to read them. When the list leaves that host out, Claude Code reads artifact content through the session's connection to Anthropic instead. Keep the host in an allowlist in two situations:
240If your organization uses [artifacts](https://code.claude.com/docs/en/artifacts.md#availability), you don't need `*.frame.claudeusercontent.com` in the list for sessions to read them. When the list leaves that host out, Claude Code reads artifact content through the session's connection to Anthropic instead. Keep the host in an allowlist in two situations:
241241
242242* **Sessions in this environment open another organization's public artifacts**: Claude Code fetches those from the host directly, so add it to this list.
243* **You're configuring the local CLI or a self-hosted runner**: keep the host in that allowlist. See [network access requirements](/docs/en/network-config.md#network-access-requirements) and the self-hosted [network requirements](/docs/en/self-hosted-environments-deploy.md#network-requirements).
243* **You're configuring the local CLI or a self-hosted runner**: keep the host in that allowlist. See [network access requirements](https://code.claude.com/docs/en/network-config.md#network-access-requirements) and the self-hosted [network requirements](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#network-requirements).
244244
245Each environment has its own allowed-domains list; there's no organization-level allowlist that admins can push to every member's environments. No [server-managed setting](/docs/en/server-managed-settings.md) adds domains to an environment's network allowlist either. To give a team one standard list, an Owner can create an [organization-shared environment](#organization-shared-environments) with **Custom** network access and that list.
245Each environment has its own allowed-domains list; there's no organization-level allowlist that admins can push to every member's environments. No [server-managed setting](https://code.claude.com/docs/en/server-managed-settings.md) adds domains to an environment's network allowlist either. To give a team one standard list, an Owner can create an [organization-shared environment](#organization-shared-environments) with **Custom** network access and that list.
246246
247247### GitHub proxy
248248
249In Anthropic-hosted environments, all GitHub operations go through a dedicated proxy that keeps your real GitHub credentials outside the session's VM, independent of the environment's [access level](#access-levels). Sessions in a self-hosted environment authenticate git operations with credentials your deployment provides; [Configure git](/docs/en/self-hosted-environments-deploy.md#configure-git) covers the options, including per-session minted credentials and an opt-in to this same proxy. The proxy provides:
249In Anthropic-hosted environments, all GitHub operations go through a dedicated proxy that keeps your real GitHub credentials outside the session's VM, independent of the environment's [access level](#access-levels). Sessions in a self-hosted environment authenticate git operations with credentials your deployment provides; [Configure git](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#configure-git) covers the options, including per-session minted credentials and an opt-in to this same proxy. The proxy provides:
250250
251251* **Git credentials**: the git client inside the VM uses a scoped credential, which the proxy verifies and swaps for your actual GitHub token.
252252* **API requests**: requests from the built-in GitHub tools, and from `gh` under the [`proxy-injected` placeholder](#work-with-github-issues-and-pull-requests), go out with your real credentials substituted.
from line 258
258258
259259### Security proxy
260260
261Cloud sessions in Anthropic-hosted environments run behind an HTTP/HTTPS network proxy for security and abuse prevention purposes; in a [self-hosted environment](/docs/en/self-hosted-environments-deploy.md#default-deny-egress), outbound traffic leaves through your own network boundary instead. All outbound internet traffic from an Anthropic-hosted session passes through this proxy, which provides:
261Cloud sessions in Anthropic-hosted environments run behind an HTTP/HTTPS network proxy for security and abuse prevention purposes; in a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#default-deny-egress), outbound traffic leaves through your own network boundary instead. All outbound internet traffic from an Anthropic-hosted session passes through this proxy, which provides:
262262
263263* Protection against malicious requests
264264* Rate limiting and abuse prevention
from line 269
269269
270270> [!NOTE]
271271>
272> Sessions your organization routes to a [self-hosted environment](/docs/en/self-hosted-environments) run on your own runners instead, with the tools your runner image provides.
272> Sessions your organization routes to a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) run on your own runners instead, with the tools your runner image provides.
273273
274274### What carries over from your setup
275275
276276> [!NOTE]
277277>
278> Of the repository configuration in this table, a cloud thread in a [project](/docs/en/claude-projects.md) loads only the repository root's `CLAUDE.md`, `.claude/CLAUDE.md`, and `.claude/rules/` files that aren't [path-specific](/docs/en/memory.md#path-specific-rules). See [What threads pick up from your repositories](/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories).
278> Of the repository configuration in this table, a cloud thread in a [project](https://code.claude.com/docs/en/claude-projects.md) loads only the repository root's `CLAUDE.md`, `.claude/CLAUDE.md`, and `.claude/rules/` files that aren't [path-specific](https://code.claude.com/docs/en/memory.md#path-specific-rules). See [What threads pick up from your repositories](https://code.claude.com/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories).
279279
280Cloud sessions start from a fresh clone of your repository. Anything you commit to the repo is available. Anything you've installed or configured only on your own machine isn't available in the session. Your organization's policy arrives separately through [server-managed settings](/docs/en/server-managed-settings.md).
280Cloud sessions start from a fresh clone of your repository. Anything you commit to the repo is available. Anything you've installed or configured only on your own machine isn't available in the session. Your organization's policy arrives separately through [server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md).
281281
282282| | Available in cloud sessions | Why |
283283| :- | :- | :- |
284284| Your repo's `CLAUDE.md` | Yes | Part of the clone |
285| Your repo's `.claude/settings.json` hooks and permission rules | Yes, in a session with one repository | Part of the clone. For a session with several repositories, see [which settings it reads](/docs/en/settings.md#settings-in-cloud-sessions) |
286| Your repo's `.mcp.json` MCP servers | Yes, in a session with one repository | Part of the clone, found from the session's working directory. For a self-hosted environment, see [which repository's settings apply](/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories) |
285| Your repo's `.claude/settings.json` hooks and permission rules | Yes, in a session with one repository | Part of the clone. For a session with several repositories, see [which settings it reads](https://code.claude.com/docs/en/settings.md#settings-in-cloud-sessions) |
286| Your repo's `.mcp.json` MCP servers | Yes, in a session with one repository | Part of the clone, found from the session's working directory. For a self-hosted environment, see [which repository's settings apply](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories) |
287287| Your repo's `.claude/rules/` | Yes | Part of the clone |
288288| Your repo's `.claude/skills/`, `.claude/agents/`, `.claude/commands/` | Yes | Part of the clone |
289| Plugins and marketplaces declared in your repo's `.claude/settings.json` | No | A cloud session doesn't install the plugins a repository turns on under [`enabledPlugins`](/docs/en/settings-reference#enabledplugins), including ones from the marketplaces it lists under [`extraKnownMarketplaces`](/docs/en/settings-reference#extraknownmarketplaces) |
290| Your organization's [server-managed settings](/docs/en/server-managed-settings.md) | Yes, except in [Claude Tag](https://claude.com/docs/claude-tag/overview) sessions | Fetched from Anthropic's servers when the session starts. See [Surface coverage](/docs/en/model-config.md#surface-coverage) for how `availableModels` is enforced in cloud sessions. Settings deployed to your device through MDM or managed settings files don't apply, because the session runs on an Anthropic-managed VM; in a [self-hosted environment](/docs/en/self-hosted-environments), sessions also read the managed settings file in the runner image, per [how Claude Code combines managed sources](/docs/en/managed-settings.md#how-claude-code-combines-managed-sources) |
289| Plugins and marketplaces declared in your repo's `.claude/settings.json` | No | A cloud session doesn't install the plugins a repository turns on under [`enabledPlugins`](https://code.claude.com/docs/en/settings-reference#enabledplugins), including ones from the marketplaces it lists under [`extraKnownMarketplaces`](https://code.claude.com/docs/en/settings-reference#extraknownmarketplaces) |
290| Your organization's [server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md) | Yes, except in [Claude Tag](https://claude.com/docs/claude-tag/overview) sessions | Fetched from Anthropic's servers when the session starts. See [Surface coverage](https://code.claude.com/docs/en/model-config.md#surface-coverage) for how `availableModels` is enforced in cloud sessions. Settings deployed to your device through MDM or managed settings files don't apply, because the session runs on an Anthropic-managed VM; in a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments), sessions also read the managed settings file in the runner image, per [how Claude Code combines managed sources](https://code.claude.com/docs/en/managed-settings.md#how-claude-code-combines-managed-sources) |
291291| Your user `~/.claude/CLAUDE.md` | No | Lives on your machine, not in the repo. See [Add personal preferences without committing to the repo](#add-personal-preferences-without-committing-to-the-repo) |
292| Your user `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | No | Live on your machine, not in the repo. Commit them to the repo's `.claude/` directory instead. Cloud sessions automatically load [skills you enable on claude.ai](/docs/en/skills.md#skills-in-cowork-and-cloud-sessions) |
292| Your user `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | No | Live on your machine, not in the repo. Commit them to the repo's `.claude/` directory instead. Cloud sessions automatically load [skills you enable on claude.ai](https://code.claude.com/docs/en/skills.md#skills-in-cowork-and-cloud-sessions) |
293293| Plugins enabled only in your user settings | No | User-scoped `enabledPlugins` lives in `~/.claude/settings.json` on your machine |
294| MCP servers you added with `claude mcp add` at the default local scope or the user scope | No | Those write to `~/.claude.json` on your machine, not the repo. Add the server with `claude mcp add --scope project`, which writes the repo's [`.mcp.json`](/docs/en/mcp#project-scope), and commit that file. A session with one repository loads it |
295| Transport variables in your repo's `.claude/settings.json` `env` block, such as `NODE_EXTRA_CA_CERTS` and the [mTLS client certificate variables](/docs/en/network-config.md#mtls-authentication) | No | The hosting environment manages the session's API connection, so Claude Code ignores these keys and notes each ignored key in the session's debug log |
294| MCP servers you added with `claude mcp add` at the default local scope or the user scope | No | Those write to `~/.claude.json` on your machine, not the repo. Add the server with `claude mcp add --scope project`, which writes the repo's [`.mcp.json`](https://code.claude.com/docs/en/mcp#project-scope), and commit that file. A session with one repository loads it |
295| Transport variables in your repo's `.claude/settings.json` `env` block, such as `NODE_EXTRA_CA_CERTS` and the [mTLS client certificate variables](https://code.claude.com/docs/en/network-config.md#mtls-authentication) | No | The hosting environment manages the session's API connection, so Claude Code ignores these keys and notes each ignored key in the session's debug log |
296296| API keys and tokens for services Claude calls | In an Anthropic-hosted environment, as [network secrets](#add-network-secrets) | You add the key once on the environment and the agent proxy attaches it to requests for the hosts you list. A key the agent proxy [can't attach](#requests-that-never-get-the-credential) stays in an environment variable |
297297| Interactive auth like AWS SSO | No | Not supported. SSO requires browser-based login that can't run in a cloud session |
298298
from line 302
302302
303303#### Add personal preferences without committing to the repo
304304
305In an Anthropic-hosted environment, add a [setup script](#setup-scripts) that writes `~/.claude/CLAUDE.md` for preferences you'd rather not put in a shared repository. Claude Code loads that file as [user instructions](/docs/en/memory.md#choose-where-to-put-claude-md-files) in the session. This example sets a commit-message preference:
305In an Anthropic-hosted environment, add a [setup script](#setup-scripts) that writes `~/.claude/CLAUDE.md` for preferences you'd rather not put in a shared repository. Claude Code loads that file as [user instructions](https://code.claude.com/docs/en/memory.md#choose-where-to-put-claude-md-files) in the session. This example sets a commit-message preference:
306306
307307```bash theme={null}
308308#!/bin/bash
from line 344
344344
345345### Work with GitHub issues and pull requests
346346
347Cloud sessions include built-in GitHub tools that let Claude read issues, list pull requests, fetch diffs, and post comments without any setup. These tools authenticate through the [GitHub proxy](#github-proxy) using whichever method you configured under [GitHub authentication options](/docs/en/claude-code-on-the-web.md#github-authentication-options), so your token never enters the container.
347Cloud sessions include built-in GitHub tools that let Claude read issues, list pull requests, fetch diffs, and post comments without any setup. These tools authenticate through the [GitHub proxy](#github-proxy) using whichever method you configured under [GitHub authentication options](https://code.claude.com/docs/en/claude-code-on-the-web.md#github-authentication-options), so your token never enters the container.
348348
349349You can set `GH_TOKEN` or `GITHUB_TOKEN` yourself in [environment settings](#set-environment-variables), or leave both unset and let the [GitHub proxy](#github-proxy) authenticate for you:
350350
from line 361
361361
362362Each cloud session has a transcript URL on claude.ai, and the session can read its own ID from the `CLAUDE_CODE_REMOTE_SESSION_ID` environment variable. Use this to put a traceable link in PR bodies, commit messages, Slack posts, or generated reports so a reviewer can open the run that produced them.
363363
364Commits that Claude creates in a cloud session include a `Claude-Session: <url>` git trailer, and PR bodies include the session URL on its own line. To omit the trailer and the PR-body link, set [`attribution.sessionUrl`](/docs/en/settings-reference#attribution-sessionurl) to `false`.
364Commits that Claude creates in a cloud session include a `Claude-Session: <url>` git trailer, and PR bodies include the session URL on its own line. To omit the trailer and the PR-body link, set [`attribution.sessionUrl`](https://code.claude.com/docs/en/settings-reference#attribution-sessionurl) to `false`.
365365
366366To include the session link in something other than a commit or PR, such as a Slack message Claude posts or a report file it writes, have Claude run the following command and use its output. The command converts the `cse_` prefix in the environment variable's value to the `session_` prefix that the transcript URL expects:
367367
from line 405
405405* 16 GB of RAM
406406* 30 GB of disk
407407
408The VM may stop tasks that need significantly more memory, such as large build jobs or memory-intensive tests. For workloads beyond these limits, use [Remote Control](/docs/en/remote-control.md) to run Claude Code on your own hardware, or run cloud sessions in a [self-hosted environment](/docs/en/self-hosted-environments) on compute your organization operates.
408The VM may stop tasks that need significantly more memory, such as large build jobs or memory-intensive tests. For workloads beyond these limits, use [Remote Control](https://code.claude.com/docs/en/remote-control.md) to run Claude Code on your own hardware, or run cloud sessions in a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) on compute your organization operates.
409409
410410### Time limits
411411
from line 413
413413
414414* **Commands Claude runs**: a cloud environment doesn't set its own command timeout, so the Bash tool's defaults apply. Claude waits 2 minutes for a foreground command by default and can ask for up to 10 minutes.
415415
416 When a command reaches its [timeout](/docs/en/tools-reference.md#timeout-and-output-limits), Claude Code [moves it to the background](/docs/en/tools-reference.md#foreground-commands-that-move-to-the-background) instead of stopping it, unless the command starts with `sleep`. A command moved this way can keep running for up to 30 more minutes before Claude Code stops it at its [background time limit](/docs/en/tools-reference.md#time-limit-for-background-commands). Setting `BASH_DEFAULT_TIMEOUT_MS` above `1800000` milliseconds lengthens that limit as well as the foreground default.
417* **SessionStart hooks**: Claude Code cancels a `command` hook after 600 seconds unless you set [`timeout`](/docs/en/hooks#common-fields), in seconds, on the hook entry. Claude Code doesn't enforce the timeout on a hook you run with [`async: true`](/docs/en/hooks#run-hooks-in-the-background).
416 When a command reaches its [timeout](https://code.claude.com/docs/en/tools-reference.md#timeout-and-output-limits), Claude Code [moves it to the background](https://code.claude.com/docs/en/tools-reference.md#foreground-commands-that-move-to-the-background) instead of stopping it, unless the command starts with `sleep`. A command moved this way can keep running for up to 30 more minutes before Claude Code stops it at its [background time limit](https://code.claude.com/docs/en/tools-reference.md#time-limit-for-background-commands). Setting `BASH_DEFAULT_TIMEOUT_MS` above `1800000` milliseconds lengthens that limit as well as the foreground default.
417* **SessionStart hooks**: Claude Code cancels a `command` hook after 600 seconds unless you set [`timeout`](https://code.claude.com/docs/en/hooks#common-fields), in seconds, on the hook entry. Claude Code doesn't enforce the timeout on a hook you run with [`async: true`](https://code.claude.com/docs/en/hooks#run-hooks-in-the-background).
418418* **Setup script**: a script that takes longer than roughly five minutes isn't cached. [Script requirements](#script-requirements) covers how to stay under that.
419* **Idle sessions**: after a few minutes without activity, a session's VM pauses with its files saved, and a paused VM can later be reclaimed. [Set environment variables](#set-environment-variables) describes what a session picks up in each case, and [Environment expired](/docs/en/claude-code-on-the-web.md#environment-expired) covers how to reopen a session whose VM was reclaimed.
419* **Idle sessions**: after a few minutes without activity, a session's VM pauses with its files saved, and a paused VM can later be reclaimed. [Set environment variables](#set-environment-variables) describes what a session picks up in each case, and [Environment expired](https://code.claude.com/docs/en/claude-code-on-the-web.md#environment-expired) covers how to reopen a session whose VM was reclaimed.
420420
421To raise the command timeouts for an environment's sessions, add [`BASH_DEFAULT_TIMEOUT_MS` and `BASH_MAX_TIMEOUT_MS`](/docs/en/env-vars#variables) to its [environment variables](#set-environment-variables). Both take milliseconds. For example, `BASH_DEFAULT_TIMEOUT_MS=600000` makes 10 minutes the default.
421To raise the command timeouts for an environment's sessions, add [`BASH_DEFAULT_TIMEOUT_MS` and `BASH_MAX_TIMEOUT_MS`](https://code.claude.com/docs/en/env-vars#variables) to its [environment variables](#set-environment-variables). Both take milliseconds. For example, `BASH_DEFAULT_TIMEOUT_MS=600000` makes 10 minutes the default.
422422
423423## Setup scripts
424424
from line 442
442442A setup script has three constraints to write around:
443443
444444* **Exit zero**: if the script exits non-zero, the session fails to start. Append `|| true` to non-critical commands so an intermittent install failure doesn't block the session.
445* **Finish within five minutes**: keep the script's total runtime under roughly five minutes so the [environment cache](#environment-caching) can build. When setup takes longer than that, the environment isn't cached. Run independent installs in parallel with `&` and `wait`, and move any single download that won't fit into a [SessionStart hook](#setup-scripts-vs-sessionstart-hooks) that launches it in the background. If new sessions stall or fail during setup, see [New sessions hang or time out during setup](/docs/en/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).
445* **Finish within five minutes**: keep the script's total runtime under roughly five minutes so the [environment cache](#environment-caching) can build. When setup takes longer than that, the environment isn't cached. Run independent installs in parallel with `&` and `wait`, and move any single download that won't fit into a [SessionStart hook](#setup-scripts-vs-sessionstart-hooks) that launches it in the background. If new sessions stall or fail during setup, see [New sessions hang or time out during setup](https://code.claude.com/docs/en/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).
446446* **Network access for installs**: package installs need to reach registries. The default **Trusted** level covers [common package registries](#default-allowed-domains) including npm, PyPI, RubyGems, and crates.io; with **None** network access, installs fail.
447447
448448### Environment caching
from line 451
451451
452452The cache is a filesystem snapshot, so it keeps what the setup script writes to disk and loses anything that was only running. Packages you install, Docker images you pull, and files you write all carry over. A database the script started, a `docker compose up` stack, or any other background process doesn't; start those per session by asking Claude or with a [SessionStart hook](#setup-scripts-vs-sessionstart-hooks).
453453
454The setup script runs again to rebuild the cache when you change the environment's setup script or allowed network hosts, and when the cache reaches its expiry after roughly seven days. In an Anthropic-hosted environment, the setup script doesn't run when a session's VM is [restored after being idle](#set-environment-variables), so a change to the script reaches an existing session only when its VM was [reclaimed](/docs/en/claude-code-on-the-web.md#environment-expired) and is rebuilt. To apply a change right away, run the commands in the session or start a new session.
454The setup script runs again to rebuild the cache when you change the environment's setup script or allowed network hosts, and when the cache reaches its expiry after roughly seven days. In an Anthropic-hosted environment, the setup script doesn't run when a session's VM is [restored after being idle](#set-environment-variables), so a change to the script reaches an existing session only when its VM was [reclaimed](https://code.claude.com/docs/en/claude-code-on-the-web.md#environment-expired) and is rebuilt. To apply a change right away, run the commands in the session or start a new session.
455455
456456You don't need to enable caching or manage snapshots yourself.
457457
458458### Setup scripts vs. SessionStart hooks
459459
460Use a setup script to provision the VM itself: toolchains and CLI tools that aren't [pre-installed](#installed-tools). Use a [SessionStart hook](/docs/en/hooks.md#sessionstart) for project setup that should run everywhere, cloud and local, like `npm install`.
460Use a setup script to provision the VM itself: toolchains and CLI tools that aren't [pre-installed](#installed-tools). Use a [SessionStart hook](https://code.claude.com/docs/en/hooks.md#sessionstart) for project setup that should run everywhere, cloud and local, like `npm install`.
461461
462462Setup scripts and SessionStart hooks run in a fixed order when a cloud session starts. The table compares where you configure them, when they run, and where they run.
463463
464464| | Setup scripts | SessionStart hooks |
465465| - | - | - |
466| **Where you configure them** | The environment dialog at [claude.ai/code](https://claude.ai/code), plus the **Cloud environments** admin page for [shared environments](#organization-shared-environments) | A [settings file](/docs/en/settings.md#where-settings-live) such as your repo's `.claude/settings.json`; see [What carries over from your setup](#what-carries-over-from-your-setup) for which files reach a cloud session |
466| **Where you configure them** | The environment dialog at [claude.ai/code](https://claude.ai/code), plus the **Cloud environments** admin page for [shared environments](#organization-shared-environments) | A [settings file](https://code.claude.com/docs/en/settings.md#where-settings-live) such as your repo's `.claude/settings.json`; see [What carries over from your setup](#what-carries-over-from-your-setup) for which files reach a cloud session |
467467| **When they run** | Before Claude Code launches, skipped when a [cached environment](#environment-caching) exists | After Claude Code launches, on every session including resumed |
468468| **Where they run** | Cloud sessions only | Local and cloud sessions |
469469
470470If you have SessionStart hooks in your user-level `~/.claude/settings.json`, don't expect them in the cloud. User-level settings stay on your machine. Which other hooks run depends on where the session runs:
471471
472* **Anthropic-hosted environment**: Claude Code runs hooks from your organization's [server-managed settings](/docs/en/server-managed-settings.md) and, outside a [project](/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories) thread, from the repository. [Claude Tag](https://claude.com/docs/claude-tag/overview) sessions don't receive server-managed settings, so hooks from server-managed settings don't run there.
473* **[Self-hosted environment](/docs/en/self-hosted-environments-configuration.md#permissions-and-tool-approval)**: Claude Code also runs the hooks the operator seeded from the runner host's `~/.claude/`, and the hooks in the runner image's managed settings file when that file is one of the [managed sources Claude Code applies](/docs/en/managed-settings.md#how-claude-code-combines-managed-sources).
472* **Anthropic-hosted environment**: Claude Code runs hooks from your organization's [server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md) and, outside a [project](https://code.claude.com/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories) thread, from the repository. [Claude Tag](https://claude.com/docs/claude-tag/overview) sessions don't receive server-managed settings, so hooks from server-managed settings don't run there.
473* **[Self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#permissions-and-tool-approval)**: Claude Code also runs the hooks the operator seeded from the runner host's `~/.claude/`, and the hooks in the runner image's managed settings file when that file is one of the [managed sources Claude Code applies](https://code.claude.com/docs/en/managed-settings.md#how-claude-code-combines-managed-sources).
474474
475475### Install dependencies with a SessionStart hook
476476
477To install dependencies only in cloud sessions outside a [project](/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories)'s threads, pair a SessionStart hook with a script that checks where it's running.
477To install dependencies only in cloud sessions outside a [project](https://code.claude.com/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories)'s threads, pair a SessionStart hook with a script that checks where it's running.
478478
479479First, add a SessionStart hook to your repo's `.claude/settings.json`. This configuration tells Claude Code to run `scripts/install_pkgs.sh` from your repository whenever a session starts or resumes:
480480
from line 535
535535
536536SessionStart hooks behave the same in the cloud as locally, with these caveats:
537537
538* **One repository per session**: in an Anthropic-hosted environment, a session with several repositories doesn't load hooks from any repository's `.claude/settings.json`, so a SessionStart hook you define there doesn't run. Install dependencies for those sessions with a [setup script](#setup-scripts) instead. For a self-hosted environment, see [which repository's settings apply](/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories).
539* **Not in a project's cloud threads**: a cloud thread in a [project](/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories) doesn't run hooks from a repository's `.claude/settings.json`, whatever the number of repositories. In an Anthropic-hosted environment, install dependencies for threads with a [setup script](#setup-scripts). In a self-hosted environment, use a hook in the [runner host's settings](/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories) instead.
538* **One repository per session**: in an Anthropic-hosted environment, a session with several repositories doesn't load hooks from any repository's `.claude/settings.json`, so a SessionStart hook you define there doesn't run. Install dependencies for those sessions with a [setup script](#setup-scripts) instead. For a self-hosted environment, see [which repository's settings apply](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories).
539* **Not in a project's cloud threads**: a cloud thread in a [project](https://code.claude.com/docs/en/claude-projects.md#what-threads-pick-up-from-your-repositories) doesn't run hooks from a repository's `.claude/settings.json`, whatever the number of repositories. In an Anthropic-hosted environment, install dependencies for threads with a [setup script](#setup-scripts). In a self-hosted environment, use a hook in the [runner host's settings](https://code.claude.com/docs/en/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories) instead.
540540* **No cloud-only scoping**: hooks run in both local and cloud sessions. To skip local execution, exit early unless the `CLAUDE_CODE_REMOTE` environment variable is `true`, the way the [dependency install script](#install-dependencies-with-a-sessionstart-hook) does.
541541* **Requires network access**: install commands need to reach package registries. If your environment uses **None** network access, these hooks fail. The [default allowlist](#default-allowed-domains) under **Trusted** covers npm, PyPI, RubyGems, and crates.io.
542* **Proxy compatibility**: in Anthropic-hosted environments, all outbound traffic passes through a [security proxy](#security-proxy), and some package managers don't work correctly with it; Bun is a known example. In a [self-hosted environment](/docs/en/self-hosted-environments-deploy.md#default-deny-egress), outbound traffic goes through your own network boundary instead.
542* **Proxy compatibility**: in Anthropic-hosted environments, all outbound traffic passes through a [security proxy](#security-proxy), and some package managers don't work correctly with it; Bun is a known example. In a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments-deploy.md#default-deny-egress), outbound traffic goes through your own network boundary instead.
543543* **Adds startup latency**: hooks run each time a session starts or resumes, unlike setup scripts which benefit from [environment caching](#environment-caching). Keep install scripts fast by skipping work that's already done, the way the [dependency install script](#install-dependencies-with-a-sessionstart-hook) does.
544544
545545To customize the base image, use a setup script to install what you need on top of the [provided image](#installed-tools), or run your own image as a container alongside Claude with `docker compose`. Replacing the base image entirely isn't supported yet.
from line 805
805805
806806## Related resources
807807
808* [Cloud sessions reference](/docs/en/claude-code-on-the-web.md): start, manage, and share cloud sessions
809* [Cloud sessions quickstart](/docs/en/web-quickstart.md): connect GitHub and start your first cloud session
808* [Cloud sessions reference](https://code.claude.com/docs/en/claude-code-on-the-web.md): start, manage, and share cloud sessions
809* [Cloud sessions quickstart](https://code.claude.com/docs/en/web-quickstart.md): connect GitHub and start your first cloud session
810810* [Claude Tag](https://claude.com/docs/claude-tag/overview): sessions Claude starts from Slack run in the same environments
811* [Cloud scheduled tasks](/docs/en/routines.md): scheduled runs use the same environments and network access levels
812* [Remote Control](/docs/en/remote-control.md): run sessions on your own machine's network and files instead
813* [Self-hosted environments](/docs/en/self-hosted-environments): run cloud sessions on your organization's own infrastructure
814* [SessionStart hooks](/docs/en/hooks.md#sessionstart): repo-committed setup that runs in local and cloud sessions
815* [Server-managed settings](/docs/en/server-managed-settings.md): organization policy delivered from the admin console
811* [Cloud scheduled tasks](https://code.claude.com/docs/en/routines.md): scheduled runs use the same environments and network access levels
812* [Remote Control](https://code.claude.com/docs/en/remote-control.md): run sessions on your own machine's network and files instead
813* [Self-hosted environments](https://code.claude.com/docs/en/self-hosted-environments): run cloud sessions on your organization's own infrastructure
814* [SessionStart hooks](https://code.claude.com/docs/en/hooks.md#sessionstart): repo-committed setup that runs in local and cloud sessions
815* [Server-managed settings](https://code.claude.com/docs/en/server-managed-settings.md): organization policy delivered from the admin console
816816
code-review-costs Changed · +10 / -10 lines
from line 2
22
33> Estimate and cap what your organization spends on Claude Code Review: how reviews are billed through usage credits, what drives cost, and where to track usage.
44
5[Code Review](/docs/en/code-review.md) has no flat per-review price. What you spend depends on the cost of each review and on how many reviews run:
5[Code Review](https://code.claude.com/docs/en/code-review.md) has no flat per-review price. What you spend depends on the cost of each review and on how many reviews run:
66
7* **Cost of each review**: scales with the [review level](/docs/en/code-review-setup.md#set-the-default-review-level), the size of the change, the complexity of the surrounding code, and how many candidate issues need verification
7* **Cost of each review**: scales with the [review level](https://code.claude.com/docs/en/code-review-setup.md#set-the-default-review-level), the size of the change, the complexity of the surrounding code, and how many candidate issues need verification
88* **Number of reviews**: set by [how often reviews run](#how-often-reviews-run) in each repository
99
1010## Pricing
from line 13
1313
1414### How often reviews run
1515
16A repository you add from the admin page starts at **After every push**, which runs the most reviews. Each repository's [**Review runs** setting](/docs/en/code-review-setup.md#set-when-reviews-run) decides how many reviews a pull request gets:
16A repository you add from the admin page starts at **After every push**, which runs the most reviews. Each repository's [**Review runs** setting](https://code.claude.com/docs/en/code-review-setup.md#set-when-reviews-run) decides how many reviews a pull request gets:
1717
1818* **Once after PR creation**: a review runs when the pull request is opened, reopened, or marked ready for review
1919* **After every push**: runs on each push, multiplying cost by the number of pushes
from line 21
2121
2222Comment commands, drafts, and pull requests from forks adjust those counts:
2323
24* **`@claude review always` in Once after PR creation or Manual mode**: [opts the PR into push-triggered reviews](/docs/en/code-review-pull-requests.md#comment-commands), so additional cost accrues per push after that comment
24* **`@claude review always` in Once after PR creation or Manual mode**: [opts the PR into push-triggered reviews](https://code.claude.com/docs/en/code-review-pull-requests.md#comment-commands), so additional cost accrues per push after that comment
2525* **`@claude review always` in After every push mode**: pushes already trigger reviews, so the subscription doesn't change per-push cost
2626* **`@claude review`**: runs a single review without subscribing to future pushes
27* **Drafts and pull requests from forks**: [automatic reviews skip both](/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), so pushes to them don't add reviews
27* **Drafts and pull requests from forks**: [automatic reviews skip both](https://code.claude.com/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), so pushes to them don't add reviews
2828
2929## Estimate your spend
3030
from line 47
4747* **Organization spend limit**: your organization's overall monthly spend limit for usage credits. Raise it on the same page.
4848* **Usage credits balance**: your organization's balance of usage credits. Add credits on the same page.
4949
50Code Review also skips reviews once what's left is less than the expected cost of one review. When a review is skipped, developers see a [comment on the PR](/docs/en/code-review-troubleshooting.md#review-didn’t-run-and-the-pr-shows-a-budget-message) that names the cause and links to the usage settings.
50Code Review also skips reviews once what's left is less than the expected cost of one review. When a review is skipped, developers see a [comment on the PR](https://code.claude.com/docs/en/code-review-troubleshooting.md#review-didn’t-run-and-the-pr-shows-a-budget-message) that names the cause and links to the usage settings.
5151
5252To monitor spend, use the [analytics dashboard](#view-usage).
5353
from line 66
6666
6767## Related resources
6868
69* [Set up Code Review](/docs/en/code-review-setup.md): where to choose the review level and when reviews run in each repository
70* [Read and request reviews on a pull request](/docs/en/code-review-pull-requests.md): the comment commands, pull requests from forks, and the budget message developers see when a review is skipped
71* [Code Review](/docs/en/code-review.md): what a review checks and what it posts
72* [Manage costs effectively](/docs/en/costs.md): spend controls and usage tracking for the rest of Claude Code
69* [Set up Code Review](https://code.claude.com/docs/en/code-review-setup.md): where to choose the review level and when reviews run in each repository
70* [Read and request reviews on a pull request](https://code.claude.com/docs/en/code-review-pull-requests.md): the comment commands, pull requests from forks, and the budget message developers see when a review is skipped
71* [Code Review](https://code.claude.com/docs/en/code-review.md): what a review checks and what it posts
72* [Manage costs effectively](https://code.claude.com/docs/en/costs.md): spend controls and usage tracking for the rest of Claude Code
7373
code-review-customize Changed · +12 / -12 lines
from line 2
22
33> Tune what Code Review flags on your pull requests with REVIEW.md and CLAUDE.md: recalibrate severity, skip paths, add checks, and see which copy applies.
44
5You can change what [Code Review](/docs/en/code-review.md) flags on your repository by committing instructions to it. This is how you cut nit volume, stop comments on generated files, or add a rule your team cares about. Put them in one of two files:
5You can change what [Code Review](https://code.claude.com/docs/en/code-review.md) flags on your repository by committing instructions to it. This is how you cut nit volume, stop comments on generated files, or add a rule your team cares about. Put them in one of two files:
66
7* **`CLAUDE.md`**: [project instructions](/docs/en/memory.md) that Claude Code reads for every task, reviews included. Code Review reads them as project context and flags changes that violate them.
7* **`CLAUDE.md`**: [project instructions](https://code.claude.com/docs/en/memory.md) that Claude Code reads for every task, reviews included. Code Review reads them as project context and flags changes that violate them.
88* **`REVIEW.md`**: instructions for reviews alone. Use it to say what your team wants flagged, at what severity, and what to skip.
99
1010Add `REVIEW.md` at your repository root and merge it. Then [protect your default branch](#which-branch-review-md-is-read-from).
from line 11
1111
1212> [!NOTE]
1313>
14> To change how thorough reviews are or when they run, ask an Owner to change the [review level](/docs/en/code-review-setup.md#set-the-default-review-level) or the [**Review runs** setting](/docs/en/code-review-setup.md#set-when-reviews-run).
14> To change how thorough reviews are or when they run, ask an Owner to change the [review level](https://code.claude.com/docs/en/code-review-setup.md#set-the-default-review-level) or the [**Review runs** setting](https://code.claude.com/docs/en/code-review-setup.md#set-when-reviews-run).
1515
1616## Use CLAUDE.md for project-wide rules
1717
18Code Review reads your repository's `CLAUDE.md` files as project context. A change that violates one of their rules becomes a finding at whichever [severity level](/docs/en/code-review-pull-requests.md#severity-levels) fits the issue.
18Code Review reads your repository's `CLAUDE.md` files as project context. A change that violates one of their rules becomes a finding at whichever [severity level](https://code.claude.com/docs/en/code-review-pull-requests.md#severity-levels) fits the issue.
1919
2020A review reads the `CLAUDE.md` at your repository root and the `CLAUDE.md` files in the parent directories of each changed file. A subdirectory's `CLAUDE.md` is read when the pull request changes a file under that path.
2121
from line 40
4040
4141> [!NOTE]
4242>
43> The Code Review service and the local [`/code-review` command](/docs/en/code-review-local) are two separate tools, and they read different files. The service reads both `CLAUDE.md` and `REVIEW.md`. The `/code-review` command, which you run inside a Claude Code session on your own machine, reads your `CLAUDE.md` files and not `REVIEW.md`. Put guidance you want applied in both places in `CLAUDE.md`, and keep `REVIEW.md` for rules specific to pull request review.
43> The Code Review service and the local [`/code-review` command](https://code.claude.com/docs/en/code-review-local) are two separate tools, and they read different files. The service reads both `CLAUDE.md` and `REVIEW.md`. The `/code-review` command, which you run inside a Claude Code session on your own machine, reads your `CLAUDE.md` files and not `REVIEW.md`. Put guidance you want applied in both places in `CLAUDE.md`, and keep `REVIEW.md` for rules specific to pull request review.
4444
4545### Example REVIEW\.md
4646
from line 123
123123* **Name**: match the file name exactly, including case, and use a name without spaces. A line whose name matches no file beside `REVIEW.md` stays in `REVIEW.md` as plain text, and the check run doesn't report it as a skipped include.
124124* **One level**: list every file in the root `REVIEW.md`. An `@` line in an included file or in a subdirectory `REVIEW.md` stays as plain text, and a Markdown link to another file isn't an include.
125125* **Limits**: include at most eight different files, and keep `REVIEW.md` and the files it includes under 150,000 bytes combined. A file that would reach the byte limit is skipped whole, not cut short. The check run reports how many include lines it skipped for either limit.
126* **Links**: keep Markdown links at 64 or fewer across `REVIEW.md` and the files it includes. Links to `http`, `https`, or `mailto` addresses and to `#` anchors don't count. Past that limit, the review skips your whole root `REVIEW.md`, not only the included files. The check run then [says the instructions weren't applied](/docs/en/code-review-troubleshooting.md#the-check-run-mentions-review-md).
126* **Links**: keep Markdown links at 64 or fewer across `REVIEW.md` and the files it includes. Links to `http`, `https`, or `mailto` addresses and to `#` anchors don't count. Past that limit, the review skips your whole root `REVIEW.md`, not only the included files. The check run then [says the instructions weren't applied](https://code.claude.com/docs/en/code-review-troubleshooting.md#the-check-run-mentions-review-md).
127127* **Merged copy**: merge the included file into the [branch `REVIEW.md` is read from](#which-branch-review-md-is-read-from). The review reads both from the same commit, never from the pull request's own changes.
128128
129129### Which branch REVIEW\.md is read from
from line 156
156156| The default branch isn't protected, and the base branch has no protection rule of either kind | Default branch | Root file |
157157| Code Review can't confirm the protection settings. This includes an unprotected default branch with a base branch that has only a classic rule | None | None |
158158
159If the check run mentions `REVIEW.md`, see [The check run mentions REVIEW.md](/docs/en/code-review-troubleshooting.md#the-check-run-mentions-review-md).
159If the check run mentions `REVIEW.md`, see [The check run mentions REVIEW.md](https://code.claude.com/docs/en/code-review-troubleshooting.md#the-check-run-mentions-review-md).
160160
161161## Related resources
162162
163* [Code Review](/docs/en/code-review.md): what the service is and how a review runs
164* [Read and request reviews on a pull request](/docs/en/code-review-pull-requests.md#severity-levels): what each severity level means and how findings appear
165* [Set up Code Review](/docs/en/code-review-setup.md): the review level and when reviews run, which an Owner sets
166* [Review locally with `/code-review`](/docs/en/code-review-local): the `/code-review` command, its arguments, and effort levels
167* [Memory](/docs/en/memory.md): how `CLAUDE.md` files work across Claude Code
163* [Code Review](https://code.claude.com/docs/en/code-review.md): what the service is and how a review runs
164* [Read and request reviews on a pull request](https://code.claude.com/docs/en/code-review-pull-requests.md#severity-levels): what each severity level means and how findings appear
165* [Set up Code Review](https://code.claude.com/docs/en/code-review-setup.md): the review level and when reviews run, which an Owner sets
166* [Review locally with `/code-review`](https://code.claude.com/docs/en/code-review-local): the `/code-review` command, its arguments, and effort levels
167* [Memory](https://code.claude.com/docs/en/memory.md): how `CLAUDE.md` files work across Claude Code
168168
code-review-local Changed · +29 / -29 lines
from line 8
88
99> [!NOTE]
1010>
11> To have every pull request in a repository reviewed automatically on GitHub, see [Code Review](/docs/en/code-review.md), a managed service that an Owner turns on for your organization.
11> To have every pull request in a repository reviewed automatically on GitHub, see [Code Review](https://code.claude.com/docs/en/code-review.md), a managed service that an Owner turns on for your organization.
1212
1313`/review` is an alias of `/code-review`. Before v2.1.223, `/review` was a separate command that ran a single-pass, read-only review of a GitHub pull request.
1414
from line 24
2424
2525You can also add flags:
2626
27* `--fix`: also asks Claude to apply the findings to your working tree after the review. Its edits go through your [permission mode](/docs/en/permission-modes.md).
27* `--fix`: also asks Claude to apply the findings to your working tree after the review. Its edits go through your [permission mode](https://code.claude.com/docs/en/permission-modes.md).
2828* `--comment`: posts the findings on a GitHub pull request as inline comments, or on a [GitLab merge request](#post-findings-to-a-gitlab-merge-request) as a single note
2929
3030**2. Keep working**
3131
32The review runs as a background [subagent](/docs/en/sub-agents.md) with its own context window, so it doesn't fill your conversation. The findings arrive in your conversation when the review completes.
32The review runs as a background [subagent](https://code.claude.com/docs/en/sub-agents.md) with its own context window, so it doesn't fill your conversation. The findings arrive in your conversation when the review completes.
3333
3434**3. Act on the findings**
3535
from line 57
5757Check these before you run a review, especially with `--fix`:
5858
5959* **Edits**: without `--fix`, the review's instructions ask Claude for a report only. With `--fix`, they also ask it to apply the findings to your working tree. Either way, any edit goes through your permission mode.
60* **Rewinding**: a background review applies its `--fix` edits outside your session's [checkpoints](/docs/en/checkpointing.md#subagent-edits-not-restored). After one, `/rewind` restores only the files Claude had already edited in your conversation. The review's edits to other files stay, so use git to revert them. When the review [runs in the foreground](#run-in-the-foreground), it edits your working tree during your own turn, so `/rewind` restores its edits as usual.
61* **Instructions**: the review follows your `CLAUDE.md`, including in a non-interactive `-p` run. It doesn't read `REVIEW.md`. That file configures the managed [Code Review service](/docs/en/code-review-customize.md#use-review-md-for-review-only-rules) on GitHub pull requests.
60* **Rewinding**: a background review applies its `--fix` edits outside your session's [checkpoints](https://code.claude.com/docs/en/checkpointing.md#subagent-edits-not-restored). After one, `/rewind` restores only the files Claude had already edited in your conversation. The review's edits to other files stay, so use git to revert them. When the review [runs in the foreground](#run-in-the-foreground), it edits your working tree during your own turn, so `/rewind` restores its edits as usual.
61* **Instructions**: the review follows your `CLAUDE.md`, including in a non-interactive `-p` run. It doesn't read `REVIEW.md`. That file configures the managed [Code Review service](https://code.claude.com/docs/en/code-review-customize.md#use-review-md-for-review-only-rules) on GitHub pull requests.
6262
6363## How findings are reported
6464
6565Claude reports the findings as text in the reply in both of these runs:
6666
67* In a terminal session, where `/code-review` runs the review as a [forked subagent](/docs/en/skills.md#run-skills-in-a-subagent)
67* In a terminal session, where `/code-review` runs the review as a [forked subagent](https://code.claude.com/docs/en/skills.md#run-skills-in-a-subagent)
6868* In a `-p` run with text or JSON output
6969
70In a host application that requests the findings list, such as the [desktop app](/docs/en/desktop.md#review-your-code), Claude reports the review's findings through the [`ReportFindings` tool](/docs/en/tools-reference) instead. The report appears as a findings list, and each entry shows the file location, a one-sentence summary, and a category tag such as `correctness` when the finding carries one. A host request applies at every effort level and requires Claude Code v2.1.218 or later.
70In a host application that requests the findings list, such as the [desktop app](https://code.claude.com/docs/en/desktop.md#review-your-code), Claude reports the review's findings through the [`ReportFindings` tool](https://code.claude.com/docs/en/tools-reference) instead. The report appears as a findings list, and each entry shows the file location, a one-sentence summary, and a category tag such as `correctness` when the finding carries one. A host request applies at every effort level and requires Claude Code v2.1.218 or later.
7171
7272When Claude fixes reported findings later in the session, it reports them again. Claude Code then marks each finding in the updated findings list as fixed, skipped, or no change needed.
7373
from line 75
7575
7676Beyond `--fix` and `--comment`, the command takes these flags:
7777
78* `--post`: on an `ultra` cloud review of a `github.com` pull request, preselects posting the finished findings to the PR in the launch dialog. See [Post findings to the pull request](/docs/en/ultrareview.md#post-findings-to-the-pull-request). Requires Claude Code v2.1.227 or later.
78* `--post`: on an `ultra` cloud review of a `github.com` pull request, preselects posting the finished findings to the PR in the launch dialog. See [Post findings to the pull request](https://code.claude.com/docs/en/ultrareview.md#post-findings-to-the-pull-request). Requires Claude Code v2.1.227 or later.
7979* `--max-findings <n>`, `--max-findings all`, or `--max-findings default`: reports up to `n` findings, or every finding with `all`, in place of the review's usual limit. Where the review reports through the findings tool, the limit is 32. Later reviews reuse the value you typed until you pass `--max-findings default`, but a value passed in a non-interactive `-p` run isn't remembered. Requires Claude Code v2.1.288 or later.
8080
81Pass an [effort level](/docs/en/model-config.md#adjust-effort-level) to trade coverage for confidence. At `low`, the review reports the findings it's most confident in, so you see fewer false positives. From `medium` through `max`, the review broadens coverage.
81Pass an [effort level](https://code.claude.com/docs/en/model-config.md#adjust-effort-level) to trade coverage for confidence. At `low`, the review reports the findings it's most confident in, so you see fewer false positives. From `medium` through `max`, the review broadens coverage.
8282
8383When you don't type a level, the review reuses the last level from `low` through `max` you typed, even in an earlier session. Claude Code shows a notice such as `Reusing high effort, the level you typed last time`. These rules decide which level a run uses:
8484
from line 99
9999
100100After the effort level and flags, Claude Code reads the rest of the line as the review target. The `ultra` argument changes that reading:
101101
102* **With `ultra`**: Claude Code reads a single word as a base branch or PR number. Longer text that doesn't name a branch or PR becomes [a note attached to the review](/docs/en/ultrareview.md#pass-a-request-in-plain-words). `/code-review ultra check my auth changes` reviews your current branch, and Claude relates the findings to your note.
103* **Without `ultra`**: everything left is the review target, even when it starts with another command name. `/code-review /fix-issue 123` reviews with `/fix-issue 123` as target text instead of loading `/fix-issue` as a second [stacked skill](/docs/en/skills.md#stack-several-skills-in-one-message). Before v2.1.218, a command stacked after `/code-review` expanded as its own skill.
102* **With `ultra`**: Claude Code reads a single word as a base branch or PR number. Longer text that doesn't name a branch or PR becomes [a note attached to the review](https://code.claude.com/docs/en/ultrareview.md#pass-a-request-in-plain-words). `/code-review ultra check my auth changes` reviews your current branch, and Claude relates the findings to your note.
103* **Without `ultra`**: everything left is the review target, even when it starts with another command name. `/code-review /fix-issue 123` reviews with `/fix-issue 123` as target text instead of loading `/fix-issue` as a second [stacked skill](https://code.claude.com/docs/en/skills.md#stack-several-skills-in-one-message). Before v2.1.218, a command stacked after `/code-review` expanded as its own skill.
104104
105105## Run in the foreground
106106
107107To make the review run in the foreground, do one of these:
108108
109* Run it in non-interactive mode, with the `-p` flag or the Agent SDK. Claude Code waits for the review and includes the findings in the response, except for `ultra`, which [doesn't wait for the cloud review](/docs/en/ultrareview.md#run-ultrareview-non-interactively).
110* Set [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/en/env-vars) to `1`, which also turns off other background task features
109* Run it in non-interactive mode, with the `-p` flag or the Agent SDK. Claude Code waits for the review and includes the findings in the response, except for `ultra`, which [doesn't wait for the cloud review](https://code.claude.com/docs/en/ultrareview.md#run-ultrareview-non-interactively).
110* Set [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/en/env-vars) to `1`, which also turns off other background task features
111111* Run `/code-review` again while an earlier review is still in progress
112112
113113Before v2.1.218, the review ran inside your conversation.
from line 117
117117Claude can start `/code-review` on its own, without you typing the command:
118118
119119* **When you ask in plain language**: ask Claude to review your changes and it can run the skill
120* **From a scheduled task**: a [session-scoped scheduled task](/docs/en/scheduled-tasks.md) with `/code-review` as its prompt runs the review
120* **From a scheduled task**: a [session-scoped scheduled task](https://code.claude.com/docs/en/scheduled-tasks.md) with `/code-review` as its prompt runs the review
121121
122122A session-scoped scheduled task never launches the [cloud review](#escalate-to-ultrareview), so schedule `/code-review` without the `ultra` argument.
123123
124To stop both Claude and scheduled tasks from starting the review while keeping `/code-review` available for you to type, add a [`skillOverrides`](/docs/en/skills#override-skill-visibility-from-settings) entry to a [settings file](/docs/en/settings.md#where-settings-live) such as `~/.claude/settings.json`:
124To stop both Claude and scheduled tasks from starting the review while keeping `/code-review` available for you to type, add a [`skillOverrides`](https://code.claude.com/docs/en/skills#override-skill-visibility-from-settings) entry to a [settings file](https://code.claude.com/docs/en/settings.md#where-settings-live) such as `~/.claude/settings.json`:
125125
126126```json theme={null}
127127{
from line 131
131131}
132132```
133133
134Before v2.1.246, Claude started `/code-review` on its own only where a feature flag fetched from Anthropic turned it on. In [sessions that don't fetch feature flags](/docs/en/env-vars.md#features-that-need-feature-flag-fetching), `/code-review` ran only when you typed it, and a scheduled `/code-review` reached Claude as plain text.
134Before v2.1.246, Claude started `/code-review` on its own only where a feature flag fetched from Anthropic turned it on. In [sessions that don't fetch feature flags](https://code.claude.com/docs/en/env-vars.md#features-that-need-feature-flag-fetching), `/code-review` ran only when you typed it, and a scheduled `/code-review` reached Claude as plain text.
135135
136136## Escalate to ultrareview
137137
138`/code-review ultra --fix` runs the deeper [ultrareview](/docs/en/ultrareview.md) in the cloud, then asks Claude to apply its findings to your working tree when they arrive back in your session.
138`/code-review ultra --fix` runs the deeper [ultrareview](https://code.claude.com/docs/en/ultrareview.md) in the cloud, then asks Claude to apply its findings to your working tree when they arrive back in your session.
139139
140140Ultrareview uses its own scope:
141141
142142* **What it compares**: your current branch against the repository's default branch, plus uncommitted and staged changes in the working tree
143* **Sensitive files**: for uncommitted changes to files named like credentials or keys, such as `.env` and `*.tfvars` files, Claude Code follows the rules for [uploading a local repository to a cloud session](/docs/en/claude-code-on-the-web.md#send-local-repositories-without-github)
143* **Sensitive files**: for uncommitted changes to files named like credentials or keys, such as `.env` and `*.tfvars` files, Claude Code follows the rules for [uploading a local repository to a cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md#send-local-repositories-without-github)
144144* **A different base**: pass a branch name, such as `/code-review ultra develop`, to compare against a different base
145145
146When the target is a `github.com` pull request, you can have Claude [post the finished findings to the PR](/docs/en/ultrareview.md#post-findings-to-the-pull-request) as a comment from your GitHub account. Requires Claude Code v2.1.227 or later.
146When the target is a `github.com` pull request, you can have Claude [post the finished findings to the PR](https://code.claude.com/docs/en/ultrareview.md#post-findings-to-the-pull-request) as a comment from your GitHub account. Requires Claude Code v2.1.227 or later.
147147
148148> [!NOTE]
149149>
150> Ultrareview requires authentication with a claude.ai account. It isn't available on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry, or to organizations with Zero Data Retention enabled or with the [HIPAA configuration](/docs/en/hipaa-setup.md) applied. In these cases, `/code-review ultra` runs a local review in your session instead. Organizations that use [customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/cmek) (CMEK) can't run ultrareview. To review your changes locally, run `/code-review`.
150> Ultrareview requires authentication with a claude.ai account. It isn't available on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry, or to organizations with Zero Data Retention enabled or with the [HIPAA configuration](https://code.claude.com/docs/en/hipaa-setup.md) applied. In these cases, `/code-review ultra` runs a local review in your session instead. Organizations that use [customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/cmek) (CMEK) can't run ultrareview. To review your changes locally, run `/code-review`.
151151
152To run a cloud review from a script or CI job, use the [`claude ultrareview` subcommand](/docs/en/ultrareview#run-ultrareview-non-interactively), which waits for the findings and prints them to stdout.
152To run a cloud review from a script or CI job, use the [`claude ultrareview` subcommand](https://code.claude.com/docs/en/ultrareview#run-ultrareview-non-interactively), which waits for the findings and prints them to stdout.
153153
154154## Change or build on the review
155155
156`/code-review` is a [bundled skill](/docs/en/skills.md#bundled-skills): its instructions are built into Claude Code, so there is no `SKILL.md` file on disk to open or edit. To give every review project rules to follow, add them to your `CLAUDE.md`. To go further, start from one of these pages:
156`/code-review` is a [bundled skill](https://code.claude.com/docs/en/skills.md#bundled-skills): its instructions are built into Claude Code, so there is no `SKILL.md` file on disk to open or edit. To give every review project rules to follow, add them to your `CLAUDE.md`. To go further, start from one of these pages:
157157
158* **Replace the command**: a project or personal skill named `code-review` runs in place of the bundled one, and the `/review` alias keeps running the bundled review. See [Resolve skills that share a name](/docs/en/skills.md#resolve-skills-that-share-a-name).
159* **Build your own reviewer**: write a reviewer [subagent](/docs/en/sub-agents.md) or a review [skill](/docs/en/skills.md)
160* **Use a neighboring command**: [`/simplify`](/docs/en/commands) reviews for cleanup only and applies its fixes, and [`/verify`](/docs/en/commands) runs your app to confirm a change works
158* **Replace the command**: a project or personal skill named `code-review` runs in place of the bundled one, and the `/review` alias keeps running the bundled review. See [Resolve skills that share a name](https://code.claude.com/docs/en/skills.md#resolve-skills-that-share-a-name).
159* **Build your own reviewer**: write a reviewer [subagent](https://code.claude.com/docs/en/sub-agents.md) or a review [skill](https://code.claude.com/docs/en/skills.md)
160* **Use a neighboring command**: [`/simplify`](https://code.claude.com/docs/en/commands) reviews for cleanup only and applies its fixes, and [`/verify`](https://code.claude.com/docs/en/commands) runs your app to confirm a change works
161161
162162The command was named `/simplify` before v2.1.147, when it applied fixes by default. If you scripted `/simplify` for bug-finding, switch to `/code-review --fix`.
163163
164164## Related resources
165165
166* [Code Review](/docs/en/code-review.md): the managed service that reviews every pull request on GitHub for your organization
167* [Ultrareview](/docs/en/ultrareview.md): setup, limits, and cost of the deeper cloud review
168* [Commands](/docs/en/commands.md): the one-line reference for `/code-review`, `/review`, `/simplify`, and `/verify`
169* [Skills](/docs/en/skills.md): how bundled skills work and how to write your own
166* [Code Review](https://code.claude.com/docs/en/code-review.md): the managed service that reviews every pull request on GitHub for your organization
167* [Ultrareview](https://code.claude.com/docs/en/ultrareview.md): setup, limits, and cost of the deeper cloud review
168* [Commands](https://code.claude.com/docs/en/commands.md): the one-line reference for `/code-review`, `/review`, `/simplify`, and `/verify`
169* [Skills](https://code.claude.com/docs/en/skills.md): how bundled skills work and how to write your own
170170
code-review-pull-requests Changed · +14 / -14 lines
from line 4
44
55Code Review is a managed service that an Owner in your Claude organization turns on for a set of GitHub repositories. Once it's on, Claude reviews pull requests in those repositories and posts its findings as inline comments, a summary in the review body, and a check run named **Claude Code Review**. A review never approves or blocks your pull request, and the check run never concludes as a failure.
66
7An Owner controls [when reviews run](/docs/en/code-review-setup.md#set-when-reviews-run) and [how thorough they are](/docs/en/code-review-setup.md#set-the-default-review-level) for each repository.
7An Owner controls [when reviews run](https://code.claude.com/docs/en/code-review-setup.md#set-when-reviews-run) and [how thorough they are](https://code.claude.com/docs/en/code-review-setup.md#set-the-default-review-level) for each repository.
88
99> [!NOTE]
1010>
11> If your plan doesn't include Code Review, you can still have Claude review your branch from a Claude Code session: see [Review locally with `/code-review`](/docs/en/code-review-local).
11> If your plan doesn't include Code Review, you can still have Claude review your branch from a Claude Code session: see [Review locally with `/code-review`](https://code.claude.com/docs/en/code-review-local).
1212
1313## Severity levels
1414
from line 22
2222
2323When the review recorded its reasoning, the finding has a collapsed **Why this was flagged** section. Expand it to read why Claude flagged the issue and how it verified the problem.
2424
25To change what Claude flags in your repository or how it ranks severity, see [Customize Code Review](/docs/en/code-review-customize.md).
25To change what Claude flags in your repository or how it ranks severity, see [Customize Code Review](https://code.claude.com/docs/en/code-review-customize.md).
2626
2727## Respond to findings
2828
from line 32
3232
3333* **Dismiss it without a code change**: resolve the thread yourself on GitHub. Replying alone doesn't dismiss a finding.
3434* **Fix the issue**: change the code and push. The next review of the pull request resolves its earlier thread when it judges the issue fixed, whether that review runs automatically on your push or you request it.
35* **Explain or disagree**: reply to the comment. Claude doesn't respond right away, and a reply doesn't start a review. The next review of the pull request reads the replies on its earlier findings, and can resolve the thread or post one follow-up reply. If the same kind of finding keeps coming back, ask a maintainer to add a rule to [`REVIEW.md`](/docs/en/code-review-customize#choose-what-to-write-in-review-md).
35* **Explain or disagree**: reply to the comment. Claude doesn't respond right away, and a reply doesn't start a review. The next review of the pull request reads the replies on its earlier findings, and can resolve the thread or post one follow-up reply. If the same kind of finding keeps coming back, ask a maintainer to add a rule to [`REVIEW.md`](https://code.claude.com/docs/en/code-review-customize#choose-what-to-write-in-review-md).
3636
3737To get that next review without pushing, comment `@claude review` as a [top-level pull request comment](#comment-commands).
3838
from line 47
4747
4848A finding that has a line but wasn't posted as an inline comment appears as an annotation in the **Files changed** tab, on the lines concerned. Important findings show in red, nits in yellow, and pre-existing bugs in gray.
4949
50The check run concludes as neutral, or as skipped after some pushes that change no files and [keep the earlier result](#when-a-push-keeps-the-earlier-result). It never concludes as a failure, so a finished review doesn't fail a required check. If you don't see findings, or a review didn't run, see [Troubleshoot Code Review](/docs/en/code-review-troubleshooting.md).
50The check run concludes as neutral, or as skipped after some pushes that change no files and [keep the earlier result](#when-a-push-keeps-the-earlier-result). It never concludes as a failure, so a finished review doesn't fail a required check. If you don't see findings, or a review didn't run, see [Troubleshoot Code Review](https://code.claude.com/docs/en/code-review-troubleshooting.md).
5151
5252### When a push keeps the earlier result
5353
from line 114
114114* **Open it or mark it ready**: in a repository set to **Once after PR creation** or **After every push**, a review starts when you open or reopen the pull request, or mark a draft ready for review.
115115* **Comment a command**: post [`@claude review`](#comment-commands) on the pull request.
116116* **Push a commit**: a push starts a review in a repository set to **After every push**, or on a pull request you subscribed with `@claude review always`. If your pull request still adds and removes the same lines after the push, Code Review can [keep the earlier result](#when-a-push-keeps-the-earlier-result) instead.
117* **Click Re-run**: after a review fails or times out on a pull request that isn't from a fork, [run it again](/docs/en/code-review-troubleshooting.md#retrigger-a-failed-or-timed-out-review) from the check run. On a pull request that isn't from a fork, you can also click **Re-run** after a push that [kept the earlier result](#when-a-push-keeps-the-earlier-result).
118* **Wait for the automatic retry**: a review whose session was interrupted is retried once automatically. The [check run's summary](/docs/en/code-review-troubleshooting.md#retrigger-a-failed-or-timed-out-review) says when that's happening.
117* **Click Re-run**: after a review fails or times out on a pull request that isn't from a fork, [run it again](https://code.claude.com/docs/en/code-review-troubleshooting.md#retrigger-a-failed-or-timed-out-review) from the check run. On a pull request that isn't from a fork, you can also click **Re-run** after a push that [kept the earlier result](#when-a-push-keeps-the-earlier-result).
118* **Wait for the automatic retry**: a review whose session was interrupted is retried once automatically. The [check run's summary](https://code.claude.com/docs/en/code-review-troubleshooting.md#retrigger-a-failed-or-timed-out-review) says when that's happening.
119119
120120### Comment commands
121121
from line 163
163163
164164### Use Code Review alongside the Claude Code GitHub Action
165165
166If the repository also runs the [Claude Code GitHub Action](/docs/en/github-actions.md) in interactive mode with its default `@claude` trigger phrase, an `@claude review` comment starts the Action as well. To keep the two apart, set the Action's `trigger_phrase` input to a different phrase.
166If the repository also runs the [Claude Code GitHub Action](https://code.claude.com/docs/en/github-actions.md) in interactive mode with its default `@claude` trigger phrase, an `@claude review` comment starts the Action as well. To keep the two apart, set the Action's `trigger_phrase` input to a different phrase.
167167
168168## Related resources
169169
170* [Troubleshoot Code Review](/docs/en/code-review-troubleshooting.md): a review that didn't start, failed, or was skipped for budget
171* [Code Review](/docs/en/code-review.md): what the service is and how a review runs
172* [Set up Code Review](/docs/en/code-review-setup.md): for Owners, turn on Code Review and choose when reviews run and at what level
173* [Customize Code Review](/docs/en/code-review-customize.md): change what Claude flags with `REVIEW.md` and `CLAUDE.md`
174* [Code Review costs and usage](/docs/en/code-review-costs.md): how reviews are billed and where the spend limit is set
175* [Review locally with `/code-review`](/docs/en/code-review-local): run a review of your branch from a Claude Code session
170* [Troubleshoot Code Review](https://code.claude.com/docs/en/code-review-troubleshooting.md): a review that didn't start, failed, or was skipped for budget
171* [Code Review](https://code.claude.com/docs/en/code-review.md): what the service is and how a review runs
172* [Set up Code Review](https://code.claude.com/docs/en/code-review-setup.md): for Owners, turn on Code Review and choose when reviews run and at what level
173* [Customize Code Review](https://code.claude.com/docs/en/code-review-customize.md): change what Claude flags with `REVIEW.md` and `CLAUDE.md`
174* [Code Review costs and usage](https://code.claude.com/docs/en/code-review-costs.md): how reviews are billed and where the spend limit is set
175* [Review locally with `/code-review`](https://code.claude.com/docs/en/code-review-local): run a review of your branch from a Claude Code session
176176
code-review-setup Changed · +21 / -21 lines
from line 4
44
55As an Owner of your Claude organization, you turn on Code Review in [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) on claude.ai. Reviews run on Anthropic infrastructure, so you don't add workflow files to your repositories.
66
7After setup, you choose how thorough reviews are and when they run in each repository. You spend more at a higher review level and when reviews run more often. See [Code Review costs](/docs/en/code-review-costs.md#pricing).
7After setup, you choose how thorough reviews are and when they run in each repository. You spend more at a higher review level and when reviews run more often. See [Code Review costs](https://code.claude.com/docs/en/code-review-costs.md#pricing).
88
99## What you need to turn on Code Review
1010
11First check that your organization [qualifies for Code Review](/docs/en/code-review.md#availability). Then make sure you have this access, or someone who does:
11First check that your organization [qualifies for Code Review](https://code.claude.com/docs/en/code-review.md#availability). Then make sure you have this access, or someone who does:
1212
1313| Access | Needed for |
1414| :- | :- |
15| [Owner role](/docs/en/server-managed-settings.md#access-control) in your Claude organization | Every step on the admin page |
16| Owner of the GitHub organization | Installing the Claude GitHub App and [linking it to your Claude organization](/docs/en/admin-setup.md#connected-github-accounts). If you aren't an owner, have one install and link the app before you start |
15| [Owner role](https://code.claude.com/docs/en/server-managed-settings.md#access-control) in your Claude organization | Every step on the admin page |
16| Owner of the GitHub organization | Installing the Claude GitHub App and [linking it to your Claude organization](https://code.claude.com/docs/en/admin-setup.md#connected-github-accounts). If you aren't an owner, have one install and link the app before you start |
1717| Write access to each repository you add, from the GitHub account you connect to Claude | Adding the repository |
1818
1919## Turn on Code Review
from line 37
3737* Click **Install GitHub App**. When no repositories are listed, it's a button in the dialog. Otherwise, it's at the bottom of the dialog's GitHub organization filter menu. GitHub's install page opens in a new tab.
3838* Pick the GitHub organization that owns the repositories.
3939* Choose which repositories the app can access.
40* Approve the requested permissions. The set is broader than a review uses and is shared by other Claude features, such as [GitHub Actions](/docs/en/github-actions.md). See [what a review can access](/docs/en/code-review.md#what-a-review-can-access) and the [full permission list](/docs/en/github-actions.md#github-app-permissions).
40* Approve the requested permissions. The set is broader than a review uses and is shared by other Claude features, such as [GitHub Actions](https://code.claude.com/docs/en/github-actions.md). See [what a review can access](https://code.claude.com/docs/en/code-review.md#what-a-review-can-access) and the [full permission list](https://code.claude.com/docs/en/github-actions.md#github-app-permissions).
4141* When the install completes, the tab returns to Claude. If it shows a **Finish connecting GitHub** button, click it to link the installation to your Claude organization.
4242* Go back to the admin page's tab, where the list in the dialog refreshes.
4343
from line 55
5555
5656Open a test pull request in one of the repositories you added, and don't mark it as a draft. A check run named **Claude Code Review** appears within a few minutes. If you already set the repository to **Manual (@claude review)**, comment `@claude review` on the pull request to start the first review.
5757
58If no check run appears, see [No check run appears on the test pull request](/docs/en/code-review-troubleshooting.md#no-check-run-appears-on-the-test-pull-request).
58If no check run appears, see [No check run appears on the test pull request](https://code.claude.com/docs/en/code-review-troubleshooting.md#no-check-run-appears-on-the-test-pull-request).
5959
60Once the review arrives, send your developers [Read and request reviews on a pull request](/docs/en/code-review-pull-requests.md), which covers the severity levels, the comment commands, and how to respond to findings.
60Once the review arrives, send your developers [Read and request reviews on a pull request](https://code.claude.com/docs/en/code-review-pull-requests.md), which covers the severity levels, the comment commands, and how to respond to findings.
6161
6262## Set defaults for your organization
6363
from line 76
7676* **Organization default**: select a level under **Review level** and confirm with **Change level**. Every repository uses it unless you give that repository its own.
7777* **One repository**: click **Edit** on the repository's row, then select a **Review level** there. The first option, **Default**, follows the organization. The level saves as soon as you select it.
7878
79A new level applies to reviews that start after the change. For what else drives the cost of each review, see [Code Review costs and usage](/docs/en/code-review-costs.md).
79A new level applies to reviews that start after the change. For what else drives the cost of each review, see [Code Review costs and usage](https://code.claude.com/docs/en/code-review-costs.md).
8080
8181### Set when reviews run
8282
from line 84
8484
8585* **Once after PR creation**: a review runs when a pull request is opened, reopened, or marked ready for review
8686* **After every push**: a review runs on pushes to the pull request branch, catching new issues as the pull request evolves and auto-resolving threads when you fix flagged issues
87* **Manual (@claude review)**: opening or pushing to a pull request doesn't start a review. Comment [`@claude review`](/docs/en/code-review-pull-requests#comment-commands) to request one, or `@claude review always` to also subscribe the pull request to reviews on subsequent pushes.
87* **Manual (@claude review)**: opening or pushing to a pull request doesn't start a review. Comment [`@claude review`](https://code.claude.com/docs/en/code-review-pull-requests#comment-commands) to request one, or `@claude review always` to also subscribe the pull request to reviews on subsequent pushes.
8888
89Manual is useful for high-traffic repositories where you want to opt specific pull requests into review, or to start reviewing pull requests only once they're ready. To compare what each option does to spend, see [How often reviews run](/docs/en/code-review-costs.md#how-often-reviews-run).
89Manual is useful for high-traffic repositories where you want to opt specific pull requests into review, or to start reviewing pull requests only once they're ready. To compare what each option does to spend, see [How often reviews run](https://code.claude.com/docs/en/code-review-costs.md#how-often-reviews-run).
9090
9191To change the setting, click **Edit** on the repository's row in the **Repositories** table and select a **Review runs** option. The choice saves as soon as you select it, and the table's **Review runs** column shows it shortened to Once per PR, Every push, or Manual.
9292
93* **Drafts and pull requests from forks**: whichever option you choose, [automatic reviews skip both](/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks)
93* **Drafts and pull requests from forks**: whichever option you choose, [automatic reviews skip both](https://code.claude.com/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks)
9494* **New repositories**: a repository you add from the **Add a repository** dialog starts at **After every push**. If its GitHub organization is [covered as a whole](#cover-a-whole-github-organization), it takes that organization row's setting instead.
9595
9696### Turn tip comments on or off
from line 108
108108
109109Developers come to you to change the review level, the **Review runs** setting, or which repositories get reviews. From GitHub, without the Owner role, they can do these:
110110
111* **Request a review**: comment [`@claude review`](/docs/en/code-review-pull-requests#comment-commands) on a pull request. This needs write access to the repository, and it works on [drafts and pull requests from forks](/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), which automatic reviews skip.
112* **Subscribe one pull request to a review on each push**: comment `@claude review always` on a pull request that isn't [a draft or from a fork](/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), such as in a repository set to Manual
113* **Change what reviews flag**: commit [`REVIEW.md` and `CLAUDE.md` files](/docs/en/code-review-customize) to the repository, for example to add a check
111* **Request a review**: comment [`@claude review`](https://code.claude.com/docs/en/code-review-pull-requests#comment-commands) on a pull request. This needs write access to the repository, and it works on [drafts and pull requests from forks](https://code.claude.com/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), which automatic reviews skip.
112* **Subscribe one pull request to a review on each push**: comment `@claude review always` on a pull request that isn't [a draft or from a fork](https://code.claude.com/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), such as in a repository set to Manual
113* **Change what reviews flag**: commit [`REVIEW.md` and `CLAUDE.md` files](https://code.claude.com/docs/en/code-review-customize) to the repository, for example to add a check
114114
115Reviews that developers request are [billed to your organization](/docs/en/code-review-costs.md#pricing). To limit what Code Review spends in a month, see [Limit your spend](/docs/en/code-review-costs.md#limit-your-spend).
115Reviews that developers request are [billed to your organization](https://code.claude.com/docs/en/code-review-costs.md#pricing). To limit what Code Review spends in a month, see [Limit your spend](https://code.claude.com/docs/en/code-review-costs.md#limit-your-spend).
116116
117117## Manage repositories
118118
from line 122
122122
123123To add repositories after setup, click **Add** above the **Repositories** table in the **Code review** section. The **Add a repository** dialog opens. Select repositories and click **Continue**.
124124
125* **A repository isn't listed**: see [A repository isn't listed in Add a repository](/docs/en/code-review-troubleshooting.md#a-repository-isn’t-listed-in-add-a-repository).
125* **A repository isn't listed**: see [A repository isn't listed in Add a repository](https://code.claude.com/docs/en/code-review-troubleshooting.md#a-repository-isn’t-listed-in-add-a-repository).
126126* **You want every repository in a GitHub organization**: [cover the organization](#cover-a-whole-github-organization) instead of selecting repositories one at a time
127127
128128### Cover a whole GitHub organization
from line 131
131131
132132* The GitHub account you connected to Claude is an owner of that GitHub organization.
133133* The organization is on github.com. GitHub Enterprise Server instances and personal GitHub accounts aren't eligible.
134* A [monthly spend limit](/docs/en/code-review-costs.md#limit-your-spend) is set, for your Claude organization or for Code Review.
134* A [monthly spend limit](https://code.claude.com/docs/en/code-review-costs.md#limit-your-spend) is set, for your Claude organization or for Code Review.
135135
136136To cover the organization, click **Edit** on its row, select a **Review runs** option, and confirm. The options are the three from [Set when reviews run](#set-when-reviews-run) plus **Off**.
137137
from line 153
153153
154154## Related resources
155155
156* [Code Review costs and usage](/docs/en/code-review-costs.md): how the review level and when reviews run affect spend, how to set a spend limit, and where to see usage
157* [Read and request reviews on a pull request](/docs/en/code-review-pull-requests.md): what developers see on a pull request and the comment commands
158* [Customize Code Review](/docs/en/code-review-customize.md): tune what Claude flags with `REVIEW.md` and `CLAUDE.md`
159* [GitHub Enterprise Server](/docs/en/github-enterprise-server.md): connect a self-hosted GitHub instance before setup
156* [Code Review costs and usage](https://code.claude.com/docs/en/code-review-costs.md): how the review level and when reviews run affect spend, how to set a spend limit, and where to see usage
157* [Read and request reviews on a pull request](https://code.claude.com/docs/en/code-review-pull-requests.md): what developers see on a pull request and the comment commands
158* [Customize Code Review](https://code.claude.com/docs/en/code-review-customize.md): tune what Claude flags with `REVIEW.md` and `CLAUDE.md`
159* [GitHub Enterprise Server](https://code.claude.com/docs/en/github-enterprise-server.md): connect a self-hosted GitHub instance before setup
160160
code-review-troubleshooting Changed · +16 / -16 lines
from line 2
22
33> Fix a Code Review that didn't start, failed, or was skipped for budget, find missing findings, and resolve setup and `REVIEW.md` problems.
44
5When [Code Review](/docs/en/code-review.md) doesn't do what you expect on a pull request, start with the **Claude Code Review** check run. Its title says how far the review got.
5When [Code Review](https://code.claude.com/docs/en/code-review.md) doesn't do what you expect on a pull request, start with the **Claude Code Review** check run. Its title says how far the review got.
66
77## Check how far the review got
88
from line 14
1414| **Code review found no issues** | The review finished and found nothing to flag | Nothing |
1515| A title that says issues were found | The review finished with findings | If you don't see them on the diff, see [Find issues that aren't showing as inline comments](#find-issues-that-aren’t-showing-as-inline-comments) |
1616| **Code review skipped — no new changes** | An automatic review didn't run on your latest push | To get a review anyway, comment `@claude review` |
17| **Code review not repeated — earlier findings still open** | An automatic review didn't run on your latest push, and Important findings from the earlier review are still open | Push a fix, or to get a review anyway, comment `@claude review`. See [When a push keeps the earlier result](/docs/en/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result) |
17| **Code review not repeated — earlier findings still open** | An automatic review didn't run on your latest push, and Important findings from the earlier review are still open | Push a fix, or to get a review anyway, comment `@claude review`. See [When a push keeps the earlier result](https://code.claude.com/docs/en/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result) |
1818| **Code review failed** or **Code review timed out** | The review didn't finish | To run it again, see [Retrigger a failed or timed-out review](#retrigger-a-failed-or-timed-out-review) |
1919| **Code review declined** | The review didn't run | Read the check run's summary. If it names a budget or a spend limit, see [Review didn't run and the PR shows a budget message](#review-didn’t-run-and-the-pr-shows-a-budget-message) |
2020| No check run | No review started | Comment `@claude review`. If no check run appears after that, see [A comment command didn't start a review](#a-comment-command-didn’t-start-a-review) |
from line 27
2727
2828After you comment `@claude review`, look for a **Claude Code Review** check run titled **Code review queued...** or **Code review in progress...** on the pull request. An 👀 reaction on your comment doesn't confirm a review is coming. If no check run appears, check for each of these causes:
2929
30* **Code Review isn't on for this repository**: Claude posts no comment and no check run in response to the command. Ask an Owner to [add the repository](/docs/en/code-review-setup.md#add-more-repositories).
31* **The comment doesn't meet a condition**: it was an inline comment or a review body rather than a new top-level comment, or the command wasn't at the start of the comment. Editing an earlier comment instead of posting a new one doesn't count either, and the pull request has to be open. See the [conditions for comment commands](/docs/en/code-review-pull-requests.md#comment-commands) and post a new comment that meets them.
32* **You don't have write access**: you need write, maintain, or admin permission on the repository. On a pull request from a fork, the permission that counts is on the base repository. Unless the pull request is yours, Claude can reply with a [tip](/docs/en/code-review-setup.md#turn-tip-comments-on-or-off): "No review was started: manual reviews can only be requested by someone with write access to this repository." Ask someone with write access to comment instead.
30* **Code Review isn't on for this repository**: Claude posts no comment and no check run in response to the command. Ask an Owner to [add the repository](https://code.claude.com/docs/en/code-review-setup.md#add-more-repositories).
31* **The comment doesn't meet a condition**: it was an inline comment or a review body rather than a new top-level comment, or the command wasn't at the start of the comment. Editing an earlier comment instead of posting a new one doesn't count either, and the pull request has to be open. See the [conditions for comment commands](https://code.claude.com/docs/en/code-review-pull-requests.md#comment-commands) and post a new comment that meets them.
32* **You don't have write access**: you need write, maintain, or admin permission on the repository. On a pull request from a fork, the permission that counts is on the base repository. Unless the pull request is yours, Claude can reply with a [tip](https://code.claude.com/docs/en/code-review-setup.md#turn-tip-comments-on-or-off): "No review was started: manual reviews can only be requested by someone with write access to this repository." Ask someone with write access to comment instead.
3333* **The budget ran out**: Claude posts a comment that begins with "⚠️ Code review skipped". See [Review didn't run and the PR shows a budget message](#review-didn’t-run-and-the-pr-shows-a-budget-message).
3434
3535### Review didn't run and the PR shows a budget message
from line 38
3838
3939The comment links [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage), where an admin restores the budget. Its wording tells you which limit was reached:
4040
41* **"has reached its monthly code review spending cap"**: the [monthly spend limit for Code Review](/docs/en/code-review-costs.md#limit-your-spend) was reached. Reviews resume at the start of the next billing period. To get them sooner, ask an admin to raise the limit.
41* **"has reached its monthly code review spending cap"**: the [monthly spend limit for Code Review](https://code.claude.com/docs/en/code-review-costs.md#limit-your-spend) was reached. Reviews resume at the start of the next billing period. To get them sooner, ask an admin to raise the limit.
4242* **"has no extra usage available to pay for this review"**: your organization's [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) balance is empty, or its overall monthly spend limit was reached. Ask an admin to add usage credits or raise that limit.
4343* **"is too low to start another review"**: what's left of the budget or balance is less than the expected cost of one review. Ask an admin to raise the limit or add usage credits.
4444
45After the budget is restored, comment `@claude review` on the pull request to get the review that was skipped. The [conditions for comment commands](/docs/en/code-review-pull-requests.md#comment-commands) apply, so the commenter needs write access.
45After the budget is restored, comment `@claude review` on the pull request to get the review that was skipped. The [conditions for comment commands](https://code.claude.com/docs/en/code-review-pull-requests.md#comment-commands) apply, so the commenter needs write access.
4646
4747## Retrigger a failed or timed-out review
4848
from line 51
5151Otherwise, when the check run's title is **Code review failed** or **Code review timed out**, run the review again with a comment or a re-run:
5252
5353* **Comment `@claude review`**: post it as a top-level comment on the pull request. This starts a fresh review without subscribing the pull request to future pushes.
54* **Click Re-run**: if the pull request isn't [from a fork](/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), click **Re-run** on the **Claude Code Review** check in GitHub's **Checks** tab. The re-run covers the pull request's current head commit and doesn't subscribe the pull request either.
54* **Click Re-run**: if the pull request isn't [from a fork](https://code.claude.com/docs/en/code-review-pull-requests.md#review-drafts-and-pull-requests-from-forks), click **Re-run** on the **Claude Code Review** check in GitHub's **Checks** tab. The re-run covers the pull request's current head commit and doesn't subscribe the pull request either.
5555
5656## Find issues that aren't showing as inline comments
5757
from line 65
6565
6666These are three of the messages a check run can carry about `REVIEW.md`:
6767
68* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: the review read the root file only. See [Which branch REVIEW.md is read from](/docs/en/code-review-customize.md#which-branch-review-md-is-read-from) for what protecting the branch changes.
68* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: the review read the root file only. See [Which branch REVIEW.md is read from](https://code.claude.com/docs/en/code-review-customize.md#which-branch-review-md-is-read-from) for what protecting the branch changes.
6969* **"were not applied to this review: branch protection could not be confirmed"**: the review read no `REVIEW.md`.
70* **"they link to a file this pull request modifies, or carry more links than the review checks"**: the review skipped the root `REVIEW.md`, or the number of subdirectory `REVIEW.md` files the message gives. Check the skipped file for each cause. For the root `REVIEW.md`, check the [files it includes](/docs/en/code-review-customize.md#include-other-files-in-review-md) too:
71 * **Too many links**: it carries more than 64 Markdown links. Cut links to [64 or fewer](/docs/en/code-review-customize.md#include-other-files-in-review-md).
70* **"they link to a file this pull request modifies, or carry more links than the review checks"**: the review skipped the root `REVIEW.md`, or the number of subdirectory `REVIEW.md` files the message gives. Check the skipped file for each cause. For the root `REVIEW.md`, check the [files it includes](https://code.claude.com/docs/en/code-review-customize.md#include-other-files-in-review-md) too:
71 * **Too many links**: it carries more than 64 Markdown links. Cut links to [64 or fewer](https://code.claude.com/docs/en/code-review-customize.md#include-other-files-in-review-md).
7272 * **A link the review can't parse**: it has a malformed Markdown link. Fix or remove the link.
7373 * **A link to a changed file**: it links to a file or folder this pull request changes, and the review couldn't leave out only the lines with that link. Write the rule in `REVIEW.md` itself.
7474
7575## Setup problems
7676
77These cases come up for an Owner while [setting up Code Review](/docs/en/code-review-setup.md).
77These cases come up for an Owner while [setting up Code Review](https://code.claude.com/docs/en/code-review-setup.md).
7878
7979### A repository isn't listed in Add a repository
8080
from line 86
8686
8787## Related resources
8888
89* [Read and request reviews on a pull request](/docs/en/code-review-pull-requests.md): what the findings and the check run mean, and the comment commands
90* [Set up Code Review](/docs/en/code-review-setup.md): for Owners, turn on Code Review and manage repositories
91* [Code Review costs and usage](/docs/en/code-review-costs.md): the spend limits behind a budget message
92* [Customize Code Review](/docs/en/code-review-customize.md): which copy of `REVIEW.md` a review reads
89* [Read and request reviews on a pull request](https://code.claude.com/docs/en/code-review-pull-requests.md): what the findings and the check run mean, and the comment commands
90* [Set up Code Review](https://code.claude.com/docs/en/code-review-setup.md): for Owners, turn on Code Review and manage repositories
91* [Code Review costs and usage](https://code.claude.com/docs/en/code-review-costs.md): the spend limits behind a budget message
92* [Customize Code Review](https://code.claude.com/docs/en/code-review-customize.md): which copy of `REVIEW.md` a review reads
9393
common-workflows Changed · +25 / -25 lines
from line 2
22
33> Step-by-step guides for exploring codebases, fixing bugs, refactoring, testing, and other everyday tasks with Claude Code.
44
5This page collects short recipes for everyday development. For higher-level guidance on prompting and context management, see [Best practices](/docs/en/best-practices.md).
5This page collects short recipes for everyday development. For higher-level guidance on prompting and context management, see [Best practices](https://code.claude.com/docs/en/best-practices.md).
66
77This page covers:
88
from line 19
1919
2020### Understand new codebases
2121
22For configuring Claude Code in a monorepo or large codebase, see [Monorepos and large repos](/docs/en/large-codebases.md).
22For configuring Claude Code in a monorepo or large codebase, see [Monorepos and large repos](https://code.claude.com/docs/en/large-codebases.md).
2323
2424#### Get a quick codebase overview
2525
from line 95
9595>
9696> * Be specific about what you're looking for
9797> * Use domain language from the project
98> * Install a [code intelligence plugin](/docs/en/plugins/code-intelligence.md) for your language to give Claude precise "go to definition" and "find references" navigation
98> * Install a [code intelligence plugin](https://code.claude.com/docs/en/plugins/code-intelligence.md) for your language to give Claude precise "go to definition" and "find references" navigation
9999
100100***
101101
from line 227
227227enhance the PR description with more context about the security improvements
228228```
229229
230To find the session later, run `claude --from-pr 1234` with your own PR number, which opens the session picker filtered to sessions linked to that PR, or paste the PR URL into the [`/resume` picker](/docs/en/sessions#use-the-session-picker) search. Claude Code links the session to the PR when Claude creates it with `gh pr create` or `glab mr create`, and when Claude [works on an existing PR](/docs/en/agent-view.md#pull-request-status).
230To find the session later, run `claude --from-pr 1234` with your own PR number, which opens the session picker filtered to sessions linked to that PR, or paste the PR URL into the [`/resume` picker](https://code.claude.com/docs/en/sessions#use-the-session-picker) search. Claude Code links the session to the PR when Claude creates it with `gh pr create` or `glab mr create`, and when Claude [works on an existing PR](https://code.claude.com/docs/en/agent-view.md#pull-request-status).
231231
232232> [!TIP]
233233>
from line 288
288288You can use any of these methods:
289289
2902901. Drag and drop an image into the Claude Code window
2912. Copy an image and paste it into the CLI with `Ctrl+V`, or with [`Alt+V` on Windows and WSL](/docs/en/interactive-mode#general-controls)
2912. Copy an image and paste it into the CLI with `Ctrl+V`, or with [`Alt+V` on Windows and WSL](https://code.claude.com/docs/en/interactive-mode#general-controls)
2922923. Provide an image path to Claude, for example "Analyze this image: /path/to/your/image.png"
293293
294294**2. Ask Claude to analyze the image**
from line 347
347347Explain the logic in @src/utils/auth.js
348348```
349349
350This includes the content of the file in the conversation when it fits the [Read tool](/docs/en/tools-reference.md#read-tool-behavior)'s token limit, 25,000 tokens by default. A text file larger than 256KB isn't included.
350This includes the content of the file in the conversation when it fits the [Read tool](https://code.claude.com/docs/en/tools-reference.md#read-tool-behavior)'s token limit, 25,000 tokens by default. A text file larger than 256KB isn't included.
351351
352352**2. Reference a directory**
353353
from line 361
361361Show me the data from @github:repos/owner/repo/issues
362362```
363363
364This fetches data from connected MCP servers using the format @server:resource. See [MCP resources](/docs/en/mcp.md#use-mcp-resources) for details.
364This fetches data from connected MCP servers using the format @server:resource. See [MCP resources](https://code.claude.com/docs/en/mcp.md#use-mcp-resources) for details.
365365
366366> [!TIP]
367367>
from line 373
373373> * Directory references show file listings, not contents
374374> * You can reference multiple files in a single message (for example, "@file1.js and @file2.js")
375375
376To stop `@` references from including file contents and directory listings, set [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](/docs/en/env-vars#variables) to `1` in your shell or in the [`env` block](/docs/en/env-vars#set-variables-in-settings-files) of user settings or [managed settings](/docs/en/managed-settings.md). Claude then receives the paths you referenced with a note to read them using its file tools. The variable requires Claude Code v2.1.299 or later, and Claude Code ignores it in project and local settings.
376To stop `@` references from including file contents and directory listings, set [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](https://code.claude.com/docs/en/env-vars#variables) to `1` in your shell or in the [`env` block](https://code.claude.com/docs/en/env-vars#set-variables-in-settings-files) of user settings or [managed settings](https://code.claude.com/docs/en/managed-settings.md). Claude then receives the paths you referenced with a note to read them using its file tools. The variable requires Claude Code v2.1.299 or later, and Claude Code ignores it in project and local settings.
377377
378Your [`PreToolUse` hooks](/docs/en/hooks#pretooluse) don't run when Claude Code includes a file you reference with `@`, because it makes no tool call. If you rely on those hooks to control what Claude reads, block specific paths or stop `@` references from including files:
378Your [`PreToolUse` hooks](https://code.claude.com/docs/en/hooks#pretooluse) don't run when Claude Code includes a file you reference with `@`, because it makes no tool call. If you rely on those hooks to control what Claude reads, block specific paths or stop `@` references from including files:
379379
380* **Block specific paths**: add a [`Read` deny rule](/docs/en/permissions#read-and-edit) for them. Claude Code doesn't include a file that the rule matches.
380* **Block specific paths**: add a [`Read` deny rule](https://code.claude.com/docs/en/permissions#read-and-edit) for them. Claude Code doesn't include a file that the rule matches.
381381* **Stop `@` references from including files**: set `CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`, which stops `@` file and directory references in your messages from including content, even for paths your hooks don't check. Your matching hooks then run before Claude opens a referenced path with a tool such as `Read`.
382382
383383***
from line 390
390390
391391| Option | Where it runs | Best for |
392392| :- | :- | :- |
393| [Cloud scheduled tasks](/docs/en/routines.md) | Cloud, Anthropic-managed by default | Tasks that should run even when your computer is off. Can also trigger on API calls or GitHub events in addition to a schedule. Configure at [claude.ai/code/routines](https://claude.ai/code/routines). |
394| [Desktop scheduled tasks](/docs/en/desktop-scheduled-tasks.md) | Your machine, via the desktop app | Tasks that need direct access to local files, tools, or uncommitted changes. |
395| [GitHub Actions](/docs/en/github-actions.md) | Your CI pipeline | Tasks tied to repo events like opened PRs, or cron schedules that should live alongside your workflow config. |
396| [`/loop`](/docs/en/scheduled-tasks) | The current CLI session | Quick polling while a session is open. `--resume` and `--continue` restore unexpired fixed-interval loops. |
393| [Cloud scheduled tasks](https://code.claude.com/docs/en/routines.md) | Cloud, Anthropic-managed by default | Tasks that should run even when your computer is off. Can also trigger on API calls or GitHub events in addition to a schedule. Configure at [claude.ai/code/routines](https://claude.ai/code/routines). |
394| [Desktop scheduled tasks](https://code.claude.com/docs/en/desktop-scheduled-tasks.md) | Your machine, via the desktop app | Tasks that need direct access to local files, tools, or uncommitted changes. |
395| [GitHub Actions](https://code.claude.com/docs/en/github-actions.md) | Your CI pipeline | Tasks tied to repo events like opened PRs, or cron schedules that should live alongside your workflow config. |
396| [`/loop`](https://code.claude.com/docs/en/scheduled-tasks) | The current CLI session | Quick polling while a session is open. `--resume` and `--continue` restore unexpired fixed-interval loops. |
397397
398398> [!TIP]
399399>
from line 452
452452claude --continue
453453```
454454
455This resumes the most recent session in the current directory; if there isn't one yet, it prints `No conversation found to continue` and exits. Use `claude --resume` to choose from a list, or `/resume` from inside a running session. See [Manage sessions](/docs/en/sessions.md) for naming, branching, and the full picker reference.
455This resumes the most recent session in the current directory; if there isn't one yet, it prints `No conversation found to continue` and exits. Use `claude --resume` to choose from a list, or `/resume` from inside a running session. See [Manage sessions](https://code.claude.com/docs/en/sessions.md) for naming, branching, and the full picker reference.
456456
457457## Run parallel sessions with worktrees
458458
from line 462
462462claude --worktree feature-auth
463463```
464464
465Run the same command with a different name in a second terminal to start an isolated parallel session. In a repository with no commits, the command fails with `Failed to resolve base branch "HEAD": git rev-parse failed`. See [Worktrees](/docs/en/worktrees.md) for cleanup, `.worktreeinclude`, and non-git VCS support. To monitor parallel sessions from one screen instead of separate terminals, see [background agents](/docs/en/agent-view.md).
465Run the same command with a different name in a second terminal to start an isolated parallel session. In a repository with no commits, the command fails with `Failed to resolve base branch "HEAD": git rev-parse failed`. See [Worktrees](https://code.claude.com/docs/en/worktrees.md) for cleanup, `.worktreeinclude`, and non-git VCS support. To monitor parallel sessions from one screen instead of separate terminals, see [background agents](https://code.claude.com/docs/en/agent-view.md).
466466
467467## Plan before editing
468468
from line 472
472472claude --permission-mode plan
473473```
474474
475You can also press `Shift+Tab` mid-session until the status bar shows `⏸ plan mode on`. See [Plan mode](/docs/en/permission-modes.md#analyze-before-you-edit-with-plan-mode) for the approval flow and editing the plan in your text editor.
475You can also press `Shift+Tab` mid-session until the status bar shows `⏸ plan mode on`. See [Plan mode](https://code.claude.com/docs/en/permission-modes.md#analyze-before-you-edit-with-plan-mode) for the approval flow and editing the plan in your text editor.
476476
477477## Delegate research to subagents
478478
from line 482
482482use a subagent to investigate how our auth system handles token refresh
483483```
484484
485The subagent reads files in its own context window and reports a summary. See [Subagents](/docs/en/sub-agents.md) for defining custom agents with their own tools and prompts.
485The subagent reads files in its own context window and reports a summary. See [Subagents](https://code.claude.com/docs/en/sub-agents.md) for defining custom agents with their own tools and prompts.
486486
487487## Pipe Claude into scripts
488488
from line 492
492492git log --oneline -20 | claude -p "summarize these recent commits"
493493```
494494
495See [Non-interactive mode](/docs/en/headless.md) for output formats, permission flags, and fan-out patterns.
495See [Non-interactive mode](https://code.claude.com/docs/en/headless.md) for output formats, permission flags, and fan-out patterns.
496496
497497## Next steps
498498
499> **[Best practices](/docs/en/best-practices.md)**
499> **[Best practices](https://code.claude.com/docs/en/best-practices.md)**
500500>
501501> Patterns for getting the most out of Claude Code
502502
503> **[Manage sessions](/docs/en/sessions.md)**
503> **[Manage sessions](https://code.claude.com/docs/en/sessions.md)**
504504>
505505> Resume, name, and branch conversations
506506
507> **[Worktrees](/docs/en/worktrees.md)**
507> **[Worktrees](https://code.claude.com/docs/en/worktrees.md)**
508508>
509509> Run isolated parallel sessions
510510
511> **[Extend Claude Code](/docs/en/features-overview.md)**
511> **[Extend Claude Code](https://code.claude.com/docs/en/features-overview.md)**
512512>
513513> Add skills, hooks, MCP, subagents, and plugins
514514
communications-kit Changed · +11 / -11 lines
from line 20
2020| - | - |
2121| `#claude-code` channel created and linked in the message | Gives questions one place to land |
2222| Install command tested on at least one machine in your environment | Catches proxy or firewall issues before everyone hits them at once |
23| Security and data-handling link ready ([Data usage](/docs/en/data-usage.md) or your internal equivalent) | "Where does my code go?" will be the first reply |
23| Security and data-handling link ready ([Data usage](https://code.claude.com/docs/en/data-usage.md) or your internal equivalent) | "Where does my code go?" will be the first reply |
2424| One concrete first task chosen, a real bug or file in your codebase | Generic examples don't convert; "fix the flaky test in `auth_test.go`" does |
2525| A named owner for the channel for the first 48 hours | Unanswered launch-day questions kill momentum |
2626| A C-suite sponsor lined up to send or co-sign the announcement | Exec-sent launches consistently see higher first-week adoption than admin-sent ones |
from line 219
219219
220220| Model | Best for |
221221| - | - |
222| Fable | The hardest, longest-running tasks. Opt-in only: select it with `/model fable`. Cybersecurity or biology content triggers [automatic model fallback to Opus](/docs/en/model-config.md#automatic-model-fallback) |
223| Opus | Large-scale refactors, complex debugging, architecture decisions, high-stakes changes. On Opus 5.5 and Opus 5, cybersecurity or biology content triggers [automatic model fallback or a refusal](/docs/en/model-config.md#automatic-model-fallback) |
224| Sonnet | Everyday feature work, bug fixes, tests, documentation, code review. Recommended default. On Sonnet 5.5, cybersecurity or biology content triggers [automatic model fallback or a refusal](/docs/en/model-config.md#automatic-model-fallback) |
222| Fable | The hardest, longest-running tasks. Opt-in only: select it with `/model fable`. Cybersecurity or biology content triggers [automatic model fallback to Opus](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback) |
223| Opus | Large-scale refactors, complex debugging, architecture decisions, high-stakes changes. On Opus 5.5 and Opus 5, cybersecurity or biology content triggers [automatic model fallback or a refusal](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback) |
224| Sonnet | Everyday feature work, bug fixes, tests, documentation, code review. Recommended default. On Sonnet 5.5, cybersecurity or biology content triggers [automatic model fallback or a refusal](https://code.claude.com/docs/en/model-config.md#automatic-model-fallback) |
225225| Haiku | Quick questions, formatting, mechanical edits, rapid iteration |
226226
227227**Quick wins to try first**
from line 494
494494
495495| Question | Response |
496496| - | - |
497| "Does it work in VS Code?" | Yes. There is a VS Code extension and a JetBrains plugin with the same features, embedded in your editor. [VS Code →](/docs/en/vs-code.md) |
498| "Do I have to configure anything first?" | No. Install, then run `claude` in any repo. Run `/init` once and you're set. [Quickstart →](/docs/en/quickstart.md) |
499| "Where does my code go?" | The CLI runs in your terminal and sends context to Anthropic's API for inference. On a Team or Enterprise plan, your code and prompts are not used to train models. [Data usage →](/docs/en/data-usage.md) |
500| "Can it see my whole repo?" | It reads what you give it access to. File reads inside your working directory don't prompt. [Permissions →](/docs/en/permissions.md) |
501| "How is this different from Copilot?" | Copilot autocompletes lines. Claude Code is an agent that reads files, runs commands, and makes multi-file edits. [Overview →](/docs/en/overview.md) |
502| "What should I try first?" | A bug you've been putting off because it's tedious. "The test in \[file] is flaky, figure out why." [Quickstart →](/docs/en/quickstart.md) |
497| "Does it work in VS Code?" | Yes. There is a VS Code extension and a JetBrains plugin with the same features, embedded in your editor. [VS Code →](https://code.claude.com/docs/en/vs-code.md) |
498| "Do I have to configure anything first?" | No. Install, then run `claude` in any repo. Run `/init` once and you're set. [Quickstart →](https://code.claude.com/docs/en/quickstart.md) |
499| "Where does my code go?" | The CLI runs in your terminal and sends context to Anthropic's API for inference. On a Team or Enterprise plan, your code and prompts are not used to train models. [Data usage →](https://code.claude.com/docs/en/data-usage.md) |
500| "Can it see my whole repo?" | It reads what you give it access to. File reads inside your working directory don't prompt. [Permissions →](https://code.claude.com/docs/en/permissions.md) |
501| "How is this different from Copilot?" | Copilot autocompletes lines. Claude Code is an agent that reads files, runs commands, and makes multi-file edits. [Overview →](https://code.claude.com/docs/en/overview.md) |
502| "What should I try first?" | A bug you've been putting off because it's tedious. "The test in \[file] is flaky, figure out why." [Quickstart →](https://code.claude.com/docs/en/quickstart.md) |
503503
504504### Prompt templates
505505
from line 518
518518
519519> [!TIP]
520520>
521> Claude Code ships frequently. Verify version-specific details against the [documentation home page](/docs/en/overview.md) before distributing internally.
521> Claude Code ships frequently. Verify version-specific details against the [documentation home page](https://code.claude.com/docs/en/overview.md) before distributing internally.
522522
computer-use Changed · +11 / -11 lines
from line 8
88
99Computer use lets Claude open apps, control your screen, and work on your machine the way you would. From the CLI, Claude can compile a Swift app, launch it, click through every button, and screenshot the result, all in the same conversation where it wrote the code.
1010
11This page covers how computer use works in the CLI. For the Desktop app on macOS or Windows, see [computer use in Desktop](/docs/en/desktop.md#let-claude-use-your-computer).
11This page covers how computer use works in the CLI. For the Desktop app on macOS or Windows, see [computer use in Desktop](https://code.claude.com/docs/en/desktop.md#let-claude-use-your-computer).
1212
1313## What you can do with computer use
1414
from line 23
2323
2424Claude has several ways to interact with an app or service. Computer use is the broadest and slowest, so Claude tries the most precise tool first:
2525
26* If you have an [MCP server](/docs/en/mcp.md) for the service, Claude uses that.
26* If you have an [MCP server](https://code.claude.com/docs/en/mcp.md) for the service, Claude uses that.
2727* If the task is a shell command, Claude uses Bash.
28* If the task is browser work and you have [Claude in Chrome](/docs/en/chrome.md) set up, Claude uses that.
28* If the task is browser work and you have [Claude in Chrome](https://code.claude.com/docs/en/chrome.md) set up, Claude uses that.
2929* If none of those apply, Claude uses computer use.
3030
3131Screen control is reserved for things nothing else can reach: native apps, simulators such as the iOS Simulator, and tools without an API.
from line 86
8686
8787Approve Finder to let Claude click the desktop, the Dock, or a Finder window.
8888
89Claude's level of control also varies by app category: browsers and trading platforms are view-only, terminals and IDEs are click-only, and everything else gets full control. See [app permissions in Desktop](/docs/en/desktop.md#app-permissions) for the complete tier breakdown.
89Claude's level of control also varies by app category: browsers and trading platforms are view-only, terminals and IDEs are click-only, and everything else gets full control. See [app permissions in Desktop](https://code.claude.com/docs/en/desktop.md#app-permissions) for the complete tier breakdown.
9090
9191## How Claude works on your screen
9292
from line 118
118118
119119> [!WARNING]
120120>
121> Unlike the [sandboxed Bash tool](/docs/en/sandboxing.md), computer use runs on your actual desktop with access to the apps you approve. Claude checks each action and flags potential prompt injection from on-screen content, but the trust boundary is different. See the [computer use safety guide](https://support.claude.com/en/articles/14128542) for best practices.
121> Unlike the [sandboxed Bash tool](https://code.claude.com/docs/en/sandboxing.md), computer use runs on your actual desktop with access to the apps you approve. Claude checks each action and flags potential prompt injection from on-screen content, but the trust boundary is different. See the [computer use safety guide](https://support.claude.com/en/articles/14128542) for best practices.
122122
123123The built-in guardrails reduce risk without requiring configuration:
124124
from line 165
165165screens, and tell me if any screen takes more than a second to load.
166166```
167167
168Claude controls the simulator the same way you would with a mouse. This flow applies to the CLI; in the Desktop app, the same request opens the [iOS Simulator pane](/docs/en/desktop-ios-simulator.md) instead of screen control.
168Claude controls the simulator the same way you would with a mouse. This flow applies to the CLI; in the Desktop app, the same request opens the [iOS Simulator pane](https://code.claude.com/docs/en/desktop-ios-simulator.md) instead of screen control.
169169
170170## Differences from the Desktop app
171171
from line 193
193193
194194The server only appears on eligible setups. Check that:
195195
196* You're on macOS. Computer use in the CLI is not available on Linux or Windows. On Windows, use [computer use in Desktop](/docs/en/desktop.md#let-claude-use-your-computer) instead.
196* You're on macOS. Computer use in the CLI is not available on Linux or Windows. On Windows, use [computer use in Desktop](https://code.claude.com/docs/en/desktop.md#let-claude-use-your-computer) instead.
197197* You're on a Pro or Max plan. Run `/status` to confirm your subscription.
198198* You're authenticated through claude.ai. Computer use is not available with third-party providers like Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. If you access Claude exclusively through a third-party provider, you need a separate claude.ai account to use this feature.
199199* You're in an interactive session. Computer use is not available in non-interactive mode with the `-p` flag.
from line 200
200200
201201## See also
202202
203* [Computer use in Desktop](/docs/en/desktop.md#let-claude-use-your-computer): the same capability with a graphical settings page
204* [Claude in Chrome](/docs/en/chrome.md): browser automation for web-based tasks
205* [MCP](/docs/en/mcp.md): connect Claude to structured tools and APIs
206* [Sandboxing](/docs/en/sandboxing.md): how Claude's Bash tool isolates filesystem and network access
203* [Computer use in Desktop](https://code.claude.com/docs/en/desktop.md#let-claude-use-your-computer): the same capability with a graphical settings page
204* [Claude in Chrome](https://code.claude.com/docs/en/chrome.md): browser automation for web-based tasks
205* [MCP](https://code.claude.com/docs/en/mcp.md): connect Claude to structured tools and APIs
206* [Sandboxing](https://code.claude.com/docs/en/sandboxing.md): how Claude's Bash tool isolates filesystem and network access
207207* [Computer use safety guide](https://support.claude.com/en/articles/14128542): best practices for safe computer use
208208
corporate-launcher Changed · +17 / -17 lines
from line 4
44
55Some organizations require every process on a workstation to start through a mandatory launcher. The launcher applies the sandbox, network controls, or credential injection that the company's security posture depends on, and a binary that starts without it is a policy violation.
66
7`CLAUDE_CODE_PROCESS_WRAPPER` starts every process Claude Code launches from its own binary through your launcher: the [background service](/docs/en/agent-view.md#the-supervisor-process), every session it hosts in [agent view](/docs/en/agent-view.md), and Claude Code's relaunches after an update. Set it to your launcher's absolute path, and Claude Code runs the launcher with the Claude Code command as its arguments.
7`CLAUDE_CODE_PROCESS_WRAPPER` starts every process Claude Code launches from its own binary through your launcher: the [background service](https://code.claude.com/docs/en/agent-view.md#the-supervisor-process), every session it hosts in [agent view](https://code.claude.com/docs/en/agent-view.md), and Claude Code's relaunches after an update. Set it to your launcher's absolute path, and Claude Code runs the launcher with the Claude Code command as its arguments.
88
99A launcher that wraps the `claude` command on your `PATH` can't reach the background service or the sessions it hosts, because they start from the binary's direct path without looking up `claude`.
1010
1111> [!NOTE]
1212>
13> `CLAUDE_CODE_PROCESS_WRAPPER` requires Claude Code v2.1.208 or later. Earlier versions ignore the variable and start every process unwrapped. The equivalent [`processWrapper` setting](/docs/en/settings-reference#processwrapper) requires v2.1.210 or later. Earlier versions ignore it as an unknown key, apply no launcher, and report no error.
13> `CLAUDE_CODE_PROCESS_WRAPPER` requires Claude Code v2.1.208 or later. Earlier versions ignore the variable and start every process unwrapped. The equivalent [`processWrapper` setting](https://code.claude.com/docs/en/settings-reference#processwrapper) requires v2.1.210 or later. Earlier versions ignore it as an unknown key, apply no launcher, and report no error.
1414>
1515> After deploying either form, use the [Verify step](#set-up-the-launcher) to confirm the running version applies it.
1616
from line 22
2222* The terminal host and the Claude Code session inside every agent view row, including the warm standby sessions the service keeps ready.
2323* Sessions the service respawns after an update or a crash.
2424* The relaunch Claude Code performs of itself to finish installing an update, including agent view's restart-for-update action.
25* The session processes that [Remote Control](/docs/en/remote-control.md) starts. Requires Claude Code v2.1.210 or later.
26* The split-pane teammate sessions that [agent teams](/docs/en/agent-teams.md) start in tmux or iTerm2. Teammate panes are interactive rather than background processes, but Claude Code starts them from its own binary, so the launcher covers them. Requires Claude Code v2.1.210 or later.
25* The session processes that [Remote Control](https://code.claude.com/docs/en/remote-control.md) starts. Requires Claude Code v2.1.210 or later.
26* The split-pane teammate sessions that [agent teams](https://code.claude.com/docs/en/agent-teams.md) start in tmux or iTerm2. Teammate panes are interactive rather than background processes, but Claude Code starts them from its own binary, so the launcher covers them. Requires Claude Code v2.1.210 or later.
2727
28On Windows, the variable is ignored: the launcher contract depends on `exec`, which Windows doesn't support. A Windows machine with the variable set runs every process unwrapped and keeps working, and the only signal is a warning in the [debug log](/docs/en/troubleshooting.md). If your launcher policy covers Windows, the variable doesn't satisfy it there: count Windows machines as unwrapped when you plan the rollout.
28On Windows, the variable is ignored: the launcher contract depends on `exec`, which Windows doesn't support. A Windows machine with the variable set runs every process unwrapped and keeps working, and the only signal is a warning in the [debug log](https://code.claude.com/docs/en/troubleshooting.md). If your launcher policy covers Windows, the variable doesn't satisfy it there: count Windows machines as unwrapped when you plan the rollout.
2929
3030### Processes that start outside the launcher
3131
from line 32
3232The following processes don't start through the launcher:
3333
3434* A session you start yourself in a terminal, which runs however you invoked it. To cover these sessions, put a script named `claude` in a directory earlier on `PATH` that runs your launcher with the real binary; don't replace the managed symlink. The background service and its sessions start without a `PATH` lookup, so the two launchers don't stack there.
35* The first process of a `claude-cli://` deep link, which the operating system's protocol handler starts directly. Everything that session starts in the background afterward runs through the launcher. To close this path entirely, [prevent handler registration](/docs/en/deep-links.md#registration-and-supported-platforms) with the `disableDeepLinkRegistration` setting.
35* The first process of a `claude-cli://` deep link, which the operating system's protocol handler starts directly. Everything that session starts in the background afterward runs through the launcher. To close this path entirely, [prevent handler registration](https://code.claude.com/docs/en/deep-links.md#registration-and-supported-platforms) with the `disableDeepLinkRegistration` setting.
3636* The relaunch that `--worktree` combined with `--tmux` performs: the terminal multiplexer starts that pane, not Claude Code's binary.
37* The native-messaging host that [Claude in Chrome](/docs/en/chrome.md) registers: the browser starts it, not Claude Code's binary.
37* The native-messaging host that [Claude in Chrome](https://code.claude.com/docs/en/chrome.md) registers: the browser starts it, not Claude Code's binary.
3838
3939### Helper process names in process monitors
4040
from line 63
6363
6464Set the variable in the `env` block of a settings file so the detached background service inherits it. A shell `export` isn't enough: the background service starts on demand, outlives your shell, and never re-reads shell profiles.
6565
66For one machine, add it to `~/.claude/settings.json`. To deploy it to every machine in your organization, put the same block in [managed settings](/docs/en/managed-settings.md):
66For one machine, add it to `~/.claude/settings.json`. To deploy it to every machine in your organization, put the same block in [managed settings](https://code.claude.com/docs/en/managed-settings.md):
6767
6868```json theme={null}
6969{
from line 75
7575
7676When more than one source sets the variable, the managed settings value overrides both `~/.claude/settings.json` and a value exported in the shell, so users can't point self-spawns at a different launcher.
7777
78The [`processWrapper` setting](/docs/en/settings-reference#processwrapper) carries the same value as a named, top-level settings key. Set it when your organization pushes settings as individual keys rather than an `env` block. The `processWrapper` setting requires Claude Code v2.1.210 or later. The following settings file sets the same launcher through the key:
78The [`processWrapper` setting](https://code.claude.com/docs/en/settings-reference#processwrapper) carries the same value as a named, top-level settings key. Set it when your organization pushes settings as individual keys rather than an `env` block. The `processWrapper` setting requires Claude Code v2.1.210 or later. The following settings file sets the same launcher through the key:
7979
8080```json theme={null}
8181{
from line 85
8585
8686`CLAUDE_CODE_PROCESS_WRAPPER` takes precedence when both are set.
8787
88Because `processWrapper` is a named setting, an organization that delivers it through [remote managed settings](/docs/en/managed-settings.md#delivery-mechanisms) sees it listed on the [security approval dialog](/docs/en/server-managed-settings.md#security-approval-dialogs) alongside the other settings that run administrator-supplied executables.
88Because `processWrapper` is a named setting, an organization that delivers it through [remote managed settings](https://code.claude.com/docs/en/managed-settings.md#delivery-mechanisms) sees it listed on the [security approval dialog](https://code.claude.com/docs/en/server-managed-settings.md#security-approval-dialogs) alongside the other settings that run administrator-supplied executables.
8989
90Project and local settings can't configure the launcher. A file committed to a repository must not be able to put a binary in front of every Claude Code process on the machine, so Claude Code ignores `CLAUDE_CODE_PROCESS_WRAPPER` in `.claude/settings.json` or `.claude/settings.local.json` with a warning in the [debug log](/docs/en/troubleshooting.md), and never reads the `processWrapper` key from those files.
90Project and local settings can't configure the launcher. A file committed to a repository must not be able to put a binary in front of every Claude Code process on the machine, so Claude Code ignores `CLAUDE_CODE_PROCESS_WRAPPER` in `.claude/settings.json` or `.claude/settings.local.json` with a warning in the [debug log](https://code.claude.com/docs/en/troubleshooting.md), and never reads the `processWrapper` key from those files.
9191
9292**3. Restart the background service and your sessions**
9393
from line 126
126126* A value that starts with `[` is read as a JSON string array, such as `["/opt/corp/launcher", "--profile", "cc"]`.
127127* Shell syntax doesn't work: there is no variable expansion or globbing, and an unquoted operator such as `;`, `|`, `&`, or `$(` is rejected as a configuration error rather than reinterpreted.
128128
129When the value can't be used, Claude Code refuses to start the affected process and [reports the reason](/docs/en/errors.md#claude_code_process_wrapper-launcher-errors).
129When the value can't be used, Claude Code refuses to start the affected process and [reports the reason](https://code.claude.com/docs/en/errors.md#claude_code_process_wrapper-launcher-errors).
130130
131131In a settings file, write the array form inside a JSON string and escape its quotes: `"[\"/opt/corp/launcher\", \"--profile\", \"cc\"]"`.
132132
from line 148
148148
149149## Relationship to `CLAUDE_CODE_SHELL_PREFIX`
150150
151`CLAUDE_CODE_PROCESS_WRAPPER` wraps Claude Code's own processes and passes the command through as separate argv tokens for the launcher to `exec`. [`CLAUDE_CODE_SHELL_PREFIX`](/docs/en/env-vars) wraps the shell commands Claude runs on your behalf, such as Bash tool calls, hooks, and the commands that start stdio MCP servers, and passes each one as a single shell-quoted string in `$1` for the wrapper to re-evaluate. A launcher written for one doesn't work as the other.
151`CLAUDE_CODE_PROCESS_WRAPPER` wraps Claude Code's own processes and passes the command through as separate argv tokens for the launcher to `exec`. [`CLAUDE_CODE_SHELL_PREFIX`](https://code.claude.com/docs/en/env-vars) wraps the shell commands Claude runs on your behalf, such as Bash tool calls, hooks, and the commands that start stdio MCP servers, and passes each one as a single shell-quoted string in `$1` for the wrapper to re-evaluate. A launcher written for one doesn't work as the other.
152152
153153## Related resources
154154
155* [Agent view](/docs/en/agent-view.md): the background sessions and supervisor process the launcher covers
156* [Environment variables](/docs/en/env-vars.md): the `CLAUDE_CODE_PROCESS_WRAPPER` reference entry
157* [Managed settings](/docs/en/permissions.md#managed-settings): deliver the `env` block across a fleet
158* [Launcher error reference](/docs/en/errors.md#claude_code_process_wrapper-launcher-errors): the refusal messages and how to recover
155* [Agent view](https://code.claude.com/docs/en/agent-view.md): the background sessions and supervisor process the launcher covers
156* [Environment variables](https://code.claude.com/docs/en/env-vars.md): the `CLAUDE_CODE_PROCESS_WRAPPER` reference entry
157* [Managed settings](https://code.claude.com/docs/en/permissions.md#managed-settings): deliver the `env` block across a fleet
158* [Launcher error reference](https://code.claude.com/docs/en/errors.md#claude_code_process_wrapper-launcher-errors): the refusal messages and how to recover
159159
costs Changed · +72 / -72 lines
from line 16
1616>
1717> The Session block in `/usage` shows API token usage and is intended for API users. Claude Max and Pro subscribers have usage included in their subscription, so the session cost figure isn't relevant for billing purposes. Subscribers see plan usage bars, activity stats, and a usage breakdown on the same screen.
1818
19The Session block at the top of `/usage` shows detailed token usage statistics for your current session. Claude Code computes the dollar figure locally from token counts at list price, unless a [`modelPricing`](/docs/en/settings-reference#modelpricing) table is in effect. An administrator sets one in your organization's managed settings so the figure uses your contracted rates, and while a table is in effect the `Total cost` line carries the note `at your organization's configured rates`. The figure is an estimate, so for authoritative billing see the Usage page in the [Claude Console](https://platform.claude.com/usage).
19The Session block at the top of `/usage` shows detailed token usage statistics for your current session. Claude Code computes the dollar figure locally from token counts at list price, unless a [`modelPricing`](https://code.claude.com/docs/en/settings-reference#modelpricing) table is in effect. An administrator sets one in your organization's managed settings so the figure uses your contracted rates, and while a table is in effect the `Total cost` line carries the note `at your organization's configured rates`. The figure is an estimate, so for authoritative billing see the Usage page in the [Claude Console](https://platform.claude.com/usage).
2020
2121```text theme={null}
2222Total cost: $0.55
from line 29
2929
3030These totals reset when `/clear` starts a new session, so the next session's total cost starts at \$0. Before v2.1.211, they kept accumulating across `/clear` for the lifetime of the Claude Code process.
3131
32For a response from the Claude API billed at the 1.1× [data residency rate](https://platform.claude.com/docs/en/about-claude/pricing#data-residency-pricing), Claude Code multiplies the list price of that response's tokens by 1.1 in the session cost figure. The same total appears in the [status line's cost field](/docs/en/statusline.md#cost-and-duration-tracking), and the multiplied figure also counts toward [`--max-budget-usd`](/docs/en/cli-reference#cli-flags).
32For a response from the Claude API billed at the 1.1× [data residency rate](https://platform.claude.com/docs/en/about-claude/pricing#data-residency-pricing), Claude Code multiplies the list price of that response's tokens by 1.1 in the session cost figure. The same total appears in the [status line's cost field](https://code.claude.com/docs/en/statusline.md#cost-and-duration-tracking), and the multiplied figure also counts toward [`--max-budget-usd`](https://code.claude.com/docs/en/cli-reference#cli-flags).
3333
3434#### Prompt cache statistics
3535
36After the main conversation's first API response, Claude Code also adds a `Prompt cache (main)` line to the Session block, summarizing the session's [prompt cache](/docs/en/prompt-caching.md) use: the request count, the share of input tokens served from cache, cache misses, and whether the cache is warm right now. Requires Claude Code v2.1.251 or later.
36After the main conversation's first API response, Claude Code also adds a `Prompt cache (main)` line to the Session block, summarizing the session's [prompt cache](https://code.claude.com/docs/en/prompt-caching.md) use: the request count, the share of input tokens served from cache, cache misses, and whether the cache is warm right now. Requires Claude Code v2.1.251 or later.
3737
3838```text theme={null}
3939Prompt cache (main): 14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · 1 expected rebuild (compaction or tool-result clearing) · warm (1h TTL, last activity 40s ago)
from line 41
4141
4242The misses, expected rebuilds, and warm or cold parts of the line mean the following:
4343
44* **Misses**: requests that re-processed content the cache already held, with the time of the last miss and how many tokens those requests wrote back to the cache. [Actions that invalidate the cache](/docs/en/prompt-caching.md#actions-that-invalidate-the-cache) lists the usual causes. When Claude Code can identify a likely cause for the last miss, the line names it too, for example `likely cause: tool definitions changed`. The likely-cause text requires Claude Code v2.1.260 or later.
45* **Expected rebuilds**: when Claude Code has itself just rewritten the conversation, by [compaction](/docs/en/prompt-caching.md#compacting-the-conversation) or by clearing old tool results from context, it counts the same kind of miss as an expected rebuild instead. This part appears only after at least one expected rebuild has happened.
46* **Warm or cold**: whether the cached prefix is still within its [cache lifetime](/docs/en/prompt-caching.md#cache-lifetime), with the TTL in effect. When the cache is cold, the line shows how long the session has been idle. When no response has reported cache tokens, the line ends with `no prompt caching reported by the API` instead.
44* **Misses**: requests that re-processed content the cache already held, with the time of the last miss and how many tokens those requests wrote back to the cache. [Actions that invalidate the cache](https://code.claude.com/docs/en/prompt-caching.md#actions-that-invalidate-the-cache) lists the usual causes. When Claude Code can identify a likely cause for the last miss, the line names it too, for example `likely cause: tool definitions changed`. The likely-cause text requires Claude Code v2.1.260 or later.
45* **Expected rebuilds**: when Claude Code has itself just rewritten the conversation, by [compaction](https://code.claude.com/docs/en/prompt-caching.md#compacting-the-conversation) or by clearing old tool results from context, it counts the same kind of miss as an expected rebuild instead. This part appears only after at least one expected rebuild has happened.
46* **Warm or cold**: whether the cached prefix is still within its [cache lifetime](https://code.claude.com/docs/en/prompt-caching.md#cache-lifetime), with the TTL in effect. When the cache is cold, the line shows how long the session has been idle. When no response has reported cache tokens, the line ends with `no prompt caching reported by the API` instead.
4747
4848The counts come from the cache token fields in the API's responses, so the line works on every provider and gateway. It covers the main conversation only, not subagents. `/clear` resets it with the rest of the Session block.
4949
50Status line scripts can read the same numbers from the [`prompt_cache` object](/docs/en/statusline#prompt-cache-fields).
50Status line scripts can read the same numbers from the [`prompt_cache` object](https://code.claude.com/docs/en/statusline#prompt-cache-fields).
5151
5252#### Plan usage breakdown
5353
from line 57
5757* **Recommendations**: suggested changes, one per row. Each row starts with a share of your recent usage, at least 10%, as in `25% Trim ~/code/api/CLAUDE.md · 49k tokens per request`.
5858 * **How to read the share**: it tells you how much of your usage the row applies to, not how much the change saves. One request can count toward several rows, so the shares can add up to more than 100%.
5959 * **How to apply recommendations**: to have Claude Code apply the ones it can, see [Apply recommendations with the fix shortcut](#apply-recommendations-with-the-fix-shortcut)
60* **Loops**: a row for each of the heaviest [`/loop` or other session-scoped scheduled tasks](/docs/en/scheduled-tasks) that ran recently, ordered by total tokens, with a count of the rest. Requires Claude Code v2.1.242 or later.
60* **Loops**: a row for each of the heaviest [`/loop` or other session-scoped scheduled tasks](https://code.claude.com/docs/en/scheduled-tasks) that ran recently, ordered by total tokens, with a count of the rest. Requires Claude Code v2.1.242 or later.
6161 * **What each row reports**: how often the task fires, how many times it ran, its total and per-run tokens, and when it last ran
6262 * **Stopped and re-created loops**: Claude Code keys a row by the task's prompt, so a loop you stop and re-create stays one row
6363
6464Press `d` or `w` to switch between the last 24 hours and the last 7 days. The figures are approximate and computed from local session history on this machine, so usage from other devices or claude.ai is not included.
6565
66In the [VS Code extension](/docs/en/vs-code.md#check-account-and-usage), the attribution shares and recommendations appear in the Account & usage dialog with a Day and Week toggle, without the Loops rows.
66In the [VS Code extension](https://code.claude.com/docs/en/vs-code.md#check-account-and-usage), the attribution shares and recommendations appear in the Account & usage dialog with a Day and Week toggle, without the Loops rows.
6767
6868#### Apply recommendations with the fix shortcut
6969
7070When the `/usage` footer shows a hint such as `f to fix 2 of 3`, press `f` to have Claude Code act on the recommendations it can. The `f` shortcut requires Claude Code v2.1.305 or later.
7171
721. After any turn in progress ends, Claude Code runs each [`/effort`](/docs/en/model-config#adjust-effort-level) command shown in a row without `run`.
721. After any turn in progress ends, Claude Code runs each [`/effort`](https://code.claude.com/docs/en/model-config#adjust-effort-level) command shown in a row without `run`.
73732. Claude then gets one prompt with a step for each of the other rows it can act on. The prompt asks Claude to show you each change before making it.
7474
7575To see what pressing `f` does with each of your rows, find the row's shape in the first column:
from line 82
8282
8383In `f to fix 2 of 3`, the first number counts the rows Claude Code acts on when you press `f`, and the second counts the rows shown. A hint with no `of` in it, such as `f to fix both`, means Claude Code acts on every row shown.
8484
85While [Remote Control](/docs/en/remote-control.md) is connected, the footer shows no `f` hint. If pressing `f` closes `/usage` with `Nothing was sent. Turn off Remote Control to use fixes.`, Remote Control connected while `/usage` was open. To use `f` again, [disconnect Remote Control](/docs/en/remote-control.md#check-connection-status), then run `/usage` at the Claude Code prompt and press `f` again.
85While [Remote Control](https://code.claude.com/docs/en/remote-control.md) is connected, the footer shows no `f` hint. If pressing `f` closes `/usage` with `Nothing was sent. Turn off Remote Control to use fixes.`, Remote Control connected while `/usage` was open. To use `f` again, [disconnect Remote Control](https://code.claude.com/docs/en/remote-control.md#check-connection-status), then run `/usage` at the Claude Code prompt and press `f` again.
8686
8787#### Check your usage-credits spend
8888
from line 103
103103
104104While Claude works in the main conversation, the line beside the spinner can end with an elapsed time and a token count, as in `Deciphering… (10m 27s · ↓ 5.5k tokens)`. It is a live, approximate count of the output the current turn has produced so far. The arrow beside the count points down while output arrives or tools run.
105105
106* **What it covers**: output the turn generates, such as the text and tool calls Claude streams back, its thinking, and the output of subagents that run in the [foreground](/docs/en/sub-agents.md#run-subagents-in-foreground-or-background)
106* **What it covers**: output the turn generates, such as the text and tool calls Claude streams back, its thinking, and the output of subagents that run in the [foreground](https://code.claude.com/docs/en/sub-agents.md#run-subagents-in-foreground-or-background)
107107* **What it leaves out**: what Claude Code sends to the model, so your prompt, the conversation history, and the rest of your context don't move it
108* **When it resets**: at the start of each turn, and when Claude Code [compacts the conversation](/docs/en/prompt-caching.md#compacting-the-conversation)
109* **When it stays hidden**: until output starts arriving, when the row is too narrow to fit it, and in [screen reader mode](/docs/en/accessibility.md)
108* **When it resets**: at the start of each turn, and when Claude Code [compacts the conversation](https://code.claude.com/docs/en/prompt-caching.md#compacting-the-conversation)
109* **When it stays hidden**: until output starts arriving, when the row is too narrow to fit it, and in [screen reader mode](https://code.claude.com/docs/en/accessibility.md)
110110
111It won't match the `Usage by model` output figures in the `/usage` Session block, which add up the whole session rather than one turn. It also differs from the token count [verbose mode adds](/docs/en/statusline.md#notifications-share-the-status-line-row), because that count measures the size of your context rather than one turn's output.
111It won't match the `Usage by model` output figures in the `/usage` Session block, which add up the whole session rather than one turn. It also differs from the token count [verbose mode adds](https://code.claude.com/docs/en/statusline.md#notifications-share-the-status-line-row), because that count measures the size of your context rather than one turn's output.
112112
113113### Analyze your usage patterns
114114
115Run [`/insights`](/docs/en/commands#all-commands) for a report on how you work rather than how many tokens you've used. It analyzes your recent sessions on this machine and writes an HTML report covering what you work on, friction points such as misunderstood requests or buggy code, and suggestions for using Claude Code more effectively. A single run analyzes up to 200 sessions it hasn't seen before and skips very short ones. When sessions are left out, the report header shows the analyzed count with the total in parentheses, for example `200 sessions (412 total)`.
115Run [`/insights`](https://code.claude.com/docs/en/commands#all-commands) for a report on how you work rather than how many tokens you've used. It analyzes your recent sessions on this machine and writes an HTML report covering what you work on, friction points such as misunderstood requests or buggy code, and suggestions for using Claude Code more effectively. A single run analyzes up to 200 sessions it hasn't seen before and skips very short ones. When sessions are left out, the report header shows the analyzed count with the total in parentheses, for example `200 sessions (412 total)`.
116116
117When [auto mode](/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) is available to the session and your recent sessions mostly ran without it, the report can also include an estimate of how many permission prompts auto mode could have handled across those sessions.
117When [auto mode](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode) is available to the session and your recent sessions mostly ran without it, the report can also include an estimate of how many permission prompts auto mode could have handled across those sessions.
118118
119Claude Code writes the latest report to `~/.claude/usage-data/report.html` and saves a timestamped copy of each run in the same directory, so earlier reports aren't overwritten. Claude Code deletes reports on the same schedule as the rest of your session data: at startup, it removes files older than [`cleanupPeriodDays`](/docs/en/claude-directory#cleaned-up-automatically), 30 days by default.
119Claude Code writes the latest report to `~/.claude/usage-data/report.html` and saves a timestamped copy of each run in the same directory, so earlier reports aren't overwritten. Claude Code deletes reports on the same schedule as the rest of your session data: at startup, it removes files older than [`cleanupPeriodDays`](https://code.claude.com/docs/en/claude-directory#cleaned-up-automatically), 30 days by default.
120120
121121You can run `/insights` on any plan and with any provider. The analysis runs through the same provider and account as your regular sessions, and the tokens count against your plan or API usage. Sessions from other devices and claude.ai aren't included.
122122
123123### Add usage credits to your subscription
124124
125[Usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) let you keep working past your plan's usage limit. To manage them, run `/usage-credits` after signing in with your claude.ai subscription through `/login`; the command isn't available with API key authentication. In self-serve Enterprise organizations, Enterprise trials, and Enterprise organizations billed through AWS Marketplace, the command requires Claude Code v2.1.248 or later; earlier versions reject it with [`Unknown command: /usage-credits`](/docs/en/errors#unknown-command). What it opens depends on your role:
125[Usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) let you keep working past your plan's usage limit. To manage them, run `/usage-credits` after signing in with your claude.ai subscription through `/login`; the command isn't available with API key authentication. In self-serve Enterprise organizations, Enterprise trials, and Enterprise organizations billed through AWS Marketplace, the command requires Claude Code v2.1.248 or later; earlier versions reject it with [`Unknown command: /usage-credits`](https://code.claude.com/docs/en/errors#unknown-command). What it opens depends on your role:
126126
127127| Your role | What `/usage-credits` does |
128128| :- | :- |
from line 130
130130| Team or Enterprise member with billing access | Opens your organization's usage settings, [**Organization settings > Usage**](https://claude.ai/admin-settings/usage), in the browser |
131131| Team or Enterprise member without billing access | Asks you to confirm, then sends a request to your organization's admins. Before v2.1.211, Claude Code sent the request without a confirmation step |
132132
133For Team and Enterprise members without billing access, the confirmation appears only in interactive sessions: in non-interactive mode with the `-p` flag and from [Remote Control](/docs/en/remote-control.md), the command sends no request and tells you to run it in an interactive session instead.
133For Team and Enterprise members without billing access, the confirmation appears only in interactive sessions: in non-interactive mode with the `-p` flag and from [Remote Control](https://code.claude.com/docs/en/remote-control.md), the command sends no request and tells you to run it in an interactive session instead.
134134
135135If you run `/usage-credits` again while your earlier request is waiting on an admin, Claude Code tells you a request has already been sent rather than sending a duplicate. After an admin dismisses your request, running the command again sends a new one. Before v2.1.222, a dismissed request also blocked new requests.
136136
137On Pro and Max plans, when you reach your spend limit with usage credits still available, Claude Code prompts you to raise or remove the limit without leaving the CLI. If the server rejects the change, see [Could not update your spend limit](/docs/en/errors.md#could-not-update-your-spend-limit).
137On Pro and Max plans, when you reach your spend limit with usage credits still available, Claude Code prompts you to raise or remove the limit without leaving the CLI. If the server rejects the change, see [Could not update your spend limit](https://code.claude.com/docs/en/errors.md#could-not-update-your-spend-limit).
138138
139139## Manage costs for your organization
140140
141141Which controls you have depends on how your organization accesses Claude Code: a Claude for Teams or Enterprise plan, the Claude Console, or a cloud provider. On Teams and Enterprise plans, usage draws from each member's seat allowance. On the Console and on cloud providers, usage is billed per token to your organization. If your organization mixes sign-in methods, each developer is metered according to the one they authenticated with.
142142
143The table maps each setup to where you see spend, where you cap it, and how you pull per-user numbers. On an individual Pro or Max plan you have no organization to manage, so track your own usage-credit spend, including [fast mode](/docs/en/fast-mode.md#see-where-fast-mode-spend-appears), under [Add usage credits to your subscription](#add-usage-credits-to-your-subscription).
143The table maps each setup to where you see spend, where you cap it, and how you pull per-user numbers. On an individual Pro or Max plan you have no organization to manage, so track your own usage-credit spend, including [fast mode](https://code.claude.com/docs/en/fast-mode.md#see-where-fast-mode-spend-appears), under [Add usage credits to your subscription](#add-usage-credits-to-your-subscription).
144144
145145| Your setup | See spend | Cap spend | Per-user reporting |
146146| :- | :- | :- | :- |
147147| [Claude for Teams or Enterprise](#claude-for-teams-and-enterprise) | [Spend report in org analytics](https://support.claude.com/en/articles/12883420-view-usage-analytics-for-team-and-enterprise-plans) | Spend limits in admin settings | [Spend report CSV](https://support.claude.com/en/articles/12883420-view-usage-analytics-for-team-and-enterprise-plans); [Enterprise Analytics API](https://platform.claude.com/docs/en/api/admin/analytics) on Enterprise |
148148| [Claude Console (API)](#claude-console) | [Console usage page](https://platform.claude.com/usage) | Workspace spend limits | [Console dashboard](https://platform.claude.com/claude-code), [Claude Code Analytics API](https://platform.claude.com/docs/en/build-with-claude/claude-code-analytics-api) |
149| [Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry](#cloud-providers) | Your cloud billing console | Your cloud's budget controls | [OpenTelemetry](/docs/en/monitoring-usage.md) or an [LLM gateway](/docs/en/llm-gateway) |
149| [Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry](#cloud-providers) | Your cloud billing console | Your cloud's budget controls | [OpenTelemetry](https://code.claude.com/docs/en/monitoring-usage.md) or an [LLM gateway](https://code.claude.com/docs/en/llm-gateway) |
150150
151[OpenTelemetry export](/docs/en/monitoring-usage.md) works on every setup and is the only option that streams per-user token and cost metrics into your own observability stack in near real time.
151[OpenTelemetry export](https://code.claude.com/docs/en/monitoring-usage.md) works on every setup and is the only option that streams per-user token and cost metrics into your own observability stack in near real time.
152152
153153### Report spend at your contracted rates
154154
155By default, Claude Code computes every cost figure it shows developers at list price, so if your organization pays contracted rates, the figures in `/usage`, the status line, and OpenTelemetry don't match your bill. To make them match, set the [`modelPricing`](/docs/en/settings-reference#modelpricing) managed setting to your rates. The setting changes what Claude Code reports, not what Anthropic charges. Requires Claude Code v2.1.242 or later.
155By default, Claude Code computes every cost figure it shows developers at list price, so if your organization pays contracted rates, the figures in `/usage`, the status line, and OpenTelemetry don't match your bill. To make them match, set the [`modelPricing`](https://code.claude.com/docs/en/settings-reference#modelpricing) managed setting to your rates. The setting changes what Claude Code reports, not what Anthropic charges. Requires Claude Code v2.1.242 or later.
156156
157157**1. Take the rates from your contract**
158158
from line 160
160160
161161**2. Write the setting**
162162
163Set `multiplier` below 1 for a flat discount or above 1 for a markup, list each model's four per-token rates under `overrides`, or do both. A markup requires Claude Code v2.1.271 or later. The [`modelPricing` entry](/docs/en/settings-reference#modelpricing) has the shape and a paste-ready example.
163Set `multiplier` below 1 for a flat discount or above 1 for a markup, list each model's four per-token rates under `overrides`, or do both. A markup requires Claude Code v2.1.271 or later. The [`modelPricing` entry](https://code.claude.com/docs/en/settings-reference#modelpricing) has the shape and a paste-ready example.
164164
165165**3. Deploy it through managed settings**
166166
167Deliver it as [managed settings](/docs/en/managed-settings.md): server-managed settings, an MDM policy, `managed-settings.json`, or a [policy helper](/docs/en/managed-settings.md#compute-the-policy-with-a-helper-program). Claude Code ignores the key in user, project, and local settings and in `--settings`.
167Deliver it as [managed settings](https://code.claude.com/docs/en/managed-settings.md): server-managed settings, an MDM policy, `managed-settings.json`, or a [policy helper](https://code.claude.com/docs/en/managed-settings.md#compute-the-policy-with-a-helper-program). Claude Code ignores the key in user, project, and local settings and in `--settings`.
168168
169To confirm the rates are in effect, run `/usage` in a session that has [received the managed settings](/docs/en/managed-settings.md#read-the-source-in-%2Fstatus): the Session block's `Total cost` line carries the note `at your organization's configured rates`. The figures are still estimates, not an invoice. The per-million-token prices in the `/model` picker stay at list price.
169To confirm the rates are in effect, run `/usage` in a session that has [received the managed settings](https://code.claude.com/docs/en/managed-settings.md#read-the-source-in-%2Fstatus): the Session block's `Total cost` line carries the note `at your organization's configured rates`. The figures are still estimates, not an invoice. The per-million-token prices in the `/model` picker stay at list price.
170170
171171### Claude for Teams and Enterprise
172172
from line 173
173173On Claude for Teams and Enterprise plans, each member's Claude Code usage draws from a per-seat allowance that resets on a rolling five-hour window and a weekly window. The allowance is shared with Claude chat and Cowork, and its size depends on the member's [seat tier](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan) (Standard or Premium). Your controls live in the claude.ai admin console, not the Claude Console.
174174
175175* **See spend**: the [spend report in org analytics](https://support.claude.com/en/articles/12883420-view-usage-analytics-for-team-and-enterprise-plans) shows estimated spend per user and per model, with CSV export, updated daily. The report covers usage-credit spend and appears once usage credits are turned on. Usage inside the seat allowance isn't metered in dollars.
176* **See adoption**: the [analytics dashboard](https://claude.ai/analytics/claude-code) shows daily active users, sessions, and contribution metrics, with CSV export of contribution data. See [track team usage with analytics](/docs/en/analytics.md).
176* **See adoption**: the [analytics dashboard](https://claude.ai/analytics/claude-code) shows daily active users, sessions, and contribution metrics, with CSV export of contribution data. See [track team usage with analytics](https://code.claude.com/docs/en/analytics.md).
177177* **Cap spend**: the seat allowance is the default ceiling. To let members continue past it, turn on [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) and set spend limits at the organization, group, or individual member level.
178178* **Pull per-user numbers**: on the Enterprise plan, the [Enterprise Analytics API](https://platform.claude.com/docs/en/api/admin/analytics) returns per-user usage and cost reports across Claude surfaces, including Claude Code. A Primary Owner creates a key with the `read:analytics` scope at [claude.ai/analytics/api-keys](https://claude.ai/analytics/api-keys). On the Teams plan, export the [spend report CSV](https://support.claude.com/en/articles/12883420-view-usage-analytics-for-team-and-enterprise-plans), which lists token usage and estimated spend per user and per model.
179179
from line 189
189189>
190190> For organizations with custom rate limits, Claude Code traffic in this workspace counts toward your organization's overall API rate limits. You can set a [workspace rate limit](https://platform.claude.com/docs/en/api/rate-limits#setting-lower-limits-for-workspaces) on this workspace's Limits page in the Claude Console to cap Claude Code's share and protect other production workloads.
191191
192For per-user reporting, the [Console dashboard](https://platform.claude.com/claude-code) shows spend and accepted lines per member, and the [Claude Code Analytics API](https://platform.claude.com/docs/en/build-with-claude/claude-code-analytics-api) returns the same daily per-user metrics programmatically with an [Admin API key](https://platform.claude.com/settings/admin-keys). See [analytics for API customers](/docs/en/analytics.md#access-analytics-for-api-customers).
192For per-user reporting, the [Console dashboard](https://platform.claude.com/claude-code) shows spend and accepted lines per member, and the [Claude Code Analytics API](https://platform.claude.com/docs/en/build-with-claude/claude-code-analytics-api) returns the same daily per-user metrics programmatically with an [Admin API key](https://platform.claude.com/settings/admin-keys). See [analytics for API customers](https://code.claude.com/docs/en/analytics.md#access-analytics-for-api-customers).
193193
194194#### Rate limit recommendations
195195
from line 214
214214
215215### Cloud providers
216216
217On Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, Claude Code is billed per token to your cloud account, and spend controls live in your cloud provider's billing console. Claude Code does not send metrics from your cloud back to Anthropic, so the [analytics dashboards](/docs/en/analytics.md) and the Claude Code Analytics API do not cover this usage.
217On Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry, Claude Code is billed per token to your cloud account, and spend controls live in your cloud provider's billing console. Claude Code does not send metrics from your cloud back to Anthropic, so the [analytics dashboards](https://code.claude.com/docs/en/analytics.md) and the Claude Code Analytics API do not cover this usage.
218218
219219For per-user cost attribution, you have three options:
220220
221* **OpenTelemetry**: [export metrics](/docs/en/monitoring-usage.md) from each developer's machine to your own observability stack. This gives you per-user token counts, costs, and tool activity regardless of provider.
222* **A Claude apps gateway**: a self-hosted [Claude apps gateway](/docs/en/claude-apps-gateway) provides per-user usage attribution, OTLP metrics with token counts, and [per-user spend limits](/docs/en/claude-apps-gateway-spend-limits.md) on these providers.
223* **An LLM gateway**: route all Claude Code traffic through a proxy that tracks spend per key. Several large enterprises reported using [LiteLLM](/docs/en/llm-gateway), an open-source tool that [tracks spend by key](https://docs.litellm.ai/docs/proxy/virtual_keys#tracking-spend). This project is unaffiliated with Anthropic and has not been audited for security.
221* **OpenTelemetry**: [export metrics](https://code.claude.com/docs/en/monitoring-usage.md) from each developer's machine to your own observability stack. This gives you per-user token counts, costs, and tool activity regardless of provider.
222* **A Claude apps gateway**: a self-hosted [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway) provides per-user usage attribution, OTLP metrics with token counts, and [per-user spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md) on these providers.
223* **An LLM gateway**: route all Claude Code traffic through a proxy that tracks spend per key. Several large enterprises reported using [LiteLLM](https://code.claude.com/docs/en/llm-gateway), an open-source tool that [tracks spend by key](https://docs.litellm.ai/docs/proxy/virtual_keys#tracking-spend). This project is unaffiliated with Anthropic and has not been audited for security.
224224
225225### When a developer asks about a limit
226226
227227Developers usually bring limit questions to their admin, so it helps to know which ceiling they hit. These situations mean different things:
228228
229* **"You've hit your session limit" or "You've hit your weekly limit"**: a seat-based usage window on a subscription plan, shared across all models, so the developer can't restore access by switching models with `/model`. The message shows when the window resets. After the model-specific "You've hit your Opus limit" or "You've hit your Sonnet limit" message, switching to a model outside that family with `/model` does keep the developer working. See [usage limit errors](/docs/en/errors.md#youve-hit-your-session-limit). What the developer can do in the meantime:
229* **"You've hit your session limit" or "You've hit your weekly limit"**: a seat-based usage window on a subscription plan, shared across all models, so the developer can't restore access by switching models with `/model`. The message shows when the window resets. After the model-specific "You've hit your Opus limit" or "You've hit your Sonnet limit" message, switching to a model outside that family with `/model` does keep the developer working. See [usage limit errors](https://code.claude.com/docs/en/errors.md#youve-hit-your-session-limit). What the developer can do in the meantime:
230230 * Run `/usage-credits` to request usage beyond the allowance, if you have [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) turned on.
231 * On Claude Code v2.1.234 or later, [wait and continue the interrupted task automatically after the reset](/docs/en/interactive-mode.md#wait-for-a-usage-limit-to-reset); that section lists when Claude Code starts the wait on its own and when the developer picks it from `/rate-limit-options`. To control for your fleet whether Claude Code starts that wait on its own, set [`autoContinueAtUsageLimit`](/docs/en/settings-reference#autocontinueatusagelimit) in [managed settings](/docs/en/settings.md#settings-precedence).
232* **"You've hit your individual spend limit", "org's monthly spend limit", or "team's shared budget"**: the developer's request would be billed to usage credits, and those credits have reached a spend limit you set. To let the developer continue, go to [**Organization settings > Usage**](https://claude.ai/admin-settings/usage) and increase the limit the message names. When the message also names a plan reset time, the developer can instead wait until then. See [the error reference](/docs/en/errors.md#youve-hit-your-monthly-spend-limit) for each variant.
233* **A spend limit message from a [Claude apps gateway](/docs/en/claude-apps-gateway)**: the developer passed a spend cap you set on your self-hosted gateway, and the gateway blocks their requests until the period resets or you raise the cap. See [gateway spend limits](/docs/en/claude-apps-gateway-spend-limits.md) for caps, reset schedules, and the message the developer sees.
234* **A context or auto-compact warning**: not a usage limit. The conversation has grown close to the session's [auto-compact window](/docs/en/model-config.md#set-the-auto-compact-window), the threshold where Claude Code summarizes older history to free space. Point the developer at [reduce token usage](#reduce-token-usage).
231 * On Claude Code v2.1.234 or later, [wait and continue the interrupted task automatically after the reset](https://code.claude.com/docs/en/interactive-mode.md#wait-for-a-usage-limit-to-reset); that section lists when Claude Code starts the wait on its own and when the developer picks it from `/rate-limit-options`. To control for your fleet whether Claude Code starts that wait on its own, set [`autoContinueAtUsageLimit`](https://code.claude.com/docs/en/settings-reference#autocontinueatusagelimit) in [managed settings](https://code.claude.com/docs/en/settings.md#settings-precedence).
232* **"You've hit your individual spend limit", "org's monthly spend limit", or "team's shared budget"**: the developer's request would be billed to usage credits, and those credits have reached a spend limit you set. To let the developer continue, go to [**Organization settings > Usage**](https://claude.ai/admin-settings/usage) and increase the limit the message names. When the message also names a plan reset time, the developer can instead wait until then. See [the error reference](https://code.claude.com/docs/en/errors.md#youve-hit-your-monthly-spend-limit) for each variant.
233* **A spend limit message from a [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway)**: the developer passed a spend cap you set on your self-hosted gateway, and the gateway blocks their requests until the period resets or you raise the cap. See [gateway spend limits](https://code.claude.com/docs/en/claude-apps-gateway-spend-limits.md) for caps, reset schedules, and the message the developer sees.
234* **A context or auto-compact warning**: not a usage limit. The conversation has grown close to the session's [auto-compact window](https://code.claude.com/docs/en/model-config.md#set-the-auto-compact-window), the threshold where Claude Code summarizes older history to free space. Point the developer at [reduce token usage](#reduce-token-usage).
235235* **Unexpectedly high spend on an API or cloud-provider plan**: usually traces back to long sessions that were never cleared or to Opus left as the default model. The highest-impact habits to share are clearing between unrelated tasks and matching the model to the job, both covered in [reduce token usage](#reduce-token-usage).
236236
237237### Agent team token costs
238238
239[Agent teams](/docs/en/agent-teams.md) spawn multiple Claude Code instances, each with its own context window. Token usage scales with the number of active teammates and how long each one runs.
239[Agent teams](https://code.claude.com/docs/en/agent-teams.md) spawn multiple Claude Code instances, each with its own context window. Token usage scales with the number of active teammates and how long each one runs.
240240
241241To keep agent team costs manageable:
242242
from line 244
244244* Keep teams small. Each teammate runs its own context window, so token usage is roughly proportional to team size.
245245* Keep spawn prompts focused. Teammates load CLAUDE.md, MCP servers, and skills automatically, but everything in the spawn prompt adds to their context from the start.
246246* Shut down teammates when their work is done. Each active teammate continues consuming tokens until it exits or the session ends.
247* Agent teams are disabled by default. Set `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your [settings.json](/docs/en/settings.md) or environment to enable them. See [enable agent teams](/docs/en/agent-teams.md#enable-agent-teams).
247* Agent teams are disabled by default. Set `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your [settings.json](https://code.claude.com/docs/en/settings.md) or environment to enable them. See [enable agent teams](https://code.claude.com/docs/en/agent-teams.md#enable-agent-teams).
248248
249249## Reduce token usage
250250
251Token costs scale with context size: the more context Claude processes, the more tokens you use. Claude Code automatically optimizes costs through [prompt caching](/docs/en/prompt-caching.md), which reduces costs for repeated content like system prompts, and auto-compaction, which summarizes conversation history when approaching context limits.
251Token costs scale with context size: the more context Claude processes, the more tokens you use. Claude Code automatically optimizes costs through [prompt caching](https://code.claude.com/docs/en/prompt-caching.md), which reduces costs for repeated content like system prompts, and auto-compaction, which summarizes conversation history when approaching context limits.
252252
253253The following strategies help you keep context small and reduce per-message costs.
254254
255255### Manage context proactively
256256
257Use `/usage` to check your current token usage, or [configure your status line](/docs/en/statusline.md#context-window-usage) to display it continuously.
257Use `/usage` to check your current token usage, or [configure your status line](https://code.claude.com/docs/en/statusline.md#context-window-usage) to display it continuously.
258258
259259* **Clear between tasks**: Use `/clear` to start fresh when switching to unrelated work. Stale context wastes tokens on every subsequent message. Use `/rename` before clearing so you can find the session later, then `/resume` to return to it.
260260* **Add custom compaction instructions**: `/compact Focus on code samples and API usage` tells Claude what to preserve during summarization.
from line 269
269269
270270### Choose the right model
271271
272Sonnet handles most coding tasks well and costs less than Opus. Reserve Opus for complex architectural decisions or multi-step reasoning. Use `/model` to switch models mid-session, or set a default in `/config`. A switch to Opus also applies to the [subagents that inherit your session's model](/docs/en/model-config.md#setting-your-model). For simple subagent tasks, specify `model: haiku` in your [subagent configuration](/docs/en/sub-agents.md#choose-a-model).
272Sonnet handles most coding tasks well and costs less than Opus. Reserve Opus for complex architectural decisions or multi-step reasoning. Use `/model` to switch models mid-session, or set a default in `/config`. A switch to Opus also applies to the [subagents that inherit your session's model](https://code.claude.com/docs/en/model-config.md#setting-your-model). For simple subagent tasks, specify `model: haiku` in your [subagent configuration](https://code.claude.com/docs/en/sub-agents.md#choose-a-model).
273273
274274### Reduce MCP server overhead
275275
276MCP tool definitions are [deferred by default](/docs/en/mcp.md#scale-with-mcp-tool-search), so only tool names and server instructions enter context until Claude uses a specific tool. Run `/context` to see what's consuming space.
276MCP tool definitions are [deferred by default](https://code.claude.com/docs/en/mcp.md#scale-with-mcp-tool-search), so only tool names and server instructions enter context until Claude uses a specific tool. Run `/context` to see what's consuming space.
277277
278278* **Prefer CLI tools when available**: Tools like `gh`, `aws`, `gcloud`, and `sentry-cli` are still more context-efficient than MCP servers because they don't add any per-tool listing. Claude can run CLI commands directly.
279279* **Disable unused servers**: Run `/mcp` to see configured servers and disable any you're not actively using.
from line 280
280280
281281### Install code intelligence plugins for typed languages
282282
283[Code intelligence plugins](/docs/en/plugins/code-intelligence.md) give Claude precise symbol navigation instead of text-based search, reducing unnecessary file reads when exploring unfamiliar code. A single "go to definition" call replaces what might otherwise be a grep followed by reading multiple candidate files. Installed language servers also report type errors automatically after edits, so Claude catches mistakes without running a compiler.
283[Code intelligence plugins](https://code.claude.com/docs/en/plugins/code-intelligence.md) give Claude precise symbol navigation instead of text-based search, reducing unnecessary file reads when exploring unfamiliar code. A single "go to definition" call replaces what might otherwise be a grep followed by reading multiple candidate files. Installed language servers also report type errors automatically after edits, so Claude catches mistakes without running a compiler.
284284
285285### Offload processing to hooks and skills
286286
287Custom [hooks](/docs/en/hooks.md) can preprocess data before Claude sees it. Instead of Claude reading a 10,000-line log file to find errors, a hook can grep for `ERROR` and return only matching lines, reducing context from tens of thousands of tokens to hundreds.
287Custom [hooks](https://code.claude.com/docs/en/hooks.md) can preprocess data before Claude sees it. Instead of Claude reading a 10,000-line log file to find errors, a hook can grep for `ERROR` and return only matching lines, reducing context from tens of thousands of tokens to hundreds.
288288
289A [skill](/docs/en/skills.md) can give Claude domain knowledge so it doesn't have to explore. For example, a "codebase-overview" skill could describe your project's architecture, key directories, and naming conventions. When Claude invokes the skill, it gets this context immediately instead of spending tokens reading multiple files to understand the structure.
289A [skill](https://code.claude.com/docs/en/skills.md) can give Claude domain knowledge so it doesn't have to explore. For example, a "codebase-overview" skill could describe your project's architecture, key directories, and naming conventions. When Claude invokes the skill, it gets this context immediately instead of spending tokens reading multiple files to understand the structure.
290290
291291For example, this PreToolUse hook filters test output to show only failures:
292292
293293**settings.json**
294294
295Add this to your [settings.json](/docs/en/settings.md#where-settings-live) to run the hook before every Bash command:
295Add this to your [settings.json](https://code.claude.com/docs/en/settings.md#where-settings-live) to run the hook before every Bash command:
296296
297297```json theme={null}
298298{
from line 336
336336
337337### Move instructions from CLAUDE.md to skills
338338
339Your [CLAUDE.md](/docs/en/memory.md) file is loaded into context at session start. If it contains detailed instructions for specific workflows (like PR reviews or database migrations), those tokens are present even when you're doing unrelated work. [Skills](/docs/en/skills.md) load on-demand only when invoked, so moving specialized instructions into skills keeps your base context smaller. Aim to keep CLAUDE.md under 200 lines by including only essentials.
339Your [CLAUDE.md](https://code.claude.com/docs/en/memory.md) file is loaded into context at session start. If it contains detailed instructions for specific workflows (like PR reviews or database migrations), those tokens are present even when you're doing unrelated work. [Skills](https://code.claude.com/docs/en/skills.md) load on-demand only when invoked, so moving specialized instructions into skills keeps your base context smaller. Aim to keep CLAUDE.md under 200 lines by including only essentials.
340340
341341### Adjust extended thinking
342342
343343Extended thinking is enabled by default because it significantly improves performance on complex planning and reasoning tasks. Thinking tokens are billed as output tokens, and the default budget can be tens of thousands of tokens per request depending on the model.
344344
345For simpler tasks where deep reasoning isn't needed, you can reduce costs by lowering the [effort level](/docs/en/model-config.md#adjust-effort-level) with `/effort` or in `/model`, or by disabling thinking in `/config`. You can't turn off thinking on Opus 5.5, Sonnet 5.5, Haiku 5.5, or the Fable models, which always use extended thinking.
345For simpler tasks where deep reasoning isn't needed, you can reduce costs by lowering the [effort level](https://code.claude.com/docs/en/model-config.md#adjust-effort-level) with `/effort` or in `/model`, or by disabling thinking in `/config`. You can't turn off thinking on Opus 5.5, Sonnet 5.5, Haiku 5.5, or the Fable models, which always use extended thinking.
346346
347On models with a [fixed thinking budget](/docs/en/model-config.md#adaptive-reasoning-and-fixed-thinking-budgets), you can also lower the budget by setting the `MAX_THINKING_TOKENS` [environment variable](/docs/en/env-vars.md), for example `MAX_THINKING_TOKENS=8000`. Adaptive-reasoning models ignore nonzero budgets, so use effort levels there instead.
347On models with a [fixed thinking budget](https://code.claude.com/docs/en/model-config.md#adaptive-reasoning-and-fixed-thinking-budgets), you can also lower the budget by setting the `MAX_THINKING_TOKENS` [environment variable](https://code.claude.com/docs/en/env-vars.md), for example `MAX_THINKING_TOKENS=8000`. Adaptive-reasoning models ignore nonzero budgets, so use effort levels there instead.
348348
349349### Delegate verbose operations to subagents
350350
351Running tests, fetching documentation, or processing log files can consume significant context. Delegate these to [subagents](/docs/en/sub-agents.md#isolate-high-volume-operations) so the verbose output stays in the subagent's context while only a summary returns to your main conversation.
351Running tests, fetching documentation, or processing log files can consume significant context. Delegate these to [subagents](https://code.claude.com/docs/en/sub-agents.md#isolate-high-volume-operations) so the verbose output stays in the subagent's context while only a summary returns to your main conversation.
352352
353The subagent's own requests still draw on your usage. To spend less on them, [choose a smaller model for a subagent](/docs/en/sub-agents.md#choose-a-model) or [run every subagent on one model](/docs/en/sub-agents.md#run-every-subagent-on-one-model).
353The subagent's own requests still draw on your usage. To spend less on them, [choose a smaller model for a subagent](https://code.claude.com/docs/en/sub-agents.md#choose-a-model) or [run every subagent on one model](https://code.claude.com/docs/en/sub-agents.md#run-every-subagent-on-one-model).
354354
355355### Manage agent team costs
356356
357Agent teams use approximately 7x more tokens than standard sessions when teammates run in plan mode, because each teammate maintains its own context window and runs as a separate Claude instance. Keep team tasks small and self-contained to limit per-teammate token usage. See [agent teams](/docs/en/agent-teams.md) for details.
357Agent teams use approximately 7x more tokens than standard sessions when teammates run in plan mode, because each teammate maintains its own context window and runs as a separate Claude instance. Keep team tasks small and self-contained to limit per-teammate token usage. See [agent teams](https://code.claude.com/docs/en/agent-teams.md) for details.
358358
359359### Write specific prompts
360360
from line 364
364364
365365For longer or more complex work, these habits help avoid wasted tokens from going down the wrong path:
366366
367* **Use plan mode for complex tasks**: Press Shift+Tab to cycle to [plan mode](/docs/en/permission-modes.md#analyze-before-you-edit-with-plan-mode) before implementation. Claude explores the codebase and proposes an approach for your approval, preventing expensive re-work when the initial direction is wrong.
367* **Use plan mode for complex tasks**: Press Shift+Tab to cycle to [plan mode](https://code.claude.com/docs/en/permission-modes.md#analyze-before-you-edit-with-plan-mode) before implementation. Claude explores the codebase and proposes an approach for your approval, preventing expensive re-work when the initial direction is wrong.
368368* **Course-correct early**: If Claude starts heading the wrong direction, press Escape to stop immediately. Use `/rewind` or double-tap Escape to restore conversation and code to a previous checkpoint.
369369* **Give verification targets**: Include test cases, paste screenshots, or define expected output in your prompt. When Claude can verify its own work, it catches issues before you need to request fixes.
370370* **Test incrementally**: Write one file, test it, then continue. This catches issues early.
from line 378
378378
379379These background processes consume a small amount of tokens (typically under \$0.04 per session) even without active interaction.
380380
381When prompt suggestions are on, Claude Code also sends a short request to the model your session is using after Claude responds, to [suggest your next prompt](/docs/en/interactive-mode.md#prompt-suggestions). That request reuses the conversation's prompt cache, so it is mostly cache reads plus a few output tokens. Claude Code [skips it while your account is close to or at its usage limit](/docs/en/interactive-mode.md#when-claude-code-skips-suggestions). To stop these requests, [turn prompt suggestions off](/docs/en/interactive-mode.md#turn-prompt-suggestions-off).
381When prompt suggestions are on, Claude Code also sends a short request to the model your session is using after Claude responds, to [suggest your next prompt](https://code.claude.com/docs/en/interactive-mode.md#prompt-suggestions). That request reuses the conversation's prompt cache, so it is mostly cache reads plus a few output tokens. Claude Code [skips it while your account is close to or at its usage limit](https://code.claude.com/docs/en/interactive-mode.md#when-claude-code-skips-suggestions). To stop these requests, [turn prompt suggestions off](https://code.claude.com/docs/en/interactive-mode.md#turn-prompt-suggestions-off).
382382
383383## Why usage climbs in a long session
384384
385385A session that has been open for hours can use far more of your plan limits than your activity suggests, usually for one of these reasons:
386386
387* **Long context**: Claude Code sends your full conversation with every request, and each time Claude uses tools it sends another request carrying that batch of tool results. With [prompt caching](/docs/en/prompt-caching.md), Claude Code re-reads that history at the [cached token rate](https://platform.claude.com/docs/en/about-claude/pricing), so a one-line question in a session that has been open all day still draws usage for the whole conversation. See [Manage context proactively](#manage-context-proactively) for ways to keep your context small
388* **Cache misses**: your first message after a break longer than the [cache lifetime](/docs/en/prompt-caching.md#cache-lifetime) misses the cache and reprocesses your full context. See [which lifetime your requests get](/docs/en/prompt-caching.md#which-ttl-each-request-gets) and [the controls for setting it](/docs/en/prompt-caching.md#choose-the-ttl-yourself)
389* **Scheduled tasks**: a [session-scoped scheduled task](/docs/en/scheduled-tasks.md) fires on its interval even while the session is idle, sending your full context each time
390* **Cross-session messages**: Claude Code delivers a [message from another of your sessions](/docs/en/cross-session-messaging.md) as a new turn when this session sits idle, sending your full context each time. To hold inbound messages instead of delivering them, set [`crossSessionInbound`](/docs/en/settings-reference#crosssessioninbound) to `hold`
391* **Goal check-ins**: while background work keeps an active [goal](/docs/en/goal.md) waiting, Claude Code [asks Claude to check on that work](/docs/en/goal.md#background-work-defers-evaluation) even when the session sits idle, starting a new turn that sends your full context. Claude Code starts at most three idle check-ins per goal between your prompts. Before v2.1.246, idle check-ins were uncapped. To turn check-ins off, set [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/en/env-vars) to `0`. Idle check-ins require Claude Code v2.1.236 or later
392* **Subagents and workflows**: every subagent, and every agent a [dynamic workflow](/docs/en/workflows.md#cost) spawns, sends its own requests on top of the main conversation's. The [attribution breakdown](#plan-usage-breakdown) shows the subagent share
387* **Long context**: Claude Code sends your full conversation with every request, and each time Claude uses tools it sends another request carrying that batch of tool results. With [prompt caching](https://code.claude.com/docs/en/prompt-caching.md), Claude Code re-reads that history at the [cached token rate](https://platform.claude.com/docs/en/about-claude/pricing), so a one-line question in a session that has been open all day still draws usage for the whole conversation. See [Manage context proactively](#manage-context-proactively) for ways to keep your context small
388* **Cache misses**: your first message after a break longer than the [cache lifetime](https://code.claude.com/docs/en/prompt-caching.md#cache-lifetime) misses the cache and reprocesses your full context. See [which lifetime your requests get](https://code.claude.com/docs/en/prompt-caching.md#which-ttl-each-request-gets) and [the controls for setting it](https://code.claude.com/docs/en/prompt-caching.md#choose-the-ttl-yourself)
389* **Scheduled tasks**: a [session-scoped scheduled task](https://code.claude.com/docs/en/scheduled-tasks.md) fires on its interval even while the session is idle, sending your full context each time
390* **Cross-session messages**: Claude Code delivers a [message from another of your sessions](https://code.claude.com/docs/en/cross-session-messaging.md) as a new turn when this session sits idle, sending your full context each time. To hold inbound messages instead of delivering them, set [`crossSessionInbound`](https://code.claude.com/docs/en/settings-reference#crosssessioninbound) to `hold`
391* **Goal check-ins**: while background work keeps an active [goal](https://code.claude.com/docs/en/goal.md) waiting, Claude Code [asks Claude to check on that work](https://code.claude.com/docs/en/goal.md#background-work-defers-evaluation) even when the session sits idle, starting a new turn that sends your full context. Claude Code starts at most three idle check-ins per goal between your prompts. Before v2.1.246, idle check-ins were uncapped. To turn check-ins off, set [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](https://code.claude.com/docs/en/env-vars) to `0`. Idle check-ins require Claude Code v2.1.236 or later
392* **Subagents and workflows**: every subagent, and every agent a [dynamic workflow](https://code.claude.com/docs/en/workflows.md#cost) spawns, sends its own requests on top of the main conversation's. The [attribution breakdown](#plan-usage-breakdown) shows the subagent share
393393* **Agent teammates**: each active [teammate](#agent-team-token-costs) keeps consuming tokens until it exits
394* **Compaction**: `/compact` reads the conversation it summarizes, so [compacting a large context](/docs/en/prompt-caching.md#compacting-the-conversation) is itself a large request. When you want a fresh start instead of continuity, `/clear` costs nothing
394* **Compaction**: `/compact` reads the conversation it summarizes, so [compacting a large context](https://code.claude.com/docs/en/prompt-caching.md#compacting-the-conversation) is itself a large request. When you want a fresh start instead of continuity, `/clear` costs nothing
395395
396396On a Pro, Max, Team, or Enterprise plan, the [`/usage` breakdown](#plan-usage-breakdown) recommends a change for behaviors behind 10% or more of your recent usage, such as long context or cache misses.
397397
cross-session-messaging Changed · +57 / -57 lines
from line 8
88
99Cross-session messaging lets Claude deliver a message from one of your Claude Code sessions to another. When a change in one session breaks what another is building on, Claude can warn that session before you notice. When one session settles a question another is blocked on, Claude can send the answer across.
1010
11A message is a piece of text one Claude writes to another, never the sender's conversation history or files. To move a whole conversation or its context, [resume the session](/docs/en/sessions.md#resume-a-session) instead.
11A message is a piece of text one Claude writes to another, never the sender's conversation history or files. To move a whole conversation or its context, [resume the session](https://code.claude.com/docs/en/sessions.md#resume-a-session) instead.
1212
1313## When to use cross-session messaging
1414
from line 15
1515Use messaging when one of your sessions has something another session needs mid-task. Claude can send a message on its own when it sees the need, for example after making a change that affects work another session is doing, or you can ask it to send one. The common cases:
1616
1717* **Hand over a finding**: when one session discovers a breaking change or makes a decision, Claude summarizes it for the session working on the affected area, instead of you re-explaining it there.
18* **Coordinate parallel worktrees**: when sessions work the same repository in separate [worktrees](/docs/en/worktrees.md), Claude can tell the other sessions what landed.
18* **Coordinate parallel worktrees**: when sessions work the same repository in separate [worktrees](https://code.claude.com/docs/en/worktrees.md), Claude can tell the other sessions what landed.
1919* **Get status from long-running work**: have a migration or test run report back to the session you're watching, or ask it yourself from there. If that session is on this machine, Claude can also [ask it for one notice when it next goes idle or exits](#get-a-notice-when-another-session-goes-idle).
2020* **Message across machines**: reach one of your sessions on another machine or in the cloud.
2121
from line 35
3535Explain what we just did to the session working on the payments API
3636```
3737
38To name the target yourself, mention the session in your prompt: type `@` followed by the first letters of the session's name and pick the session from the typeahead, the same way you [@-mention a subagent](/docs/en/sub-agents.md#invoke-subagents-explicitly). Requires Claude Code v2.1.232 or later. Claude Code inserts the mention, such as `@api-worker`, and tells Claude which session it names, so Claude can message that session without listing your sessions first. This prompt names the target with a mention:
38To name the target yourself, mention the session in your prompt: type `@` followed by the first letters of the session's name and pick the session from the typeahead, the same way you [@-mention a subagent](https://code.claude.com/docs/en/sub-agents.md#invoke-subagents-explicitly). Requires Claude Code v2.1.232 or later. Claude Code inserts the mention, such as `@api-worker`, and tells Claude which session it names, so Claude can message that session without listing your sessions first. This prompt names the target with a mention:
3939
4040```text wrap theme={null}
4141Let @api-worker know the schema migration finished
from line 54
5454
5555The receiving Claude reads the message between tool calls during an active turn, so a running tool is never interrupted. When the receiving session is idle, Claude Code starts a new turn with the message.
5656
57A message from another session arrives as plain text. If it mentions a file or an [MCP resource](/docs/en/mcp.md#use-mcp-resources) with `@`, Claude sees the mention as written and Claude Code attaches nothing, whether the message starts a new turn or arrives during one. Claude can still open a mentioned path on the receiving machine with its own tools, subject to that session's permissions.
57A message from another session arrives as plain text. If it mentions a file or an [MCP resource](https://code.claude.com/docs/en/mcp.md#use-mcp-resources) with `@`, Claude sees the mention as written and Claude Code attaches nothing, whether the message starts a new turn or arrives during one. Claude can still open a mentioned path on the receiving machine with its own tools, subject to that session's permissions.
5858
5959Claude Code refuses a message in the following cases:
6060
from line 61
6161* The message is [over the size cap](#limitations). Claude Code refuses it in the sending session, before it leaves.
6262* A rapid burst to a session on this machine has reached [what that session's inbox accepts](#limitations). Claude Code refuses further messages to that session.
6363* A session beyond this machine is [listed as unable to receive cross-session messages](#message-sessions-on-other-machines). Claude Code refuses the message in the sending session, before it leaves this machine.
64* The reply target on this machine fails a safety check, such as a symlinked target. [Refusing to send a cross-session message](/docs/en/errors.md#refusing-to-send-a-cross-session-message) lists these checks.
64* The reply target on this machine fails a safety check, such as a symlinked target. [Refusing to send a cross-session message](https://code.claude.com/docs/en/errors.md#refusing-to-send-a-cross-session-message) lists these checks.
6565
6666The receiving session checks each arriving message against its own [inbound controls](#control-inbound-messages), and the check ends in one of three outcomes:
6767
from line 69
6969* **Held**: Claude Code sets the message aside undelivered. A held message reaches Claude only when you approve it or a later mode or settings change allows it.
7070* **Refused**: Claude Code drops the message without delivering it.
7171
72Once delivered, the message counts toward [usage](/docs/en/costs.md) like a prompt you type. The receiving Claude can reply to the sender with `SendMessage`, except in the cases under [Replies from other machines and cloud sessions](#replies-from-other-machines-and-cloud-sessions) and [Turn off cross-session messaging](#turn-off-cross-session-messaging).
72Once delivered, the message counts toward [usage](https://code.claude.com/docs/en/costs.md) like a prompt you type. The receiving Claude can reply to the sender with `SendMessage`, except in the cases under [Replies from other machines and cloud sessions](#replies-from-other-machines-and-cloud-sessions) and [Turn off cross-session messaging](#turn-off-cross-session-messaging).
7373
7474Permission boundaries stay per-session. Claude is instructed never to ask another session for an action that was denied or blocked in its own session, or that its own permission settings would block, and to route that work back to you instead. On the receiving side, the [receiving session's own permission prompts and rules still apply](#how-a-session-treats-an-incoming-message) to anything the message asks for.
7575
from line 107
107107Claude finds a message's target on its own, so you don't need to run anything before asking it to send. To see for yourself which sessions Claude can reach, run the `/list-agents` command. The first line, when present, is this session's own name, the one your other sessions use to message it. The rows below it are the sessions Claude can reach:
108108
109109* **Subagents**: agents running inside the current session.
110* **Teammates**: this session's own [agent team](/docs/en/agent-teams.md) teammates.
111* **Your other local sessions**: Claude Code sessions running on the same machine, including [background sessions](/docs/en/agent-view.md). A session appears only when it binds an [inbox socket](#the-sessions-inbox-socket).
112* **Your [cloud sessions](/docs/en/claude-code-on-the-web.md)**: shown while this session is connected to [Remote Control](/docs/en/remote-control.md).
113* **Your Remote Control sessions on other machines**: shown while this session is connected to [Remote Control](/docs/en/remote-control.md), and labeled `Remote Control`. Claude Code shows `offline` as the status of a session whose Remote Control connection has dropped.
110* **Teammates**: this session's own [agent team](https://code.claude.com/docs/en/agent-teams.md) teammates.
111* **Your other local sessions**: Claude Code sessions running on the same machine, including [background sessions](https://code.claude.com/docs/en/agent-view.md). A session appears only when it binds an [inbox socket](#the-sessions-inbox-socket).
112* **Your [cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md)**: shown while this session is connected to [Remote Control](https://code.claude.com/docs/en/remote-control.md).
113* **Your Remote Control sessions on other machines**: shown while this session is connected to [Remote Control](https://code.claude.com/docs/en/remote-control.md), and labeled `Remote Control`. Claude Code shows `offline` as the status of a session whose Remote Control connection has dropped.
114114
115While this session is connected to [Remote Control](/docs/en/remote-control.md), Claude Code withholds some details of your local sessions from the `/list-agents` output, without changing what Claude itself sees when it looks for a session to message:
115While this session is connected to [Remote Control](https://code.claude.com/docs/en/remote-control.md), Claude Code withholds some details of your local sessions from the `/list-agents` output, without changing what Claude itself sees when it looks for a session to message:
116116
117117* **Working directories**: it leaves out each local session's working directory.
118118* **Session names**: it leaves out any session name it can't attribute to a person, so a row left with no name reads `(unnamed session)`.
from line 120
120120
121121When the output lists anything, it ends with a note saying details were withheld. Running `/rename` followed by an unused name at a session's own keyboard gives that session a name that appears in the output.
122122
123A session answers to the name you set with the [`/rename`](/docs/en/commands) command or the [`--name`](/docs/en/cli-reference#cli-flags) flag. When you don't set one, Claude Code names the session itself. For an interactive session, that is the name shown in [listings of running sessions](/docs/en/sessions.md#name-your-sessions).
123A session answers to the name you set with the [`/rename`](https://code.claude.com/docs/en/commands) command or the [`--name`](https://code.claude.com/docs/en/cli-reference#cli-flags) flag. When you don't set one, Claude Code names the session itself. For an interactive session, that is the name shown in [listings of running sessions](https://code.claude.com/docs/en/sessions.md#name-your-sessions).
124124
125125Unless this session is connected to Remote Control, Claude Code shows each local session's working directory in the `/list-agents` output, so you can tell same-named sessions apart when they run in different directories. Claude addresses the message in one of two ways, depending on how many live sessions answer to the name:
126126
from line 134
134134| Where the other session runs | How the message travels |
135135| :- | :- |
136136| On this machine | Over a per-session socket on macOS and Linux, or a per-session named pipe on native Windows, never through Anthropic servers |
137| On another of your machines | Through Anthropic servers, arriving over that machine's [Remote Control](/docs/en/remote-control.md) connection |
138| In the [cloud](/docs/en/claude-code-on-the-web.md) | Through Anthropic servers, straight to the cloud session |
137| On another of your machines | Through Anthropic servers, arriving over that machine's [Remote Control](https://code.claude.com/docs/en/remote-control.md) connection |
138| In the [cloud](https://code.claude.com/docs/en/claude-code-on-the-web.md) | Through Anthropic servers, straight to the cloud session |
139139
140140Starting a conversation with a session on another of your machines requires Claude Code v2.1.225 or later and a target that [appears in the listing](#see-which-sessions-claude-can-reach).
141141
from line 142
142142A session's row in [the listing](#see-which-sessions-claude-can-reach) can show a condition that changes what happens when Claude messages that session:
143143
144144* **`offline`**: that session's Remote Control connection has dropped. The message goes through, but arrives only after that session's machine reconnects.
145* **`can't receive cross-session messages (off in that session)`**: messaging [isn't available](#availability) in that session, or its [`crossSessionInbound`](/docs/en/settings-reference#crosssessioninbound) value is `refuse`. Claude Code refuses a message to that session before the message leaves this machine. The result under Claude's `SendMessage` call begins `Not sent` and names the reason. Once the cause is fixed in that session, a later listing no longer shows this condition, and Claude can message that session.
145* **`can't receive cross-session messages (off in that session)`**: messaging [isn't available](#availability) in that session, or its [`crossSessionInbound`](https://code.claude.com/docs/en/settings-reference#crosssessioninbound) value is `refuse`. Claude Code refuses a message to that session before the message leaves this machine. The result under Claude's `SendMessage` call begins `Not sent` and names the reason. Once the cause is fixed in that session, a later listing no longer shows this condition, and Claude can message that session.
146146
147A session inside a container and a session on the host can't reach each other. Two sessions inside the same container can still message each other, including on a [self-hosted runner](/docs/en/self-hosted-environments). A session inside WSL 2 and a native Windows session on the same computer can't reach each other either.
147A session inside a container and a session on the host can't reach each other. Two sessions inside the same container can still message each other, including on a [self-hosted runner](https://code.claude.com/docs/en/self-hosted-environments). A session inside WSL 2 and a native Windows session on the same computer can't reach each other either.
148148
149149To require your approval before any message goes beyond this machine, set [`isolatePeerMachines`](#require-approval-for-cross-machine-messages).
150150
151151#### Replies from other machines and cloud sessions
152152
153A [cloud session](/docs/en/claude-code-on-the-web.md), including one on a [self-hosted runner](/docs/en/self-hosted-environments), can't use `SendMessage` to answer a message from another machine, even when the message carries a [reply address](#what-a-message-looks-like). The message still arrives. Read the cloud session's response in its transcript at [claude.ai/code](https://claude.ai/code).
153A [cloud session](https://code.claude.com/docs/en/claude-code-on-the-web.md), including one on a [self-hosted runner](https://code.claude.com/docs/en/self-hosted-environments), can't use `SendMessage` to answer a message from another machine, even when the message carries a [reply address](#what-a-message-looks-like). The message still arrives. Read the cloud session's response in its transcript at [claude.ai/code](https://claude.ai/code).
154154
155155If this session isn't connected to Remote Control when Claude sends to a session beyond this machine, the message still goes through, but without a [reply address](#what-a-message-looks-like). The receiving Claude can't answer it.
156156
from line 169
169169
170170Any of these shows you the full text:
171171
172* Press `Ctrl+O` to open the [transcript viewer](/docs/en/interactive-mode.md#transcript-viewer) and read the full text under the sender's session name.
173* In [fullscreen rendering](/docs/en/fullscreen.md#use-the-mouse), click a preview line that leaves part of the message out to expand it in place.
174* In a session started with [`--verbose`](/docs/en/cli-reference#cli-flags), Claude Code shows the full text instead of the preview.
172* Press `Ctrl+O` to open the [transcript viewer](https://code.claude.com/docs/en/interactive-mode.md#transcript-viewer) and read the full text under the sender's session name.
173* In [fullscreen rendering](https://code.claude.com/docs/en/fullscreen.md#use-the-mouse), click a preview line that leaves part of the message out to expand it in place.
174* In a session started with [`--verbose`](https://code.claude.com/docs/en/cli-reference#cli-flags), Claude Code shows the full text instead of the preview.
175175
176176The preview shortens only what you see. Whether or not you expand it, Claude reads the full message.
177177
from line 186
186186
187187### Control inbound messages
188188
189Set [`crossSessionInbound`](/docs/en/settings-reference#crosssessioninbound) to choose what a session does with messages arriving from your other sessions:
189Set [`crossSessionInbound`](https://code.claude.com/docs/en/settings-reference#crosssessioninbound) to choose what a session does with messages arriving from your other sessions:
190190
191191| Value | Behavior |
192192| :- | :- |
193193| `accept` | Claude Code delivers each message to Claude |
194| `hold` | Claude Code shows a notice for each message and doesn't deliver it. If an `accept` later applies, per the [precedence rules](/docs/en/settings-reference.md#crosssessioninbound), Claude Code releases the held messages |
194| `hold` | Claude Code shows a notice for each message and doesn't deliver it. If an `accept` later applies, per the [precedence rules](https://code.claude.com/docs/en/settings-reference.md#crosssessioninbound), Claude Code releases the held messages |
195195| `refuse` | Claude Code drops each message without delivering it |
196196
197197Beyond editing a settings file, you can select the value in the `/config` row **Messages from your other sessions**. Claude Code writes the value you select to your user settings. The row requires Claude Code v2.1.232 or later and doesn't appear while managed settings or the `--settings` flag sets the key, since a user-settings value wouldn't apply then. Claude Code rejects the `/config crossSessionInbound=value` shorthand for this key.
198198
199To see which value applies, follow the `crossSessionInbound` precedence rules in the [settings reference](/docs/en/settings-reference.md#crosssessioninbound).
199To see which value applies, follow the `crossSessionInbound` precedence rules in the [settings reference](https://code.claude.com/docs/en/settings-reference.md#crosssessioninbound).
200200
201When no value applies, Claude Code decides per message from the two sessions' permission modes. It groups sessions that [bypass permission prompts](/docs/en/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) into one class, and every other session into the other. Plan mode counts as bypassing in interactive terminal sessions with bypass permissions available, and [auto](/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode), `acceptEdits`, and `dontAsk` count as prompting:
201When no value applies, Claude Code decides per message from the two sessions' permission modes. It groups sessions that [bypass permission prompts](https://code.claude.com/docs/en/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) into one class, and every other session into the other. Plan mode counts as bypassing in interactive terminal sessions with bypass permissions available, and [auto](https://code.claude.com/docs/en/permission-modes.md#eliminate-prompts-with-auto-mode), `acceptEdits`, and `dontAsk` count as prompting:
202202
203203* **The receiving session prompts for permissions**: Claude Code delivers each message. It holds one for your approval only when the sending session identifies itself as bypassing permission prompts.
204204* **The receiving session bypasses permission prompts**: Claude Code holds each message for your approval. It delivers one only when the sending session identifies itself as also bypassing.
from line 207
207207
208208* **Approve** delivers that one message to Claude.
209209* **Deny**, or dismissing the dialog, drops it.
210* When the dialog stays unanswered past the [`dialogExpiry`](/docs/en/settings-reference#dialogexpiry) deadline, Claude Code closes it and drops the message. The deadline defaults to five minutes.
211* While no terminal is attached to a [background session](/docs/en/agent-view.md), Claude Code leaves the dialog open past the deadline. After you attach, if the dialog stays unanswered for a full deadline period, Claude Code closes it and drops the message.
210* When the dialog stays unanswered past the [`dialogExpiry`](https://code.claude.com/docs/en/settings-reference#dialogexpiry) deadline, Claude Code closes it and drops the message. The deadline defaults to five minutes.
211* While no terminal is attached to a [background session](https://code.claude.com/docs/en/agent-view.md), Claude Code leaves the dialog open past the deadline. After you attach, if the dialog stays unanswered for a full deadline period, Claude Code closes it and drops the message.
212212* If this session's permission-mode class changes while messages are held, Claude Code re-applies the inbound rules, delivers the messages they now accept, and shows a notice.
213213
214214A session in the VS Code extension or the Desktop app can't show the dialog. Claude Code keeps a held message there until the same deadline, as [Non-interactive sessions](#non-interactive-sessions) describes.
from line 217
217217
218218### Non-interactive sessions
219219
220Claude Code binds an inbox socket for a [`claude -p`](/docs/en/headless) session like an interactive one, so a long-running `-p` worker can receive messages and appears in the listing. When you start a session in [bare mode](/docs/en/headless.md#start-faster-with-bare-mode), Claude Code doesn't bind the socket, so that session can't receive messages and doesn't appear in the agent list.
220Claude Code binds an inbox socket for a [`claude -p`](https://code.claude.com/docs/en/headless) session like an interactive one, so a long-running `-p` worker can receive messages and appears in the listing. When you start a session in [bare mode](https://code.claude.com/docs/en/headless.md#start-faster-with-bare-mode), Claude Code doesn't bind the socket, so that session can't receive messages and doesn't appear in the agent list.
221221
222A `-p` session can't show the approval dialog. When the [inbound default](#control-inbound-messages) holds a message there, Claude Code keeps it for the same [`dialogExpiry`](/docs/en/settings-reference#dialogexpiry) deadline the dialog uses, five minutes by default:
222A `-p` session can't show the approval dialog. When the [inbound default](#control-inbound-messages) holds a message there, Claude Code keeps it for the same [`dialogExpiry`](https://code.claude.com/docs/en/settings-reference#dialogexpiry) deadline the dialog uses, five minutes by default:
223223
224224* **Before the deadline**: if a mode or settings change allows the message, Claude Code delivers it.
225225* **Past the deadline**: Claude Code drops the message and reports it as expired to a sender it can reach.
from line 237
237237You can find the socket's path in two places:
238238
239239* `/status` shows it in the `Peer address` row. The path is prefixed with `uds:`.
240* Claude Code exports it to [hooks](/docs/en/hooks.md) and Bash commands as the [`CLAUDE_CODE_MESSAGING_SOCKET`](/docs/en/env-vars#variables) environment variable:
240* Claude Code exports it to [hooks](https://code.claude.com/docs/en/hooks.md) and Bash commands as the [`CLAUDE_CODE_MESSAGING_SOCKET`](https://code.claude.com/docs/en/env-vars#variables) environment variable:
241241 * In a session that starts with messaging on, Claude Code exports the variable before any hook runs, including `SessionStart`.
242242
243243On macOS and Linux, Claude Code restricts the socket to your operating-system user. On native Windows, it instead requires each connection to authenticate first with a key that only your operating-system user can read. Either way, on a shared machine another user's sessions can't deliver to it.
244244
245On macOS and Linux, Claude Code also refuses to create the socket in a directory it can't accept, for example one that another user owns, and uses a private per-user directory, `/tmp/cc-socks-<uid>`, instead. When it can't accept any directory, the session runs without an inbox: Claude Code shows a notice, `/status` shows `unavailable` and the reason in its `Peer address` row, and the [`--debug`](/docs/en/cli-reference#cli-flags) log records the full refusal.
245On macOS and Linux, Claude Code also refuses to create the socket in a directory it can't accept, for example one that another user owns, and uses a private per-user directory, `/tmp/cc-socks-<uid>`, instead. When it can't accept any directory, the session runs without an inbox: Claude Code shows a notice, `/status` shows `unavailable` and the reason in its `Peer address` row, and the [`--debug`](https://code.claude.com/docs/en/cli-reference#cli-flags) log records the full refusal.
246246
247Alongside the socket's path, Claude Code exports a per-session token as [`CLAUDE_CODE_MESSAGING_TOKEN`](/docs/en/env-vars#variables). A script posting to its own session's socket can send `{"type":"auth","token":"<token>"}` as the first line of its connection, where `<token>` is the value of `CLAUDE_CODE_MESSAGING_TOKEN`. Whether Claude Code requires the line depends on the platform:
247Alongside the socket's path, Claude Code exports a per-session token as [`CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/en/env-vars#variables). A script posting to its own session's socket can send `{"type":"auth","token":"<token>"}` as the first line of its connection, where `<token>` is the value of `CLAUDE_CODE_MESSAGING_TOKEN`. Whether Claude Code requires the line depends on the platform:
248248
249249* **macOS and Linux, including WSL 2**: the line is optional. Claude Code accepts a connection with or without it.
250250* **Native Windows**: the line is required. Claude Code closes any connection whose first line isn't a valid auth line and delivers nothing from that connection.
from line 255
255255
256256* **Own-child messages**: when no `crossSessionInbound` value applies, Claude Code delivers a message it verifies came from the session's own child processes, such as a hook or Bash command posting back to its own session's socket.
257257 * On Linux, including inside WSL 2, Claude Code can verify by process evidence even for a child that has already exited. On macOS it can verify that way only while the posting process is still running, and in a container where Claude Code runs as process ID 1 it has no process evidence at all. On native Windows it also has none.
258 * On macOS after the posting process has exited and in containers where Claude Code runs as process ID 1, that process evidence is missing, and Claude Code instead verifies a child that sent the session's exported [`CLAUDE_CODE_MESSAGING_TOKEN`](/docs/en/env-vars#variables) in the auth line that opened its connection. On native Windows, that token is the only way Claude Code verifies an own-child message.
258 * On macOS after the posting process has exited and in containers where Claude Code runs as process ID 1, that process evidence is missing, and Claude Code instead verifies a child that sent the session's exported [`CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/en/env-vars#variables) in the auth line that opened its connection. On native Windows, that token is the only way Claude Code verifies an own-child message.
259259 * When Claude Code can verify neither way, it treats the message like any other that asserts no permission class, so a session that bypasses permission prompts holds it for your approval.
260* **Sandboxed sessions**: control whether a Bash command can reach the socket from inside the [sandbox](/docs/en/sandboxing.md) with the sandbox's Unix-socket settings, [`sandbox.network.allowAllUnixSockets` and `sandbox.network.allowUnixSockets`](/docs/en/settings-reference#sandbox-settings).
260* **Sandboxed sessions**: control whether a Bash command can reach the socket from inside the [sandbox](https://code.claude.com/docs/en/sandboxing.md) with the sandbox's Unix-socket settings, [`sandbox.network.allowAllUnixSockets` and `sandbox.network.allowUnixSockets`](https://code.claude.com/docs/en/settings-reference#sandbox-settings).
261261
262262## Restrict cross-session messaging
263263
from line 265
265265
266266### Require approval for cross-machine messages
267267
268Set [`isolatePeerMachines`](/docs/en/settings-reference#isolatepeermachines) to `true` to require your explicit approval before any `SendMessage` reaches a session beyond this machine:
268Set [`isolatePeerMachines`](https://code.claude.com/docs/en/settings-reference#isolatepeermachines) to `true` to require your explicit approval before any `SendMessage` reaches a session beyond this machine:
269269
270270```json theme={null}
271271{
from line 280
280280Receiving and sending are separate controls, so turn off whichever direction you need, or both. Use `crossSessionInbound` for messages that arrive, and permission rules for what Claude here can send or list:
281281
282282* **Stop receiving**: set `crossSessionInbound` to `refuse`, and Claude Code drops inbound peer messages without delivering them. From project or local settings, `refuse` applies over every other source, and from your user settings it applies unless managed settings or the `--settings` flag set a value.
283* **Stop sending and listing**: add [permission deny rules](/docs/en/permissions.md#tool-specific-permission-rules) naming `SendMessage` and `ListAgents`. Both take the bare tool name with no specifier.
283* **Stop sending and listing**: add [permission deny rules](https://code.claude.com/docs/en/permissions.md#tool-specific-permission-rules) naming `SendMessage` and `ListAgents`. Both take the bare tool name with no specifier.
284284
285Administrators can turn both sides off for an organization in [managed settings](/docs/en/managed-settings.md), combining the deny rules with the `refuse`:
285Administrators can turn both sides off for an organization in [managed settings](https://code.claude.com/docs/en/managed-settings.md), combining the deny rules with the `refuse`:
286286
287287```json theme={null}
288288{
from line 301
301301
302302* **Operating system**: available on macOS, Windows, and Linux, including Linux inside WSL 2.
303303
304* **Sessions on this machine**: available on every provider, including Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, and Microsoft Foundry, and in sessions that run with [feature-flag fetching](/docs/en/env-vars.md#features-that-need-feature-flag-fetching) off. On those providers, and with flag fetching off, same-machine messaging requires Claude Code v2.1.248 or later. Claude Code delivers these messages over a [per-session socket on your machine](#the-sessions-inbox-socket), never through Anthropic servers.
304* **Sessions on this machine**: available on every provider, including Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, and Microsoft Foundry, and in sessions that run with [feature-flag fetching](https://code.claude.com/docs/en/env-vars.md#features-that-need-feature-flag-fetching) off. On those providers, and with flag fetching off, same-machine messaging requires Claude Code v2.1.248 or later. Claude Code delivers these messages over a [per-session socket on your machine](#the-sessions-inbox-socket), never through Anthropic servers.
305305
306306 To stop a session from receiving them, set [`crossSessionInbound`](#turn-off-cross-session-messaging) to `refuse`.
307307
308* **Sessions beyond this machine**: Claude finds your [cloud sessions](/docs/en/claude-code-on-the-web.md) and your sessions on other machines from a session that is connected to Remote Control, which needs a claude.ai sign-in as this session's active authentication and the other [Remote Control requirements](/docs/en/remote-control.md#requirements). Claude can't find those sessions with an API key or on Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, and Microsoft Foundry.
308* **Sessions beyond this machine**: Claude finds your [cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md) and your sessions on other machines from a session that is connected to Remote Control, which needs a claude.ai sign-in as this session's active authentication and the other [Remote Control requirements](https://code.claude.com/docs/en/remote-control.md#requirements). Claude can't find those sessions with an API key or on Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, and Microsoft Foundry.
309309
310310To check a session, type `/list-agents`, also available as `/peers`. The result separates a session that doesn't have the feature from a session where something narrower blocked a message, such as a missing `SendMessage` tool or a refused send:
311311
from line 313
313313* **`/list-agents` works but a send didn't arrive**: messaging is on, and something narrower applies:
314314 * **Deny rules**: a [permission deny rule](#turn-off-cross-session-messaging) removes the `SendMessage` and `ListAgents` tools.
315315 * **Inbound controls**: the [receiving session's inbound controls](#control-inbound-messages) can hold or drop what you send it.
316 * **Cloud session missing**: a cloud session appears only while this session is connected to [Remote Control](/docs/en/remote-control.md).
317 * **Other-machine session missing**: a session on another of your machines appears only when it runs with [Remote Control](/docs/en/remote-control.md) and this session is connected as well.
316 * **Cloud session missing**: a cloud session appears only while this session is connected to [Remote Control](https://code.claude.com/docs/en/remote-control.md).
317 * **Other-machine session missing**: a session on another of your machines appears only when it runs with [Remote Control](https://code.claude.com/docs/en/remote-control.md) and this session is connected as well.
318318 * **Other-machine session `offline`**: a message to a session listed as `offline` goes through, but [arrives only after that session's machine reconnects](#message-sessions-on-other-machines).
319319 * **Cloud or other-machine session `can't receive cross-session messages`**: a message to a session listed with this condition [doesn't leave this machine](#message-sessions-on-other-machines), and the result under `SendMessage` begins `Not sent`.
320320 * **Older cloud or other-machine session missing**: Claude Code reads those session lists newest first and stops after a bounded number of pages, so Claude can't message a session that fell past them by name.
from line 325
325325
326326The limits here are properties of the messaging channel itself and apply wherever the feature runs. For platform and provider gaps, see [Availability](#availability) instead.
327327
328* **Plain text only**: Claude sends only plain text across sessions. Structured [agent team](/docs/en/agent-teams.md) protocol messages stay within a team.
329* **Same-machine message size is capped**: Claude Code refuses a message to a session on this machine once its serialized form passes about a million characters. The refusal [names the exact sizes](/docs/en/errors.md#message-too-large-for-cross-session-delivery). Nothing reaches the receiving session.
330* **Rapid bursts to one session are refused at the sender**: once a rapid burst of messages to a session on this machine reaches what that session's inbox accepts, Claude Code refuses further sends in the sending session. The [refusal names the burst](/docs/en/errors.md#too-many-messages-to-this-session-just-now) and tells Claude to batch the rest into one message or wait.
328* **Plain text only**: Claude sends only plain text across sessions. Structured [agent team](https://code.claude.com/docs/en/agent-teams.md) protocol messages stay within a team.
329* **Same-machine message size is capped**: Claude Code refuses a message to a session on this machine once its serialized form passes about a million characters. The refusal [names the exact sizes](https://code.claude.com/docs/en/errors.md#message-too-large-for-cross-session-delivery). Nothing reaches the receiving session.
330* **Rapid bursts to one session are refused at the sender**: once a rapid burst of messages to a session on this machine reaches what that session's inbox accepts, Claude Code refuses further sends in the sending session. The [refusal names the burst](https://code.claude.com/docs/en/errors.md#too-many-messages-to-this-session-just-now) and tells Claude to batch the rest into one message or wait.
331331* **Message loops are throttled**: in the receiving session, Claude Code rate-limits repeated messages per sender, drops identical repeats arriving within a short window, and queues at most 50 accepted messages for Claude to read. A message loop between two sessions therefore stops on its own.
332332
333333## Related resources
334334
335* [Subagents](/docs/en/sub-agents.md#resume-subagents) and [agent teams](/docs/en/agent-teams.md#messages-between-agents): messaging within a single session or team
336* [Background agents](/docs/en/agent-view.md): dispatch and monitor the parallel sessions you might message
337* [Remote Control](/docs/en/remote-control.md): connect this session to reach your sessions on other machines
338* [Channels](/docs/en/channels.md): push external events, such as CI results or chat messages, into a session
339* [Settings](/docs/en/settings-reference.md#all-settings): `crossSessionInbound`, `isolatePeerMachines`, and `dialogExpiry`
340* [Permission modes](/docs/en/permission-modes.md): the modes behind the inbound default's two classes
341* [Tools reference](/docs/en/tools-reference.md): the `ListAgents` and `SendMessage` rows in the tools table
342* [Run agents in parallel](/docs/en/agents.md): compare the ways Claude Code runs multiple agents
335* [Subagents](https://code.claude.com/docs/en/sub-agents.md#resume-subagents) and [agent teams](https://code.claude.com/docs/en/agent-teams.md#messages-between-agents): messaging within a single session or team
336* [Background agents](https://code.claude.com/docs/en/agent-view.md): dispatch and monitor the parallel sessions you might message
337* [Remote Control](https://code.claude.com/docs/en/remote-control.md): connect this session to reach your sessions on other machines
338* [Channels](https://code.claude.com/docs/en/channels.md): push external events, such as CI results or chat messages, into a session
339* [Settings](https://code.claude.com/docs/en/settings-reference.md#all-settings): `crossSessionInbound`, `isolatePeerMachines`, and `dialogExpiry`
340* [Permission modes](https://code.claude.com/docs/en/permission-modes.md): the modes behind the inbound default's two classes
341* [Tools reference](https://code.claude.com/docs/en/tools-reference.md): the `ListAgents` and `SendMessage` rows in the tools table
342* [Run agents in parallel](https://code.claude.com/docs/en/agents.md): compare the ways Claude Code runs multiple agents
343343
data-usage Changed · +18 / -18 lines
from line 19
1919
2020If you choose to send us feedback about Claude Code using the `/feedback` command, we may use your feedback to improve our products and services. Transcripts shared via `/feedback`, or via `/bug` and `/share`, which report through the same path, are retained for 5 years.
2121
22With [Claude-drafted feedback](/docs/en/tools-reference.md#sendfeedback-tool-behavior), Claude can also draft a feedback report and queue it on your machine for you to review. Claude Code sends nothing until you choose to send the draft, and a sent draft goes through the same submission path and retention as other `/feedback` reports.
22With [Claude-drafted feedback](https://code.claude.com/docs/en/tools-reference.md#sendfeedback-tool-behavior), Claude can also draft a feedback report and queue it on your machine for you to review. Claude Code sends nothing until you choose to send the draft, and a sent draft goes through the same submission path and retention as other `/feedback` reports.
2323
2424### Session quality surveys
2525
from line 27
2727
2828After the rating prompt, you may see a separate follow-up asking "Can Anthropic look at your session transcript to help us improve Claude Code?". This is an optional second step distinct from the rating:
2929
30* **Yes**: uploads your conversation transcript, any subagent transcripts, and the raw session log file from disk to Anthropic. Known API key and token patterns are redacted before upload. Source code, file contents, and other conversation content are uploaded as-is. Shared transcripts are retained for up to 6 months. On Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, and signed-in [Claude apps gateway](/docs/en/claude-apps-gateway) sessions, Yes writes the same payload to a local archive under `~/.claude/feedback-bundles/` instead of uploading; nothing leaves your machine until you forward that file.
30* **Yes**: uploads your conversation transcript, any subagent transcripts, and the raw session log file from disk to Anthropic. Known API key and token patterns are redacted before upload. Source code, file contents, and other conversation content are uploaded as-is. Shared transcripts are retained for up to 6 months. On Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, and signed-in [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway) sessions, Yes writes the same payload to a local archive under `~/.claude/feedback-bundles/` instead of uploading; nothing leaves your machine until you forward that file.
3131* **No**: declines without sending anything
3232* **Don't ask again**: declines and stops this follow-up from appearing in future sessions
3333
34Nothing is uploaded unless you explicitly select **Yes**. Organizations with [zero data retention](/docs/en/zero-data-retention.md), or where product feedback is disabled by organization policy, or where `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set, never see this follow-up. Your responses to this survey, including session transcripts submitted after the rating prompt, do not impact your data training preferences and cannot be used to train our AI models.
34Nothing is uploaded unless you explicitly select **Yes**. Organizations with [zero data retention](https://code.claude.com/docs/en/zero-data-retention.md), or where product feedback is disabled by organization policy, or where `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set, never see this follow-up. Your responses to this survey, including session transcripts submitted after the rating prompt, do not impact your data training preferences and cannot be used to train our AI models.
3535
36To disable these surveys, set `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. The survey is also disabled when `DISABLE_TELEMETRY`, `DO_NOT_TRACK`, or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set. Organizations that block nonessential traffic but capture survey responses through their own [OpenTelemetry collector](/docs/en/monitoring-usage.md) can opt the survey back in by setting `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL=1`. The survey then logs ratings to the configured collector only. The transcript-share follow-up and all other Anthropic-bound feedback traffic stay disabled. To control frequency instead of disabling, set [`feedbackSurveyRate`](/docs/en/settings-reference#feedbacksurveyrate) in your settings file to a probability between `0` and `1`.
36To disable these surveys, set `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. The survey is also disabled when `DISABLE_TELEMETRY`, `DO_NOT_TRACK`, or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set. Organizations that block nonessential traffic but capture survey responses through their own [OpenTelemetry collector](https://code.claude.com/docs/en/monitoring-usage.md) can opt the survey back in by setting `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL=1`. The survey then logs ratings to the configured collector only. The transcript-share follow-up and all other Anthropic-bound feedback traffic stay disabled. To control frequency instead of disabling, set [`feedbackSurveyRate`](https://code.claude.com/docs/en/settings-reference#feedbacksurveyrate) in your settings file to a probability between `0` and `1`.
3737
3838### Data retention
3939
from line 48
4848**Commercial users (Team, Enterprise, and API)**:
4949
5050* Standard: 30-day retention period
51* [Zero data retention](/docs/en/zero-data-retention.md): available to qualified accounts for Claude Code on Claude for Enterprise. ZDR is not included in the standard Enterprise plan; it is enabled on a per-organization basis by your account team after confirming eligibility
52* Local caching: Claude Code clients store session transcripts locally in plaintext under `~/.claude/projects/` for 30 days by default to enable session resumption. Adjust the period with `cleanupPeriodDays`. See [application data](/docs/en/claude-directory.md#application-data) for what's stored and how to clear it.
51* [Zero data retention](https://code.claude.com/docs/en/zero-data-retention.md): available to qualified accounts for Claude Code on Claude for Enterprise. ZDR is not included in the standard Enterprise plan; it is enabled on a per-organization basis by your account team after confirming eligibility
52* Local caching: Claude Code clients store session transcripts locally in plaintext under `~/.claude/projects/` for 30 days by default to enable session resumption. Adjust the period with `cleanupPeriodDays`. See [application data](https://code.claude.com/docs/en/claude-directory.md#application-data) for what's stored and how to clear it.
5353
54 Transcripts of sessions started or most recently continued in Claude Desktop or Cowork are [exempt from that limit by default](/docs/en/claude-directory.md#cleaned-up-automatically).
54 Transcripts of sessions started or most recently continued in Claude Desktop or Cowork are [exempt from that limit by default](https://code.claude.com/docs/en/claude-directory.md#cleaned-up-automatically).
5555
56You can delete individual cloud sessions at any time. Deleting a session permanently removes the session's event data. For instructions on how to delete sessions, see [Delete sessions](/docs/en/claude-code-on-the-web.md#delete-sessions).
56You can delete individual cloud sessions at any time. Deleting a session permanently removes the session's event data. For instructions on how to delete sessions, see [Delete sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md#delete-sessions).
5757
5858Learn more about data retention practices in our [Privacy Center](https://privacy.anthropic.com/).
5959
from line 61
6161
6262## Data access
6363
64For all first party users, you can learn more about what data is logged for [local Claude Code](#local-claude-code-data-flow-and-dependencies) and [remote Claude Code](#cloud-execution-data-flow-and-dependencies). [Remote Control](/docs/en/remote-control.md) sessions follow the local data flow since all execution happens on your machine; while connected, the session transcript is also stored on Anthropic servers to sync the conversation across devices, as described in [Connection and security](/docs/en/remote-control.md#connection-and-security). Note for remote Claude Code, Claude accesses the repository where you initiate your Claude Code session. Claude does not access repositories that you have connected but have not started a session in.
64For all first party users, you can learn more about what data is logged for [local Claude Code](#local-claude-code-data-flow-and-dependencies) and [remote Claude Code](#cloud-execution-data-flow-and-dependencies). [Remote Control](https://code.claude.com/docs/en/remote-control.md) sessions follow the local data flow since all execution happens on your machine; while connected, the session transcript is also stored on Anthropic servers to sync the conversation across devices, as described in [Connection and security](https://code.claude.com/docs/en/remote-control.md#connection-and-security). Note for remote Claude Code, Claude accesses the repository where you initiate your Claude Code session. Claude does not access repositories that you have connected but have not started a session in.
6565
6666## Local Claude Code: Data flow and dependencies
6767
from line 75
7575
7676| Provider | Encryption at rest |
7777| - | - |
78| Anthropic API | Infrastructure-level disk encryption (AES-256). Enable [Zero Data Retention](/docs/en/zero-data-retention.md) for no server-side persistence. |
78| Anthropic API | Infrastructure-level disk encryption (AES-256). Enable [Zero Data Retention](https://code.claude.com/docs/en/zero-data-retention.md) for no server-side persistence. |
7979| Amazon Bedrock | AES-256 with AWS-managed keys. Customer-managed keys available via AWS KMS. |
8080| Google Cloud's Agent Platform | Google-managed encryption keys. CMEK available. |
8181| Microsoft Foundry | Depends on the deployment's [hosting option](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options). For Hosted on Azure deployments, prompts and completions remain within Azure; only usage metadata and content flagged by Anthropic's safety systems egress to Anthropic. For Hosted on Anthropic deployments, requests route to Anthropic infrastructure with AES-256 disk encryption. |
from line 84
8484
8585### Cloud execution: Data flow and dependencies
8686
87[Cloud sessions](/docs/en/claude-code-on-the-web.md) run in Anthropic-managed virtual machines by default instead of locally. Sessions your organization routes to a [self-hosted environment](/docs/en/self-hosted-environments) run on infrastructure you control; for what stays on your machines and what still goes to Anthropic, see [What stays on your infrastructure](/docs/en/self-hosted-environments#what-stays-on-your-infrastructure). In Anthropic-hosted cloud sessions:
87[Cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web.md) run in Anthropic-managed virtual machines by default instead of locally. Sessions your organization routes to a [self-hosted environment](https://code.claude.com/docs/en/self-hosted-environments) run on infrastructure you control; for what stays on your machines and what still goes to Anthropic, see [What stays on your infrastructure](https://code.claude.com/docs/en/self-hosted-environments#what-stays-on-your-infrastructure). In Anthropic-hosted cloud sessions:
8888
8989* **Code and data storage:** Your repository is cloned into the session's isolated VM. Anthropic stores the session transcript so you can return to the session later. Code and session data are subject to the [retention and usage policies](#data-retention) for your account type
9090* **Credentials:** GitHub credentials are stored encrypted on Anthropic's servers and never enter the VM. GitHub traffic from the VM goes through an Anthropic proxy that attaches them on the server side
from line 91
9191* **Network traffic:** All outbound traffic goes through a security proxy for audit logging and abuse prevention
9292* **Session data:** Prompts, code changes, and outputs follow the same data policies as local Claude Code usage
9393
94For security details about cloud execution, see [Security](/docs/en/security.md#cloud-execution-security).
94For security details about cloud execution, see [Security](https://code.claude.com/docs/en/security.md#cloud-execution-security).
9595
9696## Telemetry services
9797
98Claude Code sends two kinds of operational telemetry: usage metrics and error reports. You can turn each off individually with the environment variables below, or disable all non-essential traffic at once by setting `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Setting `DISABLE_TELEMETRY` or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` also disables feature-flag evaluation, which can make [Remote Control](/docs/en/remote-control.md#requirements) unavailable; `DISABLE_ERROR_REPORTING` doesn't.
98Claude Code sends two kinds of operational telemetry: usage metrics and error reports. You can turn each off individually with the environment variables below, or disable all non-essential traffic at once by setting `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Setting `DISABLE_TELEMETRY` or `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` also disables feature-flag evaluation, which can make [Remote Control](https://code.claude.com/docs/en/remote-control.md#requirements) unavailable; `DISABLE_ERROR_REPORTING` doesn't.
9999
100100**Metrics**: latency, reliability, and usage patterns, sent to Anthropic and to third-party logging infrastructure over TLS. Metrics never include your code, prompts, or file paths. Set `DISABLE_TELEMETRY=1` to opt out.
101101
from line 108
108108* you're connecting directly to the Claude API
109109* your organization doesn't have a zero data retention or HIPAA agreement
110110
111When you run the `/feedback` command, a copy of your conversation history including code is sent to Anthropic. The `/bug` and `/share` commands submit through the same path. Before submitting a report from the feedback dialog, you choose how much history to include: the current session only, which is the default, or also other sessions from the same project over the last 24 hours or 7 days. Claude Code submits [Claude-drafted feedback](/docs/en/tools-reference.md#sendfeedback-tool-behavior) through the same path, including the transcript when you chose to include it on the draft's review screen. The data is encrypted in transit via TLS and stored in Google Cloud Storage, which encrypts stored data at rest by default. Optionally, a GitHub issue is created in the public repository. To opt out, set the `DISABLE_FEEDBACK_COMMAND` environment variable to `1`.
111When you run the `/feedback` command, a copy of your conversation history including code is sent to Anthropic. The `/bug` and `/share` commands submit through the same path. Before submitting a report from the feedback dialog, you choose how much history to include: the current session only, which is the default, or also other sessions from the same project over the last 24 hours or 7 days. Claude Code submits [Claude-drafted feedback](https://code.claude.com/docs/en/tools-reference.md#sendfeedback-tool-behavior) through the same path, including the transcript when you chose to include it on the draft's review screen. The data is encrypted in transit via TLS and stored in Google Cloud Storage, which encrypts stored data at rest by default. Optionally, a GitHub issue is created in the public repository. To opt out, set the `DISABLE_FEEDBACK_COMMAND` environment variable to `1`.
112112
113113When you use a third-party provider such as Amazon Bedrock or Google Cloud's Agent Platform, or have no Anthropic credentials configured, `/feedback` writes the report to a local archive under `~/.claude/feedback-bundles/` instead of sending it to Anthropic. Known API key and token patterns are redacted before the archive is written. Nothing leaves your machine until you send that file to your Anthropic account representative or attach it to a support request.
114114
115115## Default behaviors by API provider
116116
117By default, error reporting, telemetry, and bug reporting are disabled when using Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, or Claude Platform on AWS. Session quality surveys and the WebFetch domain safety check are exceptions and run regardless of provider. On a signed-in [Claude apps gateway](/docs/en/claude-apps-gateway) session, usage analytics, error reporting, and survey ratings to Anthropic are disabled by the gateway credential itself, with no setting to re-enable them. You can opt out of all non-essential traffic, including surveys, at once by setting `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. This variable doesn't affect the WebFetch check or official plugin marketplace auto-install; each has its own opt-out: `skipWebFetchPreflight` in [settings](/docs/en/settings.md) for WebFetch, and `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` for the marketplace. Here are the full default behaviors:
117By default, error reporting, telemetry, and bug reporting are disabled when using Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, or Claude Platform on AWS. Session quality surveys and the WebFetch domain safety check are exceptions and run regardless of provider. On a signed-in [Claude apps gateway](https://code.claude.com/docs/en/claude-apps-gateway) session, usage analytics, error reporting, and survey ratings to Anthropic are disabled by the gateway credential itself, with no setting to re-enable them. You can opt out of all non-essential traffic, including surveys, at once by setting `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. This variable doesn't affect the WebFetch check or official plugin marketplace auto-install; each has its own opt-out: `skipWebFetchPreflight` in [settings](https://code.claude.com/docs/en/settings.md) for WebFetch, and `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` for the marketplace. Here are the full default behaviors:
118118
119119| Service | Claude API | Google Cloud's Agent Platform API | Amazon Bedrock API | Microsoft Foundry API | Claude Platform on AWS |
120120| - | - | - | - | - | - |
from line 122
122122| **Error reports** | On for Pro and Max sign-ins on v2.1.198+, otherwise off. `DISABLE_ERROR_REPORTING=1` to disable. | Default off. `CLAUDE_CODE_USE_VERTEX` must be 1. | Default off. `CLAUDE_CODE_USE_BEDROCK` must be 1. | Default off. `CLAUDE_CODE_USE_FOUNDRY` must be 1. | Default off. `CLAUDE_CODE_USE_ANTHROPIC_AWS` must be 1. |
123123| **Claude API (`/feedback` reports)** | Default on. `DISABLE_FEEDBACK_COMMAND=1` to disable. | Default off. `CLAUDE_CODE_USE_VERTEX` must be 1. | Default off. `CLAUDE_CODE_USE_BEDROCK` must be 1. | Default off. `CLAUDE_CODE_USE_FOUNDRY` must be 1. | Default off. `CLAUDE_CODE_USE_ANTHROPIC_AWS` must be 1. |
124124| **Session quality surveys** | Default on. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. |
125| **WebFetch domain safety check** | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md) to disable. |
125| **WebFetch domain safety check** | Default on. `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md) to disable. |
126126
127All environment variables can be checked into `settings.json` (see [settings reference](/docs/en/settings-reference.md)).
127All environment variables can be checked into `settings.json` (see [settings reference](https://code.claude.com/docs/en/settings-reference.md)).
128128
129129When a host platform sets `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`, metrics default to on for Google Cloud's Agent Platform, Amazon Bedrock, Microsoft Foundry, and Claude Platform on AWS, and follow the standard `DISABLE_TELEMETRY` opt-out. Error reporting and `/feedback` reports remain off by default on those providers.
130130
from line 132
132132
133133Before fetching a URL, the WebFetch tool sends the requested hostname to `api.anthropic.com` to check it against a safety blocklist maintained by Anthropic. Only the hostname is sent, not the full URL, path, or page contents. Claude Code caches a hostname that passes the check for five minutes, and re-checks a blocked or failed hostname on the next request.
134134
135This check runs regardless of which model provider you use and is not affected by `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. If your network blocks `api.anthropic.com`, WebFetch requests fail until you either allowlist the domain or set `skipWebFetchPreflight: true` in [settings](/docs/en/settings.md). Disabling the check means WebFetch attempts to retrieve any URL without consulting the blocklist, so combine it with [`WebFetch` permission rules](/docs/en/permissions#webfetch) if you need to restrict which domains Claude can reach.
135This check runs regardless of which model provider you use and is not affected by `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. If your network blocks `api.anthropic.com`, WebFetch requests fail until you either allowlist the domain or set `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/en/settings.md). Disabling the check means WebFetch attempts to retrieve any URL without consulting the blocklist, so combine it with [`WebFetch` permission rules](https://code.claude.com/docs/en/permissions#webfetch) if you need to restrict which domains Claude can reach.
136136
debug-your-config Changed · +34 / -34 lines
from line 4
44
55When Claude ignores an instruction or a feature you configured doesn't appear, the cause is usually that the file didn't load, it loaded from a different location than you expected, or another file overrode it. This guide shows how to inspect what Claude Code actually loaded so you can narrow down which applies.
66
7For installation, authentication, and connectivity problems, see [Troubleshoot installation and login](/docs/en/troubleshoot-install.md) instead.
7For installation, authentication, and connectivity problems, see [Troubleshoot installation and login](https://code.claude.com/docs/en/troubleshoot-install.md) instead.
88
99## See what loaded into context
1010
11The `/context` command shows everything occupying the context window for the current session, broken down by category: system prompt, system tools, MCP tools, custom subagents with the source each loaded from, memory files, skills, and conversation messages. Run it first to confirm whether your `CLAUDE.md`, rules, or skill descriptions are present at all. The skills section in `/context` also includes [bundled skills](/docs/en/skills.md#bundled-skills), which `/skills` doesn't list.
11The `/context` command shows everything occupying the context window for the current session, broken down by category: system prompt, system tools, MCP tools, custom subagents with the source each loaded from, memory files, skills, and conversation messages. Run it first to confirm whether your `CLAUDE.md`, rules, or skill descriptions are present at all. The skills section in `/context` also includes [bundled skills](https://code.claude.com/docs/en/skills.md#bundled-skills), which `/skills` doesn't list.
1212
1313For detail on a specific category, follow up with the dedicated command:
1414
from line 19
1919| `/hooks` | Active hook configurations |
2020| `/mcp` | Connected MCP servers and their status |
2121| `/permissions` | Resolved allow and deny rules currently in effect |
22| `/doctor` | Setup checkup: installation health, invalid settings files, unused extensions, duplicate [subagent](/docs/en/sub-agents.md) names in the same directory, and checked-in `CLAUDE.md` content Claude can derive from the codebase, with proposed fixes |
22| `/doctor` | Setup checkup: installation health, invalid settings files, unused extensions, duplicate [subagent](https://code.claude.com/docs/en/sub-agents.md) names in the same directory, and checked-in `CLAUDE.md` content Claude can derive from the codebase, with proposed fixes |
2323| `/debug [issue]` | Enables debug logging for the session and prompts Claude to diagnose using the log output and settings paths |
2424| `/status` | Active settings sources, including whether managed settings are in effect |
2525
26If a memory file is missing from the `/context` breakdown, check its location against [how CLAUDE.md files load](/docs/en/memory.md#how-claude-md-files-load). Subdirectory `CLAUDE.md` files load on demand rather than at session start, so they don't appear in that breakdown.
26If a memory file is missing from the `/context` breakdown, check its location against [how CLAUDE.md files load](https://code.claude.com/docs/en/memory.md#how-claude-md-files-load). Subdirectory `CLAUDE.md` files load on demand rather than at session start, so they don't appear in that breakdown.
2727
2828If `/context` confirms the file loaded but Claude still isn't following a particular instruction, the issue is likely how the instruction is written rather than whether it loaded. CLAUDE.md works well for the kinds of guidance you'd give a new teammate, such as project conventions, build commands, and where files belong.
2929
30Adherence drops when an instruction is vague enough to interpret multiple ways, when two files give conflicting direction, or when the file has grown long enough that individual rules get less attention. [Write effective instructions](/docs/en/memory.md#write-effective-instructions) covers the specificity, size, and structure patterns that keep adherence high.
30Adherence drops when an instruction is vague enough to interpret multiple ways, when two files give conflicting direction, or when the file has grown long enough that individual rules get less attention. [Write effective instructions](https://code.claude.com/docs/en/memory.md#write-effective-instructions) covers the specificity, size, and structure patterns that keep adherence high.
3131
3232> [!NOTE]
3333>
34> CLAUDE.md and permissions solve different problems. CLAUDE.md tells Claude how your project works so it makes good decisions. [Permissions](/docs/en/permissions.md) and [hooks](/docs/en/hooks.md) enforce limits regardless of what Claude decides. Use CLAUDE.md for "we do it this way here." Use permissions or hooks for security boundaries and anything that must never happen, where you need a guarantee instead of guidance.
34> CLAUDE.md and permissions solve different problems. CLAUDE.md tells Claude how your project works so it makes good decisions. [Permissions](https://code.claude.com/docs/en/permissions.md) and [hooks](https://code.claude.com/docs/en/hooks.md) enforce limits regardless of what Claude decides. Use CLAUDE.md for "we do it this way here." Use permissions or hooks for security boundaries and anything that must never happen, where you need a guarantee instead of guidance.
3535
3636## Check resolved settings
3737
38Settings merge across managed, user, project, and local scopes. Managed settings apply first when present. Among the rest, the closer scope overrides the broader one in the order local, then project, then user. Some settings can also be set by command-line flags or [environment variables](/docs/en/env-vars.md), which act as another override layer. When a setting doesn't seem to apply, the value you set is usually being overridden by another scope or an environment variable.
38Settings merge across managed, user, project, and local scopes. Managed settings apply first when present. Among the rest, the closer scope overrides the broader one in the order local, then project, then user. Some settings can also be set by command-line flags or [environment variables](https://code.claude.com/docs/en/env-vars.md), which act as another override layer. When a setting doesn't seem to apply, the value you set is usually being overridden by another scope or an environment variable.
3939
40To find invalid settings files, run `claude doctor` from your terminal. It prints read-only installation and settings diagnostics without starting a session. For a full checkup that also proposes fixes and asks before applying them, run [`/doctor`](/docs/en/commands#all-commands) inside a session.
40To find invalid settings files, run `claude doctor` from your terminal. It prints read-only installation and settings diagnostics without starting a session. For a full checkup that also proposes fixes and asks before applying them, run [`/doctor`](https://code.claude.com/docs/en/commands#all-commands) inside a session.
4141
42Run `/status` to see which settings sources are active, including whether managed settings are in effect. To understand which scope Claude Code uses for a given key, see [Settings precedence](/docs/en/settings.md#settings-precedence).
42Run `/status` to see which settings sources are active, including whether managed settings are in effect. To understand which scope Claude Code uses for a given key, see [Settings precedence](https://code.claude.com/docs/en/settings.md#settings-precedence).
4343
4444## Check MCP servers
4545
from line 49
4949* A server that fails to start shows as failed in `/mcp`. Relative file paths in `command` or `args` are a frequent cause, since they resolve against the directory you launched Claude Code from rather than the location of `.mcp.json`.
5050* A server that shows as connected but lists zero tools has started successfully but isn't returning a tool list. Select **Reconnect** from `/mcp`. If the count stays at zero, run `claude --debug=mcp` and read the server's stderr in the debug log at `~/.claude/debug/<session-id>.txt`.
5151
52For configuration locations and scope rules, see [MCP](/docs/en/mcp.md).
52For configuration locations and scope rules, see [MCP](https://code.claude.com/docs/en/mcp.md).
5353
5454## Check hooks
5555
5656Run `/hooks` to list every hook registered for the current session, grouped by event. If a hook you defined doesn't appear, Claude Code didn't load it. Check for these causes:
5757
58* The hook is defined in a standalone file. Hooks go under the `"hooks"` key in a [settings file](/docs/en/settings.md#settings-files).
58* The hook is defined in a standalone file. Hooks go under the `"hooks"` key in a [settings file](https://code.claude.com/docs/en/settings.md#settings-files).
5959* The `matcher` value is an array instead of a single string. Claude Code lists the entry as an invalid setting when you start an interactive session and in `claude doctor`. If the array is under `PreToolUse` or `PermissionRequest`, none of that file's other hooks load either.
60* The hook is in a skill's frontmatter, and neither you nor Claude has invoked the skill yet in this session. Invoke it or ask Claude to, then run `/hooks` again. If the hook still doesn't appear, check for other causes, such as [frontmatter that didn't parse](/docs/en/skills.md#skill-not-triggering) or one of the [limits on skill hooks](/docs/en/hooks.md#limits-on-skill-hooks).
60* The hook is in a skill's frontmatter, and neither you nor Claude has invoked the skill yet in this session. Invoke it or ask Claude to, then run `/hooks` again. If the hook still doesn't appear, check for other causes, such as [frontmatter that didn't parse](https://code.claude.com/docs/en/skills.md#skill-not-triggering) or one of the [limits on skill hooks](https://code.claude.com/docs/en/hooks.md#limits-on-skill-hooks).
6161
6262If the hook appears but doesn't fire, the matcher is the usual cause. Check it for these mistakes:
6363
from line 68
6868
6969If `/hooks` still shows the old definition a few seconds after you save, run `/hooks` again to refresh the view.
7070
71If `/hooks` shows the hook but it still does not fire, the next step is to watch hook evaluation live. Start a session with `claude --debug` and trigger the tool call. The debug log records each event, which matchers were checked, and the hook's exit code and output. See [Debug hooks](/docs/en/hooks.md#debug-hooks) for the log format and [hooks troubleshooting](/docs/en/hooks-guide.md#limitations-and-troubleshooting) for common failure patterns.
71If `/hooks` shows the hook but it still does not fire, the next step is to watch hook evaluation live. Start a session with `claude --debug` and trigger the tool call. The debug log records each event, which matchers were checked, and the hook's exit code and output. See [Debug hooks](https://code.claude.com/docs/en/hooks.md#debug-hooks) for the log format and [hooks troubleshooting](https://code.claude.com/docs/en/hooks-guide.md#limitations-and-troubleshooting) for common failure patterns.
7272
7373## Test against a clean configuration
7474
75Start with [`claude --safe-mode`](/docs/en/cli-reference#cli-flags), which launches a session with your customizations disabled, including:
75Start with [`claude --safe-mode`](https://code.claude.com/docs/en/cli-reference#cli-flags), which launches a session with your customizations disabled, including:
7676
7777* `CLAUDE.md`
7878* Skills, plugins, and hooks
from line 106
106106
107107**2. Start Claude Code with a clean configuration directory**
108108
109From the same shell, set [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars) to a fresh directory in place of `~/.claude`, and pass [`--setting-sources user`](/docs/en/cli-reference#cli-flags) to turn off project configuration such as `.claude/settings.json`, `CLAUDE.md`, and `.mcp.json`:
109From the same shell, set [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/en/env-vars) to a fresh directory in place of `~/.claude`, and pass [`--setting-sources user`](https://code.claude.com/docs/en/cli-reference#cli-flags) to turn off project configuration such as `.claude/settings.json`, `CLAUDE.md`, and `.mcp.json`:
110110
111111**Bash or Zsh**
112112
from line 125
125125claude --setting-sources user
126126```
127127
128On the first launch, you go through the first-run setup screens again, a sign that the clean configuration directory is in effect. Managed settings still apply, and [connectors](/docs/en/mcp.md#use-mcp-servers-from-claude-ai) still load if you log in with a claude.ai account.
128On the first launch, you go through the first-run setup screens again, a sign that the clean configuration directory is in effect. Managed settings still apply, and [connectors](https://code.claude.com/docs/en/mcp.md#use-mcp-servers-from-claude-ai) still load if you log in with a claude.ai account.
129129
130130**3. Reproduce the problem**
131131
from line 132
132132Repeat what triggered the problem in the clean session:
133133
134134* **Problem gone**: the cause is in your user or project configuration. Copy `~/.claude.json` and the files in `~/.claude` into `~/claude-clean/config` one at a time. If none brings the problem back, go to your project directory in the same shell and start Claude Code without `--setting-sources user`. In Bash or Zsh, run `CLAUDE_CONFIG_DIR=~/claude-clean/config claude`. In PowerShell, the variable is still set, so run `claude`.
135* **Problem persists**: the cause is outside your user and project configuration. Run `/status` in the session to check for managed settings, check your shell for [environment variables](/docs/en/env-vars.md), then see [Troubleshooting](/docs/en/troubleshooting.md).
135* **Problem persists**: the cause is outside your user and project configuration. Run `/status` in the session to check for managed settings, check your shell for [environment variables](https://code.claude.com/docs/en/env-vars.md), then see [Troubleshooting](https://code.claude.com/docs/en/troubleshooting.md).
136136
137137## Check common causes
138138
from line 140
140140
141141| Symptom | Cause | Fix |
142142| :- | :- | :- |
143| Hook never fires | `matcher` is a JSON array instead of a string | Use a single string with `\|` to match multiple tools, for example `"Edit\|Write"`. See [matcher patterns](/docs/en/hooks.md#matcher-patterns). |
143| Hook never fires | `matcher` is a JSON array instead of a string | Use a single string with `\|` to match multiple tools, for example `"Edit\|Write"`. See [matcher patterns](https://code.claude.com/docs/en/hooks.md#matcher-patterns). |
144144| Hook never fires | `matcher` uses `,` as a separator on a version before v2.1.191 | Claude Code v2.1.191 or later treats `,` as a list separator like `\|`. Earlier versions evaluate a comma as a literal character, so `"Edit,Write"` matches nothing. Use `\|` instead, or upgrade Claude Code. |
145145| Hook never fires | `matcher` value is lowercase, for example `"bash"` | Matching is case-sensitive. Tool names are capitalized: `Bash`, `Edit`, `Write`, `Read`. |
146| Hook never fires | Hooks are defined in a standalone file instead of `settings.json` | There is no standalone hooks file for project or user config. Define hooks under the `"hooks"` key in `settings.json`. Only [plugins](/docs/en/plugins/components.md#hooks) load a separate `hooks/hooks.json`. See [hook configuration](/docs/en/hooks.md). |
146| Hook never fires | Hooks are defined in a standalone file instead of `settings.json` | There is no standalone hooks file for project or user config. Define hooks under the `"hooks"` key in `settings.json`. Only [plugins](https://code.claude.com/docs/en/plugins/components.md#hooks) load a separate `hooks/hooks.json`. See [hook configuration](https://code.claude.com/docs/en/hooks.md). |
147147| Permissions or hooks set globally are ignored | Configuration was added to `~/.claude.json` | `~/.claude.json` holds app state and UI toggles. `permissions`, `hooks`, and `env` belong in `~/.claude/settings.json`. These are two different files. |
148| A `settings.json` value seems ignored | The same key is set in `settings.local.json` | `settings.local.json` overrides `settings.json`, and both override `~/.claude/settings.json`. See [settings precedence](/docs/en/settings.md#settings-precedence). |
148| A `settings.json` value seems ignored | The same key is set in `settings.local.json` | `settings.local.json` overrides `settings.json`, and both override `~/.claude/settings.json`. See [settings precedence](https://code.claude.com/docs/en/settings.md#settings-precedence). |
149149| Skill doesn't appear in `/skills` | Skill file is at `.claude/skills/name.md` instead of in a folder | Use a folder with `SKILL.md` inside: `.claude/skills/name/SKILL.md`. |
150| Skill appears in `/skills` but Claude never invokes it | Skill has `disable-model-invocation: true` in its frontmatter, or its description doesn't match how you phrase the request | Check the badge in `/skills`: a "user-only" label means Claude won't trigger it on its own. See [skill invocation](/docs/en/skills.md). |
151| Subdirectory `CLAUDE.md` instructions seem ignored | Subdirectory files load on demand, not at session start | To load a subdirectory's `CLAUDE.md`, ask Claude to read another file in that subdirectory. See [when subdirectory files load](/docs/en/memory.md#how-claude-md-files-load). |
152| Subagent ignores `CLAUDE.md` instructions | The built-in Explore and Plan agents skip `CLAUDE.md` at startup. A custom subagent loads it the same way the main conversation does, unless it has [`omitClaudeMd`](/docs/en/sub-agents#supported-frontmatter-fields) set in its definition | For Explore or Plan, restate the instruction in your delegating prompt. For a subagent that sets `omitClaudeMd`, remove the field. For any other custom subagent, put critical instructions in the agent file body, which becomes the agent's system prompt. See [what loads at startup](/docs/en/sub-agents.md#what-loads-at-startup). |
153| Cleanup logic never runs at session end | No `SessionEnd` hook configured | Add a `SessionEnd` hook in `settings.json`. See the [hook events list](/docs/en/hooks.md#hook-events). |
154| MCP servers in `.mcp.json` never load | File is under `.claude/`, or its servers sit under a top-level `servers` key, as in VS Code's `mcp.json`, instead of `mcpServers` | Project MCP config goes at the repository root as `.mcp.json`, not inside `.claude/`, with servers under the `mcpServers` key. See [MCP configuration](/docs/en/mcp.md). |
155| MCP servers added under `mcpServers` in `settings.json` never appear | `settings.json` does not read an `mcpServers` key | Define project servers in `.mcp.json` at the repository root, or run `claude mcp add --scope user` for user-scoped servers. See [MCP configuration](/docs/en/mcp.md). |
150| Skill appears in `/skills` but Claude never invokes it | Skill has `disable-model-invocation: true` in its frontmatter, or its description doesn't match how you phrase the request | Check the badge in `/skills`: a "user-only" label means Claude won't trigger it on its own. See [skill invocation](https://code.claude.com/docs/en/skills.md). |
151| Subdirectory `CLAUDE.md` instructions seem ignored | Subdirectory files load on demand, not at session start | To load a subdirectory's `CLAUDE.md`, ask Claude to read another file in that subdirectory. See [when subdirectory files load](https://code.claude.com/docs/en/memory.md#how-claude-md-files-load). |
152| Subagent ignores `CLAUDE.md` instructions | The built-in Explore and Plan agents skip `CLAUDE.md` at startup. A custom subagent loads it the same way the main conversation does, unless it has [`omitClaudeMd`](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields) set in its definition | For Explore or Plan, restate the instruction in your delegating prompt. For a subagent that sets `omitClaudeMd`, remove the field. For any other custom subagent, put critical instructions in the agent file body, which becomes the agent's system prompt. See [what loads at startup](https://code.claude.com/docs/en/sub-agents.md#what-loads-at-startup). |
153| Cleanup logic never runs at session end | No `SessionEnd` hook configured | Add a `SessionEnd` hook in `settings.json`. See the [hook events list](https://code.claude.com/docs/en/hooks.md#hook-events). |
154| MCP servers in `.mcp.json` never load | File is under `.claude/`, or its servers sit under a top-level `servers` key, as in VS Code's `mcp.json`, instead of `mcpServers` | Project MCP config goes at the repository root as `.mcp.json`, not inside `.claude/`, with servers under the `mcpServers` key. See [MCP configuration](https://code.claude.com/docs/en/mcp.md). |
155| MCP servers added under `mcpServers` in `settings.json` never appear | `settings.json` does not read an `mcpServers` key | Define project servers in `.mcp.json` at the repository root, or run `claude mcp add --scope user` for user-scoped servers. See [MCP configuration](https://code.claude.com/docs/en/mcp.md). |
156156| Project MCP server added but doesn't appear | The one-time approval prompt was dismissed | Project-scoped servers require approval. Run `/mcp` to see status and approve. |
157157| MCP server fails to start from some directories | `command` or `args` uses a relative file path | Use absolute paths for local scripts. Executables on your `PATH` like `npx` or `uvx` work as-is. |
158| MCP server starts without expected environment variables | The server's config entry doesn't set them, and they aren't in the environment Claude Code passes to stdio servers: its own environment, minus the [variables it strips from subprocesses](/docs/en/monitoring-usage.md#administrator-configuration) | Set per-server `env` inside the server's `.mcp.json` entry, which doesn't depend on the launch environment or workspace trust. |
159| `Bash(rm *)` deny rule doesn't block `/bin/rm` or `find -delete` | Bash rules match the literal command string, not the underlying executable; see [what a Bash rule doesn't match](/docs/en/permissions.md#bash-rule-limits) | Use a [PreToolUse hook](/docs/en/hooks-guide.md) or the [sandbox](/docs/en/sandboxing.md) for a hard guarantee. |
158| MCP server starts without expected environment variables | The server's config entry doesn't set them, and they aren't in the environment Claude Code passes to stdio servers: its own environment, minus the [variables it strips from subprocesses](https://code.claude.com/docs/en/monitoring-usage.md#administrator-configuration) | Set per-server `env` inside the server's `.mcp.json` entry, which doesn't depend on the launch environment or workspace trust. |
159| `Bash(rm *)` deny rule doesn't block `/bin/rm` or `find -delete` | Bash rules match the literal command string, not the underlying executable; see [what a Bash rule doesn't match](https://code.claude.com/docs/en/permissions.md#bash-rule-limits) | Use a [PreToolUse hook](https://code.claude.com/docs/en/hooks-guide.md) or the [sandbox](https://code.claude.com/docs/en/sandboxing.md) for a hard guarantee. |
160160
161161## Related resources
162162
163163For full reference on each configuration surface, see the dedicated page:
164164
165* **[`.claude` directory reference](/docs/en/claude-directory)**: every config file location and what reads it
166* **[Settings](/docs/en/settings.md)**: which file to use and which value Claude Code uses; the [settings reference](/docs/en/settings-reference.md) has the full key list
167* **[Hooks reference](/docs/en/hooks.md)**: event names, payloads, and `--debug` output format
168* **[MCP](/docs/en/mcp.md)**: server configuration, approval, and `/mcp` output
169* **[Troubleshoot installation and login](/docs/en/troubleshoot-install.md)**: `command not found`, PATH, and authentication problems
170* **[Troubleshooting](/docs/en/troubleshooting.md)**: performance, hangs, and search issues
165* **[`.claude` directory reference](https://code.claude.com/docs/en/claude-directory)**: every config file location and what reads it
166* **[Settings](https://code.claude.com/docs/en/settings.md)**: which file to use and which value Claude Code uses; the [settings reference](https://code.claude.com/docs/en/settings-reference.md) has the full key list
167* **[Hooks reference](https://code.claude.com/docs/en/hooks.md)**: event names, payloads, and `--debug` output format
168* **[MCP](https://code.claude.com/docs/en/mcp.md)**: server configuration, approval, and `/mcp` output
169* **[Troubleshoot installation and login](https://code.claude.com/docs/en/troubleshoot-install.md)**: `command not found`, PATH, and authentication problems
170* **[Troubleshooting](https://code.claude.com/docs/en/troubleshooting.md)**: performance, hangs, and search issues
171171