Three things you keep stopping to check, in 34 columns.
A thin tmux side pane that shows live rtk token savings, your Claude session and weekly usage, and Claude Code status — so none of them need a command, a tab, or a turn.
Why it exists
Savings you have to ask for are savings you stop asking about.
rtk tracks what it filters, but rtk gain is a command you run once out of curiosity and never again. A number behind a command doesn't change behaviour.
The limit is the real constraint, and checking it costs a turn.
/usage tells you where you stand, but you have to stop, ask, and spend context to find out — exactly when you least want to interrupt yourself.
"Is it me or is it them?" is a browser tab away.
When a session stalls, the first useful signal is whether Claude Code is degraded — and going to look means leaving the terminal.
None of these deserve a window. They deserve a glance. So they live in a narrow pane at a width you stop noticing.
Two decisions worth knowing about
Motion means something. The spectrum scrolls only while savings are actually accruing; when nothing changes it freezes grey and the header dot flips from ● live to ○ idle. Animation is a status signal, not decoration — if it's moving, rtk is working right now.
The bars are real data. The lower band's height is literally total_output / total_input against the upper one. The gap between them is the filtering, drawn to scale rather than illustrated.
What you're trusting it with
The usage section reads your Claude credentials
rtk-meter pulls the Claude Code OAuth token from the macOS keychain and sends it as a bearer token to api.anthropic.com — the same data /usage shows. Read this section before installing.
- The token goes only to Anthropic's API, over HTTPS. It is never written to disk, logged, or attached to any other request — it lives in a shell local for one
curl. - That endpoint is undocumented and internal. It's rate-limited: a 429 triggers a backoff and the panel keeps the last good reading marked stale rather than showing a misleading zero. It may change or vanish without notice; if it does, the usage rows degrade to
○ unavailableand nothing else breaks. - The only other network call is the public
status.claude.comsummary, unauthenticated. - You can skip it. Without a keychain entry the rows read
○ no keychain authand everything else works. On Linux that's simply the default. claude-status-tmuxneeds no credentials at all.
Install
git clone https://github.com/Abhay-Sastha-S/rtk-meter.git
cd rtk-meter
./install.sh --tmux
tmux source-file ~/.tmux.conf # then: prefix + M
| Flag | Effect |
|---|---|
| — | Copy both scripts into ~/.local/bin and print the tmux snippet |
| --link | Symlink instead, so git pull updates the installed copies |
| --tmux | Append the tmux block to ~/.tmux.conf — backs it up first, idempotent |
| --uninstall | Remove the scripts and the block. Never touches rtk |
The installer checks its dependencies before touching anything, and warns — without failing — if rtk or tmux are missing or you're not on macOS.
Using it
| Key | Does |
|---|---|
| q / Esc | Quit the meter — closes the pane, not your shell |
| u | Refresh Claude usage now, bypassing the rate-limit backoff |
| r | Reset rtk's savings stats (asks first) |
The three sources are polled on deliberately different clocks: rtk's stats move constantly, the status page rarely, and usage barely at all on a 5h/7d window — so usage is fetched roughly every ten minutes and otherwise refreshed on demand with u. Every interval is an environment variable; see the README.
How it works
tmux pane ──exec──► rtk-meter
├─ rtk gain -d -f json every RTK_METER_DATA_EVERY frames
├─ status.claude.com/api/v2 every CLAUDE_STATUS_EVERY frames
└─ api.anthropic.com/…/usage every CLAUDE_USAGE_EVERY frames
└─ bearer token from the macOS keychain
tmux status bar ──#()──► claude-status-tmux # cached status page, 60s TTL
Each frame is composed into a string buffer and painted with a single write, so the panel never flickers. Widths are measured with an ANSI-stripping helper rather than ${#var}, so colour codes don't skew the box borders. The spectrum blocks are emitted as raw UTF-8 bytes under LC_ALL=C in awk, which is why the bars render identically across terminals.
Credits
- rtk by rtk-ai, Apache-2.0 — the CLI proxy that produces every savings number here. A separate upstream project, not written or maintained by me, and nothing in this repo vendors or redistributes it.
rtk gain -d -f jsonis the only interface used; install rtk from its own project. - Claude Code, by Anthropic — the source of the usage figures, via the OAuth token it stores in the macOS keychain and an undocumented internal endpoint that carries no compatibility promise.
- status.claude.com — an Atlassian Statuspage instance operated by Anthropic. Both scripts read its public summary JSON.
- The tools doing the work — tmux, jq, curl, awk, and bash. Dependencies you already have, not code included here.
- Build and release — GitHub Actions and ShellCheck.
- Written with Claude Code, co-author on the commits that built this.
Trademarks and affiliation
Claude, Claude Code, and Anthropic are trademarks of Anthropic. rtk belongs to its own authors. This project is unofficial and is not affiliated with, endorsed by, or supported by Anthropic or the rtk maintainers. Because the usage endpoint is undocumented, treat that section as best-effort — it can break at any time without that being a defect in this tool.