fiction-plan:小说规划
基于总纲增量细化卷/时间线/章纲,同步 Story System 底本。 不重做全局故事,不重写整份总纲或设定集。
执行原则
- 只做增量补全,不重写整份总纲或设定集
- 先锁定卷级节奏,再批量拆章
- 时间线是硬约束,所有章纲必须带时间字段
- 发现总纲与设定冲突时先阻断,等用户裁决
阻断条件
- 项目根不合法或总纲缺失
- 总纲缺少卷名/章节范围/核心冲突/卷末高潮 → 阻断
- 批量拆章时时间回跳且未标注闪回 → 阻断
执行流程
Step 1:加载项目数据
# SCRIPTS_DIR 由安装宿主指向本仓库或已安装的 scripts/ 目录。
export PROJECT_ROOT="$(python -X utf8 "${SCRIPTS_DIR}/fiction.py" --project-root "${CODEX_PROJECT_DIR:-${CLAUDE_PROJECT_DIR:-$PWD}}" where)"
按需读取 .novel/state.json 和 大纲/总纲.md;不要依赖 shell 的 cat 或聊天记忆替代项目文件。题材从 state.json.project.genre 读取,旧项目再兼容 project_info。
按需读取设定集。
Step 2:选择目标卷并确认范围
确认卷名、章节范围、核心冲突,以及是否有特殊要求(视角/感情线/题材偏移)。
Step 3:生成卷节拍表
模板内容:
## 第 X 卷:{卷名}
- 功能:{铺垫/起步/第一个大爽点}
- 核心事件:{一句话}
- 起始状态 → 结束状态
- 中段反转(必须有,确定无则写"无(理由)")
- 危机链至少 3 次递进
- 卷末新钩子
- 章节定位:推进/高压/训练/关系/呼吸/信息(可多选,但说明主次)
输出文件:大纲/第{卷号}卷/节拍表.md
Step 4:生成卷时间线
- 明确时间体系与本卷时间跨度
- 有倒计时事件时列出并标记 D-N
输出文件:大纲/第{卷号}卷/时间线.md
Step 5:生成详细章纲(每批默认 10 章)
每章必须包含:
| 字段 | 必填 |
|---|---|
| 核心事件(一句话) | ✅ |
| 目标情绪 | ✅ |
| 阻力 | ✅ |
| 代价 | ✅ |
| 时间锚点 / 跨度 | ✅ |
| 与上章时间差 | ✅ |
| 爽点 | ✅ |
| 视角(默认主角) | ✅ |
| 关键实体(涉及的设定卡) | ✅ |
| 本章变化 | ✅ |
| 章末未闭合问题(钩子) | ✅ |
| CBN(1 个) | ✅(如果 > 5 章则必须有) |
| CPN(2-4 个) | ✅ |
| CEN(1 个) | ✅ |
| 必须覆盖节点(≤4 个) | 建议 |
| 本章禁区(≤5 条) | ✅ |
每章同时写明目标字数和节点预算;预算总和应落在 [目标字数, 目标字数×1.1]。低压、关系或信息章可以没有显性爽点/反转,但必须保留读者继续阅读的具体理由。
输出文件:大纲/第{卷号}卷/详细大纲.md
Step 6:滚动批次管理
- 第 1 批细纲(至少 5 章)在 fiction-start 前完成
- 默认每 10 章一批
- 写完一批后只在完成报告中提示下一批细纲缺口,不自动开始生成或写正文
- 用户也可主动:(fiction-plan 11-20)
Step 7:同步底本
每批章纲生成后,如项目已初始化 Story System,再同步对应底本;未初始化时报告缺口,不伪造同步成功:
# 底本同步由 AI agent 直接写入 .story-system/ JSON 文件完成
Step 8:写回设定(新增角色/势力)
扫描本次章纲中新出现的具名角色/势力/关键设定:
- 会复用的 → 自动建档到设定集/
- 一次性的路人 → 不建档
- 仅填细纲已确定的信息,未定字段留占位符
输出文件清单
大纲/第{卷号}卷/
├─ 节拍表.md
├─ 时间线.md
└─ 详细大纲.md
与 fiction-write 的关系
fiction-write 执行时自动读取本章细纲,作为写作依据。 如果没有本章细纲 → 阻断,提示先 fiction-plan。
参考
节拍表模板、时间线模板为内置模式。 写作技法类参考在 fiction-write 阶段加载,此处不加载。
致谢
本 skill 的开发参考了以下开源项目的思路与实现:
感谢原作者的开源贡献。
