File contents story-setup:网文写作工具集基础设施部署
你是写作基础设施部署器。将网文写作工具集的全套基础设施(hooks、rules、agents、CLAUDE.md)部署到用户项目目录。
执行铁律:不覆盖用户已有配置,合并而非替换。
Phase 1:检测项目状态
检查当前目录是否已部署过(存在 .story-deployed)
如果已存在 → 使用 AskUserQuestion 确认是否重新部署
检查是否有书名目录(包含 追踪/ 子目录的目录,或用户自定义结构)
有 → 识别为长篇项目,显示当前项目信息
无 → 识别为新项目或短篇项目
检查 .claude/settings.local.json 是否存在
存在 → 读取现有配置,后续合并
不存在 → 后续创建新文件
检查 .active-book 文件是否存在
Phase 2:部署基础设施
使用 AskUserQuestion 确认部署位置后,依次执行。
2.0 部署清单(机械可检查)
Source path
Target path
Owner class
Merge mode
Validation check
skills/story-setup/references/templates/CLAUDE.md.tmpl
CLAUDE.md
user+managed
marker/section merge
contains story skill routing sections
skills/story-setup/references/templates/hooks/
.claude/hooks/
story-setup managed
recursive replace
session-*.sh, detect-story-gaps.sh, validate-story-commit.sh, lib/common.sh, lib/sentinel.sh exist
skills/story-setup/references/templates/rules/*.md
.claude/rules/*.md
story-setup managed
replace
every rule contains paths frontmatter
skills/story-setup/references/templates/agents/*.md
.claude/agents/*.md
story-setup managed
replace
7 agent files exist
skills/story-setup/references/agent-references/*.md
.claude/skills/story-setup/references/agent-references/*.md
story-setup managed
replace
every story-setup/references/agent-references/*.md reference resolves
skills/story-setup/references/templates/settings-hooks.json
.claude/settings.local.json
user+managed
merge by hook command
hook JSON valid and registered commands deduped
skills/story-setup/references/templates/上下文.md.tmpl
{书名}/追踪/上下文.md
user state
create only if absent
never overwrite existing writing context
generated sentinel
.story-deployed
story-setup managed
replace
contains agents_version, setup_skill_version, target_cli, resolver_strategy, references_dir
2.1 部署 CLAUDE.md
读取 skills/story-setup/references/templates/CLAUDE.md.tmpl
替换占位符(见下方「模板占位符」段)
写入项目根目录 CLAUDE.md(如已存在,按「CLAUDE.md 合并策略」处理)
2.2 部署 Hooks
递归复制完整目录树 :将 skills/story-setup/references/templates/hooks/ 复制到用户项目 .claude/hooks/
必须保留子目录 lib/,其中:
lib/common.sh 提供 project_root、discover_active_book、discover_all_books
lib/sentinel.sh 提供 .story-deployed 字段读取
只需对 .claude/hooks/*.sh 设置执行权限(chmod +x);lib/*.sh 由 hook source,不要求可执行位
2.3 部署 Rules
读取 skills/story-setup/references/templates/rules/ 下所有 .md 文件
复制到用户项目的 .claude/rules/ 目录
2.4 部署 Agents
读取 skills/story-setup/references/templates/agents/ 下所有 .md 文件
复制到用户项目的 .claude/agents/ 目录
Agent 文件属于 story-setup 管理文件,可安全覆盖;版本升级时按 UPGRADING.md 的版本检测结果重新部署
2.4.1 Agent 兼容性处理
Agent frontmatter 以 Claude Code 为主;OpenClaw/qclaw 等只要支持 AgentSkills,未知字段(如 memory、skills、disallowedTools)应被忽略。若目标工具报 frontmatter 错误,保留 name、description、tools 三项,删除不支持字段后再部署。
部署到项目后,agent 内引用的参考资料必须走 story-setup/references/agent-references/*.md 这一本 skill 内复制路径;不要跨 skill 引用其他 skill 的 references。若全局安装路径不同,优先用项目内 .claude/skills/ 或 skills/ 作为规范路径前缀,其次用工具的 skill 搜索能力,不要假定固定绝对路径。
2.4.2 部署 Agent References
将 skills/story-setup/references/agent-references/ 下所有 .md 复制到项目内 .claude/skills/story-setup/references/agent-references/
如目标项目已经使用项目本地 skills/ 目录,也可以同步复制到 skills/story-setup/references/agent-references/ 作为 fallback,但不得只复制 fallback 而遗漏 .claude/skills/ 主路径
校验:凡 agent 或 reference 中出现 story-setup/references/agent-references/<file>.md,源包与目标包都必须存在 <file>.md
2.5 部署 Session State 模板
读取 skills/story-setup/references/templates/上下文.md.tmpl
仅当已识别为长篇书目且 {书名}/追踪/ 已存在时,创建缺失的 {书名}/追踪/上下文.md
如果目标文件已存在,不覆盖;短篇项目不得因此创建 追踪/ 目录
2.6 合并 Hooks 注册到 settings.local.json
兼容性说明:settings-hooks.json 中 PreToolUse 的 if 字段使用 Claude Code hook 条件语法,需要运行环境支持 hook-level if。若目标工具不支持该字段,hook 脚本本身仍会自检并 advisory-only 退出;部署时可删除该 if 字段并保留 matcher + command。
读取 skills/story-setup/references/templates/settings-hooks.json
读取用户项目的 .claude/settings.local.json(如存在)
合并 hooks 配置(按「settings-hooks.json 合并算法」处理)
写入 .claude/settings.local.json
2.7 创建部署标记
Phase 3:验证安装
验证 hooks 注册:
检查 .claude/settings.local.json 中的 hooks 字段是否正确
检查 .claude/hooks/ 下的脚本是否存在且有执行权限
检查 .claude/hooks/lib/common.sh 与 .claude/hooks/lib/sentinel.sh 是否存在
验证 rules 路径:
检查 .claude/rules/ 下的规则文件是否存在且包含 paths frontmatter
验证 agents:
检查 .claude/agents/ 下的 7 个 agent 定义文件是否存在
验证 agent reference bundle:
检查 .claude/skills/story-setup/references/agent-references/ 下 reference 文件完整
检查所有 story-setup/references/agent-references/<file>.md 都能解析到 deployed bundle
验证部署标记:
检查 .story-deployed 是否存在且包含时间戳、agents_version: 10、setup_skill_version: 1.1.1、target_cli、resolver_strategy、references_dir
输出安装报告:
列出所有已部署的文件
列出需要注意的事项(如已有配置已合并)
提示用户可以开始使用 /story-long-write 或 /story-short-write
模板占位符
占位符
替换规则
示例
{项目名}
用户项目名称或目录名
《剑来》、《暗卫》
{书名}
书名目录名(与目录一致)
与 {项目名} 相同,或用户自定义
{目标平台}
目标发布平台
起点、番茄、晋江、知乎盐言
{作者名}
用户笔名或昵称
未指定时用「作者」
替换时去掉花括号。如果用户未指定项目名,用当前目录名。未指定的占位符保留原样不替换。
CLAUDE.md 合并策略
用户已有 CLAUDE.md 时,按 marker/section 合并:
优先识别 story-setup 管理块标记(如果旧项目已有标记,只替换标记内内容)
无标记时,读取用户现有 CLAUDE.md,按 ## 标题切分为 section map
读取模板 CLAUDE.md.tmpl,同样切分
模板中的标准 section(Skill 路由表、文件结构、协作规则、Context Recovery、语言)覆盖 用户同名 section
用户独有的 section(自定义内容)保留 不动
未知冲突用 AskUserQuestion 让用户选择保留哪个版本
settings-hooks.json 合并算法
hooks 注册合并按 command 字段去重:
读取用户现有 .claude/settings.local.json(如存在),提取 hooks 部分
读取 settings-hooks.json 模板,提取要注册的 hooks
对每个 hook event(SessionStart、PreToolUse 等):
用户已有的 hook command → 保留,不重复添加
模板中的新 hook command → append 到对应 event 的 hooks 数组
用户独有的其他配置(permissions、env 等)→ 完整保留
写入合并后的完整 settings.local.json
重新部署
.story-deployed 不存在 → 全新安装,Phase 2 全部执行
.story-deployed 存在且 agents_version: 10 → 提示已部署,AskUserQuestion 确认是否重新部署
.story-deployed 存在但 agents_version < 10 → 提示需要更新,重新执行 Phase 2 覆盖 agents/hooks/rules/reference bundle,CLAUDE.md 和 settings.local.json 走合并策略
参考资料
文件
用途
references/templates/CLAUDE.md.tmpl
项目根 CLAUDE.md 模板
references/templates/hooks/
6 个 hook 脚本模板 + lib/common.sh/lib/sentinel.sh
references/templates/rules/
4 条 path-scoped 规则模板
references/templates/agents/
7 个 agent 定义模板(story-architect, character-designer, narrative-writer, consistency-checker, story-researcher, story-explorer, chapter-extractor)
references/agent-references/
Agent 模板自带的参考资料副本;部署到 .claude/skills/story-setup/references/agent-references/,避免跨 skill references
references/templates/settings-hooks.json
hooks 注册 JSON 片段
references/templates/上下文.md.tmpl
写作上下文模板
流程衔接
流水线: 部署
位置: 初始化(最前置)
时机
跳转到
命令
部署完成,开始写作
story-long-write / story-short-write
/story-long-write 或 /story-short-write
导入已有小说做拆解
story-import
/story-import
需要浏览器登录态(扫榜/拆文取原文)
browser-cdp
/browser-cdp
1 --- 2 name: story-setup-3 3 description: 网文写作工具集基础设施部署。将 hooks/rules/agents/CLAUDE.md 等基础设施部署到用户项目目录。 触发方式:/story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」 4 --- 5
6 # story-setup:网文写作工具集基础设施部署
7
8 你是写作基础设施部署器。将网文写作工具集的全套基础设施(hooks、rules、agents、CLAUDE.md)部署到用户项目目录。
9
10 **执行铁律:不覆盖用户已有配置,合并而非替换。**
11
12 ---
13
14 ## Phase 1:检测项目状态
15
16 1. 检查当前目录是否已部署过(存在 `.story-deployed`)
17 - 如果已存在 → 使用 AskUserQuestion 确认是否重新部署
18 2. 检查是否有书名目录(包含 `追踪/` 子目录的目录,或用户自定义结构)
19 - 有 → 识别为长篇项目,显示当前项目信息
20 - 无 → 识别为新项目或短篇项目
21 3. 检查 `.claude/settings.local.json` 是否存在
22 - 存在 → 读取现有配置,后续合并
23 - 不存在 → 后续创建新文件
24 4. 检查 `.active-book` 文件是否存在
25 - 存在 → 显示当前活跃书目
26 - 不存在 → 跳过
27
28 ## Phase 2:部署基础设施
29
30 使用 AskUserQuestion 确认部署位置后,依次执行。
31
32 ### 2.0 部署清单(机械可检查)
33
34 | Source path | Target path | Owner class | Merge mode | Validation check |
35 |-------------|-------------|-------------|------------|------------------|
36 | `skills/story-setup/references/templates/CLAUDE.md.tmpl` | `CLAUDE.md` | user+managed | marker/section merge | contains story skill routing sections |
37 | `skills/story-setup/references/templates/hooks/` | `.claude/hooks/` | story-setup managed | recursive replace | `session-*.sh`, `detect-story-gaps.sh`, `validate-story-commit.sh`, `lib/common.sh`, `lib/sentinel.sh` exist |
38 | `skills/story-setup/references/templates/rules/*.md` | `.claude/rules/*.md` | story-setup managed | replace | every rule contains `paths` frontmatter |
39 | `skills/story-setup/references/templates/agents/*.md` | `.claude/agents/*.md` | story-setup managed | replace | 7 agent files exist |
40 | `skills/story-setup/references/agent-references/*.md` | `.claude/skills/story-setup/references/agent-references/*.md` | story-setup managed | replace | every `story-setup/references/agent-references/*.md` reference resolves |
41 | `skills/story-setup/references/templates/settings-hooks.json` | `.claude/settings.local.json` | user+managed | merge by hook command | hook JSON valid and registered commands deduped |
42 | `skills/story-setup/references/templates/上下文.md.tmpl` | `{书名}/追踪/上下文.md` | user state | create only if absent | never overwrite existing writing context |
43 | generated sentinel | `.story-deployed` | story-setup managed | replace | contains `agents_version`, `setup_skill_version`, `target_cli`, `resolver_strategy`, `references_dir` |
44
45 ### 2.1 部署 CLAUDE.md
46
47 - 读取 `skills/story-setup/references/templates/CLAUDE.md.tmpl`
48 - 替换占位符(见下方「模板占位符」段)
49 - 写入项目根目录 `CLAUDE.md`(如已存在,按「CLAUDE.md 合并策略」处理)
50
51 ### 2.2 部署 Hooks
52
53 - **递归复制完整目录树**:将 `skills/story-setup/references/templates/hooks/` 复制到用户项目 `.claude/hooks/`
54 - 必须保留子目录 `lib/`,其中:
55 - `lib/common.sh` 提供 `project_root`、`discover_active_book`、`discover_all_books`
56 - `lib/sentinel.sh` 提供 `.story-deployed` 字段读取
57 - 只需对 `.claude/hooks/*.sh` 设置执行权限(`chmod +x`);`lib/*.sh` 由 hook `source`,不要求可执行位
58
59 ### 2.3 部署 Rules
60
61 - 读取 `skills/story-setup/references/templates/rules/` 下所有 `.md` 文件
62 - 复制到用户项目的 `.claude/rules/` 目录
63
64 ### 2.4 部署 Agents
65
66 - 读取 `skills/story-setup/references/templates/agents/` 下所有 `.md` 文件
67 - 复制到用户项目的 `.claude/agents/` 目录
68 - Agent 文件属于 story-setup 管理文件,可安全覆盖;版本升级时按 `UPGRADING.md` 的版本检测结果重新部署
69
70 ### 2.4.1 Agent 兼容性处理
71
72 - Agent frontmatter 以 Claude Code 为主;OpenClaw/qclaw 等只要支持 AgentSkills,未知字段(如 `memory`、`skills`、`disallowedTools`)应被忽略。若目标工具报 frontmatter 错误,保留 `name`、`description`、`tools` 三项,删除不支持字段后再部署。
73 - 部署到项目后,agent 内引用的参考资料必须走 `story-setup/references/agent-references/*.md` 这一本 skill 内复制路径;不要跨 skill 引用其他 skill 的 references。若全局安装路径不同,优先用项目内 `.claude/skills/` 或 `skills/` 作为规范路径前缀,其次用工具的 skill 搜索能力,不要假定固定绝对路径。
74
75 ### 2.4.2 部署 Agent References
76
77 - 将 `skills/story-setup/references/agent-references/` 下所有 `.md` 复制到项目内 `.claude/skills/story-setup/references/agent-references/`
78 - 如目标项目已经使用项目本地 `skills/` 目录,也可以同步复制到 `skills/story-setup/references/agent-references/` 作为 fallback,但不得只复制 fallback 而遗漏 `.claude/skills/` 主路径
79 - 校验:凡 agent 或 reference 中出现 `story-setup/references/agent-references/<file>.md`,源包与目标包都必须存在 `<file>.md`
80
81 ### 2.5 部署 Session State 模板
82
83 - 读取 `skills/story-setup/references/templates/上下文.md.tmpl`
84 - 仅当已识别为长篇书目且 `{书名}/追踪/` 已存在时,创建缺失的 `{书名}/追踪/上下文.md`
85 - 如果目标文件已存在,不覆盖;短篇项目不得因此创建 `追踪/` 目录
86
87 ### 2.6 合并 Hooks 注册到 settings.local.json
88
89 > 兼容性说明:`settings-hooks.json` 中 PreToolUse 的 `if` 字段使用 Claude Code hook 条件语法,需要运行环境支持 hook-level if。若目标工具不支持该字段,hook 脚本本身仍会自检并 advisory-only 退出;部署时可删除该 `if` 字段并保留 matcher + command。
90
91 - 读取 `skills/story-setup/references/templates/settings-hooks.json`
92 - 读取用户项目的 `.claude/settings.local.json`(如存在)
93 - 合并 hooks 配置(按「settings-hooks.json 合并算法」处理)
94 - 写入 `.claude/settings.local.json`
95
96 ### 2.7 创建部署标记
97
98 - 创建 `.story-deployed` 文件(sentinel file)
99 - 写入以下字段(YAML `key: value` 格式,hook 用 `references/templates/hooks/lib/sentinel.sh` 读取):
100 ```
101 deployed_at: <date -u +"%Y-%m-%dT%H:%M:%SZ">
102 agents_version: 10
103 setup_skill_version: 1.1.1
104 target_cli: claude-code
105 resolver_strategy: project-local-skill-reference
106 references_dir: .claude/skills/story-setup/references/agent-references
107 ```
108 - 此文件供 session-start.sh 和写作 skill 检测部署状态,避免重复提示
109 - 如果 `.story-deployed` 已存在但无 `agents_version` 或版本 < 10,提示用户重新运行 story-setup 以更新 hooks/agents/rules/reference bundle(具体变更见 `UPGRADING.md`)
110
111 ## Phase 3:验证安装
112
113 1. 验证 hooks 注册:
114 - 检查 `.claude/settings.local.json` 中的 hooks 字段是否正确
115 - 检查 `.claude/hooks/` 下的脚本是否存在且有执行权限
116 - 检查 `.claude/hooks/lib/common.sh` 与 `.claude/hooks/lib/sentinel.sh` 是否存在
117 2. 验证 rules 路径:
118 - 检查 `.claude/rules/` 下的规则文件是否存在且包含 `paths` frontmatter
119 3. 验证 agents:
120 - 检查 `.claude/agents/` 下的 7 个 agent 定义文件是否存在
121 4. 验证 agent reference bundle:
122 - 检查 `.claude/skills/story-setup/references/agent-references/` 下 reference 文件完整
123 - 检查所有 `story-setup/references/agent-references/<file>.md` 都能解析到 deployed bundle
124 5. 验证部署标记:
125 - 检查 `.story-deployed` 是否存在且包含时间戳、`agents_version: 10`、`setup_skill_version: 1.1.1`、`target_cli`、`resolver_strategy`、`references_dir`
126 6. 输出安装报告:
127 - 列出所有已部署的文件
128 - 列出需要注意的事项(如已有配置已合并)
129 - 提示用户可以开始使用 `/story-long-write` 或 `/story-short-write`
130
131 ---
132
133 ## 模板占位符
134
135 | 占位符 | 替换规则 | 示例 |
136 |--------|----------|------|
137 | `{项目名}` | 用户项目名称或目录名 | 《剑来》、《暗卫》 |
138 | `{书名}` | 书名目录名(与目录一致) | 与 `{项目名}` 相同,或用户自定义 |
139 | `{目标平台}` | 目标发布平台 | 起点、番茄、晋江、知乎盐言 |
140 | `{作者名}` | 用户笔名或昵称 | 未指定时用「作者」 |
141
142 替换时去掉花括号。如果用户未指定项目名,用当前目录名。未指定的占位符保留原样不替换。
143
144 ## CLAUDE.md 合并策略
145
146 用户已有 CLAUDE.md 时,按 marker/section 合并:
147 1. 优先识别 story-setup 管理块标记(如果旧项目已有标记,只替换标记内内容)
148 2. 无标记时,读取用户现有 CLAUDE.md,按 `##` 标题切分为 section map
149 3. 读取模板 CLAUDE.md.tmpl,同样切分
150 4. 模板中的标准 section(Skill 路由表、文件结构、协作规则、Context Recovery、语言)**覆盖**用户同名 section
151 5. 用户独有的 section(自定义内容)**保留**不动
152 6. 未知冲突用 AskUserQuestion 让用户选择保留哪个版本
153
154 ## settings-hooks.json 合并算法
155
156 hooks 注册合并按 command 字段去重:
157 1. 读取用户现有 `.claude/settings.local.json`(如存在),提取 hooks 部分
158 2. 读取 `settings-hooks.json` 模板,提取要注册的 hooks
159 3. 对每个 hook event(SessionStart、PreToolUse 等):
160 - 用户已有的 hook command → 保留,不重复添加
161 - 模板中的新 hook command → append 到对应 event 的 hooks 数组
162 - 用户独有的其他配置(permissions、env 等)→ 完整保留
163 4. 写入合并后的完整 settings.local.json
164
165 ## 重新部署
166
167 - `.story-deployed` 不存在 → 全新安装,Phase 2 全部执行
168 - `.story-deployed` 存在且 `agents_version: 10` → 提示已部署,AskUserQuestion 确认是否重新部署
169 - `.story-deployed` 存在但 `agents_version` < 10 → 提示需要更新,重新执行 Phase 2 覆盖 agents/hooks/rules/reference bundle,CLAUDE.md 和 settings.local.json 走合并策略
170
171 ---
172
173 ## 参考资料
174
175 | 文件 | 用途 |
176 |------|------|
177 | references/templates/CLAUDE.md.tmpl | 项目根 CLAUDE.md 模板 |
178 | references/templates/hooks/ | 6 个 hook 脚本模板 + `lib/common.sh`/`lib/sentinel.sh` |
179 | references/templates/rules/ | 4 条 path-scoped 规则模板 |
180 | references/templates/agents/ | 7 个 agent 定义模板(story-architect, character-designer, narrative-writer, consistency-checker, story-researcher, story-explorer, chapter-extractor) |
181 | references/agent-references/ | Agent 模板自带的参考资料副本;部署到 `.claude/skills/story-setup/references/agent-references/`,避免跨 skill references |
182 | references/templates/settings-hooks.json | hooks 注册 JSON 片段 |
183 | references/templates/上下文.md.tmpl | 写作上下文模板 |
184
185 ---
186
187 ## 流程衔接
188
189 **流水线:** 部署
190 **位置:** 初始化(最前置)
191
192 | 时机 | 跳转到 | 命令 |
193 |---|---|---|
194 | 部署完成,开始写作 | story-long-write / story-short-write | `/story-long-write` 或 `/story-short-write` |
195 | 导入已有小说做拆解 | story-import | `/story-import` |
196 | 需要浏览器登录态(扫榜/拆文取原文) | browser-cdp | `/browser-cdp` |
majiayu000/claude-skill-registry-data/tree/main/workflow/story-setup commit 52be8a2b40
Frequently asked questions How do I install the Story Setup skill? Run npx skillmds add majiayu000/story-setup-3 in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Story Setup skill do? 网文写作工具集基础设施部署。将 hooks/rules/agents/CLAUDE.md 等基础设施部署到用户项目目录。 触发方式:/story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」 It is listed under Productivity on SkillMD.
Is Story Setup safe to use? This skill has not completed SkillMD's automated safety review yet. Capability flags: docs only. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Story Setup? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Story Setup free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Story Setup? majiayu000 (@majiayu000) published this skill. Their other Agent Skills are listed on their SkillMD profile.