prd-writing
Skill0 starsChanged 5 months agoMITView on GitHub
Write or edit requirements docs, PRDs, specs, feature docs, READMEs, architecture docs, and any other docs that describe how a system works. Use when the user asks to write, draft, update, edit, or revise a PRD, requirements doc, spec, feature doc, README, or architecture doc — or when the work output IS such a doc. Triggers on "PRD", "requirements doc", "spec", "feature doc", "requirements", "write a doc for", "draft the spec", "update the PRD", "document this feature".
16 other projects use a version of this.
Adopted by
Most recently taken up by
- SWEStash/swe-workflow-skillstheir own version, first seen Nov 8, 2026
- okou-ai/okou-skillstheir own version, first seen Nov 4, 2026
- jokob-sk/NetAlertXtheir own version, first seen Nov 1, 2026
- netalertx/NetAlertXtheir own version, first seen Nov 1, 2026
- Maudeunfledged834/startup-founder-skillstheir own version, first seen Oct 25, 2026
- davidanthonyn/claude-skillstheir own version, first seen Oct 20, 2026
Used with
Projects with it also use feedback-synthesis, onboarding-flow and 2 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.
Dragoon0xSkillfeedback-synthesis
Turn raw customer feedback from multiple sources into clear product insights and priorities. Covers feedback collection, pattern recognition, and separating signal from noise. Use when feedback feels overwhelming, contradictory, or when the team can't agree on what users actually want.
Also in 3 projects that use this
Dragoon0xSkillonboarding-flow
Design first-run experiences that create the aha moment fast. Reduces time-to-value by sequencing actions, progressive disclosure, and contextual guidance. Use when building signup flows, product tours, or empty states.
Also in 3 projects that use this
Microsoft AzureSkillgit-workflow
Squad branching model: dev-first workflow with insiders preview channel
Also in 3 projects that use this
- +1 more from Dragoon0x
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- jokob-sk/NetAlertX★ 7.4ksame name
- netalertx/NetAlertX★ 7.4ksame name
- shawnpang/startup-founder-skills★ 331same name
- GenerativeAgents/claude-code-book-chapter8★ 114same name
- itseffi/agentic-os★ 114same name
- okou-ai/okou-skills★ 81same name
- vm0-ai/vm0-skills★ 81same name
- Maudeunfledged834/startup-founder-skills★ 8same name
- Dragoon0x/product-skills★ 4same name
- limengzhe27-boop/claude-product-doc-skills★ 2same name
6 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 repository18 other files it gives its agents.
- app-icon-gridSkill
- archive-manualSkill
- commitSkill
- component-consistencySkill
- component-locatorSkill
- debug-triageSkill
- gemini-iconSkill
- parity-auditorSkill
- refactor-and-safety-passSkill
- release-helperSkill
- smellSkill
- streamdeck-aerospace-rewireSkill
- streamdeck-workspace-buttonSkill
- svg-icon-renderSkill
- test-conventionsSkill
- verification-gateSkill
- work-breakdownSkill
- yt-audioSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. 0 are common, 9 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
If a sentence answers "what changed?" or "what was it before?" or "who did this?" — it does not belong in the doc.
- Very specific: line 26
If you find yourself typing any of these in a PRD/spec/requirements doc, stop and rephrase as present state.
- Distinctive: line 77
If the *current behavior* of the feature is tied to NTM+ branding, say so as present state: "Renders the NTM+ purchase confirmation page."
- Distinctive: line 110
When updating a PRD/spec, your job is to make the doc reflect new present state — NOT to annotate what changed.
- Distinctive: line 115
If the user asks you to "document what changed," push back: that belongs in the PR description, the changelog, or the commit message.
- Distinctive: line 140
No agent attribution: Never write "added by Claude" or "Claude generated this section." If the reader needs to know provenance, that's git …
- Distinctive: line 144
Single source of truth: If the same fact appears in two places in the doc, one of them is going to drift.
- Distinctive: line 155
Identify what the present state actually is: Read code, ask the user, or both.
- Distinctive: line 156
Draft as if the feature has always been the way it is now: No history, no narrative, no attribution.
- Distinctive: line 157
Self-review against the banned-phrases list: Search your draft for each banned word/phrase.
- Very specific: line 164
When writing or editing a spec in the 3d-game / unreal-vibes repo (apps/web/docs/specs/), the present-state rule above still applies, and …
- Very specific: line 169
Every NEW spec follows that seven-section shape, and every load-bearing clause is a numbered AC-N (feature prefix, e.g.
- Very specific: line 176
Read spec-template.md before authoring a spec in that repo.
“Common” is measured: kept by at least 6 in 10 of the 12 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 requirements docs (PRDs, specs, feature docs)
You are writing or editing a document that describes what a system or feature IS — not what it was, not what changed, not who built it.
The single most common failure mode is change-narrative leaking into present-state documentation. This skill exists to prevent that. Read all of it before writing.
The core rule
A requirements doc describes present state in plain terms. Nothing else.
If a sentence answers "what changed?" or "what was it before?" or "who did this?" — it does not belong in the doc. Those facts belong in commit messages, PR descriptions, daily logs, or release notes.
The reader of a requirements doc is asking "how does this work right now / how should this work?" — not "what is the history of this feature?"
Banned phrases (catch yourself before writing these)
If you find yourself typing any of these in a PRD/spec/requirements doc, stop and rephrase as present state.
| Banned | Why |
| "now lives at..." | implies it used to live elsewhere — change-narrative |
| "moved from X to Y" | change-narrative |
| "previously..." | change-narrative |
| "originally built by..." | attribution + history, neither belongs |
| "used to..." | change-narrative |
| "formerly..." | change-narrative |
| "renamed from..." | change-narrative |
| "we no longer do X" | describes absence-of-old-thing; just describe what we DO do |
| "as of [date]..." | dates baked into prose rot; if a date matters, it goes in a status field, not a paragraph |
| "side fix:" / "also fixed:" | this is a commit-message vibe leaking in |
| "in this version..." | versioning belongs in changelogs |
| "the new..." / "the old..." | "new" and "old" both imply change-narrative; just say what it IS |
Before / after examples
Example 1: "we no longer do X"
Bad (change-narrative):
Users no longer need to verify their email before logging in. We removed the email verification step.
Good (present state):
Users can log in immediately after signup. No email verification is required.
The reader doesn't need to know it once required verification. They need to know what's true now.
Example 2: "moved" / "now lives"
Bad:
The auth service now lives in
apps/api/src/auth/. It was moved from the legacy monolith.
Good:
The auth service is at
apps/api/src/auth/.
Example 3: attribution + dates
Bad:
Built by Tarik on 2026-04-21. Originally added to support the NTM+ rename.
Good:
(delete entirely — attribution and origin date belong in commit history)
If the current behavior of the feature is tied to NTM+ branding, say so as present state: "Renders the NTM+ purchase confirmation page."
Example 4: change as a footnote
Bad:
The cart accepts up to 12 items.
Note: previously this was 6 items, raised in the 2026-Q1 release.
Good:
The cart accepts up to 12 items.
The footnote is change-narrative wearing a disguise. Cut it.
Example 5: "new" / "old"
Bad:
The new dashboard uses server components. The old dashboard, still served at
/legacy, uses client-side rendering.
Good:
The dashboard at
/appuses server components. The dashboard at/legacyuses client-side rendering.
Drop "new" and "old" — describe each one by what it is and where it lives.
Editing an existing doc: same rule applies to your additions
When updating a PRD/spec, your job is to make the doc reflect new present state — NOT to annotate what changed.
- Bad: add a "## What changed in v2" section
- Good: rewrite the affected sections so they describe the v2 present state
If the user asks you to "document what changed," push back: that belongs in the PR description, the changelog, or the commit message. The doc itself should read as if v2 has always been the way it is.
If you genuinely cannot rewrite as present state (e.g., a migration doc whose explicit purpose is to describe a transition), flag the conflict explicitly: "This deliverable conflicts with the present-state rule because the doc's purpose is migration narrative. Confirm the doc type before I proceed."
Rare valid exceptions
There are a few doc types where change-narrative IS the content:
- Changelogs (
CHANGELOG.md) — entire purpose is dated change-narrative - Migration guides — explicitly describe transitions between versions
- Postmortems / incident reports — describe what happened and when
- ADRs (Architecture Decision Records) — describe the decision in past tense + the rationale
For everything else — PRDs, specs, feature docs, READMEs, requirements docs, architecture docs, status docs — present-state only.
Other quality rules
These are secondary to the present-state rule but matter:
- Round counts are red flags. "We have ~50 endpoints" — replace with the actual count if knowable, or omit. Round numbers in docs go stale.
- No agent attribution. Never write "added by Claude" or "Claude generated this section." If the reader needs to know provenance, that's git blame's job.
- No dates in prose. Dates baked into sentences rot. If a date is structurally important (deadline, deprecation window), use a labeled field:
**Deadline:** 2026-06-01. Not "we need this by June 1st." - Single source of truth. If the same fact appears in two places in the doc, one of them is going to drift. Pick the canonical location and reference it.
- Describe behavior, not implementation. A PRD says "the cart persists across sessions." It does not say "we use localStorage with a fallback to Redis." Implementation details belong in architecture docs or code comments.
- Prefer concrete over hedged. "Probably should support up to 12 items" → "Supports up to 12 items." Hedging in a requirements doc creates ambiguity for implementers.
Workflow when writing a doc
- Identify the doc type. Is it a PRD, spec, README, architecture doc, status doc? Apply the present-state rule unless it's a changelog / migration / postmortem / ADR.
- Identify what the present state actually is. Read code, ask the user, or both. Don't write speculative present state.
- Draft as if the feature has always been the way it is now. No history, no narrative, no attribution.
- Self-review against the banned-phrases list. Search your draft for each banned word/phrase. Remove or rephrase.
- If editing: same rule for your additions. Rewrite affected sections as updated present state.
Per-repo standard: 3d-game (unreal-vibes)
When writing or editing a spec in the 3d-game / unreal-vibes repo
(apps/web/docs/specs/), the present-state rule above still applies, and on
top of it the repo enforces an acceptance-criteria standard:
apps/web/docs/process/spec-template.md.
- Every NEW spec follows that seven-section shape, and every load-bearing
clause is a numbered
AC-N(feature prefix, e.g.BR-*for blood,TOD-*for time-of-day). A clause with no AC-N is invisible to review. - Implementer handoffs use
apps/web/docs/process/implementer-handoff-template.md; reviewers useapps/web/docs/process/reviewer-template.mdand run an AC-by-AC coverage check before scoring.
Read spec-template.md before authoring a spec in that repo.
When the user pushes back
If the user asks you to add change-narrative ("note that this is new", "add that it used to be X", "mark which section was added today"), gently push back once: "Change-history belongs in the commit/PR/changelog, not the doc itself — the doc should read as present state. Confirm if you still want it in the doc and I'll add it." Then defer to their call.
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.

