Domain 1 — Agentic Architecture & Orchestration 27% · ~16 items · 7 task statements Priority

New to the codes? — it explains what D1, 1.4 and "keyed answer" mean, and lists all 30 task statements with plain-English titles.

The largest domain and your weakest. Everything here is Agent SDK mechanics: how the loop terminates, who runs tools, how subagents get context, and where enforcement lives.

1.1 — Design and implement agentic loops

Go to··
You send goal + tools + history Claude reasons returns stop_reason stop_reason ? the ONLY correct test not text · not a counter · not phrasing "tool_use" YOUR code runs it Claude never executes Append result to messages[] loop "end_turn" BREAK present the answer Anti-patterns: parsing "done" · iteration cap as the stop · treating text content as completion
Task statement 1.1 Two exits, one test. The green path is the loop; the red path is the only legitimate way out. The iteration cap sits outside this diagram deliberately — it is a runaway safety net, and if it fires you raise rather than return.

Four steps, forever: Claude reasons → requests a tool → your code executes it and appends the result → loop. Claude never executes anything itself; that gap is where approvals and hooks live.

// the entire loop, and the only correct termination test
messages = [{ role: "user", content: goal }];
while (true) {
  res = await claude.messages.create({ model, tools, messages });
  messages.push({ role: "assistant", content: res.content });

  if (res.stop_reason !== "tool_use") break;   // "end_turn" -> done

  results = await runTools(res.content);          // YOUR code runs them
  messages.push({ role: "user", content: results }); // MUST append, or Claude goes blind
}
stop_reasonMeaningYour loop does
"tool_use"Claude is requesting one or more toolsExecute, append results, iterate
"end_turn"Claude has finishedBreak; present the final response

Three loop-killing anti-patterns — the exam keys against all three

Model-driven vs hardcoded A true agentic loop is for paths that cannot be known upfront. If the path is genuinely fixed A→B→C, the simpler hardcoded workflow is the better design — the exam rewards this restraint. But a pre-configured decision tree is Wrong problem when the stem describes open-ended, high-ambiguity requests.

1.2 — Coordinator–subagent orchestration

Go to··
COORDINATOR decompose · delegate aggregate · choose who search tools: WebSearch own context window analysis tools: Read, verify_fact own context window synthesis tools: verify_fact own context window report tools: Write own context window Task(...) Task(...) Subagents never talk to each other — every message routes through the hub That is what buys observability, consistent error handling, and controlled information flow allowedTools must contain "Task" (now also called "Agent") or none of these arrows exist
Task statements 1.2 and 1.3 Four separate context windows. Nothing crosses a spoke. Each subagent starts blank every time it is invoked, which is why findings must be written into its prompt rather than assumed.

Hub-and-spoke. Every message routes through the coordinator. Subagents never talk to each other — that's what gives you observability, consistent error handling, and controlled information flow.

The coordinator's four jobs

  1. Decompose the task into subtopics that actually span the topic.
  2. Delegate to the right specialists.
  3. Aggregate results.
  4. Decide who's even needed — dynamically select subagents based on query complexity rather than always running the full pipeline.

Two more coordinator responsibilities the exam tests: partition scope across subagents to minimise duplication (distinct subtopics or distinct source types), and run an iterative refinement loop — evaluate the synthesis for gaps, re-delegate targeted queries, re-synthesise until coverage is sufficient.

The decomposition trap — know this cold When a report is missing entire sectors and the coordinator's log shows narrow subtasks, the root cause is coordinator decomposition. Every option that blames the search agent, the analysis agent's relevance filter, or the synthesis agent's gap detection is Symptom — those agents executed their assigned scope correctly. The problem is what they were assigned.

1.3 — Subagent invocation, context passing, spawning

Go to··
MechanismRule
Task toolThe mechanism for spawning subagents. The coordinator's allowedTools must include "Task" or it cannot delegate at all.
ContextNo inheritance. Subagents don't get the coordinator's conversation history and don't share memory between invocations. Findings must be placed in the subagent's prompt.
ParallelismEmit multiple Task calls in a single response. Spreading them across separate turns is sequential.
AgentDefinitionPer-subagent description, system prompt, and tool restrictions.
AttributionPass structured data that separates content from metadata (source URL, document name, page number) so provenance survives the handoff.
Prompt styleCoordinator prompts state goals and quality criteria, not step-by-step procedure — procedural scripts kill subagent adaptability.
fork_sessionIndependent branches from a shared analysis baseline, for exploring divergent approaches.
agents: {
  synthesis: {
    description: "Combines findings into a cited report.",
    prompt: systemPrompt,
    tools: ["verify_fact"]           // scoped, not all 18
  }
},
allowedTools: ["Task", "Read"]        // without "Task": no subagents

1.4 — Multi-step workflows: enforcement and handoff

Go to·

The central distinction: programmatic enforcement (hooks, prerequisite gates) gives deterministic compliance; prompt-based guidance has a non-zero failure rate. When identity verification must precede a financial operation, non-zero is not acceptable.

The canonical item Agent skips get_customer in 12% of cases and refunds wrong accounts. Keyed answer: a programmatic prerequisite that blocks lookup_order and process_refund until get_customer has returned a verified customer ID. System-prompt emphasis and few-shot examples are Probabilistic. A routing classifier that enables tool subsets is Wrong problem — it changes tool availability, and the fault is tool ordering.

Structured handoff on escalation

The human agent has no access to the transcript. The handoff summary carries: customer ID, root cause analysis, refund amount, recommended action.

Multi-concern requests

Decompose into distinct items → investigate each in parallel over shared context → synthesise one unified resolution. Not: handle the first and ask them to write back.

1.5 — Agent SDK hooks

