The Claude Max weekly limit is three bars, not one
Most readers and most trackers watch one weekly meter. Max actually surfaces three: a combined 7-day, a Sonnet-specific 7-day, and an Opus-specific 7-day. They are independent. The Opus row is the one that bites first on heavy reasoning loops, often while the combined row is still in the green. This is the open-source tracker that stacks all three (plus the dollar row for metered billing) in one view.
Direct answer (verified 2026-05-18)
On a Max plan the weekly limit ships as three independent utilization fractions on /api/oauth/usage: seven_day, seven_day_sonnet, and seven_day_opus, each with its own resets_at. A fourth row (extra_usage) shows pay-as-you-go dollars. The free open-source tracker that prints all four with one shell command is ClaudeMeter; the row-printing code is at src/format.rs. Authoritative dashboard: claude.ai/settings/usage.
What the tracker prints
This is the literal output of claude-meter on a heavy-Opus Monday afternoon. Read the percent column, then the reset countdown. The row carrying the highest percent is the one closest to the wall.
The four-row layout is hardcoded into the CLI's pretty printer. Source: src/format.rs.
The four rows, one by one
Each row carries a different signal. Skipping one means walking into a wall you could have seen 24 hours earlier.
7-day all
The combined weekly bucket. Aggregates everything across every model. Slow-moving for most Max users on agentic loops; faster-moving for heavy chat writers. Resets 168 hours from the first message of the rolling window, not at calendar midnight.
7-day Sonnet
Sonnet-specific weekly bucket. Independent of the combined bucket and of 7-day Opus. Most Max users sit here at moderate utilization through the week. It is rarely the bucket that bites first because Sonnet has the higher allowance per Max plan.
7-day Opus
Opus-specific weekly bucket. The bucket that bites Max users with heavy Opus reasoning loops. Can reach the cap mid-week even when 7-day all is at 30 percent. If you do one heavy Opus refactor in a sitting, watch this row, not the combined one. The CLI labels it explicitly so it cannot hide.
Extra usage
Not a utilization fraction. Dollars spent on Anthropic's April 2026 pay-as-you-go metered billing, shown against the monthly_credit_limit you set. Lights up once a rolling window hits 100 and you have metered billing turned on. Reads from a separate endpoint (/api/organizations/{org}/overage_spend_limit) but renders on the same row stack.
Why the Opus row hits first
On a Max plan, the Opus weekly allowance is smaller than the Sonnet weekly allowance, even though both feed into the same combined 7-day bucket. So one heavy Opus refactor consumes a larger fraction of seven_day_opus than of seven_day. The math: if a session burns roughly the same dollar-equivalent of compute, the Opus-specific row climbs maybe two or three times faster than the combined row.
The trap is reading the combined row alone. Combined 7-day at 28 percent on a Tuesday looks healthy. Opus 7-day at 71 percent on the same Tuesday means you are out of Opus by Wednesday afternoon. Same plan, same week, two different answers depending on which row you looked at.
claude.ai/settings/usage shows you the combined row as the headline bar and tucks the per-model rows behind a details expander. The tracker pulls all three to the same row stack so the top percentage is the one carrying the cap.
The print loop, in 14 lines of Rust
The four-row layout isn't a config option. It's hardcoded into the pretty-printer. Every Max account hits this exact path on every CLI run.
How it knows you are on Max
Claude Code stashes its OAuth credentials in the macOS Keychain under service Claude Code-credentials. The JSON blob includes two fields the tracker reads directly: subscriptionType and rateLimitTier. If you are on the standard Max plan those come back as "max" and "default_claude_max_20x".
The upshot for someone arriving from a Twitter reply: install the app, the tracker finds your tier automatically, no pasting, no re-login.
Tracker vs the Settings page
Both read the same JSON. The tracker just doesn't hide the per-model rows.
| Feature | claude.ai/settings/usage | ClaudeMeter |
|---|---|---|
| Surfaces 7-day all | Yes (prominent bar) | Yes (one row) |
| Surfaces 7-day Sonnet and 7-day Opus side by side | Hidden behind a details expander | Always visible as two distinct rows |
| Surfaces Extra usage (April 2026 metered billing) | Yes, separate section | Yes, same row stack |
| Reset timestamps as relative durations | Banner copy only ("usage will reset at...") | (in 5d 22h) next to every row |
| Visibility without opening claude.ai/settings/usage | No | Menu bar at all times; CLI on demand |
| Plan tier auto-detected | N/A | Reads subscriptionType + rateLimitTier from Claude Code keychain |
| Manual cookie paste | N/A | None (browser extension forwards your live session) |
Install (four steps, Mac only for the menu bar)
brew install
brew install --cask m13v/tap/claude-meter. One Homebrew tap command on any Mac running macOS 12 or later. No login, no signup, no API key.
Install the browser extension
Open the GitHub releases page on Chrome, Arc, Brave, or Edge and load the bundled extension. The extension forwards your existing claude.ai session to the local app over 127.0.0.1, so the cookie-paste step that other trackers require is gone.
Visit claude.ai once
Open claude.ai/settings/usage in the same browser. The extension polls /api/organizations/{org}/usage once per minute and posts the snapshot to the menu bar. Within 60 seconds the popover lights up with the three weekly rows.
Watch the right row
Click the menu bar icon. Scan down the list. The row whose percent is highest is the one carrying the cap. If 7-day Opus is at 71 percent and 7-day all is at 28 percent, you have a Wednesday wall coming on Opus traffic only.
Want help wiring the tracker into your shell prompt?
Fifteen minutes to get claude-meter into tmux, Starship, or Fig and to set per-row alerts. No charge.
FAQ
How many weekly limit rows does Claude Max actually have?
Three weekly utilization rows ship on a Max account every time you poll /api/oauth/usage (or /api/organizations/{org}/usage via cookies). They are seven_day, seven_day_sonnet, and seven_day_opus, each carrying its own utilization fraction and resets_at timestamp. A fourth row, extra_usage, shows pay-as-you-go dollars spent against your monthly cap once you turn metered billing on. ClaudeMeter prints all four in one shell command (claude-meter) and stacks them in the macOS menu bar popover so you can see which one is closest to the cap at any moment.
Why does the Opus row hit the cap before the combined 7-day row?
Because Opus consumes its dedicated weekly bucket faster than the same workload consumes the combined bucket. If you run one heavy Opus refactor on Monday morning, seven_day_opus.utilization can climb to 70 percent while seven_day.utilization is at 28 percent. The combined-weekly bar tells you you are fine. The Opus-specific bar tells you Opus is going to throttle this Wednesday. They are different questions. claude.ai/settings/usage hides this behind a details expander; the menu bar shows all three rows at once.
What does the claude-meter CLI print on a Max account?
Four labeled rows plus a billing line. The format is set in claude-meter/src/format.rs lines 13 to 22: "5-hour", "7-day all", "7-day Sonnet", "7-day Opus". Each row carries the percent used and a reset countdown like "-> resets Mon May 11 09:02 (in 5d 22h)". If metered billing is on, an "Extra usage" row appears with dollars spent against the monthly cap. The exact column widths are formatted with "{:<16}" so the rows line up in a terminal.
How does ClaudeMeter know I am on Max and not Pro?
It reads the OAuth blob Claude Code writes into the macOS Keychain under service "Claude Code-credentials". The JSON includes subscriptionType (max or pro) and rateLimitTier (default_claude_max_20x for the standard Max plan). claude-meter/src/oauth.rs deserializes these fields directly. The tracker uses them to decide which rows to expect and to label the popover header. If you have Claude Code logged in to your Max account, ClaudeMeter sees both fields on the very first launch.
Does ccusage track the weekly Max limit?
No. ccusage reads ~/.claude/projects/<project>/<session>.jsonl on disk and sums tokens against the model price card. That is local truth: tokens your machine sent. The weekly limit is server truth: which bucket Anthropic charged the request to, what fraction of the cap that landed at. ccusage at 5 percent next to claude.ai at 71 percent is normal; they measure different ledgers. ClaudeMeter complements ccusage rather than replaces it: ccusage tells you what your Claude Code session weighed in tokens, ClaudeMeter tells you what fraction of the weekly cap Anthropic counted against it.
How often does the tracker repoll the weekly numbers?
Once per 60 seconds. The browser extension uses chrome.alarms.create('refresh', { periodInMinutes: 1 }) (extension/background.js line 105). The macOS menu bar app refreshes on the same cadence by default and lets you set it from 30 seconds to 5 minutes in the popover. One minute matches the cadence claude.ai/settings/usage recomputes against, so the two stay in lockstep without hammering the endpoint.
What happens when one of the three weekly rows hits 100 percent?
Anthropic short-circuits your next prompt with HTTP 429 and a JSON body explaining the limit that fired. The check runs on every prompt, so enforcement is real-time. The reset is independent per row: hitting seven_day_opus at 100 percent stops Opus traffic until that row's resets_at; you can still send Sonnet messages until seven_day_sonnet or the combined seven_day also crosses. The menu bar pulls the next snapshot within 60 seconds and the row whose percent flipped to 100 is the one carrying the gate.
Will I see all three rows if my account is a fresh Max account?
Yes, as soon as you send any messages on each model. The fields seven_day, seven_day_sonnet, and seven_day_opus are present in the JSON response from day one; the utilization stays at zero until activity lands on them. A brand new Max account with no Opus traffic yet will show 7-day Opus at 0 percent. The row appears in the tracker regardless, so you watch it climb rather than discover it after the cap.
Is this endpoint going to keep working?
The endpoints powering the rows are internal and undocumented. /api/oauth/usage is what api.anthropic.com exposes for Bearer-token clients; /api/organizations/{org}/usage is the cookie-authenticated mirror that powers claude.ai/settings/usage. Anthropic can rename fields or remove buckets in any release. ClaudeMeter deserializes into explicit Rust structs (UsageResponse in src/models.rs), so a schema change surfaces as a parse error rather than a silent zero. The field names listed above were stable through 2026-05-18 and the repo is open source MIT.
How do I install it from a Twitter reply on mobile?
You cannot install a macOS menu bar app from an iPhone. Bookmark this page, open it on the Mac you run Claude Code on, then run brew install --cask m13v/tap/claude-meter in a terminal and visit claude.ai once. The menu bar popover lights up within a minute. The browser extension is a separate install from the GitHub releases page (Chrome, Arc, Brave, Edge supported, Safari not yet).
More on Max plan limits and tracker internals
Related guides
Claude Max usage tracking is seven counters, not one
Beyond the three weekly rows, the same payload carries four more buckets (5-hour, oauth_apps, omelette, cowork). The full shape of /api/organizations/{org}/usage.
Claude Max weekly quota enforcement: three gates, two endpoints
How the server actually rejects a prompt. Gates 1 and 2 live on /usage; Gate 3 lives on /overage_spend_limit. The exact boolean that flips.
ClaudeMeter vs ccusage
ccusage reads local Claude Code JSONL token counts. ClaudeMeter reads server-side plan quota. Different data, complementary tools.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.