Skip to content
Development
Skill

/skill-frontmatter-doctor

Use when authoring or reviewing a SKILL.md or agent .md and you need to detect and fix the four most common frontmatter defects — echoed or truncated triggers, tools written as a YAML array instead of a comma-separated string, a description outside the 1-1024 character bound,

From plugin
gsd-skill-creator
71102 skills61 agents26 commands1 MCP

Claude Code

$ npx -y skills add Tibsfox/gsd-skill-creator --skill skill-frontmatter-doctor --agent claude-code

SKILL.md

skill-frontmatter-doctor.SKILL.md
name: skill-frontmatter-doctor
description: Use when authoring or reviewing a SKILL.md or agent .md and you need to detect and fix the four most common frontmatter defects — echoed or truncated triggers, tools written as a YAML array instead of a comma-separated string, a description outside the 1-1024 character bound, and a missing "Use when..." clause.
description-frequency: on-demand
user-invocable: true
version: 1.0.0
format: 2025-10-02
triggers:
  - "authoring or reviewing a SKILL.md or agent .md for frontmatter defects"
  - "fix malformed skill frontmatter, triggers, tools array, or description length"
updated: 2026-07-06
status: ACTIVE

Skill Frontmatter Doctor

Detect and fix the four highest-frequency defects in skill and agent frontmatter. This is the corpus-wide #1 defect class, and there is no deterministic guard for it — so treat this checklist as the guard.

Run the advisory linter first to get a candidate list:

node tools/skill-frontmatter-doctor.mjs

It scans `.claude/skills/**/SKILL.md`, `.claude/agents/*.md`, `project-claude/skills/**/SKILL.md` and `project-claude/agents/*.md`, prints a report, and always exits 0 (advisory, not a gate). Use its output to target the fixes below, then verify by re-reading the file.

The four defect classes

1. Echoed or truncated triggers

A `triggers:` entry must be a distinct, usable keyword or phrase a user would actually type — not a copy of the description and not a fragment that was cut mid-thought.

Recognize a bad trigger when it:

  • **Echoes the description** — the trigger string is a substring of the

`description` (or vice versa). A trigger that just repeats the description adds no routing signal.

  • **Ends mid-word** — the last token is a partial word (a truncation

artifact, e.g. `"...author a new cartri"`).

  • **Ends at a conjunction or preposition** — trails off on

`and`, `or`, `but`, `with`, `for`, `to`, `of`, `the`, `a`, `an` (e.g. `"scaffold a department and"`).

  • **Ends at an open parenthesis** — an unbalanced `(` signals a clipped

phrase (e.g. `"build a content cartridge ("`).

Fix: replace with short, self-contained phrases the user would say. Prefer several concrete invocations over one long echo of the description. Example:

# BAD — echoes the description, one entry, trails off
triggers:
  - "Use when the user asks to author or scaffold a skill and"

# GOOD — distinct, concrete, complete
triggers:
  - "fix malformed skill frontmatter"
  - "lint skill or agent triggers"
  - "check description length"

2. `tools:` as a YAML array (the #1 mistake)

Per `docs/OFFICIAL-FORMAT.md`, the `tools` field MUST be a **comma-separated string**, not a YAML sequence. A YAML array silently fails to parse as an allow-list.

# BAD — YAML array (will not work)
tools: ["Read", "Write", "Bash"]

# BAD — YAML block sequence (same problem)
tools:
  - Read
  - Write
  - Bash

# GOOD — comma-separated string
tools: Read, Write, Bash

Fix: collapse the array/sequence to a single-line string of tool names separated by `, `. Omit the field entirely to inherit all tools.

3. Description outside 1-1024 characters

The `description` must be a non-empty string of **1 to 1024 characters** inclusive. Too short gives the router nothing to match; over 1024 is rejected.

Fix:

  • **Empty / missing** → write one sentence that names the trigger

situation and the outcome.

  • **Over 1024** → cut to the essential "when + what". Move detail into

the skill body, not the frontmatter.

4. Missing a "Use when..." clause

A good description tells the router *when* to activate, not just what the skill is. It should contain an explicit activation clause — canonically starting with **"Use when..."** (or an equivalent "Use this skill when...", "Activates when...").

# BAD — describes the thing, never says when
description: A helper for skill frontmatter.

# GOOD — leads with the activation condition
description: Use when authoring or reviewing a SKILL.md or agent .md and you need to fix the four common frontmatter defects.

Fix: prepend a "Use when <situation>" clause describing the concrete condition that should activate the skill.

Fix loop

1. Run `node tools/skill-frontmatter-doctor.mjs` and read the report. 2. For each flagged file, open it and apply the matching fix above. 3. Re-read the frontmatter to confirm the change landed and the YAML is still valid. 4. Re-run the linter to confirm the finding is gone.

Self-check

This skill's own frontmatter is a worked example of the target state: the `description` opens with "Use when...", stays within 1-1024 characters, and the `triggers:` entries are distinct, complete phrases that are not substrings of the description. Keep it that way when editing.

Read more
@tibsfox
Ships withgsd-skill-creator

An adaptive learning and coprocessor architecture for Claude Code, built as an extension to GSD (open-gsd)

71102 skills61 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
71
Star history of Tibsfox/gsd-skill-creator on GitHub, a chart by star-history.com

Other skills on gsd-skill-creator.

aminet-index

aminet-index

Manages Aminet INDEX infrastructure: fetch, parse, cache, and incremental update of ~84,000-entry package database. Use when…

aminet-mirror

aminet-mirror

Selective Aminet package mirroring: single-package fetch, integrity verification, mirror state tracking, bulk download, and sync…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react4d252k
@facebook@facebookInstall Skill

Questions about skill-frontmatter-doctor.

Which coding agents can use skill-frontmatter-doctor?
skill-frontmatter-doctor installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.