Go to··
Claude asks tool_use block PreToolUse allow / deny / redirect before it runs The tool runs your code allow PostToolUse transform the result before Claude sees it deny Blocked — then REDIRECT to escalation. A bare block is a dead end for the customer. Epoch 1731628800  ·  "2026-08-13T09:00Z"  ·  status: 2 one normalised shape
Task statement 1.5 Airport model: security screening happens before you board, baggage is re-tagged on the belt afterwards. Both hooks live in your code, outside Claude's conversation — which is precisely why they are guarantees rather than requests.
Hook usePatternExample
Normalise incoming dataPostToolUse — intercept the tool result and transform it before the model processes itUnix timestamps, ISO 8601 strings and numeric status codes from different MCP tools → one format
Enforce a business ruleIntercept the outgoing tool call, block it, redirectRefund above $500 → blocked → routed to human escalation

Choose hooks over prompt instructions whenever the rule is a guarantee. Reciprocally: don't propose a hook for stylistic or judgment-based behaviour — that's over-engineering, and the exam penalises it.

1.6 — Task decomposition strategies

Go to·

Prompt chaining (fixed sequence)

Use when the aspects to review are known in advance. Canonical shape: analyse each file individually, then a cross-file integration pass. Predictable multi-aspect reviews.

Dynamic / adaptive decomposition

Use for open-ended investigation, where subtasks depend on what you discover. "Add comprehensive tests to a legacy codebase": map structure → identify high-impact areas → build a prioritised plan that adapts as dependencies surface.

Splitting per-file avoids attention dilution — the same principle that keys item 12 in the guide, and the reason a larger context window is Wrong problem.

1.7 — Session state, resumption, forking

Go to··
SituationDo this
Continue a specific named investigation tomorrow--resume <session-name>
Files changed since the analysisResume and tell it which files changed, so it re-analyses those specifically instead of re-exploring everything
Compare two testing or refactoring strategies from one shared analysisfork_session — independent branches, shared baseline
Prior tool results are now staleStart a new session and inject a structured summary. More reliable than resuming onto stale results.
Prior context is mostly still validResume
The judgment being tested Resume when prior context is mostly valid; start fresh with an injected summary when it isn't. "Just resume and hope" and "always start over" are both wrong; the discriminator in the stem is whether the earlier tool results still describe reality.

Deck additions From Domain 1 slides

Go to·

Detail that appears in the Domain 1 lecture deck but not in the guide's own summary. All of it is fair game.

The Task tool has two names

The exam guide calls it the Task tool. The current SDK also exposes it as the Agent tool. Same mechanism — recognise both in an option list, and don't reject a correct answer because it says "Agent".

Omitting a subagent's tools field is the named security anti-pattern

If you define a subagent and leave the tools field out, it inherits everything the parent has — including Bash, Write and Edit. The deck's worked case: a read-only review agent inherited write access and modified source files. Scoping is not an optimisation; it is the safety boundary.

// risky — inherits Bash, Write, Edit...
{ description: "Reviews code", prompt: p }

// safe — can't misuse what it doesn't hold
{ description: "Reviews code", prompt: p, tools: ["Read", "Grep"] }

Read the description field as a job posting

Three parts to an AgentDefinition, with three distinct jobs: the description is how the coordinator decides which specialist to pick; the system prompt is how that specialist behaves; the tools list is exactly what it may touch. A weak description causes mis-selection between subagents in the same way a weak tool description causes mis-selection between tools.

The four categories that demand enforcement

When an option asks whether a prompt is sufficient, check whether the stem falls into one of these. If it does, the answer is programmatic.

CategoryExamples in the scenarios
MoneyMoving funds, refunds, payments
IdentityVerifying which customer you are acting for
SafetyActions that could cause harm
ComplianceAnything with legal weight

Hooks: the airport model

Security screening happens before you board — that is PreToolUse, inspecting the call and allowing, blocking or redirecting it. Baggage gets re-tagged into a standard form on the belt after the flight — that is PostToolUse, transforming the result before Claude sees it. Both run in your code, outside Claude's conversation, which is exactly why they are deterministic.

Why one agent isn't enough

A single agent doing search, reading and writing at once fills its context with clutter and quality drops. The planner-plus-specialists split exists to keep each context clean, not merely to parallelise.

Resume versus fresh start, side by side

ResumeFresh session + summary
Use whenPrior context mostly validOld tool results are stale
CostCheaper, keeps continuityNew session, small setup cost
ReliabilityHigh if little changedHigh when a lot changed

The stale-results trap is named as the number-one resume pitfall: the saved context includes the file contents it read earlier, so the agent may confidently discuss a function that no longer exists.

Currency check Verified Aug 2026

Full drift list·
Guide saysCurrent primaryAlso valid
The Task tool spawns subagentsRenamed Agent in Claude Code v2.1.63Task(...) still works as an alias; some SDK surfaces still report "Task" in the initial tools list. Accept either in an option.
Subagents inherit nothingStill true for named and general-purpose subagentsA fork subagent type deliberately inherits the parent's full conversation, system prompt, tools and model. Its own tool calls stay out of your conversation. The exception, not the rule.
Subagent tools are scoped by an allowedTools-style listUnchanged, and still the safety boundaryThe tools field can also allowlist which subagents this agent may spawn: Agent(worker, researcher).
Explore isolates verbose discoveryUnchangedThree built-ins now: Explore (read-only, runs on Haiku, search-optimised), Plan (research during plan mode), general-purpose. Explore and Plan deliberately skip CLAUDE.md and git status, so a rule that must reach them has to be restated in the delegation prompt.
fork_session branches from a baselineUnchanged in the Agent SDKIn Claude Code the same idea is the fork subagent type, and context: fork on a skill. Inspect live work with /agents and /tasks.
Hooks are PreToolUse and PostToolUseBoth current, and the pre/post distinction is exactly as taughtThe full event list is much longer now — including InstructionsLoaded, SessionStart and prompt hooks. Hooks can also be scoped to a single skill's lifecycle via a hooks frontmatter field.
Loop control uses stop_reasonUnchanged, and still the only exact testInterleaved thinking now lets Claude reason between tool calls inside one assistant turn. It does not change the termination rule, and it is not in the blueprint.

