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

> Read and move cards on a team's shared board from a terminal.

The [team board](/docs/team/board) is the durable half of a [team](/docs/team/overview): a coordinator's transcript scrolls away, the card that says who holds what does not. These commands read and move cards on it.

`<board>` is a `brd_` id, or the `agt_` id — or the name — of the agent that owns the board. The agent spelling is what makes a brand-new team writable: a board with no cards has never told anyone its id.

## Commands

| Command                                       | Description                                                     |
| --------------------------------------------- | --------------------------------------------------------------- |
| `vetta board create <board>`                  | Ensure the agent's board, and print it.                         |
| `vetta board show <board>`                    | The whole board, in column order.                               |
| `vetta board get <board>`                     | The board itself: its id, its owner, and its per-column counts. |
| `vetta board card <board> <card-id>`          | One card, in full.                                              |
| `vetta board add <board>`                     | Add a card.                                                     |
| `vetta board assign <board> <card-id> <name>` | Hand a card to a teammate, which starts them on it.             |
| `vetta board move <board> <card-id>`          | Retitle, move, assign or block a card.                          |
| `vetta board comments <board> <card-id>`      | Read a card's comments, oldest first.                           |
| `vetta board comment <board> <card-id>`       | Comment on a card.                                              |
| `vetta board done <board> <card-id>`          | Mark a card `done`, with the note a `done` needs.               |

## create

```bash theme={"system"}
vetta board create research-lead
```

Prints the board object: its `brd_` id, the agent that owns it, and how many cards stand in each of the four columns. There is one board per agent, so running this twice is not an error — it prints the same board. You do not have to run it at all: the first `vetta board add` mints the board too.

## show

```bash theme={"system"}
vetta board show research-lead
vetta board show research-lead --status blocked
vetta board show research-lead --limit 20
```

Cards come back in column order — `todo`, `doing`, `blocked`, `done` — then oldest first. `--status` narrows to one column.

**The default is the whole board.** The command walks every page, so `--status done` answers for the board and not for a first page of it — which matters because the cards are sorted by column *before* they are paginated: a single page is the first columns and nothing after them, so a truncated read empties the last column rather than the end of a list.

`--limit` (1–100) and `--after` are there for a caller that wants one page at a time. Naming either takes exactly that page and prints `has_more` with the `next_cursor` to pass to the next `--after`.

With `--human` each row shows the card's id, status, title, `assignee`, `blocked_by` and `woken_session_id` — the `ses_` id of the session the board started for the assignee, or `-` if nothing has been woken for it yet. `--json` prints every card in full, including `reported_status`: the terminal state the owner was last told about, or `null` while the report is still owed.

## add

```bash theme={"system"}
vetta board add research-lead \
  --title "Verify the Q3 numbers" \
  --assignee fact-checker \
  --status todo
```

Only `--title` is required; a card defaults to `todo`, unassigned and unblocked. `--body` carries the detail, `--assignee` is a roster member's **name** (not an id), and `--blocked-by` may be repeated with the `crd_` ids this card waits on.

`--key` (up to 128 characters) makes the add idempotent: the same key on the same board always answers the same card, so a seed script can be re-run without doubling the board. The first run mints the card; a repeat prints the card that already exists. Without a key every `add` is a new card.

Adding with `--assignee` is a hand-over too — see `assign` for what that starts.

## assign

```bash theme={"system"}
vetta board assign research-lead crd_8k12… fact-checker
vetta board assign --none research-lead crd_8k12…
```

Hands the card to a roster member by **name**. This is how work starts: a `todo` card with an assignee and no open blocker starts a session of that teammate on the next tick, and the card records it as `woken_session_id`. If that session ends without the card reaching `done`, the board parks the card as `blocked` so the hand-over is never silently lost.

`--none` takes the card back and starts nobody. A name and `--none` together exit `2`.

## move

```bash theme={"system"}
vetta board move research-lead crd_8k12… --status doing --assignee web-researcher
vetta board move research-lead crd_8k12… --title "Verify the Q4 numbers"
```

Pass only what changes. `--assignee ""` unclaims the card; omitting a flag leaves that field alone.

`move` is the whole `PATCH`, so it also carries `--title` and `--body`. That is not a stretch of the name: it has always carried `--assignee` and `--blocked-by`, neither of which is a move across columns either, and there is one route here — a second editing verb over the same `PATCH` would leave you guessing which to reach for. `assign` and `done` sit beside it not as edits but as the two things a person says to a board.

`--status done` is refused with `missing_note` unless the card already carries a note: use `done --note`.

## get

```bash theme={"system"}
vetta board get research-lead
```

The board object — its `brd_` id, the agent that owns it, and how many cards stand in each of the four columns. `create` prints the same thing, but it is a `POST` and needs `agents:write`; this is a `GET` and needs only `agents:read`, so an operator holding a read-only key can still see how much work stands on a team.

`get` takes a board. `card` takes a card. They are told apart by their names, not by how many arguments you passed.

## card

```bash theme={"system"}
vetta board card research-lead crd_8k12…
```

One card, in full. `show` lists the board; this reads a single card by its `crd_` id.

## comments

```bash theme={"system"}
vetta board comments research-lead crd_8k12…
```

The card's comments, oldest first — the hand-off notes a team leaves each other. `show` lists cards without them, so this is the only way to read a card's conversation from a terminal.

## comment

```bash theme={"system"}
vetta board comment research-lead crd_8k12… --body "The Q3 figure is stale."
```

There is no `--author`. The control plane signs the comment with the principal behind your key, so it comes back authored by your `usr_` or `key_` id — nobody has to invent a name for themselves, and nobody can invent someone else's. A member commenting through its own board tool is signed with the `ses_` id of its thread, which is how a reader tells an agent's comment from a person's.

## done

```bash theme={"system"}
vetta board done research-lead crd_8k12… --note "Figures verified; report is in /q3/summary.md"
```

Marks the card `done`, which is the documented terminal state. A `done` needs a note — the sentence that tells the owner what was finished and where it is — and `--note` is that note; it lands as the card's `note`, beside the brief, which is left alone. Without one the control plane refuses with `409 state_conflict` (`missing_note`), and the terminal prints that message; a card whose note already says enough may be closed without `--note`. **This verb used to be spelled `rm`, and that name was a lie**: it never removed anything, and `rm` is the one word in a terminal that promises the row is gone. There is no delete route and there should not be one — a finished card is the record of what the team was asked to do, and a task that vanishes takes the answer to "what happened here" with it. So the verb was renamed to what it does. `vetta board rm` is no longer a command and exits `2`.
