Rubric
Contents — domains, guide and mocks

Configuring Claude Code for teams

CCAR-P 7.113 min read · checked 21 September 2026

Task statementConfigure Claude tools and environments for teams (e.g., Claude Code)

Where a setting wins

highest precedence at the top

  1. Managed settingsadmin console, MDM or system file — organisation
  2. Command lineclaude --settings, flags — this session
  3. Project local.claude/settings.local.json — you, this repo
  4. Shared project.claude/settings.json — committed, whole team
  5. User~/.claude/settings.json — you, every repo
A single value set at a higher level overrides the same key lower down. Lists such as permission rules merge instead, so each level can add entries but a lower level can’t remove a managed one.

Four scopes, four jobs

Claude Code reads settings from files at several scopes, and each scope answers a different question: who should this apply to? The settings documentation’s own guidance is clear. User settings are personal preferences for every project. Shared project settings in .claude/settings.json are for the team: permissions, hooks, plugins and the environment variables the project needs, committed so every clone gets them. Project local settings in .claude/settings.local.json are your personal overrides for one repo and stay out of git. Managed settings are for security policy and compliance, and nothing a developer sets overrides them, apart from a few keys where Claude Code honours a stricter value from a lower level.

Put it in…When the setting is…Example
Managed settingsOrganisation policy that must hold everywhereDeny reading .env files; only approved MCP servers
.claude/settings.json (committed)How this repo works, for everyoneAllow npm run test *; enable the team’s lint plugin
.claude/settings.local.jsonYour preference for this repo onlyAllow a local debug script you run often
~/.claude/settings.jsonYour preference everywhereDefault model, editor mode, theme

Two combining rules matter for design. First, lists merge: permissions.allow and permissions.deny collect entries from every file, so a team can add allow rules on top of an organisation’s but can’t delete a managed deny. Second, permission rules are evaluated deny, then ask, then allow, across all scopes, and the first match wins. A deny rule in any file beats an allow rule in any other. That makes deny rules the natural tool for policy, and allow rules the natural tool for removing friction.

.claude/settings.json — committed, so every clone gets itjson
{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)",
      "Bash(git push *)"
    ]
  },
  "sandbox": { "enabled": true },
  "extraKnownMarketplaces": {
    "acme-tools": {
      "source": { "source": "github", "repo": "acme/claude-plugins" }
    }
  },
  "enabledPlugins": { "service-conventions@acme-tools": true }
}

Managed settings: organisation policy that sticks

Managed settings are how an organisation makes policy non-negotiable. They can be delivered four ways, checked in priority order: server-managed settings from the claude.ai admin console (Teams or Enterprise plans; fetched at startup and refreshed hourly), a macOS plist or Windows HKLM registry policy, a file named managed-settings.json in a system directory, and the Windows user registry. The plist and HKLM locations need admin rights to write, so they resist tampering. The docs describe the user-registry location as a convenience default rather than an enforcement channel, because users can write to it without elevation.

ControlManaged setting keysWhat it achieves
Permission lockdownallowManagedPermissionRulesOnly, permissions.disableBypassPermissionsModeOnly the organisation’s permission rules count; nobody skips permission checks
MCP controlallowedMcpServers, deniedMcpServers, allowManagedMcpServersOnlyOnly approved servers can be added or connected
Plugin sourcesstrictKnownMarketplaces, blockedMarketplacesPlugins come only from approved marketplaces
HooksallowManagedHooksOnlyOnly hooks the organisation deploys run
Customisation lockdownstrictPluginOnlyCustomizationSkills, agents, hooks and MCP servers only from plugins or managed settings
Models and versionsavailableModels, minimumVersionApproved models only; no downgrade below a floor

Organisation instructions have a managed home too. A managed-policy CLAUDE.md at the system path loads in every session, and the memory docs say it can’t be excluded by individual settings. But it is still context, not enforcement. The same docs say Claude treats CLAUDE.md as context, not enforced configuration, and point to a PreToolUse hook when an action must be blocked whatever Claude decides.

Sharing the team toolkit: CLAUDE.md, MCP and plugins

Beyond settings, three shared assets make a team’s Claude Code consistent. The project CLAUDE.md (in the repo root or .claude/) carries commands, conventions and gotchas; personal notes go in a gitignored CLAUDE.local.md. How to structure and scope those files is covered in the CCAR-F Claude Code lessons. Project-scoped MCP servers live in .mcp.json at the repo root, committed so the team shares them. Interactive sessions ask each developer to approve a project server before using it. Plugins bundle skills, hooks, subagents and MCP servers into one installable unit, and a marketplace is a catalogue of them. Listing a marketplace under extraKnownMarketplaces and plugins under enabledPlugins in the committed settings file means teammates get them automatically once they trust the folder.

Reviewing a repo’s Claude Code setup before it is shared

  • Passes: Build and test commands in .claude/settings.json allow rules
  • Fails: .mcp.json headers contain a literal API tokenuse ${VAR} expansion from each user’s environment
  • Check: “Never read .env” written only in CLAUDE.mdadvisory; add a deny rule or managed policy
  • Passes: .claude/settings.local.json excluded from git
  • Passes: Team plugin from an approved marketplace
  • Missing: Sandbox network allowlist for Bashdeny rules alone don’t stop curl
A shared configuration is code: review it like code. The failure here is a secret in a committed file; the warnings are policy living at the wrong level.

