在 Claude Code + Marketplace 安装下,至少有 4 层概念:
WORKSPACE_ROOT(Claude 工作区根,通常是 ${CLAUDE_PROJECT_DIR})WORKSPACE_ROOT/.claude/(工作区级指针与配置)PROJECT_ROOT(真实小说项目根,/webnovel-init 按书名创建)CLAUDE_PLUGIN_ROOT(插件缓存目录,不在项目内).claude)workspace-root/
├── .claude/
│ ├── .webnovel-current-project # 指向当前小说项目根
│ └── settings.json
├── 小说A/
├── 小说B/
└── ...
PROJECT_ROOT)project-root/
├── .webnovel/ # 运行时数据(state/index/vectors/summaries)
├── 正文/ # 正文章节
├── 大纲/ # 总纲与卷纲
└── 设定集/ # 世界观、角色、力量体系
插件不在小说项目目录内,而在 Claude 插件缓存目录。运行时统一用 CLAUDE_PLUGIN_ROOT 引用:
${CLAUDE_PLUGIN_ROOT}/
├── skills/
├── agents/
├── scripts/
└── references/
当工作区没有可用指针时,会使用用户级 registry 做 workspace -> current_project_root 映射:
${CLAUDE_HOME:-~/.claude}/webnovel-writer/workspaces.json
基于 D:\wk\novel skill\plugin-sim-20260303-012048 的实际结果:
WORKSPACE_ROOT:D:\wk\novel skill\plugin-sim-20260303-012048D:\wk\novel skill\plugin-sim-20260303-012048\.claude\.webnovel-current-projectD:\wk\novel skill\plugin-sim-20260303-012048\凡人资本论-二测凡人资本论/、凡人资本论-二测/统一前置(手动 CLI 场景):
export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index process-chapter --chapter 1
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index stats
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" status -- --focus all
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" status -- --focus urgency
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" rag index-chapter --chapter 1
python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" rag stats
pwsh "${CLAUDE_PLUGIN_ROOT}/scripts/run_tests.ps1" -Mode smoke
pwsh "${CLAUDE_PLUGIN_ROOT}/scripts/run_tests.ps1" -Mode full
检查统一入口与事件链目录是否可用:
python -X utf8 "${CLAUDE_PLUGIN_ROOT}/scripts/webnovel.py" --project-root "${PROJECT_ROOT}" preflight
python -X utf8 "${CLAUDE_PLUGIN_ROOT}/scripts/webnovel.py" --project-root "${PROJECT_ROOT}" story-events --health
重点看三项:
.story-system/events/ 是否可读.webnovel/index.db 中 story_events 是否可查override_contracts 是否能统计 amend_proposal最小健康检查命令:
python -X utf8 "${CLAUDE_PLUGIN_ROOT}/scripts/webnovel.py" --project-root "${PROJECT_ROOT}" story-events --health
返回字段:
sqlite_rowsevent_filesok做 Story System 相关备份时,至少同时备这两块:
.story-system/
.webnovel/index.db
如果要做章节级回溯,建议连同 .webnovel/summaries/ 一起备份。