One step at a time (default)

Supervisor diagramTask, Supervisor, Researcher, Coder, Tester, Writer, Result. Step captions follow the diagram.Coding teamTaskSupervisorResearcherCoderTesterWriterResultSupervisor diagramTask, Supervisor, Researcher, Coder, Tester, Writer, Result. Step captions follow the diagram.Coding teamTaskSupervisorResearcherCoderTesterWriterResult

All steps

One supervisor, three specialists

Hierarchical, with a coding sub-team

Parts of this pattern
Task Input / output
The incoming task, such as 'Produce a report with a chart on last quarter's sales'.
Supervisor Agent
Plans the work, delegates one step at a time to a specialist, reads each result and decides when to finish.
Researcher Agent
Specialist agent with search tools. Gathers facts for the brief and reports its findings back.
Coder Agent
Specialist agent that runs code, such as producing a chart; may lead its own sub-team with the tester.
Tester Agent
Sub-agent inside the coding team. Runs the tests the coder asks for and reports pass or fail.
Writer Agent
Specialist agent that turns the findings and chart it is given into the drafted report.
Result Input / output
The finished deliverable the supervisor returns after judging the task complete.
Task → Supervisor
The task enters the supervisor, which plans before delegating.Task: Write a report with a chart on last quarter's sales by region.
Supervisor → Researcher
A self-contained brief delegating the research step to the researcher.{"action": "delegate", "agent": "researcher", "instruction": "Find Q3 sales by region; return a table with sources."}
Researcher → Supervisor
The researcher's findings return to the supervisor, not to other workers.Findings: EMEA $4.1M, APAC $2.7M, AMER $6.3M (source: finance_q3.xlsx).
Supervisor → Coder
A brief asking the coder to write and verify a script that plots the data, with what to return.{"action": "delegate", "agent": "coder", "instruction": "Write and verify a script that plots Q3 sales by region from this table; save out/q3_sales.png."}
Coder → Supervisor
The coder's summarized result returns to the supervisor.Chart saved to out/q3_sales.png; checks pass.
Supervisor → Writer
A brief giving the writer the findings and chart to draft from.{"action": "delegate", "agent": "writer", "instruction": "Draft a one-page Q3 sales report from this table: EMEA $4.1M, APAC $2.7M, AMER $6.3M; chart at out/q3_sales.png."}
Writer → Supervisor
The writer's draft returns to the supervisor for a final check.Draft: Q3 sales reached $13.1M, led by AMER at $6.3M... (chart attached)
Coder → Testersub-task
Inside the coding team, the coder delegates testing to the tester.Run the tests on the Q3 sales plotting script and report any failures.
Tester → Coder
The tester's verdict returns to the coder, which the supervisor never sees.12 passed, 0 failed.
Supervisor → Result
The supervisor returns the final deliverable once the task is fully done.{"action": "finish", "answer": "Q3 sales report with chart attached: out/q3_report.pdf"}

Parallel subagents

A lead agent saves a plan, spawns several subagents at once with clean contexts, reads their condensed findings, and a citation pass runs before the answer goes out.

Supervisor: Parallel subagents diagramQuestion, Lead agent, Plan, Subagent 1, Subagent 2, Subagent 3, Citation agent, Report. Step captions follow the diagram.QuestionLead agentPlanSubagent 1support ticketsSubagent 2call transcriptsSubagent 3follow-upCitation agentReportSupervisor: Parallel subagents diagramQuestion, Lead agent, Plan, Subagent 1, Subagent 2, Subagent 3, Citation agent, Report. Step captions follow the diagram.QuestionLead agentPlanSubagent 1supportticketsSubagent 2calltranscriptsSubagent 3follow-upCitationagentReport

