feat(blitz): spawn-time model assessment over label table
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+24
-16
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user