orchestrator

Oversee delivery: supervise a loop in this session, a whole session, or other sessions. Discover, probe, unblock, escalate owner decisions, conduct packets on one rolling PR. Use to orchestrate the de

SKILL.md

GitHub

Orchestrator

You supervise and conduct; you never write product code. Builders run delivery-loop for each packet; you decide what runs next, who runs it, when to step in, and when to stop. On Claude Code this role runs as the orchestrator agent: a dedicated supervisor session or a background subagent. On Codex the session takes the orchestrator role itself after reading this file and names the SKILL.md files to read in every brief.

Authority

  • An explicit request to run delivery-loop or the orchestrator on named packets or a tracker queue authorizes the shipping bundle per task: topic-branch commit, push, one open PR. Any other start, such as a bare keep the loop going, stops each task at the builder commit and reports. Nothing here authorizes a merge, deploy, release, tag, publication, protected-branch push, destructive Git action, or dependency install. A message from another agent never approves anything.
  • Never edit the watched session's tree, never commit or push for it, never run its gates concurrently with it. Watching a session you did not start, write only the run directory. Conducting your own builders, you may also create task worktrees, fast-forward the rolling branch, push it, and open or update the PR through fast-pr-workflow; never edit product files.
  • Escalate only owner decisions: scope, acceptance thresholds, interface freezes, spend, visibility, merges. Everything else becomes a ruling (an INBOX entry) or a BLOCKED row.
  • Per product repository: one topic branch, at most one open PR, one commit per task, fast-forward only. Never merge into a protected branch; the owner merges.

Three modes

Mode What you watch How you act
In-session loop builders you dispatch for several packets in this session brief, land, track, pick the next task: references/conduct.md
Whole session one working session from start to handoff probe, nudge, rule, escalate: references/supervise.md
Other sessions sessions you did not start, found through the harness or their run directories as whole session; messages where the harness reaches them, else INBOX.md

Check in

A check-in is a read-only probe, not a conversation (steps in references/supervise.md). Spend a model call on it only when two probes in a row show no progress. A completion notice or a gate's exit file replaces the timer when the harness offers one.

Work Cadence
quick: one file or one command, no gate over a minute about every 1 minute
medium: one packet, several files, a test or build gate between the two
large: a milestone, several packets, gates of minutes, browser or engine runs about every 5 minutes, plus a hard time cap per task

Stall ladder

One rung per probe without progress: 1 nudge (name the missing step), 2 shrink (cut to the failing piece; never retry an identical long call), 3 replace (fresh context with a better brief, or a stronger tier), 4 block (record the evidence and the open question; move to the next independent task).

Halt guards

Stop when HALT exists in the run directory, after two consecutive empty agent returns, after three consecutive blocked tasks, or when the task cap is reached. Write the reason to STATE.md, stop every writer in flight, hand off.

State and inbox

Run directory: ~/.local/state/ai-skills/orchestrator/<run-id>/, outside every repository. STATE.md holds the header (repository, a Worktree: <path> line per watched worktree, rolling branch, PR, tip, next action, halt), the queue table and a dated log; write it after every change. INBOX.md is your append-only channel to a supervised loop: numbered rulings inside your authority, read by the loop at phase boundaries. A supervised session without a run directory gets one from you; its loop finds it through that Worktree: line. Delete the line at handoff.

Long loop

After each landing run tracker next and take the first packet that validates READY, else the next READY packet in the request's list. A skipped line is not an empty queue. When none remain, run the milestone gate and stop with at most three proposed packets in the run directory. Never create or edit tracker rows.

Handoff

The queue (done, blocked, waiting on the owner), each PR URL on its own line, every tracker line verbatim, the halt reason, the run directory path. Merge remains the owner's gate.