> ## 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.

# vetta team

> Compose a coordinator agent with a version-pinned roster.

A team is a [coordinator](/docs/team/coordinator) agent with a roster of member agents. These commands manage the roster on an **existing** agent — there are no roster flags on `vetta agent create`, so a team is made in two steps.

## Commands

| Command                                      | Description                                  |
| -------------------------------------------- | -------------------------------------------- |
| `vetta team set <coordinator> --member …`    | Replace the coordinator's roster outright.   |
| `vetta team add <coordinator> --member …`    | Add roster members, keeping the rest.        |
| `vetta team remove <coordinator> --member …` | Remove roster members.                       |
| `vetta team show <coordinator>`              | Show the current roster and pinned versions. |

`--member` is repeated once per member on all three writes; it is not a positional argument.

## set

```bash theme={"system"}
vetta team set release-manager --member changelog-writer@4 --member release-notes-qa@2 --board
```

Each `--member` is `name@version`, a bare `name`, an `agt_` id, or `self`. The name spelling is resolved here against your org's agents — the wire only ever carries `{ type: "agent", id, version? }`.

Pinning by version keeps the team's behavior reproducible as members evolve. **Omit the version and the server pins the member's current version at save**; it does not float, and what comes back always carries an explicit pin.

`set` replaces the roster outright and is the only one that takes `--board`, which gives the team a shared [board](/docs/team/board). `add` and `remove` keep everything else about the roster as it stands, including its board setting. Removing the last member clears the roster to `null` — an empty coordinator is not a team.

Every one of these is a read-modify-write of one agent under `expected_version`, so two people editing a roster from two terminals cannot silently overwrite each other.

<Warning>
  `--member advisor:<model>` is accepted here and then **refused by the API**: advisor roster entries are not yet served. See [Coordinator](/docs/team/coordinator#advisor--parses-but-is-not-served).
</Warning>

## add and remove

```bash theme={"system"}
vetta team add release-manager --member doc-linter@1

vetta team remove release-manager --member release-notes-qa
```

`add` skips a member already on the roster rather than duplicating it. `remove` matches on identity — the same `agt_` id, or `self` — so it does not matter which spelling you used to add it.

## show

```bash theme={"system"}
vetta team show release-manager
```

```json theme={"system"}
{
  "type": "coordinator",
  "agents": [
    { "type": "agent", "id": "agt_9f2c…", "version": 4 },
    { "type": "agent", "id": "agt_4a71…", "version": 2 }
  ],
  "board": false
}
```

That is the roster exactly as the wire carries it — a bare `agt_` string in a roster you wrote is normalised to the object form before it is stored, so there is only ever one shape to read. `null` means the agent is not a coordinator.

A team coordinates two ways: [delegation](/docs/team/delegation), and the shared [board](/docs/team/board) that `--board` turns on. See [`vetta board`](/docs/cli/board) for reading and moving its cards, and [Context & budgets](/docs/team/context-and-budgets) for how spend flows across a team.
