Status 2026-09-11: historical (2026-07). The tier idea stands; the concrete provider/runner table was re-baselined on 2026-09-11 (Claude CLI aliases, Sonnet for dev and trunk-ops) — see ticket 12d464aa66.
Tiered Runner Plan (T0/T1/T2)
Goal (the project's founding constraint): minimize pro-model API tokens. Local Ollama does the bulk work; stronger tiers are consulted deliberately, on evidence, on budget.
The tiers
| Tier | Runner | Brain | Cost model | Use for |
|---|---|---|---|---|
| T0 | native / model-only |
local Ollama (codex-crystal-gemma4) |
free (electricity) | bulk + mechanical work: scoped code edits, triage, summaries, chat |
| T1 | claude |
Claude CLI, Pro login (sonnet-class) | plan rate limits, not $ | tasks T0 failed or triaged moderate+; sessions needing sustained judgment |
| T1' | codex-luna / codex-mini |
Codex CLI, ChatGPT subscription login (confirmed 2026-07-15: auth.json store, OPENAI_API_KEY stripped) | plan limits, not $ | alternative mid-tier; A/B against T1 |
| T2 | trunk-ops |
Claude CLI (opus-class), primary workspace | plan limits | operator gates ONLY: review, isolated verify, merge, revert — never implementation |
| consult | ConsultPolicy inside a T0 run | configured pro provider | metered, budgeted (~8k tokens) | one-shot unblock inside a local run, not a takeover |
Routing rules
- Local-first. Every ticket starts at T0 unless triage says otherwise.
- Triage fields drive routing (
complexity,design_input— ticket e834feacfc, automation in Review):design_input >= confirm→ the user, before any runner;complexitylow → T0, moderate+ → T1. - Escalate on evidence, not vibes: a T0 failure gets ONE precise retry (exact finding on the ticket); a second failure escalates to T1 with a self-contained brief — failure post-mortems, explicit rejects, acceptance criteria the runner must verify before committing.
- T2 never implements. Trunk-ops verifies in isolation and merges; deploy stays with the operator. Disagreements between environments resolve by evidence in the canonical env (ticket 038fca3c68).
- Escalation is also data: every escalation is a labeled failure case for T0 improvement (tool-loop reliability roadmap, fine-tuning corpus).
Evidence log
- 2026-07-14/15, gp-crystal b8f6d79058 (one-line wiring fix): T0 failed twice in distinct modes — dead code + false report claim; then destructive whole-file truncation that passed type-check-only verification. T1 (claude) delivered a minimal additive diff in 2 minutes with honest verification. T2 held a merge on a suspected red trunk (correct discipline; turned out env divergence), then merged with full provenance.
- 2026-07-15, e1465affdf (5-file UI/data feature): T1 direct (triaged moderate) — clean in 15 minutes; T2 isolated-verify + merge; suite 1108/0.
Open work
- e834feacfc: triage automation to Review-complete, then routing keys off the fields automatically.
- Tool-loop reliability (T0 quality): sentinel-block edits, report-vs-diff validation (the b8f6 false claims), escalation hints.
- Model improvement milestone: few-shot + fine-tune on Crystal source/commits so T0 wins more of these.