Domain 7 is the smallest slice of the CCAR-P blueprint (7%), but it is where architecture meets operations. The exam audience is the enterprise architect who has to make Claude Code work for fifty engineers, not one — and that shifts the questions from "what can Claude do" to "what will Claude reliably do the same way on every machine, in every pipeline, for every developer."
The single idea that unlocks most of this domain is the distinction between model-discretion mechanisms and deterministic enforcement. Guidance in CLAUDE.md, rules files, and Skills shapes what the model tends to do; hooks and permission settings decide what the harness will allow regardless of the model's judgment. Confusing the two is the most common architect-level mistake — you cannot enforce a compliance control with a paragraph in CLAUDE.md.
This guide walks the operational surface an architect owns: shared and layered configuration, custom slash commands and Skills as reusable team workflows, headless automation for CI, MCP server distribution with secret hygiene, reproducible onboarding, and how you actually measure whether any of it moved the needle.
Layered configuration and the discretion-vs-enforcement line
Claude Code resolves configuration in layers. User settings (~/.claude/settings.json) apply to one engineer everywhere; project settings (.claude/settings.json, checked into the repo) apply to everyone on that repo; local settings (.claude/settings.local.json, gitignored) let an individual override without polluting the shared config. Enterprise-managed policy settings sit above all of them and cannot be overridden. As an architect you push team defaults into the checked-in project layer and reserve the local layer for personal preference.
The harder design decision is which mechanism to use for a given rule. Some mechanisms advise the model; others are enforced by the harness before the model's output ever runs. Getting this mapping right is the core competency the domain tests.
| Mechanism | Nature | Use it for |
|---|---|---|
| CLAUDE.md (project memory) | Model discretion | Conventions, architecture notes, tone — advice the model usually follows |
| .claude/rules/*.md with globs | Model discretion | Path-scoped guidance loaded when matching files are in play |
| Skills (.claude/skills/) | Model discretion | Reusable procedures the model invokes when relevant |
| permissions (allow/ask/deny) | Deterministic | Blocking or gating tools, commands, and paths regardless of intent |
| hooks (PreToolUse, etc.) | Deterministic | Programmatic checks the harness runs and can block on |
Custom slash commands and Skills as team workflows
Two complementary primitives turn tribal knowledge into reusable tooling. Custom slash commands are Markdown files in .claude/commands/ (project) or ~/.claude/commands/ (personal); the filename becomes the command, and the body is a prompt template that can take arguments. Skills are richer, model-invoked capabilities under .claude/skills/<name>/SKILL.md — the model reads a Skill's description and decides on its own when to pull it in, so Skills carry a whole procedure plus optional scripts and references.
- Reach for a slash command when a human wants an explicit, on-demand entry point — /deploy-check, /open-pr, /triage.
- Reach for a Skill when you want Claude to recognize a situation and apply a standard procedure without being told each time.
- Both live in the repo, so distribution is just git — clone the repo and the whole team has them.
- Version them like code: review changes in PRs, because a bad shared command misfires for everyone.
Headless and CI automation
Non-interactive mode (-p / --print) is how Claude Code runs inside pipelines. In print mode you get a single answer and exit; combine it with structured output and hard limits so a CI step is deterministic, parseable, and cost-bounded. The flags below are the ones an architect wires into a pipeline.
| Flag | Purpose |
|---|---|
| -p / --print | Run non-interactively and return one result (headless mode) |
| --output-format json | Emit a single structured result object instead of text |
| --json-schema <schema> | Validate the structured output against a JSON Schema |
| --max-budget-usd <amount> | Cap total API spend for the run (print mode only) |
| --permission-mode <mode> | Set gating: plan, acceptEdits, dontAsk, bypassPermissions, auto, manual |
| --allowedTools / --disallowedTools | Constrain which tools the run may use |
# CI step: classify a PR diff into a bounded, schema-checked JSON result
claude -p "Classify the risk of this diff" \
--output-format json \
--json-schema '{"type":"object","properties":{"risk":{"type":"string"}},"required":["risk"]}' \
--max-budget-usd 0.50 \
--permission-mode plan \
--allowedTools "Read Grep"Distributing MCP servers to a team
MCP servers extend Claude Code with tools — a database client, an internal ticketing API, a docs search. To distribute one across a team, define it at project scope in a checked-in .mcp.json at the repo root. Everyone who clones the repo inherits the same server definitions, so tool availability is reproducible rather than something each engineer configures by hand. User-scoped MCP config stays personal; local scope is for one-off experiments.
Secrets are the sharp edge. The .mcp.json you commit must never contain credentials. Reference environment variables with ${VAR} expansion and let each developer or CI runner supply the actual secret out of band — a secrets manager, CI variables, or a gitignored .env. The committed file describes how to connect; it never carries the key.
{
"mcpServers": {
"internal-tickets": {
"command": "npx",
"args": ["-y", "@acme/tickets-mcp"],
"env": { "TICKETS_API_TOKEN": "${TICKETS_API_TOKEN}" }
}
}
}Onboarding and reproducible dev environments
The payoff of committing CLAUDE.md, .claude/commands/, .claude/skills/, .claude/settings.json, and .mcp.json to the repo is that a new hire's first git clone brings the entire operational context with it — conventions, team commands, standard procedures, permission guardrails, and tool wiring. That is the golden path: the sanctioned, low-friction route that is easier to take than to reinvent.
- Ship starter templates (repo scaffolds) that already contain the .claude/ config so new services inherit the standard from day one.
- Keep secrets out of every committed file; document the required env vars in CLAUDE.md so onboarding is self-serve.
- Treat the shared config as reviewed code — changes go through PRs, not ad hoc edits to one person's machine.
- Use enterprise-managed policy settings for controls that must not be locally overridable across the org.
Measuring and enabling developer productivity
Enablement without measurement is faith. An architect instruments adoption and outcomes, then feeds the data back into the shared config. Structured JSON output from headless runs, session cost data, and standard delivery signals (cycle time, review turnaround, change-failure rate) let you see whether the golden path is actually being taken and whether it helps.
- Adoption: are the shared commands, Skills, and MCP servers actually invoked, or do engineers route around them?
- Cost: --max-budget-usd and JSON output make per-run spend observable so automation stays within budget.
- Flow: measure delivery outcomes (lead time, defect escape rate), not vanity metrics like lines generated.
- Feedback loop: when a control is repeatedly overridden, that is a signal the guidance is wrong — fix the config, not the people.
Key takeaways
- 01Model-discretion mechanisms (CLAUDE.md, rules, Skills) shape behavior; deterministic mechanisms (hooks, permissions) enforce it — pick by whether the control must hold every time.
- 02Configuration is layered: enterprise-managed > project (checked-in) > local (gitignored) > user; push team defaults into the checked-in project layer.
- 03Custom slash commands are explicit human-invoked prompts; Skills are model-invoked procedures — both distribute via git in the repo.
- 04Headless CI uses -p/--print with --output-format json, --json-schema, --max-budget-usd, and --permission-mode for deterministic, bounded runs.
- 05Distribute MCP servers via a checked-in project-scope .mcp.json, and keep secrets out of it using ${VAR} environment expansion.
- 06The golden path is reproducible onboarding: cloning the repo delivers conventions, commands, Skills, guardrails, and tool wiring at once.
- 07Never bypass permissions in a networked or write-capable pipeline; reserve permission bypass for isolated no-internet sandboxes.
- 08Measure delivery outcomes and adoption, not the volume of generated code; feed the data back into shared config.
Common mistakes
Trying to enforce a hard rule by writing it in CLAUDE.md.
CLAUDE.md is advisory. For controls that must always hold, use a hook or a deny permission — deterministic mechanisms the harness enforces.
Committing MCP or environment secrets directly into .mcp.json.
Reference secrets with ${VAR} expansion and supply the real value from a secrets manager or CI variable at runtime; never let a credential enter git history.
Running CI with --permission-mode bypassPermissions for convenience.
In pipelines with network or write access, use plan mode plus an explicit --allowedTools allowlist; reserve permission bypass for isolated sandboxes.
Storing team commands and Skills only in ~/.claude on individual machines.
Put shared workflows in the repo's project-scoped .claude/commands/ and .claude/skills/ so a git clone reproduces them for everyone.
Judging Claude Code adoption by the amount of code it generates.
Instrument delivery outcomes — cycle time, change-failure rate, review turnaround — and adoption of the golden path, then iterate on the config.
Frequently asked
When should I use a Skill versus a custom slash command?
Use a slash command when a person wants an explicit, on-demand entry point they trigger by name. Use a Skill when you want Claude to recognize a situation and apply a standard procedure on its own. Skills are model-invoked and can bundle scripts and references; slash commands are human-invoked prompt templates.
How do I make a control non-negotiable across the whole team?
Deterministic enforcement. Use hooks (for example a PreToolUse hook that blocks a dangerous command) or deny permissions, and for org-wide immutability use enterprise-managed policy settings that local config cannot override. Guidance files cannot guarantee compliance.
What is the minimal flag set for a Claude Code step in CI?
Start with -p/--print for non-interactive output, --output-format json (optionally with --json-schema) for a parseable result, --max-budget-usd to cap spend, and --permission-mode plus --allowedTools to constrain what the run can do.
How do I distribute an MCP server so the whole team gets it automatically?
Define it at project scope in a checked-in .mcp.json at the repo root. Cloning the repo gives everyone the same server. Keep credentials out of the file by using ${VAR} references resolved from each user's or runner's environment.
Independent, unofficial study material. Not affiliated with, endorsed by, or authorized by Anthropic. Every example is original and written to teach the public exam objectives — no real exam questions are reproduced. Technical details reflect Claude, the Anthropic API, Claude Code, and MCP as of July 25, 2026; always confirm specifics against current official documentation.
Test yourself
Turn what you just read into answers you can check.