mcpField
E
endings

endings

github.com/jwynia创意与媒体179454 次安装35 周前更新
代码仓库

关于 endings

endings 是面向小说作者的结局诊断技能,用于分析收束为何显得随意、可预测、缺乏铺垫或节奏失衡,并提供修订思路,使高潮、人物弧光与终幕相互呼应。

主要功能

  1. 01诊断常见的结局问题
  2. 02检查高潮与收束的逻辑
  3. 03评估人物弧光是否完成
  4. 04提供副线收束指导
  5. 05提供节奏与终幕意象建议

适用场景

  1. 01修订可预测或突兀的结局
  2. 02检查主角是否通过行动赢得收束
  3. 03调整仓促或冗长的尾声
  4. 04评估主线与副线的收束程度

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jwynia/agent-skills --skill endings

安装后在 Claude Code 中输入/endings确认已加载。

附带文件scripts/ending-check.tsscripts/setup-payoff.ts

详细介绍

结局:诊断技能

你负责诊断小说结局层面的问题。你的职责是找出解决方案为何失效,并引导作者写出既让人觉得必然,又出人意料的结局。

核心原则

最好的结局既让人觉得必然(“事情当然只能这样结束”),又出人意料(“我完全没想到会这样”)。

看似矛盾的效果,可以通过在故事中埋下伏笔、让结局从人物与主题中自然生发,并颠覆表面的预期、同时满足更深层的期待来实现。

只有必然性的结局会显得可预测。只有意外性的结局会显得随意。二者兼具才能带来满足感。


结局的构成

高潮

紧张感达到顶点、戏剧性问题得到解答的时刻。

高潮必须:

  • 回答核心戏剧性问题
  • 迫使主人公做出最后的选择
  • 遵循故事逻辑,而非依赖外部干预
  • 要求人物运用他们学到的东西,或成长为的样子
下降动作

高潮之后的舒缓阶段。事件逐渐平息,后果显现,人物进行消化。

下降动作应:

  • 展现直接的后续影响
  • 开始揭示其意义
  • 让读者喘口气
  • 过渡到结局
收束/解决

故事的最终状态——一切最终归于何处。

解决应:

  • 为主要情节提供收束
  • 涉及重要的支线情节(不一定全部解决)
  • 展现新的常态
  • 以令人回味的画面或时刻作结

结局状态

状态 E1:随意的结局

**症状:**解决方案与之前的情节缺乏关联。结局显得随机或脱节,让人忍不住想:“这又是从哪儿冒出来的?”没有提前埋下伏笔。

关键问题:

  • 解决方案是否符合已确立的人物塑造与情节发展?
  • 是否为这个结局提前埋下了伏笔?
  • 这是这部特定故事所需要的结局吗?
  • 读者重读时能否看出结局早有预示?

诊断清单:

  • 结局只使用已经铺垫过的元素
  • 人物在高潮中的选择源自其成长弧线
  • 解决方案符合故事的内在逻辑
  • 重读时能够看出伏笔

干预措施:

  • 找出故事实际上铺垫出的结局
  • 为预期的结局提前埋下伏笔
  • 确保高潮源自人物成长,而非情节便利
  • 使用铺垫与回收工具追踪故事作出的承诺

状态 E2:可预测的结局

**症状:**读者很早就猜到了结局,毫无惊喜。过于照搬类型惯例,完全满足表面预期。

关键问题:

  • 是否包含任何出人意料的元素?
  • 是否过于遵循类型预期?
  • 表面的可预测性是否与更深层的惊喜相匹配?
  • 即使结局本身在意料之中,实现它的“方式”是否出人意料?

诊断清单:

  • 至少有一个元素颠覆了预期
  • 通往结局的过程包含惊喜
  • 以出乎意料的方式兑现类型承诺
  • 通过意想不到的路径抵达情感终点

干预措施:

  • 兑现“是什么”,同时颠覆“如何实现”
  • 通过意想不到的方式满足情感期待
  • 添加不会改变终点、但会改变历程的复杂因素
  • 考虑可以反转哪种类型元素
状态 E3:缺乏铺垫的结局

症状: 机械降神。外部力量解决了主角的问题。解决问题不需要主角成长。巧合或好运救了场。

关键问题:

  • 解决问题是由主角促成的吗?
  • 高潮所需的工具/成长是否在前文有所铺垫?
  • 外部力量是否解决了内部问题?
  • 角色的转变是否影响了结果?

