Skip to main content

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.

Agent Quick Reference

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

PipelineSourceHost PathUsed By
OpenClawskills/~/.openclaw/skills/Agent brain session (via gateway)
Claude Codeclaude-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

Skill Creation Steps
  1. Create a directory: skills/<name>/

  2. Add SKILL.md with 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...
  3. Add helper scripts alongside SKILL.md if needed

  4. Reference {baseDir} in SKILL.md for script paths (OpenClaw resolves this at runtime)

  5. Run ludus ops rsync-agents to sync to the host; OpenClaw hot-reloads on file change

Skill Loading Chain

OpenClaw checks these locations (highest precedence first):

#PathScope
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)
5Bundled skillsGlobal (shipped with OpenClaw)
6skills.load.extraDirs in openclaw.jsonConfigurable paths
When Skill Names Collide

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).