BRARBUILTTECH

AI Engineering · 8 min read

Agent Orchestrator Animation: Watch a Multi-Agent Workflow Actually Run

A static architecture diagram tells you which boxes exist. It never tells you which box is busy, what it handed to whom, and where a task dies. So we animated the orchestrator we actually run — and this post walks through every frame: what the pattern is, why the queue and not the agents is the real bottleneck, and how the animation itself is built with SVG and CSS.

Live orchestrator run agents busy: 0
YOU — operator ORCHESTRATORplans · spawns · merges EXPLORERread-only recon CODERwrites the diff TEST ENGINEERassertion first REVIEWERjudges, never edits CRITICveto gate

—

subagents live: 0 / 20
  1. You file the task
  2. Orchestrator plans
  3. Spawn Explorer
  4. Spawn Coder
  5. Spawn Test Engineer
  6. Reviewer reads diff
  7. Critic veto check
  8. Merge → report to you
One task — “add a size-guide link to the product page” — moving through the orchestrator. The travelling dot is a work order being handed over.

What an agent orchestrator actually does

An agent orchestrator is the control plane between one human request and a set of narrow, replaceable agents. It is not a smarter agent sitting in the middle; it is the part of the system that owns sequencing. In one sentence: it turns a sentence from you into work orders, enforces who may do what, and returns a single result instead of a transcript.

Roles and authority in an agent orchestrator
RoleJobAuthority
OperatorStates the goal, judges the resultStarts and stops everything
OrchestratorPlans, decomposes, spawns, merges, reportsTalks to the operator only
ExplorerRead-only recon of the codebase or environmentCannot write
CoderOne work order → one isolated diffOwn worktree only
Test engineerWrites the assertion before the code existsCannot ship
ReviewerReads a frozen diffCannot edit
CriticBlocks or approvesVeto only

That last row is the one most teams skip, and it is the row that decides whether the swarm is useful. A reviewer that can edit its own findings is a second coder. A critic that only advises is decoration. The orchestrator pattern works because every role has one job and one direction of authority.

The eight frames, step by step

This is the run in the animation above, written out. It is short on purpose — if a workflow needs eleven agent roles to explain a two-line change, the workflow is the problem.

  1. You file the task

    One sentence, no plan, no folder of context. “Add a size-guide link to the product page.” Everything downstream assumes the operator does not know the codebase.

  2. The orchestrator plans

    It picks the method (here, test-first), splits the request into work orders, and decides what can run in parallel. Planning is the only step that is allowed to be slow.

  3. Explorer recon (read-only)

    A read-only agent locates the size selector, the layout component and the existing tests. It returns findings, not patches. Read-only is enforced structurally, not by good intentions.

  4. Coder writes the diff

    One work order plus the explorer's findings, in an isolated worktree. A coder that receives two work orders returns two half-finished changes.

  5. Test engineer, in parallel

    The assertion is written before the implementation lands — the test is the specification, and it fails first. This is the step that turns “it seems fine” into evidence.

  6. Reviewer reads the frozen diff

    The diff is snapshotted before review. The reviewer has no write access, so review cannot quietly become a rewrite.

  7. Critic veto

    A separate gate with one power: stop. If it vetoes, the work never reaches you — which is the point. Attention is the scarcest resource in the system.

  8. Merge and one report

    The orchestrator merges, closes the task, and sends a single summary. Not raw logs, not a chain of thought, not a scrollback you have to re-read.

The bottleneck nobody draws

Here is the uncomfortable part that an animation makes obvious. Spawning more agents does not add throughput when the model endpoint admits a fixed number of requests at once. In our stack the admission layer allows four in-flight requests; the team cap is twenty agents. Spawn fifteen agents against four slots and eleven of them are not working — they are waiting, holding context, and burning the coordination budget.

Admission slots vs. spawned agents queued: 0

4 slots · 0 agents spawned

Four slots stay busy; extra agents queue. The counter is illustrative, the ratio is the real one from our admission layer.

Two different ceilings get confused constantly. The slot pool limits model requests in flight. The agent cap limits how many workers a team may run. A well-behaved swarm sizes itself to the slot pool and lets the agent cap be headroom for bursts, not a target.

The practical consequence: if your orchestrator can spawn twenty workers but your endpoint admits four, the correct configuration is a small team with fast handoffs. Latency per handoff beats parallelism that has nowhere to run.

Five rules that keep a swarm honest

One task per run

An agent that picks up two tasks finishes neither. Batching looks efficient and reports badly.

Ownership does not matter

Whoever can move the task forward takes it. Teams stall when agents wait for the nominal owner.

New problem → task and fix

Found something broken mid-task? Open the task and fix it if you can. Notes that nobody owns are lost work.

Report to the conductor

Findings travel to the orchestrator, never laterally between workers. Otherwise context forks and nobody holds the whole picture.

Exit when done

An idle agent that keeps polling is a token leak with a friendly name. Exiting is the desired behaviour, and the manager respawns on demand.

What the animation reveals about failure

Because every edge is explicit, failures become visible as missing or looping traffic:

How the animation is built

No framework, no charting library, no animation dependency. One SVG, one stylesheet, one small script — roughly 12 KB total, and it respects prefers-reduced-motion.

The travelling packet, in CSS
.edge.hot {
  stroke: #4b5c78;
  stroke-dasharray: 6 5;
  animation: dash 1s linear infinite;   /* marching dashes */
}
@keyframes dash { to { stroke-dashoffset: -22; } }

.pkt.run {
  offset-path: path("<copied from the edge>");
  animation: travel 1.15s ease-in-out infinite;
}
@keyframes travel {
  0%   { offset-distance: 0%;   opacity: 0; }
  12%  { opacity: 1; }
  88%  { opacity: 1; }
  100% { offset-distance: 100%; opacity: 0; }
}

The packet is a single <circle>. On each frame the script copies the current edge's d attribute into offset-path, which makes the dot follow the exact curve the edge already draws — no second geometry to keep in sync. Nodes light up by toggling a class; the progress list, meter and busy counter are plain DOM updates.

Frequently asked questions

What is an agent orchestrator in one sentence?

It is the control plane that turns one human request into scoped work orders, routes them to specialist agents, enforces caps and vetoes, and returns a single merged result.

How many agents should one orchestrator run?

As many as your model endpoint admits in parallel — not as many as your spawn cap allows. If four requests can be in flight, a team of three to five workers with fast handoffs beats twenty queued agents.

How is the orchestrator pattern different from one big agent?

A single agent blurs planning, doing and judging into one context, so a bad assumption survives to the end. The orchestrator pattern separates them: the planner cannot edit, the coder cannot approve, the reviewer cannot rewrite, and the critic can only stop.

Can I reuse this animation in my own documentation?

Yes. It is plain SVG plus CSS with no dependencies; copy the markup, keep the edge ids and the packet logic, and credit BRARBUILTTECH with a link back.