状态:1.0(作者逐项确认,2026-06-12 定稿) 日期:2026-06-12 读者:①开发实施者(含 AI);②issue 区用户(RFC 母本,裁剪时换大白话) 地位:本 PRD 是 v7 的产品法律文本。spec 0.5 的"冻结"已解除——本 PRD 先行,
story-repo-spec与multi-agent-adaptation-spec随本文档修订(修订指令见 §10)。 上游:story-repo-spec 0.5、multi-agent-adaptation-spec v3.1、v7-design-discussion-notes、v6 issue 区(#58–#113) 决策过程:.trellis/tasks/06-11-v7-prd-webnovel-writer/prd.md(20 条 ADR)
为中文网文作者做一个开箱即用、全程中文、200 万字不崩的 AI 长篇创作系统:一本书是一个 git 仓库,AI 负责写和审,脚本负责数和记,作者只做三件事——确认细纲、审稿、拍创作决策。
v6 的病根(issue 与代码互证):
| 病根 | 证据 |
|---|---|
| 用 prompt 驱动确定性状态机,模型不遵守 | #91、#66、#87/#76;385 行写章流程规范 |
| 派生状态(SQLite/投影)与作者手改冲突,无解 | #100、#77、#63、#67、#70、#71、#89 |
| Token/时间消耗失控(每章 3 subagent + 4 份 JSON + 多道 gate) | #58、#92、#106 |
| 安装门槛高(Python 依赖 + .env + RAG key) | #90、#103、#69 |
| 禁词表治不了 AI 味 | #94 |
| 连写缺失/质量漂移 | #79、#95、#74 |
核心教训:v6 信任流程、不信任模型和作者;v7 信任 markdown 和作者,把流程压到最薄。
/migrate 一次性迁移。用户是中文网文作者,非工程师,Windows 为主力环境,目标体量 200 万字。三条旅程全部支持,主旅程是新书作者——它是产品定义本身;迁移作者第二;连写党是日常写作的一种模式而非独立门面。
① 安装 npx webnovel-writer init
(检测 Node ≥22 与已装的 AI 工具,生成工作目录;缺 Node 时人话提示升级)
② 建书 打开 AI 工具说"开始写书"→ 引导式问答生成 book.yaml、总纲、第一卷卷纲
③ 写第一章 确认细纲(AI 拟,作者点头或改)→ AI 写稿 → 机检 → 三审 → 审稿 → 定稿
④ 日常 每次打开,AI 先报全书近况(写到哪、哪些伏笔悬了太久、连续几章钩子弱)
→ 继续写下一章,或说"改第 N 章""把这条感情线收了"
⑤ 卷末 卷复盘:伏笔清账、卷摘要、与作者对谈定下卷卷纲、伏笔机会扫描
⑥ 发布 一键导出干净正文(单章/范围/全书,去 front matter),贴到起点/番茄
体验底线:全程看不到 git、看不到报错堆栈、看不到英文术语;目录里只有 定稿/大纲/文风/工作区 四个中文文件夹。
① 引导 市场版插件页面与 README 指引:v7 换了安装方式 → 卸载市场版 → npx 安装
② 迁移 在工作目录说"迁移我的书"→ /migrate 一次性脚本(映射表见 §10.3)
③ 校对 迁移报告人话列出:迁了什么、哪些条目标了"迁移待校对"、建议先看哪
④ 继续写作 进入主旅程 ④
体验底线:迁移不丢任何一个字;v6 的伏笔/剧情线/追读账本全部有去处;失败可整体回退。
① 前提 当前卷卷纲已确认(自动模式的控制边界——全自动 ≠ 无控制,是控制上移到大纲层)
② 开关 自动确认细纲 + 连写批次大小(默认与体检周期一致 8 章;开关中文名 spec 定稿时敲定)
③ 挂机 连写一个批次:草稿与预入账数据攒在工作区,**不定稿**;
写后续章的材料从"定稿 + 待定稿批次"叠加组装(脚本提供)
④ 停止 批次写满 / 体检不过线 / 卷纲耗尽(绝不让模型裸奔编纲)
+ 连续 3 章(可配)无账本变动也停
⑤ 批量审稿 作者过一遍攒下的审稿单:整批接受 / 改某几章 / 从某章起打回重写
(批内错误未定稿,直接改,影响最多波及一个批次)
⑥ 批量定稿 作者敲定后逐章按序定稿(原子性按章保留)→ 继续下一批次
整批不要 → "回到第 N 章"(git 回滚的人话包装)
已发布后才发现错误 → 影响分析 → 顺势圆(向后兼容;已发布不可改是铁律)
定稿永远需要作者敲定——系统没有任何不经作者确认就写入定稿区的路径(宪法级)。自动模式与手动模式的差异只是确认粒度:逐章 vs 按批次。
工作目录/ ← AI 工具在这里启动;本身不是 git 仓库
├── AGENTS.md # 公约数层:没装插件的 AI 也能看懂这里是什么、入口在哪
├── .claude/ .codex/ … # 各平台壳(按检测到的环境生成)
├── .webnovel/ # 插件本体:Node 脚本、角色定义、版本与模板哈希清单
│ └── books.jsonl # ★ 书目录登记:每行一本书(书名/目录/是否当前在写/最后打开)
├── 我的第一本书/ # 书仓库(独立 git 仓库)
└── 我的第二本书/ # 多本书共用一套安装
npx webnovel-writer init / update)。Claude Code 插件市场渠道放弃,市场版停在 v6 并指引新装法。update 用模板哈希追踪:用户没改过的文件直接更新,改过的提示(Trellis 模式)。.webnovel/books.jsonl,机器域,每行一本书:书名/目录/是否当前在写/最后打开):
.claude/、.codex/ 都住工作目录),在书目录里启动插件根本不会加载。当前书一律由登记文件决定。脚本启动时校验当前目录含 .webnovel/,不是工作目录 → 人话提示"请从工作目录启动"。node:sqlite 实现缓存,零依赖承诺保住);无 Python、无 pip、无 .env。<书名>/
├── .git/ .gitignore book.yaml
├── AGENTS.md # ★ 指路文件(建书时自动生成):误在书目录启动 AI 工具 /
│ # 单独 clone 时,指引回工作目录或 npx 重建
├── 定稿/ # ── 审稿通过后的一切,只进不改 ──
│ ├── 正文/0152-北境的雪.md # 正文 + 章信息 front matter(自包含档案)
│ ├── 设定/
│ │ ├── 角色/林晚.md
│ │ ├── 信息差/信息差-021-灭门真凶.md
│ │ ├── 世界观.md
│ │ ├── 时间线/第05卷.md # ★ 按卷拆分(原单文件)
│ │ └── 名册.md
│ └── 摘要/ # ★ 原「记忆/」
│ ├── 章摘要/0152.md
│ └── 卷摘要/第05卷.md
├── 大纲/ # ── 作者意图,随时可改 ──
│ ├── 总纲.md
│ ├── 卷纲/第05卷.md # 主线支线的推进写在这里,不另记账
│ ├── 伏笔/伏笔-031-灭门真凶.md # ★ 账本三类(原「承诺/」大一统拆分)
│ ├── 悬念/悬念-008-神秘老者身份.md
│ └── 感情线/感情线-012-林晚主线.md
├── 文风/
│ ├── 文风铁律.md # ★ 原「风格宪法.md」;含反和解标准段
│ └── 金句库/战斗.md …
├── 工作区/ # ── 没定稿的一切,默认不进 git ──
│ ├── 细纲.md # ★ 原「决策卡.md」:全书近况+本章提案+要写到的事+备选
│ ├── 本章写作材料.md # ★ 原「上下文包.md」
│ ├── 草稿-A.md
│ ├── 审稿.md # ★ 原「验收卡」
│ ├── 评审报告/
│ └── 导出/ # ★ 新增:干净正文导出落点(不进 git)
└── .cache/index.db # 唯一派生物,删了能全量重建(CI 验收项)
书仓库里零工程文件——作者打开文件夹只看到书。唯一显式例外是指路 AGENTS.md:误在书目录启动 AI 工具或单独 clone 时,它是唯一会被 AI 自动读到的求生通道。
有"开启→推进→收尾"生命周期的才进账本;引擎一套共用(每条一个文件、平铺 front matter、履历、"悬了太久"预警、定稿时入账;机器内部状态同构 open/advance/resolve/drop):
| 类型 | 编号 | 生命周期动词 | "悬了太久"默认阈值 |
|---|---|---|---|
| 伏笔 | 伏笔-031 | 埋下 → 推进 → 回收 / 放弃 | 紧(10 章量级) |
| 悬念 | 悬念-008 | 设下 → 推进 → 揭晓 / 放弃 | 紧(10 章量级) |
| 感情线 | 感情线-012 | 开启 → 推进 → 修成正果 / 无疾而终 | 宽(30 章量级) |
条目编号一律用全称(伏笔-031,不是 伏-031 或 P-031)——作者天天要念的编号必须是人话,不过度压缩;信息差同理(信息差-021)。
不进账本的(各归各位):
账本态度:"悬了太久"是提醒不是错误,有些伏笔收不了可以接受——系统不逼作者填所有坑。
注:「账本」是开发侧词汇,仅用于本文档与 spec 内部指代这套机制;作者界面只出现 伏笔/悬念/感情线 三个具体名字,不出现"账本"二字。
| # | 阶段 | 执行体 | 说明 |
|---|---|---|---|
| 1 | 起草细纲 | 脚本读全书近况 + AI 拟 | 生成 工作区/细纲.md;细纲声明本章定位(推进/过渡/日常)——过渡章合法,消除模型撒谎动机(替代 0.5 的"每章必须动一条承诺"硬门检与豁免机制) |
| 2 | 确认细纲 | 作者 | 点头 / 改 / 选备选;自动模式可跳过 |
| 3 | 备料 | 脚本 | 组装 工作区/本章写作材料.md:全书近况+要写到的事+事实切片+信息差边界+近章结尾+反复读清单+文风锚点+反和解规则;默认用精准片段(当前卷+上一卷时间线、按编号取账本条目) |
| 4 | 写稿 | AI(干净上下文) | 工作区/草稿-*.md;关键章 best-of-N |
| 5 | 机检 | 脚本,零 token | 只做可计数项:字数、禁词/禁句式、复读、高频意象统计、句式体检(句长方差/段落分布/高频开头)、新专名比对名册、front matter 格式、账本文件是否变动(只查形式)、信息差关键词命中(只出候选清单,不拦截)。不过关打回第 4 步,不打扰作者 |
| 6 | 三审 | AI ×3(各自新鲜上下文) | 读者审(爽不爽/哪段想划走,用追读力知识库的标准)、编辑审(结构与商业性)、设定校对(语义判断在这里:①"本章要写到的事"逐条核对正文写没写到;②机检的泄密候选是不是真泄密;③账本履历引用的章内证据是否属实) |
| 7 | 审稿 | 作者 | 工作区/审稿.md = 草稿 + 三句话审意见 + 待确认新人名 + 章摘要(扫一眼可改)。动作:接受 / 改完接受 / 打回。手动模式逐章审;自动模式按批次审(§2.3)。定稿永远需要作者敲定,没有"自动定稿" |
| 8 | 定稿 | 脚本,原子 | 一次 git commit:正文进定稿、设定/时间线/名册更新、账本各条目写入履历、章摘要存入 定稿/摘要/、工作区清空。要么完成要么原样保留,没有中间态 |
写评分离:写稿与三审必须在不同上下文中进行;机检先于 AI 审。
系统启动按序判定,命中即停。第 0 步之前加 git 健康检查:半提交/冲突/锁文件/.git 损坏/网盘冲突副本("xxx (1).md"),每种配自动修复或人话指引——作者永远不直面 git 报错。
| 序 | 条件 | 下一步 |
|---|---|---|
| 0 | 任一源文件解析失败 | 修复确认(原"修复卡"):定位到行、AI 提议保留意图的修复、作者确认;全角标点结构性错误直接预修复只报不问。永不带堆栈崩溃 |
| 1 | 定稿/大纲有未入账手改 | 提议补登(系统适应作者,不报错) |
| 2 | 工作区有未完成流程 | 从中断的阶段继续 |
| 3 | 刚定稿的章是卷末章 | 卷复盘 |
| 4 | 章号到达体检周期 | 体检 |
| 5 | 其余 | 起草新章细纲 |
v6 的 8 个命令全部内化为以上状态;作者只需要一个入口和"继续"。
每类数据文件的 spec 定义都附带"定位读取"脚本接口,例如:
.cache/index.db 的表设计必须支撑这些查询;写作材料组装默认用精准片段。
| # | 问题 | 解法 | 版本 | 验收方式 |
|---|---|---|---|---|
| 1 | 客观事实吃书(修为/资产/物品) | 角色卡结构化字段增量记账,定稿时脚本更新 | 7.0 | 改 100 章前的设定,影响分析能列全受影响章 |
| 2 | 时间线混乱 | 每章强制时间锚点;时间线按卷拆分,append-only | 7.0 | 从第 1 章起强制;体检报告时间线孤儿为零 |
| 3 | 信息差泄密 | 登记表(每条一文件:知情人/读者已知/关键词)+ 机检出候选 + 设定校对判真伪;写作材料注入出场人物知识边界 | 7.0 | 构造泄密样章,三审能逮住;误报不拦截流程 |
| 4 | 人设语气漂移 | 角色卡存典型对话原文 few-shot + 周期语气体检 + 遮名盲测 | 7.x(体检后置) | 盲测准确率报告 |
| 5 | 摘要信息损耗 | 分层摘要(章≤200字/卷≤500字/全书骨架按需拼接、不落盘)+ Grep 正文管细节 + 账本即"人工标注的未来相关性" | 7.0 | 写第 0153 章时,写作材料能召回第 12 章埋下、第 152 章推进的伏笔 |
| 6 | 大纲漂移 | 偏离是决策点不是 bug:细纲阶段给"拉回/改纲/进灵感池"三选 | 7.0 | 细纲模板含偏离报告段 |
| 7 | 改稿三档 | 未发布:直接改+自动重入账;已发布:只读,生成"顺势圆"方案;设定/大纲:影响分析出已发布/未发布两清单 | 7.0 | 三档各有端到端用例 |
| 8 | AI 和解倾向毒害爽文 | 反和解规则入文风铁律标准段,随写作材料前置注入,按题材配浓度 | 7.0 | 题材模板含反和解预设;样章对比可感 |
| 9 | 桥段循环 | 高频意象统计(零 token 脚本,7.0)+ 桥段使用史"冷却中"清单(7.x) | 7.0/7.x | "空气仿佛凝固"全书 47 次这类能被机检报出 |
| 10 | 情绪节奏失控 | 每章情绪定位入 front matter(7.0)+ 波形体检与平台预设周期(7.x) | 7.0/7.x | 体检报告含情绪波形图 |
| 11 | AI 味 | 分布问题分层打:禁词表(第一层)+ 句式体检脚本(7.0)+ 文风锚定 few-shot(7.x)。诚实边界:承诺"读者不出戏",不承诺过 AI 检测器 | 7.0/7.x | 句式体检指标进体检报告 |
| 12 | 对话同质化 | 口癖卡 + 遮名盲测 | 7.x | 盲测用例 |
| 13 | 诚实边界 | README/RFC 明示承诺口径;合规/敏感词不进 v1 | 全程 | 文档口径一致 |
| 14 | 控制点滑杆 | 确认细纲/审稿两个开关;全关=逐章交互,全开=自动模式;一套实现 | 7.0 | 开关组合矩阵全测 |
| 15 | 连写质量漂移 | 按批次定稿(错误最多污染一个批次,且未定稿可直接改)+ 体检与批次对齐(默认 8 章)+ 停止条件(写满/体检不过线/卷纲耗尽/连续 3 章无账本变动)+ 已发布错误走顺势圆 | 7.0 | 自动模式端到端 + 注入错误的恢复演练 |
| 16 | 真源唯一 | 正文+摘要 markdown 即全部状态;.cache 删了全量重建 |
7.0 | 重建 CI(重建器即格式的参考实现) |
| 维度 | 要求 |
|---|---|
| 运行时 | Node ≥ 22,零第三方依赖(node:sqlite);安装器检测版本并人话提示 |
| 平台 | Windows 中文环境一等公民:全链路 UTF-8 无 BOM、core.quotepath false、CI 含 Windows 中文路径全链路测试(建库→写章→定稿→重建缓存) |
| Token 成本 | 机检零 token;精准读取默认片段化;分层摘要控制长程上下文;每章 AI 调用次数有预算上限(实现时定数) |
| 健壮性 | 永不带堆栈崩溃(修复确认兜底);定稿原子性;git 健康检查;容错读取(未知字段保留原样写回) |
| 可诊断性 | 强制项目级安装,目录结构全网统一;issue 里贴目录清单即可定位 |
| 防呆 | 系统写出的 YAML 一律平铺、块列表、危险值加引号;多条记录每条一文件 |
| 多宿主 | 格式层平台无关;SKILL.md 开放标准零适配;角色单源生成三平台壳 + drift check;降级诚实(不允许声称调用了不存在的能力);hook 语义 ask 不 deny |
| 许可证 | MIT/Apache-2.0(v7 从零写) |
切线原则:已设计完且实现成本低的进 7.0;需要新设计或调参的体检类全部 7.x。
/migrate、干净导出、AGENTS.md| 阶段 | 过线标准 |
|---|---|
| 发 RFC | 本 PRD 定稿;术语表/目录图/三条作者旅程齐;RFC 以大白话裁剪发 GitHub Discussions(需先开启 Discussions,issue 区发置顶指引),征求意见至少开放 1 周 |
| beta | 用 v7 真实写一本书到 50 章(自用验证,覆盖建书→日更→吃书→卷复盘);Windows 中文路径全链路 CI 绿;"删光 .cache 全量重建" CI 绿 |
| 7.0.0 | /migrate 在 ≥3 个真实 v6 项目跑通;beta 期无数据丢失级 bug;迁移指引文档齐 |
命名四原则:①网文圈原生词优先;②圈内没有的用自然大白话;③财务/工程/数据库隐喻禁止出现在作者界面;④不自造两字精简词——宁可用自然的长短语。
| spec 0.5 旧词 | v7 定名 | 备注 |
|---|---|---|
| 承诺(P-031) | 账本拆三类:伏笔(伏笔-031)/ 悬念(悬念-008)/ 感情线(感情线-012) | 各用各的生命周期动词(埋下→回收 / 设下→揭晓 / 开启→修成正果);编号一律全称 |
| 节奏债 | "悬了太久"预警 | 是提醒不是错误 |
| retcon 事务 | 吃书(吃书-87) | commit 前缀仍 retcon(机器域) |
| settle / 结转 | 定稿(动词) | 与 定稿/ 目录一致 |
| 章事务 | 写章流程 | |
| 盘面 | 全书近况 | |
| 上下文包 | 本章写作材料 | |
| 合同 | 本章要写到的事 | |
| 镜头评审 | 三审(读者审/编辑审/设定校对) | 出版业原生词 |
| 棘轮 | 删除该比喻 | 直接说"定稿前/定稿后" |
| 风格宪法 | 文风铁律 | |
| 决策卡 | 取消"卡"概念:环节叫"确认细纲",文件 工作区/细纲.md |
AI 拟细纲→作者点头或改 |
| 验收(卡) | 审稿,文件 工作区/审稿.md |
|
| 修复卡 | 修复确认 | |
| 定稿/记忆/ | 定稿/摘要/ | "记忆"是 AI 视角词 |
| 信息差/时间线/名册/金句库/体检/钩子/强弱钩 | 保留 | 原生或大白话 |
机器协议不动(机器域,作者看不到):commit 前缀 ch/vol/retcon/fix、book.yaml、spec_version、.cache 表名。条目编号全部中文全称(伏笔-031/悬念-008/感情线-012/信息差-021,原 P-031/S-021 废止)——编号是作者天天要念的,必须是人话且不过度压缩。
| 风险 | 控制 |
|---|---|
| 三审每章 3 次 AI 调用,弱模型宿主上质量参差 | 三审任务书单源;设定校对给的是核对清单不是开放问题;降级模式(无 subagent 顺序执行)如实声明 |
| 自动模式错误连锁 | 按批次定稿——错误不经作者审稿不入定稿,污染上限一个批次且未定稿可直接改;已发布后的错误走影响分析+顺势圆 |
| 中文路径在小众平台/工具链上出幺蛾子 | CI 全链路 + 一级宿主 smoke;问题平台降级到二三级,不硬保 |
| Node 22 普及度 | 安装器人话提示升级;22 已是 LTS,写手装最新版无历史包袱 |
| Codex skill 列表 8k 字符预算 | description 精简纪律 + validator 检查 |
| 金句库 few-shot 注入旧文加重自我重复 | 7.x 才做自动收割;候选制+作者审核;按场景分文件轮换 |
开放问题(不阻塞 RFC,spec 修订时解决):
大纲/灵感池.md 候选。.cache 表设计(实现 spec 定)。(已消解,均为作者 2026-06-12 拍板:编号体系→全称中文编号;攒批审稿落点→按批次定稿后问题不复存在;多本书切换→.webnovel/books.jsonl 登记 + hook 注入;启动点→只支持工作目录启动;O1 书仓库自描述→根部指路 AGENTS.md。)---
.webnovel/books.jsonl)、启动点限制(只支持从工作目录启动——宿主只在启动目录加载 skills/配置;脚本校验 cwd 含 .webnovel/,否则人话提示)。node:sqlite。AGENTS.md(误启动/单独 clone 的指引)并登记进 books.jsonl。.webnovel/books.jsonl)。books.jsonl);无 hook 宿主由状态机入口读同一文件,行为等价。<!-- WEBNOVEL:START/END --> 标记块管理)。.claude-plugin/ 仅作为 v6 遗留说明)。| v6 | v7 |
|---|---|
正文/ |
定稿/正文/(补 front matter,"要写到的事"标"迁移") |
设定集/ |
定稿/设定/ |
大纲/ |
大纲/总纲.md、大纲/卷纲/ |
| foreshadowing | 大纲/伏笔/ 逐条成文件 |
| plot_threads | 并入卷纲正文(不进账本) |
| chase_debt / reading_power | 知识层与章属性(不进账本) |
.webnovel/state.json |
一次性展开进 定稿/设定/ |
summaries/ |
定稿/摘要/ |
| project_memory patterns / scratchpad | 文风/文风铁律.md(人工过一遍再入) |
.story-system/ 提交链 |
压成初始 commit,原目录只读归档 |
| index.db / vectors.db / projection_log | 删除(缓存重建;向量为可选插件) |
| references(题材模板/追读力/爽点节奏) | 知识层平移继承 |