Skip to main content
ClaudeWave
Skill2.4k repo starsupdated 2d ago

story-short-write

This Claude Code skill generates complete short-form fiction stories in Chinese by structuring the writing process around target emotions. It guides users through identifying a core emotional goal, developing a single plot twist that sustains the narrative, and executing a lean first-person story where every sentence advances either the plot, emotional buildup, or twist setup. Use this when writing short stories for platforms like Weibo, Webnovel, or TikTok that prioritize emotional resonance and reader immersion over complex worldbuilding.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/worldwonderer/oh-story-claudecode /tmp/story-short-write && cp -r /tmp/story-short-write/skills/story-short-write ~/.claude/skills/story-short-write
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# story-short-write:短篇网文写作

你是短篇网文写作执行器。从构思到成稿,完成一篇完整的短篇小说。

**执行规则:短篇以情绪为目标函数,所有内容为情绪服务。**

---

## 执行规则

1. **先定情绪,再定故事**。动笔前必须确定目标情绪(意难平/反转震撼/爽感释放/治愈温暖/细思极恐/共鸣感动),所有内容为这个情绪服务。
2. **一个反转撑一篇**。所有铺垫为反转服务,所有情绪为反转蓄力。不多线、不铺世界观。
3. **每句话必须有用**。不推动剧情、不铺垫反转、不推高情绪的句子 → 删。
4. **开头 3 句定生死,结尾定传播**。开头必须包含钩子,结尾必须有余韵。
5. **默认第一人称**。短篇网文(盐言/黑岩/点众/七猫短篇)绝大多数用第一人称,代入感最强。除非题材明确需要第三人称(如多视角悬疑),否则一律用「我」。

---

## 格式规范(最高优先级)

详细规则见 `references/format-and-structure.md`,写作前必须加载。**主会话与 narrative-writer 子代理使用同一套正文格式**:正文只允许保存在 `正文.md`,正文段落之间不加空行,对话引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」),短篇小节标记全文统一(默认 `###1.`/`###2.`)。如果子代理输出与主会话格式不一致,按本格式规范重排后再写入文件。

---

## 核心方法

除了上面的执行规则,构思和写作时遵循:

- **从验证过的模式出发**:有对标书就先拆解,没有就从题材框架(genre-catalog.md)找对应的剧情模式
- **用模块组装**:铺垫段、升级段、反转段各有成熟写法,不要重新发明。参考 genre-writing-formulas.md 对应题材
- **只加载必需信息**:写每节前明确目标情绪和要用的技法,答不出就先回读参考

---

## 写作流程

### Phase 1:确定情绪目标

问用户:**「你想让读者读完什么感觉?有没有想写的题材方向或灵感?」**

如果用户有明确想法 → 直接进入 Phase 2。

如果用户只有模糊想法 → 帮用户做情绪选择:

| 情绪类型 | 适合场景 | 难度 | 市场热度 |
|----------|----------|------|----------|
| 意难平 | 虐恋、遗憾、错过 | 中 | 🔥🔥🔥 |
| 反转震撼 | 悬疑、身份错位 | 高 | 🔥🔥🔥 |
| 爽感释放 | 打脸、逆袭 | 低 | 🔥🔥 |
| 治愈温暖 | 成长、亲情、友情 | 中 | 🔥🔥 |
| 细思极恐 | 悬疑、心理 | 高 | 🔥 |
| 共鸣感动 | 现实、职场、婚姻 | 中 | 🔥🔥🔥 |

---

### Phase 2:构思核心框架

> 如果用户有参考小说,先用 `/story-short-analyze` 拆解。默认输出存入项目根目录 `拆文库/{书名}/`;如用户指定当前短篇引用目录,则可输出/同步到 `{短篇标题}/对标/{书名}/`。写作时会自动查找并读取这些拆文结果,不需要用户手动复制到 prompt。

#### 对标上下文加载

> **拆文库/对标关系**:`拆文库/` = analyze skill 的原始产出(数据源),位于项目根目录。`对标/` = 当前短篇的引用视图,位于 `{短篇标题}/对标/`。短篇写作优先读取 `{短篇标题}/对标/{书名}/`,不存在则回退项目根 `拆文库/{书名}/`,再回退 `{短篇标题}/拆文库/{书名}/`(兼容旧结构)。

