{"slug": "caveman-claude-code-skill-what-it-really-saves", "title": "Caveman Claude Code Skill: What It Really Saves", "summary": "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.", "body_md": "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.\n\nCaveman 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.\n\nThe 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.\n\nThat 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.\n\nThe whole repository is Apache-2.0. \"Caveman\" and the rock logo are trademarks of the author, Julius Brussee.\n\nThe 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.\n\nThe full install is one command:\n\n```\nnpx @caveman-ai/cli@latest\n```\n\nIt 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.\n\n| Rock | What it does | What the README measured | \n|---|---|---|\n| **Say less** | The caveman voice: shorter replies, code untouched | 63 → 20 tokens on one example | \n| **Read less** | Shrinks logs, JSON, CSV, YAML and test output before the model reads them | 33.2% fewer input tokens per session | \n| **Auto** | Picks the model and the effort for each request | 54% cheaper than Opus 5.5 at xhigh, interim | \n| **Blocks** | Keeps the scripts the agent writes and hands them back | 397 → 76 tokens for one test run | \n| **Waste fixes** | Finds where your tokens go, keeps the prompt cache warm while you pause | Not measured yet | \n| **Browse** | Returns web pages to the agent compressed | 121 tokens instead of 15,704 on a 200-row table | \n\nAll 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.\n\nIf you only want the voice, the skill installs on its own, with no proxy and no CLI:\n\n```\nnpx skills add JuliusBrussee/caveman -g\n```\n\nType `/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.\n\nThis is the example the project is famous for. A normal agent explains a React re-render like this:\n\nThe 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.\n\nCaveman mode says:\n\nNew object ref each render, so React re-renders. Wrap the prop in `useMemo`.\n\nSame 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:\n\n`[thing] [action] [reason]. [next step].` No greeting, no \"let me\", no recap.\nThe 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.\n\nThere 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.\n\nHere is the table the repo publishes for ten developer questions on claude-opus-5-5:\n\n| Instruction | Output tokens | \n|---|---|\n| None | 6,983 | \n| `Answer concisely.` | 4,334 | \n| `/caveman` | 4,119 | \n| `/ultracave` | **2,693** | \n\nRead 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.\n\nThe 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.\n\nThe 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.\n\nIt 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.\n\nThe deeper reason the voice matters less than it looks comes from the outside A/B tests the repo collects:\n\nThink 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.\n\nThe 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.\n\nAdobe 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.\n\nThe repo lists the cases where it loses outright:\n\nWhat 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.\n\nIf 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:\n\n| Shape | The file through Caveman | Whole session, 3 runs | Session saved | \n|---|---|---|---|\n| CSV | 28,041 → 314 | 165,823 → 74,484 | **55.1%** | \n| Logs | 22,810 → 348 | 148,807 → 74,068 | **50.2%** | \n| YAML | 20,447 → 178 | 132,124 → 71,027 | **46.2%** | \n| Test output | 18,806 → 203 | 150,377 → 108,514 | **27.8%** | \n| JSON | 18,837 → 281 | 147,975 → 108,939 | **26.4%** | \n| HTML | 21,670 → 21,670 | 140,687 → 154,641 | 9.9% worse | \n| **All six** | 130,611 → 22,994 | 885,793 → 591,673 | **33.2%** | \n\nCaveman got 18 of 18 answers right. Headroom, another compression wrapper run on the same suite, got 15 of 18 at 6.7% fewer tokens.\n\nThe 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.\n\nThe 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.\n\nRead 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.\n\n**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:\n\n| Payload | Pretty JSON (indent 2) | YAML | Minified JSON | \n|---|---|---|---|\n| 50 customer records | 3,994 | 3,072 | **2,490** | \n| 20-service deployment config | 4,038 | 2,788 | **2,310** | \n\nMinifying 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.\n\nAuto 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.\n\n| Setup | Tasks solved | Cost per try | Median time | \n|---|---|---|---|\n| Opus 5.5, xhigh effort, every request | 44.3% | $7.83 | 35.2 min | \n| **Auto, Claude models only** | **43.7%** | **$3.59** | **15.9 min** | \n| Auto, plus OpenAI and open models | 42.9% | $3.47 | 16.7 min | \n\nThat 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.\n\nThe 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.\n\nThe 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.\n\nThe 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.\n\n```\ncaveman login                  # free account; Auto appears in the model picker\ncaveman providers add openai   # optional: more models, on your own key\n```\n\nIt 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.\n\nCode 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.\n\nBlocks 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.\n\n| Input | Raw tokens | What agents type now | With a block | \n|---|---|---|---|\n| `go test -v ./...` , 326 tests | 10,561 | 397, piped through `tail -20` | **76** ,`test-summary` | \n| 1.4 MB JSON file | 251,893 | 236, their own heredoc | **227** ,`json-peek` | \n| 366-line Go file | 3,111 | **250** ,`grep -n` | 489, `grep-defs` | \n\nThe 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.\n\n`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.\n\nThe rest of the toolkit is a set of narrower tools, most with their own numbers:\n\n`/caveman-compress <file>`` CLAUDE.md` and keeps a backup. Across five test files it took 6,198 tokens down to 4,138, between 22.8% and 49.1% per file, with every heading, code block and path intact. Since a memory file is sent with every request, this saving compounds in a way a shorter reply does not.`caveman browse <url>`` caveman stats`. Not measured yet.` caveman learn``caveman learn implement` applies fixes one diff at a time, only when you say yes.\nInside the agent there are a few commands worth knowing. `/caveman-commit` writes a one-line Conventional Commit. `/caveman-review` returns one finding per line, in the form `L42: 🔴 null deref. Guard it.` `cavecrew` runs subagents that find, edit and review code and report back in caveman.\n\nThe most useful command, given everything above, is `caveman trial -- claude`, which A/B tests a real session on your own work. Every number on this page is someone else's workload. That one is yours.\n\nThe privacy section is specific, and it differs sharply by component:\n\n`/caveman-compress`, which sends the file you compress to your configured model provider.`caveman telemetry off` or `DO_NOT_TRACK=1` turns it off for good.`caveman off routing` stops it.`caveman providers cloud off` stops that.\nTwo things follow. Telemetry that includes your IP address is on by default in the CLI, which is worth knowing before you install it on a work machine. And Auto, the rock with the biggest headline saving, is also the one that sends your context off the machine.\n\nThe commercial side of the project is Caveman Cloud, aimed at teams building their own agents rather than using one: run tracing, evals on real traffic, and an \"autopilot\" that proposes cheaper changes, tests them on recorded work, and ships only when the evals hold, with you approving the pull request. The open-source CLI and skill do not require it.\n\nIt depends on which rock you came for, and the repo's own numbers make the answer unusually clear.\n\n**For the voice alone,** install just the skill, but first add \"Answer concisely.\" to your `CLAUDE.md` and compare. The repo's own table says that gets you most of the way, and `/caveman` adds about 3% on top. If you want a real further cut, `/ultracave` is the variant with the 35% number behind it.\n\n**If your sessions read big logs, CSVs or test output,** the Read less proxy is the rock with the strongest evidence: 33.2% fewer input tokens at held accuracy on its benchmark, with the limits stated above.\n\n**If you run Opus at xhigh effort by default,** Auto's saving is mostly an effort saving. Try lowering effort yourself, or let Auto decide per request, knowing it sends context to Caveman Cloud.\n\n**If you pay per request,** as with GitHub Copilot, skip the voice. A shorter answer is the same request.\n\nWhichever you pick, measure it. Run `caveman trial`, or compare provider-billed totals on the same task with and without Caveman, and turn it off for any workload where the bill goes up. That instruction comes from the repo itself.\n\nCaveman became famous as a joke about grunting. What makes it worth trusting is the page that measured the grunting and reported, plainly, that it was not where the money was.\n\n**What is Caveman for Claude Code?**\n\nCaveman is an open-source skill and local proxy for AI coding agents, created by Julius Brussee. The skill makes the agent answer in short, caveman-style sentences while leaving code, commands and error messages exact. Since version 4.0 it also compresses tool output before the model reads it, routes requests between models and effort levels, and reuses scripts the agent writes. It works with Claude Code, Codex, Gemini CLI, OpenCode and more than 30 other agents, and is licensed Apache-2.0.\n\n**Does the caveman skill actually save tokens?**\n\nIt shortens replies, but by less than the viral claim. On the repo's own test of ten developer questions, a plain \"Answer concisely.\" instruction cut output from 6,983 to 4,334 tokens, and /caveman cut 3% more at the median, while /ultracave cut 35% more. Because output is a small share of an agent session (one analysis of 662 Claude Code sessions put it at 0.3% of all tokens), the larger savings in Caveman 4.0 come from compressing input, where the README reports 33.2% fewer input tokens on its benchmark.\n\n**How do I install Caveman?**\n\nRun npx @caveman-ai/cli@latest for the full toolkit. It detects your agents and logins, shows what it will change, and needs Node.js 22.13 or newer. If you only want the caveman voice, run npx skills add JuliusBrussee/caveman -g instead, then type /caveman (or $caveman in Codex) if it does not start automatically. Say \"stop caveman\" to switch it off.\n\n**Does caveman mode make Claude's answers worse?**\n\nPublished outside tests have not found a measurable quality drop: JetBrains ran 86 coding tasks as a paired A/B and found no measurable quality loss (p = 0.82), and Elastic reported zero information loss in its remake. The rules keep negations, numbers, code and error messages exact, and switch back to full sentences for security warnings and irreversible actions. Caveman never rewrites your prompt, because Adobe Research found that compressing the prompt itself makes answers worse. The repo has not yet published its own reviewed quality snapshot.\n\n**Does Caveman help with GitHub Copilot or Cursor?**\n\nCaveman installs into Copilot, Cursor and many other agents, but the savings depend on billing. GitHub Copilot charges per premium request, so a shorter reply is the same request and the voice saves nothing there. The repo also records one Cursor A/B where token use rose from 1 million to 4.3 million with Caveman, which it could not reproduce but keeps listed as a warning. Its advice is to compare provider-billed totals with and without Caveman and turn it off where cost goes up.\n\n**What data does Caveman send?**\n\nThe skill sends nothing, except /caveman-compress, which sends the file you compress to your own model provider. The CLI sends usage stats by default, including commands run, token counts, a random install ID, OS and IP address, but never prompts, code or file paths; caveman telemetry off or DO_NOT_TRACK=1 disables it. Auto, once you sign in and select it, sends your latest ask and attached context to Caveman Cloud, which may keep it on the free plan; caveman off routing stops that.\n\nOriginally published on [DevPik](https://www.devpik.com/open-source/caveman).", "url": "https://wpnews.pro/news/caveman-claude-code-skill-what-it-really-saves", "canonical_source": "https://dev.to/itxtayab/caveman-claude-code-skill-what-it-really-saves-227k", "published_at": "2026-10-15 09:41:02+00:00", "updated_at": "2026-10-15 09:49:15.504474+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "large-language-models"], "entities": ["Julius Brussee", "Caveman", "Claude Code", "Codex", "Gemini CLI", "OpenCode", "GitHub", "ThePrimeagen"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/caveman-claude-code-skill-what-it-really-saves", "markdown": "https://wpnews.pro/news/caveman-claude-code-skill-what-it-really-saves.md", "text": "https://wpnews.pro/news/caveman-claude-code-skill-what-it-really-saves.txt", "jsonld": "https://wpnews.pro/news/caveman-claude-code-skill-what-it-really-saves.jsonld"}}