with one click
novel-memory
// 管理长篇小说的长期记忆 —— 写章节前的上下文组装(memory_load),写完后的状态更新(memory_update)。这是百万字小说一致性的核心基础设施。**通常不由用户直接触发**,而是由 novel-chapter 在写作循环中自动调用。当用户说"看一下当前记忆状态"、"更新记忆"、"导出章节摘要" 等显式管理操作时也可触发。
// 管理长篇小说的长期记忆 —— 写章节前的上下文组装(memory_load),写完后的状态更新(memory_update)。这是百万字小说一致性的核心基础设施。**通常不由用户直接触发**,而是由 novel-chapter 在写作循环中自动调用。当用户说"看一下当前记忆状态"、"更新记忆"、"导出章节摘要" 等显式管理操作时也可触发。
| name | novel-memory |
| description | 管理长篇小说的长期记忆 —— 写章节前的上下文组装(memory_load),写完后的状态更新(memory_update)。这是百万字小说一致性的核心基础设施。**通常不由用户直接触发**,而是由 novel-chapter 在写作循环中自动调用。当用户说"看一下当前记忆状态"、"更新记忆"、"导出章节摘要" 等显式管理操作时也可触发。 |
为长篇小说的"百万字一致性"提供基础设施。两大核心操作:
辅助操作(用户可显式触发):
.memory/ 8 个银行借鉴 NovelClaw 的 16 bank 设计,v0.1 用 8 个核心 bank:
| Bank | 文件 | 内容 | 何时更新 |
|---|---|---|---|
| chapter-briefs | .memory/chapter-briefs.md | 每章 1-2 段摘要 | post-write |
| scene-cards | .memory/scene-cards.md | 重要场景的索引("第 5 章地下室对峙") | 章节中标记的"重要场景" |
| entity-state | .memory/entity-state.md | 实体当前状态(人在哪 / 持有什么 / 受了什么伤) | post-write |
| relationship-state | .memory/relationship-state.md | 当前关系状态(X 和 Y 现在啥关系) | post-write 或关系变化时 |
| continuity-facts | .memory/continuity-facts.md | 已确立的设定细节("主角左手有伤疤") | 首次出现时 |
| decision-log | .memory/decision-log.md | 作者重要决定的日志("决定让 X 在卷二死掉") | 用户主动 |
| revision-notes | .memory/revision-notes.md | 用户修改意见累积(用于"经验进化") | 用户审稿后 |
| tool-observations | .memory/tool-observations.md | (v0.2+)外部工具调用记录 | v0.1 暂留空 |
输入:本章的章节大纲(含 POV、出场角色、预定场景)。 输出:拼装好的上下文 blob,准备塞进 writer prompt。
加载策略(按优先级,token 不够就从下往上砍):
PRIORITY 0 - 必载(无条件,无截断)
- story.md frontmatter + 一句话简介 + 核心矛盾 + 30 章承诺
- style/compiled/*.md(写法约束)
- plot/_index.md(卷纲)
PRIORITY 1 - 强相关
- 前 1 章完整正文 chapters/ch-{N-1}.md
- 当前 arc 的 plot/arcs/{arc}.md(含本章对应的 plot points)
- 本章 POV 角色的 characters/{x}.md
PRIORITY 2 - 中相关
- 前 3 章摘要(从 chapter-briefs.md 读)
- 本章预定出场角色的 characters/{x}.md
- .memory/entity-state.md 中本章涉及实体的当前状态
- .memory/relationship-state.md 中本章人物之间的关系
- plot/foreshadowing.md 中 status=planted / advancing 的未回收伏笔
PRIORITY 3 - 弱相关
- 后 3 章摘要(让 writer 知道方向,避免越界写)
- 本章涉及地点 worldbuilding/locations/{x}.md
- 本章涉及体系 worldbuilding/systems/{x}.md
- .memory/continuity-facts.md 全部
- .memory/decision-log.md(如果有相关条目)
- .memory/revision-notes.md 最近 5 条
PRIORITY 4 - 装饰
- 前 4-10 章的摘要(如果 token 还够)
Token 预算(v0.1 经验值):
输出格式:
把所有加载内容按 markdown 区块拼接,每块前面加 ## SECTION: {name} 头,便于 LLM 区分。
输入:刚写完的章节正文 + 章纲。 输出:更新若干 memory bank 文件。
步骤(按依赖顺序):
读章节正文,让 LLM 输出本章涉及的:
输出 JSON:
{
"new-characters": ["{name-1}", "{name-2}"],
"new-locations": ["{place-1}"],
"new-systems": [],
"appeared-characters": ["{existing-1}", "{existing-2}"]
}
对每个新人物,搜索后续章纲(plot/arcs/*.md + plot/arcs/{arc}-chapters.md):
novel-characters 创建角色卡输出给用户:
本章出场了 3 个新角色:
- 老王(重要 - 后续 5 章会再出现,建议创建角色卡)
- 小李(工具人 - 仅本章)
- 一名酒馆侍者(cameo - 跳过)
要现在创建"老王"的角色卡吗?(yes / 稍后再说)
更新 .memory/entity-state.md:
## 本章变化({date})
### sera-voss
- 位置:{从 雾林 → 落雁城}
- 持有:{获得"血咒匕首"}
- 状态:{右肩中箭,未处理}
### kael-voss
- 位置:{继续在雾林扎营}
- 状态:{无变化}
每条变化记录格式:{字段}:{从 X → Y} 或 {字段}:{描述}
把这些变化追加到 entity-state.md(追加,不覆盖)。
如果本章有关系变化(比如 A 救了 B 命,B 对 A 态度从 hostile → grudging-respect),更新 .memory/relationship-state.md:
### sera-voss ↔ kael-voss
- 之前:sibling, 信任度高
- 现在:sibling, **kael 开始警惕 sera 的力量失控**
- 触发:第 8 章的 ember 失控事件
读章节 frontmatter 的 ## hook-账 段(这是 novel-chapter 在写作时写入的),按 advance / resolve / open / defer 更新 plot/foreshadowing.md 总表。
生成本章 1-2 段摘要,追加到 .memory/chapter-briefs.md:
## Ch 8 - 雾林夜遇 (3210 字)
sera 与 kael 在雾林边缘扎营时遭遇一队 maren 的斥候。
sera 第一次主动使用 ember 力量,但失控烧死了一名斥候 + 烧伤 kael 的手。
kael 第一次表达对 sera 的恐惧。两人裂痕初现。
H012 推进,H001 advance。
POV: sera-voss
出场:sera-voss, kael-voss, 3 名 maren-scout(cameo)
地点:whispering-vale-edge
权重:⭐⭐⭐
每章 1-2 段,不超过 200 字。摘要是为了下次写作时快速回忆,不是写读后感。
如果本章包含"关键场景"(用户标记或权重 ≥ ⭐⭐⭐⭐),追加到 .memory/scene-cards.md:
### 雾林夜遇(Ch 8)
- 关键性:力量失控转折点
- 涉及:sera-voss, kael-voss
- 后续应用:作为 sera 自我恐惧的回忆素材
如果本章首次确立了某个"以后必须保持一致"的事实(如"sera 左手有 ember 灼伤"),加到 .memory/continuity-facts.md:
## sera-voss 身体特征
- 左手腕有 ember 灼伤(Ch 8 失控造成,永久)
- 头发左侧灰色(Ch 1 提及)
continuity-facts 是给 novel-review 做一致性检查用的——后续章节如果写"sera 的左手伸出,光滑无痕",review 应该报错。
如果用户在 novel-chapter 的 user_review 阶段提了修改意见,把意见追加到 .memory/revision-notes.md:
## Ch 8 用户修改意见 ({date})
- 开头节奏太慢
- sera 的失控应该再克制一点
- kael 的恐惧反应不够具体
### 下次写作改进方向
- 章首 3 段内必须有动作 / 冲突
- 力量描写"压抑"而非"宣泄"
- 配角恐惧通过身体反应表达(颤抖、退后、不敢直视)
这些意见会在 memory_load 的 P3 中被加载到下章 writer prompt,实现"经验进化"。
读取 .memory/ 下所有文件,给用户一个摘要:
📊 当前记忆状态(截至 Ch 8)
📂 章节摘要:8 条
📂 重要场景:3 个
📂 实体状态:12 个实体追踪中
📂 关系变化:5 对关系记录
📂 一致性事实:18 条
📂 决定日志:4 条
📂 用户修改意见:3 条(最近一次 Ch 8)
🔍 待处理:
- 2 个新角色未创建角色卡:老王、小李
- 1 条伏笔超期未推进:H003 母亲的字条(埋设至今 8 章)
手动触发 memory_update 流程(通常 novel-chapter 已经自动跑过,这里给"重写章节后手动重跑"的入口)。
把 .memory/chapter-briefs.md 整理成可阅读的"全书提纲",输出到 deliverables/synopsis.md。
如果 P0+P1+P2 超过预算,按以下顺序砍:
绝对不能砍:
novel-chapter每次 memory_update 完成后,给用户一个简短报告:
📝 Ch 8 记忆更新完成
✓ 章节摘要已追加
✓ 实体状态更新:sera (位置+持有+伤), kael (无变化)
✓ 关系变化:sera↔kael(兄妹信任→裂痕初现)
✓ 伏笔账:advance H001, advance H012
✓ continuity facts:sera 左手 ember 伤(永久)
⚠ 待办:建议为"老王"创建角色卡(后续会出现 5 次)
引导用户填充 story.md 的核心创意要素(一句话简介、核心矛盾、30 章承诺、市场定位、文风方向)。当用户说"讨论世界观"、"开始 brainstorm"、"想剧情"、"聊一下这个故事"、"我想写小说但还没想清楚怎么写"、"continue brainstorming the story" 时触发。此 skill 不创建世界观/角色/章节,仅在概念层做收敛。
核心章节写作循环。9 步管线:outline → user_confirm → memory_load → write → self_check → fix_loop → memory_update → checkpoint → user_review。当用户说"写第 X 章"、"写下一章"、"继续写"、"接着写"、"重写第 X 章"、"write chapter N" 时触发。两阶段温度策略:写作时高温,自检和修复时低温。
管理小说角色资产 —— 角色卡、关系图谱、家族 / 阵营树、动态角色状态(卷级职责 / 缺席风险 / 候选新角色)。当用户说"加角色"、"加主角"、"加反派"、"创建一个角色"、"角色关系"、"建家族树"、"add character" 时触发。每个角色一个 markdown 文件,frontmatter 维护双向关系。
用于初始化一个新的小说项目。当用户说"我想写小说"、"开始写小说"、"新建小说项目"、"创建一本新小说"、"start a new novel" 时触发。会引导用户完成基本信息确认后,搭建标准的 vault 目录结构(story.md / characters / worldbuilding / plot / chapters / style / .memory),并可选地 git init。
管理小说情节结构 —— 卷纲、故事弧(arc)、时间线、伏笔账(hook ledger)。当用户说"做卷纲"、"设计故事弧"、"加伏笔"、"伏笔账"、"时间线"、"plot outline"、"design arc" 时触发。包含中文网文章节情节推进四大原则,以及借鉴 inkos hook-ledger 的 open/advance/resolve/defer 四态伏笔语义和"揭1埋1"硬底线。
章节 / 全书校稿。37 维质量审查:4 维统计学(Python 脚本)+ 33 维主观(LLM 评估)+ 一致性 + 伏笔账 + 硬规则。当用户说"校稿"、"审一遍"、"检查第 X 章"、"看看哪里有问题"、"全书审查"、"review chapter"、"audit" 时触发。审稿只评结构和完成度,**不评文笔**(文笔由 novel-style-engine + novel-chapter 在生成阶段控制)。