PrepGenAICerts
Domain 7: Developer Productivity & Operational EnablementLesson 27 of 28

7.1 Configuring Claude Code for Teams

7.1.1 From One Developer's Habits to a Team's Standard

Picture a single developer, working alone, setting up Claude Code exactly the way they like it: their own shorthand for commit messages, a couple of personal aliases, maybe a quick permission tweak so it stops asking before running tests. None of this causes a problem, because there's no one else to be inconsistent with. Now multiply that developer by forty, spread across a dozen repos, and ask the same question an architect has to ask: does everyone's Claude Code behave the same way when it touches the same codebase?

Left alone, the answer is no. One developer's Claude Code allows a shell tool another developer's blocks. One repo has rich project context; a near-identical repo two folders over has none, because whoever set it up never wrote it down anywhere shared. A new hire joins, clones the repo, and gets a completely different experience than the person sitting next to them who's been on the team for two years. That's not a Claude Code problem so much as an onboarding and configuration-management problem — and it's exactly the problem Task Statement 7.1 asks an architect to solve.

The fix isn't one setting or one file. It's recognizing that Claude Code actually gives you two different kinds of configuration, built for two different jobs, and a handful of distribution mechanisms for sharing capability team-wide. Get the two kinds straight and the rest of this lesson — the CLAUDE.md hierarchy, settings.json, shared MCP servers, team Skills — is really just working out where each piece of team knowledge belongs.

One developer's habits vs. a team standardLeft to individualsdifferent permissions per devproject context lives nowherenew hires get a different toolConfigured for the teamshared CLAUDE.md, in the reposhared settings.json guardrailsshared MCP servers and Skills

Individual configuration fragments a team; the rest of this lesson is about the mechanisms that turn one developer's setup into a shared, version-controlled team standard.

ℹ️

The one idea to hold onto

Claude Code gives you two distinct configuration surfaces — CLAUDE.md (memory/instructions) and settings.json (deterministic configuration) — plus shared MCP servers and team Skills for distributing capability. An architect's job is knowing which surface each piece of team knowledge belongs on.

7.1.2 The CLAUDE.md Hierarchy: Whose Notes Actually Reach Whom

CLAUDE.md is the persistent memory you write once and Claude reads at the start of every session — the standing instructions and context a new collaborator would want to read before touching your codebase. But CLAUDE.md files don't live in just one place. They form a hierarchy, and which level you write at decides who receives your instructions. This is the single most-tested distinction in the whole domain, because it's so easy to write something true and useful in the wrong place and have it quietly never reach the team.

At the top sits enterprise/system-level memory, managed centrally by an organization for org-wide policy. Below that is user-level memory (~/.claude), which is personal: it applies across every project a given developer touches, but it lives on their machine and is never checked into any repository. Below that is project-level memory (./CLAUDE.md), which lives inside the repo itself — committed, version-controlled, and pulled down by everyone who clones it. And below that, a subdirectory can hold its own CLAUDE.md, scoping instructions to just that part of the codebase. All of these are auto-loaded into context; none of them require the developer to remember to do anything.

LevelLocationWho receives it
Enterprise/systemManaged centrallyEveryone in the organization
User~/.claudeOnly that one developer, across all their projects
Project./CLAUDE.md (committed to the repo)The whole team, on every clone
SubdirectoryNested CLAUDE.mdWhoever works in that part of the codebase

Four levels of memory, four different audiences. The team-standardization decision almost always comes down to user (private) vs project (shared).

Here's the decision an architect actually has to make over and over: a piece of team knowledge exists — "we always run the integration suite before merging," "this service's retry logic follows pattern X" — and someone has written it down. If they wrote it in their personal ~/.claude/CLAUDE.md, it helps exactly one person. The team-standardization move is to take that knowledge and put it in the project-level CLAUDE.md, committed to the repo, so it reaches every developer the moment they clone. That's the whole idea: the project-level file is not just "a" place to put instructions, it's THE place for anything the whole team needs, precisely because it travels with the code itself rather than with any one person's machine.

7.1.2 — Key Concept

CLAUDE.md is hierarchical: enterprise/system, user (~/.claude, private, per-developer), project (./CLAUDE.md, committed to the repo, team-shared), and subdirectory (scoped locally). Standardizing a team means moving shared knowledge OUT of personal user-level files and INTO the committed project-level file.

7.1.3 settings.json: The Surface That Doesn't Bend

CLAUDE.md answers "what should Claude know and remember?" A completely different question is "what is Claude actually allowed to do, no matter what it decides?" That second question belongs to a different file entirely: settings.json. And confusing the two is the single most common misconfiguration this domain tests.

