14. Enterprise rollout
"Rolling out Claude Code is five decisions in order: which API provider, how settings reach devices, what to enforce, how you'll see usage, and how data is handled. The provider sets billing, sign-in and which features people get: Teams or Enterprise is the default, Console is pay as you go, and Bedrock, Google Cloud's Agent Platform and Foundry inherit your cloud's controls. Policy goes out as managed settings, which sit above everything a developer can set. If you want one control point for keys, budgets and audit logs, put an LLM gateway in front and point ANTHROPIC_BASE_URL at it. Then verify on one machine with /status before you touch the fleet."
The last sentence is the one that sounds like someone who has actually done a rollout.
8 pictures, in order.
Use the arrow keys or the dots. Tap a picture to see it full size.
The facts someone can check.
The provider decision
| Teams / Enterprise | Console | Bedrock | Agent Platform (formerly Vertex AI) | Foundry | |
|---|---|---|---|---|---|
| Billing | Per seat | Pay as you go | Through AWS | Through GCP | Through Azure |
| Sign-in | claude.ai SSO or email | API key, or Console sign-in | API key or AWS credentials | GCP credentials | API key or Entra ID |
| Cost tracking | Usage dashboard | Usage dashboard | AWS Cost Explorer | GCP Billing | Azure Cost Management |
| Turn it on | /login |
/login |
CLAUDE_CODE_USE_BEDROCK=1 |
CLAUDE_CODE_USE_VERTEX=1 |
CLAUDE_CODE_USE_FOUNDRY=1 |
Cloud sessions, cloud scheduled tasks, Code Review, Remote Control and the Chrome extension need a claude.ai account. A Bedrock-only shop doesn't get them unless people also hold Teams or Enterprise seats. Say that early; it changes the budget.
The four commands
/setup-bedrockand/setup-vertexare interactive wizards: credentials, region (and project for Google Cloud), a check of which Claude models the account can actually call, and model pins. They write the result into theenvblock of~/.claude/settings.json. Both are hidden from the command menu untilCLAUDE_CODE_USE_BEDROCK=1orCLAUDE_CODE_USE_VERTEX=1is set, so you type the full name. First-time users also reach them from the login screen under 3rd-party platform.- Wizards are for one person. For a fleet or CI, set the same values as environment variables and distribute them, and pin model versions: an unpinned alias resolves to Claude Code's built-in default, which can lag what your account has enabled.
/install-github-appinstalls the Claude GitHub App on one repo and can set up GitHub Actions: it saves a secret (ANTHROPIC_API_KEYorCLAUDE_CODE_OAUTH_TOKEN), pushes the workflow files and opens the PR. github.com only, needsgh auth loginand repo admin, and is hidden on Bedrock, Agent Platform and Foundry. The app's 13 permissions come as one set./install-slack-appopens a browser to install the Claude Slack app. The earlier Claude Code in Slack answers channel mentions only for Pro and Max accounts in workspaces not connected to Claude Tag; Team and Enterprise organizations set up Claude Tag. Slack runs as cloud sessions, so it is never part of a gateway deployment.
Settings precedence, highest first
| Level | File | Who it affects |
|---|---|---|
| 1. Managed | managed-settings.json, MDM policy, or server-managed |
Everyone the org deploys it to |
| 2. Command line | --settings <file-or-json> |
One session |
| 3. Project local | .claude/settings.local.json |
You, this project |
| 4. Shared project | .claude/settings.json |
The team, through git |
| 5. User | ~/.claude/settings.json |
You, every project |
- Lists merge.
permissions.allowandpermissions.denycombine across files, so developers can add to a managed list but can't remove from it. - Environment variables aren't a level. Each variable and setting pair has its own rule:
ANTHROPIC_MODELin the shell beats themodelkey;ANTHROPIC_DEFAULT_MODELapplies only when no file setsmodel. - 11 keys honor a stricter value from a lower level, even against managed: for example
disableClaudeAiConnectors,maxEffortLevel,permissions.blockReadsOutsideWorkingDirectories. - A managed
modelis a default, not a lock.--modelstill wins. Lock withavailableModels.
How managed settings reach a machine
| Mechanism | Read | Notes |
|---|---|---|
| Server-managed (claude.ai console or a Claude apps gateway) | Startup, then hourly | Only source that reaches Anthropic-hosted cloud sessions |
MDM or OS policy (com.anthropic.claudecode plist, HKLM\SOFTWARE\Policies\ClaudeCode) |
Startup, then every 30 min | Needs admin rights to write |
File (managed-settings.json plus managed-settings.d/*.json) |
Startup, reloads on change | macOS /Library/Application Support/ClaudeCode/, Linux /etc/claude-code/, Windows C:\Program Files\ClaudeCode\ |
| Windows HKCU registry | Startup, then every 30 min | User-writable, so a convenience default, not enforcement |
When more than one is present, the default is first-wins: Claude Code uses the highest one and ignores the rest. managedSourcesBehavior: "merge" composes them (v2.1.242 or later). Verify with /status: the Setting sources line reads Enterprise managed settings (file) or whichever source won.
Which credential wins
Claude Code takes the first credential it finds: cloud provider credentials, then ANTHROPIC_AUTH_TOKEN (sent as Authorization: Bearer), ANTHROPIC_API_KEY (sent as X-Api-Key), apiKeyHelper, CLAUDE_CODE_OAUTH_TOKEN, Anthropic profile or federation credentials, and finally the /login subscription. A signed-in Claude apps gateway session outranks all of them. Claude Desktop and cloud sessions don't use this list at all.
LLM gateways
- A gateway holds the one provider credential; developers hold gateway credentials. You get usage per person, budgets, audit logs and provider switching in one place.
- Rollout: deploy it with your provider credential, issue each developer their own credential, distribute
ANTHROPIC_BASE_URLplus the credential through managed settings, then have each developer check/statusand send a test prompt. - Lock it:
allowedProviders: ["customEndpoint"]with the gateway's base URL in the same managedenvblock refuses any other destination (v2.1.285 or later). ANTHROPIC_BASE_URLalone is not a credential. A saved claude.ai login stays active, so subscription billing still applies until a gateway credential is set.- Claude Desktop reads its own third-party inference configuration, not
ANTHROPIC_BASE_URL. - If the gateway rejects new request fields with a 400, set
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1.
Network, retention and telemetry
- Proxy:
HTTPS_PROXY,HTTP_PROXY,NO_PROXY. No SOCKS. For NTLM or Kerberos, put a gateway in front. - TLS inspection: Claude Code trusts its bundled CA set plus the OS store by default; add a custom CA with
NODE_EXTRA_CA_CERTS. mTLS usesCLAUDE_CODE_CLIENT_CERTandCLAUDE_CODE_CLIENT_KEY. - Retention: 30 days standard on Team, Enterprise and API; zero data retention for qualified Enterprise orgs, enabled per org; transcripts sent with
/feedbackkept 5 years. Locally, transcripts sit in~/.claude/projects/for 30 days (cleanupPeriodDays). - Training: on commercial terms, Anthropic doesn't train on your code or prompts.
- Telemetry to Anthropic is on for the Claude API and off by default on Bedrock, Agent Platform and Foundry.
DISABLE_TELEMETRY=1stops metrics;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1stops metrics, error reports and surveys at once.
The architect's point
Managed settings are the only layer a developer can't override, so every "must" belongs there: permission denies, the sandbox, login method, allowed providers and models. Everything else is a default people can change. Design the rollout as one managed policy plus sensible defaults, and test it with /status on one machine before it reaches a thousand.
Answer out loud, then flip the card.
Mark each one honestly. Cards you miss stay flagged for review, in this browser.
A CISO asks: "If we buy Teams seats, can a developer point Claude Code at their personal API key instead?" What do you configure?
Managed settings with forceLoginMethod: "claudeai" and forceLoginOrgUUID set to your organization. With those set, sessions authenticated by ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelper are blocked at startup. Add allowedProviders (v2.1.285 or later) to refuse any provider you haven't approved. Deliver it through MDM or the file path so it can't be edited without admin rights.
An AWS-only customer wants Claude Code on Bedrock. What do they give up, and what's the setup?
They lose cloud sessions, cloud scheduled tasks, Code Review, Remote Control and the Chrome extension unless developers also have Teams or Enterprise seats. Setup: enable the models in the Bedrock console, then either run /setup-bedrock per person (hidden until CLAUDE_CODE_USE_BEDROCK=1) or, for a fleet, distribute CLAUDE_CODE_USE_BEDROCK=1, the region and pinned model IDs. Pin versions so aliases don't drift to a model the account doesn't have.
IT deployed a managed-settings.json, but a developer's personal settings still seem to win. How do you debug it?
Run /status on that machine. If the Setting sources line doesn't mention Enterprise managed settings, the policy didn't land: wrong path, or the file only contains control keys. If it names a different source, a higher-priority source (MDM, server-managed) won under the default first-wins rule, and Skipped sources shows yours. Run claude doctor to see any entries dropped for failing validation. Also check whether the key is one of the eleven where a stricter lower value wins.
We set ANTHROPIC_BASE_URL to our gateway, but finance says usage still lands on people's subscriptions. Why?
A base URL alone isn't a credential. With no ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY or apiKeyHelper set, a saved claude.ai login stays the active credential, so requests route through the gateway but bill to the subscription. Distribute a per-developer gateway credential too, and check /status for the Auth token or API key line.
The network team only allows egress to the gateway. What breaks, and what do you set?
Model requests are fine. Version checks, telemetry and release notes go out on their own and fail. Set CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, knowing it also turns off auto-updates, so plan another update path. The WebFetch hostname check still calls api.anthropic.com; allowlist it or set skipWebFetchPreflight: true.
Security asks how long Anthropic keeps their code. What's the accurate answer?
On Team, Enterprise and API: 30 days standard retention, and no training on code or prompts under commercial terms. Qualified Enterprise orgs can get zero data retention, enabled per organization by the account team. Two caveats: transcripts someone sends with /feedback are kept 5 years, and local transcripts sit in plaintext on the laptop for 30 days by default (cleanupPeriodDays). On Bedrock, Agent Platform or Foundry, retention and encryption follow that cloud provider.
A developer says "I set model to opus in managed settings and people still use sonnet." Is that a bug?
No. A managed model is a starting default; --model and ANTHROPIC_MODEL still pick the session's model. To restrict choice, deploy availableModels (and enforceAvailableModels to constrain the default too), or deniedModels.
A company has Jamf on Macs and wants different policies for two teams. What do you recommend?
Deploy a different configuration profile (or managed-settings.json) to each group from Jamf; MDM targets device groups and Claude Code applies whatever policy reaches the machine. The claude.ai console can't target a group yet. For teams that share parts, the file route supports managed-settings.d/ drop-ins merged alphabetically, such as 10-telemetry.json and 20-security.json.
Wrong answers that sound right.
Before you tap, say why each one is wrong.
Three moves in a fresh project.
Facts checked against code.claude.com/docs/en/ pages commands, admin-setup, third-party-integrations, settings, managed-settings, authentication, settings-reference, amazon-bedrock, google-vertex-ai, microsoft-foundry, github-actions, slack, gateways, llm-gateway, llm-gateway-connect, network-config, data-usage and costs on 2026-10-25. Claude Code ships fast: confirm anything that matters against the official docs.