Skip to main content
A skill is a directory with a SKILL.md file at its root. That file declares the skill identity and tells the agent how to use the package. The directory can also contain scripts, references, assets, templates, and other files the instructions point to. Keep the first version small. Start with instructions only, install it, test it explicitly in one thread, then add dependencies or runtime tools only when the workflow needs them.
If you only want to use skills that already exist, start with Skills Overview, Installing Skills, and Managing Skills. This page is for people who want to author a new skill package.

Create a skill

For a Pioneer-native skill, write the contract in YAML frontmatter at the top of SKILL.md. Do not create _meta.json for new native skills; that file exists for imported OpenClaw-style or registry-style packages.
1

Create a directory

Create one directory named after the skill slug. The root of that directory must contain SKILL.md.
2

Write native frontmatter

Add name, slug, description, and any optional fields the skill actually needs. Keep identity, dependency, metadata, path, policy, and runtime declarations in YAML frontmatter.
3

Write the instructions

In the Markdown body, tell the agent when to use the skill, what files to read, what commands are allowed or expected, what setup steps exist, and what output shape to produce.
4

Add resources only when needed

Add references/ for longer docs, scripts/ for repeatable helpers, and assets/ for templates or files the skill uses. Mention each resource from SKILL.md; Pioneer does not auto-load supporting files.
5

Package one top-level directory

Archive the skill from its parent directory so the archive expands to exactly one top-level folder containing SKILL.md.
6

Install and test explicitly

Install the folder or archive in the desktop Skills view, review validation and health diagnostics, attach the skill from the composer, and test it before enabling implicit invocation.
The first test prompt should be low-risk:
After that, run the smallest real task that proves the instructions work.

Package layout

Only SKILL.md is required. Supporting folders are conventional: For native Pioneer skills, put the skill contract in YAML frontmatter inside SKILL.md.
_meta.json is compatibility support for imported OpenClaw-style or registry-style skills. For Pioneer-native skills, use YAML frontmatter in SKILL.md. If _meta.json exists, its identity fields can override frontmatter identity fields, so do not include it unless you intentionally need compatibility behavior.
Other files are packaged with the skill, but they are not loaded automatically. Mention them from SKILL.md so the agent knows when to read or use them.

Minimal SKILL.md

For native Pioneer skills, include slug explicitly in the YAML frontmatter. The open Agent Skills strict profile requires name and description; Pioneer-native packages should provide all three fields in SKILL.md.

Frontmatter fields

Use YAML frontmatter between the opening and closing --- markers. Field names are case-sensitive. Empty strings are trimmed and treated as missing. Unknown top-level fields are ignored by the parser, so do not rely on a custom top-level field unless another system reads it. The body after frontmatter must not be empty. Pioneer stores the body as the full instruction text returned by read_skill.

Frontmatter summary

Field reference

Each section below describes one top-level YAML frontmatter field. The contract details are based on the current Pioneer parser behavior.

name

Use name for the display name stored in the compiled skill definition.
Accepted type: string. Strict Agent Skills conformance requires name. The strict profile also checks that it is 64 characters or less and does not start with -, end with -, or contain --. For imported compatibility packages, Pioneer can fall back to _meta.json.displayName, then slug, but that sidecar fallback is not the native authoring path. New Pioneer skills should set name directly in frontmatter. Prefer a short lowercase hyphen name when you want maximum compatibility:

slug

Use slug for stable machine identity.
Accepted type: string. Pioneer-native skills must set slug in SKILL.md frontmatter. The slug is normalized to lowercase hyphen form. For example, Repo Review becomes repo-review. The installed qualified slug is owner/slug, such as platform/repo-review. For imported OpenClaw-style or registry-style packages, Pioneer can also read _meta.json.slug. Treat that as a compatibility path, not the recommended way to author a new Pioneer skill. Use lowercase letters, digits, and hyphens in the file to avoid surprises:

description

Use description to tell Pioneer and the model when the skill is relevant.
Accepted type: string. This field controls skill discovery. Keep both parts in the same string:
  • what the skill does
  • when it should be used
Strict Agent Skills conformance requires description and limits it to 1024 characters. If it is missing, Pioneer falls back to the first non-empty body line, but that fallback is worse for discovery and reports strict conformance issues.

owner

Use owner to put the skill in a namespace.
Accepted type: string. Pioneer uses owner with slug to create the qualified slug:
For native Pioneer skills, set owner in frontmatter when you need a namespace other than the default. If no owner is provided, Pioneer can derive it from a nested source path. Otherwise it defaults to pioneer. For imported compatibility packages, _meta.json.owner or _meta.json.ownerId can also provide the owner. When present, sidecar identity fields take precedence over frontmatter identity fields, so do not include _meta.json in a native skill unless you intentionally want that override behavior.

version

Use version as a catalog and health hint.
Accepted type: string. Quote versions so YAML does not reinterpret values such as 1.2 as numbers. For native Pioneer skills, put the version hint in frontmatter. For imported compatibility packages, Pioneer can read _meta.json.version or _meta.json.latest.version. Those sidecar values take precedence over frontmatter version when present. Pioneer stores this as a version hint. It is not a package manager lock and does not enforce semantic version rules.

license

