ADR: Supervisor vs. Orchestrator-Workers¶
Status: Accepted.
Context¶
Both patterns involve a coordinating agent directing work to other agents. The difference is whether the set of "other agents" and their assignments is known in advance or has to be figured out per-task.
Decision¶
Use Supervisor when the categories are fixed and known in advance — a classifier routes each input to one of N known specialists. Cost: 2–3 LLM calls total.
Use Orchestrator-Workers when subtasks aren't known until the goal is analyzed, and the worker pool has meaningfully different specializations the planner assigns dynamically — open-ended goals like "research this topic" where the number and nature of sub-questions depends on the topic itself. Cost: 1 planning call + N worker calls (N is dynamic, decided by the planner) + 1 synthesis call.
The distinguishing question: can you enumerate the routing categories before seeing the input (Supervisor), or does the input itself determine how many workers are needed and what they should do (Orchestrator-Workers)?
Consequences¶
- Supervisor with an unbounded/unknown category set forces an awkward "other" bucket that absorbs everything the classifier can't confidently place — a symptom of the wrong pattern, not a tuning problem.
- Orchestrator-Workers for a fixed-category task pays for a planning call that will produce the same plan every time — pure overhead versus Supervisor's direct classify-and-route.
- Orchestrator-Workers' dynamic worker count makes cost and latency less predictable than Supervisor's fixed 2–3 calls — a real operational tradeoff if you need tight cost bounds.
- If workers need to communicate directly with each other rather than only report to the coordinator, neither pattern fits — see Blackboard or Swarm instead.
See the pattern catalog for the full comparison and
patterns.json for machine-readable use_when/avoid_when.