by phuryn
A local dashboard for tracking your Claude Code token usage, costs, and session history. Pro and Max subscribers get a progress bar. This gives you the full picture.
# Add to your Claude Code skills
git clone https://github.com/phuryn/claude-usagePro and Max subscribers get a progress bar. This gives you the full picture.
Claude Code writes detailed usage logs locally — token counts, models, sessions, projects — regardless of your plan. This dashboard reads those logs and turns them into charts and cost estimates. Works on API, Pro, and Max plans.

Created by: The Product Compass Newsletter
Works on API, Pro, and Max plans — Claude Code writes local usage logs regardless of subscription type. This tool reads those logs and gives you visibility that Anthropic's UI doesn't provide.
Captures usage from:
claude command in terminal)Not captured:
sqlite3, http.server, json, pathlib)Anyone running Claude Code already has Python installed.
No pip install, no virtual environment, no build step.
git clone https://github.com/phuryn/claude-usage
cd claude-usage
python cli.py dashboard
git clone https://github.com/phuryn/claude-usage
cd claude-usage
python3 cli.py dashboard
On macOS/Linux, use
python3instead ofpythonin all commands below.
# Scan JSONL files and populate the database (~/.claude/usage.db)
python cli.py scan
# Show today's usage summary by model (in terminal)
python cli.py today
# Show all-time statistics (in terminal)
python cli.py stats
# Scan + open browser dashboard at http://localhost:8080
python cli.py dashboard
The scanner is incremental — it tracks each file's path and modification time, so re-running scan is fast and only processes new or changed files.
Claude Code writes one JSONL file per session to ~/.claude/projects/. Each line is a JSON record; assistant-type records contain:
message.usage.input_tokens — raw prompt tokensmessage.usage.output_tokens — generated tokensmessage.usage.cache_creation_input_tokens — tokens written to prompt cachemessage.usage.cache_read_input_tokens — tokens served from prompt cachemessage.model — the model used (e.g. claude-sonnet-4-6)scanner.py parses those files and stores the data in a SQLite database at ~/.claude/usage.db.
dashboard.py serves a single-page dashboard on localhost:8080 with Chart.js charts (loaded from CDN). It auto-refreshes every 30 seconds and supports model filtering with bookmarkable URLs.
Costs are calculated using Anthropic API pricing as of April 2026 (claude.com/pricing#api).
Only models whose name contains opus, sonnet, or haiku are included in cost calculations. Local models, unknown models, and any other model names are excluded (shown as n/a).
| Model | Input | Output | Cache Write | Cache Read | |-------|-------|--------|------------|-----------| | claude-opus-4-6 | $6.15/MTok | $30.75/MTok | $7.69/MTok | $0.61/MTok | | claude-sonnet-4-6 | $3.69/MTok | $18.45/MTok | $4.61/MTok | $0.37/MTok | | claude-haiku-4-5 | $1.23/MTok | $6.15/MTok | $1.54/MTok | $0.12/MTok |
Note: These are API prices. If you use Claude Code via a Max or Pro subscription, your actual cost structure is different (subscription-based, not per-token).
| File | Purpose |
|------|---------|
| scanner.py | Parses JSONL transcripts, writes to ~/.claude/usage.db |
| dashboard.py | HTTP server + single-page HTML/JS dashboard |
| cli.py | scan, today, stats, dashboard commands |
No comments yet. Be the first to share your thoughts!