caveman · juliusbrussee — Claude Code skill: compress SPEC.md by ~75%
A skill that rewrites SPEC.md and spec-adjacent notes in telegraphic caveman style. It cuts roughly 75% of the tokens prose would take.
npx skills add JuliusBrussee/cavekit --skill caveman -a claude-codeWhat caveman does
The skill fires on any write to SPEC.md or spec-referencing text, backprop entries included. It also triggers on the words "caveman", "compress this" and "be brief". The /spec, /build and /check commands load it.
Inside are a grammar and a symbol table. Articles go, along with filler like "just" and "basically", auxiliary verbs, pleasantries and hedging. Symbols replace words: → for leads-to, ∀ for every, ! for required, ⊥ for forbidden. Invariants read as V1: ∀ req → auth check before handler, bugs and tasks become pipe tables, interfaces collapse to api: POST /x → 200 {id:string}.
Code, paths, URLs, identifiers, versions, error strings, SQL, regex, JSON and YAML are never compressed. For external review docs, commit messages and diff comments the skill steps aside and returns normal English. If cutting a word loses a fact, the word stays. Compression, not amputation.
What it helps with
- fit a spec into context without dropping facts
- write invariants as short lines instead of paragraphs
- keep bugs and tasks in tables that cite invariants
- describe an endpoint in a single line
- shorten spec-adjacent prose on a "be brief" request
Example prompts for the agent
- rewrite SPEC.md in caveman
- compress this: the auth section
- be brief, add an invariant for token expiry
How to install caveman
1Skills CLI (Vercel)
npx skills add JuliusBrussee/cavekit --skill caveman -a claude-code2Manually: put the files in place
~/.claude/skills/caveman/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/caveman/
1Skills CLI (Vercel)
npx skills add JuliusBrussee/cavekit --skill caveman -a codex2Manually: put the files in place
.agents/skills/caveman/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add JuliusBrussee/cavekit --skill caveman -a cursor2Manually: put the files in place
.cursor/skills/caveman/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install JuliusBrussee/cavekit caveman2Manually: put the files in place
.github/skills/caveman/SKILL.md1Skills CLI (Vercel)
npx skills add JuliusBrussee/cavekit --skill caveman -a gemini-cli2Platform CLI
gemini skills install https://github.com/JuliusBrussee/cavekit --path skills/cavemanManually: put the files in place
.devin/skills/caveman/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add JuliusBrussee/cavekit --skill caveman -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about caveman
How do I install caveman in Claude?
Run npx skills add JuliusBrussee/cavekit --skill caveman -a claude-code. The skill lands at ~/.claude/skills/caveman/SKILL.md.
What does caveman do?
It compresses writes to SPEC.md and nearby text: articles, filler and hedging go, and some words become symbols. Code, paths, identifiers and error strings stay untouched.
When does caveman not apply?
In code, error strings, commit messages and PR descriptions. It also steps aside when you need prose for external review or a plain-English explanation.
Source text
SKILL.md · MIT
---
name: caveman
description: |
Caveman encoding for SPEC.md and spec-adjacent writes. Loaded by /spec, /build,
/check. Cuts tokens ~75% vs prose while staying precise. Triggers on any write
to SPEC.md or when user says "caveman", "compress this", "be brief".
---
# caveman — spec encoding
Applies to SPEC.md writes, spec-referencing prose, backprop entries.
Does NOT apply to code, error strings, commit messages, PR descriptions.
## GRAMMAR
- Drop articles (a, an, the).
- Drop filler (just, really, basically, simply, actually).
- Drop aux verbs where fragment works (is, are, was, were, being).
- Drop pleasantries.
- No hedging (skip "might", "perhaps", "could be worth").
- Fragments fine.
- Short synonyms: fix > implement, big > extensive, run > execute.
## SYMBOLS
Prefer over words:
```
→ leads to / becomes / on <x>
∴ therefore / fix
∀ for all / every
∃ exists / some
! must / required
? may / optional / unknown
⊥ never / forbidden / nil
≠ not equal
∈ in
∉ not in
≤ at most
≥ at least
& and
| or
§ section reference
```
## PRESERVE VERBATIM
Never compress:
- Code blocks, snippets, one-liners with backticks.
- Paths: `src/auth/mw.go`.
- URLs.
- Identifiers: function names, variable names, env vars.
- Numbers and versions.
- Error message strings.
- SQL, regex, JSON, YAML.
- Quoted strings.
## SHAPES
**Invariant**:
```
V<n>: <subject> <relation> <condition>
V1: ∀ req → auth check before handler
V2: token expiry ≤ current_time → reject
```
**Bug row** (pipe table under §B):
```
id|date|cause|fix
B1|2026-04-20|token `<` not `≤`|V2
```
**Task row** (pipe table under §T):
```
id|status|task|cites
T3|x|add auth mw|V1,I.api
```
Status: `x` done, `~` wip, `.` todo. Escape literal `|` as `\|`.
**Interface**:
```
<kind>: <name> → <shape>
api: POST /x → 200 {id:string}
cmd: `foo bar <arg>` → stdout JSON
env: FOO_KEY ! set
```
## EXAMPLES
**Bad**:
> The system should ensure that every incoming request is properly authenticated before being forwarded to its corresponding handler function.
**Good**:
> V1: ∀ req → auth check before handler
**Bad**:
> We discovered that the token expiration check in the middleware was using a strict less-than comparison operator, which meant tokens were being rejected at the exact moment of their expiry.
**Good**:
> B1: token `<` not `≤` → reject @ expiry boundary.
**Bad**:
> The POST endpoint at /x accepts a JSON body and returns a 200 response with an object containing the created id.
**Good**:
> api: POST /x → 200 {id}
## BOUNDARIES
- User asks for prose explanation → switch to normal English.
- Spec documents for external review (RFC, pitch) → normal English.
- Commit message → normal English (git readers expect it).
- Diff comment in code → normal English.
## WHEN UNSURE
If cutting a word loses a fact, keep it. Caveman is compression, not amputation.
© JuliusBrussee · MIT · JuliusBrussee/cavekit
Similar skills
All skills for Agent setup: memory, context, orchestration →caveman by other authors comes first.