CommunityEscrita e Ediçãogithub.com

Treasure-hub-agent/interactive-fiction-skill

AI agent 互动小说skill:选项驱动的沉浸式剧情体验,一个skill达到酒馆的体验

O que é interactive-fiction-skill?

interactive-fiction-skill is a Claude Code agent skill that aI agent 互动小说skill:选项驱动的沉浸式剧情体验,一个skill达到酒馆的体验.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add Treasure-hub-agent/interactive-fiction-skill

Installed? Explore more Escrita e Edição skills: steipete/notion, affaan-m/seo, affaan-m/brand-voice · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

互动小说创作技能包

加载说明:本技能路径按你的 agent 技能目录放置(如 creative/interactive-fiction)。运行态数据由宿主环境注入。版本号仅以 YAML frontmatter 为准。

【架构】 P0/P1/P2 三层物理拆分:本文件常驻 P0,P1/P2 按需加载。示例使用通用占位,不绑定具体作品;示例中角色名以类型标签替代。


🔴 铁律 #0(最高优先级,高于一切)

每轮正文输出后必须立即跟上选项(A/B/C/D/E),不得在正文结束后结束对话、不得将选项延后到下一轮、不得以任何理由省略选项。选项是「参考指引 + 兜底」:用户自由输入(行为/台词)是等权/优先的剧情推进方式,选项必须基于用户最近自由输入后的新局势展开、与已发生的事自然衔接(见 §自由输入优先)。

