Missions and scouts
The two kinds of task, and the states a task moves through.
Two kinds
| Mission | Scout | |
|---|---|---|
| Purpose | change code, deliver something to land | investigate and report back |
| Writes to its camp | yes, commits on its branch | never commits or pushes |
| Delivers | commits on vexillum/<task-id>, landed with land or opened as a PR with ship | a markdown report |
| Done means | it produced commits ahead of its base | its report file exists |
vx dispatch defaults to --kind mission. A scout writes its report to ~/.vexillum/projects/<repo>-<hash>/reports/<agent-name>-<task-id>.md, outside the camp, so it survives strike. Never use a scout for work that must change code.
--model and --effort are passed straight to the CLI of the profile's harness (claude unless the profile names pi or opencode); vexillum checks that the harness accepts the value, by shape only for the models of Pi and OpenCode (see models.json). Choosing them is the commander's job, from the profiles in models.json (--profile). See also AGENTS.md and rules.
Task states
| Status | Meaning |
|---|---|
pending | created, not started yet |
running | the soldier is working |
blocked | the soldier asked a question and is waiting; the question is in the task's decision. See Blocked and interrupted |
done | settled with proof of completion |
failed | settled unsuccessfully |
interrupted | vexillum lost the soldier itself (its herdr pane vanished), not necessarily because it failed; work already committed is still in the camp |
unconfirmed | the soldier went idle without proof of completion and without a valid declared pause, so vexillum cannot tell success from stuck; a human needs to look |
shipped | pushed through the tribunal pipeline and opened as a real pull request; the soldier and its camp stay open on purpose until the PR is merged. See Land vs ship |
struck | an interrupted or failed task whose camp was returned to the pool with strike; nothing is left to watch, re-prompt or re-dispatch. A done or shipped task keeps its status when struck |
done is never inferred from idleness alone. For a mission vexillum requires a new commit ahead of the camp's base; for a scout, the report file. Every dispatch prompt states the deliverable. A mission is told to commit on its own branch, ahead of its base, and to close with a final delivered: <summary> line; a scout is told its report path. Soldiers are also told never to pause on a background job: long commands run in the foreground (a foreground tool call is capped at about 10 minutes in Claude Code, and the other harnesses set their own timeout), so a command that can take longer is split or flagged in the final message instead of backgrounded. A soldier that has to wait on something external it cannot run in the foreground can declare a pause in pauses/<agent-name>.md so a quiet turn is not mistaken for completion. When it wakes it must finish the deliverable before ending its turn: deleting the pause file is not finishing, and a turn that ends that way becomes unconfirmed.