JuliusBrussee/caveman
tldr.page
README

caveman

why use many token when few do trick

Stars Last Commit License

Before/AfterInstallLevelsSkillsBenchmarksEvals

🪨 Caveman Ecosystem  ·  caveman talk less (you are here)  ·  cavemem remember more  ·  cavekit build better


A Claude Code skill/plugin and Codex plugin that makes agent talk like caveman — cutting ~75% of output tokens while keeping full technical accuracy. Now with 文言文 mode, terse commits, one-line code reviews, and a compression tool that cuts ~46% of input tokens every session.

Based on the viral observation that caveman-speak dramatically reduces LLM token usage without losing technical substance. So we made it a one-line install.

Before / After

🗣️ Normal Claude (69 tokens)

"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 Claude (19 tokens)

"New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo."

🗣️ Normal Claude

"Sure! I'd be happy to help you with that. The issue you're experiencing is most likely caused by your authentication middleware not properly validating the token expiry. Let me take a look and suggest a fix."

🪨 Caveman Claude

"Bug in auth middleware. Token expiry check use < not <=. Fix:"

Same fix. 75% less word. Brain still big.

Pick your level of grunt:

🪶 Lite

"Your component re-renders because you create a new object reference each render. Inline object props fail shallow comparison every time. Wrap it in useMemo."

🪨 Full

"New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo."

🔥 Ultra

"Inline obj prop → new ref → re-render. useMemo."

📜 文言文

"物出新參照,致重繪。useMemo Wrap之。"

Same answer. You pick how many word.

┌─────────────────────────────────────┐
│  TOKENS SAVED          ████████ 75% │
│  TECHNICAL ACCURACY    ████████ 100%│
│  SPEED INCREASE        ████████ ~3x │
│  VIBES                 ████████ OOG │
└─────────────────────────────────────┘
  • Faster response — less token to generate = speed go brrr
  • Easier to read — no wall of text, just the answer
  • Same accuracy — all technical info kept, only fluff removed (science say so)
  • Save money — ~71% less output token = less cost
  • Fun — every code review become comedy

Install

Pick your agent. One command. Done.

AgentInstall
Claude Codeclaude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman
CodexClone repo → /plugins → Search "Caveman" → Install
Gemini CLIgemini extensions install https://github.com/JuliusBrussee/caveman
Cursornpx skills add JuliusBrussee/caveman -a cursor
Windsurfnpx skills add JuliusBrussee/caveman -a windsurf
Copilotnpx skills add JuliusBrussee/caveman -a github-copilot
Clinenpx skills add JuliusBrussee/caveman -a cline
Any othernpx skills add JuliusBrussee/caveman

Install once. Use in every session for that install target after that. One rock. That it.

What You Get

Auto-activation is built in for Claude Code, Gemini CLI, and the repo-local Codex setup below. npx skills add installs the skill for other agents, but does not install repo rule/instruction files, so Caveman does not auto-start there unless you add the always-on snippet below.

FeatureClaude CodeCodexGemini CLICursorWindsurfClineCopilot
Caveman modeYYYYYYY
Auto-activate every sessionYY—²—²—²—²
/caveman commandYY
Mode switching (lite/full/ultra)YY
Statusline badgeY⁴
caveman-commitYYYYYY
caveman-reviewYYYYYY
caveman-compressYYYYYYY
caveman-helpYYYYYY

[!NOTE] Auto-activation works differently per agent: Claude Code uses SessionStart hooks, this repo's Codex dogfood setup uses .codex/hooks.json, Gemini uses context files. Cursor/Windsurf/Cline/Copilot can be made always-on, but npx skills add installs only the skill, not the repo rule/instruction files.

¹ Codex uses $caveman syntax, not /caveman. This repo ships .codex/hooks.json, so caveman auto-starts when you run Codex inside this repo. The installed plugin itself gives you $caveman; copy the same hook into another repo if you want always-on behavior there too. caveman-commit and caveman-review are not in the Codex plugin bundle — use the SKILL.md files directly. ² Add the "Want it always on?" snippet below to those agents' system prompt or rule file if you want session-start activation. ³ Cursor and Windsurf receive the full SKILL.md with all intensity levels. Mode switching works on-demand via the skill; no slash command. ⁴ Available in Claude Code, but plugin install only nudges setup. Standalone install.sh / install.ps1 configures it automatically when no custom statusLine exists.

Claude Code — full details

The plugin install gives you skills + auto-loading hooks. If no custom statusLine is configured, Caveman nudges Claude to offer badge setup on first session.

claude plugin marketplace add JuliusBrussee/caveman
claude plugin install caveman@caveman