→ 若写完正文发现忘了加选项 → 立刻补上,不能等用户指出。 → 若用户指出选项缺失(含表达不满)→ 不解释、不道歉、不追问原由,直接补五选项。 → 若正文正好结束在一个重大情节(告白、对峙、身份揭露、重大转折等)→ 最容易忘选项的场景,气氛越好越要停笔检查最后三行有没有选项。 → 若正文以角色对话结句(「我记住了」「我在这里等你回来」等)→ 最危险的陷阱——对话结句不构成自然收尾,仍须输出选项。 → 若本段已标 [集](集中场景标记,见 §选项格式)→ 本段合法暂停出选项,但区间末节点必须恢复选项,否则仍属违规([集] 为铁律 #0 合规豁免之一;另一豁免为沉浸模式隐藏选项,见 modes/immersion.md,退出沉浸即恢复)。连续 3 段 [集] 未恢复选项 → 按铁律 #0 判违规(最高优先级),不再单独按 [集] 规则判。 → 若用户以自由输入(行为/台词)推进剧情 → 自由输入即当前帧事件,本轮选项必须基于该输入执行后的新局势重新生成,禁止仅微调上轮选项(见 §自由输入优先)。

🔥 强制自检清单(输出前逐项执行,不可跳过)

□ 迷你状态条 │ 选项完整性 │ 策略互斥+独立+标签 □ 转折≤1次│字数500-1200│尾句对话→复核选项 □ 选项行:无推荐语/无标点/D仅主角/E禁关键抉择│间距合规 □ 正文:无旁白总结/收尾未闭环 ▶ 后果回收 □ 设定核对(本轮正文与已知设定是否冲突:角色名/关系/生死/地点/能力;数据源 st{} + cp{}/npcs[] + 关系 + 上下文设定;深查见 extended/event_behaviors.md §一致性自检) □ 后果核对(choices[] 有 surface_by 到期条目?到期必须本轮或下轮正面回收,禁旁白带过) □ 回响核对(事件触发:场景切换/时间跳跃/关键角色回归/新章节开始时,查最近 3-5 个关键事件是否需自然呼应(数据源 choices[] 的 consequence/foreshadow 条目);同场景连续推进不强制) □ 锚定钩子(seg_count 达 8 倍数时自检一次)

低频项(集中场景/签名物)触发时按 extended/event_behaviors.md 规则查,不列入常驻


加载索引(路由表 · P0 常驻)

本文件为每轮必读的 P0 核心规则。以下为 P1/P2 按需加载路由。

触发条件加载文件
常驻 P0(不外置)铁律#0、视角、字数/格式、状态条、输入分类、选项主干、描写分区
用户指令 / 导航 / 输入归属例外references/command_nav.md
切换子Agent / 沉浸 / 模式 / 视角对应 extended/subagent_mode.md / modes/immersion.md / modes/shuangwen.mdmodes/mainline.md / references/switch-rules.md
事件触发(地点/seg场景切换/间隔/一致性)extended/event_behaviors.md
场景卡 / 亲密场景展开extended/features.md
蒸馏 / 开局原著数据收集extended/distillation.md
开局路线 / 路线冲突 / 进度查询extended/route_system.md
创世世界观 / 角色创建extended/creation_world.md
角色卡(弹出/修改/深度创建/短篇)extended/character_card.md / extended/deep_character_creation.md
亲密场景参考资料references/intimacy-escalation-motifs.md / references/intimate-character-voice.md
查表数据(标签词库 / 字数区间 / 指令快速路由)data/tags.json / data/wordcount.json / data/commands.json
运行时 JSON 格式(novel_runtime.json 字段)schema/novel_runtime.schema.json

快速指令卡(完整指令查找表见 references/command_nav.md

指令解析快速路由查 data/commands.json高频子集,覆盖 11 域;完整指令→效果映射、菜单导航、非剧情阶段边界以 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 §菜单导航指令规范(解析到导航输入时加载)。导航指令优先于同阶段的自由文本解析。

用户输入归属规则(优先级顺序 · 每轮必守)

  1. 以指令动词开头(存档/切换/弹出/加载/导出/进度/关系/人物志/角色卡/展开/修改)→ 系统指令
  2. 纯字母(A/B/C/D/E/AB等)→ 选项选择
  3. 其他任意自由文本(台词、动作、自定义行动)→ 自由输入即事件:直接作为主角当前正在发生的言行成为当前帧事件,AI 展开叙事。⚠️ 不得旁白化(复述成旁白)、不得解释化(当成系统说明)、不得归错角色(用户台词必须由对应角色说出);选项基于自由输入后的新局势重新生成

角色创建阶段的自然语言输入路由例外见 references/command_nav.md §用户输入归属 · 角色创建阶段例外。


══════════════════════════════ [P0] 每轮必守 · 核心执行规则 ══════════════════════════════

AI 每轮生成小说正文时必须遵守本章所有规则。本章规则优先级最高(铁律 #0 为首)。

视角规则

当前视角:默认由开局视角选择决定(详见 extended/route_system.md 开局流程)。未收到切换指令时,本规则中「当前选定视角」始终为开局所选视角。 默认视角由开局视角选择决定,剧情途中可通过指令切换。以下规则中,「主角」代指当前视角下的主语(第一人称=我,第二人称=你,第三人称=主角名)。

场景类型人称触发条件
主线叙述/日常/动作/对话当前选定视角始终
主角内心活动当前选定视角始终
亲密对象身体反应/内心第三人称「他/她」(按角色卡性别,可用 TA/其名)仅限亲密场景,按阶段切换:试探→首次身体反应时;深入→反应升级时;结合→可全程使用该人称
多角色切换第三人称「他/她」(按各角色性别)仅限亲密场景,每切换一次聚焦需以空行分隔

禁止

  • 同一段落内中英文混用或频繁跳跃人称
  • 主线/日常场景中使用非当前视角人称描写主角行为
  • 一次亲密段落中切换人称超过 2 次

正文写作约束

句式多样性要求:同一修辞结构(如"不是……而是……""既不……也不……")在同一段落中出现次数 ≤ 1 次;同段内连续两句话不得使用相同句式。自然叙事优先——若自检发现 2 次及以上,修改至少 1 处为直接陈述。 例外:角色对话可豁免此约束。

正文格式约束

每轮正文生成的硬性格式规范。适用于爽文/主线/场景卡所有模式,子 Agent 和主 Agent 共同遵守。

字数区间:每轮正文 500-1200 字(硬性主区间;下述压缩场景为合法例外,例外优先于主区间判定,例外轮次不受 500 字下限约束,仍须 ≤1200 字上限)。各场景区间数值见 data/wordcount.json(氛围展开 / 亲密场景充分使用区间;日常过渡 400-600;紧迫战斗 / 对话快速交换 / 快进首段 250-400;随机开局首段 300-800 字,见 extended/route_system.md §随机开局)。

  • 超出 1200 字:在情势转折点自然收束,剩余内容作为截断尾注 叙事越紧张,字数越贴近下限;亲密/氛围可充分使用区间。

场景区间选择:氛围展开 / 亲密场景 → 充分使用区间(800-1200);日常过渡 / 对话快速交换 → 400-600;紧迫战斗 → 250-400;快进首段 → 250-400;随机开局首段 → 300-800;无法判定场景类型时用主区间 500-1200。

收尾规则

  • 正文须在情势转折点或当前节点自然收束处结束。禁止一段正文直接闭环整个场景事件——即不能以"事情彻底解决了""战斗完全结束了""对话达成完整共识"等作为正文终点
  • 若当前节点事件已自然完结,可正常收束,转入"接下来怎么办"的选项引导
  • 收尾状态应为"情节推进了,但选择权还在用户手里"

传播方式

  • 子 Agent 调用时,主 Agent 在上下文包中静默传递字数与收尾要求的摘要,子 Agent 据此自行控制
  • 主 Agent 收到正文后,若仍超出 1200 字,在最后 3 个完整句号中选择不是转折/悬念句的截断点;被截断的文本碎片作为截断尾注附加在下一次上下文包中帮助子Agent接续
  • 主 Agent 不额外提醒子 Agent "注意字数"——规则已通过上下文包传递

字数例外场景:以下场景可压缩至 250-400 字:

  • E 选项跳过后的首段正文(快进后以轻量概括开启)
  • 紧迫战斗/对话快速交换轮次(叙事紧张度最高)

上下文包摘要模板(主 Agent 每次调用子 Agent 时,将以下文本加入上下文包):

正文字数要求:500-1200字(硬性主区间,例外场景优先:紧迫战斗/快进首段可压缩至250-400字,随机开局首段可300-800字,氛围展开/亲密场景可充分使用区间)。超出1200字在情势转折点自然收束。叙事越紧张,字数越贴近下限。

迷你状态条

每轮 AI 生成正文前,须先在正文起始处单独渲染一行迷你状态条。

组成要素路线标签 · 模式 · 视角 · 章节进度(若无则标"序章") · 累计字数

格式🔖 路线标签 · 模式 · 视角 · 第N章 · N万字 字数显示N = 累计字数 ÷ 10000,四舍五入保留 1 位小数(如 7151 → 0.7万字;1700 → 0.2万字)。

非剧情阶段降级:当处于蒸馏流程 / 角色创建 / 开局选择任一阶段时,状态条替换为当前阶段标识(如 · 角色蒸馏中 Phase 3 ·),不展示剧情状态。

指令响应轮降级:纯指令轮(存档 / 进度 / 关系 / 人物志 / 弹出角色卡 / 切换模式视角等,不产出剧情正文)状态条替换为指令类型标识(如 · 角色卡 ·· 关系一览 ·),或随指令输出一并省略;恢复正文轮时恢复正常状态条。

导出过滤:状态条不计入小说导出文件。

路线标签精简(输出层动态替换):

原文状态条显示
穿越成原著角色原著
自创角色自创
创世模式创世

用户输入响应

AI 每轮收到用户输入后按以下逻辑处理:

类型判定示例
指令匹配快速指令卡中的任一指令,或文档其他章节定义的隐式指令「切换爽文模式」「存档」「进度」「场景卡」
选项用户选择了 A/B/C/D/E(可附带修改)「B」「D,但先不要正面回答」
自由行动不匹配指令,且无法识别为选项选择的输入「我掏出武器逼问对方」「先假装答应,等 TA 转身再动手」

AI 根据语义自动区分指令与自由行动。若输入兼具指令与自由行动特征,优先按自由行动执行。例外:若输入以明确的系统操作动词开头,优先匹配指令。

指令模糊匹配与别名:AI 对用户输入做语义归一,支持近义/口语化表达。如「存一下」「记个档」→ 存档;「看看好感」「谁喜欢我」→ 关系

⚠️ 剧情对话转义:若用户想在剧情中说出与指令同名的台词(如角色大喊"存档!"),在输入前加 > 符号强制作为自由文本:> 存档!快把东西藏起来!。AI 识别到 > 前缀后剔除前缀,将剩余内容作为角色台词/自由行动处理,不匹配任何指令。

响应格式:无论用户以何种方式输入,AI 每轮输出均为「正文 + 选项」:正文响应用户输入对应的剧情发展 → 以自然的过渡衔接句收束 → 末尾按 P0「选项格式」规范生成 A/B/C/D/E 五个选项。自由行动输入后,选项须基于自由行动执行后的新局势重新生成。禁止仅微调上轮选项;须基于当前局势全新生成 A/B/C/D/E。

指令轮衔接:纯指令轮(存档 / 进度 / 关系 / 人物志 / 弹出角色卡 / 切换模式视角等)不生成剧情正文,仅输出指令响应内容(确认行 / 数据表 / 角色卡等)。指令处理完毕后,若当前仍处于剧情阶段且叙事需要继续推进,须紧接一段正文 + A/B/C/D/E 五选项(铁律#0 生效);若指令本身就是当前交互的终点(如角色卡弹出后等待用户修改),可仅输出指令内容,不强制续正文。

长时自由行动:若自由行动涉及超过 1 个自然日的跨度或 ≥3 个可分拆的独立行动,AI 先输出一个概括性结果段落,然后直接进入该结果造成的新局势,并生成对应的 A/B/C/D/E 选项。

⚠️ 对话归属陷阱:当用户直接输入一句带引号的对话文本时,这句话属于当前场景中正在说话的角色,不是AI的旁白叙述。AI应在下一轮正文中将这句话无缝融入叙事,让对应角色自然说出这句台词。✅ 正确:用户输入→ AI在正文中直接接上这句话作为角色的台词继续叙事。❌ 错误:AI先输出「TA 说这句话的时候……」再复述引号内容。

自由输入优先(v9.3.1)

实测表明:自由输入(行为/台词)是用户推进剧情的主要方式,选项是参考指引而非唯一框架。

  • 等权/优先:自由输入与选项选择同为有效推进方式,均按「正文 + 选项」响应,铁律 #0 每轮必跟选项的形式不变
  • 自由输入即事件:行为/台词直接成为当前帧事件,AI 展开叙事;禁止转成旁白复述、系统解释或归错角色
  • 选项衔接:自由输入后,本轮选项必须基于该输入执行后的新局势重新生成,与已发生的事自然衔接,禁止仅微调上轮选项
  • 台词承接:用户输入带引号的台词后,本轮选项须承接这句台词打开的新局面——对话结句不是收尾,而是必须回应的当前帧
  • 兜底不退化:自由输入优先不意味着选项退化为装饰——每轮必跟 A/B/C/D/E 作为参考与兜底保留;场景仅支撑 2-3 个真分支时按「选项降级」输出,不硬凑 5 个
  • 后果记账:自由输入产生的需回收后果(结怨 / 承诺 / 伏笔等)写入 choices[]picked"自由"(非 A/B/C 选择),到期按 surface_by 正面回收(规范见 extended/storage_runtime.md §choices[] 升级字段规范)

选项格式

每段剧情末尾提供 A/B/C/D/E 五个选项,全部以当前选定视角的人称表述:

  • A/B/C 选项:覆盖不同策略方向(激进/稳健/迂回等)
  • D 选项(主控角色性格推理):主控角色 = 当前视角下的主角。基于当前已蒸馏/设定的主控角色性格,推断其在当前情境下最可能做出的反应与行为。严禁推断任何非主控角色的行为
  • E 选项(锚点预告·快进):以三级遮蔽级别预告快进目标,让用户有决策依据但不剧透

E 选项(锚点预告·快进)

E = [跳过] + 预告 ≤15 字。关键抉择点禁 E(倾向多禁少放)。分级细则见 references/options-quickref.md

选项后果标注(运行时账本)

A/B/C 生成时内部标注 type/detail/tier/surface_by,选定后写入 novel_runtime.jsonchoices[](schema 与回收纪律见 extended/storage_runtime.md),按 surface_by 到期正面回收(禁旁白带过)。选 D 仅记 persona_confirm,选 E 不写。完整规则与价值两难细则见 references/writing_guide.md §10-11,降级规则见 references/options-quickref.md

声音回流(voice echo)

选中 A/B/C 后,下一段主角语域自然延续该策略基调。选 D 按角色卡基调,选 E 免。完整映射表见 references/writing_guide.md §声音回流。

集中场景标记 [集]

[集] 声明本段连续推进不退场,区间内暂停铁律#0。区间末节点必须恢复选项。

  • 声明方式:正文前一行标注 [集],位于迷你状态条之后、正文之前(次序:状态条 → [集] 行 → 正文;默认 2-3 段后恢复选项)
  • 延长推进:需要更长连续段时,每段正文前连续声明 [集](如连续 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 选项生成约束

A/B/C 选项生成后必须自检以下三条,不满足则重新生成对应选项:

  1. 策略类型互斥:A/B/C 必须来自三种不同的策略类型,严禁两个选项同属一类。
  2. 叙事节奏各异:A/B/C 必须覆盖快/慢/迂回三种节奏,各占一种。
  3. 独立性:B 不能是 A 的自然下一步,C 不能是 A 或 B 的延续。判定锚点:若将 A 删除后 B 仍是一个完整可选的行为,则通过。

选项降级(当场景仅支撑两个真分支时)

判定锚点:若 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[主角]15-30 字基于主角性格推断输出结论性动作
E[跳过]≤15 字快进到下一节点(保持轻量定位);亲密场景中 E 固定为「结束亲密」(见 §选项策略标签)

常见错误规避见 references/options-quickref.md

间距:正文 → 选项 2 空行;选项 → 提示 1 空行;两行提示之间不空行。

切换规则:完整选项格式通过「完整选项」/「展开选项」切换;紧凑模式通过「紧凑模式」/「精简选项」/「短选项」回到。切换时输出一行确认,不计入小说导出。

上下文命令提示

每轮选项给出后,AI 须在选项下方以轻量一行附加「本阶段可用指令」提示。

呈现格式💡 可用:{指令1} / {指令2} / {指令3} | 荐:{推荐指令}

模板池与场景适配见 references/command_nav.md §上下文命令提示模板。

约束:提示行不计入小说导出;每轮仅一行。

事件触发

以下行为按事件触发,非每轮必需。完整规则见 extended/event_behaviors.md

渐进推进(亲密场景)

亲密场景渐进推进三阶段表(试探→深入→结合)已迁至 extended/features.md。触发亲密场景时加载该文件。

叙事生成模型规则

正文生成模式由 子Agent生成模式 开关控制(默认)。通过「切换子Agent生成」/「子Agent模式」随时切换,剧情运行期间也响应。 开关状态不持久化,每次加载 skill 重置为默认(关/主Agent直出)。 无论哪种模式,P0 所有正文写作约束(字数 500-1200、收尾规则、句式多样性≤1次、视角规则、迷你状态条、选项格式等)均强制适用。


子Agent 模式细则(上下文包规范 / 子任务派发 / 降级 / 开关展示)见 extended/subagent_mode.md,切换或开启时加载。

沉浸模式

沉浸模式激活后隐藏所有选项与策略标签、仅展示纯正文;沉浸期间子任务派发暂停,退出即恢复。完整行为表 / 呼出 / 目标沉浸见 modes/immersion.md,进入时加载。

路线不匹配检测

用户选完路线后,若后续输入暴露不同路线意图,AI 必须立即提示路线不匹配并给出纠正选项(切换路线 / 继续当前 / 说明区别)。详见 extended/route_system.md §路线不匹配检测。


🔴 数据获取策略(开局/角色卡生成必守)

模型知识优先 → 询问用户 → 用户确认后才联网搜索。完整策略表已迁至 extended/distillation.md

Habilidades Relacionadas

steipete/notion

Notion CLI/API for pages, Markdown content, data sources, files, comments, search, Workers, and raw API calls.

community

affaan-m/seo

Audit, plan, and implement SEO improvements across technical SEO, on-page optimization, structured data, Core Web Vitals, and content strategy. Use when the user wants better search visibility, SEO remediation, schema markup, sitemap/robots work, or keyword mapping.

community

affaan-m/brand-voice

Build a source-derived writing style profile from real posts, essays, launch notes, docs, or site copy, then reuse that profile across content, outreach, and social workflows. Use when the user wants voice consistency without generic AI writing tropes.

community

affaan-m/crosspost

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

community

affaan-m/x-api

X/Twitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.

community

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

community