spec
juliusbrussee/cavekit
Create and maintain SPEC.md—the single source of truth for project goals, constraints, invariants, and bugs.
What is spec?
The spec skill is the sole mutator of SPEC.md at your repo root. Use it to write a new spec from an idea, distill one from existing code, amend specific sections (goals, constraints, interfaces, invariants, tasks, bugs), or record bugs via backprop. It enforces caveman encoding rules and maintains monotonic numbering across all spec sections.
- Create a new SPEC.md from a user idea, extracting goals, constraints, interfaces, invariants, and task breakdown
- Distill a spec from existing code by inferring goals from README/package.json, constraints from stack, public APIs, and deriving invariants from tests
- Amend targeted sections (§G, §C, §I, §V, §T, §B) without rewriting unrelated parts
- Backprop bugs into §B and §V, deriving root causes and proposing new invariants to prevent recurrence
- Maintain caveman format compliance and monotonic numbering across all identifiers
How to install spec
npx skills add https://github.com/juliusbrussee/cavekit --skill spec- FORMAT.md at repo root (defines caveman encoding rules and pipe-table shape)
- Optionally: existing SPEC.md (for amend, backprop, or distill modes)
How to use spec
- 1.Decide which mode: NEW (idea→spec), DISTILL (code→spec), BACKPROP (bug→§B+§V), or AMEND (targeted edit)
- 2.For NEW: describe your idea; spec extracts goal, constraints, interfaces, invariants, and task breakdown into SPEC.md
- 3.For DISTILL: run with `from-code` flag; spec walks repo and infers all sections from code, README, and tests
- 4.For BACKPROP: phrase request as `bug: <description>`; spec finds root cause, proposes invariant, and appends §B row
- 5.For AMEND: request `amend §V.3` (or other section); spec shows current state, accepts changes, and writes diff
- 6.Review the full SPEC.md output and confirm OK before writing; spec will prompt next action (e.g., `/review` or `/build`)
Use cases
- Start a new project by writing a spec from a fuzzy idea, optionally running grill first for sharpening
- Document an existing codebase by distilling its spec from code, README, and tests
- Record a production bug with root cause analysis and add a preventive invariant to §V
- Amend a specific invariant or task row when requirements change or new constraints emerge
- Integrate handoff material from grill, research, review, or deepen skills into the appropriate spec sections
- Project leads and architects defining or documenting project scope
- Developers recording bugs and deriving invariants to prevent recurrence
- Teams using caveman-encoded specs as a single source of truth
- Anyone maintaining SPEC.md as the authoritative project contract
spec FAQ
Spec is the sole mutator of SPEC.md. Grill sharpens ideas into §G+§C; research adds §R rows; review drafts §V lines. Spec ingests their handoff blocks into the right sections. If your idea is fuzzy, run grill first, then spec.
Spec is the sole mutator. Manual edits bypass ownership rules and numbering guarantees. Always use spec to amend, backprop, or create sections.
Spec enforces sectioned ownership and will not silently rewrite sections you did not explicitly ask to amend. Request a new amend for each section you want to change.
Backprop reads relevant code to find the root cause. You describe the bug; spec investigates, proposes a new invariant if one would catch recurrence, and appends a §B row with the cause and fix reference.
No. Spec writes the spec only. You invoke build explicitly when ready. Spec will prompt you with next steps (e.g., `/review` for high-risk changes or `/build` to proceed).
Full instructions (SKILL.md)
Source of truth, from juliusbrussee/cavekit.
name: spec description: | Create, amend, or backprop bugs into SPEC.md at repo root. Sole mutator of the project spec. Triggers when the user asks to write a spec, start a new spec, distill a spec from existing code, add invariants, amend sections (§G, §C, §I, §V, §T, §B), or record a bug via backprop. Common phrasings: "write the spec for...", "new spec", "bug: ...", "amend §V.3", "distill spec from code", "spec this idea". Reads and follows FORMAT.md for the caveman encoding rules and pipe-table shape of §T and §B.
spec — spec mutator
Read FORMAT.md at repo root if not already loaded. Caveman skill applies to all writes here.
DISPATCH
Inspect user request and project state:
- No
SPEC.mdat repo root AND args describe idea → NEW - No
SPEC.mdANDfrom-codein args → DISTILL SPEC.mdexists AND args startbug:→ BACKPROPSPEC.mdexists AND args startamend→ AMENDSPEC.mdexists, no args → ask user which mode
INPUTS — spec is the sole mutator
The other verbs produce material; spec writes it. Ingest their handoff blocks into the right section, show a diff, write on OK:
- grill → sharpened §G + §C
- research → §R rows (add the §R section if absent)
- review → drafted §V lines + the risk verdict
- deepen → §I/§V/§T amendments
⊥ rewrite a section the handoff did not name. Sectioned ownership (see FORMAT.md).
NEW — idea → spec
Input: user idea. If it arrived fuzzy, prefer running grill first.
Steps:
- Extract goal (1 line, caveman). → §G.
- List constraints user stated or implied. → §C.
- List external surfaces user named. → §I.
- §R only if research ran — else omit the section (right-size).
- Propose initial invariants. → §V (numbered V1…).
- Break goal into ordered tasks. → §T pipe table, all status
., ids T1… - §B section with header row only (
id|date|cause|fix).
Write to SPEC.md. Show user full file. Ask: "spec OK? /review if high-blast-radius, else /build."
DISTILL — code → spec
Walk repo. Produce §G (infer from README/package.json/main entry), §C (infer from stack), §I (enumerate public APIs/CLIs/configs), §V (derive from tests and assertions), §T (one task per known TODO or missing test), §B (empty).
Caveman everywhere. Flag uncertain items with ? in text so user can confirm.
BACKPROP — bug → §B + §V
Input: bug: <description>.
Steps:
- Parse bug description.
- Find root cause (read relevant code).
- Decide: would a new invariant catch recurrence? If yes → draft
V<next>. - Append §B row:
B<next>|<date>|<cause>|V<N>. - Append new invariant to §V.
- If fix also changes behavior → add/update §T rows.
- Show diff. Apply only on user OK.
Rule: every bug gets a §B entry. Invariant optional but preferred.
AMEND — targeted edit
Input: amend §V.3 or amend §T etc.
Read that section. Show current. Ask user what changes. Write. Show diff.
Never silently rewrite sections user did not name.
OUTPUT RULES
- Caveman format per
FORMAT.md. - Preserve identifiers, paths, code verbatim.
- Numbering monotonic — never reuse §V.N or §B.N.
- §T row
citescolumn ! list §V/§I deps:T5|.|impl auth mw|V2,I.api.
NON-GOALS
- No sub-agents. Main thread writes.
- No dashboards, no logs, no state files beyond SPEC.md itself.
- No auto-build after spec. User invokes build explicitly.
Related skills
More from juliusbrussee/cavekit and the wider catalog.

backprop
Trace bugs to root cause and edit specs to prevent recurrence.

build
Plan-then-execute implementation against SPEC.md with automatic backprop on failure.

caveman
Token-efficient spec encoding for SPEC.md—cuts prose ~75% while preserving precision.

check
Read-only drift detector that diffs SPEC.md against code and reports violations without making changes.

cavecrew
Delegate to compressed subagents—investigator, builder, reviewer—to keep main context lean across long sessions.

caveman
Cut token usage ~75% with caveman-mode responses — full technical accuracy, zero fluff