Write Blog logo

Write Blog

Community
tamdogood
write-blog

Write and ship a blog post for your project that reads like a human wrote it and pulls SEO traffic to your site. Use when a contributor wants to draft, edit, or publish a blog post, add a post to the site, write about the project for search/traction, or make an existing draft sound less like AI. Enforces the house voice (no em dashes), picks a non-cannibalizing angle, uses ASD-STE100 Simplified Technical English for technical prose, wires the post into your site, and runs the humanizer pass before shipping.

Overview

Publishertamdogood
Repositorybuilder-essential-skills
Skill namewrite-blog
Stars
225
Forks
8
Bundled files
6
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by tamdogood on GitHub. Read the source before you install it.

Installation

Install the Write Blog AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/tamdogood/builder-essential-skills/tree/main/skills/write-blog
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/tamdogood/builder-essential-skills.git /tmp/builder-essential-skills
mkdir -p .claude/skills
cp -r /tmp/builder-essential-skills/skills/write-blog .claude/skills/write-blog
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Write Blog in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Write Blog on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Write Blog is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Write a blog post

You are helping a contributor write a blog post for the project's website. The bar: it reads like a person wrote it, it ranks for a search cluster no other post already owns, and it ships wired correctly into the site with the build green.

Use ASD-STE100 Simplified Technical English (STE) for the post's technical and instructional prose. Use short, direct sentences, consistent terms, clear actions, and the approved meaning of technical words when the STE dictionary is available. Do not use idioms, slang, figurative language, or synonym changes that can make a technical term unclear. Preserve exact code, commands, identifiers, product names, and quotations. The post can keep a human opinion and a concrete example, but clarity takes priority over rhythm or decoration. Do not claim strict STE conformance without checking the current ASD-STE100 issue and dictionary.

This skill exists so every contributor writes in the same voice, picks non-overlapping topics, and passes the same anti-AI-slop gate, whether or not they already know the house rules.

The one rule that gets a post rejected

No em dashes (—) or en dashes (–). Ever. The house voice bans them. Use a period, a comma, or "so"/"because"/parentheses instead. A single dash in a draft is a hard fail. There is a scanner: run bash check.sh <file> (in this skill's folder) on any draft before you call it done.

Workflow

Do these in order. Don't skip the angle check or the humanizer pass.

1. Read the ground truth first

Before writing a word, read what already exists so you match voice and don't cannibalize keywords:

  • Your site's post registry / index. Whatever lists every published post (a registry file, a content collection, a CMS list, or the frontmatter across your blog's source directory). This is the live record of every published post and the angle it owns. Read every slug, title, description, and tag set.
  • One or two full published posts (the prose sources) to absorb the voice.
  • reference/angles.md (in this skill folder) for how to pick an angle that doesn't collide, plus the topics still untapped.
  • reference/voice.md for the house voice and the anti-AI checklist, self-contained.
  • reference/craft.md for the writing craft: leads that win the click, spine structure, and which creative-writing skill to reach for at each stage.
  • reference/seo.md for on-page keyword placement, internal linking, verifying the machine-readable SEO, and the post-ship distribution loop that earns the first backlinks.

2. Pick and pitch the angle

Every post must own a distinct search cluster. Two posts fighting for the same keywords cannibalize each other. From your post index and reference/angles.md, pick an angle no shipped post already owns, then pitch it back to the contributor in one line before drafting: the working title, the one-sentence thesis, and the 3-5 keyword phrases it targets. Confirm before you write the body. If they gave you a topic that collides with an existing post, say so and propose the adjacent-but-distinct angle instead.

3. Outline

A good post has a spine, not a listicle. Read reference/craft.md before you outline; the lead and the H2-spine are 80% of whether the post gets finished and ranked. Structure:

  • A lead (description + opening) that names a concrete, specific problem the reader has. Not "AI agents are transforming collaboration." Something like "Two agents can talk about a change all day. Handing over the change itself, byte for byte, is a different problem."
  • 4-7 sections, each with a claim and real code, real commands, or a real number from your project backing it. Read the actual source and docs of your project and quote it accurately. Made-up APIs are worse than no code.
  • A "what this is NOT" or honest-limitations beat. The voice is a little contrarian and admits what's deferred. That honesty is what makes it not read like marketing.
  • A close that lands the thesis without a generic "in conclusion, the future is bright" wrap-up. End on a concrete thing the reader can do or check.

