Refusals

Part of team add — every message that refuses it, with the already-running, name and flag refusals shown.

MessageExit
team add: unknown option --x / team add: a seat name is required / team add: --like needs a value (each with the usage)2
team add: --like, --until and --worktree are for --temporary2
team add: line <n>: <message> / team add: <message>2
team add: only the owner, the orchestrator or the operator runs it; this call is <caller>1
team add: only the owner, the orchestrator, the operator or the approved delegate runs it; this call is <caller> — the file names a delegate, and this call is not it1
team add: delegation needs a verified approval: <reason> / team add: delegation needs a readable approved copy: run `team approve` / team add: delegation needs the approved file: the file is not the approved one (<differences>): run `team approve` — the delegate gate, reading the same approval every other check reads1
team add: delegation cannot verify its placement or seats: <reason>1
team add: the approved delegate must be an external non-seat pane1
team add: the approved delegate <session>/<pane id> may not run `add`; its approved commands are <list>1
team add: --<flag> is the owner's; the approved delegate cannot use it — --temporary, --like, --until, --worktree, --session or --file1
team add: the approved delegate cannot change the file or the approval; the owner adds a missing or stopped seat — an add that would restore a missing seat or clear stopped, also on --dry-run1
team add: --file is the owner's, from a terminal outside herdr; this call is <caller>1
team add: --session is the owner's, from a terminal outside herdr; this call is <caller>1
team add: no pane is recorded for seat <name> in this session: the owner stops that seat and runs `team up` 1
team add: the state records pane <pane> for seat <name> in this session, not the pane this call is on: the owner stops the team and starts it again (`team down`, then `team up`) 1
team add: the file was never approved on this machine: run `team approve` 1
team add: approved before records were signed: run `team approve` once — the record was written by an earlier team; the same line, with the case, for a record that does not verify1
team add: the file is not the approved one (<differences>): run `team approve` 1
team add: the approved copy can't be read: run `team approve` 1
team add: the approved file has no seat "<name>"1
team add: <name> is already running1
team add: no launch profile for \` in this version`1
team add: the approval allows <n> seats; <m> would be running / … <n> temporary seats; … / … <n> <vendor> seats; …1
team add: refused: <account> <window> left <n>%, inside its <reserve>% reserve, changed <age> ago; accounts with room: <accounts>1
team add: refused: <account> spend <amount> <CUR>, at or below its <floor> <CUR> floor, read <age> ago; accounts with room: <accounts>1
team add: session can't be "default", herdr's own session1
team add: herdr doesn't answer1
team add: session <session> is stopped; clear it with `herdr session delete <session>` 1
team add: session <session> runs, and its agents can't be read1
team add: --until is result:<path> or merged:<branch>1
team add: a result path is relative to the project / team add: <path> already exists1
team add: workspace.base is required to read a merged end / team add: branch <branch> doesn't exist1
team add: no worktree named "<task>" is recorded1
team add: worktree <task> has a failed setup; team worktree remove <task>1
team add: the file is legacy: migrate trust to absolute paths including the lobby ~/.config/team/lobby: ...1
team add: trust: must list the lobby ~/.config/team/lobby1
team add: the lobby ~/.config/team/lobby: <check>1
team add: seat beacon-qa would start in live, inside the protected checkout live; a seat that isn't `mode: shared` never starts in one1
team add: the file changed while add was checking; nothing was written1
team add: the load is <n> per core, above <n> / team add: free memory is <n>%, below <n>%1
a MISS finding from team doctor, the seat's own launch line among them1
team add: another session-mutating run is holding session <session> (pid <pid>); try again when it is done — another run holds the session's mutator lock, the one lock up, add, down and remove share; the line names no command, because the lock is shared. The lock is taken before this run's first effect and released at its end; --dry-run takes no lock and never shows it1
team add: another session-mutating run may be holding session <session>, and its lock cannot be read; if no run is using it, delete <state dir>/seat-locks/<session>/.run — the lock file does not read as a token, so its holder is unknown and only the owner clears it; the line names the file1

The ceilings are read from the approval's record, never from the file: a seat that would put the session past limits.seats, past limits.temporary for a temporary seat, or past a limits.vendors entry for its vendor, is refused.

The exit codes these refusals carry are on the team add page.

A seat already running

The seat that is already running is never touched, and adding it is refused:

Terminal
 team add claude-beacon ; echo "exit $?"
team add: claude-beacon is already running
exit 1

A name the file does not have

The seat's name must be one the approved file has, so a name that is not is refused before herdr is asked anything:

Terminal
 team add scratch ; echo "exit $?"
team add: the approved file has no seat "scratch"
exit 1
 team add --temporary --like claude-beacon --until later ; echo "exit $?"
team add: --until is result:<path> or merged:<branch>
exit 1

The temporary flags, and a missing name

The flags that describe a temporary seat are refused without --temporary, and a name is required outside it. Both stop at the usage line, before the file is read:

Terminal
 team add claude-keeper --like claude-beacon ; echo "exit $?"
team add: --like, --until and --worktree are for --temporary
exit 2
 team add ; echo "exit $?"
team add: a seat name is required
Usage: team add <name> [--dry-run] [--session <name>] [--file <path>]
       team add --temporary --like <seat> --until <result:path|merged:branch> [--worktree <task>] [--dry-run] [--session <name>] [--file <path>]
exit 2