# Chapter Generator

> 章节生成子技能。负责循环生成小说章节，管理写作流程，处理选择分支，自动保存发布，维护世界模型一致性。支持断点续写。

- Skill: `harry720320/chapter-generator` (Agent Skill)
- Install (CLI): `npx skillmds@latest add harry720320/chapter-generator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/harry720320/chapter-generator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: harry720320 (https://skillmd.com/u/harry720320)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/harry720320/chapter-generator

---


# Chapter Generator - 章节生成器

核心子技能，负责管理小说的持续创作流程。从初始化完成后开始循环调用，直到小说完结或用户主动暂停。

## 核心职责

1. 📖 **章节撰写** - 基于当前设定生成新情节
2. 🎯 **选择生成** - 提供无倾向性的多重选择
3. 💾 **自动保存** - 强制保存章节文件
4. 🚀 **自动发布** - 保存后立即发布到网站
5. 🗺️ **模型更新** - 实时更新世界模型和角色档案
6. 👤 **NPC管理** - 生成新NPC并维护档案
7. 🔄 **断点续写** - 支持暂停后恢复写作

---

## 调用时机

### 首次调用
当以下设定全部完成后，开始循环调用 chapter-generator：
- ✅ 写作风格（writing-style）
- ✅ 细节程度（低/中/高）
- ✅ 篇幅长度（短/中/长）
- ✅ 年代设定（era-generator）
- ✅ 人物设定（character-generator）
- ✅ 场景设定（scene-generator）
- ✅ 小说命名（novel-namer）

### 后续调用
每一章结束后，根据用户选择继续调用

---

## 章节生成流程

### Step 1: 读取当前状态

读取以下文件获取当前状态：
```yaml
# .learnings/books/{书名}/WORLD.md
- 时代背景（公开/隐藏）
- 世界地图（地点列表及状态）
- 势力关系
- 关键物品

# .learnings/books/{书名}/CHARACTERS.md
- 主角当前状态
- 所有NPC档案
- 人际关系网

# .learnings/books/{书名}/PLOT.md
- 篇幅规划
- 当前卷/章节进度
- 关键伏笔
- 待揭示线索

# .learnings/books/{书名}/chapters/
- 历史章节内容（用于回顾）
```

### Step 2: 生成章节内容

#### 写作原则
1. **遵循设定**：严格依据年代背景、人物性格、世界观
2. **延续情节**：承接上一章结尾和选择
3. **细节程度**：根据设定（低/中/高）控制字数和描写
4. **风格一致**：保持选定的写作风格（猫腻风格等）
5. **开放发展**：情节可有多种走向，不预设固定路线

#### 章节结构
```
## 第X章：{章节标题}

### 【场景回顾/过渡】
- 简要回顾上一章结尾状态
- 过渡描写，进入新场景

### 【情节发展】
- 主角行动/遭遇
- NPC互动
- 新发现/冲突
- 环境描写（根据细节程度决定详略）

### 【选择点】
- 2-4个无倾向性选择
- 每个选择有明确但不同的后果暗示
```

#### 选择设计原则
- **无倾向性**：不要暗示哪个是"正确"选择
- **差异化**：每个选择导致明显不同的后续
- **合理性**：每个选择都应该是角色可能做出的
- **后果暗示**：让玩家知道选择意味着什么（但不剧透）

**示例**：
```
【选择点】

A. 追击逃跑的黑衣人
> 可能获得情报，但可能陷入埋伏

B. 救助受伤的同伴
> 巩固团队信任，但错失追击机会

C. 搜索现场寻找线索
> 获得物品/信息，但敌人可能 reinforce

D. 立即撤退，保存实力
> 安全，但敌人逃脱，后患无穷
```

### Step 3: 生成新NPC（如需要）

如果情节需要新角色，调用 `character-generator`：

> 新NPC出现：
> **姓名**：xxx
> **身份**：xxx
> **初次印象**：xxx
> 
> 已生成NPC档案，保存至 CHARACTERS.md

### Step 4: 强制保存章节

章节内容生成后，**立即保存**：

```bash
文件路径: .learnings/books/{书名}/chapters/chapter_{序号}.md
文件名格式: chapter_01.md, chapter_02.md ...
```

### Step 5: 强制发布章节

保存后立即发布：

```bash
cd scripts && node cli.js publish "{书名}" "第X章：{标题}" "../.learnings/books/{书名}/chapters/chapter_XX.md"
```

发布成功后显示：
> ✅ 章节已发布至 https://time-weaver-782300018128.us-west1.run.app/

### Step 6: 更新世界模型

更新以下文件：

```yaml
# WORLD.md 更新内容
- 新发现的地点
- 地点状态变化
- 势力关系变化
- 关键物品状态更新
- 隐藏线索揭示进度

# CHARACTERS.md 更新内容
- 主角状态变化（健康、精神、位置）
- 人际关系变化
- 新NPC加入
- NPC状态更新
- 性格发展轨迹

# PLOT.md 更新内容
- 当前进度更新
- 新伏笔记录
- 已揭示线索标记
- 待发展剧情规划
```

### Step 7: 显示选择并等待用户

发布完成后，显示章节结尾的选择：

```
---

## （第X章完）

✅ **本章已保存并发布！**

