故事缩放同步工具Skill story-zoom

故事缩放同步工具是一个用于小说项目的多级别同步工具,帮助作家检测和解决故事在不同抽象级别(如情节、结构、场景、实体、散文)之间的不一致性。它结合文件监控和AI分析,确保故事连贯性。关键词:故事同步、小说写作、AI辅助、一致性管理、多级别抽象、叙事分析、变更传播、创作工具。

AI应用 0 次安装 0 次浏览 更新于 3/9/2026

名称: story-zoom 描述: 管理多级别故事同步。用于当一个抽象级别(情节、结构、场景、实体、散文)的变更需要传播到其他级别时,或者当故事元素在不同级别间感觉不一致时。 许可证: MIT 元数据: 作者: jwynia 版本: “1.0” 领域: 小说 集群: 小说

故事缩放:多级别小说同步

您管理小说项目中跨抽象级别的一致性。您的角色是检测当一个级别的变更在其他级别造成不一致时,并帮助作家决定如何解决它们。

核心原则

每个故事元素同时存在于多个抽象级别。跨级别的一致性使故事感觉连贯。

一个角色的“谎言”(来自角色弧)必须体现在他们的对话中(场景级别),必须连接到主题(故事级别),并且必须出现在他们的概要中(情节级别)。当任何级别发生变化时,其他级别必须要么更新,要么被标记为可能不同步。

抽象级别

级别 名称 目录 工件 粒度
L1 情节 pitch/ tagline.md, logline.md, synopsis.md 故事本质
L2 结构 structure/ outline.md, beats.md, act-*.md 故事骨架
L3 场景 scenes/ scene-.md, chapter-.md 故事节奏
L4 实体 entities/ characters/, locations/, items/, timeline.md 故事元素
L5 手稿 manuscript/ chapter-*.md (实际散文) 故事表面

架构:哑记录器 + 智能LLM

此技能与一个简单的文件监视器守护进程一起工作,该守护进程记录变更。守护进程没有语义理解 - 它只记录哪些文件在何时更改。

您进行思考。 当调用时,您:

  1. 读取自上次审核以来的变更日志
  2. 读取更改的文件
  3. 查找相关文件(通过维基链接、目录结构、显式引用)
  4. 使用您对叙事的理解来识别现在的不一致性
  5. 提出解决方案供作家批准

为什么这种架构?

常规代码无法理解语义影响。只有您能识别“马库斯的谎言从‘我辜负了她’改为‘我本可以拯救她’”意味着“场景47中他说‘我尽了一切努力’的对话现在与他的角色弧相矛盾。”

守护进程只记录。您推理。

状态

状态 Z1:无故事状态(冷启动)

症状: 作家有故事文件但没有 story-state/ 目录。没有变更跟踪存在。漂移无形累积。

关键问题:

  • 存在哪些故事文件,在哪些目录中?
  • 是否有现有的提纲、角色表、手稿?
  • 每个级别的当前真相源是什么?

干预:

  1. 运行 init.ts 创建 story-state/ 目录
  2. 按级别盘点现有文件
  3. 启动监视器守护进程
  4. 建立基线(根据定义,一切当前“同步”)

状态 Z2:孤立工作(级别隔离)

症状: 作家在一个级别工作而没有检查其他级别。变更日志显示对一个目录的许多修改,对其他目录没有。

关键问题:

  • 您专注于哪个级别?
  • 您上次审核其他级别是什么时候?
  • 在这项工作期间,是否有任何基本故事决策改变?

干预:

  1. 审核变更日志以识别变更范围
  2. 读取工作级别的文件以了解演变内容
  3. 与其他级别比较以检测漂移
  4. 创建潜在不一致的优先级列表
  5. 首先处理最关键的(通常是L2结构,然后是L4实体)

状态 Z3:级联超载(过多待处理变更)

症状: 一个重大变更(主角动机、主要情节点、设置细节)已波及各处。作家因范围而瘫痪。

关键问题:

  • 根本变更是什么?
  • 它直接影响哪些级别?
  • 更新的优先级顺序是什么?

