Skill Manager
Add community skills to this agent, list what's installed, or remove what you no longer want. A "skill" here is a directory with a SKILL.md — the same format Claude Code natively uses — so the exact same artifact works in either place.
This is a CORE feature. See docs/skill-manager.md for the full reference.
Dispatch
Parse the user's command and route to the correct MCP tool:
| User says | Action |
|---|---|
/agent:skill install <source> | Call skill_install({ source }) |
/agent:skill install <source> --scope=<plugin|project|user> | Call skill_install({ source, scope }) |
/agent:skill install <source> --force | Call skill_install({ source, force: true }) — only after the user confirms an overwrite |
/agent:skill list | Call skill_list() and print the card |
/agent:skill remove <name> | Call skill_remove({ name }) (dry run) then ask the user to confirm, then call again with confirm: true |
/agent:skill remove <name> --force | Call skill_remove({ name, confirm: true }) directly — no confirmation prompt |
Default scope is plugin (./skills/). Users can promote a skill later.
Install flow
- Validate the source (GitHub shorthand, full URL, or local path — the tool parses all three)
- Call
skill_install({ source })— the tool clones, detects format, checks requirements - Print the returned card verbatim
- If
format: openclawwas detected (rejected), DO NOT retry withforce. Suggest/agent:import-skilland stop. - If the skill installed with warnings, remind the user what needs to be set up (missing env var, binary, etc.)
List flow
- Call
skill_list() - Print the card. On messaging channels, compress to one line per skill.
Remove flow
- Call
skill_remove({ name })first — this is a dry run; it reports what WOULD be removed - Ask the user: "Remove <name> from <dir>? [y/N]" — short and clear
- If they confirm, call
skill_remove({ name, confirm: true }) - If they say no, just acknowledge and stop
If the user passed --force, skip step 2 and call directly with confirm: true.
Response style
- Terse. No preamble.
- Install: show the install card (already formatted) then one line of what to do next if warnings.
- List: the card as-is on CLI/WebChat; one line per skill on WhatsApp/Telegram.
- Remove: confirmation prompt → result line.
Never
- Do NOT run install scripts from cloned repos (no
postinstall, noinstall.sh). The tool does not run them and neither do you. - Do NOT try to auto-convert OpenClaw-flavored skills. If the tool rejects one as OpenClaw, direct the user to
/agent:import-skill. - Do NOT install without showing the install card — the user needs to see what they're getting.
References
docs/skill-manager.md— full docslib/skill-manager.ts— implementationdocs/INDEX.md— master feature list