@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.
- package/README.md +100 -42
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +9 -8
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/global.js +1 -1
- package/dist/commands/global.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +1 -37
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +3 -1
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/codex.d.ts +10 -0
- package/dist/generators/codex.d.ts.map +1 -0
- package/dist/generators/codex.js +178 -0
- package/dist/generators/codex.js.map +1 -0
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +0 -1
- package/dist/generators/copilot.js.map +1 -1
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +36 -7
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts +55 -0
- package/dist/generators/custom.d.ts.map +1 -0
- package/dist/generators/custom.js +166 -0
- package/dist/generators/custom.js.map +1 -0
- package/dist/generators/index.d.ts +1 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +10 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/utils/config.d.ts +38 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +2 -1
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +1 -1
- package/schemas/harness-schema.yaml +178 -53
- package/schemas/knowledge-schema.yaml +111 -1
- package/templates/agents/modus-analyst.md +1 -1
- package/templates/behavior-guard.md +165 -0
- package/templates/commands/auto.md +61 -25
- package/templates/commands/commit.md +63 -0
- package/templates/commands/harness.md +97 -30
- package/templates/commands/init.md +43 -10
- package/templates/commands/modus.md +55 -28
- package/templates/commands/plan.md +60 -18
- package/templates/commands/spec.md +69 -25
- package/templates/commands/upgrade.md +54 -0
- package/templates/commands/vibe.md +56 -6
- package/templates/knowledge-catalog.md +74 -32
- package/templates/skills/modus-agents/analyst/SKILL.md +18 -3
- package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
- package/templates/skills/modus-agents/designer/SKILL.md +104 -92
- package/templates/skills/modus-agents/developer/SKILL.md +107 -66
- package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
- package/templates/skills/modus-agents/reviewer/SKILL.md +61 -11
- package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
- package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
- package/templates/skills/modus-agents/tester/SKILL.md +100 -54
- package/templates/skills/modus-auto/SKILL.md +581 -109
- package/templates/skills/modus-design-brief/SKILL.md +45 -19
- package/templates/skills/modus-harness/SKILL.md +150 -85
- package/templates/skills/modus-init/SKILL.md +1145 -319
- package/templates/skills/modus-plan/SKILL.md +125 -48
- package/templates/skills/modus-platform/SKILL.md +271 -0
- package/templates/skills/modus-spec/SKILL.md +175 -331
- 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-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
**落盘模式(
|
|
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/
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
###
|
|
331
|
+
### spec 模式调用方式
|
|
307
332
|
|
|
308
|
-
在 Step
|
|
333
|
+
在 modus-spec Step 7-3 中直接调用本 Skill,传入以下参数:
|
|
309
334
|
```
|
|
310
|
-
output_path: modus/
|
|
311
|
-
|
|
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
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
34
|
-
|
|
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 文件头部附加一个机器可读的
|
|
42
|
+
每个 SubAgent 的产出物 Markdown 文件头部附加一个机器可读的 YAML frontmatter,供 Orchestrator 和下游 SubAgent 精准解析,**无需读取整份文档**即可决策:
|
|
41
43
|
|
|
42
44
|
```markdown
|
|
43
|
-
|
|
45
|
+
---
|
|
46
|
+
schema_version: "1.1"
|
|
44
47
|
agent: "01-analysis"
|
|
48
|
+
run_id: "20260518-200034"
|
|
45
49
|
story_id: "{story-id}"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
- "
|
|
54
|
-
|
|
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
|
|
66
|
+
### Step 1:项目宪法 + 前置检查
|
|
67
67
|
|
|
68
68
|
**读取 constitution:**
|
|
69
|
-
读取 `modus/config.yaml`
|
|
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/
|
|
86
|
-
|
|
85
|
+
- 创建工作目录:`modus/stories/{story-id}/harness/`
|
|
86
|
+
|
|
87
|
+
**`.harness-state.yaml` 断点续跑机制(优先级高于 HANDOFF 块探测):**
|
|
87
88
|
|
|
88
|
-
|
|
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. [重点关注]
|
|
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
|
|
152
|
+
### Step 3:INIT——知识注入
|
|
119
153
|
|
|
120
154
|
**Level 1 → Level 2 加载:**
|
|
121
155
|
基于用户确认的业务域,调用 SubAgent 00(模式 B:增量更新):
|
|
122
156
|
- 已有 Skill → 更新至最新代码状态,获取最新内容
|
|
123
|
-
- 未有 Skill → 新建(模式 A),初始
|
|
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/
|
|
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
|
|
144
|
-
SubAgent
|
|
145
|
-
↓ 产出
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
150
|
-
SubAgent
|
|
151
|
-
SubAgent
|
|
152
|
-
↓ Gate B:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
↓
|
|
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
|
|
167
|
-
| Gate
|
|
168
|
-
| Gate
|
|
169
|
-
| Gate
|
|
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
|
|
176
|
-
- 重入后重新执行:
|
|
213
|
+
- SubAgent 07 完成后若 HANDOFF.issues 含 P1/P2 → 从 issues 中定位受影响的 Sprint → 精准重入 SubAgent 03
|
|
214
|
+
- 重入后重新执行:03 → Gate A → 04/05/06 → 07(完整验证)
|
|
177
215
|
- 连续 3 次重入仍有 P1/P2 → 暂停流程,上报用户,请求人工介入
|
|
178
216
|
|
|
179
|
-
|
|
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
|
|
224
|
+
SubAgent 08 完成后(进入 Human Final Review 等待阶段),调用 SubAgent 00(模式 D:知识提取):
|
|
182
225
|
|
|
183
226
|
```
|
|
184
227
|
[ARCHIVE 阶段启动]
|
|
185
|
-
产物范围: 01-analysis.md + 02-
|
|
186
|
-
|
|
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:新增事件驱动架构决策(来自
|
|
193
|
-
- [pitfall] biz-order:批量审批超 50 条时需分批处理(来自
|
|
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
|
-
-
|
|
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
|
|
207
|
-
✅ SubAgent
|
|
208
|
-
🔄 SubAgent
|
|
209
|
-
⏳ 并行等待
|
|
210
|
-
❌ Gate A 失败 → 重入 SubAgent
|
|
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
|
-
| 修改任何业务代码 |
|
|
244
|
-
| 分析 TAPD 需求内容 |
|
|
245
|
-
| 生成设计方案或询问架构决策 |
|
|
246
|
-
| 对代码质量发表意见 |
|
|
247
|
-
| 执行测试或验证逻辑 |
|
|
248
|
-
| 操作部署流程 |
|
|
249
|
-
| 更新 Skill 文件 |
|
|
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/
|
|
256
|
-
2. 只需读各文件的 HANDOFF
|
|
257
|
-
3. 检查当前阶段的 Gate 条件是否满足(优先读 HANDOFF
|
|
258
|
-
- Gate A0
|
|
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
|
|
325
|
+
- 调用 SubAgent 03 时,必须同时传入 `02-design-brief.md` 内容
|
|
261
326
|
5. Gate 失败 → 按规则处理(重入/上报)
|
|
262
327
|
6. 输出本轮进度卡片
|
|
263
|
-
7. 若 SubAgent
|
|
264
|
-
8. 等待 SubAgent
|
|
328
|
+
7. 若 SubAgent 08 完成且 `08-deploy-status.md` HANDOFF `artifact_status = complete` → 触发 ARCHIVE 知识提取(SubAgent 00 模式 D),进入 Step 4
|
|
329
|
+
8. 等待 SubAgent 写入产出物,重复步骤 1
|