webnovel-plan
基于总纲生成卷纲、时间线和章纲,并把新增设定增量写回现有设定集。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
基于总纲生成卷纲、时间线和章纲,并把新增设定增量写回现有设定集。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
AI长文创作引擎。去AI写作痕迹+33类AI模式检测+5维度评分+声纹校准。当需要撰写长文、去除AI味、优化写作风格时使用。
使用审查 Agent 评估章节质量,生成报告并写回审查指标。
启动只读小说管理面板,查看项目状态、实体图谱与章节内容。
深度初始化网文项目。通过分阶段交互收集完整创作信息,生成可直接进入规划与写作的项目骨架与约束文件。
从当前会话提取成功模式并写入 project_memory.json
查询项目设定、角色、力量体系、势力、伏笔等信息。支持紧急度分析与金手指状态查询。
| name | webnovel-plan |
| description | 基于总纲生成卷纲、时间线和章纲,并把新增设定增量写回现有设定集。 |
| version | 6.0.0 |
| tags | ["writing","novel","outline","planning"] |
| requires_tools | ["read_file","write_file","search_files","terminal","clarify"] |
| requires_toolsets | ["file","terminal"] |
export WORKSPACE_ROOT="${WORKSPACE_ROOT:-$PWD}"
export SKILL_ROOT="${SKILL_ROOT_DIR}/skills/webnovel-plan"
export SCRIPTS_DIR="${SKILL_ROOT_DIR}/scripts"
export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" placeholder-scan --format text
若本次规划会直接落到具体章节,还必须先刷新 Story System runtime 合同:
# genre 从 state.json 的初始化配置快照读取;写前主链真源是 .story-system 合同树。
# 必须先从详细大纲解析真实 CHAPTER_GOAL,禁止传 {章纲目标} / 第N章章纲目标 这类占位文本。
GENRE="$(python -X utf8 -c "import json,sys; s=json.load(open('${PROJECT_ROOT}/.webnovel/state.json',encoding='utf-8')); print(s.get('project',{}).get('genre',''))")"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" \
story-system "${CHAPTER_GOAL}" --genre "${GENRE}" --chapter {chapter_num} --persist --emit-runtime-contracts --format both
生成后必须把 .story-system/MASTER_SETTING.json、.story-system/volumes/、
.story-system/chapters/、.story-system/reviews/ 视为后续写作主链输入。
规划开始/结束都运行 placeholder-scan;plan 阶段发现占位先警告并补齐相关文件,进入写章前不得保留当前章相关实体的 [待...] / 暂名 / {占位}。
每卷规划完成后,只向 大纲/总纲.md 渐进追加下一卷概要与本卷新增/承接伏笔,不在 init 阶段预填 V2-V20 空表。
规划完成后写回必须来自显式结构化文件 大纲/第{volume_id}卷-总纲写回.json,禁止从卷纲自由文本推断伏笔或开放环。
| Step | Trigger | Reference |
|---|---|---|
| Step 4 | always | templates/output/大纲-卷节拍表.md |
| Step 5 | always | templates/output/大纲-卷时间线.md |
| Step 6 | always | ../../references/genre-profiles.md |
| Step 6 | always | ../../references/shared/strand-weave-pattern.md |
| 章纲拆分 | always | ../../references/outlining/plot-signal-vs-spoiler.md |
| Step | Trigger | Reference |
|---|---|---|
| Step 6 | 需要爽点设计 | ../../references/shared/cool-points-guide.md |
| Step 6/7 | 需要冲突设计 | references/outlining/conflict-design.md |
| Step 7 | 需要追读力分析 | ../../references/reading-power-taxonomy.md |
| Step 7 | 需要章纲细化 | references/outlining/chapter-planning.md |
| Step 6/7 | 特定题材节奏 | references/outlining/genre-volume-pacing.md |
| Step | Trigger | 检索命令 |
|---|---|---|
| 卷级规划 | always | python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill plan --table 场景写法 --query "卷级结构 叙事功能" |
| 章纲拆分 | 新增角色出现 | ... --skill plan --table 命名规则 --query "角色命名" --genre {题材} |
必须加载:
# 项目配置/投影状态(兼容读取,不作为写后事实真源)
cat "$PROJECT_ROOT/.webnovel/state.json"
# 总纲(全局蓝图)
cat "$PROJECT_ROOT/大纲/总纲.md"
# 题材(来自 init 配置快照,后续 CSV 检索和裁决匹配依赖此值)
GENRE="$(python -X utf8 -c "import json; s=json.load(open('${PROJECT_ROOT}/.webnovel/state.json',encoding='utf-8')); print(s.get('project',{}).get('genre',''))")"
已有卷的剧情状态(跨卷规划时必须加载):
若已有已完成卷(.webnovel/summaries/ 下有文件),加载以下数据感知已写内容:
# 最近 5 章摘要(了解剧情走向)
for ch in $(seq $((START_CH - 5)) $((START_CH - 1))); do
cat "$PROJECT_ROOT/.webnovel/summaries/ch$(printf '%04d' $ch).md" 2>/dev/null
done
# 核心角色当前状态
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
knowledge query-entity-state --entity "{protagonist_id}" --at-chapter {上一卷最后章}
# 核心关系当前状态
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
knowledge query-relationships --entity "{protagonist_id}" --at-chapter {上一卷最后章}
# 活跃伏笔(跨卷未回收的伏笔)
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
memory-contract get-open-loops
CSV 创作参考(卷级规划时按需检索):
python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill plan --table 爽点与节奏 --query "{卷级核心冲突}" --genre "${GENRE}"
python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill plan --table 桥段套路 --query "{卷级核心冲突}" --genre "${GENRE}"
按需读取(设定集):
设定集/世界观.md设定集/力量体系.md设定集/主角卡.md设定集/反派设计.md.webnovel/idea_bank.json阻断条件:
目标:让设定集从骨架模板进入"可规划、可写作"的状态。
必须补齐:
设定集/世界观.md:世界边界、社会结构、关键地点用途设定集/力量体系.md:境界链、限制、代价与冷却设定集/主角卡.md:欲望、缺陷、初始资源与限制设定集/反派设计.md:小/中/大反派层级与镜像关系硬规则:
必须确认:
执行前加载模板:
cat "${SKILL_ROOT}/../../templates/output/大纲-卷节拍表.md"
硬要求:
输出文件:大纲/第{volume_id}卷-节拍表.md
执行前加载模板:
cat "${SKILL_ROOT}/../../templates/output/大纲-卷时间线.md"
硬要求:
输出文件:大纲/第{volume_id}卷-时间线.md
必须加载:
cat "${SKILL_ROOT}/../../references/genre-profiles.md"
cat "${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md"
按需加载:
cat "${SKILL_ROOT}/../../references/shared/cool-points-guide.md"
cat "${SKILL_ROOT}/references/outlining/conflict-design.md"
cat "${SKILL_ROOT}/references/outlining/genre-volume-pacing.md"
cat "$PROJECT_ROOT/.webnovel/idea_bank.json"
卷纲必须明确:
跨卷一致性检查(非首卷时必须执行):
批次规则:
10章/批8章/批12章/批12章按需加载:
cat "${SKILL_ROOT}/../../references/reading-power-taxonomy.md"
cat "${SKILL_ROOT}/references/outlining/chapter-planning.md"
每章必须包含:
章节起点(CBN)推进节点(CPNs)章节终点(CEN)必须覆盖节点本章禁区节点格式统一为:
主体 | 动作/变化 | 对象/结果
说明:
动作/变化 可以表示行动、判断、意识变化或状态转移。对象/结果 可以是人、物、地点,也可以是结果状态。示例:
萧炎 | 抵达 | 迦南学院入口萧炎 | 展示 | 异火控制力药老 | 对萧炎产生 | 明确兴趣萧炎 | 意识到 | 学院考核远比预想更严苛结构规则:
1 个 CBN2-4 个 CPN1 个 CENCEN -> 下一章 CBN 必须逻辑承接(首章和末章除外)CPNs 必须按时间顺序排列必须覆盖规则:
4 个CBN + CEN + 1~2 个核心 CPN本章禁区规则:
5 条向后兼容:
CBN/CPNs/CEN/必须覆盖节点/本章禁区 字段,下游流程正常执行,仅跳过结构化检查输出文件:大纲/第{volume_id}卷-详细大纲.md
输入来源:
写回规则:
硬规则:
BLOCKER 并停止后续更新必须通过以下检查:
BLOCKER=0CEN -> CBN 无明显逻辑冲突4 个验证全部通过后,生成显式结构化写回文件:
{
"next_volume_anchor": {
"volume": 2,
"volume_name": "下一卷卷名",
"core_conflict": "下一卷核心冲突",
"volume_end_climax": "下一卷卷末高潮"
},
"foreshadow_writeback": [
{"content": "本卷规划明确新增的伏笔", "buried_chapter": "第10章", "payoff_chapter": "", "level": "卷级"}
],
"open_loop_writeback": [
{"content": "本卷结束后仍持续开放的问题", "buried_chapter": "", "payoff_chapter": "", "level": "持续开放环"}
]
}
只允许写入规划过程中显式列出的结构化伏笔/开放环;不要把自由文本里的暗示整理进去。随后执行最小总纲写回:
python "${SCRIPTS_DIR}/webnovel.py" --project-root "$PROJECT_ROOT" master-outline-sync \
--volume {volume_id} \
--writeback-file "大纲/第{volume_id}卷-总纲写回.json" \
--format text
该步骤只允许更新 大纲/总纲.md 的 V+1 卷名 / 核心冲突 / 卷末高潮与伏笔表,不得生成下一卷详细大纲、节拍表、时间线或章纲。
更新状态:
python "${SCRIPTS_DIR}/webnovel.py" --project-root "$PROJECT_ROOT" update-state -- \
--volume-planned {volume_id} \
--chapters-range "{start}-{end}"
| 陷阱 | 说明 | 规避方法 |
|---|---|---|
| 卷纲与总纲冲突 | 卷末高潮与总纲主线矛盾 | 生成后自动与总纲交叉比对 |
| 时间线回跳 | 章节时间戳非递增(非闪回) | 检测到回跳必须标注闪回或修正 |
| 章纲CBN/CEN断裂 | 相邻章节CEN→下一章CBN不承接 | 链式校验每对相邻章节 |
| 设定增量未写回 | 新出现的势力/能力未入库 | plan结束后扫描新增实体并提示 |
| 节拍表为空 | 跳过节拍直接写章纲 | 硬失败,必须先完成节拍表 |
# 验证卷纲存在且非空
test -s 大纲/卷纲/卷{N}.md && echo "✅ 卷纲"
# 验证章纲数量匹配
ls 大纲/章纲/卷{N}/ | wc -l # 应等于卷纲中的章节数
# 验证时间线
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
story-system timeline validate --volume {N}
BLOCKER 未裁决