webnovel-learn 是一个面向网文写作的技能,用于把当前会话中出现的、可复用的成功写作模式沉淀到项目记忆中,方便后续写作复用。
用途
该技能的核心目标是从当前会话提取可复用的写作模式(如钩子、节奏、对话、微兑现等),并追加到 .webnovel/project_memory.json。它适合在写作过程中发现某种写法有效后,将其记录为可复用的经验。
主要能力
- 提取写作模式:从用户输入的经验文本中提炼模式;若用户输入为空,则取本次对话中用户认可的写法。
- 模式归类:将模式归类为 hook、pacing、dialogue、payoff、emotion、format 或 other,无法归类时使用 other。
- 写入项目记忆:调用 project-memory add-pattern 将模式写入 .webnovel/project_memory.json,支持指定 pattern_type、description、category(可空)和 importance(high/medium/low)。
- 去重保护:追加前扫描已有 patterns,若 pattern_type 与 description 完全相同则跳过并告知用户,部分相似不去重。
- 章节号关联:读取 .webnovel/state.json 的 progress.current_chapter 作为当前章节号;缺失时使用 source_chapter: null,不阻断流程。
使用方式
该技能需在项目根目录执行,且项目需存在 .webnovel/state.json。执行时先通过统一入口解析项目根目录,避免写错目录,命令如下:
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}" export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT:?}/scripts" export PROJECT_ROOT="$(python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
随后读取 "$PROJECT_ROOT/.webnovel/state.json" 的 progress.current_chapter 作为当前章节号,解析用户输入(/webnovel-learn 后的经验文本;为空则取本次对话中用户认可的写法),归类 pattern_type,再调用 project-memory add-pattern 写入:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" project-memory add-pattern
--pattern-type "{pattern_type}"
--description "{用户输入或提炼后的完整描述}"
--category "{分类,可空}"
--importance "{high|medium|low}"
约束
- 不删除旧记录,仅追加。
- 追加前扫描已有 patterns;pattern_type + description 完全相同则跳过并告知用户,部分相似不去重。
- 禁止使用 Write 或手工编辑 .webnovel/project_memory.json。
成功标准
project_memory.json 存在且格式合法,新 pattern 已追加到 patterns 数组;输出包含 status: success 和完整 learned 对象。
失败恢复
- project_memory.json 不存在:脚本自动初始化 {"patterns": []} 后继续。
- JSON 解析失败:不写入脏数据,告知用户文件损坏并建议手动修复。
- state.json 缺失无法取章节号:用 source_chapter: null,不阻断。
适用场景
适用于网文写作项目中,需要把会话中验证有效的写作经验沉淀为项目记忆的场景,尤其是钩子、节奏、对话、微兑现等写作技巧的积累。
限制
必须在项目根目录执行,且需存在 .webnovel/state.json;写入必须通过脚本完成,不能手工编辑 project_memory.json;去重仅针对 pattern_type 与 description 完全相同的记录,部分相似不会去重。