**📊 本章统计**：
- 字数：约XXXX字
- 新场景：XXX
- 新NPC：XXX
- 关键线索：XXX

**在线阅读**：https://time-weaver-782300018128.us-west1.run.app/

---

**【选择点】**

A. ...
B. ...
C. ...
D. ...

请做出你的选择，进入下一章！
```

### Step 8: 接收选择并循环

用户回复选择后：
1. 记录选择到 PLOT.md
2. 根据选择确定下一章发展方向
3. **重新调用 chapter-generator** 开始下一章

---

## 断点续写机制

### 检测断点
当用户说"继续写{书名}"或"回到{书名}"时：

1. 查找该书目录：`.learnings/books/{书名}/`
2. 读取 PUBLISH_STATUS.md 获取最后发布章节
3. 读取最后一章内容，找到选择点
4. 显示当前状态和选择

### 恢复写作示例

用户："继续写深水盗墓人"

系统响应：
```
📚 继续《深水盗墓人》

**当前进度**：第4章已完成
**最后场景**：主角在苍梧的石室中，得知子母镜真相

**当前状态回顾**：
- 地点：苍梧的石室（灵穴深处）
- 关键人物：苍梧（守墓人）、铁山（昏迷中）
- 持有物品：子镜、铜钱
- 已知真相：
  - 子母镜是"门"的碎片
  - 你是第柒号，前六人全部失败
  - 集齐七面子镜可打开"门"
  - 三个月内必须做出选择

**上一章结尾选择点**：

A. 追问苍梧"实验"是什么意思
B. 询问如何结束这一切
C. 要求见铁山，确认他的安全
D. 拒绝相信，试图离开

请做出你的选择，进入第五章！
```

---

## 篇幅控制

根据设定的篇幅长度控制整体节奏：

### 短篇（约10章）
- 第1-3章：穿越与适应
- 第4-7章：核心冲突
- 第8-10章：高潮与结局

### 中篇（约50章）
- 第1-10章：第一卷·觉醒
- 第11-30章：第二卷·成长
- 第31-50章：第三卷·终局

### 长篇（100章+）
- 每20-30章为一卷
- 每卷有明确的主题和 arc
- 多条剧情线并行发展

---

## NPC生成触发条件

以下情况触发 `character-generator` 生成NPC：

1. **到达新地点** - 生成当地关键人物
2. **情节需要** - 任务发布者、敌人、盟友
3. **随机遭遇** - 路人、商人、旅人
4. **剧情转折** - 新势力的代表

生成后立即：
- 简要介绍给玩家
- 保存到 CHARACTERS.md
- 更新人际关系网

---

## 世界模型维护

### 每次章节结束强制更新

```yaml
# WORLD.md
世界地图:
  新地点:
    名称: XXX
    发现时间: 第X章
    描述: XXX
    状态: 安全/危险/未知
  
  已有地点更新:
    原地点:
      状态变化: XXX
      新信息: XXX

势力关系:
  新势力: 
    名称: XXX
    关系: 友好/敌对/中立
  
  已有势力:
    关系变化: XXX

关键物品:
  新获得:
    名称: XXX
    来源: 第X章
  
  物品状态更新:
    XXX:
      状态: 已使用/已损坏/升级
```

```yaml
# CHARACTERS.md
主角状态更新:
  当前状态:
    健康: XXX
    精神: XXX
    位置: XXX
  
  持有物品更新:
    新增: [XXX]
    消耗: [XXX]
  
  人际关系更新:
    XXX:
      关系: 友好/敌对
      信任度: XX
      变化: +X/-X
  
  性格发展:
    新增特质: XXX
    选择记录:
      - 第X章: 选择A，体现XXX性格

NPC更新:
  新NPC:
    姓名: XXX
    身份: XXX
    与主角关系: XXX
  
  已有NPC:
    XXX:
      状态变化: XXX
      关系变化: XXX
```

---

## 异常处理

### 用户长时间未选择
- 不自动推进
- 保留当前状态
- 用户可随时回复继续

### 用户想改变选择
- 当前章已发布则无法更改
- 可从当前节点继续，用新选择覆盖

### 用户想暂停
- 保存当前状态
- 记录"待续"标记
- 可随时"继续写{书名}"恢复

---

## 使用示例

### 完整流程

```
[初始化完成]
↓
[chapter-generator 第1次调用]
  → 生成第1章
  → 保存 chapter_01.md
  → 发布到网站
  → 更新模型
  → 显示选择
↓
[用户选择 A]
↓
[chapter-generator 第2次调用]
  → 根据选择A生成第2章
  → ...
↓
[循环直到完结或暂停]
```

### 断点续写

```
[用户说：继续写深水盗墓人]
↓
[检测最后章节：第4章]
↓
[读取第4章结尾选择]
↓
[显示状态回顾和选择]
↓
[用户选择后进入第5章]
```

---

## 文件清单

chapter-generator 操作的所有文件：

```
.learnings/books/{书名}/
├── chapters/chapter_XX.md    # 生成并保存
├── WORLD.md                  # 更新
├── CHARACTERS.md             # 更新
├── PLOT.md                   # 更新
└── PUBLISH_STATUS.md         # 更新

scripts/cli.js                # 调用发布
```

---

*Chapter Generator - 让创作自动流动*

