ScribekitDocs

/scribekit-blog

Reference for the /scribekit-blog skill: its two modes, three flags, seven files, outputs, and constraints.

5 min readUpdated 12 August 2026
/scribekit-blog

A portable Claude Code skill that writes or rewrites a single MDX blog post for whatever project it is dropped into, optimized for classic search and for AI answer engines. It runs a mandatory web research pass, plans SEO and GEO targeting against a live SERP read, drafts in the project's own learned voice, and self-scores against a 100-point rubric.

/scribekit-blog [write|rewrite] [topic | slug-or-path] [--scan] [--no-hero] [--no-translations]

Only --scan appears in the skill's own argument-hint; the other two are opt-out phrases the write task recognises.

Nothing about any project is baked in. Every invocation begins with Step 0, which learns the project's identity, voice, content directory, frontmatter contract, locales, and real routes before anything is written.

Modes

ModeWhat it doesTrigger
writeWrites the post and its hero by default. On a multi-language blog, also writes a translation for every configured locale.A new post, the argument is a topic or idea, or the verb is create / write / draft.
rewriteAudits an existing post and applies the fixes, up to a substantial rewrite.rewrite / overhaul / redo / review / audit / fact-check / critique / improve / score, or the argument resolves to an existing post file or slug.

Never run two modes in one invocation. If a bare slug matches a post but the verb suggests a fresh take, the skill asks one clarifying question first. A rewrite with no target lists the posts in the content directory and asks which.

Flags

FlagApplies toBehaviour
--scanrewrite only"Run the audit and print the report only. Change no files, apply no fixes." The report is the deliverable.
--no-herowriteSkip the image. Equivalent to saying "skip the image".
--no-translationswriteDefault language only. Without it, a multi-language blog gets every configured locale.

Files

FilePurpose
SKILL.mdThe router. Step 0 project learning, mode selection, and the non-negotiables.
write.mdThe write task, 10 steps. It ends by suggesting rewrite --scan on the new slug as an independent audit pass.
rewrite.mdThe audit-and-apply task, 9 steps.
house-style.mdVoice craft, burstiness, MDX formatting, the banned AI-slop lists, the frontmatter contract. Also read by /scribekit-docs.
research-protocol.mdTools, source-quality ladder, the research loop, citing, the sources list. Also read by /scribekit-docs, with its polarity inverted.
seo-checklist.mdOn-page SEO and GEO checklists, 2026 myths, and the 100-point scoring rubric.
assets/content-dir-README.mdTemplate copied verbatim into the project's blog content directory root.

What it produces

PathWhen
<contentDir>/<slug>/<defaultLocale>.<ext>Every write. The locale-named file is preferred over post.<ext>.
<contentDir>/<slug>/<lang>.<ext>Once per non-default locale, unless --no-translations.
<contentDir>/README.mdSeeded once from assets/content-dir-README.md, verbatim. Never overwritten if it already exists.
<contentDir>/hero.settings.jsSeeded once by /scribekit-hero on the first hero for the blog surface, from the project brand. Never re-seeded.
<contentDir>/<slug>/hero.jsHero parameters, written by /scribekit-hero. One file per post, covering every language - a (locale) => params map when the blog is multi-language.
<assets>/blog/<slug>/hero.<code>.<ext>The rendered hero, wired into the post's image: frontmatter. One per locale, because the hero bakes the title text into the image - a translation never points image: at the default-language hero.

The language is the file's name, never a frontmatter field. <slug>/post.<ext> still resolves as a language-neutral fallback, but the locale-named form is preferred.

Constraints

ConstraintRule
Fabrication"Never fabricate a statistic, quote, date, source, or a named customer / case / event." Unsupported means cut it or soften it to a claim you can defend. Every number is traceable to the sources list, which is printed in chat, not into the post, as <claim/stat> - <number> - <Publisher>, <date> - <URL>.
Banned phrasesAny banned phrase caps the Voice and Anti-slop category at <=10 out of 20.
Score floorThe write task self-scores before finishing and "does not ship below ~90 (a state-of-the-art bar, not a passing grade)".
Dev server"Never start a dev server" - the skill asks the user to run it.
Git"Never create git branches." Changes stay scoped to the post and its hero asset.
Date"Today's real date comes from date +%F, never a guess", for date: and updated:.
Scope"Match the project, don't impose a house look." Voice, routes, and frontmatter all come from Step 0.

The 100-point rubric

Used by rewrite to score a post, and by write to self-score before finishing.

CategoryPoints
Content and research25
SEO and discoverability20
GEO / AI-answer extractability15
Voice and anti-slop20
Technical and MDX10
Readability and conversion10

The hero image is not scored numerically. The rewrite task's Verify hero step gates it separately on being present, on-brand, the correct ratio, legible at card scale, and carrying descriptive alt text.

The score is reported per category with a one-line justification, plus a prioritized, concrete fix list ordered most impactful first. A bare number is never reported without the fixes.

How it calls /scribekit-hero

Step 7 of write hands the post's hero to /scribekit-hero's blog-hero create flow. This is automatic on every write unless --no-hero is passed.

On first use the hero skill seeds the project's hero.settings.js from the brand, then writes the post's <slug>/hero.js parameters, renders the hero, saves the JPEG to the project's assets directory, and sets the image: frontmatter. A single-language blog gets one JPEG; a multi-language blog gets one per locale.

The skill is resolved at the first of three paths that exists:

<this-skill-dir>/../scribekit-hero/SKILL.md
.claude/skills/scribekit-hero/SKILL.md          # project root or $HOME
node_modules/@daanvandenbergh/scribekit/skills/scribekit-hero/SKILL.md

If /scribekit-hero is not installed, the skill skips the hero, leaves image: unset, and tells you to install it to add one.

Was this page helpful?