Validates frontmatter and body structure of all skills, agents, and commands in a plugin. Triggers: validate components, check frontmatter, component audit, skill validation.
"Frontmatter is the API contract of a skill. Without it, the runtime cannot discover, route, or constrain."
Validates that every skill, agent, and command file has correct YAML frontmatter, required fields, proper types, and a well-structured body.
skills/*/SKILL.md for skills.agents/*.md for agents.commands/*.md for commands.INFO: No <type> found.For each skills/*/SKILL.md:
--- delimiters).CRITICAL if missing.CRITICAL if missing, WARNING if <20 chars.CRITICAL if missing. CRITICAL if not an array. Valid tool names include: Read, Write, Edit, Glob, Grep, Bash, WebFetch, WebSearch, NotebookEdit, TodoWrite.INFO if missing (recommended but not required by spec).INFO for each.For each skill, check the markdown body (content after closing ---):
# or ##) that serves as the skill title.Procedure, Steps, Workflow, Process. WARNING if no procedural section found.INFO if no lists detected.CRITICAL if body is empty.For each agents/*.md:
CRITICAL if missing.CRITICAL if missing.WARNING if missing (agents without tool constraints may have unintended access).For each commands/*.md:
CRITICAL if missing.true (boolean). CRITICAL if missing or set to false.INFO if missing (commands without arguments are valid).name values from skills, agents, and commands.WARNING for any duplicate name appearing in multiple components.CRITICAL if the same name appears within the same component type (two skills named identically).| Component | Type | Severity | Finding |.allowed-tools: "Read, Bash" (string) is detected as wrong.allowed-tools list is appropriate for its procedure -- only checks format and recognized tool names.user-invocable field is validated as a boolean, but YAML parsers accept yes/no/on/off as boolean equivalents -- this skill treats only true as valid.Bad finding:
Missing name in skill.Missing: no file path, no field name, no expected type.
Good finding:
CRITICAL | skills/validate-hooks/SKILL.md | name | Missing. Expected: non-empty string in YAML frontmatter. | (absent)Includes: severity, exact file path, field name, expected type, current value.
allowed-tools as a comma-separated string instead of a YAML array.user-invocable: "true" (string) as valid when a boolean is required.alias-of pointing to itself -- CRITICAL (circular alias).| or > YAML syntax -- valid, do not flag.debb558
Also appears in
since Aug 28, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.