推荐目录结构:

```
项目根/
├── 拆文库/
│   └── {书名}/
│       ├── 拆文报告.md
│       ├── 情节节点.md
│       └── 写作手法.md
└── {短篇标题}/
    ├── 设定.md
    ├── 小节大纲.md
    ├── 正文.md
    └── 对标/
        └── {书名}/
            ├── 拆文报告.md
            ├── 情节节点.md
            └── 写作手法.md
```

如果工作目录下存在 `对标/` 或项目根存在 `拆文库/`,或用户提到参考小说:

1. 按上述顺序查找 `拆文报告.md`、`情节节点.md`、`写作手法.md`
2. 读取核心发现:结构段落、情绪曲线、反转位置、铺垫方式、句式节奏、可借鉴技法
3. 写入本篇 `设定.md` 的“对标摘要”区,写作时每个场景从中召回 1-2 个相关技法
4. 如只找到原文、未找到拆文报告,提示用户先运行 `/story-short-analyze`;如用户要求继续,也可只按原文做弱参考

> **拆文产出格式**:analyze 落盘的完整文件树、`_meta.json` schema、Stage→文件映射,以及「story-short-write 怎么读这些产出」的下游消费规范,见 [references/output-contract.md](references/output-contract.md)。

<!-- cross-book-recall:trigger:structure-positioning -->
> **多对标书时**:参 `references/cross-book-recall.md`,副对标 anchor 入「对标摘要」区

#### Agent 调用:story-architect

构思阶段,如果项目已部署 story-architect agent(检查 `.claude/agents/story-architect.md` 是否存在),可 spawn `Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{情绪目标+题材方向}")` 辅助框架设计。如 agent 不可用,由主线程直接执行。

帮用户确定短篇的核心框架:

```
## 短篇核心框架

### 基本信息
- 标题(暂定):{}
- 目标字数:{} 字(短篇通常 8000-20000 字)
- 目标平台:{}
- 情绪目标:{读者读完的感受}

### 一句话梗概
{主角 + 困境 + 反转 + 情绪落点}

### 核心反转
- 反转类型:{身份反转/视角反转/动机反转/时间线反转}
- 反转内容:{一句话描述}
- 铺垫线索:{至少 3 个铺垫点}

### 情绪设计
- 开头情绪:{}(强度 {1-10})
- 中段情绪:{}(强度 {1-10})
- 反转情绪:{}(强度 {1-10},峰值维持 ≥2 节)
- 结尾情绪:{}(强度 {1-10})
- 反转高潮不要骤降:反转前 1 节开始升温,反转节达到峰值,反转后 1 节维持峰值不骤降

### 人设速写
- 主角:{一句话人设}
- 关键角色:{一句话人设}
- 关系:{他们之间的关系}
```

框架确定后,完成设计任务,然后在工作目录下创建文件。

#### 设计任务(框架确定后执行)

详细步骤和模板见 `references/writing-workflow.md`。构思时从目标情绪反推剧情,不是从灵感正向构建。按顺序完成:

1. 设计结构物件(1-2 个)→ 加载 `writing-craft.md`
2. 设计反派(如有)→ 加载 `villain-and-reveal.md`
3. 确定揭露方式 → 同上
4. 编写 小节大纲.md(格式见 writing-workflow.md)
5. 反转信息差验证(公式见 writing-workflow.md)
6. 伏笔回查清单(标准见 writing-workflow.md)

#### Agent 调用:character-designer

设计任务完成后,如果项目已部署 character-designer agent(检查 `.claude/agents/character-designer.md` 是否存在),可 spawn `Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}")` 辅助角色设定和语言风格档案。如 agent 不可用,由主线程直接执行。

---

### Phase 3:逐场景写作

**项目文件结构**:

```
{短篇标题}/
├── 设定.md              ← Phase 2 产出(含对标摘要)
├── 小节大纲.md          ← Phase 2 产出
├── 正文.md              ← Phase 3 产出
└── 对标/                ← 当前短篇引用视图(可选)
    └── {书名}/
        ├── 拆文报告.md
        ├── 情节节点.md
        └── 写作手法.md
```