.mcp.json supports environment-variable expansion (${VAR} and ${VAR:-default}) in commands, arguments, URLs and headers. That lets the committed file name the server while each developer supplies their own token. As a safeguard, Claude Code expands a set of well-known credential variables, such as ANTHROPIC_API_KEY, as empty in remote server URLs and headers so they don’t leak to third parties. When the same MCP server name is defined in several places, local scope wins over project, and project over user.

Traps the wrong answers are built from

Tempting but wrongDo this instead
Writing a security requirement only in CLAUDE.mdEnforce it with managed deny rules, hooks, the sandbox or an MCP allowlist; CLAUDE.md is guidance.
Committing API tokens in .mcp.json or .claude/settings.jsonReference ${VAR} and have each developer supply credentials locally.
Putting organisation policy in the shared project settings fileDeliver it as managed settings, which developers and repos can’t override.
Relying on the Windows user registry to enforce policyUse server-managed settings, HKLM/plist policy or the system managed-settings.json file.
Locking every rule to managed-only on day oneEnforce the few true policies centrally and let repos add their own allow rules for build and test commands.

You should now be able to

  • Place a setting at the right scope: managed, command line, project local, shared project or user.
  • Predict the effective configuration when values override and lists merge across scopes.
  • Use deny rules, hooks, the sandbox and managed MCP or plugin controls for rules that must be enforced.
  • Choose a managed-settings delivery mechanism that fits the provider and device fleet.
  • Share CLAUDE.md, project MCP servers and plugins through the repository without committing secrets.

Practice questions

Original questions written for this lesson, in the exam’s style. Answer first, then open the reasoning — every option is explained, including why the wrong ones are tempting.

  1. Question 1

    A bank requires that Claude Code never read files under any secrets/ directory, on every developer machine and in every repository. Developers must not be able to relax this.

    Where should this rule be configured?

    1. AIn each repository’s CLAUDE.md, stated as a clear, emphasised instruction.
    2. BAs an allow list in each repo’s .claude/settings.json that omits secrets/.
    3. CAs a Read deny rule for secrets/** in managed settings.
    4. DIn each developer’s ~/.claude/settings.json, installed by onboarding.
    Show answer and reasoning
    1. AIncorrect. CLAUDE.md is context Claude usually follows, but it enforces nothing, and it only covers repos that include it.
    2. BIncorrect. Omitting a path from an allow list doesn’t block it; it just means Claude asks. A developer could approve the read.
    3. CCorrect. Managed settings apply on every machine and can’t be overridden, and a deny rule is evaluated before any allow rule from any scope.
    4. DIncorrect. User settings belong to the developer, who can edit them. That makes them a preference, not a policy.
  2. Question 2

    A team wants every engineer to connect to the company’s internal issue-tracker MCP server with their own personal token. The server definition should be shared, so nobody has to configure it by hand.

    Which setup is most appropriate?

    1. AAdd the server at user scope on each laptop during onboarding.
    2. BCommit .mcp.json with a shared service-account token in the headers.
    3. CPaste each engineer’s token into CLAUDE.md so Claude can pass it.
    4. DCommit .mcp.json with a ${TRACKER_TOKEN} header and have each user set it.
    Show answer and reasoning
    1. AIncorrect. It works, but it isn’t shared through the repo, so every engineer configures it by hand and definitions drift.
    2. BIncorrect. This commits a credential to git and loses per-user identity and audit.
    3. CIncorrect. It puts secrets in model context and in the repo, and CLAUDE.md doesn’t configure MCP connections anyway.
    4. DCorrect. Project scope shares the definition through git, and environment-variable expansion keeps each person’s token local to their machine.
  3. Question 3

    Which two statements about how Claude Code combines settings across scopes are correct? (Select 2.)

    1. APermission lists such as permissions.allow merge across settings files.
    2. BA deny rule in any scope blocks an action that another scope allows.
    3. CThe more specific file path in a rule always wins over a broader rule.
    4. DProject local settings override managed settings for that one repository.
    5. EUser settings override the committed project settings file.
    Show answer and reasoning
    1. ACorrect. List keys combine, so each level can add entries without removing another level’s.
    2. BCorrect. Rules are evaluated deny, then ask, then allow, across all scopes; the first match wins.
    3. CIncorrect. Specificity doesn’t change the order; deny is checked before allow regardless of how specific either is.
    4. DIncorrect. Managed settings sit above every other level; only a few security keys honour a stricter lower-level value.
    5. EIncorrect. The shared project file ranks above user settings; user settings are the lowest file level.
  4. Question 4

    An organisation’s security team wants to stop engineers installing plugins from arbitrary GitHub repositories, while still letting them use the company’s own internal plugin catalogue.

    What should the architect recommend?

    1. AAsk engineers in the onboarding guide to use only the internal catalogue.
    2. BSet strictKnownMarketplaces in managed settings to allow only the internal marketplace.
    3. CAdd the internal marketplace to extraKnownMarketplaces in every repository.
    4. DDisable all plugins and copy the skills into each repository by hand.
    Show answer and reasoning
    1. AIncorrect. A request in a guide is advisory; nothing stops an engineer adding another marketplace.
    2. BCorrect. This managed setting restricts which marketplaces users can add. Pairing it with extraKnownMarketplaces also registers the approved one automatically.
    3. CIncorrect. That registers the approved marketplace but doesn’t prevent anyone adding others.
    4. DIncorrect. It blocks the risk by throwing away the distribution mechanism, which leaves copies drifting across repos.

Sources

Drafted with AI assistance and checked against the sources above; expert review is in progress. Spotted an error? Tell us and it gets fixed, dated and listed on how this is written.