Skills
The Skills system extends agent capabilities through modular, file-based skill definitions. Skills inject domain knowledge, tool instructions, and helper scripts into agent sessions — either via the OpenClaw gateway (brain sessions) or via Claude Code's filesystem loader (ca-leash sub-agents). Ludus maintains two independent pipelines to serve these distinct runtime contexts.
Key files: ludus/skills/*/SKILL.md, ludus/claude-skills/*/SKILL.md
Commands: ludus ops rsync-agents (syncs skills to host), clawhub install <name> (third-party)
Last verified: 2026-04-01
Two Skill Pipelines
| Pipeline | Source | Host Path | Used By |
|---|---|---|---|
| OpenClaw | skills/ | ~/.openclaw/skills/ | Agent brain session (via gateway) |
| Claude Code | claude-skills/ | ~/.claude/skills/ (bind mount) | ca-leash sub-agents |
OpenClaw skills are injected into the agent system prompt by the gateway. Claude Code skills are bind-mounted read-only into containers and discovered by Claude Code's filesystem-based skill loader when running via ca-leash.
How OpenClaw Skills Work
OpenClaw discovers skills from multiple sources. Ludus deploys shared skills
to ~/.openclaw/skills/ where the gateway discovers them natively.
Skills live in skills/<name>/ and are synced to the ludus host via
ludus ops rsync-agents. The gateway picks them up from
~/.openclaw/skills/ — the native managed/local skills path.
How Claude Code Skills Work
Claude Code skills live in claude-skills/<name>/ and are synced to
agents/shared/claude-skills/ on the host. They are bind-mounted into
every agent container at ~/.claude/skills/ (read-only).
These skills are available to ca-leash sub-agents — headless Claude Code processes spawned for focused work (code, research, documents). They are NOT visible to the OpenClaw gateway or the agent brain session.
Creating a New Skill
-
Create a directory:
skills/<name>/ -
Add
SKILL.mdwith YAML frontmatter:---
name: <skill-name>
description: <what the skill does>
metadata:
openclaw:
emoji: "<emoji>"
requires:
bins:
- <required-binary>
env:
- <required-env-var>
primaryEnv: <main-env-var>
---
# Skill content here... -
Add helper scripts alongside
SKILL.mdif needed -
Reference
{baseDir}inSKILL.mdfor script paths (OpenClaw resolves this at runtime) -
Run
ludus ops rsync-agentsto sync to the host; OpenClaw hot-reloads on file change
Skill Loading Chain
OpenClaw checks these locations (highest precedence first):
| # | Path | Scope |
|---|---|---|
| 1 | <workspace>/skills/ | Per agent workspace |
| 2 | <workspace>/.agents/skills/ | Per agent (project-level) |
| 3 | ~/.agents/skills/ | All agents of the user |
| 4 | ~/.openclaw/skills/ | All agents (managed/installed) |
| 5 | Bundled skills | Global (shipped with OpenClaw) |
| 6 | skills.load.extraDirs in openclaw.json | Configurable paths |
When multiple sources define a skill with the same name, the higher-precedence source wins. A workspace-level skill (source #1) always overrides a managed skill (source #4) or a bundled skill (source #5). Be intentional about naming to avoid unintended shadowing.
Restricting Skills Per Agent
To limit which agents load a skill, use the agents.list[].skills filter in
openclaw.json. Currently all agents share all skills (no filter applied).
Installing Third-Party Skills
clawhub install <skill-name>
This installs into ~/.openclaw/skills/ (source #4 above).