@modus-ai/modus 0.2.4 → 0.2.6

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 (75) hide show
  1. package/README.md +100 -42
  2. package/dist/cli/index.js +2 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +9 -8
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/global.js +1 -1
  8. package/dist/commands/global.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +37 -7
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/status.js +2 -2
  13. package/dist/generators/claude.d.ts.map +1 -1
  14. package/dist/generators/claude.js +1 -37
  15. package/dist/generators/claude.js.map +1 -1
  16. package/dist/generators/codebuddy.d.ts.map +1 -1
  17. package/dist/generators/codebuddy.js +3 -1
  18. package/dist/generators/codebuddy.js.map +1 -1
  19. package/dist/generators/codex.d.ts +10 -0
  20. package/dist/generators/codex.d.ts.map +1 -0
  21. package/dist/generators/codex.js +178 -0
  22. package/dist/generators/codex.js.map +1 -0
  23. package/dist/generators/copilot.d.ts.map +1 -1
  24. package/dist/generators/copilot.js +0 -1
  25. package/dist/generators/copilot.js.map +1 -1
  26. package/dist/generators/cursor.d.ts.map +1 -1
  27. package/dist/generators/cursor.js +36 -7
  28. package/dist/generators/cursor.js.map +1 -1
  29. package/dist/generators/custom.d.ts +55 -0
  30. package/dist/generators/custom.d.ts.map +1 -0
  31. package/dist/generators/custom.js +166 -0
  32. package/dist/generators/custom.js.map +1 -0
  33. package/dist/generators/index.d.ts +1 -0
  34. package/dist/generators/index.d.ts.map +1 -1
  35. package/dist/generators/index.js +10 -0
  36. package/dist/generators/index.js.map +1 -1
  37. package/dist/utils/config.d.ts +38 -1
  38. package/dist/utils/config.d.ts.map +1 -1
  39. package/dist/utils/config.js +10 -2
  40. package/dist/utils/config.js.map +1 -1
  41. package/dist/utils/file-system.d.ts.map +1 -1
  42. package/dist/utils/file-system.js +2 -1
  43. package/dist/utils/file-system.js.map +1 -1
  44. package/package.json +1 -1
  45. package/schemas/harness-schema.yaml +178 -53
  46. package/schemas/knowledge-schema.yaml +111 -1
  47. package/templates/agents/modus-analyst.md +1 -1
  48. package/templates/behavior-guard.md +165 -0
  49. package/templates/commands/auto.md +61 -25
  50. package/templates/commands/commit.md +63 -0
  51. package/templates/commands/harness.md +97 -30
  52. package/templates/commands/init.md +43 -10
  53. package/templates/commands/modus.md +55 -28
  54. package/templates/commands/plan.md +60 -18
  55. package/templates/commands/spec.md +69 -25
  56. package/templates/commands/upgrade.md +54 -0
  57. package/templates/commands/vibe.md +56 -6
  58. package/templates/knowledge-catalog.md +74 -32
  59. package/templates/skills/modus-agents/analyst/SKILL.md +18 -3
  60. package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
  61. package/templates/skills/modus-agents/designer/SKILL.md +104 -92
  62. package/templates/skills/modus-agents/developer/SKILL.md +107 -66
  63. package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
  64. package/templates/skills/modus-agents/reviewer/SKILL.md +61 -11
  65. package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
  66. package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
  67. package/templates/skills/modus-agents/tester/SKILL.md +100 -54
  68. package/templates/skills/modus-auto/SKILL.md +581 -109
  69. package/templates/skills/modus-design-brief/SKILL.md +45 -19
  70. package/templates/skills/modus-harness/SKILL.md +150 -85
  71. package/templates/skills/modus-init/SKILL.md +1145 -319
  72. package/templates/skills/modus-plan/SKILL.md +125 -48
  73. package/templates/skills/modus-platform/SKILL.md +271 -0
  74. package/templates/skills/modus-spec/SKILL.md +175 -331
  75. package/templates/skills/modus-vibe/SKILL.md +256 -55
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: modus-design-brief
3
- description: 在代码开发前生成结构化的设计方案(design-brief),将需求分析信息转化为 LLM 可直接消费的实现指南。由 modus-plan、modus-spec 内部调用(落盘为 design-brief.md),或由 modus-vibe 内联调用(注入上下文,不落盘)。触发条件:plan/spec/vibe Skill 内部 Step 6 调用,或用户直接运行 @modus-design-brief。
3
+ description: 在代码开发前生成结构化的设计方案(design-brief),将需求分析信息转化为 LLM 可直接消费的实现指南。由 modus-spec 内部调用(落盘为 design-brief.md)或 modus-harness 中 designer SubAgent 调用(落盘为 01.5-design-brief.md),或由 modus-vibe 内联调用(注入上下文,不落盘)。注:modus-plan 不直接调用本 Skill 落盘,而是通过 vibe 内联调用。触发条件:spec/harness/vibe Skill 内部 Step 6 调用,或用户直接运行 @modus-design-brief。
4
4
  allowed-tools: Read, Write, Glob, Bash
5
5
  disable: false
6
6
  ---
@@ -23,9 +23,17 @@ disable: false
23
23
 
