rtk-meter v1.0.0 MIT github ↗

    
The panel, drawn with the same maths — illustrative values

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

01

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.

02

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.

03

"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 ○ unavailable and nothing else breaks.
  • The only other network call is the public status.claude.com summary, unauthenticated.
  • You can skip it. Without a keychain entry the rows read ○ no keychain auth and everything else works. On Linux that's simply the default.
  • claude-status-tmux needs 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
FlagEffect
—Copy both scripts into ~/.local/bin and print the tmux snippet
--linkSymlink instead, so git pull updates the installed copies
--tmuxAppend the tmux block to ~/.tmux.conf — backs it up first, idempotent
--uninstallRemove 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

KeyDoes
q / EscQuit the meter — closes the pane, not your shell
uRefresh Claude usage now, bypassing the rate-limit backoff
rReset 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 json is 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.