ax-check rule

AXC-D022: SKILL.md frontmatter missing or invalid

SKILL.md has no YAML frontmatter, the YAML does not parse, or name or description is missing.

ax-check is a checker being prepared for release. This page documents the rule ahead of that release; see all 50 rules.

Severityerror
KindConformance. A finding is a fact about the input.
Modeax-check lint
Applies toSKILL.md
Pattern tagsskills, discovery
Fix in one lineStart SKILL.md with a YAML block between "---" lines that sets name and description.

SKILL.md has no YAML frontmatter, the YAML does not parse, or the required name or description is missing. An agent discovers a skill through these two fields. Without them, the skill may not load at all, or it loads with nothing an agent can choose it by.

What it checks

ax-check reads the start of each SKILL.md and checks that:

  • the file starts with a --- line;
  • the block is closed by a second --- line;
  • the text between them parses as YAML and is a mapping of keys to values;
  • name and description are both present, are text, and are not empty.

Why it matters

The Agent Skills specification makes name and description required frontmatter fields. Agents usually load only these two fields for every installed skill and read the body only when a skill looks relevant. So the frontmatter is the whole of a skill’s discovery surface. A missing block, a YAML syntax error (for example an unquoted colon in the description) or a missing field means the skill cannot be discovered the way its author intended.

Anthropic’s skill authoring guidance (vendor guidance) adds that the description “is injected into the system prompt”, which is why it must say what the skill does and when to use it.

How to fix

  • Start SKILL.md with a YAML block between two --- lines.
  • Set name to the skill’s folder name and description to one or two sentences of what it does and when to use it.
  • Quote the description if it contains a colon followed by a space, or use a YAML block scalar.

Example

Before

# Invoice review

description: Checks draft invoices: totals, tax and due dates.

1. Open the draft invoice.
2. Compare the totals with the order.

After

---
name: invoice-review
description: "Checks a draft invoice before it is sent: totals, tax and due dates. Use this when asked to review or approve an invoice. Do not use it to create invoices."
---

# Invoice review

1. Open the draft invoice.
2. Compare the totals with the order.

How ax-check detects it

ax-check removes a leading byte order mark and converts Windows line endings first. The file must then begin with --- and a line break, and the block ends at the next line that starts with ---. The YAML in between is parsed with a standard YAML parser. A parse error is reported with the parser’s first line of explanation.

If the block parses, name and description must be non-empty strings. A description that YAML reads as a number or a list counts as missing. One finding names every missing field.

Interaction with other rules: for skills, a missing description is reported only by this rule, never also by AXC-D001 (missing description). AXC-D023 and AXC-D024 run only on fields that are present.

Known false positives: a file that begins with a blank line or a comment before --- is reported, because the block must be the very first thing in the file. If your skill loader accepts that, you can silence the rule.

If the finding does not apply, silence it with --disable AXC-D022.

Sources

Records in the AX evidence register that share a pattern tag with this rule. A shared tag means the record is about the same pattern, not that it tests this rule. Read the evidence class before the number.