settings.json is the deterministic control surface for a team's Claude Code deployment. It holds the tool allow/deny lists that decide which commands Claude may run without asking, the hooks that fire automatically at fixed lifecycle points, environment variables, model selection, and the connected MCP servers a session can reach. None of that is advisory. Where CLAUDE.md is delivered to Claude as ordinary context — something it reads and tries to follow, with no guarantee of strict compliance — settings.json is enforced by the harness itself, independent of anything the model decides. If a rule needs to hold every single time, settings.json (or a hook wired through it) is where it has to live.

jsonA representative settings.json. Permissions, hooks, MCP servers, and model selection all live here — enforced configuration, not advisory instructions.
{
  "permissions": {
    "allow": ["Bash(npm run test:*)", "Read", "Grep"],
    "deny": ["Bash(rm -rf *)", "Bash(git push --force*)"]
  },
  "hooks": {
    "PreToolUse": [{ "matcher": "Bash", "command": "./scripts/audit-log.sh" }]
  },
  "mcpServers": {
    "internal-crm": { "command": "npx", "args": ["@acme/crm-mcp-server"] }
  },
  "model": "claude-opus-4-8"
}

So when a permission rule shows up written in prose inside CLAUDE.md — "never delete files without asking" — recognize it for what it is: a hint the model will usually follow, not a guarantee. The moment that instruction actually matters (a production database, a force-push, a refund above some threshold), it needs to be an allow/deny rule or a hook in settings.json, enforced regardless of what the model concludes. This is the same model-proposes/code-disposes principle that runs through the whole certification, just applied to team-wide configuration instead of a single agent's tool call.

⚠️

7.1.3 — Exam Trap

Watch for scenarios describing permission or tool allow/deny rules written into CLAUDE.md. That's the misconfiguration: CLAUDE.md is instructions/memory, not an enforcement mechanism. The correct answer moves those rules into settings.json, where the harness enforces them deterministically.

7.1.4 Spend Posture Controls: Governing Organizational Spend Through settings.json

settings.json doesn't only govern which tools an agent may call -- it's also where an architect enforces SPEND POSTURE: the deliberate set of controls that decide how much a team can spend, on which models, and how much reasoning depth they default to. Left unconfigured, spend posture defaults to "whatever any individual developer's session happens to invoke," which is exactly the same per-developer drift problem 7.1.2 already named for memory and 7.1.4 (below) names for integrations -- just applied to cost instead of context or capability.

LeverWhat it controlsExample
Model defaultsWhat model a session uses unless explicitly overriddenA team defaults to a mid-tier model for routine work rather than the most capable (and most expensive) tier by default
Model allowlists / restrictionsWhich models a team is permitted to invoke AT ALLBlocking a cost-sensitive team from ever invoking the most expensive tier, regardless of what any individual session requests
Effort / reasoning-depth guidanceDefault extended-thinking usageSteering routine tasks away from maximal reasoning depth by default, reserving it for sessions explicitly flagged as needing it
Spend / rate / per-user capsHard ceilings on total spend, requests-per-minute, or per-seat consumptionA monthly spend ceiling per team, or a per-user rate limit that stops one runaway script from consuming a shared budget

Four spend-posture levers, all enforced through settings.json -- the same control surface as tool permissions and hooks.

jsonIllustrative settings.json extending the permissions example from 7.1.3 -- an allowlist blocking the most expensive tier, a default reasoning-effort level, and hard spend/rate ceilings, all enforced by the harness rather than left as a prompt suggestion.
{
  "model": "claude-sonnet-4-6",
  "permissions": {
    "allow": ["Bash(npm run test:*)", "Read", "Grep"],
    "deny": ["Bash(rm -rf *)"]
  },
  "spendPosture": {
    "allowedModels": ["claude-sonnet-4-6", "claude-haiku-4-6"],
    "defaultReasoningEffort": "standard",
    "monthlySpendCapUsd": 8000,
    "perUserRateLimitPerMinute": 20
  }
}

This is the same enforced-vs-advisory distinction 7.1.3 already established for permissions, now applied to cost. A sentence in CLAUDE.md -- "please use the cheaper model for routine tasks" -- is advisory context Claude tries to follow; it offers no guarantee, and a developer, or the model reasoning about an unusual request, can simply not follow it. A model allowlist or a hard spend cap enforced in settings.json holds regardless of what any session decides, the same way a PreToolUse hook holds regardless of what the model "decided" about a destructive action. Spend governance isn't a new category of architectural concern -- it's the identical deterministic-vs-probabilistic split from 7.1.3 showing up on a different axis.

