公众号文章写作主干 · dby-write
🔀 「写篇文章 / 写个初稿」= 写一篇(模式 A);「为什么没人看 / 复盘」= 复盘一篇(模式 B)。 ⚠️ 已写好的文案要改平台风格 →
dby-rewrite;已写好的正文只要排版 / 存草稿 →dby-publish。
🔴 四条红线(任何终态下都不许跳过)
红线一:写进正文的每一样具体东西,都要能指出来源
细节、案例、数字、品牌与产品事实、以及第一人称场景 —— 每一样都必须能指回素材单里的一条
(第 4 步收的)。指不回的,留 【待补:…—— 请给一个真值】 式显式占位并告诉用户要补什么,绝不填一个看起来合理的值。
⚠️ 不误伤:细节都能指回素材单的场景不拦 —— 判的是能不能核对。
成稿末尾附「素材出处」列表给用户。
→ 「场景最容易漏」的判据、占位样式与两类实证见 references/materials.md。
红线二:标题没定,不往下走
出候选 → 用户选定 → 才继续。用户没选就停在这儿等,不许自己挑一个继续写。
红线三:标题必须与正文匹配
标题承诺了什么,正文就得兑现什么。标题写「5 个方法」正文只有 3 个 → 自检不通过,改一侧再交付。
红线四:成稿必须先给用户过目
用户没看过正文之前,绝不进入写进他公众号后台的那一步—— 哪怕他一开始就说了「写完直接推草稿箱」。
模式 A:写一篇(九步主干)
九步一口气走完,别逐步征求同意。 只停两处:第 3 步让用户选标题、第 9 步后问终态。
取数优先 dby write prep|topics|review(CLI ≥0.1:npm i -g @doubaoya/cli,没装用 npx -y @doubaoya/cli 兜底;非 TTY 输出 {ok,data,error} JSON,warnings 走 stderr,no_account/no_articles 退出码 3)。articles / material 子命令、或没装 CLI 时,用旧 write.mjs;绕开两者自己拼请求才读 dby-gateway/references/protocol.md。
第 1 步 · 读档案 + 拉写作规范(必须早于任何生成动作)
W=~/.claude/skills/dby-write/scripts/write.mjs # 按实际安装位置改;cwd 是用户项目目录,不是本包
node "$W" prep # 五样一次拉齐;--json 另带章程全文与 samples[].content
五样:号章程、创作 DNA、范文样本(真实细节的合法来源)、写作规范(平台硬约束)、素材卡索引。 失败脚本已降级处理:401 直接红、档案为空直接拦下、规范拉不到照常往下走、范文少于 3 篇提醒。
🔴 规范里硬约束那一节不是建议,动笔前进上下文;第 5、6、9 步都照它走。
→ 要封面卡 / 导语这类「家具」或五样没拉齐时读 references/writing-spec.md,不需要就别读。
第 2 步 · 确定选题
🔴 用户已经说了写什么 → 直接用,不要再问,也不要再调接口。
没说时才取候选:node "$W" topics [赛道](不传赛道用档案里的)。
候选要过两道筛(号章程 / 有用性)—— 判据读 references/topic.md。
第 3 步 · 定目标,再定标题(🔴 唯一的中途停顿点)
先写一行「本篇:目标(涨粉 / 变现 / 常青)/ 素材形态 / 读者意识阶段(无意识 → 问题 → 方案 → 产品 → 最高)/ 人称语气」,阶段决定标题答哪个问题;细则与变现文的 offer 表读 references/goals.md。
素材形态 = 手里已有什么(不是"算哪一类"):带转折的真实经历 / 被访者原话 → A 组,其余(可复现步骤 / 并列多项 / 可核实的具体事件 / 待解释的现象或机制)→ B 组。→ 判别读 references/goals.md。
出 5 个候选,各过五项自检,停下来让用户选一个(也可自己给)。群发后标题只能改 3 个字。
| 检查项 | 通过标准 |
|---|---|
| 完整陈述句 | 单独发给不知情的人,他能复述文章讲什么;15–28 字(汉字计数,一个英文词算 1 字,与后台「标题 64 汉字」同口径),核心词在前 15 字 |
| 缺口 | 看本篇目标:涨粉 / 变现 → 好奇缺口 / 颠覆认知 二选一,正文必须兑现;常青 → 不强制,平实陈述句照过 |
| 具体 | 含具体数字优先;禁「让你哭 / 只有 X 才懂 / 测一测」式短语 |
| 受众匹配 | 目标读者一眼认出「这是写给我的」(人群词进标题)——常青也要过 |
| 搜索适配 | 含读者真会去搜的关键词——常青尤其要过(它靠搜索吃长尾) |
🔴 常青放宽的是「制造缺口」这个手段,不是「让人愿意点」这个目标——老实标题仍要过「完整陈述句」与「受众匹配」。
→ 标题写法清单与常青范例见 references/title.md。
第 4 步 · 收素材
按下表从上往下取,够写就停;每条素材进素材单(编号 / 原句或数字 / 出处),没进单的不许进正文。
A 组必须收到第一人称真实经历细节(时间 / 地点 / 数字),纯观点拼接不被推荐。 B 组不因缺经历被阻断 —— 它缺的是"内容不够",标注或缩范围即可。
| 层 | 来源 | 何时用 |
|---|---|---|
| 1 | 用户当轮给的 | 有就先用 |
| 2 | 号档案 + 范文 | 总是(第 1 步已拉到,不再取) |
| 3 | 自己往期文章 | 写过相近题 |
| 4 | 素材库(prep 已带索引) | A 组缺锚点先查这里 |
| 5 | 用户知识库(ima / $DBY_WIKI_DIR) | 配了才用,没配跳过不问(A 组例外) |
| 6 | 平台取数 | 用户点名或前五层不够 —— 🔴 这一层计费 |
| 7 | 联网查证 | 只核实前面拿到的事实,不引入新数据 |
→ 各层取法与素材单格式读 references/materials.md。
🔴 A 组七层取完仍拿不到锚点 → 停下,不许开始写正文。 处置阶梯读 references/materials.md 的「锚点收不到时」。
第 5 步 · 列提纲
🔴 先读 references/genre/<你声明的素材形态>.md(名字逐字照抄);没读不列提纲。
收完素材发现与声明不符 → 改声明、换读那份,别将错就错。
第一行写一句话中心(读者带走的那一个想法),指不回它的块删掉。
每块标注用素材单里的哪几条(编号)—— 指不上的回第 4 步补,或按红线一留占位。
→ 结构与小标题读 references/craft.md(选一种,别混着来)。
第 6 步 · 写正文
按「块」写,一个一级小标题算一块。 顺序:先导语 → 再正文 → 最后结尾。开头 150 字内兑现标题。
→ 开头/结尾/句子级规则见 references/craft.md。
内容不够时不要扩写,去写细节——细节只从素材单取(红线一)。
🔴 硬约束边写边守,以第 1 步规范为准,别照记忆里的旧清单写。
🔴 口吻按这个号自己的声音写,不是默认 AI 腔。prep 输出里的两样,动笔前就要用上:
voiceSystemPrompt(整段当写作设定)、taboos(一条都不准违反,写完逐条扫)。
两样为空照常写,交付时说明是通用口吻(去 dby-charter 蒸一份);别因此停下来问。
结尾的行动号召从档案里取(productsJson[].ctaScript;没有就按红线一留占位,绝不自己编一个背书)——取法见 references/craft.md。
第 7 步 · 重写
🔴 初稿不直接交。 四步减法(口述摘要重写 / 朗读标打结处 / 先大后小删 / 不确定为真的删掉重来)读 references/craft.md。
第 8 步 · 写摘要与留言
摘要按「备用标题」写(别写成正文缩写)。
留言(作者给自己文章的第一条留言)是可选的——不写不影响交付,别记成未完成项;用户要写、或确实有值得先起个头的话题时才写。
→ 两者怎么写见 references/craft.md。
第 9 步 · 成稿自检
五件事,一件都不能少:
- 违禁词与极限词 → 走
dby-banned-words,标题 + 摘要 + 正文一起查,只查公众号一个平台;任何终态都要跑。→ 命令行见references/api-contract.md。 - 广告标识:正文带购买方式(链接 / 二维码 / 店名)就必须文首标「广告」,没标不交付;诱导关注句删。→ 法条与适用范围读
references/practice.md。 - 标题与正文匹配(红线三):对照第 5 步那句一句话中心。
- 事实来源核对(红线一):每个细节 / 案例 / 数字 / 品牌事实 / 第一人称场景逐个指回素材单编号,指不回的改占位。
- 平台硬约束逐条对:按第 1 步规范的「硬约束」小节过一遍;没拉到时如实说「这次没按硬约束核」,别假装核过了。
自检过了 → 把成稿交给用户看(红线四),只问「哪里看不懂 / 哪里拖」,然后问终态。 A 组且用户这轮口述了新经历 → 展示拟存卡面提议存进素材库:确认才写、一次即止、连拒两次不再提。
交棒:问终态
成稿之后必须问,不许推断:
这篇你想要到哪一步? ① 就要这份成稿,我自己发 ② 要排版好的公众号 HTML ③ 存进我自己的公众号草稿箱
① 到此为止。②③ 走 dby-publish —— 命令行、各自的绑号条件、先落盘 .md、回执四行 → references/api-contract.md。
模式 B:复盘一篇
→ 复盘时读 references/review-mode.md(write.mjs review 归四象限,只给一处修复动作)。
🔴 三条不许简化掉:写明用的是哪一档指标(代理档绝不能说成「打开率 × 分享率」)、基准只能是这个号自己的历史中位数、样本少于 5 篇要把「仅供参考」带给用户。
→ 用户想练写作、问「怎么提高」时读 references/practice.md。
API 契约
契约表见 references/api-contract.md。档案的写入不在本包,走 dby-charter。
下一步
成稿要 HTML / 进草稿箱 → dby-publish;要发别的平台 → dby-rewrite(七平台调性,免费);不确定 → dby(公众号飞轮总导航)。
- v1.10.22026-08-27docs(skills): dby-api/dby-write/dby-charter 改为优先走 dby CLI,旧 scripts/ 过渡兜底
- v1.10.12026-08-26fix(dby-write): 交棒说明的终态纪律改成本地一句话,不再引用他包的路由判据文件
- v1.7.02026-08-25feat(dby-write)!: 写作规则跟着「本篇目标 + 手里的素材」走,不再是一套无条件的增长公式
- v1.9.02026-08-25feat(dby-write): 素材库接线 —— 用户讲过的真事沉淀成蒸馏卡,缺锚点先查库再问人
- v1.8.02026-08-25feat(dby-write): 六份体裁手艺文件,素材形态即路由 —— 声明什么形态,列提纲前读哪一份
- v1.9.12026-08-25chore(skills): 11 个 SKILL.md 加 changelog 字段,patch 递增;盖戳生成 index.json 与四份兼容视图
- v1.10.02026-08-25refactor(dby-write): SKILL.md 236 → 197 行 —— 红线细则 / 标题判据 / 交棒节下沉 references
- v1.3.12026-08-24refactor(dby): 11 个 SKILL.md 按写作手艺去废话——删解释/元叙述/历史叙事/跨包重复红线,两处 description 去流程复述
- v1.2.02026-08-24feat(dby-publish,dby-write): 加 --render-only —— 只想看排版效果不必先绑公众号
- v1.1.02026-08-24fix(dby-write): 复盘基准改中位数 —— 一篇爆款不该把这个号其余文章全判成选题错误
- v1.3.02026-08-24refactor(dby): 11 个 SKILL.md 主体压到 ≤6000 字符——冷门分支下沉 references/,协议改引用不再内联;违禁词入口统一指 dby-banned-words
- v1.4.02026-08-24fix(dby): 20 场景模拟测试后的路由与文档修正
- v1.5.02026-08-24feat(dby-write): 补「第 4 步 · 收素材」——六层素材阶梯与带出处的素材单
- v1.3.12026-08-24fix(dby-scripts): 外部 agent 模拟测试暴露的四处脚本缺口
- v1.6.02026-08-24feat(dby-write): 顶级写作思维 A 级规则编进九步主干
- v1.4.12026-08-24refactor(dby): 逐包领域调研后的规则更正与触发词补齐
- v1.0.02026-08-23feat(dby-write): 口吻基准与禁用词接进写作路径——它们此前一次都没被读过
- —2026-08-22feat(dby-write): 新增 scripts/write.mjs,把取数与复盘算术做进代码
- v1.0.02026-08-22feat(skills): 11 个包补齐语义版本,并用哈希逼它说实话
- —2026-08-21feat(dby-write): 写作规范接进写作流程,不再靠人转达
- —2026-08-20feat(skills): 新增 dby-write —— 给「写一篇公众号文章」这一跳建 owner
文件内容在 GitHub 查看。
- SKILL.md11.6 KB
- evals/triggers.jsonl1.0 KB
- references/api-contract.md2.4 KB
- references/craft.md6.5 KB
- references/genre/可复现步骤.md3.4 KB
- references/genre/可核实的具体事件.md3.9 KB
- references/genre/带转折的真实经历.md4.1 KB
- references/genre/并列多项.md3.2 KB
- references/genre/待解释的现象或机制.md3.6 KB
- references/genre/被访者原话.md4.8 KB
- references/goals.md5.5 KB
- references/hot-samples.md0.6 KB
- references/materials.md10.3 KB
- references/practice.md2.5 KB
- references/review-mode.md6.0 KB
- references/title.md1.1 KB
- references/topic.md1.2 KB
- references/writing-spec.md2.6 KB
- scripts/write.mjs37.6 KB