skill-frontmatter-doctor

$npx mdskill add Tibsfox/gsd-skill-creator/skill-frontmatter-doctor

Detect and fix four common frontmatter defects in skill or agent markdown files.

  • Fixes echoed or truncated triggers that are not distinct user keywords.
  • Converts tools written as a YAML array into a comma-separated string.
  • Validates description length is between 1 and 1024 characters.
  • Ensures description starts with a 'Use when...' clause.

SKILL.md

.github/skills/skill-frontmatter-doctorView on GitHub ↗
---
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:

```bash
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:

```yaml
# 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.

```yaml
# 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...").

```yaml
# 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.

More from Tibsfox/gsd-skill-creator

SkillDescription
3d-interaction-designDesign heuristics for three-dimensional interaction — input modalities (6DoF controllers, gaze, gesture, voice), selection and manipulation techniques (ray-cast, virtual hand, go-go, world-in-miniature), navigation (teleport, continuous, redirected walking), and feedback loops (haptic, audio, visual). Covers Fitts' law in 3D, discoverability vs affordance, safe-zone design, and comfort/simulator sickness mitigation. Use when designing VR/AR interactions, immersive walkthroughs, or any input system where the user's body is the controller.
accessibility-patternsProvides web accessibility best practices for semantic HTML, ARIA, keyboard navigation, color contrast, and screen reader patterns. Use when building UI components, reviewing accessibility, or when user mentions 'a11y', 'accessibility', 'ARIA', 'screen reader', 'keyboard navigation', 'WCAG'.
active-listeningActive listening techniques for effective communication. Covers attending behaviors, paraphrasing, reflective listening, clarifying questions, empathic response, barriers to listening, listening in conflict, and cross-cultural listening. Use when building listening skills, improving understanding in conversation, mediating disputes, or analyzing communication breakdowns.
adversarial-pr-reviewAdversarial spec-compliance PR review — cross-references diffs against approved specs, verifies runtime claims against source, detects competing PRs, audits scope/convention compliance. Use before merging.
agile-methodsAgile and Lean software development methodologies for iterative, adaptive project execution. Covers Scrum (roles, ceremonies, artifacts), Kanban (WIP limits, flow metrics), XP (TDD, pair programming, CI), SAFe overview, Lean Software Development (Poppendieck's 7 principles), user stories (INVEST criteria), estimation via story points and velocity, and the Agile Manifesto's values and principles. Includes Cynefin framework for methodology selection and GSD's relationship to Agile as a structured Lean variant.
algebraic-reasoningSymbolic manipulation, equation solving, and algebraic structures for mathematical reasoning. Covers distributive law, factoring, completing the square, linear through polynomial equation solving, systems of equations (substitution, elimination, Gaussian elimination, matrix methods), algebraic structures (groups, rings, fields), modular arithmetic, polynomial theory, and inequalities. Use when solving equations, simplifying expressions, working with algebraic structures, or performing symbolic manipulation.
algorithmic-awarenessUnderstanding how algorithmic systems shape what users see, know, and do -- from recommendation feeds to search ranking to credit scoring to hiring software. Covers the mechanics of recommendation systems, algorithmic bias and its sources, personalization's effects on information diets, opacity and accountability, AI limitations (hallucination, confident wrongness), and the human-in-the-loop question. Use when a learner needs to think critically about why particular content reached them.
algorithms-data-structuresAlgorithms and data structures from first principles through advanced analysis. Covers sorting (bubble, insertion, selection, merge, quick, heap, radix), searching (linear, binary, BFS, DFS, Dijkstra, A*), fundamental data structures (arrays, linked lists, stacks, queues, hash tables, trees, heaps, graphs, tries), complexity analysis (Big-O, Big-Omega, Big-Theta, amortized), recurrence relations, and algorithm design paradigms (divide-and-conquer, greedy, dynamic programming, backtracking). Use when analyzing, selecting, implementing, or comparing algorithms and data structures.
aminet-browserAminet search and browse: full-text search, category tree navigation, architecture filtering, package detail, and curated collections. Use when searching, browsing, or managing package collections.
aminet-emulatorFS-UAE emulator configuration and launch: hardware profiles, ROM management, WHDLoad integration, config generation, and state snapshots. Use when configuring emulation, managing ROMs, or launching Amiga software.