Standalone hooks (without plugin): If you prefer not to use the plugin system:

# macOS / Linux / WSL
bash <(curl -s https://raw.githubusercontent.com/JuliusBrussee/caveman/main/hooks/install.sh)

# Windows (PowerShell)
irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/hooks/install.ps1 | iex

Or from a local clone: bash hooks/install.sh / powershell -File hooks\install.ps1

Uninstall: bash hooks/uninstall.sh or powershell -File hooks\uninstall.ps1

Statusline badge: Shows [CAVEMAN], [CAVEMAN:ULTRA], etc. in your Claude Code status bar.

  • Plugin install: If you do not already have a custom statusLine, Claude should offer to configure it on first session
  • Standalone install: Configured automatically by install.sh / install.ps1 unless you already have a custom statusline
  • Custom statusline: Installer leaves your existing statusline alone. See hooks/README.md for the merge snippet
Codex — full details

macOS / Linux:

  1. Clone repo → Open Codex in the repo directory → /plugins → Search "Caveman" → Install
  2. Repo-local auto-start is already wired by .codex/hooks.json + .codex/config.toml

Windows:

  1. Enable symlinks first: git config --global core.symlinks true (requires Developer Mode or admin)
  2. Clone repo → Open VS Code → Codex Settings → Plugins → find "Caveman" under local marketplace → Install → Reload Window
  3. Codex hooks are currently disabled on Windows, so use $caveman to start manually

This repo also ships .codex/hooks.json and enables hooks in .codex/config.toml, so caveman auto-activates while you run Codex inside this repo on macOS/Linux. The installed plugin gives you $caveman; if you want always-on behavior in other repos too, copy the same SessionStart hook there and enable:

[features]
codex_hooks = true
Gemini CLI — full details
gemini extensions install https://github.com/JuliusBrussee/caveman

Update: gemini extensions update caveman · Uninstall: gemini extensions uninstall caveman

Auto-activates via GEMINI.md context file. Also ships custom Gemini commands:

  • /caveman — switch intensity level (lite/full/ultra/wenyan)
  • /caveman-commit — generate terse commit message
  • /caveman-review — one-line code review
Cursor / Windsurf / Cline / Copilot — full details

npx skills add installs the skill file only — it does not install the agent's rule/instruction file, so caveman does not auto-start. For always-on, add the "Want it always on?" snippet below to your agent's rules or system prompt.

AgentCommandNot installedMode switchingAlways-on location
Cursornpx skills add JuliusBrussee/caveman -a cursor.cursor/rules/caveman.mdcYCursor rules
Windsurfnpx skills add JuliusBrussee/caveman -a windsurf.windsurf/rules/caveman.mdYWindsurf rules
Clinenpx skills add JuliusBrussee/caveman -a cline.clinerules/caveman.mdCline rules or system prompt
Copilotnpx skills add JuliusBrussee/caveman -a github-copilot.github/copilot-instructions.md + AGENTS.mdCopilot custom instructions

Uninstall: npx skills remove caveman

Copilot works with Chat, Edits, and Coding Agent.

Any other agent (opencode, Roo, Amp, Goose, Kiro, and 40+ more)

npx skills supports 40+ agents:

npx skills add JuliusBrussee/caveman           # auto-detect agent
npx skills add JuliusBrussee/caveman -a amp
npx skills add JuliusBrussee/caveman -a augment
npx skills add JuliusBrussee/caveman -a goose
npx skills add JuliusBrussee/caveman -a kiro-cli
npx skills add JuliusBrussee/caveman -a roo
# ... and many more

Uninstall: npx skills remove caveman

Windows note: npx skills uses symlinks by default. If symlinks fail, add --copy: npx skills add JuliusBrussee/caveman --copy

Important: These agents don't have a hook system, so caveman won't auto-start. Say /caveman or "talk like caveman" to activate each session.

Want it always on? Paste this into your agent's system prompt or rules file — caveman will be active from the first message, every session:

Terse like caveman. Technical substance exact. Only fluff die.
Drop: articles, filler (just/really/basically), pleasantries, hedging.
Fragments OK. Short synonyms. Code unchanged.
Pattern: [thing] [action] [reason]. [next step].
ACTIVE EVERY RESPONSE. No revert after many turns. No filler drift.
Code/commits/PRs: normal. Off: "stop caveman" / "normal mode".

Where to put it:

AgentFile
opencode.config/opencode/AGENTS.md
Roo.roo/rules/caveman.md
Ampyour workspace system prompt
Othersyour agent's system prompt or rules file

Usage

Trigger with:

  • /caveman or Codex $caveman
  • "talk like caveman"
  • "caveman mode"
  • "less tokens please"

Stop with: "stop caveman" or "normal mode"

Intensity Levels

LevelTriggerWhat it do
Lite/caveman liteDrop filler, keep grammar. Professional but no fluff
Full/caveman fullDefault caveman. Drop articles, fragments, full grunt
Ultra/caveman ultraMaximum compression. Telegraphic. Abbreviate everything

文言文 (Wenyan) Mode

Classical Chinese literary compression — same technical accuracy, but in the most token-efficient written language humans ever invented.

LevelTriggerWhat it do
Wenyan-Lite/caveman wenyan-liteSemi-classical. Grammar intact, filler gone
Wenyan-Full/caveman wenyanFull 文言文. Maximum classical terseness
Wenyan-Ultra/caveman wenyan-ultraExtreme. Ancient scholar on a budget

Level stick until you change it or session end.

Caveman Skills

caveman-commit

/caveman-commit — terse commit messages. Conventional Commits. ≤50 char subject. Why over what.

caveman-review

/caveman-review — one-line PR comments: L42: 🔴 bug: user null. Add guard. No throat-clearing.

caveman-help

/caveman-help — quick-reference card. All modes, skills, commands, one command away.

caveman-compress

/caveman:compress <filepath> — caveman make Claude speak with fewer tokens. Compress make Claude read fewer tokens.

Your CLAUDE.md loads on every session start. Caveman Compress rewrites memory files into caveman-speak so Claude reads less — without you losing the human-readable original.

/caveman:compress CLAUDE.md
CLAUDE.md          ← compressed (Claude reads this every session — fewer tokens)
CLAUDE.original.md ← human-readable backup (you read and edit this)
FileOriginalCompressedSaved
claude-md-preferences.md70628559.6%
project-notes.md114553553.3%
claude-md-project.md112263643.3%
todo-list.md62738838.1%
mixed-with-code.md88856036.9%
Average89848146%

Code blocks, URLs, file paths, commands, headings, dates, version numbers — anything technical passes through untouched. Only prose gets compressed. See the full caveman-compress README for details. Security note: Snyk flags this as High Risk due to subprocess/file patterns — it's a false positive.

Benchmarks

Real token counts from the Claude API (reproduce it yourself):

TaskNormal (tokens)Caveman (tokens)Saved
Explain React re-render bug118015987%
Fix auth middleware token expiry70412183%
Set up PostgreSQL connection pool234738084%
Explain git rebase vs merge70229258%
Refactor callback to async/await38730122%
Architecture: microservices vs monolith44631030%
Review PR for security issues67839841%
Docker multi-stage build104229072%
Debug PostgreSQL race condition120023281%
Implement React error boundary345445687%
Average121429465%

Range: 22%–87% savings across prompts.

[!IMPORTANT] Caveman only affects output tokens — thinking/reasoning tokens are untouched. Caveman no make brain smaller. Caveman make mouth smaller. Biggest win is readability and speed, cost savings are a bonus.

A March 2026 paper "Brevity Constraints Reverse Performance Hierarchies in Language Models" found that constraining large models to brief responses improved accuracy by 26 percentage points on certain benchmarks and completely reversed performance hierarchies. Verbose not always better. Sometimes less word = more correct.

Evals

Caveman not just claim 75%. Caveman prove it.

The evals/ directory has a three-arm eval harness that measures real token compression against a proper control — not just "verbose vs skill" but "terse vs skill". Because comparing caveman to verbose Claude conflate the skill with generic terseness. That cheating. Caveman not cheat.

# Run the eval (needs claude CLI)
uv run python evals/llm_run.py

# Read results (no API key, runs offline)
uv run --with tiktoken python evals/measure.py

Star This Repo

If caveman save you mass token, mass money — leave mass star. ⭐

Star History Chart

🪨 The Caveman Ecosystem

Three tools. One philosophy: agent do more with less.

RepoWhatOne-liner
caveman (you are here)Output compression skillwhy use many token when few do trick — ~75% fewer output tokens across Claude Code, Cursor, Gemini, Codex
cavememCross-agent persistent memorywhy agent forget when agent can remember — compressed SQLite + MCP, local by default
cavekitSpec-driven autonomous build loopwhy agent guess when agent can know — natural language → kits → parallel build → verified

They compose: cavekit orchestrates the build, caveman compresses what the agent says, cavemem compresses what the agent remembers. Install one, some, or all — each stands alone.

Also by Julius Brussee

  • Revu — local-first macOS study app with FSRS spaced repetition, decks, exams, and study guides. revu.cards

License

MIT — free like mass mammoth on open plain.