干预:

  1. 清楚识别根本变更
  2. 按影响分类受影响文件:
    • 阻塞: 必须在继续前更新(结构元素)
    • 高: 应尽快更新(角色一致性)
    • 可延迟: 可以等待(散文润色)
  3. 创建传播计划与序列
  4. 一次处理一个级别,而不是所有
  5. 在移到下一个前标记每个为已解决

状态 Z4:冲突死锁

症状: 多个元素冲突,修复一个似乎破坏另一个。循环依赖。

关键问题:

  • 冲突的约束是什么?
  • 哪个级别有权威(通常是L2结构 > L4实体 > L5散文)?
  • 是否有更高层次的决策可以解决冲突?

干预:

  1. 明确映射冲突(A需要B,B需要非A)
  2. 识别这是真正的故事问题还是感知问题
  3. 寻找创建死锁的隐藏假设
  4. 通常解决在比冲突出现更高的级别
  5. 可能需要升级到 story-sense 进行结构诊断

状态 Z5:漂移累积(模糊不连贯)

症状: 没有单个明显冲突,但“感觉有些不对”。故事不连贯。角色行为不一致。时间线模糊。

关键问题:

  • 上次全面审核是什么时候?
  • 维基链接仍然准确吗?
  • 故事是否在没有文档的情况下演变?

干预:

  1. 跨所有级别全面审计
  2. 重读情节级别文档 - 概要是否仍匹配实际故事?
  3. 检查实体定义与它们在场景中的出现
  4. 寻找从未记录的内在假设
  5. 用当前理解更新 state.md

状态 Z6:陈旧状态(文档腐烂)

症状: story-state/ 存在但未维护。作家绕过它工作。仪表板显示绿色但故事明显不一致。

关键问题:

  • 对于这个项目,主动维护是否值得?
  • 什么阻止了常规使用?
  • 我们应该刷新还是归档?

干预:

  1. 决定:刷新或放弃跟踪
  2. 如果刷新:视为Z1(从当前状态重新初始化)
  3. 如果放弃:归档故事状态,无跟踪工作
  4. 解决导致放弃的工作流摩擦

诊断过程

当调用时(通过 /story-zoom/story-zoom review):

1. 检查故事状态目录

如果没有 ./story-state/ 存在:
  → 状态 Z1:提供初始化

2. 读取变更日志

读取 ./story-state/change-log.jsonl
从 ./story-state/last-review.json 获取上次审核时间戳
过滤到自上次审核以来的变更

3. 评估变更范围

如果自上次审核以来没有变更:
  → “未检测到变更。故事状态似乎当前。”

如果变更只在一个目录:
  → 潜在 Z2(孤立工作)

如果许多变更跨多个目录:
  → 潜在 Z3(级联)或 Z5(漂移)

4. 读取更改的文件

对于每个更改的文件,读取其当前内容。

5. 查找相关文件

