发布技能到 WorkBuddy 技能市场
把本地技能(~/.workbuddy/skills/<name>/)整理成平台可接收的安装包,并给出提交步骤。
一、平台硬性规范(不满足直接解析失败)
| 项 | 要求 |
|---|---|
| 提交物 | ZIP 压缩包,≤ 3 MB |
| 目录结构 | {skill-name}/SKILL.md,最多 2 层 |
| 核心文件 | SKILL.md(YAML frontmatter + Markdown 正文) |
| 可选子目录 | references/、scripts/、templates/ |
frontmatter 字段
必填:description(用途 + 触发词)、description_zh、description_en、version、author
可选:name、display_name、display_name_en、category、allowed-tools(逗号分隔)、disable-model-invocation(true 则只能手动调用)、user-invocable(false 则隐藏菜单)
---
name: your-skill-name
display_name: 展示名称
description: 一句话描述技能能力 + 触发词
description_zh: 简短中文介绍
description_en: A Brief English Introduction
category: 开发工具
version: 1.0.0
author: 作者名
---
二、脱敏(发布前必做)
本地技能常混入个人环境信息,直接上架会泄露隐私。逐项检查:
| 类型 | 处理方式 |
|---|---|
绝对路径(C:\...、/Users/...、F:\...) |
改为环境变量 / 自动探测 / 泛化示例 |
| 用户名、内部目录、私有脚本路径 | 泛化为占位符(<workspace>、<skill-name>) |
| API Key / Token / Cookie / 密码 | 必须删除(测试凭据最易遗漏) |
agent_created、本机专属元数据 |
建议移除 |
自查命令(在技能目录执行):
grep -rnE '[A-Za-z]:\\\\|/Users/|/home/|(api[_-]?key|token|password|secret|cookie)\s*[=:]' .
正文里引用外部脚本的必须一起打包:scripts/xxx.py 而不是「见 F:\某处\xxx.py」,否则包不完整。
三、组织发布目录
在工作区建(不要直接改本地已装技能,保留本机版):
<workspace>/skill-publish/<skill-name>/
├── SKILL.md
└── scripts/ # 可选
四、打包并自检
import os, zipfile
root = r"<workspace>\skill-publish"; src = os.path.join(root, "<skill-name>")
with zipfile.ZipFile(os.path.join(root, "<skill-name>.zip"), "w", zipfile.ZIP_DEFLATED) as z:
for dp, dns, fns in os.walk(src):
dns[:] = [d for d in dns if d not in ("__pycache__", ".git")]
for fn in fns:
if fn.endswith(".pyc"): continue
f = os.path.join(dp, fn)
z.write(f, os.path.relpath(f, root).replace("\\", "/"))
自检四项,缺一不可:
- ZIP ≤ 3 MB
- 顶层就是技能目录(
<skill-name>/SKILL.md,不是平铺、不是多套一层) - 层级 ≤ 2
- frontmatter 必填字段齐全
五、提交(需用户本人操作)
发布需要开发者账号,助手无法代提交。把包准备好后引导用户:
- WorkBuddy 开放平台 https://open.workbuddy.cn/ → 开发者入驻认证 → 「发布新技能」→ 上传 ZIP → 提交
- SkillHub https://skillhub.cn/ → 右上角「发布团队 Skill」→ 选类型 → 上传 ZIP → 发布 → 审核通过后在【技能列表】点「上架」
审核 1–3 个工作日(查安全性 / 稳定性 / 合规性)。上架后用户在 WorkBuddy【专家·技能·连接器 → 技能市场】可搜到。
六、还要准备的材料
技能名称(≤20 字)、简介(100–300 字)、图标 512×512 PNG、分类标签、权限声明(需要哪些权限、是否联网)。
图标缩放的纯标准库做法(环境里没有 Pillow、pip 无网、Add-Type 被沙箱拦截时):
用 zlib 解码 IDAT → 逐行 unfilter(None/Sub/Up/Average/Paeth)→ 整数倍面积平均降采样 → 重编码。
要求源图边长能被目标尺寸整除(如 1024→512),调色板图(色型 3)需先展开为 RGB。
七、常见解析失败原因
- ZIP 多套了一层目录(应顶层即
{skill-name}/) - 目录层级 > 2
- 缺
description/version/author - 包内混入
__pycache__/.git