
Caveman
Shrink SPEC.md and spec-adjacent agent writes by ~75% tokens while keeping paths, code, and invariants exact for /spec, /build, and /check workflows.
Overview
Caveman is an agent skill most often used in Build (also validate scope and ship review) that compresses SPEC.md writes with a defined grammar and symbols while preserving code and identifiers verbatim.
Install
npx skills add https://github.com/juliusbrussee/cavekit --skill cavemanWhat is this skill?
- Grammar rules drop articles, filler, hedging, and pleasantries on spec writes only
- Symbol vocabulary (→, ∴, ∀, !, ⊥, §) replaces prose for relations and constraints
- Preserves verbatim code blocks, paths, URLs, identifiers, numbers, and structured formats
- Invariant shape V<n>: subject relation condition for testable spec rules
- Triggers on SPEC.md writes, caveman/compress/be brief user requests—not code or commits
- Cuts tokens ~75% vs prose on SPEC.md writes
- Dedicated symbol set with 12+ operators (→, ∴, ∀, !, ⊥, §, etc.)
- Invariant template shape V<n>: subject relation condition
Adoption & trust: 1.7k installs on skills.sh; 999 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You burn context tokens on verbose SPEC.md prose even though your agent only needs precise constraints and references.
Who is it for?
Indie builders maintaining SPEC.md-driven agent workflows who want smaller spec files without losing paths, versions, or invariant rules.
Skip if: Teams that need full-sentence specs for non-technical readers, or any write to production code, commits, or customer-facing copy where caveman grammar is explicitly out of scope.
When should I use this skill?
Any write to SPEC.md, spec-referencing prose, or backprop entries; user says "caveman", "compress this", or "be brief".
What do I get? / Deliverables
SPEC.md and spec-adjacent notes encode in caveman fragments with invariants and symbols, leaving more context for implementation and /check passes.
- Caveman-encoded SPEC.md sections and invariants
- Compressed spec-referencing prose with preserved literals
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Build → docs because caveman governs how product specs are encoded during active development, even though it also feeds validate planning and ship checklists. SPEC.md and backprop entries are documentation artifacts tied to implementation contracts, not runtime integrations or UI code.
Where it fits
Encode MVP boundaries and ∀/! rules in SPEC.md before committing to a build plan.
Update V<n> invariants and § references after each feature slice without bloating the spec file.
Backprop entries in caveman capture decisions agents need without essay-length meeting notes.
/check reads compressed spec constraints so review stays aligned with encoded must/forbidden rules.
How it compares
Use as a spec encoding convention inside your repo—not a general summarizer for chat or markdown blogs.
Common Questions / FAQ
Who is caveman for?
Solo and indie builders using Cavekit-style /spec, /build, and /check commands who want leaner SPEC.md files in agent sessions.
When should I use caveman?
During validate when drafting scope into SPEC.md, throughout build when updating invariants and backprop, and at ship when /check reads spec—any time you write SPEC.md or ask to compress or be brief on spec content.
Is caveman safe to install?
It is a formatting skill with no shell or network behavior; review the Security Audits panel on this page before adding any skill to your agent.
SKILL.md
READMESKILL.md - Caveman
# 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.