vexillum
for coding agents

One commander. Many soldiers.

vexillum orchestrates coding agents from your terminal. A commander dispatches soldiers into isolated camps, a sentinel watches for what needs your attention.

brew install isaias-alt/tap/vexillum
read the docs
see it in action

The whole loop, as a conversation.

Five moments from a commander session in Claude Code. Click one, or just watch.

  1. I

    Ask for work in plain words. The commander sends a mission and a scout, each into its own camp.

    Docs →
  2. II
  3. III
  4. IV
  5. V
~/project - commander01 / 05
dispatch a soldier to refactor the payment module, and a scout to trace the memory leak
On it, general. One mission and one scout, coming up.
Bash(vx dispatch "refactor the payment module" --kind mission --model sonnet)
task_id=7c1e9a40d3b2f658 kind=mission camp_slot=1
still running
Bash(vx dispatch "trace the memory leak" --kind scout)
task_id=e41b07d9a52c3f86 kind=scout camp_slot=2
Both soldiers are in the field, general. The mission works in camp 1, the scout in camp 2 (it only investigates, it won't touch your code). Keep talking to me, I'll hear from the sentinel when either one settles.
the vocabulary

Every part of vexillum maps to a role in the field.

general
The human - you. Talks only to the commander; never manages soldiers directly.
commander
The orchestrator you run. Reads a mission, dispatches soldiers, and tracks their progress.
soldier
A subagent the commander runs. Each one works a task independently, inside its own camp.
camp
A soldier's isolated workspace - its own worktree, so parallel soldiers never collide.
sentinel
Watches running soldiers and wakes the commander when one finishes, is blocked or is interrupted.
mission / scout
The two task types a commander can run: a mission executes work, a scout investigates and reports back.
the command loop

How one prompt becomes many soldiers.

You talk to one commander. It dispatches soldiers into isolated camps, and a sentinel watches them in the background so the commander only wakes when one settles.

generalyoucommanderClaude Codeaskreport1vx landvx ship6vx dispatch2camp 1soldiermissioncamp 2soldierscoutcamp Nsoldiermission3polls4sentinelin the backgroundwakes the commanderwhen a soldier settles5
  1. You tell the commander what you want.
  2. It dispatches soldiers with vx dispatch, one per task.
  3. Each soldier works alone in its own camp, a git worktree.
  4. The sentinel polls every camp in the background.
  5. When a soldier settles (done, blocked or interrupted) the sentinel wakes the commander.
  6. The commander reports to you, or asks whether to vx land or vx ship.

Two ways out of a camp.

Land stays on your machine. Ship runs the tribunal and opens a real pull request.

mission donevx landvx shipyou reviewno pipelinetribunallint · testsreview · docsfast-forwardyour checkoutpush + open PRreaches GitHub

Restart-proof state.

Everything lives on disk in ~/.vexillum, written atomically. Kill the commander or the sentinel and the next one picks up where it stopped.

sentinelbeforecommanderbeforerestartsentinelcommanderreconciled from disk~/.vexillumtasks and wakes, atomic JSON
dispatching

No new interface to learn.

You already talk to your commander in Claude Code. Ask it to dispatch a soldier, and it calls vx for you.

dispatch a soldier to refactor the payment module
Bash(vx dispatch "refactor the payment module" --kind mission --model sonnet)
task_id=7c1e9a40d3b2f658 kind=mission camp_slot=1
still running
also have someone trace that memory leak, just investigate for now
Bash(vx dispatch "trace the memory leak" --kind scout)
task_id=e41b07d9a52c3f86 kind=scout camp_slot=2
open source

Found a bug? Want to help?