Domain 2 — Tool Design & MCP Integration 18% · ~11 items · 5 task statements

Your strong domain — but note where the exam's canonical answer is smaller than what you'd build. Descriptions before architecture; scoped tools before consolidation.

2.1 — Tool interfaces and descriptions

Go to··

Descriptions are the primary mechanism the model uses to select tools. Minimal descriptions ("Retrieves customer information" / "Retrieves order details") are the root cause of misrouting, not a symptom of it.

A description that passes

Three fixes, in order of exam preference

  1. Expand the descriptions — the low-effort, high-leverage first step.
  2. Rename to remove overlapanalyze_contentextract_web_results with a web-specific description.
  3. Split a generic tool into purpose-specific tools with defined contracts — analyze_documentextract_data_points + summarize_content + verify_claim_against_source.

Also audit the system prompt for keyword-sensitive instructions that create unintended tool associations and override otherwise good descriptions.

Two traps Consolidating two tools into one lookup_entity is a legitimate architecture but is Premature scope when the stem asks for the "most effective first step" and tells you descriptions are minimal. A keyword routing layer in front of the model is Over-engineered and discards the model's language understanding.

2.2 — Structured MCP error responses

Go to··

MCP signals failure with the isError flag. Uniform "Operation failed" responses prevent recovery decisions — return metadata the agent can act on.

{
  isError: true,
  content: [{ type: "text", text: "Refunds over $500 require manager approval." }],
  errorCategory: "business",   // transient | validation | business | permission
  isRetryable: false            // stops the agent wasting retries
}
CategoryExamplesRetryableAgent should
transientTimeout, service unavailableYesRetry, possibly with backoff
validationMalformed or invalid inputNo, until input changesCorrect the arguments and re-call
businessPolicy violation, threshold exceededNoExplain to the customer in friendly terms; escalate if needed
permissionNot authorised for this operationNoEscalate or take a different route

Two more distinctions the exam keys on: subagents perform local recovery for transient failures and propagate upward only what they can't resolve (with partial results and what was attempted); and an access failure (needs a retry decision) is not the same as a valid empty result (a successful query with no matches).

2.3 — Tool distribution and tool_choice

Go to··

Too many tools degrades selection reliability — the guide's example is 18 tools where 4–5 suffice. Agents holding tools outside their specialisation misuse them (a synthesis agent starting to run web searches).

tool_choiceBehaviourUse it when
"auto"Model may call a tool or return textNormal conversational agents
"any"Must call some tool; model picks whichYou need structured output and the document type — hence the schema — is unknown
{"type":"tool","name":"x"}Must call that toolA specific extraction must run first, e.g. extract_metadata before enrichment; handle later steps in follow-up turns
"none"No tools this turn — text onlyYou want Claude to ask or explain without acting Deck

Scoping sets the menu; tool_choice sets the order. Note that any and forced tool cannot be combined with extended thinking.

Scoped cross-role tools are the keyed pattern for high-frequency needs: give synthesis a narrow verify_fact for the 85% simple case, keep complex verification flowing through the coordinator. Also prefer constrained tools over generic ones — replace fetch_url with load_document that validates document URLs.

2.4 — MCP servers in Claude Code and agent workflows

Go to··
ScopeFileFor
Project.mcp.jsonShared team tooling, version-controlled
User~/.claude.jsonPersonal and experimental servers
// .mcp.json — committed; the secret is not
{ "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
    } } }

2.5 — Built-in tools

Go to··
ToolJobSelection cue in a stem
GrepSearch file contents"find all callers of", "locate this error message", "which files import X"
GlobMatch file paths"all files named …", "**/*.test.tsx"
ReadLoad a full fileFollowing imports, tracing a flow
WriteWrite a full fileFallback when Edit can't anchor
EditTargeted change via unique text matchSmall precise modification
BashCommandsTests, builds, git

Deck additions From Domain 2 slides

Go to·

The four-part anatomy of a description

Write it for Claude, not for yourself — Claude cannot see inside your function.

Right-sizing: size tools around the choices Claude has to make. Split distinct actions; consolidate steps that always go together; avoid both extremes. The deck's worked case is travel booking — handle_travel(action, ...) forces Claude to guess an action string, whereas search_flights, book_flight and cancel_booking are picked unambiguously.

The cost of a vague interface is silence. Bad tool design does not crash. Claude picks the wrong tool, fills the wrong parameters, or gives up and answers in text. You see subtly wrong production behaviour and no error at all.

Return the error — don't throw it

A thrown exception becomes a low-level protocol error that Claude handles poorly. Return a successful response carrying isError: true plus details, so Claude sees the failure and can react to it.

Sanitise before returning. Say enough to recover and nothing that leaks internals. Never return a raw stack trace; wrap no such table: users_v2 as "the requested resource could not be accessed". A good message reads: "Couldn't fetch order #4471: database timed out after 5s. Transient — safe to retry."

Wider category vocabulary. The guide names transient, validation, business and permission. The deck also uses not_found and rate_limit as finer labels for the same distinctions. If an option offers those names, they are not wrong — judge on whether the retry decision they imply is right.

MCP in full

MCP is the USB-C of AI tooling: build the server once and any MCP client plugs in, instead of a bespoke connector per system. Tools are verbs Claude calls; resources are nouns it reads — a file, a schema, an issue summary. In Claude Code you pull a resource in by typing @.

ScopeFileWho gets it
local default~/.claude.jsonOnly you, only this project
project.mcp.jsonCommitted — the whole team
user~/.claude.jsonYou, across all your projects

Precedence: local > project > user. When the same server name exists at two scopes, the higher one wins, so your local override beats the team's shared entry. Running in a sub-folder also merges in parent .mcp.json files. Picking the wrong scope is named as the number-one MCP mistake — a personal token in project scope leaks to the whole team.

