Stream Deck plugin that displays live Claude API rate limit usage. Reads directly from your local Claude Code credentials — no API key configuration needed.
Inspired by Clawdmeter by HermannBjorgvin.
The key displays a horizontal meter bar, both utilization percentages, and the active window's reset time:
42m ← time until active window resets
5H:73% ← 5-hour window utilization
7D:12% ← 7-day window utilization
[████░░░] ← color bar: green → yellow → red as usage rises
- Bar fills left-to-right as usage increases; color shifts green → yellow → red
- Press the key to toggle which window the bar and reset timer track (5H ↔ 7D)
- Both percentages are always visible regardless of toggle
- Reset timer shows
42mfor minutes,2hfor hours,nowwhen imminent - If the key shows
ERR / check / logs, see Troubleshooting
- Node.js v18+
- Elgato Stream Deck software 6.4+
- Claude Code installed and logged in (
~/.claude/.credentials.jsonmust exist)
git clone https://github.com/YOUR_USERNAME/streamdeck-claude-meter
cd streamdeck-claude-meter
npm install
npm run devnpm run dev builds the plugin and links it to Stream Deck automatically.
- Open Stream Deck software
- Find Claude Meter in the action list (right panel)
- Drag Rate Meter onto any key
- The key polls every 1 minute automatically — the first fetch runs immediately on appearance
- Press the key to toggle 5H ↔ 7D view
- You can place the action on multiple keys; they all share one poll timer and stay in sync
Every minute the plugin:
- Reads your OAuth token from
~/.claude/.credentials.json - Makes a minimal API call to
api.anthropic.com/v1/messages(1 token, cheapest model) - Reads rate limit headers from the response:
anthropic-ratelimit-unified-5h-utilizationanthropic-ratelimit-unified-7d-utilizationanthropic-ratelimit-unified-5h-resetanthropic-ratelimit-unified-7d-reset
- Displays the data on the key
Key shows ERR / check / logs
The plugin failed to fetch rate limit data. Common causes:
| Symptom | Fix |
|---|---|
~/.claude/.credentials.json missing |
Log into Claude Code: run claude in a terminal and complete auth |
| Token expired | Same — re-run claude to refresh credentials |
No internet / firewall blocking api.anthropic.com |
Check network; corporate proxies may block the endpoint |
| Rate limited (HTTP 429) | Wait for the 5H window to reset, then the key will recover automatically |
Log file location: %appdata%\Elgato\StreamDeck\logs\io.github.borednewcoder.claudemeter.log
Open it with any text editor or run:
notepad "$env:APPDATA\Elgato\StreamDeck\logs\io.github.borednewcoder.claudemeter.log"Key stuck on ...
The first poll hasn't completed yet. Wait a few seconds. If it never resolves, check the log file.
The plugin ships Windows-only by default. To enable macOS:
- Open
manifest.json - Find the
"OS"array and add amacentry:
"OS": [
{ "Platform": "windows", "MinimumVersion": "10" },
{ "Platform": "mac", "MinimumVersion": "10.15" }
]- Rebuild and re-link:
npm run devThe credentials path (~/.claude/.credentials.json) is the same on macOS, so no other changes are needed.
npm run build
streamdeck restart io.github.borednewcoder.claudemeter- Inspired by Clawdmeter (HermannBjorgvin) — source of the
anthropic-ratelimit-unified-*header technique - @elgato/streamdeck — MIT License (Elgato)
- esbuild — MIT License
- TypeScript — Apache 2.0 License (Microsoft)
- This project uses no Anthropic-owned assets, fonts, or trademarks
- The plugin UUID is
io.github.borednewcoder.claudemeter— change this inmanifest.json,rate-meter.ts, andpackage.jsonif you fork and redistribute - Currently Windows-only (manifest OS config); add
macentry tomanifest.jsonfor macOS support - Plugin logs at
%appdata%\Elgato\StreamDeck\logs\io.github.borednewcoder.claudemeter.log
If this saved you time or you just want to say thanks:
Cash App: $CVanZetta