7.1.4 — Key Concept

Spend posture has four levers -- model defaults, model allowlists/restrictions, effort/reasoning-depth guidance, and spend/rate/per-user caps -- all enforced through settings.json, not written as prose guidance in CLAUDE.md. A single global spend cap is insufficient on its own; per-team or per-user caps are what actually distribute a budget fairly and stop one runaway consumer from exhausting it.

⚠️

7.1.4 — Exam Trap

Writing a spend guideline into CLAUDE.md instead of settings.json ("please default to the cheaper model") is the same misconfiguration 7.1.3 names for permissions, just applied to cost -- advisory, unenforced, and inconsistently honored across developers. The correct fix is always a model default, allowlist, or cap rule in settings.json.

7.1.5 Shared MCP Servers: Build Once, Reuse Across the Team

Now suppose the team knowledge in question isn't an instruction at all, but a capability — "Claude Code should be able to look up customer records in our internal CRM." How should forty developers get that ability? The naive answer is: each developer configures the integration themselves, in their own settings. It works, technically. It's also exactly the anti-pattern the exam wants you to recognize.

Configuring the same integration forty separate times means forty separate places that can drift out of sync. When the CRM API changes its auth flow, or credentials rotate, or an endpoint moves, someone has to track down and fix every individual developer's configuration — rather than one shared configuration everyone already points at. The architect's answer is a shared MCP server: configure the integration once, register it centrally (through settings.json, as you saw above), and every developer's Claude Code reaches the same capability automatically. This is build-once, reuse-across-the-team — the identical philosophy behind shared tooling in integration design, just applied to how a team, rather than a single agent, gets its capabilities.

It's worth noticing why this generalizes so cleanly. An MCP server is, structurally, just a description of tools plus a connection to run them — which means "configure it once, everyone gets it" isn't a special MCP feature, it's a natural consequence of MCP servers being config, not code baked into any one developer's prompts or scripts. Centralize the config, and you've centralized the capability.

⚠️

7.1.5 — Exam Trap

Per-developer configuration of a common integration ("each developer sets up their own connection to the internal API") is the distractor answer whenever a question describes a team needing shared tooling. The correct answer is always a shared MCP server configured once and reused by everyone — not individually re-wired credentials, and never a shared production password handed around as a workaround.

7.1.6 Team-Wide Skills: Packaging Know-How So It Isn't Reinvented

There's a third kind of team knowledge that isn't an instruction (CLAUDE.md) or a capability (an MCP server) — it's a procedure. "How our team debugs a stuck payment job." "How our team formats a release PR." "The five checks our team always runs before touching the pricing service." That kind of know-how usually lives in one senior engineer's head, or scattered across old Slack threads, and every new developer has to rediscover it the hard way, usually right after breaking something.

Skills are how Claude Code packages that kind of reusable procedure into something Claude can actually draw on. And just like CLAUDE.md and MCP servers, a Skill only becomes a team asset once it's distributed at the team level rather than kept on one developer's machine: via repos, plugins, or enterprise managed settings. Written that way, "how we debug a stuck payment job" stops being tribal knowledge locked in one person's memory and becomes something every developer's Claude Code can invoke, the same way, every time.

Notice the pattern repeating across this entire lesson: CLAUDE.md hierarchy, settings.json, MCP servers, Skills — four different mechanisms, but every single one follows the same underlying discipline. Centralize the configuration or the know-how at the team level, put it under version control or managed distribution, and stop relying on any individual developer's personal setup to carry something the whole team needs. That's the throughline an architect brings to Task Statement 7.1: not memorizing four separate features, but recognizing the one principle they all express.

Team needWrong instinctRight mechanism
Shared conventions and contextPersonal ~/.claude/CLAUDE.mdCommitted project-level CLAUDE.md
Enforced permission/guardrail rulesProse instruction in CLAUDE.mdAllow/deny lists and hooks in settings.json
A common internal integrationEach developer wires it up individuallyOne shared MCP server, configured once
Reusable debugging/workflow know-howTribal knowledge in one person's headA Skill distributed via repo, plugin, or managed settings

Four different team needs, one recurring failure mode (individual, private setup) and one recurring fix (centralize and distribute at the team level).

ℹ️

7.1.6 — Key Concept

Skills package reusable procedures and know-how. Distributed via repos, plugins, or enterprise managed settings, they turn one developer's expertise into a team-wide asset — following the same centralize-and-distribute pattern as CLAUDE.md and shared MCP servers.

7.1.7 The Champion-Per-Department Rollout Pattern

