Trust & Control/Permissions & Access Control
Intermediate10 min

Team and Enterprise Permission Management

Enterprise deployments of Claude Code require centralized policy management — settings that override what individual developers can configure, distributed to every machine, with audit trails. Here's how the system works.

Quick Reference

  • Managed settings: Anthropic admin console → server-pushed policy that overrides everything
  • managed-settings.d/ directory: modular drop-in policy fragments that merge at startup
  • forceRemoteSettingsRefresh: blocks startup until fresh policy is fetched (zero-trust compliance)
  • MDM distribution: macOS plist or Windows registry for IT-managed machine policy
  • Subprocess sandboxing: PID namespace isolation on Linux via CLAUDE_CODE_SUBPROCESS_ENV_SCRUB
  • Scoping: managed (highest) > project > user > local
  • allowedChannelPlugins: controls which plugins developers can install
  • Ship .claude/settings.json in the repo for team-wide onboarding defaults

The Policy Hierarchy

Claude Code has a four-level settings hierarchy. Lower levels can add permissions but cannot override what higher levels restrict. This is the foundational design that makes enterprise policy distribution work.

LevelSourceCan Override?Use For
Managed (highest)Anthropic admin console / MDMOverrides all belowOrg-wide policy: deny rules, approved MCP servers, required modes
Project.claude/settings.json (committed to repo)Can add, not remove managed rulesTeam defaults: workflow allowlists, project-specific denies
User~/.claude/settings.jsonCan add, not remove project/managed rulesPersonal preferences: mode defaults, personal tool allowlists
Local (lowest).claude/settings.local.json (gitignored)Can add, not remove anything abovePer-developer overrides not shared with team
Allow Arrays Merge, Deny Arrays Win

Allow rules from all levels are active simultaneously — a user-level allow doesn't cancel a project-level allow. But if a managed-level deny rule exists, no level below it can override it. Deny rules are absolute at the level they're set.