The Atlas Research team runs a multi-agent research system on the Claude Agent SDK, where a coordinator decomposes a question and delegates to web search, document analysis, synthesis and report generation subagents. When a web search subagent cannot reach a source, it returns the single line "status: error" to the coordinator. Telemetry across 1,200 runs shows the coordinator reissuing the identical query an average of 3.4 times before abandoning the branch, and 94 percent of those repeat attempts fail in exactly the same way. Which change most effectively addresses the retry behaviour?
- ARaise the coordinator's per-branch retry ceiling from three attempts to eight, so that a source suffering a transient outage has longer to recover before the branch is abandoned.
- BRoute the failing source lookups through the Message Batches API so that the repeated attempts run asynchronously and no longer hold up the coordinator's other research branches.
- CAdd few-shot examples to the coordinator's system prompt showing how to react to a failed search, so that it gives up on a fruitless query after fewer attempts than it does today.
- DHave the subagent return a structured error payload naming the failure type, the source that failed and any partial results it had already gathered, so the coordinator can select a different branch. Correct
Why A is wrong: It is tempting because retrying does clear genuinely transient faults, and the current ceiling looks like the tuning knob nearest the symptom. It is wrong because the coordinator still cannot tell a transient fault from a permanent one, so a higher ceiling multiplies the 94 percent of attempts that were already futile.
Why B is wrong: It is tempting because asynchronous processing genuinely removes blocking cost and the batching window is real. It is wrong because it changes when the futile retries run rather than whether they run, so the same 94 percent failure rate persists at a longer latency.
Why C is wrong: It is tempting because few-shot prompting does shape agent behaviour and costs little to try. It is wrong because the coordinator is not misjudging a rich signal, it is receiving none, and no example can teach it to read information the error payload does not contain.
Why D is correct: Correct. The coordinator retries blindly because a bare status string carries no information it can act on. A structured payload distinguishing a retryable throttle from a dead source, plus whatever was gathered, lets the coordinator retry, substitute a source or move on deliberately.