Release Notes
Added
- Rate limit tracking view — real-time usage monitoring for Claude OAuth accounts, with separate input/output token tracking, hit and rate history, and animated blinking status indicators.
t keyboard shortcut to toggle the rate limit tracking view (backtick ` still works as an alias). Easier to reach on non-US keyboard layouts.
- Async discovery refresh with non-blocking state management for smoother UI updates.
- Versioned cache schema with automatic invalidation.
~/.config/ccmeter/history.json carries a schema_version; mismatches trigger a clean rebuild on next launch so accuracy fixes propagate without manual intervention.
- One-time cache-state banner at the top of the dashboard:
- "Cache rebuilt" (warning color) when a schema migration occurs.
- "Cache was unreadable" (error color) when the on-disk file couldn't be read or parsed, with a hint to delete it if the issue persists.
- Both dismiss on any keypress.
CCMETER_FORCE_BANNER env var for testing the banners after migration has already happened. Set to recovered for the corruption banner, anything else for the migration banner.
Fixed
- Token & cost accuracy — Claude Code logs the same API response in multiple places (streaming chunks, sub-agent mirrors,
/compact retries). CCMeter now dedupes by requestId (Anthropic's billing unit), eliminating the 2–3× over-counting previously observed on days with heavy sub-agent activity. Totals now match what Anthropic actually billed.
- Multi-minute timeline accuracy — long streaming responses (extended thinking + large outputs) now correctly distribute their tokens across the minutes they actually spanned, instead of collapsing onto the final completion minute.
active_minutes clustering, the minute-level heatmap, and rate-limit forecasts are all more accurate.
- Code metrics on partial-overlap streams — when a non-canonical stream carries a unique
Edit/Write block, its lines_suggested / lines_added / lines_deleted are preserved via zero-billing ghost markers, avoiding silent under-counting of code activity. Ghosts are deduped across multiple mirror files by timestamp so a 3-file (canonical + 2 mirrors) layout doesn't double-count line metrics.
- Ghost events no longer leak into model breakdowns — zero-billing markers now carry an empty
model field, so they fall through to ModelId::Other and are filtered out of model-share aggregations instead of producing phantom slices.
- User-side patch dedup — patches replayed into sub-agent transcripts (Edit/Write acceptances) are now deduped by line
uuid, fixing inflated lines_added and skewed efficiency scores on sub-agent–heavy days.
- Cost fallback includes
cache_creation — token-based cost estimation (used when raw costUSD is absent, i.e. Pro plans) now bills cache_creation at input_price × 1.25 instead of ignoring it. Closes a 5–15 % under-estimate on cache-heavy sessions.
- Usage preservation — usage data is now kept only for non-expired credentials, and asymmetric merges preserve enriched hit data across refreshes.
- Label clipping — prevent label clipping and overlapping in rate tracking charts.
Changed
- Modularize rate tracking UI into 13 focused component modules for better maintainability.
- Restructure data models and handlers for usage tracking, with new OAuth and rate limits modules.
- Improve discovery configuration and error handling.
- Landing page replaced by rate tracking view as the primary experience on launch.
- Dashboard styling updated to align with new rate tracking components.
Install ccmeter 2.0.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/hmenzagh/CCMeter/releases/download/v2.0.0/ccmeter-installer.sh | sh
Install prebuilt binaries via Homebrew
brew install hmenzagh/tap/ccmeter
Download ccmeter 2.0.0