Caveman Claude Code Skill: What It Really Saves Julius Brussee's Caveman project, which began as a joke prompt making coding agents answer like cavemen, has passed 111,000 GitHub stars and released version 4.0.0 on 13 October 2026, reorganizing the repo around six components the README calls "rocks." The project's own Honest Numbers page reports the caveman voice saves only about 3% over a plain "Answer concisely" instruction, while its input-side compression proxy claims 33.2% fewer input tokens per session and its model router claims 54% cheaper than Opus 5.5 at xhigh on an interim basis. Caveman started as a joke prompt that made Claude grunt. 111,000 stars later, the repo's own Honest Numbers page says the voice saves about 3% over "Answer concisely", and version 4.0 rebuilt the project around the tokens your agent reads instead. Caveman began in April 2026 as a joke: a prompt that told a coding agent to answer like a caveman. Short fragments, no greeting, no recap. It reached number one on Hacker News with 904 points, ThePrimeagen's verdict on video was "No way this actually works", and the repository has since passed 111,000 stars and 6,400 forks. The joke kept its voice and outgrew its premise. Version 4.0.0, released on 13 October 2026, reorganises the project into six parts the README calls "rocks", and only one of them is the caveman voice. The rest are a local proxy that compresses what your agent reads, a router that picks the model and reasoning effort per request, a library of reusable scripts, and smaller tools for finding where tokens go. That explains the GitHub language label, which says Go. Most of the code is now the compression engine and proxy behind those input-side rocks, with JavaScript and TypeScript for the CLI and installers and Python for the evaluation harness. The skill that made it famous is still a markdown file. The whole repository is Apache-2.0. "Caveman" and the rock logo are trademarks of the author, Julius Brussee. The most interesting file in the repo is not the skill. It is a page titled Honest Numbers , which measures the project's most famous claim and publishes the result even where it is unflattering. This article follows that thread, because it is the clearest guide to which parts of Caveman are worth installing. The full install is one command: npx @caveman-ai/cli@latest It finds the agents and logins on your machine, shows what it is about to change, and waits for you to press Enter. It needs Node.js 22.13 or newer. Afterwards, plain claude runs through Caveman, as do Codex, Gemini CLI, OpenCode and, per the install matrix, more than 30 other agents. It runs locally, with your own API keys or your Claude Pro or Max login. | Rock | What it does | What the README measured | |---|---|---| | Say less | The caveman voice: shorter replies, code untouched | 63 → 20 tokens on one example | | Read less | Shrinks logs, JSON, CSV, YAML and test output before the model reads them | 33.2% fewer input tokens per session | | Auto | Picks the model and the effort for each request | 54% cheaper than Opus 5.5 at xhigh, interim | | Blocks | Keeps the scripts the agent writes and hands them back | 397 → 76 tokens for one test run | | Waste fixes | Finds where your tokens go, keeps the prompt cache warm while you pause | Not measured yet | | Browse | Returns web pages to the agent compressed | 121 tokens instead of 15,704 on a 200-row table | All six are on after install. Each has its own switch, caveman off browse for example, and caveman status shows what is running. Only Auto needs an account, and the account is free. If you only want the voice, the skill installs on its own, with no proxy and no CLI: npx skills add JuliusBrussee/caveman -g Type /caveman $caveman in Codex if it does not start by itself, and say "stop caveman" to go back. Claude Code also has a plugin marketplace package, and Gemini CLI an extension. This is the example the project is famous for. A normal agent explains a React re-render like this: The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object. Caveman mode says: New object ref each render, so React re-renders. Wrap the prop in useMemo . Same fix, 63 tokens down to 20. The README insists this is "a voice, not broken grammar", and the rules underneath are more careful than the meme suggests: thing action reason . next step . No greeting, no "let me", no recap. The negation rule is the one that makes terse output safe. Compress "do not run this against production" carelessly and you get "run against production". The rules protect those words explicitly. There are three intensities. /caveman gives the 20-token answer above, /ultracave drops to 14 "Inline object prop, new ref, re-render. useMemo ." , and /megacave answers in Classical Chinese for 13 tokens, which is the most compressed and least readable of the three. Here is the table the repo publishes for ten developer questions on claude-opus-5-5: | Instruction | Output tokens | |---|---| | None | 6,983 | | Answer concisely. | 4,334 | | /caveman | 4,119 | | /ultracave | 2,693 | Read the first two rows before the last two. A plain two-word instruction takes the total from 6,983 to 4,334, about 38%, and the repo itself calls "be concise" the real baseline because current models already know how to do it. On top of that baseline, /caveman cuts 3% more at the median . /ultracave cuts 35% more, which is the variant that measurably goes further, at a real cost in readability. The caveats are printed next to the numbers: ten questions, a single run, output length only, measured on the 3.1.0 rules and not yet re-run since. The rules themselves cost about 1,160 tokens of input. The GitHub tagline still says the project "cuts 65% of tokens". The Honest Numbers page notes that earlier releases of the stats command applied a fixed 65% output ratio with no committed, reviewed result behind it. Current reports ignore those historical estimates, and the statusline no longer displays a savings figure at all. It is unusual for a project at this scale to walk back its own headline number in its own documentation. It is also the most useful thing in the repo, because it tells you exactly where not to expect savings. The deeper reason the voice matters less than it looks comes from the outside A/B tests the repo collects: Think about what a coding agent sends on each turn: the system prompt, the tool definitions, the conversation so far, every file it read and every tool result it got back. The reply is a sliver at the end of all that. Halving the sliver halves almost nothing. The repo's own summary is that output shrinks, but an agent run's bill is mostly input and cache re-reads, which an output-style rule cannot touch. The voice does win where the reply is the bulk of the work. Adobe Research's CAVEWOMAN paper, which cites the repo, measured caveman-style output cutting cost 1.4 to 2.4 times per model across eight models and five datasets, and Elastic's remake for Elasticsearch MCP scenarios measured 63.6% fewer response tokens. Those are chat-shaped workloads. Adobe also found the effect reverses on the other side of the conversation. Cavemanning your prompt makes answers worse, which is why Caveman never touches what you type. The repo lists the cases where it loses outright: What is still missing is a published quality claim. A fidelity eval exists, with fixed cases and regex checks that numbers, negations and safety wording survived compression, but no reviewed snapshot is committed. If you run your own A/B, borrow the idea: a few patterns asserting that a "not" or a version number made it through, drafted against real replies in a regex tester https://www.devpik.com/developer-tools/regex-tester , catch the failure a token count never will. If output is the sliver, input is the bill, and 4.0 puts its weight there. The proxy compresses tool output before the model sees it. The README's benchmark ran Claude Code on six large files, each hiding one record the agent had to find: | Shape | The file through Caveman | Whole session, 3 runs | Session saved | |---|---|---|---| | CSV | 28,041 → 314 | 165,823 → 74,484 | 55.1% | | Logs | 22,810 → 348 | 148,807 → 74,068 | 50.2% | | YAML | 20,447 → 178 | 132,124 → 71,027 | 46.2% | | Test output | 18,806 → 203 | 150,377 → 108,514 | 27.8% | | JSON | 18,837 → 281 | 147,975 → 108,939 | 26.4% | | HTML | 21,670 → 21,670 | 140,687 → 154,641 | 9.9% worse | | All six | 130,611 → 22,994 | 885,793 → 591,673 | 33.2% | Caveman got 18 of 18 answers right. Headroom, another compression wrapper run on the same suite, got 15 of 18 at 6.7% fewer tokens. The gap between the file column and the session column is the lesson in miniature. A supported file shrinks by about 98%, but every request still carries the system prompt, tool definitions, conversation and the Caveman skill itself, so the session moves by a third. HTML went backwards because there is no HTML compressor yet, while the skill overhead was still counted. The repo kept that red row rather than dropping it. The compression is lossy and query-aware: the engine keeps what looks relevant to the question. Every original stays on your disk, and the agent can pull it back from a local recovery store when the compressed view is missing something. Those recovery calls were counted in the benchmark. Read the limits before you quote 33.2%. The fixtures are deterministic 60 to 95 KB files, each burying one record in noise, which is the ideal case for a needle-finding compressor. The session run dates from August 2026 on an older engine. And the raw harness artefacts are not in the public repo, so the result cannot be reproduced from a checkout, and the repo says to treat it as a pinned report. You can get a lossless slice of this by hand, so we measured how big. Using the same o200k tokeniser Caveman reports in, we encoded two payloads three ways: | Payload | Pretty JSON indent 2 | YAML | Minified JSON | |---|---|---|---| | 50 customer records | 3,994 | 3,072 | 2,490 | | 20-service deployment config | 4,038 | 2,788 | 2,310 | Minifying cut 38% and 43%. The common advice to convert JSON to YAML before pasting it into a prompt beats indented JSON, but it lost to minified JSON on both shapes, because YAML keeps every key name and spends tokens on indentation instead of braces. If you paste structured data into an agent by hand, a JSON minifier https://www.devpik.com/json-tools/json-minifier is the cheapest lossless win available. Reach for a JSON to YAML converter https://www.devpik.com/json-tools/json-to-yaml when a human has to read the prompt, not when the bill is the point. Auto adds a model to your agent's picker. Choose it, and Caveman picks the model and reasoning effort for each request: a big model for a hard ask, a cheaper setting for an easy one. | Setup | Tasks solved | Cost per try | Median time | |---|---|---|---| | Opus 5.5, xhigh effort, every request | 44.3% | $7.83 | 35.2 min | | Auto, Claude models only | 43.7% | $3.59 | 15.9 min | | Auto, plus OpenAI and open models | 42.9% | $3.47 | 16.7 min | That is 85 real coding tasks from SWE-Interact and SWE-Together, one attempt each, at 0.46 times the cost and under half the time. The benchmark document is more revealing than the headline, because it shows what Auto actually did. On the Claude-only pool it sent 87% of requests to Opus 5.5 at medium effort , 8% to Opus at high, and 5% to Sonnet 5.5. The saving comes mostly from lower effort, not from switching to a cheaper model, and the document says so itself: against an agent already running Opus at medium effort, expect much less, and that case has not been measured. The other caveats are stated just as plainly. The run is interim, 85 of 169 tasks. The quality interval is about ±7 points, so the arms cannot be told apart, and on SWE-Interact alone Auto is 6 points behind. Costs are list prices from the router's catalogue, not billed amounts, and the raw trajectories are not in the repo. The practical reading: if you run xhigh effort by habit, the first cheap experiment is lowering effort yourself. Auto is the version of that experiment that decides per request. caveman login free account; Auto appears in the model picker caveman providers add openai optional: more models, on your own key It works in Claude Code, OpenCode and Codex. Any other model you pick runs exactly as picked, and without signing in there is no Auto and nothing is sent. Code mode is the pattern of an agent writing a small script instead of making tool call after tool call, an approach both Cloudflare and Anthropic have written up. Its weakness is that the agent writes the same script every session and throws it away. On one machine, in one week, agents wrote the same script 394 times , and a Purdue study measured the habit at up to 9.57% of task cost. Blocks keeps those scripts in your repository, checks them on every pull request, and hands them back. Eight ship with Caveman: json-peek , jsonl-stats , test-summary , first-error , wait-for , grep-defs , http-json and replace-in-file . When the agent starts typing a script a block already covers, it gets a one-line hint to use the block. It never denies or rewrites a command. | Input | Raw tokens | What agents type now | With a block | |---|---|---|---| | go test -v ./... , 326 tests | 10,561 | 397, piped through tail -20 | 76 , test-summary | | 1.4 MB JSON file | 251,893 | 236, their own heredoc | 227 , json-peek | | 366-line Go file | 3,111 | 250 , grep -n | 489, grep-defs | The third row is a loss: the block reads back more than a bare grep, and the row stays in the README anyway. That consistency, publishing the rows that lose, runs through the whole project. caveman-blocks scan shows what your agents retyped this month without the script text leaving your machine, and caveman-blocks init writes the rules and the block index into your repo's AGENTS.md . Blocks is a pre-release v0.1.0-rc.5 , Python only, with no sandbox yet. The rest of the toolkit is a set of narrower tools, most with their own numbers: /caveman-compress