See your Claude Code usage
One command turns the transcripts Claude Code keeps on your computer into a private, encrypted dashboard.
Home charts your own agents' usage, provider by provider. View in Shuriken
Run this in a terminal
macOS and Linux
curl -fsSLo report.sh https://github.com/shurikenharness/claude-code-usage-dashboard/releases/download/v1.0.0/report.sh && openssl dgst -sha256 -r report.sh | grep -q ^ca067721b9ec87078e6a72d1f9b6d3b351184fce9b958947d992acc633e9aa2c && bash report.sh
It downloads report.sh v1.0.0 from GitHub and runs it only if its SHA-256 matches.
Read it first
Download the script, check that its SHA-256 is the one in the command above, read it, then run it:
curl -fsSLo report.sh https://github.com/shurikenharness/claude-code-usage-dashboard/releases/download/v1.0.0/report.sh
openssl dgst -sha256 -r report.sh
less report.sh
bash report.sh
report.sh · SHA-256 ca067721b9ec8707…
Windows
irm "https://github.com/shurikenharness/claude-code-usage-dashboard/releases/download/v1.0.0/report.ps1" -OutFile report.ps1; if ((Get-FileHash report.ps1).Hash -eq 'e1e6203b000a09a7111069783b17f0c2166ddf5a06bc9408dc2f5a0e8ffdc1a3') { & ([scriptblock]::Create((Get-Content report.ps1 -Raw))) } else { 'report.ps1 does not match its SHA-256, so it was not run.' }
It downloads report.ps1 v1.0.0 from GitHub and runs it only if its SHA-256 matches.
Read it first
Download the script, check that its SHA-256 is the one in the command above, read it, then run it:
irm "https://github.com/shurikenharness/claude-code-usage-dashboard/releases/download/v1.0.0/report.ps1" -OutFile report.ps1
Get-FileHash report.ps1
notepad report.ps1
& ([scriptblock]::Create((Get-Content report.ps1 -Raw)))
report.ps1 · SHA-256 e1e6203b000a09a7…
Private by design
Only you can see this. We can't read it: the key never leaves your link.
Your report is encrypted on your computer with a new random key, and only the encrypted file is uploaded. The key sits in your link after the # sign, which browsers never send to a server. The file is deleted after 30 days, or when you press Delete now.
How it works
Run the command
It reads the transcripts in ~/.claude/projects and keeps only numbers: models, token counts, times, effort levels and limit errors. No account, nothing installed.
Say yes to what it sends
It prints what it found and what it will send, and asks before anything leaves your computer.
Open your private link
Your browser downloads the encrypted file, decrypts it with the key in the link and draws the dashboard.
What it sends
- Model calls and tokens per hour, by model and effort level
- Model names, such as claude-opus-4-6
- Each session's start, end, active time and size
- When you hit a usage limit, and which one
- A number per project, never its name
What it never sends
- Your prompts or Claude's replies
- File paths, folder names or project names
- Tool calls, code or command output
- Your sign-in, settings or anything else in ~/.claude
What your report looks like
Example data
Made-up numbers, drawn the way your report will be.
11 Aug 2026 to 19 Oct 2026: active on 61 of 70 days
The example's times are in UTC; your report uses your own time zone.
- Model calls
- 7,673
- Sessions
- 128
- Active days
- 61
- Projects
- 6
- Tokens
- 506.5M
- API-equivalent cost
- $391API-equivalent cost: what this usage would cost at API prices. You pay for your subscription, not this.
What stands out
You hit a usage limit on 9 days (8 on the 5-hour limit, 1 on a weekly one).
How Shuriken moves a chat to another of your accounts
Use only accounts you own and are entitled to use.
Ultra Code ran 38% of the calls that recorded an effort level.
You ran 3 sessions at once, and 3 or more on 3 days.
Most of your work happens 20:00–00:00: 45% of your calls.
Activity
- Opus 4.6
- Haiku 4.5
- Sonnet 4.5
- Sonnet 4.6
- Other
Show as a table
| By week | Opus 4.6 | Haiku 4.5 | Sonnet 4.5 | Sonnet 4.6 | Other | Tokens |
|---|---|---|---|---|---|---|
| Week of 10 Aug 2026 | 24.7M | 7.4M | 12.2M | 2.3M | 0 | 46.6M |
| Week of 17 Aug 2026 | 19.7M | 8.4M | 7.1M | 6.1M | 6.6M | 48M |
| Week of 24 Aug 2026 | 76.6M | 21.2M | 18.7M | 0 | 14.8M | 131.3M |
| Week of 31 Aug 2026 | 13.1M | 4.9M | 6.5M | 3M | 0 | 27.5M |
| Week of 7 Sept 2026 | 31.1M | 7.7M | 1.2M | 6.7M | 0 | 46.7M |
| Week of 14 Sept 2026 | 13.4M | 5M | 3.1M | 3.6M | 5.3M | 30.4M |
| Week of 21 Sept 2026 | 13.4M | 5M | 12.4M | 0 | 891.4K | 31.7M |
| Week of 28 Sept 2026 | 26.1M | 7.5M | 10M | 0 | 459.1K | 44.1M |
| Week of 5 Oct 2026 | 24.6M | 6.2M | 5.9M | 1M | 2.8M | 40.4M |
| Week of 12 Oct 2026 | 31.6M | 9.1M | 3.3M | 11.7M | 2.6M | 58.4M |
| Week of 19 Oct 2026 | 1.2M | 151.5K | 0 | 0 | 0 | 1.4M |
Model mix
| Model | Share of calls | Calls | Tokens | Cost |
|---|---|---|---|---|
| Opus 4.6 | 54% | 4,163 | 275.4M | $273 |
| Haiku 4.5 | 16% | 1,247 | 82.5M | $16.39 |
| Sonnet 4.5 | 16% | 1,239 | 80.5M | $48.55 |
| Sonnet 4.6 | 7% | 521 | 34.5M | $20.33 |
| Opus 4.5 | 7% | 503 | 33.5M | $33.22 |
Tokens
97% of the input side came from the cache.
Busiest hours
Your busiest 4 hours: 20:00–00:00, with 45% of your calls.
Sessions
- Median session
- 1 h 53 min
- Longest session
- 6 h 7 min
- Most at once
- 33 or more at once on 3 days
Longest sessions
| Started | Active | Calls | Main model | Tokens |
|---|---|---|---|---|
| 24 Aug, 20:42 | 6 h 7 min | 167 | Sonnet 4.5 | 11M |
| 16 Oct, 13:43 | 5 h 51 min | 164 | Opus 4.6 | 10.6M |
| 27 Aug, 21:24 | 5 h 41 min | 154 | Opus 4.6 | 10.6M |
| 28 Aug, 09:59 | 5 h 36 min | 154 | Opus 4.6 | 10.1M |
| 12 Sept, 13:42 | 5 h 24 min | 150 | Opus 4.6 | 10.2M |
Active time counts the gaps of 15 minutes or less between calls, plus a minute per call.
Projects
6 projects. The command counts them on your computer and never sends a name.
Effort and Ultra Code
54% of your calls recorded an effort level.
An Ultra Code keyword typed inside a prompt isn't counted, because the command never reads prompt text.
Usage limits
- Days with a limit hit
- 9
- 5-hour limit
- 8
- Weekly limit
- 1
Last hits
- 16 Oct, 22:005-hour limit
- 8 Oct, 20:005-hour limit
- 6 Oct, 11:005-hour limit
- 9 Sept, 19:005-hour limit
- 27 Aug, 23:005-hour limit
- 25 Aug, 09:005-hour limit
- 24 Aug, 14:005-hour limit
- 22 Aug, 16:00Weekly limit
- 11 Aug, 12:005-hour limit
Streaks
- Current streak
- 2 days
- Longest streak
- 26 days
Calls per day, last 53 weeks
More
- Calls from subagents
- 28%
- Calls in fast mode
- 4%
- Claude's working time
- 85 h 40 min
- Web searches
- 71
Questions
What does the command read?
Only the usage lines of the transcripts in ~/.claude/projects: model names, token counts, timestamps, effort levels and limit errors. It never reads your prompts, Claude's replies, file paths or project names. Projects are counted on your computer and shown as Project A, B and C.
Can Shuriken see my report?
No. The report is encrypted on your computer, and the key sits in the link after the # sign, which browsers never send to a server. We store the encrypted file for 30 days, or until you press Delete now.
Where is the code, and how do I know it's what runs?
Both scripts are on GitHub (shurikenharness/claude-code-usage-dashboard) under the MIT license. The command downloads one tagged release from there and runs it only if its SHA-256 matches the one in the command, so a changed file never runs.
Is the cost what I paid?
No. It is what the same tokens would cost at Anthropic's API list prices. A Pro or Max plan has a fixed monthly price, so the number shows how much work went through your plan, not your bill.
Does it work on Windows?
Yes. The Windows command runs a PowerShell script that uses only what Windows has built in, written for Windows PowerShell 5.1 and PowerShell 7. On macOS and Linux it needs bash, awk, gzip, openssl and curl, which those systems ship with.
Why is there no effort or Ultra Code section?
Claude Code writes the effort level into a transcript only in some cases, such as an /effort command. When fewer than 1% of your calls carry a level, the dashboard leaves the section out. Ultra Code typed as a word inside a prompt isn't counted, because the command never reads prompt text.