Caveman for Claude Code, and tools that shrink the other side

Caveman shortens what the agent writes; rtk and Headroom shrink what it reads.

If all you want from Caveman for Claude Code is shorter answers, install the caveman skill on its own. If your context fills up with test runs, git output and logs, the answer is rtk, which shrinks shell output and leaves the agent’s voice alone. Headroom is for compressing everything the agent reads through a local proxy, or for putting compress() inside your own app. Chisle is the closest caveman alternative, with a terse voice, rules against extra code, and a hook that trims large tool output, all wired in as Claude Code hooks.

Measured by agentmods, live: caveman, headroom, chisle
ModTypeStarsLast pushLicenceScanTokensWorks with
cavemanJuliusBrussee/cavemanPlugin118ktodayApache-2.0A—Claude Code
headroomheadroomlabs-ai/headroomPlugin79ktodayApache-2.0A—Claude Code
chisleJayPokale/ChislePlugin74113d agoMITA—Claude Code

Install

/plugin marketplace add JuliusBrussee/caveman
/plugin install caveman
/plugin marketplace add headroomlabs-ai/headroom
/plugin install headroom
/plugin marketplace add JayPokale/Chisle
/plugin install chisle

Each name opens the mod's page: the scan, the token cost and every other way to install it.

Caveman is no longer one skill

Since 4.0 the repository ships six parts, all on after install, each with its own switch. The voice is one part. The others compress what the agent reads, pick the model and effort for each request (“Auto”), and keep scripts the agent writes so it can run them again. So next to rtk or Headroom, compare the proxy; next to Chisle, compare the voice.

npx skills add JuliusBrussee/caveman -g installs the skill alone. The whole thing installs with npx @caveman-ai/cli@latest, which needs Node.js 22.13 or newer. Take the whole thing only if you want model routing and accept a proxy in front of Claude Code.

Writing less vs reading less

There are two places to save tokens. One is what the model writes back, the other is what it reads (tool results, logs, files, history). Caveman’s voice rules cut the reply, and its “Read less” part shrinks logs, JSON, CSV and test output before the model sees them.

Reading is all rtk does. It compresses shell command output and has no voice. Its own README warns that bash output is one contributor to input tokens, so the saving thins out across the whole bill.

Most of Headroom is about reading too. Its output side, “verbosity steering”, appends a short terse note to the end of the system prompt. That is off by default, and HEADROOM_OUTPUT_SHAPER=1 turns it on.

Both halves live inside Claude Code with Chisle, as a ruleset for the voice and a PostToolUse hook for tool output instead of a proxy. It adds a third axis, code. Before writing, the agent walks a ladder of YAGNI, reuse, stdlib, native platform, installed dependency, one line, minimum code.

How each one hooks in, and what it changes

Caveman

At SessionStart the plugin injects the ruleset as hidden context. It hooks three more events. SubagentStart passes the mode on to subagents, UserPromptSubmit runs a mode tracker, and SessionEnd records stats. From the terminal, caveman claude starts an agent on caveman.

The reading side runs through a proxy, a base-URL swap on 127.0.0.1:8787. For Claude Code, setup writes ANTHROPIC_BASE_URL into ~/.claude/settings.json, and while it routes, Remote Control is unavailable. If you already set a base URL for another provider, Caveman leaves Claude Code alone and says why.

rtk

Homebrew, winget or a shell script will install it. Check you got the right one, since another project named “rtk” exists on crates.io. Then rtk init -g installs a PreToolUse hook. When the agent runs git status, the hook rewrites the command to its rtk version through updatedInput, and the agent gets compact output without knowing.

The catch is in the README. The hook fires only on Bash calls, so Claude Code’s built-in Read, Grep and Glob skip it. A short awareness file also goes into CLAUDE.md. It tells the model the output is condensed and how to re-run a command raw with rtk bypass. rtk has a proxy too, but it is optional.

Headroom

Only the PyPI package ships the CLI, and it needs Python 3.11 or newer. Running headroom wrap claude starts a local proxy and launches Claude Code configured to route through it. A ContentRouter picks a compressor by content type, with separate ones for JSON, source code and prose. Originals stay on your machine, and the model can fetch them back with headroom_retrieve.

headroom wrap also installs Serena for semantic code navigation, registered as a local-scope MCP server for the wrapped project. Pass --code-memory none if you don’t want it. The wrapped proxy exits with the agent.

Chisle

One command, npx chisle, installs it; --dry-run previews and --uninstall removes. A PostToolUse hook runs after Bash, Agent, WebFetch, WebSearch, Grep, Glob and any MCP tool, so it sees the Grep, Glob and MCP results that a Bash-only rtk hook never gets. Outputs above 8,000 characters keep 60 lines from the top and 40 from the bottom, with error lines rescued from the middle. Read, Edit and Write are never touched, because a trimmed Read would make the next Edit match text the model never saw. The code comment calls the compressor deterministic, with no LLM and no network.

What each one sends home

Default
Caveman skill sends nothing
Caveman CLI usage stats on; caveman telemetry off or DO_NOT_TRACK=1
Caveman Auto only after sign-in; sends your latest ask to Caveman Cloud
rtk telemetry off until you opt in
Headroom anonymous beacon on; never prompts or code; HEADROOM_TELEMETRY=off
Chisle checks the npm registry for a newer version at session start

What the voice actually buys you

Caveman’s own README has the candid numbers. “Be concise” is the real baseline, it says, because new models already know it. On top of that, /caveman cut 3% more at the median and /ultracave 35% more. Those numbers come from the 3.1.0 rules and have not been re-run. The rules themselves cost about 1,160 input tokens. If you pay per request, as on GitHub Copilot, shorter answers save nothing.

Chisle’s README claims shorter answers still, at 56% of a bare model against 65% for Caveman. That is Chisle’s own benchmark (Haiku 4.5, 26 prompts, tools off), and we have not reproduced it.

Caveman switches back to full prose for anything that outlives the chat, such as code comments, commits, docs and PRs. Its skill also forbids dropping not, never, no, only and except, and Headroom’s level 3 steering text keeps that same list of negations.

Questions

Does the caveman skill actually save tokens?

On output, a little beyond a plain instruction. Caveman's own eval puts /caveman 3% under "Answer concisely." at the median and /ultracave 35% under it, on the 3.1.0 rules. The ruleset itself costs about 1,160 input tokens, and on per-request billing such as GitHub Copilot shorter answers save nothing.

Caveman vs rtk: what is the difference?

Caveman's core is a voice that makes the agent write less; its proxy also compresses some of what the agent reads. rtk only touches what the agent reads: a PreToolUse hook rewrites shell commands so their output arrives filtered, and it never sees Read, Grep or Glob calls.

Sources

JuliusBrussee/caveman at 4bf8898
README.md · INSTALL.md · .claude-plugin/plugin.json · src/hooks/caveman-activate.js · skills/caveman/SKILL.md · proxy/README.md

rtk-ai/rtk at 1cf7bc7
README.md · src/hooks/hook_cmd.rs · hooks/claude/README.md · hooks/rtk-awareness.md

headroomlabs-ai/headroom at 0ddaa56
README.md · pyproject.toml · headroom/proxy/output_verbosity_policy.py

JayPokale/Chisle at 1b3203f
README.md · .claude-plugin/plugin.json · hooks/chisle-compress-output.js · hooks/chisle-activate.js · rules/chisle-activate.md