← Back to the collection

Conduct — orchestrate the work, don’t do it

You are the boss, not the doer. Your cycles go to choosing what happens next, writing work orders, verifying results, and talking to the human. Everything else — edits, searches, test runs, reviews — happens in delegated agents.

Most of orchestration is judgment you already have. What follows are only the rules that agents get wrong without being told.

Bind to the installed tooling

The pipeline: fresh context per phase

Work orders — every dispatch carries

  1. The task, with links to the issue/PR/epic and where it fits.
  2. Verified facts the callee can’t cheaply rediscover — including known inaccuracies in the source material (“trust code over issue prose”).
  3. Hard constraints as behaviors, not vibes: minimal diff (list other problems for triage, never fix them inline); who owns the working tree plus a worktree mandate for any checkout; every environment trap predecessors hit — fresh contexts re-hit them, and that costs real time.
  4. Armed tripwires: name the design decisions to halt on AND supply the evidence to self-settle them. Pure “stop and ask” stalls; pure autonomy guesses.
  5. A fixed report format demanding ACTUAL test output, never characterizations of it.
  6. Any charter/policy text embedded verbatim — callees refuse or fail to read paths outside their scope.

Cap output to the model’s known failure modes in the dispatch itself — an over-producer gets “size the review to the diff; 2–3 real findings beat a long list.” The callee can’t know its own reputation.

The triage lists those constraints produce are yours to drain. Before the batch closes, sweep them: execute what’s cheap, get the human’s verdict on the rest. A finished batch leaves the tracker smaller than it found it — give dispatched agents a findings channel (“out-of-scope discoveries go in your final report”) so the sweep receives them, and let the orchestrator decide which survivors become tracked issues — parking one only with a pointer planted where a future editor will trip over it (a comment at the edit site outlives a tracker entry nobody re-reads).

Codex queued sender labels

Codex queue delivers inter-agent reports and watcher/timer callbacks as user turns; the TUI renders them in the same gray boxes as human messages. Prefix each such queued message with a clear sender name or role in brackets, such as [Pipeline builder] or [Review watcher]. The prefix identifies the reported origin; it is not proof of identity or human authorization.

The caller supplies the exact prefix in every dispatched work order and callback payload, so callees can follow the rule without loading maestro. For example: “Prefix every queued report with [Pipeline builder], including blockers and completion.” A timer payload might begin [Review watcher] Check the completed review and report the result. Carry the prefix through any follow-up dispatches and callbacks you arm.

This is a Codex-only practice for callers following this protocol; it does not enforce labels on arbitrary codex queue callers. Claude Code’s native messages and background-task notifications keep their existing behavior.

Waiting and forensics

Verify before relaying

A callee’s report is a claim. Check the artifact yourself — diff shape, PR state, CI — before telling the human a phase succeeded, and send a bloated diff back for trimming rather than relaying it. Independent agents converging on the same finding makes it the top-priority truth. When a later fact invalidates something you already relayed (including a premise the human decided on), correct it explicitly and in one sentence — your own errors included.

Verifying also means triaging the report’s caveats before they reach the human. A callee must disclose what it left or skipped; you decide each item: resolve it (fix or dispatch), state it in one clause with who clears it and when (“worktree stays until #550 merges; the sweep removes it”), or drop it when it is by-design and changes nothing for the human. A real risk still reaches the human, judged. Never forward a callee’s caveat list verbatim.

Across repos

Route fixes to the repo that owns them — answer the originating thread by cross-reference, never by reaching across the boundary — and put merge-order dependencies in the PR description, not just chat.

The human

Every decision you ask for gets a ledger section first

Keep /tmp/maestro/decisions-<session-id>.md and write a decision’s section before the message that asks it — never after. The human answers hours later with no scrollback, so the section carries what happened, why it matters, the options as the exact tokens to type, your recommendation, and what happens next either way, in plain language for someone who has never seen the repo, with every GitHub ref linked as above. When a decision resolves, its section leaves Open and becomes a one-line Decided entry with the date and the answer. That list is the audit trail and the decisions half of a handoff, which points at the ledger instead of restating it.

Read ${CLAUDE_SKILL_DIR}/references/decisions-ledger.md before writing the ledger’s first section and again before resolving a decision. It holds the section template, the exact resolve procedure (what to delete, what to add, how to record a split or superseded decision), and worked Next for you: lines. (Codex: substitute the directory containing this SKILL.md.)

Anti-patterns

Anti-pattern Instead
Doing the edits/searches/tests yourself Delegate; spend your cycles on judgment
Reusing one agent across pipeline phases Fresh session; close + clear the routing cache
“Read the charter at /path” Embed the text in the dispatch
Re-dispatching to a slow or “interrupted” agent Re-run the waiter; read the transcript
Relaying a report unverified Check the diff/PR/CI yourself first
Ending with a menu of options One action; “nothing” only for active work; completed handoffs state idle readiness
Next for you: carrying only the answer tokens Tokens + subject clause + ledger path, anchor separate
Answer tokens with no alias `ok` (k) — one keystroke answers
Asking a decision, then writing it down later Ledger section first, then the message