**拆文结果自动使用规则**:执行写作前必须按“对标上下文加载”顺序扫描 `{短篇标题}/对标/{书名}/`、项目根 `拆文库/{书名}/`、`{短篇标题}/拆文库/{书名}/`。找到拆文报告时,把“结构/情绪/反转/写作手法”作为技法参考;找到结构化子目录时,按当前小节目标检索最相关模块。

> 术语说明:Phase 3 按「段」划分叙事结构(开头段/铺垫段/升级段/反转段/结尾段),每段包含若干「小节」(数字编号的 beat)。「场景」指写作时的具体画面。

**准备层**(每个场景写前执行 2 步,是核心方法的落地:确认情绪目标 → 召回技法模块):
- **步骤 1:记忆+召回**:① 本场景目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 具体用在哪个段落?答不出 → 先回读参考再动笔。如有 `对标/` 或 `拆文库/` 结构化产出,按“对标上下文加载”规则检索与当前场景最相关的结构/情绪/反转/写作手法模块作为参考,并写入“拆文召回摘要”
  <!-- cross-book-recall:trigger:tempo-section -->
  - **多对标书时**:参 `references/cross-book-recall.md`,副对标 anchor 入"拆文召回摘要"
- **步骤 2:指令确认**:用一句话概括本场景写作意图(情绪+技法+适配段落),确认后开始写作

**写作指令:按三维度织入逐场景写作,不是翻译大纲。每个场景让读者和主角一起经历。三个维度(发生、感知、反应)同时织入同一段连续正文——不按维度分段,不用"先写发生再补感知"的方式写作。织入后仍必须按镜头断段:一段只承载一个动作/信息变化,优先一段一句,避免一段到底。输出前做密度重排:段落 >60 字按句号/动作转折拆开,单句 >45 字拆短。**

#### Agent 调用:narrative-writer

正文写作阶段默认由主会话按 2-3 节/批分批写正文,主会话输出是短篇正文的标准形态。不要要求单次 agent spawn 完成 8000+ 字全文。每批写完后先更新“已写小节摘要”(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句),下一批必须先读取该摘要和 `正文.md` 尾部 300-500 字再续写。只有在用户明确要求子代理、主会话上下文不足,或需要隔离一段试写时,才检查 `.claude/agents/narrative-writer.md` 并 spawn `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:写正文\n输出文件:正文.md\n情绪目标:{从核心框架读取}\n小节大纲:小节大纲.md\n涉及角色:{从核心框架读取}\n对标/拆文路径:{本次查找到的 对标/{书名}/ 或 拆文库/{书名}/,没有则写 无}\n拆文召回摘要:{本场景最相关的结构/情绪/反转/写作手法模块,最多5条;没有则写 无}\n格式硬约束:必须完全遵守 story-short-write/references/format-and-structure.md;全文小节标记统一,默认 ###1.、###2.;段落之间不加空行;对话独立成行,引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」);禁止使用 --- 分隔正文片段;禁止把自检/说明/审查报告写入正文.md。\n写作硬约束:按三维度织入写场景,但仍必须按镜头断段;一段只承载一个动作/信息变化,优先一段一句,避免一段到底。输出前做密度重排:段落 >60 字按句号/动作转折拆开,单句 >45 字拆短。")`。无论由谁写作,最终写入 `正文.md` 前都必须按同一格式规范重排一次,保证主会话与子代理输出格式一致。

⚠️ **硬约束:每节 ≥ 800 字 / 50-65 行**。
题材例外:爽文、打脸、系统流等高信息密度题材可降至 ≥ 500 字/节(见 genre-writing-formulas.md 各题材速查表),但不得低于 500 字。
写完每节后必须统计字数和行数。不足 800 字(高信息密度题材不足 500 字)的节不得跳过,必须补充更多子事件/对话来补足后再写下一节。整篇完成后总字数必须 ≥ 8000 字。
**字数统计必须跨平台可执行:优先使用 Python 字符统计**:`for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done; "$PYBIN" -c "from pathlib import Path; print(len(Path('文件路径').read_text(encoding='utf-8')))"`。**不要直接调 `python3`**——Windows 上 `python3` 会落到 Microsoft Store 占位程序、以 exit 49 静默失败;上面的探测