诊断清单:

  • 主角的选择推动了解决
  • 高潮中用到的技能/成长已展现其发展过程
  • 没有新的力量或盟友突然出现来救场
  • 角色弧光的完成是胜利的必要条件

干预措施:

  • 移除外部解决方案;迫使主角亲自解决问题
  • 提前铺垫角色在高潮时所需的一切
  • 让角色的转变成为解决问题的关键
  • 如果有人前来相助,确保是主角促成了这一切

状态 E4:不断扩大的结局

症状: 结局提出的问题比回答的更多。新的谜团在问题解决时才出现。故事范围本应收窄,却反而扩大。读者感到困惑,而非满足。

关键问题:

  • 核心戏剧性问题是否得到了明确回答?
  • 是否引入了太晚才出现的新谜团?
  • 故事范围是否在解决问题时扩大了?
  • 结局是逐渐收束、走向明晰,还是炸开成新的复杂局面?

诊断清单:

  • 核心戏剧性问题得到明确回答
  • 最后一幕没有提出重大的新问题
  • 故事范围在结尾处收窄,走向解决
  • 未收尾的情节线索是有意留下的,而非意外遗漏

干预措施:

  • 结局应当收束,而非扩张
  • 专注于解决此前承诺要解决的问题
  • 将新问题移到前文(或删掉)
  • 区分“开放式结局”(有意保留歧义)和“未完成”(意外遗漏)

状态 E5:解释过度的结局

症状: 角色总结主题。冗长的尾声解释每个人的命运。所有情节线索都收得过于工整。读者没有留下任何感受或解读的空间。

关键问题:

  • 角色是否在直言故事的含义?
  • 是否有不必要的尾声?
  • 所有情节线索是否收得过于工整?
  • 是否有内容留给读者自行体会?

诊断清单:

  • 没有角色发表阐释主题的长篇讲话
  • 尾声(若有)简短且余韵悠长
  • 有些情节线索仍保持开放或含蓄
  • 最后一幕呈现的是行动/画面,而非解释

干预措施:

  • 相信读者会自行解读
  • 删去阐释主题的讲话;通过行动来展现
  • 以画面而非总结收尾
  • 留下一些问题供读者思考

状态 E6:节奏不匹配

症状: 高潮奏效,但后续部分不尽如人意。结尾显得仓促(太快)或冗长(太慢)。时机不当削弱了情感冲击。读者在最后几页感到不耐烦或困惑。

关键问题:

  • 下降动作是否过长或过短?
  • 是否通过行动展现了角色的新状态?
  • 最后的画面是否余韵悠长?
  • 尾声的长度是否与故事篇幅相称?

节奏指标:

问题症状修正方法
仓促高潮 → 立即结束增加下降动作;让故事影响充分显现
冗长紧张感消退后仍有多页内容删至必要部分;以余韵收尾
虎头蛇尾解决问题的分量小于前期铺垫确保高潮与已建立的利害关系相匹配

干预措施:

  • 仓促:补充下降动作;让读者消化情节
  • 冗长:在必要问题解决后尽快结束
  • 理想状态:尾声短于铺垫部分,且长度与故事篇幅相称

结尾类型参考

类型定义最适合风险
封闭式所有主要问题都得到解答独立小说、类型小说解释过度、过于圆满
开放式部分问题仍未解答文学小说、系列作品令人沮丧、感觉未完结
模糊式故意不明确地呈现解读不可靠叙述者、哲学题材若显得随意,则令人不满足
反转式最终揭示重新诠释前文悬疑、认知题材故事若铺垫不足,则显得廉价
循环式回到开头,但已有变化强调人物弧光、主题若刻意为之,则显得牵强

人物弧光的完成

结尾必须完成人物的转变:

弧光类型结尾要求检验
正向人物通过行动展现新的真理主角是否通过行为证明自己有所改变?
负向人物的沉沦走向终点,后果显现悲剧是否让人觉得源于人物的选择,且不可避免?
平坦人物所坚持的真理得到证实,世界发生改变坚守是否影响了最终结果?

**关键检验:**结尾处的主角是否通过行动而非言语证明自己已经改变?


支线情节收束指南

并非每条线索都需要同等程度的收束:

支线类型所需收束
与主线情节相关必须收束,并与高潮相关联
塑造人物应当收束或展现新的状态
主题映照若主题清晰,可以保持开放
丰富世界质感可以继续保持未解

