给 AI 用的技能库 —— 每个目录一个技能,复制过去就能用,零构建零依赖。
| 技能 | 干什么 | 输入 → 输出 | 首次要配资料 |
|---|---|---|---|
| 📖 moments-copy | 海报 → 朋友圈文案 | 一张海报 + 参考资料 → 三版互斥文案 + 配图与发布建议 | ✅ |
| 🖼️ WeChat-to-xhs-cards | 推文 → 小红书图文 | 一篇公众号文章 → 一组 3:4 竖版 PNG + 一份文字稿 | — |
| 🔍 final-review | AI 产物 → 审阅件 | 一批 AI 产物清单 → 可圈点批注的离线审阅 HTML + 意见 JSON | — |
git clone https://github.com/ss-yanhao/agent-skills.git
cd agent-skills
./install.sh # 装全部
./install.sh moments-copy # 只装某一个脚本把技能复制到 ~/.workbuddy/skills/,已存在的会先问你要不要覆盖。
装完重开一次会话,WorkBuddy 才会扫到新技能。
丢一张海报和一份资料进去,出三条能直接复制发出去的朋友圈文案。
什么时候用 — 拿到门店开业图 / 活动主视觉 / 产品海报 / 宣传单,要配一段发圈文案时。
- 📏 按朋友圈真实规格写 — 超 6 行会被折叠成「全文」,一个 emoji 占 4 字符,全都算进字符预算,交付时逐版报行数与字符数
- 🎲 多样性优先于合规 — 朋友圈不是报批物料,平庸比出格更致命。只守 5 条会真出事的底线,极限词不做处理
- 🌾 会联网借势 — 先查当天准确日期(节气节日绝不靠推算),再搜当下的节气 / 节日 / 热点,沾得上才用,硬蹭不如不蹭
- 🧩 三版角度互斥 — 不是同一段话的三种长度,是三个不同的思路,角度、卖点、钩子全错开
| 项目 | 说明 |
|---|---|
| 三版文案 | 短促 / 场景 / 卖点,每版末尾标注角度、卖点、借势、关键词,方便你挑 |
| 配图建议 | 第几张放什么,按朋友圈九宫格的排布规律给 |
| 发布时段 | 推荐 1-2 个时段,并说明为什么 |
| 防折叠提醒 | 复制去发之前要做的操作(不操作会被压成一行) |
技能目录下 user/ 里有 4 个模板:
| 文件 | 填什么 |
|---|---|
brand-brief.md |
品牌与产品(卖点、人群、口径) |
sample-copy.md |
3-5 条你认可的往期文案 |
style-profile.md |
风格偏好(emoji 用法、行数、人称) |
ima-config.md |
可选,接知识库用 |
填完它照你的手感写,而不是照通用模板写。 不填也能跑,只是出来的东西更"通用",没那么像你。
接上 ima 知识库后可从中取品牌口径和往期素材,不接也能正常跑。 配置方法见 references/ima-setup.md。
把一篇已成稿的公众号文章,拆成小红书那种 3:4 竖版多图笔记: 封面 + 若干正文页 + 结尾页,每页 1080×1440,自动排版、自动导出 PNG, 另附一份可直接复制发布的文字稿。
什么时候用 — 手上有一篇写得不错的推文 / 长文,想搬到小红书但不想手工排版时。
分工是死的:AI 负责读懂文章并决定分页,脚本负责排版出图。 脚本不理解内容,所以每页放什么、标题怎么写,由 AI 判断 —— 这也是它比"纯模板套壳"好用的原因。
🧩 产品图会自动与配图组合叠加,省一页版面
识别到推文里的产品图是透明底(RGBA,四角 alpha=0)后,会自动缩小叠到配图的画面角上, 锚定下角、且底边与画面下缘齐平 —— 产品图自身的罐底在原图里往往就是被裁掉的, 底边对齐正好把切口藏进画面边界,看起来是"从画面底部立出来"而不是"被切断"。 一页同时讲清「场景 + 产品」,不用为产品单独占一页。
- 叠图宽度取画布宽的 30~38%,保证罐体上的产品名和卖点数字仍然可读 ("完全不遮挡"和"看得清"是冲突的,取后者)
- 叠图侧不靠算法拍脑袋 —— 会先亲眼看一遍底图,避开画面里承担论证作用的关键元素 (纯按"边缘密度最低"选侧会翻车:曾经推荐的那一侧,恰好是插画里唯一给卖点做论证的特写圆圈)
🧹 自动筛除推文装饰元素
微信编辑器加的装饰和真配图,在 HTML 里都是普通 <img>,标签层面区分不了。
所以按数据判定,不靠肉眼猜:
| 信号 | 判定 |
|---|---|
| 同一张图(md5 相同)在文中出现 ≥2 次 | 装饰(章节分割条 —— 最强信号,一票否决) |
| 高度 < 200px 或 宽高比 > 4 | 装饰(分割线、装饰横幅) |
| 出现在正文结束后、参考文献 / 落款之前 | 装饰(版式收尾) |
| 单边 500px 宽但有完整画面叙事 | 配图(编辑器的半宽插图,是内容) |
装饰性文本一并剔除:章节序号 #1/#2、孤立成行的裸数字、模板自带的
"点击上方蓝字关注" —— 它们混进正文会变成莫名其妙的独立短行。
⚠️ 但引用标号[1]/[2][3]/[4]例外,必须原样保留为正文文本。 它们与文末「参考文献」一一对应,删掉参考文献就成了没有锚点的孤儿。 口诀:#N是序号(可删),[N]是引用(必留)。
| 项目 | 说明 |
|---|---|
| 一组 PNG | 5~9 页,每页 1080×1440,默认导出 2160×2880(够清晰不被压糊) |
| preview.html | 本地打开就能一屏看完全部页面 |
| 文字稿 .md | 标题(含备选)/ 可直接粘贴的正文 / 话题标签 / 参考文献,分区块写好,整段复制即可发布 |
一篇教师节推文(9 张配图 + 4 条学术参考文献,正文里混着装饰分割条和章节序号), 转成 9 页图文笔记 —— 1 页封面、1 页开篇、3 组「场景 + 产品」叠图卡与卖点页、1 页结尾:
原文:https://mp.weixin.qq.com/s/cSF4K24K9P1mPv6gZekHCg
成品总览(9 页):
第一步 · 出 spec(AI 干这步)—— 把文章读成一份分页清单:
{
"style": "ink",
"kicker": "品牌 · 栏目",
"source": "页脚来源",
"cover": { "title": "封面钩子标题", "subtitle": "一句补充", "img": "cover.jpg" },
"cards": [
{ "kind": "points", "index": "01", "title": "本页小标题",
"points": ["要点一", "要点二", "要点三"], "note": "底部补充(可选)" },
{ "kind": "product",
"base": "art01_img07.png", "product": "art01_img05.png",
"title": "场景标题", "caption": "产品名",
"base_fit": "cover", "prod_anchor": "left", "prod_w": 34, "prod_x": 3 },
{ "kind": "quote", "text": "金句", "by": "出处(可选)" }
],
"ending": { "title": "收尾一句" }
}第二步 · 出图:
python3 ~/.workbuddy/skills/WeChat-to-xhs-cards/scripts/render.py \
--spec cards.json --img-base ./raw/images --out ./out --style ink --scale 2| 参数 | 作用 |
|---|---|
--style |
ink(暖白编辑风,默认)/ glass(液态玻璃)/ bold(深色撞色) |
--accent |
覆盖主色,如 #C1440E |
--img-base |
配图目录,脚本会把用到的图复制进 out/images/,整个 out/ 可整体搬走不掉图 |
--scale |
2 = 2160×2880(默认);1 = 1080×1440 |
--html-only |
只出 HTML 不出图,调样式时用 |
五种卡片:points 要点列表(最常用)/ quote 金句 / stat 数据 /
image 配图 / product 场景+产品叠图。字段缺省即不渲染,不用凑。
- macOS,靠 Chrome headless 截图出图(会自动找 Chrome / Edge / Brave / Chromium)
- 零第三方依赖 —— 只用 Python 标准库
- 字体内置 —— 思源黑体 + 思源宋体(SIL OFL 1.1)随技能一起分发, 断网也能跑,换台机器字形也完全一致
- 想改视觉(配色 / 字号 / 圆角)→ 只改
assets/card.css,不用碰脚本
系统默认中文字体(macOS 的苹方 PingFang SC、Windows 的微软雅黑)都是厂商商业字体 —— 拿来出图做商用物料有侵权风险,而且换台机器字形就变了,同一个 spec 跑出两种效果。
内置的思源黑体 / 思源宋体是 SIL OFL 1.1,协议正文明确允许"与任何软件捆绑再分发" (bundled, redistributed and/or sold with any software),所以可以合法进仓库。
作为对比:阿里巴巴普惠体、MiSans、HarmonyOS Sans 虽然同样免费商用,但都是厂商自有协议, 明确禁止再分发字体文件 —— 装在自己机器上用没问题,但不能随开源技能分发,否则 等于制造一个新的侵权。
字体做了子集化:GB2312 全字 + ASCII + 常用标点 = 7556 字,单字重 10 MB → 约 1 MB,
6 个字重合计约 6 MB。详见 assets/fonts/README.md。
- Chrome 152+ 截图后进程不退出 —— headless 写完 PNG 就卡住(
CVDisplayLink报错循环)。 脚本改成"轮询产物文件 + 稳定后杀进程组",别改回subprocess.run等它结束,会永久挂住。 - 每次截图必须换全新临时 profile —— 复用
user-data-dir会被上次残留进程锁死。 - 必须带
--no-sandbox—— 外层沙箱与 Chrome 自带 seatbelt 会打架,不加一张图都出不来。 mkdir(exist_ok=True)在部分环境下仍抛EEXIST—— 全改成if not d.exists(), 否则第二次渲染必挂,且报错信息极具迷惑性。- 文字块必须
flex: 0 0 auto—— 给flex-shrink:1会让它自己压掉高度藏起内容, 外层检测不到溢出,字号自适应永远不触发。这是本技能最容易误伤的地方。 - 不要在脚本里给页眉/页脚硬编码默认文案 —— 早先页脚右写死过一句占位符,
结果每张图都挂着与文章无关的废话,发出去就是废信息。现在改成 spec 的
footnote字段,填了才渲染、不填整格不出现。任何"模板默认值"都别往脚本里塞。
把模型交付你的一批「最终产物」收进一个单文件 HTML,你在浏览器里选中文字就能批注、在图上拖框就能圈注,点一下导出固定文件名
review-comments.json,主理人据此逐条帮你改。
什么时候用 — 一轮拿到一堆文件(推文 / 朋友圈文案 / 小红书文案 / 配图 / 规则 md),看完要逐条反馈、且反馈要和被审内容绑定时。
- 标注和原文绑定(自动记录「谁、哪段、什么意见」),导出结构化意见清单,回收时主理人按图索骥,不用来回问
- 产物 = 最终交付物,不是过程文件:让你写文案,文案本身就是产物;生成它的脚本 /
pipeline.json/ QA 报告都不放进审阅件
| 项目 | 说明 |
|---|---|
| 输入 | 一份 manifest.json:列出要审阅的批次与文件(支持 md / 代码 / 图片) |
| 输出 | 一个自包含、可离线打开的 review.html:选中文字批注 / 图片拖框圈注 / 一键导出 review-comments.json |
| 回收 | 把 json 交回主理人,逐条定位 realpath 修改并回执 |
python final-review/gen_review.py --manifest manifest.json --out review.html详细格式与回收循环见 final-review/README.md。
agent-skills/
├── README.md # 你在看的这个
├── install.sh # 一键安装脚本
├── moments-copy/ # 一个技能 = 一个目录
│ ├── SKILL.md # 主流程,AI 读这个
│ ├── references/ # 参考资料(AI 按需读取)
│ └── user/ # 使用者填的资料(模板已备好)
├── WeChat-to-xhs-cards/ # 推文 → 小红书图文
│ ├── SKILL.md # 主流程 + 装饰识别规则 + 叠图参数说明
│ ├── scripts/render.py # 排版出图脚本(spec JSON → PNG)
│ └── assets/
│ ├── card.css # 全部视觉样式(改视觉只改这个)
│ ├── fonts/ # 内置开源字体(思源黑体/宋体子集 + OFL 协议全文)
│ ├── example-spec.json # spec 示例
│ └── preview-all.png # README 里的案例总览图
└── (新的技能直接加在顶层)
约定 — 顶层目录里只要有 SKILL.md,就会被 install.sh 认成一个技能,新增不用改脚本。
- 顶层建一个目录,目录名就是技能名(小写 + 连字符,例如
wechat-title) - 里面放
SKILL.md,开头写 frontmatter:--- name: wechat-title display_name: "公众号标题" description: "什么时候该触发这个技能,一句话说清" version: 1.0.0 ---
- 需要参考资料就建
references/,需要使用者填资料就建user/ - 在 README 的技能一览表里加一行
user/ 里的模板是空的,但填完之后它们就变成私人资料了(品牌信息、往期文案)。
-
.onboarded标记和user/archive/下的存档已被.gitignore排除 -
如果你 clone 后填了资料,又不想被 git 盯上,跑这条让它假装没看见:
git update-index --skip-worktree moments-copy/user/brand-brief.md
换掉文件名可以保护其他几个。要恢复跟踪把
--skip-worktree换成--no-skip-worktree。
技能本体 MIT © 2025
内置字体(WeChat-to-xhs-cards/assets/fonts/)采用 SIL Open Font License 1.1,
版权归 Adobe / Google 所有,许可证全文随字体一同分发(fonts/OFL.txt)。
字体文件不得单独出售(OFL 第 1 条);随本仓库一起使用与再分发不受限制。
Made with ❤️ for 品牌运营
