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.
New object ref each render, so React re-renders. Wrap the prop in useMemo.
Same fix. 63 token become 20. Brain still big.
Pick your club:
Skill
Same answer
Tokens
/caveman
New object ref each render, so React re-renders. Wrap the prop in useMemo.
20
/ultracave
Inline object prop, new ref, re-render. useMemo.
14
/megacave
新參照致重繪。useMemo。
13
Token counts: tiktoken o200k.
Install
npx @caveman-ai/cli@latest
One command. Mac, Linux, Windows. Caveman find your agents and your logins, show what it change. Press Enter. Done. Needs Node.js 22.13+.
After that, plain claude stays caveman'd. So do Codex, Gemini CLI, OpenCode, and 30+ more. It runs on your machine, with your keys and your Claude Pro/Max login. One rock. That it.
Had caveman before 4.0? Say @latest, or the old copy on your machine wins. Already set up? caveman setup opens the screen again. Only want shorter answers? Get just the skill.
Six rocks, one install
New in 4.0: caveman is six parts. All on after install. Each has its own switch.
No measurable quality loss (p = 0.82). 8.5% fewer output tokens
Two findings shaped caveman. Adobe: cavemanning your prompt makes answers worse, so caveman never touches your prompt. JetBrains: agent sessions are mostly code and tool calls, which the voice leaves alone. So caveman grew rocks that shrink what the agent reads and what it runs on.
Say less: the caveman voice
A voice, not broken grammar. Every reply follows the same structure.
Rule
What it means
Answer first
[thing] [action] [reason]. [next step]. No greeting, no "let me", no recap
One idea per sentence
Built on ASD-STE100, the controlled English of aircraft maintenance manuals: 20 words max, active voice, one term per thing
Meaning never dropped
Articles can go. not, never, no, only never go. Numbers and units stay exact
Payload verbatim
Code, commands, paths, and error messages untouched, character for character
No theater
No "me think". No chatter between tool calls. If caveman phrasing isn't shorter, plain wins
Knows when to stop
Security warnings, irreversible actions, and confused users get full sentences. Then grunt resumes
"Be concise" is the real baseline; new models already know it. On top of it, /caveman cuts 3% more at the median and /ultracave 35% more. Measured on the 3.1.0 rules, not yet re-run. The rules cost about 1,160 tokens of input, and if you pay per request (GitHub Copilot), shorter answers save nothing. Harness · Every case where caveman loses
Only want this rock? The skill alone, no proxy:
npx skills add JuliusBrussee/caveman -g
Type /caveman ($caveman in Codex) if it doesn't start on its own. Say stop caveman to go back.
Other ways in: Claude app and phone, Claude Code plugin, Gemini, every agent at once, Windows, uninstall
Claude on the web, the phone app, or Cowork? No terminal. Add caveman to your Claude account once, in Customize > Plugins: steps. Not tested end to end yet.
# Claude Code plugin, auto-starts every interactive session, subagents too
claude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman
# Gemini CLI
gemini extensions install https://github.com/JuliusBrussee/caveman
# Every agent on your machine at once, plus the Claude Code statusline badge (Node.js 22.13+)
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/v4.0.1/install.sh | bash
Already inside Claude Code? Same rock, slash form. Type these where you talk to Claude:
On npm 12 or newer, new npm block git install. One-liners above handle it themselves from v3.2.0 on. Old one-liner pinned to v3.1.0 or older still fail there: use one above, or this:
npx --allow-git=root -y github:JuliusBrussee/caveman#v4.0.1
Changed your mind: npx -y github:JuliusBrussee/caveman -- --uninstall (on npm 12+, add --allow-git=root too)
Only grabbed the skill? npx skills remove JuliusBrussee/caveman -g take it back out.
Install broke? Open your agent in this repo and say "Read CLAUDE.md and INSTALL.md, install caveman for me." Agent fix own brain.
Read less: 33.2% fewer input tokens
The voice shrinks what the agent says. This shrinks what it reads. Same answers: 18 of 18 right.
File type
The file, through caveman
File saved
Whole Claude Code session, 3 runs
Session saved
CSV
28,041 → 314
98.9%
165,823 → 74,484
55.1%
Logs
22,810 → 348
98.5%
148,807 → 74,068
50.2%
YAML
20,447 → 178
99.1%
132,124 → 71,027
46.2%
Test output
18,806 → 203
98.9%
150,377 → 108,514
27.8%
JSON
18,837 → 281
98.5%
147,975 → 108,939
26.4%
HTML
21,670 → 21,670
none yet
140,687 → 154,641
9.9% worse
All six
130,611 → 22,994
82.4%
885,793 → 591,673
33.2%
The file is each test file through today's compressor alone. The session is the whole agent run, which also carries the system prompt and tools, so it moves less. Honest part: the session run is from August 2026 on an older engine, HTML has no compressor yet so it lost, and each test file hides one record in 61 to 72 KB of noise. Yours will vary. Headroom on the same suite: 15 of 18 right, 6.7% fewer tokens. Method
Every original stays on your disk. The agent can pull it back any time.
Auto: 54% cheaper, same score
New model in your agent's picker. Pick Auto and caveman chooses the model and the effort for each ask. Hard ask, big brain. Easy ask, save rocks.
Setup
Tasks solved
Cost per try
Median time
Opus 5.5, xhigh effort, every ask
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
Auto costs 0.46× what Opus 5.5 at xhigh costs. That is 54% saved, in under half the time. 85 real coding tasks from SWE-Interact and SWE-Together, one try each. Honest part: the run is half done, the 0.5-point score gap is too small to tell apart at this size (±7), and most of the saving is Auto lowering effort on easy asks. Already on Opus at medium? Expect less; not measured yet. Full table and limits
caveman login # free account. Auto shows up in the model picker
caveman providers add openai # optional: give Auto more models, on your own key
Works in Claude Code, OpenCode, and Codex on a ChatGPT login, with API keys, Claude Pro/Max, or ChatGPT. Any other model you pick runs as picked. Not signed in: no Auto, nothing sent. What Auto sends
Blocks: code mode, script written once
skills.sh for code mode. Code mode is the agent writing a script instead of making tool call after tool call (Cloudflare, Anthropic). Problem: agent write same script every session, throw it away, write it again. Blocks keep it in your repo, check it every pull request, hand it back.
Input
Raw
What agents type now
Block
go test -v ./..., 326 tests
10,561
397 · | 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
Tokens the agent reads back. In one week, agents on one machine wrote the same script 394 times. Purdue measured the habit at up to 9.57% of task cost. grep-defs loses to a bare grep; row stays. Method
Comes with caveman. Eight blocks ready: json-peek · jsonl-stats · test-summary · first-error · wait-for · grep-defs · http-json · replace-in-file. When the agent starts typing a script a block already covers, it gets one line: use the block. Never denies or rewrites a command.
caveman-blocks scan # what your agents retyped this month. Script text never leaves your machine
caveman-blocks init # rules and block index into this repo's AGENTS.md
Pre-release (v0.1.0-rc.5). Python only, no sandbox yet. Own repo, own stars: caveman-ai/blocks
Smaller rocks
Rock
What it does
Measured
caveman learn
Ranks where your tokens go, from agent history already on disk. caveman learn implement applies fixes one diff at a time, only on your yes
Not yet
Warm cache · new
Step away and the provider forgets your session, so the next ask pays full price. Caveman keeps Anthropic's prompt cache warm while you pause, only when your own history says you come back in time. Every warm is listed in caveman stats
Not yet
caveman browse <url>
A compressed web page for the agent
121 tokens instead of 15,704 for a Playwright snapshot of a 200-row table. Tiny forms lose 2.3×. Bench
/caveman-compress <file>
Shrinks memory files like CLAUDE.md, keeps a backup
4,138 tokens instead of 6,198 across five files, 22.8% to 49.1% each, every heading, code block, and path intact. Bench
caveman claude # start an agent on caveman: codex · gemini · opencode · aider · kilo · qwen · hermes · openclaw · pi
caveman status # what is on, which agents it reaches, one next step
caveman on browse # switch one rock on or off: output · input · waste-fixes · routing · scripts · browse
caveman login # free account, turns on Auto
caveman learn # where your tokens go
caveman trial -- claude # A/B a real session on your own work
caveman shrink -- pnpm test# compress noisy command output
caveman convert --dry-run # pixel mode: skills the model reads as images
caveman stats # your token history
caveman doctor # one problem per line, with its fix
In your agent:
Command
What it does
/caveman · /ultracave · /megacave
The voice, the grunt, the 文言文. /caveman status shows the mode, /caveman off stops it
/caveman-commit
One-line Conventional Commit
/caveman-review
One finding per line: L42: 🔴 null deref. Guard it.
/caveman-compress <file>
Shrinks memory files and backs up the original
/caveman-stats
Real token usage for this Claude Code session
/caveman-help
Every mode and command on one screen
cavecrew
Subagents that find, edit, and review code, then report back in caveman
GitHub Trending #1 overall, July 2026 · Trendshift #1 repo of the day, April 2026 · Product Hunt #8 of the day
Started as a joke in April 2026. Now past 100,000 stars. Joke got serious. Voice did not.
Privacy
The skill runs on your machine and sends nothing. One exception: /caveman-compress sends the file you compress to your configured model provider.
The CLI sends usage stats by default: commands run, token counts, caveman-blocks commands and usage counts, a random install ID, OS, and IP. Never your prompts, code, file paths, or scripts you wrote. One person maintains this for free, and those stats show what to build next. Off for good, Blocks included: caveman telemetry off or DO_NOT_TRACK=1.
Auto, only once you sign in and pick it: each ask sends Caveman Cloud your latest ask (with whatever your agent attaches to it, such as CLAUDE.md, memory or @-mentioned files), the one before it, and the end of the agent's last reply, plus each request's tool names, effort, a few agent headers, and the previous request's token counts. On the Free plan Caveman may keep it to improve routing. caveman off routing stops it.
Where requests go: from your machine to your provider, or to another provider you added with caveman providers add, on your own key. Only a request routed to a Caveman Cloud model passes through Caveman Cloud, whole (system prompt, tool results, code), on your Caveman project's stored key, billed to that project. caveman providers cloud off stops that.
The full list, and how to delete sent telemetry: SECURITY.md.
License
Apache-2.0, whole repo. Read it, fork it, ship it, host it. Free like mammoth on open plain. Older releases and third-party notices: LICENSING.md. "Caveman" and the rock logo are trademarks of Julius Brussee.
Cite
@software{brussee2026caveman,
author = {Brussee, Julius},
title = {Caveman: why many token when few do trick},
year = {2026},
url = {https://github.com/JuliusBrussee/caveman}
}
🪨 Caveman save you token. Star cost zero. Fair trade.