Active model can change mid-session after a resume without a visible signal
Type: bug
Environment
- Claude Code version: 2.1.220
- OS: macOS 26.5.2 (Darwin 25.5.0)
- Platform: Claude subscription
What happened
Two sessions reported continuing on a different model than the one explicitly configured, after resuming from a rate-limit pause. In one case a run that was explicitly set to a large model reported afterwards that it had been running on a smaller/faster one; the switch was noticed only because a locally installed model-routing hook flagged it.
Transcript-level check: mid-session changes in the recorded model are common (97 of the 400 largest transcripts here show more than one model value), but most of those are user-initiated switches, so we cannot cleanly separate deliberate switches from drift. We are reporting the two self-reported cases honestly as weak evidence, and the actionable part is the observability gap rather than the switch itself.
Related: the per-turn reasoning-effort setting is not recorded in transcripts at all, only the model — so after the fact there is no way to tell what effort a given turn ran at.
Expected
- Any change of the active model mid-session is announced in the conversation, the same way a user-initiated
/modelswitch is. - The model (and, ideally, the effort setting) in effect for a turn is recorded in the transcript for that turn, so drift is auditable after the fact.
- A resume restores the model that was explicitly configured for the session, or says clearly that it could not.
Repro
Not reliably reproducible. Observed after a rate-limit pause and resume in a long unattended run.
Impact
Cost and quality drift in unattended runs, discovered late or not at all. A run that silently downgrades produces work that looks like it met the configured bar but did not.