Skills are markdown instruction files that teach the agent how and when to use tools. Each skill lives in a directory containing aDocumentation Index
Fetch the complete documentation index at: https://openclaw.ai2me.io/llms.txt
Use this file to discover all available pages before exploring further.
SKILL.md file with YAML
frontmatter and a markdown body. OpenClaw loads bundled skills plus any local
overrides, and filters them at load time based on environment, config, and
binary presence.
Creating skills
Build and test a custom skill from scratch.
Skill Workshop
Review and approve agent-drafted skill proposals.
Skills config
Full
skills.* config schema and agent allowlists.ClawHub
Browse and install community skills.
Loading order
OpenClaw loads from these sources, highest precedence first. When the same skill name appears in multiple places, the highest source wins.| Priority | Source | Path |
|---|---|---|
| 1 — highest | Workspace skills | <workspace>/skills |
| 2 | Project agent skills | <workspace>/.agents/skills |
| 3 | Personal agent skills | ~/.agents/skills |
| 4 | Managed / local skills | ~/.openclaw/skills |
| 5 | Bundled skills | shipped with the install |
| 6 — lowest | Extra directories | skills.load.extraDirs + plugin skills |
SKILL.md appears anywhere under a configured root:
name frontmatter field (or the directory name
when name is missing).
Codex CLI’s native
$CODEX_HOME/skills directory is not an OpenClaw
skill root. Use openclaw migrate plan codex to inventory those skills, then
openclaw migrate codex to copy them into your OpenClaw workspace.Per-agent vs shared skills
In multi-agent setups, each agent has its own workspace. Use the path that matches your desired visibility:| Scope | Path | Visible to |
|---|---|---|
| Per-agent | <workspace>/skills | Only that agent |
| Project-agent | <workspace>/.agents/skills | Only that workspace’s agent |
| Personal-agent | ~/.agents/skills | All agents on this machine |
| Shared managed | ~/.openclaw/skills | All agents on this machine |
| Extra dirs | skills.load.extraDirs | All agents on this machine |
Agent allowlists
Skill location (precedence) and skill visibility (which agent can use it) are separate controls. Use allowlists to restrict which skills an agent sees, regardless of where they are loaded from.Allowlist rules
Allowlist rules
- Omit
agents.defaults.skillsto leave all skills unrestricted by default. - Omit
agents.list[].skillsto inheritagents.defaults.skills. - Set
agents.list[].skills: []to expose no skills for that agent. - A non-empty
agents.list[].skillslist is the final set — it does not merge with defaults. - The effective allowlist applies across prompt building, slash-command discovery, sandbox sync, and skill snapshots.
Plugins and skills
Plugins can ship their own skills by listingskills directories in
openclaw.plugin.json (paths relative to the plugin root). Plugin skills load
when the plugin is enabled — for example, the browser plugin ships a
browser-automation skill for multi-step browser control.
Plugin skill directories merge at the same low-precedence level as
skills.load.extraDirs, so a same-named bundled, managed, agent, or workspace
skill overrides them. Gate them via metadata.openclaw.requires.config on the
plugin’s config entry.
See Plugins and Tools for the full plugin system.
Skill Workshop
Skill Workshop is a proposal queue between the agent and your active skill files. When the agent spots reusable work, it drafts a proposal instead of writing directly toSKILL.md. You review and approve
before anything changes.
Installing from ClawHub
ClawHub is the public skills registry. Useopenclaw skills commands for install and update, or the clawhub CLI for
publish and sync.
| Action | Command |
|---|---|
| Install a skill into the workspace | openclaw skills install <slug> |
| Install from a Git repository | openclaw skills install git:owner/repo@ref |
| Install a local skill directory | openclaw skills install ./path/to/skill --as my-tool |
| Install for all local agents | openclaw skills install <slug> --global |
| Update all workspace skills | openclaw skills update --all |
| Update a shared managed skill | openclaw skills update <slug> --global |
| Update all shared managed skills | openclaw skills update --all --global |
| Verify a skill’s trust envelope | openclaw skills verify <slug> |
| Print the generated Skill Card | openclaw skills verify <slug> --card |
| Publish / sync via ClawHub CLI | clawhub sync --all |
Install details
Install details
openclaw skills install installs into the active workspace skills/
directory by default. Add --global to install into the shared
~/.openclaw/skills directory, visible to all local agents unless agent
allowlists narrow it.Git and local installs expect SKILL.md at the source root. The slug comes
from SKILL.md frontmatter name when valid, then falls back to the
directory or repository name. Use --as <slug> to override.
openclaw skills update tracks ClawHub installs only — reinstall Git or
local sources to refresh them.Verification and security scanning
Verification and security scanning
openclaw skills verify <slug> asks ClawHub for the skill’s
clawhub.skill.verify.v1 trust envelope. Installed ClawHub skills verify
against the version and registry recorded in .clawhub/origin.json.ClawHub skill pages expose the latest security scan state before install,
with detail pages for VirusTotal, ClawScan, and static analysis. The
command exits non-zero when ClawHub marks verification as failed. Publishers
recover false positives through the ClawHub dashboard or
clawhub skill rescan <slug>.Private archive installs
Private archive installs
Gateway clients that need non-ClawHub delivery can stage a zip skill archive
with
skills.upload.begin, skills.upload.chunk, and skills.upload.commit,
then install with skills.install({ source: "upload", ... }). This path is
off by default and requires skills.install.allowUploadedArchives: true in
openclaw.json. Normal ClawHub installs never need that setting.Security
Path containment
Path containment
Workspace, project-agent, and extra-dir skill discovery only accepts skill
roots whose resolved realpath stays inside the configured root, unless
skills.load.allowSymlinkTargets explicitly trusts a target root.
Managed ~/.openclaw/skills and personal ~/.agents/skills may contain
symlinked skill folders, but every SKILL.md realpath must still stay
inside its resolved skill directory.Scan and scan overrides
Scan and scan overrides
Gateway-backed skill installs (onboarding, Skills settings UI) run the
built-in dangerous-code scanner before executing installer metadata.
critical findings block by default; suspicious findings warn only.
openclaw skills install <slug> downloads a ClawHub skill folder directly
and does not use the installer-metadata scanner.Secret injection scope
Secret injection scope
skills.entries.*.env and skills.entries.*.apiKey inject secrets into the
host process for that agent turn only — not into the sandbox. Keep
secrets out of prompts and logs.SKILL.md format
Every skill needs at minimum aname and description in the frontmatter:
OpenClaw follows the AgentSkills spec. The
frontmatter parser supports single-line keys only —
metadata must be a
single-line JSON object. Use {baseDir} in the body to reference the skill
folder path.Optional frontmatter keys
URL shown as “Website” in the macOS Skills UI. Also supported via
metadata.openclaw.homepage.When
true, the skill is exposed as a user-invocable slash command.When
true, OpenClaw keeps the skill’s instructions out of the agent’s normal
prompt. The skill is still available as a slash command when user-invocable
is also true.When set to
tool, the slash command bypasses the model and dispatches
directly to a registered tool.Tool name to invoke when
command-dispatch: tool is set.For tool dispatch, forwards the raw args string to the tool with no
core parsing. The tool receives
{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }.Gating
OpenClaw filters skills at load time usingmetadata.openclaw (single-line
JSON in the frontmatter). A skill with no metadata.openclaw block is always
eligible unless explicitly disabled.
When
true, always include the skill and skip all other gates.Optional emoji shown in the macOS Skills UI.
Optional URL shown as “Website” in the macOS Skills UI.
Platform filter. When set, the skill is only eligible on the listed OSes.
Each binary must exist on
PATH.At least one binary must exist on
PATH.Each env var must exist in the process or be provided via config.
Each
openclaw.json path must be truthy.Env var name associated with
skills.entries.<name>.apiKey.Optional installer specs used by the macOS Skills UI (brew / node / go / uv / download).
Legacy
metadata.clawdbot blocks are still accepted when
metadata.openclaw is absent, so older installed skills keep their
dependency gates and installer hints. New skills should use
metadata.openclaw.Installer specs
Installer specs tell the macOS Skills UI how to install a dependency:Installer selection rules
Installer selection rules
- When multiple installers are listed, the gateway picks one preferred option (brew when available, otherwise node).
- If all installers are
download, OpenClaw lists each entry so you can see all available artifacts. - Specs can include
os: ["darwin"|"linux"|"win32"]to filter by platform. - Node installs honor
skills.install.nodeManagerinopenclaw.json(default: npm; options: npm / pnpm / yarn / bun). This only affects skill installs; the Gateway runtime should still be Node. - Gateway installer preference: Homebrew → uv → configured node manager → go → download.
Per-installer details
Per-installer details
- Homebrew: OpenClaw does not auto-install Homebrew or translate brew
formulas into system package commands. In Linux containers without
brew, brew-only installers are hidden; use a custom image or install the dependency manually. - Go: if
gois missing andbrewis available, the gateway installs Go via Homebrew first and setsGOBINto Homebrew’sbin. - Download:
url(required),archive(tar.gz|tar.bz2|zip),extract(default: auto when archive detected),stripComponents,targetDir(default:~/.openclaw/tools/<skillKey>).
Sandboxing notes
Sandboxing notes
requires.bins is checked on the host at skill load time. If an agent
runs in a sandbox, the binary must also exist inside the container.
Install it via agents.defaults.sandbox.docker.setupCommand or a custom
image. setupCommand runs once after container creation and requires
network egress, a writable root FS, and a root user in the sandbox.Config overrides
Toggle and configure bundled or managed skills underskills.entries in
~/.openclaw/openclaw.json:
false disables the skill even when bundled or installed. The coding-agent
bundled skill is opt-in — set skills.entries.coding-agent.enabled: true
and ensure one of claude, codex, opencode, or another supported CLI
is installed and authenticated.Convenience field for skills that declare
metadata.openclaw.primaryEnv.
Supports a plaintext string or a SecretRef object.Environment variables injected for the agent run. Only injected when the
variable is not already set in the process.
Optional bag for custom per-skill configuration fields.
Optional allowlist for bundled skills only. When set, only bundled skills
in the list are eligible. Managed and workspace skills are unaffected.
Config keys match the skill name by default. If a skill defines
metadata.openclaw.skillKey, use that key under skills.entries. Quote
hyphenated names: JSON5 allows quoted keys.Environment injection
When an agent run starts, OpenClaw:Reads skill metadata
OpenClaw resolves the effective skill list for the agent, applying gating
rules, allowlists, and config overrides.
Injects env and API keys
skills.entries.<key>.env and skills.entries.<key>.apiKey are applied to
process.env for the duration of the run.Builds the system prompt
Eligible skills are compiled into a compact XML block and injected into the
system prompt.
claude-cli backend, OpenClaw also materializes the same
eligible skill snapshot as a temporary Claude Code plugin and passes it via
--plugin-dir. Other CLI backends use the prompt catalog only.
Snapshots and refresh
OpenClaw snapshots eligible skills when a session starts and reuses that list for all subsequent turns in the session. Changes to skills or config take effect on the next new session. Skills refresh mid-session in two cases:- The skills watcher detects a
SKILL.mdchange. - A new eligible remote node connects.
Skills watcher
Skills watcher
By default, OpenClaw watches skill folders and bumps the snapshot when
Use
SKILL.md files change. Configure under skills.load:allowSymlinkTargets for intentional symlinked layouts where a skill
root symlink points outside the configured root, for example
<workspace>/skills/manager -> ~/Projects/manager/skills.Remote macOS nodes (Linux gateway)
Remote macOS nodes (Linux gateway)
If the Gateway runs on Linux but a macOS node is connected with
system.run allowed, OpenClaw can treat macOS-only skills as eligible when
the required binaries are present on that node. The agent should run those
skills via the exec tool with host=node.Offline nodes do not make remote-only skills visible. If a node stops
answering bin probes, OpenClaw clears its cached bin matches.Token impact
When skills are eligible, OpenClaw injects a compact XML block into the system prompt. The cost is deterministic:- Base overhead (only when ≥ 1 skill): ~195 characters
- Per skill: ~97 characters + your
name,description, andlocationfield lengths - XML escaping expands
& < > " 'into entities, adding a few characters per occurrence - At ~4 chars/token, 97 chars ≈ 24 tokens per skill before field lengths
Related
Creating skills
Step-by-step guide to authoring a custom skill.
Skill Workshop
Proposal queue for agent-drafted skills.
Skills config
Full
skills.* config schema and agent allowlists.Slash commands
How skill slash commands are registered and routed.
ClawHub
Browse and publish skills on the public registry.
Plugins
Plugins can ship skills alongside the tools they document.