Ground
Self-terminating grounding loop for a development step. Turns assertions, assumptions, and inferences into verified knowledge via an evidence-backed ledger; self-resolves code-determinable forks and logs them; escalates only genuine preference forks; spawns an independent verifier; and emits a plain-English review packet at the user's altitude. Invoke before implementing any non-trivial step, or whenever asked to "ground" something.From its SKILL.md
npx -y skills add codeclawd/fable-mode --skill groundAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 16 stars16 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
/ground — executable grounding protocol
Makes the "verify before done" discipline self-terminating (a ledger with a termination test), self-resolving (a decision policy for forks), and independently verified (a cold second agent), so it runs to completion without you re-prompting "ground further" each step.
Core invariant
Do not return to the user while any load-bearing claim is UNVERIFIED or any code-determinable fork is unresolved. "Looks done" is not a termination criterion — an empty UNVERIFIED column is.
1. Build the ledger
List every claim the step rests on, as a table: | # | Claim | Status | Evidence |
- A row is VERIFIED only when Evidence is a concrete
file:line(read) or a command + its output (run). - "Structurally certain" / "by reading" / "likely" / "should" → UNVERIFIED. No exceptions.
- Behavioral claims — control flow, ordering, teardown, exception propagation, state mutation, concurrency — require run evidence, not read evidence. Reason only to design the check; then run it.
- For any library / framework / API claim, ground truth is the installed version or the official docs (Context7) — not memory.
- A claim too vague to mark either way is split into checkable sub-claims.
2. The five moves
- Read breadth-first — topology: imports, calls, where state lives (Grep/Glob/Read; fan out parallel searches for fan-out questions).
- Read the private internals — closures, captured vars, callbacks, indirection — not just exports.
- Test each plan claim against the code — grep the counts, check the visibility.
- Name what is intentionally excluded, and why.
- Write findings into the plan / ledger.
3. The loop + termination
Run the moves, fill the ledger, repeat. Each pass must verify ≥1 row or split a vague claim. Terminate when a full pass yields no new verifications AND the UNVERIFIED column is empty for all load-bearing claims.
4. Decision policy — make forks resolve themselves
For each fork the grounding surfaces, classify:
- Code-determinable — one branch is correct given how the code wires, a project invariant, or the development trajectory. → Decide it. Write decision + grounded reasoning + rejected alternative(s) into a decision log. Do not ask.
- Preference / value — needs the user's priorities, risk tolerance, or product direction; or is irreversible and expensive. → Stop and surface it inline (markdown list, never AskUserQuestion) with a grounded recommendation.
- Unsure which class → treat as preference and surface. Conservative on purpose.
The bar: ask only what the code genuinely cannot answer.
5. Independent verification
When the ledger is clean, spawn the grounding-verifier agent (cold, read-only). Give it the step goal + the ledger + the diff (if any) — not your justification narrative. It performs:
- (a) Row-check — each cited evidence actually supports its claim; re-run behavioral checks (the run is ground truth regardless of reader).
- (b) Gap-scan — independently hunt load-bearing claims the ledger omits: bypass paths, untested assumptions, unnamed exclusions, count claims that are off.
- (c) Summary-fidelity — confirm the §6 packet faithfully describes the diff.
Resolve every REFUTED / INSUFFICIENT finding (re-ground, fix, or escalate) before surfacing.
The verifier reduces but does not eliminate error — it breaks the self-grading loop. Independence
comes from cold context + adversarial stance, not model diversity (same model is fine). For code
changes you may also run the bundled /code-review and /verify skills alongside it.
6. The review packet — abstraction parity
The ledger is an audit trail, not a review surface. Produce a separate packet at the altitude of the user's original request, descending to code only in an appendix:
- The ask — restated in the user's words.
- What I did — plain English, same altitude.
- Decisions + why + rejected alternatives — one line each, plain English.
- Genuine forks for the user, if any.
- One-command behavioral proof — before/after, a single command the user can run.
- Appendix — ledger, decision log, full diff. There for drill-down, never required to review.
7. Ceiling (autonomy)
Default ceiling 2: ground → decide code-determinable forks → implement → verify → stage everything and stop before commit for sign-off. Ceiling 1: also commit autonomously. Ceiling 3: widen the preference class, escalate more.
Anti-patterns (hard stops)
- Marking a behavioral claim VERIFIED from reading. Run it.
- Bouncing a code-determinable fork to the user because asking is cheap.
- Treating the ledger as the review surface (forces the user to learn the codebase to review).
- Reactively patching when a check fails — read the code and reason first.
- Surfacing before the verifier has cleared its findings.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.