--- name: wechat-article description: 给 hllqkb 个人公众号写文章并发到后台的完整流程:从用户真实经历和资料选题写稿、脱敏、核对引用、Codex 审稿、qu-ai-wei 去 AI 味、按原文数字重绘配图、用 gzh-design 的 Claude 陶土主题排版,再用 ego-browser 填进 mp.weixin.qq.com 存草稿、发预览,用户说「发」才发表。用户说「写一篇公众号」「发公众号」「公众号文章」「把这个写成公众号」时使用。只排版不写稿时直接用 gzh-design。 --- # 公众号写作与发布(hllqkb) 账号:个人订阅号 **hllqkb**,管理员就是用户本人。登录、发表都要用户扫码。 ## 硬规则 - **不编经历**。素材只来自用户给的稿子、本机记忆(`~/.claude/projects/*/memory/`)、过往会话(`search_session_transcripts` / `list_events`)。找不到的细节写成待确认,不补。 - **公司内部细节默认不写**:内部系统名、测试/发布流程的具体机制、业务数据与判断(如流量大小)、内部数字。写成通用说法;拿不准的列给用户确认,并提醒可先问 mentor。 - **引用的外部数字必须打开原文核对**(WebFetch),文中写清出处和日期。别人的图有版权,**不直接搬**:按原文数字自己画,图上标「数据来源:…,作者据原文数字重绘」。 - **对外动作每次都等明确授权**:勾平台协议、声明原创、发预览、发表 / 群发都要用户当次说了才做。之前的同意不延续。 ## 流程 ### 1. 定选题和素材 先找用户给过的文章和经历,再按需联网找新资料(优先一手来源,标日期)。出一句话方案:写什么、用哪些真实经历、引哪几篇。 ### 2. 写初稿 第一人称,口语,说人话:结论先行、短段落、不要金句、排比和营销腔,结尾停在一个具体问题上。每节结构:「别人怎么说 → 我怎么做 → 我哪里还没做好」,不要反复写「我早就这么干了」来自我印证。 ### 3. 审稿(两步,都要做) 1. **Codex 审**(后台跑,必须 `< /dev/null`): ```bash codex exec --skip-git-repo-check -c model_reasoning_effort=xhigh --sandbox read-only "<审阅要求:事实核对(可联网对原文)/逻辑/AI 味/内部信息泄露风险,逐条给原文与修改建议>" < /dev/null > review.log 2>&1 ``` 它指出的事实错误,自己再去原文核一遍才改。 2. **qu-ai-wei** 去 AI 味,按其输出格式交付,并列出【需作者确认】。 ### 4. 配图 用户要「有人味」的图:**原创插画 + 免版权实拍 + 自己重画的数据图**混着用,不要全是代码画的卡片。 - **原创插画(Codex 出图)**:按文中的比方画,不照着任何现有作品描,画面里不出现文字。命令模板:`codex exec --skip-git-repo-check --sandbox workspace-write -C <输出目录> "请用图片生成功能画 N 张原创插画……每张复制到当前目录命名为 x.png" < /dev/null`。风格固定写「温暖手绘编辑插画、纸张质感、米白/燕麦/陶土橙/墨黑/暖灰配色、大量留白」。出图后用 sips 转成 1080 宽的 jpg。 - **实拍**:Unsplash / Pexels。curl 会被 Unsplash 的机器人检测拦下,改用 ego-browser 打开照片页,读 `og:image` 和授权文字,只用「Free to use under the Unsplash License」,不用 Unsplash+。图片地址用 `images.unsplash.com/photo-?w=1080&q=80`。**下载前要把文件名、来源、大小列给用户,用户同意了才下**;图下标「图:摄影师 / Unsplash」。逐张检查画面里有没有别人的商标、logo(例如 PS2),有就换掉。 - **别人有版权的图,不要用 AI「照着重画」**,那还是改编,风险没消失。数据类的图按原文数字自己重画。 - 封面可以直接用正文里的插画:点封面「更换」,选「从正文选择」。 - 数据图用 HTML 写,用 headless Chrome 截图:`"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --force-device-scale-factor=2 --window-size=W,H --screenshot=out.png file://x.html`。 - 配色跟主题一致:底色 `#FAF9F5`,主色 `#D97757`,橙色文字用 `#A34F36`,辅助字用 `#6B6A63`,标题用宋体。 - **手机优先**:表格不超过 4 列,字号按 640px 宽画到 18–20px。 - 封面 900×383,墨黑底、陶土橙数字、衬线大字。转发卡片会按 1:1 裁切,只保留左侧,重点放左边。 ### 5. 排版 用 gzh-design skill 的 **Claude 陶土**主题(`theme-claude-clay`,用户选定的 V1)。要点: - 全文强调**最多 6 处**,只标结论和关键数据。 - 列表用固定宽度的标记槽位。 - **结尾不加签名**(用户 10-22 要求删掉「我是 hllqkb……」),也不加「点赞在看转发」;文章停在最后的问题和 ✻ ✻ ✻ 上。 - **不要「本文看点」目录**,配置里不写 highlights。 - **图片不标出处**(Unsplash 授权不要求署名,用户不要图注);数据图里自带的数据来源保留。 - 跑 `validate_gzh_html.py` 到 0 ERROR、0 WARNING,再用 `wrap_preview.py` 出预览,截图给用户看。 ### 6. 填进后台(ego-browser) 1. 打开 `https://mp.weixin.qq.com/`。没登录就 `handOff()`,让用户扫码。 2. 首页点「文章」,会弹出新标签页,就是编辑器。关掉引导弹窗时点「稍后再说」「我知道了」,**不勾任何协议**。 3. 填三个字段: - **标题**:点快照里「请在这里输入标题」那个容器,再 `keyboard.insertText`。`#title` 是隐藏的,不能 fill。 - **作者**:直接 `fill('#author')`。 - **摘要**:先点 `#js_description`,再 `insertText`。用 fill 的话字数计数不更新。 4. **传图片拿地址**:把光标移到正文末尾,再对 `.tpl_dropdown_menu_item input[type=file]` 调 `setInputFiles`。等新出现一个 `https://mmbiz.qpic.cn/...` 的 img,记下它的 src。图片列表里会混着空 src 的占位,计数时只算 https 开头的。 5. **粘正文**:用图片地址渲染出最终 HTML,选中正文那个 ProseMirror 的全部内容,删掉,再 `keyboard.paste({ text, html })`。主题的内联样式会完整保留。 6. **封面**:点封面框,或者悬停后点「更换」,选「从图片库选择」。对弹窗里 `.weui-desktop-dialog__bd` 下的 file input 调 `setInputFiles`,然后点下一步、确认。 7. 点「保存为草稿」。 ### 7. 原创、预览、发表 - **原创**:在「原创 → 文字原创」里,勾协议之前必须问用户。快捷转载按用户的意思设。 - **创作来源**:平台会提醒 AI 生成内容需要声明。每篇都要问用户,不替他选;他说不标,就选「无需声明」。 - **预览**:点「预览」,选「通过公众号列表预览」,微信号默认是 hllqkb,点确定。确认页面出现「成功发送预览到目标手机微信」。 - **发表**:等用户说「发」,再依次点: 1. 「发表」 2. 创作来源提示框 3. 发表设置窗口,「群发通知」默认开着,每天 1 次 4. 「继续发表」 5. 出现微信验证二维码后 `handOff()`,让用户扫码 6. 用户扫完码,去「发表记录」确认这篇已经发出 ### 8. 贴图(可选) 文章发表后,平台会自动生成一份「贴图」草稿:多图左右滑,配一段短文字,优先推给非粉丝。入口在发表记录里那条提示的「去查看」,**不在草稿箱里**。 - **平台自动生成的内容不能直接发**:第 1 张是亮绿色标题卡,和主题不搭;配文是营销腔,还会夸大原文。所以要改。 - **换封面**:竖版 1080×1440,配色跟主题一致。点缩略图后面的「+」,选「本地上传」,用 `waitForFileChooser` 传图。新图会排到最后,用鼠标按下、横向慢慢拖、松开,把缩略图拖到第 1 位。原来那张点选中后,用浮出来的垃圾桶删掉。 - **改配文**:粘贴 HTML 时编辑器会吞掉空行。要在配文框里一段一段 `insertText`,段与段之间按两次 Enter。**清空之前先确认已经读到了原内容并另存一份**,否则读取失败时会直接把配文清空。 - 预览和发表的流程跟文章一样,同样要等用户说「发」。 ## 踩过的坑 - 浏览器出口走的是本机代理,平台显示的 IP 属地可能是新加坡。小红书已经遇到过,介意的话先关代理。 - 后台的「一键排版」会把列表吃掉、统一改掉标题样式,有 gzh-design 就别用它。 - 用户把浏览器控制权拿回去以后,脚本里调 `taskSpace(id)` 会报错停住。等用户说继续,再用 `takeOverTaskSpace(id)` 接回来。 - 已发表的文章只能改标题、正文文字(最多 120 字)、图片、封面和摘要,每篇最多改 3 次;排版样式(底色、间距)改不了。样式问题必须在发表前通过预览发现。 - 正文用不了自定义字体:平台不加载外部字体,官方还建议连 font-family 都别设。要特殊字体,只能做进图片。