v3.5.0
Model routing can now make a share of requests follow the tier it picks instead of only recommending one, and on Claude Code the premium tier names the model that actually runs. No command, field or schema was removed.
Added
- Enforce mode for model routing.
OTITO_ROUTE_MODE=delegateputs a share of requests (OTITO_ROUTE_DELEGATE_SHARE, 0 to 1, default 0.5) in a delegate arm, where the Claude Code prompt hook tells the session to do the tool work in a subagent on the routed tier, the only model switch a session can make; the rest are the control. Arms are assigned by the prompt's hash, so the same prompt always lands in the same arm. Each logged decision records its arm,route-outcomes.mjs --arm delegate|control|advisorygrades one arm, andotito routeshows the arm and the subagent model in the terminal and asenforcein JSON. Without the variable, routing stays advisory and nothing changes.
Fixed
- On the
claude-codehost,otito routeand the route prompt hook name the premium modelclaude-opus-5-5instead ofclaude-opus-5. The Agent tool'sopusalias runs Opus 5.5, so the old name was never the model that ran.