Each skill lives in its own directory under skills/:
skills/mk-my-skill/
├── SKILL.md # Required: main skill file (<500 lines)
└── references/ # Optional: supporting documentation
└── guide.md
---
name: mk-my-skill
description: Clear one-line summary (max 1024 chars)
metadata:
tags:
- tag-one
- tag-two
author: devmarkpro
version: "1.0.0"
---Only these top-level fields are permitted in frontmatter:
name— must match directory name, start withmk-, max 64 charsdescription— non-empty, max 1024 charsmetadata— container for tags, author, versionlicense— optional license referencecompatibility— optional environment requirements (max 500 chars)allowed-tools— optional space-delimited tool list
# Skill Title
Brief overview.
## When to Use
- Trigger conditions
## When NOT to Use
- Non-trigger conditions
## [Skill-specific sections]
## Examples
### Triggering prompt
> User prompt that should invoke this skill
### Non-triggering prompt
> User prompt that should NOT invoke this skillCI enforces these checks (run locally with ./scripts/lint-skills.sh):
- Frontmatter delimiters (
---) present nameanddescriptionnon-emptynamestarts withmk-, matches directory, max 64 charsdescriptionmax 1024 charsmetadata.tagsis a non-empty listmetadata.versionis valid semver (if present)- Only allowed top-level fields
- SKILL.md under 500 lines
- No duplicate skill names
Use lowercase, hyphenated tags:
- General:
swe,devops,api,cli,observability,debugging,tooling,planning,code-review - Domain:
frontend,backend,data,infra,security,testing,docs
When modifying a skill's content, bump the metadata.version field. CI warns on content changes without a version bump.
Add the skill path to .claude-plugin/marketplace.json under the skills array:
"skills": [
"./skills/mk-my-skill"
]