Skip to content

Label a Claude Team seat by its subscription, not its rate-limit tier - #11109

Open
omdenton wants to merge 1 commit into
omacom:quattrofrom
omdenton:agents-team-plan-label
Open

Label a Claude Team seat by its subscription, not its rate-limit tier#11109
omdenton wants to merge 1 commit into
omacom:quattrofrom
omdenton:agents-team-plan-label

Conversation

@omdenton

@omdenton omdenton commented Sep 10, 2026

Copy link
Copy Markdown

Sign in to Claude Code on a Team premium seat and the agents panel's hero line says Max 5x. The seat isn't on Max; it's a Team seat whose Claude Code allowance happens to run on the Max 5x rate-limit tier.

Why

plan_label in bin/omarchy-agent-usage-claude reads two fields off the saved login, rateLimitTier and subscriptionType, and lets the tier win whenever it matches max_<N>x. That's right for a Max account, where the two agree. On a Team premium seat the login looks like this:

{ "subscriptionType": "team", "rateLimitTier": "default_claude_max_5x" }

The tier names the ceiling, not the plan, so the panel labels the seat as the plan it is not on. Enterprise seats take the same path.

The fix

Lead with the subscription and keep the multiplier as its qualifier. The label stays exactly as it was for every case that worked before, and only the mislabelled one moves:

subscriptionType rateLimitTier before after
max default_claude_max_5x Max 5x Max 5x
max default_claude_max_20x Max 20x Max 20x
(absent) default_claude_max_5x Max 5x Max 5x
pro default_claude_pro Pro Pro
team default_claude_max_5x Max 5x Team 5x
team (no multiplier) Team Team

Keeping the 5x on a Team seat is a judgment call. It's the one thing the tier does tell you, it's what makes a premium seat different from a standard one, and it mirrors the "Max 20x" / "Max 5x" shape the panel already uses. Happy to drop it to a plain "Team" if you'd rather.

Testing

test/shell.d/agent-usage-claude-limits-test.sh gains two cases that plant a .credentials.json and read the label back through oauth_login, so the whole path is covered rather than the formatter alone. The Team case fails on the current collector and passes with the fix; the Max, Pro and multiplier-less cases pin the labels that must not move. The Claude scanner, usage-update, agents-panel and bin-style suites all pass.

Verified on the real thing: running the patched collector against a signed-in Team premium seat prints "tierLabel": "Team 5x" in the usage record where the shipped one prints "Max 5x". The panel draws tierLabel as-is, so no shell change is needed.

🤖 Generated with Claude Code

The collector built the plan label from the OAuth rateLimitTier first, so a
Team premium seat, which runs on default_claude_max_5x, showed in the agents
panel as "Max 5x". Lead with subscriptionType and keep the multiplier as its
qualifier: Max still reads "Max 5x", a Team seat reads "Team 5x".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant