Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One capture · claude-code

One read of Claude Code CLIclaude-code-20261020T183702Z

212 pages moved out of 228 read.

Pages moved 212 significant first
Pages read 228 in this capture
Captured 18:37 UTC
Corpus hash f4a7dc09bf09 corpus-hash

What this read moved

51-75 of 212, page 3 of 9

This capture is too large to show at once. Changes 51-75 of 212 are below, significant first; the rest are on the following screens.

claude-apps-gateway-deploy Changed · +15 / -15 lines

from line 2
22 
33> Register the gateway with your IdP, build the container, deploy on Kubernetes or Cloud Run, and operate it: health checks, secret rotation, upgrades, and security.
44 
5<Info>
6 **Plan your gateway's network first.** At sign-in, Claude Code refuses a Claude apps gateway whose hostname resolves to a public IP address, even one the internet can't reach.
5> [!NOTE]
6>
7> **Plan your gateway's network first.** At sign-in, Claude Code refuses a Claude apps gateway whose hostname resolves to a public IP address, even one the internet can't reach.
8>
9> A Claude apps gateway can push settings to users' machines, including hooks that run shell commands. The check helps keep users from accidentally signing in to a malicious gateway on the public internet. Keep your own gateway off the internet too.
10>
11> 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.
712 
8 A Claude apps gateway can push settings to users' machines, including hooks that run shell commands. The check helps keep users from accidentally signing in to a malicious gateway on the public internet. Keep your own gateway off the internet too.
9 
10 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.
11</Info>
12 
1313This 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).
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.
from line 39
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`.
4040* **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 }`.
4141 
42<Warning>
43 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.
42> [!WARNING]
43>
44> 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.
45>
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.
4447 
45 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</Warning>
47 
4848## Deployment
4949 
5050The gateway is a single stateless Linux binary that coordinates through Postgres, so deploy it the way you deploy any other stateless service in your environment. Keep it inside your network, where your developers can reach it over HTTPS and it can reach your IdP, and treat it like any service holding a production credential.
from line 193
193193 
194194If you autoscale on CPU, a replica at the limit queues requests without triggering a scale-out, so set the target below the CPU level your replicas show when they log the `client requests are open` warning.
195195 
196<Warning>
197 Every open request holds memory in the gateway process while it streams and while it waits for a slot. If you keep the limit at 256, memory on an overloaded replica still grows, because waiting requests keep their request bodies. Size the container's memory for the number of requests open at peak, and watch memory when you change the limit. A replica that runs out of memory is killed and drops every stream it holds.
198</Warning>
196> [!WARNING]
197>
198> Every open request holds memory in the gateway process while it streams and while it waits for a slot. If you keep the limit at 256, memory on an overloaded replica still grows, because waiting requests keep their request bodies. Size the container's memory for the number of requests open at peak, and watch memory when you change the limit. A replica that runs out of memory is killed and drops every stream it holds.
199199 
200200### Outage behavior
201201 

