Side by side
| RTK | Headroom | |
|---|---|---|
| What it is | A CLI wrapper that intercepts shell commands and returns a leaner version of their output. | A local proxy plus a macOS menu bar app that sits between your agent and the model API. |
| What it trims | Terminal command output: git, package managers, build tools, test runners. | All context on the way to the model: tool output, logs, documents, boilerplate, stale turns. |
| Where it acts | Before the output is ever written into the conversation. | On the request path, after the conversation is assembled and before it is sent. |
| Coverage | Commands it has a rule for. Anything else passes through untouched. | Every request in every session, including sub-agent runs. |
| Reversible? | No. The trimmed output is what the agent sees. | Yes. A retrieval tool lets the model pull the original content back on demand. |
| How you get it | Install it yourself, or toggle it on as a one-click add-on in the Headroom app. | The core app, or the open-source CLI. |
What RTK actually does
RTK stands for Rust Token Killer. It hooks into your agent's shell calls and transparently rewrites them: ask for git status and it runs rtk git status instead, returning a summary that carries the same information in a fraction of the tokens. The same treatment applies across common developer commands, and it reports what it saved with rtk gain. Because the rewrite happens at the hook layer, the agent does not need to know about it.
That design is why RTK is sharp but narrow. It is excellent on the commands it knows and does nothing at all for the rest of your context, which on a typical session is the larger share: files the agent read, documentation it pulled in, previous turns it is re-sending, and the tool results from everything that was not a shell command.
One practical note if you go looking for it: two different projects use the name rtk on GitHub. The token-saving one is rtk-ai/rtk. If rtk gain reports a missing command after install, you probably have the unrelated Rust Type Kit instead.
What Headroom does differently
Headroom does not wrap commands. It routes Claude Code and Codex through a local proxy on your machine, so it sees the request as the model would: the entire assembled context, not just the piece a single tool produced. It compresses the bulky, repetitive parts of that context before the request leaves your machine, and attaches a retrieval tool so the model can pull back the original content if it ever needs the detail.
Two consequences follow from working at that layer. Coverage is total, because every request goes through it, including sub-agent runs that lose the prompt cache. And compression can be reversible, because the original content still exists on your machine and can be handed back on request. A command wrapper cannot offer that: once the trimmed output is written into the conversation, the detail is gone.
Does Headroom use RTK?
Not as a dependency. Headroom's compression works with or without it. But RTK is genuinely good at its job, so the Headroom app ships it as an optional one-click add-on alongside Ponytail and MarkItDown. Turning it on means shell output arrives already lean, and Headroom compresses whatever is left along with the rest of the conversation. The two savings compound rather than overlap.
So which should you use?
If your sessions are dominated by shell work and you want one focused tool you install yourself, RTK alone is a reasonable choice and it is free. If you want the other 80% of the context handled too, without remembering to start anything, that is what Headroom adds. For most people the answer is both, which is why they sit on one screen: download the Headroom app, turn on RTK from Add-ons, and you are running the pair in under a minute.
Also worth knowing: Ponytail attacks a third side of the bill, the code the agent writes back. See Headroom vs Ponytail vs RTK for how all three fit together.