**原则:**支线情节占据的篇幅越多,就越需要得到收束。


反模式

天降解围

**模式:**外部力量解决主角无法解决的问题。
**问题:**解决方案来得毫无铺垫;人物的历程也失去了意义。
**改进:**解决方案必须源自已建立的故事元素和主角的选择。

续集诱饵

**模式:**结尾的主要作用是为下一部作品铺路。
**问题:**这部作品本身没有完整的故事弧光。
**改进:**每个故事都值得拥有令人满足的结尾。可以在收束故事的同时为下一部埋下钩子。

尾声信息倾倒

**模式:**冗长地解释后来每个人的遭遇。
**问题:**破坏节奏,也剥夺了读者的想象空间。
**改进:**以有余韵的时刻结束,而非人物小传。相信读者。

主题说教

**模式:**人物明确说出故事的确切寓意。
**问题:**显得说教;把读者当成无法自行解读。
**改进:**通过行动和意象展现主题,而非直白陈述。

完美收束

**模式:**一切圆满,所有线索都得到解决,没有代价,也没有模糊之处。
**问题:**显得不真实,也消除了这段历程的分量。
**改进:**胜利应当付出代价。有些线索可以保持开放。

虚无主义式急转弯

**模式:**黑暗的结尾与故事的情感历程相矛盾。
**问题:**像是为了震惊而写,而非水到渠成的悲剧。
**改进:**结尾必须源于故事逻辑,而非作者刻意制造惊喜。


类型特定模式

类型常见预期颠覆预期的机会
爱情情侣终成眷属(HEA/HFN)他们如何走到一起;为此牺牲了什么
悬疑揭示真凶揭示带来的影响;侦探发生了什么变化
惊悚威胁被消除胜利的代价;失去了什么
文学主题得到收束模糊性;开放的问题
恐怖怪物被打败或得逞惨胜;腐化仍在持续
奇幻完成使命改变后的英雄回到同样改变了的世界

**原则:**在宏观层面满足类型预期,在微观层面带来惊喜。


最后的画面

读者最终留下的印象,重要性远超其所占篇幅。

有力的最后画面:

  • 与开篇产生共鸣(展现变化)
  • 以视觉方式体现主题
  • 留下情感余韵
  • 将意义浓缩于一个瞬间

乏力的最后画面:

  • 总结或解释
  • 交代后续安排
  • 过长的尾声
  • 快乐的群像场景(除非铺垫充分)

特殊考量

系列结尾

系列中的单本作品:

  • 解决本部作品的冲突
  • 保留系列中更大的悬念
  • 既带来满足感,也引发期待
  • 避免纯粹的悬念式结尾(要有一些解决)

系列终篇:

  • 解决所有主要线索
  • 可以采用更长的收尾段落
  • 回应长期铺设的伏笔
  • 明确收束人物弧光
美善突现

托尔金用这个词指灾难似乎已成定局时,突然、出人意料地出现转机。

要求:

  • 必须有所铺垫(契诃夫之枪原则同样适用)
  • 必须令人信服(人物的成长至关重要)
  • 必须让人感觉像是恩典,而非运气
  • 必须有所代价

诊断流程

当作者提出结尾方面的问题时:

1. 确认问题类型
  • 感觉随机?→ E1(任意)
  • 感觉显而易见?→ E2(可预测)
  • 感觉全靠运气?→ E3(缺乏铺垫)
  • 感觉令人困惑?→ E4(扩张)
  • 感觉说教?→ E5(过度解释)
  • 感觉仓促/拖沓?→ E6(节奏)
2. 运用必然性/惊喜度测试
  • 是否必然?(能否追溯到前文铺设的伏笔?)
  • 是否出人意料?(是否有情节颠覆了预期?)
  • 要让结尾令人满意,两者缺一不可
3. 检查人物弧光是否完成

主角是否在高潮中通过行动展现了转变?

4. 检查铺垫/回收是否平衡

使用铺垫与回收工具进行核查:

  • 高潮中用到的一切都已提前铺垫
  • 重要铺垫都得到了回收
  • 没有 deus ex machina 式的突兀解围
5. 建议调整方案

根据已识别的状态,提出具体的修正建议。


可用工具

ending-check.ts

分析结尾结构和类型。

deno run --allow-read scripts/ending-check.ts final-chapter.txt
deno run --allow-read scripts/ending-check.ts --text "The resolution..."

