Blog Post
Builds one post. The post is both an asset that earns search traffic and the place
your social links land, and those two readers behave very differently — references/writing-rules.md
opens with how to serve both in one page.
Mode
| Request | Mode |
|---|---|
| The post will be pasted into a CMS editor by a browser agent | handoff |
| Everything else | draft package |
Procedure
1. Topic and keyword
Get the source material. Prefer a topic-brief output; otherwise the links, text, or files
the user provides. If there is no input, do not invent one — ask.
Read references/keyword.md and choose a focus keyword and title candidates. If the user
supplies a keyword, it is fixed as the primary — don't second-guess it. Titles are a promise
first; verified keywords get bundled in only where they read naturally.
2. Facts and status
Take facts from primary sources only: the official page, the public notice, the regulation, the disclosure, the first-party document. Benchmarks and search results are for structure and keyword research — never for eligibility, amounts, deadlines, or steps. Values you can't confirm come out.
If the post walks someone through applying for something, actually open the official site and confirm the menu names, the order of steps, what they need to hand, and how they know it worked. If you couldn't verify a deep link, use the site's home page in the call to action — and start the walkthrough from that same first screen.
Label every key value: in force / passed, not yet in effect / announced, not final /
under discussion / unsupported. If you see any sign of a revision, amendment, new
scheme, or second round, read references/status.md and go find a separate source for
the current rules and for the change.
Interrogate any number that's making the rounds. Is it the actual rate, or a blended figure, or the maximum, or one worked example? Name it correctly.
3. Structure
Read references/patterns.md. Choose one primary pattern and add only the supporting
modules you need. Don't blend two patterns — if they overlap, pick based on what the reader
does after reading, and keep that pattern's ending.
4. Draft in three passes
Read references/voice.md, then references/writing-rules.md.
- Fact map — every claim gets a value, a status, a checked-on date, and a primary source.
- Reader-decision map — what they'll misunderstand, what they're deciding between, what changes by situation, what to do now versus later.
- Sentences — connect the first two maps in the voice from
voice.md.
Do not start by writing finished sentences. That produces either a list of facts in paragraph form or friendliness with nothing underneath.
For posts about money, tax, policy, or public programs, use the disclosure templates in
writing-rules.md: a short scope note at the top, a detailed one at the bottom carrying the
checked-on date and who decides what. Don't repeat generic disclaimers mid-article.
5. Check
python scripts/check_post.py <path to html> --pattern <pattern> --title "<title>" --keywords "<verified,keywords>"
Add --slug once the slug is set, --featured <path> if you made a lead image, and
--handoff <file> in handoff mode. Those three fail in different places from the body HTML,
so they're checked separately.
For a draft you haven't written to a file, pipe the HTML and pass - as the path.
cat draft.html | python scripts/check_post.py - --pattern <pattern> --title "<title>"
Both commands assume you're in this skill's folder. From elsewhere, call
python skills/blog-post/scripts/check_post.py .... "Couldn't find the script" and
"failed the check" are different outcomes — report them differently.
Fix and rerun until it passes. If you didn't actually run it, write not run and why —
never passed. The script only sees what a script can see; finish by reading the draft
against the quality bar in references/writing-rules.md yourself.
6. Output
Produce the mode's output, below.
Conflict order
- Facts verified against primary sources, their status, user instructions, safety
- The reader-centered voice in
voice.md - The primary pattern's ending and its supporting modules
- Markup, disclosure, and ad rules in
writing-rules.md - Any individual example's phrasing
Examples demonstrate principles. Never reuse an example's figures, claims, or personal anecdotes as if they were facts.
Search visibility
Public posts are indexable by default. Do not put noindex, no-index, or any
search-exclusion instruction into the body, the SEO fields, or the handoff prompt unless the
user explicitly asks for it.
Publishing and indexing are different axes. "Save it as a draft" defers publication; it does not mean "hide from search". Don't expand a hold-off instruction into an index block — in most CMSs the robots setting is stored per post and survives until publication.
Never damage a sentence for SEO. You control exactly four fields:
- One focus keyword
- A natural title carrying verified keywords
- The meta description
- The slug — rules in the
Slugsection ofreferences/keyword.md. Never leave a non-ASCII title as the URL
If the research supports it, bundle three to five verified keywords into the title naturally. If that reads badly, drop to one or two and say why. Don't then sprinkle those words through the body.
If your CMS shows an SEO score, measure it in the browser. Raise it by adjusting the title, meta, slug, links, and image alt text — never by padding the body or stuffing keywords. If you didn't measure it, call it a target, not a result.
Output -- draft package
- Primary pattern / supporting modules used / why / benchmarks read
- Title, focus keyword, meta description, slug
- Which keywords are bundled into the title, and the evidence for each
- If fewer than three, say whether it was readability or weak evidence
- Body HTML
- Lead image — an actual file, or a source you have permission to use, plus alt text and
attribution. Follow the
Lead image specinwriting-rules.md; don't invent a new style per post - In-body image plan — position / content / source / alt text
- Calls to action and links — official sources, internal link positions
- Short promo message, if the post is going out on a channel
- Check results — script output plus anything held back on facts, status, or upload
Output -- handoff
Use the template in references/handoff.md verbatim. Fill the bracketed slots and change
nothing else. Don't compose the prompt freehand — when it varies per post, instructions
go missing, and missing instructions become publishing accidents.
Check the prompt itself before you hand it over:
python scripts/check_post.py <html> --pattern <pattern> --title "<title>" \
--keywords "<keywords>" --slug "<slug>" --featured <image> --handoff <prompt file>
Never invent a URL, never call a failed upload a success, and never instruct anything to publish without the user's explicit go-ahead.
Boundaries
- Publish only when the user explicitly asks.
- Don't turn a post into personalized legal, financial, medical, or investment instructions.
- Verified information, real product names, neutral comparisons, worked examples, general decision criteria, and official links are all fine.