multiagent object. That agent is the coordinator: it owns the top-level task and the top-level context, and it works with a roster of member agents. Each member runs in its own session thread with only the context it was handed.
There is no separate “team” object to create. A team is just an agent with a roster — so everything you already know about agents (versioning, budgets, sessions, events) applies unchanged.
Two ways a team coordinates
This is the thing to understand before anything else on these pages. Vetta gives a team two coordination mechanisms, and they are not variations of one idea — they have different shapes, different lifetimes, and different audiences.1 · Delegation
Point-to-point, task-shaped, one-shot. The coordinator calls
send_to_agent with a brief. The member runs in its own session, and its answer folds back into the coordinator’s transcript as a tool result. Private between those two threads, and gone when the run is.2 · The board
Broadcast, durable, many-to-many. Any thread calls
board_read / board_write. Cards are rows in the database that outlive every session that touched them, and every member reads and writes the same surface.How each one behaves
When to reach for which
- Delegate when the work is bounded and you want the answer back. “Summarize this contract.” “Check these numbers.” The coordinator cannot continue without the result, so parking on it is exactly right.
- Use the board when the work is state, not a question. What the team is collectively trying to do, who holds what, what is stuck and on which other card, and what a member should pick up next time it runs. A card is also how a member hands work over: no member can see another member’s conversation, so what you did and what is left has to be written down somewhere both can read.
- Use both when the run is long enough that “what is still outstanding” is a real question. That is most long-horizon work.
They compose, and this is the proven pattern
The pattern that runs in production is: the coordinator puts the plan on the board, then delegates each card.- The coordinator writes one card per unit of work —
board_writewithop: "create", anassignee, and enough in the notes that the member can act with no other context. - It then calls
send_to_agentonce per card, with a brief that names the card. - The member does the work in its own session and moves its own card to
donebefore it answers. - The coordinator parks on
wait_for_agents, wakes with the results, and reads the board to see what is left.
Both are shipped and both are proven in production. A delegation run drove a coordinator → a
pi member → back to the coordinator → a vetta member → end_turn, with each member in its own session. A board run created two cards, assigned them to a member, and both reached done.The coordinator model
- Every member runs in its own session thread with its own conversation history. Nothing about one member’s transcript leaks into another’s.
- Delegation is capped to one level: a member is never handed
send_to_agentat all, so it cannot delegate and cannot be talked into it. - A team may mix harnesses below the coordinator. A member’s harness decides what its session holds and costs — see Rosters & versioning.
- Any published harness can be the coordinator’s. Both coordination mechanisms are tools Vetta contributes to the turn;
claude_codeandhermesrun their own CLI’s toolset inside a box and reach ours over a session-scoped tool endpoint. The one caveat there is thatwait_for_agentsdoes not pause the turn — the coordinator parks once the turn goes idle and still opens its threads. See Harness capabilities.
Why delegate at all
Delegation is fundamentally about context isolation and cost, not wall-clock speed.Isolate context
A member starts fresh with only its brief. The coordinator’s long transcript never rides along on every downstream call, so each member stays focused and cheap.
Bound cost
Because context is isolated, downstream calls carry fewer tokens. The coordinator’s budget bounds the whole team, and each delegated call is still quoted before it runs.
Compose specialists
Reference existing agents by id and version. A specialist’s persona, tools, and skills are reused wholesale rather than re-prompted.
Fan out
The coordinator can have several members running at once, each in its own thread — useful for map-style work over a batch.
Fan-out is real parallelism, but the reason to delegate is context and cost. If a single agent can hold the whole task in its context comfortably and cheaply, you do not need a team.
A minimal team
The roster lives on the coordinator’s config, so a team is made in two steps: create an ordinary agent, then give it a roster.agt_ id — the CLI resolves the friendly name@version spelling for you before it writes. Each member is pinned by version, so the team’s behavior is reproducible even as members evolve independently. board: true is what makes the two board tools exist; without it the team has delegation only.
Explore the reference
Delegation
send_to_agent, wait_for_agents and list_agents — their real arguments, the isolated threads, typed results, and how a refusal comes back.Team board
board_read and board_write, the four fixed statuses, the card and comment shapes, and the routes a person reads them through.Coordinator
The
multiagent object and the roster entry types, and which of them are served today.Rosters & versioning
How the roster is snapshotted, why pins never drift, mixing harnesses, and the
vetta team commands.Context & budgets
What is shared across threads versus per-member, what an idle member costs, and the cross-thread event view.
Next: delegation
The first of the two mechanisms, in full.