Skip to main content
A team is an agent whose configuration carries a 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.
  1. The coordinator writes one card per unit of work — board_write with op: "create", an assignee, and enough in the notes that the member can act with no other context.
  2. It then calls send_to_agent once per card, with a brief that names the card.
  3. The member does the work in its own session and moves its own card to done before it answers.
  4. The coordinator parks on wait_for_agents, wakes with the results, and reads the board to see what is left.
The board survives step 4. If the coordinator’s session ends — budget, window, a person cancelling it — the cards are still there, still saying who held what and what was finished, and the next session picks up from them rather than from a transcript nobody kept.
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_agent at 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_code and hermes run their own CLI’s toolset inside a box and reach ours over a session-scoped tool endpoint. The one caveat there is that wait_for_agents does 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.
On the wire a roster member is always an 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.