maestro

A plugin for Claude Code

A session at full dispatch, drawn as a circuit board: one request arrives on a paired trace, fans out through dispatch junctions to a field of android faces, and returns along dashed lines to Oscar, whose portrait sits in a copper ring at the left — one paired trace leaves toward your chair.

Maestro

He never touches the code. That is the point.

Your session gets heavy because it reads everything. Six hundred lines of log, three failed test runs, a whole file you needed one function from. By mid-afternoon the conversation is sludge.

Maestro reads none of it. He sends each job to a worker in its own private copy of your repository — same history, separate folder, your files untouched. The worker reads the mess. Then a different model, from a rival company, has to be convinced before one line lands in your branch.

Install GitHub

What comes back to you is a paragraph and a receipt. Your conversation stays clean. That is the whole design.

Panic is a scheduling error. I don’t schedule it.

01 The Trick

Three rules he does not bend.

  1. i

    He never implements.

    Not once. Not “just this small fix.” Every job is written up — what to build, what counts as done — and handed out. He keeps the shape of the work. The workers keep the detail. Neither carries the other’s head full of context.

  2. ii

    Nobody signs their own work.

    The reviewer always comes from a different model family than the author. Claude wrote it, GPT or Gemini reads it. The script that closes a job checks the families itself, and refuses to record a same-family review as independent.

  3. iii

    “It works” is not a sentence.

    It is a command that ran, with an exit code, stamped by the only script allowed to stamp it. Not in the record? It didn’t happen. The record sits on disk in .maestro/ and you can read it without asking anyone.

He will recite them if you ask. He would rather not have to.

02 The Roster

Thirty-one workers. None of them you.

The roster is filled the day you install him and never improvised mid-job. Every job is sized first — recon, mechanical, standard, expert, apex — and the size decides who does the work, at what effort, and which reviewer is strong enough to judge the result.

That routing is written down before anything starts. So when a session dies, the restart reads what was supposed to run instead of guessing.

The maestro worker roster, role by role
RoleNamesWhat they do
The Claude buildersexecutor-claude-mech
executor-claude-standard
executor-claude
executor-fable-low
executor-fable
Sonnet 5 for small and standard work, Opus 5 for hard problems and anything with an interface, Fable 5 for escalation and the biggest jobs.
The GPT buildersexecutor-luna
executor-terra
executor-sol-expert
executor-sol-apex
GPT-5.6 via Codex CLI, one rung per size. Ships asleep; the lane opens once it is verified and switched on.
The wide-context builderexecutor-geminiGemini 3.1 Pro. Large context, and the one that spreads authorship around.
Reviewers of GPT and Gemini workreviewer-claude
reviewer-claude-expert
reviewer-claude-apex
Sonnet 5, Opus 5, Fable 5 — one rung per size, never below the job being judged. Claude Code is the runtime, so this lane is always reachable.
Reviewers of Claude and Gemini workreviewer-terra
reviewer-sol-expert-rev
reviewer-sol-apex-rev
GPT-5.6 via Codex CLI, one rung per size, asleep with the rest of that lane.
Reviewer of Claude and GPT workreviewer-geminiGemini 3.1 Pro. Standard work and below, whoever wrote it; the two biggest sizes never route here.
The fallback reviewersreviewer-degraded-opus
reviewer-degraded-sonnet
reviewer-degraded-opus-apex
reviewer-degraded-fable-apex
For when no rival family is reachable at all: a fresh Claude reviewer on a different Claude model, blind to the author’s transcript. Always labelled, never counted as the real thing.
The plannerplannerTurns “fix everything” into numbered jobs with acceptance criteria.
The closed roomconvergence
plan-counterpart
When two workers disagree, two families with no stake in it take independent positions — two passes, no more — and come out with one answer, or bring you both.
The context-keepercontext-keeperRemembers what you meant, not just what you said. Answers the workers so they don’t reach you.
The scoutscoutFast, cheap, reads everything, touches nothing.
The researcherresearcherComes back with citations or doesn’t come back.
The crystallizercrystallizerReads the whole pile so nobody else has to; hands back one page.
The recorderhandoff-recorderWrites down how the session ended. Every ending, one entry, no poetry.
The fleet medicfleet-medicChecks the roster against what is actually running: alive, dead, or pretending.
OscarmaestroDispatches. Implements nothing. There is a law against it.

Sixteen agent files hold every role above — several share one file and differ only in the model and effort the routing hands them.

Workers in flight, drawn as a circuit board: android faces set in copper rings, joined by bone-white traces, with dashed return lines carrying finished work back toward Oscar.
Every worker here has one job and a written spec for it.

03 The Record

Not in the record? It didn’t happen.

