opus-workers — the orchestrator reviews, cheaper tiers do the bulk work
APPLIES WHEN you are about to spawn subagents (Agent tool) or a workflow (Workflow
tool) for non-trivial work AND a tier strictly cheaper than the orchestrating model can do
that work faithfully.
SKIP WHEN no cheaper tier fits: the task is a single trivial step (do it inline — the
spawn + review round-trip costs more than it saves), the work is a GATED action (below),
or the session model is already at/below the tier the task needs.
NEVER DELEGATE gated actions. Anything bound to the user's explicit authorization —
git commit, git push, publishing / public-visibility changes, deletions, account or
config changes — is done INLINE by the orchestrator, never handed to a worker on any tier.
The authorization lives in THIS conversation's context; a worker can't know what the user
approved, and a misfire is exactly the class of action that isn't cheaply undone. (They're
also single commands — spawn overhead alone exceeds the work.)
WHY. Keep the expensive orchestrating model as a THIN reviewer and move the BULK
generation onto the cheapest tier that can do it faithfully. Output tokens cost more than
input and re-enter context on every later turn, so offloading generation compounds across
the session. A spawned reviewer call is never the cheaper option, even at a higher
tier/effort than the workers: it re-bills the worker's entire output as its own input,
adds its own system-prompt overhead, and buys no catch-rate edge on a rubric that's
already fully specified — that's exactly why review stays folded into the orchestrator
instead.
The loop
Pick the worker tier + effort by task class.
- Substantive generation (real reasoning: drafting, analysis, non-trivial code):
one tier down from the orchestrator (Fable → Opus; Opus → Sonnet), effort medium
(routine) or high (substantive). Only when unusually demanding —
correctness-critical, or you'd push toward xhigh/max — ask the user which effort
before spawning.
- Mechanical bulk (high volume, low ambiguity, judgment-free: applying an approved
mechanical transform across many files, genericizing copies, regenerating fixtures,
mass renames per an approved plan): two tiers down (Fable → Sonnet; Opus → Haiku),
effort low or medium. If a "mechanical" task turns out to need judgment
mid-flight, that's a misclassification — pull it back up a tier or inline; don't let
the cheap worker improvise.
- Rule of thumb: the cheapest tier the task class tolerates, always strictly cheaper
than the orchestrator; if nothing cheaper fits, do it inline.
- Effort binds on the Workflow path (
agent(prompt, { model, effort })); the plain
Agent tool has no effort param (subagents inherit session effort) — note that in
your summary when it applies.
Pre-register the review rubric — BEFORE spawning. Write down, in your plan or the
spawn message, the 3–7 concrete checks this output must pass and HOW each will be
stress-tested: the command you'll run, the canary, the sample you'll re-derive by hand,
the diff you'll scan. Executable checks over eyeball checks wherever possible. The same
rubric goes into the worker prompt as its success criteria. Pre-registering kills the
two review failure modes: rubber-stamping, and a post-hoc rubric quietly shaped by
whatever the output happens to be. Scale it to the tier: substantive work gets the full
rubric; mechanical bulk gets counts + spot-checks (N samples re-derived, diff scanned
for out-of-scope lines) — a line-by-line re-read of bulk output eats the savings.
Delegate. Spawn every worker with the step-0 model override — never the
orchestrator's model. Each worker gets a self-contained task AND the step-1 rubric as
its success criteria. Independent tasks → fan out in parallel.
Review as the orchestrator, against the pre-registered rubric. Run the rubric as
written — every check actually executed. You may ADD checks for problems you only saw
once the output existed; you may NOT silently drop a pre-registered check that is
failing. The orchestrator IS the reviewer — don't spawn one and don't downgrade the
review.
Decide per output.
- Satisfactory (rubric passes) → keep it. Once all workers pass, present.
- Not satisfactory → send back to the SAME worker with the failing rubric items and
the concrete change you want. "Do better" wastes a round — name the fix.
Bound the loop. At most 2 redo rounds per worker. Still short after that →
present the best version WITH an honest note on what's still weak. Never loop forever;
never silently ship a result you know is weak.
Rules
- The routing is an instruction you follow, not something the harness enforces — you must
actually pass the model override when you spawn. Forget it and the worker runs on the
orchestrator's model and the savings are gone.
- Review is the orchestrator's job precisely because it's the quality gate. Delegating the
review itself to a cheaper tier defeats the purpose.
- The rubric is written before the output exists. A review that invents its criteria after
seeing the output isn't a gate, it's a rationalization.
- Worth it only when the delegated work is substantial (multi-file, multi-step, or fanned
out). For a quick lookup or a one-line edit, skip the whole dance.
- Savings come from the workers doing the output-heavy generation; the orchestrator still
pays input tokens to read each output during review. The win scales with how much the
workers GENERATE vs. how much the orchestrator re-reads — which is why bulk review is
sampled, not re-read line-by-line.
- All standing rules (no fabrication, surgical scope, project conventions) apply to every
worker tier and the review — delegation doesn't relax them.
1---2name: opus-workers3description: When spawning subagents or workflows for non-trivial work and a tier strictly cheaper than the session model fits: run doer agents on that cheaper tier (Opus medium/high for substantive generation, Sonnet low/medium for mechanical bulk) after pre-registering a review rubric, then review each output AS the session model — accept or send back with pointers. Skip for trivial one-shots, for GATED actions (commit/push/public changes stay with the orchestrator), and when no cheaper tier fits.4---56# opus-workers — the orchestrator reviews, cheaper tiers do the bulk work78**APPLIES WHEN** you are about to spawn subagents (Agent tool) or a workflow (Workflow9tool) for non-trivial work AND a tier strictly cheaper than the orchestrating model can do10that work faithfully.1112**SKIP WHEN** no cheaper tier fits: the task is a single trivial step (do it inline — the13spawn + review round-trip costs more than it saves), the work is a GATED action (below),14or the session model is already at/below the tier the task needs.1516**NEVER DELEGATE gated actions.** Anything bound to the user's explicit authorization —17`git commit`, `git push`, publishing / public-visibility changes, deletions, account or18config changes — is done INLINE by the orchestrator, never handed to a worker on any tier.19The authorization lives in THIS conversation's context; a worker can't know what the user20approved, and a misfire is exactly the class of action that isn't cheaply undone. (They're21also single commands — spawn overhead alone exceeds the work.)2223**WHY.** Keep the expensive orchestrating model as a THIN reviewer and move the BULK24generation onto the cheapest tier that can do it faithfully. Output tokens cost more than25input and re-enter context on every later turn, so offloading generation compounds across26the session. A spawned reviewer call is never the cheaper option, even at a higher27tier/effort than the workers: it re-bills the worker's entire output as its own input,28adds its own system-prompt overhead, and buys no catch-rate edge on a rubric that's29already fully specified — that's exactly why review stays folded into the orchestrator30instead.3132## The loop33340. **Pick the worker tier + effort by task class.**35 - **Substantive generation** (real reasoning: drafting, analysis, non-trivial code):36 one tier down from the orchestrator (Fable → Opus; Opus → Sonnet), effort **medium**37 (routine) or **high** (substantive). **Only when unusually demanding** —38 correctness-critical, or you'd push toward xhigh/max — ask the user which effort39 before spawning.40 - **Mechanical bulk** (high volume, low ambiguity, judgment-free: applying an approved41 mechanical transform across many files, genericizing copies, regenerating fixtures,42 mass renames per an approved plan): two tiers down (Fable → Sonnet; Opus → Haiku),43 effort **low** or **medium**. If a "mechanical" task turns out to need judgment44 mid-flight, that's a misclassification — pull it back up a tier or inline; don't let45 the cheap worker improvise.46 - Rule of thumb: the cheapest tier the task class tolerates, always strictly cheaper47 than the orchestrator; if nothing cheaper fits, do it inline.48 - Effort binds on the Workflow path (`agent(prompt, { model, effort })`); the plain49 Agent tool has no `effort` param (subagents inherit session effort) — note that in50 your summary when it applies.51521. **Pre-register the review rubric — BEFORE spawning.** Write down, in your plan or the53 spawn message, the **3–7 concrete checks** this output must pass and HOW each will be54 stress-tested: the command you'll run, the canary, the sample you'll re-derive by hand,55 the diff you'll scan. Executable checks over eyeball checks wherever possible. The same56 rubric goes into the worker prompt as its success criteria. Pre-registering kills the57 two review failure modes: rubber-stamping, and a post-hoc rubric quietly shaped by58 whatever the output happens to be. Scale it to the tier: substantive work gets the full59 rubric; mechanical bulk gets counts + spot-checks (N samples re-derived, diff scanned60 for out-of-scope lines) — a line-by-line re-read of bulk output eats the savings.61622. **Delegate.** Spawn every worker with the step-0 model override — never the63 orchestrator's model. Each worker gets a self-contained task AND the step-1 rubric as64 its success criteria. Independent tasks → fan out in parallel.65663. **Review as the orchestrator, against the pre-registered rubric.** Run the rubric as67 written — every check actually executed. You may ADD checks for problems you only saw68 once the output existed; you may NOT silently drop a pre-registered check that is69 failing. The orchestrator IS the reviewer — don't spawn one and don't downgrade the70 review.71724. **Decide per output.**73 - **Satisfactory** (rubric passes) → keep it. Once all workers pass, present.74 - **Not satisfactory** → send back to the SAME worker with the failing rubric items and75 the concrete change you want. "Do better" wastes a round — name the fix.76775. **Bound the loop.** At most **2 redo rounds** per worker. Still short after that →78 present the best version WITH an honest note on what's still weak. Never loop forever;79 never silently ship a result you know is weak.8081## Rules8283- The routing is an instruction you follow, not something the harness enforces — you must84 actually pass the model override when you spawn. Forget it and the worker runs on the85 orchestrator's model and the savings are gone.86- Review is the orchestrator's job precisely because it's the quality gate. Delegating the87 review itself to a cheaper tier defeats the purpose.88- The rubric is written before the output exists. A review that invents its criteria after89 seeing the output isn't a gate, it's a rationalization.90- Worth it only when the delegated work is substantial (multi-file, multi-step, or fanned91 out). For a quick lookup or a one-line edit, skip the whole dance.92- Savings come from the workers doing the output-heavy generation; the orchestrator still93 pays input tokens to read each output during review. The win scales with how much the94 workers GENERATE vs. how much the orchestrator re-reads — which is why bulk review is95 sampled, not re-read line-by-line.96- All standing rules (no fabrication, surgical scope, project conventions) apply to every97 worker tier and the review — delegation doesn't relax them.