SKILL.md Format Specification
Status: Draft Version: 0.1.0 Target Release: v0.24.0 Related Issues: #462, #647, #473, #2851. Overview
SKILL.md is the standard format for declaring, distributing, and composing agent skills (plugins) in the GAIA ecosystem. A skill is a self-contained unit of capability — one or more@tool-decorated functions packaged with metadata that
describes permissions, model requirements, dependencies, and security posture.
Design goals:
- Declarative — A single file describes everything the runtime needs to load, sandbox, and execute the skill.
- Composable — Agents compose skills; an agent’s manifest (#462) lists the skills it requires.
- Auditable — Permission grants and security tiers are explicit, enabling automated scanning and human review.
- Compatible — An OpenClaw compatibility layer allows migration of existing SKILL.md files with minimal modification.
2. File Format
A SKILL.md file consists of YAML frontmatter delimited by--- fences,
followed by a Markdown body.
2.1 Full Schema
2.2 Field Reference
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Unique skill identifier. Lowercase alphanumeric with hyphens. Max 64 chars. |
version | string | Yes | SemVer 2.0.0 version string. |
description | string | Yes | One-line human-readable description. Max 200 chars. |
author | string | Yes | Publisher name or GitHub handle. |
license | string | Yes | SPDX license identifier. |
permissions | list | Yes | Permission grants. See Section 3. |
requirements | object | No | Runtime requirements. Defaults assume no constraints. |
tools | list | Yes | Tool declarations. Must have at least one entry. |
security_tier | string | Yes | One of: verified, community, experimental. |
registry | string | No | Registry URL. Defaults to AMD official registry. |
tags | list | No | Searchable tags for marketplace discovery. |
homepage | string | No | URL to skill documentation or landing page. |
repository | string | No | URL to source repository. |
2.3 Naming Conventions
Skill names must match the regex^[a-z][a-z0-9-]{0,63}$. Names are globally
unique within a registry. The following prefixes are reserved:
| Prefix | Reserved For |
|---|---|
amd- | AMD-published official skills |
gaia- | GAIA core framework skills |
mcp- | Skills that wrap MCP servers |
3. Permission Model
Permissions follow the format<domain>:<level>. Every skill must declare
permissions explicitly — there are no implicit grants.
3.1 Permission Domains
| Domain | Levels | Description |
|---|---|---|
filesystem | read, write, none | Local file system access |
network | read, write, none | Outbound network requests (read = GET-like, write = POST/PUT/DELETE) |
shell | execute, none | Shell command execution |
desktop | control, none | Desktop automation (mouse, keyboard, screen capture) |
mcp | connect, none | Connect to MCP servers |
env | read, none | Read environment variables beyond those in env_vars |
database | read, write, none | Database connections (SQLite, PostgreSQL, etc.) |
3.2 Permission Scoping
Permissions can be narrowed with path or pattern qualifiers:3.3 Permission Escalation Rules
- A skill cannot request permissions beyond its security tier ceiling.
experimentalskills: all permissions allowed, but execution is sandboxed.communityskills:shell:executeanddesktop:controlrequire explicit user approval at install time.verifiedskills: all declared permissions are pre-approved by AMD audit.
| Permission | Verified | Community | Experimental |
|---|---|---|---|
filesystem:read | Auto | Auto | Sandboxed |
filesystem:write | Auto | Prompt | Sandboxed |
network:* | Auto | Auto | Sandboxed |
shell:execute | Auto | Prompt | Sandboxed |
desktop:control | Auto | Prompt | Sandboxed |
mcp:connect | Auto | Auto | Sandboxed |
database:write | Auto | Prompt | Sandboxed |
4. Security Tiers
4.1 AMD Verified
- Code-signed by AMD with a hardware-backed signing key.
- Security audit completed (static analysis, dependency audit, manual review).
- Published to the official AMD skill registry.
- Automatic permission grants — no user prompts.
- Eligible for pre-installation in GAIA distributions.
- Re-audited on every version bump.
4.2 Community Reviewed
- Signed by the publisher (GPG or Sigstore).
- Automated security scanning: static analysis (Bandit), dependency audit (pip-audit), secret detection (detect-secrets).
- Community ratings and review system on the marketplace.
- Dangerous permissions (
shell:execute,desktop:control,database:write) require explicit user approval at install time. - Publisher reputation score influences visibility in search results.
4.3 Experimental
- No signature required.
- Executed in a sandboxed environment (restricted filesystem, network proxy, no direct shell access).
- User must explicitly approve installation with
--allow-experimentalflag. - Cannot be auto-installed as agent dependencies.
- Runtime resource limits enforced (CPU time, memory, network bandwidth).
- Displayed with a warning in the marketplace UI.
4.4 Tier Promotion Path
5. Tool Registration
SKILL.md tool declarations map directly to the existing@tool decorator and
_TOOL_REGISTRY in src/gaia/agents/base/tools.py.
5.1 Loading Process
When an agent callsself.load_skill("web-search"), the runtime:
- Resolves the skill directory:
~/.gaia/skills/web-search/ - Parses
SKILL.mdfrontmatter to extract metadata. - Validates permissions against the skill’s security tier.
- Installs Python dependencies listed in
requirements.dependencies(if not already satisfied). - Imports
tools.pyfrom the skill directory. - Verifies that every function listed in the
toolsfrontmatter section exists intools.pyand is decorated with@tool. - Registers tools into
_TOOL_REGISTRYwith a namespaced key:<skill-name>/<tool-name>(e.g.,web-search/search_web).
5.2 Tool Namespacing
To prevent collisions when an agent loads multiple skills, tools are registered with a namespace prefix. The LLM sees the short name; the registry uses the qualified name.5.3 Skill tools.py Convention
Each skill’stools.py must use the standard @tool decorator:
5.4 Validation Rules
The runtime validates that:- Every tool declared in SKILL.md frontmatter has a matching
@tool-decorated function intools.py. - Parameter names and types in the frontmatter match the function signature.
- The function has a docstring (used as tool description fallback).
- Return type is JSON-serializable.
6. Skill Discovery and Installation
6.1 CLI Commands
6.2 Programmatic API
7. Skill Directory Structure
7.1 Installed Skills
7.2 Skill Development Layout
For skill authors developing locally:7.3 Lock File
~/.gaia/skills/skill-lock.json records exact installed versions and
dependency resolutions, analogous to package-lock.json:
8. OpenClaw Compatibility
OpenClaw’s ClawHub hosts thousands of community skills. GAIA’s compatibility layer must enforce trust boundaries since external skills are untrusted by default.8.1 Format Differences
| Aspect | OpenClaw SKILL.md | GAIA SKILL.md |
|---|---|---|
| Frontmatter | YAML with claw_version field | YAML with version field |
| Permissions | Coarse (network: true/false) | Granular (network:read, scoped) |
| Security | No tier system | Three-tier model |
| Tools | actions list with handler paths | tools list mapping to @tool |
| Dependencies | pip_requires list | requirements.dependencies |
| Signatures | None | Required for community/verified |
8.2 Migration Tool
- Parses OpenClaw YAML frontmatter.
- Maps
actionsentries to GAIAtoolsformat. - Expands coarse permissions (
network: true) to granular equivalents (network:read,network:write). - Sets
security_tier: experimentalfor all migrated skills (trust must be re-established). - Generates a GAIA-compatible
tools.pywrapper that delegates to the original OpenClaw handler files. - Produces a migration report listing manual review items.
8.3 Runtime Adapter
For skills that cannot be cleanly migrated, GAIA provides an OpenClaw runtime adapter:@tool decorators at runtime,
enforces GAIA’s permission model, and runs the skill in the experimental
sandbox regardless of any tier claims in the original file.
9. Relationship to Agent Manifest (#462)
Skills are composable units; agents compose skills. The agent manifest system (#462) declares which skills an agent requires.9.1 Agent Manifest References Skills
9.2 Migration from Hardcoded Wiring (#473)
The current agent system uses hardcoded mixin classes for tool registration:src/gaia/agents/chat/tools/ and
src/gaia/agents/code/tools/ will be refactored into standalone skills
during the v0.24.0 migration (#473). The mixins remain available as a
backward-compatible fallback during the deprecation period.
9.3 Composition Hierarchy
10. Marketplace Integration
10.1 Publishing Workflow
10.2 Versioning
Skills follow SemVer 2.0.0:- Major — Breaking changes to tool signatures or permission requirements.
- Minor — New tools added, backward-compatible feature additions.
- Patch — Bug fixes, documentation updates.
gaia skill install use the
standard comparators: >=, <=, ==, ~=, !=, ^.
10.3 Dependency Resolution
Skills can depend on other skills:10.4 Registry API
The registry exposes a REST API for programmatic access:11. GitHub Issue Cross-References
| Issue | Title | Relationship |
|---|---|---|
| #462 | Agent Manifest: declarative metadata system | Agent manifests reference skills. SKILL.md is the skill-level complement to AGENT.yaml. |
| #647 | Skill marketplace: format spec, security tiers | This document is the format spec requested in #647. Security tiers defined in Section 4. |
| #473 | Migrate existing agents to manifest system | Existing tool mixins become skills. Migration path in Section 9.2. |
| #285 | Scope skills for gaia agents | Original scoping issue. This spec fulfills the format definition requirement. |
| #691 | SKILL.md format specification | This document fulfills the specification requested in #691. |
| #692 | OpenClaw skill compatibility | OpenClaw mapping defined in Section 10 (Compatibility Layer). |
Appendix A: Complete Minimal Example
The smallest valid SKILL.md:tools.py: