API安装
- 作者仓库星标 2,194
- 作者更新于 实时读取
- 作者仓库 wewrite
- 领域
- 通用
- 兼容 Agent
-
- Claude Code
- Cursor
- Cline
- Codex
- Windsurf
- Gemini CLI
- +20
- 信任分
- 88 / 100 · 社区维护
- 作者 / 版本 / 许可
- @oaker-io · 未声明 license
- Token 消耗评级
- 低消耗
- 接入复杂程度
- 需简单配置
- 是否需要外部 API Key
- 需要 · Vendor-specific
- 兼容的系统
- macOS
- 底层运行要求
- Python
- 文件与系统权限
-
- 只读
- 允许写入 / 修改
- 网络行为
- 允许外网请求
- 安装命令数
- 26 条
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
---
name: wewrite
description: | 主管道是固定的 8 个 Step(下面逐节展开): [1/8] 环境 + 配置 [2/8] 选题 [3/8] 框架 + 素材 [4/8] 写作 [5/8] SEO + 验证 [6/8] 视…
category: 通用
runtime: Python
---
# wewrite 输出预览
## PART A: 任务判断
- 适用问题:通用任务拆解、检查和交付。
- 输入要求:目标材料、限制条件、期望输出和验收方式。
- 证据边界:围绕“行为声明 / 主管道(Step 1-8) / Step 1: 环境 + 配置”读取原文规则,不把推断写成作者承诺。
## PART B: 执行结果
- **01** 任务判断:确认你的需求是否属于通用任务拆解、检查和交付,并标出输入、限制和预期结果。
- **02** 执行计划:优先按“行为声明 / 主管道(Step 1-8) / Step 1: 环境 + 配置”拆成步骤,说明每一步会读取什么、修改什么、产出什么。
- **03** 交付结果:给出可复制的命令、文件改动、检查清单或内容草稿,并说明如何继续迭代。
- **04** 风险边界:结合 读取文件、写入/修改文件、会按任务需要访问外部网络、需要准备 Vendor-specific API Key 给出执行前确认项。
## Running Rules
- 读取文件、写入/修改文件;会按任务需要访问外部网络;需要准备 Vendor-specific API Key。
- 先小样例验证,再放大到真实任务。
- 交付时同时给结果、检查口径和下一步迭代建议。 原文没有稳定的斜杠命令要求。安装验证后通常全局生效,直接在对话里点名这个 Skill 并描述任务即可。
告诉 Agent 目标文件或材料、期望结果、不可改范围、是否允许联网或执行命令。本 Skill 的权限画像是:读取文件、写入/修改文件。
先用一个小任务确认它会围绕“行为声明 / 主管道(Step 1-8) / Step 1: 环境 + 配置”工作;涉及文件或命令时,先看 diff、日志、预览或测试结果。
检查最终产物是否包含明确结果、必要证据和下一步动作;如果输出泛泛而谈,就补充输入、边界和验收标准后重跑。
---
name: wewrite
description: | 主管道是固定的 8 个 Step(下面逐节展开): [1/8] 环境 + 配置 [2/8] 选题 [3/8] 框架 + 素材 [4/8] 写作 [5/8] SEO + 验证 [6/8] 视…
category: 通用
source: oaker-io/wewrite
---
# wewrite
## 什么时候使用
- 把通用方向的常用动作沉淀成 Agent 可调用的技能 适合处理通用任务拆解、检查、交付和复盘,核心价值是把输入、判断、执行、验证和交付边界固定下来,避免 Agent 泛泛回答。 把任务拆成可执行、可检查、可继续迭代的步骤;使用前要准备…
- 面向通用任务拆解、检查和交付,优先处理能明确输入、步骤和验收标准的工作。
## 需要提供什么
- 目标材料、目录范围、期望结果和不可改动内容。
- 是否允许联网、执行命令、读写文件或调用外部服务。
## 执行规则
- 围绕「行为声明 / 主管道(Step 1-8) / Step 1: 环境 + 配置」组织步骤,不把推断写成作者事实。
- 读取文件、写入/修改文件;会按任务需要访问外部网络;需要准备 Vendor-specific API Key。
- 先跑小样例,确认结果可检查后再扩大任务范围。
## 输出要求
- 给出最终产物、关键证据、验证方式和下一步动作。
- 信息不足时标记 unknown,不编造命令、平台或依赖。 作者原文负责流程事实;仓库文件负责来源和命令;流狐只补充适用场景、限制和质量判断。
skill "wewrite" {
输入层 -> 用户目标 + 目标文件 + 禁止范围 + 验收标准
上下文层 -> 行为声明 / 主管道(Step 1-8) / Step 1: 环境 + 配置
规则层 -> SKILL.md 触发条件 / 执行顺序 / 输出格式
运行层 -> Python | 读取文件、写入/修改文件 | 会按任务需要访问外部网络
安全层 -> 需要准备 Vendor-specific API Key + 小任务验证 + diff / 日志复核
输出层 -> 可复制结果 + 检查清单 + 下一步迭代
} WeWrite — 公众号文章全流程
行为声明
角色:用户的公众号内容编辑 Agent。
模式:
- 默认全自动——一口气跑完 Step 1-8,不中途停下。只在出错时停。
- 交互模式——用户说"交互模式"/"我要自己选"时,在选题/框架/配图处暂停。
降级原则:每一步都有降级方案。Step 1 检测到的降级标记(skip_publish、skip_image_gen)在后续 Step 自动生效,不重复报错。
进度追踪:若 harness 提供 task 工具(如 TaskCreate),主管道启动时为 8 个 Step 创建任务,每步 in_progress→completed;否则每进入一步发一行 [N/8] 步骤名 文本进度。无论哪种,都必须把 8 步走完——编号清单是排序骨架,不依赖特定工具。
完成协议:
- DONE — 全流程完成,文章已保存/推送
- DONE_WITH_CONCERNS — 完成但部分步骤降级,列出降级项
- BLOCKED — 关键步骤无法继续(如 Python 依赖缺失且用户拒绝安装)
- NEEDS_CONTEXT — 需要用户提供信息才能继续(如首次设置需要公众号名称)
路径约定:本文档中 {baseDir} 指本 SKILL.md 所在的目录(即 WeWrite 的根目录)。
读取/检查约定:本文档中 读取: <路径> / 检查: <路径> = 用你环境的文件读取工具真实打开该文件、读完其全部内容,然后再继续本步。这不是描述性注释——未读取前不得执行依赖该文件的步骤;不同 harness 的文件读取工具名不同,按你环境的对应工具执行。
Python 解释器约定:本文档所有 python3 命令优先解析为 {baseDir}/.venv/bin/python3(若该文件存在),否则回退系统 python3。venv 由 install.sh 创建,用于隔离依赖并绕过 macOS Homebrew Python 的 PEP 668 限制。
Onboard 例外:Onboard 是交互式的(需要问用户问题),不受"全自动"约束。Onboard 完成后回到全自动管道。
辅助功能 / 非管道命令(按需加载):用户发出"选题→发布"主流程之外的命令——重新设置风格 / 学习我的修改 / 学习排版 / 导入范文·学习这篇文章 / 查看范文库 / 看看文章数据 / 主题画廊 / 小绿书 / 更新 / 检查一下·自检——时 → 读取: {baseDir}/references/commands.md,按其中「触发词 → 动作」表执行。
主管道(Step 1-8)
主管道是固定的 8 个 Step(下面逐节展开):
[1/8] 环境 + 配置 [2/8] 选题 [3/8] 框架 + 素材 [4/8] 写作
[5/8] SEO + 验证 [6/8] 视觉 AI [7/8] 排版 + 发布 [8/8] 收尾
进度追踪(按行为声明):若有 task 工具,为这 8 步建任务并逐步更新;否则每进入一步发一行 [N/8] 步骤名。两种方式都必须跑完 8 步。
Step 1: 环境 + 配置
1.1 环境检查(静默通过或引导修复):
# 优先用 venv 解释器(PEP 668 环境下依赖装在 .venv 里);后续所有 python3 调用同此规则
PY="{baseDir}/.venv/bin/python3"; [ -x "$PY" ] || PY="python3"
"$PY" -c "import markdown, bs4, cssutils, requests, yaml, pygments, PIL" 2>&1
| 检查项 | 通过 | 不通过 |
|---|---|---|
config.yaml 存在 |
静默 | 引导创建,或设 skip_publish = true |
| Python 依赖 | 静默 | 引导执行 bash {baseDir}/install.sh(自动建 .venv 装依赖,解决 macOS PEP 668 报错);若环境无此限制也可 pip install -r requirements.txt |
wechat.appid + secret |
静默 | 设 skip_publish = true |
image.api_key 或 image.providers 至少一项有效 |
静默 | 设 skip_image_gen = true |
references/exemplars/index.yaml |
静默 | 提示:"范文库为空。如果你有已发布的文章(markdown),可以说**'导入范文'**建立风格库,写出来的文章会更像你。没有也不影响使用。" |
1.2 版本检查(静默通过或提醒):
cd {baseDir} && git fetch origin main --quiet 2>/dev/null
比对本地 {baseDir}/VERSION 与远程 git show origin/main:VERSION:
- 相同 → 静默通过
- 不同 → 提示用户:"WeWrite 有新版本可用(当前 X → 最新 Y),说「更新」即可升级。"不阻断流程,继续 1.3
- git 不可用(无 .git 目录或 fetch 失败)→ 静默跳过
1.3 加载风格:
检查: {baseDir}/style.yaml
- 存在 → 提取
name、topics、tone、voice、blacklist、theme、cover_style、author、content_style - 不存在 →
读取: {baseDir}/references/onboard.md,完成后回到 Step 1
如果用户直接给了选题 → 跳到 Step 3(仍需框架选择和素材采集,不可跳过)。
Step 2: 选题
2.1 热点抓取:
python3 {baseDir}/scripts/fetch_hotspots.py --limit 30
降级:脚本报错 → web_search "今日热点 {topics第一个垂类}"
2.2 历史分析 + SEO:
读取: {baseDir}/history.yaml(不存在则跳过)
python3 {baseDir}/scripts/seo_keywords.py --json {关键词}
历史分析(有 stats 数据时):
- 统计哪种
framework的文章表现最好(阅读量/分享率)→ 推荐框架时加权 - 统计哪种
enhance_strategy的文章表现最好 → 增强策略选择时参考 - 近 7 天已写的关键词降分(去重)
降级:SEO 脚本报错 → LLM 判断;history 无 stats → 跳过效果分析,仅做去重
2.3 生成选题:
读取: {baseDir}/references/topic-selection.md
生成 10 个选题,其中:
- 7-8 个热点选题:基于 2.1 的热点,按 topic-selection.md 规则评分
- 2-3 个常青选题:不依赖热点,从用户的
topics领域生成长尾内容(教程/方法论/经验总结/工具推荐),标注为"常青"。适合 content_style 为干货型/测评型的用户
每个选题含标题、评分、点击率潜力、SEO 友好度、推荐框架。
- 自动模式 → 选最高分
- 交互模式 → 展示全部,等用户选
Step 3: 框架 + 素材
3.1 框架选择:
读取: {baseDir}/references/frameworks.md
7 套框架(痛点/故事/清单/对比/热点解读/纯观点/复盘),自动选推荐指数最高的。
3.2 素材采集 + 内容增强(合并执行,共用搜索结果):
读取: {baseDir}/references/content-enhance.md
根据 3.1 选定的框架类型,一次搜索同时完成素材采集和内容增强:
| 框架 | 搜索策略 | 从结果中提取 |
|---|---|---|
| 热点解读 / 纯观点 | "{关键词} site:mp.weixin.qq.com OR site:36kr.com" + "{关键词} 观点 OR 评论" |
真实素材(数据/引述)+ 已有文章的主流观点(供角度发现) |
| 痛点 / 清单 | "{关键词} 教程 OR 工具 OR 实操" + "{关键词} 数据 报告" |
真实素材 + 具体工具名/步骤/参数(供密度强化) |
| 故事 / 复盘 | "{人物/事件} 采访 OR 专访 OR 细节" + "{关键词} 数据 报告" |
真实素材 + 时间锚/数字锚/对话锚/感官锚(供细节锚定) |
| 对比 | "{方案A} vs {方案B} 评测 OR 体验" + "{方案A OR 方案B} 踩坑 OR 缺点 site:v2ex.com OR site:zhihu.com" |
真实素材 + 真实用户评价和踩坑信息(供真实体感) |
每次搜索 2 轮,从结果中同时提取:
- 素材:5-8 条真实素材(具名来源 + 具体数据/引述/案例)。禁止编造。
- 增强材料:按 content-enhance.md 对应策略的要求提取(角度/密度要点/细节/用户声音)。
两者并入框架大纲,一起传入 Step 4 写作。
降级:web_search 不可用 → 用 LLM 训练数据中可验证的公开信息。但需告知用户:"素材采集未能使用 web_search,建议在编辑锚点处多加入你自己的内容。"密度强化不依赖搜索,始终执行。
Step 4: 写作
读取: {baseDir}/references/writing-guide.md
读取: {baseDir}/playbook.md(如果存在,按 confidence 分级执行)
读取: {baseDir}/history.yaml(最近 3 篇的 dimensions + closing_type 字段)
读取: {baseDir}/references/exemplars/index.yaml(如果存在)
(writing-guide.md 是反 AI 写作底线规则,未读取前不得开始写作;它在 Step 4-5 期间保持驻留,Step 5.2 校验仍按其编号规则 1.1-3.2 检查,中途不要丢弃重读。)
4.1 维度随机化:
从以下维度池随机激活 2-3 个维度,让每篇文章的表达方式不同。如果 history.yaml 有最近 3 篇的 dimensions 字段,避免使用相同组合。
| 维度 | 选项 |
|---|---|
| 叙事视角 | 第一人称亲历 / 旁观者分析 / 对话体 / 自问自答 |
| 时间线 | 正序 / 倒叙 / 插叙 |
| 类比域 | 体育 / 做饭 / 军事 / 恋爱 / 游戏 / 电影 / 建筑 / 医学 |
| 情绪基调 | 克制冷静 / 热血激动 / 讽刺吐槽 / 温暖治愈 / 焦虑警示 |
| 节奏 | 短句密集 / 长叙述慢推 / 长短急切交替 / 慢开头快收尾 |
4.2 加载写作人格:
读取: {baseDir}/personas/{选定人格}.yaml
人格的选定规则(参见 {baseDir}/references/persona-selection.md):
- style.yaml 有
writing_persona→ 直接加载该人格。用户已固定账号声音,尊重配置(persona-selection 的「用户明确指定」优先级最高)。 - 没有
writing_persona(或用户本轮明确要求换风格)→ 读取references/persona-selection.md,按 Step 2.3 选定选题的特征匹配 top 2 人格;用 history.yaml 最近 3 篇的写作人格降权(保证风格多样化),向用户展示推荐理由让其二选一;匹配不明确时默认 midnight-friend。
人格文件定义了:语气浓度、数据呈现方式、情绪弧线、段落节奏、不确定性表达模板等。作为写作的硬性约束执行。
优先级:playbook.md(confidence ≥ 5 的规则)> persona > 范文风格 > writing-guide.md。writing-guide 是底线(基础写作规范),范文提供风格示范(句长节奏、情绪表达方式),persona 在此基础上特化风格参数(语气浓度、数据呈现),playbook 中高置信度规则是用户个性化的最终覆盖。playbook 中 confidence < 5 的规则作为软性参考。
4.3 范文风格注入(有 references/exemplars/index.yaml 时执行):
从 index.yaml 筛选 category 匹配当前框架类型的范文,取 top 3。读取对应 .md 文件的片段内容。
在写作 prompt 中注入:
以下是该公众号风格的真实段落示例,模仿其句长节奏、情绪强度和口语化程度:
【开头风格】 {exemplar_1 的开头钩子段}
【情绪段风格】 {exemplar_2 的情绪高峰段}
【转折风格】 {exemplar_2 或 exemplar_3 的转折/自纠段(如有)}
【收尾风格】 {exemplar_3 的收尾段}
Category 映射规则:
| 框架类型 | exemplar category |
|---|---|
| 痛点型 | tech-opinion |
| 故事型 / 复盘型 | story-emotional |
| 清单型 / 对比型 | list-practical |
| 热点解读型 / 纯观点型 | hot-take |
| 其他 | general |
如果匹配到的范文不足 3 篇,用 general category 补足。
Fallback(范文库为空时):读取 {baseDir}/references/exemplar-seeds.yaml,从每个段落类型中随机选 1 个注入 prompt。种子段落只示范人类写作的结构模式(句长方差、情绪锐度、自我纠正、非总结式收尾),不携带特定风格。注入时使用:
以下是人类写作的结构模式示例,注意模仿其句长节奏和情绪表达方式(不要模仿具体内容或风格):
【开头模式】{seeds.opening_hooks 随机 1 个}
【情绪段模式】{seeds.emotional_peaks 随机 1 个}
【转折模式】{seeds.transitions 随机 1 个}
【收尾模式】{seeds.closings 随机 1 个}
建库命令:python3 {baseDir}/scripts/extract_exemplar.py article.md
4.4 写文章:
- H1 标题(20-28 字) + H2 结构,1500-2500 字
- 素材 + 增强约束:Step 3.2 的素材和增强材料分散嵌入各 H2 段落。增强策略的核心输出(角度/密度要点/细节/用户声音)必须贯穿全文,不只装饰性出现一次
- 写作人格:按 4.2 加载的人格参数写作(数据呈现方式、个人声音浓度、不确定性表达等)
- 收尾方式:persona 的
closing_tendency仅作为倾向参考。根据文章内容和情绪弧线自行判断最自然的收尾方式。如果 history.yaml 中最近 3 篇有closing_type字段,避免使用相同的收尾类型 - 写作规范:writing-guide.md 中的基础规则(禁用词、句长方差、词汇混用等)在初稿阶段生效
- 分段实时自检:读取
{baseDir}/references/realtime-check.md,每写完约 500 字(或每个 H2)就地执行 5 项快速检查(句长交替 / 情绪锚定 / 词汇温度 / 素材锚定 / 句法变形),问题当场掐掉不累积到全文。按 500 字/H2 粒度查,不要写一句修一句;也不要为凑检查项刻意制造大量单句段落(会触发过度优化检测) - 2-3 个编辑锚点:
<!-- ✏️ 编辑建议:在这里加一句你自己的经历/看法 --> - 可选容器语法:
:::dialogue、:::timeline、:::callout、:::quote、:::highlight(琥珀高亮框)、:::summary(青色总结框)
保存到 {baseDir}/output/{date}-{slug}.md
4.5 快速自检(写完后立即执行,减少 Step 5 重写概率):
对初稿做 5 项快速扫描,当场修复,不留到 Step 5:
写作层面:
- 禁用词扫描:检查 writing-guide.md 2.1 的禁用词列表,命中的直接替换
- 句长方差:是否有连续 3 句以上长度接近的段落,有则拆句或加短句
内容层面: 3. 开头钩子:前 3 句是否制造了悬念/冲突/好奇心?如果是平铺直叙的背景介绍,重写开头 4. 增强贯穿:增强策略的核心输出是否只出现在一段?如果是,在其他 H2 中补充 5. 金句检查:全文是否有至少 1 句可独立截图转发的句子?如果没有,在情绪高点处补一句
LLM 自行完成,不需要调用脚本。
Step 5: SEO + 验证
读取: {baseDir}/references/seo-rules.md
5.1 SEO:3 个备选标题 + 摘要(≤40 字)+ 5 标签 + 关键词密度优化
5.2 质量验证(两个维度,每项逐一检查):
A. 写作质量(writing-guide.md 基础规则):
| 检查项 | 标准 | 规则 |
|---|---|---|
| 句长方差 | 最短与最长句相差 ≥ 30 字 | 1.1 |
| 词汇温度 | 任意 500 字 ≥ 3 种温度 | 1.2 |
| 段落节奏 | 无连续 2 个相近长度段落 | 1.3 |
| 情绪极性 | 负面情绪 ≥ 2 处,无平铺直叙 | 1.4 |
| 禁用词 | 命中数 = 0 | 2.1 |
| 真实锚定 | 每个 H2 ≥ 1 条真实素材,零编造 | 3.1 |
| 具体性 | 每 500 字 ≥ 2 处具体细节 | 3.2 |
B. 内容质量(基于 Step 3.2 的增强策略检查):
| 检查项 | 标准 | 适用框架 |
|---|---|---|
| 增强贯穿 | 增强策略的核心输出(角度/密度/细节/体感)在全文可见,不只出现在一段 | 所有 |
| 开头钩子 | 前 3 句能制造悬念、冲突或好奇心(不是背景铺垫) | 所有 |
| 金句密度 | 至少 1 处可独立截图转发的句子 | 所有 |
| 操作密度 | 每个 H2 有可操作要点(工具/步骤/参数) | 痛点/清单 |
| 角度锐度 | 核心观点能引发同意或反对,不是"两面都有道理" | 热点解读/纯观点 |
| 场景感 | 至少 2 处有时间/地点/对话等画面细节 | 故事/复盘 |
| 真实声音 | 至少 1 处引用真实用户评价或体验 | 对比 |
不通过 → 定向修复:只替换不达标的具体句子/段落,不动已通过的部分。每轮最多改 3 处,改完立即重新检查该项。2 轮仍不过 → 标注跳过,继续下一项。
5.3 脚本辅助验证(补充 5.2 的逐项检查):
Agent 在 5.2 检查过程中同步完成综合评估(各 H2 之间的语气差异度、信息密度的高低交替、段落间的节奏变化、整体阅读流畅度),产出 0-1 分数。
python3 {baseDir}/scripts/humanness_score.py {article_path} --json --tier3 {agent_tier3_score}
解读 JSON 中 composite_score(0=质量高, 100=问题多):
- < 30 → 通过,继续 Step 6
- 30-50 → 查看
param_scores中最低分的 1-2 项,只修复对应的具体句子(不重写整段),改完重新打分。1 轮即可 - > 50 → 取
param_scores最低的 2-3 项,逐项定向修复(每项只改最相关的 1-2 处),最多 2 轮。仍 > 50 则标记 DONE_WITH_CONCERNS 继续
Step 6: 视觉 AI
如果 skip_image_gen = true → 只执行 6.1。
读取: {baseDir}/references/visual-prompts.md
6.1 实体提取:从终稿中提取 3-5 个具体实体(人物、产品名、场景、数据点、行业术语)。后续所有提示词必须包含至少 2 个实体。
6.2 封面生成:生成封面 3 组创意提示词(按 visual-prompts.md),选最佳 1 组调用 image_gen.py 生成。
python3 {baseDir}/toolkit/image_gen.py --prompt "{选定的封面提示词}" --output {baseDir}/output/{slug}-cover.png --size cover
(--size 取值:封面用 cover,内文配图用 article;多 provider 自动 fallback 已内置。)
6.3 封面验证:
- 交互模式:展示封面,问用户"封面效果如何?"。用户 OK → 继续;不满意 → 调整提示词重新生成。
- 全自动模式:agent 自检——提示词中的实体是否在画面描述中可识别?如果提示词过于泛化(仅含"科技感""未来感"等抽象词,无具体实体),换一组提示词重试 1 次。
6.3b 风格锚定:封面确认后,提取视觉锚点(色板 hex、风格关键词、画面调性),后续所有内文配图的提示词必须引用这组锚点,保证全文视觉一致。
6.4 内文配图:分析文章结构,为每个需要配图的段落选择图片类型(infographic/scene/flowchart/comparison/framework/timeline),使用对应的结构化提示词模板生成 3-6 张配图提示词(按 visual-prompts.md)。批量调用 image_gen.py,替换 Markdown 占位符。
对每张需要的配图,逐一调用:
python3 {baseDir}/toolkit/image_gen.py --prompt "{该图的结构化提示词}" --output {baseDir}/output/{slug}-fig{N}.png --size article
生成后把对应 Markdown 图片占位符替换为实际路径。
降级:image_gen.py 支持多 provider 自动 fallback(按 config.yaml 中 providers 列表顺序尝试)。全部失败 → 输出提示词 + 备选图库关键词,继续。
Step 7: 排版 + 发布
7.1 Metadata 预检(发布前必须通过):
| 检查项 | 标准 | 不通过时 |
|---|---|---|
| H1 标题 | 存在且 5-64 字节 | 自动修正或提示用户 |
| 摘要 | 存在且 ≤ 120 UTF-8 字节 | converter 自动生成 |
| 封面图 | 推送模式下需要 | 无封面则警告,仍可推送(微信会显示默认封面) |
| 正文字数 | ≥ 200 字 | 警告"内容过短,微信可能不收录" |
| 图片数量 | ≤ 10 张 | 超出则移除末尾多余图片 |
预检全部通过后才进入排版。
平台硬限(converter 不强制,写作/发布时 agent 必须遵守):
- 单篇正文 ≤ 20000 字
- 图片 ≤ 10 张(超出移除末尾多余)
- 未认证公众号不能用外部链接 → 转纯文本或放「阅读原文」
- 表格 ≤ 4 列(手机端更宽会被截断)
7.2 排版 + 发布:
如果 skip_publish = true → 直接走 preview。
Converter 自动处理:CJK 加空格、加粗标点外移、列表转 section、外链转脚注、暗黑模式、容器语法、AIGC 声明(impeccable 主题自动追加)、CSS 随机扰动(反低创检测指纹)。
# 发布
python3 {baseDir}/toolkit/cli.py publish {markdown} --cover {cover} --theme {theme} --title "{title}" --digest "{digest}"
# 降级:本地预览
python3 {baseDir}/toolkit/cli.py preview {markdown} --theme {theme} --no-open -o {output}.html
Step 8: 收尾
8.1 写入历史(推送成功或降级都要写,文件不存在则创建):
# → {baseDir}/history.yaml
- date: "{日期}"
title: "{标题}"
topic_source: "热点抓取" # 或 "用户指定"
topic_keywords: ["{词1}", "{词2}"]
output_file: "{output 文件路径}" # e.g. output/2026-03-31-zhangxue-slow-accumulation.md
framework: "{框架}"
enhance_strategy: "{增强策略}" # angle_discovery/density_boost/detail_anchoring/real_feel
word_count: {字数}
media_id: "{id}" # 降级时 null
writing_persona: "{人格名}"
dimensions:
- "{维度}: {选项}"
closing_type: "{收尾类型}" # trailing_off/unanswered/scene_revert/abrupt_stop/anti_conclusion/image
composite_score: {Step 5.3 的 composite_score} # 0=质量高, 100=问题多
writing_config_snapshot: # 本次使用的关键参数(从 writing-config.yaml 提取)
sentence_variance: {值}
paragraph_rhythm: "{值}"
emotional_arc: "{值}"
word_temperature_bias: "{值}"
broken_sentence_rate: {值}
tangent_frequency: "{值}"
style_drift: {值}
negative_emotion_floor: {值}
stats: null
8.2 回复用户:
- 最终标题 + 2 备选 + 摘要 + 5 标签 + media_id
- 编辑建议:"文章有 2-3 个编辑锚点,建议加入你自己的话。你可以在本地 markdown 里改,也可以直接在微信草稿箱改——改完后说**'学习我的修改'**,WeWrite 都能学到你的风格。"
8.3 后续操作:
| 用户说 | 动作 |
|---|---|
| 润色/缩写/扩写/换语气 | 编辑文章 |
| 封面换暖色调等 | 重新生图 |
| 用框架 B 重写 | 回到 Step 4 |
| 换一个选题 | 回到 Step 2.3 |
| 换成 XX 主题 | 重新渲染 |
其余非管道命令(学习我的修改 / 学习排版 / 导入范文 / 查看范文库 / 看看文章数据 / 主题画廊 / 小绿书 / 检查一下)→ 读取: {baseDir}/references/commands.md。
错误处理
| 步骤 | 降级 |
|---|---|
| 环境检查 | 逐项引导,设降级标记 |
| 热点抓取 | web_search 替代 |
| 选题为空 | 请用户手动给选题 |
| SEO 脚本 | LLM 判断 |
| 素材采集(web_search) | LLM 训练数据中可验证的公开信息 |
| 维度随机化 | history 空时跳过去重 |
| Persona 文件不存在 | 回退到 midnight-friend(默认) |
| 范文库为空 | Fallback 到 exemplar-seeds.yaml(通用模式) |
| 去 AI 验证 | 2 轮定向修复不过则跳过该项 |
| 生图失败 | 输出提示词 |
| 推送失败 | 本地 HTML |
| 历史写入 | 警告不阻断 |
| 效果数据 | 告知等 24h |
| Playbook 不存在 | 用 writing-guide.md |
先判断是否适合
作者设计意图
作者的方法与取舍
边界和复核