publishing-skills
Three composable Claude skills for end-to-end SEO blog publishing on any platform. Validate the topic has real demand, draft and publish through a pluggable adapter (Ghost, WordPress, static-site, or BYO), and illustrate the post - each step a small skill the agent can compose, swap, or run alone.
The three skills
blog-topic-research
Before you draft, validate. The skill runs WebSearch and WebFetch against the topic, looks for real demand signals (Reddit threads, GitHub issues, Stack Overflow questions, PAA boxes), and refuses topics that are just "the docs but reworded." Output: a research-proof scaffold the writer skill can consume.
seo-blog-writer
End-to-end pipeline for a post: classify, research, draft to clean HTML, scrub LLM tells,
run the AI-SEO audit, build the FAQPage + BreadcrumbList + HowTo JSON-LD, optionally
auto-link technical terms to a glossary on your site, then ship through a
platform adapter. The pre-publish gate asserts H2-question shape, figure count
(max(1, words // 500)), bullet discipline, and currency on cited years.
Ghost Admin API, WordPress REST, and static-site file output ship in the box;
adding Webflow, Sanity, or any other CMS is a ~20-line snippet - the writing pipeline never changes.
blog-figure-svg
Generates accessible SVG figures - flow diagrams, comparison bar charts, taxonomy diagrams, annotated terminal mocks, OG feature cards - with a consistent system-font palette, title and desc accessibility metadata, and PNG rasterization for CMS delivery. One figure per ~500 body words is the rule of thumb.
How they chain
- blog-topic-research - picks a specific query, confirms real demand signals (Reddit threads, GitHub issues, PAA boxes), and bails on topics that would just paraphrase vendor docs. Output: a research scaffold the writer can consume directly.
- seo-blog-writer - drafts in clean HTML, scrubs the prose for LLM tells, runs the AI-SEO audit, builds the FAQPage + BreadcrumbList + HowTo JSON-LD schema blocks, and hands the bundle to the platform adapter.
- blog-figure-svg - invoked during the illustration pass. Generates accessible SVGs with a consistent system-font palette; one figure per roughly 500 body words.
- Platform adapter - the bundle ships through a pluggable publish step:
--target ghostPOSTs via the Ghost Admin API (JSON-LD intocodeinjection_head),--target wordpressPOSTs via WP REST,--target staticwrites<slug>.draft.html+.metadata.jsoninto your SSG repo. BYO adapters in ~20 lines.
Each skill is independent. Run the writer alone if you bring your own topic. Run the research alone to vet an editorial backlog. Run the figure generator for any blog or doc that needs charts.
What makes it different
Most AI writing tools are a single prompt you paste and hope for the best. publishing-skills is three composable skill files you wire together the way your workflow needs.
Single-file skills, no build step
Each skill is one SKILL.md with YAML frontmatter - the convention every Claude-compatible runtime now understands. Drop it into .claude/skills/ and reload. No npm dependencies for the skill itself.
Platform-pluggable publish step
The writing pipeline (research, classify, draft, scrub, AI-SEO audit, JSON-LD) is platform-agnostic and produces a stable bundle: <slug>.draft.html, <slug>.schema.html, <slug>.metadata.json. The publish step is a separate adapter - swap Ghost for WordPress, or move to a static site, without rewriting the pipeline.
CMS gotchas, encoded per adapter
The Ghost adapter handles Lexical's silent stripping of <script> from body HTML (JSON-LD goes into codeinjection_head), the varchar(191) cap on feature_image_alt, and tag-object shape. The WordPress adapter handles category/tag ID resolution and _embed media. The static adapter writes deterministic file names so your SSG picks them up cleanly.
AI-citation schema, built in
Every post ships with FAQPage, BreadcrumbList, and (for procedural how-tos) HowTo JSON-LD. These are the schema types AI Overviews and citation engines pull from. Ghost emits Article + Person + Organization by default; the writer adds the three that matter for LLM citation regardless of platform.
Generalized, not branded
Extracted from automatelab.tech's internal pipeline, but the site-specific bits are parameterized: tag taxonomies, cluster palettes, backlog state, author slug, hostname. The skills work against any blog on any of the supported platforms - your tag list, your author, your palette.
Scrub before publish
Em-dashes, smart quotes, ellipsis characters, "delve into", "leverage" as a verb - the writer scrubs the unmistakable LLM tells before the post ever reaches the Admin API. Posts read like a human wrote them.
MIT-0, no attribution required
Public-domain-equivalent license. Use it on client work, in commercial products, fork it, rename it. No backlink required. The skills are tooling, not marketing.
See it in action
The full pipeline - topic pick, research, HTML draft, JSON-LD schema, feature image, Ghost Admin API POST - is documented on the blog: Three Claude skills for end-to-end Ghost blog publishing. It covers the Ghost-specific gotchas in detail and shows the actual payload structure.
Install via skills.sh
npx skills add AutomateLab-tech/publishing-skills
Installs all three skills into Claude Code, Cursor, Codex, Gemini CLI, GitHub Copilot, and 50+ other runtimes at once. Restart your agent host so the skills reload.
Or via clawhub
npm i -g clawhub
clawhub login
clawhub skill install blog-topic-research
clawhub skill install seo-blog-writer
clawhub skill install blog-figure-svg
Each command pulls the latest version of the skill into your project's .claude/skills/ directory.
Or via git clone
git clone https://github.com/AutomateLab-tech/publishing-skills.git cp -r publishing-skills/skills/* .claude/skills/
All three paths produce the same files. skills.sh is the broadest reach across runtimes; clawhub gives you versioned installs and update notifications; git-clone gives you full control over what version you're running.
FAQ
What does it cost?
Do I need all three skills?
seo-blog-writer alone can draft and publish if you bring your own topic. blog-topic-research alone is useful for vetting any editorial backlog. blog-figure-svg alone is a general SVG figure generator for any blog or doc. They're most powerful chained - the writer can consume the research scaffold and invoke the figure generator during illustration.Which platforms does seo-blog-writer publish to?
<slug>.draft.html, <slug>.schema.html, <slug>.metadata.json). The publish step is pluggable - the repo ships three adapters out of the box: --target ghost (Ghost Admin API, with the ?source=html convention and JSON-LD into codeinjection_head), --target wordpress (WP REST), and --target static (file output for Hugo, Astro, Eleventy, Jekyll, Next-MDX). Adding Webflow, Sanity, Strapi, or Contentful is a ~20-line POST snippet.Which agent runtimes does this work in?
npx skills add installer covers 50+ runtimes in one command.What credentials are required?
GHOST_URL and GHOST_ADMIN_KEY. For the WordPress adapter: WP_URL, WP_USER, and WP_APP_PASSWORD (Application Passwords, not your login). For the static adapter: nothing - just a target directory. The research skill uses your agent's built-in WebSearch/WebFetch. The figure skill needs Python plus one SVG rasterizer (ImageMagick / rsvg-convert / Inkscape / cairosvg).Where do I report bugs or request features?
Want the pipeline wired into your editorial workflow?
We use these skills daily to ship SEO posts on automatelab.tech. If you want them tuned to your tag taxonomy, your style guide, your editorial backlog - or a full editorial pipeline set up from scratch - we can do that.
Get in touch