'Heavy use' on Claude Pro is utilization ≥ 80% on any of seven weekly buckets

Anthropic publishes a range (40 to 80 hours of Sonnet a week on Pro) but never names the threshold for 'heavy use'. The open-source tracker does, in one line of code, and the weekly quota turns out to be six or seven separate buckets, any one of which can throttle you while the others read fine.

M
Matthew Diakonov
6 min read

Direct answer (verified 2026-05-10)

Claude Pro is roughly 40 to 80 hours of Sonnet 4 per rolling 7-day window plus a 5-hour rolling sub-window, per Anthropic's usage-limits article. The server tracks this as up to seven separate weekly buckets and one 5-hour bucket. 'Heavy use' is not a published tier; the operational threshold is utilization ≥ 80% on any of those buckets (the open-source tracker turns the bar amber at 80%, red at 100%; source: extension/popup.js line 31). At ≥ 100% on any bucket your next prompt returns a generic rate_limit_error.

The 80% threshold is one line of code

Anthropic's docs never name a 'heavy use' tier. But there has to be one operationally, because the bar in claude.ai/settings/usage changes color, and so does the icon in ClaudeMeter's toolbar. The threshold is hardcoded:

claude-meter/extension/popup.js

v is the utilization percent for one bucket. At 80% the row paints amber and the toolbar badge flips from green to amber (background.js:87). At 100% the row turns red and your next prompt fails with the generic rate-limit error. There is no separate 'medium-heavy' or 'extreme' band; the limiter has one notch before zero.

'The weekly quota' is actually seven buckets

Every blog post that explains the weekly quota names it as one number. The wire shape is different. The /usage JSON ships up to seven independent fields, and the limiter runs each one against its own 80% / 100% gate:

claude-meter/src/models.rs
seven_day

The overall weekly bucket. The one most people mean by 'the weekly quota'. Fed by every prompt across every model.

seven_day_sonnet

Per-model weekly cap for Sonnet. Conditional in the JSON; renders only when present.

seven_day_opus

Per-model weekly cap for Opus. The one Claude Code heavy users tend to hit first on a Max plan.

seven_day_oauth_apps

Weekly cap for OAuth app traffic. Claude Code goes through this lane. You can be fine on seven_day and pinned here.

seven_day_omelette

Undocumented bucket. Ships utilization on a 0 to 100 scale, not 0 to 1, so any tracker that skips normalization renders it as 0.78%. ClaudeMeter handles it with `u <= 1 ? u * 100 : u`.

seven_day_cowork

Undocumented bucket. Same 0 to 100 scale quirk. Likely a future product feature; the field is already in the schema.

five_hour

Not weekly, but interacts with all of the above. A long Opus run can throttle you here without moving the weekly bar at all.

Most users only see two rows in the ClaudeMeter popup, because claude.ai only ships seven_day and five_hour for a vanilla Pro account. The conditional rows (7d Sonnet, 7d Opus) render when the JSON returns them. The undocumented buckets (omelette, cowork) are already in the schema; whether the server enforces them depends on plan tier and product surface. The point is the data model: the limiter does not have a single 'weekly quota' value.

How to see your own number in under two minutes

You can read the same JSON in DevTools (Network tab, filter for 'usage', click the /api/organizations/{org}/usage request). Faster, if you are going to keep hitting this question, is to put a live reading in your menu bar:

1

Install the menu bar app

brew install --cask m13v/tap/claude-meter. The cask drops ClaudeMeter.app into /Applications and registers a launch agent so the icon comes back after reboot. macOS 12 or newer.

2

Load the browser extension

Clone github.com/m13v/claude-meter. Open chrome://extensions (or arc://extensions, brave://extensions, edge://extensions), enable Developer mode, click 'Load unpacked', point at the extension/ folder. Pin the icon.

3

Visit claude.ai once

If you are not already logged in, sign in to claude.ai in that browser. The extension uses fetch with credentials: 'include' against /api/organizations/{org}/usage, so your existing session cookie travels with the request. No paste, no API key, no second login.

4

Watch the 7-day row

Click the toolbar icon. The popup renders a 5-hour row and a 7-day row (plus 7d Sonnet / 7d Opus when the JSON ships those fields). The bar turns amber at 80%. That's the moment to start pacing.

Where ccusage stops being the right tool

ccusage is good. It reads Claude Code's local JSONL files and tells you exactly how many tokens you spent in a session. But it cannot tell you whether you are 'heavy' against the weekly quota, because the weekly quota lives on the server with model weights and peak-hour multipliers folded in, and ccusage has no access to that. If your question is the rate-limit question, you need the server-truth row, not the local count.

