name: webnovel-write description: Writes webnovel chapters (default 2000-2500 words). Use when the user asks to write a chapter or runs /webnovel-write. Runs context, drafting, review, polish, and data extraction.
正文/第{NNNN}章.md。review_metrics、summaries、chapter_meta。--fast/--minimal 只允许降级可选环节。/webnovel-write:Step 1 → 2A → 2B → 3 → 4 → 5 → 6/webnovel-write --fast:Step 1 → 2A → 3 → 4 → 5 → 6(跳过 2B)/webnovel-write --minimal:Step 1 → 2A → 3(仅3个基础审查)→ 4 → 5 → 6最小产物(所有模式):
正文/第{NNNN}章.mdindex.db.review_metrics 新纪录(含 overall_score).webnovel/summaries/ch{NNNN}.md.webnovel/state.json 的进度与 chapter_meta 更新路径约定:
references/... 相对当前 skill 目录。../../references/... 指向全局共享参考。references/step-3-review-gate.md
references/step-5-debt-switch.md
../../references/shared/core-constraints.md
references/polish-guide.md
references/writing/typesetting.md
references/style-adapter.md
--fast/--minimal 跳过)。references/style-variants.md
../../references/reading-power-taxonomy.md
../../references/genre-profiles.md
state.project.genre 已知时加载。references/writing/genre-hook-payoff-library.md
esports/livestream/cosmic-horror 时必读。references/writing/combat-scenes.md
references/writing/dialogue-writing.md
references/writing/emotion-psychology.md
references/writing/scene-description.md
references/writing/desire-description.md
Read/Grep:读取 state.json、大纲、章节正文与参考文件。Bash:运行 extract_chapter_context.py、index_manager、workflow_manager。Task:调用 context-agent、审查 subagent、data-agent 并行执行。必须做:
.webnovel/state.json。大纲/总纲.md、.claude/scripts/extract_chapter_context.py 存在。WORKSPACE_ROOT:Claude Code 打开的工作区根目录(可能是书项目的父目录,例如 D:\wk\xiaoshuo)PROJECT_ROOT:真实书项目根目录(必须包含 .webnovel/state.json,例如 D:\wk\xiaoshuo\凡人资本论)SKILL_ROOT:skill 所在目录(即本 SKILL.md 所在的 .claude/skills/webnovel-write)SCRIPTS_DIR:脚本目录(按存在性自动探测:工作区内 .claude/scripts → 用户目录 ~/.claude/scripts → ${CLAUDE_PLUGIN_ROOT}/scripts)chapter_num:当前章号(整数)chapter_padded:四位章号(如 0007)环境设置(bash 命令执行前):
# WORKSPACE_ROOT:Claude Code 的工作区根(通常等于 $CLAUDE_PROJECT_DIR)
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
if [ -d "${WORKSPACE_ROOT}/.claude/skills/webnovel-write" ]; then
export SKILL_ROOT="${WORKSPACE_ROOT}/.claude/skills/webnovel-write"
elif [ -d "${WORKSPACE_ROOT}/../.claude/skills/webnovel-write" ]; then
export SKILL_ROOT="${WORKSPACE_ROOT}/../.claude/skills/webnovel-write"
elif [ -d "${HOME}/.claude/skills/webnovel-write" ]; then
export SKILL_ROOT="${HOME}/.claude/skills/webnovel-write"
elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -d "${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write" ]; then
export SKILL_ROOT="${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write"
else
echo "ERROR: 未找到 webnovel-write skill 目录" >&2
exit 1
fi
if [ -d "${WORKSPACE_ROOT}/.claude/scripts" ]; then
export SCRIPTS_DIR="${WORKSPACE_ROOT}/.claude/scripts"
elif [ -d "${WORKSPACE_ROOT}/../.claude/scripts" ]; then
export SCRIPTS_DIR="${WORKSPACE_ROOT}/../.claude/scripts"
elif [ -d "${HOME}/.claude/scripts" ]; then
export SCRIPTS_DIR="${HOME}/.claude/scripts"
elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -d "${CLAUDE_PLUGIN_ROOT}/scripts" ]; then
export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
else
echo "ERROR: 未找到 scripts 目录" >&2
exit 1
fi
# 解析真实书项目根(后续所有 Read/Write 路径都必须以 $PROJECT_ROOT 为前缀,避免写到工作区根目录)
export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
输出:
# 开始整条任务
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-task --command webnovel-write --chapter {chapter_num} || true
# 进入某一步(示例:Step 1)
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 1" --step-name "Context Agent" || true
# Step 1 完成后记录(每个 Step 结束都要调用)
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 1" --artifacts '{"ok":true}' || true
# 全部 Step 结束后,再结束整条任务
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-task --artifacts '{"ok":true}' || true
要求:
--step-id 仅允许:Step 1 / Step 2A / Step 2B / Step 3 / Step 4 / Step 5 / Step 6。complete-step(失败不阻断)。使用 Task 调用 context-agent,参数:
chapterproject_rootstorage_path=.webnovel/state_file=.webnovel/state.json硬要求:
state 或大纲不可用,立即阻断并返回缺失项。输出:
执行前必须加载:
cat "${SKILL_ROOT}/../../references/shared/core-constraints.md"
硬要求:
正文/第{chapter_padded}章.md。[TODO]、[待补充])。输出:
--fast / --minimal 跳过)执行前加载:
cat "${SKILL_ROOT}/references/style-adapter.md"
硬要求:
输出:
执行前加载:
cat "${SKILL_ROOT}/references/step-3-review-gate.md"
调用约束:
Task 调用审查 subagent,禁止主流程伪造审查结论。issues/severity/overall_score。auto 路由:根据“本章执行合同 + 正文信号 + 大纲标签”动态选择审查器。核心审查器(始终执行):
consistency-checkercontinuity-checkerooc-checker条件审查器(auto 命中时执行):
reader-pull-checkerhigh-point-checkerpacing-checker模式说明:
--fast:核心 3 个 + auto 命中的条件审查器--minimal:只跑核心 3 个(忽略条件审查器)审查指标落库(必做):
# 统一入口 webnovel.py:无需 cd / PYTHONPATH,且自动注入 --project-root
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index save-review-metrics --data '@review_metrics.json'
硬要求:
--minimal 也必须产出 overall_score。review_metrics 不得进入 Step 5。执行前必须加载:
cat "${SKILL_ROOT}/references/polish-guide.md"
cat "${SKILL_ROOT}/references/writing/typesetting.md"
执行顺序:
critical(必须)high(不能修复则记录 deviation)medium/low(按收益择优)anti_ai_force_check: pass/fail)输出:
anti_ai_force_check)使用 Task 调用 data-agent,参数:
chapterchapter_file="正文/第{chapter_padded}章.md"review_score=Step 3 overall_scoreproject_rootstorage_path=.webnovel/state_file=.webnovel/state.json执行后检查(最小白名单):
.webnovel/state.json.webnovel/index.db.webnovel/summaries/ch{chapter_padded}.md.webnovel/observability/data_agent_timing.jsonl(观测日志)性能要求:
TOTAL > 30000ms 时,输出最慢 2-3 个环节与原因说明。债务利息:
step-5-debt-switch.md)。git add .
git commit -m "Ch{chapter_num}: {title}"
规则:
未满足以下条件前,不得结束流程:
正文/第{chapter_padded}章.mdoverall_score 且 review_metrics 成功落库critical,high 未修项有 deviation 记录anti_ai_force_check=pass(基于全文检查;fail 时不得进入 Step 5)state.json、index.db、summaries/ch{chapter_padded}.md执行检查:
test -f "${PROJECT_ROOT}/.webnovel/state.json"
test -f "${PROJECT_ROOT}/正文/第${chapter_padded}章.md"
test -f "${PROJECT_ROOT}/.webnovel/summaries/ch${chapter_padded}.md"
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index get-recent-review-metrics --limit 1
tail -n 1 "${PROJECT_ROOT}/.webnovel/observability/data_agent_timing.jsonl" || true
成功标准:
overall_score 与 Step 5 输入一致。触发条件:
恢复流程: