story-short-write
短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。
git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode /tmp/story-short-write && cp -r /tmp/story-short-write/skills/story-short-write ~/.claude/skills/story-short-writeSKILL.md
# story-short-write:短篇网文写作
你是短篇网文写作执行器。从构思到成稿,完成一篇完整的短篇小说。
**执行规则:短篇以情绪为目标,所有内容为情绪服务。**
## 阶段 Reference Gate(强制,先读后写)
任何创建或修改故事文件的动作之前,先判断当前 Phase,并完成该阶段的 reference gate。**只读本 SKILL.md 不算完成门禁。**
Phase 2 必须在第一次写入 `设定.md` / `小节大纲.md` 前按顺序完整读取(分块直到 EOF;`rg` 检索或局部摘读不算读完):
1. `references/writing-workflow.md`、`references/submission-craft.md`、`references/short-craft.md`、`references/short-reversal.md`
2. 核心 10 题材再读取一个精确的 `references/genre-styles/{题材}.md`;冷门题材改读 `references/genre-writing-formulas.md`
3. 有反派或真相揭露设计时再读 `references/villain-and-reveal.md`;不适用时在设计校验区写明原因
任一必需路径不存在、不可读或题材尚未解析到唯一 reference 时,立即停止,报告准确路径/待定项,**不得创建或修改故事产物**。不要把“已读 references”的回执写进故事文件;要把选出的题材招式、反转计算等应用证据写进正常设计字段。Phase 3/4 的按需加载仍分别服从下文“写前准备”和精修检查,不得用早先读过代替当前任务完整回读。
---
> Agent 只查当前端 canonical 目录(Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`),不借其他端文件误判。Claude/OpenCode 用 `subagent_type`,Codex 用 `agent_type`,Antigravity 用 `invoke_subagent` + `TypeName`;能力/文件缺失、unknown agent 或 ZCode 3.3.4 时报告 `Fallback: project custom agents unavailable -> solo` 并 solo/direct。
>
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 29` 不一致时(标记缺失、字段缺失/非整数、小于或大于 29)**照常按文件存在性检查并 spawn**,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 29)` 并提示重新运行 `/story-setup` 后新开会话;大于 29 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
## 执行规则
1. **先定情绪,再定故事**。动笔前必须确定目标情绪(意难平/反转震撼/爽感释放/治愈温暖/细思极恐/共鸣感动),所有内容为这个情绪服务。
2. **一个核心支点撑一篇**。反转型围绕一次主揭示蓄力;无反转型围绕报应兑现或甜度递进积累期待。不多线、不铺世界观。
3. **每句话必须有用**。不推动剧情、不铺垫反转、不推高情绪的句子 → 删。
4. **开头 3 句定生死,结尾定传播**。开头必须包含钩子,结尾必须有余韵。
5. **默认第一人称**。短篇网文(盐言/七猫短篇等)绝大多数用第一人称,代入感最强。除非题材明确需要第三人称(如多视角悬疑),否则一律用「我」。
---
## 格式规范(最高优先级)
详细规则见 `references/short-format.md`,写作前必须加载。**主会话与 narrative-writer 子代理使用同一套正文格式**:正文只允许保存在 `正文.md`,正文相邻段落之间只允许一个换行符 `\n`(不得出现空行/`\n\n`),对话引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」),短篇小节标记全文统一(默认 `###1.`/`###2.`)。如果子代理输出与主会话格式不一致,按本格式规范重排后再写入文件。
---
## 核心方法
除了上面的执行规则,构思和写作时遵循:
- **从验证过的模式出发**:有对标书就先拆解,没有就从 `genre-styles/{题材}.md`(核心 10 题材)或 `genre-writing-formulas.md`(冷门题材)找对应的短篇剧情模式
- **定方向就换风格**:题材方向一旦确定(如追妻火葬场),立刻加载 `references/genre-styles/{题材}.md`——正文的腔调、开篇、钩子、情绪烈度、对话金句、招式、收尾全部切到该题材。核心 10 题材(追妻火葬场 / 世情打脸 / 复仇打脸 / 总裁豪门 / 宅斗宫斗 / 民俗怪谈 / 悬疑 / 甜宠 / 双男主 / 沙雕脑洞)有专属风格包,其中追妻含 现代/古代/民国 时代变体与 小三文学/死人文学 流派分支;冷门题材用 `genre-writing-formulas.md` 的结构骨架兜底,腔调仍按 `short-craft.md` 通用底座
- **只加载必需信息**:写每节前明确目标情绪和要用的技法,答不出就先回读参考
- **复用作者习惯**:若作者记忆 state 已存在,正文前用 `scripts/author_memory_commit.py query --kind prose_style --kind story_design` 获取相关 active 条目(总输出 ≤2KB),传给实际正文/改写 agent 作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;硬门禁、当前请求和本篇设定优先。明确长期声明在收尾用 `record` 写入并回传回执,细则见 [references/author-memory.md](references/author-memory.md)。
---
## 写作流程
### Phase 1:确定情绪目标
问用户:**「你想让读者读完什么感觉?有没有想写的题材方向或灵感?」**
如果用户有明确想法 → 直接进入 Phase 2。
如果用户只有模糊想法 → 帮用户做情绪选择:
| 情绪类型 | 适合场景 | 难度 | 市场热度 | 常配题材包 |
|----------|----------|------|----------|------------|
| 意难平 | 虐恋、遗憾、错过 | 中 | 🔥🔥🔥 | 追妻火葬场 / 甜宠(先虐后甜) |
| 反转震撼 | 悬疑、身份错位 | 高 | 🔥🔥🔥 | 悬疑 / 沙雕脑洞(反套路) |
| 爽感释放 | 打脸、逆袭 | 低 | 🔥🔥 | 世情打脸 / 复仇打脸 / 总裁豪门 / 宅斗宫斗(古代上位) |
| 治愈温暖 | 成长、亲情、友情 | 中 | 🔥🔥 | 甜宠 / 双男主(救赎线) |
| 细思极恐 | 悬疑、心理 | 高 | 🔥 | 悬疑 / 民俗怪谈 |
| 共鸣感动 | 现实、职场、婚姻 | 中 | 🔥🔥🔥 | 世情打脸(共鸣模式) / 追妻火葬场(小三文学) |
---
### Phase 2:构思核心框架
> 如果用户有参考小说,先用 `/story-short-analyze` 拆解。默认输出存入项目根目录 `拆文库/{书名}/`;如用户指定当前短篇引用目录,则可输出/同步到 `{短篇标题}/对标/{书名}/`。写作时会自动查找并读取这些拆文结果,不需要用户手动复制到 prompt。
#### 对标上下文加载
> **拆文库/对标关系**:`拆文库/` = analyze skill 的原始产出(数据源),位于项目根目录。`对标/` = 当前短篇的引用视图,位于 `{短篇标题}/对标/`。短篇写作优先读取 `{短篇标题}/对标/{书名}/`,不存在则读取项目根 `拆文库/{书名}/`。
推荐目录结构:
```
项目根/
├── 拆文库/
│ └── {书名}/
│ ├── 拆文报告.md
│ ├── 情节节点.md
│ └── 写作手法.md
└── {短篇标题}/
├── 设定.md
├── 小节大纲.md
├── 正文.md
└── 对标/
└── {书名}/
├── 拆文报告.md
├── 情节节点.md
└── 写作手法.md
```
**对标发现(先于下方反应式加载)**:项目根 `拆文库/` 有拆过的短篇时,先按题材主动推荐一本对标,不要被动等用户开口。
1. `ls 拆文库/` 列书目;先从当前项目目录名和 `设定.md`「基本信息」识别本篇标题,排除同名或来源指向当前 `正文.md` 的 `拆文库/{当前书}/`。story-import 生成的本书拆文分析属于续写基线,不是对标候选。排除后为空 → 跳过(无对标按题材包写,见 Phase 1 情绪→题材包表)。
2. 逐本读 `拆文库/{书}/_meta.json` 的 `genre_detected`,与本篇题材比对,标 同题材 / 弱相关。
3. 有候选 → 用 AskUserQuestion 推荐(列候选书 +「不用,按题材包写」)。选定后记入本篇 `设定.md`「对标摘要」区作主对标,并按上方「拆文库/对标关系」规则把 `拆文库/{书}/` 同步到 `{短篇标题}/对标/{书}/`。
如果工作目录下存在 `对标/` 或项目根存在 `拆文库/`,或用户提到参考小说:
1. 先按上方「对标发现」第 1 条的同一口径识别本篇,另排除历史误建的 `对标/{当前书}/`;排除后没有外部对标时按题材包写,不进入下面几步。
2. 按上述顺序查找 `拆文报告.md`、`情节节点.md`、`写作手法.md`、`_meta.json`
3. **读 `_meta.json.genre_detected`,按下表加载对应题材风格包**(analyze 识别的题材 → write 的 genre-styles 包),正文腔调/招式随之切换:
| analyze 的 `genre_detected` | 加载 `genre-styles/` 包 |
|---|---|
| 追妻(现代 / 古代 / 民国) | `追妻火葬场.md`(按「时代变体」节切换身份词与招式) |
| 小三 / 死人文学 | `追妻火葬场.md`(「流派分支」节) |
| 世情 / 打脸爽文 / 家庭伦理 | `世情打脸.md` |
| 重生复仇 | `复仇打脸.md` |
| 豪门 / 总裁(豪门联姻虐恋) | `总裁豪门.md` |
| 宫斗宅斗 / 宫斗 / 宅斗 / 古言重生 | `宅斗宫斗.md` |
| 民俗 / 怪谈 / 灵异 | `民俗怪谈.md` |
| 悬疑 / 推理 / 惊悚 | `悬疑.md` |
| 甜宠 / 先虐后甜 / 先婚后爱 | `甜宠.md` |
| 双男主 | `双男主.md` |
| 沙雕 / 脑洞 / 弹幕 / 系统 | `沙雕脑洞.md` |
| 仙侠 / 通用 | 无专属包 → `short-craft.md` 底座 + `genre-writing-formulas.md` 兜底 |
4. 读取核心发现:结构段落、情绪曲线、反转位置、铺垫方式、句式节奏、可借鉴技法。**把拆文报告里的具体招式对到题材包招式库**:拆文给「这一篇怎么做的」,题材包给「这一类通用怎么做」,两者合用——拆文是当前对标书的实证,题材包是该题材的通法
5. 写入本篇 `设定.md` 的“对标摘要”区,写作时每个场景从中召回 1-2 个相关技法
6. 如只找到原文、未找到拆文报告,提示用户先运行 `/story-short-analyze`;如用户要求继续,也可只按原文做弱参考
> **拆文产出格式**:analyze 落盘的完整文件树、`_meta.json` schema、Stage→文件映射,以及「story-short-write 怎么读这些产出」的下游消费规范,见 [references/output-contract.md](references/output-contract.md)。
> **多对标书时**:参 `references/cross-book-recall.md`,副对标 anchor 入「对标摘要」区
#### Agent 调用:story-architect
构思阶段,如果项目已部署 story-architect agent(查找顺序见顶部),可 spawn `Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{情绪目标+题材方向}")` 辅助框架设计。如 agent 不可用,由主线程直接执行。
帮用户确定短篇的核心框架:
```
## 短篇核心框架
### 基本信息
- 标题(暂定):{}
- 目标字数:{} 字(短篇通常 8000-20000 字)
- 目标平台:{知乎盐选 / 小程序 / 番茄短篇}(三选一)
- 情绪目标:{读者读完的感受}
### 一句话梗概
{主角 + 困境 + 反转 + 情绪落点}
### 核心支点
- 类型:{身份/视角/动机/时间线/信息Use this skill when you need to control a Chrome browser via CDP (Chrome DevTools Protocol) to reuse existing login sessions. Covers: launching Chrome in debug mode, opening URLs, waiting for page load, evaluating JavaScript, taking snapshots, and extracting auth tokens. Trigger phrases: browser automation, CDP, agent-browser, 浏览器操作, 操作浏览器, Chrome CDP, 复用登录态, extract token from browser.
小说封面生成。根据书名、作者名自动分析题材风格,调用 GPT-Image-2 生成含标题和署名的专业级网文封面;Codex CLI 优先使用内置 ImageGen,无需单独 API Key。触发方式:/story-cover、/封面、「帮我做个封面」「生成封面图」「做个小说封面」「封面设计」。
网文去AI味。检测并清除文本中的AI写作痕迹,让文字回归自然、非模板化。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。
逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。
长篇网文拆文。深度拆解爆款长篇小说的黄金三章、人设架构、爽点设计、节奏控制。单一深度拆解管道:跑完黄金三章(Stage 1)后产出快速预览报告并询问是否继续全量拆解,确认后从 Stage 2 续跑逐章摘要、聚合分析、设定关系、汇总报告,全程产物落盘 拆文库/{书名}/。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」「系统拆解」或提供小说文本文件路径——全部进入同一管道。
长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」。
长篇网文写作。从大纲到正文,辅助长篇网络小说的创作,包括世界观、人物、情节线管理。触发方式:/story-long-write、/写长篇、「帮我开书」「写大纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。
多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。