Exam Prep Dashboard · 301-Level · Launched March 12, 2026 · Official Exam Guide v0.1 + Architect's Playbook
Architects and senior engineers who design, implement, and deploy production AI systems using the Claude API, Claude Code, and MCP integrations. Expected: 6+ months hands-on Claude API & Claude Code experience, Python familiarity, and real project work.
This is not a prompting literacy badge. It doesn't care how many prompts you've written. Every question drops you into a real production system and asks you to make the right architectural call.
"Code guarantees. Prompts suggest."
Programmatic enforcement — app-layer intercepts, schema-validated tool_use, structured error handling — always trumps prompt-based guidance for reliability and compliance. This principle underlies the answer to most hard questions.
Give each agent a maximum of 4–5 tools. With 18+ tools, Claude's tool selection reliability degrades noticeably. Scope tools tightly to each agent's specific role.
The canonical multi-agent pattern: a central coordinator + specialized subagents. The hub routes tasks, subagents return structured results. Never let subagents talk to each other directly.
Isolate context for each subagent — pass only what's needed for that task. Shared context leakage across subagents is the #1 cause of token bloat in multi-agent systems.
Assign a confidence score to outputs and define threshold triggers for human escalation. Don't rely on Claude self-reporting uncertainty — measure it structurally.
When structured output fails schema validation, feed the error back to Claude with the validation message as a new user turn. One retry with explicit error context succeeds far more often than a blank retry.
No Claude, no docs, no external tools. Everything from memory. Build real implementations — rote reading alone won't cut it.
Subagents have isolated context — they do NOT inherit the coordinator's conversation history automatically. Pass only what's needed for that specific goal. This is one of the most commonly missed facts on the exam.
Never use the same Claude session to review its own work. Use a separate session (fork_session) for independent review. The same session has anchoring bias toward its own output.
PostToolUse hooks intercept tool results before the model processes them. Use to normalize heterogeneous formats (timestamps, status codes, currency) from different MCP tools into a consistent schema.
Four of these six are randomly selected per sitting. Every exam question is anchored to one of these real-world contexts.
Agentic loop, tool use, escalation decisions, and human handoff patterns.
Claude Code CLI, CLAUDE.md config, custom commands, CI integration.
Orchestrator + specialist subagents, context handoff, shared memory.
MCP server design, tool interfaces, and developer workflow optimization.
CI/CD integration, headless mode (--print), JSON output, schema validation.
tool_use for schema enforcement, batch processing, resilient schemas.
stop_reason handling.mcp.json / ~/.claude.json)isError flag, retry strategiestool_usestop_reason: "tool_use" → execute tools and continue; "end_turn" → exit looptool_use_id must exactly match between the tool_use block and the tool_result responsestop_reason == "end_turn"tool_use blocks from Claude's response and routing to handlerstool_result messages with the correct tool_use_idTask tool in Claude Agent SDK for spawning subagentsfork_session for parallel subagent executionAgentDefinition for reusable agent configurationsPostToolUse hook: fires after every tool execution — use for logging and auditPreToolUse hook: intercepts before execution — use for compliance enforcementPostToolUse for audit trails and observabilityPreToolUse to block prohibited actions at the application layerallowedTools: array of tool names the agent is permitted to call (principle of least privilege)AgentDefinition: reusable config object — system prompt, tools, modelAgentDefinition--resume flag in Claude Code for continuing paused sessionstool_results when resuming async sessionsisError flag — signals error while keeping the agentic loop aliveisError: true responses for recoverable failures.mcp.json: project-level MCP server config (committed to repo)~/.claude.json: user-level MCP server config (personal tools).mcp.json with correct server definitions and env var referencesisError: true keeps the loop alive; the exception/throw pattern terminates iterrorCategory for classifying error types; isRetryable for retry guidance"auto" — Claude decides; "any" — must use some tool; {type:"tool",name:"X"} — forces specific tooltool_choice per step"any" to guarantee structured output via tool_use~/.claude/CLAUDE.md — applies to all projects.claude/CLAUDE.md — applies to the project (committed to repo)CLAUDE.md — overrides everything above/memory to view and manage active context.claude/commands/*.md; User commands: ~/.claude/commands/*.md$ARGUMENTS placeholder for parameters/review, /deploy).claude/skills/ directory with SKILL.md filescontext: fork (isolated session) or context: current (shared session)allowed-tools and argument-hint frontmatter fieldsfork vs current context based on isolation needs-p / --print: headless mode — single response, no interactive UI--output-format json: structured JSON output for scripting--json-schema: validate output against a JSON schema/compact: compresses conversation history to extend effective session length/compact strategically at milestone boundariestool_use for schema-enforced structured output — the strongest guarantee<thinking> tags)"other" enum value + detail field for unclassified inputscalculated_total vs stated_totalcustom_id field for matching results to inputscustom_id and polling for results/compact command for mid-session compression20+ architectural patterns from The Architect's Playbook. Each shows the anti-pattern and the correct solution. The wrong answers on the exam ARE these anti-patterns — recognising them lets you eliminate 2–3 options immediately.
Application-layer intercepts that programmatically enforce content and behavioral rules, rather than relying on prompt instructions.
Adding "never output prohibited terms" to the system prompt. Prompts can be forgotten, misunderstood, or bypassed.
PreToolUse hook + post-generation filter that intercepts output and blocks prohibited content before it reaches the user. Programmatic guarantee.
Designing escalation triggers based on action reversibility, confidence, and business risk — not just uncertainty.
Always escalating uncertain actions OR never escalating (full automation). Both extremes fail differently.
Escalate irreversible actions, high-value decisions, and compliance boundaries. Automate reversible, low-risk, high-confidence operations.
Replace verbose tool outputs in message history with compact summaries to prevent context explosion in long sessions.
Accumulating raw tool outputs — full API responses, database dumps — in the message array. Context fills up rapidly.
After processing each tool result, replace it with a structured summary: {"result":"success","key_findings":[...]}. Preserve signal, discard noise.
Summarize conversation history at natural boundaries to extend effective session length.
Letting the conversation grow unbounded until hitting context limits, causing degraded performance or silent truncation.
At milestone points — task completion, phase transitions — compress history into a structured summary. Use /compact or implement programmatic compression.
Safely resume paused agentic sessions by filtering stale tool_results from prior execution.
Replaying the full message history on resume, including old tool_results that are no longer valid or relevant.
Filter out tool_results older than the session pause time. Re-establish current state with fresh context. Use --resume flag in Claude Code.
The orchestrator tracks goals and outcomes; subagents handle implementation details. Prevents orchestrator context collapse.
Orchestrator receives full implementation details from every subagent, quickly filling its context window with irrelevant noise.
Orchestrator sends goal + success criteria. Subagent returns {goal_achieved:true, summary:"...", artifacts:[...]}. Orchestrator never sees raw implementation.
A vector store or key-value store accessible to all agents for persistent, cross-agent knowledge sharing.
Passing all shared state through message payloads between agents. Creates tight coupling and context bloat.
Agents read/write to shared vector store. Semantic search for relevant memories. Each agent maintains minimal local context + shared memory reference.
Run independent subtasks concurrently; cache deterministic tool results to avoid redundant calls.
Sequential execution of independent tasks. Making identical API calls multiple times. No result reuse.
Identify independent subtasks → execute in parallel. Hash tool inputs as cache keys. Serve cached results for identical calls within TTL window.
Use tool_choice to guarantee Claude calls tools in the required sequence, especially when data dependencies exist.
Instructing Claude to "always call authenticate before query" via prompt. Claude may skip this if context implies authentication already happened.
Step 1: tool_choice:{name:"authenticate"} → Step 2: after result, tool_choice:{name:"query"}. Programmatic sequencing guarantee.
Internal reasoning space separate from final output — Claude thinks through the problem without contaminating the response.
Asking Claude to "think step by step" and including all reasoning in the final response. Output becomes verbose and unstructured.
Use <thinking> tags or a dedicated reasoning field in tool output. Extract only the final structured result. Keep reasoning internal.
Type-safe intermediate objects between pipeline stages prevent errors from silently propagating through multi-step workflows.
Passing raw text between pipeline stages. Each stage re-parses and re-interprets, and can silently drift from the original intent.
Define typed schemas for each stage's output. Stage N output is Stage N+1's validated input. Use tool_use for schema enforcement.
Schemas that gracefully handle unexpected values instead of failing silently or crashing downstream systems.
Strict enum schema: {type:"string", enum:["A","B","C"]}. Any novel value causes validation failure or a null that's hard to debug.
Add "other" + detail field: {category:"other", category_detail:"new_type_X"}. Schema captures all inputs; new types become observable and trackable.
Include calculated values alongside stated values to detect extraction errors in financial and numerical data.
Extracting only stated_total from a document. If the document itself has a calculation error, the extraction silently propagates it.
Schema includes both stated_total AND calculated_total (sum of line items). If they differ → flag for human review. Catches both document errors and extraction errors.
Explicit rules for representing missing, null, and equivalent values consistently across all extractions.
Allowing null, "", "N/A", "none", and absent fields to all represent "missing". Downstream systems break on the inconsistency.
Define in schema: absent = not mentioned; null = explicitly absent; "" = invalid. Normalize equivalents ("USD", "$", "dollars" → "USD").
| Pattern | Problem Solved | Key Mechanism | When to Use |
|---|---|---|---|
| Zero-Tolerance Compliance | Prompt instructions can be bypassed | App-layer PreToolUse/PostGen intercept | Compliance-critical systems |
| Tool Context Pruning | Context fills with raw tool outputs | Replace outputs with summaries | Long agentic sessions |
| Compressing Long Sessions | Context exhaustion in long runs | /compact or programmatic summary | Sessions >50% context used |
| Resuming Async Sessions | Stale state on resume | Filter old tool_results + --resume | Long-running async agents |
| Scratchpad Pattern | Verbose reasoning in output | <thinking> tags / reasoning field | Complex reasoning tasks |
| Shared Memory Architecture | State sharing between agents | Vector store with semantic search | Multi-agent coordination |
| Forcing Execution Order | Non-deterministic tool sequence | tool_choice: {name: "specific_tool"} | Required tool sequencing |
| Structured Intermediate Reps | Error propagation between stages | Typed schemas at pipeline boundaries | Multi-stage pipelines |
| Parallelization & Caching | Sequential + redundant API calls | Concurrent subtasks + result cache | Performance-critical workloads |
| Goal-Oriented Delegation | Orchestrator context explosion | Return goals not implementation details | Complex multi-agent systems |
| Resilient Schemas | Schema validation failures | "other" + detail field | Data extraction at scale |
| Mathematical Consistency | Silent numerical errors | stated vs calculated fields | Financial data extraction |
| Human-in-the-Loop Calibration | Wrong automation/oversight balance | Risk-based escalation triggers | All production systems |
| Subagent Context Isolation | Context leak / coordinator bloat | Pass structured goal payload, not history | All multi-agent systems |
| PostToolUse Normalization | Heterogeneous tool output formats | PostToolUse hook normalises before model sees it | Multi-MCP integrations |
| Same-Session Self-Review | Anchoring bias in quality review | fork_session for independent second opinion | Quality-critical pipelines |
Complete Claude 101 for orientation. Start Building with the Claude API (first half). Read the official exam guide end-to-end. Study stop_reason handling and message array construction.
Finish Building with the Claude API (second half). Build an agentic loop from scratch. Implement hub-and-spoke orchestrator + 2 subagents. Practice max 4–5 tools per agent and Goal-Oriented Delegation.
Complete Introduction to MCP then MCP Advanced Topics. Build an MCP server with Tools + Resources + Prompts. Configure .mcp.json. Test isError and all three tool_choice modes.
Complete Claude Code in Action and Introduction to Agent Skills. Set up CLAUDE.md hierarchy. Create custom commands + rules with glob patterns. Build a CI pipeline using --print and --output-format json.
Master the tool_use extraction pattern. Design resilient schemas with "other" fields. Implement the Validation Retry Loop pattern. Build a batch pipeline using the Message Batches API.
Implement Tool Context Pruning and Compressing Long Sessions. Design a shared memory architecture. Add Confidence Calibration to an agent. Practice /compact and --resume patterns.
Study all 13 patterns cold — each anti-pattern vs correct pattern. Complete all 4 official preparation exercises. Review the Architect's Reference Matrix. Study the Claude Cookbooks for real code examples. Practise subagent context isolation and PostToolUse normalization patterns.
Anti-patterns ARE the distractors — spend this week studying what NOT to do. Review the 5 key anti-patterns (natural language loop termination, prompt-based compliance, same-session self-review, >5 tools per agent, aggregate metrics hiding type-level failures). Then: complete all 15 practice questions, try the Udemy practice tests, and for every wrong answer spend 3× more time on the explanation than re-taking questions. Revisit any domain below 80% on the Tracker.
Implement a complete agentic loop that calls at least 2 different tools, handles stop_reason correctly, and gracefully recovers from a tool error (isError: true). Include exponential backoff for transient failures.
Build an MCP server that exposes at least one Tool, one Resource, and one Prompt primitive. Configure it in .mcp.json. Implement structured error responses with errorCategory and isRetryable fields.
Set up a complete Claude Code workspace: user-level CLAUDE.md with global conventions, project-level CLAUDE.md with architecture context, at least 2 custom commands, and a rule with a glob pattern scoped to a specific directory.
Build a data extraction pipeline using tool_use for schema enforcement. Include a resilient schema with "other" + detail fields, mathematical consistency validation (stated vs calculated totals), and batch processing with the Message Batches API.
All courses are free and self-paced on anthropic.skilljar.com. Complete these in order for the best exam prep coverage.
8+ hr flagship course. Messages API → tool use → context windows → agentic architecture → RAG pipelines. Do this first.
Build MCP servers and clients from scratch. Master the three core primitives: tools, resources, and prompts.
Advanced MCP patterns, transport mechanisms (stdio/SSE), tool boundary design, reasoning overload prevention.
CLAUDE.md hierarchies, custom slash commands, rules, skills, CI/CD integration with --print and JSON output.
Build, configure, and share Skills in Claude Code — reusable markdown instructions with fork/current context modes.
Official baseline on Claude usage, everyday workflows, and core capabilities. Good orientation before the API course.
Claude deployment via AWS Bedrock — useful if your production environment is on AWS.
Claude deployment via GCP Vertex AI — useful if your production environment is on GCP.
AI Fluency Framework, Teaching AI Fluency, AI Fluency for Students, Nonprofits, and Educators tracks also available.
JSON Schema definition, tool_choice modes (auto / any / forced), structured output patterns, tool_use_id matching.
50% cost savings, 24-hour window, custom_id mapping, batch result polling. Critical for D4 questions.
Tools/Resources/Prompts primitives, .mcp.json vs ~/.claude.json, isError handling.
Complete reference for CLAUDE.md, custom commands, rules, skills, plan mode, and all CLI flags.
Complete API reference — Messages, tool_use blocks, stop_reason values, and all request parameters.
Anthropic engineering post on Agent Skills — how real-world skills are designed and deployed.
Official platform docs for Agent Skills — configuration, context modes, and deployment.
Official Claude learning hub — links to all courses, guides, and certification paths.
Official collection of notebooks and recipes — agentic loops, tool use, RAG, multi-agent patterns. Copy-paste Python examples.
Deployable starter apps including a two-agent pattern (initializer + coding agent) built on the Claude Agent SDK.
Claude Code source and documentation — understand how CLAUDE.md, rules, commands, and skills are actually loaded.
Public repository of Agent Skills — real examples of SKILL.md frontmatter, fork vs current context, and allowed-tools.
Official Python SDK with typed interfaces for the Messages API, tool use, and batch processing.
Curated list of skills, hooks, slash commands, agent orchestrators, and plugins for Claude Code.
Third-party practice exam questions for the Claude Certified Architect Foundations certification.
Community-curated directory of Claude AI resources, tools, integrations, and examples.
An MCP server specifically built to help study for the CCA exam — practice questions via MCP interface.
Your primary study destination. Start here, complete all 5 exam-priority courses, earn your certificates.
From the CCA Foundations Exam Guide v0.1 + community-derived scenarios. Answer mentally before revealing — this is the most important study technique.
stop_reason, (2) prompt-based enforcement for compliance-critical rules, (3) same-session self-review instead of fork, (4) >5 tools per agent, (5) aggregate accuracy metrics that mask per-type failure rates.
isError: true signals the error to Claude while keeping the agentic loop alive. Claude can then retry with different parameters, ask for clarification, or escalate. Throwing an exception (A) or closing the connection (D) kill the loop. An empty response (C) is ambiguous — Claude has no actionable information to work with.--resume flag in Claude Code allows resuming a paused agentic session with full session state preserved. /compact (A) compresses context for the current session but doesn't enable resume. /memory (C) manages persistent CLAUDE.md memory files, not session state. Environment variables (D) don't provide built-in session persistence.tool_choice:{type:"tool",name:"authenticate"} → Step 2: after receiving the auth result, tool_choice:{type:"tool",name:"query_tool"}. Programmatic sequencing guarantee. "auto" (A) relies on prompts. "any" (B) only guarantees some tool is used, not which one. stop_sequences (D) don't control tool invocation.{goal_achieved:true, summary:"...", artifacts:[...]}. The orchestrator never accumulates raw implementation details. Scratchpad (A) is about isolating internal reasoning, not reducing orchestrator context. Shared Memory (C) helps coordination but doesn't prevent orchestrator bloat. /compact (D) is a reactive measure, not a preventive architectural pattern.if "I have completed the task" in response.content[0].text: break. What is the primary problem with this approach?response.stop_reason == "end_turn". Natural language parsing is fragile — Claude may phrase completion differently, may not include that phrase even when done, or may include it prematurely. "Code guarantees. Prompts suggest." stop_reason is a deterministic, programmatic signal. A and C are minor implementation details, not the core flaw. D is incorrect — natural language signals are never more reliable than structured API values.PostToolUse hook fires after every tool execution and before the model processes the result — making it the ideal insertion point for normalizing heterogeneous data formats. This is a programmatic guarantee that timestamps will always be standardized before Claude reasons about them. System prompt (A) is a suggestion, not a guarantee. Modifying each server (C) may not be feasible when integrating third-party MCPs. Asking Claude to normalize (D) adds latency and is unreliable. This question tests whether candidates understand that PostToolUse is for data normalization, not just logging.stop_reason "tool_use" → parse & execute tools, loop continuesstop_reason "end_turn" → exit loop, return responseisError: true → tool failed, loop stays alive, Claude can adapt.mcp.json = project scope · ~/.claude.json = user scopecontext: fork = isolated · context: current = shared sessiontool_choice "any" = some tool (use for structured output)tool_choice forced = this specific tool (use for sequencing)| Anti-Pattern | Why It's Wrong | Correct Approach |
|---|---|---|
| Natural language loop termination | Fragile, unreliable, not deterministic | Check stop_reason == "end_turn" |
| Prompt-based compliance enforcement | Prompts suggest; can be bypassed or misinterpreted | PreToolUse hook + app-layer intercept |
| Same-session self-review | Anchoring bias — same session can't objectively review its own output | Use fork_session for independent review |
| 18+ tools per agent | Tool selection reliability degrades significantly above ~5 tools | Max 4–5 tools, role-specific agents |
| Aggregate accuracy metrics only | Hides per-document-type or per-category failure rates | Track accuracy broken down by type/category |
Tool selection reliability degrades with more than ~5 tools. Design narrow, role-specific agents rather than one agent with many tools.
Check off topics as you master them. Progress auto-saves in your browser.