Progressive three-pass writing technique — scaffold, draft, refine — with quality gates and time budgets. Use when user asks to write, draft, compose, produce, create, or author a report, analysis, blog post, article, architecture doc, ADR, documentation, guide, executive brief, or technical writeup. Produces a brief card, structured outline, complete draft, and refined final deliverable.
A graduated writing workflow that produces any output in three passes — scaffold (10–30 min), draft (30 min–4 hr), refine (15 min–1 hr) — with mandatory quality gates so structure precedes prose and prose precedes polish.
Critical: Declare output type, audience, thesis, and word target before Pass 1 begins. All tables below key on output type — writing without declaring it makes guidance ambiguous.
Critical: Each pass is gated. Record a written go/no-go decision before proceeding to the next pass. A pass completed without a gate decision does not count.
Critical: For outputs exceeding 500 lines, defer writing mechanics to .claude/rules/iterative-write.md. This skill governs what to write at each depth; iterative-write.md governs how bytes are emitted.
Critical: When source material exceeds 600 lines AND the output exceeds 500 lines, apply .claude/rules/iterative-processing.md. Do not read all sources first and then write everything.
Critical: Do not skip Pass 3. The refine pass catches errors the drafter is blind to. The gate after Pass 2 may defer Pass 3, but must never silently omit it.
Emit a brief card before writing any prose:
Output: <working title>
Type: <technical-report | blog-article | architecture-doc | documentation-guide | executive-brief>
Audience: <who reads this, their expertise level, what they need>
Thesis: <one-sentence proposition or central recommendation>
Word target: <e.g. "2,000 words" or "1 page">
Budget: <wall-clock ceiling, e.g. "2 hr">
Reference: <load the matching reference file from Bundled Resources>
The Thesis constrains every section — every claim must trace back to it. A vague thesis produces a wandering draft.
The Audience drives the Presentation P: vocabulary level, assumed knowledge, required definitions, and appropriate formality.
List all inputs the piece will draw on: data, prior documents, source code, research, interviews, benchmarks.
For each source, note:
If any source exceeds 600 lines, build a chunk map per .claude/rules/iterative-read.md before reading it.
Assess whether .claude/rules/iterative-processing.md applies: source material >600 lines AND intended output >500 lines → plan READ-PROCESS-WRITE triplets for Pass 2.
Using the reference file for the declared output type, build a complete structural outline. Produce the scaffold:
[evidence: source / data point] placed at each claim siteAnswer the Five Ps at outline level using the table in the Reference Tables section below.
Emit the scaffold and the Five Ps assessment.
Gate — Pass 1: Can a second writer produce the intended piece from this outline without asking a single clarifying question?
Write complete prose for every section in the scaffold. The pass is complete when zero placeholders, stubs, or [evidence: ...] markers remain.
While drafting:
For outputs exceeding 500 lines, apply .claude/rules/iterative-write.md:
When source material is also large, apply .claude/rules/iterative-processing.md READ-PROCESS-WRITE triplets — do not batch all source reading before writing begins.
Gate — Pass 2: Can a reader unfamiliar with the background understand the full argument using only this draft, without supplementary material?
Re-read the full draft as a skeptical, hostile reviewer — someone who starts unconvinced and looks for reasons to dismiss the piece. Apply the Pass-3 checklist from the reference file for the declared output type.
While refining:
Assemble the final output in this order:
If the assembled output exceeds approximately 500 lines, apply .claude/rules/iterative-write.md Sequential strategy to emit each major section independently.
After Pass 2 or Pass 3, evaluate: is there anything non-obvious here worth preserving for a future writing session?
Qualifying examples:
Write qualifying insights to .claude/agent-memory/ per .claude/rules/memory-update.md. Record the outcome:
Memory: <written — <topic> to <file> | skipped — nothing qualifies | skipped — already present>
Do not manufacture entries. One genuine insight outweighs five forced ones.
| P | Technical report | Blog article | Architecture doc | Documentation guide | Executive brief |
|---|---|---|---|---|---|
| Purpose | Establish a finding with evidence | Teach, persuade, or provoke thought | Record a decision with full rationale | Enable a task to be completed | Force or inform a decision |
| Persona | Peer analyst or domain reviewer | Developer or practitioner | Engineering team and future maintainers | End user or operator | Executive or stakeholder |
| Proposition | Falsifiable finding or recommendation | Opinionated take or tutorial thesis | "We chose X because Y" | "After reading, you can do Z" | "We recommend X; approve by date" |
| Proof | Data, citations, methodology section | Code examples, benchmarks, lived experience | Alternatives table, tradeoff matrix | Working examples, testable steps | Key metrics, risk summary |
| Presentation | Numbered sections, formal tone, citations | Hook, subheadings, scannable, conversational | Status/Context/Decision/Consequences | Prerequisites, steps, expected output | Recommendation-first, one page, no jargon |
| Output type | Pass 1 — what to scaffold | Pass 2 — what to draft | Pass 3 — how to refine |
|---|---|---|---|
| Technical report | Outline with evidence map; each stub names its data source | Full prose with citations; methodology section required | Verify every claim; challenge methodology; cut all hedging |
| Blog article | Hook + subheading skeleton; code example plan with I/O | Full prose; hook in first 50 words; all code examples inline | Read-aloud test; cut 15%; sharpen hook; verify code runs |
| Architecture doc | Status/Context/Decision/Alternatives/Consequences skeleton | Full prose per section; tradeoff table with ≥3 alternatives | Argue why each rejected alternative might be better; verify constraints |
| Documentation guide | Task list with prerequisites; one section per task | Step-by-step prose; every step has expected output | Walk through as a novice; verify steps produce stated output; add error cases |
| Executive brief | Recommendation + 3 supporting points; identify the key metric | Complete brief within word target; recommendation in sentence 1 | Cut to one page; remove all jargon; 2-minute actionability test |
| Output type | Pass 1 | Pass 2 | Pass 3 |
|---|---|---|---|
| Technical report | 15–30 min | 1–3 hr | 30–60 min |
| Blog article | 10–20 min | 30–90 min | 15–30 min |
| Architecture doc | 15–30 min | 1–2 hr | 30–60 min |
| Documentation guide | 20–40 min | 1–4 hr | 30–60 min |
| Executive brief | 10–15 min | 15–30 min | 15–30 min |
User: Write an ADR for migrating our API gateway from Express to Fastify.
Actions:
1. Step 1 — Brief card: type=architecture-doc, audience=backend engineering team (senior engineers
familiar with Node.js, unfamiliar with Fastify internals), thesis="Fastify is the right migration
target for 3x throughput at lower memory cost", word target=1,500 words, budget=2h.
Load references/architecture-doc.md.
2. Step 2 — Sources: internal Express benchmark (220 lines), Fastify docs (Pass-1 reading complete),
migration risk register (80 lines). Total ~300 lines; iterative-processing.md not needed.
3. Step 3 — Pass 1 (18 min): Scaffold with Status/Context/Decision/Alternatives/Consequences.
Evidence markers: [evidence: express-fastify-benchmark.csv] in Decision, [evidence: risk-register]
in Consequences. Alternatives listed: Express (status quo), Fastify, Hono, custom thin wrapper.
Five Ps: Purpose=guide migration decision, Persona=backend team assuming Node expertise,
Proposition="Fastify best balance of speed + ecosystem", Proof=benchmarks+plugin audit,
Presentation=ADR format with tradeoff table. Gate: proceed — all alternatives covered.
4. Step 4 — Pass 2 (55 min): Full prose per section. Tradeoff table: Express/Fastify/Hono/custom
on axes of throughput, ecosystem, migration cost, team familiarity. Consequences includes
plugin-ecosystem gap as a listed risk. Sequential strategy (ADR sections are independent).
Gate: proceed to Pass 3 — need to stress-test alternatives before publishing.
5. Step 5 — Pass 3 (25 min): Challenged "3x throughput" — added caveat for middleware-heavy routes
where gap narrows to 1.8x. Argued Hono's case — found 6 internal plugins would need rewriting;
rejection confirmed with evidence. Cut 180 words of hedging. Final: 1,380 words.
6. Step 6 — Brief card + ADR emitted. Under 500 lines; iterative-write.md not needed.
7. Step 7 — Memory: "Fastify migration: plugin ecosystem gap is real risk; benchmark caveat needed
for middleware-heavy routes" written to .claude/agent-memory/main_agent/patterns.md.
8. Step 8 — Validate: all checklist items pass. 1h38m of 2h budget.
Result: Brief card, ADR with Status/Context/Decision/Alternatives/Consequences, tradeoff table
(4 alternatives × 4 criteria), migration phases with rollback, risk register. One memory entry saved.
Error: Draft wanders across tangential topics and the argument is unclear. Cause: Writer skipped Pass 1 scaffolding and began drafting without an outline. Solution: Return to Step 3. Build the scaffold first. Every section stub must trace back to the thesis in the brief card. Sections that don't map to the thesis are cut at scaffold stage, not during drafting.
Error: Final output reads as a rough draft — weak transitions, unsupported claims, inconsistent terminology. Cause: Writer skipped Pass 3 or treated it as light copy-editing rather than adversarial reading. Solution: Pass 3 is adversarial reading, not formatting. Re-enter at Step 5. Challenge every claim against its evidence; actively cut 10–15% of words; rewrite transitions for logical flow.
Error: Output is 3× the stated word target; scope creep during drafting. Cause: No word target in the brief card, or scaffold included sections beyond the thesis scope. Solution: Return to the brief card and set a concrete word target. In the scaffold, tag each section "must include" vs. "nice to have". Cut all "nice to have" sections before drafting begins.
Error: Technical piece uses jargon the audience doesn't understand; readers disengage. Cause: Persona in the brief card was left vague ("the team" or "developers") instead of naming a specific reader with a known knowledge level. Solution: Name a specific reader in the brief card. Persona must be concrete enough to predict what they already know and what requires definition. Pass 3's audience register check then has a clear target.
Error: Blog post has well-researched content but low engagement; readers stop before the end.
Cause: Pass 1 did not plan a hook, and Pass 3 did not run the read-aloud test.
Solution: The blog-article reference file requires a hook in the first 50 words and a read-aloud test in Pass 3. Re-enter at Step 5 using references/blog-article.md.
three-pass-writing to the name frontmatter field exactly.references/..claude/rules/iterative-write.md..claude/rules/iterative-processing.md when source material exceeds 600 lines AND output exceeds 500 lines..claude/rules/memory-update.md and record the decision.[evidence: ...] markers remain after Pass 2 is declared complete.README.md in the skill folder.