Help us improve
Share bugs, ideas, or general feedback.
From webnovel-writer
Builds volume and chapter outlines from the total outline, inherits creative constraints, and prepares writing-ready chapter plans. Use when the user asks for outlining or runs /webnovel-plan.
npx claudepluginhub xuanranl/webnovelwriter --plugin webnovel-writerHow this skill is triggered — by the user, by Claude, or both
Slash command
/webnovel-writer:webnovel-planThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Purpose: refine 总纲 into volume + chapter outlines. Do not redesign the global story.
Generates volume beat sheets, timelines, skeletons, and chapter outlines from total outline in webnovel projects. Enriches settings and updates state.
Guides long-form web novel writing from outline to chapters, covering worldbuilding, characters, and plot management.
创作期续写工具,基于场景规划逐章生成小说正文。当用户说"续写"、"写章节"、"生成章节"、"写下一章"、"批量生成"、"继续写"、"写正文"时自动激活。
Share bugs, ideas, or general feedback.
Purpose: refine 总纲 into volume + chapter outlines. Do not redesign the global story. Setting policy: 先基于 init 产出的总纲+世界观补齐设定集基线;再在卷纲完成后,直接对现有设定集做增量补充。
D:\wk\xiaoshuo,书项目为 D:\wk\xiaoshuo\凡人资本论。PROJECT_ROOT 为真实书项目根(必须包含 .webnovel/state.json),后续所有读写路径都以该目录为准。环境设置(bash 命令执行前):
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
if [ -z "${CLAUDE_PLUGIN_ROOT}" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/skills/webnovel-plan" ]; then
echo "ERROR: 未设置 CLAUDE_PLUGIN_ROOT 或缺少目录: ${CLAUDE_PLUGIN_ROOT}/skills/webnovel-plan" >&2
exit 1
fi
export SKILL_ROOT="${CLAUDE_PLUGIN_ROOT}/skills/webnovel-plan"
if [ -z "${CLAUDE_PLUGIN_ROOT}" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/scripts" ]; then
echo "ERROR: 未设置 CLAUDE_PLUGIN_ROOT 或缺少目录: ${CLAUDE_PLUGIN_ROOT}/scripts" >&2
exit 1
fi
export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
references/outlining/outline-structure.md、references/outlining/plot-frameworks.mdUse progressive disclosure and load only what current step requires:
cat "$PROJECT_ROOT/.webnovel/state.json"
cat "$PROJECT_ROOT/大纲/总纲.md"
Optional (only if they exist):
设定集/主角组.md设定集/女主卡.md设定集/反派设计.md设定集/世界观.md设定集/力量体系.md设定集/主角卡.md设定集/典故引用库.md(若存在:本卷引用规划的输入源)设定集/原创诗词口诀.md(若存在:原创口诀优先于外部典故).webnovel/idea_bank.json (inherit constraints)If 总纲.md lacks volume ranges / core conflict / climax, ask the user to fill those before proceeding.
创意约束文件完整性检查(Soft warning): 以下文件若缺失,后续 write 流程会降级处理(不阻断 plan):
设定集/叙事声音.md(缺失 → style-adapter 使用分题材默认,跨章风格一致性降低)设定集/情感蓝图.md(缺失 → emotion-checker 跳过蓝图对标)设定集/开篇策略.md(缺失 → Ch1-3 使用 Golden Opening Protocol 通用默认)
若缺失,在 plan 开始前提示用户:“建议先运行 /webnovel-init 补齐设定集”。下卷规划前必须读已写章节真实数据,不能只看大纲:
跑:
python -X utf8 ${SCRIPTS_DIR}/webnovel.py --project-root "${PROJECT_ROOT}" \
state get-recent-meta --last-n 10
取最近 10 章 hook_close / hook_type / unresolved_loops / overall_score / narrative_version。
(Phase G 之后追加)跑:
python -X utf8 ${SCRIPTS_DIR}/webnovel.py --project-root "${PROJECT_ROOT}" \
state get-hook-trend --last-n 10
取 4 类钩子分布。
在新卷规划必须显式回应:
第 1 卷规划(无前卷数据)→ 跳过 Step 1.5,仅按既有 Step 1 大纲流程。
目标:在不推翻现有内容的前提下,让设定集从“骨架模板”进入“可规划可写作”的基线状态。
输入来源:
大纲/总纲.md设定集/世界观.md设定集/力量体系.md设定集/主角卡.md设定集/反派设计.md执行规则(必须):
基线补齐最小要求:
设定集/世界观.md:世界规则边界、社会结构、关键地点用途。设定集/力量体系.md:境界链/能力限制/代价与冷却。设定集/主角卡.md:欲望、缺陷、初始资源与限制。设定集/反派设计.md:小/中/大反派层级与主角镜像关系。目标:在规划本卷章纲前,通过搜索获取专业知识和创作参考,确保大纲有真实细节支撑。
搜索统一使用 Tavily 直连 API 脚本(${SCRIPTS_DIR}/tavily_search.py),禁止使用 MCP 工具。
卷前调研(至少5次search):
1. 搜索本卷涉及的专业领域(2-3次)
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "机甲拆解 技术 废品回收" --max 5
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "遗迹暴走 失控机甲 设定参考" --max 5
2. 搜索同题材近6个月内爆款的节奏和创新点(1-2次)
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "科幻机甲 网文 2025 2026 热门 爆款 节奏" --max 5
3. 搜索本卷关键场景类型的写作技巧(1-2次)
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "机甲战斗场景 描写技巧" --max 5
4. 复杂专业领域用深度研究模式
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" research "太空探索遗迹考古的物理原理和技术细节" --model pro
5. 将调研结果保存到 调研笔记/ 对应主题文件
6. 在后续Step中引用调研笔记作为参考输入
Search 失败处理:同 webnovel-write 的失败协议——立即停止,检查 Tavily API key 配置。
目标:先把本卷“承诺→危机递增→中段反转→最低谷→大兑现+新钩子”钉死,避免卷中段漂移。
Load template:
cat "${SKILL_ROOT}/../../templates/output/大纲-卷节拍表.md"
执行前搜索(推荐):
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "网文 {题材} 节奏 节拍 结构" --max 5
python -X utf8 "${SCRIPTS_DIR}/tavily_search.py" search "网文 {爽点类型} 写法 案例" --max 5
Must satisfy (hard requirements):
无(理由:...)Write output:
cat > "$PROJECT_ROOT/大纲/第${volume_id}卷-节拍表.md" << 'EOF'
{beat_sheet_content}
EOF
Completion criteria:
大纲/第{volume_id}卷-节拍表.md 存在且非空目标:为本卷建立时间轴基准,确保章节间时间推进逻辑自洽,避免“第一章灾变第二章火拼”的时间跳跃问题。
Load template:
cat "${SKILL_ROOT}/../../templates/output/大纲-卷时间线.md"
Must satisfy (hard requirements):
Write output:
cat > "$PROJECT_ROOT/大纲/第${volume_id}卷-时间线.md" << 'EOF'
{timeline_content}
EOF
Completion criteria:
大纲/第{volume_id}卷-时间线.md 存在且非空Load genre profile and apply standards:
cat "${SKILL_ROOT}/../../references/genre-profiles.md"
cat "${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md"
Optional (only if爽点结构需要细化):
cat "${SKILL_ROOT}/../../references/shared/cool-points-guide.md"
Optional (only if需要补强卷级冲突链与强度分层):
cat "${SKILL_ROOT}/references/outlining/conflict-design.md"
Load beat sheet (must exist):
cat "$PROJECT_ROOT/大纲/第{volume_id}卷-节拍表.md"
Extract for current genre:
Strand 比例与 Weaving 规则详见规范源:
cat "${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md"
基于 genre profile 分配三线(Quest/Fire/Constellation)章节比例,遵循规范源中的切换阈值和交织模式。
For 电竞/直播文/克苏鲁, apply dedicated volume pacing template:
cat "${SKILL_ROOT}/references/outlining/genre-volume-pacing.md"
Based on genre profile, adjusted by project pacing_preference (from state.json):
若 state.json 包含 pacing_preference:
coolpoint_frequency: "高频密集"):
climaxes_per_volume 个高潮章节coolpoint_frequency: "适中", 默认):
coolpoint_frequency: "慢热积累"):
climaxes_per_volume 个高潮章节若 pacing_preference 缺失,使用“适中”默认值。
If idea_bank.json exists:
cat "$PROJECT_ROOT/.webnovel/idea_bank.json"
Calculate trigger frequency:
Use this template and fill from 总纲 + idea_bank:
# 第 {volume_id} 卷:{卷名}
> 章节范围: 第 {start} - {end} 章
> 核心冲突: {conflict}
> 卷末高潮: {climax}
## 卷摘要
{2-3 段落概述}
## 关键人物与反派
- 主要登场角色:
- 反派层级:
## Strand Weave 规划
| 章节范围 | 主导 Strand | 内容概要 |
|---------|------------|---------|
## 爽点密度规划
| 章节 | 爽点类型 | 具体内容 | 强度 |
|------|---------|---------|------|
## 伏笔规划
| 章节 | 操作 | 伏笔内容 |
|------|------|---------|
## 引用规划(若 `设定集/典故引用库.md` 存在)
> 从引用库中选取本卷适合的引用,标注章节、载体、伏笔功能。全卷 10-15 处,单章上限 2 处。
| 章 | 引用内容 | 类型/编号 | 载体 | 伏笔 |
|----|---------|----------|------|------|
## 约束触发规划(如有)
- 反套路规则:每 N 章触发一次
- 硬约束:贯穿全卷
Batching rule:
60 章:4+ 批
Optional (only if需要钩子/节奏细分):
cat "${SKILL_ROOT}/../../references/reading-power-taxonomy.md"
Optional (only if需要章节微结构/标题策略细化):
cat "${SKILL_ROOT}/references/outlining/chapter-planning.md"
For each chapter, determine:
1. Strand assignment (follow volume skeleton distribution)
2. 爽点设计 (based on Strand and position)
3. 钩子设计 (based on next chapter's Strand)
4. 反派层级 (based on volume skeleton)
5. 关键实体 (new or important)
6. 约束检查 (if idea_bank exists)
Chapter format (include 反派层级 for context-agent):
### 第 {N} 章:{标题}
- 目标: {20字以内}
- 阻力: {20字以内}
- 代价: {20字以内}
- 时间锚点: {末世第X天 时段/仙历X年X月X日/具体日期+时段}
- 章内时间跨度: {如 3小时/半天/1天}
- 与上章时间差: {如 紧接/6小时/1天/跨夜}
- 倒计时状态: {事件A D-3 -> D-2 / 无}
- 爽点: {类型} - {30字以内} | 预估爽值: 压抑{N}×反转{N}/逻辑{N}→≈{score}
- Strand: {Quest|Fire|Constellation}
- 反派层级: {无/小/中/大}
- 视角/主角: {主角A/主角B/女主/群像}
- 关键实体: {新增或重要出场}
- 本章变化: {30字以内,优先可量化变化}
- 章末未闭合问题: {30字以内}
- 钩子: {类型} - {30字以内} | 强度: {strong/medium/weak}
- 读者情绪: {压抑|紧张|释放|燃|温暖|震撼|好奇|焦虑}
- 氛围/情绪色调: {一句话描述本章的感官底色}
- 场景预案: {2-3个关键场景一句话,如"废品站深夜改装+红光映脸"}
- 对话种子: {1-2句关键对话方向,如"配角A问'你叫什么名字'"}
- 视觉锚点: {最有画面感的1-2个镜头}
- 引用锚点: {若引用库存在且本章在引用规划中:编号+"原文"(载体,伏笔说明)/ 无引用库或本章不引用则省略此字段}
时间字段说明:
字段说明:
Save after each batch:
cat >> "$PROJECT_ROOT/大纲/第${volume_id}卷-详细大纲.md" << 'EOF'
{batch_content}
EOF
目标:卷纲写完后,把本卷新增事实写回“现有设定集文件”,确保后续写作可直接读取。
输入来源:
大纲/第{volume_id}卷-节拍表.md大纲/第{volume_id}卷-详细大纲.md写回策略(必须):
典故引用库.md 存在):将卷骨架“引用规划”段的条目增量写入引用库的“第N卷引用规划总表”。若章纲中有“引用锚点”引用了引用库中未登记的新引用,追加到对应分类。同时将承载伏笔的引用条目登记到 伏笔追踪.md 的“典故伏笔”分类。冲突处理(硬规则):
BLOCKER 并停止 state 更新。1. 爽点密度检查
2. Strand 比例检查 Count chapters by Strand and compare with genre profile:
If deviation > 15%, adjust chapter assignments.
3. 总纲一致性检查
4. 约束触发频率检查 (if idea_bank exists)
5. 完整性检查 Every chapter must have:
6. 时间线一致性检查(新增)
大纲/第{volume_id}卷-时间线.md7. 读者情绪连续性检查(新增)
8. 钩子强度与丰满度检查(新增)
9. 爽值预估检查(新增)
10. 设定补全检查
BLOCKER 数量为 0;若 >0,必须先裁决,不得进入 state 更新Update state (include chapters range):
python "${SCRIPTS_DIR}/webnovel.py" --project-root "$PROJECT_ROOT" update-state -- \
--volume-planned {volume_id} \
--chapters-range "{start}-{end}"
Final check:
大纲/第{volume_id}卷-节拍表.md大纲/第{volume_id}卷-时间线.md大纲/第{volume_id}卷-详细大纲.mdBLOCKER 未裁决If any hard fail triggers:
Next steps: