SkillHub 技能安装器
用途
把 SkillHub 社区市场上的技能(如【钱进智脑】)安装到本 Agent 的用户级技能目录
~/.workbuddy/skills/,使 Agent 能立即发现并使用它。
> ⚠️ 关键区分:SkillHub ≠ WorkBuddy 内置推荐市场。
> - workbuddy_marketplace_skill 只查「内置推荐市场 BuiltinMarket」,查不到 SkillHub 上的技能。
> - SkillHub 上的技能必须用本技能提供的 skillhub CLI 流程安装。
> 用户的原话里只要出现「SkillHub 市场 / SkillHub 上的技能」,就走本流程,不要走内置市场工具。
前置条件(已就绪,无需重复)
- 本机已安装
skillhubCLI:~/.local/bin/skillhub(PATH 通常在~/.local/bin)。 - 已关联授权:凭证写入
~/.skillhub/credentials.json(用户执行过skillhub login --key skh_xxx)。 - 凭证持久化在本地,后续安装无需再次提供 key。
- 若报错
未登录,说明credentials.json丢失,提示用户重新执行skillhub login --key <skh_xxx>后再试(不要替用户保管 key)。
执行流程
1. 从用户原话中提取技能名称
用户通常会说「检索 SkillHub 市场的【钱进智脑】技能」之类。
提取【】或引号里的名称作为检索词,例如:钱进智脑。
2. 检索 SkillHub,拿到坐标
SKILLHUB_SELF_UPGRADE_ANSWER=n skillhub search "<技能名称>" --json 2>/dev/null
- 输出 JSON 的
results[].slug形如@user_7155dc9f/zhinao(canonicalName),
results[].publicSlug形如zhinao,results[].name是展示名。 - 选取与用户名称最匹配的那条,记录其
slug(带 @ 的完整坐标)用于安装。 - 若搜索无结果,提示用户确认技能名/可见性,或换关键词。
3. 安装到用户级技能目录
SKILLHUB_SELF_UPGRADE_ANSWER=n skillhub install "<slug 完整坐标,如 @user_7155dc9f/zhinao>" \
--dir ~/.workbuddy/skills --force --json 2>&1
--dir ~/.workbuddy/skills安装到本 Agent 用户级技能目录(跨项目可用)。- 返回 JSON 里
success:true且含targetDir即成功。 --force覆盖已存在目录,便于重装/升级。
4. 归整为扁平目录(重要,保证 Agent 稳定发现)
skillhub install 对社区命名空间技能会装成嵌套路径
~/.workbuddy/skills/@handle/slug(父目录名以 @ 开头),
这对 WorkBuddy 技能发现是风险点(已知安全的是纯字母数字父目录,如 agent-dev-skills)。
因此统一归整为扁平、ASCII、无特殊字符的目录:
- 若安装产物在
~/.workbuddy/skills/@handle/slug:
- 读取该技能SKILL.md头部的name:字段作为干净目录名;
若无则用publicSlug。
- 示例:mv ~/.workbuddy/skills/@handle/slug ~/.workbuddy/skills/<cleanname>
然后rmdir ~/.workbuddy/skills/@handle(若已空)。 - 同步锁文件 installDir(保持 skillhub CLI 追踪准确):
bash python3 - <<'PY' import json, pathlib p = pathlib.Path.home()/".workbuddy/skills/.skills_store_lock.json" if p.exists(): d = json.loads(p.read_text(encoding="utf-8")) for v in d.get("skills",{}).values(): if "zhinao" in str(v.get("installDir","")): # 按实际 publicSlug 调整 v["installDir"] = str(pathlib.Path.home()/".workbuddy/skills/<cleanname>") p.write_text(json.dumps(d, ensure_ascii=False, indent=2)+"\n", encoding="utf-8") PY
(归整时把上面zhinao/<cleanname>换成本次实际值。)
5. 校验
find ~/.workbuddy/skills/<cleanname> -maxdepth 1 -name SKILL.md
确认根目录存在 SKILL.md 即安装成功。向用户报告:
- 技能名称(展示名)
- 安装目录
- 「将在下次会话/刷新后被 Agent 自动发现并使用」(当前会话 available_skills 在启动时已固定,新装技能通常需一次会话刷新即可出现)。
注意事项
- 不要用
workbuddy_marketplace_skill安装 SkillHub 技能——它只查内置市场,必然 0 命中。 - 安装交互式升级提示已用
SKILLHUB_SELF_UPGRADE_ANSWER=n自动跳过;如需升级 CLI 可单独skillhub self-upgrade。 - 凭证(skh_ token)只存在于用户本机
~/.skillhub/credentials.json,本技能不存储、不索要用户的 key。 - 若用户要安装的是企业源技能(
@org/slug),流程相同,install 会自动走企业下载通道。