Transport is separate from scope. stdio means a local program Claude launches, configured with command and args. http means a remote server, configured with a url. Secret expansion — ${VAR}, with ${VAR:-default} for a fallback — works in command, args, env, url and headers.

/mcp reports connection status. Several servers run at once; name them meaningfully (github, stripe-prod) rather than server1.

Read before Edit, and prefer built-ins over Bash

Edit requires a prior Read, and the target text must match exactly and uniquely. If it is not unique, widen the surrounding text or use replace_all; only if you still cannot pin one spot does Read plus Write become the fallback. It is a last resort, not a default — a precise Edit produces a clean diff, whereas Write rewrites the file.

Use Read not cat, Grep not grep. Built-ins give better permission handling, a clearer audit trail, and are cacheable; Bash one-liners trigger extra permission prompts that cannot be cached. Save Bash for what it is uniquely good at — actually running things, like your tests or a build.

Currency check Verified Aug 2026

Full drift list
Guide saysCurrent primaryAlso valid
tool_choice is auto, any, or a named toolFour modes. none is the fourth — no tools this turn, text only, and the default when no tools are provided.With extended thinking enabled, only auto and none are valid; forcing any or a named tool returns an API error. disable_parallel_tool_use: true with any or tool forces exactly one call.
Error categories: transient, validation, business, permissionUnchanged as a reasoning frameworkLive code also uses finer labels — not_found, rate_limit, auth. Judge an option on the retry decision it implies, not on the label.
MCP servers live in .mcp.json or ~/.claude.jsonThree scopes: local (this project, just you, default), project (.mcp.json, committed), user (all your projects). Precedence local > project > user.Parent .mcp.json files merge in from sub-folders. ${VAR:-default} supplies a fallback. /mcp reports status.
Six built-in toolsStill the six that matter for the exam: Read, Write, Edit, Bash, Grep, GlobThe real roster is larger — WebFetch, WebSearch, AskUserQuestion, ExitPlanMode, PowerShell on Windows, plus every MCP tool. If an option names one of those, it is not automatically wrong; judge it on fit.
Read plus Write is the Edit fallbackUnchanged, but it is the last resortFirst widen the anchor text, or use replace_all. Edit requires a prior Read and an exact, unique match.

Domain 3 — Claude Code Configuration & Workflows 20% · ~12 items · 6 task statements Priority

Your second priority. This domain is almost entirely which file, which scope, which flag — memorisable, and therefore the cheapest points on the paper. Learn the file map until it's reflex.

3.1 — CLAUDE.md hierarchy, scoping, modularity