4. Draft

Write the prose as plain markdown first, in your blog's source directory (the source of truth). Follow reference/voice.md, reference/craft.md, and the STE guidance above as you write. Keep it honest, concrete, and grounded in real project code. Use one clear opinion and support it with evidence. If /direct-response-copy is available in your environment, run it on the title, description, and closing CTA (only those three surfaces, not the body).

5. Humanize (mandatory)

Run a humanizer pass on the draft: if /humanizer is available in your environment, invoke it on the draft. If it isn't available, apply the checklist in reference/voice.md yourself. Then run an STE pass. Check sentence length, clear subjects and actions, consistent technical terms, approved word meanings when available, and intentional exceptions. Strip: significance inflation, promotional adjectives, the rule of three, "-ing" tail analyses, negative parallelisms ("it's not X, it's Y"), synonym cycling, hedging, and every dash. For headline/description/CTA polish you may also pull in /direct-response-copy if it's available.

Then run bash check.sh <draft-file> and fix anything it flags.

6. Wire it into the site

Follow reference/wiring.md. In short: register the post in whatever index/registry your blog uses, add the body in your blog's format, make sure the SEO surfaces (sitemap, RSS, OG/Twitter cards, JSON-LD) include the new post, add the cover image, and build. For keyword placement (title/description/first-H2/tags), internal-link count, and anchor-text rules, follow reference/seo.md. Add a reciprocal inbound link from the most related existing post.

7. Verify before done

Your site's build command must be green. Then smoke-test the post: confirm the post page, the cover image, the blog index, the sitemap, and the RSS feed all load and include the new post. View source on the post and confirm the meta description, OG/Twitter tags, and BlogPosting JSON-LD actually emitted with the right values (reference/seo.md lists what to check). Re-run bash check.sh on the final markdown. Only then is the post itself done.

8. Distribute (this is what earns the traction)

A correct post with no inbound links does not rank. After it ships, seed the first signal: if /x-tweet is available in your environment, run it on the post's core insight for a thread that teaches the idea and links the post; cross-link the post from the relevant docs; and answer the real question it solves where people are already asking it. See the distribution loop in reference/seo.md. Always link the canonical production URL (<your-site-url>/blog/<slug>), never a staging or preview host.

Guardrails

  • Never invent project APIs, flags, or numbers. Read the source and quote it.
  • Never weaken the house voice to sound "professional." Concrete and a little contrarian beats polished and generic every time.
  • Use STE for technical and instructional prose. Do not use figurative language or decorative wording when it can reduce technical clarity.
  • Don't ship a post whose angle overlaps a published one. Adjust the angle instead.
  • Covers can be SVG or a raster image. Match your site's brand palette. If you can't make a good cover, reuse an existing one rather than shipping something ugly.

Note on this skill's own files

The scanner will flag SKILL.md and the reference/ files because they name the banned characters (—) (–) and use → as teaching notation. That's expected. The scanner is for blog drafts and rendered post bodies, not for this skill's documentation.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Write Blog AI skill do?

Write and ship a blog post for your project that reads like a human wrote it and pulls SEO traffic to your site. Use when a contributor wants to draft, edit, or publish a blog post, add a post to the site, write about the project for search/traction, or make an existing draft sound less like AI. Enforces the house voice (no em dashes), picks a non-cannibalizing angle, uses ASD-STE100 Simplified Technical English for technical prose, wires the post into your site, and runs the humanizer pass before shipping.

Why use Write Blog on TypingMind?

Because you install it once and use it with any model. Write Blog is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Write Blog in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/tamdogood/builder-essential-skills/tree/main/skills/write-blog. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Write Blog?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Write Blog?

As many as you like. As long as a model supports skills, you can use Write Blog with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Write Blog AI skill free?

Yes. It is published on GitHub by tamdogood under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