CoderClaw uses AgentSkills-compatible skill folders to teach the agent how to use tools. Each skill is a directory containing a SKILL.md with YAML frontmatter and instructions. CoderClaw loads bundled skills plus optional local overrides, and filters them at load time based on environment, config, and binary presence.
Skills are loaded from three places:
~/.coderclaw/skills<workspace>/skillsIf a skill name conflicts, precedence is:
<workspace>/skills (highest) → ~/.coderclaw/skills → bundled skills (lowest)
Additionally, you can configure extra skill folders (lowest precedence) via
skills.load.extraDirs in ~/.coderclaw/coderclaw.json.
In multi-agent setups, each agent has its own workspace. That means:
<workspace>/skills for that agent only.~/.coderclaw/skills (managed/local) and are visible
to all agents on the same machine.skills.load.extraDirs (lowest
precedence) if you want a common skills pack used by multiple agents.If the same skill name exists in more than one place, the usual precedence applies: workspace wins, then managed/local, then bundled.
Plugins can ship their own skills by listing skills directories in
coderclaw.plugin.json (paths relative to the plugin root). Plugin skills load
when the plugin is enabled and participate in the normal skill precedence rules.
You can gate them via metadata.coderclaw.requires.config on the plugin’s config
entry. See Plugins for discovery/config and Tools for the
tool surface those skills teach.
ClawHub is the public skills registry for CoderClaw. Browse at https://clawhub.com. Use it to discover, install, update, and back up skills. Full guide: ClawHub.
Common flows:
clawhub install <skill-slug>clawhub update --allclawhub sync --allBy default, clawhub installs into ./skills under your current working
directory (or falls back to the configured CoderClaw workspace). CoderClaw picks
that up as <workspace>/skills on the next session.
skills.entries.*.env and skills.entries.*.apiKey inject secrets into the host process
for that agent turn (not the sandbox). Keep secrets out of prompts and logs.SKILL.md must include at least:
---
name: nano-banana-pro
description: Generate or edit images via Gemini 3 Pro Image
---
Notes:
metadata should be a single-line JSON object.{baseDir} in instructions to reference the skill folder path.homepage — URL surfaced as “Website” in the macOS Skills UI (also supported via metadata.coderclaw.homepage).user-invocable — true|false (default: true). When true, the skill is exposed as a user slash command.disable-model-invocation — true|false (default: false). When true, the skill is excluded from the model prompt (still available via user invocation).command-dispatch — tool (optional). When set to tool, the slash command bypasses the model and dispatches directly to a tool.command-tool — tool name to invoke when command-dispatch: tool is 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>" }.
CoderClaw filters skills at load time using metadata (single-line JSON):
---
name: nano-banana-pro
description: Generate or edit images via Gemini 3 Pro Image
metadata:
{
"coderclaw":
{
"requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"], "config": ["browser.enabled"] },
"primaryEnv": "GEMINI_API_KEY",
},
}
---
Fields under metadata.coderclaw:
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 on PATH.requires.anyBins — list; at least one must exist on PATH.requires.env — list; env var must exist or be provided in config.requires.config — list of coderclaw.json paths that must be truthy.primaryEnv — env var name associated with skills.entries.<name>.apiKey.install — optional array of installer specs used by the macOS Skills UI (brew/node/go/uv/download).Note on sandboxing:
requires.bins is checked on the host at skill load time.agents.defaults.sandbox.docker.setupCommand (or a custom image).
setupCommand runs 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 summarize skill (skills/summarize/SKILL.md) needs the summarize CLI
in the sandbox container to run there.Installer example:
---
name: gemini
description: Use Gemini CLI for coding assistance and Google search lookups.
metadata:
{
"coderclaw":
{
"emoji": "♊️",
"requires": { "bins": ["gemini"] },
"install":
[
{
"id": "brew",
"kind": "brew",
"formula": "gemini-cli",
"bins": ["gemini"],
"label": "Install Gemini CLI (brew)",
},
],
},
}
---
Notes:
download, CoderClaw lists each entry so you can see the available artifacts.os: ["darwin"|"linux"|"win32"] to filter options by platform.skills.install.nodeManager in coderclaw.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 is missing and brew is available, the gateway installs Go via Homebrew first and sets GOBIN to Homebrew’s bin when possible.Download installs: url (required), archive (tar.gz |
tar.bz2 |
zip), extract (default: auto when archive detected), stripComponents, targetDir (default: ~/.coderclaw/tools/<skillKey>). |
If no metadata.coderclaw is present, the skill is always eligible (unless
disabled in config or blocked by skills.allowBundled for bundled skills).
~/.coderclaw/coderclaw.json)Bundled/managed skills can be toggled and supplied with env values:
{
skills: {
entries: {
"nano-banana-pro": {
enabled: true,
apiKey: "GEMINI_KEY_HERE",
env: {
GEMINI_API_KEY: "GEMINI_KEY_HERE",
},
config: {
endpoint: "https://example.invalid",
model: "nano-pro",
},
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
Note: if the skill name contains hyphens, quote the key (JSON5 allows quoted keys).
Config keys match the skill name by default. If a skill defines
metadata.coderclaw.skillKey, use that key under skills.entries.
Rules:
enabled: false disables 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 declare metadata.coderclaw.primaryEnv.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).When an agent run starts, CoderClaw:
skills.entries.<key>.env or skills.entries.<key>.apiKey to
process.env.This is scoped to the agent run, not a global shell environment.
CoderClaw 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.
If the Gateway is running on Linux but a macOS node is connected with system.run allowed (Exec approvals security not set to deny), CoderClaw can treat macOS-only skills as eligible when the required binaries are present on that node. The agent should execute those skills via the nodes tool (typically nodes.run).
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.
By default, CoderClaw watches skill folders and bumps the skills snapshot when SKILL.md files change. Configure this under skills.load:
{
skills: {
load: {
watch: true,
watchDebounceMs: 250,
},
},
}
When skills are eligible, CoderClaw injects a compact XML list of available skills into the system prompt (via formatSkillsForPrompt in pi-coding-agent). The cost is deterministic:
<name>, <description>, and <location> values.Formula (characters):
total = 195 + Σ (97 + len(name_escaped) + len(description_escaped) + len(location_escaped))
Notes:
& < > " ' into entities (&, <, etc.), increasing length.CoderClaw ships a baseline set of skills as bundled skills as part of the
install (npm package or CoderClaw.app). ~/.coderclaw/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.
See Skills config for the full configuration schema.
Browse https://clawhub.com.