Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when formatting an article into publish-ready markdown: emit exactly title/slug/summary/description frontmatter, move the H1 into frontmatter, and keep the body H1-free.
.claude/skills/markdown-article-frontmatter/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 8 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +77% | +227% | 0% | 22 | 53d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-21 | ✗→✓ | ▲ Improved | — | — |
When you format or "beautify" prose into a publish-ready markdown file, emit a YAML frontmatter block with EXACTLY the fields below, in the given order, move any body H1 into title, and leave the body prose untouched. Apply whenever the task asks to format, beautify, clean up, or add a metadata/frontmatter header to an article, post, or note.
The frontmatter contains EXACTLY these four fields, in THIS order:
titleslugsummarydescriptionAdd coverImage (5th) ONLY when a cover image actually exists for the article. Never invent it. Add NOTHING else: no date, author, tags, category, excerpt, keywords, draft, layout, published, readingTime, or any other key — even if it seems helpful or conventional elsewhere. Four fields, that order, full stop.
If the body starts with an H1 (# ...), MOVE that exact text into the title field and DELETE the # ... line from the body. If the source has no H1, derive a title from the content. The body must contain NO level-1 heading anywhere — the first body heading is ##. There is never both a title in frontmatter and a # line in the body (that duplicates the title).
slug is the title lowercased and kebab-cased: all lowercase, words joined by SINGLE hyphens, ASCII only, no spaces, no punctuation (drop ?, :, ,, ., ', ", &, /), no leading/trailing hyphen, no doubled hyphens. Drop nothing meaningful — keep the content words so the slug stays recognizable. It is NOT a random id, NOT snake_case, NOT camelCase, NOT title-cased.
summary is a SINGLE sentence, roughly 50–80 characters, that conveys the reader value (what they get), not merely the topic. It is the punchy hook used in feeds and SEO meta. It MUST be shorter (fewer characters) than description.
description is 2–3 sentences, roughly 100–200 characters, expanding on summary with supporting detail. It is always LONGER than summary.
NEITHER summary NOR description may begin with: "This article", "This post", "This guide", "In this article", "In this post", "In this", "Here we", "A guide to", or a reworded copy of the title. Lead with the value or the concrete claim instead.
Only formatting (headings, bold, lists, code, blockquotes) and the frontmatter may change. Never add sentences, delete content, shorten, or rephrase the author's words. Preserve voice, tone, and every word.
BEFORE (base adds helpful extras — date, author, tags):
yaml--- title: Caching Is a Distributed System date: 2026-06-26 author: Engineering Team tags: [caching, systems] slug: caching-is-a-distributed-system description: ... ---
AFTER (exactly four fields, correct order):
yaml--- title: Caching Is a Distributed System slug: caching-is-a-distributed-system summary: Add a cache and you inherit a second source of truth to keep honest. description: A cache turns one source of truth into two. Treat invalidation as a design decision up front, not a bug you patch later. ---
BEFORE (title duplicated as a body H1):
markdown--- title: Postgres Is All You Need slug: postgres-is-all-you-need summary: ... description: ... --- # Postgres Is All You Need You probably do not need Kafka, Redis, and Elasticsearch on day one.
AFTER (body H1 deleted; body starts with prose or ##):
markdown--- title: Postgres Is All You Need slug: postgres-is-all-you-need summary: ... description: ... --- You probably do not need Kafka, Redis, and Elasticsearch on day one.
Title: Why We Switched to Postgres: A Field Guide BEFORE (base keeps casing/punctuation or uses snake_case):
yamlslug: Why_We_Switched_to_Postgres:_A_Field_Guide
AFTER:
yamlslug: why-we-switched-to-postgres-a-field-guide
BEFORE (topic restatement, and summary longer than description):
yamlsummary: This article is about how our team migrated the billing service to Rust and what we learned during the process. description: A migration story.
AFTER (summary = punchy value, shorter than description):
yamlsummary: Rewriting billing in Rust cut p99 latency from 800ms to 40ms. description: A Python billing service that timed out under load became a Rust one with 20x lower tail latency. Here are the migration surprises that mattered.
BEFORE:
yamlsummary: This article explores why standups became status theater.
AFTER:
yamlsummary: Async, five-line standups gave the team its mornings back.
BEFORE (base "improves" the wording while formatting):
markdownWe made standups async and capped them at five lines, reclaiming our focus time.
(original was: "We made them async, capped at five lines each, and got our mornings back.") AFTER (original words kept verbatim; only frontmatter/formatting added):
markdownWe made them async, capped at five lines each, and got our mornings back.
title from the content; still emit all four fields. Thebody simply never gains a # line.
title,summary, or description; only fill the missing ones. But still strip any non-conforming extra keys (date, tags, …) per R1.
Foo: A Field Guide). The colon and space become ahyphen in the slug → foo-a-field-guide (no stray double hyphen).
AWS Bill in Half → cut-our-aws-bill-in-half; Q&A → q-a (ampersand dropped, not kept).
coverImage. It is the only conditional field andit requires an actual image to exist.
description constraints are hard, not soft.
date, author, tags, category, or excerpt. ALWAYS emit exactlytitle, slug, summary, description (+ coverImage only if one exists).
# Title line in the body. ALWAYS move it into title and delete it.lowercase, ASCII, single hyphens.
summary/description with "This article…". ALWAYS lead with the value.summary longer than description. ALWAYS keep summary the shorter, one-sentence field.
date, author, and tags — extra fields that violate the exact-fourrule.
# H1 AND putting it in frontmatter — duplication.summary as a topic restatement ("This article covers…") instead of value.summary longer than description, or making them near-identical.title, slug, summary, description, in that order.date/author/tags/category/excerpt/keywords.# H1; title is only in frontmatter.slug is lowercase kebab-case, ASCII, single hyphens, no punctuation.summary is one sentence (~50–80 chars), value-led, shorter than description.description is 2–3 sentences (~100–200 chars), longer than summary.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +77 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/2/2026 | +100% |
Other measured skills in the registry, with their headline benchmark lift.