kevin-burns

Ghost Publish — Documentation skill for Claude Code

Documentation community

Claude Code / Codex skill for publishing to Ghost from markdown.

How to install Ghost Publish

This entry records only its repository, not the path inside it, so there is no exact command to give. Open kevin-burns/ghost-publish and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Ghost Publish does

Claude Code / Codex skill for publishing to Ghost from markdown. Drives TryGhost's official ghst CLI — strips front matter Ghost would render as prose, builds galleries and embeds, and verifies what Ghost actually stored against your source file.

Alternatives in Documentation

README

ghost-publish

![ghost-publish banner](ghost-publish/images/banner.webp)

**This repository is generated.** `ghost-publish` is developed in [kevin-burns/claude-skills](https://github.com/kevin-burns/claude-skills) and mirrored here on every merge, so that Ghost users can find and install it on its own. **Please raise issues and pull requests [in the source repository](https://github.com/kevin-burns/claude-skills/issues)** — changes made here would be overwritten by the next build.

Get a markdown file onto a [Ghost](https://ghost.org) blog with the official `ghst` CLI, and then **prove** that what arrived is what you sent.

Part of the [claude-skills](https://github.com/kevin-burns/claude-skills) collection, and mirrored here as a standalone plugin.

Why the proving is the point

`ghst post update` returns a clean JSON object whether or not the content arrived intact. Its own output is not evidence. On the first real run of this workflow, a successful update left YAML front matter rendered as visible text above the first paragraph of the post, and a verification pass that checked sixteen expected strings reported **16/16** while it sat there.

A check that only asks *"is what I wanted present?"* is blind to everything that should not be. So `verify_post.py` compares the whole document in both directions.

What it does

  • Strips front matter before upload. --markdown-file sends bytes verbatim and Ghost has no front-matter concept, so a leading --- block becomes prose. prepare_post.py removes it and prints the ghst flags it implies (--title, --excerpt, --tags). A post's slug has no flag on post create, so --payload writes the --from-json payload that carries it; pages take --slug directly via --target page.
  • Strips the drafting scaffolding too, which is not front matter and was the reason a duplicated title and an internal author note reached a public post. One leading H1, one author-note line, and a rule