claude-apps-gateway-on-aws Changed · +407 / -413 lines

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 2
22 
33> A worked example of running Claude apps gateway on AWS: ECS Fargate or EKS, Amazon RDS for PostgreSQL, AWS Secrets Manager, and IAM-role auth to Amazon Bedrock.
44 
5<Note>
6 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).
7</Note>
5> [!NOTE]
6>
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).
88 
99This 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#identity-provider-setup) for per-IdP details.
1010 
11<Note>
12 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#claude-platform-on-aws) covers what changes, and the rest of this page applies unchanged.
13</Note>
11> [!NOTE]
12>
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#claude-platform-on-aws) covers what changes, and the rest of this page applies unchanged.
1414 
1515## Architecture
1616 
17<Frame caption="The example architecture, with Amazon Bedrock as the model upstream. A Claude Platform on AWS upstream occupies the same position.">
18 <img src="https://mintcdn.com/claude-code/PHweeRmDUYEKff49/images/claude-gateway-aws-architecture.svg?fit=max&auto=format&n=PHweeRmDUYEKff49&q=85&s=8599cc34aa28522cde208ee831439bb4" alt="Diagram of Claude apps gateway on AWS: Claude Code clients connect over HTTPS to an internal Application Load Balancer fronting the gateway (ECS Fargate or EKS), which runs in private subnets alongside an Amazon RDS for PostgreSQL instance for session state. The gateway signs users in via OIDC against the corporate IdP, reads secrets from AWS Secrets Manager, forwards model requests to Amazon Bedrock using its IAM role, and pulls its image from Amazon ECR at deploy." width="820" height="430" data-path="images/claude-gateway-aws-architecture.svg" />
19</Frame>
17![Diagram of Claude apps gateway on AWS: Claude Code clients connect over HTTPS to an internal Application Load Balancer fronting the gateway (ECS Fargate or EKS), which runs in private subnets alongside an Amazon RDS for PostgreSQL instance for session state. The gateway signs users in via OIDC against the corporate IdP, reads secrets from AWS Secrets Manager, forwards model requests to Amazon Bedrock using its IAM role, and pulls its image from Amazon ECR at deploy.](https://mintcdn.com/claude-code/PHweeRmDUYEKff49/images/claude-gateway-aws-architecture.svg?fit=max\&auto=format\&n=PHweeRmDUYEKff49\&q=85\&s=8599cc34aa28522cde208ee831439bb4)
2018 
2119The gateway runs as a private HTTPS endpoint on your network that developers sign in to through your IdP. Their Claude Code sessions reach Claude models on Amazon Bedrock through the gateway's IAM role, so no model credentials land on developer machines. The reference configuration provisions:
2220 
from line 61
6361 
6462The steps below provision the full deployment with `aws` commands.
6563 
66<Steps>
67 <Step title="Create the security groups">
68 Three security groups chain the traffic path: your corporate network reaches the load balancer on 443, the load balancer reaches the gateway on 8080, and the gateway reaches Postgres on 5432. Nothing else is reachable. How you attach them depends on the compute track:
69 
70 * On ECS Fargate, the deploy step attaches `$ALB_SG` to the load balancer and `$GW_SG` to the service.
71 * On EKS, the AWS Load Balancer Controller creates its own frontend security group for the ALB, so `$ALB_SG` and `$GW_SG` go unused: the deploy step's `inbound-cidrs` annotation restricts the listener to your corporate network, and the database security group admits the cluster's security group instead.
72 
73 ```bash theme={null}
74 ALB_SG="$(aws ec2 create-security-group --group-name claude-gateway-alb \
75 --description "Claude gateway ALB" --vpc-id "$VPC_ID" \
76 --query GroupId --output text)"
77 GW_SG="$(aws ec2 create-security-group --group-name claude-gateway-svc \
78 --description "Claude gateway service" --vpc-id "$VPC_ID" \
79 --query GroupId --output text)"
80 DB_SG="$(aws ec2 create-security-group --group-name claude-gateway-db \
81 --description "Claude gateway Postgres" --vpc-id "$VPC_ID" \
82 --query GroupId --output text)"
83 
84 aws ec2 authorize-security-group-ingress --group-id "$ALB_SG" \
85 --protocol tcp --port 443 --cidr <your-corporate-cidr>
86 aws ec2 authorize-security-group-ingress --group-id "$GW_SG" \
87 --protocol tcp --port 8080 --source-group "$ALB_SG"
88 aws ec2 authorize-security-group-ingress --group-id "$DB_SG" \
89 --protocol tcp --port 5432 --source-group "$GW_SG"
90 ```
91 </Step>
92 
93 <Step title="Create the IAM roles and submit the use case form">
94 The 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#amazon-bedrock), the policy must cover both the cross-region inference-profile ARNs and the underlying foundation-model ARNs:
95 
96 ```bash theme={null}
97 cat > bedrock-invoke.json <<EOF
64**1. Create the security groups**
65 
66Three security groups chain the traffic path: your corporate network reaches the load balancer on 443, the load balancer reaches the gateway on 8080, and the gateway reaches Postgres on 5432. Nothing else is reachable. How you attach them depends on the compute track:
67 
68* On ECS Fargate, the deploy step attaches `$ALB_SG` to the load balancer and `$GW_SG` to the service.
69* On EKS, the AWS Load Balancer Controller creates its own frontend security group for the ALB, so `$ALB_SG` and `$GW_SG` go unused: the deploy step's `inbound-cidrs` annotation restricts the listener to your corporate network, and the database security group admits the cluster's security group instead.
70 
71```bash theme={null}
72ALB_SG="$(aws ec2 create-security-group --group-name claude-gateway-alb \
73 --description "Claude gateway ALB" --vpc-id "$VPC_ID" \
74 --query GroupId --output text)"
75GW_SG="$(aws ec2 create-security-group --group-name claude-gateway-svc \
76 --description "Claude gateway service" --vpc-id "$VPC_ID" \
77 --query GroupId --output text)"
78DB_SG="$(aws ec2 create-security-group --group-name claude-gateway-db \
79 --description "Claude gateway Postgres" --vpc-id "$VPC_ID" \
80 --query GroupId --output text)"
81 
82aws ec2 authorize-security-group-ingress --group-id "$ALB_SG" \
83 --protocol tcp --port 443 --cidr <your-corporate-cidr>
84aws ec2 authorize-security-group-ingress --group-id "$GW_SG" \
85 --protocol tcp --port 8080 --source-group "$ALB_SG"
86aws ec2 authorize-security-group-ingress --group-id "$DB_SG" \
87 --protocol tcp --port 5432 --source-group "$GW_SG"
88```
89 
90**2. Create the IAM roles and submit the use case form**
91 
92The 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#amazon-bedrock), the policy must cover both the cross-region inference-profile ARNs and the underlying foundation-model ARNs:
93 
94```bash theme={null}
95cat > bedrock-invoke.json <<EOF
96{
97 "Version": "2012-10-17",
98 "Statement": [{
99 "Effect": "Allow",
100 "Action": ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream", "bedrock:CountTokens"],
101 "Resource": [
102 "arn:aws:bedrock:${AWS_REGION}:${ACCOUNT_ID}:inference-profile/us.anthropic.*",
103 "arn:aws:bedrock:*::foundation-model/anthropic.*"
104 ]
105 }]
106}
107EOF
108cat > ecs-trust.json <<'EOF'
109{
110 "Version": "2012-10-17",
111 "Statement": [{
112 "Effect": "Allow",
113 "Principal": { "Service": "ecs-tasks.amazonaws.com" },
114 "Action": "sts:AssumeRole"
115 }]
116}
117EOF
118 
119aws iam create-role --role-name claude-gateway-task \
120 --assume-role-policy-document file://ecs-trust.json
121aws iam put-role-policy --role-name claude-gateway-task \
122 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json
123```
124 
125ECS also needs an execution role, which the ECS agent itself uses to pull the image from ECR and inject the Secrets Manager values created later. It is separate from the task role the gateway's AWS SDK uses at runtime:
126 
127```bash theme={null}
128aws iam create-role --role-name claude-gateway-execution \
129 --assume-role-policy-document file://ecs-trust.json
130aws iam attach-role-policy --role-name claude-gateway-execution \
131 --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
132cat > secrets-read.json <<EOF
133{
134 "Version": "2012-10-17",
135 "Statement": [{
136 "Effect": "Allow",
137 "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"],
138 "Resource": [
139 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-jwt-secret-??????",
140 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-oidc-client-secret-??????",
141 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-postgres-url-??????"
142 ]
143 }]
144}
145EOF
146aws iam put-role-policy --role-name claude-gateway-execution \
147 --policy-name read-gateway-secrets --policy-document file://secrets-read.json
148```
149 
150The 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`.
151 
152The 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#1-submit-use-case-details) for the AWS Organizations form and the IAM permissions the submitter needs.
153 
154The EKS track reuses both policy documents on an IRSA role instead of the two ECS roles; see the deploy step.
155 
156**3. Provision Amazon RDS for PostgreSQL**
157 
158The instance runs Postgres 16 in the private subnets, with no public address and storage encryption on.
159 
160First, create the subnet group that places the database in the private subnets, and a parameter group with `rds.force_ssl=1` so the server rejects plaintext connections. The engine version is pinned once because the parameter group's family must match the engine major version the instance runs:
161 
162```bash theme={null}
163aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \
164 --db-subnet-group-description "Claude gateway" --subnet-ids $PRIVATE_SUBNETS
165 
166PG_VERSION=16
167PG_FAMILY="postgres${PG_VERSION}"
168aws rds create-db-parameter-group --db-parameter-group-name claude-gateway-db \
169 --db-parameter-group-family "$PG_FAMILY" \
170 --description "Claude gateway - require TLS on every connection"
171aws rds modify-db-parameter-group --db-parameter-group-name claude-gateway-db \
172 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"
173```
174 
175Then create the instance with a generated master password:
176 
177```bash theme={null}
178PGPASS="$(openssl rand -hex 24)"
179aws rds create-db-instance --db-instance-identifier claude-gateway-db \
180 --engine postgres --engine-version "$PG_VERSION" \
181 --db-instance-class db.t4g.micro \
182 --allocated-storage 20 --db-name claude_gateway \
183 --master-username gateway --master-user-password "$PGPASS" \
184 --db-subnet-group-name claude-gateway-db \
185 --db-parameter-group-name claude-gateway-db \
186 --vpc-security-group-ids "$DB_SG" \
187 --no-publicly-accessible --storage-encrypted
188```
189 
190The literal `--master-user-password` argument is visible in the process table and in audit/EDR logs while the command runs, the same exposure the secrets step's note covers. On a shared or monitored host, pass the password via `--cli-input-json` from a `0600` file instead, the way the bundle's `setup.sh` does.
191 
192Wait for the instance to come up, which can take several minutes, then read its private endpoint and assemble the connection string the gateway will use:
193 
194```bash theme={null}
195aws rds wait db-instance-available --db-instance-identifier claude-gateway-db
196DB_HOST="$(aws rds describe-db-instances --db-instance-identifier claude-gateway-db \
197 --query 'DBInstances[0].Endpoint.Address' --output text)"
198GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"
199```
200 
201`sslmode=verify-full` makes the gateway verify the RDS server certificate's chain and hostname, not only encrypt. The trust anchor is the [AWS RDS certificate bundle](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), which the image build step below copies to `/etc/claude/rds-global-bundle.pem` and trusts via `NODE_EXTRA_CA_CERTS`. Don't append a libpq-style `sslrootcert=` parameter to the URL: the gateway's driver reads only `sslmode` from the query string and would forward `sslrootcert` to Postgres as a startup parameter, which the server rejects.
202 
203The ECS service or EKS pods must run in this VPC so they can reach the instance's private endpoint, and the `claude-gateway-db` security group only admits the gateway's security group.
204 
205**4. Write gateway.yaml**
206 
207The `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) for every field.
208 
209Two `listen` fields describe what fronts the gateway:
210 
211* `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.
212* `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.
213 
214On 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`.
215 
216The ALB's client port preservation attribute, `routing.http.xff_client_port.enabled`, can stay at either setting: with it on, the ALB writes the client as `203.0.113.7:54321` or `[2001:db8::1]:54321`, and the gateway reads both with the port dropped.
217 
218```yaml gateway.yaml theme={null}
219listen:
220 host: 0.0.0.0
221 port: 8080
222 public_url: https://claude-gateway.internal.example.com
223 trusted_proxies: [<your-alb-subnet-cidrs>]
224 
225oidc:
226 issuer: https://example.okta.com
227 client_id: 0oa1example2
228 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}
229 allowed_email_domains: [example.com]
230 # The Okta org authorization server returns a thin id_token that omits
231 # email and groups; the gateway fills them from /userinfo.
232 userinfo_fallback: true
233 # Okta emits groups only when the `groups` scope is requested and the
234 # app's groups claim filter allows them.
235 scopes: [openid, profile, email, offline_access, groups]
236 
237session:
238 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}
239 ttl_hours: 8 # bounds deprovision latency; lower
240 # toward 1 for tighter revocation
241 
242store:
243 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}
244 # readiness_grace_seconds: 300 # keep passing the health check
245 # through an RDS failover
246 
247upstreams:
248 - provider: bedrock
249 region: <your-region> # match $AWS_REGION so the IAM
250 # policy's ARNs cover it
251 auth: {} # AWS default credential chain:
252 # ECS task role, or IRSA on EKS
253```
254 
255> [!NOTE]
256>
257> 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#identity-provider-setup).
258 
259**5. Store secrets in AWS Secrets Manager**
260 
261Create three secrets; the execution role from the IAM step can already read them:
262 
263```bash theme={null}
264aws secretsmanager create-secret --name gateway-jwt-secret \
265 --secret-string "$(openssl rand -base64 32)"
266aws secretsmanager create-secret --name gateway-oidc-client-secret \
267 --secret-string '<your-okta-client-secret>'
268aws secretsmanager create-secret --name gateway-postgres-url \
269 --secret-string "$GATEWAY_POSTGRES_URL"
270```
271 
272Note the ARN each call prints; the ECS task definition references secrets by ARN.
273 
274> [!NOTE]
275>
276> 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`.
277 
278Unlike 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:
279 
280* 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}`.
281* 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`.
282 
283**6. Build and push the image to Amazon ECR**
284 
285Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy#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.
286 
287The 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:
288 
289```bash theme={null}
290curl -fL --proto '=https' -o rds-global-bundle.pem \
291 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
292```
293 
294The container image requirements don't cover the bundle, so if you write your own Dockerfile, add the two lines that copy and trust it; the bundle's `Dockerfile` already includes both:
295 
296```dockerfile theme={null}
297COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem
298ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem
299```
300 
301Create the ECR repository and sign Docker in to it. Immutable tags mean the `<version>` tag the deploy step pins cannot later be silently re-pointed at a different image:
302 
303```bash theme={null}
304aws ecr create-repository --repository-name claude-gateway \
305 --image-tag-mutability IMMUTABLE \
306 --image-scanning-configuration scanOnPush=true
307aws ecr get-login-password --region "$AWS_REGION" \
308 | docker login --username AWS --password-stdin \
309 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
310```
311 
312Build and push the image. The task definition below runs `linux/amd64`, so the platform must match here; for Fargate on ARM64 (Graviton), build `linux/arm64` with the `linux-arm64` binary and set `cpuArchitecture` to `ARM64` instead:
313 
314```bash theme={null}
315docker build --platform=linux/amd64 \
316 -t "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/claude-gateway:<version>" .
317docker push "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/claude-gateway:<version>"
318```
319 
320**7. Deploy**
321 
322**ECS Fargate**
323 
324Create the cluster and a log group for the gateway's stderr, which carries both its audit events and operational logs. Retention is a separate call, and without one CloudWatch keeps the logs forever; align the 90 days with your audit retention policy:
325 
326```bash theme={null}
327aws ecs create-cluster --cluster-name claude-gateway
328aws logs create-log-group --log-group-name /ecs/claude-gateway
329aws logs put-retention-policy --log-group-name /ecs/claude-gateway \
330 --retention-in-days 90
331```
332 
333Write the task definition. The task role carries the Bedrock permission and the execution role injects the secrets; use the secret ARNs from the Secrets Manager step:
334 
335```json claude-gateway-task.json theme={null}
336{
337 "family": "claude-gateway",
338 "networkMode": "awsvpc",
339 "requiresCompatibilities": ["FARGATE"],
340 "cpu": "1024",
341 "memory": "2048",
342 "runtimePlatform": { "cpuArchitecture": "X86_64", "operatingSystemFamily": "LINUX" },
343 "executionRoleArn": "arn:aws:iam::<account-id>:role/claude-gateway-execution",
344 "taskRoleArn": "arn:aws:iam::<account-id>:role/claude-gateway-task",
345 "containerDefinitions": [
98346 {
99 "Version": "2012-10-17",
100 "Statement": [{
101 "Effect": "Allow",
102 "Action": ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream", "bedrock:CountTokens"],
103 "Resource": [
104 "arn:aws:bedrock:${AWS_REGION}:${ACCOUNT_ID}:inference-profile/us.anthropic.*",
105 "arn:aws:bedrock:*::foundation-model/anthropic.*"
106 ]
107 }]
347 "name": "gateway",
348 "image": "<account-id>.dkr.ecr.<region>.amazonaws.com/claude-gateway:<version>",
349 "portMappings": [{ "containerPort": 8080 }],
350 "secrets": [
351 { "name": "GATEWAY_JWT_SECRET", "valueFrom": "<gateway-jwt-secret ARN>" },
352 { "name": "OIDC_CLIENT_SECRET", "valueFrom": "<gateway-oidc-client-secret ARN>" },
353 { "name": "GATEWAY_POSTGRES_URL", "valueFrom": "<gateway-postgres-url ARN>" }
354 ],
355 "logConfiguration": {
356 "logDriver": "awslogs",
357 "options": {
358 "awslogs-group": "/ecs/claude-gateway",
359 "awslogs-region": "<region>",
360 "awslogs-stream-prefix": "gateway"
361 }
362 }
108363 }
109 EOF
110 cat > ecs-trust.json <<'EOF'
111 {
112 "Version": "2012-10-17",
113 "Statement": [{
114 "Effect": "Allow",
115 "Principal": { "Service": "ecs-tasks.amazonaws.com" },
116 "Action": "sts:AssumeRole"
117 }]
118 }
119 EOF
120 
121 aws iam create-role --role-name claude-gateway-task \
122 --assume-role-policy-document file://ecs-trust.json
123 aws iam put-role-policy --role-name claude-gateway-task \
124 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json
125 ```
126 
127 ECS also needs an execution role, which the ECS agent itself uses to pull the image from ECR and inject the Secrets Manager values created later. It is separate from the task role the gateway's AWS SDK uses at runtime:
128 
129 ```bash theme={null}
130 aws iam create-role --role-name claude-gateway-execution \
131 --assume-role-policy-document file://ecs-trust.json
132 aws iam attach-role-policy --role-name claude-gateway-execution \
133 --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
134 cat > secrets-read.json <<EOF
135 {
136 "Version": "2012-10-17",
137 "Statement": [{
138 "Effect": "Allow",
139 "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"],
140 "Resource": [
141 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-jwt-secret-??????",
142 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-oidc-client-secret-??????",
143 "arn:aws:secretsmanager:${AWS_REGION}:${ACCOUNT_ID}:secret:gateway-postgres-url-??????"
144 ]
145 }]
146 }
147 EOF
148 aws iam put-role-policy --role-name claude-gateway-execution \
149 --policy-name read-gateway-secrets --policy-document file://secrets-read.json
150 ```
151 
152 The 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`.
153 
154 The 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#1-submit-use-case-details) for the AWS Organizations form and the IAM permissions the submitter needs.
155 
156 The EKS track reuses both policy documents on an IRSA role instead of the two ECS roles; see the deploy step.
157 </Step>
158 
159 <Step title="Provision Amazon RDS for PostgreSQL">
160 The instance runs Postgres 16 in the private subnets, with no public address and storage encryption on.
161 
162 First, create the subnet group that places the database in the private subnets, and a parameter group with `rds.force_ssl=1` so the server rejects plaintext connections. The engine version is pinned once because the parameter group's family must match the engine major version the instance runs:
163 
164 ```bash theme={null}
165 aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \
166 --db-subnet-group-description "Claude gateway" --subnet-ids $PRIVATE_SUBNETS
167 
168 PG_VERSION=16
169 PG_FAMILY="postgres${PG_VERSION}"
170 aws rds create-db-parameter-group --db-parameter-group-name claude-gateway-db \
171 --db-parameter-group-family "$PG_FAMILY" \
172 --description "Claude gateway - require TLS on every connection"
173 aws rds modify-db-parameter-group --db-parameter-group-name claude-gateway-db \
174 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"
175 ```
176 
177 Then create the instance with a generated master password:
178 
179 ```bash theme={null}
180 PGPASS="$(openssl rand -hex 24)"
181 aws rds create-db-instance --db-instance-identifier claude-gateway-db \
182 --engine postgres --engine-version "$PG_VERSION" \
183 --db-instance-class db.t4g.micro \
184 --allocated-storage 20 --db-name claude_gateway \
185 --master-username gateway --master-user-password "$PGPASS" \
186 --db-subnet-group-name claude-gateway-db \
187 --db-parameter-group-name claude-gateway-db \
188 --vpc-security-group-ids "$DB_SG" \
189 --no-publicly-accessible --storage-encrypted
190 ```
191 
192 The literal `--master-user-password` argument is visible in the process table and in audit/EDR logs while the command runs, the same exposure the secrets step's note covers. On a shared or monitored host, pass the password via `--cli-input-json` from a `0600` file instead, the way the bundle's `setup.sh` does.
193 
194 Wait for the instance to come up, which can take several minutes, then read its private endpoint and assemble the connection string the gateway will use:
195 
196 ```bash theme={null}
197 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db
198 DB_HOST="$(aws rds describe-db-instances --db-instance-identifier claude-gateway-db \
199 --query 'DBInstances[0].Endpoint.Address' --output text)"
200 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"
201 ```
202 
203 `sslmode=verify-full` makes the gateway verify the RDS server certificate's chain and hostname, not only encrypt. The trust anchor is the [AWS RDS certificate bundle](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), which the image build step below copies to `/etc/claude/rds-global-bundle.pem` and trusts via `NODE_EXTRA_CA_CERTS`. Don't append a libpq-style `sslrootcert=` parameter to the URL: the gateway's driver reads only `sslmode` from the query string and would forward `sslrootcert` to Postgres as a startup parameter, which the server rejects.
204 
205 The ECS service or EKS pods must run in this VPC so they can reach the instance's private endpoint, and the `claude-gateway-db` security group only admits the gateway's security group.
206 </Step>
207 
208 <Step title="Write gateway.yaml">
209 The `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) for every field.
210 
211 Two `listen` fields describe what fronts the gateway:
212 
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.
214 * `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.
215 
216 On 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`.
217 
218 The ALB's client port preservation attribute, `routing.http.xff_client_port.enabled`, can stay at either setting: with it on, the ALB writes the client as `203.0.113.7:54321` or `[2001:db8::1]:54321`, and the gateway reads both with the port dropped.
219 
220 ```yaml gateway.yaml theme={null}
221 listen:
222 host: 0.0.0.0
223 port: 8080
224 public_url: https://claude-gateway.internal.example.com
225 trusted_proxies: [<your-alb-subnet-cidrs>]
226 
227 oidc:
228 issuer: https://example.okta.com
229 client_id: 0oa1example2
230 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}
231 allowed_email_domains: [example.com]
232 # The Okta org authorization server returns a thin id_token that omits
233 # email and groups; the gateway fills them from /userinfo.
234 userinfo_fallback: true
235 # Okta emits groups only when the `groups` scope is requested and the
236 # app's groups claim filter allows them.
237 scopes: [openid, profile, email, offline_access, groups]
238 
239 session:
240 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}
241 ttl_hours: 8 # bounds deprovision latency; lower
242 # toward 1 for tighter revocation
243 
244 store:
245 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}
246 # readiness_grace_seconds: 300 # keep passing the health check
247 # through an RDS failover
248 
249 upstreams:
250 - provider: bedrock
251 region: <your-region> # match $AWS_REGION so the IAM
252 # policy's ARNs cover it
253 auth: {} # AWS default credential chain:
254 # ECS task role, or IRSA on EKS
255 ```
256 
257 <Note>
258 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#identity-provider-setup).
259 </Note>
260 </Step>
261 
262 <Step title="Store secrets in AWS Secrets Manager">
263 Create three secrets; the execution role from the IAM step can already read them:
264 
265 ```bash theme={null}
266 aws secretsmanager create-secret --name gateway-jwt-secret \
267 --secret-string "$(openssl rand -base64 32)"
268 aws secretsmanager create-secret --name gateway-oidc-client-secret \
269 --secret-string '<your-okta-client-secret>'
270 aws secretsmanager create-secret --name gateway-postgres-url \
271 --secret-string "$GATEWAY_POSTGRES_URL"
272 ```
273 
274 Note the ARN each call prints; the ECS task definition references secrets by ARN.
275 
276 <Note>
277 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`.
278 </Note>
279 
280 Unlike 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:
281 
282 * 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}`.
283 * 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`.
284 </Step>
285 
286 <Step title="Build and push the image to Amazon ECR">
287 Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy#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.
288 
289 The 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:
290 
291 ```bash theme={null}
292 curl -fL --proto '=https' -o rds-global-bundle.pem \
293 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
294 ```
295 
296 The container image requirements don't cover the bundle, so if you write your own Dockerfile, add the two lines that copy and trust it; the bundle's `Dockerfile` already includes both:
297 
298 ```dockerfile theme={null}
299 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem
300 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem
301 ```
302 
303 Create the ECR repository and sign Docker in to it. Immutable tags mean the `<version>` tag the deploy step pins cannot later be silently re-pointed at a different image:
304 
305 ```bash theme={null}
306 aws ecr create-repository --repository-name claude-gateway \
307 --image-tag-mutability IMMUTABLE \
308 --image-scanning-configuration scanOnPush=true
309 aws ecr get-login-password --region "$AWS_REGION" \
310 | docker login --username AWS --password-stdin \
311 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
312 ```
313 
314 Build and push the image. The task definition below runs `linux/amd64`, so the platform must match here; for Fargate on ARM64 (Graviton), build `linux/arm64` with the `linux-arm64` binary and set `cpuArchitecture` to `ARM64` instead:
315 
316 ```bash theme={null}
317 docker build --platform=linux/amd64 \
318 -t "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/claude-gateway:<version>" .
319 docker push "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/claude-gateway:<version>"
320 ```
321 </Step>
322 
323 <Step title="Deploy">
324 <Tabs>
325 <Tab title="ECS Fargate">
326 Create the cluster and a log group for the gateway's stderr, which carries both its audit events and operational logs. Retention is a separate call, and without one CloudWatch keeps the logs forever; align the 90 days with your audit retention policy:
327 
328 ```bash theme={null}
329 aws ecs create-cluster --cluster-name claude-gateway
330 aws logs create-log-group --log-group-name /ecs/claude-gateway
331 aws logs put-retention-policy --log-group-name /ecs/claude-gateway \
332 --retention-in-days 90
333 ```
334 
335 Write the task definition. The task role carries the Bedrock permission and the execution role injects the secrets; use the secret ARNs from the Secrets Manager step:
336 
337 ```json claude-gateway-task.json theme={null}
338 {
339 "family": "claude-gateway",
340 "networkMode": "awsvpc",
341 "requiresCompatibilities": ["FARGATE"],
342 "cpu": "1024",
343 "memory": "2048",
344 "runtimePlatform": { "cpuArchitecture": "X86_64", "operatingSystemFamily": "LINUX" },
345 "executionRoleArn": "arn:aws:iam::<account-id>:role/claude-gateway-execution",
346 "taskRoleArn": "arn:aws:iam::<account-id>:role/claude-gateway-task",
347 "containerDefinitions": [
348 {
349 "name": "gateway",
350 "image": "<account-id>.dkr.ecr.<region>.amazonaws.com/claude-gateway:<version>",
351 "portMappings": [{ "containerPort": 8080 }],
352 "secrets": [
353 { "name": "GATEWAY_JWT_SECRET", "valueFrom": "<gateway-jwt-secret ARN>" },
354 { "name": "OIDC_CLIENT_SECRET", "valueFrom": "<gateway-oidc-client-secret ARN>" },
355 { "name": "GATEWAY_POSTGRES_URL", "valueFrom": "<gateway-postgres-url ARN>" }
356 ],
357 "logConfiguration": {
358 "logDriver": "awslogs",
359 "options": {
360 "awslogs-group": "/ecs/claude-gateway",
361 "awslogs-region": "<region>",
362 "awslogs-stream-prefix": "gateway"
363 }
364 }
365 }
366 ]
367 }
368 ```
369 
370 Register it:
371 
372 ```bash theme={null}
373 aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json
374 ```
375 
376 Put an internal ALB in front with a target group that health-checks the gateway. `--ip-address-type ipv4` matters: an internal dual-stack ALB publishes public-range AAAA records, which the `/login` private-network check rejects:
377 
378 ```bash theme={null}
379 ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \
380 --scheme internal --type application --ip-address-type ipv4 \
381 --subnets $PRIVATE_SUBNETS --security-groups "$ALB_SG" \
382 --query 'LoadBalancers[0].LoadBalancerArn' --output text)"
383 
384 TG_ARN="$(aws elbv2 create-target-group --name claude-gateway \
385 --protocol HTTP --port 8080 --vpc-id "$VPC_ID" --target-type ip \
386 --health-check-path /readyz \
387 --query 'TargetGroups[0].TargetGroupArn' --output text)"
388 ```
389 
390 Add the HTTPS listener. `--ssl-policy` pins a modern TLS floor, since omitting it falls back to the legacy `ELBSecurityPolicy-2016-08` default, which still accepts TLS 1.0/1.1.
391 
392 The ALB closes a connection after 60 seconds with no data by default. The gateway's keepalive pings keep streams inside that default, so raising the timeout adds margin above the ping cadence; the [Troubleshooting](#troubleshooting) row on dropped streams covers the mechanism and older gateways. The commands below add the listener and raise the timeout:
393 
394 ```bash theme={null}
395 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \
396 --protocol HTTPS --port 443 \
397 --ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
398 --certificates CertificateArn=<your-acm-certificate-arn> \
399 --default-actions Type=forward,TargetGroupArn="$TG_ARN"
400 
401 aws elbv2 modify-load-balancer-attributes --load-balancer-arn "$ALB_ARN" \
402 --attributes Key=idle_timeout.timeout_seconds,Value=3600
403 ```
404 
405 Create the service. The deployment circuit breaker rolls a deployment whose tasks keep failing, from a bad image or an unbootable config, back to the last steady state instead of relaunching failing tasks forever:
406 
407 ```bash theme={null}
408 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \
409 --task-definition claude-gateway --desired-count 1 --launch-type FARGATE \
410 --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \
411 --health-check-grace-period-seconds 60 \
412 --network-configuration "awsvpcConfiguration={subnets=[$(echo $PRIVATE_SUBNETS | tr ' ' ',')],securityGroups=[$GW_SG],assignPublicIp=DISABLED}" \
413 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"
414 ```
415 
416 The 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.
417 
418 The 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#outage-behavior), which also covers the `/healthz` alternative.
419 
420 The 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#amazon-bedrock); the IdP still needs internet egress.
421 
422 Finish 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.
423 
424 Update the OAuth client's authorized redirect URI to `<public_url>/oauth/callback` before the first sign-in. After changing `public_url`, rebuild and push the image under a new tag, register a new task definition revision, and redeploy. On ECS the setting lives in the image's embedded `gateway.yaml`, and the gateway builds its public origin only from that setting, ignoring `X-Forwarded-Host` and `X-Forwarded-Proto`. `X-Forwarded-For` is honored for client IPs only when `listen.trusted_proxies` is set.
425 </Tab>
426 
427 <Tab title="EKS">
428 This track needs `kubectl` and `eksctl` installed locally, and an existing EKS cluster with an IAM OIDC provider and the AWS Load Balancer Controller installed. The cluster must be on `$VPC_ID` so pods can reach the RDS private endpoint, and the `claude-gateway-db` security group must admit the cluster's pod or node security group in place of `$GW_SG`.
429 
430 On EKS the gateway gets its Bedrock credentials through IRSA rather than the ECS roles. The `ecs-tasks.amazonaws.com` trust policy from the IAM step does not apply here; IRSA needs a role whose trust policy federates on the cluster's OIDC provider, scoped to `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` creates that role, attaches the policies, and annotates the Kubernetes service account with the role ARN in one step. Turn the two policy documents from the IAM step into managed policies it can attach:
431 
432 ```bash theme={null}
433 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \
434 --policy-document file://bedrock-invoke.json --query Policy.Arn --output text)"
435 SECRETS_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-secrets-read \
436 --policy-document file://secrets-read.json --query Policy.Arn --output text)"
437 
438 kubectl create namespace claude-gateway
439 eksctl create iamserviceaccount --cluster <your-cluster> --region "$AWS_REGION" \
440 --namespace claude-gateway --name gateway --role-name claude-gateway \
441 --attach-policy-arn "$BEDROCK_POLICY_ARN" \
442 --attach-policy-arn "$SECRETS_POLICY_ARN" \
443 --approve
444 ```
445 
446 The 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.
447 
448 Deploy the gateway as a standard Deployment plus a Service and an Ingress, as described in [Kubernetes deployment](/docs/en/claude-apps-gateway-deploy#kubernetes), with:
449 
450 * `serviceAccountName: gateway`
451 * `gateway.yaml` mounted from a ConfigMap and the secrets mounted at `/secrets`
452 * the readiness probe pointed at `GET /readyz`
453 
454 For the front end, an Ingress managed by the AWS Load Balancer Controller provisions the internal ALB. Annotate it with:
455 
456 * `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
458 * `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
459 * `alb.ingress.kubernetes.io/certificate-arn` with the ACM certificate
460 * `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
461 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, a margin above the gateway's streaming keepalive; see [Troubleshooting](#troubleshooting)
462 
463 With IRSA, the AWS SDK reads a projected service-account token and exchanges it with AWS STS, so the pod never needs the EC2 instance metadata service; an egress NetworkPolicy may block `169.254.169.254` for gateway pods. The node hop-limit problem in [Troubleshooting](#troubleshooting) below applies only to clusters that skip IRSA and rely on node instance roles.
464 </Tab>
465 </Tabs>
466 </Step>
467 
468 <Step title="Push the gateway URL to developer machines">
469 The 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.
470 </Step>
471</Steps>
364 ]
365}
366```
367 
368Register it:
369 
370```bash theme={null}
371aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json
372```
373 
374Put an internal ALB in front with a target group that health-checks the gateway. `--ip-address-type ipv4` matters: an internal dual-stack ALB publishes public-range AAAA records, which the `/login` private-network check rejects:
375 
376```bash theme={null}
377ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \
378 --scheme internal --type application --ip-address-type ipv4 \
379 --subnets $PRIVATE_SUBNETS --security-groups "$ALB_SG" \
380 --query 'LoadBalancers[0].LoadBalancerArn' --output text)"
381 
382TG_ARN="$(aws elbv2 create-target-group --name claude-gateway \
383 --protocol HTTP --port 8080 --vpc-id "$VPC_ID" --target-type ip \
384 --health-check-path /readyz \
385 --query 'TargetGroups[0].TargetGroupArn' --output text)"
386```
387 
388Add the HTTPS listener. `--ssl-policy` pins a modern TLS floor, since omitting it falls back to the legacy `ELBSecurityPolicy-2016-08` default, which still accepts TLS 1.0/1.1.
389 
390The ALB closes a connection after 60 seconds with no data by default. The gateway's keepalive pings keep streams inside that default, so raising the timeout adds margin above the ping cadence; the [Troubleshooting](#troubleshooting) row on dropped streams covers the mechanism and older gateways. The commands below add the listener and raise the timeout:
391 
392```bash theme={null}
393aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \
394 --protocol HTTPS --port 443 \
395 --ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
396 --certificates CertificateArn=<your-acm-certificate-arn> \
397 --default-actions Type=forward,TargetGroupArn="$TG_ARN"
398 
399aws elbv2 modify-load-balancer-attributes --load-balancer-arn "$ALB_ARN" \
400 --attributes Key=idle_timeout.timeout_seconds,Value=3600
401```
402 
403Create the service. The deployment circuit breaker rolls a deployment whose tasks keep failing, from a bad image or an unbootable config, back to the last steady state instead of relaunching failing tasks forever:
404 
405```bash theme={null}
406aws ecs create-service --cluster claude-gateway --service-name claude-gateway \
407 --task-definition claude-gateway --desired-count 1 --launch-type FARGATE \
408 --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \
409 --health-check-grace-period-seconds 60 \
410 --network-configuration "awsvpcConfiguration={subnets=[$(echo $PRIVATE_SUBNETS | tr ' ' ',')],securityGroups=[$GW_SG],assignPublicIp=DISABLED}" \
411 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"
412```
413 
414The 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.
415 
416The 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#outage-behavior), which also covers the `/healthz` alternative.
417 
418The 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#amazon-bedrock); the IdP still needs internet egress.
419 
420Finish 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.
421 
422Update the OAuth client's authorized redirect URI to `<public_url>/oauth/callback` before the first sign-in. After changing `public_url`, rebuild and push the image under a new tag, register a new task definition revision, and redeploy. On ECS the setting lives in the image's embedded `gateway.yaml`, and the gateway builds its public origin only from that setting, ignoring `X-Forwarded-Host` and `X-Forwarded-Proto`. `X-Forwarded-For` is honored for client IPs only when `listen.trusted_proxies` is set.
423 
424**EKS**
425 
426This track needs `kubectl` and `eksctl` installed locally, and an existing EKS cluster with an IAM OIDC provider and the AWS Load Balancer Controller installed. The cluster must be on `$VPC_ID` so pods can reach the RDS private endpoint, and the `claude-gateway-db` security group must admit the cluster's pod or node security group in place of `$GW_SG`.
427 
428On EKS the gateway gets its Bedrock credentials through IRSA rather than the ECS roles. The `ecs-tasks.amazonaws.com` trust policy from the IAM step does not apply here; IRSA needs a role whose trust policy federates on the cluster's OIDC provider, scoped to `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` creates that role, attaches the policies, and annotates the Kubernetes service account with the role ARN in one step. Turn the two policy documents from the IAM step into managed policies it can attach:
429 
430```bash theme={null}
431BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \
432 --policy-document file://bedrock-invoke.json --query Policy.Arn --output text)"
433SECRETS_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-secrets-read \
434 --policy-document file://secrets-read.json --query Policy.Arn --output text)"
435 
436kubectl create namespace claude-gateway
437eksctl create iamserviceaccount --cluster <your-cluster> --region "$AWS_REGION" \
438 --namespace claude-gateway --name gateway --role-name claude-gateway \
439 --attach-policy-arn "$BEDROCK_POLICY_ARN" \
440 --attach-policy-arn "$SECRETS_POLICY_ARN" \
441 --approve
442```
443 
444The 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.
445 
446Deploy the gateway as a standard Deployment plus a Service and an Ingress, as described in [Kubernetes deployment](/docs/en/claude-apps-gateway-deploy#kubernetes), with:
447 
448* `serviceAccountName: gateway`
449* `gateway.yaml` mounted from a ConfigMap and the secrets mounted at `/secrets`
450* the readiness probe pointed at `GET /readyz`
451 
452For the front end, an Ingress managed by the AWS Load Balancer Controller provisions the internal ALB. Annotate it with:
453 
454* `alb.ingress.kubernetes.io/scheme: internal` and `alb.ingress.kubernetes.io/target-type: ip`
455* `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
456* `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
457* `alb.ingress.kubernetes.io/certificate-arn` with the ACM certificate
458* `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
459* `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, a margin above the gateway's streaming keepalive; see [Troubleshooting](#troubleshooting)
460 
461With IRSA, the AWS SDK reads a projected service-account token and exchanges it with AWS STS, so the pod never needs the EC2 instance metadata service; an egress NetworkPolicy may block `169.254.169.254` for gateway pods. The node hop-limit problem in [Troubleshooting](#troubleshooting) below applies only to clusters that skip IRSA and rely on node instance roles.
462 
463**8. Push the gateway URL to developer machines**
464 
465The 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.
472466 
473467## Terraform reference
474468 
475469 

claude-apps-gateway-on-gcp Changed · +240 / -246 lines

from line 2
22 
33> A worked example of running Claude apps gateway on Google Cloud: Cloud Run or GKE, Cloud SQL for PostgreSQL, Secret Manager, and service-account auth to Google Cloud's Agent Platform.
44 
5<Note>
6 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).
7</Note>
5> [!NOTE]
6>
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).
88 
99This 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#identity-provider-setup) for per-IdP details.
1010 
1111## What you'll build
1212 
13<Frame>
14 <img src="https://mintcdn.com/claude-code/-uq-4JE0W_JO5Er5/images/claude-gateway-gcp-architecture.svg?fit=max&auto=format&n=-uq-4JE0W_JO5Er5&q=85&s=cb705151c69128ac0da235852d5600ab" alt="Diagram of Claude apps gateway on Google Cloud: Claude Code clients connect over HTTPS to the gateway (Cloud Run or GKE), which runs inside a VPC alongside a private-IP Cloud SQL database for session state. The gateway signs users in via OIDC against Google Workspace, reads config and secrets from Secret Manager, forwards model requests to Google Cloud's Agent Platform, and pulls its image from Artifact Registry at deploy." width="760" height="400" data-path="images/claude-gateway-gcp-architecture.svg" />
15</Frame>
13![Diagram of Claude apps gateway on Google Cloud: Claude Code clients connect over HTTPS to the gateway (Cloud Run or GKE), which runs inside a VPC alongside a private-IP Cloud SQL database for session state. The gateway signs users in via OIDC against Google Workspace, reads config and secrets from Secret Manager, forwards model requests to Google Cloud's Agent Platform, and pulls its image from Artifact Registry at deploy.](https://mintcdn.com/claude-code/-uq-4JE0W_JO5Er5/images/claude-gateway-gcp-architecture.svg?fit=max\&auto=format\&n=-uq-4JE0W_JO5Er5\&q=85\&s=cb705151c69128ac0da235852d5600ab)
1614 
1715The deployment consists of:
1816 
from line 42
4442 
4543The steps below provision the full deployment with `gcloud` commands.
4644 
47<Steps>
48 <Step title="Enable APIs">
49 Enable the service APIs the walkthrough uses:
45**1. Enable APIs**
5046 
51 ```bash theme={null}
52 gcloud services enable \
53 aiplatform.googleapis.com \
54 artifactregistry.googleapis.com \
55 sqladmin.googleapis.com \
56 secretmanager.googleapis.com \
57 iamcredentials.googleapis.com \
58 iam.googleapis.com \
59 compute.googleapis.com \
60 servicenetworking.googleapis.com \
61 run.googleapis.com \
62 container.googleapis.com
63 ```
47Enable the service APIs the walkthrough uses:
6448 
65 The APIs you need depend on the deployment path:
49```bash theme={null}
50gcloud services enable \
51 aiplatform.googleapis.com \
52 artifactregistry.googleapis.com \
53 sqladmin.googleapis.com \
54 secretmanager.googleapis.com \
55 iamcredentials.googleapis.com \
56 iam.googleapis.com \
57 compute.googleapis.com \
58 servicenetworking.googleapis.com \
59 run.googleapis.com \
60 container.googleapis.com
61```
6662 
67 * `compute` and `servicenetworking`: needed for the private-IP Cloud SQL path
68 * `run`: Cloud Run only
69 * `container`: GKE only
70 </Step>
63The APIs you need depend on the deployment path:
7164 
72 <Step title="Create the service account and grant IAM">
73 The gateway runs as a dedicated service account with permission to call Google Cloud's Agent Platform. It reaches Cloud SQL over the VPC with a password user, so no Cloud SQL IAM role is required:
65* `compute` and `servicenetworking`: needed for the private-IP Cloud SQL path
66* `run`: Cloud Run only
67* `container`: GKE only
7468 
75 ```bash theme={null}
76 gcloud iam service-accounts create claude-gateway --display-name="Claude apps gateway"
77 SA="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com"
69**2. Create the service account and grant IAM**
7870 
79 gcloud projects add-iam-policy-binding "$PROJECT_ID" \
80 --member="serviceAccount:${SA}" --role="roles/aiplatform.user" --condition=None
81 ```
71The gateway runs as a dedicated service account with permission to call Google Cloud's Agent Platform. It reaches Cloud SQL over the VPC with a password user, so no Cloud SQL IAM role is required:
8272 
83 Then enable the Claude models for the project in Model Garden; models publish to specific regions, so check each model card.
84 </Step>
73```bash theme={null}
74gcloud iam service-accounts create claude-gateway --display-name="Claude apps gateway"
75SA="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com"
8576 
86 <Step title="Build and push the image to Artifact Registry">
87 Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy#container-image), using the `linux-x64` glibc binary, and push it:
77gcloud projects add-iam-policy-binding "$PROJECT_ID" \
78 --member="serviceAccount:${SA}" --role="roles/aiplatform.user" --condition=None
79```
8880 
89 ```bash theme={null}
90 gcloud artifacts repositories create claude-gateway \
91 --repository-format=docker --location="$REGION"
92 gcloud auth configure-docker "${REGION}-docker.pkg.dev" --quiet
81Then enable the Claude models for the project in Model Garden; models publish to specific regions, so check each model card.
9382 
94 # Cloud Run requires linux/amd64. --provenance=false avoids a buildx OCI
95 # image index that Cloud Run rejects.
96 docker build --platform=linux/amd64 --provenance=false \
97 -t "${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>" .
98 docker push "${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>"
99 ```
100 </Step>
83**3. Build and push the image to Artifact Registry**
10184 
102 <Step title="Provision Cloud SQL for PostgreSQL">
103 Create the instance on a VPC via Private Services Access so it has no public IP; this also satisfies projects where `constraints/sql.restrictPublicIp` is enforced:
85Build the image per the [container image requirements](/docs/en/claude-apps-gateway-deploy#container-image), using the `linux-x64` glibc binary, and push it:
10486 
105 ```bash theme={null}
106 VPC=cc-gateway-vpc
107 gcloud compute networks create "$VPC" --subnet-mode=custom
108 gcloud compute networks subnets create cc-gateway-subnet \
109 --network="$VPC" --region="$REGION" --range=10.0.0.0/24
87```bash theme={null}
88gcloud artifacts repositories create claude-gateway \
89 --repository-format=docker --location="$REGION"
90gcloud auth configure-docker "${REGION}-docker.pkg.dev" --quiet
11091 
111 # Private Services Access: one-time per VPC
112 gcloud compute addresses create "google-managed-services-${VPC}" \
113 --global --purpose=VPC_PEERING --prefix-length=16 --network="$VPC"
114 gcloud services vpc-peerings connect \
115 --service=servicenetworking.googleapis.com \
116 --ranges="google-managed-services-${VPC}" --network="$VPC"
92# Cloud Run requires linux/amd64. --provenance=false avoids a buildx OCI
93# image index that Cloud Run rejects.
94docker build --platform=linux/amd64 --provenance=false \
95 -t "${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>" .
96docker push "${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>"
97```
11798 
118 gcloud sql instances create claude-gateway-db \
119 --database-version=POSTGRES_16 --tier=db-g1-small --region="$REGION" \
120 --network="projects/${PROJECT_ID}/global/networks/${VPC}" --no-assign-ip
121 gcloud sql databases create claude_gateway --instance=claude-gateway-db
122 PGPASS="$(openssl rand -hex 24)"
123 gcloud sql users create gateway --instance=claude-gateway-db --password="$PGPASS"
99**4. Provision Cloud SQL for PostgreSQL**
124100 
125 PRIVATE_IP="$(gcloud sql instances describe claude-gateway-db \
126 --format='value(ipAddresses[0].ipAddress)')"
127 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${PRIVATE_IP}:5432/claude_gateway?sslmode=require"
128 ```
101Create the instance on a VPC via Private Services Access so it has no public IP; this also satisfies projects where `constraints/sql.restrictPublicIp` is enforced:
129102 
130 The Cloud Run or GKE runtime must be on, or routed into, this VPC.
131 </Step>
103```bash theme={null}
104VPC=cc-gateway-vpc
105gcloud compute networks create "$VPC" --subnet-mode=custom
106gcloud compute networks subnets create cc-gateway-subnet \
107 --network="$VPC" --region="$REGION" --range=10.0.0.0/24
132108 
133 <Step title="Write gateway.yaml">
134 The `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) for every field.
109# Private Services Access: one-time per VPC
110gcloud compute addresses create "google-managed-services-${VPC}" \
111 --global --purpose=VPC_PEERING --prefix-length=16 --network="$VPC"
112gcloud services vpc-peerings connect \
113 --service=servicenetworking.googleapis.com \
114 --ranges="google-managed-services-${VPC}" --network="$VPC"
135115 
136 Two `listen` fields describe what fronts the gateway:
116gcloud sql instances create claude-gateway-db \
117 --database-version=POSTGRES_16 --tier=db-g1-small --region="$REGION" \
118 --network="projects/${PROJECT_ID}/global/networks/${VPC}" --no-assign-ip
119gcloud sql databases create claude_gateway --instance=claude-gateway-db
120PGPASS="$(openssl rand -hex 24)"
121gcloud sql users create gateway --instance=claude-gateway-db --password="$PGPASS"
137122 
138 * `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.
139 * `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.
123PRIVATE_IP="$(gcloud sql instances describe claude-gateway-db \
124 --format='value(ipAddresses[0].ipAddress)')"
125GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${PRIVATE_IP}:5432/claude_gateway?sslmode=require"
126```
140127 
141 Set `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.
128The Cloud Run or GKE runtime must be on, or routed into, this VPC.
142129 
143 | Front end | `trusted_proxies` |
144 | - | - |
145 | Cloud Run reached directly, no load balancer | `[169.254.0.0/16]` |
146 | Internal Application Load Balancer in front of Cloud Run | `169.254.0.0/16` plus your proxy-only subnet's CIDR |
147 | GKE internal Ingress, class `gce-internal` | Your proxy-only subnet's CIDR |
130**5. Write gateway.yaml**
148131 
149 The example below uses the internal-load-balancer-in-front-of-Cloud-Run values.
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) for every field.
150133 
151 ```yaml gateway.yaml theme={null}
152 listen:
153 host: 0.0.0.0
154 port: 8080
155 public_url: https://claude-gateway.internal.example.com
156 trusted_proxies: [169.254.0.0/16, <your-proxy-only-subnet-cidr>]
134Two `listen` fields describe what fronts the gateway:
157135 
158 oidc:
159 issuer: https://accounts.google.com
160 client_id: <your-oauth-client-id>
161 client_secret: ${OIDC_CLIENT_SECRET} # GKE: ${file:/secrets/oidc-client-secret}
162 allowed_email_domains: [example.com]
163 # Google ignores offline_access; these yield refresh tokens:
164 scopes: [openid, profile, email]
165 extra_auth_params: { access_type: offline, prompt: consent }
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.
137* `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.
166138 
167 session:
168 jwt_secret: ${GATEWAY_JWT_SECRET} # GKE: ${file:/secrets/jwt-secret}
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.
169140 
170 store:
171 postgres_url: ${GATEWAY_POSTGRES_URL} # GKE: ${file:/secrets/postgres-url}
172 # readiness_grace_seconds: 300 # keep passing the readiness probe
173 # through a Cloud SQL failover
141| Front end | `trusted_proxies` |
142| - | - |
143| Cloud Run reached directly, no load balancer | `[169.254.0.0/16]` |
144| Internal Application Load Balancer in front of Cloud Run | `169.254.0.0/16` plus your proxy-only subnet's CIDR |
145| GKE internal Ingress, class `gce-internal` | Your proxy-only subnet's CIDR |
174146 
175 upstreams:
176 - provider: vertex
177 region: <your-region> # must match $REGION
178 project_id: <your-project>
179 auth: {} # ADC via the runtime service account
180 ```
147The example below uses the internal-load-balancer-in-front-of-Cloud-Run values.
181148 
182 <Note>
183 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.
184 </Note>
185 </Step>
149```yaml gateway.yaml theme={null}
150listen:
151 host: 0.0.0.0
152 port: 8080
153 public_url: https://claude-gateway.internal.example.com
154 trusted_proxies: [169.254.0.0/16, <your-proxy-only-subnet-cidr>]
186155 
187 <Step title="Store secrets in Secret Manager">
188 Create four secrets and grant `roles/secretmanager.secretAccessor` to the `claude-gateway` service account:
156oidc:
157 issuer: https://accounts.google.com
158 client_id: <your-oauth-client-id>
159 client_secret: ${OIDC_CLIENT_SECRET} # GKE: ${file:/secrets/oidc-client-secret}
160 allowed_email_domains: [example.com]
161 # Google ignores offline_access; these yield refresh tokens:
162 scopes: [openid, profile, email]
163 extra_auth_params: { access_type: offline, prompt: consent }
189164 
190 | Secret | Source |
191 | - | - |
192 | `gateway-jwt-secret` | `openssl rand -base64 32` |
193 | `gateway-oidc-client-secret` | Google Cloud Console → OAuth client |
194 | `gateway-postgres-url` | `$GATEWAY_POSTGRES_URL` from the Cloud SQL step |
195 | `gateway-config` | the full `gateway.yaml` from the previous step |
165session:
166 jwt_secret: ${GATEWAY_JWT_SECRET} # GKE: ${file:/secrets/jwt-secret}
196167 
197 How the secrets reach the container differs by track:
168store:
169 postgres_url: ${GATEWAY_POSTGRES_URL} # GKE: ${file:/secrets/postgres-url}
170 # readiness_grace_seconds: 300 # keep passing the readiness probe
171 # through a Cloud SQL failover
198172 
199 * On GKE they mount as files via the Secret Manager CSI driver, and `gateway.yaml` references `${file:/secrets/...}`.
200 * On Cloud Run, which can't mount multiple secrets into one directory, `gateway.yaml` mounts as a file and the other three inject as environment variables, so `gateway.yaml` references `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}`, and `${GATEWAY_POSTGRES_URL}` instead.
201 </Step>
173upstreams:
174 - provider: vertex
175 region: <your-region> # must match $REGION
176 project_id: <your-project>
177 auth: {} # ADC via the runtime service account
178```
202179 
203 <Step title="Deploy">
204 <Tabs>
205 <Tab title="Cloud Run">
206 The command below deploys for production behind an internal load balancer.
180> [!NOTE]
181>
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.
207183 
208 ```bash theme={null}
209 gcloud run deploy claude-gateway \
210 --image="${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>" \
211 --region="$REGION" \
212 --service-account="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com" \
213 --min-instances=1 \
214 --max-instances=8 \
215 --timeout=3600 \
216 --ingress=internal \
217 --network="$VPC" --subnet=cc-gateway-subnet --vpc-egress=private-ranges-only \
218 --set-secrets=/etc/claude/gateway.yaml=gateway-config:latest,GATEWAY_JWT_SECRET=gateway-jwt-secret:latest,OIDC_CLIENT_SECRET=gateway-oidc-client-secret:latest,GATEWAY_POSTGRES_URL=gateway-postgres-url:latest \
219 --no-invoker-iam-check
220 ```
184**6. Store secrets in Secret Manager**
221185 
222 Direct VPC egress, via `--network`, `--subnet`, and `--vpc-egress=private-ranges-only`, lets the service reach the Cloud SQL private IP directly. Each instance holds up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default, so keep maximum instances × `store.max_connections` below your Cloud SQL tier's connection limit; the [reference assets](#terraform-reference) cap instances at 8 for the `db-g1-small` tier for this reason. Public egress to Google Cloud's Agent Platform endpoints and `accounts.google.com` goes directly to the internet rather than through the VPC, so no Cloud NAT is needed.
186Create four secrets and grant `roles/secretmanager.secretAccessor` to the `claude-gateway` service account:
223187 
224 The 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.
188| Secret | Source |
189| - | - |
190| `gateway-jwt-secret` | `openssl rand -base64 32` |
191| `gateway-oidc-client-secret` | Google Cloud Console → OAuth client |
192| `gateway-postgres-url` | `$GATEWAY_POSTGRES_URL` from the Cloud SQL step |
193| `gateway-config` | the full `gateway.yaml` from the previous step |
225194 
226 Two flags admit unauthenticated requests:
195How the secrets reach the container differs by track:
227196 
228 * `--no-invoker-iam-check`: disables the check with no `allUsers` binding to manage, and works under Domain Restricted Sharing
229 * `--allow-unauthenticated`: grants `allUsers` the `run.invoker` role; use it if your organization doesn't allow `--no-invoker-iam-check`
197* On GKE they mount as files via the Secret Manager CSI driver, and `gateway.yaml` references `${file:/secrets/...}`.
198* On Cloud Run, which can't mount multiple secrets into one directory, `gateway.yaml` mounts as a file and the other three inject as environment variables, so `gateway.yaml` references `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}`, and `${GATEWAY_POSTGRES_URL}` instead.
230199 
231 Ingress restriction via `--ingress` is a separate, independent layer from the invoker check; keep it set to limit the service to your corporate network.
200**7. Deploy**
232201 
233 By 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:
202**Cloud Run**
234203 
235 * **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.
236 * **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.
204The command below deploys for production behind an internal load balancer.
237205 
238 Google's [private networking guide for Cloud Run](https://cloud.google.com/run/docs/securing/private-networking) covers the infrastructure both options need. Verify sign-in once the gateway is serving on a private hostname; until then, confirm the container booted from its logs in Cloud Run.
206```bash theme={null}
207gcloud run deploy claude-gateway \
208 --image="${REGION}-docker.pkg.dev/${PROJECT_ID}/claude-gateway/gateway:<version>" \
209 --region="$REGION" \
210 --service-account="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com" \
211 --min-instances=1 \
212 --max-instances=8 \
213 --timeout=3600 \
214 --ingress=internal \
215 --network="$VPC" --subnet=cc-gateway-subnet --vpc-egress=private-ranges-only \
216 --set-secrets=/etc/claude/gateway.yaml=gateway-config:latest,GATEWAY_JWT_SECRET=gateway-jwt-secret:latest,OIDC_CLIENT_SECRET=gateway-oidc-client-secret:latest,GATEWAY_POSTGRES_URL=gateway-postgres-url:latest \
217 --no-invoker-iam-check
218```
239219 
240 Update the OAuth client's authorized redirect URI to `<public_url>/oauth/callback` before the first sign-in. Redeploy after changing `public_url`, because the gateway builds its public origin only from that setting and ignores `X-Forwarded-Host` and `X-Forwarded-Proto`. `X-Forwarded-For` is honored for client IPs only when `listen.trusted_proxies` is set.
241 </Tab>
220Direct VPC egress, via `--network`, `--subnet`, and `--vpc-egress=private-ranges-only`, lets the service reach the Cloud SQL private IP directly. Each instance holds up to [`store.max_connections`](/docs/en/claude-apps-gateway-config#store) Postgres connections, five by default, so keep maximum instances × `store.max_connections` below your Cloud SQL tier's connection limit; the [reference assets](#terraform-reference) cap instances at 8 for the `db-g1-small` tier for this reason. Public egress to Google Cloud's Agent Platform endpoints and `accounts.google.com` goes directly to the internet rather than through the VPC, so no Cloud NAT is needed.
242221 
243 <Tab title="GKE">
244 The cluster must be on the `$VPC` created in the Cloud SQL step so pods can reach the database's private IP; VPC peering alone doesn't work, because Cloud SQL private IP is itself a peered network and peering is non-transitive. To create a new cluster on that VPC, pass `--network="$VPC" --subnetwork=cc-gateway-subnet` to `gcloud container clusters create`.
222The 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.
245223 
246 Enable Workload Identity on the cluster and its node pools, then bind the Google service account to the Kubernetes service account so pods inherit its credentials:
224Two flags admit unauthenticated requests:
247225 
248 ```bash theme={null}
249 gcloud container clusters update <cluster> --region="$REGION" \
250 --workload-pool="${PROJECT_ID}.svc.id.goog"
251 # On a Standard cluster, existing node pools also need GKE_METADATA;
252 # Autopilot enables this by default.
253 gcloud container node-pools update <pool> --cluster=<cluster> \
254 --region="$REGION" --workload-metadata=GKE_METADATA
226* `--no-invoker-iam-check`: disables the check with no `allUsers` binding to manage, and works under Domain Restricted Sharing
227* `--allow-unauthenticated`: grants `allUsers` the `run.invoker` role; use it if your organization doesn't allow `--no-invoker-iam-check`
255228 
256 kubectl create namespace claude-gateway
257 kubectl create serviceaccount gateway -n claude-gateway
229Ingress restriction via `--ingress` is a separate, independent layer from the invoker check; keep it set to limit the service to your corporate network.
258230 
259 gcloud iam service-accounts add-iam-policy-binding \
260 "claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com" \
261 --role roles/iam.workloadIdentityUser \
262 --member "serviceAccount:${PROJECT_ID}.svc.id.goog[claude-gateway/gateway]"
231By 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:
263232 
264 kubectl annotate serviceaccount gateway -n claude-gateway \
265 iam.gke.io/gcp-service-account="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com"
266 ```
233* **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.
234* **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.
267235 
268 Deploy 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#kubernetes), with:
236Google's [private networking guide for Cloud Run](https://cloud.google.com/run/docs/securing/private-networking) covers the infrastructure both options need. Verify sign-in once the gateway is serving on a private hostname; until then, confirm the container booted from its logs in Cloud Run.
269237 
270 * `serviceAccountName: gateway`
271 * the Secret Manager CSI driver mounting secrets at `/secrets`
272 * the readiness probe pointed at `GET /readyz`
238Update the OAuth client's authorized redirect URI to `<public_url>/oauth/callback` before the first sign-in. Redeploy after changing `public_url`, because the gateway builds its public origin only from that setting and ignores `X-Forwarded-Host` and `X-Forwarded-Proto`. `X-Forwarded-For` is honored for client IPs only when `listen.trusted_proxies` is set.
273239 
274 Attach 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.
240**GKE**
275241 
276 Don'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#threat-model-summary) is the defense there.
242The cluster must be on the `$VPC` created in the Cloud SQL step so pods can reach the database's private IP; VPC peering alone doesn't work, because Cloud SQL private IP is itself a peered network and peering is non-transitive. To create a new cluster on that VPC, pass `--network="$VPC" --subnetwork=cc-gateway-subnet` to `gcloud container clusters create`.
277243 
278 The 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.
279 </Tab>
280 </Tabs>
281 </Step>
244Enable Workload Identity on the cluster and its node pools, then bind the Google service account to the Kubernetes service account so pods inherit its credentials:
282245 
283 <Step title="Push the gateway URL to developer machines">
284 The 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.
285 </Step>
286</Steps>
246```bash theme={null}
247gcloud container clusters update <cluster> --region="$REGION" \
248 --workload-pool="${PROJECT_ID}.svc.id.goog"
249# On a Standard cluster, existing node pools also need GKE_METADATA;
250# Autopilot enables this by default.
251gcloud container node-pools update <pool> --cluster=<cluster> \
252 --region="$REGION" --workload-metadata=GKE_METADATA
253 
254kubectl create namespace claude-gateway
255kubectl create serviceaccount gateway -n claude-gateway
256 
257gcloud iam service-accounts add-iam-policy-binding \
258 "claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com" \
259 --role roles/iam.workloadIdentityUser \
260 --member "serviceAccount:${PROJECT_ID}.svc.id.goog[claude-gateway/gateway]"
261 
262kubectl annotate serviceaccount gateway -n claude-gateway \
263 iam.gke.io/gcp-service-account="claude-gateway@${PROJECT_ID}.iam.gserviceaccount.com"
264```
265 
266Deploy 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#kubernetes), with:
267 
268* `serviceAccountName: gateway`
269* the Secret Manager CSI driver mounting secrets at `/secrets`
270* the readiness probe pointed at `GET /readyz`
271 
272Attach 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.
273 
274Don'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#threat-model-summary) is the defense there.
275 
276The 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.
277 
278**8. Push the gateway URL to developer machines**
279 
280The 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.
287281 
288282## Terraform reference
289283 

claude-apps-gateway-spend-limits Changed · +3 / -3 lines

from line 134
134134| `q` | Case-insensitive substring filter over the OIDC `sub`, last-seen email, and last-seen display name. |
135135| `limit` / `page` | Page size, 1–1000 with a default of 20, and the opaque cursor from the previous response's `next_page`. |
136136 
137<Warning>
138 `q=` and `user_ids[]=` ride GET query strings, so any fronting proxy or load balancer captures them in its access logs. If your PII log policy is strict, scrub these parameters there.
139</Warning>
137> [!WARNING]
138>
139> `q=` and `user_ids[]=` ride GET query strings, so any fronting proxy or load balancer captures them in its access logs. If your PII log policy is strict, scrub these parameters there.
140140 
141141### `/audit`
142142 

claude-code-on-the-web Changed · +36 / -34 lines

### Branch is not on GitHub

from line 2
22 
33> Run Claude Code sessions in the cloud from your browser, phone, Desktop app, or terminal, move them with `--cloud` and `--teleport`, and auto-fix pull requests.
44 
5<Note>
6 Cloud sessions are available on Pro, Max, and Team plans, and for Enterprise users with premium seats or Chat + Claude Code seats.
7</Note>
5> [!NOTE]
6>
7> Cloud sessions are available on Pro, Max, and Team plans, and for Enterprise users with premium seats or Chat + Claude Code seats.
88 
99A 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.
1010 
from line 20
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 
23<Note>
24 These cases are covered on other pages:
23> [!NOTE]
24>
25> These cases are covered on other pages:
26>
27> * **Starting your first cloud session**: [Get started with cloud sessions](/docs/en/web-quickstart) 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) 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) lets you reach them from your phone or browser
2530 
26 * **Starting your first cloud session**: [Get started with cloud sessions](/docs/en/web-quickstart) connects GitHub and walks through a task in the browser
27 * **Many cloud sessions for one body of work**: a [project](/docs/en/claude-projects) has Claude start and keep track of them for you
28 * **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) lets you reach them from your phone or browser
29</Note>
30 
3131## Cloud environments
3232 
3333Every cloud session runs in a [cloud environment](/docs/en/cloud-environments), the saved configuration that controls network access, environment variables, and setup scripts.
from line 55
5555 
5656See [Connect from your terminal](/docs/en/web-quickstart#connect-from-your-terminal) for the `/web-setup` walkthrough, including what `/web-setup` stores and how to remove it.
5757 
58<Note>
59 Organizations with [Zero Data Retention](/docs/en/zero-data-retention) enabled, or with the [HIPAA configuration](/docs/en/hipaa-setup) 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</Note>
58> [!NOTE]
59>
60> Organizations with [Zero Data Retention](/docs/en/zero-data-retention) enabled, or with the [HIPAA configuration](/docs/en/hipaa-setup) 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 75
7575 
7676These workflows require the [Claude Code CLI](/docs/en/quickstart) 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 
78<Note>
79 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#send-follow-ups-from-the-cli). The [Desktop app](/docs/en/desktop#continue-in-another-surface) can send a local session in its Code tab to the cloud from its **Open in** menu.
80</Note>
78> [!NOTE]
79>
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#send-follow-ups-from-the-cli). The [Desktop app](/docs/en/desktop#continue-in-another-surface) can send a local session in its Code tab to the cloud from its **Open in** menu.
8181 
82<span id="from-terminal-to-cloud" />
83 
8482### Start a cloud session from your terminal
8583 
8684Start a cloud session from the command line with the `--cloud` flag:
from line 87
8987claude --cloud "Fix the authentication bug in src/auth/login.ts"
9088```
9189 
92This creates a new cloud session on claude.ai. The cloud VM clones your current directory's GitHub remote at your current branch, not your local checkout, so push first if you have local commits. See [Send local repositories without GitHub](#send-local-repositories-without-github) for the cases where Claude Code uploads your local repository instead of cloning.
90This creates a new cloud session on claude.ai. The cloud VM clones your current directory's GitHub remote at your current branch, not your local checkout, so push first if you have local commits. See [Send local repositories without GitHub](#send-local-repositories-without-github) for the cases where Claude Code uploads your local repository instead of cloning. If the terminal prints `Branch <name> is not on GitHub`, see [Branch is not on GitHub](#branch-is-not-on-github).
9391 
9492`--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`.
9593 
9694While 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#setup-scripts). It queues messages you type during provisioning and sends them once the session is ready.
9795 
98<Note>
99 `--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).
100</Note>
96> [!NOTE]
97>
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).
10199 
102100Open 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.
103101 
from line 175
177175 
178176For `<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.
179177 
180<Note>
181 `--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.
182</Note>
178> [!NOTE]
179>
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.
183181 
184182#### Output
185183 
from line 193
195193 
196194If the send fails, see [Errors when sending to a cloud session](#errors-when-sending-to-a-cloud-session).
197195 
198<span id="from-cloud-to-terminal" />
199 
200196### Continue a cloud session in your terminal
201197 
202198Pull a cloud session into your terminal using any of these:
from line 326
330326 
331327Claude can watch a pull request and automatically respond to CI failures and review comments. Claude subscribes to GitHub activity on the PR, and when a check fails or a reviewer leaves a comment, Claude investigates and pushes a fix if one is clear.
332328 
333<Note>
334 Auto-fix requires the Claude GitHub App to be installed on your repository. If you haven't already, install it from the [GitHub App page](https://github.com/apps/claude).
335</Note>
329> [!NOTE]
330>
331> Auto-fix requires the Claude GitHub App to be installed on your repository. If you haven't already, install it from the [GitHub App page](https://github.com/apps/claude).
336332 
337333There are a few ways to turn on auto-fix depending on where the PR came from and what device you're using:
338334 
from line 351
355351 
356352Claude may reply to review comment threads on GitHub as part of resolving them. These replies are posted using your GitHub account, so they appear under your username, but each reply is labeled as coming from Claude Code so reviewers know it was written by the agent and not by you directly.
357353 
358<Warning>
359 If your repository uses comment-triggered automation such as Atlantis, Terraform Cloud, or custom GitHub Actions that run on `issue_comment` events, be aware that Claude can reply on your behalf, which can trigger those workflows. Review your repository's automation before enabling auto-fix, and consider disabling auto-fix for repositories where a PR comment can deploy infrastructure or run privileged operations.
360</Warning>
354> [!WARNING]
355>
356> If your repository uses comment-triggered automation such as Atlantis, Terraform Cloud, or custom GitHub Actions that run on `issue_comment` events, be aware that Claude can reply on your behalf, which can trigger those workflows. Review your repository's automation before enabling auto-fix, and consider disabling auto-fix for repositories where a PR comment can deploy infrastructure or run privileged operations.
361357 
362358## Security and isolation
363359 
from line 360
364360Each cloud session is separated from your machine and from other sessions through several layers:
365361 
366362* **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
367* <span id="default-allowed-domains" />**Network access controls**: in Anthropic-hosted environments, network access is limited by default and can be disabled. See [Network access](/docs/en/cloud-environments#network-access) for the access levels, the [default allowed domains](/docs/en/cloud-environments#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.
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#network-access) for the access levels, the [default allowed domains](/docs/en/cloud-environments#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.
368364* **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#configure-git)
369365* **Network secrets**: in Anthropic-hosted environments, keys you [add to a cloud environment](/docs/en/cloud-environments#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
370366* **Secure analysis**: code is analyzed and modified within the session's isolated environment before creating PRs
from line 388
392388Run [`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.
393389 
394390From 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.`
391 
392### Branch is not on GitHub
393 
394When `claude --cloud` prints a line starting with `Branch <name> is not on GitHub`, the cloud session still starts, but not from your branch. The line names where the session starts instead: a pushed commit from your branch's history, or the repository's default branch. Commits that exist only on your machine and uncommitted changes aren't in the session.
395 
396You see this line when, for example, you never pushed the branch, or GitHub deleted it after its pull request merged. If the starting point the line names has what your task needs, use the session as it is. Otherwise, push the branch and start a new session so that it clones your branch.
395397 
396398### Remote Control session expired or access denied
397399 

claude-platform-on-aws Changed · +6 / -188 lines

from line 2
22 
33> Configure Claude Code to use the Anthropic-operated Claude API with AWS authentication, IAM access control, and AWS Marketplace billing.
44 
5export const ContactSalesCard = ({surface}) => {
6 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;
7 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
8 <line x1="5" y1="12" x2="19" y2="12" />
9 <polyline points="12 5 19 12 12 19" />
10 </svg>;
11 const STYLES = `
12.cc-cs {
13 --cs-slate: #141413;
14 --cs-clay: #d97757;
15 --cs-clay-deep: #c6613f;
16 --cs-gray-000: #ffffff;
17 --cs-gray-700: #3d3d3a;
18 --cs-border-default: rgba(31, 30, 29, 0.15);
19 font-family: inherit;
20}
21.dark .cc-cs {
22 --cs-slate: #f0eee6;
23 --cs-gray-000: #262624;
24 --cs-gray-700: #bfbdb4;
25 --cs-border-default: rgba(240, 238, 230, 0.14);
26}
27.cc-cs-card {
28 display: flex; align-items: center; justify-content: space-between;
29 gap: 16px; padding: 14px 16px; margin: 0;
30 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);
31 border-radius: 8px; flex-wrap: wrap;
32}
33.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }
34.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }
35.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
36.cc-cs-btn-clay {
37 display: inline-flex; align-items: center; gap: 8px;
38 background: var(--cs-clay-deep); color: #fff; border: none;
39 border-radius: 8px; padding: 8px 14px;
40 font-size: 13px; font-weight: 500;
41 transition: background-color 0.15s; white-space: nowrap;
42}
43.cc-cs-btn-clay:hover { background: var(--cs-clay); }
44.cc-cs-btn-ghost {
45 display: inline-flex; align-items: center; gap: 8px;
46 background: transparent; color: var(--cs-gray-700);
47 border: 0.5px solid var(--cs-border-default);
48 border-radius: 8px; padding: 8px 14px;
49 font-size: 13px; font-weight: 500;
50}
51.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }
52.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }
53@media (max-width: 720px) {
54 .cc-cs-actions { width: 100%; }
55}
56`;
57 return <div className="cc-cs not-prose">
58 <style>{STYLES}</style>
59 <div className="cc-cs-card">
60 <div className="cc-cs-text">
61 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.
62 </div>
63 <div className="cc-cs-actions">
64 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">
65 View plans
66 </a>
67 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">
68 Contact sales {iconArrowRight()}
69 </a>
70 </div>
71 </div>
72 </div>;
73};
74 
75export const Experiment = ({flag, treatment, children}) => {
76 const VID_KEY = 'exp_vid';
77 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);
78 const fnv1a = s => {
79 let h = 0x811c9dc5;
80 for (let i = 0; i < s.length; i++) {
81 h ^= s.charCodeAt(i);
82 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);
83 }
84 return h >>> 0;
85 };
86 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';
87 const [decision] = useState(() => {
88 const params = new URLSearchParams(location.search);
89 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];
90 const force = params.get('gb-force');
91 if (force) {
92 for (const p of force.split(',')) {
93 const [k, v] = p.split(':');
94 if (k === flag) return {
95 variant: v || 'treatment',
96 track: false
97 };
98 }
99 }
100 if (navigator.globalPrivacyControl) {
101 return {
102 variant: 'control',
103 track: false
104 };
105 }
106 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);
107 if (prefsMatch) {
108 try {
109 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {
110 return {
111 variant: 'control',
112 track: false
113 };
114 }
115 } catch {
116 return {
117 variant: 'control',
118 track: false
119 };
120 }
121 } else {
122 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];
123 if (!country || CONSENT_COUNTRIES.has(country)) {
124 return {
125 variant: 'control',
126 track: false
127 };
128 }
129 }
130 let vid;
131 try {
132 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);
133 if (ajsMatch) {
134 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');
135 } else {
136 vid = localStorage.getItem(VID_KEY);
137 if (!vid) {
138 vid = crypto.randomUUID();
139 }
140 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;
141 }
142 try {
143 localStorage.setItem(VID_KEY, vid);
144 } catch {}
145 } catch {
146 return {
147 variant: 'control',
148 track: false
149 };
150 }
151 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);
152 return {
153 variant,
154 track: true,
155 vid
156 };
157 });
158 useEffect(() => {
159 if (!decision.track) return;
160 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {
161 method: 'POST',
162 headers: {
163 'Content-Type': 'application/json',
164 'x-service-name': 'claude_code_docs'
165 },
166 body: JSON.stringify({
167 events: [{
168 event_type: 'GrowthbookExperimentEvent',
169 event_data: {
170 device_id: decision.vid,
171 anonymous_id: decision.vid,
172 timestamp: new Date().toISOString(),
173 experiment_id: flag,
174 variation_id: decision.variant === 'treatment' ? 1 : 0,
175 environment: 'production'
176 }
177 }]
178 }),
179 keepalive: true
180 }).catch(() => {});
181 }, []);
182 return decision.variant === 'treatment' ? treatment : children;
183};
184 
185<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="claude_platform_on_aws" />} />
186 
1875Claude 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.
1886 
1897Client-side features that Claude Code turns on through Anthropic's feature-flag service are off by default, and the [advisor tool](/docs/en/advisor) isn't available. See the [feature availability matrix](/docs/en/feature-availability#summary-by-provider) for the full list.
from line 8
1908 
1919Use 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).
19210 
193<Note>
194 Subscribing through AWS Marketplace provisions a new Anthropic organization tied to your AWS account. This organization is separate from any organization you already have with Anthropic, and credentials don't transfer between them. Use the workspace ID and API keys from the AWS-linked organization, not from a pre-existing Claude Console account.
195</Note>
11> [!NOTE]
12>
13> Subscribing through AWS Marketplace provisions a new Anthropic organization tied to your AWS account. This organization is separate from any organization you already have with Anthropic, and credentials don't transfer between them. Use the workspace ID and API keys from the AWS-linked organization, not from a pre-existing Claude Console account.
19614 
19715## Prerequisites
19816 
from line 67
24967 
25068Treat workspace API keys like any other production credential. The [user settings file](/docs/en/settings) `env` block is a convenient way to scope the key to your machine without exporting it globally.
25169 
252<Note>
253 The `/login` and `/logout` commands don't sign you into a claude.ai subscription for Claude Platform on AWS. Authentication runs through your AWS credentials or workspace API key.
254</Note>
70> [!NOTE]
71>
72> The `/login` and `/logout` commands don't sign you into a claude.ai subscription for Claude Platform on AWS. Authentication runs through your AWS credentials or workspace API key.
25573 
25674### 2. Configure Claude Code
25775 

claude-projects Changed · +56 / -76 lines

### Claude hasn't responded ### Repository access errors ### A thread hit the usage limit ### Additional usage credits are required ### Other messages

from line 2
22 
33> Hand Claude a stream of related tasks in one conversation and let it run them as parallel cloud sessions that share repositories, instructions, and memory.
44 
5<Note>
6 Projects are in public beta on Pro and Max plans and rolling out gradually, starting with accounts that have used [cloud sessions](/docs/en/claude-code-on-the-web) and don't have existing projects in claude.ai chat or Cowork. They aren't available on Team or Enterprise plans yet. If **Projects** doesn't appear in the sidebar at [claude.ai/code](https://claude.ai/code) or in the Code tab of the [desktop app](/docs/en/desktop), the rollout hasn't reached your account, and you can [join the waitlist](https://claude.com/form/projects). [Run agents in parallel](/docs/en/agents) lists what you can use in the meantime.
7</Note>
5> [!NOTE]
6>
7> Projects are in public beta on Pro and Max plans and rolling out gradually, starting with accounts that have used [cloud sessions](/docs/en/claude-code-on-the-web) and don't have existing projects in claude.ai chat or Cowork. They aren't available on Team or Enterprise plans yet. If **Projects** doesn't appear in the sidebar at [claude.ai/code](https://claude.ai/code) or in the Code tab of the [desktop app](/docs/en/desktop), the rollout hasn't reached your account, and you can [join the waitlist](https://claude.com/form/projects). [Run agents in parallel](/docs/en/agents) lists what you can use in the meantime.
88 
99A 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.
1010 
from line 57
5757 
5858Here is how those parts connect, from you through the conversation to the threads doing the work, with **Overview** tracking their state:
5959 
60<Frame>
61 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=dbf446f69f0bbdb9961d21af207cb93b" className="dark:hidden" alt="Diagram of a project. You write in the project conversation, where Claude answers or starts a thread. Each cloud thread works on its own branch and pull request. The Overview pane lists threads by state, such as ready for review, waiting on you, and working." width="600" height="250" data-path="images/claude-projects-overview.svg" />
60![Diagram of a project. You write in the project conversation, where Claude answers or starts a thread. Each cloud thread works on its own branch and pull request. The Overview pane lists threads by state, such as ready for review, waiting on you, and working.](https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max\&auto=format\&n=e8CLbxM17eD7cAiv\&q=85\&s=dbf446f69f0bbdb9961d21af207cb93b)
6261 
63 <img src="https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview-dark.svg?fit=max&auto=format&n=e8CLbxM17eD7cAiv&q=85&s=549a5ba9fea8433729babc37a1f6e9c8" className="hidden dark:block" alt="Diagram of a project. You write in the project conversation, where Claude answers or starts a thread. Each cloud thread works on its own branch and pull request. The Overview pane lists threads by state, such as ready for review, waiting on you, and working." width="600" height="250" data-path="images/claude-projects-overview-dark.svg" />
64</Frame>
65 
6662## Create a project
6763 
6864You create and use projects at [claude.ai/code](https://claude.ai/code), in the Code tab of the desktop app, or in the Claude mobile app for [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) and [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude). In the browser and the desktop app there are two ways to start a project:
from line 80
8480 
8581Starting a project from scratch means opening the **New project** dialog, naming the stream of work, and optionally giving it a goal and the repositories and files it works on. Only the name is required, so you can create the project first and fill in the rest as the work takes shape.
8682 
87<Steps>
88 <Step title="Open Projects">
89 At [claude.ai/code](https://claude.ai/code) or in the Code tab of the desktop app, select **Projects** in the left sidebar, then select **New project**. In a browser you can also go straight to [claude.ai/code/projects/browse](https://claude.ai/code/projects/browse).
90 </Step>
83**1. Open Projects**
9184 
92 <Step title="Fill in the New project dialog">
93 Scope the project to one stream of work you'll keep adding to, such as everything it takes to keep one API under its latency target. [When to use a project](#when-to-use-a-project) has more examples. Then fill in the dialog's fields:
85At [claude.ai/code](https://claude.ai/code) or in the Code tab of the desktop app, select **Projects** in the left sidebar, then select **New project**. In a browser you can also go straight to [claude.ai/code/projects/browse](https://claude.ai/code/projects/browse).
9486 
95 * **Name**: how the project appears in the **Projects** list.
96 * **Goal** (optional): one line of what you're trying to get done, such as "Hold p95 API latency under 200 ms". Claude in the conversation works toward it. Without a goal, Claude works from the tasks you send, and you can add a goal later in **Project settings > General**.
97 * **Context** (optional): the GitHub repositories this project works on, plus any files, folders, or Google Drive folders threads should read. Click **Add** for each. Add the repositories most tasks need rather than every one the work might touch; [Decide which repositories to add](#decide-which-repositories-to-add) covers the choice, and you can add more later in **Project settings > Environment**.
87**2. Fill in the New project dialog**
9888 
99 Standing rules for how threads should work go in [project instructions](#give-a-project-standing-context), which you set after the project exists.
100 </Step>
89Scope the project to one stream of work you'll keep adding to, such as everything it takes to keep one API under its latency target. [When to use a project](#when-to-use-a-project) has more examples. Then fill in the dialog's fields:
10190 
102 <Step title="Create the project">
103 Click **Create project**. The project's conversation opens with a message box at the bottom, where you describe work for Claude.
91* **Name**: how the project appears in the **Projects** list.
92* **Goal** (optional): one line of what you're trying to get done, such as "Hold p95 API latency under 200 ms". Claude in the conversation works toward it. Without a goal, Claude works from the tasks you send, and you can add a goal later in **Project settings > General**.
93* **Context** (optional): the GitHub repositories this project works on, plus any files, folders, or Google Drive folders threads should read. Click **Add** for each. Add the repositories most tasks need rather than every one the work might touch; [Decide which repositories to add](#decide-which-repositories-to-add) covers the choice, and you can add more later in **Project settings > Environment**.
10494 
105 On your first project, Claude takes a turn of its own as soon as the project is created, unless you send a message first. That turn uses your plan. In it, Claude may:
95Standing rules for how threads should work go in [project instructions](#give-a-project-standing-context), which you set after the project exists.
10696 
107 * Start one thread that explores the repository without changing anything and proposes next steps, if the project has a repository it can read.
108 * Post **Setup recommendations** drawn from your recent cloud sessions: repositories to add, scheduled tasks to create, and threads it could start. Every recommended repository and scheduled task starts switched on. Switch off the ones you don't want, then click **Update setup** to add the rest, or ignore the recommendations and describe work yourself.
109 </Step>
110</Steps>
97**3. Create the project**
11198 
99Click **Create project**. The project's conversation opens with a message box at the bottom, where you describe work for Claude.
100 
101On your first project, Claude takes a turn of its own as soon as the project is created, unless you send a message first. That turn uses your plan. In it, Claude may:
102 
103* Start one thread that explores the repository without changing anything and proposes next steps, if the project has a repository it can read.
104* Post **Setup recommendations** drawn from your recent cloud sessions: repositories to add, scheduled tasks to create, and threads it could start. Every recommended repository and scheduled task starts switched on. Switch off the ones you don't want, then click **Update setup** to add the rest, or ignore the recommendations and describe work yourself.
105 
112106The project is now listed under **Projects** in the sidebar, and its conversation is open. [Your first batch](#your-first-batch) covers what to set up before you send it work.
113107 
114108### Start from an existing cloud session
from line 118
124118 
125119Most GitHub setup happens once, not per project. You connect your GitHub account to Claude once, and the Claude GitHub App is installed once per repository, or once for a whole GitHub organization if you give it all repositories. You come back to these steps when you add a repository the Claude GitHub App doesn't cover yet or one in a GitHub organization that enforces SSO.
126120 
127<Steps>
128 <Step title="Connect your GitHub account">
129 If you haven't used claude.ai/code before, your first visit walks you through connecting GitHub; see [Connect GitHub](/docs/en/web-quickstart#connect-github). Otherwise use one of the [GitHub authentication options](/docs/en/claude-code-on-the-web#github-authentication-options).
130 </Step>
121**1. Connect your GitHub account**
131122 
132 <Step title="Install the Claude GitHub App on the project's repositories">
133 Install the [Claude GitHub App](https://github.com/apps/claude) and grant it the repositories the project will use. On a repository owned by a GitHub organization, only an organization owner can complete the install; if you aren't one, GitHub sends the owner an install request and the project can't use the repository until they approve it.
134 </Step>
123If you haven't used claude.ai/code before, your first visit walks you through connecting GitHub; see [Connect GitHub](/docs/en/web-quickstart#connect-github). Otherwise use one of the [GitHub authentication options](/docs/en/claude-code-on-the-web#github-authentication-options).
135124 
136 <Step title="Authorize SSO for organizations that enforce it">
137 If a GitHub organization enforces SAML SSO, reconnect GitHub and authorize the Claude app for that organization. Until you do, that organization's private repositories don't appear in the **New project** dialog or **Project settings > Environment**.
138 </Step>
139</Steps>
125**2. Install the Claude GitHub App on the project's repositories**
140126 
127Install the [Claude GitHub App](https://github.com/apps/claude) and grant it the repositories the project will use. On a repository owned by a GitHub organization, only an organization owner can complete the install; if you aren't one, GitHub sends the owner an install request and the project can't use the repository until they approve it.
128 
129**3. Authorize SSO for organizations that enforce it**
130 
131If a GitHub organization enforces SAML SSO, reconnect GitHub and authorize the Claude app for that organization. Until you do, that organization's private repositories don't appear in the **New project** dialog or **Project settings > Environment**.
132 
141133When one of these steps is incomplete, the **New project** dialog and the project page name the missing step and link to where you finish it. Finish the step there, then click **Check again** if the dialog offers it. If a repository is still missing from the list afterward, open the Claude GitHub App's installation on GitHub, at [github.com/settings/installations](https://github.com/settings/installations) for a personal account, and confirm the repository is listed under **Repository access**. For the error messages a thread or the project reports when access is still wrong, see [Repository access errors](#repository-access-errors).
142134 
143135## Work in a project
from line 251
259251* Starts with the project's instructions, but not with its memory files loaded
260252* Runs only while that computer is awake with Remote Control turned on
261253 
262<Steps>
263 <Step title="Connect the folder">
264 On 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.
254**1. Connect the folder**
265255 
266 * **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.
267 * **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) instead of the folder itself.
268 </Step>
256On 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.
269257 
270 <Step title="Ask for the task with Work locally">
271 In the project conversation, choose **Work locally** from the **+** menu beside the message box, which tags your message **Local**, and write what you want done. Saying in the message that the task should run on your computer works too.
272 </Step>
258* **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.
259* **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) instead of the folder itself.
273260 
274 <Step title="Allow it on the card">
275 Claude 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**.
276 </Step>
277</Steps>
261**2. Ask for the task with Work locally**
278262 
263In the project conversation, choose **Work locally** from the **+** menu beside the message box, which tags your message **Local**, and write what you want done. Saying in the message that the task should run on your computer works too.
264 
265**3. Allow it on the card**
266 
267Claude 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**.
268 
279269The thread runs in [auto mode](/docs/en/permission-modes#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.
280270 
281271While 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.
from line 454
4644542. For threads that started from a wrong assumption, open the thread from **Overview** and mark it resolved from its menu, or tell it what to do instead in its message box. Its branch and any pull request stay on GitHub until you delete them.
4654553. Fix the gap once, in [project instructions](#give-a-project-standing-context) or the [environment](#choose-an-environment-for-threads), then send one thread before sending the rest of the work again as new threads.
466456 
467<h3 id="claude-hasnt-responded">
468 Claude hasn't responded
469</h3>
457### Claude hasn't responded
470458 
471459The project conversation shows a "Claude hasn't responded" banner when Claude is running but its replies aren't reaching the project. Click **Restart Claude** on the banner, or go to **Project settings > General** and click **Restart** in the **Restart Claude** row. Claude reconnects to the conversation; any reply it was in the middle of writing is lost, and threads aren't affected.
472460 
473<h3 id="repository-access-errors">
474 Repository access errors
475</h3>
461### Repository access errors
476462 
477463Three messages mean a thread or the project can't reach one of its repositories. A project's cloud threads need the [GitHub prerequisites](#check-the-prerequisites) even when your other cloud sessions clone the same repository without trouble.
478464 
from line 468
482468 
483469To fix any of them, click the button the message offers, such as **Install GitHub App** or **Select repositories on GitHub**, then **Check again**. When the block is on the GitHub organization's side, such as an owner who hasn't approved the app or an IP allow list that excludes Claude, the message shows a **See how to fix** link instead. If there's no button, follow [Set up GitHub access](#set-up-github-access), then send another message to retry.
484470 
485<h3 id="usage-limit-reached">
486 A thread hit the usage limit
487</h3>
471### A thread hit the usage limit
488472 
489473When 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.
490474 
491475While 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#youve-hit-your-session-limit) explain the limits and when they reset.
492476 
493<h3 id="additional-usage-credits-are-required">
494 Additional usage credits are required
495</h3>
477### Additional usage credits are required
496478 
497479A 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#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.
498480 
from line 482
500482 
501483A thread running on your computer shows this when the Claude Code session there stopped responding, usually because the computer went to sleep or the desktop app or `claude remote-control` quit. Wake the computer, and if the desktop app or `claude remote-control` is no longer running there, start it again: reopen the app and confirm **Use this computer from your phone and claude.ai** is still on under **Settings > Claude Code**, or run `claude remote-control` again in the same folder.
502484 
503<h3 id="context-limit">
504 Other messages
505</h3>
485### Other messages
506486 
507487These messages name their own cause. The table gives the next step for each.
508488 

claude-security Changed · +18 / -20 lines

from line 55
5555 
5656The plugin adds one command, `/claude-security`, which opens a menu of its three jobs: scanning the codebase, scanning a set of changes, and suggesting patches. The happy path runs a full scan, then turns its findings into patches:
5757 
58<Steps>
59 <Step title="Open the Claude Security menu">
60 Run `/claude-security` and pick **Scan codebase**.
61 </Step>
58**1. Open the Claude Security menu**
6259 
63 <Step title="Choose what to scan">
64 The plugin reads your repository first, then offers the whole repository or a focused area, with each option's file count and relative cost stated. Pick the whole repository, or answer "I don't know" and the plugin picks a sensible default for your repository's size.
65 </Step>
60Run `/claude-security` and pick **Scan codebase**.
6661 
67 <Step title="Confirm the run">
68 A scan may take a while, may use a significant number of tokens, and needs Claude Code left open while it completes. Nothing runs until you confirm.
69 </Step>
62**2. Choose what to scan**
7063 
71 <Step title="Read the report">
72 While 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).
73 </Step>
64The plugin reads your repository first, then offers the whole repository or a focused area, with each option's file count and relative cost stated. Pick the whole repository, or answer "I don't know" and the plugin picks a sensible default for your repository's size.
7465 
75 <Step title="Turn findings into patches">
76 Run `/claude-security` again and pick **Suggest patches**, then choose which findings to address. Reviewed patches are written to the report's `patches/` folder; [Fix findings](#fix-findings) covers how each patch is built and reviewed.
77 </Step>
66**3. Confirm the run**
7867 
79 <Step title="Apply the patches you accept">
80 Apply each patch from your shell with `git apply`, in its own pull request. Patches are never applied automatically.
81 </Step>
82</Steps>
68A scan may take a while, may use a significant number of tokens, and needs Claude Code left open while it completes. Nothing runs until you confirm.
69 
70**4. Read the report**
71 
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).
73 
74**5. Turn findings into patches**
75 
76Run `/claude-security` again and pick **Suggest patches**, then choose which findings to address. Reviewed patches are written to the report's `patches/` folder; [Fix findings](#fix-findings) covers how each patch is built and reviewed.
77 
78**6. Apply the patches you accept**
79 
80Apply each patch from your shell with `git apply`, in its own pull request. Patches are never applied automatically.
8381 
8482You 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), which lets the scan's agents proceed without a permission prompt at each step.
8583 

claude-tag Changed · +7 / -8 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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;s=e870c19cb781d8a7c7b7d19de53b0a10"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;s=80cc0b06d8fd9aeefec8acb226de6866"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=032101c39ca3b1af9f72fc4af8e60d12"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-Key.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=1b7a9675728f971bc7a4663c7f1ea599"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-NodePair.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=c64df4c6d27a6da752aa32c9e0622781"/><link rel="stylesheet" href="/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" data-precedence="next"/><link rel="stylesheet" href="/docs/_next/static/chunks/b6fc170d92e82913.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" 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_C7srm1KiD9uEN7uYAKWCYMypULfK"/><script src="/docs/_next/static/chunks/44795504c795ca32.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/f2bf94c7cf8dfd62.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/ee81c3baf6fde190.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/turbopack-d37574ec3222e1d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/ebb4a0bbc2ec28f0.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/32f5b424705f70a1.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/cbe90532d0ed1303.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/cc565e9fca57898d.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/b72019d6b5a88c70.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/2f482bcd3294a910.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/3d4550911741fe33.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/e7ab3f319130be21.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/dea5b128a4a7c9f1.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" async=""></script><script src="/docs/_next/static/chunks/8166c0f37c7aa72a.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK" 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=+&amp;title=Work+with+Claude+Tag&amp;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.&amp;theme=4a95551acef5dd5d1bd02583&amp;signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95"/><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=+&amp;title=Work+with+Claude+Tag&amp;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.&amp;theme=4a95551acef5dd5d1bd02583&amp;signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95"/><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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;s=e870c19cb781d8a7c7b7d19de53b0a10"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;s=80cc0b06d8fd9aeefec8acb226de6866"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=032101c39ca3b1af9f72fc4af8e60d12"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-Key.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=1b7a9675728f971bc7a4663c7f1ea599"/><link rel="preload" as="image" href="https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/illustrations/Hand-NodePair.svg?fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=c64df4c6d27a6da752aa32c9e0622781"/><link rel="stylesheet" href="/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" data-precedence="next"/><link rel="stylesheet" href="/docs/_next/static/chunks/c928698dc1ff6619.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" 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_8x6thwaAdMoSwKy9LLYZnqdMHxBb"/><script src="/docs/_next/static/chunks/44795504c795ca32.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/d1b1cdd21ed53e8e.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/fdfbf135030e3fb6.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/turbopack-4d9a376f1ec6f340.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/44feaad9b151ab28.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/f1746529bda61c12.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/5b5faddf68256c2a.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/e3c9bac54f277b2e.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/97ad3475b7a07048.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/524a8e4de07ee6bc.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/7b29c0862e934ee7.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/b72019d6b5a88c70.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/c830e3a3b7d65c7f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/8351934ac3dcc58e.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/cd89d634146ad1d4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/084dec15e57eeab5.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/dccdcff987f89d19.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" async=""></script><script src="/docs/_next/static/chunks/14d1bd7ef8747813.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb" 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=+&amp;title=Work+with+Claude+Tag&amp;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.&amp;theme=4a95551acef5dd5d1bd02583&amp;signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95"/><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=+&amp;title=Work+with+Claude+Tag&amp;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.&amp;theme=4a95551acef5dd5d1bd02583&amp;signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95"/><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";
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_C7srm1KiD9uEN7uYAKWCYMypULfK" noModule=""></script></head><body class="antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","isDarkMode","system",null,["dark","light","true","false","system"],{"true":"dark","false":"light","dark":"dark","light":"light"},true,false)</script><script>(function(){try{var f=null;var v=f||localStorage.getItem("isDarkMode");if(v==='true')v='dark';else if(v==='false')v='light';if(v!=='light'&&v!=='dark'&&v!=='system')v="system";document.documentElement.setAttribute("data-theme-preference",v)}catch(e){}})();</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_8x6thwaAdMoSwKy9LLYZnqdMHxBb" 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 69
6969 --font-family-body-custom: "Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
7070
7171
72}
73</style><style>:root {
72}</style><style>:root {
7473 --primary: 14 14 14;
7574 --primary-light: 212 162 127;
7675 --primary-dark: 14 14 14;
from line 97
9897 "--assistant-sheet-width",
9998 true,
10099 false
101 )</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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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" 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" 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 class="truncate min-w-0">Search...</div></div><span 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" 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 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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg&quot;);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-[&#x27;&#x27;] 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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg&quot;);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]:[&amp;&gt;:first-child]:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:sm:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:md:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:lg:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:xl:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:sm:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:md:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:lg:hidden! peer-[.is-center]:[&amp;&gt;: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_5qnpfb39p7b9snpfiutb_-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" 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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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" 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" 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 class="truncate min-w-0">Search...</div></div><span 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" 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 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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/magnifying-glass.svg&quot;);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-[&#x27;&#x27;] 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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/ellipsis-vertical.svg&quot;);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]:[&amp;&gt;:first-child]:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:sm:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:md:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:lg:hidden! peer-[.is-custom]:[&amp;&gt;:first-child]:xl:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:sm:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:md:hidden! peer-[.is-center]:[&amp;&gt;:first-child]:lg:hidden! peer-[.is-center]:[&amp;&gt;: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 () {
102101 try {
103102 if (window.__mintlifyInitialSidebarScrollDone) return;
104103 
from line 3097
30983097:root.dark .example-gallery-cards .card:focus-visible {
30993098 box-shadow: 0 0 0 1px #2a78d6, 0 0 6px 1px rgb(24 79 149 / 60%), var(--card-shadow, 0 0 #0000);
31003099}
3101</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_6rh3b9qnpfb39p7b9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&amp;&gt;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 [&amp;&gt;*]:[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_dj3b9qnpfb39p7b9snpfiutb_" aria-label="More actions" class="group disabled:pointer-events-none [&amp;&gt;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&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;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&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=cfd209bc25a4794740c6ce203eb3cbd5 280w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=560&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=56bcce983cd8bde205683364e24e1685 560w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=840&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=336614fa9447c4f4f985d322bb667df7 840w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1100&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=fb5b4831af3174e5b49abee42199b5fc 1100w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1650&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=0244fb0eb9bb7dd0cf38fddeb44c41e0 1650w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=2500&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;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>
3100</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 [&amp;&gt;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 [&amp;&gt;*]:[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 [&amp;&gt;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&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;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&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=cfd209bc25a4794740c6ce203eb3cbd5 280w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=560&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=56bcce983cd8bde205683364e24e1685 560w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=840&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=336614fa9447c4f4f985d322bb667df7 840w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1100&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=fb5b4831af3174e5b49abee42199b5fc 1100w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=1650&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;s=0244fb0eb9bb7dd0cf38fddeb44c41e0 1650w, https://mintcdn.com/claude-ai/5JFKyLlO7sHMMf5J/images/claude-tag/logo/clay-spark.svg?w=2500&amp;fit=max&amp;auto=format&amp;n=5JFKyLlO7sHMMf5J&amp;q=85&amp;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>
31023101<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>
31033102<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>
31043103<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 3148
31493148<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>
31503149<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>
31513150<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>
3152<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_1hpbb9qnpfb39p7b9snpfiutb_" 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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg&quot;);mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_1hpbb9qnpfb39p7b9snpfiutb_" 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_1hpbb9qnpfb39p7b9snpfiutbH1_" 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_2hpbb9qnpfb39p7b9snpfiutb_" 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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg&quot;);mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_2hpbb9qnpfb39p7b9snpfiutb_" 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_2hpbb9qnpfb39p7b9snpfiutbH1_" 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_3hpbb9qnpfb39p7b9snpfiutb_" 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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg&quot;);mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_3hpbb9qnpfb39p7b9snpfiutb_" 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_3hpbb9qnpfb39p7b9snpfiutbH1_" 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_4hpbb9qnpfb39p7b9snpfiutb_" 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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg&quot;);mask-repeat:no-repeat;mask-position:center"></svg></div><div class="w-full"><h2 id="_R_4hpbb9qnpfb39p7b9snpfiutb_" 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_4hpbb9qnpfb39p7b9snpfiutbH1_" 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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg&quot;);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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg&quot;);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_C7srm1KiD9uEN7uYAKWCYMypULfK" 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-[&quot;&quot;] 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};
3153$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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"default\"]\n:HL[\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"style\"]\n:HL[\"/docs/_next/static/chunks/b6fc170d92e82913.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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\":\"sm5N-axEUyEWxC42hTuON\",\"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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/b6fc170d92e82913.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"MintlifyApiPlaygroundInputsInit\"]\nf:I[339756,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"default\"]\n10:I[556357,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ebb4a0bbc2ec28f0.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"default\"]\n11:I[837457,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"12:I[894587,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"13:I[152823,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"ColorVariables\"]\n"])</script><script>self.__next_f.push([1,"14:I[531961,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"FontScript\"]\n"])</script><script>self.__next_f.push([1,"15:I[649328,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"RoundedVariables\"]\n"])</script><script>self.__next_f.push([1,"16:I[702910,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/32f5b424705f70a1.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"RecommendedPagesList\"]\n17:I[570420,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"DataCurrentPathUpdater\"]\n18:I[172816,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"MintlifyNavigateEvents\"]\n19:I[341175,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/cbe90532d0ed1303.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"default\"]\n1c:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"OutletBoundary\"]\n1e:I[711533,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"AsyncMetadataOutlet\"]\n20:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add9"])</script><script>self.__next_f.push([1,"3a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"ViewportBoundary\"]\n22:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"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=[\\\"--scroll-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/ebb4a0bbc2ec28f0.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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/cbe90532d0ed1303.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-11\",{\"src\":\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-12\",{\"src\":\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-13\",{\"src\":\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-14\",{\"src\":\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-15\",{\"src\":\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-16\",{\"src\":\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-17\",{\"src\":\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-18\",{\"src\":\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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/cc565e9fca57898d.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/b72019d6b5a88c70.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/2f482bcd3294a910.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/3d4550911741fe33.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/e7ab3f319130be21.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/dea5b128a4a7c9f1.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nd:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/b6fc170d92e82913.css?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"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=4a95551acef5dd5d1bd02583\u0026signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95\"}],[\"$\",\"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=4a95551acef5dd5d1bd02583\u0026signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95\"}],[\"$\",\"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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"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_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"WebMcpRegistration\"]\n"])</script><script>self.__next_f.push([1,"2d:I[590280,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7a63fe294f4d58d8.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\"],\"LivePreviewProvider\"]\n"])</script><script>self.__next_f.push([1,"2e:I[973254,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2765442214b9dfe.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/2f17702f200b844f.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/f4f77eb1f9b05385.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_C7srm1KiD9uEN7uYAKWCYMypULfK\",\"/docs/_next/static/chunks/fd4246cf5bf12598.
3151<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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/gear.svg&quot;);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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/paper-plane.svg&quot;);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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/diagram-project.svg&quot;);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 [&amp;&gt;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/list.svg&quot;);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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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&amp;auto=format&amp;n=1fyDNLAICe3KG6rB&amp;q=85&amp;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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/x-twitter.svg&quot;);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(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg&quot;);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(&quot;https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/linkedin.svg&quot;);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_8x6thwaAdMoSwKy9LLYZnqdMHxBb" 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-[&quot;&quot;] 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};
3152$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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"default\"]\n:HL[\"/docs/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"style\"]\n:HL[\"/docs/_next/static/chunks/c928698dc1ff6619.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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\":\"13jojX8jX5CfDMC3GWVRn\",\"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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/c928698dc1ff6619.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"MintlifyApiPlaygroundInputsInit\"]\nf:I[339756,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"default\"]\n10:I[556357,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/44feaad9b151ab28.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"default\"]\n11:I[837457,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"12:I[894587,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"13:I[152823,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"ColorVariables\"]\n"])</script><script>self.__next_f.push([1,"14:I[531961,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"FontScript\"]\n"])</script><script>self.__next_f.push([1,"15:I[649328,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"RoundedVariables\"]\n"])</script><script>self.__next_f.push([1,"16:I[702910,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/f1746529bda61c12.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"RecommendedPagesList\"]\n17:I[570420,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"DataCurrentPathUpdater\"]\n18:I[172816,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"MintlifyNavigateEvents\"]\n19:I[341175,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/5b5faddf68256c2a.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"default\"]\n1c:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"OutletBoundary\"]\n1e:I[711533,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"AsyncMetadataOutlet\"]\n20:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add9"])</script><script>self.__next_f.push([1,"3a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"ViewportBoundary\"]\n22:I[897367,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"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=[\\\"--scroll-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/44feaad9b151ab28.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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/5b5faddf68256c2a.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-11\",{\"src\":\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-12\",{\"src\":\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-13\",{\"src\":\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-14\",{\"src\":\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-15\",{\"src\":\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-16\",{\"src\":\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-17\",{\"src\":\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-18\",{\"src\":\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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/e3c9bac54f277b2e.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/docs/_next/static/chunks/97ad3475b7a07048.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/docs/_next/static/chunks/524a8e4de07ee6bc.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/docs/_next/static/chunks/7b29c0862e934ee7.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/docs/_next/static/chunks/b72019d6b5a88c70.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/docs/_next/static/chunks/c830e3a3b7d65c7f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/docs/_next/static/chunks/8351934ac3dcc58e.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/docs/_next/static/chunks/cd89d634146ad1d4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/docs/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/docs/_next/static/chunks/084dec15e57eeab5.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/docs/_next/static/chunks/dccdcff987f89d19.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nd:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/docs/_next/static/chunks/c928698dc1ff6619.css?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"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=4a95551acef5dd5d1bd02583\u0026signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95\"}],[\"$\",\"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=4a95551acef5dd5d1bd02583\u0026signature=7a40b8ed87f2dd3f7161d711ae38f9628b6d0638b6b9f67cab511f054bbf9d95\"}],[\"$\",\"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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"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_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"WebMcpRegistration\"]\n"])</script><script>self.__next_f.push([1,"2d:I[590280,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/182ec57ca888cb90.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/69d346b521ee05f9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/01b1217832d9ab27.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/79deac81143c6431.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/656312afcdb2e698.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/b241678460c3859c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7cf73f48f7f00160.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/e07fdeaa7fc096e9.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7d39fd67be814546.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/2352c47ad41f16e4.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\"],\"LivePreviewProvider\"]\n"])</script><script>self.__next_f.push([1,"2e:I[973254,[\"/docs/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/docs/_next/static/chunks/7107e565fd735ebb.js?dpl=dpl_8x6thwaAdMoSwKy9LLYZnqdMHxBb\",\"/doc

cloud-environments Changed · +301 / -319 lines

### Add network secrets #### Add a secret #### Add a secret on a Team plan without an organization admin role #### Which requests get the secret #### Requests that never get the secret

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 2
22 
33> Configure cloud environments for Claude Code cloud sessions: network access levels, environment variables, setup scripts, and environment caching.
44 
5<Note>
6 Cloud environments apply to [cloud sessions](/docs/en/claude-code-on-the-web), 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</Note>
5> [!NOTE]
6>
7> Cloud environments apply to [cloud sessions](/docs/en/claude-code-on-the-web), 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 
99Each [cloud session](/docs/en/claude-code-on-the-web) 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 
from line 19
1919 
2020Each 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.
2121 
22<Info>
23 [Remote Control](/docs/en/remote-control) 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</Info>
22> [!NOTE]
23>
24> [Remote Control](/docs/en/remote-control) 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).
2525 
2626## The Default environment
2727 
from line 49
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 
52<Steps>
53 <Step title="Open the environment selector">
54 On the new-session screen, select the first control in the row under the message box.
55 </Step>
56 
57 <Step title="Add or edit an environment">
58 * **Add an environment**: select **New environment** at the bottom of the menu to open the **New environment** dialog. Fill in the form and select **Add environment**. Your new session then uses the environment you added.
59 * **Edit an environment**: find its row under **Cloud**. If **Cloud** is a single row, select it to open the list. If your environment isn't listed under **Cloud**, select the **More** row under that heading. Hover over the environment's row and select the settings icon that appears on its right to open its dialog.
60 
61 The dialog includes the name, network access level, environment variables, and setup script. To store a key that sessions use without seeing it, see [Add network secrets](#add-network-secrets).
62 </Step>
63</Steps>
52**1. Open the environment selector**
53 
54On the new-session screen, select the first control in the row under the message box.
55 
56**2. Add or edit an environment**
57 
58* **Add an environment**: select **New environment** at the bottom of the menu to open the **New environment** dialog. Fill in the form and select **Add environment**. Your new session then uses the environment you added.
59* **Edit an environment**: find its row under **Cloud**. If **Cloud** is a single row, select it to open the list. If your environment isn't listed under **Cloud**, select the **More** row under that heading. Hover over the environment's row and select the settings icon that appears on its right to open its dialog.
60 
61The dialog includes the name, network access level, environment variables, and setup script. To store a key that sessions use without seeing it, see [Add network secrets](#add-network-secrets).
6462 
6563### Set environment variables
6664 
from line 85
8785 
8886Anyone 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.
8987 
90<span id="add-api-credentials" />
91 
92<h3 id="add-network-secrets">
93 Add network secrets
94</h3>
88### Add network secrets
9589 
9690A network secret is an API key or token you store on a cloud environment so Claude can call that API from any session in the environment without seeing the key. Anthropic's agent proxy adds the key to requests for the hosts you list, after each request leaves the session's VM, so the key itself stays outside the VM.
9791 
from line 103
109103* **API reachability**: the API accepts connections from the internet, because requests leave from Anthropic's network
110104* **Encryption keys**: if your organization uses customer-managed encryption keys, you can't save network secrets
111105 
112<h4 id="add-a-credential">
113 Add a secret
114</h4>
106#### Add a secret
115107 
116108You add secrets one at a time, and you can't edit a secret after you add it. To change a secret's hosts or value, delete it and add it again.
117109 
118110To add a secret to a [shared environment](#organization-shared-environments), open it for editing from the **Cloud environments** page in [admin settings](https://claude.ai/admin-settings), then continue step 1 from the **Network secrets** section. If you're on a Team plan and don't hold an [organization admin role](#requirements), follow step 1 on your own environment, then [fill in the shorter form](#add-a-secret-without-the-role).
119111 
120<Steps>
121 <Step title="Open the environment's network secrets">
122 [Open the environment for editing](#configure-your-environment) at [claude.ai/code](https://claude.ai/code). In the **Edit cloud environment** dialog, find the **Network secrets** section. You see the secrets already on the environment, each with the hosts it applies to.
123 </Step>
124 
125 <Step title="Add the secret">
126 Select **Add secret** and fill in the form. Keep the default **Secret type**, **Bearer**, for an API key that travels in a request header, and fill in these fields:
127 
128 * **Name**: a label for the secret, such as `Internal billing API`
129 * **Allowed websites**: the API's hosts, such as `api.example.com`. A leading `*.` matches every subdomain
130 * **Custom headers**: one row for the header that carries the key. The row starts with `Authorization` as the header's **Name** and `Bearer` as its **Prefix**; paste the key itself as the **Value**. For a header like `X-Api-Key` that takes the bare value, change the name and clear the prefix
131 
132 For an API that authenticates another way, pick a different **Secret type**. The list is the same one [Claude Tag](https://claude.com/docs/claude-tag/overview), the Slack integration for Team and Enterprise plans, offers for [connections](https://claude.com/docs/claude-tag/admins/add-connections).
133 </Step>
134 
135 <Step title="Save the secret">
136 Select **Add**. The secret appears in the list with its hosts, saved without the dialog's **Save changes** button. You can't view the value again after saving.
137 </Step>
138</Steps>
112**1. Open the environment's network secrets**
113 
114[Open the environment for editing](#configure-your-environment) at [claude.ai/code](https://claude.ai/code). In the **Edit cloud environment** dialog, find the **Network secrets** section. You see the secrets already on the environment, each with the hosts it applies to.
115 
116**2. Add the secret**
117 
118Select **Add secret** and fill in the form. Keep the default **Secret type**, **Bearer**, for an API key that travels in a request header, and fill in these fields:
119 
120* **Name**: a label for the secret, such as `Internal billing API`
121* **Allowed websites**: the API's hosts, such as `api.example.com`. A leading `*.` matches every subdomain
122* **Custom headers**: one row for the header that carries the key. The row starts with `Authorization` as the header's **Name** and `Bearer` as its **Prefix**; paste the key itself as the **Value**. For a header like `X-Api-Key` that takes the bare value, change the name and clear the prefix
123 
124For an API that authenticates another way, pick a different **Secret type**. The list is the same one [Claude Tag](https://claude.com/docs/claude-tag/overview), the Slack integration for Team and Enterprise plans, offers for [connections](https://claude.com/docs/claude-tag/admins/add-connections).
125 
126**3. Save the secret**
127 
128Select **Add**. The secret appears in the list with its hosts, saved without the dialog's **Save changes** button. You can't view the value again after saving.
139129 
140130To confirm the secret works, start a session in the environment and ask Claude to call the API, for example with `curl`. The API answers as if the key were in the request, and the key doesn't appear in the session's environment variables or in any file. If the list marks a secret **Not sent** instead, the note under it says why and what to do. Two secrets whose hosts overlap without matching exactly get no marker, and the agent proxy sends only one of them.
141131 
142<h4 id="add-a-secret-without-the-role">
143 Add a secret on a Team plan without an organization admin role
144</h4>
132#### Add a secret on a Team plan without an organization admin role
145133 
146134If you're on a Team plan and don't hold an [organization admin role](#requirements), the **Add secret** form takes one secret for one host. Select **Add secret** in your environment's [**Network secrets** section](#add-a-credential), fill in these fields, then select the form's **Add secret** button:
147135 
from line 137
149137* **Name**: an optional label for the secret
150138* **Secret type**: **Token** for a key that travels in a request header, or **Username and password**. For a token, paste the key as the **Value**
151139 
152<h4 id="which-requests-get-the-credential">
153 Which requests get the secret
154</h4>
140#### Which requests get the secret
155141 
156142The agent proxy attaches a secret to a request when the request's host matches one you listed on that secret. Sessions can reach those hosts even when the environment's [network access level](#access-levels) wouldn't otherwise allow them, except the [hosts that never get the secret](#requests-that-never-get-the-credential). The secret applies in every session that runs in the environment, whoever started it, until you delete it.
157143 
158<h4 id="requests-that-never-get-the-credential">
159 Requests that never get the secret
160</h4>
144#### Requests that never get the secret
161145 
162146The agent proxy never attaches a secret you add to these requests:
163147 
from line 201
217201 
218202When 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.
219203 
220<Note>
221 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#security-and-isolation). Turn off any connector you don't need to limit which tools Claude can reach.
222</Note>
204> [!NOTE]
205>
206> 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#security-and-isolation). Turn off any connector you don't need to limit which tools Claude can reach.
223207 
224208### Access levels
225209 
from line 265
281265 
282266In Anthropic-hosted environments, each session gets a fresh virtual machine (VM) running Ubuntu 24.04 on x86\_64, regardless of your own operating system and CPU architecture, with your repository cloned and common toolchains pre-installed. When a dependency provides precompiled binaries, such as Ruby gems with native extensions or prebuilt Python wheels, use its x86\_64 Linux build to match the VM. This section covers the Anthropic-hosted defaults, the built-in GitHub tools, how to [run tests and services](#run-tests-start-services-and-add-packages), the [resource limits](#resource-limits) each VM gets, and the [time limits](#time-limits) on long-running work.
283267 
284<Note>
285 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.
286</Note>
268> [!NOTE]
269>
270> 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.
287271 
288272### What carries over from your setup
289273 
from line 519
535519 
536520To confirm `npm install` succeeded, start a cloud session and ask Claude to show `node_modules/.install_pkgs.sha256`. The file lists a hash for each of the three files. If the file is missing, ask Claude to run `npm install` and report the error.
537521 
538<Note>
539 If `npm install` reads other files, such as a workspace's `package.json`, an `.npmrc`, or your `postinstall` script's inputs, add them to the `sha256sum` command that saves the hashes. Otherwise, you keep the old packages after one of those files changes.
540</Note>
522> [!NOTE]
523>
524> If `npm install` reads other files, such as a workspace's `package.json`, an `.npmrc`, or your `postinstall` script's inputs, add them to the `sha256sum` command that saves the hashes. Otherwise, you keep the old packages after one of those files changes.
541525 
542526#### Limitations in cloud sessions
543527 
from line 539
555539 
556540With **Trusted** network access, sessions can reach the following domains by default. Domains marked with `*` indicate wildcard subdomain matching, so `*.gcr.io` allows any subdomain of `gcr.io`.
557541 
558<AccordionGroup>
559 <Accordion title="Anthropic services">
560 * api.anthropic.com
561 * docs.claude.com
562 * platform.claude.com
563 * code.claude.com
564 * claude.ai
565 * claude.com
566 * support.claude.com
567 * anthropic.com
568 * [www.anthropic.com](http://www.anthropic.com)
569 </Accordion>
570 
571 <Accordion title="Version control">
572 * github.com
573 * [www.github.com](http://www.github.com)
574 * api.github.com
575 * npm.pkg.github.com
576 * raw\.githubusercontent.com
577 * pkg-npm.githubusercontent.com
578 * objects.githubusercontent.com
579 * release-assets.githubusercontent.com
580 * codeload.github.com
581 * avatars.githubusercontent.com
582 * camo.githubusercontent.com
583 * gist.github.com
584 * gitlab.com
585 * [www.gitlab.com](http://www.gitlab.com)
586 * registry.gitlab.com
587 * bitbucket.org
588 * [www.bitbucket.org](http://www.bitbucket.org)
589 * api.bitbucket.org
590 </Accordion>
591 
592 <Accordion title="Container registries">
593 * registry-1.docker.io
594 * auth.docker.io
595 * index.docker.io
596 * hub.docker.com
597 * [www.docker.com](http://www.docker.com)
598 * production.cloudflare.docker.com
599 * production.cloudfront.docker.com
600 * download.docker.com
601 * gcr.io
602 * \*.gcr.io
603 * ghcr.io
604 * mcr.microsoft.com
605 * \*.data.mcr.microsoft.com
606 * public.ecr.aws
607 </Accordion>
608 
609 <Accordion title="Cloud platforms">
610 * cloud.google.com
611 * accounts.google.com
612 * gcloud.google.com
613 * \*.googleapis.com
614 * storage.googleapis.com
615 * compute.googleapis.com
616 * container.googleapis.com
617 * azure.com
618 * portal.azure.com
619 * microsoft.com
620 * [www.microsoft.com](http://www.microsoft.com)
621 * \*.microsoftonline.com
622 * packages.microsoft.com
623 * dotnet.microsoft.com
624 * dot.net
625 * visualstudio.com
626 * dev.azure.com
627 * \*.amazonaws.com
628 * \*.api.aws
629 * oracle.com
630 * [www.oracle.com](http://www.oracle.com)
631 * java.com
632 * [www.java.com](http://www.java.com)
633 * java.net
634 * [www.java.net](http://www.java.net)
635 * download.oracle.com
636 * yum.oracle.com
637 * \*.r2.cloudflarestorage.com
638 </Accordion>
639 
640 <Accordion title="JavaScript and Node package managers">
641 * registry.npmjs.org
642 * [www.npmjs.com](http://www.npmjs.com)
643 * [www.npmjs.org](http://www.npmjs.org)
644 * npmjs.com
645 * npmjs.org
646 * yarnpkg.com
647 * registry.yarnpkg.com
648 * jsr.io
649 * npm.jsr.io
650 </Accordion>
651 
652 <Accordion title="Python package managers">
653 * pypi.org
654 * [www.pypi.org](http://www.pypi.org)
655 * files.pythonhosted.org
656 * pythonhosted.org
657 * test.pypi.org
658 * pypi.python.org
659 * pypa.io
660 * [www.pypa.io](http://www.pypa.io)
661 </Accordion>
662 
663 <Accordion title="Ruby package managers">
664 * rubygems.org
665 * [www.rubygems.org](http://www.rubygems.org)
666 * api.rubygems.org
667 * index.rubygems.org
668 * ruby-lang.org
669 * [www.ruby-lang.org](http://www.ruby-lang.org)
670 * rubyforge.org
671 * [www.rubyforge.org](http://www.rubyforge.org)
672 * rubyonrails.org
673 * [www.rubyonrails.org](http://www.rubyonrails.org)
674 * rvm.io
675 * get.rvm.io
676 </Accordion>
677 
678 <Accordion title="Rust package managers">
679 * crates.io
680 * [www.crates.io](http://www.crates.io)
681 * index.crates.io
682 * static.crates.io
683 * rustup.rs
684 * static.rust-lang.org
685 * [www.rust-lang.org](http://www.rust-lang.org)
686 </Accordion>
687 
688 <Accordion title="Go package managers">
689 * proxy.golang.org
690 * sum.golang.org
691 * index.golang.org
692 * golang.org
693 * [www.golang.org](http://www.golang.org)
694 * goproxy.io
695 * pkg.go.dev
696 </Accordion>
697 
698 <Accordion title="JVM package managers">
699 * maven.org
700 * repo.maven.org
701 * central.maven.org
702 * repo1.maven.org
703 * repo.maven.apache.org
704 * maven.google.com
705 * jcenter.bintray.com
706 * gradle.org
707 * [www.gradle.org](http://www.gradle.org)
708 * services.gradle.org
709 * plugins.gradle.org
710 * plugins-artifacts.gradle.org
711 * kotlinlang.org
712 * [www.kotlinlang.org](http://www.kotlinlang.org)
713 * spring.io
714 * repo.spring.io
715 </Accordion>
716 
717 <Accordion title="Other package managers">
718 * packagist.org (PHP Composer)
719 * [www.packagist.org](http://www.packagist.org)
720 * repo.packagist.org
721 * nuget.org (.NET NuGet)
722 * [www.nuget.org](http://www.nuget.org)
723 * api.nuget.org
724 * pub.dev (Dart/Flutter)
725 * api.pub.dev
726 * hex.pm (Elixir/Erlang)
727 * [www.hex.pm](http://www.hex.pm)
728 * cpan.org (Perl CPAN)
729 * [www.cpan.org](http://www.cpan.org)
730 * metacpan.org
731 * [www.metacpan.org](http://www.metacpan.org)
732 * api.metacpan.org
733 * cocoapods.org (iOS/macOS)
734 * [www.cocoapods.org](http://www.cocoapods.org)
735 * cdn.cocoapods.org
736 * haskell.org
737 * [www.haskell.org](http://www.haskell.org)
738 * hackage.haskell.org
739 * swift.org
740 * [www.swift.org](http://www.swift.org)
741 </Accordion>
742 
743 <Accordion title="Linux distributions">
744 * archive.ubuntu.com
745 * security.ubuntu.com
746 * ubuntu.com
747 * [www.ubuntu.com](http://www.ubuntu.com)
748 * \*.ubuntu.com
749 * ppa.launchpad.net
750 * launchpad.net
751 * [www.launchpad.net](http://www.launchpad.net)
752 * \*.nixos.org
753 </Accordion>
754 
755 <Accordion title="Development tools and platforms">
756 * dl.k8s.io (Kubernetes)
757 * pkgs.k8s.io
758 * k8s.io
759 * [www.k8s.io](http://www.k8s.io)
760 * releases.hashicorp.com (HashiCorp)
761 * apt.releases.hashicorp.com
762 * rpm.releases.hashicorp.com
763 * archive.releases.hashicorp.com
764 * hashicorp.com
765 * [www.hashicorp.com](http://www.hashicorp.com)
766 * repo.anaconda.com (Anaconda/Conda)
767 * conda.anaconda.org
768 * anaconda.org
769 * [www.anaconda.com](http://www.anaconda.com)
770 * anaconda.com
771 * continuum.io
772 * apache.org (Apache)
773 * [www.apache.org](http://www.apache.org)
774 * archive.apache.org
775 * downloads.apache.org
776 * eclipse.org (Eclipse)
777 * [www.eclipse.org](http://www.eclipse.org)
778 * download.eclipse.org
779 * nodejs.org (Node.js)
780 * [www.nodejs.org](http://www.nodejs.org)
781 * developer.apple.com
782 * developer.android.com
783 * pkg.stainless.com
784 * binaries.prisma.sh
785 </Accordion>
786 
787 <Accordion title="Cloud services and monitoring">
788 * http-intake.logs.datadoghq.com
789 * \*.datadoghq.com
790 * \*.datadoghq.eu
791 * api.honeycomb.io
792 </Accordion>
793 
794 <Accordion title="Content delivery and mirrors">
795 * sourceforge.net
796 * \*.sourceforge.net
797 * packagecloud.io
798 * \*.packagecloud.io
799 * fonts.googleapis.com
800 * fonts.gstatic.com
801 </Accordion>
802 
803 <Accordion title="Schema and configuration">
804 * json-schema.org
805 * [www.json-schema.org](http://www.json-schema.org)
806 * json.schemastore.org
807 * [www.schemastore.org](http://www.schemastore.org)
808 </Accordion>
809 
810 <Accordion title="Model Context Protocol">
811 * \*.modelcontextprotocol.io
812 </Accordion>
813</AccordionGroup>
542> **Anthropic services**
543>
544> * api.anthropic.com
545> * docs.claude.com
546> * platform.claude.com
547> * code.claude.com
548> * claude.ai
549> * claude.com
550> * support.claude.com
551> * anthropic.com
552> * [www.anthropic.com](http://www.anthropic.com)
553 
554> **Version control**
555>
556> * github.com
557> * [www.github.com](http://www.github.com)
558> * api.github.com
559> * npm.pkg.github.com
560> * raw\.githubusercontent.com
561> * pkg-npm.githubusercontent.com
562> * objects.githubusercontent.com
563> * release-assets.githubusercontent.com
564> * codeload.github.com
565> * avatars.githubusercontent.com
566> * camo.githubusercontent.com
567> * gist.github.com
568> * gitlab.com
569> * [www.gitlab.com](http://www.gitlab.com)
570> * registry.gitlab.com
571> * bitbucket.org
572> * [www.bitbucket.org](http://www.bitbucket.org)
573> * api.bitbucket.org
574 
575> **Container registries**
576>
577> * registry-1.docker.io
578> * auth.docker.io
579> * index.docker.io
580> * hub.docker.com
581> * [www.docker.com](http://www.docker.com)
582> * production.cloudflare.docker.com
583> * production.cloudfront.docker.com
584> * download.docker.com
585> * gcr.io
586> * \*.gcr.io
587> * ghcr.io
588> * mcr.microsoft.com
589> * \*.data.mcr.microsoft.com
590> * public.ecr.aws
591 
592> **Cloud platforms**
593>
594> * cloud.google.com
595> * accounts.google.com
596> * gcloud.google.com
597> * \*.googleapis.com
598> * storage.googleapis.com
599> * compute.googleapis.com
600> * container.googleapis.com
601> * azure.com
602> * portal.azure.com
603> * microsoft.com
604> * [www.microsoft.com](http://www.microsoft.com)
605> * \*.microsoftonline.com
606> * packages.microsoft.com
607> * dotnet.microsoft.com
608> * dot.net
609> * visualstudio.com
610> * dev.azure.com
611> * \*.amazonaws.com
612> * \*.api.aws
613> * oracle.com
614> * [www.oracle.com](http://www.oracle.com)
615> * java.com
616> * [www.java.com](http://www.java.com)
617> * java.net
618> * [www.java.net](http://www.java.net)
619> * download.oracle.com
620> * yum.oracle.com
621> * \*.r2.cloudflarestorage.com
622 
623> **JavaScript and Node package managers**
624>
625> * registry.npmjs.org
626> * [www.npmjs.com](http://www.npmjs.com)
627> * [www.npmjs.org](http://www.npmjs.org)
628> * npmjs.com
629> * npmjs.org
630> * yarnpkg.com
631> * registry.yarnpkg.com
632> * jsr.io
633> * npm.jsr.io
634 
635> **Python package managers**
636>
637> * pypi.org
638> * [www.pypi.org](http://www.pypi.org)
639> * files.pythonhosted.org
640> * pythonhosted.org
641> * test.pypi.org
642> * pypi.python.org
643> * pypa.io
644> * [www.pypa.io](http://www.pypa.io)
645 
646> **Ruby package managers**
647>
648> * rubygems.org
649> * [www.rubygems.org](http://www.rubygems.org)
650> * api.rubygems.org
651> * index.rubygems.org
652> * ruby-lang.org
653> * [www.ruby-lang.org](http://www.ruby-lang.org)
654> * rubyforge.org
655> * [www.rubyforge.org](http://www.rubyforge.org)
656> * rubyonrails.org
657> * [www.rubyonrails.org](http://www.rubyonrails.org)
658> * rvm.io
659> * get.rvm.io
660 
661> **Rust package managers**
662>
663> * crates.io
664> * [www.crates.io](http://www.crates.io)
665> * index.crates.io
666> * static.crates.io
667> * rustup.rs
668> * static.rust-lang.org
669> * [www.rust-lang.org](http://www.rust-lang.org)
670 
671> **Go package managers**
672>
673> * proxy.golang.org
674> * sum.golang.org
675> * index.golang.org
676> * golang.org
677> * [www.golang.org](http://www.golang.org)
678> * goproxy.io
679> * pkg.go.dev
680 
681> **JVM package managers**
682>
683> * maven.org
684> * repo.maven.org
685> * central.maven.org
686> * repo1.maven.org
687> * repo.maven.apache.org
688> * maven.google.com
689> * jcenter.bintray.com
690> * gradle.org
691> * [www.gradle.org](http://www.gradle.org)
692> * services.gradle.org
693> * plugins.gradle.org
694> * plugins-artifacts.gradle.org
695> * kotlinlang.org
696> * [www.kotlinlang.org](http://www.kotlinlang.org)
697> * spring.io
698> * repo.spring.io
699 
700> **Other package managers**
701>
702> * packagist.org (PHP Composer)
703> * [www.packagist.org](http://www.packagist.org)
704> * repo.packagist.org
705> * nuget.org (.NET NuGet)
706> * [www.nuget.org](http://www.nuget.org)
707> * api.nuget.org
708> * pub.dev (Dart/Flutter)
709> * api.pub.dev
710> * hex.pm (Elixir/Erlang)
711> * [www.hex.pm](http://www.hex.pm)
712> * cpan.org (Perl CPAN)
713> * [www.cpan.org](http://www.cpan.org)
714> * metacpan.org
715> * [www.metacpan.org](http://www.metacpan.org)
716> * api.metacpan.org
717> * cocoapods.org (iOS/macOS)
718> * [www.cocoapods.org](http://www.cocoapods.org)
719> * cdn.cocoapods.org
720> * haskell.org
721> * [www.haskell.org](http://www.haskell.org)
722> * hackage.haskell.org
723> * swift.org
724> * [www.swift.org](http://www.swift.org)
725 
726> **Linux distributions**
727>
728> * archive.ubuntu.com
729> * security.ubuntu.com
730> * ubuntu.com
731> * [www.ubuntu.com](http://www.ubuntu.com)
732> * \*.ubuntu.com
733> * ppa.launchpad.net
734> * launchpad.net
735> * [www.launchpad.net](http://www.launchpad.net)
736> * \*.nixos.org
737 
738> **Development tools and platforms**
739>
740> * dl.k8s.io (Kubernetes)
741> * pkgs.k8s.io
742> * k8s.io
743> * [www.k8s.io](http://www.k8s.io)
744> * releases.hashicorp.com (HashiCorp)
745> * apt.releases.hashicorp.com
746> * rpm.releases.hashicorp.com
747> * archive.releases.hashicorp.com
748> * hashicorp.com
749> * [www.hashicorp.com](http://www.hashicorp.com)
750> * repo.anaconda.com (Anaconda/Conda)
751> * conda.anaconda.org
752> * anaconda.org
753> * [www.anaconda.com](http://www.anaconda.com)
754> * anaconda.com
755> * continuum.io
756> * apache.org (Apache)
757> * [www.apache.org](http://www.apache.org)
758> * archive.apache.org
759> * downloads.apache.org
760> * eclipse.org (Eclipse)
761> * [www.eclipse.org](http://www.eclipse.org)
762> * download.eclipse.org
763> * nodejs.org (Node.js)
764> * [www.nodejs.org](http://www.nodejs.org)
765> * developer.apple.com
766> * developer.android.com
767> * pkg.stainless.com
768> * binaries.prisma.sh
769 
770> **Cloud services and monitoring**
771>
772> * http-intake.logs.datadoghq.com
773> * \*.datadoghq.com
774> * \*.datadoghq.eu
775> * api.honeycomb.io
776 
777> **Content delivery and mirrors**
778>
779> * sourceforge.net
780> * \*.sourceforge.net
781> * packagecloud.io
782> * \*.packagecloud.io
783> * fonts.googleapis.com
784> * fonts.gstatic.com
785 
786> **Schema and configuration**
787>
788> * json-schema.org
789> * [www.json-schema.org](http://www.json-schema.org)
790> * json.schemastore.org
791> * [www.schemastore.org](http://www.schemastore.org)
792 
793> **Model Context Protocol**
794>
795> * \*.modelcontextprotocol.io
814796 
815797## Related resources
816798 
817799 

code-review-customize Changed · +6 / -6 lines

from line 9
99 
1010Add `REVIEW.md` at your repository root and merge it. Then [protect your default branch](#which-branch-review-md-is-read-from).
1111 
12<Note>
13 To change how thorough reviews are or when they run, ask an Owner to change the [review level](/docs/en/code-review-setup#set-the-default-review-level) or the [**Review runs** setting](/docs/en/code-review-setup#set-when-reviews-run).
14</Note>
12> [!NOTE]
13>
14> To change how thorough reviews are or when they run, ask an Owner to change the [review level](/docs/en/code-review-setup#set-the-default-review-level) or the [**Review runs** setting](/docs/en/code-review-setup#set-when-reviews-run).
1515 
1616## Use CLAUDE.md for project-wide rules
1717 
from line 38
3838 
3939Before you rely on a subdirectory file, protect your default branch and check [what a review reads for your branch setup](#what-a-review-reads-for-each-branch-setup).
4040 
41<Note>
42 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</Note>
41> [!NOTE]
42>
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.
4444 
4545### Example REVIEW\.md
4646 

code-review-local Changed · +22 / -24 lines

from line 6
66 
77The command works on any plan. The review runs in your own session, so it counts toward your plan's usage or API billing the same way the rest of the session does.
88 
9<Note>
10 To have every pull request in a repository reviewed automatically on GitHub, see [Code Review](/docs/en/code-review), a managed service that an Owner turns on for your organization.
11</Note>
9> [!NOTE]
10>
11> To have every pull request in a repository reviewed automatically on GitHub, see [Code Review](/docs/en/code-review), 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 
15<Steps>
16 <Step title="Run /code-review">
17 Run the command:
15**1. Run /code-review**
1816 
19 ```text theme={null}
20 /code-review
21 ```
17Run the command:
2218 
23 With no target, the review covers the changes on your current branch. To point the review at a pull request, another branch, a path, or a range of commits instead, see [Choose what to review](#choose-what-to-review).
19```text theme={null}
20/code-review
21```
2422 
25 You can also add flags:
23With no target, the review covers the changes on your current branch. To point the review at a pull request, another branch, a path, or a range of commits instead, see [Choose what to review](#choose-what-to-review).
2624 
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).
28 * `--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
29 </Step>
25You can also add flags:
3026 
31 <Step title="Keep working">
32 The review runs as a background [subagent](/docs/en/sub-agents) with its own context window, so it doesn't fill your conversation. The findings arrive in your conversation when the review completes.
33 </Step>
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).
28* `--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
3429 
35 <Step title="Act on the findings">
36 Ask Claude to fix what the review found. With `--fix` or `--comment`, Claude applies or posts the findings as part of the review, and you may be asked to approve its edits.
37 </Step>
38</Steps>
30**2. Keep working**
3931 
32The review runs as a background [subagent](/docs/en/sub-agents) with its own context window, so it doesn't fill your conversation. The findings arrive in your conversation when the review completes.
33 
34**3. Act on the findings**
35 
36Ask Claude to fix what the review found. With `--fix` or `--comment`, Claude applies or posts the findings as part of the review, and you may be asked to approve its edits.
37 
4038## Choose what to review
4139 
4240To review something other than your current branch, type a target after the effort level and any flags. Claude receives that text as the review target. A target can be a pull request number, a branch name, a file path, or a Git revision range. Find what you want reviewed in the first column and type what the second column shows:
from line 145
147145 
148146When the target is a `github.com` pull request, you can have Claude [post the finished findings to the PR](/docs/en/ultrareview#post-findings-to-the-pull-request) as a comment from your GitHub account. Requires Claude Code v2.1.227 or later.
149147 
150<Note>
151 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) 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`.
152</Note>
148> [!NOTE]
149>
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) 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`.
153151 
154152To 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.
155153 

code-review-pull-requests Changed · +33 / -32 lines

from line 6
66 
77An Owner controls [when reviews run](/docs/en/code-review-setup#set-when-reviews-run) and [how thorough they are](/docs/en/code-review-setup#set-the-default-review-level) for each repository.
88 
9<Note>
10 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</Note>
9> [!NOTE]
10>
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).
1212 
1313## Severity levels
1414 
from line 53
5353 
5454To gate a merge or post a summary from your own CI, parse the last line of the Details text with `gh` and jq. That line is a machine-readable comment.
5555 
56<Steps>
57 <Step title="Find the check run ID">
58 From your shell, list the commit's check runs and take the `id` of the `Claude Code Review` run. Replace `OWNER` and `REPO` with your repository owner and name, and `<commit-sha>` with the pull request's head commit:
56**1. Find the check run ID**
5957 
60 ```bash theme={null}
61 gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'
62 ```
63 </Step>
58From your shell, list the commit's check runs and take the `id` of the `Claude Code Review` run. Replace `OWNER` and `REPO` with your repository owner and name, and `<commit-sha>` with the pull request's head commit:
6459 
65 <Step title="Read the severity counts">
66 Read the counts from that check run, replacing `CHECK_RUN_ID` with the ID:
60```bash theme={null}
61gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'
62```
6763 
68 ```bash theme={null}
69 gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \
70 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'
71 ```
64**2. Read the severity counts**
7265 
73 This prints a JSON object with a count per severity and its keys in alphabetical order, for example `{"nit": 1, "normal": 2, "pre_existing": 0}`. The counts include findings from earlier reviews of the pull request whose threads are still open.
74 </Step>
66Read the counts from that check run, replacing `CHECK_RUN_ID` with the ID:
7567 
76 <Step title="Act on the result">
77 Have your script handle these cases:
68```bash theme={null}
69gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \
70 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'
71```
7872 
79 * **`normal` is above zero**: fail the job if you want to gate the merge. The `normal` key holds the count of Important findings, so Claude found at least one bug worth fixing before merge.
80 * **The line is missing**: treat it as no verdict rather than as zero findings. A check run for a review that failed, timed out, was canceled, or was superseded by a newer one has no such line, and some completed reviews have none either.
81 </Step>
82</Steps>
73This prints a JSON object with a count per severity and its keys in alphabetical order, for example `{"nit": 1, "normal": 2, "pre_existing": 0}`. The counts include findings from earlier reviews of the pull request whose threads are still open.
8374 
75**3. Act on the result**
76 
77Have your script handle these cases:
78 
79* **`normal` is above zero**: fail the job if you want to gate the merge. The `normal` key holds the count of Important findings, so Claude found at least one bug worth fixing before merge.
80* **The line is missing**: treat it as no verdict rather than as zero findings. A check run for a review that failed, timed out, was canceled, or was superseded by a newer one has no such line, and some completed reviews have none either.
81 
8482## Request a review
8583 
8684If your pull request is a draft or comes from a fork, automatic reviews skip it, so [request the review with a comment command](#review-drafts-and-pull-requests-from-forks). To get a review on your pull request, do one of these:
from line 95
9795 
9896| Command | What it does | When to use it |
9997| :- | :- | :- |
100| `@claude review` | Starts a single review without subscribing the PR to future pushes | You want one review now, such as on a pull request in a repository set to Manual, or another review right away in the other modes |
101| `@claude review always` | Starts a review and subscribes the PR to push-triggered reviews going forward | You want every subsequent push to start a fresh review, such as on a high-priority PR in a repository set to Manual |
98| `@claude review` | Starts a single review without subscribing the PR to future pushes | You want one review now, such as on a pull request in a repository set to **Manual**, or another review right away in the other modes |
99| `@claude review always` | Starts a review and subscribes the PR to push-triggered reviews going forward | You want every subsequent push to start a fresh review, such as on a high-priority PR in a repository set to **Manual** |
102100| `@claude review once` | Same as `@claude review`: starts a single review without subscribing | The same cases as `@claude review` |
101| `@claude review stop` | Ends the PR's subscription to push-triggered reviews, without starting a review or canceling one that's already running. Claude replies with a comment instead of a check run. | You subscribed a PR with `@claude review always` in a repository set to **Manual** or **Once after PR creation**, and no longer want each push to start a review |
103102 
104For any of these commands to start a review, all of these conditions have to hold:
103In a repository set to **After every push**, you can't stop reviews with a comment, because pushes there start reviews with or without a subscription. To pause reviews on one pull request there, convert it to a draft.
105104 
105For any comment command to take effect, all of these conditions have to hold:
106 
106107* Post it as a new top-level pull request comment, not an inline comment on a diff line and not the body of a review. Editing an earlier comment doesn't count.
107* Put the command at the start of the comment, with `always` on the same line as the rest of the command. Capitalization doesn't matter.
108* Put the whole command on one line at the start of the comment. Other text can follow it. If `always` or `stop` is misspelled or on a later line, Claude reads the comment as a plain `@claude review` and starts a single review. Capitalization doesn't matter.
108109* You need write, maintain, or admin permission on the repository. Claude checks this with GitHub for each person who comments, and comments from bots don't start reviews.
109110* The pull request must be open.
110111 
111When the command is accepted, a **Claude Code Review** check run appears on the pull request with the title **Code review queued...**. The title changes to **Code review in progress...** when the review starts. Claude may also react to your comment with 👀, but that reaction can appear when no review starts, so look for the check run instead.
112When a command that starts a review is accepted, a **Claude Code Review** check run appears on the pull request with the title **Code review queued...**. The title changes to **Code review in progress...** when the review starts. Claude may also react to your comment with 👀, but that reaction can appear when no review starts, so look for the check run instead.
112113 
113114If a review is already running on the pull request's latest commit, a new request doesn't start a second one.
114115 
115<Note>
116 Before a July 2026 update, `@claude review` subscribed the PR to push-triggered reviews. If you relied on that behavior, comment `@claude review always` instead.
117</Note>
116> [!NOTE]
117>
118> Before a July 2026 update, `@claude review` subscribed the PR to push-triggered reviews. If you relied on that behavior, comment `@claude review always` instead.
118119 
119120### What a later review covers
120121 

code-review-setup Changed · +29 / -31 lines

from line 18
1818 
1919## Turn on Code Review
2020 
21<Steps>
22 <Step title="Click the Allow code review switch">
23 Go to the **Code review** section of [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) and click the **Allow code review** switch.
21**1. Click the Allow code review switch**
2422 
25 If Code Review turns on right away with no dialog, your organization already has the Claude GitHub App linked or repositories added. Go to [Add more repositories](#add-more-repositories), then come back for the last step.
26 </Step>
23Go to the **Code review** section of [**Admin settings > Claude Code**](https://claude.ai/admin-settings/claude-code#code-review) and click the **Allow code review** switch.
2724 
28 <Step title="Connect your GitHub account">
29 If a **Connect GitHub** dialog opens, click **Connect**. If your organization uses GitHub Enterprise Server, select your instance in the dialog first. GitHub asks you to authorize Claude, then returns you to the admin page with the **Add a repository** dialog open.
25If Code Review turns on right away with no dialog, your organization already has the Claude GitHub App linked or repositories added. Go to [Add more repositories](#add-more-repositories), then come back for the last step.
3026 
31 If **Add a repository** opened straight away, your account is already connected, so go on to the next step.
32 </Step>
27**2. Connect your GitHub account**
3328 
34 <Step title="Install the Claude GitHub App">
35 If the repositories you want are listed in the **Add a repository** dialog, or you find them by searching there, go on to the next step. The dialog lists a repository only if the Claude GitHub App can access it, so if they aren't there, install the app:
29If a **Connect GitHub** dialog opens, click **Connect**. If your organization uses GitHub Enterprise Server, select your instance in the dialog first. GitHub asks you to authorize Claude, then returns you to the admin page with the **Add a repository** dialog open.
3630 
37 * 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.
38 * Pick the GitHub organization that owns the repositories.
39 * 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). See [what a review can access](/docs/en/code-review#what-a-review-can-access) and the [full permission list](/docs/en/github-actions#github-app-permissions).
41 * 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.
42 * Go back to the admin page's tab, where the list in the dialog refreshes.
43 </Step>
31If **Add a repository** opened straight away, your account is already connected, so go on to the next step.
4432 
45 <Step title="Choose repositories">
46 Select the repositories you want reviewed, then click **Continue**. Adding a repository needs write access to it from the GitHub account you connected. You can [add more repositories](#add-more-repositories) later.
47 </Step>
33**3. Install the Claude GitHub App**
4834 
49 <Step title="Click Finish">
50 A **Code review is set up** dialog follows. Click **Finish** to turn Code Review on. If you close the dialog any other way, your repositories stay added but **Allow code review** stays off, and you turn it on from the switch.
35If the repositories you want are listed in the **Add a repository** dialog, or you find them by searching there, go on to the next step. The dialog lists a repository only if the Claude GitHub App can access it, so if they aren't there, install the app:
5136 
52 Each repository starts set to review after every push, which runs the most reviews. To run fewer, [set when reviews run](#set-when-reviews-run).
53 </Step>
37* 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.
38* Pick the GitHub organization that owns the repositories.
39* 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). See [what a review can access](/docs/en/code-review#what-a-review-can-access) and the [full permission list](/docs/en/github-actions#github-app-permissions).
41* 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.
42* Go back to the admin page's tab, where the list in the dialog refreshes.
5443 
55 <Step title="Verify with a test pull request">
56 Open 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.
44**4. Choose repositories**
5745 
58 If no check run appears, see [No check run appears on the test pull request](/docs/en/code-review-troubleshooting#no-check-run-appears-on-the-test-pull-request).
46Select the repositories you want reviewed, then click **Continue**. Adding a repository needs write access to it from the GitHub account you connected. You can [add more repositories](#add-more-repositories) later.
5947 
60 Once the review arrives, send your developers [Read and request reviews on a pull request](/docs/en/code-review-pull-requests), which covers the severity levels, the comment commands, and how to respond to findings.
61 </Step>
62</Steps>
48**5. Click Finish**
49 
50A **Code review is set up** dialog follows. Click **Finish** to turn Code Review on. If you close the dialog any other way, your repositories stay added but **Allow code review** stays off, and you turn it on from the switch.
51 
52Each repository starts set to review after every push, which runs the most reviews. To run fewer, [set when reviews run](#set-when-reviews-run).
53 
54**6. Verify with a test pull request**
55 
56Open 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.
57 
58If no check run appears, see [No check run appears on the test pull request](/docs/en/code-review-troubleshooting#no-check-run-appears-on-the-test-pull-request).
59 
60Once the review arrives, send your developers [Read and request reviews on a pull request](/docs/en/code-review-pull-requests), which covers the severity levels, the comment commands, and how to respond to findings.
6361 
6462## Set defaults for your organization
6563 

common-workflows Changed · +306 / -326 lines

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 25
2525 
2626Suppose you've just joined a new project and need to understand its structure quickly.
2727 
28<Steps>
29 <Step title="Navigate to the project root directory">
30 ```bash theme={null}
31 cd /path/to/project
32 ```
33 
34 Replace `/path/to/project` with the path to your project.
35 </Step>
36 
37 <Step title="Start Claude Code">
38 ```bash theme={null}
39 claude
40 ```
41 </Step>
42 
43 <Step title="Ask for a high-level overview">
44 ```text wrap theme={null}
45 give me an overview of this codebase
46 ```
47 </Step>
48 
49 <Step title="Dive deeper into specific components">
50 ```text wrap theme={null}
51 explain the main architecture patterns used here
52 ```
53 
54 ```text wrap theme={null}
55 what are the key data models?
56 ```
57 
58 ```text wrap theme={null}
59 how is authentication handled?
60 ```
61 </Step>
62</Steps>
63 
64<Tip>
65 Tips:
66 
67 * Start with broad questions, then narrow down to specific areas
68 * Ask about coding conventions and patterns used in the project
69 * Request a glossary of project-specific terms
70</Tip>
28**1. Navigate to the project root directory**
29 
30```bash theme={null}
31cd /path/to/project
32```
33 
34Replace `/path/to/project` with the path to your project.
35 
36**2. Start Claude Code**
37 
38```bash theme={null}
39claude
40```
41 
42**3. Ask for a high-level overview**
43 
44```text wrap theme={null}
45give me an overview of this codebase
46```
47 
48**4. Dive deeper into specific components**
49 
50```text wrap theme={null}
51explain the main architecture patterns used here
52```
53 
54```text wrap theme={null}
55what are the key data models?
56```
57 
58```text wrap theme={null}
59how is authentication handled?
60```
61 
62> [!TIP]
63>
64> Tips:
65>
66> * Start with broad questions, then narrow down to specific areas
67> * Ask about coding conventions and patterns used in the project
68> * Request a glossary of project-specific terms
7169 
7270#### Find relevant code
7371 
7472Suppose you need to locate code related to a specific feature or functionality.
7573 
76<Steps>
77 <Step title="Ask Claude to find relevant files">
78 ```text wrap theme={null}
79 find the files that handle user authentication
80 ```
81 </Step>
82 
83 <Step title="Get context on how components interact">
84 ```text wrap theme={null}
85 how do these authentication files work together?
86 ```
87 </Step>
88 
89 <Step title="Understand the execution flow">
90 ```text wrap theme={null}
91 trace the login process from front-end to database
92 ```
93 </Step>
94</Steps>
95 
96<Tip>
97 Tips:
98 
99 * Be specific about what you're looking for
100 * Use domain language from the project
101 * Install a [code intelligence plugin](/docs/en/plugins/code-intelligence) for your language to give Claude precise "go to definition" and "find references" navigation
102</Tip>
74**1. Ask Claude to find relevant files**
75 
76```text wrap theme={null}
77find the files that handle user authentication
78```
79 
80**2. Get context on how components interact**
81 
82```text wrap theme={null}
83how do these authentication files work together?
84```
85 
86**3. Understand the execution flow**
87 
88```text wrap theme={null}
89trace the login process from front-end to database
90```
91 
92> [!TIP]
93>
94> Tips:
95>
96> * Be specific about what you're looking for
97> * Use domain language from the project
98> * Install a [code intelligence plugin](/docs/en/plugins/code-intelligence) for your language to give Claude precise "go to definition" and "find references" navigation
10399 
104100***
105101 
from line 103
107103 
108104Suppose you've encountered an error message and need to find and fix its source.
109105 
110<Steps>
111 <Step title="Share the error with Claude">
112 ```text wrap theme={null}
113 I'm seeing an error when I run npm test
114 ```
115 </Step>
116 
117 <Step title="Ask for fix recommendations">
118 ```text wrap theme={null}
119 suggest a few ways to fix the @ts-ignore in user.ts
120 ```
121 </Step>
122 
123 <Step title="Apply the fix">
124 ```text wrap theme={null}
125 update user.ts to add the null check you suggested
126 ```
127 </Step>
128</Steps>
129 
130<Tip>
131 Tips:
132 
133 * Tell Claude the command to reproduce the issue and get a stack trace
134 * Mention any steps to reproduce the error
135 * Let Claude know if the error is intermittent or consistent
136</Tip>
106**1. Share the error with Claude**
107 
108```text wrap theme={null}
109I'm seeing an error when I run npm test
110```
111 
112**2. Ask for fix recommendations**
113 
114```text wrap theme={null}
115suggest a few ways to fix the @ts-ignore in user.ts
116```
117 
118**3. Apply the fix**
119 
120```text wrap theme={null}
121update user.ts to add the null check you suggested
122```
123 
124> [!TIP]
125>
126> Tips:
127>
128> * Tell Claude the command to reproduce the issue and get a stack trace
129> * Mention any steps to reproduce the error
130> * Let Claude know if the error is intermittent or consistent
137131 
138132***
139133 
from line 137
143137 
144138For porting an entire codebase to a new language, see [how Anthropic runs large-scale code migrations with Claude Code](https://claude.com/blog/ai-code-migration) on the blog.
145139 
146<Steps>
147 <Step title="Identify legacy code for refactoring">
148 ```text wrap theme={null}
149 find deprecated API usage in our codebase
150 ```
151 </Step>
152 
153 <Step title="Get refactoring recommendations">
154 ```text wrap theme={null}
155 suggest how to refactor utils.js to use modern JavaScript features
156 ```
157 </Step>
158 
159 <Step title="Apply the changes safely">
160 ```text wrap theme={null}
161 refactor utils.js to use ES2024 features while maintaining the same behavior
162 ```
163 </Step>
164 
165 <Step title="Verify the refactoring">
166 ```text wrap theme={null}
167 run tests for the refactored code
168 ```
169 </Step>
170</Steps>
171 
172<Tip>
173 Tips:
174 
175 * Ask Claude to explain the benefits of the modern approach
176 * Request that changes maintain backward compatibility when needed
177 * Do refactoring in small, testable increments
178</Tip>
140**1. Identify legacy code for refactoring**
141 
142```text wrap theme={null}
143find deprecated API usage in our codebase
144```
145 
146**2. Get refactoring recommendations**
147 
148```text wrap theme={null}
149suggest how to refactor utils.js to use modern JavaScript features
150```
151 
152**3. Apply the changes safely**
153 
154```text wrap theme={null}
155refactor utils.js to use ES2024 features while maintaining the same behavior
156```
157 
158**4. Verify the refactoring**
159 
160```text wrap theme={null}
161run tests for the refactored code
162```
163 
164> [!TIP]
165>
166> Tips:
167>
168> * Ask Claude to explain the benefits of the modern approach
169> * Request that changes maintain backward compatibility when needed
170> * Do refactoring in small, testable increments
179171 
180172***
181173 
from line 175
183175 
184176Suppose you need to add tests for uncovered code.
185177 
186<Steps>
187 <Step title="Identify untested code">
188 ```text wrap theme={null}
189 find functions in NotificationsService.swift that are not covered by tests
190 ```
191 </Step>
192 
193 <Step title="Generate test scaffolding">
194 ```text wrap theme={null}
195 add tests for the notification service
196 ```
197 </Step>
198 
199 <Step title="Add meaningful test cases">
200 ```text wrap theme={null}
201 add test cases for edge conditions in the notification service
202 ```
203 </Step>
204 
205 <Step title="Run and verify tests">
206 ```text wrap theme={null}
207 run the new tests and fix any failures
208 ```
209 </Step>
210</Steps>
178**1. Identify untested code**
179 
180```text wrap theme={null}
181find functions in NotificationsService.swift that are not covered by tests
182```
183 
184**2. Generate test scaffolding**
185 
186```text wrap theme={null}
187add tests for the notification service
188```
189 
190**3. Add meaningful test cases**
191 
192```text wrap theme={null}
193add test cases for edge conditions in the notification service
194```
195 
196**4. Run and verify tests**
197 
198```text wrap theme={null}
199run the new tests and fix any failures
200```
211201 
212202Claude can generate tests that follow your project's existing patterns and conventions. When asking for tests, be specific about what behavior you want to verify. Claude examines your existing test files to match the style, frameworks, and assertion patterns already in use.
213203 
from line 209
219209 
220210You can create pull requests by asking Claude directly ("create a pr for my changes"), or guide Claude through it step-by-step:
221211 
222<Steps>
223 <Step title="Summarize your changes">
224 ```text wrap theme={null}
225 summarize the changes I've made to the authentication module
226 ```
227 </Step>
228 
229 <Step title="Generate a pull request">
230 ```text wrap theme={null}
231 create a pr
232 ```
233 </Step>
234 
235 <Step title="Review and refine">
236 ```text wrap theme={null}
237 enhance the PR description with more context about the security improvements
238 ```
239 </Step>
240</Steps>
212**1. Summarize your changes**
213 
214```text wrap theme={null}
215summarize the changes I've made to the authentication module
216```
217 
218**2. Generate a pull request**
219 
220```text wrap theme={null}
221create a pr
222```
223 
224**3. Review and refine**
225 
226```text wrap theme={null}
227enhance the PR description with more context about the security improvements
228```
241229 
242230To 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#pull-request-status).
243231 
244<Tip>
245 Review Claude's generated PR before submitting and ask Claude to highlight potential risks or considerations.
246</Tip>
232> [!TIP]
233>
234> Review Claude's generated PR before submitting and ask Claude to highlight potential risks or considerations.
247235 
248236### Handle documentation
249237 
250238Suppose you need to add or update documentation for your code.
251239 
252<Steps>
253 <Step title="Identify undocumented code">
254 ```text wrap theme={null}
255 find functions without proper JSDoc comments in the auth module
256 ```
257 </Step>
258 
259 <Step title="Generate documentation">
260 ```text wrap theme={null}
261 add JSDoc comments to the undocumented functions in auth.js
262 ```
263 </Step>
264 
265 <Step title="Review and enhance">
266 ```text wrap theme={null}
267 improve the generated documentation with more context and examples
268 ```
269 </Step>
270 
271 <Step title="Verify documentation">
272 ```text wrap theme={null}
273 check if the documentation follows our project standards
274 ```
275 </Step>
276</Steps>
277 
278<Tip>
279 Tips:
280 
281 * Specify the documentation style you want (JSDoc, docstrings, etc.)
282 * Ask for examples in the documentation
283 * Request documentation for public APIs, interfaces, and complex logic
284</Tip>
240**1. Identify undocumented code**
241 
242```text wrap theme={null}
243find functions without proper JSDoc comments in the auth module
244```
245 
246**2. Generate documentation**
247 
248```text wrap theme={null}
249add JSDoc comments to the undocumented functions in auth.js
250```
251 
252**3. Review and enhance**
253 
254```text wrap theme={null}
255improve the generated documentation with more context and examples
256```
257 
258**4. Verify documentation**
259 
260```text wrap theme={null}
261check if the documentation follows our project standards
262```
263 
264> [!TIP]
265>
266> Tips:
267>
268> * Specify the documentation style you want (JSDoc, docstrings, etc.)
269> * Ask for examples in the documentation
270> * Request documentation for public APIs, interfaces, and complex logic
285271 
286272***
287273 
from line 283
297283 
298284Suppose you need to work with images in your codebase, and you want Claude's help analyzing image content.
299285 
300<Steps>
301 <Step title="Add an image to the conversation">
302 You can use any of these methods:
303 
304 1. Drag and drop an image into the Claude Code window
305 2. 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)
306 3. Provide an image path to Claude, for example "Analyze this image: /path/to/your/image.png"
307 </Step>
308 
309 <Step title="Ask Claude to analyze the image">
310 ```text wrap theme={null}
311 What does this image show?
312 ```
313 
314 ```text wrap theme={null}
315 Describe the UI elements in this screenshot
316 ```
317 
318 ```text wrap theme={null}
319 Are there any problematic elements in this diagram?
320 ```
321 </Step>
322 
323 <Step title="Use images for context">
324 ```text wrap theme={null}
325 Here's a screenshot of the error. What's causing it?
326 ```
327 
328 ```text wrap theme={null}
329 This is our current database schema. How should we modify it for the new feature?
330 ```
331 </Step>
332 
333 <Step title="Get code suggestions from visual content">
334 ```text wrap theme={null}
335 Generate CSS to match this design mockup
336 ```
337 
338 ```text wrap theme={null}
339 What HTML structure would recreate this component?
340 ```
341 </Step>
342</Steps>
343 
344<Tip>
345 Tips:
346 
347 * Use images when text descriptions would be unclear or cumbersome
348 * Include screenshots of errors, UI designs, or diagrams for better context
349 * You can work with multiple images in a conversation
350 * Image analysis works with diagrams, screenshots, mockups, and more
351 * When Claude references images (for example, `[Image #1]`), `Cmd+Click` (Mac) or `Ctrl+Click` (Windows/Linux) the link to open the image in your default viewer
352</Tip>
286**1. Add an image to the conversation**
287 
288You can use any of these methods:
289 
2901. 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)
2923. Provide an image path to Claude, for example "Analyze this image: /path/to/your/image.png"
293 
294**2. Ask Claude to analyze the image**
295 
296```text wrap theme={null}
297What does this image show?
298```
299 
300```text wrap theme={null}
301Describe the UI elements in this screenshot
302```
303 
304```text wrap theme={null}
305Are there any problematic elements in this diagram?
306```
307 
308**3. Use images for context**
309 
310```text wrap theme={null}
311Here's a screenshot of the error. What's causing it?
312```
313 
314```text wrap theme={null}
315This is our current database schema. How should we modify it for the new feature?
316```
317 
318**4. Get code suggestions from visual content**
319 
320```text wrap theme={null}
321Generate CSS to match this design mockup
322```
323 
324```text wrap theme={null}
325What HTML structure would recreate this component?
326```
327 
328> [!TIP]
329>
330> Tips:
331>
332> * Use images when text descriptions would be unclear or cumbersome
333> * Include screenshots of errors, UI designs, or diagrams for better context
334> * You can work with multiple images in a conversation
335> * Image analysis works with diagrams, screenshots, mockups, and more
336> * When Claude references images (for example, `[Image #1]`), `Cmd+Click` (Mac) or `Ctrl+Click` (Windows/Linux) the link to open the image in your default viewer
353337 
354338***
355339 
from line 341
357341 
358342Use @ to quickly include files or directories without waiting for Claude to read them.
359343 
360<Steps>
361 <Step title="Reference a single file">
362 ```text wrap theme={null}
363 Explain the logic in @src/utils/auth.js
364 ```
365 
366 This includes the content of the file in the conversation when it fits the [Read tool](/docs/en/tools-reference#read-tool-behavior)'s token limit, 25,000 tokens by default. A text file larger than 256KB isn't included.
367 </Step>
368 
369 <Step title="Reference a directory">
370 ```text wrap theme={null}
371 What's the structure of @src/components?
372 ```
373 </Step>
374 
375 <Step title="Reference MCP resources">
376 ```text wrap theme={null}
377 Show me the data from @github:repos/owner/repo/issues
378 ```
379 
380 This fetches data from connected MCP servers using the format @server:resource. See [MCP resources](/docs/en/mcp#use-mcp-resources) for details.
381 </Step>
382</Steps>
383 
384<Tip>
385 Tips:
386 
387 * File paths can be relative or absolute
388 * Type `@` to open a path suggestion menu, then press Enter or Tab to accept the highlighted path and Enter again to send the message
389 * @ file references add `CLAUDE.md` in the file's directory and parent directories to context
390 * Directory references show file listings, not contents
391 * You can reference multiple files in a single message (for example, "@file1.js and @file2.js")
392</Tip>
344**1. Reference a single file**
345 
346```text wrap theme={null}
347Explain the logic in @src/utils/auth.js
348```
349 
350This includes the content of the file in the conversation when it fits the [Read tool](/docs/en/tools-reference#read-tool-behavior)'s token limit, 25,000 tokens by default. A text file larger than 256KB isn't included.
351 
352**2. Reference a directory**
353 
354```text wrap theme={null}
355What's the structure of @src/components?
356```
357 
358**3. Reference MCP resources**
359 
360```text wrap theme={null}
361Show me the data from @github:repos/owner/repo/issues
362```
363 
364This fetches data from connected MCP servers using the format @server:resource. See [MCP resources](/docs/en/mcp#use-mcp-resources) for details.
365 
366> [!TIP]
367>
368> Tips:
369>
370> * File paths can be relative or absolute
371> * Type `@` to open a path suggestion menu, then press Enter or Tab to accept the highlighted path and Enter again to send the message
372> * @ file references add `CLAUDE.md` in the file's directory and parent directories to context
373> * Directory references show file listings, not contents
374> * You can reference multiple files in a single message (for example, "@file1.js and @file2.js")
393375 
394376To stop `@` references from including file contents and directory listings in your message, set [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](/docs/en/env-vars#variables) in your shell or user settings. 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.
395377 
from line 390
408390| [GitHub Actions](/docs/en/github-actions) | Your CI pipeline | Tasks tied to repo events like opened PRs, or cron schedules that should live alongside your workflow config. |
409391| [`/loop`](/docs/en/scheduled-tasks) | The current CLI session | Quick polling while a session is open. `--resume` and `--continue` restore unexpired fixed-interval loops. |
410392 
411<Tip>
412 When writing prompts for scheduled tasks, be explicit about what success looks like and what to do with results. The task runs autonomously, so it can't ask clarifying questions. For example: "Review open PRs labeled `needs-review`, leave inline comments on any issues, and post a summary in the `#eng-reviews` Slack channel."
413</Tip>
393> [!TIP]
394>
395> When writing prompts for scheduled tasks, be explicit about what success looks like and what to do with results. The task runs autonomously, so it can't ask clarifying questions. For example: "Review open PRs labeled `needs-review`, leave inline comments on any issues, and post a summary in the `#eng-reviews` Slack channel."
414396 
415397***
416398 
from line 426
444426what are the limitations of Claude Code?
445427```
446428 
447<Note>
448 Claude provides documentation-based answers to these questions. For hands-on demonstrations, run `/powerup` for interactive lessons with animated demos, or refer to the specific workflow sections above.
449</Note>
450 
451<Tip>
452 Tips:
453 
454 * Ask specific questions to get detailed answers
455 * Claude can explain complex features like MCP integration, enterprise configurations, and advanced workflows
456</Tip>
429> [!NOTE]
430>
431> Claude provides documentation-based answers to these questions. For hands-on demonstrations, run `/powerup` for interactive lessons with animated demos, or refer to the specific workflow sections above.
432 
433> [!TIP]
434>
435> Tips:
436>
437> * Ask specific questions to get detailed answers
438> * Claude can explain complex features like MCP integration, enterprise configurations, and advanced workflows
457439 
458440***
459441 
from line 491
509491 
510492## Next steps
511493 
512<CardGroup cols={2}>
513 <Card title="Best practices" icon="lightbulb" href="/docs/en/best-practices">
514 Patterns for getting the most out of Claude Code
515 </Card>
516 
517 <Card title="Manage sessions" icon="rotate-left" href="/docs/en/sessions">
518 Resume, name, and branch conversations
519 </Card>
520 
521 <Card title="Worktrees" icon="code-branch" href="/docs/en/worktrees">
522 Run isolated parallel sessions
523 </Card>
524 
525 <Card title="Extend Claude Code" icon="puzzle-piece" href="/docs/en/features-overview">
526 Add skills, hooks, MCP, subagents, and plugins
527 </Card>
528</CardGroup>
494> **[Best practices](/docs/en/best-practices)**
495>
496> Patterns for getting the most out of Claude Code
497 
498> **[Manage sessions](/docs/en/sessions)**
499>
500> Resume, name, and branch conversations
501 
502> **[Worktrees](/docs/en/worktrees)**
503>
504> Run isolated parallel sessions
505 
506> **[Extend Claude Code](/docs/en/features-overview)**
507>
508> Add skills, hooks, MCP, subagents, and plugins
529509 

communications-kit Changed · +114 / -118 lines

from line 4
44 
55This page is for administrators and engineering leads rolling Claude Code out to a team. It provides copy-ready launch announcements, a tips-and-tricks drip campaign, and one-line FAQ responses for the questions you will be asked most.
66 
7<Note>
8 Treat everything here as draft copy, not finished copy. Rewrite each message in your organization's voice, swap the example tasks for real bugs and modules from your own codebase, and replace the `[bracketed placeholders]` before sending. The announcements that drive adoption are the ones that read like someone at your company wrote them.
9</Note>
7> [!NOTE]
8>
9> Treat everything here as draft copy, not finished copy. Rewrite each message in your organization's voice, swap the example tasks for real bugs and modules from your own codebase, and replace the `[bracketed placeholders]` before sending. The announcements that drive adoption are the ones that read like someone at your company wrote them.
1010 
1111## Launch communications
1212 
from line 29
2929 
3030Use this as your standard org-wide rollout message. It covers what Claude Code is, gives a two-minute install path, hands readers one concrete task to try, and answers "where does my code go?" before anyone has to ask.
3131 
32<Tabs>
33 <Tab title="Email">
34 ```text theme={null}
35 Subject: Claude Code is live for [Engineering / your team]
32**Email**
3633 
37 Team,
34```text theme={null}
35Subject: Claude Code is live for [Engineering / your team]
3836 
39 As of today you have access to Claude Code, an AI coding agent that runs in
40 your terminal, reads your actual codebase, and works through real tasks end
41 to end: debugging, refactors, tests, PRs. It is not autocomplete and it is
42 not a chat window. It edits files and runs your commands.
37Team,
4338 
44 Get running in two minutes:
39As of today you have access to Claude Code, an AI coding agent that runs in
40your terminal, reads your actual codebase, and works through real tasks end
41to end: debugging, refactors, tests, PRs. It is not autocomplete and it is
42not a chat window. It edits files and runs your commands.
4543 
46 curl -fsSL https://claude.ai/install.sh | bash
47 cd <your-repo>
48 claude
44Get running in two minutes:
4945 
50 Then run /init once. Claude reads your project and writes a CLAUDE.md with
51 your build commands and conventions, so you stop re-explaining the basics.
46 curl -fsSL https://claude.ai/install.sh | bash
47 cd <your-repo>
48 claude
5249 
53 Then try one of these on the repo you are already in:
50Then run /init once. Claude reads your project and writes a CLAUDE.md with
51your build commands and conventions, so you stop re-explaining the basics.
5452 
55 - "The test in [file] is flaky. Figure out why and fix it"
56 - "Walk me through how [module] handles [X]"
57 - "Look at my working diff and tell me what's risky before I push"
53Then try one of these on the repo you are already in:
5854 
59 Where your code goes: Claude Code runs in your terminal and talks directly
60 to Anthropic's API. On our Team or Enterprise plan, Anthropic does not use
61 your code or prompts to train its models.
62 Details: https://code.claude.com/docs/en/data-usage
63 https://code.claude.com/docs/en/security
55 - "The test in [file] is flaky. Figure out why and fix it"
56 - "Walk me through how [module] handles [X]"
57 - "Look at my working diff and tell me what's risky before I push"
6458 
65 Where to go with questions: #claude-code. [Owner name] is watching it
66 this week.
59Where your code goes: Claude Code runs in your terminal and talks directly
60to Anthropic's API. On our Team or Enterprise plan, Anthropic does not use
61your code or prompts to train its models.
62Details: https://code.claude.com/docs/en/data-usage
63 https://code.claude.com/docs/en/security
6764 
68 - [Name]
65Where to go with questions: #claude-code. [Owner name] is watching it
66this week.
6967 
70 P.S. Prefer your editor? There is a VS Code extension and a JetBrains
71 plugin. Same agent, no terminal required.
72 ```
73 </Tab>
68- [Name]
7469 
75 <Tab title="Slack or Teams">
76 ```markdown theme={null}
77 🚀 *Claude Code is live for [team]*
70P.S. Prefer your editor? There is a VS Code extension and a JetBrains
71plugin. Same agent, no terminal required.
72```
7873 
79 AI coding agent, runs in your terminal, reads your repo, does real work:
80 bugs, refactors, tests, PRs.
74**Slack or Teams**
8175 
82 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` → `claude`
76```markdown theme={null}
77🚀 *Claude Code is live for [team]*
8378 
84 *First thing to try* → run `/init`, then: "the test in [file] is flaky,
85 figure out why and fix it."
79AI coding agent, runs in your terminal, reads your repo, does real work:
80bugs, refactors, tests, PRs.
8681 
87 🔒 Runs in your terminal, talks directly to Anthropic's API. On our Team or
88 Enterprise plan, your code and prompts are not used to train models.
89 Data usage → https://code.claude.com/docs/en/data-usage
82`curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` → `claude`
9083 
91 📚 Quickstart · VS Code · Free 1-hr course
92 https://code.claude.com/docs/en/quickstart
93 https://code.claude.com/docs/en/vs-code
94 https://academy.claude.com/courses/claude-code-in-action
84*First thing to try* → run `/init`, then: "the test in [file] is flaky,
85figure out why and fix it."
9586 
96 Questions → this thread. [Owner] is on point.
97 ```
98 </Tab>
99</Tabs>
87🔒 Runs in your terminal, talks directly to Anthropic's API. On our Team or
88Enterprise plan, your code and prompts are not used to train models.
89Data usage → https://code.claude.com/docs/en/data-usage
10090 
91📚 Quickstart · VS Code · Free 1-hr course
92 https://code.claude.com/docs/en/quickstart
93 https://code.claude.com/docs/en/vs-code
94 https://academy.claude.com/courses/claude-code-in-action
95 
96Questions → this thread. [Owner] is on point.
97```
98 
10199### Executive sponsor variant
102100 
103101Send this from your sponsoring executive, such as the CTO, CIO, or SVP Engineering, under their name and from their account. Launches that go out under an exec's name consistently see higher open rates and faster first-week activation than the same message from an admin or tooling team. It signals a company priority rather than an optional experiment.
from line 102
104102 
105103This version is deliberately stripped to one ask: install it and run it on one real task. The exec's job is to make the ask land; the standard announcement and `#claude-code` handle the how.
106104 
107<Tabs>
108 <Tab title="Email">
109 ```text theme={null}
110 Subject: One thing I'd like every engineer to try this week
105**Email**
111106 
112 Team,
107```text theme={null}
108Subject: One thing I'd like every engineer to try this week
113109 
114 We have turned on Claude Code for all of engineering. It is an AI agent
115 that works directly in your terminal, on your actual codebase, and the
116 early results from teams already using it are strong enough that I want
117 everyone on it this week.
110Team,
118111 
119 I am asking for ten minutes:
112We have turned on Claude Code for all of engineering. It is an AI agent
113that works directly in your terminal, on your actual codebase, and the
114early results from teams already using it are strong enough that I want
115everyone on it this week.
120116 
121 curl -fsSL https://claude.ai/install.sh | bash
122 cd <your-repo>
123 claude
117I am asking for ten minutes:
124118 
125 Then hand it one real task: the bug you have been putting off, or "walk me
126 through how [module] works."
119 curl -fsSL https://claude.ai/install.sh | bash
120 cd <your-repo>
121 claude
127122 
128 That is the whole ask. [Owner name] and team are in #claude-code for
129 anything you hit along the way.
123Then hand it one real task: the bug you have been putting off, or "walk me
124through how [module] works."
130125 
131 - [Exec Name]
132 [Title]
133 ```
134 </Tab>
126That is the whole ask. [Owner name] and team are in #claude-code for
127anything you hit along the way.
135128 
136 <Tab title="Slack or Teams">
137 ```markdown theme={null}
138 📣 *From [Exec Name]: one thing to try this week*
129- [Exec Name]
130 [Title]
131```
139132 
140 We have turned on *Claude Code* for all of engineering. Early results are
141 strong enough that I am asking everyone to give it ten minutes on real
142 work this week.
133**Slack or Teams**
143134 
144 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` →
145 `claude` → hand it one real task.
135```markdown theme={null}
136📣 *From [Exec Name]: one thing to try this week*
146137 
147 That's it. Questions → #claude-code.
148 ```
149 </Tab>
150</Tabs>
138We have turned on *Claude Code* for all of engineering. Early results are
139strong enough that I am asking everyone to give it ten minutes on real
140work this week.
151141 
142`curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` →
143`claude` → hand it one real task.
144 
145That's it. Questions → #claude-code.
146```
147 
152148### Pilot group variant
153149 
154150Use for a phased rollout. Send to the pilot cohort only.
from line 516
520516| Make a skill | "make me a /ship skill that runs tests and lint before commit" |
521517| Debug a stack trace | "here's the stack trace, find the root cause, don't just paper over it" |
522518 
523<Tip>
524 Claude Code ships frequently. Verify version-specific details against the [documentation home page](/docs/en/overview) before distributing internally.
525</Tip>
519> [!TIP]
520>
521> Claude Code ships frequently. Verify version-specific details against the [documentation home page](/docs/en/overview) before distributing internally.
526522 

computer-use Changed · +28 / -30 lines

from line 2
22 
33> Enable computer use in the Claude Code CLI so Claude can open apps, click, type, and see your screen on macOS. Test native apps, debug visual issues, and automate GUI-only tools without leaving your terminal.
44 
5<Note>
6 Computer use is a research preview on macOS that requires a Pro or Max plan. It is not available on Team or Enterprise plans. It requires an interactive session, so it is not available in non-interactive mode with the `-p` flag.
7</Note>
5> [!NOTE]
6>
7> Computer use is a research preview on macOS that requires a Pro or Max plan. It is not available on Team or Enterprise plans. It requires an interactive session, so it is not available in non-interactive mode with the `-p` flag.
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 
from line 34
3434 
3535Computer use is available as a built-in MCP server called `computer-use`. It's off by default until you enable it.
3636 
37<Steps>
38 <Step title="Open the MCP menu">
39 In an interactive Claude Code session, run:
37**1. Open the MCP menu**
4038 
41 ```text theme={null}
42 /mcp
43 ```
39In an interactive Claude Code session, run:
4440 
45 Find `computer-use` in the server list. It shows as disabled.
46 </Step>
41```text theme={null}
42/mcp
43```
4744 
48 <Step title="Enable the server">
49 Select `computer-use` and choose **Enable**. The setting persists per project, so you only do this once for each project where you want computer use.
50 </Step>
45Find `computer-use` in the server list. It shows as disabled.
5146 
52 <Step title="Grant macOS permissions">
53 The first time Claude tries to use your computer, you'll see a prompt to grant two macOS permissions:
47**2. Enable the server**
5448 
55 * **Accessibility**: lets Claude click, type, and scroll
56 * **Screen Recording**: lets Claude see what's on your screen
49Select `computer-use` and choose **Enable**. The setting persists per project, so you only do this once for each project where you want computer use.
5750 
58 The prompt includes links to open the relevant System Settings pane. Grant both, then select **Try again** in the prompt. macOS may require you to restart Claude Code after granting Screen Recording.
59 </Step>
60</Steps>
51**3. Grant macOS permissions**
6152 
53The first time Claude tries to use your computer, you'll see a prompt to grant two macOS permissions:
54 
55* **Accessibility**: lets Claude click, type, and scroll
56* **Screen Recording**: lets Claude see what's on your screen
57 
58The prompt includes links to open the relevant System Settings pane. Grant both, then select **Try again** in the prompt. macOS may require you to restart Claude Code after granting Screen Recording.
59 
6260After setup, ask Claude to do something that needs the GUI:
6361 
6462```text theme={null}
from line 116
118116 
119117## Safety and the trust boundary
120118 
121<Warning>
122 Unlike the [sandboxed Bash tool](/docs/en/sandboxing), 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.
123</Warning>
119> [!WARNING]
120>
121> Unlike the [sandboxed Bash tool](/docs/en/sandboxing), 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.
124122 
125123The built-in guardrails reduce risk without requiring configuration:
126124 

corporate-launcher Changed · +46 / -48 lines

from line 8
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 
11<Note>
12 `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.
11> [!NOTE]
12>
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.
14>
15> After deploying either form, use the [Verify step](#set-up-the-launcher) to confirm the running version applies it.
1316 
14 After deploying either form, use the [Verify step](#set-up-the-launcher) to confirm the running version applies it.
15</Note>
16 
1717## What the launcher covers
1818 
1919With `CLAUDE_CODE_PROCESS_WRAPPER` set, Claude Code starts each of the following processes through your launcher:
from line 42
4242 
4343## Set up the launcher
4444 
45<Steps>
46 <Step title="Write the launcher script">
47 Create an executable script at an absolute path, such as `/opt/corp/launcher`. Claude Code runs it with the full Claude Code command as its arguments, and the script must end by calling `exec "$@"` so it replaces itself with Claude Code:
45**1. Write the launcher script**
4846 
49 ```bash theme={null}
50 #!/bin/sh
51 # Your organization's setup: enter the sandbox, apply
52 # network controls, or inject credentials.
53 exec "$@"
54 ```
47Create an executable script at an absolute path, such as `/opt/corp/launcher`. Claude Code runs it with the full Claude Code command as its arguments, and the script must end by calling `exec "$@"` so it replaces itself with Claude Code:
5548 
56 Make it executable with `chmod +x`. The setup portion is whatever your launcher must do before Claude Code runs; [the launcher contract](#the-launcher-contract) below lists the rules the script has to follow.
49```bash theme={null}
50#!/bin/sh
51# Your organization's setup: enter the sandbox, apply
52# network controls, or inject credentials.
53exec "$@"
54```
5755 
58 <Note>
59 If you previously replaced the `~/.local/bin/claude` symlink with your launcher, restore the original symlink in the same change. A replaced symlink makes the first wrapped session start the background service through both launchers at once, and it puts the installation into an externally managed state: `/doctor` reports it, auto-update leaves the file in place, and cleanup of old versions stays disabled until the installer manages that path again.
60 </Note>
61 </Step>
56Make it executable with `chmod +x`. The setup portion is whatever your launcher must do before Claude Code runs; [the launcher contract](#the-launcher-contract) below lists the rules the script has to follow.
6257 
63 <Step title="Set CLAUDE_CODE_PROCESS_WRAPPER in settings">
64 Set 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.
58> [!NOTE]
59>
60> If you previously replaced the `~/.local/bin/claude` symlink with your launcher, restore the original symlink in the same change. A replaced symlink makes the first wrapped session start the background service through both launchers at once, and it puts the installation into an externally managed state: `/doctor` reports it, auto-update leaves the file in place, and cleanup of old versions stays disabled until the installer manages that path again.
6561 
66 For 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):
62**2. Set CLAUDE\_CODE\_PROCESS\_WRAPPER in settings**
6763 
68 ```json theme={null}
69 {
70 "env": {
71 "CLAUDE_CODE_PROCESS_WRAPPER": "/opt/corp/launcher"
72 }
73 }
74 ```
64Set 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.
7565 
76 When 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.
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):
7767 
78 The [`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:
68```json theme={null}
69{
70 "env": {
71 "CLAUDE_CODE_PROCESS_WRAPPER": "/opt/corp/launcher"
72 }
73}
74```
7975 
80 ```json theme={null}
81 {
82 "processWrapper": "/opt/corp/launcher"
83 }
84 ```
76When 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.
8577 
86 `CLAUDE_CODE_PROCESS_WRAPPER` takes precedence when both are set.
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:
8779 
88 Because `processWrapper` is a named setting, an organization that delivers it through [remote managed settings](/docs/en/managed-settings#delivery-mechanisms) sees it listed on the [security approval dialog](/docs/en/server-managed-settings#security-approval-dialogs) alongside the other settings that run administrator-supplied executables.
80```json theme={null}
81{
82 "processWrapper": "/opt/corp/launcher"
83}
84```
8985 
90 Project 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), and never reads the `processWrapper` key from those files.
91 </Step>
86`CLAUDE_CODE_PROCESS_WRAPPER` takes precedence when both are set.
9287 
93 <Step title="Restart the background service and your sessions">
94 A running background service and any open `claude` sessions read the variable once at startup, so they keep launching unwrapped processes until restarted. Run `claude daemon stop --any` to stop the on-demand service. The next command that needs it, such as `claude agents`, starts a wrapped one. Then restart your open `claude` sessions.
88Because `processWrapper` is a named setting, an organization that delivers it through [remote managed settings](/docs/en/managed-settings#delivery-mechanisms) sees it listed on the [security approval dialog](/docs/en/server-managed-settings#security-approval-dialogs) alongside the other settings that run administrator-supplied executables.
9589 
96 On machines you can't restart yourself, the first session started after the settings push retires a leftover unwrapped on-demand service automatically. A machine where no new session starts keeps its unwrapped background service until one does.
97 </Step>
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), and never reads the `processWrapper` key from those files.
9891 
99 <Step title="Verify">
100 Run `/status` in a session: the Self-exec entry shows the resolved launch command and warns when the running background service doesn't match it. `claude daemon status` prints the same information from the shell, including after you unset the variable, when `/status` no longer shows the entry.
101 </Step>
102</Steps>
92**3. Restart the background service and your sessions**
93 
94A running background service and any open `claude` sessions read the variable once at startup, so they keep launching unwrapped processes until restarted. Run `claude daemon stop --any` to stop the on-demand service. The next command that needs it, such as `claude agents`, starts a wrapped one. Then restart your open `claude` sessions.
95 
96On machines you can't restart yourself, the first session started after the settings push retires a leftover unwrapped on-demand service automatically. A machine where no new session starts keeps its unwrapped background service until one does.
97 
98**4. Verify**
99 
100Run `/status` in a session: the Self-exec entry shows the resolved launch command and warns when the running background service doesn't match it. `claude daemon status` prints the same information from the shell, including after you unset the variable, when `/status` no longer shows the entry.
103101 
104102## The launcher contract
105103 

costs Changed · +60 / -62 lines

from line 12
1212 
1313### Using the `/usage` command
1414 
15<Note>
16 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.
17</Note>
15> [!NOTE]
16>
17> 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 
1919The 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).
2020 
from line 76
7676 
7777When the request for your plan limits fails, most often because the usage endpoint is rate limited, `/usage` shows the last usage bars it loaded on this machine within the past 60 minutes, along with a `Showing last-known usage` note stating how long ago that data was fetched. Press `r` to retry; a successful retry replaces the last-known bars with fresh data. Without a snapshot from the past 60 minutes, `/usage` reports that the usage endpoint is rate limited and offers the same retry shortcut. Before v2.1.208, a rate-limited request in a session that hadn't loaded usage yet always showed the error with no bars.
7878 
79A message such as `rate limited until 3:14am` in `/usage` means Claude Code can't fetch your plan limits again until then, not that your work with Claude is limited. If you press `r` earlier, expect the same message. Press `r` after that time for fresh data.
80 
7981### Read the token count beside the spinner
8082 
8183While 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.
from line 133
131133 
132134By 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.
133135 
134<Steps>
135 <Step title="Take the rates from your contract">
136 Enter the per-million-token rates from your contract. Claude Code doesn't fetch them from the Claude Console, so update the setting when the contract changes.
137 </Step>
136**1. Take the rates from your contract**
138137 
139 <Step title="Write the setting">
140 Set `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.
141 </Step>
138Enter the per-million-token rates from your contract. Claude Code doesn't fetch them from the Claude Console, so update the setting when the contract changes.
142139 
143 <Step title="Deploy it through managed settings">
144 Deliver it as [managed settings](/docs/en/managed-settings): server-managed settings, an MDM policy, `managed-settings.json`, or a [policy helper](/docs/en/managed-settings#compute-the-policy-with-a-helper-program). Claude Code ignores the key in user, project, and local settings and in `--settings`.
145 </Step>
146</Steps>
140**2. Write the setting**
147141 
142Set `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.
143 
144**3. Deploy it through managed settings**
145 
146Deliver it as [managed settings](/docs/en/managed-settings): server-managed settings, an MDM policy, `managed-settings.json`, or a [policy helper](/docs/en/managed-settings#compute-the-policy-with-a-helper-program). Claude Code ignores the key in user, project, and local settings and in `--settings`.
147 
148148To confirm the rates are in effect, run `/usage` in a session that has [received the managed settings](/docs/en/managed-settings#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.
149149 
150150### Claude for Teams and Enterprise
from line 162
162162 
163163API organizations manage Claude Code spend through [workspaces](https://platform.claude.com/docs/en/build-with-claude/workspaces). You can [set workspace spend limits](https://platform.claude.com/docs/en/build-with-claude/workspaces#workspace-limits) on total Claude Code spend and [view cost and usage reporting](https://platform.claude.com/docs/en/build-with-claude/workspaces#usage-and-cost-tracking) in the Console.
164164 
165<Note>
166 When you first authenticate Claude Code with your Claude Console account, a workspace called "Claude Code" is automatically created for you. This workspace provides centralized cost tracking and management for all Claude Code usage in your organization. You cannot create API keys for this workspace; it is exclusively for Claude Code authentication and usage.
165> [!NOTE]
166>
167> When you first authenticate Claude Code with your Claude Console account, a workspace called "Claude Code" is automatically created for you. This workspace provides centralized cost tracking and management for all Claude Code usage in your organization. You cannot create API keys for this workspace; it is exclusively for Claude Code authentication and usage.
168>
169> 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.
167170 
168 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.
169</Note>
170 
171171For 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#access-analytics-for-api-customers).
172172 
173173#### Rate limit recommendations
from line 187
187187 
188188The TPM per user decreases as team size grows because fewer users tend to use Claude Code concurrently in larger organizations. These rate limits apply at the organization level, not per individual user, which means individual users can temporarily consume more than their calculated share when others aren't actively using the service.
189189 
190<Note>
191 If you anticipate scenarios with unusually high concurrent usage (such as live training sessions with large groups), you may need higher TPM allocations per user.
192</Note>
190> [!NOTE]
191>
192> If you anticipate scenarios with unusually high concurrent usage (such as live training sessions with large groups), you may need higher TPM allocations per user.
193193 
194194### Cloud providers
195195 
from line 269
269269 
270270For example, this PreToolUse hook filters test output to show only failures:
271271 
272<Tabs>
273 <Tab title="settings.json">
274 Add this to your [settings.json](/docs/en/settings#where-settings-live) to run the hook before every Bash command:
272**settings.json**
275273 
276 ```json theme={null}
277 {
278 "hooks": {
279 "PreToolUse": [
274Add this to your [settings.json](/docs/en/settings#where-settings-live) to run the hook before every Bash command:
275 
276```json theme={null}
277{
278 "hooks": {
279 "PreToolUse": [
280 {
281 "matcher": "Bash",
282 "hooks": [
280283 {
281 "matcher": "Bash",
282 "hooks": [
283 {
284 "type": "command",
285 "command": "~/.claude/hooks/filter-test-output.sh"
286 }
287 ]
284 "type": "command",
285 "command": "~/.claude/hooks/filter-test-output.sh"
288286 }
289287 ]
290288 }
291 }
292 ```
293 </Tab>
289 ]
290 }
291}
292```
294293 
295 <Tab title="filter-test-output.sh">
296 The hook calls this script. Create the folder with `mkdir -p ~/.claude/hooks`, save the script below as `~/.claude/hooks/filter-test-output.sh`, and make it executable with `chmod +x ~/.claude/hooks/filter-test-output.sh`. It checks if the command is a test runner and modifies it to show only failures:
294**filter-test-output.sh**
297295 
298 ```bash theme={null}
299 #!/bin/bash
300 input=$(cat)
301 cmd=$(echo "$input" | jq -r '.tool_input.command')
296The hook calls this script. Create the folder with `mkdir -p ~/.claude/hooks`, save the script below as `~/.claude/hooks/filter-test-output.sh`, and make it executable with `chmod +x ~/.claude/hooks/filter-test-output.sh`. It checks if the command is a test runner and modifies it to show only failures:
302297 
303 # If running tests, filter to show only failures
304 if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then
305 filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
306 echo "$input" | jq --arg filtered "$filtered_cmd" \
307 '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: (.tool_input + {command: $filtered})}}'
308 else
309 echo "{}"
310 fi
311 ```
312 </Tab>
313</Tabs>
298```bash theme={null}
299#!/bin/bash
300input=$(cat)
301cmd=$(echo "$input" | jq -r '.tool_input.command')
302 
303# If running tests, filter to show only failures
304if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then
305 filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
306 echo "$input" | jq --arg filtered "$filtered_cmd" \
307 '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: (.tool_input + {command: $filtered})}}'
308else
309 echo "{}"
310fi
311```
314312 
315313To verify the setup, run `/hooks` and check that the hook appears under PreToolUse. You can also start Claude Code with `claude --debug-file ./claude-debug.txt` and ask Claude to run `npm test`. When the hook rewrites the command, that log file contains a `modified tool input keys` line listing `command` and the other Bash input fields.
316314 

cross-session-messaging Changed · +13 / -13 lines

#### Replies from other machines and cloud sessions ### What a message looks like ### The session's inbox socket

from line 2
22 
33> Let Claude list and message your other Claude Code sessions on this machine, and reach your sessions on other machines or in the cloud.
44 
5<Note>
6 Cross-session messaging requires Claude Code v2.1.224 or later on macOS and Linux, including Linux inside WSL 2. On native Windows, it requires Claude Code v2.1.234 or later. When a session meets the requirements, messaging is on with nothing to enable. See [Availability](#availability) for provider requirements and how to confirm a session has it.
7</Note>
5> [!NOTE]
6>
7> Cross-session messaging requires Claude Code v2.1.224 or later on macOS and Linux, including Linux inside WSL 2. On native Windows, it requires Claude Code v2.1.234 or later. When a session meets the requirements, messaging is on with nothing to enable. See [Availability](#availability) for provider requirements and how to confirm a session has it.
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 
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) like a prompt you type, and the receiving Claude can reply to the sender the same way, except in the [one-way cross-machine case](#message-sessions-on-other-machines).
72Once delivered, the message counts toward [usage](/docs/en/costs) 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 146
146146 
147147A 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.
148148 
149If 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), so the receiving Claude can't answer it.
150 
151149To require your approval before any message goes beyond this machine, set [`isolatePeerMachines`](#require-approval-for-cross-machine-messages).
152150 
151#### Replies from other machines and cloud sessions
152 
153A [cloud session](/docs/en/claude-code-on-the-web), 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).
154 
155If 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.
156 
153157## How a session treats an incoming message
154158 
155159When session A messages session B, Claude Code tells B's Claude that the message came from another session, not from you, and limits what the message can do:
from line 163
159163* **Commands don't run**: a command in the message's text, such as `/compact`, arrives as plain text. Claude Code never executes it.
160164* **Permission prompts still fire**: if acting on the message requires a permission the receiving session doesn't have, you see the same prompt you'd see for any other work.
161165 
162<h3 id="what-a-message-looks-like">
163 What a message looks like
164</h3>
166### What a message looks like
165167 
166168When a message arrives, Claude Code shows it in the conversation as a dim one-line preview, and the preview line stays in the conversation afterward. The preview carries the sender's name and the first line of the message, cut with `…` when it's long, such as `› Message from @api-worker: Schema migration finished (ctrl+o to expand)`.
167169 
from line 228
226228 
227229To let a `-p` worker take messages unattended, start it with `crossSessionInbound` set to `accept` in its `--settings` value. An `accept` in your user settings also works but applies to every session you run.
228230 
229<h3 id="the-sessions-inbox-socket">
230 The session's inbox socket
231</h3>
231### The session's inbox socket
232232 
233233Read this section when a session you expect isn't in the agent list, when you want a script or hook to post into a session, or when a sandboxed command can't reach the socket.
234234 
from line 251
251251 
252252Open the connection only when the message you're posting is ready. Claude Code closes a connection that hasn't sent a complete line within 30 seconds, so capture a slow command's output first and then open the connection to send it.
253253 
254<span id="own-child-messages" />Claude Code runs messages arriving on the socket through the same [inbound controls](#control-inbound-messages) as any other peer message, with one exception and one prerequisite:
254Claude Code runs messages arriving on the socket through the same [inbound controls](#control-inbound-messages) as any other peer message, with one exception and one prerequisite:
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.

data-usage Changed · +6 / -8 lines

from line 67
6767 
6868The diagram below shows how Claude Code connects to external services during installation and normal operation. Solid lines indicate required connections, while dashed lines represent optional or user-initiated data flows.
6969 
70<img src="https://mintcdn.com/claude-code/YR4DRZyI3CdsXkiT/images/claude-code-data-flow.svg?fit=max&auto=format&n=YR4DRZyI3CdsXkiT&q=85&s=2846ea92cfc2297b8620c31c82b482ad" className="dark:hidden" alt="Diagram showing Claude Code's external connections: install/update connects to the distribution server, and user requests connect to Anthropic's Console auth and public-api, with optional telemetry flows carrying metrics and error reports to Anthropic and third-party services. Feedback sent with /feedback goes to Google Cloud Storage and optionally creates a GitHub issue" width="720" height="520" data-path="images/claude-code-data-flow.svg" />
70![Diagram showing Claude Code's external connections: install/update connects to the distribution server, and user requests connect to Anthropic's Console auth and public-api, with optional telemetry flows carrying metrics and error reports to Anthropic and third-party services. Feedback sent with /feedback goes to Google Cloud Storage and optionally creates a GitHub issue](https://mintcdn.com/claude-code/YR4DRZyI3CdsXkiT/images/claude-code-data-flow.svg?fit=max\&auto=format\&n=YR4DRZyI3CdsXkiT\&q=85\&s=2846ea92cfc2297b8620c31c82b482ad)
7171 
72<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/claude-code-data-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=4fb6e8c88a9740845217bf2a2b040877" className="hidden dark:block" alt="Diagram showing Claude Code's external connections: install/update connects to the distribution server, and user requests connect to Anthropic's Console auth and public-api, with optional telemetry flows carrying metrics and error reports to Anthropic and third-party services. Feedback sent with /feedback goes to Google Cloud Storage and optionally creates a GitHub issue" width="720" height="520" data-path="images/claude-code-data-flow-dark.svg" />
73 
7472Claude Code runs locally. To interact with the LLM, Claude Code sends data over the network. This data includes all user prompts and model outputs, encrypted in transit via TLS 1.2+. Claude Code is compatible with most popular VPNs and LLM proxies.
7573 
7674Encryption at rest depends on your model provider:
from line 118
120118 
121119| Service | Claude API | Google Cloud's Agent Platform API | Amazon Bedrock API | Microsoft Foundry API | Claude Platform on AWS |
122120| - | - | - | - | - | - |
123| **Metrics** | Default on.<br />`DISABLE_TELEMETRY=1` to disable. | Default off.<br />`CLAUDE_CODE_USE_VERTEX` must be 1. | Default off.<br />`CLAUDE_CODE_USE_BEDROCK` must be 1. | Default off.<br />`CLAUDE_CODE_USE_FOUNDRY` must be 1. | Default off.<br />`CLAUDE_CODE_USE_ANTHROPIC_AWS` must be 1. |
124| **Error reports** | On for Pro and Max sign-ins on v2.1.198+, otherwise off.<br />`DISABLE_ERROR_REPORTING=1` to disable. | Default off.<br />`CLAUDE_CODE_USE_VERTEX` must be 1. | Default off.<br />`CLAUDE_CODE_USE_BEDROCK` must be 1. | Default off.<br />`CLAUDE_CODE_USE_FOUNDRY` must be 1. | Default off.<br />`CLAUDE_CODE_USE_ANTHROPIC_AWS` must be 1. |
125| **Claude API (`/feedback` reports)** | Default on.<br />`DISABLE_FEEDBACK_COMMAND=1` to disable. | Default off.<br />`CLAUDE_CODE_USE_VERTEX` must be 1. | Default off.<br />`CLAUDE_CODE_USE_BEDROCK` must be 1. | Default off.<br />`CLAUDE_CODE_USE_FOUNDRY` must be 1. | Default off.<br />`CLAUDE_CODE_USE_ANTHROPIC_AWS` must be 1. |
126| **Session quality surveys** | Default on.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. | Default on.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` to disable. |
127| **WebFetch domain safety check** | Default on.<br />`skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on.<br />`skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on.<br />`skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on.<br />`skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on.<br />`skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. |
121| **Metrics** | Default on. `DISABLE_TELEMETRY=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. |
122| **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. |
123| **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. |
124| **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) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. | Default on. `skipWebFetchPreflight: true` in [settings](/docs/en/settings) to disable. |
128126 
129127All environment variables can be checked into `settings.json` (see [settings reference](/docs/en/settings-reference)).
130128 

debug-your-config Changed · +39 / -45 lines

from line 29
2929 
3030Adherence 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#write-effective-instructions) covers the specificity, size, and structure patterns that keep adherence high.
3131 
32<Note>
33 CLAUDE.md and permissions solve different problems. CLAUDE.md tells Claude how your project works so it makes good decisions. [Permissions](/docs/en/permissions) and [hooks](/docs/en/hooks) 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</Note>
32> [!NOTE]
33>
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) and [hooks](/docs/en/hooks) 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 
from line 86
8686 
8787If the problem persists in safe mode, or your settings themselves are suspect, start a session with none of your own configuration and check whether the problem follows.
8888 
89<Steps>
90 <Step title="Create an empty directory and change into it">
91 In your shell, with no Claude Code session running, create the directory and move into it:
89**1. Create an empty directory and change into it**
9290 
93 <Tabs>
94 <Tab title="Bash or Zsh">
95 ```bash theme={null}
96 mkdir -p ~/claude-clean/empty && cd ~/claude-clean/empty
97 ```
98 </Tab>
91In your shell, with no Claude Code session running, create the directory and move into it:
9992 
100 <Tab title="PowerShell">
101 ```powershell theme={null}
102 New-Item -ItemType Directory -Force "$HOME/claude-clean/empty" | Out-Null
103 Set-Location "$HOME/claude-clean/empty"
104 ```
105 </Tab>
106 </Tabs>
107 </Step>
93**Bash or Zsh**
10894 
109 <Step title="Start Claude Code with a clean configuration directory">
110 From 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`:
95```bash theme={null}
96mkdir -p ~/claude-clean/empty && cd ~/claude-clean/empty
97```
11198 
112 <Tabs>
113 <Tab title="Bash or Zsh">
114 The variable applies to this one launch.
99**PowerShell**
115100 
116 ```bash theme={null}
117 CLAUDE_CONFIG_DIR=~/claude-clean/config claude --setting-sources user
118 ```
119 </Tab>
101```powershell theme={null}
102New-Item -ItemType Directory -Force "$HOME/claude-clean/empty" | Out-Null
103Set-Location "$HOME/claude-clean/empty"
104```
120105 
121 <Tab title="PowerShell">
122 The variable stays set for the rest of this PowerShell session, so later `claude` launches in the same window keep using the clean directory. To return to your usual directory, run `Remove-Item Env:CLAUDE_CONFIG_DIR` before the next launch.
106**2. Start Claude Code with a clean configuration directory**
123107 
124 ```powershell theme={null}
125 $env:CLAUDE_CONFIG_DIR = "$HOME/claude-clean/config"
126 claude --setting-sources user
127 ```
128 </Tab>
129 </Tabs>
108From 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`:
130109 
131 On 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#use-mcp-servers-from-claude-ai) still load if you log in with a claude.ai account.
132 </Step>
110**Bash or Zsh**
133111 
134 <Step title="Reproduce the problem">
135 Repeat what triggered the problem in the clean session:
112The variable applies to this one launch.
136113 
137 * **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`.
138 * **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), then see [Troubleshooting](/docs/en/troubleshooting).
139 </Step>
140</Steps>
114```bash theme={null}
115CLAUDE_CONFIG_DIR=~/claude-clean/config claude --setting-sources user
116```
117 
118**PowerShell**
119 
120The variable stays set for the rest of this PowerShell session, so later `claude` launches in the same window keep using the clean directory. To return to your usual directory, run `Remove-Item Env:CLAUDE_CONFIG_DIR` before the next launch.
121 
122```powershell theme={null}
123$env:CLAUDE_CONFIG_DIR = "$HOME/claude-clean/config"
124claude --setting-sources user
125```
126 
127On 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#use-mcp-servers-from-claude-ai) still load if you log in with a claude.ai account.
128 
129**3. Reproduce the problem**
130 
131Repeat what triggered the problem in the clean session:
132 
133* **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`.
134* **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), then see [Troubleshooting](/docs/en/troubleshooting).
141135 
142136## Check common causes
143137 

deep-links Changed · +25 / -27 lines

from line 106
106106 
107107You can also open a deep link from a shell script, alias, or automation rather than by clicking it. Call your operating system's URL-opening command with the link as the argument. These commands rely on the handler that Claude Code [registers when you send your first prompt of an interactive session](#registration-and-supported-platforms) on the machine.
108108 
109<Tabs>
110 <Tab title="macOS">
111 The built-in `open` command passes the URL to the registered `claude-cli://` handler:
109**macOS**
112110 
113 ```bash theme={null}
114 open "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
115 ```
111The built-in `open` command passes the URL to the registered `claude-cli://` handler:
116112 
117 On success, a new terminal window opens with Claude Code running and the prompt pre-filled.
118 </Tab>
113```bash theme={null}
114open "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
115```
119116 
120 <Tab title="Linux">
121 Most desktop environments provide `xdg-open`, which passes the URL to the registered handler:
117On success, a new terminal window opens with Claude Code running and the prompt pre-filled.
122118 
123 ```bash theme={null}
124 xdg-open "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
125 ```
119**Linux**
126120 
127 On success, a new terminal window opens with Claude Code running and the prompt pre-filled. If the shell reports that `xdg-open` isn't found, see [Troubleshooting](#xdg-open-is-not-found-on-linux).
128 </Tab>
121Most desktop environments provide `xdg-open`, which passes the URL to the registered handler:
129122 
130 <Tab title="Windows">
131 In PowerShell, `Start-Process` passes the URL to the registered handler:
123```bash theme={null}
124xdg-open "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
125```
132126 
133 ```powershell theme={null}
134 Start-Process "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
135 ```
127On success, a new terminal window opens with Claude Code running and the prompt pre-filled. If the shell reports that `xdg-open` isn't found, see [Troubleshooting](#xdg-open-is-not-found-on-linux).
136128 
137 In `cmd.exe`, `start` treats its first quoted argument as a window title, so pass an empty title before the URL:
129**Windows**
138130 
139 ```cmd theme={null}
140 start "" "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
141 ```
131In PowerShell, `Start-Process` passes the URL to the registered handler:
142132 
143 On success, a new terminal window opens with Claude Code running and the prompt pre-filled.
144 </Tab>
145</Tabs>
133```powershell theme={null}
134Start-Process "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
135```
136 
137In `cmd.exe`, `start` treats its first quoted argument as a window title, so pass an empty title before the URL:
138 
139```cmd theme={null}
140start "" "claude-cli://open?repo=acme/payments&q=review%20open%20PRs"
141```
142 
143On success, a new terminal window opens with Claude Code running and the prompt pre-filled.
146144 
147145## Registration and supported platforms
148146 

desktop Changed · +351 / -407 lines

#### Auto mode availability

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 4
44 
55The Claude Desktop app has three tabs: **Chat** for conversations, **Cowork** for [Dispatch and longer agentic work](https://claude.com/product/cowork), and **Code** for software development. This page is the reference for the Code tab.
66 
7<CardGroup cols={3}>
8 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">
9 Universal build for Intel and Apple Silicon
10 </Card>
11 
12 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">
13 For x64 processors
14 </Card>
15 
16 <Card title="Get Claude for Linux (beta)" icon="linux" href="/docs/en/desktop-linux">
17 apt or .deb for Ubuntu and Debian
18 </Card>
19</CardGroup>
7> **[Download for macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs)**
8>
9> Universal build for Intel and Apple Silicon
10 
11> **[Download for Windows](https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs)**
12>
13> For x64 processors
14 
15> **[Get Claude for Linux (beta)](/docs/en/desktop-linux)**
16>
17> apt or .deb for Ubuntu and Debian
2018 
2119For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). On Linux, install with apt; see [Claude Desktop on Linux](/docs/en/desktop-linux).
2220 
from line 94
9694 
9795The `dontAsk` permission mode is available only in the [CLI](/docs/en/permission-modes#allow-only-pre-approved-tools-with-dontask-mode).
9896 
99<Tip title="Best practice">
100 Start complex tasks in Plan so Claude maps out an approach before making changes. Once you approve the plan, switch to Accept edits or Manual to execute it. See [explore first, then plan, then code](/docs/en/best-practices#explore-first-then-plan-then-code) for more on this workflow.
101</Tip>
97> [!TIP]
98>
99> Start complex tasks in Plan so Claude maps out an approach before making changes. Once you approve the plan, switch to Accept edits or Manual to execute it. See [explore first, then plan, then code](/docs/en/best-practices#explore-first-then-plan-then-code) for more on this workflow.
102100 
103101Cloud sessions support Accept edits, Plan, and Auto. Accept edits corresponds to `default` mode: cloud sessions pre-approve file edits, so the selector shows Accept edits instead of Manual. Bypass permissions isn't available in cloud sessions, including sessions in a [self-hosted environment](/docs/en/self-hosted-environments).
104102 
105103Enterprise admins can restrict which permission modes are available. See [enterprise configuration](#enterprise-configuration) for details.
106104 
107<h4 id="auto-mode-availability">
108 Auto mode availability
109</h4>
105#### Auto mode availability
110106 
111107Auto mode is available to all users on the Anthropic API and requires Claude Opus 4.6 or later, Sonnet 4.6 or later, Haiku 5.5, or a [Fable model](/docs/en/model-config#work-with-fable). Organization administrators can turn auto mode off with the `disableAutoMode` key in [managed settings](#managed-settings).
112108 
from line 114
118114 
119115In a local session, click an HTML, PDF, or video path in the chat to open it in the Browser pane.
120116 
121<Note>
122 In an [SSH session](#ssh-sessions), Claude can't open your app in the Browser pane, because it doesn't have the pane's tools there. To look at the app yourself, [forward its port to your computer](#reach-a-port-on-the-remote-machine).
123</Note>
117> [!NOTE]
118>
119> In an [SSH session](#ssh-sessions), Claude can't open your app in the Browser pane, because it doesn't have the pane's tools there. To look at the app yourself, [forward its port to your computer](#reach-a-port-on-the-remote-machine).
124120 
125121If the Browser pane isn't open after Claude starts a server in a local session, click **Open** on the server's card in the chat.
126122 
from line 192
196192 
197193To archive the session automatically once the PR merges or closes, turn on [auto-archive](#archive-a-session) in **Settings > Claude Code**.
198194 
199<Note>
200 PR monitoring requires the [GitHub CLI (`gh`)](https://cli.github.com/) to be installed and authenticated on your machine. If `gh` is not installed, Desktop prompts you to install it the first time you try to create a PR.
201 
202 In an [SSH session](#ssh-sessions), set up `git` and `gh` on the remote machine before you click **Create PR**, because Claude pushes the branch and runs `gh pr create` there. Install `gh` there yourself, because Desktop doesn't prompt you to in an SSH session. Then check there that `git push` works and that `gh auth status` reports that you are logged in.
203</Note>
195> [!NOTE]
196>
197> PR monitoring requires the [GitHub CLI (`gh`)](https://cli.github.com/) to be installed and authenticated on your machine. If `gh` is not installed, Desktop prompts you to install it the first time you try to create a PR.
198>
199> In an [SSH session](#ssh-sessions), set up `git` and `gh` on the remote machine before you click **Create PR**, because Claude pushes the branch and runs `gh pr create` there. Install `gh` there yourself, because Desktop doesn't prompt you to in an SSH session. Then check there that `git push` works and that `gh auth status` reports that you are logged in.
204200 
205201## Arrange your workspace
206202 
from line 204
208204 
209205To work across screens, pop a pane such as the diff or terminal out into its own window, and dock it back when you're done. Claude keeps working in the main window.
210206 
211<Note>
212 The pane layout, terminal, file editor, and view modes in this section require Claude Desktop v1.2581.0 or later. Open **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows to update.
213</Note>
207> [!NOTE]
208>
209> The pane layout, terminal, file editor, and view modes in this section require Claude Desktop v1.2581.0 or later. Open **Claude > Check for Updates…** on macOS or **Help > Check for Updates…** on Windows to update.
214210 
215211### See session details
216212 
from line 300
304300 
305301Computer use lets Claude open your apps, control your screen, and work directly on your machine the way you would. Ask Claude to interact with a desktop tool that has no CLI, or automate something that only works through a GUI. For running and testing iOS apps, Desktop opens the dedicated [iOS Simulator pane](/docs/en/desktop-ios-simulator) instead of controlling your screen; the pane works without enabling computer use.
306302 
307<Note>
308 Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running.
309</Note>
303> [!NOTE]
304>
305> Computer use is a research preview on macOS and Windows that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running.
310306 
311307Computer use is off by default. [Enable it in Settings](#enable-computer-use) before Claude can control your screen. On macOS, you also need to grant Accessibility and Screen Recording permissions.
312308 
313309On macOS, computer use can also run in the background: Claude works in the apps you've approved while you keep working.
314310 
315<Warning>
316 Unlike the [sandboxed Bash tool](/docs/en/sandboxing), computer use runs on your actual desktop with access to whatever 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.
317</Warning>
311> [!WARNING]
312>
313> Unlike the [sandboxed Bash tool](/docs/en/sandboxing), computer use runs on your actual desktop with access to whatever 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.
318314 
319315### When computer use applies
320316 
from line 328
332328 
333329Computer use is off by default. If you ask Claude to do something that needs it while it's off, Claude tells you it could do the task if you enable computer use in Settings.
334330 
335<Steps>
336 <Step title="Update the desktop app">
337 Make sure you have the latest version of Claude Desktop. On macOS and Windows, download or update at [claude.com/download](https://claude.com/download); on Linux, update through your package manager ([instructions](/docs/en/desktop-linux)). Then restart the app.
338 </Step>
339 
340 <Step title="Turn on the toggle">
341 In the desktop app, go to **Settings > This computer > System**. Under **Computer use**, turn on **Enable computer use**. On Windows, the toggle takes effect immediately and setup is complete. On macOS, continue to the next step.
342 
343 If you don't see the toggle, confirm you're on macOS or Windows with a Pro or Max plan, then update and restart the app.
344 </Step>
345 
346 <Step title="Grant macOS permissions">
347 On macOS, grant two system permissions before the toggle takes effect:
348 
349 * **Accessibility**: lets Claude click, type, and scroll
350 * **Screen Recording**: lets Claude see what's on your screen
351 
352 The Settings page shows the current status of each permission. If either is denied, click the badge to open the relevant System Settings pane.
353 </Step>
354</Steps>
331**1. Update the desktop app**
332 
333Make sure you have the latest version of Claude Desktop. On macOS and Windows, download or update at [claude.com/download](https://claude.com/download); on Linux, update through your package manager ([instructions](/docs/en/desktop-linux)). Then restart the app.
334 
335**2. Turn on the toggle**
336 
337In the desktop app, go to **Settings > This computer > System**. Under **Computer use**, turn on **Enable computer use**. On Windows, the toggle takes effect immediately and setup is complete. On macOS, continue to the next step.
338 
339If you don't see the toggle, confirm you're on macOS or Windows with a Pro or Max plan, then update and restart the app.
340 
341**3. Grant macOS permissions**
342 
343On macOS, grant two system permissions before the toggle takes effect:
344 
345* **Accessibility**: lets Claude click, type, and scroll
346* **Screen Recording**: lets Claude see what's on your screen
347 
348The Settings page shows the current status of each permission. If either is denied, click the badge to open the relevant System Settings pane.
355349 
356350### App permissions
357351 
from line 392
398392 
399393To include gitignored files like `.env` in new worktrees, create a [`.worktreeinclude` file](/docs/en/worktrees#copy-gitignored-files-into-worktrees) in your project root. See [What worktrees share with the main checkout](/docs/en/worktrees#what-worktrees-share-with-the-main-checkout) for where a worktree session reads project settings, hooks, and skills.
400394 
401<Note>
402 Session isolation requires [Git](https://git-scm.com/downloads). Most Macs include Git by default. Run `git --version` in Terminal to check; if it prints a version number, Git is installed. If you run into Git errors, ask Claude in the [Cowork tab](https://claude.com/product/cowork) to help troubleshoot your setup.
403</Note>
395> [!NOTE]
396>
397> Session isolation requires [Git](https://git-scm.com/downloads). Most Macs include Git by default. Run `git --version` in Terminal to check; if it prints a version number, Git is installed. If you run into Git errors, ask Claude in the [Cowork tab](https://claude.com/product/cowork) to help troubleshoot your setup.
404398 
405399### Add folders to a session
406400 
from line 478
484478 
485479See [Use Claude Code in the cloud](/docs/en/claude-code-on-the-web) for more on how cloud sessions work. When one body of work needs many cloud sessions, select **Projects** in the sidebar to create a [project](/docs/en/claude-projects), where Claude starts and tracks the sessions for you from one conversation.
486480 
487<Note>
488 A task in an [SSH session](#ssh-sessions) can also [keep going while Desktop is disconnected](#keep-a-task-running-while-desktop-is-disconnected), but with a Claude account it can stop when its sign-in expires.
489</Note>
481> [!NOTE]
482>
483> A task in an [SSH session](#ssh-sessions) can also [keep going while Desktop is disconnected](#keep-a-task-running-while-desktop-is-disconnected), but with a Claude account it can stop when its sign-in expires.
490484 
491485### Continue in another surface
492486 
from line 534
540534 
541535Click **+** next to the prompt box, before or during the session, to add connectors in a local or [SSH](#ssh-sessions) session with a Claude account. Select **Add connectors** to open the connector directory. If the menu shows **Connectors** instead, select it, then **Browse connectors**.
542536 
543<Note>
544 These cases are covered on other pages:
545 
546 * **Connectors is grayed out in a WSL session**: see [If the terminal or connectors are unavailable](/docs/en/desktop-wsl#check-for-the-terminal-and-connectors)
547 * **Cloud sessions**: see [How connectors reach Claude Code](/docs/en/mcp#how-connectors-reach-claude-code)
548</Note>
537> [!NOTE]
538>
539> These cases are covered on other pages:
540>
541> * **Connectors is grayed out in a WSL session**: see [If the terminal or connectors are unavailable](/docs/en/desktop-wsl#check-for-the-terminal-and-connectors)
542> * **Cloud sessions**: see [How connectors reach Claude Code](/docs/en/mcp#how-connectors-reach-claude-code)
549543 
550544Once connected, Claude can read your calendar, send messages, create issues, and interact with your tools directly. You can ask Claude what connectors are configured in your session. To manage or disconnect connectors, go to **Settings > Connectors** in the desktop app.
551545 
from line 627
633627| `args` | string\[] | Arguments passed to `program`. Only used when `program` is set |
634628| `url` | string | The address the preview opens instead of `http://localhost:<port>`. See [open the preview at a specific URL](#open-the-preview-at-a-specific-url) |
635629 
636<a id="when-to-use-program-vs-runtimeexecutable" />
637 
638630##### When to use `program` vs `runtimeExecutable`
639631 
640632Use `runtimeExecutable` with `runtimeArgs` to start a dev server through a package manager. For example, `"runtimeExecutable": "npm"` with `"runtimeArgs": ["run", "dev"]` runs `npm run dev`.
641633 
642634Use `program` when you have a standalone script you want to run with `node` directly. For example, `"program": "server.js"` runs `node server.js`. Pass additional flags with `args`.
643 
644<a id="open-the-preview-at-a-specific-url" />
645635 
646636##### Open the preview at a specific URL
647637 
from line 694
704694 
705695These configurations show common setups for different project types:
706696 
707<Tabs>
708 <Tab title="Next.js">
709 This configuration runs a Next.js app using Yarn on port 3000:
710 
711 ```json theme={null}
697**Next.js**
698 
699This configuration runs a Next.js app using Yarn on port 3000:
700 
701```json theme={null}
702{
703 "version": "0.0.1",
704 "configurations": [
712705 {
713 "version": "0.0.1",
714 "configurations": [
715 {
716 "name": "web",
717 "runtimeExecutable": "yarn",
718 "runtimeArgs": ["dev"],
719 "port": 3000
720 }
721 ]
706 "name": "web",
707 "runtimeExecutable": "yarn",
708 "runtimeArgs": ["dev"],
709 "port": 3000
722710 }
723 ```
724 </Tab>
725 
726 <Tab title="Multiple servers">
727 For a monorepo with a frontend and an API server, define multiple configurations. The frontend uses `autoPort: true` so it picks a free port if 3000 is taken, while the API server requires port 8080 exactly:
728 
729 ```json theme={null}
711 ]
712}
713```
714 
715**Multiple servers**
716 
717For a monorepo with a frontend and an API server, define multiple configurations. The frontend uses `autoPort: true` so it picks a free port if 3000 is taken, while the API server requires port 8080 exactly:
718 
719```json theme={null}
720{
721 "version": "0.0.1",
722 "configurations": [
730723 {
731 "version": "0.0.1",
732 "configurations": [
733 {
734 "name": "frontend",
735 "runtimeExecutable": "npm",
736 "runtimeArgs": ["run", "dev"],
737 "cwd": "apps/web",
738 "port": 3000,
739 "autoPort": true
740 },
741 {
742 "name": "api",
743 "runtimeExecutable": "npm",
744 "runtimeArgs": ["run", "start"],
745 "cwd": "server",
746 "port": 8080,
747 "env": { "NODE_ENV": "development" },
748 "autoPort": false
749 }
750 ]
724 "name": "frontend",
725 "runtimeExecutable": "npm",
726 "runtimeArgs": ["run", "dev"],
727 "cwd": "apps/web",
728 "port": 3000,
729 "autoPort": true
730 },
731 {
732 "name": "api",
733 "runtimeExecutable": "npm",
734 "runtimeArgs": ["run", "start"],
735 "cwd": "server",
736 "port": 8080,
737 "env": { "NODE_ENV": "development" },
738 "autoPort": false
751739 }
752 ```
753 </Tab>
754 
755 <Tab title="Node.js script">
756 To run a Node.js script directly instead of using a package manager command, use the `program` field:
757 
758 ```json theme={null}
740 ]
741}
742```
743 
744**Node.js script**
745 
746To run a Node.js script directly instead of using a package manager command, use the `program` field:
747 
748```json theme={null}
749{
750 "version": "0.0.1",
751 "configurations": [
759752 {
760 "version": "0.0.1",
761 "configurations": [
762 {
763 "name": "server",
764 "program": "server.js",
765 "args": ["--verbose"],
766 "port": 4000
767 }
768 ]
753 "name": "server",
754 "program": "server.js",
755 "args": ["--verbose"],
756 "port": 4000
769757 }
770 ```
771 </Tab>
772</Tabs>
758 ]
759}
760```
773761 
774762## Environment configuration
775763 
from line 772
784772 
785773A saved environment is an entry in the [environment selector](#start-a-session) that records where Claude runs, so you can start later sessions there. A local or SSH environment also holds the folders Claude works in. Saved local and SSH environments [require Claude Desktop v2.37337.0 or later](#check-which-layout-you-have).
786774 
787<Steps>
788 <Step title="Open the New environment dialog">
789 Open the environment selector under the prompt box and select **New environment** at the bottom of its menu.
790 </Step>
791 
792 <Step title="Choose where Claude runs">
793 Select the **Local**, **SSH**, or [**Cloud**](#cloud-sessions) tab and fill in the form on that tab. On the **SSH** tab, choose a [connection](#ssh-sessions) and a folder on the remote machine.
794 </Step>
795 
796 <Step title="Save the environment">
797 Select **Create environment**, or **Add environment** on the **Cloud** tab.
798 </Step>
799</Steps>
775**1. Open the New environment dialog**
776 
777Open the environment selector under the prompt box and select **New environment** at the bottom of its menu.
778 
779**2. Choose where Claude runs**
780 
781Select the **Local**, **SSH**, or [**Cloud**](#cloud-sessions) tab and fill in the form on that tab. On the **SSH** tab, choose a [connection](#ssh-sessions) and a folder on the remote machine.
782 
783**3. Save the environment**
784 
785Select **Create environment**, or **Add environment** on the **Cloud** tab.
800786 
801787#### Environments that Desktop creates for you
802788 
from line 804
818804 
819805Add the variables to a saved local environment and start your sessions from it. Desktop [sets some variables itself](#environment-variables-desktop-sets-itself), such as `API_TIMEOUT_MS`, and your sessions get its value for those instead of yours.
820806 
821<Note>
822 If your environment selector is above the prompt box, you have the [earlier layout](#check-which-layout-you-have), which has no saved local environments. Use the [local environment editor](#use-the-local-environment-editor) instead.
823</Note>
824 
825<Steps>
826 <Step title="Open the environment's form">
827 Open [**New environment**](#create-a-saved-environment) or [**Edit environment**](#use-edit-or-remove-a-saved-environment).
828 </Step>
829 
830 <Step title="Enter the variables">
831 Select **Environment variables**, enter one `KEY=value` per line, and select **Done**.
832 </Step>
833 
834 <Step title="Save the environment">
835 Select **Create environment** or **Save**.
836 </Step>
837</Steps>
807> [!NOTE]
808>
809> If your environment selector is above the prompt box, you have the [earlier layout](#check-which-layout-you-have), which has no saved local environments. Use the [local environment editor](#use-the-local-environment-editor) instead.
810 
811**1. Open the environment's form**
812 
813Open [**New environment**](#create-a-saved-environment) or [**Edit environment**](#use-edit-or-remove-a-saved-environment).
814 
815**2. Enter the variables**
816 
817Select **Environment variables**, enter one `KEY=value` per line, and select **Done**.
818 
819**3. Save the environment**
820 
821Select **Create environment** or **Save**.
838822 
839823Only sessions you start from that environment get the variables.
840824 
from line 881
897881 
898882SSH sessions let you run Claude Code on a remote machine while using the desktop app as your interface. This is useful for working with codebases that live on cloud VMs, dev containers, or servers with specific hardware or dependencies.
899883 
900<Note>
901 If you use Desktop with a [third-party provider](/docs/en/third-party-integrations), SSH sessions need their own setup. See [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).
902</Note>
884> [!NOTE]
885>
886> If you use Desktop with a [third-party provider](/docs/en/third-party-integrations), SSH sessions need their own setup. See [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).
903887 
904888Add an SSH connection in the [**New environment** dialog](#create-a-saved-environment), then start a session on that connection. If a new session has no environment selector under the prompt box, you have the earlier layout. See [Check which layout you have](#check-which-layout-you-have).
905889 
906<Steps>
907 <Step title="Open the New environment dialog">
908 Before you start a session, open the environment selector under the prompt box and select **New environment** at the bottom of its menu.
909 </Step>
910 
911 <Step title="Add the connection">
912 On the **SSH** tab of the **New environment** dialog, open the **Host** list, select **Add SSH connection…**, and fill in the connection details:
913 
914 * **Name**: a friendly label for this connection.
915 * **SSH host**: `user@hostname` or a host defined in `~/.ssh/config`.
916 * **SSH port**: defaults to 22 if left empty, or uses the port from your SSH config.
917 * **SSH key (optional)**: path to your private key, such as `~/.ssh/id_ed25519`. Leave empty to use your SSH config or SSH agent.
918 * **Worktree folder**: a folder on the remote machine, such as `~/worktrees`, where new sessions create their worktrees. Leave empty to use the [remote machine's default](#choose-where-ssh-session-worktrees-go).
919 
920 Then select **Add SSH connection**.
921 </Step>
922 
923 <Step title="Start a session on the connection">
924 Select a folder on the remote machine and click **Create environment**. You keep the machine and folder together as a [saved environment](#create-a-saved-environment) for later sessions. Desktop selects it for the new session, so type your task and press **Enter**.
925 </Step>
926</Steps>
890**1. Open the New environment dialog**
891 
892Before you start a session, open the environment selector under the prompt box and select **New environment** at the bottom of its menu.
893 
894**2. Add the connection**
895 
896On the **SSH** tab of the **New environment** dialog, open the **Host** list, select **Add SSH connection…**, and fill in the connection details:
897 
898* **Name**: a friendly label for this connection.
899* **SSH host**: `user@hostname` or a host defined in `~/.ssh/config`.
900* **SSH port**: defaults to 22 if left empty, or uses the port from your SSH config.
901* **SSH key (optional)**: path to your private key, such as `~/.ssh/id_ed25519`. Leave empty to use your SSH config or SSH agent.
902* **Worktree folder**: a folder on the remote machine, such as `~/worktrees`, where new sessions create their worktrees. Leave empty to use the [remote machine's default](#choose-where-ssh-session-worktrees-go).
903 
904Then select **Add SSH connection**.
905 
906**3. Start a session on the connection**
907 
908Select a folder on the remote machine and click **Create environment**. You keep the machine and folder together as a [saved environment](#create-a-saved-environment) for later sessions. Desktop selects it for the new session, so type your task and press **Enter**.
927909 
928910The remote machine can run Linux, macOS, or [Windows](#windows-remote-machines). Desktop installs Claude Code on the remote machine automatically the first time you connect. Once connected, SSH sessions support permission modes, connectors, plugins, and MCP servers.
929911 
from line 926
944926 
945927An SSH session doesn't get them from those files, even when `claude` in a terminal on that machine does. The session can then hang, or show **The connection from … to the API failed** or **Authentication failed**, and signing in again doesn't help.
946928 
947<Steps>
948 <Step title="Add the variables">
949 For the CA file, use [`NODE_EXTRA_CA_CERTS`](/docs/en/network-config#custom-ca-certificates), because Claude Code doesn't trust a CA from `SSL_CERT_FILE` in `~/.claude/settings.json`. This example sets a proxy and a CA file:
950 
951 ```json ~/.claude/settings.json theme={null}
952 {
953 "env": {
954 "HTTPS_PROXY": "http://proxy.example.com:8080",
955 "NODE_EXTRA_CA_CERTS": "/etc/ssl/certs/example-ca.pem"
956 }
957 }
958 ```
959 </Step>
960 
961 <Step title="Send your message again">
962 Send your message again, because a variable that you add or change in that file takes effect within seconds. Start a new session if it still fails.
963 </Step>
964</Steps>
929**1. Add the variables**
930 
931For the CA file, use [`NODE_EXTRA_CA_CERTS`](/docs/en/network-config#custom-ca-certificates), because Claude Code doesn't trust a CA from `SSL_CERT_FILE` in `~/.claude/settings.json`. This example sets a proxy and a CA file:
932 
933```json ~/.claude/settings.json theme={null}
934{
935 "env": {
936 "HTTPS_PROXY": "http://proxy.example.com:8080",
937 "NODE_EXTRA_CA_CERTS": "/etc/ssl/certs/example-ca.pem"
938 }
939}
940```
941 
942**2. Send your message again**
943 
944Send your message again, because a variable that you add or change in that file takes effect within seconds. Start a new session if it still fails.
965945 
966946##### Find a proxy or CA variable set elsewhere on the remote machine
967947 
968948Check whether the Linux remote machine sets the proxy or CA variable elsewhere, because sessions use that value and [ignore the one in any settings file](/docs/en/settings-reference#how-env-values-interact-with-your-shell):
969949 
970<Steps>
971 <Step title="List the variables that the remote machine sets">
972 In a terminal on your computer, run `ssh devbox env`, with your own host.
973 </Step>
974 
975 <Step title="Change the variable where it is set">
976 If the list has the variable, change it in the file that sets it, such as `~/.zshenv`, `/etc/environment`, or `~/.bashrc` on the remote machine.
977 </Step>
978 
979 <Step title="Give sessions the new value">
980 Restart the remote machine, or quit Desktop and end the helper's processes, as in the first two steps to [remove the helper](#files-and-processes-on-the-remote-machine). Do this when no task is running, because either way interrupts Claude's work.
981 </Step>
982</Steps>
950**1. List the variables that the remote machine sets**
951 
952In a terminal on your computer, run `ssh devbox env`, with your own host.
953 
954**2. Change the variable where it is set**
955 
956If the list has the variable, change it in the file that sets it, such as `~/.zshenv`, `/etc/environment`, or `~/.bashrc` on the remote machine.
957 
958**3. Give sessions the new value**
959 
960Restart the remote machine, or quit Desktop and end the helper's processes, as in the first two steps to [remove the helper](#files-and-processes-on-the-remote-machine). Do this when no task is running, because either way interrupts Claude's work.
983961 
984962#### Use your SSH configuration on macOS and Linux
985963 
from line 990
1012990 
1013991To run a session inside a container that publishes no SSH port, reach it with a `ProxyCommand`, because Desktop doesn't run the `RemoteCommand` of the entry you connect to. If your entry uses `RemoteCommand` to step into the container, the session runs on the machine that the entry logs in to, not in the container.
1014992 
1015<Steps>
1016 <Step title="Add the entry">
1017 Add the following entry at the end of your `~/.ssh/config`, or directly above your first `Host *` entry if you have one. Replace the Docker container `devbox`, its user `dev`, and the machine `build.example.com` with your own. The entry's command starts an SSH server inside the container for each connection:
1018 
1019 ```text ~/.ssh/config theme={null}
1020 Host devbox-container
1021 User dev
1022 ProxyCommand ssh build.example.com docker exec -i devbox /usr/sbin/sshd -i
1023 ```
1024 </Step>
1025 
1026 <Step title="Prepare the container">
1027 * Install the OpenSSH server, with a host key that stays the same when you rebuild the image or recreate the container
1028 * Give the account named in `User` a way to log in, such as an `authorized_keys` file
1029 * Check that the container meets the [remote machine requirements](#remote-machine-requirements-for-ssh-sessions)
1030 </Step>
1031 
1032 <Step title="Check the allowlist">
1033 If your administrator [restricts SSH hosts](#restrict-which-ssh-hosts-users-can-connect-to), run `ssh -G devbox-container` in a terminal on your computer. Ask them to allow the `hostname` that it prints, here `devbox-container`, in `sshHostAllowlist`. When they allow that name, they allow whatever your entry's `ProxyCommand` connects to.
1034 </Step>
1035 
1036 <Step title="Test the entry, then connect">
1037 Run `ssh devbox-container` in a terminal on your computer. Fix what it reports, and run it again until it opens a shell in the container without asking you anything:
1038 
1039 * **If `ssh` asks for a password, passphrase, or code**: switch to a login that works without a prompt, such as a key that your SSH agent holds
1040 * **If `ssh` reports `Cannot execute command-line and remote command.` or `Bad packet length`**: take `RemoteCommand` and `RequestTTY` out of your entry for `build.example.com`. After that, `ssh build.example.com` in a terminal on your computer opens a shell on that machine, not in the container.
1041 * **If `ssh` reports `Connection closed by UNKNOWN port 65535`**: run `ssh build.example.com docker exec devbox /usr/sbin/sshd -t` in the same terminal.
1042 * If it prints `Missing privilege separation directory: /run/sshd`, create that folder in the container.
1043 * If it prints `no hostkeys available` and the container has host keys, add `-u root` after `exec` in this command and in the entry.
1044 
1045 Then enter `devbox-container` in the **SSH host** field.
1046 </Step>
1047</Steps>
993**1. Add the entry**
994 
995Add the following entry at the end of your `~/.ssh/config`, or directly above your first `Host *` entry if you have one. Replace the Docker container `devbox`, its user `dev`, and the machine `build.example.com` with your own. The entry's command starts an SSH server inside the container for each connection:
996 
997```text ~/.ssh/config theme={null}
998Host devbox-container
999 User dev
1000 ProxyCommand ssh build.example.com docker exec -i devbox /usr/sbin/sshd -i
1001```
1002 
1003**2. Prepare the container**
1004 
1005* Install the OpenSSH server, with a host key that stays the same when you rebuild the image or recreate the container
1006* Give the account named in `User` a way to log in, such as an `authorized_keys` file
1007* Check that the container meets the [remote machine requirements](#remote-machine-requirements-for-ssh-sessions)
1008 
1009**3. Check the allowlist**
1010 
1011If your administrator [restricts SSH hosts](#restrict-which-ssh-hosts-users-can-connect-to), run `ssh -G devbox-container` in a terminal on your computer. Ask them to allow the `hostname` that it prints, here `devbox-container`, in `sshHostAllowlist`. When they allow that name, they allow whatever your entry's `ProxyCommand` connects to.
1012 
1013**4. Test the entry, then connect**
1014 
1015Run `ssh devbox-container` in a terminal on your computer. Fix what it reports, and run it again until it opens a shell in the container without asking you anything:
1016 
1017* **If `ssh` asks for a password, passphrase, or code**: switch to a login that works without a prompt, such as a key that your SSH agent holds
1018* **If `ssh` reports `Cannot execute command-line and remote command.` or `Bad packet length`**: take `RemoteCommand` and `RequestTTY` out of your entry for `build.example.com`. After that, `ssh build.example.com` in a terminal on your computer opens a shell on that machine, not in the container.
1019* **If `ssh` reports `Connection closed by UNKNOWN port 65535`**: run `ssh build.example.com docker exec devbox /usr/sbin/sshd -t` in the same terminal.
1020 * If it prints `Missing privilege separation directory: /run/sshd`, create that folder in the container.
1021 * If it prints `no hostkeys available` and the container has host keys, add `-u root` after `exec` in this command and in the entry.
1022 
1023Then enter `devbox-container` in the **SSH host** field.
10481024 
10491025##### Use variables from your shell in a `ProxyCommand`
10501026 
from line 1028
10521028 
10531029This requires Claude Desktop v2.37337.0 or later and an `env` command that accepts `-0`, which you can check by running `env -0` in a terminal on your computer.
10541030 
1055<Note>
1056 If your shell sets temporary AWS credentials, [give the AWS CLI a profile](#use-aws-credentials-in-a-proxycommand) instead of exporting `AWS_*` variables.
1057</Note>
1058 
1059<a id="use-aws-credentials-in-a-proxycommand" />
1031> [!NOTE]
1032>
1033> If your shell sets temporary AWS credentials, [give the AWS CLI a profile](#use-aws-credentials-in-a-proxycommand) instead of exporting `AWS_*` variables.
10601034 
10611035##### Use AWS credentials in a `ProxyCommand`
10621036 
from line 1038
10641038 
10651039If the AWS CLI has no other source for a region or credentials, it fails with `You must specify a region` or `Unable to locate credentials`. To connect from Desktop, give the AWS CLI a profile that it reads from `~/.aws/config`:
10661040 
1067<Steps>
1068 <Step title="Add a profile with a region and a source of credentials">
1069 This example adds a profile named `corp` that gets its credentials from a helper program:
1070 
1071 ```ini ~/.aws/config theme={null}
1072 [profile corp]
1073 region = us-east-1
1074 credential_process = /full/path/to/your-credential-helper
1075 ```
1076 
1077 * **`region`**: give the AWS Region of the machines you connect to
1078 * **`credential_process`**: give the full path of a program that prints credentials in the [JSON form that AWS documents](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html). Choose a program that needs no input from you, because the AWS CLI runs it at every connection, including reconnects while you're away.
1079 * **IAM Identity Center**: add the profile's [IAM Identity Center settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) in place of `credential_process`. Run `aws sso login --profile corp` in a terminal before you connect, and again when that sign-in lapses.
1080 </Step>
1081 
1082 <Step title="Name the profile in the ProxyCommand">
1083 This example adds `--profile` to the [command that AWS documents for Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html):
1084 
1085 ```text ~/.ssh/config theme={null}
1086 Host i-*
1087 ProxyCommand sh -c "aws ssm start-session --profile corp --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
1088 ```
1089 </Step>
1090 
1091 <Step title="Connect again">
1092 Run `ssh` with the host in a terminal to confirm that the entry still connects there, then connect from Desktop.
1093 </Step>
1094</Steps>
1041**1. Add a profile with a region and a source of credentials**
1042 
1043This example adds a profile named `corp` that gets its credentials from a helper program:
1044 
1045```ini ~/.aws/config theme={null}
1046[profile corp]
1047region = us-east-1
1048credential_process = /full/path/to/your-credential-helper
1049```
1050 
1051* **`region`**: give the AWS Region of the machines you connect to
1052* **`credential_process`**: give the full path of a program that prints credentials in the [JSON form that AWS documents](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html). Choose a program that needs no input from you, because the AWS CLI runs it at every connection, including reconnects while you're away.
1053* **IAM Identity Center**: add the profile's [IAM Identity Center settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) in place of `credential_process`. Run `aws sso login --profile corp` in a terminal before you connect, and again when that sign-in lapses.
1054 
1055**2. Name the profile in the ProxyCommand**
1056 
1057This example adds `--profile` to the [command that AWS documents for Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html):
1058 
1059```text ~/.ssh/config theme={null}
1060Host i-*
1061 ProxyCommand sh -c "aws ssm start-session --profile corp --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
1062```
1063 
1064**3. Connect again**
1065 
1066Run `ssh` with the host in a terminal to confirm that the entry still connects there, then connect from Desktop.
10951067 
10961068##### Raise the SSH connection timeout
10971069 
from line 1146
11741146 
11751147Claude Code runs as a process on the remote machine, under a background helper that Desktop installs there, so it doesn't need your SSH connection to keep running. The behavior in this section requires Claude Desktop v2.31226.0 or later.
11761148 
1177<Warning>
1178 If you sign in to Desktop with a Claude account, don't count on a task to run overnight. Desktop renews that sign-in for the task only while Desktop is running and connected, so the task's sign-in can expire after you disconnect, and the task then stops. How much time is left when you disconnect varies, and it can be only a few minutes.
1179 
1180 The work done so far stays on the remote machine, and you can continue with a message when you return.
1181 
1182 If the task must run through the night:
1183 
1184 * [Keep your computer awake](/docs/en/desktop-scheduled-tasks#how-scheduled-tasks-run) and online, with the lid open and Desktop running
1185 * Use a login that works without a prompt, such as a key that your SSH agent holds, for the remote machine and for any jump host on the way. Desktop can then reconnect on its own after a drop.
1186 
1187 For a task that must run while your computer is asleep or off, start a [cloud session](#run-long-running-tasks-in-the-cloud) instead.
1188</Warning>
1149> [!WARNING]
1150>
1151> If you sign in to Desktop with a Claude account, don't count on a task to run overnight. Desktop renews that sign-in for the task only while Desktop is running and connected, so the task's sign-in can expire after you disconnect, and the task then stops. How much time is left when you disconnect varies, and it can be only a few minutes.
1152>
1153> The work done so far stays on the remote machine, and you can continue with a message when you return.
1154>
1155> If the task must run through the night:
1156>
1157> * [Keep your computer awake](/docs/en/desktop-scheduled-tasks#how-scheduled-tasks-run) and online, with the lid open and Desktop running
1158> * Use a login that works without a prompt, such as a key that your SSH agent holds, for the remote machine and for any jump host on the way. Desktop can then reconnect on its own after a drop.
1159>
1160> For a task that must run while your computer is asleep or off, start a [cloud session](#run-long-running-tasks-in-the-cloud) instead.
11891161 
11901162* **After sleep or a network loss**: you get the running task back if the process [still runs](#limits-while-desktop-is-disconnected) and Desktop can log in without a prompt. If it can't, [send a message](#reconnect-after-sleep-or-a-network-loss).
11911163* **After a quit**: the task keeps running, but you lose it when the session opens again unless Desktop can rejoin its process. Check [when Desktop can rejoin](#reopen-a-session-after-you-quit-desktop) before you quit. If you lost the task, send a message to continue.
from line 1168
11961168* **Authentication error**: the [sign-in token or credential](#limits-while-desktop-is-disconnected) may have expired. With a Claude account, send a message to continue. With a third-party provider, see [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).
11971169* **Waiting request**: [answer it](#handle-requests-that-arrive-while-you-are-away)
11981170* **None of these**: send a message to continue
1199 
1200<a id="prepare-a-long-task" />
12011171 
12021172##### Prepare a long task
12031173 
from line 1178
12081178* **Test the remote machine**: start a short task, quit Desktop while the task is still running, and open the session again well after the task should be done. If the task isn't finished and the session shows no authentication error, check the remote machine for [what can end a task](#limits-while-desktop-is-disconnected).
12091179* **Keep commands out of Desktop's terminal**: if the remote machine [logs out idle terminals](#limits-while-desktop-is-disconnected), run your own commands from an SSH login outside Desktop
12101180 
1211<a id="limits-while-desktop-is-disconnected" />
1212 
12131181##### Limits while Desktop is disconnected
12141182 
12151183A task that you leave running can end when its sign-in expires, when the remote machine ends it, or when the helper stops or is replaced:
from line 1196
12281196* **Workflows**: Desktop checks each new [workflow](/docs/en/workflows) before it starts, so while Desktop is disconnected a new one waits up to 10 minutes and then fails
12291197* **MCP servers**: MCP servers that Claude Code starts on the remote machine don't run through Desktop, so Claude can still call their tools. Servers from `claude_desktop_config.json` are among them only if Desktop doesn't use its [built-in SSH client](#worktree-edits-while-disconnected). Otherwise, and on [some Windows remote machines](#windows-remote-machines), Claude can't call their tools while Desktop is disconnected.
12301198 
1231<span id="worktree-edits-while-disconnected" />
1232 
1233<Accordion title="When edits in a worktree keep working">
1234 On a Linux or macOS remote machine, the check doesn't go through Desktop, so edits inside the worktree keep working while Desktop is disconnected. Before Claude Desktop v2.37337.0, this holds on a Linux remote machine only.
1235 
1236 Edits still fail in some cases, including these:
1237 
1238 * **Built-in SSH client**: Desktop uses it, for example in a Microsoft Store install, on a Windows computer without Microsoft's OpenSSH 9.4 or later, or by default on Windows with a third-party provider
1239 * **Repository location**: the repository is your home directory, a folder above it, or `~/.claude`
1240 * **macOS paths**: on a macOS remote machine, the repository is under `/Volumes`, or a folder name in the path of the repository or the worktree has a `~` or a non-ASCII character
1241 * **Folder restrictions**: your organization restricts which folders sessions may use
1242 * **Corporate launcher**: before Claude Desktop v2.37337.0, you sign in with a Claude account, and your organization starts Claude Code on the remote machine through a [corporate launcher](/docs/en/corporate-launcher)
1243 
1244 A session without a worktree has no such check, unless your organization restricts which folders sessions may use.
1245</Accordion>
1246 
1247<a id="handle-requests-that-arrive-while-you-are-away" />
1199> **When edits in a worktree keep working**
1200>
1201> On a Linux or macOS remote machine, the check doesn't go through Desktop, so edits inside the worktree keep working while Desktop is disconnected. Before Claude Desktop v2.37337.0, this holds on a Linux remote machine only.
1202>
1203> Edits still fail in some cases, including these:
1204>
1205> * **Built-in SSH client**: Desktop uses it, for example in a Microsoft Store install, on a Windows computer without Microsoft's OpenSSH 9.4 or later, or by default on Windows with a third-party provider
1206> * **Repository location**: the repository is your home directory, a folder above it, or `~/.claude`
1207> * **macOS paths**: on a macOS remote machine, the repository is under `/Volumes`, or a folder name in the path of the repository or the worktree has a `~` or a non-ASCII character
1208> * **Folder restrictions**: your organization restricts which folders sessions may use
1209> * **Corporate launcher**: before Claude Desktop v2.37337.0, you sign in with a Claude account, and your organization starts Claude Code on the remote machine through a [corporate launcher](/docs/en/corporate-launcher)
1210>
1211> A session without a worktree has no such check, unless your organization restricts which folders sessions may use.
12481212 
12491213##### Handle requests that arrive while you are away
12501214 
from line 1230
12661230 
12671231Claude Code doesn't auto-approve [a few actions](/docs/en/permission-modes#actions-no-mode-auto-approves) in any permission mode, including Bypass permissions. Depending on the permission mode, Claude Code denies such an action or asks you, and the task then waits for your answer.
12681232 
1269<a id="reconnect-after-sleep-or-a-network-loss" />
1270 
12711233##### Reconnect after sleep or a network loss
12721234 
12731235If Desktop hasn't reconnected when you come back, send a message in the session. Desktop reconnects on its own only where it can log in without a prompt, for example with a key that your SSH agent holds.
from line 1237
12751237* **Remembered password**: a password that you let Desktop remember also works without a prompt, but for a long absence prefer a key that your SSH agent holds. If sign-ins with that password break off or hang, Desktop can stop reconnecting and wait for you.
12761238* **Any other prompt**: if the remote machine prompts for anything else, such as a one-time code, you can get a notification on your computer. Click the notification, or send a message in the session, and Desktop shows the prompt.
12771239 
1278<Accordion title="If a jump host asks for a sign-in, the outage is long, output is missing, or the process is gone">
1279 - **Jump host, pushes stop while you're away**: this can happen with Desktop on macOS or Linux when nobody answers a jump host's sign-in, for example a push to a phone. Desktop then stops reconnecting while nobody is at your computer. When you unlock or use the computer, you can get another push, because Desktop can try again. After three unanswered attempts it waits until you retry or send a message.
1280 - **Jump host, pushes keep coming**: where Desktop can't tell that nobody answers, as with Desktop on Windows, it keeps trying while it has a process to rejoin, whether or not that process still runs. You can get another push with each attempt. To end the attempts, quit Desktop, which [can cost you the running task](#reopen-a-session-after-you-quit-desktop).
1281 - **Long outage**: Desktop slows to about one attempt every five minutes. To reconnect sooner, retry in the session or send a message, which Desktop delivers once it is connected.
1282 - **Missing output**: while Desktop is disconnected, the helper keeps each session's most recent Claude Code output in a 16 MiB buffer and drops older output. After Desktop reconnects, the session can show `Loading recent output from <host>…`. If Desktop can't load all of the output, you see the row `Some output produced while you were disconnected may be missing here.` The row doesn't mean that the task stopped.
1283 - **Process gone**: the process ended while Desktop was disconnected, as when the remote machine restarts. Desktop can then start a new one from the conversation's saved history and tell Claude to continue the task. If the task stays stopped, send a message. With a third-party provider, update to Claude Desktop v2.42304.0 or later, because earlier versions never continue the task on their own.
1284</Accordion>
1285 
1286<a id="reopen-a-session-after-you-quit-desktop" />
1240> **If a jump host asks for a sign-in, the outage is long, output is missing, or the process is gone**
1241>
1242> * **Jump host, pushes stop while you're away**: this can happen with Desktop on macOS or Linux when nobody answers a jump host's sign-in, for example a push to a phone. Desktop then stops reconnecting while nobody is at your computer. When you unlock or use the computer, you can get another push, because Desktop can try again. After three unanswered attempts it waits until you retry or send a message.
1243> * **Jump host, pushes keep coming**: where Desktop can't tell that nobody answers, as with Desktop on Windows, it keeps trying while it has a process to rejoin, whether or not that process still runs. You can get another push with each attempt. To end the attempts, quit Desktop, which [can cost you the running task](#reopen-a-session-after-you-quit-desktop).
1244> * **Long outage**: Desktop slows to about one attempt every five minutes. To reconnect sooner, retry in the session or send a message, which Desktop delivers once it is connected.
1245> * **Missing output**: while Desktop is disconnected, the helper keeps each session's most recent Claude Code output in a 16 MiB buffer and drops older output. After Desktop reconnects, the session can show `Loading recent output from <host>…`. If Desktop can't load all of the output, you see the row `Some output produced while you were disconnected may be missing here.` The row doesn't mean that the task stopped.
1246> * **Process gone**: the process ended while Desktop was disconnected, as when the remote machine restarts. Desktop can then start a new one from the conversation's saved history and tell Claude to continue the task. If the task stays stopped, send a message. With a third-party provider, update to Claude Desktop v2.42304.0 or later, because earlier versions never continue the task on their own.
12871247 
12881248##### Reopen a session after you quit Desktop
12891249 
from line 1257
12971257 
12981258For third-party deployments, see [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).
12991259 
1300<Warning>
1301 While a conversation's Claude Code process is still running, don't run [`claude --resume`](/docs/en/cli-reference#cli-flags) for it on the remote machine. Claude Code doesn't stop you, and both processes then write to the same conversation. If you aren't sure, add `--fork-session`, which continues in a copy of the conversation, but both processes still work on the same files.
1302</Warning>
1260> [!WARNING]
1261>
1262> While a conversation's Claude Code process is still running, don't run [`claude --resume`](/docs/en/cli-reference#cli-flags) for it on the remote machine. Claude Code doesn't stop you, and both processes then write to the same conversation. If you aren't sure, add `--fork-session`, which continues in a copy of the conversation, but both processes still work on the same files.
13031263 
13041264#### Choose where SSH session worktrees go
13051265 
from line 1271
13111271 
13121272Each project gets its own subfolder in the folder you set, so with `~/worktrees` a worktree's path is `~/worktrees/<project>-<id>/<worktree-name>`. If the folder you set is inside the project, Desktop ignores it for that project and uses the default. On a [Windows remote machine](#windows-remote-machines), Desktop always uses the default.
13131273 
1314<a id="set-the-worktree-folder-on-an-existing-connection" />
1315 
13161274##### Set the worktree folder on an existing connection
13171275 
13181276Set **Worktree folder** in the settings of a connection you added earlier or one your organization manages. The field requires Claude Desktop v1.44121.0 or later. If your organization restricts which folders sessions may use, Desktop hides the field and keeps worktrees inside the project.
13191277 
1320<Steps>
1321 <Step title="Find the connection">
1322 Open the [environment selector](#start-a-session) and find the connection under **SSH**.
1323 </Step>
1324 
1325 <Step title="Open the connection's settings">
1326 Hover over the connection and click the gear icon. If the dialog that opens shows **Edit connection…** next to **Host**, select **Edit connection…**.
1327 </Step>
1328 
1329 <Step title="Set the folder">
1330 In **Worktree folder**, enter a folder on the remote machine, such as `~/worktrees`, and select **Save changes**.
1331 </Step>
1332</Steps>
1278**1. Find the connection**
1279 
1280Open the [environment selector](#start-a-session) and find the connection under **SSH**.
1281 
1282**2. Open the connection's settings**
1283 
1284Hover over the connection and click the gear icon. If the dialog that opens shows **Edit connection…** next to **Host**, select **Edit connection…**.
1285 
1286**3. Set the folder**
1287 
1288In **Worktree folder**, enter a folder on the remote machine, such as `~/worktrees`, and select **Save changes**.
13331289 
13341290#### Files and processes on the remote machine
13351291 
from line 1310
13541310 
13551311To remove the helper and Claude Code for one user:
13561312 
1357<Steps>
1358 <Step title="Quit Desktop">
1359 Quit Desktop on each computer that the user connects from. It installs both programs again the next time it connects, and it can reconnect on its own.
1360 </Step>
1361 
1362 <Step title="End the processes">
1363 Logged in as that user on the remote machine, run `kill` with the ID of each Claude Code process that [`pgrep`](#files-and-processes-on-the-remote-machine) lists. Once those are gone from the list, run `kill` with the ID of each `server` process. If you end a `server` process first, a command that Claude Code is running can keep running.
1364 
1365 Then list the user's remaining processes, for example with `ps -u "$(id -un)" -f`, and end any that you recognize as started by Claude Code. Programs that it left in the background can keep running after it ends, without being in the `pgrep` list.
1366 </Step>
1367 
1368 <Step title="Delete the folder">
1369 Delete `~/.claude/remote/`. To remove Claude Code's own files in `~/.claude/` and `~/.claude.json`, see [Remove configuration files](/docs/en/setup#remove-configuration-files).
1370 </Step>
1371</Steps>
1313**1. Quit Desktop**
1314 
1315Quit Desktop on each computer that the user connects from. It installs both programs again the next time it connects, and it can reconnect on its own.
1316 
1317**2. End the processes**
1318 
1319Logged in as that user on the remote machine, run `kill` with the ID of each Claude Code process that [`pgrep`](#files-and-processes-on-the-remote-machine) lists. Once those are gone from the list, run `kill` with the ID of each `server` process. If you end a `server` process first, a command that Claude Code is running can keep running.
1320 
1321Then list the user's remaining processes, for example with `ps -u "$(id -un)" -f`, and end any that you recognize as started by Claude Code. Programs that it left in the background can keep running after it ends, without being in the `pgrep` list.
1322 
1323**3. Delete the folder**
1324 
1325Delete `~/.claude/remote/`. To remove Claude Code's own files in `~/.claude/` and `~/.claude.json`, see [Remove configuration files](/docs/en/setup#remove-configuration-files).
13721326 
13731327##### End one session's process
13741328 
from line 1364
14101364 
14111365The lines of 8.0 to 8.2 have no address. To get one, set `LogLevel VERBOSE` in `sshd_config` and run `sshd -T | grep -i loglevel` as root. If it prints `loglevel VERBOSE`, reload the SSH server. Then look for a line with `Connection from 203.0.113.7 port 51234` before the test's line.
14121366 
1413<a id="check-whether-the-ssh-server-itself-refuses-the-address" />
1414 
14151367##### Check whether the SSH server itself refuses the address
14161368 
14171369If connections are refused from an address that many computers with Desktop share, look in the SSH server's log for a line that ends like this one:
from line 1376
14241376 
14251377To prevent the refusal, set `PerSourcePenaltyExemptList` in `sshd_config` to the addresses that people connect from, for example `PerSourcePenaltyExemptList 203.0.113.7`. The server then applies none of its penalties to those addresses, including those for failed logins. To check the file, run `sshd -T | grep -i persourcepenalt` as root. If it prints your list, reload the SSH server.
14261378 
1427<a id="check-whether-fail2ban-counts-desktops-tests" />
1428 
14291379##### Check whether fail2ban counts Desktop's tests
14301380 
14311381If fail2ban 0.10.5 or later banned an address that Desktop connects from, find your jail's mode in `jail.conf`, `jail.local` or under `jail.d/`:
from line 1392
14421392```
14431393 
14441394For each failure that fail2ban counts, the command prints the address on a line of its own, such as `203.0.113.7`. In that case, [prevent a ban](#prevent-a-ban-by-fail2ban). If it prints nothing, fail2ban counts none of those lines in that mode, so look for another cause of the ban.
1445 
1446<a id="prevent-a-ban-by-fail2ban" />
14471395 
14481396##### Prevent a ban by fail2ban
14491397 
from line 1490
15421490}
15431491```
15441492 
1545<Warning>
1546 If your organization delivers [server-managed settings](/docs/en/server-managed-settings), set `sshHostAllowlist` there. By default, Desktop reads the key only from the [highest-ranked managed source that delivers a policy key](/docs/en/managed-settings#how-claude-code-combines-managed-sources). If that source leaves the key unset, Desktop ignores a list in a lower-ranked MDM policy or managed settings file and treats the key as [unset](/docs/en/settings-reference#sshhostallowlist). Desktop shows no warning.
1547 
1548 Also keep the same list on each user's machine, in the highest-ranked MDM policy or managed settings file there. Desktop fetches server-managed settings at launch and keeps no cached copy, so until a fetch succeeds the machine's list is the one that applies.
1549</Warning>
1493> [!WARNING]
1494>
1495> If your organization delivers [server-managed settings](/docs/en/server-managed-settings), set `sshHostAllowlist` there. By default, Desktop reads the key only from the [highest-ranked managed source that delivers a policy key](/docs/en/managed-settings#how-claude-code-combines-managed-sources). If that source leaves the key unset, Desktop ignores a list in a lower-ranked MDM policy or managed settings file and treats the key as [unset](/docs/en/settings-reference#sshhostallowlist). Desktop shows no warning.
1496>
1497> Also keep the same list on each user's machine, in the highest-ranked MDM policy or managed settings file there. Desktop fetches server-managed settings at launch and keeps no cached copy, so until a fetch succeeds the machine's list is the one that applies.
15501498 
15511499Patterns are case-insensitive. `*` matches any host, and `*.example.com` matches `example.com` and any subdomain. Anything else is an exact match. The check runs against the hostname after `~/.ssh/config` resolution via `ssh -G`, so `Host` aliases and `ProxyCommand`/`ProxyJump` entries are permitted as long as the resolved `HostName` matches.
15521500 
from line 1504
15561504 
15571505To turn off local sessions and limit SSH sessions to hosts that you choose, deploy [`disableDesktopLocalSessions`](/docs/en/settings-reference#disabledesktoplocalsessions), [`sshConfigs`](#pre-configure-ssh-connections-for-your-team), and [`sshHostAllowlist`](#restrict-which-ssh-hosts-users-can-connect-to) together.
15581506 
1559<Note>
1560 This setup is for users who sign in with a Claude account. With a [third-party provider](/docs/en/third-party-integrations), SSH sessions are off by default, and setting `sshHostAllowlist` can turn them on. Read [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions) before you deploy these keys.
1561</Note>
1507> [!NOTE]
1508>
1509> This setup is for users who sign in with a Claude account. With a [third-party provider](/docs/en/third-party-integrations), SSH sessions are off by default, and setting `sshHostAllowlist` can turn them on. Read [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions) before you deploy these keys.
15621510 
15631511The following example turns off local sessions, adds one connection, and limits SSH sessions to that connection's host:
15641512 
from line 1540
15921540 
15931541To confirm that the settings apply, check a developer's computer:
15941542 
1595<Steps>
1596 <Step title="Check the environment selector">
1597 Quit and reopen Desktop, then open the [environment selector](#start-a-session). The settings applied if it shows:
1598 
1599 * The entry for that computer, in gray
1600 * **Shared Dev VM** under **SSH**. If it isn't listed there, click the single **SSH** row, or **More** at the end of the group.
1601 
1602 If the entry for the computer is still available, check for these causes:
1603 
1604 * **Desktop version**: update Desktop if it's earlier than v1.37937.0.
1605 * **Managed settings file**: make sure that the file is valid JSON.
1606 * **Managed source**: make sure that the computer reads the [managed source](/docs/en/managed-settings#how-claude-code-combines-managed-sources) that holds the keys.
1607 </Step>
1608 
1609 <Step title="Add a host that isn't on the allowlist">
1610 [Add an SSH connection](#ssh-sessions) with a hostname that isn't on the allowlist, such as `other.example.com`. Desktop saves the connection but refuses to connect, and says that your organization's settings don't allow the connection.
1611 </Step>
1612</Steps>
1543**1. Check the environment selector**
1544 
1545Quit and reopen Desktop, then open the [environment selector](#start-a-session). The settings applied if it shows:
1546 
1547* The entry for that computer, in gray
1548* **Shared Dev VM** under **SSH**. If it isn't listed there, click the single **SSH** row, or **More** at the end of the group.
1549 
1550If the entry for the computer is still available, check for these causes:
1551 
1552* **Desktop version**: update Desktop if it's earlier than v1.37937.0.
1553* **Managed settings file**: make sure that the file is valid JSON.
1554* **Managed source**: make sure that the computer reads the [managed source](/docs/en/managed-settings#how-claude-code-combines-managed-sources) that holds the keys.
1555 
1556**2. Add a host that isn't on the allowlist**
1557 
1558[Add an SSH connection](#ssh-sessions) with a hostname that isn't on the allowlist, such as `other.example.com`. Desktop saves the connection but refuses to connect, and says that your organization's settings don't allow the connection.
16131559 
16141560## Enterprise configuration
16151561 
from line 1571
16251571 
16261572In Enterprise organizations that have HIPAA enabled, the **Desktop** toggle is off by default and an [Owner](/docs/en/server-managed-settings#access-control) can turn it on. Applying the [HIPAA configuration](/docs/en/hipaa-setup) turns it off, even if it was on, so an Owner has to turn it on afterward. **Cloud sessions** and **Remote Control** are also off by default, and an Owner can't turn them on once the organization has the HIPAA configuration applied.
16271573 
1628<Note>
1629 The OpenTelemetry form for Cowork under **Monitoring** in the admin console's [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls) applies to Cowork sessions only. In a Cowork session on this machine, the desktop app passes that collector to Claude Code as `OTEL_*` environment variables, so the form takes effect even though Claude Code in that session [never fetches admin-console settings](#managed-settings).
1630 
1631 To export telemetry from Code tab sessions, set `CLAUDE_CODE_ENABLE_TELEMETRY` and the `OTEL_*` variables in the `env` block of your Claude Code managed settings, as shown in [administrator configuration for monitoring](/docs/en/monitoring-usage#administrator-configuration). Local, cloud, and SSH sessions each read [managed settings from different sources](#managed-settings). For the hosts a cloud session can reach, see [network access](/docs/en/cloud-environments#network-access). For the `service.name` that Code tab sessions report, see [service information](/docs/en/monitoring-usage#service-information).
1632 
1633 To find out which remote machine an SSH session ran on, see [Attribute telemetry to Desktop SSH sessions](/docs/en/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions).
1634</Note>
1574> [!NOTE]
1575>
1576> The OpenTelemetry form for Cowork under **Monitoring** in the admin console's [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls) applies to Cowork sessions only. In a Cowork session on this machine, the desktop app passes that collector to Claude Code as `OTEL_*` environment variables, so the form takes effect even though Claude Code in that session [never fetches admin-console settings](#managed-settings).
1577>
1578> To export telemetry from Code tab sessions, set `CLAUDE_CODE_ENABLE_TELEMETRY` and the `OTEL_*` variables in the `env` block of your Claude Code managed settings, as shown in [administrator configuration for monitoring](/docs/en/monitoring-usage#administrator-configuration). Local, cloud, and SSH sessions each read [managed settings from different sources](#managed-settings). For the hosts a cloud session can reach, see [network access](/docs/en/cloud-environments#network-access). For the `service.name` that Code tab sessions report, see [service information](/docs/en/monitoring-usage#service-information).
1579>
1580> To find out which remote machine an SSH session ran on, see [Attribute telemetry to Desktop SSH sessions](/docs/en/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions).
16351581 
16361582### Managed settings
16371583 
from line 1711
17651711 
17661712Desktop continues the same session rather than a copy, so `claude --resume` in the terminal still finds it afterwards.
17671713 
1768<Tip>
1769 When to use Desktop vs CLI: use Desktop when you want to manage parallel sessions in one window, arrange panes side by side, or review changes visually. Use the CLI when you need scripting, automation, or prefer a terminal workflow.
1770</Tip>
1714> [!TIP]
1715>
1716> When to use Desktop vs CLI: use Desktop when you want to manage parallel sessions in one window, arrange panes side by side, or review changes visually. Use the CLI when you need scripting, automation, or prefer a terminal workflow.
17711717 
17721718### CLI flag equivalents
17731719 
from line 1750
18041750 
18051751The app also re-delivers stdio servers from `~/.claude.json` to the embedded CLI in local sessions. When the top level of `~/.claude.json` (user scope) and `.mcp.json` define the same stdio server name, the Code tab uses the `~/.claude.json` definition, departing from the CLI [scope hierarchy](/docs/en/mcp#scope-hierarchy-and-precedence).
18061752 
1807<Note>
1808 The standalone CLI does not read `claude_desktop_config.json`. On macOS and WSL, run `claude mcp add-from-claude-desktop` to copy those servers into `~/.claude.json`. See [Import MCP servers from Claude Desktop](/docs/en/mcp#import-mcp-servers-from-claude-desktop) for the import flow and scope options.
1809</Note>
1753> [!NOTE]
1754>
1755> The standalone CLI does not read `claude_desktop_config.json`. On macOS and WSL, run `claude mcp add-from-claude-desktop` to copy those servers into `~/.claude.json`. See [Import MCP servers from Claude Desktop](/docs/en/mcp#import-mcp-servers-from-claude-desktop) for the import flow and scope options.
18101756 
18111757### Feature comparison
18121758 
from line 1867
19211867 
19221868For any other message, check the [remote machine requirements](#remote-machine-requirements-for-ssh-sessions).
19231869 
1924<a id="get-desktops-logs-for-an-ssh-problem" />
1925 
19261870### Get Desktop's logs for an SSH problem
19271871 
19281872You get `ssh.log`, Desktop's record of its SSH connections, in a zip file of Desktop's logs that you save from the **Help** menu. To save it, open **Help > Troubleshooting** and select the item for your system:
19291873 

desktop-ios-simulator Changed · +18 / -20 lines

from line 2
22 
33> Claude Code Desktop opens your app in the iOS Simulator pane when Claude builds, runs, or checks it, with a separate simulator for each session.
44 
5<Note>
6 The iOS Simulator pane is in public beta in Claude Code Desktop on macOS. It's available on Pro, Max, Team, and Enterprise plans, except in Enterprise organizations that have a HIPAA configuration enabled.
7</Note>
5> [!NOTE]
6>
7> The iOS Simulator pane is in public beta in Claude Code Desktop on macOS. It's available on Pro, Max, Team, and Enterprise plans, except in Enterprise organizations that have a HIPAA configuration enabled.
88 
99The iOS Simulator pane shows your app running in Apple's iOS Simulator next to your conversation in Claude Code Desktop. When Claude builds, installs, launches, or checks your app in a simulator, the pane opens automatically and streams the device screen live. Use it to watch Claude run and test your app, or to tap through the app yourself while Claude keeps working.
1010 
from line 19
1919* [Xcode](https://developer.apple.com/xcode/) with the iOS platform installed, which provides the simulator devices. If Xcode lists no simulators yet, see [The simulator pane says no simulators were found](#the-simulator-pane-says-no-simulators-were-found)
2020 * Xcode 26.x or Xcode 27 is recommended, and the pane works with either. If you have more than one Xcode installed, see [Choose which Xcode the simulator pane uses](#choose-which-xcode-the-simulator-pane-uses)
2121 
22<Note>
23 On this page, "device" refers to a simulated iPhone or iPad, one of the same simulator devices you manage in Xcode under **Window → Devices and Simulators**, not physical hardware.
24</Note>
22> [!NOTE]
23>
24> On this page, "device" refers to a simulated iPhone or iPad, one of the same simulator devices you manage in Xcode under **Window → Devices and Simulators**, not physical hardware.
2525 
2626The simulator pane is available in local sessions only. In [cloud](/docs/en/desktop#run-long-running-tasks-in-the-cloud) and [SSH](/docs/en/desktop#ssh-sessions) sessions, Claude runs on a machine that can't reach the simulators on your Mac.
2727 
from line 43
4343 
4444You don't need a command or setting to open the simulator pane. Claude opens it when it runs your app in a simulator.
4545 
46<Steps>
47 <Step title="Open your iOS project">
48 In Claude Code Desktop, open the **Code** tab and start a session with your app's project as the [project folder](/docs/en/desktop#start-a-session). Any project that builds an app for the iOS Simulator works.
49 </Step>
46**1. Open your iOS project**
5047 
51 <Step title="Ask Claude to run or test the app">
52 Phrase the task around running or verifying the app. For example:
48In Claude Code Desktop, open the **Code** tab and start a session with your app's project as the [project folder](/docs/en/desktop#start-a-session). Any project that builds an app for the iOS Simulator works.
5349 
54 ```text theme={null}
55 Build the app and run it in the simulator to check the onboarding flow.
56 ```
57 </Step>
50**2. Ask Claude to run or test the app**
5851 
59 <Step title="Watch the app in the simulator pane">
60 When the app launches in a simulator, the iOS Simulator pane opens next to the conversation. The first time Claude uses a device, the desktop app asks you to allow it; see [Grant Claude access to a device](#grant-claude-access-to-a-device). Claude installs the app, taps through it, and reads the screen to verify its own changes while you watch.
61 </Step>
62</Steps>
52Phrase the task around running or verifying the app. For example:
53 
54```text theme={null}
55Build the app and run it in the simulator to check the onboarding flow.
56```
57 
58**3. Watch the app in the simulator pane**
59 
60When the app launches in a simulator, the iOS Simulator pane opens next to the conversation. The first time Claude uses a device, the desktop app asks you to allow it; see [Grant Claude access to a device](#grant-claude-access-to-a-device). Claude installs the app, taps through it, and reads the screen to verify its own changes while you watch.
6361 
6462The simulator pane opens whenever Claude launches the app in a simulator, at any point in the session. When your request is about seeing the app, for example "does the new screen look right?", Claude starts a simulator before it begins the work. After Claude fixes a bug or changes a screen, ask it to verify the change: relaunching the app reopens the pane if it isn't open.
6563 
Feedback