All steps
Parts of this pattern
Question Input / output
The research question, such as 'What did customers say about onboarding in Q3?'.
Lead agent Agent
Plans the research, spawns subagents in parallel, reads their findings and decides whether to spawn more or write the report.
Plan Memory
The lead's plan, saved outside its context window so it survives if a long run truncates the lead's context.
Subagent 1 Agent
Spawned with a clean context and one brief. Searches the support tickets and returns condensed findings with sources.
Subagent 2 Agent
Spawned at the same time as subagent 1. Searches the sales-call transcripts and returns condensed findings with sources.
Subagent 3 Agent
Spawned later for a gap the lead found in the first findings: did SSO complaints drop after the August docs fix?
Citation agent Agent
Runs once at the end. Matches every claim in the lead's draft to a source and inserts the citations.
Report Input / output
The cited report returned to the user.
Question → Lead agent
The question goes to the lead agent, which plans before it spawns anything.What did customers say about onboarding in Q3? Group the themes and quote examples.
Lead agent → Planplan
The lead writes its plan to memory, so it can recover the plan if its context fills up.Plan: 1) onboarding themes in Q3 support tickets; 2) onboarding themes in Q3 sales calls; 3) merge and rank by frequency.
Lead agent → Subagent 1brief
A self-contained brief: the objective, what to return, which tools to use and what not to cover.{"objective": "Onboarding themes in Q3 support tickets", "output": "top 5 themes with ticket IDs", "tools": ["ticket_search"], "boundaries": "ignore billing tickets"}
Lead agent → Subagent 2brief
A second brief, sent at the same moment, for a part that does not overlap the first.{"objective": "Onboarding questions raised in Q3 sales calls", "output": "top themes with call dates", "tools": ["transcript_search"], "boundaries": "prospects only"}
Subagent 1 → Lead agent
Condensed findings, not raw search results, come back to the lead.1. SSO setup is confusing (41 tickets, e.g. #8812). 2. CSV import fails on files over 10 MB (23 tickets, e.g. #9034).
Subagent 2 → Lead agent
The second subagent's condensed findings come back to the lead.Prospects asked about SSO setup in 9 of 14 calls (e.g. Acme, 14 Aug). Two asked for a guided import.
Lead agent → Subagent 3follow-up
A follow-up brief for the gap, spawned only after the first findings are in.{"objective": "Did SSO tickets drop after the 20 Aug docs fix?", "output": "weekly SSO ticket counts, Jul to Sep", "tools": ["ticket_search"], "boundaries": "SSO tickets only"}
Subagent 3 → Lead agent
The follow-up findings come back to the lead.SSO tickets fell from 14 a week to 4 a week after the 20 Aug docs fix (ticket_search, Jul to Sep).
Lead agent → Citation agentdraft
When the findings answer the question, the lead's draft goes to the citation agent with every source.Draft: SSO setup is the top onboarding complaint in both tickets and calls; CSV import failures come second.
Citation agent → Report
The report goes out with a citation on every claim.SSO setup is the top onboarding complaint [tickets #8812, #9034; Acme call, 14 Aug]. CSV import failures come second [23 tickets].

Ledger orchestrator

The orchestrator keeps a task ledger (facts, guesses, plan) and a per-turn progress ledger, and replans from scratch when progress stalls.

Supervisor: Ledger orchestrator diagramTask, Orchestrator, Task ledger, Progress ledger, Web surfer, Coder, Result. Step captions follow the diagram.TaskOrchestratorTask ledgerfacts + planProgress ledgerstuck? next?Web surferCoderResultSupervisor: Ledger orchestrator diagramTask, Orchestrator, Task ledger, Progress ledger, Web surfer, Coder, Result. Step captions follow the diagram.TaskOrchestratorTask ledgerfacts+ planProgressledgerstuck?next?Web surferCoderResult

All steps
Parts of this pattern
Task Input / output
The task, such as 'Find the cheapest refundable fare from Wellington to Sydney on 7 November and save it to fares.csv'.
Orchestrator Agent
Plans in the task ledger, checks the progress ledger every turn, picks who acts next, and replans when progress stalls.
Task ledger Memory
Outer-loop memory: given facts, facts to look up, educated guesses and the current plan. Rewritten on every replan.
Progress ledger Memory
Inner-loop memory, refreshed every turn: is the task complete, is it progressing or looping, who acts next, and the instruction.
Web surfer Agent
A worker agent that drives a browser: opens pages, clicks, types, and reports what it sees.
Coder Agent
A worker agent that writes and runs code, here to save the chosen fare to a CSV file.
Result Input / output
The final answer, returned once the progress ledger says the task is complete.
Task → Orchestrator
The task goes to the orchestrator, which writes the task ledger before anyone acts.Find the cheapest refundable fare from Wellington to Sydney on 7 November and save it to fares.csv.
Orchestrator → Task ledgerplan
The orchestrator fills the task ledger before anyone acts, and rewrites it when the stalled turns in a row pass the threshold of 2.Given: WLG to SYD, 7 Nov, refundable. Look up: fares on the airline site. Guess: the fare search works without a login. Plan: web surfer searches; coder saves the cheapest fare.
Orchestrator → Progress ledgereach turn
Every turn, the orchestrator answers the progress questions and records them.{"is_complete": false, "is_progressing": false, "is_in_loop": true, "next_speaker": "web_surfer", "instruction": "Retry the fare search for 7 Nov."}
Orchestrator → Web surferinstruct
The instruction from the progress ledger goes to the worker it named.Open the airline's fare calendar for WLG to SYD in November and read the refundable fares for the 7th.
Web surfer → Orchestrator
The worker reports what happened, including failures.Fare calendar, 7 Nov, refundable: NZ$389 (NZ 247, 07:00) and NZ$412 (QF 162, 10:30).
Orchestrator → Coder
When the next step needs code, the instruction goes to the coder.Write fares.csv with columns date, flight, price_nzd and one row: 2026-11-07, NZ 247, 389.
Coder → Orchestrator
The coder reports the result of running its code.Wrote fares.csv (1 row). Checked by reading it back.
Orchestrator → Result
When the progress ledger says the task is complete, the orchestrator writes the final answer.Cheapest refundable fare on 7 Nov: NZ 247 at 07:00, NZ$389. Saved to fares.csv.

← → neighboursesc atlas

Multi-Agent

Supervisor

Also known as Manager pattern · Orchestrator agent · Agents-as-tools · Hierarchical teams

A supervisor agent sends work to specialist agents and every result comes back through it.

One step at a time: No single inventor · see source

No single inventor. OpenAI's 2025 agent guide calls it the manager pattern and LangGraph ships a supervisor; manager agents over specialist agents already appear in MetaGPT and AutoGen (2023).

Parallel subagents: Popularized by Anthropic (2025) · Anthropic

Described in 'How we built our multi-agent research system' (June 2025): a lead researcher spawns parallel subagents, keeps its plan in memory, and a citation agent finishes the report.

Ledger orchestrator: Introduced by Fourney et al. (2024) · Microsoft Research AI Frontiers

Magentic-One: an outer loop keeps the task ledger and an inner loop the progress ledger; when the inner loop stalls, the orchestrator updates the task ledger and makes a new plan.

Measured over one run

One step at a time

Nodes
7. Boxes in the diagram: models, tools, stores, people and plain code.
LLM calls
6. Model invocations in the first scenario: each time a model or agent node starts thinking, plus each branch it decides.
Tool calls
0. Messages sent to a tool node in the first scenario.
Steps
5. Steps in the first scenario, with repeated steps counted every time they run.
Scenarios
2. Distinct example runs you can switch between on the diagram.
Loop
no. Whether the flow cycles back on itself until a condition is met.
Parallel
no. Whether two or more messages are in flight at the same time.
Branch
yes. Whether the flow takes one path out of several, chosen at run time.
Human in the loop
no. Whether a person appears as a node, to approve, correct or answer.
Autonomy
high. How much the model decides the control flow itself, from fixed code paths (low) to open-ended (high).
Cost
high. Relative token spend per request.
Latency
high. Relative wall-clock time per request.

Parallel subagents

Nodes
8. Boxes in the diagram: models, tools, stores, people and plain code.
LLM calls
5. Model invocations in the first scenario: each time a model or agent node starts thinking, plus each branch it decides.
Tool calls
0. Messages sent to a tool node in the first scenario.
Steps
5. Steps in the first scenario, with repeated steps counted every time they run.
Scenarios
1. Distinct example runs you can switch between on the diagram.
Loop
no. Whether the flow cycles back on itself until a condition is met.
Parallel
yes. Whether two or more messages are in flight at the same time.
Branch
yes. Whether the flow takes one path out of several, chosen at run time.
Human in the loop
no. Whether a person appears as a node, to approve, correct or answer.
Autonomy
high. How much the model decides the control flow itself, from fixed code paths (low) to open-ended (high).
Cost
high. Relative token spend per request.
Latency
high. Relative wall-clock time per request.

Ledger orchestrator

Nodes
7. Boxes in the diagram: models, tools, stores, people and plain code.
LLM calls
7. Model invocations in the first scenario: each time a model or agent node starts thinking, plus each branch it decides.
Tool calls
0. Messages sent to a tool node in the first scenario.
Steps
7. Steps in the first scenario, with repeated steps counted every time they run.
Scenarios
1. Distinct example runs you can switch between on the diagram.
Loop
yes. Whether the flow cycles back on itself until a condition is met.
Parallel
no. Whether two or more messages are in flight at the same time.
Branch
yes. Whether the flow takes one path out of several, chosen at run time.
Human in the loop
no. Whether a person appears as a node, to approve, correct or answer.
Autonomy
high. How much the model decides the control flow itself, from fixed code paths (low) to open-ended (high).
Cost
high. Relative token spend per request.
Latency
high. Relative wall-clock time per request.

Counted from the first scenario's timeline when the site is built.

Problem

One agent with a dozen tools and a long prompt gets confused. It picks the wrong tool, forgets instructions and mixes research notes with code. Giving each job its own specialist with a short prompt and a focused toolset works better, but then something has to decide who does what and combine the results.

How it works

A central supervisor agent owns the conversation and the plan. Its tools are other agents. Given a task such as “write a report on our churn with a chart”, it picks a specialist, writes a self-contained brief and calls it, for example the researcher, the coder or the writer. Each specialist is a full agent with its own tools and loop. When it finishes, its result returns to the supervisor, never directly to another specialist.

The supervisor reads each result, decides the next step, and eventually returns the deliverable itself. The hub shape makes the flow easy to trace, log and interrupt.

Teams can nest. In the hierarchical scenario the coder is the lead of a small coding team, and it delegates test runs to the tester. The top supervisor sees only the coder’s summarized result, so its own context stays small.

Two variants change how the supervisor works. In the Parallel subagents tab, a lead agent spawns several subagents at once, each with a clean context, and a citation agent finishes the report. In the Ledger orchestrator tab, from Microsoft’s Magentic-One, the supervisor keeps a written plan and a per-turn progress check, and replans when the team stalls.

When to use

  • The task needs different tools, prompts or permissions for different parts.
  • You want one place to log, audit and apply guardrails.
  • A single agent’s tool list has grown past what it can use reliably.

When to avoid

  • Subtasks are simple plain LLM calls. Orchestrator-workers is lighter.
  • The user should talk directly to the specialist. Consider handoffs.
  • One agent with a few tools already does the job.

Trade-offs

Every result passes through the supervisor, so it is a bottleneck for both latency and context. Sequential delegation is slow, and each hop adds an agent run, so cost climbs quickly. You gain clear control and debuggability in exchange for those hops, which is why many teams start with a single agent and add a supervisor only when they must.

Failure modes

  • Wrong delegation: the supervisor picks the wrong specialist or writes a vague brief. Describe each specialist’s scope sharply and require self-contained instructions.
  • Telephone game: details are lost as results are summarized upward. Let specialists return structured outputs or artifact references.
  • Runaway delegation: the supervisor keeps calling agents. Cap the turns and force a final answer.
  • Context bloat: raw specialist output floods the supervisor’s history. Ask for concise reports.

Build it with your AI

One step at a time

Paste this into Claude Code, Cursor, ChatGPT or any AI coding assistant.

Implement the Supervisor pattern in this codebase, using the LLM client and language we already use.

## Goal

Turn a task into a finished deliverable by having a supervisor agent delegate one step at a time to specialist agents, each with its own tools, and read every result before choosing the next step.

## How it works

1. Define each specialist as a full agent with its own instructions, tools and loop, and write a one-line description of each for the supervisor.
2. Call the supervisor with the Supervisor prompt, filling in the team descriptions, the task and the results so far, and parse its JSON reply into action, agent, instruction and answer.
3. If action is delegate, run the named specialist with the Specialist agent prompt and the instruction as its brief; it runs its own tool loop and returns a short report.
4. Append the agent name, the instruction and the report to the results list, then call the supervisor again.
5. If action is finish, return the answer together with the results list.
6. A specialist may lead a sub-team of its own: it runs this same loop over its sub-agents and reports one summarized result upward.

## Prompts

### Supervisor prompt

```markdown
You lead a team of specialist agents. You never do the work yourself.

<team>
{{team_descriptions}}
</team>

<task>{{task}}</task>
<results_so_far>{{history}}</results_so_far>

Choose the next step. Respond in JSON:
{"action": "delegate" | "finish",
 "agent": "<name from the team>",
 "instruction": "a self-contained brief with the goal and what to return",
 "answer": "only when finishing: the final deliverable"}
Delegate one step at a time. Finish only when the task is fully done.
```

### Specialist agent prompt

```markdown
You are the {{role}} on a team. You have these tools: {{tools}}.

Your supervisor gave you this brief:
<brief>{{instruction}}</brief>

Do exactly what the brief asks, using your tools as needed.
Report back concisely: what you did, what you found, and anything you could not do.
```

## Stop rule

Stop when the supervisor returns finish, or after 8 delegations. On the cap, return the results gathered so far with a status saying the task was not finished.

## Requirements

- Cap delegations per task (default 8) and tool calls per specialist run (default 10).
- If the supervisor's reply is not valid JSON or names an agent not on the team, retry once with the error appended, then stop with a failed status.
- If a specialist errors or hits its cap, return that as its report, so the supervisor can retry, reassign or finish; never crash the run.
- Give each specialist only its brief, not the supervisor's history, and keep the specialist's own tool calls out of the supervisor's context.
- Log each delegation with the agent, the instruction, the report, the tokens and the duration.
- Add a test with a stub supervisor that delegates to the researcher, then the coder, then finishes; assert exactly two specialist runs in that order and that the finish answer is returned.

Parallel subagents

Paste this into Claude Code, Cursor, ChatGPT or any AI coding assistant.

Implement the Supervisor pattern (Parallel subagents variant) in this codebase, using the LLM client and language we already use.

## Goal

Answer a broad research question by having a lead agent plan, run several subagents in parallel on separate parts of it, and combine their condensed findings into one cited report.

## How it works

1. Call the lead agent with the Lead agent prompt and the question; parse its JSON into action, subtasks (objective, output, tools, boundaries) and report, and save its plan to memory before spawning anything.
2. For each subtask, start a subagent with the Subagent prompt, a fresh context and only that brief; run all of them in parallel.
3. Each subagent runs its own tool loop and returns condensed findings with a source for each fact, or an error saying what it could not find.
4. Reload the plan from memory, and call the lead again with every finding so far; it either spawns more subtasks for the gaps or replies done with a draft report.
5. Send the draft and every source to the citation agent with the Citation agent prompt, and return the cited report.

## Prompts

### Lead agent prompt

```markdown
You lead a research effort. You plan and delegate; subagents do the searching.

<question>{{question}}</question>
<plan>{{plan}}</plan>
<findings_so_far>{{findings}}</findings_so_far>

Decide whether the findings answer the question. Respond in JSON:
{"action": "spawn" | "done",
 "subtasks": [{"objective": "...", "output": "what to return",
               "tools": ["..."], "boundaries": "what not to cover"}],
 "report": "only when done: the full answer, a source for each claim"}
Spawn only subtasks that do not overlap each other or the findings so far.
Use 1 subagent for a simple fact, 2 to 4 for a comparison.
```

### Subagent prompt

```markdown
You are a research subagent. Work only on this brief:
<objective>{{objective}}</objective>
Return: {{output}}. Do not cover: {{boundaries}}.

Use your tools ({{tools}}). Start with broad searches, then narrow down.
Stop when you can answer, or after {{max_tool_calls}} tool calls.
Reply with condensed findings in under 300 words, a source for each fact,
and anything you could not find.
```

### Citation agent prompt

```markdown
Add citations to the report below. Do not change its wording or its claims.

<report>{{report}}</report>
<sources>{{sources}}</sources>

After each claim, cite the source that supports it.
List any claim that no source supports under "Unsupported claims".
```

## Stop rule

Stop when the lead replies done, or after 3 spawn rounds. On the cap, have the lead write the report from what it has and list the open questions in it.

## Requirements

- Cap subagents per round (default 4), spawn rounds (default 3) and tool calls per subagent (default 15). If the lead asks for more subagents than the cap, run the first 4 and return the rest to the lead as not yet run.
- Give each subagent a timeout (default 5 minutes); report a timeout or crash to the lead as that subagent's finding instead of dropping it.
- Subagents never see each other's context or the lead's; they get only their brief.
- If the lead's reply is not valid JSON, retry once with the parse error, then write the report from the findings so far.
- Add a test with a stub lead that spawns two subagents and then replies done; assert both subagents started before either finished, and the citation agent ran once.

Ledger orchestrator

Paste this into Claude Code, Cursor, ChatGPT or any AI coding assistant.

Implement the Supervisor pattern (Ledger orchestrator variant) in this codebase, using the LLM client and language we already use.

## Goal

Complete an open-ended task with a team of worker agents by keeping a written plan and a per-turn progress check, and replanning whenever progress stalls.

## How it works

1. Call the orchestrator with the Task ledger prompt to fill the task ledger: the given facts, facts to look up, educated guesses and a step-by-step plan.
2. Each turn, call the orchestrator with the Progress ledger prompt, passing the task ledger and the turn history, and parse its JSON into is_complete, is_progressing, is_in_loop, next_speaker and instruction.
3. If is_complete is true, ask the orchestrator for the final answer from the history and return it.
4. Otherwise send the instruction to the agent named in next_speaker, run it, and append its reply, or its error, to the history.
5. If the turn was not progressing or was in a loop, add one to a stall counter; otherwise reset the counter to zero.
6. When the stall counter exceeds the stall threshold (default 2), run the Task ledger prompt again with everything learned so far to update the facts, guesses and plan; then reset the counter and clear the workers' history.

## Prompts

### Task ledger prompt

```markdown
You lead a team: {{team_descriptions}}.

<task>{{task}}</task>
{{#if history}}<what_happened_so_far>{{history}}</what_happened_so_far>{{/if}}

Write the task ledger:
1. Facts given in the task.
2. Facts to look up, and where.
3. Facts to derive (by reasoning or computation).
4. Educated guesses.
5. A short plan: which team member does what, in order.
{{#if history}}The old plan stalled. Say why, then write a new plan that avoids it.{{/if}}
```

### Progress ledger prompt

```markdown
<task_ledger>{{task_ledger}}</task_ledger>
<history>{{history}}</history>

Answer in JSON:
{"is_complete": true|false,
 "is_progressing": true|false,
 "is_in_loop": true|false,
 "next_speaker": "one of {{team_names}}",
 "instruction": "what that member should do next, self-contained"}
```

## Stop rule

Stop when the progress ledger says the task is complete, after 20 turns, or after 3 replans. On a cap, return the best partial result with the latest task ledger and a status saying the task was not finished.

## Requirements

- Make the stall threshold (default 2), the turn cap (default 20) and the replan cap (default 3) parameters.
- If the progress ledger reply is not valid JSON or names an unknown agent, retry once, then count the turn as a stall.
- Store both ledgers outside the orchestrator's context and log every version, so a run can be audited turn by turn.
- Give each worker only the instruction for its turn, not the ledgers.
- Add a test with a stub orchestrator whose progress ledger reports no progress on turns 1 to 3, progress on turn 4 and completion on turn 5; assert the task-ledger prompt ran exactly twice and the stall counter was 0 after the replan.

Prompt templates

One step at a time

Supervisor prompt
You lead a team of specialist agents. You never do the work yourself.
<team>
{{team_descriptions}}
</team>
<task>{{task}}</task>
<results_so_far>{{history}}</results_so_far>
Choose the next step. Respond in JSON:
{"action": "delegate" | "finish",
"agent": "<name from the team>",
"instruction": "a self-contained brief with the goal and what to return",
"answer": "only when finishing: the final deliverable"}
Delegate one step at a time. Finish only when the task is fully done.
Specialist agent prompt
You are the {{role}} on a team. You have these tools: {{tools}}.
Your supervisor gave you this brief:
<brief>{{instruction}}</brief>
Do exactly what the brief asks, using your tools as needed.
Report back concisely: what you did, what you found, and anything you could not do.

Parallel subagents

Lead agent prompt
You lead a research effort. You plan and delegate; subagents do the searching.
<question>{{question}}</question>
<plan>{{plan}}</plan>
<findings_so_far>{{findings}}</findings_so_far>
Decide whether the findings answer the question. Respond in JSON:
{"action": "spawn" | "done",
"subtasks": [{"objective": "...", "output": "what to return",
"tools": ["..."], "boundaries": "what not to cover"}],
"report": "only when done: the full answer, a source for each claim"}
Spawn only subtasks that do not overlap each other or the findings so far.
Use 1 subagent for a simple fact, 2 to 4 for a comparison.
Subagent prompt
You are a research subagent. Work only on this brief:
<objective>{{objective}}</objective>
Return: {{output}}. Do not cover: {{boundaries}}.
Use your tools ({{tools}}). Start with broad searches, then narrow down.
Stop when you can answer, or after {{max_tool_calls}} tool calls.
Reply with condensed findings in under 300 words, a source for each fact,
and anything you could not find.
Citation agent prompt
Add citations to the report below. Do not change its wording or its claims.
<report>{{report}}</report>
<sources>{{sources}}</sources>
After each claim, cite the source that supports it.
List any claim that no source supports under "Unsupported claims".

Ledger orchestrator

Task ledger prompt
You lead a team: {{team_descriptions}}.
<task>{{task}}</task>
{{#if history}}<what_happened_so_far>{{history}}</what_happened_so_far>{{/if}}
Write the task ledger:
1. Facts given in the task.
2. Facts to look up, and where.
3. Facts to derive (by reasoning or computation).
4. Educated guesses.
5. A short plan: which team member does what, in order.
{{#if history}}The old plan stalled. Say why, then write a new plan that avoids it.{{/if}}
Progress ledger prompt
<task_ledger>{{task_ledger}}</task_ledger>
<history>{{history}}</history>
Answer in JSON:
{"is_complete": true|false,
"is_progressing": true|false,
"is_in_loop": true|false,
"next_speaker": "one of {{team_names}}",
"instruction": "what that member should do next, self-contained"}

Related patterns

Composes well with:

Sources

  1. A practical guide to building agents (OpenAI, 2025)
  2. Multi-agent (LangChain docs)

From the Agentic Atlas by Joran Kikke · Edit on GitHub · Suggest a correction