Coordinator and subagent patterns: CCAR-F task statement 1.2
CCAR-F · Agentic Architecture & Orchestration (27% of the exam)
Task statement 1.2 sits in Agentic Architecture & Orchestration, the largest CCAR-F domain at 27% of the exam. It tests one design skill: building a coordinator agent that splits the work, sends each part to the right subagent, collects the results and checks for gaps before it answers.
What the official guide covers
The Claude Certified Architect Foundations exam guide (version 1.0, effective July 2026) lists this under task statement 1.2, "Orchestrate multi-agent systems with coordinator-subagent patterns":
| Knowledge of | Skills in |
|---|---|
| Hub-and-spoke design: the coordinator handles all communication between subagents, all error handling and all routing of information | Designing coordinators that look at what a query needs and choose which subagents to call, instead of running the full pipeline every time |
| Subagents work in isolated context and do not inherit the coordinator's conversation history | Splitting research scope across subagents (by subtopic or source type) so they do not repeat each other's work |
| The coordinator's jobs: decompose the task, delegate, combine results, and pick subagents based on how complex the query is | Running refinement loops: the coordinator checks the synthesis for gaps, sends targeted queries back to search and analysis subagents, and runs synthesis again |
| Splitting a broad topic too narrowly leaves parts of it uncovered | Routing all subagent communication through the coordinator for observability, consistent error handling and controlled information flow |
How hub-and-spoke works
The coordinator is the hub. Each subagent is a spoke. Subagents never talk to each other directly.
- The coordinator reads the request and decides what work it needs.
- It writes a task for each subagent it chooses: the goal, the scope, the sources to use and the format of the answer.
- Each subagent runs in its own fresh context, does its work with its own tools and returns only its final message to the coordinator.
- The coordinator reads the results, handles any failures, and decides what happens next: answer, ask for more, or pass findings to another subagent.
In the Claude Agent SDK, a subagent's context starts without the parent's conversation history, the parent's system prompt or the parent's tool results. The only thing that crosses from coordinator to subagent is the task prompt the coordinator writes. Task statement 1.3 covers how to write that prompt and what to put in it: see 1.3 Subagent invocation and context passing.
Isolation works in both directions. A search subagent can read 40 pages, and none of that reaches the coordinator except the summary it returns. That keeps the coordinator's context small, and it is why the coordinator must ask for exactly what it needs back.
What the coordinator decides
| Coordinator job | What good looks like | What goes wrong |
|---|---|---|
| Decompose | Subtasks that together cover the whole question | Subtasks that cover only one corner of a broad topic |
| Select | Call only the subagents the query needs | Run every subagent on every query, including simple lookups |
| Partition | Give each subagent a distinct subtopic or source type | Two subagents search the same sources and return the same findings |
| Aggregate | Combine results, keep sources, note gaps | Paste results together without checking coverage |
| Handle errors | Receive failures and decide: retry, reroute or report the gap | Subagents fail silently or call each other to recover |
Match effort to the query. A single fact needs one subagent or none. A comparison of three vendors might need one subagent per vendor. A broad research question needs several subagents with clear, separate scopes. Anthropic's write-up of its own research system describes the lead agent giving each subagent an objective, an output format, guidance on tools and sources, and clear task boundaries. Without those, subagents duplicate work and leave gaps.
A coordinator in the Agent SDK (Python)
This coordinator has three subagents. Each has a description that tells the coordinator when to use it, its own system prompt and a restricted tool list. None of the subagents has the Agent tool, so they cannot spawn subagents of their own and every hand-off goes back through the coordinator.
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition
COORDINATOR_PROMPT = """You coordinate a research team. For each request:
1. Decide which subagents the request needs. Simple fact checks need only web-search.
2. Give each subagent a distinct scope (subtopic or source type) so work does not overlap.
3. Pass all findings to synthesis yourself. Subagents never talk to each other.
4. Check the synthesis against the original question. If a part is not covered,
send a targeted follow-up to web-search or doc-analysis, then run synthesis again.
5. Stop when every part of the question is covered or a gap is explained."""
agents = {
"web-search": AgentDefinition(
description="Finds current public sources on one assigned subtopic. Returns claims with URLs.",
prompt="Search only within the scope you are given. Return each finding with its source URL and date.",
tools=["WebSearch", "WebFetch"],
),
"doc-analysis": AgentDefinition(
description="Analyses internal documents in ./library on one assigned question.",
prompt="Read only the documents relevant to your question. Cite file name and page for every finding.",
tools=["Read", "Grep", "Glob"],
),
"synthesis": AgentDefinition(
description="Combines findings supplied in the prompt into a cited report. Does no new research.",
prompt="Use only the findings in your prompt. Keep every citation. List any part of the question the findings do not answer.",
tools=["Read"],
),
}
async def main():
options = ClaudeAgentOptions(
system_prompt=COORDINATOR_PROMPT,
# auto-approve spawning subagents and the tools the subagents use
allowed_tools=["Agent", "WebSearch", "WebFetch", "Read", "Grep", "Glob"],
agents=agents,
)
async for message in query(prompt="How is AI changing the creative industries?", options=options):
if hasattr(message, "result"):
print(message.result)
asyncio.run(main())
The synthesis subagent lists unanswered parts of the question. That list is what drives the coordinator's refinement loop in step 4.
The refinement loop
A single pass of search, analysis and synthesis often leaves holes. The guide expects the coordinator to close them:
- Run synthesis on the first round of findings.
- Compare the synthesis with the original question. List the parts it does not cover.
- Send targeted queries for only those parts to the search or analysis subagent.
- Run synthesis again with the old and new findings.
- Stop when coverage is sufficient or the remaining gap is reported in the answer.
The loop is coordinator logic. Subagents do not decide that more research is needed and do not call each other to get it.
Handling failures at the hub
Every result comes back through the coordinator, so the coordinator is where failures are caught. They do not all carry the same risk:
| Failure | Where it is caught | What the coordinator does |
|---|---|---|
| A subagent times out or returns nothing | At the subagent boundary | Retry the unit, give it to another subagent, or record the gap |
| A subagent returns a malformed result | When the coordinator checks the result | Reject it and re-run that unit with a clearer task |
| Two subagents report conflicting facts | At synthesis | Apply a stated rule (for example, show both figures with their sources) or flag it for a person |
| A subagent's verdict would trigger an action that cannot be undone (archive, delete, send) | Before the action runs | Pause for a person to approve; a subagent's result is an input to that decision, not permission |
| The coordinator loses its plan or progress | Nowhere: nothing sits above it | Keep the plan and the list of dispatched units outside the conversation so a failed run can resume instead of restarting |
A subagent failure is usually recoverable, because the coordinator still holds the goal. A coordinator failure usually is not. Design for that difference: make subagent tasks safe to re-run, and protect the coordinator's state.
The most damaging failure is the silent one. A coordinator splits a due diligence question across 12 subsidiaries, one subagent each. Two subagents time out and return nothing. Synthesis writes a fluent report on the other 10, and nothing in it says two are missing. The fix is a coverage check before synthesis: the result count must match the count of dispatched units, and each missing unit is either re-run or named in the answer.
When a coordinator is worth the cost
Each subagent works in its own context and spends its own tokens, so a coordinator with five subagents costs several times what one agent costs for the same question. Anthropic's write-up of its research system reports that multi-agent runs use many more tokens than a chat, and that the pattern suits broad questions that split into independent parts. It is a poor fit for tightly coupled work, such as most coding tasks, where each step waits on the one before. There, a single agent with good context is cheaper and just as good.
Two levers keep the cost in line. Select subagents per query, as above. And use the model field on AgentDefinition to run narrow subagent tasks on a faster, cheaper model while the coordinator keeps the more capable one.
Rules that decide exam answers
- Look at the decomposition first. If every subagent did its job well but the report misses whole areas, the coordinator split the topic too narrowly. Do not blame the subagents downstream.
- Route everything through the coordinator. Options where subagents call each other directly lose observability and consistent error handling. The hub-and-spoke answer is the right one.
- Match the team to the query. A design that runs the full pipeline for a one-line fact check wastes time and tokens, so the coordinator should choose. Fan out only when the parts can run without waiting on each other; for tightly coupled work, one agent with good context is the better answer.
- Partition scope explicitly. When two subagents return the same sources, give them distinct subtopics or source types in their task prompts.
- Subagents start with nothing. A subagent does not see the coordinator's history. Any option that relies on it "already knowing" the earlier findings is wrong.
- Count before you synthesise. If a report looks complete but some units never came back, the fix is a coverage check at the coordinator (results returned must match units dispatched), not a better synthesis prompt.
Where it appears in the exam
Domain 1 is a primary domain in three of the six exam scenarios: Customer Support Resolution Agent, Multi-Agent Research System and Developer Productivity with Claude. Coordinator questions fit the Multi-Agent Research System scenario most closely, where a coordinator delegates to search, document analysis, synthesis and report subagents. The guide's preparation exercise "Design and Debug a Multi-Agent Research Pipeline" reinforces this domain.
Two sample questions
These are original Timo practice questions. They are not official exam questions.
Build exercise
- Build the coordinator above with the Python Agent SDK and run one simple question and one broad question. Log which subagents the coordinator calls for each.
- Give both search subagents the same vague task and note the overlap in their sources. Then add distinct scopes to the coordinator prompt and compare.
- Ask a broad question and check whether the synthesis lists uncovered parts. Confirm the coordinator sends targeted follow-ups and runs synthesis again.
- Make the doc-analysis subagent fail (point it at an empty folder) and check that the coordinator reports the gap instead of inventing findings.
Practise this topic
- Claude Certified Architect practice exam: free, 20 questions, no sign-up
- Claude Certified Architect hub
- CCAR-F study guide: all topics
- Same topic in another exam: CCDV-F Agent Architecture
- Previous topic: 1.1 Agentic loops
- Next topic: 1.3 Subagent invocation and context passing
Sources
- Claude Certified Architect Foundations Exam Guide, version 1.0, effective July 2026 (Anthropic), task statement 1.2
- Claude Agent SDK documentation: Subagents in the SDK
- Anthropic: How we built our multi-agent research system
- Anthropic: Building effective agents
By Amotion AI