Turn a fuzzy feature request into a reviewable product spec — goals, non-goals, testable acceptance criteria with stable IDs, invariants — that later skills cite by path and ID. Use when the user says "/spec", "spec this out", "write a product spec", "turn this idea into requirements", or brings a feature request that needs a contract before planning or building.
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
A spec is the document later work is checked against. /blueprint plans against it,
/e2e-test derives cases from its criteria, and /revise uses it as the scope fence. So it
must be product-level, testable, and stably addressable.
The spec says what and why, in user-observable terms. How belongs to /blueprint. The
litmus test: two different implementations can both satisfy it. A technical constraint
appears only when it is a genuine product constraint, such as compliance or platform.
Paths are relative to this file. <plugin root> is two directories above it.
| File | Read at | Holds |
|---|---|---|
references/format.md | step 1, when the repo has no spec convention | the default location, file shape, ID rules, invariant tiers |
../../assets/writing.md | step 4, before drafting | the writing rules for every text a person reads |
references/format.md, and read it now. Decide
create against amend. A feature that already has a spec gets an amendment, not a rival
document. Say which you chose, and why.../../assets/writing.md first. Write the overview and
goals, the non-goals, and the user-observable behavior. The overview's first sentence
says what the feature does for its user. A definition or a status line comes after it,
even where the repo's other specs open with one. Non-goals fence every later skill
against scope creep, so write them as deliberately as the goals. Then write the
acceptance criteria with IDs. Each is a scenario with an observable outcome that a
black-box test could execute. "Fast" or "intuitive" is a goal at best, never a
criterion. Happy path, edges, and error behavior are all criteria. Feature-local
invariants live in the file. A cross-cutting one is proposed for the global invariants
doc and flagged. Open questions come last. When amending, new criteria take fresh IDs,
removed ones leave holes, and the diff reads as "what changed about the product's
contract".<plugin root>/scripts/prose-lint.py on the spec file and fix
every finding in the text./submit's job, on request.prose-lint.py with no findings.korya/swd-skills
b1520b9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.