Rubric
Contents — domains, guide and mocks

Error propagation across agents

CCAR-F 5.313 min read · checked 21 September 2026

Task statementImplement error propagation strategies across multi-agent systems

Where each kind of failure should be handled

bottom-up: a failure travels upward only as far as it must

  1. Final outputshows coverage gaps to the reader
  2. Coordinatorreroutes, retries differently, or proceeds partially
  3. Subagentretries transient errors, reports what remains
  4. Toolreturns a clear, typed error — is_error / isError
Each layer handles what it can and passes the rest up as structured context — never as silence, and never as a crash of everything above it.

Why multi-agent errors are different

In a single loop, a tool error lands straight back in the model’s context and it can react. In a coordinator–subagent system there is a second hop. A subagent runs in its own context, and only its final message returns to the coordinator as the Agent tool result — the coordinator never sees the tool calls, error messages and retries that happened inside. Whatever the subagent writes in that final message is all the coordinator knows. If it says nothing about a failure, the failure has disappeared.

Anthropic’s write-up of its multi-agent research system names the consequence: agents are stateful and long-running, so errors compound, and a minor failure early on can send the rest of the run down the wrong path. Their fixes combine the model’s adaptability with deterministic safeguards — telling the agent when a tool is failing and letting it adapt, plus retry logic, regular checkpoints, and resuming from where the error occurred instead of restarting from scratch.

The two failure modes, and the fix

Silent suppression

  • Subagent catches a timeout, returns []
  • Coordinator reads “no results found”
  • Report omits a whole topic, looks complete
  • Nobody knows a search never ran

Structured propagation

  • Subagent retries, then reports status failed
  • Includes what was tried and partial results
  • Coordinator reroutes or proceeds knowingly
  • Report states the gap and why

The opposite extreme is just as bad. If any single subagent error raises an exception that ends the whole task, one flaky data source throws away the work of every other subagent. The goal is neither silence nor collapse, but a failure that arrives, intact, at the level that can decide what to do.

Empty is not the same as failed

The most important distinction in this task statement is between a valid empty result and an access failure. “The search ran and found no matching filings” is a finding; the coordinator should trust it. “The search timed out” means nothing is known; the coordinator should retry, reroute or flag it. If both come back as an empty list, the system cannot tell them apart — and it will report absence of evidence as evidence of absence.

The protocols already give you the tools for this at the lowest level. In the Messages API, a failed tool call returns a tool_result with is_error: true and an instructive message; the documentation advises saying what went wrong and what to try next, such as a rate limit with a retry delay, rather than a bare “failed”. The MCP specification separates protocol errors (unknown tool, malformed request) from tool execution errors, which come back as a normal result with isError: true — API failures, invalid inputs, business-rule violations — and says clients should pass execution errors to the model so it can self-correct. (Designing those error payloads is covered in 2.2.)

Kind of failureRetry locally?What to pass up
Transient: timeout, rate limit, overloadYes, a bounded number of timesOnly if retries run out — with attempts made
Invalid input: bad date format, unknown IDYes, with corrected inputOnly if it cannot be corrected
Permission or access deniedNoImmediately — someone must grant access or reroute
Business rule: over limit, not allowedNoImmediately — it is a decision, not a glitch
Valid empty resultNo — it is not an errorAs a finding, clearly marked as searched-and-empty

What a subagent should hand back

Because the final message is the whole interface, design it as a contract. Ask each subagent (in its system prompt, or via structured output) to return a status, its findings, and — when anything went wrong — the failure type, what it attempted, any partial results, and what it suggests. The coordinator can then act on fields rather than guess from prose.

A subagent result that carries its own failure contextjson
{
  "status": "partial",
  "subtopic": "Competitor pricing, Nordic region",
  "findings": [
    { "claim": "Brand X cut entry-tier prices 8% in August",
      "source": "https://example.com/brandx-q3", "retrieved": "2026-09-20" }
  ],
  "failures": [
    { "type": "transient",
      "what": "search_news timed out",
      "attempts": 3,
      "retryable": true,
      "not_covered": "Brand Y and Brand Z news since June" }
  ],
  "suggestion": "Retry news later, or use company press feeds"
}

Current Claude Code builds help at this boundary too. The subagent documentation says that a subagent ending on an API error — a usage limit or repeated server error — now reports that failure to the coordinator rather than passing error text off as findings; a foreground subagent that had already written output returns it marked as cut off, and a background one is marked failed with its last output attached. A subagent that stops at its maxTurns limit has its output marked as partial, and it can be resumed to continue instead of being restarted.

A search subagent times out

