---
name: fradser/storm-write
source: https://app.decimal.ai/s/fradser-storm-write@1/SKILL.md
source_sha256: 2c30fbd9a5fa
---

# /storm:write

Phase 3 of the STORM pipeline. Writes each outline section in parallel (one Task subagent per section), each grounded in top-k relevant sources from the research information table, with inline `[n]` citations.

## CRITICAL: Prerequisites

- Load `storm-engine` via the Skill tool.
- `outline.md` MUST exist (phase 2 complete). If absent, stop and instruct the user to run `/storm:outline` first.

## Completion Contract

This phase is complete iff `article.md` exists and every outline section (except Introduction/Conclusion/Summary placeholders) has body text. If `--force` is not set and it exists, skip and exit early.

## Procedure

1. Resolve output dir.
2. Read `outline.md` and `research/sources.json`. Index sources for retrieval (simple: rank by keyword/heading overlap with the section title).
3. **Identify sections** to write — skip any whose heading is exactly "Introduction", "Conclusion", or "Summary" (these are filled in `polish`).
4. **Parallel writing** — for each section, launch ONE Task subagent (single message, parallel). Each subagent:
   - Receives: topic, section heading, top-k relevant sources (default `--retrieve-top-k` 3), the full outline for context.
   - Writes the section body with inline `[n]` citations mapping to `sources.json` ids.
   - If no relevant sources, writes uncited and marks `<!-- TODO: no source -->`.
   - Returns the section markdown.
5. **Assemble** — concatenate sections in outline order under their headings into `article.md`. Preserve the heading hierarchy from `outline.md`.
6. Verify every non-placeholder section has body. Update `run-config.json`: `phases.write = "completed"`, section count, any TODO-flagged sections.

## Citation Rules

- Only cite `[n]` where `n` is an existing `id` in `sources.json`. Never mint a new id here.
- Place `[n]` immediately after the claim it supports. Multi-source claims use `[1][2]`.
- Do not cite in placeholder sections.

## Output

Report: number of sections written, number of citations used, list of sections flagged as TODO (no source), and the path to `article.md`.