From b735c16b30ae292c0ca1d5c35297d9f0c5ecd097 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Sun, 23 Aug 2026 15:54:46 +0100 Subject: [PATCH] feat(blitz): spawn-time model assessment over label table Co-Authored-By: Claude Fable 5 --- skills/blitz/AOE-WORKERS.md | 40 ++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/skills/blitz/AOE-WORKERS.md b/skills/blitz/AOE-WORKERS.md index d968f56..3cd0227 100644 --- a/skills/blitz/AOE-WORKERS.md +++ b/skills/blitz/AOE-WORKERS.md @@ -11,24 +11,32 @@ babysitting and cleanup. ## Model routing -Default table, by the repo's `difficulty/` label (issues without one: judge -the tier yourself from the issue's shape): +**Assess each issue at spawn time.** You have just read its body to write the +prompt — use that read to pick the model. The question is not "how big is +this" but **how much judgment does the session still have to exercise**: -| Difficulty | Models | -|---|---| -| hard | Fable (`--tool claude --extra-args "--model claude-fable-5"`) | -| moderate | Opus (`--tool claude --extra-args "--model claude-opus-5"`) | -| easy / trivial | Sonnet (`--tool claude --extra-args "--model claude-sonnet-5"`) | +- Body settles the approach (root cause named, fix shape decided, numbers + suggested, files pointed at) — the thinking happened at filing time; the + session executes. **Sonnet** (`--tool claude --extra-args "--model + claude-sonnet-5"`), regardless of size: a large mechanical CRUD issue is + still execution. +- Body states the goal but the session must design the interface, choose the + data model, or amend the design doc — **Opus** (`--model claude-opus-5`). +- The design doc itself is thin or contradictory where this issue lives, + correctness is subtle, or the change is cross-cutting with unclear blast + radius — **Fable** (`--model claude-fable-5`). -The operator overrides this by just saying so in the invocation ("run these -on codex", "use ox alpha for the easy ones") — no config file. Route by how -much judgment the session still has to exercise, not by the label alone: an -issue whose body already settles the approach (root cause named, fix shape -decided, numbers suggested) drops a tier, because the thinking happened when -it was filed. When a tier -has two models, alternate within it rather than draining one first — a bad -run should be visible early. Escalate *sideways* (the tier's other model) -before escalating up, and never de-escalate mid-issue. +A `difficulty/` label is one input — a filing-time guess that cannot see how +much the body scaffolds. Trust your read of the body over it; the label is a +tie-breaker. When in doubt between two tiers take the lower one: escalation +on failure is cheap, and a failed cheap run teaches something a successful +expensive run does not. + +The operator overrides any of this by just saying so in the invocation ("run +these on codex", "use ox alpha for the easy ones") — no config file. When +routing across peer models, alternate rather than draining one first — a bad +run should be visible early. Escalate *sideways* (a peer model) before +escalating up, and never de-escalate mid-issue. ## Spawning