一键发布 agent skill 到 GitHub,自动验证 SKILL.md、生成或检查更吸引人的 README、区分 skill name 与 GitHub repo name、创建或更新仓库、推送并通过 npx skills 真实安装验证。当用户说"发布这个skill"、"publish skill"、"把skill发到GitHub"、"分享这个skill"、"/publish-skill"时触发。支持发布当前目录或指定路径的 skill。
8bd944b一键将 agent skill 发布到 GitHub,自动完成验证、README 质量检查、补全、推送和真实安装验证。
gh CLI 已安装且已登录(gh auth status)SKILL.md(含 YAML frontmatter name + description)/Users/joe/.agents/skills/<name> 作为正式源目录;.codex / .claude 可作为兼容入口。当用户要求发布 skill 时,运行发布脚本:
python3 ~/.agents/skills/qiaomu-skill-publisher/scripts/publish_skill.py <skill_dir>
~/.agents/skills/ 下查找origin 仓库名,避免把 skill-publisher 误发到错误 reponpx skills add --list 可发现,并在临时目录真实安装| 参数 | 说明 |
|------|------|
| --private | 创建私有仓库(默认公开) |
| --dry-run | 仅检查,不实际发布 |
| --skip-verify | 跳过 npx skills 验证 |
| --github-user USER | 指定 GitHub 用户名(默认自动获取) |
| --repo-name NAME | 指定 GitHub 仓库名;默认优先使用当前 origin 仓库名,否则使用 skill name |
| --no-symlink | 跳过同步 ~/.agents/skills/ 实体目录 |
发布成功后,脚本可自动把 skill 同步到 ~/.agents/skills/<name> 作为实体目录。
这个目录是通用 Agent Skills 标准目录,以下工具会自动读取: OpenCode、Codex CLI、Cursor、Gemini CLI、GitHub Copilot、Amp、Cline、Warp 等。
一次发布,多工具共享,无需重复配置。
如果当前发布源已经是 ~/.agents/skills/<name>,脚本会跳过同步,避免误删自己的源目录。若 skill name 与 repo name 不一致,或者你不想产生本地副本,发布时加 --no-symlink。
npx skills 使用严格 YAML 解析器,以下写法会导致安装失败(报 "No valid skills found"):
| ❌ 错误写法 | ✅ 正确写法 |
|-----------|-----------|
| description: 含有 "引号" 的文字 | 改用 \| 块标量(见下方) |
| description: 含单引号'的文字 | 改用 \| 块标量 |
| description: 含冒号: 的文字 | 改用 \| 块标量 |
最安全的 description 写法:
description: |
描述放这里,可以随意包含 "双引号"、'单引号'、冒号: 等特殊字符
触发词: 用户说...时触发
脚本已内置 YAML 严格校验(pyyaml),会在发布前捕获这类错误并给出修复提示。
对已有 GitHub 仓库的 skill 再次运行同一命令,脚本会检测到仓库已存在,自动 commit + push 更新。
用户:发布 yt-search-download 这个 skill
执行:python3 ~/.agents/skills/qiaomu-skill-publisher/scripts/publish_skill.py ~/.agents/skills/yt-search-download
用户:把当前 skill 发到 GitHub
执行:python3 ~/.agents/skills/qiaomu-skill-publisher/scripts/publish_skill.py .
用户:先检查一下能不能发布
执行:python3 ~/.agents/skills/qiaomu-skill-publisher/scripts/publish_skill.py <dir> --dry-run
用户:当前 skill name 与仓库名不同,明确发布到 qiaomu-skill-publisher
执行:python3 ~/.agents/skills/qiaomu-skill-publisher/scripts/publish_skill.py <dir> --repo-name qiaomu-skill-publisher
脚本只在 README 不存在时自动生成一个发布页模板。发布前,必须人工检查/撰写 README,确保它对陌生用户有价值。
最新标准:自动生成的 README 不应包含 TODO、特性 1、[问题 1] 这类占位符;已有 README 如果包含明显占位内容,发布会失败。
- [ ] 列出所有依赖,让用户逐一确认。每条都要写清楚怎么装,不能只说"需要 xxx"--version)参考 nexu-io/open-design 这类高转化 README,Web 项目不能只写安装命令,必须像产品发布页一样给用户一个可判断的首屏。
首屏顺序建议:
Deploy with Vercel / Live Demo / Install,按钮要能直接用真实仓库 URLdocs/assets/product-screenshot.png,alt 写清楚截图内容Web 项目必须优先补齐:
docs/assets/product-screenshot.png:首屏或核心工作流截图docs/assets/ 下的样例输出:如图片生成网站放 3-6 个代表性生成图scripts/capture-screenshots.* 或等价命令:能本地启动网站后自动刷新 README 截图推荐 README 模块:
# Project Name
> 一句话说明用户会得到什么。
[Deploy with Vercel] [Live Demo] [Stars] [Forks] [Last commit] [License]
<img src="docs/assets/product-screenshot.png" alt="..." />
## 为什么值得用
## 样例输出
## 一键部署
## 本地开发
## 自动更新截图
## 数据/生成流程
## Star History
## Troubleshooting
自动截图要求:
SCREENSHOT_URL=http://127.0.0.1:3000 npm run capture:screenshotsdocs/assets/,README 使用相对路径引用默认写中英双语 README,但中文在前。 中文用户是主要受众,英文是给国际用户的补充。
双语结构(中文在前):
# skill-name
> 中文一行价值主张
> One-line English hook
**[中文](#中文) | [English](#english)**
---
<a name="中文"></a>
## 中文
[完整中文内容]
---
<a name="english"></a>
## English
[完整英文内容]
目标不是"让人看懂",而是"让人想装"。 每一段都要回答用户心里那个问题:这和我有什么关系?
高吸引力 README 的结构:
第一句话抓痛点:描述用户现在的痛,不是你的方案。一句话,精准,不废话。
一句话翻转:立刻给出"用了这个之后"的对比。
具体输出预览:告诉用户他会得到什么。不要说"生成报告",要说"生成一个 Medium 杂志风格的 HTML 报告,有每个视角的推理过程,有讨论中发现的盲点,有一个加粗的最终判断"。
首屏截图或样例:让用户先看到真实结果,再决定是否继续读。Web 项目放产品截图,生成类项目放代表性输出,CLI/Skill 放实际终端输出或生成文档片段。
一行安装:最低摩擦。不要说"先 clone 再 cd 再 npm install"。
npx skills add username/skill-name
自然语言触发示例:让用户知道怎么用。不是命令,是他会真实说出的话。
前置条件清单(checkbox 格式):放在安装之后,不要放开头吓人。用 - [ ] 格式让用户逐项确认。
动态项目状态:公开 GitHub 项目顶部放 stars/forks/issues/last commit/license 徽章;有增长叙事时补 Star History。
Troubleshooting 表格:至少 3 条,解决用户放弃的最后一公里。
让人想装的写作要领:
发布前逐项核对:
docs/assets/your-org/your-repo 这类占位 URL1. 读取 SKILL.md,理解 skill 的功能和目标用户
2. 判断语言:默认中文,只在明确国际化需求时写双语
3. 检查 README.md 是否存在,若存在则评估吸引力(不只是完整度)
4. 若 README 不够吸引人,先重写再发布
5. README 确认后,再运行发布脚本
6. 如果当前仓库已有 `origin`,确认脚本使用的是 `origin` 仓库名;否则用 `--repo-name` 明确指定
7. 发布后必须验证 `npx skills add <user>/<repo> --list`,并尽量做临时目录真实安装
向用户展示:
npx skills add <user>/<skill-name>Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/qiaomu-skill-publisher · pinned to the source commit
git clone https://github.com/joeseesun/qiaomu-skill-publisher.git
cd qiaomu-skill-publisher
git checkout 8bd944b7723e710d38f9fa4034e8ba6addbbdfed
mkdir -p ".claude/skills/qiaomu-skill-publisher"
cp -r . ".claude/skills/qiaomu-skill-publisher"Review the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
Scanner static-checks@0.1.0 · commit 8bd944b7723e. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
Instructs shell/process/package operations that run commands on the host.
Evidence: npm install· fingerprint 3a2dc0ae21eb56d7