webnovel-write
产出可发布章节,完整执行上下文→起草→审查→润色→提交→备份。
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
深度初始化网文项目。通过分阶段交互收集完整创作信息,生成可直接进入规划与写作的项目骨架与约束文件。
基于总纲生成卷纲、时间线和章纲,并把新增设定增量写回现有设定集。
使用审查 Agent 评估章节质量,生成报告并写回审查指标。
启动只读小说管理面板,查看项目状态、实体图谱与章节内容。
对网文项目做只读体检/诊断(/webnovel-doctor)——检查目录、文件、JSON、SQLite、RAG 配置、依赖与 Dashboard 构建产物是否完整。
从当前会话提取成功写作模式并写入 project_memory.json
| name | webnovel-write |
| description | 产出可发布章节,完整执行上下文→起草→审查→润色→提交→备份。 |
| allowed-tools | Read Write Edit Grep Bash Agent AskUserQuestion |
| argument-hint | [章号] [--fast|--minimal] |
产出可发布章节到 正文/第{NNNN}章-{title}.md。默认 2000-2500 字,用户/大纲另有要求时从之。
| 模式 | 流程 |
|---|---|
| 默认 | Step 1→2→3→4→5→6 |
--fast | Step 1→2→3(轻量)→4→5→6 |
--minimal | Step 1→2→3(写 no-review artifact)→4(仅排版)→5→6 |
Agent 工具调用指定 subagent;不得用主流程口头代替 subagent 输出用户要求 > 状态机硬门槛 > 项目约束(总纲/设定/记忆)> skill 流程 > reference 建议
python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill write --table {表名} --query "{关键词}" --genre {题材}
触发条件:新角色→命名规则,战斗→场景写法,多角色对话→写作技法,情感描写→写作技法,高频桥段→场景写法。
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT:?}/scripts"
export SKILL_ROOT="${CLAUDE_PLUGIN_ROOT:?}/skills/webnovel-write"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" preflight
export PROJECT_ROOT="$(python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" placeholder-scan --format text
genre 从 .webnovel/state.json 的初始化配置快照读取,用于刷新合同树;写前主链真源仍是 .story-system/ 合同。调用 story-system 前必须先从详细大纲解析真实本章目标,禁止传 {章纲目标}、第N章章纲目标 等占位 query。
GENRE="$(python -X utf8 -c "import json,sys; s=json.load(open('${PROJECT_ROOT}/.webnovel/state.json',encoding='utf-8')); pi=s.get('project_info',{}); print(pi.get('genre') or s.get('project',{}).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
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage prewrite --format json
必备文件:MASTER_SETTING.json(调性/禁忌)、volume_{NNN}.json(卷级节奏)、chapter_{NNN}.review.json(必须节点/禁区)。缺失则阻断。
chapter_{NNN}.json 必须优先检查顶层 chapter_directive。chapter_focus 只能来自 chapter_directive.goal 或真实 query,不得从 dynamic_context 的参考摘要继承。
写作任务书排序必须固定为:
chapter_directive.goal/time_anchor/chapter_span/countdown/chapter_end_open_questionmust_cover_nodesforbidden_zones,违反即不通过dynamic_context,仅作风格参考,不能覆盖章纲约束必须使用 Agent 工具调用 context-agent,不得由主流程自行整理任务书。
Use the Agent tool to run webnovel-writer:context-agent.
Task:
产物:一份写作任务书,能独立支撑 Step 2 起草。
调用后主流程必须记录 SubagentRun 汇总(仅供最终报告使用):
{
"name": "context-agent",
"user_label": "整理写作依据",
"status": "completed | partial | failed | skipped",
"problems": [],
"auto_handled": [],
"needs_user_action": false,
"duration_ms": 0,
"outputs": []
}
上下文不足、legacy fallback、伏笔数据缺失、任务书不完整或耗时异常,必须写入 problems / auto_handled,不得在最终报告中静默。
只根据任务书起草。不加载 core-constraints/anti-ai-guide(已内化到任务书)。只输出纯正文,无占位符。有结构化节点时围绕 CBN→CPNs→CEN 展开。中文思维写作。
必须使用 Agent 工具调用 reviewer,不得由主流程伪造审查 JSON。
Use the Agent tool to run webnovel-writer:reviewer.
Task:
reviewer 只返回 JSON;主流程负责用 Write 把返回的 JSON 写入 ${PROJECT_ROOT}/.webnovel/tmp/review_results.json(reviewer 不持 Write,是这份 artifact 的非写入方)。随后必须运行 review-pipeline;review-pipeline 会把同一路径覆盖为标准 review_result artifact(含 blocking_count),供 precommit gate 与后续提交命令使用。
调用后主流程必须记录 SubagentRun 汇总(仅供最终报告使用):
{
"name": "reviewer",
"user_label": "写作检查",
"status": "completed | partial | failed | skipped",
"problems": [],
"auto_handled": [],
"needs_user_action": false,
"duration_ms": 0,
"outputs": []
}
reviewer 跳过、失败、输出不完整、--minimal 写 no-review artifact、blocking issue、维度跳过或耗时异常,必须写入 problems / auto_handled,不得在最终报告中静默。
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" review-pipeline \
--chapter {chapter_num} \
--review-results "${PROJECT_ROOT}/.webnovel/tmp/review_results.json" \
--metrics-out "${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json" \
--report-file "审查报告/第{chapter_num}章审查报告.md" \
--save-metrics
审查只跑一轮,reviewer 只调用一次。blocking=true 的问题在不改剧情、不破设定的前提下定点修复后直接进 Step 4,不重新调用 reviewer;确实无法修复的 blocking 问题用 AskUserQuestion 让用户裁决(接受当前版本 / 手动修复 / 放弃)。非 blocking issue 交给 Step 4 处理。--fast 只检查 setting/timeline/continuity。
--minimal 不调用 reviewer 与 review-pipeline,但必须覆盖写入本章新的 no-review review_results.json(禁止复用旧 artifact),使 Step 5 提交链有有效 --review-result(成功标准“审查已落库”对 --minimal 的豁免仍成立):
python -X utf8 -c "import json,os; from pathlib import Path; root=Path(os.environ['PROJECT_ROOT']); ch=int('{chapter_num}'); p=root/'.webnovel'/'tmp'/'review_results.json'; p.parent.mkdir(parents=True,exist_ok=True); p.write_text(json.dumps({'chapter':ch,'issues':[],'issues_count':0,'blocking_count':0,'has_blocking':False,'summary':'minimal mode: reviewer skipped by user-selected --minimal flow','review_skipped':True,'review_mode':'minimal'},ensure_ascii=False,indent=2),encoding='utf-8')"
references/polish-guide.md 区段读:先 Grep 匹配 ^#{1,3} 定位锚点行号,再 Read 的 offset/limit 取段——主路径取 ## 2. 执行顺序(必须按序);Anti-AI 终检单独区段取 ## 2A. Anti-AI 检测细则 与 ## Phase 1 增补:Anti-AI 规范(7层,原版)(词库段),不全文读。references/writing/typesetting.md、references/style-adapter.md 短文件,全文读。
顺序:修复非 blocking issue → 风格适配 → 排版 → Anti-AI 终检。
只改表达不改事实。anti_ai_force_check=fail 时不进 Step 5。--minimal 仅排版。
必须使用 Agent 工具调用 data-agent,产出 fulfillment_result / disambiguation_result / extraction_result 三份 JSON,并复用 Step 3 的 review_results。
Use the Agent tool to run webnovel-writer:data-agent.
Task:
artifact 字段 schema 由 data-agent 自身定义、runtime validator 校验;主流程只检查文件存在与 schema,不重写、不补写、不口头替代。
调用后主流程必须记录 SubagentRun 汇总(仅供最终报告使用):
{
"name": "data-agent",
"user_label": "保存本章故事事实",
"status": "completed | partial | failed | skipped",
"problems": [],
"auto_handled": [],
"needs_user_action": false,
"duration_ms": 0,
"outputs": []
}
三份 artifact 写入状态、schema 不合格、pending 消歧、长时间无进展或输出不完整,必须写入 problems;自动重跑或降级处理必须写入 auto_handled。
先跑 precommit gate:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage precommit --format json
precommit 通过后,运行提交前只读 git diff 变更面校验(写入所有权 sanity check,只读、不 stage、不提交):
if git -C "${PROJECT_ROOT}" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git -C "${PROJECT_ROOT}" diff --name-status -- .
git -C "${PROJECT_ROOT}" diff --check -- .
fi
变更面不得出现插件目录、其他书项目、其他章节正文或不属于本章流程的手写状态文件;git diff 只覆盖 git 可见文件,SQLite / .webnovel/ 内部语义由 5.3 postcommit 与 runtime 只读查询验证。若项目根不是 git worktree,记录“跳过 git diff 校验”,不得因此跳过 precommit gate。本步只读,禁止在此执行 git add/git commit。
校验通过后运行 chapter-commit:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" chapter-commit \
--chapter {chapter_num} \
--review-result "${PROJECT_ROOT}/.webnovel/tmp/review_results.json" \
--fulfillment-result "${PROJECT_ROOT}/.webnovel/tmp/fulfillment_result.json" \
--disambiguation-result "${PROJECT_ROOT}/.webnovel/tmp/disambiguation_result.json" \
--extraction-result "${PROJECT_ROOT}/.webnovel/tmp/extraction_result.json"
自动判定:blocking_count>0 或 missed_nodes 非空 或 pending 非空 → rejected,否则 accepted。
projection_status 五项(state/index/summary/memory/vector)全部 done 或 skipped。
chapter_status 由 projection writer 自动推进:accepted→committed,rejected→rejected。
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage postcommit --format json
commit 未生成→重跑 5.2。projection 失败→只补跑 projection,不回退 Step 1-4。
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
projections retry --chapter {chapter_num} --format json
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" backup \
--chapter {chapter_num} \
--chapter-title "{title}"
备份必须以解析后的 PROJECT_ROOT 为准,禁止从工作区父目录执行裸全量 Git add,避免把书项目仓库作为父仓库的嵌入仓库/submodule 加入。
开始写章前先用作者语言说明本次目标、主要阶段和是否需要守在旁边,不承诺固定耗时。过程提示只说当前在做什么和会产生什么,不直接输出原始 JSON、traceback 或长命令日志;技术详情写入 .webnovel/logs/run_last.log:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" run-log \
--event write-start \
--payload-json "{\"chapter\": {chapter_num}, \"mode\": \"{mode}\"}" \
--format text
写章过程节点(最多 6 个):
重复执行同一章时,先读取可信断点:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" run-ledger write-resume \
--chapter {chapter_num} \
--mode "{mode}" \
--format json
run-ledger write-resume 只给续跑建议,不自动覆盖文件。它会根据正文、审查结果、data artifacts、commit、projection 和备份状态判断从哪里继续。正文被手动改过、章纲更新晚于正文、本章已 accepted 又重跑时,必须停下用有限选项询问:沿用当前正文 / 重新起草 / 只查看状态;不得覆盖作者手改。
每个关键步骤完成后记录 run-ledger record-write-step,至少记录 step、status、输入/输出文件路径、problems、auto_handled 和 duration_ms,供下一次续跑和最终报告使用。
少打扰确认策略:默认继续推进;只有创作方向、事实一致性、文件覆盖风险或 blocking issue 无法定点处理时才问。需要用户裁决时给 2-3 个有限选项,并说明每个选项影响。
卡住时必须说明卡点、已完成内容和恢复建议:例如“正文和审查报告已保留,保存本章故事事实失败;重新运行 /webnovel-write {chapter_num} 会从 data-agent 继续”。不可恢复故障才在最终报告提示 .webnovel/logs/run_last.log;平时只保留日志,不打扰作者。
收尾必须调用作者报告 helper,优先以 helper 输出组织最终回复:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" user-report \
--stage write \
--chapter {chapter_num} \
--format text
--minimal 除外)--minimal 除外)write-gate 的 prewrite / precommit / postcommit 均通过审查缺失→重跑 Step 3。摘要/状态/记忆缺失→重跑 Step 5。润色失真→回 Step 4 修复后重跑 Step 5。
最终回复必须面向作者,不输出原始 JSON、traceback 或长命令日志。使用固定三段式,并以一句总状态开头:
总状态:已完成 / 部分完成 / 需要你处理 / 未完成。
一、产生的文件与完成情况
- ...
二、过程中遇到的问题与异常耗时
- 已自动处理:...
- 建议确认:...
- 必须处理:...
三、下一步建议
- ...
必须汇报:
.webnovel/tmp/review_results.json。.webnovel/tmp/fulfillment_result.json。.webnovel/tmp/disambiguation_result.json。.webnovel/tmp/extraction_result.json。.story-system/commits/chapter_{NNN}.commit.json。状态规则:
chapter-commit rejected、任一 write-gate failed、projection failed 时,最终状态不得写“已完成”。--fast 和 --minimal 的跳过项必须说明;--minimal 跳过审查时归入“已自动处理”或“建议确认”,不得假装已完成完整审查。异常分类:
下一步建议必须使用任务化语言 + 可复制命令,例如:
- 接下来可以写下一章:
/webnovel-write {next_chapter}
不写 token 统计;如需排查故障,只给日志路径或建议运行 /webnovel-doctor。