@double-codeing/flow2spec 2.2.2 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +73 -54
  2. package/cli.js +254 -14
  3. package/docs/Flow2Spec-/344/275/277/347/224/250/346/241/210/344/276/213-/346/250/241/346/213/237/345/257/271/350/257/235.md +123 -134
  4. package/docs/Flow2Spec-/346/274/224/350/256/262/347/250/277.md +411 -0
  5. package/docs/Flow2Spec-/350/256/276/350/256/241/350/257/264/346/230/216.md +574 -0
  6. package/docs/Flow2Spec/344/275/277/347/224/250/350/257/264/346/230/216.md +116 -76
  7. package/docs/README-/344/275/223/347/263/273/344/270/216/345/216/237/347/220/206.md +85 -44
  8. package/docs/README-/345/221/275/344/273/244/350/257/264/346/230/216.md +548 -79
  9. package/docs/README-/347/233/256/345/275/225/344/270/216/350/267/257/345/276/204/347/272/246/345/256/232.md +33 -62
  10. package/docs/images//346/212/200/350/203/275/351/227/255/347/216/257/345/233/276.png +0 -0
  11. package/lib/agents.js +15 -3
  12. package/lib/claudeSettingsAdapter.js +114 -0
  13. package/lib/codexAgentsAdapter.js +70 -0
  14. package/lib/flow2specConfig.js +229 -0
  15. package/lib/init.js +698 -25
  16. package/package.json +2 -2
  17. package/templates/AGENTS.md +98 -0
  18. package/templates/flow2spec.config.json +9 -0
  19. package/templates/hooks/f2s-config-inject.js +181 -0
  20. package/templates/knowledge/index.md +68 -0
  21. package/templates/knowledge/manifest-matchers.json +35 -0
  22. package/templates/knowledge/manifest-routing.json +45 -0
  23. package/templates/knowledge/matchers/m-doc-routing.json +11 -0
  24. package/templates/knowledge/matchers/m-f2s-config-precheck.json +15 -0
  25. package/templates/knowledge/matchers/m-implement-from-spec.json +10 -0
  26. package/templates/{template → knowledge/template}//345/220/216/347/253/257/346/212/200/346/234/257/346/250/241/347/211/210.md +3 -2
  27. package/templates/{template → knowledge/template}//347/273/210/347/250/277/346/250/241/347/211/210.md +5 -4
  28. package/templates/knowledge/topics/f2s-config-precheck.md +24 -0
  29. package/templates/knowledge/topics/f2s-fallback-triage.md +60 -0
  30. package/templates/knowledge/topics/f2s-implement-tech-design.md +21 -0
  31. package/templates/knowledge/topics/f2s-stock-docs-vs-req-docs.md +25 -0
  32. package/templates/rules/f2s-config-check.mdc +35 -0
  33. package/templates/rules/f2s-flow2spec-unified-entry.mdc +88 -0
  34. package/templates/rules/f2s-implement-tech-design.mdc +144 -0
  35. package/templates/rules/f2s-karpathy-guidelines.mdc +77 -0
  36. package/templates/rules/f2s-knowledge-preflight.mdc +70 -0
  37. package/templates/rules/f2s-stock-docs-vs-req-docs.mdc +16 -0
  38. package/templates/rules/f2s-task.mdc +202 -0
  39. package/templates/skills/f2s-ctx-build/SKILL.md +74 -173
  40. package/templates/skills/f2s-ctx-rm/SKILL.md +39 -43
  41. package/templates/skills/f2s-doc-add/SKILL.md +69 -106
  42. package/templates/skills/f2s-doc-arch/SKILL.md +20 -9
  43. package/templates/skills/f2s-doc-final/SKILL.md +29 -21
  44. package/templates/skills/f2s-doc-pdf/SKILL.md +17 -10
  45. package/templates/skills/f2s-git-commit/SKILL.md +189 -0
  46. package/templates/skills/f2s-karpathy-guidelines/SKILL.md +20 -0
  47. package/templates/skills/f2s-kb-feat/SKILL.md +72 -50
  48. package/templates/skills/f2s-kb-fix/SKILL.md +77 -46
  49. package/templates/skills/f2s-kb-merge/SKILL.md +9 -0
  50. package/templates/skills/f2s-kb-migrate/SKILL.md +356 -0
  51. package/templates/skills/f2s-kb-sync/SKILL.md +80 -59
  52. package/templates/skills/f2s-kb-upgrade/SKILL.md +225 -0
  53. package/templates/skills/f2s-req-backend/SKILL.md +35 -12
  54. package/templates/skills/f2s-req-clarify/SKILL.md +10 -2
  55. package/templates/skills/f2s-req-plan/SKILL.md +110 -0
  56. package/templates/skills/stock-docs-vs-req-docs/SKILL.md +10 -4
  57. package/docs/images//345/216/237/347/220/206/345/233/2761.png +0 -0
  58. package/docs/images//345/216/237/347/220/206/345/233/2762.png +0 -0
  59. package/docs/images//345/221/275/344/273/244/346/230/216/347/273/206/345/233/276.png +0 -0
  60. package/docs/images//346/227/245/345/270/270/346/223/215/344/275/234/346/265/201/347/250/213/345/233/276.png +0 -0
  61. package/docs/images//347/256/200/350/277/260/345/233/276.png +0 -0
  62. package/templates/rules/implement-tech-design.mdc +0 -177
  63. package/templates/rules/stock-docs-vs-req-docs.mdc +0 -14