Featureccusage (local logs)ClaudeMeter (server-truth)
Data source~/.claude/projects/<id>/<session>.jsonl files on diskGET /api/organizations/{uuid}/usage on claude.ai (server-truth)
What it measuresLocal Claude Code token counts onlyAll seven weekly buckets the server enforces, including oauth_apps
Picks up claude.ai web chat usageNo (only sees Claude Code traffic)Yes (it's part of the server-side bucket)
Picks up Opus / Sonnet weightingNo (local logs don't carry the multiplier)Yes (server already applied it before returning utilization)
Heavy-use thresholdUser-configurable warn level on token count, not on quota80% amber, 100% red, baked in at popup.js line 31
Cost / licenseFree, MIT-licensed (different lane, complementary)Free, MIT-licensed Rust + JavaScript

They are complementary, not competitive. Run ccusage for the per-session post-mortem; run ClaudeMeter for the live 'how close am I to the wall' read.

Hitting the weekly wall every Tuesday and want a second pair of eyes?

15 minutes. Share your bucket pattern, we'll walk through which one is actually throttling you and how to pace the next 168 hours.

Frequently asked questions

What is the Claude Pro weekly quota in plain numbers?

Anthropic's support article on usage limits gives a range, not a counter: roughly 40 to 80 hours of Sonnet 4 per rolling 7-day window on the $20/month Pro plan, with a smaller 5-hour rolling sub-window inside it. The reason it's a range is that the limiter scores prompts by model weight, peak-hour multiplier, and message complexity, then writes the result into a utilization fraction. You hit the wall when that fraction crosses 1.0 on any bucket, not when you cross a fixed hour count.

What counts as 'heavy use'?

Operationally, utilization at or above 80% on any weekly bucket. That is the threshold ClaudeMeter's popup paints amber, and it's the threshold the toolbar badge switches color on. Source: extension/popup.js line 31 `v >= 100 ? "hot" : v >= 80 ? "warn" : ""` and extension/background.js line 87 (the same numbers driving the badge background color). Anthropic doesn't publish a 'heavy' tier, but 80% is the inflection where you have to start budgeting the rest of the rolling 168 hours.

Isn't 'the weekly quota' a single number?

No. The /api/organizations/{org}/usage JSON has up to seven separate 7-day buckets: seven_day (overall), seven_day_sonnet, seven_day_opus, seven_day_oauth_apps, seven_day_omelette, seven_day_cowork, and the rolling 5-hour bucket that interacts with all of them. Source: src/models.rs lines 20-26 in the ClaudeMeter repo. Each has its own utilization and resets_at. The badge picks the worst-case across all of them because any one at 100% throttles your next prompt with the same generic 'rate_limit_error' string.

Why does Claude Code keep failing when claude.ai shows me under quota?

Two reasons. First, Claude Code traffic lands in seven_day_oauth_apps in addition to seven_day. If oauth_apps is at 100% you get throttled even though the overall row reads 70%. Second, the 5-hour rolling sub-window resets independently; you can be fine on the weekly view and still hit the wall mid-refactor because five_hour spiked from a long Opus run. ClaudeMeter renders both rows so you can see which bucket actually fired.

How do I read the exact percent without a tracker?

Open claude.ai, sign in, open DevTools (Cmd+Option+I), Network tab, visit claude.ai/settings/usage. Filter for 'usage'. Open the request to /api/organizations/<uuid>/usage and look at the JSON response. Each bucket has a utilization field (0 to 1, sometimes 0 to 100; popup.js normalizes with `u <= 1 ? u * 100 : u`) and a resets_at ISO timestamp. The Settings page shows you the same numbers in human form, but rounds them; the JSON has the float.

Does ccusage answer this question?

No. ccusage reads ~/.claude/projects/<project>/<session>.jsonl on disk and sums tokens per Claude Code turn. That is a faithful local-log signal for Claude Code only, and it has no access to the per-model weights, peak-hour multiplier, or browser-chat usage the server folds into the weekly utilization fractions. ccusage at 5% next to claude.ai at 71% is normal: two ledgers, two ledger sources, neither replaces the other. ClaudeMeter is a separate tool for the server-side number; the two coexist.

Will dropping to Sonnet only stop the weekly wall from firing?

It slows it. seven_day_opus and seven_day_sonnet are weighted differently inside the overall seven_day bucket, and Opus consumes the cap faster per minute of generation. But seven_day is a single fraction across both models, and seven_day_sonnet still has its own cap that can fire on its own. Switching to Sonnet for grunt work extends the window; it doesn't make the wall impossible. The honest planning move is to watch the seven_day bar tick and pace against the resets_at countdown.

Is ClaudeMeter the only way to see this live?

It's the only free, open-source way that reads the same server-truth fields claude.ai/settings/usage renders. ccusage and Claude-Code-Usage-Monitor read local JSONL logs from Claude Code, which is a different data source (local token counts, not server-enforced quota). The claude.ai Settings page is the canonical source but you have to refresh it manually. ClaudeMeter polls the same endpoint once a minute and surfaces it in the menu bar.