Coordinator
News subagent
Search tool
Step 1: Coordinator to News subagent: Research Nordic pricing news
Step 2: News subagent to Search tool: search_news(…)
Step 3: Search tool to News subagent: is_error: timeout
Step 4: News subagent to Search tool: Retry ×2, still failing
Step 5: News subagent to Coordinator: status partial + failure details
Step 6: Coordinator : Reroute to press-feed agent
The retry happens where the error occurred; the decision about what to do next happens where the whole picture is.

What the coordinator does with a failure

Coordinator options on a reported failure

The subagent reported a failure. Now what?
  • Retryable, time allows
    Retry or resumeresume, don’t restart
  • Other source can cover it
    Reroutedifferent agent or tool
  • Gap is minor
    Proceed, annotatestate the gap in output
  • Gap breaks the answer
    Stop and escalatewith partial results

Traps the wrong answers are built from

Tempting but wrongDo this instead
Catching subagent errors and returning an empty result as successReturn a status of failed or partial with the error type, attempts and partial results.
Aborting the whole workflow when one subagent failsLet the coordinator reroute, retry differently, or proceed with the gap annotated.
Returning a bare “operation failed” messageSay what failed, whether it is retryable, and what to try next.
Retrying permission or business-rule errorsRetry only transient and correctable errors; propagate the rest immediately.
Restarting a long run from scratch after a late failureCheckpoint progress and resume from where the error occurred.

You should now be able to

  • Decide which errors a subagent should recover from locally and which it should propagate.
  • Design a subagent result format that carries status, failure type, attempts and partial results.
  • Distinguish access failures from valid empty results in tool and subagent outputs.
  • Use is_error in tool results and know how MCP separates protocol from execution errors.
  • Choose between retrying, rerouting, proceeding with annotated gaps and escalating at the coordinator.

Practice questions

Original questions written for this lesson, in the exam’s style. Answer first, then open the reasoning — every option is explained, including why the wrong ones are tempting.

  1. Question 1

    In a multi-agent research system, the web-search subagent wraps its search call in a try/except and returns an empty list of findings on any exception. Users report that final reports sometimes skip entire subtopics without explanation.

    What is the most effective change?

    1. AHave the coordinator re-run any subagent that returns an empty list.
    2. BRaise the exception so the whole research task stops and the user is alerted.
    3. CReturn a failure status with error type, attempts and partial results instead of [].
    4. DAdd “always find at least one result” to the subagent’s prompt.
    Show answer and reasoning
    1. AIncorrect. It cannot tell failures from genuinely empty searches, so it wastes calls on real empties and still guesses.
    2. BIncorrect. One failed search then discards every other subagent’s work — over-propagation.
    3. CCorrect. The coordinator can then tell failed from empty and choose to retry, reroute or annotate the gap.
    4. DIncorrect. Pressures the model to invent findings rather than exposing the failure.
  2. Question 2

    Which two errors should a subagent generally propagate to its coordinator immediately, rather than retrying itself? (Select 2.)

    1. AThe search API returns HTTP 429, rate limit exceeded.
    2. BThe document store denies access to the folder the subagent was told to read.
    3. CA date parameter was sent as “31/12/2026” but the tool expects ISO 8601.
    4. DA refund tool rejects a $5,000 refund because it exceeds the policy limit.
    5. EThe network connection to the database resets once mid-query.
    Show answer and reasoning
    1. AIncorrect. Transient; a bounded retry with back-off is the right first response.
    2. BCorrect. Retrying cannot grant permission; someone above must reroute or obtain access.
    3. CIncorrect. Correctable locally — resend with the right format.
    4. DCorrect. A business-rule refusal is a decision for someone with authority, not a glitch to retry.
    5. EIncorrect. Transient; one retry will usually succeed.
  3. Question 3

    A coordinator receives a partial result from one of five subagents: a regulatory database was unavailable, so one jurisdiction is not covered. The other four jurisdictions are complete, and the report is due within the hour.

    What should the coordinator do?

    1. ADeliver the report with the gap stated, and reroute if another source can cover it in time.
    2. BDiscard all results and start the whole research task again.
    3. CDeliver the report covering four jurisdictions without mentioning the fifth.
    4. DHave the synthesis agent infer the fifth from the other four.
    Show answer and reasoning
    1. ACorrect. Uses the partial work, tries an alternative, and makes the gap visible to the reader.
    2. BIncorrect. Throws away four complete jurisdictions; resume or reroute instead of restarting.
    3. CIncorrect. A silent gap: the reader will assume the report is complete.
    4. DIncorrect. Fills a coverage gap with fabricated content presented as research.

Sources

Drafted with AI assistance and checked against the sources above; expert review is in progress. Spotted an error? Tell us and it gets fixed, dated and listed on how this is written.