OpenClaw uses AgentSkills-compatible skill folders to teach the agent how to use tools. Each skill is a directory containing aDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
SKILL.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, highest precedence first:| # | Source | Path |
|---|---|---|
| 1 | 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 | Extra skill folders | skills.load.extraDirs (config) |
Per-agent vs shared skills
In multi-agent setups each agent has its own workspace:| 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 that machine |
| Shared managed/local | ~/.openclaw/skills | All agents on that machine |
| Shared extra dirs | skills.load.extraDirs (lowest precedence) | All agents on that machine |
Agent skill allowlists
Skill location and skill visibility are separate controls. Location/precedence decides which copy of a same-named skill wins; agent allowlists decide which skills an agent can actually use.Allowlist rules
Allowlist rules
- Omit
agents.defaults.skillsfor unrestricted skills by default. - Omit
agents.list[].skillsto inheritagents.defaults.skills. - Set
agents.list[].skills: []for no skills. - A non-empty
agents.list[].skillslist is the final set for that agent — it does not merge with defaults. - The effective allowlist applies across prompt building, skill 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. This is the right place for tool-specific
operating guides that are too long for the tool description but should be
available whenever the plugin is installed — for example, the browser
plugin ships a browser-automation skill for multi-step browser control.
Plugin skill 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.
Skill Workshop
The optional, experimental Skill Workshop plugin can create or update workspace skills from reusable procedures observed during agent work. It is disabled by default and must be explicitly enabled viaplugins.entries.skill-workshop.
Skill Workshop writes only to <workspace>/skills, scans generated
content, supports pending approval or automatic safe writes, quarantines
unsafe proposals, and refreshes the skill snapshot after successful
writes so new skills become available without a Gateway restart.
Use it for corrections such as “next time, verify GIF attribution” or
hard-won workflows such as media QA checklists. Start with pending
approval; use automatic writes only in trusted workspaces after reviewing
its proposals. Full guide: Skill Workshop plugin.
ClawHub (install and sync)
ClawHub is the public skills registry for OpenClaw. Use nativeopenclaw skills commands for discover/install/update, or the
separate clawhub CLI for publish/sync workflows. Full guide:
ClawHub.
| Action | Command |
|---|---|
| Install a skill into the 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.
Configured skill roots also support one grouping level, such as
skills/<group>/<skill>/SKILL.md, so related third-party skills can be
kept under a shared folder without broad recursive scanning.
ClawHub skill pages expose the latest security scan state before install,
with scanner detail pages for VirusTotal, ClawScan, and static analysis.
openclaw skills install <slug> remains only the install path; publishers
recover false positives through the ClawHub dashboard or
clawhub skill rescan <slug>.
Security
- 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.
SKILL.md format
SKILL.md must include at least:
metadata should be a single-line JSON object. Use {baseDir} in
instructions to reference the skill folder path.
Optional frontmatter keys
URL surfaced as “Website” in the macOS Skills UI. Also supported via
metadata.openclaw.homepage.When
true, the skill is exposed as a user slash command.When
true, the skill is excluded from the model prompt (still available via user invocation).When set to
tool, the slash command bypasses the model and dispatches directly to a tool.Tool name to invoke when
command-dispatch: tool is set.For tool dispatch, forwards the raw args string to the tool (no core parsing). The tool is invoked with
{ 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:
When
true, always include the skill (skip other gates).Optional emoji used by the macOS Skills UI.
Optional URL shown as “Website” in the macOS Skills UI.
Optional list of platforms. If set, the skill is only eligible on those OSes.
Each must exist on
PATH.At least one must exist on
PATH.Env var must exist or be provided in config.
List of
openclaw.json paths that 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).
metadata.openclaw is present, the skill is always eligible (unless
disabled in config or blocked by skills.allowBundled for bundled skills).
Legacy
metadata.clawdbot blocks are still accepted when
metadata.openclaw is absent, so older installed skills keep their
dependency gates and installer hints. New and updated skills should use
metadata.openclaw.Sandboxing notes
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: the
summarizeskill (skills/summarize/SKILL.md) needs thesummarizeCLI in the sandbox container to run there.
Installer specs
Installer selection rules
Installer selection rules
- 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. - Gateway-backed installer selection is preference-driven: when install specs mix kinds, OpenClaw prefers Homebrew when
skills.install.preferBrewis enabled andbrewexists, thenuv, then the configured node manager, then other fallbacks likegoordownload. - If every install spec is
download, OpenClaw surfaces all download options instead of collapsing to one preferred installer.
Per-installer details
Per-installer details
- 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>).
Config overrides
Bundled and managed skills can be toggled and supplied with env values underskills.entries in ~/.openclaw/openclaw.json:
false disables the skill even if it is bundled or installed.
The bundled coding-agent skill is opt-in: set
skills.entries.coding-agent.enabled: true before exposing it to agents,
then make sure one of claude, codex, opencode, or pi is installed and
authenticated for its own CLI.Convenience for skills that declare
metadata.openclaw.primaryEnv. Supports plaintext or SecretRef.Injected only if the variable is not already set in the process.
Optional bag for custom per-skill fields. Custom keys must live here.
Optional allowlist for bundled skills only. If set, only bundled skills in the list are eligible (managed/workspace skills unaffected).
metadata.openclaw.skillKey, use that key under skills.entries.
For stock image generation/editing inside OpenClaw, use the core
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. If you pick openai/*, google/*,
fal/*, or another provider-specific image model, add that provider’s
auth/API key too.Environment injection
When an agent run starts, OpenClaw:- Reads skill metadata.
- Applies
skills.entries.<key>.envandskills.entries.<key>.apiKeytoprocess.env. - Builds the system prompt with eligible skills.
- Restores the original environment after the run ends.
claude-cli backend, OpenClaw also materializes the same
eligible snapshot as a temporary Claude Code plugin and passes it with
--plugin-dir. Claude Code can then use its native skill resolver while
OpenClaw still owns precedence, per-agent allowlists, gating, and
skills.entries.* env/API key injection. Other CLI backends use the
prompt catalog only.
Snapshots and refresh
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 refresh mid-session in two cases:- The skills watcher is enabled.
- A new eligible remote node appears.
Skills watcher
By default, OpenClaw watches skill folders and bumps the skills snapshot whenSKILL.md files change. Configure under skills.load:
Remote macOS nodes (Linux gateway)
If the Gateway runs 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.which or system.run. Offline nodes do not make
remote-only skills visible. If a connected node stops answering bin
probes, OpenClaw clears its cached bin matches so agents no longer see
skills that cannot currently run there.
Token impact
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.
& < > " ' 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 with the install (npm package or OpenClaw.app).~/.openclaw/skills exists for
local overrides — for example, pinning or patching a skill without
changing the bundled copy. Workspace skills are user-owned and override
both on name conflicts.
Looking for more skills?
Browse https://clawhub.ai. Full configuration schema: Skills config.Related
- ClawHub — public skills registry
- Creating skills — building custom skills
- Plugins — plugin system overview
- Skill Workshop plugin — generate skills from agent work
- Skills config — skill configuration reference
- Slash commands — all available slash commands