Claude Code Managed Settings: Enforce Team Policy (Setup)

David IyaDavid Iya November 2, 2026 9 min read

What Claude Code managed settings are

Claude Code managed settings are the settings an organization deploys to every developer's machine. They use the same JSON shape as a normal settings.json, but Claude Code applies them above every other level: user settings, project settings, local settings and the --settings flag. A developer can make a managed rule stricter for themselves in a few security-sensitive cases. They cannot loosen it.

The same policy reaches the terminal, the VS Code and JetBrains extensions, the desktop app's Code tab and Agent SDK sessions on that machine. So if most of your team lives in the desktop app, they are covered by the same file as the people in the terminal. My take: if more than a couple of people use Claude Code on company code, you want at least a small managed policy in place, even if all it does is block bypass mode and keep secrets files out of reach.

The three ways to deliver managed settings

Every delivery method carries the same keys. What changes is where the policy lives and how quickly a change reaches a running session. Pick the one that matches how you already manage devices.

Claude Code managed settings delivery methods

MethodWhere it livesWhen Claude Code reads itUse it when
Server-managed settingsOrganization settings > Claude Code > Managed settings in the claude.ai admin consoleAt startup, then polled hourlyYou have a Team or Enterprise plan and no device management, or developers use cloud sessions
MDM or OS policyA macOS configuration profile in the com.anthropic.claudecode domain, or a Settings value under HKLM\SOFTWARE\Policies\ClaudeCode on WindowsAt startup, then checked every 30 minutesYou already run Jamf, Intune, Group Policy or similar
Managed settings filemanaged-settings.json in the system directoryAt startup, and reloaded when the file changesMachines without MDM, Linux hosts, or images you build yourself

The file goes in /Library/Application Support/ClaudeCode/ on macOS, /etc/claude-code/ on Linux and WSL, and C:\Program Files\ClaudeCode\ on Windows. Claude Code does not read the old C:\ProgramData\ClaudeCode path, so check for that if you are migrating an older rollout.

If you have MDM, use it. A file that a developer with admin rights can edit is weaker than a profile your device management redeploys. Server-managed settings are the easiest to change, since there is nothing to push to machines, but they are a client-side control rather than a security boundary: on an unmanaged device a user does not need admin rights to get around them. For a team that already has MDM and also uses cloud sessions, run both, because cloud sessions do not read anything on a developer's laptop.

A starter managed-settings.json

