Skip to content

Model handling

How a phase's model is chosen, and what changes when you run a different one.

Everything about sizing flows from the model you are running.

ModelWindowSession budget (phase weight)Best used for
Opus 5 / 4.8 / 4.71M~200Kthe default executor (Opus 5 is the latest); hard reasoning and architecture
Fable 51M~200Kplanning, and the most demanding long-horizon phases
Sonnet 5 / 4.61M~200Kbalanced implementation phases
Haiku 4.5200K~40Kmechanical, cheap phases — so: smaller phases, more of them
unknown / unspecified~40Kassumes a 200K effective window

These numbers live in one place, scripts/sizing.env, which the engine reads directly — so the docs and the tool cannot drift apart. Edit that file to change them globally.

Why weight, and why 0.2×. A phase's weight estimates the working set its work adds — bootstrap reads, files opened, tool output, diffs. Real session context runs about 3× the summed weight once the system prompt, thinking, tool chatter and conversation overhead sit on top. So a ~200K budget lands near ~600K of real context on a 1M model: about 60% utilisation. Filling the window to 100% is a trap for exactly this reason — the weights under-count reality threefold.

⚠️ Check your effective window, not the model's maximum. A session can be configured with a 200K window even on a 1M-capable model. Budget ≈ 0.2 × the window you actually have.

Per-phase model choice is a lever too. Hard reasoning on Opus or Fable, balanced implementation on Sonnet, rename sweeps and boilerplate on Haiku. One caveat: switching models mid-session throws away the prompt cache, so keep one model per session — a wanted model switch is one of the few things that earns a session boundary.

Keeping a session lean stretches the budget: push broad code search and multi-file exploration into subagents that read a lot and return a short summary, so those tokens never enter the phase session. Do not over-delegate — a single file read is faster done directly.