📦 openclaw-skill-manager — OpenClaw 技能管理器
v3.1.1管理 OpenClaw 技能的多空间安装、查询、更新和自定义空间配置。支持系统内置、全局、主脑、专才和自定义五层技能空间架构,动态识别当前 Agent 配置和技能分布。
详细分析 ▾
运行时依赖
版本
此版本未检测到任何变更。版本已升级至 3.1.1,但文件和文档均未更新。所有技能功能和文档与上一版本保持一致。
安装命令
点击复制技能文档
管理 OpenClaw 技能的多空间安装、查询、更新和自定义空间配置。
架构说明
技能空间层级
技能空间层级:
├── 系统内置: /skills (bundled)
├── 全局: ~/.openclaw/skills (managed)
├── 主脑: ~/.openclaw/workspace/skills (workspace)
├── 专才: ~/.openclaw/workspace-shared/skills (extra)
└── 自定义: 用户配置的路径 (extra)
Source 分类映射
| Source | 分类 | 路径 |
|---|---|---|
openclaw-bundled | 系统内置 | ~/openclaw/skills |
openclaw-managed | 全局 | ~/.openclaw/skills |
openclaw-workspace | 主脑 | ~/.openclaw/workspace/skills |
openclaw-extra | 扩展 | 专才 + 自定义空间 |
命令工作流
Phase 1: 添加自定义技能空间
输入: 用户请求添加新的技能空间
输出: 配置更新结果
Step 1: 获取当前 Agent 配置
openclaw agents list
解析 Workspace 路径:
openclaw agents list | grep -A1 "Workspace:" | grep "Workspace:" | sed 's/.Workspace: //' | sort | uniq
向用户展示可选空间:
检测到以下 Agent 工作空间:
- 主脑空间: ~/.openclaw/workspace
- 专才空间: ~/.openclaw/workspace-shared (code_expert, content_expert, stock_expert)
请输入要添加的技能空间路径: (可直接输入序号 1/2,或输入自定义绝对路径)
Step 2: 用户输入处理
- 输入 1 → 路径=
~/.openclaw/workspace/skills - 输入 2 → 路径=
~/.openclaw/workspace-shared/skills - 输入其他路径 → 验证后添加
- 输入已存在路径 → 提示已存在,跳过
Step 3: 验证路径
# 检查路径是否存在 if [ ! -d "<用户输入路径>" ]; then echo "路径不存在,是否创建? (yes/no)" # 用户确认后创建 mkdir -p "<用户输入路径>" fi
# 检查是否已在配置中 openclaw config get skills.load.extraDirs | grep -q "<用户输入路径>" && echo "已存在,跳过"
Step 4: 用户确认
📝 即将添加技能空间: 路径: /new/custom/path 父目录: /new/custom
⚠️ 确认添加? (yes/no):
Step 5: 更新配置
修改 ~/.openclaw/openclaw.json:
{
"skills": {
"load": {
"extraDirs": [
"/existing/path",
"/new/custom/path"
],
"watch": true,
"watchDebounceMs": 250
}
}
}
Step 6: 重启 Gateway
openclaw gateway restart
Step 7: 验证
openclaw config get skills.load.extraDirs
openclaw skills list | grep -c "openclaw-extra"
Step 8: 返回结果
✅ 已添加自定义技能空间: /new/custom/path
🔄 Gateway 已重启
📦 该路径下的技能现在可通过 openclaw skills list 查看
Phase 2: 安装技能
输入: 技能名称或地址、目标空间
输出: 安装结果报告
Step 1: 获取可用安装空间
openclaw config get skills.load.extraDirs
分类显示:
可用的安装目标空间: [1] 全局空间 ~/.openclaw/skills [2] 主脑空间 ~/.openclaw/workspace/skills (main) [3] 专才空间 ~/.openclaw/workspace-shared/skills (code_expert, content_expert, stock_expert) [4] 自定义空间 /Users/liber/custom-skills
请选择安装目标 (输入序号 1-4):
Step 2: 用户输入技能名称
请输入要安装的技能名称:
(或输入 URL/本地路径进行手动安装)
Step 3: 解析安装源类型
- 纯名称 (如
stock-market-pro) → clawhub 安装 - URL (如
https://...) → 手动安装 - 本地路径 (如
/path/to/skill) → 手动安装
Step 4: 用户确认
📝 即将安装技能: 名称: stock-market-pro 方式: clawhub 安装 目标: 专才空间 (~/.openclaw/workspace-shared/skills)
⚠️ 确认安装? (yes/no):
Step 5: 执行安装
方式 A - clawhub:
clawhub install --workdir
方式 B - 手动:
# 下载/复制到目标路径 if [[ "" =~ ^https?:// ]]; then curl -L "" | tar -xz -C "/" else cp -r "" "/" fi
# 标记为手动安装 touch "//.manual-install"
Step 6: 验证安装
# 检查技能是否出现在列表中 openclaw skills list | grep ""
# 检查 SKILL.md 完整性 cat "//SKILL.md" | grep -E "^(name|description):"
Step 7: 返回结果
成功:
✅ 技能 已安装到 空间
📦 来源: clawhub / 手动安装
📍 路径:
失败:
❌ 安装失败: <错误信息>🔧 可能原因:
- 网络连接问题
- 技能名称拼写错误
- 目录权限不足
💡 尝试: clawhub search 确认技能名称
Phase 3: 查询技能列表
输入: 查询参数(可选过滤)
输出: 格式化的技能清单
Step 1: 获取 CLI 输出
openclaw skills list 2>&1
CLI 失败时的 fallback:
# 如果 CLI 失败,使用备用方法
if ! openclaw skills list >/dev/null 2>&1; then
echo "⚠️ CLI 不可用,使用备用扫描..."
# 扫描配置中的 extraDirs
for dir in $(openclaw config get skills.load.extraDirs | jq -r '.[]'); do
ls -1 "$dir" 2>/dev/null
done
fi
Step 2: 解析 CLI 输出
提取技能信息:
# 提取技能名称、状态、描述、来源
openclaw skills list 2>&1 | awk -F'│' '
NR > 3 && NF >= 5 {
status = $2
name = $3
desc = $4
source = $5
# 清理空格
gsub(/^[[:space:]]+|[[:space:]]+$/, "", status)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", name)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", desc)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", source)
# 提取状态
if (status ~ /✓/) state = "ready"
else if (status ~ /△/) state = "needs_setup"
else state = "unknown"
# 提取来源分类
if (source ~ /bundled/) category = "系统内置"
else if (source ~ /managed/) category = "全局"
else if (source ~ /workspace/) category = "主脑"
else if (source ~ /extra/) category = "扩展"
else category = "其他"
# 提取描述前50字符
desc_short = substr(desc, 1, 50)
if (length(desc) > 50) desc_short = desc_short "..."
print category "|" name "|" state "|" desc_short "|" source
}'
Step 3: 按分类统计
# 统计各分类数量
openclaw skills list 2>&1 | awk -F'│' '
NR > 3 && $5 ~ /bundled/ {bundled++}
NR > 3 && $5 ~ /managed/ {managed++}
NR > 3 && $5 ~ /workspace/ {workspace++}
NR > 3 && $5 ~ /extra/ {extra++}
END {
print "系统内置:", bundled
print "全局:", managed
print "主脑:", workspace
print "扩展:", extra
}'
Step 4: 格式化输出
完整列表格式:
## 技能清单系统内置技能 (X个)
技能 状态 用途 🔐 1password ✅ ready 1Password CLI 设置使用 📝 apple-notes ✅ ready Apple Notes 管理 ... ... ...
全局技能 (X个)
技能 状态 用途 📦 ragflow ✅ ready RAG 操作客户端 ... ... ...
主脑技能 (X个) - main
技能 状态 用途 📦 darwin-skill ✅ ready Skill 自动优化 ... ... ...
扩展技能 (X个)
技能 状态 来源 用途 📦 stock-market-pro ✅ ready workspace-shared 股票市场分析 ... ... ... ...
总计:X 个技能(Y 个就绪可用)
中文用途提取规则:
- 从 CLI 输出的
Description列提取 - 截取前 50 个字符或第一个句号/逗号前的内容
- 转换为简洁中文描述(不超过 10 字)
Phase 4: 更新技能
输入: 技能名称 或 --all 标志
输出: 更新结果报告
Step 1: 定位技能
openclaw skills list | grep ""
Step 2: 检查安装类型
# 查找技能路径 skill_path=$(openclaw skills list 2>&1 | awk -F'│' -v name="" ' $3 ~ name {print $5}' | head -1)
# 检查是否为手动安装 if [ -f "$skill_path//.manual-install" ]; then echo "手动安装" else echo "clawhub 安装" fi
Step 3: 用户确认
📝 即将更新技能: 名称: 当前版本: 来源: clawhub / 手动安装
⚠️ 确认更新? (yes/no):
Step 4: 执行更新
clawhub:
# 备份当前版本 cp -r "" ".backup.$(date +%Y%m%d%H%M%S)"
# 执行更新 clawhub update --workdir
手动安装:
⚠️ 技能 为手动安装,无法自动更新💡 更新选项:
- 使用
/skill update --force 强制重新下载
- 使用
/skill install --manual 重新安装
- 手动删除后重新安装
Step 5: 返回结果
✅ 技能 已更新至最新版本
📦 来源: clawhub
📍 路径:
Phase 5: 移动技能
输入: 技能名称、目标空间
输出: 移动确认和结果
Step 1: 定位技能
# 获取技能当前路径
source_path=$(openclaw skills list 2>&1 | awk -F'│' -v name="" '
$3 ~ name {
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $5)
print $5
}' | head -1)
Step 2: 验证目标空间
# 检查目标空间是否在配置中 openclaw config get skills.load.extraDirs | grep -q "" || echo "❌ 目标空间未配置"
# 检查是否有同名技能 ls "/" 2>/dev/null && echo "⚠️ 目标空间已存在同名技能"
Step 3: 用户确认
📝 即将移动技能: 技能: 从: 到:
⚠️ 移动后原位置将备份,确认移动? (yes/no):
Step 4: 执行移动
# 备份原位置 mv "" ".backup.$(date +%Y%m%d%H%M%S)"# 复制到新位置 cp -r ".backup." "/"
# 验证 ls "//SKILL.md"
Step 5: 返回结果
✅ 技能 已移动到 空间
📍 新路径:
🗂️ 备份: .backup.
安装路径映射
| 空间类型 | 配置路径 | 安装命令 |
|---|---|---|
| 全局 | ~/.openclaw/skills | clawhub install X --workdir ~/.openclaw |
| 主脑 | ~/.openclaw/workspace/skills | clawhub install X --workdir ~/.openclaw/workspace |
| 专才 | ~/.openclaw/workspace-shared/skills | clawhub install X --workdir ~/.openclaw/workspace-shared |
| 自定义 | 用户配置的路径 | clawhub install X --workdir |
异常处理
CLI 命令失败
触发: openclaw skills list 执行失败或超时
检测: 命令返回非零退出码
处理:
# Fallback 到配置扫描
for dir in $(openclaw config get skills.load.extraDirs 2>/dev/null | jq -r '.[]' 2>/dev/null); do
if [ -d "$dir" ]; then
ls -1 "$dir" 2>/dev/null | while read skill; do
echo "| unknown │ $skill │ (fallback scan) │ openclaw-extra │"
done
fi
done
空间未配置
触发: 用户尝试安装到未配置的空间
处理:
❌ 空间 未在配置中
💡 请先添加该空间:/skill add-space 或选择已配置的空间安装
手动安装技能更新
触发: 用户尝试更新手动安装的技能
处理:
⚠️ 技能 为手动安装,无法自动更新
📦 原始来源: 💡 更新选项:
- 使用
/skill update --force 强制重新下载
- 使用
/skill install --manual 重新安装
- 手动删除后重新安装
路径不存在
触发: 添加空间时路径不存在
处理:
⚠️ 路径 不存在
💡 是否创建该目录? (yes/no)
注意事项
- 添加自定义空间后需要重启 Gateway 生效
- 手动安装的技能不会自动更新(创建
.manual-install标记) - 移动技能前会自动备份原位置
- 关键操作前均有用户确认提示
- CLI 失败时有 fallback 扫描机制
测试验证
测试 Prompt 1: 添加自定义空间
添加一个新的技能空间 /Users/liber/custom-skills
期望: 提示确认 → 更新配置 → 重启 Gateway → 验证
测试 Prompt 2: 安装技能到指定空间
安装 stock-market-pro 到专才空间
期望: 显示可用空间 → 用户选择 → 确认 → clawhub 安装 → 验证
测试 Prompt 3: 查看技能列表
/skill list
期望: 按分类显示所有技能,包含状态、来源、用途
测试 Prompt 4: CLI 失败 fallback
当 openclaw skills list 失败时,使用备用扫描
期望: 检测到 CLI 失败 → 扫描 extraDirs → 显示结果