24
24
  按优先级读取以下输入(调用方已传入的直接使用,未传入的自行读取):
25
25
 
26
- **需求分析文档(必读,二选一):**
27
- - harness 模式:读取 `modus/plans/active/{story-id}/01-analysis.md`
28
- - plan/spec/vibe 模式:读取调用方目录下的 `proposal.md`,若存在同级 `specs/*/spec.md` 也一并读取
26
+ **需求分析文档(必读,三选一,根据 `mode` 参数判断):**
27
+
28
+ | `mode` | 来源类型 | 处理方式 |
29
+ |----------|---------|---------|
30
+ | `harness` | 文件路径 | 读取 `modus/stories/{story-id}/harness/01-analysis.md`(v3.2 路径)|
31
+ | `spec` | 文件路径 | 读取调用方目录下的 `proposal.md`;若存在同级 `specs/*/spec.md` 也一并读取 |
32
+ | `vibe` | 运行时字符串 | `analysis_doc` 参数是调用方直接传入的「用户意图摘要」字符串,**不读取任何文件**;直接将此字符串作为需求描述,与 Step 5 加载的 Skill 内容结合生成设计方案 |
33
+
34
+ > **vibe 模式说明**:`/modus:vibe` 没有 proposal.md,调用方(modus-vibe Step 6)直接将用户 prompt + Step 4 确认的意图摘要作为 `analysis_doc` 参数传入。design-brief 在 vibe 模式下不落盘(产出物注入 LLM 上下文,而非写入文件)。
35
+ >
36
+ > **关于 modus-plan**:modus-plan 不直接调用本 Skill 落盘,而是通过 Build 触发 modus-vibe,由 vibe Step 6 以 `mode: vibe` 内联调用。如需为 plan 产出显式的 design-brief.md,请在编码完成后手动运行 `@modus-design-brief`,传入 `plan.md` 作为需求上下文,并指定 `mode: spec`。
29
37
 
30
38
  **项目宪法(必读):**
31
39
  - 读取 `modus/config.yaml`,提取 `constitution` 字段(`tech_stack`、`hard_rules`、`key_patterns`)
@@ -42,6 +50,7 @@ disable: false
42
50
  - 只问会显著影响设计方案的决策(影响实体结构、接口签名、事务边界)
43
51
  - 若 Skill 中已有 `[decision]` 明确记录相关决策,跳过此类问题
44
52
  - 若需求文档中已明确指定技术方案,跳过此步
53
+ - **若调用方(plan/spec)已在 proposal.md 或澄清阶段中明确记录了相关架构决策,跳过对应问题**(避免重复提问);判断方式:读取 `proposal.md` 的「技术方案」或「架构决策」章节,若已覆盖该决策点则跳过,并在输出中注明「已采用 proposal.md 中的决策:{内容}」
45
54
 
46
55
  **典型问题类型:**
47
56
  ```
@@ -94,12 +103,14 @@ disable: false
94
103
 
95
104
  ### Step 4:写入或内联输出
96
105
 
97
- **落盘模式(plan / spec / harness):**
106
+ **落盘模式(spec / harness):**
98
107
 
99
108
  将生成内容写入调用方指定路径:
100
109
  - plan 模式:`modus/plans/{name}/design-brief.md`
101
- - spec 模式:`modus/changes/{name}/design-brief.md`
102
- - harness 模式:`modus/plans/active/{story-id}/01.5-design-brief.md`
110
+ - spec 模式:`modus/changes/{name}/design-brief.md`(gate_status 写 `passed`,此模式无 Gate 检查)
111
+ - harness 模式:`modus/stories/{story-id}/harness/02-design-brief.md`
112
+ - **gate_status 必须由 `modus-designer` SubAgent 在 Step 4 后动态评估并填写**(见 `modus-harness-agents/01-5-design/SKILL.md` 的 gate_status 赋值规则)
113
+ - 固定写 `passed` 将使 Gate A0.5 失效,严禁在 harness 模式下硬编码该字段
103
114
 
104
115
  写入后输出确认:
105
116
  ```
@@ -107,6 +118,8 @@ disable: false
107
118
  路径: {文件路径}
108
119
  ```
109
120
 
121
+ > **注:modus-plan 不调用本 Skill 落盘。** modus-plan 通过 Build 触发 modus-vibe,vibe Step 6 内联调用本 Skill(mode: vibe)生成设计方案,不产生落盘文件。
122
+
110
123
  **内联模式(vibe):**
111
124
 
112
125
  以分隔线包裹,直接追加到当前对话上下文中,不写入任何文件:
@@ -128,19 +141,31 @@ disable: false
128
141
  ## 产出物格式(design-brief.md)
129
142
 
130
143
  ```markdown
131
- # Design Brief: {功能名称}
132
-
133
- <!--HANDOFF
134
- agent: "01.5-design"
144
+ ---
145
+ schema_version: "1.1"
146
+ agent: "02-design"
147
+ run_id: "{YYYYMMDD}-{story_id_prefix}"
135
148
  story_id: "{story-id}"
149
+ task_id: ""
136
150
  domains: ["{domain1}", "{domain2}"]
151
+ gate_status: "passed"
152
+ artifact_status: "complete"
153
+ issues: []
154
+ skill_refs: []
137
155
  design_decisions:
