Local dashboard for Claude Code token usage, sessions, and cost estimates. Dark UI.
Project description
claudepulse
A live pulse on your Claude Code usage. Tokens, sessions, cost — in a dark dashboard that actually reads well.
Claude Code writes detailed usage logs locally — token counts, models, sessions, projects — regardless of your plan. claudepulse reads those logs and turns them into charts and cost estimates. Works on API, Pro, and Max plans.
What this tracks
Works on API, Pro, and Max plans — Claude Code writes local usage logs regardless of subscription type. claudepulse reads them and gives you visibility the official UI does not.
Captures usage from:
- Claude Code CLI (
claudecommand in terminal) - VS Code extension (Claude Code sidebar)
- Dispatched Code sessions (sessions routed through Claude Code)
Not captured:
- Cowork sessions — these run server-side and do not write local JSONL transcripts
Requirements
- Python 3.8+
- No third-party packages — uses only the standard library (
sqlite3,http.server,json,pathlib)
Anyone running Claude Code already has Python installed.
Install
Pick one. All three give you a working claudepulse command.
1. One-liner installer (macOS / Linux) — recommended
curl -fsSL https://raw.githubusercontent.com/ColdDesertLab/claudepulse/main/install.sh | bash
claudepulse
Clones to ~/.claudepulse, drops a launcher in ~/.local/bin/claudepulse, and auto-pulls origin/main on every run. Disable auto-update with CLAUDEPULSE_NO_UPDATE=1. Override paths with CLAUDEPULSE_HOME and CLAUDEPULSE_BIN.
2. pipx (cross-platform)
pipx install claudepulse
claudepulse
Or straight from GitHub:
pipx install git+https://github.com/ColdDesertLab/claudepulse
Upgrade with pipx upgrade claudepulse.
3. Manual clone (no install)
git clone https://github.com/ColdDesertLab/claudepulse
cd claudepulse
python3 cli.py dashboard # macOS / Linux
python cli.py dashboard # Windows
No third-party packages required — pure Python stdlib.
Usage
claudepulse # scan + open browser dashboard at http://localhost:8080
claudepulse scan # scan JSONL files and update database
claudepulse today # today's usage summary by model
claudepulse stats # all-time statistics
claudepulse --version
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.
Design
The dashboard uses a Linear-inspired dark theme — near-black canvas (#08090a), semi-transparent white borders, Inter Variable at weight 510, indigo-violet accent for interactive elements only. Built to be read for long stretches.
How it works
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.
Cost estimates
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).
Files
| 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 |
install.sh |
One-liner installer + auto-updating launcher |
pyproject.toml |
Packaging metadata for pip / pipx / PyPI |
License
MIT — see LICENSE.
Project details
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 claudepulse-1.1.3.tar.gz.
File metadata
- Download URL: claudepulse-1.1.3.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee6a3bb6283b0030dbeaa30a97fda6f576585be2cb010f6bb1440b404adb0646
|
|
| MD5 |
92e67c99c9460a8592d91a7bfe09ceab
|
|
| BLAKE2b-256 |
5369e6000749c19f5018299ecb0b9ce578c92ff8bc145933f084124818e1cef2
|
Provenance
The following attestation bundles were made for claudepulse-1.1.3.tar.gz:
Publisher:
release.yml on ColdDesertLab/claudepulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claudepulse-1.1.3.tar.gz -
Subject digest:
ee6a3bb6283b0030dbeaa30a97fda6f576585be2cb010f6bb1440b404adb0646 - Sigstore transparency entry: 1262380023
- Sigstore integration time:
-
Permalink:
ColdDesertLab/claudepulse@0895ddf937df68e322d4ab92d63b24fbbd91be76 -
Branch / Tag:
refs/tags/v1.1.3 - Owner: https://github.com/ColdDesertLab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0895ddf937df68e322d4ab92d63b24fbbd91be76 -
Trigger Event:
push
-
Statement type:
File details
Details for the file claudepulse-1.1.3-py3-none-any.whl.
File metadata
- Download URL: claudepulse-1.1.3-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36262626dfd330f072b2cc729640a1c52e3a8e422fbcf3fcfeab7d2301975272
|
|
| MD5 |
80d78d385ba6dcb0d5db294e11a31946
|
|
| BLAKE2b-256 |
52f7ec9ad73124873a206ea4f917a6e7d6217e3100d3dc05909be0a4a66c0346
|
Provenance
The following attestation bundles were made for claudepulse-1.1.3-py3-none-any.whl:
Publisher:
release.yml on ColdDesertLab/claudepulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claudepulse-1.1.3-py3-none-any.whl -
Subject digest:
36262626dfd330f072b2cc729640a1c52e3a8e422fbcf3fcfeab7d2301975272 - Sigstore transparency entry: 1262380029
- Sigstore integration time:
-
Permalink:
ColdDesertLab/claudepulse@0895ddf937df68e322d4ab92d63b24fbbd91be76 -
Branch / Tag:
refs/tags/v1.1.3 - Owner: https://github.com/ColdDesertLab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0895ddf937df68e322d4ab92d63b24fbbd91be76 -
Trigger Event:
push
-
Statement type: