只要本轮因为 skill / 技能 指名,或因为关键词命中而进入本技能,第一行先写:
已走技能:公众号文章-学员版
From topic to published draft — one skill, full pipeline. 从一个话题到可发布的文章,一次走完。
学员装完 skill 第一次用,一个配置都不要问。分两阶段:
| 阶段 | 触发时机 | 学员需要做什么 |
|---|---|---|
| ------ | --------- | -------------- |
| 🟢 阶段 1 首次使用 | 学员第一次说"写公众号文章" | 零配置。直接读本地内容库 → 写文章 → 生成 HTML 预览 → 学员复制粘贴到公众号后台 |
| 🟡 阶段 2 升级签名卡 | 学员主动说"想让文章底部有我的头像 / 可跳转到我公众号" | 一次性问 3 件事(头像URL/biz_id/CTA),存到 ~/.wechat-article-config/author-card.json |
为什么不做"自动推送到草稿箱":需要企业主体公众号 + appid/appsecret + IP 白名单,且白名单一旦换网络(家→公司→咖啡馆→出差)就要重新加,运维负担太重。手动 Ctrl+V 粘贴只要 10 秒,比折腾这套 API 划算。本 skill 不提供自动推送路径。
硬规则:
学员的身份不从清华哥的人设档案来,也不从填表来——从学员自己的内容库来。
固定路径:~/Desktop/我的内容库(勿动)/(由"内容库搭建-学员版" skill 维护)
BASE=~/Desktop/我的内容库(勿动)
# 1. 老板画像 — 身份/经历/客户/差异化/金句
ls "$BASE/01-黄金五环/"
# 如果有文件,读取最新一篇(通常是终版)
# 2. 学习老板的写作口吻
ls "$BASE/02-人设文案/" | head -3
# 读 2-3 篇最新的,感受语气/常用词/节奏
# 3. 真实故事素材(开头/细节/案例来源)
ls "$BASE/03-人设故事/" | head -3
# 4. 可选:感受整体表达风格
ls "$BASE/04-热点文案/" "$BASE/05-爆款改写/" "$BASE/06-直播稿/" 2>/dev/null | head -3
读完上面这些文件,在心里形成一份"老板是谁"的认知画像:
严禁:读完不用。每一个判断、每一句口吻都必须回到这些画像。
公众号 80% 打开率靠标题。按以下规则出 3 个备选:
references/style-bible.md Section 2输出格式(必须用数字选项):
请选标题(输入 1 / 2 / 3):
1. {标题A}
2. {标题B}
3. {标题C}
老板选完再进 Phase 2。
references/writing-methodology.md — 7 步骨架 + 公众号适配规则references/style-bible.md — 通用写作原则 + 六原则 + 六维评分按 writing-methodology.md 的 7 步骨架:
字数硬规则:
给老板看 5-7 行大纲:
📋 大纲预览
- 开场判断:{用什么场景/判断开头}
- 中段论点:{核心论点 1-2 个}
- 业务植入位置:{第几段/怎么植入}
- 结尾落点:{金句方向}
OK 就回复 "继续",要调就告诉我调哪里。
Layer 1: 六原则逐段扫描(style-bible.md Section 6)
逐段检查 6 条:
任何一条不通过 = 修改该段重写自检。
Layer 2: 六维评分(style-bible.md Section 4)
开场抓取力 / 结构推进力 / 人设可信度 / 业务植入丝滑度 / 听感可读性 / 风险控制,
每项 20 分共 120 分。必须 ≥105 且单项 ≥16。
Layer 3: 一票否决
触发任一 = 整篇重写:
📋 质量自检:
字数: {实际字数} (目标 1800-2000)
六原则: ✅✅✅✅✅✅ (6/6 通过)
六维评分: 108/120 (最低项 17)
一票否决: 无触发
assets/template-v3-clean.html — V3 Clean 黄金模板
这是本 skill 的唯一模板入口。不要切其他模板。
骨架:
<div class="wrapper">
<div class="hero">
<div class="hero-badge">{2-4字标签 如"老板必看"}</div>
<div class="hero-title">{6-10字核心判断,关键词用 .hero-highlight 黄色高亮}</div>
<div class="hero-subtitle">{关键词A · 关键词B · 关键词C}</div>
</div>
<div class="article-body">
<div class="content">
正文
</div>
</div>
底部签名区 - 阶段 1 用纯文字版 / 阶段 2 读 author-card.json
<div class="footer-fixed">
见 Phase 3.5 签名区生成规则
</div>
</div>
.hero-badge 替代).callout / 蓝 .callout-blue / 绿 .callout-green).golden)· · · — 每个大章节之间一个.highlight-line)⚠️ 不要在 HTML 中写标题/作者/日期栏 — 微信推送时自动添加。正文直接从 Hero 开始。
⚠️ 不要写 HTML 注释(尖括号加叹号加两个减号那种) — 微信会变成可见文字。
#d4380d(红棕)linear-gradient(135deg, #fff7e6, #ffe7ba)#f6f8fa + 左线 #d4380d#f0f5ff + 左线 #1890ff16px / line-height:2 / color:#33310px-12px可以用: 块 + CSS class(脚本自动内联)、display:flex / gap / flex:1 / linear-gradient / box-shadow / border-radius / text-shadow
禁用:::before / ::after / clip-path / clamp() / CSS animation / CSS Grid / 外部字体 / 非 mmbiz.qpic.cn 域名的图片 / position:relative(会被微信自动移除)
检测:
test -f ~/.wechat-article-config/author-card.json || echo "走阶段1"
从 01-黄金五环 提取:
author_nameauthor_taglineending_motto模板:
<div class="footer-fixed">
<div class="footer-divider">— — —</div>
<div class="sign-motto-box">
<div class="sign-motto">"{从黄金五环提取的金句}"</div>
</div>
<div class="author-card-text">
<div class="author-name">{姓名}</div>
<div class="author-tagline">{一句话介绍}</div>
</div>
</div>
不放:头像、公众号跳转链接、CTA 按钮。
生成后告诉老板:
💡 提示:现在你的签名卡是纯文字版。
如果想让底部显示你的头像并且可以点击跳转到你的公众号主页,
任何时候跟我说"配置签名卡"就行(需要 3 个信息,一次配好)。
读取:
cat ~/.wechat-article-config/author-card.json
模板:照原 V3 Clean 的 .footer-fixed 结构,用 author-card.json 里的字段填充。所有 {{变量}} 做字符串替换,空字段就跳过对应行。
📋 视觉自检:
✅ Callout 卡片: {N} 个 (≥2 ✓)
✅ 金句高亮框: {N} 个 (≥1 ✓)
✅ 连续正文: 最长 {N} 段 (≤4 ✓)
✅ 分隔线: {N} 个 ✓
✅ Section 标题带暖色底: {N} 个 ✓
✅ 数据可视化: {组件类型} ✓
✅ 荧光笔高亮: {N} 处 ✓
✅ 签名区: {阶段 1 纯文字 / 阶段 2 完整卡} ✓
> 学员是实体老板,不会 python。本 Phase 所有命令都是 LLM(你)替学员跑的。学员永远只看浏览器预览页——不看终端、不看路径、不看 traceback。
⚠️ 硬规则:
python3 / python 命令名调脚本(Windows 默认只有 python,没 python3;Linux 反过来)。统一用 Python subprocess + sys.executable——它自动找到当前 Python 解释器,跨平台 100% OK。${TMPDIR:-/tmp} 算路径(Windows PowerShell/cmd 不认)。统一用 tempfile.gettempdir()。把下面这一段 Python 整段执行(你应该有跑 Python 代码的能力——和 Phase 0 / Phase 3 写文件一样):
import sys, os, subprocess, tempfile
# 1. 环境前置检查(缺 bs4 自动装)
try:
import bs4 # noqa: F401
except ImportError:
subprocess.run([sys.executable, "-m", "pip", "install", "--quiet", "beautifulsoup4"], check=True)
# 2. 算跨平台临时目录 + 写 raw HTML
preview_dir = os.path.join(tempfile.gettempdir(), "preview")
os.makedirs(preview_dir, exist_ok=True)
raw_path = os.path.join(preview_dir, "wechat_article_raw.html")
with open(raw_path, "w", encoding="utf-8") as f:
f.write(RAW_HTML) # 你刚生成的 V3 Clean HTML 字符串
# 3. 调 run_pipeline.py(用 sys.executable 自动用对的 Python,无需纠结 python/python3)
script = os.path.join(os.getcwd(), "scripts", "run_pipeline.py")
if not os.path.exists(script):
raise RuntimeError(f"找不到 run_pipeline.py(当前目录: {os.getcwd()})。检查 skill 安装路径。")
result = subprocess.run(
[sys.executable, script, raw_path],
capture_output=True, text=True, encoding="utf-8", errors="replace",
)
print(result.stdout)
if result.returncode != 0:
# 你(LLM)看到 stderr → 自己 debug,不要丢给学员
print("⚠️ run_pipeline 报错(LLM 处理,不要让学员看):", result.stderr, file=sys.stderr)
raise RuntimeError("run_pipeline 失败,需要 LLM 介入 debug")
run_pipeline.py 内部按顺序跑三步,Windows / macOS / Linux 全兼容:
wechat_article.html(含 / / )text/html MIME 写进系统剪贴板(macOS osascript / Windows PowerShell .NET / Linux xclip)。Windows 端用 [System.IO.File]::ReadAllText + UTF-8 显式编码读取,规避中文乱码wechat_article_preview.html,右上角浮动「📋 一键复制到公众号」红橙按钮学员的浏览器自动弹一个文章预览页,右上角一定有红橙色按钮。两条粘贴姿势:
按钮 JS 三段式回退(应付任何浏览器/协议组合):
ClipboardItem API(现代 Chrome / Edge / Safari,安全上下文 + user gesture)execCommand('copy') + 隐藏 contenteditable(Windows file:// 协议下被拒绝 ClipboardItem 时兜底,墨滴 / Markdown Nice 长期姿势)writeText 纯源码(最后兜底,几乎不会到)学员全程只看浏览器,不需要看终端、不需要敲任何命令。
✅ 文章写好了!浏览器应该已经弹出来一个预览页。
📋 下一步(一粘即发):
1. 看一眼浏览器预览页排版,没问题就走下一步
2. 打开 mp.weixin.qq.com → 新建图文消息
3. 在编辑区直接 Ctrl+V(Mac: Cmd+V)← 排版会完整粘进去
4. 标题填《{刚才选的标题}》
5. 摘要填:{自动生成的摘要}
6. (可选) 上传封面图 → 点"保存为草稿"或"发布"
⚠️ 注意:
- 不要点"粘贴为纯文本",选默认粘贴就行
- 万一粘贴上去是空的或者排版乱了,回到浏览器预览页右上角点【📋 一键复制到公众号】按钮,再去公众号后台 Ctrl+V 一次
⚠️ 学员可见话术绝对禁止内容(铁律):
C:\Users\... / /var/folders/... / ~/.cache/...)python ... / pip install ...)你(LLM)自己 debug,不要丢锅给学员。所有调用都用 Python subprocess + sys.executable 模式,绝不直接 shell 调 python / python3:
import sys, subprocess, os
# 单独跑某一步定位问题
SCRIPTS = os.path.join(os.getcwd(), "scripts")
# 单独转换
subprocess.run([sys.executable, os.path.join(SCRIPTS, "convert_to_wechat_markup.py"),
"--input", raw_path, "--output", wechat_path, "--meta", meta_path], check=True)
# 单独塞剪贴板
subprocess.run([sys.executable, os.path.join(SCRIPTS, "copy_html_to_clipboard.py"),
wechat_path], check=True)
# 单独弹预览
subprocess.run([sys.executable, os.path.join(SCRIPTS, "open_preview.py"),
raw_path], check=True)
最后兜底:如果以上全挂了,把生成的 wechat_article_preview.html 绝对路径用 file:// 协议告诉学员"双击这个文件打开"——但不要让学员敲任何命令。
只在老板主动说"要封面"或"生成一下封面"时做。 默认不生成——因为公众号后台自带封面编辑器,很多老板习惯在后台弄。
如果老板要:
import sys, os, subprocess, tempfile
preview_dir = os.path.join(tempfile.gettempdir(), "preview")
cover_path = os.path.join(preview_dir, "cover.jpg")
script = os.path.join(os.getcwd(), "scripts", "generate_cover.py")
subprocess.run([sys.executable, script,
"--title", "{主标题}",
"--label", "{标签}",
"--output", cover_path], check=True)
触发条件:老板说"配置签名卡" / "想让文章底部有我头像" / "让读者能跳转我公众号"。
好,配置签名卡我要问你 3 件事,一次配好以后所有文章自动用:
1️⃣ 你公众号的头像(微信永久图片 URL)
怎么拿:公众号后台 → 素材管理 → 图片 → 上传一张头像 → 右键图片 → 复制图片地址
(URL 一定是 mmbiz.qpic.cn 开头的,外部图床微信会屏蔽)
2️⃣ 你公众号主页的 __biz 参数
怎么拿:发你公众号任意一篇历史文章的链接给我,我自己从里面提取
(链接里 __biz= 后面那一串等号结尾的)
3️⃣ CTA 话术(底部引导关注的一句话)
比如:"关注我,每周讲一个实体老板的真实问题"
"想链接更多实体老板,在公众号留言"
我等你发 3 个信息过来,一次配好。
Step 1: 跑配置迁移脚本(必须,否则可能 mkdir 失败)
# 检测 ~/.wechat-article-config 是文件还是目录
# - 是目录或不存在 → 啥都不做
# - 是文件(旧版 skill 留下的) → 备份到 ~/.wechat-article-config-legacy.json
# 并升级为目录形式,自动迁移合法的 wechat API JSON
import sys, os, subprocess
script = os.path.join(os.getcwd(), "scripts", "migrate_legacy_config.py")
subprocess.run([sys.executable, script], check=True)
Step 2: 写入 author-card.json
# 组装 author-card.json:
# - author_name / author_tagline / ending_motto → 从 01-黄金五环 自动提取
# - author_avatar_url / mp_biz_id / cta_title → 老板提供
# - author_slogan_1/2 / cta_subtitle / ending_motto_sub → 可选,有就填没有就空
cat > ~/.wechat-article-config/author-card.json <<'EOF'
{...}
EOF
✅ 签名卡已配置。以后写公众号自动用这套。
想改的话随时跟我说"改签名卡"。
📍 配置文件位置:~/.wechat-article-config/author-card.json
(你可以直接编辑这个文件,也可以跟我说改哪项)
01-黄金五环 硬写文章。没画像 = 让老板先跑黄金五环采集/tmp/ 写死在脚本或指令里,或用 bash 语法 ${TMPDIR:-/tmp} 算路径(Windows PowerShell/cmd 不认 → 路径错位 → 一键复制按钮不显示)。统一用 Python 的 tempfile.gettempdir()::before/after、外部图床、CSS 动画python3 / pip / shell 命令、文件绝对路径、终端操作丢给学员手敲——学员是实体老板,看到命令文字会直接劝退。所有命令都是 LLM(你)替学员跑的,学员全程只看浏览器预览页。命令跑挂了你(LLM)自己 debug,绝对不要让学员碰终端python3 scripts/xxx.py 或 python scripts/xxx.py——Windows 学员系统默认只有 python 命令、没有 python3;Linux/macOS 反过来。统一用 Python subprocess.run([sys.executable, script, ...]) 模式,sys.executable 自动找对的 Python 解释器try: import bs4 except ImportError: subprocess.run([sys.executable, "-m", "pip", "install", "--quiet", "beautifulsoup4"]) 自动装齐共 6 个版本