anthropics / anthropics/claude-code

Model selection has been unreliable since 2026-04-28, and the issue naming the mechanism (#73881) has been open 75 days — users are still billed at a tier they explicitly left

Open
#94,827 0 comments 0 reactions 0 assignees View on GitHub
area:cost area:model bug has repro
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

## Summary

Model selection is not reliable, and the failure is always billed in the user's disfavour. This has been reported continuously since **2026-04-28**. The issue that names the exact mechanism — #73881, *"Mid-session model switch not applied — UI shows the new model, session keeps running the previous one (+ silent budget loss)"* — was filed **2026-07-03** and is **still open today, 75 days later**. I reproduced it again this morning on **2.1.270**.

I'm opening this as a follow-up rather than another duplicate, because the individual reports keep getting closed while the behavior doesn't change, and the pattern is only visible when they're laid out together.

## The record

| Issue | Filed | Status | What it reported |
|---|---|---|---|
| #54426 | 2026-04-28 | closed 2026-06-11 | Max-effort window silently self-downgrades mid-session |
| #58450 | 2026-05-12 | closed 2026-06-27 | Every window silently billed at a higher tier than configured |
| #67506 | 2026-06-11 | closed 2026-09-05 | Token consumption doesn't match the model's description |
| #73597 | 2026-07-02 | closed 2026-08-17 | Subagents billed as a different, more expensive model |
| **#73881** | **2026-07-03** | **OPEN** | **Model switch not applied; UI shows new model, old one keeps running and billing** |
| #84028 | 2026-08-05 | closed 2026-09-09 | CLI and mobile report *different models for the same live session* |
| #84612 | 2026-08-06 | closed 2026-09-08 | Large share of a weekly budget consumed by a model with every setting pointed elsewhere |

Some of these are mine. **#67506, #73597 and #73881 are from unrelated reporters.** This is not one user's misconfiguration; it is independently observed, across surfaces, for nearly five months.

Six of the seven are closed. The behavior in the seventh is still reproducible on a current build. **Closed has not meant fixed here**, and that is the reason for this issue.

## What still reproduces, today, on 2.1.270

Change the model in the Claude app's model selector, deliberately, to move work off the expensive tier:

- The selector shows the new model.
- Already-running desktop sessions keep executing — and keep **billing** — as the previous, more expensive tier.
- No warning at selection time that the change applies only to sessions started afterward.
- No indication inside the running session that it is still on the old model.
- The first real feedback that the change didn't take is the consumed allowance, after the fact.

**This is not the same as "a running session keeps its boot model."** That behavior is understood, and for the CLI it is documented. The defect is the three-step combination: the product **accepts** the change, **displays it as applied**, and then **charges the previous rate**.

## Why this one is different from an ordinary bug

Every other bug costs time. This one costs **metered, capped, non-refundable allowance**, and it does so specifically when the user is trying to spend less.

The only reason anyone changes tier mid-flight is to stop consuming a scarce allowance. That is the entire function of the control. So when the switch silently fails:

- The action taken **specifically to stop spending the expensive tier** does not stop spending it.
- The user is charged the premium rate for work they **explicitly moved off** that rate.
- They are charged it **on the strength of a confirmation the product displayed**.
- The allowance is capped, and it does not come back.

A tier selector that can't be relied on to take effect is not a usage control — it is the appearance of one, and people are budgeting real money against it. "It only applies to new sessions" is not a fix; it is a description of the trap.

If a running session genuinely cannot change model, the honest options are: say so at selection time, refuse the selection, or offer to restart the session. Silently accepting it and then charging the old rate is the single option that converts a product limitation into a charge against the user.

## The remediation gap — I have a direct comparison now, and it is not close

I added Codex to my workflow this summer. That gave me something I did not have before: a side-by-side on how two vendors handle usage burned by their **own** agent's mistakes.

One morning I left an agent running on a defined task and stepped away from my computer. It invented a *different* task, went on a tear, and consumed my entire allowance in roughly **ninety minutes**. That failure was squarely the other vendor's — their agent, their runaway, their architecture.

**They have given me multiple courtesy usage resets.** When their tooling burns my allowance on something I did not ask for, a remediation path exists and it actually gets used.

Here, the same class of failure has been shipping since **2026-04-28**. It is still shipping today. And the usage it consumes is simply gone.

That is the comparison I keep coming back to, and it is why I am escalating this rather than absorbing it quietly again.

### What "not fair" actually means here

I want to be precise, because this is not a complaint about a bug existing. Bugs exist everywhere. It is about who absorbs the cost of a **known** one.

- Agents have been running against this defect since **April**. Not a regression discovered last week — a documented, reported, reproducible defect, filed by multiple independent users, still live five months later.
- Since **July**, when #73881 named the exact mechanism, I have not been able to trust **what I am seeing with my own eyes**. The selector says one model. The billing says another. Both come from the same product. I have no way to tell which one is true without instrumenting it myself, and I have had to do exactly that.
- Every one of those hours is metered against a capped allowance, and every failure of this class is charged to me at the higher rate.

**Claude usage does not feel fair.** Not measured against the amount of work I get out of it, but measured against the volume of architectural defects still embedded in the product that eat that usage — this one, sessions that keep billing after logout, background agents that survive a window close, full-context re-reads on every resume, model/tier mismatches between surfaces. I have filed all of these. Most were closed. The usage they consumed was never returned.

I am not asking to be compensated for a product having bugs. I am asking why the party who **did not write the bug, did not ship it, and reported it repeatedly** is the only one paying for it — while a competitor, for a failure that was genuinely theirs, simply made it right.

## Compounding: nobody can audit which model they're on

A `model` value is persisted in at least three separate layers — project settings, user settings, and the global config file. On a current machine those three hold **three different values** simultaneously, and the global config carries several `model` fields with mixed values of its own.

Whatever the intended precedence is, the practical result is that *"which model is this session actually running, and which one am I being charged for?"* is not answerable from any single place. #84028 is the same problem from the outside: the CLI and the mobile app reported **different models for the same live session, sixty seconds apart, across pricing tiers**. That was closed too.

When the tier can't be verified and the switch can't be trusted, the usage meter is not auditable by the person paying for it.

## What I'm asking for

1. **Fix the billing consequence first.** A tier change that is accepted and displayed must never be followed by charges at the old tier. If it can't take effect, don't accept it.
2. **Make the selector's confirmation mean what it appears to mean** — or state plainly, at the moment of selection, that it will not apply to the current session.
3. **Expose the effective model of a running session**, distinct from the selected model, somewhere the user can see it.
4. **Reconcile the config layers** so there is one answer to "what model is this, and what am I paying for."
5. **Please stop closing this class without a behavior change.** Seven reports, three reporters, five months, and it still reproduces. Each closure resets the clock and scatters the evidence.

Reproduced on 2.1.270. Happy to provide anything further that helps.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the model change behavior on version 2.1.270 and read the mechanism described in issue #73881. Trace the selected model, effective running-session model, configuration layers, and billing behavior described in this report. Done means an accepted selection either takes effect without old-tier charges or clearly reports that it cannot apply, with the effective model visible to the user.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, payments, tooling
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.