[BUG] /usage omits the "Usage credits" row on Team plans — the data is fetched, then discarded by a pro/max tier check

Status Fixed / completed
Reported on v2.1.233
Maintainer reply ✓ Yes — bcherny
Activity 3 comments · opened Aug 17, 2026 · closed Aug 21, 2026
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code

What's Wrong?

On a Team plan, the /usage panel never shows a Usage credits row, even when the account has a usage-credit balance and a monthly cap.

The Claude desktop app shows that row for the same account at the same time — labelled "Usage credits", reading $X of $Y with a progress bar, directly under the 5-hour and weekly rows — and the claude.ai usage settings page shows the balance too. So both the entitlement and the data exist server-side; only the CLI hides them.

The CLI isn't failing to fetch the data either. GET /api/oauth/usage returns an extra_usage object, the /usage panel passes it into the component that renders the row, and that component then discards it because the account's subscriptionType is team rather than pro or max.

Net effect: on Team plans there is no way to see the credit balance from the CLI at all — not in /usage, and not via a custom statusline (see Related below).

What Should Happen?

/usage should show the Usage credits row on any plan that has usage credits, matching the desktop app and claude.ai.

Since the server already decides whether to include extra_usage in the response, the row is better gated on whether that object is present than on the plan tier.

Steps to Reproduce

  1. Log in with a Claude account on a Team plan (/login — subscription auth, not an API key)
  2. Make sure the account has usage credits enabled with a monthly cap
  3. In the Claude desktop app, open the usage panel — note the "Usage credits" row showing balance and cap
  4. In the CLI, run /usage
  5. The panel shows the 5-hour row, the weekly rows, and per-model weekly rows — but no Usage credits row

Root Cause

In 2.1.233 the component that renders the credits row returns early unless the tier is pro or max:

function dDl(XGO){
  let dJr=hdr.c(22),{extraUsage:Pke,maxWidth:vQm}=XGO,m1T=Sc();
  if(!(m1T==="pro"||m1T==="max")){return!1}          // <-- team exits here
  if(!Pke.is_enabled){ /* "Usage credits are off" subtitle */ }
  if(Pke.monthly_limit===null){ /* "Unlimited" subtitle */ }
  ...
  const TQm=`${ZGO} / ${QGO} spent`;                 // <-- the row that never renders
  return il.jsx(nDl,{title:sDl,limit:aDl,showTimeInReset:!1,
                     alwaysShowDateInReset:!0,extraSubtext:TQm,maxWidth:vQm})
}

Sc() reads subscriptionType off the credential object, and "team" is a recognised value for it elsewhere in the same file — so this looks like an allowlist that was simply never extended rather than a deliberate exclusion:

function Sc(){ /* ... */ return e.subscriptionType??null }
function hGe(){ return Sc()==="max"  }
function CM_(){ return Sc()==="team" }
function sAr(){ return Sc()==="enterprise" }

extra_usage is fetched and schema-validated on the way in, alongside five_hour / seven_day / cinder_cove / limits[]:

extra_usage: $e.object({
  is_enabled: $e.boolean(),
  monthly_limit: $e.number().nullable(),
  used_credits: $e.number().nullable(),
  utilization: $e.number().nullable(),
  currency: $e.string().nullish(),
  disabled_reason: $e.string().nullish()
}).passthrough().nullish()

…and it reaches dDl as a prop. Only the tier check stops it rendering. enterprise presumably has the same problem.

Suggested Fix

Gate the row on extra_usage being present in the response rather than on plan tier — or, minimally, add team and enterprise to the allowlist.

Related

  • #80725 — the statusLine JSON payload has the same gap: only five_hour and seven_day are copied into rate_limits, and extra_usage isn't exposed at all, so a custom statusline can't show the balance either. Together these mean Team users have no CLI surface for it.
  • #74784/usage-credits reporting "unlimited" despite an org monthly cap. Consistent with the monthly_limit === null branch in the same function above.

Is this a regression?

No, this never worked

Claude Code Version

2.1.233

View original on GitHub ↗

3 Comments

mrmike · 9 days ago

This is fixed in version v2.1.236

bcherny collaborator · 5 days ago

Thanks for the unusually thorough report — confirmed.

We verified against the released 2.1.233 build that the /usage panel's Usage credits row is gated on the account's plan type being Pro or Max, and that this check runs before the usage-credit data from the server is ever examined. On Team (and Enterprise) plans the row is skipped entirely even when the server response includes the credit balance and cap — matching what you observed, and consistent with the desktop app showing the row for the same account.

Your suggestion — showing the row whenever the server reports usage-credit data, rather than keying off the plan tier — is the sensible direction, since the server already decides whether the account is entitled to it. Marking as reproduced for the team to pick up.

🤖 Generated with Claude Code

mrmike · 4 days ago

Thanks @bcherny for the reply. I can confirm that version 2.1.236 already fixed the issue

/usage now shows the usage-credits spend row for Team and Enterprise members, and shows a capped row at 0% before anything is spent