Skip to content

About

品牌运营,输入然后输出

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

agent-skills

给 AI 用的技能库 —— 每个目录一个技能,复制过去就能用,零构建零依赖。

Skills License Platform


✨ 技能一览

技能 干什么 输入 → 输出 首次要配资料
📖 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 才会扫到新技能。


📖 moments-copy · 海报朋友圈文案

丢一张海报和一份资料进去,出三条能直接复制发出去的朋友圈文案。

什么时候用 — 拿到门店开业图 / 活动主视觉 / 产品海报 / 宣传单,要配一段发圈文案时。

✨ 它和别的文案工具不一样在哪

  • 📏 按朋友圈真实规格写 — 超 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。


🖼️ WeChat-to-xhs-cards · 推文to小红书图文排版

把一篇已成稿的公众号文章,拆成小红书那种 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。

🕳️ 踩过的坑(都内置处理了,改代码前先看)

  1. Chrome 152+ 截图后进程不退出 —— headless 写完 PNG 就卡住(CVDisplayLink 报错循环)。 脚本改成"轮询产物文件 + 稳定后杀进程组",别改回 subprocess.run 等它结束,会永久挂住。
  2. 每次截图必须换全新临时 profile —— 复用 user-data-dir 会被上次残留进程锁死。
  3. 必须带 --no-sandbox —— 外层沙箱与 Chrome 自带 seatbelt 会打架,不加一张图都出不来。
  4. mkdir(exist_ok=True) 在部分环境下仍抛 EEXIST —— 全改成 if not d.exists(), 否则第二次渲染必挂,且报错信息极具迷惑性。
  5. 文字块必须 flex: 0 0 auto —— 给 flex-shrink:1 会让它自己压掉高度藏起内容, 外层检测不到溢出,字号自适应永远不触发。这是本技能最容易误伤的地方。
  6. 不要在脚本里给页眉/页脚硬编码默认文案 —— 早先页脚右写死过一句占位符, 结果每张图都挂着与文章无关的废话,发出去就是废信息。现在改成 spec 的 footnote 字段,填了才渲染、不填整格不出现。任何"模板默认值"都别往脚本里塞。

🔍 final-review · 一键审阅 AI 产物

把模型交付你的一批「最终产物」收进一个单文件 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 认成一个技能,新增不用改脚本。


➕ 怎么加一个新技能

  1. 顶层建一个目录,目录名就是技能名(小写 + 连字符,例如 wechat-title)
  2. 里面放 SKILL.md,开头写 frontmatter:
    ---
    name: wechat-title
    display_name: "公众号标题"
    description: "什么时候该触发这个技能,一句话说清"
    version: 1.0.0
    ---
  3. 需要参考资料就建 references/,需要使用者填资料就建 user/
  4. 在 README 的技能一览表里加一行

🔒 隐私提醒

user/ 里的模板是空的,但填完之后它们就变成私人资料了(品牌信息、往期文案)。

  • .onboarded 标记和 user/archive/ 下的存档已被 .gitignore 排除

  • 如果你 clone 后填了资料,又不想被 git 盯上,跑这条让它假装没看见:

    git update-index --skip-worktree moments-copy/user/brand-brief.md

    换掉文件名可以保护其他几个。要恢复跟踪把 --skip-worktree 换成 --no-skip-worktree。


📄 License

技能本体 MIT © 2025

内置字体(WeChat-to-xhs-cards/assets/fonts/)采用 SIL Open Font License 1.1, 版权归 Adobe / Google 所有,许可证全文随字体一同分发(fonts/OFL.txt)。 字体文件不得单独出售(OFL 第 1 条);随本仓库一起使用与再分发不受限制。


Made with ❤️ for 品牌运营

About

品牌运营,输入然后输出

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages