Version: 1.0.0
This specification defines a manifest-first package format for AI skills. The goal is to make skill metadata easy for tooling to parse, validate, lock, cache, and display while keeping the actual instruction content readable in Markdown.
- Single source of truth — canonical metadata lives in
SKILL.toml, not in Markdown frontmatter. - Human content stays human —
SKILL.mdcontains the skill instructions for agents and authors. - Backward-compatible rollout — tooling may temporarily read legacy YAML frontmatter, but that format is compatibility-only.
- Executable standards — schemas and validators should be able to check packages automatically.
- Version-aware distribution — semantic versions express release intent, while package managers may lock exact commits and content hashes.
A compliant skill package contains:
skill-package/
├── SKILL.toml
├── SKILL.md
└── supporting/ # optional
SKILL.toml— machine-readable manifestSKILL.md— human/agent-readable instructions
- During migration,
SKILL.mdMAY include a reduced YAML frontmatter block. - If both exist,
SKILL.tomlMUST take precedence. - Tools SHOULD warn when they must fall back to legacy frontmatter.
SKILL.toml is the canonical metadata document.
manifest_version = "1.0"
[skill]
name = "git-workflow"
version = "1.2.0"
description = "Use when planning safe git commits, history cleanup, or atomic change grouping"
type = "technique"
category = "engineering"
boundary = "Focused on local git hygiene, commit planning, and safe history editing"
maturity = "beta"
last_verified = "2026-03-14"
tags = ["git", "workflow", "commits"]
topics = ["version-control", "code-hygiene"]
non_goals = ["Teaching Git fundamentals"]
[source]
repository = "https://github.com/example/opencode-skill-git-workflow"
license = "MIT"
[compat]
min_opencode_version = "0.1.0"Manifest schema version.
- Type: string
- Example:
"1.0" - Purpose: allows tooling to negotiate compatibility and schema evolution.
Machine-friendly skill identifier.
- Type: string
- Format: lowercase kebab-case
- Example:
git-workflow
Semantic version for the skill package.
- Type: string
- Format: semantic version
- Example:
1.2.0
A short trigger-oriented description.
- Type: string
- Recommended style: begin with
Use when ...
Defines the instructional mode of the skill.
Allowed values:
techniquepatternreferencediscipline
Primary management category for the skill.
Recommended values:
engineeringfrontendbackenddevopstestingsecurityresearchwritingworkflowproductgeneral
One sentence describing the intended coverage of the skill.
Lightweight lifecycle and trust signal.
Allowed values:
draftalphabetastabledeprecated
Date the skill was last verified against the expected workflow.
- Type: string
- Format:
YYYY-MM-DD - Example:
2026-03-14
Short keywords for search and clustering.
- Type: array of strings
- Recommended format: lowercase kebab-case
- Example:
tags = ["git", "workflow"]
Higher-level themes used for grouping related skills.
- Type: array of strings
- Recommended format: lowercase kebab-case
- Example:
topics = ["version-control"]
Problems the skill explicitly does not try to solve.
- Type: array of strings
Optional source metadata describing the repository, homepage, or license.
Recommended keys:
repositorylicensehomepage
Optional compatibility information for runtimes and package managers.
Recommended keys:
min_opencode_versionmin_skillmine_version
SKILL.md contains the actual instructional content.
Recommended structure:
# Skill Title
## Overview
## When to Use
## Core Technique / Pattern / Reference / Rule
## Common Mistakes
## See AlsoSKILL.md SHOULD remain content-first. Tooling MAY derive a minimal compatibility frontmatter block if required by older runtimes, but full metadata SHOULD NOT be duplicated manually.
Tools SHOULD validate at least:
manifest_versionis supported.skill.namematches^[a-z0-9]+(-[a-z0-9]+)*$.skill.versionis valid semver.skill.descriptionis not empty and preferably starts withUse when.skill.typeis one of the allowed values.skill.categoryis one of the recommended values or a recognized extension.skill.maturityis one of the allowed values.skill.last_verifiedmatchesYYYY-MM-DD.skill.tagsandskill.topicsare non-empty arrays.SKILL.mdexists besideSKILL.toml.
- Authors SHOULD manage
skill.versionmanually using semantic versioning. - Releases SHOULD be tagged in git using a corresponding version tag such as
v1.2.0. - Package managers MAY resolve version constraints to exact commits and record those in lockfiles.
- Content-addressable caches MAY use tree hashes independent of release tags.
If you have a legacy skill with only SKILL.md frontmatter:
- Create
SKILL.tomlusing the existing metadata. - Add
versionandlast_verified. - Keep
SKILL.mdfocused on content. - Allow package managers to warn when operating in legacy fallback mode.
- Start with manifest-aware skill creation.
- Add schema validation in authoring and management tools.
- Add indexing and browsing tools.
- Add richer registry features only after package contracts stabilize.