This is the one point he is severe about. The file below only ever grows — nothing is edited, nothing is quietly dropped — and it is the session’s memory. A claim without a stamp beside it is gossip.

.maestro/ledger.jsonlappend-only
01 {"seq":41,"kind":"mission-open","payload":{"mission_id":"m-014","title":"rate-limit /export"}}
02 {"seq":42,"kind":"route","payload":{"phase":"author","task_class":"standard","resolved_seat":"executor-claude-standard","reserved_review":{"seat":"reviewer-gemini"}}}
03 {"seq":43,"kind":"gate","payload":{"cmd":"npm test","exit_code":1}}
04 {"seq":44,"kind":"revise-verdict","payload":{"seat":"reviewer-gemini","detail":"round 1"}}
05 {"seq":45,"kind":"gate","payload":{"cmd":"npm test","exit_code":0}}
06 {"seq":46,"kind":"stop","payload":{"stop_state":"DONE","reporter":"maestro"}}

Six lines. The whole morning. Line 02 was written before the worker existed — who would do the job and who would judge it, decided and recorded first. A gate line is a command that ran and the code it exited with, so line 03 is a failure — kept at exactly the same volume as the success on line 05. Every line also carries a timestamp and an id, trimmed here for width.

04 Recovery

Close the laptop whenever you like.

Mid-sentence, out of context, in a temper — it makes no difference. Send every worker home at midnight if you want to. At dawn, fresh workers read the record, check the roster against what is actually still running, and resume at the exact step where the work stopped.

A restart is bookkeeping. Not re-planning.

Why that works

Every worker commits after each coherent step, in its own copy of the repo, and writes one line saying where it got to:

{ step, done_evidence, next }

So the cost of a crash is set by how finely the work was cut up — never by how large the job was.

Oscar between dispatches, drawn as a circuit board: Oscar in profile inside a copper double ring, silver-haired, one amber eye lit, with bone-white traces running past the ring at the frame’s edge.
Perfectly vertical amid chaos. It is the whole job.

05 Review

Convince a stranger, or it doesn’t land.

Whoever wrote it does not get to approve it. The reviewer comes from a different model family than the author, and the closing script works out both families from the routing config rather than believing what the record says about itself.

When no rival family is reachable at all, the work is not held hostage to that: review drops to a fresh Claude reviewer with no access to the author’s transcript, usually on a different Claude model. That is a lower bar and it is named as one — recorded as degraded-path, counted separately, never called independent.

And when they can’t agree

  1. 1 The reviewer says revise. The same worker picks it back up — same session, same memory. Twice at most, because a third round is rarely new information.
  2. 2 Someone tries a genuinely different approach. Not the same idea in new words: if it can’t be said as “instead of A, try B,” it will fail the same way.
  3. 3 Two families with no stake in the argument take independent positions, then reconcile. Two passes, hard cap.
  4. 4 Small disagreements park with their evidence and the work moves on. Only a foundational one reaches you — with both positions quoted, because a summarised disagreement is a decided one.

One exception, deliberate: confusion about what you meant skips all of it and arrives straight away, as one precise question. Guessing your intent is how a session ships the wrong thing, beautifully.

06 Install

Two commands. Then ask for something.

1 Engage him.

claude plugin marketplace add Fredasterehub/maestro claude plugin install maestro@maestro

Installed once, at user scope — every session is met at the door. claude plugin update maestro@maestro when a new version lands.

2 Clear the field.

Remove any competing orchestration layer from your global CLAUDE.md first. Two of them in one session will spend it arguing about who is in charge.

3 Ask for something.

There is no setup interview. State appears in .maestro/ on first use, and /maestro:doctor will tell you the truth about your install without changing a thing.

  • /maestro:statusneeds you · just landed · still moving · waiting in line
  • /maestro:handoffeverything worth keeping, moved somewhere durable
  • /maestro:doctorinstall and state health
  • /maestro:auditthe record read back at you: revise rates, first-pass rate by size, degraded reviews, workers lost in service
Terminal transcript showing the maestro install command and its first response.
What it looks like when he takes over.

07 The Trees

Nothing is built where you are sitting.

Every job goes out to its own private copy of the repository — same history, separate folder — and nothing comes back until a reviewer from another family signs for it.

Then the close proves the landing rather than trusting it. Your branch has to carry the exact reviewed commit, or a squash with that commit’s fingerprint; nothing else may ride in under the same signature, and a repository with uncommitted changes does not close at all.

Diagram: a job branching into its own private copy of the repository, reviewed there, then merged back.
Fig. 1 Working apart — send out, isolate, review, land. Full size.
Diagram: the steps that decide what is settled without you and what reaches your chair.
Fig. 2 The short list that actually reaches your chair. Full size.