writing-specs
Skill1 starsChanged 3 months agoMITView on GitHub
Writes a specification: detailed requirements and acceptance criteria for settled intent, or a revision to an existing spec. Use when settled intent needs detailed requirements and acceptance criteria before building, including a revision to an existing spec, or when the user asks for a spec, requirements, or acceptance criteria. Skip when current requirements already cover the work, when choosing implementation details, or while a material decision about what the user wants is still pending.
8 other projects use a version of this.
Adopted by
Most recently taken up by
- victorhqc/filberttheir own version, first seen Nov 4, 2026
- iha2/superlitetheir own version, first seen Nov 1, 2026
- JetBrains/thinkrailtheir own version, first seen Oct 13, 2026
- whiteguo233/OpenBiliClawtheir own version, first seen Oct 8, 2026
- sergeyklay/.agentstheir own version, first seen Sep 28, 2026
- fireshort/skillstheir own version, first seen Aug 26, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- JetBrains/thinkrail★ 7.9ksame name
- whiteguo233/OpenBiliClaw★ 3.7ksame name
- iha2/superlite★ 249same name
- devstefancho/skills★ 13same name
- sergeyklay/.agents★ 6same name
- victorhqc/filbert★ 4same name
- fireshort/skills★ 1same name
- xmtplabs/code-factory★ 1same name
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 repository49 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- working-from-a-ticketSkill
- clarifying-intentSkill
- dispatching-parallel-agentsSkill
- handoffSkill
- mapping-the-codebaseSkill
- prototypingSkill
- using-git-worktreesSkill
- using-sdlc-skillsSkill
- viewing-artifactsSkill
- writing-skillsSkill
- yagniSkill
- finishing-a-branchSkill
- release-readinessSkill
- architecture-decisionsSkill
- coding-standardsSkill
- data-modelSkill
- migration-strategySkill
- reviewing-plansSkill
- system-architectureSkill
- ui-ux-designSkill
- writing-plansSkill
- adding-observabilitySkill
- changing-a-live-schemaSkill
- executing-plansSkill
- rollout-controlsSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- complexity-auditSkill
- containing-an-incidentSkill
- debuggingSkill
- deprecating-an-apiSkill
- diagnosing-a-sessionSkill
- eliminating-correctionsSkill
- large-scale-changesSkill
- post-mortemSkill
- refactor-architectureSkill
- brainstormingSkill
- define-goalsSkill
- feasibility-checkSkill
- scopingSkill
- receiving-code-reviewSkill
- requesting-code-reviewSkill
- reviewing-a-prSkill
- security-auditsSkill
- verification-before-completionSkill
- verification-strategySkill
- visual-ui-verificationSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 2 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 8 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
If the intent itself is unclear, invoke clarifying-intent first.
- Very specific: line 19
If a reply has not directly closed a pending decision, invoke clarifying-intent.
- Distinctive: line 35
Write each functional requirement as an observable behavior with a stable ID that no successor spec ever gives to a different requirement:
- Very specific: line 47
Read references/reference-forms.md before choosing the first acceptance form.
- Very specific: line 51
If the form is an executable gate, write it as a proposed file beside the spec, never into the project.
- Distinctive: line 57
Every sentence in the spec that states what the code does today (a command exists, a format carries a field) names the path and symbol it …
- Very specific: line 71
Write the spec to .sdlc-skills/specs/{{YYYY-MM-DD}}-{{topic}}.md or the user-set path.
- Very specific: line 94
Ask this and end the turn.
“Common” is measured: kept by at least 6 in 10 of the 8 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
Writing Specs
Turn an intent into a requirements spec. Requirements are the what; leave the how (architecture, schemas, code) to design.
When to use
- You have a goal, brief, or feature request and need its detailed requirements before designing or building.
- Skip a trivial change whose single requirement is obvious: state it and go.
- If the intent itself is unclear, invoke
clarifying-intentfirst; this skill assumes what is wanted is roughly known. - If a reply has not directly closed a pending decision, invoke
clarifying-intent; this skill cannot turn that reply into approved requirements.
Step 1: Gather and state
- Pull the goal or brief, and read the relevant existing code. If a genuine
gap is left, invoke
clarifying-intent. Invent nothing you could have found. - State the problem in a line or two, and link the goal it serves.
Step 2: Write the requirements
Open assets/spec-template.md before you start; each step below fills one of
its sections.
Write each functional requirement as an observable behavior with a stable ID that no successor spec ever gives to a different requirement:
Right: R-07 rejects an expired token with a 401 Wrong: R-07 good auth- Carry every guardrail and obligation that applies: trust and data, security, accessibility, compatibility, operational and recovery, performance and resource, supported platforms and modes. Do not add a generic list of non-functional requirements.
- Read
references/reference-forms.mdbefore choosing the first acceptance form. For each requirement, choose the cheapest form that can honestly judge it: an executable gate, a disposable mockup, a source-fact contract, a rubric, or prose. - If the form is an executable gate, write it as a proposed file beside the
spec, never into the project; the implementer lands and runs it inside
the task workspace as its
test-driven-developmentcheck. If the interface, or the authority to change the project, is still open, write the observable, the intended gate, its owner, and the handoff. Never invent an interface. - List the edge cases and scenarios that break a naive build. Every sentence in the spec that states what the code does today (a command exists, a format carries a field) names the path and symbol it was checked against at the current revision. One that states what stored data holds (a column is never empty) names the smallest query over real rows that showed it, with its result and never the rows; cite no schema for it, since a schema says only what rows may hold. Rewrite one you cannot cite to what is known, or move it to open questions.
- Fill every column of the template's assumptions-and-dependencies table, one row per assumption or dependency.
- List the open questions, the requirement-level risks, and what is out of scope this round.
Step 3: Write and present
- Write the spec to
.sdlc-skills/specs/{{YYYY-MM-DD}}-{{topic}}.mdor the user-set path. The spec is immutable: a change to it is a new spec that names this one as its predecessor, never an edit. - Fill the template's high-risk classification section. If any answer there
is off the ordinary route, or the user marks the work high-risk, run the
review in
assets/spec-review.mdbefore presenting, with a reviewer who is not the spec's sole author. That review blocks presenting the spec (Step 3.3). ANEEDS_CONTEXTreturn keeps it pending: supply the path it names and run the review again. Present:
Spec {{absolute path}} — version {{identity (per template)}} Requirements: {{n}} Open questions: {{n}} Out of scope: {{n}} 1. Approve and hand off to design 2. Request changes 3. Reject 4. Cancel Recommendation: {{option the open-question state supports}} — {{one sentence}}.Ask this and end the turn;
clarifying-intentowns what closes it.- REQUIRED SUB-SKILL: on option 1, invoke the next missing precondition:
ui-ux-design,system-architecture, ordata-modelwhen a non-trivial shape is still unresolved; otherwisewriting-plans. Never impose a phase that is already complete.
Gotchas
- A claim about the current code that reads as settled is planned as settled: a spec that said a sign-in command existed and a lock format carried a licence field reached implementation before anyone found that neither held on the base, each as a plan successor mid-task. Step 2.5 cites the path and symbol, or says it is unknown.
- A retired requirement ID reused for new work silently makes every earlier citation of it (test names, review comments, out-of-scope links) point at the new work.
- An executable gate written into the project while you are still specifying lands in whichever checkout is open, before any task workspace exists.
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.

