PluginBench
Skill
Fail
Audit score 45

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
Prerequisites
  • FORMAT.md at repo root (defines caveman encoding rules and pipe-table shape)
  • Optionally: existing SPEC.md (for amend, backprop, or distill modes)
Claude Code
Cursor
Windsurf
Cline

How to use spec

  1. 1.Decide which mode: NEW (idea→spec), DISTILL (code→spec), BACKPROP (bug→§B+§V), or AMEND (targeted edit)
  2. 2.For NEW: describe your idea; spec extracts goal, constraints, interfaces, invariants, and task breakdown into SPEC.md
  3. 3.For DISTILL: run with `from-code` flag; spec walks repo and infers all sections from code, README, and tests
  4. 4.For BACKPROP: phrase request as `bug: <description>`; spec finds root cause, proposes invariant, and appends §B row
  5. 5.For AMEND: request `amend §V.3` (or other section); spec shows current state, accepts changes, and writes diff
  6. 6.Review the full SPEC.md output and confirm OK before writing; spec will prompt next action (e.g., `/review` or `/build`)

Use cases

Good for
  • 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
Who it's for
  • 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

When should I run spec vs. other skills like grill or research?

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.

Can I edit SPEC.md manually or must I use spec?

Spec is the sole mutator. Manual edits bypass ownership rules and numbering guarantees. Always use spec to amend, backprop, or create sections.

What if I want to change a section spec didn't name in my request?

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.

How does backprop work if I don't know the root cause?

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.

Do I need to run build after spec writes SPEC.md?

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:

  1. No SPEC.md at repo root AND args describe idea → NEW
  2. No SPEC.md AND from-code in args → DISTILL
  3. SPEC.md exists AND args start bug:BACKPROP
  4. SPEC.md exists AND args start amendAMEND
  5. SPEC.md exists, 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:

  1. Extract goal (1 line, caveman). → §G.
  2. List constraints user stated or implied. → §C.
  3. List external surfaces user named. → §I.
  4. §R only if research ran — else omit the section (right-size).
  5. Propose initial invariants. → §V (numbered V1…).
  6. Break goal into ordered tasks. → §T pipe table, all status ., ids T1…
  7. §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:

  1. Parse bug description.
  2. Find root cause (read relevant code).
  3. Decide: would a new invariant catch recurrence? If yes → draft V<next>.
  4. Append §B row: B<next>|<date>|<cause>|V<N>.
  5. Append new invariant to §V.
  6. If fix also changes behavior → add/update §T rows.
  7. 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 cites column ! 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.