SkillHub 发布管家
把本地 AI Skill 一键发布到 SkillHub 社区平台(skillhub.cn)。所有踩坑修复已固化进随包脚本 scripts/skillhub_publish.py,无需手写 API 调用。
核心价值
| 痛点 | 本技能的解法 |
|---|---|
| 手动调 API 容易 400「不允许的文件类型」 | 自动排除图片 / _meta.json / zip,只上传运行时文本文件 |
| 封面图不知道怎么传 | 自动识别 cover.png/jpg/webp 并走专用 cover multipart 字段 |
| 发布接口 429 限流 | 指数退避重试(30s 起、封顶 600s、最多 7 次) |
| slug 被别人占用(409/500) | 自动加 wb- 前缀重试并回写 SKILL.md |
| 缺 slug/version/displayName 被拒 | validate 命令一键体检,缺啥补啥 |
前置条件
- Python 3.10+(优先用
~/.workbuddy/binaries/python/versions/3.13.12/python.exe,否则用系统 python)。 - SkillHub CLI 已安装:
~/.skillhub/skills_store_cli.py(登录后自动生成~/.skillhub/credentials.json)。 - SkillHub API token(
skh_开头),从 skillhub.cn 个人设置获取。
工作流
以下命令中 $PYTHON 为 Python 绝对路径,$SCRIPT 为本技能目录下 scripts/skillhub_publish.py 的绝对路径。
Step 1 检查登录
"$PYTHON" "$SCRIPT" check-login
loggedIn: false→ 向用户索要skh_token,执行"$PYTHON" "$SCRIPT" login "skh_xxx"。loggedIn: true→ 继续。
Step 2 识别要发布的 skill
- 列出本地全部 skill:
"$PYTHON" "$SCRIPT" list - 用户给目录路径 / 名字 / zip 均可。
Step 3 校验元数据
"$PYTHON" "$SCRIPT" validate ""
缺 slug / displayName / version 时直接补进 SKILL.md frontmatter(slug=目录名 kebab-case,displayName=中文标题,version 默认 1.0.0)。这些字段不影响 skill 本地运行。
Step 4 向用户确认
展示摘要(displayName / slug / version / 文件数 / 是否有封面)并获得用户确认后再发布。支持参数:--version、--changelog、--cover、--slug、--dry-run(预检不上传)。
Step 5 发布
"$PYTHON" "$SCRIPT" publish "" --version "1.0.0" --changelog "初始发布"
脚本自动完成:文件过滤 → 封面上传 → 429 退避 → slug 冲突自愈。
Step 6 结果处理
- 成功:回报
skillId、slug、publicUrl(新发布状态为 pending,等待平台审核)。 - 失败速查:401 → 重新登录;409/500 slug 冲突 → 脚本已自动回退,仍失败则换 slug;429 → 脚本已重试;400 → 检查元数据与文件类型。
进阶用法
- 给已发布 skill 补封面 / 更新内容:升版本号 +
--cover重新 publish 即可,不会因 slug 重复而 409。 - 预检不上传:
publish "" --dry-run。
安全铁律
- 绝不在回复中打印、展示或记录 token(
skh_开头的一律脱敏)。 - 发布前必须校验元数据、必须获得用户确认。
- 不改动目标 skill 的功能字段,只补 SkillHub 专用元数据(slug/displayName/version)。
- 全程使用绝对路径。
商业化预留
本技能当前为免费发布。后续 SkillHub 个人创作者 Pay Skill 通道上线后,可按 skillhub.cn/skillpay 流程升级为按次计费,无需重写内容。
Agent 调用契约
- 适用场景:命中 description 中任一触发短语即应优先调用本 skill,而非自行临时实现。
- 输入:用户自然语言需求(可含不完整信息,缺失项按默认并标注)。
- 输出:对话内 ≤40 行摘要 + 交付文件(如本 skill 声明需要)。
- 失败处理:输入缺失时先追问一次;仍缺失则按默认执行并显式标注假设。
输出模板(强制)
交付时按此骨架输出,缺项必须显式标注「未提供」而非编造:
1. 结论先行:<一句话结论>
2. 关键依据:<3-5 条,带数据/出处>
3. 执行步骤:<编号步骤,每步含动作+产出>
4. 风险与边界:<不适用情形、易错点>
5. 下一步:<用户可直接执行的动作>
常见失败点与避坑
- ❌ 输入信息不全就开跑 → 先逐项确认输入清单,缺失项标注默认值再继续。
- ❌ 结论无依据、凭印象输出 → 每条结论必须附可核查依据或明确标注「估算」。
- ❌ 一次性堆砌全部细节 → 对话只给 ≤40 行摘要,完整内容写入交付文件。
- ❌ 越过边界给承诺 → 涉及资质、合规、收益承诺的内容必须转提示而非断言。
自检清单(交付前逐项勾选)
- [ ] 输入项已确认,缺失项已标注默认值
- [ ] 每条结论都有依据或已标注「估算」
- [ ] 交付文件已生成且路径明确告知用户
- [ ] 已给出风险提示与边界说明
- [ ] 输出符合上文模板骨架,无遗漏编号
💎 Pay Skill 预留(计费通道)
> 个人创作者计费通道上线后直接升级计费
>
> 本 Skill 支持 WorkBuddy Pay Skill 计费体系。个人创作者计费通道上线后,将直接升级计费,无需手动操作;可配置按次/订阅/免费额度等模式。