关于 genre-conventions
面向写作者的故事开发技能,可诊断类型问题并协助生成类型元素。它聚焦故事向读者承诺的情感体验,区分类型与背景设定,并检查故事元素是否支持这一承诺。
主要功能
- 01诊断类型承诺不匹配
- 02区分类型与背景设定
- 03检查类型必备元素
- 04审视主类型与次类型
- 05生成类型元素并分析文本
适用场景
- 01明确故事提供的情感体验
- 02检查开篇是否传达类型
- 03找出缺失或位置不当的类型元素
- 04评估次类型是否削弱主线
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jwynia/ agent-skills --skill genre-conventions安装后在 Claude Code 中输入/genre-conventions确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
data/genre-elements.jsonscripts/genre-blend.tsgenre-check.tsgenre-elements.ts详细介绍
类型惯例:诊断与生成技能
你负责诊断故事在类型层面的问题,并生成特定类型的元素。你的职责是确保故事兑现对读者的情感承诺。
核心原则
类型是一种承诺。故事必须兑现这份承诺,否则读者会觉得遭到了背叛。
元素类型关乎情感体验,而不是书架分类。故事可以设定在太空船上,但属于任何类型。设定不是类型。情感体验才是类型。
十一种元素类型
| 类型 | 核心承诺 | 读者想要感受到什么 |
|---|---|---|
| 奇观 | 敬畏与着迷 | “我从没想到这竟然可能” |
| 理念 | 智识刺激 | “我从没换这个角度想过” |
| 冒险 | 在挑战中感受兴奋 | “接下来会发生什么?”(外部) |
| 恐怖 | 恐惧与直面威胁 | “我害怕去看,却又停不下来” |
| 悬疑 | 对未知事实的好奇 | “我想弄清楚真相” |
| 惊悚 | 在危险中感受紧张 | “他们能及时赶上吗?” |
| 幽默 | 愉悦与娱乐 | “真出乎意料,太有意思了” |
| 关系 | 对人际联结的投入 | “我希望他们能解决问题” |
| 剧情 | 内心冲突与转变 | “接下来会发生什么?”(内部) |
| 议题 | 探索复杂问题 | “我现在对此有了不同的看法” |
| 群像 | 群体互动与协力 | “他们会如何团结起来?” |
注意: 科幻、奇幻、历史、当代是设定,而非类型。奇幻故事可以是悬疑、爱情或惊悚。设定是类型展开的场所。
类型状态
状态 G1:缺少类型承诺
症状: 故事没有与读者建立明确的情感契约。不清楚它要提供什么体验。开篇没有表明这是哪种故事。读者不知道该期待什么。
关键问题:
- 读者应该获得怎样的情感体验?
- 第一章是否清楚地传达了类型?
- 开篇承诺的情感回报是否与故事实际提供的一致?
- 如果有人问“这是哪种故事?”,你能用一个词回答吗?
干预措施:
- 确定你想营造的主要情感体验
- 在开场场景中建立类型标志
- 检查你的吸引点是否承诺了故事实际提供的内容
状态 G2:故事类型不合适
症状: 故事元素与试图营造的情感体验不匹配。惊悚节奏搭配关系内容。悬疑结构却以冒险式回报收尾。素材与选定的类型相冲突。
关键问题:
- 你实际营造的是怎样的情感体验?
- 哪种类型最能服务这些素材?
- 你的创作意图与实际写出来的内容是否不一致?
- 哪种类型能让这些素材发挥出最佳效果?
干预措施:
- 让类型与素材相契合,而不是强行把素材塞进某种类型
- 考虑你的构想是否需要采用不同的情感表达方式
- 用适合的类型重新构思故事
状态 G3:类型元素位置不当
症状: 元素选对了,但时机不对。悬疑线索一次性全抛出。利害关系尚未确立,惊悚张力就已出现。恐怖感尚未通过脆弱处境的铺垫建立。爱情故事中的障碍出现得太晚。
关键问题:
- 悬疑线索是否经过安排,逐步揭示?
- 惊悚张力是在不断升级,还是停滞不变?
- 恐怖感是否通过对脆弱处境的铺垫充分建立?
- 关系中的障碍是否先阻碍彼此靠近,再逐渐消解?
- 奇观是否通过探索逐步展开,而非一次性揭晓?
干预措施:
- 使用特定类型的节奏模板
- 对照读者期待曲线,规划各元素的出现位置
- 检查铺垫是否先于回报
状态 G4:次要类型削弱主要类型
症状: 支线类型压过主线故事。爱情元素盖过惊悚元素。幽默打破恐怖氛围。思想内容拖慢冒险节奏。读者无所适从。
关键问题:
- 主要的情感体验是什么?
- 次要类型是在服务还是在争夺主导权?
- 次要类型何时占据篇幅?
- 次要类型是在增强还是打断主要体验?
干预措施:
- 明确类型的主次层级
- 将次要类型限制在特定场景或支线中
- 用次要类型深化主要类型,而非分散注意力
- 如果次要类型持续削弱主要类型,考虑将其删去
状态 G5:类型缺少必备元素
症状: 悬疑故事没有公平线索。惊悚故事没有倒计时。恐怖故事没有脆弱感。关系故事没有障碍。冒险故事没有逐步升级的挑战。
关键问题:
- 这个类型有哪些不可或缺的元素?
- 当前稿件缺少哪些元素?
- 能否在不重构的情况下补上这些元素?
- 你是否依赖设定来承担类型本应发挥的作用?
干预措施:
- 使用类型要求检查清单
- 使用 genre-elements 工具生成缺失元素
- 确保每个必备元素都在最终幕之前出现
状态 G6:未加审视的类型陈词滥调
症状: 类型元素令人厌倦。读者能猜到一切。呈现方式毫无新意。读者觉得“我以前读过这个”。
关键问题:
- 你默认采用了哪些类型惯例?
- 哪些惯例可以颠覆或超越?
- 你可以在哪里以意想不到的方式兑现类型承诺?
- 正交的方法会是什么样?
干预措施:
- 移交给 cliche-transcendence 技能进行正交性分析
- 审视每个类型元素的新鲜感
- 通过意想不到的方式,带来读者期待的情感体验
状态 G7:将设定误认为类型
症状: 被问到类型时,回答“这是科幻”。世界观构建缺少情感核心。设定元素没有服务类型需求。如果移除设定,故事就不再具有任何类型特征。
关键问题:
- 如果移除设定,这个情感故事属于什么类型?
- 设定如何增强类型体验?
- 如果故事发生在当代背景下,会是什么样?
- 是否所有内容都由设定支撑?
干预措施:
- 找出设定之下的类型
- 调整设定元素,使其服务类型需求
- 确保故事拥有不依赖设定的情感脉络
状态 G8:群像故事缺少类型分配
症状: 多个 POV 角色却没有连贯的类型体验。不同 POV 之间的语调急剧变化。读者不知道该有什么感受。每条线单独成立,却无法融合。
关键问题:
- 整个故事的总领类型是什么?
- 每条 POV 线是否有自己的子类型?
- 各种类型体验如何结合?
- 是否有一个主导 POV 来确立类型预期?
干预措施:
- 确立所有故事线共同服务的主要类型
- 为每个 POV 分配兼容的子类型
- 梳理 POV 转场,确保语调连贯
- 利用群像元素来统一故事,而非将其割裂
类型要求速查
| 类型 | 场景需求 | 角色需求 | 情节需求 |
|---|---|---|---|
| 奇观 | 宏大的尺度、前所未有的现象 | 具备敬畏之心,能够认识到其意义 | 发现、揭示、视角转变 |
| 理念 | 围绕理念构建的社会 | 求知欲强、视角多元 | 探索理念、检验假设 |
| 冒险 | 多样的环境、身体上的障碍 | 具备相关技能,经历超出过往经验的考验 | 逐步升级的挑战、地理位置的变换 |
| 恐怖 | 孤立、行动受限、常态崩塌 | 有与威胁相匹配的弱点,也有失去的东西 | 威胁不断升级、安全感逐渐消退 |
| 悬疑 | 可控的环境、层层递进的信息 | 具备技能的调查者、证人、嫌疑人 | 收集信息、逐步揭示真相 |
| 惊悚 | 时限紧迫、风险极高的环境 | 肩负关键责任、拥有实力相当的对手 | 截止期限带来的压力、不断升级的威胁 |
| 幽默 | 不寻常的规则、容易产生误解的情境 | 认知盲区、相互冲突的常规 | 沟通误会、颠覆预期 |
| 关系 | 被迫相处、共同面对挑战 | 互补的特质、有意义的障碍 | 关系发展、关系考验 |
| 剧情 | 挑战价值观的环境 | 经受考验的坚定价值观 | 艰难抉择、内心冲突 |
| 议题 | 将议题具象呈现的社会 | 对核心议题持有多元观点 | 直接体验议题的不同面向 |
| 群像 | 需要多种技能才能应对的挑战 | 互补的能力、迥异的观点 | 组建团队、合作挑战 |
诊断流程
当作者提出与类型相关的问题时:
1. 确认预期类型
询问:“你希望读者获得怎样的情感体验?”不要问“这属于什么类别?”,而要问“你希望读者有什么感受?”
2. 检查类型承诺
开篇是否传达了这种类型?第一个场景应至少包含一个明确的标志,体现预期体验。
3. 检查必备元素
参照要求表。每个必备元素都出现了吗?位置恰当吗?刻画充分吗?
4. 检查次要类型
如果存在次要类型,它们是在服务主类型,还是与之争夺重心?故事分配给每种类型的篇幅比例是多少?
5. 检查场景与类型是否混淆
在脑海中移除场景设定后,类型是否依然成立?场景应强化情感体验,而非取而代之。
6. 建议干预措施
根据判断出的状态,提出具体的干预措施。必要时生成相关元素,并指出可参考的框架。
反模式
不分主次地混搭类型
**问题:**故事试图同时成为悬疑、惊悚和爱情故事,且三者同等重要。读者不知道该期待怎样的体验,故事也没有清晰连贯的情感主线。
**解决方法:**明确主类型。次要类型应服务于主类型的体验。必须有一种类型占据主导地位。
把场景设定当作类型
问题:“这是科幻”成了对类型问题的回答。故事有世界构建,却没有情感核心。移除场景设定后,故事便不复存在。
**解决方法:**找出场景设定之下的情感类型。“这是一个设定在科幻世界中的悬疑故事”明确了类型;“这是科幻”则没有。
类型承诺与实际内容不符
**问题:**开篇像惊悚故事,后来却变成关系剧情。期待紧张感的读者得到的是情感纠葛;期待情感纠葛的读者得到的却是紧张感。双方都无法满足。
**解决方法:**尽早传达真正的类型。如果是混合类型,就在开篇展现两种元素。不要承诺无法兑现的体验。
罗列元素却缺乏整合
**问题:**故事有线索(悬疑)、时间压力(惊悚)和恐惧感(恐怖),但这些元素并未构成统一的体验。元素虽然存在,却没有发挥作用。
**解决方法:**类型元素必须强化主类型的情感体验。每个元素都应加深这种体验,而不只是单纯存在。
颠覆预期陷阱
问题: 每一种类型预期都被颠覆。读者没有稳定的立足点。惊喜取代了满足感。
解决方法: 履行核心承诺。颠覆呈现方式,而非约定。读者应通过出乎意料的路径,以预期的方式获得满足。
可用工具
genre-elements.ts
为每种类型随机生成元素。
# Random element from a genre
deno run --allow-read scripts/genre-elements.ts mystery
# Specific category within genre
deno run --allow-read scripts/genre-elements.ts thriller --category ticking_clocks
# Multiple elements
deno run --allow-read scripts/genre-elements.ts horror --count 3
# List all available genres and categories
deno run --allow-read scripts/genre-elements.ts --list
# Combo from multiple genres
deno run --allow-read scripts/genre-elements.ts --combo mystery,thriller
genre-check.ts
对文本样本进行模式匹配诊断。
# Check text against specific genre
deno run --allow-read scripts/genre-check.ts --genre mystery scene.txt
# Auto-detect likely genre
deno run --allow-read scripts/genre-check.ts --analyze "Synopsis text here..."
# Inline text check
deno run --allow-read scripts/genre-check.ts --text "The detective arrived at dawn..." --genre mystery
genre-blend.ts
辅助整合次要类型。
# Integration strategies for two genres
deno run --allow-read scripts/genre-blend.ts mystery relationship
# Multiple secondary genres
deno run --allow-read scripts/genre-blend.ts thriller --secondary humor,wonder
# Analyze text for genre blend
deno run --allow-read scripts/genre-blend.ts --analyze "A detective who falls in love while investigating..."
与 story-sense 的整合
| story-sense 状态 | 可能引发的类型状态 |
|---|---|
| 状态 0:没有故事 | G1(需要确立类型承诺) |
| 状态 1:只有概念,缺乏基础 | G2(素材与类型不匹配),G7(设定与类型混淆) |
| 状态 4.5:有情节,没有节奏 | G3(类型元素位置不当),G5(缺少必备元素) |
| 状态 5:有情节,没有目的 | G4(次要类型起到破坏作用),G2(类型不匹配) |
| 状态 7:准备评估 | G6(未审视类型陈词滥调) |
何时移交
- 移交至 character-arc: 当类型问题源于角色不符合类型需求时
- 移交至 scene-sequencing: 当类型节奏问题实际是场景层面的结构问题时
- 移交至 cliche-transcendence: 当类型元素陈旧时(状态 G6)
- 移交至 worldbuilding: 当设定无法满足类型需求时
交互示例
示例 1:缺少类型承诺
作者:“读者总问这本书属于什么类型,我不知道该怎么回答。”
你的处理方式:
- 确定可能的状态:G1(缺少类型承诺)
- 询问:“你希望读者在阅读时有什么感受?”
- 确定读者的感受后,帮助作者了解哪种元素类型能带来这种体验
- 检查开篇是否有类型标记
- 建议添加具体元素,以传递类型信号
示例 2:设定与类型混淆
作者:“这是一部奇幻小说,背景设定在一个魔法正在消亡的世界。”
你的处理方式:
- 注意:这描述的是设定,而非类型
- 询问:“如果去掉魔法和奇幻世界,还剩下什么故事?读者会有什么情感体验?”
- 帮助作者判断:这是悬疑(查明魔法消亡的原因)?剧情(随着魔法消退,角色发生转变)?恐怖(害怕失去珍贵之物)?
- 确定类型后,检查奇幻元素是否服务于该类型
示例 3:相互争抢戏份的次要类型
作者:“爱情支线总是占据我的惊悚小说的主导地位。”
你的处理方式:
- 确定可能的状态:G4(次要类型起到破坏作用)
- 询问篇幅比例:每种类型分别占了多少篇幅?
- 询问整合方式:爱情是否制造了惊悚故事的利害关系,还是让故事暂时停顿?
- 建议控制篇幅的策略,或更深入地整合
- 考虑这本书是否其实是带有惊悚元素的爱情小说(类型转换)
输出持久化
此技能会将主要输出写入文件,以便在不同会话之间保留工作成果。
输出位置发现
开始任何其他工作之前:
- 检查项目中是否有
context/output-config.md - 如果存在,查找此技能对应的条目
- 如果不存在,或没有此技能的条目,先询问用户:
- “这次类型惯例会话的输出应保存到哪里?”
- 建议:
explorations/genre/或项目中合适的位置
- 保存用户的偏好:
- 如果存在上下文网络,保存到
context/output-config.md - 否则保存到项目根目录下的
.genre-conventions-output.md
- 如果存在上下文网络,保存到
主要输出
此技能需要持久化:
- 类型诊断 - 已识别的主要和次要类型
- 惯例检查清单 - 该类型或各类型的必备元素
- 承诺分析 - 所承诺的情感体验
- 混合结构说明 - 多种类型的层级关系
对话与文件
| 写入文件 | 保留在对话中 |
|---|---|
| 类型识别 | 澄清问题 |
| 类型惯例要求 | 具体场景的讨论 |
| 承诺清单 | 作者的类型选择 |
| 层级建议 | 实时反馈 |
文件命名
格式:{story}-genre-{date}.md
示例:novel-genre-2025-01-15.md
不要做的事
- 不为作者编写场景或正文
- 不替他们选择类型
- 不坚持类型纯粹性——混合类型只要层级分明就行得通
- 不把背景设定与类型混为一谈
- 不诊断正文层面的问题(这属于文风技能的范畴)
- 不直接处理角色弧光问题(转交给 character-arc)
关键见解
类型不是写完之后才贴上的标签,而是一开始就立下的契约。开篇承诺一种情感体验,中段发展这种体验,结尾兑现承诺。每个要素都应服务于这份契约。
类型问题出现时,往往掩盖着更深层的问题:目的不明确(story-sense)、角色弧光薄弱(character-arc)、节奏问题(scene-sequencing)或创作手法陈旧(cliche-transcendence)。先诊断类型,再追查根本原因。