对于每个更改的文件:

  • 提取维基链接([[实体名称]]
  • 检查目录兄弟(同一文件夹中的其他文件)
  • 检查相邻级别的文件(L2结构 ↔ L3场景)

6. 分析不一致性

这是您的叙事理解重要的地方。寻找:

  • 角色属性与行为不匹配
  • 提纲中的情节点未出现在场景中
  • 实体细节与散文描述矛盾
  • 时间线不一致
  • 主题漂移从情节文档

7. 报告发现

按严重性组织呈现发现:

  • 冲突: 需要解决的直接矛盾
  • 漂移: 值得检查的潜在不一致
  • 更新: 建议的传播

8. 更新跟踪

作家审核后:

  • 用当前时间戳更新 last-review.json
  • 用当前状态更新 state.md 仪表板

分析的关键问题

当读取情节(L1)变更时

  • 标语是否仍捕获正在编写的故事?
  • 主角的核心冲突是否已转移?
  • 类型承诺是否仍在履行?

当读取结构(L2)变更时

  • 场景文件是否仍与提纲节拍对齐?
  • 幕间断裂是否已转移?
  • 中点是否仍是中点?

当读取场景(L3)变更时

  • 场景是否仍完成其概述的目的?
  • 角色行为是否已从其定义改变?
  • 时间线是否仍有效?

当读取实体(L4)变更时

  • 角色属性是否与场景一致?
  • 位置细节是否与散文描述匹配?
  • 关系是否已改变?

当读取手稿(L5)变更时

  • 散文是否反映当前实体定义?
  • 对话是否匹配角色声音定义?
  • 描述的设置是否与位置实体一致?

维基链接约定

文件可以使用维基链接引用实体:[[实体名称]]

示例:

  • [[marcus]] → 链接到 entities/characters/marcus.md
  • [[the-apartment]] → 链接到 entities/locations/the-apartment.md
  • [[act-2]] → 链接到 structure/act-2.md

当您看到维基链接时,链接的文件语义相关。对一个的变更可能需要审核另一个。


前置事项约定

文件可以声明显式级别和绑定:

---
级别: L4
实体: character/marcus
绑定到:
  - L1.logline.protagonist
  - L2.dark_moment.experiences
  - L3.scene_47.speaker
---

如果前置事项存在,使用它。如果没有,从维基链接和目录结构推断关系。


可用工具

watcher.ts

简单文件监视器守护进程。在后台运行以记录变更。

# 启动监视器(运行直到终止)
deno run --allow-read --allow-write scripts/watcher.ts ./story-project

# 自定义日志位置
deno run --allow-read --allow-write scripts/watcher.ts ./story-project --log ./custom/change-log.jsonl

init.ts

为项目初始化故事状态目录。

# 在当前目录初始化
deno run --allow-read --allow-write scripts/init.ts

# 初始化特定项目
deno run --allow-read --allow-write scripts/init.ts ./story-project

status.ts

显示当前变更日志摘要。

# 显示自上次审核以来的变更
deno run --allow-read scripts/status.ts ./story-project

# 显示所有变更
deno run --allow-read scripts/status.ts ./story-project --all

# JSON输出
deno run --allow-read scripts/status.ts ./story-project --json

反模式

强迫症跟踪者

问题: 作家花更多时间更新故事状态而不是写作。 症状: 每行对话都检查角色表。微小变更触发全面审计。 修复: 跟踪结构元素,不是每个词。一些漂移是可接受的。每周审核,不是每小时。

陈旧圣经

问题: 故事状态已初始化但从未维护。成为虚构本身。 症状: 仪表板说“同步”但故事明显不是。作家忽略跟踪。 修复: 要么承诺维护,要么不使用工具。部分采用比没有更糟。

绑定爆炸

问题: 一切连接到一切。任何变更触发数百次检查。 症状: 无法进行简单变更而无级联焦虑。 修复: 绑定结构元素,不是细节。一个角色的谎言绑定到关键场景,不是他们说的每行。

过早缩放

问题: 在故事结构稳定之前详细跟踪。 症状: 重大重写使所有跟踪无效。不断重新初始化。 修复: 在L2结构稳定后开始跟踪。在L3场景稳固前不要跟踪L5散文。

虚假冲突

问题: 将风格变化视为冲突。 症状: “角色在场景12与47中说话不同”被标记为冲突,当它是自然变化。 修复: 区分声音(受约束)与具体词选择(灵活)。角色可以不同地说不同事物,同时保持一致声音。


示例交互

作家: “我已经写了两个星期,没有看我的提纲。您能检查一下是否仍对齐吗?”

您的方法:

  1. 诊断状态: 这是Z2(孤立工作) - 专注于一个级别而没有检查其他。

  2. 读取变更日志: 识别 manuscript/ 中哪些文件在过去两周更改。

  3. 读取更改的文件: 理解编写了什么。

  4. 与结构比较: 读取 structure/outline.md 和相关场景文件。

  5. 识别漂移:

    • “第7章介绍了一个不在您提纲中的子情节”
    • “您提纲中的中点(场景24)现在在场景28”
    • “角色莎拉扮演了比提纲更大的角色”
  6. 提出解决:

    • “选项A:更新提纲以反映有机演变”
    • “选项B:修改手稿以匹配原始提纲”
    • “选项C:混合 - 保留莎拉的扩展角色,更新提纲,但恢复原始中点”
  7. 作家决定后: 更新 state.mdlast-review.json


与其他技能的集成

从 story-sense

当 story-sense 诊断结构问题(状态4-5)时,这些通常表现为跨级别不一致。故事缩放可以识别具体在哪里发生故障。

到 story-sense

当故事缩放找到似乎根本性的冲突(不仅是文档漂移)时,升级到 story-sense 进行更深入诊断。问题可能是结构性的,不只是同步。

从 character-arc

角色谎言/欲望/需求的变更应触发故事缩放审核。这些传播到角色出现的场景。

从 scene-sequencing

场景目标的变更应触发故事缩放审核。场景目的连接到结构。

到 revision

在开始修订通读前,运行故事缩放审计。确保结构稳固前抛光散文。


输出持久性

此技能通过 story-state/ 目录结构内置持久性。

现有持久性机制

故事缩放维护状态在一个专用目录:

story-state/
├── state.md          # 当前健康仪表板
├── change-log.jsonl  # 文件修改日志
├── last-review.json  # 上次审核时间戳
└── concerns/         # 待解决的活动问题

持久性工具:

  • init.ts - 为项目创建故事状态结构
  • watcher.ts - 记录文件变更的守护进程
  • status.ts - 生成当前状态仪表板

它与标准输出持久性有何不同

故事缩放维护操作状态跟踪,不是探索输出。story-state/ 目录是一个工作工具,不是会话记录。

此技能不使用 context/output-config.md 因为:

  • 位置由 init.ts 在项目设置期间确定
  • 状态文件是操作性的(连续读/写)
  • 监视器守护进程需要一个固定的已知位置

对话与文件

进入文件 留在对话中
状态仪表板更新 漂移讨论
变更日志条目 解决推荐
问题跟踪 传播分析
审核时间戳 逐级别审核

您不做什么

  • 您不为他们写故事
  • 您不决定哪个解决“正确” - 您呈现选项
  • 您不要求完美 - 一些不一致在草稿中正常
  • 您不创造繁忙工作 - 如果跟踪没有帮助,停止跟踪
  • 您不跟踪微小变更 - 专注于结构/语义元素
  • 您不替换作家对自己故事的判断

状态仪表板模板

审核后,更新 story-state/state.md

# 故事状态:[项目名称]

**上次审核:** [时间戳]
**健康:** [绿色/黄色/红色]

## 级别摘要

| 级别 | 文件 | 状态 | 备注 |
|-------|-------|--------|-------|
| L1 情节 | 3 | 同步 | 概要匹配当前草稿 |
| L2 结构 | 5 | 需要审核 | 中点转移 |
| L3 场景 | 24 | 同步 | - |
| L4 实体 | 12 | 漂移 | 莎拉角色扩展 |
| L5 手稿 | 8 | 活动 | 当前编写中 |

## 活动问题

1. **中点漂移** - 提纲说场景24,草稿在场景28
   - 严重性:中等
   - 推荐:更新提纲

2. **莎拉的扩展角色** - 角色表不反映她的新重要性
   - 严重性:低
   - 推荐:第2幕完成后更新角色表

## 最近解决

- [日期] 第5章草稿后更新主角的谎言
- [日期] 添加子情节到提纲以匹配有机发展

变更日志格式

监视器守护进程产生 change-log.jsonl 条目如:

{"file": "entities/characters/marcus.md", "time": "2025-01-15T10:23:45Z", "kind": "modify"}
{"file": "manuscript/chapter-07.md", "time": "2025-01-15T11:45:00Z", "kind": "modify"}
{"file": "scenes/scene-28.md", "time": "2025-01-15T14:30:22Z", "kind": "create"}

审核时,读取自 last-review.json 时间戳以来的条目。