GoClaw Skills System
GoClaw implements a skills system compatible with OpenClaw. Skills are markdown files that extend the agent’s capabilities by providing domain-specific knowledge and instructions.
Overview
Skills are loaded from configured directories in precedence order:
| Priority | Source | Path | Purpose |
|---|---|---|---|
| Lower | Extra | Config extraDirs | Additional directories (power user) |
| Higher | Workspace | <workspace>/skills/ | Installed and project-specific skills |
Higher precedence skills override lower ones with the same name.
Skills from the embedded catalog (bundled with GoClaw) can be installed to the workspace using the skills tool’s install action.
Skill Format
Each skill is a directory containing a SKILL.md file:
skills/
├── weather/
│ └── SKILL.md
├── discord/
│ └── SKILL.md
└── ...
SKILL.md Structure
---
name: My Skill
description: Short description of what this skill does
metadata:
openclaw:
emoji: "🔧"
os: ["darwin", "linux"]
requires:
bins: ["mytool"]
env: ["MY_API_KEY"]
install:
- kind: brew
formula: mytool
---
# My Skill
Instructions for the agent on how to use this skill...
Metadata Fields
emoji- Display emoji for the skillos- Supported operating systems (darwin,linux,windows)requires.bins- Required binaries (all must exist)requires.anyBins- Required binaries (at least one must exist)requires.env- Required environment variablesrequires.config- Required config keysinstall- Installation options
Install Kinds
| Kind | Description | Behavior |
|---|---|---|
brew | Homebrew formula | Auto-install |
go | Go module (go install) | Auto-install |
uv | Python uv tool | Auto-install |
download | Direct download URL | Manual (shows URL) |
npm/node | npm package | Manual (shows command) |
pnpm | pnpm package | Manual (shows command) |
yarn | yarn package | Manual (shows command) |
- Auto-install: GoClaw runs the install command automatically
- Manual: Returns the install command; agent runs it via
execif needed
Configuration
Add to goclaw.json:
{
"skills": {
"enabled": true,
"workspaceDir": "",
"extraDirs": [],
"watch": true,
"watchDebounceMs": 500,
"install": {
"allowEmbedded": true,
"allowClawHub": false,
"allowLocal": true
}
}
}
Options
| Option | Default | Description |
|---|---|---|
enabled | true | Enable/disable skills system |
workspaceDir | <workspace>/skills/ | Override workspace skills path |
extraDirs | [] | Additional skill directories |
watch | true | Watch for file changes |
watchDebounceMs | 500 | Debounce interval for changes |
install | See below | Installation source configuration |
entries | {} | Whitelist flagged skills (see below) |
Whitelisting Flagged Skills
When the security auditor flags a skill, it’s disabled by default. If you trust the skill, whitelist it:
{
"skills": {
"entries": {
"flagged-but-trusted": {
"enabled": true
}
}
}
}
This is the only use case for per-skill config. To remove an unwanted skill, simply uninstall it rather than disabling via config.
Security Auditor
GoClaw scans skill content for security concerns:
Detected Patterns
.env,.credentials,.secretsfile referencescurl | bash,wget | shpatterns- External webhook URLs (
webhook.site, etc.) - References to
~/.ssh,~/.aws - Long base64-encoded content
Behavior
When suspicious patterns are found:
- Skill is disabled by default
- Warning logged with details
- Shown in
/statusoutput - Must be explicitly enabled in config
Example warning:
Security Warning: Skill "suspicious-skill" has been flagged and disabled.
Found 2 security concern(s):
- Line 45 [warn]: References .env file (match: ~/.env)
- Line 67 [critical]: External webhook URL (match: webhook.site)
To enable: add to goclaw.json: {"skills":{"entries":{"suspicious-skill":{"enabled":true}}}}
Eligibility
A skill is eligible if:
- OS matches -
runtime.GOOSis in the skill’soslist (or list is empty) - Binaries exist - All
requires.binsare in PATH - Any binary exists - At least one
requires.anyBinsis in PATH - Env vars set - All
requires.envare defined - Not disabled - Not set to
enabled: falsein config - Passes audit - No security warnings (or explicitly enabled)
Commands
/status
Shows skill statistics and any flagged skills:
Skills: 54 total, 12 eligible
Flagged Skills: 1
- suspicious-skill (disabled): env_file, webhook_site
/skills
Lists all skills with their status. See the Skills Tool section below.
Skills Tool
The skills tool provides structured access to the skills registry for the agent. This is the preferred way to query skills programmatically rather than manually reading SKILL.md files.
Actions
list
List all skills with optional filtering.
Input:
{
"action": "list",
"filter": "eligible",
"verbose": false
}
Filters: all, eligible, ineligible, flagged, whitelisted
Output:
{
"summary": {
"total": 55,
"eligible": 11,
"ineligible": 43,
"flagged": 1,
"whitelisted": 0
},
"filter": "eligible",
"count": 11,
"skills": [
{
"name": "weather",
"emoji": "🌤️",
"description": "Get current weather and forecasts",
"status": "eligible",
"source": "bundled"
},
{
"name": "session-logs",
"status": "ineligible",
"reasons": ["binary: rg"],
"missing": {"bins": ["rg"]},
"source": "bundled"
},
{
"name": "canvas",
"status": "flagged",
"reasons": ["Security flag: outside_workspace (warn)"],
"source": "bundled"
}
]
}
Notes:
summaryprovides totals across all skills regardless of filterreasonsincluded for ineligible/flagged skillsmissingshows which specific bins/env are not found- With
verbose: true, also includespathandrequiresfields
info
Get detailed information about a specific skill.
Input:
{
"action": "info",
"skill": "himalaya"
}
Output:
{
"name": "himalaya",
"emoji": "📧",
"description": "CLI to manage emails via IMAP/SMTP",
"status": "ineligible",
"path": "/home/user/.openclaw/workspace/goclaw/skills/himalaya/SKILL.md",
"source": "bundled",
"requires": {
"bins": ["himalaya"]
},
"missing": ["binary: himalaya"],
"install": [
{
"id": "brew",
"kind": "brew",
"label": "Install via Homebrew",
"command": "brew install himalaya"
}
]
}
check
Check why a skill is ineligible and get fix suggestions.
Input:
{
"action": "check",
"skill": "video-frames"
}
Output (ineligible):
{
"name": "video-frames",
"eligible": false,
"reasons": ["binary: ffmpeg"],
"fixes": ["brew install ffmpeg", "apt install ffmpeg"]
}
Output (flagged):
{
"name": "suspicious-skill",
"eligible": false,
"reasons": ["Security flag: env_file (warn)"],
"fixes": ["{\"skills\":{\"entries\":{\"suspicious-skill\":{\"enabled\":true}}}}"]
}
Status Values
eligible- Ready to useineligible- Missing requirements (binaries, env vars, wrong OS)flagged- Disabled by security auditorwhitelisted- Manually enabled despite audit flags
search
Search available skills from all sources (embedded, clawhub, local).
Input:
{
"action": "search",
"query": "email"
}
Output:
{
"results": [
{
"name": "himalaya",
"description": "CLI to manage emails via IMAP/SMTP",
"source": "embedded",
"installed": false
}
]
}
install
Install a skill from a source.
Input:
{
"action": "install",
"skill": "himalaya",
"source": "embedded"
}
Sources: embedded (bundled with GoClaw), clawhub (remote registry - not yet implemented), local (workspace path)
Output:
{
"success": true,
"skill": "himalaya",
"path": "/home/user/.goclaw/skills/himalaya/SKILL.md"
}
Note: Installation is controlled by skills.install config:
{
"skills": {
"install": {
"allowEmbedded": true,
"allowClawHub": false,
"allowLocal": true
}
}
}
uninstall
Remove a skill from the workspace.
Input:
{
"action": "uninstall",
"skill": "himalaya"
}
Output:
{
"success": true,
"skill": "himalaya",
"message": "skill \"himalaya\" uninstalled"
}
Only skills installed to the workspace can be uninstalled. Skills from other sources (embedded catalog via extraDirs) cannot be removed via this action.
sources
List available skill sources/repositories.
Input:
{
"action": "sources"
}
Output:
{
"sources": [
{"name": "embedded", "enabled": true, "count": 55},
{"name": "clawhub", "enabled": false, "url": "https://clawhub.com", "note": "not yet implemented"},
{"name": "local", "enabled": true, "path": "~/.goclaw/workspace/skills"}
]
}
reload
Rescan skill directories and refresh the registry.
Input:
{
"action": "reload"
}
Use after manually adding skills to directories.
Embedded Catalog (Developer)
GoClaw ships with an embedded catalog of skills from OpenClaw. For GoClaw developers:
# Sync skills from OpenClaw repository
make skills-update
# Check for differences without updating
make skills-check
End users install skills from the embedded catalog using the skills tool’s install action.
Troubleshooting
Skill not appearing
- Check the skill directory has a
SKILL.mdfile - Check eligibility requirements (
bins,env,os) - Check if skill was flagged by auditor (
/status) - Check logs for parsing errors
Skill disabled by auditor
- Review the security warnings
- If the skill is safe, explicitly enable it:
{ "skills": { "entries": { "skill-name": { "enabled": true } } } }
Parsing errors
Some skills may have non-standard YAML frontmatter. GoClaw handles:
- Missing frontmatter (uses directory name)
- Unquoted colons in values
- Both YAML map and JSON string metadata
If a skill still fails to parse, check the logs for details.