spec-review
Skill1 starsChanged 2 months agoMITView on GitHub
Run last in Spec, after the sitting closes and before the signature — code-cold: fix the draft bundle in place rather than list complaints, facts silently, judgment applied and flagged inline to revert. Writes no report. Grilling and drafting are `spec-grilling`; a code diff is `code-review`.
47 other projects use a version of this.
Adopted by
Most recently taken up by
- utopia-rise/fmod-gdextensiontheir own version, first seen Nov 9, 2026
- crsmithdev/alephtheir own version, first seen Nov 8, 2026
- maxatwork/skillstheir own version, first seen Nov 8, 2026
- salasebas/skillstheir own version, first seen Nov 8, 2026
- komluk/scaffoldingtheir own version, first seen Nov 7, 2026
- rioffe/specchecktheir own version, first seen Nov 6, 2026
Used with
Projects with it also use get-pr-reviews, push-everything and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
saffron-healthSkillget-pr-reviews
Get nicely formatted output of the last review comments on a PR. Used internally by other skills.
Also in 3 projects that use this
saffron-healthSkillpush-everything
Stage ALL changes in the repository (not just session changes), commit, and push. Use when you need to commit all pending changes.
Also in 3 projects that use this
NVIDIASkillgenerate-spec
Produce a feature specification covering API changes, backward compatibility, cross-language impact, performance, and a file-level change plan. Use when designing a new feature, planning a significant change, or the user asks to spec something out.
Also in 3 projects that use this
telefrekSkillspec-init
Bootstrap the spec corpus for this project
Also in 3 projects that use this
AWSSkillimplement-spec
Implement the result of /to-spec and /to-tickets in code.
Also in 8 projects that use this
ArvorCoSkillspecify
Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec.
Also in 3 projects that use this
- +2 more from saffron-health
Other versions47 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 47
- microsoft/winappCli★ 1.4ksame name
- utopia-rise/godot-kotlin-jvm★ 995same name
- utopia-rise/fmod-gdextension★ 954same name
- cashew-labs/libretto★ 898same name
- saffron-health/libretto★ 883same name
- liza-mas/liza★ 418same name
- HHU3637kr/skills★ 146same name
- saffron-health/opencode-gui★ 59same name
- agent-ix/quoin★ 20same name
- microsoft/WinAppVSCE★ 18same name
37 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository41 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- acceptance-criteriaSkill
- aim-higherSkill
- api-designSkill
- architecture-designSkill
- browser-testing-with-devtoolsSkill
- ci-cdSkill
- codebase-designSkill
- codebase-researchSkill
- code-reviewSkill
- code-simplificationSkill
- comprehension-quizSkill
- debugging-and-error-recoverySkill
- deprecation-and-migrationSkill
- documentation-and-adrsSkill
- doubt-driven-developmentSkill
- environment-manifestSkill
- gauntlet-loopSkill
- git-workflowSkill
- handoffSkill
- idea-refineSkill
- incremental-implementationSkill
- interview-meSkill
- literate-explainerSkill
- observability-and-instrumentationSkill
- orchestratorSkill
- performance-optimizationSkill
- plan-breakdownSkill
- preflight-readinessSkill
- project-setupSkill
- pull-requestSkill
- quality-verificationSkill
- security-and-hardeningSkill
- shipping-and-launchSkill
- source-driven-developmentSkill
- spec-grillingSkill
- test-driven-developmentSkill
- to-prdSkill
- using-agent-skillsSkill
- worktreeSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 43 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
Ask nothing, even with the person there — the inline flag is the question, left where they are already reading.
- Very specific: line 120
No new file — the fixes land in the bundle, inside sections that already exist: this pass invents no artifact and no stable section, and …
“Common” is measured: kept by at least 6 in 10 of the 43 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Spec review
Purpose
Stage: Spec. Principles 6, 7, 8, 10.
A code-cold pass over the drafted Spec bundle, between the sitting and the signature. It fixes the bundle in place — facts silently, contestable calls applied and flagged inline to revert — and emits no file. Attention is scarcest at design; a stray path or a dangling ADR id spends it on what a grep settles.
When to use / when to skip
- The sitting has closed, the bundle is draft, nobody has signed — a fix now costs no re-signature.
- Someone wants the spec read by something that did not write it.
- Skip: grilling or drafting an artifact —
spec-grillingruns the sitting; this pass follows it. - Skip: a code diff or a weakened oracle —
code-review, in Review. - Skip: writing one decision up —
documentation-and-adrs. - One artifact with nothing crossing to another is one inline pass; the relational grade against
intent.mdis the default, and padding a trivial one out to the full bundle read manufactures nothing.
Inputs
docs/features/<slug>/intent.md— helps: what everything else is graded against · without it: take it from the prompt andprd.md's Problem, findings markedderiveddocs/features/<slug>/prd.md— helps: the stories, the scope, the design-reference pointer · without it: gradeacceptance.mdagainst the intent, markedderiveddocs/features/<slug>/acceptance.md— helps: the scenarios coverage is measured over · without it: name the behaviours nothing grades, flagged inprd.mddocs/features/<slug>/architecture.md— helps: §2's flow a scenario traces, §6 what the person answers · without it: say both checks had nothing to run againstdocs/features/<slug>/environment.md— helps: the typed rows a value or a command hides in · without it: nothing to stripdocs/adr/andCONTEXT.md— helps: eachsee ADR-NNNresolves, each term is the glossary's · without it: a dangling id becomes a flag rather than a fix
Ask nothing, even with the person there — the inline flag is the question, left where they are already reading.
Process
- Read
intent.mdfirst, then the rest, grading each artifact relationally — does it deliver what the intent asked for? — across placeholders, internal consistency, scope and ambiguity. Run code-cold in a fresh subagent (../../references/safety-rails.md). - Sort each issue into one of the three classes below. Two classes would force the third kind into one of them.
- Fix a decidable fact in place, then re-run the check that found it until it comes back empty, with no flag against it.
- Apply your best correction to a contestable call and flag it inline, in the shape under Outputs & handoff. One pass, never a loop: the person is the convergence point.
- Hand back the bundle itself, never a punch-list, and with it every
ADR-NNNit references, so each is opened before a signature that names none. - Measure each edited file against its cap and report the number; say when one is over rather than cutting a table to fit.
- Return
pass · concerns · blockand append onedocs/session-log.mdentry naming what was fixed and what was flagged.blockmeans a stop-list item (../../references/safety-rails.md), nothing else.
The three classes
| Issue | Class | What you do |
A file path, signature or library internal in prd.md | decidable | Strip it, leaving the ADR id that holds it. Re-check: grep for extensions, /, (). |
see ADR-NNN resolving to no file in docs/adr/ | decidable | Correct the id, or write the pointer it wanted. Re-check: cross every ADR-\d+ against docs/adr/. |
A CONTEXT.md glossary term used in another word's place | decidable | Normalize to the glossary term, verbatim. Re-check: each ## Glossary term against the bundle, term by term. |
A placeholder, TODO or TBD | decidable | Fill it from the bundle, or cut it. architecture.md §6 is not one. Re-check: grep for TODO, TBD, <. |
A value or a command in environment.md | decidable | Remove it. A real credential is a stop-list item: verdict block, never echoed. Re-check: grep the manifest for = and backticks. |
A path, signature or table name inside an acceptance.md scenario | decidable | Rewrite it as an observable outcome. Re-check: grep the scenarios for extensions and (). |
A story, or an intent.md success criterion, no scenario covers | contestable | Draft the scenario; flag it. |
| A hard-to-reverse, surprising decision buried in prd prose | contestable | Propose the ADR; flag it. |
Two independent subsystems inside one intent.md | contestable | Propose the split; flag it. |
prd.md contradicting an ADR or acceptance.md | contestable | Reconcile to one side; flag the side taken. |
A scenario tracing through no component in architecture.md §2 | contestable | Structure missing: draft the trace, flag it. Scenario the intruder: flag it by id, delete nothing — a deleted scenario carries no flag and guards no behaviour. |
A UI prd.md whose design reference names no states | contestable | Name the states its scenarios need; flag it. An absent reference is Verify's not-reachable and stops nothing. |
architecture.md §6 rows, recommended answers included | not yours | Leave each as written; answering one removes the question being asked. |
A status: line or a STATE.md cell | not yours | Leave it; a person flips it. |
Rationalizations
- "It reads clean, so a skim will do." → clean prose and a spec that delivers the intent are two different readings.
- "A list is what they asked for." → a punch-list moves the work back onto the person it clears the way for.
- "That call is too contestable to change." → a flagged change is one keystroke from reverted; a withheld one is a defect the signature absorbs.
- "One more pass and the judgment calls come out right." → a second pass argues with the first.
- "I drafted it, so I can review it." → the context that missed a gap misses it again on the reread.
Red flags
- A punch-list forming in the reply instead of edits in the files.
- A contestable section rewritten with no
<!-- spec-review: … -->against the line. - A second visit to a call the first pass already flagged.
- The agent that drafted an artifact grading it.
- An
architecture.md§6 row coming back answered, or astatus:line flipped. - A credential in
environment.mdquoted into the handback.
Verification
- Every decidable row above was re-checked and came back empty.
- Every contestable change is applied and carries its inline flag; nothing was corrected silently.
- Each story and each
intent.mdsuccess criterion maps to a scenario, or the gap is flagged. architecture.md§6 and everystatus:line read as they did before the pass.- The referenced ADR ids came back with the bundle.
- Each edited file's size is reported against its cap, flags excluded.
- The verdict is
pass,concernsorblock, and anything reconstructed from a missing input is markedderivedwhere it is written.
Outputs & handoff
No new file — the fixes land in the bundle, inside sections that already exist: this pass invents no
artifact and no stable section, and holds each edited file inside the cap its writer states:
intent.md 600 words · prd.md 800 · acceptance.md 1,200 · architecture.md 2,000 ·
environment.md 30 rows · CONTEXT.md 1,000 · each ADR 350. Measure with wc -w, flags excluded.
Each contestable change carries one comment against the line it changed:
<!-- spec-review: <what changed> — <why, naming the artifact or ADR that settles it>.
Revert if <the reading that would make this wrong>. -->Appends one docs/session-log.md entry, cap 60 words (../../references/state-schema.md). Flips no
STATE.md cell and no status: line: the feature moves spec → plan on the person's signature.
Returns in conversation — the verdict, what was auto-fixed by file, what was flagged by file and line, and the ADR ids to open.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

