在 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