Draft Docs
Generate Tutorial, How-To, Reference, or Explanation documentation drafts to docs/drafts/ for review before publishing. These are the four Diataxis types — see docs-style/references/diataxis-compass.md for the full type-selection procedure.
Arguments
- Topic prompt: Description of what to document (e.g., "Document the WebSocket API")
- --publish [file]: Move reviewed draft to final location and update navigation
Mode 1: Generate Draft
Invoke the draft-docs skill with a topic prompt, e.g. draft-docs "Document the authentication middleware".
Step 0: Gather Context
Before parsing input, gather project context:
# Check for existing docs structure
ls -la docs/ 2>/dev/null || echo "No docs/ directory found"
# Identify documentation framework
ls docs/navigation.json docs/mint.json docs/docusaurus.config.js docs/mkdocs.yml 2>/dev/null | head -1
# Check for existing drafts
ls docs/drafts/*.md 2>/dev/null || echo "No existing drafts"
# Get recent code changes for context
git diff --name-only $(git merge-base HEAD main)..HEAD 2>/dev/null | head -20
Capture:
- Docs structure:
docs/ subdirectories present
- Navigation system:
navigation.json, mint.json, or other config
- Tech stack hints: from file extensions and imports in changed files
- Existing drafts: to avoid duplicates
Step 1: Parse Input
Extract from the prompt:
- Topic: What to document (e.g., "authentication middleware")
- Content type: Detect from keywords:
| Keywords |
Type |
Skill |
| "tutorial", "learn", "getting started", "first", "onboarding", "introduction", "build a/your" |
Tutorial |
tutorial-docs |
| "how to", "guide", "steps", "configure", "set up" |
How-To |
howto-docs |
| "API", "reference", "parameters", "function", "endpoint" |
Reference |
reference-docs |
| "why", "how does it work", "concept", "background", "rationale", "design decision", "architecture", "trade-offs" |
Explanation |
explanation-docs |
These four types are the quadrants of the Diátaxis framework — Tutorial (learning), How-To (task), Reference (information), and Explanation (understanding). Decide with the two compass questions — action or cognition? acquisition or application? — detailed in docs-style/references/diataxis-compass.md. Two distinctions resolve most ambiguity:
- Tutorial vs. How-To both give action steps, but a Tutorial teaches a beginner through a guaranteed-to-succeed lesson (study), while a How-To directs a competent user toward a real goal (work). If the reader is learning the product for the first time, it's a Tutorial; if they already know it and want to get a task done, it's a How-To.
- Reference vs. Explanation both serve theoretical knowledge, but Reference states neutral facts to consult at the keyboard, while Explanation discusses reasoning and context to read away from it. If the request wants opinions, history, or trade-offs, it's Explanation; if it wants an authoritative spec, it's Reference.
If ambiguous, ask: "Should this be a Tutorial (learning by doing), a How-To guide (task completion), a Reference doc (technical lookup), or an Explanation (understanding the why behind a concept)?"
Step 2: Load Skills
Always load both:
- docs-style - Core writing principles
- Detected type skill:
Step 3: Analyze Code
Search the codebase for relevant code:
- Symbol search: Find functions, classes, types matching the topic
- File search: Locate related files by name patterns
- Reference search: Find usage examples
Gather:
- Function/method signatures
- Type definitions
- Existing comments/docstrings
- Usage patterns in tests or examples
Step 4: Generate Draft
Apply the loaded skills to generate documentation:
For Tutorial docs:
- Follow
tutorial-docs template structure
- Title names what the reader will build ("Build your first X"), not what they'll learn
- Use first-person plural — "In this tutorial, we will…" — to keep the teacher/learner narrative
- Give one clear path with no choices or alternatives
- After every step, state what the reader should see ("You should see…")
- Ruthlessly minimize explanation; link out to Explanation docs for the "why"
For Reference docs:
- Follow
reference-docs template structure
- Document all parameters with types
- Include complete, runnable examples from actual code
- Add Related section linking to connected symbols
For How-To docs:
- Follow
howto-docs template structure
- Start title with "How to"
- List concrete prerequisites
- Break into single-action steps
- Include verification section
For Explanation docs:
- Follow
explanation-docs template structure
- Frame the title around understanding a concept ("Understanding X"), not a task
- Open by stating what the reader will understand after reading
- Explain the why behind design decisions, not just what exists
- Discuss trade-offs honestly and acknowledge alternatives that were considered
- Write flowing prose for reading away from the keyboard — no steps to follow
Step 5: Write Draft
Create output path:
docs/drafts/{slug}.md
- Slug from topic: "WebSocket API" →
websocket-api.md
Ensure directory exists:
mkdir -p docs/drafts
Write the draft file (see Hard gates → Write gate: confirm file on disk before the next step)
Report to user:
## Draft Created
**File:** `docs/drafts/{slug}.md`
**Type:** Tutorial | How-To | Reference | Explanation
**Based on:** [list of analyzed symbols/files]
### Next Steps
1. Review the draft for accuracy
2. Add any missing context or examples
3. When ready, publish by invoking the **draft-docs** skill with `--publish docs/drafts/{slug}.md`
Step 6: End-of-Run Verification
Verify draft generation completed successfully:
# Confirm draft file exists
ls -la docs/drafts/{slug}.md
# Validate frontmatter (YAML header)
head -10 docs/drafts/{slug}.md | grep -E "^---$|^title:|^description:"
# Check markdown syntax (if markdownlint available)
markdownlint docs/drafts/{slug}.md 2>/dev/null || echo "markdownlint not available"
Verification Checklist:
If any verification fails, report the specific issue and offer to regenerate.
Mode 2: Publish Draft
Invoke the draft-docs skill with the --publish flag, e.g. draft-docs --publish docs/drafts/websocket-api.md.
Step 1: Read Draft
Read the draft file and extract:
- Title
- Content type (from frontmatter or structure)
Step 2: Determine Destination
Ask user which section:
Where should this document go?
1. **Tutorials** → `docs/tutorials/{slug}.md`
2. **API Reference** → `docs/api/{slug}.md`
3. **Guides** → `docs/guides/{slug}.md`
4. **How-To** → `docs/how-to/{slug}.md`
5. **Concepts / Explanation** → `docs/concepts/{slug}.md`
6. **Other** → Specify path
Step 3: Move File
mv docs/drafts/{slug}.md {destination}/{slug}.md
Step 4: Update Navigation
Check for docs/navigation.json and update navigation:
- Read current navigation.json
- Find appropriate navigation group
- Add new page entry
- Write updated navigation.json
Example update:
{
"navigation": [
{
"group": "API Reference",
"pages": [
"api/existing-page",
"api/websocket-api"
]
}
]
}
Step 5: Report
## Published
**From:** `docs/drafts/{slug}.md`
**To:** `{destination}/{slug}.md`
**Navigation:** Updated `docs/navigation.json`
The document is now live in your docs.
Step 6: End-of-Run Verification
Verify publish completed successfully:
# Confirm file moved to destination
ls -la {destination}/{slug}.md
# Confirm draft removed
ls docs/drafts/{slug}.md 2>/dev/null && echo "WARNING: Draft still exists" || echo "Draft cleaned up"
# Verify navigation updated
grep -q "{slug}" docs/navigation.json && echo "Navigation includes new page" || echo "WARNING: Navigation may need manual update"
# Check markdown syntax at final location
markdownlint {destination}/{slug}.md 2>/dev/null || echo "markdownlint not available"
Verification Checklist:
If any verification fails, report the specific issue and offer remediation steps.
Content Type Detection
Tutorial Indicators
- Prompt mentions: tutorial, learn, getting started, first, onboarding, introduction, "build a/your"
- Target is a beginner's first successful experience with the product
- User wants a guided, learn-by-doing lesson, not a task or a lookup
Reference Indicators
- Prompt mentions: API, endpoint, function, method, class, type, parameters, returns
- Target is a specific symbol or set of symbols
- User wants technical specification
How-To Indicators
- Prompt mentions: how to, guide, steps, configure, set up, integrate
- Target is a task or workflow
- User wants procedural instructions
Explanation Indicators
- Prompt mentions: why, how it works, concept, background, rationale, design decision, architecture, trade-offs
- Target is a concept or system the reader wants to understand, not operate
- User wants context and reasoning to read away from the keyboard, not steps to follow
Rules
- Always load
docs-style skill for every draft
- Generate to
docs/drafts/ - never directly to final location
- Include frontmatter with title and description
- Use realistic examples from actual codebase
- Reference analyzed symbols in draft metadata
- Preserve existing navigation structure when publishing
- Ask before overwriting existing files
Hard gates (sequenced)
Do not skip ahead: each Pass must be true before the next step. Use commands or explicit artifacts—not internal assurance.
Generate draft (Mode 1)
- Context gate — Pass: Step 0 commands ran (or equivalent) and you recorded at least one concrete outcome: e.g.
docs/ listing snippet, or explicit note that docs/ is missing and will be created.
- Type gate — Pass: Tutorial vs How-To vs Reference vs Explanation is decided using the keyword table and the two compass questions or the user’s explicit answer (quote or paraphrase with “user chose …”). Do not start Step 3: Analyze Code until this is locked.
- Skills gate — Pass: Before analysis, both are in play: docs-style and the type skill (tutorial-docs, howto-docs, reference-docs, or explanation-docs). In your run, name the two skills loaded (paths)—not “I reviewed writing guidelines.”
- Write gate — Pass: After writing the draft,
test -f docs/drafts/{slug}.md succeeds (or ls shows the file). Only then emit the Draft Created block.
Publish draft (Mode 2)
- Destination gate — Pass: User chose a destination (from the menu or a specific path). Resolve
{destination} to a full path; Pass when the parent directory exists (test -d "$(dirname "$path")" or project-appropriate check) and you are not overwriting an existing file without explicit user approval.
- Move gate — Pass: After
mv, the file exists at {destination}/{slug}.md (test -f) and navigation updates (if applicable) are applied before claiming Published.
1---2name: draft-docs3description: Generate first-draft technical documentation from code analysis4---5
6# Draft Docs
7
8Generate Tutorial, How-To, Reference, or Explanation documentation drafts to `docs/drafts/` for review before publishing. These are the four [Diataxis](https://diataxis.fr/) types — see [docs-style/references/diataxis-compass.md](../docs-style/references/diataxis-compass.md) for the full type-selection procedure.
9
10## Arguments
11
12- **Topic prompt:** Description of what to document (e.g., "Document the WebSocket API")
13- **--publish [file]:** Move reviewed draft to final location and update navigation
14
15## Mode 1: Generate Draft
16
17Invoke the **draft-docs** skill with a topic prompt, e.g. `draft-docs "Document the authentication middleware"`.
18
19### Step 0: Gather Context
20
21Before parsing input, gather project context:
22
23```bash
24# Check for existing docs structure
25ls -la docs/ 2>/dev/null || echo "No docs/ directory found"
26
27# Identify documentation framework
28ls docs/navigation.json docs/mint.json docs/docusaurus.config.js docs/mkdocs.yml 2>/dev/null | head -1
29
30# Check for existing drafts
31ls docs/drafts/*.md 2>/dev/null || echo "No existing drafts"
32
33# Get recent code changes for context
34git diff --name-only $(git merge-base HEAD main)..HEAD 2>/dev/null | head -20
35```
36
37**Capture:**
38- Docs structure: `docs/` subdirectories present
39- Navigation system: `navigation.json`, `mint.json`, or other config
40- Tech stack hints: from file extensions and imports in changed files
41- Existing drafts: to avoid duplicates
42
43### Step 1: Parse Input
44
45Extract from the prompt:
46
471. **Topic:** What to document (e.g., "authentication middleware")
482. **Content type:** Detect from keywords:
49
50| Keywords | Type | Skill |
51|----------|------|-------|
52| "tutorial", "learn", "getting started", "first", "onboarding", "introduction", "build a/your" | Tutorial | [tutorial-docs](../tutorial-docs/SKILL.md) |
53| "how to", "guide", "steps", "configure", "set up" | How-To | [howto-docs](../howto-docs/SKILL.md) |
54| "API", "reference", "parameters", "function", "endpoint" | Reference | [reference-docs](../reference-docs/SKILL.md) |
55| "why", "how does it work", "concept", "background", "rationale", "design decision", "architecture", "trade-offs" | Explanation | [explanation-docs](../explanation-docs/SKILL.md) |
56
57These four types are the quadrants of the [Diátaxis](https://diataxis.fr/) framework — Tutorial (learning), How-To (task), Reference (information), and Explanation (understanding). Decide with the two compass questions — *action or cognition? acquisition or application?* — detailed in [docs-style/references/diataxis-compass.md](../docs-style/references/diataxis-compass.md). Two distinctions resolve most ambiguity:
58
59- **Tutorial vs. How-To** both give action steps, but a Tutorial teaches a beginner through a guaranteed-to-succeed lesson (study), while a How-To directs a competent user toward a real goal (work). If the reader is learning the product for the first time, it's a Tutorial; if they already know it and want to get a task done, it's a How-To.
60- **Reference vs. Explanation** both serve theoretical knowledge, but Reference *states* neutral facts to consult at the keyboard, while Explanation *discusses* reasoning and context to read away from it. If the request wants opinions, history, or trade-offs, it's Explanation; if it wants an authoritative spec, it's Reference.
61
62If ambiguous, ask: "Should this be a Tutorial (learning by doing), a How-To guide (task completion), a Reference doc (technical lookup), or an Explanation (understanding the why behind a concept)?"
63
64### Step 2: Load Skills
65
66Always load both:
67
681. [docs-style](../docs-style/SKILL.md) - Core writing principles
692. Detected type skill:
70 - [tutorial-docs](../tutorial-docs/SKILL.md) for Tutorial
71 - [howto-docs](../howto-docs/SKILL.md) for How-To
72 - [reference-docs](../reference-docs/SKILL.md) for Reference
73 - [explanation-docs](../explanation-docs/SKILL.md) for Explanation
74
75### Step 3: Analyze Code
76
77Search the codebase for relevant code:
78
791. **Symbol search:** Find functions, classes, types matching the topic
802. **File search:** Locate related files by name patterns
813. **Reference search:** Find usage examples
82
83Gather:
84- Function/method signatures
85- Type definitions
86- Existing comments/docstrings
87- Usage patterns in tests or examples
88
89### Step 4: Generate Draft
90
91Apply the loaded skills to generate documentation:
92
93**For Tutorial docs:**
94- Follow `tutorial-docs` template structure
95- Title names what the reader will build ("Build your first X"), not what they'll learn
96- Use first-person plural — "In this tutorial, we will…" — to keep the teacher/learner narrative
97- Give one clear path with no choices or alternatives
98- After every step, state what the reader should see ("You should see…")
99- Ruthlessly minimize explanation; link out to Explanation docs for the "why"
100
101**For Reference docs:**
102- Follow `reference-docs` template structure
103- Document all parameters with types
104- Include complete, runnable examples from actual code
105- Add Related section linking to connected symbols
106
107**For How-To docs:**
108- Follow `howto-docs` template structure
109- Start title with "How to"
110- List concrete prerequisites
111- Break into single-action steps
112- Include verification section
113
114**For Explanation docs:**
115- Follow `explanation-docs` template structure
116- Frame the title around understanding a concept ("Understanding X"), not a task
117- Open by stating what the reader will understand after reading
118- Explain the *why* behind design decisions, not just what exists
119- Discuss trade-offs honestly and acknowledge alternatives that were considered
120- Write flowing prose for reading away from the keyboard — no steps to follow
121
122### Step 5: Write Draft
123
1241. **Create output path:**
125 - `docs/drafts/{slug}.md`
126 - Slug from topic: "WebSocket API" → `websocket-api.md`
127
1282. **Ensure directory exists:**
129 ```bash
130 mkdir -p docs/drafts
131 ```
132
1333. **Write the draft file** (see **Hard gates** → Write gate: confirm file on disk before the next step)
134
1354. **Report to user:**
136 ```markdown
137 ## Draft Created
138
139 **File:** `docs/drafts/{slug}.md`
140 **Type:** Tutorial | How-To | Reference | Explanation
141 **Based on:** [list of analyzed symbols/files]
142
143 ### Next Steps
144
145 1. Review the draft for accuracy
146 2. Add any missing context or examples
147 3. When ready, publish by invoking the **draft-docs** skill with `--publish docs/drafts/{slug}.md`
148 ```
149
150### Step 6: End-of-Run Verification
151
152Verify draft generation completed successfully:
153
154```bash
155# Confirm draft file exists
156ls -la docs/drafts/{slug}.md
157
158# Validate frontmatter (YAML header)
159head -10 docs/drafts/{slug}.md | grep -E "^---$|^title:|^description:"
160
161# Check markdown syntax (if markdownlint available)
162markdownlint docs/drafts/{slug}.md 2>/dev/null || echo "markdownlint not available"
163```
164
165**Verification Checklist:**
166- [ ] Draft file created at `docs/drafts/{slug}.md`
167- [ ] Frontmatter includes `title` and `description`
168- [ ] Content type matches detected type (Tutorial, How-To, Reference, or Explanation)
169- [ ] Code examples are complete and runnable (Tutorial/How-To/Reference); concepts grounded in real design decisions (Explanation)
170- [ ] Tutorial drafts give a single path with observable "You should see…" outcomes at each step
171- [ ] All analyzed symbols referenced in draft
172
173If any verification fails, report the specific issue and offer to regenerate.
174
175## Mode 2: Publish Draft
176
177Invoke the **draft-docs** skill with the `--publish` flag, e.g. `draft-docs --publish docs/drafts/websocket-api.md`.
178
179### Step 1: Read Draft
180
181Read the draft file and extract:
182- Title
183- Content type (from frontmatter or structure)
184
185### Step 2: Determine Destination
186
187Ask user which section:
188
189```markdown
190Where should this document go?
191
1921. **Tutorials** → `docs/tutorials/{slug}.md`
1932. **API Reference** → `docs/api/{slug}.md`
1943. **Guides** → `docs/guides/{slug}.md`
1954. **How-To** → `docs/how-to/{slug}.md`
1965. **Concepts / Explanation** → `docs/concepts/{slug}.md`
1976. **Other** → Specify path
198```
199
200### Step 3: Move File
201
202```bash
203mv docs/drafts/{slug}.md {destination}/{slug}.md
204```
205
206### Step 4: Update Navigation
207
208Check for `docs/navigation.json` and update navigation:
209
2101. **Read current navigation.json**
2112. **Find appropriate navigation group**
2123. **Add new page entry**
2134. **Write updated navigation.json**
214
215Example update:
216```json
217{
218 "navigation": [
219 {
220 "group": "API Reference",
221 "pages": [
222 "api/existing-page",
223 "api/websocket-api"
224 ]
225 }
226 ]
227}
228```
229
230### Step 5: Report
231
232```markdown
233## Published
234
235**From:** `docs/drafts/{slug}.md`
236**To:** `{destination}/{slug}.md`
237**Navigation:** Updated `docs/navigation.json`
238
239The document is now live in your docs.
240```
241
242### Step 6: End-of-Run Verification
243
244Verify publish completed successfully:
245
246```bash
247# Confirm file moved to destination
248ls -la {destination}/{slug}.md
249
250# Confirm draft removed
251ls docs/drafts/{slug}.md 2>/dev/null && echo "WARNING: Draft still exists" || echo "Draft cleaned up"
252
253# Verify navigation updated
254grep -q "{slug}" docs/navigation.json && echo "Navigation includes new page" || echo "WARNING: Navigation may need manual update"
255
256# Check markdown syntax at final location
257markdownlint {destination}/{slug}.md 2>/dev/null || echo "markdownlint not available"
258```
259
260**Verification Checklist:**
261- [ ] Document moved to `{destination}/{slug}.md`
262- [ ] Draft removed from `docs/drafts/`
263- [ ] Navigation file updated with new page entry
264- [ ] No broken links in navigation structure
265- [ ] Document accessible at expected URL path
266
267If any verification fails, report the specific issue and offer remediation steps.
268
269## Content Type Detection
270
271### Tutorial Indicators
272
273- Prompt mentions: tutorial, learn, getting started, first, onboarding, introduction, "build a/your"
274- Target is a beginner's first successful experience with the product
275- User wants a guided, learn-by-doing lesson, not a task or a lookup
276
277### Reference Indicators
278
279- Prompt mentions: API, endpoint, function, method, class, type, parameters, returns
280- Target is a specific symbol or set of symbols
281- User wants technical specification
282
283### How-To Indicators
284
285- Prompt mentions: how to, guide, steps, configure, set up, integrate
286- Target is a task or workflow
287- User wants procedural instructions
288
289### Explanation Indicators
290
291- Prompt mentions: why, how it works, concept, background, rationale, design decision, architecture, trade-offs
292- Target is a concept or system the reader wants to understand, not operate
293- User wants context and reasoning to read away from the keyboard, not steps to follow
294
295## Rules
296
297- Always load `docs-style` skill for every draft
298- Generate to `docs/drafts/` - never directly to final location
299- Include frontmatter with title and description
300- Use realistic examples from actual codebase
301- Reference analyzed symbols in draft metadata
302- Preserve existing navigation structure when publishing
303- Ask before overwriting existing files
304
305## Hard gates (sequenced)
306
307Do not skip ahead: each **Pass** must be true before the next step. Use commands or explicit artifacts—not internal assurance.
308
309### Generate draft (Mode 1)
310
3111. **Context gate — Pass:** Step 0 commands ran (or equivalent) and you recorded at least one concrete outcome: e.g. `docs/` listing snippet, or explicit note that `docs/` is missing and will be created.
3122. **Type gate — Pass:** Tutorial vs How-To vs Reference vs Explanation is decided using the keyword table and the two compass questions **or** the user’s explicit answer (quote or paraphrase with “user chose …”). Do not start **Step 3: Analyze Code** until this is locked.
3133. **Skills gate — Pass:** Before analysis, both are in play: [docs-style](../docs-style/SKILL.md) and the type skill ([tutorial-docs](../tutorial-docs/SKILL.md), [howto-docs](../howto-docs/SKILL.md), [reference-docs](../reference-docs/SKILL.md), or [explanation-docs](../explanation-docs/SKILL.md)). In your run, name the two skills loaded (paths)—not “I reviewed writing guidelines.”
3144. **Write gate — Pass:** After writing the draft, `test -f docs/drafts/{slug}.md` succeeds (or `ls` shows the file). Only then emit the **Draft Created** block.
315
316### Publish draft (Mode 2)
317
3181. **Destination gate — Pass:** User chose a destination (from the menu or a specific path). Resolve `{destination}` to a full path; **Pass** when the parent directory exists (`test -d "$(dirname "$path")"` or project-appropriate check) **and** you are not overwriting an existing file without explicit user approval.
3192. **Move gate — Pass:** After `mv`, the file exists at `{destination}/{slug}.md` (`test -f`) and navigation updates (if applicable) are applied before claiming **Published**.