diff --git a/README.md b/README.md index 13a5331..b4f5b1b 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,157 @@

- + Caveman

-

caveman

-

why use many token when few do trick

+

+ Make your AI coding agent talk like a caveman.
+ Same answers, ~50–65% fewer output tokens. Brain still big. Mouth small. +

+

Stars - Last Commit + 30+ agents + Last commit License

- Before/After • - Install • - What You Get • - Benchmarks • - Full install guide + See it · + Install · + Levels · + What you get · + Benchmarks · + Ecosystem · + Caveman 2

--- -A [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill/plugin (also Codex, Gemini, Cursor, Windsurf, Cline, Copilot, 30+ more) that makes agent talk like caveman — cuts **~50–65% of output tokens, measured** (65% average vs default verbose replies, ~50% median vs a plain "answer concisely" baseline — real Claude API token counts, see [Benchmarks](#benchmarks)), keeps full technical accuracy. Brain still big. Mouth small. - -> **Honest number warning:** caveman shrink **output** tokens only. Input tokens untouched by skill — whole-session savings smaller than the output number, and on terse tasks can be negative. Full truth: [docs/HONEST-NUMBERS.md](./docs/HONEST-NUMBERS.md). +Caveman is a skill/plugin for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Codex, Gemini, Cursor, Windsurf, Cline, Copilot, and 30+ other agents. Install once. Agent drops the filler and answers in tight caveman-speak, keeping code, commands, and errors byte-for-byte exact. You save output tokens on every reply, forever. ## Before / After - + + + + - - -
+🗣️ Normal agent — 69 tokens Caveman agent — 19 tokens
-### 🗣️ 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." +> 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. + -### rock Caveman Claude (19 tokens) - -> "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`." +> 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." +> 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. + -### rock Caveman Claude - -> "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:" +> Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:
-**Same fix. Half the word — sometimes way less. Brain still big.** +Same fix. Third of the words. Nothing technical lost. ``` -┌──────────────────────────────────────┐ -│ OUTPUT TOKENS SAVED █████ 50-65% │ -│ INPUT TOKENS SAVED ─ 0% │ -│ TECHNICAL ACCURACY ████████ 100% │ -│ VIBES ████████ OOG │ -└──────────────────────────────────────┘ +┌────────────────────────────────────────────┐ +│ output tokens saved █████████ 50–65% │ +│ input tokens saved ░░░░░░░░░ 0% │ +│ technical accuracy █████████ 100% │ +│ vibes █████████ OOG │ +└────────────────────────────────────────────┘ ``` -Pick your level of grunt — `lite` (drop filler), `full` (default caveman), `ultra` (telegraphic), or `wenyan` (classical Chinese, even shorter). One command switch. Cost go down forever. - -**Speak your tongue.** Caveman keep your language. You write Portuguese, caveman grunt Portuguese. Spanish, French, same. Compress the *style*, not the language. Code, command, error string stay exact. - -> "Novo ref de objeto cada render. Prop inline = novo ref = re-render. Envolva com `useMemo`." - - - -
- -### rock Like this trick? Now get whole agent — **caveman-code** - -This skill shrink what agent **say**. **[caveman-code](https://github.com/JuliusBrussee/caveman-code)** shrink **everything** — full terminal coding agent, caveman top to bottom. **~2× fewer tokens than Codex** on identical tasks. 20+ providers · plan mode · autopilot goal loop · MIT. - -```bash -npm install -g @juliusbrussee/caveman-code -``` - -[**▶ Try caveman-code now →**](https://github.com/JuliusBrussee/caveman-code) — *why use many token when whole agent save* - -
+Caveman no make brain smaller. Caveman make *mouth* smaller. Shrinks what the agent **says**, not what it knows. ## Install -One line. Find every agent. Install for each. +**One command. Finds every agent on your machine. Installs for each.** ```bash -# macOS / Linux / WSL / Git Bash +# macOS · Linux · WSL · Git Bash curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash +``` -# Windows (PowerShell 5.1+) +```powershell +# Windows · PowerShell 5.1+ irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex ``` -~30 seconds. Needs Node ≥18. Skip agent you no have. Safe to re-run. +~30 seconds. Needs Node ≥18. Skips agents you no have. Safe to re-run. -**Trigger:** type `/caveman` or say "talk like caveman". Stop with "normal mode". +> [!TIP] +> **Turn it on:** type `/caveman` or say *"talk like caveman"*. **Turn it off:** say *"normal mode"*. On Claude Code, Codex, and Gemini it's already on from message one. No command needed. -One agent only, manual command, or any of 30+ other agents → [**INSTALL.md**](./INSTALL.md). -Install break? Open agent, say *"Read CLAUDE.md and INSTALL.md, install caveman for me."* Agent fix own brain. +
+Install for one agent, or any of 30+ others -## What You Get +
-| Skill | What | +Every agent has its own path (plugin, extension, rule file, or `npx skills add`). The full per-agent matrix, all flags, dry-run, and uninstall live in **[INSTALL.md](./INSTALL.md)**. A few common ones: + +```bash +# Claude Code plugin +claude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman + +# Gemini CLI extension +gemini extensions install https://github.com/JuliusBrussee/caveman + +# Cursor / Windsurf / Cline / Codex / 30+ more, via the skills registry +npx skills add JuliusBrussee/caveman -a cursor +``` + +**Install broke?** Open your agent in this repo and say: *"Read CLAUDE.md and INSTALL.md, install caveman for me."* Agent read repo, agent fix own brain. Snake eat tail. + +
+ +## Pick your grunt + +Six levels. Switch anytime with `/caveman `. Level sticks until you change it or the session ends. + +| Level | Same sentence, shrunk | |---|---| -| `/caveman [lite\|full\|ultra\|wenyan]` | Compress every reply. Levels stick until session end. | -| `/caveman-commit` | Conventional Commit messages, ≤50 char subject. Why over what. | +| *normal agent* | You should wrap the object in `useMemo`, since a new reference is created on every render. | +| `lite` | Wrap object in `useMemo`. New ref created every render. | +| `full` *(default)* | New ref each render. Wrap object in `useMemo`. | +| `ultra` | New ref/render. `useMemo` it. | +| `wenyan` | New ref every render, so wrap in `useMemo` — rendered in classical Chinese, shorter still. | + +> [!NOTE] +> **Speak your tongue.** Caveman keeps your language. Write Portuguese, caveman grunt Portuguese. Spanish, French, same. It compresses the *style*, never translates. `wenyan` mode is the exception on purpose: classical Chinese packs the most meaning per token. + +## What you get + +| Command | What it does | +|---|---| +| `/caveman [lite\|full\|ultra\|wenyan]` | Compress every reply. Level sticks for the session. | +| `/caveman-commit` | Conventional Commit messages, ≤50-char subject. Why over what. | | `/caveman-review` | One-line PR comments: `L42: 🔴 bug: user null. Add guard.` | -| `/caveman-stats` | Real session token usage + lifetime savings + USD. Tweetable line via `--share`. | -| `/caveman-compress ` | Rewrite memory file (e.g. `CLAUDE.md`) into caveman-speak. Cuts ~46% input tokens every session. Code/URLs/paths byte-preserved. | -| `caveman-shrink` | MCP middleware. Wraps any MCP server, compresses tool descriptions. [npm](https://www.npmjs.com/package/caveman-shrink). | -| `cavecrew-*` | Caveman subagents (investigator/builder/reviewer). ~60% fewer tokens than vanilla, main context lasts longer. | +| `/caveman-stats` | Real session token usage, lifetime savings, USD. Tweetable line with `--share`. | +| `/caveman-compress ` | Rewrite a memory file (like `CLAUDE.md`) into caveman-speak. Cuts ~46% input tokens **every session after**. Code, URLs, paths byte-preserved. | +| `caveman-shrink` | MCP middleware. Wraps any MCP server, compresses its tool descriptions. [npm](https://www.npmjs.com/package/caveman-shrink). | +| `cavecrew-*` | Caveman subagents (investigator, builder, reviewer). ~60% fewer tokens than vanilla, so main context lasts longer. | -**Statusline badge** — Claude Code shows `[CAVEMAN] ⛏ 12.4k` (lifetime tokens saved). Updates every `/caveman-stats` run. Set `CAVEMAN_STATUSLINE_SAVINGS=0` to silence. - -Auto-activate every session: Claude Code, Codex, Gemini (built-in). Cursor / Windsurf / Cline / Copilot get always-on rule files via `--with-init`. Other agents trigger with `/caveman` per session. Full feature matrix in [INSTALL.md](./INSTALL.md#what-you-get). +> [!TIP] +> On Claude Code the statusline shows `[CAVEMAN] ⛏ 12.4k` — that's your lifetime tokens saved, updated on every `/caveman-stats`. Silence it with `CAVEMAN_STATUSLINE_SAVINGS=0`. ## Benchmarks -Real token counts from the Claude API. Average **65% output reduction** across 10 prompts (range 22-87%) — measured against default (verbose) replies. Against a plain `Answer concisely.` control the median is **~50%** (committed eval snapshot in [`evals/`](./evals/), tiktoken `o200k_base`). Both numbers are output tokens only. +Real token counts from the Claude API. Average **65% output reduction** across 10 prompts (range 22–87%), measured against default verbose replies. Against a plain `Answer concisely.` control, the median is **~50%**. Both are output tokens only, and both are committed and reproducible in [`benchmarks/`](./benchmarks/) and [`evals/`](./evals/). | Task | Normal | Caveman | Saved | @@ -153,9 +169,15 @@ Real token counts from the Claude API. Average **65% output reduction** across 1 | **Average** | **1214** | **294** | **65%** | -Raw data and reproduction script: [`benchmarks/`](./benchmarks/). Three-arm eval harness (baseline / terse / skill) lives in [`evals/`](./evals/) — caveman compared against `Answer concisely.` not against verbose default, so the delta is honest. +> [!IMPORTANT] +> **Honest number warning.** Caveman only shrinks **output** tokens. Input and reasoning tokens are untouched, and the skill itself adds ~1–1.5k input tokens per turn. So whole-session savings run smaller than the output number, and on already-terse workloads they can go net-negative. The real win is **readability and speed**. Cost savings are the bonus. When caveman wins, when it loses, and how to measure it yourself: **[docs/HONEST-NUMBERS.md](./docs/HONEST-NUMBERS.md)**. -**caveman-compress receipts** (real memory files): +Turns out short isn't just cheaper. A March 2026 paper, [*Brevity Constraints Reverse Performance Hierarchies in Language Models*](https://arxiv.org/abs/2604.00025), tested 31 models and found that constraining large models to brief answers **improved accuracy by ~26 points** on some benchmarks. Sometimes less word = more correct. + +
+caveman-compress receipts — real memory files, cutting input tokens forever + +
| File | Original | Compressed | Saved | |---|---:|---:|---:| @@ -166,121 +188,107 @@ Raw data and reproduction script: [`benchmarks/`](./benchmarks/). Three-arm eval | `mixed-with-code.md` | 888 | 560 | **36.9%** | | **Average** | **898** | **481** | **46%** | -> [!IMPORTANT] -> Caveman only affects output tokens — input and thinking/reasoning tokens untouched. The skill itself adds ~1–1.5k input tokens per turn (the rules block), so whole-session savings are smaller than the output number, and terse workloads can come out net-negative. Caveman no make brain smaller. Caveman make *mouth* smaller. Biggest win is **readability and speed**, cost savings a bonus. When caveman wins, when caveman loses, how to measure yourself: [docs/HONEST-NUMBERS.md](./docs/HONEST-NUMBERS.md). +Every session after, that file loads ~46% smaller. Input tokens saved forever, not just one reply. -A March 2026 paper ["Brevity Constraints Reverse Performance Hierarchies in Language Models"](https://arxiv.org/abs/2604.00025) found that constraining large models to brief responses **improved accuracy by 26 points** on certain benchmarks. Verbose not always better. Sometimes less word = more correct. +
-## How It Work +## The whole cave -1. Install drop skill file in agent. -2. Skill tell agent: drop filler, keep substance, use fragments. -3. For Claude Code, hook also write tiny flag file each session — agent see flag, talk caveman from message one. No need say `/caveman`. -4. Stats command read Claude Code session log, count tokens saved, write number to statusline. -5. Caveman-compress sub-skill rewrite memory files (CLAUDE.md, project notes) so each session start with smaller context. Save tokens forever, not just one reply. + + +
-Maintainer detail (hook architecture, file ownership, CI sync) live in [CLAUDE.md](./CLAUDE.md). +### Want the whole agent, not just its mouth? → caveman-code -## Lobster, Meet Rock 🦞 rock - -[**OpenClaw**](https://openclaw.ai) the self-host gateway. One box, many agent inside (Claude Code, Codex, Pi, OpenCode), wired to your Slack / Discord / iMessage / Telegram / whatever. Tagline: *"The lobster way."* Lobster strong. Lobster smart. Lobster also talk a lot. - -Caveman teach lobster brevity — same canonical installer, scoped to one agent: +This skill shrinks what an agent **says**. **[caveman-code](https://github.com/JuliusBrussee/caveman-code)** shrinks **everything** — a full terminal coding agent, caveman top to bottom. **~2× fewer tokens than Codex** on identical tasks. 20+ providers, plan mode, autopilot goal loop, MIT. ```bash -# macOS / Linux / WSL -curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash -s -- --only openclaw - -# Windows (PowerShell): no Node? install Node ≥18 first, then -npx -y github:JuliusBrussee/caveman -- --only openclaw +npm install -g @juliusbrussee/caveman-code ``` -Two thing happen, no more: +[**▶ Try caveman-code →**](https://github.com/JuliusBrussee/caveman-code) -1. **Skill drop** at `~/.openclaw/workspace/skills/caveman/SKILL.md` — spec-correct frontmatter (`version`, `always: true`), discoverable by `openclaw skills list`. Skill not auto-inject (OpenClaw load skill on demand) — that why we also do step 2. -2. **SOUL.md nudge.** Tiny marker-fenced block appended to `~/.openclaw/workspace/SOUL.md`. OpenClaw inject SOUL.md into *every* turn under "Project Context" (12K-per-file, 60K total — block well under). Lobster terse from message one. No `/caveman` per session. No nag. +
-``` -~/.openclaw/workspace/ -├── skills/caveman/SKILL.md ← full ruleset, on-demand load -└── SOUL.md ← ... - ↑ auto-inject every turn -``` +Five tools, one idea: **agent do more with less.** -Custom workspace path? `OPENCLAW_WORKSPACE=/your/path` before the command. Uninstall: same one-liner with `--uninstall` — skill folder gone, SOUL.md block ripped out cleanly, your other workspace content stay untouched. Idempotent re-runs (frontmatter not double-prepended, marker block not duplicated). - -Lobster claw still sharp. Lobster mouth now small. Brain still big. - -## Caveman Ecosystem - -Five tools. One philosophy: **agent do more with less**. - -| Repo | What | +| Repo | What it shrinks | |------|------| -| [**caveman**](https://github.com/JuliusBrussee/caveman) *(you here)* | Output compression — *why use many token when few do trick* | -| [**caveman-code**](https://github.com/JuliusBrussee/caveman-code) | Whole terminal coding agent — *why use many token when whole agent can save* | -| [**cavemem**](https://github.com/JuliusBrussee/cavemem) | Cross-agent memory — *why agent forget when agent can remember* | -| [**cavekit**](https://github.com/JuliusBrussee/cavekit) | Spec-driven build loop — *why agent guess when agent can know* | -| [**cavegemma**](https://github.com/JuliusBrussee/finetune-caveman) | Gemma 4 31B fine-tuned on caveman pairs — *why prompt every turn when weight remember* | +| [**caveman**](https://github.com/JuliusBrussee/caveman) *(you here)* | What the agent **says** | +| [**caveman-code**](https://github.com/JuliusBrussee/caveman-code) | The **whole agent**, end to end | +| [**cavemem**](https://github.com/JuliusBrussee/cavemem) | What the agent **remembers**, across sessions | +| [**cavekit**](https://github.com/JuliusBrussee/cavekit) | The **build loop** — spec-driven, no guessing | +| [**cavegemma**](https://github.com/JuliusBrussee/finetune-caveman) | The compression **baked into weights** (Gemma fine-tune) | -Compose: cavekit drive build, caveman compress what agent *say*, cavemem compress what agent *remember*, cavegemma bake compression into weight, caveman-code ship it all as one terminal agent. One rock. Two rock. Three rock. Four rock. Five rock. That it. +
+Also: five sibling skills, one install -## More Skill From Same Cave +
-Caveman has siblings. [**JuliusBrussee/skills**](https://github.com/JuliusBrussee/skills) — five skills, one install, works in Claude Code, Cursor, Gemini, Cline, Copilot, 40+ agents: +[**JuliusBrussee/skills**](https://github.com/JuliusBrussee/skills) — works in Claude Code, Cursor, Gemini, Cline, Copilot, 40+ agents: | Skill | What | |------|------| | [**caveman**](https://github.com/JuliusBrussee/skills/tree/main/skills/caveman) | This one. Speak less, say more. | -| [**grill-me**](https://github.com/JuliusBrussee/skills/tree/main/skills/grill-me) | Agent grill your plan *before* you build wrong thing. Checks how much you know first — no condescend, no coddle. | -| [**interface-kit**](https://github.com/JuliusBrussee/skills/tree/main/skills/interface-kit) | Build UI that look good, load fast, work for everyone. | -| [**junior-to-senior**](https://github.com/JuliusBrussee/skills/tree/main/skills/junior-to-senior) | Adversarial review pass. Junior output go in, senior output come out. | -| [**loop-factory**](https://github.com/JuliusBrussee/skills/tree/main/skills/loop-factory) | Spec-driven task loop — inbox → active → archive, review gate between. | +| [**grill-me**](https://github.com/JuliusBrussee/skills/tree/main/skills/grill-me) | Agent grills your plan *before* you build the wrong thing. | +| [**interface-kit**](https://github.com/JuliusBrussee/skills/tree/main/skills/interface-kit) | Build UI that looks good, loads fast, works for everyone. | +| [**junior-to-senior**](https://github.com/JuliusBrussee/skills/tree/main/skills/junior-to-senior) | Adversarial review pass. Junior output in, senior output out. | +| [**loop-factory**](https://github.com/JuliusBrussee/skills/tree/main/skills/loop-factory) | Spec-driven task loop — inbox → active → archive. | ```bash npx skills@latest add JuliusBrussee/skills ``` -One command. Five skill. Cave well stocked. +
+ +
+🦞 Teach the lobster brevity — OpenClaw integration + +
+ +[**OpenClaw**](https://openclaw.ai) is a self-host gateway: one box, many agents inside, wired to Slack / Discord / iMessage / Telegram. Lobster strong. Lobster smart. Lobster also talk a lot. + +Same installer, scoped to one agent: + +```bash +curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash -s -- --only openclaw +``` + +Two things happen, no more: a caveman skill lands in the workspace, and a tiny marker-fenced block is appended to `SOUL.md` (OpenClaw injects it every turn, so the lobster is terse from message one — no `/caveman` per session). Custom path? `OPENCLAW_WORKSPACE=/your/path`. Uninstall with the same line plus `--uninstall`; your other workspace content stays untouched. Lobster claw still sharp. Lobster mouth now small. + +
+ +## Caveman 2 + +**Caveman make token small. Caveman 2 make it _provable_.** + +Today's savings numbers (including `/caveman-stats`) are local estimates. Caveman 2 measures and verifies them across a whole team — real receipts, real dashboard, real proof the tokens went down. Building it now. + +[**Join the waitlist → caveman.so**](https://caveman.so) + +## How it works + +1. Install drops a skill file into your agent. +2. Skill tells agent: drop filler, keep substance, use fragments — but never touch code, commands, or errors. +3. On Claude Code, a hook writes a tiny flag file each session, so the agent talks caveman from message one without `/caveman`. +4. `/caveman-stats` reads your session log, counts tokens saved, writes the number to your statusline. +5. `/caveman-compress` rewrites memory files (like `CLAUDE.md`) so every future session starts with a smaller context. Save tokens forever, not just once. + +Hook architecture, file ownership, and CI sync are documented for maintainers in [CLAUDE.md](./CLAUDE.md). ## Privacy -Caveman no phone home. No telemetry, no analytics, no accounts, no backend. After install, zero network calls — skill is a prompt, hooks are local scripts, `/caveman-stats` reads your session log on your disk. Install-time fetches (GitHub + your agents' own registries) and scanner-warning explanations: [SECURITY.md](./SECURITY.md#privacy--telemetry). - -## Links - -- [docs/HONEST-NUMBERS.md](./docs/HONEST-NUMBERS.md) — when caveman saves, when caveman costs, how to measure -- [INSTALL.md](./INSTALL.md) — full install matrix, all flags, per-agent detail -- [CONTRIBUTING.md](./CONTRIBUTING.md) — how to send patch -- [CLAUDE.md](./CLAUDE.md) — maintainer guide (file ownership, hook architecture, CI) -- [docs/](./docs/) — extra guides (Windows install, etc.) -- [Issues](https://github.com/JuliusBrussee/caveman/issues) — bug, feature, weird behavior - -## Caveman 2 (coming soon) - -**caveman make tokens small. caveman 2 will prove it.** - -Local savings numbers (including `/caveman-stats`) are estimates. Caveman 2 will measure and verify them across a team — [join the waitlist](https://caveman.so). - -## Star This Repo - -Caveman save you token, save you money. Star cost zero. Fair trade. ⭐ - -[![Star History Chart](https://api.star-history.com/svg?repos=JuliusBrussee/caveman&type=Date)](https://star-history.com/#JuliusBrussee/caveman&Date) - -## Also by Julius Brussee - -- **[Revu](https://github.com/JuliusBrussee/revu-swift)** — local-first macOS study app with FSRS spaced repetition. [revu.cards](https://revu.cards) +Caveman no phone home. No telemetry, no analytics, no accounts, no backend. After install, zero network calls — the skill is a prompt, the hooks are local scripts, and `/caveman-stats` reads a log already on your disk. Install-time fetches (GitHub plus your agents' own registries) are spelled out in [SECURITY.md](./SECURITY.md#privacy--telemetry). ## Sponsors -caveman free forever. Sponsor keep rock sharp. +Caveman free forever. Sponsors keep the rock sharp.

- Atlas Cloud + Atlas Cloud

@@ -289,8 +297,28 @@ caveman free forever. Sponsor keep rock sharp. Atlas Cloud — full-modal AI inference platform, one API.

-Want rock here too? [Sponsor caveman](https://github.com/sponsors/JuliusBrussee). +

+ Want your rock here? → Sponsor caveman +

-## License +## Star this repo +Caveman save you token, save you money. Star cost zero. Fair trade. ⭐ + +[![Star History Chart](https://api.star-history.com/svg?repos=JuliusBrussee/caveman&type=Date)](https://star-history.com/#JuliusBrussee/caveman&Date) + +--- + + +Docs: +Install matrix · +Honest numbers · +Contributing · +Maintainer guide · +Issues +
+Also by Julius Brussee: +Revu — local-first macOS study app with FSRS spaced repetition (revu.cards) +

MIT — free like mass mammoth on open plain. +
diff --git a/docs/assets/caveman-logo-banner.png b/docs/assets/caveman-logo-banner.png new file mode 100644 index 0000000..704b6b8 Binary files /dev/null and b/docs/assets/caveman-logo-banner.png differ diff --git a/skills/caveman/SKILL.md b/skills/caveman/SKILL.md index 3c246e8..d5e5741 100644 --- a/skills/caveman/SKILL.md +++ b/skills/caveman/SKILL.md @@ -18,7 +18,7 @@ Default: **full**. Switch: `/caveman lite|full|ultra`. ## Rules -Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked — quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations reader can't decode. Technical terms exact. Code blocks unchanged. Errors quoted exact. +Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked — quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations (cfg/impl/req/res/fn) — tokenizer split them same as full word: zero token saved, reader still decode. Full word cheaper AND clearer. No causal arrows (→) either — own token, save nothing. Technical terms exact. Code blocks unchanged. Errors quoted exact. Preserve user's dominant language. User write Portuguese → reply Portuguese caveman. User write Spanish → reply Spanish caveman. Compress the style, not the language. No forced English openings or status phrases. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim — unless user explicitly ask for translation. @@ -35,7 +35,7 @@ Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:" |-------|------------| | **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight | | **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations | -| **ultra** | Abbreviate prose words (DB/auth/config/req/res/fn/impl) — prose words only, never real code symbols/function names. Strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols, function names, API names, error strings: never abbreviate | +| **ultra** | Strip conjunctions when cause-then-effect stay unambiguous. One word when one word enough. State each fact once. NO prose abbreviations (cfg/impl/req/res/fn/auth), NO arrows (X → Y) — measured zero token saving under tokenizer, cost decode clarity. Code symbols, function names, API names, error strings: never touch | | **wenyan-lite** | Semi-classical. Drop filler/hedging but keep grammar structure, classical register | | **wenyan-full** | Maximum classical terseness. Fully 文言文. 80-90% character reduction. Classical sentence patterns, verbs precede objects, subjects often omitted, classical particles (之/乃/為/其) | | **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse | @@ -43,17 +43,17 @@ Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:" Example — "Why React component re-render?" - lite: "Your component re-renders because you create a new object reference each render. 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`." +- ultra: "Inline obj prop, new ref, re-render. `useMemo`." - wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。" - wenyan-full: "每繪新生對象參照,故重繪;以 useMemo 包之則免。" -- wenyan-ultra: "新參照→重繪。useMemo Wrap。" +- wenyan-ultra: "新參照則重繪。useMemo 包之。" Example — "Explain database connection pooling." - lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead." - full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead." -- ultra: "Pool = reuse DB conn. Skip handshake → fast under load." -- wenyan-full: "池reuse open connection。不每req新開。skip handshake overhead。" -- wenyan-ultra: "池reuse conn。skip handshake → fast。" +- ultra: "Pool reuse open DB connections. No per-request handshake." +- wenyan-full: "池蓄已開之連,不逐請而新開,省握手之費。" +- wenyan-ultra: "池蓄連,免逐請新開,省握手。" ## Auto-Clarity