> ## Documentation Index
> Fetch the complete documentation index at: https://vetta.sh/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Team

> A coordinator agent and a version-pinned roster of specialists, coordinating two ways: point-to-point delegation and a durable shared board.

export const Levers = ({items, cols}) => <div style={{
  display: "grid",
  gridTemplateColumns: `repeat(${cols || 2}, minmax(0,1fr))`,
  gap: "12px",
  margin: "1.5rem 0"
}}>
    {items.map((it, i) => <div key={i} style={{
  border: "1px solid rgba(0,0,0,0.10)",
  padding: "16px 18px",
  background: "#ffffff"
}}>
        <div style={{
  fontSize: "13px",
  fontWeight: 500,
  color: "#777777"
}}>{it.k}</div>
        <div style={{
  fontSize: "15px",
  fontWeight: 500,
  margin: "6px 0 4px",
  letterSpacing: "-0.02em",
  color: "#000000"
}}>{it.v}</div>
        <div style={{
  fontSize: "14px",
  color: "#555555",
  lineHeight: 1.5
}}>{it.d}</div>
      </div>)}
  </div>;

export const Flow = ({steps, note}) => <div style={{
  margin: "1.5rem 0"
}}>
    <div style={{
  display: "flex",
  flexWrap: "wrap",
  alignItems: "stretch",
  gap: "8px"
}}>
      {steps.map((s, i) => <div key={i} style={{
  display: "flex",
  alignItems: "center",
  gap: "8px"
}}>
          <div style={{
  border: "1px solid rgba(0,0,0,0.10)",
  padding: "10px 14px",
  background: s.accent ? "rgba(0,0,0,0.04)" : "#ffffff",
  minWidth: "84px",
  textAlign: "center"
}}>
            <div style={{
  fontSize: "13px",
  fontWeight: 500,
  color: "#000000"
}}>{s.t}</div>
            {s.d ? <div style={{
  fontSize: "12px",
  color: "#777777",
  marginTop: "2px"
}}>{s.d}</div> : null}
          </div>
          {i < steps.length - 1 ? <span style={{
  color: "#777777",
  fontSize: "16px"
}}>→</span> : null}
        </div>)}
    </div>
    {note ? <div style={{
  fontSize: "12px",
  color: "#777777",
  marginTop: "10px"
}}>{note}</div> : null}
  </div>;

<Note>**Available now.** Coordinators, rosters, delegation and the shared board are live. One roster entry type is not: an `advisor` entry parses but is [refused at save](/docs/team/coordinator#advisor--parses-but-is-not-served).</Note>

A **team** is a **coordinator** agent with a **roster** of member agents. The coordinator owns the top-level task and the top-level context; each member runs in its own session with only the context it was handed, and a team may mix harnesses freely below the coordinator.

<Note>**Any published harness can be the coordinator's.** Both mechanisms below are tools Vetta contributes to the coordinator's turn; the `claude_code` and `hermes` harnesses run their own CLI's toolset inside a micro-VM and reach ours over a session-scoped tool endpoint instead. One caveat there: `wait_for_agents` does not pause the turn, so the coordinator parks once the turn goes idle — a few extra model calls, not a wrong answer. [Harness capabilities](/docs/concepts/harness-capabilities#two-limits-on-the-second-road) has the matrix.</Note>

<Card title="Team reference" icon="network" href="/docs/team/overview">
  Full detail on the two coordination mechanisms, the coordinator, roster versioning, the board, and how context and budget flow.
</Card>

## Two ways they coordinate

This is the part to know first. A team has **two** mechanisms, not one, and they are shaped differently.

<Levers
  cols={2}
  items={[
{ k: "Delegation", v: "send_to_agent (wait: true)", d: "Point-to-point, task-shaped, one-shot. The coordinator hands one member a message; the member runs in its own session and the answer folds back as a tool result. Private to those two, and gone when the run is." },
{ k: "The board", v: "board_read / board_write", d: "Broadcast, durable, many-to-many. Cards with four fixed statuses that outlive every session that touched them, and that every member reads and writes." }
]}
/>

The same tool has a third shape that is not a team mechanism at all: `send_to_agent` with `wait: false` is a [handoff](/docs/capabilities/tools#handoffs) — it starts another agent's *own* session on work you have filed and does not wait for it, on that agent's budget, with no coordinator. Any agent whose [`handoffs`](/docs/capabilities/tools#handoffs) allow the target may use it, roster or not. Reach for it when the next seat should simply begin, not answer.

Delegate when the work is bounded and you need the answer back. Use the board when the work is *state* — what the team is trying to do, who holds what, what is stuck on what. The proven pattern uses both: the coordinator puts the plan on the board, then delegates each card.

## The coordinator model

<Flow
  steps={[
{ t: "Coordinator", d: "owns the task", accent: true },
{ t: "Delegate", d: "one bounded brief" },
{ t: "Member", d: "its own session" },
{ t: "Report back", d: "result only" }
]}
  note="Delegation is capped to one level — a member is never handed the delegation tool at all."
/>

## The shape of a team

The roster lives on the coordinator's own config, so a team is an agent you have given a roster:

```typescript TypeScript theme={"system"}
await vetta.agents.update(coordinator.id, {
  expected_version: coordinator.current_version,
  multiagent: {
    type: "coordinator",
    agents: [
      { type: "agent", id: "agt_9f2c…", version: 4 },
      { type: "agent", id: "agt_4a71…", version: 2 },
    ],
    board: true,
  },
});
```

Each member is **pinned by version** — the pin is resolved and written at save — so a team's behavior is reproducible even as its members evolve independently.

## Why delegate, not just a bigger prompt

Delegation is about **context isolation and cost**, not wall-clock speed.

<Levers
  cols={2}
  items={[
{ k: "Isolate context", v: "Members start fresh", d: "A member gets only its brief — the coordinator's long transcript never rides along on every downstream call." },
{ k: "Bound cost", v: "Fewer tokens downstream", d: "Isolated context means cheaper calls, and the coordinator's budget bounds the whole team." },
{ k: "Compose specialists", v: "Reuse by id + version", d: "A specialist's persona, tools, and skills are reused wholesale rather than re-prompted." },
{ k: "Mix harnesses", v: "Per-member cost", d: "A member's harness is its own, and it decides what that member holds while it runs — a machine, or nothing at all." }
]}
/>

<Card title="Next: skills" icon="book" href="/docs/capabilities/skills">
  Reusable expertise any agent can load.
</Card>