Everything else in this lesson -- CLAUDE.md, settings.json, shared MCP servers, spend posture, team Skills -- assumes the team is actually going to use Claude Code once it's configured correctly. That's not automatic. An architect who gets every configuration surface right can still watch adoption fail, because rolling a new tool out to an organization is its own design problem, with its own well-understood failure modes, separate from getting the tool itself configured correctly.

The pattern that avoids the most common failure modes is: designate ONE CHAMPION per department or team, who receives deep onboarding first -- real hands-on time, real use cases from their own work, enough depth to become genuinely fluent rather than just aware. That champion then runs PEER-TO-PEER adoption sessions for their own team, in small batches, rather than the organization defaulting to a single company-wide training blast that gives everyone the same shallow hour and calls it done. A company-wide session is usually run by someone from outside the team, using generic examples, to an audience with wildly different daily workflows -- a backend engineer and a frontend engineer get the identical generic demo, neither sees their own real workflow addressed, and most of the room mentally checks out within the first fifteen minutes. A champion who already knows the team's actual codebase and actual daily friction can make the same hour concretely relevant to the six or eight people in the room.

Consider a 60-person engineering org split into three teams: Platform (22 engineers), Product (25 engineers), and Data (13 engineers). Rather than one all-hands training session, the rollout looks like this: in week 1, one champion per team (3 people total) gets a half-day, hands-on onboarding session run by the architect directly, working through that champion's own team's real recent pull requests and real recurring pain points, not generic examples. Across weeks 2 through 4, each champion runs three 90-minute peer sessions with their own team, in batches of 7-8 people -- Platform runs three batches of about 7, Product runs three batches of about 8, Data runs two batches of 6-7 -- small enough that everyone in the room gets hands-on time with their own real code, not a lecture. In week 5, champions reconvene with the architect to compare what worked, what stalled, and which agentic or Skill-based workflows their teams actually adopted versus which landed flat -- feeding directly into what CLAUDE.md conventions and team Skills get written up next. By week 5, all 60 engineers have had genuine hands-on exposure to real work in their own codebase, delivered by someone who already had credibility on that team, rather than sixty people who sat through one generic 45-minute demo in week 1 and never opened Claude Code again.

Failure modeWhat it looks likeHow the champion pattern avoids it
Lumpy adoptionA few enthusiastic individuals go deep on their own initiative; usage data six months later shows three power users generating the overwhelming majority of activity while most of the org never re-engages past the kickoffEvery team gets a dedicated champion and small-batch peer sessions, so engagement isn't left to individual initiative alone
Stalling at basic chatTeams use Claude Code as a slightly-smarter search box ("explain this function") and never progress to agentic, Skill-based workflows that deliver the real productivity gainThe champion's deep onboarding covers agentic and Skill-based workflows specifically, and peer sessions use the team's own real tasks, which surfaces the deeper leverage rather than stopping at surface-level Q&A

The two failure modes a single company-wide training blast tends to produce simultaneously -- and how the champion pattern's structure heads off each.

7.1.7 — Key Concept

Designate one champion per department who gets deep onboarding first, then runs small-batch peer-to-peer sessions for their own team, rather than a single company-wide training blast. This avoids two named failure modes: LUMPY ADOPTION (a few enthusiasts go deep, most of the org never engages) and STALLING AT BASIC CHAT (usage never progresses past a smarter search box to agentic/Skill-based workflows).

⚠️

7.1.7 — Exam Trap

A scenario describing a single all-hands training session as the entire adoption plan, with no champion or peer-led follow-through mentioned, is describing the setup for both lumpy adoption and stalling at basic chat at once. The correct fix names the champion-per-department pattern specifically -- not "more training" or "better documentation" in the abstract.

7.1.8 Put It Together: Audit a Team's Claude Code Setup

You now have the full map: CLAUDE.md's hierarchy and its user-vs-project scoping, settings.json as the enforced control surface (including spend posture), shared MCP servers for capability, team Skills for procedure, and the champion-per-department pattern for making sure a well-configured setup actually gets adopted rather than sitting unused. The fastest way to make this stick is to actually audit a setup and sort what you find into the right bucket -- because on the exam, that's exactly the move: read a scenario, identify which mechanism is being misused or missing, and pick the fix.

7.1.8 — Build Exercise (30 min)

Audit an existing Claude Code setup (yours, or a sample repo). (1) List everything currently sitting in any CLAUDE.md file and mark each line: is it truly advisory context, or is it secretly a hard rule that should be a settings.json permission/hook instead? (2) Check whether any shared team convention is only present in someone's ~/.claude/CLAUDE.md — if so, move it into the committed project-level CLAUDE.md. (3) List every external integration Claude Code touches and confirm each is a shared MCP server rather than a per-developer configuration. (4) Identify one piece of "how we do this" tribal knowledge on your team and sketch it as a distributable Skill.

