A personal, opinionated variant of the Agent Skills specification. The upstream format requires YAML frontmatter for metadata. This variant deliberately omits frontmatter entirely, and all metadata and instructions live inside a single XML-mixed <skill> element in the Markdown body.
A skill is a directory whose name matches the root tag's name attribute and contains, at minimum, a SKILL.md file:
skill-name/
├── assets/ # Optional: static resources (templates, images, lookup tables, schemas)
├── references/ # Optional: on-demand documentation loaded only when needed
├── scripts/ # Optional: self-contained executable code the agent can run
└── SKILL.md # Required: XML-mixed body, no frontmatter
The first non-empty line of the file is the opening <skill ...> tag. Nothing sits outside <skill> … </skill>.
The entire document is wrapped in a single <skill> element. Metadata that upstream places in frontmatter is expressed here as XML attributes on the root tag.
<skill name="skill-name">
...
</skill>| Attribute | Required | Type | Constraints |
|---|---|---|---|
name |
Yes | string | 1-64 chars. Lowercase a-z, 0-9, and hyphens -. Must not start/end with - or contain --. Must match the parent directory name. |
self-invoked |
No | boolean | "true" if the skill may auto-activate based on <purpose> matching. "false" if it only runs when explicitly invoked by the user. Default: "true". |
license |
No | string | License name (e.g. "MIT", "Apache-2.0", "Proprietary") or reference to a bundled file (e.g. "LICENSE.txt"). |
compatibility |
No | string | 1-500 chars. Environment requirements (product, packages, network access, etc.). Include only when the skill has non-obvious dependencies. |
version |
No | string | Free-form version identifier (e.g. "1.0", "2026.03"). |
Additional custom attributes are allowed for tooling-specific metadata. Use kebab-case and prefer short names.
Three section tags are required, in this exact order:
| Tag | Purpose |
|---|---|
<purpose> |
Overall goal of the skill, stated as a single sentence. |
<guidelines> |
Non-negotiable rules the agent must always obey. |
<implementation> |
Concrete step-by-step blueprint, process, rules, tables, and examples. |
- Use only the section tags above, in the order above.
- Write Markdown directly inside tags. Do not wrap section content in code fences.
- Insert a blank line after every opening tag and before every closing tag.
- Do not add an
##heading that repeats the tag name (e.g. no## Purposeinside<purpose>). - Use
###subheadings for nested organization within a section.
Recommended budgets keep the <purpose> body and every hint attribute scannable rather than prose. These are authoring recommendations; the reference parser does not enforce them.
| Location | Recommended minimum | Recommended maximum |
|---|---|---|
<purpose> body (single line) |
9 | 13 |
hint="..." attribute on tags |
6 | 9 |
The <purpose> body should be a single declarative sentence describing the skill's overall use end-to-end. It replaces the upstream description frontmatter field.
hint is optional structurally and recommended on all three required tags.
Examples (word counts shown):
<purpose>body -Perform one focused task the agent can invoke on demand always.(11)<purpose>body -Produce a deterministic output shaped exactly by the input contract.(10)<purpose>hint -Overall goal the agent must achieve here(7)<guidelines>hint -Non-negotiable rules the agent must always obey(7)<implementation>hint -Concrete blueprint the agent must follow step by step(9)
<skill name="skill-name">
<purpose hint="Overall goal the agent must achieve here">
[Single sentence, recommended 9-13 words, describing the skill's overall use.]
</purpose>
<guidelines hint="Non-negotiable rules the agent must always obey">
- [Rule 1]
- [Rule 2]
- [Rule N]
</guidelines>
<implementation hint="Concrete blueprint the agent must follow step by step">
## [Process Section Heading]
1. **Step-1** - Description
2. **Step-2** - Description
## [Rules or Tables Section]
| Column | Column |
| ------ | ------ |
| Value | Value |
</implementation>
</skill>
Discovery loads content in layers:
- Root attributes +
<purpose>- identify the skill and describe when to activate it. - Full
SKILL.mdbody - loaded when the skill activates. - Resources - files under
assets/,references/,scripts/load only when required.
Keep SKILL.md under 500 lines. Move detailed material to references/.
Use relative paths from the skill root, one level deep:
See [the reference guide](references/REFERENCE.md) for details.
Run scripts/extract.py to process input.
| Aspect | Upstream | Personal Variant |
|---|---|---|
| Frontmatter | Required (name, description, ...) |
Not used. File contains no frontmatter block at all. |
| Metadata location | YAML frontmatter fields | XML attributes on the <skill> root tag |
| Skill identity | Frontmatter name field |
name attribute on <skill> |
| Auto-invocation | Implicit / product-specific | Explicit self-invoked boolean attribute on <skill> ("true" / "false") |
| Activation hints | Frontmatter description field (max 1024 chars) |
<purpose> body, recommended 9-13 words (not parser-enforced) |
| License / version | Frontmatter fields | license / version attributes on <skill> |
| Body format | Free-form Markdown | Markdown wrapped in <skill> + three required section tags in fixed order |
| Section structure | Author's choice | Fixed: <purpose> → <guidelines> → <implementation> |
| Semantic hints | Not defined | hint="..." attribute on section tags, recommended 6-9 words |