Reverse-engineer Anthropic's opaque Claude subscription limits into hard numbers
Project description
ccmeter
Measure what Anthropic won't tell you: what your Claude subscription limits actually mean in tokens.
Why
Anthropic charges $20-$200/month for Claude but won't say what the limits actually are. The API reports utilization as a percentage — but a percentage of what? Nobody knows.
Twice in four months, Anthropic announced temporary usage boosts, then silently tightened baseline limits after. When users complained, the response was "contrast effect." See docs/evidence.md for the receipts.
Without hard numbers, users can't tell the difference between "I'm using more" and "they gave me less." ccmeter fixes that. If limits shrink, you'll see it — tokens-per-percent goes down, cost-per-percent goes down, and there's no way to hand-wave calibrated data.
One person's data is a sample. Hundreds of people's data is leverage.
How it works
- Poll: records utilization percentages from Anthropic's OAuth usage API every 2 minutes per bucket (
five_hour,seven_day, etc.) - Scan: reads per-message token counts from Claude Code's local JSONL session logs
- Calibrate: when utilization ticks from 15% to 16% and you used N tokens in that window — 1% = N tokens, 1% = $X at API rates
Track those numbers over time. If tokens-per-percent drops, the cap shrank. Cost-per-percent gives you the dollar value of what each plan actually buys — comparable across users regardless of cache hit ratio.
Install
pip install ccmeter
Or clone and run directly:
git clone https://github.com/iteebz/ccmeter && cd ccmeter && uv sync
Requires Python 3.12+, Claude Code installed and signed in. macOS and Linux. Zero dependencies beyond fncli.
Usage
# Install as background daemon (survives restarts)
ccmeter install
# Or run in foreground
ccmeter poll
# What does 1% actually cost?
ccmeter report
# Structured output for sharing
ccmeter report --json
# Raw usage tick history
ccmeter history
# Collection health
ccmeter status
# Remove daemon
ccmeter uninstall
What it collects
From Anthropic's API (polled every 2 min, recorded on change):
- Utilization percentage per bucket
- Reset timestamps
- Your subscription tier (detected automatically from credentials)
From Claude Code's local JSONL files (scanned on report):
- Per-message token counts: input, output, cache_read, cache_create
- Timestamps, model, Claude Code version, session ID
Everything stays local in ~/.ccmeter/meter.db. Your OAuth token is only sent to Anthropic's own API — the same call Claude Code already makes.
Known confounds
- Multi-surface usage: claude.ai, Claude Code, and Cowork share limits but only Claude Code has local token logs. If you use multiple surfaces simultaneously, token counts will be inflated relative to the utilization tick.
- 1% granularity: The API reports whole percentages only. More samples over longer periods = better accuracy.
- Bucket overlap: Some buckets may share underlying quotas in ways the API doesn't surface.
Help
The more users collecting data across different tiers (Pro, Max 5x, Max 20x) and models (Sonnet, Opus), the faster we can detect when limits change and map what every plan actually gets you.
Easiest way to help: install it, let the daemon run, share your ccmeter report output.
If you want to contribute code: see CONTRIBUTING.md.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ccmeter-0.1.1.tar.gz.
File metadata
- Download URL: ccmeter-0.1.1.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca764e78a33979525bd02d6ddee2e17fb7c27363c9efd8f70b251ac254d247d7
|
|
| MD5 |
8d5c82308f96a4a79f30ea5c2d0582b4
|
|
| BLAKE2b-256 |
08ccb0afc10911e02cff44a19ec4c63381a1978c172d271e43c07077eb2c8ec6
|
File details
Details for the file ccmeter-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ccmeter-0.1.1-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae9517db609a440363f47a1ff403074e0a314eeb5d7551e28180668f354583e9
|
|
| MD5 |
621bfea18705b65bae73d24478f847cd
|
|
| BLAKE2b-256 |
ec8ed999d61a4bcef939e8d7adeb920de6241de8313891d8ce22c1ee6d0546a1
|