计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
interactive-fiction【效率与协作】可选项驱动的互动小说创作完整规范:支持穿越/自创/创世/随机开局,内置视角一致性、字数区间、选项机制、存档系统与角色卡体系。当用户想玩、想写互动小说,或说「加载小说包」「开个互动小说」「选项小说」「互动故事」时使用。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
加载说明:本技能路径按你的 agent 技能目录放置(如
creative/interactive-fiction)。运行态数据由宿主环境注入。版本号仅以 YAML frontmatter 为准。【架构】 P0/P1/P2 三层物理拆分:本文件常驻 P0,P1/P2 按需加载。示例使用通用占位,不绑定具体作品;示例中角色名以类型标签替代。
每轮正文输出后必须立即跟上选项(默认 A/B/C/D/E 五选项;仅「选项降级」「[集]」「沉浸模式」为合法豁免),不得以任何理由省略选项。
每轮输出模板:
状态条 → (可选[集]) → 正文 → A/B/C/D/E → 💡提示行;缺选项即违规✅ 正文…后跟五选项 / ❌ 正文…直接结束
→ 若写完正文发现忘了加选项 → 立刻补上,不能等用户指出。
→ 若用户指出选项缺失(含表达不满)→ 不解释、不道歉、不追问原由,直接补五选项。
→ 若正文正好结束在一个重大情节(告白、对峙、身份揭露、重大转折等)→ 最容易忘选项的场景,气氛越好越要停笔检查最后三行有没有选项。
→ 若正文以角色对话结句(「我记住了」「我在这里等你回来」等)→ 最危险的陷阱——对话结句不构成自然收尾,仍须输出选项。
→ 若本段已标 [集](集中场景标记,见 §选项格式)→ 本段合法暂停出选项,但区间末节点必须恢复选项,否则仍属违规。连续 3 段 [集] 未恢复选项 → 按铁律 #0 判违规(最高优先级),不再单独按 [集] 规则判。
→ 若用户以自由输入(行为/台词)推进剧情 → 自由输入即当前帧事件,本轮选项必须基于该输入执行后的新局势重新生成,禁止仅微调上轮选项(见 §自由输入优先)。
落笔前预判(生成前确认,避免写完才发现): □ 迷你状态条 │ 选项位已留(五选项或合规降级变体)│ 本轮字数区间已按场景类型选定 □ 转折预算 ≤1 次 │ 收尾落点=情势转折点或自然收束处,不闭环整个场景事件 □ 记忆外置:开工 brief 已取(无脚本环境跳过)
输出后核对(逐行看一遍,发现即当场修): □ 选项行:无推荐语/无标点/D仅主角/E禁关键抉择│间距合规│A/B/C 后果标注完整 □ 尾句为角色对话 → 复核选项已跟(最危险陷阱) □ 正文:无旁白总结、未闭环;句式复读与转折次数已核 □ 记忆外置:收尾 record 已记(无脚本环境跳过)
触发 3 项(命中触发条件才查,未命中明确跳过): □ 设定核对(触发:场景切换 / 新角色登场 / 时间跳跃;核对角色名/关系/生死/地点/能力,数据源 st{} + cp{}/npcs[] + 关系 + 上下文设定;深查见 extended/event_behaviors.md §一致性自检) □ 后果/回响核对(触发:choices[] 有 1-2 轮内到期的 surface_by 条目,或场景切换/时间跳跃/关键角色回归/新章节开始时;到期条目必须本轮或下轮正面回收(禁旁白带过),并查最近 3-5 个关键事件是否需自然呼应(数据源 choices[] 的 consequence/foreshadow 条目);同场景连续推进不强制) □ 锚定钩子(触发:seg_count % 8 == 0 时自检一次)
低频项(集中场景/签名物)触发时按
extended/event_behaviors.md规则查,不列入常驻
本文件为每轮必读的 P0 核心规则。以下为 P1/P2 按需加载路由。
| 触发条件 | 加载文件 |
|---|---|
| 常驻 P0(不外置) | 铁律#0、视角、字数/格式、状态条、输入分类、选项主干、描写分区(🟢可细写/🟡适度提及/🔴仅情感场景) |
| 用户指令 / 导航 / 输入归属例外 | references/command_nav.md |
| 切换子Agent / 沉浸 / 模式 / 视角 | 对应 extended/subagent_mode.md / modes/immersion.md / modes/shuangwen.md、modes/mainline.md / references/switch-rules.md |
| 事件触发(地点/seg场景切换/间隔/一致性) | extended/event_behaviors.md |
| 场景卡 / 情感场景展开 | extended/features.md |
| 蒸馏(作品名检索 / 原作 txt)/ 开局原著数据收集 | extended/distillation.md、extended/title_distillation.md、extended/txt_distillation.md |
| 开局路线 / 路线冲突 / 进度查询 | extended/route_system.md |
| 创世世界观 / 角色创建 | extended/creation_world.md |
| 角色卡(弹出/修改/深度创建/短篇) | extended/character_card.md / extended/deep_character_creation.md |
| 情感场景参考资料 | references/emotion-escalation-motifs.md / references/intimate-character-voice.md |
| 正文写作指导 / 新角色外貌描写(进入新章节首轮、用户要求提升文笔或展开描写时) | references/writing_guide.md / references/appearance.md |
| 查表数据(标签词库 / 字数区间 / 指令快速路由) | data/tags.json / data/wordcount.json / data/commands.json |
| 运行时 JSON 格式(novel_runtime.json 字段) | schema/novel_runtime.schema.json |
| 记忆外置助手(简报 / 记账 / 存读档) | extended/storage_runtime.md §记忆外置助手(脚本 scripts/novel.py) |
references/command_nav.md)用户发来激活指令(「加载小说包」及其同义说法)或首次加载本技能包时,必须先输出启动页菜单并等待用户选择;不得直接开始写正文,也不得先反问设定。
extended/route_system.md(激活时立即加载)。⚠️ 暂无存档,请先选 A 开始新冒险;有存档时按 {存储根}/_index.json 取最近一条。指令解析快速路由查
data/commands.json(高频子集,覆盖全部指令域;完整指令→效果映射、菜单导航、非剧情阶段边界以references/command_nav.md为权威)。
完整指令→效果映射表、菜单导航规范、非剧情阶段指令边界已外置至
references/command_nav.md(解析到用户指令 / 导航输入时加载,纯剧情轮不占用上下文)。下方仅保留输入分类的 3 条优先级判定(每轮必守)。
references/command_nav.md §非剧情阶段指令边界)蒸馏 / 角色创建 / 开局选择 / 角色卡短篇四个阶段统称「非剧情阶段」,剧情指令在此一律无效。完整阶段标识与可用操作表、跨路线指令提示见
references/command_nav.md§非剧情阶段指令边界(进入任一非剧情阶段或解析到命令时加载)。
references/command_nav.md §菜单导航指令规范)上一步 / 返回主菜单 / 取消等导航指令的响应速度与约束见
references/command_nav.md§菜单导航指令规范(解析到导航输入时加载)。导航指令优先于同阶段的自由文本解析。
角色创建阶段的自然语言输入路由例外见
references/command_nav.md§用户输入归属 · 角色创建阶段例外。
══════════════════════════════ [P0] 每轮必守 · 核心执行规则 ══════════════════════════════
AI 每轮生成小说正文时必须遵守本章所有规则。本章规则优先级最高(铁律 #0 为首)。
当前视角:默认由开局视角选择决定(详见
extended/route_system.md开局流程),剧情途中可通过指令切换;未收到切换指令时「当前选定视角」始终为开局所选视角。以下规则中,「主角」= 当前视角下的主语(第一人称=我,第二人称=你,第三人称=主角名)。
| 场景类型 | 人称 | 触发条件 |
|---|---|---|
| 主线叙述/日常/动作/对话 | 当前选定视角 | 始终 |
| 主角内心活动 | 当前选定视角 | 始终 |
| 情感对象反应/内心 | 第三人称「他/她」(按角色卡性别,可用 TA/其名) | 仅限情感场景,按阶段切换:心动→首次情感回应时;暧昧→回应升级时;定情→可全程使用该人称 |
| 多角色切换 | 第三人称「他/她」(按各角色性别) | 仅限情感场景,每切换一次聚焦需以空行分隔 |
人称约束:同一段落保持单一语言与人称;主线/日常一律用当前视角人称描写主角;情感段落人称切换不超过 2 次。
转折定义:转折 = 本轮剧情方向的一次显著改变,≤1 次/轮。
句式多样性要求:同一修辞结构(如"不是……而是……""既不……也不……")在同一段落中出现次数 ≤ 1 次;同段内连续两句话不得使用相同句式。自然叙事优先——若自检发现 2 次及以上,修改至少 1 处为直接陈述。 例外:角色对话可豁免此约束。
每轮正文生成的硬性格式规范。适用于爽文/主线/场景卡所有模式,子 Agent 和主 Agent 共同遵守。
字数区间:每轮正文 500-1200 字(硬性主区间;以下压缩场景为合法例外,例外优先于主区间判定,例外轮次不受 500 字下限约束,仍须 ≤1200 字上限)。场景区间选择:氛围展开/情感场景充分使用区间(800-1200)、日常过渡 400-600、对话快速交换/紧迫战斗/快进首段 250-400、随机开局首段 300-800(见 data/wordcount.json;无法判定场景类型时用主区间 500-1200;随机开局见 extended/route_system.md §随机开局)。
收尾规则:
子Agent 传播:子Agent生成模式规则(传播方式 / 上下文包摘要模板 / 字数例外场景)见 extended/subagent_mode.md。
每轮 AI 生成正文前,须先在正文起始处单独渲染一行迷你状态条。
格式:🔖 路线 · 第N章 · N万字(章节若无则标「序章」);模式/视角仅在与默认不同或刚切换时附加(如 🔖 原著 · 爽文 · 第一人称 · 第3章 · 1.2万字)。
字数显示:N = 累计字数 ÷ 10000,四舍五入保留 1 位小数(如 7151 → 0.7万字;1700 → 0.2万字)。
降级规则:非剧情阶段 / 纯指令轮的状态条降级见 references/command_nav.md §状态条降级。
自动触发 · 章节摘要与卷总结(v10.1.0 新增):
ch 字段切换时(进入新章节):自动生成 chapter_summary(本章 ≤200 字概要,generated_by="LLM"),存 novel_runtime.json。chapter_summary(进入新章节)时,上一条自动滚入 volumes[](按章累积,无需等到第 5 章;generated_by 随原值保留)。novel_runtime.json 的 generated_by 为 "human" 或 "verified" 即可。导出过滤:chapter_summary / volumes[] 不计入小说导出文件(仅运行时元数据)。
路线标签精简(输出层动态替换):
| 原文 | 状态条显示 |
|---|---|
| 穿越成原著角色 | 原著 |
| 自创角色 | 自创 |
| 创世模式 | 创世 |
算数/记账/到期提醒交给
scripts/novel.py,脚本只记账、不审判,叙事判断仍归模型;命令表见extended/storage_runtime.md§记忆外置助手。
每轮两端({技能目录} = 本技能安装目录,即 SKILL.md 所在目录;{存储根} = 小说数据目录,脚本按宿主取值(手机端 /sdcard/Download/Operit/novels、桌面端 ~/novels;优先级:--root > 环境变量 NOVEL_STORAGE_ROOT > 宿主默认);无 Python 环境时跳过,走原「AI 直接读写 novel_runtime.json」路径):
python3 {技能目录}/scripts/novel.py brief(可加 --input "用户本轮输入" 提高设定检索命中)→ 取 [行动](到期须正面回收)、[事实](须遵守)与 [设定](命中时出现的相关设定);三者与 [变化]/[背景] 均仅作事实参考,无自然契机不得提及、不得当情节推动器。python3 {技能目录}/scripts/novel.py record(小票 JSON)→ 自动累加字数、seg_count、prv 截断、同步 _index.json。AI 每轮收到用户输入后按以下逻辑处理:
| 类型 | 判定 | 示例 |
|---|---|---|
| 指令 | 匹配快速指令卡中的任一指令,或文档其他章节定义的隐式指令 | 「切换爽文模式」「存档」「进度」「场景卡」 |
| 选项 | 用户选择了 A/B/C/D/E(可附带修改) | 「B」「D,但先不要正面回答」 |
| 自由行动 | 不匹配指令,且无法识别为选项选择的输入 | 「我掏出武器逼问对方」「先假装答应,等 TA 转身再动手」 |
AI 根据语义自动区分指令与自由行动。若输入兼具指令与自由行动特征,优先按自由行动执行。例外:若输入以明确的系统操作动词开头,优先匹配指令。
指令模糊匹配与别名:AI 对用户输入做语义归一,支持近义/口语化表达。如「存一下」「记个档」→ 存档;「看看好感」「谁喜欢我」→ 关系。
⚠️ 剧情对话转义:若用户想在剧情中说出与指令同名的台词(如角色大喊"存档!"),在输入前加 > 符号强制作为自由文本:> 存档!快把东西藏起来!。AI 识别到 > 前缀后剔除前缀,将剩余内容作为角色台词/自由行动处理,不匹配任何指令。
响应格式:无论用户以何种方式输入,AI 每轮输出均为「正文 + 选项」:正文响应用户输入对应的剧情发展 → 以自然的过渡衔接句收束 → 末尾按 P0「选项格式」规范生成五选项(或合规降级变体)。自由行动输入后,选项须基于自由行动执行后的新局势重新生成。禁止仅微调上轮选项;须基于当前局势全新生成五选项(或合规降级变体)。
指令轮衔接:纯指令轮(存档 / 进度 / 关系 / 人物志 / 弹出角色卡 / 切换模式视角等)不生成剧情正文,仅输出指令响应内容(确认行 / 数据表 / 角色卡等)。指令处理完毕后,若当前仍处于剧情阶段且叙事需要继续推进,须紧接一段正文 + A/B/C/D/E 五选项(铁律#0 生效);若指令本身就是当前交互的终点(如角色卡弹出后等待用户修改),可仅输出指令内容,不强制续正文。
长时自由行动:若自由行动涉及超过 1 个自然日的跨度或 ≥3 个可分拆的独立行动,AI 先输出一个概括性结果段落,然后直接进入该结果造成的新局势,并生成对应的 A/B/C/D/E 选项。
⚠️ 对话归属陷阱:当用户直接输入一句带引号的对话文本时,这句话属于当前场景中正在说话的角色,不是AI的旁白叙述。AI应在下一轮正文中将这句话无缝融入叙事,让对应角色自然说出这句台词。✅ 正确:用户输入→ AI在正文中直接接上这句话作为角色的台词继续叙事。❌ 错误:AI先输出「TA 说这句话的时候……」再复述引号内容。
自由输入(行为/台词)是推进剧情的主要方式,选项是参考指引而非唯一框架。
choices[],picked 用 "自由"(非 A/B/C 选择),到期按 surface_by 正面回收(规范见 extended/storage_runtime.md §choices[] 升级字段规范)每段剧情末尾提供 A/B/C/D/E 五选项(或合规降级变体),全部以当前选定视角的人称表述:
E = [跳过] + 预告 ≤15 字。关键抉择点禁 E(倾向多禁少放)。分级细则见 references/options-quickref.md。
后果记账(A/B/C 生成时标注
type/detail/tier/surface_by,选定后写入choices[],按surface_by到期正面回收(禁旁白带过);选 D 记persona_confirm,选 E 不写;schema 见extended/storage_runtime.md)与声音回流(选 A/B/C 后主角语域延续该策略基调,选 D 按角色卡基调,选 E 免)完整细则见references/writing_guide.md§10 / §声音回流。
[集][集] 声明本段连续推进不退场,区间内暂停铁律#0。区间末节点必须恢复选项。
[集],位于迷你状态条之后、正文之前(次序:状态条 → [集] 行 → 正文;默认 2-3 段后恢复选项)[集](如连续 3 个 [集] = 连续 3 段)[集] 但未恢复选项 → 违规每个 A/B/C 选项前必须附加 2-4 字策略标签(紧凑模式下为 字母 · [标签] 摘要 格式),以 [标签] 包裹。D 选项统一使用 [主角],E 选项统一使用 [跳过]。本条规则仅适用于正文叙事阶段(选择路线进入故事后的每轮输出),不适用于启动页菜单、管理面板、角色卡管理、蒸馏流程、开局选择等非剧情阶段的选项。 非剧情阶段的 A-E 选项标签和内容以对应阶段文档(extended/route_system.md / references/command_nav.md)为准。A/B/C 标签必须互不相同且至少覆盖两种策略类型。选词从 data/tags.json 读取(7 类 × 5 变体 + 情感互动池,类型中性),词库外贴切词实验期允许。完整词汇库见 references/options-quickref.md(以 data/tags.json 为准)。
情感场景专用选项标签池(温柔靠近·慢 / 克制心动·慢 / 主动试探·快 / 热烈回应·快 / 退让留白·慢 / 欲言又止·迂回 / 心意暗涌·迂回)在情感场景中生效;A/B/C 选自该池时仍须在互斥前提下覆盖快/慢/迂回三种节奏。D 按角色卡推断(不变),E 固定「情感场景收束」。场景结束判定:定情阶段收尾信号达成或选 E 后,本段情感场景即结束,恢复普通标签池,E 恢复「[跳过]」;余韵/后续轮次不再使用情感互动池。
每轮生成 A/B/C 前必走下列决策(互斥约束:同轮只能选 1 个池):
1. 场景卡模式 OR 情感三阶段中段(心动/暧昧/定情)→ 进入 step 2
2. 角色专属语态基因触发(intimate-character-voice.md 命中)→ emotion 池
3. cp{}.stage='定情' AND 用户输入命中 emotion_daily.keywords(≥1 个)→ emotion_daily 池
4. 否则 → general 池
data/tags.json emotion 段data/emotion_daily.jsondata/tags.json general 段(7 类×5=35 词)A/B/C 选项生成后必须自检以下三条,不满足则重新生成对应选项:
判定锚点:若 C 仅为 A 或 B 的换皮/组合/延续 → 降级为 A/B + D/E(合规降级变体),不硬凑五选项。降级后 A/B 仍须满足互斥与独立约束,D/E 照常。详细规则见 references/options-quickref.md。
降级豁免:已按上文「选项降级」判定删除 C、仅输出 A/B + D/E 的轮次,免除此三条中对 C 的「互斥 / 节奏各异 / 独立性」要求;A/B 仍须满足互斥与独立。
默认使用紧凑选项格式输出。每条选项格式:{字母} · [{标签}] {动作摘要}
下表格式仅适用于正文叙事阶段(进行中的故事输出),启动页/管理面板/非剧情阶段的选项格式以 extended/route_system.md 为准。
| 选项 | 标签 | 摘要字数 | 额外约束 |
|---|---|---|---|
| A | 策略标签(词汇库择一) | 12-20 字 | 传达动作核心 + 关键后果方向 |
| B | 策略标签(词汇库择一) | 12-20 字 | 同上 |
| C | 策略标签(词汇库择一) | 12-20 字 | 同上 |
| D | [主角] | 12-20 字 | 基于主角性格推断输出结论性动作 |
| E | [跳过] | ≤15 字 | 快进到下一节点(保持轻量定位);情感场景中 E 固定为「情感场景收束」(见 §选项策略标签) |
常见错误规避见
references/options-quickref.md。
间距:正文 → 选项 2 空行;选项 → 提示 1 空行;提示行仅一行。
切换规则:完整选项格式通过「完整选项」/「展开选项」切换;紧凑模式通过「紧凑模式」/「精简选项」/「短选项」回到。切换时输出一行确认,不计入小说导出。
触发式:前 3 轮必出;此后仅在三类情况出现:① 用户输入疑似指令但未命中;② 新章节 / 新模式 / 新阶段开始时;③ 用户询问「能做什么」。
呈现格式(固定一行):💡 可用:{指令1} / {指令2} / {指令3} | 荐:{推荐指令}
模板池与场景适配见 references/command_nav.md §上下文命令提示模板。
约束:提示行不计入小说导出;每轮仅一行。
以下行为按事件触发,非每轮必需。完整规则见
extended/event_behaviors.md。
情感场景情感递进三阶段表(心动→暧昧→定情)已迁至
extended/features.md。触发情感场景时加载该文件。
定位:v10.0.0 的「三阶段」覆盖「关系从无到有」的弧线;v10.1.0 新增「定情后」覆盖「关系从有到稳」的延伸。三阶段结束后(
cp{}.stage = "定情")自动进入本节。
触发条件(双锚定):
cp{}.stage == "定情"(v10.0.0 三阶段已完成)data/emotion_daily.json 的 keywords(≥1 个:日常/明天/未来/之后/习惯/我们/结婚/以后/永远/一起/将来/两个人/成家/过日子/余生)执行规范:
references/intimate-character-voice.md §定情后语态演变场景结束判定:
正文生成由 子Agent生成模式 开关控制(默认关,状态不持久化,每次加载重置;剧情运行期间也响应切换)。无论哪种模式,P0 所有正文写作约束均强制适用。子Agent生成模式规则见
extended/subagent_mode.md。
沉浸模式激活后隐藏所有选项与策略标签、仅展示纯正文;沉浸期间子任务派发暂停,退出即恢复。完整行为表 / 呼出 / 目标沉浸见
modes/immersion.md,进入时加载。
用户选完路线后,若后续输入暴露不同路线意图,AI 必须立即提示路线不匹配并给出纠正选项(切换路线 / 继续当前 / 说明区别)。详见
extended/route_system.md§路线不匹配检测。
模型知识优先 → 询问用户 → 用户确认后才联网搜索。完整策略表已迁至
extended/distillation.md。
© 2026 Treasure-hub-agent · interactive-fiction skill · MIT License · 许可与免责见
DISCLAIMER.md