日期:2026-06-05 状态:草案 v3 范围:重构
skills/、agents/与references/的提示词与读取方式,减少主 agent 不必要上下文,降低 token 消耗 核心原则:先保住端到端流程,再压缩提示词;Skill 只写调度合同,Agent 自带专业流程,Runtime 负责硬校验 裁剪总纲:所有保留 / 下沉 / 删除决策由第 4 节四条裁剪判据(职责、token、噪音、读取方式)推导,不靠逐条拍清单 v3 变更:① 新增第 4 节裁剪判据;② 第 5 节不可删清单收敛为跨层红线;③ 第 6 节纳入 references 与读取方式优化(以 reference-loading-map 为基线);④ 第 12 节验收从文案级断言改为行为 / 契约级 工具能力基线:Claude Code 工具名、subagent / Skill 能力、shell 行为以官方最新文档和本机实际安装为准;不得靠记忆或经验猜测
这份 plan 不是为了把所有文件压成某个固定格式,也不是为了让现有测试继续变绿。
本轮真正要做的是:
两条立场必须贯穿全程:
assert "字符串" in text)变红,这些断言本身就是要清掉的噪音;它们保护的若是真红线,就改写成行为级断言并迁到生产方,而不是为了过测试保留废话。allowed-tools、subagent 调用方式、Skill frontmatter、Skill / subagent 是否能加载彼此、Bash / PowerShell 行为、Read / Grep / Glob 参数能力的设计,都必须先核对 Claude Code 官方最新文档与本机当前版本;若二者有差异,以本机实际可用能力为落地准绳,并把差异记录到 Phase 0 清单。当前 Webnovel Writer 已经不是单一提示词 Skill,而是一个有运行时主链的写作插件:
project-status 判断项目短状态。doctor 做阶段感知体检。placeholder-scan 捕捉占位符与未补齐内容。story-system 生成 .story-system/ 写前合同树。write-gate 在写前、提交前、提交后做批量校验。context-agent 负责写前上下文组装。reviewer 负责结构化审查。review-pipeline 生成报告、指标并落库。data-agent 负责提取 commit artifacts。chapter-commit 负责写后事实提交和 projection。projections retry 负责失败投影补跑。backup 负责按书项目根备份。问题不在于缺少上下文,而是:
本轮重构要把写作流程从“主 agent 背完整教程”改成“主 agent 调度,subagent 专业执行,runtime 验收”。
主 agent 不传教程,只传任务;subagent 自带教程;runtime 负责验收;流程完整性由断言表兜底。
本节是重构的业务基准。后续任何压缩都必须先对照本节。
所有 Skill / Agent 改写必须保留这些规则:
/webnovel-init 在新项目尚未生成前不能用 where 把工作区解析成旧项目;必须用书名安全化得到目标目录。.story-system/ 是写前合同与写后 commit 的主链事实源。.webnovel/state.json 是兼容投影 / read model,不重新变成写后事实真源。story-system 时,章级 query 必须来自详细大纲中的真实本章目标,禁止传 {章纲目标}、第N章章纲目标 等占位文本。.story-system/MASTER_SETTING.json、.story-system/volumes/、.story-system/chapters/、.story-system/reviews/。write-gate --stage prewrite、precommit、postcommit 三道 gate。Agent 工具显式调用 subagent,不得由主流程口头替代 context-agent、reviewer、data-agent、deconstruction-agent 的产物。/webnovel-init 完整流程init 不是单纯采集器。精简时必须保留完整生成链:
CLAUDE_PLUGIN_ROOT 与 ${CLAUDE_PLUGIN_ROOT}/scripts/webnovel.py 可用。where 解析旧项目。webnovel-writer:deconstruction-agent,不得由 init 主流程口头替代。deconstruction-agent 只返回 init_reference_research,不写任何文件,不创建 .story-system、.webnovel、设定集、大纲、正文 或 canon/read model。quality.passed=false、confidence < 0.85 或有 warnings 时,不能折叠进创意约束包,只能展示风险并让用户确认。PROJECT_SLUG 和 PROJECT_ROOT,展示 WORKSPACE_ROOT、PROJECT_SLUG、PROJECT_ROOT,确认后再写文件。webnovel.py init。.webnovel/idea_bank.json,只写最终确认的创意约束。大纲/总纲.md,补齐故事一句话、核心主线 / 暗线、创意约束、反派分层、爽点里程碑。init 完成后立即生成 MASTER 合同:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
story-system "${GENRE}" --genre "${GENRE}" --persist --format json
此处不传 --chapter,只生成 MASTER_SETTING.json 和 anti_patterns.json。
state.json、核心设定集、大纲/总纲.md、idea_bank.json、.story-system/MASTER_SETTING.json。/webnovel-plan 完整流程plan 不是只生成章纲。精简时必须保留规划到写作合同的桥:
placeholder-scan。.webnovel/state.json 的初始化配置快照获取 genre;后续写作真源仍是 .story-system/。大纲/总纲.md,确认卷名、章节范围、核心冲突、卷末高潮,不足则阻断。10章/批,复杂题材可降到 8章/批,不建议超过 12章/批。CBN、CPNs、CEN、必须覆盖节点、本章禁区。大纲/第{volume_id}卷-总纲写回.json。master-outline-sync,只允许更新 V+1 卷锚点与显式伏笔 / open loop,不从自由文本推断。update-state -- --volume-planned ... --chapters-range ...。当本次规划已落到具体章节后,必须用真实章纲目标刷新 Story System runtime 合同:
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
进入写章前不得保留当前章相关实体的 [待...]、暂名、{占位}。
/webnovel-write 完整流程write 是本轮最重要的验收对象。精简时必须保留:
WORKSPACE_ROOT、SCRIPTS_DIR、SKILL_ROOT。preflight。where 解析真实 PROJECT_ROOT。placeholder-scan。CHAPTER_GOAL。.webnovel/state.json 的初始化配置快照读取 genre。刷新章级 Story System runtime 合同:
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
运行 prewrite gate:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage prewrite --format json
prewrite 必备:MASTER_SETTING.json、volume_{NNN}.json、chapter_{NNN}.json、chapter_{NNN}.review.json。
必须调用 webnovel-writer:context-agent。
输入只给必要参数:章节号、项目根、脚本目录、存储路径 / state 兼容读取路径、输出要求。
输出必须是一份可独立支撑起草的五段写作任务书。上下文不足时返回 blocker,不让主流程自行补脑。
只根据任务书起草。不要重新加载长篇 core constraints 或 anti-AI guide。
有结构化节点时围绕 CBN -> CPNs -> CEN 展开。正文必须无占位符。
默认与 --fast 必须调用 webnovel-writer:reviewer,--minimal 可跳过。
reviewer 输出 .webnovel/tmp/review_results.json 后,必须调用:
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 的问题必须定点修复,或经用户裁决后才进入润色 / 提交。非 blocking issue 交给润色。
只改表达,不改事实。
可保留现有 reference 加载,但不要让主 Skill 携带长教程:
references/polish-guide.mdreferences/writing/typesetting.mdreferences/style-adapter.md顺序:修复非 blocking issue -> 风格适配 -> 排版 -> Anti-AI 终检。
anti_ai_force_check=fail 时不进入提交。--minimal 仅排版。
必须调用 webnovel-writer:data-agent 生成三份 artifacts:
.webnovel/tmp/fulfillment_result.json.webnovel/tmp/disambiguation_result.json.webnovel/tmp/extraction_result.jsondata-agent 不直接写 state / index / summaries / memory / vectors,也不直接写 projection。
随后运行 precommit gate:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage precommit --format json
再运行 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。
必须运行 postcommit gate:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
write-gate --chapter {chapter_num} --stage postcommit --format json
projection_status 五项 state/index/summary/memory/vector 必须全部 done 或 skipped。
projection 失败只补跑:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" \
projections retry --chapter {chapter_num} --format json
最后备份必须以解析后的 PROJECT_ROOT 为准:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" backup \
--chapter {chapter_num} \
--chapter-title "{title}"
禁止从工作区父目录执行裸 git add .。
/webnovel-review 完整流程独立 review Skill 可以比写章 Step 3 更完整,但不能伪造 reviewer 结果:
CHAPTER_GOAL 刷新 story-system --emit-runtime-contracts。.webnovel/state.json 兼容投影和待审正文。webnovel-writer:reviewer 输出 .webnovel/tmp/review_results.json。review-pipeline --save-metrics 生成报告与 metrics 并写入 review_metrics。update-state -- --add-review ... 写兼容审查记录。blocking=true 时,询问用户立即修复或稍后处理。webnovel-query:
.story-system 写前合同 -> latest accepted CHAPTER_COMMIT -> memory-contract -> .webnovel/state.json / index.db fallback。knowledge query-entity-state / knowledge query-relationships。webnovel-learn:
source_chapter: null。project-memory add-pattern,不得手写 JSON。webnovel-dashboard:
/api/story-runtime/health。webnovel-doctor:
project-status --format summary,再 doctor --format text。本节是后续所有 Phase 的总纲。每一处“保留 / 下沉 / 删除 / 怎么读”的决策都由下面四条判据推导,不靠在各 Phase 里逐条枚举“必须保留”。
判据一·职责(谁生产、谁消费,信息就归谁)
data-agent.md 与 runtime,不进主 Skill。判据二·token(测主 agent 的常驻输入,不测文件行数)
always 全文读的大文件”(见第 6 节)。判据三·噪音(只留指令与红线,删元叙述与叮嘱)
| 噪音类型 | 例子 | 处理 |
|---|---|---|
| 重复 | schema 字段在 Skill / Agent 各写一遍 | 删一处,留生产方 |
| 元叙述(教它怎么想) | reviewer 的“思维链(ReAct):先读→对比→判断” | 删,不改变输出 |
| 过度否定堆叠 | 一连串“不要…禁止…” | 区分红线与叮嘱:红线留,叮嘱删 |
| 给错对象 | 主 agent 拿到只有 subagent 用的细则 | 按判据一迁走 |
| 凑结构 | 为段落模板硬撑的空段 | 删,并松绑对应的结构型测试 |
判据四·读取方式(该全文读的全文读,该部分读的按需读)
每个“读文件”动作必须标注读取方式,不默认全文 cat:
reference_search.py、knowledge query-*、专用 schema/validator;只有确认宿主可用时才使用 shell 工具按字段取,绝不默认 cat 整表。| 层 | 保留什么 | 不做什么 |
|---|---|---|
| Skill | 项目根保护、调度顺序、runtime 命令、Agent 输入契约形状、成功标准、失败恢复 | 不讲 subagent 内部教程,不复制长 schema,不吞掉 runtime gate |
| Agent | 专业流程、最小必要规则、输出合同、边界 | 不依赖 agents/references/*,不写主链投影,不替 runtime commit |
| Runtime | schema、gate、commit、projection、backup、状态推进 | 不承载 LLM 写作判断 |
| Skill references | 长示例、详细采集字段、章节节点细则、润色清单 | 不作为 subagent 的隐藏说明书;不被无差别全文加载 |
Agent 当前只能加载自己的单个 Agent 文件,因此不新增 agents/references/*。Agent 需要的专业规则(含其产物的完整 schema)必须压缩后保留在单文件内——这正是判据一“字段细则归生产方”的落点。
本节不再逐条枚举字段级“必须保留”。字段、示例、采集细则的去留交给第 4 节判据;本节只钉两件事:可下沉对象的范围,和绝不可删的跨层红线。
always 全文读大 reference(改区段读 / 检索读 / 条目化)。这些是跨 Skill / Agent / Runtime 的业务红线,任何瘦身都不得删,且必须有对应的行为 / 契约级断言(第 12 节):
placeholder-scan 出现在 plan / write 关键节点。CHAPTER_GOAL 解析,禁止占位 query。story-system --persist --emit-runtime-contracts 的章级刷新。write-gate prewrite / precommit / postcommit 三道 gate,顺序不可乱。Agent 工具显式调用 subagent,不得主流程口头替代。review-pipeline --save-metrics 落库。chapter-commit 是唯一事实提交入口,驱动 projection。projections retry,不回退写作步骤。backup --project-root "${PROJECT_ROOT}",禁止裸 git add .。字段级条目(如
planned_nodes等具体字段名)不在本清单——它们由判据一归到生产方 agent 与 runtime schema,由第 12 节契约级测试守护,不再作为主 Skill 的文案红线。
| 类型 | 文件 |
|---|---|
| 写章 Skill | webnovel-writer/skills/webnovel-write/SKILL.md |
| 写前 Agent | webnovel-writer/agents/context-agent.md |
| 数据 Agent | webnovel-writer/agents/data-agent.md |
| 审查 Agent | webnovel-writer/agents/reviewer.md |
| 拆书 Agent | webnovel-writer/agents/deconstruction-agent.md |
| 初始化 Skill | webnovel-writer/skills/webnovel-init/SKILL.md |
| 规划 Skill | webnovel-writer/skills/webnovel-plan/SKILL.md |
| 审查 Skill | webnovel-writer/skills/webnovel-review/SKILL.md |
| 查询 Skill | webnovel-writer/skills/webnovel-query/SKILL.md |
| 轻量 Skill | webnovel-learn、webnovel-dashboard、webnovel-doctor |
references 是本轮被低估的 token 面:顶层 references/ 加各 Skill 的 references/ 合计 60+ 个文件。优化不靠新增,而靠三件事——以现有加载映射为基线、给每个读取动作定读取方式、清掉已迁走的死文件。
references/index/reference-loading-map.md 已登记每个 Skill 每个 step 的实际 reference 消费,并已区分三类:
reference_search.py 检索 CSV(按 --table --query --genre 返回条目)——已是“按字段读”的范本。story-system 间接消费 CSV——已是按需。CSV 那条线已经做对了,本轮不重做检索层;只治“直接 Read 的 md 全文加载”,并把读取方式登记进 loading-map,使其从“读哪些文件”升级为“怎么读这些文件”。
always 全文读的大 md以下是“直接 Read 且 always / 高频触发”的大文件,是 init / plan / write 每跑必吞的常驻成本,按判据四改读取方式:
| 文件 | 行数 | 谁全文读 | 目标读取方式 |
|---|---|---|---|
references/genre-profiles.md |
552 | init + plan 双重 always | 区段读:按目标 genre 定位该题材段 |
creativity/selling-points.md |
513 | init Step5 always | 区段读 / 条目化 |
reading-power-taxonomy.md |
268 | plan Step7 | 区段读 |
outlining/chapter-planning.md |
260 | plan Step7 | 区段读「结构化节点规范」一节 |
creativity/creativity-constraints.md |
248 | init Step5 always | 区段读 8.1 五维评分 等命中节 |
webnovel-write/references/polish-guide.md |
246 | write Step4 always | 区段读 / 条目化 checklist |
shared/cool-points-guide.md |
242 | plan / review 触发 | 区段读 |
短文件(如 strand-weave-pattern.md 90 行)维持全文读,不动。
reference-gap-register.md 记录的 writing/*.md → CSV 迁移已部分完成:loading-map 的「当前非直接调用项」确认 combat-scenes、dialogue-writing、emotion-psychology、scene-description、desire-description、genre-hook-payoff-library 等已不再被直接 Read(由 CSV 承担触发),但文件仍在,合计约 1400 行死内容。处置步骤:
场景写法.csv / 写作技法.csv 是否真覆盖其内容——不盲删。csv/README.md 手动迁移规则),再处置 md。v2 第 6.2 列的候选已与现状脱节,按现状重判:
| v2 候选 | 现状 | 处置 |
|---|---|---|
blocking-override-guidelines.md |
已存在并落位(gap-register 2026-04-16) | 删候选,改为“沿用现有” |
chapter-node-rules.md |
与现有 outlining/chapter-planning.md「结构化节点规范」重复 |
不新建,对该节做区段读 |
init-flow.md |
与现有 init-collection-schema.md 重复 |
不新建,沿用并改区段读 |
subagent-contracts.md |
与判据一冲突(契约形状在主 Skill,schema 在生产方 agent) | 不新建 |
polish-checklist.md |
可作为 polish-guide.md 条目化的产物 |
仅在 6.2.2 条目化时顺带产出 |
原则不变:不为“三段式结构”强行新增 reference;优先改读取方式与清死文件,而非加文件。
先确认哪些文本该保留、下沉、删除、改读取方式,并把跨层红线先补成行为测试,形成瘦身前的绿色基线。
Agent、Skill、AskUserQuestion、Read、Grep、Glob、Bash、PowerShell 等是否存在、如何授权、在 subagent 中如何表现。复核结果落盘,后续提示词不得写入未核实的工具能力。跑基线验证:
python -m pytest webnovel-writer/scripts/data_modules/tests/test_prompt_integrity.py -q --no-cov
python -X utf8 webnovel-writer/scripts/run_behavior_evals.py --format json
python -X utf8 webnovel-writer/scripts/validate_plugin_package.py --format json
webnovel-write让写章 Skill 从“详细教程”变成“调度合同”,但保留完整写章主链。
--fast / --minimal。preflight、where、placeholder-scan、真实 CHAPTER_GOAL、story-system 合同刷新、write-gate prewrite。context-agent、reviewer、data-agent。review-pipeline --save-metrics。write-gate precommit。chapter-commit。write-gate postcommit。projections retry。backup --project-root "${PROJECT_ROOT}"。context-agent:
chapter={chapter_num}
project_root=${PROJECT_ROOT}
scripts_dir=${SCRIPTS_DIR}
storage_path=${PROJECT_ROOT}/.webnovel
state_file=${PROJECT_ROOT}/.webnovel/state.json(projection/read-model,仅兼容读取)
要求:先 research,再按 本章硬性约束 -> CBN/CPNs/CEN -> 本章禁区 -> 风格指引 -> dynamic_context 补充参考 的顺序输出五段写作任务书;上下文不足时返回 blocker。
reviewer:
chapter={chapter_num}
chapter_file=${CHAPTER_FILE}
project_root=${PROJECT_ROOT}
scripts_dir=${SCRIPTS_DIR}
output=${PROJECT_ROOT}/.webnovel/tmp/review_results.json
要求:只输出结构化审查结果,不评分,不口头总结。
data-agent:
chapter={chapter_num}
chapter_file=${CHAPTER_FILE}
project_root=${PROJECT_ROOT}
scripts_dir=${SCRIPTS_DIR}
output_dir=${PROJECT_ROOT}/.webnovel/tmp
要求:生成 fulfillment_result.json、disambiguation_result.json、extraction_result.json;不直接写 projection。
write-gate precommit 与 artifact_validator 兜底 schema。git add .、禁止主流程口头替代 subagent。context-agent目标:成为上下文压缩器,输出稳定 chapter_task_brief。
必须保留:
memory-contract load-context。query-entity、query-rules、get-timeline 按需查询。.story-system/ 合同优先,state.json 仅兼容读取。chapter_directive.goal / 章纲真实目标优先,dynamic_context 只作写法参考。可以删除或压缩:
data-agent目标:只做事实提取和 artifacts 生成。
必须保留:
fulfillment_result.json 顶层 planned_nodes、covered_nodes、missed_nodes、extra_nodes。disambiguation_result.json 顶层 pending。extraction_result.json 顶层 accepted_events、state_deltas、entity_deltas、entities_appeared、scenes、summary_text。accepted_events 子项最小字段:event_id、chapter、event_type、subject、payload。state_deltas 字段命名:field、old、new。entity_deltas 字段命名:entity_type。可以删除或压缩:
reviewer目标:只做可验证事实审查。
必须保留:
dimension_results,无问题也写 pass。必须删除或改写:
deconstruction-agent目标:拆参考书的可迁移模式,不污染新书 canon。
必须保留:
init_reference_research JSON。quality、resume_state、do_not_copy、canon_contamination_warnings。可以压缩:
webnovel-initSkill 可以更短,但必须保留第 3.2 节完整链。
压缩方向:
init-collection-schema.md,对其做区段读;不新建 init-flow.md(见 6.2.4)。不可删:
idea_bank.json。webnovel-planSkill 可以更短,但必须保留第 3.3 节完整链。
压缩方向:
outlining/chapter-planning.md「结构化节点规范」,对该节做区段读;不新建 chapter-node-rules.md(见 6.2.4)。不可删:
大纲/第{volume_id}卷-总纲写回.json。master-outline-sync。update-state。CHAPTER_GOAL 刷新 Story System 合同。webnovel-reviewSkill 可以更短,但必须保留第 3.5 节完整链。
压缩方向:
不可删:
story-system。review-pipeline --save-metrics。update-state --add-review。webnovel-query目标:查询先分类,再用最窄工具。
保留:
.story-system -> latest accepted commit -> memory-contract -> projection fallback 的优先级。优化:
memory-contract load-context;按查询类型调用最窄工具。knowledge query-entity-state。knowledge query-relationships。memory-contract query-rules。webnovel-learn目标:保持极简。
保留:
project-memory add-pattern。webnovel-dashboard目标:保持只读面板。
保留:
story-runtime/health。可调整:
webnovel-doctor目标:保持只读诊断。
保留:
project-status 先行。doctor 阶段感知检查。可调整:
webnovel-writer/scripts/data_modules/tests/test_prompt_integrity.pywebnovel-writer/evals/fixtures/behavior/fast.json总原则:断言“做没做对”,不断言“文案里有没有某串字”。fast.json 的 commit_projection_runtime(真跑 commit → projection 并断言状态)是样板;assert "字符串" in text 是要逐步退役的形式。
chapter-commit 提交并驱动 projection;postcommit 五项 projection 全 done/skipped;失败只 projections retry;backup --project-root。chapter_commit_schema / story_event_schema / schemas)校验;新增 precommit 负向用例——缺 missed_nodes / pending / 关键字段时 precommit 必须拦截。这取代“主 Skill 文案里必须出现字段名”的检查。name/description/model/color、tools 最小集、不依赖 agents/references/*。load-context;deconstruction-agent 不写文件、产 init_reference_research、防 canon 污染、保留 Step 1.5 与确认门。.story-system/ 主链与节拍表/时间线/章纲节点/总纲写回/状态更新;query / dashboard / doctor 只读不写项目文件。| 现有断言 | 问题 | 处置 |
|---|---|---|
test_webnovel_write_data_agent_prompt_requires_extraction_schema |
逐字要求主 Skill 写出 schema 字段名,与判据一冲突 | 删;字段保障迁到 data-agent 单文件 + precommit 负向用例 |
test_data_agent_is_described_as_extraction_only... 的字段名清单 |
检查 data-agent.md 含字段名(文案级) | 保留并加强为 data-agent 单文件 schema 的契约校验 |
test_agent_template_structure(要求 1–8 连续编号段) |
强迫凑结构;删 reviewer 的 ReAct 节会误伤 | 松绑:删 ReAct 后重排编号或下调段数要求,别为过测试留空段 |
各 assert "字符串" in SKILL.md 措辞锚定项 |
锚文案、阻碍瘦身 | 改为行为 / 契约断言,或迁到生产方 |
文档与提示词层:
python -m pytest webnovel-writer/scripts/data_modules/tests/test_prompt_integrity.py -q --no-cov
python -X utf8 webnovel-writer/scripts/run_behavior_evals.py --format json
python -X utf8 webnovel-writer/scripts/validate_plugin_package.py --format json
稳妥回归:
python -m pytest webnovel-writer/scripts/data_modules/tests webnovel-writer/scripts/tests -q --no-cov
plugin-structure;Skill / Agent 修改符合 plugin-dev。后续所有修改必须遵循本机官方插件指导:
C:\Users\lcy\.claude\plugins\marketplaces\claude-plugins-official\plugins\plugin-dev
落地规则:
plugin-structure:.claude-plugin/plugin.json 位于插件根的 .claude-plugin/;skills/、agents/、hooks/、scripts/ 保持插件根层级。skill-development:每个 Skill 一个目录,必须有 SKILL.md;frontmatter 至少包含 name 和具体触发型 description;详细资料可以放入该 Skill 自己的 references/,按需读取。agent-development:每个 Agent 是 agents/*.md 单文件;frontmatter 包含 name、description、model、color,tools 限定到最小必要集合。description 只需说明调用方、职责和交付产物。hook-development:插件级 hooks/hooks.json 使用 wrapper 格式,命令路径使用 ${CLAUDE_PLUGIN_ROOT}。plugin-validator 思路校验 manifest、skills、agents、hooks、README、LICENSE、敏感信息和路径可移植性。| 风险 | 影响 | 控制 |
|---|---|---|
| 为了格式精简删掉真实流程 | 写作链断裂 | 第 3 节作为流程断言,prompt integrity / behavior eval 覆盖 |
| 主 Skill 过度精简 | Agent 输入不足 | Skill 保留 Agent 最小输入合同 |
| schema 压缩后 agent 漏字段 | commit 前失败 | artifact_validator 与 write-gate precommit 阻断 |
| Agent 单文件过短 | 专业执行质量下降 | 单文件保留最小必要流程、边界和输出合同 |
| reference 下沉过多 | 执行时忘记读取 | reference 只给长细则,主流程保留触发条件 |
| 区段读锚点漂移 | 读到错段或空内容 | reference 用稳定标题锚点;区段读失败时回退全文读并告警 |
| 文案级断言阻碍瘦身 | 误把测试当约束 | 退役文案断言、改行为 / 契约级(第 12 节);删 / 迁前确认非红线 |
| query 默认少查导致答案不完整 | 查询质量下降 | 分类后按需补查,回答中说明降级 |
| state.json 被误当事实源 | 写后事实漂移 | 明确 .story-system 与 accepted commit 优先级 |
| init 拆书污染 canon | 新书设定侵权或撞梗 | deconstruction-agent 不写文件,init 用户确认后才写入差异化模式 |
webnovel-write:先保全写章主链,再瘦主 Skill;同步退役锚文案的 schema 断言。context-agent:稳定五段任务书和上下文压缩。data-agent:schema 作为单文件唯一真源,删长 payload 教程;加 precommit 负向用例。reviewer + webnovel-review:删 ReAct 元叙述并重排段号,统一结构化审查链。webnovel-init + deconstruction-agent:保留确认门和防 canon 污染。webnovel-plan:保留规划到合同的桥。webnovel-query / webnovel-learn / webnovel-dashboard / webnovel-doctor。原因:
webnovel-write 承载最多 subagent 内部细节,先改收益最大。目标完成后,写章链路应该是:
preflight / where / placeholder-scan
↓
解析真实 CHAPTER_GOAL
↓
story-system 刷新 runtime contracts
↓
write-gate prewrite
↓
context-agent 生成五段写作任务书
↓
主 agent 根据任务书起草
↓
reviewer 审查
↓
review-pipeline 落库
↓
主 agent 定点修复和润色
↓
data-agent 生成 artifacts
↓
write-gate precommit
↓
chapter-commit
↓
write-gate postcommit
↓
projection retry(仅失败时)
↓
backup
每一层只知道自己需要知道的东西:
这才是本轮上下文减负的核心:不是把文档变短,而是让每一段上下文只在正确的时刻出现。