--- name: write-docs description: >- Collaborative document authoring workflow for proposals, technical specs, decision docs, README sections, ADRs, and long-form prose that must work for fresh readers. Use when asked to "write the docs", "draft a proposal", "write a spec", "write an RFC", "write the README", or when a document needs to be understandable by someone without this session's context. Three stages: gather context, iterate on structure, reader-test for a stranger. --- Produce documentation that works for a reader landing cold. Not a summary of what was built, not a dump of the conversation, but a document that transfers intent to someone who wasn't here. Run it through three stages — Context → Refine → Reader-Test — and don't ship until a hypothetical reader could act on it. GSD already produces durable artifacts (`M###-CONTEXT.md`, `S##-SUMMARY.md`, `DECISIONS.md`, `KNOWLEDGE.md`), but those are scaffolded by templates. This skill is for free-form documentation: README changes, public docs, architectural proposals, RFCs, PR descriptions, runbooks, and anything that lives under `docs/`, `mintlify-docs/`, or `gitbook/` in this repo. Invocation points: - User asks to write or rewrite a piece of documentation - Before shipping a feature that adds user-facing behavior — docs need updates - After `write-milestone-brief` when the brief needs a public-facing summary for non-GSD consumers - PR description for a meaningful change **WRITE FOR THE FRESH READER.** The test is not "does the maintainer understand it" — you are the maintainer. The test is "can someone who has never seen this code act correctly after reading this?" **ITERATE STRUCTURE BEFORE PROSE.** An outline that's wrong will not be saved by good sentences. Agree on the sections, what each is for, and in what order before drafting the body. **NO FILE PATHS IN TRUNK DOCS.** Paths rot. Describe modules, behaviors, and invariants. A README that cites `src/foo.ts:42` is a future broken link. ## Stage 1: Context gathering 1. **Who is the reader?** Internal engineer, open-source contributor, end user, future you at 3am. The answer changes everything. 2. **What should they be able to do after reading?** Name the single post-read action. "Understand the auth flow" is not an action — "implement a new auth provider using the documented extension points" is. 3. **What do they already know?** Assume they have docs for the language and framework, not for your codebase. Don't re-explain React; do explain your project's conventions. 4. **What context from this conversation/codebase belongs in the doc?** Ask the user to dump any missing material. Do not invent examples. One round of clarifying questions. Then proceed. ## Stage 2: Refine structure 1. **Draft an outline, not prose.** Numbered sections, one-line purpose for each. Show it to the user. 2. **Iterate the outline.** Remove sections the reader doesn't need. Reorder so the must-knows come first. Flag sections that can't be written without more input. 3. **Only then, fill sections.** Write the body of each section in order. Keep sentences short. Prefer concrete examples over abstractions. Show small diffs or code snippets where they clarify; skip them where they'd rot. 4. **Draft in place.** Write directly to the target file — `docs/.md`, `README.md`, `mintlify-docs/…`. Do not keep a scratch draft in the conversation. ## Stage 3: Reader-test 1. **Cold-read it.** Read the doc top to bottom as if you hadn't written it. Stop at every moment you thought "they already know X" — that's a gap. 2. **Can the named post-read action be taken?** Walk through it. If yes, the doc works. If no, identify the missing piece and add it. 3. **Cut aggressively.** Anything that isn't serving the post-read action comes out. Documentation bloat kills docs. 4. **Offer to the user:** "Here's the draft. Want me to run a fresh sub-agent (`Agent(subagent_type=Explore)`) as a cold reader to stress-test it?" ## Stage 4: Wire it in 1. Link to the new doc from relevant entry points (README.md index, docs/ sidebar, mintlify-docs config, etc.). 2. If it documents a decision, also append a one-line entry to `.gsd/DECISIONS.md` pointing at the doc. 3. If it's a public-facing change, flag for the next release notes / CHANGELOG update. - **"Writing a summary of what we did"** — the reader doesn't care about the journey. Document the destination. - **Paths and line numbers in long-lived docs.** They rot. Use module names. - **Re-explaining general concepts.** If the reader needs to know what HTTP is, the doc is aimed at the wrong audience. - **Starting with prose.** Outline first, always. - **Not cold-reading.** Every doc gets one pass as if you've never seen it. - **Claiming "done" without the reader-test.** Docs that haven't been cold-read are notes, not docs. - [ ] The reader and their post-read action are named explicitly. - [ ] The outline was agreed before prose was written. - [ ] A cold-read pass happened; gaps were closed. - [ ] No file paths or line numbers in the trunk doc (decision-scoped ADRs may include them). - [ ] Doc is linked from a relevant entry point — it is discoverable, not orphaned. - [ ] The named action is actually executable after reading.