SKILL.md
Ghost Writing
Quick Start
compose_post { "title": "We shipped the editor", "status": "draft", "blocks": { "type": "heading", "level": 2, "text": "What changed" }, { "type": "paragraph", "text": "Prose with bold and [links." }, { "type": "callout", "emoji": "🚀", "color": "green", "text": "Live now" } ] }
Critical Rules
- Never push raw HTML — compose posts from Koenig blocks via
compose_post. Thehtmlblock is a last resort when no native block fits. - Draft first — create with
status: "draft", report the post URL, publish only when asked. - Long posts use
blockFile— write blocks JSON to an absolute path, validate withcomposelexical, pass the path tocomposepost. - Updates replace the whole body —
composepostwithidneeds the currentupdatedat(viaposts.read) and full blocks; keep the blockFile as source of truth when iterating. - Don't guess block fields — run
koenighelp(list) orkoenighelp { "block": "callout" }(fields + example) before composing.
Workflow
- Outline: one goal per post, working title, section list — see [writing](references/writing.md)
- Pick blocks per section: prose vs cards — see [blocks](references/blocks.md)
- Compose:
compose_postwith inlineblocks, orblockFilefor long posts - Review: re-read for rhythm, set excerpt/tags/feature image
- Publish or schedule via
useghostapi— see [workflows](references/workflows.md)
References
- [Blocks](references/blocks.md) — every block type, its purpose, and how to choose between similar ones
- [Writing](references/writing.md) — structure, rhythm, metadata, and voice practices for good posts
- [Workflows](references/workflows.md) — tool map and end-to-end recipes: create, edit, publish, newsletter, members-only