我把自己写公众号用的那套配图、排版、发布流程,整理成了一个开源的 Agent Skill:markdown-to-wechat。
GitHub:github.com/littleben/markdown-to-wechat
写好 Markdown,交给 Claude Code 或 Codex,它会截图配图、排版、预览检查,最后一条命令发进公众号草稿箱。

为什么做
最近排一篇复盘文章(我把网站用户转化到公众号,三周涨粉 2 万+),排版来回改了四轮:
- 第一版用力过猛,样式太多;
- 收着点之后,又太朴素,底色高亮看不到,标题也简单;
- 把组件都放开用,有几处又太密;
- 往回收一收,才定下来。
改完我发现,问题不在用不用组件,而在怎么分布。每种组件都可以用,但要挑最合适的内容放,不能连着堆。
这条标准我写进了 skill,还做成了自动检查。
能做什么
排版:6 套主题,12 种组件
主题:晚点红、摸鱼绿、科技蓝、石墨极简、橄榄手记、留白禅意。
组件:引言卡、本文看点、编号章节、数据卡片、时间线、表格、胶囊列表、金句、提示条、踩坑提示、灰色旁注、END 分割线。
写法就是普通 Markdown,再加几种标记:
> [!INTRO] 核心判断,用 ==关键词== 点题。
> [!DATA] 9.5 万 | 网站用户
> 65% | 新关注来自扫码
> [!TIMELINE] 10 月 3 日 | 第一版上线
> 10 月 7 日 | 改成配对码
> [!TIP] 给照做的人的提醒。
输出的是纯内联样式的 HTML,粘贴进公众号编辑器或者用接口发布,样式都不会丢。

密度检查
渲染时会按标准检查,超了就打印提示:
- 加粗超过 10 处、下划线超过 8 处、底色高亮超过 5 处
- 同一段里有两处下划线
- 两个卡片、表格、代码块紧挨着,中间没有一句正文
- 列表项每条都加粗
提示清零,再交付。
配图:能截真实的,就不画
自己画的数字卡片,看起来像编的。后台、产品界面、仓库页,能截真实页面就截。
shot.py 截 2 倍清晰度的图,可以连一个已登录的 Chrome 去截 GA4、公众号后台这类需要登录的页面。cover.py 生成 2.35:1 的封面。
发布:一条命令进草稿箱
python3 scripts/publish.py article.md --ssh myserver
它会依次做这几件事:
- 渲染,检查排版密度
- 校验公众号的 HTML 限制
- 压缩图片,正文图宽度不超过 1080、单张不超过 1 MB,封面裁成 2.35:1
- 上传正文图和封面
- 新建草稿
公众号接口要求 IP 白名单,家里的 IP 经常变。--ssh 可以在一台白名单服务器上调用接口,凭据通过 SSH 传过去,不会写进文件或日志。
5 种文章模板
复盘、教程、工具盘点、观点、产品发布。每种都按标准排好了组件,从模板开始写就行。
安装
git clone https://github.com/littleben/markdown-to-wechat ~/.claude/skills/markdown-to-wechat
pip install pillow requests playwright
然后跟 Agent 说:
用 markdown-to-wechat,把这篇 Markdown 排成公众号文章,先截真实的后台数据做配图,预览没问题后发到草稿箱。
不用 Agent 也可以,脚本都能直接跑,用法见仓库 README。
致谢
组件设计和公众号 HTML 校验器来自 gzh-design(甲木 × 摸鱼小李)。markdown-to-wechat 在它的基础上补了多主题、密度检查、真实截图、封面和接口发布,同样以 AGPL-3.0 开源。
有问题欢迎在 GitHub 提 issue,觉得有用的话点个 Star。