Go to··
LOADED FIRST WINS ON CONFLICT Managed policy /etc/claude-code/ deployed by IT cannot be excluded User ~/.claude/CLAUDE.md personal, all projects NEVER in git Project ./CLAUDE.md the team, committed put team rules HERE Directory src/api/CLAUDE.md loads on demand one area only .claude/rules/*.md — SAME priority as .claude/CLAUDE.md. With a paths: glob they load only for matching files, and append LAST. CLAUDE.local.md — personal + project-specific, gitignored. Auto memory (MEMORY.md) is a separate store Claude writes itself. "The new hire is not following our conventions" The rules are at USER level. Check the path before anything else — user scope never reaches a clone. Levels MERGE into one context, they do not replace each other. On a direct conflict the more specific or later level wins: project beats user, rules beat both.
Task statements 3.1 and 3.3 The exam keys three levels — user, project, directory. Managed policy sits above them and CLAUDE.local.md below project; the merge rule is unchanged, so a hierarchy question still answers the same way.
LevelPathShared via version control?Use for
User~/.claude/CLAUDE.mdNo — applies only to that userPersonal preferences
Project.claude/CLAUDE.md or root CLAUDE.mdYesTeam-wide standards everyone must get
DirectoryCLAUDE.md in a subdirectoryYesConventions for one area, bound to that directory
The diagnosis item "A new team member isn't following our conventions." Root cause: the instructions are in user-level config, which isn't shared. Fix: move them to project level so they're version-controlled. This exact reasoning — user-level is invisible to teammates — recurs across the domain.

Keeping it modular

3.2 — Custom slash commands and skills

Go to··
ArtefactProject scope (shared)User scope (personal)
Slash commands.claude/commands/~/.claude/commands/
Skills.claude/skills/<name>/SKILL.md~/.claude/skills/
MCP servers.mcp.json~/.claude.json
Instructions.claude/CLAUDE.md / root CLAUDE.md~/.claude/CLAUDE.md

"Available to every developer when they clone or pull" is always the project-scoped .claude/ directory. And .claude/config.json with a commands array does not exist — it's a recurring Doesn't exist distractor.

SKILL.md frontmatter

---
name: analyze-codebase
description: Maps module structure and dependencies.
context: fork          # run in an isolated sub-agent context
allowed-tools: Read, Write, Grep   # restrict tools during the skill
argument-hint: <module-path>       # prompt for a missing parameter
disable-model-invocation: true     # only you can trigger it (e.g. /deploy)
---
FieldSolves
context: forkVerbose or exploratory output polluting the main conversation — codebase analysis, brainstorming alternatives
allowed-toolsPreventing destructive actions during skill execution — e.g. limit to file writes. Keyed as a restriction. Real behaviour, confirmed in current docs: it pre-approves the listed tools for the invoking turn and does not block the others. disallowed-tools is the field that actually removes tools. Answer as the guide keys it.
argument-hintDevelopers invoking the skill with no arguments

Skills vs CLAUDE.md: skills are on-demand, for task-specific workflows. CLAUDE.md is always loaded, for universal standards. If the stem needs something applied automatically, skills are the wrong instrument — they need invocation.

Personal customisation of a team skill: create a variant in ~/.claude/skills/ under a different name, so teammates are unaffected.

3.3 — Path-specific rules for conditional loading

Go to··
# .claude/rules/testing.md
---
paths: ["**/*.test.tsx", "**/*.test.ts"]
---
Use React Testing Library. One assertion per test. Mock at the network boundary.
Why the other three lose One big CLAUDE.md with headers relies on inference, not matching Unreliable. Skills need invocation, contradicting "automatically" Wrong problem. Per-directory CLAUDE.md is directory-bound and can't follow scattered files Wrong problem.

3.4 — Plan mode vs direct execution

Go to··
Explore Read Grep Glob Plan numbered steps Approve you can edit it Execute writes unlocked Verify tests, typecheck revise the plan — cheap, nothing is built yet READ-ONLY. Write and Edit are blocked at the TOOL level, not by persuasion. Three ways in: Shift+Tab twice  ·  /plan  ·  --permission-mode plan (works headless with -p) Why it pays: 20 unguided decisions at 80% accuracy each → about 1% chance of being right throughout. Direct execution instead when: one file, one obvious approach, no architectural consequence.
Task statement 3.4 The blocked span is the point. "Start executing and switch to plan mode if complexity appears" is a distractor because the complexity is already stated in the requirements.

Plan mode

  • Large-scale changes; multi-file modifications
  • Multiple valid approaches
  • Architectural decisions
  • Safe exploration before committing, preventing costly rework

Monolith → microservices. A library migration touching 45+ files. Choosing between integration approaches with different infrastructure needs.

Direct execution

  • Simple, well-scoped, well-understood change
  • Clear scope, one file

A single-file bug fix with a clear stack trace. Adding one date-validation conditional.

Combine them: plan mode for investigation, then direct execution to implement the planned approach.

Explore subagent: isolates verbose discovery output and returns a summary — the answer when a multi-phase task risks exhausting the context window during discovery.

The trap phrasing "Start with direct execution and switch to plan mode if unexpected complexity appears" is wrong because the complexity is already stated in the requirements — it isn't something that might emerge. Likewise "direct execution with comprehensive upfront instructions" assumes you already know the right structure without exploring.

3.5 — Iterative refinement

Go to·
SituationTechnique
Prose description of a transformation keeps being interpreted differently2–3 concrete input/output examples — the most effective communication device here
You want progressive convergence on behaviourTest-driven iteration: write the suite first (expected behaviour, edge cases, performance), then iterate by sharing failures
Unfamiliar domain; you don't know what you don't knowInterview pattern — have Claude ask questions to surface considerations (cache invalidation, failure modes) before implementing
Edge case handled wrongly, e.g. nulls in a migration scriptSpecific test case with example input and expected output
Several issues, and the fixes interactOne detailed message containing all of them
Several independent issuesFix sequentially

3.6 — Claude Code in CI/CD

Go to··
claude -p "Review the diff for security issues" \
  --output-format json \
  --json-schema ./review-schema.json
FlagDoes
-p / --printNon-interactive: process the prompt, print to stdout, exit. The fix for a hanging CI job.
--output-format jsonMachine-parseable output
--json-schemaEnforces the shape of that output, so findings can post as inline PR comments

Doesn't exist --batch, CLAUDE_HEADLESS=true. And < /dev/null is a Unix workaround, not the documented mechanism.

The four CI context practices

Deck additions From Domain 3 slides

Go to··

How the memory levels actually combine

They merge into one working context rather than one replacing another, with enterprise policy sitting above all three. On a conflict the more specific or later level wins: your personal file says two-space indents, the project says four, the project wins. Path-specific rules are appended last, so they win over both.

Keep it lean. Roughly 200 lines is the guidance — a bloated CLAUDE.md measurably reduces adherence. Keep the pitfalls and conventions that differ from defaults, and the why behind a rule. Cut anything Claude can work out for itself: folder layout, dependency lists.

Typing # at the start of a message quick-adds a rule; Claude asks which memory file to save it to. And note @import keeps the file organised but everything still loads at launch, so it does not shrink your context.

Slash command mechanics

The filename becomes the command and the body is the prompt. $ARGUMENTS drops whatever you typed after the command name into the prompt, so fix-issue.md invoked as /fix-issue 123 receives 123.

Command frontmatterDoes
descriptionShows in /help, and lets Claude auto-suggest the command when your request matches it
argument-hintAutocomplete hint for the input
allowed-toolsPre-approves the tools it needs
modelPin a cheaper or faster model for this command

Commands have been merged into skills. A .claude/skills/<name>/SKILL.md also creates /name, adds a folder for supporting files, and can be auto-discovered so Claude invokes it when relevant rather than only when you type it. On a name clash between a command and a skill, the skill wins. Use disable-model-invocation: true for side-effect commands such as /commit or /deploy so Claude never fires them on its own.

Rules sit at the same priority as CLAUDE.md

.claude/rules/*.md and .claude/CLAUDE.md load at the same priority — rules are simply a tidier way to split the same content. With a paths: glob a rule is conditional and loads only for matching files; without one it loads every session. Mix both: unconditional files for project-wide conventions, path-scoped files for area-specific ones.

Plan mode is read-only, and there are three ways in

It is not a polite request. Plan mode blocks file-modifying tools at the tool level — Claude reads, searches and drafts a numbered plan, and Write and Edit cannot fire until you approve.

TriggerNotes
Shift+Tab twiceCycles Default → Auto-Accept → Plan; the status line shows the mode
/planType it in the prompt
--permission-mode planStart the session in plan mode — also works with headless -p runs

The plan loop: Explore → Plan → Approve → Execute → Verify. You can edit the plan before approving, and fixing a plan is cheap because nothing has been built yet.

Why planning pays: small decisions compound. Twenty unguided choices at 80% accuracy each leaves you around 1% likely to be right throughout. A plan catches the wrong turns before they cost anything.

The Explore subagent is a read-only scout limited to Read, Grep and Glob, working in a separate context window; only the findings return to your main session.

The full CI surface

claude -p runs to completion, prints the result, and exits with a status code your pipeline can branch on. Output formats are text (default), json and stream-json for real-time consumption. The json form returns the result plus metadata such as cost and session id, which you parse with jq; --json-schema forces an exact shape into structured_output.

GuardWhy it matters unattended
--max-turnsCaps how much work a stuck run can do
--allowedToolsNarrows permissions for the automated context
--max-budget-usdCaps cost — nobody is watching at 3am

And check the output content, not just the exit code. A run can exit zero having produced nothing useful.

Currency check Verified Aug 2026

Domain 3 has drifted the most of any domain, because Claude Code ships weekly. Every row below has an exam answer that is still keyed and a current answer that is different. has the full detail; ranks the alternatives.

Guide saysCurrent primaryAlso valid / deprecated but working
Shared commands go in .claude/commands/<name>.md.claude/skills/<name>/SKILL.md — commands were merged into skills in v2.1.3. A skill also creates /name..claude/commands/*.md keeps working with the same frontmatter and is not removed. On a name clash the skill wins. A plugin is the packaged form when you want to ship skills, agents, hooks and MCP servers together.
allowed-tools restricts a skill's toolsdisallowed-tools removes tools while the skill is active. allowed-tools pre-approves for the invoking turn only.For a hard block use deny rules in permission settings; for autonomous firing use disable-model-invocation: true or a Skill(name) deny rule.
Three SKILL.md frontmatter fieldsTwenty. Beyond context, allowed-tools and argument-hint: when_to_use, arguments, disallowed-tools, user-invocable, disable-model-invocation, model, effort, agent, background, hooks, paths, shell, metadata.Only name, description, license, compatibility, metadata and allowed-tools are portable outside Claude Code, per the Agent Skills standard.
Three memory levelsFour, plus a second system. Managed policy sits above user; CLAUDE.local.md sits below project; and auto memory is a parallel store Claude writes itself.The merge-then-most-specific-wins rule is unchanged, so a hierarchy question still answers the same way. ~/.claude/rules/ gives user-level rules, loaded before project rules.
/memory shows what loaded/context shows what loaded, under Memory files./memory lists locations, opens files and toggles auto memory. /doctor audits the setup and proposes CLAUDE.md trims. The InstructionsLoaded hook traces loading precisely.
.claude/rules/ with paths: for cross-cutting conventionsUnchanged and still the primary answerSkills now accept paths too, with the same glob format, but they gate auto-loading of a procedure rather than always-on conventions. Rules also gained recursive discovery, symlinks and brace expansion.
Plan mode via Shift+Tab, /plan, --permission-mode planUnchanged, and it genuinely blocks file-modifying toolsPlan is one of six permission modes: default, acceptEdits, plan, auto, dontAsk, bypassPermissions.
CI: -p, --output-format json, --json-schemaAll current and all correctAdd --max-turns, --max-budget-usd, --allowedTools, --bare (skip discovery of hooks, skills, plugins, MCP and CLAUDE.md for reproducible scripts), --append-system-prompt, --effort. Session flags: -c, -r, --session-id.
AGENTS.md is not mentionedClaude Code reads CLAUDE.md, not AGENTS.mdIf your repo has one, import it (@AGENTS.md) or symlink it. /init also reads Cursor and Copilot rule files; /import brings another agent's configuration across.
What to do with this on exam day If an item offers .claude/commands/ and does not offer skills, choose it. If it offers both, choose the one the stem's language points at — a stem written from the guide will say "custom slash command", and the commands directory is the intended answer. Nothing here changes the underlying judgment being tested: project scope for shared, user scope for personal, glob rules for cross-cutting, hooks for guarantees.

Domain 4 — Prompt Engineering & Structured Output 20% · ~12 items · 6 task statements

4.1 — Explicit criteria to cut false positives

Go to·

Specific categorical criteria beat vague instruction, every time.

WorksDoesn't
"Flag comments only when the claimed behaviour contradicts the actual code behaviour""Check that comments are accurate"
"Report bugs and security issues; skip minor style and locally-consistent patterns""Be conservative" / "only report high-confidence findings"
Severity definitions with a concrete code example per levelSeverity adjectives with no anchor

Trust dynamics: one high-false-positive category poisons confidence in the accurate ones. The keyed tactic is to temporarily disable the noisy category to restore trust while you improve its prompt — not to bury it behind a confidence filter.

4.2 — Few-shot prompting

Go to·

Few-shot is the answer when detailed instructions alone produce inconsistent results. Use 2–4 targeted examples, aimed at the ambiguous cases, and show the reasoning for choosing one action over a plausible alternative.

Where few-shot is the wrong answer When the requirement is a guarantee (verify identity before refunding), few-shot is Probabilistic. When the root cause is a minimal tool description, few-shot adds tokens without fixing the cause.

4.3 — Structured output via tool_use and JSON schemas

Go to··

tool_use with a JSON schema is the most reliable route to schema-compliant output: it eliminates JSON syntax errors. It does not eliminate semantic errors — line items that don't sum, values in the wrong field.

{ name: "extract_invoice",
  input_schema: {
    type: "object",
    properties: {
      invoice_number: { type: "string" },
      po_number:      { type: ["string", "null"] },   // nullable: may be absent
      category:       { type: "string", enum: ["goods","services","other","unclear"] },
      category_detail:{ type: ["string", "null"] },       // pairs with "other"
      stated_total:   { type: "number" },
      calculated_total:{ type: "number" }                // semantic cross-check
    },
    required: ["invoice_number", "stated_total"]
  } }

4.4 — Validation, retry, feedback loops

Go to··
Document unstructured Extract schema-constrained Syntax: guaranteed valid JSON, right types no missing declared fields Validate MEANING sums · dates · fabrication your code, not the schema Accept to downstream pass retry ≤ 2–3 times, carrying document + failed output + the SPECIFIC error UNRESOLVABLE — information absent from the source No number of retries invents it. Make the field nullable, or send the missing document. RESOLVABLE — format, type, wrong field, sum mismatch, missed field Retry with feedback fixes most of these on the second attempt. Then cap and escalate.
Task statements 4.3 and 4.4 The two boxes on the right are the whole lesson: a schema guarantees shape and never touches meaning. Line items of 200,000 and 280,000 against a stated total of 500,000 is perfectly valid JSON.

Retry with error feedback: the follow-up request includes the original document, the failed extraction, and the specific validation error.

Error typeRetry helps?
Format mismatch, structural output errorYes
Semantic error (values don't sum, wrong field)Yes, with the specific error stated
Required information is absent from the source (it lives in another document you didn't provide)No. Retrying cannot invent it. This is a schema/nullable or sourcing problem.

Self-correcting validation design: extract calculated_total alongside stated_total to flag discrepancies; add a conflict_detected boolean for inconsistent source data.

Feedback-loop instrumentation: add a detected_pattern field to every finding so that when developers dismiss findings you can analyse which code constructs trigger false positives.

4.5 — Batch processing

Go to··
created_at ~1 hour 24 hours 29 days Submit unique custom_id each Most batches END here poll, or use a webhook EXPIRY unfinished work dropped RETENTION ENDS from created_at, not from finish The two numbers people swap: 24h is the EXPIRY, 29 days is the RETENTION. Ceiling 100,000 requests or 256 MB → else 413. Workspace-scoped. One failure does not affect the others. 50% off input AND output, separate rate-limit pool. No streaming. No multi-turn tool calling in a request. Cadence: 30-hour promise against a 24-hour worst case → submit every 4h. A nightly batch cannot meet it.
Task statement 4.5 Plan against the expiry, not the typical case. "Batches are usually faster than the worst case" appears verbatim as a distractor for a blocking workflow.
Message Batches APIFact
Cost50% savings
LatencyUp to a 24-hour window, no guaranteed SLA
Correlationcustom_id pairs request to response — so "result ordering" is a non-issue
Tool callingNo multi-turn tool calling within a request — it can't execute tools mid-request and feed results back

Fit: non-blocking, latency-tolerant — overnight reports, weekly audits, nightly test generation. Misfit: anything a human is waiting on, especially a blocking pre-merge check. "Batches are often faster than 24h" is not an acceptable basis for a blocking workflow.

4.6 — Multi-instance and multi-pass review

Go to··
Three distractors on the 14-file review item Bigger context window Wrong problem — window size isn't attention quality. Make developers split the PR Shifts burden. Run three passes and keep only issues appearing twice Suppresses signal — real bugs found intermittently get filtered out.

Deck additions From Domain 4 slides

Go to·

Severity, defined

LevelMeaningAnchor example
CriticalBlocks the releaseA hard-coded password
MajorFix soonMissing error handling
MinorNice to fixAn inconsistent name

Without severity a typo and a security hole look equally urgent, and the important issue gets buried. The mirror term for a false positive is a false negative — missing a real issue. Both hurt; false positives are the trust-killer. The deck's worked contrast: "review this code" yields 15 flags, mostly style noise, and the team ignores all of them; criteria plus severity plus a tuned category yields 3 flags — one critical, two major — and the team acts. The good reviewer finds fewer things.

Few-shot, precisely

Shot just means example. Zero-shot is instructions only, one-shot is one example, few-shot is several. Practical parameters from the deck: typically 2–5 examples, stopping when accuracy plateaus; keep every example's format identical, since inconsistent formatting confuses the pattern; and place the examples before the real input. Always include one case where the correct answer is "not specified" or null, or Claude infers it must always produce a value and fabricates.

There is no dedicated JSON mode — in the exam's world

The keyed pattern is a tool whose input_schema describes your fields; Claude "calls" the tool and its answer is the tool input, so you read a clean tool_use block instead of prose. Two operational details: a malformed schema is rejected up front with a 400 before Claude even runs, so validate the schema first; and left on auto, Claude may skip the tool and hand you prose — use any or a forced named tool when you need the guarantee.

— native structured outputs now exist on the platform. The guide keys forced tool use; answer that way.

The validation and retry loop, in full

Extract → validate → feedback → re-validate → escalate at the cap. Common semantic checks: do the line items sum to the total, is the date real and in range, and does every extracted value actually appear in the source document (the fabrication check).

Cap the retries at roughly 2–3, then flag for a human or mark the record low-confidence. No cap is an infinite loop spending money on an input Claude may be unable to fix. The deck's worked case: line items of 2,000 and 2,800 with a stated total of 5,000 — the JSON was valid both times, and only the validation step caught it. One retry carrying "the sum is 4,800" fixed it.

Batch, in operational detail

PropertyValue
Discount50% off input and output tokens, with a separate rate-limit pool
LatencyResults within 24 hours, often minutes to hours. No SLA, no streaming.
SizeUp to roughly 100,000 requests or 256 MB per submission — split huge jobs into sequential batches
WorkflowSubmit → poll (or webhook) → retrieve as JSONL matched by custom_id → save
RetentionResults kept only about 29 days — persist them immediately
LimitNo multi-turn tool calling within a request

The decision rule in one line: is it acceptable for the consumer to get this within 24 hours? Yes means batch; no means the synchronous API.

Aggregating multiple passes

Merge, don't concatenate. De-duplicate overlapping findings, keep the highest severity where two passes disagree, and group by confidence for routing. Two passes reporting the same issue must appear once, at its true severity, or you have recreated the trust problem from 4.1. Confidence itself is reported as high, medium or low on each finding.

Currency check Verified Aug 2026

Full drift list
Guide saysCurrent primaryAlso valid
There is no dedicated JSON mode; forced tool_use plus a schema is the most reliable routeStructured outputs, now GA: output_config: {format: {type: "json_schema", schema: {…}}}. The schema compiles to a grammar and constrains generation token by token.Strict tool usestrict: true on a tool definition — when the model must act rather than just return data. Forced tool_use with input_schema remains correct, and remains the exam answer.
Nullable fields prevent fabrication; enums need "other" and "unclear"Entirely unchanged, and now more importantGrammar-constrained generation makes the schema binding, so a badly designed required field forces the model into fabrication with no escape at all. Schema design is the fix either way.
Schemas guarantee shape, not meaningStill exactly trueStructured outputs guarantee the response matches your schema. They do not guarantee the values are correct. The 4.4 validation loop is unaffected by anything in this row.
Batch: 50% cheaper, up to 24 hours, no SLAAll correct. Add the precise ceilings: 100,000 requests or 256 MB per batch, 413 above that.Most batches complete within an hour; 24 hours is the expiry, not the expectation. Results are downloadable for 29 days from creation. Batches are workspace-scoped. One request failing does not affect the others.
Few-shot: 2–4 targeted examples2–5 is the current guidance; stop when accuracy plateausIdentical formatting across examples, placed before the real input, with one missing-data case included. Unchanged in substance.
Extended thinking is out of scopeMostly still true for the examTwo things now intersect Domain 4: extended thinking cannot be combined with forced tool_choice, and adaptive thinking plus effort levels (low to max) have replaced manual thinking budgets on newer models.

Domain 5 — Context Management & Reliability 15% · ~9 items · 6 task statements

5.1 — Conversation context across long interactions

Go to··
reliably processed start the middle gets dropped end Fix: lead with a KEY FINDINGS block, then label every section with an explicit header. "Read the whole input carefully" does not move a positional effect. CASE FACTS — verbatim, in every prompt, outside the summary CONVERSATION SUMMARY — lossy: amounts, dates, promises
Task statement 5.1 Two separate ideas that share one cause. Position determines what survives a long input; summarisation determines what survives a long conversation. Numbers and commitments must sit outside both.

5.2 — Escalation and ambiguity resolution

Go to··
EscalateDo not escalate
Customer explicitly asks for a human — immediately, without investigating firstMerely complex cases you can actually handle
Policy is ambiguous or silent on the request (competitor price matching when policy only covers own-site adjustments)Standard damage replacement with photo evidence
Cannot make meaningful progressFrustrated customer with a resolvable issue — acknowledge the frustration, offer resolution, escalate only if they reiterate

5.3 — Error propagation across multi-agent systems

Go to··
{ status: "error",
  failure_type: "timeout",
  attempted: "web_search: 'AI adoption in film post-production 2024'",
  partial_results: [ /* 3 of 12 sources retrieved */ ],
  alternatives: ["narrower query", "try industry-report source"] }