Use license to describe the package license.
Accepted type: string. Strict conformance rejects an explicitly empty license. It does not validate SPDX values today, but SPDX-style values are easiest to review.

compatibility

Use compatibility for short constraints a reviewer should see.
Accepted type: string. Strict conformance allows it when it is between 1 and 500 characters. Put long setup docs in references/ instead of making this field long.

metadata

Use metadata for extra structured data that should travel with the skill definition. Accepted types:
  • YAML object
  • JSON-object string
Recommended YAML object form:
Accepted JSON string form:
If metadata is a YAML string, it must parse as a JSON object. Plain text metadata is reported as invalid. An unquoted inline form like metadata: {author: platform-team} is a YAML object, not a string, and is also accepted. Pioneer recognizes two nested namespaces from compatibility ecosystems:
Known dependency metadata is merged into the compiled dependency set:
  • metadata.openclaw.requires.bins
  • metadata.openclaw.requires.config
  • metadata.clawdbot.requires.commands
  • metadata.clawdbot.requires.bins
Strict Agent Skills conformance is intentionally narrower: top-level custom metadata values should be strings. Nested objects are strict-compatible only for openclaw and clawdbot.

allowed-tools

Use allowed-tools as an Agent Skills allowlist hint. Strict-compatible form:
Accepted by Pioneer but not strict-compatible:
Accepted types:
  • string, split on whitespace
  • array of strings
Pioneer parses and stores this field on the skill runtime definition. It is a declaration from the skill contract, not a replacement for gateway policy. Runtime exposure still depends on actual configured tools, trust, dynamic-tool settings, and policy.

dependencies

Use dependencies when missing local state should be visible in install, health, and runtime checks. Dependencies are checks, not setup scripts. Pioneer checks whether the declared environment variable, binary, command, MCP server, or API key is already available on the gateway host. It does not install missing dependencies from this field. Do not declare a binary or command in dependencies if the skill’s own setup instructions are supposed to install it first. That can make the skill look broken before the agent has a chance to follow the setup flow. In that case, put the setup flow in the instruction body and declare only external requirements that must already exist.
Accepted type: object. Each dependency list accepts either a string or an array of strings:
Supported dependency fields: If install is blocked by a dependency failure, install the missing binary, set the environment variable, register the MCP server, or install the skill on a gateway that has those dependencies.

paths

Use paths to hint that a skill is relevant when a turn touches matching files or directories.
Accepted types:
  • string
  • array of strings
Single-string form:
Path matches participate in turn resolution. They do not grant filesystem permissions and do not install the skill into those paths.

user-invocable

Use user-invocable to control explicit user selection.
Accepted type: boolean. Default:
Use false for internal helper skills that should not appear as something a user selects directly:
This field must be a YAML boolean, not a string. Use true or false, not "true" or "false".

disable-model-invocation

Use disable-model-invocation to prevent automatic model-side invocation.
Accepted type: boolean. Default:
Set it to true when the skill should be available only through explicit user or client selection:
This is separate from workspace policy. Workspace policy can still disable the skill or keep it explicit-only even when this field is false.

runtime

Use runtime only when the skill must expose callable tools. Accepted type: object with optional tools array. Most skills should omit runtime. Instructions, references, and scripts are easier to review. Runtime tools add policy, trust, dependency, and output-safety concerns.
Supported runtime tool fields: Runtime tool kinds: Runtime tools are still subject to gateway configuration, trust policy, dependency rechecks, output policy caps, duplicate-name checks, and per-skill tool limits. A declared tool may be excluded even when the skill installs.

_meta.json compatibility sidecar

Native Pioneer skills should use YAML frontmatter in SKILL.md for name, slug, owner, version, description, dependencies, metadata, and runtime declarations. Pioneer still supports _meta.json beside SKILL.md so imported OpenClaw-style or registry-style skills can keep their existing package identity metadata. The parser reads only a small set of sidecar identity fields:
Supported _meta.json fields: Precedence rules:
  • _meta.json.slug takes precedence over frontmatter slug.
  • _meta.json.owner or _meta.json.ownerId takes precedence over frontmatter owner.
  • _meta.json.version or _meta.json.latest.version takes precedence over frontmatter version.
  • _meta.json.displayName is used only when frontmatter name is missing.
Do not put native-only fields such as description, dependencies, paths, allowed-tools, metadata, user-invocable, disable-model-invocation, or runtime in _meta.json. Pioneer reads those from SKILL.md frontmatter.

Package and install details

Archive from the parent directory:
The archive must contain a single top-level root, such as repo-review/, and that root must contain SKILL.md. Install the package from the desktop Skills view. After upload, read validation issues, dependency diagnostics, security findings, and policy state before using the skill in important work. New installs should stay explicit-only until the skill has been tested in at least one low-risk thread.

Quality checklist

  • The skill has a short, stable slug.
  • The description says exactly when the skill should be used.
  • The body tells the agent what to do, what files to read, and what output shape to produce.
  • Large details live in references/ and are linked from the body.
  • Scripts are executable, deterministic, and tested before packaging.
  • Dependencies are declared when missing state should block install or use.
  • Runtime tools are avoided unless the workflow truly needs callable tools.
  • The first install is tested on a sandbox gateway or low-risk workspace.