@@ -0,0 +1,574 @@
1
+ # Flow2Spec 设计说明
2
+
3
+ ## 解决的问题
4
+
5
+ ```
6
+ ❌ 现状 ✅ Flow2Spec 之后
7
+
8
+ 架构约定 ──┐ .Knowledge/
9
+ 技术方案 ──┼──► 散落 ├── manifest-routing.json
10
+ 模块边界 ──┤ 无结构 ├── matchers/
11
+ 团队经验 ──┘ 每次重新解释 ├── topics/
12
+ ├── stock-docs/
13
+ └── req-docs/
14
+
15
+ AI 随时能读懂项目
16
+ ```
17
+
18
+ ---
19
+
20
+ ## 核心设计
21
+
22
+ ### 1. 知识与规则分离
23
+
24
+ ```mermaid
25
+ graph LR
26
+ subgraph K[".Knowledge/ 知识层"]
27
+ K1[架构说明]
28
+ K2[技术方案]
29
+ K3[路由索引]
30
+ end
31
+
32
+ subgraph R["配置根 执行层"]
33
+ R1[.cursor/rules/]
34
+ R2[.claude/rules/]
35
+ R3[.codex/AGENTS.md]
36
+ end
37
+
38
+ K -->|知识输入| AI[AI 工具]
39
+ R -->|规则约束| AI
40
+
41
+ note1["知识随项目迭代"] -.-> K
42
+ note2["规则随工具升级"] -.-> R
43
+ ```
44
+
45
+
46
+
47
+ ### 2. 渐进式路由
48
+
49
+ ```mermaid
50
+ graph LR
51
+ T[任务] --> M[manifest-routing\n读路由表]
52
+ M -->|关键词匹配| MT[matchers/xxx.json\n只读这一个分片]
53
+ MT -->|命中| TP[topics/xxx.md]
54
+ TP --> V{缺口检查}
55
+ V -->|通过| ACT[执行]
56
+ V -->|不足| Q[向用户澄清]
57
+ M -->|未命中| FB[fallback-triage\n结构化分诊]
58
+ ```
59
+
60
+
61
+
62
+ ### 3. 技能维护闭环
63
+
64
+ ```mermaid
65
+ graph LR
66
+ K[".Knowledge/"] --> AI["下次会话\n的 AI"]
67
+ AI --> C["代码\n变更"]
68
+
69
+ C -->|"修复 Bug"| FIX["f2s-kb-fix"] --> K
70
+ C -->|"新增能力"| FEAT["f2s-kb-feat"] --> K
71
+ C -->|"会话结束"| SYNC["f2s-kb-sync"] --> K
72
+ C -->|"提交代码"| CMT["f2s-git-commit\n收口检查"]
73
+ CMT -->|"未入库则提醒\n→ kb-sync/kb-feat"| K
74
+
75
+ D1["架构文档"] -->|f2s-doc-arch| FIN["f2s-doc-final"]
76
+ D2["PDF 方案"] -->|f2s-doc-pdf| FIN
77
+ FIN --> CTX["f2s-ctx-build"] --> K
78
+
79
+ OLD["存量代码/文档"] -->|f2s-doc-add| K
80
+
81
+ NR["新需求"] --> CL["f2s-req-clarify"] --> BE["f2s-req-backend"]
82
+ BE --> IMPL["implement-tech-design"] -->|f2s-kb-feat| K
83
+
84
+ GIT["Git 合并后"] -->|f2s-kb-merge| K
85
+ ```
86
+
87
+ 七条入口 · `f2s-git-commit` 是提交时的知识纪律收口 · `.Knowledge/` 是唯一汇聚点 · 知识驱动 AI,AI 驱动下轮开发
88
+
89
+
90
+
91
+ ### 4. 任务清单与跨会话续作
92
+
93
+ ```mermaid
94
+ graph LR
95
+ SKILL["f2s-kb-feat / f2s-kb-fix\nimplement-tech-design"] -->|"changeTracking: true"| TJ[".task/active/\ntask.md · todo.json"]
96
+ RP["f2s-req-plan\n(始终创建)"] --> TJ
97
+
98
+ TJ --> NS[新会话首条消息]
99
+ NS -->|关键词匹配| LD["加载剩余 checklist\n+ linkedSkill 上下文"]
100
+ LD --> RS[按原技能约束继续]
101
+ ```
102
+
103
+ 任务不因会话结束丢失 · 关键词自动续作,无需重新说明上下文 · 技能约束完整恢复
104
+
105
+ ---
106
+
107
+ ## 设计亮点
108
+
109
+ ### 一、路由与上下文加载
110
+
111
+ #### 1. matchers 分片,不嵌入 manifest
112
+
113
+ ```
114
+ ❌ 嵌入 manifest ✅ 独立分片
115
+
116
+ manifest.json (每次全读) manifest-routing.json
117
+ ├── task1: keywords:[...] → ├── task1 → m-order.json ──► 只读这一个
118
+ ├── task2: keywords:[...] ├── task2 → m-payment.json
119
+ └── task3: keywords:[...] └── task3 → m-refund.json
120
+
121
+ 更新关键词不动路由结构
122
+ 每次路由 token 成本固定
123
+ ```
124
+
125
+ #### 2. topicDependencies:依赖挂在主题上
126
+
127
+ ```
128
+ ❌ 挂在任务级 ✅ 挂在主题级
129
+
130
+ taskA → [dep, main] topicDependencies:
131
+ taskB → [main] ← 漏写了 main: [dep]
132
+ taskC → [main] ← 漏写了
133
+ 任何路径加载 main
134
+ 新增任务时漏写 → 静默失效 都自动带上前置依赖
135
+ ```
136
+
137
+ #### 3. topic 只存摘要,规则文件存全文
138
+
139
+ ```
140
+ .Knowledge/topics/implement-tech-design.md ← 轻量,路由时加载
141
+ ┌──────────────────────────────────────────┐
142
+ │ 主题 id、路径约定、下一步指针 │
143
+ │ ~100 行 │
144
+ └──────────────────────────────────────────┘
145
+ ↓ 命中后才读
146
+ .claude/rules/f2s-implement-tech-design.md ← 全文,执行时加载
147
+ ┌──────────────────────────────────────────┐
148
+ │ 完整执行约束、强制步骤、禁止项、边界说明 │
149
+ │ ~500 行 │
150
+ └──────────────────────────────────────────┘
151
+ ```
152
+
153
+ 路由层保持轻量 · 执行细节按需加载 · 两者独立更新
154
+
155
+ #### 4. 禁止全量扫描是硬约束
156
+
157
+ ```
158
+ 读取顺序(必须)
159
+
160
+ 1. manifest-routing.json ← 先看路由表
161
+ 2. matchers/xxx.json ← 只读命中分片
162
+ 3. index.md ← 按需,确认语义
163
+ 4. stock-docs / req-docs ← 按需,补充背景
164
+ 5. 业务源码 ← 最后手段
165
+
166
+ ❌ 未读 manifest 前,禁止全仓无范围扫描
167
+ ❌ 同一任务线内,manifest 已读则不重复全文读取
168
+ ❌ index.md 禁止与 manifest 交替"刷清单"代替决策
169
+ ```
170
+
171
+ #### 5. 技能触发词写在 description 字段
172
+
173
+ ```yaml
174
+ name: f2s-kb-sync
175
+ description: >
176
+ 同步已实现能力到知识库。
177
+ 触发词:f2s-kb-sync、全局同步、知识库同步、已实现能力
178
+ ```
179
+
180
+ ```
181
+ 用户输入 → Agent 扫 description 做语义匹配 → 触发对应技能
182
+ ```
183
+
184
+ 触发词在 description 里 · 不在正文里 · 命中率更高 · 双语覆盖减少漏触发
185
+
186
+ ---
187
+
188
+ ### 二、知识结构
189
+
190
+ #### 1. stock-docs vs req-docs 语义禁止
191
+
192
+ ```
193
+ stock-docs/ req-docs/
194
+ 架构说明 / 终稿 需求 / 技术方案
195
+
196
+ ↓ 用于 ↓ 用于
197
+ 知识路由 / 背景参考 驱动编码实现
198
+
199
+ ✅ 可以读 ✅ 可以读
200
+ ❌ 不能作为编码输入 ✅ implement-tech-design 的输入
201
+ ```
202
+
203
+ 防止:用过期参考文档驱动实现 → 代码与最新方案脱节
204
+
205
+ #### 2. init 幂等
206
+
207
+ ```
208
+ flow2spec init 可以安全重跑
209
+
210
+ ✅ 做 ❌ 不做
211
+ ┌─────────────────────┐ ┌─────────────────────┐
212
+ │ 补齐缺失目录和模板 │ │ 写业务文档内容 │
213
+ │ 落盘 rules/skills │ │ 更新路由关键词 │
214
+ │ 包级结构对齐 │ │ 覆盖已有知识内容 │
215
+ └─────────────────────┘ └─────────────────────┘
216
+
217
+ 结构操作 ≠ 业务语义 两者职责不交叉
218
+ ```
219
+
220
+ #### 3. 知识版本化
221
+
222
+ ```
223
+ git log .Knowledge/
224
+
225
+ a3f1c2 f2s-kb-feat: 新增退款状态机路由
226
+ b7e9d1 f2s-kb-fix: 修正 RestTemplate 注入约定
227
+ c2a8f0 f2s-ctx-build: 订单服务架构说明入库
228
+ d5b3e9 f2s-kb-sync: 沉淀支付重试队列设计
229
+
230
+ 代码变更 + 知识变更 → 同一 commit 或相邻 commit
231
+ ```
232
+
233
+ 知识有版本 · 可 review · 可回溯 · 可 blame
234
+
235
+ #### 4. 禁止历史否定堆砌
236
+
237
+ ```
238
+ ❌ 错误写法(知识库越来越臃肿) ✅ 正确写法(只保留当前成立的表述)
239
+
240
+ RestTemplate 约定(更新于 2026-05) RestTemplate 必须通过 Bean 注入
241
+ ~~原错误地使用 new RestTemplate()~~ 禁止直接 new RestTemplate()
242
+ → 不再与直接实例化有关
243
+ → 原写法已废弃,现改为 Bean 注入
244
+ ```
245
+
246
+ 每次修复原位改写 · 不叠加历史 · 知识库永远只描述现在
247
+
248
+ ---
249
+
250
+ ### 三、执行约束
251
+
252
+ #### 1. 强制步骤是约束,不是建议
253
+
254
+ ```
255
+ implement-tech-design 执行流
256
+
257
+ 输入标准化
258
+
259
+ 读取方案与上下文
260
+
261
+ ★ 输出实现任务列表 ← 不可跳过
262
+
263
+ ★ 实现前提问确认 ← 不可跳过
264
+
265
+ 按任务列表实现
266
+
267
+ 输出待完成清单与提醒 ← 不可跳过
268
+ ```
269
+
270
+ 建议 → 可以被跳过 · 约束 → 必须明确处理才能继续
271
+
272
+ #### 2. fallback 本身是有程序的 topic
273
+
274
+ ```mermaid
275
+ graph TD
276
+ F[进入 fallback-triage] --> S1{路由是否命中?}
277
+ S1 -->|已命中但上下文不足| EXP[展开依赖主题\n补齐后继续]
278
+ S1 -->|未命中| Q[询问用户:\n这个领域文档是否已录入?]
279
+ Q -->|是| HINT[路由词条缺失\n建议补路由]
280
+ Q -->|否| CHOICE[下钻源码\n或补充 req-docs]
281
+ Q -->|不确定| STOP[停止执行\n等待明确指令]
282
+ ```
283
+
284
+
285
+
286
+ 未命中 ≠ 静默失败 · 降级本身有明确程序
287
+
288
+ #### 3. manifest / index 写权硬约束
289
+
290
+ ```
291
+ 子 agent 可以落盘的 子 agent 不得触碰
292
+ ──────────────────── ────────────────────
293
+ 代码实现文件 manifest-routing.json ← 恒主 agent 落盘
294
+ stock-docs 内容文件 .Knowledge/index.md ← 恒主 agent 落盘
295
+ topics 内容文件(diff 模式)
296
+ matchers/*.json(diff 模式)
297
+ ```
298
+
299
+ 多个子 agent 并行时,共享状态文件由主 agent 单点写入,防止并发冲突
300
+
301
+ #### 4. 文档改动 vs 代码改动,拆分策略不同
302
+
303
+ ```
304
+ 代码子包 文档子包
305
+ ──────────────────── ────────────────────
306
+ ✅ 可下放子 agent 执行 ❌ 默认不拆,主 agent 直接写
307
+ ✅ 子 agent 直接落盘 若确需外包 →
308
+ 子侧只输出 before/after diff 片段
309
+ 主 agent 审核后合并落盘
310
+ ❌ 整文件重写严格禁止
311
+ ```
312
+
313
+ 原因:文档需要保证「现行真值覆盖 / 文风一致 / 禁历史否定堆砌」 · 要求写的人看到全文上下文
314
+
315
+ #### 5. 任务清单与跨会话续作
316
+
317
+ ```
318
+ 关键词自动续作示例
319
+
320
+ 新会话第一句:"支付回调还有个问题"
321
+
322
+ 匹配 todo.json 各条目 keywords
323
+
324
+ 命中 { name: "payment_callback_fix", keywords: ["支付", "回调"] }
325
+
326
+ 加载 task.md(展示剩余步骤)
327
+ linkedSkill = "f2s-kb-fix" → 加载 SKILL.md
328
+
329
+ 技能的落盘规则 / 文风要求 / 自检清单全部恢复
330
+ 用户无需重新描述上下文,直接继续
331
+
332
+ ✅ 不需要说"继续上次任务"
333
+ ✅ 技能约束完整恢复,与首次调用一致
334
+ ```
335
+
336
+ ```
337
+ todo.json 写权约束
338
+
339
+ 主 agent ── 读 / 写 todo.json ✅
340
+ 子 agent ── 读 todo.json ✅
341
+ 子 agent ── 写 todo.json ❌
342
+
343
+ 原因:多子 agent 并行落盘时,并发写会导致条目互相覆盖
344
+ ```
345
+
346
+ 生命周期由技能驱动 · 关键词路由实现跨会话自动续作 · linkedSkill 保证技能约束完整恢复
347
+
348
+ ---
349
+
350
+ ### 四、Agent 编排
351
+
352
+ #### 1. subAgent × switchAgentVerification 正交
353
+
354
+ ```
355
+ switchAgentVerification
356
+ false true
357
+ subAgent ┌────────────┬─────────────────┐
358
+ true → │ 并行执行 │ 并行执行 │
359
+ │ 落盘侧自验 │ 子落盘→主验 │
360
+ │ │ 主落盘→子验 │
361
+ ├────────────┼─────────────────┤
362
+ false → │ 顺序执行 │ 顺序执行 │
363
+ │ 主 agent │ 主 agent 自验 │
364
+ │ 自验 │(无子侧可交叉) │
365
+ └────────────┴─────────────────┘
366
+ ```
367
+
368
+ 两个维度正交 · 独立配置 · 默认左下角
369
+
370
+ #### 2. 确认权不可下放子 agent
371
+
372
+ ```mermaid
373
+ graph LR
374
+ S1[步骤1: 素材汇总] -->|subAgent=true 可并行| SUB[子 agent]
375
+ SUB -->|只读,不落盘| S2
376
+
377
+ S2[步骤2: 输出大纲\n用户确认] -->|必须主 agent| USER[用户]
378
+ USER -->|确认| S3
379
+
380
+ S3[步骤3: 落盘] -->|subAgent=true 可并行| SUB2[子 agent]
381
+ ```
382
+
383
+
384
+
385
+ 用户对话只经过主 agent · 确认决策不可绕过用户 · 子 agent 只做执行不做决策
386
+
387
+ #### 3. 技能可覆盖全局 subAgent 配置
388
+
389
+ ```
390
+ flow2spec.config.json f2s-req-clarify SKILL.md
391
+ subAgent: true 本技能默认不拆子:
392
+ 无论 subAgent 真值,
393
+ 澄清流程全程在主会话
394
+
395
+ 原因:需求澄清强依赖连续同会话追问
396
+ 拆子会断上下文,导致澄清质量下降
397
+ ```
398
+
399
+ 全局配置是允许拆的上限 · 技能自己判断是否适合拆 · 配置 true 不等于一定拆
400
+
401
+ #### 4. f2s-kb-sync 先出大纲,确认后再写
402
+
403
+ ```mermaid
404
+ graph LR
405
+ T[触发 f2s-kb-sync] --> O[输出更新大纲]
406
+ O --> U{用户确认}
407
+ U -->|确认| W[写入 .Knowledge/]
408
+ U -->|修改| O
409
+ U -->|取消| STOP[不写入]
410
+ ```
411
+
412
+
413
+
414
+ 写入是破坏性操作 · 大纲是用户唯一的纠错机会 · 确认前不落盘
415
+
416
+ #### 5. 零输入推断
417
+
418
+ ```
419
+ f2s-kb-sync 三种输入方式
420
+
421
+ 方式 1:用户显式给出能力列表 "帮我把退款状态机同步进知识库"
422
+ 方式 2:用户给辅助材料 @src/refund/ @docs/方案.md
423
+ 方式 3:零输入 "f2s-kb-sync"(仅此一句)
424
+
425
+ Agent 基于会话上下文推断
426
+ 本次实现了什么、有什么值得沉淀
427
+ ```
428
+
429
+ 会话上下文本身就是信息源 · 不需要用户整理再输入
430
+
431
+ #### 5.1 执行开关如何进入 Agent(多端提示)
432
+
433
+ `flow2spec.config.json` 决定 **`subAgent` / `switchAgentVerification` / `changeTracking`**,但各 AI 产品**不保证**会话启动即自动打开该文件。设计上用 **多条弱约束叠加** 降低「未读配置就开跑 `f2s-*`」的概率,同时避免在 `.Knowledge` 再维护一份与 `.codex/topics/f2s-config-check.md` 逐字重复的长文:
434
+
435
+ | 机制 | 设计意图 |
436
+ | --- | --- |
437
+ | **Cursor `f2s-config-check.mdc`** | 规则层强制「技能正文前先 Read」。 |
438
+ | **Claude `f2s-config-inject` PreToolUse** | 在调用 **`f2s-*` Skill** 时注入解析结果;**缺文件 / 坏 JSON / hook 异常**仍输出说明与默认语义,避免静默。 |
439
+ | **Codex `AGENTS.md` + `renderProjectConfigBlock`** | 顶部 **Read** 硬约束 + **init 快照表**(与磁盘不一致时以 Read 为准)。 |
440
+ | **知识库 `config-precheck` 主题** | 路由命中时只提供**摘要**与链向 Codex 长文,**不**替代 Read JSON。 |
441
+
442
+ **权威仍为**项目根 JSON 的 **Read** 结果;各层为提示而非第二份真值源。操作侧完整表格与路径见 **[Flow2Spec使用说明 § 一、`f2s-*` 与 `flow2spec.config.json`](./Flow2Spec使用说明.md)**;口述节奏见 **[Flow2Spec-演讲稿 Slide 13b](./Flow2Spec-演讲稿.md)**。
443
+
444
+ #### 6. 技能不复述统一入口规则,只引用
445
+
446
+ ```
447
+ 每个 SKILL.md 的编排部分写法:
448
+
449
+ subAgent / switchAgentVerification 语义
450
+ 以统一入口为唯一事实源,本处不复述。
451
+
452
+ Cursor/Claude → rules/f2s-flow2spec-unified-entry.*
453
+ Codex → .codex/topics/f2s-flow2spec-unified-entry.md
454
+
455
+ 15 个技能,每个只写自己特有的编排约束
456
+ 公共规则统一在一处定义,修改一处全部生效
457
+ ```
458
+
459
+ ---
460
+
461
+ ### 五、可插拔架构
462
+
463
+ #### 1. 工具可插拔:一份知识,任意组合工具
464
+
465
+ ```
466
+ flow2spec init cursor claude codex ← 三工具全装
467
+ flow2spec init claude ← 只装 Claude
468
+ flow2spec init cursor codex ← 跳过 Claude
469
+
470
+ .Knowledge/ 始终不变,工具随时加减
471
+ ```
472
+
473
+ 同一份 `.Knowledge/` 驱动所有工具 · 加减工具不影响知识内容 · 新工具接入零重建
474
+
475
+ #### 2. 知识主题可插拔:增删不连带
476
+
477
+ ```
478
+ 添加主题 删除主题
479
+ ───────────────────── ─────────────────────
480
+ 1. 写 topics/xxx.md f2s-ctx-rm stock-docs/xxx.md
481
+ 2. 写 matchers/m-xxx.json ↓
482
+ 3. 在 manifest-routing 注册 自动清除 topics/ + manifest
483
+ + index 引用
484
+
485
+ 其他主题完全不受影响
486
+ ```
487
+
488
+ 新主题只需在 `topicDependencies` 里声明依赖 · 不声明则彼此独立 · 删除无副作用
489
+
490
+ #### 3. 技能可插拔:自包含单元,项目级可覆盖包级
491
+
492
+ ```
493
+ 包级技能(随 flow2spec init 分发) 项目级技能(放 配置根/skills/)
494
+
495
+ f2s-kb-sync/SKILL.md my-domain-skill/SKILL.md
496
+ f2s-doc-arch/SKILL.md my-review-skill/SKILL.md
497
+ ...
498
+
499
+ 名字不冲突则共存 · 同名则项目级覆盖包级 · 互不感知
500
+ ```
501
+
502
+ 技能靠 `description` 字段自描述触发词 · 不需要注册表 · 不需要改全局配置 · 上线即生效
503
+
504
+ #### 4. 路由词表可插拔:分片隔离,局部更新
505
+
506
+ 词条变更只改对应 `matchers/m-xxx.json`,其他路由 diff 为零;结构见「[一、路由与上下文加载 → matchers 分片](#matchers-分片不嵌入-manifest)」。
507
+
508
+ 词条变更局部化 · 合并冲突最小化 · 新增路由不影响存量
509
+
510
+ #### 5. 执行模型可插拔:config 按项目切换
511
+
512
+ ```
513
+ flow2spec.config.json
514
+
515
+ subAgent: false → 全程主 agent,低开销,适合小项目
516
+ subAgent: true → 允许拆子并行,适合大规模改动
517
+
518
+ switchAgentVerification: false → 落盘侧自验,日常使用
519
+ switchAgentVerification: true → 交叉校验,高置信度关键场景
520
+
521
+ changeTracking.feat/fix/implement: false → 不创建任务清单
522
+ changeTracking.feat/fix/implement: true → 对应技能执行时自动创建任务清单,支持跨会话续作
523
+
524
+ 三个维度正交 · 各技能可进一步细化覆盖全局配置
525
+ ```
526
+
527
+ 改一行配置切换执行策略 · 不修改任何技能文件 · 新项目开箱即用,老项目按需升级
528
+
529
+ ---
530
+
531
+ ## 优势与劣势
532
+
533
+ ```
534
+ ✅ 优势 ⚠️ 局限
535
+
536
+ 上下文精准 前期投入:知识要靠技能建起来
537
+ └─ 路由只加载相关文档 规模门槛:小项目开销 > 收益
538
+
539
+ 跨工具共享 需要团队纪律
540
+ └─ 知识写一份,三工具都用 └─ 技能只降低摩擦,不消灭摩擦
541
+
542
+ 工具无关 学习曲线
543
+ └─ 换工具不重建知识 └─ stock/req 边界、路由结构不直觉
544
+
545
+ 可持续
546
+ └─ 维护绑定开发动作
547
+ ```
548
+
549
+ ---
550
+
551
+ ## 适合谁
552
+
553
+ ```
554
+ 项目规模
555
+ 小 ◄──────────► 大
556
+ ┌──────────┬────────────┐
557
+ 短期 │ 不需要 │ 可以用 │
558
+ ├──────────┼────────────┤
559
+ 长期 │ 可以用 │ 强烈推荐 │
560
+ └──────────┴────────────┘
561
+
562
+ 同时满足:有规模 · 长期迭代 · 多工具或多人 AI 协作
563
+ ```
564
+
565
+ ---
566
+
567
+ ## 相关文档
568
+
569
+ - [Flow2Spec使用说明](./Flow2Spec使用说明.md)
570
+ - [README-命令说明](./README-命令说明.md)
571
+ - [README-体系与原理](./README-体系与原理.md)
572
+ - [Flow2Spec-使用案例-模拟对话](./Flow2Spec-使用案例-模拟对话.md)
573
+ - [Flow2Spec-演讲稿](./Flow2Spec-演讲稿.md)
574
+