With team-wide configuration settled, the next question is what a team actually DOES with a well-configured Claude Code — how the interactive gather-context-plan-act-verify loop scales into automated pipelines, and what happens when something in that pipeline breaks. That's Lesson 7.2, and it starts from the same discipline you've just learned to protect here: guardrails first, leverage second.

ℹ️

Where this shows up on the exam

7.1 questions are almost always "where does this configuration belong?" or "what's wrong with this rollout plan?" Anchor on: CLAUDE.md is memory (user-level private, project-level shared); settings.json is enforced (permissions, hooks, MCP, and spend posture -- model defaults/allowlists/reasoning depth/caps); integrations are shared MCP servers, not per-developer setups; procedures are Skills, distributed team-wide; and adoption itself follows the champion-per-department pattern, not a single company-wide training blast.

Key Takeaways

  • Claude Code splits team configuration into two surfaces: CLAUDE.md is memory/instructions (advisory context); settings.json is deterministic configuration (permissions, hooks, environment, model, MCP servers) enforced by the harness.
  • CLAUDE.md is hierarchical -- enterprise/system, user (~/.claude, PRIVATE, per-developer), project (./CLAUDE.md, committed to the repo, team-SHARED), and subdirectory -- and standardizing a team means moving shared knowledge from user-level into the committed project-level file.
  • Putting permission or tool allow/deny rules in CLAUDE.md instead of settings.json is the domain's signature misconfiguration; CLAUDE.md offers no enforcement guarantee.
  • Shared MCP servers follow build-once, reuse-across-the-team: configure a common integration ONCE, centrally, rather than having every developer wire up the same integration individually (which fragments maintenance and multiplies the blast radius of credential rotation).
  • Team-wide Skills package reusable procedures and know-how, distributed via repos, plugins, or enterprise managed settings, so expertise doesn't stay siloed in one developer's head.
  • Every mechanism in this lesson follows the same discipline: centralize configuration and know-how at the team level, under version control or managed distribution, rather than relying on individual developer setups.
  • The exam's default trap pattern is "per-developer / personal / prose" (wrong) vs. "shared / committed / enforced" (right) -- applied consistently across CLAUDE.md, settings.json, MCP servers, and Skills.
  • Spend posture is governed by four levers -- model defaults, model allowlists/restrictions, effort/reasoning-depth guidance, and spend/rate/per-user caps -- all enforced through settings.json, the same surface as permissions, not as advisory prose in CLAUDE.md.
  • The champion-per-department rollout pattern (deep onboarding for one champion per team, then small-batch peer-led sessions) avoids two named failure modes: lumpy adoption and stalling at basic chat -- a single company-wide training blast tends to produce both at once.

Check Your Understanding

Test what you learned in this lesson.

Q1.A team's Claude Code deployment blocks force-pushes to main for some developers but not others, because the rule was written as a sentence inside each developer's personal CLAUDE.md ("never force-push to main"). What is the architecturally correct fix?

Q2.A new engineer clones the team's repo and finds Claude Code has no awareness of the team's architecture conventions, even though a senior engineer insists they wrote all of it down. Where did the conventions most likely end up?

Q3.Five developers on a team each individually configure their own Claude Code connection to the same internal inventory API, using their own credentials and their own connection settings. Six months later, the API's auth flow changes and things start failing unpredictably. What was the architectural mistake?

Q4.A senior engineer has a reliable, repeatable procedure for debugging a specific class of stuck background jobs, but only they know it -- every other developer rediscovers it from scratch when it happens on their watch. What is the best way to make this team-wide?

Q5.A CLAUDE.md file at the project level contains the line: "Please default to the cheaper model for routine tasks to keep costs down." Six months later, spend is wildly inconsistent across developers, and some sessions are still defaulting to the most expensive model tier. What is the architecturally correct fix?

Q6.An organization rolls out Claude Code with a single 45-minute, company-wide training session covering generic examples. Six months later, usage data shows three enthusiastic engineers generating almost all activity, and everyone else who does use it treats it as a smarter search box, never using agentic or Skill-based workflows. What rollout pattern would have most directly prevented both outcomes?

Practice This Lesson

PrepGenAICerts.com is an independent third-party exam-prep platform for the Claude Certified Architect (CCA-F) certification. We are not affiliated with, endorsed by, or acting on behalf of Anthropic PBC.

Note: New premium upgrades are temporarily paused while we resolve an issue with our payment provider. Existing premium members retain full access.