| summary | read_when | ||
|---|---|---|---|
Skill folder format, required files, allowed file types, limits. |
|
A skill is a folder.
Required:
SKILL.md(orskill.md)
Optional:
- any supporting text-based files (see “Allowed files”)
.clawhubignore(ignore patterns for publish/sync, legacy.clawdhubignore).gitignore(also honored)
Local install metadata (written by the CLI):
<skill>/.clawhub/origin.json(legacy.clawdhub)
Workdir install state (written by the CLI):
<workdir>/.clawhub/lock.json(legacy.clawdhub)
- Markdown with optional YAML frontmatter.
- The server extracts metadata from frontmatter during publish.
descriptionis used as the skill summary in the UI/search.
Skill metadata is declared in the YAML frontmatter at the top of your SKILL.md. This tells the registry (and security analysis) what your skill needs to run.
---
name: my-skill
description: Short summary of what this skill does.
version: 1.0.0
---Declare your skill's runtime requirements under metadata.openclaw (aliases: metadata.clawdbot, metadata.clawdis).
---
name: my-skill
description: Manage tasks via the Todoist API.
metadata:
openclaw:
requires:
env:
- TODOIST_API_KEY
bins:
- curl
primaryEnv: TODOIST_API_KEY
---| Field | Type | Description |
|---|---|---|
requires.env |
string[] |
Environment variables your skill expects. |
requires.bins |
string[] |
CLI binaries that must all be installed. |
requires.anyBins |
string[] |
CLI binaries where at least one must exist. |
requires.config |
string[] |
Config file paths your skill reads. |
primaryEnv |
string |
The main credential env var for your skill. |
always |
boolean |
If true, skill is always active (no explicit install needed). |
skillKey |
string |
Override the skill's invocation key. |
emoji |
string |
Display emoji for the skill. |
homepage |
string |
URL to the skill's homepage or docs. |
os |
string[] |
OS restrictions (e.g. ["macos"], ["linux"]). |
install |
array |
Install specs for dependencies (see below). |
nix |
object |
Nix plugin spec (see README). |
config |
object |
Clawdbot config spec (see README). |
If your skill needs dependencies installed, declare them in the install array:
metadata:
openclaw:
install:
- kind: brew
formula: jq
bins: [jq]
- kind: node
package: typescript
bins: [tsc]Supported install kinds: brew, node, go, uv.
ClawHub's security analysis checks that what your skill declares matches what it actually does. If your code references TODOIST_API_KEY but your frontmatter doesn't declare it under requires.env, the analysis will flag a metadata mismatch. Keeping declarations accurate helps your skill pass review and helps users understand what they're installing.
---
name: todoist-cli
description: Manage Todoist tasks, projects, and labels from the command line.
version: 1.2.0
metadata:
openclaw:
requires:
env:
- TODOIST_API_KEY
bins:
- curl
primaryEnv: TODOIST_API_KEY
emoji: "\u2705"
homepage: https://github.com/example/todoist-cli
---Only “text-based” files are accepted by publish.
- Extension allowlist is in
packages/schema/src/textFiles.ts(TEXT_FILE_EXTENSIONS). - Content types starting with
text/are treated as text; plus a small allowlist (JSON/YAML/TOML/JS/TS/Markdown/SVG).
Limits (server-side):
- Total bundle size: 50MB.
- Embedding text includes
SKILL.md+ up to ~40 non-.mdfiles (best-effort cap).
- Derived from folder name by default.
- Must be lowercase and URL-safe:
^[a-z0-9][a-z0-9-]*$.
- Each publish creates a new version (semver).
- Tags are string pointers to a version;
latestis commonly used.