Problem
Our schemas/skill.schema.json diverges from the Agent Skills open standard that Claude Code, OpenCode, Gemini CLI, Codex, Copilot, and Cursor all implement. The standard requires exactly two frontmatter fields for discovery:
name — required, 1-64 chars, ^[a-z0-9]+(-[a-z0-9]+)*$, must equal the skill's directory name.
description — required, 1-1024 chars; every agent uses it for progressive-disclosure discovery (loaded at startup to decide relevance).
OpenCode recognizes only name/description/license/compatibility/metadata and ignores unknown fields.
What our schema does today
- REQUIRES
id/version/title/type/status/owners/primary_personas/requires/output/quality_gates with additionalProperties: false.
- Makes
name optional — 17 of 27 skills under .agents/skills/ have no name: (verified). Strict consumers that key on name won't surface them, or will fall back to dirname unevenly.
description is optional and capped at 300 chars (one skill already hits 312). The standard allows 1024; a weak/absent description degrades cross-model discovery.
Proposal (consensus 7/7 approved, higher_order)
- For
type: skill, make name + description required. Enforce the standard name regex and name == directory basename. Raise description max to 1024 with a meaningful minimum (>=20 chars, per AI/ML voter).
- Keep the rich governance/routing fields (
id, routing, risk_tier, …) as additive metadata the standard ignores. Decide explicitly: keep top-level (unknown-field-ignored) vs namespace under metadata: (spec-clean). Recommend top-level for now to avoid a mass rewrite; document the decision.
- Backfill the 17 missing
name: fields (= dirname) before flipping the schema to required, so CI doesn't hard-fail.
- Add a validator check + pytest asserting
name == id == dirname and standard-conformance across all skills.
Acceptance
- All 27 skills validate as Agent Skills skills (name+description conformant).
- New test enforces
name==id==dirname.
- No regression in the router or INDEX generation.
Related: nested-directory conformance (separate issue), ship-patterns-as-kit (separate issue).
AI-assisted (OpenCode); consensus-reviewed. Requires human review.
Problem
Our
schemas/skill.schema.jsondiverges from the Agent Skills open standard that Claude Code, OpenCode, Gemini CLI, Codex, Copilot, and Cursor all implement. The standard requires exactly two frontmatter fields for discovery:name— required, 1-64 chars,^[a-z0-9]+(-[a-z0-9]+)*$, must equal the skill's directory name.description— required, 1-1024 chars; every agent uses it for progressive-disclosure discovery (loaded at startup to decide relevance).OpenCode recognizes only
name/description/license/compatibility/metadataand ignores unknown fields.What our schema does today
id/version/title/type/status/owners/primary_personas/requires/output/quality_gateswithadditionalProperties: false.nameoptional — 17 of 27 skills under.agents/skills/have noname:(verified). Strict consumers that key onnamewon't surface them, or will fall back to dirname unevenly.descriptionis optional and capped at 300 chars (one skill already hits 312). The standard allows 1024; a weak/absent description degrades cross-model discovery.Proposal (consensus 7/7 approved, higher_order)
type: skill, makename+descriptionrequired. Enforce the standardnameregex andname == directory basename. Raisedescriptionmax to 1024 with a meaningful minimum (>=20 chars, per AI/ML voter).id,routing,risk_tier, …) as additive metadata the standard ignores. Decide explicitly: keep top-level (unknown-field-ignored) vs namespace undermetadata:(spec-clean). Recommend top-level for now to avoid a mass rewrite; document the decision.name:fields (= dirname) before flipping the schema to required, so CI doesn't hard-fail.name == id == dirnameand standard-conformance across all skills.Acceptance
name==id==dirname.Related: nested-directory conformance (separate issue), ship-patterns-as-kit (separate issue).
AI-assisted (OpenCode); consensus-reviewed. Requires human review.