Patterns
A single chat with a coding agent is a beautiful thing until the job gets big. Then the context fills, the plan drifts, and one model tries to hold a migration across forty files in its head and quietly loses the thread. The answer isn't a bigger context window — it's structure. Orchestration is the set of patterns for coordinating agents so a large job stays coherent, and the good news is there are only a handful of them worth knowing. Here they are, with the one thing every pattern shares: the verification stays external, always.
Fan-out: parallel independent tasks
The simplest and most abused pattern. Split a job into chunks that don't touch the same files, hand each to its own agent, run them at once. Build the API, build the frontend, write the test suite — three agents, three lanes, no collisions.
Helps when the work genuinely divides into independent pieces. Hurts when it doesn't: if two agents edit the same function, you've built a fast way to generate merge conflicts. The discipline is honesty about whether the work is actually parallel. Most "let's parallelize this" instincts are wrong because the tasks share state the enthusiast didn't notice. When it fits, though, this is where OpenAI's GPT-5.6 Ultra mode and similar parallel systems earn their keep — see Ultra mode explained.
Pipeline: stages per item
Instead of splitting the work, split the process. Each item flows through the same ordered stages — draft, refine, test, document — with a different agent (or the same agent in a different role) owning each stage. Think assembly line rather than parallel lanes.
Helps when you have many similar items and a repeatable sequence: upgrading a dependency across services, migrating a batch of endpoints, processing a queue of similar fixes. Hurts when items are all different — then the stages don't generalize and the pipeline is just overhead. The win is that each stage can use a model matched to it: a cheap fast one to draft, a deep one to handle the hard middle.
Reviewer-gate: a different lab checks the work
The highest-value pattern for correctness. A second agent that did not write the code reviews it and re-runs the checks. Ideally the reviewer is a different model from a different lab, because its blind spots differ from the author's — a model reviewing its own family's output shares the family's failure modes.
Helps almost always, because the author-agent structurally can't catch a class of its own errors: it already believes its work. Hurts only when you let the reviewer be advisory — a reviewer whose objection can be waved away is theater. The gate has to have teeth: fail means fail. This is the pattern that most resembles a real engineering process, and it's the one teams skip first when they're in a hurry and regret first when they ship a bug.
Loop-until-dry: keep finding until nothing's left
Point an agent at a class of problem — dead code, missing tests, lint violations, unhandled errors — and have it iterate until a full pass turns up nothing new. The termination condition isn't a step count; it's "a clean sweep found zero."
Helps for exhaustive, well-defined hunts where "did we get them all?" is the actual question. Hurts when "done" is subjective — an agent looping on "make the code better" never dries up, it just burns tokens redecorating. The pattern needs an objective empty state to terminate against, or it doesn't terminate.
Completeness critic: is anything missing?
A specialized reviewer whose only job is to ask "what's not here?" — the untested edge case, the unhandled error path, the requirement in the spec nobody implemented, the doc that never got written. It doesn't grade the code that exists; it hunts for the code that should.
Helps because absence is the hardest defect to see — you can't review a line that was never written, and the author-agent is blind to its own omissions by definition. Hurts if you point it at an underspecified task: with no clear "complete," it invents scope and gold-plates. It needs a spec to measure against.
| Pattern | Best for | Fails when |
|---|---|---|
| Fan-out | Independent parallel work | Tasks share files/state |
| Pipeline | Many similar items, fixed stages | Every item is different |
| Reviewer-gate | Correctness on anything | The gate is advisory |
| Loop-until-dry | Exhaustive, objective hunts | "Done" is subjective |
| Completeness critic | Finding what's missing | Task is underspecified |
The rule that outranks all five
Every pattern above shares one requirement, and it's the requirement most orchestration write-ups fumble: verification stays external. No pattern lets the agent that did the work also certify the work. The reviewer is a different agent. The completeness critic is a different agent. And the final gate — the one that actually decides "ship or don't" — is not an agent at all. It's your real build and your real tests, run in your environment. A model grading its own homework is the failure mode every one of these patterns is designed to route around, and the moment you let self-certification back in, the structure stops protecting you.
Composing them
Real jobs mix patterns. A big migration might fan out across independent services, run each through a draft-test-document pipeline, gate every result behind a different-lab reviewer, and finish with a completeness critic checking that nothing in the spec got dropped — all landing behind one external build-and-test gate at the end. The art isn't knowing the patterns; it's matching them to the shape of the work and refusing to let any of them collapse verification back into the agent doing the work.
This is precisely the design center of The Vibe Father: git worktree isolation so fan-out doesn't collide, checkpoints so a pipeline is rewindable, and the AutoVibe gate running your real build and tests as the external check no agent can forge. For the team-level version with roles and collision rules, read the multi-agent field guide. For where orchestration is heading as agents run whole pipelines, see the trends that matter in 2026. The isolation-and-rewind mechanics are in checkpoints and worktrees, and live scores stay at /benchmarks.