with one click
webnovel-init
深度初始化网文项目。通过分阶段交互收集完整创作信息,生成可直接进入规划与写作的项目骨架与约束文件。
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-powered writing toolkit — Web novel, Short story, Technical blog, Publishing automation / AI 驱动写作工具包 — 网文、短篇、技术博文、发布自动化
纯 AI 生图制作网文封面 & 技术博客封面。网文:600×800 竖版存入 作品信息/。技术博客:800×600 横版存入 博文/{系列}/cover.png。
Publish novel chapters from local Markdown files to the Fanqie Novel writer backend via browser automation. Supports single/batch/scheduled publish with login state persistence.
短篇写作工艺约束层。禁用词 + 过渡词管理。写/审时加载项目级工艺约束.md。
拆解盐选短篇参考文,提取钩子设计、悬念铺设、节奏控制、收束手法等写作模式。触发词:拆这篇、拆解、分析这个短篇、做拆解、帮我把这篇拆了、提取模式
中短篇初始化。定选题→出设定文件→机械门禁→盲审→零问题交付。
| name | webnovel-init |
| description | 深度初始化网文项目。通过分阶段交互收集完整创作信息,生成可直接进入规划与写作的项目骨架与约束文件。 |
| allowed-tools | Read Write Edit Grep Bash Agent AskUserQuestion WebSearch WebFetch |
| argument-hint | [书名或灵感(可选)] |
.webnovel/state.json、设定集/*、大纲/总纲.md、.webnovel/idea_bank.json、.story-system/MASTER_SETTING.json。/webnovel-plan 与 /webnovel-write 可直接运行。webnovel.py init。idea_bank.json、.story-system、设定集、大纲、正文、.webnovel/state.json 或任何 canon/read model 文件。路径说明:references/ 指 skills/webnovel-init/references/;../../references/ 指共享 references。详细采集字段见 references/init-collection-schema.md(按需区段读,逐项收集,必填项以「充分性闸门」为准)。
| Step | Trigger | Reference |
|---|---|---|
| Step 1 | always | references/system-data-flow.md、references/genre-tropes.md |
| 题材/卖点采集 | always | ../../references/genre-profiles.md(只读当前 genre 段) |
| 角色卡顿 | 人物扁平 | references/worldbuilding/character-design.md |
| 世界观/力量 | 按需 | references/worldbuilding/faction-systems.md、references/worldbuilding/power-systems.md、references/worldbuilding/world-rules.md、references/worldbuilding/setting-consistency.md |
| 创意约束 | Step 6 | references/creativity/creativity-constraints.md(区段:采集读 ## 一、创意包 Schema (Idea Package)、## 六、硬约束驱动创意 (Hard Constraints)、## 八、评分系统 (Scoring System),评分展示读 ### 8.1 五维评分)、references/creativity/selling-points.md(区段:## 9. 核心卖点定位模板 骨架,按需补 ### 1.3 核心卖点黄金公式、## 7. 实战检查清单);复合题材读 creative-combination.md;卡顿读 inspiration-collection.md;题材命中读 anti-trope-*.md |
| 命名 | 开始命名 | python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill init --table 命名规则 --query "{命名对象} {题材}" --genre {题材} |
按需读取上述长细则(创意约束、反套路库、世界观设计指南、卖点模板),不内联其条目。
Read/Grep:读项目上下文与参考文件。Bash:执行 webnovel.py init、文件存在性检查、最小验证。Agent:拆分并行子任务;Step 1.5 用户选择参考书拆解作灵感来源时调用 webnovel-writer:deconstruction-agent。AskUserQuestion:关键分歧裁决、候选选择、最终确认。WebSearch/WebFetch:仅在用户要求市场趋势/平台风向、创意约束需时间敏感依据、或题材信息明显不确定时使用,先 search 后 fetch 核验。环境设置(bash 命令执行前):
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-${OPENCODE_PROJECT_DIR:-$PWD}}"
export CLAUDE_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-${OPENCODE_PLUGIN_ROOT:-}}"
if [ -z "${CLAUDE_PLUGIN_ROOT}" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/scripts" ]; then
echo "ERROR: 未设置 CLAUDE_PLUGIN_ROOT 或缺少目录: ${CLAUDE_PLUGIN_ROOT}/scripts" >&2
exit 1
fi
export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
必须做:
${SCRIPTS_DIR}/webnovel.py 存在(仅支持插件目录)。where 把 WORKSPACE_ROOT 解析成书项目根;新项目尚不存在时 where 可能命中旧指针或旧项目。references/system-data-flow.md、references/genre-tropes.md;templates/genres/ 仅在选定题材后按需读取。输出:进入 Deep 采集前的"已知信息清单"和"待收集清单"。
进入故事核采集前,必须先用 AskUserQuestion 或直接提问确认用户是否提供灵感来源。不要默认拆书,也不要把参考作品当作必填项。
建议询问:
你这本书的灵感来源想从哪里开始?可以直接说原创想法,也可以提供参考作品做拆书提炼。若要拆书,请给参考书名+平台,并尽量提供章节摘录或文本路径;没有参考也可以直接跳过。
可接受来源:原创想法、参考作品拆书(书名/平台/章节摘录/文本路径)、市场趋势、题材模板/反套路库/已有脑洞片段。
当用户选择参考作品拆书且提供文本路径或章节摘录时,必须使用 Agent 工具调用 webnovel-writer:deconstruction-agent,不得由 init 主流程口头替代拆解结果。
Use the Agent tool to run `webnovel-writer:deconstruction-agent`.
Prompt: reference_title={reference_title}; reference_source={reference_source}; reference_text_path={reference_text_path}; reference_text_excerpt={reference_text_excerpt}; analysis_mode={quick|deep|auto}; init_goal={当前初始化故事方向或空}; target_genre={题材或空}。只返回 init_reference_research JSON 对象,不写任何文件,不创建目录,不写 .story-system、.webnovel、设定集、大纲、正文、idea_bank.json、state.json 或任何 canon/read model 文件。
调用后主流程必须记录一份 SubagentRun 汇总(仅供最终报告使用,不写入 canon):
{
"name": "deconstruction-agent",
"user_label": "参考作品拆解",
"status": "completed | partial | failed | skipped",
"problems": [],
"auto_handled": [],
"needs_user_action": false,
"duration_ms": 0,
"outputs": []
}
quality.passed=false、confidence < 0.85、输入不足、文本不可读、降级 quick mode 或输出不完整时,必须写入 problems,并让最终报告进入“建议确认 / 必须处理”。
处理规则:
init_reference_research JSON 后,只使用 reader_promise、opening_hook_patterns、cool_point_loops、protagonist_patterns、antagonist_pressure_patterns、pacing_notes、borrowable_structures、differentiation_requirements、init_candidates、quality。quality:quality.passed=false、confidence < 0.85 或 warnings 非空时,不得把候选折叠进创意约束包,只能把风险和需补充材料展示给用户确认。do_not_copy 和 canon_contamination_warnings 必须进入已知信息清单,作为后续创意生成红线。必收:书名、题材(支持 A+B 复合)、目标规模(总字数或总章数)、一句话故事、核心冲突、目标读者/平台。
canonical 题材集合(写入 project_info.genre):都市、玄幻、仙侠、奇幻、科幻、历史、悬疑、游戏、古言、现言、幻言、年代、种田、快穿、衍生。
可自由输入细分 preset / 套路 / 形式,初始化脚本会映射到 canonical 并按 taxonomy 加载模板(示例:修仙、系统流、规则怪谈、宫斗宅斗、电竞、末世)。优先让用户自由描述再二次结构化确认;卡住时给 2-4 个候选方向。
必收:主角姓名、主角欲望、主角缺陷(会害他付代价)、主角结构(单/多主角)、感情线配置(无/单女主/多女主)、反派分层(小/中/大)与镜像对抗一句话。可选:主角原型标签、多主角分工。
必收:金手指类型(可为"无金手指")、名称/系统名(无则留空)、风格、可见度、不可逆代价(必须有代价或明确"无+理由")、成长节奏。 条件必收:系统流给系统性格+升级节奏;重生给重生时间点+记忆完整度;传承/器灵给辅助边界+出手限制。
必收:世界规模(单城/多域/大陆/多界)、力量体系类型、势力格局、社会阶层与资源分配。 题材相关:货币体系与兑换规则、宗门/组织层级、境界链与小境界。
流程:
references/creativity/creativity-constraints.md 的 8.1 五维评分)辅助决策。备注:
idea_bank.json 或任何生成项目文件。必须输出"初始化摘要草案"并让用户确认:故事核(题材/一句话故事/核心冲突)、主角核(欲望/缺陷)、金手指核(能力与代价)、世界核(规模/力量/势力)、创意约束核(反套路+硬约束)。
确认规则:用户未明确确认,不执行生成;用户仅改局部,回到对应 Step 最小重采集。
在最终确认后、执行生成前,建议运行设定集审核专家组对已收集的设定做质检。
设定已收集完毕,是否由设定审核专家做最终质检?
/webnovel-review-settings --quick
审核通过(无阻断问题)→ 进入执行生成。
审核发现阻断问题 → 展示问题清单,用户选择:修改后重审 / 跳过继续 / 中断。
用户选择跳过 → 记录跳过原因到 .webnovel/logs/run_last.log。
此步骤不是充分性闸门的硬性条件——用户可跳过。但阻断问题未被修复会导致后续写作反复返工。
未满足以下条件前,禁止执行 webnovel.py init:
project_root 必须由书名安全化生成:PROJECT_ROOT="${WORKSPACE_ROOT}/${PROJECT_SLUG}";安全化结果为空或以 . 开头时自动前缀 proj-。${CLAUDE_PLUGIN_ROOT})下生成项目文件;禁止直接把 WORKSPACE_ROOT 当作 PROJECT_ROOT,除非用户明确指定当前目录就是书项目根。WORKSPACE_ROOT、PROJECT_SLUG、PROJECT_ROOT。PROJECT_SLUG="$(python -X utf8 -c "import re,sys; title=sys.argv[1].strip(); slug=re.sub(r'[\\\\/:*?\"<>|]+','',title); slug=re.sub(r'\\s+','-',slug).strip('-'); print(('proj-' + slug) if (not slug or slug.startswith('.')) else slug)" "{title}")"
PROJECT_ROOT="${WORKSPACE_ROOT}/${PROJECT_SLUG}"
echo "WORKSPACE_ROOT=${WORKSPACE_ROOT}"
echo "PROJECT_SLUG=${PROJECT_SLUG}"
echo "PROJECT_ROOT=${PROJECT_ROOT}"
参数全部来自上面的采集对象(书名/题材/主角/金手指/世界观/反派/创意约束等),逐字段映射为 webnovel.py init 的 --* 选项;完整字段清单见 references/init-collection-schema.md,可用 python "${SCRIPTS_DIR}/webnovel.py" init --help 核对选项名。
python "${SCRIPTS_DIR}/webnovel.py" init \
"${PROJECT_ROOT}" "{title}" "{genre}" \
--protagonist-name "{protagonist_name}" \
--target-words {target_words} --target-chapters {target_chapters} \
--protagonist-desire "{protagonist_desire}" --protagonist-flaw "{protagonist_flaw}" \
--golden-finger-type "{gf_type}" --gf-irreversible-cost "{gf_irreversible_cost}" \
--world-scale "{world_scale}" --power-system-type "{power_system_type}" \
--core-selling-points "{core_points}"
# 其余字段(结构/感情线/反派/势力/货币/境界/原型/读者/平台等)按采集对象继续追加对应 --* 选项
idea_bank.json写入 .webnovel/idea_bank.json,内容必须与最终选定方案一致:
{
"selected_idea": {"title": "", "one_liner": "", "anti_trope": "", "hard_constraints": []},
"constraints_inherited": {"anti_trope": "", "hard_constraints": [], "protagonist_flaw": "", "antagonist_mirror": "", "opening_hook": ""}
}
大纲/总纲.md 必须补齐:故事一句话、核心主线/暗线、创意约束(反套路、硬约束、主角缺陷、反派镜像)、反派分层、关键爽点里程碑(2-3 条)。
init 完成后立即生成 MASTER_SETTING,让后续 plan 有调性/禁忌参照。此处不传 --chapter(只生成 MASTER_SETTING.json 和 anti_patterns.json),也不传 --emit-runtime-contracts(还没有卷/章级数据);plan 拆到具体章节时再生成 volume/chapter/review 合同。
GENRE="$(python -X utf8 -c "import json,os; root=os.environ['PROJECT_ROOT']; s=json.load(open(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 "${GENRE}" --genre "${GENRE}" --persist --format json
test -f "${PROJECT_ROOT}/.webnovel/state.json"
find "${PROJECT_ROOT}/设定集" -maxdepth 1 -type f -name "*.md"
test -f "${PROJECT_ROOT}/大纲/总纲.md"
test -f "${PROJECT_ROOT}/.webnovel/idea_bank.json"
test -f "${PROJECT_ROOT}/.story-system/MASTER_SETTING.json"
test "$(basename "${PROJECT_ROOT}")" = "${PROJECT_SLUG}"
成功标准:
state.json 存在且 title/genre/target_words/target_chapters 不为空。世界观.md、力量体系.md、主角卡.md;单主角不生成 主角组.md,heroine_config=无女主 不生成 女主卡.md。金手指设计.md、复合题材-融合逻辑.md、爽点规划.md 或空目录;这些以主角卡、世界观、卷纲为事实源。总纲.md 已填核心主线与约束字段;idea_bank.json 已写入且与最终选定方案一致。.story-system/MASTER_SETTING.json 存在且 route.primary_genre 非空。触发:关键文件缺失;总纲关键字段缺失;约束启用但 idea_bank.json 缺失或不一致。
恢复:只补缺失字段,不全量重问;只重跑最小步骤(文件缺失→重跑 webnovel.py init;总纲缺字段→只 patch 总纲;idea_bank 不一致→只重写该文件);重新验证,全部通过后结束。
初始化开始前先说明本次会经历:收集故事核心 -> 确认创意约束 -> 生成项目骨架 -> 写入初始故事档案 -> 验证能否进入规划。过程提示用作者语言,不直接输出原始 JSON、traceback 或长命令日志;技术详情写入 .webnovel/logs/run_last.log:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" run-log \
--event init-progress \
--payload-json "{\"stage\": \"init\"}" \
--format text
过程提示每次不超过两行,只说当前动作和影响,例如“正在生成项目骨架:会创建设定集、总纲和初始故事档案”。少打扰确认策略:默认继续收集和生成;只有核心设定、参考拆解采用、项目目录安全、写入 canon 前的最终方案需要用户拍板。
需要用户裁决时使用有限选项,并说明每个选项影响;例如保留当前设定 / 修改局部 / 暂停初始化。卡住时必须说明卡点、已完成内容和恢复建议,例如“设定集已生成,Story System 初始档案缺失;重新运行 /webnovel-init 会只补缺失文件”。
不可恢复故障才在最终报告提示 .webnovel/logs/run_last.log;平时只保留日志,不打扰作者。收尾必须调用作者报告 helper:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" user-report \
--stage init \
--format text
最终回复必须面向作者,不输出原始 JSON、traceback 或长命令日志。使用固定三段式,并以一句总状态开头:
总状态:已完成 / 部分完成 / 需要你处理 / 未完成。
一、产生的文件与完成情况
- ...
二、过程中遇到的问题与异常耗时
- 已自动处理:...
- 建议确认:...
- 必须处理:...
三、下一步建议
- ...
必须汇报:
.webnovel/state.json、.webnovel/idea_bank.json。设定集/世界观.md、设定集/力量体系.md、设定集/主角卡.md、设定集/反派设计.md。大纲/总纲.md、.story-system/MASTER_SETTING.json。/webnovel-plan。异常分类:
下一步建议必须使用任务化语言 + 可复制命令,例如:
- 接下来可以规划第一卷:
/webnovel-plan 1
不写 token 统计;如需排查故障,只给日志路径或建议运行 /webnovel-doctor。