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 doesn't publish what the usage limits actually are. The API reports utilization as a percentage — but a percentage of what? Nobody knows.
Three times in four months, Anthropic has run the same play: announce a temporary usage boost, silently tighten baseline limits during or after, then attribute complaints to "contrast effect." See docs/evidence.md for the receipts.
ccmeter is a local instrument that figures out the actual numbers.
How it works
- Polls Anthropic's OAuth usage API every 2 minutes — records utilization percentages per bucket (
five_hour,seven_day,seven_day_sonnet, etc.) - Scans Claude Code's local JSONL files for per-message token counts with timestamps
- When utilization ticks from 15% to 16% and you used N tokens in that window: 1% = N tokens
That's the whole trick. Track that number over time. If it shrinks, the cap shrank.
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.
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.0.1.tar.gz.
File metadata
- Download URL: ccmeter-0.0.1.tar.gz
- Upload date:
- Size: 17.4 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 |
afaf69940b8e70d0e960e6c7a6bbfb58b601616e98a70f1effa940bce6785dc1
|
|
| MD5 |
a1659f626c2ba190526a44e36ec45b6a
|
|
| BLAKE2b-256 |
7a2b0baf166c75f5bfea3f965fbc59d8a92b14a549b39c005e5427f868b40e62
|
File details
Details for the file ccmeter-0.0.1-py3-none-any.whl.
File metadata
- Download URL: ccmeter-0.0.1-py3-none-any.whl
- Upload date:
- Size: 13.3 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 |
d1196c483c40e5f90265004243343d01e62db0cd8390733e93f7624c21792524
|
|
| MD5 |
2577e330515cca2df7133bc2173a9502
|
|
| BLAKE2b-256 |
20eb6bab39b98f7e7775690c658b5997a3e75e9c9c768ccc810358552d802cca
|