← all features · evolve-loop explainers

Model routing

How each phase picks a CLI and model — and what happens when the pick fails.

How it works today

Verified drift (queued: docs-drift-sweep) — dynamic-phase-routing.md claims the advisor defaults to haiku ("lightweight routing"); code defaults to opus/deep and the constructor comment explicitly rebuts the doc (phase_advisor.go:92-100). Same doc’s status table still says "Default: Off" vs the shipped advisory default (config.go:508); dynamic-model-routing.md’s entire body describes a never-shipped bash design behind its supersession banner.

How it got built

ADR-0022 added the manifest realization. ADR-0024 and ADR-0052 added advisory routing and the clamps. Cycle 436 added the per-phase {cli, tier} plans and the clamp, and cycle 480 added the universal envelope floor. In October 2026, ADR-0119 added the one routing table in three steps. L1a built the resolver, and L1b sent every launch path through it. L2 made the operator’s table live.

A permanent rule of the operator says that profiles name tiers, not models, and that any CLI must run any phase with any model. The clamp and the manifest layers apply this rule.

Generated by /evo:explain · verified against code 2026-07-13 (file:line citations) · doc drift found during verification is queued in .evolve/inbox (docs-code-alignment-2026-07 campaign).

The routing facts on this page were verified again against code on 2026-10-08 (v22.27.0).