Skip to content

fix: add YAML frontmatter to all SKILL.md files, and validate it in CI - #7

Merged
webmyc merged 1 commit into
mainfrom
fix/skill-frontmatter
Jul 27, 2026
Merged

fix: add YAML frontmatter to all SKILL.md files, and validate it in CI#7
webmyc merged 1 commit into
mainfrom
fix/skill-frontmatter

Conversation

@webmyc

@webmyc webmyc commented Jul 27, 2026

Copy link
Copy Markdown
Member

28 of 39 SKILL.md files had no YAML frontmatter. The README has always documented it as required, so this was a repo consistency gap and nothing caught it.

The consequence was not cosmetic: npx skills and OpenCode both key off name and description, and when those are missing they skip the skill silently. Installing the collection gave a partial install with no error saying which skills were dropped.

Reported by Jerry Gapinski, who hit it running the collection through OpenCode.

What changed

  • Frontmatter added to the 28 files missing it. Every description comes from skills.json, which already had one for all 39. Nothing invented: the generator fails loudly rather than writing a placeholder.
  • Matches the convention of the 11 already-compliant files: name is the directory slug (what installers resolve against), quoted description, license: MIT, and a metadata block.
  • scripts/validate-skills.mjs checks frontmatter presence, that name equals the directory slug, that description is usable, and that skills.json and the directories agree.
  • CI runs it on push and PR.

Verified

Removing frontmatter from one file makes the validator exit 1; restoring it exits 0. A guard nobody has seen fail is not a guard.

Three pre-existing warnings remain where SKILL.md and skills.json descriptions have drifted on already-compliant files. Left as warnings, not silently overwritten, since picking the correct one is an editorial call.

…lidate in CI

28 of 39 SKILL.md files had no YAML frontmatter. The README has always
documented it as required, so this was a repo consistency gap rather than a
design decision, and nothing caught it.

The consequence was not cosmetic. `npx skills` and OpenCode both key off `name`
and `description`, and when those are missing they SKIP the skill silently. A
user installing the collection got a partial install with no error explaining
which skills were dropped or why. Reported by Jerry Gapinski, who hit it running
the collection through OpenCode.

Every description here comes from skills.json, which already carried a real
description for all 39. Nothing was invented: the generator fails loudly rather
than writing a placeholder if a skill is missing from the catalog or its
description is blank.

Frontmatter matches the convention already used by the 11 compliant files:
`name` is the directory SLUG (not the display name, since that is what
installers resolve against), a quoted single-line `description`, `license: MIT`,
and a `metadata` block with author, version, mcp-server and category.

scripts/validate-skills.mjs now checks, per skill:
  - SKILL.md exists and opens with a frontmatter block
  - `name` is present AND equals the directory slug
  - `description` is present and long enough to help an agent choose
  - the skill has a skills.json entry, warning when descriptions have drifted
and repo-wide, that every skills.json entry points at a directory that exists.

Wired into CI on push and PR. Verified it actually catches the regression:
removing the frontmatter from one file exits 1, restoring it exits 0. A guard
nobody has seen fail is not a guard.

Three pre-existing warnings remain, where SKILL.md and skills.json descriptions
have drifted apart on files that already had frontmatter. Left as warnings
rather than errors, and deliberately not "fixed" by overwriting one with the
other, since choosing which is correct is an editorial call.
@webmyc
webmyc merged commit e39cb51 into main Jul 27, 2026
1 of 2 checks passed
@webmyc
webmyc deleted the fix/skill-frontmatter branch July 27, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant