What
Generated SKILL.md frontmatter is rejected by the canonical Agent Skills validator (skills-ref). Two separate problems:
-
Non-spec top-level keys. The validator allows exactly six top-level frontmatter keys — name, description, license, compatibility, metadata, allowed-tools — and treats any other top-level key as an error. Intent emits type, library, library_version, and framework at the top level. These are scalars and belong under the spec's metadata map (a string→string mapping for client-specific data).
-
The name value is itself invalid. Intent emits names like routing/file-based. The spec requires name to contain only lowercase alphanumerics and hyphens (so a / is "invalid characters") and to equal the parent directory name (which a multi-segment value cannot). So the slash name fails validation two different ways.
Where this comes from
Scope
This covers the frontmatter changes for the scalar fields and the name:
name becomes the spec-legal leaf segment matching its parent directory; the namespace it used to encode is carried by the skill's directory path instead.
type, library, library_version, framework move under metadata.
- The generator templates (
generate-skill) emit the new shape; validate errors on non-spec scalar keys, on a non-string metadata map, and on a slash/non-leaf name.
The array fields (sources, requires) are not part of this — they can't live in the string-only metadata map and move to a separate structured surface, tracked in its own issue.
What
Generated
SKILL.mdfrontmatter is rejected by the canonical Agent Skills validator (skills-ref). Two separate problems:Non-spec top-level keys. The validator allows exactly six top-level frontmatter keys —
name,description,license,compatibility,metadata,allowed-tools— and treats any other top-level key as an error. Intent emitstype,library,library_version, andframeworkat the top level. These are scalars and belong under the spec'smetadatamap (a string→string mapping for client-specific data).The
namevalue is itself invalid. Intent emits names likerouting/file-based. The spec requiresnameto contain only lowercase alphanumerics and hyphens (so a/is "invalid characters") and to equal the parent directory name (which a multi-segment value cannot). So the slash name fails validation two different ways.Where this comes from
metadata). In Intent-specific fields in skill #140, the top-level fields are flagged as invalid by the Agent Skills schema in VS Code, and moving them undermetadatamakes validation pass.namepattern and now has the same validation errors, and is waiting on Intent to change the pattern before they do.Scope
This covers the frontmatter changes for the scalar fields and the
name:namebecomes the spec-legal leaf segment matching its parent directory; the namespace it used to encode is carried by the skill's directory path instead.type,library,library_version,frameworkmove undermetadata.generate-skill) emit the new shape;validateerrors on non-spec scalar keys, on a non-stringmetadatamap, and on a slash/non-leafname.The array fields (
sources,requires) are not part of this — they can't live in the string-onlymetadatamap and move to a separate structured surface, tracked in its own issue.