138
156
  - "{决策1}"
139
157
  - "{决策2}"
140
158
  key_entities: ["{Entity1}", "{Entity2}"]
141
159
  api_contracts: ["{方法签名1}", "{方法签名2}"]
142
- gate_status: "passed"
143
- -->
160
+ gate_status: "{passed|warning|failed}"
161
+ # gate_status 赋值规则(由调用方 modus-designer SubAgent 动态填写,不可固定为 passed):
162
+ # passed — 所有架构决策已确认,设计方案完整无歧义
163
+ # warning — 存在低风险未确认点,不阻塞开发
164
+ # failed — 存在高风险未确认点或用户答复后仍有歧义,Orchestrator 将重入本 SubAgent
165
+ # 注:plan/spec/vibe 模式调用时此字段不参与 Gate 检查,默认写 passed 即可
166
+ ---
167
+
168
+ # Design Brief: {功能名称}
144
169
 
145
170
  ## 1. 基本信息
146
171
 
@@ -303,13 +328,12 @@ public enum {EnumName} {
303
328
 
304
329
  ## 调用方集成说明
305
330
 
306
- ### plan / spec 模式调用方式
331
+ ### spec 模式调用方式
307
332
 
308
- 在 Step 6 中,直接调用本 Skill,传入以下参数:
333
+ modus-spec Step 7-3 中直接调用本 Skill,传入以下参数:
309
334
  ```
310
- output_path: modus/plans/{name}/design-brief.md # plan 模式
311
- output_path: modus/changes/{name}/design-brief.md # spec 模式
312
- mode: plan | spec
335
+ output_path: modus/changes/{name}/design-brief.md # spec 模式,落盘为 design-brief.md
336
+ mode: spec
313
337
  analysis_doc: {proposal.md 路径}
314
338
  business_skills: [{已加载的 Skill 内容}]
315
339
  constitution: {constitution 字段内容}
@@ -319,6 +343,8 @@ constitution: {constitution 字段内容}
319
343
 
320
344
  传入 `mode: vibe`,Skill 不执行 Step 4 的写文件操作,仅在对话输出中内联展示设计方案块。
321
345
 
346
+ > **注:modus-plan 不直接调用本 Skill 落盘。** modus-plan 通过 Build 触发 modus-vibe,vibe Step 6 会根据复杂度内联调用本 Skill(mode: vibe)生成设计方案。如需为 plan 产出显式的 design-brief.md,请在 vibe 编码完成后手动运行 `@modus-design-brief`。
347
+
322
348
  ### harness 模式调用方式
323
349
 
324
- 由 SubAgent 01.5 独立执行(见 `modus-agents/designer/SKILL.md`),输入为 `01-analysis.md`,输出为 `01.5-design-brief.md` 含 HANDOFF 块。
350
+ 由 SubAgent 02(设计阶段,原 01.5)独立执行(见 `modus-harness-agents/01-5-design/SKILL.md`),输入为 `modus/stories/{story-id}/harness/01-analysis.md`,输出为 `modus/stories/{story-id}/harness/02-design-brief.md` 含 HANDOFF 块(`agent: "02-design"`)。
@@ -19,54 +19,54 @@ disable: false
19
19
 
20
20
  ## SubAgent 清单与 Token 预算
21
21
 
22
- | ID | Skill 路径 | 职责 | 产出物 | 知识查询预算 |
23
- |----|-----------|------|--------|------------|
24
- | 00 | `modus-skill-creator` | Skills 更新/知识提取 | Skill 文件 + catalog | 无限制 |
25
- | 01 | `modus-analyst` | 需求分析 | `01-analysis.md` | ≤ 3 个 Skill 文件 |
26
- | 01.5 | `modus-designer` | 设计方案生成 | `01.5-design-brief.md` | 3 Skill 文件 |
27
- | 02 | `modus-developer` | 代码开发 | `02-sprint-contract.md` | ≤ 5 个 Skill 文件 + ≤ 10 个代码文件 |
28
- | 03 | `modus-tester` | 代码测试 | `03-test-report.md` | ≤ 2 个 Skill 文件 |
29
- | 04 | `modus-perf-auditor` | 性能审计 | `04-perf-report.md` | ≤ 2 个 Skill 文件 |
30
- | 05 | `modus-security-auditor` | 安全审计 | `05-security-report.md` | ≤ 2 个 Skill 文件 |
31
- | 06 | `modus-reviewer` | 代码评审 | `cr-report.md` | ≤ 1 个团队约定 Skill |
32
- | 07 | `modus-deployer` | 部署发布 | `07-deploy-status.md` | ≤ 1 个 Skill 文件 |
33
-
34
- **预算原则:** SubAgent 超出预算时,应优先读 maturity 更高的 Skill;若 catalog 中某 Skill 标注 `⚠️` 可能过时,优先读最新代码而非该 Skill
22
+ > **命名说明:** SubAgent ID(调度用)与 Skill 文件名中的编号存在偏移,原因是 SubAgent 02(设计阶段)对应 `modus-harness-01-5-design`(插入在 01 和 02 之间),导致后续 Skill 文件名编号均比 SubAgent ID 1。HANDOFF `agent` 值以 SubAgent ID 为基准(见 `protocol.md` §六 三方映射表)。
23
+
24
+ | SubAgent ID | Skill 路径 | HANDOFF agent | 职责 | 产出物 | 知识查询预算 |
25
+ |-------------|-----------|-----------------|------|--------|------------|
26
+ | 00 | `modus-harness-00-skills-builder` | `00-skills-builder` | Skills 更新/知识提取 | Skill 文件 + catalog | 无限制 |
27
+ | 01 | `modus-harness-01-analysis` | `01-analysis` | 需求分析 | `01-analysis.md` | ≤ 3 个 Skill 文件 |
28
+ | 02 | `modus-harness-01-5-design` | `02-design` | 设计方案生成 | `02-design-brief.md` | ≤ 3 个 Skill 文件 |
29
+ | 03 | `modus-harness-02-dev` | `03-dev` | 代码开发 | `03-sprint-contract.md` | ≤ 5 个 Skill 文件 + ≤ 10 个代码文件 |
30
+ | 04 | `modus-harness-03-test` | `04-test` | 代码测试 | `04-test-report.md` | ≤ 2 个 Skill 文件 |
31
+ | 05 | `modus-harness-04-perf` | `05-perf` | 性能审计 | `05-perf-report.md` | ≤ 2 Skill 文件 |
32
+ | 06 | `modus-harness-05-security` | `06-security` | 安全审计 | `06-security-report.md` | ≤ 2 个 Skill 文件 |
33
+ | 07 | `modus-harness-06-review` | `07-review` | 代码评审 | `cr-report.md` | ≤ 1 个团队约定 Skill |
34
+ | 08 | `modus-harness-07-deploy` | `08-deploy` | 部署发布 | `08-deploy-status.md` | 1 个 Skill 文件 |
35
+
36
+ **预算原则:** SubAgent 超出预算时,应优先读 status 更高(proven > verified > draft)的 Skill;若 catalog 中某 Skill 标注 `⚠️` 可能过时,优先读最新代码而非该 Skill。
35
37
 
36
38
  ---
37
39
 
38
40
  ## 结构化产物交接格式(HANDOFF 协议)
39
41
 
40
- 每个 SubAgent 的产出物 Markdown 文件头部附加一个机器可读的 `HANDOFF` 块,供 Orchestrator 和下游 SubAgent 精准解析,**无需读取整份文档**即可决策:
42
+ 每个 SubAgent 的产出物 Markdown 文件头部附加一个机器可读的 YAML frontmatter,供 Orchestrator 和下游 SubAgent 精准解析,**无需读取整份文档**即可决策:
41
43
 
42
44
  ```markdown
43
- <!--HANDOFF
45
+ ---
46
+ schema_version: "1.1"
44
47
  agent: "01-analysis"
48
+ run_id: "20260518-200034"
45
49
  story_id: "{story-id}"
46
- domains: ["order", "payment"]
47
- sprint_count: 3
48
- risk_level: "medium" # low | medium | high
49
- key_constraints:
50
- - "不能修改 OrderStatus 枚举"
51
- - "需要兼容 v1 接口"
50
+ task_id: ""
51
+ domains: ["biz-track", "biz-album"]
52
+ gate_status: "passed"
53
+ artifact_status: "complete"
54
+ issues: []
52
55
  skill_refs:
53
- - "modus-biz-order@v3.1.0"
54
- - "modus-team-conventions@v1.2.0"
55
- gate_status: "passed" # passed | failed | pending
56
- issues: [] # P1/P2 问题列表(cr-report 专用)
57
- -->
56
+ - "biz-track@v2.1"
57
+ ---
58
58
  ```
59
59
 
60
- Orchestrator 每步只需读 HANDOFF 块(≤ 20 行),而非整份 MD 文件,大幅节省 token。
60
+ Orchestrator 每步只需读 HANDOFF 块(≤ 20 行),而非整份 MD 文件,大幅节省 token。完整字段说明见 `modus/docs/protocol.md` schema v1.1
61
61
 
62
62
  ---
63
63
 
64
64
  ## 执行流程
65
65
 
66
- ### Step 0:项目宪法 + 前置检查
66
+ ### Step 1:项目宪法 + 前置检查
67
67
 
68
68
  **读取 constitution:**
69
- 读取 `modus/config.yaml` `constitution` 字段,将 `hard_rules` 传递给所有 SubAgent 作为硬性约束。
69
+ 读取 `{project}/modus/config.yaml`(即当前项目根目录下的 `modus/config.yaml`,多项目 workspace 需先通过 `workspace-catalog.md` 确认项目路径,如 `operations-job/modus/config.yaml`)的 `constitution` 字段,将 `hard_rules` 传递给所有 SubAgent 作为硬性约束。SubAgent 直接使用 Orchestrator 传入的 constitution 内容,无需独立解析路径。
70
70
 
71
71
  **检查业务 Skill:**
72
72
  读取 `modus/knowledge-catalog.md`(Level 1 加载):
@@ -80,12 +80,46 @@ A. 现在运行快速初始化(推荐,约 3-5 分钟)
80
80
  B. 强制继续(无业务上下文,风险较高)
81
81
  ```
82
82
 
83
- **解析 Story ID:**
83
+ **解析 Story ID + 初始化状态追踪:**
84
84
  - 从 TAPD URL 提取 Story ID(格式:`tapd.cn/{project}/stories/view/{id}`)
85
- - 创建工作目录:`modus/plans/active/{story-id}/`
86
- - 扫描目录,若存在部分产出物(含 HANDOFF 块),从断点处继续
85
+ - 创建工作目录:`modus/stories/{story-id}/harness/`
86
+
87
+ **`.harness-state.yaml` 断点续跑机制(优先级高于 HANDOFF 块探测):**
87
88
 
88
- ### Step 1:澄清意图(仅全新流程)⏸️ 【人工交互节点】
89
+ 检查工作目录下是否存在 `.harness-state.yaml`;若存在部分产出物(含 HANDOFF frontmatter),也可从断点处继续。
90
+
91
+ ```yaml
92
+ # 示例:modus/stories/{story-id}/harness/.harness-state.yaml
93
+ story_id: "{story-id}"
94
+ loop: 1 # 当前 Loop 轮次(1 或 2)
95
+ # SubAgent ID 约定:00=INIT 阶段、01/02/03/04/05/06/07/08 为主流程;00-ARCHIVE=ARCHIVE 阶段
96
+ completed_agents: ["00-INIT", "01", "02", "03", "04"] # 已成功完成的 SubAgent ID
97
+ current_agent: "05" # 当前正在执行的 SubAgent(空=未开始/全部完成)
98
+ loop2_triggers: [] # Loop 2 触发的 P1/P2 问题列表
99
+ last_updated: "2026-01-01T12:00:00"
100
+ ```
101
+
102
+ **断点续跑逻辑:**
103
+ ```
104
+ .harness-state.yaml 存在
105
+ → 读取 completed_agents 列表
106
+ → 跳过已完成的 SubAgent(即使其产出物文件存在也不重新执行)
107
+ → 从 current_agent 或第一个未完成的 SubAgent 继续
108
+ → 若 current_agent 非空(说明上次中途失败),重新执行该 SubAgent
109
+
110
+ .harness-state.yaml 不存在
111
+ → 扫描目录,若存在部分产出物(含 HANDOFF frontmatter),以 HANDOFF 块降级判断断点
112
+ → 全新流程则初始化状态文件(completed_agents: [],loop: 1)
113
+ ```
114
+
115
+ **每个 SubAgent 完成后,立即更新状态文件**(在 Orchestrator 层执行,不依赖 SubAgent 自身):
116
+ ```yaml
117
+ completed_agents: [..., "{刚完成的 subagent_id}"]
118
+ current_agent: "{下一个 subagent_id}"
119
+ last_updated: "{ISO 8601 时间戳}"
120
+ ```
121
+
122
+ ### Step 2:澄清意图(仅全新流程)⏸️ 【人工交互节点】
89
123
 
90
124
  读取 TAPD Story 内容后,在启动 SubAgent 01 之前,先确认关键信息:
91
125
 
@@ -101,7 +135,7 @@ B. 强制继续(无业务上下文,风险较高)
101
135
 
102
136
  3. [技术约束] 有没有特殊要求(如不能修改某接口入参 / 需兼容旧版本)?
103
137
 
104
- 4. [重点关注] 03/04/05 并行审计时,是否有需要特别关注的风险方向?
138
+ 4. [重点关注] 04/05/06 并行审计时,是否有需要特别关注的风险方向?
105
139
  ```
106
140
 
107
141
  等待用户回答后,输出启动摘要:
@@ -115,18 +149,18 @@ B. 强制继续(无业务上下文,风险较高)
115
149
  启动 Harness 流程...
116
150
  ```
117
151
 
118
- ### Step 2:INIT——知识注入
152
+ ### Step 3:INIT——知识注入
119
153
 
120
154
  **Level 1 → Level 2 加载:**
121
155
  基于用户确认的业务域,调用 SubAgent 00(模式 B:增量更新):
122
156
  - 已有 Skill → 更新至最新代码状态,获取最新内容
123
- - 未有 Skill → 新建(模式 A),初始 maturity 为 draft
157
+ - 未有 Skill → 新建(模式 A),初始 status 为 draft
124
158
 
125
159
  将 Skill 内容(已加载的完整 SKILL.md)和 constitution.hard_rules 一起传递给 SubAgent 01 作为背景知识。
126
160
 
127
161
  ```
128
162
  [Harness Orchestrator 启动]
129
- Story: {id} | 工作目录: modus/plans/active/{id}/
163
+ Story: {id} | 工作目录: modus/stories/{id}/harness/
130
164
  知识注入: order[verified→已更新] | payment[proven→已读取] | user[新建 draft]
131
165
  Constitution: {N} 条硬性规则已加载
132
166
  ```
@@ -139,22 +173,25 @@ Constitution: {N} 条硬性规则已加载
139
173
 
140
174
  ```
141
175
  SubAgent 01(需求分析)
142
- ↓ 产出 01-analysis.md(含 HANDOFF 块)
143
- ↓ Gate A0: 01.5-design-brief.md HANDOFF.gate_status {passed, warning}
144
- SubAgent 01.5(设计方案生成)⏸️ 含人工架构决策确认
145
- ↓ 产出 01.5-design-brief.md(含 HANDOFF 块)
146
- SubAgent 02(代码开发)
147
- 产出 02-sprint-contract.md(含 HANDOFF 块)
176
+ ↓ 产出 01-analysis.md(含 HANDOFF frontmatter)
177
+ ↓ Gate A0: 01-analysis.md HANDOFF 块,检查 gate_status = "passed"(需求分析质量门)
178
+ SubAgent 02(设计方案生成)⏸️ 含人工架构决策确认
179
+ ↓ 产出 02-design-brief.md(含 HANDOFF frontmatter)
180
+ Gate A0.5: 读 02-design-brief.md HANDOFF 块,检查 gate_status ∈ {passed, warning}
181
+ SubAgent 03(代码开发)
182
+ ↓ 产出 03-sprint-contract.md(含 HANDOFF frontmatter)
148
183
  ↓ Gate A: 编译验证(项目构建工具编译,exit code = 0)
149
- SubAgent 03(代码测试) ┐
150
- SubAgent 04(性能审计) ├─ 并行启动,等全部完成(各自读取相关 Skill,预算独立)
151
- SubAgent 05(安全审计) ┘
152
- ↓ Gate B: 03/04/05 三份报告全部写入(各含 HANDOFF 块)
153
- SubAgent 06(代码评审)
154
- 产出 cr-report.md(含 HANDOFF 块,issues 字段列出 P1/P2)
155
- Gate C: HANDOFF.issues 为空
156
- SubAgent 07(部署发布)
157
- 产出 07-deploy-status.md
184
+ SubAgent 04(代码测试) ┐
185
+ SubAgent 05(性能审计) ├─ 并行启动,等全部完成(各自读取相关 Skill,预算独立)
186
+ SubAgent 06(安全审计) ┘
187
+ ↓ Gate B: 04/05/06 三份报告全部写入(各含 HANDOFF frontmatter)
188
+ + 各报告 gate_status ≠ "failed"
189
+ + 06 安全报告无严重/高危未修复问题
190
+ SubAgent 07(代码评审)
191
+ 产出 cr-report.md(含 HANDOFF frontmatter,issues 字段列出 P1/P2)
192
+ Gate C: HANDOFF.issues 为空(或全为 P3)
193
+ SubAgent 08(部署发布)
194
+ ↓ 产出 08-deploy-status.md
158
195
  ↓ ARCHIVE 知识提取
159
196
  ↓ Human Final Review
160
197
  ```
@@ -163,38 +200,62 @@ SubAgent 07(部署发布)
163
200
 
164
201
  | Gate | 检查方式 | 失败处理 |
165
202
  |------|---------|---------|
166
- | Gate A0 | 读 `01.5-design-brief.md` HANDOFF 块,检查 `gate_status` {passed, warning} | `failed` 时重入 SubAgent 01.5,最多 2 次 |
167
- | Gate A | 执行 `constitution.build_command`,exit code = 0 | 重入 SubAgent 02,最多 3 次 |
168
- | Gate B | 扫描目录,检查 03/04/05 三个 HANDOFF 文件均存在 | 继续等待,超时上报 |
169
- | Gate C | cr-report.md HANDOFF 块,检查 `issues` 是否为空 | 触发 Loop 2 精准重入 |
203
+ | Gate A0 | 读 `01-analysis.md` HANDOFF 块,检查 `gate_status` = "passed"(需求分析质量门) | `failed` 时重入 SubAgent 01,最多 2 次 |
204
+ | Gate A0.5 | `02-design-brief.md` HANDOFF 块,检查 `gate_status` ∈ {passed, warning} | `failed` 时重入 SubAgent 02,最多 2 次 |
205
+ | Gate A | 执行 `constitution.build_command`,exit code = 0 | 重入 SubAgent 03,最多 3 次 |
206
+ | Gate B | 扫描目录,检查 04/05/06 三个 HANDOFF 文件均存在,且各文件 HANDOFF 块的 `gate_status "failed"`;06(安全审计)报告中若存在严重/高危问题则强制拦截 | 继续等待(文件未齐),超时上报;若 gate_status = "failed" 则重入对应 SubAgent(最多 2 次)|
207
+ | Gate C | 读 cr-report.md 的 HANDOFF 块,检查 `issues` 是否为空(或全为 P3) | 触发 Loop 2 精准重入 |
170
208
 
171
209
  **Gate 检查优先读 HANDOFF 块**,只有当 HANDOFF 块信息不足时才读完整文件。
172
210
 
173
211
  ### Loop 2 规则
174
212
 
175
- - SubAgent 06 完成后若 HANDOFF.issues 含 P1/P2 → 从 issues 中定位受影响的 Sprint → 精准重入 SubAgent 02
176
- - 重入后重新执行:02 → Gate A → 03/04/05 → 06(完整验证)
213
+ - SubAgent 07 完成后若 HANDOFF.issues 含 P1/P2 → 从 issues 中定位受影响的 Sprint → 精准重入 SubAgent 03
214
+ - 重入后重新执行:03 → Gate A → 04/05/0607(完整验证)
177
215
  - 连续 3 次重入仍有 P1/P2 → 暂停流程,上报用户,请求人工介入
178
216
 
179
- ### Step Final:ARCHIVE——知识提取
217
+ **精准重入 Sprint 定位规则:**
218
+ - 优先按 issue 的 `sprint` 字段(整数)定位受影响 Sprint
219
+ - 若 `sprint` 字段缺失或为 0:fallback 为重跑**全量 Sprint**(降级为保守策略)
220
+ - 若同一 Loop 2 中多个 issue 指向不同 Sprint,取 Sprint 编号的**并集**一并重跑
221
+
222
+ ### Step 4(ARCHIVE)——知识提取
180
223
 
181
- SubAgent 07 完成后(进入 Human Final Review 等待阶段),调用 SubAgent 00(模式 D:知识提取):
224
+ SubAgent 08 完成后(进入 Human Final Review 等待阶段),调用 SubAgent 00(模式 D:知识提取):
182
225
 
183
226
  ```
184
227
  [ARCHIVE 阶段启动]
185
- 产物范围: 01-analysis.md + 02-sprint-contract.md + cr-report.md + 07-deploy-status.md
186
- 提取目标: [decision] [guideline] [pitfall] [process]
228
+ 产物范围: 01-analysis.md + 02-design-brief.md + 03-sprint-contract.md + 04-test-report.md
229
+ + 05-perf-report.md + 06-security-report.md + cr-report.md + 08-deploy-status.md
230
+ 提取目标: [decision] [guideline] [pitfall] [process] [invariant]
187
231
  ```
188
232
 
233
+ **各知识类型的典型来源:**
234
+
235
+ | 产出物 | 可提取的知识类型 |
236
+ |--------|---------------|
237
+ | `cr-report.md` 的 P2/P3 | `[pitfall]`(发现的编码反模式)、`[invariant]`(金额/并发/事务的不变量) |
238
+ | `02-design-brief.md` 的架构决策章节 | `[decision]`(技术选型权衡、架构设计决策) |
239
+ | `03-sprint-contract.md` 的架构决策 | `[decision]`(实现层决策)、`[process]`(新增业务流程) |
240
+ | `08-deploy-status.md` 的部署注意事项 | `[guideline]`(上线操作规范) |
241
+ | `01-analysis.md` 的业务规则 | `[invariant]`(系统必须始终为真的业务约束,违反即为 Bug) |
242
+ | `05-perf-report.md` 的高/中风险项 | `[pitfall]`(N+1 查询、大数据量无分页等性能反模式) |
243
+ | `06-security-report.md` 的严重/高危项 | `[pitfall]` `[invariant]`(多租户隔离漏洞、权限缺失等安全反模式,必须提取) |
244
+
189
245
  提取完成后输出知识积累摘要:
190
246
  ```
191
247
  📚 本次 Harness 知识沉淀:
192
- - [decision] tech-wiki:新增事件驱动架构决策(来自 02-sprint-contract)
193
- - [pitfall] biz-order:批量审批超 50 条时需分批处理(来自 04-perf-report)
248
+ - [decision] tech-wiki:新增事件驱动架构决策(来自 03-sprint-contract)
249
+ - [pitfall] biz-order:批量审批超 50 条时需分批处理(来自 05-perf-report)
194
250
  - [guideline] team-conventions:@Transactional + AopContext 组合用法(来自 cr-report P2)
195
- - maturity 更新: modus-biz-order draft→verified(首次工作流验证)
251
+ - [invariant] biz-payment:支付金额必须 > 0 且 ≤ 账户余额,违反即为 Bug(来自 cr-report)
252
+ - status 更新: modus-biz-order draft→verified(首次工作流验证)
196
253
  ```
197
254
 
255
+ **`usage_count` 更新时机(harness 模式):**
256
+
257
+ 在 **ARCHIVE 阶段**(SubAgent 07 部署完成后)对本次 Harness 涉及的每个业务域执行 `usage_count += 1`,并同步更新对应 Skill 的 frontmatter。等待部署完成是因为 usage_count 代表「真实交付的工作流验证次数」,仅通过代码审查(Gate C)不构成完整验证。
258
+
198
259
  ---
199
260
 
200
261
  ## 进度卡片规范
@@ -203,11 +264,11 @@ SubAgent 07 完成后(进入 Human Final Review 等待阶段),调用 SubAg
203
264
 
204
265
  ```
205
266
  ✅ SubAgent 01 完成 → 01-analysis.md(影响范围: N 处 | 风险点: N 个 | domains: order,payment)
206
- ⏸️ SubAgent 01.5 执行中...(等待架构决策确认)
207
- ✅ SubAgent 01.5 完成 → 01.5-design-brief.md(设计决策: N 个 | 追踪矩阵: N 行 | Gate A0: passed)
208
- 🔄 SubAgent 02 执行中...(Sprint 2/3 | token: 3/5 Skill 预算已用)
209
- ⏳ 并行等待 03/04/05(2/3 完成)
210
- ❌ Gate A 失败 → 重入 SubAgent 02(第 N 次)
267
+ ⏸️ SubAgent 02 执行中...(等待架构决策确认)
268
+ ✅ SubAgent 02 完成 → 02-design-brief.md(设计决策: N 个 | 追踪矩阵: N 行 | Gate A0: passed)
269
+ 🔄 SubAgent 03 执行中...(Sprint 2/3 | token: 3/5 Skill 预算已用)
270
+ ⏳ 并行等待 04/05/06(2/3 完成)
271
+ ❌ Gate A 失败 → 重入 SubAgent 03(第 N 次)
211
272
  📚 ARCHIVE 完成 → 提取知识 N 条(decision:1 | pitfall:2 | guideline:1)
212
273
  ─── Loop 1 第 N 轮 | Loop 2 第 N 轮 | 修复问题: N 个 ───
213
274
  ```
@@ -240,25 +301,29 @@ feat: {业务摘要}
240
301
 
241
302
  | 如果发现自己在做… | 立即停止,转交给… |
242
303
  |----------------|----------------|
243
- | 修改任何业务代码 | `modus-developer` |
244
- | 分析 TAPD 需求内容 | `modus-analyst` |
245
- | 生成设计方案或询问架构决策 | `modus-designer` |
246
- | 对代码质量发表意见 | `modus-reviewer` |
247
- | 执行测试或验证逻辑 | `modus-tester` / `modus-perf-auditor` / `modus-security-auditor` |
248
- | 操作部署流程 | `modus-deployer` |
249
- | 更新 Skill 文件 | `modus-skill-creator` |
304
+ | 修改任何业务代码 | SubAgent 03(`modus-harness-02-dev`)|
305
+ | 分析 TAPD 需求内容 | SubAgent 01(`modus-harness-01-analysis`)|
306
+ | 生成设计方案或询问架构决策 | SubAgent 02(`modus-harness-01-5-design`)|
307
+ | 对代码质量发表意见 | SubAgent 07(`modus-harness-06-review`)|
308
+ | 执行测试或验证逻辑 | SubAgent 04/05/06 |
309
+ | 操作部署流程 | SubAgent 08(`modus-harness-07-deploy`)|
310
+ | 更新 Skill 文件 | SubAgent 00(`modus-harness-00-skills-builder`)|
250
311
 
251
312
  ---
252
313
 
253
- ## 调度 CoT(每次行动前执行)
314
+ ## 调度 CoT(每次行动前循环执行)
254
315
 
255
- 1. 扫描 `modus/plans/active/{story-id}/` 目录,列出已有 HANDOFF
256
- 2. 只需读各文件的 HANDOFF 块(≤ 20 行),对照串行顺序确定当前阶段
257
- 3. 检查当前阶段的 Gate 条件是否满足(优先读 HANDOFF,必要时读全文)
258
- - Gate A0:检查 `01.5-design-brief.md` HANDOFF `gate_status` 字段
316
+ 1. 扫描 `modus/stories/{story-id}/harness/` 目录,列出已有 HANDOFF frontmatter
317
+ 2. 只需读各文件的 HANDOFF frontmatter(≤ 20 行),对照串行顺序确定当前阶段
318
+ 3. 检查当前阶段的 Gate 条件是否满足(优先读 HANDOFF,必要时读全文)。**每个 Gate 仅在对应 SubAgent 完成后单独执行,互相独立,不同时触发**:
319
+ - Gate A0:**当 SubAgent 01 写入 `01-analysis.md` 后**,检查该文件 HANDOFF 块的 `gate_status` 字段,确保 = "passed"(需求分析质量门,独立于 Gate A0.5)
320
+ - Gate A0.5:**当 SubAgent 02 写入 `02-design-brief.md` 后**,检查 `gate_status ∈ {passed, warning}`;`failed` 时重入 SubAgent 02,最多 2 次
321
+ - Gate A:执行 `constitution.build_command`(如 `mvn clean compile -q -DskipTests`),检查 exit code = 0;失败时重入 SubAgent 03,最多 3 次
322
+ - Gate B:扫描 harness/ 目录,检查 `04-test-report.md`、`05-perf-report.md`、`06-security-report.md` 的 HANDOFF `artifact_status` 均为 `complete`;各报告 `gate_status ≠ "failed"`;06(安全审计)有严重/高危则强制拦截;超时(30 分钟)上报用户
323
+ - Gate C:读 `cr-report.md` HANDOFF,检查 `issues` 数组为空或全为 P3;有 P1/P2 时从 `issues[].affected_sprint` 定位受影响 Sprint,触发 Loop 2 精准重入 SubAgent 03
259
324
  4. Gate 通过 → 调用下一个 SubAgent 的 Skill(传递 constitution + 相关 Skill 内容)
260
- - 调用 SubAgent 02 时,必须同时传入 `01.5-design-brief.md` 内容
325
+ - 调用 SubAgent 03 时,必须同时传入 `02-design-brief.md` 内容
261
326
  5. Gate 失败 → 按规则处理(重入/上报)
262
327
  6. 输出本轮进度卡片
263
- 7. 若 SubAgent 07 完成 → 触发 ARCHIVE 知识提取(SubAgent 00 模式 D
264
- 8. 等待 SubAgent 写入产出物,重复 Step 2
328
+ 7. 若 SubAgent 08 完成且 `08-deploy-status.md` HANDOFF `artifact_status = complete` → 触发 ARCHIVE 知识提取(SubAgent 00 模式 D),进入 Step 4
329
+ 8. 等待 SubAgent 写入产出物,重复步骤 1