Start small. A first policy that blocks reading secrets, turns off bypass mode and makes managed permission rules the only ones that count looks like this, written as plain JSON in the file:

  • permissions.deny with Read(./.env) and Read(./secrets/**), so Claude cannot open those files in any project.
  • permissions.disableBypassPermissionsMode set to "disable", so nobody can start a session that skips every permission prompt.
  • allowManagedPermissionRulesOnly set to true, so allow and deny rules from user, project and local files and from --allowedTools are ignored. Only your managed rules apply.

Be careful with that last one. It is the right call for a locked-down team, but it also throws away every allow rule your developers set up to stop repeat prompts. If you turn it on, add the allow rules people actually need to the managed file, or expect a week of complaints. Claude Code permissions explained covers the rule syntax.

From there, the keys teams reach for most are availableModels to restrict which models people can pick, an env block for things like telemetry endpoints or a proxy, allowedMcpServers and deniedMcpServers for MCP control, and a sandbox block for network allowlists. A managed model value is only a default: --model and ANTHROPIC_MODEL still override it for a session, so use availableModels when you need an actual limit.

Keys only managed settings can set

Some keys do nothing in a user or project file. Claude Code reads them only from a managed source. Most are locks: the thing they protect, such as permission rules or a domain allowlist, can be set anywhere, and the lock tells Claude Code to honor only the managed version.

Managed-only keys worth knowing first

KeyWhat it does
allowManagedPermissionRulesOnlyManaged settings become the only source of permission rules
allowManagedHooksOnlyRestricts which hooks run, so a cloned repo cannot bring its own
allowManagedMcpServersOnlyOnly the managed allowedMcpServers list counts. deniedMcpServers still merges from every source
sandbox.network.allowManagedDomainsOnlyOnly managed allowed domains count. Other domains are blocked without a prompt
strictKnownMarketplacesControls which plugin marketplaces people can add and install from
forceRemoteSettingsRefreshBlocks startup until server-managed settings are freshly fetched, and exits if the fetch fails
disableSideloadFlagsRejects --plugin-dir, --agents, --mcp-config and similar flags at startup

If you are writing a policy for client work or regulated code, these are the ones that close the obvious gaps. Hooks and MCP servers are the two places a project can bring its own code into a session, so the hooks guide and the MCP server list are worth reading before you decide what to allow.

Server-managed settings from the admin console

On a Team or Enterprise plan, an Owner or Primary Owner can paste the policy JSON into Organization settings > Claude Code > Managed settings. Claude Code fetches it when a developer signs in with an eligible credential, applies a cached copy on later launches, and checks for changes every hour. On a first sign-in, it waits up to five seconds for the fetch so the policy can apply from the first screen.

  • It applies to everyone in the organization. Per-group policies are not supported in the console yet, so a different policy for one team means a file or MDM profile for that team.
  • Hooks, shell-command settings like apiKeyHelper and statusLine, some sandbox settings and some env variables show the developer an approval dialog first. If they reject it, Claude Code exits.
  • Exporting a CLAUDE_CODE_USE_* provider variable or a custom ANTHROPIC_BASE_URL in the shell skips the fetch entirely. If your team routes through a gateway, plan on file or MDM delivery.
  • A Console API key belongs to a separate organization from your claude.ai Team or Enterprise organization, so a CI job using one does not receive the console policy. Use a managed file on that machine, or a long-lived OAuth token from claude setup-token.

When more than one source is present

This is where most rollouts go wrong. Claude Code ranks the managed sources in this order: server-managed settings, then MDM or OS policy, then managed settings files, then the Windows HKCU registry. By default it uses the highest-ranked source that sets at least one policy key and ignores the others entirely. It does not merge them, and it does not warn you.

So if someone pastes a two-line policy into the admin console as a test, every carefully built managed-settings.json on your fleet stops applying for most keys. A short list of keys, including the env block, sandbox locks and the MCP allowlist lock, are read from every admin source anyway. If you want every source combined on purpose, set managedSourcesBehavior to "merge" in your highest-ranked source. Lists then combine, locks take the strictest value, and most other keys come from the higher source.

My recommendation: pick one primary delivery method and write it down. Mixing sources is fine when it is deliberate. When it happens by accident, it looks exactly like a policy that silently stopped working.

Check that the policy is actually in force

Never roll out to the whole team without checking one machine first. Two commands answer almost every question.

  1. Run /status inside Claude Code and read the Setting sources line. It shows Enterprise managed settings with the source in brackets: (remote), (plist), (HKLM), (file), (drop-ins) and so on. A Skipped sources line names any managed source Claude Code found and ignored.
  2. If the line is missing, Claude Code found no managed source with a policy key. Check the file path for that operating system, and check the file contains a real policy key rather than only control keys.
  3. Run claude doctor. It lists every entry Claude Code dropped for failing validation, with its source and field, and for server-managed settings it reports whether the fetch loaded, failed or was skipped and why.
  4. Run /permissions to see the effective permission rules, so you can confirm your deny list is there.

One failure mode to know: a managed settings file that is not valid JSON does not get ignored. Claude Code refuses to start and prints an error naming the file. Validate the JSON in your deployment pipeline before it reaches anyone's machine. Some invalid values also fail closed, so a typo in a lock reads as the strict setting until you fix it, which is safe but confusing if you do not know to look.

Free Claude Code drops, straight to your inbox

Short, practical drops on skills, MCP, agents, prompts, and more. No spam, unsubscribe anytime.

Frequently asked questions

Where is the Claude Code managed-settings.json file?

On macOS it goes in /Library/Application Support/ClaudeCode/, on Linux and WSL in /etc/claude-code/, and on Windows in C:\Program Files\ClaudeCode\. Claude Code reads it at startup and reloads it when the file changes.

Can developers override Claude Code managed settings?

Not from their own settings files, project files or the --settings flag. A few exceptions let a stricter lower-level value count. A managed model is only a default, so use availableModels to restrict model choice, and a developer with admin rights can edit a local managed file, which is why MDM delivery is stronger.

What are server-managed settings in Claude Code?

Policy you set in the claude.ai admin console under Organization settings > Claude Code > Managed settings. It needs a Team or Enterprise plan and the Owner or Primary Owner role. Claude Code fetches it at startup and checks for changes hourly.

Why are my Claude Code managed settings not applying?

Run /status and read the Setting sources line. If it is missing, the file is in the wrong place or has no policy key. If it names a different source, a higher-ranked source such as server-managed settings is in use and yours was skipped. claude doctor lists dropped entries and failed fetches.

Do managed settings apply to the Claude Code desktop app?

Yes. The desktop app's Code tab reads the same managed sources as the terminal and the IDE extensions on that machine. Cloud sessions are different: they only get policy from server-managed settings.

Last reviewed by David Iya on November 2, 2026

David Iya

Written by

David Iya

Forbes 30 Under 30 · Y Combinator

Keep reading

Claude CodeSetup

Claude Code OpenTelemetry: Track Usage and Cost (Setup)

Claude Code can export metrics and events through OpenTelemetry to your own collector, so you can see sessions, tokens, estimated cost, commits and tool activity per person, team and model. Turn it on with CLAUDE_CODE_ENABLE_TELEMETRY=1, pick exporters, point it at an endpoint, and lock it in managed settings for a team. Here is the setup, what each metric tells you, and what stays private by default.

David Iya 9 min
Read article
Claude CodeSetup

Claude Code with GitHub Enterprise Server: Setup and Limits

Claude Code works with GitHub Enterprise Server on Team and Enterprise plans. An Owner connects your GHES instance once from Organization settings > Git providers, installs the GitHub App it creates, and then developers get cloud sessions, Code Review and GHES-hosted plugin marketplaces with no per-repo setup. Here is the setup, what works and what does not, and the fixes for the errors you will hit.

David Iya 9 min
Read article

Ready to build it yourself?

Join Claude Code Club, the #1 community for learning claude code, for $9/month.

← Back to the blog