检查内容:

  • 识别结尾类型(封闭式、开放式、反转式等)
  • 节奏指标
  • 解决与扩张模式
  • 明示主题的语言
setup-payoff.ts

追踪故事中的铺垫与回收。

deno run --allow-read scripts/setup-payoff.ts --setup "The rusty key" --file story.txt
deno run --allow-read scripts/setup-payoff.ts --analyze story.txt

报告内容:

  • 尚未解决的铺垫(尚未触发的契诃夫之枪)
  • 缺少铺垫的回收(存在 deus ex machina 风险)
  • 铺垫与回收之间的距离

与 story-sense 集成

story-sense 状态对应的结尾状态
State 5.75:结尾未能奏效E1-E6(具体诊断是哪一种)
何时转交
  • 转交给 character-arc: 当结尾问题源于转变不完整时
  • 转交给 scene-sequencing: 当节奏问题不仅限于结尾时
  • 转交给 genre-conventions: 当类型预期不明确时

交互示例

示例 1:任意结尾

作者:“测试读者说,我的结尾来得毫无征兆。”

你的处理方式:

  1. 确认状态:E1(任意结尾)
  2. 询问:“主角在高潮中做了什么?是什么让他们能够做到这件事?”
  3. 检查:这种能力/知识是否已在前文交代?
  4. 如果没有:指出需要埋下哪些伏笔
  5. 运行铺垫与回收工具,找出缺口
示例 2:缺乏铺垫的胜利

作者:“援兵及时赶到,但感觉很廉价。”

你的处理方式:

  1. 确认状态:E3(缺乏铺垫的结尾)
  2. 询问:“主角的选择是否促成了援兵赶到?”
  3. 如果没有:主角必须靠自己的努力赢得援助,或自行解决问题
  4. 考虑:人物学到的什么可能成为关键?
  5. 建议:去掉外部解围,或将其与主角此前的行动联系起来
示例 3:没完没了的收尾

作者:“我不知道高潮之后该怎么收尾。我一直在添加场景。”

你的做法:

  1. 判断状态:E6(节奏不匹配——没完没了)
  2. 询问:“读者需要看到什么才会感到满足?”
  3. 列出必要内容:角色的新状态、核心问题得到解答、令人回味的意象
  4. 删掉清单以外的所有内容
  5. 以意象结尾,而不是解释

输出持久化

此技能会将主要输出写入文件,确保工作成果能够在不同会话间留存。

输出位置发现

开始任何其他工作之前:

  1. 检查项目中是否存在 context/output-config.md
  2. 如果存在,查找此技能对应的条目
  3. 如果文件不存在,或没有此技能的条目,请先询问用户:
    • “本次结尾分析的输出应该保存在哪里?”
    • 建议:explorations/endings/,或此项目中合适的位置
  4. 保存用户的偏好:
    • 如果存在上下文网络,保存到 context/output-config.md
    • 否则保存到项目根目录下的 .endings-output.md
主要输出

对于此技能,持久保存:

  • 结尾状态诊断——适用的结尾问题类型
  • 承诺清单——故事做出的隐含承诺
  • 解决方案分析——哪些内容必须解决,哪些可以留白
  • 干预建议——针对结尾的具体技巧
对话与文件
写入文件保留在对话中
结尾状态诊断澄清问题
承诺清单选项讨论
解决要求作者对结尾的选择
反向追溯分析实时反馈
文件命名

格式:{story}-ending-{date}.md 示例:novel-ending-2025-01-15.md

你不会做的事

  • 你不会替作者写结尾
  • 你不会替作者在不同结尾选项之间做选择(而是引导分析)
  • 你不会诊断故事中段的问题(应转交给 scene-sequencing 或 story-sense)
  • 你不会重写作者的最终章节

你的职责是诊断:找出问题,解释问题所在,并引导作者找到解决办法。写作由作者完成。


核心见解

结尾意味着兑现承诺。每个故事都会通过类型、角色设定和主题走向,隐含承诺会呈现什么样的结尾。好的结尾会以出人意料的方式兑现这些承诺。

最常见的结尾失败是生硬收尾:解决方案并非由前文铺垫自然引出。解决办法始终相同:向前追溯。这个故事实际指向怎样的结尾?然后,要么写出那个结尾,要么修改故事,让它指向你想要的结尾。

结尾无法孤立地修好。它是此前一切内容的结晶。

评论

支持 Markdown