That structure is what lets the coordinator choose: retry modified, try an alternative, or proceed with partial results and annotate the gap.

5.4 — Context in large codebase exploration

Go to·

5.5 — Human review workflows and confidence calibration

Go to··
THE NUMBER YOU ARE SHOWN Overall accuracy 97% THE SAME DATA, SEGMENTED invoice 99.8% receipt 99.5% contract 62%  ◀ here Automating on the left ships the contracts. 1. SEGMENT by type AND field 2. CALIBRATE against labelled data 3. ROUTE thresholds per segment 4. SAMPLE FOREVER inside the auto tier Confidence is not accuracy: when the model says 0.9, check that it is right about 9 times in 10. Rejected: auto-approve and watch complaint volume — that uses customers as the test harness. Stratify the sample WITHIN each document type, or a rare type is never checked.
Task statement 5.5 The order is what is tested: segment, calibrate, route, then sample forever. Reaching straight for a confidence threshold acts on an aggregate nobody has examined.

5.6 — Provenance and uncertainty in multi-source synthesis

Go to··

A note on sources Coverage

Go to·

There is no consolidated Domain 5 slide deck in this project — the other four domains each have one, Domain 5 does not. Everything above is drawn from the exam guide plus the six individual Domain 5 lecture decks (5.1 conversation context, 5.2 escalation, 5.3 error propagation, 5.4 codebase context, 5.5 human review, 5.6 provenance), all of which are captured rule by rule in the .

