Claude Certified Architect — Foundations Cheat Sheet (CCAR-F)
CCAR-F cheat sheet: exam facts, domain weights, decision rules, keyword-to-answer tables and high-yield facts for all 5 domains, on one page.
This is a one-page review for the Claude Certified Architect – Foundations (CCAR-F) exam. Each line pairs a signal you will see in a question with the direction the answer usually takes, distilled from exam guide v1.0. Read it in full during the last 10–15 days of prep, then skim only the tables and decision principles in the last 15 minutes before you sit down.
⚠ marks an answer that follows exam guide v1.0 where current Claude docs may have moved on. On the exam, go with the guide.
Exam facts at a glance
| Item | Detail |
|---|---|
| Exam code | CCAR-F |
| Items | 60, multiple-choice and multiple-response; each item states how many to select |
| Time | 120 minutes, so about 2 minutes per item |
| Structure | 4 scenarios drawn at random from a bank of 6, about 15 items and 30 minutes each |
| Passing score | Scaled 720 on a 100–1,000 scale; criterion-referenced, not graded on a curve |
| Score report | Pass/fail + scaled score; per-domain percentages are informational only |
| Fee | $125 USD per attempt |
| Delivery | Proctored by Pearson VUE, online or at a test center |
| Rescheduling | Up to 24 hours before the appointment; later changes forfeit the fee |
| Retakes | Wait 14 / 30 / 90 days after the 1st / 2nd / 3rd fail; max 4 attempts per rolling 12 months |
| Validity | 12 months; on-time renewal is a free, non-proctored assessment |
Read the ask before the options: note how many answers it wants ("Choose TWO") and whether it's phrased negatively ("Which will NOT…").
Domain weights and the 6 scenarios
| Domain | Weight | ≈ Items (approximate) |
|---|---|---|
| D1 · Agentic Architecture & Orchestration | 27% | 16 |
| D3 · Claude Code Configuration & Workflows | 20% | 12 |
| D4 · Prompt Engineering & Structured Output | 20% | 12 |
| D2 · Tool Design & MCP Integration | 18% | 11 |
| D5 · Context Management & Reliability | 15% | 9 |
Item counts are 60 × weight, rounded. The guide gives weights only. Real forms vary.
Spot which scenario you're in from its first item and you can predict the topics:
| Scenario | Topics it pulls in |
|---|---|
| 1 · Customer Support Agent | Verification gate before refunds, refund-limit hook, escalation triggers, case facts block, complete handoff |
| 2 · Code Generation with Claude Code | CLAUDE.md hierarchy, commands and skills, path rules, plan vs direct, resume/fork |
| 3 · Multi-Agent Research | Hub-and-spoke, over-narrow decomposition, passing provenance, error propagation, conflicting sources |
| 4 · Developer Productivity | Grep vs Glob, Edit fallback, MCP scope, codebase exploration, scratchpad |
| 5 · Claude Code for CI/CD | -p, --output-format json + --json-schema, false-positive criteria, independent reviewer, batch for overnight jobs |
| 6 · Structured Data Extraction | tool_use + JSON schema, nullable fields, validation-retry, batch + custom_id, confidence calibration |
Decision principles: signal → answer direction
Most items come down to one of these:
- Money, security, compliance, "100%" → enforce in code (hook, prerequisite gate, schema). Prompts and few-shot get you "usually right", never guaranteed.
- Fix the root cause the evidence shows → it is often upstream (coordinator, input). Don't change a component that works.
- Proportionate first step → cheapest fix first: tool description → explicit criteria + few-shot → routing layer → classifier.
- Least privilege → 4–5 tools per agent, by role. Add a narrow tool for a frequent cross-role need.
- Structured beats generic → errors carry a category and
isRetryable; handoffs have fixed fields; output follows a JSON schema. - Isolate context → subagents inherit nothing, so pass what they need. Reviewers are separate instances.
- Don't trust self-reported signals → self-rated confidence, sentiment and "I'm done" text are unreliable. Use
stop_reasonand explicit criteria. - A bigger context window doesn't fix attention dilution → split into passes, put key facts first, keep a scratchpad.
- Never hide failures, never kill the whole workflow → recover locally, then propagate with partial results. A valid empty result is not an error.
- Preserve information, don't let the model invent it → nullable fields, case facts block, claim → source, keep both values when sources conflict.
- Ask instead of guessing → several matching records: ask for another identifier. Policy is silent: escalate.
- Declarative and automatic beats manual → path rules over a giant CLAUDE.md; project config over reminding each person.
- Only documented features →
-p,.mcp.json,.claude/rules/. NotCLAUDE_HEADLESS,--batchor.claude/config.json.
Question keywords → answer type
| Keyword in the stem | Answer usually is |
|---|---|
| "first step", "most effective first" | The cheapest option that still fixes the root cause |
| "guarantee", "must always", "100%", compliance | Code enforcement: hook, gate, schema |
| "maintainable", "consistent across the team" | Declarative, project-scoped: .claude/rules/, .mcp.json, project skills |
| "long-term", "most robust" | A heavier option (split tools, a pipeline) can win here |
| "in a single response", "simultaneously", lower latency | Several Task calls in parallel in one response |
| "overnight", "weekly", "not time-sensitive", lower cost | Message Batches API |
| "blocking", "pre-merge", "developer waits" | Synchronous API, never batch |
| "a new team member doesn't get the rule" | The rule lives in ~/.claude/; move it to the project |
| "Choose TWO", "Which will NOT…" | Count the answers; for NOT, find the option that breaks a principle |
High-yield facts by domain
D1 · Agentic Architecture & Orchestration (27%)
flowchart LR
A[Call Messages API] --> B{stop_reason}
B -- tool_use --> C[Run tool]
C --> D[Append tool_result to history]
D --> A
B -- end_turn --> E[Done]
B -- max_tokens --> F[Truncated, not finished]
- Loop control → branch on
stop_reason, not oncontent[0].typeor whether text exists. An iteration cap is only a safety net. - Claude "can't see" the tool result → the
tool_resultwas never appended to the conversation. - Report misses a whole topic category → the coordinator decomposed too narrowly. Fix decomposition, not the subagent.
- Subagents talk to each other → wrong. Hub-and-spoke: everything goes through the coordinator.
- Coordinator can't spawn subagents →
allowedToolslacks"Task"⚠ (newer docs call it the Agent tool). - Synthesis loses citations → metadata was stripped at the coordinator boundary. Pass structured findings with source and date.
- Refunds sometimes skip verification → prerequisite gate:
process_refundruns only once a verified customer ID exists. - Human handoff → self-contained: customer ID, summary, root cause, amount, recommendation. The human has no transcript.
| Hook | Use it to | Can it block? |
|---|---|---|
PreToolUse | Deny or modify a call before it runs (e.g. refund > $500 → escalate) | Yes |
PostToolUse | Normalise results before the model sees them (e.g. dates to ISO 8601) | No; the side effect already happened |
| Session choice | When |
|---|---|
--resume <name> | Same line of work, files unchanged |
fork_session | Compare two approaches from one baseline |
| New session + structured summary | Files changed a lot since; old context is stale |
- 3 of 50 files changed → tell the resumed session which files changed and re-analyse only those.
- Fixed pipeline vs dynamic → known steps, structured input: prompt chaining. Open-ended investigation: dynamic decomposition.
D2 · Tool Design & MCP Integration (18%)
- Model confuses two tools → expand descriptions first: purpose, input format, examples, edge cases, "use X instead of Y when…".
- Good descriptions, still misrouted → look for keyword rules in the system prompt that override them.
- One tool does too much, or names overlap → split into narrow tools with clear names.
- 18+ tools on one agent → cut to 4–5 by role.
| MCP primitive | What it is for | Exam signal |
|---|---|---|
| Tools | Actions the model invokes | "process a refund", "create a ticket" |
| Resources | Content the client reads in | Agent keeps calling list_tables → expose the catalog as a resource |
| Prompts | Reusable templates the user picks | Rarely the answer; know it exists |
| Error category | Agent response |
|---|---|
| Transient (timeout, unavailable) | Retry with backoff |
| Validation (bad input) | Fix the input, then retry |
| Business (policy violation) | Not retryable; alternative flow or escalate, explain to the customer |
| Permission | Change credentials or escalate |
- Structured error →
isError: true+errorCategory+isRetryable+ a human-readable description. Generic "Operation failed" is always wrong. - No results →
isError: falsewith 0 results is a valid answer, don't retry. An unreachable source is an error, never an empty list.
tool_choice | Behaviour |
|---|---|
auto | May call a tool or answer in text |
any | Must call some tool |
{"type": "tool", "name": "…"} | Must call that exact tool (use for a mandatory first step, then go back to auto) |
| MCP config | Scope |
|---|---|
.mcp.json | Project: committed, team-shared, secrets via ${ENV_VAR} |
~/.claude.json | User: personal, experimental; both load together |
- Jira, GitHub, other standard integrations → community MCP server first; build custom only for unique needs.
- Grep vs Glob → Grep searches file contents (callers, imports, error strings); Glob matches paths and names.
Editfails on a non-unique anchor → fall back toRead+Write⚠.
D3 · Claude Code Configuration & Workflows (20%)
| CLAUDE.md level | Location | Shared? |
|---|---|---|
| User | ~/.claude/CLAUDE.md | No, personal only |
| Project | CLAUDE.md or .claude/CLAUDE.md | Yes, committed |
| Directory | CLAUDE.md in a subfolder | Yes, applies to that subtree |
Levels are combined, not overridden. Check what loaded with /memory ⚠ (newer versions also show it in /context).
| Need | Mechanism |
|---|---|
| Standard that always applies | CLAUDE.md |
Convention for one file type across the repo (**/*.test.tsx) | .claude/rules/*.md with a paths: glob in frontmatter |
| Procedure invoked on demand | Skill: .claude/skills/<name>/SKILL.md (or command in .claude/commands/) |
| CLAUDE.md too big | Split with @path/to/file.md imports and topic rules |
- Skill frontmatter →
context: forkruns it in an isolated subagent (good for verbose output),allowed-toolsrestricts tools,argument-hintprompts for parameters. - Plan mode vs direct → decide by ambiguity, not size: architecture, many files, several valid approaches → plan; clear bug with a stack trace → direct.
- Refinement → model misreads the requirement: 2–3 input/output examples. Tricky edge cases: write tests first. Unfamiliar domain: interview pattern.
- Several fixes → interdependent: one message. Independent: one at a time.
| CI/CD need | Flag |
|---|---|
| Job hangs waiting for input | claude -p / --print |
| Output parsed by another program | --output-format json + --json-schema |
| Add rules, keep defaults | --append-system-prompt (vs --system-prompt, which replaces) |
- Reviews repeat old comments → put prior findings in the prompt; report only new or unresolved issues.
- Reviewing code Claude just wrote → a separate instance, never the generating session.
D4 · Prompt Engineering & Structured Output (20%)
- Too many false positives → concrete report/skip criteria + code examples per severity. "Be conservative" is wrong.
- One category at ~40% false positives drags trust in all findings → temporarily disable that category, fix its criteria, re-enable.
- Few-shot done right → 2–4 examples targeting ambiguous cases, with the reasoning, varied document structures ⚠.
- Few-shot can't fix → malformed JSON (use schema), invented values (nullable), wrong tool (description), wrong totals (validation).
- tool_use + JSON schema → guarantees structure, not correctness. Strict mode removes syntax errors.
- Model invents absent values → make the field optional/nullable; add
"other"+ detail and"unclear"to enums. - Validation-retry → resend the document + the failed output + the specific error. Pointless if the data isn't in the source; return null or route to a human.
- Semantic checks → extract
calculated_totalalongsidestated_total; flagconflict_detected.
| Synchronous Messages API | Message Batches API | |
|---|---|---|
| Cost | Standard | 50% cheaper |
| Latency | Immediate | Up to 24 hours, no SLA |
| Multi-turn tool calling | Yes | No |
| Matching results | n/a | custom_id per request |
| Use for | Pre-merge checks, anything a person waits on | Overnight reports, weekly audits, bulk extraction |
- Batch partly fails → resubmit only the failed
custom_ids, with a change (e.g. chunk oversized documents). - 30h SLA with a 24h batch window → 6h of slack, so submit about every 4 hours.
- Confidence scores → use them for routing, calibrate them; they never replace criteria.
D5 · Context Management & Reliability (15%)
- Amounts, dates, IDs lost after summarising → a structured case facts block included in every prompt, never summarised.
- Lost in the middle → key findings first, section headers; reorder the input rather than repeat it.
- Tool returns 40 fields → trim to the needed ones before they enter history.
- Escalation triggers → customer asks for a human (immediately) · policy is silent or an exception applies · no progress after a genuine attempt.
- Not triggers → frustration on a simple case, low self-rated confidence. Resolve it.
- Several customers match → ask for email, phone or order number; never pick the most recent.
- FCR 55% vs an 80% target → explicit escalation criteria + few-shot before any classifier.
- Error propagation → report failure type, what was tried, partial results, alternatives. A timeout returned as
results: []with success is silent suppression. - Answers drift into generic "typical patterns" → context degradation: scratchpad file, subagents for narrow questions,
/compactearly. - Long exploration may crash → state manifest: phase, explored paths, findings, next steps.
- 97% overall accuracy → can hide a weak segment. Measure by document type and field; stratified sampling includes high-confidence output.
- Two credible sources conflict → keep both values with sources. Don't pick the newest or average them; different dates may be a trend.
- Every report claim → claim + source + excerpt + date, plus a coverage gap section for sources that couldn't be checked.
Trap answers and out-of-scope distractors
Wrong options tend to follow a few patterns:
| Trap | Why it's wrong | Pick instead |
|---|---|---|
| "Make it mandatory in the system prompt" for a hard rule | Prompts are probabilistic | Hook or code gate |
| Classifier or new service as the first step | Cheap fixes not tried | Descriptions, criteria, few-shot |
| Fixing a component that works | Ignores the evidence | Go where the evidence points |
| Self-rated confidence 1–10, sentiment, parsing "done" | Unreliable signals | stop_reason, explicit criteria, calibration |
Invented flags (CLAUDE_HEADLESS, --batch) | Not documented | -p, .mcp.json, .claude/rules/ |
Team config in ~/.claude, tokens in the repo | Wrong scope | Project scope + ${ENV_VAR} |
| Bigger model or context window | Doesn't fix dilution | Split passes, scratchpad |
| Give the agent every tool | Hurts selection | 4–5 tools per role |
| Same-session self-review, "think harder" | Shares the generator's blind spots | Independent instance |
| Report only issues found in 2 of 3 runs | Hides intermittent bugs | Per-file pass + integration pass |
| Make developers split their PRs | Pushes work onto people | Fix the pass design |
| Required field for data that may be absent | Forces fabrication | Nullable |
Out of scope per the guide. An option built on these is usually a distractor: fine-tuning or training, API auth/billing/accounts, OAuth and key rotation, deploying or hosting MCP servers, Claude's internals or training (RLHF, Constitutional AI), embeddings and vector DBs, computer use, vision, streaming/SSE, rate limits and pricing math, cloud-provider configs, benchmarks, tokenization, and prompt caching beyond knowing it exists.
Key takeaways
- Hard constraints (money, security, compliance) go in code; everything else starts with the cheapest fix that targets the root cause.
stop_reasondrives the loop;tool_resultmust be appended; subagents get context only through their prompt.- Structure everywhere: typed errors with
isRetryable, fixed handoff fields, JSON schema with nullable fields, a case facts block. - Scope matters: project (
.claude/,.mcp.json) for teams, user (~/.claude/) for personal setup. - Batch for anything nobody waits on; synchronous for anything that blocks a person.
Frequently asked questions
No. The exam guide's rules of conduct require a workspace clear of notes, books, phones and other materials, and list study materials as prohibited. Use this sheet before the exam, not during it.
Unlikely on its own. It compresses what you should already know; scenario questions test whether you can apply it under time pressure. Pair it with the lessons and timed scenario practice, and use your mock exam misses to choose what to reread.
D1 (27%) carries the most items, so make sure its principles are sharp. After that, spend the final review on whichever domain your mock exams flag as weakest. Per-domain percentages don't decide pass/fail, but missed points add up anywhere.
The app version adds per-domain filters, confident/unsure marks on every line, links to the matching lessons, and the full X-vs-Y and terminology lists: Open the full interactive cheat sheet, then test yourself in scenario practice. For planning and pacing, see the CCAR-F study roadmap, mock exam strategy and study tips.