Publish Skill
skills.sh 没有提交队列——它通过爬取公开 GitHub 仓库中格式正确的 skills/<slug>/SKILL.md 文件来发现技能。因此,“发布”意味着:仓库是公开的,每个 SKILL.md 都具有有效的前置元数据,并且(可选)该技能还会被镜像到二级市场/组织中,以便直接索引仓库。
验证
从此技能目录运行:
python3 scripts/skill_publisher.py validate --workspace /path/to/repo --fail-on block
检查每个 skills/<slug>/SKILL.md:前置元数据以 --- 开头和结尾,name 存在且为小写 kebab-case,name 与所在目录名称匹配,description 存在且长度在 20 到 1024 个字符之间,前置元数据后的正文部分包含实际指令(不仅仅是存根)。
使用 --fail-on revise 进行更严格的检查,使用 --format json 用于机器可读的输出。
生成安装清单
python3 scripts/skill_publisher.py manifest --workspace /path/to/repo
从 git remote origin 解析仓库的 GitHub slug,并为每个有效技能打印一行 npx skills add <owner>/<repo> --skill <name>。这就是要分发(或粘贴到 README/公告中)的“从 skills.sh 安装”指令——没有单独的提交步骤。
all 在一次调用中同时运行 validate 和 manifest,并共享相同的 --fail-on 检查。
一键发布整个组织
python3 scripts/skill_publisher.py org --org farfarfun-skill --workspaces-dir /path/to/farfarfun-skill
这是一步到位的“发布所有”入口点。它通过 gh repo list 列出 --org 中每个公开的非分支仓库,克隆任何尚未检出到 --workspaces-dir 下的仓库(绝不拉取或修改现有克隆),跳过没有 skills/ 目录的仓库,对剩余仓库运行 validate,并输出整个组织的合并安装清单。--workspaces-dir 默认使用 --workspace 的父目录,因此从磁盘上与兄弟仓库相邻的仓库内运行无需额外标志。
添加 --register 还会为每个通过验证的技能在本地运行 npx skills add <owner>/<repo> --skill <name> -y——这是实际向 skills.sh 的安装遥测/排行榜提供数据(没有提交 API)的机制,同时也会将该技能安装到本机 agent 技能目录中,因此仅当需要此副作用时才传递该标志。
添加 --mirror-to <org> 可将每个通过的仓库额外分支/同步到二级组织中(见下文)。
镜像到其他平台
python3 scripts/skill_publisher.py mirror --workspace /path/to/repo --target-org farfarfun-skills
首次运行时,将仓库分支到 --target-org(默认为 farfarfun-skills)中,名称为 <owner>--<repo>;之后每次运行时,从源仓库重新同步该分支——与此组织已经进行的 farfarfun-skill/* 仓库镜像同步以用于二级发现的方式一致。需要 gh 已通过身份验证,并具有在目标组织中创建仓库的权限。这是唯一会更改远程 GitHub 状态的子命令;请先运行 validate,仅在仓库通过验证后才进行镜像。
返回结果
从 validate 返回 allow、revise 或 block,通过的检查项,以及针对每个问题的具体修复路径(哪个文件、哪个字段、如何修改)。manifest 和 mirror 是信息性/操作输出,而非门控——不要阻塞它们。