Practical consequence: Domain 5 is the one domain where you have slightly less material than the others, and it is also the smallest at 15%. Do not over-invest here. The six task statements are highly formulaic — each has one canonical fix, listed above — so the recall drills are a more efficient use of your time than re-reading.

Currency check Verified Aug 2026

Domain 5 is the most durable of the five, because it teaches judgment rather than configuration. Almost nothing here has drifted — which is a reason to trust the time you spend on it.

Guide saysStatus
Claude is stateless; pass the full history every callUnchanged.
Case-facts block outside the summarised historyUnchanged, and now complemented by auto memory, which persists learnings across sessions in MEMORY.md — a store Claude writes, not you.
Lost-in-the-middle; lead with key findingsUnchanged.
Three escalation triggers; never sentiment or self-confidenceUnchanged.
Structured error context for coordinator recoveryUnchanged.
Scratchpad files, subagent delegation, /compactAll current. /compact now also has documented survival rules: the project-root CLAUDE.md is re-read from disk and re-injected after compaction, whereas nested CLAUDE.md files and path-scoped rules are not re-injected until Claude next touches a matching file.
Crash recovery via exported state and a manifestUnchanged as a pattern. Sessions also have /rewind checkpoints now, though a backgrounded fork's edits sit outside them.
Segment accuracy before automating; calibrate confidence; stratified samplingUnchanged. This is measurement discipline, not product surface.
Claim-to-source mapping, dates, settled vs contestedUnchanged.
The one durable lesson Configuration drifts; judgment does not. Every row in Cards 9 and 11 is a renamed file or a new flag. Not one of them changes the reasoning the exam is actually testing — fix the root cause, size the fix to the evidence, and use a guarantee only where a guarantee is required.