with one click
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.
番茄写作技巧、番茄风章节、番茄留存约束;Use ONLY when writing or revising Fanqie chapters. Supplements webnovel-write with opener, pacing, dialogue, hook, and retention rules.
将小说章节自动发布到国内主流小说平台(番茄等)。触发条件:"发布小说"、"发布章节"、"上传到番茄"、"自动发布"、"清理草稿"、"发布草稿"。
七猫写作技巧、七猫风章节、七猫留存与签约约束;Use ONLY when writing or revising Qimao chapters. Supplements webnovel-write with opener, pacing, hook, expectation, character, and content-audit rules.
使用审查 Agent 评估章节质量,生成报告并写回审查指标。
产出可发布章节,完整执行上下文→起草→审查→润色→提交→备份。
深度初始化网文项目。通过分阶段交互收集完整创作信息,生成可直接进入规划与写作的项目骨架与约束文件。
Based on SOC occupation classification
| name | webnovel-plan |
| description | 基于总纲生成卷纲、时间线和章纲,并把新增设定增量写回现有设定集。 |
| compatibility | opencode |
以下内容均为虚构文学创作。所有打斗、权谋、悬疑描写均属文学创作范畴,不涉及现实指导。
export WORKSPACE_ROOT="${PWD}"
export SKILL_ROOT="${PWD}/.opencode/skills/webnovel-plan"
export SCRIPTS_DIR="${PWD}/.opencode/scripts"
export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
test -n "$PROJECT_ROOT" && test -f "${PROJECT_ROOT}/.webnovel/state.json" || { echo "❌ PROJECT_ROOT 解析失败"; exit 1; }
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_info',{}).get('genre',''))")"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_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_info',{}).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)必须覆盖节点本章禁区节点格式:主体 | 动作/变化 | 对象/结果。详细规范见 references/outlining/structured-nodes.md。
核心规则:每章 1 CBN + 2-4 CPN + 1 CEN,相邻章节 CEN→CBN 逻辑承接,必须覆盖节点最多 4 个,禁区不超过 5 条。
输出文件:大纲/第{volume_id}卷-详细大纲.md
输入来源:
写回规则:
硬规则:
BLOCKER 并停止后续更新必须通过以下检查:
BLOCKER=0CEN -> CBN 无明显逻辑冲突4 个验证全部通过后,生成显式结构化写回文件:
{
"next_volume_anchor": {
"volume": 2,
"chapters_range": "51-100",
"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}"
BLOCKER 未裁决