write-the-page
Context load
Run rainmaker context --check first. It prints what exists, what is stale, and exits 1 if anything this skill requires is missing.
Then read, in this order:
context/business.mdin full. If absent, stop: "No business context. Runrainmaker audit, then theknow-my-buyerskill."context/voice.mdif this skill writes prose. If absent, stop and say so.context/glossary.mdif this skill names products, features or competitors.data/strategy.jsonif this skill reads or writes strategy.- Only the
data/files listed in this skill's Consumes table. Never crawl or call an API the core already covers.
If strategy.json.context_hash does not match the current hash of context/business.md, say exactly:
"Business context was edited after the strategy was written. Re-run know-my-buyer, or run rainmaker context --sync to accept the prose as authoritative."
Then stop.
If context/business.md carries confidence: stub, continue, and stamp every output with: "Built on a stub context. Nothing in it came from a buyer. Run know-my-buyer to replace it."
Consumes
| File | Why | If missing |
|---|---|---|
briefs/<slug>.md |
everything the draft must cover | "No brief for . Run brief-my-writer first." |
context/voice.md |
real samples to match | required, see context load |
data/strategy.json |
proof ids to verify against | run know-my-buyer |
Produces
drafts/<slug>.md.
Refuses when
No brief exists for the requested slug: "No brief for . Run brief-my-writer first. Writing without a brief produces content nobody can defend at review."
Procedure
- Read the voice samples in
context/voice.mdbefore writing a sentence. Match their sentence-length distribution and paragraph rhythm, not a description of the voice. - Write to the brief's standalone claims first, then build the piece around them, so the extractable sentences are load-bearing rather than bolted on.
- Every claim that is not common knowledge carries a proof id from the brief or a link. Unsourced claims get removed, not softened into a vaguer unsourced claim.
- Use the quoted buyer language verbatim at least once in the first 200 words.
- Include every internal link the brief named, from the source page the brief specified.
- Run the slop check from
skills/_shared/voice-rules.mdagainst your own draft before returning it. Fix violations, then report what was fixed.
Decision rules
- Never invent a number, a statistic, or a customer detail. If the brief did not supply it and it is not common knowledge, the sentence does not survive.
- The em-dash rule applies to your own output, not just to review comments about it.
- A draft that ignores a standalone claim from the brief is incomplete; go back and include it rather than noting the omission.
Output
The draft itself, in Markdown, plus a short note:
Draft written: <word count> words.
Slop check: <passed / fixed n issues before returning>
Buyer language used: "<quote>" (first 200 words: yes/no)
Brief claims covered: <n> of <n>
Done when
The slop check passes, every brief claim is covered or explicitly flagged as cut and why, the buyer-language quote appears early, and every internal link the brief named is present.