SkillHub 发布工作流
概述
将本地 ~/.workbuddy/skills/<name>/ 下的自研 Skill 上架到 SkillHub(https://skillhub.cn/,即 WorkBuddy 内置市场的官方来源)。审核通过后,其他用户可在 BuiltinMarket 中搜索并一键安装。
何时使用
- 用户完成一个 Skill 开发,要求"发布/上架/分享"
- 用户提到 SkillHub、BuiltinMarket、技能市场
- 关键词:"发布 Skill"、"提交到市场"、"让别人也能用"
前置条件
- Skill 目录结构合规:
SKILL.md(含name/descriptionfrontmatter)+ 可选的references/、scripts/、assets/ SKILL.mdfrontmatter 需含version(如1.0.0)和author字段(SkillHub 上架要求)- 用户已在 skillhub.cn 微信扫码登录 + 完成实名认证(发布前置条件)
- 本地已安装
agent-browser(npm install -g agent-browser;注意其自带 Chromium 下载可能被网络拦截,见下方"登录态复用")
发布流程(浏览器自动化)
第1步:打包 Skill
cd ~/.workbuddy/skills/<name> && zip -r /tmp/<name>.zip . -x '_*'
或直接用 Python 打包(避免中文路径问题):
import zipfile
from pathlib import Path
src = Path.home() / '.workbuddy/skills/<name>'
out = Path('/tmp/<name>.zip')
with zipfile.ZipFile(out, 'w', zipfile.ZIP_DEFLATED) as zf:
for f in src.rglob('*'):
if f.is_file() and not f.name.startswith('_'):
zf.write(f, f.relative_to(src))
第2步:登录态复用(关键)
agent-browser 默认启动独立 Chromium 实例,不带用户的 SkillHub 登录态。两种解法:
方案 A — 复用用户已登录的 Chrome(推荐,无需重新扫码):
1. 复制用户 Chrome 的 Default 档案到临时目录(含 skillhub.cn 的登录 Cookie):
powershell
robocopy "$env:LOCALAPPDATA\Google\Chrome\User Data\Default" "<临时目录>\chrome-profile-copy" /E /R:1 /W:1
2. 用该副本启动带远程调试端口的 Chrome:
bash
"/c/Program Files/Google/Chrome/Application/chrome.exe" \
--remote-debugging-port=9222 \
--user-data-dir="<临时目录>\chrome-profile-copy" \
--no-first-run about:blank
3. agent-browser 连接该实例(复用登录态):
bash
agent-browser open https://skillhub.cn --auto-connect
> 注意:复制档案时若用户 Chrome 正运行,session Cookie 可能尚未落盘 → 副本未登录。此情况下需请用户在弹出的调试 Chrome 窗口内再扫一次微信登录(约 10 秒),随后自动化接管。
方案 B — agent-browser 自带 Chromium(需能下载):
agent-browser install # 下载 Chromium(网络受限环境会失败)
agent-browser open https://skillhub.cn
# 用户需在该窗口扫码登录
第3步:填写表单并提交
- 导航到发布页:点击「发布 Skill」按钮(通常在首页右上角或用户菜单),URL 为
https://skillhub.cn/dashboard/publish - 上传 zip(核心坑位):SkillHub 上传区有 2 个隐藏
input[type=file](同属一个拖拽 div):
- input 1:multiple:true,accept:""(文件夹用)
- input 2:multiple:false,accept:".zip,application/zip"(zip 专用 ✅)
- ❌ 错误:agent-browser upload "input[type=file]" <zip>会匹配到第 1 个(文件夹)input,导致 zip 不上传、UI 无反应
- ✅ 正确:agent-browser upload "input[accept='.zip,application/zip']" <zip>
- 上传成功后,上传区会显示解析出的文件(如SKILL.md、references/...),并可能出现「使用此描述」按钮(用 SKILL.md 的 description 自动填充描述字段) - 填写字段:
-Skill 文件 Slug:技能 slug(如ai-capability-assessment)
-显示名称:中文展示名
-描述:一句话描述;可点「使用此描述」自动填入,或手动 fill
-版本号:默认1.0.0
-变更说明:可选,如初始版本发布
- 图标:默认已选一个预设图标,无需改 - 点击「提交审核」
第4步:确认结果
提交后页面跳转至 https://skillhub.cn/dashboard,显示「提交成功 / Skill "<slug>" v<version> 已提交 / 安全审核中」。截图留存,然后关闭浏览器与临时 Chrome 实例。
常见坑位与排查
| 现象 | 原因 | 解决 |
|---|---|---|
upload 返回 ✓ Done 但上传区无文件名 |
匹配到文件夹 input(input 1) | 改用 input[accept='.zip,application/zip'] |
agent-browser 偶发 Segmentation fault / node:internal/modules/cjs/loader:1386 throw err |
守护进程不稳定 | 命令可能已执行成功,重试一次或 pkill -f agent-browser 后重连 |
--auto-connect 失败(exit 1 无输出) |
目标 Chrome 无远程调试端口 | 用「方案 A」启动带 --remote-debugging-port 的 Chrome |
| 连接后页面显示「登录」按钮 | 副本档案无登录态 | 请用户在调试窗口重扫微信登录 |
input[type=file] eval 返回 [] |
恰逢页面重渲染/转场 | 稍等后重新 snapshot 定位 ref |
手动兜底
若自动化始终不通,告知用户:在浏览器中打开 https://skillhub.cn/dashboard/publish → 拖入 zip → 填表 → 提交。所需材料(zip + 文案)已由 Skill 准备好。
参考
- SkillHub 官网:
https://skillhub.cn/ - SkillHub 安装/优先源配置文档:
https://skillhub.cn/install/skillhub.md(仅含 search/install,无 publish CLI) - agent-browser 上游:
https://github.com/vercel-labs/agent-browser