Skills (OpenClaw)
OpenClaw uses AgentSkills-compatible skill folders to teach the agent how to use tools. Each skill is a directory containing aSKILL.md with YAML frontmatter and instructions. OpenClaw loads bundled skills plus optional local overrides, and filters them at load time based on environment, config, and binary presence.
Locations and precedence
OpenClaw loads skills from these sources:- Extra skill folders: configured with
skills.load.extraDirs - Bundled skills: shipped with the install (npm package or OpenClaw.app)
- Managed/local skills:
~/.openclaw/skills - Personal agent skills:
~/.agents/skills - Project agent skills:
<workspace>/.agents/skills - Workspace skills:
<workspace>/skills
<workspace>/skills (highest) → <workspace>/.agents/skills → ~/.agents/skills → ~/.openclaw/skills → bundled skills → skills.load.extraDirs (lowest)
Per-agent vs shared skills
In multi-agent setups, each agent has its own workspace. That means:- Per-agent skills live in
<workspace>/skillsfor that agent only. - Project agent skills live in
<workspace>/.agents/skillsand apply to that workspace before the normal workspaceskills/folder. - Personal agent skills live in
~/.agents/skillsand apply across workspaces on that machine. - Shared skills live in
~/.openclaw/skills(managed/local) and are visible to all agents on the same machine. - Shared folders can also be added via
skills.load.extraDirs(lowest precedence) if you want a common skills pack used by multiple agents.
Plugins + 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. Today those directories are merged into the same
low-precedence path as skills.load.extraDirs, so a same-named bundled,
managed, agent, or workspace skill overrides them.
You can gate them via metadata.openclaw.requires.config on the plugin’s config
entry. See Plugins for discovery/config and Tools for the
tool surface those skills teach.
ClawHub (install + sync)
ClawHub is the public skills registry for OpenClaw. Browse at https://clawhub.com. Use nativeopenclaw skills
commands to discover/install/update skills, or the separate clawhub CLI when
you need publish/sync workflows.
Full guide: ClawHub.
Common flows:
- Install a skill into your workspace:
openclaw skills install <skill-slug>
- Update all installed skills:
openclaw skills update --all
- Sync (scan + publish updates):
clawhub sync --all
openclaw skills install installs into the active workspace skills/
directory. The separate clawhub CLI also installs into ./skills under your
current working directory (or falls back to the configured OpenClaw workspace).
OpenClaw picks that up as <workspace>/skills on the next session.
Security notes
- Treat third-party skills as untrusted code. Read them before enabling.
- Prefer sandboxed runs for untrusted inputs and risky tools. See Sandboxing.
- Workspace and extra-dir skill discovery only accepts skill roots and
SKILL.mdfiles whose resolved realpath stays inside the configured root. - Gateway-backed skill dependency installs (
skills.install, onboarding, and the Skills settings UI) run the built-in dangerous-code scanner before executing installer metadata.criticalfindings block by default unless the caller explicitly sets the dangerous override; suspicious findings still warn only. openclaw skills install <slug>is different: it downloads a ClawHub skill folder into the workspace and does not use the installer-metadata path above.skills.entries.*.envandskills.entries.*.apiKeyinject secrets into the host process for that agent turn (not the sandbox). Keep secrets out of prompts and logs.- For a broader threat model and checklists, see Security.
Format (AgentSkills + Pi-compatible)
SKILL.md must include at least:
- We follow the AgentSkills spec for layout/intent.
- The parser used by the embedded agent supports single-line frontmatter keys only.
metadatashould be a single-line JSON object.- Use
{baseDir}in instructions to reference the skill folder path. - Optional frontmatter keys:
-
homepage— URL surfaced as “Website” in the macOS Skills UI (also supported viametadata.openclaw.homepage). -
user-invocable—true|false(default:true). Whentrue, the skill is exposed as a user slash command. -
disable-model-invocation—true|false(default:false). Whentrue, the skill is excluded from the model prompt (still available via user invocation). -
command-dispatch—tool(optional). When set totool, the slash command bypasses the model and dispatches directly to a tool. -
command-tool— tool name to invoke whencommand-dispatch: toolis set. -
command-arg-mode—raw(default). For tool dispatch, forwards the raw args string to the tool (no core parsing). The tool is invoked with params:{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }.
-
Gating (load-time filters)
OpenClaw filters skills at load time usingmetadata (single-line JSON):
metadata.openclaw:
always: true— always include the skill (skip other gates).emoji— optional emoji used by the macOS Skills UI.homepage— optional URL shown as “Website” in the macOS Skills UI.os— optional list of platforms (darwin,linux,win32). If set, the skill is only eligible on those OSes.requires.bins— list; each must exist onPATH.requires.anyBins— list; at least one must exist onPATH.requires.env— list; env var must exist or be provided in config.requires.config— list ofopenclaw.jsonpaths that must be truthy.primaryEnv— env var name associated withskills.entries.<name>.apiKey.install— optional array of installer specs used by the macOS Skills UI (brew/node/go/uv/download).
requires.binsis checked on the host at skill load time.- If an agent is sandboxed, the binary must also exist inside the container.
Install it via
agents.defaults.sandbox.docker.setupCommand(or a custom image).setupCommandruns once after the container is created. Package installs also require network egress, a writable root FS, and a root user in the sandbox. Example: thesummarizeskill (skills/summarize/SKILL.md) needs thesummarizeCLI in the sandbox container to run there.
- If multiple installers are listed, the gateway picks a single preferred option (brew when available, otherwise node).
- If all installers are
download, OpenClaw lists each entry so you can see the available artifacts. - Installer specs can include
os: ["darwin"|"linux"|"win32"]to filter options 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 (Bun is not recommended for WhatsApp/Telegram). - Go installs: if
gois missing andbrewis available, the gateway installs Go via Homebrew first and setsGOBINto Homebrew’sbinwhen possible. - Download installs:
url(required),archive(tar.gz|tar.bz2|zip),extract(default: auto when archive detected),stripComponents,targetDir(default:~/.openclaw/tools/<skillKey>).
metadata.openclaw is present, the skill is always eligible (unless
disabled in config or blocked by skills.allowBundled for bundled skills).
Config overrides (~/.openclaw/openclaw.json)
Bundled/managed skills can be toggled and supplied with env values:
image_generate tool with agents.defaults.imageGenerationModel instead of a
bundled skill. Skill examples here are for custom or third-party workflows.
For native image analysis, use the image tool with agents.defaults.imageModel.
For native image generation/editing, use image_generate with
agents.defaults.imageGenerationModel. If you pick openai/*, google/*,
fal/*, or another provider-specific image model, add that provider’s auth/API
key too.
Config keys match the skill name by default. If a skill defines
metadata.openclaw.skillKey, use that key under skills.entries.
Rules:
enabled: falsedisables the skill even if it’s bundled/installed.env: injected only if the variable isn’t already set in the process.apiKey: convenience for skills that declaremetadata.openclaw.primaryEnv. Supports plaintext string or SecretRef object ({ source, provider, id }).config: optional bag for custom per-skill fields; custom keys must live here.allowBundled: optional allowlist for bundled skills only. If set, only bundled skills in the list are eligible (managed/workspace skills unaffected).
Environment injection (per agent run)
When an agent run starts, OpenClaw:- Reads skill metadata.
- Applies any
skills.entries.<key>.envorskills.entries.<key>.apiKeytoprocess.env. - Builds the system prompt with eligible skills.
- Restores the original environment after the run ends.
Session snapshot (performance)
OpenClaw snapshots the eligible skills when a session starts and reuses that list for subsequent turns in the same session. Changes to skills or config take effect on the next new session. Skills can also refresh mid-session when the skills watcher is enabled or when a new eligible remote node appears (see below). Think of this as a hot reload: the refreshed list is picked up on the next agent turn.Remote macOS nodes (Linux gateway)
If the Gateway is running on Linux but a macOS node is connected withsystem.run allowed (Exec approvals security not set to deny), OpenClaw can treat macOS-only skills as eligible when the required binaries are present on that node. The agent should execute those skills via the exec tool with host=node.
This relies on the node reporting its command support and on a bin probe via system.run. If the macOS node goes offline later, the skills remain visible; invocations may fail until the node reconnects.
Skills watcher (auto-refresh)
By default, OpenClaw watches skill folders and bumps the skills snapshot whenSKILL.md files change. Configure this under skills.load:
Token impact (skills list)
When skills are eligible, OpenClaw injects a compact XML list of available skills into the system prompt (viaformatSkillsForPrompt in pi-coding-agent). The cost is deterministic:
- Base overhead (only when ≥1 skill): 195 characters.
- Per skill: 97 characters + the length of the XML-escaped
<name>,<description>, and<location>values.
- XML escaping expands
& < > " 'into entities (&,<, etc.), increasing length. - Token counts vary by model tokenizer. A rough OpenAI-style estimate is ~4 chars/token, so 97 chars ≈ 24 tokens per skill plus your actual field lengths.
Managed skills lifecycle
OpenClaw ships a baseline set of skills as bundled skills as part of the install (npm package or OpenClaw.app).~/.openclaw/skills exists for local
overrides (for example, pinning/patching a skill without changing the bundled
copy). Workspace skills are user-owned and override both on name conflicts.
Config reference
See Skills config for the full configuration schema.Looking for more skills?
Browse https://clawhub.com.Related
- Creating Skills — building custom skills
- Skills Config — skill configuration reference
- Slash Commands — all available slash commands
- Plugins — plugin system overview