Orchestrator

The orchestrator is a team of decent engineers who understand your codebase. Architecture is staked out by chunks, discoverable through code backreferences; a new chunk that arrives with just a defined goal can be reliably implemented by a team that already understands what it's building on. You hand them chunks; they do the work in dedicated workspaces and send each chunk back to you the moment it's done.

The orchestrator turns your understanding of a large swath of architecture into implementation while you sleep.

Mental model

When you inject a chunk, the orchestrator creates a git worktree off your project's active branch and runs the chunk's full lifecycle inside that worktree: plan, implement, review, complete. Review is optional in manual mode; the orchestrator always runs it. Once complete finishes, the orchestrator merges the worktree back to the active branch in the directory you launched it from. Each completed chunk lands as its own commit, which makes the work easy to read chunk-by-chunk afterward.

When chunks interact, declare it in their depends_on frontmatter. The orchestrator schedules them in dependency order so each chunk builds on its predecessors. When chunks don't interact, the orchestrator runs them in parallel, each in its own worktree with its own agent. The same model the chunk page describes still holds: at most one IMPLEMENTING chunk per worktree, enforced across many worktrees at once.

Starting it

$ ve orch start
$ ve orch status

The daemon runs in the background. ve orch stop shuts it down.

Injecting a chunk

A chunk has to be committed before injection. The orchestrator works from git state, not your working directory.

$ git add docs/chunks/my_chunk/
$ git commit -m "feat(chunks): add my_chunk"
$ ve orch inject my_chunk

The orchestrator creates a worktree off the active branch, picks up the chunk, and starts the lifecycle. You can keep working on the active branch in the meantime; the worktree is isolated.

Don't manually flip a chunk to IMPLEMENTING before injecting. The orchestrator manages status transitions for chunks under its control. Inject the chunk in FUTURE; the orchestrator activates it inside the worktree.

The review loop

Review is the orchestrator's quality gate. After implement finishes, the orchestrator spawns a fresh subagent to compare the goal and plan against the implemented code and write a decision. On APPROVE, the chunk proceeds to complete. On FEEDBACK, the orchestrator loops back to implement with the reviewer's notes. The loop is bounded at three iterations; a fourth review escalates the chunk to NEEDS_ATTENTION for operator input.

The fresh context is what makes review catch things. An implementing agent holding goal, plan, and code in a single window for hours starts to lose the gap between what the goal asked for and what the code does. A new agent reading both side by side catches success criteria partially addressed, constraints rationalized past, edge cases never tested. See the Reviewing section on the chunks page for more.

Watching what's happening

$ ve orch ps              # all work units and their states
$ ve orch queue           # what's ready, ordered by priority
$ ve orch tail my_chunk   # stream the agent's log for one work unit
$ ve orch url             # open the dashboard

Attention items

A work unit moves to NEEDS_ATTENTION when it has a question, a conflict with another in-flight chunk, a phase that failed, or an escalated review. View the queue:

$ ve orch attention

The four kinds you'll see most often:

A question

The agent needs context only the operator (or another agent) has.

$ ve orch answer my_chunk "Use the v2 token endpoint, not v1."

A conflict

Two chunks touch the same code in incompatible ways.

$ ve orch resolve my_chunk --with other_chunk parallelize
# or
$ ve orch resolve my_chunk --with other_chunk serialize

parallelize tells the orchestrator the changes are independent enough to merge in either order. serialize says one must finish before the other starts.

A review escalation

The reviewer asked for changes three times and the implementer couldn't satisfy them. Read the latest decision file in docs/reviewers/<reviewer>/decisions/, decide what to do (refine the goal, accept the implementation as-is, abandon the chunk), and resume.

A failure

A phase failed. The worktree is preserved automatically so you can inspect it, fix the issue, and retry.

$ ve orch tail my_chunk          # see what failed
$ cd .ve/chunks/my_chunk/worktree
# investigate, commit any uncommitted work
$ ve orch retry my_chunk

/orchestrator-investigate

When something has gone wrong in the orchestrator and you don't want to figure it out yourself, run /orchestrator-investigate. The skill explores the orchestrator's state, answers questions from stalled agents, works around bugs that left work units stuck, and recovers from just about any state you can land in. Reach for it when the attention queue isn't clearing, a work unit won't move, or you'd rather have an agent triage everything than walk through the queue yourself.

Worktrees and retention

Worktrees live under .ve/chunks/<name>/worktree. By default they are removed after the work unit completes (the chunk's commit is already on your active branch by then). Use --retain to keep a worktree for inspection:

$ ve orch inject my_chunk --retain

Manage retained worktrees:

$ ve orch worktree list                # show status of all worktrees
$ ve orch worktree prune               # merges and cleans up
$ ve orch worktree prune --dry-run     # preview what would be pruned
$ ve orch worktree remove my_chunk     # drops without merging

prune is the safe operation. It merges any uncommitted work back to the base branch before removing the worktree. remove drops the worktree as-is; uncommitted changes are lost.

The orchestrator warns when retained worktrees exceed a threshold (default 10) so disk usage doesn't surprise you. Adjust with ve orch config --worktree-threshold N.

Submitting a batch of FUTURE chunks

A narrative or investigation often produces several FUTURE chunks at once. Hand them all to the orchestrator in one step:

/orchestrator-submit-future

The skill finds every committed FUTURE chunk that isn't already in the orchestrator and injects it. The orchestrator sorts the batch by depends_on and schedules accordingly: dependents wait for their predecessors, independent chunks run in parallel.

Trigger phrases

The slash commands that drive the orchestrator (/orchestrator-inject, /orchestrator-submit-future, /orchestrator-investigate, /orchestrator-monitor) are the easiest entry. When you say "in the background" to your agent, you're telling it to use the orchestrator. The agent will create or commit the chunk as needed and inject it for you.

Working with the orchestrator

A vibe engineer using the orchestrator typically hands off large bodies of work and doesn't see the code until it goes to PR. At PR time you take on the role of an engineering manager, making sure the intent is being maintained in broad strokes. Some PRs you'll review nitpickily, leaving a lot of comments and then telling your agent to resolve them all. Most of the time you accept a bit of distance from the code in exchange for the leverage.

The engineering-manager role also includes QA. Start up what was built, run it, and check that the feature actually makes sense. If the work is more like a data pipeline, prompt a separate agent to test the pipeline's invariants under a variety of scenarios and verify that the tests it writes are valid. The pattern across the role: let the agent lead the investigation, debugging, and test-writing while you verify that its methodology is sound.

What it feels like

Working with the orchestrator at full tilt feels like having a highly competent team bring your architecture vision into reality at unbelievable speed, with you serving just the role of providing judgment.